[med-svn] [picard-tools] 03/05: Imported Upstream version 1.138+dfsg.1
Vincent Danjean
vdanjean at debian.org
Mon Sep 7 23:48:13 UTC 2015
This is an automated email from the git hooks/post-receive script.
vdanjean pushed a commit to branch master
in repository picard-tools.
commit 49570153dfb783dad5b1cf43b6c00cda5c0ced4d
Author: Vincent Danjean <vdanjean at debian.org>
Date: Sun Sep 6 23:38:18 2015 +0200
Imported Upstream version 1.138+dfsg.1
---
.dockerignore | 18 +
.gitignore | 6 +-
.travis.yml | 12 +
Dockerfile | 31 +
Picard-public.iml | 40 +-
Picard-public.ipr | 6 +-
README.md | 56 +
build-tribble.xml | 183 -
build.sbt | 142 +
build.xml | 528 +-
project/plugins.sbt | 5 +
src/c/inteldeflater/IntelDeflater.c | 247 -
src/java/net/sf/picard/PicardException.java | 43 -
src/java/net/sf/picard/Test.java | 57 -
.../picard/analysis/AlignmentSummaryMetrics.java | 162 -
.../analysis/AlignmentSummaryMetricsCollector.java | 385 -
.../analysis/CollectAlignmentSummaryMetrics.java | 123 -
.../sf/picard/analysis/CollectGcBiasMetrics.java | 327 -
.../picard/analysis/CollectInsertSizeMetrics.java | 155 -
.../sf/picard/analysis/CollectMultipleMetrics.java | 140 -
.../sf/picard/analysis/CollectRnaSeqMetrics.java | 148 -
.../net/sf/picard/analysis/CollectWgsMetrics.java | 274 -
.../sf/picard/analysis/GcBiasDetailMetrics.java | 63 -
.../sf/picard/analysis/GcBiasSummaryMetrics.java | 56 -
.../net/sf/picard/analysis/InsertSizeMetrics.java | 94 -
.../net/sf/picard/analysis/MeanQualityByCycle.java | 204 -
.../picard/analysis/MetricAccumulationLevel.java | 32 -
.../picard/analysis/QualityScoreDistribution.java | 150 -
src/java/net/sf/picard/analysis/RnaSeqMetrics.java | 111 -
.../sf/picard/analysis/SinglePassSamProgram.java | 158 -
.../analysis/directed/CalculateHsMetrics.java | 87 -
.../analysis/directed/CollectTargetedMetrics.java | 151 -
.../directed/CollectTargetedPcrMetrics.java | 62 -
.../analysis/directed/HsMetricCollector.java | 122 -
.../net/sf/picard/analysis/directed/HsMetrics.java | 194 -
.../directed/InsertSizeMetricsCollector.java | 205 -
.../analysis/directed/RnaSeqMetricsCollector.java | 391 -
.../analysis/directed/TargetMetricsCollector.java | 748 -
.../analysis/directed/TargetedPcrMetrics.java | 119 -
.../directed/TargetedPcrMetricsCollector.java | 58 -
.../sf/picard/annotation/AnnotationException.java | 40 -
src/java/net/sf/picard/annotation/Gene.java | 222 -
.../sf/picard/annotation/GeneAnnotationReader.java | 39 -
.../net/sf/picard/annotation/LocusFunction.java | 33 -
.../net/sf/picard/annotation/RefFlatReader.java | 191 -
.../picard/cmdline/CommandLineParseException.java | 36 -
.../net/sf/picard/cmdline/CommandLineParser.java | 1210 -
.../CommandLineParserDefinitionException.java | 36 -
.../net/sf/picard/cmdline/CommandLineProgram.java | 312 -
.../sf/picard/cmdline/CreateHtmlDocForProgram.java | 44 -
.../cmdline/CreateHtmlDocForStandardOptions.java | 40 -
src/java/net/sf/picard/cmdline/NestedOptions.java | 39 -
src/java/net/sf/picard/cmdline/Option.java | 80 -
.../net/sf/picard/cmdline/PositionalArguments.java | 52 -
.../picard/cmdline/StandardOptionDefinitions.java | 48 -
src/java/net/sf/picard/cmdline/Usage.java | 40 -
src/java/net/sf/picard/fastq/AsyncFastqWriter.java | 20 -
src/java/net/sf/picard/fastq/BamToBfq.java | 93 -
src/java/net/sf/picard/fastq/BamToBfqWriter.java | 441 -
src/java/net/sf/picard/fastq/BasicFastqWriter.java | 88 -
.../sf/picard/fastq/Casava18ReadNameEncoder.java | 46 -
src/java/net/sf/picard/fastq/FastqConstants.java | 32 -
src/java/net/sf/picard/fastq/FastqReader.java | 177 -
src/java/net/sf/picard/fastq/FastqRecord.java | 49 -
src/java/net/sf/picard/fastq/FastqWriter.java | 13 -
.../net/sf/picard/fastq/FastqWriterFactory.java | 31 -
.../sf/picard/fastq/IlluminaReadNameEncoder.java | 28 -
src/java/net/sf/picard/fastq/ReadNameEncoder.java | 17 -
src/java/net/sf/picard/filter/AggregateFilter.java | 79 -
src/java/net/sf/picard/filter/AlignedFilter.java | 87 -
.../net/sf/picard/filter/DuplicateReadFilter.java | 52 -
.../filter/FailsVendorReadQualityFilter.java | 57 -
.../net/sf/picard/filter/FilteringIterator.java | 154 -
src/java/net/sf/picard/filter/IntervalFilter.java | 99 -
.../picard/filter/NotPrimaryAlignmentFilter.java | 54 -
src/java/net/sf/picard/filter/ReadNameFilter.java | 119 -
src/java/net/sf/picard/filter/SamRecordFilter.java | 53 -
.../sf/picard/filter/SecondaryAlignmentFilter.java | 20 -
.../filter/SecondaryOrSupplementaryFilter.java | 32 -
.../net/sf/picard/filter/SolexaNoiseFilter.java | 66 -
src/java/net/sf/picard/filter/TagFilter.java | 85 -
.../sf/picard/filter/WholeReadClippedFilter.java | 64 -
.../sf/picard/illumina/CheckIlluminaDirectory.java | 256 -
.../picard/illumina/ClusterDataToSamConverter.java | 174 -
.../picard/illumina/ExtractIlluminaBarcodes.java | 708 -
.../illumina/IlluminaBasecallsConverter.java | 858 -
.../picard/illumina/IlluminaBasecallsToFastq.java | 459 -
.../sf/picard/illumina/IlluminaBasecallsToSam.java | 525 -
.../sf/picard/illumina/MarkIlluminaAdapters.java | 256 -
.../sf/picard/illumina/parser/BarcodeParser.java | 84 -
.../net/sf/picard/illumina/parser/BclData.java | 30 -
.../net/sf/picard/illumina/parser/BclParser.java | 295 -
.../net/sf/picard/illumina/parser/ClusterData.java | 200 -
.../parser/ClusterIntensityFileReader.java | 213 -
.../illumina/parser/CycleIlluminaFileMap.java | 75 -
.../sf/picard/illumina/parser/FilterParser.java | 82 -
.../illumina/parser/FourChannelIntensityData.java | 103 -
.../sf/picard/illumina/parser/IlluminaData.java | 69 -
.../illumina/parser/IlluminaDataProvider.java | 230 -
.../parser/IlluminaDataProviderFactory.java | 367 -
.../picard/illumina/parser/IlluminaDataType.java | 35 -
.../sf/picard/illumina/parser/IlluminaFileMap.java | 58 -
.../parser/IlluminaFileNotFoundException.java | 44 -
.../picard/illumina/parser/IlluminaFileUtil.java | 256 -
.../illumina/parser/IlluminaMetricsCode.java | 42 -
.../sf/picard/illumina/parser/IlluminaParser.java | 75 -
.../illumina/parser/IlluminaTextIterator.java | 122 -
.../picard/illumina/parser/IntensityChannel.java | 38 -
.../illumina/parser/MultiTileBclFileUtil.java | 115 -
.../picard/illumina/parser/MultiTileBclParser.java | 171 -
.../picard/illumina/parser/MultiTileFileUtil.java | 120 -
.../illumina/parser/MultiTileFilterParser.java | 64 -
.../illumina/parser/MultiTileLocsParser.java | 82 -
.../sf/picard/illumina/parser/MultiTileParser.java | 128 -
.../sf/picard/illumina/parser/OutputMapping.java | 183 -
.../illumina/parser/ParameterizedFileUtil.java | 174 -
.../picard/illumina/parser/PerTileCycleParser.java | 203 -
.../sf/picard/illumina/parser/PerTileFileUtil.java | 78 -
.../sf/picard/illumina/parser/PerTileParser.java | 142 -
.../illumina/parser/PerTilePerCycleFileUtil.java | 268 -
.../net/sf/picard/illumina/parser/PosParser.java | 133 -
src/java/net/sf/picard/illumina/parser/Range.java | 65 -
.../net/sf/picard/illumina/parser/ReadData.java | 96 -
.../sf/picard/illumina/parser/ReadDescriptor.java | 57 -
.../sf/picard/illumina/parser/ReadStructure.java | 358 -
.../net/sf/picard/illumina/parser/ReadType.java | 39 -
src/java/net/sf/picard/illumina/parser/Tile.java | 114 -
.../net/sf/picard/illumina/parser/TileIndex.java | 162 -
.../sf/picard/illumina/parser/TileMetricsUtil.java | 154 -
.../picard/illumina/parser/TilePhasingValue.java | 30 -
.../picard/illumina/parser/TileTemplateRead.java | 32 -
.../illumina/parser/fakers/BarcodeFileFaker.java | 25 -
.../illumina/parser/fakers/BciFileFaker.java | 52 -
.../illumina/parser/fakers/BclFileFaker.java | 30 -
.../illumina/parser/fakers/ClocsFileFaker.java | 25 -
.../picard/illumina/parser/fakers/FileFaker.java | 79 -
.../illumina/parser/fakers/FilterFileFaker.java | 26 -
.../illumina/parser/fakers/LocsFileFaker.java | 28 -
.../parser/fakers/MultiTileBclFileFaker.java | 32 -
.../parser/fakers/MultiTileLocsFileFaker.java | 30 -
.../illumina/parser/fakers/PosFileFaker.java | 25 -
.../AbstractIlluminaPositionFileReader.java | 177 -
.../illumina/parser/readers/BarcodeFileReader.java | 52 -
.../illumina/parser/readers/BclIndexReader.java | 75 -
.../readers/BclQualityEvaluationStrategy.java | 95 -
.../picard/illumina/parser/readers/BclReader.java | 343 -
.../illumina/parser/readers/ClocsFileReader.java | 157 -
.../illumina/parser/readers/FilterFileReader.java | 114 -
.../illumina/parser/readers/LocsFileReader.java | 119 -
.../parser/readers/MMapBackedIteratorFactory.java | 298 -
.../illumina/parser/readers/PosFileReader.java | 89 -
.../parser/readers/TileMetricsOutReader.java | 167 -
src/java/net/sf/picard/io/FastLineReader.java | 171 -
src/java/net/sf/picard/io/IoUtil.java | 686 -
src/java/net/sf/picard/liftover/Chain.java | 410 -
src/java/net/sf/picard/liftover/LiftOver.java | 292 -
src/java/net/sf/picard/metrics/Header.java | 41 -
src/java/net/sf/picard/metrics/MetricBase.java | 128 -
src/java/net/sf/picard/metrics/MetricsFile.java | 521 -
.../net/sf/picard/metrics/MultiLevelCollector.java | 335 -
.../net/sf/picard/metrics/MultilevelMetrics.java | 16 -
.../sf/picard/metrics/PerUnitMetricCollector.java | 58 -
.../sf/picard/metrics/SAMRecordAndReference.java | 22 -
.../SAMRecordAndReferenceMultiLevelCollector.java | 14 -
.../metrics/SAMRecordMultiLevelCollector.java | 13 -
src/java/net/sf/picard/metrics/StringHeader.java | 72 -
src/java/net/sf/picard/metrics/VersionHeader.java | 81 -
src/java/net/sf/picard/pedigree/PedFile.java | 147 -
src/java/net/sf/picard/pedigree/Sex.java | 26 -
.../reference/AbstractFastaSequenceFile.java | 126 -
.../net/sf/picard/reference/ExtractSequences.java | 108 -
.../net/sf/picard/reference/FastaSequenceFile.java | 156 -
.../sf/picard/reference/FastaSequenceIndex.java | 312 -
.../picard/reference/IndexedFastaSequenceFile.java | 263 -
.../net/sf/picard/reference/NormalizeFasta.java | 93 -
.../net/sf/picard/reference/ReferenceSequence.java | 72 -
.../sf/picard/reference/ReferenceSequenceFile.java | 89 -
.../reference/ReferenceSequenceFileFactory.java | 90 -
.../reference/ReferenceSequenceFileWalker.java | 101 -
.../net/sf/picard/sam/AbstractAlignmentMerger.java | 698 -
.../sam/AbstractDuplicateFindingAlgorithm.java | 175 -
src/java/net/sf/picard/sam/AddCommentsToBam.java | 57 -
.../net/sf/picard/sam/AddOrReplaceReadGroups.java | 112 -
src/java/net/sf/picard/sam/BamIndexStats.java | 77 -
.../sam/BestEndMapqPrimaryAlignmentStrategy.java | 101 -
.../BestMapqPrimaryAlignmentSelectionStrategy.java | 95 -
src/java/net/sf/picard/sam/BuildBamIndex.java | 149 -
src/java/net/sf/picard/sam/CleanSam.java | 103 -
.../sf/picard/sam/ComparableSamRecordIterator.java | 92 -
src/java/net/sf/picard/sam/CompareSAMs.java | 515 -
.../sf/picard/sam/CoordinateSortedPairInfoMap.java | 289 -
.../sf/picard/sam/CreateSequenceDictionary.java | 180 -
src/java/net/sf/picard/sam/DiskReadEndsMap.java | 107 -
src/java/net/sf/picard/sam/DownsampleSam.java | 93 -
src/java/net/sf/picard/sam/DuplicationMetrics.java | 203 -
...tFragmentPrimaryAlignmentSelectionStrategy.java | 93 -
.../sf/picard/sam/EstimateLibraryComplexity.java | 487 -
src/java/net/sf/picard/sam/FastqToSam.java | 362 -
src/java/net/sf/picard/sam/FilterSamReads.java | 233 -
src/java/net/sf/picard/sam/FixMateInformation.java | 292 -
src/java/net/sf/picard/sam/GatherBamFiles.java | 97 -
src/java/net/sf/picard/sam/HitsForInsert.java | 283 -
src/java/net/sf/picard/sam/MarkDuplicates.java | 772 -
src/java/net/sf/picard/sam/MergeBamAlignment.java | 285 -
src/java/net/sf/picard/sam/MergeSamFiles.java | 166 -
.../sf/picard/sam/MergingSamRecordIterator.java | 245 -
...stDistantPrimaryAlignmentSelectionStrategy.java | 183 -
.../sf/picard/sam/MultiHitAlignedReadIterator.java | 209 -
.../sam/PrimaryAlignmentSelectionStrategy.java | 37 -
src/java/net/sf/picard/sam/RAMReadEndsMap.java | 72 -
src/java/net/sf/picard/sam/ReadEnds.java | 63 -
src/java/net/sf/picard/sam/ReadEndsCodec.java | 106 -
src/java/net/sf/picard/sam/ReadEndsMap.java | 59 -
src/java/net/sf/picard/sam/ReorderSam.java | 233 -
src/java/net/sf/picard/sam/ReplaceSamHeader.java | 114 -
.../net/sf/picard/sam/ReservedTagConstants.java | 72 -
...RevertOriginalBaseQualitiesAndAddMateCigar.java | 244 -
src/java/net/sf/picard/sam/RevertSam.java | 343 -
src/java/net/sf/picard/sam/SamAlignmentMerger.java | 353 -
.../net/sf/picard/sam/SamFileHeaderMerger.java | 775 -
src/java/net/sf/picard/sam/SamFileValidator.java | 800 -
src/java/net/sf/picard/sam/SamFormatConverter.java | 80 -
src/java/net/sf/picard/sam/SamToFastq.java | 438 -
src/java/net/sf/picard/sam/SortSam.java | 81 -
src/java/net/sf/picard/sam/ValidateSamFile.java | 178 -
src/java/net/sf/picard/sam/ViewSam.java | 108 -
.../net/sf/picard/util/AbstractInputParser.java | 200 -
src/java/net/sf/picard/util/AdapterMarker.java | 341 -
src/java/net/sf/picard/util/AdapterPair.java | 16 -
src/java/net/sf/picard/util/AsyncIterator.java | 170 -
src/java/net/sf/picard/util/BasicInputParser.java | 176 -
src/java/net/sf/picard/util/CigarUtil.java | 289 -
src/java/net/sf/picard/util/ClippingUtility.java | 278 -
src/java/net/sf/picard/util/CsvInputParser.java | 36 -
.../util/DelimitedTextFileWithHeaderIterator.java | 111 -
.../net/sf/picard/util/FastqQualityFormat.java | 36 -
.../sf/picard/util/FileAppendStreamLRUCache.java | 76 -
.../picard/util/FileChannelJDKBugWorkAround.java | 64 -
src/java/net/sf/picard/util/FormatUtil.java | 181 -
src/java/net/sf/picard/util/Histogram.java | 466 -
src/java/net/sf/picard/util/IlluminaUtil.java | 223 -
src/java/net/sf/picard/util/Interval.java | 193 -
src/java/net/sf/picard/util/IntervalList.java | 654 -
.../util/IntervalListReferenceSequenceMask.java | 123 -
src/java/net/sf/picard/util/IntervalListTools.java | 352 -
src/java/net/sf/picard/util/IntervalTree.java | 1227 -
src/java/net/sf/picard/util/IntervalTreeMap.java | 293 -
src/java/net/sf/picard/util/IntervalUtil.java | 76 -
src/java/net/sf/picard/util/IterableAdapter.java | 29 -
.../net/sf/picard/util/IterableOnceIterator.java | 42 -
src/java/net/sf/picard/util/ListMap.java | 48 -
src/java/net/sf/picard/util/Locus.java | 36 -
src/java/net/sf/picard/util/LocusComparator.java | 39 -
src/java/net/sf/picard/util/LocusImpl.java | 49 -
src/java/net/sf/picard/util/Log.java | 211 -
src/java/net/sf/picard/util/MathUtil.java | 277 -
src/java/net/sf/picard/util/MergingIterator.java | 147 -
src/java/net/sf/picard/util/MetricsDoclet.java | 179 -
src/java/net/sf/picard/util/OverlapDetector.java | 119 -
src/java/net/sf/picard/util/PeekableIterator.java | 82 -
src/java/net/sf/picard/util/ProcessExecutor.java | 235 -
src/java/net/sf/picard/util/ProgressLogger.java | 136 -
.../sf/picard/util/QualityEncodingDetector.java | 359 -
src/java/net/sf/picard/util/QualityUtil.java | 78 -
src/java/net/sf/picard/util/RExecutor.java | 111 -
.../net/sf/picard/util/ReferenceSequenceMask.java | 55 -
.../net/sf/picard/util/ResourceLimitedMap.java | 105 -
.../sf/picard/util/ResourceLimitedMapFunctor.java | 47 -
src/java/net/sf/picard/util/SamLocusIterator.java | 498 -
.../util/SamRecordIntervalIteratorFactory.java | 159 -
.../net/sf/picard/util/SolexaQualityConverter.java | 124 -
src/java/net/sf/picard/util/TabbedInputParser.java | 64 -
.../util/TabbedTextFileWithHeaderParser.java | 173 -
src/java/net/sf/picard/util/UnsignedTypeUtil.java | 28 -
.../util/WholeGenomeReferenceSequenceMask.java | 80 -
src/java/net/sf/picard/vcf/MakeSitesOnlyVcf.java | 105 -
src/java/net/sf/picard/vcf/MergeVcfs.java | 159 -
src/java/net/sf/picard/vcf/SplitVcfs.java | 120 -
src/java/net/sf/picard/vcf/VcfFormatConverter.java | 117 -
src/java/net/sf/samtools/AbstractBAMFileIndex.java | 636 -
.../net/sf/samtools/AbstractSAMHeaderRecord.java | 109 -
src/java/net/sf/samtools/AlignmentBlock.java | 54 -
src/java/net/sf/samtools/AsyncSAMFileWriter.java | 59 -
src/java/net/sf/samtools/BAMFileConstants.java | 45 -
src/java/net/sf/samtools/BAMFileReader.java | 987 -
src/java/net/sf/samtools/BAMFileWriter.java | 199 -
src/java/net/sf/samtools/BAMIndex.java | 65 -
src/java/net/sf/samtools/BAMIndexContent.java | 69 -
src/java/net/sf/samtools/BAMIndexMetaData.java | 243 -
src/java/net/sf/samtools/BAMIndexWriter.java | 52 -
src/java/net/sf/samtools/BAMIndexer.java | 259 -
src/java/net/sf/samtools/BAMRecord.java | 360 -
src/java/net/sf/samtools/BAMRecordCodec.java | 207 -
src/java/net/sf/samtools/BamFileIoUtils.java | 155 -
src/java/net/sf/samtools/BamIndexValidator.java | 89 -
src/java/net/sf/samtools/Bin.java | 162 -
src/java/net/sf/samtools/BinList.java | 119 -
src/java/net/sf/samtools/BinaryBAMIndexWriter.java | 205 -
src/java/net/sf/samtools/BinaryCigarCodec.java | 99 -
src/java/net/sf/samtools/BinaryTagCodec.java | 422 -
src/java/net/sf/samtools/BinningIndexBuilder.java | 187 -
src/java/net/sf/samtools/BinningIndexContent.java | 262 -
src/java/net/sf/samtools/BrowseableBAMIndex.java | 54 -
src/java/net/sf/samtools/CachingBAMFileIndex.java | 166 -
src/java/net/sf/samtools/Chunk.java | 167 -
src/java/net/sf/samtools/Cigar.java | 268 -
src/java/net/sf/samtools/CigarElement.java | 66 -
src/java/net/sf/samtools/CigarOperator.java | 186 -
.../net/sf/samtools/DefaultSAMRecordFactory.java | 44 -
src/java/net/sf/samtools/Defaults.java | 84 -
.../net/sf/samtools/DiskBasedBAMFileIndex.java | 78 -
.../net/sf/samtools/FileTruncatedException.java | 46 -
src/java/net/sf/samtools/FixBAMFile.java | 45 -
src/java/net/sf/samtools/GenomicIndexUtil.java | 100 -
src/java/net/sf/samtools/LinearIndex.java | 126 -
.../sf/samtools/NotPrimarySkippingIterator.java | 62 -
.../SAMBinaryTagAndUnsignedArrayValue.java | 48 -
src/java/net/sf/samtools/SAMBinaryTagAndValue.java | 125 -
src/java/net/sf/samtools/SAMException.java | 44 -
src/java/net/sf/samtools/SAMFileHeader.java | 348 -
src/java/net/sf/samtools/SAMFileReader.java | 915 -
src/java/net/sf/samtools/SAMFileSource.java | 68 -
src/java/net/sf/samtools/SAMFileSpan.java | 291 -
.../net/sf/samtools/SAMFileTruncatedReader.java | 68 -
src/java/net/sf/samtools/SAMFileWriter.java | 48 -
src/java/net/sf/samtools/SAMFileWriterFactory.java | 259 -
src/java/net/sf/samtools/SAMFileWriterImpl.java | 231 -
src/java/net/sf/samtools/SAMFormatException.java | 44 -
.../net/sf/samtools/SAMHeaderRecordComparator.java | 66 -
src/java/net/sf/samtools/SAMLineParser.java | 457 -
src/java/net/sf/samtools/SAMProgramRecord.java | 128 -
src/java/net/sf/samtools/SAMReadGroupRecord.java | 145 -
src/java/net/sf/samtools/SAMRecord.java | 1732 --
src/java/net/sf/samtools/SAMRecordComparator.java | 40 -
.../sf/samtools/SAMRecordCoordinateComparator.java | 95 -
src/java/net/sf/samtools/SAMRecordFactory.java | 28 -
src/java/net/sf/samtools/SAMRecordIterator.java | 52 -
.../sf/samtools/SAMRecordQueryNameComparator.java | 86 -
src/java/net/sf/samtools/SAMRecordSetBuilder.java | 466 -
src/java/net/sf/samtools/SAMRecordUtil.java | 81 -
.../net/sf/samtools/SAMSequenceDictionary.java | 162 -
src/java/net/sf/samtools/SAMSequenceRecord.java | 225 -
src/java/net/sf/samtools/SAMSortOrderChecker.java | 86 -
src/java/net/sf/samtools/SAMTag.java | 32 -
src/java/net/sf/samtools/SAMTagUtil.java | 122 -
src/java/net/sf/samtools/SAMTestUtil.java | 90 -
src/java/net/sf/samtools/SAMTextHeaderCodec.java | 465 -
src/java/net/sf/samtools/SAMTextReader.java | 247 -
src/java/net/sf/samtools/SAMTextWriter.java | 183 -
src/java/net/sf/samtools/SAMTools.java | 119 -
src/java/net/sf/samtools/SAMUtils.java | 925 -
src/java/net/sf/samtools/SAMValidationError.java | 288 -
src/java/net/sf/samtools/SQTagUtil.java | 154 -
src/java/net/sf/samtools/SamPairUtil.java | 319 -
.../SecondaryOrSupplementarySkippingIterator.java | 41 -
.../StreamInflatingIndexingOutputStream.java | 80 -
.../sf/samtools/TagValueAndUnsignedArrayFlag.java | 42 -
src/java/net/sf/samtools/TextCigarCodec.java | 104 -
src/java/net/sf/samtools/TextTagCodec.java | 321 -
.../net/sf/samtools/TextualBAMIndexWriter.java | 185 -
src/java/net/sf/samtools/apps/TimeChannel.java | 60 -
.../net/sf/samtools/apps/TimeRandomAccessFile.java | 55 -
.../net/sf/samtools/example/ExampleSamUsage.java | 63 -
.../seekablestream/ISeekableStreamFactory.java | 33 -
.../seekablestream/SeekableBufferedStream.java | 124 -
.../samtools/seekablestream/SeekableFTPStream.java | 120 -
.../seekablestream/SeekableFTPStreamHelper.java | 166 -
.../seekablestream/SeekableFileStream.java | 125 -
.../seekablestream/SeekableHTTPStream.java | 186 -
.../sf/samtools/seekablestream/SeekableStream.java | 69 -
.../seekablestream/SeekableStreamFactory.java | 95 -
.../samtools/seekablestream/UserPasswordInput.java | 31 -
.../net/sf/samtools/util/AbstractAsyncWriter.java | 121 -
.../net/sf/samtools/util/AbstractIterator.java | 85 -
src/java/net/sf/samtools/util/AsciiWriter.java | 83 -
src/java/net/sf/samtools/util/BinaryCodec.java | 663 -
.../util/BlockCompressedFilePointerUtil.java | 101 -
.../samtools/util/BlockCompressedInputStream.java | 512 -
.../samtools/util/BlockCompressedOutputStream.java | 336 -
.../util/BlockCompressedStreamConstants.java | 118 -
src/java/net/sf/samtools/util/BlockGunzipper.java | 115 -
.../net/sf/samtools/util/BufferedLineReader.java | 115 -
.../net/sf/samtools/util/CloseableIterator.java | 45 -
src/java/net/sf/samtools/util/CloserUtil.java | 80 -
src/java/net/sf/samtools/util/CollectionUtil.java | 170 -
src/java/net/sf/samtools/util/CoordMath.java | 76 -
src/java/net/sf/samtools/util/DateParser.java | 340 -
.../net/sf/samtools/util/DelegatingIterator.java | 37 -
src/java/net/sf/samtools/util/HttpUtils.java | 80 -
src/java/net/sf/samtools/util/IOUtil.java | 220 -
src/java/net/sf/samtools/util/Iso8601Date.java | 65 -
src/java/net/sf/samtools/util/Lazy.java | 39 -
src/java/net/sf/samtools/util/LineReader.java | 51 -
src/java/net/sf/samtools/util/LocationAware.java | 26 -
.../samtools/util/Md5CalculatingInputStream.java | 129 -
.../samtools/util/Md5CalculatingOutputStream.java | 115 -
src/java/net/sf/samtools/util/PeekIterator.java | 85 -
.../sf/samtools/util/ProgressLoggerInterface.java | 38 -
.../net/sf/samtools/util/RelativeIso8601Date.java | 187 -
.../net/sf/samtools/util/RuntimeEOFException.java | 46 -
.../net/sf/samtools/util/RuntimeIOException.java | 46 -
src/java/net/sf/samtools/util/SequenceUtil.java | 767 -
src/java/net/sf/samtools/util/SnappyLoader.java | 127 -
.../net/sf/samtools/util/SortingCollection.java | 517 -
.../sf/samtools/util/SortingLongCollection.java | 338 -
src/java/net/sf/samtools/util/StopWatch.java | 76 -
.../net/sf/samtools/util/StringLineReader.java | 99 -
src/java/net/sf/samtools/util/StringUtil.java | 466 -
.../net/sf/samtools/util/TempStreamFactory.java | 84 -
src/java/net/sf/samtools/util/TestUtil.java | 69 -
src/java/net/sf/samtools/util/Tuple.java | 16 -
src/java/net/sf/samtools/util/ftp/FTPClient.java | 235 -
src/java/net/sf/samtools/util/ftp/FTPReply.java | 113 -
src/java/net/sf/samtools/util/ftp/FTPStream.java | 53 -
src/java/net/sf/samtools/util/ftp/FTPUtils.java | 153 -
.../net/sf/samtools/util/zip/DeflaterFactory.java | 78 -
.../net/sf/samtools/util/zip/IntelDeflater.java | 567 -
src/java/net/sf/samtools/util/zip/ZStreamRef.java | 48 -
.../org/broad/tribble/AbstractFeatureCodec.java | 53 -
.../org/broad/tribble/AbstractFeatureReader.java | 183 -
src/java/org/broad/tribble/AsciiFeatureCodec.java | 92 -
src/java/org/broad/tribble/BasicFeature.java | 54 -
src/java/org/broad/tribble/BinaryFeatureCodec.java | 42 -
.../broad/tribble/CloseableTribbleIterator.java | 27 -
src/java/org/broad/tribble/Feature.java | 47 -
src/java/org/broad/tribble/FeatureCodec.java | 116 -
src/java/org/broad/tribble/FeatureCodecHeader.java | 83 -
src/java/org/broad/tribble/FeatureReader.java | 40 -
src/java/org/broad/tribble/NameAwareCodec.java | 37 -
src/java/org/broad/tribble/TabixFeatureReader.java | 202 -
src/java/org/broad/tribble/Tribble.java | 58 -
src/java/org/broad/tribble/TribbleException.java | 139 -
.../broad/tribble/TribbleIndexedFeatureReader.java | 523 -
src/java/org/broad/tribble/annotation/Strand.java | 52 -
src/java/org/broad/tribble/bed/BEDCodec.java | 227 -
src/java/org/broad/tribble/bed/BEDFeature.java | 51 -
src/java/org/broad/tribble/bed/FullBEDFeature.java | 433 -
.../org/broad/tribble/bed/SimpleBEDFeature.java | 139 -
.../org/broad/tribble/dbsnp/OldDbSNPCodec.java | 129 -
.../org/broad/tribble/dbsnp/OldDbSNPFeature.java | 212 -
.../org/broad/tribble/example/CountRecords.java | 203 -
.../broad/tribble/example/ExampleBinaryCodec.java | 117 -
.../org/broad/tribble/example/IndexToTable.java | 72 -
.../org/broad/tribble/example/IndicesAreEqual.java | 76 -
.../broad/tribble/example/ProfileIndexReading.java | 66 -
.../exception/CodecLineParsingException.java | 50 -
.../tribble/exception/UnsortedFileException.java | 45 -
.../broad/tribble/gelitext/DiploidGenotype.java | 64 -
.../org/broad/tribble/gelitext/GeliTextCodec.java | 110 -
.../broad/tribble/gelitext/GeliTextFeature.java | 145 -
.../org/broad/tribble/index/AbstractIndex.java | 443 -
src/java/org/broad/tribble/index/Block.java | 82 -
src/java/org/broad/tribble/index/ChrIndex.java | 55 -
.../broad/tribble/index/DynamicIndexCreator.java | 209 -
src/java/org/broad/tribble/index/Index.java | 91 -
src/java/org/broad/tribble/index/IndexCreator.java | 50 -
src/java/org/broad/tribble/index/IndexFactory.java | 472 -
src/java/org/broad/tribble/index/MutableIndex.java | 36 -
.../broad/tribble/index/TribbleIndexCreator.java | 37 -
.../org/broad/tribble/index/interval/Interval.java | 115 -
.../index/interval/IntervalIndexCreator.java | 159 -
.../broad/tribble/index/interval/IntervalTree.java | 546 -
.../tribble/index/interval/IntervalTreeIndex.java | 211 -
.../broad/tribble/index/linear/LinearIndex.java | 431 -
.../tribble/index/linear/LinearIndexCreator.java | 126 -
.../org/broad/tribble/index/tabix/TabixFormat.java | 109 -
.../org/broad/tribble/index/tabix/TabixIndex.java | 364 -
.../tribble/index/tabix/TabixIndexCreator.java | 199 -
.../org/broad/tribble/readers/AsciiLineReader.java | 180 -
.../tribble/readers/AsciiLineReaderIterator.java | 100 -
.../tribble/readers/AsynchronousLineReader.java | 98 -
.../org/broad/tribble/readers/LineIterator.java | 12 -
.../broad/tribble/readers/LineIteratorImpl.java | 33 -
src/java/org/broad/tribble/readers/LineReader.java | 42 -
.../org/broad/tribble/readers/LineReaderUtil.java | 61 -
.../tribble/readers/LongLineBufferedReader.java | 490 -
src/java/org/broad/tribble/readers/Positional.java | 60 -
.../tribble/readers/PositionalBufferedStream.java | 224 -
.../tribble/readers/TabixIteratorLineReader.java | 52 -
.../org/broad/tribble/readers/TabixReader.java | 462 -
src/java/org/broad/tribble/readme.txt | 1 -
src/java/org/broad/tribble/util/FTPHelper.java | 54 -
src/java/org/broad/tribble/util/HTTPHelper.java | 156 -
.../tribble/util/LittleEndianInputStream.java | 140 -
.../tribble/util/LittleEndianOutputStream.java | 120 -
src/java/org/broad/tribble/util/MathUtils.java | 66 -
src/java/org/broad/tribble/util/ParsingUtils.java | 447 -
.../org/broad/tribble/util/RemoteURLHelper.java | 54 -
src/java/org/broad/tribble/util/TabixUtils.java | 115 -
src/java/org/broad/tribble/util/URLHelper.java | 56 -
.../util/popgen/HardyWeinbergCalculation.java | 148 -
.../org/broadinstitute/variant/bcf2/BCF2Codec.java | 501 -
.../broadinstitute/variant/bcf2/BCF2Decoder.java | 375 -
.../variant/bcf2/BCF2GenotypeFieldDecoders.java | 284 -
.../variant/bcf2/BCF2LazyGenotypesDecoder.java | 97 -
.../org/broadinstitute/variant/bcf2/BCF2Type.java | 219 -
.../org/broadinstitute/variant/bcf2/BCF2Utils.java | 338 -
.../broadinstitute/variant/bcf2/BCFVersion.java | 105 -
.../broadinstitute/variant/utils/GeneralUtils.java | 242 -
.../variant/variantcontext/Allele.java | 505 -
.../variant/variantcontext/CommonInfo.java | 263 -
.../variant/variantcontext/FastGenotype.java | 182 -
.../variant/variantcontext/Genotype.java | 676 -
.../variant/variantcontext/GenotypeBuilder.java | 419 -
.../variantcontext/GenotypeLikelihoods.java | 463 -
.../variant/variantcontext/GenotypeType.java | 47 -
.../variant/variantcontext/GenotypesContext.java | 724 -
.../variant/variantcontext/JEXLMap.java | 230 -
.../variantcontext/LazyGenotypesContext.java | 198 -
.../variant/variantcontext/VariantContext.java | 1653 -
.../variantcontext/VariantContextBuilder.java | 497 -
.../variantcontext/VariantContextComparator.java | 95 -
.../variantcontext/VariantContextUtils.java | 385 -
.../variant/variantcontext/VariantJEXLContext.java | 109 -
.../writer/AsyncVariantContextWriter.java | 49 -
.../variant/variantcontext/writer/BCF2Encoder.java | 279 -
.../variantcontext/writer/BCF2FieldEncoder.java | 528 -
.../variantcontext/writer/BCF2FieldWriter.java | 337 -
.../writer/BCF2FieldWriterManager.java | 180 -
.../variant/variantcontext/writer/BCF2Writer.java | 434 -
.../writer/IndexingVariantContextWriter.java | 227 -
.../writer/IntGenotypeFieldAccessors.java | 97 -
.../variant/variantcontext/writer/Options.java | 40 -
.../writer/SortingVariantContextWriter.java | 61 -
.../writer/SortingVariantContextWriterBase.java | 195 -
.../variant/variantcontext/writer/VCFWriter.java | 223 -
.../writer/VariantContextWriter.java | 44 -
.../writer/VariantContextWriterBuilder.java | 466 -
.../writer/VariantContextWriterFactory.java | 274 -
.../variant/vcf/AbstractVCFCodec.java | 781 -
.../org/broadinstitute/variant/vcf/VCF3Codec.java | 136 -
.../org/broadinstitute/variant/vcf/VCFCodec.java | 157 -
.../variant/vcf/VCFCompoundHeaderLine.java | 265 -
.../broadinstitute/variant/vcf/VCFConstants.java | 126 -
.../variant/vcf/VCFContigHeaderLine.java | 94 -
.../org/broadinstitute/variant/vcf/VCFEncoder.java | 381 -
.../broadinstitute/variant/vcf/VCFFileReader.java | 79 -
.../variant/vcf/VCFFilterHeaderLine.java | 68 -
.../variant/vcf/VCFFormatHeaderLine.java | 62 -
.../org/broadinstitute/variant/vcf/VCFHeader.java | 498 -
.../broadinstitute/variant/vcf/VCFHeaderLine.java | 146 -
.../variant/vcf/VCFHeaderLineCount.java | 33 -
.../variant/vcf/VCFHeaderLineTranslator.java | 154 -
.../variant/vcf/VCFHeaderLineType.java | 33 -
.../variant/vcf/VCFHeaderVersion.java | 138 -
.../variant/vcf/VCFIDHeaderLine.java | 31 -
.../variant/vcf/VCFInfoHeaderLine.java | 59 -
.../broadinstitute/variant/vcf/VCFRecordCodec.java | 63 -
.../variant/vcf/VCFSimpleHeaderLine.java | 118 -
.../variant/vcf/VCFStandardHeaderLines.java | 264 -
.../org/broadinstitute/variant/vcf/VCFUtils.java | 198 -
src/java/picard/PicardException.java | 41 +
src/java/picard/Test.java | 56 +
.../picard/analysis/AlignmentSummaryMetrics.java | 162 +
.../analysis/AlignmentSummaryMetricsCollector.java | 390 +
.../analysis/BaseDistributionByCycleMetrics.java | 13 +
.../analysis/CollectAlignmentSummaryMetrics.java | 145 +
.../analysis/CollectBaseDistributionByCycle.java | 188 +
src/java/picard/analysis/CollectGcBiasMetrics.java | 236 +
.../picard/analysis/CollectInsertSizeMetrics.java | 157 +
.../analysis/CollectJumpingLibraryMetrics.java | 249 +
.../picard/analysis/CollectMultipleMetrics.java | 259 +
src/java/picard/analysis/CollectOxoGMetrics.java | 458 +
.../analysis/CollectQualityYieldMetrics.java | 179 +
src/java/picard/analysis/CollectRawWgsMetrics.java | 37 +
src/java/picard/analysis/CollectRnaSeqMetrics.java | 156 +
src/java/picard/analysis/CollectRrbsMetrics.java | 184 +
src/java/picard/analysis/CollectWgsMetrics.java | 314 +
src/java/picard/analysis/CompareMetrics.java | 53 +
src/java/picard/analysis/GcBiasDetailMetrics.java | 64 +
src/java/picard/analysis/GcBiasSummaryMetrics.java | 57 +
src/java/picard/analysis/InsertSizeMetrics.java | 94 +
.../picard/analysis/JumpingLibraryMetrics.java | 127 +
src/java/picard/analysis/MeanQualityByCycle.java | 207 +
.../picard/analysis/MetricAccumulationLevel.java | 32 +
.../picard/analysis/QualityScoreDistribution.java | 152 +
src/java/picard/analysis/RnaSeqMetrics.java | 111 +
src/java/picard/analysis/RrbsCpgDetailMetrics.java | 44 +
src/java/picard/analysis/RrbsMetrics.java | 56 +
src/java/picard/analysis/RrbsMetricsCollector.java | 311 +
src/java/picard/analysis/RrbsSummaryMetrics.java | 59 +
src/java/picard/analysis/SinglePassSamProgram.java | 153 +
.../picard/analysis/artifacts/ArtifactCounter.java | 216 +
.../CollectSequencingArtifactMetrics.java | 290 +
.../analysis/artifacts/ContextAccumulator.java | 132 +
.../artifacts/ConvertSequencingArtifactToOxoG.java | 168 +
.../artifacts/SequencingArtifactMetrics.java | 269 +
src/java/picard/analysis/artifacts/Transition.java | 54 +
.../analysis/directed/CalculateHsMetrics.java | 98 +
.../analysis/directed/CollectTargetedMetrics.java | 158 +
.../directed/CollectTargetedPcrMetrics.java | 66 +
.../analysis/directed/GcBiasMetricsCollector.java | 298 +
.../analysis/directed/HsMetricCollector.java | 124 +
src/java/picard/analysis/directed/HsMetrics.java | 194 +
.../directed/InsertSizeMetricsCollector.java | 212 +
.../analysis/directed/RnaSeqMetricsCollector.java | 413 +
.../analysis/directed/TargetMetricsCollector.java | 759 +
.../analysis/directed/TargetedPcrMetrics.java | 119 +
.../directed/TargetedPcrMetricsCollector.java | 60 +
.../picard/annotation/AnnotationException.java | 40 +
src/java/picard/annotation/Gene.java | 238 +
.../picard/annotation/GeneAnnotationReader.java | 39 +
src/java/picard/annotation/LocusFunction.java | 33 +
src/java/picard/annotation/RefFlatReader.java | 191 +
src/java/picard/cmdline/ClassFinder.java | 183 +
src/java/picard/cmdline/CommandLineDefaults.java | 48 +
.../picard/cmdline/CommandLineParseException.java | 36 +
src/java/picard/cmdline/CommandLineParser.java | 1257 +
.../CommandLineParserDefinitionException.java | 36 +
src/java/picard/cmdline/CommandLineProgram.java | 331 +
.../picard/cmdline/CommandLineProgramGroup.java | 21 +
.../cmdline/CommandLineProgramProperties.java | 46 +
.../picard/cmdline/CreateHtmlDocForProgram.java | 39 +
.../cmdline/CreateHtmlDocForStandardOptions.java | 45 +
src/java/picard/cmdline/NestedOptions.java | 43 +
src/java/picard/cmdline/Option.java | 86 +
src/java/picard/cmdline/PicardCommandLine.java | 316 +
src/java/picard/cmdline/PositionalArguments.java | 52 +
.../picard/cmdline/StandardOptionDefinitions.java | 48 +
src/java/picard/cmdline/programgroups/Fasta.java | 13 +
.../picard/cmdline/programgroups/Illumina.java | 13 +
.../picard/cmdline/programgroups/Intervals.java | 13 +
src/java/picard/cmdline/programgroups/Metrics.java | 13 +
src/java/picard/cmdline/programgroups/None.java | 13 +
.../picard/cmdline/programgroups/SamOrBam.java | 13 +
src/java/picard/cmdline/programgroups/Testing.java | 13 +
.../picard/cmdline/programgroups/VcfOrBcf.java | 13 +
src/java/picard/fastq/BamToBfq.java | 94 +
src/java/picard/fastq/BamToBfqWriter.java | 444 +
src/java/picard/fastq/Casava18ReadNameEncoder.java | 46 +
src/java/picard/fastq/IlluminaReadNameEncoder.java | 28 +
src/java/picard/fastq/ReadNameEncoder.java | 17 +
.../picard/illumina/CheckIlluminaDirectory.java | 248 +
.../picard/illumina/ClusterDataToSamConverter.java | 174 +
.../CollectIlluminaBasecallingMetrics.java | 276 +
.../illumina/CollectIlluminaLaneMetrics.java | 161 +
.../picard/illumina/ExtractIlluminaBarcodes.java | 717 +
.../illumina/IlluminaBasecallingMetrics.java | 83 +
.../illumina/IlluminaBasecallsConverter.java | 901 +
.../picard/illumina/IlluminaBasecallsToFastq.java | 488 +
.../picard/illumina/IlluminaBasecallsToSam.java | 546 +
src/java/picard/illumina/IlluminaLaneMetrics.java | 23 +
.../picard/illumina/IlluminaPhasingMetrics.java | 68 +
.../illumina/LanePhasingMetricsCollector.java | 84 +
src/java/picard/illumina/MarkIlluminaAdapters.java | 277 +
src/java/picard/illumina/parser/BarcodeParser.java | 84 +
src/java/picard/illumina/parser/BclData.java | 30 +
src/java/picard/illumina/parser/BclParser.java | 295 +
src/java/picard/illumina/parser/ClusterData.java | 200 +
.../parser/ClusterIntensityFileReader.java | 216 +
.../illumina/parser/CycleIlluminaFileMap.java | 74 +
src/java/picard/illumina/parser/FilterParser.java | 83 +
.../illumina/parser/FourChannelIntensityData.java | 103 +
src/java/picard/illumina/parser/IlluminaData.java | 69 +
.../illumina/parser/IlluminaDataProvider.java | 230 +
.../parser/IlluminaDataProviderFactory.java | 389 +
.../picard/illumina/parser/IlluminaDataType.java | 35 +
.../picard/illumina/parser/IlluminaFileMap.java | 58 +
.../parser/IlluminaFileNotFoundException.java | 44 +
.../picard/illumina/parser/IlluminaFileUtil.java | 263 +
.../illumina/parser/IlluminaMetricsCode.java | 42 +
.../picard/illumina/parser/IlluminaParser.java | 75 +
.../illumina/parser/IlluminaTextIterator.java | 121 +
.../picard/illumina/parser/IntensityChannel.java | 38 +
.../illumina/parser/MultiTileBclFileUtil.java | 115 +
.../picard/illumina/parser/MultiTileBclParser.java | 170 +
.../picard/illumina/parser/MultiTileFileUtil.java | 120 +
.../illumina/parser/MultiTileFilterParser.java | 64 +
.../illumina/parser/MultiTileLocsParser.java | 82 +
.../picard/illumina/parser/MultiTileParser.java | 128 +
src/java/picard/illumina/parser/OutputMapping.java | 183 +
.../illumina/parser/ParameterizedFileUtil.java | 188 +
.../picard/illumina/parser/PerTileCycleParser.java | 200 +
.../picard/illumina/parser/PerTileFileUtil.java | 83 +
src/java/picard/illumina/parser/PerTileParser.java | 142 +
.../illumina/parser/PerTilePerCycleFileUtil.java | 268 +
src/java/picard/illumina/parser/PosParser.java | 133 +
src/java/picard/illumina/parser/Range.java | 65 +
src/java/picard/illumina/parser/ReadData.java | 96 +
.../picard/illumina/parser/ReadDescriptor.java | 57 +
src/java/picard/illumina/parser/ReadStructure.java | 361 +
src/java/picard/illumina/parser/ReadType.java | 39 +
src/java/picard/illumina/parser/Tile.java | 119 +
src/java/picard/illumina/parser/TileIndex.java | 170 +
.../picard/illumina/parser/TileMetricsUtil.java | 161 +
.../picard/illumina/parser/TilePhasingValue.java | 30 +
.../picard/illumina/parser/TileTemplateRead.java | 32 +
.../illumina/parser/fakers/BarcodeFileFaker.java | 25 +
.../illumina/parser/fakers/BciFileFaker.java | 52 +
.../illumina/parser/fakers/BclFileFaker.java | 30 +
.../illumina/parser/fakers/ClocsFileFaker.java | 25 +
.../picard/illumina/parser/fakers/FileFaker.java | 79 +
.../illumina/parser/fakers/FilterFileFaker.java | 34 +
.../illumina/parser/fakers/LocsFileFaker.java | 28 +
.../parser/fakers/MultiTileBclFileFaker.java | 32 +
.../parser/fakers/MultiTileLocsFileFaker.java | 30 +
.../illumina/parser/fakers/PosFileFaker.java | 25 +
.../AbstractIlluminaPositionFileReader.java | 177 +
.../illumina/parser/readers/BarcodeFileReader.java | 52 +
.../illumina/parser/readers/BclIndexReader.java | 75 +
.../readers/BclQualityEvaluationStrategy.java | 99 +
.../picard/illumina/parser/readers/BclReader.java | 357 +
.../illumina/parser/readers/ClocsFileReader.java | 157 +
.../illumina/parser/readers/FilterFileReader.java | 114 +
.../illumina/parser/readers/LocsFileReader.java | 119 +
.../parser/readers/MMapBackedIteratorFactory.java | 298 +
.../illumina/parser/readers/PosFileReader.java | 89 +
.../parser/readers/TileMetricsOutReader.java | 167 +
.../quality/CollectHiSeqXPfFailMetrics.java | 510 +
src/java/picard/metrics/GcBiasMetrics.java | 40 +
src/java/picard/metrics/MultiLevelCollector.java | 341 +
src/java/picard/metrics/MultilevelMetrics.java | 18 +
.../picard/metrics/PerUnitMetricCollector.java | 61 +
src/java/picard/metrics/SAMRecordAndReference.java | 22 +
.../SAMRecordAndReferenceMultiLevelCollector.java | 15 +
.../metrics/SAMRecordMultiLevelCollector.java | 14 +
src/java/picard/pedigree/PedFile.java | 171 +
src/java/picard/pedigree/Sex.java | 26 +
src/java/picard/reference/ExtractSequences.java | 116 +
src/java/picard/reference/NormalizeFasta.java | 97 +
src/java/picard/sam/AbstractAlignmentMerger.java | 756 +
src/java/picard/sam/AddCommentsToBam.java | 63 +
src/java/picard/sam/AddOrReplaceReadGroups.java | 135 +
src/java/picard/sam/BamIndexStats.java | 80 +
.../sam/BestEndMapqPrimaryAlignmentStrategy.java | 104 +
.../BestMapqPrimaryAlignmentSelectionStrategy.java | 96 +
src/java/picard/sam/BuildBamIndex.java | 144 +
.../picard/sam/CalculateReadGroupChecksum.java | 64 +
src/java/picard/sam/CheckTerminatorBlock.java | 50 +
src/java/picard/sam/CleanSam.java | 107 +
src/java/picard/sam/CompareSAMs.java | 528 +
src/java/picard/sam/CreateSequenceDictionary.java | 185 +
src/java/picard/sam/DownsampleSam.java | 77 +
src/java/picard/sam/DuplicationMetrics.java | 203 +
...tFragmentPrimaryAlignmentSelectionStrategy.java | 93 +
src/java/picard/sam/FastqToSam.java | 499 +
src/java/picard/sam/FilterSamReads.java | 232 +
src/java/picard/sam/FixMateInformation.java | 269 +
src/java/picard/sam/GatherBamFiles.java | 104 +
src/java/picard/sam/HitsForInsert.java | 283 +
src/java/picard/sam/MergeBamAlignment.java | 290 +
src/java/picard/sam/MergeSamFiles.java | 176 +
...stDistantPrimaryAlignmentSelectionStrategy.java | 188 +
.../picard/sam/MultiHitAlignedReadIterator.java | 215 +
.../picard/sam/PositionBasedDownsampleSam.java | 380 +
.../sam/PrimaryAlignmentSelectionStrategy.java | 37 +
src/java/picard/sam/ReorderSam.java | 245 +
src/java/picard/sam/ReplaceSamHeader.java | 117 +
...RevertOriginalBaseQualitiesAndAddMateCigar.java | 207 +
src/java/picard/sam/RevertSam.java | 401 +
src/java/picard/sam/SamAlignmentMerger.java | 338 +
src/java/picard/sam/SamFormatConverter.java | 91 +
src/java/picard/sam/SamToFastq.java | 466 +
src/java/picard/sam/SortSam.java | 92 +
src/java/picard/sam/SplitSamByLibrary.java | 150 +
src/java/picard/sam/ValidateSamFile.java | 173 +
src/java/picard/sam/ViewSam.java | 163 +
.../markduplicates/EstimateLibraryComplexity.java | 537 +
.../picard/sam/markduplicates/MarkDuplicates.java | 539 +
.../MarkDuplicatesWithMateCigar.java | 205 +
.../MarkDuplicatesWithMateCigarIterator.java | 613 +
.../AbstractMarkDuplicatesCommandLineProgram.java | 287 +
...ctOpticalDuplicateFinderCommandLineProgram.java | 71 +
.../DiskBasedReadEndsForMarkDuplicatesMap.java | 107 +
.../markduplicates/util/LibraryIdGenerator.java | 113 +
.../picard/sam/markduplicates/util/MarkQueue.java | 371 +
.../MemoryBasedReadEndsForMarkDuplicatesMap.java | 72 +
.../util/OpticalDuplicateFinder.java | 203 +
.../util/PhysicalLocationForMateCigar.java | 102 +
.../util/PhysicalLocationForMateCigarSet.java | 77 +
.../picard/sam/markduplicates/util/ReadEnds.java | 91 +
.../util/ReadEndsForMarkDuplicates.java | 47 +
.../util/ReadEndsForMarkDuplicatesCodec.java | 111 +
.../util/ReadEndsForMarkDuplicatesMap.java | 61 +
.../markduplicates/util/ReadEndsForMateCigar.java | 167 +
...amRecordWithOrdinalAndSetDuplicateReadFlag.java | 49 +
src/java/picard/sam/util/PhysicalLocation.java | 118 +
src/java/picard/sam/util/ReadNameParsingUtils.java | 83 +
src/java/picard/util/AbstractInputParser.java | 199 +
src/java/picard/util/AdapterMarker.java | 340 +
src/java/picard/util/AdapterPair.java | 16 +
src/java/picard/util/AsyncIterator.java | 170 +
src/java/picard/util/AtomicIterator.java | 12 +
src/java/picard/util/BaitDesigner.java | 623 +
src/java/picard/util/BasicInputParser.java | 176 +
src/java/picard/util/BedToIntervalList.java | 138 +
src/java/picard/util/CircularByteBuffer.java | 94 +
src/java/picard/util/ClippingUtility.java | 278 +
src/java/picard/util/CsvInputParser.java | 36 +
src/java/picard/util/DbSnpBitSetUtil.java | 146 +
.../util/DelimitedTextFileWithHeaderIterator.java | 115 +
src/java/picard/util/FifoBuffer.java | 177 +
.../picard/util/FileChannelJDKBugWorkAround.java | 64 +
src/java/picard/util/IlluminaUtil.java | 224 +
src/java/picard/util/IntervalListScatterer.java | 180 +
src/java/picard/util/IntervalListTools.java | 364 +
src/java/picard/util/Iterators.java | 26 +
src/java/picard/util/LiftOverIntervalList.java | 114 +
src/java/picard/util/MathUtil.java | 362 +
src/java/picard/util/MetricsDoclet.java | 178 +
src/java/picard/util/RExecutor.java | 113 +
src/java/picard/util/ScatterIntervalsByNs.java | 187 +
src/java/picard/util/TabbedInputParser.java | 64 +
.../util/TabbedTextFileWithHeaderParser.java | 177 +
src/java/picard/util/TestNGUtil.java | 96 +
src/java/picard/util/UnsignedTypeUtil.java | 28 +
src/java/picard/util/VariantType.java | 44 +
.../vcf/ByIntervalListVariantContextIterator.java | 52 +
src/java/picard/vcf/CallingMetricAccumulator.java | 300 +
.../picard/vcf/CollectVariantCallingMetrics.java | 310 +
src/java/picard/vcf/GA4GHScheme.java | 72 +
.../picard/vcf/GA4GHSchemeWithMissingAsHomRef.java | 58 +
src/java/picard/vcf/GatherVcfs.java | 270 +
src/java/picard/vcf/GenotypeConcordance.java | 654 +
.../vcf/GenotypeConcordanceContingencyMetrics.java | 61 +
src/java/picard/vcf/GenotypeConcordanceCounts.java | 303 +
.../vcf/GenotypeConcordanceDetailMetrics.java | 40 +
src/java/picard/vcf/GenotypeConcordanceScheme.java | 137 +
.../vcf/GenotypeConcordanceSchemeFactory.java | 39 +
.../picard/vcf/GenotypeConcordanceStateCodes.java | 23 +
src/java/picard/vcf/GenotypeConcordanceStates.java | 186 +
.../vcf/GenotypeConcordanceSummaryMetrics.java | 90 +
src/java/picard/vcf/LiftoverVcf.java | 233 +
src/java/picard/vcf/MakeSitesOnlyVcf.java | 111 +
src/java/picard/vcf/MergeVcfs.java | 161 +
src/java/picard/vcf/RenameSampleInVcf.java | 99 +
src/java/picard/vcf/SortVcf.java | 177 +
src/java/picard/vcf/SplitVcfs.java | 119 +
.../picard/vcf/UpdateVcfSequenceDictionary.java | 110 +
src/java/picard/vcf/VcfFormatConverter.java | 119 +
src/java/picard/vcf/VcfToIntervalList.java | 50 +
.../picard/vcf/filter/AlleleBalanceFilter.java | 88 +
src/java/picard/vcf/filter/DepthFilter.java | 48 +
.../vcf/filter/FilterApplyingVariantIterator.java | 134 +
src/java/picard/vcf/filter/FilterVcf.java | 117 +
src/java/picard/vcf/filter/FisherStrandFilter.java | 55 +
src/java/picard/vcf/filter/GenotypeFilter.java | 40 +
.../picard/vcf/filter/GenotypeQualityFilter.java | 46 +
src/java/picard/vcf/filter/QdFilter.java | 62 +
src/java/picard/vcf/filter/VariantFilter.java | 44 +
.../vcf/processor/VariantAccumulatorExecutor.java | 169 +
.../vcf/processor/VariantIteratorProducer.java | 278 +
.../picard/vcf/processor/VariantProcessor.java | 171 +
src/java/picard/vcf/processor/VcfFileSegment.java | 89 +
.../vcf/processor/VcfFileSegmentGenerator.java | 203 +
.../PredicateFilterDecoratingClosableIterator.java | 80 +
src/scripts/build_intel_deflater.sh | 64 -
src/scripts/explain_sam_flags.py | 65 -
src/scripts/net/sf/picard/analysis/gcBias.R | 77 -
.../picard/analysis/baseDistributionByCycle.R | 52 +
src/scripts/picard/analysis/gcBias.R | 109 +
.../sf => }/picard/analysis/insertSizeHistogram.R | 0
.../sf => }/picard/analysis/meanQualityByCycle.R | 0
.../picard/analysis/qualityScoreDistribution.R | 0
.../{net/sf => }/picard/analysis/rnaSeqCoverage.R | 0
src/scripts/picard/analysis/rrbsQc.R | 109 +
src/scripts/picard/docker_helper.sh | 27 +
src/scripts/release_picard.sh | 242 +-
.../CollectAlignmentSummaryMetricsTest.java | 507 -
.../analysis/CollectInsertSizeMetricsTest.java | 196 -
.../picard/analysis/CollectRnaSeqMetricsTest.java | 232 -
.../picard/analysis/MultiLevelCollectorTest.java | 188 -
.../sf/picard/cmdline/CommandLineParserTest.java | 906 -
.../filter/FailsVendorReadQualityFilterTest.java | 65 -
.../sf/picard/filter/SolexaNoiseFilterTest.java | 73 -
.../java/net/sf/picard/filter/TagFilterTest.java | 78 -
.../illumina/CheckIlluminaDirectoryTest.java | 388 -
.../illumina/ExtractIlluminaBarcodesTest.java | 315 -
.../illumina/IlluminaBasecallsToFastqTest.java | 179 -
.../IlluminaBasecallsToSamAdapterClippingTest.java | 93 -
.../illumina/IlluminaBasecallsToSamTest.java | 161 -
.../net/sf/picard/illumina/ReadStructureTest.java | 178 -
.../sf/picard/illumina/parser/BclParserTest.java | 464 -
.../net/sf/picard/illumina/parser/BinTdUtil.java | 307 -
.../illumina/parser/CycleIlluminaFileMapTest.java | 121 -
.../picard/illumina/parser/FilterParserTest.java | 171 -
.../parser/IlluminaDataProviderFactoryTest.java | 17 -
.../illumina/parser/IlluminaDataProviderTest.java | 270 -
.../illumina/parser/IlluminaFileUtilTest.java | 660 -
.../picard/illumina/parser/PerTileParserTest.java | 169 -
.../illumina/parser/PerTilePerCycleParserTest.java | 197 -
.../sf/picard/illumina/parser/PosParserTest.java | 201 -
.../illumina/parser/fakers/BclFileFakerTest.java | 59 -
.../AbstractIlluminaPositionFileReaderTest.java | 156 -
.../illumina/parser/readers/BclReaderTest.java | 172 -
.../parser/readers/ClocsFileReaderTest.java | 160 -
.../parser/readers/FilterFileReaderTest.java | 65 -
.../parser/readers/IlluminaFileUtilTest.java | 11 -
.../parser/readers/LocsFileReaderTest.java | 69 -
.../readers/MMapBackedIteratorFactoryTest.java | 207 -
.../illumina/parser/readers/PosFileReaderTest.java | 91 -
src/tests/java/net/sf/picard/io/IoUtilTest.java | 139 -
.../java/net/sf/picard/liftover/LiftOverTest.java | 459 -
.../net/sf/picard/metrics/MetricsFileTest.java | 155 -
.../sf/picard/reference/FastaSequenceFileTest.java | 72 -
.../picard/reference/FastaSequenceIndexTest.java | 253 -
.../reference/IndexedFastaSequenceFileTest.java | 303 -
.../reference/ReferenceSequenceFileWalkerTest.java | 67 -
.../picard/reference/ReferenceSequenceTests.java | 98 -
.../net/sf/picard/sam/AddCommentsToBamTest.java | 63 -
src/tests/java/net/sf/picard/sam/CleanSamTest.java | 99 -
.../java/net/sf/picard/sam/CompareSAMsTest.java | 136 -
.../picard/sam/CreateSequenceDictionaryTest.java | 68 -
.../java/net/sf/picard/sam/FastqToSamTest.java | 255 -
.../java/net/sf/picard/sam/MarkDuplicatesTest.java | 310 -
.../net/sf/picard/sam/MergeBamAlignmentTest.java | 1720 --
.../java/net/sf/picard/sam/MergeSamFilesTest.java | 59 -
...MergingSamRecordIteratorGroupCollisionTest.java | 524 -
.../picard/sam/MergingSamRecordIteratorTest.java | 264 -
.../sf/picard/sam/ProgramRecordChainingTest.java | 60 -
.../java/net/sf/picard/sam/RevertSamTest.java | 172 -
.../net/sf/picard/sam/SamFileHeaderMergerTest.java | 256 -
.../java/net/sf/picard/sam/SamToFastqTest.java | 428 -
.../SequenceNameTruncationAndValidationTest.java | 93 -
.../net/sf/picard/sam/ValidateSamFileTest.java | 452 -
src/tests/java/net/sf/picard/sam/ViewSamTest.java | 60 -
.../net/sf/picard/sam/testers/CleanSamTester.java | 62 -
.../picard/sam/testers/MarkDuplicatesTester.java | 55 -
.../net/sf/picard/sam/testers/SamFileTester.java | 224 -
.../java/net/sf/picard/util/CigarUtilTest.java | 145 -
.../net/sf/picard/util/ClippingUtilityTest.java | 380 -
.../DelimitedTextFileWithHeaderIteratorTest.java | 95 -
.../util/FileChannelJDKBugWorkAroundTest.java | 36 -
.../java/net/sf/picard/util/HistogramTest.java | 84 -
src/tests/java/net/sf/picard/util/IOUtilTest.java | 79 -
.../java/net/sf/picard/util/IlluminaUtilTest.java | 87 -
.../java/net/sf/picard/util/IntervalListTest.java | 387 -
.../net/sf/picard/util/IntervalListToolsTest.java | 167 -
.../net/sf/picard/util/IntervalTreeMapTest.java | 47 -
.../java/net/sf/picard/util/IntervalTreeTest.java | 187 -
.../java/net/sf/picard/util/MathUtilTest.java | 45 -
.../net/sf/picard/util/MergingIteratorTest.java | 176 -
.../picard/util/QualityEncodingDetectorTest.java | 109 -
.../java/net/sf/picard/util/RExecutorTest.java | 50 -
.../net/sf/picard/util/SamLocusIteratorTest.java | 232 -
.../sf/picard/util/SolexaQualityConverterTest.java | 86 -
.../util/TabbedTextFileWithHeaderParserTest.java | 95 -
.../net/sf/picard/util/TextFileParsersTest.java | 310 -
.../net/sf/picard/util/UnsignedTypeUtilTest.java | 75 -
.../java/net/sf/picard/vcf/MergeVcfsTest.java | 179 -
.../java/net/sf/picard/vcf/SplitVcfsTest.java | 105 -
.../picard/vcf/VariantContextComparatorTest.java | 107 -
.../net/sf/picard/vcf/VcfFormatConverterTest.java | 118 -
.../java/net/sf/samtools/ArrayTagValueTest.java | 179 -
.../java/net/sf/samtools/BAMFileIndexTest.java | 515 -
.../java/net/sf/samtools/BAMFileWriterTest.java | 120 -
.../java/net/sf/samtools/BAMIndexWriterTest.java | 216 -
.../java/net/sf/samtools/BAMIteratorTest.java | 69 -
.../java/net/sf/samtools/BAMRemoteFileTest.java | 316 -
.../java/net/sf/samtools/BamFileIoUtilsTest.java | 83 -
src/tests/java/net/sf/samtools/BinTest.java | 39 -
src/tests/java/net/sf/samtools/ChunkTest.java | 78 -
src/tests/java/net/sf/samtools/CigarCodecTest.java | 118 -
src/tests/java/net/sf/samtools/CigarTest.java | 83 -
src/tests/java/net/sf/samtools/SAMCloneTest.java | 52 -
.../java/net/sf/samtools/SAMFileReaderTest.java | 89 -
.../net/sf/samtools/SAMFileWriterFactoryTest.java | 70 -
.../java/net/sf/samtools/SAMIntegerTagTest.java | 208 -
.../java/net/sf/samtools/SAMTextReaderTest.java | 135 -
.../java/net/sf/samtools/SAMTextWriterTest.java | 95 -
src/tests/java/net/sf/samtools/SAMUtilsTest.java | 45 -
.../sf/samtools/SamHeaderRecordComparatorTest.java | 72 -
.../java/net/sf/samtools/SamPairUtilTest.java | 155 -
.../java/net/sf/samtools/SamReaderSortTest.java | 104 -
.../seekablestream/SeekableBufferedStreamTest.java | 162 -
.../seekablestream/SeekableFTPStreamTest.java | 107 -
.../seekablestream/SeekableFileStreamTest.java | 52 -
.../seekablestream/SeekableStreamFactoryTest.java | 15 -
.../java/net/sf/samtools/util/BinaryCodecTest.java | 270 -
.../util/BlockCompressedFilePointerUtilTest.java | 96 -
.../util/BlockCompressedOutputStreamTest.java | 102 -
.../util/BlockCompressedTerminatorTest.java | 59 -
.../java/net/sf/samtools/util/Iso8601DateTest.java | 57 -
src/tests/java/net/sf/samtools/util/IupacTest.java | 70 -
.../sf/samtools/util/RelativeIso8601DateTest.java | 39 -
.../net/sf/samtools/util/SequenceUtilTest.java | 130 -
.../sf/samtools/util/SortingCollectionTest.java | 232 -
.../samtools/util/SortingLongCollectionTest.java | 118 -
.../net/sf/samtools/util/StringLineReaderTest.java | 119 -
.../java/net/sf/samtools/util/StringUtilTest.java | 70 -
.../broad/tribble/AbstractFeatureReaderTest.java | 50 -
.../java/org/broad/tribble/BinaryFeaturesTest.java | 58 -
.../java/org/broad/tribble/FeatureReaderTest.java | 167 -
src/tests/java/org/broad/tribble/TestUtils.java | 29 -
.../java/org/broad/tribble/bed/BEDCodecTest.java | 224 -
.../org/broad/tribble/dbsnp/OldDbSNPCodecTest.java | 121 -
.../org/broad/tribble/gelitext/GeliTextTest.java | 99 -
.../org/broad/tribble/index/IndexFactoryTest.java | 80 -
.../java/org/broad/tribble/index/IndexTest.java | 50 -
.../tribble/index/interval/IntervalTreeTest.java | 153 -
.../tribble/index/linear/LinearIndexTest.java | 243 -
.../broad/tribble/index/tabix/TabixIndexTest.java | 65 -
.../broad/tribble/readers/AsciiLineReaderTest.java | 52 -
.../readers/AsynchronousLineReaderTest.java | 31 -
.../broad/tribble/readers/LineReaderUtilTest.java | 27 -
.../readers/LongLineBufferedReaderTest.java | 33 -
.../readers/PositionalBufferedStreamTest.java | 121 -
.../java/org/broad/tribble/readers/ReaderTest.java | 179 -
.../org/broad/tribble/readers/TabixReaderTest.java | 107 -
.../org/broad/tribble/util/ParsingUtilsTest.java | 114 -
.../org/broad/tribble/util/ftp/FTPClientTest.java | 266 -
.../org/broad/tribble/util/ftp/FTPUtilsTest.java | 31 -
.../broadinstitute/variant/VariantBaseTest.java | 118 -
.../variant/bcf2/BCF2EncoderDecoderUnitTest.java | 587 -
.../variant/bcf2/BCF2UtilsUnitTest.java | 183 -
.../variant/variantcontext/AlleleUnitTest.java | 180 -
.../GenotypeLikelihoodsUnitTest.java | 203 -
.../variant/variantcontext/GenotypeUnitTest.java | 101 -
.../variantcontext/GenotypesContextUnitTest.java | 312 -
.../variantcontext/VariantContextTestProvider.java | 990 -
.../variantcontext/VariantContextUnitTest.java | 980 -
.../variantcontext/VariantJEXLContextUnitTest.java | 130 -
.../writer/TabixOnTheFlyIndexCreationTest.java | 66 -
.../variantcontext/writer/VCFWriterUnitTest.java | 219 -
.../VariantContextWriterBuilderUnitTest.java | 343 -
.../writer/VariantContextWritersUnitTest.java | 163 -
.../variant/vcf/IndexFactoryUnitTest.java | 96 -
.../variant/vcf/VCFCompoundHeaderLineUnitTest.java | 46 -
.../broadinstitute/variant/vcf/VCFEncoderTest.java | 45 -
.../variant/vcf/VCFHeaderUnitTest.java | 211 -
.../vcf/VCFStandardHeaderLinesUnitTest.java | 154 -
.../CollectAlignmentSummaryMetricsTest.java | 509 +
.../picard/analysis/CollectGcBiasMetricsTest.java | 211 +
.../analysis/CollectInsertSizeMetricsTest.java | 226 +
.../analysis/CollectMultipleMetricsTest.java | 415 +
.../picard/analysis/CollectRnaSeqMetricsTest.java | 241 +
.../picard/analysis/MultiLevelCollectorTest.java | 195 +
.../CollectSequencingArtifactMetricsTest.java | 112 +
.../java/picard/cmdline/CommandLineParserTest.java | 980 +
.../picard/cmdline/CommandLineProgramTest.java | 54 +
.../illumina/CheckIlluminaDirectoryTest.java | 384 +
.../CollectIlluminaBasecallingMetricsTest.java | 171 +
.../illumina/ExtractIlluminaBarcodesTest.java | 321 +
.../illumina/IlluminaBasecallsToFastqTest.java | 184 +
.../IlluminaBasecallsToSamAdapterClippingTest.java | 98 +
.../illumina/IlluminaBasecallsToSamTest.java | 168 +
.../illumina/IlluminaLaneMetricsCollectorTest.java | 76 +
.../java/picard/illumina/ReadStructureTest.java | 179 +
.../java/picard/illumina/parser/BclParserTest.java | 464 +
.../java/picard/illumina/parser/BinTdUtil.java | 312 +
.../illumina/parser/CycleIlluminaFileMapTest.java | 116 +
.../picard/illumina/parser/FilterParserTest.java | 171 +
.../parser/IlluminaDataProviderFactoryTest.java | 16 +
.../illumina/parser/IlluminaDataProviderTest.java | 270 +
.../illumina/parser/IlluminaFileUtilTest.java | 658 +
.../picard/illumina/parser/PerTileParserTest.java | 173 +
.../illumina/parser/PerTilePerCycleParserTest.java | 197 +
.../java/picard/illumina/parser/PosParserTest.java | 206 +
.../illumina/parser/fakers/BclFileFakerTest.java | 59 +
.../AbstractIlluminaPositionFileReaderTest.java | 156 +
.../illumina/parser/readers/BclReaderTest.java | 172 +
.../parser/readers/ClocsFileReaderTest.java | 160 +
.../parser/readers/FilterFileReaderTest.java | 93 +
.../parser/readers/IlluminaFileUtilTest.java | 11 +
.../parser/readers/LocsFileReaderTest.java | 69 +
.../readers/MMapBackedIteratorFactoryTest.java | 210 +
.../illumina/parser/readers/PosFileReaderTest.java | 91 +
.../picard/metrics/CollectRrbsMetricsTest.java | 102 +
src/tests/java/picard/pedigree/PedFileTest.java | 58 +
.../java/picard/sam/AddCommentsToBamTest.java | 70 +
src/tests/java/picard/sam/CleanSamTest.java | 107 +
src/tests/java/picard/sam/CompareSAMsTest.java | 141 +
.../picard/sam/CreateSequenceDictionaryTest.java | 73 +
src/tests/java/picard/sam/FastqToSamTest.java | 309 +
src/tests/java/picard/sam/GatherBamFilesTest.java | 65 +
.../java/picard/sam/MergeBamAlignmentTest.java | 1676 +
src/tests/java/picard/sam/MergeSamFilesTest.java | 66 +
.../picard/sam/PositionBasedDownsampleSamTest.java | 248 +
src/tests/java/picard/sam/RevertSamTest.java | 178 +
.../java/picard/sam/SamFileConverterTest.java | 100 +
src/tests/java/picard/sam/SamToFastqTest.java | 432 +
.../java/picard/sam/SplitSamByLibraryTest.java | 112 +
src/tests/java/picard/sam/ViewSamTest.java | 136 +
...stractMarkDuplicatesCommandLineProgramTest.java | 543 +
...ractMarkDuplicatesCommandLineProgramTester.java | 170 +
.../sam/markduplicates/MarkDuplicatesTest.java | 208 +
.../sam/markduplicates/MarkDuplicatesTester.java | 42 +
.../MarkDuplicatesWithMateCigarTest.java | 107 +
.../MarkDuplicatesWithMateCigarTester.java | 46 +
.../SimpleMarkDuplicatesWithMateCigar.java | 222 +
.../SimpleMarkDuplicatesWithMateCigarTest.java | 44 +
.../SimpleMarkDuplicatesWithMateCigarTester.java | 45 +
.../util/OpticalDuplicateFinderTest.java | 76 +
.../java/picard/sam/testers/CleanSamTester.java | 65 +
.../java/picard/sam/testers/SamFileTester.java | 307 +
.../java/picard/sam/testers/ValidateSamTester.java | 22 +
.../java/picard/util/BedToIntervalListTest.java | 103 +
.../java/picard/util/ClippingUtilityTest.java | 380 +
.../DelimitedTextFileWithHeaderIteratorTest.java | 96 +
src/tests/java/picard/util/FifoBufferTest.java | 74 +
.../util/FileChannelJDKBugWorkAroundTest.java | 36 +
src/tests/java/picard/util/IlluminaUtilTest.java | 87 +
.../picard/util/IntervalListScattererTest.java | 203 +
src/tests/java/picard/util/MathUtilTest.java | 86 +
.../java/picard/util/MergingIteratorTest.java | 177 +
src/tests/java/picard/util/RExecutorTest.java | 50 +
.../java/picard/util/ScatterIntervalsByNsTest.java | 165 +
.../util/TabbedTextFileWithHeaderParserTest.java | 94 +
.../java/picard/util/TextFileParsersTest.java | 314 +
.../java/picard/util/UnsignedTypeUtilTest.java | 75 +
.../picard/vcf/AbstractVcfMergingClpTester.java | 174 +
.../vcf/CollectVariantCallingMetricsTest.java | 119 +
.../vcf/GenotypeConcordanceGA4GHSchemeTest.java | 157 +
...otypeConcordanceGA4GHSchemeWithMissingTest.java | 79 +
.../java/picard/vcf/GenotypeConcordanceTest.java | 495 +
src/tests/java/picard/vcf/MergeVcfsTest.java | 14 +
src/tests/java/picard/vcf/SortVcfsTest.java | 120 +
src/tests/java/picard/vcf/SplitVcfsTest.java | 59 +
src/tests/java/picard/vcf/TestFilterVcf.java | 142 +
.../vcf/UpdateVcfSequenceDictionaryTest.java | 74 +
.../picard/vcf/VariantContextComparatorTest.java | 107 +
.../java/picard/vcf/VcfFormatConverterTest.java | 127 +
.../vcf/processor/AccumulatorExecutorTest.java | 86 +
.../picard/vcf/processor/ByWholeContigTest.java | 46 +
.../java/picard/vcf/processor/ThreadsafeTest.java | 96 +
.../vcf/processor/VcfFileSegmentGeneratorTest.java | 55 +
.../vcf/processor/WidthLimitingDecoratorTest.java | 122 +
src/tests/resources/testng.xml | 39 +
.../illumina/25T8B25T/fastq/AACAATGG.1.fastq | 16 -
.../illumina/25T8B25T/fastq/AACAATGG.2.fastq | 16 -
.../25T8B25T/fastq/AACAATGG.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/AACGCATT.1.fastq | 28 -
.../illumina/25T8B25T/fastq/AACGCATT.2.fastq | 28 -
.../25T8B25T/fastq/AACGCATT.barcode_1.fastq | 28 -
.../illumina/25T8B25T/fastq/ACAGGTAT.1.fastq | 16 -
.../illumina/25T8B25T/fastq/ACAGGTAT.2.fastq | 16 -
.../25T8B25T/fastq/ACAGGTAT.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/ACAGTTGA.1.fastq | 8 -
.../illumina/25T8B25T/fastq/ACAGTTGA.2.fastq | 8 -
.../25T8B25T/fastq/ACAGTTGA.barcode_1.fastq | 8 -
.../illumina/25T8B25T/fastq/ACTAAGAC.1.fastq | 16 -
.../illumina/25T8B25T/fastq/ACTAAGAC.2.fastq | 16 -
.../25T8B25T/fastq/ACTAAGAC.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/ACTGTATC.1.fastq | 16 -
.../illumina/25T8B25T/fastq/ACTGTATC.2.fastq | 16 -
.../25T8B25T/fastq/ACTGTATC.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/AGCATGGA.1.fastq | 12 -
.../illumina/25T8B25T/fastq/AGCATGGA.2.fastq | 12 -
.../25T8B25T/fastq/AGCATGGA.barcode_1.fastq | 12 -
.../illumina/25T8B25T/fastq/AGGTAAGG.1.fastq | 16 -
.../illumina/25T8B25T/fastq/AGGTAAGG.2.fastq | 16 -
.../25T8B25T/fastq/AGGTAAGG.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/AGGTCGCA.1.fastq | 16 -
.../illumina/25T8B25T/fastq/AGGTCGCA.2.fastq | 16 -
.../25T8B25T/fastq/AGGTCGCA.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/ATTATCAA.1.fastq | 20 -
.../illumina/25T8B25T/fastq/ATTATCAA.2.fastq | 20 -
.../25T8B25T/fastq/ATTATCAA.barcode_1.fastq | 20 -
.../illumina/25T8B25T/fastq/ATTCCTCT.1.fastq | 16 -
.../illumina/25T8B25T/fastq/ATTCCTCT.2.fastq | 16 -
.../25T8B25T/fastq/ATTCCTCT.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/CAACTCTC.1.fastq | 20 -
.../illumina/25T8B25T/fastq/CAACTCTC.2.fastq | 20 -
.../25T8B25T/fastq/CAACTCTC.barcode_1.fastq | 20 -
.../illumina/25T8B25T/fastq/CAATAGTC.1.fastq | 28 -
.../illumina/25T8B25T/fastq/CAATAGTC.2.fastq | 28 -
.../25T8B25T/fastq/CAATAGTC.barcode_1.fastq | 28 -
.../illumina/25T8B25T/fastq/CAGCGGTA.1.fastq | 20 -
.../illumina/25T8B25T/fastq/CAGCGGTA.2.fastq | 20 -
.../25T8B25T/fastq/CAGCGGTA.barcode_1.fastq | 20 -
.../illumina/25T8B25T/fastq/CCAACATT.1.fastq | 28 -
.../illumina/25T8B25T/fastq/CCAACATT.2.fastq | 28 -
.../25T8B25T/fastq/CCAACATT.barcode_1.fastq | 28 -
.../illumina/25T8B25T/fastq/CCAGCACC.1.fastq | 12 -
.../illumina/25T8B25T/fastq/CCAGCACC.2.fastq | 12 -
.../25T8B25T/fastq/CCAGCACC.barcode_1.fastq | 12 -
.../illumina/25T8B25T/fastq/CGCCTTCC.1.fastq | 8 -
.../illumina/25T8B25T/fastq/CGCCTTCC.2.fastq | 8 -
.../25T8B25T/fastq/CGCCTTCC.barcode_1.fastq | 8 -
.../illumina/25T8B25T/fastq/CGCTATGT.1.fastq | 20 -
.../illumina/25T8B25T/fastq/CGCTATGT.2.fastq | 20 -
.../25T8B25T/fastq/CGCTATGT.barcode_1.fastq | 20 -
.../illumina/25T8B25T/fastq/CTAACTCG.1.fastq | 16 -
.../illumina/25T8B25T/fastq/CTAACTCG.2.fastq | 16 -
.../25T8B25T/fastq/CTAACTCG.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/CTATGCGT.1.fastq | 28 -
.../illumina/25T8B25T/fastq/CTATGCGT.2.fastq | 28 -
.../25T8B25T/fastq/CTATGCGT.barcode_1.fastq | 28 -
.../illumina/25T8B25T/fastq/CTGCGGAT.1.fastq | 12 -
.../illumina/25T8B25T/fastq/CTGCGGAT.2.fastq | 12 -
.../25T8B25T/fastq/CTGCGGAT.barcode_1.fastq | 12 -
.../illumina/25T8B25T/fastq/CTGTAATC.1.fastq | 24 -
.../illumina/25T8B25T/fastq/CTGTAATC.2.fastq | 24 -
.../25T8B25T/fastq/CTGTAATC.barcode_1.fastq | 24 -
.../illumina/25T8B25T/fastq/GAAGGAAG.1.fastq | 12 -
.../illumina/25T8B25T/fastq/GAAGGAAG.2.fastq | 12 -
.../25T8B25T/fastq/GAAGGAAG.barcode_1.fastq | 12 -
.../illumina/25T8B25T/fastq/GACCAGGA.1.fastq | 28 -
.../illumina/25T8B25T/fastq/GACCAGGA.2.fastq | 28 -
.../25T8B25T/fastq/GACCAGGA.barcode_1.fastq | 28 -
.../illumina/25T8B25T/fastq/GACCGTTG.1.fastq | 16 -
.../illumina/25T8B25T/fastq/GACCGTTG.2.fastq | 16 -
.../25T8B25T/fastq/GACCGTTG.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/GACCTAAC.1.fastq | 4 -
.../illumina/25T8B25T/fastq/GACCTAAC.2.fastq | 4 -
.../25T8B25T/fastq/GACCTAAC.barcode_1.fastq | 4 -
.../illumina/25T8B25T/fastq/GATATCCA.1.fastq | 12 -
.../illumina/25T8B25T/fastq/GATATCCA.2.fastq | 12 -
.../25T8B25T/fastq/GATATCCA.barcode_1.fastq | 12 -
.../illumina/25T8B25T/fastq/GCCGTCGA.1.fastq | 20 -
.../illumina/25T8B25T/fastq/GCCGTCGA.2.fastq | 20 -
.../25T8B25T/fastq/GCCGTCGA.barcode_1.fastq | 20 -
.../illumina/25T8B25T/fastq/GCCTAGCC.1.fastq | 20 -
.../illumina/25T8B25T/fastq/GCCTAGCC.2.fastq | 20 -
.../25T8B25T/fastq/GCCTAGCC.barcode_1.fastq | 20 -
.../illumina/25T8B25T/fastq/GTAACATC.1.fastq | 8 -
.../illumina/25T8B25T/fastq/GTAACATC.2.fastq | 8 -
.../25T8B25T/fastq/GTAACATC.barcode_1.fastq | 8 -
.../illumina/25T8B25T/fastq/GTCCACAG.1.fastq | 8 -
.../illumina/25T8B25T/fastq/GTCCACAG.2.fastq | 8 -
.../25T8B25T/fastq/GTCCACAG.barcode_1.fastq | 8 -
.../sf/picard/illumina/25T8B25T/fastq/N.1.fastq | 64 -
.../sf/picard/illumina/25T8B25T/fastq/N.2.fastq | 64 -
.../illumina/25T8B25T/fastq/N.barcode_1.fastq | 64 -
.../illumina/25T8B25T/fastq/TAAGCACA.1.fastq | 8 -
.../illumina/25T8B25T/fastq/TAAGCACA.2.fastq | 8 -
.../25T8B25T/fastq/TAAGCACA.barcode_1.fastq | 8 -
.../illumina/25T8B25T/fastq/TATCCAGG.1.fastq | 16 -
.../illumina/25T8B25T/fastq/TATCCAGG.2.fastq | 16 -
.../25T8B25T/fastq/TATCCAGG.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/TATCTGCC.1.fastq | 28 -
.../illumina/25T8B25T/fastq/TATCTGCC.2.fastq | 28 -
.../25T8B25T/fastq/TATCTGCC.barcode_1.fastq | 28 -
.../illumina/25T8B25T/fastq/TCGCTAGA.1.fastq | 20 -
.../illumina/25T8B25T/fastq/TCGCTAGA.2.fastq | 20 -
.../25T8B25T/fastq/TCGCTAGA.barcode_1.fastq | 20 -
.../illumina/25T8B25T/fastq/TCTGCAAG.1.fastq | 4 -
.../illumina/25T8B25T/fastq/TCTGCAAG.2.fastq | 4 -
.../25T8B25T/fastq/TCTGCAAG.barcode_1.fastq | 4 -
.../illumina/25T8B25T/fastq/TGCAAGTA.1.fastq | 8 -
.../illumina/25T8B25T/fastq/TGCAAGTA.2.fastq | 8 -
.../25T8B25T/fastq/TGCAAGTA.barcode_1.fastq | 8 -
.../illumina/25T8B25T/fastq/TGCTGCTG.1.fastq | 16 -
.../illumina/25T8B25T/fastq/TGCTGCTG.2.fastq | 16 -
.../25T8B25T/fastq/TGCTGCTG.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/TGTAACTC.1.fastq | 4 -
.../illumina/25T8B25T/fastq/TGTAACTC.2.fastq | 4 -
.../25T8B25T/fastq/TGTAACTC.barcode_1.fastq | 4 -
.../illumina/25T8B25T/fastq/TGTAATCA.1.fastq | 12 -
.../illumina/25T8B25T/fastq/TGTAATCA.2.fastq | 12 -
.../25T8B25T/fastq/TGTAATCA.barcode_1.fastq | 12 -
.../illumina/25T8B25T/fastq/TTGTCTAT.1.fastq | 16 -
.../illumina/25T8B25T/fastq/TTGTCTAT.2.fastq | 16 -
.../25T8B25T/fastq/TTGTCTAT.barcode_1.fastq | 16 -
.../illumina/25T8B25T/fastq/nonBarcoded.1.fastq | 720 -
.../illumina/25T8B25T/fastq/nonBarcoded.2.fastq | 720 -
.../sf/picard/illumina/25T8B25T/sams/AAAAAAAA.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/AAAAGAAG.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/AACAATGG.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/AACGCATT.sam | 16 -
.../sf/picard/illumina/25T8B25T/sams/ACAAAATT.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam | 6 -
.../sf/picard/illumina/25T8B25T/sams/ACCAGTTG.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/ACGAAATC.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/ACTGTACC.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/ACTGTATC.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/AGAAAAGA.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/AGCATGGA.sam | 8 -
.../sf/picard/illumina/25T8B25T/sams/AGGTAAGG.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam | 12 -
.../sf/picard/illumina/25T8B25T/sams/ATTCCTCT.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/CAACTCTC.sam | 12 -
.../sf/picard/illumina/25T8B25T/sams/CAATAGAC.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam | 16 -
.../sf/picard/illumina/25T8B25T/sams/CAGCGGAT.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam | 12 -
.../sf/picard/illumina/25T8B25T/sams/CCAACATT.sam | 16 -
.../sf/picard/illumina/25T8B25T/sams/CCAGCACC.sam | 8 -
.../sf/picard/illumina/25T8B25T/sams/CCATGCGT.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/CGCCTTCC.sam | 6 -
.../sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam | 12 -
.../sf/picard/illumina/25T8B25T/sams/CTAACTCG.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/CTATGCGC.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/CTATGCGT.sam | 16 -
.../sf/picard/illumina/25T8B25T/sams/CTGCGGAT.sam | 8 -
.../sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam | 14 -
.../sf/picard/illumina/25T8B25T/sams/GAAAAAAA.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/GAACGAT..sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/GAAGGAAG.sam | 8 -
.../sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam | 16 -
.../sf/picard/illumina/25T8B25T/sams/GACCAGGC.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/GACCGTTG.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/GACCTAAC.sam | 4 -
.../sf/picard/illumina/25T8B25T/sams/GATATCCA.sam | 8 -
.../sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam | 12 -
.../sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam | 12 -
.../sf/picard/illumina/25T8B25T/sams/GTAACATC.sam | 6 -
.../sf/picard/illumina/25T8B25T/sams/GTCCACAG.sam | 6 -
.../net/sf/picard/illumina/25T8B25T/sams/N.sam | 34 -
.../sf/picard/illumina/25T8B25T/sams/TAAGCACA.sam | 6 -
.../sf/picard/illumina/25T8B25T/sams/TACCGTCT.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/TAGCGGTA.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/TATCAGCC.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/TATCCAGG.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/TATCCATG.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/TATCTCGG.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/TATCTGCC.sam | 16 -
.../sf/picard/illumina/25T8B25T/sams/TCCGTCTA.sam | 2 -
.../sf/picard/illumina/25T8B25T/sams/TCGCTAGA.sam | 12 -
.../sf/picard/illumina/25T8B25T/sams/TCTGCAAG.sam | 4 -
.../sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam | 6 -
.../sf/picard/illumina/25T8B25T/sams/TGCTGCTG.sam | 10 -
.../sf/picard/illumina/25T8B25T/sams/TGTAACTC.sam | 4 -
.../sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam | 8 -
.../sf/picard/illumina/25T8B25T/sams/TTGTCTAT.sam | 10 -
.../picard/illumina/25T8B25T/sams/nonBarcoded.sam | 182 -
.../25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq | 4 -
.../25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq | 4 -
.../fastq/AACTTGACGCTCTCTT.barcode_1.fastq | 4 -
.../fastq/AACTTGACGCTCTCTT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq | 4 -
.../25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq | 4 -
.../fastq/AAGACACTAGTCACCT.barcode_1.fastq | 4 -
.../fastq/AAGACACTAGTCACCT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq | 4 -
.../25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq | 4 -
.../fastq/ACAGGTATCACTTCAT.barcode_1.fastq | 4 -
.../fastq/ACAGGTATCACTTCAT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq | 8 -
.../25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq | 8 -
.../fastq/ACAGTTGAATCTTCTC.barcode_1.fastq | 8 -
.../fastq/ACAGTTGAATCTTCTC.barcode_2.fastq | 8 -
.../25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq | 4 -
.../25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq | 4 -
.../fastq/ACCAACTGCATCACTT.barcode_1.fastq | 4 -
.../fastq/ACCAACTGCATCACTT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq | 4 -
.../25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq | 4 -
.../fastq/ACTAAGACGTCCTCAT.barcode_1.fastq | 4 -
.../fastq/ACTAAGACGTCCTCAT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq | 4 -
.../25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq | 4 -
.../fastq/AGGTGCGAGACATTAA.barcode_1.fastq | 4 -
.../fastq/AGGTGCGAGACATTAA.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq | 4 -
.../25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq | 4 -
.../fastq/AGGTTATCTTAGCCAG.barcode_1.fastq | 4 -
.../fastq/AGGTTATCTTAGCCAG.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq | 4 -
.../25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq | 4 -
.../fastq/AGTTGCTTTGACTTGG.barcode_1.fastq | 4 -
.../fastq/AGTTGCTTTGACTTGG.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq | 4 -
.../25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq | 4 -
.../fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq | 4 -
.../fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq | 4 -
.../25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq | 4 -
.../fastq/CAATAGTCCGACTCTC.barcode_1.fastq | 4 -
.../fastq/CAATAGTCCGACTCTC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq | 4 -
.../25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq | 4 -
.../fastq/CAGCAAGGGCGATATT.barcode_1.fastq | 4 -
.../fastq/CAGCAAGGGCGATATT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq | 4 -
.../25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq | 4 -
.../fastq/CAGCGGTAAGTACTGC.barcode_1.fastq | 4 -
.../fastq/CAGCGGTAAGTACTGC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq | 8 -
.../25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq | 8 -
.../fastq/CATGCTTATAGCATTG.barcode_1.fastq | 8 -
.../fastq/CATGCTTATAGCATTG.barcode_2.fastq | 8 -
.../25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq | 8 -
.../25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq | 8 -
.../fastq/CCAGAGCTCAACTGAT.barcode_1.fastq | 8 -
.../fastq/CCAGAGCTCAACTGAT.barcode_2.fastq | 8 -
.../25T8B8B25T/fastq/CCCGATTTTCTCTCCC.1.fastq | 0
.../25T8B8B25T/fastq/CCCGATTTTCTCTCCC.2.fastq | 0
.../fastq/CCCGATTTTCTCTCCC.barcode_1.fastq | 0
.../fastq/CCCGATTTTCTCTCCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq | 4 -
.../25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq | 4 -
.../fastq/CCTATGCCAATTGGCC.barcode_1.fastq | 4 -
.../fastq/CCTATGCCAATTGGCC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CCTATTCTTCGTTTTC.1.fastq | 0
.../25T8B8B25T/fastq/CCTATTCTTCGTTTTC.2.fastq | 0
.../fastq/CCTATTCTTCGTTTTC.barcode_1.fastq | 0
.../fastq/CCTATTCTTCGTTTTC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.1.fastq | 0
.../25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.2.fastq | 0
.../fastq/CCTCTTCTCTCGCTTT.barcode_1.fastq | 0
.../fastq/CCTCTTCTCTCGCTTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.1.fastq | 0
.../25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.2.fastq | 0
.../fastq/CCTCTTTCTTCTGCTC.barcode_1.fastq | 0
.../fastq/CCTCTTTCTTCTGCTC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq | 4 -
.../25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq | 4 -
.../fastq/CCTTCGCAGAATCGAC.barcode_1.fastq | 4 -
.../fastq/CCTTCGCAGAATCGAC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CCTTCTTTTATCATTT.1.fastq | 0
.../25T8B8B25T/fastq/CCTTCTTTTATCATTT.2.fastq | 0
.../fastq/CCTTCTTTTATCATTT.barcode_1.fastq | 0
.../fastq/CCTTCTTTTATCATTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq | 4 -
.../25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq | 4 -
.../fastq/CGCTATGTTTCACCTT.barcode_1.fastq | 4 -
.../fastq/CGCTATGTTTCACCTT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CGCTATGTTTCTCCTT.1.fastq | 0
.../25T8B8B25T/fastq/CGCTATGTTTCTCCTT.2.fastq | 0
.../fastq/CGCTATGTTTCTCCTT.barcode_1.fastq | 0
.../fastq/CGCTATGTTTCTCCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq | 4 -
.../25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq | 4 -
.../fastq/CTACCAGGTTCTTGGC.barcode_1.fastq | 4 -
.../fastq/CTACCAGGTTCTTGGC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.1.fastq | 0
.../25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.2.fastq | 0
.../fastq/CTCCCTCTTCCTTCTT.barcode_1.fastq | 0
.../fastq/CTCCCTCTTCCTTCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq | 4 -
.../25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq | 4 -
.../fastq/CTGTAATCCTATTAGC.barcode_1.fastq | 4 -
.../fastq/CTGTAATCCTATTAGC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq | 4 -
.../25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq | 4 -
.../fastq/GACCAGGACCATCACA.barcode_1.fastq | 4 -
.../fastq/GACCAGGACCATCACA.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq | 8 -
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq | 8 -
.../fastq/GCCGTCGAAGGTACCA.barcode_1.fastq | 8 -
.../fastq/GCCGTCGAAGGTACCA.barcode_2.fastq | 8 -
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCC.1.fastq | 0
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCC.2.fastq | 0
.../fastq/GCCGTCGAAGGTACCC.barcode_1.fastq | 0
.../fastq/GCCGTCGAAGGTACCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GCCGTCGATGGTACCC.1.fastq | 0
.../25T8B8B25T/fastq/GCCGTCGATGGTACCC.2.fastq | 0
.../fastq/GCCGTCGATGGTACCC.barcode_1.fastq | 0
.../fastq/GCCGTCGATGGTACCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq | 4 -
.../25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq | 4 -
.../fastq/GCCTAGCCCTTGAATC.barcode_1.fastq | 4 -
.../fastq/GCCTAGCCCTTGAATC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/GCTATCCACCTCCCCC.1.fastq | 0
.../25T8B8B25T/fastq/GCTATCCACCTCCCCC.2.fastq | 0
.../fastq/GCTATCCACCTCCCCC.barcode_1.fastq | 0
.../fastq/GCTATCCACCTCCCCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq | 4 -
.../25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq | 4 -
.../fastq/GTATAACAAATTCAAC.barcode_1.fastq | 4 -
.../fastq/GTATAACAAATTCAAC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/GTATAACATATTCAAC.1.fastq | 0
.../25T8B8B25T/fastq/GTATAACATATTCAAC.2.fastq | 0
.../fastq/GTATAACATATTCAAC.barcode_1.fastq | 0
.../fastq/GTATAACATATTCAAC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq | 4 -
.../25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq | 4 -
.../fastq/GTCTGATGGAACTTCG.barcode_1.fastq | 4 -
.../fastq/GTCTGATGGAACTTCG.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/GTCTGATGTCACTTCC.1.fastq | 0
.../25T8B8B25T/fastq/GTCTGATGTCACTTCC.2.fastq | 0
.../fastq/GTCTGATGTCACTTCC.barcode_1.fastq | 0
.../fastq/GTCTGATGTCACTTCC.barcode_2.fastq | 0
.../sf/picard/illumina/25T8B8B25T/fastq/NN.1.fastq | 76 -
.../sf/picard/illumina/25T8B8B25T/fastq/NN.2.fastq | 76 -
.../illumina/25T8B8B25T/fastq/NN.barcode_1.fastq | 76 -
.../illumina/25T8B8B25T/fastq/NN.barcode_2.fastq | 76 -
.../25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq | 8 -
.../25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq | 8 -
.../fastq/TACTTAGCGTCTGCAC.barcode_1.fastq | 8 -
.../fastq/TACTTAGCGTCTGCAC.barcode_2.fastq | 8 -
.../25T8B8B25T/fastq/TCCCCGTTCCAACTTC.1.fastq | 0
.../25T8B8B25T/fastq/TCCCCGTTCCAACTTC.2.fastq | 0
.../fastq/TCCCCGTTCCAACTTC.barcode_1.fastq | 0
.../fastq/TCCCCGTTCCAACTTC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq | 4 -
.../25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq | 4 -
.../fastq/TCCTTGGTGCTGCACT.barcode_1.fastq | 4 -
.../fastq/TCCTTGGTGCTGCACT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq | 4 -
.../25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq | 4 -
.../fastq/TCGCCTTGCCAACGCT.barcode_1.fastq | 4 -
.../fastq/TCGCCTTGCCAACGCT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq | 8 -
.../25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq | 8 -
.../fastq/TGCAAGTACGAACTTC.barcode_1.fastq | 8 -
.../fastq/TGCAAGTACGAACTTC.barcode_2.fastq | 8 -
.../25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq | 4 -
.../25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq | 4 -
.../fastq/TGCTCGACTTCACAGA.barcode_1.fastq | 4 -
.../fastq/TGCTCGACTTCACAGA.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/TGCTCGACTTCACAGT.1.fastq | 0
.../25T8B8B25T/fastq/TGCTCGACTTCACAGT.2.fastq | 0
.../fastq/TGCTCGACTTCACAGT.barcode_1.fastq | 0
.../fastq/TGCTCGACTTCACAGT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq | 4 -
.../25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq | 4 -
.../fastq/TGTAATCACCTCTAAC.barcode_1.fastq | 4 -
.../fastq/TGTAATCACCTCTAAC.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/TGTATCTCTTACTCTT.1.fastq | 0
.../25T8B8B25T/fastq/TGTATCTCTTACTCTT.2.fastq | 0
.../fastq/TGTATCTCTTACTCTT.barcode_1.fastq | 0
.../fastq/TGTATCTCTTACTCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.1.fastq | 0
.../25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.2.fastq | 0
.../fastq/TGTCGGTTTTTTGCTT.barcode_1.fastq | 0
.../fastq/TGTCGGTTTTTTGCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq | 4 -
.../25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq | 4 -
.../fastq/TGTTCCGAAACCTCTT.barcode_1.fastq | 4 -
.../fastq/TGTTCCGAAACCTCTT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq | 4 -
.../25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq | 4 -
.../fastq/TTAATCAGCTGGTATT.barcode_1.fastq | 4 -
.../fastq/TTAATCAGCTGGTATT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq | 4 -
.../25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq | 4 -
.../fastq/TTATATCTTCATGTCT.barcode_1.fastq | 4 -
.../fastq/TTATATCTTCATGTCT.barcode_2.fastq | 4 -
.../25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.1.fastq | 0
.../25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.2.fastq | 0
.../fastq/TTCCCCAGTGCTTTTA.barcode_1.fastq | 0
.../fastq/TTCCCCAGTGCTTTTA.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TTCCTCCTCACCATCC.1.fastq | 0
.../25T8B8B25T/fastq/TTCCTCCTCACCATCC.2.fastq | 0
.../fastq/TTCCTCCTCACCATCC.barcode_1.fastq | 0
.../fastq/TTCCTCCTCACCATCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TTCTCATCTTCCTTCC.1.fastq | 0
.../25T8B8B25T/fastq/TTCTCATCTTCCTTCC.2.fastq | 0
.../fastq/TTCTCATCTTCCTTCC.barcode_1.fastq | 0
.../fastq/TTCTCATCTTCCTTCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq | 4 -
.../25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq | 4 -
.../fastq/TTGAATAGATATCCGA.barcode_1.fastq | 4 -
.../fastq/TTGAATAGATATCCGA.barcode_2.fastq | 4 -
.../picard/illumina/25T8B8B25T/sams/AACTTGAC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/AAGACACT.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam | 6 -
.../picard/illumina/25T8B8B25T/sams/ACCAACTG.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/ACCTACTG.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/AGGTTATC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/ATTATCAA.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CAATAGTC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/CATGCTTA.sam | 6 -
.../picard/illumina/25T8B8B25T/sams/CATGCTTT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CATGTTCG.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam | 6 -
.../picard/illumina/25T8B8B25T/sams/CCCGATTT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CCTATGCC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/CCTATTCT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CGCTATGT.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/CTACCAGG.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/CTGTAATC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/GACCAGGA.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam | 6 -
.../picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/GCTATCCA.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/GTATAACA.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/GTCTGATG.sam | 4 -
.../net/sf/picard/illumina/25T8B8B25T/sams/N.sam | 40 -
.../picard/illumina/25T8B8B25T/sams/TACTTAGC.sam | 6 -
.../picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam | 6 -
.../picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/TGTAATCA.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/TGTATCTC.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/TTAATCAG.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/TTATATCT.sam | 4 -
.../picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/TTCTCATC.sam | 2 -
.../picard/illumina/25T8B8B25T/sams/TTGAATAG.sam | 4 -
.../picard/illumina/readerTests/s_1_1104_pos.txt | 0
.../intervallist/IntervalListFromVCFTest.vcf | 53 -
.../IntervalListFromVCFTestComp.interval_list | 7 -
...ntervalListFromVCFTestCompInverse.interval_list | 10 -
...lListFromVCFTestCompInverseManual.interval_list | 10 -
.../intervallist/IntervalListFromVCFTestManual.vcf | 57 -
...IntervalListFromVCFTestManualComp.interval_list | 12 -
.../IntervalListchr123_empty.interval_list | 4 -
testdata/net/sf/picard/io/5newline5.txt | 2 -
testdata/net/sf/picard/io/empty.txt | 0
testdata/net/sf/picard/io/slurptest.txt | 3 -
.../net/sf/picard/liftover/hg18ToHg19.over.chain | 30850 -------------------
.../reference/Homo_sapiens_assembly18.fasta.fai | 45 -
.../reference/Homo_sapiens_assembly18.trimmed.dict | 3 -
.../Homo_sapiens_assembly18.trimmed.fasta | 16946 ----------
.../Homo_sapiens_assembly18.trimmed.fasta.fai | 2 -
.../Homo_sapiens_assembly18.trimmed.nodict.fasta | 16946 ----------
...omo_sapiens_assembly18.trimmed.nodict.fasta.fai | 2 -
testdata/net/sf/picard/reference/testing.fai | 7 -
testdata/net/sf/picard/sam/Chromosome1to10.bam | Bin 3708 -> 0 bytes
testdata/net/sf/picard/sam/Chromosome5to9.bam | Bin 1991 -> 0 bytes
.../sf/picard/sam/MergeBamAlignment/cliptest.dict | 2 -
.../sam/MergeSamFiles/case1/expected_output.sam | 13 -
.../sam/MergeSamFiles/case2/expected_output.sam | 21 -
.../picard/sam/ValidateSamFileTest/bad_index.bai | Bin 1621416 -> 0 bytes
.../picard/sam/ValidateSamFileTest/bad_index.bam | Bin 594149 -> 0 bytes
.../picard/sam/ValidateSamFileTest/buggyHeader.sam | 30 -
.../sam/ValidateSamFileTest/duplicate_rg.sam | 11 -
.../picard/sam/ValidateSamFileTest/hanging_tab.sam | 3 -
.../inappropriate_mate_cigar_string.sam | 13 -
.../invalid_mate_cigar_string.sam | 19 -
.../invalid_queryname_sort_order.sam | 27 -
.../sam/ValidateSamFileTest/missing_fields.sam | 3 -
.../ValidateSamFileTest/missing_platform_unit.sam | 10 -
.../picard/sam/ValidateSamFileTest/truncated.bam | Bin 336031 -> 0 bytes
.../sam/ValidateSamFileTest/truncated_quals.sam | 4 -
.../sam/ValidateSamFileTest/truncated_tag.sam | 4 -
.../sf/picard/sam/ValidateSamFileTest/valid.sam | 21 -
.../sam/ValidateSamFileTest/zero_length_read.sam | 3 -
.../sf/picard/sam/bam2fastq/nonpaired/.gitignore | 0
.../sf/picard/sam/fastq2bam/bad-format/0lines.txt | 0
.../net/sf/picard/sam/mate_cigar_and_no_oqs.sam | 4 -
testdata/net/sf/picard/sam/mate_cigar_and_oqs.sam | 4 -
.../net/sf/picard/sam/no_mate_cigar_and_no_oqs.sam | 4 -
.../net/sf/picard/sam/no_mate_cigar_and_oqs.sam | 4 -
testdata/net/sf/picard/sam/no_mates_and_no_oqs.sam | 6 -
.../no_mates_and_no_oqs_in_first_four_records.sam | 7 -
testdata/net/sf/picard/sam/no_mates_and_oqs.sam | 6 -
testdata/net/sf/picard/sam/readWithBadRname.sam | 6 -
testdata/net/sf/picard/sam/samHeaderProvider.sam | 15 -
testdata/net/sf/picard/sam/sequenceWithSpace.bam | Bin 391 -> 0 bytes
testdata/net/sf/picard/sam/sequenceWithSpace.sam | 6 -
.../illumina-as-standard.bam | Bin 652 -> 0 bytes
.../solexa-as-standard.bam | Bin 944 -> 0 bytes
.../net/sf/picard/util/scatterable.interval_list | 89 -
.../sf/samtools/BAMFileIndexTest/index_test.bam | Bin 594149 -> 0 bytes
.../samtools/BAMFileIndexTest/index_test.bam.bai | Bin 1621416 -> 0 bytes
.../SAMIntegerTagTest/variousAttributes.bam | Bin 258 -> 0 bytes
.../SAMIntegerTagTest/variousAttributes.sam | 4 -
testdata/net/sf/samtools/array_tags.sam | 3 -
testdata/net/sf/samtools/block_compressed.sam.gz | Bin 257 -> 0 bytes
testdata/net/sf/samtools/compressed.bam | Bin 307 -> 0 bytes
testdata/net/sf/samtools/compressed.sam.gz | Bin 238 -> 0 bytes
testdata/net/sf/samtools/coordinate_sorted.sam | 15 -
testdata/net/sf/samtools/empty.bai | Bin 8 -> 0 bytes
testdata/net/sf/samtools/empty.bam | Bin 90 -> 0 bytes
.../net/sf/samtools/empty_no_empty_gzip_block.bai | Bin 8 -> 0 bytes
.../net/sf/samtools/empty_no_empty_gzip_block.bam | Bin 62 -> 0 bytes
testdata/net/sf/samtools/queryname_sorted.sam | 15 -
.../sf/samtools/recordWithHexArrayAttribute.bam | Bin 162 -> 0 bytes
.../sf/samtools/seekablestream/megabyteZeros.dat | Bin 1000000 -> 0 bytes
testdata/net/sf/samtools/uncompressed.sam | 15 -
testdata/net/sf/samtools/unsorted.sam | 15 -
testdata/net/sf/samtools/util/broad_logo.gif | Bin 4222 -> 0 bytes
testdata/net/sf/samtools/util/defective_bgzf.bam | Bin 359 -> 0 bytes
.../net/sf/samtools/util/no_bgzf_terminator.bam | Bin 354 -> 0 bytes
.../no_bq_cutoff.bait_bias_detail_metrics | 21 +
.../no_bq_cutoff.bait_bias_summary_metrics | 21 +
.../no_bq_cutoff.pre_adapter_detail_metrics | 21 +
.../no_bq_cutoff.pre_adapter_summary_metrics | 21 +
.../no_mq_cutoff.bait_bias_detail_metrics | 21 +
.../no_mq_cutoff.bait_bias_summary_metrics | 21 +
.../no_mq_cutoff.pre_adapter_detail_metrics | 21 +
.../no_mq_cutoff.pre_adapter_summary_metrics | 21 +
.../unmapped_mate.bait_bias_detail_metrics | 21 +
.../unmapped_mate.bait_bias_summary_metrics | 21 +
.../unmapped_mate.pre_adapter_detail_metrics | 21 +
.../unmapped_mate.pre_adapter_summary_metrics | 21 +
.../with_context.bait_bias_detail_metrics | 201 +
.../with_context.bait_bias_summary_metrics | 21 +
.../with_context.pre_adapter_detail_metrics | 201 +
.../with_context.pre_adapter_summary_metrics | 21 +
.../with_dbsnp.bait_bias_detail_metrics | 21 +
.../with_dbsnp.bait_bias_summary_metrics | 21 +
.../with_dbsnp.pre_adapter_detail_metrics | 21 +
.../with_dbsnp.pre_adapter_summary_metrics | 21 +
.../with_intervals.bait_bias_detail_metrics | 21 +
.../with_intervals.bait_bias_summary_metrics | 21 +
.../with_intervals.pre_adapter_detail_metrics | 21 +
.../with_intervals.pre_adapter_summary_metrics | 21 +
.../CollectSequencingArtifactMetrics/readme.txt | 24 +
.../test.dbsnp.vcf | 6 +
.../test.dbsnp.vcf.idx | Bin 0 -> 194 bytes
.../CollectSequencingArtifactMetrics/test.fasta | 18 +
.../test.interval_list | 6 +
.../CollectSequencingArtifactMetrics/test.sam | 27 +
.../Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/s_1_1101.filter | Bin
.../Intensities/BaseCalls/L002/C1.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C10.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C100.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C101.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C102.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C103.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C104.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C105.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C106.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C107.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C108.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C109.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C11.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C110.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C111.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C112.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C113.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C114.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C115.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C116.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C117.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C118.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C119.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C12.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C120.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C121.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C122.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C123.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C124.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C125.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C126.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C127.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C128.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C129.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C13.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C130.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C131.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C132.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C133.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C134.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C135.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C136.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C137.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C138.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C139.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C14.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C140.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C141.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C142.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C143.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C144.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C145.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C146.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C147.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C148.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C149.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C15.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C150.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C151.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C152.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C153.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C154.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C155.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C156.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C157.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C158.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C159.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C16.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C160.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C161.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C162.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C163.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C164.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C165.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C166.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C167.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C168.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C169.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C17.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C170.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C171.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C172.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C173.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C174.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C175.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C176.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C177.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C178.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C179.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C18.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C180.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C181.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C182.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C183.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C184.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C185.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C186.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C187.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C188.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C189.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C19.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C190.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C191.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C192.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C193.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C194.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C195.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C196.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C197.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C198.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C199.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C2.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C20.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C200.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C201.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C202.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C203.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C204.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C205.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C206.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C207.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C208.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C209.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C21.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C210.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C211.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C212.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C213.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C214.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C215.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C216.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C217.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C218.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C219.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C22.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C220.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C221.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C222.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C223.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C224.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C225.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C226.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C227.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C228.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C229.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C23.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C230.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C231.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C232.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C233.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C234.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C235.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C236.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C237.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C238.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C239.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C24.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C240.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C241.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C242.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C243.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C244.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C245.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C246.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C247.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C248.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C249.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C25.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C250.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C26.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C27.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C28.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C29.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C3.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C30.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C31.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C32.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C33.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C34.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C35.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C36.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C37.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C38.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C39.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C4.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C40.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C41.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C42.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C43.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C44.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C45.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C46.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C47.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C48.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C49.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C5.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C50.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C51.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C52.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C53.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C54.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C55.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C56.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C57.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C58.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C59.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C6.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C60.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C61.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C62.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C63.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C64.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C65.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C66.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C67.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C68.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C69.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C7.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C70.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C71.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C72.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C73.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C74.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C75.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C76.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C77.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C78.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C79.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C8.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C80.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C81.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C82.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C83.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C84.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C85.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C86.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C87.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C88.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C89.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C9.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C90.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C91.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C92.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C93.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C94.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C95.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C96.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C97.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C98.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/C99.1/s_2_1101.bcl | Bin
.../Intensities/BaseCalls/L002/s_2_1101.filter | Bin
.../125T125T/Data/Intensities/L001/s_1_1101.clocs | Bin
.../125T125T/Data/Intensities/L002/s_2_1101.clocs | Bin
.../Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C1.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C1.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C10.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C10.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C11.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C11.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C12.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C12.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C13.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C13.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C14.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C14.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C15.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C15.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C16.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C16.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C17.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C17.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C18.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C18.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C19.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C19.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C2.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C2.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C20.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C20.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C21.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C21.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C22.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C22.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C23.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C23.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C24.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C24.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C25.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C25.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C26.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C26.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C27.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C27.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C28.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C28.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C29.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C29.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C3.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C3.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C30.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C30.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C31.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C31.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C32.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C32.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C33.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C33.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C34.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C34.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C35.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C35.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C36.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C36.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C37.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C37.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C38.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C38.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C39.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C39.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C4.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C4.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C40.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C40.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C41.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C41.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C42.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C42.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C43.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C43.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C44.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C44.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C45.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C45.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C46.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C46.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C47.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C47.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C48.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C48.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C49.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C49.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C5.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C5.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C50.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C50.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C51.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C51.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C52.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C52.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C53.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C53.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C54.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C54.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C55.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C55.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C56.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C56.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C57.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C57.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C58.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C58.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C6.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C6.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C7.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C7.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C8.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C8.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C9.1/s_1_1201.bcl | Bin
.../Intensities/BaseCalls/L001/C9.1/s_1_2101.bcl | Bin
.../Intensities/BaseCalls/L001/s_1_1101.filter | Bin
.../Intensities/BaseCalls/L001/s_1_1201.filter | Bin
.../Intensities/BaseCalls/L001/s_1_2101.filter | Bin
.../Intensities/BaseCalls/s_1_1101_barcode.txt.gz | Bin
.../Intensities/BaseCalls/s_1_1201_barcode.txt.gz | Bin
.../Intensities/BaseCalls/s_1_2101_barcode.txt.gz | Bin
.../25T8B25T/Data/Intensities/L001/s_1_1101.clocs | Bin
.../25T8B25T/Data/Intensities/L001/s_1_1201.clocs | Bin
.../25T8B25T/Data/Intensities/L001/s_1_2101.clocs | Bin
.../illumina/25T8B25T/fastq/AAAAAAAA.1.fastq | 0
.../illumina/25T8B25T/fastq/AAAAAAAA.2.fastq | 0
.../25T8B25T/fastq/AAAAAAAA.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/AAAAGAAG.1.fastq | 0
.../illumina/25T8B25T/fastq/AAAAGAAG.2.fastq | 0
.../25T8B25T/fastq/AAAAGAAG.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/AACAATGG.1.fastq | 16 +
.../illumina/25T8B25T/fastq/AACAATGG.2.fastq | 16 +
.../25T8B25T/fastq/AACAATGG.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/AACGCATT.1.fastq | 28 +
.../illumina/25T8B25T/fastq/AACGCATT.2.fastq | 28 +
.../25T8B25T/fastq/AACGCATT.barcode_1.fastq | 28 +
.../illumina/25T8B25T/fastq/ACAAAATT.1.fastq | 0
.../illumina/25T8B25T/fastq/ACAAAATT.2.fastq | 0
.../25T8B25T/fastq/ACAAAATT.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/ACAGGTAT.1.fastq | 16 +
.../illumina/25T8B25T/fastq/ACAGGTAT.2.fastq | 16 +
.../25T8B25T/fastq/ACAGGTAT.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/ACAGTTGA.1.fastq | 8 +
.../illumina/25T8B25T/fastq/ACAGTTGA.2.fastq | 8 +
.../25T8B25T/fastq/ACAGTTGA.barcode_1.fastq | 8 +
.../illumina/25T8B25T/fastq/ACCAGTTG.1.fastq | 0
.../illumina/25T8B25T/fastq/ACCAGTTG.2.fastq | 0
.../25T8B25T/fastq/ACCAGTTG.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/ACGAAATC.1.fastq | 0
.../illumina/25T8B25T/fastq/ACGAAATC.2.fastq | 0
.../25T8B25T/fastq/ACGAAATC.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/ACTAAGAC.1.fastq | 16 +
.../illumina/25T8B25T/fastq/ACTAAGAC.2.fastq | 16 +
.../25T8B25T/fastq/ACTAAGAC.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/ACTGTACC.1.fastq | 0
.../illumina/25T8B25T/fastq/ACTGTACC.2.fastq | 0
.../25T8B25T/fastq/ACTGTACC.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/ACTGTATC.1.fastq | 16 +
.../illumina/25T8B25T/fastq/ACTGTATC.2.fastq | 16 +
.../25T8B25T/fastq/ACTGTATC.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/AGAAAAGA.1.fastq | 0
.../illumina/25T8B25T/fastq/AGAAAAGA.2.fastq | 0
.../25T8B25T/fastq/AGAAAAGA.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/AGCATGGA.1.fastq | 12 +
.../illumina/25T8B25T/fastq/AGCATGGA.2.fastq | 12 +
.../25T8B25T/fastq/AGCATGGA.barcode_1.fastq | 12 +
.../illumina/25T8B25T/fastq/AGGTAAGG.1.fastq | 16 +
.../illumina/25T8B25T/fastq/AGGTAAGG.2.fastq | 16 +
.../25T8B25T/fastq/AGGTAAGG.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/AGGTCGCA.1.fastq | 16 +
.../illumina/25T8B25T/fastq/AGGTCGCA.2.fastq | 16 +
.../25T8B25T/fastq/AGGTCGCA.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/ATTATCAA.1.fastq | 20 +
.../illumina/25T8B25T/fastq/ATTATCAA.2.fastq | 20 +
.../25T8B25T/fastq/ATTATCAA.barcode_1.fastq | 20 +
.../illumina/25T8B25T/fastq/ATTCCTCT.1.fastq | 16 +
.../illumina/25T8B25T/fastq/ATTCCTCT.2.fastq | 16 +
.../25T8B25T/fastq/ATTCCTCT.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/CAACTCTC.1.fastq | 20 +
.../illumina/25T8B25T/fastq/CAACTCTC.2.fastq | 20 +
.../25T8B25T/fastq/CAACTCTC.barcode_1.fastq | 20 +
.../illumina/25T8B25T/fastq/CAATAGAC.1.fastq | 0
.../illumina/25T8B25T/fastq/CAATAGAC.2.fastq | 0
.../25T8B25T/fastq/CAATAGAC.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/CAATAGTC.1.fastq | 28 +
.../illumina/25T8B25T/fastq/CAATAGTC.2.fastq | 28 +
.../25T8B25T/fastq/CAATAGTC.barcode_1.fastq | 28 +
.../illumina/25T8B25T/fastq/CAGCGGAT.1.fastq | 0
.../illumina/25T8B25T/fastq/CAGCGGAT.2.fastq | 0
.../25T8B25T/fastq/CAGCGGAT.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/CAGCGGTA.1.fastq | 20 +
.../illumina/25T8B25T/fastq/CAGCGGTA.2.fastq | 20 +
.../25T8B25T/fastq/CAGCGGTA.barcode_1.fastq | 20 +
.../illumina/25T8B25T/fastq/CCAACATT.1.fastq | 28 +
.../illumina/25T8B25T/fastq/CCAACATT.2.fastq | 28 +
.../25T8B25T/fastq/CCAACATT.barcode_1.fastq | 28 +
.../illumina/25T8B25T/fastq/CCAGCACC.1.fastq | 12 +
.../illumina/25T8B25T/fastq/CCAGCACC.2.fastq | 12 +
.../25T8B25T/fastq/CCAGCACC.barcode_1.fastq | 12 +
.../illumina/25T8B25T/fastq/CCATGCGT.1.fastq | 0
.../illumina/25T8B25T/fastq/CCATGCGT.2.fastq | 0
.../25T8B25T/fastq/CCATGCGT.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/CGCCTTCC.1.fastq | 8 +
.../illumina/25T8B25T/fastq/CGCCTTCC.2.fastq | 8 +
.../25T8B25T/fastq/CGCCTTCC.barcode_1.fastq | 8 +
.../illumina/25T8B25T/fastq/CGCTATGT.1.fastq | 20 +
.../illumina/25T8B25T/fastq/CGCTATGT.2.fastq | 20 +
.../25T8B25T/fastq/CGCTATGT.barcode_1.fastq | 20 +
.../illumina/25T8B25T/fastq/CTAACTCG.1.fastq | 16 +
.../illumina/25T8B25T/fastq/CTAACTCG.2.fastq | 16 +
.../25T8B25T/fastq/CTAACTCG.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/CTATGCGC.1.fastq | 0
.../illumina/25T8B25T/fastq/CTATGCGC.2.fastq | 0
.../25T8B25T/fastq/CTATGCGC.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/CTATGCGT.1.fastq | 28 +
.../illumina/25T8B25T/fastq/CTATGCGT.2.fastq | 28 +
.../25T8B25T/fastq/CTATGCGT.barcode_1.fastq | 28 +
.../illumina/25T8B25T/fastq/CTGCGGAT.1.fastq | 12 +
.../illumina/25T8B25T/fastq/CTGCGGAT.2.fastq | 12 +
.../25T8B25T/fastq/CTGCGGAT.barcode_1.fastq | 12 +
.../illumina/25T8B25T/fastq/CTGTAATC.1.fastq | 24 +
.../illumina/25T8B25T/fastq/CTGTAATC.2.fastq | 24 +
.../25T8B25T/fastq/CTGTAATC.barcode_1.fastq | 24 +
.../illumina/25T8B25T/fastq/GAAAAAAA.1.fastq | 0
.../illumina/25T8B25T/fastq/GAAAAAAA.2.fastq | 0
.../25T8B25T/fastq/GAAAAAAA.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/GAACGAT..1.fastq | 0
.../illumina/25T8B25T/fastq/GAACGAT..2.fastq | 0
.../25T8B25T/fastq/GAACGAT..barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/GAAGGAAG.1.fastq | 12 +
.../illumina/25T8B25T/fastq/GAAGGAAG.2.fastq | 12 +
.../25T8B25T/fastq/GAAGGAAG.barcode_1.fastq | 12 +
.../illumina/25T8B25T/fastq/GACCAGGA.1.fastq | 28 +
.../illumina/25T8B25T/fastq/GACCAGGA.2.fastq | 28 +
.../25T8B25T/fastq/GACCAGGA.barcode_1.fastq | 28 +
.../illumina/25T8B25T/fastq/GACCAGGC.1.fastq | 0
.../illumina/25T8B25T/fastq/GACCAGGC.2.fastq | 0
.../25T8B25T/fastq/GACCAGGC.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/GACCGTTG.1.fastq | 16 +
.../illumina/25T8B25T/fastq/GACCGTTG.2.fastq | 16 +
.../25T8B25T/fastq/GACCGTTG.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/GACCTAAC.1.fastq | 4 +
.../illumina/25T8B25T/fastq/GACCTAAC.2.fastq | 4 +
.../25T8B25T/fastq/GACCTAAC.barcode_1.fastq | 4 +
.../illumina/25T8B25T/fastq/GATATCCA.1.fastq | 12 +
.../illumina/25T8B25T/fastq/GATATCCA.2.fastq | 12 +
.../25T8B25T/fastq/GATATCCA.barcode_1.fastq | 12 +
.../illumina/25T8B25T/fastq/GCCGTCGA.1.fastq | 20 +
.../illumina/25T8B25T/fastq/GCCGTCGA.2.fastq | 20 +
.../25T8B25T/fastq/GCCGTCGA.barcode_1.fastq | 20 +
.../illumina/25T8B25T/fastq/GCCTAGCC.1.fastq | 20 +
.../illumina/25T8B25T/fastq/GCCTAGCC.2.fastq | 20 +
.../25T8B25T/fastq/GCCTAGCC.barcode_1.fastq | 20 +
.../illumina/25T8B25T/fastq/GTAACATC.1.fastq | 8 +
.../illumina/25T8B25T/fastq/GTAACATC.2.fastq | 8 +
.../25T8B25T/fastq/GTAACATC.barcode_1.fastq | 8 +
.../illumina/25T8B25T/fastq/GTCCACAG.1.fastq | 8 +
.../illumina/25T8B25T/fastq/GTCCACAG.2.fastq | 8 +
.../25T8B25T/fastq/GTCCACAG.barcode_1.fastq | 8 +
testdata/picard/illumina/25T8B25T/fastq/N.1.fastq | 64 +
testdata/picard/illumina/25T8B25T/fastq/N.2.fastq | 64 +
.../illumina/25T8B25T/fastq/N.barcode_1.fastq | 64 +
.../illumina/25T8B25T/fastq/TAAGCACA.1.fastq | 8 +
.../illumina/25T8B25T/fastq/TAAGCACA.2.fastq | 8 +
.../25T8B25T/fastq/TAAGCACA.barcode_1.fastq | 8 +
.../illumina/25T8B25T/fastq/TACCGTCT.1.fastq | 0
.../illumina/25T8B25T/fastq/TACCGTCT.2.fastq | 0
.../25T8B25T/fastq/TACCGTCT.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/TAGCGGTA.1.fastq | 0
.../illumina/25T8B25T/fastq/TAGCGGTA.2.fastq | 0
.../25T8B25T/fastq/TAGCGGTA.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/TATCAGCC.1.fastq | 0
.../illumina/25T8B25T/fastq/TATCAGCC.2.fastq | 0
.../25T8B25T/fastq/TATCAGCC.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/TATCCAGG.1.fastq | 16 +
.../illumina/25T8B25T/fastq/TATCCAGG.2.fastq | 16 +
.../25T8B25T/fastq/TATCCAGG.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/TATCCATG.1.fastq | 0
.../illumina/25T8B25T/fastq/TATCCATG.2.fastq | 0
.../25T8B25T/fastq/TATCCATG.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/TATCTCGG.1.fastq | 0
.../illumina/25T8B25T/fastq/TATCTCGG.2.fastq | 0
.../25T8B25T/fastq/TATCTCGG.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/TATCTGCC.1.fastq | 28 +
.../illumina/25T8B25T/fastq/TATCTGCC.2.fastq | 28 +
.../25T8B25T/fastq/TATCTGCC.barcode_1.fastq | 28 +
.../illumina/25T8B25T/fastq/TCCGTCTA.1.fastq | 0
.../illumina/25T8B25T/fastq/TCCGTCTA.2.fastq | 0
.../25T8B25T/fastq/TCCGTCTA.barcode_1.fastq | 0
.../illumina/25T8B25T/fastq/TCGCTAGA.1.fastq | 20 +
.../illumina/25T8B25T/fastq/TCGCTAGA.2.fastq | 20 +
.../25T8B25T/fastq/TCGCTAGA.barcode_1.fastq | 20 +
.../illumina/25T8B25T/fastq/TCTGCAAG.1.fastq | 4 +
.../illumina/25T8B25T/fastq/TCTGCAAG.2.fastq | 4 +
.../25T8B25T/fastq/TCTGCAAG.barcode_1.fastq | 4 +
.../illumina/25T8B25T/fastq/TGCAAGTA.1.fastq | 8 +
.../illumina/25T8B25T/fastq/TGCAAGTA.2.fastq | 8 +
.../25T8B25T/fastq/TGCAAGTA.barcode_1.fastq | 8 +
.../illumina/25T8B25T/fastq/TGCTGCTG.1.fastq | 16 +
.../illumina/25T8B25T/fastq/TGCTGCTG.2.fastq | 16 +
.../25T8B25T/fastq/TGCTGCTG.barcode_1.fastq | 16 +
.../illumina/25T8B25T/fastq/TGTAACTC.1.fastq | 4 +
.../illumina/25T8B25T/fastq/TGTAACTC.2.fastq | 4 +
.../25T8B25T/fastq/TGTAACTC.barcode_1.fastq | 4 +
.../illumina/25T8B25T/fastq/TGTAATCA.1.fastq | 12 +
.../illumina/25T8B25T/fastq/TGTAATCA.2.fastq | 12 +
.../25T8B25T/fastq/TGTAATCA.barcode_1.fastq | 12 +
.../illumina/25T8B25T/fastq/TTGTCTAT.1.fastq | 16 +
.../illumina/25T8B25T/fastq/TTGTCTAT.2.fastq | 16 +
.../25T8B25T/fastq/TTGTCTAT.barcode_1.fastq | 16 +
.../picard/illumina/25T8B25T/fastq/barcode.params | 0
.../illumina/25T8B25T/fastq/mp_barcode.params | 0
.../illumina/25T8B25T/fastq/nonBarcoded.1.fastq | 720 +
.../illumina/25T8B25T/fastq/nonBarcoded.2.fastq | 720 +
.../illumina/25T8B25T/fastq/testMultiplex.1.fastq | 0
.../25T8B25T/fastq/testMultiplex.barcode_1.fastq | 0
.../25T8B25T/fastq/testMultiplexRH.1.fastq | 0
.../25T8B25T/fastq/testMultiplexRH.2.fastq | 0
.../25T8B25T/fastq/testMultiplexRH.barcode_1.fastq | 0
.../picard/illumina/25T8B25T/sams/AAAAAAAA.sam | 2 +
.../picard/illumina/25T8B25T/sams/AAAAGAAG.sam | 2 +
.../picard/illumina/25T8B25T/sams/AACAATGG.sam | 10 +
.../picard/illumina/25T8B25T/sams/AACGCATT.sam | 16 +
.../picard/illumina/25T8B25T/sams/ACAAAATT.sam | 2 +
.../picard/illumina/25T8B25T/sams/ACAGGTAT.sam | 10 +
.../picard/illumina/25T8B25T/sams/ACAGTTGA.sam | 6 +
.../picard/illumina/25T8B25T/sams/ACCAGTTG.sam | 2 +
.../picard/illumina/25T8B25T/sams/ACGAAATC.sam | 2 +
.../picard/illumina/25T8B25T/sams/ACTAAGAC.sam | 10 +
.../picard/illumina/25T8B25T/sams/ACTGTACC.sam | 2 +
.../picard/illumina/25T8B25T/sams/ACTGTATC.sam | 10 +
.../picard/illumina/25T8B25T/sams/AGAAAAGA.sam | 2 +
.../picard/illumina/25T8B25T/sams/AGCATGGA.sam | 8 +
.../picard/illumina/25T8B25T/sams/AGGTAAGG.sam | 10 +
.../picard/illumina/25T8B25T/sams/AGGTCGCA.sam | 10 +
.../picard/illumina/25T8B25T/sams/ATTATCAA.sam | 12 +
.../picard/illumina/25T8B25T/sams/ATTCCTCT.sam | 10 +
.../picard/illumina/25T8B25T/sams/CAACTCTC.sam | 12 +
.../picard/illumina/25T8B25T/sams/CAATAGAC.sam | 2 +
.../picard/illumina/25T8B25T/sams/CAATAGTC.sam | 16 +
.../picard/illumina/25T8B25T/sams/CAGCGGAT.sam | 2 +
.../picard/illumina/25T8B25T/sams/CAGCGGTA.sam | 12 +
.../picard/illumina/25T8B25T/sams/CCAACATT.sam | 16 +
.../picard/illumina/25T8B25T/sams/CCAGCACC.sam | 8 +
.../picard/illumina/25T8B25T/sams/CCATGCGT.sam | 2 +
.../picard/illumina/25T8B25T/sams/CGCCTTCC.sam | 6 +
.../picard/illumina/25T8B25T/sams/CGCTATGT.sam | 12 +
.../picard/illumina/25T8B25T/sams/CTAACTCG.sam | 10 +
.../picard/illumina/25T8B25T/sams/CTATGCGC.sam | 2 +
.../picard/illumina/25T8B25T/sams/CTATGCGT.sam | 16 +
.../picard/illumina/25T8B25T/sams/CTGCGGAT.sam | 8 +
.../picard/illumina/25T8B25T/sams/CTGTAATC.sam | 14 +
.../picard/illumina/25T8B25T/sams/GAAAAAAA.sam | 2 +
.../picard/illumina/25T8B25T/sams/GAACGAT..sam | 2 +
.../picard/illumina/25T8B25T/sams/GAAGGAAG.sam | 8 +
.../picard/illumina/25T8B25T/sams/GACCAGGA.sam | 16 +
.../picard/illumina/25T8B25T/sams/GACCAGGC.sam | 2 +
.../picard/illumina/25T8B25T/sams/GACCGTTG.sam | 10 +
.../picard/illumina/25T8B25T/sams/GACCTAAC.sam | 4 +
.../picard/illumina/25T8B25T/sams/GATATCCA.sam | 8 +
.../picard/illumina/25T8B25T/sams/GCCGTCGA.sam | 12 +
.../picard/illumina/25T8B25T/sams/GCCTAGCC.sam | 12 +
.../picard/illumina/25T8B25T/sams/GTAACATC.sam | 6 +
.../picard/illumina/25T8B25T/sams/GTCCACAG.sam | 6 +
testdata/picard/illumina/25T8B25T/sams/N.sam | 34 +
.../picard/illumina/25T8B25T/sams/TAAGCACA.sam | 6 +
.../picard/illumina/25T8B25T/sams/TACCGTCT.sam | 2 +
.../picard/illumina/25T8B25T/sams/TAGCGGTA.sam | 2 +
.../picard/illumina/25T8B25T/sams/TATCAGCC.sam | 2 +
.../picard/illumina/25T8B25T/sams/TATCCAGG.sam | 10 +
.../picard/illumina/25T8B25T/sams/TATCCATG.sam | 2 +
.../picard/illumina/25T8B25T/sams/TATCTCGG.sam | 2 +
.../picard/illumina/25T8B25T/sams/TATCTGCC.sam | 16 +
.../picard/illumina/25T8B25T/sams/TCCGTCTA.sam | 2 +
.../picard/illumina/25T8B25T/sams/TCGCTAGA.sam | 12 +
.../picard/illumina/25T8B25T/sams/TCTGCAAG.sam | 4 +
.../picard/illumina/25T8B25T/sams/TGCAAGTA.sam | 6 +
.../picard/illumina/25T8B25T/sams/TGCTGCTG.sam | 10 +
.../picard/illumina/25T8B25T/sams/TGTAACTC.sam | 4 +
.../picard/illumina/25T8B25T/sams/TGTAATCA.sam | 8 +
.../picard/illumina/25T8B25T/sams/TTGTCTAT.sam | 10 +
.../picard/illumina/25T8B25T/sams/barcode.params | 0
.../sams/multiplexed_positive_rgtags.params | 0
.../picard/illumina/25T8B25T/sams/nonBarcoded.sam | 182 +
.../Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/s_1_1101.filter | Bin
.../Intensities/BaseCalls/s_1_1101_barcode.txt | 0
.../25T8B8B25T/Data/Intensities/L001/s_1_1101.locs | Bin
.../25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq | 4 +
.../25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq | 4 +
.../fastq/AACTTGACGCTCTCTT.barcode_1.fastq | 4 +
.../fastq/AACTTGACGCTCTCTT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq | 4 +
.../25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq | 4 +
.../fastq/AAGACACTAGTCACCT.barcode_1.fastq | 4 +
.../fastq/AAGACACTAGTCACCT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/AAGACACTAGTCTCCT.1.fastq | 0
.../25T8B8B25T/fastq/AAGACACTAGTCTCCT.2.fastq | 0
.../fastq/AAGACACTAGTCTCCT.barcode_1.fastq | 0
.../fastq/AAGACACTAGTCTCCT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq | 4 +
.../25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq | 4 +
.../fastq/ACAGGTATCACTTCAT.barcode_1.fastq | 4 +
.../fastq/ACAGGTATCACTTCAT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq | 8 +
.../25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq | 8 +
.../fastq/ACAGTTGAATCTTCTC.barcode_1.fastq | 8 +
.../fastq/ACAGTTGAATCTTCTC.barcode_2.fastq | 8 +
.../25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq | 4 +
.../25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq | 4 +
.../fastq/ACCAACTGCATCACTT.barcode_1.fastq | 4 +
.../fastq/ACCAACTGCATCACTT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/ACCTACTGCTTCCCTT.1.fastq | 0
.../25T8B8B25T/fastq/ACCTACTGCTTCCCTT.2.fastq | 0
.../fastq/ACCTACTGCTTCCCTT.barcode_1.fastq | 0
.../fastq/ACCTACTGCTTCCCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq | 4 +
.../25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq | 4 +
.../fastq/ACTAAGACGTCCTCAT.barcode_1.fastq | 4 +
.../fastq/ACTAAGACGTCCTCAT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/AGGTCGCATTCCTTTC.1.fastq | 0
.../25T8B8B25T/fastq/AGGTCGCATTCCTTTC.2.fastq | 0
.../fastq/AGGTCGCATTCCTTTC.barcode_1.fastq | 0
.../fastq/AGGTCGCATTCCTTTC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq | 4 +
.../25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq | 4 +
.../fastq/AGGTGCGAGACATTAA.barcode_1.fastq | 4 +
.../fastq/AGGTGCGAGACATTAA.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq | 4 +
.../25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq | 4 +
.../fastq/AGGTTATCTTAGCCAG.barcode_1.fastq | 4 +
.../fastq/AGGTTATCTTAGCCAG.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq | 4 +
.../25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq | 4 +
.../fastq/AGTTGCTTTGACTTGG.barcode_1.fastq | 4 +
.../fastq/AGTTGCTTTGACTTGG.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq | 4 +
.../25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq | 4 +
.../fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq | 4 +
.../fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/ATTATCAACACCATAC.1.fastq | 0
.../25T8B8B25T/fastq/ATTATCAACACCATAC.2.fastq | 0
.../fastq/ATTATCAACACCATAC.barcode_1.fastq | 0
.../fastq/ATTATCAACACCATAC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/ATTGTCTGGATTCACA.1.fastq | 0
.../25T8B8B25T/fastq/ATTGTCTGGATTCACA.2.fastq | 0
.../fastq/ATTGTCTGGATTCACA.barcode_1.fastq | 0
.../fastq/ATTGTCTGGATTCACA.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq | 4 +
.../25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq | 4 +
.../fastq/CAATAGTCCGACTCTC.barcode_1.fastq | 4 +
.../fastq/CAATAGTCCGACTCTC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq | 4 +
.../25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq | 4 +
.../fastq/CAGCAAGGGCGATATT.barcode_1.fastq | 4 +
.../fastq/CAGCAAGGGCGATATT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq | 4 +
.../25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq | 4 +
.../fastq/CAGCGGTAAGTACTGC.barcode_1.fastq | 4 +
.../fastq/CAGCGGTAAGTACTGC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/CAGCGGTATGTACTGC.1.fastq | 0
.../25T8B8B25T/fastq/CAGCGGTATGTACTGC.2.fastq | 0
.../fastq/CAGCGGTATGTACTGC.barcode_1.fastq | 0
.../fastq/CAGCGGTATGTACTGC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq | 8 +
.../25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq | 8 +
.../fastq/CATGCTTATAGCATTG.barcode_1.fastq | 8 +
.../fastq/CATGCTTATAGCATTG.barcode_2.fastq | 8 +
.../25T8B8B25T/fastq/CATGCTTATAGCATTT.1.fastq | 0
.../25T8B8B25T/fastq/CATGCTTATAGCATTT.2.fastq | 0
.../fastq/CATGCTTATAGCATTT.barcode_1.fastq | 0
.../fastq/CATGCTTATAGCATTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CATGCTTTTAGCATTG.1.fastq | 0
.../25T8B8B25T/fastq/CATGCTTTTAGCATTG.2.fastq | 0
.../fastq/CATGCTTTTAGCATTG.barcode_1.fastq | 0
.../fastq/CATGCTTTTAGCATTG.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CATGTTCGCGCCTTTT.1.fastq | 0
.../25T8B8B25T/fastq/CATGTTCGCGCCTTTT.2.fastq | 0
.../fastq/CATGTTCGCGCCTTTT.barcode_1.fastq | 0
.../fastq/CATGTTCGCGCCTTTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq | 8 +
.../25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq | 8 +
.../fastq/CCAGAGCTCAACTGAT.barcode_1.fastq | 8 +
.../fastq/CCAGAGCTCAACTGAT.barcode_2.fastq | 8 +
.../25T8B8B25T/fastq/CCCGATTTTCTCTCCC.1.fastq | 0
.../25T8B8B25T/fastq/CCCGATTTTCTCTCCC.2.fastq | 0
.../fastq/CCCGATTTTCTCTCCC.barcode_1.fastq | 0
.../fastq/CCCGATTTTCTCTCCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq | 4 +
.../25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq | 4 +
.../fastq/CCTATGCCAATTGGCC.barcode_1.fastq | 4 +
.../fastq/CCTATGCCAATTGGCC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/CCTATTCTTCGTTTTC.1.fastq | 0
.../25T8B8B25T/fastq/CCTATTCTTCGTTTTC.2.fastq | 0
.../fastq/CCTATTCTTCGTTTTC.barcode_1.fastq | 0
.../fastq/CCTATTCTTCGTTTTC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.1.fastq | 0
.../25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.2.fastq | 0
.../fastq/CCTCTTCTCTCGCTTT.barcode_1.fastq | 0
.../fastq/CCTCTTCTCTCGCTTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.1.fastq | 0
.../25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.2.fastq | 0
.../fastq/CCTCTTTCTTCTGCTC.barcode_1.fastq | 0
.../fastq/CCTCTTTCTTCTGCTC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq | 4 +
.../25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq | 4 +
.../fastq/CCTTCGCAGAATCGAC.barcode_1.fastq | 4 +
.../fastq/CCTTCGCAGAATCGAC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/CCTTCTTTTATCATTT.1.fastq | 0
.../25T8B8B25T/fastq/CCTTCTTTTATCATTT.2.fastq | 0
.../fastq/CCTTCTTTTATCATTT.barcode_1.fastq | 0
.../fastq/CCTTCTTTTATCATTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq | 4 +
.../25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq | 4 +
.../fastq/CGCTATGTTTCACCTT.barcode_1.fastq | 4 +
.../fastq/CGCTATGTTTCACCTT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/CGCTATGTTTCTCCTT.1.fastq | 0
.../25T8B8B25T/fastq/CGCTATGTTTCTCCTT.2.fastq | 0
.../fastq/CGCTATGTTTCTCCTT.barcode_1.fastq | 0
.../fastq/CGCTATGTTTCTCCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq | 4 +
.../25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq | 4 +
.../fastq/CTACCAGGTTCTTGGC.barcode_1.fastq | 4 +
.../fastq/CTACCAGGTTCTTGGC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.1.fastq | 0
.../25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.2.fastq | 0
.../fastq/CTCCCTCTTCCTTCTT.barcode_1.fastq | 0
.../fastq/CTCCCTCTTCCTTCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq | 4 +
.../25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq | 4 +
.../fastq/CTGTAATCCTATTAGC.barcode_1.fastq | 4 +
.../fastq/CTGTAATCCTATTAGC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq | 4 +
.../25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq | 4 +
.../fastq/GACCAGGACCATCACA.barcode_1.fastq | 4 +
.../fastq/GACCAGGACCATCACA.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq | 8 +
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq | 8 +
.../fastq/GCCGTCGAAGGTACCA.barcode_1.fastq | 8 +
.../fastq/GCCGTCGAAGGTACCA.barcode_2.fastq | 8 +
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCC.1.fastq | 0
.../25T8B8B25T/fastq/GCCGTCGAAGGTACCC.2.fastq | 0
.../fastq/GCCGTCGAAGGTACCC.barcode_1.fastq | 0
.../fastq/GCCGTCGAAGGTACCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GCCGTCGATGGTACCC.1.fastq | 0
.../25T8B8B25T/fastq/GCCGTCGATGGTACCC.2.fastq | 0
.../fastq/GCCGTCGATGGTACCC.barcode_1.fastq | 0
.../fastq/GCCGTCGATGGTACCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq | 4 +
.../25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq | 4 +
.../fastq/GCCTAGCCCTTGAATC.barcode_1.fastq | 4 +
.../fastq/GCCTAGCCCTTGAATC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/GCTATCCACCTCCCCC.1.fastq | 0
.../25T8B8B25T/fastq/GCTATCCACCTCCCCC.2.fastq | 0
.../fastq/GCTATCCACCTCCCCC.barcode_1.fastq | 0
.../fastq/GCTATCCACCTCCCCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq | 4 +
.../25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq | 4 +
.../fastq/GTATAACAAATTCAAC.barcode_1.fastq | 4 +
.../fastq/GTATAACAAATTCAAC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/GTATAACATATTCAAC.1.fastq | 0
.../25T8B8B25T/fastq/GTATAACATATTCAAC.2.fastq | 0
.../fastq/GTATAACATATTCAAC.barcode_1.fastq | 0
.../fastq/GTATAACATATTCAAC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq | 4 +
.../25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq | 4 +
.../fastq/GTCTGATGGAACTTCG.barcode_1.fastq | 4 +
.../fastq/GTCTGATGGAACTTCG.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/GTCTGATGTCACTTCC.1.fastq | 0
.../25T8B8B25T/fastq/GTCTGATGTCACTTCC.2.fastq | 0
.../fastq/GTCTGATGTCACTTCC.barcode_1.fastq | 0
.../fastq/GTCTGATGTCACTTCC.barcode_2.fastq | 0
.../picard/illumina/25T8B8B25T/fastq/NN.1.fastq | 76 +
.../picard/illumina/25T8B8B25T/fastq/NN.2.fastq | 76 +
.../illumina/25T8B8B25T/fastq/NN.barcode_1.fastq | 76 +
.../illumina/25T8B8B25T/fastq/NN.barcode_2.fastq | 76 +
.../25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq | 8 +
.../25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq | 8 +
.../fastq/TACTTAGCGTCTGCAC.barcode_1.fastq | 8 +
.../fastq/TACTTAGCGTCTGCAC.barcode_2.fastq | 8 +
.../25T8B8B25T/fastq/TCCCCGTTCCAACTTC.1.fastq | 0
.../25T8B8B25T/fastq/TCCCCGTTCCAACTTC.2.fastq | 0
.../fastq/TCCCCGTTCCAACTTC.barcode_1.fastq | 0
.../fastq/TCCCCGTTCCAACTTC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq | 4 +
.../25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq | 4 +
.../fastq/TCCTTGGTGCTGCACT.barcode_1.fastq | 4 +
.../fastq/TCCTTGGTGCTGCACT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq | 4 +
.../25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq | 4 +
.../fastq/TCGCCTTGCCAACGCT.barcode_1.fastq | 4 +
.../fastq/TCGCCTTGCCAACGCT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq | 8 +
.../25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq | 8 +
.../fastq/TGCAAGTACGAACTTC.barcode_1.fastq | 8 +
.../fastq/TGCAAGTACGAACTTC.barcode_2.fastq | 8 +
.../25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq | 4 +
.../25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq | 4 +
.../fastq/TGCTCGACTTCACAGA.barcode_1.fastq | 4 +
.../fastq/TGCTCGACTTCACAGA.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/TGCTCGACTTCACAGT.1.fastq | 0
.../25T8B8B25T/fastq/TGCTCGACTTCACAGT.2.fastq | 0
.../fastq/TGCTCGACTTCACAGT.barcode_1.fastq | 0
.../fastq/TGCTCGACTTCACAGT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq | 4 +
.../25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq | 4 +
.../fastq/TGTAATCACCTCTAAC.barcode_1.fastq | 4 +
.../fastq/TGTAATCACCTCTAAC.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/TGTATCTCTTACTCTT.1.fastq | 0
.../25T8B8B25T/fastq/TGTATCTCTTACTCTT.2.fastq | 0
.../fastq/TGTATCTCTTACTCTT.barcode_1.fastq | 0
.../fastq/TGTATCTCTTACTCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.1.fastq | 0
.../25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.2.fastq | 0
.../fastq/TGTCGGTTTTTTGCTT.barcode_1.fastq | 0
.../fastq/TGTCGGTTTTTTGCTT.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq | 4 +
.../25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq | 4 +
.../fastq/TGTTCCGAAACCTCTT.barcode_1.fastq | 4 +
.../fastq/TGTTCCGAAACCTCTT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq | 4 +
.../25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq | 4 +
.../fastq/TTAATCAGCTGGTATT.barcode_1.fastq | 4 +
.../fastq/TTAATCAGCTGGTATT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq | 4 +
.../25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq | 4 +
.../fastq/TTATATCTTCATGTCT.barcode_1.fastq | 4 +
.../fastq/TTATATCTTCATGTCT.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.1.fastq | 0
.../25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.2.fastq | 0
.../fastq/TTCCCCAGTGCTTTTA.barcode_1.fastq | 0
.../fastq/TTCCCCAGTGCTTTTA.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TTCCTCCTCACCATCC.1.fastq | 0
.../25T8B8B25T/fastq/TTCCTCCTCACCATCC.2.fastq | 0
.../fastq/TTCCTCCTCACCATCC.barcode_1.fastq | 0
.../fastq/TTCCTCCTCACCATCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TTCTCATCTTCCTTCC.1.fastq | 0
.../25T8B8B25T/fastq/TTCTCATCTTCCTTCC.2.fastq | 0
.../fastq/TTCTCATCTTCCTTCC.barcode_1.fastq | 0
.../fastq/TTCTCATCTTCCTTCC.barcode_2.fastq | 0
.../25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq | 4 +
.../25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq | 4 +
.../fastq/TTGAATAGATATCCGA.barcode_1.fastq | 4 +
.../fastq/TTGAATAGATATCCGA.barcode_2.fastq | 4 +
.../25T8B8B25T/fastq/barcode_double.params | 0
.../picard/illumina/25T8B8B25T/library.params | 0
.../picard/illumina/25T8B8B25T/sams/AACTTGAC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/AAGACACT.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam | 6 +
.../picard/illumina/25T8B8B25T/sams/ACCAACTG.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/ACCTACTG.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/AGGTTATC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/ATTATCAA.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CAATAGTC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/CATGCTTA.sam | 6 +
.../picard/illumina/25T8B8B25T/sams/CATGCTTT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CATGTTCG.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam | 6 +
.../picard/illumina/25T8B8B25T/sams/CCCGATTT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CCTATGCC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/CCTATTCT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CGCTATGT.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/CTACCAGG.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/CTGTAATC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/GACCAGGA.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam | 6 +
.../picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/GCTATCCA.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/GTATAACA.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/GTCTGATG.sam | 4 +
testdata/picard/illumina/25T8B8B25T/sams/N.sam | 40 +
.../picard/illumina/25T8B8B25T/sams/TACTTAGC.sam | 6 +
.../picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam | 6 +
.../picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/TGTAATCA.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/TGTATCTC.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/TTAATCAG.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/TTATATCT.sam | 4 +
.../picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/TTCTCATC.sam | 2 +
.../picard/illumina/25T8B8B25T/sams/TTGAATAG.sam | 4 +
.../illumina/25T8B8B25T/sams/barcode_double.params | 0
.../Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/s_1_1101.filter | Bin
.../125T125T/Data/Intensities/L001/s_1_1101.clocs | Bin
.../Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl | Bin
.../Intensities/BaseCalls/L001/s_1_1101.filter | Bin
.../Data/Intensities/BaseCalls/barcodeData.1 | 6 +
.../Intensities/BaseCalls/s_1_1101_barcode.txt.gz | Bin
.../25T8B25T/Data/Intensities/L001/s_1_1101.clocs | Bin
.../CollectIlluminaLaneMetrics}/.gitignore | 0
.../illumina/Homo_sapiens_assembly18.seqdict.sam | 0
..._SL-HBB_0226_BFCC1WYMACXX.expected.lane_metrics | 13 +
..._SL-HBB_0226_BFCC1WYMACXX.illumina_lane_metrics | 13 +
.../InterOp/TileMetricsOut.bin | Bin 0 -> 115202 bytes
...AK_0035_FC000000000-A306B.illumina_lane_metrics | 6 +
.../InterOp/TileMetricsOut.bin | Bin 0 -> 2942 bytes
...01_SL-HAC_0022_BH07PBADXX.illumina_lane_metrics | 7 +
.../InterOp/TileMetricsOut.bin | Bin 0 -> 19202 bytes
.../tileRuns/A67HY/A67HY.illumina_lane_metrics | 6 +
.../tileRuns/A67HY/A67HY.illumina_phasing_metrics | 3 +
.../tileRuns/A67HY/InterOp/TileMetricsOut.bin | Bin 0 -> 3922 bytes
.../tileRuns/A67HY/README | 1 +
.../tileRuns/A7LE0/A7LE0.illumina_lane_metrics | 6 +
.../tileRuns/A7LE0/A7LE0.illumina_phasing_metrics | 7 +
.../tileRuns/A7LE0/InterOp/TileMetricsOut.bin | Bin 0 -> 7282 bytes
.../tileRuns/A7LE0/README | 1 +
.../C2MFAACXX/C2MFAACXX.illumina_lane_metrics | 13 +
.../C2MFAACXX/C2MFAACXX.illumina_phasing_metrics | 21 +
.../tileRuns/C2MFAACXX/InterOp/TileMetricsOut.bin | Bin 0 -> 92162 bytes
.../tileRuns/C2MFAACXX/README | 1 +
.../H7BATADXX/H7BATADXX.illumina_lane_metrics | 7 +
.../H7BATADXX/H7BATADXX.illumina_phasing_metrics | 9 +
.../tileRuns/H7BATADXX/InterOp/TileMetricsOut.bin | Bin 0 -> 19202 bytes
.../tileRuns/H7BATADXX/README | 1 +
.../H7H7RADXX/H7H7RADXX.illumina_lane_metrics | 7 +
.../H7H7RADXX/H7H7RADXX.illumina_phasing_metrics | 9 +
.../tileRuns/H7H7RADXX/InterOp/TileMetricsOut.bin | Bin 0 -> 23042 bytes
.../tileRuns/H7H7RADXX/README | 2 +
.../parserTests/filterParser/L001/s_1_0001.filter | Bin
.../parserTests/filterParser/L001/s_1_0002.filter | Bin
.../parserTests/filterParser/L001/s_1_0003.filter | Bin
.../parserTests/filterParser/L001/s_1_0004.filter | Bin
.../illumina/parserTests/posParser/s_1_1_pos.txt | 0
.../illumina/parserTests/posParser/s_1_2_pos.txt | 0
.../illumina/parserTests/posParser/s_1_3_pos.txt | 0
.../parserTests/posParser/s_9_3201_pos.txt | 0
.../parserTests/posParser/s_9_3202_pos.txt | 0
.../picard/illumina/readerTests/bcl_failing.bcl | Bin
.../picard/illumina/readerTests/bcl_failing2.bcl | Bin
.../picard/illumina/readerTests/bcl_passing.bcl | Bin
.../picard/illumina/readerTests/bcl_tooLong.bcl | Bin
.../picard/illumina/readerTests/bcl_tooShort.bcl | Bin
.../picard/illumina/readerTests/binary_passing.bin | 0
.../illumina/readerTests/pf_badOpeningBytes.filter | Bin
.../illumina/readerTests/pf_badVersionBytes.filter | Bin
.../picard/illumina/readerTests/pf_failing1.filter | Bin
.../picard/illumina/readerTests/pf_failing2.filter | Bin
.../picard/illumina/readerTests/pf_passing.filter | Bin
.../picard/illumina/readerTests/pf_tooLarge.filter | Bin
.../picard/illumina/readerTests/pf_tooShort.filter | Bin
.../illumina/readerTests/pos_failing1_pos.txt | 0
.../picard/illumina/readerTests/s_1_10.locs | Bin
.../picard/illumina/readerTests/s_1_1101_pos.txt | 0
.../picard/illumina/readerTests/s_1_1102_pos.txt | 0
.../picard/illumina/readerTests/s_1_1103_pos.txt | 0
.../picard/illumina/readerTests/s_1_1104_pos.txt | 0
.../picard/illumina/readerTests/s_1_2106.clocs | Bin
.../sf => }/picard/illumina/readerTests/s_1_6.locs | Bin
.../sf => }/picard/illumina/readerTests/s_1_7.locs | Bin
.../sf => }/picard/illumina/readerTests/s_1_8.locs | Bin
.../sf => }/picard/illumina/readerTests/s_1_9.locs | Bin
.../picard/illumina/readerTests/s_2_1101.clocs | Bin
.../picard/illumina/readerTests/s_2_1101_pos.txt | 0
.../picard/illumina/readerTests/s_3_2102.clocs | Bin
.../picard/illumina/readerTests/s_3_2103.clocs | Bin
.../picard/illumina/readerTests/s_3_2104.clocs | Bin
.../picard/illumina/readerTests/s_3_2105.clocs | Bin
testdata/picard/metrics/chrM.reference.fasta | 333 +
testdata/picard/metrics/chrMReads.sam | 8 +
testdata/picard/quality/chrM.part.intervallist | 5 +
testdata/picard/quality/chrM.reference.fasta | 333 +
testdata/picard/quality/chrMReads.sam | 8 +
.../picard/quality/chrMReadsDiffereingLengths.sam | 5 +
testdata/picard/quality/chrMReadsMateUnmapped.sam | 7 +
testdata/picard/quality/chrMReadsMated.sam | 5 +
testdata/picard/quality/chrMReadsMatedRev.sam | 5 +
testdata/picard/quality/chrMReadsMatedRevOrder.sam | 5 +
.../picard/quality/chrMReadsMatedSameStrand.sam | 5 +
.../picard/quality/chrMReadsSecondaryAlignSoft.sam | 6 +
.../quality/chrMReadsSupplementalAlignSoft.sam | 6 +
testdata/picard/quality/chrMReadsUnMated.sam | 5 +
.../picard/sam/CleanSam/fits_with_deletion.sam | 0
.../sam/CleanSam/long_trailing_insertion.sam | 0
.../picard/sam/CleanSam/overhang_with_deletion.sam | 0
.../sf => }/picard/sam/CleanSam/simple_fits.sam | 0
.../picard/sam/CleanSam/simple_overhang.sam | 0
.../picard/sam/CleanSam/trailing_insertion.sam | 0
.../picard/sam/CollectGcBiasMetrics/Mheader.dict | 2 +
.../picard/sam/CompareSAMs/bigger_seq_dict.sam | 0
.../{net/sf => }/picard/sam/CompareSAMs/chr21.sam | 0
.../sf => }/picard/sam/CompareSAMs/diff_coords.sam | 0
.../sf => }/picard/sam/CompareSAMs/example2.sam | 0
.../picard/sam/CompareSAMs/genomic_sorted.sam | 0
.../picard/sam/CompareSAMs/genomic_sorted_5.sam | 0
.../sam/CompareSAMs/genomic_sorted_5_plus.sam | 0
.../picard/sam/CompareSAMs/group_same_coord.sam | 0
.../CompareSAMs/group_same_coord_diff_order.sam | 0
.../picard/sam/CompareSAMs/has_non_primary.sam | 0
.../picard/sam/CompareSAMs/unmapped_first.sam | 0
.../picard/sam/CompareSAMs/unmapped_second.sam | 0
.../sf => }/picard/sam/CompareSAMs/unsorted.sam | 0
.../picard/sam/GatherBamFiles/indUnknownChrom.bam | Bin 0 -> 1186 bytes
testdata/picard/sam/GatherBamFiles/indchr1.bam | Bin 0 -> 394 bytes
testdata/picard/sam/GatherBamFiles/indchr2.bam | Bin 0 -> 400 bytes
testdata/picard/sam/GatherBamFiles/indchr3.bam | Bin 0 -> 400 bytes
testdata/picard/sam/GatherBamFiles/indchr4.bam | Bin 0 -> 406 bytes
testdata/picard/sam/GatherBamFiles/indchr5.bam | Bin 0 -> 404 bytes
testdata/picard/sam/GatherBamFiles/indchr6.bam | Bin 0 -> 399 bytes
testdata/picard/sam/GatherBamFiles/indchr7.bam | Bin 0 -> 657 bytes
testdata/picard/sam/GatherBamFiles/indchr8.bam | Bin 0 -> 531 bytes
testdata/picard/sam/GatherBamFiles/orig.bam | Bin 0 -> 2390 bytes
.../markDuplicatesWithMateCigar.pairSet.swap.sam | 42 +
.../sf => }/picard/sam/MarkDuplicates/merge1.sam | 0
.../sf => }/picard/sam/MarkDuplicates/merge2.sam | 0
.../sf => }/picard/sam/MarkDuplicates/merge3.sam | 0
testdata/picard/sam/MarkDuplicates/npe.perhaps.sam | 92 +
.../picard/sam/MarkDuplicates/optical_dupes.sam | 16 +
.../sam/MarkDuplicates/optical_dupes_casava.sam | 16 +
.../sam/MergeBamAlignment/aligned.badorder.sam | 0
.../sam/MergeBamAlignment/aligned.supplement.sam | 0
.../MergeBamAlignment/allread1.trimmed.aligned.sam | 0
.../MergeBamAlignment/allread2.trimmed.aligned.sam | 0
.../sam/MergeBamAlignment/cliptest.aligned.sam | 0
.../picard/sam/MergeBamAlignment/cliptest.dict | 2 +
.../picard/sam/MergeBamAlignment/cliptest.fasta | 0
.../sam/MergeBamAlignment/cliptest.unmapped.sam | 0
.../firsthalf.read1.trimmed.aligned.sam | 0
.../firsthalf.read2.trimmed.aligned.sam | 0
.../sam/MergeBamAlignment/multihit.aligned.sam | 0
.../multihit.filter.fragment.unmapped.sam | 0
.../MergeBamAlignment/multihit.filter.unmapped.sam | 0
.../sam/MergeBamAlignment/multihit.unmapped.sam | 0
.../secondhalf.read1.trimmed.aligned.sam | 0
.../secondhalf.read2.trimmed.aligned.sam | 0
.../sam/MergeBamAlignment/unmapped.badorder.sam | 0
.../picard/sam/MergeBamAlignment/unmapped.sam | 0
.../sam/MergeSamFiles/case1/chr11sub_file1.sam | 0
.../sam/MergeSamFiles/case1/chr11sub_file2.sam | 0
.../sam/MergeSamFiles/case1/expected_output.sam | 13 +
.../sam/MergeSamFiles/case2/chr11sub_file1.sam | 0
.../sam/MergeSamFiles/case2/chr11sub_file2.sam | 0
.../sam/MergeSamFiles/case2/chr11sub_file3.sam | 0
.../sam/MergeSamFiles/case2/chr11sub_file4.sam | 0
.../sam/MergeSamFiles/case2/expected_output.sam | 21 +
.../picard/sam/MergeSamFiles/unsorted_input/1.sam | 0
.../picard/sam/MergeSamFiles/unsorted_input/2.sam | 0
.../picard/sam/PositionalDownsampleSam/header.dict | 9 +
.../picard/sam/SamFileConverterTest/unmapped.bam | Bin 0 -> 841 bytes
.../picard/sam/SamFileConverterTest/unmapped.cram | Bin 0 -> 2189 bytes
.../picard/sam/SamFileConverterTest/unmapped.sam | 14 +
testdata/{net/sf => }/picard/sam/aligned.sam | 0
.../picard/sam/aligned_queryname_sorted.bam | Bin
.../picard/sam/aligned_queryname_sorted.sam | 0
.../picard/sam/bam2fastq/nonpaired}/.gitignore | 0
.../picard/sam/bam2fastq/paired/bad/README.txt | 0
.../bam2fastq/paired/bad/grouped-unpaired-mate.sam | 0
.../sam/bam2fastq/paired/bad/unpaired-mate.sam | 0
.../picard/sam/bam2fastq/paired/ok/README.txt | 0
.../sam/bam2fastq/paired/ok/clipping_test.sam | 0
.../paired/ok/first-mate-bof-last-mate-eof.sam | 0
.../paired/ok/grouped-last-pair-mates-flipped.sam | 0
.../paired/ok/last-pair-mates-flipped.sam | 0
.../sam/bam2fastq/paired/ok/sorted-pair-no-rg.sam | 0
.../picard/sam/bam2fastq/paired/ok/sorted-pair.sam | 0
testdata/{net/sf => }/picard/sam/basic.fasta | 0
.../picard/sam/duplicate_sequence_names.fasta | 0
.../{net/sf => }/picard/sam/fastq2bam/README.txt | 0
.../picard/sam/fastq2bam/bad-format/0lines.txt | 0
.../picard/sam/fastq2bam/bad-format/1lines.txt | 0
.../picard/sam/fastq2bam/bad-format/2lines.txt | 0
.../picard/sam/fastq2bam/bad-format/3lines.txt | 0
.../sam/fastq2bam/bad-format/bad-qual-header.txt | 0
.../sam/fastq2bam/bad-format/bad-seq-header.txt | 0
.../picard/sam/fastq2bam/bad-format/extra-line.txt | 0
.../sam/fastq2bam/bad-format/too-many-quals.txt | 0
.../sf => }/picard/sam/fastq2bam/bad-format/tt | 0
.../sf => }/picard/sam/fastq2bam/bad-paired/dott | 0
.../picard/sam/fastq2bam/bad-paired/pair-a1.txt | 0
.../picard/sam/fastq2bam/bad-paired/pair-a2.txt | 0
.../picard/sam/fastq2bam/bad-paired/pair-b1.txt | 0
.../picard/sam/fastq2bam/bad-paired/pair-b2.txt | 0
.../sam/fastq2bam/bad-paired/pair1-badnum.txt | 0
.../sam/fastq2bam/bad-paired/pair1-nonum.txt | 0
.../fastq2bam/bad-paired/pair1-one-more-record.txt | 0
.../sam/fastq2bam/bad-paired/pair1-onetoken.txt | 0
.../sam/fastq2bam/bad-paired/pair2-badnum.txt | 0
.../sam/fastq2bam/bad-paired/pair2-diff-name.txt | 0
.../fastq2bam/bad-paired/pair2-one-more-record.txt | 0
.../picard/sam/fastq2bam/fastq-illumina/README.txt | 0
.../illumina-sanger_full_range_as_sanger-62.fastq | 0
.../fastq2bam/fastq-illumina/s_1_1_sequence.txt | 0
.../fastq2bam/fastq-illumina/s_1_2_sequence.txt | 0
.../sam/fastq2bam/fastq-illumina/s_1_sequence.txt | 0
.../fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq | 0
.../fastq-sanger/5k-v1-Rhodobacter_LW1.sam.fastq | 0
.../picard/sam/fastq2bam/fastq-sanger/README.txt | 0
.../sanger_full_range_as_sanger-63.fastq | 0
.../picard/sam/fastq2bam/fastq-solexa/README.txt | 0
.../picard/sam/fastq2bam/fastq-solexa/bad1.fastq | 0
.../sam/fastq2bam/fastq-solexa/s_1_sequence.txt | 0
.../fastq-solexa/solexa_full_range_as_sanger.fastq | 0
.../fastq-solexa/solexa_full_range_as_solexa.fastq | 0
.../illumina-sanger_full_range_as_sanger-62.fastq | 0
.../picard/sam/fastq2bam/ok-paired/pair1.txt | 0
.../picard/sam/fastq2bam/ok-paired/pair2.txt | 0
.../sam/fastq2bam/ok-paired/s_1_1_sequence.txt | 0
.../sam/fastq2bam/ok-paired/s_1_2_sequence.txt | 0
.../sam/fastq2bam/ok-paired/s_1_sequence.txt | 0
.../sam/fastq2bam/permissive-format/pair1.txt | 0
.../sam/fastq2bam/permissive-format/pair2.txt | 0
.../fastq2bam/permissive-format/s_1_1_sequence.txt | 0
.../fastq2bam/permissive-format/s_1_2_sequence.txt | 0
.../fastq2bam/permissive-format/s_1_sequence.txt | 0
.../sequential-files/paired_end_R1_001.fastq} | 0
.../sequential-files/paired_end_R1_002.fastq} | 0
.../sequential-files/paired_end_R2_001.fastq} | 0
.../sequential-files/paired_end_R2_002.fastq} | 0
.../sequential-files/single_end_R1_001.fastq} | 0
.../sequential-files/single_end_R1_002.fastq} | 0
.../picard/sam/insert_size_metrics_test.sam | 0
.../sam}/invalid_coord_sort_order.sam | 0
testdata/{net/sf => }/picard/sam/merger.dict | 0
testdata/{net/sf => }/picard/sam/merger.fasta | 0
.../{net/sf => }/picard/sam/onehalfaligned.sam | 0
.../{net/sf => }/picard/sam/otherhalfaligned.sam | 0
.../{net/sf => }/picard/sam/revert_sam_basic.sam | 0
.../sf => }/picard/sam/revert_sam_negative.sam | 0
testdata/picard/sam/split_test.sam | 15 +
testdata/picard/sam/split_test2.sam | 9 +
.../sam/summary_alignment_bisulfite_test.sam | 0
.../picard/sam/summary_alignment_stats_test.fasta | 0
.../picard/sam/summary_alignment_stats_test.sam | 0
.../picard/sam/summary_alignment_stats_test2.sam | 0
.../sam/summary_alignment_stats_test_multiple.sam | 0
testdata/{net/sf => }/picard/sam/unmapped.sam | 0
.../sam/viewsam_intervals_test.interval_list | 7 +
testdata/picard/sam/viewsam_intervals_test.sam | 9 +
.../util/BedToIntervalListTest/end_after_chr.bed | 1 +
.../util/BedToIntervalListTest/end_before_chr.bed | 1 +
.../picard/util/BedToIntervalListTest/extended.bed | 2 +
.../extended.bed.interval_list | 11 +
.../picard/util/BedToIntervalListTest/header.sam | 9 +
.../util/BedToIntervalListTest/missing_chr.bed | 2 +
.../BedToIntervalListTest/off_by_one_interval.bed | 1 +
.../BedToIntervalListTest/one_base_interval.bed | 1 +
.../one_base_interval.bed.interval_list | 10 +
.../util/BedToIntervalListTest/overlapping.bed | 2 +
.../overlapping.bed.interval_list | 10 +
.../util/BedToIntervalListTest/seq_dict_test.bed | 3 +
.../seq_dict_test.bed.interval_list | 12 +
.../seq_dict_test.dictionary.bad | 1 +
.../seq_dict_test.dictionary.bad.vcf | 7 +
.../seq_dict_test.dictionary.dict | 9 +
.../seq_dict_test.dictionary.fasta | 16 +
.../seq_dict_test.dictionary.interval_list | 12 +
.../seq_dict_test.dictionary.sam | 9 +
.../seq_dict_test.dictionary.vcf | 14 +
.../picard/util/BedToIntervalListTest/simple.bed | 2 +
.../BedToIntervalListTest/simple.bed.interval_list | 11 +
.../util/BedToIntervalListTest/start_after_chr.bed | 1 +
.../BedToIntervalListTest/start_before_chr.bed | 1 +
.../BedToIntervalListTest/zero_base_interval.bed | 1 +
.../zero_base_interval.bed.interval_list | 10 +
.../sf => }/picard/util/all_ones_text_file.txt | 0
.../{net/sf => }/picard/util/no_grouping_file.txt | 0
testdata/picard/util/scatterable.interval_list | 89 +
.../{net/sf => }/picard/util/tabbed_text_file.txt | 0
.../util/whitespace_text_file.txt} | 0
.../picard/vcf/CEUTrio-indels-bad-samples.vcf | 0
.../picard/vcf/CEUTrio-indels-bad-samples.vcf.idx | Bin
.../vcf/CEUTrio-indels-dissimilar-contigs.vcf | 0
.../vcf/CEUTrio-indels-dissimilar-contigs.vcf.idx | Bin
.../picard/vcf/CEUTrio-indels-no-contigs.vcf | 0
testdata/picard/vcf/CEUTrio-indels-scrambled.1.vcf | 171 +
.../{net/sf => }/picard/vcf/CEUTrio-indels.vcf | 0
.../{net/sf => }/picard/vcf/CEUTrio-indels.vcf.idx | Bin
...ceDiff.genotype_concordance_contingency_metrics | 11 +
...ordanceDiff.genotype_concordance_detail_metrics | 12 +
...rdanceDiff.genotype_concordance_summary_metrics | 11 +
.../picard/vcf/CEUTrio-merged-indels-snps.vcf | 0
.../picard/vcf/CEUTrio-merged-indels-snps.vcf.idx | Bin
.../picard/vcf/CEUTrio-random-scatter-0.vcf | 0
.../picard/vcf/CEUTrio-random-scatter-0.vcf.idx | Bin
.../picard/vcf/CEUTrio-random-scatter-1.vcf | 0
.../picard/vcf/CEUTrio-random-scatter-1.vcf.idx | Bin
.../picard/vcf/CEUTrio-random-scatter-2.vcf | 0
.../picard/vcf/CEUTrio-random-scatter-2.vcf.idx | Bin
.../picard/vcf/CEUTrio-random-scatter-3.vcf | 0
.../picard/vcf/CEUTrio-random-scatter-3.vcf.idx | Bin
.../picard/vcf/CEUTrio-random-scatter-4.vcf | 0
.../picard/vcf/CEUTrio-random-scatter-4.vcf.idx | Bin
.../picard/vcf/CEUTrio-random-scatter-5.vcf | 0
.../picard/vcf/CEUTrio-random-scatter-5.vcf.idx | Bin
testdata/picard/vcf/CEUTrio-snps-scrambled.1.vcf | 406 +
testdata/picard/vcf/CEUTrio-snps-scrambled.2.vcf | 406 +
testdata/{net/sf => }/picard/vcf/CEUTrio-snps.vcf | 0
.../{net/sf => }/picard/vcf/CEUTrio-snps.vcf.idx | Bin
...ceDiff.genotype_concordance_contingency_metrics | 11 +
...ordanceDiff.genotype_concordance_detail_metrics | 13 +
...rdanceDiff.genotype_concordance_summary_metrics | 11 +
...ceDiff.genotype_concordance_contingency_metrics | 11 +
...ordanceDiff.genotype_concordance_detail_metrics | 13 +
...rdanceDiff.genotype_concordance_summary_metrics | 11 +
...ceDiff.genotype_concordance_contingency_metrics | 11 +
...ordanceDiff.genotype_concordance_detail_metrics | 13 +
...rdanceDiff.genotype_concordance_summary_metrics | 11 +
testdata/picard/vcf/CEUTrio-snps_del_line.vcf | 405 +
.../picard/vcf/CEUTrio-snps_first_line_diff.vcf | 406 +
.../picard/vcf/CEUTrio-snps_last_line_diff.vcf | 406 +
...ceDiff.genotype_concordance_contingency_metrics | 11 +
...ordanceDiff.genotype_concordance_detail_metrics | 12 +
...rdanceDiff.genotype_concordance_summary_metrics | 11 +
...llRows.genotype_concordance_contingency_metrics | 11 +
...iff_AllRows.genotype_concordance_detail_metrics | 383 +
...ff_AllRows.genotype_concordance_summary_metrics | 11 +
..._MinDp.genotype_concordance_contingency_metrics | 11 +
...eDiff_MinDp.genotype_concordance_detail_metrics | 21 +
...Diff_MinDp.genotype_concordance_summary_metrics | 11 +
..._MinGq.genotype_concordance_contingency_metrics | 11 +
...eDiff_MinGq.genotype_concordance_detail_metrics | 20 +
...Diff_MinGq.genotype_concordance_summary_metrics | 11 +
.../picard/vcf/IntervalList1PerChrom.interval_list | 103 +
.../picard/vcf/IntervalListChr1Small.interval_list | 86 +
...ceDiff.genotype_concordance_contingency_metrics | 11 +
...ordanceDiff.genotype_concordance_detail_metrics | 17 +
...rdanceDiff.genotype_concordance_summary_metrics | 11 +
testdata/picard/vcf/NIST.selected.vcf | 195 +
testdata/picard/vcf/NIST.selected.vcf.idx | Bin 0 -> 13875 bytes
.../picard/vcf/chunking/multi_allelic_at_10M.vcf | 171 +
.../vcf/chunking/multi_allelic_at_10M.vcf.idx | Bin 0 -> 15249 bytes
testdata/picard/vcf/filter/testFiltering.vcf | 150 +
testdata/picard/vcf/mini.dbsnp.vcf | 639 +
testdata/picard/vcf/mini.dbsnp.vcf.idx | Bin 0 -> 2347 bytes
testdata/picard/vcf/mini.vcf | 1000 +
testdata/picard/vcf/mini.vcf.idx | Bin 0 -> 2625 bytes
testdata/picard/vcf/vcfFormatTest.bad_dict.vcf | 444 +
testdata/{net/sf => }/picard/vcf/vcfFormatTest.bcf | Bin
.../{net/sf => }/picard/vcf/vcfFormatTest.bcf.idx | Bin
testdata/picard/vcf/vcfFormatTest.scrambled.vcf | 446 +
testdata/{net/sf => }/picard/vcf/vcfFormatTest.vcf | 0
.../{net/sf => }/picard/vcf/vcfFormatTest.vcf.idx | Bin
testdata/tribble/Tb.vcf.idx | Bin 998966 -> 0 bytes
testdata/tribble/basicDbSNP.dbsnp | 43 -
....deletions.10kbp.het.gq99.hand_curated.hg19.bed | 35 -
...ions.10kbp.het.gq99.hand_curated.hg19_fixed.bed | 36 -
testdata/tribble/bed/Unigene.sample.bed | 72 -
testdata/tribble/bed/disconcontigs.bed | 5 -
testdata/tribble/bed/unsorted.bed | 5 -
testdata/tribble/complexExample.vcf | 23 -
testdata/tribble/fakeBed.bed | 51 -
testdata/tribble/fakeVCF.vcf.gz | Bin 351859 -> 0 bytes
testdata/tribble/fakeVCF.vcf.gz.tbi | Bin 170 -> 0 bytes
testdata/tribble/gwas/smallp.gwas | 20 -
testdata/tribble/index/chrY_Y4_small.bed | 5000 ---
testdata/tribble/large.txt | 165 -
testdata/tribble/seekTest.txt | 5 -
testdata/tribble/sites.bed | 1000 -
testdata/tribble/soapsnp.txt | 24 -
testdata/tribble/split/test.bin.part1 | Bin 16000 -> 0 bytes
testdata/tribble/split/test.bin.part2 | Bin 16000 -> 0 bytes
testdata/tribble/split/test.bin.part3 | Bin 16000 -> 0 bytes
testdata/tribble/split/test.bin.split | 3 -
testdata/tribble/tabix/bigger.vcf.gz.tbi | Bin 595996 -> 0 bytes
testdata/tribble/tabix/trioDup.vcf | 75 -
testdata/tribble/tabix/trioDup.vcf.gz | Bin 1353 -> 0 bytes
testdata/tribble/tabix/trioDup.vcf.gz.tbi | Bin 324 -> 0 bytes
testdata/tribble/test.bed | 9 -
testdata/tribble/test.gff | 9 -
testdata/tribble/test.tabix.bed.gz | Bin 116 -> 0 bytes
testdata/tribble/test.tabix.bed.gz.tbi | Bin 121 -> 0 bytes
testdata/tribble/testGeliText.txt | 50 -
testdata/tribble/testIntervalList.list | 6 -
testdata/tribble/tmp/.gitignore | 0
testdata/tribble/trio.vcf | 100 -
testdata/tribble/trio.vcf.idx | Bin 495 -> 0 bytes
testdata/tribble/trioDup.vcf | 75 -
testdata/tribble/vcfexample.vcf | 12 -
testdata/tribble/vcfexample.vcf.gz | Bin 471 -> 0 bytes
testdata/tribble/vcfexample.vcf.gz.tbi | Bin 114 -> 0 bytes
testdata/variant/HiSeq.10000.vcf | 10001 ------
...baseline.20111114.both.exome.genotypes.1000.vcf | 249 -
testdata/variant/VQSR.mixedTest.recal | 32 -
testdata/variant/dbsnp_135.b37.1000.vcf | 249 -
testdata/variant/diagnosis_targets_testfile.vcf | 117 -
testdata/variant/ex2.bgzf.bcf | Bin 1062 -> 0 bytes
testdata/variant/ex2.bgzf.bcf.csi | Bin 130 -> 0 bytes
testdata/variant/ex2.uncompressed.bcf | Bin 1892 -> 0 bytes
testdata/variant/ex2.vcf | 23 -
3723 files changed, 80130 insertions(+), 215957 deletions(-)
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..c6f57c2
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,18 @@
+.git
+.gitignore
+.jar_opt
+.classpath
+.project
+.travis.yml
+build.sbt
+Picard-public.fbp
+Picard-public.iml
+Picard-public.ipr
+README.md
+classes
+dist
+etc
+htsjdk
+project
+testclasses
+testdata
diff --git a/.gitignore b/.gitignore
index 879b2f2..4dfc2d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-. - Picard-public.iws
+Picard-public.iws
.command_tmp
classes
testclasses
@@ -8,4 +8,6 @@ contracts
atlassian-ide-plugin.xml
intellij.testclasses
intellij.classes
-
+htsjdk
+.idea
+target
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..5e3111e
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,12 @@
+language: java
+jdk:
+ - oraclejdk7
+ - openjdk7
+before_install:
+ - curl -OL http://raw.github.com/craigcitro/r-travis/master/scripts/travis-tool.sh
+ - chmod 755 ./travis-tool.sh
+ - ./travis-tool.sh bootstrap
+ - sed -i -e 's_git at github.com:_https://github.com/_' build.xml
+script:
+ - ant -lib lib/ant clone-htsjdk
+ - ant test
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..aad8a53
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,31 @@
+FROM broadinstitute/java-baseimage
+MAINTAINER Broad Institute DSDE <dsde-engineering at broadinstitute.org>
+
+# Install ant, git for building
+RUN apt-get update && \
+ apt-get --no-install-recommends install -y --force-yes \
+ git \
+ ant && \
+ apt-get clean autoclean && \
+ apt-get autoremove -y
+
+# Assumes Dockerfile lives in root of the git repo. Pull source files into container
+COPY build.xml /usr/picard/build.xml
+COPY src /usr/picard/src
+COPY lib /usr/picard/lib
+WORKDIR /usr/picard
+
+# Clone out htsjdk. First turn off git ssl verification
+RUN git config --global http.sslVerify false && git clone https://github.com/samtools/htsjdk.git
+
+# Build the distribution jar, clean up everything else
+RUN ant clean all && \
+ mv dist/picard.jar picard.jar && \
+ mv src/scripts/picard/docker_helper.sh docker_helper.sh && \
+ ant clean && \
+ rm -rf htsjdk && \
+ rm -rf src && \
+ rm -rf lib && \
+ rm build.xml
+
+ENTRYPOINT ["./docker_helper.sh"]
\ No newline at end of file
diff --git a/Picard-public.iml b/Picard-public.iml
index 8cf5b94..478d4c7 100644
--- a/Picard-public.iml
+++ b/Picard-public.iml
@@ -12,6 +12,8 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/tests/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/htsjdk/src/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/htsjdk/src/tests/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.command_tmp" />
<excludeFolder url="file://$MODULE_DIR$/classes" />
</content>
@@ -20,57 +22,31 @@
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/lib/testng/testng-5.5-jdk15.jar!/" />
+ <root url="file://$MODULE_DIR$/htsjdk/lib" />
</CLASSES>
<JAVADOC />
<SOURCES />
+ <jarDirectory url="file://$MODULE_DIR$/htsjdk/lib" recursive="false" />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/lib/snappy-java-1.0.3-rc3.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="file://$MODULE_DIR$/../../snappy/snappy-java/snappy-java-1.0.3-rc3-sources" />
- </SOURCES>
- </library>
- </orderEntry>
- <orderEntry type="module-library">
- <library>
- <CLASSES>
- <root url="jar://$MODULE_DIR$/lib/apache-ant-1.8.2-bzip2.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="module-library">
- <library>
- <CLASSES>
- <root url="jar://$MODULE_DIR$/lib/cofoja/cofoja-1.0-r139.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="module-library">
- <library>
- <CLASSES>
- <root url="jar://$MODULE_DIR$/lib/commons-jexl-2.1.1.jar!/" />
+ <root url="file://$MODULE_DIR$/htsjdk/lib/cofoja" />
</CLASSES>
<JAVADOC />
<SOURCES />
+ <jarDirectory url="file://$MODULE_DIR$/htsjdk/lib/cofoja" recursive="false" />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
- <root url="jar://$MODULE_DIR$/lib/commons-logging-1.1.1.jar!/" />
+ <root url="file://$MODULE_DIR$/htsjdk/lib/testng" />
</CLASSES>
<JAVADOC />
<SOURCES />
+ <jarDirectory url="file://$MODULE_DIR$/htsjdk/lib/testng" recursive="false" />
</library>
</orderEntry>
</component>
diff --git a/Picard-public.ipr b/Picard-public.ipr
index c904413..69418df 100644
--- a/Picard-public.ipr
+++ b/Picard-public.ipr
@@ -36,9 +36,7 @@
</profile>
</annotationProcessing>
</component>
- <component name="CopyrightManager" default="">
- <module2copyright />
- </component>
+ <component name="CopyrightManager" default="" />
<component name="DependencyValidationManager">
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</component>
@@ -346,7 +344,7 @@
</component>
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
- <mapping directory="$PROJECT_DIR$" vcs="svn" />
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
<component name="WebServicesPlugin" addRequiredLibraries="true" />
</project>
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..21c60d7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,56 @@
+[](https://travis-ci.org/broadinstitute/picard)
+
+A set of Java command line tools for manipulating high-throughput sequencing (HTS) data and formats.
+
+Picard is implemented using the HTSJDK Java library[HTSJDK][1], supporting
+accessing of common file formats, such as [SAM][2] and [VCF][3], used for high-throughput
+sequencing data.
+
+It's also possible to build a version of Picard that supports reading from
+GA4GH API, e.g. Google Genomics:
+
+* Fetch [gatk-tools-java](https://github.com/gatk-tools-java)
+
+```git clone https://github.com/gatk-tools-java```
+
+* Build gatk-tools-java:
+
+```gatk-tools-java$ mvn compile package```
+
+* Copy the resulting jar into Picard ```lib/``` folder:
+```
+gatk-tools-java$ mkdir ../picard/lib/gatk-tools-java
+gatk-tools-java$ cp target/gatk-tools-java*minimized.jar ../picard/lib/gatk-tools-java/
+```
+
+* Build Picard version with GA4GH support:
+
+```picard$ ant -lib lib/ant package-commands-ga4gh```
+
+* If you have not yet worked with Google Genomics API and need to set up authentication, please follow the instructions [here](https://cloud.google.com/genomics/install-genomics-tools#authenticate) to set up credentials and obtain ```client_secrets.json``` file.
+
+
+* You can now run
+```
+java -jar dist/picard.jar ViewSam \
+INPUT=https://www.googleapis.com/genomics/v1beta2/readgroupsets/CK256frpGBD44IWHwLP22R4/ \
+GA4GH_CLIENT_SECRETS=../client_secrets.json
+```
+
+* To run using GRPC as opposed to REST Genomics API implementation (which is much faster) use the following command that utilizes ALPN jars that come with gatk-tools-java and enables GRPC support:
+```
+java \
+-Xbootclasspath/p:../gatk-tools-java/lib/alpn-boot-8.1.3.v20150130.jar \
+-Dga4gh.using_grpc=true \
+-jar dist/picard.jar ViewSam \
+INPUT=https://www.googleapis.com/genomics/v1beta2/readgroupsets/CK256frpGBD44IWHwLP22R4/ \
+GA4GH_CLIENT_SECRETS=../client_secrets.json
+```
+For Java 7 (as opposed to 8) use ```alpn-boot-7.1.3.v20150130.jar```.
+
+
+Please see the [Picard Documentation](http://broadinstitute.github.io/picard) for more information.
+
+[1]: http://github.com/samtools/htsjdk
+[2]: http://samtools.sourceforge.net
+[3]: http://vcftools.sourceforge.net/specs.html
\ No newline at end of file
diff --git a/build-tribble.xml b/build-tribble.xml
deleted file mode 100644
index 4a87658..0000000
--- a/build-tribble.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ The MIT License
- ~
- ~ Copyright (c) 2010 The Broad Institute
- ~
- ~ Permission is hereby granted, free of charge, to any person obtaining a copy
- ~ of this software and associated documentation files (the "Software"), to deal
- ~ in the Software without restriction, including without limitation the rights
- ~ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- ~ copies of the Software, and to permit persons to whom the Software is
- ~ furnished to do so, subject to the following conditions:
- ~
- ~ The above copyright notice and this permission notice shall be included in
- ~ all copies or substantial portions of the Software.
- ~
- ~ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- ~ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- ~ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- ~ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- ~ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- ~ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- ~ THE SOFTWARE.
- -->
-
-<project name="tribble" basedir="." default="all">
-
- <property name="src" value="src"/>
- <property name="src.test" value="${src}/tests/java"/>
-
- <property name="lib" value="lib"/>
- <property name="dist" value="dist"/>
- <property name="classes" value="classes"/>
- <property name="classes.test" value="testclasses"/>
- <property name="reports" value="dist/test"/>
- <property name="javac.debug" value="true"/>
- <property name="javac.target" value="1.6"/>
- <property name="tribble-version" value="0"/>
- <property name="singleTest" value="*" /> <!-- used to determine what tests to run -->
-<!-- INIT -->
- <target name="init">
- <path id="classpath">
- <fileset dir="${lib}">
- <include name="**/*.jar"/>
- </fileset>
- </path>
- </target>
-
-<!-- CLEAN -->
- <target name="clean">
- <delete dir="${classes}"/>
- <delete dir="${classes.test}"/>
- <delete dir="${dist}"/>
- <delete dir="javadoc"/>
- </target>
-
-<!-- COMPILE -->
- <target name="compile" depends="init" description="Compile tribble files">
- <echo message="os.name: ${os.name}" />
- <echo message="basdir: ${basedir}" />
- <echo message="ant.file: ${ant.file}" />
- <echo message="ant.project.name: ${ant.project.name}" />
- <echo message="ant.java.version: ${ant.java.version}" />
-
- <mkdir dir="${classes}"/>
- <javac destdir="${classes}"
- debug="${javac.debug}"
- target="${javac.target}"
- source="${javac.target}">
- <src path="${src}"/>
- <classpath refid="classpath"/>
- </javac>
- </target>
-
- <target name="compile-tests" depends="compile" description="Compile test files">
- <mkdir dir="${classes.test}"/>
- <javac destdir="${classes.test}"
- debug="${javac.debug}"
- target="${javac.target}"
- source="${javac.target}"
- srcdir="${src.test}">
- <compilerarg value="-Xlint:all"/>
- <include name="org/broad/tribble/**/*"/>
- <classpath>
- <path refid="classpath"/>
- <pathelement location="${classes}"/>
- </classpath>
- </javac>
- </target>
-
- <!-- TEST -->
- <target name="test" depends="compile,compile-tests" description="Run unit tests">
- <taskdef resource="testngtasks" classpathref="classpath"/>
- <testng classpathref="classpath"
- outputDir="${reports}"
- haltOnFailure="true" verbose="2"
- workingDir="${basedir}">
- <jvmarg value="-Xmx1g"/>
- <jvmarg value="-Djava.awt.headless=true" />
- <jvmarg value="-Xdebug -verbose"/>
- <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"/>
-
- <classpath>
- <pathelement path="${classes}"/>
- <pathelement path="${classes.test}"/>
- </classpath>
- <classfileset dir="${classes.test}" includes="**/${singleTest}.class"/>
- </testng>
-
- <!-- generate a report for Bamboo or Hudson to read in -->
- <junitreport todir="${reports}">
- <fileset dir="${reports}">
- <include name="*/*.xml"/>
- </fileset>
- <report format="noframes" todir="${reports}"/>
- </junitreport>
- </target>
-
-
-<!-- CREATE JAR -->
- <target name="tribble-jar" depends="compile"
- description="Builds tribble-${tribble-version}.jar for inclusion in other projects">
- <mkdir dir="${dist}"/>
- <jar destfile="${dist}/tribble-${tribble-version}.jar" compress="no">
- <fileset dir="${classes}" includes="org/broad/tribble/**/*.*"/>
- </jar>
- <copy todir="${dist}">
- <fileset dir="lib" includes="*.jar"/>
- </copy>
- <jar destfile="${dist}/CountRecords.jar" compress="no">
- <fileset dir="${classes}" includes="org/broad/tribble/**/*.*"/>
- <manifest>
- <attribute name="Class-Path" value="log4j-1.2.15.jar"/>
- <attribute name="Main-Class" value="org.broad.tribble.example.CountRecords" />
- </manifest>
- </jar>
- <jar destfile="${dist}/IndicesAreEqual.jar" compress="no">
- <fileset dir="${classes}" includes="org/broad/tribble/**/*.*"/>
- <manifest>
- <attribute name="Class-Path" value="log4j-1.2.15.jar"/>
- <attribute name="Main-Class" value="org.broad.tribble.example.IndicesAreEqual" />
- </manifest>
- </jar>
-
- <jar destfile="${dist}/IndexToTable.jar" compress="no">
- <fileset dir="${classes}" includes="org/broad/tribble/**/*.*"/>
- <manifest>
- <attribute name="Class-Path" value="log4j-1.2.15.jar"/>
- <attribute name="Main-Class" value="org.broad.tribble.example.IndexToTable" />
- </manifest>
- </jar>
-
- <jar destfile="${dist}/ProfileIndexReading.jar" compress="no">
- <fileset dir="${classes}" includes="org/broad/tribble/**/*.*"/>
- <manifest>
- <attribute name="Class-Path" value="log4j-1.2.15.jar"/>
- <attribute name="Main-Class" value="org.broad.tribble.example.ProfileIndexReading" />
- </manifest>
- </jar>
- </target>
-
-<!-- JAVADOC -->
- <target name="javadoc" depends="init" description="Generates the project javadoc.">
- <javadoc
- sourcepath="${src}"
- destdir="javadoc"
- packagenames="org.broad.tribble.*"
- windowtitle="Tribble API Documentation"
- doctitle="<h1>Tribble API Documentation</h1>"
- author="true"
- protected="true"
- use="true"
- version="true">
- <classpath location="${java.home}/../lib/tools.jar"/>
- <link href="http://java.sun.com/j2se/1.5.0/docs/api/"/>
- </javadoc>
- </target>
-
-<!-- ALL -->
- <target name="all" depends="compile, tribble-jar" description="Default build target">
- </target>
-
-</project>
diff --git a/build.sbt b/build.sbt
new file mode 100644
index 0000000..276d2e2
--- /dev/null
+++ b/build.sbt
@@ -0,0 +1,142 @@
+import com.typesafe.sbt.SbtGit._
+import de.johoop.testngplugin.TestNGPlugin._
+import sbt.Package.ManifestAttributes
+
+name := "picard"
+
+version := "1.138"
+
+organization := "com.github.broadinstitute"
+
+javaSource in Compile := baseDirectory.value / "src/java"
+
+javaSource in Test := baseDirectory.value / "src/tests"
+
+unmanagedResourceDirectories in Test := Seq(baseDirectory.value / "src/scripts", baseDirectory.value / "testdata", baseDirectory.value / "src/tests/scripts")
+
+libraryDependencies ++= Seq(
+ "com.github.samtools" % "htsjdk" % "1.138",
+ ("com.google.cloud.genomics" % "gatk-tools-java" % "1.1" % "picardopt").
+ exclude("org.mortbay.jetty", "servlet-api"),
+ "org.testng" % "testng" % "6.8.8" % Test
+)
+
+
+testNGSettings
+
+testNGSuites := Seq("src/tests/resources/testng.xml")
+
+autoScalaLibrary := false
+
+publishMavenStyle := true
+
+publishArtifact in Test := false
+
+pomIncludeRepository := { _ => false }
+
+crossPaths := false
+
+javacOptions in Compile ++= Seq("-source", "1.6")
+
+javacOptions in(Compile, compile) ++= Seq("-target", "1.6")
+
+versionWithGit
+
+assemblyJarName := s"${name.value}-${version.value}.jar"
+
+val PicardOpt = config("picardopt") extend Compile
+
+val gitVersion = settingKey[String]("The picard head commit git hash.")
+
+gitVersion := git.gitHeadCommit.value.get
+
+unmanagedJars in Compile ~= { uj =>
+ Seq(Attributed.blank(file(System.getProperty("java.home").dropRight(3) + "lib/tools.jar"))) ++ uj
+}
+
+test in assembly := {}
+
+packageOptions := Seq(ManifestAttributes(
+ ("Implementation-Version", s"${version.value}(${gitVersion.value})"),
+ ("Implementation-Vendor", "Broad Institute"),
+ ("Main-Class", "picard.cmdline.PicardCommandLine"),
+ ("Implementation-Title", "PICARD Tools")
+))
+
+publishTo := {
+ val nexus = "https://oss.sonatype.org/"
+ if (isSnapshot.value)
+ Some("snapshots" at nexus + "content/repositories/snapshots")
+ else
+ Some("releases" at nexus + "service/local/staging/deploy/maven2")
+}
+
+assemblyMergeStrategy in assembly := {
+ case x if Assembly.isConfigFile(x) =>
+ MergeStrategy.concat
+ case PathList(ps at _*) if (Assembly.isReadme(ps.last) || Assembly.isLicenseFile(ps.last)) =>
+ MergeStrategy.rename
+ case PathList("META-INF", xs at _*) =>
+ xs map {
+ _.toLowerCase
+ } match {
+ case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) =>
+ MergeStrategy.discard
+ case ps@(x :: xs) if ps.last.endsWith(".sf") || ps.last.endsWith(".dsa") =>
+ MergeStrategy.discard
+ case "plexus" :: xs =>
+ MergeStrategy.discard
+ case "spring.tooling" :: xs =>
+ MergeStrategy.discard
+ case "services" :: xs =>
+ MergeStrategy.filterDistinctLines
+ case ("spring.schemas" :: Nil) | ("spring.handlers" :: Nil) =>
+ MergeStrategy.filterDistinctLines
+ case _ => MergeStrategy.deduplicate
+ }
+ case "asm-license.txt" | "overview.html" =>
+ MergeStrategy.discard
+ case _ => MergeStrategy.deduplicate
+}
+
+assemblyExcludedJars in assembly := {
+ val cp = (fullClasspath in assembly).value
+ cp filter { jar =>
+ jar.data.getName == "gatk-tools-java-picard-1.1.jar" || jar.data.getName == "tools.jar"
+ }
+}
+
+val root = project.in(file(".")).
+ configs(PicardOpt).
+ settings(inConfig(PicardOpt)(
+ Classpaths.configSettings ++ Defaults.configTasks ++ baseAssemblySettings ++ Seq(
+ test in assembly := {},
+ assemblyJarName := s"${name.value}-opt-${version.value}.jar",
+ assemblyExcludedJars in assembly := {
+ val cp = (fullClasspath in assembly).value
+ cp filter { jar =>
+ jar.data.getName == "guava-15.0.jar" || jar.data.getName == "tools.jar"
+ }
+ }
+ )): _*)
+
+
+pomExtra := <url>http://samtools.github.io/htsjdk/</url>
+ <licenses>
+ <license>
+ <name>MIT License</name>
+ <url>http://opensource.org/licenses/MIT</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <scm>
+ <url>git at github.com:samtools/htsjdk.git</url>
+ <connection>scm:git:git at github.com:samtools/htsjdk.git</connection>
+ </scm>
+ <developers>
+ <developer>
+ <id>picard</id>
+ <name>Picard Team</name>
+ <url>http://broadinstitute.github.io/picard/</url>
+ </developer>
+ </developers>
diff --git a/build.xml b/build.xml
index f7337a2..7ecd771 100755
--- a/build.xml
+++ b/build.xml
@@ -29,33 +29,41 @@
<property name="src.scripts" value="src/scripts"/>
<property name="src.test" value="src/tests"/>
<property name="src.test.java" value="${src.test}/java"/>
+ <property name="src.www" value="src/www"/>
<property name="lib" value="lib"/>
<property name="dist" value="dist"/>
+ <property name="dist.tmp" value="dist/tmp"/>
<property name="classes" value="classes"/>
<property name="classes.test" value="testclasses"/>
<property name="scripts" value="src/scripts"/>
<property name="reports" value="dist/test"/>
<property name="test.output" value="dist/test"/>
+ <property name="htsjdk_lib_dir" value="${dist}/htsjdk_lib_dir"/>
+ <property name="htsjdk_git_url" value="git at github.com:samtools/htsjdk.git"/>
+ <!-- TODO: get this from the build.xml in htsjdk -->
+ <property name="htsjdk-classes" value="htsjdk/classes"/>
<property name="javac.target" value="1.6"/>
<property name="javac.debug" value="true"/>
- <!-- Get SVN revision, if available, otherwise leave it blank. -->
- <exec executable="svnversion" outputproperty="repository.revision" failifexecutionfails="false"/>
+ <!-- Get GIT hash, if available, otherwise leave it blank. -->
+ <exec executable="git" outputproperty="repository.revision" failifexecutionfails="true" errorproperty="">
+ <arg value="log"/>
+ <arg value="-1"/>
+ <arg value="--pretty=format:%H_%at"/>
+ </exec>
<property name="repository.revision" value=""/>
- <property name="sam-version" value="1.113"/>
- <property name="picard-version" value="${sam-version}"/>
- <property name="tribble-version" value="${sam-version}"/>
- <property name="variant-version" value="${sam-version}"/>
- <property name="command_tmp" value=".command_tmp"/>
+ <property name="picard-version" value="1.138"/>
<property name="command-line-html-dir" value="${dist}/html"/>
<property name="testng.verbosity" value="2"/>
- <property name="test.debug.port" value="5005" /> <!-- override on the command line if desired -->
+ <property name="test.debug.port" value="5005"/>
+ <!-- override on the command line if desired -->
<property environment="env"/>
- <property name="java6.home" value="${env.JAVA6_HOME}"/>
-
- <condition property="isUnix">
+ <property name="htsjdk" value="htsjdk"/>
+ <property name="htsjdk_src" value="${htsjdk}/src/java"/>
+ <property name="jar_opt" value=".jar_opt"/>
+ <condition property="isUnix">
<os family="unix"/>
</condition>
<target name="set_excluded_test_groups_unix" if="isUnix">
@@ -66,76 +74,119 @@
</target>
<target name="set_excluded_test_groups" depends="set_excluded_test_groups_unix,set_excluded_test_groups_non_unix"/>
-
<!-- INIT -->
<target name="init">
<path id="classpath">
- <fileset dir="${lib}">
+ <fileset dir="${htsjdk_lib_dir}">
+ <include name="*.jar"/>
<include name="**/*.jar"/>
</fileset>
+ <!-- for the specific HTSJDK library JARs -->
+ <fileset dir="${htsjdk}/lib">
+ <include name="*.jar"/>
+ <include name="**/*.jar"/>
+ </fileset>
+ <fileset dir="${lib}">
+ <include name="**/*.jar"/>
+ </fileset>
</path>
- <path id="metrics.classpath">
+ <path id="metrics.classpath">
<pathelement path="${classpath}"/>
<pathelement location="${classes}"/>
+ <pathelement location="${htsjdk}/classes"/>
</path>
- <path id="java6.lib.ref">
- <fileset dir="${java6.home}/lib" includes="*.jar"/>
- </path>
</target>
<!-- CLEAN -->
- <target name="clean">
+ <target name="clean-local" description="Delete local build products but not nested project" depends="clean-jar-opt">
<delete dir="${classes}"/>
<delete dir="${classes.test}"/>
<delete dir="${test.output}"/>
- <delete dir="${dist}"/>
- <delete dir="${command_tmp}"/>
- <delete dir="javadoc"/>
+ <delete dir="${dist}"/>
+ <delete dir="javadoc"/>
</target>
- <!-- COMPILE -->
- <target name="compile" depends="compile-src, compile-tests"
- description="Compile files without cleaning">
+ <target name="clean" description="Clean local build products and also nested project" depends="clean-local, clean-htsjdk"/>
+
+ <!-- HTS-JDK -->
+ <target name="set-htsjdk-version">
+ <!-- set the htsjdk version -->
+ <ant antfile="build.xml" dir="${htsjdk}" target="write-version-property" inheritall="false"/>
+ <loadfile property="htsjdk-version" srcFile="${htsjdk}/htsjdk.version.properties">
+ <filterchain>
+ <linecontains>
+ <contains value="htsjdk-version="/>
+ </linecontains>
+ <tokenfilter>
+ <replacestring from="htsjdk-version=" to=""/>
+ </tokenfilter>
+ <striplinebreaks/>
+ </filterchain>
+ </loadfile>
+ </target>
+
+ <target name="clone-htsjdk" description="Clone HTS-JDK sources from Sourceforge">
+ <exec executable="git" failonerror="true">
+ <arg value="clone"/>
+ <arg value="${htsjdk_git_url}"/>
+ <arg value="${htsjdk}"/>
+ </exec>
</target>
- <target name="compile-src" depends="compile-sam-jdk, compile-picard, compile-tribble, compile-variant" description="Compile files without cleaning"/>
+ <target name="compile-htsjdk" depends="set-htsjdk-version" description="Build HTS-JDK, and grab build jars">
+ <ant antfile="build.xml" dir="${htsjdk}" target="clean" inheritall="false"/>
+ <ant antfile="build.xml" dir="${htsjdk}" target="all" inheritall="false"/>
+ <copy todir="${htsjdk_lib_dir}">
+ <fileset dir="${htsjdk}/dist" includes="**/*-*.jar"/>
+ <fileset dir="${htsjdk}/lib" includes="*.jar"/>
+ </copy>
+ <copy todir="${dist}">
+ <fileset dir="${htsjdk}/dist" includes="**/*.jar" excludes="**/*-*.jar"/>
+ </copy>
+ <!-- set the htsjdk version -->
+ <ant antfile="build.xml" dir="${htsjdk}" target="write-version-property" inheritall="false"/>
+ </target>
- <target name="compile-sam-jdk" depends="init" description="Compile sam-jdk files without cleaning">
- <compile-src includes="net/sf/samtools/**/*.*"/>
+ <target name="clean-htsjdk" description="Clean HTS-JDK">
+ <ant antfile="build.xml" dir="${htsjdk}" target="clean" inheritall="false"/>
</target>
- <target name="compile-picard" depends="init, compile-variant" description="Compile picard files without cleaning">
- <compile-src includes="net/sf/picard/**/*.*"/>
+ <target name="test-htsjdk" description="Test HTS-JDK">
+ <ant antfile="build.xml" dir="${htsjdk}" target="test" inheritall="false"/>
</target>
- <target name="compile-tribble" depends="init, compile-sam-jdk" description="Compile tribble files without cleaning">
- <compile-src includes="org/broad/tribble/**/*.*"/>
+ <target name="compile-htsjdk-tests" description="Compile HTS-JDK Tests">
+ <ant antfile="build.xml" dir="${htsjdk}" target="compile-tests" inheritall="false"/>
</target>
- <target name="compile-variant" depends="init, compile-tribble" description="Compile variant files without cleaning">
- <compile-src includes="org/broadinstitute/variant/**/*.*" compiler.args="-proc:none"/>
+ <!-- COMPILE -->
+ <target name="compile" depends="compile-src, compile-tests"
+ description="Compile files without cleaning">
</target>
- <target name="compile-tests" depends="compile-sam-jdk-tests, compile-picard-tests, compile-tribble-tests, compile-variant-tests" description="Compile test files without cleaning"/>
+ <target name="compile-src" depends="compile-htsjdk, compile-picard" description="Compile files without cleaning"/>
- <target name="compile-sam-jdk-tests" depends="init" description="Compile sam-jdk test files without cleaning">
- <compile-tests includes="net/sf/samtools/**/*.*"/>
+ <target name="compile-picard" depends="init" description="Compile picard files without cleaning">
+ <compile-src includes="picard/**/*.*" />
</target>
+ <target name="compile-tests" depends="compile-htsjdk-tests, compile-picard-tests" description="Compile test files without cleaning"/>
+
<target name="compile-picard-tests" depends="init" description="Compile picard test files without cleaning">
- <compile-tests includes="net/sf/picard/**/*.*"/>
+ <compile-tests includes="picard/**/*.*"/>
<copy todir="${classes.test}/">
<fileset dir="${src.test}/scripts" includes="**/*"/>
</copy>
</target>
- <target name="compile-tribble-tests" depends="init" description="Compile tribble test files without cleaning">
- <compile-tests includes="org/broad/tribble/**/*.*"/>
- </target>
-
- <target name="compile-variant-tests" depends="init" description="Compile variant test files without cleaning">
- <compile-tests includes="org/broadinstitute/variant/**/*.*" compiler.args="-proc:none"/>
+ <target name="build-timestamp">
+ <tstamp>
+ <format property="build.timestamp" pattern="yyyy.MM.dd hh.mm.ss" locale="en,US"/>
+ </tstamp>
+ <replace dir="${command-line-html-dir}" token="@builddate@" value="${build.timestamp}">
+ <include name="**/*.html"/>
+ </replace>
</target>
<!-- TEST -->
@@ -155,7 +206,7 @@
</classfileset>
<jvmarg value="-Xmx2G"/>
</testng>
- <junitreport todir="${dist}/test" >
+ <junitreport todir="${dist}/test">
<fileset dir="${test.output}">
<include name="*.xml"/>
</fileset>
@@ -169,13 +220,14 @@
depends="compile, compile-tests"
description="Compile and run a single test.">
<taskdef resource="testngtasks" classpathref="classpath"/>
- <fail unless="name" message="Please provide input test: -Dname=..." />
+ <fail unless="name" message="Please provide input test: -Dname=..."/>
- <condition property="debug.jvm.args" value="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${test.debug.port}" else="">
- <isset property="test.debug" />
+ <condition property="debug.jvm.args" value="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${test.debug.port}"
+ else="">
+ <isset property="test.debug"/>
</condition>
- <testng suitename="samtools-single-test" classpathref="classpath" outputdir="${test.output}"
+ <testng suitename="picard-single-test" classpathref="classpath" outputdir="${test.output}"
verbose="${testng.verbosity}">
<jvmarg line="-Xmx512M ${debug.jvm.args}"/>
<classpath>
@@ -189,177 +241,222 @@
</testng>
</target>
- <target name="sam-jar" depends="compile-sam-jdk"
- description="Builds sam-${sam-version}.jar for inclusion in other projects">
- <mkdir dir="${dist}"/>
- <jar destfile="${dist}/sam-${sam-version}.jar" compress="no">
- <fileset dir="${classes}" includes ="net/sf/samtools/**/*.*"/>
+ <target name="process-external-jars" depends="clean-jar-opt, maybe-add-gatk-tools-java">
+ </target>
+
+ <target name="clean-jar-opt">
+ <delete dir="${jar_opt}"/>
+ <mkdir dir="${jar_opt}"/>
+ </target>
+
+ <target name="maybe-add-gatk-tools-java" if="addGATKToolsJava">
+ <mkdir dir="${jar_opt}"/>
+ <unzip dest="${jar_opt}">
+ <fileset dir="${lib}/gatk-tools-java">
+ <include name="*.jar"/>
+ </fileset>
+ </unzip>
+ </target>
+
+ <target name="picard-jar" depends="compile, process-external-jars"
+ description="Builds the main executable picard.jar">
+ <mkdir dir="${dist}"/>
+ <mkdir dir="${dist.tmp}"/>
+ <unjar dest="${dist.tmp}">
+ <fileset dir="${lib}" />
+ <fileset dir="${htsjdk_lib_dir}">
+ <include name="*.jar"/>
+ </fileset>
+ </unjar>
+
+ <jar destfile="${dist}/picard.jar" compress="no">
+ <fileset dir="${classes}" includes="picard/**/*.*, META-INF/**/*"/>
+ <fileset dir="${src.scripts}" includes="**/*.R"/>
+ <fileset dir="${htsjdk-classes}" includes ="${htsjdk}/*/**/*.*"/>
+ <fileset dir="${dist.tmp}" includes="**/*"/>
+ <fileset dir="${jar_opt}" includes="**/*"/>
+
<manifest>
<attribute name="Implementation-Version" value="${picard-version}(${repository.revision})"/>
<attribute name="Implementation-Vendor" value="Broad Institute"/>
+ <attribute name="Main-Class" value="picard.cmdline.PicardCommandLine"/>
+ <attribute name="Implementation-Title" value="PICARD Tools"/>
+ <attribute name="HTSJDK-Version" value="${htsjdk-version}"/>
</manifest>
</jar>
+
+ <delete dir="${dist.tmp}"/>
</target>
- <target name="picard-jar" depends="compile"
- description="Builds picard-${picard-version}.jar for inclusion in other projects">
+ <target name="picard-lib-jar" depends="compile"
+ description="Builds the library: picard-lib.jar">
<mkdir dir="${dist}"/>
- <jar destfile="${dist}/picard-${picard-version}.jar" compress="no">
- <fileset dir="${classes}" includes ="net/sf/picard/**/*.*"/>
+ <jar destfile="${dist}/picard-lib.jar" compress="no">
+ <fileset dir="${classes}" includes="picard/**/*.*"/>
<fileset dir="${src.scripts}" includes="**/*.R"/>
- <zipfileset src="${lib}/apache-ant-1.8.2-bzip2.jar"/>
<manifest>
<attribute name="Implementation-Version" value="${picard-version}(${repository.revision})"/>
<attribute name="Implementation-Vendor" value="Broad Institute"/>
+ <attribute name="Implementation-Title" value="PICARD Tools Library"/>
</manifest>
</jar>
</target>
- <target name="tribble-jar" depends="compile"
- description="Builds tribble-${tribble-version}.jar for inclusion in other projects">
- <mkdir dir="${dist}"/>
- <jar destfile="${dist}/tribble-${tribble-version}.jar" compress="no">
- <fileset dir="${classes}" includes="org/broad/tribble/**/*.*"/>
- </jar>
- <copy todir="${dist}">
- <fileset dir="lib" includes="*.jar"/>
- </copy>
- </target>
-
- <target name="variant-jar" depends="compile"
- description="Builds variant-${variant-version}.jar for inclusion in other projects">
- <mkdir dir="${dist}"/>
- <jar destfile="${dist}/variant-${variant-version}.jar" compress="no">
- <fileset dir="${classes}" includes="org/broadinstitute/variant/**/*.*"/>
- </jar>
- <copy todir="${dist}">
- <fileset dir="lib" includes="*.jar"/>
- </copy>
- </target>
-
<target name="javadoc" depends="init" description="Generates the project javadoc.">
<javadoc
- sourcepath="${src}"
- destdir="javadoc"
- packagenames="net.sf.samtools.*, net.sf.picard.*, org.broadinstitute.variant.*, org.broad.tribble.*"
- windowtitle="SAM JDK API Documentation"
- doctitle="<h1>SAM JDK API Documentation</h1>"
+ destdir="javadoc/picard"
+ packagenames="picard*"
+ windowtitle="PICARD JDK API Documentation"
+ doctitle="<h1>PICARD JDK API Documentation</h1>"
+ author="true"
+ protected="true"
+ use="true"
+ version="true"
+ failonerror="true"
+ excludepackagenames="htsjdk*">
+ <classpath>
+ <pathelement location="${java.home}/../lib/tools.jar"/>
+ <fileset dir="${lib}">
+ <include name="**/*.jar"/>
+ </fileset>
+ <fileset dir="${htsjdk}/dist">
+ <include name="**/*.jar"/>
+ </fileset>
+ <fileset dir="${htsjdk}/lib">
+ <include name="**/*.jar"/>
+ </fileset>
+ </classpath>
+ <link href="http://java.sun.com/j2se/1.6.0/docs/api/"/>
+ <fileset dir="${src}" defaultexcludes="yes">
+ <include name="**/*.java"/>
+ </fileset>
+ </javadoc>
+ <javadoc
+ destdir="javadoc/htsjdk"
+ packagenames="htsjdk*"
+ windowtitle="HTSJDK API Documentation"
+ doctitle="<h1>HTSJDK API Documentation</h1>"
author="true"
protected="true"
use="true"
version="true"
- failonerror="true">
+ failonerror="true"
+ excludepackagenames="picard*">
<classpath>
- <pathelement location="${java.home}/../lib/tools.jar" />
+ <pathelement location="${java.home}/../lib/tools.jar"/>
<fileset dir="${lib}">
- <include name="**/*.jar" />
+ <include name="**/*.jar"/>
+ </fileset>
+ <fileset dir="${htsjdk}/lib">
+ <include name="**/*.jar"/>
</fileset>
</classpath>
- <link href="http://java.sun.com/j2se/1.5.0/docs/api/"/>
+ <link href="http://java.sun.com/j2se/1.6.0/docs/api/"/>
+ <fileset dir="${htsjdk_src}" defaultexcludes="yes">
+ <include name="**/*.java"/>
+ </fileset>
</javadoc>
<mkdir dir="${command-line-html-dir}"/>
- <javadoc sourcepath="${src}/java"
- doclet="net.sf.picard.util.MetricsDoclet"
+ <javadoc doclet="picard.util.MetricsDoclet"
docletpathref="metrics.classpath"
classpathref="metrics.classpath"
- failonerror="true">
- <sourcepath path="${src}"/>
- <arg line="-f ${command-line-html-dir}/picard-metric-definitions.shtml"/>
+ failonerror="true" verbose="true">
+ <classpath>
+ <pathelement location="${java.home}/../lib/tools.jar"/>
+ <fileset dir="${lib}">
+ <include name="**/*.jar"/>
+ </fileset>
+ <fileset dir="${htsjdk}/dist">
+ <include name="**/*.jar"/>
+ </fileset>
+ </classpath>
+ <fileset dir=".">
+ <include name="${src}/**/*.java"/>
+ <include name="${htsjdk_src}/**/*.java"/>
+ </fileset>
+ <arg line="-f ${command-line-html-dir}/picard-metric-definitions.html"/>
</javadoc>
</target>
- <target name="package-commands" depends="compile, sam-jar, picard-jar, tribble-jar, variant-jar">
- <delete dir="${command_tmp}"/>
-
- <mkdir dir="${command_tmp}"/>
- <copy todir="${command_tmp}">
- <fileset dir="${classes}" includes="**/*"/>
- </copy>
+ <target name="add-ga4gh-support">
+ <property name="addGATKToolsJava" value="1"/>
+ </target>
- <unzip dest=".command_tmp">
- <fileset dir="${lib}">
- <include name="*.jar"/>
- </fileset>
- </unzip>
+ <target name="package-commands-ga4gh" depends="add-ga4gh-support, compile, picard-jar" />
+
+ <target name="package-commands" depends="compile, picard-jar">
<delete dir="${command-line-html-dir}"/>
-
- <!-- The order of these elements determines the order they appear in the on-line help -->
- <!-- If you don't want to generate on-line doc for a command, use package-command instead of package-and-document-command -->
- <package-and-document-command title="AddCommentsToBam" main-class="net.sf.picard.sam.AddCommentsToBam"/>
- <package-and-document-command title="AddOrReplaceReadGroups" main-class="net.sf.picard.sam.AddOrReplaceReadGroups"/>
- <package-and-document-command title="BamToBfq" main-class="net.sf.picard.fastq.BamToBfq"/>
- <package-and-document-command title="BamIndexStats" main-class="net.sf.picard.sam.BamIndexStats"/>
- <package-and-document-command title="BuildBamIndex" main-class="net.sf.picard.sam.BuildBamIndex"/>
- <package-and-document-command title="CalculateHsMetrics" main-class="net.sf.picard.analysis.directed.CalculateHsMetrics"/>
- <package-and-document-command title="CleanSam" main-class="net.sf.picard.sam.CleanSam"/>
- <package-and-document-command title="CollectAlignmentSummaryMetrics" main-class="net.sf.picard.analysis.CollectAlignmentSummaryMetrics"/>
- <package-and-document-command title="CollectGcBiasMetrics" main-class="net.sf.picard.analysis.CollectGcBiasMetrics"/>
- <package-and-document-command title="CollectInsertSizeMetrics" main-class="net.sf.picard.analysis.CollectInsertSizeMetrics"/>
- <package-and-document-command title="CollectMultipleMetrics" main-class="net.sf.picard.analysis.CollectMultipleMetrics"/>
- <package-and-document-command title="CollectTargetedPcrMetrics" main-class="net.sf.picard.analysis.directed.CollectTargetedPcrMetrics"/>
- <package-and-document-command title="CollectRnaSeqMetrics" main-class="net.sf.picard.analysis.CollectRnaSeqMetrics"/>
- <package-and-document-command title="CollectWgsMetrics" main-class="net.sf.picard.analysis.CollectWgsMetrics"/>
- <package-and-document-command title="CompareSAMs" main-class="net.sf.picard.sam.CompareSAMs"/>
- <package-and-document-command title="CreateSequenceDictionary" main-class="net.sf.picard.sam.CreateSequenceDictionary"/>
- <package-and-document-command title="DownsampleSam" main-class="net.sf.picard.sam.DownsampleSam"/>
- <package-and-document-command title="ExtractIlluminaBarcodes" main-class="net.sf.picard.illumina.ExtractIlluminaBarcodes"/>
- <package-and-document-command title="EstimateLibraryComplexity" main-class="net.sf.picard.sam.EstimateLibraryComplexity"/>
- <package-and-document-command title="FastqToSam" main-class="net.sf.picard.sam.FastqToSam"/>
- <package-and-document-command title="FilterSamReads" main-class="net.sf.picard.sam.FilterSamReads"/>
- <package-and-document-command title="FixMateInformation" main-class="net.sf.picard.sam.FixMateInformation"/>
- <package-and-document-command title="GatherBamFiles" main-class="net.sf.picard.sam.GatherBamFiles"/>
- <package-and-document-command title="IlluminaBasecallsToFastq" main-class="net.sf.picard.illumina.IlluminaBasecallsToFastq"/>
- <package-and-document-command title="IlluminaBasecallsToSam" main-class="net.sf.picard.illumina.IlluminaBasecallsToSam"/>
- <package-and-document-command title="CheckIlluminaDirectory" main-class="net.sf.picard.illumina.CheckIlluminaDirectory"/>
- <package-and-document-command title="IntervalListTools" main-class="net.sf.picard.util.IntervalListTools"/>
- <package-and-document-command title="MakeSitesOnlyVcf" main-class="net.sf.picard.vcf.MakeSitesOnlyVcf"/>
- <package-and-document-command title="MarkDuplicates" main-class="net.sf.picard.sam.MarkDuplicates"/>
- <package-and-document-command title="MeanQualityByCycle" main-class="net.sf.picard.analysis.MeanQualityByCycle"/>
- <package-and-document-command title="MergeBamAlignment" main-class="net.sf.picard.sam.MergeBamAlignment"/>
- <package-and-document-command title="MergeSamFiles" main-class="net.sf.picard.sam.MergeSamFiles"/>
- <package-and-document-command title="MergeVcfs" main-class="net.sf.picard.vcf.MergeVcfs">
- <package-filesets>
- <fileset dir=".command_tmp" >
- <include name="org/apache/commons/logging/**/*"/>
- </fileset>
- </package-filesets>
- </package-and-document-command>
- <package-and-document-command title="NormalizeFasta" main-class="net.sf.picard.reference.NormalizeFasta"/>
- <package-and-document-command title="ExtractSequences" main-class="net.sf.picard.reference.ExtractSequences"/>
- <package-and-document-command title="QualityScoreDistribution" main-class="net.sf.picard.analysis.QualityScoreDistribution"/>
- <package-and-document-command title="ReorderSam" id="" main-class="net.sf.picard.sam.ReorderSam"/>
- <package-and-document-command title="ReplaceSamHeader" main-class="net.sf.picard.sam.ReplaceSamHeader"/>
- <package-and-document-command title="RevertSam" main-class="net.sf.picard.sam.RevertSam"/>
- <package-and-document-command title="RevertOriginalBaseQualitiesAndAddMateCigar" main-class="net.sf.picard.sam.RevertOriginalBaseQualitiesAndAddMateCigar"/>
- <package-and-document-command title="SamFormatConverter" main-class="net.sf.picard.sam.SamFormatConverter"/>
- <package-and-document-command title="SamToFastq" main-class="net.sf.picard.sam.SamToFastq"/>
- <package-and-document-command title="SortSam" main-class="net.sf.picard.sam.SortSam"/>
- <package-and-document-command title="VcfFormatConverter" main-class="net.sf.picard.vcf.VcfFormatConverter">
- <package-filesets>
- <fileset dir=".command_tmp" >
- <include name="org/apache/commons/logging/**/*"/>
- </fileset>
- </package-filesets>
- </package-and-document-command>
- <package-and-document-command title="MarkIlluminaAdapters" main-class="net.sf.picard.illumina.MarkIlluminaAdapters"/>
- <package-and-document-command title="SplitVcfs" main-class="net.sf.picard.vcf.SplitVcfs">
- <package-filesets>
- <fileset dir=".command_tmp" >
- <include name="org/apache/commons/logging/**/*"/>
- </fileset>
- </package-filesets>
- </package-and-document-command>
- <package-and-document-command title="ValidateSamFile" main-class="net.sf.picard.sam.ValidateSamFile"/>
- <package-and-document-command title="ViewSam" main-class="net.sf.picard.sam.ViewSam"/>
+ <!-- If you don't want to generate on-line doc for a command, use package-command instead of document-command -->
+ <document-command title="AddCommentsToBam" main-class="picard.sam.AddCommentsToBam"/>
+ <document-command title="AddOrReplaceReadGroups" main-class="picard.sam.AddOrReplaceReadGroups"/>
+ <document-command title="BamToBfq" main-class="picard.fastq.BamToBfq"/>
+ <document-command title="BamIndexStats" main-class="picard.sam.BamIndexStats"/>
+ <document-command title="BedToIntervalList" main-class="picard.util.BedToIntervalList"/>
+ <document-command title="BuildBamIndex" main-class="picard.sam.BuildBamIndex"/>
+ <document-command title="CalculateHsMetrics" main-class="picard.analysis.directed.CalculateHsMetrics"/>
+ <document-command title="CleanSam" main-class="picard.sam.CleanSam"/>
+ <document-command title="CollectAlignmentSummaryMetrics" main-class="picard.analysis.CollectAlignmentSummaryMetrics"/>
+ <document-command title="CollectBaseDistributionByCycle" main-class="picard.analysis.CollectBaseDistributionByCycle"/>
+ <document-command title="CollectGcBiasMetrics" main-class="picard.analysis.CollectGcBiasMetrics"/>
+ <document-command title="CollectInsertSizeMetrics" main-class="picard.analysis.CollectInsertSizeMetrics"/>
+ <document-command title="CollectMultipleMetrics" main-class="picard.analysis.CollectMultipleMetrics"/>
+ <document-command title="CollectTargetedPcrMetrics" main-class="picard.analysis.directed.CollectTargetedPcrMetrics"/>
+ <document-command title="CollectRnaSeqMetrics" main-class="picard.analysis.CollectRnaSeqMetrics"/>
+ <document-command title="CollectWgsMetrics" main-class="picard.analysis.CollectWgsMetrics"/>
+ <document-command title="CompareSAMs" main-class="picard.sam.CompareSAMs"/>
+ <document-command title="CreateSequenceDictionary" main-class="picard.sam.CreateSequenceDictionary"/>
+ <document-command title="DownsampleSam" main-class="picard.sam.DownsampleSam"/>
+ <document-command title="ExtractIlluminaBarcodes" main-class="picard.illumina.ExtractIlluminaBarcodes"/>
+ <document-command title="EstimateLibraryComplexity" main-class="picard.sam.markduplicates.EstimateLibraryComplexity"/>
+ <document-command title="FastqToSam" main-class="picard.sam.FastqToSam"/>
+ <document-command title="FifoBuffer" main-class="picard.util.FifoBuffer"/>
+ <document-command title="FilterSamReads" main-class="picard.sam.FilterSamReads"/>
+ <document-command title="FilterVcf" main-class="picard.vcf.filter.FilterVcf"/>
+ <document-command title="FixMateInformation" main-class="picard.sam.FixMateInformation"/>
+ <document-command title="GatherBamFiles" main-class="picard.sam.GatherBamFiles"/>
+ <document-command title="GenotypeConcordance" main-class="picard.vcf.GenotypeConcordance"/>
+ <document-command title="IlluminaBasecallsToFastq" main-class="picard.illumina.IlluminaBasecallsToFastq"/>
+ <document-command title="IlluminaBasecallsToSam" main-class="picard.illumina.IlluminaBasecallsToSam"/>
+ <document-command title="CheckIlluminaDirectory" main-class="picard.illumina.CheckIlluminaDirectory"/>
+ <document-command title="IntervalListTools" main-class="picard.util.IntervalListTools"/>
+ <document-command title="LiftoverVcf" main-class="picard.vcf.LiftoverVcf"/>
+ <document-command title="MakeSitesOnlyVcf" main-class="picard.vcf.MakeSitesOnlyVcf"/>
+ <document-command title="MarkDuplicates" main-class="picard.sam.markduplicates.MarkDuplicates"/>
+ <document-command title="MarkDuplicatesWithMateCigar" main-class="picard.sam.markduplicates.MarkDuplicatesWithMateCigar"/>
+ <document-command title="MeanQualityByCycle" main-class="picard.analysis.MeanQualityByCycle"/>
+ <document-command title="MergeBamAlignment" main-class="picard.sam.MergeBamAlignment"/>
+ <document-command title="MergeSamFiles" main-class="picard.sam.MergeSamFiles"/>
+ <document-command title="MergeVcfs" main-class="picard.vcf.MergeVcfs"/>
+ <document-command title="NormalizeFasta" main-class="picard.reference.NormalizeFasta"/>
+ <document-command title="ExtractSequences" main-class="picard.reference.ExtractSequences"/>
+ <document-command title="QualityScoreDistribution" main-class="picard.analysis.QualityScoreDistribution"/>
+ <document-command title="ReorderSam" main-class="picard.sam.ReorderSam"/>
+ <document-command title="ReplaceSamHeader" main-class="picard.sam.ReplaceSamHeader"/>
+ <document-command title="RevertSam" main-class="picard.sam.RevertSam"/>
+ <document-command title="RevertOriginalBaseQualitiesAndAddMateCigar"
+ main-class="picard.sam.RevertOriginalBaseQualitiesAndAddMateCigar"/>
+ <document-command title="SamFormatConverter" main-class="picard.sam.SamFormatConverter"/>
+ <document-command title="SamToFastq" main-class="picard.sam.SamToFastq"/>
+ <document-command title="SortSam" main-class="picard.sam.SortSam"/>
+ <document-command title="SortVcf" main-class="picard.vcf.SortVcf"/>
+ <document-command title="UpdateVcfSequenceDictionary" main-class="picard.vcf.UpdateVcfSequenceDictionary"/>
+ <document-command title="VcfFormatConverter" main-class="picard.vcf.VcfFormatConverter"/>
+ <document-command title="MarkIlluminaAdapters" main-class="picard.illumina.MarkIlluminaAdapters"/>
+ <document-command title="SplitVcfs" main-class="picard.vcf.SplitVcfs"/>
+ <document-command title="ValidateSamFile" main-class="picard.sam.ValidateSamFile"/>
+ <document-command title="ViewSam" main-class="picard.sam.ViewSam"/>
+ <document-command title="VcfToIntervalList" main-class="picard.vcf.VcfToIntervalList"/>
</target>
<!-- ALL -->
- <target name="all" depends="compile, sam-jar, picard-jar, tribble-jar, variant-jar, package-commands, document-standard-options" description="Default build target">
+ <target name="all" depends="compile, picard-lib-jar, package-commands, document-standard-options, build-timestamp"
+ description="Default build target">
<zip zipfile="${dist}/picard-tools-${picard-version}.zip">
<zipfileset dir="${dist}" includes="*.jar" prefix="picard-tools-${picard-version}"/>
+ <zipfileset dir="${htsjdk_lib_dir}" includes="htsjdk-*.jar" prefix="picard-tools-${picard-version}"/>
<zipfileset dir="${lib}" includes="snappy*.jar"/>
<!-- distribute libJniDeflater.so in same directory as jarfiles-->
- <zipfileset dir="${lib}/jni" includes="*" prefix="picard-tools-${picard-version}"/>
+ <zipfileset dir="${htsjdk}/lib/jni" includes="*" prefix="picard-tools-${picard-version}"/>
</zip>
</target>
@@ -369,46 +466,17 @@
<!-- ************************************************************************************** -->
<!-- ************************************************************************************** -->
- <!-- Create a jar for a command-line class so it can be run java -jar jarfile -->
- <macrodef name="package-command">
- <attribute name="main-class"/>
- <attribute name="title"/>
- <element name="filesets" optional="yes"/>
- <sequential>
- <classfileset dir="${command_tmp}" id="reqdClasses">
- <root classname="@{main-class}"/>
- </classfileset>
- <jar destfile="${dist}/@{title}.jar">
- <fileset refid="reqdClasses"/>
- <fileset dir="${src.scripts}" includes="**/*.R"/>
- <fileset dir="${command_tmp}" includes="org/xerial/snappy/native/Linux/**/*"/>
- <fileset dir="${command_tmp}" includes="org/xerial/snappy/VERSION"/>
- <fileset dir="${command_tmp}" includes="META-INF/maven/org.xerial.snappy/snappy-java/pom.properties"/>
- <!-- Force inclusion of IntelDeflater, which is dynamically linked. -->
- <fileset dir="${command_tmp}" includes="net/sf/samtools/util/zip/*"/>
- <filesets/>
- <manifest>
- <attribute name="Implementation-Title" value="@{title}"/>
- <attribute name="Main-Class" value="@{main-class}"/>
- <attribute name="Implementation-Version" value="${picard-version}(${repository.revision})"/>
- <attribute name="Implementation-Vendor" value="Broad Institute"/>
- </manifest>
- </jar>
- </sequential>
- </macrodef>
-
- <target name="document-standard-options" depends="picard-jar, sam-jar">
+ <target name="document-standard-options" depends="picard-jar">
<sequential>
<!-- For Sourceforge project website -->
<mkdir dir="${command-line-html-dir}/program_usage"/>
<!-- Generate HTML for each command -->
- <java classname="net.sf.picard.cmdline.CreateHtmlDocForStandardOptions"
- output="${command-line-html-dir}/program_usage/standard-options.shtml"
+ <java classname="picard.cmdline.CreateHtmlDocForStandardOptions"
+ output="${command-line-html-dir}/program_usage/standard-options.html"
failonerror="true">
<classpath>
- <pathelement location="${dist}/picard-${picard-version}.jar"/>
- <pathelement location="${dist}/sam-${sam-version}.jar"/>
+ <pathelement location="${dist}/picard.jar"/>
</classpath>
</java>
</sequential>
@@ -422,41 +490,25 @@
<sequential>
<!-- For Sourceforge project website -->
<mkdir dir="${command-line-html-dir}/program_usage"/>
+ <mkdir dir="${command-line-html-dir}/inc"/>
<!-- Generate HTML for each command -->
- <java classname="net.sf.picard.cmdline.CreateHtmlDocForProgram"
- output="${command-line-html-dir}/program_usage/@{title}.shtml"
+ <java classname="picard.cmdline.CreateHtmlDocForProgram"
+ output="${command-line-html-dir}/program_usage/@{title}.html"
failonerror="true">
<classpath>
- <pathelement location="${dist}/picard-${picard-version}.jar"/>
- <pathelement location="${dist}/sam-${sam-version}.jar"/>
- <pathelement location="${dist}/variant-${variant-version}.jar"/>
+ <pathelement location="${dist}/picard.jar"/>
</classpath>
<arg value="@{main-class}"/>
</java>
<!-- Generate links to each command -->
- <echo file="${command-line-html-dir}/command-line-sidebar.shtml" append="true"
- message="<li><a href="command-line-overview.shtml#@{title}">@{title}</a>${line.separator}"/>
+ <echo file="${command-line-html-dir}/inc/command-line-sidebar.html" append="true"
+ message="<li><a href="command-line-overview.html#@{title}">@{title}</a>${line.separator}"/>
<!-- include usage for each command -->
- <echo file="${command-line-html-dir}/command-line-usage.shtml" append="true"
- message="<!--#include virtual="@{title}.shtml" -->${line.separator}"/>
- </sequential>
- </macrodef>
-
- <!-- Create a jar for a command-line class so it can be run java -jar jarfile, and generate on-line doc for it. -->
- <macrodef name="package-and-document-command">
- <attribute name="main-class"/>
- <attribute name="title"/>
- <element name="package-filesets" optional="yes"/>
- <sequential>
- <package-command title="@{title}" main-class="@{main-class}">
- <filesets>
- <package-filesets/>
- </filesets>
- </package-command>
- <document-command title="@{title}" main-class="@{main-class}"/>
+ <echo file="${command-line-html-dir}/inc/command-line-usage.html" append="true"
+ message="{% include @{title}.html %}${line.separator}"/>
</sequential>
</macrodef>
@@ -469,7 +521,7 @@
<attribute name="compile.classpath" default="classpath"/>
<attribute name="compiler.args" default=""/>
<sequential>
- <mkdir dir="${classes}"/>
+ <mkdir dir="${classes}"/>
<!-- unset the sourcepath attribute in order to compile only files explicitly specified and disable javac's default searching mechanism -->
<javac destdir="@{destdir}"
optimize="${javac.opt}"
@@ -481,9 +533,7 @@
source="${javac.target}"
target="${javac.target}">
<classpath refid="@{compile.classpath}"/>
- <compilerarg line="@{compiler.args}" />
- <!-- ensure that Java 6 bootclasspath is used -->
- <compilerarg value="-Xbootclasspath/p:${toString:java6.lib.ref}"/>
+ <compilerarg line="@{compiler.args}"/>
</javac>
</sequential>
</macrodef>
@@ -508,8 +558,6 @@
<pathelement location="${classes}"/>
</classpath>
<compilerarg line="@{compiler.args}"/>
- <!-- ensure that Java 6 bootclasspath is used -->
- <compilerarg value="-Xbootclasspath/p:${toString:java6.lib.ref}"/>
</javac>
</sequential>
</macrodef>
diff --git a/project/plugins.sbt b/project/plugins.sbt
new file mode 100644
index 0000000..9c2b114
--- /dev/null
+++ b/project/plugins.sbt
@@ -0,0 +1,5 @@
+addSbtPlugin("de.johoop" % "sbt-testng-plugin" % "3.0.2")
+
+addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
+
+addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.7.1")
\ No newline at end of file
diff --git a/src/c/inteldeflater/IntelDeflater.c b/src/c/inteldeflater/IntelDeflater.c
deleted file mode 100644
index 39a3a57..0000000
--- a/src/c/inteldeflater/IntelDeflater.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Native method support for net.sf.samtools.util.zip.IntelDeflater.
- * This is copied from OpenJDK native support for java.util.zip.Deflater, with only package and class name changed.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "jlong.h"
-#include "jni.h"
-#include "jni_util.h"
-#include "zlib.h"
-
-#include "net_sf_samtools_util_zip_IntelDeflater.h"
-
-#define DEF_MEM_LEVEL 8
-
-static jfieldID levelID;
-static jfieldID strategyID;
-static jfieldID setParamsID;
-static jfieldID finishID;
-static jfieldID finishedID;
-static jfieldID bufID, offID, lenID;
-
-JNIEXPORT void JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_initIDs(JNIEnv *env, jclass cls)
-{
- levelID = (*env)->GetFieldID(env, cls, "level", "I");
- strategyID = (*env)->GetFieldID(env, cls, "strategy", "I");
- setParamsID = (*env)->GetFieldID(env, cls, "setParams", "Z");
- finishID = (*env)->GetFieldID(env, cls, "finish", "Z");
- finishedID = (*env)->GetFieldID(env, cls, "finished", "Z");
- bufID = (*env)->GetFieldID(env, cls, "buf", "[B");
- offID = (*env)->GetFieldID(env, cls, "off", "I");
- lenID = (*env)->GetFieldID(env, cls, "len", "I");
-}
-
-JNIEXPORT jlong JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_init(JNIEnv *env, jclass cls, jint level,
- jint strategy, jboolean nowrap)
-{
- z_stream *strm = calloc(1, sizeof(z_stream));
-
- if (strm == 0) {
- JNU_ThrowOutOfMemoryError(env, 0);
- return jlong_zero;
- } else {
- char *msg;
- switch (deflateInit2(strm, level, Z_DEFLATED,
- nowrap ? -MAX_WBITS : MAX_WBITS,
- DEF_MEM_LEVEL, strategy)) {
- case Z_OK:
- return ptr_to_jlong(strm);
- case Z_MEM_ERROR:
- free(strm);
- JNU_ThrowOutOfMemoryError(env, 0);
- return jlong_zero;
- case Z_STREAM_ERROR:
- free(strm);
- JNU_ThrowIllegalArgumentException(env, 0);
- return jlong_zero;
- default:
- msg = strm->msg;
- free(strm);
- JNU_ThrowInternalError(env, msg);
- return jlong_zero;
- }
- }
-}
-
-JNIEXPORT void JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_setDictionary(JNIEnv *env, jclass cls, jlong addr,
- jarray b, jint off, jint len)
-{
- Bytef *buf = (*env)->GetPrimitiveArrayCritical(env, b, 0);
- int res;
- if (buf == 0) {/* out of memory */
- return;
- }
- res = deflateSetDictionary((z_stream *)jlong_to_ptr(addr), buf + off, len);
- (*env)->ReleasePrimitiveArrayCritical(env, b, buf, 0);
- switch (res) {
- case Z_OK:
- break;
- case Z_STREAM_ERROR:
- JNU_ThrowIllegalArgumentException(env, 0);
- break;
- default:
- JNU_ThrowInternalError(env, ((z_stream *)jlong_to_ptr(addr))->msg);
- break;
- }
-}
-
-JNIEXPORT jint JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
- jarray b, jint off, jint len, jint flush)
-{
- z_stream *strm = jlong_to_ptr(addr);
-
- jarray this_buf = (*env)->GetObjectField(env, this, bufID);
- jint this_off = (*env)->GetIntField(env, this, offID);
- jint this_len = (*env)->GetIntField(env, this, lenID);
- jbyte *in_buf;
- jbyte *out_buf;
- int res;
- if ((*env)->GetBooleanField(env, this, setParamsID)) {
- int level = (*env)->GetIntField(env, this, levelID);
- int strategy = (*env)->GetIntField(env, this, strategyID);
- in_buf = (*env)->GetPrimitiveArrayCritical(env, this_buf, 0);
- if (in_buf == NULL) {
- // Throw OOME only when length is not zero
- if (this_len != 0)
- JNU_ThrowOutOfMemoryError(env, 0);
- return 0;
- }
- out_buf = (*env)->GetPrimitiveArrayCritical(env, b, 0);
- if (out_buf == NULL) {
- (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0);
- if (len != 0)
- JNU_ThrowOutOfMemoryError(env, 0);
- return 0;
- }
-
- strm->next_in = (Bytef *) (in_buf + this_off);
- strm->next_out = (Bytef *) (out_buf + off);
- strm->avail_in = this_len;
- strm->avail_out = len;
- res = deflateParams(strm, level, strategy);
- (*env)->ReleasePrimitiveArrayCritical(env, b, out_buf, 0);
- (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0);
-
- switch (res) {
- case Z_OK:
- (*env)->SetBooleanField(env, this, setParamsID, JNI_FALSE);
- this_off += this_len - strm->avail_in;
- (*env)->SetIntField(env, this, offID, this_off);
- (*env)->SetIntField(env, this, lenID, strm->avail_in);
- return len - strm->avail_out;
- case Z_BUF_ERROR:
- (*env)->SetBooleanField(env, this, setParamsID, JNI_FALSE);
- return 0;
- default:
- JNU_ThrowInternalError(env, strm->msg);
- return 0;
- }
- } else {
- jboolean finish = (*env)->GetBooleanField(env, this, finishID);
- in_buf = (*env)->GetPrimitiveArrayCritical(env, this_buf, 0);
- if (in_buf == NULL) {
- if (this_len != 0)
- JNU_ThrowOutOfMemoryError(env, 0);
- return 0;
- }
- out_buf = (*env)->GetPrimitiveArrayCritical(env, b, 0);
- if (out_buf == NULL) {
- (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0);
- if (len != 0)
- JNU_ThrowOutOfMemoryError(env, 0);
-
- return 0;
- }
-
- strm->next_in = (Bytef *) (in_buf + this_off);
- strm->next_out = (Bytef *) (out_buf + off);
- strm->avail_in = this_len;
- strm->avail_out = len;
- res = deflate(strm, finish ? Z_FINISH : flush);
- (*env)->ReleasePrimitiveArrayCritical(env, b, out_buf, 0);
- (*env)->ReleasePrimitiveArrayCritical(env, this_buf, in_buf, 0);
-
- switch (res) {
- case Z_STREAM_END:
- (*env)->SetBooleanField(env, this, finishedID, JNI_TRUE);
- /* fall through */
- case Z_OK:
- this_off += this_len - strm->avail_in;
- (*env)->SetIntField(env, this, offID, this_off);
- (*env)->SetIntField(env, this, lenID, strm->avail_in);
- return len - strm->avail_out;
- case Z_BUF_ERROR:
- return 0;
- default:
- JNU_ThrowInternalError(env, strm->msg);
- return 0;
- }
- }
-}
-
-JNIEXPORT jint JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_getAdler(JNIEnv *env, jclass cls, jlong addr)
-{
- return ((z_stream *)jlong_to_ptr(addr))->adler;
-}
-
-JNIEXPORT jlong JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_getBytesRead(JNIEnv *env, jclass cls, jlong addr)
-{
- return ((z_stream *)jlong_to_ptr(addr))->total_in;
-}
-
-JNIEXPORT jlong JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_getBytesWritten(JNIEnv *env, jclass cls, jlong addr)
-{
- return ((z_stream *)jlong_to_ptr(addr))->total_out;
-}
-
-JNIEXPORT void JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_reset(JNIEnv *env, jclass cls, jlong addr)
-{
- if (deflateReset((z_stream *)jlong_to_ptr(addr)) != Z_OK) {
- JNU_ThrowInternalError(env, 0);
- }
-}
-
-JNIEXPORT void JNICALL
-Java_net_sf_samtools_util_zip_IntelDeflater_end(JNIEnv *env, jclass cls, jlong addr)
-{
- if (deflateEnd((z_stream *)jlong_to_ptr(addr)) == Z_STREAM_ERROR) {
- JNU_ThrowInternalError(env, 0);
- } else {
- free((z_stream *)jlong_to_ptr(addr));
- }
-}
diff --git a/src/java/net/sf/picard/PicardException.java b/src/java/net/sf/picard/PicardException.java
deleted file mode 100644
index 7c6c0ca..0000000
--- a/src/java/net/sf/picard/PicardException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard;
-
-import net.sf.samtools.SAMException;
-
-/**
- * Basic Picard runtime exception that, for now, does nothing much
- *
- * @author Kathleen Tibbetts
- */
-public class PicardException extends RuntimeException
-{
- public PicardException(final String message) {
- super(message);
- }
-
- public PicardException(final String message, final Throwable throwable) {
- super(message, throwable);
- }
-
-}
diff --git a/src/java/net/sf/picard/Test.java b/src/java/net/sf/picard/Test.java
deleted file mode 100644
index 1616dcc..0000000
--- a/src/java/net/sf/picard/Test.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.sf.picard;
-
-import net.sf.samtools.util.StopWatch;
-import net.sf.samtools.util.StringUtil;
-
-import java.util.StringTokenizer;
-import java.util.regex.Pattern;
-
-/**
- *
- */
-public class Test {
- private final String text = "C0A69ACXX111213:6:1101:10000:144257\t83\t5\t128984606\t60\t76M\t=\t128984542\t-140\tAGTGTTAGAACTTCCTCCCCAAAGCATATACTTCAGTGGCAAGCTGTCCTGGATGAAGGTATGACCAACCAGATCA\t at FFFEECC>EFHBJIGIFGIEIJJJIHED<IEHIGIIJIIIGJIGJIIIIIJGGCJIIGIHHHBHGHFFDFFFC@@\tXT:A:U\tNM:i:0\tSM:i:37\tAM:i:37\tX0:i:1\tX1:i:0\tXM:i:0\tXO:i:0\tXG:i:0\tMD:Z:76";
-
- public static void main(String[] args) {
- new Test().run();
- }
-
- public void run() {
- final int ITERATIONS = 1000000;
- final String[] fields = new String[10000];
- final StopWatch watch = new StopWatch();
-
- watch.start();
- for (int i=0; i<ITERATIONS; ++i) {
- if (StringUtil.split(text, fields, '\t') > 100) {
- System.out.println("Mama Mia that's a lot of tokens!!");
- }
- }
- watch.stop();
- System.out.println("StringUtil.split() took " + watch.getElapsedTime());
- watch.reset();
-
- watch.start();
- for (int i=0; i<ITERATIONS; ++i) {
- if (split(text, fields, "\t") > 100) {
- System.out.println("Mama Mia that's a lot of tokens!!");
- }
- }
- watch.stop();
- System.out.println("StringTokenizer took " + watch.getElapsedTime());
- }
-
- public int split(final String s, final String[] tokens, final String token) {
- final StringTokenizer tokenizer = new StringTokenizer(s, token, false);
- int i=0;
- while (tokenizer.hasMoreTokens()) {
- tokens[i++] = tokenizer.nextToken();
- }
-
- return i;
- }
-
-
-
-
-}
diff --git a/src/java/net/sf/picard/analysis/AlignmentSummaryMetrics.java b/src/java/net/sf/picard/analysis/AlignmentSummaryMetrics.java
deleted file mode 100644
index 4c0dbb5..0000000
--- a/src/java/net/sf/picard/analysis/AlignmentSummaryMetrics.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.picard.metrics.MultilevelMetrics;
-
-/**
- * High level metrics about the alignment of reads within a SAM file, produced by
- * the CollectAlignmentSummaryMetrics program and usually stored in a file with
- * the extension ".alignment_summary_metrics".
- */
-public class AlignmentSummaryMetrics extends MultilevelMetrics {
- public enum Category { UNPAIRED, FIRST_OF_PAIR, SECOND_OF_PAIR, PAIR }
-
- /**
- * One of either UNPAIRED (for a fragment run), FIRST_OF_PAIR when metrics are for only the
- * first read in a paired run, SECOND_OF_PAIR when the metrics are for only the second read
- * in a paired run or PAIR when the metrics are aggregated for both first and second reads
- * in a pair.
- */
- public Category CATEGORY;
-
- /**
- * The total number of reads including all PF and non-PF reads. When CATEGORY equals PAIR
- * this value will be 2x the number of clusters.
- */
- public long TOTAL_READS;
-
- /** The number of PF reads where PF is defined as passing Illumina's filter. */
- public long PF_READS;
-
- /** The percentage of reads that are PF (PF_READS / TOTAL_READS) */
- public double PCT_PF_READS;
-
- /**
- * The number of PF reads that are marked as noise reads. A noise read is one which is composed
- * entirely of A bases and/or N bases. These reads are marked as they are usually artifactual and
- * are of no use in downstream analysis.
- */
- public long PF_NOISE_READS;
-
- /**
- * The number of PF reads that were aligned to the reference sequence. This includes reads that
- * aligned with low quality (i.e. their alignments are ambiguous).
- */
- public long PF_READS_ALIGNED;
-
- /**
- * The percentage of PF reads that aligned to the reference sequence. PF_READS_ALIGNED / PF_READS
- */
- public double PCT_PF_READS_ALIGNED;
-
- /**
- * The total number of aligned bases, in all mapped PF reads, that are aligned to the reference sequence.
- */
- public long PF_ALIGNED_BASES;
-
- /**
- * The number of PF reads that were aligned to the reference sequence with a mapping quality of
- * Q20 or higher signifying that the aligner estimates a 1/100 (or smaller) chance that the
- * alignment is wrong.
- */
- public long PF_HQ_ALIGNED_READS;
-
- /**
- * The number of bases aligned to the reference sequence in reads that were mapped at high
- * quality. Will usually approximate PF_HQ_ALIGNED_READS * READ_LENGTH but may differ when
- * either mixed read lengths are present or many reads are aligned with gaps.
- */
- public long PF_HQ_ALIGNED_BASES;
-
- /**
- * The subset of PF_HQ_ALIGNED_BASES where the base call quality was Q20 or higher.
- */
- public long PF_HQ_ALIGNED_Q20_BASES;
-
- /**
- * The median number of mismatches versus the reference sequence in reads that were aligned
- * to the reference at high quality (i.e. PF_HQ_ALIGNED READS).
- */
- public double PF_HQ_MEDIAN_MISMATCHES;
-
- /**
- * The rate of bases mismatching the reference for all bases aligned to the reference sequence.
- */
- public double PF_MISMATCH_RATE;
-
- /**
- * The percentage of bases that mismatch the reference in PF HQ aligned reads.
- */
- public double PF_HQ_ERROR_RATE;
-
- /**
- * The number of insertion and deletion events per 100 aligned bases. Uses the number of events
- * as the numerator, not the number of inserted or deleted bases.
- */
- public double PF_INDEL_RATE;
-
- /**
- * The mean read length of the set of reads examined. When looking at the data for a single lane with
- * equal length reads this number is just the read length. When looking at data for merged lanes with
- * differing read lengths this is the mean read length of all reads.
- */
- public double MEAN_READ_LENGTH;
-
- /**
- * The number of aligned reads whose mate pair was also aligned to the reference.
- */
- public long READS_ALIGNED_IN_PAIRS;
-
- /**
- * The percentage of reads whose mate pair was also aligned to the reference.
- * READS_ALIGNED_IN_PAIRS / PF_READS_ALIGNED
- */
- public double PCT_READS_ALIGNED_IN_PAIRS;
-
- /**
- * The number of instrument cycles in which 80% or more of base calls were no-calls.
- */
- public long BAD_CYCLES;
-
- /**
- * The number of PF reads aligned to the positive strand of the genome divided by the number of
- * PF reads aligned to the genome.
- */
- public double STRAND_BALANCE;
-
- /**
- * The percentage of reads that map outside of a maximum insert size (usually 100kb) or that have
- * the two ends mapping to different chromosomes.
- */
- public double PCT_CHIMERAS;
-
- /**
- * The percentage of PF reads that are unaligned and match to a known adapter sequence right from the
- * start of the read.
- */
- public double PCT_ADAPTER;
-
-}
diff --git a/src/java/net/sf/picard/analysis/AlignmentSummaryMetricsCollector.java b/src/java/net/sf/picard/analysis/AlignmentSummaryMetricsCollector.java
deleted file mode 100644
index a22f958..0000000
--- a/src/java/net/sf/picard/analysis/AlignmentSummaryMetricsCollector.java
+++ /dev/null
@@ -1,385 +0,0 @@
-package net.sf.picard.analysis;
-
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.metrics.PerUnitMetricCollector;
-import net.sf.picard.metrics.SAMRecordAndReference;
-import net.sf.picard.metrics.SAMRecordAndReferenceMultiLevelCollector;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.sam.ReservedTagConstants;
-import net.sf.picard.util.Histogram;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CoordMath;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class AlignmentSummaryMetricsCollector extends SAMRecordAndReferenceMultiLevelCollector<AlignmentSummaryMetrics, Comparable<?>> {
- // If we have a reference sequence, collect metrics on how well we aligned to it
- private final boolean doRefMetrics;
-
- //the adapter sequences converted to byte arrays
- private final byte[][] adapterKmers;
-
- //A list of Strings representing the sequence of bases in an adapter
- private final List<String> adapterSequence;
-
- //Paired end reads above this insert size will be considered chimeric along with inter-chromosomal pairs.
- private final int maxInsertSize;
-
-
- //Whether the SAM or BAM file consists of bisulfite sequenced reads.
- private final boolean isBisulfiteSequenced;
-
- //The minimum mapping quality a base has to meet in order to be considered high quality
- private final int MAPPING_QUALITY_THRESOLD = 20;
-
- //The minimum quality a base has to meet in order to be consider hq_20
- private final static int BASE_QUALITY_THRESHOLD = 20;
-
- //The number of bases to check in order to map a read to an adapter
- private static final int ADAPTER_MATCH_LENGTH = 16;
-
- // The maximum number of mismatches a read can have and still be considered as matching an adapter
- private static final int MAX_ADAPTER_ERRORS = 1;
-
- public AlignmentSummaryMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
- final boolean doRefMetrics, final List<String> adapterSequence, final int maxInsertSize, boolean isBisulfiteSequenced) {
- this.doRefMetrics = doRefMetrics;
- this.adapterSequence = adapterSequence;
- this.adapterKmers = prepareAdapterSequences();
- this.maxInsertSize = maxInsertSize;
- this.isBisulfiteSequenced = isBisulfiteSequenced;
- setup(accumulationLevels, samRgRecords);
- }
-
- @Override
- protected PerUnitMetricCollector<AlignmentSummaryMetrics, Comparable<?>, SAMRecordAndReference> makeChildCollector(String sample, String library, String readGroup) {
- return new GroupAlignmentSummaryMetricsPerUnitMetricCollector(sample, library, readGroup);
- }
-
- @Override
- public void acceptRecord(final SAMRecord rec, final ReferenceSequence ref) {
- if (!rec.isSecondaryOrSupplementary()) {
- super.acceptRecord(rec, ref);
- }
- }
-
- /** Converts the supplied adapter sequences to byte arrays in both fwd and rc. */
- private byte [][] prepareAdapterSequences() {
- final Set<String> kmers = new HashSet<String>();
-
- // Make a set of all kmers of adapterMatchLength
- for (final String seq : adapterSequence) {
- for (int i=0; i<=seq.length() - ADAPTER_MATCH_LENGTH; ++i) {
- final String kmer = seq.substring(i, i+ADAPTER_MATCH_LENGTH).toUpperCase();
-
- int ns = 0;
- for (final char ch : kmer.toCharArray()) if (ch == 'N') ++ns;
- if (ns <= MAX_ADAPTER_ERRORS) {
- kmers.add(kmer);
- kmers.add(SequenceUtil.reverseComplement(kmer));
- }
- }
- }
-
- // Make an array of byte[] for the kmers
- final byte [][] adapterKmers = new byte[kmers.size()][];
- int i=0;
- for (final String kmer : kmers) {
- adapterKmers[i++] = StringUtil.stringToBytes(kmer);
- }
- return adapterKmers;
- }
-
- /**
- * Checks the first ADAPTER_MATCH_LENGTH bases of the read against known adapter sequences and returns
- * true if the read matches an adapter sequence with MAX_ADAPTER_ERRORS mismsatches or fewer.
- *
- * @param read the basecalls for the read in the order and orientation the machine read them
- * @return true if the read matches an adapter and false otherwise
- */
- private boolean isAdapterSequence(final byte[] read) {
- if (read.length < ADAPTER_MATCH_LENGTH) return false;
-
- for (final byte[] adapter : adapterKmers) {
- int errors = 0;
-
- for (int i=0; i<adapter.length; ++i) {
- if (read[i] != adapter[i]) {
- if (++errors > MAX_ADAPTER_ERRORS) break;
- }
- }
-
- if (errors <= MAX_ADAPTER_ERRORS) return true;
- }
-
- return false;
- }
-
- private class GroupAlignmentSummaryMetricsPerUnitMetricCollector implements PerUnitMetricCollector<AlignmentSummaryMetrics, Comparable<?>, SAMRecordAndReference> {
- final IndividualAlignmentSummaryMetricsCollector unpairedCollector;
- final IndividualAlignmentSummaryMetricsCollector firstOfPairCollector;
- final IndividualAlignmentSummaryMetricsCollector secondOfPairCollector;
- final IndividualAlignmentSummaryMetricsCollector pairCollector;
- final String sample;
- final String library;
- final String readGroup;
-
- public GroupAlignmentSummaryMetricsPerUnitMetricCollector(final String sample, final String library, final String readGroup) {
- this.sample = sample;
- this.library = library;
- this.readGroup = readGroup;
- unpairedCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.UNPAIRED, sample, library, readGroup);
- firstOfPairCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.FIRST_OF_PAIR, sample, library, readGroup);
- secondOfPairCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.SECOND_OF_PAIR, sample, library, readGroup);
- pairCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.PAIR, sample, library, readGroup);
- }
-
- public void acceptRecord(final SAMRecordAndReference args) {
- final SAMRecord rec = args.getSamRecord();
- final ReferenceSequence ref = args.getReferenceSequence();
-
- if (rec.getReadPairedFlag()) {
- if (rec.getFirstOfPairFlag()) {
- firstOfPairCollector.addRecord(rec, ref);
- }
- else {
- secondOfPairCollector.addRecord(rec, ref);
- }
-
- pairCollector.addRecord(rec, ref);
- }
- else {
- unpairedCollector.addRecord(rec, ref);
- }
- }
-
- @Override
- public void finish() {
- // Let the collectors do any summary computations etc.
- unpairedCollector.onComplete();
- firstOfPairCollector.onComplete();
- secondOfPairCollector.onComplete();
- pairCollector.onComplete();
- }
-
- @Override
- public void addMetricsToFile(final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> file) {
- if (firstOfPairCollector.getMetrics().TOTAL_READS > 0) {
- // override how bad cycle is determined for paired reads, it should be
- // the sum of first and second reads
- pairCollector.getMetrics().BAD_CYCLES = firstOfPairCollector.getMetrics().BAD_CYCLES +
- secondOfPairCollector.getMetrics().BAD_CYCLES;
-
- file.addMetric(firstOfPairCollector.getMetrics());
- file.addMetric(secondOfPairCollector.getMetrics());
- file.addMetric(pairCollector.getMetrics());
- }
-
- //if there are no reads in any category then we will returned an unpaired alignment summary metric with all zero values
- if (unpairedCollector.getMetrics().TOTAL_READS > 0 || firstOfPairCollector.getMetrics().TOTAL_READS == 0) {
- file.addMetric(unpairedCollector.getMetrics());
- }
- }
-
- /**
- * Class that counts reads that match various conditions
- */
- private class IndividualAlignmentSummaryMetricsCollector {
- private long numPositiveStrand = 0;
- private final Histogram<Integer> readLengthHistogram = new Histogram<Integer>();
- private AlignmentSummaryMetrics metrics;
- private long chimeras;
- private long chimerasDenominator;
- private long adapterReads;
- private long indels;
-
- private long nonBisulfiteAlignedBases = 0;
- private long hqNonBisulfiteAlignedBases = 0;
- private final Histogram<Long> mismatchHistogram = new Histogram<Long>();
- private final Histogram<Long> hqMismatchHistogram = new Histogram<Long>();
- private final Histogram<Integer> badCycleHistogram = new Histogram<Integer>();
-
- public IndividualAlignmentSummaryMetricsCollector(final AlignmentSummaryMetrics.Category pairingCategory,
- final String sample,
- final String library,
- final String readGroup) {
- metrics = new AlignmentSummaryMetrics();
- metrics.CATEGORY = pairingCategory;
- metrics.SAMPLE = sample;
- metrics.LIBRARY = library;
- metrics.READ_GROUP = readGroup;
- }
-
- public void addRecord(final SAMRecord record, final ReferenceSequence ref) {
- if (record.isSecondaryOrSupplementary()) {
- // only want 1 count per read so skip non primary alignments
- return;
- }
-
- collectReadData(record, ref);
- collectQualityData(record, ref);
- }
-
- public void onComplete() {
- //summarize read data
- if (metrics.TOTAL_READS > 0)
- {
- metrics.PCT_PF_READS = (double) metrics.PF_READS / (double) metrics.TOTAL_READS;
- metrics.PCT_ADAPTER = this.adapterReads / (double) metrics.PF_READS;
- metrics.MEAN_READ_LENGTH = readLengthHistogram.getMean();
-
- //Calculate BAD_CYCLES
- metrics.BAD_CYCLES = 0;
- for (final Histogram<Integer>.Bin cycleBin : badCycleHistogram.values()) {
- final double badCyclePercentage = cycleBin.getValue() / metrics.TOTAL_READS;
- if (badCyclePercentage >= .8) {
- metrics.BAD_CYCLES++;
- }
- }
-
- if(doRefMetrics) {
- if (metrics.PF_READS > 0) metrics.PCT_PF_READS_ALIGNED = (double) metrics.PF_READS_ALIGNED / (double) metrics.PF_READS;
- if (metrics.PF_READS_ALIGNED > 0) metrics.PCT_READS_ALIGNED_IN_PAIRS = (double) metrics.READS_ALIGNED_IN_PAIRS/ (double) metrics.PF_READS_ALIGNED;
- if (metrics.PF_READS_ALIGNED > 0) metrics.STRAND_BALANCE = numPositiveStrand / (double) metrics.PF_READS_ALIGNED;
- if (this.chimerasDenominator > 0) metrics.PCT_CHIMERAS = this.chimeras / (double) this.chimerasDenominator;
-
- if (nonBisulfiteAlignedBases > 0) metrics.PF_MISMATCH_RATE = mismatchHistogram.getSum() / (double) nonBisulfiteAlignedBases;
- metrics.PF_HQ_MEDIAN_MISMATCHES = hqMismatchHistogram.getMedian();
- if (hqNonBisulfiteAlignedBases > 0) metrics.PF_HQ_ERROR_RATE = hqMismatchHistogram.getSum() / (double) hqNonBisulfiteAlignedBases;
- if (metrics.PF_ALIGNED_BASES > 0) metrics.PF_INDEL_RATE = this.indels / (double) metrics.PF_ALIGNED_BASES;
- }
- }
- }
-
- private void collectReadData(final SAMRecord record, final ReferenceSequence ref) {
- metrics.TOTAL_READS++;
- readLengthHistogram.increment(record.getReadBases().length);
-
- if (!record.getReadFailsVendorQualityCheckFlag()) {
- metrics.PF_READS++;
- if (isNoiseRead(record)) metrics.PF_NOISE_READS++;
-
- if (record.getReadUnmappedFlag()) {
- // If the read is unmapped see if it's adapter sequence
- final byte[] readBases = record.getReadBases();
- if (!(record instanceof BAMRecord)) StringUtil.toUpperCase(readBases);
-
- if (isAdapterSequence(readBases)) {
- this.adapterReads++;
- }
- }
- else if(doRefMetrics) {
- metrics.PF_READS_ALIGNED++;
- if (!record.getReadNegativeStrandFlag()) numPositiveStrand++;
-
- if (record.getReadPairedFlag() && !record.getMateUnmappedFlag()) {
- metrics.READS_ALIGNED_IN_PAIRS++;
-
- // Check that both ends have mapq > minimum
- final Integer mateMq = record.getIntegerAttribute("MQ");
- if (mateMq == null || mateMq >= MAPPING_QUALITY_THRESOLD && record.getMappingQuality() >= MAPPING_QUALITY_THRESOLD) {
- ++this.chimerasDenominator;
-
- // With both reads mapped we can see if this pair is chimeric
- if (Math.abs(record.getInferredInsertSize()) > maxInsertSize ||
- !record.getReferenceIndex().equals(record.getMateReferenceIndex())) {
- ++this.chimeras;
- }
- }
- }
- }
- }
- }
-
- private void collectQualityData(final SAMRecord record, final ReferenceSequence reference) {
- // If the read isnt an aligned PF read then look at the read for no-calls
- if (record.getReadUnmappedFlag() || record.getReadFailsVendorQualityCheckFlag() || !doRefMetrics) {
- final byte[] readBases = record.getReadBases();
- for (int i = 0; i < readBases.length; i++) {
- if (SequenceUtil.isNoCall(readBases[i])) {
- badCycleHistogram.increment(CoordMath.getCycle(record.getReadNegativeStrandFlag(), readBases.length, i));
- }
- }
- }
- else if (!record.getReadFailsVendorQualityCheckFlag()) {
- final boolean highQualityMapping = isHighQualityMapping(record);
- if (highQualityMapping) metrics.PF_HQ_ALIGNED_READS++;
-
- final byte[] readBases = record.getReadBases();
- final byte[] refBases = reference.getBases();
- final byte[] qualities = record.getBaseQualities();
- final int refLength = refBases.length;
- long mismatchCount = 0;
- long hqMismatchCount = 0;
-
- for (final AlignmentBlock alignmentBlock : record.getAlignmentBlocks()) {
- final int readIndex = alignmentBlock.getReadStart() - 1;
- final int refIndex = alignmentBlock.getReferenceStart() - 1;
- final int length = alignmentBlock.getLength();
-
- for (int i=0; i<length && refIndex+i<refLength; ++i) {
- final int readBaseIndex = readIndex + i;
- boolean mismatch = !SequenceUtil.basesEqual(readBases[readBaseIndex], refBases[refIndex+i]);
- boolean bisulfiteBase = false;
- if (mismatch && isBisulfiteSequenced) {
- if ( (record.getReadNegativeStrandFlag() &&
- (refBases[refIndex+i] == 'G' || refBases[refIndex+i] =='g') &&
- (readBases[readBaseIndex] == 'A' || readBases[readBaseIndex] == 'a'))
- || ((!record.getReadNegativeStrandFlag()) &&
- (refBases[refIndex+i] == 'C' || refBases[refIndex+i] == 'c') &&
- (readBases[readBaseIndex] == 'T') || readBases[readBaseIndex] == 't') ) {
-
- bisulfiteBase = true;
- mismatch = false;
- }
- }
-
- if(mismatch) mismatchCount++;
-
- metrics.PF_ALIGNED_BASES++;
- if(!bisulfiteBase) nonBisulfiteAlignedBases++;
-
- if (highQualityMapping) {
- metrics.PF_HQ_ALIGNED_BASES++;
- if (!bisulfiteBase) hqNonBisulfiteAlignedBases++;
- if (qualities[readBaseIndex] >= BASE_QUALITY_THRESHOLD) metrics.PF_HQ_ALIGNED_Q20_BASES++;
- if (mismatch) hqMismatchCount++;
- }
-
- if (mismatch || SequenceUtil.isNoCall(readBases[readBaseIndex])) {
- badCycleHistogram.increment(CoordMath.getCycle(record.getReadNegativeStrandFlag(), readBases.length, i));
- }
- }
- }
-
- mismatchHistogram.increment(mismatchCount);
- hqMismatchHistogram.increment(hqMismatchCount);
-
- // Add any insertions and/or deletions to the global count
- for (final CigarElement elem : record.getCigar().getCigarElements()) {
- final CigarOperator op = elem.getOperator();
- if (op == CigarOperator.INSERTION || op == CigarOperator.DELETION) ++ this.indels;
- }
- }
- }
-
- private boolean isNoiseRead(final SAMRecord record) {
- final Object noiseAttribute = record.getAttribute(ReservedTagConstants.XN);
- return (noiseAttribute != null && noiseAttribute.equals(1));
- }
-
- private boolean isHighQualityMapping(final SAMRecord record) {
- return !record.getReadFailsVendorQualityCheckFlag() &&
- record.getMappingQuality() >= MAPPING_QUALITY_THRESOLD;
- }
-
- public AlignmentSummaryMetrics getMetrics() {
- return this.metrics;
- }
- }
- }
-}
diff --git a/src/java/net/sf/picard/analysis/CollectAlignmentSummaryMetrics.java b/src/java/net/sf/picard/analysis/CollectAlignmentSummaryMetrics.java
deleted file mode 100644
index 5bc4db0..0000000
--- a/src/java/net/sf/picard/analysis/CollectAlignmentSummaryMetrics.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.*;
-import net.sf.picard.util.IlluminaUtil;
-import net.sf.picard.util.Log;
-import net.sf.samtools.*;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * A command line tool to read a BAM file and produce standard alignment metrics that would be applicable to any alignment.
- * Metrics to include, but not limited to:
- * <ul>
- * <li>Total number of reads (total, period, no exclusions)</li>
- * <li>Total number of PF reads (PF == does not fail vendor check flag)</li>
- * <li>Number of PF noise reads (does not fail vendor check and has noise attr set)</li>
- * <li>Total aligned PF reads (any PF read that has a sequence and position)</li>
- * <li>High quality aligned PF reads (high quality == mapping quality >= 20)</li>
- * <li>High quality aligned PF bases (actual aligned bases, calculate off alignment blocks)</li>
- * <li>High quality aligned PF Q20 bases (subset of above where base quality >= 20)</li>
- * <li>Median mismatches in HQ aligned PF reads (how many aligned bases != ref on average)</li>
- * <li>Reads aligned in pairs (vs. reads aligned with mate unaligned/not present)</li>
- * <li>Read length (how to handle mixed lengths?)</li>
- * <li>Bad Cycles - how many machine cycles yielded combined no-call and mismatch rates of >= 80%</li>
- * <li>Strand balance - reads mapped to positive strand / total mapped reads</li>
- * </ul>
- * Metrics are written for the first read of a pair, the second read, and combined for the pair.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class CollectAlignmentSummaryMetrics extends SinglePassSamProgram {
-
- private static final Log log = Log.getInstance(CollectAlignmentSummaryMetrics.class);
-
- // Usage and parameters
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Reads a SAM or BAM file and writes a file containing summary alignment metrics.\n";
-
- @Option(doc="Paired end reads above this insert size will be considered chimeric along with inter-chromosomal pairs.")
- public int MAX_INSERT_SIZE = 100000;
-
- @Option(doc="List of adapter sequences to use when processing the alignment metrics")
- public List<String> ADAPTER_SEQUENCE = CollectionUtil.makeList(
- IlluminaUtil.IlluminaAdapterPair.SINGLE_END.get5PrimeAdapter(),
- IlluminaUtil.IlluminaAdapterPair.SINGLE_END.get3PrimeAdapter(),
- IlluminaUtil.IlluminaAdapterPair.PAIRED_END.get5PrimeAdapter(),
- IlluminaUtil.IlluminaAdapterPair.PAIRED_END.get3PrimeAdapter(),
- IlluminaUtil.IlluminaAdapterPair.INDEXED.get5PrimeAdapter(),
- IlluminaUtil.IlluminaAdapterPair.INDEXED.get3PrimeAdapter()
- );
-
- @Option(shortName="LEVEL", doc="The level(s) at which to accumulate metrics. ")
- private Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
-
- @Option(shortName="BS", doc="Whether the SAM or BAM file consists of bisulfite sequenced reads. ")
- public boolean IS_BISULFITE_SEQUENCED = false;
-
- private AlignmentSummaryMetricsCollector collector;
-
- /** Required main method implementation. */
- public static void main(final String[] argv) {
- new CollectAlignmentSummaryMetrics().instanceMainWithExit(argv);
- }
-
- /** Silly method that is necessary to give unit test access to call doWork() */
- protected final int testDoWork() { return doWork(); }
-
- @Override protected void setup(final SAMFileHeader header, final File samFile) {
- IoUtil.assertFileIsWritable(OUTPUT);
-
- if (header.getSequenceDictionary().isEmpty()) {
- log.warn(INPUT.getAbsoluteFile() + " has no sequence dictionary. If any reads " +
- "in the file are aligned then alignment summary metrics collection will fail.");
- }
-
- final boolean doRefMetrics = REFERENCE_SEQUENCE != null;
- collector = new AlignmentSummaryMetricsCollector(METRIC_ACCUMULATION_LEVEL, header.getReadGroups(), doRefMetrics,
- ADAPTER_SEQUENCE, MAX_INSERT_SIZE, IS_BISULFITE_SEQUENCED);
- }
-
- @Override protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
- collector.acceptRecord(rec, ref);
- }
-
- @Override protected void finish() {
- collector.finish();
-
- final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> file = getMetricsFile();
- collector.addAllLevelsToFile(file);
-
- file.write(OUTPUT);
- }
-}
diff --git a/src/java/net/sf/picard/analysis/CollectGcBiasMetrics.java b/src/java/net/sf/picard/analysis/CollectGcBiasMetrics.java
deleted file mode 100644
index 658f36e..0000000
--- a/src/java/net/sf/picard/analysis/CollectGcBiasMetrics.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.reference.ReferenceSequenceFileFactory;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.*;
-import net.sf.samtools.*;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.util.*;
-import java.text.NumberFormat;
-
-/**
- * Tool to collect information about GC bias in the reads in a given BAM file. Computes
- * the number of windows (of size specified by WINDOW_SIZE) in the genome at each GC%
- * and counts the number of read starts in each GC bin. What is output and plotted is
- * the "normalized coverage" in each bin - i.e. the number of reads per window normalized
- * to the average number of reads per window across the whole genome.
- *
- * @author Tim Fennell
- */
-public class CollectGcBiasMetrics extends CommandLineProgram {
- /** The location of the R script to do the plotting. */
- private static final String R_SCRIPT = "net/sf/picard/analysis/gcBias.R";
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc="The reference sequence fasta file.")
- public File REFERENCE_SEQUENCE;
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The BAM or SAM file containing aligned reads. " +
- "Must be coordinate-sorted.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The text file to write the metrics table to.")
- public File OUTPUT;
-
- @Option(shortName="CHART", doc="The PDF file to render the chart to.")
- public File CHART_OUTPUT;
-
- @Option(shortName="S", doc="The text file to write summary metrics to.", optional=true)
- public File SUMMARY_OUTPUT;
-
- @Option(doc="The size of windows on the genome that are used to bin reads.")
- public int WINDOW_SIZE = 100;
-
- @Option(doc="For summary metrics, exclude GC windows that include less than this fraction of the genome.")
- public double MINIMUM_GENOME_FRACTION = 0.00001;
-
- @Option(doc="If true, assume that the input file is coordinate sorted, even if the header says otherwise.",
- shortName=StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
- public boolean ASSUME_SORTED = false;
-
- @Option(shortName="BS", doc="Whether the SAM or BAM file consists of bisulfite sequenced reads. ")
- public boolean IS_BISULFITE_SEQUENCED = false;
-
- private static final Log log = Log.getInstance(CollectGcBiasMetrics.class);
-
- // Used to keep track of the total clusters as this is kinda important for bias
- private int totalClusters = 0;
- private int totalAlignedReads = 0;
-
- /** Stock main method. */
- public static void main(final String[] args) {
- System.exit(new CollectGcBiasMetrics().instanceMain(args));
- }
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
- IoUtil.assertFileIsWritable(CHART_OUTPUT);
- if (SUMMARY_OUTPUT != null) IoUtil.assertFileIsWritable(SUMMARY_OUTPUT);
-
- // Histograms to track the number of windows at each GC, and the number of read starts
- // at windows of each GC
- final int[] windowsByGc = new int[101];
- final int[] readsByGc = new int[101];
- final long[] basesByGc = new long[101];
- final long[] errorsByGc = new long[101];
-
- final SAMFileReader sam = new SAMFileReader(INPUT);
-
- if (!ASSUME_SORTED && sam.getFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
- throw new PicardException("Header of input file " + INPUT.getAbsolutePath() + " indicates that it is not coordinate sorted. " +
- "If you believe the records are in coordinate order, pass option ASSUME_SORTED=true. If not, sort the file with SortSam.");
- }
- final PeekableIterator<SAMRecord> iterator = new PeekableIterator<SAMRecord>(sam.iterator());
- final ReferenceSequenceFile referenceFile = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
-
- {
- // Check that the sequence dictionaries match if present
- final SAMSequenceDictionary referenceDictionary= referenceFile.getSequenceDictionary();
- final SAMSequenceDictionary samFileDictionary = sam.getFileHeader().getSequenceDictionary();
- if (referenceDictionary != null && samFileDictionary != null) {
- SequenceUtil.assertSequenceDictionariesEqual(referenceDictionary, samFileDictionary);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Loop over the reference and the reads and calculate the basic metrics
- ////////////////////////////////////////////////////////////////////////////
- ReferenceSequence ref = null;
- final ProgressLogger progress = new ProgressLogger(log);
- while ((ref = referenceFile.nextSequence()) != null) {
- final byte[] refBases = ref.getBases();
- StringUtil.toUpperCase(refBases);
- final int refLength = refBases.length;
- final int lastWindowStart = refLength - WINDOW_SIZE;
-
- final byte[] gc = calculateAllGcs(refBases, windowsByGc, lastWindowStart);
- while (iterator.hasNext() && iterator.peek().getReferenceIndex() == ref.getContigIndex()) {
- final SAMRecord rec = iterator.next();
-
- if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) ++this.totalClusters;
-
- if (!rec.getReadUnmappedFlag()) {
- final int pos = rec.getReadNegativeStrandFlag() ? rec.getAlignmentEnd() - WINDOW_SIZE : rec.getAlignmentStart();
- ++this.totalAlignedReads;
-
- if (pos > 0) {
- final int windowGc = gc[pos];
-
- if (windowGc >= 0) {
- ++readsByGc[windowGc];
- basesByGc[windowGc] += rec.getReadLength();
- errorsByGc[windowGc] +=
- SequenceUtil.countMismatches(rec, refBases, IS_BISULFITE_SEQUENCED) +
- SequenceUtil.countInsertedBases(rec) + SequenceUtil.countDeletedBases(rec);
- }
- }
- }
-
- progress.record(rec);
- }
-
- log.info("Processed reference sequence: " + ref.getName());
- }
-
- // Finish up the reads, presumably all unaligned
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) ++this.totalClusters;
-
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // Synthesize the normalized coverage metrics and write it all out to a file
- /////////////////////////////////////////////////////////////////////////////
- final MetricsFile<GcBiasDetailMetrics,?> metricsFile = getMetricsFile();
- final double totalWindows = sum(windowsByGc);
- final double totalReads = sum(readsByGc);
- final double meanReadsPerWindow = totalReads / totalWindows;
- final double minimumWindowsToCountInSummary = totalWindows * this.MINIMUM_GENOME_FRACTION;
-
- for (int i=0; i<windowsByGc.length; ++i) {
- if (windowsByGc[i] == 0) continue;
-
- GcBiasDetailMetrics m = new GcBiasDetailMetrics();
- m.GC = i;
- m.WINDOWS = windowsByGc[i];
- m.READ_STARTS = readsByGc[i];
- if (errorsByGc[i] > 0) m.MEAN_BASE_QUALITY = QualityUtil.getPhredScoreFromObsAndErrors(basesByGc[i], errorsByGc[i]);
- m.NORMALIZED_COVERAGE = (m.READ_STARTS / (double) m.WINDOWS) / meanReadsPerWindow;
- m.ERROR_BAR_WIDTH = (Math.sqrt(m.READ_STARTS) / (double) m.WINDOWS) / meanReadsPerWindow;
-
- metricsFile.addMetric(m);
- }
-
- metricsFile.write(OUTPUT);
-
- // Synthesize the high level metrics
- if (SUMMARY_OUTPUT != null) {
- final MetricsFile<GcBiasSummaryMetrics,?> summaryMetricsFile = getMetricsFile();
- final GcBiasSummaryMetrics summary = new GcBiasSummaryMetrics();
- summary.WINDOW_SIZE = this.WINDOW_SIZE;
- summary.TOTAL_CLUSTERS = this.totalClusters;
- summary.ALIGNED_READS = this.totalAlignedReads;
- calculateDropoutMetrics(metricsFile.getMetrics(), summary);
-
- summaryMetricsFile.addMetric(summary);
- summaryMetricsFile.write(SUMMARY_OUTPUT);
- }
-
- // Plot the results
- final NumberFormat fmt = NumberFormat.getIntegerInstance();
- fmt.setGroupingUsed(true);
- final String subtitle = "Total clusters: " + fmt.format(this.totalClusters) +
- ", Aligned reads: " + fmt.format(this.totalAlignedReads);
- String title = INPUT.getName().replace(".duplicates_marked", "").replace(".aligned.bam", "");
-
- // Qualify the title with the library name iff it's for a single sample
- final List<SAMReadGroupRecord> readGroups = sam.getFileHeader().getReadGroups();
- if (readGroups.size() == 1) {
- title += "." + readGroups.get(0).getLibrary();
- }
- RExecutor.executeFromClasspath(R_SCRIPT,
- OUTPUT.getAbsolutePath(),
- CHART_OUTPUT.getAbsolutePath(),
- title,
- subtitle,
- String.valueOf(WINDOW_SIZE));
-
- return 0;
- }
-
-
- /** Sums the values in an int[]. */
- private double sum(final int[] values) {
- final int length = values.length;
- double total = 0;
- for (int i=0; i<length; ++i) {
- total += values[i];
- }
-
- return total;
- }
-
- /** Calculates the Illumina style AT and GC dropout numbers. */
- private void calculateDropoutMetrics(final Collection<GcBiasDetailMetrics> details,
- final GcBiasSummaryMetrics summary) {
- // First calculate the totals
- double totalReads = 0;
- double totalWindows = 0;
-
- for (final GcBiasDetailMetrics detail : details) {
- totalReads += detail.READ_STARTS;
- totalWindows += detail.WINDOWS;
- }
-
- double atDropout = 0;
- double gcDropout = 0;
-
- for (final GcBiasDetailMetrics detail : details) {
- final double relativeReads = detail.READ_STARTS / totalReads;
- final double relativeWindows = detail.WINDOWS / totalWindows;
- final double dropout = (relativeWindows - relativeReads) * 100;
-
- if (dropout > 0) {
- if (detail.GC <= 50) atDropout += dropout;
- if (detail.GC >= 50) gcDropout += dropout;
- }
- }
-
- summary.AT_DROPOUT = atDropout;
- summary.GC_DROPOUT = gcDropout;
- }
-
- /** Calculcate all the GC values for all windows. */
- private byte[] calculateAllGcs(final byte [] refBases, final int [] windowsByGc, final int lastWindowStart) {
- final int refLength = refBases.length;
- final byte[] gc = new byte[refLength + 1];
- final CalculateGcState state = new CalculateGcState();
- for (int i=1; i<lastWindowStart; ++i) {
- final int windowEnd = i + WINDOW_SIZE;
- final int windowGc = calculateGc(refBases, i, windowEnd, state) ;
- gc[i] = (byte) windowGc;
- if (windowGc != -1) windowsByGc[windowGc]++;
- }
- return gc;
- }
-
- /**
- * Calculates GC as a number from 0 to 100 in the specified window. If the window includes
- * more than five no-calls then -1 is returned.
- */
- private int calculateGc(final byte[] bases, final int startIndex, final int endIndex, final CalculateGcState state) {
- if (state.init) {
- state.init = false ;
- state.gcCount = 0;
- state.nCount = 0;
- for (int i=startIndex; i<endIndex; ++i) {
- final byte base = bases[i];
- if (base == 'G' || base == 'C') ++state.gcCount;
- else if (base == 'N') ++state.nCount;
- }
- } else {
- final byte newBase = bases[endIndex-1];
- if (newBase == 'G' || newBase == 'C') ++state.gcCount;
- else if (newBase == 'N') ++state.nCount;
-
- if (state.priorBase == 'G' || state.priorBase == 'C') --state.gcCount;
- else if (state.priorBase == 'N') --state.nCount;
- }
- state.priorBase = bases[startIndex];
- if (state.nCount > 4) return -1;
- else return (state.gcCount * 100) / (endIndex - startIndex);
- }
-
- /** Keeps track of current GC calculation state. */
- class CalculateGcState {
- boolean init = true ;
- int nCount ;
- int gcCount ;
- byte priorBase ;
- }
-}
diff --git a/src/java/net/sf/picard/analysis/CollectInsertSizeMetrics.java b/src/java/net/sf/picard/analysis/CollectInsertSizeMetrics.java
deleted file mode 100644
index 0c2fc75..0000000
--- a/src/java/net/sf/picard/analysis/CollectInsertSizeMetrics.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import java.io.File;
-import java.util.*;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.analysis.directed.InsertSizeMetricsCollector;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.RExecutor;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMRecord;
-
-/**
- * Command line program to read non-duplicate insert sizes, create a histogram
- * and report distribution statistics.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class CollectInsertSizeMetrics extends SinglePassSamProgram {
- private static final Log log = Log.getInstance(CollectInsertSizeMetrics.class);
- private static final String HISTOGRAM_R_SCRIPT = "net/sf/picard/analysis/insertSizeHistogram.R";
- // Usage and parameters
- @Usage
- public String USAGE = getStandardUsagePreamble() +
- "Reads a SAM or BAM file and writes a file containing metrics about " +
- "the statistical distribution of insert size (excluding duplicates) " +
- "and generates a histogram plot.\n";
-
- @Option(shortName="H", doc="File to write insert size histogram chart to.")
- public File HISTOGRAM_FILE;
-
- @Option(doc="Generate mean, sd and plots by trimming the data down to MEDIAN + DEVIATIONS*MEDIAN_ABSOLUTE_DEVIATION. " +
- "This is done because insert size data typically includes enough anomalous values from chimeras and other " +
- "artifacts to make the mean and sd grossly misleading regarding the real distribution.")
- public double DEVIATIONS = 10;
-
- @Option(shortName="W", doc="Explicitly sets the histogram width, overriding automatic truncation of histogram tail. " +
- "Also, when calculating mean and standard deviation, only bins <= HISTOGRAM_WIDTH will be included.", optional=true)
- public Integer HISTOGRAM_WIDTH = null;
-
- @Option(shortName="M", doc="When generating the histogram, discard any data categories (out of FR, TANDEM, RF) that have fewer than this " +
- "percentage of overall reads. (Range: 0 to 1).")
- public float MINIMUM_PCT = 0.05f;
-
- @Option(shortName="LEVEL", doc="The level(s) at which to accumulate metrics. ")
- private Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
-
- // Calculates InsertSizeMetrics for all METRIC_ACCUMULATION_LEVELs provided
- private InsertSizeMetricsCollector multiCollector;
-
- /** Required main method implementation. */
- public static void main(final String[] argv) {
- new CollectInsertSizeMetrics().instanceMainWithExit(argv);
- }
-
- /**
- * Put any custom command-line validation in an override of this method.
- * clp is initialized at this point and can be used to print usage and access argv.
- * Any options set by command-line parser can be validated.
- *
- * @return null if command line is valid. If command line is invalid, returns an array of error message
- * to be written to the appropriate place.
- */
- @Override
- protected String[] customCommandLineValidation() {
- if (MINIMUM_PCT < 0 || MINIMUM_PCT > 0.5) {
- return new String[]{"MINIMUM_PCT was set to " + MINIMUM_PCT + ". It must be between 0 and 0.5 so all data categories don't get discarded."};
- }
-
- return super.customCommandLineValidation();
- }
-
- @Override protected boolean usesNoRefReads() { return false; }
-
- @Override protected void setup(final SAMFileHeader header, final File samFile) {
- IoUtil.assertFileIsWritable(OUTPUT);
- IoUtil.assertFileIsWritable(HISTOGRAM_FILE);
-
- //Delegate actual collection to InsertSizeMetricCollector
- multiCollector = new InsertSizeMetricsCollector(METRIC_ACCUMULATION_LEVEL, header.getReadGroups(), MINIMUM_PCT, HISTOGRAM_WIDTH, DEVIATIONS);
- }
-
- @Override protected void acceptRead(final SAMRecord record, final ReferenceSequence ref) {
- multiCollector.acceptRecord(record, ref);
- }
-
- @Override protected void finish() {
- multiCollector.finish();
-
- final MetricsFile<InsertSizeMetrics, Integer> file = getMetricsFile();
- multiCollector.addAllLevelsToFile(file);
-
- if(file.getNumHistograms() == 0) {
- //can happen if user sets MINIMUM_PCT = 0.5, etc.
- log.warn("All data categories were discarded because they contained < " + MINIMUM_PCT +
- " of the total aligned paired data.");
- final InsertSizeMetricsCollector.PerUnitInsertSizeMetricsCollector allReadsCollector = (InsertSizeMetricsCollector.PerUnitInsertSizeMetricsCollector) multiCollector.getAllReadsCollector();
- log.warn("Total mapped pairs in all categories: " + (allReadsCollector == null ? allReadsCollector : allReadsCollector.getTotalInserts()));
- }
- else {
- file.write(OUTPUT);
-
- final int rResult;
- if(HISTOGRAM_WIDTH == null) {
- rResult = RExecutor.executeFromClasspath(
- HISTOGRAM_R_SCRIPT,
- OUTPUT.getAbsolutePath(),
- HISTOGRAM_FILE.getAbsolutePath(),
- INPUT.getName());
- } else {
- rResult = RExecutor.executeFromClasspath(
- HISTOGRAM_R_SCRIPT,
- OUTPUT.getAbsolutePath(),
- HISTOGRAM_FILE.getAbsolutePath(),
- INPUT.getName(),
- String.valueOf( HISTOGRAM_WIDTH ) ); //HISTOGRAM_WIDTH is passed because R automatically sets histogram width to the last
- //bin that has data, which may be less than HISTOGRAM_WIDTH and confuse the user.
- }
-
- if (rResult != 0) {
- throw new PicardException("R script " + HISTOGRAM_R_SCRIPT + " failed with return code " + rResult);
- }
- }
- }
-}
diff --git a/src/java/net/sf/picard/analysis/CollectMultipleMetrics.java b/src/java/net/sf/picard/analysis/CollectMultipleMetrics.java
deleted file mode 100644
index cda3b8d..0000000
--- a/src/java/net/sf/picard/analysis/CollectMultipleMetrics.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package net.sf.picard.analysis;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.samtools.util.CollectionUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
-/**
- * Class that is designed to instantiate and execute multiple metrics programs that extend
- * SinglePassSamProgram while making only a single pass through the SAM file and supplying
- * each program with the records as it goes.
- *
- * @author Tim Fennell
- */
-public class CollectMultipleMetrics extends CommandLineProgram {
-
- /**
- * This interface allows developers to create Programs to run in addition to the ones defined in the Program enum.
- */
- public static interface ProgramInterface {
- SinglePassSamProgram makeInstance(final String outbase);
- }
-
- public static enum Program implements ProgramInterface {
- CollectAlignmentSummaryMetrics {
- @Override public SinglePassSamProgram makeInstance(final String outbase) {
- final CollectAlignmentSummaryMetrics program = new CollectAlignmentSummaryMetrics();
- program.OUTPUT = new File(outbase + ".alignment_summary_metrics");
- return program;
- }
- },
- CollectInsertSizeMetrics {
- @Override
- public SinglePassSamProgram makeInstance(final String outbase) {
- final CollectInsertSizeMetrics program = new CollectInsertSizeMetrics();
- program.OUTPUT = new File(outbase + ".insert_size_metrics");
- program.HISTOGRAM_FILE = new File(outbase + ".insert_size_histogram.pdf");
- return program;
- }
- },
- QualityScoreDistribution {
- public SinglePassSamProgram makeInstance(final String outbase) {
- final QualityScoreDistribution program = new QualityScoreDistribution();
- program.OUTPUT = new File(outbase + ".quality_distribution_metrics");
- program.CHART_OUTPUT = new File(outbase + ".quality_distribution.pdf");
- return program;
- }
- },
- MeanQualityByCycle {
- public SinglePassSamProgram makeInstance(final String outbase) {
- final MeanQualityByCycle program = new MeanQualityByCycle();
- program.OUTPUT = new File(outbase + ".quality_by_cycle_metrics");
- program.CHART_OUTPUT = new File(outbase + ".quality_by_cycle.pdf");
- return program;
- }
- };
-
- }
-
- @Usage
- public final String USAGE = getStandardUsagePreamble() +
- "Takes an input BAM and reference sequence and runs one or more Picard " +
- "metrics modules at the same time to cut down on I/O. Currently all programs are run with " +
- "default options and fixed output extesions, but this may become more flexible in future.";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input SAM or BAM file.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc="Reference sequence fasta.", optional=true)
- public File REFERENCE_SEQUENCE;
-
- @Option(doc="If true (default), then the sort order in the header file will be ignored.",
- shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
- public boolean ASSUME_SORTED = true;
-
- @Option(doc="Stop after processing N reads, mainly for debugging.")
- public int STOP_AFTER = 0;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Base name of output files.")
- public String OUTPUT;
-
- @Option(doc="List of metrics programs to apply during the pass through the SAM file.")
- public List<Program> PROGRAM = CollectionUtil.makeList(Program.values());
-
- /**
- * Contents of PROGRAM list is transferred to this list during command-line validation, so that an outside
- * developer can invoke this class programmatically and provide alternative Programs to run by calling
- * setProgramsToRun().
- */
- private List<ProgramInterface> programsToRun;
-
- // Stock main method
- public static void main(final String[] args) {
- new CollectMultipleMetrics().instanceMainWithExit(args);
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- programsToRun = new ArrayList<ProgramInterface>(PROGRAM);
- return super.customCommandLineValidation();
- }
-
- /**
- * Use this method when invoking CollectMultipleMetrics programmatically to run programs other than the ones
- * available via enum. This must be called before doWork().
- */
- public void setProgramsToRun(List<ProgramInterface> programsToRun) {
- this.programsToRun = programsToRun;
- }
-
- @Override public int doWork() {
- if (OUTPUT.endsWith(".")) {
- OUTPUT = OUTPUT.substring(0, OUTPUT.length()-1);
- }
-
- final List<SinglePassSamProgram> programs = new ArrayList<SinglePassSamProgram>();
- for (ProgramInterface program : new HashSet<ProgramInterface>(programsToRun)) {
- SinglePassSamProgram instance = program.makeInstance(OUTPUT);
-
- // Generally programs should not be accessing these directly but it might make things smoother
- // to just set them anyway
- instance.INPUT = INPUT;
- instance.REFERENCE_SEQUENCE = REFERENCE_SEQUENCE;
-
- instance.setDefaultHeaders(getDefaultHeaders());
-
- programs.add(instance);
- }
-
- SinglePassSamProgram.makeItSo(INPUT, REFERENCE_SEQUENCE, ASSUME_SORTED, STOP_AFTER, programs);
-
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/analysis/CollectRnaSeqMetrics.java b/src/java/net/sf/picard/analysis/CollectRnaSeqMetrics.java
deleted file mode 100644
index bf35e4b..0000000
--- a/src/java/net/sf/picard/analysis/CollectRnaSeqMetrics.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.analysis;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.analysis.directed.RnaSeqMetricsCollector;
-import net.sf.picard.annotation.Gene;
-import net.sf.picard.annotation.GeneAnnotationReader;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.*;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.util.*;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CollectionUtil;
-
-import java.io.File;
-import java.util.*;
-
-public class CollectRnaSeqMetrics extends SinglePassSamProgram {
- private static final Log LOG = Log.getInstance(CollectRnaSeqMetrics.class);
-
- @Usage
- public final String USAGE = getStandardUsagePreamble() +
- "Program to collect metrics about the alignment of RNA to various functional classes of loci in the genome:" +
- " coding, intronic, UTR, intergenic, ribosomal.\n" +
- "Also determines strand-specificity for strand-specific libraries.";
-
-
- @Option(doc="Gene annotations in refFlat form. Format described here: http://genome.ucsc.edu/goldenPath/gbdDescriptionsOld.html#RefFlat")
- public File REF_FLAT;
-
- @Option(doc="Location of rRNA sequences in genome, in interval_list format. " +
- "If not specified no bases will be identified as being ribosomal. " +
- "Format described here: http://picard.sourceforge.net/javadoc/net/sf/picard/util/IntervalList.html", optional = true)
- public File RIBOSOMAL_INTERVALS;
-
- @Option(shortName = "STRAND", doc="For strand-specific library prep. " +
- "For unpaired reads, use FIRST_READ_TRANSCRIPTION_STRAND if the reads are expected to be on the transcription strand.")
- public RnaSeqMetricsCollector.StrandSpecificity STRAND_SPECIFICITY;
-
- @Option(doc="When calculating coverage based values (e.g. CV of coverage) only use transcripts of this length or greater.")
- public int MINIMUM_LENGTH = 500;
-
- @Option(doc="The PDF file to write out a plot of normalized position vs. coverage.", shortName="CHART", optional = true)
- public File CHART_OUTPUT;
-
- @Option(doc="If a read maps to a sequence specified with this option, all the bases in the read are counted as ignored bases. " +
- "These reads are not counted as ")
- public Set<String> IGNORE_SEQUENCE = new HashSet<String>();
-
- @Option(doc="This percentage of the length of a fragment must overlap one of the ribosomal intervals for a read or read pair by this must in order to be considered rRNA.")
- public double RRNA_FRAGMENT_PERCENTAGE = 0.8;
-
- @Option(shortName="LEVEL", doc="The level(s) at which to accumulate metrics. ")
- private Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
-
- private RnaSeqMetricsCollector collector;
-
- /**
- * A subtitle for the plot, usually corresponding to a library.
- */
- private String plotSubtitle = "";
-
- /** Required main method implementation. */
- public static void main(final String[] argv) {
- new CollectRnaSeqMetrics().instanceMainWithExit(argv);
- }
-
- @Override
- protected void setup(final SAMFileHeader header, final File samFile) {
-
- if (CHART_OUTPUT != null) IoUtil.assertFileIsWritable(CHART_OUTPUT);
-
- final OverlapDetector<Gene> geneOverlapDetector = GeneAnnotationReader.loadRefFlat(REF_FLAT, header.getSequenceDictionary());
- LOG.info("Loaded " + geneOverlapDetector.getAll().size() + " genes.");
-
- final Long ribosomalBasesInitialValue = RIBOSOMAL_INTERVALS != null ? 0L : null;
- final OverlapDetector<Interval> ribosomalSequenceOverlapDetector = RnaSeqMetricsCollector.makeOverlapDetector(samFile, header, RIBOSOMAL_INTERVALS);
-
- final HashSet<Integer> ignoredSequenceIndices = RnaSeqMetricsCollector.makeIgnoredSequenceIndicesSet(header, IGNORE_SEQUENCE);
-
- collector = new RnaSeqMetricsCollector(METRIC_ACCUMULATION_LEVEL, header.getReadGroups(), ribosomalBasesInitialValue,
- geneOverlapDetector, ribosomalSequenceOverlapDetector, ignoredSequenceIndices, MINIMUM_LENGTH, STRAND_SPECIFICITY, RRNA_FRAGMENT_PERCENTAGE);
-
- // If we're working with a single library, assign that library's name as a suffix to the plot title
- final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
- if (readGroups.size() == 1) {
- this.plotSubtitle = readGroups.get(0).getLibrary();
- if (null == this.plotSubtitle) this.plotSubtitle = "";
- }
- }
-
- @Override
- protected void acceptRead(final SAMRecord rec, final ReferenceSequence refSeq) {
- collector.acceptRecord(rec, refSeq);
- }
-
- @Override
- protected void finish() {
- collector.finish();
-
- final MetricsFile<RnaSeqMetrics, Integer> file = getMetricsFile();
- collector.addAllLevelsToFile(file);
- file.write(OUTPUT);
-
- boolean atLeastOneHistogram = false;
- for (Histogram<Integer> histo : file.getAllHistograms()) {
- atLeastOneHistogram = atLeastOneHistogram || !histo.isEmpty();
- }
- // Generate the coverage by position plot
- if (CHART_OUTPUT != null && atLeastOneHistogram) {
- final int rResult = RExecutor.executeFromClasspath("net/sf/picard/analysis/rnaSeqCoverage.R",
- OUTPUT.getAbsolutePath(),
- CHART_OUTPUT.getAbsolutePath(),
- INPUT.getName(),
- this.plotSubtitle);
-
- if (rResult != 0) {
- throw new PicardException("Problem invoking R to generate plot.");
- }
- }
- }
-
-
-}
diff --git a/src/java/net/sf/picard/analysis/CollectWgsMetrics.java b/src/java/net/sf/picard/analysis/CollectWgsMetrics.java
deleted file mode 100644
index 9cf4888..0000000
--- a/src/java/net/sf/picard/analysis/CollectWgsMetrics.java
+++ /dev/null
@@ -1,274 +0,0 @@
-package net.sf.picard.analysis;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.filter.SamRecordFilter;
-import net.sf.picard.filter.SecondaryAlignmentFilter;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricBase;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.reference.ReferenceSequenceFileWalker;
-import net.sf.picard.util.Histogram;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.MathUtil;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.picard.util.SamLocusIterator;
-import net.sf.samtools.AlignmentBlock;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecord;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
-/**
- * Computes a number of metrics that are useful for evaluating coverage and performance of whole genome sequencing experiments.
- *
- * @author tfennell
- */
-public class CollectWgsMetrics extends CommandLineProgram {
-
- @Usage
- public final String usage = "Computes a number of metrics that are useful for evaluating coverage and performance of " +
- "whole genome sequencing experiments.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input SAM or BAM file.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output metrics file.")
- public File OUTPUT;
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc="The reference sequence fasta aligned to.")
- public File REFERENCE_SEQUENCE;
-
- @Option(shortName="MQ", doc="Minimum mapping quality for a read to contribute coverage.")
- public int MINIMUM_MAPPING_QUALITY = 20;
-
- @Option(shortName="Q", doc="Minimum base quality for a base to contribute coverage.")
- public int MINIMUM_BASE_QUALITY = 20;
-
- @Option(shortName="CAP", doc="Treat bases with coverage exceeding this value as if they had coverage at this value.")
- public int COVERAGE_CAP = 250;
-
- @Option(doc="For debugging purposes, stop after processing this many genomic bases.")
- public long STOP_AFTER = -1;
-
- private final Log log = Log.getInstance(CollectWgsMetrics.class);
-
- /** Metrics for evaluating the performance of whole genome sequencing experiments. */
- public static class WgsMetrics extends MetricBase {
- /** The number of non-N bases in the genome reference over which coverage will be evaluated. */
- public long GENOME_TERRITORY;
- /** The mean coverage in bases of the genome territory, after all filters are applied. */
- public double MEAN_COVERAGE;
- /** The standard deviation of coverage of the genome after all filters are applied. */
- public double SD_COVERAGE;
- /** The median coverage in bases of the genome territory, after all filters are applied. */
- public double MEDIAN_COVERAGE;
- /** The median absolute deviation of coverage of the genome after all filters are applied. */
- public double MAD_COVERAGE;
-
- /** The fraction of aligned bases that were filtered out because they were in reads with low mapping quality (default is < 20). */
- public double PCT_EXC_MAPQ;
- /** The fraction of aligned bases that were filtered out because they were in reads marked as duplicates. */
- public double PCT_EXC_DUPE;
- /** The fraction of aligned bases that were filtered out because they were in reads without a mapped mate pair. */
- public double PCT_EXC_UNPAIRED;
- /** The fraction of aligned bases that were filtered out because they were of low base quality (default is < 20). */
- public double PCT_EXC_BASEQ;
- /** The fraction of aligned bases that were filtered out because they were the second observation from an insert with overlapping reads. */
- public double PCT_EXC_OVERLAP;
- /** The fraction of aligned bases that were filtered out because they would have raised coverage above the capped value (default cap = 250x). */
- public double PCT_EXC_CAPPED;
- /** The total fraction of aligned bases excluded due to all filters. */
- public double PCT_EXC_TOTAL;
-
- /** The fraction of bases that attained at least 5X sequence coverage in post-filtering bases. */
- public double PCT_5X;
- /** The fraction of bases that attained at least 10X sequence coverage in post-filtering bases. */
- public double PCT_10X;
- /** The fraction of bases that attained at least 20X sequence coverage in post-filtering bases. */
- public double PCT_20X;
- /** The fraction of bases that attained at least 30X sequence coverage in post-filtering bases. */
- public double PCT_30X;
- /** The fraction of bases that attained at least 40X sequence coverage in post-filtering bases. */
- public double PCT_40X;
- /** The fraction of bases that attained at least 50X sequence coverage in post-filtering bases. */
- public double PCT_50X;
- /** The fraction of bases that attained at least 60X sequence coverage in post-filtering bases. */
- public double PCT_60X;
- /** The fraction of bases that attained at least 70X sequence coverage in post-filtering bases. */
- public double PCT_70X;
- /** The fraction of bases that attained at least 80X sequence coverage in post-filtering bases. */
- public double PCT_80X;
- /** The fraction of bases that attained at least 90X sequence coverage in post-filtering bases. */
- public double PCT_90X;
- /** The fraction of bases that attained at least 100X sequence coverage in post-filtering bases. */
- public double PCT_100X;
- }
-
- public static void main(final String[] args) {
- new CollectWgsMetrics().instanceMainWithExit(args);
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
- IoUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
-
- // Setup all the inputs
- final ProgressLogger progress = new ProgressLogger(log, 10000000, "Processed", "loci");
- final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(REFERENCE_SEQUENCE);
- final SAMFileReader in = new SAMFileReader(INPUT);
-
- final SamLocusIterator iterator = new SamLocusIterator(in);
- final List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
- final CountingFilter dupeFilter = new CountingDuplicateFilter();
- final CountingFilter mapqFilter = new CountingMapQFilter(MINIMUM_MAPPING_QUALITY);
- final CountingPairedFilter pairFilter = new CountingPairedFilter();
- filters.add(mapqFilter);
- filters.add(dupeFilter);
- filters.add(pairFilter);
- filters.add(new SecondaryAlignmentFilter()); // Not a counting filter because we never want to count reads twice
- iterator.setSamFilters(filters);
- iterator.setEmitUncoveredLoci(true);
- iterator.setMappingQualityScoreCutoff(0); // Handled separately because we want to count bases
- iterator.setQualityScoreCutoff(0); // Handled separately because we want to count bases
- iterator.setIncludeNonPfReads(false);
-
- final int max = COVERAGE_CAP;
- final long[] histogramArray = new long[max + 1];
- final boolean usingStopAfter = STOP_AFTER > 0;
- final long stopAfter = STOP_AFTER-1;
- long counter = 0;
-
- long basesExcludedByBaseq = 0;
- long basesExcludedByOverlap = 0;
- long basesExcludedByCapping = 0;
-
- // Loop through all the loci
- while (iterator.hasNext()) {
- final SamLocusIterator.LocusInfo info = iterator.next();
-
- // Check that the reference is not N
- final ReferenceSequence ref = refWalker.get(info.getSequenceIndex());
- final byte base = ref.getBases()[info.getPosition()-1];
- if (base == 'N') continue;
-
- // Figure out the coverage while not counting overlapping reads twice, and excluding various things
- final HashSet<String> readNames = new HashSet<String>(info.getRecordAndPositions().size());
- for (final SamLocusIterator.RecordAndOffset recs : info.getRecordAndPositions()) {
- if (recs.getBaseQuality() < MINIMUM_BASE_QUALITY) { ++basesExcludedByBaseq; continue; }
- if (!readNames.add(recs.getRecord().getReadName())) { ++basesExcludedByOverlap; continue; }
- }
-
- final int depth = Math.min(readNames.size(), max);
- if (depth < readNames.size()) basesExcludedByCapping += readNames.size() - max;
- histogramArray[depth]++;
-
- // Record progress and perhaps stop
- progress.record(info.getSequenceName(), info.getPosition());
- if (usingStopAfter && ++counter > stopAfter) break;
- }
-
- // Construct and write the outputs
- final Histogram<Integer> histo = new Histogram<Integer>("coverage", "count");
- for (int i=0; i<histogramArray.length; ++i) {
- histo.increment(i, histogramArray[i]);
- }
-
- final WgsMetrics metrics = new WgsMetrics();
- metrics.GENOME_TERRITORY = (long) histo.getSumOfValues();
- metrics.MEAN_COVERAGE = histo.getMean();
- metrics.SD_COVERAGE = histo.getStandardDeviation();
- metrics.MEDIAN_COVERAGE = histo.getMedian();
- metrics.MAD_COVERAGE = histo.getMedianAbsoluteDeviation();
-
- final long basesExcludedByDupes = dupeFilter.getFilteredBases();
- final long basesExcludedByMapq = mapqFilter.getFilteredBases();
- final long basesExcludedByPairing = pairFilter.getFilteredBases();
- final double total = histo.getSum();
- final double totalWithExcludes = total + basesExcludedByDupes + basesExcludedByMapq + basesExcludedByPairing + basesExcludedByBaseq + basesExcludedByOverlap + basesExcludedByCapping;
- metrics.PCT_EXC_DUPE = basesExcludedByDupes / totalWithExcludes;
- metrics.PCT_EXC_MAPQ = basesExcludedByMapq / totalWithExcludes;
- metrics.PCT_EXC_UNPAIRED = basesExcludedByPairing / totalWithExcludes;
- metrics.PCT_EXC_BASEQ = basesExcludedByBaseq / totalWithExcludes;
- metrics.PCT_EXC_OVERLAP = basesExcludedByOverlap / totalWithExcludes;
- metrics.PCT_EXC_CAPPED = basesExcludedByCapping / totalWithExcludes;
- metrics.PCT_EXC_TOTAL = (totalWithExcludes - total) / totalWithExcludes;
-
- metrics.PCT_5X = MathUtil.sum(histogramArray, 5, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_10X = MathUtil.sum(histogramArray, 10, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_20X = MathUtil.sum(histogramArray, 20, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_30X = MathUtil.sum(histogramArray, 30, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_40X = MathUtil.sum(histogramArray, 40, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_50X = MathUtil.sum(histogramArray, 50, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_60X = MathUtil.sum(histogramArray, 60, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_70X = MathUtil.sum(histogramArray, 70, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_80X = MathUtil.sum(histogramArray, 80, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_90X = MathUtil.sum(histogramArray, 90, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
- metrics.PCT_100X = MathUtil.sum(histogramArray, 100, histogramArray.length) / (double) metrics.GENOME_TERRITORY;
-
- final MetricsFile<WgsMetrics, Integer> out = getMetricsFile();
- out.addMetric(metrics);
- out.addHistogram(histo);
- out.write(OUTPUT);
-
- return 0;
- }
-}
-
-/**
- * A SamRecordFilter that counts the number of aligned bases in the reads which it filters out. Abstract and designed
- * to be subclassed to implement the desired filter.
- */
-abstract class CountingFilter implements SamRecordFilter {
- private long filteredRecords = 0;
- private long filteredBases = 0;
-
- /** Gets the number of records that have been filtered out thus far. */
- public long getFilteredRecords() { return this.filteredRecords; }
-
- /** Gets the number of bases that have been filtered out thus far. */
- public long getFilteredBases() { return this.filteredBases; }
-
- @Override public final boolean filterOut(final SAMRecord record) {
- final boolean filteredOut = reallyFilterOut(record);
- if (filteredOut) {
- ++filteredRecords;
- for (final AlignmentBlock block : record.getAlignmentBlocks()) {
- this.filteredBases += block.getLength();
- }
- }
- return filteredOut;
- }
-
- abstract public boolean reallyFilterOut(final SAMRecord record);
-
- @Override public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- throw new UnsupportedOperationException();
- }
-}
-
-/** Counting filter that discards reads that have been marked as duplicates. */
-class CountingDuplicateFilter extends CountingFilter {
- @Override public boolean reallyFilterOut(final SAMRecord record) { return record.getDuplicateReadFlag(); }
-}
-
-/** Counting filter that discards reads below a configurable mapping quality threshold. */
-class CountingMapQFilter extends CountingFilter {
- private final int minMapq;
- CountingMapQFilter(final int minMapq) { this.minMapq = minMapq; }
- @Override public boolean reallyFilterOut(final SAMRecord record) { return record.getMappingQuality() < minMapq; }
-}
-
-/** Counting filter that discards reads that are unpaired in sequencing and paired reads who's mates are not mapped. */
-class CountingPairedFilter extends CountingFilter {
- @Override public boolean reallyFilterOut(final SAMRecord record) { return !record.getReadPairedFlag() || record.getMateUnmappedFlag(); }
-}
-
diff --git a/src/java/net/sf/picard/analysis/GcBiasDetailMetrics.java b/src/java/net/sf/picard/analysis/GcBiasDetailMetrics.java
deleted file mode 100644
index 6fa437f..0000000
--- a/src/java/net/sf/picard/analysis/GcBiasDetailMetrics.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.picard.metrics.MetricBase;
-
-/**
- * Class that holds detailed metrics about reads that fall within windows of a certain
- * GC bin on the reference genome.
- *
- * @author Tim Fennell
- */
-public class GcBiasDetailMetrics extends MetricBase {
- /** The G+C content of the reference sequence represented by this bin. Values are from 0% to 100% */
- public int GC;
-
- /** The number of windows on the reference genome that have this G+C content. */
- public int WINDOWS;
-
- /** The number of reads whose start position is at the start of a window of this GC. */
- public long READ_STARTS;
-
- /** The mean quality (determined via the error rate) of all bases of all reads that are assigned to windows of this GC. */
- public int MEAN_BASE_QUALITY;
-
- /**
- * The ration of "coverage" in this GC bin vs. the mean coverage of all GC bins. A number of
- * 1 represents mean coverage, a number less than one represents lower than mean coverage (e.g. 0.5
- * means half as much coverage as average) while a number greater than one represents higher than
- * mean coverage (e.g. 3.1 means this GC bin has 3.1 times more reads per window than average).
- */
- public double NORMALIZED_COVERAGE;
-
- /**
- * The radius of error bars in this bin based on the number of observations made. For example if
- * the normalized coverage is 0.75 and the error bar width is 0.1 then the error bars would be
- * drawn from 0.65 to 0.85.
- */
- public double ERROR_BAR_WIDTH;
-
-}
diff --git a/src/java/net/sf/picard/analysis/GcBiasSummaryMetrics.java b/src/java/net/sf/picard/analysis/GcBiasSummaryMetrics.java
deleted file mode 100644
index 18c7965..0000000
--- a/src/java/net/sf/picard/analysis/GcBiasSummaryMetrics.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.picard.metrics.MetricBase;
-
-/**
- * High level metrics that capture how biased the coverage in a certain lane is.
- *
- * @author Tim Fennell
- */
-public class GcBiasSummaryMetrics extends MetricBase {
- /** The window size on the genome used to calculate the GC of the sequence. */
- public int WINDOW_SIZE;
-
- /** The total number of clusters that were seen in the gc bias calculation. */
- public int TOTAL_CLUSTERS;
-
- /** The total number of aligned reads used to compute the gc bias metrics. */
- public int ALIGNED_READS;
-
- /**
- * Illumina-style AT dropout metric. Calculated by taking each GC bin independently and calculating
- * (%ref_at_gc - %reads_at_gc) and summing all positive values for GC=[0..50].
- */
- public double AT_DROPOUT;
-
- /**
- * Illumina-style GC dropout metric. Calculated by taking each GC bin independently and calculating
- * (%ref_at_gc - %reads_at_gc) and summing all positive values for GC=[50..100].
- */
- public double GC_DROPOUT;
-
-}
diff --git a/src/java/net/sf/picard/analysis/InsertSizeMetrics.java b/src/java/net/sf/picard/analysis/InsertSizeMetrics.java
deleted file mode 100644
index fec44bf..0000000
--- a/src/java/net/sf/picard/analysis/InsertSizeMetrics.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.samtools.SamPairUtil.PairOrientation;
-import net.sf.picard.metrics.MultilevelMetrics;
-
-/**
- * Metrics about the insert size distribution of a paired-end library, created by the
- * CollectInsertSizeMetrics program and usually written to a file with the extension
- * ".insert_size_metrics". In addition the insert size distribution is plotted to
- * a file with the extension ".insert_size_histogram.pdf".
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class InsertSizeMetrics extends MultilevelMetrics {
-
- /** The MEDIAN insert size of all paired end reads where both ends mapped to the same chromosome. */
- public double MEDIAN_INSERT_SIZE;
-
- /**
- * The median absolute deviation of the distribution. If the distribution is essentially normal then
- * the standard deviation can be estimated as ~1.4826 * MAD.
- */
- public double MEDIAN_ABSOLUTE_DEVIATION;
-
- /** The minimum measured insert size. This is usually 1 and not very useful as it is likely artifactual. */
- public int MIN_INSERT_SIZE;
- /**
- * The maximum measure insert size by alignment. This is usually very high representing either an artifact
- * or possibly the presence of a structural re-arrangement.
- */
- public int MAX_INSERT_SIZE;
- /**
- * The mean insert size of the "core" of the distribution. Artefactual outliers in the distribution often
- * cause calculation of nonsensical mean and stdev values. To avoid this the distribution is first trimmed
- * to a "core" distribution of +/- N median absolute deviations around the median insert size. By default
- * N=10, but this is configurable.
- */
- public double MEAN_INSERT_SIZE;
- /** Standard deviation of insert sizes over the "core" of the distribution. */
- public double STANDARD_DEVIATION;
- /** The total number of read pairs that were examined in the entire distribution. */
- public long READ_PAIRS;
- /** The pair orientation of the reads in this data category. */
- public PairOrientation PAIR_ORIENTATION;
-
- /** The "width" of the bins, centered around the median, that encompass 10% of all read pairs. */
- public int WIDTH_OF_10_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 20% of all read pairs. */
- public int WIDTH_OF_20_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 30% of all read pairs. */
- public int WIDTH_OF_30_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 40% of all read pairs. */
- public int WIDTH_OF_40_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 50% of all read pairs. */
- public int WIDTH_OF_50_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 60% of all read pairs. */
- public int WIDTH_OF_60_PERCENT;
- /**
- * The "width" of the bins, centered around the median, that encompass 70% of all read pairs.
- * This metric divided by 2 should approximate the standard deviation when the insert size
- * distribution is a normal distribution.
- */
- public int WIDTH_OF_70_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 80% of all read pairs. */
- public int WIDTH_OF_80_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 90% of all read pairs. */
- public int WIDTH_OF_90_PERCENT;
- /** The "width" of the bins, centered around the median, that encompass 100% of all read pairs. */
- public int WIDTH_OF_99_PERCENT;
-}
diff --git a/src/java/net/sf/picard/analysis/MeanQualityByCycle.java b/src/java/net/sf/picard/analysis/MeanQualityByCycle.java
deleted file mode 100644
index 5810418..0000000
--- a/src/java/net/sf/picard/analysis/MeanQualityByCycle.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.util.Histogram;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.RExecutor;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * Program to generate a data table and chart of mean quality by cycle from a
- * BAM file. Works best on a single lane/run of data, but can be applied to
- * merged BAMs - the output may just be a little confusing.
- *
- * @author Tim Fennell
- */
-public class MeanQualityByCycle extends SinglePassSamProgram {
-
- public final String USAGE = getStandardUsagePreamble() + "Program to generate a data table and chart of " +
- "mean quality by cycle from a SAM or BAM file. Works best on a single lane/run of data, but can be applied to" +
- "merged BAMs.";
-
- @Option(shortName="CHART", doc="A file (with .pdf extension) to write the chart to.")
- public File CHART_OUTPUT;
-
- @Option(doc="If set to true, calculate mean quality over aligned reads only.")
- public boolean ALIGNED_READS_ONLY = false;
-
- @Option(doc="If set to true calculate mean quality over PF reads only.")
- public boolean PF_READS_ONLY = false;
-
- private HistogramGenerator q = new HistogramGenerator(false);
- private HistogramGenerator oq = new HistogramGenerator(true);
-
- /**
- * A subtitle for the plot, usually corresponding to a library.
- */
- private String plotSubtitle = "";
-
- private final Log log = Log.getInstance(MeanQualityByCycle.class);
-
- /** Required main method. */
- public static void main(String[] args) {
- System.exit(new MeanQualityByCycle().instanceMain(args));
- }
-
- private static class HistogramGenerator {
- final boolean useOriginalQualities;
- int maxLengthSoFar = 0;
- double[] firstReadTotalsByCycle = new double[maxLengthSoFar];
- long[] firstReadCountsByCycle = new long[maxLengthSoFar];
- double[] secondReadTotalsByCycle = new double[maxLengthSoFar];
- long[] secondReadCountsByCycle = new long[maxLengthSoFar];
-
- private HistogramGenerator(boolean useOriginalQualities) {
- this.useOriginalQualities = useOriginalQualities;
- }
-
- void addRecord(SAMRecord rec) {
- final byte[] quals = (useOriginalQualities ? rec.getOriginalBaseQualities() : rec.getBaseQualities());
- if (quals == null) return;
-
- final int length = quals.length;
- final boolean rc = rec.getReadNegativeStrandFlag();
- ensureArraysBigEnough(length+1);
-
- for (int i=0; i<length; ++i) {
- int cycle = rc ? length-i : i+1;
-
- if (rec.getReadPairedFlag() && rec.getSecondOfPairFlag()) {
- secondReadTotalsByCycle[cycle] += quals[i];
- secondReadCountsByCycle[cycle] += 1;
- }
- else {
- firstReadTotalsByCycle[cycle] += quals[i];
- firstReadCountsByCycle[cycle] += 1;
- }
- }
- }
-
- private void ensureArraysBigEnough(int length) {
- if (length > maxLengthSoFar) {
- this.firstReadTotalsByCycle = Arrays.copyOf(this.firstReadTotalsByCycle, length);
- this.firstReadCountsByCycle = Arrays.copyOf(this.firstReadCountsByCycle, length);
- this.secondReadTotalsByCycle = Arrays.copyOf(this.secondReadTotalsByCycle , length);
- this.secondReadCountsByCycle = Arrays.copyOf(secondReadCountsByCycle, length);
- this.maxLengthSoFar = length;
- }
- }
-
-
- Histogram<Integer> getMeanQualityHistogram() {
- final String label = useOriginalQualities ? "MEAN_ORIGINAL_QUALITY" : "MEAN_QUALITY";
- final Histogram<Integer> meanQualities = new Histogram<Integer>("CYCLE", label);
-
- int firstReadLength = 0;
-
- for (int cycle=0; cycle < firstReadTotalsByCycle.length; ++cycle) {
- if (firstReadTotalsByCycle[cycle] > 0) {
- meanQualities.increment(cycle, firstReadTotalsByCycle[cycle] / firstReadCountsByCycle[cycle]);
- firstReadLength = cycle;
- }
- }
-
- for (int i=0; i< secondReadTotalsByCycle.length; ++i) {
- if (secondReadCountsByCycle[i] > 0) {
- final int cycle = firstReadLength + i;
- meanQualities.increment(cycle, secondReadTotalsByCycle[i] / secondReadCountsByCycle[i]);
- }
- }
-
- return meanQualities;
- }
-
- boolean isEmpty() {
- return this.maxLengthSoFar == 0;
- }
- }
-
-
- @Override
- protected void setup(final SAMFileHeader header, final File samFile) {
- IoUtil.assertFileIsWritable(CHART_OUTPUT);
- // If we're working with a single library, assign that library's name
- // as a suffix to the plot title
- final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
- if (readGroups.size() == 1) {
- this.plotSubtitle = readGroups.get(0).getLibrary();
- if (null == this.plotSubtitle) this.plotSubtitle = "";
- }
- }
-
- @Override
- protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
- // Skip unwanted records
- if (PF_READS_ONLY && rec.getReadFailsVendorQualityCheckFlag()) return;
- if (ALIGNED_READS_ONLY && rec.getReadUnmappedFlag()) return;
- if (rec.isSecondaryOrSupplementary()) return;
-
- q.addRecord(rec);
- oq.addRecord(rec);
- }
-
- @Override
- protected void finish() {
- // Generate a "histogram" of mean quality and write it to the file
- MetricsFile<?,Integer> metrics = getMetricsFile();
- metrics.addHistogram(q.getMeanQualityHistogram());
- if (!oq.isEmpty()) metrics.addHistogram(oq.getMeanQualityHistogram());
- metrics.write(OUTPUT);
-
- if (q.isEmpty() && oq.isEmpty()) {
- log.warn("No valid bases found in input file. No plot will be produced.");
- }
- else {
- // Now run R to generate a chart
- final int rResult = RExecutor.executeFromClasspath(
- "net/sf/picard/analysis/meanQualityByCycle.R",
- OUTPUT.getAbsolutePath(),
- CHART_OUTPUT.getAbsolutePath(),
- INPUT.getName(),
- this.plotSubtitle);
-
- if (rResult != 0) {
- throw new PicardException("R script meanQualityByCycle.R failed with return code " + rResult);
- }
- }
- }
-}
-
diff --git a/src/java/net/sf/picard/analysis/MetricAccumulationLevel.java b/src/java/net/sf/picard/analysis/MetricAccumulationLevel.java
deleted file mode 100755
index 69df040..0000000
--- a/src/java/net/sf/picard/analysis/MetricAccumulationLevel.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.analysis;
-
-/**
- * For use with Picard metrics programs that may output metrics for multiple levels
- * of aggregation with an analysis. Used to specify which metrics to output
- */
-public enum MetricAccumulationLevel {
- ALL_READS, SAMPLE, LIBRARY, READ_GROUP
-}
diff --git a/src/java/net/sf/picard/analysis/QualityScoreDistribution.java b/src/java/net/sf/picard/analysis/QualityScoreDistribution.java
deleted file mode 100644
index 4b0a670..0000000
--- a/src/java/net/sf/picard/analysis/QualityScoreDistribution.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.util.Histogram;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.RExecutor;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.SequenceUtil;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * Charts quality score distribution within a BAM file.
- *
- * @author Tim Fennell
- */
-public class QualityScoreDistribution extends SinglePassSamProgram {
- @Usage
- public final String USAGE = getStandardUsagePreamble() + "Program to chart " +
- "quality score distributions in a SAM or BAM file.";
-
- @Option(shortName="CHART", doc="A file (with .pdf extension) to write the chart to.")
- public File CHART_OUTPUT;
-
- @Option(doc="If set to true calculate mean quality over aligned reads only.")
- public boolean ALIGNED_READS_ONLY = false;
-
- @Option(shortName="PF", doc="If set to true calculate mean quality over PF reads only.")
- public boolean PF_READS_ONLY = false;
-
- @Option(doc="If set to true, include quality for no-call bases in the distribution.")
- public boolean INCLUDE_NO_CALLS = false;
-
- private final long[] qCounts = new long[128];
- private final long[] oqCounts = new long[128];
-
- /**
- * A subtitle for the plot, usually corresponding to a library.
- */
- private String plotSubtitle = "";
-
-
- private final Log log = Log.getInstance(QualityScoreDistribution.class);
-
- /** Required main method. */
- public static void main(final String[] args) {
- System.exit(new QualityScoreDistribution().instanceMain(args));
- }
-
-
- @Override
- protected void setup(final SAMFileHeader header, final File samFile) {
- IoUtil.assertFileIsWritable(OUTPUT);
- IoUtil.assertFileIsWritable(CHART_OUTPUT);
-
- // If we're working with a single library, assign that library's name
- // as a suffix to the plot title
- final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
- if (readGroups.size() == 1) {
- this.plotSubtitle = readGroups.get(0).getLibrary();
- if (null == this.plotSubtitle) this.plotSubtitle = "";
- }
- }
-
- @Override
- protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
- // Skip unwanted records
- if (PF_READS_ONLY && rec.getReadFailsVendorQualityCheckFlag()) return;
- if (ALIGNED_READS_ONLY && rec.getReadUnmappedFlag()) return;
- if (rec.isSecondaryOrSupplementary()) return;
-
- final byte[] bases = rec.getReadBases();
- final byte[] quals = rec.getBaseQualities();
- final byte[] oq = rec.getOriginalBaseQualities();
-
- final int length = quals.length;
-
- for (int i=0; i<length; ++i) {
- if (INCLUDE_NO_CALLS || !SequenceUtil.isNoCall(bases[i])) {
- qCounts[quals[i]]++;
- if (oq != null) oqCounts[oq[i]]++;
- }
- }
- }
-
- @Override
- protected void finish() {
- // Built the histograms out of the long[]s
- final Histogram<Byte> qHisto = new Histogram<Byte>("QUALITY", "COUNT_OF_Q");
- final Histogram<Byte> oqHisto = new Histogram<Byte>("QUALITY", "COUNT_OF_OQ");
-
- for (int i=0; i< qCounts.length; ++i) {
- if (qCounts[i] > 0) qHisto.increment( (byte) i, (double) qCounts[i]);
- if (oqCounts[i] > 0) oqHisto.increment((byte) i, (double) oqCounts[i]);
- }
-
- final MetricsFile<?,Byte> metrics = getMetricsFile();
- metrics.addHistogram(qHisto);
- if (!oqHisto.isEmpty()) metrics.addHistogram(oqHisto);
- metrics.write(OUTPUT);
- if (qHisto.isEmpty() && oqHisto.isEmpty()) {
- log.warn("No valid bases found in input file. No plot will be produced.");
- }
- else {
- // Now run R to generate a chart
- final int rResult = RExecutor.executeFromClasspath(
- "net/sf/picard/analysis/qualityScoreDistribution.R",
- OUTPUT.getAbsolutePath(),
- CHART_OUTPUT.getAbsolutePath(),
- INPUT.getName(),
- this.plotSubtitle);
-
- if (rResult != 0) {
- throw new PicardException("R script qualityScoreDistribution.R failed with return code " + rResult);
- }
- }
- }
-}
diff --git a/src/java/net/sf/picard/analysis/RnaSeqMetrics.java b/src/java/net/sf/picard/analysis/RnaSeqMetrics.java
deleted file mode 100644
index 079656f..0000000
--- a/src/java/net/sf/picard/analysis/RnaSeqMetrics.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.analysis;
-
-import net.sf.picard.metrics.MultilevelMetrics;
-
-/**
- * Metrics about the alignment of RNA-seq reads within a SAM file to genes, produced by the CollectRnaSeqMetrics
- * program and usually stored in a file with the extension ".rna_metrics".
- */
-public class RnaSeqMetrics extends MultilevelMetrics {
- /** The total number of PF bases including non-aligned reads. */
- public long PF_BASES;
-
- /**
- * The total number of aligned PF bases. Non-primary alignments are not counted. Bases in aligned reads that
- * do not correspond to reference (e.g. soft clips, insertions) are not counted.
- */
- public long PF_ALIGNED_BASES;
-
- /** Number of bases in primary aligments that align to ribosomal sequence. */
- public Long RIBOSOMAL_BASES;
-
- /** Number of bases in primary aligments that align to a non-UTR coding base for some gene, and not ribosomal sequence. */
- public long CODING_BASES;
-
- /** Number of bases in primary aligments that align to a UTR base for some gene, and not a coding base. */
- public long UTR_BASES;
-
- /** Number of bases in primary aligments that align to an intronic base for some gene, and not a coding or UTR base. */
- public long INTRONIC_BASES;
-
- /** Number of bases in primary aligments that do not align to any gene. */
- public long INTERGENIC_BASES;
-
- /**
- * Number of primary alignments that map to a sequence specified on command-line as IGNORED_SEQUENCE. These are not
- * counted in PF_ALIGNED_BASES, CORRECT_STRAND_READS, INCORRECT_STRAND_READS, or any of the base-counting metrics.
- * These reads are counted in PF_BASES.
- */
- public long IGNORED_READS;
-
- /** Number of aligned reads that map to the correct strand. 0 if library is not strand-specific. */
- public long CORRECT_STRAND_READS;
-
- /** Number of aligned reads that map to the incorrect strand. 0 if library is not strand-specific. */
- public long INCORRECT_STRAND_READS;
-
- /** RIBOSOMAL_BASES / PF_ALIGNED_BASES */
- public Double PCT_RIBOSOMAL_BASES;
-
- /** CODING_BASES / PF_ALIGNED_BASES */
- public double PCT_CODING_BASES;
-
- /** UTR_BASES / PF_ALIGNED_BASES */
- public double PCT_UTR_BASES;
-
- /** INTRONIC_BASES / PF_ALIGNED_BASES */
- public double PCT_INTRONIC_BASES;
-
- /** INTERGENIC_BASES / PF_ALIGNED_BASES */
- public double PCT_INTERGENIC_BASES;
-
- /** PCT_UTR_BASES + PCT_CODING_BASES */
- public double PCT_MRNA_BASES;
-
- /** The percentage of bases mapping to mRNA divided by the total number of PF bases. */
- public double PCT_USABLE_BASES;
-
- /** CORRECT_STRAND_READS/(CORRECT_STRAND_READS + INCORRECT_STRAND_READS). 0 if library is not strand-specific. */
- public double PCT_CORRECT_STRAND_READS;
-
- /** The median CV of coverage of the 1000 most highly expressed transcripts. Ideal value = 0. */
- public double MEDIAN_CV_COVERAGE;
-
- /**
- * The median 5 prime bias of the 1000 most highly expressed transcripts, where 5 prime bias is calculated per
- * transcript as: mean coverage of the 5' most 100 bases divided by the mean coverage of the whole transcript.
- */
- public double MEDIAN_5PRIME_BIAS;
-
- /**
- * The median 3 prime bias of the 1000 most highly expressed transcripts, where 3 prime bias is calculated per
- * transcript as: mean coverage of the 3' most 100 bases divided by the mean coverage of the whole transcript.
- */
- public double MEDIAN_3PRIME_BIAS;
-
- /** The ratio of coverage at the 5' end of to the 3' end based on the 1000 most highly expressed transcripts. */
- public double MEDIAN_5PRIME_TO_3PRIME_BIAS;
-}
diff --git a/src/java/net/sf/picard/analysis/SinglePassSamProgram.java b/src/java/net/sf/picard/analysis/SinglePassSamProgram.java
deleted file mode 100644
index e09d119..0000000
--- a/src/java/net/sf/picard/analysis/SinglePassSamProgram.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package net.sf.picard.analysis;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.reference.ReferenceSequenceFileWalker;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.SequenceUtil;
-
-import java.io.File;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.Arrays;
-import java.util.Collection;
-
-/**
- * Super class that is designed to provide some consistent structure between subclasses that
- * simply iterate once over a coordinate sorted BAM and collect information from the records
- * as the go in order to produce some kind of output.
- *
- * @author Tim Fennell
- */
-public abstract class SinglePassSamProgram extends CommandLineProgram {
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input SAM or BAM file.")
- public File INPUT;
-
- @Option(shortName="O", doc="File to write the output to.")
- public File OUTPUT;
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc="Reference sequence fasta", optional=true)
- public File REFERENCE_SEQUENCE;
-
- @Option(doc="If true (default), then the sort order in the header file will be ignored.",
- shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
- public boolean ASSUME_SORTED = true;
-
- @Option(doc="Stop after processing N reads, mainly for debugging.")
- public long STOP_AFTER = 0;
-
- private static final Log log = Log.getInstance(SinglePassSamProgram.class);
-
- /**
- * Final implementation of doWork() that checks and loads the input and optionally reference
- * sequence files and the runs the sublcass through the setup() acceptRead() and finish() steps.
- */
- @Override protected final int doWork() {
- makeItSo(INPUT, REFERENCE_SEQUENCE, ASSUME_SORTED, STOP_AFTER, Arrays.asList(this));
- return 0;
- }
-
- public static void makeItSo(final File input,
- final File referenceSequence,
- final boolean assumeSorted,
- final long stopAfter,
- final Collection<SinglePassSamProgram> programs) {
-
- // Setup the standard inputs
- IoUtil.assertFileIsReadable(input);
- final SAMFileReader in = new SAMFileReader(input);
-
- // Optionally load up the reference sequence and double check sequence dictionaries
- final ReferenceSequenceFileWalker walker;
- if (referenceSequence == null) {
- walker = null;
- }
- else {
- IoUtil.assertFileIsReadable(referenceSequence);
- walker = new ReferenceSequenceFileWalker(referenceSequence);
-
- if (!in.getFileHeader().getSequenceDictionary().isEmpty()) {
- SequenceUtil.assertSequenceDictionariesEqual(in.getFileHeader().getSequenceDictionary(),
- walker.getSequenceDictionary());
- }
- }
-
- // Check on the sort order of the BAM file
- {
- final SortOrder sort = in.getFileHeader().getSortOrder();
- if (sort != SortOrder.coordinate) {
- if (assumeSorted) {
- log.warn("File reports sort order '" + sort + "', assuming it's coordinate sorted anyway.");
- }
- else {
- throw new PicardException("File " + input.getAbsolutePath() + " should be coordinate sorted but " +
- "the header says the sort order is " + sort + ". If you believe the file " +
- "to be coordinate sorted you may pass ASSUME_SORTED=true");
- }
- }
- }
-
- // Call the abstract setup method!
- boolean anyUseNoRefReads = false;
- for (final SinglePassSamProgram program : programs) {
- program.setup(in.getFileHeader(), input);
- anyUseNoRefReads = anyUseNoRefReads || program.usesNoRefReads();
- }
-
-
- final ProgressLogger progress = new ProgressLogger(log);
-
- for (final SAMRecord rec : in) {
- final ReferenceSequence ref;
- if (walker == null || rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- ref = null;
- }
- else {
- ref = walker.get(rec.getReferenceIndex());
- }
-
- for (final SinglePassSamProgram program : programs) {
- program.acceptRead(rec, ref);
- }
-
- progress.record(rec);
-
- // See if we need to terminate early?
- if (stopAfter > 0 && progress.getCount() >= stopAfter) {
- break;
- }
-
- // And see if we're into the unmapped reads at the end
- if (!anyUseNoRefReads && rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- break;
- }
- }
-
- in.close();
-
- for (final SinglePassSamProgram program : programs) {
- program.finish();
- }
- }
-
- /** Can be overriden and set to false if the section of unmapped reads at the end of the file isn't needed. */
- protected boolean usesNoRefReads() { return true; }
-
- /** Should be implemented by subclasses to do one-time initialization work. */
- protected abstract void setup(final SAMFileHeader header, final File samFile);
-
- /**
- * Should be implemented by subclasses to accept SAMRecords one at a time.
- * If the read has a reference sequence and a reference sequence file was supplied to the program
- * it will be passed as 'ref'. Otherwise 'ref' may be null.
- */
- protected abstract void acceptRead(final SAMRecord rec, final ReferenceSequence ref);
-
- /** Should be implemented by subclasses to do one-time finalization work. */
- protected abstract void finish();
-
-}
diff --git a/src/java/net/sf/picard/analysis/directed/CalculateHsMetrics.java b/src/java/net/sf/picard/analysis/directed/CalculateHsMetrics.java
deleted file mode 100644
index 95d3f78..0000000
--- a/src/java/net/sf/picard/analysis/directed/CalculateHsMetrics.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.Usage;
-
-import java.io.File;
-import java.util.*;
-
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.samtools.SAMReadGroupRecord;
-
-/**
- * Calculates a set of HS metrics from a sam or bam file. See HsMetricsCollector and CollectTargetedMetrics for more details.
- *
- * @author Tim Fennell
- */
-public class CalculateHsMetrics extends CollectTargetedMetrics {
-
- @Usage
- public final String USAGE = getStandardUsagePreamble() +
- "Calculates a set of Hybrid Selection specific metrics from an aligned SAM" +
- "or BAM file. If a reference sequence is provided, AT/GC dropout metrics will " +
- "be calculated, and the PER_TARGET_COVERAGE option can be used to output GC and " +
- "mean coverage information for every target.";
- @Option(shortName="BI", doc="An interval list file that contains the locations of the baits used.")
- public File BAIT_INTERVALS;
-
- @Option(shortName="N", doc="Bait set name. If not provided it is inferred from the filename of the bait intervals.", optional=true)
- public String BAIT_SET_NAME;
-
- /**
- * @return BAIT_INTERVALS file
- */
- @Override
- protected File getProbeIntervals() {
- return BAIT_INTERVALS;
- }
-
- /**
- * @return BAIT_SET_NAME
- */
- @Override
- protected String getProbeSetName() {
- return BAIT_SET_NAME;
- }
-
- /** Stock main method. */
- public static void main(final String[] argv) {
- System.exit(new CalculateHsMetrics().instanceMain(argv));
- }
-
- @Override
- protected TargetMetricsCollector makeCollector(final Set<MetricAccumulationLevel> accumulationLevels,
- final List<SAMReadGroupRecord> samRgRecords,
- final ReferenceSequenceFile refFile,
- final File perTargetCoverage,
- final File targetIntervals,
- final File probeIntervals,
- final String probeSetName) {
- return new HsMetricCollector(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
- }
-}
diff --git a/src/java/net/sf/picard/analysis/directed/CollectTargetedMetrics.java b/src/java/net/sf/picard/analysis/directed/CollectTargetedMetrics.java
deleted file mode 100644
index c9cd0fe..0000000
--- a/src/java/net/sf/picard/analysis/directed/CollectTargetedMetrics.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.reference.ReferenceSequenceFileFactory;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.picard.util.IntervalList;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.SequenceUtil;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Both CollectTargetedPCRMetrics and CalculateHybridSelection metrics share virtually identical program structures except
- * for the name of their targeting mechanisms (e.g. bait set or amplicon set). The shared behavior of these programs
- * is encapsulated in CollectTargetedMetrics which is then subclassed by CalculateHsMetrics and CollectTargetedPcrMetrics.
- *
- * This program verifies the input parameters to TargetMetricsCollector and converts all files to
- * the format desired by TargetMetricsCollector. Then it instantiates a TargetMetricsCollector and
- * collects metric information for all reads in the INPUT sam file.
- */
-public abstract class CollectTargetedMetrics extends CommandLineProgram {
-
- private static final Log log = Log.getInstance(CalculateHsMetrics.class);
-
- /**
- * The interval file to be fed to TargetMetricsCollector
- * @return An interval file that denotes the intervals of the regions targeted by the probes for this run that is
- * passed to the TargetMetricsCollector produced by makeCollector
- */
- protected abstract File getProbeIntervals();
-
- /**
- * @return The name of the probe set used in this run, getProbeIntervals().getName() is
- */
- protected abstract String getProbeSetName();
-
- /**
- * A factory method for the TargetMetricsCollector to use this time. Examples of TargetMetricsCollector:
- * (TargetedPcrMetricsCollector, HsMetricsCalculator)
- * @return A TargetMetricsCollector to which we will pass SAMRecords
- */
- protected abstract TargetMetricsCollector makeCollector(final Set<MetricAccumulationLevel> accumulationLevels,
- final List<SAMReadGroupRecord> samRgRecords,
- final ReferenceSequenceFile refFile,
- final File perTargetCoverage,
- final File targetIntervals,
- final File probeIntervals,
- final String probeSetName);
-
-
- @Option(shortName="TI", doc="An interval list file that contains the locations of the targets.")
- public File TARGET_INTERVALS;
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="An aligned SAM or BAM file.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output file to write the metrics to.")
- public File OUTPUT;
-
- @Option(shortName="LEVEL", doc="The level(s) at which to accumulate metrics. ")
- public Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME, optional=true, doc="The reference sequence aligned to.")
- public File REFERENCE_SEQUENCE;
-
- @Option(optional=true, doc="An optional file to output per target coverage information to.")
- public File PER_TARGET_COVERAGE;
-
- /**
- * Asserts that files are readable and writable and then fires off an
- * HsMetricsCalculator instance to do the real work.
- */
- protected int doWork() {
- IoUtil.assertFileIsReadable(getProbeIntervals());
- IoUtil.assertFileIsReadable(TARGET_INTERVALS);
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
- if (PER_TARGET_COVERAGE != null) IoUtil.assertFileIsWritable(PER_TARGET_COVERAGE);
-
- final SAMFileReader samReader = new SAMFileReader(INPUT);
-
- final File probeIntervals = getProbeIntervals();
-
- // Validate that the targets and baits have the same references as the reads file
- SequenceUtil.assertSequenceDictionariesEqual(samReader.getFileHeader().getSequenceDictionary(),
- IntervalList.fromFile(TARGET_INTERVALS).getHeader().getSequenceDictionary(),
- INPUT, TARGET_INTERVALS);
- SequenceUtil.assertSequenceDictionariesEqual(samReader.getFileHeader().getSequenceDictionary(),
- IntervalList.fromFile(probeIntervals).getHeader().getSequenceDictionary(),
- INPUT, probeIntervals);
-
- ReferenceSequenceFile ref = null;
- if (REFERENCE_SEQUENCE != null) {
- IoUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
- ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
- SequenceUtil.assertSequenceDictionariesEqual(samReader.getFileHeader().getSequenceDictionary(), ref.getSequenceDictionary(),
- INPUT, REFERENCE_SEQUENCE);
- }
-
- final TargetMetricsCollector collector = makeCollector(METRIC_ACCUMULATION_LEVEL, samReader.getFileHeader().getReadGroups(), ref,
- PER_TARGET_COVERAGE, TARGET_INTERVALS, probeIntervals, getProbeSetName());
-
-
- // Add each record to the requested collectors
- final Iterator<SAMRecord> records = samReader.iterator();
- final ProgressLogger progress = new ProgressLogger(log);
-
- while (records.hasNext()) {
- final SAMRecord sam = records.next();
- collector.acceptRecord(sam, null);
- progress.record(sam);
- }
-
- // Write the output file
- final MetricsFile<HsMetrics, Integer> metrics = getMetricsFile();
- collector.finish();
-
- collector.addAllLevelsToFile(metrics);
-
- metrics.write(OUTPUT);
-
- return 0;
- }
-
- protected String[] customCommandLineValidation() {
- if (PER_TARGET_COVERAGE != null && (METRIC_ACCUMULATION_LEVEL.size() != 1 ||
- METRIC_ACCUMULATION_LEVEL.iterator().next() != MetricAccumulationLevel.ALL_READS)) {
- return new String[] {"PER_TARGET_COVERAGE can be specified only when METRIC_ACCUMULATION_LEVEL is set " +
- "to ALL_READS."};
- }
-
- if(PER_TARGET_COVERAGE != null && REFERENCE_SEQUENCE == null) {
- return new String[] {"Must supply REFERENCE_SEQUENCE when supplying PER_TARGET_COVERAGE"};
- }
-
- return super.customCommandLineValidation();
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/analysis/directed/CollectTargetedPcrMetrics.java b/src/java/net/sf/picard/analysis/directed/CollectTargetedPcrMetrics.java
deleted file mode 100644
index 90c3b86..0000000
--- a/src/java/net/sf/picard/analysis/directed/CollectTargetedPcrMetrics.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.samtools.SAMReadGroupRecord;
-
-import java.io.File;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Collect metric information for target pcr metrics runs. See CollectTargetedMetrics and TargetPcrMetricsCollector for
- * more information
- */
-public class CollectTargetedPcrMetrics extends CollectTargetedMetrics {
-
- @Usage
- public final String USAGE =
- "Calculates a set of metrics to Illumina Truseq Custom Amplicon sequencing from an aligned SAM" +
- "or BAM file. If a reference sequence is provided, AT/GC dropout metrics will " +
- "be calculated, and the PER_TARGET_COVERAGE option can be used to output GC and " +
- "mean coverage information for every target.";
- @Option(shortName="AI", doc="An interval list file that contains the locations of the baits used.")
- public File AMPLICON_INTERVALS;
-
- @Option(shortName="N", doc="Custom amplicon set name. If not provided it is inferred from the filename of the AMPLICON_INTERVALS intervals.", optional=true)
- public String CUSTOM_AMPLICON_SET_NAME;
-
- /**
- * @return AMPLICON_INTERVALS
- */
- @Override
- protected File getProbeIntervals() {
- return AMPLICON_INTERVALS;
- }
-
- /**
- * @return CUSTOM_AMPLICON_SET_NAME
- */
- @Override
- protected String getProbeSetName() {
- return CUSTOM_AMPLICON_SET_NAME;
- }
-
- /** Stock main method. */
- public static void main(final String[] argv) {
- System.exit(new CollectTargetedPcrMetrics().instanceMain(argv));
- }
-
- @Override
- protected TargetMetricsCollector makeCollector(final Set<MetricAccumulationLevel> accumulationLevels,
- final List<SAMReadGroupRecord> samRgRecords,
- final ReferenceSequenceFile refFile,
- final File perTargetCoverage,
- final File targetIntervals,
- final File probeIntervals,
- final String probeSetName) {
- return new TargetedPcrMetricsCollector(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
- }
-}
diff --git a/src/java/net/sf/picard/analysis/directed/HsMetricCollector.java b/src/java/net/sf/picard/analysis/directed/HsMetricCollector.java
deleted file mode 100644
index 0769ef5..0000000
--- a/src/java/net/sf/picard/analysis/directed/HsMetricCollector.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.sam.DuplicationMetrics;
-import net.sf.samtools.*;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * Calculates HS metrics for a given SAM or BAM file. Requires the input of a list of
- * target intervals and a list of bait intervals. Can be invoked either on an entire
- * iterator of SAMRecords or be passed SAMRecords one at a time.
- *
- * @author Jonathan Burke
- */
-public class HsMetricCollector extends TargetMetricsCollector<HsMetrics> {
-
- public HsMetricCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords, final ReferenceSequenceFile refFile, final File perTargetCoverage, final File targetIntervals, final File probeIntervals, final String probeSetName) {
- super(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
- }
-
- @Override
- public HsMetrics convertMetric(final TargetMetrics targetMetrics) {
- final HsMetrics hsMetrics = new HsMetrics();
- TargetMetricsCollector.reflectiveCopy(targetMetrics, hsMetrics,
- new String[]{"PROBE_SET", "PROBE_TERRITORY", "ON_PROBE_BASES", "NEAR_PROBE_BASES", "OFF_PROBE_BASES", "PCT_OFF_PROBE", "ON_PROBE_VS_SELECTED", "MEAN_PROBE_COVERAGE"},
- new String[]{"BAIT_SET", "BAIT_TERRITORY", "ON_BAIT_BASES", "NEAR_BAIT_BASES", "OFF_BAIT_BASES", "PCT_OFF_BAIT", "ON_BAIT_VS_SELECTED", "MEAN_BAIT_COVERAGE"}
- );
-
- hsMetrics.BAIT_DESIGN_EFFICIENCY = (double) hsMetrics.TARGET_TERRITORY / (double) hsMetrics.BAIT_TERRITORY;
- hsMetrics.PCT_USABLE_BASES_ON_BAIT = hsMetrics.ON_BAIT_BASES / (double) targetMetrics.PF_BASES;
- hsMetrics.PCT_USABLE_BASES_ON_TARGET = hsMetrics.ON_TARGET_BASES / (double) targetMetrics.PF_BASES;
- hsMetrics.HS_LIBRARY_SIZE = DuplicationMetrics.estimateLibrarySize(targetMetrics.PF_SELECTED_PAIRS, targetMetrics.PF_SELECTED_UNIQUE_PAIRS);
-
- //need HSLIBRARY_SIZE
- hsMetrics.HS_PENALTY_10X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 10);
- hsMetrics.HS_PENALTY_20X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 20);
- hsMetrics.HS_PENALTY_30X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 30);
- hsMetrics.HS_PENALTY_40X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 40);
- hsMetrics.HS_PENALTY_50X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 50);
- hsMetrics.HS_PENALTY_100X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 100);
- return hsMetrics;
- }
-
- /**
- * Attempts to calculate the HS penalty incurred by the library in order to get 80%
- * of target bases (in non-zero-covered targets) to a specific target coverage (e.g. 20X).
- *
- * @param coverageGoal the desired coverage target (e.g. 20X)
- * @return the hs penalty - a multiplier that tells if you want, e.g. 20X coverage, then you will
- * need to produce this many PF aligned bases per target bases in your design!
- */
- private double calculateHsPenalty(final Long librarySize, final TargetMetrics targetMetrics, final int coverageGoal) {
- if (librarySize == null) return 0;
-
- final double meanCoverage = targetMetrics.ON_TARGET_FROM_PAIR_BASES / (double) targetMetrics.TARGET_TERRITORY;
- final double fold80 = targetMetrics.FOLD_80_BASE_PENALTY;
- final long pairs = targetMetrics.PF_SELECTED_PAIRS;
- final long uniquePairs = targetMetrics.PF_SELECTED_UNIQUE_PAIRS;
- final double onTargetPct = (double) targetMetrics.ON_TARGET_BASES / (double) targetMetrics.PF_UQ_BASES_ALIGNED;
-
- final double uniquePairGoalMultiplier = (coverageGoal / meanCoverage) * fold80;
- double pairMultiplier = uniquePairGoalMultiplier;
- double increment = 1;
- boolean goingUp = uniquePairGoalMultiplier >= 1;
- double finalPairMultiplier = -1;
-
- // Converge "pairMultiplier" to the number that gives us a uniquePairMultiplier equal
- // to the coverage multiplier we desire. If we can't get there with 1000X coverage,
- // we're not going to get there!
- for (int i=0; i<10000; ++i) {
- final double uniquePairMultiplier = DuplicationMetrics.estimateRoi(librarySize, pairMultiplier, pairs, uniquePairs);
-
- if (Math.abs(uniquePairMultiplier - uniquePairGoalMultiplier) / uniquePairGoalMultiplier <= 0.001) {
- finalPairMultiplier = pairMultiplier;
- break;
- }
- else if ((uniquePairMultiplier > uniquePairGoalMultiplier && goingUp) ||
- (uniquePairMultiplier < uniquePairGoalMultiplier && !goingUp)){
- increment /= 2;
- goingUp = !goingUp;
- }
-
- pairMultiplier += (goingUp ? increment : -increment);
- }
-
- if (finalPairMultiplier == -1) {
- return -1;
- }
- else {
- final double uniqueFraction = (uniquePairs * uniquePairGoalMultiplier) / (pairs * finalPairMultiplier);
- return (1 / uniqueFraction) * fold80 * (1 / onTargetPct);
- }
- }
-
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/analysis/directed/HsMetrics.java b/src/java/net/sf/picard/analysis/directed/HsMetrics.java
deleted file mode 100644
index 429cb81..0000000
--- a/src/java/net/sf/picard/analysis/directed/HsMetrics.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.metrics.MultilevelMetrics;
-
-/**
- * The set of metrics captured that are specific to a hybrid selection analysis.
- *
- * @author Tim Fennell
- */
-public class HsMetrics extends MultilevelMetrics {
- /** The name of the bait set used in the hybrid selection. */
- public String BAIT_SET;
-
- /** The number of bases in the reference genome used for alignment. */
- public long GENOME_SIZE;
-
- /** The number of bases which have one or more baits on top of them. */
- public long BAIT_TERRITORY;
-
- /** The unique number of target bases in the experiment where target is usually exons etc. */
- public long TARGET_TERRITORY;
-
- /** Target terrirtoy / bait territory. 1 == perfectly efficient, 0.5 = half of baited bases are not target. */
- public double BAIT_DESIGN_EFFICIENCY;
-
- /** The total number of reads in the SAM or BAM file examine. */
- public long TOTAL_READS;
-
- /** The number of reads that pass the vendor's filter. */
- public long PF_READS;
-
- /** The number of PF reads that are not marked as duplicates. */
- public long PF_UNIQUE_READS;
-
- /** PF reads / total reads. The percent of reads passing filter. */
- public double PCT_PF_READS;
-
- /** PF Unique Reads / Total Reads. */
- public double PCT_PF_UQ_READS;
-
- /** The number of PF unique reads that are aligned with mapping score > 0 to the reference genome. */
- public long PF_UQ_READS_ALIGNED;
-
- /** PF Reads Aligned / PF Reads. */
- public double PCT_PF_UQ_READS_ALIGNED;
-
- /** The number of bases in the PF aligned reads that are mapped to a reference base. Accounts for clipping and gaps. */
- public long PF_UQ_BASES_ALIGNED;
-
- /** The number of PF aligned bases that mapped to a baited region of the genome. */
- public long ON_BAIT_BASES;
-
- /** The number of PF aligned bases that mapped to within a fixed interval of a baited region, but not on a baited region. */
- public long NEAR_BAIT_BASES;
-
- /** The number of PF aligned bases that mapped to neither on or near a bait. */
- public long OFF_BAIT_BASES;
-
- /** The number of PF aligned bases that mapped to a targeted region of the genome. */
- public long ON_TARGET_BASES;
-
- /** On+Near Bait Bases / PF Bases Aligned. */
- public double PCT_SELECTED_BASES;
-
- /** The percentage of aligned PF bases that mapped neither on or near a bait. */
- public double PCT_OFF_BAIT;
-
- /** The percentage of on+near bait bases that are on as opposed to near. */
- public double ON_BAIT_VS_SELECTED;
-
- /** The mean coverage of all baits in the experiment. */
- public double MEAN_BAIT_COVERAGE;
-
- /** The mean coverage of targets that received at least coverage depth = 2 at one base. */
- public double MEAN_TARGET_COVERAGE;
-
- /** The number of aligned, de-duped, on-bait bases out of the PF bases available. */
- public double PCT_USABLE_BASES_ON_BAIT;
-
- /** The number of aligned, de-duped, on-target bases out of the PF bases available. */
- public double PCT_USABLE_BASES_ON_TARGET;
-
- /** The fold by which the baited region has been amplified above genomic background. */
- public double FOLD_ENRICHMENT;
-
- /** The number of targets that did not reach coverage=2 over any base. */
- public double ZERO_CVG_TARGETS_PCT;
-
- /**
- * The fold over-coverage necessary to raise 80% of bases in "non-zero-cvg" targets to
- * the mean coverage level in those targets.
- */
- public double FOLD_80_BASE_PENALTY;
-
- /** The percentage of ALL target bases achieving 2X or greater coverage. */
- public double PCT_TARGET_BASES_2X;
- /** The percentage of ALL target bases achieving 10X or greater coverage. */
- public double PCT_TARGET_BASES_10X;
- /** The percentage of ALL target bases achieving 20X or greater coverage. */
- public double PCT_TARGET_BASES_20X;
- /** The percentage of ALL target bases achieving 30X or greater coverage. */
- public double PCT_TARGET_BASES_30X;
- /** The percentage of ALL target bases achieving 40X or greater coverage. */
- public double PCT_TARGET_BASES_40X;
- /** The percentage of ALL target bases achieving 50X or greater coverage. */
- public double PCT_TARGET_BASES_50X;
- /** The percentage of ALL target bases achieving 100X or greater coverage. */
- public double PCT_TARGET_BASES_100X;
-
- /** The estimated number of unique molecules in the selected part of the library. */
- public Long HS_LIBRARY_SIZE;
-
- /**
- * The "hybrid selection penalty" incurred to get 80% of target bases to 10X. This metric
- * should be interpreted as: if I have a design with 10 megabases of target, and want to get
- * 10X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 10 * HS_PENALTY_10X.
- */
- public double HS_PENALTY_10X;
-
- /**
- * The "hybrid selection penalty" incurred to get 80% of target bases to 20X. This metric
- * should be interpreted as: if I have a design with 10 megabases of target, and want to get
- * 20X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 20 * HS_PENALTY_20X.
- */
- public double HS_PENALTY_20X;
-
- /**
- * The "hybrid selection penalty" incurred to get 80% of target bases to 30X. This metric
- * should be interpreted as: if I have a design with 10 megabases of target, and want to get
- * 30X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 30 * HS_PENALTY_30X.
- */
- public double HS_PENALTY_30X;
-
- /**
- * The "hybrid selection penalty" incurred to get 80% of target bases to 40X. This metric
- * should be interpreted as: if I have a design with 10 megabases of target, and want to get
- * 40X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 40 * HS_PENALTY_40X.
- */
- public double HS_PENALTY_40X;
-
- /**
- * The "hybrid selection penalty" incurred to get 80% of target bases to 50X. This metric
- * should be interpreted as: if I have a design with 10 megabases of target, and want to get
- * 50X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 50 * HS_PENALTY_50X.
- */
- public double HS_PENALTY_50X;
-
- /**
- * The "hybrid selection penalty" incurred to get 80% of target bases to 100X. This metric
- * should be interpreted as: if I have a design with 10 megabases of target, and want to get
- * 100X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 100 * HS_PENALTY_100X.
- */
- public double HS_PENALTY_100X;
-
- /**
- * A measure of how undercovered <= 50% GC regions are relative to the mean. For each GC bin [0..50]
- * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
- * AT DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
- * reads that should have mapped to GC<=50% regions mapped elsewhere.
- */
- public double AT_DROPOUT;
-
- /**
- * A measure of how undercovered >= 50% GC regions are relative to the mean. For each GC bin [50..100]
- * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
- * GC DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
- * reads that should have mapped to GC>=50% regions mapped elsewhere.
- */
- public double GC_DROPOUT;
-}
diff --git a/src/java/net/sf/picard/analysis/directed/InsertSizeMetricsCollector.java b/src/java/net/sf/picard/analysis/directed/InsertSizeMetricsCollector.java
deleted file mode 100644
index b24d56f..0000000
--- a/src/java/net/sf/picard/analysis/directed/InsertSizeMetricsCollector.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.analysis.InsertSizeMetrics;
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.metrics.MultiLevelCollector;
-import net.sf.picard.metrics.PerUnitMetricCollector;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.SamPairUtil;
-import net.sf.picard.util.Histogram;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Collects InserSizeMetrics on the specified accumulationLevels using
- */
-public class InsertSizeMetricsCollector extends MultiLevelCollector<InsertSizeMetrics, Integer, InsertSizeCollectorArgs> {
- // When generating the histogram, discard any data categories (out of FR, TANDEM, RF) that have fewer than this
- // percentage of overall reads. (Range: 0 to 1)
- private final double minimumPct;
-
- // Generate mean, sd and plots by trimming the data down to MEDIAN + DEVIATIONS*MEDIAN_ABSOLUTE_DEVIATION.
- // This is done because insert size data typically includes enough anomolous values from chimeras and other
- // artifacts to make the mean and sd grossly misleading regarding the real distribution.
- private final double deviations;
-
- //Explicitly sets the histogram width, overriding automatic truncation of histogram tail.
- //Also, when calculating mean and stdev, only bins <= HISTOGRAM_WIDTH will be included.
- private Integer histogramWidth;
-
- public InsertSizeMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
- final double minimumPct, final Integer histogramWidth, final double deviations) {
- this.minimumPct = minimumPct;
- this.histogramWidth = histogramWidth;
- this.deviations = deviations;
- setup(accumulationLevels, samRgRecords);
- }
-
- // We will pass insertSize and PairOrientation with the DefaultPerRecordCollectorArgs passed to the record collectors
- // This method is called once Per samRecord
- @Override
- protected InsertSizeCollectorArgs makeArg(SAMRecord samRecord, ReferenceSequence refSeq) {
- final int insertSize = Math.abs(samRecord.getInferredInsertSize());
- final SamPairUtil.PairOrientation orientation = SamPairUtil.getPairOrientation(samRecord);
-
- return new InsertSizeCollectorArgs(insertSize, orientation);
- }
-
- /** Make an InsertSizeCollector with the given arguments */
- @Override
- protected PerUnitMetricCollector<InsertSizeMetrics, Integer, InsertSizeCollectorArgs> makeChildCollector(final String sample, final String library, final String readGroup) {
- return new PerUnitInsertSizeMetricsCollector(sample, library, readGroup);
- }
-
- @Override
- public void acceptRecord(final SAMRecord record, final ReferenceSequence refSeq) {
- if (!record.getReadPairedFlag() ||
- record.getReadUnmappedFlag() ||
- record.getMateUnmappedFlag() ||
- record.getFirstOfPairFlag() ||
- record.isSecondaryOrSupplementary() ||
- record.getDuplicateReadFlag() ||
- record.getInferredInsertSize() == 0) {
- return;
- }
-
- super.acceptRecord(record, refSeq);
- }
-
- /** A Collector for individual InsertSizeMetrics for a given SAMPLE or SAMPLE/LIBRARY or SAMPLE/LIBRARY/READ_GROUP (depending on aggregation levels) */
- public class PerUnitInsertSizeMetricsCollector implements PerUnitMetricCollector<InsertSizeMetrics, Integer, InsertSizeCollectorArgs> {
- final EnumMap<SamPairUtil.PairOrientation, Histogram<Integer>> histograms = new EnumMap<SamPairUtil.PairOrientation, Histogram<Integer>>(SamPairUtil.PairOrientation.class);
- final String sample;
- final String library;
- final String readGroup;
- private double totalInserts = 0;
-
- public PerUnitInsertSizeMetricsCollector(final String sample, final String library, final String readGroup) {
- this.sample = sample;
- this.library = library;
- this.readGroup = readGroup;
- String prefix = null;
- if (this.readGroup != null) {
- prefix = this.readGroup + ".";
- }
- else if (this.library != null) {
- prefix = this.library + ".";
- }
- else if (this.sample != null) {
- prefix = this.sample + ".";
- }
- else {
- prefix = "All_Reads.";
- }
- histograms.put(SamPairUtil.PairOrientation.FR, new Histogram<Integer>("insert_size", prefix + "fr_count"));
- histograms.put(SamPairUtil.PairOrientation.TANDEM, new Histogram<Integer>("insert_size", prefix + "tandem_count"));
- histograms.put(SamPairUtil.PairOrientation.RF, new Histogram<Integer>("insert_size", prefix + "rf_count"));
- }
-
- public void acceptRecord(final InsertSizeCollectorArgs args) {
- histograms.get(args.getPairOrientation()).increment(args.getInsertSize());
- }
-
- public void finish() { }
-
- public double getTotalInserts() {
- return totalInserts;
- }
-
- public void addMetricsToFile(final MetricsFile<InsertSizeMetrics,Integer> file) {
- for (final Histogram<Integer> h : this.histograms.values()) totalInserts += h.getCount();
-
- for(final Map.Entry<SamPairUtil.PairOrientation, Histogram<Integer>> entry : histograms.entrySet()) {
- final SamPairUtil.PairOrientation pairOrientation = entry.getKey();
- final Histogram<Integer> histogram = entry.getValue();
- final double total = histogram.getCount();
-
- // Only include a category if it has a sufficient percentage of the data in it
- if( total > totalInserts * minimumPct ) {
- final InsertSizeMetrics metrics = new InsertSizeMetrics();
- metrics.SAMPLE = this.sample;
- metrics.LIBRARY = this.library;
- metrics.READ_GROUP = this.readGroup;
- metrics.PAIR_ORIENTATION = pairOrientation;
- metrics.READ_PAIRS = (long) total;
- metrics.MAX_INSERT_SIZE = (int) histogram.getMax();
- metrics.MIN_INSERT_SIZE = (int) histogram.getMin();
- metrics.MEDIAN_INSERT_SIZE = histogram.getMedian();
- metrics.MEDIAN_ABSOLUTE_DEVIATION = histogram.getMedianAbsoluteDeviation();
-
- final double median = histogram.getMedian();
- double covered = 0;
- double low = median;
- double high = median;
-
- while (low >= histogram.getMin() || high <= histogram.getMax()) {
- final Histogram<Integer>.Bin lowBin = histogram.get((int) low);
- if (lowBin != null) covered += lowBin.getValue();
-
- if (low != high) {
- final Histogram<Integer>.Bin highBin = histogram.get((int) high);
- if (highBin != null) covered += highBin.getValue();
- }
-
- final double percentCovered = covered / total;
- final int distance = (int) (high - low) + 1;
- if (percentCovered >= 0.1 && metrics.WIDTH_OF_10_PERCENT == 0) metrics.WIDTH_OF_10_PERCENT = distance;
- if (percentCovered >= 0.2 && metrics.WIDTH_OF_20_PERCENT == 0) metrics.WIDTH_OF_20_PERCENT = distance;
- if (percentCovered >= 0.3 && metrics.WIDTH_OF_30_PERCENT == 0) metrics.WIDTH_OF_30_PERCENT = distance;
- if (percentCovered >= 0.4 && metrics.WIDTH_OF_40_PERCENT == 0) metrics.WIDTH_OF_40_PERCENT = distance;
- if (percentCovered >= 0.5 && metrics.WIDTH_OF_50_PERCENT == 0) metrics.WIDTH_OF_50_PERCENT = distance;
- if (percentCovered >= 0.6 && metrics.WIDTH_OF_60_PERCENT == 0) metrics.WIDTH_OF_60_PERCENT = distance;
- if (percentCovered >= 0.7 && metrics.WIDTH_OF_70_PERCENT == 0) metrics.WIDTH_OF_70_PERCENT = distance;
- if (percentCovered >= 0.8 && metrics.WIDTH_OF_80_PERCENT == 0) metrics.WIDTH_OF_80_PERCENT = distance;
- if (percentCovered >= 0.9 && metrics.WIDTH_OF_90_PERCENT == 0) metrics.WIDTH_OF_90_PERCENT = distance;
- if (percentCovered >= 0.99 && metrics.WIDTH_OF_99_PERCENT == 0) metrics.WIDTH_OF_99_PERCENT = distance;
-
- --low;
- ++high;
- }
-
- // Trim the histogram down to get rid of outliers that would make the chart useless.
- final Histogram<Integer> trimmedHisto = histogram; //alias it
- if (histogramWidth == null) {
- histogramWidth = (int) (metrics.MEDIAN_INSERT_SIZE + (deviations * metrics.MEDIAN_ABSOLUTE_DEVIATION));
- }
-
- trimmedHisto.trimByWidth(histogramWidth);
-
- metrics.MEAN_INSERT_SIZE = trimmedHisto.getMean();
- metrics.STANDARD_DEVIATION = trimmedHisto.getStandardDeviation();
-
- file.addHistogram(trimmedHisto);
- file.addMetric(metrics);
- }
- }
- }
- }
-}
-
-// Arguments that need to be calculated once per SAMRecord that are then passed to each PerUnitMetricCollector
-// for the given record
-class InsertSizeCollectorArgs {
- private final int insertSize;
- private final SamPairUtil.PairOrientation po;
-
-
- public int getInsertSize() {
- return insertSize;
- }
-
- public SamPairUtil.PairOrientation getPairOrientation() {
- return po;
- }
-
- public InsertSizeCollectorArgs(final int insertSize, final SamPairUtil.PairOrientation po) {
- this.insertSize = insertSize;
- this.po = po;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/analysis/directed/RnaSeqMetricsCollector.java b/src/java/net/sf/picard/analysis/directed/RnaSeqMetricsCollector.java
deleted file mode 100644
index 87ed62b..0000000
--- a/src/java/net/sf/picard/analysis/directed/RnaSeqMetricsCollector.java
+++ /dev/null
@@ -1,391 +0,0 @@
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.analysis.RnaSeqMetrics;
-import net.sf.picard.annotation.Gene;
-import net.sf.picard.annotation.LocusFunction;
-import net.sf.picard.metrics.PerUnitMetricCollector;
-import net.sf.picard.metrics.SAMRecordMultiLevelCollector;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.util.*;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CoordMath;
-import net.sf.samtools.util.SequenceUtil;
-
-import java.io.File;
-import java.util.*;
-
-public class RnaSeqMetricsCollector extends SAMRecordMultiLevelCollector<RnaSeqMetrics, Integer> {
- public enum StrandSpecificity {NONE, FIRST_READ_TRANSCRIPTION_STRAND, SECOND_READ_TRANSCRIPTION_STRAND}
-
- private final int minimumLength;
- private final StrandSpecificity strandSpecificity;
- private final double rrnaFragmentPercentage;
- private final Long ribosomalInitialValue;
-
- final private Set<Integer> ignoredSequenceIndices;
-
- private final OverlapDetector<Gene> geneOverlapDetector;
- private final OverlapDetector<Interval> ribosomalSequenceOverlapDetector;
-
- public RnaSeqMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
- final Long ribosomalBasesInitialValue, OverlapDetector<Gene> geneOverlapDetector, OverlapDetector<Interval> ribosomalSequenceOverlapDetector,
- final HashSet<Integer> ignoredSequenceIndices, final int minimumLength, final StrandSpecificity strandSpecificity,
- final double rrnaFragmentPercentage) {
- this.ribosomalInitialValue = ribosomalBasesInitialValue;
- this.ignoredSequenceIndices = ignoredSequenceIndices;
- this.geneOverlapDetector = geneOverlapDetector;
- this.ribosomalSequenceOverlapDetector = ribosomalSequenceOverlapDetector;
- this.minimumLength = minimumLength;
- this.strandSpecificity = strandSpecificity;
- this.rrnaFragmentPercentage = rrnaFragmentPercentage;
- setup(accumulationLevels, samRgRecords);
- }
-
- @Override
- protected PerUnitMetricCollector<RnaSeqMetrics, Integer, SAMRecord> makeChildCollector(final String sample, final String library, final String readGroup) {
- return new PerUnitRnaSeqMetricsCollector(sample, library, readGroup, ribosomalInitialValue);
- }
-
- public static OverlapDetector<Interval> makeOverlapDetector(final File samFile, final SAMFileHeader header, final File ribosomalIntervalsFile) {
-
- OverlapDetector<Interval> ribosomalSequenceOverlapDetector = new OverlapDetector<Interval>(0, 0);
- if (ribosomalIntervalsFile != null) {
-
- final IntervalList ribosomalIntervals = IntervalList.fromFile(ribosomalIntervalsFile);
- try {
- SequenceUtil.assertSequenceDictionariesEqual(header.getSequenceDictionary(), ribosomalIntervals.getHeader().getSequenceDictionary());
- } catch (SequenceUtil.SequenceListsDifferException e) {
- throw new PicardException("Sequence dictionaries differ in " + samFile.getAbsolutePath() + " and " + ribosomalIntervalsFile.getAbsolutePath(),
- e);
- }
- ribosomalIntervals.unique();
- final List<Interval> intervals = ribosomalIntervals.getIntervals();
- ribosomalSequenceOverlapDetector.addAll(intervals, intervals);
- }
- return ribosomalSequenceOverlapDetector;
- }
-
- public static HashSet<Integer> makeIgnoredSequenceIndicesSet(final SAMFileHeader header, final Set<String> ignoredSequence) {
- final HashSet<Integer> ignoredSequenceIndices = new HashSet<Integer>();
- for (final String sequenceName: ignoredSequence) {
- final SAMSequenceRecord sequenceRecord = header.getSequence(sequenceName);
- if (sequenceRecord == null) {
- throw new PicardException("Unrecognized sequence " + sequenceName + " passed as argument to IGNORE_SEQUENCE");
- }
- ignoredSequenceIndices.add(sequenceRecord.getSequenceIndex());
- }
- return ignoredSequenceIndices;
- }
-
- private class PerUnitRnaSeqMetricsCollector implements PerUnitMetricCollector<RnaSeqMetrics, Integer, SAMRecord> {
-
- final RnaSeqMetrics metrics = new RnaSeqMetrics();
- private final Map<Gene.Transcript, int[]> coverageByTranscript = new HashMap<Gene.Transcript, int[]>();
-
- public PerUnitRnaSeqMetricsCollector(final String sample,
- final String library,
- final String readGroup,
- final Long ribosomalBasesInitialValue) {
- this.metrics.SAMPLE = sample;
- this.metrics.LIBRARY = library;
- this.metrics.READ_GROUP = readGroup;
- this.metrics.RIBOSOMAL_BASES = ribosomalBasesInitialValue;
- }
-
- public void acceptRecord(SAMRecord rec) {
- // Filter out some reads, and collect the total number of PF bases
- if (rec.getReadFailsVendorQualityCheckFlag() || rec.isSecondaryOrSupplementary()) return;
-
- this.metrics.PF_BASES += rec.getReadLength();
- if (rec.getReadUnmappedFlag()) return;
-
- if (ignoredSequenceIndices.contains(rec.getReferenceIndex())) {
- ++this.metrics.IGNORED_READS;
- return;
- }
-
- // Grab information about the alignment and overlapping genes etc.
- final Interval readInterval = new Interval(rec.getReferenceName(), rec.getAlignmentStart(), rec.getAlignmentEnd());
-
- // Attempt to get an interval for the entire fragment (if paired read) else just use the read itself.
- // If paired read is chimeric or has one end unmapped, don't create an interval.
- final Interval fragmentInterval;
- if (!rec.getReadPairedFlag()) {
- fragmentInterval = readInterval;
- } else if (rec.getMateUnmappedFlag() || rec.getReferenceIndex() != rec.getMateReferenceIndex()) {
- fragmentInterval = null;
- } else {
- final int fragmentStart = Math.min(rec.getAlignmentStart(), rec.getMateAlignmentStart());
- final int fragmentEnd = CoordMath.getEnd(fragmentStart, Math.abs(rec.getInferredInsertSize()));
- fragmentInterval = new Interval(rec.getReferenceName(), fragmentStart, fragmentEnd);
- }
- if (fragmentInterval != null) {
- final Collection<Interval> overlappingRibosomalIntervals = ribosomalSequenceOverlapDetector.getOverlaps(fragmentInterval);
- int intersectionLength = 0;
- for (final Interval overlappingInterval : overlappingRibosomalIntervals) {
- final int thisIntersectionLength = overlappingInterval.getIntersectionLength(fragmentInterval);
- intersectionLength = Math.max(intersectionLength, thisIntersectionLength);
- }
- if (intersectionLength/(double)fragmentInterval.length() >= rrnaFragmentPercentage) {
- // Assume entire read is ribosomal.
- // TODO: Should count reads, not bases?
- metrics.RIBOSOMAL_BASES += rec.getReadLength();
- int numAlignedBases = 0;
- for (final AlignmentBlock alignmentBlock : rec.getAlignmentBlocks()) {
- numAlignedBases += alignmentBlock.getLength();
- }
- metrics.PF_ALIGNED_BASES += numAlignedBases;
- return;
- }
- }
-
- final Collection<Gene> overlappingGenes = geneOverlapDetector.getOverlaps(readInterval);
- final List<AlignmentBlock> alignmentBlocks = rec.getAlignmentBlocks();
- boolean overlapsExon = false;
-
- for (final AlignmentBlock alignmentBlock : alignmentBlocks) {
- // Get functional class for each position in the alignment block.
- final LocusFunction[] locusFunctions = new LocusFunction[alignmentBlock.getLength()];
-
- // By default, if base does not overlap with rRNA or gene, it is intergenic.
- Arrays.fill(locusFunctions, 0, locusFunctions.length, LocusFunction.INTERGENIC);
-
- for (final Gene gene : overlappingGenes) {
- for (final Gene.Transcript transcript : gene) {
- transcript.assignLocusFunctionForRange(alignmentBlock.getReferenceStart(), locusFunctions);
-
- // Add coverage to our coverage counter for this transcript
- int[] coverage = this.coverageByTranscript.get(transcript);
- if (coverage == null) {
- coverage = new int[transcript.length()];
- this.coverageByTranscript.put(transcript, coverage);
- }
- transcript.addCoverageCounts(alignmentBlock.getReferenceStart(),
- CoordMath.getEnd(alignmentBlock.getReferenceStart(), alignmentBlock.getLength()),
- coverage);
- }
- }
-
- // Tally the function of each base in the alignment block.
- for (final LocusFunction locusFunction : locusFunctions) {
- ++metrics.PF_ALIGNED_BASES;
- switch (locusFunction) {
- case INTERGENIC:
- ++metrics.INTERGENIC_BASES;
- break;
- case INTRONIC:
- ++metrics.INTRONIC_BASES;
- break;
- case UTR:
- ++metrics.UTR_BASES;
- overlapsExon = true;
- break;
- case CODING:
- ++metrics.CODING_BASES;
- overlapsExon = true;
- break;
- case RIBOSOMAL:
- ++metrics.RIBOSOMAL_BASES;
- break;
- }
- }
- }
-
- // Strand-specificity is tallied on read basis rather than base at a time. A read that aligns to more than one
- // gene is not counted.
- if (overlapsExon && strandSpecificity != StrandSpecificity.NONE && overlappingGenes.size() == 1) {
- final boolean negativeTranscriptionStrand = overlappingGenes.iterator().next().isNegativeStrand();
- final boolean negativeReadStrand = rec.getReadNegativeStrandFlag();
- final boolean readAndTranscriptStrandsAgree = negativeReadStrand == negativeTranscriptionStrand;
- final boolean readOneOrUnpaired = !rec.getReadPairedFlag() || rec.getFirstOfPairFlag();
- final boolean firstReadExpectedToAgree = strandSpecificity == StrandSpecificity.FIRST_READ_TRANSCRIPTION_STRAND;
- final boolean thisReadExpectedToAgree = readOneOrUnpaired == firstReadExpectedToAgree;
- // If the read strand is the same as the strand of the transcript, and the end is the one that is supposed to agree,
- // then the strand specificity for this read is correct.
- // -- OR --
- // If the read strand is not the same as the strand of the transcript, and the end is not the one that is supposed
- // to agree, then the strand specificity for this read is correct.
- if (readAndTranscriptStrandsAgree == thisReadExpectedToAgree) {
- ++metrics.CORRECT_STRAND_READS;
- } else {
- ++metrics.INCORRECT_STRAND_READS;
- }
- }
-
- }
-
- public void finish() {
- if (metrics.PF_ALIGNED_BASES > 0) {
- if (metrics.RIBOSOMAL_BASES != null) {
- metrics.PCT_RIBOSOMAL_BASES = metrics.RIBOSOMAL_BASES / (double) metrics.PF_ALIGNED_BASES;
- }
- metrics.PCT_CODING_BASES = metrics.CODING_BASES / (double) metrics.PF_ALIGNED_BASES;
- metrics.PCT_UTR_BASES = metrics.UTR_BASES / (double) metrics.PF_ALIGNED_BASES;
- metrics.PCT_INTRONIC_BASES = metrics.INTRONIC_BASES / (double) metrics.PF_ALIGNED_BASES;
- metrics.PCT_INTERGENIC_BASES = metrics.INTERGENIC_BASES / (double) metrics.PF_ALIGNED_BASES;
- metrics.PCT_MRNA_BASES = metrics.PCT_CODING_BASES + metrics.PCT_UTR_BASES;
- metrics.PCT_USABLE_BASES = (metrics.CODING_BASES + metrics.UTR_BASES) / (double) metrics.PF_BASES;
- }
-
- if (metrics.CORRECT_STRAND_READS > 0 || metrics.INCORRECT_STRAND_READS > 0) {
- metrics.PCT_CORRECT_STRAND_READS = metrics.CORRECT_STRAND_READS/(double)(metrics.CORRECT_STRAND_READS + metrics.INCORRECT_STRAND_READS);
- }
- }
-
- @Override
- public void addMetricsToFile(final MetricsFile<RnaSeqMetrics, Integer> file) {
- // Compute metrics based on coverage of top 1000 genes
- final Histogram<Integer> normalizedCovByPos = computeCoverageMetrics();
- file.addMetric(metrics);
- file.addHistogram(normalizedCovByPos);
- }
-
- /**
- * Computes a set of coverage based metrics on the mostly highly expressed genes' most highly
- * expressed transcripts.
- */
- private Histogram<Integer> computeCoverageMetrics() {
- final Histogram<Double> cvs = new Histogram<Double>();
- final Histogram<Double> fivePrimeSkews = new Histogram<Double>();
- final Histogram<Double> threePrimeSkews = new Histogram<Double>();
- final Histogram<Double> gapBasesPerKb = new Histogram<Double>();
- final Histogram<Double> fiveToThreeSkews = new Histogram<Double>();
- String prefix = null;
- if (this.metrics.READ_GROUP != null) {
- prefix = this.metrics.READ_GROUP + ".";
- }
- else if (this.metrics.LIBRARY != null) {
- prefix = this.metrics.LIBRARY + ".";
- }
- else if (this.metrics.SAMPLE != null) {
- prefix = this.metrics.SAMPLE + ".";
- }
- else {
- prefix = "All_Reads.";
- }
-
- final Histogram<Integer> normalizedCoverageByNormalizedPosition = new Histogram<Integer>("normalized_position", prefix + "normalized_coverage");
-
- final Map<Gene.Transcript,int[]> transcripts = pickTranscripts(coverageByTranscript);
- final double transcriptCount = transcripts.size();
-
- for (final Map.Entry<Gene.Transcript,int[]> entry : transcripts.entrySet()) {
- final Gene.Transcript tx = entry.getKey();
- final double[] coverage;
- {
- final double[] tmp = MathUtil.promote(entry.getValue());
- if (tx.getGene().isPositiveStrand()) coverage = tmp;
- else coverage = copyAndReverse(tmp);
- }
- final double mean = MathUtil.mean(coverage, 0, coverage.length);
-
- // Calculate the CV of coverage for this tx
- final double stdev = MathUtil.stddev(coverage, 0, coverage.length, mean);
- final double cv = stdev / mean;
- cvs.increment(cv);
-
- // Calculate the 5' and 3' biases
- {
- final int PRIME_BASES = 100;
- final double fivePrimeCoverage = MathUtil.mean(coverage, 0, PRIME_BASES);
- final double threePrimeCoverage = MathUtil.mean(coverage, coverage.length - PRIME_BASES, coverage.length);
-
- fivePrimeSkews.increment(fivePrimeCoverage / mean);
- threePrimeSkews.increment(threePrimeCoverage / mean);
- fiveToThreeSkews.increment(fivePrimeCoverage / threePrimeCoverage);
- }
-
- // Calculate normalized coverage vs. normalized position
- {
- final int lastIndex = coverage.length - 1;
-
- for (int percent=0; percent<=100; ++percent) {
- final double p = percent / 100d;
- final int start = (int) Math.max(0, lastIndex * (p-0.005));
- final int end = (int) Math.min(lastIndex, lastIndex * (p+0.005));
- final int length = end - start + 1;
-
- double sum = 0;
- for (int i=start; i<=end; ++i) sum += coverage[i];
- final double normalized = (sum / length) / mean;
- normalizedCoverageByNormalizedPosition.increment(percent, normalized / transcriptCount);
- }
- }
-
- // Calculate gap bases per kilobase
- // {
- // int gapBases = 0;
- // final double minCoverage = mean * 0.1;
- // for (int i=0; i<coverage.length; ++i) {
- // if (coverage[i] < minCoverage) ++gapBases;
- // }
- // gapBasesPerKb.increment(gapBases / (coverage.length / 1000d));
- // }
- }
-
- this.metrics.MEDIAN_CV_COVERAGE = cvs.getMedian();
- this.metrics.MEDIAN_5PRIME_BIAS = fivePrimeSkews.getMedian();
- this.metrics.MEDIAN_3PRIME_BIAS = threePrimeSkews.getMedian();
- this.metrics.MEDIAN_5PRIME_TO_3PRIME_BIAS = fiveToThreeSkews.getMedian();
-
- return normalizedCoverageByNormalizedPosition;
- }
-
- /** Little method to copy an array and reverse it at the same time. */
- private double[] copyAndReverse(final double[] in) {
- final double[] out = new double[in.length];
- for (int i=0, j=in.length-1; i<in.length; ++i, --j) out[j] = in[i];
- return out;
- }
-
- /** Picks the set of transcripts on which the coverage metrics are to be calculated. */
- public Map<Gene.Transcript, int[]> pickTranscripts(final Map<Gene.Transcript, int[]> transcriptCoverage) {
- final Map<Gene.Transcript, Double> bestPerGene = new HashMap<Gene.Transcript, Double>();
-
- // Make a map of the best transcript per gene to it's mean coverage
- for (final Gene gene : geneOverlapDetector.getAll()) {
- Gene.Transcript best = null;
- double bestMean = 0;
-
- for (final Gene.Transcript tx : gene) {
- final int[] cov = transcriptCoverage.get(tx);
-
- if (tx.length() < Math.max(minimumLength, 100)) continue;
- if (cov == null) continue;
-
- final double mean = MathUtil.mean(MathUtil.promote(cov), 0, cov.length);
- if (mean < 1d) continue;
- if (best == null || mean > bestMean) {
- best = tx;
- bestMean = mean;
- }
- }
-
- if (best != null) bestPerGene.put(best, bestMean);
- }
-
- // Find the 1000th best coverage value
- final double[] coverages = new double[bestPerGene.size()];
- int i=0;
- for (final double d : bestPerGene.values()) coverages[i++] = d;
- Arrays.sort(coverages);
- final double min = coverages.length == 0 ? 0 : coverages[Math.max(0, coverages.length - 1001)];
-
- // And finally build the output map
- final Map<Gene.Transcript, int[]> retval = new HashMap<Gene.Transcript, int[]>();
- for (final Map.Entry<Gene.Transcript,Double> entry : bestPerGene.entrySet()) {
- final Gene.Transcript tx = entry.getKey();
- final double coverage = entry.getValue();
-
- if (coverage >= min) {
- retval.put(tx, transcriptCoverage.get(tx));
- }
- }
-
- return retval;
- }
-
- }
-}
diff --git a/src/java/net/sf/picard/analysis/directed/TargetMetricsCollector.java b/src/java/net/sf/picard/analysis/directed/TargetMetricsCollector.java
deleted file mode 100644
index 2084639..0000000
--- a/src/java/net/sf/picard/analysis/directed/TargetMetricsCollector.java
+++ /dev/null
@@ -1,748 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.metrics.*;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.util.*;
-import net.sf.samtools.*;
-import net.sf.samtools.util.*;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.lang.reflect.Field;
-import java.util.*;
-
-/**
- * TargetMetrics, are metrics to measure how well we hit specific targets (or baits) when using a targeted sequencing process like hybrid selection
- * or Targeted PCR Techniques (TSCA). TargetMetrics at the moment are the metrics that are shared by both HybridSelection and TargetedPcrMetrics.
- *
- * TargetMetricsCollector collects for a run these common metrics and can be sub-classed to provide metrics more specific to a targeted sequencing
- * run.
- *
- * Note: Probe is the name I've used to indicate the bait set or amplicon set (e.g. the individual technological units used to target specific
- * sites).
- *
- * @author Jonathan Burke
- */
-public abstract class TargetMetricsCollector<METRIC_TYPE extends MultilevelMetrics> extends SAMRecordMultiLevelCollector<METRIC_TYPE, Integer> {
-
- // What is considered "near" to the bait
- private static final int NEAR_PROBE_DISTANCE = 250;
-
- //If perTargetCoverage != null then coverage is computed for each specified target and output to this file
- private final File perTargetCoverage;
-
- //The intervals covered by the targeting mechanism (baits in Hybrid Selection, amplicons in TSCA) of this sequencing run
- private final File probeIntervals;
-
- //The name of the set of probes used
- private final String probeSetName;
-
- private static final Log log = Log.getInstance(TargetMetricsCollector.class);
-
- //The interval list indicating the regions targeted by all probes
- private final IntervalList allProbes;
-
- //The interval list of the the regions we intend to cover
- private final IntervalList allTargets;
-
- // Overlap detector for finding overlaps between reads and the experimental targets
- private final OverlapDetector<Interval> targetDetector;
-
- // Overlap detector for finding overlaps between the reads and the baits (and the near bait space)
- private final OverlapDetector<Interval> probeDetector;
-
- private Map<Interval,Double> intervalToGc = null;
-
- //The number of bases within all unique intervals in allProbes
- private final long probeTerritory;
-
- //The number of bases within all unique intervals found in allTargets
- private final long targetTerritory;
-
- private final long genomeSize;
-
- //A map of coverage by target in which coverage is reset every read, this is done
- //so that we can calculate overlap for a read once and the resulting coverage is
- //than added to the cumulative coverage of every collector that collects
- //information on that read
- private Map<Interval, Coverage> coverageByTargetForRead;
- private Coverage [] cov;
-
- //Converts a targetMetric into a more specific metric of METRIC_TYPE
- public abstract METRIC_TYPE convertMetric(final TargetMetrics targetMetrics);
-
- /**
- * Since the targeted metrics (HsMetrics, TargetedPcrMetrics,...) share many of the same values as TargetMetrics, this copy will copy all public attributes in targetMetrics
- * to the outputMetrics' attributes of the same name. If no matching attribute exists in the outputMetrics or the attribute of the target metrics class also is found
- * in targetKeys then it's value is not copied. Further more, targetKeys and outputKeys are attribute name arrays synchronized by the index.
- * For each target key, targetMetrics.<targetKeys[i]> is assigned to outputMetrics.<outputKeys[i]>
- *
- * @param targetMetrics A metric with values to be copied
- * @param outputMetrics A metrics intended to receive values from targetMetrics
- * @param targetKeys Specific names of attributes of targetMetrics to copy to outputMetrics, each key has a corresponding one in outputKeys
- * @param outputKeys Specific names of the destination attributes of outputMetrics that will be filled with values of outputMetrics, each key has a corresponding one in targetKeys
- * @param <MT> The type of metric of outputMetrics
- */
- protected static <MT extends MetricBase> void reflectiveCopy(final TargetMetrics targetMetrics, final MT outputMetrics, final String [] targetKeys, final String [] outputKeys) {
-
- if(targetKeys == null || outputKeys == null) {
- if(outputKeys != null) {
- throw new PicardException("Target keys is null but output keys == " + StringUtil.join(",", outputKeys));
- }
-
- if(targetKeys != null) {
- throw new PicardException("Output keys is null but target keys == " + StringUtil.join(",", targetKeys));
- }
- } else {
- if(targetKeys.length != outputKeys.length) {
- throw new PicardException("Target keys and output keys do not have the same length: " +
- "targetKeys == (" + StringUtil.join(",", targetKeys) + ") " +
- "outputKeys == (" + StringUtil.join(",", outputKeys) + ")");
- }
- }
-
- final Class mtClass = outputMetrics.getClass();
- final Set<Field> targetSet = CollectionUtil.makeSet(TargetMetrics.class.getFields());
-
- for(final String targetKey : targetKeys) {
- if(targetSet.contains(targetKey)) {
- targetSet.remove(targetKey);
- }
- }
-
- final Set<String> outputSet = new HashSet<String>();
- for(final Field field : outputMetrics.getClass().getFields()) {
- outputSet.add(field.getName());
- }
-
- for(final Field field : targetSet) {
- if(outputSet.contains(field.getName())) {
- try {
- final Field outputField = mtClass.getField(field.getName());
- outputField.set(outputMetrics, field.get(targetMetrics));
- } catch (Exception e) {
- throw new PicardException("Exception while copying targetMetrics to " + outputMetrics.getClass().getName(), e);
- }
- }
- }
-
- for(int i = 0; i < targetKeys.length; i++) {
- try {
- Field targetMetricField = TargetMetrics.class.getField(targetKeys[i]);
- Field outputMetricField = mtClass.getField(outputKeys[i]);
- outputMetricField.set(outputMetrics, targetMetricField.get(targetMetrics));
- } catch(final Exception exc) {
- throw new PicardException("Exception while copying TargetMetrics." + targetKeys[i] + " to " + mtClass.getName() + "." + outputKeys[i], exc);
- }
- }
- }
-
- public TargetMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords, final ReferenceSequenceFile refFile,
- final File perTargetCoverage, final File targetIntervals, final File probeIntervals, final String probeSetName) {
- this.perTargetCoverage = perTargetCoverage;
- this.probeIntervals = probeIntervals;
-
- if(probeSetName == null) {
- final String baitFileName = probeIntervals.getName();
- final int tmp = baitFileName.indexOf(".");
- if (tmp > 0) {
- this.probeSetName = baitFileName.substring(0, tmp);
- } else {
- this.probeSetName = null;
- }
- } else {
- this.probeSetName = probeSetName;
- }
-
- this.allProbes = IntervalList.fromFile(probeIntervals);
- this.allTargets = IntervalList.fromFile(targetIntervals);
-
- final List<Interval> uniqueBaits = this.allProbes.getUniqueIntervals();
- this.probeDetector = new OverlapDetector<Interval>(-NEAR_PROBE_DISTANCE, 0);
- this.probeDetector.addAll(uniqueBaits, uniqueBaits);
- this.probeTerritory = Interval.countBases(uniqueBaits);
-
- final List<Interval> uniqueTargets = this.allTargets.getUniqueIntervals();
- targetDetector = new OverlapDetector<Interval>(0,0);
- this.targetDetector.addAll(uniqueTargets, uniqueTargets);
- this.targetTerritory = Interval.countBases(uniqueTargets);
-
- // Populate the coverage by target map
- int i = 0;
- cov = new Coverage[uniqueTargets.size()];
- this.coverageByTargetForRead = new LinkedHashMap<Interval, Coverage>(uniqueTargets.size() * 2, 0.5f);
- for (final Interval target : uniqueTargets) {
- final Coverage coverage = new Coverage(target, 0);
- this.coverageByTargetForRead.put(target, coverage);
- cov[i++] = coverage;
- }
-
- long genomeSizeAccumulator = 0;
- for (final SAMSequenceRecord seq : this.allProbes.getHeader().getSequenceDictionary().getSequences()) {
- genomeSizeAccumulator += seq.getSequenceLength();
- }
- this.genomeSize = genomeSizeAccumulator;
-
-
- if (refFile != null) {
- intervalToGc = new HashMap<Interval,Double>();
- for (final Interval target : uniqueTargets) {
- final ReferenceSequence rs = refFile.getSubsequenceAt(target.getSequence(), target.getStart(), target.getEnd());
- intervalToGc.put(target,SequenceUtil.calculateGc(rs.getBases()));
- }
- }
-
- setup(accumulationLevels, samRgRecords);
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, Integer, SAMRecord> makeChildCollector(final String sample, final String library, final String readGroup) {
- final PerUnitTargetMetricCollector collector = new PerUnitTargetMetricCollector(probeIntervals.getName(), coverageByTargetForRead.keySet(),
- sample, library, readGroup, probeTerritory, targetTerritory, genomeSize,
- intervalToGc);
- if (this.probeSetName != null) {
- collector.setBaitSetName(probeSetName);
- }
-
- return collector;
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, Integer, SAMRecord> makeAllReadCollector() {
- final PerUnitTargetMetricCollector collector = (PerUnitTargetMetricCollector) makeChildCollector(null, null, null);
- if (perTargetCoverage != null) {
- collector.setPerTargetOutput(perTargetCoverage);
- }
-
- return collector;
- }
-
- /**
- * Collect the Target Metrics for one unit of "accumulation" (i.e. for one sample, or for one library ...)
- */
- public class PerUnitTargetMetricCollector implements PerUnitMetricCollector<METRIC_TYPE, Integer, SAMRecord> {
-
- private final Map<Interval,Double> intervalToGc;
- private File perTargetOutput;
-
- // A Map to accumulate per-bait-region (i.e. merge of overlapping targets) coverage. */
- private final Map<Interval, Coverage> coverageByTarget;
-
- private final TargetMetrics metrics = new TargetMetrics();
-
- /**
- * Constructor that parses the squashed reference to genome reference file and stores the
- * information in a map for later use.
- */
- public PerUnitTargetMetricCollector(final String probeSetName, final Set<Interval> coverageTargets,
- final String sample, final String library, final String readGroup,
- final long probeTerritory, final long targetTerritory, final long genomeSize,
- final Map<Interval, Double> intervalToGc) {
- this.metrics.SAMPLE = sample;
- this.metrics.LIBRARY = library;
- this.metrics.READ_GROUP = readGroup;
- this.metrics.PROBE_SET = probeSetName;
-
- metrics.PROBE_TERRITORY = probeTerritory;
- metrics.TARGET_TERRITORY = targetTerritory;
- metrics.GENOME_SIZE = genomeSize;
-
- this.coverageByTarget = new LinkedHashMap<Interval, Coverage>(coverageTargets.size() * 2, 0.5f);
- for (Interval target : coverageTargets) {
- this.coverageByTarget.put(target, new Coverage(target,0));
- }
-
- this.intervalToGc = intervalToGc;
- }
-
- /** If set, the metrics collector will output per target coverage information to this file. */
- public void setPerTargetOutput(final File perTargetOutput) {
- this.perTargetOutput = perTargetOutput;
- }
-
- /** Sets the name of the bait set explicitly instead of inferring it from the bait file. */
- public void setBaitSetName(final String name) {
- this.metrics.PROBE_SET = name;
- }
-
- /** Adds information about an individual SAMRecord to the statistics. */
- public void acceptRecord(final SAMRecord rec) {
- // Just plain avoid records that are marked as not-primary
- if (rec.isSecondaryOrSupplementary()) return;
-
- this.metrics.TOTAL_READS += 1;
-
- // Check for PF reads
- if (rec.getReadFailsVendorQualityCheckFlag()) {
- return;
- }
-
- // Prefetch the list of target and bait overlaps here as they're needed multiple times.
- final Collection<Interval> targets;
- final Collection<Interval> probes;
-
- if (!rec.getReadUnmappedFlag()) {
- final Interval read = new Interval(rec.getReferenceName(), rec.getAlignmentStart(), rec.getAlignmentEnd());
- targets = targetDetector.getOverlaps(read);
- probes = probeDetector.getOverlaps(read);
- }
- else {
- targets = null;
- probes = null;
- }
-
- ++this.metrics.PF_READS;
- this.metrics.PF_BASES += rec.getReadLength();
-
- // And now calculate the values we need for HS_LIBRARY_SIZE
- if (rec.getReadPairedFlag() && rec.getFirstOfPairFlag() && !rec.getReadUnmappedFlag() && !rec.getMateUnmappedFlag()) {
- if (probes != null && !probes.isEmpty()) {
- ++this.metrics.PF_SELECTED_PAIRS;
- if (!rec.getDuplicateReadFlag()) ++this.metrics.PF_SELECTED_UNIQUE_PAIRS;
- }
- }
-
- // Check for reads that are marked as duplicates
- if (rec.getDuplicateReadFlag()) {
- return;
- }
- else {
- ++this.metrics.PF_UNIQUE_READS;
- }
-
- // Don't bother with reads that didn't align uniquely
- if (rec.getReadUnmappedFlag() || rec.getMappingQuality() == 0) {
- return;
- }
-
- this.metrics.PF_UQ_READS_ALIGNED += 1;
- for (final AlignmentBlock block : rec.getAlignmentBlocks()) {
- this.metrics.PF_UQ_BASES_ALIGNED += block.getLength();
- }
-
- final boolean mappedInPair = rec.getReadPairedFlag() && !rec.getMateUnmappedFlag();
-
- // Find the target overlaps
- if (targets != null && !targets.isEmpty()) {
- for (final Interval target : targets) {
- final Coverage coverage = this.coverageByTarget.get(target);
-
- for (final AlignmentBlock block : rec.getAlignmentBlocks()) {
- final int end = CoordMath.getEnd(block.getReferenceStart(), block.getLength());
- for (int pos=block.getReferenceStart(); pos<=end; ++ pos) {
- if (pos >= target.getStart() && pos <= target.getEnd()) {
- ++this.metrics.ON_TARGET_BASES;
- if (mappedInPair) ++this.metrics.ON_TARGET_FROM_PAIR_BASES;
- coverage.addBase(pos - target.getStart());
- }
- }
- }
- }
- }
-
- // Now do the bait overlaps
- int mappedBases = 0;
- for (final AlignmentBlock block : rec.getAlignmentBlocks()) mappedBases += block.getLength();
- int onBaitBases = 0;
-
- if (probes != null && !probes.isEmpty()) {
- for (final Interval bait : probes) {
- for (final AlignmentBlock block : rec.getAlignmentBlocks()) {
- final int end = CoordMath.getEnd(block.getReferenceStart(), block.getLength());
-
- for (int pos=block.getReferenceStart(); pos<=end; ++pos) {
- if (pos >= bait.getStart() && pos <= bait.getEnd()) ++onBaitBases;
- }
- }
- }
-
- this.metrics.ON_PROBE_BASES += onBaitBases;
- this.metrics.NEAR_PROBE_BASES += (mappedBases - onBaitBases);
- }
- else {
- this.metrics.OFF_PROBE_BASES += mappedBases;
- }
-
- }
-
- @Override
- public void finish() {
- metrics.PCT_PF_READS = metrics.PF_READS / (double) metrics.TOTAL_READS;
- metrics.PCT_PF_UQ_READS = metrics.PF_UNIQUE_READS / (double) metrics.TOTAL_READS;
- metrics.PCT_PF_UQ_READS_ALIGNED = metrics.PF_UQ_READS_ALIGNED / (double) metrics.PF_UNIQUE_READS;
-
- final double denominator = (metrics.ON_PROBE_BASES + metrics.NEAR_PROBE_BASES + metrics.OFF_PROBE_BASES);
-
- metrics.PCT_SELECTED_BASES = (metrics.ON_PROBE_BASES + metrics.NEAR_PROBE_BASES) / denominator;
- metrics.PCT_OFF_PROBE = metrics.OFF_PROBE_BASES / denominator;
- metrics.ON_PROBE_VS_SELECTED = metrics.ON_PROBE_BASES / (double) (metrics.ON_PROBE_BASES + metrics.NEAR_PROBE_BASES);
- metrics.MEAN_PROBE_COVERAGE = metrics.ON_PROBE_BASES / (double) metrics.PROBE_TERRITORY;
- metrics.FOLD_ENRICHMENT = (metrics.ON_PROBE_BASES/ denominator) / ((double) metrics.PROBE_TERRITORY / metrics.GENOME_SIZE);
-
- calculateTargetCoverageMetrics();
- calculateGcMetrics();
- }
-
- /** Calculates how much additional sequencing is needed to raise 80% of bases to the mean for the lane. */
- private void calculateTargetCoverageMetrics() {
- final short[] depths = new short[(int) this.metrics.TARGET_TERRITORY]; // may not use entire array
- int zeroCoverageTargets = 0;
- int depthIndex = 0;
- double totalCoverage = 0;
- int basesConsidered = 0;
-
- for (final Coverage c : this.coverageByTarget.values()) {
- if (!c.hasCoverage()) {
- ++zeroCoverageTargets;
- continue;
- }
-
- final short[] targetDepths = c.getDepths();
- basesConsidered += targetDepths.length;
-
- for (final short depth : targetDepths) {
- depths[depthIndex++] = depth;
- totalCoverage += depth;
- }
- }
-
- this.metrics.MEAN_TARGET_COVERAGE = totalCoverage / basesConsidered;
-
- // Sort the array (ASCENDING) and then find the base the coverage value that lies at the 80%
- // line, which is actually at 20% into the array now
- Arrays.sort(depths);
- final int indexOf80thPercentile = (depths.length - 1 - basesConsidered) + (int) (basesConsidered * 0.2);
- final int coverageAt80thPercentile = depths[indexOf80thPercentile];
- this.metrics.FOLD_80_BASE_PENALTY = this.metrics.MEAN_TARGET_COVERAGE / coverageAt80thPercentile;
- this.metrics.ZERO_CVG_TARGETS_PCT = zeroCoverageTargets / (double) allTargets.getIntervals().size();
-
- // Now do the "how many bases at X" calculations.
- int totalTargetBases = 0;
- int targetBases2x = 0;
- int targetBases10x = 0;
- int targetBases20x = 0;
- int targetBases30x = 0;
- int targetBases40x = 0;
- int targetBases50x = 0;
- int targetBases100x = 0;
-
- for (final Coverage c : this.coverageByTarget.values()) {
- for (final short depth : c.getDepths()) {
- ++totalTargetBases;
-
- if (depth >= 2) {
- ++targetBases2x;
- if (depth >=10) {
- ++targetBases10x;
- if (depth >= 20) {
- ++targetBases20x;
- if (depth >=30) {
- ++targetBases30x;
- if (depth >=40) {
- ++targetBases40x;
- if (depth >=50) {
- ++targetBases50x;
- if (depth >=100) {
- ++targetBases100x;
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- this.metrics.PCT_TARGET_BASES_2X = (double) targetBases2x / (double) totalTargetBases;
- this.metrics.PCT_TARGET_BASES_10X = (double) targetBases10x / (double) totalTargetBases;
- this.metrics.PCT_TARGET_BASES_20X = (double) targetBases20x / (double) totalTargetBases;
- this.metrics.PCT_TARGET_BASES_30X = (double) targetBases30x / (double) totalTargetBases;
- this.metrics.PCT_TARGET_BASES_40X = (double) targetBases40x / (double) totalTargetBases;
- this.metrics.PCT_TARGET_BASES_50X = (double) targetBases50x / (double) totalTargetBases;
- this.metrics.PCT_TARGET_BASES_100X = (double) targetBases100x / (double) totalTargetBases;
- }
-
- private void calculateGcMetrics() {
- if (this.intervalToGc != null) {
- log.info("Calculating GC metrics");
-
- // Setup the output file if we're outputting per-target coverage
- FormatUtil fmt = new FormatUtil();
- final PrintWriter out;
- try {
- if (perTargetOutput != null) {
- out = new PrintWriter(perTargetOutput);
- out.println("chrom\tstart\tend\tlength\tname\t%gc\tmean_coverage\tnormalized_coverage");
- }
- else {
- out = null;
- }
- }
- catch (IOException ioe) { throw new RuntimeIOException(ioe); }
-
- final int bins = 101;
- final long[] targetBasesByGc = new long[bins];
- final long[] alignedBasesByGc = new long[bins];
-
- for (final Map.Entry<Interval,Coverage> entry : this.coverageByTarget.entrySet()) {
- final Interval interval = entry.getKey();
- final Coverage cov = entry.getValue();
-
- final double gcDouble = this.intervalToGc.get(interval);
- final int gc = (int) Math.round(gcDouble * 100);
-
- targetBasesByGc[gc] += interval.length();
- alignedBasesByGc[gc] += cov.getTotal();
-
- if (out != null) {
- final double coverage = cov.getTotal() / (double) interval.length();
-
- out.println(interval.getSequence() + "\t" +
- interval.getStart() + "\t" +
- interval.getEnd() + "\t" +
- interval.length() + "\t" +
- interval.getName() + "\t" +
- fmt.format(gcDouble) + "\t" +
- fmt.format(coverage) + "\t" +
- fmt.format(coverage / this.metrics.MEAN_TARGET_COVERAGE)
- );
- }
- }
-
- if (out != null) out.close();
-
- // Total things up
- long totalTarget = 0;
- long totalBases = 0;
- for (int i=0; i<targetBasesByGc.length; ++i) {
- totalTarget += targetBasesByGc[i];
- totalBases += alignedBasesByGc[i];
- }
-
- // Re-express things as % of the totals and calculate dropout metrics
- for (int i=0; i<targetBasesByGc.length; ++i) {
- final double targetPct = targetBasesByGc[i] / (double) totalTarget;
- final double alignedPct = alignedBasesByGc[i] / (double) totalBases;
-
- double dropout = (alignedPct - targetPct) * 100d;
- if (dropout < 0) {
- dropout = Math.abs(dropout);
-
- if (i <=50) this.metrics.AT_DROPOUT += dropout;
- if (i >=50) this.metrics.GC_DROPOUT += dropout;
- }
- }
- }
- }
-
-
- @Override
- public void addMetricsToFile(MetricsFile<METRIC_TYPE, Integer> hsMetricsComparableMetricsFile) {
- hsMetricsComparableMetricsFile.addMetric(convertMetric(this.metrics));
- }
- }
-
- /**
- * A simple class that is used to store the coverage information about an interval.
- *
- * @author Tim Fennell
- */
- public static class Coverage {
- private final Interval interval;
- private final short[] depths;
-
- /** Constructs a new coverage object for the provided mapping with the desired padding either side. */
- public Coverage(final Interval i, final int padding) {
- this.interval = i;
- this.depths = new short[interval.length() + 2*padding];
- }
-
- /** Adds a single point of depth at the desired offset into the coverage array. */
- public void addBase(final int offset) {
- if (offset >= 0 && offset < this.depths.length) {
- // Prevent overflow if depth is too great, while avoiding doubling memory requirement.
- if (this.depths[offset] < Short.MAX_VALUE) {
- this.depths[offset] += 1;
- }
- }
- }
-
- /** Returns true if any base in the range has coverage of > 1 */
- public boolean hasCoverage() {
- for (final short s : depths) {
- if (s > 1) return true;
- }
-
- return false;
- }
-
- /** Gets the coverage depths as an array of shorts. */
- public short[] getDepths() { return this.depths; }
-
- public int getTotal() {
- int total = 0;
- for (int i=0; i<depths.length; ++i) total += depths[i];
- return total;
- }
-
- @Override
- public String toString() {
- return "TargetedMetricCollector(interval=" + interval + ", depths = [" + StringUtil.intValuesToString(this.depths) + "])";
- }
- }
-}
-
-/**
- * For a sequencing run targeting specific regions of the genome this metric class holds metrics describing
- * how well those regions were targeted.
- */
-class TargetMetrics extends MultilevelMetrics {
- /** The name of the PROBE_SET (BAIT SET, AMPLICON SET, ...) used in this metrics collection run */
- public String PROBE_SET;
-
- /** The number of unique bases covered by the intervals of all probes in the probe set */
- public long PROBE_TERRITORY;
-
- /** The number of unique bases covered by the intervals of all targets that should be covered */
- public long TARGET_TERRITORY;
-
- /** The number of bases in the reference genome used for alignment. */
- public long GENOME_SIZE;
-
- /** The total number of reads in the SAM or BAM file examined. */
- public long TOTAL_READS;
-
- /** The number of reads that pass the vendor's filter. */
- public long PF_READS;
-
- /** The number of bases in the SAM or BAM file to be examined */
- public long PF_BASES;
-
- /** The number of PF reads that are not marked as duplicates. */
- public long PF_UNIQUE_READS;
-
- // Tracks the number of read pairs that we see that are PF (used to calculate library size) */
- public long PF_SELECTED_PAIRS;
-
- // Tracks the number of unique PF reads pairs we see (used to calc library size)
- public long PF_SELECTED_UNIQUE_PAIRS;
-
- /** The number of PF unique reads that are aligned with mapping score > 0 to the reference genome. */
- public long PF_UQ_READS_ALIGNED;
-
- /** The number of PF unique bases that are aligned with mapping score > 0 to the reference genome. */
- public long PF_UQ_BASES_ALIGNED;
-
- /** The number of PF aligned probed that mapped to a baited region of the genome. */
- public long ON_PROBE_BASES;
-
- /** The number of PF aligned bases that mapped to within a fixed interval of a probed region, but not on a baited region. */
- public long NEAR_PROBE_BASES;
-
- /** The number of PF aligned bases that mapped to neither on or near a probe. */
- public long OFF_PROBE_BASES;
-
- /** The number of PF aligned bases that mapped to a targeted region of the genome. */
- public long ON_TARGET_BASES;
-
- /** The number of PF aligned bases that are mapped in pair to a targeted region of the genome. */
- public long ON_TARGET_FROM_PAIR_BASES;
-
- //metrics below here are derived after collection
-
- /** PF reads / total reads. The percent of reads passing filter. */
- public double PCT_PF_READS;
-
- /** PF Unique Reads / Total Reads. */
- public double PCT_PF_UQ_READS;
-
- /** PF Reads Aligned / PF Reads. */
- public double PCT_PF_UQ_READS_ALIGNED;
-
- /** On+Near Bait Bases / PF Bases Aligned. */
- public double PCT_SELECTED_BASES;
-
- /** The percentage of aligned PF bases that mapped neither on or near a probe. */
- public double PCT_OFF_PROBE;
-
- /** The percentage of on+near probe bases that are on as opposed to near. */
- public double ON_PROBE_VS_SELECTED;
-
- /** The mean coverage of all probes in the experiment. */
- public double MEAN_PROBE_COVERAGE;
-
- /** The fold by which the probed region has been amplified above genomic background. */
- public double FOLD_ENRICHMENT;
-
- /** The mean coverage of targets that recieved at least coverage depth = 2 at one base. */
- public double MEAN_TARGET_COVERAGE;
-
- /** The number of targets that did not reach coverage=2 over any base. */
- public double ZERO_CVG_TARGETS_PCT;
-
- /**
- * The fold over-coverage necessary to raise 80% of bases in "non-zero-cvg" targets to
- * the mean coverage level in those targets.
- */
- public double FOLD_80_BASE_PENALTY;
-
- /** The percentage of ALL target bases acheiving 2X or greater coverage. */
- public double PCT_TARGET_BASES_2X;
- /** The percentage of ALL target bases acheiving 10X or greater coverage. */
- public double PCT_TARGET_BASES_10X;
- /** The percentage of ALL target bases acheiving 20X or greater coverage. */
- public double PCT_TARGET_BASES_20X;
- /** The percentage of ALL target bases acheiving 30X or greater coverage. */
- public double PCT_TARGET_BASES_30X;
- /** The percentage of ALL target bases acheiving 40X or greater coverage. */
- public double PCT_TARGET_BASES_40X;
- /** The percentage of ALL target bases acheiving 50X or greater coverage. */
- public double PCT_TARGET_BASES_50X;
- /** The percentage of ALL target bases acheiving 100X or greater coverage. */
- public double PCT_TARGET_BASES_100X;
-
- /**
- * A measure of how undercovered <= 50% GC regions are relative to the mean. For each GC bin [0..50]
- * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
- * AT DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
- * reads that should have mapped to GC<=50% regions mapped elsewhere.
- */
- public double AT_DROPOUT;
-
- /**
- * A measure of how undercovered >= 50% GC regions are relative to the mean. For each GC bin [50..100]
- * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
- * GC DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
- * reads that should have mapped to GC>=50% regions mapped elsewhere.
- */
- public double GC_DROPOUT;
-}
diff --git a/src/java/net/sf/picard/analysis/directed/TargetedPcrMetrics.java b/src/java/net/sf/picard/analysis/directed/TargetedPcrMetrics.java
deleted file mode 100644
index f905759..0000000
--- a/src/java/net/sf/picard/analysis/directed/TargetedPcrMetrics.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.metrics.MultilevelMetrics;
-
-/** Metrics class for targeted pcr runs such as TSCA runs */
-public class TargetedPcrMetrics extends MultilevelMetrics {
-
- /** The name of the amplicon set used in this metrics collection run */
- public String CUSTOM_AMPLICON_SET;
-
- /** The number of bases in the reference genome used for alignment. */
- public long GENOME_SIZE;
-
- /** The number of unique bases covered by the intervals of all amplicons in the amplicon set */
- public long AMPLICON_TERRITORY;
-
- /** The number of unique bases covered by the intervals of all targets that should be covered */
- public long TARGET_TERRITORY;
-
- /** The total number of reads in the SAM or BAM file examine. */
- public long TOTAL_READS;
-
- /** The number of reads that pass the vendor's filter. */
- public long PF_READS;
-
- /** THe number of bases in the SAM or BAM file to be examined */
- public long PF_BASES;
-
- /** The number of PF reads that are not marked as duplicates. */
- public long PF_UNIQUE_READS;
-
- /** PF reads / total reads. The percent of reads passing filter. */
- public double PCT_PF_READS;
-
- /** PF Unique Reads / Total Reads. */
- public double PCT_PF_UQ_READS;
-
- /** The number of PF unique reads that are aligned with mapping score > 0 to the reference genome. */
- public long PF_UQ_READS_ALIGNED;
-
- /** Tracks the number of read pairs that we see that are PF (used to calculate library size) */
- public long PF_SELECTED_PAIRS;
-
- /** Tracks the number of unique PF reads pairs we see (used to calc library size) */
- public long PF_SELECTED_UNIQUE_PAIRS;
-
- /** PF Reads Aligned / PF Reads. */
- public double PCT_PF_UQ_READS_ALIGNED;
-
- /** The number of PF unique bases that are aligned with mapping score > 0 to the reference genome. */
- public long PF_UQ_BASES_ALIGNED;
-
- /** The number of PF aligned amplified that mapped to an amplified region of the genome. */
- public long ON_AMPLICON_BASES;
-
- /** The number of PF aligned bases that mapped to within a fixed interval of an amplified region, but not on a baited region. */
- public long NEAR_AMPLICON_BASES;
-
- /** The number of PF aligned bases that mapped to neither on or near an amplicon. */
- public long OFF_AMPLICON_BASES;
-
- /** The number of PF aligned bases that mapped to a targeted region of the genome. */
- public long ON_TARGET_BASES;
-
- /** The number of PF aligned bases that are mapped in pair to a targeted region of the genome. */
- public long ON_TARGET_FROM_PAIR_BASES;
-
- /** On+Near Amplicon Bases / PF Bases Aligned. */
- public double PCT_AMPLIFIED_BASES;
-
- /** The percentage of aligned PF bases that mapped neither on or near an amplicon. */
- public double PCT_OFF_AMPLICON;
-
- /** The percentage of on+near amplicon bases that are on as opposed to near. */
- public double ON_AMPLICON_VS_SELECTED;
-
- /** The mean coverage of all amplicons in the experiment. */
- public double MEAN_AMPLICON_COVERAGE;
-
- /** The mean coverage of targets that recieved at least coverage depth = 2 at one base. */
- public double MEAN_TARGET_COVERAGE;
-
- /** The fold by which the amplicon region has been amplified above genomic background. */
- public double FOLD_ENRICHMENT;
-
- /** The number of targets that did not reach coverage=2 over any base. */
- public double ZERO_CVG_TARGETS_PCT;
-
- /**
- * The fold over-coverage necessary to raise 80% of bases in "non-zero-cvg" targets to
- * the mean coverage level in those targets.
- */
- public double FOLD_80_BASE_PENALTY;
-
- /** The percentage of ALL target bases achieving 2X or greater coverage. */
- public double PCT_TARGET_BASES_2X;
- /** The percentage of ALL target bases achieving 10X or greater coverage. */
- public double PCT_TARGET_BASES_10X;
- /** The percentage of ALL target bases achieving 20X or greater coverage. */
- public double PCT_TARGET_BASES_20X;
- /** The percentage of ALL target bases achieving 30X or greater coverage. */
- public double PCT_TARGET_BASES_30X;
-
- /**
- * A measure of how undercovered <= 50% GC regions are relative to the mean. For each GC bin [0..50]
- * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
- * AT DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
- * reads that should have mapped to GC<=50% regions mapped elsewhere.
- */
- public double AT_DROPOUT;
-
- /**
- * A measure of how undercovered >= 50% GC regions are relative to the mean. For each GC bin [50..100]
- * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
- * GC DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
- * reads that should have mapped to GC>=50% regions mapped elsewhere.
- */
- public double GC_DROPOUT;
-}
diff --git a/src/java/net/sf/picard/analysis/directed/TargetedPcrMetricsCollector.java b/src/java/net/sf/picard/analysis/directed/TargetedPcrMetricsCollector.java
deleted file mode 100644
index 49c9b0d..0000000
--- a/src/java/net/sf/picard/analysis/directed/TargetedPcrMetricsCollector.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis.directed;
-
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.samtools.*;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * Calculates HS metrics for a given SAM or BAM file. Requires the input of a list of
- * target intervals and a list of bait intervals. Can be invoked either on an entire
- * iterator of SAMRecords or be passed SAMRecords one at a time.
- *
- * @author Jonathan Burke
- */
-public class TargetedPcrMetricsCollector extends TargetMetricsCollector<TargetedPcrMetrics> {
- //maybe instead just inject this into the TargetedMetricCollector ->
-
- public TargetedPcrMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords, final ReferenceSequenceFile refFile, final File perTargetCoverage, final File targetIntervals, final File probeIntervals, final String probeSetName) {
- super(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
- }
-
- @Override
- public TargetedPcrMetrics convertMetric(TargetMetrics targetMetrics) {
- final TargetedPcrMetrics pcrMetrics = new TargetedPcrMetrics();
- TargetMetricsCollector.reflectiveCopy(targetMetrics, pcrMetrics,
- new String[]{"PROBE_SET", "PROBE_TERRITORY", "ON_PROBE_BASES", "NEAR_PROBE_BASES", "OFF_PROBE_BASES", "PCT_SELECTED_BASES", "PCT_OFF_PROBE", "ON_PROBE_VS_SELECTED", "MEAN_PROBE_COVERAGE"},
- new String[]{"CUSTOM_AMPLICON_SET", "AMPLICON_TERRITORY", "ON_AMPLICON_BASES", "NEAR_AMPLICON_BASES", "OFF_AMPLICON_BASES", "PCT_AMPLIFIED_BASES", "PCT_OFF_AMPLICON", "ON_AMPLICON_VS_SELECTED", "MEAN_AMPLICON_COVERAGE"}
- );
-
- return pcrMetrics;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/annotation/AnnotationException.java b/src/java/net/sf/picard/annotation/AnnotationException.java
deleted file mode 100644
index 6e9fe40..0000000
--- a/src/java/net/sf/picard/annotation/AnnotationException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.annotation;
-
-import net.sf.picard.PicardException;
-
-/**
- * Exception thrown when loading gene annotations. It is expected that there will be inconsistencies in annotation
- * files, such that these exceptions may be reported but not cause program termination.
- */
-public class AnnotationException extends PicardException{
- public AnnotationException(String message) {
- super(message);
- }
-
- public AnnotationException(String message, Throwable throwable) {
- super(message, throwable);
- }
-}
diff --git a/src/java/net/sf/picard/annotation/Gene.java b/src/java/net/sf/picard/annotation/Gene.java
deleted file mode 100644
index 438ace5..0000000
--- a/src/java/net/sf/picard/annotation/Gene.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.annotation;
-
-import net.sf.picard.util.Interval;
-import net.sf.samtools.util.CoordMath;
-import sun.tools.tree.LengthExpression;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Holds annotation of a gene for storage in an OverlapDetector. May hold multiple transcripts for the same gene.
- * The transcripts must all be relative to the same strand.
- */
-public class Gene extends Interval implements Iterable<Gene.Transcript> {
- private final Map<String, Transcript> transcripts = new HashMap<String, Transcript>();
-
-
- public Gene(final String sequence, final int start, final int end, final boolean negative, final String name) {
- super(sequence, start, end, negative, name);
- }
-
- public Transcript addTranscript(final String name, final int transcriptionStart, final int transcriptionEnd, final int codingStart, final int codingEnd, final int numExons) {
- if (transcripts.containsKey(name)) {
- throw new AnnotationException("Transcript " + name + " for gene " + this.getName() + " appears more than once");
- }
- else {
- final Transcript tx = new Transcript(name, transcriptionStart, transcriptionEnd, codingStart, codingEnd, numExons);
- transcripts.put(name, tx);
- return tx;
- }
- }
-
- public Iterator<Transcript> iterator() {
- return transcripts.values().iterator();
- }
-
- /**
- * A single transcript of a gene. Sequence name is stored in the enclosing object (class Gene).
- */
- public class Transcript {
- public final String name;
- public final int transcriptionStart;
- public final int transcriptionEnd;
- public final int codingStart;
- public final int codingEnd;
- public final Exon[] exons;
- private int length; // the number of bases in the transcript
-
- /**
- * 1-based, inclusive representation of an exon. The sequence name is stored in an enclosing object (class Gene).
- */
- public class Exon {
- public final int start;
- public final int end;
-
- public Exon(final int start, final int end) {
- this.start = start;
- this.end = end;
- }
- }
-
- public Transcript(final String name, final int transcriptionStart, final int transcriptionEnd, final int codingStart, final int codingEnd, final int numExons) {
- this.name = name;
- this.transcriptionStart = transcriptionStart;
- this.transcriptionEnd = transcriptionEnd;
- this.codingStart = codingStart;
- this.codingEnd = codingEnd;
- this.exons = new Exon[numExons];
- }
-
- public Exon addExon(final int start, final int end) {
- for (int i=0; i<this.exons.length; ++i) {
- if (exons[i] == null) {
- exons[i] = new Exon(start, end);
- this.length += CoordMath.getLength(start, end);
- return exons[i];
- }
- }
-
- throw new IllegalStateException("Attempting to add more exons that exist for transcript.");
- }
-
- public int start() {
- return exons[0].start;
- }
-
- public int end() {
- return exons[exons.length -1].end;
- }
-
- public int length() {
- return this.length;
- }
-
- public boolean isSoloTranscript() {
- return Gene.this.transcripts.size() == 1;
- }
-
- public Gene getGene() {
- return Gene.this;
- }
-
- /**
- * Write into locusFunctions the function of each position from start to start + locusFunctions.length
- * relative to this transcript. Does not overwrite an existing value in locusFunctions that is stronger
- * than the function for that locus in this transcript.
- * @param start 1-based genomic coordinate of the first position in locusFunctions.
- * @param locusFunctions
- */
- public void assignLocusFunctionForRange(final int start, final LocusFunction[] locusFunctions) {
- for (int i = Math.max(start, transcriptionStart);
- i <= Math.min(transcriptionEnd, CoordMath.getEnd(start, locusFunctions.length)); ++i) {
-
- if (locusFunctions[i - start].ordinal() > LocusFunction.CODING.ordinal()) continue;
-
- final LocusFunction locusFunction;
- if (inExon(i)) {
- if (utr(i)) locusFunction = LocusFunction.UTR;
- else locusFunction = LocusFunction.CODING;
- } else locusFunction = LocusFunction.INTRONIC;
- if (locusFunction.ordinal() > locusFunctions[i - start].ordinal()) {
- locusFunctions[i - start] = locusFunction;
- }
- }
- }
-
- /**
- *
- * @param genomeStart
- * @param genomeEnd
- * @param coverage
- */
- public void addCoverageCounts(final int genomeStart, final int genomeEnd, final int[] coverage) {
- for (int i=genomeStart; i<genomeEnd; ++i) {
- final int txBase = getTranscriptCoordinate(i);
- if (txBase > 0) coverage[txBase-1]++;
- }
- }
-
- /** Given a coordinate on the genome (same chromosome) give the corresponding coordinate in the transcript. */
- public int getTranscriptCoordinate(final int genomeCoordinate) {
- int exonOffset = 0;
- for (final Exon e : exons) {
- if (genomeCoordinate >= e.start && genomeCoordinate <=e.end) {
- return (genomeCoordinate - e.start + 1) + exonOffset;
- }
- else {
- exonOffset += CoordMath.getLength(e.start, e.end);
- }
- }
-
- return -1;
- }
-
- private boolean utr(final int locus) {
- return locus < codingStart || locus > codingEnd;
- }
-
- private boolean inExon(final int locus) {
- for (int i = 0; i < exons.length; ++i) {
- final Exon exon = exons[i];
- if (exon.start > locus) return false;
- if (inRange(exon.start, exon.end, locus)) return true;
- }
- return false;
- }
-
- private boolean inRange(final int start, final int end, final int locus) {
- return (locus >= start && locus <= end);
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final Transcript that = (Transcript) o;
-
- if (codingEnd != that.codingEnd) return false;
- if (codingStart != that.codingStart) return false;
- if (transcriptionEnd != that.transcriptionEnd) return false;
- if (transcriptionStart != that.transcriptionStart) return false;
- if (!name.equals(that.name)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = name.hashCode();
- result = 31 * result + transcriptionStart;
- result = 31 * result + transcriptionEnd;
- result = 31 * result + codingStart;
- result = 31 * result + codingEnd;
- return result;
- }
- }
-}
diff --git a/src/java/net/sf/picard/annotation/GeneAnnotationReader.java b/src/java/net/sf/picard/annotation/GeneAnnotationReader.java
deleted file mode 100644
index fe01f74..0000000
--- a/src/java/net/sf/picard/annotation/GeneAnnotationReader.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.annotation;
-
-import net.sf.picard.util.OverlapDetector;
-import net.sf.samtools.SAMSequenceDictionary;
-
-import java.io.File;
-
-/**
- * Load gene annotations into an OverlapDetector of Gene objects.
- * Currently only refFlat format is accepted.
- */
-public class GeneAnnotationReader {
- public static OverlapDetector<Gene> loadRefFlat(File refFlatFile, SAMSequenceDictionary sequenceDictionary) {
- return RefFlatReader.load(refFlatFile, sequenceDictionary);
- }
-}
diff --git a/src/java/net/sf/picard/annotation/LocusFunction.java b/src/java/net/sf/picard/annotation/LocusFunction.java
deleted file mode 100644
index fa735e5..0000000
--- a/src/java/net/sf/picard/annotation/LocusFunction.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.annotation;
-
-/**
- * Describes the behavior of a locus relative to a gene. Note that these are enumerated in a specific order:
- * (INTERGENIC, INTRONIC, UTR, CODING, RIBOSOMAL) so that e.g. if a locus is CODING in one gene and UTR in another,
- * we count it as CODING.
- */
-public enum LocusFunction {
- INTERGENIC, INTRONIC, UTR, CODING, RIBOSOMAL
-}
diff --git a/src/java/net/sf/picard/annotation/RefFlatReader.java b/src/java/net/sf/picard/annotation/RefFlatReader.java
deleted file mode 100644
index 556ad4d..0000000
--- a/src/java/net/sf/picard/annotation/RefFlatReader.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.annotation;
-
-import net.sf.picard.annotation.Gene.Transcript;
-import net.sf.picard.annotation.Gene.Transcript.Exon;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.OverlapDetector;
-import net.sf.picard.util.TabbedTextFileWithHeaderParser;
-import net.sf.samtools.SAMSequenceDictionary;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Loads gene annotations from a refFlat file into an OverlapDetector<Gene>. Discards annotations that are not
- * internally consistent, e.g. transcripts on different chromosomes or different strands.
- */
-public class RefFlatReader {
- private static final Log LOG = Log.getInstance(RefFlatReader.class);
- // These are in the order that columns appear in refFlat format.
- public enum RefFlatColumns{GENE_NAME, TRANSCRIPT_NAME, CHROMOSOME, STRAND, TX_START, TX_END, CDS_START, CDS_END,
- EXON_COUNT, EXON_STARTS, EXON_ENDS}
-
- private static final String[] RefFlatColumnLabels = new String[RefFlatColumns.values().length];
-
- static {
- for (int i = 0; i < RefFlatColumnLabels.length; ++i) {
- RefFlatColumnLabels[i] = RefFlatColumns.values()[i].name();
- }
- }
-
- private final File refFlatFile;
- private final SAMSequenceDictionary sequenceDictionary;
-
- RefFlatReader(final File refFlatFile, final SAMSequenceDictionary sequenceDictionary) {
- this.refFlatFile = refFlatFile;
- this.sequenceDictionary = sequenceDictionary;
- }
-
- static OverlapDetector<Gene> load(final File refFlatFile, final SAMSequenceDictionary sequenceDictionary) {
- return new RefFlatReader(refFlatFile, sequenceDictionary).load();
- }
-
- OverlapDetector<Gene> load() {
- final OverlapDetector<Gene> overlapDetector = new OverlapDetector<Gene>(0, 0);
-
- final int expectedColumns = RefFlatColumns.values().length;
- final TabbedTextFileWithHeaderParser parser = new TabbedTextFileWithHeaderParser(refFlatFile, RefFlatColumnLabels);
- final Map<String, List<TabbedTextFileWithHeaderParser.Row>> refFlatLinesByGene =
- new HashMap<String, List<TabbedTextFileWithHeaderParser.Row>>();
-
- for (final TabbedTextFileWithHeaderParser.Row row : parser) {
- final int lineNumber = parser.getCurrentLineNumber(); // getCurrentLineNumber returns the number of the next line
- if (row.getFields().length != expectedColumns) {
- throw new AnnotationException("Wrong number of fields in refFlat file " + refFlatFile + " at line " +
- lineNumber);
- }
- final String geneName = row.getField(RefFlatColumns.GENE_NAME.name());
- final String transcriptName = row.getField(RefFlatColumns.TRANSCRIPT_NAME.name());
- final String transcriptDescription = geneName + ":" + transcriptName;
- final String chromosome = row.getField(RefFlatColumns.CHROMOSOME.name());
- if (!isSequenceRecognized(chromosome)) {
- LOG.debug("Skipping " + transcriptDescription + " due to unrecognized sequence " + chromosome);
- } else {
- List<TabbedTextFileWithHeaderParser.Row> transcriptLines = refFlatLinesByGene.get(geneName);
- if (transcriptLines == null) {
- transcriptLines = new ArrayList<TabbedTextFileWithHeaderParser.Row>();
- refFlatLinesByGene.put(geneName, transcriptLines);
- }
- transcriptLines.add(row);
- }
- }
-
- int longestInterval = 0;
- int numIntervalsOver1MB = 0;
-
- for (final List<TabbedTextFileWithHeaderParser.Row> transcriptLines : refFlatLinesByGene.values()) {
- try {
- final Gene gene = makeGeneFromRefFlatLines(transcriptLines);
- overlapDetector.addLhs(gene, gene);
- if (gene.length() > longestInterval) longestInterval = gene.length();
- if (gene.length() > 1000000) ++numIntervalsOver1MB;
- } catch (AnnotationException e) {
- LOG.debug(e.getMessage() + " -- skipping");
- }
- }
- LOG.debug("Longest gene: " + longestInterval + "; number of genes > 1MB: " + numIntervalsOver1MB);
- return overlapDetector;
- }
-
- private boolean isSequenceRecognized(final String sequence) {
- return (sequenceDictionary.getSequence(sequence) != null);
- }
-
-
- private Gene makeGeneFromRefFlatLines(final List<TabbedTextFileWithHeaderParser.Row> transcriptLines) {
- final String geneName = transcriptLines.get(0).getField(RefFlatColumns.GENE_NAME.name());
- final String strandStr = transcriptLines.get(0).getField(RefFlatColumns.STRAND.name());
- final boolean negative = strandStr.equals("-");
- final String chromosome = transcriptLines.get(0).getField(RefFlatColumns.CHROMOSOME.name());
-
- // Figure out the extend of the gene
- int start = Integer.MAX_VALUE;
- int end = Integer.MIN_VALUE;
- for (final TabbedTextFileWithHeaderParser.Row row: transcriptLines) {
- start = Math.min(start, row.getIntegerField(RefFlatColumns.TX_START.name()) + 1);
- end = Math.max(end, row.getIntegerField(RefFlatColumns.TX_END.name()));
- }
-
- final Gene gene = new Gene(chromosome, start, end, negative, geneName);
-
- for (final TabbedTextFileWithHeaderParser.Row row: transcriptLines) {
- if (!strandStr.equals(row.getField(RefFlatColumns.STRAND.name()))) {
- throw new AnnotationException("Strand disagreement in refFlat file for gene " + geneName);
- }
- if (!chromosome.equals(row.getField(RefFlatColumns.CHROMOSOME.name()))) {
- throw new AnnotationException("Chromosome disagreement(" + chromosome + " != " + row.getField(RefFlatColumns.CHROMOSOME.name()) +
- ") in refFlat file for gene " + geneName);
- }
-
- // This adds it to the Gene also
- final Transcript tx = makeTranscriptFromRefFlatLine(gene, row);
- }
-
- return gene;
- }
-
- /**
- * Conversion from 0-based half-open to 1-based inclusive intervals is done here.
- */
- private Gene.Transcript makeTranscriptFromRefFlatLine(final Gene gene, final TabbedTextFileWithHeaderParser.Row row) {
- final String geneName = row.getField(RefFlatColumns.GENE_NAME.name());
- final String transcriptName = row.getField(RefFlatColumns.TRANSCRIPT_NAME.name());
- final String transcriptDescription = geneName + ":" + transcriptName;
- final int exonCount = Integer.parseInt(row.getField(RefFlatColumns.EXON_COUNT.name()));
- final String[] exonStarts = row.getField(RefFlatColumns.EXON_STARTS.name()).split(",");
- final String[] exonEnds = row.getField(RefFlatColumns.EXON_ENDS.name()).split(",");
-
- if (exonCount != exonStarts.length) {
- throw new AnnotationException("Number of exon starts does not agree with number of exons for " + transcriptDescription);
- }
- if (exonCount != exonEnds.length) {
- throw new AnnotationException("Number of exon ends does not agree with number of exons for " + transcriptDescription);
- }
-
- final int transcriptionStart = row.getIntegerField(RefFlatColumns.TX_START.name()) + 1;
- final int transcriptionEnd = row.getIntegerField(RefFlatColumns.TX_END.name());
- final int codingStart = row.getIntegerField(RefFlatColumns.CDS_START.name()) + 1;
- final int codingEnd = row.getIntegerField(RefFlatColumns.CDS_END.name());
-
- final Transcript tx = gene.addTranscript(transcriptName, transcriptionStart, transcriptionEnd, codingStart, codingEnd, exonCount);
-
- for (int i = 0; i < exonCount; ++i) {
- final Exon e = tx.addExon(Integer.parseInt(exonStarts[i]) + 1, Integer.parseInt(exonEnds[i]));
-
- if (e.start >= e.end) {
- throw new AnnotationException("Exon has 0 or negative extent for " + transcriptDescription);
- }
- if (i > 0 && tx.exons[i-1].end >= tx.exons[i].start) {
- throw new AnnotationException("Exons overlap for " + transcriptDescription);
- }
- }
-
- return tx;
- }
-}
diff --git a/src/java/net/sf/picard/cmdline/CommandLineParseException.java b/src/java/net/sf/picard/cmdline/CommandLineParseException.java
deleted file mode 100644
index 2bfa8ef..0000000
--- a/src/java/net/sf/picard/cmdline/CommandLineParseException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import net.sf.picard.PicardException;
-
-public class CommandLineParseException extends PicardException {
- public CommandLineParseException(final String s) {
- super(s);
- }
-
- public CommandLineParseException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-}
diff --git a/src/java/net/sf/picard/cmdline/CommandLineParser.java b/src/java/net/sf/picard/cmdline/CommandLineParser.java
deleted file mode 100644
index de98e17..0000000
--- a/src/java/net/sf/picard/cmdline/CommandLineParser.java
+++ /dev/null
@@ -1,1210 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import java.io.*;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.*;
-
-import net.sf.samtools.util.CollectionUtil.MultiMap;
-import net.sf.samtools.util.StringUtil;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.picard.PicardException;
-
-/**
- * Annotation-driven utility for parsing command-line arguments, checking for errors, and producing usage message.
- *
- * This class supports options of the form KEY=VALUE, plus positional arguments. Positional arguments must not contain
- * an equal sign lest they be mistaken for a KEY=VALUE pair.
- *
- * The caller must supply an object that both defines the command line and has the parsed options set into it.
- * For each possible KEY=VALUE option, there must be a public data member annotated with @Option. The KEY name is
- * the name of the data member. An abbreviated name may also be specified with the shortName attribute of @Option.
- * If the data member is a List<T>, then the option may be specified multiple times. The type of the data member,
- * or the type of the List element must either have a ctor T(String), or must be an Enum. List options must
- * be initialized by the caller with some kind of list. Any other option that is non-null is assumed to have the given
- * value as a default. If an option has no default value, and does not have the optional attribute of @Option set,
- * is required. For List options, minimum and maximum number of elements may be specified in the @Option annotation.
- *
- * A single List data member may be annotated with the @PositionalArguments. This behaves similarly to a Option
- * with List data member: the caller must initialize the data member, the type must be constructable from String, and
- * min and max number of elements may be specified. If no @PositionalArguments annotation appears in the object,
- * then it is an error for the command line to contain positional arguments.
- *
- * A single String public data member may be annotated with @Usage. This string, if present, is used to
- * construct the usage message. Details about the possible options are automatically appended to this string.
- * If @Usage does not appear, a boilerplate usage message is used.
- */
-public class CommandLineParser {
- // For formatting option section of usage message.
- private static final int OPTION_COLUMN_WIDTH = 30;
- private static final int DESCRIPTION_COLUMN_WIDTH = 90;
-
- private static final Boolean[] TRUE_FALSE_VALUES = {Boolean.TRUE, Boolean.FALSE};
-
- private static final String[] PACKAGES_WITH_WEB_DOCUMENTATION = {"net.sf.picard"};
-
- // Use these if no @Usage annotation
- private static final String defaultUsagePreamble = "Usage: program [options...]\n";
- private static final String defaultUsagePreambleWithPositionalArguments =
- "Usage: program [options...] [positional-arguments...]\n";
- private static final String OPTIONS_FILE = "OPTIONS_FILE";
-
- private static final String PRECEDENCE_SYMBOL = "++";
-
- /** name, shortName, description for options built in to framework */
- private static final String[][] FRAMEWORK_OPTION_DOC = {
- {"--help", "-h", "Displays options specific to this tool."},
- {"--stdhelp", "-H", "Displays options specific to this tool AND " +
- "options common to all Picard command line tools."},
- {"--version", null, "Displays program version."}
- };
-
- private final Set<String> optionsThatCannotBeOverridden = new HashSet<String>();
-
- /**
- * A typical command line program will call this to get the beginning of the usage message,
- * and then append a description of the program, like this:
- *
- * \@Usage
- * public String USAGE = CommandLineParser.getStandardUsagePreamble(getClass()) + "Frobnicates the freebozzle."
- */
- public static String getStandardUsagePreamble(final Class mainClass) {
- return "USAGE: " + mainClass.getSimpleName() + " [options]\n\n" +
- (hasWebDocumentation(mainClass) ?
- "Documentation: http://picard.sourceforge.net/command-line-overview.shtml#" +
- mainClass.getSimpleName() + "\n\n"
- : "");
- }
-
- /***
- * Determines if a class has web documentation based on its package name
- * @param clazz
- * @return
- */
- public static boolean hasWebDocumentation(final Class clazz) {
- for(final String pkg : PACKAGES_WITH_WEB_DOCUMENTATION) {
- if (clazz.getPackage().getName().startsWith(pkg)) {
- return true;
- }
- }
- return false;
- }
-
- /***
- * Returns the link to a FAQ
- * @return
- */
- public static String getFaqLink() {
- return "To get help, see http://picard.sourceforge.net/index.shtml#GettingHelp";
- }
-
- /**
- * Find all of the members annotated with @NestedOptions.
- * This is package scope and static so that CommandLineProgram can use it to provide default implementation
- * of its own getNestedOptions() method.
- */
- static Map<String, Object> getNestedOptions(final Object callerOptions) {
- // LinkedHashMap so usage message is generated in order of declaration
- final Map<String, Object> ret = new LinkedHashMap<String, Object>();
- final Class<?> clazz = callerOptions.getClass();
- for (final Field field : getAllFields(clazz)) {
- if (field.getAnnotation(NestedOptions.class) != null) {
- field.setAccessible(true);
- try {
- ret.put(field.getName(), field.get(callerOptions));
- } catch (IllegalAccessException e) {
- throw new RuntimeException("Should never happen.", e);
- }
- }
- }
- return ret;
- }
-
- // This is the object that the caller has provided that contains annotations,
- // and into which the values will be assigned.
- private final Object callerOptions;
-
- // For child CommandLineParser, this contains the prefix for the option names, which is needed for generating
- // the command line. For non-nested, this is the empty string.
- private final String prefix;
- // For non-nested, empty string. For nested, prefix + "."
- private final String prefixDot;
-
- private String usagePreamble;
- // null if no @PositionalArguments annotation
- private Field positionalArguments;
- private int minPositionalArguments;
- private int maxPositionalArguments;
-
- // List of all the data members with @Option annotation
- private final List<OptionDefinition> optionDefinitions = new ArrayList<OptionDefinition>();
-
- // Maps long name, and short name, if present, to an option definition that is
- // also in the optionDefinitions list.
- private final Map<String, OptionDefinition> optionMap = new HashMap<String, OptionDefinition>();
-
- // Maps child options prefix to CommandLineParser for the child object.
- // Key: option prefix.
- private final Map<String, CommandLineParser> childOptionsMap = new LinkedHashMap<String, CommandLineParser>();
-
- // Holds the command-line arguments for a child option parser.
- // Key: option prefix. Value: List of arguments for child corresponding to that prefix (with prefix stripped).
- private final MultiMap<String, ChildOptionArg> childOptionArguments = new MultiMap<String, ChildOptionArg>();
-
- // For printing error messages when parsing command line.
- private PrintStream messageStream;
-
- // In case implementation wants to get at arg for some reason.
- private String[] argv;
-
- private String programVersion = "";
-
- // The command line used to launch this program, including non-null default options that
- // weren't explicitly specified. This is used for logging and debugging.
- private String commandLine = "";
-
- /**
- * This attribute is here just to facilitate printing usage for OPTIONS_FILE
- */
- public File IGNORE_THIS_PROPERTY;
-
- /**
- * Prepare for parsing command line arguments, by validating annotations.
- * @param callerOptions This object contains annotations that define the acceptable command-line options,
- * and ultimately will receive the settings when a command line is parsed.
- */
- public CommandLineParser(final Object callerOptions) {
- this(callerOptions, "");
- }
-
- /**
- * @param prefix Non-empty for child options object.
- */
- private CommandLineParser(final Object callerOptions, final String prefix) {
- this.callerOptions = callerOptions;
-
- this.prefix = prefix;
- if (prefix.isEmpty()) {prefixDot = "";}
- else {prefixDot = prefix + ".";}
-
-
- for (final Field field : getAllFields(this.callerOptions.getClass())) {
- if (field.getAnnotation(PositionalArguments.class) != null) {
- handlePositionalArgumentAnnotation(field);
- }
- if (field.getAnnotation(Usage.class) != null) {
- handleUsageAnnotation(field);
- }
- if (field.getAnnotation(Option.class) != null) {
- handleOptionAnnotation(field);
- } else if (!isCommandLineProgram() && field.getAnnotation(NestedOptions.class) != null) {
- // If callerOptions is an instance of CommandLineProgram, defer creation of child
- // CommandLineParsers until after parsing options for this parser, in case CommandLineProgram
- // wants to do something dynamic based on values for this parser.
- handleNestedOptionsAnnotation(field);
- }
- }
-
- if (usagePreamble == null) {
- if (positionalArguments == null) {
- usagePreamble = defaultUsagePreamble;
- } else {
- usagePreamble = defaultUsagePreambleWithPositionalArguments;
- }
- }
- }
-
- private boolean isCommandLineProgram() {
- return callerOptions instanceof CommandLineProgram;
- }
-
- private static List<Field> getAllFields(Class clazz) {
- final List<Field> ret = new ArrayList<Field>();
- do {
- ret.addAll(Arrays.asList(clazz.getDeclaredFields()));
- clazz = clazz.getSuperclass();
- } while (clazz != null);
- return ret;
- }
-
- public String getVersion() {
- return this.callerOptions.getClass().getPackage().getImplementationVersion();
- }
-
- /**
- * Print a usage message based on the options object passed to the ctor.
- * @param stream Where to write the usage message.
- */
- public void usage(final PrintStream stream, final boolean printCommon) {
- if (prefix.isEmpty()) {
- stream.print(usagePreamble);
- stream.println("\nVersion: " + getVersion());
- stream.println("\n\nOptions:\n");
-
- for (final String[] optionDoc : FRAMEWORK_OPTION_DOC) {
- printOptionParamUsage(stream, optionDoc[0], optionDoc[1], null, optionDoc[2]);
- }
- }
-
- if (!optionDefinitions.isEmpty()) {
- for (final OptionDefinition optionDefinition : optionDefinitions) {
- if(printCommon || !optionDefinition.isCommon) printOptionUsage(stream, optionDefinition);
- }
- }
-
- if(printCommon) {
- final Field fileField;
- try {
- fileField = getClass().getField("IGNORE_THIS_PROPERTY");
- } catch (NoSuchFieldException e) {
- throw new PicardException("Should never happen", e);
- }
- final OptionDefinition optionsFileOptionDefinition =
- new OptionDefinition(fileField, OPTIONS_FILE, "",
- "File of OPTION_NAME=value pairs. No positional parameters allowed. Unlike command-line options, " +
- "unrecognized options are ignored. " + "A single-valued option set in an options file may be overridden " +
- "by a subsequent command-line option. " +
- "A line starting with '#' is considered a comment.",
- false, true, 0, Integer.MAX_VALUE, null, true, new String[0]);
- printOptionUsage(stream, optionsFileOptionDefinition);
- }
-
- // Generate usage for child parsers.
- final Collection<CommandLineParser> childClps;
- childClps = getChildParsersForHelp();
- for (final CommandLineParser childClp : childClps) {
- childClp.usage(stream, printCommon);
- }
- }
-
- private Collection<CommandLineParser> getChildParsersForHelp() {
- final Collection<CommandLineParser> childClps;
- if (isCommandLineProgram()) {
- childClps = new ArrayList<CommandLineParser>();
- for (final Map.Entry<String, Object> entry :
- ((CommandLineProgram)callerOptions).getNestedOptionsForHelp().entrySet()) {
- if (entry.getKey().contains(".")) {
- throw new IllegalArgumentException("Prefix for nested options should not contain period: " + entry.getKey());
- }
- childClps.add(new CommandLineParser(entry.getValue(), prefixDot + entry.getKey()));
- }
- } else {
- childClps = childOptionsMap.values();
- }
- return childClps;
- }
-
-
- public void htmlUsage(final PrintStream stream, final String programName, final boolean printCommon) {
- // TODO: Should HTML escape usage preamble and option usage, including line breaks
- stream.println("<a name=\"" + programName + "\"/>");
- stream.println("<h3>" + programName + "</h3>");
- stream.println("<p>" + htmlEscape(usagePreamble) + "</p>");
- boolean hasOptions = false;
- for (final OptionDefinition optionDefinition : optionDefinitions) {
- if (!optionDefinition.isCommon || printCommon) {
- hasOptions = true;
- break;
- }
- }
- if (hasOptions) {
- htmlPrintOptions(stream, printCommon);
- }
- stream.println("<br/>");
- }
-
- public void htmlPrintOptions(final PrintStream stream, final boolean printCommon) {
- stream.println("<table>");
- stream.println("<tr><th>Option</th><th>Description</th></tr>");
- if (printCommon) {
- for (final String[] optionDoc : FRAMEWORK_OPTION_DOC) {
- stream.println("<tr><td>" + optionDoc[0] + "</td><td>" +
- htmlEscape(optionDoc[2]) + "</td></tr>");
-
- }
- }
- htmlPrintOptionTableRows(stream, printCommon);
- stream.println("</table>");
- }
-
- /**
- *
- * @param stream
- * @param printCommon
- */
- private void htmlPrintOptionTableRows(final PrintStream stream, final boolean printCommon) {
- for (final OptionDefinition optionDefinition : optionDefinitions) {
- if (!optionDefinition.isCommon || printCommon) {
- printHtmlOptionUsage(stream, optionDefinition);
- }
- }
- for (final CommandLineParser childParser : getChildParsersForHelp()) {
- childParser.htmlPrintOptionTableRows(stream, false);
- }
-
- }
-
- private static String htmlEscape(String str) {
- // May need more here
- str = str.replaceAll("<", "<");
- str = str.replaceAll("\n", "\n<p>");
- return str;
- }
-
- /**
- * Parse command-line options, and store values in callerOptions object passed to ctor.
- * @param messageStream Where to write error messages.
- * @param args Command line tokens.
- * @return true if command line is valid.
- */
- public boolean parseOptions(final PrintStream messageStream, final String[] args) {
- this.argv = args;
- this.messageStream = messageStream;
- if (prefix.isEmpty()) {
- commandLine = callerOptions.getClass().getName();
- }
- for (int i = 0; i < args.length; ++i) {
- final String arg = args[i];
- if (arg.equals("-h") || arg.equals("--help")) {
- usage(messageStream, false);
- return false;
- }
- if (arg.equals("-H") || arg.equals("--stdhelp")) {
- usage(messageStream, true);
- return false;
- }
-
- if (arg.equals("--version")) {
- messageStream.println(getVersion());
- return false;
- }
-
-
- final String[] pair = arg.split("=", 2);
- if (pair.length == 2 && pair[1].length() == 0) {
-
- if (i < args.length - 1) {
- pair[1] = args[++i];
- }
- }
- if (pair.length == 2) {
- if (!parseOption(pair[0], pair[1], false)) {
- messageStream.println();
- usage(messageStream, true);
- return false;
- }
- } else if (!parsePositionalArgument(arg)) {
- messageStream.println();
- usage(messageStream, false);
- return false;
- }
- }
- if (!checkNumArguments()) {
- messageStream.println();
- usage(messageStream, false);
- return false;
- }
-
- if (!parseChildOptions()) {
- messageStream.println();
- usage(messageStream, false);
- return false;
- }
-
- return true;
- }
-
- /**
- * After command line has been parsed, make sure that all required options have values, and that
- * lists with minimum # of elements have sufficient.
- * @return true if valid
- */
- private boolean checkNumArguments() {
- //Also, since we're iterating over all options and args, use this opportunity to recreate the commandLineString
- final StringBuilder commandLineString = new StringBuilder();
- try {
- for (final OptionDefinition optionDefinition : optionDefinitions) {
- final String fullName = prefixDot + optionDefinition.name;
- final StringBuilder mutextOptionNames = new StringBuilder();
- for (final String mutexOption : optionDefinition.mutuallyExclusive) {
- final OptionDefinition mutextOptionDef = optionMap.get(mutexOption);
- if (mutextOptionDef != null && mutextOptionDef.hasBeenSet) {
- mutextOptionNames.append(" ").append(prefixDot + mutextOptionDef.name);
- }
- }
- if (optionDefinition.hasBeenSet && mutextOptionNames.length() > 0) {
- messageStream.println("ERROR: Option '" + fullName +
- "' cannot be used in conjunction with option(s)" +
- mutextOptionNames.toString());
- return false;
- }
- if (optionDefinition.isCollection) {
- final Collection c = (Collection)optionDefinition.field.get(callerOptions);
- if (c.size() < optionDefinition.minElements) {
- messageStream.println("ERROR: Option '" + fullName + "' must be specified at least " +
- optionDefinition.minElements + " times.");
- return false;
- }
- } else if (!optionDefinition.optional && !optionDefinition.hasBeenSet &&
- !optionDefinition.hasBeenSetFromParent && mutextOptionNames.length() == 0) {
- messageStream.print("ERROR: Option '" + fullName + "' is required");
- if (optionDefinition.mutuallyExclusive.isEmpty()) {
- messageStream.println(".");
- } else {
- messageStream.println(" unless any of " + optionDefinition.mutuallyExclusive +
- " are specified.");
- }
- return false;
- }
-
- }
- if (positionalArguments != null) {
- final Collection c = (Collection)positionalArguments.get(callerOptions);
- if (c.size() < minPositionalArguments) {
- messageStream.println("ERROR: At least " + minPositionalArguments +
- " positional arguments must be specified.");
- return false;
- }
- for( final Object posArg : c ) {
- commandLineString.append(" " + posArg.toString());
- }
- }
- //first, append args that were explicitly set
- for (final OptionDefinition optionDefinition : optionDefinitions) {
- if(optionDefinition.hasBeenSet) {
- commandLineString.append(" " + prefixDot + optionDefinition.name + "=" +
- optionDefinition.field.get(callerOptions));
- }
- }
- commandLineString.append(" "); //separator to tell the 2 apart
- //next, append args that weren't explicitly set, but have a default value
- for (final OptionDefinition optionDefinition : optionDefinitions) {
- if(!optionDefinition.hasBeenSet && !optionDefinition.defaultValue.equals("null")) {
- commandLineString.append(" " + prefixDot + optionDefinition.name + "=" +
- optionDefinition.defaultValue);
- }
- }
- this.commandLine += commandLineString.toString();
- return true;
- } catch (IllegalAccessException e) {
- // Should never happen because lack of publicness has already been checked.
- throw new RuntimeException(e);
- }
-
-
- }
-
- private boolean parsePositionalArgument(final String stringValue) {
- if (positionalArguments == null) {
- messageStream.println("ERROR: Invalid argument '" + stringValue + "'.");
- return false;
- }
- final Object value;
- try {
- value = constructFromString(getUnderlyingType(positionalArguments), stringValue);
- } catch (CommandLineParseException e) {
- messageStream.println("ERROR: " + e.getMessage());
- return false;
- }
- final Collection c;
- try {
- c = (Collection)positionalArguments.get(callerOptions);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- }
- if (c.size() >= maxPositionalArguments) {
- messageStream.println("ERROR: No more than " + maxPositionalArguments +
- " positional arguments may be specified on the command line.");
- return false;
- }
- c.add(value);
- return true;
- }
-
- private boolean parseOption(final String key, final String stringValue, final boolean optionsFile) {
- return parseOption(key, stringValue, optionsFile, false);
- }
-
- private boolean parseOption(String key, final String stringValue, final boolean optionsFile,
- boolean precedenceSet) {
- key = key.toUpperCase();
- if (key.equals(OPTIONS_FILE)) {
- commandLine += " " + prefix + OPTIONS_FILE + "=" + stringValue;
- return parseOptionsFile(stringValue);
- }
-
- // Check to see if the precedence symbol was used
- if (key.startsWith(PRECEDENCE_SYMBOL)) {
- key = key.substring(PRECEDENCE_SYMBOL.length());
- precedenceSet = true;
- }
-
- // Save child options for later processing.
- final Integer prefixIndex = key.indexOf('.');
- if (prefixIndex != -1) {
- final String prefix = key.substring(0, prefixIndex);
- final String subKey = key.substring(prefixIndex+1);
- if (!subKey.isEmpty()) {
- childOptionArguments.append(prefix, new ChildOptionArg(subKey, stringValue, optionsFile,
- precedenceSet));
- return true;
- } else {
- messageStream.println("ERROR: Unrecognized option: " + key);
- return false;
- }
- }
-
- final OptionDefinition optionDefinition = optionMap.get(key);
- if (optionDefinition == null) {
- if (optionsFile) {
- // Silently ignore unrecognized option from options file
- return true;
- }
- messageStream.println("ERROR: Unrecognized option: " + key);
- return false;
- }
-
- // Check to see if the option has been "fixed" already
- if (this.optionsThatCannotBeOverridden.contains(optionDefinition.name)) {
- return true;
- }
- else if (precedenceSet) {
- this.optionsThatCannotBeOverridden.add(optionDefinition.name);
- }
-
- if (!optionDefinition.isCollection) {
- if (optionDefinition.hasBeenSet && !optionDefinition.hasBeenSetFromOptionsFile) {
- messageStream.println("ERROR: Option '" + key + "' cannot be specified more than once.");
- return false;
- }
- }
- final Object value;
- try {
- if(stringValue.equals("null")) {
- //"null" is a special value that allows the user to override any default
- //value set for this arg. It can only be used for optional args. When
- //used for a list arg, it will clear the list.
- if(optionDefinition.optional) {
- value = null;
- } else {
- messageStream.println("ERROR: non-null value must be provided for '" + key + "'.");
- return false;
- }
- } else {
- value = constructFromString(getUnderlyingType(optionDefinition.field), stringValue);
- }
-
- } catch (CommandLineParseException e) {
- messageStream.println("ERROR: " + e.getMessage());
- return false;
- }
- try {
- if (optionDefinition.isCollection) {
- final Collection c = (Collection)optionDefinition.field.get(callerOptions);
- if(value == null) {
- //user specified this arg=null which is interpreted as empty list
- c.clear();
- } else if (c.size() >= optionDefinition.maxElements) {
- messageStream.println("ERROR: Option '" + key + "' cannot be used more than " +
- optionDefinition.maxElements + " times.");
- return false;
- } else {
- c.add(value);
- }
- optionDefinition.hasBeenSet = true;
- optionDefinition.hasBeenSetFromOptionsFile = optionsFile;
- } else {
- optionDefinition.field.set(callerOptions, value);
- optionDefinition.hasBeenSet = true;
- optionDefinition.hasBeenSetFromOptionsFile = optionsFile;
- }
- } catch (IllegalAccessException e) {
- // Should never happen because we only iterate through public fields.
- throw new RuntimeException(e);
- }
- return true;
- }
-
- /**
- * Parsing of options from file is looser than normal. Any unrecognized options are
- * ignored, and a single-valued option that is set in a file may be overridden by a
- * subsequent appearance of that option.
- * A line that starts with '#' is ignored.
- * @param optionsFile
- * @return false if a fatal error occurred
- */
- private boolean parseOptionsFile(final String optionsFile) {
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new FileReader(optionsFile));
- String line;
- while ((line = reader.readLine()) != null) {
- if (line.startsWith("#") || line.trim().length() == 0) {
- continue;
- }
- final String[] pair = line.split("=", 2);
- if (pair.length == 2) {
- if (!parseOption(pair[0], pair[1], true)) {
- messageStream.println();
- usage(messageStream, true);
- return false;
- }
- } else {
- messageStream.println("Strange line in OPTIONS_FILE " + optionsFile + ": " + line);
- usage(messageStream, true);
- return false;
- }
- }
- reader.close();
- return true;
-
- } catch (IOException e) {
- throw new PicardException("I/O error loading OPTIONS_FILE=" + optionsFile, e);
- } finally {
- CloserUtil.close(reader);
- }
- }
-
- private void printHtmlOptionUsage(final PrintStream stream, final OptionDefinition optionDefinition) {
- final String type = getUnderlyingType(optionDefinition.field).getSimpleName();
- final String optionLabel = prefixDot + optionDefinition.name + "=" + type;
- stream.println("<tr><td>" + optionLabel + "</td><td>" +
- htmlEscape(makeOptionDescription(optionDefinition)) + "</td></tr>");
- }
-
- private void printOptionUsage(final PrintStream stream, final OptionDefinition optionDefinition) {
- printOptionParamUsage(stream, optionDefinition.name, optionDefinition.shortName,
- getUnderlyingType(optionDefinition.field).getSimpleName(),
- makeOptionDescription(optionDefinition));
- }
-
-
- private void printOptionParamUsage(final PrintStream stream, final String name, final String shortName,
- final String type, final String optionDescription) {
- String optionLabel = prefixDot + name;
- if(type != null) optionLabel += "=" + type;
-
- stream.print(optionLabel);
- if (shortName != null && shortName.length() > 0) {
- stream.println();
- optionLabel = prefixDot + shortName;
- if(type != null) optionLabel += "=" + type;
- stream.print(optionLabel);
- }
-
- int numSpaces = OPTION_COLUMN_WIDTH - optionLabel.length();
- if (optionLabel.length() > OPTION_COLUMN_WIDTH) {
- stream.println();
- numSpaces = OPTION_COLUMN_WIDTH;
- }
- printSpaces(stream, numSpaces);
- final String wrappedDescription = StringUtil.wordWrap(optionDescription, DESCRIPTION_COLUMN_WIDTH);
- final String[] descriptionLines = wrappedDescription.split("\n");
- for (int i = 0; i < descriptionLines.length; ++i) {
- if (i > 0) {
- printSpaces(stream, OPTION_COLUMN_WIDTH);
- }
- stream.println(descriptionLines[i]);
- }
- stream.println();
- }
-
- private String makeOptionDescription(final OptionDefinition optionDefinition) {
- final StringBuilder sb = new StringBuilder();
- if (optionDefinition.doc.length() > 0) {
- sb.append(optionDefinition.doc);
- sb.append(" ");
- }
- if (optionDefinition.optional && !optionDefinition.isCollection) {
- sb.append("Default value: ");
- sb.append(optionDefinition.defaultValue);
- sb.append(". ");
- if(!optionDefinition.defaultValue.equals("null")) {
- sb.append("This option can be set to 'null' to clear the default value. ");
- }
- } else if (!optionDefinition.isCollection){
- sb.append("Required. ");
- }
- Object[] enumConstants = getUnderlyingType(optionDefinition.field).getEnumConstants();
- if (enumConstants == null && getUnderlyingType(optionDefinition.field) == Boolean.class) {
- enumConstants = TRUE_FALSE_VALUES;
- }
-
- if (enumConstants != null) {
- final Boolean isClpEnum=enumConstants.length>0 && (enumConstants[0] instanceof ClpEnum) ;
-
- sb.append("Possible values: {");
- if(isClpEnum) sb.append("\n");
-
- for (int i = 0; i < enumConstants.length; ++i) {
- if (i > 0 && ! isClpEnum) {
- sb.append(", ");
- }
- sb.append(enumConstants[i].toString());
-
- if(isClpEnum){
- sb.append(" (" + ((ClpEnum)enumConstants[i]).getHelpDoc() + ")\n");
- }
- }
- sb.append("} ");
- }
- if (optionDefinition.isCollection) {
- if (optionDefinition.minElements == 0) {
- if (optionDefinition.maxElements == Integer.MAX_VALUE) {
- sb.append("This option may be specified 0 or more times. ");
- } else {
- sb.append("This option must be specified no more than " + optionDefinition.maxElements +
- " times. ");
- }
- } else if (optionDefinition.maxElements == Integer.MAX_VALUE) {
- sb.append("This option must be specified at least " + optionDefinition.minElements + " times. ");
- } else {
- sb.append("This option may be specified between " + optionDefinition.minElements +
- " and " + optionDefinition.maxElements + " times. ");
- }
-
- if(!optionDefinition.defaultValue.equals("null")) {
- sb.append("This option can be set to 'null' to clear the default list. ");
- }
-
- }
- if (!optionDefinition.mutuallyExclusive.isEmpty()) {
- sb.append(" Cannot be used in conjuction with option(s)");
- for (final String option : optionDefinition.mutuallyExclusive) {
- final OptionDefinition mutextOptionDefinition = optionMap.get(option);
-
- if(mutextOptionDefinition == null) {
- throw new PicardException("Invalid option definition in source code. " + option +
- " doesn't match any known option.");
- }
-
- sb.append(" ").append(mutextOptionDefinition.name);
- if (mutextOptionDefinition.shortName.length() > 0) {
- sb.append(" (").append(mutextOptionDefinition.shortName).append(")");
- }
- }
- }
- return sb.toString();
- }
-
- private void printSpaces(final PrintStream stream, final int numSpaces) {
- final StringBuilder sb = new StringBuilder();
- for (int i = 0; i < numSpaces; ++i) {
- sb.append(" ");
- }
- stream.print(sb);
- }
-
- private void handleOptionAnnotation(final Field field) {
- try {
- field.setAccessible(true);
- final Option optionAnnotation = field.getAnnotation(Option.class);
- final boolean isCollection = isCollectionField(field);
- if (isCollection) {
- if (optionAnnotation.maxElements() == 0) {
- throw new CommandLineParserDefinitionException("@Option member " + field.getName() +
- "has maxElements = 0");
- }
- if (optionAnnotation.minElements() > optionAnnotation.maxElements()) {
- throw new CommandLineParserDefinitionException("In @Option member " + field.getName() +
- ", minElements cannot be > maxElements");
- }
- if (field.get(callerOptions) == null) {
- createCollection(field, callerOptions, "@Option");
- }
- }
- if (!canBeMadeFromString(getUnderlyingType(field))) {
- throw new CommandLineParserDefinitionException("@Option member " + field.getName() +
- " must have a String ctor or be an enum");
- }
-
- final OptionDefinition optionDefinition = new OptionDefinition(field,
- field.getName(),
- optionAnnotation.shortName(),
- optionAnnotation.doc(), optionAnnotation.optional() || (field.get(callerOptions) != null),
- isCollection, optionAnnotation.minElements(),
- optionAnnotation.maxElements(), field.get(callerOptions), optionAnnotation.common(),
- optionAnnotation.mutex());
-
- for (final String option : optionAnnotation.mutex()) {
- final OptionDefinition mutextOptionDef = optionMap.get(option);
- if (mutextOptionDef != null) {
- mutextOptionDef.mutuallyExclusive.add(field.getName());
- }
- }
- if (optionMap.containsKey(optionDefinition.name)) {
- throw new CommandLineParserDefinitionException(optionDefinition.name + " has already been used");
- }
- optionMap.put(optionDefinition.name, optionDefinition);
- if (optionDefinition.shortName.length() > 0) {
- if (optionMap.containsKey(optionDefinition.shortName)) {
- throw new CommandLineParserDefinitionException(optionDefinition.shortName +
- " has already been used");
- }
- optionMap.put(optionDefinition.shortName, optionDefinition);
- }
- optionDefinitions.add(optionDefinition);
- } catch (IllegalAccessException e) {
- throw new CommandLineParserDefinitionException(field.getName() +
- " must have public visibility to have @Option annotation");
- }
- }
-
- private void handleUsageAnnotation(final Field field) {
- if (usagePreamble != null) {
- throw new CommandLineParserDefinitionException
- ("@Usage cannot be used more than once in an option class.");
- }
- try {
- field.setAccessible(true);
- usagePreamble = (String)field.get(callerOptions);
- final Usage usageAnnotation = field.getAnnotation(Usage.class);
- if (usageAnnotation.programVersion().length() > 0) {
- this.programVersion = usageAnnotation.programVersion();
- usagePreamble += "Version: " + usageAnnotation.programVersion() + "\n";
- }
- } catch (IllegalAccessException e) {
- throw new CommandLineParserDefinitionException("@Usage data member must be public");
- } catch (ClassCastException e) {
- throw new CommandLineParserDefinitionException
- ("@Usage can only be applied to a String data member.");
- }
- }
-
- private void handlePositionalArgumentAnnotation(final Field field) {
- if (positionalArguments != null) {
- throw new CommandLineParserDefinitionException
- ("@PositionalArguments cannot be used more than once in an option class.");
- }
- field.setAccessible(true);
- positionalArguments = field;
- if (!isCollectionField(field)) {
- throw new CommandLineParserDefinitionException("@PositionalArguments must be applied to a Collection");
- }
-
- if (!canBeMadeFromString(getUnderlyingType(field))) {
- throw new CommandLineParserDefinitionException("@PositionalParameters member " + field.getName() +
- "does not have a String ctor");
- }
-
- final PositionalArguments positionalArgumentsAnnotation = field.getAnnotation(PositionalArguments.class);
- minPositionalArguments = positionalArgumentsAnnotation.minElements();
- maxPositionalArguments = positionalArgumentsAnnotation.maxElements();
- if (minPositionalArguments > maxPositionalArguments) {
- throw new CommandLineParserDefinitionException("In @PositionalArguments, minElements cannot be > maxElements");
- }
- try {
- if (field.get(callerOptions) == null) {
- createCollection(field, callerOptions, "@PositionalParameters");
- }
- } catch (IllegalAccessException e) {
- throw new CommandLineParserDefinitionException(field.getName() +
- " must have public visibility to have @PositionalParameters annotation");
-
- }
- }
-
- private void handleNestedOptionsAnnotation(final Field field) {
- field.setAccessible(true);
- try {
- childOptionsMap.put(field.getName(),
- new CommandLineParser(field.get(this.callerOptions), prefixDot + field.getName()));
- } catch (IllegalAccessException e) {
- throw new CommandLineParserDefinitionException("Should never happen.", e);
- }
- }
-
- private boolean isCollectionField(final Field field) {
- try {
- field.getType().asSubclass(Collection.class);
- return true;
- } catch (ClassCastException e) {
- return false;
- }
- }
-
- private void createCollection(final Field field, final Object callerOptions, final String annotationType)
- throws IllegalAccessException {
- try {
- field.set(callerOptions, field.getType().newInstance());
- } catch (Exception ex) {
- try {
- field.set(callerOptions, new ArrayList());
- } catch (IllegalArgumentException e) {
- throw new CommandLineParserDefinitionException("In collection " + annotationType +
- " member " + field.getName() +
- " cannot be constructed or auto-initialized with ArrayList, so collection must be initialized explicitly.");
- }
-
- }
-
- }
-
- /**
- * Returns the type that each instance of the argument needs to be converted to. In
- * the case of primitive fields it will return the wrapper type so that String
- * constructors can be found.
- */
- private Class getUnderlyingType(final Field field) {
- if (isCollectionField(field)) {
- final ParameterizedType clazz = (ParameterizedType)(field.getGenericType());
- final Type[] genericTypes = clazz.getActualTypeArguments();
- if (genericTypes.length != 1) {
- throw new CommandLineParserDefinitionException("Strange collection type for field " +
- field.getName());
- }
- return (Class)genericTypes[0];
-
- }
- else {
- final Class type = field.getType();
- if (type == Byte.TYPE) return Byte.class;
- if (type == Short.TYPE) return Short.class;
- if (type == Integer.TYPE) return Integer.class;
- if (type == Long.TYPE) return Long.class;
- if (type == Float.TYPE) return Float.class;
- if (type == Double.TYPE) return Double.class;
- if (type == Boolean.TYPE) return Boolean.class;
-
- return type;
- }
- }
-
- // True if clazz is an enum, or if it has a ctor that takes a single String argument.
- private boolean canBeMadeFromString(final Class clazz) {
- if (clazz.isEnum()) {
- return true;
- }
- try {
- clazz.getConstructor(String.class);
- return true;
- } catch (NoSuchMethodException e) {
- return false;
- }
- }
-
- private Object constructFromString(final Class clazz, final String s) {
- try {
- if (clazz.isEnum()) {
- try {
- return Enum.valueOf(clazz, s);
- } catch (IllegalArgumentException e) {
- throw new CommandLineParseException("'" + s + "' is not a valid value for " +
- clazz.getSimpleName() + ".", e);
- }
- }
- final Constructor ctor = clazz.getConstructor(String.class);
- return ctor.newInstance(s);
- } catch (NoSuchMethodException e) {
- // Shouldn't happen because we've checked for presence of ctor
- throw new CommandLineParseException("Cannot find string ctor for " + clazz.getName(), e);
- } catch (InstantiationException e) {
- throw new CommandLineParseException("Abstract class '" + clazz.getSimpleName() +
- "'cannot be used for an option value type.", e);
- } catch (IllegalAccessException e) {
- throw new CommandLineParseException("String constructor for option value type '" + clazz.getSimpleName() +
- "' must be public.", e);
- } catch (InvocationTargetException e) {
- throw new CommandLineParseException("Problem constructing " + clazz.getSimpleName() +
- " from the string '" + s + "'.", e.getCause());
- }
- }
-
- public String[] getArgv() {
- return argv;
- }
-
- public interface ClpEnum{
- String getHelpDoc();
- }
-
- protected static class OptionDefinition {
- final Field field;
- final String name;
- final String shortName;
- final String doc;
- final boolean optional;
- final boolean isCollection;
- final int minElements;
- final int maxElements;
- final String defaultValue;
- final boolean isCommon;
- boolean hasBeenSet = false;
- boolean hasBeenSetFromOptionsFile = false;
- boolean hasBeenSetFromParent = false;
- final Set<String> mutuallyExclusive;
-
- private OptionDefinition(final Field field, final String name, final String shortName, final String doc,
- final boolean optional, final boolean collection, final int minElements,
- final int maxElements, final Object defaultValue, final boolean isCommon,
- final String[] mutuallyExclusive) {
- this.field = field;
- this.name = name.toUpperCase();
- this.shortName = shortName.toUpperCase();
- this.doc = doc;
- this.optional = optional;
- isCollection = collection;
- this.minElements = minElements;
- this.maxElements = maxElements;
- if (defaultValue != null) {
- if( isCollection && ((Collection) defaultValue).isEmpty()) {
- //treat empty collections the same as uninitialized primitive types
- this.defaultValue = "null";
- }
- else {
- //this is an intialized primitive type or a non-empty collection
- this.defaultValue = defaultValue.toString();
- }
- } else {
- this.defaultValue = "null";
- }
- this.isCommon = isCommon;
- this.mutuallyExclusive = new HashSet<String>(Arrays.asList(mutuallyExclusive));
- }
- }
-
- /**
- * Holds a command-line argument that is destined for a child parser. Prefix has been stripped from name.
- */
- private static class ChildOptionArg {
- final String name;
- final String value;
- final boolean fromFile;
- final boolean precedenceSet;
-
- private ChildOptionArg(final String name, final String value, final boolean fromFile, final boolean precedenceSet) {
- this.name = name;
- this.value = value;
- this.fromFile = fromFile;
- this.precedenceSet = precedenceSet;
- }
- }
-
- /**
- * Propagate options from parent to children as appropriate, parse command line options for
- * children, and then validate that children have been properly initialized. This is done recursively
- * for any child that itself has a child.
- * @return true if parsing is successful. Writes any errors to the message stream.
- */
- private boolean parseChildOptions() {
-
- // If callerOptions is not an instance of CommandLineProgram, then the child options are populated
- // when annotations are processed.
- if (isCommandLineProgram()) {
- final CommandLineProgram commandLineProgram = (CommandLineProgram)callerOptions;
- for (final Map.Entry<String, Object> entry : commandLineProgram.getNestedOptions().entrySet()) {
- if (entry.getKey().contains(".")) {
- throw new IllegalArgumentException("Prefix for nested options should not contain period: " + entry.getKey());
- }
- childOptionsMap.put(entry.getKey(),
- new CommandLineParser(entry.getValue(), prefixDot + entry.getKey()));
- }
- }
- boolean retval = true;
-
- // Check for child options for which there is no parser
- for (final String prefix : childOptionArguments.keySet()) {
- if (!childOptionsMap.containsKey(prefix)) {
- messageStream.println("ERROR: Option prefix '" + prefix + "' is not valid.");
- retval = false;
- }
- }
-
- try {
- // Propagate options from this parser to child parsers
- for (final OptionDefinition optionDefinition : optionDefinitions) {
- // Handling collection value propagation is confusing, so just don't do it.
- if (optionDefinition.isCollection) continue;
- final Object value = optionDefinition.field.get(callerOptions);
- if (value == null) continue;
- for (final CommandLineParser childParser : childOptionsMap.values()) {
- maybePropagateValueToChild(childParser, optionDefinition, value);
- }
- }
- } catch (IllegalAccessException e) {
- throw new RuntimeException("Should never happen", e);
- }
-
- for (final Map.Entry<String, CommandLineParser> entry : childOptionsMap.entrySet()) {
- final String prefix = entry.getKey();
- final CommandLineParser childParser = entry.getValue();
- childParser.messageStream = this.messageStream;
- final Collection<ChildOptionArg> childOptionArgs = this.childOptionArguments.get(prefix);
- if (childOptionArgs != null) {
- for (final ChildOptionArg arg : childOptionArgs) {
- childParser.parseOption(arg.name, arg.value, arg.fromFile, arg.precedenceSet);
- }
- }
- if (!childParser.checkNumArguments()) {
- retval = false;
- }
- if (!childParser.parseChildOptions()) {
- retval = false;
- }
- this.commandLine += " " + childParser.getCommandLine();
- }
-
- return retval;
- }
-
- /**
- * Propagate value from parent to child if appropriate to do so.
- */
- private void maybePropagateValueToChild(final CommandLineParser childParser,
- final OptionDefinition optionDefinition,
- final Object value) {
- try {
- final OptionDefinition childOptionDefinition = childParser.optionMap.get(optionDefinition.name);
- if (childOptionDefinition != null) {
- final Object childValue = childOptionDefinition.field.get(childParser.callerOptions);
- if (childValue == null || optionDefinition.hasBeenSet) {
- childOptionDefinition.field.set(childParser.callerOptions, value);
- childOptionDefinition.hasBeenSetFromParent = true;
- childOptionDefinition.hasBeenSetFromOptionsFile = optionDefinition.hasBeenSetFromOptionsFile;
- }
- }
- } catch (IllegalAccessException e) {
- throw new RuntimeException("Should never happen", e);
- }
- }
-
- public String getProgramVersion() { return programVersion; }
-
- /**
- * The commandline used to run this program, including any default args that
- * weren't necessarily specified. This is used for logging and debugging.
- *
- * NOTE: {@link #parseOptions(PrintStream, String[])} must be called before
- * calling this method.
- *
- * @return The commandline, or null if {@link #parseOptions(PrintStream, String[])}
- * hasn't yet been called, or didn't complete successfully.
- */
- public String getCommandLine() { return commandLine; }
-}
diff --git a/src/java/net/sf/picard/cmdline/CommandLineParserDefinitionException.java b/src/java/net/sf/picard/cmdline/CommandLineParserDefinitionException.java
deleted file mode 100644
index b610d71..0000000
--- a/src/java/net/sf/picard/cmdline/CommandLineParserDefinitionException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import net.sf.picard.PicardException;
-
-public class CommandLineParserDefinitionException extends PicardException {
- public CommandLineParserDefinitionException(final String s) {
- super(s);
- }
-
- public CommandLineParserDefinitionException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-}
diff --git a/src/java/net/sf/picard/cmdline/CommandLineProgram.java b/src/java/net/sf/picard/cmdline/CommandLineProgram.java
deleted file mode 100644
index ac65a59..0000000
--- a/src/java/net/sf/picard/cmdline/CommandLineProgram.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import java.io.File;
-import java.net.InetAddress;
-import java.text.DecimalFormat;
-import java.util.*;
-
-import net.sf.picard.metrics.Header;
-import net.sf.picard.metrics.MetricBase;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.metrics.StringHeader;
-import net.sf.picard.util.Log;
-import net.sf.samtools.Defaults;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMFileWriterImpl;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import net.sf.samtools.util.BlockCompressedStreamConstants;
-import net.sf.samtools.util.IOUtil;
-import net.sf.samtools.util.zip.DeflaterFactory;
-
-/**
- * Abstract class to facilitate writing command-line programs.
- *
- * To use:
- *
- * 1. Extend this class with a concrete class that has data members annotated with @Option, @PositionalArguments
- * and/or @Usage annotations.
- *
- * 2. If there is any custom command-line validation, override customCommandLineValidation(). When this method is
- * called, the command line has been parsed and set into the data members of the concrete class.
- *
- * 3. Implement a method doWork(). This is called after successful command-line processing. The value it returns is
- * the exit status of the program. It is assumed that the concrete class emits any appropriate error message before
- * returning non-zero. doWork() may throw unchecked exceptions, which are caught and reported appropriately.
- *
- * 4. Implement the following static method in the concrete class:
- *
- * public static void main(String[] argv) {
- new MyConcreteClass().instanceMainWithExit(argv);
- }
-
-
- */
-public abstract class CommandLineProgram {
-
- @Option(common=true, optional=true)
- public List<File> TMP_DIR = new ArrayList<File>();
-
- @Option(doc = "Control verbosity of logging.", common=true)
- public Log.LogLevel VERBOSITY = Log.LogLevel.INFO;
-
- @Option(doc = "Whether to suppress job-summary info on System.err.", common=true)
- public Boolean QUIET = false;
-
- @Option(doc = "Validation stringency for all SAM files read by this program. Setting stringency to SILENT " +
- "can improve performance when processing a BAM file in which variable-length data (read, qualities, tags) " +
- "do not otherwise need to be decoded.", common=true)
- public SAMFileReader.ValidationStringency VALIDATION_STRINGENCY = SAMFileReader.ValidationStringency.DEFAULT_STRINGENCY;
-
- @Option(doc = "Compression level for all compressed files created (e.g. BAM and GELI).", common=true)
- public int COMPRESSION_LEVEL = BlockCompressedStreamConstants.DEFAULT_COMPRESSION_LEVEL;
-
- @Option(doc = "When writing SAM files that need to be sorted, this will specify the number of records stored in RAM before spilling to disk. Increasing this number reduces the number of file handles needed to sort a SAM file, and increases the amount of RAM needed.", optional=true, common=true)
- public Integer MAX_RECORDS_IN_RAM = SAMFileWriterImpl.getDefaultMaxRecordsInRam();
-
- @Option(doc = "Whether to create a BAM index when writing a coordinate-sorted BAM file.", common=true)
- public Boolean CREATE_INDEX = Defaults.CREATE_INDEX;
-
- @Option(doc="Whether to create an MD5 digest for any BAM or FASTQ files created. ", common=true)
- public boolean CREATE_MD5_FILE = Defaults.CREATE_MD5;
-
- private final String standardUsagePreamble = CommandLineParser.getStandardUsagePreamble(getClass());
-
- /**
- * Initialized in parseArgs. Subclasses may want to access this to do their
- * own validation, and then print usage using commandLineParser.
- */
- private CommandLineParser commandLineParser;
-
- private final List<Header> defaultHeaders = new ArrayList<Header>();
-
- /**
- * The reconstructed commandline used to run this program. Used for logging
- * and debugging.
- */
- private String commandLine;
-
- /**
- * Do the work after command line has been parsed. RuntimeException may be
- * thrown by this method, and are reported appropriately.
- * @return program exit status.
- */
- protected abstract int doWork();
-
- public void instanceMainWithExit(final String[] argv) {
- System.exit(instanceMain(argv));
- }
-
- public int instanceMain(final String[] argv) {
- if (!parseArgs(argv)) {
- return 1;
- }
-
- // Provide one temp directory if the caller didn't
- if (this.TMP_DIR == null) this.TMP_DIR = new ArrayList<File>();
- if (this.TMP_DIR.isEmpty()) TMP_DIR.add(IOUtil.getDefaultTmpDir());
-
- // Build the default headers
- final Date startDate = new Date();
- this.defaultHeaders.add(new StringHeader(commandLine));
- this.defaultHeaders.add(new StringHeader("Started on: " + startDate));
-
- Log.setGlobalLogLevel(VERBOSITY);
- final SAMFileReader.ValidationStringency originalStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(VALIDATION_STRINGENCY);
- BlockCompressedOutputStream.setDefaultCompressionLevel(COMPRESSION_LEVEL);
-
- if (MAX_RECORDS_IN_RAM != null) {
- SAMFileWriterImpl.setDefaultMaxRecordsInRam(MAX_RECORDS_IN_RAM);
- }
-
- if (CREATE_INDEX){
- SAMFileWriterFactory.setDefaultCreateIndexWhileWriting(true);
- }
-
- SAMFileWriterFactory.setDefaultCreateMd5File(CREATE_MD5_FILE);
-
- for (final File f : TMP_DIR) {
- // Intentially not checking the return values, because it may be that the program does not
- // need a tmp_dir. If this fails, the problem will be discovered downstream.
- if (!f.exists()) f.mkdirs();
- f.setReadable(true, false);
- f.setWritable(true, false);
- System.setProperty("java.io.tmpdir", f.getAbsolutePath()); // in loop so that last one takes effect
- }
-
- if (!QUIET) {
- System.err.println("[" + new Date() + "] " + commandLine);
-
- // Output a one liner about who/where and what software/os we're running on
- try {
- System.err.println("[" + new Date() + "] Executing as " +
- System.getProperty("user.name") + "@" + InetAddress.getLocalHost().getHostName() +
- " on " + System.getProperty("os.name") + " " + System.getProperty("os.version") +
- " " + System.getProperty("os.arch") + "; " + System.getProperty("java.vm.name") +
- " " + System.getProperty("java.runtime.version") +
- "; Picard version: " + commandLineParser.getVersion() +
- " " + (DeflaterFactory.usingIntelDeflater()? "IntelDeflater": "JdkDeflater"));
- }
- catch (Exception e) { /* Unpossible! */ }
- }
-
- int ret = -1;
- try {
- ret = doWork();
- } finally {
- SAMFileReader.setDefaultValidationStringency(originalStringency);
- try {
- // Emit the time even if program throws
- if (!QUIET) {
- final Date endDate = new Date();
- final double elapsedMinutes = (endDate.getTime() - startDate.getTime()) / (1000d * 60d);
- final String elapsedString = new DecimalFormat("#,##0.00").format(elapsedMinutes);
- System.err.println("[" + endDate + "] " + getClass().getName() + " done. Elapsed time: " + elapsedString + " minutes.");
- System.err.println("Runtime.totalMemory()=" + Runtime.getRuntime().totalMemory());
- if (ret != 0 && CommandLineParser.hasWebDocumentation(this.getClass())) System.err.println(CommandLineParser.getFaqLink());
- }
- }
- catch (Throwable e) {
- // do nothing
- }
- }
- return ret;
- }
-
- /**
- * Put any custom command-line validation in an override of this method.
- * clp is initialized at this point and can be used to print usage and access argv.
- * Any options set by command-line parser can be validated.
- * @return null if command line is valid. If command line is invalid, returns an array of error message
- * to be written to the appropriate place.
- */
- protected String[] customCommandLineValidation() {
- final List<String> ret = new ArrayList<String>();
- for (final Object childOptionsObject : getNestedOptions().values()) {
- if (childOptionsObject instanceof CommandLineProgram) {
- final CommandLineProgram childClp = (CommandLineProgram)childOptionsObject;
- final String[] childErrors = childClp.customCommandLineValidation();
- if (childErrors != null) {
- for (final String error: childErrors) {
- ret.add(error);
- }
- }
- }
- }
- if (!ret.isEmpty()) {
- ret.toArray(new String[ret.size()]);
- }
- return null;
- }
-
- /**
- *
- * @return true if command line is valid
- */
- protected boolean parseArgs(final String[] argv) {
-
- commandLineParser = new CommandLineParser(this);
- final boolean ret = commandLineParser.parseOptions(System.err, argv);
- commandLine = commandLineParser.getCommandLine();
- if (!ret) {
- return false;
- }
- final String[] customErrorMessages = customCommandLineValidation();
- if (customErrorMessages != null) {
- for (final String msg : customErrorMessages) {
- System.err.println(msg);
- }
- commandLineParser.usage(System.err, false);
- return false;
- }
- return true;
- }
-
- /** Gets a MetricsFile with default headers already written into it. */
- protected <A extends MetricBase,B extends Comparable<?>> MetricsFile<A,B> getMetricsFile() {
- final MetricsFile<A,B> file = new MetricsFile<A,B>();
- for (final Header h : this.defaultHeaders) {
- file.addHeader(h);
- }
-
- return file;
- }
-
- public String getStandardUsagePreamble() {
- return standardUsagePreamble;
- }
-
- public CommandLineParser getCommandLineParser() {
- return commandLineParser;
- }
-
- /**
- * @return This is a little-used version string that can be put in the @Usage annotation
- */
- public String getProgramVersion() {
- return commandLineParser.getProgramVersion();
- }
-
-
- /**
- * @return Version stored in the manifest of the jarfile.
- */
- public String getVersion() {
- return getCommandLineParser().getVersion();
- }
-
- public String getCommandLine() {
- return commandLine;
- }
-
- public void setDefaultHeaders(final List<Header> headers) {
- this.defaultHeaders.clear();
- this.defaultHeaders.addAll(headers);
- }
-
- public List<Header> getDefaultHeaders() {
- return this.defaultHeaders;
- }
-
- /**
- * @return Map of nested options, where the key is the prefix to be used when specifying Options inside of a nested
- * options object, and the value is the nested options object itself. Default implementation is to return a
- * map of all the fields annotated with @NestedOptions, with key being the field name.
- */
- public Map<String, Object> getNestedOptions() {
- return CommandLineParser.getNestedOptions(this);
- }
-
- /**
- * @return Map of nested options, where the key is the prefix to be used when specifying Options inside of a nested
- * options object, and the value is the nested options object itself, for the purpose of generating help.
- * Default implementation is to return the same map as getNestedOptions().
- */
- public Map<String, Object> getNestedOptionsForHelp() {
- return getNestedOptions();
- }
-}
diff --git a/src/java/net/sf/picard/cmdline/CreateHtmlDocForProgram.java b/src/java/net/sf/picard/cmdline/CreateHtmlDocForProgram.java
deleted file mode 100644
index 6e6b787..0000000
--- a/src/java/net/sf/picard/cmdline/CreateHtmlDocForProgram.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Print out the usage for one or more CommandLinePrograms in a form close to what is used in the Sourceforge Picard website.
- *
- * @author alecw at broadinstitute.org
- */
-public class CreateHtmlDocForProgram {
- public static void main(final String[] args) throws Exception {
- for (final String clazz : args) {
- CommandLineProgram mainClass = (CommandLineProgram)Class.forName(clazz).newInstance();
- CommandLineParser clp = new CommandLineParser(mainClass);
- clp.htmlUsage(System.out, mainClass.getClass().getSimpleName(), false);
- }
- }
-}
diff --git a/src/java/net/sf/picard/cmdline/CreateHtmlDocForStandardOptions.java b/src/java/net/sf/picard/cmdline/CreateHtmlDocForStandardOptions.java
deleted file mode 100644
index b4bda1c..0000000
--- a/src/java/net/sf/picard/cmdline/CreateHtmlDocForStandardOptions.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-public class CreateHtmlDocForStandardOptions {
- public static void main(final String[] args) throws Exception {
- System.setProperty("java.io.tmpdir", "<System temp directory>");
- System.setProperty("user.name", "<current user name>");
- CommandLineParser clp = new CommandLineParser(new DummyProgram());
- clp.htmlPrintOptions(System.out, true);
- }
-
- static class DummyProgram extends CommandLineProgram {
- @Override
- protected int doWork() {
- return 0;
- }
- }
-}
diff --git a/src/java/net/sf/picard/cmdline/NestedOptions.java b/src/java/net/sf/picard/cmdline/NestedOptions.java
deleted file mode 100644
index 8b8b405..0000000
--- a/src/java/net/sf/picard/cmdline/NestedOptions.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import java.lang.annotation.*;
-
-/**
- * Used to annotate a field in a CommandLineProgram that holds a instance containing @Option-annotated
- * fields. To set a value for a nested option on the command line, use <member-name>.<option>=value.
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.FIELD)
- at Documented
-public @interface NestedOptions {
- /** Text that appears for this group of options in text describing usage of the command line program. */
- String doc() default "";
-
-}
diff --git a/src/java/net/sf/picard/cmdline/Option.java b/src/java/net/sf/picard/cmdline/Option.java
deleted file mode 100644
index 278ff09..0000000
--- a/src/java/net/sf/picard/cmdline/Option.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Used to annotate which fields of a CommandLineProgram are options given at the command line.
- * If a command line call looks like "cmd option=foo x=y bar baz" the CommandLineProgram
- * would have annotations on fields to handle the values of option and x. All options
- * must be in the form name=value on the command line. The java type of the option
- * will be inferred from the type of the field or from the generic type of the collection
- * if this option is allowed more than once. The type must be an enum or
- * have a constructor with a single String parameter.
- *
- * @author Alec Wysoker
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.FIELD)
- at Documented
-public @interface Option {
- /** The name of the option as it would appear on the command line. */
- String shortName() default "";
-
- /** Text that appears for this option in text describing usage of the command line program. */
- String doc() default "";
-
- /**
- * If set to false, an exception will be thrown if the option is not specified.
- * If 2 options are mutually exclusive and both have optional=false it will be
- * interpreted as one or the other is required and an exception will only be thrown if
- * neither are specified.
- */
- boolean optional() default false;
-
- /**
- * Array of option names that cannot be used in conjunction with this one.
- * If 2 options are mutually exclusive and both have optional=false it will be
- * interpreted as one OR the other is required and an exception will only be thrown if
- * neither are specified.
- */
- String[] mutex() default {};
-
- /** The minimum number of times that this option is required. */
- int minElements() default 0;
-
- /** The maximum number of times this option is allowed. */
- int maxElements() default Integer.MAX_VALUE;
-
- /**
- * Is this an Option common to all command line programs. If it is then it will only
- * be displayed in usage info when H or STDHELP is used to display usage.
- */
- boolean common() default false;
-}
diff --git a/src/java/net/sf/picard/cmdline/PositionalArguments.java b/src/java/net/sf/picard/cmdline/PositionalArguments.java
deleted file mode 100644
index 6cee5de..0000000
--- a/src/java/net/sf/picard/cmdline/PositionalArguments.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Used to annotate which field of a CommandLineProgram should store parameters given at the
- * command line which are not options. Fields with this annotation must be a Collection
- * (and probably should be a List if order is important).
- * If a command line call looks like "cmd option=foo x=y bar baz" the values "bar" and "baz"
- * would be added to the collection with this annotation. The java type of the arguments
- * will be inferred from the generic type of the collection. The type must be an enum or
- * have a constructor with a single String parameter.
- *
- * @author Alec Wysoker
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.FIELD)
- at Documented
-public @interface PositionalArguments {
- /** The minimum number of arguments required. */
- int minElements() default 0;
-
- /** The maximum number of arguments allowed. */
- int maxElements() default Integer.MAX_VALUE;
-}
diff --git a/src/java/net/sf/picard/cmdline/StandardOptionDefinitions.java b/src/java/net/sf/picard/cmdline/StandardOptionDefinitions.java
deleted file mode 100644
index 2c6a4e4..0000000
--- a/src/java/net/sf/picard/cmdline/StandardOptionDefinitions.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-/**
- * A set of String constants in which the name of the constant (minus the _SHORT_NAME suffix)
- * is the standard long Option name, and the value of the constant is the standard shortName.
- */
-public class StandardOptionDefinitions {
- public static final String INPUT_SHORT_NAME = "I";
- public static final String OUTPUT_SHORT_NAME = "O";
- public static final String REFERENCE_SHORT_NAME = "R";
- public static final String SAMPLE_ALIAS_SHORT_NAME = "ALIAS";
- public static final String LIBRARY_NAME_SHORT_NAME = "LIB";
- public static final String EXPECTED_INSERT_SIZE_SHORT_NAME = "INSERT";
- public static final String LANE_SHORT_NAME = "L";
- public static final String SEQUENCE_DICTIONARY_SHORT_NAME = "SD";
- public static final String METRICS_FILE_SHORT_NAME = "M";
- public static final String ASSUME_SORTED_SHORT_NAME = "AS";
- public static final String PF_READS_ONLY_SHORT_NAME = "PF";
- public static final String MINIMUM_MAPPING_QUALITY_SHORT_NAME = "MQ";
- public static final String READ_GROUP_ID_SHORT_NAME = "RG";
- public static final String PROGRAM_RECORD_ID_SHORT_NAME = "PG";
- public static final String MINIMUM_LOD_SHORT_NAME = "LOD";
- public static final String SORT_ORDER_SHORT_NAME = "SO";
- public static final String USE_ORIGINAL_QUALITIES_SHORT_NAME = "OQ";
-}
diff --git a/src/java/net/sf/picard/cmdline/Usage.java b/src/java/net/sf/picard/cmdline/Usage.java
deleted file mode 100644
index a1a9fbe..0000000
--- a/src/java/net/sf/picard/cmdline/Usage.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotates the field that contains text to be displayed in a usage message.
- */
- at Retention(RetentionPolicy.RUNTIME)
- at Target(ElementType.FIELD)
- at Documented
-public @interface Usage {
- String programVersion() default "";
-}
diff --git a/src/java/net/sf/picard/fastq/AsyncFastqWriter.java b/src/java/net/sf/picard/fastq/AsyncFastqWriter.java
deleted file mode 100644
index 557a2b7..0000000
--- a/src/java/net/sf/picard/fastq/AsyncFastqWriter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package net.sf.picard.fastq;
-
-import net.sf.samtools.util.AbstractAsyncWriter;
-
-/**
- * Implementation of a FastqWriter that provides asynchronous output.
- * @author Tim Fennell
- */
-public class AsyncFastqWriter extends AbstractAsyncWriter<FastqRecord> implements FastqWriter {
- private final FastqWriter writer;
-
- public AsyncFastqWriter(final FastqWriter out, final int queueSize) {
- super(queueSize);
- this.writer = out;
- }
-
- @Override protected String getThreadNamePrefix() { return "FastqWriterThread-"; }
- @Override protected void synchronouslyWrite(final FastqRecord item) { this.writer.write(item); }
- @Override protected void synchronouslyClose() { this.writer.close(); }
-}
diff --git a/src/java/net/sf/picard/fastq/BamToBfq.java b/src/java/net/sf/picard/fastq/BamToBfq.java
deleted file mode 100644
index 91dc916..0000000
--- a/src/java/net/sf/picard/fastq/BamToBfq.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.fastq;
-
-import net.sf.picard.fastq.BamToBfqWriter;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-
-import java.io.File;
-
-/**
- * CommandLineProgram to generate to bfq files for use by the Maq aligner
- *
- * @author ktibbett at broadinstitute.org
- */
-public class BamToBfq extends CommandLineProgram {
-
- private static final String PROGRAM_VERSION = "1.0";
-
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Create BFQ files for use by the Maq aligner.";
-
- @Option(doc="The BAM file to parse.", shortName=StandardOptionDefinitions.INPUT_SHORT_NAME) public File INPUT;
- @Option(doc="The analysis directory for the binary output file. ") public File ANALYSIS_DIR;
- @Option(doc="Flowcell barcode (e.g. 30PYMAAXX). ", shortName="F", mutex="OUTPUT_FILE_PREFIX") public String FLOWCELL_BARCODE;
- @Option(doc="Lane number. ", shortName= StandardOptionDefinitions.LANE_SHORT_NAME, optional=true,mutex="OUTPUT_FILE_PREFIX") public Integer LANE;
- @Option(doc="Prefix for all output files", mutex={"FLOWCELL_BARCODE","LANE"}) public String OUTPUT_FILE_PREFIX;
- @Option(doc="Number of reads to align (null = all).", shortName="NUM", optional=true) public Integer READS_TO_ALIGN;
- @Option(doc="Number of reads to break into individual groups for alignment", shortName="CHUNK") public Integer READ_CHUNK_SIZE = 2000000;
- @Option(doc="Whether this is a paired-end run. ", shortName="PE") public Boolean PAIRED_RUN;
- @Option(doc="Deprecated option; use READ_NAME_PREFIX instead", mutex="READ_NAME_PREFIX", shortName="RB", optional=true) public String RUN_BARCODE;
- @Option(doc="Prefix to be stripped off the beginning of all read names (to make them short enough to run in Maq)", optional=true) public String READ_NAME_PREFIX;
- @Option(doc="Whether to include non-PF reads", shortName="NONPF", optional=true) public Boolean INCLUDE_NON_PF_READS = false;
- @Option(doc="Whether to clip adapters from the reads") public boolean CLIP_ADAPTERS = true;
- @Option(doc="The number of bases from each read to write to the bfq file. If this is non-null, then " +
- "only the first BASES_TO_WRITE bases from each read will be written.", optional=true) public Integer BASES_TO_WRITE = null;
-
- protected int doWork() {
-
- String outputPrefix = ANALYSIS_DIR.getAbsolutePath();
- if (!outputPrefix.endsWith("/")) {
- outputPrefix += "/";
- }
- outputPrefix += OUTPUT_FILE_PREFIX + ".";
-
- BamToBfqWriter writer = new BamToBfqWriter(INPUT, outputPrefix, READS_TO_ALIGN,
- READ_CHUNK_SIZE, PAIRED_RUN, READ_NAME_PREFIX,
- INCLUDE_NON_PF_READS, CLIP_ADAPTERS, BASES_TO_WRITE);
- writer.writeBfqFiles();
- return 0;
- }
-
- public static void main(String[] argv) {
- System.exit(new BamToBfq().instanceMain(argv));
- }
-
- protected String[] customCommandLineValidation() {
-
- if (OUTPUT_FILE_PREFIX == null) {
- OUTPUT_FILE_PREFIX = FLOWCELL_BARCODE + "." + LANE;
- }
- if (READ_NAME_PREFIX == null) {
- READ_NAME_PREFIX = RUN_BARCODE + ":";
- }
- return null;
- }
-
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/fastq/BamToBfqWriter.java b/src/java/net/sf/picard/fastq/BamToBfqWriter.java
deleted file mode 100644
index ad3b3b2..0000000
--- a/src/java/net/sf/picard/fastq/BamToBfqWriter.java
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.fastq;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.filter.AggregateFilter;
-import net.sf.picard.filter.FailsVendorReadQualityFilter;
-import net.sf.picard.filter.FilteringIterator;
-import net.sf.picard.filter.SamRecordFilter;
-import net.sf.picard.filter.TagFilter;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.sam.ReservedTagConstants;
-import net.sf.picard.filter.WholeReadClippedFilter;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.util.BinaryCodec;
-
-/**
- * Class to take unmapped reads in BAM file format and create Maq binary fastq format file(s) --
- * one or two of them, depending on whether it's a paired-end read. This relies on the unmapped
- * BAM file having all paired reads together in order.
- */
-public class BamToBfqWriter {
-
- private static final int SEED_REGION_LENGTH = 28;
- private static final int MAX_SEED_REGION_NOCALL_FIXES = 2;
-
- private final File bamFile;
- private final String outputPrefix;
- private final String namePrefix;
- private final int nameTrim;
- private boolean pairedReads = false;
- private int wrote = 0;
- private int increment = 1;
- private int chunk = 0;
- private BinaryCodec codec1;
- private BinaryCodec codec2;
- private final Log log = Log.getInstance(BamToBfqWriter.class);
- private final boolean includeNonPfReads;
- private final boolean clipAdapters;
- private final Integer basesToWrite;
-
- /**
- * Constructor
- *
- * @param bamFile the BAM file to read from
- * @param outputPrefix the directory and file prefix for the binary fastq files
- * @param total the total number of records that should be written, drawn evenly
- * from throughout the file (null for all).
- * @param chunk the maximum number of records that should be written to any one file
- * @param pairedReads whether these reads are from a paired-end run
- * @param namePrefix The string to be stripped off the read name
- * before writing to the bfq file. May be null, in which case
- * the name will not be trimmed.
- * @param includeNonPfReads whether to include non pf-reads
- * @param clipAdapters whether to replace adapters as marked with XT:i clipping position attribute
- */
- public BamToBfqWriter(final File bamFile, final String outputPrefix, final Integer total,
- final Integer chunk, final boolean pairedReads, String namePrefix,
- boolean includeNonPfReads, boolean clipAdapters, Integer basesToWrite) {
-
- IoUtil.assertFileIsReadable(bamFile);
- this.bamFile = bamFile;
- this.outputPrefix = outputPrefix;
- this.pairedReads = pairedReads;
- if (total != null) {
- final double writeable = (double)countWritableRecords();
- this.increment = (int)Math.floor(writeable/total.doubleValue());
- if (this.increment == 0) {
- this.increment = 1;
- }
- }
- if (chunk != null) {
- this.chunk = chunk;
- }
- this.namePrefix = namePrefix;
- this.nameTrim = namePrefix != null ? namePrefix.length() : 0;
- this.includeNonPfReads = includeNonPfReads;
- this.clipAdapters = clipAdapters;
- this.basesToWrite = basesToWrite;
- }
-
- /**
- * Constructor
- *
- * @param bamFile the BAM file to read from
- * @param outputPrefix the directory and file prefix for the binary fastq files
- * @param pairedReads whether these reads are from a paired-end run
- * @param namePrefix the barcode of the run (to be stripped off the read name
- * before writing to the bfq file)
- * @param includeNonPfReads whether to include non pf-reads
- */
- public BamToBfqWriter(final File bamFile, final String outputPrefix, final boolean pairedReads,
- String namePrefix, boolean includeNonPfReads) {
- this(bamFile, outputPrefix, null, null, pairedReads, namePrefix, includeNonPfReads, true, null);
- }
-
- /**
- * Writes the binary fastq file(s) to the output directory
- */
- public void writeBfqFiles() {
-
- final Iterator<SAMRecord> iterator = (new SAMFileReader(IoUtil.openFileForReading(this.bamFile))).iterator();
-
- // Filter out noise reads and reads that fail the quality filter
- final TagFilter tagFilter = new TagFilter(ReservedTagConstants.XN, 1);
- final FailsVendorReadQualityFilter qualityFilter = new FailsVendorReadQualityFilter();
- final WholeReadClippedFilter clippedFilter = new WholeReadClippedFilter();
-
-
- if (!pairedReads) {
- List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
- filters.add(tagFilter);
- filters.add(clippedFilter);
- if (!this.includeNonPfReads) {
- filters.add(qualityFilter);
- }
- writeSingleEndBfqs(iterator, filters);
- codec1.close();
- }
- else {
- writePairedEndBfqs(iterator, tagFilter, qualityFilter, clippedFilter);
- codec1.close();
- codec2.close();
- }
- log.info("Wrote " + wrote + " bfq records.");
-
- }
-
- /**
- * Path for writing bfqs for paired-end reads
- *
- * @param iterator the iterator witht he SAM Records to write
- * @param tagFilter the filter for noise reads
- * @param qualityFilter the filter for PF reads
- */
- private void writePairedEndBfqs(final Iterator<SAMRecord> iterator, final TagFilter tagFilter,
- final FailsVendorReadQualityFilter qualityFilter,
- SamRecordFilter ... otherFilters) {
- // Open the codecs for writing
- int fileIndex = 0;
- initializeNextBfqFiles(fileIndex++);
-
- int records = 0;
-
- RECORD_LOOP: while (iterator.hasNext()) {
- final SAMRecord first = iterator.next();
- if (!iterator.hasNext()) {
- throw new PicardException("Mismatched number of records in " + this.bamFile.getAbsolutePath());
- }
- final SAMRecord second = iterator.next();
- if (!second.getReadName().equals(first.getReadName()) ||
- first.getFirstOfPairFlag() == second.getFirstOfPairFlag()) {
- throw new PicardException("Unmatched read pairs in " + this.bamFile.getAbsolutePath() +
- ": " + first.getReadName() + ", " + second.getReadName() + ".");
- }
-
- // If *both* are noise reads, filter them out
- if (tagFilter.filterOut(first) && tagFilter.filterOut(second)) {
- continue;
- }
-
- // If either fails to pass filter, then exclude them as well
- if (!includeNonPfReads && (qualityFilter.filterOut(first) || qualityFilter.filterOut(second))) {
- continue;
- }
-
- // If either fails any of the other filters, exclude them both
- for (SamRecordFilter filter : otherFilters) {
- if (filter.filterOut(first) || filter.filterOut(second)) {
- continue RECORD_LOOP;
- }
- }
-
- // Otherwise, write them out
- records++;
- if (records % increment == 0) {
- first.setReadName(first.getReadName() + "/1");
- writeFastqRecord(first.getFirstOfPairFlag() ? codec1 : codec2, first);
- second.setReadName(second.getReadName() + "/2");
- writeFastqRecord(second.getFirstOfPairFlag() ? codec1 : codec2, second);
- wrote++;
- if (wrote % 1000000 == 0) {
- log.info(wrote + " records written.");
- }
- if (chunk > 0 && wrote % chunk == 0) {
- initializeNextBfqFiles(fileIndex++);
- }
- }
- }
- }
-
- /**
- * Path for writing bfqs for single-end reads
- *
- * @param iterator the iterator with he SAM Records to write
- * @param filters the list of filters to be applied
- */
- private void writeSingleEndBfqs(final Iterator<SAMRecord> iterator, final List<SamRecordFilter> filters) {
-
- // Open the codecs for writing
- int fileIndex = 0;
- initializeNextBfqFiles(fileIndex++);
-
- int records = 0;
-
- final FilteringIterator it = new FilteringIterator(iterator, new AggregateFilter(filters));
- while (it.hasNext()) {
- final SAMRecord record = it.next();
- records++;
- if (records % increment == 0) {
-
- record.setReadName(record.getReadName() + "/1");
- writeFastqRecord(codec1, record);
- wrote++;
- if (wrote % 1000000 == 0) {
- log.info(wrote + " records processed.");
- }
- if (chunk > 0 && wrote % chunk == 0) {
- initializeNextBfqFiles(fileIndex++);
- }
- }
- }
- }
-
- /**
- * Closes any the open bfq file(s), if any, and opens the new one(s)
- *
- * @param fileIndex the index (counter) of the files to write
- */
- private void initializeNextBfqFiles(final int fileIndex) {
- // Close the codecs if they were writing before
- if (codec1 != null) {
- codec1.close();
- if (pairedReads) {
- codec2.close();
- }
- }
-
- // Open new file, using the fileIndex.
- final File bfq1 = getOutputFile(this.outputPrefix , 1, fileIndex);
- codec1 = new BinaryCodec(IoUtil.openFileForWriting(bfq1));
- log.info("Now writing to file " + bfq1.getAbsolutePath());
- if (pairedReads) {
- final File bfq2 = getOutputFile(this.outputPrefix , 2, fileIndex);
- codec2 = new BinaryCodec(IoUtil.openFileForWriting(bfq2));
- log.info("Now writing to file " + bfq2.getAbsolutePath());
- }
- }
-
- /**
- * Writes out a SAMRecord in Maq fastq format
- *
- * @param codec the code to write to
- * @param rec the SAMRecord to write
- */
- private void writeFastqRecord(final BinaryCodec codec, final SAMRecord rec) {
-
- // Trim the run barcode off the read name
- String readName = rec.getReadName();
- if (namePrefix != null && readName.startsWith(namePrefix)) {
- readName = readName.substring(nameTrim);
- }
- // Writes the length of the read name and then the name (null-terminated)
- codec.writeString(readName, true, true);
-
- final char[] seqs = rec.getReadString().toCharArray();
- final char[] quals = rec.getBaseQualityString().toCharArray();
-
- int retainedLength = seqs.length;
- if (clipAdapters){
- // adjust to a shorter length iff clipping tag exists
- Integer trimPoint = rec.getIntegerAttribute(ReservedTagConstants.XT);
- if (trimPoint != null) {
- assert (rec.getReadLength() == seqs.length);
- retainedLength = Math.min(seqs.length, Math.max(SEED_REGION_LENGTH, trimPoint -1));
- }
- }
-
- // Write the length of the sequence
- codec.writeInt(basesToWrite != null ? basesToWrite : seqs.length);
-
- // Calculate and write the sequence and qualities
- final byte[] seqsAndQuals = encodeSeqsAndQuals(seqs, quals, retainedLength);
- codec.writeBytes(seqsAndQuals);
- }
-
- private byte[] encodeSeqsAndQuals(char[] seqs, char[] quals, int retainedLength) {
- final byte[] seqsAndQuals = new byte[basesToWrite == null ? seqs.length : basesToWrite];
-
- int seedRegionNoCallFixes = 0;
- for (int i = 0; i < retainedLength && i < seqsAndQuals.length; i++) {
- int quality = Math.min(quals[i]-33, 63);
- final int base;
- switch(seqs[i]) {
- case 'A':
- case 'a':
- base = 0;
- break;
- case 'C':
- case 'c':
- base = 1;
- break;
- case 'G':
- case 'g':
- base = 2;
- break;
- case 'T':
- case 't':
- base = 3;
- break;
- case 'N':
- case 'n':
- case '.':
- base = 0;
- if (i < SEED_REGION_LENGTH ) {
- if (seedRegionNoCallFixes < MAX_SEED_REGION_NOCALL_FIXES) {
- quality = 1;
- seedRegionNoCallFixes++;
- }
- else {
- quality = 0;
- }
- }
- else {
- quality = 1;
- }
- break;
- default:
- throw new PicardException("Unknown base when writing bfq file: " + seqs[i]);
- }
- seqsAndQuals[i] = encodeBaseAndQuality(base, quality);
- }
- // rewrite clipped adapter with all A's of quality 1
- for (int i = retainedLength; i < seqsAndQuals.length; i++) {
- seqsAndQuals[i] = encodeBaseAndQuality(0, 1);
- }
-
- return seqsAndQuals;
- }
-
- private byte encodeBaseAndQuality(int base, int quality) {
- return (byte) ((base << 6) | quality);
- }
-
- /**
- * Count the number of records in the bamFile that could potentially be written
- *
- * @return the number of records in the Bam file
- */
- private int countWritableRecords() {
- int count = 0;
-
- SAMFileReader reader = new SAMFileReader(IoUtil.openFileForReading(this.bamFile));
- if(!reader.getFileHeader().getSortOrder().equals(SortOrder.queryname)) {
- //this is a fix for issue PIC-274: It looks like BamToBfqWriter requires that the input BAM is queryname sorted,
- //but it doesn't check this early, nor produce an understandable error message."
- throw new PicardException("Input file (" + this.bamFile.getAbsolutePath() +") needs to be sorted by queryname.");
- }
- final PeekableIterator<SAMRecord> it = new PeekableIterator<SAMRecord>(reader.iterator());
- if (!this.pairedReads) {
- // Filter out noise reads and reads that fail the quality filter
- final List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
- filters.add(new TagFilter(ReservedTagConstants.XN, 1));
- if (!this.includeNonPfReads) {
- filters.add(new FailsVendorReadQualityFilter());
- }
- final FilteringIterator itr = new FilteringIterator(it, new AggregateFilter(filters));
- while (itr.hasNext()) {
- itr.next();
- count++;
- }
- }
- else {
- while (it.hasNext()) {
- final SAMRecord first = it.next();
- final SAMRecord second = it.next();
- // If both are noise reads, filter them out
- if (first.getAttribute(ReservedTagConstants.XN) != null &&
- second.getAttribute(ReservedTagConstants.XN) != null) {
- // skip it
- }
- // If either fails to pass filter, then exclude them as well
- else if (!this.includeNonPfReads && (first.getReadFailsVendorQualityCheckFlag() || second.getReadFailsVendorQualityCheckFlag()) ) {
- // skip it
- }
- // Otherwise, write them out
- else {
- count++;
- }
- }
- }
- it.close();
- return count;
- }
-
- /**
- * Constructs the name for the output file and returns the file
- *
- * @param outputPrefix the directory and file prefix for the output bfq file
- * @param read whether this is the file for the first or second read
- * @param index used in file name
- * @return a new File object for the bfq file.
- */
- private File getOutputFile(final String outputPrefix, final int read, final int index) {
- final File result = new File(outputPrefix + index + "." + read + ".bfq");
- IoUtil.assertFileIsWritable(result);
- return result;
- }
-
-}
diff --git a/src/java/net/sf/picard/fastq/BasicFastqWriter.java b/src/java/net/sf/picard/fastq/BasicFastqWriter.java
deleted file mode 100644
index 4579725..0000000
--- a/src/java/net/sf/picard/fastq/BasicFastqWriter.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.fastq;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.Defaults;
-import net.sf.samtools.util.IOUtil;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.OutputStream;
-import java.io.PrintStream;
-
-/**
- * In general FastqWriterFactory should be used so that AsyncFastqWriter can be enabled, but there are some
- * cases in which that behavior is explicitly not wanted.
- */
-public class BasicFastqWriter implements FastqWriter {
- private final String path;
- private final PrintStream writer;
-
- public BasicFastqWriter(final File file) {
- this(file, false);
- }
-
- public BasicFastqWriter(final File file, final boolean createMd5) {
- this(file, new PrintStream(IOUtil.maybeBufferOutputStream(maybeMd5Wrap(file, createMd5))));
- }
-
- private BasicFastqWriter(final File file, final PrintStream writer) {
- this.path = (file != null? file.getAbsolutePath(): "");
- this.writer = writer;
- }
-
- public BasicFastqWriter(final PrintStream writer) {
- this(null, writer);
- }
-
- public void write(final FastqRecord rec) {
- writer.print(FastqConstants.SEQUENCE_HEADER);
- writer.println(rec.getReadHeader());
- writer.println(rec.getReadString());
- writer.print(FastqConstants.QUALITY_HEADER);
- writer.println(rec.getBaseQualityHeader() == null ? "" : rec.getBaseQualityHeader());
- writer.println(rec.getBaseQualityString());
- if (writer.checkError()) {
- throw new PicardException("Error in writing fastq file " + path);
- }
- }
-
- public void flush() {
- writer.flush();
- }
-
- public void close() {
- writer.close();
- }
-
- private static OutputStream maybeMd5Wrap(final File file, final boolean createMd5) {
- if (createMd5) {
- return IoUtil.openFileForMd5CalculatingWriting(file);
- } else {
- return IoUtil.openFileForWriting(file);
- }
- }
-}
diff --git a/src/java/net/sf/picard/fastq/Casava18ReadNameEncoder.java b/src/java/net/sf/picard/fastq/Casava18ReadNameEncoder.java
deleted file mode 100644
index 90c1ade..0000000
--- a/src/java/net/sf/picard/fastq/Casava18ReadNameEncoder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package net.sf.picard.fastq;
-
-import net.sf.picard.illumina.parser.ClusterData;
-import net.sf.samtools.util.StringUtil;
-
-/**
- * A read name encoder conforming to the standard described by Illumina Casava 1.8.
- *
- * @see <a href="http://biowulf.nih.gov/apps/CASAVA1_8_Changes.pdf">Casava 1.8 update</a>
- * @author mccowan
- */
-public class Casava18ReadNameEncoder implements ReadNameEncoder {
- final static int CONTROL_FIELD_VALUE = 0;
- final String runId, instrumentName, flowcellId;
-
- static enum PassesFilterLabel {
- Y, N;
- static PassesFilterLabel get(final boolean passesFilter) {
- return passesFilter ? Y : N;
- }
- }
-
- public Casava18ReadNameEncoder(final String instrumentName, final String runId, final String flowcellId) {
- this.runId = runId;
- this.instrumentName = instrumentName;
- this.flowcellId = flowcellId;
- }
-
- @Override
- public String generateReadName(final ClusterData cluster, final Integer pairNumber) {
- return String.format(
- "%s:%s:%s:%d:%d:%d:%d %s:%s:%d:%s",
- instrumentName,
- runId,
- flowcellId,
- cluster.getLane(),
- cluster.getTile(),
- cluster.getX(),
- cluster.getY(),
- StringUtil.asEmptyIfNull(pairNumber),
- PassesFilterLabel.get(cluster.isPf()),
- CONTROL_FIELD_VALUE,
- StringUtil.asEmptyIfNull(cluster.getMatchedBarcode())
- );
- }
-}
diff --git a/src/java/net/sf/picard/fastq/FastqConstants.java b/src/java/net/sf/picard/fastq/FastqConstants.java
deleted file mode 100644
index 0179e4e..0000000
--- a/src/java/net/sf/picard/fastq/FastqConstants.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.fastq;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class FastqConstants {
- public static final String SEQUENCE_HEADER = "@" ;
- public static final String QUALITY_HEADER = "+" ;
-}
diff --git a/src/java/net/sf/picard/fastq/FastqReader.java b/src/java/net/sf/picard/fastq/FastqReader.java
deleted file mode 100755
index 65f1282..0000000
--- a/src/java/net/sf/picard/fastq/FastqReader.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.fastq;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.RuntimeIOException;
-import net.sf.samtools.util.StringUtil;
-import net.sf.picard.io.IoUtil;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.io.*;
-
-/**
- * Reads a fastq file.
- * WARNING: Despite the fact that this class implements Iterable, calling iterator() method does not
- * start iteration from the beginning of the file. Developers should probably not call iterator()
- * directly. It is provided so that this class can be used in Java for-each loop.
- */
-public class FastqReader implements Iterator<FastqRecord>, Iterable<FastqRecord>, Closeable {
- final private File fastqFile;
- final private BufferedReader reader;
- private FastqRecord nextRecord;
- private int line=1;
-
- final private boolean skipBlankLines;
-
- public FastqReader(final File file) {
- this(file,false);
- }
-
- public FastqReader(final File file, final boolean skipBlankLines) {
- this.skipBlankLines=skipBlankLines;
- fastqFile = file;
- reader = IoUtil.openFileForBufferedReading(fastqFile);
- nextRecord = readNextRecord();
- }
-
- public FastqReader(final BufferedReader reader) {
- this(null, reader);
- }
-
- public FastqReader(final File file, final BufferedReader reader) {
- fastqFile = file;
- this.reader = reader;
- nextRecord = readNextRecord();
- skipBlankLines = false;
- }
-
- private FastqRecord readNextRecord() {
- try {
-
- // Read sequence header
- final String seqHeader = readLineConditionallySkippingBlanks();
- if (seqHeader == null) return null ;
- if (StringUtil.isBlank(seqHeader)) {
- throw new PicardException(error("Missing sequence header"));
- }
- if (!seqHeader.startsWith(FastqConstants.SEQUENCE_HEADER)) {
- throw new PicardException(error("Sequence header must start with "+ FastqConstants.SEQUENCE_HEADER+": "+seqHeader));
- }
-
- // Read sequence line
- final String seqLine = readLineConditionallySkippingBlanks();
- checkLine(seqLine,"sequence line");
-
- // Read quality header
- final String qualHeader = readLineConditionallySkippingBlanks();
- checkLine(qualHeader,"quality header");
- if (!qualHeader.startsWith(FastqConstants.QUALITY_HEADER)) {
- throw new PicardException(error("Quality header must start with "+ FastqConstants.QUALITY_HEADER+": "+qualHeader));
- }
-
- // Read quality line
- final String qualLine = readLineConditionallySkippingBlanks();
- checkLine(qualLine,"quality line");
-
- // Check sequence and quality lines are same length
- if (seqLine.length() != qualLine.length()) {
- throw new PicardException(error("Sequence and quality line must be the same length"));
- }
-
- final FastqRecord frec = new FastqRecord(seqHeader.substring(1, seqHeader.length()), seqLine,
- qualHeader.substring(1, qualHeader.length()), qualLine);
- line += 4 ;
- return frec ;
-
- } catch (IOException e) {
- throw new PicardException(String.format("Error reading fastq '%s'", getAbsolutePath()), e);
- }
- }
-
- public boolean hasNext() { return nextRecord != null; }
-
- public FastqRecord next() {
- if (!hasNext()) {
- throw new NoSuchElementException("next() called when !hasNext()");
- }
- final FastqRecord rec = nextRecord;
- nextRecord = readNextRecord();
- return rec;
- }
-
- public void remove() { throw new UnsupportedOperationException("Unsupported operation"); }
-
- /**
- * WARNING: Despite the fact that this class implements Iterable, calling iterator() method does not
- * start iteration from the beginning of the file. Developers should probably not call iterator()
- * directly. It is provided so that this class can be used in Java for-each loop.
- */
- public Iterator<FastqRecord> iterator() { return this; }
-
- public int getLineNumber() { return line ; }
-
-
- /**
- * @return Name of FASTQ being read, or null if not known.
- */
- public File getFile() { return fastqFile ; }
-
- public void close() {
- try {
- reader.close();
- } catch (IOException e) {
- throw new PicardException("IO problem in fastq file "+getAbsolutePath(), e);
- }
- }
-
- private void checkLine(final String line, final String kind) {
- if (line == null) {
- throw new PicardException(error("File is too short - missing "+kind+" line"));
- }
- if (StringUtil.isBlank(line)) {
- throw new PicardException(error("Missing "+kind));
- }
- }
-
- private String error(final String msg) {
- return msg + " at line "+line+" in fastq "+getAbsolutePath();
- }
-
- private String getAbsolutePath() {
- if (fastqFile == null) return "";
- else return fastqFile.getAbsolutePath();
- }
-
- private String readLineConditionallySkippingBlanks() throws IOException {
- String line;
- do {
- line = reader.readLine();
- if (line == null) return line;
- } while(skipBlankLines && StringUtil.isBlank(line));
- return line;
- }
-
-
-}
diff --git a/src/java/net/sf/picard/fastq/FastqRecord.java b/src/java/net/sf/picard/fastq/FastqRecord.java
deleted file mode 100755
index e4830c6..0000000
--- a/src/java/net/sf/picard/fastq/FastqRecord.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.fastq;
-
-/**
- * Represents a fastq record, fairly literally, i.e. without any conversion.
- */
-public class FastqRecord {
-
- private final String seqHeaderPrefix;
- private final String seqLine;
- private final String qualHeaderPrefix;
- private final String qualLine;
-
- public FastqRecord(final String seqHeaderPrefix, final String seqLine, final String qualHeaderPrefix, final String qualLine) {
- if (seqHeaderPrefix != null && seqHeaderPrefix.length() > 0) this.seqHeaderPrefix = seqHeaderPrefix;
- else this.seqHeaderPrefix = null;
- if (qualHeaderPrefix != null && qualHeaderPrefix.length() > 0) this.qualHeaderPrefix = qualHeaderPrefix;
- else this.qualHeaderPrefix = null;
- this.seqLine = seqLine ;
- this.qualLine = qualLine ;
- }
-
- public String getReadHeader() { return seqHeaderPrefix; }
- public String getReadString() { return seqLine; }
- public String getBaseQualityHeader() { return qualHeaderPrefix; }
- public String getBaseQualityString() { return qualLine; }
-}
diff --git a/src/java/net/sf/picard/fastq/FastqWriter.java b/src/java/net/sf/picard/fastq/FastqWriter.java
deleted file mode 100644
index 30b5978..0000000
--- a/src/java/net/sf/picard/fastq/FastqWriter.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.sf.picard.fastq;
-
-import java.io.Closeable;
-
-/**
- * Simple interface for a class that can write out fastq records.
- *
- * @author Tim Fennell
- */
-public interface FastqWriter {
- void write(final FastqRecord rec);
- void close();
-}
diff --git a/src/java/net/sf/picard/fastq/FastqWriterFactory.java b/src/java/net/sf/picard/fastq/FastqWriterFactory.java
deleted file mode 100644
index 5045a6f..0000000
--- a/src/java/net/sf/picard/fastq/FastqWriterFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package net.sf.picard.fastq;
-
-import net.sf.samtools.Defaults;
-
-import java.io.File;
-
-/**
- * Factory class for creating FastqWriter objects.
- *
- * @author Tim Fennell
- */
-public class FastqWriterFactory {
- boolean useAsyncIo = Defaults.USE_ASYNC_IO;
- boolean createMd5 = Defaults.CREATE_MD5;
-
- /** Sets whether or not to use async io (i.e. a dedicated thread per writer. */
- public void setUseAsyncIo(final boolean useAsyncIo) { this.useAsyncIo = useAsyncIo; }
-
- /** If true, compute MD5 and write appropriately-named file when file is closed. */
- public void setCreateMd5(final boolean createMd5) { this.createMd5 = createMd5; }
-
- public FastqWriter newWriter(final File out) {
- final FastqWriter writer = new BasicFastqWriter(out, createMd5);
- if (useAsyncIo) {
- return new AsyncFastqWriter(writer, AsyncFastqWriter.DEFAULT_QUEUE_SIZE);
- }
- else {
- return writer;
- }
- }
-}
diff --git a/src/java/net/sf/picard/fastq/IlluminaReadNameEncoder.java b/src/java/net/sf/picard/fastq/IlluminaReadNameEncoder.java
deleted file mode 100644
index a00dc55..0000000
--- a/src/java/net/sf/picard/fastq/IlluminaReadNameEncoder.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package net.sf.picard.fastq;
-
-import net.sf.picard.illumina.parser.ClusterData;
-
-/**
- * A read name encoder following the encoding initially produced by picard fastq writers.
- *
- * @see <a href="http://en.wikipedia.org/wiki/FASTQ_format#Illumina_sequence_identifiers">Illumina sequence identifiers</a> almost describes the format used here, except instead of an instrumnet name, we write the run barcode
- * @author mccowan
- */
-public class IlluminaReadNameEncoder implements ReadNameEncoder {
- final String runBarcode;
- public IlluminaReadNameEncoder(final String runBarcode) {
- this.runBarcode = runBarcode;
- }
-
- @Override
- public String generateReadName(final ClusterData cluster, final Integer pairNumber) {
- return runBarcode + ":" + cluster.getLane() + ":" + cluster.getTile() + ":" + cluster.getX() + ":" + cluster.getY() + generatePairNumberSuffix(pairNumber);
- }
-
- private static String generatePairNumberSuffix(final Integer pairNumber) {
- if (pairNumber == null)
- return "";
- else
- return "/" + pairNumber;
- }
-}
diff --git a/src/java/net/sf/picard/fastq/ReadNameEncoder.java b/src/java/net/sf/picard/fastq/ReadNameEncoder.java
deleted file mode 100644
index 2ede364..0000000
--- a/src/java/net/sf/picard/fastq/ReadNameEncoder.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.sf.picard.fastq;
-
-import net.sf.picard.illumina.parser.ClusterData;
-
-/**
- * @author mccowan
- */
-public interface ReadNameEncoder {
- /**
- * Generates a read name string for the provided cluster.
- *
- * @param cluster The cluster whose reads are having its name generated
- * @param pairNumber 1 if this is the first of the pair, 2 if it is the second, or null if this not a paired read.
- * @return The read name
- */
- String generateReadName(ClusterData cluster, Integer pairNumber);
-}
diff --git a/src/java/net/sf/picard/filter/AggregateFilter.java b/src/java/net/sf/picard/filter/AggregateFilter.java
deleted file mode 100644
index 90cee12..0000000
--- a/src/java/net/sf/picard/filter/AggregateFilter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import java.util.List;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * Aggregates multiple filters and provides a method for applying them all to a given record with
- * one method call.
- *
- * $Id$
- */
-public class AggregateFilter implements SamRecordFilter {
-
- private final List<SamRecordFilter> filters;
-
- /**
- * Constructor
- * @param filters the list of filters that this Aggregator applies
- */
- public AggregateFilter(final List<SamRecordFilter> filters) {
- this.filters = filters;
- }
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches at least one filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- for (final SamRecordFilter filter : filters) {
- if (filter.filterOut(record)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- for (final SamRecordFilter filter : filters) {
- if (filter.filterOut(first, second)) {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/src/java/net/sf/picard/filter/AlignedFilter.java b/src/java/net/sf/picard/filter/AlignedFilter.java
deleted file mode 100644
index bbc2685..0000000
--- a/src/java/net/sf/picard/filter/AlignedFilter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter to either include or exclude aligned reads
- *
- * $Id$
- */
-public class AlignedFilter implements SamRecordFilter {
-
- private boolean includeAligned = false;
-
- public AlignedFilter(final boolean includeAligned) {
- this.includeAligned = includeAligned;
- }
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- *
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- if (includeAligned) {
- if (!record.getReadUnmappedFlag()) {
- return false;
- }
- } else {
- // exclude aligned
- if (record.getReadUnmappedFlag()) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
-
- if (includeAligned) {
- // both first and second must be mapped for it to not be filtered out
- if (!first.getReadUnmappedFlag() && !second.getReadUnmappedFlag()) {
- return false;
- }
- } else {
- // exclude aligned - if either first or second is unmapped don't filter it out
- if (first.getReadUnmappedFlag() || second.getReadUnmappedFlag()) {
- return false;
- }
- }
-
- return true;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/filter/DuplicateReadFilter.java b/src/java/net/sf/picard/filter/DuplicateReadFilter.java
deleted file mode 100644
index 8a6f5cd..0000000
--- a/src/java/net/sf/picard/filter/DuplicateReadFilter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter out SAMRecords with DuplicateRead flag set
- *
- * $Id$
- */
-public class DuplicateReadFilter implements SamRecordFilter {
- /**
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- return record.getDuplicateReadFlag();
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- throw new UnsupportedOperationException("Paired DuplicateReadFilter filter not implemented!");
- }
-}
diff --git a/src/java/net/sf/picard/filter/FailsVendorReadQualityFilter.java b/src/java/net/sf/picard/filter/FailsVendorReadQualityFilter.java
deleted file mode 100644
index 1610cf2..0000000
--- a/src/java/net/sf/picard/filter/FailsVendorReadQualityFilter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter for filtering out reads that do not pass the quality filter
- *
- * $Id$
- */
-public class FailsVendorReadQualityFilter implements SamRecordFilter {
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- return record.getReadFailsVendorQualityCheckFlag();
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- // if either fails, exclude them both
- return (first.getReadFailsVendorQualityCheckFlag() || second.getReadFailsVendorQualityCheckFlag());
- }
-}
diff --git a/src/java/net/sf/picard/filter/FilteringIterator.java b/src/java/net/sf/picard/filter/FilteringIterator.java
deleted file mode 100644
index 769ae75..0000000
--- a/src/java/net/sf/picard/filter/FilteringIterator.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.samtools.SamPairUtil;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMRecordIterator;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Filtering Iterator which takes a filter and an iterator and iterates through only those records
- * which are not rejected by the filter.
- * <p/>
- * $Id$
- *
- * @author Kathleen Tibbetts
- */
-public class FilteringIterator implements CloseableIterator<SAMRecord> {
-
- private final PeekableIterator<SAMRecord> iterator;
- private final SamRecordFilter filter;
- private boolean filterReadPairs = false;
- private SAMRecord next = null;
-
- /**
- * Constructor
- *
- * @param iterator the backing iterator
- * @param filter the filter (which may be a FilterAggregator)
- * @param filterByPair if true, filter reads in pairs
- */
- public FilteringIterator(final Iterator<SAMRecord> iterator, final SamRecordFilter filter,
- final boolean filterByPair) {
-
- if (filterByPair && iterator instanceof SAMRecordIterator) {
- ((SAMRecordIterator)iterator).assertSorted(SAMFileHeader.SortOrder.queryname);
- }
-
- this.iterator = new PeekableIterator<SAMRecord>(iterator);
- this.filter = filter;
- this.filterReadPairs = filterByPair;
- next = getNextRecord();
- }
-
- /**
- * Constructor
- *
- * @param iterator the backing iterator
- * @param filter the filter (which may be a FilterAggregator)
- */
- public FilteringIterator(final Iterator<SAMRecord> iterator, final SamRecordFilter filter) {
- this.iterator = new PeekableIterator<SAMRecord>(iterator);
- this.filter = filter;
- next = getNextRecord();
- }
-
- /**
- * Returns true if the iteration has more elements.
- *
- * @return true if the iteration has more elements. Otherwise returns false.
- */
- public boolean hasNext() {
- return next != null;
- }
-
- /**
- * Returns the next element in the iteration.
- *
- * @return the next element in the iteration
- * @throws java.util.NoSuchElementException
- *
- */
- public SAMRecord next() {
- if (next == null) {
- throw new NoSuchElementException("Iterator has no more elements.");
- }
- final SAMRecord result = next;
- next = getNextRecord();
- return result;
- }
-
- /**
- * Required method for Iterator API.
- *
- * @throws UnsupportedOperationException
- */
- public void remove() {
- throw new UnsupportedOperationException("Remove() not supported by FilteringIterator");
- }
-
- public void close() {
- CloserUtil.close(iterator);
- }
-
- /**
- * Gets the next record from the underlying iterator that passes the filter
- *
- * @return SAMRecord the next filter-passing record
- */
- private SAMRecord getNextRecord() {
-
- while (iterator.hasNext()) {
- final SAMRecord record = iterator.next();
-
- if (filterReadPairs && record.getReadPairedFlag() && record.getFirstOfPairFlag() &&
- iterator.hasNext()) {
-
- SamPairUtil.assertMate(record, iterator.peek());
-
- if (filter.filterOut(record, iterator.peek())) {
- // skip second read
- iterator.next();
- } else {
- return record;
- }
- } else if (filterReadPairs && record.getReadPairedFlag() &&
- record.getSecondOfPairFlag()) {
- // assume that we did a filterOut(first, second) and it passed the filter
- return record;
- } else if (!filter.filterOut(record)) {
- return record;
- }
- }
-
- return null;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/filter/IntervalFilter.java b/src/java/net/sf/picard/filter/IntervalFilter.java
deleted file mode 100644
index a49a030..0000000
--- a/src/java/net/sf/picard/filter/IntervalFilter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.picard.util.Interval;
-import net.sf.picard.util.IntervalUtil;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMRecord;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Filter SAMRecords so that only those that overlap the given list of intervals.
- * It is required that the SAMRecords are passed in coordinate order
- *
- * $Id$
- *
- * @author alecw at broadinstitute.org
- */
-public class IntervalFilter implements SamRecordFilter {
- private final Iterator<Interval> intervals;
- /**
- * Null only if there are no more intervals
- */
- private final SAMFileHeader samHeader;
- private Interval currentInterval;
- private int currentSequenceIndex;
-
- /**
- * Prepare to filter out SAMRecords that do not overlap the given list of intervals
- * @param intervals -- must be locus-ordered & non-overlapping
- */
- public IntervalFilter(final List<Interval> intervals, final SAMFileHeader samHeader) {
- this.samHeader = samHeader;
- IntervalUtil.assertOrderedNonOverlapping(intervals.iterator(), samHeader.getSequenceDictionary());
- this.intervals = intervals.iterator();
- advanceInterval();
- }
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- while (currentInterval != null &&
- (currentSequenceIndex < record.getReferenceIndex() ||
- (currentSequenceIndex == record.getReferenceIndex() && currentInterval.getEnd() < record.getAlignmentStart()))) {
- advanceInterval();
- }
- // Return true if record should be filtered out
- return !(currentInterval != null && currentSequenceIndex == record.getReferenceIndex() &&
- currentInterval.getStart() <= record.getAlignmentEnd());
- }
-
- private void advanceInterval() {
- if (intervals.hasNext()) {
- currentInterval = intervals.next();
- currentSequenceIndex = samHeader.getSequenceIndex(currentInterval.getSequence());
- } else {
- currentInterval = null;
- }
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- throw new UnsupportedOperationException("Paired IntervalFilter filter not implemented!");
- }
-}
diff --git a/src/java/net/sf/picard/filter/NotPrimaryAlignmentFilter.java b/src/java/net/sf/picard/filter/NotPrimaryAlignmentFilter.java
deleted file mode 100644
index 8229c45..0000000
--- a/src/java/net/sf/picard/filter/NotPrimaryAlignmentFilter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter out SAMRecords with NotPrimaryAlignment flag set
- *
- * $Id$
- */
-public class NotPrimaryAlignmentFilter implements SamRecordFilter {
- /**
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- return record.getNotPrimaryAlignmentFlag();
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- // if either fails, exclude them both
- return (first.getNotPrimaryAlignmentFlag() || second.getNotPrimaryAlignmentFlag());
- }
-}
diff --git a/src/java/net/sf/picard/filter/ReadNameFilter.java b/src/java/net/sf/picard/filter/ReadNameFilter.java
deleted file mode 100644
index 07aafa8..0000000
--- a/src/java/net/sf/picard/filter/ReadNameFilter.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter by a set of specified readnames
- * <p/>
- * $Id: ReadNameFilter.java 1557 2013-09-19 21:50:03Z cristyn $
- */
-public class ReadNameFilter implements SamRecordFilter {
-
- private boolean includeReads = false;
- private Set<String> readNameFilterSet = new HashSet<String>();
-
- public ReadNameFilter(final File readNameFilterFile, final boolean includeReads) {
-
- IoUtil.assertFileIsReadable(readNameFilterFile);
- IoUtil.assertFileSizeNonZero(readNameFilterFile);
-
- try {
- final BufferedReader in = IoUtil.openFileForBufferedReading(readNameFilterFile);
-
- String line = null;
-
- while ((line = in.readLine()) != null) {
- if (!line.trim().isEmpty()) {
- readNameFilterSet.add(line.split("\\s+")[0]);
- }
- }
-
- in.close();
- } catch (IOException e) {
- throw new PicardException(e.getMessage(), e);
- }
-
- this.includeReads = includeReads;
- }
-
- public ReadNameFilter(final Set<String> readNameFilterSet, final boolean includeReads) {
- this.readNameFilterSet = readNameFilterSet;
- this.includeReads = includeReads;
- }
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- *
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- if (includeReads) {
- if (readNameFilterSet.contains(record.getReadName())) {
- return false;
- }
- } else {
- if (!readNameFilterSet.contains(record.getReadName())) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Determines whether a pair of SAMRecords matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the pair of records matches filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- if (includeReads) {
- if (readNameFilterSet.contains(first.getReadName()) &&
- readNameFilterSet.contains(second.getReadName())) {
- return false;
- }
- } else {
- if (!readNameFilterSet.contains(first.getReadName()) &&
- !readNameFilterSet.contains(second.getReadName())) {
- return false;
- }
- }
-
- return true;
- }
-
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/filter/SamRecordFilter.java b/src/java/net/sf/picard/filter/SamRecordFilter.java
deleted file mode 100644
index df9a95c..0000000
--- a/src/java/net/sf/picard/filter/SamRecordFilter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * API for filtering SAMRecords
- *
- * $Id$
- */
-public interface SamRecordFilter {
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- *
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(SAMRecord record);
-
- /**
- * Determines whether a pair of SAMRecords matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the pair of records matches filter, otherwise false
- */
- public boolean filterOut(SAMRecord first, SAMRecord second);
-}
diff --git a/src/java/net/sf/picard/filter/SecondaryAlignmentFilter.java b/src/java/net/sf/picard/filter/SecondaryAlignmentFilter.java
deleted file mode 100644
index d971497..0000000
--- a/src/java/net/sf/picard/filter/SecondaryAlignmentFilter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package net.sf.picard.filter;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * SamRecordFilter that filters out secondary alignments, but not supplemental alignments.
- */
-public class SecondaryAlignmentFilter implements SamRecordFilter {
- /**
- * Returns true if the read is marked as secondary.
- */
- public boolean filterOut(final SAMRecord record) { return record.getNotPrimaryAlignmentFlag(); }
-
- /**
- * Returns true if either read is marked as secondary.
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- return first.getNotPrimaryAlignmentFlag() || second.getNotPrimaryAlignmentFlag();
- }
-}
diff --git a/src/java/net/sf/picard/filter/SecondaryOrSupplementaryFilter.java b/src/java/net/sf/picard/filter/SecondaryOrSupplementaryFilter.java
deleted file mode 100644
index 1aad60c..0000000
--- a/src/java/net/sf/picard/filter/SecondaryOrSupplementaryFilter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package net.sf.picard.filter;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter out SAMRecords with NotPrimaryAlignment or Supplementary flag set
- * This class should be viewed as a replacement for NotPrimarySkippingIterator,
- * in that we did not want to change the functionality of NPSI to no longer match its name
- * $Id$
- */
-public class SecondaryOrSupplementaryFilter implements SamRecordFilter {
- /**
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- return record.isSecondaryOrSupplementary();
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- // if either fails, exclude them both
- return first.isSecondaryOrSupplementary() || second.isSecondaryOrSupplementary();
- }
-}
diff --git a/src/java/net/sf/picard/filter/SolexaNoiseFilter.java b/src/java/net/sf/picard/filter/SolexaNoiseFilter.java
deleted file mode 100644
index 08cd0f8..0000000
--- a/src/java/net/sf/picard/filter/SolexaNoiseFilter.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter to determine whether a read is "noisy" due to a poly-A run that is a sequencing artifact.
- * Currently we filter out only reads that are composed entirely of As.
- *
- * $Id$
- */
-public class SolexaNoiseFilter implements SamRecordFilter {
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord record) {
- final byte[] sequence = record.getReadBases();
- for (final byte base : sequence) {
- if (base != 'A' && base != 'a' &&
- !SequenceUtil.isNoCall(base)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Determines whether a pair of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- // only filter out the pair if both first and second reads have all As
- return (filterOut(first) && filterOut(second));
- }
-}
diff --git a/src/java/net/sf/picard/filter/TagFilter.java b/src/java/net/sf/picard/filter/TagFilter.java
deleted file mode 100644
index c6c8379..0000000
--- a/src/java/net/sf/picard/filter/TagFilter.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import java.util.List;
-import java.util.Arrays;
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter class for matching tag attributes in SAMRecords
- *
- * $Id$
- */
-public class TagFilter implements SamRecordFilter {
-
- private final String tag; // The key of the tag to match
- private final List<Object> values; // The list of matching values
-
- /**
- * Constructor for a single value
- *
- * @param tag the key of the tag to match
- * @param value the value to match
- */
- public TagFilter(String tag, Object value) {
- this.tag = tag;
- this.values = Arrays.asList(value);
- }
-
- /**
- * Constructor for multiple values
- *
- * @param tag the key of the tag to match
- * @param values the matching values
- */
- public TagFilter(String tag, List<Object> values) {
- this.tag = tag;
- this.values = values;
- }
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, otherwise false
- */
- public boolean filterOut(SAMRecord record) {
- return values.contains(record.getAttribute(tag));
- }
-
- /**
- * Determines whether a paired of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- // both first and second must have the tag in order for it to be filtered out
- return values.contains(first.getAttribute(tag)) && values.contains(second.getAttribute(tag));
- }
-}
diff --git a/src/java/net/sf/picard/filter/WholeReadClippedFilter.java b/src/java/net/sf/picard/filter/WholeReadClippedFilter.java
deleted file mode 100644
index fc338f7..0000000
--- a/src/java/net/sf/picard/filter/WholeReadClippedFilter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.picard.sam.ReservedTagConstants;
-import net.sf.samtools.SAMRecord;
-
-/**
- * Filter SAMRecords so that only those that have at least one un-clipped base are
- * returned.
- *
- * $Id$
- *
- * @author ktibbett at broadinstitute.org
- */
-public class WholeReadClippedFilter implements SamRecordFilter {
-
- /**
- * Determines whether a SAMRecord matches this filter
- *
- * @param record the SAMRecord to evaluate
- * @return true if the SAMRecord matches the filter, and should be filtered out,
- * otherwise false
- */
- @Override
- public boolean filterOut(final SAMRecord record) {
- return record.getAttribute(ReservedTagConstants.XT) != null
- && (Integer)record.getAttribute(ReservedTagConstants.XT) == 1;
- }
-
- /**
- * Determines whether a paired of SAMRecord matches this filter
- *
- * @param first the first SAMRecord to evaluate
- * @param second the second SAMRecord to evaluate
- *
- * @return true if the SAMRecords matches the filter, otherwise false
- */
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- // if either fails, exclude them both
- return (filterOut(first) || filterOut(second));
- }
-}
diff --git a/src/java/net/sf/picard/illumina/CheckIlluminaDirectory.java b/src/java/net/sf/picard/illumina/CheckIlluminaDirectory.java
deleted file mode 100644
index 2b9b8a6..0000000
--- a/src/java/net/sf/picard/illumina/CheckIlluminaDirectory.java
+++ /dev/null
@@ -1,256 +0,0 @@
-package net.sf.picard.illumina;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.illumina.parser.IlluminaDataProviderFactory;
-import net.sf.picard.illumina.parser.IlluminaDataType;
-import net.sf.picard.illumina.parser.IlluminaFileUtil;
-import net.sf.picard.illumina.parser.OutputMapping;
-import net.sf.picard.illumina.parser.ParameterizedFileUtil;
-import net.sf.picard.illumina.parser.ReadStructure;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProcessExecutor;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * Program to check a lane of an Illumina output directory. This program checks that files exist, are non-zero in length, for every tile/cycle and
- * specified data type. If NO data type is specified then the default data types used by IlluminaBasecallsToSam are used.
- */
-public class CheckIlluminaDirectory extends CommandLineProgram {
- private static final Log log = Log.getInstance(CheckIlluminaDirectory.class);
-
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE = getStandardUsagePreamble() +
- "Check that the files to provide the data specified by DATA_TYPES are available, exist, and are reasonably sized for every tile/cycle. "
- +
- "Reasonably sized means non-zero sized for files that exist per tile and equal size for binary files that exist per cycle/per tile. "
- +
- "CheckIlluminaDirectory DOES NOT check that the individual records in a file are well-formed.\n";
-
- @Option(doc = "The basecalls output directory. ", shortName = "B")
- public File BASECALLS_DIR;
-
- @Option(doc =
- "The data types that should be checked for each tile/cycle. If no values are provided then the data types checked are those "
- +
- "required by IlluminaBaseCallsToSam (which is a superset of those used in ExtractIlluminaBarcodes). These data types vary slightly depending on"
- +
- "whether or not the run is barcoded so READ_STRUCTURE should be the same as that which will be passed to IlluminaBasecallsToSam. If this option "
- +
- "is left unspecified then both ExtractIlluminaBarcodes and IlluminaBaseCallsToSam should complete successfully UNLESS the "
- +
- "individual records of the files themselves are spurious. ",
- shortName = "DT",
- optional = true)
- public final Set<IlluminaDataType> DATA_TYPES = new TreeSet<IlluminaDataType>();
-
- @Option(doc = ReadStructure.PARAMETER_DOC
- + " Note: If you want to check whether or not a future IlluminaBasecallsToSam or ExtractIlluminaBarcodes "
- +
- "run will fail then be sure to use the exact same READ_STRUCTURE that you would pass to these programs for this run.",
- shortName = "RS")
- public String READ_STRUCTURE;
-
- @Option(doc = "The number of the lane(s) to check. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME,
- minElements = 1)
- public List<Integer> LANES;
-
- @Option(doc = "The number(s) of the tile(s) to check. ", shortName = "T", optional = true)
- public List<Integer> TILE_NUMBERS;
-
- @Option(doc = "A flag to determine whether or not to create fake versions of the missing files.", shortName = "F",
- optional = true)
- public Boolean FAKE_FILES = false;
-
- @Option(doc = "A flag to create symlinks to the loc file for the X Ten for each tile.", shortName = "X",
- optional = true)
- public Boolean LINK_LOCS = false;
-
- /**
- * Required main method implementation.
- */
- public static void main(final String[] argv) {
- new CheckIlluminaDirectory().instanceMainWithExit(argv);
- }
-
-
- @Override
- protected int doWork() {
- final ReadStructure readStructure = new ReadStructure(READ_STRUCTURE);
- if (DATA_TYPES.isEmpty()) {
- DATA_TYPES.addAll(Arrays.asList(IlluminaBasecallsConverter.DATA_TYPES_NO_BARCODE));
- }
-
- final List<Integer> failingLanes = new ArrayList<Integer>();
- int totalFailures = 0;
-
- final int[] expectedCycles = new OutputMapping(readStructure).getOutputCycles();
- log.info("Checking lanes(" + StringUtil.join(",", LANES) + " in basecalls directory (" + BASECALLS_DIR
- .getAbsolutePath() + ")\n");
- log.info("Expected cycles: " + StringUtil.intValuesToString(expectedCycles));
-
- for (final Integer lane : LANES) {
- IlluminaFileUtil fileUtil = new IlluminaFileUtil(BASECALLS_DIR, lane);
- final List<Integer> expectedTiles = fileUtil.getExpectedTiles();
- if (!TILE_NUMBERS.isEmpty()) {
- expectedTiles.retainAll(TILE_NUMBERS);
- }
-
- if (LINK_LOCS) {
- createLocFileSymlinks(fileUtil, lane);
- //we need to create a new file util because it stores a cache to the files it found on
- //construction and this doesn't inclue the recently created symlinks
- fileUtil = new IlluminaFileUtil(BASECALLS_DIR, lane);
- }
-
- log.info("Checking lane " + lane);
- log.info("Expected tiles: " + StringUtil.join(", ", expectedTiles));
-
- final int numFailures = verifyLane(fileUtil, expectedTiles, expectedCycles, DATA_TYPES, FAKE_FILES);
-
- if (numFailures > 0) {
- log.info("Lane " + lane + " FAILED " + " Total Errors: " + numFailures);
- failingLanes.add(lane);
- totalFailures += numFailures;
- } else {
- log.info("Lane " + lane + " SUCCEEDED ");
- }
- }
-
- int status = 0;
- if (totalFailures == 0) {
- log.info("SUCCEEDED! All required files are present and non-empty.");
- } else {
- status = totalFailures;
- log.info("FAILED! There were " + totalFailures + " in the following lanes: " + StringUtil
- .join(", ", failingLanes));
- }
-
- return status;
- }
-
- private void createLocFileSymlinks(final IlluminaFileUtil fileUtil, final int lane) {
- final File baseFile = new File(BASECALLS_DIR.getParentFile().getAbsolutePath() + File.separator + "s.locs");
- final File newFileBase = new File(baseFile.getParent() + File.separator + IlluminaFileUtil
- .longLaneStr(lane) + File.separator);
- if (baseFile.exists()) {
- boolean success = true;
- if (!newFileBase.exists()) {
- success = newFileBase.mkdirs();
- }
- if (success) {
- for (final Integer tile : fileUtil.getExpectedTiles()) {
- final String newName =
- newFileBase + File.separator + String.format("s_%d_%d.locs", lane, tile);
- final ProcessExecutor.ExitStatusAndOutput output =
- ProcessExecutor.executeAndReturnInterleavedOutput(new String[]{"ln", "-fs", baseFile.getAbsolutePath(), newName});
- if (output.exitStatus != 0) {
- throw new PicardException("Could not create symlink: " + output.stdout);
- }
- }
- } else {
- throw new PicardException(String.format("Could not create lane directory: %s.", newFileBase.getAbsolutePath()));
- }
- } else {
- throw new PicardException(String.format("Locations file %s does not exist.", baseFile.getAbsolutePath()));
- }
-
- }
-
- /**
- * Use fileUtil to find the data types that would be used by IlluminaDataProvider. Verify that for the expected
- * tiles/cycles/data types that all the files needed to provide their data is present. This method logs every
- * error that is found (excluding file faking errors) and returns the number of errors found
- *
- * @param fileUtil A file util paramterized with the directory/lane to check
- * @param expectedTiles The tiles we expect to be available/well-formed
- * @param cycles The cycles we expect to be available/well-formed
- * @param dataTypes The data types we expect to be available/well-formed
- * @return The number of errors found/logged for this directory/lane
- */
- private static final int verifyLane(final IlluminaFileUtil fileUtil, final List<Integer> expectedTiles,
- final int[] cycles,
- final Set<IlluminaDataType> dataTypes, final boolean fakeFiles) {
- if (expectedTiles.isEmpty()) {
- throw new PicardException(
- "0 input tiles were specified! Check to make sure this lane is in the InterOp file!");
- }
-
- if (cycles.length == 0) {
- throw new PicardException("0 output cycles were specified!");
- }
-
- int numFailures = 0;
-
- //find what request IlluminaDataTypes we have files for and select the most preferred file format available for that type
- final Map<IlluminaFileUtil.SupportedIlluminaFormat, Set<IlluminaDataType>> formatToDataTypes =
- IlluminaDataProviderFactory.determineFormats(dataTypes, fileUtil);
-
- //find if we have any IlluminaDataType with NO available file formats and, if any exist, increase the error count
- final Set<IlluminaDataType> unmatchedDataTypes =
- IlluminaDataProviderFactory.findUnmatchedTypes(dataTypes, formatToDataTypes);
- if (!unmatchedDataTypes.isEmpty()) {
- if (fakeFiles) {
- for (final IlluminaDataType dataType : unmatchedDataTypes) {
- final IlluminaFileUtil.SupportedIlluminaFormat format =
- IlluminaDataProviderFactory.findPreferredFormat(dataType, fileUtil);
- fileUtil.getUtil(format).fakeFiles(expectedTiles, cycles, format);
-
- }
- }
- log.info("Could not find a format with available files for the following data types: " + StringUtil
- .join(", ", new ArrayList<IlluminaDataType>(unmatchedDataTypes)));
- numFailures += unmatchedDataTypes.size();
- }
-
- for (final IlluminaFileUtil.SupportedIlluminaFormat format : formatToDataTypes.keySet()) {
- final ParameterizedFileUtil util = fileUtil.getUtil(format);
- final List<String> failures = util.verify(expectedTiles, cycles);
- //if we have failures and we want to fake files then fake them now.
- if (!failures.isEmpty() && fakeFiles) {
- //fake files
- util.fakeFiles(expectedTiles, cycles, format);
-
- }
- numFailures += failures.size();
- for (final String failure : failures) {
- log.info(failure);
- }
- }
-
- return numFailures;
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- IoUtil.assertDirectoryIsReadable(BASECALLS_DIR);
- final List<String> errors = new ArrayList<String>();
-
- for (final Integer lane : LANES) {
- if (lane < 1) {
- errors.add(
- "LANES must be greater than or equal to 1. LANES passed in " + StringUtil.join(", ", LANES));
- break;
- }
- }
-
- if (errors.isEmpty()) {
- return null;
- } else {
- return errors.toArray(new String[errors.size()]);
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/ClusterDataToSamConverter.java b/src/java/net/sf/picard/illumina/ClusterDataToSamConverter.java
deleted file mode 100644
index fd1e3eb..0000000
--- a/src/java/net/sf/picard/illumina/ClusterDataToSamConverter.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.picard.fastq.IlluminaReadNameEncoder;
-import net.sf.picard.fastq.ReadNameEncoder;
-import net.sf.picard.filter.SamRecordFilter;
-import net.sf.picard.filter.SolexaNoiseFilter;
-import net.sf.picard.illumina.parser.ClusterData;
-import net.sf.picard.illumina.parser.ReadData;
-import net.sf.picard.illumina.parser.ReadStructure;
-import net.sf.picard.sam.ReservedTagConstants;
-import net.sf.picard.util.AdapterMarker;
-import net.sf.picard.util.AdapterPair;
-import net.sf.picard.util.IlluminaUtil;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMTag;
-
-import java.util.List;
-
-/**
- * Takes ClusterData provided by an IlluminaDataProvider into one or two SAMRecords,
- * as appropriate, and optionally marking adapter sequence. There is one converter per
- * IlluminaBasecallsToSam run, and all the TileProcessors use the same converter.
- *
- * @author jburke at broadinstitute.org
- */
-public class ClusterDataToSamConverter implements
- IlluminaBasecallsConverter.ClusterDataConverter<IlluminaBasecallsToSam.SAMRecordsForCluster> {
-
-
- private final String runBarcode;
- private final String readGroupId;
- private final SamRecordFilter filters = new SolexaNoiseFilter();
- private final boolean isPairedEnd;
- private final boolean isBarcoded;
- private final int [] templateIndices;
- private final int [] barcodeIndices;
- private final AdapterMarker adapterMarker;
- private final int outputRecordsPerCluster;
- private final ReadNameEncoder readNameEncoder;
-
- /**
- * Constructor
- *
- * @param runBarcode Used to construct read names.
- * @param readGroupId If non-null, set RG attribute on SAMRecord to this.
- * @param readStructure The expected structure (number of reads and indexes,
- * and their length) in the read.
- * @param adapters The list of adapters to check for in the read
- */
- public ClusterDataToSamConverter(final String runBarcode,
- final String readGroupId,
- final ReadStructure readStructure,
- final List<IlluminaUtil.IlluminaAdapterPair> adapters) {
- this.runBarcode = runBarcode;
- this.readGroupId = readGroupId;
-
- this.readNameEncoder = new IlluminaReadNameEncoder(runBarcode);
-
- this.isPairedEnd = readStructure.templates.length() == 2;
- this.isBarcoded = !readStructure.barcodes.isEmpty();
-
- if (adapters.isEmpty()) {
- this.adapterMarker = null;
- } else {
- this.adapterMarker = new AdapterMarker(adapters.toArray(new AdapterPair[adapters.size()]));
- }
-
- this.templateIndices = readStructure.templates.getIndices();
- this.barcodeIndices = readStructure.barcodes.getIndices();
-
- this.outputRecordsPerCluster = readStructure.templates.length();
- }
-
- /**
- * Creates a new SAM record from the basecall data
- */
- private SAMRecord createSamRecord(final ReadData readData, final String readName, final boolean isPf, final boolean firstOfPair, final String unmatchedBarcode) {
- final SAMRecord sam = new SAMRecord(null);
- sam.setReadName(readName);
- sam.setReadBases(readData.getBases());
- sam.setBaseQualities(readData.getQualities());
-
- // Flag values
- sam.setReadPairedFlag(isPairedEnd);
- sam.setReadUnmappedFlag(true);
- sam.setReadFailsVendorQualityCheckFlag(!isPf);
- if (isPairedEnd) {
- sam.setMateUnmappedFlag(true);
- sam.setFirstOfPairFlag(firstOfPair);
- sam.setSecondOfPairFlag(!firstOfPair);
- }
-
- if (filters.filterOut(sam)) {
- sam.setAttribute(ReservedTagConstants.XN, 1);
- }
-
- if (this.readGroupId != null) {
- sam.setAttribute(SAMTag.RG.name(), readGroupId);
- }
-
- // If it's a barcoded run and the read isn't assigned to a barcode, then add the barcode
- // that was read as an optional tag
- if (unmatchedBarcode != null) {
- sam.setAttribute(SAMTag.BC.name(), unmatchedBarcode);
- }
-
- return sam;
- }
-
- /**
- * Creates the SAMRecord for each read in the cluster
- */
- public IlluminaBasecallsToSam.SAMRecordsForCluster convertClusterToOutputRecord(final ClusterData cluster) {
-
- final IlluminaBasecallsToSam.SAMRecordsForCluster ret = new IlluminaBasecallsToSam.SAMRecordsForCluster(outputRecordsPerCluster);
- final String readName = readNameEncoder.generateReadName(cluster, null); // Use null here to prevent /1 or /2 suffixes on read name.
-
- // Get and transform the unmatched barcode, if any, to store with the reads
- String unmatchedBarcode = null;
- if (isBarcoded && cluster.getMatchedBarcode() == null) {
- final byte barcode[][] = new byte[barcodeIndices.length][];
- for (int i = 0; i < barcodeIndices.length; i++) {
- barcode[i] = cluster.getRead(barcodeIndices[i]).getBases();
- }
- unmatchedBarcode = IlluminaUtil.barcodeSeqsToString(barcode).replace('.', 'N'); //TODO: This has a separator, where as in other places we do not use a separator
- }
-
- final SAMRecord firstOfPair = createSamRecord(
- cluster.getRead(templateIndices[0]), readName, cluster.isPf(), true,unmatchedBarcode);
- ret.records[0] = firstOfPair;
-
- SAMRecord secondOfPair = null;
-
- if(isPairedEnd) {
- secondOfPair = createSamRecord(
- cluster.getRead(templateIndices[1]), readName, cluster.isPf(), false, unmatchedBarcode);
- ret.records[1] = secondOfPair;
- }
-
- if (adapterMarker != null) {
- // Clip the read
- if (isPairedEnd) {
- adapterMarker.adapterTrimIlluminaPairedReads(firstOfPair, secondOfPair);
- }
- else {
- adapterMarker.adapterTrimIlluminaSingleRead(firstOfPair);
- }
- }
- return ret;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/ExtractIlluminaBarcodes.java b/src/java/net/sf/picard/illumina/ExtractIlluminaBarcodes.java
deleted file mode 100644
index beda46a..0000000
--- a/src/java/net/sf/picard/illumina/ExtractIlluminaBarcodes.java
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.illumina.parser.*;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricBase;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.util.IlluminaUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.TabbedTextFileWithHeaderParser;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.text.NumberFormat;
-import java.util.*;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Determine the barcode for each read in an Illumina lane.
- * For each tile, a file is written to the basecalls directory of the form s_<lane>_<tile>_barcode.txt.
- * An output file contains a line for each read in the tile, aligned with the regular basecall output
- * The output file contains the following tab-separated columns:
- * - read subsequence at barcode position
- * - Y or N indicating if there was a barcode match
- * - matched barcode sequence (empty if read did not match one of the barcodes). If there is no match
- * but we're close to the threshold of calling it a match we output the barcode that would have been
- * matched but in lower case
- *
- * @author jburke at broadinstitute.org
- */
-public class ExtractIlluminaBarcodes extends CommandLineProgram {
-
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE =
- getStandardUsagePreamble() + "Determine the barcode for each read in an Illumina lane.\n" +
- "For each tile, a file is written to the basecalls directory of the form s_<lane>_<tile>_barcode.txt. " +
- "An output file contains a line for each read in the tile, aligned with the regular basecall output. \n" +
- "The output file contains the following tab-separated columns: \n" +
- " * read subsequence at barcode position\n" +
- " * Y or N indicating if there was a barcode match\n" +
- " * matched barcode sequence\n" +
- "Note that the order of specification of barcodes can cause arbitrary differences in output for poorly matching barcodes.\n\n";
-
- @Option(doc = "The Illumina basecalls directory. ", shortName = "B")
- public File BASECALLS_DIR;
-
- @Option(doc = "Where to write _barcode.txt files. By default, these are written to BASECALLS_DIR.", optional = true)
- public File OUTPUT_DIR;
-
- @Option(doc = "Lane number. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
- public Integer LANE;
-
- @Option(doc = ReadStructure.PARAMETER_DOC, shortName = "RS")
- public String READ_STRUCTURE;
-
- @Option(doc = "Barcode sequence. These must be unique, and all the same length. This cannot be used with reads that " +
- "have more than one barcode; use BARCODE_FILE in that case. ", mutex = {"BARCODE_FILE"})
- public List<String> BARCODE = new ArrayList<String>();
-
- @Option(doc = "Tab-delimited file of barcode sequences, barcode name and, optionally, library name. " +
- "Barcodes must be unique and all the same length. Column headers must be 'barcode_sequence_1', " +
- "'barcode_sequence_2' (optional), 'barcode_name', and 'library_name'.", mutex = {"BARCODE"})
- public File BARCODE_FILE;
-
- @Option(doc = "Per-barcode and per-lane metrics written to this file.", shortName = StandardOptionDefinitions.METRICS_FILE_SHORT_NAME)
- public File METRICS_FILE;
-
- @Option(doc = "Maximum mismatches for a barcode to be considered a match.")
- public int MAX_MISMATCHES = 1;
-
- @Option(doc = "Minimum difference between number of mismatches in the best and second best barcodes for a barcode to be considered a match.")
- public int MIN_MISMATCH_DELTA = 1;
-
- @Option(doc = "Maximum allowable number of no-calls in a barcode read before it is considered unmatchable.")
- public int MAX_NO_CALLS = 2;
-
- @Option(shortName = "Q", doc = "Minimum base quality. Any barcode bases falling below this quality will be considered a mismatch even in the bases match.")
- public int MINIMUM_BASE_QUALITY = 0;
-
- @Option(doc = "The minimum quality (after transforming 0s to 1s) expected from reads. If qualities are lower than this value, an error is thrown." +
- "The default of 2 is what the Illumina's spec describes as the minimum, but in practice the value has been observed lower.")
- public int MINIMUM_QUALITY = BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY;
-
- @Option(shortName = "GZIP", doc = "Compress output s_l_t_barcode.txt files using gzip and append a .gz extension to the file names.")
- public boolean COMPRESS_OUTPUTS = false;
-
- @Option(doc = "Run this many PerTileBarcodeExtractors in parallel. If NUM_PROCESSORS = 0, number of cores is automatically set to " +
- "the number of cores available on the machine. If NUM_PROCESSORS < 0 then the number of cores used will be " +
- "the number available on the machine less NUM_PROCESSORS.")
- public int NUM_PROCESSORS = 1;
-
- private static final Log LOG = Log.getInstance(ExtractIlluminaBarcodes.class);
-
- /** The read structure of the actual Illumina Run, i.e. the readStructure of the input data */
- private ReadStructure readStructure;
-
- private IlluminaDataProviderFactory factory;
-
- private final Map<String, BarcodeMetric> barcodeToMetrics = new LinkedHashMap<String, BarcodeMetric>();
-
- private final NumberFormat tileNumberFormatter = NumberFormat.getNumberInstance();
- private BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
-
- public ExtractIlluminaBarcodes() {
- tileNumberFormatter.setMinimumIntegerDigits(4);
- tileNumberFormatter.setGroupingUsed(false);
- }
-
- @Override
- protected int doWork() {
-
- IoUtil.assertFileIsWritable(METRICS_FILE);
- if (OUTPUT_DIR == null) {
- OUTPUT_DIR = BASECALLS_DIR;
- }
- IoUtil.assertDirectoryIsWritable(OUTPUT_DIR);
-
- // Create BarcodeMetric for counting reads that don't match any barcode
- final String[] noMatchBarcode = new String[readStructure.barcodes.length()];
- int index = 0;
- for (final ReadDescriptor d : readStructure.descriptors) {
- if (d.type == ReadType.Barcode) {
- noMatchBarcode[index++] = StringUtil.repeatCharNTimes('N', d.length);
- }
- }
-
- final BarcodeMetric noMatchMetric = new BarcodeMetric(null, null, IlluminaUtil.barcodeSeqsToString(noMatchBarcode), noMatchBarcode);
-
- final int numProcessors;
- if (NUM_PROCESSORS == 0) {
- numProcessors = Runtime.getRuntime().availableProcessors();
- } else if (NUM_PROCESSORS < 0) {
- numProcessors = Runtime.getRuntime().availableProcessors() + NUM_PROCESSORS;
- } else {
- numProcessors = NUM_PROCESSORS;
- }
-
- LOG.info("Processing with " + numProcessors + " PerTileBarcodeExtractor(s).");
- final ExecutorService pool = Executors.newFixedThreadPool(numProcessors);
-
- // TODO: This is terribly inefficient; we're opening a huge number of files via the extractor constructor and we never close them.
- final List<PerTileBarcodeExtractor> extractors = new ArrayList<PerTileBarcodeExtractor>(factory.getAvailableTiles().size());
- for (final int tile : factory.getAvailableTiles()) {
- final PerTileBarcodeExtractor extractor = new PerTileBarcodeExtractor(
- tile,
- getBarcodeFile(tile),
- barcodeToMetrics,
- noMatchMetric,
- factory,
- MINIMUM_BASE_QUALITY,
- MAX_NO_CALLS,
- MAX_MISMATCHES,
- MIN_MISMATCH_DELTA
- );
- extractors.add(extractor);
- }
- try {
- for (final PerTileBarcodeExtractor extractor : extractors) {
- pool.submit(extractor);
- }
- pool.shutdown();
- // Wait a while for existing tasks to terminate
- if (!pool.awaitTermination(6, TimeUnit.HOURS)) {
- pool.shutdownNow(); // Cancel any still-executing tasks
- // Wait a while for tasks to respond to being cancelled
- if (!pool.awaitTermination(60, TimeUnit.SECONDS))
- LOG.error("Pool did not terminate");
- return 1;
- }
- } catch (final Throwable e) {
- // (Re-)Cancel if current thread also interrupted
- LOG.error(e, "Parent thread encountered problem submitting extractors to thread pool or awaiting shutdown of threadpool. Attempting to kill threadpool.");
- pool.shutdownNow();
- return 2;
- }
-
- LOG.info("Processed " + extractors.size() + " tiles.");
- for (final PerTileBarcodeExtractor extractor : extractors) {
- for (final String key : barcodeToMetrics.keySet()) {
- barcodeToMetrics.get(key).merge(extractor.getMetrics().get(key));
- }
- noMatchMetric.merge(extractor.getNoMatchMetric());
- if (extractor.getException() != null) {
- LOG.error("Abandoning metrics calculation because one or more PerTileBarcodeExtractors failed.");
- return 4;
- }
- }
-
-
- // Finish metrics tallying.
- int totalReads = noMatchMetric.READS;
- int totalPfReads = noMatchMetric.PF_READS;
- int totalPfReadsAssigned = 0;
- for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
- totalReads += barcodeMetric.READS;
- totalPfReads += barcodeMetric.PF_READS;
- totalPfReadsAssigned += barcodeMetric.PF_READS;
- }
-
- if (totalReads > 0) {
- noMatchMetric.PCT_MATCHES = noMatchMetric.READS / (double) totalReads;
- double bestPctOfAllBarcodeMatches = 0;
- for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
- barcodeMetric.PCT_MATCHES = barcodeMetric.READS / (double) totalReads;
- if (barcodeMetric.PCT_MATCHES > bestPctOfAllBarcodeMatches) {
- bestPctOfAllBarcodeMatches = barcodeMetric.PCT_MATCHES;
- }
- }
- if (bestPctOfAllBarcodeMatches > 0) {
- noMatchMetric.RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
- noMatchMetric.PCT_MATCHES / bestPctOfAllBarcodeMatches;
- for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
- barcodeMetric.RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
- barcodeMetric.PCT_MATCHES / bestPctOfAllBarcodeMatches;
- }
- }
- }
-
- if (totalPfReads > 0) {
- noMatchMetric.PF_PCT_MATCHES = noMatchMetric.PF_READS / (double) totalPfReads;
- double bestPctOfAllBarcodeMatches = 0;
- for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
- barcodeMetric.PF_PCT_MATCHES = barcodeMetric.PF_READS / (double) totalPfReads;
- if (barcodeMetric.PF_PCT_MATCHES > bestPctOfAllBarcodeMatches) {
- bestPctOfAllBarcodeMatches = barcodeMetric.PF_PCT_MATCHES;
- }
- }
- if (bestPctOfAllBarcodeMatches > 0) {
- noMatchMetric.PF_RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
- noMatchMetric.PF_PCT_MATCHES / bestPctOfAllBarcodeMatches;
- for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
- barcodeMetric.PF_RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
- barcodeMetric.PF_PCT_MATCHES / bestPctOfAllBarcodeMatches;
- }
- }
- }
-
- // Warn about minimum qualities and assert that we've achieved the minimum.
- for (Map.Entry<Byte, Integer> entry : bclQualityEvaluationStrategy.getPoorQualityFrequencies().entrySet()) {
- LOG.warn(String.format("Observed low quality of %s %s times.", entry.getKey(), entry.getValue()));
- }
- bclQualityEvaluationStrategy.assertMinimumQualities();
-
- // Calculate the normalized matches
- if (totalPfReadsAssigned > 0) {
- final double mean = (double) totalPfReadsAssigned / (double) barcodeToMetrics.values().size();
- for (final BarcodeMetric m : barcodeToMetrics.values()) {
- m.PF_NORMALIZED_MATCHES = m.PF_READS / mean;
- }
- }
-
- final MetricsFile<BarcodeMetric, Integer> metrics = getMetricsFile();
- for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
- metrics.addMetric(barcodeMetric);
- }
- metrics.addMetric(noMatchMetric);
- metrics.write(METRICS_FILE);
- return 0;
- }
-
- /** Create a barcode filename corresponding to the given tile qseq file. */
- private File getBarcodeFile(final int tile) {
- return new File(OUTPUT_DIR,
- "s_" + LANE + "_" + tileNumberFormatter.format(tile) + "_barcode.txt" + (COMPRESS_OUTPUTS ? ".gz" : ""));
- }
-
- /**
- * Validate that POSITION >= 1, and that all BARCODEs are the same length and unique
- *
- * @return null if command line is valid. If command line is invalid, returns an array of error message
- * to be written to the appropriate place.
- */
- @Override
- protected String[] customCommandLineValidation() {
- final ArrayList<String> messages = new ArrayList<String>();
-
- this.bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(MINIMUM_QUALITY);
-
- /**
- * In extract illumina barcodes we NEVER want to look at the template reads, therefore replace them with skips because
- * IlluminaDataProvider and its factory will not open these nor produce ClusterData with the template reads in them, thus reducing
- * the file IO and value copying done by the data provider
- */
- readStructure = new ReadStructure(READ_STRUCTURE.replaceAll("T", "S"));
- final IlluminaDataType[] datatypes = (MINIMUM_BASE_QUALITY > 0) ?
- new IlluminaDataType[]{IlluminaDataType.BaseCalls, IlluminaDataType.PF, IlluminaDataType.QualityScores} :
- new IlluminaDataType[]{IlluminaDataType.BaseCalls, IlluminaDataType.PF};
- factory = new IlluminaDataProviderFactory(BASECALLS_DIR, LANE, readStructure, bclQualityEvaluationStrategy, datatypes);
-
- if (BARCODE_FILE != null) {
- parseBarcodeFile(messages);
- } else {
- final Set<String> barcodes = new HashSet<String>();
- for (final String barcode : BARCODE) {
- if (barcodes.contains(barcode)) {
- messages.add("Barcode " + barcode + " specified more than once.");
- }
- barcodes.add(barcode);
- final BarcodeMetric metric = new BarcodeMetric(null, null, barcode, new String[]{barcode});
- barcodeToMetrics.put(barcode, metric);
- }
- }
- if (barcodeToMetrics.keySet().size() == 0) {
- messages.add("No barcodes have been specified.");
- }
- if (messages.size() == 0) {
- return null;
- }
- return messages.toArray(new String[messages.size()]);
- }
-
- public static void main(final String[] argv) {
- System.exit(new ExtractIlluminaBarcodes().instanceMain(argv));
- }
-
- private static final String BARCODE_SEQUENCE_COLUMN = "barcode_sequence";
- private static final String BARCODE_SEQUENCE_1_COLUMN = "barcode_sequence_1";
- private static final String BARCODE_NAME_COLUMN = "barcode_name";
- private static final String LIBRARY_NAME_COLUMN = "library_name";
-
- private void parseBarcodeFile(final ArrayList<String> messages) {
- final TabbedTextFileWithHeaderParser barcodesParser = new TabbedTextFileWithHeaderParser(BARCODE_FILE);
- final String sequenceColumn = barcodesParser.hasColumn(BARCODE_SEQUENCE_COLUMN)
- ? BARCODE_SEQUENCE_COLUMN : barcodesParser.hasColumn(BARCODE_SEQUENCE_1_COLUMN)
- ? BARCODE_SEQUENCE_1_COLUMN : null;
- if (sequenceColumn == null) {
- messages.add(BARCODE_FILE + " does not have " + BARCODE_SEQUENCE_COLUMN + " or " +
- BARCODE_SEQUENCE_1_COLUMN + " column header");
- return;
- }
- final boolean hasBarcodeName = barcodesParser.hasColumn(BARCODE_NAME_COLUMN);
- final boolean hasLibraryName = barcodesParser.hasColumn(LIBRARY_NAME_COLUMN);
- final int numBarcodes = readStructure.barcodes.length();
- final Set<String> barcodes = new HashSet<String>();
- for (final TabbedTextFileWithHeaderParser.Row row : barcodesParser) {
- final String bcStrings[] = new String[numBarcodes];
- int barcodeNum = 1;
- for (final ReadDescriptor rd : readStructure.descriptors) {
- if (rd.type != ReadType.Barcode) continue;
- final String header = barcodeNum == 1 ? sequenceColumn : "barcode_sequence_" + String.valueOf(barcodeNum);
- bcStrings[barcodeNum - 1] = row.getField(header);
- barcodeNum++;
- }
- final String bcStr = IlluminaUtil.barcodeSeqsToString(bcStrings);
- if (barcodes.contains(bcStr)) {
- messages.add("Barcode " + bcStr + " specified more than once in " + BARCODE_FILE);
- }
- barcodes.add(bcStr);
- final String barcodeName = (hasBarcodeName ? row.getField(BARCODE_NAME_COLUMN) : "");
- final String libraryName = (hasLibraryName ? row.getField(LIBRARY_NAME_COLUMN) : "");
- final BarcodeMetric metric = new BarcodeMetric(barcodeName, libraryName, bcStr, bcStrings);
- barcodeToMetrics.put(StringUtil.join("", bcStrings), metric);
- }
- barcodesParser.close();
- }
-
-
- /**
- * Metrics produced by the ExtractIlluminaBarcodes program that is used to parse data in
- * the basecalls directory and determine to which barcode each read should be assigned.
- */
- public static class BarcodeMetric extends MetricBase {
- /**
- * The barcode (from the set of expected barcodes) for which the following metrics apply.
- * Note that the "symbolic" barcode of NNNNNN is used to report metrics for all reads that
- * do not match a barcode.
- */
- public String BARCODE;
- public String BARCODE_NAME = "";
- public String LIBRARY_NAME = "";
- /** The total number of reads matching the barcode. */
- public int READS = 0;
- /** The number of PF reads matching this barcode (always less than or equal to READS). */
- public int PF_READS = 0;
- /** The number of all reads matching this barcode that matched with 0 errors or no-calls. */
- public int PERFECT_MATCHES = 0;
- /** The number of PF reads matching this barcode that matched with 0 errors or no-calls. */
- public int PF_PERFECT_MATCHES = 0;
- /** The number of all reads matching this barcode that matched with 1 error or no-call. */
- public int ONE_MISMATCH_MATCHES = 0;
- /** The number of PF reads matching this barcode that matched with 1 error or no-call. */
- public int PF_ONE_MISMATCH_MATCHES = 0;
- /** The percentage of all reads in the lane that matched to this barcode. */
- public double PCT_MATCHES = 0d;
- /**
- * The rate of all reads matching this barcode to all reads matching the most prevelant barcode. For the
- * most prevelant barcode this will be 1, for all others it will be less than 1 (except for the possible
- * exception of when there are more orphan reads than for any other barcode, in which case the value
- * may be arbitrarily large). One over the lowest number in this column gives you the fold-difference
- * in representation between barcodes.
- */
- public double RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT = 0d;
- /** The percentage of PF reads in the lane that matched to this barcode. */
- public double PF_PCT_MATCHES = 0d;
-
- /**
- * The rate of PF reads matching this barcode to PF reads matching the most prevelant barcode. For the
- * most prevelant barcode this will be 1, for all others it will be less than 1 (except for the possible
- * exception of when there are more orphan reads than for any other barcode, in which case the value
- * may be arbitrarily large). One over the lowest number in this column gives you the fold-difference
- * in representation of PF reads between barcodes.
- */
- public double PF_RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT = 0d;
-
- /**
- * The "normalized" matches to each barcode. This is calculated as the number of pf reads matching
- * this barcode over the sum of all pf reads matching any barcode (excluding orphans). If all barcodes
- * are represented equally this will be 1.
- */
- public double PF_NORMALIZED_MATCHES;
-
- protected byte[][] barcodeBytes;
-
- public BarcodeMetric(final String barcodeName, final String libraryName,
- final String barcodeDisplay, final String[] barcodeSeqs) {
-
- this.BARCODE = barcodeDisplay;
- this.BARCODE_NAME = barcodeName;
- this.LIBRARY_NAME = libraryName;
- this.barcodeBytes = new byte[barcodeSeqs.length][];
- for (int i = 0; i < barcodeSeqs.length; i++) {
- barcodeBytes[i] = net.sf.samtools.util.StringUtil.stringToBytes(barcodeSeqs[i]);
- }
- }
-
- /** This ctor is necessary for when reading metrics from file */
- public BarcodeMetric() {
- barcodeBytes = null;
- }
-
- /** Creates a copy of metric initialized with only non-accumulated and non-calculated values set */
- public static BarcodeMetric copy(final BarcodeMetric metric) {
- final BarcodeMetric result = new BarcodeMetric();
- result.BARCODE = metric.BARCODE;
- result.BARCODE_NAME = metric.BARCODE_NAME;
- result.LIBRARY_NAME = metric.LIBRARY_NAME;
- result.barcodeBytes = metric.barcodeBytes;
- return result;
- }
-
-
- /**
- * Adds the non-calculated
- *
- * @param metric
- */
- public void merge(final BarcodeMetric metric) {
- this.READS += metric.READS;
- this.PF_READS += metric.PF_READS;
- this.PERFECT_MATCHES += metric.PERFECT_MATCHES;
- this.PF_PERFECT_MATCHES += metric.PF_PERFECT_MATCHES;
- this.ONE_MISMATCH_MATCHES += metric.ONE_MISMATCH_MATCHES;
- this.PF_ONE_MISMATCH_MATCHES += metric.PF_ONE_MISMATCH_MATCHES;
- }
-
- }
-
- /** Extracts barcodes and accumulates metrics for an entire tile. */
- private static class PerTileBarcodeExtractor implements Runnable {
- private final int tile;
- private final File barcodeFile;
- private final Map<String, BarcodeMetric> metrics;
- private final BarcodeMetric noMatch;
- private Exception exception = null;
- private final boolean usingQualityScores;
- private final IlluminaDataProvider provider;
- private final ReadStructure outputReadStructure;
- private final int maxNoCalls, maxMismatches, minMismatchDelta, minimumBaseQuality;
-
- /** Utility class to hang onto data about the best match for a given barcode */
- class BarcodeMatch {
- boolean matched;
- String barcode;
- int mismatches;
- int mismatchesToSecondBest;
- }
-
- /**
- * Constructor
- *
- * @param tile The number of the tile being processed; used for logging only.
- * @param barcodeFile The file to write the barcodes to
- * @param noMatchMetric A "template" metric that is cloned and the clone is stored internally for accumulating data
- * @param barcodeToMetrics A "template" metric map whose metrics are cloned, and the clones are stored internally for accumulating data
- */
- public PerTileBarcodeExtractor(
- final int tile,
- final File barcodeFile,
- final Map<String, BarcodeMetric> barcodeToMetrics,
- final BarcodeMetric noMatchMetric,
- final IlluminaDataProviderFactory factory,
- final int minimumBaseQuality,
- final int maxNoCalls,
- final int maxMismatches,
- final int minMismatchDelta
- ) {
- this.tile = tile;
- this.barcodeFile = barcodeFile;
- this.usingQualityScores = minimumBaseQuality > 0;
- this.maxNoCalls = maxNoCalls;
- this.maxMismatches = maxMismatches;
- this.minMismatchDelta = minMismatchDelta;
- this.minimumBaseQuality = minimumBaseQuality;
- this.metrics = new LinkedHashMap<String, BarcodeMetric>(barcodeToMetrics.size());
- for (final String key : barcodeToMetrics.keySet()) {
- this.metrics.put(key, BarcodeMetric.copy(barcodeToMetrics.get(key)));
- }
- this.noMatch = BarcodeMetric.copy(noMatchMetric);
- this.provider = factory.makeDataProvider(Arrays.asList(tile));
- this.outputReadStructure = factory.getOutputReadStructure();
-
- }
-
-
- // These methods return the results of the extraction
- public synchronized Map<String, BarcodeMetric> getMetrics() {
- return this.metrics;
- }
-
- public synchronized BarcodeMetric getNoMatchMetric() { return this.noMatch; }
-
- public synchronized Exception getException() { return this.exception; }
-
- /** run method which extracts barcodes and accumulates metrics for an entire tile */
- synchronized public void run() {
- try {
- LOG.info("Extracting barcodes for tile " + tile);
-
- //Sometimes makeDataProvider takes a while waiting for slow file IO, for each tile the needed set of files
- //is non-overlapping sets of files so make the data providers in the individual threads for PerTileBarcodeExtractors
- //so they are not all waiting for each others file operations
-
-
- //Most likely we have SKIPS in our read structure since we replace all template reads with skips in the input data structure
- //(see customCommnandLineValidation), therefore we must use the outputReadStructure to index into the output cluster data
- final int[] barcodeIndices = outputReadStructure.barcodes.getIndices();
- final BufferedWriter writer = IoUtil.openFileForBufferedWriting(barcodeFile);
- final byte barcodeSubsequences[][] = new byte[barcodeIndices.length][];
- final byte qualityScores[][] = usingQualityScores ? new byte[barcodeIndices.length][] : null;
- while (provider.hasNext()) {
- // Extract the barcode from the cluster and write it to the file for the tile
- final ClusterData cluster = provider.next();
- for (int i = 0; i < barcodeIndices.length; i++) {
- barcodeSubsequences[i] = cluster.getRead(barcodeIndices[i]).getBases();
- if (usingQualityScores) qualityScores[i] = cluster.getRead(barcodeIndices[i]).getQualities();
- }
- final boolean passingFilter = cluster.isPf();
- final BarcodeMatch match = findBestBarcodeAndUpdateMetrics(barcodeSubsequences, qualityScores, passingFilter, metrics, noMatch);
-
- final String yOrN = (match.matched ? "Y" : "N");
-
- for (final byte[] bc : barcodeSubsequences) {
- writer.write(StringUtil.bytesToString(bc));
- }
- writer.write("\t" + yOrN + "\t" + match.barcode + "\t" + String.valueOf(match.mismatches) +
- "\t" + String.valueOf(match.mismatchesToSecondBest));
- writer.newLine();
- }
- writer.close();
- } catch (final Exception e) {
- LOG.error(e, "Error processing tile ", this.tile);
- this.exception = e;
- }
- finally{
- provider.close();
- }
- }
-
- /**
- * Find the best barcode match for the given read sequence, and accumulate metrics
- *
- * @param readSubsequences portion of read containing barcode
- * @param passingFilter PF flag for the current read
- * @return perfect barcode string, if there was a match within tolerance, or null if not.
- */
- private BarcodeMatch findBestBarcodeAndUpdateMetrics(final byte[][] readSubsequences,
- final byte[][] qualityScores,
- final boolean passingFilter,
- final Map<String, BarcodeMetric> metrics,
- final BarcodeMetric noMatchBarcodeMetric) {
- BarcodeMetric bestBarcodeMetric = null;
- int totalBarcodeReadBases = 0;
- int numNoCalls = 0; // NoCalls are calculated for all the barcodes combined
-
- for (final byte[] bc : readSubsequences) {
- totalBarcodeReadBases += bc.length;
- for (final byte b : bc) if (SequenceUtil.isNoCall(b)) ++numNoCalls;
- }
-
- // PIC-506 When forcing all reads to match a single barcode, allow a read to match even if every
- // base is a mismatch.
- int numMismatchesInBestBarcode = totalBarcodeReadBases + 1;
- int numMismatchesInSecondBestBarcode = totalBarcodeReadBases + 1;
-
-
- for (final BarcodeMetric barcodeMetric : metrics.values()) {
- final int numMismatches = countMismatches(barcodeMetric.barcodeBytes, readSubsequences, qualityScores);
- if (numMismatches < numMismatchesInBestBarcode) {
- if (bestBarcodeMetric != null) {
- numMismatchesInSecondBestBarcode = numMismatchesInBestBarcode;
- }
- numMismatchesInBestBarcode = numMismatches;
- bestBarcodeMetric = barcodeMetric;
- } else if (numMismatches < numMismatchesInSecondBestBarcode) {
- numMismatchesInSecondBestBarcode = numMismatches;
- }
- }
-
- final boolean matched = bestBarcodeMetric != null &&
- numNoCalls <= maxNoCalls &&
- numMismatchesInBestBarcode <= maxMismatches &&
- numMismatchesInSecondBestBarcode - numMismatchesInBestBarcode >= minMismatchDelta;
-
- final BarcodeMatch match = new BarcodeMatch();
-
- // If we have something that's not a "match" but matches one barcode
- // slightly, we output that matching barcode in lower case
- if (numNoCalls + numMismatchesInBestBarcode < totalBarcodeReadBases) {
- match.mismatches = numMismatchesInBestBarcode;
- match.mismatchesToSecondBest = numMismatchesInSecondBestBarcode;
- match.barcode = bestBarcodeMetric.BARCODE.toLowerCase().replaceAll(IlluminaUtil.BARCODE_DELIMITER, "");
- } else {
- match.mismatches = totalBarcodeReadBases;
- match.barcode = "";
- }
-
- if (matched) {
- ++bestBarcodeMetric.READS;
- if (passingFilter) {
- ++bestBarcodeMetric.PF_READS;
- }
- if (numMismatchesInBestBarcode == 0) {
- ++bestBarcodeMetric.PERFECT_MATCHES;
- if (passingFilter) {
- ++bestBarcodeMetric.PF_PERFECT_MATCHES;
- }
- } else if (numMismatchesInBestBarcode == 1) {
- ++bestBarcodeMetric.ONE_MISMATCH_MATCHES;
- if (passingFilter) {
- ++bestBarcodeMetric.PF_ONE_MISMATCH_MATCHES;
- }
- }
-
- match.matched = true;
- match.barcode = bestBarcodeMetric.BARCODE.replaceAll(IlluminaUtil.BARCODE_DELIMITER, "");
- } else {
- ++noMatchBarcodeMetric.READS;
- if (passingFilter) {
- ++noMatchBarcodeMetric.PF_READS;
- }
- }
-
- return match;
- }
-
- /**
- * Compare barcode sequence to bases from read
- *
- * @return how many bases did not match
- */
- private int countMismatches(final byte[][] barcodeBytes, final byte[][] readSubsequence, final byte[][] qualities) {
- int numMismatches = 0;
- // Read sequence and barcode length may not be equal, so we just use the shorter of the two
- for (int j = 0; j < barcodeBytes.length; j++) {
- final int basesToCheck = Math.min(barcodeBytes[j].length, readSubsequence[j].length);
- for (int i = 0; i < basesToCheck; ++i) {
- if (!SequenceUtil.isNoCall(readSubsequence[j][i])) {
- if (!SequenceUtil.basesEqual(barcodeBytes[j][i], readSubsequence[j][i])) ++numMismatches;
- else if (qualities != null && qualities[j][i] < minimumBaseQuality) ++numMismatches;
- }
- }
- }
- return numMismatches;
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/IlluminaBasecallsConverter.java b/src/java/net/sf/picard/illumina/IlluminaBasecallsConverter.java
deleted file mode 100644
index 2ace5db..0000000
--- a/src/java/net/sf/picard/illumina/IlluminaBasecallsConverter.java
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.ClusterData;
-import net.sf.picard.illumina.parser.IlluminaDataProvider;
-import net.sf.picard.illumina.parser.IlluminaDataProviderFactory;
-import net.sf.picard.illumina.parser.IlluminaDataType;
-import net.sf.picard.illumina.parser.ReadStructure;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.util.FileChannelJDKBugWorkAround;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.util.PeekIterator;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Queue;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.TreeMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.PriorityBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-
-/**
- * Manages the conversion of Illumina basecalls into some output format. Creates multiple threads to manage reading,
- * sorting and writing efficiently. Output is written in queryname output. Optionally demultiplexes indexed reads
- * into separate outputs by barcode.
- *
- * @param <CLUSTER_OUTPUT_RECORD> The class to which a ClusterData is converted in preparation for writing.
- */
-public class IlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> {
- /**
- * Describes the state of a barcode's data's processing in the context of a tile. It is either not available in
- * that tile, has been read, has been queued to be written to file, or has been written to file. A barcode only
- * takes on a state once the tile (which is serving as the context of this state) has been read.
- */
- private enum TileBarcodeProcessingState {
- NA, READ, QUEUED_FOR_WRITE, WRITTEN
- }
-
- /**
- * Describes the state of a tile being processed. It is either not yet completely read, or read.
- */
- private enum TileProcessingState {
- NOT_DONE_READING, DONE_READING
- }
-
- private static final Log log = Log.getInstance(IlluminaBasecallsConverter.class);
-
- public static final IlluminaDataType[] DATA_TYPES_NO_BARCODE =
- {IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position, IlluminaDataType.PF};
- private static final IlluminaDataType[] DATA_TYPES_WITH_BARCODE = Arrays.copyOf(DATA_TYPES_NO_BARCODE, DATA_TYPES_NO_BARCODE.length + 1);
-
- static {
- DATA_TYPES_WITH_BARCODE[DATA_TYPES_WITH_BARCODE.length - 1] = IlluminaDataType.Barcodes;
- }
-
- /**
- * A comparator for tile numbers, which are not necessarily ordered by the number's value.
- */
- public static final Comparator<Integer> TILE_NUMBER_COMPARATOR = new Comparator<Integer>() {
- @Override
- public int compare(final Integer integer1, final Integer integer2) {
- final String s1 = integer1.toString();
- final String s2 = integer2.toString();
- // Because a the tile number is followed by a colon, a tile number that
- // is a prefix of another tile number should sort after. (e.g. 10 sorts after 100).
- if (s1.length() < s2.length()) {
- if (s2.startsWith(s1)) {
- return 1;
- }
- } else if (s2.length() < s1.length()) {
- if (s1.startsWith(s2)) {
- return -1;
- }
- }
- return s1.compareTo(s2);
- }
- };
-
- private final Comparator<CLUSTER_OUTPUT_RECORD> outputRecordComparator;
-
- private final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
- private final Map<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> barcodeRecordWriterMap;
- private final int maxReadsInRamPerTile;
- private final boolean demultiplex;
- private final List<File> tmpDirs;
- private final IlluminaDataProviderFactory factory;
- private ClusterDataConverter<CLUSTER_OUTPUT_RECORD> converter = null;
- private final ProgressLogger readProgressLogger = new ProgressLogger(log, 1000000, "Read");
- private final ProgressLogger writeProgressLogger = new ProgressLogger(log, 1000000, "Write");
- private int numThreads;
- // If FORCE_GC, this is non-null. For production this is not necessary because it will run until the JVM
- // ends, but for unit testing it is desirable to stop the task when done with this instance.
- private final TimerTask gcTimerTask;
- private List<Integer> tiles;
- private final boolean includeNonPfReads;
- private final SortingCollection.Codec<CLUSTER_OUTPUT_RECORD> codecPrototype;
- // Annoying that we need this.
- private final Class<CLUSTER_OUTPUT_RECORD> outputRecordClass;
-
- /**
- * @param basecallsDir Where to read basecalls from.
- * @param lane What lane to process.
- * @param readStructure How to interpret each cluster.
- * @param barcodeRecordWriterMap Map from barcode to CLUSTER_OUTPUT_RECORD writer. If demultiplex is false, must contain
- * one writer stored with key=null.
- * @param demultiplex If true, output is split by barcode, otherwise all are written to the same output stream.
- * @param maxReadsInRamPerTile Configures number of reads each tile will store in RAM before spilling to disk.
- * @param tmpDirs For SortingCollection spilling.
- * @param numProcessors Controls number of threads. If <= 0, the number of threads allocated is
- * available cores - numProcessors.
- * @param forceGc Force explicit GC periodically. This is good for causing memory maps to be released.
- * @param firstTile (For debugging) If non-null, start processing at this tile.
- * @param tileLimit (For debugging) If non-null, process no more than this many tiles.
- * @param outputRecordComparator For sorting output records within a single tile.
- * @param codecPrototype For spilling output records to disk.
- * @param outputRecordClass Inconveniently needed to create SortingCollections.
- * @param includeNonPfReads If true, will include ALL reads (including those which do not have PF set)
- */
- public IlluminaBasecallsConverter(final File basecallsDir, final int lane, final ReadStructure readStructure,
- final Map<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> barcodeRecordWriterMap,
- final boolean demultiplex,
- final int maxReadsInRamPerTile,
- final List<File> tmpDirs,
- final int numProcessors, final boolean forceGc,
- final Integer firstTile, final Integer tileLimit,
- final Comparator<CLUSTER_OUTPUT_RECORD> outputRecordComparator,
- final SortingCollection.Codec<CLUSTER_OUTPUT_RECORD> codecPrototype,
- final Class<CLUSTER_OUTPUT_RECORD> outputRecordClass,
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
- final boolean applyEamssFiltering,
- final boolean includeNonPfReads
- ) {
- this.barcodeRecordWriterMap = barcodeRecordWriterMap;
- this.demultiplex = demultiplex;
- this.maxReadsInRamPerTile = maxReadsInRamPerTile;
- this.tmpDirs = tmpDirs;
- this.outputRecordComparator = outputRecordComparator;
- this.codecPrototype = codecPrototype;
- this.outputRecordClass = outputRecordClass;
- this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
- this.includeNonPfReads = includeNonPfReads;
-
- // If we're forcing garbage collection, collect every 5 minutes in a daemon thread.
- if (forceGc) {
- final Timer gcTimer = new Timer(true);
- final long delay = 5 * 1000 * 60;
- gcTimerTask = new TimerTask() {
- @Override
- public void run() {
- System.out.println("Before explicit GC, Runtime.totalMemory()=" + Runtime.getRuntime().totalMemory());
- System.gc();
- System.runFinalization();
- System.out.println("After explicit GC, Runtime.totalMemory()=" + Runtime.getRuntime().totalMemory());
- }
- };
- gcTimer.scheduleAtFixedRate(gcTimerTask, delay, delay);
- } else {
- gcTimerTask = null;
- }
-
- this.factory = new IlluminaDataProviderFactory(basecallsDir, lane, readStructure, bclQualityEvaluationStrategy, getDataTypesFromReadStructure(readStructure, demultiplex));
- this.factory.setApplyEamssFiltering(applyEamssFiltering);
-
- if (numProcessors == 0) {
- this.numThreads = Runtime.getRuntime().availableProcessors();
- } else if (numProcessors < 0) {
- this.numThreads = Runtime.getRuntime().availableProcessors() + numProcessors;
- } else {
- this.numThreads = numProcessors;
- }
- this.tiles = new ArrayList<Integer>(factory.getAvailableTiles());
- // Since the first non-fixed part of the read name is the tile number, without preceding zeroes,
- // and the output is sorted by read name, process the tiles in this order.
- Collections.sort(tiles, TILE_NUMBER_COMPARATOR);
- if (firstTile != null) {
- int i;
- for (i = 0; i < tiles.size(); ++i) {
- if (tiles.get(i).intValue() == firstTile.intValue()) {
- tiles = tiles.subList(i, tiles.size());
- break;
- }
- }
- if (tiles.get(0).intValue() != firstTile.intValue()) {
- throw new PicardException("firstTile=" + firstTile + ", but that tile was not found.");
- }
- }
- if (tileLimit != null && tiles.size() > tileLimit) {
- tiles = tiles.subList(0, tileLimit);
- }
-
- this.numThreads = Math.max(1, Math.min(this.numThreads, tiles.size()));
- }
-
- /**
- * Must be called before doTileProcessing. This is not passed in the ctor because often the
- * IlluminaDataProviderFactory is needed in order to construct the converter.
- *
- * @param converter Converts ClusterData to CLUSTER_OUTPUT_RECORD
- */
- public void setConverter(final ClusterDataConverter<CLUSTER_OUTPUT_RECORD> converter) {
- this.converter = converter;
- }
-
- /**
- * In case caller needs to get some info from factory.
- */
- public IlluminaDataProviderFactory getFactory() {
- return factory;
- }
-
- /**
- * Do the work, i.e. create a bunch of threads to read, sort and write.
- * setConverter() must be called before calling this method.
- */
- public void doTileProcessing() {
- try {
- // TODO: Eliminate this when switch to JDK 7
- FileChannelJDKBugWorkAround.doBugWorkAround();
-
- // Generate the list of tiles that will be processed
- final List<Tile> tiles = new ArrayList<Tile>();
- for (final Integer tileNumber : this.tiles) {
- tiles.add(new Tile(tileNumber));
- }
-
- final TileReadAggregator tileReadAggregator = new TileReadAggregator(tiles);
- tileReadAggregator.submit();
- try {
- tileReadAggregator.awaitWorkComplete();
- } catch (final InterruptedException e) {
- log.error(e, "Failure encountered in worker thread; attempting to shut down remaining worker threads and terminate ...");
- throw new PicardException("Failure encountered in worker thread; see log for details.");
- } finally {
- tileReadAggregator.shutdown();
- }
-
- for (final Map.Entry<Byte, Integer> entry : bclQualityEvaluationStrategy.getPoorQualityFrequencies().entrySet()) {
- log.warn(String.format("Observed low quality of %s %s times.", entry.getKey(), entry.getValue()));
- }
- bclQualityEvaluationStrategy.assertMinimumQualities();
-
- } finally {
- try {
- gcTimerTask.cancel();
- } catch (final Throwable ex) {
- log.warn(ex, "Ignoring exception stopping background GC thread.");
- }
- // Close the writers
- for (final Map.Entry<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> entry : barcodeRecordWriterMap.entrySet()) {
- final ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD> writer = entry.getValue();
- log.debug(String.format("Closing file for barcode %s.", entry.getKey()));
- writer.close();
- }
- }
- }
-
- /**
- * Simple representation of a tile
- */
- private static class Tile implements Comparable<Tile> {
- private final int tileNumber;
-
- public Tile(final int i) {
- tileNumber = i;
- }
-
- public int getNumber() {
- return tileNumber;
- }
-
- @Override
- public boolean equals(final Object o) {
- return o instanceof Tile && this.getNumber() == ((Tile) o).getNumber();
- }
-
- @Override
- public int compareTo(final Tile o) {
- return TILE_NUMBER_COMPARATOR.compare(this.getNumber(), o.getNumber());
- }
- }
-
-
- /**
- * A Runnable that carries a priority which is used to compare and order other PriorityRunnables in a task queue.
- */
- private abstract class PriorityRunnable implements Runnable {
- private final int priority;
-
- /**
- * Create a new priority runnable with a default priority of 1.
- */
- public PriorityRunnable() {
- this(1);
- }
-
- public PriorityRunnable(final int priority) {
- this.priority = priority;
- }
-
- /**
- * Returns the priority level. Higher priorities are run earlier.
- *
- * @return
- */
- int getPriority() {
- return this.priority;
- }
- }
-
-
- /**
- * Represents the state of a tile's processing and encapsulates the data collected from that tile.
- * <p/>
- * TileProcessingRecords are accessed from each worker thread to assess the progress of the run, so its methods
- * are synchronized.
- */
- private class TileProcessingRecord {
- final private Map<String, SortingCollection<CLUSTER_OUTPUT_RECORD>> barcodeToRecordCollection =
- new HashMap<String, SortingCollection<CLUSTER_OUTPUT_RECORD>>();
- final private Map<String, TileBarcodeProcessingState> barcodeToProcessingState = new HashMap<String, TileBarcodeProcessingState>();
- private TileProcessingState state = TileProcessingState.NOT_DONE_READING;
- private long recordCount = 0;
-
- /**
- * Returns the state of this tile's processing.
- */
- public synchronized TileProcessingState getState() {
- return this.state;
- }
-
- /**
- * Sets the state of this tile's processing.
- */
- public synchronized void setState(final TileProcessingState state) {
- this.state = state;
- }
-
- /**
- * Adds the provided record to this tile.
- */
- public synchronized void addRecord(final String barcode, final CLUSTER_OUTPUT_RECORD record) {
- this.recordCount += 1;
-
- // Grab the existing collection, or initialize it if it doesn't yet exist
- SortingCollection<CLUSTER_OUTPUT_RECORD> recordCollection = this.barcodeToRecordCollection.get(barcode);
- if (recordCollection == null) {
- if (!barcodeRecordWriterMap.containsKey(barcode))
- throw new PicardException(String.format("Read records with barcode %s, but this barcode was not expected. (Is it referenced in the parameters file?)", barcode));
- recordCollection = this.newSortingCollection();
- this.barcodeToRecordCollection.put(barcode, recordCollection);
- this.barcodeToProcessingState.put(barcode, null);
- }
- recordCollection.add(record);
- }
-
- private synchronized SortingCollection<CLUSTER_OUTPUT_RECORD> newSortingCollection() {
- final int maxRecordsInRam =
- maxReadsInRamPerTile /
- barcodeRecordWriterMap.size();
- return SortingCollection.newInstance(
- outputRecordClass,
- codecPrototype.clone(),
- outputRecordComparator,
- maxRecordsInRam,
- tmpDirs);
- }
-
- /**
- * Returns the number of unique barcodes read.
- */
- public synchronized long getBarcodeCount() {
- return this.barcodeToRecordCollection.size();
- }
-
- /**
- * Returns the number of records read.
- */
- public synchronized long getRecordCount() {
- return recordCount;
- }
-
- /**
- * Returns the mapping of barcodes to records associated with them.
- */
- public synchronized Map<String, SortingCollection<CLUSTER_OUTPUT_RECORD>> getBarcodeRecords() {
- return barcodeToRecordCollection;
- }
-
- /**
- * Gets the state of the provided barcode's data's processing progress. Only invoke this query if this tile
- * is in a DONE_READING state.
- *
- * @throws IllegalStateException When a barcode is queried before the tile is in the DONE_READING state
- */
- public synchronized TileBarcodeProcessingState getBarcodeState(final String barcode) {
- if (this.getState() == TileProcessingState.NOT_DONE_READING) {
- throw new IllegalStateException(
- "A tile's barcode data's state cannot be queried until the tile has been completely read.");
- }
-
- if (this.barcodeToProcessingState.containsKey(barcode)) {
- return this.barcodeToProcessingState.get(barcode);
- } else {
- return TileBarcodeProcessingState.NA;
- }
- }
-
- public synchronized Map<String, TileBarcodeProcessingState> getBarcodeProcessingStates() {
- return this.barcodeToProcessingState;
- }
-
- /**
- * Sets the processing state of the provided barcode in this record.
- *
- * @throws java.util.NoSuchElementException When the provided barcode is not one associated with this record.
- */
- public synchronized void setBarcodeState(final String barcode, final TileBarcodeProcessingState state) {
- if (this.barcodeToProcessingState.containsKey(barcode)) {
- this.barcodeToProcessingState.put(barcode, state);
- } else {
- throw new NoSuchElementException(String.format("No record of the provided barcode, %s.", barcode));
- }
- }
-
- /**
- * Returns the distinct set of barcodes for which data has been collected in this record.
- *
- * @return
- */
- public synchronized Set<String> getBarcodes() {
- return this.getBarcodeRecords().keySet();
- }
- }
-
- /**
- * Reads the information from a tile via an IlluminaDataProvider and feeds red information into a processingRecord
- * managed by the TileReadAggregator.
- */
- private class TileReader {
- private final Tile tile;
- private final TileReadAggregator handler;
- private final TileProcessingRecord processingRecord;
-
- public TileReader(final Tile tile, final TileReadAggregator handler, final TileProcessingRecord processingRecord) {
- this.tile = tile;
- this.handler = handler;
- this.processingRecord = processingRecord;
- }
-
- /**
- * Reads the data from the appropriate IlluminaDataProvider and feeds it into the TileProcessingRecord for
- * this tile.
- */
- public void process() {
- final IlluminaDataProvider dataProvider = factory.makeDataProvider(Arrays.asList(this.tile.getNumber()));
- log.debug(String.format("Reading data from tile %s ...", tile.getNumber()));
-
- while (dataProvider.hasNext()) {
- final ClusterData cluster = dataProvider.next();
- readProgressLogger.record(null, 0);
- // If this cluster is passing, or we do NOT want to ONLY emit passing reads, then add it to the next
- if (cluster.isPf() || includeNonPfReads) {
- final String barcode = (demultiplex ? cluster.getMatchedBarcode() : null);
- this.processingRecord.addRecord(barcode, converter.convertClusterToOutputRecord(cluster));
- }
- }
-
- this.handler.completeTile(this.tile);
- dataProvider.close();
- }
- }
-
-
- /**
- * Aggregates data collected from tiles and writes them to file. Accepts records from TileReaders and maps
- * them to the appropriate BAM writers.
- */
- private class TileReadAggregator {
- /**
- * The collection of records associated with a particular tile.
- * <p/>
- * Implemented as a TreeMap to guarantee tiles are iterated over in natural order.
- */
- private final Map<Tile, TileProcessingRecord> tileRecords = new TreeMap<Tile, TileProcessingRecord>();
-
- /**
- * The executor responsible for doing work.
- * <p/>
- * Implemented as a ThreadPoolExecutor with a PriorityBlockingQueue which orders submitted Runnables by their
- * priority.
- */
- private final ExecutorService prioritizingThreadPool = new ThreadPoolExecutor(
- numThreads,
- numThreads,
- 0L,
- MILLISECONDS,
- new PriorityBlockingQueue<Runnable>(5, new Comparator<Runnable>() {
- @Override
- /**
- * Compare the two Runnables, and assume they are PriorityRunnable; if not something strange is
- * going on, so allow a ClassCastException be thrown.
- */
- public int compare(final Runnable o1, final Runnable o2) {
- // Higher priority items go earlier in the queue, so reverse the "natural" comparison.
- return ((PriorityRunnable) o2).getPriority() - ((PriorityRunnable) o1).getPriority();
- }
- })
- );
-
- /**
- * The object acting as a latch to notify when the aggregator completes its work.
- */
- private final Object completionLatch = new Object();
-
- /**
- * Stores the thread that is executing this work so that it can be interrupted upon failure.
- */
- private Thread parentThread;
- private final Object workEnqueueMonitor = new Object();
- private final AtomicBoolean submitted = new AtomicBoolean(false);
-
-
- /**
- * Creates a TileReadAggregator that reads from the provided tiles.
- *
- * @param tiles
- */
- public TileReadAggregator(final Collection<Tile> tiles) {
- for (final Tile t : tiles) {
- tileRecords.put(t, new TileProcessingRecord());
- }
- }
-
- /**
- * Execute the tile aggregator's work. Creates a thread pool to read data from tiles and write them to file.
- * Invoke this method only once.
- *
- * @throws IllegalStateException If submit was called more than once.
- */
- public void submit() {
- // Ensure the aggregator as not yet been submitted
- if (!this.submitted.compareAndSet(false, true)) {
- throw new IllegalStateException("The submit() method may not be called more than once.");
- }
-
- // Set the thread that is executing this work
- this.parentThread = Thread.currentThread();
-
- /**
- * For each tile, create and submit a tile processor. Give it a negative execution priority (so that
- * prioritized tasks with a positive execution priority execute first), and give later tiles a lesser
- * (more negative) priority.
- */
- int priority = 0;
- for (final Tile tile : this.tileRecords.keySet()) {
- final TileReader reader = new TileReader(tile, this, this.tileRecords.get(tile));
- this.prioritizingThreadPool.execute(new PriorityRunnable(--priority) {
- @Override
- public void run() {
- try {
- reader.process();
- } catch (final RuntimeException e) {
- /**
- * In the event of an internal failure, signal to the parent thread that something has gone
- * wrong. This is necessary because if an item of work fails to complete, the aggregator will
- * will never reach its completed state, and it will never terminate.
- */
- parentThread.interrupt();
- throw e;
- } catch (final Error e) {
- parentThread.interrupt();
- throw e;
- }
- }
- });
- }
- }
-
- /**
- * Signals that a tile's processing is complete. This must be invoked exactly once per tile, and only after
- * all of that tile has been processed.
- *
- * @throws IllegalStateException When the tile is already in the completed state.
- */
- private void completeTile(final Tile tile) {
- final TileProcessingRecord tileRecord = this.tileRecords.get(tile);
-
- if (tileRecord.getState() == TileProcessingState.DONE_READING) {
- throw new IllegalStateException("This tile is already in the completed state.");
- }
-
- // Update all of the barcodes and the tile to be marked as read
- for (final String barcode : tileRecord.getBarcodes()) {
- tileRecord.setBarcodeState(barcode, TileBarcodeProcessingState.READ);
- }
- tileRecord.setState(TileProcessingState.DONE_READING);
-
- log.debug(String.format("Completed reading tile %s; collected %s reads spanning %s barcodes.",
- tile.getNumber(), tileRecord.getRecordCount(), tileRecord.getBarcodeCount()));
-
- //noinspection SynchronizationOnLocalVariableOrMethodParameter
- this.findAndEnqueueWorkOrSignalCompletion();
- }
-
- /**
- * Blocks until this aggregator completes its work.
- *
- * @throws InterruptedException
- */
- public void awaitWorkComplete() throws InterruptedException {
- synchronized (this.completionLatch) {
- this.completionLatch.wait();
- }
- }
-
- /**
- * Signals to any thread awaiting via awaitWorkComplete() that no work remains. Called
- * when this aggregator has reached its completed state.
- */
- private void signalWorkComplete() {
- synchronized (this.completionLatch) {
- this.completionLatch.notifyAll();
- }
- }
-
- /**
- * Poll the aggregator to find more tasks for it to enqueue. Specifically, searches for un-written data
- * read from tiles for each barcode and enqueues it for writing.
- */
- private void findAndEnqueueWorkOrSignalCompletion() {
- synchronized (this.workEnqueueMonitor) {
- /**
- * If there is work remaining to be done in this aggregator, walk through all of the barcodes and find
- * tiles which have not yet written their barcode data but are in a state where they are able to.
- */
- if (this.isWorkCompleted()) {
- this.signalWorkComplete();
- } else {
- final Queue<Runnable> tasks = new LinkedList<Runnable>();
- for (final String barcode : barcodeRecordWriterMap.keySet()) {
- NEXT_BARCODE:
- for (final Map.Entry<Tile, TileProcessingRecord> entry : this.tileRecords.entrySet()) {
- final Tile tile = entry.getKey();
- final TileProcessingRecord tileRecord = entry.getValue();
-
- /**
- * If this tile has not been read, we cannot write this or later tiles' barcode data;
- * move to the next barcode.
- */
- if (tileRecord.getState() != TileProcessingState.DONE_READING) {
- break;
- }
- switch (tileRecord.getBarcodeState(barcode)) {
- case NA:
- case WRITTEN:
- /**
- * There is no data for this barcode for this tile, or it is already written; in
- * either scenario, this barcode will not be processed further for this tile, so
- * move onto the next tile as a possible candidate.
- */
- continue;
- case QUEUED_FOR_WRITE:
- /**
- * The write for this barcode is in progress for this tile, so skip to the next
- * barcode.
- */
- break NEXT_BARCODE;
- case READ:
- /**
- * This barcode has been read, and all of the earlier tiles have been written
- * for this barcode, so queue its writing.
- */
- tileRecord.setBarcodeState(barcode, TileBarcodeProcessingState.QUEUED_FOR_WRITE);
- log.debug(String.format("Enqueuing work for tile %s and barcode %s.", tile.getNumber(), barcode));
- tasks.add(this.newBarcodeWorkInstance(tile, tileRecord, barcode));
- break NEXT_BARCODE;
- }
- }
- }
-
- for (final Runnable task : tasks) {
- this.prioritizingThreadPool.execute(task);
- }
- }
- }
- }
-
- /**
- * Returns a PriorityRunnable that encapsulates the work involved with writing the provided tileRecord's data
- * for the given barcode to disk.
- *
- * @param tile The tile from which the record was read
- * @param tileRecord The processing record associated with the tile
- * @param barcode The barcode whose data within the tileRecord is to be written
- * @return The runnable that upon invocation writes the barcode's data from the tileRecord to disk
- */
- private PriorityRunnable newBarcodeWorkInstance(final Tile tile, final TileProcessingRecord tileRecord, final String barcode) {
- return new PriorityRunnable() {
- @Override
- public void run() {
- try {
- final SortingCollection<CLUSTER_OUTPUT_RECORD> records = tileRecord.getBarcodeRecords().get(barcode);
- final ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD> writer = barcodeRecordWriterMap.get(barcode);
-
- log.debug(String.format("Writing records from tile %s with barcode %s ...", tile.getNumber(), barcode));
-
- final PeekIterator<CLUSTER_OUTPUT_RECORD> it = new PeekIterator<CLUSTER_OUTPUT_RECORD>(records.iterator());
- while (it.hasNext()) {
- final CLUSTER_OUTPUT_RECORD rec = it.next();
-
- /**
- * PIC-330 Sometimes there are two reads with the same cluster coordinates, and thus
- * the same read name. Discard both of them. This code assumes that the two first of pairs
- * will come before the two second of pairs, so it isn't necessary to look ahead a different
- * distance for paired end. It also assumes that for paired ends there will be duplicates
- * for both ends, so there is no need to be PE-aware.
- */
- if (it.hasNext()) {
- final CLUSTER_OUTPUT_RECORD lookAhead = it.peek();
-
-/* TODO: Put this in SAMFileWriter wrapper
- if (!rec.getReadUnmappedFlag() || !lookAhead.getReadUnmappedFlag()) {
- throw new IllegalStateException("Should not have mapped reads.");
- }
-*/
-
- if (outputRecordComparator.compare(rec, lookAhead) == 0) {
- it.next();
- log.info("Skipping reads with identical read names: " + rec.toString());
- continue;
- }
- }
-
- writer.write(rec);
- writeProgressLogger.record(null, 0);
- }
-
- tileRecord.setBarcodeState(barcode, TileBarcodeProcessingState.WRITTEN);
- findAndEnqueueWorkOrSignalCompletion();
-
- } catch (final RuntimeException e) {
- /**
- * In the event of an internal failure, signal to the parent thread that something has gone
- * wrong. This is necessary because if an item of work fails to complete, the aggregator will
- * will never reach its completed state, and it will never terminate.
- */
- parentThread.interrupt();
- throw e;
- } catch (final Error e) {
- parentThread.interrupt();
- throw e;
- }
- }
-
- };
- }
-
- /**
- * Returns true if this aggregator has not completed its work. Specifically, returns false iff
- * any tile's barcode data yas not yet been written.
- *
- * @return True if more work remains to be done, false otherwise
- */
- public boolean isWorkCompleted() {
- for (final Map.Entry<Tile, TileProcessingRecord> entry : this.tileRecords.entrySet()) {
- final TileProcessingRecord tileProcessingRecord = entry.getValue();
-
- if (tileProcessingRecord.getState() != TileProcessingState.DONE_READING) {
- log.debug(String.format("Work is not completed because a tile isn't done being read: %s.", entry.getKey().getNumber()));
- return false;
- } else {
- for (final Map.Entry<String, TileBarcodeProcessingState> barcodeStateEntry : tileProcessingRecord.getBarcodeProcessingStates().entrySet()) {
- final TileBarcodeProcessingState barcodeProcessingState = barcodeStateEntry.getValue();
- if (barcodeProcessingState != TileBarcodeProcessingState.WRITTEN) {
- log.debug(String.format("Work is not completed because a tile isn't done being read: Tile %s, Barcode %s, Processing State %s.", entry.getKey().getNumber(), barcodeStateEntry.getKey(), barcodeProcessingState));
- return false;
- }
- }
- }
- }
- log.info("All work is complete.");
- return true;
- }
-
- /**
- * Terminates the threads currently exiting in the thread pool abruptly via ThreadPoolExecutor.shutdownNow().
- */
- public void shutdown() {
- this.prioritizingThreadPool.shutdownNow();
- }
- }
-
- /**
- * Given a read structure return the data types that need to be parsed for this run
- */
- private static IlluminaDataType[] getDataTypesFromReadStructure(final ReadStructure readStructure,
- final boolean demultiplex) {
- if (readStructure.barcodes.isEmpty() || !demultiplex) {
- return DATA_TYPES_NO_BARCODE;
- } else {
- return DATA_TYPES_WITH_BARCODE;
- }
- }
-
- public static interface ClusterDataConverter<OUTPUT_RECORD> {
-
- /**
- * Creates the OUTPUT_RECORDs from the cluster
- */
- public OUTPUT_RECORD convertClusterToOutputRecord(final ClusterData cluster);
- }
-
- public static interface ConvertedClusterDataWriter<OUTPUT_RECORD> {
- void write(final OUTPUT_RECORD rec);
-
- void close();
- }
-}
diff --git a/src/java/net/sf/picard/illumina/IlluminaBasecallsToFastq.java b/src/java/net/sf/picard/illumina/IlluminaBasecallsToFastq.java
deleted file mode 100644
index fea549f..0000000
--- a/src/java/net/sf/picard/illumina/IlluminaBasecallsToFastq.java
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.fastq.*;
-import net.sf.picard.illumina.parser.ClusterData;
-import net.sf.picard.illumina.parser.ReadData;
-import net.sf.picard.illumina.parser.ReadStructure;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.picard.util.IlluminaUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.TabbedTextFileWithHeaderParser;
-import net.sf.samtools.*;
-import net.sf.samtools.util.SortingCollection;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.*;
-import java.util.*;
-
-public class IlluminaBasecallsToFastq extends CommandLineProgram {
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE =
- getStandardUsagePreamble() + "Generate fastq file(s) from data in an Illumina basecalls output directory.\n" +
- "Separate fastq file(s) are created for each template read, and for each barcode read, in the basecalls.\n" +
- "Template fastqs have extensions like .<number>.fastq, where <number> is the number of the template read,\n" +
- "starting with 1. Barcode fastqs have extensions like .barcode_<number>.fastq, where <number> is the number\n" +
- "of the barcode read, starting with 1.";
-
- @Option(doc = "The basecalls directory. ", shortName = "B")
- public File BASECALLS_DIR;
-
- @Option(doc = "Lane number. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
- public Integer LANE;
-
- @Option(doc = "The prefix for output fastqs. Extensions as described above are appended. Use this option for " +
- "a non-barcoded run, or for a barcoded run in which it is not desired to demultiplex reads into separate " +
- "files by barcode.",
- shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
- mutex = {"MULTIPLEX_PARAMS"})
- public File OUTPUT_PREFIX;
-
- @Option(doc = "The barcode of the run. Prefixed to read names.", optional = false)
- public String RUN_BARCODE;
-
- @Option(doc = "The name of the machine on which the run was sequenced; required if emitting Casava1.8-style read name headers", optional = true)
- public String MACHINE_NAME;
-
- @Option(doc = "The barcode of the flowcell that was sequenced; required if emitting Casava1.8-style read name headers", optional = true)
- public String FLOWCELL_BARCODE;
-
- @Option(doc = ReadStructure.PARAMETER_DOC, shortName = "RS")
- public String READ_STRUCTURE;
-
- @Option(doc = "Tab-separated file for creating all output fastqs demultiplexed by barcode for a lane with single " +
- "IlluminaBasecallsToFastq invocation. The columns are OUTPUT_PREFIX, and BARCODE_1, BARCODE_2 ... BARCODE_X " +
- "where X = number of barcodes per cluster (optional). Row with BARCODE_1 set to 'N' is used to specify " +
- "an output_prefix for no barcode match.",
- mutex = {"OUTPUT_PREFIX"})
- public File MULTIPLEX_PARAMS;
-
- @Option(doc = "Which adapters to look for in the read.")
- public List<IlluminaUtil.IlluminaAdapterPair> ADAPTERS_TO_CHECK = new ArrayList<IlluminaUtil.IlluminaAdapterPair>(
- Arrays.asList(IlluminaUtil.IlluminaAdapterPair.INDEXED,
- IlluminaUtil.IlluminaAdapterPair.DUAL_INDEXED,
- IlluminaUtil.IlluminaAdapterPair.NEXTERA_V2,
- IlluminaUtil.IlluminaAdapterPair.FLUIDIGM));
-
- @Option(doc = "The number of threads to run in parallel. If NUM_PROCESSORS = 0, number of cores is automatically set to " +
- "the number of cores available on the machine. If NUM_PROCESSORS < 0, then the number of cores used will" +
- " be the number available on the machine less NUM_PROCESSORS.")
- public Integer NUM_PROCESSORS = 0;
-
- @Option(doc = "If set, this is the first tile to be processed (used for debugging). Note that tiles are not processed" +
- " in numerical order.",
- optional = true)
- public Integer FIRST_TILE;
-
- @Option(doc = "If set, process no more than this many tiles (used for debugging).", optional = true)
- public Integer TILE_LIMIT;
-
- @Option(doc="Apply EAMSS filtering to identify inappropriately quality scored bases towards the ends of reads" +
- " and convert their quality scores to Q2.")
- public boolean APPLY_EAMSS_FILTER = true;
-
- @Option(doc = "If true, call System.gc() periodically. This is useful in cases in which the -Xmx value passed " +
- "is larger than the available memory.")
- public Boolean FORCE_GC = true;
-
- @Option(doc = "Configure SortingCollections to store this many records before spilling to disk. For an indexed" +
- " run, each SortingCollection gets this value/number of indices.")
- public int MAX_READS_IN_RAM_PER_TILE = 1200000;
-
- @Option(doc="The minimum quality (after transforming 0s to 1s) expected from reads. If qualities are lower than this value, an error is thrown." +
- "The default of 2 is what the Illumina's spec describes as the minimum, but in practice the value has been observed lower.")
- public int MINIMUM_QUALITY = BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY;
-
- @Option(doc="Whether to include non-PF reads", shortName="NONPF", optional=true)
- public boolean INCLUDE_NON_PF_READS = true;
-
- @Option(doc="The read name header formatting to emit. Casava1.8 formatting has additional information beyond Illumina, including: " +
- "the passing-filter flag value for the read, the flowcell name, and the sequencer name.", optional = false)
- public ReadNameFormat READ_NAME_FORMAT = ReadNameFormat.CASAVA_1_8;
-
- /** Simple switch to control the read name format to emit. */
- public enum ReadNameFormat {
- CASAVA_1_8, ILLUMINA
- }
-
- private final Map<String, FastqRecordsWriter> barcodeFastqWriterMap = new HashMap<String, FastqRecordsWriter>();
- private ReadStructure readStructure;
- IlluminaBasecallsConverter<FastqRecordsForCluster> basecallsConverter;
- private static final Log log = Log.getInstance(IlluminaBasecallsToFastq.class);
- private final FastqWriterFactory fastqWriterFactory = new FastqWriterFactory();
- private ReadNameEncoder readNameEncoder;
- private static final Comparator<FastqRecordsForCluster> queryNameComparator = new Comparator<FastqRecordsForCluster>() {
- @Override
- public int compare(final FastqRecordsForCluster r1, final FastqRecordsForCluster r2) {
- return SAMRecordQueryNameComparator.compareReadNames(r1.templateRecords[0].getReadHeader(),
- r2.templateRecords[0].getReadHeader());
- }
- };
-
-
- @Override
- protected int doWork() {
- initialize();
-
- basecallsConverter.doTileProcessing();
-
- return 0;
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- final LinkedList<String> errors = new LinkedList<String>();
- if (READ_NAME_FORMAT == ReadNameFormat.CASAVA_1_8 && MACHINE_NAME == null) {
- errors.add("MACHINE_NAME is required when using Casava1.8-style read name headers.");
- }
-
- if (READ_NAME_FORMAT == ReadNameFormat.CASAVA_1_8 && FLOWCELL_BARCODE == null) {
- errors.add("FLOWCELL_BARCODE is required when using Casava1.8-style read name headers.");
- }
-
- if (errors.isEmpty()) {
- return null;
- } else {
- return errors.toArray(new String[errors.size()]);
- }
- }
-
- /**
- * Prepares loggers, initiates garbage collection thread, parses arguments and initialized variables appropriately/
- */
- private void initialize() {
- fastqWriterFactory.setCreateMd5(CREATE_MD5_FILE);
- switch (READ_NAME_FORMAT) {
- case CASAVA_1_8:
- readNameEncoder = new Casava18ReadNameEncoder(MACHINE_NAME, RUN_BARCODE, FLOWCELL_BARCODE);
- break;
- case ILLUMINA:
- readNameEncoder = new IlluminaReadNameEncoder(RUN_BARCODE);
- break;
- }
-
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(MINIMUM_QUALITY);
- readStructure = new ReadStructure(READ_STRUCTURE);
- if (MULTIPLEX_PARAMS != null) {
- IoUtil.assertFileIsReadable(MULTIPLEX_PARAMS);
- }
- final boolean demultiplex;
- if (OUTPUT_PREFIX != null) {
- barcodeFastqWriterMap.put(null, buildWriter(OUTPUT_PREFIX));
- demultiplex = false;
- } else {
- populateWritersFromMultiplexParams();
- demultiplex = true;
- }
- final int readsPerCluster = readStructure.templates.length() + readStructure.barcodes.length();
- basecallsConverter = new IlluminaBasecallsConverter<FastqRecordsForCluster>(BASECALLS_DIR, LANE, readStructure,
- barcodeFastqWriterMap, demultiplex, MAX_READS_IN_RAM_PER_TILE/readsPerCluster, TMP_DIR, NUM_PROCESSORS,
- FORCE_GC, FIRST_TILE, TILE_LIMIT, queryNameComparator,
- new FastqRecordsForClusterCodec(readStructure.templates.length(),
- readStructure.barcodes.length()), FastqRecordsForCluster.class, bclQualityEvaluationStrategy,
- this.APPLY_EAMSS_FILTER, INCLUDE_NON_PF_READS);
-
- log.info("READ STRUCTURE IS " + readStructure.toString());
-
- basecallsConverter.setConverter(
- new ClusterToFastqRecordsForClusterConverter(
- basecallsConverter.getFactory().getOutputReadStructure()));
-
- }
-
- /**
- * Assert that expectedCols are present
- *
- * @param actualCols The columns present in the MULTIPLEX_PARAMS file
- * @param expectedCols The columns that are REQUIRED
- */
- private void assertExpectedColumns(final Set<String> actualCols, final Set<String> expectedCols) {
- final Set<String> missingColumns = new HashSet<String>(expectedCols);
- missingColumns.removeAll(actualCols);
-
- if (missingColumns.size() > 0) {
- throw new PicardException(String.format(
- "MULTIPLEX_PARAMS file %s is missing the following columns: %s.",
- MULTIPLEX_PARAMS.getAbsolutePath(), StringUtil.join(", ", missingColumns
- )));
- }
- }
-
- /**
- * For each line in the MULTIPLEX_PARAMS file create a FastqRecordsWriter and put it in the barcodeFastqWriterMap map,
- * where the key to the map is the concatenation of all barcodes in order for the given line.
- */
- private void populateWritersFromMultiplexParams() {
- final TabbedTextFileWithHeaderParser libraryParamsParser = new TabbedTextFileWithHeaderParser(MULTIPLEX_PARAMS);
-
- final Set<String> expectedColumnLabels = CollectionUtil.makeSet("OUTPUT_PREFIX");
- final List<String> barcodeColumnLabels = new ArrayList<String>();
- for (int i = 1; i <= readStructure.barcodes.length(); i++) {
- barcodeColumnLabels.add("BARCODE_" + i);
- }
-
- expectedColumnLabels.addAll(barcodeColumnLabels);
- assertExpectedColumns(libraryParamsParser.columnLabels(), expectedColumnLabels);
-
- for (final TabbedTextFileWithHeaderParser.Row row : libraryParamsParser) {
- List<String> barcodeValues = null;
-
- if (barcodeColumnLabels.size() > 0) {
- barcodeValues = new ArrayList<String>();
- for (final String barcodeLabel : barcodeColumnLabels) {
- barcodeValues.add(row.getField(barcodeLabel));
- }
- }
-
- final String key = (barcodeValues == null || barcodeValues.contains("N")) ? null : StringUtil.join("", barcodeValues);
- if (barcodeFastqWriterMap.containsKey(key)) { //This will catch the case of having more than 1 line in a non-barcoded MULTIPLEX_PARAMS file
- throw new PicardException("Row for barcode " + key + " appears more than once in MULTIPLEX_PARAMS file " +
- MULTIPLEX_PARAMS);
- }
-
-
- final FastqRecordsWriter writer = buildWriter(new File(row.getField("OUTPUT_PREFIX")));
- barcodeFastqWriterMap.put(key, writer);
- }
- if (barcodeFastqWriterMap.isEmpty()) {
- throw new PicardException("MULTIPLEX_PARAMS file " + MULTIPLEX_PARAMS + " does have any data rows.");
- }
- libraryParamsParser.close();
- }
-
- /**
- * @return FastqRecordsWriter that contains one or more FastqWriters (amount depends on read structure), all using
- * outputPrefix to determine the filename(s).
- */
- private FastqRecordsWriter buildWriter(final File outputPrefix) {
- final File outputDir = outputPrefix.getAbsoluteFile().getParentFile();
- IoUtil.assertDirectoryIsWritable(outputDir);
- final String prefixString = outputPrefix.getName();
- final FastqWriter[] templateWriters = new FastqWriter[readStructure.templates.length()];
- final FastqWriter[] barcodeWriters = new FastqWriter[readStructure.barcodes.length()];
- for (int i = 0; i < templateWriters.length; ++i) {
- final String filename = String.format("%s.%d.fastq", prefixString, i+1);
- templateWriters[i] = fastqWriterFactory.newWriter(new File(outputDir, filename));
- }
- for (int i = 0; i < barcodeWriters.length; ++i) {
- final String filename = String.format("%s.barcode_%d.fastq", prefixString, i+1);
- barcodeWriters[i] = fastqWriterFactory.newWriter(new File(outputDir, filename));
- }
- return new FastqRecordsWriter(templateWriters, barcodeWriters);
- }
-
- public static void main(final String[] args) {
- new IlluminaBasecallsToFastq().instanceMainWithExit(args);
- }
-
- /**
- * Container for various FastqWriters, one for each template read and one for each barcode read.
- */
- private static class FastqRecordsWriter implements IlluminaBasecallsConverter.ConvertedClusterDataWriter<FastqRecordsForCluster> {
- final FastqWriter[] templateWriters;
- final FastqWriter[] barcodeWriters;
-
- /**
- * @param templateWriters Writers for template reads in order, e,g. 0th element is for template read 1.
- * @param barcodeWriters Writers for barcode reads in order, e,g. 0th element is for barcode read 1.
- */
- private FastqRecordsWriter(final FastqWriter[] templateWriters, final FastqWriter[] barcodeWriters) {
- this.templateWriters = templateWriters;
- this.barcodeWriters = barcodeWriters;
- }
-
- @Override
- public void write(final FastqRecordsForCluster records) {
- write(templateWriters, records.templateRecords);
- write(barcodeWriters, records.barcodeRecords);
- }
-
- private void write(final FastqWriter[] writers, final FastqRecord[] records) {
- for (int i = 0; i < writers.length; ++i) {
- writers[i].write(records[i]);
- }
- }
-
- @Override
- public void close() {
- for (final FastqWriter writer : templateWriters) {
- writer.close();
- }
- for (final FastqWriter writer : barcodeWriters) {
- writer.close();
- }
- }
- }
-
- /**
- * Contains the results of transforming one cluster into the record(s) to be written to output file(s).
- */
- static class FastqRecordsForCluster {
- // These are accessed directly by converter and writer rather than through getters and setters.
- final FastqRecord[] templateRecords;
- final FastqRecord[] barcodeRecords;
-
- FastqRecordsForCluster(final int numTemplates, final int numBarcodes) {
- templateRecords = new FastqRecord[numTemplates];
- barcodeRecords = new FastqRecord[numBarcodes];
- }
- }
-
- /**
- * Passed to IlluminaBaseCallsConverter to do the conversion from input format to output format.
- */
- class ClusterToFastqRecordsForClusterConverter
- implements IlluminaBasecallsConverter.ClusterDataConverter<FastqRecordsForCluster> {
-
- private final int [] templateIndices;
- private final int [] barcodeIndices;
-
- ClusterToFastqRecordsForClusterConverter(final ReadStructure outputReadStructure) {
- this.templateIndices = outputReadStructure.templates.getIndices();
- this.barcodeIndices = outputReadStructure.barcodes.getIndices();
- }
-
- @Override
- public FastqRecordsForCluster convertClusterToOutputRecord(final ClusterData cluster) {
- final FastqRecordsForCluster ret = new FastqRecordsForCluster(readStructure.templates.length(), readStructure.barcodes.length());
- final boolean appendReadNumberSuffix = ret.templateRecords.length > 1;
- makeFastqRecords(ret.templateRecords, templateIndices, cluster, appendReadNumberSuffix);
- makeFastqRecords(ret.barcodeRecords, barcodeIndices, cluster, false);
- return ret;
- }
-
- private void makeFastqRecords(final FastqRecord[] recs, final int[] indices,
- final ClusterData cluster, final boolean appendReadNumberSuffix) {
- for (short i = 0; i < indices.length; ++i) {
- final ReadData readData = cluster.getRead(indices[i]);
- final String readBases = StringUtil.bytesToString(readData.getBases()).replace('.', 'N');
- final String readName = readNameEncoder.generateReadName(cluster, appendReadNumberSuffix ? i + 1 : null);
- recs[i] = new FastqRecord(
- readName,
- readBases,
- null,
- SAMUtils.phredToFastq(readData.getQualities())
- );
- }
- }
- }
-
- /**
- * Coded passed to IlluminaBasecallsConverter for use in SortingCollections of output records.
- */
- static class FastqRecordsForClusterCodec implements SortingCollection.Codec<FastqRecordsForCluster> {
- private final int numTemplates;
- private final int numBarcodes;
- private BasicFastqWriter writer = null;
- private FastqReader reader = null;
-
- FastqRecordsForClusterCodec(final int numTemplates, final int numBarcodes) {
- this.numTemplates = numTemplates;
- this.numBarcodes = numBarcodes;
- }
-
- @Override
- public void setOutputStream(final OutputStream os) {
- writer = new BasicFastqWriter(new PrintStream(os));
- }
-
- @Override
- public void setInputStream(final InputStream is) {
- reader = new FastqReader(new BufferedReader(new InputStreamReader(is)));
- }
-
- @Override
- public void encode(final FastqRecordsForCluster val) {
- if (numTemplates != val.templateRecords.length) throw new IllegalStateException();
- if (numBarcodes != val.barcodeRecords.length) throw new IllegalStateException();
- encodeArray(val.templateRecords);
- encodeArray(val.barcodeRecords);
- writer.flush();
- }
-
- private void encodeArray(final FastqRecord[] recs) {
- for (final FastqRecord rec: recs) {
- writer.write(rec);
- }
- }
-
- @Override
- public FastqRecordsForCluster decode() {
- if (!reader.hasNext()) return null;
- final FastqRecordsForCluster ret = new FastqRecordsForCluster(numTemplates, numBarcodes);
- decodeArray(ret.templateRecords);
- decodeArray(ret.barcodeRecords);
- return ret;
- }
-
- private void decodeArray(final FastqRecord[] recs) {
- for (int i = 0; i < recs.length; ++i) {
- recs[i] = reader.next();
- }
- }
-
- @Override
- public SortingCollection.Codec<FastqRecordsForCluster> clone() {
- return new FastqRecordsForClusterCodec(numTemplates, numBarcodes);
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/IlluminaBasecallsToSam.java b/src/java/net/sf/picard/illumina/IlluminaBasecallsToSam.java
deleted file mode 100644
index 39423a8..0000000
--- a/src/java/net/sf/picard/illumina/IlluminaBasecallsToSam.java
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.illumina.parser.ReadStructure;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.picard.util.IlluminaUtil;
-import net.sf.picard.util.IlluminaUtil.IlluminaAdapterPair;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.TabbedTextFileWithHeaderParser;
-import net.sf.samtools.*;
-import net.sf.samtools.util.Iso8601Date;
-import net.sf.samtools.util.SortingCollection;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.*;
-
-/**
- * IlluminaBasecallsToSam transforms a lane of Illumina data file formats (bcl, locs, clocs, qseqs, etc.) into
- * SAM or BAM file format.
- * <p/>
- * In this application, barcode data is read from Illumina data file groups, each of which is associated with a tile.
- * Each tile may contain data for any number of barcodes, and a single barcode's data may span multiple tiles. Once the
- * barcode data is collected from files, each barcode's data is written to its own SAM/BAM. The barcode data must be
- * written in order; this means that barcode data from each tile is sorted before it is written to file, and that if a
- * barcode's data does span multiple tiles, data collected from each tile must be written in the order of the tiles
- * themselves.
- * <p/>
- * This class employs a number of private subclasses to achieve this goal. The TileReadAggregator controls the flow
- * of operation. It is fed a number of Tiles which it uses to spawn TileReaders. TileReaders are responsible for
- * reading Illumina data for their respective tiles from disk, and as they collect that data, it is fed back into the
- * TileReadAggregator. When a TileReader completes a tile, it notifies the TileReadAggregator, which reviews what was
- * read and conditionally queues its writing to disk, baring in mind the requirements of write-order described in the
- * previous paragraph. As writes complete, the TileReadAggregator re-evalutes the state of reads/writes and may queue
- * more writes. When all barcodes for all tiles have been written, the TileReadAggregator shuts down.
- * <p/>
- * The TileReadAggregator controls task execution using a specialized ThreadPoolExecutor. It accepts special Runnables
- * of type PriorityRunnable which allow a priority to be assigned to the runnable. When the ThreadPoolExecutor is
- * assigning threads, it gives priority to those PriorityRunnables with higher priority values. In this application,
- * TileReaders are assigned lowest priority, and write tasks are assigned high priority. It is designed in this fashion
- * to minimize the amount of time data must remain in memory (write the data as soon as possible, then discard it from
- * memory) while maximizing CPU usage.
- *
- * @author jburke at broadinstitute.org
- * @author mccowan at broadinstitute.org
- */
-public class IlluminaBasecallsToSam extends CommandLineProgram {
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE =
- getStandardUsagePreamble() + "Generate a SAM or BAM file from data in an Illumina basecalls output directory.\n";
-
- @Option(doc = "The basecalls directory. ", shortName = "B")
- public File BASECALLS_DIR;
-
- @Option(doc = "Lane number. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
- public Integer LANE;
-
- @Option(doc = "Deprecated (use LIBRARY_PARAMS). The output SAM or BAM file. Format is determined by extension.",
- shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
- mutex = {"BARCODE_PARAMS", "LIBRARY_PARAMS"})
- public File OUTPUT;
-
- @Option(doc = "The barcode of the run. Prefixed to read names.")
- public String RUN_BARCODE;
-
- @Option(doc = "Deprecated (use LIBRARY_PARAMS). The name of the sequenced sample",
- shortName = StandardOptionDefinitions.SAMPLE_ALIAS_SHORT_NAME,
- mutex = {"BARCODE_PARAMS", "LIBRARY_PARAMS"})
- public String SAMPLE_ALIAS;
-
- @Option(doc = "ID used to link RG header record with RG tag in SAM record. " +
- "If these are unique in SAM files that get merged, merge performance is better. " +
- "If not specified, READ_GROUP_ID will be set to <first 5 chars of RUN_BARCODE>.<LANE> .",
- shortName = StandardOptionDefinitions.READ_GROUP_ID_SHORT_NAME, optional = true)
- public String READ_GROUP_ID;
-
- @Option(doc = "Deprecated (use LIBRARY_PARAMS). The name of the sequenced library",
- shortName = StandardOptionDefinitions.LIBRARY_NAME_SHORT_NAME,
- optional = true,
- mutex = {"BARCODE_PARAMS", "LIBRARY_PARAMS"})
- public String LIBRARY_NAME;
-
- @Option(doc = "The name of the sequencing center that produced the reads. Used to set the RG.CN tag.", optional = true)
- public String SEQUENCING_CENTER = "BI";
-
- @Option(doc = "The start date of the run.", optional = true)
- public Date RUN_START_DATE;
-
- @Option(doc = "The name of the sequencing technology that produced the read.", optional = true)
- public String PLATFORM = "illumina";
-
- @Option(doc = ReadStructure.PARAMETER_DOC, shortName = "RS")
- public String READ_STRUCTURE;
-
- @Option(doc = "Deprecated (use LIBRARY_PARAMS). Tab-separated file for creating all output BAMs for barcoded run " +
- "with single IlluminaBasecallsToSam invocation. Columns are BARCODE, OUTPUT, SAMPLE_ALIAS, and " +
- "LIBRARY_NAME. Row with BARCODE=N is used to specify a file for no barcode match",
- mutex = {"OUTPUT", "SAMPLE_ALIAS", "LIBRARY_NAME", "LIBRARY_PARAMS"})
- public File BARCODE_PARAMS;
-
- @Option(doc = "Tab-separated file for creating all output BAMs for a lane with single IlluminaBasecallsToSam " +
- "invocation. The columns are OUTPUT, SAMPLE_ALIAS, and LIBRARY_NAME, BARCODE_1, BARCODE_2 ... BARCODE_X " +
- "where X = number of barcodes per cluster (optional). Row with BARCODE_1 set to 'N' is used to specify a file " +
- "for no barcode match. You may also provide any 2 letter RG header attributes (excluding PU, CN, PL, and" +
- " DT) as columns in this file and the values for those columns will be inserted into the RG tag for the" +
- " BAM file created for a given row.",
- mutex = {"OUTPUT", "SAMPLE_ALIAS", "LIBRARY_NAME", "BARCODE_PARAMS"})
- public File LIBRARY_PARAMS;
-
- @Option(doc = "Which adapters to look for in the read.")
- public List<IlluminaAdapterPair> ADAPTERS_TO_CHECK = new ArrayList<IlluminaAdapterPair>(
- Arrays.asList(IlluminaAdapterPair.INDEXED,
- IlluminaAdapterPair.DUAL_INDEXED,
- IlluminaAdapterPair.NEXTERA_V2,
- IlluminaAdapterPair.FLUIDIGM));
-
- @Option(doc = "The number of threads to run in parallel. If NUM_PROCESSORS = 0, number of cores is automatically set to " +
- "the number of cores available on the machine. If NUM_PROCESSORS < 0, then the number of cores used will" +
- " be the number available on the machine less NUM_PROCESSORS.")
- public Integer NUM_PROCESSORS = 0;
-
- @Option(doc = "If set, this is the first tile to be processed (used for debugging). Note that tiles are not processed" +
- " in numerical order.",
- optional = true)
- public Integer FIRST_TILE;
-
- @Option(doc = "If set, process no more than this many tiles (used for debugging).", optional = true)
- public Integer TILE_LIMIT;
-
- @Option(doc = "If true, call System.gc() periodically. This is useful in cases in which the -Xmx value passed " +
- "is larger than the available memory.")
- public Boolean FORCE_GC = true;
-
- @Option(doc="Apply EAMSS filtering to identify inappropriately quality scored bases towards the ends of reads" +
- " and convert their quality scores to Q2.")
- public boolean APPLY_EAMSS_FILTER = true;
-
- @Option(doc = "Configure SortingCollections to store this many records before spilling to disk. For an indexed" +
- " run, each SortingCollection gets this value/number of indices.")
- public int MAX_READS_IN_RAM_PER_TILE = 1200000;
-
- @Option(doc="The minimum quality (after transforming 0s to 1s) expected from reads. If qualities are lower than this value, an error is thrown." +
- "The default of 2 is what the Illumina's spec describes as the minimum, but in practice the value has been observed lower.")
- public int MINIMUM_QUALITY = BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY;
-
- @Option(doc="Whether to include non-PF reads", shortName="NONPF", optional=true)
- public boolean INCLUDE_NON_PF_READS = true;
-
- private final Map<String, SAMFileWriterWrapper> barcodeSamWriterMap = new HashMap<String, SAMFileWriterWrapper>();
- private ReadStructure readStructure;
- IlluminaBasecallsConverter<SAMRecordsForCluster> basecallsConverter;
- private static final Log log = Log.getInstance(IlluminaBasecallsToSam.class);
- private BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
-
- @Override
- protected int doWork() {
- initialize();
- basecallsConverter.doTileProcessing();
- return 0;
- }
-
- /**
- * Prepares loggers, initiates garbage collection thread, parses arguments and initialized variables appropriately/
- */
- private void initialize() {
- this.bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(MINIMUM_QUALITY);
-
- if (OUTPUT != null) {
- IoUtil.assertFileIsWritable(OUTPUT);
- }
-
- if (LIBRARY_PARAMS != null) {
- IoUtil.assertFileIsReadable(LIBRARY_PARAMS);
- }
-
- if (OUTPUT != null) {
- barcodeSamWriterMap.put(null, buildSamFileWriter(OUTPUT, SAMPLE_ALIAS, LIBRARY_NAME, buildSamHeaderParameters(null)));
- } else {
- populateWritersFromLibraryParams();
- }
-
- readStructure = new ReadStructure(READ_STRUCTURE);
-
- final int numOutputRecords = readStructure.templates.length();
-
- basecallsConverter = new IlluminaBasecallsConverter<SAMRecordsForCluster>(BASECALLS_DIR, LANE, readStructure,
- barcodeSamWriterMap, true, MAX_READS_IN_RAM_PER_TILE/numOutputRecords, TMP_DIR, NUM_PROCESSORS, FORCE_GC,
- FIRST_TILE, TILE_LIMIT, new QueryNameComparator(), new Codec(numOutputRecords), SAMRecordsForCluster.class,
- bclQualityEvaluationStrategy, this.APPLY_EAMSS_FILTER, INCLUDE_NON_PF_READS);
-
- log.info("DONE_READING STRUCTURE IS " + readStructure.toString());
-
- /**
- * Be sure to pass the outputReadStructure to ClusterDataToSamConverter, which reflects the structure of the output cluster
- * data which may be different from the input read structure (specifically if there are skips).
- */
- final ClusterDataToSamConverter converter = new ClusterDataToSamConverter(RUN_BARCODE, READ_GROUP_ID,
- basecallsConverter.getFactory().getOutputReadStructure(), ADAPTERS_TO_CHECK);
- basecallsConverter.setConverter(converter);
-
- }
-
- /**
- * Assert that expectedCols are present and return actualCols - expectedCols
- *
- * @param actualCols The columns present in the LIBRARY_PARAMS file
- * @param expectedCols The columns that are REQUIRED
- * @return actualCols - expectedCols
- */
- private Set<String> findAndFilterExpectedColumns(final Set<String> actualCols, final Set<String> expectedCols) {
- final Set<String> missingColumns = new HashSet<String>(expectedCols);
- missingColumns.removeAll(actualCols);
-
- if (missingColumns.size() > 0) {
- throw new PicardException(String.format(
- "LIBRARY_PARAMS file %s is missing the following columns: %s.",
- LIBRARY_PARAMS.getAbsolutePath(), StringUtil.join(", ", missingColumns
- )));
- }
-
- final Set<String> remainingColumns = new HashSet<String>(actualCols);
- remainingColumns.removeAll(expectedCols);
- return remainingColumns;
- }
-
- /**
- * Given a set of columns assert that all columns conform to the format of an RG header attribute (i.e. 2 letters)
- * the attribute is NOT a member of the rgHeaderTags that are built by default in buildSamHeaderParameters
- *
- * @param rgTagColumns A set of columns that should conform to the rg header attribute format
- */
- private void checkRgTagColumns(final Set<String> rgTagColumns) {
- final Set<String> forbiddenHeaders = buildSamHeaderParameters(null).keySet();
- forbiddenHeaders.retainAll(rgTagColumns);
-
- if (forbiddenHeaders.size() > 0) {
- throw new PicardException("Illegal ReadGroup tags in library params(barcode params) file(" + LIBRARY_PARAMS.getAbsolutePath() + ") Offending headers = " + StringUtil.join(", ", forbiddenHeaders));
- }
-
- for (final String column : rgTagColumns) {
- if (column.length() > 2) {
- throw new PicardException("Column label (" + column + ") unrecognized. Library params(barcode params) can only contain the columns " +
- "(OUTPUT, LIBRARY_NAME, SAMPLE_ALIAS, BARCODE, BARCODE_<X> where X is a positive integer) OR two letter RG tags!");
- }
- }
- }
-
- /**
- * For each line in the LIBRARY_PARAMS file create a SamFileWriter and put it in the barcodeSamWriterMap map, where
- * the key to the map is the concatenation of all barcodes in order for the given line
- */
- private void populateWritersFromLibraryParams() {
- final TabbedTextFileWithHeaderParser libraryParamsParser = new TabbedTextFileWithHeaderParser(LIBRARY_PARAMS);
-
- final Set<String> expectedColumnLabels = CollectionUtil.makeSet("OUTPUT", "SAMPLE_ALIAS", "LIBRARY_NAME");
- final List<String> barcodeColumnLabels = new ArrayList<String>();
- if (readStructure.barcodes.length() == 1) {
- //For the single barcode read case, the barcode label name can either by BARCODE or BARCODE_1
- if (libraryParamsParser.hasColumn("BARCODE")) {
- barcodeColumnLabels.add("BARCODE");
- } else if (libraryParamsParser.hasColumn("BARCODE_1")) {
- barcodeColumnLabels.add("BARCODE_1");
- } else {
- throw new PicardException("LIBRARY_PARAMS(BARCODE_PARAMS) file " + LIBRARY_PARAMS + " does not have column BARCODE or BARCODE_1.");
- }
- } else {
- for (int i = 1; i <= readStructure.barcodes.length(); i++) {
- barcodeColumnLabels.add("BARCODE_" + i);
- }
- }
-
- expectedColumnLabels.addAll(barcodeColumnLabels);
- final Set<String> rgTagColumns = findAndFilterExpectedColumns(libraryParamsParser.columnLabels(), expectedColumnLabels);
- checkRgTagColumns(rgTagColumns);
-
- for (final TabbedTextFileWithHeaderParser.Row row : libraryParamsParser) {
- List<String> barcodeValues = null;
-
- if (barcodeColumnLabels.size() > 0) {
- barcodeValues = new ArrayList<String>();
- for (final String barcodeLabel : barcodeColumnLabels) {
- barcodeValues.add(row.getField(barcodeLabel));
- }
- }
-
- final String key = (barcodeValues == null || barcodeValues.contains("N")) ? null : StringUtil.join("", barcodeValues);
- if (barcodeSamWriterMap.containsKey(key)) { //This will catch the case of having more than 1 line in a non-barcoded LIBRARY_PARAMS file
- throw new PicardException("Row for barcode " + key + " appears more than once in LIBRARY_PARAMS or BARCODE_PARAMS file " +
- LIBRARY_PARAMS);
- }
-
- final Map<String, String> samHeaderParams = buildSamHeaderParameters(barcodeValues);
-
- for (final String tagName : rgTagColumns) {
- samHeaderParams.put(tagName, row.getField(tagName));
- }
-
- final SAMFileWriterWrapper writer = buildSamFileWriter(new File(row.getField("OUTPUT")),
- row.getField("SAMPLE_ALIAS"), row.getField("LIBRARY_NAME"), samHeaderParams);
- barcodeSamWriterMap.put(key, writer);
- }
- if (barcodeSamWriterMap.isEmpty()) {
- throw new PicardException("LIBRARY_PARAMS(BARCODE_PARAMS) file " + LIBRARY_PARAMS + " does have any data rows.");
- }
- libraryParamsParser.close();
- }
-
- /**
- * Create the list of headers that will be added to the SAMFileHeader for a library with the given barcodes (or
- * the entire run if barcodes == NULL). Note that any value that is null will NOT be added via buildSamFileWriter
- * but is placed in the map in order to be able to query the tags that we automatically add.
- *
- * @param barcodes The list of barcodes that uniquely identify the read group we are building parameters for
- * @return A Map of ReadGroupHeaderTags -> Values
- */
- private Map<String, String> buildSamHeaderParameters(final List<String> barcodes) {
- final Map<String, String> params = new HashMap<String, String>();
-
- String platformUnit = RUN_BARCODE + "." + LANE;
- if (barcodes != null) platformUnit += ("." + IlluminaUtil.barcodeSeqsToString(barcodes));
- params.put("PU", platformUnit);
-
- params.put("CN", SEQUENCING_CENTER);
- params.put("PL", PLATFORM);
- if (RUN_START_DATE != null) {
- final Iso8601Date date = new Iso8601Date(RUN_START_DATE);
- params.put("DT", date.toString());
- } else {
- params.put("DT", null);
- }
-
- return params;
- }
-
- /**
- * Build a SamFileWriter that will write its contents to the output file.
- *
- * @param output The file to which to write
- * @param sampleAlias The sample alias set in the read group header
- * @param libraryName The name of the library to which this read group belongs
- * @param headerParameters Header parameters that will be added to the RG header for this SamFile
- * @return A SAMFileWriter
- */
- private SAMFileWriterWrapper buildSamFileWriter(final File output, final String sampleAlias,
- final String libraryName, final Map<String, String> headerParameters) {
- IoUtil.assertFileIsWritable(output);
- final SAMReadGroupRecord rg = new SAMReadGroupRecord(READ_GROUP_ID);
- rg.setSample(sampleAlias);
-
- if (libraryName != null) rg.setLibrary(libraryName);
- for (final Map.Entry<String, String> tagNameToValue : headerParameters.entrySet()) {
- if (tagNameToValue.getValue() != null) {
- rg.setAttribute(tagNameToValue.getKey(), tagNameToValue.getValue());
- }
- }
-
- final SAMFileHeader header = new SAMFileHeader();
- header.setSortOrder(SAMFileHeader.SortOrder.queryname);
- header.addReadGroup(rg);
- return new SAMFileWriterWrapper(new SAMFileWriterFactory().makeSAMOrBAMWriter(header, true, output));
- }
-
- public static void main(final String[] args) {
- System.exit(new IlluminaBasecallsToSam().instanceMain(args));
- }
-
- /**
- * Put any custom command-line validation in an override of this method.
- * clp is initialized at this point and can be used to print usage and access args.
- * Any options set by command-line parser can be validated.
- *
- * @return null if command line is valid. If command line is invalid, returns an array of error message
- * to be written to the appropriate place.
- */
- @Override
- protected String[] customCommandLineValidation() {
- if (BARCODE_PARAMS != null) {
- LIBRARY_PARAMS = BARCODE_PARAMS;
- }
-
- final ArrayList<String> messages = new ArrayList<String>();
-
- readStructure = new ReadStructure(READ_STRUCTURE);
- if (!readStructure.barcodes.isEmpty()) {
- if (LIBRARY_PARAMS == null) {
- messages.add("BARCODE_PARAMS or LIBRARY_PARAMS is missing. If READ_STRUCTURE contains a B (barcode)" +
- " then either LIBRARY_PARAMS or BARCODE_PARAMS(deprecated) must be provided!");
- }
- }
-
- if (READ_GROUP_ID == null) {
- READ_GROUP_ID = RUN_BARCODE.substring(0, 5) + "." + LANE;
- }
- if (messages.size() == 0) {
- return null;
- }
- return messages.toArray(new String[messages.size()]);
- }
-
-
- private static class SAMFileWriterWrapper
- implements IlluminaBasecallsConverter.ConvertedClusterDataWriter<SAMRecordsForCluster> {
- public final SAMFileWriter writer;
-
- private SAMFileWriterWrapper(final SAMFileWriter writer) {
- this.writer = writer;
- }
-
- @Override
- public void write(final SAMRecordsForCluster records) {
- for (final SAMRecord rec : records.records) {
- writer.addAlignment(rec);
- }
- }
-
- @Override
- public void close() {
- writer.close();
- }
- }
-
- static class SAMRecordsForCluster {
- final SAMRecord[] records;
-
- SAMRecordsForCluster(final int numRecords) {
- records = new SAMRecord[numRecords];
- }
- }
-
- static class QueryNameComparator implements Comparator<SAMRecordsForCluster> {
- private final SAMRecordQueryNameComparator comparator = new SAMRecordQueryNameComparator();
- @Override
- public int compare(final SAMRecordsForCluster s1, final SAMRecordsForCluster s2) {
- return comparator.compare(s1.records[0], s2.records[0]);
- }
- }
-
- static class Codec implements SortingCollection.Codec<SAMRecordsForCluster> {
- private final BAMRecordCodec bamCodec;
- private final int numRecords;
-
- Codec(final int numRecords, final BAMRecordCodec bamCodec) {
- this.numRecords = numRecords;
- this.bamCodec = bamCodec;
- }
-
- Codec(final int numRecords) {
- this(numRecords, new BAMRecordCodec(null));
- }
-
- @Override
- public void setOutputStream(final OutputStream os) {
- bamCodec.setOutputStream(os);
- }
-
- @Override
- public void setInputStream(final InputStream is) {
- bamCodec.setInputStream(is);
- }
-
- @Override
- public void encode(final SAMRecordsForCluster val) {
- if (val.records.length != numRecords) {
- throw new IllegalStateException(String.format("Expected number of clusters %d != actual %d",
- numRecords, val.records.length));
- }
- for (final SAMRecord rec : val.records) {
- bamCodec.encode(rec);
- }
- }
-
- @Override
- public SAMRecordsForCluster decode() {
- final SAMRecord zerothRecord = bamCodec.decode();
- if (zerothRecord == null) return null;
- final SAMRecordsForCluster ret = new SAMRecordsForCluster(numRecords);
- ret.records[0] = zerothRecord;
- for (int i = 1; i < numRecords; ++i) {
- ret.records[i] = bamCodec.decode();
- if (ret.records[i] == null) {
- throw new IllegalStateException(String.format("Expected to read % records but read only %d", numRecords, i));
- }
- }
- return ret;
- }
-
- @Override
- public SortingCollection.Codec<SAMRecordsForCluster> clone() {
- return new Codec(numRecords, bamCodec.clone());
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/MarkIlluminaAdapters.java b/src/java/net/sf/picard/illumina/MarkIlluminaAdapters.java
deleted file mode 100644
index 3bf8072..0000000
--- a/src/java/net/sf/picard/illumina/MarkIlluminaAdapters.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.sam.ReservedTagConstants;
-import net.sf.picard.util.*;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-import static net.sf.picard.util.IlluminaUtil.IlluminaAdapterPair;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Command line program to mark the location of adapter sequences.
- * This also outputs a histogram of metrics describing the clipped bases
- *
- * @author Tim Fennell (adapted by mborkan at broadinstitute.org)
- */
-public class MarkIlluminaAdapters extends CommandLineProgram {
-
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE =
- getStandardUsagePreamble() + "Reads a SAM or BAM file and rewrites it with new adapter-trimming tags.\n" +
- "Clear any existing adapter-trimming tags (XT:i:).\n" +
- "Only works for unaligned files in query-name order.\n"+
- "Note: This is a utility program and will not be run in the pipeline.\n";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME)
- public File INPUT;
-
- @Option(doc="If output is not specified, just the metrics are generated",
- shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, optional=true)
- public File OUTPUT;
-
- @Option(doc="Histogram showing counts of bases_clipped in how many reads", shortName="M")
- public File METRICS;
-
- @Option(doc="The minimum number of bases to match over when clipping single-end reads.")
- public int MIN_MATCH_BASES_SE = ClippingUtility.MIN_MATCH_BASES;
-
- @Option(doc="The minimum number of bases to match over (per-read) when clipping paired-end reads.")
- public int MIN_MATCH_BASES_PE = ClippingUtility.MIN_MATCH_PE_BASES;
-
- @Option(doc="The maximum mismatch error rate to tolerate when clipping single-end reads.")
- public double MAX_ERROR_RATE_SE = ClippingUtility.MAX_ERROR_RATE;
-
- @Option(doc="The maximum mismatch error rate to tolerate when clipping paired-end reads.")
- public double MAX_ERROR_RATE_PE = ClippingUtility.MAX_PE_ERROR_RATE;
-
- @Option(doc="DEPRECATED. Whether this is a paired-end run. No longer used.", shortName="PE", optional=true)
- public Boolean PAIRED_RUN;
-
- @Option(doc="Which adapters sequences to attempt to identify and clip.")
- public List<IlluminaAdapterPair> ADAPTERS =
- CollectionUtil.makeList(IlluminaAdapterPair.INDEXED,
- IlluminaAdapterPair.DUAL_INDEXED,
- IlluminaAdapterPair.PAIRED_END
- );
-
- @Option(doc="For specifying adapters other than standard Illumina", optional=true)
- public String FIVE_PRIME_ADAPTER;
- @Option(doc="For specifying adapters other than standard Illumina", optional=true)
- public String THREE_PRIME_ADAPTER;
-
- @Option(doc="Adapters are truncated to this length to speed adapter matching. Set to a large number to effectively disable truncation.")
- public int ADAPTER_TRUNCATION_LENGTH = AdapterMarker.DEFAULT_ADAPTER_LENGTH;
-
- @Option(doc="If looking for multiple adapter sequences, then after having seen this many adapters, shorten the list of sequences. " +
- "Keep the adapters that were found most frequently in the input so far. " +
- "Set to -1 if the input has a heterogeneous mix of adapters so shortening is undesirable.",
- shortName = "APT")
- public int PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN = AdapterMarker.DEFAULT_PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN;
-
- @Option(doc="If pruning the adapter list, keep only this many adapter sequences when pruning the list (plus any adapters that " +
- "were tied with the adapters being kept).")
- public int NUM_ADAPTERS_TO_KEEP = AdapterMarker.DEFAULT_NUM_ADAPTERS_TO_KEEP;
-
- private static final Log log = Log.getInstance(MarkIlluminaAdapters.class);
-
- // Stock main method
- public static void main(final String[] args) {
- System.exit(new MarkIlluminaAdapters().instanceMain(args));
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- if ((FIVE_PRIME_ADAPTER != null && THREE_PRIME_ADAPTER == null) || (THREE_PRIME_ADAPTER != null && FIVE_PRIME_ADAPTER == null)) {
- return new String[] {"Either both or neither of THREE_PRIME_ADAPTER and FIVE_PRIME_ADAPTER must be set."};
- }
- else {
- return null;
- }
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(METRICS);
-
- final SAMFileReader in = new SAMFileReader(INPUT);
- final SAMFileHeader.SortOrder order = in.getFileHeader().getSortOrder();
- SAMFileWriter out = null;
- if (OUTPUT != null) {
- IoUtil.assertFileIsWritable(OUTPUT);
- out = new SAMFileWriterFactory().makeSAMOrBAMWriter(in.getFileHeader(), true, OUTPUT);
- }
-
- final Histogram<Integer> histo = new Histogram<Integer>("clipped_bases", "read_count");
-
- // Combine any adapters and custom adapter pairs from the command line into an array for use in clipping
- final AdapterPair[] adapters;
- {
- final List<AdapterPair> tmp = new ArrayList<AdapterPair>();
- tmp.addAll(ADAPTERS);
- if (FIVE_PRIME_ADAPTER != null && THREE_PRIME_ADAPTER != null) {
- tmp.add(new CustomAdapterPair(FIVE_PRIME_ADAPTER, THREE_PRIME_ADAPTER));
- }
- adapters = tmp.toArray(new AdapterPair[tmp.size()]);
- }
-
- ////////////////////////////////////////////////////////////////////////
- // Main loop that consumes reads, clips them and writes them to the output
- ////////////////////////////////////////////////////////////////////////
- final ProgressLogger progress = new ProgressLogger(log, 1000000, "Read");
- final SAMRecordIterator iterator = in.iterator();
-
- final AdapterMarker adapterMarker = new AdapterMarker(ADAPTER_TRUNCATION_LENGTH, adapters).
- setMaxPairErrorRate(MAX_ERROR_RATE_PE).setMinPairMatchBases(MIN_MATCH_BASES_PE).
- setMaxSingleEndErrorRate(MAX_ERROR_RATE_SE).setMinSingleEndMatchBases(MIN_MATCH_BASES_SE).
- setNumAdaptersToKeep(NUM_ADAPTERS_TO_KEEP).
- setThresholdForSelectingAdaptersToKeep(PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN);
-
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- final SAMRecord rec2 = rec.getReadPairedFlag() && iterator.hasNext() ? iterator.next() : null;
- rec.setAttribute(ReservedTagConstants.XT, null);
-
- // Do the clipping one way for PE and another for SE reads
- if (rec.getReadPairedFlag()) {
- // Assert that the input file is in query name order only if we see some PE reads
- if (order != SAMFileHeader.SortOrder.queryname) {
- throw new PicardException("Input BAM file must be sorted by queryname");
- }
-
- if (rec2 == null) throw new PicardException("Missing mate pair for paired read: " + rec.getReadName());
- rec2.setAttribute(ReservedTagConstants.XT, null);
-
- // Assert that we did in fact just get two mate pairs
- if (!rec.getReadName().equals(rec2.getReadName())){
- throw new PicardException("Adjacent reads expected to be mate-pairs have different names: " +
- rec.getReadName() + ", " + rec2.getReadName());
- }
-
- // establish which of pair is first and which second
- final SAMRecord first, second;
-
- if (rec.getFirstOfPairFlag() && rec2.getSecondOfPairFlag()){
- first = rec;
- second = rec2;
- }
- else if (rec.getSecondOfPairFlag() && rec2.getFirstOfPairFlag()) {
- first = rec2;
- second = rec;
- }
- else {
- throw new PicardException("Two reads with same name but not correctly marked as 1st/2nd of pair: " + rec.getReadName());
- }
-
- adapterMarker.adapterTrimIlluminaPairedReads(first, second);
- }
- else {
- adapterMarker.adapterTrimIlluminaSingleRead(rec);
- }
-
- // Then output the records, update progress and metrics
- for (final SAMRecord r : new SAMRecord[] {rec, rec2}) {
- if (r != null) {
- progress.record(r);
- if (out != null) out.addAlignment(r);
-
- final Integer clip = rec.getIntegerAttribute(ReservedTagConstants.XT);
- if (clip != null) histo.increment(rec.getReadLength() - clip + 1);
- }
- }
- }
-
- if (out != null) out.close();
-
- // Lastly output the metrics to file
- final MetricsFile<?,Integer> metricsFile = getMetricsFile();
- metricsFile.setHistogram(histo);
- metricsFile.write(METRICS);
-
- return 0;
- }
-
- private class CustomAdapterPair implements AdapterPair {
-
- final String fivePrime, threePrime, fivePrimeReadOrder;
- final byte[] fivePrimeBytes, threePrimeBytes, fivePrimeReadOrderBytes;
-
- private CustomAdapterPair(final String fivePrime, final String threePrime) {
- this.threePrime = threePrime;
- this.threePrimeBytes = StringUtil.stringToBytes(threePrime);
-
- this.fivePrime = fivePrime;
- this.fivePrimeReadOrder = SequenceUtil.reverseComplement(fivePrime);
- this.fivePrimeBytes = StringUtil.stringToBytes(fivePrime);
- this.fivePrimeReadOrderBytes = StringUtil.stringToBytes(fivePrimeReadOrder);
- }
-
- public String get3PrimeAdapter(){ return threePrime; }
- public String get5PrimeAdapter(){ return fivePrime; }
- public String get3PrimeAdapterInReadOrder(){ return threePrime; }
- public String get5PrimeAdapterInReadOrder() { return fivePrimeReadOrder; }
- public byte[] get3PrimeAdapterBytes() { return threePrimeBytes; }
- public byte[] get5PrimeAdapterBytes() { return fivePrimeBytes; }
- public byte[] get3PrimeAdapterBytesInReadOrder() { return threePrimeBytes; }
- public byte[] get5PrimeAdapterBytesInReadOrder() { return fivePrimeReadOrderBytes; }
- public String getName() { return "Custom adapter pair"; }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/BarcodeParser.java b/src/java/net/sf/picard/illumina/parser/BarcodeParser.java
deleted file mode 100644
index 8fabb97..0000000
--- a/src/java/net/sf/picard/illumina/parser/BarcodeParser.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.illumina.parser.readers.BarcodeFileReader;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * @author jburke at broadinstitute.org
- */
-class BarcodeParser extends PerTileParser<BarcodeData> {
-
- private static final Set<IlluminaDataType> SUPPORTED_TYPES = Collections.unmodifiableSet(CollectionUtil.makeSet(IlluminaDataType.Barcodes));
-
- public BarcodeParser(final IlluminaFileMap tilesToFiles) {
- super(tilesToFiles);
- }
-
- public BarcodeParser(final IlluminaFileMap tilesToFiles, final int nextTile) {
- super(tilesToFiles, nextTile);
- }
-
- @Override
- protected CloseableIterator<BarcodeData> makeTileIterator(File nextTileFile) {
- return new BarcodeDataIterator(nextTileFile);
- }
-
- public Set<IlluminaDataType> supportedTypes() {
- return SUPPORTED_TYPES;
- }
-
- private static class BarcodeDataIterator implements CloseableIterator<BarcodeData>{
- private BarcodeFileReader bfr;
- public BarcodeDataIterator(final File file) {
- bfr = new BarcodeFileReader(file);
- }
-
- public void close() {
- bfr.close();
- }
-
- public boolean hasNext() {
- return bfr.hasNext();
- }
-
- public BarcodeData next() {
- return new BarcodeData() {
- public String getBarcode() {
- return bfr.next();
- }
- };
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/BclData.java b/src/java/net/sf/picard/illumina/parser/BclData.java
deleted file mode 100644
index 753dce0..0000000
--- a/src/java/net/sf/picard/illumina/parser/BclData.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-/** A class that implements the IlluminaData interfaces provided by this parser
- * One BclData object is returned to IlluminaDataProvider per cluster and each
- * first level array in bases and qualities represents a single read in that
- * cluster */
-public class BclData implements BaseData, QualityData {
- public final byte [][] bases;
- public final byte [][] qualities;
-
- public BclData(final int[] outputLengths) {
- bases = new byte[outputLengths.length][];
- qualities = new byte[outputLengths.length][];
-
- for(int i = 0; i < outputLengths.length; i++) {
- bases[i] = new byte[outputLengths[i]];
- qualities[i] = new byte[outputLengths[i]];
- }
- }
-
- @Override
- public byte[][] getBases() {
- return bases;
- }
-
- @Override
- public byte[][] getQualities() {
- return qualities;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/BclParser.java b/src/java/net/sf/picard/illumina/parser/BclParser.java
deleted file mode 100644
index 4c9941e..0000000
--- a/src/java/net/sf/picard/illumina/parser/BclParser.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.illumina.parser.readers.BclReader;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import static net.sf.samtools.util.CollectionUtil.makeSet;
-
-/**
- * BclParser parses a number of BclFiles equal to the total of all the values in outputLengths and returns a BclData object
- * segmented based on these lengths. The only client of this class should be IlluminaDataProvider and an test classes. See BclReader for
- * more information on BclFiles. BclParser provides support for reading BaseCalls and QualityScores.
- */
-class BclParser extends PerTileCycleParser<BclData> {
- private static final int EAMSS_M2_GE_THRESHOLD = 30;
- private static final int EAMSS_S1_LT_THRESHOLD = 15; //was 15
- public static final byte MASKING_QUALITY = (byte) 0x02;
-
- private static final Set<IlluminaDataType> SUPPORTED_TYPES = Collections.unmodifiableSet(makeSet(IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores));
-
- protected final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
- private final boolean applyEamssFilter;
-
- public BclParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles, final OutputMapping outputMapping, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy) {
- this(directory, lane, tilesToCycleFiles, outputMapping, true, bclQualityEvaluationStrategy);
- this.initialize();
- }
-
- public BclParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles, final OutputMapping outputMapping, final boolean applyEamssFilter, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy) {
- super(directory, lane, tilesToCycleFiles, outputMapping);
- this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
- this.applyEamssFilter = applyEamssFilter;
- this.initialize();
- }
-
- /**
- * Create a Bcl parser for an individual cycle and wrap it with the CycleFilesParser interface which populates
- * the correct cycle in BclData.
- *
- * @param files The files to parse.
- * @return A CycleFilesParser that populates a BclData object with data for a single cycle
- */
- @Override
- protected CycleFilesParser<BclData> makeCycleFileParser(final List<File> files) {
- return new BclDataCycleFileParser(files);
- }
-
- @Override
- public void initialize() {
- seekToTile(currentTile);
- }
-
- @Override
- public Set<IlluminaDataType> supportedTypes() {
- return SUPPORTED_TYPES;
- }
-
- @Override
- public BclData next() {
- final BclData bclData = super.next();
-
- final byte[][] bases = bclData.getBases();
- final byte[][] qualities = bclData.getQualities();
-
- //first run EAMSS
- if (this.applyEamssFilter) {
- for (int i = 0; i < bases.length; i++) {
- runEamssForReadInPlace(bases[i], qualities[i]);
- }
- }
-
- return bclData;
- }
-
- /**
- * EAMSS is an Illumina Developed Algorithm for detecting reads whose quality has deteriorated towards
- * their end and revising the quality to the masking quality (2) if this is the case. This algorithm
- * works as follows (with one exception):
- * <p/>
- * Start at the end (high indices, at the right below) of the read and calculate an EAMSS tally at each
- * location as follow:
- * if(quality[i] < 15) tally += 1
- * if(quality[i] >= 15 and < 30) tally = tally
- * if(quality[i] >= 30) tally -= 2
- * <p/>
- * <p/>
- * For each location, keep track of this tally (e.g.)
- * Read Starts at <- this end
- * Cycle: 1 2 3 4 5 6 7 8 9
- * Bases: A C T G G G T C A
- * Qualities: 32 32 16 15 8 10 32 2 2
- * Cycle Score: -2 -2 0 0 1 1 -2 1 1 //The EAMSS Score determined for this cycle alone
- * EAMSS TALLY: 0 0 2 2 2 1 0 2 1
- * X - Earliest instance of Max-Score
- * <p/>
- * You must keep track of the maximum EAMSS tally (in this case 2) and the earliest(lowest) cycle at which
- * it occurs. If and only if, the max EAMSS tally >= 1 then from there until the end(highest cycle) of the
- * read reassign these qualities as 2 (the masking quality). The output qualities would therefore be
- * transformed from:
- * <p/>
- * Original Qualities: 32 32 16 15 8 10 32 2 2 to
- * Final Qualities: 32 32 2 2 2 2 2 2 2
- * X - Earliest instance of max-tally/end of masking
- * <p/>
- * IMPORTANT:
- * The one exception is: If the max EAMSS Tally is preceded by a long string of G basecalls (10 or more, with a single basecall exception per10 bases)
- * then the masking continues to the beginning of that string of G's. E.g.:
- * <p/>
- * Cycle: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
- * Bases: C T A C A G A G G G G G G G G C A T
- * Qualities: 30 22 26 27 28 30 7 34 20 19 38 15 32 32 10 4 2 5
- * Cycle Score: -2 0 0 0 0 -2 1 -2 0 0 -2 0 -2 -2 1 1 1 1
- * EAMSS TALLY: -2 -5 -5 -5 -5 -5 -3 -4 -2 -2 -2 0 0 2 4 3 2 1
- * X- Earliest instance of Max-Tally
- * <p/>
- * Resulting Transformation:
- * Bases: C T A C A G A G G G G G G G G C A T
- * Original Qualities: 30 22 26 27 28 30 7 34 20 19 38 15 32 32 10 4 2 5
- * Final Qualities: 30 22 26 27 28 2 2 2 2 2 2 2 2 2 2 2 2 2
- * X- Earliest instance of Max-Tally
- * X - Start of EAMSS masking due to G-Run
- * <p/>
- * To further clarify the exception rule here are a few examples:
- * A C G A C G G G G G G G G G G G G G G G G G G G G A C T
- * X - Earliest instance of Max-Tally
- * X - Start of EAMSS masking (with a two base call jump because we have 20 bases in the run already)
- * <p/>
- * T T G G A G G G G G G G G G G G G G G G G G G A G A C T
- * X - Earliest instance of Max-Tally
- * X - We can skip this A as well as the earlier A because we have 20 or more bases in the run already
- * X - Start of EAMSS masking (with a two base call jump because we have 20 bases in the run)
- * <p/>
- * T T G G G A A G G G G G G G G G G G G G G G G G G T T A T
- * X - Earliest instance of Max-Tally
- * X X - WE can skip these bases because the first A counts as the first skip and as far as the length of the string of G's is
- * concerned, these are both counted like G's
- * X - This A is the 20th base in the string of G's and therefore can be skipped
- * X - Note that the A's previous to the G's are only included because there are G's further on that are within the number
- * of allowable exceptions away (i.e. 2 in this instance), if there were NO G's after the A's you CANNOT count the A's
- * as part of the G strings (even if no exceptions have previously occured) In other words, the end of the string of G's
- * MUST end in a G not an "exception"
- * <p/>
- * However, if the max-tally occurs to the right of the run of Gs then this is still part of the string of G's but does count towards
- * the number of exceptions allowable
- * (e.g.)
- * T T G G G G G G G G G G A C G
- * X - Earliest instance of Max-tally
- * The first index CAN be considered as an exception, the above would be masked to
- * the following point:
- * T T G G G G G G G G G G A C G
- * X - End of EAMSS masking due to G-Run
- * <p/>
- * To sum up the final points, a string of G's CAN START with an exception but CANNOT END in an exception.
- *
- * @param bases Bases for a single read in the cluster ( not the entire cluster )
- * @param qualities Qualities for a single read in the cluster ( not the entire cluster )
- */
- protected static void runEamssForReadInPlace(final byte[] bases, final byte[] qualities) {
- int eamssTally = 0;
- int maxTally = Integer.MIN_VALUE;
- int indexOfMax = -1;
-
- for (int i = bases.length - 1; i >= 0; i--) {
- final int quality = (0xff & qualities[i]);
-
- if (quality >= EAMSS_M2_GE_THRESHOLD) {
- eamssTally -= 2;
- } else if (quality < EAMSS_S1_LT_THRESHOLD) {
- eamssTally += 1;
- }
-
- if (eamssTally >= maxTally) {
- indexOfMax = i;
- maxTally = eamssTally;
- }
- }
-
- if (maxTally >= 1) {
- int numGs = 0;
- int exceptions = 0;
-
- for (int i = indexOfMax; i >= 0; i--) {
- if (bases[i] == 'G') {
- ++numGs;
- } else {
- final Integer skip = skipBy(i, numGs, exceptions, bases);
- if (skip != null) {
- exceptions += skip;
- numGs += skip;
- i -= (skip - 1);
- } else {
- break;
- }
- }
- }
-
- if (numGs >= 10) {
- indexOfMax = (indexOfMax + 1) - numGs;
- }
-
- for (int i = indexOfMax; i < qualities.length; i++) {
- qualities[i] = MASKING_QUALITY;
- }
- }
- }
-
- /**
- * Determine whether or not the base at index is part of a skippable section in a run of G's, if so
- * return the number of bases that the section is composed of.
- *
- * @param index Current index, which should be the index of a non-'G' base
- * @param numGs The number of bases in the current string of G's for this read
- * @param prevExceptions The number of exceptions previously detected in this string by this method
- * @param bases The bases of this read
- * @return If we have not reached our exception limit (1/every 10bases) and a G is within exceptionLimit(numGs/10)
- * indices before the current index then return index - (index of next g), else return null Null indicates this is
- * NOT a skippable region, if we run into index 0 without finding a g then NULL is also returned
- */
- private static Integer skipBy(final int index, final int numGs, final int prevExceptions, final byte[] bases) {
- Integer skip = null;
- for (int backup = 1; backup <= index; backup++) {
- final int exceptionLimit = Math.max((numGs + backup) / 10, 1);
- if (prevExceptions + backup > exceptionLimit) {
- break;
- }
- if (bases[index - backup] == 'G') {
- skip = backup;
- break;
- }
- }
-
- return skip;
- }
-
- private class BclDataCycleFileParser implements CycleFilesParser<BclData> {
- final CloseableIterator<BclData> reader;
-
- public BclDataCycleFileParser(final List<File> files) {
- reader = new BclReader(files, outputMapping.getOutputReadLengths(),
- bclQualityEvaluationStrategy, false);
- }
-
- @Override
- public void close() {
- reader.close();
- }
-
- @Override
- public BclData next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- return reader.next();
- }
-
- @Override
- public boolean hasNext() {
- try {
- return reader.hasNext();
- } catch (final NullPointerException npe) {
- return false;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/ClusterData.java b/src/java/net/sf/picard/illumina/parser/ClusterData.java
deleted file mode 100644
index e1865f2..0000000
--- a/src/java/net/sf/picard/illumina/parser/ClusterData.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-
-/**
- * Store the information from Illumina files for a single cluster with one or more reads.
- *
- * @author jburke at broadinstitute.org
- */
-public class ClusterData {
-
- private int lane = -1;
- private int tile = -1;
- private int x = -1;
- private int y = -1;
- private final ReadData [] reads;
- private Boolean pf;
- private String matchedBarcode;
-
- /** Used for testing, reads is set directly with no copying to the input array */
- public ClusterData(final ReadData ... reads) {
- this.reads = reads;
- }
-
- /** Creates a ClusterData with one read for each type provided */
- public ClusterData(final ReadType [] readTypes) {
- reads = new ReadData[readTypes.length];
- for(int i = 0; i < readTypes.length; i++) {
- reads[i] = new ReadData(readTypes[i]);
- }
- }
-
- public String toString() {
- return "ClusterData(lane: " + lane + "; tile: " + tile + "; x: " + x + "; y: " + y + "; pf: " + pf +
- "; matchedBarcode: " + matchedBarcode + ")";
- }
-
- public int getTile() {
- return tile;
- }
-
- public void setTile(final int tile) {
- this.tile = tile;
- }
-
- public boolean tileIsSet() {
- return tile != -1;
- }
-
- public ReadData getRead(final int index) {
- return reads[index];
- }
-
- public int getNumReads() {
- return reads.length;
- }
-
- /**
- * Either set this value if not already set, or if already set, throw an exception if new value != current value.
- */
- public void setOrCheckTile(final int tile) {
- if (tileIsSet()) {
- if (this.tile != tile) {
- throw new PicardException("Tile number mismatch for " + this + " : " + this.tile + " != " + tile);
- }
- } else {
- this.tile = tile;
- }
- }
-
- public int getLane() {
- return lane;
- }
-
- public void setLane(final int lane) {
- this.lane = lane;
- }
-
- public boolean laneIsSet() {
- return lane != -1;
- }
-
- /**
- * Either set this value if not already set, or if already set, throw an exception if new value != current value.
- */
- public void setOrCheckLane(final int lane) {
- if (laneIsSet()) {
- if (this.lane != lane) {
- throw new PicardException("Lane number mismatch for " + this + " : " + this.lane + " != " + lane);
- }
- } else {
- this.lane = lane;
- }
- }
-
- public int getX() {
- return x;
- }
-
- public void setX(final int x) {
- this.x = x;
- }
-
- public boolean xIsSet() {
- return x != -1;
- }
-
- /**
- * Either set this value if not already set, or if already set, throw an exception if new value != current value.
- */
- public void setOrCheckX(final int x) {
- if (xIsSet()) {
- if (this.x != x) {
- throw new PicardException("X value mismatch for " + this + " : " + this.x + " != " + x);
- }
- } else {
- this.x = x;
- }
- }
-
- public int getY() {
- return y;
- }
-
- public void setY(final int y) {
- this.y = y;
- }
-
- public boolean yIsSet() {
- return y != -1;
- }
-
- /**
- * Either set this value if not already set, or if already set, throw an exception if new value != current value.
- */
- public void setOrCheckY(final int y) {
- if (yIsSet()) {
- if (this.y != y) {
- throw new PicardException("Y value mismatch for " + this + " : " + this.y + " != " + y);
- }
- } else {
- this.y = y;
- }
- }
-
- public Boolean isPf() {
- return pf;
- }
-
- public void setPf(final boolean pf) {
- this.pf = pf;
- }
-
- /**
- * Either set this value if not already set, or if already set, throw an exception if new value != current value.
- */
- public void setOrCheckPf(final boolean pf) {
- if (this.pf == null) {
- this.pf = pf;
- } else if (this.pf != pf) {
- throw new PicardException("PF value mismatch for " + this + " : ");
- }
- }
-
- /**
- * @return The barcode matched (not the actual sequence from the read, which may not perfectly match
- * the barcode).
- */
- public String getMatchedBarcode() {
- return matchedBarcode;
- }
-
- public void setMatchedBarcode(final String matchedBarcode) {
- this.matchedBarcode = matchedBarcode;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/ClusterIntensityFileReader.java b/src/java/net/sf/picard/illumina/parser/ClusterIntensityFileReader.java
deleted file mode 100644
index 2f31cc3..0000000
--- a/src/java/net/sf/picard/illumina/parser/ClusterIntensityFileReader.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.util.UnsignedTypeUtil;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.*;
-import java.nio.ByteBuffer;
-import java.nio.MappedByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.FileChannel;
-import java.util.Arrays;
-
-/**
- * Read a .cnf (binary noise) or .cif (binary intensity) file. A file in this format contains
- * 1 or more cycles of data for a set of clusters, with 4 values per cycle, one for each channel.
- * A file can store its values in either a byte or a short per value, but the API treats them all as shorts.
- * This class does not distinguish btw CIF and CNF files.
- *
- * @author jburke at broadinstitute.org
- */
-class ClusterIntensityFileReader {
-
- private static final byte[] IDENTIFIER = StringUtil.stringToBytes("CIF");
- private static final byte FILE_VERSION = 1;
- private static final int HEADER_SIZE = 13;
- private static final int NUM_CHANNELS = IntensityChannel.values().length;
-
- // Just for error reporting
- private final File file;
-
- /**
- * The entire file is mmapped
- */
- private final MappedByteBuffer buf;
- private final ClusterIntensityFileHeader header;
-
- // Precomputed for speed, I hope.
- private final int cycleSize;
- private final int channelSize;
-
- public static class ClusterIntensityFileHeader {
- public final int elementSize;
- public final int firstCycle;
- public final int numCycles;
- public final int numClusters;
-
- public ClusterIntensityFileHeader(final byte[] headerBytes, final File file) {
- if(headerBytes.length < HEADER_SIZE) {
- throw new PicardException("Bytes past to header constructor are too short excpected(" + HEADER_SIZE + ") received (" + headerBytes.length);
- }
-
- ByteBuffer buf = ByteBuffer.allocate(headerBytes.length); //for doing some byte conversions
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.put(headerBytes);
- buf.position(0);
-
- final byte[] identifierBuf = new byte[IDENTIFIER.length];
- buf.get(identifierBuf);
- if (!Arrays.equals(identifierBuf, IDENTIFIER)) {
- throw new PicardException("Cluster intensity file " + file + " contains unexpected header: " +
- StringUtil.bytesToString(identifierBuf));
- }
- final byte fileVersion = buf.get();
- if (fileVersion != FILE_VERSION) {
- throw new PicardException("Cluster intensity file " + file + " contains unexpected version: " + fileVersion);
- }
- elementSize = buf.get();
- if (elementSize < 1 || elementSize > 2) {
- throw new PicardException("Cluster intensity file " + file + " contains unexpected element size: " + elementSize);
- }
- // convert these to unsigned
- firstCycle = UnsignedTypeUtil.uShortToInt(buf.getShort());
- numCycles = UnsignedTypeUtil.uShortToInt(buf.getShort());
- if (numCycles == 0) {
- throw new PicardException("Cluster intensity file " + file + " has zero cycles.");
- }
- numClusters = buf.getInt();
- if (numClusters < 0) {
- // It is possible for there to be no clusters in a tile.
- throw new PicardException("Cluster intensity file " + file + " has negative number of clusters: " +numClusters);
- }
- }
- }
-
- /**
- * Prepare to parse a CIF or CNF file.
- * @param file The file to be parsed.
- */
- public ClusterIntensityFileReader(final File file) {
- try {
- this.file = file;
- final FileInputStream is = new FileInputStream(this.file);
- final FileChannel channel = is.getChannel();
- final long fileSize = channel.size();
- buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- CloserUtil.close(channel);
- CloserUtil.close(is);
- final byte [] headerBytes = new byte[HEADER_SIZE];
- buf.get(headerBytes);
- this.header = new ClusterIntensityFileHeader(headerBytes, this.file);
- } catch (IOException e) {
- throw new PicardException("IOException opening cluster intensity file " + file, e);
- }
- cycleSize = NUM_CHANNELS * header.numClusters * header.elementSize;
- channelSize = header.numClusters * header.elementSize;
- }
-
- /**
- * Get the value for the given args. Value is returned as a signed short regardless of whether storage is
- * in bytes or shorts.
- * @param cluster 0-based cluster number.
- * @param channel Which channel is desired.
- * @param cycle Absolute cycle number. E.g. if the first cycle in the file is N, then the first value that can
- * be fetched is cycle=N
- * @return Intensity or noise (depending on whether this is a CIF or CNF file).
- */
- public short getValue(final int cluster, final IntensityChannel channel, final int cycle) {
- if (cycle < header.firstCycle || cycle >= header.firstCycle + header.numCycles) {
- throw new IllegalArgumentException("Requested cycle (" + cycle + ") number out of range. First cycle=" +
- header.firstCycle + "; numCycles=" + header.numCycles);
- }
- if (cluster < 0 || cluster >= header.numClusters) {
- throw new IllegalArgumentException("Requested cluster (" + cluster + ") number out of range. numClustersInTile=" + header.numClusters);
- }
- final int relativeCycle = cycle - header.firstCycle;
- final int position = HEADER_SIZE + relativeCycle * cycleSize + channel.ordinal() * channelSize + cluster * header.elementSize;
- buf.position(position);
- if (header.elementSize == 1) {
- return buf.get();
- } else {
- return buf.getShort();
- }
- }
-
- public File getFile() {
- return file;
- }
-
- /**
- * @return The first (one-based) cycle stored in this file.
- */
- public int getFirstCycle() {
- return header.firstCycle;
- }
-
- /**
- * @return Number of clusters stored in this file.
- */
- public int getNumClusters() {
- return header.numClusters;
- }
-
- /**
- * @return Number of cycles stored in this file.
- */
- public int getNumCycles() {
- return header.numCycles;
- }
-
- /**
- * @return the size of one intensity value for one channel in this file.
- */
- public int getElementSize() {
- return header.elementSize;
- }
-
- public static ClusterIntensityFileHeader readHeaders(final File intensityFile) {
- FileInputStream reader = null;
- byte [] headerBytes = new byte[HEADER_SIZE];
- int bytesRead = 0;
- try {
- reader = new FileInputStream(intensityFile);
- bytesRead = reader.read(headerBytes);
- } catch(FileNotFoundException fnfExc) {
- throw new PicardException("Error opening intensity file (" + intensityFile.getAbsolutePath() +")", fnfExc);
- } catch(IOException ioExc) {
- throw new PicardException("Error reading values from header for intensity file (" + intensityFile.getAbsolutePath() + ")", ioExc);
- } finally {
- CloserUtil.close(reader);
- }
-
- if(bytesRead != HEADER_SIZE)
- throw new PicardException("Error reading intensity file header, too few bytes read, expected( " + HEADER_SIZE + ") read(" + bytesRead + ")");
-
- return new ClusterIntensityFileHeader(headerBytes, intensityFile);
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/CycleIlluminaFileMap.java b/src/java/net/sf/picard/illumina/parser/CycleIlluminaFileMap.java
deleted file mode 100644
index 8fa4c58..0000000
--- a/src/java/net/sf/picard/illumina/parser/CycleIlluminaFileMap.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeMap;
-
-/**
- * For per cycle files. Maps a Cycle -> Tile -> List<File>
- *
- * @author jburke at broadinstitute.org
- */
-class CycleIlluminaFileMap extends TreeMap<Integer, IlluminaFileMap> {
- /**
- * Return a CycleIlluminaFileMap with only the tiles listed and all of the cycles provided.
- * Important NOTE: this DOES NOT eliminate cycles from the cycles parameter passed in that are missing in the cyclesFileIterator of any given lane in the CycleIlluminaFileMap
- */
- public CycleIlluminaFileMap keep(final List<Integer> tilesToKeep, final Set<Integer> cycles) {
- final CycleIlluminaFileMap ciMap = new CycleIlluminaFileMap();
-
- if (cycles != null) {
- for (final int cycle : cycles) {
- final IlluminaFileMap template = this.get(cycle);
- if (template != null) {
- ciMap.put(cycle, template.keep(tilesToKeep));
- }
- }
- }
-
- return ciMap;
- }
-
- /**
- * Assert that this map has an iterator for all of the expectedTiles and each iterator has expectedCycles number
- * of files. Also, assert that each cycle file for a given tile is the same size
- *
- * @param expectedTiles A list of tiles that should be in this map
- * @param expectedCycles The total number of files(cycles) that should be in each CycledFilesIterator
- */
- public void assertValid(final List<Integer> expectedTiles, final int[] expectedCycles) {
- if (size() != expectedCycles.length) {
- throw new PicardException("Expected CycledIlluminaFileMap to contain " + expectedCycles.length + " cycles but only " + size() + " were found!");
- }
- if (this.firstEntry().getValue().size() != expectedTiles.size()) {
- throw new PicardException("Expected CycledIlluminaFileMap to contain " + expectedTiles.size()
- + " tiles but only " + this.firstEntry().getValue().size() + " were found!");
- }
- }
-
-}
diff --git a/src/java/net/sf/picard/illumina/parser/FilterParser.java b/src/java/net/sf/picard/illumina/parser/FilterParser.java
deleted file mode 100644
index a49816f..0000000
--- a/src/java/net/sf/picard/illumina/parser/FilterParser.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.illumina.parser.readers.FilterFileReader;
-import net.sf.samtools.util.CloseableIterator;
-
-import static net.sf.samtools.util.CollectionUtil.*;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * Sequentially parses filter files for the given tiles. One tile is processed at a time. IlluminaDataProvider should
- * be the ONLY client class for this class except for test classes. For more information on the filterFile format
- * and reading it, see FilterFileReader.
- */
-class FilterParser extends PerTileParser<PfData> {
- private static Set<IlluminaDataType> supportedTypes = Collections.unmodifiableSet(makeSet(IlluminaDataType.PF));
-
- public FilterParser(final IlluminaFileMap tilesToFiles){
- super(tilesToFiles);
- }
-
- public FilterParser(final IlluminaFileMap tilesToFiles, final int startingTile){
- super(tilesToFiles, startingTile);
- }
-
- /** Wrap a filterFile reader in a closeable iterator and return it*/
- @Override
- protected CloseableIterator<PfData> makeTileIterator(final File iterator) {
- return new CloseableIterator<PfData>() {
- private FilterFileReader reader = new FilterFileReader(iterator);
-
- public void close() {
- reader = null;
- }
-
- public boolean hasNext() {
- return reader.hasNext();
- }
-
- public PfData next() {
- final boolean nextValue = reader.next();
- return new PfData() {
- public boolean isPf() {
- return nextValue;
- }
- };
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- };
- }
-
- public Set<IlluminaDataType> supportedTypes() {
- return supportedTypes;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/FourChannelIntensityData.java b/src/java/net/sf/picard/illumina/parser/FourChannelIntensityData.java
deleted file mode 100644
index b89d80e..0000000
--- a/src/java/net/sf/picard/illumina/parser/FourChannelIntensityData.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-
-import java.util.Arrays;
-
-/**
- * Holds a 4 short values for each cycle of a read. This is used, to store raw intensities,
- * processed intensities, or noise. Note that for Illumina 1.1 and 1.3, these are floating point values,
- * but are truncated to shorts to store here.
- *
- * Indices into the channel arrays are zero-based, i.e. the first cycle is 0.
- *
- * @author jburke at broadinstitute.org
- */
-public class FourChannelIntensityData {
- /**
- * Major index: channel number; minor index: cycle number (zero based)
- */
- private short [] a;
- private short [] c;
- private short [] g;
- private short [] t;
-
- public FourChannelIntensityData(final int numberOfCycles) {
- a = new short[numberOfCycles];
- c = new short[numberOfCycles];
- g = new short[numberOfCycles];
- t = new short[numberOfCycles];
- }
-
- public short[] getChannel(final IntensityChannel channel) {
- switch(channel) {
- case A: return a;
- case C: return c;
- case G: return g;
- case T: return t;
- }
-
- throw new PicardException("Unexpected intensity channel " + channel);
- }
-
- public short[] getA() {
- return a;
- }
-
- public short[] getC() {
- return c;
- }
-
- public short[] getG() {
- return g;
- }
-
- public short[] getT() {
- return t;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final FourChannelIntensityData that = (FourChannelIntensityData)o;
- return Arrays.equals(this.a, that.a) &&
- Arrays.equals(this.c, that.c) &&
- Arrays.equals(this.g, that.g) &&
- Arrays.equals(this.t, that.t);
- }
-
- @Override
- public int hashCode() {
- int ret = 0;
- ret = ret * 31 + Arrays.hashCode(a);
- ret += ret * 31 + Arrays.hashCode(c);
- ret += ret * 31 + Arrays.hashCode(g);
- ret += ret * 31 + Arrays.hashCode(t);
- return ret;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaData.java b/src/java/net/sf/picard/illumina/parser/IlluminaData.java
deleted file mode 100644
index f3be07c..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaData.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-/**
- * There is one IlluminaData sub-interface for each IlluminaDataType enum value.
- * IlluminaParsers must return objects implementing at least one of the interfaces below.
- * IlluminaDataProvider will take IlluminaData objects created by IlluminaParsers and cast them to the types they
- * implement and these objects will then be used to populate the ClusterData object.
- *
- * @author jburke at broadinstitute.org
- */
-interface IlluminaData {
-}
-
-// Note: PositionalData was spun out this round but since every parser has means of retrieving lane/tile from the
-// file name, we are going to move lane/tile to be queryable from parsers in future revisions and therefore if you
-// want lane/tile info you will NOT have to parse one of the Positional Data formats (pos, locs, clocs, qseqs)
-interface PositionalData extends IlluminaData {
- public int getXCoordinate();
- public int getYCoordinate();
-}
-
-interface BaseData extends IlluminaData {
- public byte [][] getBases();
-}
-
-interface QualityData extends IlluminaData {
- public byte [][] getQualities();
-}
-
-interface NoiseData extends IlluminaData {
- public FourChannelIntensityData [] getNoise();
-}
-
-interface RawIntensityData extends IlluminaData{
- public FourChannelIntensityData [] getRawIntensities();
-}
-
-interface PfData extends IlluminaData {
- public boolean isPf();
-}
-
-interface BarcodeData extends IlluminaData {
- public String getBarcode();
-}
-
-
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaDataProvider.java b/src/java/net/sf/picard/illumina/parser/IlluminaDataProvider.java
deleted file mode 100644
index 837cfcc..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaDataProvider.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-/**
- * Parse various formats and versions of Illumina Basecall files, and use them the to populate
- * ClusterData objects. Clients of this code should use IlluminaDataProviderFactory to create an IlluminaDataProvider.
- * IlluminaDataProvider is immutable after construction.
- *
- * @author jburke at broadinstitute.org
- */
-public class IlluminaDataProvider implements Iterator<ClusterData>, Iterable<ClusterData> {
-
- /** contains QSeqs, bcls, or other Illumina file types that will be parsed by this class */
- private final File basecallDirectory; //These two are for error reporting only
- private final int lane;
-
- /** A list of parsers (already initialized) that should output data in a format consistent with readStructure */
- private final IlluminaParser[] parsers;
-
- /**
- * for each parser in this.parsers there is an array of IlluminaDataTypes that specifies what datatypes that parser is providing in
- * this particular run. A parser may be able to provide data types which may not be listed here because client code may not
- * have specified these data types
- */
- private final IlluminaDataType[][] dataTypes;
-
- /** Calculated once, outputReadTypes describes the type of read data for each ReadData that will be found in output ClusterData objects */
- private final ReadType[] outputReadTypes;
-
- /** Number of reads in each ClusterData */
- private final int numReads;
-
- /**
- * Create an IlluminaDataProvider given a map of parsersToDataTypes for particular file formats. Compute once the miscellaneous data for the
- * run that will be passed to each ClusterData.
- *
- * @param basecallDirectory For error reporting only.
- * @param lane For error reporting only.
- */
- IlluminaDataProvider(final OutputMapping outputMapping,
- final Map<IlluminaParser, Set<IlluminaDataType>> parsersToDataTypes,
- final File basecallDirectory, final int lane) {
- this.basecallDirectory = basecallDirectory;
- this.lane = lane;
- numReads = outputMapping.numOutputReads();
-
- final int numParsers = parsersToDataTypes.size();
- if (numParsers == 0) {
- throw new PicardException("There were 0 parsers passed to IlluminaDataProvider!");
- }
-
- int i = 0;
- parsers = new IlluminaParser[numParsers];
- dataTypes = new IlluminaDataType[numParsers][];
- for (final Map.Entry<IlluminaParser, Set<IlluminaDataType>> pToD : parsersToDataTypes.entrySet()) {
- parsers[i] = pToD.getKey();
- final Set<IlluminaDataType> dts = pToD.getValue();
- dataTypes[i] = new IlluminaDataType[dts.size()];
- dts.toArray(dataTypes[i++]);
- }
-
- this.outputReadTypes = new ReadType[numReads];
- i = 0;
- for (final ReadDescriptor rd : outputMapping.getOutputDescriptors()) {
- outputReadTypes[i++] = rd.type;
- }
- }
-
- /**
- * @return True if we have more clusters to read
- */
- public boolean hasNext() {
- final boolean more = parsers[0].hasNext();
- if (!more) {
- for (int i = 1; i < parsers.length; i++) {
- if (parsers[i].hasNext()) {
- throw new PicardException("Unequal length Illumina files in " + basecallDirectory + ", lane " + lane + ". Failing parser: " + parsers[i].getClass().getName());
- }
- }
- }
-
- return more;
- }
-
- /**
- * @return Current cluster data populated with only the data that matches one of the data types in dataTypes.
- */
- public ClusterData next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
-
- final ClusterData cluster = new ClusterData(outputReadTypes);
- cluster.setLane(lane);
-
- //IMPORTANT NOTE: This assignment to tile MUST happen BEFORE the loop below because getTileOfNextCluster
- //returns the tile for the next cluster and if we call this after the loop then whenever we pass a tile
- //boundary the last cluster in the previous tile will have the wrong tile number
- cluster.setTile(parsers[0].getTileOfNextCluster());
-
- for (int i = 0; i < parsers.length; i++) {
- final IlluminaData ilData = parsers[i].next();
- for (final IlluminaDataType ilDataType : dataTypes[i]) {
- switch (ilDataType) {
- case Position:
- addData(cluster, (PositionalData) ilData);
- break;
-
- case PF:
- addData(cluster, (PfData) ilData);
- break;
-
- case Barcodes:
- addData(cluster, (BarcodeData) ilData);
- break;
-
- case BaseCalls:
- addReadData(cluster, numReads, (BaseData) ilData);
- break;
-
- case QualityScores:
- addReadData(cluster, numReads, (QualityData) ilData);
- break;
-
- default:
- throw new PicardException("Unknown data type " + ilDataType + " requested by IlluminaDataProviderFactory");
- }
- }
- }
-
- return cluster;
- }
-
- /*
- * Methods for that transfer data from the IlluminaData objects to the current cluster
- */
- private void addData(final ClusterData clusterData, final PositionalData posData) {
- clusterData.setX(posData.getXCoordinate());
- clusterData.setY(posData.getYCoordinate());
- }
-
- private void addData(final ClusterData clusterData, final PfData pfData) {
- clusterData.setPf(pfData.isPf());
- }
-
- private void addData(final ClusterData clusterData, final BarcodeData barcodeData) {
- clusterData.setMatchedBarcode(barcodeData.getBarcode());
- }
-
- private void addReadData(final ClusterData clusterData, final int numReads, final BaseData baseData) {
- final byte[][] bases = baseData.getBases();
- for (int i = 0; i < numReads; i++) {
- clusterData.getRead(i).setBases(bases[i]);
- }
- }
-
- private void addReadData(final ClusterData clusterData, final int numReads, final QualityData qualityData) {
- final byte[][] qualities = qualityData.getQualities();
- for (int i = 0; i < numReads; i++) {
- clusterData.getRead(i).setQualities(qualities[i]);
- }
- }
-
- private void addReadData(final ClusterData clusterData, final int numReads, final RawIntensityData rawIntensityData) {
- final FourChannelIntensityData[] fcids = rawIntensityData.getRawIntensities();
- for (int i = 0; i < numReads; i++) {
- clusterData.getRead(i).setRawIntensities(fcids[i]);
- }
- }
-
- private void addReadData(final ClusterData clusterData, final int numReads, final NoiseData noiseData) {
- final FourChannelIntensityData[] fcids = noiseData.getNoise();
- for (int i = 0; i < numReads; i++) {
- clusterData.getRead(i).setNoise(fcids[i]);
- }
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- /** Jump so that the next record returned will be from the specified tile. */
- public void seekToTile(final int oneBasedTileNumber) {
- for (final IlluminaParser parser : parsers) {
- parser.seekToTile(oneBasedTileNumber);
- }
- }
-
- @Override
- public Iterator<ClusterData> iterator() {
- return this;
- }
-
- public void close() {
- for (final IlluminaParser parser : parsers) {
- parser.close();
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaDataProviderFactory.java b/src/java/net/sf/picard/illumina/parser/IlluminaDataProviderFactory.java
deleted file mode 100644
index 10c2b22..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaDataProviderFactory.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.util.Log;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import static net.sf.samtools.util.CollectionUtil.makeList;
-import static net.sf.samtools.util.CollectionUtil.makeSet;
-
-/**
- * IlluminaDataProviderFactory accepts options for parsing Illumina data files for a lane and creates an
- * IlluminaDataProvider, an iterator over the ClusterData for that lane, which utilizes these options.
- * <p/>
- * <p/>
- * Note: Since we tend to use IlluminaDataProviderFactory in multithreaded environments (e.g. we call makeDataProvider
- * in a different thread per tile in IlluminaBasecallsToSam). I've made it essentially immutable. makeDataProvider/getTiles
- * are now idempotent (well as far as IlluminaDataProviderFactory is concerned, many file handles and other things are
- * opened when makeDataProvider is called). We may in the future want dataTypes to be provided to the
- * makeDataProvider factory methods so configuration is not done multiple times for the same basecallDirectory in
- * client code.
- *
- * @author jburke at broadinstitute.org
- */
-public class IlluminaDataProviderFactory {
- private static final Log log = Log.getInstance(IlluminaDataProviderFactory.class);
-
- /**
- * A map of data types to a list of file formats in the order in which we prefer those file types (E.g. we would rather parse Bcls before QSeqs, Locs files before Clocs files ...)
- * We try to prefer data types that will be the fastest to parse/smallest in memory
- * NOTE: In the code below, if Qseq is chosen to provide for ANY data type then it is used for ALL its data types (since we'll have to parse the entire line for each Qseq anyways)
- */
- private static final Map<IlluminaDataType, List<SupportedIlluminaFormat>> DATA_TYPE_TO_PREFERRED_FORMATS = new HashMap<IlluminaDataType, List<SupportedIlluminaFormat>>();
-
- static {
- /** For types found in Qseq, we prefer the NON-Qseq file formats first. However, if we end up using Qseqs then we use Qseqs for EVERY type it provides,
- * see determineFormats
- */
- DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.BaseCalls, makeList(
- SupportedIlluminaFormat.MultiTileBcl, SupportedIlluminaFormat.Bcl));
- DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.QualityScores, makeList(
- SupportedIlluminaFormat.MultiTileBcl, SupportedIlluminaFormat.Bcl));
- DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.PF, makeList(
- SupportedIlluminaFormat.MultiTileFilter, SupportedIlluminaFormat.Filter));
- DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.Position, makeList(
- SupportedIlluminaFormat.MultiTileLocs, SupportedIlluminaFormat.Locs, SupportedIlluminaFormat.Clocs,
- SupportedIlluminaFormat.Pos));
-
- DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.Barcodes, makeList(SupportedIlluminaFormat.Barcode));
- }
-
- // The following properties must be specified by caller.
- /** basecallDirectory holds QSeqs or bcls * */
- private final File basecallDirectory;
- private final int lane;
-
- /**
- * Whether or not to apply EAMSS filtering if parsing BCLs for the bases and quality scores.
- */
- private boolean applyEamssFiltering = true;
-
- /**
- * A Map of file formats to the dataTypes they will provide for this run.
- */
- protected final Map<SupportedIlluminaFormat, Set<IlluminaDataType>> formatToDataTypes;
-
- /** Basecall Directory/lane parameterized util for finding IlluminaFiles */
- private final IlluminaFileUtil fileUtil;
-
-
- private final List<Integer> availableTiles;
-
- private final OutputMapping outputMapping;
- private final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
-
- /**
- * Create factory with the specified options, one that favors using QSeqs over all other files
- *
- * @param basecallDirectory The baseCalls directory of a complete Illumina directory. Files are found by searching relative to this folder (some of them higher up in the directory tree).
- * @param lane Which lane to iterate over.
- * @param readStructure The read structure to which output clusters will conform. When not using QSeqs, EAMSS masking(see BclParser) is run on individual reads as found in the readStructure, if
- * the readStructure specified does not match the readStructure implied by the sequencer's output than the quality scores output may differ than what would be found
- * in a run's QSeq files
- * @param dataTypesArg Which data types to read
- */
- public IlluminaDataProviderFactory(final File basecallDirectory, final int lane, final ReadStructure readStructure,
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
- final IlluminaDataType... dataTypesArg) {
- this.basecallDirectory = basecallDirectory;
- this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
-
- this.lane = lane;
- /* The types of data that will be returned by any IlluminaDataProviders created by this factory.
-
- Note: In previous version, data of types not specified might be returned if a data type was specified
- for data residing in QSeqs (since QSeqs span multiple data types). This is no longer the case, you
- MUST specify all data types that should be returned.*/
- final Set<IlluminaDataType> dataTypes = Collections.unmodifiableSet(new HashSet<IlluminaDataType>(Arrays.asList(dataTypesArg)));
-
- if (dataTypes.isEmpty()) {
- throw new PicardException("No data types have been specified for basecall output " + basecallDirectory +
- ", lane " + lane);
- }
-
- this.fileUtil = new IlluminaFileUtil(basecallDirectory, lane);
-
- //find what request IlluminaDataTypes we have files for and select the most preferred file format available for that type
- formatToDataTypes = determineFormats(dataTypes, fileUtil);
-
- //find if we have any IlluminaDataType with NO available file formats and, if any exist, throw an exception
- final Set<IlluminaDataType> unmatchedDataTypes = findUnmatchedTypes(dataTypes, formatToDataTypes);
- if (unmatchedDataTypes.size() > 0) {
- throw new PicardException("Could not find a format with available files for the following data types: " + StringUtil.join(", ", new ArrayList<IlluminaDataType>(unmatchedDataTypes)));
- }
-
- log.debug("The following file formats will be used by IlluminaDataProvider: " + StringUtil.join("," + formatToDataTypes.keySet()));
-
- availableTiles = fileUtil.getActualTiles(new ArrayList<SupportedIlluminaFormat>(formatToDataTypes.keySet()));
- if (availableTiles.isEmpty()) {
- throw new PicardException("No available tiles were found, make sure that " + basecallDirectory.getAbsolutePath() + " has a lane " + lane);
- }
-
- outputMapping = new OutputMapping(readStructure);
- }
-
- /**
- * Sometimes (in the case of skipped reads) the logical read structure of the output cluster data is different from the input
- * readStructure
- *
- * @return The ReadStructure describing the output cluster data
- */
- public ReadStructure getOutputReadStructure() {
- return outputMapping.getOutputReadStructure();
- }
-
- /**
- * Return the list of tiles available for this flowcell and lane. These are in ascending numerical order.
- *
- * @return List of all tiles available for this flowcell and lane.
- */
- public List<Integer> getAvailableTiles() {
- return availableTiles;
- }
-
- /** Sets whether or not EAMSS filtering will be applied if parsing BCL files for bases and quality scores. */
- public void setApplyEamssFiltering(final boolean applyEamssFiltering) {
- this.applyEamssFiltering = applyEamssFiltering;
- }
-
- /**
- * Call this method to create a ClusterData iterator over all clusters for all tiles in ascending numeric order.
- *
- * @return An iterator for reading the Illumina basecall output for the lane specified in the ctor.
- */
- public IlluminaDataProvider makeDataProvider() {
- return makeDataProvider(null);
- }
-
- /**
- * Call this method to create a ClusterData iterator over the specified tiles.
- *
- * @return An iterator for reading the Illumina basecall output for the lane specified in the constructor.
- */
- public IlluminaDataProvider makeDataProvider(List<Integer> requestedTiles) {
- if (requestedTiles == null) {
- requestedTiles = availableTiles;
- } else {
- if (requestedTiles.size() == 0) {
- throw new PicardException("Zero length tile list supplied to makeDataProvider, you must specify at least 1 tile OR pass NULL to use all available tiles");
- }
- }
-
- final Map<IlluminaParser, Set<IlluminaDataType>> parsersToDataType = new HashMap<IlluminaParser, Set<IlluminaDataType>>();
- for (final Map.Entry<SupportedIlluminaFormat, Set<IlluminaDataType>> fmToDt : formatToDataTypes.entrySet()) {
- parsersToDataType.put(makeParser(fmToDt.getKey(), requestedTiles), fmToDt.getValue());
- }
-
- log.debug("The following parsers will be used by IlluminaDataProvider: " + StringUtil.join("," + parsersToDataType.keySet()));
-
- return new IlluminaDataProvider(outputMapping, parsersToDataType, basecallDirectory, lane);
- }
-
- /**
- * Given a set of formats to data types they provide, find any requested data types that do not have a format associated with them and return them
- *
- * @param requestedDataTypes Data types that need to be provided
- * @param formatToMatchedTypes A map of file formats to data types that will support them
- * @return The data types that go unsupported by the formats found in formatToMatchedTypes
- */
- public static Set<IlluminaDataType> findUnmatchedTypes(final Set<IlluminaDataType> requestedDataTypes, final Map<SupportedIlluminaFormat, Set<IlluminaDataType>> formatToMatchedTypes) {
- final Set<IlluminaDataType> copiedTypes = new HashSet<IlluminaDataType>(requestedDataTypes);
- for (final Set<IlluminaDataType> matchedTypes : formatToMatchedTypes.values()) {
- copiedTypes.removeAll(matchedTypes);
- }
-
- return copiedTypes;
- }
-
- /**
- * For all requestedDataTypes return a map of file format to set of provided data types that covers as many requestedDataTypes as possible and
- * chooses the most preferred available formats possible
- *
- * @param requestedDataTypes Data types to be provided
- * @param fileUtil A file util for the lane/directory we wish to provide data for
- * @return A Map<Supported file format, Set of data types file format provides>
- */
- public static Map<SupportedIlluminaFormat, Set<IlluminaDataType>> determineFormats(final Set<IlluminaDataType> requestedDataTypes, final IlluminaFileUtil fileUtil) {
- //For predictable ordering and uniqueness only, put the requestedDataTypes into a treeSet
- final SortedSet<IlluminaDataType> toSupport = new TreeSet<IlluminaDataType>(requestedDataTypes);
- final Map<SupportedIlluminaFormat, Set<IlluminaDataType>> fileTypeToDataTypes = new HashMap<SupportedIlluminaFormat, Set<IlluminaDataType>>();
- final Map<IlluminaDataType, SupportedIlluminaFormat> dataTypeToFormat = new HashMap<IlluminaDataType, SupportedIlluminaFormat>();
-
- for (final IlluminaDataType ts : toSupport) {
- final SupportedIlluminaFormat preferredFormat = findPreferredAvailableFormat(ts, fileUtil);
- if (preferredFormat != null) {
- dataTypeToFormat.put(ts, preferredFormat);
- }
- }
-
- for (final IlluminaDataType dt : toSupport) {
- final SupportedIlluminaFormat format = dataTypeToFormat.get(dt);
-
- if (format != null) {
- if (fileTypeToDataTypes.containsKey(format)) {
- fileTypeToDataTypes.get(format).add(dt);
- } else {
- fileTypeToDataTypes.put(dataTypeToFormat.get(dt), makeSet(dt));
- }
- }
- }
-
- return fileTypeToDataTypes;
- }
-
- /**
- * Given a data type find the most preferred file format that also has files available
- *
- * @param dt Type of desired data
- * @param fileUtil Util for the lane/directory in which we will find data
- * @return The file format that is "most preferred" (i.e. fastest to parse/smallest in memory)
- */
- private static SupportedIlluminaFormat findPreferredAvailableFormat(final IlluminaDataType dt, final IlluminaFileUtil fileUtil) {
- return findPreferredFormat(dt, fileUtil, true);
- }
-
- /**
- * Given a data type find the most preferred file format even if files are not available
- *
- * @param dt Type of desired data
- * @param fileUtil Util for the lane/directory in which we will find data
- * @return The file format that is "most preferred" (i.e. fastest to parse/smallest in memory)
- */
- public static SupportedIlluminaFormat findPreferredFormat(final IlluminaDataType dt, final IlluminaFileUtil fileUtil) {
- return findPreferredFormat(dt, fileUtil, false);
- }
-
- private static SupportedIlluminaFormat findPreferredFormat(final IlluminaDataType dt, final IlluminaFileUtil fileUtil,
- final boolean checkAvailable) {
- final List<SupportedIlluminaFormat> preferredFormats = DATA_TYPE_TO_PREFERRED_FORMATS.get(dt);
- SupportedIlluminaFormat format = null;
- for (int i = 0; i < preferredFormats.size() && format == null; i++) {
- if (checkAvailable && fileUtil.getUtil(preferredFormats.get(i)).filesAvailable()) {
- format = preferredFormats.get(i);
- } else if (!checkAvailable) {
- format = preferredFormats.get(i);
- }
- }
-
- return format;
- }
-
- /**
- * There are multiple parsers for the same IlluminaDataType (e.g. BCLParser and QSeqParser). Instantiate an instance of the preferred parser for
- * the given data type with the information available and return it.
- *
- * @param format The type of data we want to parse
- * @param requestedTiles The requestedTiles over which we will be parsing data
- * @return A parser that will parse dataType data over the given requestedTiles and cycles and output it in groupings of the sizes specified in outputLengths
- */
- private IlluminaParser makeParser(final SupportedIlluminaFormat format, final List<Integer> requestedTiles) {
- final IlluminaParser parser;
- switch (format) {
- case Barcode:
- parser = new BarcodeParser(((PerTileFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.Barcode)).getFiles(requestedTiles));
- break;
-
- case Bcl: {
- final CycleIlluminaFileMap bclFileMap = ((PerTilePerCycleFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.Bcl))
- .getFiles(requestedTiles, outputMapping.getOutputCycles());
- bclFileMap.assertValid(requestedTiles, outputMapping.getOutputCycles());
- parser = new BclParser(basecallDirectory, lane, bclFileMap, outputMapping, this.applyEamssFiltering, bclQualityEvaluationStrategy);
- break;
- }
-
- case Filter:
- final IlluminaFileMap filterFileMap = ((PerTileFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.Filter)).getFiles(requestedTiles);
- parser = new FilterParser(filterFileMap);
- break;
-
- case Locs:
- case Clocs:
- case Pos:
- final PerTileFileUtil fu = (PerTileFileUtil) fileUtil.getUtil(format);
- parser = new PosParser(fu.getFiles(requestedTiles), format);
- break;
-
- case MultiTileFilter:
- parser = ((MultiTileFilterFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.MultiTileFilter)).makeParser(requestedTiles);
- break;
-
- case MultiTileLocs:
- parser = ((MultiTileLocsFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.MultiTileLocs)).makeParser(requestedTiles);
- break;
-
- case MultiTileBcl: {
- final MultiTileBclFileUtil util = (MultiTileBclFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.MultiTileBcl);
- final CycleIlluminaFileMap bclFileMap = util.getFiles(requestedTiles, outputMapping.getOutputCycles());
- bclFileMap.assertValid(requestedTiles, outputMapping.getOutputCycles());
- parser = new MultiTileBclParser(basecallDirectory, lane, bclFileMap, outputMapping,
- this.applyEamssFiltering, bclQualityEvaluationStrategy, util.tileIndex);
- break;
- }
-
- default:
- throw new PicardException("Unrecognized data type(" + format + ") found by IlluminaDataProviderFactory!");
- }
-
- return parser;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaDataType.java b/src/java/net/sf/picard/illumina/parser/IlluminaDataType.java
deleted file mode 100644
index 558971b..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaDataType.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-/**
- * List of data types of interest when parsing Illumina data. Because different Illumina versions
- * splatter data of these types across different files, by specifying only the data types of interest,
- * the number of files read can be reduced.
- * @author jburke at broadinstitute.org
- */
-public enum IlluminaDataType {
- Position, BaseCalls, QualityScores, PF, Barcodes
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaFileMap.java b/src/java/net/sf/picard/illumina/parser/IlluminaFileMap.java
deleted file mode 100644
index c6550a6..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaFileMap.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * For "non-cycle" files (files that have multiple cycles per file). Maps a Tile -> File
- * @author jburke at broadinstitute.org
- */
-class IlluminaFileMap extends TreeMap<Integer, File> {
-
- /** Return a file map that includes only the tiles listed */
- public IlluminaFileMap keep(final List<Integer> tilesToKeep) {
- final IlluminaFileMap fileMap = new IlluminaFileMap();
- for(final Integer tile : tilesToKeep) {
- final File file = this.get(tile);
- if(file != null) {
- fileMap.put(tile, file);
- }
- }
- return fileMap;
- }
-
- /**
- * Return the List of Files in order starting at the given tile and containing all files with tile numbers greater than startingTile that
- * are within this map
- * @param startingTile The first File in the returned list will correspond to this tile
- * @return A List of files for all tiles >= startingTile that are contained in this FileMap
- */
- public List<File> getFilesStartingAt(final int startingTile) {
- return new ArrayList<File>(this.tailMap(startingTile).values());
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaFileNotFoundException.java b/src/java/net/sf/picard/illumina/parser/IlluminaFileNotFoundException.java
deleted file mode 100644
index 94bc75c..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaFileNotFoundException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-
-/**
- * @author jburke at broadinstitute.org
- */
-class IlluminaFileNotFoundException extends PicardException {
- public final File file;
- public IlluminaFileNotFoundException(final File file, final String message) {
- super(message);
- this.file = file;
- }
-
- public IlluminaFileNotFoundException(final File file, final String message, final Throwable throwable) {
- super(message, throwable);
- this.file = file;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaFileUtil.java b/src/java/net/sf/picard/illumina/parser/IlluminaFileUtil.java
deleted file mode 100644
index e1ff17f..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaFileUtil.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.fakers.BarcodeFileFaker;
-import net.sf.picard.illumina.parser.fakers.BclFileFaker;
-import net.sf.picard.illumina.parser.fakers.ClocsFileFaker;
-import net.sf.picard.illumina.parser.fakers.FilterFileFaker;
-import net.sf.picard.illumina.parser.fakers.LocsFileFaker;
-import net.sf.picard.illumina.parser.fakers.PosFileFaker;
-import net.sf.picard.illumina.parser.readers.TileMetricsOutReader;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-/**
- * General utils for dealing with IlluminaFiles as well as utils for specific, support formats.
- * This class contains utils that span across multiple Illumina files but it's primary intent
- * was to provide support for basic file types. Each supported file type can be accessed
- * via a factory method (make<filetype>Ft). When IlluminaFileUtil is created it is parameterized
- * by basecallDir and lane and all IlluminaFileTypes created by IlluminaFileUtil will also be
- * parameterized in this fashion.
- *
- * @author jburke at broadinstitute.org
- */
-public class IlluminaFileUtil {
- public static final Pattern CYCLE_SUBDIRECTORY_PATTERN = Pattern.compile("^C(\\d+)\\.1$");
-
- public enum SupportedIlluminaFormat {
- Bcl,
- Locs,
- Clocs,
- Pos,
- Filter,
- Barcode,
- MultiTileFilter,
- MultiTileLocs,
- MultiTileBcl
- }
-
- private final File basecallLaneDir;
- private final File intensityLaneDir;
- private final File basecallDir;
- private final File intensityDir;
- private final int lane;
-
- private final File tileMetricsOut;
- private final Map<SupportedIlluminaFormat, ParameterizedFileUtil> utils = new HashMap<SupportedIlluminaFormat, ParameterizedFileUtil>();
-
- public IlluminaFileUtil(final File basecallDir, final int lane) {
- this.lane = lane;
- this.basecallDir = basecallDir;
- this.intensityDir = basecallDir.getParentFile();
- final File dataDir = intensityDir.getParentFile();
- this.basecallLaneDir = new File(basecallDir, longLaneStr(lane));
- this.intensityLaneDir = new File(intensityDir, longLaneStr(lane));
- final File interopDir = new File(dataDir.getParentFile(), "InterOp");
- tileMetricsOut = new File(interopDir, "TileMetricsOut.bin");
- }
-
-
- /**
- * Return the lane we're inspecting
- */
- public int getLane() {
- return lane;
- }
-
- /**
- * Given a file type, get the Parameterized File Util object associated with it
- */
- public ParameterizedFileUtil getUtil(final SupportedIlluminaFormat format) {
- ParameterizedFileUtil parameterizedFileUtil = utils.get(format);
- if (parameterizedFileUtil == null) {
- switch (format) {
- case Bcl:
- final ParameterizedFileUtil bclFileUtil = new PerTilePerCycleFileUtil(".bcl", basecallLaneDir, new BclFileFaker(), lane);
- final ParameterizedFileUtil gzBclFileUtil = new PerTilePerCycleFileUtil(".bcl.gz", basecallLaneDir, new BclFileFaker(), lane);
- if (bclFileUtil.filesAvailable() && !gzBclFileUtil.filesAvailable()) {
- parameterizedFileUtil = bclFileUtil;
- } else if (!bclFileUtil.filesAvailable() && gzBclFileUtil.filesAvailable()) {
- parameterizedFileUtil = gzBclFileUtil;
- } else if (!bclFileUtil.filesAvailable() && !gzBclFileUtil.filesAvailable()) {
- parameterizedFileUtil = bclFileUtil;
- } else {
- throw new PicardException(
- "Not all BCL files in " + basecallLaneDir.getAbsolutePath() + " have the same extension!");
- }
- utils.put(SupportedIlluminaFormat.Bcl, parameterizedFileUtil);
- break;
- case Locs:
- parameterizedFileUtil = new PerTileFileUtil(".locs", intensityLaneDir, new LocsFileFaker(), lane);
- utils.put(SupportedIlluminaFormat.Locs, parameterizedFileUtil);
- break;
- case Clocs:
- parameterizedFileUtil = new PerTileFileUtil(".clocs", intensityLaneDir, new ClocsFileFaker(), lane);
- utils.put(SupportedIlluminaFormat.Clocs, parameterizedFileUtil);
- break;
- case Pos:
- parameterizedFileUtil = new PerTileFileUtil("_pos.txt", intensityDir, new PosFileFaker(), lane);
- utils.put(SupportedIlluminaFormat.Pos, parameterizedFileUtil);
- break;
- case Filter:
- parameterizedFileUtil = new PerTileFileUtil(".filter", basecallLaneDir, new FilterFileFaker(), lane);
- utils.put(SupportedIlluminaFormat.Filter, parameterizedFileUtil);
- break;
- case Barcode:
- parameterizedFileUtil = new PerTileFileUtil("_barcode.txt", basecallDir, new BarcodeFileFaker(), lane);
- utils.put(SupportedIlluminaFormat.Barcode, parameterizedFileUtil);
- break;
- case MultiTileFilter:
- parameterizedFileUtil = new MultiTileFilterFileUtil(basecallLaneDir, lane);
- utils.put(SupportedIlluminaFormat.MultiTileFilter, parameterizedFileUtil);
- break;
- case MultiTileLocs:
- parameterizedFileUtil = new MultiTileLocsFileUtil(new File(intensityDir, basecallLaneDir.getName()), basecallLaneDir, lane);
- utils.put(SupportedIlluminaFormat.MultiTileLocs, parameterizedFileUtil);
- break;
- case MultiTileBcl:
- parameterizedFileUtil = new MultiTileBclFileUtil(basecallLaneDir, lane);
- utils.put(SupportedIlluminaFormat.MultiTileBcl, parameterizedFileUtil);
- break;
- }
- }
- return parameterizedFileUtil;
- }
-
- /**
- * Return the list of tiles we would expect for this lane based on the metrics found in InterOp/TileMetricsOut.bin
- */
- public List<Integer> getExpectedTiles() {
- IoUtil.assertFileIsReadable(tileMetricsOut);
- //Used just to ensure predictable ordering
- final TreeSet<Integer> expectedTiles = new TreeSet<Integer>();
-
- final Iterator<TileMetricsOutReader.IlluminaTileMetrics> tileMetrics = new TileMetricsOutReader(tileMetricsOut);
- while (tileMetrics.hasNext()) {
- final TileMetricsOutReader.IlluminaTileMetrics tileMetric = tileMetrics.next();
-
- if (tileMetric.getLaneNumber() == lane) {
- if (!expectedTiles.contains(tileMetric.getTileNumber())) {
- expectedTiles.add(tileMetric.getTileNumber());
- }
- }
- }
-
- CloserUtil.close(tileMetrics);
- return new ArrayList<Integer>(expectedTiles);
- }
-
- /**
- * Get the available tiles for the given formats, if the formats have tile lists that differ then
- * throw an exception, if any of the format
- */
- public List<Integer> getActualTiles(final List<SupportedIlluminaFormat> formats) {
- if (formats == null) {
- throw new PicardException("Format list provided to getTiles was null!");
- }
-
- if (formats.size() == 0) {
- throw new PicardException(
- "0 Formats were specified. You need to specify at least SupportedIlluminaFormat to use getTiles");
- }
-
- final List<Integer> tiles = getUtil(formats.get(0)).getTiles();
- for (int i = 1; i < formats.size(); i++) {
- final List<Integer> fmTiles = getUtil(formats.get(i)).getTiles();
- if (tiles.size() != fmTiles.size() || !tiles.containsAll(fmTiles)) {
- throw new PicardException(
- "Formats do not have the same number of tiles! " + summarizeTileCounts(formats));
- }
- }
-
- return tiles;
- }
-
- public File tileMetricsOut() {
- return tileMetricsOut;
- }
-
- /*
- * Return a string representing the Lane in the format "L00<lane>"
- *
- * @param lane The lane to transform
- * @return A long string representation of the name
- */
- public static String longLaneStr(final int lane) {
- String lstr = String.valueOf(lane);
- final int zerosToAdd = 3 - lstr.length();
-
- for (int i = 0; i < zerosToAdd; i++) {
- lstr = "0" + lstr;
- }
- return "L" + lstr;
- }
-
-
- private String liToStr(final List<Integer> intList) {
- if (intList.size() == 0) {
- return "";
- }
-
- String summary = String.valueOf(intList.get(0));
- for (int i = 1; i < intList.size(); i++) {
- summary += ", " + String.valueOf(intList.get(i));
- }
-
- return summary;
- }
-
- private String summarizeTileCounts(final List<SupportedIlluminaFormat> formats) {
- String summary;
- ParameterizedFileUtil pfu = getUtil(formats.get(0));
- List<Integer> tiles = pfu.getTiles();
- summary = pfu.extension + "(" + liToStr(tiles) + ")";
-
- for (final SupportedIlluminaFormat format : formats) {
- pfu = getUtil(format);
- tiles = pfu.getTiles();
-
- summary += ", " + pfu.extension + "(" + liToStr(tiles) + ")";
- }
-
- return summary;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaMetricsCode.java b/src/java/net/sf/picard/illumina/parser/IlluminaMetricsCode.java
deleted file mode 100644
index 30f93a6..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaMetricsCode.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-/**
- * Illumina's TileMetricsOut.bin file codes various metrics, both concrete (all density id's are code 100) or as a base code
- * (e.g. phasing values are computed from a base of 200).
- *
- * @author jgentry
- */
-public enum IlluminaMetricsCode {
- DENSITY_ID(100),
- CLUSTER_ID(102),
- PHASING_BASE(200),
- PREPHASING_BASE(201);
-
- private final int metricsCode;
-
- IlluminaMetricsCode(final int metricsCode) {
- this.metricsCode = metricsCode;
- }
-
- /**
- * Phasing codes are between 200 and 299 (inclusive). Phasing codes are defined as being
- * (200 + ((N - 1) * 2)) for (a 0-based) read descriptor N (i.e., 200, 202, 204, etc.) Prephasing codes are defined
- * as being (201 + ((N - 1) * 2)) for read descriptor N (i.e., 201, 203, 205, etc.). So for a 101T8B101T read
- * structure, there will be phasing codes of 200, 202 and 204 and prephasing codes of 201, 203, 205.
- */
- public static int getPhasingCode(final int readDescriptorIndex, final IlluminaMetricsCode phasingType) {
- if (!isPhasing(phasingType)) {
- throw new IllegalArgumentException("phasingType must be PHASING_BASE or PREPHASING_BASE");
- }
-
- return (phasingType.getMetricsCode() + (readDescriptorIndex * 2));
- }
-
- public static boolean isPhasing(final IlluminaMetricsCode metricsCode) {
- return (metricsCode.equals(PHASING_BASE) || metricsCode.equals(PREPHASING_BASE));
- }
-
- public int getMetricsCode() {
- return metricsCode;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaParser.java b/src/java/net/sf/picard/illumina/parser/IlluminaParser.java
deleted file mode 100644
index 5a1e101..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaParser.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Interface for classes that parse information out of the Illumina Pipeline
- *
- * @author jburke at broadinstitute.org
- */
-interface IlluminaParser<DATA_TYPE extends IlluminaData> extends Iterator<DATA_TYPE> {
- /** Jump so that the next record returned will be from the specified tile. */
- void seekToTile(int oneBasedTileNumber);
-
- /**
- * Read the next read's set of data and set it into the provided data object. The object must have
- * the appropriate IlluminaEndData objects set into it for first end, second end, barcode.
- */
- DATA_TYPE next();
-
- /**
- * Is there a DATA_TYPE object for another cluster remaining.
- *
- * @return TRUE if there is a DATA_TYPE object for the next cluster that can be provided by
- * next
- */
- boolean hasNext();
-
- /**
- * Get the tile for the NEXT DATA_TYPE object that will be returned by this parser. This should
- * be called BEFORE next if you want the tile for the value returned by next
- */
- public int getTileOfNextCluster();
-
- /**
- * Given the expected tiles and cycles for this run, make sure this parser can provide data for
- * all tiles/cycles or throws an exception if it's missing any required data or data structures
- * it relies on do not disagree with the provided tiles/cycles
- *
- * @param tiles The number of tiles in the current run
- * @param cycles The number of cycles in the current run
- */
- void verifyData(final List<Integer> tiles, final int[] cycles);
-
- /** The DataTypes that this parser can provide */
- Set<IlluminaDataType> supportedTypes();
-
- void close();
-
-}
diff --git a/src/java/net/sf/picard/illumina/parser/IlluminaTextIterator.java b/src/java/net/sf/picard/illumina/parser/IlluminaTextIterator.java
deleted file mode 100644
index 8ea678a..0000000
--- a/src/java/net/sf/picard/illumina/parser/IlluminaTextIterator.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.util.BasicInputParser;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloserUtil;
-
-
-/**
- * Abstract class for parsing text-based whitespace-delimited Illumina output files, organized
- * by tile. Concrete implementations must call setFiles() in order to provide the list of files
- * to be iterated over.
- *
- * @author jburke at broadinstitute.org
- */
-class IlluminaTextIterator implements Iterator<String[]> {
-
- // Location of illumina output files to be parsed
- private final int lane;
- private int currentTile = 0;
-
- // List of files of the given type, sorted by tile #
- private IlluminaFileMap files;
-
- private boolean treatGroupedDelimitersAsOne = true;
- private BasicInputParser parser;
-
- public IlluminaTextIterator(final int lane, final IlluminaFileMap files) {
- this.lane = lane;
- this.files = files;
- currentTile = files.firstKey();
- }
-
- public IlluminaTextIterator(final int lane, final IlluminaFileMap files,
- final boolean treatGroupedDelimitersAsOne) {
- this(lane, files);
- this.treatGroupedDelimitersAsOne = treatGroupedDelimitersAsOne;
- currentTile = files.firstKey();
- }
-
- /**
- * Jump so that the next record returned will be the first one from the specified tile.
- */
- public void seekToTile(final int oneBasedTileNumber) {
- CloserUtil.close(parser);
- currentTile = oneBasedTileNumber;
- initializeParser();
- }
-
- /**
- * Prepare to iterate.
- */
- private void initializeParser() {
- final List<File> fileSubset = files.getFilesStartingAt(currentTile);
- parser = new BasicInputParser(treatGroupedDelimitersAsOne, fileSubset.toArray(new File[fileSubset.size()]));
- }
-
- /**
- * Read the next record from the list of input files, and load into data argument.
- */
- @Override
- public String [] next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
-
- return parser.next();
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException("Remove is not supported by IlluminaTextIterator");
- }
-
- public boolean hasNext() {
- if(parser == null) initializeParser();
- return parser.hasNext();
- }
-
- protected int getLane() {
- return lane;
- }
-
- public String getCurrentFilename() {
- if(parser == null) initializeParser();
- return parser.getFileName();
- }
-
- protected void validateLane(final int lane) {
- if (lane != getLane()) {
- throw new PicardException("Lane number mismatch: " + lane + " != " + getLane());
- }
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/IntensityChannel.java b/src/java/net/sf/picard/illumina/parser/IntensityChannel.java
deleted file mode 100644
index fccd389..0000000
--- a/src/java/net/sf/picard/illumina/parser/IntensityChannel.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-/**
- * The channels in a FourChannelIntensityData object, and the channels produced by a ClusterIntensityFileReader,
- * for cases in which it is desirable to handle these abstractly rather than having the specific names
- * in the source code.
- *
- * @author alecw at broadinstitute.org
-*/
-public enum IntensityChannel {
-
- A, C, G, T;
-
- public static final int NUM_CHANNELS = IntensityChannel.values().length;
-}
diff --git a/src/java/net/sf/picard/illumina/parser/MultiTileBclFileUtil.java b/src/java/net/sf/picard/illumina/parser/MultiTileBclFileUtil.java
deleted file mode 100644
index 26410d2..0000000
--- a/src/java/net/sf/picard/illumina/parser/MultiTileBclFileUtil.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.illumina.parser.fakers.MultiTileBclFileFaker;
-import net.sf.picard.io.IoUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * NextSeq-style bcl's have all tiles for a cycle in a single file.
- */
-public class MultiTileBclFileUtil extends ParameterizedFileUtil {
- final File basecallLaneDir;
- final File bci;
- final TileIndex tileIndex;
- final CycleIlluminaFileMap cycleFileMap = new CycleIlluminaFileMap();
-
- MultiTileBclFileUtil(final File basecallLaneDir, final int lane) {
- // Since these file names do not contain lane number, first two args to ctor are the same.
- super("^(\\d{4}).bcl.bgzf$", ".bcl.bgzf", basecallLaneDir,
- new MultiTileBclFileFaker(), lane);
- this.basecallLaneDir = basecallLaneDir;
- bci = new File(basecallLaneDir, "s_" + lane + ".bci");
- // Do this once rather than when deciding if these files exist and again later.
- final File[] cycleFiles = IoUtil.getFilesMatchingRegexp(base, matchPattern);
- if (bci.exists()) {
- tileIndex = new TileIndex(bci);
- if (cycleFiles != null) {
- for (final File file : cycleFiles) {
- final String fileName = file.getName();
- final String cycleNum = fileName.substring(0, fileName.indexOf('.'));
- final IlluminaFileMap fileMap = new IlluminaFileMap();
- for(final Integer tile : tileIndex.getTiles()) {
- fileMap.put(tile, file);
- }
- cycleFileMap.put(Integer.valueOf(cycleNum), fileMap);
- }
- }
- } else {
- tileIndex = null;
- }
-
- }
-
- public CycleIlluminaFileMap getFiles(final List<Integer> tiles, final int[] cycles) {
- // Filter input list of cycles according to which actually exist
- final ArrayList<Integer> goodCycleList = new ArrayList<Integer>(cycles.length);
- for (final int cycle : cycles) {
- if (cycleFileMap.containsKey(cycle)) {
- goodCycleList.add(cycle);
- }
- }
- // Ensure cycles are sorted.
- Collections.sort(goodCycleList);
- final int[] goodCycles = new int[goodCycleList.size()];
- for (int i = 0; i < goodCycles.length; ++i) {
- goodCycles[i] = goodCycleList.get(i);
- }
-
- // Create the map.
- final CycleIlluminaFileMap cycledMap = new CycleIlluminaFileMap();
- if (goodCycles.length > 0) {
- for(final int cycle : goodCycles) {
- final IlluminaFileMap fileMap = cycleFileMap.get(cycle).keep(tiles);
- cycledMap.put(cycle, fileMap);
- }
- }
- return cycledMap;
- }
-
- @Override
- public boolean filesAvailable() {
- return bci.exists() && cycleFileMap.size() > 0;
- }
-
- @Override
- public List<Integer> getTiles() {
- if (tileIndex == null) {
- return Collections.emptyList();
- }
- return tileIndex.getTiles();
- }
-
- @Override
- public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
- if (tileIndex == null) {
- return Collections.singletonList("Tile index(" + bci.getAbsolutePath() + ") does not exist!");
- }
- final List<String> ret = tileIndex.verify(expectedTiles);
- for (final int expectedCycle : expectedCycles) {
- if (!cycleFileMap.containsKey(expectedCycle)) {
- ret.add(expectedCycle + ".bcl.bgzf not found in " + base);
- }
- }
- return ret;
- }
-
- @Override
- public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] expectedCycles,
- final IlluminaFileUtil.SupportedIlluminaFormat format) {
- if (tileIndex == null) {
- return Collections.singletonList("Tile index(" + bci.getAbsolutePath() + ") does not exist!");
- }
- final List<String> ret = tileIndex.verify(expectedTiles);
- for (final int expectedCycle : expectedCycles) {
- if (!cycleFileMap.containsKey(expectedCycle)) {
- ret.add(expectedCycle + ".bcl.bgzf not found in " + base);
- }
- }
- return ret;
- }
-}
-
diff --git a/src/java/net/sf/picard/illumina/parser/MultiTileBclParser.java b/src/java/net/sf/picard/illumina/parser/MultiTileBclParser.java
deleted file mode 100644
index c11edd8..0000000
--- a/src/java/net/sf/picard/illumina/parser/MultiTileBclParser.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.illumina.parser.readers.BclIndexReader;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.illumina.parser.readers.BclReader;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * Parse .bcl.bgzf files that contain multiple tiles in a single file. This requires an index file that tells
- * the bgzf virtual file offset of the start of each tile in the block-compressed bcl file.
- */
-public class MultiTileBclParser extends BclParser {
- private final TileIndex tileIndex;
- private MultiTileBclDataCycleFileParser cycleFileParser = null;
- public MultiTileBclParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles,
- final OutputMapping outputMapping, final boolean applyEamssFilter,
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
- final TileIndex tileIndex) {
- super(directory, lane, tilesToCycleFiles, outputMapping, applyEamssFilter, bclQualityEvaluationStrategy);
- this.tileIndex = tileIndex;
- this.initialize();
- }
-
- @Override
- public void initialize(){
- if(tileIndex != null){
- seekToTile(currentTile);
- }
- }
-
- private CountLimitedIterator makeReader(final List<File> files) {
- if(tileIndex != null) {
- final BclReader bclReader = BclReader.makeSeekable(files, bclQualityEvaluationStrategy, outputMapping.getOutputReadLengths());
- final int numClustersInTile = bclReader.seek(files, tileIndex, currentTile);
- return new CountLimitedIterator(bclReader, numClustersInTile);
- }
- else{
- return null;
- }
- }
-
- @Override
- protected CycleFilesParser<BclData> makeCycleFileParser(final List<File> files) {
- if (cycleFileParser == null) {
- cycleFileParser = new MultiTileBclDataCycleFileParser(files, currentTile);
- } else {
- final int numClustersInTile = cycleFileParser.getReader().seek(files, tileIndex, currentTile);
- cycleFileParser.setCurrentTile(currentTile);
- cycleFileParser.resetClusterLimit(numClustersInTile);
- }
- return cycleFileParser;
- }
-
- /**
- * An iterator wrapper that stops when it has return a pre-determined number of records even if the underlying
- * iterator still had more records.
- */
- static class CountLimitedIterator implements CloseableIterator<BclData> {
- public BclReader getUnderlyingIterator() {
- return underlyingIterator;
- }
-
- private final BclReader underlyingIterator;
- private int recordLimit;
- private int numRecordsRead = 0;
-
- CountLimitedIterator(final BclReader underlyingIterator, final int recordLimit) {
- this.underlyingIterator = underlyingIterator;
- this.recordLimit = recordLimit;
- }
-
- @Override
- public void close() {
- //underlyingIterator.close();
- }
-
- @Override
- public boolean hasNext() {
- return numRecordsRead < recordLimit && underlyingIterator.hasNext();
- }
-
- @Override
- public BclData next() {
- if (!hasNext()) throw new NoSuchElementException();
- ++numRecordsRead;
- return underlyingIterator.next();
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-
-
- private class MultiTileBclDataCycleFileParser implements CycleFilesParser<BclData> {
- final CountLimitedIterator reader;
- int currentTile;
-
- public MultiTileBclDataCycleFileParser(final List<File> files, final int currentTile) {
- this.currentTile = currentTile;
- reader = makeReader(files);
- }
-
- @Override
- public void close() {
- reader.close();
- }
-
- @Override
- public BclData next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- return reader.next();
- }
-
- @Override
- public boolean hasNext() {
- try {
- return reader.hasNext();
- } catch (final NullPointerException npe) {
- return false;
- }
- }
-
- public int getCurrentTile(){
- return currentTile;
- }
-
- public BclReader getReader() {
- return reader.getUnderlyingIterator();
- }
-
- public void resetClusterLimit(final int numClustersInTile) {
- reader.recordLimit = numClustersInTile;
- reader.numRecordsRead = 0;
- }
-
- public void setCurrentTile(final int currentTile) {
- this.currentTile = currentTile;
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/MultiTileFileUtil.java b/src/java/net/sf/picard/illumina/parser/MultiTileFileUtil.java
deleted file mode 100644
index 044eac0..0000000
--- a/src/java/net/sf/picard/illumina/parser/MultiTileFileUtil.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.fakers.BciFileFaker;
-import net.sf.picard.illumina.parser.fakers.FileFaker;
-import net.sf.picard.illumina.parser.fakers.FilterFileFaker;
-import net.sf.picard.illumina.parser.fakers.MultiTileLocsFileFaker;
-import net.sf.picard.io.IoUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * For file types for which there is one file per lane, with fixed record size, and all the tiles in it,
- * so the s_<lane>.bci file can be used to figure out where each tile starts and ends.
- */
-public abstract class MultiTileFileUtil<OUTPUT_RECORD extends IlluminaData> extends ParameterizedFileUtil {
- protected final File bci;
- protected TileIndex tileIndex;
- protected File dataFile;
-
- MultiTileFileUtil(final String extension, final File base, final File bciDir, final FileFaker fileFaker,
- final int lane) {
- super(false, extension, base, fileFaker, lane);
- bci = new File(bciDir, "s_" + lane + ".bci");
- if (bci.exists()) {
- tileIndex = new TileIndex(bci);
- } else {
- tileIndex = null;
- }
- final File[] filesMatchingRegexp = IoUtil.getFilesMatchingRegexp(base, matchPattern);
- if (filesMatchingRegexp == null || filesMatchingRegexp.length == 0) {
- dataFile = null;
- } else if (filesMatchingRegexp.length == 1) {
- dataFile = filesMatchingRegexp[0];
- } else {
- throw new PicardException("More than one filter file found in " + base.getAbsolutePath());
- }
- }
-
- @Override
- public boolean filesAvailable() {
- return tileIndex != null && dataFile != null && dataFile.exists();
- }
-
- @Override
- public List<Integer> getTiles() {
- if (tileIndex == null) {
- return Collections.emptyList();
- }
- return tileIndex.getTiles();
- }
-
- /**
- * expectedCycles are not checked in this implementation.
- */
- @Override
- public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
- if (tileIndex == null) {
- return Collections.singletonList("Tile index(" + bci.getAbsolutePath() + ") does not exist!");
- }
- return tileIndex.verify(expectedTiles);
- }
-
- @Override
- public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] expectedCycles,
- final IlluminaFileUtil.SupportedIlluminaFormat format) {
- //we need to fake a bci file for the tile index
- final BciFileFaker bciFileFaker = new BciFileFaker();
- try {
- bciFileFaker.fakeBciFile(bci, expectedTiles);
- tileIndex = new TileIndex(bci);
- faker.fakeFile(base, expectedTiles, lane, extension);
- final File[] filesMatchingRegexp = IoUtil.getFilesMatchingRegexp(base, matchPattern);
- if (filesMatchingRegexp == null || filesMatchingRegexp.length == 0) {
- dataFile = null;
- } else if (filesMatchingRegexp.length == 1) {
- dataFile = filesMatchingRegexp[0];
- } else {
- throw new PicardException("More than one filter file found in " + base.getAbsolutePath());
- }
- } catch (final IOException e) {
- return Collections.singletonList("Could not create tile index file: " + bci.getAbsolutePath());
- }
- return tileIndex.verify(expectedTiles);
- }
-
- abstract IlluminaParser<OUTPUT_RECORD> makeParser(List<Integer> requestedTiles);
-
-}
-
-class MultiTileFilterFileUtil extends MultiTileFileUtil<PfData> {
-
- /**
- * @param basecallLaneDir location of .filter file and also .bci file
- */
- MultiTileFilterFileUtil(final File basecallLaneDir, final int lane) {
- super(".filter", basecallLaneDir, basecallLaneDir, new FilterFileFaker(), lane);
- }
-
- @Override
- IlluminaParser<PfData> makeParser(final List<Integer> requestedTiles) {
- return new MultiTileFilterParser(tileIndex, requestedTiles, dataFile);
- }
-}
-
-class MultiTileLocsFileUtil extends MultiTileFileUtil<PositionalData> {
-
- MultiTileLocsFileUtil(final File basecallLaneDir, final File bciDir, final int lane) {
- super(".locs", basecallLaneDir, bciDir, new MultiTileLocsFileFaker(), lane);
- }
-
- @Override
- IlluminaParser<PositionalData> makeParser(final List<Integer> requestedTiles) {
- return new MultiTileLocsParser(tileIndex, requestedTiles, dataFile, lane);
- }
-}
-
diff --git a/src/java/net/sf/picard/illumina/parser/MultiTileFilterParser.java b/src/java/net/sf/picard/illumina/parser/MultiTileFilterParser.java
deleted file mode 100644
index 74453ae..0000000
--- a/src/java/net/sf/picard/illumina/parser/MultiTileFilterParser.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.illumina.parser.readers.FilterFileReader;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Read filter file that contains multiple tiles in a single file. A tile index is needed to parse this
- * file so that {tile number, cluster number} can be converted into absolute record number in file.
- */
-public class MultiTileFilterParser extends MultiTileParser<PfData> {
- private final FilterFileReader reader;
-
- public MultiTileFilterParser(final TileIndex tileIndex, final List<Integer> requestedTiles, final File filterFile) {
- super(tileIndex, requestedTiles, Collections.singleton(IlluminaDataType.PF));
- reader = new FilterFileReader(filterFile);
- }
-
- @Override
- PfData readNext() {
- final boolean nextVal = reader.next();
- return new PfData() {
- @Override
- public boolean isPf() {
- return nextVal;
- }
- };
- }
-
- @Override
- void skipRecords(final int numToSkip) {
- reader.skipRecords(numToSkip);
- }
-
- @Override
- public void close() {
- //no-op
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/MultiTileLocsParser.java b/src/java/net/sf/picard/illumina/parser/MultiTileLocsParser.java
deleted file mode 100644
index fb20eae..0000000
--- a/src/java/net/sf/picard/illumina/parser/MultiTileLocsParser.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.illumina.parser.readers.AbstractIlluminaPositionFileReader;
-import net.sf.picard.illumina.parser.readers.LocsFileReader;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Read locs file that contains multiple tiles in a single file. A tile index is needed to parse this
- * file so that {tile number, cluster number} can be converted into absolute record number in file.
- */
-public class MultiTileLocsParser extends MultiTileParser<PositionalData> {
- private final LocsFileReader reader;
- private final int lane;
-
- public MultiTileLocsParser(final TileIndex tileIndex, final List<Integer> requestedTiles, final File locsFile, final int lane) {
- super(tileIndex, requestedTiles, Collections.singleton(IlluminaDataType.Position));
- final int tileNumber;
- if (requestedTiles.size() == 1) tileNumber = requestedTiles.get(0);
- else tileNumber = -1;
- this.reader = new LocsFileReader(locsFile, lane, tileNumber);
- this.lane = lane;
- }
-
- @Override
- PositionalData readNext() {
- final int tile = getTileOfNextCluster();
- final AbstractIlluminaPositionFileReader.PositionInfo nextVal = reader.next();
- return new PositionalData() {
- public int getXCoordinate() {
- return nextVal.xQseqCoord;
- }
-
- public int getYCoordinate() {
- return nextVal.yQseqCoord;
- }
-
- public int getLane() {
- return lane;
- }
-
- public int getTile() {
- return tile;
- }
- };
- }
-
- @Override
- void skipRecords(final int numToSkip) {
- reader.skipRecords(numToSkip);
- }
-
- @Override
- public void close() {
- reader.close();
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/MultiTileParser.java b/src/java/net/sf/picard/illumina/parser/MultiTileParser.java
deleted file mode 100644
index 1621834..0000000
--- a/src/java/net/sf/picard/illumina/parser/MultiTileParser.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.PeekIterator;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-/**
- * Abstract class for files with fixed-length records for multiple tiles, e.g. .locs and .filter files.
- * @param <OUTPUT_RECORD> The kind of record to be returned (as opposed to the type of the record stored in the file).
- */
-public abstract class MultiTileParser<OUTPUT_RECORD extends IlluminaData> implements IlluminaParser<OUTPUT_RECORD> {
- private final TileIndex tileIndex;
- private final Iterator<TileIndex.TileIndexRecord> tileIndexIterator;
- private final PeekIterator<Integer> requestedTilesIterator;
- private final Set<IlluminaDataType> supportedTypes;
- private int nextRecordIndex = 0;
- private int nextClusterInTile;
- private TileIndex.TileIndexRecord currentTile = null;
-
- /**
- * @param tileIndex Enables conversion from tile number to record number in this file.
- * @param requestedTiles Iterate over these tile numbers, which must be in ascending order.
- * @param supportedTypes The data types(s) that are provided by this file type, used to decide what file types to read.
- */
- public MultiTileParser(final TileIndex tileIndex,
- final List<Integer> requestedTiles,
- final Set<IlluminaDataType> supportedTypes) {
- this.tileIndex = tileIndex;
- this.tileIndexIterator = tileIndex.iterator();
- this.requestedTilesIterator = new PeekIterator<Integer>(requestedTiles.iterator());
- this.supportedTypes = supportedTypes;
- }
-
- @Override
- public void seekToTile(final int oneBasedTileNumber) {
- while (tileIndexIterator.hasNext()) {
- final TileIndex.TileIndexRecord next = tileIndexIterator.next();
- if (next.tile > oneBasedTileNumber) {
- throw new PicardException(
- String.format("Cannot seek backwards: next tile %d > tile sought %d", next.tile, oneBasedTileNumber));
- } else if (next.tile == oneBasedTileNumber) {
- currentTile = next;
- break;
- }
- }
- if (nextRecordIndex > currentTile.indexOfFirstClusterInTile) {
- throw new PicardException(
- String.format("Seem to be in wrong position %d > %d", nextRecordIndex, currentTile.indexOfFirstClusterInTile));
- }
- skipRecords(currentTile.indexOfFirstClusterInTile - nextRecordIndex);
- nextRecordIndex = currentTile.indexOfFirstClusterInTile;
- nextClusterInTile = 0;
- }
-
- @Override
- public OUTPUT_RECORD next() {
- if (!hasNext()) throw new NoSuchElementException();
- OUTPUT_RECORD ret = readNext();
- ++nextClusterInTile;
- ++nextRecordIndex;
- return ret;
- }
-
- @Override
- public boolean hasNext() {
- // Skip over any empty tiles
- while ((currentTile == null || nextClusterInTile >= currentTile.numClustersInTile) && requestedTilesIterator.hasNext()) {
- seekToTile(requestedTilesIterator.next());
- }
- return currentTile != null && nextClusterInTile < currentTile.numClustersInTile;
- }
-
- @Override
- public int getTileOfNextCluster() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- if (currentTile != null && nextClusterInTile < currentTile.numClustersInTile) return currentTile.tile;
- else return requestedTilesIterator.peek();
- }
-
- @Override
- public void verifyData(final List<Integer> tiles, final int[] cycles) {
- final List<String> tileErrors = tileIndex.verify(tiles);
- if (!tileErrors.isEmpty()) throw new PicardException(tileErrors.get(0));
- //No need to validate cycles until such time as this class is used for cycle-oriented data types
- }
-
- @Override
- public Set<IlluminaDataType> supportedTypes() {
- return supportedTypes;
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- abstract OUTPUT_RECORD readNext();
- abstract void skipRecords(int numToSkip);
-}
diff --git a/src/java/net/sf/picard/illumina/parser/OutputMapping.java b/src/java/net/sf/picard/illumina/parser/OutputMapping.java
deleted file mode 100644
index 38e9ae9..0000000
--- a/src/java/net/sf/picard/illumina/parser/OutputMapping.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.StringUtil;
-
-/**
- * In multiple locations we need to know what cycles are output, as of now we output all non-skip cycles, but rather than sprinkle
- * this knowledge throughout the parser code, instead OutputMapping provides all the data a client might want about the
- * cycles to be output including what ReadType they are.
- *
- * @author jburke at broadinstitute.org
- */
-public class OutputMapping {
- /**
- * This class represents the mapping from Raw Cycles to TwoDIndices into output data structures and ClusterData. This class
- * also contains ReadStructure.Substructure that describes which reads/cycles should be output.
- *
- * For each cycle # (1-Based) there is a corresponding element in the cycleToOutputIndex array where
- * cycleToOutputIndex[cycle#].arrayIndex indicates the readNumber that cycle will be found on and cycleToOutputIndex[cycle#].elementIndex
- * indicates the array inde on that readNumber that the cycle occupies. There are also various intermediate byte[][]
- * structures (in BclData, QseqReadData, etc...) where the top level array corresponds with the readNumber and the second-level
- * array corresponds with cycleNumber, cycleToOutputIndex is used to index into these arrays.
- */
- private final TwoDIndex[] cycleToOutputIndex;
-
- /** The collection of ReadDescriptors and information about those read descriptors that describe all the
- * cycles that IlluminaDataProvider should output in a ClusterData object */
- private final ReadStructure.Substructure outputSubstructure;
-
- /** The original read structure without any skips */
- private final ReadStructure outputReadStructure;
-
- /**
- * Create an OutputMapping from a readStructure, currently the outputSubstructure just references the readStructure.nonSkips
- * Substructure
- * @param readStructure The readStructure for the given run that we want an OutputMapping for
- */
- public OutputMapping(final ReadStructure readStructure) {
- this.outputSubstructure = readStructure.nonSkips;
- this.cycleToOutputIndex = makeCycleToOutputIndexArray(readStructure);
- this.outputReadStructure = outputSubstructure.toReadStructure();
- }
-
- /** @return The number of reads that should be found in the output clusterData */
- public int numOutputReads() {
- return outputSubstructure.length();
- }
-
- /** @return An array of cycles in ascending order of all the cycles that should be output. */
- public int [] getOutputCycles() {
- return outputSubstructure.getCycles();
- }
-
- /** @return An ordered array of lengths, where each element represents the size of output reads respectively */
- public int [] getOutputReadLengths() {
- return outputSubstructure.getDescriptorLengths();
- }
-
- /** @return The total number of cycles that will be output */
- public int getTotalOutputCycles() {
- return outputSubstructure.getTotalCycles();
- }
-
- /** @return An ordered array of Ranges over cycle indices(cycle#-1), where each range represents a contiguous block of cycles
- * to output, and each cycle in getOutputCycles() is in ONE AND ONLY ONE Range, all ranges are inclusive of both ends
- */
- public Range [] getCycleIndexRanges() {
- return outputSubstructure.getCycleIndexRanges();
- }
-
- /** @return An iterator over the read descriptors that describe the reads to be output*/
- public Iterable<ReadDescriptor> getOutputDescriptors() {
- return outputSubstructure;
- }
-
- public ReadStructure getOutputReadStructure() {
- return outputReadStructure;
- }
-
- /**
- * Return an index that where:
- * index.arrayIndex - represents either the read number the cycle will be output too, or (in some cases)
- * an array index into a two dimensional array of byte[][] where the top level array corresponds to read number
- *
- * index.elementIndex - represents the element a cycle will appear in inside it's give read, or the element
- * in an array as described above
- * @param cycle The cycle for which we want an index
- * @return A TwoDArrayIndex indicating where this cycle can be found
- */
- public TwoDIndex getOutputIndexForCycle(final int cycle) {
- return cycleToOutputIndex[cycle];
- }
-
- /**
- * An index into two dimensional arrays or other two dimensional structures where arrayIndex equals the index
- * into the top level structure and elementIndex is equal to the index into the bottom level structure
- */
- static class TwoDIndex {
- //index into the "outer structure" i.e. if we have an array T[][], we would index T[majorIndex][minorIndex]
- public final int majorIndex;
-
- //index into the "inner structure", see majorIndex
- public final int minorIndex;
-
- public TwoDIndex(final int majorIndex, final int minorIndex) {
- this.majorIndex = majorIndex;
- this.minorIndex = minorIndex;
- }
-
- @Override
- public String toString() {
- return "TwoDIndex(majorIndex == " + majorIndex + ", minorIndex == " + minorIndex + ")";
- }
-
- @Override
- public boolean equals(final Object thatObj) {
- if(thatObj == null || !(thatObj instanceof TwoDIndex)) {
- return false;
- }
-
- final TwoDIndex that = (TwoDIndex) thatObj;
- return this.majorIndex == that.majorIndex && this.minorIndex == that.minorIndex;
- }
- }
-
- /**
- * Create an array where each index corresponds to a cycle # (with Cycle 0 = null) and each element in
- * an index into a ClusterData's reads/bases and reads/qualities for the run described by readStructure
- * @param readStructure The readStructure describing the run concerned
- * @return An array of TwoDArrayIndexes
- */
- private TwoDIndex[] makeCycleToOutputIndexArray(final ReadStructure readStructure) {
- int totalCycles = readStructure.totalCycles;
- final TwoDIndex[] cycleToOutputIndex = new TwoDIndex[totalCycles + 1];
-
- final int [] outputCycles = getOutputCycles();
- final int [] outputLengths = getOutputReadLengths();
- int outputCycleIndex = 0;
- int arrIndex = 0;
- int elementIndex = 0;
- for(int i = 1; i <= totalCycles && outputCycleIndex < outputCycles.length; i++) {
- if(outputCycles[outputCycleIndex] == i) {
- if(elementIndex >= outputLengths[arrIndex]) {
- elementIndex = 0;
- ++arrIndex;
- }
-
- cycleToOutputIndex[i] = new TwoDIndex(arrIndex, elementIndex);
- ++elementIndex;
- ++outputCycleIndex;
- }
- }
-
- if(outputCycleIndex != outputCycles.length) {
- throw new PicardException("Error in read structure outputCycles (" + StringUtil.intValuesToString(outputCycles) + ") and total cycles (" + totalCycles + ") OutputCycleIndex(" + outputCycleIndex + ")");
- }
-
- return cycleToOutputIndex;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/ParameterizedFileUtil.java b/src/java/net/sf/picard/illumina/parser/ParameterizedFileUtil.java
deleted file mode 100644
index 53fd2a3..0000000
--- a/src/java/net/sf/picard/illumina/parser/ParameterizedFileUtil.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.fakers.FileFaker;
-import net.sf.picard.io.IoUtil;
-
-import java.io.File;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public abstract class ParameterizedFileUtil {
- public static final String PER_TILE_PATTERN_STRING = "s_(\\d+)_(\\d{1,5})";
- /**
- * The file extension for this class, file extension does not have the standard meaning
- * in this instance. It means, all the characters that come after the identifying portion of
- * the file (after lane, tile, and end that is). So _qseq.txt and .filter are both file extensions
- */
- protected final String extension;
-
- /**
- * A pattern that will match files of this type for this lane
- */
- protected Pattern matchPattern;
-
- protected final int lane;
- protected List<Integer> tiles;
- /**
- * If you think of the file system as a tree, this is the deepest directory(node) on the tree that
- * still contains all of the files for this given type (e.g. If we're talking about BCLs the directory
- * structure is:
- * <p/>
- * BaseCall Dir
- * |
- * L001
- * | | |
- * C1.1 C2.1 ... Cn.1
- * | | |
- * bcl Files ... bclFiles
- * <p/>
- * L001 is the base because it contains every BCL file in the run (though those files are nested in
- * other folders).
- */
- protected final File base;
- protected final FileFaker faker;
-
- public ParameterizedFileUtil(final boolean laneTileRegex, final String extension, final File base,
- final FileFaker faker, final int lane) {
- this(extension, base, faker, lane);
- if (laneTileRegex) {
- matchPattern = Pattern.compile(escapePeriods(makeLaneTileRegex(processTxtExtension(extension), lane)));
- } else {
- matchPattern = Pattern.compile(escapePeriods(makeLaneRegex(extension, lane)));
- }
- }
-
- public ParameterizedFileUtil(final String pattern, final String extension, final File base, final FileFaker faker,
- final int lane) {
- this(extension, base, faker, lane);
- this.matchPattern = Pattern.compile(pattern);
- }
-
- private ParameterizedFileUtil(final String extension, final File base, final FileFaker faker,
- final int lane) {
- this.faker = faker;
- this.extension = extension;
- this.base = base;
- this.lane = lane;
- }
-
- /**
- * Determine whether or not files are available
- *
- * @return return true if files are found matching this types pattern, false otherwise
- */
- public abstract boolean filesAvailable();
-
- /**
- * Return a list of all tiles available for this file format and run
- *
- * @return A List of tile integers
- */
- public List<Integer> getTiles() {
- return tiles;
- }
-
- /**
- * Given the expected tiles/expected cycles for this file type, return a list of error messages describing any
- * missing/or malformed files
- *
- * @param expectedTiles An ordered list of tile numbers
- * @param expectedCycles An ordered list of cycle numbers that may contain gaps
- * @return A list of error messages for this format
- */
- public abstract List<String> verify(List<Integer> expectedTiles, int[] expectedCycles);
-
- /**
- * Given the expected tiles/expected cycles for this file type create a set of fake files such that the
- * verification criteria are met.
- *
- * @param expectedTiles An ordered list of tile numbers
- * @param cycles An ordered list of cycle numbers that may contain gaps
- * @param format The format of the files that are to be faked
- * @return A list of error messages for this format
- */
- public abstract List<String> fakeFiles(List<Integer> expectedTiles, int[] cycles,
- IlluminaFileUtil.SupportedIlluminaFormat format);
-
- /**
- * Returns only lane and tile information as PerTileFt's do not have End information.
- *
- * @param fileName Filename to analyze for data
- * @return A LaneTile object with the discovered Lane and Tile information and a null end field.
- */
- protected Integer fileToTile(final String fileName) {
- final Matcher matcher = matchPattern.matcher(fileName);
- if (!matcher.matches()) {
- return null;
- }
- return Integer.parseInt(matcher.group(1));
- }
-
- /**
- * Return a regex string for finding Lane and Tile given a file extension pattern
- */
- public static String makeLaneTileRegex(final String fileNameEndPattern, final int lane) {
- if (lane < 0) {
- throw new PicardException("Lane (" + lane + ") cannot be negative");
- }
- return "^" + "s_" + lane + "_(\\d{1,5})" + fileNameEndPattern + "$";
- }
-
- private String makeLaneRegex(final String fileNameEndPattern, final int lane) {
- return "^s_" + lane + fileNameEndPattern + "$";
- }
-
- /**
- * The period separator is expected in the file extension, since some do not start with it
- */
- private String escapePeriods(final String preEscaped) {
- return preEscaped
- .replaceAll("\\.", "\\."); //In the first one the \\ is inside a regex in the second it's NOT
- }
-
- /**
- * For filename patterns that end with .txt tack on the option .gz extension
- */
- private String processTxtExtension(final String fileNameEndPattern) {
- if (fileNameEndPattern.endsWith(".txt")) {
- return fileNameEndPattern + "(\\.gz|\\.bz2)?";
- } else {
- return fileNameEndPattern;
- }
- }
-
- /**
- * Return all files that match pattern of the given file type in the given base directory
- */
- protected IlluminaFileMap getTiledFiles(final File baseDirectory, final Pattern pattern) {
- final IlluminaFileMap fileMap = new IlluminaFileMap();
- if (baseDirectory.exists()) {
- IoUtil.assertDirectoryIsReadable(baseDirectory);
- final File[] files = IoUtil.getFilesMatchingRegexp(baseDirectory, pattern);
- for (final File file : files) {
- if (file.length() > 0) {
- fileMap.put(fileToTile(file.getName()), file);
- }
- }
- }
-
- return fileMap;
- }
-
-}
diff --git a/src/java/net/sf/picard/illumina/parser/PerTileCycleParser.java b/src/java/net/sf/picard/illumina/parser/PerTileCycleParser.java
deleted file mode 100644
index afb09cd..0000000
--- a/src/java/net/sf/picard/illumina/parser/PerTileCycleParser.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import org.broadinstitute.variant.variantcontext.writer.BCF2FieldWriter;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * PerTilePerCycleParser is an abstract IlluminaParser that maintains a list of file parsers for the current tile (1 for each cycle)
- * and coordinates the construction/population of an IlluminaData object on a cycle by cycle basis.
- *
- * @param <ILLUMINA_DATA>
- */
-abstract class PerTileCycleParser<ILLUMINA_DATA extends IlluminaData> implements IlluminaParser<ILLUMINA_DATA> {
-
- /** Location of illumina output files to be parsed. Typically this is Data/Intensities/L00<lane> */
- private final File laneDirectory;
-
- /** The lane to iterate over */
- private final int lane;
-
- /** A parser for the current tile */
- private CycleFilesParser<ILLUMINA_DATA> cycleFilesParser;
-
- final OutputMapping outputMapping;
-
- /** The current tile number */
- protected int currentTile;
-
- /** Map of Cycle -> Tile -> List<File> */
- private final CycleIlluminaFileMap cyclesToTileFiles;
-
- private final TreeSet<Integer> tileOrder;
-
- /**
- * Construct a per tile parser
- *
- * @param directory The directory containing the lane we are analyzing (i.e. the parent of the L00<lane> directory)
- * @param lane The lane that is being iterated over
- * @param cyclesToTileFiles A map of tile to CycleFilesIterators whose iterators contain only the cycles we want to output
- * @param outputMapping Data structure containing information on how we should output data
- */
- PerTileCycleParser(final File directory, final int lane, final CycleIlluminaFileMap cyclesToTileFiles, final OutputMapping outputMapping) {
- this.tileOrder = getTileOrder(cyclesToTileFiles);
- this.lane = lane;
- this.laneDirectory = new File(directory, IlluminaFileUtil.longLaneStr(this.lane));
- this.cyclesToTileFiles = cyclesToTileFiles;
- this.currentTile = tileOrder.first();
- this.outputMapping = outputMapping;
- }
-
- private TreeSet<Integer> getTileOrder(final CycleIlluminaFileMap cyclesToTileFiles) {
- final TreeSet<Integer> uniqueTiles = new TreeSet<Integer>();
-
- for (final IlluminaFileMap fileMap : cyclesToTileFiles.values()) {
- uniqueTiles.addAll(fileMap.keySet());
- }
- return uniqueTiles;
- }
-
- /**
- * For a given cycle, return a CycleFilesParser.
- *
- * @param file The file to parse
- * @return A CycleFilesParser that will populate the correct position in the IlluminaData object with that cycle's data.
- */
- protected abstract CycleFilesParser<ILLUMINA_DATA> makeCycleFileParser(final List<File> file);
-
- public abstract void initialize();
-
- /**
- * CycleFileParsers iterate through the clusters of a file and populate an IlluminaData object with a single cycle's
- * value.
- *
- * @param <ILLUMINA_DATA>
- */
- protected interface CycleFilesParser<ILLUMINA_DATA> {
- public void close();
-
- public ILLUMINA_DATA next();
-
- public boolean hasNext();
- }
-
- /**
- * Clear the current set of cycleFileParsers and replace them with the ones for the tile indicated by oneBasedTileNumber
- *
- * @param tile requested tile
- */
- @Override
- public void seekToTile(final int tile) {
- currentTile = tile;
-
- if(cycleFilesParser != null) {
- cycleFilesParser.close();
- }
-
- int totalCycles = 0;
- final List<File> tileFiles = new ArrayList<File>();
- for (final Map.Entry<Integer, IlluminaFileMap> entry : cyclesToTileFiles.entrySet()) {
- tileFiles.add(entry.getValue().get(currentTile));
- ++totalCycles;
- }
- cycleFilesParser = makeCycleFileParser(tileFiles);
-
- if (totalCycles != outputMapping.getTotalOutputCycles()) {
- throw new PicardException("Number of cycle OUTPUT files found (" + totalCycles + ") does not equal the number expected (" + outputMapping.getTotalOutputCycles() + ")");
- }
- }
-
- /**
- * Return the data for the next cluster by:
- * 1. Advancing tiles if we reached the end of the current tile.
- * 2. For each cycle, get the appropriate parser and have it populate it's data into the IlluminaData object.
- *
- * @return The IlluminaData object for the next cluster
- */
- @Override
- public ILLUMINA_DATA next() { //iterate over clusters
- if (!hasNext()) {
- throw new NoSuchElementException("IlluminaData is missing in lane " + lane + " at directory location " + laneDirectory.getAbsolutePath());
- }
-
- if (!cycleFilesParser.hasNext()) {
- seekToTile(tileOrder.higher(currentTile));
- }
-
- return cycleFilesParser.next();
- }
-
- @Override
- public boolean hasNext() {
- return cycleFilesParser.hasNext() || currentTile < tileOrder.last();
- }
-
- /**
- * Returns the tile of the next cluster that will be returned by PerTilePerCycleParser and therefore should be called before
- * next() if you want to know the tile for the data returned by next()
- *
- * @return The tile number of the next ILLUMINA_DATA object to be returned
- */
- public int getTileOfNextCluster() {
- //if the current parser still has more clusters, return the current tile number
- if (cycleFilesParser.hasNext()) {
- return currentTile;
- }
-
- //if the current parser is EMPTY, return the next tile number
- if (currentTile < tileOrder.last()) {
- return tileOrder.higher(currentTile);
- }
-
- //If we are at the end of clusters then this method should not be called, throw an exception
- throw new NoSuchElementException();
- }
-
- @Override
- public void verifyData(List<Integer> tiles, final int[] cycles) {
- if (tiles == null) {
- tiles = new ArrayList<Integer>(this.cyclesToTileFiles.keySet());
- }
- this.cyclesToTileFiles.assertValid(tiles, cycles);
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Remove is not supported by " + this.getClass().getName());
- }
-
- @Override
- public void close() {
- cycleFilesParser.close();
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/PerTileFileUtil.java b/src/java/net/sf/picard/illumina/parser/PerTileFileUtil.java
deleted file mode 100644
index 87c0b74..0000000
--- a/src/java/net/sf/picard/illumina/parser/PerTileFileUtil.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.illumina.parser.fakers.FileFaker;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-public class PerTileFileUtil extends ParameterizedFileUtil {
- private final IlluminaFileMap fileMap;
-
- public PerTileFileUtil(final String extension, final File base,
- final FileFaker faker, final int lane) {
- super(true, extension, base, faker, lane);
- this.fileMap = getTiledFiles(base, matchPattern);
- if (fileMap.size() > 0) {
- this.tiles = Collections.unmodifiableList(new ArrayList<Integer>(this.fileMap.keySet()));
- } else {
- this.tiles = new ArrayList<Integer>();
- }
- }
-
- @Override
- public boolean filesAvailable() {
- return !fileMap.isEmpty();
- }
-
- public IlluminaFileMap getFiles() {
- return fileMap;
- }
-
- public IlluminaFileMap getFiles(final List<Integer> tiles) {
- return fileMap.keep(tiles);
- }
-
- @Override
- public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
- final List<String> failures = new LinkedList<String>();
-
- if (!base.exists()) {
- failures.add("Base directory(" + base.getAbsolutePath() + ") does not exist!");
- } else {
- if (!tiles.containsAll(expectedTiles)) {
- final List<Integer> missing = new ArrayList<Integer>(expectedTiles);
- missing.removeAll(tiles);
- failures.add("Missing tile " + missing + " for file type " + extension + ".");
- }
- }
- return failures;
- }
-
- @Override
- public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] cycles,
- final IlluminaFileUtil.SupportedIlluminaFormat format) {
- final List<String> failures = new LinkedList<String>();
- if (!base.exists()) {
- failures.add("Base directory(" + base.getAbsolutePath() + ") does not exist!");
- } else {
- for (final Integer tile : expectedTiles) {
- if (!tiles.contains(tile) || fileMap.get(tile).length() == 0) {
- //create a new file of this type
- try {
- faker.fakeFile(base, tile, lane, extension);
- } catch (final IOException e) {
- failures.add(String.format("Could not create fake file %s: %s", fileMap.get(tile),
- e.getMessage()));
- }
-
- }
- }
- }
- return failures;
- }
-
-}
diff --git a/src/java/net/sf/picard/illumina/parser/PerTileParser.java b/src/java/net/sf/picard/illumina/parser/PerTileParser.java
deleted file mode 100644
index 94e614b..0000000
--- a/src/java/net/sf/picard/illumina/parser/PerTileParser.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/** Abstract base class for Parsers that open a single tile file at a time and iterate through them. */
-public abstract class PerTileParser<ILLUMINA_DATA extends IlluminaData> implements IlluminaParser<ILLUMINA_DATA> {
- private final IlluminaFileMap tileToFiles;
- private CloseableIterator<ILLUMINA_DATA> currentIterator;
- private Integer nextTile;
- private Integer currentTile;
-
- /** Factory method for the iterator of each tile */
- protected abstract CloseableIterator<ILLUMINA_DATA> makeTileIterator(final File nextTileFile);
-
- public PerTileParser(final IlluminaFileMap tilesToFiles) {
- this.tileToFiles = tilesToFiles;
- this.nextTile = tilesToFiles.firstKey();
- this.currentTile = null;
- }
-
- public PerTileParser(final IlluminaFileMap tilesToFiles, final int nextTile) {
- this.tileToFiles = tilesToFiles;
- this.currentTile = null;
- this.nextTile = nextTile;
-
- if(!tilesToFiles.containsKey(nextTile)) {
- throw new IllegalArgumentException("NextTile (" + nextTile + ") is not contained by tilesToFiles (" + StringUtil.join(",", new ArrayList<Integer>(tilesToFiles.keySet())));
- }
- }
-
- /**
- * Return the tile of the NEXT ILLUMINA_DATA object to be returned by the method next. This might force us to advance to the
- * next file (as it will contains the data for the next) tile/ILLUMINA_DATA object.
- * @return tile number for the next ILLUMINA_DATA object to be returned
- */
- public int getTileOfNextCluster() {
- maybeAdvance();
- return currentTile;
- }
-
- private void advanceTile() {
- if(nextTile == null){
- throw new NoSuchElementException("No more tiles to advance!");
- }
-
- if(currentIterator != null) {
- currentIterator.close();
- }
-
- currentIterator = makeTileIterator(tileToFiles.get(nextTile));
- currentTile = nextTile;
- nextTile = tileToFiles.higherKey(nextTile);
- }
-
- public void seekToTile(int oneBasedTileNumber) {
- nextTile = oneBasedTileNumber;
-
- if(!tileToFiles.containsKey(oneBasedTileNumber)) {
- throw new PicardException("PerTileParser does not contain key(" + oneBasedTileNumber +") keys available (" + StringUtil.join(",", new ArrayList<Integer>(tileToFiles.keySet())) + ")");
- }
-
- if(currentIterator != null) {
- currentIterator.close();
- }
- currentIterator = null;
- }
-
- public void maybeAdvance() {
- if(!hasNext()) {
- throw new NoSuchElementException();
- }
-
- if(currentIterator == null || !currentIterator.hasNext()) {
- advanceTile();
- }
- }
-
- public ILLUMINA_DATA next() {
- maybeAdvance();
-
- return currentIterator.next();
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- public boolean hasNext() {
- // Skip over empty tiles
- while ((currentIterator == null || !currentIterator.hasNext()) && nextTile != null) {
- advanceTile();
- }
- return currentIterator != null && currentIterator.hasNext();
- }
-
- public void close() {
- if(currentIterator != null) {
- currentIterator.close();
- }
- }
-
- public void verifyData(List<Integer> tiles, final int [] cycles) {
- final List<Integer> mapTiles = new ArrayList<Integer>(this.tileToFiles.keySet());
- if(!mapTiles.containsAll(tiles)) {
- throw new PicardException("Missing tiles in PerTileParser expected(" + StringUtil.join(",", tiles) + ") but found (" + StringUtil.join(",", mapTiles) + ")");
- }
-
- if(!tiles.containsAll(mapTiles)) {
- throw new PicardException("Extra tiles where found in PerTileParser expected(" + StringUtil.join(",", tiles) + ") but found (" + StringUtil.join(",", mapTiles) + ")");
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/PerTilePerCycleFileUtil.java b/src/java/net/sf/picard/illumina/parser/PerTilePerCycleFileUtil.java
deleted file mode 100644
index 8565773..0000000
--- a/src/java/net/sf/picard/illumina/parser/PerTilePerCycleFileUtil.java
+++ /dev/null
@@ -1,268 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.fakers.FileFaker;
-import net.sf.picard.illumina.parser.readers.BclReader;
-import net.sf.picard.io.IoUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-import java.util.Map;
-import java.util.HashMap;
-
-public class PerTilePerCycleFileUtil extends ParameterizedFileUtil {
-
- private final CycleIlluminaFileMap cycleFileMap;
- private final Set<Integer> detectedCycles = new TreeSet<Integer>();
-
- public PerTilePerCycleFileUtil(final String extension,
- final File base, final FileFaker faker, final int lane) {
- super(true, extension, base, faker, lane);
- //sideEffect, assigned to numCycles
- this.cycleFileMap = getPerTilePerCycleFiles();
- }
-
- /**
- * For the given tiles, populate a CycleIlluminaFileMap that contains all these tiles and will iterate through
- * all the files for these tiles in expectedBase
- * Side Effect: Assigns numCycles
- *
- * @return A CycleIlluminaFileMap with the listed (or all) tiles for at least expectedCycles number of cycles(or total available
- * cycles if expectedCycles is null)
- */
- protected CycleIlluminaFileMap getPerTilePerCycleFiles() {
- final CycleIlluminaFileMap cycledMap = new CycleIlluminaFileMap();
-
- final File laneDir = base;
- final File[] tempCycleDirs;
- tempCycleDirs = IoUtil.getFilesMatchingRegexp(laneDir, IlluminaFileUtil.CYCLE_SUBDIRECTORY_PATTERN);
- if (tempCycleDirs == null || tempCycleDirs.length == 0) {
- return cycledMap;
- }
-
- for (final File tempCycleDir : tempCycleDirs) {
- detectedCycles.add(getCycleFromDir(tempCycleDir));
- }
-
- final Set<Integer> uniqueTiles = new HashSet<Integer>();
-
- for (final File cycleDir : tempCycleDirs) {
- final IlluminaFileMap fileMap = getTiledFiles(cycleDir, matchPattern);
- uniqueTiles.addAll(fileMap.keySet());
- cycledMap.put(getCycleFromDir(cycleDir), fileMap);
- }
-
- this.tiles = Collections.unmodifiableList(new ArrayList<Integer>(uniqueTiles));
- return cycledMap;
- }
-
- public CycleIlluminaFileMap getFiles() {
- return cycleFileMap;
- }
-
- public CycleIlluminaFileMap getFiles(final List<Integer> tiles) {
- return cycleFileMap.keep(tiles, detectedCycles);
- }
-
- /**
- * Returns a cycleIlluminaFileMap with all available tiles but limited to the cycles passed in. Any cycles that are missing
- * cycle files or directories will be removed from the cycle list that is kept.
- *
- * @param cycles Cycles that should be present in the output CycleIlluminaFileMap
- * @return A CycleIlluminaFileMap with all available tiles but at most the cycles passed in by the cycles parameter
- */
- public CycleIlluminaFileMap getFiles(final int[] cycles) {
- //Remove any cycles that were discovered to be NON-EXISTENT when this util was instantiated
- final Set<Integer> filteredCycles = removeNonExistentCycles(cycles);
- return cycleFileMap.keep(tiles, filteredCycles);
- }
-
- /**
- * Returns a cycleIlluminaFileMap that contains only the tiles and cycles specified (and fewer if the original CycleIlluminaFileMap, created
- * on util instantiation, doesn't contain any of these tiles/cycles).
- *
- * @param cycles Cycles that should be present in the output CycleIlluminaFileMap
- * @return A CycleIlluminaFileMap with at most the tiles/cycles listed in the parameters
- */
- public CycleIlluminaFileMap getFiles(final List<Integer> tiles, final int[] cycles) {
- //Remove any cycles that were discovered to be NON-EXISTENT when this util was instantiated
- final Set<Integer> filteredCycles = removeNonExistentCycles(cycles);
- return cycleFileMap.keep(tiles, filteredCycles);
- }
-
- private Set<Integer> removeNonExistentCycles(final int[] cycles) {
-
- final TreeSet<Integer> inputCyclesSet = new TreeSet<Integer>();
- for (final Integer inputCycle : cycles) {
- inputCyclesSet.add(inputCycle);
- }
-
- inputCyclesSet.retainAll(detectedCycles);
-
- return inputCyclesSet;
- }
-
- public Set<Integer> getDetectedCycles() {
- return detectedCycles;
- }
-
- /**
- * Discover all files of this type in expectedBase that match pattern and construct a list of tiles
- * available based on these files. The same number of tiles is expected in each cycle dir.
- *
- * @return A list of tile integers for all tiles available
- */
- public List<Integer> getTiles() {
- return tiles;
- }
-
- public boolean filesAvailable() {
- boolean filesAvailable = false;
- for (final IlluminaFileMap fileMap : cycleFileMap.values()) {
- if (!fileMap.isEmpty()) {
- filesAvailable = true;
- break;
- }
- }
- return filesAvailable;
- }
-
- @Override
- public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
- final List<String> failures = new LinkedList<String>();
- final Map<Integer, Long> tileToFileLengthMap = new HashMap<Integer, Long>();
-
- if (!base.exists()) {
- failures.add("Base directory(" + base.getAbsolutePath() + ") does not exist!");
- } else {
- final CycleIlluminaFileMap cfm = getFiles(expectedTiles, expectedCycles);
- for (final int currentCycle : expectedCycles) {
- final IlluminaFileMap fileMap = cfm.get(currentCycle);
- if (fileMap != null) {
- for (final int tile : expectedTiles) {
- final File cycleFile = fileMap.get(tile);
- if (cycleFile != null) {
- if (tileToFileLengthMap.get(tile) == null) {
- tileToFileLengthMap.put(tile, cycleFile.length());
- } else if (!extension.equals(".bcl.gz") && tileToFileLengthMap.get(tile) != cycleFile.length()) {
-
- // TODO: The gzip bcl files might not be the same length despite having the same content,
- // for now we're punting on this but this should be looked into at some point
- failures.add("File type " + extension
- + " has cycles files of different length. Current cycle ("
- + currentCycle + ") " +
- "Length of first non-empty file (" + tileToFileLengthMap.get(tile)
- + ") length of current cycle (" + cycleFile.length() + ")"
- + " File(" + cycleFile.getAbsolutePath() + ")");
- }
- } else {
- failures.add("File type " + extension + " is missing a file for cycle " + currentCycle + " and tile " + tile);
- }
- }
- } else {
- failures.add("Missing file for cycle " + currentCycle + " in directory " + base.getAbsolutePath()
- + " for file type " + extension);
- }
- }
-
- }
-
-
- return failures;
- }
-
- @Override
- public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] expectedCycles,
- final IlluminaFileUtil.SupportedIlluminaFormat format) {
- final List<String> failures = new LinkedList<String>();
-
- if (!base.exists()) {
- base.mkdirs();
- }
-
- final Set<Integer> missingCycleSet = new TreeSet<Integer>();
- for (final Integer cycle : expectedCycles) {
- missingCycleSet.add(cycle);
- }
-
- missingCycleSet.removeAll(detectedCycles);
-
- for (final Integer cycle : missingCycleSet) {
- final File cycleDirectory = new File(base, "C" + cycle + ".1");
- if (cycleDirectory.mkdirs()) {
- detectedCycles.add(cycle);
- }
- }
-
- final CycleIlluminaFileMap cfm = getPerTilePerCycleFiles();
- Long cycleSize = null;
- for (final int currentCycle : expectedCycles) {
- final IlluminaFileMap fileMap = cfm.get(currentCycle);
-
- if (fileMap == null) {
- for (final Integer tile : expectedTiles) {
- final File fileToFake = new File(base + File.separator + getFileForCycle(currentCycle, tile));
- try {
- if (cycleSize != null) {
- faker.fakeFile(fileToFake, cycleSize.intValue());
- }
- else{
- faker.fakeFile(fileToFake, 1);
- }
- } catch (final IOException e) {
- failures.add("Could not create fake file: " + e.getMessage());
- }
- }
- } else {
- for (final int tile : expectedTiles) {
- final File cycleFile = fileMap.get(tile);
- if (cycleFile != null && cycleSize == null) {
- cycleSize = BclReader.getNumberOfClusters(cycleFile);
- }
- try {
- if (cycleFile == null) {
- final File fileToFake = new File(base + File.separator + getFileForCycle(currentCycle, tile));
- if (cycleSize != null) {
- faker.fakeFile(fileToFake, cycleSize.intValue());
- } else {
- faker.fakeFile(fileToFake, 1);
- }
- }
- } catch (final IOException e) {
- failures.add("Could not create fake file: " + e.getMessage());
- }
- }
- }
-
- }
-
- for (final Integer cycle : missingCycleSet) {
- failures.add("Missing cycle directory " + cycle + " in directory " + base.getAbsolutePath()
- + " for file type " + extension);
- }
- return failures;
- }
-
- private String getFileForCycle(final int currentCycle, final int tile) {
- return "C" + currentCycle + ".1" + File.separator + "s_" + lane + "_" + tile + extension;
- }
-
- private static int getCycleFromDir(final File tempCycleDir) {
- final String fileName = tempCycleDir.getName();
-
- final Matcher matcher = IlluminaFileUtil.CYCLE_SUBDIRECTORY_PATTERN.matcher(fileName);
- if (!matcher.matches()) {
- throw new PicardException("Invalid cycle directory name " + tempCycleDir.getName());
- }
-
- return Integer.parseInt(matcher.group(1));
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/PosParser.java b/src/java/net/sf/picard/illumina/parser/PosParser.java
deleted file mode 100644
index c6c98b4..0000000
--- a/src/java/net/sf/picard/illumina/parser/PosParser.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.readers.AbstractIlluminaPositionFileReader;
-import net.sf.picard.illumina.parser.readers.ClocsFileReader;
-import net.sf.picard.illumina.parser.readers.LocsFileReader;
-import net.sf.picard.illumina.parser.readers.PosFileReader;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.Set;
-
-import static net.sf.samtools.util.CollectionUtil.makeSet;
-
-/**
- * PosParser parses multiple files formatted as one of the three file formats that contain position information
- * only (pos, locs, and clocs). This parser takes a map from tilesToFiles and a FileType enum value indicating
- * whether or not these are POS,LOCS, or CLOCS files. The only client classes to this class should be IlluminaDataProvider
- * and test classes. Check out AbstractIlluminaFileReader, PosFileReader, LocsFileReader, and ClocsFileReader for
- * more information on Position related illumina files.
- */
-public class PosParser extends PerTileParser<PositionalData> {
- private static Set<IlluminaDataType> supportedTypes = Collections.unmodifiableSet(makeSet(IlluminaDataType.Position));
-
- /** The FileType of the files we are parsing */
- private final IlluminaFileUtil.SupportedIlluminaFormat fileType;
-
- public PosParser(final IlluminaFileMap tilesToFiles, final IlluminaFileUtil.SupportedIlluminaFormat fileType) {
- super(tilesToFiles);
- this.fileType = fileType;
- }
-
- public PosParser(final IlluminaFileMap tilesToFiles, final int startingTile, final IlluminaFileUtil.SupportedIlluminaFormat fileType) {
- super(tilesToFiles, startingTile);
- this.fileType = fileType;
- }
-
- /**
- * Make an CloseableIterator<PositionalData> based on the given file and fileType specified at construction.
- * This method wraps a reader in an iterator that converts it's output to the output format expected by
- * IlluminaDataProvider (PositionalData).
- * @param file A file for the current tile being parsed
- * @return An iterator over the PositionalData in that file.
- */
- @Override
- protected CloseableIterator<PositionalData> makeTileIterator(final File file) {
-
- final AbstractIlluminaPositionFileReader fileReader;
- switch(fileType){
- case Pos:
- fileReader = new PosFileReader(file);
- break;
-
- case Locs:
- fileReader = new LocsFileReader(file);
- break;
-
- case Clocs:
- fileReader = new ClocsFileReader(file);
- break;
-
- default:
- throw new PicardException("Unrecognized pos file type " + fileType.name());
- }
-
- return new CloseableIterator<PositionalData>() {
- private AbstractIlluminaPositionFileReader reader = fileReader;
-
- public void close() {
- reader.close();
- }
-
- public boolean hasNext() {
- return reader.hasNext();
- }
-
- public PositionalData next() {
- final AbstractIlluminaPositionFileReader.PositionInfo nextValue = reader.next();
- return new PositionalData() {
- public int getXCoordinate() {
- return nextValue.xQseqCoord;
- }
-
- public int getYCoordinate() {
- return nextValue.yQseqCoord;
- }
-
- public int getLane() {
- return nextValue.lane;
- }
-
- public int getTile() {
- return nextValue.tile;
- }
- };
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- };
- }
-
- @Override
- public Set<IlluminaDataType> supportedTypes() {
- return supportedTypes;
- }
-
-}
diff --git a/src/java/net/sf/picard/illumina/parser/Range.java b/src/java/net/sf/picard/illumina/parser/Range.java
deleted file mode 100644
index a533fce..0000000
--- a/src/java/net/sf/picard/illumina/parser/Range.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-
-/**
- * While structurally identical to CompositeIndex, this class is maintained as it makes code more readable when the two are used together (see QSeqParser)
- * @author jburke at broadinstitute.org
- */
-public class Range {
- public final int start;
- public final int end;
- public final int length;
- public Range(final int start, final int end) {
- if(end < start) {
- throw new PicardException("Nonsensical Range(" + start + ", " + end + ")");
- }
-
- this.start = start;
- this.end = end;
- this.length = end - start + 1;
- }
-
- @Override
- public boolean equals(final Object object) {
- if(object == null || !(object instanceof Range)) {
- return false;
- }
-
- final Range that = (Range) object;
- return that.start == this.start && that.end == this.end;
- }
-
- @Override
- public int hashCode() {
- return (int)Math.pow(start, end);
- }
-
- @Override
- public String toString() {
- return "Range(" + start + ", " + end + ", " + length +")";
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/ReadData.java b/src/java/net/sf/picard/illumina/parser/ReadData.java
deleted file mode 100644
index e308310..0000000
--- a/src/java/net/sf/picard/illumina/parser/ReadData.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-/**
- * Data for a single end of a paired-end read, a barcode read, or for the entire read if not paired end.
- *
- * @author jburke at broadinstitute.org
- */
-public class ReadData {
- private byte[] bases;
- private byte[] qualities;
- private FourChannelIntensityData rawIntensities;
- private FourChannelIntensityData noise;
- private ReadType readType;
-
- public ReadData() {
- }
-
- public ReadData(ReadType readType) {
- this.readType = readType;
- }
-
- /**
- * @return ASCII byte representation of bases.
- */
- public byte[] getBases() {
- return bases;
- }
-
- public void setBases(final byte[] bases) {
- this.bases = bases;
- }
-
- /**
- * @return Noise values as produced by Illumina software, converted to shorts.
- */
- public FourChannelIntensityData getNoise() {
- return noise;
- }
-
- public void setNoise(final FourChannelIntensityData noise) {
- this.noise = noise;
- }
-
- /**
- * @return Phred-binary scaled qualities. E.g. Q20 is the byte with value==20.
- */
- public byte[] getQualities() {
- return qualities;
- }
-
- public void setQualities(final byte[] qualities) {
- this.qualities = qualities;
- }
-
- /**
- * @return Raw intensity values as produced by Illumina software, converted to shorts.
- */
- public FourChannelIntensityData getRawIntensities() {
- return rawIntensities;
- }
-
- public void setRawIntensities(final FourChannelIntensityData rawIntensities) {
- this.rawIntensities = rawIntensities;
- }
-
- public ReadType getReadType() {
- return readType;
- }
-
- public void setReadType(final ReadType readType) {
- this.readType = readType;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/ReadDescriptor.java b/src/java/net/sf/picard/illumina/parser/ReadDescriptor.java
deleted file mode 100644
index 835ae7e..0000000
--- a/src/java/net/sf/picard/illumina/parser/ReadDescriptor.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-/**
- * Represents one set of cycles in an ReadStructure (e.g. if the ReadStructure is 36TB836T then
- * 36T, 8B, and 36T are invidually represented internally as a ReadDescriptor).
- */
-public class ReadDescriptor {
- public final int length;
- public final ReadType type;
-
- public ReadDescriptor(final int length, final ReadType type) {
- this.length = length;
- this.type = type;
- }
-
- @Override
- public String toString() {
- return this.length + this.type.name();
- }
-
- public boolean equals(final Object other) {
- if(this == other) return true;
- if(other.getClass() != this.getClass()) return false;
-
- final ReadDescriptor that = (ReadDescriptor) other;
- return this.length == that.length && this.type == that.type;
- }
-
- @Override
- public int hashCode() {
- return 31 * this.type.ordinal() + 379 * length;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/ReadStructure.java b/src/java/net/sf/picard/illumina/parser/ReadStructure.java
deleted file mode 100644
index 850b00a..0000000
--- a/src/java/net/sf/picard/illumina/parser/ReadStructure.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.samtools.util.CoordMath;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Describes the intended logical output structure of clusters of an Illumina run.
- * (e.g. If the input data consists of 80 base
- * clusters and we provide a read structure of "36T8B36T" then those bases should be split into 3 reads:
- * read one should be 36 cycles of template,
- * read two should be 8 cycles of barcode,
- * read three should be another 36 cycle template read.)
- * Note: In future releases, ReadStructures will be specified by clients of IlluminaDataProvider(currently
- * read structures are detected by IlluminaDataProviderFactory via the structure of QSeq files). When working with
- * QSeq formats, while the individual reads need not fall on QSeq end file boundaries the total number of cycles
- * should equal the total number of cycles found in all end files for one tile. (e.g. if I have 80 reads and
- * 3 end files per tile, those end files should have a total of 80 reads in them regardless of how many reads
- * appear in each individual file)
- *
- * @author jburke at broadinstitute.org
- */
-public class ReadStructure {
- public static final String PARAMETER_DOC =
- "A description of the logical structure of clusters in an Illumina Run, i.e. a description of the structure IlluminaBasecallsToSam " +
- "assumes the data to be in. It should consist of integer/character pairs describing the number of cycles and the type of those " +
- "cycles (B for Barcode, T for Template, and S for skip). E.g. If the input data consists of 80 base clusters and we provide a " +
- "read structure of \"36T8B8S28T\" then, before being converted to SAM records those bases will be split into 4 reads where " +
- "read one consists of 36 cycles of template, read two consists of 8 cycles of barcode, read three will be an 8 base read of " +
- "skipped cycles and read four is another 28 cycle template read. The read consisting of skipped cycles would NOT be included " +
- "in output SAM/BAM file read groups.";
- public final List<ReadDescriptor> descriptors;
- public final int totalCycles;
- public final int [] readLengths;
-
- public final Substructure barcodes;
- public final Substructure templates;
- public final Substructure skips;
-
- //nonSkips include barcode and template indices in the order they appear in the descriptors list
- public final Substructure nonSkips;
-
- /** Characters representing valid ReadTypes */
- private static final String ValidTypeChars;
-
- /** ValidTypeChars except characters are separated by commas */
- private static final String ValidTypeCharsWSep;
-
- static {
- String validTypes = "";
- String vtWSep = "";
-
- boolean written = false;
- for(ReadType rt : ReadType.values()) {
- if(written) {
- vtWSep += ",";
- }
-
- validTypes += rt.name();
- vtWSep += rt.name();
- }
-
- ValidTypeChars = validTypes;
- ValidTypeCharsWSep = vtWSep;
- }
-
- private static final String ReadStructureMsg = "Read structure must be formatted as follows: " +
- "<number of bases><type><number of bases><type>...<number of bases> where number of bases is a " +
- "positive (NON-ZERO) integer and type is one of the following characters " + ValidTypeCharsWSep +
- " (e.g. 76T8B68T would denote a paired-end run with a 76 base first end an 8 base barcode followed by a 68 base second end).";
- private static final Pattern FullPattern = java.util.regex.Pattern.compile("^((\\d+[" + ValidTypeChars + "]{1}))+$");
- private static final Pattern SubPattern = java.util.regex.Pattern.compile("(\\d+)([" + ValidTypeChars + "]{1})");
-
- /**
- * Copies collection into descriptors (making descriptors unmodifiable) and then calculates relevant statistics about descriptors.
- * @param collection A collection of ReadDescriptors that describes this ReadStructure
- */
- public ReadStructure(final List<ReadDescriptor> collection) {
- if(collection.size() == 0) { //If this changes, change hashcode
- throw new IllegalArgumentException("ReadStructure does not support 0 length clusters!");
- }
-
- final List<Range> allRanges = new ArrayList<Range>(collection.size());
- this.descriptors = Collections.unmodifiableList(collection);
- int cycles = 0;
-
- final List<Integer> nonSkipIndicesList = new ArrayList<Integer>();
- final List<Integer> barcodeIndicesList = new ArrayList<Integer>();
- final List<Integer> templateIndicesList = new ArrayList<Integer>();
- final List<Integer> skipIndicesList = new ArrayList<Integer>();
- readLengths = new int[collection.size()];
-
- int currentCycleIndex = 0; // Current cycle in the entire read structure
- int descIndex = 0;
- for(final ReadDescriptor desc : descriptors) {
- if(desc.length == 0 || desc.length < 0) {
- throw new IllegalArgumentException("ReadStructure only supports ReadDescriptor lengths > 0, found(" + desc.length + ")");
- }
-
- final int endIndexOfRange = CoordMath.getEnd(currentCycleIndex, desc.length);
- allRanges.add(new Range(currentCycleIndex, endIndexOfRange));
- currentCycleIndex = endIndexOfRange + 1;
-
- readLengths[descIndex] = desc.length;
- cycles += desc.length;
- switch(desc.type) {
- case B:
- nonSkipIndicesList.add(descIndex);
- barcodeIndicesList.add(descIndex);
- break;
- case T:
- nonSkipIndicesList.add(descIndex);
- templateIndicesList.add(descIndex);
- break;
- case S:
- skipIndicesList.add(descIndex);
- break;
-
- default:
- throw new IllegalArgumentException("Unsupported ReadType (" + desc.type + ") encountered by IlluminaRunConfiugration!");
- }
- ++descIndex;
- }
-
- this.totalCycles = cycles;
- this.barcodes = new Substructure(barcodeIndicesList, allRanges);
- this.templates = new Substructure(templateIndicesList, allRanges);
- this.skips = new Substructure(skipIndicesList, allRanges);
- this.nonSkips = new Substructure(nonSkipIndicesList, allRanges);
- }
-
- /**
- * Converts readStructureString into a List<ReadDescriptor> and calls the primary constructor using this List as it's argument.
- * @param readStructureString A string of the format <number of bases><type><number of bases><type>...<number of bases><type> describing
- * this read structure
- */
- public ReadStructure(final String readStructureString) {
- this(readStructureStringToDescriptors(readStructureString));
- }
-
- public int getNumDescriptors() {
- return descriptors.size();
- }
-
- /**
- * Converts this object into a String using rules complementary to the single string constructor above.
- * @return A string of the form <number of bases><type><number of bases><type>...<number of bases><type> with one
- * <number of bases><type> per ReadDescriptor in descriptors.
- */
- @Override
- public String toString() {
- String out = "";
- for(final ReadDescriptor rd : descriptors) {
- out += rd.toString();
- }
- return out;
- }
-
- /**
- * Converts readStructureString into a List<ReadDescriptor>
- * @param readStructure A string of the format <number of bases><type><number of bases><type>...<number of bases><type> describing
- * a read structure
- * @return A List<ReadDescriptor> corresponding to the input string
- */
- private final static List<ReadDescriptor> readStructureStringToDescriptors(final String readStructure) {
- final Matcher fullMatcher = FullPattern.matcher(readStructure);
- if(!fullMatcher.matches()) {
- throw new IllegalArgumentException(readStructure + " cannot be parsed as a ReadStructure! " + ReadStructureMsg);
- }
-
-
- final Matcher subMatcher = SubPattern.matcher(readStructure);
- final List<ReadDescriptor> descriptors = new ArrayList<ReadDescriptor>();
- while(subMatcher.find()) {
- final ReadDescriptor rd = new ReadDescriptor(Integer.parseInt(subMatcher.group(1)), ReadType.valueOf(subMatcher.group(2)));
- descriptors.add(rd);
- }
-
- return descriptors;
- }
-
- @Override
- public boolean equals(final Object thatObj) {
- if(this == thatObj) return true;
- if(this.getClass() != thatObj.getClass()) return false;
-
- final ReadStructure that = (ReadStructure) thatObj;
- if(this.descriptors.size() != that.descriptors.size()) {
- return false;
- }
-
- for(int i = 0; i < this.descriptors.size(); i++) {
- if(!this.descriptors.get(i).equals(that.descriptors.get(i))) {
- return false;
- }
- }
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int res = descriptors.get(0).hashCode();
- for(int i = 1; i < descriptors.size(); i++) {
- res *= descriptors.get(i).hashCode();
- }
-
- return res;
- }
-
- /** Represents a subset of ReadDescriptors in the containing ReadStructure, they ARE NOT necessarily contiguous
- * in the containing ReadStrucure but they ARE in the order they appear in the containing ReadStructure */
- public class Substructure implements Iterable<ReadDescriptor> {
- /** Total number of descriptors == readTypeIndices.length */
- private final int numDescriptors;
-
- /** The indices into the ReadStructure for this Substructure */
- private final int [] descriptorIndices;
-
- /** The length of each individual ReadDescriptor in this substructure */
- private final int [] descriptorLengths;
-
- /** Ranges of cycle indexes (cycle # - 1) covered by each descriptor */
- private final Range [] cycleIndexRanges;
-
- /** The total number of cycles covered by this Substructure */
- private final int totalCycles;
-
- /**
- * Indices into the ReadStructure.descriptors for this specific substructure, indices
- * must be in the order they appear in the descriptors list (but the indices do NOT have to be continuous)
- * @param descriptorIndices A list of indices into ReadStructure.descriptors of the enclosing ReadStructure
- * @param allRanges A list of ranges for all reads (not just those in this substructure) in the same order as ReadStructure.descriptors
- */
- public Substructure(final List<Integer> descriptorIndices, final List<Range> allRanges) {
- this.numDescriptors = descriptorIndices.size();
-
- this.descriptorIndices = new int[numDescriptors];
- this.descriptorLengths = new int[numDescriptors];
- for(int i = 0; i < descriptorIndices.size(); i++) {
- this.descriptorIndices[i] = descriptorIndices.get(i);
- this.descriptorLengths[i] = descriptors.get(this.descriptorIndices[i]).length;
- }
-
- this.cycleIndexRanges = new Range[numDescriptors];
- for(int i = 0; i < numDescriptors; i++) {
- this.cycleIndexRanges[i] = allRanges.get(this.descriptorIndices[i]);
- }
-
- int totalLength = 0;
- for(final int length : descriptorLengths) {
- totalLength += length;
- }
- totalCycles = totalLength;
- }
-
- public ReadDescriptor get(final int index) {
- return descriptors.get(descriptorIndices[index]);
- }
-
- public boolean isEmpty() {
- return numDescriptors == 0;
- }
-
- public int length() {
- return numDescriptors;
- }
-
- public int getTotalCycles() {
- return totalCycles;
- }
-
- public int [] getIndices() {
- return descriptorIndices;
- }
-
- public int [] getDescriptorLengths() {
- return descriptorLengths;
- }
-
- public Range [] getCycleIndexRanges() {
- return cycleIndexRanges;
- }
- public Iterator<ReadDescriptor> iterator() {
- return new IndexedIterator(descriptorIndices);
- }
-
- public int [] getCycles() {
- int [] cycles = new int[totalCycles];
- int cycleIndex = 0;
- for(final Range range : cycleIndexRanges) {
- for(int i = range.start; i <= range.end; i++) {
- cycles[cycleIndex++] = i+1;
- }
- }
- return cycles;
- }
-
- /** Create a ReadStructure from this substructure composed of only the descriptors contained in this substructure, Any
- * ReadDescriptors not in this substructure are treated as if they don't exist (e.g. if you have a readStructure
- * (36T8S8B36T) and this substructure consists of all the non-skipped reads than toReadStructure would return
- * (36T8B36T) in ReadStructure form*/
- public ReadStructure toReadStructure() {
- final List<ReadDescriptor> descriptors = new ArrayList<ReadDescriptor>(numDescriptors);
- for(final ReadDescriptor rd : this) {
- descriptors.add(rd);
- }
- return new ReadStructure(descriptors);
- }
- }
-
- /** An iterator over a Substructure's ReadDescriptors */
- private class IndexedIterator implements Iterator<ReadDescriptor> {
- private int index;
- private int [] indices;
- public IndexedIterator(final int [] indices) {
- this.indices = indices;
- this.index = 0;
- }
-
- public boolean hasNext() {
- return index < indices.length;
- }
-
- public ReadDescriptor next() {
- return descriptors.get(indices[index++]);
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/ReadType.java b/src/java/net/sf/picard/illumina/parser/ReadType.java
deleted file mode 100644
index dfc27c6..0000000
--- a/src/java/net/sf/picard/illumina/parser/ReadType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-/**
-* A read type describes a stretch of cycles in an ReadStructure
-* (e.g. Assume we have a paired end/barcoded run with the 76 template cycles followed by 8 barcode cycles followed by
-* another 76 template reads, the run would be represented by the ReadStructure 76T8B76T)
-* Note: Currently SKIP is unused by IlluminaBasecallsToSam, ExtractIlluminaBarcodes, and IlluminaDataProvider
-**/
-public enum ReadType {
- T, B, S;
-
- public static final ReadType Template = T;
- public static final ReadType Barcode = B;
- public static final ReadType Skip = S;
-}
diff --git a/src/java/net/sf/picard/illumina/parser/Tile.java b/src/java/net/sf/picard/illumina/parser/Tile.java
deleted file mode 100644
index 6aff9ad..0000000
--- a/src/java/net/sf/picard/illumina/parser/Tile.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-import net.sf.samtools.util.CollectionUtil;
-
-import java.util.*;
-
-/** Represents a tile from TileMetricsOut.bin. Stores information on location (lane & tile #, density, number of clusters and the
- * phasing/prephasing values associated with this tile
- *
- * @author jgentry
- */
-public class Tile {
- private final int lane, tile;
- private final float density, clusters;
-
- private final Map<TileTemplateRead, Float> phasingMap;
- private final Map<TileTemplateRead, Float> prePhasingMap;
-
- /**
- * @param tilePhasingValues Either one or two TilePhasingValues, corresponding to the FIRST and potentially SECOND template reads
- */
- public Tile(final int lane, final int tile, final float density, final float clusters, final TilePhasingValue... tilePhasingValues) {
- this.lane = lane;
- this.tile = tile;
- this.density = density;
- this.clusters = clusters;
-
- final Collection<TilePhasingValue> phasingValues = ensureSoleTilePhasingValuesPerRead(Arrays.asList(tilePhasingValues));
-
- final Map<TileTemplateRead, Float> phasingMap = new HashMap<TileTemplateRead, Float>();
- final Map<TileTemplateRead, Float> prePhasingMap = new HashMap<TileTemplateRead, Float>();
-
- /** For each of the TileReads, assign their phasing & prephasing values to the respective maps, which we will
- * use later to calculate the medians
- */
- for (final TilePhasingValue phasingValue : phasingValues) {
- phasingMap.put(phasingValue.getTileTemplateRead(), phasingValue.getPhasingValue());
- prePhasingMap.put(phasingValue.getTileTemplateRead(), phasingValue.getPrePhasingValue());
- }
-
- this.phasingMap = Collections.unmodifiableMap(phasingMap);
- this.prePhasingMap = Collections.unmodifiableMap(prePhasingMap);
- }
-
- /** Returns the number of this tile's parent lane. */
- public int getLaneNumber() {
- return lane;
- }
-
- /** Returns the number/name of this tile. */
- public int getTileNumber() {
- return tile;
- }
-
- /** Returns the cluster density of this tile, in units of [cluster/mm^2]. */
- public float getClusterDensity() {
- return density;
- }
-
- /** Returns the number of on this tile. */
- public float getClusterCount() {
- return clusters;
- }
-
- public Map<TileTemplateRead, Float> getPhasingMap() {
- return phasingMap;
- }
-
- public Map<TileTemplateRead, Float> getPrePhasingMap() {
- return prePhasingMap;
- }
-
- /** For any given TileTemplateRead, we want to make sure that there is only a single TilePhasingValue */
- private static Collection<TilePhasingValue> ensureSoleTilePhasingValuesPerRead(final Collection<TilePhasingValue> tilePhasingValues) {
- final Map<TileTemplateRead, Collection<TilePhasingValue>> partitionedMap = CollectionUtil.partition(tilePhasingValues,
- new CollectionUtil.Partitioner<TilePhasingValue, TileTemplateRead>() {
- @Override
- public TileTemplateRead getPartition(final TilePhasingValue phasingValue) {
- return phasingValue.getTileTemplateRead();
- }
- });
-
- final Collection<TilePhasingValue> newTilePhasingValues = new LinkedList<TilePhasingValue>();
- for (final TileTemplateRead read : partitionedMap.keySet()) {
- newTilePhasingValues.add(CollectionUtil.getSoleElement(partitionedMap.get(read)));
- }
-
- return newTilePhasingValues;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/TileIndex.java b/src/java/net/sf/picard/illumina/parser/TileIndex.java
deleted file mode 100644
index 57dabb8..0000000
--- a/src/java/net/sf/picard/illumina/parser/TileIndex.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.Defaults;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.IOUtil;
-
-import java.io.*;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.*;
-
-/**
- * Load a file containing 8-byte records like this:
- * tile number: 4-byte int
- * number of clusters in tile: 4-byte int
- * Number of records to read is determined by reaching EOF.
- */
-public class TileIndex implements Iterable<TileIndex.TileIndexRecord> {
- private final File tileIndexFile;
- private final List<TileIndexRecord> tiles = new ArrayList<TileIndexRecord>();
-
- TileIndex(final File tileIndexFile) {
- try {
- this.tileIndexFile = tileIndexFile;
- final InputStream is = IOUtil.maybeBufferInputStream(new FileInputStream(tileIndexFile));
- final ByteBuffer buf = ByteBuffer.allocate(8);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- int absoluteRecordIndex = 0;
- int numTiles = 0;
- while (readTileIndexRecord(buf.array(), buf.capacity(), is)) {
- buf.rewind();
- buf.limit(buf.capacity());
- final int tile = buf.getInt();
- // Note: not handling unsigned ints > 2^31, but could if one of these exceptions is thrown.
- if (tile < 0) throw new PicardException("Tile number too large in " + tileIndexFile.getAbsolutePath());
- final int numClusters = buf.getInt();
- if (numClusters < 0) throw new PicardException("Cluster size too large in " + tileIndexFile.getAbsolutePath());
- tiles.add(new TileIndexRecord(tile, numClusters, absoluteRecordIndex, numTiles++));
- absoluteRecordIndex += numClusters;
- }
- CloserUtil.close(is);
- } catch (final IOException e) {
- throw new PicardException("Problem reading " + tileIndexFile.getAbsolutePath(), e);
- }
- }
-
- public File getFile() {
- return tileIndexFile;
- }
-
- public int getNumTiles() {
- return tiles.size();
- }
-
- private boolean readTileIndexRecord(final byte[] buf, final int numBytes, final InputStream is) throws IOException {
- int totalBytesRead = 0;
- while (totalBytesRead < numBytes) {
- final int bytesRead = is.read(buf, totalBytesRead, numBytes - totalBytesRead);
- if (bytesRead == -1) {
- if (totalBytesRead != 0) {
- throw new PicardException(tileIndexFile.getAbsolutePath() + " has incomplete last block");
- } else return false;
- }
- totalBytesRead += bytesRead;
- }
- return true;
- }
-
- public List<Integer> getTiles() {
- final List<Integer> ret = new ArrayList<Integer>(tiles.size());
- for (final TileIndexRecord rec : tiles) ret.add(rec.tile);
- return ret;
- }
-
- public List<String> verify(final List<Integer> expectedTiles) {
- final Set<Integer> tileSet = new HashSet<Integer>(tiles.size());
- for (final TileIndexRecord rec : tiles) tileSet.add(rec.tile);
- final List<String> failures = new LinkedList<String>();
- for (final int expectedTile : expectedTiles) {
- if (!tileSet.contains(expectedTile)) {
- failures.add("Tile " + expectedTile + " not found in " + tileIndexFile.getAbsolutePath());
- }
- }
- return failures;
- }
-
- @Override
- public Iterator<TileIndexRecord> iterator() {
- return tiles.iterator();
- }
-
- /**
- * @throws java.util.NoSuchElementException if tile is not found
- */
- public TileIndexRecord findTile(final int tileNumber) {
- for (final TileIndexRecord rec : this) {
- if (rec.tile == tileNumber) return rec;
- if (rec.tile > tileNumber) {
- break;
- }
- }
- throw new NoSuchElementException(String.format("Tile %d not found in %s", tileNumber, tileIndexFile));
- }
-
- public static class TileIndexRecord {
- /**
- * Number of the tile, e.g. 11101. These don't necessarily start at 0, and there may be gaps.
- */
- final int tile;
-
- final int numClustersInTile;
-
- public int getNumClustersInTile() {
- return numClustersInTile;
- }
-
- public int getZeroBasedTileNumber() {
- return zeroBasedTileNumber;
- }
-
- /**
- * I.e. the sum of numClustersInTile for all tiles preceding this one.
- */
- final int indexOfFirstClusterInTile;
-
- /**
- * A contiguous numbering of tiles starting at 0.
- */
- final int zeroBasedTileNumber;
-
- private TileIndexRecord(final int tile, final int numClustersInTile, final int indexOfFirstClusterInTile, final int zeroBasedTileNumber) {
- this.tile = tile;
- this.numClustersInTile = numClustersInTile;
- this.indexOfFirstClusterInTile = indexOfFirstClusterInTile;
- this.zeroBasedTileNumber = zeroBasedTileNumber;
- }
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/TileMetricsUtil.java b/src/java/net/sf/picard/illumina/parser/TileMetricsUtil.java
deleted file mode 100644
index 6e0bad6..0000000
--- a/src/java/net/sf/picard/illumina/parser/TileMetricsUtil.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.readers.TileMetricsOutReader;
-import net.sf.picard.illumina.parser.readers.TileMetricsOutReader.IlluminaTileMetrics;
-import net.sf.picard.util.IterableAdapter;
-import net.sf.samtools.util.CollectionUtil;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.*;
-
-/**
- * Utility for reading the tile data from an Illumina run directory's TileMetricsOut.bin file
- *
- * @author mccowan
- */
-public class TileMetricsUtil {
- /** The path to the directory containing the tile metrics file relative to the basecalling directory. */
- public static String INTEROP_SUBDIRECTORY_NAME = "InterOp";
-
- /** The expected name of the tile metrics output file. */
- public static String TILE_METRICS_OUT_FILE_NAME = "TileMetricsOut.bin";
-
- /** Returns the path to the TileMetrics file given the basecalling directory. */
- public static File renderTileMetricsFileFromBasecallingDirectory(final File illuminaRunDirectory) {
- return new File(new File(illuminaRunDirectory, INTEROP_SUBDIRECTORY_NAME), TILE_METRICS_OUT_FILE_NAME);
- }
-
- /**
- * Returns an unmodifiable collection of tile data read from the provided file. For each tile we will extract:
- * - lane number
- * - tile number
- * - density
- * - cluster ID
- * - Phasing & Prephasing for first template read (if available)
- * - Phasing & Prephasing for second template read (if available)
- */
- public static Collection<Tile> parseTileMetrics(final File tileMetricsOutFile, final ReadStructure readStructure) throws FileNotFoundException {
- // Get the tile metrics lines from TileMetricsOut, keeping only the last value for any Lane/Tile/Code combination
- final Collection<IlluminaTileMetrics> tileMetrics = determineLastValueForLaneTileMetricsCode(new TileMetricsOutReader
- (tileMetricsOutFile));
-
- // Collect the tiles by lane & tile, and then collect the metrics by lane
- final Map<String, Collection<IlluminaTileMetrics>> locationToMetricsMap = partitionTileMetricsByLocation(tileMetrics);
- final Collection<Tile> tiles = new LinkedList<Tile>();
- for (final Map.Entry<String, Collection<IlluminaTileMetrics>> entry : locationToMetricsMap.entrySet()) {
- final Collection<IlluminaTileMetrics> tileRecords = entry.getValue();
-
- // Get a mapping from metric code number to the corresponding IlluminaTileMetrics
- final Map<Integer, Collection<IlluminaTileMetrics>> codeMetricsMap = partitionTileMetricsByCode(tileRecords);
-
- final Set<Integer> observedCodes = codeMetricsMap.keySet();
- if (!(observedCodes.contains(IlluminaMetricsCode.DENSITY_ID.getMetricsCode()) && observedCodes.contains(IlluminaMetricsCode.CLUSTER_ID.getMetricsCode())))
- throw new PicardException(String.format("Expected to find cluster and density record codes (%s and %s) in records read for tile location %s (lane:tile), but found only %s.",
- IlluminaMetricsCode.CLUSTER_ID.getMetricsCode(), IlluminaMetricsCode.DENSITY_ID.getMetricsCode(), entry.getKey(), observedCodes));
-
- final IlluminaTileMetrics densityRecord = CollectionUtil.getSoleElement(codeMetricsMap.get(IlluminaMetricsCode.DENSITY_ID.getMetricsCode()));
- final IlluminaTileMetrics clusterRecord = CollectionUtil.getSoleElement(codeMetricsMap.get(IlluminaMetricsCode.CLUSTER_ID.getMetricsCode()));
-
- // Snag the phasing data for each read in the read structure. For both types of phasing values, this is the median of all of the individual values seen
- final Collection<TilePhasingValue> tilePhasingValues = getTilePhasingValues(codeMetricsMap, readStructure);
-
- tiles.add(new Tile(densityRecord.getLaneNumber(), densityRecord.getTileNumber(), densityRecord.getMetricValue(), clusterRecord.getMetricValue(),
- tilePhasingValues.toArray(new TilePhasingValue[tilePhasingValues.size()])));
- }
-
- return Collections.unmodifiableCollection(tiles);
- }
-
- /** Pulls out the phasing & prephasing value for the template reads and returns a collection of TilePhasingValues representing these */
- private static Collection<TilePhasingValue> getTilePhasingValues(final Map<Integer, Collection<IlluminaTileMetrics>> codeMetricsMap, final ReadStructure readStructure) {
- boolean isFirstRead = true;
- final Collection<TilePhasingValue> tilePhasingValues = new ArrayList<TilePhasingValue>();
- for (int descriptorIndex = 0; descriptorIndex < readStructure.descriptors.size(); descriptorIndex++) {
- if (readStructure.descriptors.get(descriptorIndex).type == ReadType.Template) {
- final TileTemplateRead tileTemplateRead = isFirstRead ? TileTemplateRead.FIRST : TileTemplateRead.SECOND;
- // For both phasing & prephasing, pull out the value and create a TilePhasingValue for further processing
- final int phasingCode = IlluminaMetricsCode.getPhasingCode(descriptorIndex, IlluminaMetricsCode.PHASING_BASE);
- final int prePhasingCode = IlluminaMetricsCode.getPhasingCode(descriptorIndex, IlluminaMetricsCode.PREPHASING_BASE);
-
- if (!(codeMetricsMap.containsKey(phasingCode) && codeMetricsMap.containsKey(prePhasingCode))) {
- throw new PicardException("Don't have both phasing and prephasing values for tile");
- }
-
- tilePhasingValues.add(new TilePhasingValue(tileTemplateRead,
- CollectionUtil.getSoleElement(codeMetricsMap.get(phasingCode)).getMetricValue(),
- CollectionUtil.getSoleElement(codeMetricsMap.get(prePhasingCode)).getMetricValue()));
- isFirstRead = false;
- }
- }
-
- return tilePhasingValues;
- }
-
- /** According to Illumina, for every lane/tile/code combination they will only use the last value. Filter out the previous values */
- private static Collection<IlluminaTileMetrics> determineLastValueForLaneTileMetricsCode(final Iterator<IlluminaTileMetrics>
- tileMetricsIterator) {
- final Map<TileMetricsOutReader.IlluminaLaneTileCode, IlluminaTileMetrics> filteredTileMetrics = new HashMap<TileMetricsOutReader.IlluminaLaneTileCode, IlluminaTileMetrics>();
- for (final IlluminaTileMetrics illuminaTileMetrics : new IterableAdapter<IlluminaTileMetrics>(tileMetricsIterator)) {
- filteredTileMetrics.put(illuminaTileMetrics.getLaneTileCode(), illuminaTileMetrics);
- }
-
- return filteredTileMetrics.values();
- }
-
- private static String renderMetricLocationKey(final IlluminaTileMetrics metric) {
- return String.format("%s:%s", metric.getLaneNumber(), metric.getTileNumber());
- }
-
- // Wrapper around CollectionUtil.Partitioner, purely to de-bulk the actual methods
- private static Map<Integer, Collection<IlluminaTileMetrics>> partitionTileMetricsByCode(final Collection<IlluminaTileMetrics> tileMetrics) {
- return CollectionUtil.partition(tileMetrics, new CollectionUtil.Partitioner<IlluminaTileMetrics, Integer>() {
- @Override
- public Integer getPartition(final IlluminaTileMetrics metric) {
- return metric.getMetricCode();
- }
- });
- }
-
- // Wrapper around CollectionUtil.Partitioner, purely to de-bulk the actual methods
- private static Map<String, Collection<IlluminaTileMetrics>> partitionTileMetricsByLocation(final Collection<IlluminaTileMetrics> tileMetrics) {
- return CollectionUtil.partition(tileMetrics, new CollectionUtil.Partitioner<IlluminaTileMetrics, String>() {
- @Override
- public String getPartition(final IlluminaTileMetrics metric) {
- return renderMetricLocationKey(metric);
- }
- });
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/TilePhasingValue.java b/src/java/net/sf/picard/illumina/parser/TilePhasingValue.java
deleted file mode 100644
index c94379d..0000000
--- a/src/java/net/sf/picard/illumina/parser/TilePhasingValue.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-/**
- * Captures information about a phasing value - Which read it corresponds to, which phasing type and a median value
- *
- * @author jgentry
- */
-public class TilePhasingValue {
- private final TileTemplateRead tileTemplateRead;
- private final float phasingValue;
- private final float prePhasingValue;
-
- public TilePhasingValue(final TileTemplateRead tileTemplateRead, final float phasingValue, final float prePhasingValue) {
- this.tileTemplateRead = tileTemplateRead;
- this.phasingValue = phasingValue;
- this.prePhasingValue = prePhasingValue;
- }
-
- public TileTemplateRead getTileTemplateRead() {
- return tileTemplateRead;
- }
-
- public float getPhasingValue() {
- return phasingValue;
- }
-
- public float getPrePhasingValue() {
- return prePhasingValue;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/TileTemplateRead.java b/src/java/net/sf/picard/illumina/parser/TileTemplateRead.java
deleted file mode 100644
index ef60a66..0000000
--- a/src/java/net/sf/picard/illumina/parser/TileTemplateRead.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.illumina.parser;
-
-/** Defines the first or second template read for a tile
- * @author jgentry
- */
-public enum TileTemplateRead {
- FIRST, SECOND
-}
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/BarcodeFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/BarcodeFileFaker.java
deleted file mode 100644
index b199963..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/BarcodeFileFaker.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-/**
- * Created by jcarey on 3/13/14.
- */
-public class BarcodeFileFaker extends FileFaker {
- private final String barcodeString = "1\tn\t \n";
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- buffer.put(barcodeString.getBytes());
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- @Override
- protected int bufferSize() {
- return barcodeString.getBytes().length;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/BciFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/BciFileFaker.java
deleted file mode 100644
index b7af331..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/BciFileFaker.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.FileChannel;
-import java.util.List;
-
-/**
- * Created by jcarey on 3/14/14.
- */
-public class BciFileFaker extends FileFaker {
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- for (final Integer tile : tiles) {
- buffer.putInt(tile);
- buffer.putInt(1);
- }
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- @Override
- protected int bufferSize() {
- return 8 * tiles.size();
- }
-
- public void fakeBciFile(final File bci, final List<Integer> expectedTiles) throws IOException {
- tiles = expectedTiles;
- final FileOutputStream fileOutputStream = new FileOutputStream(bci);
- final FileChannel channel = fileOutputStream.getChannel();
- final ByteBuffer buffer = ByteBuffer.allocate(8 * expectedTiles.size());
- buffer.order(ByteOrder.LITTLE_ENDIAN);
-
- fakeFile(buffer);
- buffer.flip();
-
- channel.write(buffer);
- channel.force(true);
-
- CloserUtil.close(channel);
- CloserUtil.close(fileOutputStream);
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/BclFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/BclFileFaker.java
deleted file mode 100644
index 527ddf6..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/BclFileFaker.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-public class BclFileFaker extends FileFaker {
-
- @Override
- public void fakeFile(final ByteBuffer buffer) {
-
- // Write the number of elements to the header. The state variable "size" contains
- // the number of elements; we've allocated "size" plus the size of the header
- // (four bytes) to the buffer.
- buffer.putInt(size);
-
- while (size > 0) {
- // Fill the file with no calls
- buffer.put((byte) 0);
- size--;
- }
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- protected int bufferSize() {
- return size + 4;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/ClocsFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/ClocsFileFaker.java
deleted file mode 100644
index 7d129cf..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/ClocsFileFaker.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-public class ClocsFileFaker extends FileFaker {
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- buffer.put((byte) 1);
- buffer.putInt(1);
- buffer.put((byte) (0xff & 1));
- buffer.putFloat((byte) (0xff & 5));
- buffer.putFloat((byte) (0xff & 5));
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- @Override
- protected int bufferSize() {
- return (Integer.SIZE * 2) + (Float.SIZE * 3);
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/FileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/FileFaker.java
deleted file mode 100644
index 77e664d..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/FileFaker.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import net.sf.picard.illumina.parser.readers.BclReader;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.Channels;
-import java.nio.channels.WritableByteChannel;
-import java.util.Collections;
-import java.util.List;
-import java.util.zip.GZIPOutputStream;
-
-public abstract class FileFaker {
-
- int size;
- List<Integer> tiles;
-
- protected abstract void fakeFile(ByteBuffer buffer);
-
- protected abstract boolean addLeadingZeros();
-
- protected abstract int bufferSize();
-
- public void fakeFile(final File base, final int tile, final int lane, final String extension) throws IOException {
- fakeFile(base, Collections.singletonList(tile), lane, extension);
- }
-
- public void fakeFile(final File base, final List<Integer> expectedTiles, final int lane, final String extension)
- throws IOException {
- if (base.exists() || base.mkdirs()) {
- this.tiles = expectedTiles;
- final File fakeFile;
- if (expectedTiles.size() == 1) {
- String longTileName = String.valueOf(tiles.get(0));
- if (addLeadingZeros()) {
- while (longTileName.length() < 4) {
- longTileName = "0" + longTileName;
- }
- }
- fakeFile = new File(base, String.format("s_%d_%s%s", lane, longTileName, extension));
- } else {
- fakeFile = new File(base, String.format("s_%s%s", lane, extension));
- }
-
- fakeFile(fakeFile, bufferSize());
- }
-
- }
-
- public void fakeFile(final File cycleFile, Integer size) throws IOException {
- if (size == null) {
- size = 1;
- }
- this.size = size;
-
- final OutputStream outputStream;
- if (BclReader.isGzipped(cycleFile)) outputStream = new GZIPOutputStream(new FileOutputStream(cycleFile));
- else if (BclReader.isBlockGzipped(cycleFile)) outputStream = new BlockCompressedOutputStream(cycleFile);
- else outputStream = new FileOutputStream(cycleFile);
-
- final WritableByteChannel channel = Channels.newChannel(outputStream);
- final ByteBuffer buffer = ByteBuffer.allocate(this.bufferSize());
- buffer.order(ByteOrder.LITTLE_ENDIAN);
-
- fakeFile(buffer);
-
- buffer.flip();
-
- channel.write(buffer);
-
- channel.close();
- outputStream.close();
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/FilterFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/FilterFileFaker.java
deleted file mode 100644
index dd5be22..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/FilterFileFaker.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-/**
- * Created by jcarey on 3/13/14.
- */
-public class FilterFileFaker extends FileFaker {
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- buffer.putInt(0);
- buffer.putInt(3);
- buffer.putInt(1);
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return true;
- }
-
- @Override
- protected int bufferSize() {
- return Integer.SIZE * 3;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/LocsFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/LocsFileFaker.java
deleted file mode 100644
index 53591f7..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/LocsFileFaker.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-/**
- * Created by jcarey on 3/13/14.
- */
-public class LocsFileFaker extends FileFaker {
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- buffer.putInt(1);
- buffer.putFloat(1.0f);
- buffer.putInt(1);
- buffer.putFloat(5.0f);
- buffer.putFloat(5.0f);
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- @Override
- protected int bufferSize() {
- return (Integer.SIZE * 2) + (Float.SIZE * 3);
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/MultiTileBclFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/MultiTileBclFileFaker.java
deleted file mode 100644
index 56e4c59..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/MultiTileBclFileFaker.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-/**
- * Created by jcarey on 3/13/14.
- */
-public class MultiTileBclFileFaker extends FileFaker {
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- buffer.putInt(1);
- for (final Integer tile : tiles) {
- long perTileSize = size;
- while (perTileSize > 0) {
- //fill the file with no calls
- buffer.put((byte) 0);
- perTileSize--;
- }
- }
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- @Override
- protected int bufferSize() {
- return ((size - Integer.SIZE) * tiles.size()) + Integer.SIZE;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/MultiTileLocsFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/MultiTileLocsFileFaker.java
deleted file mode 100644
index 13fd569..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/MultiTileLocsFileFaker.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-/**
- * Created by jcarey on 3/13/14.
- */
-public class MultiTileLocsFileFaker extends FileFaker {
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- buffer.putInt(1);
- buffer.putFloat(1.0f);
- buffer.putInt(1);
- for (int count = 0; count < tiles.size(); count++) {
- buffer.putFloat(5.0f + (count * 0.5f));
- buffer.putFloat(5.0f + (count * 0.5f));
- }
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- @Override
- protected int bufferSize() {
- return (Integer.SIZE * 2) + (Float.SIZE * tiles.size()) + Float.SIZE;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/fakers/PosFileFaker.java b/src/java/net/sf/picard/illumina/parser/fakers/PosFileFaker.java
deleted file mode 100644
index a11ed22..0000000
--- a/src/java/net/sf/picard/illumina/parser/fakers/PosFileFaker.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import java.nio.ByteBuffer;
-
-/**
- * Created by jcarey on 3/13/14.
- */
-public class PosFileFaker extends FileFaker {
- private final String posFileString = "102.0\t303.3\n";
-
- @Override
- protected void fakeFile(final ByteBuffer buffer) {
- buffer.put(posFileString.getBytes());
- }
-
- @Override
- protected boolean addLeadingZeros() {
- return false;
- }
-
- @Override
- protected int bufferSize() {
- return posFileString.getBytes().length;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/illumina/parser/readers/AbstractIlluminaPositionFileReader.java b/src/java/net/sf/picard/illumina/parser/readers/AbstractIlluminaPositionFileReader.java
deleted file mode 100644
index 0473a40..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/AbstractIlluminaPositionFileReader.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.util.NoSuchElementException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * The position files of Illumina are nearly the same form: Pos files consist of text based tabbed
- * x-y coordinate float pairs, locs files are binary x-y float pairs, clocs are compressed binary
- * x-y float pairs. Each of these file types we read sequentially and are really concerned with
- * iterating over the coordinates and returning them as as they would appear in a QSeq file.
- * Therefore, this abstract base class provides the basic functionality for iterating over
- * the values found in these files and converting them into qseq style coordinates.
- *
- * Currently these readers also return lane/tile but this will be unnecessary in future releases.
- */
-
-public abstract class AbstractIlluminaPositionFileReader implements CloseableIterator<AbstractIlluminaPositionFileReader.PositionInfo> {
- public static final float MAX_POS = 9999999.99f;
-
- /**
- * At least one NextSeq run produced a small negative value for y coordinate (-5), so allow small
- * negative values and see what happens.
- */
- public static final float MIN_POS = -10.0f;
-
- public class PositionInfo {
- /** The x-position as it occurs in the file being read */
- public final float xPos;
-
- /** The y-position as it occurs in the file being read*/
- public final float yPos;
-
- /** The lane, which is determined from the file name*/
- public final int lane;
-
- /** The tile, which is determined from the file name*/
- public final int tile;
-
- /** The QSeq style x-coordinat, an integer = Math.round(xPos*10 + 1000)*/
- public final int xQseqCoord;
-
- /** The QSeq style y-coordinates, an integer = Math.round(yPos*10 + 1000)*/
- public final int yQseqCoord;
-
- public PositionInfo(final float x, final float y, final int lane, final int tile) {
- if(x < MIN_POS || y < MIN_POS || x > MAX_POS || y > MAX_POS) {
-
- throw new IllegalArgumentException(
- String.format("Cluster location not in the range %f..%f. x: %f; y: %f; lane: %d; tile: %d",
- MIN_POS, MAX_POS, x, y, lane, tile));
- }
-
- this.xPos = x;
- this.yPos = y;
- this.xQseqCoord = posToQSeqCoord(x);
- this.yQseqCoord = posToQSeqCoord(y);
- this.lane = lane;
- this.tile = tile;
- }
-
- /** Convert a value in float form as it occurs in pos,locs,and clocs files into integer as it is found in QSeqs */
- private int posToQSeqCoord(final float pos) {
- return Math.round(pos * 10 + 1000);
- }
-
- public boolean equals(final Object other) {
- if(other == null || other.getClass() != AbstractIlluminaPositionFileReader.PositionInfo.class) {
- return false;
- }
- if(other == this) return true;
- final PositionInfo otherPi = (PositionInfo) other;
- return this.xPos == otherPi.xPos && this.yPos == otherPi.yPos &&
- this.lane == otherPi.lane && this.tile == otherPi.tile &&
- this.xQseqCoord == otherPi.xQseqCoord && this.yQseqCoord == otherPi.yQseqCoord;
- }
- }
-
- //Note: Perhaps use the IlluminaFileUtil to do this part
- private static final Pattern FileNamePattern = Pattern.compile("^s_(\\d+)_(\\d+)(_pos\\.txt|\\.locs|\\.clocs|_pos\\.txt.gz|_pos\\.txt.bz2)$");
-
- private final File file;
- private final int lane;
- private final int tile;
-
- public AbstractIlluminaPositionFileReader(final File file) {
- this.file = file;
-
- final int [] laneAndTile = fileNameToLaneAndTile(file.getName());
- lane = laneAndTile[0];
- tile = laneAndTile[1];
- }
-
- /**
- * Use this ctor if lane and tile are not discernible from file name.
- * @param file
- * @param lane
- * @param tile
- */
- public AbstractIlluminaPositionFileReader(final File file, final int lane, final int tile) {
- this.file = file;
- this.lane = lane;
- this.tile = tile;
- }
-
- public int getTile() {
- return tile;
- }
-
- public int getLane() {
- return lane;
- }
-
- public File getFile() {
- return file;
- }
-
- /** Extract the lane/tile from the given filename **/
- private int [] fileNameToLaneAndTile(final String fileName) {
- final String [] tokens = fileName.split(File.pathSeparator);
- final Matcher matcher = FileNamePattern.matcher(tokens[tokens.length - 1]);
- if(!matcher.matches()) {
- throw new PicardException("File name not of the right structure: <filePath>/s_<lane>_<tile>(_pos.txt|_pos.txt.gz|_pos.txt.bz2.locs|.clocs). File name (" + fileName + ")");
- }
-
- return new int[]{Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))};
- }
-
- /** Return the next set of coordinates in a given file. **/
- public final PositionInfo next() {
- if(! hasNext()) {
- throw new NoSuchElementException("No such cluster, cluster count(" + makeExceptionMsg() +")");
- }
- return unsafeNextInfo();
- }
-
- /** Returns the next position info. Implementations of this method do not need to call hasNext since
- * it is called in next() */
- protected abstract PositionInfo unsafeNextInfo();
-
- /** Create a string that will be included in any NoSuchElementException thrown by the next() method */
- protected abstract String makeExceptionMsg();
-
- /** Return true if the file has more elements to return, false otherwise */
- public abstract boolean hasNext();
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/BarcodeFileReader.java b/src/java/net/sf/picard/illumina/parser/readers/BarcodeFileReader.java
deleted file mode 100644
index ecb26cc..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/BarcodeFileReader.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.util.BasicInputParser;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-
-/**
- * Reads a single barcode file line by line and returns the barcode if there was a match or NULL otherwise.
- *
- * Barcode.txt file Format (consists of tab delimited columns, 1 record per row)
- * sequence_read Matched(Y/N) BarcodeSequenceMatched
- *
- * sequence read - the actual bases at barcode position
- * Matched(y/n) - Y or N indicating if there was a barcode match
- * BarcodeSequenceMatched - matched barcode sequence (empty if read did not match one of the barcodes).
- */
-public class BarcodeFileReader implements CloseableIterator<String> {
- private static final int Y_OR_N_COLUMN = 1;
- private static final int BARCODE_COLUMN = 2;
- private final BasicInputParser textIterator;
-
- public BarcodeFileReader(final File barcodeFile) {
- this.textIterator = new BasicInputParser(false, barcodeFile);
- }
-
- @Override
- public String next() {
- final String [] fields = textIterator.next();
- final String barcode;
- if (fields[Y_OR_N_COLUMN].equals("Y")) {
- barcode = fields[BARCODE_COLUMN];
- } else {
- barcode = null;
- }
-
- return barcode;
- }
-
- @Override
- public boolean hasNext() {
- return textIterator.hasNext();
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Remove is not supported by " + BarcodeFileReader.class.getName());
- }
-
- public void close() {
- textIterator.close();
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/BclIndexReader.java b/src/java/net/sf/picard/illumina/parser/readers/BclIndexReader.java
deleted file mode 100644
index 51171e2..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/BclIndexReader.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.nio.ByteBuffer;
-
-/**
- * Annoyingly, there are two different files with extension .bci in NextSeq output. This reader handles
- * the file that contains virtual file pointers into a .bcl.bgzf file. After the header, there is a 64-bit record
- * per tile.
- */
-public class BclIndexReader {
- private static final int BCI_HEADER_SIZE = 8;
- private static final int BCI_VERSION = 0;
-
- private final BinaryFileIterator<Long> bciIterator;
- private final int numTiles;
- private final File bciFile;
- private int nextRecordNumber = 0;
-
- public BclIndexReader(final File bclFile) {
- bciFile = new File(bclFile.getAbsolutePath() + ".bci");
- bciIterator = MMapBackedIteratorFactory.getLongIterator(BCI_HEADER_SIZE, bciFile);
- final ByteBuffer headerBytes = bciIterator.getHeaderBytes();
- final int actualVersion = headerBytes.getInt();
- if (actualVersion != BCI_VERSION) {
- throw new PicardException(String.format("Unexpected version number %d in %s", actualVersion, bciFile.getAbsolutePath()));
- }
- numTiles = headerBytes.getInt();
- }
-
- public int getNumTiles() {
- return numTiles;
- }
-
- public long get(final int recordNumber) {
- if (recordNumber < nextRecordNumber) {
- throw new IllegalArgumentException("Can only read forward");
- }
- if (recordNumber > nextRecordNumber) {
- bciIterator.skipElements(recordNumber - nextRecordNumber);
- nextRecordNumber = recordNumber;
- }
- ++nextRecordNumber;
- return bciIterator.getElement();
- }
-
- public File getBciFile() {
- return bciFile;
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/BclQualityEvaluationStrategy.java b/src/java/net/sf/picard/illumina/parser/readers/BclQualityEvaluationStrategy.java
deleted file mode 100644
index 686fdae..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/BclQualityEvaluationStrategy.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CollectionUtil;
-
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Describes a mechanism for revising and evaluating qualities read from a BCL file. This class accumulates observations about low quality
- * scores that it evaluates, so distinct instances should be used for unrelated sets of BCL readers.
- *
- * The mechanism for revising qualities is not configurable. The qualities that are less than 1 are revised to 1, and other qualities are
- * not affected.
- *
- * This class is thread-safe and a single instance can and should be passed to {@link BclReader}s running in separate threads.
- *
- * To replicate the functionality of {@link BclReader}s prior to the introduction of this class, create a single instance passing
- * {@link #ILLUMINA_ALLEGED_MINIMUM_QUALITY} to the constructor, and then call {@link #assertMinimumQualities()} once the readers finish
- * their work.
- *
- * @author mccowan
- */
-public class BclQualityEvaluationStrategy {
- public static final int ILLUMINA_ALLEGED_MINIMUM_QUALITY = 2;
- private final int minimumRevisedQuality;
- /** A thread-safe defaulting map that injects an AtomicInteger starting at 0 when a uninitialized key is get-ted. */
- private Map<Byte, AtomicInteger> qualityCountMap = Collections.synchronizedMap(new CollectionUtil.DefaultingMap<Byte, AtomicInteger>(
- new CollectionUtil.DefaultingMap.Factory<AtomicInteger, Byte>() {
- @Override
- public AtomicInteger make(final Byte _) {
- return new AtomicInteger(0);
- }
- }, true));
-
- /**
- * @param minimumRevisedQuality The minimum quality that should be seen from revised qualities; controls whether or not an exception
- * is thrown when calling {@link #assertMinimumQualities()}
- */
- public BclQualityEvaluationStrategy(final int minimumRevisedQuality) {
- this.minimumRevisedQuality = minimumRevisedQuality;
- }
-
- /** The rule used to revise quality scores, which is: if it's less than 1, make it 1. */
- private static byte generateRevisedQuality(final byte quality) { return (byte) Math.max(quality, 1); }
-
- /**
- * Accepts a quality read from a BCL file and (1) returns a 1 if the value was 0 and (2) makes a note of the provided quality if it is
- * low. Because of (2) each record's quality should be passed only once to this method, otherwise it will be observed multiple times.
- *
- * @param quality The quality score read from the BCL
- * @return The revised new quality score
- */
- public byte reviseAndConditionallyLogQuality(final byte quality) {
- final byte revisedQuality = generateRevisedQuality(quality);
- if (quality < ILLUMINA_ALLEGED_MINIMUM_QUALITY) {
- qualityCountMap.get(quality).incrementAndGet();
- }
- return revisedQuality;
- }
-
- /**
- * Reviews the qualities observed thus far and throws an exception if any are below the minimum quality threshold.
- */
- public void assertMinimumQualities() {
- final Collection<String> errorTokens = new LinkedList<String>();
- for (final Map.Entry<Byte, AtomicInteger> entry : this.qualityCountMap.entrySet()) {
- /**
- * We're comparing revised qualities here, not observed, but the qualities that are logged in qualityCountMap are observed
- * qualities. So as we iterate through it, convert observed qualities into their revised value.
- */
- if (generateRevisedQuality(entry.getKey()) < minimumRevisedQuality) {
- errorTokens.add(String.format("quality %s observed %s times", entry.getKey(), entry.getValue()));
- }
- }
- if (!errorTokens.isEmpty()) {
- throw new PicardException(String.format(
- "Found BCL qualities that fell beneath minimum threshold of %s: %s.",
- minimumRevisedQuality,
- CollectionUtil.join(errorTokens, "; ")
- ));
- }
- }
-
- /**
- * Returns a view of number of qualities that failed, where the key is the quality score and the value is the number of observations.
- */
- public Map<Byte, Integer> getPoorQualityFrequencies() {
- final Map<Byte, Integer> qualityCountMapCopy = new HashMap<Byte, Integer>();
- for (final Map.Entry<Byte, AtomicInteger> entry : qualityCountMap.entrySet()) {
- qualityCountMapCopy.put(entry.getKey(), entry.getValue().intValue());
- }
- return Collections.unmodifiableMap(qualityCountMapCopy);
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/BclReader.java b/src/java/net/sf/picard/illumina/parser/readers/BclReader.java
deleted file mode 100644
index 5aaaa15..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/BclReader.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
-* The MIT License
-*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to deal
-* in the Software without restriction, including without limitation the rights
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the Software is
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-* THE SOFTWARE.
-*/
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.BclData;
-import net.sf.picard.illumina.parser.TileIndex;
-import net.sf.picard.util.UnsignedTypeUtil;
-import net.sf.samtools.Defaults;
-import net.sf.samtools.util.BlockCompressedInputStream;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.IOUtil;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.List;
-import java.util.zip.GZIPInputStream;
-
-/**
- * BCL Files are base call and quality score binary files containing a (base,quality) pair for successive clusters.
- * The file is structured as followed:
- * Bytes 1-4 : unsigned int numClusters
- * Bytes 5-numClusters + 5 : 1 byte base/quality score
- * <p/>
- * The base/quality scores are organized as follows (with one exception, SEE BELOW):
- * The right 2 most bits (these are the LEAST significant bits) indicate the base, where
- * A=00(0x00), C=01(0x01), G=10(0x02), and T=11(0x03)
- * <p/>
- * The remaining bytes compose the quality score which is an unsigned int.
- * <p/>
- * EXCEPTION: If a byte is entirely 0 (e.g. byteRead == 0) then it is a no call, the base
- * becomes '.' and the Quality becomes 2, the default illumina masking value
- * <p/>
- * (E.g. if we get a value in binary of 10001011 it gets transformed as follows:
- * <p/>
- * Value read: 10001011(0x8B)
- * <p/>
- * Quality Base
- * <p/>
- * 100010 11
- * 00100010 0x03
- * 0x22 T
- * 34 T
- * <p/>
- * So the output base/quality will be a (T/34)
- */
-public class BclReader implements CloseableIterator<BclData> {
- private static final byte BASE_MASK = 0x0003;
- private static final int HEADER_SIZE = 4;
- private static final byte[] BASE_LOOKUP = new byte[]{'A', 'C', 'G', 'T'};
-
- private final InputStream[] streams;
- private final int[] outputLengths;
- int[] numClustersPerCycle;
-
- private final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
- private BclData queue = null;
-
- public BclReader(final List<File> bclsForOneTile, final int[] outputLengths,
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy, final boolean seekable) {
- try {
- this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
- this.outputLengths = outputLengths;
-
- int cycles = 0;
- for (final int outputLength : outputLengths) {
- cycles += outputLength;
- }
- this.streams = new InputStream[cycles];
- this.numClustersPerCycle = new int[cycles];
-
- final ByteBuffer byteBuffer = ByteBuffer.allocate(HEADER_SIZE);
- byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-
- for (int i = 0; i < cycles; ++i) {
- final File bclFile = bclsForOneTile.get(i);
- if (bclFile == null) {
- close();
- throw new RuntimeIOException(String.format("Could not find BCL file for cycle %d", i));
- }
- final String filePath = bclFile.getName();
- final boolean isGzip = filePath.endsWith(".gz");
- final boolean isBgzf = filePath.endsWith(".bgzf");
- final InputStream stream = open(bclFile, seekable, isGzip, isBgzf);
- final int read = stream.read(byteBuffer.array());
- if (read != HEADER_SIZE) {
- close();
- throw new RuntimeIOException(String.format("BCL %s has invalid header structure.", bclFile.getAbsoluteFile()));
- }
- numClustersPerCycle[i] = byteBuffer.getInt();
- if (!isBgzf && !isGzip) {
- assertProperFileStructure(bclFile, numClustersPerCycle[i], stream);
- }
- this.streams[i] = stream;
- byteBuffer.clear();
- }
- } catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- }
- }
-
- public static boolean isGzipped(final File file) {
- return file.getAbsolutePath().endsWith(".gz");
- }
-
- public static boolean isBlockGzipped(final File file) {
- return file.getAbsolutePath().endsWith(".bgzf");
- }
-
- public static long getNumberOfClusters(final File file) {
- InputStream stream = null;
- try {
- if (isBlockGzipped(file)) stream = new BlockCompressedInputStream(IOUtil.maybeBufferedSeekableStream(file));
- else if (isGzipped(file)) stream = new GZIPInputStream(IOUtil.maybeBufferInputStream(new FileInputStream(file)));
- else stream = IOUtil.maybeBufferInputStream(new FileInputStream(file));
-
- return getNumberOfClusters(file.getAbsolutePath(), stream);
-
- } catch (final IOException ioe) {
- throw new PicardException("Could not open file " + file.getAbsolutePath() + " to get its cluster count: " + ioe.getMessage(), ioe);
- } finally {
- CloserUtil.close(stream);
- }
- }
-
- private static long getNumberOfClusters(final String filePath, final InputStream inputStream) {
- final byte[] header = new byte[HEADER_SIZE];
-
- try {
- final int headerBytesRead = inputStream.read(header);
- if (headerBytesRead != HEADER_SIZE) {
- throw new PicardException("Malformed file, expected header of size " + HEADER_SIZE + " but received " + headerBytesRead);
- }
- } catch (final IOException ioe) {
- throw new PicardException("Unable to read header for file (" + filePath + ")", ioe);
- }
-
- final ByteBuffer headerBuf = ByteBuffer.wrap(header);
- headerBuf.order(ByteOrder.LITTLE_ENDIAN);
- return UnsignedTypeUtil.uIntToLong(headerBuf.getInt());
- }
-
-
- public BclReader(final File bclFile, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy, final boolean seekable) {
- try {
-
- this.outputLengths = new int[]{1};
- this.streams = new InputStream[1];
- this.numClustersPerCycle = new int[]{1};
- this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
-
- final ByteBuffer byteBuffer = ByteBuffer.allocate(HEADER_SIZE);
- final String filePath = bclFile.getName();
- final boolean isGzip = filePath.endsWith(".gz");
- final boolean isBgzf = filePath.endsWith(".bgzf");
- final InputStream stream = open(bclFile, seekable, isGzip, isBgzf);
- final int read = stream.read(byteBuffer.array());
-
- if (read != HEADER_SIZE) {
- throw new RuntimeIOException(String.format("BCL %s has invalid header structure.", bclFile.getAbsoluteFile()));
- }
-
- byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
- this.numClustersPerCycle[0] = byteBuffer.getInt();
- if (!isBgzf && !isGzip) {
- assertProperFileStructure(bclFile, this.numClustersPerCycle[0], stream);
- }
- this.streams[0] = stream;
- } catch (final IOException ioe) {
- throw new PicardException("IOException opening file " + bclFile.getAbsoluteFile(), ioe);
- }
- }
-
- void assertProperFileStructure(final File file, final int numClusters, final InputStream stream) {
- final long elementsInFile = file.length() - HEADER_SIZE;
- if (numClusters != elementsInFile) {
- CloserUtil.close(stream);
- throw new PicardException("Expected " + numClusters + " in file but found " + elementsInFile);
- }
- }
-
- InputStream open(final File file, final boolean seekable, final boolean isGzip, final boolean isBgzf) throws IOException {
- final String filePath = file.getAbsolutePath();
-
- try {
- // Open up a buffered stream to read from the file and optionally wrap it in a gzip stream
- // if necessary
- if (isBgzf) {
- // Only BlockCompressedInputStreams can seek, and only if they are fed a SeekableStream.
- return new BlockCompressedInputStream(IOUtil.maybeBufferedSeekableStream(file));
- } else if (isGzip) {
- if (seekable) {
- throw new IllegalArgumentException(
- String.format("Cannot create a seekable reader for gzip bcl: %s.", filePath)
- );
- }
- return (IOUtil.maybeBufferInputStream(new GZIPInputStream(new FileInputStream(file), Defaults.BUFFER_SIZE / 2),
- Defaults.BUFFER_SIZE / 2));
- } else {
- if (seekable) {
- throw new IllegalArgumentException(
- String.format("Cannot create a seekable reader for provided bcl: %s.", filePath)
- );
- }
- return IOUtil.maybeBufferInputStream(new FileInputStream(file));
- }
- } catch (final FileNotFoundException fnfe) {
- throw new PicardException("File not found: (" + filePath + ")", fnfe);
- } catch (final IOException ioe) {
- throw new PicardException("Error reading file: (" + filePath + ")", ioe);
- }
- }
-
- public void close() {
- for (final InputStream stream : this.streams) {
- CloserUtil.close(stream);
- }
- }
-
- @Override
- public boolean hasNext() {
- if (queue == null) {
- advance();
- }
- return queue != null;
- }
-
- private long getNumClusters() {
- return numClustersPerCycle[0];
- }
-
- protected void assertProperFileStructure(final File file) {
- final long elementsInFile = file.length() - HEADER_SIZE;
- if (numClustersPerCycle[0] != elementsInFile) {
- throw new PicardException("Expected " + numClustersPerCycle[0] + " in file " + file.getAbsolutePath() + " but found " + elementsInFile);
-
- }
- }
-
- public BclData next() {
- if (queue == null) {
- advance();
- }
-
- final BclData data = queue;
- queue = null;
- return data;
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- void advance() {
- int totalCycleCount = 0;
- final BclData data = new BclData(outputLengths);
- for (int read = 0; read < outputLengths.length; read++) {
- for (int cycle = 0; cycle < outputLengths[read]; ++cycle) {
- try {
- final int readByte = this.streams[totalCycleCount].read();
- if (readByte == -1) {
- queue = null;
- return;
- }
-
- if (readByte == 0) {
- //NO CALL, don't confuse with an A call
- data.bases[read][cycle] = (byte) '.';
- data.qualities[read][cycle] = (byte) 2;
- } else {
- data.bases[read][cycle] = BASE_LOOKUP[readByte & BASE_MASK];
- data.qualities[read][cycle] = bclQualityEvaluationStrategy.reviseAndConditionallyLogQuality((byte) (readByte >>> 2));
- }
- totalCycleCount++;
- } catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- }
-
- }
- }
- this.queue = data;
- }
-
- public static BclReader makeSeekable(final List<File> files, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy, final int[] outputLengths) {
- return new BclReader(files, outputLengths, bclQualityEvaluationStrategy, true);
- }
-
- public int seek(final List<File> files, final TileIndex tileIndex, final int currentTile) {
- int count = 0;
- int numClustersInTile = 0;
- for (final InputStream inputStream : streams) {
- final TileIndex.TileIndexRecord tileIndexRecord = tileIndex.findTile(currentTile);
- final BclIndexReader bclIndexReader = new BclIndexReader(files.get(count));
- final long virtualFilePointer = bclIndexReader.get(tileIndexRecord.getZeroBasedTileNumber());
- if (!(inputStream instanceof BlockCompressedInputStream)) {
- throw new UnsupportedOperationException("Seeking only allowed on bzgf");
- } else {
- try {
- if (tileIndex.getNumTiles() != bclIndexReader.getNumTiles()) {
- throw new PicardException(String.format("%s.getNumTiles(%d) != %s.getNumTiles(%d)",
- tileIndex.getFile().getAbsolutePath(), tileIndex.getNumTiles(), bclIndexReader.getBciFile().getAbsolutePath(), bclIndexReader.getNumTiles()));
- }
- ((BlockCompressedInputStream) inputStream).seek(virtualFilePointer);
- numClustersInTile = tileIndexRecord.getNumClustersInTile();
- } catch (final IOException e) {
- throw new PicardException("Problem seeking to " + virtualFilePointer, e);
- }
- }
- count++;
- }
- return numClustersInTile;
- }
-}
-
diff --git a/src/java/net/sf/picard/illumina/parser/readers/ClocsFileReader.java b/src/java/net/sf/picard/illumina/parser/readers/ClocsFileReader.java
deleted file mode 100644
index ffe6611..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/ClocsFileReader.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.UnsignedTypeUtil;
-
-import java.io.File;
-import java.nio.ByteBuffer;
-
-/**
- * The clocs file format is one of 3 Illumina formats(pos, locs, and clocs) that stores position data exclusively.
- * clocs files store position data for successive clusters, compressed in bins as follows:
- * Byte 0 : unused
- * Byte 1-4 : unsigned int numBins
- * The rest of the file consists of bins/blocks, where a bin consists of an integer
- * indicating number of blocks, followed by that number of blocks and a block consists
- * of an x-y coordinate pair. In otherwords:
- *
- * for each bin
- * byte 1: Unsigned int numBlocks
- * for each block:
- * byte 1 : byte xRelativeCoordinate
- * byte 2 : byte yRelativeCoordinate
- *
- * Actual x and y values are computed using the following algorithm
- *
- * xOffset = yOffset = 0
- * imageWidth = 2048
- * blockSize = 25
- * maxXbins:Int = Math.Ceiling((double)ImageWidth/(double)blockSize)
- * for each bin:
- * for each location:
- * x = convert.ToSingle(xRelativeCoordinate/10f + xoffset)
- * y = convert.toSingle(yRelativeCoordinate/10f + yoffset)
- * if (binIndex > 0 && ((binIndex + 1) % maxXbins == 0)) {
- * xOffset = 0; yOffset += blockSize
- * } else xOffset += blockSize
- */
-public class ClocsFileReader extends AbstractIlluminaPositionFileReader {
-
- private static final int HEADER_SIZE = 5;
-
- private static final int IMAGE_WIDTH = 2048;
- private static final int BLOCK_SIZE = 25;
- private static final int NUM_BINS_IN_ROW = (int)Math.ceil((double) IMAGE_WIDTH / (double) BLOCK_SIZE);
-
- /** Total number of bins */
- private final long numBins;
-
- /** An iterator through clocsFile's bytes */
- private final BinaryFileIterator<Byte> byteIterator;
-
- //mutable vars
- private float xOffset;
- private float yOffset;
- private long currentBin;
- private int numClustersInBin; //MAX 255
- private long currentClusterInBin;
-
- public ClocsFileReader(final File clocsFile) {
- super(clocsFile);
-
- byteIterator = MMapBackedIteratorFactory.getByteIterator(HEADER_SIZE, clocsFile);
-
- final ByteBuffer hbs = byteIterator.getHeaderBytes();
- hbs.get(); //unusedByte
- numBins = UnsignedTypeUtil.uIntToLong(hbs.getInt());
-
- xOffset = 0;
- yOffset = 0;
- currentBin = 0;
- startBlock();
-
- checkAndAdvanceBin();
- }
-
- /**
- * Grab the next set off offset values, decompress them and then
- * @return
- */
- @Override
- protected PositionInfo unsafeNextInfo() {
- final byte xByte = byteIterator.next();
- final byte yByte = byteIterator.next();
-
- final float xPos = UnsignedTypeUtil.uByteToInt(xByte)/10f + xOffset;
- final float yPos = UnsignedTypeUtil.uByteToInt(yByte)/10f + yOffset;
- ++currentClusterInBin;
- checkAndAdvanceBin();
-
- return new PositionInfo(xPos, yPos, getLane(), getTile());
- }
-
- /** Compute offset for next bin and then increment the bin number and reset block information*/
- private void checkAndAdvanceBin() {
- while(currentClusterInBin >= numClustersInBin && currentBin < numBins) { //While rather than if statement to skip empty blocks
- if ((currentBin + 1) % NUM_BINS_IN_ROW == 0) {
- xOffset = 0;
- yOffset += BLOCK_SIZE;
- } else{
- xOffset += BLOCK_SIZE;
- }
-
- currentBin += 1;
- if(currentBin < numBins) {
- startBlock();
- }
- }
- }
-
- /** Start the next block by reading it's numBlocks byte and setting the currentBlock index to 0 */
- private void startBlock() {
- numClustersInBin = UnsignedTypeUtil.uByteToInt(byteIterator.next());
- currentClusterInBin = 0;
- }
-
- @Override
- protected String makeExceptionMsg() {
- return "ClocsFileReader(file=" + getFile().getName() + ", lane=" + getLane() + ", tile=" + getTile() +
- ", currentBin=" + currentBin + ", numBins=" + numBins + ", xOffset=" + xOffset + ", yOffset" + yOffset +
- ", currentBlock=" + currentClusterInBin + ", numBlocks=" + numClustersInBin;
- }
-
- @Override
- public boolean hasNext() {
- boolean valuesRemain = currentClusterInBin < numClustersInBin || currentBin < (numBins -1);
- if(!valuesRemain && byteIterator.hasNext()) {
- throw new PicardException("Read the number of expected bins( " + numBins + ") but still had more elements in file( " + byteIterator.getFile().getAbsolutePath() + ") ");
- }
- return valuesRemain;
- }
-
- public void close() {
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/FilterFileReader.java b/src/java/net/sf/picard/illumina/parser/readers/FilterFileReader.java
deleted file mode 100644
index ecd493c..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/FilterFileReader.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.UnsignedTypeUtil;
-
-import java.io.File;
-import java.nio.ByteBuffer;
-import java.util.Iterator;
-
-/**
- * Illumina uses an algorithm described in "Theory of RTA" that determines whether or not a cluster passes filter("PF") or not.
- * These values are written as sequential bytes to Filter Files. The structure of a filter file is as follows:
- * Bytes 0-3 : 0
- * Bytes 4-7 : unsigned int version
- * Bytes 8-11 : unsigned int numClusters
- */
-public class FilterFileReader implements Iterator<Boolean> {
- /** Number of bytes in the files header that will be skipped by the iterator*/
- private static final int HEADER_SIZE = 12;
-
- /** Expected Version */
- public final int EXPECTED_VERSION = 3;
-
- /** Iterator over each cluster in the FilterFile */
- private final BinaryFileIterator<Byte> bbIterator;
-
- /** Version number found in the FilterFile, this should equal 3 */
- public final int version;
-
- /** The number of cluster's pf values stored in this file */
- public final long numClusters;
-
- /** Byte representing a cluster failing filter(not a PF read), we test this exactly at
- * the moment but technically the standard may be to check only lowest significant bit */
- private final static byte FailedFilter = 0x00;
-
- /** Byte representing a cluster passing filter(a PF read), we test this exactly at
- * the moment but technically the standard may be to check only lowest significant bit */
- private final static byte PassedFilter = 0x01;
-
- /** The index of the current cluster within the file*/
- private int currentCluster;
-
- public FilterFileReader(final File file) {
- bbIterator = MMapBackedIteratorFactory.getByteIterator(HEADER_SIZE, file);
- final ByteBuffer headerBuf = bbIterator.getHeaderBytes();
-
- for(int i = 0; i < 4; i++) {
- final byte b = headerBuf.get();
- if(b != 0) {
- throw new PicardException("The first four bytes of a Filter File should be 0 but byte " + i + " was " + b + " in file " + file.getAbsolutePath());
- }
- }
-
- version = headerBuf.getInt();
- if(version != EXPECTED_VERSION) {
- throw new PicardException("Expected version is " + EXPECTED_VERSION + " but version found was " + version + " in file " + file.getAbsolutePath());
- }
-
- numClusters = UnsignedTypeUtil.uIntToLong(headerBuf.getInt());
- bbIterator.assertTotalElementsEqual(numClusters);
-
- currentCluster = 0;
- }
-
- public boolean hasNext() {
- return currentCluster < numClusters;
- }
-
- public Boolean next() {
- final byte value = bbIterator.next();
- currentCluster += 1;
- if(value == PassedFilter) {
- return true;
- } else if(value == FailedFilter) {
- return false;
- } else {
- String hexVal = Integer.toHexString(value);
- hexVal = (hexVal.length() < 2 ? "0x0" : "0x") + hexVal;
- throw new PicardException("Didn't recognized PF Byte (" + hexVal + ")" + " for element (" + currentCluster + ") in file(" + bbIterator.getFile().getAbsolutePath() + ")");
- }
- }
-
- public void skipRecords(final int numToSkip) {
- bbIterator.skipElements(numToSkip);
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/LocsFileReader.java b/src/java/net/sf/picard/illumina/parser/readers/LocsFileReader.java
deleted file mode 100644
index 0497f2d..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/LocsFileReader.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.UnsignedTypeUtil;
-
-import java.io.File;
-import java.nio.ByteBuffer;
-
-/**
- * The locs file format is one 3 Illumina formats(pos, locs, and clocs) that stores position data exclusively.
- * locs files store position data for successive clusters in 4 byte float pairs, described as follows:
- * bytes 1-4 : (int?) Version number (1)
- * bytes 5-8 : 4 byte float equaling 1.0
- * bytes 9-12 : unsigned int numClusters
- * bytes 13-16: : X coordinate of first cluster (32-bit float)
- * bytes 17-20: : Y coordinate of first cluster (32-bit float)
- *
- * The remaining bytes of the file store the X and Y coordinates of the remaining clusters.
- */
-
-public class LocsFileReader extends AbstractIlluminaPositionFileReader {
- /** Size of the opening file header, this is skipped by the iterator below*/
- private static final int HEADER_SIZE = 12;
-
- /** The first four bytes of a locs file should equal a little endian 1 */
- private static final int BYTES_1_TO_4 = 1;
-
- /** The expected version of locs files */
- private static final float VERSION = 1.0f;
-
- /** An iterator over all of the coordinate values in the file, remember next needs to be called
- * twice per coordinate pair */
- private BinaryFileIterator<Float> bbIterator;
-
- /** Total clusters in the file as read in the file header */
- private long numClusters;
-
- /** The index of the next cluster to be returned */
- private int nextCluster;
-
- public LocsFileReader(final File file) {
- super(file);
-
- initialize(file);
- }
-
- public LocsFileReader(final File file, final int lane, final int tile) {
- super(file, lane, tile);
-
- initialize(file);
- }
-
- private void initialize(final File file) {
- bbIterator = MMapBackedIteratorFactory.getFloatIterator(HEADER_SIZE, file);
- final ByteBuffer headerBuf = bbIterator.getHeaderBytes();
-
- final int firstValue = headerBuf.getInt();
- if(firstValue != BYTES_1_TO_4) {
- throw new PicardException("First header byte of locs files should be " + BYTES_1_TO_4 + " value found(" + firstValue + ")");
- }
-
- final float versionNumber = headerBuf.getFloat();
- if(versionNumber != VERSION) {
- throw new PicardException("First header byte of locs files should be " + VERSION + " value found(" + firstValue + ")");
- }
-
- numClusters = UnsignedTypeUtil.uIntToLong(headerBuf.getInt());
- bbIterator.assertTotalElementsEqual(numClusters * 2);
- }
-
- @Override
- protected PositionInfo unsafeNextInfo() {
- final float xVal = bbIterator.next();
- final float yVal = bbIterator.next();
- ++nextCluster;
- return new PositionInfo(xVal, yVal, getLane(), getTile());
- }
-
- @Override
- protected String makeExceptionMsg() {
- return "LocsFileReader(file=" + getFile().getAbsolutePath() + ", numClusters=" + numClusters + ") ";
- }
-
- @Override
- public boolean hasNext() {
- return nextCluster < numClusters;
- }
-
- public void close() {
- bbIterator = null;
- }
-
- public void skipRecords(final int numToSkip) {
- bbIterator.skipElements(numToSkip * 2);
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactory.java b/src/java/net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactory.java
deleted file mode 100644
index 74fee58..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactory.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser.readers;
-
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.*;
-import java.nio.channels.FileChannel;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * MMapBackedIteratorFactory a file reader that takes a header size and a binary file, maps the file to
- * a read-only byte buffer and provides methods to retrieve the header as it's own bytebuffer and create
- * iterators of different data types over the values of file (starting after the end of the header).
- * Values provided by the MMappedBinaryFileReader are read as if they are little endian.
- *
- * Note (read to end):
- * This class IS thread-safe and immutable though the iterator and ByteBuffers it produces are NOT.
- * The values read are assumed to be signed, NO promoting/sign conversion happens in this class.
- */
-public class MMapBackedIteratorFactory {
- private static int BYTE_SIZE = 1;
- private static int INT_SIZE = 4;
- private static int FLOAT_SIZE = 4;
- private static int LONG_SIZE = 8;
-
- public static BinaryFileIterator<Integer> getIntegerIterator(final int headerSize, final File binaryFile) {
- checkFactoryVars(headerSize, binaryFile);
- final ByteBuffer buf = getBuffer(binaryFile);
- final byte [] header = getHeader(buf, headerSize);
-
- return new IntegerMMapIterator(header, binaryFile, buf);
- }
-
- public static BinaryFileIterator<Byte> getByteIterator(final int headerSize, final File binaryFile) {
- checkFactoryVars(headerSize, binaryFile);
- final ByteBuffer buf = getBuffer(binaryFile);
- final byte [] header = getHeader(buf, headerSize);
-
- return new ByteMMapIterator(header, binaryFile, buf);
- }
-
- public static BinaryFileIterator<Float> getFloatIterator(final int headerSize, final File binaryFile) {
- checkFactoryVars(headerSize, binaryFile);
- final ByteBuffer buf = getBuffer(binaryFile);
- final byte [] header = getHeader(buf, headerSize);
-
- return new FloatMMapIterator(header, binaryFile, buf);
- }
-
- public static BinaryFileIterator<Long> getLongIterator(final int headerSize, final File binaryFile) {
- checkFactoryVars(headerSize, binaryFile);
- final ByteBuffer buf = getBuffer(binaryFile);
- final byte [] header = getHeader(buf, headerSize);
-
- return new LongMMapIterator(header, binaryFile, buf);
- }
-
- public static BinaryFileIterator<ByteBuffer> getByteBufferIterator(final int headerSize, final int elementSize, final File binaryFile) {
- checkFactoryVars(headerSize, binaryFile);
- final ByteBuffer buf = getBuffer(binaryFile);
- final byte [] header = getHeader(buf, headerSize);
-
- return new ByteBufferMMapIterator(header, binaryFile, elementSize, buf);
- }
-
- private static void checkFactoryVars(final int headerSize, final File binaryFile) {
- IoUtil.assertFileIsReadable(binaryFile);
-
- if(headerSize < 0) {
- throw new PicardException("Header size cannot be negative. HeaderSize(" + headerSize + ") for file " + binaryFile.getAbsolutePath());
- }
-
- if(headerSize > binaryFile.length()) {
- throw new PicardException("Header size(" + headerSize + ") is greater than file size(" + binaryFile.length() + ") for file " + binaryFile.getAbsolutePath());
- }
- }
-
- private static ByteBuffer getBuffer(final File binaryFile) {
- final ByteBuffer buf;
- try {
- final FileInputStream is = new FileInputStream(binaryFile);
- final FileChannel channel = is.getChannel();
- final long fileSize = channel.size();
- buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- CloserUtil.close(channel);
- CloserUtil.close(is);
- } catch (IOException e) {
- throw new PicardException("IOException opening cluster binary file " + binaryFile, e);
- }
-
- return buf;
- }
-
- private static byte [] getHeader(final ByteBuffer buf, final int headerSize) {
- final byte [] headerBytes = new byte[headerSize];
- if(headerSize > 0) {
- buf.get(headerBytes);
- }
- return headerBytes;
- }
-
- /** A simple iterator that uses a reference to the enclosing ByteBuffer and a member position
- * value to iterate over values in the buffer, starting after headerSize bytes */
- static abstract class MMapBackedIterator<TYPE> extends BinaryFileIterator<TYPE>{
- protected final ByteBuffer buffer;
-
- protected MMapBackedIterator(final byte[] header, final File file, final int elementSize, final ByteBuffer buffer) {
- super(header, file, elementSize);
- this.buffer = buffer;
- }
-
- public boolean hasNext() {
- return buffer.limit() - buffer.position() >= elementSize;
- }
-
- public void skipElements(final int numElements) {
- buffer.position(buffer.position() + (numElements * elementSize));
- }
-
- /** The method that actually retrieves the data from the enclosing buffer */
- protected abstract TYPE getElement();
-
- public Iterator<TYPE> iterator() {
- return this;
- }
- }
-
- private static class IntegerMMapIterator extends MMapBackedIterator<Integer> {
- public IntegerMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
- super(header, file, INT_SIZE, buf);
- }
-
- @Override
- protected Integer getElement() {
- return buffer.getInt();
- }
- }
-
- private static class ByteMMapIterator extends MMapBackedIterator<Byte> {
- public ByteMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
- super(header, file, BYTE_SIZE, buf);
- }
-
- @Override
- protected Byte getElement() {
- return buffer.get();
- }
- }
-
- private static class FloatMMapIterator extends MMapBackedIterator<Float> {
- public FloatMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
- super(header, file, FLOAT_SIZE, buf);
- }
-
- @Override
- protected Float getElement() {
- return buffer.getFloat();
- }
- }
-
- private static class LongMMapIterator extends MMapBackedIterator<Long> {
- public LongMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
- super(header, file, LONG_SIZE, buf);
- }
-
- @Override
- protected Long getElement() {
- return buffer.getLong();
- }
- }
-
- //TODO: Add test
- //TODO: Make a note that if you want to multithread over this then you have to copy the contents
- private static class ByteBufferMMapIterator extends MMapBackedIterator<ByteBuffer> {
- private byte [] localBacking;
- private ByteBuffer localBuffer;
- public ByteBufferMMapIterator(final byte[] header, final File file, final int elementBufferSize, final ByteBuffer buf) {
- super(header, file, elementBufferSize, buf);
- this.localBacking = new byte[elementBufferSize];
- this.localBuffer = ByteBuffer.wrap(localBacking);
- this.localBuffer.order(ByteOrder.LITTLE_ENDIAN);
- }
-
- @Override
- protected ByteBuffer getElement() {
- localBuffer.position(0);
- buffer.get(this.localBacking);
- localBuffer.position(0);
- return localBuffer;
- }
- }
-}
-
-
-abstract class BinaryFileIterator<TYPE> implements Iterator<TYPE>, Iterable<TYPE> {
- protected final File file;
- protected final long fileSize;
- protected final int elementSize;
- private final byte [] header;
-
- public BinaryFileIterator(final byte[] header, final File file, final int elementSize) {
- this.header = header;
- this.file = file;
- this.fileSize = file.length();
- this.elementSize = elementSize;
- }
- /** Return the bytes found in the first headerSize bytes of the file, wrapped as a
- * ByteBuffer */
- public ByteBuffer getHeaderBytes() {
- final ByteBuffer bb = ByteBuffer.allocate(header.length);
- bb.order(ByteOrder.LITTLE_ENDIAN);
- bb.put(header);
- bb.position(0);
- return bb;
- }
-
- public void assertTotalElementsEqual(final long numElements) {
- if(getElementsInFile() != numElements) {
- throw new PicardException("Expected " + numElements + " elements in file but found " + getElementsInFile() + " elements! File(" + file.getAbsolutePath() + ")");
- }
-
- if(getExtraBytes() != 0) {
- throw new PicardException("Malformed file, expected " + (header.length + numElements * elementSize) + " bytes in file, found " + fileSize + " bytes for file("
- + file.getAbsolutePath() + ")");
- }
- }
-
- public int getElementSize() {
- return elementSize;
- }
-
- public long getExtraBytes() {
- return fileSize - header.length - (getElementsInFile() * elementSize);
- }
-
- public long getElementsInFile() {
- return (fileSize - header.length) / elementSize;
- }
-
- public File getFile() {
- return file;
- }
-
- public TYPE next() {
- if(!hasNext()) {
- throw new NoSuchElementException();
- }
- return getElement();
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
-
- public Iterator<TYPE> iterator() {
- return this;
- }
-
- /** The method that actually retrieves the data from the enclosing buffer */
- protected abstract TYPE getElement();
- public abstract void skipElements(final int numElementsToSkip);
- public abstract boolean hasNext();
-}
-
-
-
diff --git a/src/java/net/sf/picard/illumina/parser/readers/PosFileReader.java b/src/java/net/sf/picard/illumina/parser/readers/PosFileReader.java
deleted file mode 100644
index 2534d03..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/PosFileReader.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.BasicInputParser;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.File;
-
-/**
- * The pos file format is one 3 Illumina formats(pos, locs, and clocs) that stores position data exclusively.
- * pos files store position data for successive clusters in tabbed delimited coordinated pairs, 1 per file row e.g.:
- *
- * xPos1\tyPos1
- * xPos2\tyPos2
- * 102.0\t303.3
- * ...
- * xPosn-1\yPosn-1
- * xPosn\yPosn
- *
- * Where n = the total number of clusters (and therefore lines) in the file.
- */
-public class PosFileReader extends AbstractIlluminaPositionFileReader {
-
- private final BasicInputParser parser;
-
- public PosFileReader(final File posFile) {
- super(posFile);
- this.parser = new BasicInputParser(true, posFile);
- }
-
- /** Read a line of text and parse it into two float values, create a PositionInfo and return it */
- @Override
- protected PositionInfo unsafeNextInfo() {
- final String [] strVals = this.parser.next();
- if(strVals.length != 2) {
- throw new PicardException("Pos file number of values != 2, found (" + strVals.length +")" + makeExceptionMsg());
- }
- try {
- final float xVal = Float.parseFloat(strVals[0]);
- final float yVal = Float.parseFloat(strVals[1]);
-
- if(xVal <0 || yVal < 0) {
- throw new NumberFormatException("X and Y pos values cannot be negative!");
- }
-
- return new PositionInfo(xVal, yVal, getLane(), getTile());
- } catch(final NumberFormatException nfe) {
- throw new PicardException("Bad x or y value in " + makeExceptionMsg(), nfe);
- }
- }
-
- @Override
- protected String makeExceptionMsg() {
- return "pos file( " + parser.getFileName() +
- " ) on line number( " + parser.getCurrentLineNumber() +
- " ) with current line = " + parser.getCurrentLine();
- }
-
- public boolean hasNext() {
- return parser.hasNext();
- }
-
- public void close() {
- CloserUtil.close(parser);
- }
-}
diff --git a/src/java/net/sf/picard/illumina/parser/readers/TileMetricsOutReader.java b/src/java/net/sf/picard/illumina/parser/readers/TileMetricsOutReader.java
deleted file mode 100644
index d813181..0000000
--- a/src/java/net/sf/picard/illumina/parser/readers/TileMetricsOutReader.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.UnsignedTypeUtil;
-
-import java.io.File;
-import java.nio.ByteBuffer;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Reads a TileMetricsOut file commonly found in the InterOp directory of an Illumina Run Folder. This
- * reader DOES NOT try to interpret the metrics code or metrics value but instead returns them in what
- * is essentially a struct.
- *
- * File Format:
- * byte 0 (unsigned byte) = The version number which MUST be 2 or an exception will be thrown
- * byte 1 (unsigned byte) = The record size which must be 10 or an exception will be thrown
- * bytes 3 + (current_record * 10) to (current_record * 10 + 10) (TileMetrics Record) = The actual records each of size 10 that
- * get converted into IlluminaPhasingMetrics objects
- *
- * TileMetrics Record Format:
- * Each 10 byte record is of the following format:
- * byte 0-1 (unsigned short) = lane number
- * byte 2-3 (unsigned short) = tile number
- * byte 4-5 (unisgned short) = metrics code, see Theory of RTA document by Illumina for definition
- * byte 6-9 (float) = metrics value, see Theory of RTA document by Illumina for definition
- */
-public class TileMetricsOutReader implements Iterator<TileMetricsOutReader.IlluminaTileMetrics> {
- private static final int HEADER_SIZE = 2;
- private static final int EXPECTED_RECORD_SIZE = 10;
- private static final int EXPECTED_VERSION = 2;
-
- private final BinaryFileIterator<ByteBuffer> bbIterator;
-
- /**
- * Return a TileMetricsOutReader for the specified file
- * @param tileMetricsOutFile The file to read
- */
- public TileMetricsOutReader(final File tileMetricsOutFile) {
- bbIterator = MMapBackedIteratorFactory.getByteBufferIterator(HEADER_SIZE, EXPECTED_RECORD_SIZE, tileMetricsOutFile);
-
- final ByteBuffer header = bbIterator.getHeaderBytes();
-
- //Get the version, should be EXPECTED_VERSION, which is 2
- final int actualVersion = UnsignedTypeUtil.uByteToInt(header.get());
- if(actualVersion != EXPECTED_VERSION) {
- throw new PicardException("TileMetricsOutReader expects the version number to be " + EXPECTED_VERSION + ". Actual Version in Header( " + actualVersion + ")" );
- }
-
- final int actualRecordSize = UnsignedTypeUtil.uByteToInt(header.get());
- if(EXPECTED_RECORD_SIZE != actualRecordSize) {
- throw new PicardException("TileMetricsOutReader expects the record size to be " + EXPECTED_RECORD_SIZE + ". Actual Record Size in Header( " + actualRecordSize + ")" );
- }
- }
-
- public boolean hasNext() {
- return bbIterator.hasNext();
- }
-
- public IlluminaTileMetrics next() {
- if(!hasNext()) {
- throw new NoSuchElementException();
- }
- return new IlluminaTileMetrics(bbIterator.next());
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- /**
- * IlluminaPhasingMetrics corresponds to a single record in a TileMetricsOut file
- */
- public static class IlluminaTileMetrics {
- private final IlluminaLaneTileCode laneTileCode;
- private final float metricValue;
-
- public IlluminaTileMetrics(final ByteBuffer bb) {
- this(UnsignedTypeUtil.uShortToInt(bb.getShort()), UnsignedTypeUtil.uShortToInt(bb.getShort()),
- UnsignedTypeUtil.uShortToInt(bb.getShort()), bb.getFloat());
- }
-
- public IlluminaTileMetrics(final int laneNumber, final int tileNumber, final int metricCode, final float metricValue) {
- this.laneTileCode = new IlluminaLaneTileCode(laneNumber, tileNumber, metricCode);
- this.metricValue = metricValue;
- }
-
- public int getLaneNumber() {
- return laneTileCode.getLaneNumber();
- }
-
- public int getTileNumber() {
- return laneTileCode.getTileNumber();
- }
-
- public int getMetricCode() {
- return laneTileCode.getMetricCode();
- }
-
- public float getMetricValue() {
- return metricValue;
- }
-
- public IlluminaLaneTileCode getLaneTileCode() {
- return laneTileCode;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (o instanceof IlluminaTileMetrics) {
- final IlluminaTileMetrics that = (IlluminaTileMetrics) o;
- return laneTileCode == that.laneTileCode && metricValue == that.metricValue; // Identical tile data should render exactly the same float.
- } else {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- return String.format("%s:%s:%s:%s", laneTileCode.getLaneNumber(), laneTileCode.getTileNumber(), laneTileCode.getMetricCode(), metricValue).hashCode(); // Slow but adequate.
- }
- }
-
- /** Helper class which captures the combination of a lane, tile & metric code */
- public static class IlluminaLaneTileCode {
- private final int laneNumber;
- private final int tileNumber;
- private final int metricCode;
-
- public IlluminaLaneTileCode(final int laneNumber, final int tileNumber, final int metricCode) {
- this.laneNumber = laneNumber;
- this.tileNumber = tileNumber;
- this.metricCode = metricCode;
- }
-
- public int getLaneNumber() {
- return laneNumber;
- }
-
- public int getTileNumber() {
- return tileNumber;
- }
-
- public int getMetricCode() {
- return metricCode;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (o instanceof IlluminaLaneTileCode) {
- final IlluminaLaneTileCode that = (IlluminaLaneTileCode) o;
- return laneNumber == that.laneNumber && tileNumber == that.tileNumber && metricCode == that.metricCode;
- } else {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- int result = laneNumber;
- result = 31 * result + tileNumber;
- result = 31 * result + metricCode;
- return result;
- }
- }
-}
diff --git a/src/java/net/sf/picard/io/FastLineReader.java b/src/java/net/sf/picard/io/FastLineReader.java
deleted file mode 100644
index 0da120a..0000000
--- a/src/java/net/sf/picard/io/FastLineReader.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.io;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * Line-oriented InputStream reader that uses one buffer for disk buffering and line-termination-finding,
- * in order to improve performance.
- *
- * Implementation detail: All public methods must leave the input buffer in a non-empty state, unless at EOF.
- *
- * @author alecw at broadinstitute.org
- */
-public class FastLineReader {
- private InputStream in;
- private byte[] fileBuffer = new byte[512000];
- // Next byte to read in fileBuffer
- private int nextByte = 0;
- // Number of bytes in fileBuffer
- private int numBytes = 0;
- private boolean atEof;
-
- public FastLineReader(final InputStream in) {
- this.in = in;
- ensureBufferNotEmpty();
- }
-
- /**
- * @return true if input is exhausted
- */
- public boolean eof() {
- return atEof;
- }
-
- /**
- * @return peeks at the next byte in the stream and returns true if it is CR or LF. Returns false if EOF or
- * next byte is not CR or LF.
- */
- public boolean atEoln() {
- return ensureBufferNotEmpty() && (fileBuffer[nextByte] == '\n' || fileBuffer[nextByte] == '\r');
- }
-
- /**
- * Advance over any EOLN chars (CR or LF)
- * @return true if saw one or more CR or LFs
- */
- public boolean skipNewlines() {
- boolean sawEoln = false;
- while (atEoln()) {
- sawEoln = true;
- ++nextByte;
- }
- return sawEoln;
- }
-
- public void close() {
- CloserUtil.close(in);
- in = null;
- fileBuffer = null;
- }
-
- /**
- * @return Next byte from the input. Do not call if at EOF.
- */
- public byte getByte() {
- final byte ret = peekByte();
- ++nextByte;
- ensureBufferNotEmpty();
- return ret;
- }
-
- /**
- * @return Next byte from the input, without advancing over that byte. Do not call if at EOF.
- */
- public byte peekByte() {
- if (eof()) {
- throw new IllegalStateException("Cannot getByte() if EOF.");
- }
- return fileBuffer[nextByte];
- }
-
- /**
- * Read from input until input is exhausted, EOLN is seen, or output buffer is filled
- * @param outputBuffer where to put bytes read
- * @param startOutputIndex where to start putting bytes read
- * @return number of bytes read
- */
- public int readToEndOfOutputBufferOrEoln(final byte[] outputBuffer, final int startOutputIndex) {
- boolean sawNewline;
- int totalGrabbed = 0;
- do {
- if (!ensureBufferNotEmpty()) {
- break;
- }
- final int startInputIndex = nextByte;
- sawNewline = advanceToEobOrEoln();
- int lengthOfChunk = nextByte - startInputIndex;
-
- // Roll back if went past the amount that can be stored in the output buffer.
- // Assumption is that lines are relatively short so this won't happen very often.
- if (lengthOfChunk > outputBuffer.length - (startOutputIndex + totalGrabbed)) {
- lengthOfChunk = outputBuffer.length - (startOutputIndex + totalGrabbed);
- nextByte = startInputIndex + lengthOfChunk;
- }
- System.arraycopy(fileBuffer, startInputIndex, outputBuffer, startOutputIndex + totalGrabbed, lengthOfChunk);
- totalGrabbed += lengthOfChunk;
- } while (!sawNewline && totalGrabbed < outputBuffer.length - startOutputIndex);
- ensureBufferNotEmpty();
- return totalGrabbed;
- }
-
- /**
- * Advance nextByte to end of currently-buffered input or to line terminator
- * @return true if saw a line terminator
- */
- private boolean advanceToEobOrEoln() {
- while (nextByte < numBytes) {
- if (atEoln()) {
- return true;
- }
- ++nextByte;
- }
- return false;
- }
-
- /**
- * Ensure that fileBuffer has at least one byte available in it. Potentially wipes out
- * what is in fileBuffer so everything from fileBuffer[0..nextByte] should already have been pulled out.
- * @return false if EOF, else true
- */
- private boolean ensureBufferNotEmpty() {
- try {
- if (nextByte < numBytes) {
- return true;
- }
- nextByte = 0;
- numBytes = in.read(fileBuffer);
- atEof = (numBytes < 1);
- return !atEof;
- } catch (IOException e) {
- throw new PicardException("Exception reading InputStream", e);
- }
- }
-
-}
diff --git a/src/java/net/sf/picard/io/IoUtil.java b/src/java/net/sf/picard/io/IoUtil.java
deleted file mode 100644
index d279035..0000000
--- a/src/java/net/sf/picard/io/IoUtil.java
+++ /dev/null
@@ -1,686 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.io;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.IterableOnceIterator;
-import net.sf.samtools.Defaults;
-import net.sf.samtools.util.*;
-
-import java.io.*;
-import java.nio.charset.Charset;
-import java.util.*;
-import java.util.regex.Pattern;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import org.apache.tools.bzip2.CBZip2InputStream;
-import org.apache.tools.bzip2.CBZip2OutputStream;
-
-/**
- * A class for utility methods that wrap or aggregate functionality in Java IO.
- *
- * @author Tim Fennell
- */
-public class IoUtil extends net.sf.samtools.util.IOUtil {
- /** Possible extensions for VCF files and related formats. */
- public static final String[] VCF_EXTENSIONS = new String[] {".vcf", ".vcf.gz", ".bcf"};
-
- /**
- * Checks that a file is non-null, exists, is not a directory and is readable. If any
- * condition is false then a runtime exception is thrown.
- *
- * @param file the file to check for readability
- */
- public static void assertFileIsReadable(final File file) {
- if (file == null) {
- throw new IllegalArgumentException("Cannot check readability of null file.");
- } else if (!file.exists()) {
- throw new PicardException("Cannot read non-existent file: " + file.getAbsolutePath());
- }
- else if (file.isDirectory()) {
- throw new PicardException("Cannot read file because it is a directory: " + file.getAbsolutePath());
- }
- else if (!file.canRead()) {
- throw new PicardException("File exists but is not readable: " + file.getAbsolutePath());
- }
- }
-
- /**
- * Checks that a file is non-null, and is either extent and writable, or non-existent but
- * that the parent directory exists and is writable. If any
- * condition is false then a runtime exception is thrown.
- *
- * @param file the file to check for writability
- */
- public static void assertFileIsWritable(final File file) {
- if (file == null) {
- throw new IllegalArgumentException("Cannot check readability of null file.");
- } else if (!file.exists()) {
- // If the file doesn't exist, check that it's parent directory does and is writable
- final File parent = file.getAbsoluteFile().getParentFile();
- if (!parent.exists()) {
- throw new PicardException("Cannot write file: " + file.getAbsolutePath() + ". " +
- "Neither file nor parent directory exist.");
- }
- else if (!parent.isDirectory()) {
- throw new PicardException("Cannot write file: " + file.getAbsolutePath() + ". " +
- "File does not exist and parent is not a directory.");
- }
- else if (!parent.canWrite()) {
- throw new PicardException("Cannot write file: " + file.getAbsolutePath() + ". " +
- "File does not exist and parent directory is not writable..");
- }
- }
- else if (file.isDirectory()) {
- throw new PicardException("Cannot write file because it is a directory: " + file.getAbsolutePath());
- }
- else if (!file.canWrite()) {
- throw new PicardException("File exists but is not writable: " + file.getAbsolutePath());
- }
- }
-
- /**
- * Checks that a directory is non-null, extent, writable and a directory
- * otherwise a runtime exception is thrown.
- *
- * @param dir the dir to check for writability
- */
- public static void assertDirectoryIsWritable(final File dir) {
- if (dir == null) {
- throw new IllegalArgumentException("Cannot check readability of null file.");
- }
- else if (!dir.exists()) {
- throw new PicardException("Directory does not exist: " + dir.getAbsolutePath());
- }
- else if (!dir.isDirectory()) {
- throw new PicardException("Cannot write to directory because it is not a directory: " + dir.getAbsolutePath());
- }
- else if (!dir.canWrite()) {
- throw new PicardException("Directory exists but is not writable: " + dir.getAbsolutePath());
- }
- }
-
- /**
- * Checks that a directory is non-null, extent, readable and a directory
- * otherwise a runtime exception is thrown.
- *
- * @param dir the dir to check for writability
- */
- public static void assertDirectoryIsReadable(final File dir) {
- if (dir == null) {
- throw new IllegalArgumentException("Cannot check readability of null file.");
- }
- else if (!dir.exists()) {
- throw new PicardException("Directory does not exist: " + dir.getAbsolutePath());
- }
- else if (!dir.isDirectory()) {
- throw new PicardException("Cannot read from directory because it is not a directory: " + dir.getAbsolutePath());
- }
- else if (!dir.canRead()) {
- throw new PicardException("Directory exists but is not readable: " + dir.getAbsolutePath());
- }
- }
-
- /**
- * Checks that the two files are the same length, and have the same content, otherwise throws a runtime exception.
- */
- public static void assertFilesEqual(final File f1, final File f2) {
- try {
- if (f1.length() != f2.length()) {
- throw new PicardException("Files " + f1 + " and " + f2 + " are different lengths.");
- }
- final FileInputStream s1 = new FileInputStream(f1);
- final FileInputStream s2 = new FileInputStream(f2);
- final byte[] buf1 = new byte[1024 * 1024];
- final byte[] buf2 = new byte[1024 * 1024];
- int len1;
- while ((len1 = s1.read(buf1)) != -1) {
- final int len2 = s2.read(buf2);
- if (len1 != len2) {
- throw new PicardException("Unexpected EOF comparing files that are supposed to be the same length.");
- }
- if (!Arrays.equals(buf1, buf2)) {
- throw new PicardException("Files " + f1 + " and " + f2 + " differ.");
- }
- }
- s1.close();
- s2.close();
- } catch (IOException e) {
- throw new PicardException("Exception comparing files " + f1 + " and " + f2, e);
- }
-
- }
-
- /**
- * Checks that a file is of non-zero length
- */
- public static void assertFileSizeNonZero(final File file) {
- if (file.length() == 0) {
- throw new PicardException(file.getAbsolutePath() + " has length 0");
- }
- }
-
- /**
- * Opens a file for reading, decompressing it if necessary
- *
- * @param file The file to open
- * @return the input stream to read from
- */
- public static InputStream openFileForReading(final File file) {
-
- try {
- if(file.getName().endsWith(".bz2")) {
- return openBzipFileForReading(file);
- }
- if (file.getName().endsWith(".gz") ||
- file.getName().endsWith(".bfq")) {
- return openGzipFileForReading(file);
- }
- //TODO: Other compression formats
- else {
- return new FileInputStream(file);
- }
- }
- catch (IOException ioe) {
- throw new PicardException("Error opening file: " + file.getName(), ioe);
- }
-
- }
-
- /**
- * Opens a GZIP-encoded file for reading, decompressing it if necessary
- *
- * @param file The file to open
- * @return the input stream to read from
- */
- public static InputStream openGzipFileForReading(final File file) {
-
- try {
- return new GZIPInputStream(new FileInputStream(file));
- }
- catch (IOException ioe) {
- throw new PicardException("Error opening file: " + file.getName(), ioe);
- }
- }
-
- /**
- * Opens a GZIP-encoded file for reading, decompressing it if necessary
- *
- * @param file The file to open
- * @return the input stream to read from
- */
- public static InputStream openBzipFileForReading(final File file) {
-
- try {
- final FileInputStream fis = new FileInputStream(file);
- if(fis.read() != 66 || fis.read() != 90) { //Read magic number 'BZ' or else CBZip2InputStream will complain about it
- fis.close();
- throw new PicardException(file.getAbsolutePath() + " is not a BZIP file.");
- }
-
- return new CBZip2InputStream(fis);
- }
- catch (IOException ioe) {
- throw new PicardException("Error opening file: " + file.getName(), ioe);
- }
- }
-
- /**
- * Opens a file for writing, overwriting the file if it already exists
- *
- * @param file the file to write to
- * @return the output stream to write to
- */
- public static OutputStream openFileForWriting(final File file) {
- return openFileForWriting(file, false);
- }
-
- /**
- * Opens a file for writing
- *
- * @param file the file to write to
- * @param append whether to append to the file if it already exists (we overwrite it if false)
- * @return the output stream to write to
- */
- public static OutputStream openFileForWriting(final File file, final boolean append) {
-
- try {
- if (file.getName().endsWith(".bz2")) {
- return openBzipFileForWriting(file, append);
- }
- if (file.getName().endsWith(".gz") ||
- file.getName().endsWith(".bfq")) {
- return openGzipFileForWriting(file, append);
- }
- //TODO: Other compression formats
- else {
- return new FileOutputStream(file, append);
- }
- }
- catch (IOException ioe) {
- throw new PicardException("Error opening file for writing: " + file.getName(), ioe);
- }
- }
-
- /**
- * Preferred over PrintStream and PrintWriter because an exception is thrown on I/O error
- */
- public static BufferedWriter openFileForBufferedWriting(final File file, final boolean append) {
- return new BufferedWriter(new OutputStreamWriter(openFileForWriting(file, append)), Defaults.NON_ZERO_BUFFER_SIZE);
- }
-
- /**
- * Preferred over PrintStream and PrintWriter because an exception is thrown on I/O error
- */
- public static BufferedWriter openFileForBufferedWriting(final File file) {
- return openFileForBufferedWriting(file, false);
- }
-
- /**
- * Preferred over PrintStream and PrintWriter because an exception is thrown on I/O error
- */
- public static BufferedWriter openFileForBufferedUtf8Writing(final File file) {
- return new BufferedWriter(new OutputStreamWriter(openFileForWriting(file), Charset.forName("UTF-8")),
- Defaults.NON_ZERO_BUFFER_SIZE);
- }
-
- /**
- * Opens a file for reading, decompressing it if necessary
- *
- * @param file The file to open
- * @return the input stream to read from
- */
- public static BufferedReader openFileForBufferedUtf8Reading(final File file) {
- return new BufferedReader(new InputStreamReader(openFileForReading(file), Charset.forName("UTF-8")));
- }
-
- /**
- * Opens a GZIP encoded file for writing
- *
- * @param file the file to write to
- * @param append whether to append to the file if it already exists (we overwrite it if false)
- * @return the output stream to write to
- */
- public static OutputStream openGzipFileForWriting(final File file, final boolean append) {
-
- try {
- if (Defaults.BUFFER_SIZE > 0) {
- return new CustomGzipOutputStream(new FileOutputStream(file, append),
- Defaults.BUFFER_SIZE,
- Defaults.COMPRESSION_LEVEL);
- } else {
- return new CustomGzipOutputStream(new FileOutputStream(file, append), Defaults.COMPRESSION_LEVEL);
- }
- }
- catch (IOException ioe) {
- throw new PicardException("Error opening file for writing: " + file.getName(), ioe);
- }
- }
-
- /**
- * Opens a BZIP encoded file for writing
- *
- * @param file the file to write to
- * @param append whether to append to the file if it already exists (we overwrite it if false)
- * @return the output stream to write to
- */
- public static OutputStream openBzipFileForWriting(final File file, final boolean append) {
-
- try {
-
- final FileOutputStream fos = new FileOutputStream(file, append);
- fos.write(66); //write magic number 'BZ' because CBZip2OutputStream does not do it for you
- fos.write(90);
- return IOUtil.maybeBufferOutputStream(new CBZip2OutputStream(fos));
- }
- catch (IOException ioe) {
- throw new PicardException("Error opening file for writing: " + file.getName(), ioe);
- }
- }
-
- public static OutputStream openFileForMd5CalculatingWriting(final File file) {
- return new Md5CalculatingOutputStream(IoUtil.openFileForWriting(file), new File(file.getAbsolutePath() + ".md5"));
- }
-
- /**
- * Utility method to copy the contents of input to output. The caller is responsible for
- * opening and closing both streams.
- *
- * @param input contents to be copied
- * @param output destination
- */
- public static void copyStream(final InputStream input, final OutputStream output) {
- try {
- final byte[] buffer = new byte[Defaults.NON_ZERO_BUFFER_SIZE];
- int bytesRead = 0;
- while((bytesRead = input.read(buffer)) > 0) {
- output.write(buffer, 0, bytesRead);
- }
- } catch (IOException e) {
- throw new PicardException("Exception copying stream", e);
- }
- }
-
- /**
- * Copy input to output, overwriting output if it already exists.
- */
- public static void copyFile(final File input, final File output) {
- try {
- final InputStream is = new FileInputStream(input);
- final OutputStream os = new FileOutputStream(output);
- copyStream(is, os);
- os.close();
- is.close();
- } catch (IOException e) {
- throw new PicardException("Error copying " + input + " to " + output, e);
- }
- }
-
- /**
- *
- * @param directory
- * @param regexp
- * @return list of files matching regexp.
- */
- public static File[] getFilesMatchingRegexp(final File directory, final String regexp) {
- final Pattern pattern = Pattern.compile(regexp);
- return getFilesMatchingRegexp(directory, pattern);
- }
-
- public static File[] getFilesMatchingRegexp(final File directory, final Pattern regexp) {
- return directory.listFiles( new FilenameFilter() {
- public boolean accept(final File dir, final String name) {
- return regexp.matcher(name).matches();
- }
- });
- }
-
- /**
- * Delete the given file or directory. If a directory, all enclosing files and subdirs are also deleted.
- */
- public static boolean deleteDirectoryTree(final File fileOrDirectory) {
- boolean success = true;
-
- if (fileOrDirectory.isDirectory()) {
- for (final File child : fileOrDirectory.listFiles()) {
- success = success && deleteDirectoryTree(child);
- }
- }
-
- success = success && fileOrDirectory.delete();
- return success;
- }
-
- /**
- * Returns the size (in bytes) of the file or directory and all it's children.
- */
- public static long sizeOfTree(final File fileOrDirectory) {
- long total = fileOrDirectory.length();
- if (fileOrDirectory.isDirectory()) {
- for (final File f : fileOrDirectory.listFiles()) {
- total += sizeOfTree(f);
- }
- }
-
- return total;
- }
-
- /**
- *
- * Copies a directory tree (all subdirectories and files) recursively to a destination
- */
- public static void copyDirectoryTree(final File fileOrDirectory, final File destination) {
- if (fileOrDirectory.isDirectory()) {
- destination.mkdir();
- for(final File f : fileOrDirectory.listFiles()) {
- final File destinationFileOrDirectory = new File(destination.getPath(),f.getName());
- if (f.isDirectory()){
- copyDirectoryTree(f,destinationFileOrDirectory);
- }
- else {
- copyFile(f,destinationFileOrDirectory);
- }
- }
- }
- }
-
- /**
- * Create a temporary subdirectory in the default temporary-file directory, using the given prefix and suffix to generate the name.
- * Note that this method is not completely safe, because it create a temporary file, deletes it, and then creates
- * a directory with the same name as the file. Should be good enough.
- *
- * @param prefix The prefix string to be used in generating the file's name; must be at least three characters long
- * @param suffix The suffix string to be used in generating the file's name; may be null, in which case the suffix ".tmp" will be used
- * @return File object for new directory
- */
- public static File createTempDir(final String prefix, final String suffix) {
- try {
- final File tmp = File.createTempFile(prefix, suffix);
- if (!tmp.delete()) {
- throw new PicardException("Could not delete temporary file " + tmp);
- }
- if (!tmp.mkdir()) {
- throw new PicardException("Could not create temporary directory " + tmp);
- }
- return tmp;
- } catch (IOException e) {
- throw new PicardException("Exception creating temporary directory.", e);
- }
- }
-
- /** Checks that a file exists and is readable, and then returns a buffered reader for it. */
- public static BufferedReader openFileForBufferedReading(final File file) {
- return new BufferedReader(new InputStreamReader(openFileForReading(file)), Defaults.NON_ZERO_BUFFER_SIZE);
- }
-
- /** Takes a string and replaces any characters that are not safe for filenames with an underscore */
- public static String makeFileNameSafe(final String str) {
- return str.trim().replaceAll("[\\s!\"#$%&'()*/:;<=>?@\\[\\]\\\\^`{|}~]", "_");
- }
-
- /** Returns the name of the file extension (i.e. text after the last "." in the filename) including the . */
- public static String fileSuffix(final File f) {
- final String full = f.getName();
- final int index = full.lastIndexOf(".");
- if (index > 0 && index > full.lastIndexOf(File.separator)) {
- return full.substring(index);
- } else {
- return null;
- }
- }
-
- /** Returns the full path to the file with all symbolic links resolved **/
- public static String getFullCanonicalPath(final File file) {
- try {
- File f = file.getCanonicalFile();
- String canonicalPath = "";
- while (f != null && !f.getName().equals("")) {
- canonicalPath = "/" + f.getName() + canonicalPath;
- f = f.getParentFile();
- if (f != null) f = f.getCanonicalFile();
- }
- return canonicalPath;
- } catch (final IOException ioe) {
- throw new RuntimeException("Error getting full canonical path for " +
- file + ": " + ioe.getMessage(), ioe);
- }
- }
-
- /**
- * Reads everything from an input stream as characters and returns a single String.
- */
- public static String readFully(final InputStream in) {
- try {
- final BufferedReader r = new BufferedReader(new InputStreamReader(in), Defaults.NON_ZERO_BUFFER_SIZE);
- final StringBuilder builder = new StringBuilder(512);
- String line = null;
-
- while ((line = r.readLine()) != null) {
- if (builder.length() > 0) builder.append('\n');
- builder.append(line);
- }
-
- return builder.toString();
- }
- catch (final IOException ioe) {
- throw new RuntimeIOException("Error reading stream", ioe);
- }
- }
-
- /**
- * Returns an iterator over the lines in a text file. The underlying resources are automatically
- * closed when the iterator hits the end of the input, or manually by calling close().
- *
- * @param f a file that is to be read in as text
- * @return an iterator over the lines in the text file
- */
- public static IterableOnceIterator<String> readLines(final File f) {
- try {
- final BufferedReader in = IoUtil.openFileForBufferedReading(f);
-
- return new IterableOnceIterator<String>() {
- private String next = in.readLine();
-
- /** Returns true if there is another line to read or false otherwise. */
- @Override public boolean hasNext() { return next != null; }
-
- /** Returns the next line in the file or null if there are no more lines. */
- @Override public String next() {
- try {
- final String tmp = next;
- next = in.readLine();
- if (next == null) in.close();
- return tmp;
- }
- catch (final IOException ioe) { throw new RuntimeIOException(ioe); }
- }
-
- /** Closes the underlying input stream. Not required if end of stream has already been hit. */
- @Override public void close() throws IOException { CloserUtil.close(in); }
- };
- }
- catch (final IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /** Returns all of the untrimmed lines in the provided file. */
- public static List<String> slurpLines(final File file) throws FileNotFoundException {
- return slurpLines(new FileInputStream(file));
- }
-
- public static List<String> slurpLines(final InputStream is) throws FileNotFoundException {
- /** See {@link Scanner} source for origin of delimiter used here. */
- return tokenSlurp(is, Charset.defaultCharset(), "\r\n|[\n\r\u2028\u2029\u0085]");
- }
-
- /** Convenience overload for {@link #slurp(java.io.InputStream, java.nio.charset.Charset)} using the default charset {@link Charset#defaultCharset()}. */
- public static String slurp(final File file) throws FileNotFoundException {
- return slurp(new FileInputStream(file));
- }
-
- /** Convenience overload for {@link #slurp(java.io.InputStream, java.nio.charset.Charset)} using the default charset {@link Charset#defaultCharset()}. */
- public static String slurp(final InputStream is) {
- return slurp(is, Charset.defaultCharset());
- }
-
- /** Reads all of the stream into a String, decoding with the provided {@link Charset} then closes the stream quietly. */
- public static String slurp(final InputStream is, final Charset charSet) {
- final List<String> tokenOrEmpty = tokenSlurp(is, charSet, "\\A");
- return tokenOrEmpty.isEmpty() ? StringUtil.EMPTY_STRING : CollectionUtil.getSoleElement(tokenOrEmpty);
- }
-
- /** Tokenizes the provided input stream into memory using the given delimiter. */
- private static List<String> tokenSlurp(final InputStream is, final Charset charSet, final String delimiterPattern) {
- try {
- final Scanner s = new Scanner(is, charSet.toString()).useDelimiter(delimiterPattern);
- final LinkedList<String> tokens = new LinkedList<String>();
- while (s.hasNext()) {
- tokens.add(s.next());
- }
- return tokens;
- } finally {
- CloserUtil.close(is);
- }
- }
-
- /**
- * Go through the files provided and if they have one of the provided file extensions pass the file into the output
- * otherwise assume that file is a list of filenames and unfold it into the output.
- */
- public static List<File> unrollFiles(final Collection<File> inputs, final String... extensions) {
- if (extensions.length < 1) throw new IllegalArgumentException("Must provide at least one extension.");
-
- final Stack<File> stack = new Stack<File>();
- final List<File> output = new ArrayList<File>();
- stack.addAll(inputs);
-
- while (!stack.empty()) {
- final File f = stack.pop();
- final String name = f.getName();
- boolean matched = false;
-
- for (final String ext : extensions) {
- if (!matched && name.endsWith(ext)) {
- output.add(f);
- matched = true;
- }
- }
-
- // If the file didn't match a given extension, treat it as a list of files
- if (!matched) {
- IoUtil.assertFileIsReadable(f);
-
- for (final String s : IoUtil.readLines(f)) {
- if (!s.trim().isEmpty()) stack.push(new File(s.trim()));
- }
- }
- }
-
- // Preserve input order (since we're using a stack above) for things that care
- Collections.reverse(output);
-
- return output;
- }
-}
-
-/**
- * Hacky little class used to allow us to set the compression level on a GZIP output stream which, for some
- * bizarre reason, is not exposed in the standard API.
- *
- * @author Tim Fennell
- */
-class CustomGzipOutputStream extends GZIPOutputStream {
- CustomGzipOutputStream(final OutputStream outputStream, final int bufferSize, final int compressionLevel) throws IOException {
- super(outputStream, bufferSize);
- this.def.setLevel(compressionLevel);
- }
-
- CustomGzipOutputStream(final OutputStream outputStream, final int compressionLevel) throws IOException {
- super(outputStream);
- this.def.setLevel(compressionLevel);
- }
-}
-
diff --git a/src/java/net/sf/picard/liftover/Chain.java b/src/java/net/sf/picard/liftover/Chain.java
deleted file mode 100644
index 850c56f..0000000
--- a/src/java/net/sf/picard/liftover/Chain.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.liftover;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Interval;
-import net.sf.picard.util.OverlapDetector;
-import net.sf.samtools.util.BufferedLineReader;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.*;
-import java.util.regex.Pattern;
-
-/**
- * Holds a single chain from a UCSC chain file. Chain file format is described here: http://genome.ucsc.edu/goldenPath/help/chain.html
- *
- * In a chain file, a chain consists of a header line followed by alignment data lines. Chain class embodies the header
- * line, and the list of ContinuousBlocks embodies the alignment data lines.
- *
- * A continuous block represents a continuous range of the "from" genome that maps to a continuous range of the "to"
- * genome of the same length. A chain is an ordered list of continuous blocks, with gaps between the continuous blocks.
- * All the continuous blocks in a chain must map from a single "from" sequence to a single "to" sequence. All the
- * continuous blocks in a chain map from the positive strand in the "from" genome build to the same strand in the
- * "to" genome build. The gaps in between the continuous blocks in a chain represent un-lift-overable regions.
- * A gap in a chain may be found in another chain (e.g. if a portion of a sequence is reversed in the "to" genome).
- *
- * In UCSC liftOver terminology, the "target" is the "from" genome build, and the "query" is the "to" genome build.
- * E.g. when mapping from HG18 to HG19, the HG18 coordinates are "target" and HG19 is "query." The USCS terminology
- * is not used here because it confuses me.
- *
- * Chain coordinates are zero-based, half open. However, there is also an Interval attribute of Chain that is in
- * standard Picard coordinates, i.e. one-based inclusive.
- *
- * @author alecw at broadinstitute.org
- */
-class Chain {
- // For parsing chain file
- private static final Pattern SPLITTER = Pattern.compile("\\s");
-
- /** Score is not used in basic liftover implementation, but is stored so that chain can be written to disk. */
- final double score;
- /** one-based, inclusive, so that Chain can be stored in an OverlapDetector */
- final Interval interval;
- /** Total score for chain is not used in basic liftover so not stored. */
- // final double score;
- final String fromSequenceName;
- /** Overall size of the "from" sequence. */
- final int fromSequenceSize;
- /* tStrand always +, so not stored */
- /** Start of range covered in "from" sequence. */
- final int fromChainStart;
- /** End of range covered in "from" sequence. */
- final int fromChainEnd;
- final String toSequenceName;
- /** Overall size of the "to" sequence. */
- final int toSequenceSize;
- /** "to" strand. If this is true, then the region covered by this chain is flipped in the "to" genome. */
- final boolean toNegativeStrand;
- /** Start of range covered in "to" sequence. */
- final int toChainStart;
- /** End of range covered in "to" sequence. */
- final int toChainEnd;
- /** ID of chain in file. */
- final int id;
- private final List<ContinuousBlock> blockList = new ArrayList<ContinuousBlock>();
-
- /**
- * Construct a Chain from the parsed header fields.
- */
- private Chain(final double score, final String fromSequenceName, final int fromSequenceSize, final int fromChainStart, final int fromChainEnd,
- final String toSequenceName, final int toSequenceSize, final boolean toNegativeStrand,
- final int toChainStart, final int toChainEnd, final int id) {
- // Convert to one-based, inclusive for Interval.
- interval = new Interval(fromSequenceName, fromChainStart + 1, fromChainEnd);
- this.score = score;
- this.toChainEnd = toChainEnd;
- this.toSequenceName = toSequenceName;
- this.toNegativeStrand = toNegativeStrand;
- this.toSequenceSize = toSequenceSize;
- this.toChainStart = toChainStart;
- // not used
- //this.score = score;
- this.fromChainEnd = fromChainEnd;
- this.fromSequenceName = fromSequenceName;
- this.fromSequenceSize = fromSequenceSize;
- this.fromChainStart = fromChainStart;
- this.id = id;
- }
-
-
- /**
- * Holds a range that continuously lines up between target and query genome builds.
- * Indices are 0-based, half-open.
- */
- static class ContinuousBlock {
- final int fromStart; /* Start of range covered in "from". */
- final int toStart; /* Range covered in "to". */
- final int blockLength; /* length of continuous block of that maps btw from and to */
- //int score; /* Score of block. */
-
- private ContinuousBlock(final int fromStart, final int toStart, final int blockLength) {
- this.fromStart = fromStart;
- this.toStart = toStart;
- this.blockLength = blockLength;
- }
-
- /**
- * @return 0-based, half-open end of region in "from"
- */
- int getFromEnd() {
- return fromStart + blockLength;
- }
-
- /**
- * @return 0-based, half-open end of region in "to"
- */
- int getToEnd() {
- return toStart + blockLength;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final ContinuousBlock that = (ContinuousBlock) o;
-
- if (blockLength != that.blockLength) return false;
- if (fromStart != that.fromStart) return false;
- if (toStart != that.toStart) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = fromStart;
- result = 31 * result + toStart;
- result = 31 * result + blockLength;
- return result;
- }
- }
-
- private void addBlock(final int tStart, final int qStart, final int blockLength) {
- blockList.add(new ContinuousBlock(tStart, qStart, blockLength));
- }
-
- /**
- * @return The ith ContinuousBlock in this Chain.
- */
- ContinuousBlock getBlock(final int i) {
- return blockList.get(i);
- }
-
- /**
- * @return Unmodifiable list of ContinuousBlocks in this Chain.
- */
- List<ContinuousBlock> getBlocks() {
- return Collections.unmodifiableList(blockList);
- }
-
- void write(final PrintWriter writer) {
- writer.printf("chain\t%f\t%s\t%d\t+\t%d\t%d\t%s\t%d\t%s\t%d\t%d\t%d\n",
- score, fromSequenceName, fromSequenceSize, fromChainStart, fromChainEnd,
- toSequenceName, toSequenceSize, (toNegativeStrand? "-": "+"), toChainStart, toChainEnd, id);
- for (int i = 0; i < blockList.size() - 1; ++i) {
- final ContinuousBlock thisBlock = blockList.get(i);
- final ContinuousBlock nextBlock = blockList.get(i+1);
-
- final int fromGap = nextBlock.fromStart - thisBlock.getFromEnd();
- final int toGap = nextBlock.toStart - thisBlock.getToEnd();
- writer.printf("%d\t%d\t%d\n", thisBlock.blockLength, fromGap, toGap);
- }
- writer.printf("%d\n", blockList.get(blockList.size() - 1).blockLength);
- writer.println();
- }
-
- /**
- * Throw an exception if Chain looks strange.
- */
- void validate() {
- validatePositive("fromSequenceSize", fromSequenceSize);
- validateNonNegative("fromChainStart", fromChainStart);
- validateNonNegative("fromChainEnd", fromChainEnd);
- validatePositive("toSequenceSize", toSequenceSize);
- validateNonNegative("toChainStart", toChainStart);
- validateNonNegative("toChainEnd", toChainEnd);
- int fromLength = fromChainEnd - fromChainStart;
- validatePositive("from length", fromLength);
- int toLength = toChainEnd - toChainStart;
- validatePositive("to length", toLength);
- if (fromLength > fromSequenceSize) throw new PicardException("From chain length (" + fromLength +
- ") < from sequence length (" + fromSequenceSize + ") for chain " + id);
- if (toLength > toSequenceSize) throw new PicardException("To chain length (" + toLength +
- ") < to sequence length (" + toSequenceSize + ") for chain " + id);
- if (fromSequenceName.isEmpty()) throw new PicardException("Chain " + id + "has empty from sequence name.");
- if (toSequenceName.isEmpty()) throw new PicardException("Chain " + id + "has empty to sequence name.");
- if (blockList.isEmpty()) throw new PicardException("Chain " + id + " has empty block list.");
- final ContinuousBlock firstBlock = blockList.get(0);
- if (firstBlock.fromStart != fromChainStart) {
- throw new PicardException("First block from start != chain from start for chain " + id);
- }
- if (firstBlock.toStart != toChainStart) {
- throw new PicardException("First block to start != chain to start for chain " + id);
- }
- final ContinuousBlock lastBlock = blockList.get(blockList.size() - 1);
- if (lastBlock.getFromEnd() != fromChainEnd) {
- throw new PicardException("Last block from end != chain from end for chain " + id);
- }
- if (lastBlock.getToEnd() != toChainEnd) {
- throw new PicardException("Last block to end < chain to end for chain " + id);
- }
- for (int i = 1; i < blockList.size(); ++i) {
- final ContinuousBlock thisBlock = blockList.get(i);
- final ContinuousBlock prevBlock = blockList.get(i-1);
- if (thisBlock.fromStart < prevBlock.getFromEnd()) {
- throw new PicardException("Continuous block " + i + " from starts before previous block ends for chain " + id);
- }
- if (thisBlock.toStart < prevBlock.getToEnd()) {
- throw new PicardException("Continuous block " + i + " to starts before previous block ends for chain " + id);
- }
- }
- }
-
- private void validatePositive(final String attributeName, final int attribute) {
- if (attribute <= 0) {
- throw new PicardException(attributeName + " is not positive: " + attribute + " for chain " + id);
- }
- }
-
- private void validateNonNegative(final String attributeName, final int attribute) {
- if (attribute < 0) {
- throw new PicardException(attributeName + " is negative: " + attribute + " for chain " + id);
- }
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final Chain chain = (Chain) o;
-
- if (fromChainEnd != chain.fromChainEnd) return false;
- if (fromChainStart != chain.fromChainStart) return false;
- if (fromSequenceSize != chain.fromSequenceSize) return false;
- if (id != chain.id) return false;
- if (Double.compare(chain.score, score) != 0) return false;
- if (toChainEnd != chain.toChainEnd) return false;
- if (toChainStart != chain.toChainStart) return false;
- if (toNegativeStrand != chain.toNegativeStrand) return false;
- if (toSequenceSize != chain.toSequenceSize) return false;
- if (blockList != null ? !blockList.equals(chain.blockList) : chain.blockList != null) return false;
- if (fromSequenceName != null ? !fromSequenceName.equals(chain.fromSequenceName) : chain.fromSequenceName != null)
- return false;
- if (interval != null ? !interval.equals(chain.interval) : chain.interval != null) return false;
- if (toSequenceName != null ? !toSequenceName.equals(chain.toSequenceName) : chain.toSequenceName != null)
- return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result;
- long temp;
- temp = score != +0.0d ? Double.doubleToLongBits(score) : 0L;
- result = (int) (temp ^ (temp >>> 32));
- result = 31 * result + (interval != null ? interval.hashCode() : 0);
- result = 31 * result + (fromSequenceName != null ? fromSequenceName.hashCode() : 0);
- result = 31 * result + fromSequenceSize;
- result = 31 * result + fromChainStart;
- result = 31 * result + fromChainEnd;
- result = 31 * result + (toSequenceName != null ? toSequenceName.hashCode() : 0);
- result = 31 * result + toSequenceSize;
- result = 31 * result + (toNegativeStrand ? 1 : 0);
- result = 31 * result + toChainStart;
- result = 31 * result + toChainEnd;
- result = 31 * result + id;
- result = 31 * result + (blockList != null ? blockList.hashCode() : 0);
- return result;
- }
-
- /**
- * Read all the chains and load into an OverlapDetector.
- * @param chainFile File in UCSC chain format.
- * @return OverlapDetector will all Chains from reader loaded into it.
- */
- static OverlapDetector<Chain> loadChains(final File chainFile) {
- final Set<Integer> ids = new HashSet<Integer>();
- BufferedLineReader reader = new BufferedLineReader(IoUtil.openFileForReading(chainFile));
- final OverlapDetector<Chain> ret = new OverlapDetector<Chain>(0, 0);
- Chain chain;
- while ((chain = Chain.loadChain(reader, chainFile.toString())) != null) {
- if (ids.contains(chain.id)) {
- throw new PicardException("Chain id " + chain.id + " appears more than once in chain file.");
- }
- ids.add(chain.id);
- ret.addLhs(chain, chain.interval);
- }
- reader.close();
- return ret;
- }
-
- /**
- * Read a single Chain from reader.
- * @param reader Text representation of chains.
- * @param chainFile For error messages only.
- * @return New Chain with associated ContinuousBlocks.
- */
- private static Chain loadChain(final BufferedLineReader reader, final String chainFile) {
- String line = reader.readLine();
- if (line == null) {
- return null;
- }
- String[] chainFields = SPLITTER.split(line);
- if (chainFields.length != 13) {
- throwChainFileParseException("chain line has wrong number of fields", chainFile, reader.getLineNumber());
- }
- if (!"chain".equals(chainFields[0])) {
- throwChainFileParseException("chain line does not start with 'chain'", chainFile, reader.getLineNumber());
- }
- double score = 0;
- String fromSequenceName = null;
- int fromSequenceSize = 0;
- int fromChainStart = 0;
- int fromChainEnd = 0;
- String toSequenceName = null;
- int toSequenceSize = 0;
- boolean toNegativeStrand = false;
- int toChainStart = 0;
- int toChainEnd = 0;
- int id = 0;
- try {
- score = Double.parseDouble(chainFields[1]);
- fromSequenceName = chainFields[2];
- fromSequenceSize = Integer.parseInt(chainFields[3]);
- // Strand ignored because it is always +
- fromChainStart = Integer.parseInt(chainFields[5]);
- fromChainEnd = Integer.parseInt(chainFields[6]);
- toSequenceName = chainFields[7];
- toSequenceSize = Integer.parseInt(chainFields[8]);
- toNegativeStrand = chainFields[9].equals("-");
- toChainStart = Integer.parseInt(chainFields[10]);
- toChainEnd = Integer.parseInt(chainFields[11]);
- id = Integer.parseInt(chainFields[12]);
- } catch (NumberFormatException e) {
- throwChainFileParseException("Invalid field", chainFile, reader.getLineNumber());
- }
- final Chain chain = new Chain(score, fromSequenceName, fromSequenceSize, fromChainStart, fromChainEnd, toSequenceName, toSequenceSize, toNegativeStrand, toChainStart,
- toChainEnd, id);
- int toBlockStart = chain.toChainStart;
- int fromBlockStart = chain.fromChainStart;
- boolean sawLastLine = false;
- while (true) {
- line = reader.readLine();
- if (line == null || line.equals("")) {
- if (!sawLastLine) {
- throwChainFileParseException("Reached end of chain without seeing terminal block", chainFile, reader.getLineNumber());
- }
- break;
- }
- if (sawLastLine) {
- throwChainFileParseException("Terminal block seen before end of chain", chainFile, reader.getLineNumber());
- }
- String[] blockFields = SPLITTER.split(line);
- if (blockFields.length == 1) {
- sawLastLine = true;
- } else if (blockFields.length != 3) {
- throwChainFileParseException("Block line has unexpected number of fields", chainFile, reader.getLineNumber());
- }
- int size = Integer.parseInt(blockFields[0]);
- chain.addBlock(fromBlockStart, toBlockStart, size);
- if (!sawLastLine) {
- fromBlockStart += Integer.parseInt(blockFields[1]) + size;
- toBlockStart += Integer.parseInt(blockFields[2]) + size;
- }
-
- }
- chain.validate();
- return chain;
- }
-
- private static void throwChainFileParseException(final String message, final String chainFile, final int lineNumber) {
- throw new PicardException(message + " in chain file " + chainFile + " at line " + lineNumber);
- }
-}
diff --git a/src/java/net/sf/picard/liftover/LiftOver.java b/src/java/net/sf/picard/liftover/LiftOver.java
deleted file mode 100644
index 9528d8a..0000000
--- a/src/java/net/sf/picard/liftover/LiftOver.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.liftover;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Interval;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.OverlapDetector;
-import net.sf.samtools.SAMSequenceDictionary;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Java port of UCSC liftOver. Only the most basic liftOver functionality is implemented.
- * Internally coordinates are 0-based, half-open. The API is standard Picard 1-based, inclusive.
- *
- * @author alecw at broadinstitute.org
- */
-public class LiftOver {
- private static final Log LOG = Log.getInstance(LiftOver.class);
-
- public static final double DEFAULT_LIFTOVER_MINMATCH = 0.95;
-
- private double liftOverMinMatch = DEFAULT_LIFTOVER_MINMATCH;
- private final OverlapDetector<Chain> chains;
-
- /**
- * Load UCSC chain file in order to lift over Intervals.
- */
- public LiftOver(File chainFile) {
- IoUtil.assertFileIsReadable(chainFile);
- chains = Chain.loadChains(chainFile);
- }
-
- /**
- * Throw an exception if all the "to" sequence names in the chains are not found in the given sequence dictionary.
- */
- public void validateToSequences(final SAMSequenceDictionary sequenceDictionary) {
- for (final Chain chain : chains.getAll()) {
- if (sequenceDictionary.getSequence(chain.toSequenceName) == null) {
- throw new PicardException("Sequence " + chain.toSequenceName + " from chain file is not found in sequence dictionary.");
- }
- }
-
- }
-
- /**
- * Lift over the given interval to the new genome build using the liftOverMinMatch set for this
- * LiftOver object.
- * @param interval Interval to be lifted over.
- * @return Interval in the output build coordinates, or null if it cannot be lifted over.
- */
- public Interval liftOver(final Interval interval) {
- return liftOver(interval, liftOverMinMatch);
- }
-
- /**
- * Lift over the given interval to the new genome build.
- * @param interval Interval to be lifted over.
- * @param liftOverMinMatch Minimum fraction of bases that must remap.
- * @return Interval in the output build coordinates, or null if it cannot be lifted over.
- */
- public Interval liftOver(final Interval interval, final double liftOverMinMatch) {
- if (interval.length() == 0) {
- throw new IllegalArgumentException("Zero-length interval cannot be lifted over. Interval: " +
- interval.getName());
- }
- Chain chainHit = null;
- TargetIntersection targetIntersection = null;
- // Number of bases in interval that can be lifted over must be >= this.
- double minMatchSize = liftOverMinMatch * interval.length();
-
- // Find the appropriate Chain, and the part of the chain corresponding to the interval to be lifted over.
- for (final Chain chain : chains.getOverlaps(interval)) {
- final TargetIntersection candidateIntersection = targetIntersection(chain, interval);
- if (candidateIntersection != null && candidateIntersection.intersectionLength >= minMatchSize) {
- if (chainHit != null) {
- // In basic liftOver, multiple hits are not allowed.
- return null;
- }
- chainHit = chain;
- targetIntersection = candidateIntersection;
- } else if (candidateIntersection != null) {
- LOG.info("Interval " + interval.getName() + " failed to match chain " + chain.id +
- " because intersection length " + candidateIntersection.intersectionLength + " < minMatchSize "
- + minMatchSize +
- " (" + (candidateIntersection.intersectionLength/(float)interval.length()) + " < " + liftOverMinMatch + ")");
- }
- }
- if (chainHit == null) {
- // Can't be lifted over.
- return null;
- }
-
- return createToInterval(interval.getName(), targetIntersection);
- }
-
- public List<PartialLiftover> diagnosticLiftover(final Interval interval) {
- final List<PartialLiftover> ret = new ArrayList<PartialLiftover>();
- if (interval.length() == 0) {
- throw new IllegalArgumentException("Zero-length interval cannot be lifted over. Interval: " +
- interval.getName());
- }
- for (final Chain chain : chains.getOverlaps(interval)) {
- Interval intersectingChain = interval.intersect(chain.interval);
- final TargetIntersection targetIntersection = targetIntersection(chain, intersectingChain);
- if (targetIntersection == null) {
- ret.add(new PartialLiftover(intersectingChain, chain.id));
- } else {
- Interval toInterval = createToInterval(interval.getName(), targetIntersection);
- float percentLiftedOver = targetIntersection.intersectionLength/(float)interval.length();
- ret.add(new PartialLiftover(intersectingChain, toInterval, targetIntersection.chain.id, percentLiftedOver));
- }
- }
- return ret;
- }
-
- private static Interval createToInterval(final String intervalName, final TargetIntersection targetIntersection) {
- // Compute the query interval given the offsets of the target interval start and end into the first and
- // last ContinuousBlocks.
- int toStart = targetIntersection.chain.getBlock(targetIntersection.firstBlockIndex).toStart + targetIntersection.startOffset;
- int toEnd = targetIntersection.chain.getBlock(targetIntersection.lastBlockIndex).getToEnd() - targetIntersection.offsetFromEnd;
- if (toEnd <= toStart || toStart < 0) {
- throw new PicardException("Something strange lifting over interval " + intervalName);
- }
-
- if (targetIntersection.chain.toNegativeStrand) {
- // Flip if query is negative.
- int negativeStart = targetIntersection.chain.toSequenceSize - toEnd;
- int negativeEnd = targetIntersection.chain.toSequenceSize - toStart;
- toStart = negativeStart;
- toEnd = negativeEnd;
- }
- // Convert to 1-based, inclusive.
- return new Interval(targetIntersection.chain.toSequenceName, toStart+1, toEnd, targetIntersection.chain.toNegativeStrand,
- intervalName);
- }
-
- /**
- * Add up overlap btw the blocks in this chain and the given interval.
- * @return Length of overlap, offsets into first and last ContinuousBlocks, and indices of first and
- * last ContinuousBlocks.
- */
- private static TargetIntersection targetIntersection(final Chain chain, final Interval interval) {
- int intersectionLength = 0;
- // Convert interval to 0-based, half-open
- int start = interval.getStart() - 1;
- int end = interval.getEnd();
- int firstBlockIndex = -1;
- int lastBlockIndex = -1;
- int startOffset = -1;
- int offsetFromEnd = -1;
- List<Chain.ContinuousBlock> blockList = chain.getBlocks();
- for (int i = 0; i < blockList.size(); ++i) {
- final Chain.ContinuousBlock block = blockList.get(i);
- if (block.fromStart >= end) {
- break;
- } else if (block.getFromEnd() <= start) {
- continue;
- }
- if (firstBlockIndex == -1) {
- firstBlockIndex = i;
- if (start > block.fromStart) {
- startOffset = start - block.fromStart;
- } else {
- startOffset = 0;
- }
- }
- lastBlockIndex = i;
- if (block.getFromEnd() > end) {
- offsetFromEnd = block.getFromEnd() - end;
- } else {
- offsetFromEnd = 0;
- }
- int thisIntersection = Math.min(end, block.getFromEnd()) - Math.max(start, block.fromStart);
- if (thisIntersection <= 0) {
- throw new PicardException("Should have been some intersection.");
- }
- intersectionLength += thisIntersection;
- }
- if (intersectionLength == 0) {
- return null;
- }
- return new TargetIntersection(chain, intersectionLength, startOffset, offsetFromEnd, firstBlockIndex, lastBlockIndex);
- }
-
- /**
- * Get minimum fraction of bases that must remap.
- */
- public double getLiftOverMinMatch() {
- return liftOverMinMatch;
- }
-
- /**
- * Set minimum fraction of bases that must remap.
- */
- public void setLiftOverMinMatch(final double liftOverMinMatch) {
- this.liftOverMinMatch = liftOverMinMatch;
- }
-
- /**
- * Value class returned by targetIntersection()
- */
- private static class TargetIntersection {
- /** Chain used for this intersection */
- final Chain chain;
- /** Total intersectionLength length */
- final int intersectionLength;
- /** Offset of target interval start in first block. */
- final int startOffset;
- /** Distance from target interval end to end of last block. */
- final int offsetFromEnd;
- /** Index of first ContinuousBlock matching interval. */
- final int firstBlockIndex;
- /** Index of last ContinuousBlock matching interval. */
- final int lastBlockIndex;
-
- TargetIntersection(final Chain chain,final int intersectionLength, final int startOffset,
- final int offsetFromEnd, final int firstBlockIndex, final int lastBlockIndex) {
- this.chain = chain;
- this.intersectionLength = intersectionLength;
- this.startOffset = startOffset;
- this.offsetFromEnd = offsetFromEnd;
- this.firstBlockIndex = firstBlockIndex;
- this.lastBlockIndex = lastBlockIndex;
- }
- }
-
- /**
- * Represents a portion of a liftover operation, for use in diagnosing liftover failures.
- */
- public static class PartialLiftover {
- /** Intersection between "from" interval and "from" region of a chain. */
- final Interval fromInterval;
- /**
- * Result of lifting over fromInterval (with no percentage mapped requirement). This is null
- * if fromInterval falls entirely with a gap of the chain. */
- final Interval toInterval;
- /** id of chain used for this liftover */
- final int chainId;
- /** Percentage of bases in fromInterval that lifted over. 0 if fromInterval is not covered by any chain. */
- final float percentLiftedOver;
-
- PartialLiftover(final Interval fromInterval, final Interval toInterval, final int chainId, final float percentLiftedOver) {
- this.fromInterval = fromInterval;
- this.toInterval = toInterval;
- this.chainId = chainId;
- this.percentLiftedOver = percentLiftedOver;
- }
-
- PartialLiftover(final Interval fromInterval, final int chainId) {
- this.fromInterval = fromInterval;
- this.toInterval = null;
- this.chainId = chainId;
- this.percentLiftedOver = 0.0f;
- }
-
- public String toString() {
- if (toInterval == null) {
- // Matched a chain, but entirely within a gap.
- return fromInterval.toString() + " (len " + fromInterval.length() + ")=>null using chain " + chainId;
- }
- final String strand = toInterval.isNegativeStrand()? "-": "+";
- return fromInterval.toString() + " (len " + fromInterval.length() + ")=>" + toInterval + "(" + strand
- + ") using chain " + chainId + " ; pct matched " + percentLiftedOver;
- }
- }
-}
diff --git a/src/java/net/sf/picard/metrics/Header.java b/src/java/net/sf/picard/metrics/Header.java
deleted file mode 100644
index 6e36b32..0000000
--- a/src/java/net/sf/picard/metrics/Header.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-/**
- * A header for a metrics file. A header simply consists of a type and some arbitrary
- * data, but must be able to turn itself into a String and parse it's data back out
- * of that String at a later date.
- *
- * @author Tim Fennell
- */
-public interface Header {
- /** Converts the header to a String for persisting to a file. */
- public String toString();
-
- /** Parses the data contained in the String version of the header. */
- public void parse(String in);
-
-}
diff --git a/src/java/net/sf/picard/metrics/MetricBase.java b/src/java/net/sf/picard/metrics/MetricBase.java
deleted file mode 100644
index f20adb3..0000000
--- a/src/java/net/sf/picard/metrics/MetricBase.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.FormatUtil;
-
-import java.lang.reflect.Field;
-
-/**
- * A base class from which all Metric classes should inherit.
- *
- * @author Tim Fennell
- */
-public class MetricBase {
- /**
- * An equals method that checks equality by asserting that the classes are of the exact
- * same type and that all public fields are equal.
- *
- * @param o an instance to compare to
- * @return true if they are equal, false otherwise
- */
- public boolean equals(final Object o) {
- if (o == null) return false;
- if (o.getClass() != getClass()) return false;
-
- // Loop through all the fields and check that they are either
- // null in both objects or equal in both objects
- for (final Field f : getClass().getFields()) {
- try {
- final Object lhs = f.get(this);
- final Object rhs = f.get(o);
-
- if (lhs == null) {
- if (rhs == null) {
- // keep going
- }
- else if (rhs != null) {
- return false;
- }
- }
- else {
- if (lhs.equals(rhs)) {
- // keep going
- }
- else {
- return false;
- }
- }
- }
- catch (IllegalAccessException iae) {
- throw new PicardException("Could not read field " + f.getName() + " from a " + getClass().getSimpleName());
- }
- }
-
- // If we got this far all the fields are equal
- return true;
- }
-
- public int hashCode() {
- int result = 0;
- for (final Field f : getClass().getFields()) {
- try {
- result = 31 * result + f.get(this).hashCode();
- } catch (IllegalAccessException e) {
- throw new PicardException("Could not read field " + f.getName() + " from a " + getClass().getSimpleName());
- }
- }
- return result;
- }
-
- /** Converts the metric class to a human readable string. */
- public String toString() {
- final StringBuilder buffer = new StringBuilder();
- final FormatUtil formatter = new FormatUtil();
-
- for (final Field f : getClass().getFields()) {
- try {
- buffer.append(f.getName());
- buffer.append("\t");
- buffer.append(formatter.format(f.get(this)));
- buffer.append("\n");
- }
- catch (IllegalAccessException iae) {
- throw new PicardException("Could not read field " + f.getName() + " from a " + getClass().getSimpleName());
- }
- }
-
- return buffer.toString();
- }
-
- public boolean equals(MetricBase that) {
- for (Field field : this.getClass().getFields()) {
- try {
- if (!field.get(this).equals(field.get(that))) {
- return false;
- }
- }
- catch (IllegalAccessException ex) {
- return false;
- }
- }
- return true;
-
- }
-}
diff --git a/src/java/net/sf/picard/metrics/MetricsFile.java b/src/java/net/sf/picard/metrics/MetricsFile.java
deleted file mode 100644
index fa7761d..0000000
--- a/src/java/net/sf/picard/metrics/MetricsFile.java
+++ /dev/null
@@ -1,521 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.util.FormatUtil;
-import net.sf.picard.util.Histogram;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.*;
-import java.lang.reflect.Field;
-import java.util.*;
-
-/**
- * Contains a set of metrics that can be written to a file and parsed back
- * again. The set of metrics is composed of zero or more instances of a class,
- * BEAN, that extends {@link MetricBase} (all instances must be of the same type)
- * and may optionally include one or more histograms that share the same key set.
- *
- * @author Tim Fennell
- */
-public class MetricsFile<BEAN extends MetricBase, HKEY extends Comparable> {
- public static final String MAJOR_HEADER_PREFIX = "## ";
- public static final String MINOR_HEADER_PREFIX = "# ";
- public static final String SEPARATOR = "\t";
- public static final String HISTO_HEADER = "## HISTOGRAM\t";
- public static final String METRIC_HEADER = "## METRICS CLASS\t";
-
- private final Set<String> columnLabels = new HashSet<String>();
- private final List<Header> headers = new ArrayList<Header>();
- private final List<BEAN> metrics = new ArrayList<BEAN>();
- private final List<Histogram<HKEY>> histograms = new ArrayList<Histogram<HKEY>>();
-
- /** Adds a header to the collection of metrics. */
- public void addHeader(Header h) { this.headers.add(h); }
-
- /** Returns the list of headers. */
- public List<Header> getHeaders() { return Collections.unmodifiableList(this.headers); }
-
- /** Adds a bean to the collection of metrics. */
- public void addMetric(final BEAN bean) { this.metrics.add(bean); }
-
- /** Returns the list of headers. */
- public List<BEAN> getMetrics() { return Collections.unmodifiableList(this.metrics); }
-
- public Set<String> getMetricsColumnLabels() { return Collections.unmodifiableSet(this.columnLabels); }
-
- /** Returns the histogram contained in the metrics file if any. */
- public Histogram<HKEY> getHistogram() {
- if (histograms.size() > 0) return this.histograms.get(0);
- else return null;
- }
-
- /** Sets the histogram contained in the metrics file. */
- public void setHistogram(final Histogram<HKEY> histogram) {
- if (this.histograms.isEmpty()) {
- if (histogram != null) this.histograms.add(histogram);
- }
- else {
- this.histograms.set(0, histogram);
- }
- }
-
- /** Adds a histogram to the list of histograms in the metrics file. */
- public void addHistogram(final Histogram<HKEY> histogram) {
- this.histograms.add(histogram);
- }
-
- //** Returns an unmodifiable version of the histogram list */
- public List<Histogram<HKEY>> getAllHistograms() {
- return Collections.unmodifiableList(histograms);
- }
-
- /** Returns the number of histograms added to the metrics file. */
- public int getNumHistograms()
- {
- return this.histograms.size();
- }
-
- /** Returns the list of headers with the specified type. */
- public List<Header> getHeaders(final Class<? extends Header> type) {
- List<Header> tmp = new ArrayList<Header>();
- for (final Header h : this.headers) {
- if (h.getClass().equals(type)) {
- tmp.add(h);
- }
- }
-
- return tmp;
- }
-
- /**
- * Writes out the metrics file to the supplied file. The file is written out
- * headers first, metrics second and histogram third.
- *
- * @param f a File into which to write the metrics
- */
- public void write(final File f) {
- FileWriter w = null;
- try {
- w = new FileWriter(f);
- write(w);
- }
- catch (IOException ioe) {
- throw new PicardException("Could not write metrics to file: " + f.getAbsolutePath(), ioe);
- }
- finally {
- if (w != null) {
- try {
- w.close();
- } catch (IOException e) {
- }
- }
- }
- }
-
- /**
- * Writes out the metrics file to the supplied writer. The file is written out
- * headers first, metrics second and histogram third.
- *
- * @param w a Writer into which to write the metrics
- */
- public void write(final Writer w) {
- try {
- final FormatUtil formatter = new FormatUtil();
- final BufferedWriter out = new BufferedWriter(w);
- printHeaders(out);
- out.newLine();
-
- printBeanMetrics(out, formatter);
- out.newLine();
-
- printHistogram(out, formatter);
- out.newLine();
- out.flush();
- }
- catch (IOException ioe) {
- throw new PicardException("Could not write metrics file.", ioe);
- }
- }
-
- /** Prints the headers into the provided PrintWriter. */
- private void printHeaders(final BufferedWriter out) throws IOException {
- for (final Header h : this.headers) {
- out.append(MAJOR_HEADER_PREFIX);
- out.append(h.getClass().getName());
- out.newLine();
- out.append(MINOR_HEADER_PREFIX);
- out.append(h.toString());
- out.newLine();
- }
- }
-
- /** Prints each of the metrics entries into the provided PrintWriter. */
- private void printBeanMetrics(final BufferedWriter out, final FormatUtil formatter) throws IOException {
- if (this.metrics.isEmpty()) {
- return;
- }
-
- // Write out a header row with the type of the metric class
- out.append(METRIC_HEADER + getBeanType().getName());
- out.newLine();
-
- // Write out the column headers
- final Field[] fields = getBeanType().getFields();
- final int fieldCount = fields.length;
-
- for (int i=0; i<fieldCount; ++i) {
- out.append(fields[i].getName());
- if (i < fieldCount - 1) {
- out.append(MetricsFile.SEPARATOR);
- }
- else {
- out.newLine();
- }
- }
-
- // Write out each of the data rows
- for (final BEAN bean : this.metrics) {
- for (int i=0; i<fieldCount; ++i) {
- try {
- final Object value = fields[i].get(bean);
- out.append(StringUtil.assertCharactersNotInString(formatter.format(value), '\t', '\n'));
-
- if (i < fieldCount - 1) {
- out.append(MetricsFile.SEPARATOR);
- }
- else {
- out.newLine();
- }
- }
- catch (IllegalAccessException iae) {
- throw new PicardException("Could not read property " + fields[i].getName()
- + " from class of type " + bean.getClass());
- }
- }
- }
-
- out.flush();
- }
-
- /** Prints the histogram if one is present. */
- private void printHistogram(final BufferedWriter out, final FormatUtil formatter) throws IOException {
- final List<Histogram<HKEY>> nonEmptyHistograms = new ArrayList<Histogram<HKEY>>();
- for (final Histogram<HKEY> histo : this.histograms) {
- if (!histo.isEmpty()) nonEmptyHistograms.add(histo);
- }
-
- if (nonEmptyHistograms.isEmpty()) {
- return;
- }
-
- // Build a combined key set. Assume comparator is the same for all Histograms
- final java.util.Set<HKEY> keys = new TreeSet<HKEY>(nonEmptyHistograms.get(0).comparator());
- for (final Histogram<HKEY> histo : nonEmptyHistograms) {
- if (histo != null) keys.addAll(histo.keySet());
- }
-
- // Add a header for the histogram key type
- out.append(HISTO_HEADER + nonEmptyHistograms.get(0).keySet().iterator().next().getClass().getName());
- out.newLine();
-
- // Output a header row
- out.append(StringUtil.assertCharactersNotInString(nonEmptyHistograms.get(0).getBinLabel(), '\t', '\n'));
- for (final Histogram<HKEY> histo : nonEmptyHistograms) {
- out.append(SEPARATOR);
- out.append(StringUtil.assertCharactersNotInString(histo.getValueLabel(), '\t', '\n'));
- }
- out.newLine();
-
- for (final HKEY key : keys) {
- out.append(key.toString());
-
- for (final Histogram<HKEY> histo : nonEmptyHistograms) {
- final Histogram<HKEY>.Bin bin = histo.get(key);
- final double value = (bin == null ? 0 : bin.getValue());
-
- out.append(SEPARATOR);
- out.append(formatter.format(value));
- }
-
- out.newLine();
- }
- }
-
- /** Gets the type of the metrics bean being used. */
- private Class<?> getBeanType() {
- if (this.metrics.isEmpty()) {
- return null;
- } else {
- return this.metrics.get(0).getClass();
- }
- }
-
- /** Reads the Metrics in from the given reader. */
- public void read(final Reader r) {
- final BufferedReader in = new BufferedReader(r);
- final FormatUtil formatter = new FormatUtil();
- String line = null;
-
- try {
- // First read the headers
- Header header = null;
- boolean inHeader = true;
- while ((line = in.readLine()) != null && inHeader) {
- line = line.trim();
- // A blank line signals the end of the headers, otherwise parse out
- // the header types and values and build the headers.
- if ("".equals(line)) {
- inHeader = false;
- }
- else if (line.startsWith(MAJOR_HEADER_PREFIX)) {
- if (header != null) {
- throw new IllegalStateException("Consecutive header class lines encountered.");
- }
-
- final String className = line.substring(MAJOR_HEADER_PREFIX.length()).trim();
- try {
- header = (Header) loadClass(className, true).newInstance();
- }
- catch (final Exception e) {
- throw new PicardException("Error load and/or instantiating an instance of " + className, e);
- }
- }
- else if (line.startsWith(MINOR_HEADER_PREFIX)) {
- if (header == null) {
- throw new IllegalStateException("Header class must precede header value:" + line);
- }
- header.parse(line.substring(MINOR_HEADER_PREFIX.length()));
- this.headers.add(header);
- header = null;
- }
- else {
- throw new PicardException("Illegal state. Found following string in metrics file header: " + line);
- }
- }
-
- //read space between starting headers and metrics
- while (line != null && !line.startsWith(MAJOR_HEADER_PREFIX)) {
- line = in.readLine();
- }
-
-
- if(line != null) {
- line = line.trim();
-
- // Then read the metrics if there are any
- if (line.startsWith(METRIC_HEADER)) {
- // Get the metric class from the header
- final String className = line.split(SEPARATOR)[1];
- Class<?> type = null;
- try {
- type = loadClass(className, true);
- }
- catch (final ClassNotFoundException cnfe) {
- throw new PicardException("Could not locate class with name " + className, cnfe);
- }
-
- // Read the next line with the column headers
- final String[] fieldNames = in.readLine().split(SEPARATOR);
- Collections.addAll(columnLabels, fieldNames);
- final Field[] fields = new Field[fieldNames.length];
- for (int i=0; i<fieldNames.length; ++i) {
- try {
- fields[i] = type.getField(fieldNames[i]);
- }
- catch (final Exception e) {
- throw new PicardException("Could not get field with name " + fieldNames[i] +
- " from class " + type.getName());
- }
- }
-
- // Now read the values
- while ((line = in.readLine()) != null) {
- if ("".equals(line.trim())) {
- break;
- }
- else {
- final String[] values = line.split(SEPARATOR, -1);
- BEAN bean = null;
-
- try { bean = (BEAN) type.newInstance(); }
- catch (final Exception e) { throw new PicardException("Error instantiating a " + type.getName(), e); }
-
- for (int i=0; i<fields.length; ++i) {
- Object value = null;
- if (values[i] != null && values[i].length() > 0) {
- value = formatter.parseObject(values[i], fields[i].getType());
- }
-
- try { fields[i].set(bean, value); }
- catch (final Exception e) {
- throw new PicardException("Error setting field " + fields[i].getName() +
- " on class of type " + type.getName(), e);
- }
- }
-
- this.metrics.add(bean);
- }
- }
- }
- }
-
- // Then read the histograms if any are present
- while (line != null && !line.startsWith(MAJOR_HEADER_PREFIX)) {
- line = in.readLine();
- }
- if (line != null && line.startsWith(HISTO_HEADER)) {
- // Get the key type of the histogram
- final String keyClassName = line.split(SEPARATOR)[1].trim();
- Class<?> keyClass = null;
-
- try { keyClass = loadClass(keyClassName, true); }
- catch (final ClassNotFoundException cnfe) { throw new PicardException("Could not load class with name " + keyClassName); }
-
- // Read the next line with the bin and value labels
- final String[] labels = in.readLine().split(SEPARATOR);
- for (int i=1; i<labels.length; ++i) {
- this.histograms.add(new Histogram<HKEY>(labels[0], labels[i]));
- }
-
- // Read the entries in the histograms
- while ((line = in.readLine()) != null && !"".equals(line)) {
- final String[] fields = line.trim().split(SEPARATOR);
- final HKEY key = (HKEY) formatter.parseObject(fields[0], keyClass);
-
- for (int i=1; i<fields.length; ++i) {
- final double value = formatter.parseDouble(fields[i]);
- this.histograms.get(i-1).increment(key, value);
- }
- }
- }
- }
- catch (final IOException ioe) {
- throw new PicardException("Could not read metrics from reader.", ioe);
- }
- finally{
- CloserUtil.close(in);
- }
- }
-
- /** Attempts to load a class, taking into account that some classes have "migrated" from the broad to sf. */
- private Class<?> loadClass(final String className, final boolean tryOtherPackages) throws ClassNotFoundException {
- // List of alternative packages to check in case classes moved around
- final String[] packages = new String[] {
- "edu.mit.broad.picard.genotype.concordance",
- "edu.mit.broad.picard.genotype.fingerprint",
- "edu.mit.broad.picard.ic",
- "edu.mit.broad.picard.illumina",
- "edu.mit.broad.picard.jumping",
- "edu.mit.broad.picard.quality",
- "edu.mit.broad.picard.samplevalidation",
- "net.sf.picard.analysis",
- "net.sf.picard.analysis.directed",
- "net.sf.picard.sam",
- "net.sf.picard.metrics"
- };
-
- try { return Class.forName(className); }
- catch (ClassNotFoundException cnfe) {
- if (tryOtherPackages) {
- for (final String p : packages) {
- try {
- return loadClass(p + className.substring(className.lastIndexOf(".")), false);
- }
- catch (ClassNotFoundException cnf2) {/* do nothing */}
- // If it ws an inner class, try and see if it's a stand-alone class now
- if (className.indexOf("$") > -1) {
- try {
- return loadClass(p + "." + className.substring(className.lastIndexOf("$") + 1), false);
- }
- catch (ClassNotFoundException cnf2) {/* do nothing */}
- }
- }
- }
-
- throw cnfe;
- }
- }
-
- /** Checks that the headers, metrics and histogram are all equal. */
- @Override
- public boolean equals(final Object o) {
- if (o == null) {
- return false;
- }
- if (getClass() != o.getClass()) {
- return false;
- }
- final MetricsFile that = (MetricsFile) o;
-
- if (!areHeadersEqual(that)) {
- return false;
- }
- if (!areMetricsEqual(that)) {
- return false;
- }
- if (!areHistogramsEqual(that)) {
- return false;
- }
-
- return true;
- }
-
- public boolean areHeadersEqual(final MetricsFile that) {
- return this.headers.equals(that.headers);
- }
-
- public boolean areMetricsEqual(final MetricsFile that) {
- return this.metrics.equals(that.metrics);
- }
-
- public boolean areHistogramsEqual(final MetricsFile that) {
- return this.histograms.equals(that.histograms);
- }
-
- @Override
- public int hashCode() {
- int result = headers.hashCode();
- result = 31 * result + metrics.hashCode();
- return result;
- }
-
- /**
- * Convenience method to read all the Metric beans from a metrics file.
- * @param file to be read.
- * @return list of beans from the file.
- */
- public static List<? extends MetricBase> readBeans(final File file) {
- try {
- final MetricsFile<MetricBase, Comparable<?>> metricsFile = new MetricsFile<MetricBase, Comparable<?>>();
- metricsFile.read(new FileReader(file));
- return metricsFile.getMetrics();
- } catch (FileNotFoundException e) {
- throw new PicardException(e.getMessage(), e);
- }
- }
-}
diff --git a/src/java/net/sf/picard/metrics/MultiLevelCollector.java b/src/java/net/sf/picard/metrics/MultiLevelCollector.java
deleted file mode 100644
index 73c986f..0000000
--- a/src/java/net/sf/picard/metrics/MultiLevelCollector.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.analysis.MetricAccumulationLevel;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-
-import java.util.*;
-
-/**
- * MultiLevelCollector handles accumulating Metrics at different MetricAccumulationLevels(ALL_READS, SAMPLE, LIBRARY, READ_GROUP).
- * Based on the accumulationLevels and readGroup records passed to its constructor, MultiLevelCollector
- * will instantiate the number of PerUnitMetricCollector's needed to generate metrics for each of the levels provided.
- *
- * To Use:
- *
- * Instantiate a MultiLevelCollector and call setup(see thoughts about extending MultiLevelCollector below)
- * setup will create the underlying classes that will handle the accumulation level logic.
- * Pass all reads you wish to collect data against to MultiLevelCollector via the acceptRecord method
- * Call finish and use addAllLevelsToFile to add all of the metrics at each accumulation level to the given file.
- *
- * Extend MultiLevelCollector and implement makeArg and makeChildCollector
- * You will most likely want to make a class that extends PerUnitMetricCollector. This class should do the work of keeping
- * track of values for one specific "accumulation unit" (e.g. for one library, or for one read group depending on what levels
- * you are accumulating at).
- *
- * If a record has any expensive calculations to be done (that don't need to be done differently depending
- * on what sample/library/read group the read is for) then create a container class for the results of these calculations and pass
- * this class as the ARGTYPE of both the PerUnitMetricCollector and MultiLevelCollector. You can then do these calculations in the makeArg
- * method and they will only be done once per record.
- *
- * @param <METRIC_TYPE> The type of metrics being collected
- * @param <HISTOGRAM_KEY> If there is are histograms related to metrics of type <BEAN> then <HKEY> is the key value to these histograms
- * @param <ARGTYPE> The type of argument passed to individual PerUnitMetricCollector (see SAMRecordMultilevelCollector and PerUnitMetricCollector)
- */
-public abstract class MultiLevelCollector<METRIC_TYPE extends MetricBase, HISTOGRAM_KEY extends Comparable, ARGTYPE> {
-
- public static final String UNKNOWN = "unknown";
- //The collector that will accept all records (allReads is NULL if !calculateAll)
- private PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> allReadCollector;
-
- //A list of Distributor that is at most length 3, 1 for each (SAMPLE, LIBRARY, READ_GROUP) accumulation levels
- //these will be listed in the order in which their children would be added to a metric file
- private List<Distributor> outputOrderedDistributors;
-
- //Convert the current SAMRecord and the ReferenceSequence for that record into an ARGTYPE object
- //see accept record for use
- protected abstract ARGTYPE makeArg(final SAMRecord samRec, final ReferenceSequence refSeq);
-
- /**
- * Construct a PerUnitMetricCollector with the given arguments.
- * @param sample If aggregating by ALL_READS this will be null, otherwise the sample that will be used to identify
- * this collector
- * @param library If aggregating by SAMPLE this will be null, otherwise the library that will be used to identify
- * this collector
- * @param readGroup If aggregating by LIBRARY this will be null, otherwise the readGroup that will be used to identify
- * this collector
- * @return A PerUnitMetricCollector parameterized by the given arguments
- */
- protected abstract PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeChildCollector(final String sample, final String library, final String readGroup);
-
- //These are exposed here (rather than being encapsulated in the Distributor subclasses below in order
- //to provide subclasses with an explicit point to add initialization (specific to accumulation level) for
- //a PerUnitMetricCollector it is creating
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeAllReadCollector() {
- return makeChildCollector(null, null, null);
- }
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeSampleCollector(final SAMReadGroupRecord rg) {
- return makeChildCollector(rg.getSample(), null, null);
- }
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeLibraryCollector(final SAMReadGroupRecord rg) {
- return makeChildCollector(rg.getSample(), rg.getLibrary(), null);
- }
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeReadGroupCollector(final SAMReadGroupRecord rg) {
- return makeChildCollector(rg.getSample(), rg.getLibrary(), rg.getPlatformUnit());
- }
-
- /**
- * Distributors group PerUnitMetricCollectors based on a AccumulationLevel. Their structure mimics
- * PerUnitMetricCollectors but instead of adding records to metrics they identify which
- * PerUnitMetricCollector should receive a specific record and distribute records on to the that collector
- *
- * There were will be 0 or 1 Distributors for each of the following MetriAcummulationLevels:
- * ALL_READS, SAMPLE, LIBRARY, READ_GROUP
- */
- private abstract class Distributor {
- //A Map mapping the key for a specific record (as determined by getKey) to the appropriate collector
- private final Map<String, PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE>> collectors;
-
- //Given a SAMReadGroupRecord, return the key that identifies the collector for the corresponding SAMRecord
- protected abstract String getKey(final SAMReadGroupRecord rg);
-
- //Make a PerUnitMetricCollector for this given Distributor
- protected abstract PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeCollector(final SAMReadGroupRecord rg);
-
- protected abstract PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeUnknownCollector();
-
- public Distributor(final List<SAMReadGroupRecord> rgRecs) {
- collectors = new LinkedHashMap<String, PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE>>();
- for(final SAMReadGroupRecord rg : rgRecs) {
- final String key = getKey(rg);
- if(!collectors.containsKey(key)) {
- collectors.put(key, makeCollector(rg));
- }
- }
- }
-
- /** Call finish on each PerUnitMetricCollector in this Aggregate Collector */
- public void finish() {
- for(final PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> collector : collectors.values()) {
- collector.finish();
- }
- }
-
- /** Call acceptRecord(args) on the record collector identified by getKey */
- public void acceptRecord(final ARGTYPE args, final SAMReadGroupRecord rg) {
-
- String key = UNKNOWN;
- if(rg != null) {
- final String computedKey = getKey(rg);
- if(computedKey != null) {
- key = computedKey;
- }
- }
- PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> collector = collectors.get(key);
- if (collector == null) {
- if (!UNKNOWN.equals(key)) {
- throw new PicardException("Could not find collector for " + key);
- }
- collector = makeUnknownCollector();
- collectors.put(key, collector);
- }
- collector.acceptRecord(args);
- }
-
- /** Add all records to the MetricsFile passed in, this will happen in the order they were
- * found in the input ReadGroup records */
- public void addToFile(final MetricsFile<METRIC_TYPE, HISTOGRAM_KEY> file) {
- for(final PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> collector : collectors.values()) {
- collector.addMetricsToFile(file);
- }
- }
- }
-
- /** A dummy Distributor to handle the ALL_READS accumulation level. No distribution is required
- * since there should only ever be one PerUnitMetricCollector for ALL_READS.
- */
- private class AllReadsDistributor extends Distributor {
-
- public AllReadsDistributor(final List<SAMReadGroupRecord> rgRecs) {
- super(new ArrayList<SAMReadGroupRecord>());
- makeCollector(null);
- }
-
- @Override
- protected String getKey(SAMReadGroupRecord rg) {
- return null;
- }
-
- public void acceptRecord(final ARGTYPE args, final SAMReadGroupRecord rg) {
- allReadCollector.acceptRecord(args);
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeCollector(final SAMReadGroupRecord rg) {
- allReadCollector = makeAllReadCollector();
- return allReadCollector;
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeUnknownCollector() {
- throw new UnsupportedOperationException("Should not happen");
- }
-
- @Override
- public void finish() {
- allReadCollector.finish();
- }
-
- @Override
- public void addToFile(final MetricsFile<METRIC_TYPE, HISTOGRAM_KEY> file) {
- allReadCollector.addMetricsToFile(file);
- }
- }
-
- //Discriminates between records based on sample name, and calls acceptRecord on the appropriate PerUnitMetricCollectors
- private class SampleDistributor extends Distributor {
- public SampleDistributor(final List<SAMReadGroupRecord> rgRecs) {
- super(rgRecs);
- }
-
- @Override
- protected String getKey(SAMReadGroupRecord rg) {
- return rg.getSample();
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeCollector(SAMReadGroupRecord rg) {
- return makeSampleCollector(rg);
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeUnknownCollector() {
- return makeChildCollector(UNKNOWN, null, null);
- }
- }
-
- //Discriminates between records based on library name, and calls acceptRecord on the appropriate PerUnitMetricCollectors
- private class LibraryDistributor extends Distributor {
- public LibraryDistributor(final List<SAMReadGroupRecord> rgRecs) {
- super(rgRecs);
- }
-
- @Override
- protected String getKey(SAMReadGroupRecord rg) {
- return rg.getLibrary();
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeCollector(SAMReadGroupRecord rg) {
- return makeLibraryCollector(rg);
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeUnknownCollector() {
- return makeChildCollector(UNKNOWN, UNKNOWN, null);
- }
- }
-
- //Discriminates between records based on read group name, and calls acceptRecord on the appropriate PerUnitMetricCollectors
- private class ReadGroupCollector extends Distributor {
- public ReadGroupCollector(final List<SAMReadGroupRecord> rgRecs) {
- super(rgRecs);
- }
-
- @Override
- protected String getKey(SAMReadGroupRecord rg) {
- return rg.getPlatformUnit();
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeCollector(SAMReadGroupRecord rg) {
- return makeReadGroupCollector(rg);
- }
-
- @Override
- protected PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> makeUnknownCollector() {
- return makeChildCollector(UNKNOWN, UNKNOWN, UNKNOWN);
- }
- }
-
- /**
- * Use an init method so that overloaded methods in subclasses can pass use parameters that are initialized in their constructor
- * @param accumulationLevels PerUnitMetricCollectors will only be created for the levels identified by accumulationLevels
- * @param samRgRecords PerUnitMetricCollectors will be created for each of the different samples, libraries, and
- * readGroups found in the records depending on the accumulationLevels provided
- */
- protected void setup(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords) {
- outputOrderedDistributors = new ArrayList<Distributor>(4);
- if(accumulationLevels.contains(MetricAccumulationLevel.ALL_READS)) {
- outputOrderedDistributors.add(new AllReadsDistributor(samRgRecords));
- }
- if (accumulationLevels.contains(MetricAccumulationLevel.SAMPLE)) {
- outputOrderedDistributors.add(new SampleDistributor(samRgRecords));
- }
-
- if(accumulationLevels.contains(MetricAccumulationLevel.LIBRARY)) {
- outputOrderedDistributors.add(new LibraryDistributor(samRgRecords));
- }
-
- if(accumulationLevels.contains(MetricAccumulationLevel.READ_GROUP)) {
- outputOrderedDistributors.add(new ReadGroupCollector(samRgRecords));
- }
- }
-
- /**
- * Construct a argument of ARGTYPE using the given SAMRecord and ReferenceSequence then pass
- * this value to all collectors that should include this record
- */
- public void acceptRecord(final SAMRecord record, final ReferenceSequence refSeq) {
- final ARGTYPE arg = makeArg(record, refSeq);
-
- for(final Distributor collector : outputOrderedDistributors) {
- collector.acceptRecord(arg, record.getReadGroup());
- }
- }
-
- /**
- * Call finish on all PerUnitMetricCollectors
- */
- public void finish() {
- for(final Distributor collector : outputOrderedDistributors) {
- collector.finish();
- }
- }
-
- /** Get the PerUnitMetricCollector that collects reads for all levels */
- public PerUnitMetricCollector<METRIC_TYPE, HISTOGRAM_KEY, ARGTYPE> getAllReadsCollector() {
- return allReadCollector;
- }
-
- /** Add all metrics to the given file in the following MetricAccumulationLevel order
- * ALL_READS, SAMPLE, LIBRARY, READ_GROUP.
- */
- public void addAllLevelsToFile(final MetricsFile<METRIC_TYPE, HISTOGRAM_KEY> file) {
- for(final Distributor collector : outputOrderedDistributors) {
- collector.addToFile(file);
- }
- }
-}
diff --git a/src/java/net/sf/picard/metrics/MultilevelMetrics.java b/src/java/net/sf/picard/metrics/MultilevelMetrics.java
deleted file mode 100644
index 290e9ce..0000000
--- a/src/java/net/sf/picard/metrics/MultilevelMetrics.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.sf.picard.metrics;
-
-
-public class MultilevelMetrics extends MetricBase {
- /** The sample to which these metrics apply. If null, it means they apply
- * to all reads in the file. */
- public String SAMPLE;
-
- /** The library to which these metrics apply. If null, it means that the
- * metrics were accumulated at the sample level. */
- public String LIBRARY = null;
-
- /** The read group to which these metrics apply. If null, it means that
- * the metrics were accumulated at the library or sample level.*/
- public String READ_GROUP = null;
-}
diff --git a/src/java/net/sf/picard/metrics/PerUnitMetricCollector.java b/src/java/net/sf/picard/metrics/PerUnitMetricCollector.java
deleted file mode 100644
index 17f48a6..0000000
--- a/src/java/net/sf/picard/metrics/PerUnitMetricCollector.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-/**
- * PerRecordCollector - An interface for classes that collect data in order to generate one or more metrics.
- * This process usually occurs in the following fashion:
- * 1. Loop through a data set (usually all records in a BAM file) and call collector.acceptRecord( data ),
- * data in this step is usually added to metrics/histogram objects
- * 2. Call collector.finish() - perform any final calculations necessary after ALL records have been accepted
- * 3. addMetricsToFile is then used to add any metric(s) or histogram(s) to the given file
- *
- * BEAN - The Metric type we are generating
- * HKEY - The Key used in any histograms, use a Wildcard(?) type if there are no histograms
- * ARGTYPE - Collectors are often used in groups of accumulation levels, in order to avoid recalculating
- * any information needed by multiple collectors we allow different types of arguments that
- * extend DefaultPerRecordCollectorArgs to accommodate any computed values
- */
-public interface PerUnitMetricCollector<BEAN extends MetricBase, HKEY extends Comparable, ARGTYPE> {
- /**
- * Add a SAMRecord (with ReferenceSequence and Read Group info) to the metric(s) being calculated)
- * @param args Contains SAMRecord, SAMReadGroupRecord, ReferenceSequence of current record and any previously
- * computed values that might be needed for this class
- */
- public void acceptRecord(final ARGTYPE args);
-
- /** When all records have been collected, compute any final values needed to finish constructing metrics/histogram */
- public void finish();
-
- /**
- * Any metrics collected will be added to the metric file provided.
- * @param file MetricsFile to which all metrics created by this collector should be added
- */
- public void addMetricsToFile(final MetricsFile<BEAN, HKEY> file);
-}
-
diff --git a/src/java/net/sf/picard/metrics/SAMRecordAndReference.java b/src/java/net/sf/picard/metrics/SAMRecordAndReference.java
deleted file mode 100644
index 7708cfc..0000000
--- a/src/java/net/sf/picard/metrics/SAMRecordAndReference.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.sf.picard.metrics;
-
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.SAMRecord;
-
-public class SAMRecordAndReference {
- private final SAMRecord samRec;
- private final ReferenceSequence refSeq;
-
- public SAMRecordAndReference(final SAMRecord samRec, final ReferenceSequence refSeq) {
- this.samRec = samRec;
- this.refSeq = refSeq;
- }
-
- public SAMRecord getSamRecord() {
- return samRec;
- }
-
- public ReferenceSequence getReferenceSequence() {
- return refSeq;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/metrics/SAMRecordAndReferenceMultiLevelCollector.java b/src/java/net/sf/picard/metrics/SAMRecordAndReferenceMultiLevelCollector.java
deleted file mode 100644
index 00e433f..0000000
--- a/src/java/net/sf/picard/metrics/SAMRecordAndReferenceMultiLevelCollector.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package net.sf.picard.metrics;
-
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.SAMRecord;
-
-public abstract class SAMRecordAndReferenceMultiLevelCollector<BEAN extends MetricBase, HKEY extends Comparable> extends MultiLevelCollector<BEAN, HKEY, SAMRecordAndReference> {
-
- @Override
- protected SAMRecordAndReference makeArg(SAMRecord samRec, final ReferenceSequence refSeq) {
- return new SAMRecordAndReference(samRec, refSeq);
- }
-}
-
-
diff --git a/src/java/net/sf/picard/metrics/SAMRecordMultiLevelCollector.java b/src/java/net/sf/picard/metrics/SAMRecordMultiLevelCollector.java
deleted file mode 100644
index e5835a5..0000000
--- a/src/java/net/sf/picard/metrics/SAMRecordMultiLevelCollector.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.sf.picard.metrics;
-
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.SAMRecord;
-
-/** Defines a MultilevelPerRecordCollector using the argument type of SAMRecord so that this doesn't have to be redefined for each subclass of MultilevelPerRecordCollector */
-public abstract class SAMRecordMultiLevelCollector<BEAN extends MetricBase, HKEY extends Comparable> extends MultiLevelCollector<BEAN, HKEY, SAMRecord> {
-
- @Override
- protected SAMRecord makeArg(SAMRecord samRec, final ReferenceSequence refSeq) {
- return samRec;
- }
-}
diff --git a/src/java/net/sf/picard/metrics/StringHeader.java b/src/java/net/sf/picard/metrics/StringHeader.java
deleted file mode 100644
index fea5517..0000000
--- a/src/java/net/sf/picard/metrics/StringHeader.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-import net.sf.samtools.util.StringUtil;
-
-/**
- * A simple header who's data type is a single String. Should not be used for anything other
- * than comments or descriptive text.
- *
- * @author Tim Fennell
- */
-public class StringHeader implements Header {
- private String value;
-
- /** Default constructor. */
- public StringHeader() {}
-
- /** Constructor that uses the supplied value as the value of the header. */
- public StringHeader(String value) {
- setValue(value);
- }
-
- public void parse(String in) { value = in.trim(); }
- public String toString() { return value; }
-
- public String getValue() { return value; }
- public void setValue(String value) { this.value = StringUtil.assertCharactersNotInString(value, '\n'); }
-
- /** Checks equality on the value of the header. */
- public boolean equals(Object o) {
- if (o != null && o instanceof StringHeader) {
- StringHeader that = (StringHeader) o;
- if (this.value == null) {
- return that.value == null;
- }
- else {
- return this.value.equals(that.value);
- }
- }
- else {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- return value != null ? value.hashCode() : 0;
- }
-}
diff --git a/src/java/net/sf/picard/metrics/VersionHeader.java b/src/java/net/sf/picard/metrics/VersionHeader.java
deleted file mode 100644
index 50e52dd..0000000
--- a/src/java/net/sf/picard/metrics/VersionHeader.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-import net.sf.samtools.util.StringUtil;
-
-/**
- * Header that stores information about the version of some piece of software or
- * data used to create the metrics file. Payload consists of a name or description
- * of the versioned item and a version string.
- *
- * @author Tim Fennell
- */
-public class VersionHeader implements Header {
- private String versionedItem;
- private String versionString;
-
- public void parse(String in) {
- String[] fields = in.split("\t");
- this.versionedItem = fields[0];
- this.versionString = fields[1];
- }
-
- public String toString() {
- return this.versionedItem + "\t" + this.versionString;
- }
-
- public String getVersionedItem() { return versionedItem; }
- public void setVersionedItem(String versionedItem) {
- this.versionedItem = StringUtil.assertCharactersNotInString(versionedItem, '\t', '\n');
- }
-
- public String getVersionString() { return versionString; }
- public void setVersionString(String versionString) {
- this.versionString = StringUtil.assertCharactersNotInString(versionString, '\t', '\n');
- }
-
- /** Equals method that checks that both the item and version string are equal. */
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- VersionHeader that = (VersionHeader) o;
-
- if (versionString != null ? !versionString.equals(that.versionString) : that.versionString != null)
- return false;
- if (versionedItem != null ? !versionedItem.equals(that.versionedItem) : that.versionedItem != null)
- return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = versionedItem != null ? versionedItem.hashCode() : 0;
- result = 31 * result + (versionString != null ? versionString.hashCode() : 0);
- return result;
- }
-}
diff --git a/src/java/net/sf/picard/pedigree/PedFile.java b/src/java/net/sf/picard/pedigree/PedFile.java
deleted file mode 100644
index 648ca20..0000000
--- a/src/java/net/sf/picard/pedigree/PedFile.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package net.sf.picard.pedigree;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.regex.Pattern;
-
-/**
- * Represents a .ped file of family information as documented here:
- * http://pngu.mgh.harvard.edu/~purcell/plink/data.shtml
- *
- * Stores the information in memory as a map of individualId -> Pedigree information for that individual
- */
-public class PedFile extends TreeMap<String, PedFile.PedTrio> {
- private static final Log log = Log.getInstance(PedFile.class);
- static final Pattern WHITESPACE = Pattern.compile("\\s+");
- static final Pattern TAB = Pattern.compile("\\t");
- private final Pattern delimiterPattern;
- private final String delimiterString; // A textual representation of the delimiter, for output purposes
-
- // These two are really for PedTrio, but they can't be static in there and need to be accessed outside of PedFile
- public static final Number NO_PHENO = new Integer(-9);
- public static final Sex UNKNOWN_SEX = Sex.Unknown;
-
- public PedFile(final boolean isTabMode) {
- delimiterPattern = isTabMode ? TAB : WHITESPACE;
- delimiterString = isTabMode ? "tabs" : "whitespace";
- }
-
- /** Adds a trio to the PedFile keyed by the individual id. */
- public void add(final PedTrio trio) {
- put(trio.getIndividualId(), trio);
- }
-
- /**
- * Writes a set of pedigrees out to disk.
- */
- public void write(final File file) {
- IoUtil.assertFileIsWritable(file);
- final BufferedWriter out = IoUtil.openFileForBufferedWriting(file);
-
- try {
- for (final PedTrio trio : values()) {
- out.write(trio.getFamilyId());
- out.write("\t");
- out.write(trio.getIndividualId());
- out.write("\t");
- out.write(trio.getPaternalId());
- out.write("\t");
- out.write(trio.getMaternalId());
- out.write("\t");
- out.write(String.valueOf(trio.getSex().toCode()));
- out.write("\t");
- out.write(trio.getPhenotype().toString());
- out.newLine();
- }
-
- out.close();
- }
- catch (final IOException ioe) {
- throw new RuntimeIOException("IOException while writing to file " + file.getAbsolutePath(), ioe);
- }
- }
-
- /**
- * Attempts to read a pedigree file into memory.
- */
- public static PedFile fromFile(final File file, final boolean isTabMode) {
- final PedFile pedFile = new PedFile(isTabMode);
-
- IoUtil.assertFileIsReadable(file);
- for (final String line : IoUtil.readLines(file)) {
- final String[] fields = pedFile.delimiterPattern.split(line);
- if (fields.length != 6) {
- log.error("Ped file line contained invalid number of fields, skipping: " + line);
- continue;
- }
-
- final PedTrio trio = pedFile.new PedTrio(fields[0],
- fields[1],
- fields[2],
- fields[3],
- Sex.fromCode(Integer.parseInt(fields[4])),
- fields[5].contains(".") ? Double.parseDouble(fields[5]) : Integer.parseInt(fields[5])
- );
- pedFile.add(trio);
- }
-
- return pedFile;
- }
-
- /**
- * Scans through the pedigrees and removes all entries that do not have both paternal and maternal ids set.
- */
- public PedFile removeIncompleteTrios() {
- final Iterator<Map.Entry<String,PedTrio>> iterator = entrySet().iterator();
-
- while (iterator.hasNext()) {
- if (!iterator.next().getValue().hasBothParents()) iterator.remove();
- }
-
- return this;
- }
-
- public class PedTrio {
- private final String familyId;
- private final String individualId;
- private final String paternalId;
- private final String maternalId;
- private final Sex sex;
- private final Number phenotype;
-
- /** Constructs a TRIO that cannot be modified after the fact. */
- public PedTrio(final String familyId, final String individualId, final String paternalId, final String maternalId, final Sex sex, final Number phenotype) {
- if (delimiterPattern.split(familyId).length != 1) throw new IllegalArgumentException("FamilyID cannot contain " + delimiterString + ": [" + familyId + "]");
- if (delimiterPattern.split(individualId).length != 1) throw new IllegalArgumentException("IndividualID cannot contain " + delimiterString + ": [" + individualId + "]");
- if (delimiterPattern.split(paternalId).length != 1) throw new IllegalArgumentException("PaternalID cannot contain " + delimiterString + ": [" + paternalId + "]");
- if (delimiterPattern.split(maternalId).length != 1) throw new IllegalArgumentException("MaternalID cannot contain " + delimiterString + ": [" + maternalId + "]");
-
- this.familyId = familyId;
- this.individualId = individualId;
- this.paternalId = paternalId;
- this.maternalId = maternalId;
- this.sex = sex;
- this.phenotype = phenotype;
- }
-
- /** True if this record has paternal and maternal ids, otherwise false. */
- public boolean hasBothParents() {
- return this.paternalId != null && this.maternalId != null;
- }
-
- public String getFamilyId() { return familyId; }
- public String getIndividualId() { return individualId; }
- public String getPaternalId() { return paternalId; }
- public String getMaternalId() { return maternalId; }
- public Sex getSex() { return sex; }
- public Number getPhenotype() { return phenotype; }
- }
-}
diff --git a/src/java/net/sf/picard/pedigree/Sex.java b/src/java/net/sf/picard/pedigree/Sex.java
deleted file mode 100644
index 812bc55..0000000
--- a/src/java/net/sf/picard/pedigree/Sex.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package net.sf.picard.pedigree;
-
-/**
- * Represents the sex of an individual.
- */
-public enum Sex {
- Male(1), Female(2), Unknown(-9);
-
- /** The integer code used when reading/writing ped files. */
- private final int code;
-
- /** Private constructor that takes the pedigree code for sex. */
- private Sex(final int code) {
- this.code = code;
- }
-
- /** Returns the code used to encode this sex in a ped/fam file. */
- public int toCode() { return this.code;}
-
- /** Decodes the Sex from a numeric code. Note that any value other than 1 or 2 will return Unknown. */
- public static Sex fromCode(final int code) {
- if (code == Male.code) return Male;
- else if (code == Female.code) return Female;
- else return Unknown;
- }
-}
diff --git a/src/java/net/sf/picard/reference/AbstractFastaSequenceFile.java b/src/java/net/sf/picard/reference/AbstractFastaSequenceFile.java
deleted file mode 100644
index 2f006b8..0000000
--- a/src/java/net/sf/picard/reference/AbstractFastaSequenceFile.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMTextHeaderCodec;
-import net.sf.samtools.util.BufferedLineReader;
-
-import java.io.File;
-import java.io.FileInputStream;
-
-/**
- * Provide core sequence dictionary functionality required by all fasta file readers.
- * @author Matt Hanna
- */
-abstract class AbstractFastaSequenceFile implements ReferenceSequenceFile {
- protected final File file;
- protected SAMSequenceDictionary sequenceDictionary;
-
- /**
- * Finds and loads the sequence file dictionary.
- * @param file Fasta file to read. Also acts as a prefix for supporting files.
- */
- AbstractFastaSequenceFile(final File file) {
- this.file = file;
- final File dictionary = findSequenceDictionary(file);
-
- if (dictionary != null) {
- IoUtil.assertFileIsReadable(dictionary);
-
- try {
- final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
- final BufferedLineReader reader = new BufferedLineReader(new FileInputStream(dictionary));
- final SAMFileHeader header = codec.decode(reader,
- dictionary.toString());
- if (header.getSequenceDictionary() != null && header.getSequenceDictionary().size() > 0) {
- this.sequenceDictionary = header.getSequenceDictionary();
- }
- reader.close();
- }
- catch (Exception e) {
- throw new PicardException("Could not open sequence dictionary file: " + dictionary, e);
- }
- }
- }
-
- protected static File findSequenceDictionary(final File file) {
- // Try and locate the dictionary
- String dictionaryName = file.getAbsolutePath();
- String dictionaryNameExt = file.getAbsolutePath();
- boolean fileTypeSupported = false;
- for (final String extension : ReferenceSequenceFileFactory.FASTA_EXTENSIONS) {
- if (dictionaryName.endsWith(extension)) {
- dictionaryNameExt = new String(dictionaryName);
- dictionaryNameExt += ".dict";
- dictionaryName = dictionaryName.substring(0, dictionaryName.lastIndexOf(extension));
- dictionaryName += ".dict";
- fileTypeSupported = true;
- break;
- }
- }
- if (!fileTypeSupported)
- throw new IllegalArgumentException("File is not a supported reference file type: " + file.getAbsolutePath());
-
- final File dictionary = new File(dictionaryName);
- if (dictionary.exists())
- return dictionary;
- // try without removing the file extension
- final File dictionaryExt = new File(dictionaryNameExt);
- if (dictionaryExt.exists())
- return dictionaryExt;
- else return null;
- }
-
- /**
- * Returns the list of sequence records associated with the reference sequence if found
- * otherwise null.
- */
- public SAMSequenceDictionary getSequenceDictionary() {
- return this.sequenceDictionary;
- }
-
- /** Returns the full path to the reference file. */
- public String toString() {
- return this.file.getAbsolutePath();
- }
-
- /** default implementation -- override if index is supported */
- public boolean isIndexed() {return false;}
-
- /** default implementation -- override if index is supported */
- public ReferenceSequence getSequence( String contig ) {
- throw new UnsupportedOperationException();
- }
-
- /** default implementation -- override if index is supported */
- public ReferenceSequence getSubsequenceAt( String contig, long start, long stop ) {
- throw new UnsupportedOperationException();
- }
-
-}
diff --git a/src/java/net/sf/picard/reference/ExtractSequences.java b/src/java/net/sf/picard/reference/ExtractSequences.java
deleted file mode 100644
index 5111806..0000000
--- a/src/java/net/sf/picard/reference/ExtractSequences.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Interval;
-import net.sf.picard.util.IntervalList;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.SequenceUtil;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Simple command line program that allows sub-sequences represented by an interval
- * list to be extracted from a reference sequence file.
- *
- * @author Tim Fennell
- */
-public class ExtractSequences extends CommandLineProgram {
- @Usage public final String USAGE = "Extracts one or more intervals described in an interval_list file " +
- "from a given reference sequence and writes them out in FASTA format. Requires a fasta index " +
- "file to be present.";
-
- @Option(doc="Interval list describing intervals to be extracted from the reference sequence.")
- public File INTERVAL_LIST;
-
- @Option(shortName= StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc="Reference sequence file.")
- public File REFERENCE_SEQUENCE;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output fasta file.")
- public File OUTPUT;
-
- @Option(doc="Maximum line length for sequence data.")
- public int LINE_LENGTH = 80;
-
- public static void main(final String[] args) {
- new ExtractSequences().instanceMainWithExit(args);
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INTERVAL_LIST);
- IoUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final IntervalList intervals = IntervalList.fromFile(INTERVAL_LIST);
- final ReferenceSequenceFile ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
- SequenceUtil.assertSequenceDictionariesEqual(intervals.getHeader().getSequenceDictionary(), ref.getSequenceDictionary());
-
- final BufferedWriter out = IoUtil.openFileForBufferedWriting(OUTPUT);
-
- for (final Interval interval : intervals) {
- final ReferenceSequence seq = ref.getSubsequenceAt(interval.getSequence(), interval.getStart(), interval.getEnd());
- final byte[] bases = seq.getBases();
- if (interval.isNegativeStrand()) SequenceUtil.reverseComplement(bases);
-
- try {
- out.write(">");
- out.write(interval.getName());
- out.write("\n");
-
- for (int i=0; i<bases.length; ++i) {
- if (i > 0 && i % LINE_LENGTH == 0) out.write("\n");
- out.write(bases[i]);
- }
-
- out.write("\n");
- }
- catch (IOException ioe) {
- throw new PicardException("Error writing to file " + OUTPUT.getAbsolutePath(), ioe);
-
- }
- }
-
- CloserUtil.close(out);
-
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/reference/FastaSequenceFile.java b/src/java/net/sf/picard/reference/FastaSequenceFile.java
deleted file mode 100644
index bde8840..0000000
--- a/src/java/net/sf/picard/reference/FastaSequenceFile.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.FastLineReader;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-
-/**
- * Implementation of ReferenceSequenceFile for reading from FASTA files.
- *
- * @author Tim Fennell
- */
-public class FastaSequenceFile extends AbstractFastaSequenceFile {
-
- private final boolean truncateNamesAtWhitespace;
- private FastLineReader in;
- private int sequenceIndex = -1;
- private final static int BUFFER_SIZE = 5000 ;
- private final byte[] basesBuffer = new byte[BUFFER_SIZE];
-
-
- /** Constructs a FastaSequenceFile that reads from the specified file. */
- public FastaSequenceFile(final File file, final boolean truncateNamesAtWhitespace) {
- super(file);
- this.truncateNamesAtWhitespace = truncateNamesAtWhitespace;
- this.in = new FastLineReader(IoUtil.openFileForReading(file));
- }
-
- /**
- * It's good to call this to free up memory.
- */
- public void close() {
- in.close();
- }
-
- public ReferenceSequence nextSequence() {
- this.sequenceIndex += 1;
-
- // Read the header line
- final String name = readSequenceName();
- if (name == null) {
- close();
- return null;
- }
-
- // Read the sequence
- final int knownLength = (this.sequenceDictionary == null) ? -1 : this.sequenceDictionary.getSequence(this.sequenceIndex).getSequenceLength();
- final byte[] bases = readSequence(knownLength);
-
- return new ReferenceSequence(name, this.sequenceIndex, bases);
- }
-
- public void reset() {
- this.sequenceIndex = -1;
- this.in.close();
- this.in = new FastLineReader(IoUtil.openFileForReading(file));
-
- }
-
- private String readSequenceName() {
- in.skipNewlines();
- if (in.eof()) {
- return null;
- }
- final byte b = in.getByte();
- if (b != '>') {
- throw new PicardException("Format exception reading FASTA " + file + ". Expected > but saw chr(" +
- b + ") at start of sequence with index " + this.sequenceIndex);
- }
- final byte[] nameBuffer = new byte[4096];
- int nameLength = 0;
- do {
- if (in.eof()) {
- break;
- }
- nameLength += in.readToEndOfOutputBufferOrEoln(nameBuffer, nameLength);
- if (nameLength == nameBuffer.length && !in.atEoln()) {
- throw new PicardException("Sequence name too long in FASTA " + file);
- }
- } while (!in.atEoln());
- if (nameLength == 0) {
- throw new PicardException("Missing sequence name in FASTA " + file);
- }
- String name = StringUtil.bytesToString(nameBuffer, 0, nameLength).trim();
- if (truncateNamesAtWhitespace) {
- name = SAMSequenceRecord.truncateSequenceName(name);
- }
- return name;
- }
-
- /**
- * Read bases from input
- * @param knownLength For performance:: -1 if length is not known, otherwise the length of the sequence.
- * @return ASCII bases for sequence
- */
- private byte[] readSequence(final int knownLength) {
- byte[] bases = (knownLength == -1) ? basesBuffer : new byte[knownLength] ;
-
- int sequenceLength = 0;
- while (!in.eof()) {
- final boolean sawEoln = in.skipNewlines();
- if (in.eof()) {
- break;
- }
- if (sawEoln && in.peekByte() == '>') {
- break;
- }
- sequenceLength += in.readToEndOfOutputBufferOrEoln(bases, sequenceLength);
- while (sequenceLength > 0 && Character.isWhitespace(StringUtil.byteToChar(bases[sequenceLength - 1]))) {
- --sequenceLength;
- }
- if (sequenceLength == knownLength) {
- break;
- }
- if (sequenceLength == bases.length) {
- final byte[] tmp = new byte[bases.length * 2];
- System.arraycopy(bases, 0, tmp, 0, sequenceLength);
- bases = tmp;
- }
- }
- // And lastly resize the array down to the right size
- if (sequenceLength != bases.length || bases == basesBuffer) {
- final byte[] tmp = new byte[sequenceLength];
- System.arraycopy(bases, 0, tmp, 0, sequenceLength);
- bases = tmp;
- }
- return bases;
- }
-}
diff --git a/src/java/net/sf/picard/reference/FastaSequenceIndex.java b/src/java/net/sf/picard/reference/FastaSequenceIndex.java
deleted file mode 100644
index 5c1b43d..0000000
--- a/src/java/net/sf/picard/reference/FastaSequenceIndex.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMSequenceRecord;
-
-import java.util.Scanner;
-import java.util.Map;
-import java.util.LinkedHashMap;
-import java.util.Iterator;
-import java.util.regex.MatchResult;
-import java.io.File;
-import java.io.FileNotFoundException;
-
-/**
- * Reads a fasta index file (.fai), as generated by `samtools faidx`.
- */
-public class FastaSequenceIndex implements Iterable<FastaSequenceIndexEntry> {
- /**
- * Store the entries. Use a LinkedHashMap for consistent iteration in insertion order.
- */
- private final Map<String,FastaSequenceIndexEntry> sequenceEntries = new LinkedHashMap<String,FastaSequenceIndexEntry>();
-
- /**
- * Build a sequence index from the specified file.
- * @param indexFile File to open.
- * @throws FileNotFoundException if the index file cannot be found.
- */
- public FastaSequenceIndex( File indexFile ) {
- IoUtil.assertFileIsReadable(indexFile);
- parseIndexFile(indexFile);
- }
-
- /**
- * Empty, protected constructor for unit testing.
- */
- protected FastaSequenceIndex() {}
-
- /**
- * Add a new index entry to the list. Protected for unit testing.
- * @param indexEntry New index entry to add.
- */
- protected void add(FastaSequenceIndexEntry indexEntry) {
- final FastaSequenceIndexEntry ret = sequenceEntries.put(indexEntry.getContig(),indexEntry);
- if (ret != null) {
- throw new PicardException("Contig '" + indexEntry.getContig() + "' already exists in fasta index.");
- }
- }
-
- /**
- * Renames the existing index entry to the new index entry with the specified name.
- * @param entry entry to update.
- * @param newName New name for the index entry.
- */
- protected void rename(FastaSequenceIndexEntry entry,String newName) {
- sequenceEntries.remove(entry.getContig());
- entry.setContig(newName);
- add(entry);
- }
-
- /**
- * Compare two FastaSequenceIndex objects for equality.
- * @param other Another FastaSequenceIndex to compare
- * @return True if index has the same entries as other instance, in the same order
- */
- public boolean equals(Object other) {
- if(!(other instanceof FastaSequenceIndex))
- return false;
-
- if (this == other) return true;
-
- FastaSequenceIndex otherIndex = (FastaSequenceIndex)other;
- if(this.size() != otherIndex.size())
- return false;
-
- Iterator<FastaSequenceIndexEntry> iter = this.iterator();
- Iterator<FastaSequenceIndexEntry> otherIter = otherIndex.iterator();
- while (iter.hasNext()) {
- if (!otherIter.hasNext())
- return false;
- if (!iter.next().equals(otherIter.next()))
- return false;
- }
- return true;
- }
-
- /**
- * Parse the contents of an index file, caching the results internally.
- * @param indexFile File to parse.
- * @throws FileNotFoundException Thrown if file could not be opened.
- */
- private void parseIndexFile(File indexFile) {
- try {
- Scanner scanner = new Scanner(indexFile);
-
- int sequenceIndex = 0;
- while( scanner.hasNext() ) {
- // Tokenize and validate the index line.
- String result = scanner.findInLine("(.+)\\t+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)");
- if( result == null )
- throw new PicardException("Found invalid line in index file:" + scanner.nextLine());
- MatchResult tokens = scanner.match();
- if( tokens.groupCount() != 5 )
- throw new PicardException("Found invalid line in index file:" + scanner.nextLine());
-
- // Skip past the line separator
- scanner.nextLine();
-
- // Parse the index line.
- String contig = tokens.group(1);
- long size = Long.valueOf(tokens.group(2));
- long location = Long.valueOf(tokens.group(3));
- int basesPerLine = Integer.valueOf(tokens.group(4));
- int bytesPerLine = Integer.valueOf(tokens.group(5));
-
- contig = SAMSequenceRecord.truncateSequenceName(contig);
- // Build sequence structure
- add(new FastaSequenceIndexEntry(contig,location,size,basesPerLine,bytesPerLine, sequenceIndex++) );
- }
- scanner.close();
- } catch (FileNotFoundException e) {
- throw new PicardException("Fasta index file should be found but is not: " + indexFile, e);
- }
- }
-
- /**
- * Does the given contig name have a corresponding entry?
- * @param contigName The contig name for which to search.
- * @return True if contig name is present; false otherwise.
- */
- public boolean hasIndexEntry( String contigName ) {
- return sequenceEntries.containsKey(contigName);
- }
-
- /**
- * Retrieve the index entry associated with the given contig.
- * @param contigName Name of the contig for which to search.
- * @return Index entry associated with the given contig.
- * @throws PicardException if the associated index entry can't be found.
- */
- public FastaSequenceIndexEntry getIndexEntry( String contigName ) {
- if( !hasIndexEntry(contigName) )
- throw new PicardException("Unable to find entry for contig: " + contigName);
-
- return sequenceEntries.get(contigName);
- }
-
- /**
- * Creates an iterator which can iterate through all entries in a fasta index.
- * @return iterator over all fasta index entries.
- */
- public Iterator<FastaSequenceIndexEntry> iterator() {
- return sequenceEntries.values().iterator();
- }
-
- /**
- * Returns the number of elements in the index.
- * @return Number of elements in the index.
- */
- public int size() {
- return sequenceEntries.size();
- }
-}
-
-/**
- * Hold an individual entry in a fasta sequence index file.
- */
-class FastaSequenceIndexEntry {
- private String contig;
- private long location;
- private long size;
- private int basesPerLine;
- private int bytesPerLine;
- private final int sequenceIndex;
-
- /**
- * Create a new entry with the given parameters.
- * @param contig Contig this entry represents.
- * @param location Location (byte coordinate) in the fasta file.
- * @param size The number of bases in the contig.
- * @param basesPerLine How many bases are on each line.
- * @param bytesPerLine How many bytes are on each line (includes newline characters).
- */
- public FastaSequenceIndexEntry( String contig,
- long location,
- long size,
- int basesPerLine,
- int bytesPerLine,
- int sequenceIndex) {
- this.contig = contig;
- this.location = location;
- this.size = size;
- this.basesPerLine = basesPerLine;
- this.bytesPerLine = bytesPerLine;
- this.sequenceIndex = sequenceIndex;
- }
-
- /**
- * Gets the contig associated with this entry.
- * @return String representation of the contig.
- */
- public String getContig() {
- return contig;
- }
-
- /**
- * Sometimes contigs need to be adjusted on-the-fly to
- * match sequence dictionary entries. Provide that capability
- * to other classes w/i the package.
- * @param contig New value for the contig.
- */
- protected void setContig(String contig) {
- this.contig = contig;
- }
-
- /**
- * Gets the location of this contig within the fasta.
- * @return seek position within the fasta.
- */
- public long getLocation() {
- return location;
- }
-
- /**
- * Gets the size, in bytes, of the data in the contig.
- * @return size of the contig bases in bytes.
- */
- public long getSize() {
- return size;
- }
-
- /**
- * Gets the number of bases in a given line.
- * @return Number of bases in the fasta line.
- */
- public int getBasesPerLine() {
- return basesPerLine;
- }
-
- /**
- * How many bytes (bases + whitespace) are consumed by the
- * given line?
- * @return Number of bytes in a line.
- */
- public int getBytesPerLine() {
- return bytesPerLine;
- }
-
- public int getSequenceIndex() {
- return sequenceIndex;
- }
-
- /**
- * For debugging. Emit the contents of each contig line.
- * @return A string representation of the contig line.
- */
- public String toString() {
- return String.format("contig %s; location %d; size %d; basesPerLine %d; bytesPerLine %d", contig,
- location,
- size,
- basesPerLine,
- bytesPerLine );
- }
-
- /**
- * Compare this index entry to another index entry.
- * @param other another FastaSequenceIndexEntry
- * @return True if each has the same name, location, size, basesPerLine and bytesPerLine
- */
- public boolean equals(Object other) {
- if(!(other instanceof FastaSequenceIndexEntry))
- return false;
-
- if (this == other) return true;
-
- FastaSequenceIndexEntry otherEntry = (FastaSequenceIndexEntry)other;
- return (contig.equals(otherEntry.contig) && size == otherEntry.size && location == otherEntry.location
- && basesPerLine == otherEntry.basesPerLine && bytesPerLine == otherEntry.bytesPerLine);
- }
-
- /**
- * In general, we expect one entry per contig, so compute the hash based only on the contig.
- * @return A unique hash code representing this object.
- */
- public int hashCode() {
- return contig.hashCode();
- }
-}
diff --git a/src/java/net/sf/picard/reference/IndexedFastaSequenceFile.java b/src/java/net/sf/picard/reference/IndexedFastaSequenceFile.java
deleted file mode 100644
index 9e37e30..0000000
--- a/src/java/net/sf/picard/reference/IndexedFastaSequenceFile.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-
-import java.io.*;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.util.Iterator;
-
-/**
- * A fasta file driven by an index for fast, concurrent lookups. Supports two interfaces:
- * the ReferenceSequenceFile for old-style, stateful lookups and a direct getter.
- */
-public class IndexedFastaSequenceFile extends AbstractFastaSequenceFile implements Closeable {
- /**
- * Size of the read buffer.
- */
- private static final int BUFFER_SIZE = 128 * 1024;
-
- /**
- * The interface facilitating direct access to the fasta.
- */
- private final FileChannel channel;
-
- /**
- * A representation of the sequence index, stored alongside the fasta in a .fasta.fai file.
- */
- private final FastaSequenceIndex index;
-
- /**
- * An iterator into the fasta index, for traversing iteratively across the fasta.
- */
- private Iterator<FastaSequenceIndexEntry> indexIterator;
-
- /**
- * Open the given indexed fasta sequence file. Throw an exception if the file cannot be opened.
- * @param file The file to open.
- * @param index Pre-built FastaSequenceIndex, for the case in which one does not exist on disk.
- * @throws FileNotFoundException If the fasta or any of its supporting files cannot be found.
- */
- public IndexedFastaSequenceFile(final File file, final FastaSequenceIndex index) {
- super(file);
- if (index == null) throw new IllegalArgumentException("Null index for fasta " + file);
- this.index = index;
- IoUtil.assertFileIsReadable(file);
- final FileInputStream in;
- try {
- in = new FileInputStream(file);
- } catch (FileNotFoundException e) {
- throw new PicardException("Fasta file should be readable but is not: " + file, e);
- }
- channel = in.getChannel();
- reset();
-
- if(getSequenceDictionary() != null)
- sanityCheckDictionaryAgainstIndex(file.getAbsolutePath(),sequenceDictionary,index);
- }
-
- /**
- * Open the given indexed fasta sequence file. Throw an exception if the file cannot be opened.
- * @param file The file to open.
- * @throws FileNotFoundException If the fasta or any of its supporting files cannot be found.
- */
- public IndexedFastaSequenceFile(final File file) throws FileNotFoundException {
- this(file, new FastaSequenceIndex((findRequiredFastaIndexFile(file))));
- }
-
-
- public boolean isIndexed() {return true;}
-
- private static File findFastaIndex(File fastaFile) {
- File indexFile = getFastaIndexFileName(fastaFile);
- if (!indexFile.exists()) return null;
- return indexFile;
- }
-
- private static File getFastaIndexFileName(File fastaFile) {
- return new File(fastaFile.getAbsolutePath() + ".fai");
- }
-
- private static File findRequiredFastaIndexFile(File fastaFile) throws FileNotFoundException {
- File ret = findFastaIndex(fastaFile);
- if (ret == null) throw new FileNotFoundException(getFastaIndexFileName(fastaFile) + " not found.");
- return ret;
- }
-
- public static boolean canCreateIndexedFastaReader(final File fastaFile) {
- return (fastaFile.exists() &&
- findFastaIndex(fastaFile) != null);
- }
-
- /**
- * Do some basic checking to make sure the dictionary and the index match.
- * @param fastaFile Used for error reporting only.
- * @param sequenceDictionary sequence dictionary to check against the index.
- * @param index index file to check against the dictionary.
- */
- protected static void sanityCheckDictionaryAgainstIndex(final String fastaFile,
- final SAMSequenceDictionary sequenceDictionary,
- final FastaSequenceIndex index) {
- // Make sure dictionary and index are the same size.
- if( sequenceDictionary.getSequences().size() != index.size() )
- throw new PicardException("Sequence dictionary and index contain different numbers of contigs");
-
- Iterator<SAMSequenceRecord> sequenceIterator = sequenceDictionary.getSequences().iterator();
- Iterator<FastaSequenceIndexEntry> indexIterator = index.iterator();
-
- while(sequenceIterator.hasNext() && indexIterator.hasNext()) {
- SAMSequenceRecord sequenceEntry = sequenceIterator.next();
- FastaSequenceIndexEntry indexEntry = indexIterator.next();
-
- if(!sequenceEntry.getSequenceName().equals(indexEntry.getContig())) {
- throw new PicardException(String.format("Mismatch between sequence dictionary fasta index for %s, sequence '%s' != '%s'.",
- fastaFile, sequenceEntry.getSequenceName(),indexEntry.getContig()));
- }
-
- // Make sure sequence length matches index length.
- if( sequenceEntry.getSequenceLength() != indexEntry.getSize())
- throw new PicardException("Index length does not match dictionary length for contig: " + sequenceEntry.getSequenceName() );
- }
- }
-
- /**
- * Retrieves the sequence dictionary for the fasta file.
- * @return sequence dictionary of the fasta.
- */
- public SAMSequenceDictionary getSequenceDictionary() {
- return sequenceDictionary;
- }
-
- /**
- * Retrieves the complete sequence described by this contig.
- * @param contig contig whose data should be returned.
- * @return The full sequence associated with this contig.
- */
- public ReferenceSequence getSequence( String contig ) {
- return getSubsequenceAt( contig, 1, (int)index.getIndexEntry(contig).getSize() );
- }
-
- /**
- * Gets the subsequence of the contig in the range [start,stop]
- * @param contig Contig whose subsequence to retrieve.
- * @param start inclusive, 1-based start of region.
- * @param stop inclusive, 1-based stop of region.
- * @return The partial reference sequence associated with this range.
- */
- public ReferenceSequence getSubsequenceAt( String contig, long start, long stop ) {
- if(start > stop + 1)
- throw new PicardException(String.format("Malformed query; start point %d lies after end point %d",start,stop));
-
- FastaSequenceIndexEntry indexEntry = index.getIndexEntry(contig);
-
- if(stop > indexEntry.getSize())
- throw new PicardException("Query asks for data past end of contig");
-
- int length = (int)(stop - start + 1);
-
- byte[] target = new byte[length];
- ByteBuffer targetBuffer = ByteBuffer.wrap(target);
-
- final int basesPerLine = indexEntry.getBasesPerLine();
- final int bytesPerLine = indexEntry.getBytesPerLine();
- final int terminatorLength = bytesPerLine - basesPerLine;
-
- long startOffset = ((start-1)/basesPerLine)*bytesPerLine + (start-1)%basesPerLine;
-
- // Allocate a 128K buffer for reading in sequence data.
- ByteBuffer channelBuffer = ByteBuffer.allocate(BUFFER_SIZE);
-
- while(targetBuffer.position() < length) {
- // If the bufferOffset is currently within the eol characters in the string, push the bufferOffset forward to the next printable character.
- startOffset += Math.max((int)(startOffset%bytesPerLine - basesPerLine + 1),0);
-
- try {
- startOffset += channel.read(channelBuffer,indexEntry.getLocation()+startOffset);
- }
- catch(IOException ex) {
- throw new PicardException("Unable to load " + contig + "(" + start + ", " + stop + ") from " + file);
- }
-
- // Reset the buffer for outbound transfers.
- channelBuffer.flip();
-
- // Calculate the size of the next run of bases based on the contents we've already retrieved.
- final int positionInContig = (int)start-1+targetBuffer.position();
- final int nextBaseSpan = Math.min(basesPerLine-positionInContig%basesPerLine,length-targetBuffer.position());
- // Cap the bytes to transfer by limiting the nextBaseSpan to the size of the channel buffer.
- int bytesToTransfer = Math.min(nextBaseSpan,channelBuffer.capacity());
-
- channelBuffer.limit(channelBuffer.position()+bytesToTransfer);
-
- while(channelBuffer.hasRemaining()) {
- targetBuffer.put(channelBuffer);
-
- bytesToTransfer = Math.min(basesPerLine,length-targetBuffer.position());
- channelBuffer.limit(Math.min(channelBuffer.position()+bytesToTransfer+terminatorLength,channelBuffer.capacity()));
- channelBuffer.position(Math.min(channelBuffer.position()+terminatorLength,channelBuffer.capacity()));
- }
-
- // Reset the buffer for inbound transfers.
- channelBuffer.flip();
- }
-
- return new ReferenceSequence( contig, indexEntry.getSequenceIndex(), target );
- }
-
- /**
- * Gets the next sequence if available, or null if not present.
- * @return next sequence if available, or null if not present.
- */
- public ReferenceSequence nextSequence() {
- if( !indexIterator.hasNext() )
- return null;
- return getSequence( indexIterator.next().getContig() );
- }
-
- /**
- * Reset the iterator over the index.
- */
- public void reset() {
- indexIterator = index.iterator();
- }
-
- /**
- * A simple toString implementation for debugging.
- * @return String representation of the file.
- */
- public String toString() {
- return this.file.getAbsolutePath();
- }
-
- @Override
- public void close() throws IOException {
- channel.close();
- }
-}
diff --git a/src/java/net/sf/picard/reference/NormalizeFasta.java b/src/java/net/sf/picard/reference/NormalizeFasta.java
deleted file mode 100644
index d2bcb37..0000000
--- a/src/java/net/sf/picard/reference/NormalizeFasta.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.reference.ReferenceSequenceFileFactory;
-import net.sf.picard.util.Log;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Little program to "normalize" a fasta file to ensure that all line of sequence are the
- * same length, and are a reasonable length!
- */
-public class NormalizeFasta extends CommandLineProgram {
- @Usage public final String USAGE = "Takes any file that conforms to the fasta format and " +
- "normalizes it so that all lines of sequence except the last line per named sequence " +
- "are of the same length.";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The input fasta file to normalize.")
- public File INPUT;
-
- @Option(shortName= StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output fasta file to write.")
- public File OUTPUT;
-
- @Option(doc="The line length to be used for the output fasta file.")
- public int LINE_LENGTH=100;
-
- @Option(doc="Truncate sequence names at first whitespace.")
- public boolean TRUNCATE_SEQUENCE_NAMES_AT_WHITESPACE=false;
-
- private final Log log = Log.getInstance(NormalizeFasta.class);
-
- public static void main(final String[] args) {
- new NormalizeFasta().instanceMainWithExit(args);
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- if (INPUT.getAbsoluteFile().equals(OUTPUT.getAbsoluteFile())) {
- throw new IllegalArgumentException("Input and output cannot be the same file.");
- }
-
- final ReferenceSequenceFile ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(INPUT, TRUNCATE_SEQUENCE_NAMES_AT_WHITESPACE);
- final BufferedWriter out = IoUtil.openFileForBufferedWriting(OUTPUT);
-
- ReferenceSequence seq = null;
- while ((seq = ref.nextSequence()) != null) {
- final String name = seq.getName();
- final byte[] bases = seq.getBases();
-
- try {
- out.write(">");
- out.write(name);
- out.newLine();
-
- if (bases.length == 0) {
- log.warn("Sequence " + name + " contains 0 bases.");
- }
- else {
- for (int i=0; i<bases.length; ++i) {
- if (i > 0 && i % LINE_LENGTH == 0) out.write("\n");
- out.write(bases[i]);
- }
-
- out.write("\n");
- }
- }
- catch (IOException ioe) {
- throw new PicardException("Error writing to file " + OUTPUT.getAbsolutePath(), ioe);
-
- }
- }
- try {
- out.close();
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/reference/ReferenceSequence.java b/src/java/net/sf/picard/reference/ReferenceSequence.java
deleted file mode 100644
index 541f916..0000000
--- a/src/java/net/sf/picard/reference/ReferenceSequence.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-/**
- * Wrapper around a reference sequence that has been read from a reference file.
- *
- * @author Tim Fennell
- */
-public class ReferenceSequence {
- private final String name;
- private final byte[] bases;
- private final int contigIndex;
- private final int length;
-
- /**
- * creates a fully formed ReferenceSequence
- *
- * @param name the name of the sequence from the source file
- * @param index the zero based index of this contig in the source file
- * @param bases the bases themselves stored as one-byte characters
- */
- public ReferenceSequence(String name, int index, byte[] bases) {
- this.name = name;
- this.contigIndex = index;
- this.bases = bases;
- this.length = bases.length;
- }
-
- /** Gets the set of names given to this sequence in the source file. */
- public String getName() { return name; }
-
- /**
- * Gets the array of bases that define this sequence. The bases can include any
- * letter and possibly include masking information in the form of lower case
- * letters. This array is mutable (obviously!) and it NOT a clone of the array
- * held interally. Do not modify it!!!
- */
- public byte[] getBases() { return bases; }
-
- /** Gets the 0-based index of this contig in the source file from which it came. */
- public int getContigIndex() { return contigIndex; }
-
- /** Gets the length of this reference sequence in bases. */
- public int length() { return length; }
-
- public String toString() {
- return "ReferenceSequence " + getName();
- }
-}
diff --git a/src/java/net/sf/picard/reference/ReferenceSequenceFile.java b/src/java/net/sf/picard/reference/ReferenceSequenceFile.java
deleted file mode 100644
index 53235cc..0000000
--- a/src/java/net/sf/picard/reference/ReferenceSequenceFile.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.samtools.SAMSequenceDictionary;
-
-import java.io.IOException;
-
-/**
- * An interface for working with files of reference sequences regardless of the file format
- * being used.
- *
- * @author Tim Fennell
- */
-public interface ReferenceSequenceFile {
-
- /**
- * Must return a sequence dictionary with at least the following fields completed
- * for each sequence: name, length.
- *
- * @return a list of sequence records representing the sequences in this reference file
- */
- public SAMSequenceDictionary getSequenceDictionary();
-
- /**
- * Retrieves the next whole sequences from the file.
- * @return a ReferenceSequence or null if at the end of the file
- */
- public ReferenceSequence nextSequence();
-
- /**
- * Resets the ReferenceSequenceFile so that the next call to nextSequence() will return
- * the first sequence in the file.
- */
- public void reset();
-
-
- /**
- * @return true if getSequence and getSubsequenceAt methods are allowed.
- */
- public boolean isIndexed();
-
- /**
- * Retrieves the complete sequence described by this contig.
- * @param contig contig whose data should be returned.
- * @return The full sequence associated with this contig.
- * @throws UnsupportedOperationException if !sIndexed.
- */
- public ReferenceSequence getSequence( String contig );
-
- /**
- * Gets the subsequence of the contig in the range [start,stop]
- * @param contig Contig whose subsequence to retrieve.
- * @param start inclusive, 1-based start of region.
- * @param stop inclusive, 1-based stop of region.
- * @return The partial reference sequence associated with this range.
- * @throws UnsupportedOperationException if !sIndexed.
- */
- public ReferenceSequence getSubsequenceAt( String contig, long start, long stop );
-
- /**
- * @return Reference name, file name, or something other human-readable representation.
- */
- public String toString();
-
- public void close() throws IOException;
-}
diff --git a/src/java/net/sf/picard/reference/ReferenceSequenceFileFactory.java b/src/java/net/sf/picard/reference/ReferenceSequenceFileFactory.java
deleted file mode 100644
index 812ac69..0000000
--- a/src/java/net/sf/picard/reference/ReferenceSequenceFileFactory.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * Factory class for creating ReferenceSequenceFile instances for reading reference
- * sequences store in various formats.
- *
- * @author Tim Fennell
- */
-public class ReferenceSequenceFileFactory {
- public static final Set<String> FASTA_EXTENSIONS = new HashSet<String>() {{
- add(".fasta");
- add(".fasta.gz");
- add(".fa");
- add(".fa.gz");
- add(".fna");
- add(".fna.gz");
- add(".txt");
- add(".txt.gz");
- }};
-
- /**
- * Attempts to determine the type of the reference file and return an instance
- * of ReferenceSequenceFile that is appropriate to read it. Sequence names
- * will be truncated at first whitespace, if any.
- *
- * @param file the reference sequence file on disk
- */
- public static ReferenceSequenceFile getReferenceSequenceFile(File file) {
- return getReferenceSequenceFile(file, true);
- }
-
- /**
- * Attempts to determine the type of the reference file and return an instance
- * of ReferenceSequenceFile that is appropriate to read it.
- *
- * @param file the reference sequence file on disk
- * @param truncateNamesAtWhitespace if true, only include the first word of the sequence name
- */
- public static ReferenceSequenceFile getReferenceSequenceFile(File file, boolean truncateNamesAtWhitespace) {
- String name = file.getName();
- for (String ext : FASTA_EXTENSIONS) {
- if (name.endsWith(ext)) {
- // Using faidx requires truncateNamesAtWhitespace
- if (truncateNamesAtWhitespace && IndexedFastaSequenceFile.canCreateIndexedFastaReader(file)) {
- try {
- return new IndexedFastaSequenceFile(file);
- } catch (FileNotFoundException e) {
- throw new IllegalStateException("Should never happen, because existence of files has been checked.", e);
- }
- }
- else {
- return new FastaSequenceFile(file, truncateNamesAtWhitespace);
- }
- }
- }
-
- throw new IllegalArgumentException("File is not a supported reference file type: " + file.getAbsolutePath());
- }
-}
diff --git a/src/java/net/sf/picard/reference/ReferenceSequenceFileWalker.java b/src/java/net/sf/picard/reference/ReferenceSequenceFileWalker.java
deleted file mode 100644
index 55f5cf9..0000000
--- a/src/java/net/sf/picard/reference/ReferenceSequenceFileWalker.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.SAMSequenceDictionary;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Manages a ReferenceSequenceFile. Loads the requested sequence, ensuring that
- * access is in order, and confirming that sequence name and index agree.
- *
- * @author alecw at broadinstitute.org
- */
-public class ReferenceSequenceFileWalker {
- private final ReferenceSequenceFile referenceSequenceFile;
- private ReferenceSequence referenceSequence = null;
-
- public ReferenceSequenceFileWalker(final ReferenceSequenceFile referenceSequenceFile) {
- this.referenceSequenceFile = referenceSequenceFile;
- }
-
- public ReferenceSequenceFileWalker(final File file) {
- this(ReferenceSequenceFileFactory.getReferenceSequenceFile(file));
- }
-
- /**
- * Ensure that the requested sequence is loaded. Throws an exception if out-of-order
- * request is made, or if there is a mismatch between the requested name and the name
- * found in the ReferenceSequenceFile
- */
- public ReferenceSequence get(final int sequenceIndex, final String sequenceName, final int length) {
- // Has the side-effect of setting referenceSequence member
- get(sequenceIndex);
- if (!referenceSequence.getName().equals(sequenceName)) {
- // Sanity check the sequence names against the sequence dictionary while scanning through.
- throw new PicardException("Sequence name mismatch at sequence index (" + referenceSequence.getContigIndex() +
- ", " + referenceSequence.getName() + ") != " + sequenceName);
- }
- if (referenceSequence.getBases().length != length) {
- throw new PicardException("Sequence length mismatch for (" + sequenceIndex + ", " + sequenceName +
- "). expected " + length + " but found " + referenceSequence.getBases().length);
- }
- return referenceSequence;
- }
-
- /**
- * Get reference sequence without validating name or length. This is OK if the entire sequence
- * dictionary was validated before reading sequences.
- */
- public ReferenceSequence get(final int sequenceIndex) {
- if (referenceSequence != null && referenceSequence.getContigIndex() == sequenceIndex) {
- return referenceSequence;
- }
- if (referenceSequence != null && referenceSequence.getContigIndex() > sequenceIndex) {
- throw new PicardException("Requesting earlier reference sequence: " + sequenceIndex + " < " +
- referenceSequence.getContigIndex());
- }
- referenceSequence = null;
- for(referenceSequence = referenceSequenceFile.nextSequence();
- referenceSequence != null && referenceSequence.getContigIndex() < sequenceIndex;
- referenceSequence = referenceSequenceFile.nextSequence()) {
- }
- if (referenceSequence == null || referenceSequence.getContigIndex() != sequenceIndex) {
- throw new PicardException("Reference sequence (" + sequenceIndex +
- ") not found in " + referenceSequenceFile.toString());
- }
- return referenceSequence;
- }
-
- public SAMSequenceDictionary getSequenceDictionary() {
- return referenceSequenceFile.getSequenceDictionary();
- }
-
- public void close() throws IOException {
- referenceSequenceFile.close();
- }
-}
diff --git a/src/java/net/sf/picard/sam/AbstractAlignmentMerger.java b/src/java/net/sf/picard/sam/AbstractAlignmentMerger.java
deleted file mode 100644
index 97c86d3..0000000
--- a/src/java/net/sf/picard/sam/AbstractAlignmentMerger.java
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.filter.FilteringIterator;
-import net.sf.picard.filter.SamRecordFilter;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.reference.ReferenceSequenceFileWalker;
-import net.sf.picard.util.CigarUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.BAMRecordCodec;
-import net.sf.samtools.Cigar;
-import net.sf.samtools.CigarElement;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriter;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMProgramRecord;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMRecordCoordinateComparator;
-import net.sf.samtools.SAMRecordQueryNameComparator;
-import net.sf.samtools.SAMRecordUtil;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.SAMTag;
-import net.sf.samtools.SAMUtils;
-import net.sf.samtools.SamPairUtil;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Abstract class that coordinates the general task of taking in a set of alignment information,
- * possibly in SAM format, possibly in other formats, and merging that with the set of all reads
- * for which alignment was attempted, stored in an unmapped SAM file.
- *
- * The order of processing is as follows:
- *
- * 1. Get records from the unmapped bam and the alignment data
- * 2. Merge the alignment information and public tags ONLY from the aligned SAMRecords
- * 3. Do additional modifications -- handle clipping, trimming, etc.
- * 4. Fix up mate information on paired reads
- * 5. Do a final calculation of the NM and UQ tags.
- * 6. Write the records to the output file.
- *
- * Concrete subclasses which extend AbstractAlignmentMerger should implement getQueryNameSortedAlignedRecords.
- * If these records are not in queryname order, mergeAlignment will throw an IllegalStateException.
- *
- * Subclasses may optionally implement ignoreAlignment(), which can be used to skip over certain alignments.
- *
- *
- * @author ktibbett at broadinstitute.org
- */
-public abstract class AbstractAlignmentMerger {
-
- public static final int MAX_RECORDS_IN_RAM = 500000;
-
- private static final char[] RESERVED_ATTRIBUTE_STARTS = {'X','Y', 'Z'};
- private final NumberFormat FMT = new DecimalFormat("#,###");
-
- private final Log log = Log.getInstance(AbstractAlignmentMerger.class);
- private final ProgressLogger progress = new ProgressLogger(this.log, 1000000, "Written to sorting collection in queryname order", "records");
-
- private final File unmappedBamFile;
- private final File targetBamFile;
- private final SAMSequenceDictionary sequenceDictionary;
- private ReferenceSequenceFileWalker refSeq = null;
- private final boolean clipAdapters;
- private final boolean bisulfiteSequence;
- private SAMProgramRecord programRecord;
- private final boolean alignedReadsOnly;
- private final SAMFileHeader header;
- private final List<String> attributesToRetain = new ArrayList<String>();
- private final List<String> attributesToRemove = new ArrayList<String>();
- private final File referenceFasta;
- private final Integer read1BasesTrimmed;
- private final Integer read2BasesTrimmed;
- private final List<SamPairUtil.PairOrientation> expectedOrientations;
- private final SortOrder sortOrder;
- private MultiHitAlignedReadIterator alignedIterator = null;
- private boolean clipOverlappingReads = true;
- private int maxRecordsInRam = MAX_RECORDS_IN_RAM;
- private final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy;
- private boolean keepAlignerProperPairFlags = false;
- private boolean addMateCigar = false;
-
- private final SamRecordFilter alignmentFilter = new SamRecordFilter() {
- public boolean filterOut(final SAMRecord record) {
- return ignoreAlignment(record);
- }
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- throw new UnsupportedOperationException("Paired SamRecordFilter not implemented!");
- }
- };
- private boolean includeSecondaryAlignments = true;
-
- protected abstract CloseableIterator<SAMRecord> getQuerynameSortedAlignedRecords();
-
- protected boolean ignoreAlignment(final SAMRecord sam) { return false; } // default implementation
-
- /**
- * Constructor
- *
- * @param unmappedBamFile The BAM file that was used as the input to the aligner, which will
- * include info on all the reads that did not map. Required.
- * @param targetBamFile The file to which to write the merged SAM records. Required.
- * @param referenceFasta The reference sequence for the map files. Required.
- * @param clipAdapters Whether adapters marked in unmapped BAM file should be marked as
- * soft clipped in the merged bam. Required.
- * @param bisulfiteSequence Whether the reads are bisulfite sequence (used when calculating the
- * NM and UQ tags). Required.
- * @param alignedReadsOnly Whether to output only those reads that have alignment data
- * @param programRecord Program record for target file SAMRecords created.
- * @param attributesToRetain private attributes from the alignment record that should be
- * included when merging. This overrides the exclusion of
- * attributes whose tags start with the reserved characters
- * of X, Y, and Z
- * @param attributesToRemove attributes from the alignment record that should be
- * removed when merging. This overrides attributesToRetain if they share
- * common tags.
- * @param read1BasesTrimmed The number of bases trimmed from start of read 1 prior to alignment. Optional.
- * @param read2BasesTrimmed The number of bases trimmed from start of read 2 prior to alignment. Optional.
- * @param expectedOrientations A List of SamPairUtil.PairOrientations that are expected for
- * aligned pairs. Used to determine the properPair flag.
- * @param sortOrder The order in which the merged records should be output. If null,
- * output will be coordinate-sorted
- * @param primaryAlignmentSelectionStrategy What to do when there are multiple primary alignments, or multiple
- * alignments but none primary, for a read or read pair.
- * @param addMateCigar True if we are to add or maintain the mate CIGAR (MC) tag, false if we are to remove or not include.
- */
- public AbstractAlignmentMerger(final File unmappedBamFile, final File targetBamFile,
- final File referenceFasta, final boolean clipAdapters,
- final boolean bisulfiteSequence, final boolean alignedReadsOnly,
- final SAMProgramRecord programRecord, final List<String> attributesToRetain,
- final List<String> attributesToRemove,
- final Integer read1BasesTrimmed, final Integer read2BasesTrimmed,
- final List<SamPairUtil.PairOrientation> expectedOrientations,
- final SAMFileHeader.SortOrder sortOrder,
- final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy,
- final boolean addMateCigar) {
- IoUtil.assertFileIsReadable(unmappedBamFile);
- IoUtil.assertFileIsWritable(targetBamFile);
- IoUtil.assertFileIsReadable(referenceFasta);
-
- this.unmappedBamFile = unmappedBamFile;
- this.targetBamFile = targetBamFile;
- this.referenceFasta = referenceFasta;
-
- this.refSeq = new ReferenceSequenceFileWalker(referenceFasta);
- this.sequenceDictionary = refSeq.getSequenceDictionary();
- if (this.sequenceDictionary == null) {
- throw new PicardException("No sequence dictionary found for " + referenceFasta.getAbsolutePath() +
- ". Use CreateSequenceDictionary.jar to create a sequence dictionary.");
- }
-
- this.clipAdapters = clipAdapters;
- this.bisulfiteSequence = bisulfiteSequence;
- this.alignedReadsOnly = alignedReadsOnly;
-
- this.header = new SAMFileHeader();
- this.sortOrder = sortOrder != null ? sortOrder : SortOrder.coordinate;
- header.setSortOrder(SortOrder.coordinate);
- if (programRecord != null) {
- setProgramRecord(programRecord);
- }
- header.setSequenceDictionary(this.sequenceDictionary);
- if (attributesToRetain != null) {
- this.attributesToRetain.addAll(attributesToRetain);
- }
- if (attributesToRemove != null) {
- this.attributesToRemove.addAll(attributesToRemove);
- // attributesToRemove overrides attributesToRetain
- if (!this.attributesToRetain.isEmpty()) {
- for (String attribute : this.attributesToRemove) {
- if (this.attributesToRetain.contains(attribute)) {
- log.info("Overriding retaining the " + attribute + " tag since remove overrides retain.");
- this.attributesToRetain.remove(attribute);
- }
- }
- }
- }
- this.read1BasesTrimmed = read1BasesTrimmed;
- this.read2BasesTrimmed = read2BasesTrimmed;
- this.expectedOrientations = expectedOrientations;
-
- this.primaryAlignmentSelectionStrategy = primaryAlignmentSelectionStrategy;
-
- this.addMateCigar = addMateCigar;
- }
-
- /** Allows the caller to override the maximum records in RAM. */
- public void setMaxRecordsInRam(final int maxRecordsInRam) {
- this.maxRecordsInRam = maxRecordsInRam;
- }
-
- /**
- * Do this unconditionally, not just for aligned records, for two reasons:
- * - An unaligned read has been processed by the aligner, so it is more truthful.
- * - When chaining additional PG records, having all the records in the output file refer to the same PG
- * record means that only one chain will need to be created, rather than a chain for the mapped reads
- * and a separate chain for the unmapped reads.
- */
- private void maybeSetPgTag(final SAMRecord rec) {
- if (this.programRecord != null) {
- rec.setAttribute(ReservedTagConstants.PROGRAM_GROUP_ID, this.programRecord.getProgramGroupId());
- }
- }
- /**
-
- /**
- * Merges the alignment data with the non-aligned records from the source BAM file.
- */
- public void mergeAlignment() {
- // Open the file of unmapped records and write the read groups to the the header for the merged file
- final SAMFileReader unmappedSam = new SAMFileReader(this.unmappedBamFile);
- final CloseableIterator<SAMRecord> unmappedIterator = unmappedSam.iterator();
- this.header.setReadGroups(unmappedSam.getFileHeader().getReadGroups());
-
- int aligned = 0;
- int unmapped = 0;
-
- // Get the aligned records and set up the first one
- alignedIterator = new MultiHitAlignedReadIterator(
- new FilteringIterator(getQuerynameSortedAlignedRecords(), alignmentFilter),
- primaryAlignmentSelectionStrategy);
- HitsForInsert nextAligned = nextAligned();
-
- // Create the sorting collection that will write the records in the coordinate order
- // to the final bam file
- final SortingCollection<SAMRecord> sorted = SortingCollection.newInstance(
- SAMRecord.class, new BAMRecordCodec(header), new SAMRecordCoordinateComparator(),
- MAX_RECORDS_IN_RAM);
-
- while (unmappedIterator.hasNext()) {
- // Load next unaligned read or read pair.
- final SAMRecord rec = unmappedIterator.next();
-
- rec.setHeader(this.header);
- maybeSetPgTag(rec);
-
- final SAMRecord secondOfPair;
- if (rec.getReadPairedFlag()) {
- secondOfPair = unmappedIterator.next();
- secondOfPair.setHeader(this.header);
- maybeSetPgTag(secondOfPair);
-
- // Validate that paired reads arrive as first of pair followed by second of pair
- if (!rec.getReadName().equals(secondOfPair.getReadName()))
- throw new PicardException("Second read from pair not found in unmapped bam: " + rec.getReadName() + ", " + secondOfPair.getReadName());
-
- if (!rec.getFirstOfPairFlag()) throw new PicardException("First record in unmapped bam is not first of pair: " + rec.getReadName());
- if (!secondOfPair.getReadPairedFlag()) throw new PicardException("Second record in unmapped bam is not marked as paired: " + secondOfPair.getReadName());
- if (!secondOfPair.getSecondOfPairFlag()) throw new PicardException("Second record in unmapped bam is not second of pair: " + secondOfPair.getReadName());
- }
- else {
- secondOfPair = null;
- }
-
- // See if there are alignments for current unaligned read or read pair.
- if (nextAligned != null && rec.getReadName().equals(nextAligned.getReadName())) {
- // If there are multiple alignments for a read (pair), then the unaligned SAMRecord must be cloned
- // before copying info from the aligned record to the unaligned.
- final boolean clone = nextAligned.numHits() > 1 || nextAligned.hasSupplementalHits();
- SAMRecord r1Primary = null, r2Primary = null;
-
- if (rec.getReadPairedFlag()) {
- for (int i = 0; i < nextAligned.numHits(); ++i) {
- // firstAligned or secondAligned may be null, if there wasn't an alignment for the end,
- // or if the alignment was rejected by ignoreAlignment.
- final SAMRecord firstAligned = nextAligned.getFirstOfPair(i);
- final SAMRecord secondAligned = nextAligned.getSecondOfPair(i);
-
- final boolean isPrimaryAlignment = (firstAligned != null && !firstAligned.isSecondaryOrSupplementary()) ||
- (secondAligned != null && !secondAligned.isSecondaryOrSupplementary());
-
- final SAMRecord firstToWrite;
- final SAMRecord secondToWrite;
- if (clone) {
- firstToWrite = clone(rec);
- secondToWrite = clone(secondOfPair);
- } else {
- firstToWrite = rec;
- secondToWrite = secondOfPair;
- }
-
- // If these are the primary alignments then stash them for use on any supplemental alignments
- if (isPrimaryAlignment) {
- r1Primary = firstToWrite;
- r2Primary = secondToWrite;
- }
-
- transferAlignmentInfoToPairedRead(firstToWrite, secondToWrite, firstAligned, secondAligned);
-
- // Only write unmapped read when it has the mate info from the primary alignment.
- if (!firstToWrite.getReadUnmappedFlag() || isPrimaryAlignment) {
- addIfNotFiltered(sorted, firstToWrite);
- if (firstToWrite.getReadUnmappedFlag()) ++unmapped;
- else ++aligned;
- }
- if (!secondToWrite.getReadUnmappedFlag() || isPrimaryAlignment) {
- addIfNotFiltered(sorted, secondToWrite);
- if (!secondToWrite.getReadUnmappedFlag()) ++aligned;
- else ++unmapped;
- }
- }
-
- // Take all of the supplemental reads which had been stashed and add them (as appropriate) to sorted
- for (final boolean isRead1 : new boolean[]{true,false}) {
- final List<SAMRecord> supplementals = isRead1 ? nextAligned.getSupplementalFirstOfPairOrFragment() : nextAligned.getSupplementalSecondOfPair();
- final SAMRecord sourceRec = isRead1 ? rec : secondOfPair;
- final SAMRecord matePrimary = isRead1 ? r2Primary : r1Primary;
-
- for (final SAMRecord supp : supplementals) {
- final SAMRecord out = clone(sourceRec);
- transferAlignmentInfoToFragment(out, supp);
- if (matePrimary != null) SamPairUtil.setMateInformationOnSupplementalAlignment(out, matePrimary);
- ++aligned;
- addIfNotFiltered(sorted, out);
- }
- }
- }
- else {
- for (int i = 0; i < nextAligned.numHits(); ++i) {
- final SAMRecord recToWrite = clone ? clone(rec) : rec;
- transferAlignmentInfoToFragment(recToWrite, nextAligned.getFragment(i));
- addIfNotFiltered(sorted, recToWrite);
- if (recToWrite.getReadUnmappedFlag()) ++unmapped;
- else ++aligned;
- }
- // Take all of the supplemental reads which had been stashed and add them (as appropriate) to sorted
- for (final SAMRecord supplementalRec : nextAligned.getSupplementalFirstOfPairOrFragment()) {
- final SAMRecord recToWrite = clone(rec);
- transferAlignmentInfoToFragment(recToWrite, supplementalRec);
- addIfNotFiltered(sorted, recToWrite);
- ++aligned;
- }
- }
- nextAligned = nextAligned();
- } else {
- // There was no alignment for this read or read pair.
- if (nextAligned != null &&
- SAMRecordQueryNameComparator.compareReadNames(rec.getReadName(), nextAligned.getReadName()) > 0) {
- throw new IllegalStateException("Aligned record iterator (" + nextAligned.getReadName() +
- ") is behind the unmapped reads (" + rec.getReadName() + ")");
- }
- // No matching read from alignedIterator -- just output reads as is.
- if (!alignedReadsOnly) {
- sorted.add(rec);
- ++unmapped;
- if (secondOfPair != null) {
- sorted.add(secondOfPair);
- ++unmapped;
- }
- }
- }
- }
- unmappedIterator.close();
- if (alignedIterator.hasNext()) {
- throw new IllegalStateException("Reads remaining on alignment iterator: " + alignedIterator.next().getReadName() + "!");
- }
- alignedIterator.close();
-
- // Write the records to the output file in specified sorted order,
- header.setSortOrder(this.sortOrder);
- final boolean presorted = this.sortOrder == SortOrder.coordinate;
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(header, presorted, this.targetBamFile);
- writer.setProgressLogger(
- new ProgressLogger(log, (int) 1e7, "Wrote", "records from a sorting collection"));
- final ProgressLogger finalProgress = new ProgressLogger(log, 10000000, "Written in coordinate order to output", "records");
-
- for (final SAMRecord rec : sorted) {
- if (!rec.getReadUnmappedFlag()) {
- if (refSeq != null) {
- final byte[] referenceBases = refSeq.get(sequenceDictionary.getSequenceIndex(rec.getReferenceName())).getBases();
- rec.setAttribute(SAMTag.NM.name(), SequenceUtil.calculateSamNmTag(rec, referenceBases, 0, bisulfiteSequence));
-
- if (rec.getBaseQualities() != SAMRecord.NULL_QUALS) {
- rec.setAttribute(SAMTag.UQ.name(), SequenceUtil.sumQualitiesOfMismatches(rec, referenceBases, 0, bisulfiteSequence));
- }
- }
- }
- writer.addAlignment(rec);
- finalProgress.record(rec);
- }
- writer.close();
- sorted.cleanup();
-
- log.info("Wrote " + aligned + " alignment records and " + (alignedReadsOnly ? 0 : unmapped) + " unmapped reads.");
- }
-
- /**
- * Add record if it is primary or optionally secondary.
- */
- private void addIfNotFiltered(final SortingCollection<SAMRecord> sorted, final SAMRecord rec) {
- if (includeSecondaryAlignments || !rec.getNotPrimaryAlignmentFlag()) {
- sorted.add(rec);
- this.progress.record(rec);
- }
- }
-
- private SAMRecord clone(final SAMRecord rec) {
- try {
- return (SAMRecord)rec.clone();
- } catch (CloneNotSupportedException e) {
- throw new PicardException("Should never happen.");
- }
- }
- /**
- * @return Next read's alignment(s) from aligned input or null, if there are no more.
- * The alignments are run through ignoreAlignment() filter before being returned, which may result
- * in an entire read being skipped if all alignments for that read should be ignored.
- */
- private HitsForInsert nextAligned() {
- if (alignedIterator.hasNext()) return alignedIterator.next();
- return null;
- }
-
- /**
- * Copies alignment info from aligned to unaligned read, clips as appropriate, and sets PG ID.
- * @param unaligned Original SAMRecord, and object into which values are copied.
- * @param aligned Holds alignment info that will be copied into unaligned.
- */
- private void transferAlignmentInfoToFragment(final SAMRecord unaligned, final SAMRecord aligned) {
- setValuesFromAlignment(unaligned, aligned);
- updateCigarForTrimmedOrClippedBases(unaligned, aligned);
- if (SAMUtils.cigarMapsNoBasesToRef(unaligned.getCigar())) {
- SAMUtils.makeReadUnmapped(unaligned);
- } else if (SAMUtils.recordMapsEntirelyBeyondEndOfReference(aligned)) {
- log.warn("Record mapped off end of reference; making unmapped: " + aligned);
- SAMUtils.makeReadUnmapped(unaligned);
- }
- }
-
- /**
- * Copies alignment info from aligned to unaligned read, if there is an alignment, and sets mate information.
- * @param firstUnaligned Original first of pair, into which alignment and pair info will be written.
- * @param secondUnaligned Original second of pair, into which alignment and pair info will be written.
- * @param firstAligned Aligned first of pair, or null if no alignment.
- * @param secondAligned Aligned second of pair, or null if no alignment.
- */
- private void transferAlignmentInfoToPairedRead(final SAMRecord firstUnaligned, final SAMRecord secondUnaligned, final SAMRecord firstAligned, final SAMRecord secondAligned) {
- if (firstAligned != null) transferAlignmentInfoToFragment(firstUnaligned, firstAligned);
- if (secondAligned != null) transferAlignmentInfoToFragment(secondUnaligned, secondAligned);
- if (isClipOverlappingReads()) clipForOverlappingReads(firstUnaligned, secondUnaligned);
- SamPairUtil.setMateInfo(secondUnaligned, firstUnaligned, header, addMateCigar);
- if (!keepAlignerProperPairFlags) {
- SamPairUtil.setProperPairFlags(secondUnaligned, firstUnaligned, expectedOrientations);
- }
- }
-
-
-
- /**
- * Checks to see whether the ends of the reads overlap and soft clips reads
- * them if necessary.
- */
- protected void clipForOverlappingReads(final SAMRecord read1, final SAMRecord read2) {
- // If both reads are mapped, see if we need to clip the ends due to small
- // insert size
- if (!(read1.getReadUnmappedFlag() || read2.getReadUnmappedFlag())) {
-
- if (read1.getReadNegativeStrandFlag() != read2.getReadNegativeStrandFlag())
- {
- final SAMRecord pos = (read1.getReadNegativeStrandFlag()) ? read2 : read1;
- final SAMRecord neg = (read1.getReadNegativeStrandFlag()) ? read1 : read2;
-
- // Innies only -- do we need to do anything else about jumping libraries?
- if (pos.getAlignmentStart() < neg.getAlignmentEnd()) {
- final int posDiff = pos.getAlignmentEnd() - neg.getAlignmentEnd();
- final int negDiff = pos.getAlignmentStart() - neg.getAlignmentStart();
-
- if (posDiff > 0) {
- CigarUtil.softClip3PrimeEndOfRead(pos, Math.min(pos.getReadLength(),
- pos.getReadLength() - posDiff + 1));
- }
-
- if (negDiff > 0) {
- CigarUtil.softClip3PrimeEndOfRead(neg, Math.min(neg.getReadLength(),
- neg.getReadLength() - negDiff + 1));
- }
-
- }
- }
- else {
- // TODO: What about RR/FF pairs?
- }
- }
-
- }
-
- /**
- * Sets the values from the alignment record on the unaligned BAM record. This
- * preserves all data from the unaligned record (ReadGroup, NoiseRead status, etc)
- * and adds all the alignment info
- *
- * @param rec The unaligned read record
- * @param alignment The alignment record
- */
- protected void setValuesFromAlignment(final SAMRecord rec, final SAMRecord alignment) {
- for (final SAMRecord.SAMTagAndValue attr : alignment.getAttributes()) {
- // Copy over any non-reserved attributes. attributesToRemove overrides attributesToRetain.
- if ((!isReservedTag(attr.tag) || this.attributesToRetain.contains(attr.tag)) && !this.attributesToRemove.contains(attr.tag)) {
- rec.setAttribute(attr.tag, attr.value);
- }
- }
- rec.setReadUnmappedFlag(alignment.getReadUnmappedFlag());
-
- // Note that it is important to get reference names rather than indices in case the sequence dictionaries
- // in the two files are in different orders.
- rec.setReferenceName(alignment.getReferenceName());
-
- rec.setAlignmentStart(alignment.getAlignmentStart());
- rec.setReadNegativeStrandFlag(alignment.getReadNegativeStrandFlag());
- rec.setNotPrimaryAlignmentFlag(alignment.getNotPrimaryAlignmentFlag());
- rec.setSupplementaryAlignmentFlag(alignment.getSupplementaryAlignmentFlag());
- if (!alignment.getReadUnmappedFlag()) {
- // only aligned reads should have cigar and mapping quality set
- rec.setCigar(alignment.getCigar()); // cigar may change when a
- // clipCigar called below
- rec.setMappingQuality(alignment.getMappingQuality());
- }
- if (rec.getReadPairedFlag()) {
- rec.setProperPairFlag(alignment.getProperPairFlag());
- // Mate info and alignment size will get set by the ClippedPairFixer.
- }
-
- // If it's on the negative strand, reverse complement the bases
- // and reverse the order of the qualities
- if (rec.getReadNegativeStrandFlag()) {
- SAMRecordUtil.reverseComplement(rec);
- }
-
- }
-
- private static Cigar createNewCigarIfMapsOffEndOfReference(SAMFileHeader header,
- boolean isUnmapped,
- int referenceIndex,
- int alignmentEnd,
- int readLength,
- Cigar oldCigar) {
- Cigar newCigar = null;
- if (!isUnmapped) {
- final SAMSequenceRecord refseq = header.getSequence(referenceIndex);
- final int overhang = alignmentEnd - refseq.getSequenceLength();
- if (overhang > 0) {
- // 1-based index of first base in read to clip.
- final int clipFrom = readLength - overhang + 1;
- final List<CigarElement> newCigarElements = CigarUtil.softClipEndOfRead(clipFrom, oldCigar.getCigarElements());
- newCigar = new Cigar(newCigarElements);
- }
- }
- return newCigar;
-
- }
-
- /**
- * Soft-clip an alignment that hangs off the end of its reference sequence. Checks both the read and its mate,
- * if available.
- * @param rec
- */
- public static void createNewCigarsIfMapsOffEndOfReference(final SAMRecord rec) {
- // If the read maps off the end of the alignment, clip it
- if (!rec.getReadUnmappedFlag()) {
- final Cigar readCigar = createNewCigarIfMapsOffEndOfReference(rec.getHeader(),
- rec.getReadUnmappedFlag(),
- rec.getReferenceIndex(),
- rec.getAlignmentEnd(),
- rec.getReadLength(),
- rec.getCigar());
- if (null != readCigar) rec.setCigar(readCigar);
- }
-
- // If the read's mate maps off the end of the alignment, clip it
- if (SAMUtils.hasMateCigar(rec)) {
- Cigar mateCigar = SAMUtils.getMateCigar(rec);
- mateCigar = createNewCigarIfMapsOffEndOfReference(rec.getHeader(),
- rec.getMateUnmappedFlag(),
- rec.getMateReferenceIndex(),
- SAMUtils.getMateAlignmentEnd(rec), // NB: this could be computed without another call to getMateCigar
- mateCigar.getReadLength(),
- mateCigar);
- if (null != mateCigar) rec.setAttribute(SAMTag.MC.name(), mateCigar.toString());
- }
- }
-
- protected void updateCigarForTrimmedOrClippedBases(final SAMRecord rec, final SAMRecord alignment) {
- // If the read was trimmed or not all the bases were sent for alignment, clip it
- final int alignmentReadLength = alignment.getReadLength();
- final int originalReadLength = rec.getReadLength();
- final int trimmed = (!rec.getReadPairedFlag()) || rec.getFirstOfPairFlag()
- ? this.read1BasesTrimmed != null ? this.read1BasesTrimmed : 0
- : this.read2BasesTrimmed != null ? this.read2BasesTrimmed : 0;
- final int notWritten = originalReadLength - (alignmentReadLength + trimmed);
-
- // Update cigar if the mate maps off the reference
- createNewCigarsIfMapsOffEndOfReference(rec);
-
- rec.setCigar(CigarUtil.addSoftClippedBasesToEndsOfCigar(
- rec.getCigar(), rec.getReadNegativeStrandFlag(), notWritten, trimmed));
-
- // If the adapter sequence is marked and clipAdapter is true, clip it
- if (this.clipAdapters && rec.getAttribute(ReservedTagConstants.XT) != null){
- CigarUtil.softClip3PrimeEndOfRead(rec, rec.getIntegerAttribute(ReservedTagConstants.XT));
- }
- }
-
-
- protected SAMSequenceDictionary getSequenceDictionary() { return this.sequenceDictionary; }
-
- protected SAMProgramRecord getProgramRecord() { return this.programRecord; }
-
- protected void setProgramRecord(final SAMProgramRecord pg ) {
- if (this.programRecord != null) {
- throw new IllegalStateException("Cannot set program record more than once on alignment merger.");
- }
- this.programRecord = pg;
- this.header.addProgramRecord(pg);
- SAMUtils.chainSAMProgramRecord(header, pg);
- }
-
- protected boolean isReservedTag(final String tag) {
- final char firstCharOfTag = tag.charAt(0);
-
- // All tags that start with a lower-case letter are user defined and should not be overridden by aligner
- // unless explicitly specified in attributesToRetain.
- if (Character.isLowerCase(firstCharOfTag)) return true;
-
- for (final char c : RESERVED_ATTRIBUTE_STARTS) {
- if (firstCharOfTag == c) return true;
- }
- return false;
- }
-
- protected SAMFileHeader getHeader() { return this.header; }
-
- protected void resetRefSeqFileWalker() {
- this.refSeq = new ReferenceSequenceFileWalker(referenceFasta);
- }
-
- public boolean isClipOverlappingReads() {
- return clipOverlappingReads;
- }
-
- public void setClipOverlappingReads(final boolean clipOverlappingReads) {
- this.clipOverlappingReads = clipOverlappingReads;
- }
-
- public boolean isKeepAlignerProperPairFlags() {
- return keepAlignerProperPairFlags;
- }
-
- /**
- * If true, keep the aligner's idea of proper pairs rather than letting alignment merger decide.
- */
- public void setKeepAlignerProperPairFlags(final boolean keepAlignerProperPairFlags) {
- this.keepAlignerProperPairFlags = keepAlignerProperPairFlags;
- }
-
- public void setIncludeSecondaryAlignments(final boolean includeSecondaryAlignments) {
- this.includeSecondaryAlignments = includeSecondaryAlignments;
- }
-
- public void close() {
- CloserUtil.close(this.refSeq);
- }
-}
diff --git a/src/java/net/sf/picard/sam/AbstractDuplicateFindingAlgorithm.java b/src/java/net/sf/picard/sam/AbstractDuplicateFindingAlgorithm.java
deleted file mode 100644
index 75da479..0000000
--- a/src/java/net/sf/picard/sam/AbstractDuplicateFindingAlgorithm.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.util.Log;
-import net.sf.samtools.util.StringUtil;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Abstract class that holds parameters and methods common to classes that perform duplicate
- * detection and/or marking within SAM/BAM files.
- *
- * @author Tim Fennell
- */
-public abstract class AbstractDuplicateFindingAlgorithm extends CommandLineProgram {
- private static Log LOG = Log.getInstance(AbstractDuplicateFindingAlgorithm.class);
-
- private static final String DEFAULT_READ_NAME_REGEX = "[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*".intern();
-
- @Option(doc="Regular expression that can be used to parse read names in the incoming SAM file. Read names are " +
- "parsed to extract three variables: tile/region, x coordinate and y coordinate. These values are used " +
- "to estimate the rate of optical duplication in order to give a more accurate estimated library size. " +
- "The regular expression should contain three capture groups for the three variables, in order. " +
- "It must match the entire read name. " +
- "Note that if the default regex is specified, a regex match is not actually done, but instead the read name " +
- " is split on colon character and the 2nd, 3rd and 4th elements are assumed to be tile, x and y values.")
- public String READ_NAME_REGEX = DEFAULT_READ_NAME_REGEX;
-
- @Option(doc="The maximum offset between two duplicte clusters in order to consider them optical duplicates. This " +
- "should usually be set to some fairly small number (e.g. 5-10 pixels) unless using later versions of the " +
- "Illumina pipeline that multiply pixel values by 10, in which case 50-100 is more normal.")
- public int OPTICAL_DUPLICATE_PIXEL_DISTANCE = 100;
-
- private Pattern READ_NAME_PATTERN = null;
-
- private boolean warnedAboutRegexNotMatching = false;
-
- /**
- * Small interface that provides access to the physical location information about a cluster.
- * All values should be defaulted to -1 if unavailable. ReadGroup and Tile should only allow
- * non-zero positive integers, x and y coordinates may be negative.
- */
- public static interface PhysicalLocation {
- short getReadGroup();
- void setReadGroup(short rg);
- short getTile();
- void setTile(short tile);
- short getX();
- void setX(short x);
- short getY();
- void setY(short y);
- }
-
- /**
- * Method used to extract tile/x/y from the read name and add it to the PhysicalLocation so that it
- * can be used later to determine optical duplication
- *
- * @param readName the name of the read/cluster
- * @param loc the object to add tile/x/y to
- * @return true if the read name contained the information in parsable form, false otherwise
- */
- private final String[] tmpLocationFields = new String[10];
- boolean addLocationInformation(final String readName, final PhysicalLocation loc) {
- // Optimized version if using the default read name regex (== used on purpose):
- if (READ_NAME_REGEX == DEFAULT_READ_NAME_REGEX) {
- final int fields = StringUtil.split(readName, tmpLocationFields, ':');
- if (fields < 5) {
- if (!warnedAboutRegexNotMatching) {
- LOG.warn(String.format("Default READ_NAME_REGEX '%s' did not match read name '%s'. " +
- "You may need to specify a READ_NAME_REGEX in order to correctly identify optical duplicates. " +
- "Note that this message will not be emitted again even if other read names do not match the regex.",
- READ_NAME_REGEX, readName));
- warnedAboutRegexNotMatching = true;
- }
- return false;
- }
-
- loc.setTile((short) rapidParseInt(tmpLocationFields[2]));
- loc.setX((short) rapidParseInt(tmpLocationFields[3]));
- loc.setY((short) rapidParseInt(tmpLocationFields[4]));
- return true;
- }
- else if (READ_NAME_REGEX == null) {
- return false;
- }
- else {
- // Standard version that will use the regex
- if (READ_NAME_PATTERN == null) READ_NAME_PATTERN = Pattern.compile(READ_NAME_REGEX);
-
- final Matcher m = READ_NAME_PATTERN.matcher(readName);
- if (m.matches()) {
- loc.setTile((short) Integer.parseInt(m.group(1)));
- loc.setX((short) Integer.parseInt(m.group(2)));
- loc.setY((short) Integer.parseInt(m.group(3)));
- return true;
- }
- else {
- if (!warnedAboutRegexNotMatching) {
- LOG.warn(String.format("READ_NAME_REGEX '%s' did not match read name '%s'. Your regex may not be correct. " +
- "Note that this message will not be emitted again even if other read names do not match the regex.",
- READ_NAME_REGEX, readName));
- warnedAboutRegexNotMatching = true;
- }
- return false;
- }
- }
- }
-
- /**
- * Very specialized method to rapidly parse a sequence of digits from a String up until the first
- * non-digit character. Does not handle negative numbers.
- */
- private final int rapidParseInt(final String input) {
- final int len = input.length();
- int val = 0;
-
- for (int i=0; i<len; ++i) {
- final char ch = input.charAt(i);
- if (Character.isDigit(ch)) {
- val = (val*10) + (ch-48);
- }
- }
-
- return val;
- }
-
- /**
- * Finds which reads within the list of duplicates are likely to be optical duplicates of
- * one another.
- *
- * Note: this method will perform a sort() of the list; if it is imperative that the list be
- * unmodified a copy of the list should be passed to this method.
- *
- * @param list a list of reads that are determined to be duplicates of one another
- * @param maxDistance maximum distance in x and y directions for reads to be considered optical duplicates
- * @return a boolean[] of the same length as the incoming list marking which reads are optical duplicates
- */
- boolean[] findOpticalDuplicates(final List<? extends PhysicalLocation> list, final int maxDistance) {
- final int length = list.size();
- final boolean[] opticalDuplicateFlags = new boolean[length];
-
- Collections.sort(list, new Comparator<PhysicalLocation>() {
- public int compare(final PhysicalLocation lhs, final PhysicalLocation rhs) {
- int retval = lhs.getReadGroup() - rhs.getReadGroup();
- if (retval == 0) retval = lhs.getTile() - rhs.getTile();
- if (retval == 0) retval = lhs.getX() - rhs.getX();
- if (retval == 0) retval = lhs.getY() - rhs.getY();
- return retval;
- }
- });
-
- outer: for (int i=0; i<length; ++i) {
- PhysicalLocation lhs = list.get(i);
- if (lhs.getTile() < 0) continue;
-
- for (int j=i+1; j<length; ++j) {
- PhysicalLocation rhs = list.get(j);
-
- if (lhs.getReadGroup() != rhs.getReadGroup()) continue outer;
- if (lhs.getTile() != rhs.getTile()) continue outer;
- if (rhs.getX() > lhs.getX() + maxDistance) continue outer;
-
- if (Math.abs(lhs.getY() - rhs.getY()) <= maxDistance) {
- opticalDuplicateFlags[j] = true;
- }
- }
- }
- return opticalDuplicateFlags;
- }
-}
diff --git a/src/java/net/sf/picard/sam/AddCommentsToBam.java b/src/java/net/sf/picard/sam/AddCommentsToBam.java
deleted file mode 100644
index 22cc1f8..0000000
--- a/src/java/net/sf/picard/sam/AddCommentsToBam.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.BamFileIoUtils;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * A tool to add comments to a BAM file header. Effectively copies the BAM file except for the addition of the @CO records
- * in the header. This tool does not support SAM files.
- *
- * @author jgentry
- */
-public class AddCommentsToBam extends CommandLineProgram {
- @Usage public final String USAGE = "Adds one or more comments to the header of a specified BAM file. Copies the file with the " +
- "modified header to a specified output file. Note that a block copying method is used to ensure efficient transfer to the " +
- "output file. SAM files are not supported";
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input BAM file to add a comment to the header")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output BAM file to write results")
- public File OUTPUT;
-
- @Option(shortName="C", doc="Comments to add to the BAM file")
- public List<String> COMMENT;
-
- public static void main(final String[] args) { new AddCommentsToBam().instanceMainWithExit(args); }
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- if (INPUT.getAbsolutePath().endsWith(".sam")) {
- throw new PicardException("SAM files are not supported");
- }
-
- final SAMFileHeader samFileHeader = new SAMFileReader(INPUT).getFileHeader();
- for (final String comment : COMMENT) {
- if (comment.contains("\n")) {
- throw new PicardException("Comments can not contain a new line");
- }
- samFileHeader.addComment(comment);
- }
-
- BamFileIoUtils.reheaderBamFile(samFileHeader, INPUT, OUTPUT, CREATE_MD5_FILE, CREATE_INDEX);
-
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/sam/AddOrReplaceReadGroups.java b/src/java/net/sf/picard/sam/AddOrReplaceReadGroups.java
deleted file mode 100644
index 58f2b45..0000000
--- a/src/java/net/sf/picard/sam/AddOrReplaceReadGroups.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.util.Iso8601Date;
-
-import java.io.File;
-import java.util.Arrays;
-
-/**
- * Replaces read groups in a BAM file
- *
- * @author mdepristo
- */
-public class AddOrReplaceReadGroups extends CommandLineProgram {
- @Usage(programVersion="1.0")
- public String USAGE = "Replaces all read groups in the INPUT file with a new read group and assigns " +
- "all reads to this read group in the OUTPUT BAM";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input file (bam or sam).")
- public File INPUT = null;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output file (bam or sam).")
- public File OUTPUT = null;
-
- @Option(shortName=StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, optional=true,
- doc="Optional sort order to output in. If not supplied OUTPUT is in the same order as INPUT.")
- public SortOrder SORT_ORDER;
-
- @Option(shortName="ID",doc="Read Group ID")
- public String RGID = "1";
-
- @Option(shortName="LB",doc="Read Group Library")
- public String RGLB;
-
- @Option(shortName="PL",doc="Read Group platform (e.g. illumina, solid)")
- public String RGPL;
-
- @Option(shortName="PU",doc="Read Group platform unit (eg. run barcode)")
- public String RGPU;
-
- @Option(shortName="SM",doc="Read Group sample name")
- public String RGSM;
-
- @Option(shortName="CN", doc="Read Group sequencing center name", optional=true)
- public String RGCN;
-
- @Option(shortName="DS", doc="Read Group description", optional=true)
- public String RGDS;
-
- @Option(shortName="DT", doc="Read Group run date", optional=true)
- public Iso8601Date RGDT;
-
- @Option(shortName = "PI", doc = "Read Group predicted insert size", optional = true)
- public Integer RGPI;
-
- private final Log log = Log.getInstance(AddOrReplaceReadGroups.class);
-
- /** Required main method implementation. */
- public static void main(final String[] argv) {
- new AddOrReplaceReadGroups().instanceMainWithExit(argv);
- }
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final SAMFileReader in = new SAMFileReader(INPUT);
-
- // create the read group we'll be using
- final SAMReadGroupRecord rg = new SAMReadGroupRecord(RGID);
- rg.setLibrary(RGLB);
- rg.setPlatform(RGPL);
- rg.setSample(RGSM);
- rg.setPlatformUnit(RGPU);
- if (RGCN != null) rg.setSequencingCenter(RGCN);
- if (RGDS != null) rg.setDescription(RGDS);
- if (RGDT != null) rg.setRunDate(RGDT);
- if (RGPI != null) rg.setPredictedMedianInsertSize(RGPI);
-
- log.info(String.format("Created read group ID=%s PL=%s LB=%s SM=%s%n", rg.getId(), rg.getPlatform(), rg.getLibrary(), rg.getSample()));
-
- // create the new header and output file
- final SAMFileHeader inHeader = in.getFileHeader();
- final SAMFileHeader outHeader = inHeader.clone();
- outHeader.setReadGroups(Arrays.asList(rg));
- if (SORT_ORDER != null) outHeader.setSortOrder(SORT_ORDER);
-
- final SAMFileWriter outWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader,
- outHeader.getSortOrder() == inHeader.getSortOrder(),
- OUTPUT);
-
- final ProgressLogger progress = new ProgressLogger(log);
- for (final SAMRecord read : in) {
- read.setAttribute(SAMTag.RG.name(), RGID);
- outWriter.addAlignment(read);
- progress.record(read);
- }
-
- // cleanup
- in.close();
- outWriter.close();
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/sam/BamIndexStats.java b/src/java/net/sf/picard/sam/BamIndexStats.java
deleted file mode 100755
index 797e8c2..0000000
--- a/src/java/net/sf/picard/sam/BamIndexStats.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.samtools.BAMIndex;
-import net.sf.samtools.BAMIndexMetaData;
-
-import java.io.File;
-
-/**
- * Command line program to print statistics from BAM index (.bai) file
- * Statistics include count of aligned and unaligned reads for each reference sequence
- * and a count of all records with no start coordinate.
- * Similar to the 'samtools idxstats' command.
- *
- * @author Martha Borkan
- */
-public class BamIndexStats extends CommandLineProgram {
-
- private static final Log log = Log.getInstance(BuildBamIndex.class);
-
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Generates BAM index statistics. " +
- "Input BAM file must have a corresponding index file.\n";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME,
- doc="A BAM file to process.")
- public File INPUT;
-
-
- /** Stock main method for a command line program. */
- public static void main(final String[] argv) {
- System.exit(new BamIndexStats().instanceMain(argv));
- }
-
- /**
- * Main method for the program. Checks that input file is present and
- * readable, then iterates through the index printing meta data to stdout.
- */
- protected int doWork() {
-
- if (INPUT.getName().endsWith(BAMIndex.BAMIndexSuffix))
- log.warn("INPUT should be BAM file not index file");
- IoUtil.assertFileIsReadable(INPUT);
- BAMIndexMetaData.printIndexStats(INPUT);
-
- return 0;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/sam/BestEndMapqPrimaryAlignmentStrategy.java b/src/java/net/sf/picard/sam/BestEndMapqPrimaryAlignmentStrategy.java
deleted file mode 100644
index b155e41..0000000
--- a/src/java/net/sf/picard/sam/BestEndMapqPrimaryAlignmentStrategy.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMUtils;
-
-import java.util.*;
-
-
-/**
- * For an aligner that aligns each end independently, select the alignment for each end with the best MAPQ, and
- * make that the primary. The primary alignments are then correlated so that their mate info points to each
- * other, but all non-primary alignments are uncorrelated.
- */
-public class BestEndMapqPrimaryAlignmentStrategy implements PrimaryAlignmentSelectionStrategy {
- private static final MapqComparator MAPQ_COMPARATOR = new MapqComparator();
-
- // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
- // multiple alignments with equal mapping quality.
- private final Random random = new Random(1);
-
- /**
- * Primary alignment was filtered out. Need to select a new one.
- */
- public void pickPrimaryAlignment(final HitsForInsert hits) {
-
- if (hits.numHits() == 0) throw new IllegalArgumentException("No alignments to pick from");
- Collections.sort(hits.firstOfPairOrFragment, MAPQ_COMPARATOR);
- Collections.sort(hits.secondOfPair, MAPQ_COMPARATOR);
-
- randomlySelectPrimaryFromBest(hits.firstOfPairOrFragment);
- randomlySelectPrimaryFromBest(hits.secondOfPair);
- hits.setPrimaryAlignment(0);
-
- if (!hits.isPaired()) return;
-
- // For non-primary alignments, de-correlate them so that the mate fields don't point at some
- // arbitrary alignment for the other end.
-
- // No non-primary alignments for one of the ends so nothing to do.
- if (hits.firstOfPairOrFragment.size() <= 1 || hits.secondOfPair.size() <= 1) return;
- final int amountToSlide = hits.firstOfPairOrFragment.size() - 1;
- for (int i = 0; i < amountToSlide; ++i) {
- hits.secondOfPair.add(1, null);
- }
- }
-
-
- /**
- * Randomly picks one of the best alignments and puts it into the 0th slot of the list.
- * @param recs List of alignments sorted in descending order of alignment quality.
- */
- private void randomlySelectPrimaryFromBest(List<SAMRecord> recs) {
- if (recs.isEmpty()) return;
- final int bestMapq = recs.get(0).getMappingQuality();
- int i;
- for (i = 1; i < recs.size() && recs.get(i).getMappingQuality() == bestMapq; ++i) {
- }
- final int bestIndex = random.nextInt(i);
- if (bestIndex == 0) return;
- final SAMRecord tmp = recs.get(0);
- recs.set(0, recs.get(bestIndex));
- recs.set(bestIndex, tmp);
- }
-
- // Sorts in descending order, but 255 is considered > 0 but < 1, and unmapped is worst of all
- private static class MapqComparator implements Comparator<SAMRecord> {
- public int compare(final SAMRecord rec1, final SAMRecord rec2) {
- if (rec1.getReadUnmappedFlag()) {
- if (rec2.getReadUnmappedFlag()) return 0;
- else return 1;
- } else if (rec2.getReadUnmappedFlag()) {
- return -1;
- }
- return -SAMUtils.compareMapqs(rec1.getMappingQuality(), rec2.getMappingQuality());
- }
- }
-}
-
diff --git a/src/java/net/sf/picard/sam/BestMapqPrimaryAlignmentSelectionStrategy.java b/src/java/net/sf/picard/sam/BestMapqPrimaryAlignmentSelectionStrategy.java
deleted file mode 100644
index 9c8e037..0000000
--- a/src/java/net/sf/picard/sam/BestMapqPrimaryAlignmentSelectionStrategy.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import net.sf.picard.sam.HitsForInsert.NumPrimaryAlignmentState;
-import net.sf.samtools.SAMUtils;
-
-/**
- * This strategy was designed for TopHat output, but could be of general utility. It picks the alignment with best MAPQ.
- * If paired-end, it is the alignment in which the sum of the MAPQs of both ends is the best. In case of ties, one
- * is selected arbitrarily. This strategy expects pair-aware alignments, with the corresponding alignment for each
- * mate of the pair correlated by HI (hit index) tag. If the aligner has set a pair of alignments as primary, this
- * is used (assuming one of those alignments is not filtered out). Otherwise the alignment pair with best MapQ is
- * selected.
- */
-public class BestMapqPrimaryAlignmentSelectionStrategy implements PrimaryAlignmentSelectionStrategy {
- // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
- // multiple alignments with equal mapping quality.
- private final Random random = new Random(1);
-
- /**
- * Primary alignment was filtered out. Need to select a new one.
- */
- public void pickPrimaryAlignment(final HitsForInsert hits) {
-
- if (hits.numHits() == 0) throw new IllegalArgumentException("No alignments to pick from");
- hits.coordinateByHitIndex();
- // See if primary alignment is not already unambiguously determined.
- final NumPrimaryAlignmentState firstEndAlignmentState = hits.tallyPrimaryAlignments(true);
- final NumPrimaryAlignmentState secondEndAlignmentState = hits.tallyPrimaryAlignments(false);
-
- if ((firstEndAlignmentState == NumPrimaryAlignmentState.NONE && secondEndAlignmentState == NumPrimaryAlignmentState.NONE) ||
- firstEndAlignmentState == NumPrimaryAlignmentState.MORE_THAN_ONE ||
- secondEndAlignmentState == NumPrimaryAlignmentState.MORE_THAN_ONE) {
- // Need to use selected strategy for picking primary.
-
- // Find all the hits with the best MAPQ.
- final List<Integer> primaryAlignmentIndices = new ArrayList<Integer>(hits.numHits());
- int bestMapQ = -1;
- for (int i = 0; i < hits.numHits(); ++i) {
- final int firstEndMapq;
- if (hits.getFirstOfPair(i) != null) {
- firstEndMapq = hits.getFirstOfPair(i).getMappingQuality();
- } else {
- firstEndMapq = 0;
- }
- final int secondEndMapq;
- if (hits.getSecondOfPair(i) != null) {
- secondEndMapq = hits.getSecondOfPair(i).getMappingQuality();
- } else {
- secondEndMapq = 0;
- }
- int thisMapQ = SAMUtils.combineMapqs(firstEndMapq, secondEndMapq);
- if (thisMapQ > bestMapQ) {
- bestMapQ = thisMapQ;
- primaryAlignmentIndices.clear();
- }
- if (thisMapQ == bestMapQ) primaryAlignmentIndices.add(i);
- }
-
- // Of all the hits with the best MAPQ, randomly select one to be primary.
- final int primaryAlignmentIndex;
- if (primaryAlignmentIndices.size() == 1) primaryAlignmentIndex = primaryAlignmentIndices.get(0);
- else if (primaryAlignmentIndices.size() > 1) primaryAlignmentIndex =
- primaryAlignmentIndices.get(random.nextInt(primaryAlignmentIndices.size()));
- else throw new IllegalStateException("Never found a best MAPQ -- should never happen");
-
- hits.setPrimaryAlignment(primaryAlignmentIndex);
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/BuildBamIndex.java b/src/java/net/sf/picard/sam/BuildBamIndex.java
deleted file mode 100755
index 249c2bb..0000000
--- a/src/java/net/sf/picard/sam/BuildBamIndex.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.*;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.File;
-import java.net.URL;
-
-/**
- * Command line program to generate a BAM index (.bai) file from a BAM (.bam) file
- *
- * @author Martha Borkan
- */
-public class BuildBamIndex extends CommandLineProgram {
-
- private static final Log log = Log.getInstance(BuildBamIndex.class);
-
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Generates a BAM index (.bai) file.";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME,
- doc="A BAM file or URL to process. Must be sorted in coordinate order.")
- public String INPUT;
-
- URL inputUrl = null; // INPUT as URL
- File inputFile = null; // INPUT as File, if it can't be interpreted as a valid URL
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME,
- doc="The BAM index file. Defaults to x.bai if INPUT is x.bam, otherwise INPUT.bai.\n" +
- "If INPUT is a URL and OUTPUT is unspecified, defaults to a file in the current directory.", optional=true)
- public File OUTPUT;
-
- /** Stock main method for a command line program. */
- public static void main(final String[] argv) {
- System.exit(new BuildBamIndex().instanceMain(argv));
- }
-
- /**
- * Main method for the program. Checks that all input files are present and
- * readable and that the output file can be written to. Then iterates through
- * all the records generating a BAM Index, then writes the bai file.
- */
- protected int doWork() {
-
- try {
- inputUrl = new URL(INPUT);
- } catch (java.net.MalformedURLException e) {
- inputFile = new File(INPUT);
- }
-
- // set default output file - input-file.bai
- if (OUTPUT == null) {
-
- final String baseFileName;
- if (inputUrl != null) {
- String path = inputUrl.getPath();
- int lastSlash = path.lastIndexOf("/");
- baseFileName = path.substring(lastSlash + 1, path.length());
- } else {
- baseFileName = inputFile.getAbsolutePath();
- }
-
- if (baseFileName.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION)) {
-
- final int index = baseFileName.lastIndexOf(".");
- OUTPUT = new File(baseFileName.substring(0, index) + BAMIndex.BAMIndexSuffix);
-
- } else {
- OUTPUT = new File(baseFileName + BAMIndex.BAMIndexSuffix);
- }
- }
-
- IoUtil.assertFileIsWritable(OUTPUT);
- final SAMFileReader bam;
-
- if (inputUrl != null) {
- // remote input
- bam = new SAMFileReader(inputUrl, null, false);
- } else {
- // input from a normal file
- IoUtil.assertFileIsReadable(inputFile);
- bam = new SAMFileReader(inputFile);
- }
-
- if (!bam.isBinary()) {
- throw new SAMException("Input file must be bam file, not sam file.");
- }
-
- if (!bam.getFileHeader().getSortOrder().equals(SAMFileHeader.SortOrder.coordinate)) {
- throw new SAMException("Input bam file must be sorted by coordinates");
- }
-
- createIndex(bam, OUTPUT);
-
- log.info("Successfully wrote bam index file " + OUTPUT);
- CloserUtil.close(bam);
- return 0;
- }
-
- /**
- * Generates a BAM index file from an input BAM file
- *
- * @param reader SAMFileReader for input BAM file
- * @param output File for output index file
- */
- public static void createIndex(SAMFileReader reader, File output) {
-
- BAMIndexer indexer = new BAMIndexer(output, reader.getFileHeader());
-
- reader.enableFileSource(true);
- int totalRecords = 0;
-
- // create and write the content
- for (SAMRecord rec : reader) {
- if (++totalRecords % 1000000 == 0) {
- log.info(totalRecords + " reads processed ...");
- }
- indexer.processAlignment(rec);
- }
- indexer.finish();
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/sam/CleanSam.java b/src/java/net/sf/picard/sam/CleanSam.java
deleted file mode 100644
index f9871e4..0000000
--- a/src/java/net/sf/picard/sam/CleanSam.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.CigarUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class CleanSam extends CommandLineProgram {
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Read SAM and perform various fix-ups. " +
- "Currently, the only fix-ups are 1: to soft-clip an alignment that hangs off the end of its reference sequence; " +
- "and 2: to set MAPQ to 0 if a read is unmapped.";
-
- @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input SAM to be cleaned.")
- public File INPUT;
-
- @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Where to write cleaned SAM.")
- public File OUTPUT;
-
- public static void main(final String[] argv) {
- new CleanSam().instanceMainWithExit(argv);
- }
-
- /**
- * Do the work after command line has been parsed.
- * RuntimeException may be thrown by this method, and are reported appropriately.
- *
- * @return program exit status.
- */
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
- final SAMFileReader.ValidationStringency originalStringency = SAMFileReader.getDefaultValidationStringency();
- if (VALIDATION_STRINGENCY == SAMFileReader.ValidationStringency.STRICT) {
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.LENIENT);
- }
- try {
- final SAMFileReader reader = new SAMFileReader(INPUT);
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(reader.getFileHeader(), true, OUTPUT);
- final CloseableIterator<SAMRecord> it = reader.iterator();
- final ProgressLogger progress = new ProgressLogger(Log.getInstance(CleanSam.class));
-
- // If the read (or its mate) maps off the end of the alignment, clip it
- while(it.hasNext()) {
- final SAMRecord rec = it.next();
-
- // If the read (or its mate) maps off the end of the alignment, clip it
- AbstractAlignmentMerger.createNewCigarsIfMapsOffEndOfReference(rec);
-
- // check the read's mapping quality
- if (rec.getReadUnmappedFlag() && 0 != rec.getMappingQuality()) {
- rec.setMappingQuality(0);
- }
-
- writer.addAlignment(rec);
- progress.record(rec);
- }
-
- writer.close();
- it.close();
- }
- finally {
- SAMFileReader.setDefaultValidationStringency(originalStringency);
- }
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/sam/ComparableSamRecordIterator.java b/src/java/net/sf/picard/sam/ComparableSamRecordIterator.java
deleted file mode 100644
index c1fee74..0000000
--- a/src/java/net/sf/picard/sam/ComparableSamRecordIterator.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.util.PeekableIterator;
-
-import java.util.Comparator;
-
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.util.CloseableIterator;
-
-/**
- * Iterator for SAM records that implements comparable to enable sorting of iterators.
- * The comparison is performed by comparing the next record in the iterator to the next
- * record in another iterator and returning the ordering between those SAM records.
- */
-class ComparableSamRecordIterator extends PeekableIterator<SAMRecord> implements Comparable<ComparableSamRecordIterator> {
- private final Comparator<SAMRecord> comparator;
- private final SAMFileReader reader;
-
- /**
- * Constructs a wrapping iterator around the given iterator that will be able
- * to compare itself to other ComparableSamRecordIterators using the given comparator.
- *
- * @param iterator the wrapped iterator.
- * @param comparator the Comparator to use to provide ordering fo SAMRecords
- */
- public ComparableSamRecordIterator(final SAMFileReader sam, final CloseableIterator<SAMRecord> iterator, final Comparator<SAMRecord> comparator) {
- super(iterator);
- this.reader = sam;
- this.comparator = comparator;
- }
-
- /** Returns the reader from which this iterator was constructed. */
- public SAMFileReader getReader() {
- return reader;
- }
-
- /**
- * Compares this iterator to another comparable iterator based on the next record
- * available in each iterator. If the two comparable iterators have different
- * comparator types internally an exception is thrown.
- *
- * @param that another iterator to compare to
- * @return a negative, 0 or positive number as described in the Comparator interface
- */
- public int compareTo(final ComparableSamRecordIterator that) {
- if (this.comparator.getClass() != that.comparator.getClass()) {
- throw new IllegalStateException("Attempt to compare two ComparableSAMRecordIterators that " +
- "have different orderings internally");
- }
-
- final SAMRecord record = this.peek();
- final SAMRecord record2 = that.peek();
- return comparator.compare(record, record2);
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- return compareTo((ComparableSamRecordIterator)o) == 0;
- }
-
- @Override
- public int hashCode() {
- throw new UnsupportedOperationException("ComparableSamRecordIterator should not be hashed because it can change value");
- }
-}
diff --git a/src/java/net/sf/picard/sam/CompareSAMs.java b/src/java/net/sf/picard/sam/CompareSAMs.java
deleted file mode 100644
index e0e27f4..0000000
--- a/src/java/net/sf/picard/sam/CompareSAMs.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.PositionalArguments;
-import net.sf.picard.cmdline.Usage;
-import net.sf.samtools.*;
-
-/**
- * Rudimentary SAM comparer. Compares headers, and if headers are compatible enough, compares SAMRecords,
- * looking only at basic alignment info. Summarizes the number of alignments that match, mismatch, are missing, etc.
-
- * @author alecw at broadinstitute.org
- */
-public class CompareSAMs extends CommandLineProgram {
-
- @Usage
- public final String USAGE = "USAGE: CompareSAMS <SAMFile1> <SAMFile2>\n" +
- "Compares the headers of the two input SAM or BAM files, and, if possible, the SAMRecords. " +
- "For SAMRecords, compares only the readUnmapped flag, reference name, start position and strand. " +
- "Reports the number of SAMRecords that match, differ in alignment, are mapped in only one input, " +
- "or are missing in one of the files";
-
- @PositionalArguments(minElements = 2, maxElements = 2)
- public List<File> samFiles;
-
- private final SAMFileReader[] samReaders = new SAMFileReader[2];
- private boolean sequenceDictionariesDiffer;
- private int mappingsMatch = 0;
- private int unmappedBoth = 0;
- private int unmappedLeft = 0;
- private int unmappedRight = 0;
- private int mappingsDiffer = 0;
- private int missingLeft = 0;
- private int missingRight = 0;
- private boolean areEqual;
-
- public static void main(String[] argv) {
- new CompareSAMs().instanceMainWithExit(argv);
- }
-
- /**
- * Do the work after command line has been parsed. RuntimeException may be
- * thrown by this method, and are reported appropriately.
- *
- * @return program exit status.
- */
- @Override
- protected int doWork() {
- for (int i = 0; i < samFiles.size(); ++i) {
- samReaders[i] = new SAMFileReader(samFiles.get(i));
- }
- areEqual = compareHeaders();
- areEqual = compareAlignments() && areEqual;
- printReport();
- if (!areEqual) {
- System.out.println("SAM files differ.");
- } else {
- System.out.println("SAM files match.");
- }
- return 0;
- }
-
- private void printReport() {
- System.out.println("Match\t" + mappingsMatch);
- System.out.println("Differ\t" + mappingsDiffer);
- System.out.println("Unmapped_both\t" + unmappedBoth);
- System.out.println("Unmapped_left\t" + unmappedLeft);
- System.out.println("Unmapped_right\t" + unmappedRight);
- System.out.println("Missing_left\t" + missingLeft);
- System.out.println("Missing_right\t" + missingRight);
- }
-
- private boolean compareAlignments() {
- if (!compareValues(samReaders[0].getFileHeader().getSortOrder(), samReaders[1].getFileHeader().getSortOrder(),
- "Sort Order")) {
- System.out.println("Cannot compare alignments if sort orders differ.");
- return false;
- }
- switch (samReaders[0].getFileHeader().getSortOrder()) {
- case coordinate:
- if (sequenceDictionariesDiffer) {
- System.out.println("Cannot compare coordinate-sorted SAM files because sequence dictionaries differ.");
- return false;
- }
- return compareCoordinateSortedAlignments();
- case queryname:
- return compareQueryNameSortedAlignments();
- case unsorted:
- return compareUnsortedAlignments();
- default:
- // unreachable
- assert(false);
- return false;
- }
- }
-
-
- private boolean compareCoordinateSortedAlignments() {
- final SecondaryOrSupplementarySkippingIterator itLeft =
- new SecondaryOrSupplementarySkippingIterator(samReaders[0].iterator());
- final SecondaryOrSupplementarySkippingIterator itRight =
- new SecondaryOrSupplementarySkippingIterator(samReaders[1].iterator());
-
- // Save any reads which haven't been matched during in-order scan.
- final Map<String, SAMRecord> leftUnmatched = new HashMap<String, SAMRecord>();
- final Map<String, SAMRecord> rightUnmatched = new HashMap<String, SAMRecord>();
-
- boolean ret = true;
-
- while (itLeft.hasCurrent()) {
- if (!itRight.hasCurrent()) {
- // Exhausted right side. See if any of the remaining left reads match
- // any of the saved right reads.
- for( ; itLeft.hasCurrent(); itLeft.advance()) {
- final SAMRecord left = itLeft.getCurrent();
- final SAMRecord right = rightUnmatched.remove(left.getReadName());
- if (right == null) {
- ++missingRight;
- } else {
- tallyAlignmentRecords(left, right);
- }
- }
- break;
- }
- // Don't assume stability of order beyond the coordinate. Therefore grab all the
- // reads from the left that has the same coordinate.
- final SAMRecord left = itLeft.getCurrent();
- final Map<String, SAMRecord> leftCurrentCoordinate = new HashMap<String, SAMRecord>();
- leftCurrentCoordinate.put(left.getReadName(), left);
- while (itLeft.advance()) {
- final SAMRecord nextLeft = itLeft.getCurrent();
- if (compareAlignmentCoordinates(left, nextLeft) == 0) {
- leftCurrentCoordinate.put(nextLeft.getReadName(), nextLeft);
- } else {
- break;
- }
- }
- // Advance the right iterator until it is >= the left reads that have just been grabbed
- while (itRight.hasCurrent() && compareAlignmentCoordinates(left, itRight.getCurrent()) > 0) {
- final SAMRecord right = itRight.getCurrent();
- rightUnmatched.put(right.getReadName(), right);
- itRight.advance();
- }
- // For each right read that has the same coordinate as the current left reads,
- // see if there is a matching left read. If so, process and discard. If not,
- // save the right read for later.
- for (;itRight.hasCurrent() && compareAlignmentCoordinates(left, itRight.getCurrent()) == 0; itRight.advance()) {
- final SAMRecord right = itRight.getCurrent();
- final SAMRecord matchingLeft = leftCurrentCoordinate.remove(right.getReadName());
- if (matchingLeft != null) {
- ret = tallyAlignmentRecords(matchingLeft, right) && ret;
- } else {
- rightUnmatched.put(right.getReadName(), right);
- }
- }
-
- // Anything left in leftCurrentCoordinate has not been matched
- for (final SAMRecord samRecord : leftCurrentCoordinate.values()) {
- leftUnmatched.put(samRecord.getReadName(), samRecord);
- }
- }
- // The left iterator has been exhausted. See if any of the remaining right reads
- // match any of the saved left reads.
- for( ; itRight.hasCurrent(); itRight.advance()) {
- final SAMRecord right = itRight.getCurrent();
- final SAMRecord left = leftUnmatched.remove(right.getReadName());
- if (left != null) {
- tallyAlignmentRecords(left, right);
- } else {
- ++missingLeft;
- }
- }
-
- // Look up reads that were unmatched from left, and see if they are in rightUnmatched.
- // If found, remove from rightUnmatched and tally.
- for (final Map.Entry<String, SAMRecord> leftEntry : leftUnmatched.entrySet()) {
- final String readName = leftEntry.getKey();
- final SAMRecord left = leftEntry.getValue();
- final SAMRecord right = rightUnmatched.remove(readName);
- if (right == null) {
- ++missingRight;
- continue;
- }
- tallyAlignmentRecords(left, right);
- }
-
- // Any elements remaining in rightUnmatched are guaranteed not to be in leftUnmatched.
- missingLeft += rightUnmatched.size();
-
- if (ret) {
- if (missingLeft > 0 || missingRight > 0 || mappingsDiffer > 0 || unmappedLeft > 0 || unmappedRight > 0) {
- ret = false;
- }
- }
- return ret;
- }
-
- private int compareAlignmentCoordinates(final SAMRecord left, final SAMRecord right) {
- final String leftReferenceName = left.getReferenceName();
- final String rightReferenceName = right.getReferenceName();
- if (leftReferenceName == null && rightReferenceName == null) {
- return 0;
- } else if (leftReferenceName == null) {
- return 1;
- } else if (rightReferenceName == null) {
- return -1;
- }
- final int leftReferenceIndex = samReaders[0].getFileHeader().getSequenceIndex(leftReferenceName);
- final int rightReferenceIndex = samReaders[0].getFileHeader().getSequenceIndex(rightReferenceName);
- assert(leftReferenceIndex >= 0);
- assert(rightReferenceIndex >= 0);
- if (leftReferenceIndex != rightReferenceIndex) {
- return leftReferenceIndex - rightReferenceIndex;
- }
- return left.getAlignmentStart() - right.getAlignmentStart();
- }
-
- private boolean compareQueryNameSortedAlignments() {
- final SecondaryOrSupplementarySkippingIterator it1 = new SecondaryOrSupplementarySkippingIterator(samReaders[0].iterator());
- final SecondaryOrSupplementarySkippingIterator it2 = new SecondaryOrSupplementarySkippingIterator(samReaders[1].iterator());
-
- boolean ret = true;
- while (it1.hasCurrent()) {
- if (!it2.hasCurrent()) {
- missingRight += countRemaining(it1);
- return false;
- }
- final int cmp = it1.getCurrent().getReadName().compareTo(it2.getCurrent().getReadName());
- if (cmp < 0) {
- ++missingRight;
- it1.advance();
- ret = false;
- } else if (cmp > 0) {
- ++missingLeft;
- it2.advance();
- ret = false;
- } else {
- if (!tallyAlignmentRecords(it1.getCurrent(), it2.getCurrent())) {
- ret = false;
- }
- it1.advance();
- it2.advance();
- }
- }
- if (it2.hasCurrent()) {
- missingLeft += countRemaining(it2);
- return false;
- }
- return ret;
- }
-
- private boolean compareUnsortedAlignments() {
- final SecondaryOrSupplementarySkippingIterator it1 = new SecondaryOrSupplementarySkippingIterator(samReaders[0].iterator());
- final SecondaryOrSupplementarySkippingIterator it2 = new SecondaryOrSupplementarySkippingIterator(samReaders[1].iterator());
- boolean ret = true;
- for (; it1.hasCurrent(); it1.advance(), it2.advance()) {
- if (!it2.hasCurrent()) {
- missingRight += countRemaining(it1);
- return false;
- }
- final SAMRecord s1 = it1.getCurrent();
- final SAMRecord s2 = it2.getCurrent();
- if (!compareValues(s1.getReadName(), s2.getReadName(), "Read names")) {
- System.out.println("Read names cease agreeing in unsorted SAM files . Comparison aborting.");
- }
- ret = tallyAlignmentRecords(s1, s2) && ret;
- }
-
- if (it2.hasCurrent()) {
- missingLeft += countRemaining(it2);
- return false;
- }
- return ret;
- }
-
- private int countRemaining(final SecondaryOrSupplementarySkippingIterator it) {
- int i;
- for (i = 0; it.hasCurrent(); ++i) {
- it.advance();
- }
- return i;
- }
-
- private boolean tallyAlignmentRecords(final SAMRecord s1, final SAMRecord s2) {
- assert (s1.getReadName().equals(s2.getReadName()));
- if (s1.getReadUnmappedFlag() && s2.getReadUnmappedFlag()) {
- ++unmappedBoth;
- return true;
- }
- if (s1.getReadUnmappedFlag()) {
- ++unmappedLeft;
- return false;
- }
- if (s2.getReadUnmappedFlag()) {
- ++unmappedRight;
- return false;
- }
- final boolean ret = (s1.getReferenceName().equals(s2.getReferenceName()) &&
- s1.getAlignmentStart() == s2.getAlignmentStart() &&
- s1.getReadNegativeStrandFlag() == s1.getReadNegativeStrandFlag());
- if (!ret) {
- ++mappingsDiffer;
- } else {
- ++mappingsMatch;
- }
- return ret;
- }
-
-
- private boolean compareHeaders() {
- final SAMFileHeader h1 = samReaders[0].getFileHeader();
- final SAMFileHeader h2 = samReaders[1].getFileHeader();
- boolean ret = compareValues(h1.getVersion(), h2.getVersion(), "File format version");
- ret = compareValues(h1.getCreator(), h2.getCreator(), "File creator") && ret;
- ret = compareValues(h1.getAttribute("SO"), h2.getAttribute("SO"), "Sort order") && ret;
- if (!compareSequenceDictionaries(h1, h2)) {
- ret = false;
- sequenceDictionariesDiffer = true;
- }
- ret = compareReadGroups(h1, h2) && ret;
- ret = compareProgramRecords(h1, h2) && ret;
- return ret;
- }
-
- private boolean compareProgramRecords(final SAMFileHeader h1, final SAMFileHeader h2) {
- final List<SAMProgramRecord> l1 = h1.getProgramRecords();
- final List<SAMProgramRecord> l2 = h2.getProgramRecords();
- if (!compareValues(l1.size(), l2.size(), "Number of program records")) {
- return false;
- }
- boolean ret = true;
- for (int i = 0; i < l1.size(); ++i) {
- ret = compareProgramRecord(l1.get(i), l2.get(i)) && ret;
- }
- return ret;
- }
-
- private boolean compareProgramRecord(final SAMProgramRecord programRecord1, final SAMProgramRecord programRecord2) {
- if (programRecord1 == null && programRecord2 == null) {
- return true;
- }
- if (programRecord1 == null) {
- reportDifference("null", programRecord2.getProgramGroupId(), "Program Record");
- return false;
- }
- if (programRecord2 == null) {
- reportDifference(programRecord1.getProgramGroupId(), "null", "Program Record");
- return false;
- }
- boolean ret = compareValues(programRecord1.getProgramGroupId(), programRecord2.getProgramGroupId(),
- "Program Name");
- final String[] attributes = {"VN", "CL"};
- for (final String attribute: attributes) {
- ret = compareValues(programRecord1.getAttribute(attribute), programRecord2.getAttribute(attribute),
- attribute + " Program Record attribute") && ret;
- }
- return ret;
- }
-
- private boolean compareReadGroups(final SAMFileHeader h1, final SAMFileHeader h2) {
- final List<SAMReadGroupRecord> l1 = h1.getReadGroups();
- final List<SAMReadGroupRecord> l2 = h2.getReadGroups();
- if (!compareValues(l1.size(), l2.size(), "Number of read groups")) {
- return false;
- }
- boolean ret = true;
- for (int i = 0; i < l1.size(); ++i) {
- ret = compareReadGroup(l1.get(i), l2.get(i)) && ret;
- }
- return ret;
- }
-
- private boolean compareReadGroup(final SAMReadGroupRecord samReadGroupRecord1, final SAMReadGroupRecord samReadGroupRecord2) {
- boolean ret = compareValues(samReadGroupRecord1.getReadGroupId(), samReadGroupRecord2.getReadGroupId(),
- "Read Group ID");
- ret = compareValues(samReadGroupRecord1.getSample(), samReadGroupRecord2.getSample(),
- "Sample for read group " + samReadGroupRecord1.getReadGroupId()) && ret;
- ret = compareValues(samReadGroupRecord1.getLibrary(), samReadGroupRecord2.getLibrary(),
- "Library for read group " + samReadGroupRecord1.getReadGroupId()) && ret;
- final String[] attributes = {"DS", "PU", "PI", "CN", "DT", "PL"};
- for (final String attribute : attributes) {
- ret = compareValues(samReadGroupRecord1.getAttribute(attribute), samReadGroupRecord2.getAttribute(attribute),
- attribute + " for read group " + samReadGroupRecord1.getReadGroupId()) && ret;
- }
- return ret;
- }
-
- private boolean compareSequenceDictionaries(final SAMFileHeader h1, final SAMFileHeader h2) {
- final List<SAMSequenceRecord> s1 = h1.getSequenceDictionary().getSequences();
- final List<SAMSequenceRecord> s2 = h2.getSequenceDictionary().getSequences();
- if (s1.size() != s2.size()) {
- reportDifference(s1.size(), s2.size(), "Length of sequence dictionaries");
- return false;
- }
- boolean ret = true;
- for (int i = 0; i < s1.size(); ++i) {
- ret = compareSequenceRecord(s1.get(i), s2.get(i), i+1) && ret;
- }
- return ret;
- }
-
- private boolean compareSequenceRecord(final SAMSequenceRecord sequenceRecord1, final SAMSequenceRecord sequenceRecord2, final int which) {
- if (!sequenceRecord1.getSequenceName().equals(sequenceRecord2.getSequenceName())) {
- reportDifference(sequenceRecord1.getSequenceName(), sequenceRecord2.getSequenceName(),
- "Name of sequence record " + which);
- return false;
- }
- boolean ret = compareValues(sequenceRecord1.getSequenceLength(), sequenceRecord2.getSequenceLength(), "Length of sequence " +
- sequenceRecord1.getSequenceName());
- ret = compareValues(sequenceRecord1.getSpecies(), sequenceRecord2.getSpecies(), "Species of sequence " +
- sequenceRecord1.getSequenceName()) && ret;
- ret = compareValues(sequenceRecord1.getAssembly(), sequenceRecord2.getAssembly(), "Assembly of sequence " +
- sequenceRecord1.getSequenceName()) && ret;
- ret = compareValues(sequenceRecord1.getAttribute("M5"), sequenceRecord2.getAttribute("M5"), "MD5 of sequence " +
- sequenceRecord1.getSequenceName()) && ret;
- ret = compareValues(sequenceRecord1.getAttribute("UR"), sequenceRecord2.getAttribute("UR"), "URI of sequence " +
- sequenceRecord1.getSequenceName()) && ret;
- return ret;
- }
-
- private <T> boolean compareValues(final T v1, final T v2, final String label) {
- if (v1 == null) {
- if (v2 == null) {
- return true;
- }
- reportDifference(v1, v2, label);
- return false;
- }
- if (v2 == null) {
- reportDifference(v1, v2, label);
- return false;
- }
- if (!v1.equals(v2)) {
- reportDifference(v1, v2, label);
- return false;
- }
- return true;
- }
-
- private void reportDifference(final String s1, final String s2, final String label) {
- System.out.println(label + " differs.");
- System.out.println(samFiles.get(0) + ": " + s1);
- System.out.println(samFiles.get(1) + ": " + s2);
- }
- private void reportDifference(Object o1, Object o2, final String label) {
- if (o1 == null) {
- o1 = "null";
- }
- if (o2 == null) {
- o2 = "null";
- }
- reportDifference(o1.toString(), o2.toString(), label);
- }
-
- public int getMappingsMatch() {
- return mappingsMatch;
- }
-
- public int getUnmappedBoth() {
- return unmappedBoth;
- }
-
- public int getUnmappedLeft() {
- return unmappedLeft;
- }
-
- public int getUnmappedRight() {
- return unmappedRight;
- }
-
- public int getMappingsDiffer() {
- return mappingsDiffer;
- }
-
- public int getMissingLeft() {
- return missingLeft;
- }
-
- public int getMissingRight() {
- return missingRight;
- }
-
- public boolean areEqual() {
- return areEqual;
- }
-
-}
diff --git a/src/java/net/sf/picard/sam/CoordinateSortedPairInfoMap.java b/src/java/net/sf/picard/sam/CoordinateSortedPairInfoMap.java
deleted file mode 100644
index d4e0f2f..0000000
--- a/src/java/net/sf/picard/sam/CoordinateSortedPairInfoMap.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.FileAppendStreamLRUCache;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Holds info about a mate pair for use when processing a coordinate sorted file. When one read of a pair is encountered,
- * the caller should add a record to this map. When the other read of a pair is encountered, the record should be removed.
- * This class assumes that reads will be processed in order of reference sequence index. When the map is queried for
- * a record for a given reference sequence index, all the records for that sequence are loaded from temp file into RAM, so there
- * must be sufficient RAM to hold all the records for one reference sequence. If the records are not processed in
- * reference sequence order, loading and unloading of records will cause performance to be terrible.
- * @param <KEY> KEY + reference sequence index are used to identify the record being stored or retrieved.
- * @param <REC> The type of record being retrieved.
- */
-public class CoordinateSortedPairInfoMap<KEY, REC> implements Iterable<Map.Entry<KEY, REC>> {
- // -1 is a valid sequence index in this case
- private final int INVALID_SEQUENCE_INDEX = -2;
- /**
- * directory where files will go
- */
- private final File workDir = IoUtil.createTempDir("CSPI.", null);
- private int sequenceIndexOfMapInRam = INVALID_SEQUENCE_INDEX;
- private Map<KEY, REC> mapInRam = null;
- private final FileAppendStreamLRUCache outputStreams;
- private final Codec<KEY, REC> elementCodec;
- // Key is reference index (which is in the range [-1 .. max sequence index].
- // Value is the number of records on disk for this index.
- private final Map<Integer, Integer> sizeOfMapOnDisk = new HashMap<Integer, Integer>();
-
- // No other methods may be called when iteration is in progress, because iteration depends on and changes
- // internal state.
- private boolean iterationInProgress = false;
-
- CoordinateSortedPairInfoMap(int maxOpenFiles, Codec<KEY, REC> elementCodec) {
- this.elementCodec = elementCodec;
- workDir.deleteOnExit();
- outputStreams = new FileAppendStreamLRUCache(maxOpenFiles);
- }
-
- /**
- *
- * @param sequenceIndex
- * @param key
- * @return The record corresponding to the given sequenceIndex and key, or null if it is not present.
- */
- public REC remove(final int sequenceIndex, final KEY key) {
- if (iterationInProgress) throw new IllegalStateException("Cannot be called when iteration is in progress");
- ensureSequenceLoaded(sequenceIndex);
- return mapInRam.remove(key);
- }
-
- private void ensureSequenceLoaded(final int sequenceIndex) {
- try {
- if (sequenceIndexOfMapInRam == sequenceIndex) {
- return;
- }
-
- // Spill map in RAM to disk
- if (mapInRam != null) {
- File spillFile = makeFileForSequence(sequenceIndexOfMapInRam);
- if (spillFile.exists()) throw new IllegalStateException(spillFile + " should not exist.");
- if (!mapInRam.isEmpty()) {
- // Do not create file or entry in sizeOfMapOnDisk if there is nothing to write.
- final OutputStream os = getOutputStreamForSequence(sequenceIndexOfMapInRam);
- elementCodec.setOutputStream(os);
- for (final Map.Entry<KEY, REC> entry : mapInRam.entrySet()) {
- elementCodec.encode(entry.getKey(), entry.getValue());
- }
- sizeOfMapOnDisk.put(sequenceIndexOfMapInRam, mapInRam.size());
- mapInRam.clear();
- }
- } else {
- mapInRam = new HashMap<KEY, REC>();
- }
-
- sequenceIndexOfMapInRam = sequenceIndex;
-
- // Load map from disk if it existed
- File mapOnDisk = makeFileForSequence(sequenceIndex);
- if (outputStreams.containsKey(mapOnDisk)) {
- outputStreams.remove(mapOnDisk).close();
- }
- final Integer numRecords = sizeOfMapOnDisk.remove(sequenceIndex);
- if (mapOnDisk.exists()) {
- if (numRecords == null)
- throw new IllegalStateException("null numRecords for " + mapOnDisk);
- FileInputStream is = null;
- try {
- is = new FileInputStream(mapOnDisk);
- elementCodec.setInputStream(is);
- for (int i = 0; i < numRecords; ++i) {
- final Map.Entry<KEY, REC> keyAndRecord = elementCodec.decode();
- if (mapInRam.containsKey(keyAndRecord.getKey()))
- throw new PicardException("Value was put into PairInfoMap more than once. " +
- sequenceIndex + ": " + keyAndRecord.getKey());
- mapInRam.put(keyAndRecord.getKey(), keyAndRecord.getValue());
- }
- } finally {
- CloserUtil.close(is);
- }
- net.sf.samtools.util.IOUtil.deleteFiles(mapOnDisk);
- } else if (numRecords != null && numRecords > 0)
- throw new IllegalStateException("Non-zero numRecords but " + mapOnDisk + " does not exist");
- } catch (IOException e) {
- throw new PicardException("Error loading new map from disk.", e);
- }
- }
-
- /**
- * Store the record with the given sequence index and key. It is assumed that value did not previously exist
- * in the map, and an exception is thrown (possibly at a later time) if that is not the case.
- * @param sequenceIndex
- * @param key
- * @param record
- */
- public void put(final int sequenceIndex, final KEY key, final REC record) {
- if (iterationInProgress) throw new IllegalStateException("Cannot be called when iteration is in progress");
- if (sequenceIndex == sequenceIndexOfMapInRam) {
- // Store in RAM map
- if (mapInRam.containsKey(key))
- throw new IllegalArgumentException("Putting value into PairInfoMap that already existed. " +
- sequenceIndex + ": " + key);
- mapInRam.put(key, record);
- } else {
- // Append to file
- final OutputStream os = getOutputStreamForSequence(sequenceIndex);
- elementCodec.setOutputStream(os);
- elementCodec.encode(key, record);
- Integer prevCount = sizeOfMapOnDisk.get(sequenceIndex);
- if (prevCount == null) prevCount = 0;
- sizeOfMapOnDisk.put(sequenceIndex, prevCount + 1);
- }
- }
-
- private File makeFileForSequence(final int index) {
- final File file = new File(workDir, index + ".tmp");
- file.deleteOnExit();
- return file;
- }
-
- private OutputStream getOutputStreamForSequence(final int mateSequenceIndex) {
- return outputStreams.get(makeFileForSequence(mateSequenceIndex));
- }
-
- public int size() {
- int total = sizeInRam();
- for (final Integer mapSize : sizeOfMapOnDisk.values()) {
- if (mapSize != null) {
- total += mapSize;
- }
- }
- return total;
- }
-
- /**
- * @return number of elements stored in RAM. Always <= size()
- */
- public int sizeInRam() {
- return mapInRam != null? mapInRam.size(): 0;
- }
-
- /**
- * Creates an iterator over all elements in map, in arbitrary order. Elements may not be added
- * or removed from map when iteration is in progress, nor may a second iteration be started.
- * Iterator must be closed in order to allow normal access to the map.
- */
- public CloseableIterator<Map.Entry<KEY, REC>> iterator() {
- if (iterationInProgress) throw new IllegalStateException("Cannot be called when iteration is in progress");
- iterationInProgress = true;
- return new MapIterator();
- }
-
- private class MapIterator implements CloseableIterator<Map.Entry<KEY, REC>> {
- private boolean closed = false;
- private Set<Integer> referenceIndices = new HashSet<Integer>(sizeOfMapOnDisk.keySet());
- private final Iterator<Integer> referenceIndexIterator;
- private Iterator<Map.Entry<KEY, REC>> currentReferenceIterator = null;
-
- private MapIterator() {
- if (sequenceIndexOfMapInRam != INVALID_SEQUENCE_INDEX)
- referenceIndices.add(sequenceIndexOfMapInRam);
- referenceIndexIterator = referenceIndices.iterator();
- advanceToNextNonEmptyReferenceIndex();
- }
-
- private void advanceToNextNonEmptyReferenceIndex() {
- while (referenceIndexIterator.hasNext()) {
- int nextReferenceIndex = referenceIndexIterator.next();
- ensureSequenceLoaded(nextReferenceIndex);
- if (!mapInRam.isEmpty()) {
- createIteratorForMapInRam();
- return;
- }
- }
- // no more.
- currentReferenceIterator = null;
- }
-
- private void createIteratorForMapInRam() {
- currentReferenceIterator = mapInRam.entrySet().iterator();
- }
-
- public void close() {
- closed = true;
- iterationInProgress = false;
- }
-
- public boolean hasNext() {
- if (closed) throw new IllegalStateException("Iterator has been closed");
- if (currentReferenceIterator != null && !currentReferenceIterator.hasNext())
- throw new IllegalStateException("Should not happen");
- return currentReferenceIterator != null;
- }
-
- public Map.Entry<KEY, REC> next() {
- if (closed) throw new IllegalStateException("Iterator has been closed");
- if (!hasNext()) throw new NoSuchElementException();
- final Map.Entry<KEY, REC> ret = currentReferenceIterator.next();
- if (!currentReferenceIterator.hasNext()) advanceToNextNonEmptyReferenceIndex();
- return ret;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-
- /**
- * Client must implement this class, which defines the way in which records are written to and
- * read from file.
- */
- public interface Codec<KEY, REC> {
- /**
- * Where to write encoded output
- * @param os
- */
- void setOutputStream(OutputStream os);
-
- /**
- * Where to read encoded input from
- * @param is
- */
- void setInputStream(InputStream is);
-
- /**
- * Write object to output stream. If the key is part of the record, then there is no need to write
- * it separately.
- */
- void encode(KEY key, REC record);
-
- /**
- * Read the next key and record from the input stream and convert into a java object.
- * @return null if no more records. Should throw exception if EOF is encountered in the middle of
- * a record.
- */
- Map.Entry<KEY, REC> decode();
-
- }
-}
diff --git a/src/java/net/sf/picard/sam/CreateSequenceDictionary.java b/src/java/net/sf/picard/sam/CreateSequenceDictionary.java
deleted file mode 100644
index 5ac75e8..0000000
--- a/src/java/net/sf/picard/sam/CreateSequenceDictionary.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.reference.ReferenceSequenceFileFactory;
-import net.sf.samtools.*;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Create a SAM/BAM file from a fasta containing reference sequence. The output SAM file contains a header but no
- * SAMRecords, and the header contains only sequence records.
- */
-public class CreateSequenceDictionary extends CommandLineProgram {
-
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE =
- "Usage: " + getClass().getName() + " [options]\n\n" +
- "Read fasta or fasta.gz containing reference sequences, and write as a SAM or BAM file with only sequence dictionary.\n";
-
- @Option(doc = "Input reference fasta or fasta.gz", shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME)
- public File REFERENCE;
-
- @Option(doc = "Output SAM or BAM file containing only the sequence dictionary",
- shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
- public File OUTPUT;
-
- @Option(doc = "Put into AS field of sequence dictionary entry if supplied", optional = true)
- public String GENOME_ASSEMBLY;
-
- @Option(doc = "Put into UR field of sequence dictionary entry. If not supplied, input reference file is used",
- optional = true)
- public String URI;
-
- @Option(doc = "Put into SP field of sequence dictionary entry", optional = true)
- public String SPECIES;
-
- @Option(doc = "Make sequence name the first word from the > line in the fasta file. " +
- "By default the entire contents of the > line is used, excluding leading and trailing whitespace.")
- public boolean TRUNCATE_NAMES_AT_WHITESPACE = true;
-
- @Option(doc = "Stop after writing this many sequences. For testing.")
- public int NUM_SEQUENCES = Integer.MAX_VALUE;
-
- private final MessageDigest md5;
-
- public CreateSequenceDictionary() {
- try {
- md5 = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException e) {
- throw new PicardException("MD5 algorithm not found", e);
- }
- }
-
- public static void main(final String[] argv) {
- System.exit(new CreateSequenceDictionary().instanceMain(argv));
- }
-
- /**
- * Use reference filename to create URI to go into header if URI was not passed on cmd line.
- */
- protected String[] customCommandLineValidation() {
- if (URI == null) {
- URI = "file:" + REFERENCE.getAbsolutePath();
- }
- return null;
- }
-
- /**
- * Do the work after command line has been parsed.
- * RuntimeException may be thrown by this method, and are reported appropriately.
- *
- * @return program exit status.
- */
- protected int doWork() {
- if (OUTPUT.exists()) {
- throw new PicardException(OUTPUT.getAbsolutePath() +
- " already exists. Delete this file and try again, or specify a different output file.");
- }
- final SAMSequenceDictionary sequences = makeSequenceDictionary(REFERENCE);
- final SAMFileHeader samHeader = new SAMFileHeader();
- samHeader.setSequenceDictionary(sequences);
- final SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(samHeader, false, OUTPUT);
- samWriter.close();
- return 0;
- }
-
-
- /**
- * Read all the sequences from the given reference file, and convert into SAMSequenceRecords
- * @param referenceFile fasta or fasta.gz
- * @return SAMSequenceRecords containing info from the fasta, plus from cmd-line arguments.
- */
- SAMSequenceDictionary makeSequenceDictionary(final File referenceFile) {
- final ReferenceSequenceFile refSeqFile =
- ReferenceSequenceFileFactory.getReferenceSequenceFile(referenceFile, TRUNCATE_NAMES_AT_WHITESPACE);
- ReferenceSequence refSeq;
- final List<SAMSequenceRecord> ret = new ArrayList<SAMSequenceRecord>();
- final Set<String> sequenceNames = new HashSet<String>();
- for (int numSequences = 0; numSequences < NUM_SEQUENCES && (refSeq = refSeqFile.nextSequence()) != null; ++numSequences) {
- if (sequenceNames.contains(refSeq.getName())) {
- throw new PicardException("Sequence name appears more than once in reference: " + refSeq.getName());
- }
- sequenceNames.add(refSeq.getName());
- ret.add(makeSequenceRecord(refSeq));
- }
- return new SAMSequenceDictionary(ret);
- }
-
- /**
- * Create one SAMSequenceRecord from a single fasta sequence
- */
- private SAMSequenceRecord makeSequenceRecord(final ReferenceSequence refSeq) {
- final SAMSequenceRecord ret = new SAMSequenceRecord(refSeq.getName(), refSeq.length());
-
- // Compute MD5 of upcased bases
- final byte[] bases = refSeq.getBases();
- for (int i = 0; i < bases.length; ++i) {
- bases[i] = StringUtil.toUpperCase(bases[i]);
- }
-
- ret.setAttribute(SAMSequenceRecord.MD5_TAG, md5Hash(bases));
- if (GENOME_ASSEMBLY != null) {
- ret.setAttribute(SAMSequenceRecord.ASSEMBLY_TAG, GENOME_ASSEMBLY);
- }
- ret.setAttribute(SAMSequenceRecord.URI_TAG, URI);
- if (SPECIES != null) {
- ret.setAttribute(SAMSequenceRecord.SPECIES_TAG, SPECIES);
- }
- return ret;
- }
-
- private String md5Hash(final byte[] bytes) {
- md5.reset();
- md5.update(bytes);
- String s = new BigInteger(1, md5.digest()).toString(16);
- if (s.length() != 32) {
- final String zeros = "00000000000000000000000000000000";
- s = zeros.substring(0, 32 - s.length()) + s;
- }
- return s;
- }
-}
diff --git a/src/java/net/sf/picard/sam/DiskReadEndsMap.java b/src/java/net/sf/picard/sam/DiskReadEndsMap.java
deleted file mode 100644
index 145ed79..0000000
--- a/src/java/net/sf/picard/sam/DiskReadEndsMap.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Disk-based implementation of ReadEndsMap. A subdirectory of the system tmpdir is created to store
- * files, one for each reference sequence. The reference sequence that is currently being queried (i.e. the
- * sequence for which remove() has been most recently called) is stored in RAM. ReadEnds for all other sequences
- * are stored on disk.
- *
- * When put() is called for a sequence that is the current one in RAM, the ReadEnds object is merely put into the
- * in-memory map. If put() is called for a sequence ID that is not the current RAM one, the ReadEnds object is
- * appended to the file for that sequence, creating the file if necessary.
- *
- * When remove() is called for a sequence that is the current one in RAM, remove() is called on the in-memory map.
- * If remove() is called for a sequence other than the current RAM sequence, then the current RAM sequence is written
- * to disk, the new sequence is read from disk into RAM map, and the file for the new sequence is deleted.
- *
- * If things work properly, and reads are processed in genomic order, records will be written for mates that are in
- * a later sequence. When the mate is reached in the input SAM file, the file that was written will be deleted.
- * This should result in all temporary files being deleted by the time all the reads are processed. The temp
- * directory is marked to be deleted on exit so everything should get cleaned up.
- *
- * @author alecw at broadinstitute.org
- */
-class DiskReadEndsMap implements ReadEndsMap {
- private final CoordinateSortedPairInfoMap<String, ReadEnds> pairInfoMap;
- DiskReadEndsMap(int maxOpenFiles) {
- pairInfoMap = new CoordinateSortedPairInfoMap<String, ReadEnds>(maxOpenFiles, new Codec());
- }
-
- public ReadEnds remove(int mateSequenceIndex, String key) {
- return pairInfoMap.remove(mateSequenceIndex, key);
- }
-
- public void put(int mateSequenceIndex, String key, ReadEnds readEnds) {
- pairInfoMap.put(mateSequenceIndex, key, readEnds);
- }
-
- public int size() {
- return pairInfoMap.size();
- }
-
- public int sizeInRam() {
- return pairInfoMap.sizeInRam();
- }
-
- private static class Codec implements CoordinateSortedPairInfoMap.Codec<String, ReadEnds> {
- private final ReadEndsCodec readEndsCodec = new ReadEndsCodec();
-
- public void setInputStream(final InputStream is) {
- readEndsCodec.setInputStream(is);
- }
-
- public void setOutputStream(final OutputStream os) {
- readEndsCodec.setOutputStream(os);
- }
-
- public Map.Entry<String, ReadEnds> decode() {
- try {
- final String key = readEndsCodec.getInputStream().readUTF();
- final ReadEnds record = readEndsCodec.decode();
- return new AbstractMap.SimpleEntry<java.lang.String,net.sf.picard.sam.ReadEnds>(key, record);
- } catch (IOException e) {
- throw new PicardException("Error loading ReadEndsMap from disk", e);
- }
- }
-
- public void encode(final String key, final ReadEnds readEnds) {
- try {
- readEndsCodec.getOutputStream().writeUTF(key);
- readEndsCodec.encode(readEnds);
- } catch (IOException e) {
- throw new PicardException("Error spilling ReadEndsMap to disk.", e);
- }
- }
- }
-
-}
diff --git a/src/java/net/sf/picard/sam/DownsampleSam.java b/src/java/net/sf/picard/sam/DownsampleSam.java
deleted file mode 100644
index 553e585..0000000
--- a/src/java/net/sf/picard/sam/DownsampleSam.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriter;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMRecord;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-/**
- * Class to randomly downsample a BAM file while respecting that we should either get rid
- * of both ends of a pair or neither end of the pair!
- */
-public class DownsampleSam extends CommandLineProgram {
- @Usage public final String USAGE = getStandardUsagePreamble() + " Randomly down-sample a SAM or BAM file to retain " +
- "a random subset of the reads. Mate-pairs are either both kept or both discarded. Reads marked as not primary " +
- "alignments are all discarded. Each read is given a probability P of being retained - results with the exact " +
- "same input in the same order and with the same value for RANDOM_SEED will produce the same results.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The input SAM or BAM file to downsample.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output, downsampled, SAM or BAM file to write.")
- public File OUTPUT;
-
- @Option(shortName="R", doc="Random seed to use if reproducibilty is desired. " +
- "Setting to null will cause multiple invocations to produce different results.")
- public Long RANDOM_SEED = 1L;
-
- @Option(shortName="P", doc="The probability of keeping any individual read, between 0 and 1.")
- public double PROBABILITY = 1;
-
- private final Log log = Log.getInstance(DownsampleSam.class);
-
- public static void main(final String[] args) {
- new DownsampleSam().instanceMainWithExit(args);
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final Random r = RANDOM_SEED == null ? new Random() : new Random(RANDOM_SEED);
- final SAMFileReader in = new SAMFileReader(INPUT);
- final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(in.getFileHeader(), true, OUTPUT);
- final Map<String,Boolean> decisions = new HashMap<String,Boolean>();
-
- long total = 0;
- long kept = 0;
-
- final ProgressLogger progress = new ProgressLogger(log, (int) 1e7, "Read");
-
- for (final SAMRecord rec : in) {
- if (rec.isSecondaryOrSupplementary()) continue;
- ++total;
-
- final String key = rec.getReadName();
- final Boolean previous = decisions.remove(key);
- final boolean keeper;
-
- if (previous == null) {
- keeper = r.nextDouble() <= PROBABILITY;
- if (rec.getReadPairedFlag()) decisions.put(key, keeper);
- }
- else {
- keeper = previous;
- }
-
- if (keeper) {
- out.addAlignment(rec);
- ++kept;
- }
-
- progress.record(rec);
- }
-
- out.close();
- log.info("Finished! Kept " + kept + " out of " + total + " reads.");
-
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/sam/DuplicationMetrics.java b/src/java/net/sf/picard/sam/DuplicationMetrics.java
deleted file mode 100644
index 280c3f6..0000000
--- a/src/java/net/sf/picard/sam/DuplicationMetrics.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.metrics.MetricBase;
-import net.sf.picard.util.Histogram;
-
-/**
- * Metrics that are calculated during the process of marking duplicates
- * within a stream of SAMRecords.
- */
-public class DuplicationMetrics extends MetricBase {
- /** The library on which the duplicate marking was performed. */
- public String LIBRARY;
-
- /**
- * The number of mapped reads examined which did not have a mapped mate pair,
- * either because the read is unpaired, or the read is paired to an unmapped mate.
- */
- public long UNPAIRED_READS_EXAMINED;
-
- /** The number of mapped read pairs examined. */
- public long READ_PAIRS_EXAMINED;
-
- /** The total number of unmapped reads examined. */
- public long UNMAPPED_READS;
-
- /** The number of fragments that were marked as duplicates. */
- public long UNPAIRED_READ_DUPLICATES;
-
- /** The number of read pairs that were marked as duplicates. */
- public long READ_PAIR_DUPLICATES;
-
- /**
- * The number of read pairs duplicates that were caused by optical duplication.
- * Value is always < READ_PAIR_DUPLICATES, which counts all duplicates regardless of source.
- */
- public long READ_PAIR_OPTICAL_DUPLICATES;
-
- /** The percentage of mapped sequence that is marked as duplicate. */
- public Double PERCENT_DUPLICATION;
-
- /** The estimated number of unique molecules in the library based on PE duplication. */
- public Long ESTIMATED_LIBRARY_SIZE;
-
- /**
- * Fills in the ESTIMATED_LIBRARY_SIZE based on the paired read data examined where
- * possible and the PERCENT_DUPLICATION.
- */
- public void calculateDerivedMetrics() {
- this.ESTIMATED_LIBRARY_SIZE = estimateLibrarySize(this.READ_PAIRS_EXAMINED - this.READ_PAIR_OPTICAL_DUPLICATES,
- this.READ_PAIRS_EXAMINED - this.READ_PAIR_DUPLICATES);
-
- PERCENT_DUPLICATION = (UNPAIRED_READ_DUPLICATES + READ_PAIR_DUPLICATES *2) /(double) (UNPAIRED_READS_EXAMINED + READ_PAIRS_EXAMINED *2);
- }
-
- /**
- * Estimates the size of a library based on the number of paired end molecules observed
- * and the number of unique pairs ovserved.
- *
- * Based on the Lander-Waterman equation that states:
- * C/X = 1 - exp( -N/X )
- * where
- * X = number of distinct molecules in library
- * N = number of read pairs
- * C = number of distinct fragments observed in read pairs
- */
- public static Long estimateLibrarySize(final long readPairs, final long uniqueReadPairs) {
- final long readPairDuplicates = readPairs - uniqueReadPairs;
-
- if (readPairs > 0 && readPairDuplicates > 0) {
- long n = readPairs;
- long c = uniqueReadPairs;
-
- double m = 1.0, M = 100.0;
-
- if (c >= n || f(m*c, c, n) < 0) {
- throw new IllegalStateException("Invalid values for pairs and unique pairs: "
- + n + ", " + c);
-
- }
-
- while( f(M*c, c, n) >= 0 ) M *= 10.0;
-
- for (int i=0; i<40; i++ ) {
- double r = (m+M)/2.0;
- double u = f( r * c, c, n );
- if ( u == 0 ) break;
- else if ( u > 0 ) m = r;
- else if ( u < 0 ) M = r;
- }
-
- return (long) (c * (m+M)/2.0);
- }
- else {
- return null;
- }
- }
-
- /** Method that is used in the computation of estimated library size. */
- private static double f(double x, double c, double n) {
- return c/x - 1 + Math.exp(-n/x);
- }
-
- /**
- * Estimates the ROI (return on investment) that one would see if a library was sequenced to
- * x higher coverage than the observed coverage.
- *
- * @param estimatedLibrarySize the estimated number of molecules in the library
- * @param x the multiple of sequencing to be simulated (i.e. how many X sequencing)
- * @param pairs the number of pairs observed in the actual sequencing
- * @param uniquePairs the number of unique pairs observed in the actual sequencing
- * @return a number z <= x that estimates if you had pairs*x as your sequencing then you
- * would observe uniquePairs*z unique pairs.
- */
- public static double estimateRoi(long estimatedLibrarySize, double x, long pairs, long uniquePairs) {
- return estimatedLibrarySize * ( 1 - Math.exp(-(x*pairs)/estimatedLibrarySize) ) / uniquePairs;
- }
-
- /**
- * Calculates a histogram using the estimateRoi method to estimate the effective yield
- * doing x sequencing for x=1..10.
- */
- public Histogram<Double> calculateRoiHistogram() {
- if (ESTIMATED_LIBRARY_SIZE == null) {
- try {
- calculateDerivedMetrics();
- if (ESTIMATED_LIBRARY_SIZE == null) return null;
- }
- catch (IllegalStateException ise) { return null; }
- }
-
- long uniquePairs = READ_PAIRS_EXAMINED - READ_PAIR_DUPLICATES;
- Histogram<Double> histo = new Histogram<Double>();
-
- for (double x=1; x<=100; x+=1) {
- histo.increment(x, estimateRoi(ESTIMATED_LIBRARY_SIZE, x, READ_PAIRS_EXAMINED, uniquePairs));
- }
-
- return histo;
- }
-
- // Main method used for debugging the derived metrics
- // Usage = DuplicationMetrics READ_PAIRS READ_PAIR_DUPLICATES
- public static void main(String[] args) {
- DuplicationMetrics m = new DuplicationMetrics();
- m.READ_PAIRS_EXAMINED = Integer.parseInt(args[0]);
- m.READ_PAIR_DUPLICATES = Integer.parseInt(args[1]);
- m.calculateDerivedMetrics();
- System.out.println("Percent Duplication: " + m.PERCENT_DUPLICATION);
- System.out.println("Est. Library Size : " + m.ESTIMATED_LIBRARY_SIZE);
- System.out.println();
-
- System.out.println("X Seq\tX Unique");
- for (Histogram<Double>.Bin bin : m.calculateRoiHistogram().values()) {
- System.out.println(bin.getId() + "\t" + bin.getValue());
- }
-
-// DuplicationMetrics m = new DuplicationMetrics();
-// m.READ_PAIRS_EXAMINED = Long.parseLong(args[0]);
-// m.READ_PAIR_DUPLICATES = Long.parseLong(args[1]);
-// final long UNIQUE_READ_PAIRS = m.READ_PAIRS_EXAMINED - m.READ_PAIR_DUPLICATES;
-// final double xCoverage = Double.parseDouble(args[2]);
-// final double uniqueXCoverage = xCoverage * ((double) UNIQUE_READ_PAIRS / (double) m.READ_PAIRS_EXAMINED);
-// final double oneOverCoverage = 1 / xCoverage;
-//
-// m.calculateDerivedMetrics();
-// System.out.println("Percent Duplication: " + m.PERCENT_DUPLICATION);
-// System.out.println("Est. Library Size : " + m.ESTIMATED_LIBRARY_SIZE);
-// System.out.println();
-//
-//
-// System.out.println("Coverage\tUnique Coverage\tDuplication");
-// for (double d = oneOverCoverage; (int) (d*xCoverage)<=50; d+=oneOverCoverage) {
-// double coverage = d * xCoverage;
-// double uniqueCoverage = uniqueXCoverage * m.estimateRoi(m.ESTIMATED_LIBRARY_SIZE, d, m.READ_PAIRS_EXAMINED, UNIQUE_READ_PAIRS);
-// double duplication = (coverage - uniqueCoverage) / coverage;
-// System.out.println(coverage + "\t" + uniqueCoverage + "\t" + duplication);
-// }
- }
-}
diff --git a/src/java/net/sf/picard/sam/EarliestFragmentPrimaryAlignmentSelectionStrategy.java b/src/java/net/sf/picard/sam/EarliestFragmentPrimaryAlignmentSelectionStrategy.java
deleted file mode 100644
index ce7f674..0000000
--- a/src/java/net/sf/picard/sam/EarliestFragmentPrimaryAlignmentSelectionStrategy.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.AlignmentBlock;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.CoordMath;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-/**
- * When it is necessary to pick a primary alignment from a group of alignments for a read, pick the one that maps
- * the earliest base in the read. This implementation only works for fragments, not for pairs.
- * If there are multiple alignments that all start mapping at the same offest in the read, pick the one with the best
- * MAPQ. If there are multiple alignments that have the earliest mapping and that have the same MAPQ, pick one randomly.
- */
-public class EarliestFragmentPrimaryAlignmentSelectionStrategy implements PrimaryAlignmentSelectionStrategy {
- // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
- // multiple alignments with equal mapping quality.
- private final Random random = new Random(1);
-
- public void pickPrimaryAlignment(final HitsForInsert hitsForInsert) {
-
- if (hitsForInsert.numHits() == 0) throw new IllegalArgumentException("No alignments to pick from");
-
- // Gather the earliest alignment(s) with best MAPQ
- final List<Integer> earliestAlignments = new ArrayList<Integer>();
- int earliestMappedBase = Integer.MAX_VALUE;
- int bestMapQ = -1;
- for (int i = 0; i < hitsForInsert.numHits(); ++i) {
- final SAMRecord rec = hitsForInsert.getFragment(i);
- if (rec.getReadUnmappedFlag()) continue;
- final int thisFirstMappedBase = getIndexOfFirstAlignedBase(rec);
- final int thisMapQ = rec.getMappingQuality();
- if (thisFirstMappedBase < earliestMappedBase ||
- (thisFirstMappedBase == earliestMappedBase && thisMapQ > bestMapQ)) {
- earliestAlignments.clear();
- earliestAlignments.add(i);
- earliestMappedBase = thisFirstMappedBase;
- bestMapQ = thisMapQ;
- } else if (thisFirstMappedBase == earliestMappedBase && thisMapQ == bestMapQ) {
- earliestAlignments.add(i);
- } // else it is not the earliest or the best so skip it.
- }
-
-
- if (earliestAlignments.size() == 1) {
- // If only one best, pick it.
- hitsForInsert.setPrimaryAlignment(earliestAlignments.get(0));
- } else {
- // Arbitrarily select one of the best
- hitsForInsert.setPrimaryAlignment(earliestAlignments.get(random.nextInt(earliestAlignments.size())));
- }
- }
-
- /**
- * Returns 1-based index of first base in read that corresponds to M in CIGAR string.
- * Note that first is relative to 5' end, so that for reverse-strand alignment, the index of
- * the last base aligned is computed relative to the end of the read.
- */
- int getIndexOfFirstAlignedBase(final SAMRecord rec) {
- final List<AlignmentBlock> alignmentBlocks = rec.getAlignmentBlocks();
- if (rec.getReadNegativeStrandFlag()) {
- final AlignmentBlock alignmentBlock = alignmentBlocks.get(alignmentBlocks.size() - 1);
- return rec.getReadLength() - CoordMath.getEnd(alignmentBlock.getReadStart(), alignmentBlock.getLength()) + 1;
- } else {
- return alignmentBlocks.get(0).getReadStart();
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/EstimateLibraryComplexity.java b/src/java/net/sf/picard/sam/EstimateLibraryComplexity.java
deleted file mode 100644
index 79c639d..0000000
--- a/src/java/net/sf/picard/sam/EstimateLibraryComplexity.java
+++ /dev/null
@@ -1,487 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.util.Histogram;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.SortingCollection;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.*;
-import java.util.*;
-
-import static java.lang.Math.log;
-import static java.lang.Math.pow;
-
-/**
- * <p>Attempts to estimate library complexity from sequence alone. Does so by sorting all reads
- * by the first N bases (5 by default) of each read and then comparing reads with the first
- * N bases identical to each other for duplicates. Reads are considered to be duplicates if
- * they match each other with no gaps and an overall mismatch rate less than or equal to
- * MAX_DIFF_RATE (0.03 by default).</p>
- *
- * <p>Reads of poor quality are filtered out so as to provide a more accurate estimate. The filtering
- * removes reads with any no-calls in the first N bases or with a mean base quality lower than
- * MIN_MEAN_QUALITY across either the first or second read.</p>
- *
- * <p>The algorithm attempts to detect optical duplicates separately from PCR duplicates and excludes
- * these in the calculation of library size. Also, since there is no alignment to screen out technical
- * reads one further filter is applied on the data. After examining all reads a histogram is built of
- * [#reads in duplicate set -> #of duplicate sets]; all bins that contain exactly one duplicate set are
- * then removed from the histogram as outliers before library size is estimated.</p>
- *
- * @author Tim Fennell
- */
-public class EstimateLibraryComplexity extends AbstractDuplicateFindingAlgorithm {
- @Usage public final String USAGE =
- "Attempts to estimate library complexity from sequence of read pairs alone. Does so by sorting all reads " +
- "by the first N bases (5 by default) of each read and then comparing reads with the first " +
- "N bases identical to each other for duplicates. Reads are considered to be duplicates if " +
- "they match each other with no gaps and an overall mismatch rate less than or equal to " +
- "MAX_DIFF_RATE (0.03 by default).\n\n" +
- "Reads of poor quality are filtered out so as to provide a more accurate estimate. The filtering " +
- "removes reads with any no-calls in the first N bases or with a mean base quality lower than " +
- "MIN_MEAN_QUALITY across either the first or second read.\n\n" +
- "Unpaired reads are ignored in this computation.\n\n" +
- "The algorithm attempts to detect optical duplicates separately from PCR duplicates and excludes " +
- "these in the calculation of library size. Also, since there is no alignment to screen out technical " +
- "reads one further filter is applied on the data. After examining all reads a histogram is built of " +
- "[#reads in duplicate set -> #of duplicate sets]; all bins that contain exactly one duplicate set are " +
- "then removed from the histogram as outliers before library size is estimated.";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="One or more files to combine and " +
- "estimate library complexity from. Reads can be mapped or unmapped.")
- public List<File> INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME,
- doc="Output file to writes per-library metrics to.")
- public File OUTPUT;
-
- @Option(doc="The minimum number of bases at the starts of reads that must be identical for reads to " +
- "be grouped together for duplicate detection. In effect total_reads / 4^max_id_bases reads will " +
- "be compared at a time, so lower numbers will produce more accurate results but consume " +
- "exponentially more memory and CPU.")
- public int MIN_IDENTICAL_BASES = 5;
-
- @Option(doc="The maximum rate of differences between two reads to call them identical.")
- public double MAX_DIFF_RATE = 0.03;
-
- @Option(doc="The minimum mean quality of the bases in a read pair for the read to be analyzed. Reads with " +
- "lower average quality are filtered out and not considered in any calculations.")
- public int MIN_MEAN_QUALITY = 20;
-
- @Option(doc="Do not process self-similar groups that are this many times over the mean expected group size. " +
- "I.e. if the input contains 10m read pairs and MIN_IDENTICAL_BASES is set to 5, then the mean expected " +
- "group size would be approximately 10 reads.")
- public int MAX_GROUP_RATIO = 500;
-
- private final Log log = Log.getInstance(EstimateLibraryComplexity.class);
-
- /**
- * Little class to hold the sequence of a pair of reads and tile location information.
- */
- static class PairedReadSequence implements PhysicalLocation {
- static int size_in_bytes = 2 + 1 + 4 + 1 + 300; // rough guess at memory footprint
- short readGroup = -1;
- short tile = -1;
- short x = -1, y = -1;
- boolean qualityOk = true;
- byte[] read1;
- byte[] read2;
-
- public short getReadGroup() { return this.readGroup; }
- public void setReadGroup(final short readGroup) { this.readGroup = readGroup; }
-
- public short getTile() { return this.tile; }
- public void setTile(final short tile) { this.tile = tile; }
-
- public short getX() { return this.x; }
- public void setX(final short x) { this.x = x; }
-
- public short getY() { return this.y; }
- public void setY(final short y) { this.y = y; }
- }
-
- /**
- * Codec class for writing and read PairedReadSequence objects.
- */
- static class PairedReadCodec implements SortingCollection.Codec<PairedReadSequence> {
- private DataOutputStream out;
- private DataInputStream in;
-
- public void setOutputStream(final OutputStream out) {
- this.out = new DataOutputStream(out);
- }
-
- public void setInputStream(final InputStream in) {
- this.in= new DataInputStream(in);
- }
-
- public void encode(final PairedReadSequence val) {
- try {
- this.out.writeShort(val.readGroup);
- this.out.writeShort(val.tile);
- this.out.writeShort(val.x);
- this.out.writeShort(val.y);
- this.out.writeInt(val.read1.length);
- this.out.write(val.read1);
- this.out.writeInt(val.read2.length);
- this.out.write(val.read2);
- }
- catch (IOException ioe) {
- throw new PicardException("Error write out read pair.", ioe);
- }
- }
-
- public PairedReadSequence decode() {
- try {
- final PairedReadSequence val = new PairedReadSequence();
- try {
- val.readGroup = this.in.readShort();
- }
- catch (EOFException eof) {
- return null;
- }
-
- val.tile = this.in.readShort();
- val.x = this.in.readShort();
- val.y = this.in.readShort();
-
- int length = this.in.readInt();
- val.read1 = new byte[length];
- if (this.in.read(val.read1) != length) {
- throw new PicardException("Could not read " + length + " bytes from temporary file.");
- }
-
- length = this.in.readInt();
- val.read2 = new byte[length];
- if (this.in.read(val.read2) != length) {
- throw new PicardException("Could not read " + length + " bytes from temporary file.");
- }
-
- return val;
- }
- catch (IOException ioe) {
- throw new PicardException("Exception reading read pair.", ioe);
- }
- }
-
- @Override
- public SortingCollection.Codec<PairedReadSequence> clone() { return new PairedReadCodec(); }
- }
-
- /**
- * Comparator that orders read pairs on the first N bases of both reads.
- */
- class PairedReadComparator implements Comparator<PairedReadSequence> {
- final int BASES = EstimateLibraryComplexity.this.MIN_IDENTICAL_BASES;
-
- public int compare(final PairedReadSequence lhs, final PairedReadSequence rhs) {
- // First compare the first N bases of the first read
- for (int i=0; i<BASES; ++i) {
- final int retval = lhs.read1[i] - rhs.read1[i];
- if (retval != 0) return retval;
- }
-
- // Then compare the first N bases of the second read
- for (int i=0; i<BASES; ++i) {
- final int retval = lhs.read2[i] - rhs.read2[i];
- if (retval != 0) return retval;
- }
-
- return System.identityHashCode(lhs) - System.identityHashCode(rhs);
- }
- }
-
- /** Stock main method. */
- public static void main(final String[] args) {
- new EstimateLibraryComplexity().instanceMainWithExit(args);
- }
-
- /**
- * Method that does most of the work. Reads through the input BAM file and extracts the
- * read sequences of each read pair and sorts them via a SortingCollection. Then traverses
- * the sorted reads and looks at small groups at a time to find duplicates.
- */
- @Override protected int doWork() {
- for (final File f : INPUT) IoUtil.assertFileIsReadable(f);
-
- final int maxInMemory = (int) (Runtime.getRuntime().maxMemory() / PairedReadSequence.size_in_bytes) / 2;
- log.info("Will store " + maxInMemory + " read pairs in memory before sorting.");
-
- final List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>();
- int recordsRead = 0;
- final SortingCollection<PairedReadSequence> sorter = SortingCollection.newInstance(PairedReadSequence.class,
- new PairedReadCodec(),
- new PairedReadComparator(),
- maxInMemory,
- TMP_DIR);
-
- // Loop through the input files and pick out the read sequences etc.
- final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Read");
- for (final File f : INPUT) {
- final Map<String,PairedReadSequence> pendingByName = new HashMap<String, PairedReadSequence>();
- final SAMFileReader in = new SAMFileReader(f);
- readGroups.addAll(in.getFileHeader().getReadGroups());
-
- for (final SAMRecord rec : in) {
- if (!rec.getReadPairedFlag()) continue;
- if (!rec.getFirstOfPairFlag() && !rec.getSecondOfPairFlag()) {
- continue;
- }
-
- PairedReadSequence prs = pendingByName.remove(rec.getReadName());
- if (prs == null) {
- // Make a new paired read object and add RG and physical location information to it
- prs = new PairedReadSequence();
- if (addLocationInformation(rec.getReadName(), prs)) {
- final SAMReadGroupRecord rg = rec.getReadGroup();
- if (rg != null) prs.setReadGroup((short) readGroups.indexOf(rg));
- }
-
- pendingByName.put(rec.getReadName(), prs);
- }
-
- // Read passes quality check if both ends meet the mean quality criteria
- final boolean passesQualityCheck = passesQualityCheck(rec.getReadBases(),
- rec.getBaseQualities(),
- MIN_IDENTICAL_BASES,
- MIN_MEAN_QUALITY);
- prs.qualityOk = prs.qualityOk && passesQualityCheck;
-
- // Get the bases and restore them to their original orientation if necessary
- final byte[] bases = rec.getReadBases();
- if (rec.getReadNegativeStrandFlag()) SequenceUtil.reverseComplement(bases);
-
- if (rec.getFirstOfPairFlag()) {
- prs.read1 = bases;
- }
- else {
- prs.read2 = bases;
- }
-
- if (prs.read1 != null && prs.read2 != null && prs.qualityOk) {
- sorter.add(prs);
- }
-
- progress.record(rec);
- }
- }
-
- log.info("Finished reading - moving on to scanning for duplicates.");
-
- // Now go through the sorted reads and attempt to find duplicates
- final PeekableIterator<PairedReadSequence> iterator = new PeekableIterator<PairedReadSequence>(sorter.iterator());
-
- final Map<String, Histogram<Integer>> duplicationHistosByLibrary = new HashMap<String,Histogram<Integer>>();
- final Map<String,Histogram<Integer>> opticalHistosByLibrary = new HashMap<String,Histogram<Integer>>();
-
- int groupsProcessed = 0;
- long lastLogTime = System.currentTimeMillis();
- final int meanGroupSize = Math.max(1, (recordsRead/2) / (int) pow(4, MIN_IDENTICAL_BASES*2));
-
- while (iterator.hasNext()) {
- // Get the next group and split it apart by library
- final List<PairedReadSequence> group = getNextGroup(iterator);
-
- if (group.size() > meanGroupSize * MAX_GROUP_RATIO) {
- final PairedReadSequence prs = group.get(0);
- log.warn("Omitting group with over " + MAX_GROUP_RATIO + " times the expected mean number of read pairs. " +
- "Mean=" + meanGroupSize + ", Actual=" + group.size() + ". Prefixes: " +
- StringUtil.bytesToString(prs.read1, 0, MIN_IDENTICAL_BASES) +
- " / " +
- StringUtil.bytesToString(prs.read1, 0, MIN_IDENTICAL_BASES));
- }
- else {
- final Map<String,List<PairedReadSequence>> sequencesByLibrary = splitByLibrary(group, readGroups);
-
- // Now process the reads by library
- for (final Map.Entry<String,List<PairedReadSequence>> entry : sequencesByLibrary.entrySet()) {
- final String library = entry.getKey();
- final List<PairedReadSequence> seqs = entry.getValue();
-
- Histogram<Integer> duplicationHisto = duplicationHistosByLibrary.get(library);
- Histogram<Integer> opticalHisto = opticalHistosByLibrary.get(library);
- if (duplicationHisto == null) {
- duplicationHisto = new Histogram<Integer>("duplication_group_count", library);
- opticalHisto = new Histogram<Integer>("duplication_group_count", "optical_duplicates");
- duplicationHistosByLibrary.put(library, duplicationHisto);
- opticalHistosByLibrary.put(library, opticalHisto);
- }
-
- // Figure out if any reads within this group are duplicates of one another
- for (int i=0; i<seqs.size(); ++i) {
- final PairedReadSequence lhs = seqs.get(i);
- if (lhs == null) continue;
- final List<PairedReadSequence> dupes = new ArrayList<PairedReadSequence>();
-
- for (int j=i+1; j<seqs.size(); ++j) {
- final PairedReadSequence rhs = seqs.get(j);
- if (rhs == null) continue;
-
- if (matches(lhs, rhs, MAX_DIFF_RATE)) {
- dupes.add(rhs);
- seqs.set(j, null);
- }
- }
-
- if (dupes.size() > 0) {
- dupes.add(lhs);
- final int duplicateCount = dupes.size();
- duplicationHisto.increment(duplicateCount);
-
- final boolean[] flags = findOpticalDuplicates(dupes, OPTICAL_DUPLICATE_PIXEL_DISTANCE);
- for (final boolean b : flags) {
- if (b) opticalHisto.increment(duplicateCount);
- }
- }
- else {
- duplicationHisto.increment(1);
- }
- }
- }
-
- ++groupsProcessed;
- if (lastLogTime < System.currentTimeMillis() - 60000) {
- log.info("Processed " + groupsProcessed + " groups.");
- lastLogTime = System.currentTimeMillis();
- }
- }
- }
-
- iterator.close();
- sorter.cleanup();
-
- final MetricsFile<DuplicationMetrics,Integer> file = getMetricsFile();
- for (final String library : duplicationHistosByLibrary.keySet()) {
- final Histogram<Integer> duplicationHisto = duplicationHistosByLibrary.get(library);
- final Histogram<Integer> opticalHisto = opticalHistosByLibrary.get(library);
- final DuplicationMetrics metrics = new DuplicationMetrics();
- metrics.LIBRARY = library;
-
- // Filter out any bins that have only a single entry in them and calcu
- for (final Integer bin : duplicationHisto.keySet()) {
- final double duplicateGroups = duplicationHisto.get(bin).getValue();
- final double opticalDuplicates = opticalHisto.get(bin) == null ? 0 : opticalHisto.get(bin).getValue();
-
- if (duplicateGroups > 1) {
- metrics.READ_PAIRS_EXAMINED += (bin * duplicateGroups);
- metrics.READ_PAIR_DUPLICATES += ((bin-1) * duplicateGroups);
- metrics.READ_PAIR_OPTICAL_DUPLICATES += opticalDuplicates;
- }
- }
-
- metrics.calculateDerivedMetrics();
- file.addMetric(metrics);
- file.addHistogram(duplicationHisto);
-
- }
-
- file.write(OUTPUT);
-
- return 0;
- }
-
- /**
- * Checks to see if two reads pairs have sequence that are the same, give or take a few
- * errors/diffs as dictated by the maxDiffRate.
- */
- private boolean matches(final PairedReadSequence lhs, final PairedReadSequence rhs, final double maxDiffRate) {
- final int read1Length = Math.min(lhs.read1.length, rhs.read1.length);
- final int read2Length = Math.min(lhs.read2.length, rhs.read2.length);
- final int maxErrors = (int) Math.floor((read1Length + read2Length) * maxDiffRate);
- int errors = 0;
-
- // The loop can start from MIN_IDENTICAL_BASES because we've already confirmed that
- // at least those first few bases are identical when sorting.
- for (int i=MIN_IDENTICAL_BASES; i<read1Length; ++i) {
- if (lhs.read1[i] != rhs.read1[i]) {
- if (++errors > maxErrors) return false;
- }
- }
-
- for (int i=MIN_IDENTICAL_BASES; i<read2Length; ++i) {
- if (lhs.read2[i] != rhs.read2[i]) {
- if (++errors > maxErrors) return false;
- }
- }
-
- return true;
- }
-
- /**
- * Pulls out of the iterator the next group of reads that can be compared to each other to
- * identify duplicates.
- */
- List<PairedReadSequence> getNextGroup(final PeekableIterator<PairedReadSequence> iterator) {
- final List<PairedReadSequence> group = new ArrayList<PairedReadSequence>();
- final PairedReadSequence first = iterator.next();
- group.add(first);
-
- outer: while(iterator.hasNext()) {
- final PairedReadSequence next = iterator.peek();
- for (int i=0; i<MIN_IDENTICAL_BASES; ++i) {
- if (first.read1[i] != next.read1[i] || first.read2[i] != next.read2[i]) break outer;
- }
-
- group.add(iterator.next());
-
- }
-
- return group;
- }
-
- /**
- * Takes a list of PairedReadSequence objects and splits them into lists by library.
- */
- Map<String,List<PairedReadSequence>> splitByLibrary(final List<PairedReadSequence> input,
- final List<SAMReadGroupRecord> rgs) {
-
- final Map<String,List<PairedReadSequence>> out = new HashMap<String,List<PairedReadSequence>>();
- for (final PairedReadSequence seq : input) {
- String library = null;
- if (seq.getReadGroup() != -1) {
- library = rgs.get(seq.getReadGroup()).getLibrary();
- if (library == null) library = "Unknown";
- }
- else {
- library = "Unknown";
- }
-
- List<PairedReadSequence> librarySeqs = out.get(library);
- if (librarySeqs == null) {
- librarySeqs = new ArrayList<PairedReadSequence>();
- out.put(library, librarySeqs);
- }
- librarySeqs.add(seq);
- }
-
- return out;
- }
-
- /**
- * Checks that the average quality over the entire read is >= min, and that the first N bases do
- * not contain any no-calls.
- */
- boolean passesQualityCheck(final byte[] bases, final byte[] quals, final int seedLength, final int minQuality) {
- if (bases.length < seedLength) return false;
-
- for (int i=0; i<seedLength; ++i) {
- if (SequenceUtil.isNoCall(bases[i])) return false;
- }
-
- int total = 0;
- for (final byte b : quals) total += b;
- return total / quals.length >= minQuality;
- }
-}
diff --git a/src/java/net/sf/picard/sam/FastqToSam.java b/src/java/net/sf/picard/sam/FastqToSam.java
deleted file mode 100644
index b70d6e7..0000000
--- a/src/java/net/sf/picard/sam/FastqToSam.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.fastq.FastqReader;
-import net.sf.picard.fastq.FastqRecord;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.*;
-import net.sf.samtools.*;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.util.Iso8601Date;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Converts a fastq file to an unaligned BAM/SAM format.
- * See <a href="http://maq.sourceforge.net/fastq.shtml">MAQ FastQ specification</a> for details.
- * Three fastq versions are supported: FastqSanger, FastqSolexa and FastqIllumina.
- * Input files can be in GZip format (end in .gz).
- */
-public class FastqToSam extends CommandLineProgram {
- private static final Log LOG = Log.getInstance(FastqToSam.class);
-
- @Usage
- public String USAGE = "Extracts read sequences and qualities from the input fastq file and writes them into the output file in unaligned BAM format."
- + " Input files can be in GZip format (end in .gz).\n"
- ;
-
- @Option(shortName="F1", doc="Input fastq file (optionally gzipped) for single end data, or first read in paired end data.")
- public File FASTQ;
-
- @Option(shortName="F2", doc="Input fastq file (optionally gzipped) for the second read of paired end data.", optional=true)
- public File FASTQ2;
-
- @Option(shortName="V", doc="A value describing how the quality values are encoded in the fastq. Either Solexa for pre-pipeline 1.3 " +
- "style scores (solexa scaling + 66), Illumina for pipeline 1.3 and above (phred scaling + 64) or Standard for phred scaled " +
- "scores with a character shift of 33. If this value is not specified, the quality format will be detected automatically.", optional = true)
- public FastqQualityFormat QUALITY_FORMAT;
-
- @Option(doc="Output SAM/BAM file. ", shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME)
- public File OUTPUT ;
-
- @Option(shortName="RG", doc="Read group name")
- public String READ_GROUP_NAME = "A";
-
- @Option(shortName="SM", doc="Sample name to insert into the read group header")
- public String SAMPLE_NAME;
-
- @Option(shortName="LB", doc="The library name to place into the LB attribute in the read group header", optional=true)
- public String LIBRARY_NAME;
-
- @Option(shortName="PU", doc="The platform unit (often run_barcode.lane) to insert into the read group header", optional=true)
- public String PLATFORM_UNIT;
-
- @Option(shortName="PL", doc="The platform type (e.g. illumina, solid) to insert into the read group header", optional=true)
- public String PLATFORM;
-
- @Option(shortName="CN", doc="The sequencing center from which the data originated", optional=true)
- public String SEQUENCING_CENTER;
-
- @Option(shortName = "PI", doc = "Predicted median insert size, to insert into the read group header", optional = true)
- public Integer PREDICTED_INSERT_SIZE;
-
- @Option(doc="Comment(s) to include in the merged output file's header.", optional=true, shortName="CO")
- public List<String> COMMENT = new ArrayList<String>();
-
- @Option(shortName = "DS", doc = "Inserted into the read group header", optional = true)
- public String DESCRIPTION;
-
- @Option(shortName = "DT", doc = "Date the run was produced, to insert into the read group header", optional = true)
- public Iso8601Date RUN_DATE;
-
- @Option(shortName="SO", doc="The sort order for the output sam/bam file.")
- public SortOrder SORT_ORDER = SortOrder.queryname;
-
- @Option(doc="Minimum quality allowed in the input fastq. An exception will be thrown if a quality is less than this value.")
- public int MIN_Q = 0;
-
- @Option(doc="Maximum quality allowed in the input fastq. An exception will be thrown if a quality is greater than this value.")
- public int MAX_Q = SAMUtils.MAX_PHRED_SCORE;
-
- @Option(doc="If true and this is an unpaired fastq any occurance of '/1' will be removed from the end of a read name.")
- public Boolean STRIP_UNPAIRED_MATE_NUMBER = false;
-
-
- @Option(doc="Allow (and ignore) empty lines")
- public Boolean ALLOW_AND_IGNORE_EMPTY_LINES = false;
-
- private static final SolexaQualityConverter solexaQualityConverter = SolexaQualityConverter.getSingleton();
-
- /** Stock main method. */
- public static void main(final String[] argv) {
- System.exit(new FastqToSam().instanceMain(argv));
- }
-
- /* Simply invokes the right method for unpaired or paired data. */
- protected int doWork() {
- final QualityEncodingDetector detector = new QualityEncodingDetector();
- final FastqReader reader = new FastqReader(FASTQ,ALLOW_AND_IGNORE_EMPTY_LINES);
- if (FASTQ2 == null) {
- detector.add(QualityEncodingDetector.DEFAULT_MAX_RECORDS_TO_ITERATE, reader);
- } else {
- final FastqReader reader2 = new FastqReader(FASTQ2,ALLOW_AND_IGNORE_EMPTY_LINES);
- detector.add(QualityEncodingDetector.DEFAULT_MAX_RECORDS_TO_ITERATE, reader, reader2);
- reader2.close();
- }
- reader.close();
-
- QUALITY_FORMAT = detector.generateBestGuess(QualityEncodingDetector.FileContext.FASTQ, QUALITY_FORMAT);
- if (detector.isDeterminationAmbiguous())
- LOG.warn("Making ambiguous determination about fastq's quality encoding; more than one format possible based on observed qualities.");
- LOG.info(String.format("Auto-detected quality format as: %s.", QUALITY_FORMAT));
-
- final int readCount = (FASTQ2 == null) ? doUnpaired() : doPaired();
- LOG.info("Processed " + readCount + " fastq reads");
- return 0;
- }
-
- /** Creates a simple SAM file from a single fastq file. */
- protected int doUnpaired() {
- IoUtil.assertFileIsReadable(FASTQ);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final FastqReader freader = new FastqReader(FASTQ,ALLOW_AND_IGNORE_EMPTY_LINES);
- final SAMFileHeader header = createFileHeader();
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(header, false, OUTPUT);
-
- int readCount = 0;
- final ProgressLogger progress = new ProgressLogger(LOG);
- for ( ; freader.hasNext() ; readCount++) {
- final FastqRecord frec = freader.next();
- final SAMRecord srec = createSamRecord(header, getReadName(frec.getReadHeader(), false) , frec, false) ;
- srec.setReadPairedFlag(false);
- writer.addAlignment(srec);
- progress.record(srec);
- }
-
- writer.close();
- return readCount;
- }
-
- /** More complicated method that takes two fastq files and builds pairing information in the SAM. */
- protected int doPaired() {
- IoUtil.assertFileIsReadable(FASTQ);
- IoUtil.assertFileIsReadable(FASTQ2);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final FastqReader freader1 = new FastqReader(FASTQ,ALLOW_AND_IGNORE_EMPTY_LINES);
- final FastqReader freader2 = new FastqReader(FASTQ2,ALLOW_AND_IGNORE_EMPTY_LINES);
- final SAMFileHeader header = createFileHeader() ;
- final SAMFileWriter writer = (new SAMFileWriterFactory()).makeSAMOrBAMWriter(header, false, OUTPUT);
-
- int readCount = 0;
- final ProgressLogger progress = new ProgressLogger(LOG);
- for ( ; freader1.hasNext() && freader2.hasNext() ; readCount++) {
- final FastqRecord frec1 = freader1.next();
- final FastqRecord frec2 = freader2.next();
-
- final String frec1Name = getReadName(frec1.getReadHeader(), true);
- final String frec2Name = getReadName(frec2.getReadHeader(), true);
- final String baseName = getBaseName(frec1Name, frec2Name, freader1, freader2);
-
- final SAMRecord srec1 = createSamRecord(header, baseName, frec1, true) ;
- srec1.setFirstOfPairFlag(true);
- srec1.setSecondOfPairFlag(false);
- writer.addAlignment(srec1);
- progress.record(srec1);
-
- final SAMRecord srec2 = createSamRecord(header, baseName, frec2, true) ;
- srec2.setFirstOfPairFlag(false);
- srec2.setSecondOfPairFlag(true);
- writer.addAlignment(srec2);
- progress.record(srec2);
- }
-
- writer.close();
-
- if (freader1.hasNext() || freader2.hasNext()) {
- throw new PicardException("Input paired fastq files must be the same length");
- }
-
- return readCount;
- }
-
- private SAMRecord createSamRecord(final SAMFileHeader header, final String baseName, final FastqRecord frec, final boolean paired) {
- final SAMRecord srec = new SAMRecord(header);
- srec.setReadName(baseName);
- srec.setReadString(frec.getReadString());
- srec.setReadUnmappedFlag(true);
- srec.setAttribute(ReservedTagConstants.READ_GROUP_ID, READ_GROUP_NAME);
- final byte[] quals = StringUtil.stringToBytes(frec.getBaseQualityString());
- convertQuality(quals, QUALITY_FORMAT);
- for (final byte qual : quals) {
- final int uQual = qual & 0xff;
- if (uQual < MIN_Q || uQual > MAX_Q) {
- throw new PicardException("Base quality " + uQual + " is not in the range " + MIN_Q + ".." +
- MAX_Q + " for read " + frec.getReadHeader());
- }
- }
- srec.setBaseQualities(quals);
-
- if (paired) {
- srec.setReadPairedFlag(true);
- srec.setMateUnmappedFlag(true);
- }
- return srec ;
- }
-
- /** Creates a simple header with the values provided on the command line. */
- private SAMFileHeader createFileHeader() {
- final SAMReadGroupRecord rgroup = new SAMReadGroupRecord(this.READ_GROUP_NAME);
- rgroup.setSample(this.SAMPLE_NAME);
- if (this.LIBRARY_NAME != null) rgroup.setLibrary(this.LIBRARY_NAME);
- if (this.PLATFORM != null) rgroup.setPlatform(this.PLATFORM);
- if (this.PLATFORM_UNIT != null) rgroup.setPlatformUnit(this.PLATFORM_UNIT);
- if (this.SEQUENCING_CENTER != null) rgroup.setSequencingCenter(SEQUENCING_CENTER);
- if (this.PREDICTED_INSERT_SIZE != null) rgroup.setPredictedMedianInsertSize(PREDICTED_INSERT_SIZE);
- if (this.DESCRIPTION != null) rgroup.setDescription(this.DESCRIPTION);
- if (this.RUN_DATE != null) rgroup.setRunDate(this.RUN_DATE);
-
- final SAMFileHeader header = new SAMFileHeader();
- header.addReadGroup(rgroup);
-
- for (final String comment : COMMENT) {
- header.addComment(comment);
- }
-
- header.setSortOrder(this.SORT_ORDER);
- return header ;
- }
-
- /** Based on the type of quality scores coming in, converts them to a numeric byte[] in phred scale. */
- void convertQuality(final byte[] quals, final FastqQualityFormat version) {
- switch (version) {
- case Standard:
- SAMUtils.fastqToPhred(quals);
- break ;
- case Solexa:
- solexaQualityConverter.convertSolexaQualityCharsToPhredBinary(quals);
- break ;
- case Illumina:
- solexaQualityConverter.convertSolexa_1_3_QualityCharsToPhredBinary(quals);
- break ;
- }
- }
-
- /** Returns read baseName and asserts correct pair read name format:
- * <ul>
- * <li> Paired reads must either have the exact same read names or they must contain at least one "/"
- * <li> and the First pair read name must end with "/1" and second pair read name ends with "/2"
- * <li> The baseName (read name part before the /) must be the same for both read names
- * <li> If the read names are exactly the same but end in "/2" or "/1" then an exception will be thrown
- * </ul>
- */
- String getBaseName(final String readName1, final String readName2, final FastqReader freader1, final FastqReader freader2) {
- String [] toks = getReadNameTokens(readName1, 1, freader1);
- final String baseName1 = toks[0] ;
- final String num1 = toks[1] ;
-
- toks = getReadNameTokens(readName2, 2, freader2);
- final String baseName2 = toks[0] ;
- final String num2 = toks[1];
-
- if (!baseName1.equals(baseName2)) {
- throw new PicardException(String.format("In paired mode, read name 1 (%s) does not match read name 2 (%s)", baseName1,baseName2));
- }
-
- final boolean num1Blank = StringUtil.isBlank(num1);
- final boolean num2Blank = StringUtil.isBlank(num2);
- if (num1Blank || num2Blank) {
- if(!num1Blank) throw new PicardException(error(freader1,"Pair 1 number is missing (" +readName1+ "). Both pair numbers must be present or neither.")); //num1 != blank and num2 == blank
- else if(!num2Blank) throw new PicardException(error(freader2, "Pair 2 number is missing (" +readName2+ "). Both pair numbers must be present or neither.")); //num1 == blank and num =2 != blank
- } else {
- if (!num1.equals("1")) throw new PicardException(error(freader1,"Pair 1 number must be 1 ("+readName1+")"));
- if (!num2.equals("2")) throw new PicardException(error(freader2,"Pair 2 number must be 2 ("+readName2+")"));
- }
-
- return baseName1 ;
- }
-
- /** Breaks up read name into baseName and number separated by the last / */
- private String [] getReadNameTokens(final String readName, final int pairNum, final FastqReader freader) {
- if(readName.equals("")) throw new PicardException(error(freader,"Pair read name "+pairNum+" cannot be empty: "+readName));
-
- final int idx = readName.lastIndexOf("/");
- final String result[] = new String[2];
-
- if (idx == -1) {
- result[0] = readName;
- result[1] = null;
- } else {
- result[1] = readName.substring(idx+1, readName.length()); // should be a 1 or 2
-
- if(!result[1].equals("1") && !result[1].equals("2")) { //if not a 1 or 2 then names must be identical
- result[0] = readName;
- result[1] = null;
- }
- else {
- result[0] = readName.substring(0,idx); // baseName
- }
- }
-
- return result ;
- }
-
- /** Little utility to give error messages corresponding to line numbers in the input files. */
- private String error(final FastqReader freader, final String str) {
- return str +" at line "+freader.getLineNumber() +" in file "+freader.getFile().getAbsolutePath();
- }
-
- // Read names cannot contain blanks
- private String getReadName(final String fastqHeader, final boolean paired) {
- final int idx = fastqHeader.indexOf(" ");
- String readName = (idx == -1) ? fastqHeader : fastqHeader.substring(0,idx);
-
- // NOTE: the while loop isn't necessarily the most efficient way to handle this but we don't
- // expect this to ever happen more than once, just trapping pathological cases
- while (STRIP_UNPAIRED_MATE_NUMBER && !paired && readName.endsWith("/1")) {
- // If this is an unpaired run we want to make sure that "/1" isn't tacked on the end of the read name,
- // as this can cause problems down the road in MergeBamAlignment
- readName = readName.substring(0, readName.length() - 2);
- }
-
- return readName;
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- if (MIN_Q < 0) return new String[]{"MIN_Q must be >= 0"};
- if (MAX_Q > SAMUtils.MAX_PHRED_SCORE) return new String[]{"MAX_Q must be <= " + SAMUtils.MAX_PHRED_SCORE};
- return null;
- }
-}
diff --git a/src/java/net/sf/picard/sam/FilterSamReads.java b/src/java/net/sf/picard/sam/FilterSamReads.java
deleted file mode 100644
index 046e3c0..0000000
--- a/src/java/net/sf/picard/sam/FilterSamReads.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * $Id: FilterSamReads.java 1950 2014-04-28 21:41:46Z geoffjentry $
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.filter.AlignedFilter;
-import net.sf.picard.filter.FilteringIterator;
-import net.sf.picard.filter.ReadNameFilter;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriter;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.IOUtil;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
-import java.text.DecimalFormat;
-
-/**
- * From a SAM or BAM file, produce a new SAM or BAM by filtering aligned reads or a list of read
- * names provided in a file (one readname per line)
- * <p/>
- * $Id: FilterSamReads.java 1950 2014-04-28 21:41:46Z geoffjentry $
- */
-public class FilterSamReads extends CommandLineProgram {
-
- private static final Log log = Log.getInstance(FilterSamReads.class);
-
- private static enum Filter {
- includeAligned("OUTPUT SAM/BAM will contain aligned reads only. INPUT SAM/BAM must be in queryname SortOrder. (Note that *both* first and second of paired reads must be aligned to be included in the OUTPUT SAM or BAM)"),
- excludeAligned("OUTPUT SAM/BAM will contain un-mapped reads only. INPUT SAM/BAM must be in queryname SortOrder. (Note that *both* first and second of pair must be aligned to be excluded from the OUTPUT SAM or BAM)"),
- includeReadList("OUTPUT SAM/BAM will contain reads that are supplied in the READ_LIST_FILE file"),
- excludeReadList("OUTPUT bam will contain reads that are *not* supplied in the READ_LIST_FILE file");
-
- private final String description;
-
- Filter(final String description) {
- this.description = description;
- }
-
- @Override
- public String toString() {
- return this.name() + " [" + description + "]";
- }
- }
-
- @Usage
- public String USAGE =
- "Produces a new SAM or BAM file by including or excluding aligned reads " +
- "or a list of reads names supplied in the READ_LIST_FILE from the INPUT SAM or BAM file.\n";
-
- @Option(doc = "The SAM or BAM file that will be filtered.",
- optional = false,
- shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
- public File INPUT;
-
- @Option(doc = "Filter.", optional = false)
- public Filter FILTER = null;
-
- @Option(doc = "Read List File containing reads that will be included or excluded from the OUTPUT SAM or BAM file.",
- optional = true,
- shortName = "RLF")
- public File READ_LIST_FILE;
-
- @Option(
- doc = "SortOrder of the OUTPUT SAM or BAM file, otherwise use the SortOrder of the INPUT file.",
- optional = true, shortName = "SO")
- public SAMFileHeader.SortOrder SORT_ORDER;
-
- @Option(
- doc = "Create .reads files (for debugging purposes)",
- optional = true)
- public boolean WRITE_READS_FILES = true;
-
- @Option(doc = "SAM or BAM file to write read excluded results to",
- optional = false, shortName = "O")
- public File OUTPUT;
-
- private void filterReads(final FilteringIterator filteringIterator) {
-
- // get OUTPUT header from INPUT and owerwrite it if necessary
- final SAMFileReader inputReader = new SAMFileReader(INPUT);
- final SAMFileHeader.SortOrder inputSortOrder = inputReader.getFileHeader().getSortOrder();
- final SAMFileHeader outputHeader = inputReader.getFileHeader();
- if (SORT_ORDER != null) {
- outputHeader.setSortOrder(SORT_ORDER);
- }
- final boolean presorted = inputSortOrder.equals(outputHeader.getSortOrder());
- log.info("Filtering [presorted=" + presorted + "] " + INPUT.getName() + " -> OUTPUT=" +
- OUTPUT.getName() + " [sortorder=" + outputHeader.getSortOrder().name() + "]");
-
- // create OUTPUT file
- final SAMFileWriter outputWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(outputHeader, presorted, OUTPUT);
-
- final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Written");
-
- while (filteringIterator.hasNext()) {
- final SAMRecord rec = filteringIterator.next();
- outputWriter.addAlignment(rec);
- progress.record(rec);
- }
-
- filteringIterator.close();
- outputWriter.close();
- inputReader.close();
- log.info(new DecimalFormat("#,###").format(progress.getCount()) + " SAMRecords written to " + OUTPUT.getName());
- }
-
- /**
- * Write out a file of read names for debugging purposes.
- *
- * @param samOrBamFile The SAM or BAM file for which we are going to write out a file of its
- * containing read names
- */
- private void writeReadsFile(final File samOrBamFile) throws IOException {
- final SAMFileReader reader = new SAMFileReader(samOrBamFile);
- final File readsFile =
- new File(OUTPUT.getParentFile(), IOUtil.basename(samOrBamFile) + ".reads");
- IoUtil.assertFileIsWritable(readsFile);
- final BufferedWriter bw = IoUtil.openFileForBufferedWriting(readsFile, false);
-
- for (final SAMRecord rec : reader) {
- bw.write(rec.toString() + "\n");
- }
-
- bw.close();
- reader.close();
- IoUtil.assertFileIsReadable(readsFile);
- }
-
- @Override
- protected int doWork() {
-
- try {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
- if (WRITE_READS_FILES) writeReadsFile(INPUT);
-
- switch (FILTER) {
- case includeAligned:
- filterReads(new FilteringIterator(new SAMFileReader(INPUT).iterator(),
- new AlignedFilter(true), true));
- break;
- case excludeAligned:
- filterReads(new FilteringIterator(new SAMFileReader(INPUT).iterator(),
- new AlignedFilter(false), true));
- break;
- case includeReadList:
- filterReads(new FilteringIterator(new SAMFileReader(INPUT).iterator(),
- new ReadNameFilter(READ_LIST_FILE, true)));
- break;
- case excludeReadList:
- filterReads(new FilteringIterator(new SAMFileReader(INPUT).iterator(),
- new ReadNameFilter(READ_LIST_FILE, false)));
- break;
- default:
- throw new UnsupportedOperationException(FILTER.name() + " has not been implemented!");
- }
-
- IoUtil.assertFileIsReadable(OUTPUT);
- if (WRITE_READS_FILES) writeReadsFile(OUTPUT);
- return 0;
-
- } catch (Exception e) {
- if (OUTPUT.exists() && !OUTPUT.delete()) {
- log.warn("Failed to delete " + OUTPUT.getAbsolutePath());
- }
-
- log.error(e, "Failed to filter " + INPUT.getName());
- return 1;
- }
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- if (INPUT.equals(OUTPUT)) {
- return new String[]{"INPUT file and OUTPUT file must differ!"};
- }
-
- if ((FILTER.equals(Filter.includeReadList) ||
- FILTER.equals(Filter.excludeReadList)) &&
- READ_LIST_FILE == null) {
- return new String[]{"A READ_LIST_FILE must be specified when using the " + FILTER.name() + " option"};
-
- }
-
- return super.customCommandLineValidation();
- }
-
- /**
- * Stock main method.
- *
- * @param args main arguments
- */
- public static void main(final String[] args) {
- System.exit(new FilterSamReads().instanceMain(args));
- }
-
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/sam/FixMateInformation.java b/src/java/net/sf/picard/sam/FixMateInformation.java
deleted file mode 100644
index e78f193..0000000
--- a/src/java/net/sf/picard/sam/FixMateInformation.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.BAMRecordCodec;
-import net.sf.samtools.BamFileIoUtils;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriter;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMRecordQueryNameComparator;
-import net.sf.samtools.SamPairUtil;
-import net.sf.samtools.util.RuntimeIOException;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Class to fix mate pair information for all reads in a SAM file. Will run in fairly limited
- * memory unless there are lots of mate pairs that are far apart from each other in the file.
- *
- * @author Tim Fennell
- */
-public class FixMateInformation extends CommandLineProgram {
- @Usage public final String USAGE = "Ensure that all mate-pair information is in sync between each read " +
- " and it's mate pair. If no OUTPUT file is supplied then the output is written to a temporary file " +
- " and then copied over the INPUT file. Reads marked with the secondary alignment flag are written " +
- "to the output file unchanged.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The input file to fix.")
- public List<File> INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, optional=true,
- doc="The output file to write to. If no output file is supplied, the input file is overwritten.")
- public File OUTPUT;
-
- @Option(shortName=StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, optional=true,
- doc="Optional sort order if the OUTPUT file should be sorted differently than the INPUT file.")
- public SortOrder SORT_ORDER;
-
- @Option(shortName="MC", optional=true, doc="Adds the mate CIGAR tag (MC) if true, does not if false.")
- public Boolean ADD_MATE_CIGAR = true;
-
- private static final Log log = Log.getInstance(FixMateInformation.class);
-
- protected SAMFileWriter out;
-
- public static void main(final String[] args) {
- new FixMateInformation().instanceMainWithExit(args);
- }
-
- protected int doWork() {
- // Open up the input
- boolean allQueryNameSorted = true;
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- for (final File f : INPUT) {
- IoUtil.assertFileIsReadable(f);
- final SAMFileReader reader = new SAMFileReader(f);
- readers.add(reader);
- if (reader.getFileHeader().getSortOrder() != SortOrder.queryname) allQueryNameSorted = false;
- }
-
- // Decide where to write the fixed file - into the specified output file
- // or into a temporary file that will overwrite the INPUT file eventually
- if (OUTPUT != null) OUTPUT = OUTPUT.getAbsoluteFile();
- final boolean differentOutputSpecified = OUTPUT != null;
-
- if (differentOutputSpecified) {
- IoUtil.assertFileIsWritable(OUTPUT);
- }
- else if (INPUT.size() != 1) {
- throw new PicardException("Must specify either an explicit OUTPUT file or a single INPUT file to be overridden.");
- }
- else {
- final File soleInput = INPUT.get(0).getAbsoluteFile();
- final File dir = soleInput.getParentFile().getAbsoluteFile();
- try {
- IoUtil.assertFileIsWritable(soleInput);
- IoUtil.assertDirectoryIsWritable(dir);
- OUTPUT = File.createTempFile(soleInput.getName() + ".being_fixed.", BamFileIoUtils.BAM_FILE_EXTENSION, dir);
- }
- catch (IOException ioe) {
- throw new RuntimeIOException("Could not create tmp file in " + dir.getAbsolutePath());
- }
- }
-
- // Get the input records merged and sorted by query name as needed
- final PeekableIterator<SAMRecord> iterator;
- final SAMFileHeader header;
-
- {
- // Deal with merging if necessary
- final Iterator<SAMRecord> tmp;
- if (INPUT.size() > 1) {
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(readers.size());
- for (final SAMFileReader reader : readers) {
- headers.add(reader.getFileHeader());
- }
- final SortOrder sortOrder = (allQueryNameSorted? SortOrder.queryname: SortOrder.unsorted);
- final SamFileHeaderMerger merger = new SamFileHeaderMerger(sortOrder, headers, false);
- tmp = new MergingSamRecordIterator(merger, readers, false);
- header = merger.getMergedHeader();
- }
- else {
- tmp = readers.get(0).iterator();
- header = readers.get(0).getFileHeader();
- }
-
- // And now deal with re-sorting if necessary
- if (allQueryNameSorted) {
- iterator = new PeekableIterator<SAMRecord>(tmp);
- }
- else {
- log.info("Sorting input into queryname order.");
- final SortingCollection<SAMRecord> sorter = SortingCollection.newInstance(SAMRecord.class,
- new BAMRecordCodec(header),
- new SAMRecordQueryNameComparator(),
- MAX_RECORDS_IN_RAM,
- TMP_DIR);
- while (tmp.hasNext()) {
- sorter.add(tmp.next());
-
- }
-
- iterator = new PeekableIterator<SAMRecord>(sorter.iterator()) {
- @Override
- public void close() {
- super.close();
- sorter.cleanup();
- }
- };
- log.info("Sorting by queryname complete.");
- }
-
- // Deal with the various sorting complications
- final SortOrder outputSortOrder = SORT_ORDER == null ? readers.get(0).getFileHeader().getSortOrder() : SORT_ORDER;
- log.info("Output will be sorted by " + outputSortOrder);
- header.setSortOrder(outputSortOrder);
- }
-
- if (CREATE_INDEX && header.getSortOrder() != SortOrder.coordinate){
- throw new PicardException("Can't CREATE_INDEX unless sort order is coordinate");
- }
-
- createSamFileWriter(header);
-
- log.info("Traversing query name sorted records and fixing up mate pair information.");
- final ProgressLogger progress = new ProgressLogger(log);
- while (iterator.hasNext()) {
- final SAMRecord rec1 = iterator.next();
- if (rec1.isSecondaryOrSupplementary()) {
- writeAlignment(rec1);
- progress.record(rec1);
- continue;
- }
- SAMRecord rec2 = null;
- // Keep peeking at next SAMRecord until one is found that is not marked as secondary alignment,
- // or until there are no more SAMRecords.
- while (iterator.hasNext()) {
- rec2 = iterator.peek();
- if (rec2.isSecondaryOrSupplementary()) {
- iterator.next();
- writeAlignment(rec2);
- progress.record(rec2);
- rec2 = null;
- } else {
- break;
- }
- }
-
- if (rec2 != null && rec1.getReadName().equals(rec2.getReadName())) {
- iterator.next(); // consume the peeked record
- SamPairUtil.setMateInfo(rec1, rec2, header, ADD_MATE_CIGAR);
- writeAlignment(rec1);
- writeAlignment(rec2);
- progress.record(rec1, rec2);
- }
- else {
- writeAlignment(rec1);
- progress.record(rec1);
- }
- }
- iterator.close();
-
- if (header.getSortOrder() == SortOrder.queryname) {
- log.info("Closing output file.");
- }
- else {
- log.info("Finished processing reads; re-sorting output file.");
- }
- closeWriter();
-
- // Lastly if we're fixing in place, swap the files
- if (!differentOutputSpecified) {
- log.info("Replacing input file with fixed file.");
-
- final File soleInput = INPUT.get(0).getAbsoluteFile();
- final File old = new File(soleInput.getParentFile(), soleInput.getName() + ".old");
- if (!old.exists() && soleInput.renameTo(old)) {
- if (OUTPUT.renameTo(soleInput)) {
-
- if (!old.delete()) {
- log.warn("Could not delete old file: " + old.getAbsolutePath());
- return 1;
- }
-
- if (CREATE_INDEX) {
- final File newIndex = new File(OUTPUT.getParent(),
- OUTPUT.getName().substring(0, OUTPUT.getName().length()-4) + ".bai");
- final File oldIndex = new File(soleInput.getParent(),
- soleInput.getName().substring(0, soleInput.getName().length()-4) + ".bai");
-
- if (!newIndex.renameTo(oldIndex)) {
- log.warn("Could not overwrite index file: " + oldIndex.getAbsolutePath());
- }
- }
-
- }
- else {
- log.error("Could not move new file to " + soleInput.getAbsolutePath());
- log.error("Input file preserved as: " + old.getAbsolutePath());
- log.error("New file preserved as: " + OUTPUT.getAbsolutePath());
- return 1;
- }
- }
- else {
- log.error("Could not move input file out of the way: " + soleInput.getAbsolutePath());
-
- if (!OUTPUT.delete()) {
- log.error("Could not delete temporary file: " + OUTPUT.getAbsolutePath());
- }
-
- return 1;
- }
-
- }
-
- return 0;
- }
-
- protected void createSamFileWriter(final SAMFileHeader header) {
- out = new SAMFileWriterFactory().makeSAMOrBAMWriter(header,
- header.getSortOrder() == SortOrder.queryname, OUTPUT);
-
- }
-
- protected void writeAlignment(final SAMRecord sam) {
- out.addAlignment(sam);
- }
-
- protected void closeWriter() {
- out.close();
- }
-
-}
diff --git a/src/java/net/sf/picard/sam/GatherBamFiles.java b/src/java/net/sf/picard/sam/GatherBamFiles.java
deleted file mode 100644
index 1bfdbb6..0000000
--- a/src/java/net/sf/picard/sam/GatherBamFiles.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.samtools.*;
-
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * Program to perform a rapid "gather" operation on BAM files after a scatter operations where
- * the same process has been performed on different regions of a BAM file creating many smaller
- * BAM files that now need to be concatenated back together.
- *
- * @author Tim Fennell
- */
-public class GatherBamFiles extends CommandLineProgram {
- @Usage public final String USAGE = "Concatenates one or more BAM files together as efficiently as possible. Assumes that the " +
- "list of BAM files provided as INPUT are in the order that they should be concatenated and simply concatenates the bodies " +
- "of the BAM files while retaining the header from the first file. Operates via copying of the gzip blocks directly for speed " +
- "but also supports generation of an MD5 on the output and indexing of the output BAM file. Only support BAM files, does not " +
- "support SAM files.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME,
- doc="One or more BAM files or text files containing lists of BAM files one per line.")
- public List<File> INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output BAM file to write.")
- public File OUTPUT;
-
- private static final Log log = Log.getInstance(GatherBamFiles.class);
-
- // Stock main method.
- public static void main(final String[] args) {
- final GatherBamFiles gatherer = new GatherBamFiles();
- gatherer.CREATE_INDEX = true;
- gatherer.instanceMainWithExit(args);
- }
-
- @Override
- protected int doWork() {
- final List<File> inputs = IoUtil.unrollFiles(INPUT, BamFileIoUtils.BAM_FILE_EXTENSION, ".sam");
- for (final File f: inputs) IoUtil.assertFileIsReadable(f);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- if (determineBlockCopyingStatus(inputs)) {
- BamFileIoUtils.gatherWithBlockCopying(inputs, OUTPUT, CREATE_INDEX, CREATE_MD5_FILE);
- }
- else {
- gatherNormally(inputs, OUTPUT, CREATE_INDEX, CREATE_MD5_FILE);
- }
-
- return 0;
- }
-
- private boolean determineBlockCopyingStatus(final List<File> inputs) {
- boolean useBlockCopying = true;
- for (final File f : inputs) {
- if (!BamFileIoUtils.isBamFile(f)) {
- useBlockCopying = false;
- }
- }
- return useBlockCopying;
- }
-
- /**
- * Simple implementation of a gather operations that uses SAMFileReaders and Writers in order to concatenate
- * multiple BAM files.
- */
- private static void gatherNormally(final List<File> inputs, final File output, final boolean createIndex, final boolean createMd5) {
- final SAMFileHeader header;
- {
- final SAMFileReader tmp = new SAMFileReader(inputs.get(0));
- header = tmp.getFileHeader();
- tmp.close();
- }
-
- final SAMFileWriter out = new SAMFileWriterFactory().setCreateIndex(createIndex).setCreateMd5File(createMd5).makeSAMOrBAMWriter(header, true, output);
-
- for (final File f : inputs) {
- log.info("Gathering " + f.getAbsolutePath());
- final SAMFileReader in = new SAMFileReader(f);
- for (final SAMRecord rec : in) out.addAlignment(rec);
- CloserUtil.close(in);
- }
-
- out.close();
- }
-
-
-}
diff --git a/src/java/net/sf/picard/sam/HitsForInsert.java b/src/java/net/sf/picard/sam/HitsForInsert.java
deleted file mode 100644
index 7491191..0000000
--- a/src/java/net/sf/picard/sam/HitsForInsert.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMTag;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * Holds all the hits (alignments) for a read or read pair. For single-end reads, all the alignments are
- * stored in firstOfPairOrFragment list. For paired-end, alignments are stored in firstOfPairOrFragment list and
- * secondOfPair list.
- *
- * If there is more than one alignment, the selected PrimaryAlignmentSelectionStrategy is used to decide which
- * alignment should be marked as primary. The rest are marked as secondary.
- *
- * When AbstractAlignmentMerger emits these reads, for paired end reads it assumes that the ith first end alignment
- * and the ith second end alignment are correlated for the purpose of setting mate information in the SAMRecord.
- * If it is not appropriate for the ends to be linked like that, then the alignments should be staggered in
- * the lists so that there is a null in the other end list for each alignment. E.g. for the firstOfPair(5),
- * secondOfPair(5) should be null in order not to set the mate info. In that case the mate info will indicate that
- * the other end is unmapped.
- */
-class HitsForInsert {
-
- private static final HitIndexComparator comparator = new HitIndexComparator();
-
- public enum NumPrimaryAlignmentState {
- NONE, ONE, MORE_THAN_ONE
- }
-
-
- // These are package-visible to make life easier for the PrimaryAlignmentSelectionStrategies.
- final List<SAMRecord> firstOfPairOrFragment = new ArrayList<SAMRecord>();
- final List<SAMRecord> secondOfPair = new ArrayList<SAMRecord>();
-
- private final List<SAMRecord> supplementalFirstOfPairOrFragment = new ArrayList<SAMRecord>();
- private final List<SAMRecord> supplementalSecondOfPair = new ArrayList<SAMRecord>();
-
- /**
- * @throws if numHits() == 0
- */
- public String getReadName() {
- return getRepresentativeRead().getReadName();
- }
-
- /**
- * @throws if numHits() == 0
- */
- public boolean isPaired() {
- return getRepresentativeRead().getReadPairedFlag();
- }
-
- public SAMRecord getRepresentativeRead() {
- for (final SAMRecord rec : firstOfPairOrFragment) {
- if (rec != null) return rec;
- }
- for (final SAMRecord rec : secondOfPair) {
- if (rec != null) return rec;
- }
- throw new IllegalStateException("Should not be called if numHits == 0");
- }
-
- /**
- * Note that a single alignment for each end of a read pair is counted as a single hit.
- */
- public int numHits() {
- return Math.max(firstOfPairOrFragment.size(), secondOfPair.size());
- }
-
- /** True if either the first or second of pair has supplementary alignments, otherwise false. */
- public boolean hasSupplementalHits() {
- return !(this.supplementalFirstOfPairOrFragment.isEmpty() && this.supplementalSecondOfPair.isEmpty());
- }
-
- /**
- * @return Returns the ith hit for the first end, or null if the first end is not aligned.
- */
- public SAMRecord getFirstOfPair(final int i) {
- if (i >= firstOfPairOrFragment.size()) {
- return null;
- } else {
- return firstOfPairOrFragment.get(i);
- }
- }
-
- public void addFirstOfPairOrFragment(final SAMRecord rec) {
- firstOfPairOrFragment.add(rec);
- }
-
- public void addSecondOfPair(final SAMRecord rec) {
- secondOfPair.add(rec);
- }
-
- public void addSupplementalFirstOfPairOrFragment(final SAMRecord rec) {
- supplementalFirstOfPairOrFragment.add(rec);
- }
-
- public void addSupplementalSecondOfPair(final SAMRecord rec) {
- supplementalSecondOfPair.add(rec);
- }
-
- /**
- * @return The ith hit for a un-paired read. Never returns null.
- * Do not call if paired read.
- */
- public SAMRecord getFragment(final int i) {
- final SAMRecord samRecord = firstOfPairOrFragment.get(i);
- if (samRecord.getReadPairedFlag()) throw new UnsupportedOperationException("getFragment called for paired read");
- return samRecord;
- }
-
- /**
- * @return Returns the ith hit for the second end, or null if the second end is not aligned.
- */
- public SAMRecord getSecondOfPair(final int i) {
- if (i >= secondOfPair.size()) {
- return null;
- } else {
- return secondOfPair.get(i);
- }
- }
-
- /**
- * Set all alignments to not primary, except for the one specified by the argument. If paired, and set the
- * alignment for both ends if there is an alignment for both ends, otherwise just for the end for which
- * there is an alignment at the given index.
- * @param primaryAlignmentIndex
- */
- public void setPrimaryAlignment(final int primaryAlignmentIndex) {
- if (primaryAlignmentIndex < 0 || primaryAlignmentIndex >= this.numHits()) {
- throw new IllegalArgumentException("primaryAlignmentIndex(" + primaryAlignmentIndex +
- ") out of range for numHits(" + numHits() + ")");
- }
- // Set all alignment to be not primary except the selected one.
- for (int i = 0; i < this.numHits(); ++i) {
- final boolean notPrimary = (i != primaryAlignmentIndex);
- if (this.getFirstOfPair(i) != null) {
- this.getFirstOfPair(i).setNotPrimaryAlignmentFlag(notPrimary);
- }
- if (this.getSecondOfPair(i) != null) {
- this.getSecondOfPair(i).setNotPrimaryAlignmentFlag(notPrimary);
- }
- }
-
- }
-
- /**
- * Some alignment strategies expect to receive alignments for ends that are coordinated by
- * hit index (HI) tag. This method lines up alignments for each end by HI tag value, and if there is
- * no corresponding alignment for an alignment, there is a null in the array at that slot.
- *
- * This method then renumbers the HI values so that they start at zero and have no gaps, because some
- * reads may have been filtered out.
- */
- public void coordinateByHitIndex() {
- // Sort by HI value, with reads with no HI going at the end.
- Collections.sort(firstOfPairOrFragment, comparator);
- Collections.sort(secondOfPair, comparator);
-
- // Insert nulls as necessary in the two lists so that correlated alignments have the same index
- // and uncorrelated alignments have null in the other list at the corresponding index.
- for (int i = 0; i < Math.min(firstOfPairOrFragment.size(), secondOfPair.size()); ++i) {
- final Integer leftHi = firstOfPairOrFragment.get(i).getIntegerAttribute(SAMTag.HI.name());
- final Integer rightHi = secondOfPair.get(i).getIntegerAttribute(SAMTag.HI.name());
- if (leftHi != null) {
- if (rightHi != null) {
- if (leftHi < rightHi) secondOfPair.add(i, null);
- else if (rightHi < leftHi) firstOfPairOrFragment.add(i, null);
- // else the are correlated
- }
- } else if (rightHi != null) {
- firstOfPairOrFragment.add(i, null);
- } else {
- // Both alignments do not have HI, so push down the ones on the right.
- // Right is arbitrarily picked to push down.
- secondOfPair.add(i, null);
- }
- }
-
- // Now renumber any correlated alignments, and remove hit index if no correlated read.
- int hi = 0;
- for (int i = 0; i < numHits(); ++i) {
- final SAMRecord first = getFirstOfPair(i);
- final SAMRecord second = getSecondOfPair(i);
- if (first != null && second != null) {
- first.setAttribute(SAMTag.HI.name(), i);
- second.setAttribute(SAMTag.HI.name(), i);
- ++hi;
- } else if (first != null) {
- first.setAttribute(SAMTag.HI.name(), null);
- } else {
- second.setAttribute(SAMTag.HI.name(), null);
- }
- }
- }
-
-
-
- /**
- * Determine if there is a single primary alignment in a list of alignments.
- * @param records
- * @return NONE, ONE or MORE_THAN_ONE.
- */
- private NumPrimaryAlignmentState tallyPrimaryAlignments(final List<SAMRecord> records) {
- boolean seenPrimary = false;
- for (int i = 0; i < records.size(); ++i) {
- if (records.get(i) != null && !records.get(i).isSecondaryOrSupplementary()) {
- if (seenPrimary) return NumPrimaryAlignmentState.MORE_THAN_ONE;
- else seenPrimary = true;
- }
- }
- if (seenPrimary) return NumPrimaryAlignmentState.ONE;
- else return NumPrimaryAlignmentState.NONE;
- }
-
- public NumPrimaryAlignmentState tallyPrimaryAlignments(final boolean firstEnd) {
- if (firstEnd) return tallyPrimaryAlignments(firstOfPairOrFragment);
- else return tallyPrimaryAlignments(secondOfPair);
- }
-
- int findPrimaryAlignment(final List<SAMRecord> records) {
- int indexOfPrimaryAlignment = -1;
- for (int i = 0; i < records.size(); ++i) {
- if (records.get(i) != null && !records.get(i).isSecondaryOrSupplementary()) {
- if (indexOfPrimaryAlignment != -1) {
- throw new IllegalStateException("Multiple primary alignments found for read " + getReadName());
- }
- indexOfPrimaryAlignment = i;
- }
- }
- return indexOfPrimaryAlignment;
- }
-
- // null HI tag sorts after any non-null.
- private static class HitIndexComparator implements Comparator<SAMRecord> {
- public int compare(final SAMRecord rec1, final SAMRecord rec2) {
- final Integer hi1 = rec1.getIntegerAttribute(SAMTag.HI.name());
- final Integer hi2 = rec2.getIntegerAttribute(SAMTag.HI.name());
- if (hi1 == null) {
- if (hi2 == null) return 0;
- else return 1;
- } else if (hi2 == null) {
- return -1;
- } else {
- return hi1.compareTo(hi2);
- }
- }
- }
-
- List<SAMRecord> getSupplementalFirstOfPairOrFragment() {
- return supplementalFirstOfPairOrFragment;
- }
-
- List<SAMRecord> getSupplementalSecondOfPair() {
- return supplementalSecondOfPair;
- }
-}
diff --git a/src/java/net/sf/picard/sam/MarkDuplicates.java b/src/java/net/sf/picard/sam/MarkDuplicates.java
deleted file mode 100644
index 929aa03..0000000
--- a/src/java/net/sf/picard/sam/MarkDuplicates.java
+++ /dev/null
@@ -1,772 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineParser;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.util.Histogram;
-import net.sf.picard.util.Log;
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.SortingCollection;
-import net.sf.samtools.util.SortingLongCollection;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * A better duplication marking algorithm that handles all cases including clipped
- * and gapped alignments.
- *
- * @author Tim Fennell
- */
-public class MarkDuplicates extends AbstractDuplicateFindingAlgorithm {
- private final Log log = Log.getInstance(MarkDuplicates.class);
-
- /**
- * If more than this many sequences in SAM file, don't spill to disk because there will not
- * be enough file handles.
- */
-
- @Usage
- public final String USAGE =
- CommandLineParser.getStandardUsagePreamble(getClass()) +
- "Examines aligned records in the supplied SAM or BAM file to locate duplicate molecules. " +
- "All records are then written to the output file with the duplicate records flagged.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME,
- doc="One or more input SAM or BAM files to analyze. Must be coordinate sorted.")
- public List<File> INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME,
- doc="The output file to write marked records to")
- public File OUTPUT;
-
- @Option(shortName="M",
- doc="File to write duplication metrics to")
- public File METRICS_FILE;
-
- @Option(shortName=StandardOptionDefinitions.PROGRAM_RECORD_ID_SHORT_NAME,
- doc="The program record ID for the @PG record(s) created by this program. Set to null to disable " +
- "PG record creation. This string may have a suffix appended to avoid collision with other " +
- "program record IDs.",
- optional=true)
- public String PROGRAM_RECORD_ID = "MarkDuplicates";
-
- @Option(shortName="PG_VERSION",
- doc="Value of VN tag of PG record to be created. If not specified, the version will be detected automatically.",
- optional=true)
- public String PROGRAM_GROUP_VERSION;
-
- @Option(shortName="PG_COMMAND",
- doc="Value of CL tag of PG record to be created. If not supplied the command line will be detected automatically.",
- optional=true)
- public String PROGRAM_GROUP_COMMAND_LINE;
-
- @Option(shortName="PG_NAME",
- doc="Value of PN tag of PG record to be created.")
- public String PROGRAM_GROUP_NAME = "MarkDuplicates";
-
- @Option(shortName="CO",
- doc="Comment(s) to include in the output file's header.",
- optional=true)
- public List<String> COMMENT = new ArrayList<String>();
-
- @Option(doc="If true do not write duplicates to the output file instead of writing them with appropriate flags set.")
- public boolean REMOVE_DUPLICATES = false;
-
- @Option(shortName=StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME,
- doc="If true, assume that the input file is coordinate sorted even if the header says otherwise.")
- public boolean ASSUME_SORTED = false;
-
- @Option(shortName="MAX_SEQS",
- doc="This option is obsolete. ReadEnds will always be spilled to disk.")
- public int MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP = 50000;
-
- @Option(shortName="MAX_FILE_HANDLES",
- doc="Maximum number of file handles to keep open when spilling read ends to disk. " +
- "Set this number a little lower than the per-process maximum number of file that may be open. " +
- "This number can be found by executing the 'ulimit -n' command on a Unix system.")
- public int MAX_FILE_HANDLES_FOR_READ_ENDS_MAP = 8000;
-
- @Option(doc="This number, plus the maximum RAM available to the JVM, determine the memory footprint used by " +
- "some of the sorting collections. If you are running out of memory, try reducing this number.")
- public double SORTING_COLLECTION_SIZE_RATIO = 0.25;
-
- private SortingCollection<ReadEnds> pairSort;
- private SortingCollection<ReadEnds> fragSort;
- private SortingLongCollection duplicateIndexes;
- private int numDuplicateIndices = 0;
-
- final private Map<String,Short> libraryIds = new HashMap<String,Short>();
- private short nextLibraryId = 1;
-
- // Variables used for optical duplicate detection and tracking
- private final Histogram<Short> opticalDupesByLibraryId = new Histogram<Short>();
-
- // All PG IDs seen in merged input files in first pass. These are gather for two reasons:
- // - to know how many different PG records to create to represent this program invocation.
- // - to know what PG IDs are already used to avoid collisions when creating new ones.
- // Note that if there are one or more records that do not have a PG tag, then a null value
- // will be stored in this set.
- private final Set<String> pgIdsSeen = new HashSet<String>();
-
- /** Stock main method. */
- public static void main(final String[] args) {
- System.exit(new MarkDuplicates().instanceMain(args));
- }
-
- /**
- * Main work method. Reads the BAM file once and collects sorted information about
- * the 5' ends of both ends of each read (or just one end in the case of pairs).
- * Then makes a pass through those determining duplicates before re-reading the
- * input file and writing it out with duplication flags set correctly.
- */
- protected int doWork() {
- for (final File f : INPUT) IoUtil.assertFileIsReadable(f);
- IoUtil.assertFileIsWritable(OUTPUT);
- IoUtil.assertFileIsWritable(METRICS_FILE);
-
- reportMemoryStats("Start of doWork");
- log.info("Reading input file and constructing read end information.");
- buildSortedReadEndLists();
- reportMemoryStats("After buildSortedReadEndLists");
- generateDuplicateIndexes();
- reportMemoryStats("After generateDuplicateIndexes");
- log.info("Marking " + this.numDuplicateIndices + " records as duplicates.");
- log.info("Found " + ((long) this.opticalDupesByLibraryId.getSumOfValues()) + " optical duplicate clusters.");
-
- final Map<String,DuplicationMetrics> metricsByLibrary = new HashMap<String,DuplicationMetrics>();
- final SamHeaderAndIterator headerAndIterator = openInputs();
- final SAMFileHeader header = headerAndIterator.header;
-
- final SAMFileHeader outputHeader = header.clone();
- outputHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
- for (final String comment : COMMENT) outputHeader.addComment(comment);
-
- // Key: previous PG ID on a SAM Record (or null). Value: New PG ID to replace it.
- final Map<String, String> chainedPgIds;
- // Generate new PG record(s)
- if (PROGRAM_RECORD_ID != null) {
- final PgIdGenerator pgIdGenerator = new PgIdGenerator(outputHeader);
- if (PROGRAM_GROUP_VERSION == null) {
- PROGRAM_GROUP_VERSION = this.getVersion();
- }
- if (PROGRAM_GROUP_COMMAND_LINE == null) {
- PROGRAM_GROUP_COMMAND_LINE = this.getCommandLine();
- }
- chainedPgIds = new HashMap<String, String>();
- for (final String existingId : pgIdsSeen) {
- final String newPgId = pgIdGenerator.getNonCollidingId(PROGRAM_RECORD_ID);
- chainedPgIds.put(existingId, newPgId);
- final SAMProgramRecord programRecord = new SAMProgramRecord(newPgId);
- programRecord.setProgramVersion(PROGRAM_GROUP_VERSION);
- programRecord.setCommandLine(PROGRAM_GROUP_COMMAND_LINE);
- programRecord.setProgramName(PROGRAM_GROUP_NAME);
- programRecord.setPreviousProgramGroupId(existingId);
- outputHeader.addProgramRecord(programRecord);
- }
- } else {
- chainedPgIds = null;
- }
-
- final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outputHeader,
- true,
- OUTPUT);
-
- // Now copy over the file while marking all the necessary indexes as duplicates
- long recordInFileIndex = 0;
- long nextDuplicateIndex = (this.duplicateIndexes.hasNext() ? this.duplicateIndexes.next(): -1);
-
- for(final SAMReadGroupRecord readGroup : header.getReadGroups()) {
- final String library = readGroup.getLibrary();
- DuplicationMetrics metrics = metricsByLibrary.get(library);
- if (metrics == null) {
- metrics = new DuplicationMetrics();
- metrics.LIBRARY = library;
- metricsByLibrary.put(library, metrics);
- }
- }
-
- final ProgressLogger progress = new ProgressLogger(log, (int) 1e7, "Written");
- final CloseableIterator<SAMRecord> iterator = headerAndIterator.iterator;
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- if (!rec.isSecondaryOrSupplementary()) {
- final String library = getLibraryName(header, rec);
- DuplicationMetrics metrics = metricsByLibrary.get(library);
- if (metrics == null) {
- metrics = new DuplicationMetrics();
- metrics.LIBRARY = library;
- metricsByLibrary.put(library, metrics);
- }
-
- // First bring the simple metrics up to date
- if (rec.getReadUnmappedFlag()) {
- ++metrics.UNMAPPED_READS;
- }
- else if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) {
- ++metrics.UNPAIRED_READS_EXAMINED;
- }
- else {
- ++metrics.READ_PAIRS_EXAMINED; // will need to be divided by 2 at the end
- }
-
-
- if (recordInFileIndex == nextDuplicateIndex) {
- rec.setDuplicateReadFlag(true);
-
- // Update the duplication metrics
- if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) {
- ++metrics.UNPAIRED_READ_DUPLICATES;
- }
- else {
- ++metrics.READ_PAIR_DUPLICATES;// will need to be divided by 2 at the end
- }
-
- // Now try and figure out the next duplicate index
- if (this.duplicateIndexes.hasNext()) {
- nextDuplicateIndex = this.duplicateIndexes.next();
- } else {
- // Only happens once we've marked all the duplicates
- nextDuplicateIndex = -1;
- }
- }
- else {
- rec.setDuplicateReadFlag(false);
- }
- }
- recordInFileIndex++;
-
- if (this.REMOVE_DUPLICATES && rec.getDuplicateReadFlag()) {
- // do nothing
- }
- else {
- if (PROGRAM_RECORD_ID != null) {
- rec.setAttribute(SAMTag.PG.name(), chainedPgIds.get(rec.getStringAttribute(SAMTag.PG.name())));
- }
- out.addAlignment(rec);
- progress.record(rec);
- }
- }
-
- this.duplicateIndexes.cleanup();
-
- reportMemoryStats("Before output close");
- out.close();
- reportMemoryStats("After output close");
-
-
- // Write out the metrics
- final MetricsFile<DuplicationMetrics,Double> file = getMetricsFile();
- for (final Map.Entry<String,DuplicationMetrics> entry : metricsByLibrary.entrySet()) {
- final String libraryName = entry.getKey();
- final DuplicationMetrics metrics = entry.getValue();
-
- metrics.READ_PAIRS_EXAMINED = metrics.READ_PAIRS_EXAMINED / 2;
- metrics.READ_PAIR_DUPLICATES = metrics.READ_PAIR_DUPLICATES / 2;
-
- // Add the optical dupes to the metrics
- final Short libraryId = this.libraryIds.get(libraryName);
- if (libraryId != null) {
- final Histogram<Short>.Bin bin = this.opticalDupesByLibraryId.get(libraryId);
- if (bin != null) {
- metrics.READ_PAIR_OPTICAL_DUPLICATES = (long) bin.getValue();
- }
- }
- metrics.calculateDerivedMetrics();
- file.addMetric(metrics);
- }
-
- if (metricsByLibrary.size() == 1) {
- file.setHistogram(metricsByLibrary.values().iterator().next().calculateRoiHistogram());
- }
-
- file.write(METRICS_FILE);
-
- return 0;
- }
-
- /** Little class used to package up a header and an iterable/iterator. */
- private static final class SamHeaderAndIterator {
- final SAMFileHeader header;
- final CloseableIterator<SAMRecord> iterator;
-
- private SamHeaderAndIterator(final SAMFileHeader header, final CloseableIterator<SAMRecord> iterator) {
- this.header = header;
- this.iterator = iterator;
- }
- }
-
- /**
- * Since MarkDuplicates reads it's inputs more than once this method does all the opening
- * and checking of the inputs.
- */
- private SamHeaderAndIterator openInputs() {
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(INPUT.size());
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>(INPUT.size());
-
- for (final File f : INPUT) {
- final SAMFileReader reader = new SAMFileReader(f);
- final SAMFileHeader header = reader.getFileHeader();
-
- if (!ASSUME_SORTED && header.getSortOrder() != SortOrder.coordinate) {
- throw new PicardException("Input file " + f.getAbsolutePath() + " is not coordinate sorted.");
- }
-
- headers.add(header);
- readers.add(reader);
- }
-
- if (headers.size() == 1) {
- return new SamHeaderAndIterator(headers.get(0), readers.get(0).iterator());
- }
- else {
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SortOrder.coordinate, headers, false);
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, ASSUME_SORTED);
- return new SamHeaderAndIterator(headerMerger.getMergedHeader(), iterator);
- }
- }
-
- /** Print out some quick JVM memory stats. */
- private void reportMemoryStats(final String stage) {
- System.gc();
- final Runtime runtime = Runtime.getRuntime();
- log.info(stage + " freeMemory: " + runtime.freeMemory() + "; totalMemory: " + runtime.totalMemory() +
- "; maxMemory: " + runtime.maxMemory());
- }
-
- /**
- * Goes through all the records in a file and generates a set of ReadEnds objects that
- * hold the necessary information (reference sequence, 5' read coordinate) to do
- * duplication, caching to disk as necssary to sort them.
- */
- private void buildSortedReadEndLists() {
- final int maxInMemory = (int) ((Runtime.getRuntime().maxMemory() * SORTING_COLLECTION_SIZE_RATIO) / ReadEnds.SIZE_OF);
- log.info("Will retain up to " + maxInMemory + " data points before spilling to disk.");
-
- this.pairSort = SortingCollection.newInstance(ReadEnds.class,
- new ReadEndsCodec(),
- new ReadEndsComparator(),
- maxInMemory,
- TMP_DIR);
-
- this.fragSort = SortingCollection.newInstance(ReadEnds.class,
- new ReadEndsCodec(),
- new ReadEndsComparator(),
- maxInMemory,
- TMP_DIR);
-
- final SamHeaderAndIterator headerAndIterator = openInputs();
- final SAMFileHeader header = headerAndIterator.header;
- final ReadEndsMap tmp = new DiskReadEndsMap(MAX_FILE_HANDLES_FOR_READ_ENDS_MAP);
- long index = 0;
- final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Read");
- final CloseableIterator<SAMRecord> iterator = headerAndIterator.iterator;
-
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
-
- // This doesn't have anything to do with building sorted ReadEnd lists, but it can be done in the same pass
- // over the input
- if (PROGRAM_RECORD_ID != null) {
- pgIdsSeen.add(rec.getStringAttribute(SAMTag.PG.name()));
- }
-
- if (rec.getReadUnmappedFlag()) {
- if (rec.getReferenceIndex() == -1) {
- // When we hit the unmapped reads with no coordinate, no reason to continue.
- break;
- }
- // If this read is unmapped but sorted with the mapped reads, just skip it.
- }
- else if (!rec.isSecondaryOrSupplementary()){
- final ReadEnds fragmentEnd = buildReadEnds(header, index, rec);
- this.fragSort.add(fragmentEnd);
-
- if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) {
- final String key = rec.getAttribute(ReservedTagConstants.READ_GROUP_ID) + ":" + rec.getReadName();
- ReadEnds pairedEnds = tmp.remove(rec.getReferenceIndex(), key);
-
- // See if we've already seen the first end or not
- if (pairedEnds == null) {
- pairedEnds = buildReadEnds(header, index, rec);
- tmp.put(pairedEnds.read2Sequence, key, pairedEnds);
- }
- else {
- final int sequence = fragmentEnd.read1Sequence;
- final int coordinate = fragmentEnd.read1Coordinate;
-
- // If the second read is actually later, just add the second read data, else flip the reads
- if (sequence > pairedEnds.read1Sequence ||
- (sequence == pairedEnds.read1Sequence && coordinate >= pairedEnds.read1Coordinate)) {
- pairedEnds.read2Sequence = sequence;
- pairedEnds.read2Coordinate = coordinate;
- pairedEnds.read2IndexInFile = index;
- pairedEnds.orientation = getOrientationByte(pairedEnds.orientation == ReadEnds.R,
- rec.getReadNegativeStrandFlag());
- }
- else {
- pairedEnds.read2Sequence = pairedEnds.read1Sequence;
- pairedEnds.read2Coordinate = pairedEnds.read1Coordinate;
- pairedEnds.read2IndexInFile = pairedEnds.read1IndexInFile;
- pairedEnds.read1Sequence = sequence;
- pairedEnds.read1Coordinate = coordinate;
- pairedEnds.read1IndexInFile = index;
- pairedEnds.orientation = getOrientationByte(rec.getReadNegativeStrandFlag(),
- pairedEnds.orientation == ReadEnds.R);
- }
-
- pairedEnds.score += getScore(rec);
- this.pairSort.add(pairedEnds);
- }
- }
- }
-
- // Print out some stats every 1m reads
- ++index;
- if (progress.record(rec)) {
- log.info("Tracking " + tmp.size() + " as yet unmatched pairs. " + tmp.sizeInRam() + " records in RAM.");
- }
- }
-
- log.info("Read " + index + " records. " + tmp.size() + " pairs never matched.");
- iterator.close();
-
- // Tell these collections to free up memory if possible.
- this.pairSort.doneAdding();
- this.fragSort.doneAdding();
- }
-
- /** Builds a read ends object that represents a single read. */
- private ReadEnds buildReadEnds(final SAMFileHeader header, final long index, final SAMRecord rec) {
- final ReadEnds ends = new ReadEnds();
- ends.read1Sequence = rec.getReferenceIndex();
- ends.read1Coordinate = rec.getReadNegativeStrandFlag() ? rec.getUnclippedEnd() : rec.getUnclippedStart();
- ends.orientation = rec.getReadNegativeStrandFlag() ? ReadEnds.R : ReadEnds.F;
- ends.read1IndexInFile = index;
- ends.score = getScore(rec);
-
- // Doing this lets the ends object know that it's part of a pair
- if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) {
- ends.read2Sequence = rec.getMateReferenceIndex();
- }
-
- // Fill in the library ID
- ends.libraryId = getLibraryId(header, rec);
-
- // Fill in the location information for optical duplicates
- if (addLocationInformation(rec.getReadName(), ends)) {
- // calculate the RG number (nth in list)
- ends.readGroup = 0;
- final String rg = (String) rec.getAttribute("RG");
- final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
-
- if (rg != null && readGroups != null) {
- for (final SAMReadGroupRecord readGroup : readGroups) {
- if (readGroup.getReadGroupId().equals(rg)) break;
- else ends.readGroup++;
- }
- }
- }
-
- return ends;
- }
-
- /** Get the library ID for the given SAM record. */
- private short getLibraryId(final SAMFileHeader header, final SAMRecord rec) {
- final String library = getLibraryName(header, rec);
- Short libraryId = this.libraryIds.get(library);
-
- if (libraryId == null) {
- libraryId = this.nextLibraryId++;
- this.libraryIds.put(library, libraryId);
- }
-
- return libraryId;
- }
-
- /**
- * Gets the library name from the header for the record. If the RG tag is not present on
- * the record, or the library isn't denoted on the read group, a constant string is
- * returned.
- */
- private String getLibraryName(final SAMFileHeader header, final SAMRecord rec) {
- final String readGroupId = (String) rec.getAttribute("RG");
-
- if (readGroupId != null) {
- final SAMReadGroupRecord rg = header.getReadGroup(readGroupId);
- if (rg != null) {
- return rg.getLibrary();
- }
- }
-
- return "Unknown Library";
- }
-
- /**
- * Returns a single byte that encodes the orientation of the two reads in a pair.
- */
- private byte getOrientationByte(final boolean read1NegativeStrand, final boolean read2NegativeStrand) {
- if (read1NegativeStrand) {
- if (read2NegativeStrand) return ReadEnds.RR;
- else return ReadEnds.RF;
- }
- else {
- if (read2NegativeStrand) return ReadEnds.FR;
- else return ReadEnds.FF;
- }
- }
-
-
-
- /** Calculates a score for the read which is the sum of scores over Q20. */
- private short getScore(final SAMRecord rec) {
- short score = 0;
- for (final byte b : rec.getBaseQualities()) {
- if (b >= 15) score += b;
- }
-
- return score;
- }
-
- /**
- * Goes through the accumulated ReadEnds objects and determines which of them are
- * to be marked as duplicates.
- *
- * @return an array with an ordered list of indexes into the source file
- */
- private void generateDuplicateIndexes() {
- // Keep this number from getting too large even if there is a huge heap.
- final int maxInMemory = (int) Math.min((Runtime.getRuntime().maxMemory() * 0.25) / SortingLongCollection.SIZEOF,
- (double)(Integer.MAX_VALUE - 5));
- log.info("Will retain up to " + maxInMemory + " duplicate indices before spilling to disk.");
- this.duplicateIndexes = new SortingLongCollection(maxInMemory, TMP_DIR.toArray(new File[TMP_DIR.size()]));
-
- ReadEnds firstOfNextChunk = null;
- final List<ReadEnds> nextChunk = new ArrayList<ReadEnds>(200);
-
- // First just do the pairs
- log.info("Traversing read pair information and detecting duplicates.");
- for (final ReadEnds next : this.pairSort) {
- if (firstOfNextChunk == null) {
- firstOfNextChunk = next;
- nextChunk.add(firstOfNextChunk);
- }
- else if (areComparableForDuplicates(firstOfNextChunk, next, true)) {
- nextChunk.add(next);
- }
- else {
- if (nextChunk.size() > 1) {
- markDuplicatePairs(nextChunk);
- }
-
- nextChunk.clear();
- nextChunk.add(next);
- firstOfNextChunk = next;
- }
- }
- markDuplicatePairs(nextChunk);
- this.pairSort.cleanup();
- this.pairSort = null;
-
- // Now deal with the fragments
- log.info("Traversing fragment information and detecting duplicates.");
- boolean containsPairs = false;
- boolean containsFrags = false;
-
- for (final ReadEnds next : this.fragSort) {
- if (firstOfNextChunk != null && areComparableForDuplicates(firstOfNextChunk, next, false)) {
- nextChunk.add(next);
- containsPairs = containsPairs || next.isPaired();
- containsFrags = containsFrags || !next.isPaired();
- }
- else {
- if (nextChunk.size() > 1 && containsFrags) {
- markDuplicateFragments(nextChunk, containsPairs);
- }
-
- nextChunk.clear();
- nextChunk.add(next);
- firstOfNextChunk = next;
- containsPairs = next.isPaired();
- containsFrags = !next.isPaired();
- }
- }
- markDuplicateFragments(nextChunk, containsPairs);
- this.fragSort.cleanup();
- this.fragSort = null;
-
- log.info("Sorting list of duplicate records.");
- this.duplicateIndexes.doneAddingStartIteration();
- }
-
- private boolean areComparableForDuplicates(final ReadEnds lhs, final ReadEnds rhs, final boolean compareRead2) {
- boolean retval = lhs.libraryId == rhs.libraryId &&
- lhs.read1Sequence == rhs.read1Sequence &&
- lhs.read1Coordinate == rhs.read1Coordinate &&
- lhs.orientation == rhs.orientation;
-
- if (retval && compareRead2) {
- retval = lhs.read2Sequence == rhs.read2Sequence &&
- lhs.read2Coordinate == rhs.read2Coordinate;
- }
-
- return retval;
- }
-
- private void addIndexAsDuplicate(final long bamIndex) {
- this.duplicateIndexes.add(bamIndex);
- ++this.numDuplicateIndices;
- }
-
- /**
- * Takes a list of ReadEnds objects and removes from it all objects that should
- * not be marked as duplicates.
- *
- * @param list
- */
- private void markDuplicatePairs(final List<ReadEnds> list) {
- short maxScore = 0;
- ReadEnds best = null;
-
- for (final ReadEnds end : list) {
- if (end.score > maxScore || best == null) {
- maxScore = end.score;
- best = end;
- }
- }
-
- for (final ReadEnds end : list) {
- if (end != best) {
- addIndexAsDuplicate(end.read1IndexInFile);
- addIndexAsDuplicate(end.read2IndexInFile);
- }
- }
-
- trackOpticalDuplicates(list);
- }
-
- /**
- * Looks through the set of reads and identifies how many of the duplicates are
- * in fact optical duplicates, and stores the data in the instance level histogram.
- */
- private void trackOpticalDuplicates(final List<ReadEnds> list) {
- final boolean[] opticalDuplicateFlags = findOpticalDuplicates(list, OPTICAL_DUPLICATE_PIXEL_DISTANCE);
-
- int opticalDuplicates = 0;
- for (final boolean b: opticalDuplicateFlags) if (b) ++opticalDuplicates;
- if (opticalDuplicates > 0) {
- this.opticalDupesByLibraryId.increment(list.get(0).libraryId, opticalDuplicates);
- }
- }
-
- /**
- * Takes a list of ReadEnds objects and removes from it all objects that should
- * not be marked as duplicates.
- *
- * @param list
- */
- private void markDuplicateFragments(final List<ReadEnds> list, final boolean containsPairs) {
- if (containsPairs) {
- for (final ReadEnds end : list) {
- if (!end.isPaired()) addIndexAsDuplicate(end.read1IndexInFile);
- }
- }
- else {
- short maxScore = 0;
- ReadEnds best = null;
- for (final ReadEnds end : list) {
- if (end.score > maxScore || best == null) {
- maxScore = end.score;
- best = end;
- }
- }
-
- for (final ReadEnds end : list) {
- if (end != best) {
- addIndexAsDuplicate(end.read1IndexInFile);
- }
- }
- }
- }
-
- /** Comparator for ReadEnds that orders by read1 position then pair orientation then read2 position. */
- static class ReadEndsComparator implements Comparator<ReadEnds> {
- public int compare(final ReadEnds lhs, final ReadEnds rhs) {
- int retval = lhs.libraryId - rhs.libraryId;
- if (retval == 0) retval = lhs.read1Sequence - rhs.read1Sequence;
- if (retval == 0) retval = lhs.read1Coordinate - rhs.read1Coordinate;
- if (retval == 0) retval = lhs.orientation - rhs.orientation;
- if (retval == 0) retval = lhs.read2Sequence - rhs.read2Sequence;
- if (retval == 0) retval = lhs.read2Coordinate - rhs.read2Coordinate;
- if (retval == 0) retval = (int) (lhs.read1IndexInFile - rhs.read1IndexInFile);
- if (retval == 0) retval = (int) (lhs.read2IndexInFile - rhs.read2IndexInFile);
-
- return retval;
- }
- }
-
- static class PgIdGenerator {
- private int recordCounter;
-
- private final Set<String> idsThatAreAlreadyTaken = new HashSet<String>();
-
- PgIdGenerator(final SAMFileHeader header) {
- for (final SAMProgramRecord pgRecord : header.getProgramRecords()) {
- idsThatAreAlreadyTaken.add(pgRecord.getProgramGroupId());
- }
- recordCounter = idsThatAreAlreadyTaken.size();
- }
-
- String getNonCollidingId(final String recordId) {
- if(!idsThatAreAlreadyTaken.contains(recordId)) {
- // don't remap 1st record. If there are more records
- // with this id, they will be remapped in the 'else'.
- idsThatAreAlreadyTaken.add(recordId);
- ++recordCounter;
- return recordId;
- } else {
- String newId;
- // Below we tack on one of roughly 1.7 million possible 4 digit base36 at random. We do this because
- // our old process of just counting from 0 upward and adding that to the previous id led to 1000s of
- // calls idsThatAreAlreadyTaken.contains() just to resolve 1 collision when merging 1000s of similarly
- // processed bams.
- while(idsThatAreAlreadyTaken.contains(newId = recordId + "." + SamFileHeaderMerger.positiveFourDigitBase36Str(recordCounter++)));
-
- idsThatAreAlreadyTaken.add( newId );
- return newId;
- }
-
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/MergeBamAlignment.java b/src/java/net/sf/picard/sam/MergeBamAlignment.java
deleted file mode 100644
index 8884102..0000000
--- a/src/java/net/sf/picard/sam/MergeBamAlignment.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.util.Log;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.SAMProgramRecord;
-import net.sf.samtools.SamPairUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * A command-line tool to merge BAM/SAM alignment info from a third-party aligner with the data in an
- * unmapped BAM file, producing a third BAM file that has alignment data and all the additional data
- * from the unmapped BAM
- *
- * @author ktibbett at broadinstitute.org
- */
-public class MergeBamAlignment extends CommandLineProgram {
-
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Merges alignment data from a SAM or BAM " +
- "file with additional data stored in an unmapped BAM file and produces a third SAM " +
- "or BAM file of aligned and unaligned reads. NOTE that this program expects to " +
- "find a sequence dictionary in the same directory as REFERENCE_SEQUENCE and expects it " +
- "to have the same base name as the reference fasta except with the extension '.dict'";
-
- @Option(shortName="UNMAPPED",
- doc="Original SAM or BAM file of unmapped reads, which must be in queryname order.")
- public File UNMAPPED_BAM;
-
- @Option(shortName="ALIGNED",
- doc="SAM or BAM file(s) with alignment data.",
- mutex={"READ1_ALIGNED_BAM","READ2_ALIGNED_BAM"},
- optional=true)
- public List<File> ALIGNED_BAM;
-
- @Option(shortName="R1_ALIGNED",
- doc="SAM or BAM file(s) with alignment data from the first read of a pair.",
- mutex={"ALIGNED_BAM"},
- optional=true)
- public List<File> READ1_ALIGNED_BAM ;
-
- @Option(shortName="R2_ALIGNED",
- doc="SAM or BAM file(s) with alignment data from the second read of a pair.",
- mutex={"ALIGNED_BAM"},
- optional=true)
- public List<File> READ2_ALIGNED_BAM;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME,
- doc="Merged SAM or BAM file to write to.")
- public File OUTPUT;
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME,
- doc="Path to the fasta file for the reference sequence.")
- public File REFERENCE_SEQUENCE;
-
- @Option(shortName=StandardOptionDefinitions.PROGRAM_RECORD_ID_SHORT_NAME,
- doc="The program group ID of the aligner (if not supplied by the aligned file).",
- optional=true)
- public String PROGRAM_RECORD_ID;
-
- @Option(shortName="PG_VERSION",
- doc="The version of the program group (if not supplied by the aligned file).",
- optional=true)
- public String PROGRAM_GROUP_VERSION;
-
- @Option(shortName="PG_COMMAND",
- doc="The command line of the program group (if not supplied by the aligned file).",
- optional=true)
- public String PROGRAM_GROUP_COMMAND_LINE;
-
- @Option(shortName="PG_NAME",
- doc="The name of the program group (if not supplied by the aligned file).",
- optional=true)
- public String PROGRAM_GROUP_NAME;
-
- @Deprecated
- @Option(doc="This argument is ignored and will be removed.", shortName="PE")
- public Boolean PAIRED_RUN;
-
- @Option(doc="The expected jump size (required if this is a jumping library). Deprecated. Use EXPECTED_ORIENTATIONS instead",
- shortName="JUMP",
- mutex="EXPECTED_ORIENTATIONS",
- optional=true)
- public Integer JUMP_SIZE;
-
- @Option(doc="Whether to clip adapters where identified.")
- public boolean CLIP_ADAPTERS = true;
-
- @Option(doc="Whether the lane is bisulfite sequence (used when caculating the NM tag).")
- public boolean IS_BISULFITE_SEQUENCE = false;
-
- @Option(doc="Whether to output only aligned reads. ")
- public boolean ALIGNED_READS_ONLY = false;
-
- @Option(doc="The maximum number of insertions or deletions permitted for an alignment to be " +
- "included. Alignments with more than this many insertions or deletions will be ignored. " +
- "Set to -1 to allow any number of insertions or deletions.",
- shortName="MAX_GAPS")
- public int MAX_INSERTIONS_OR_DELETIONS = 1;
-
- @Option(doc="Reserved alignment attributes (tags starting with X, Y, or Z) that should be " +
- "brought over from the alignment data when merging.")
- public List<String> ATTRIBUTES_TO_RETAIN = new ArrayList<String>();
-
- @Option(doc="Attributes from the alignment record that should be removed when merging." +
- " This overrides ATTRIBUTES_TO_RETAIN if they share common tags.")
- public List<String> ATTRIBUTES_TO_REMOVE = new ArrayList<String>();
-
- @Option(shortName="R1_TRIM",
- doc="The number of bases trimmed from the beginning of read 1 prior to alignment")
- public int READ1_TRIM = 0;
-
- @Option(shortName="R2_TRIM",
- doc="The number of bases trimmed from the beginning of read 2 prior to alignment")
- public int READ2_TRIM = 0;
-
- @Option(shortName="ORIENTATIONS",
- doc="The expected orientation of proper read pairs. Replaces JUMP_SIZE",
- mutex = "JUMP_SIZE",
- optional=true)
- public List<SamPairUtil.PairOrientation> EXPECTED_ORIENTATIONS;
-
- @Option(doc="Use the aligner's idea of what a proper pair is rather than computing in this program.")
- public boolean ALIGNER_PROPER_PAIR_FLAGS = false;
-
- @Option(shortName=StandardOptionDefinitions.SORT_ORDER_SHORT_NAME,
- doc="The order in which the merged reads should be output.")
- public SortOrder SORT_ORDER = SortOrder.coordinate;
-
- @Option(doc="Strategy for selecting primary alignment when the aligner has provided more than one alignment " +
- "for a pair or fragment, and none are marked as primary, more than one is marked as primary, or the primary " +
- "alignment is filtered out for some reason. " +
- "BestMapq expects that multiple alignments will be correlated with HI tag, and prefers the pair of " +
- "alignments with the largest MAPQ, in the absence of a primary selected by the aligner. " +
- "EarliestFragment prefers the alignment which maps the earliest base in the read. Note that EarliestFragment " +
- "may not be used for paired reads. " +
- "BestEndMapq is appropriate for cases in which the aligner is not pair-aware, and does not output the HI tag. " +
- "It simply picks the alignment for each end with the highest MAPQ, and makes those alignments primary, regardless " +
- "of whether the two alignments make sense together." +
- "MostDistant is also for a non-pair-aware aligner, and picks the alignment pair with the largest insert size. " +
- "If all alignments would be chimeric, it picks the alignments for each end with the best MAPQ. For all algorithms, " +
- "ties are resolved arbitrarily.")
- public PrimaryAlignmentStrategy PRIMARY_ALIGNMENT_STRATEGY = PrimaryAlignmentStrategy.BestMapq;
-
- @Option(doc="For paired reads, soft clip the 3' end of each read if necessary so that it does not extend past the 5' end of its mate.")
- public boolean CLIP_OVERLAPPING_READS = true;
-
- @Option(doc="If false, do not write secondary alignments to output.")
- public boolean INCLUDE_SECONDARY_ALIGNMENTS = true;
-
- @Option(shortName="MC", optional=true, doc="Adds the mate CIGAR tag (MC) if true, does not if false.")
- public Boolean ADD_MATE_CIGAR = true;
-
- private static final Log log = Log.getInstance(MergeBamAlignment.class);
-
- /**
- * Mechanism to bridge between command line option and PrimaryAlignmentSelectionStrategy implementation.
- */
- enum PrimaryAlignmentStrategy {
- BestMapq(BestMapqPrimaryAlignmentSelectionStrategy.class),
- EarliestFragment(EarliestFragmentPrimaryAlignmentSelectionStrategy.class),
- BestEndMapq(BestEndMapqPrimaryAlignmentStrategy.class),
- MostDistant(MostDistantPrimaryAlignmentSelectionStrategy.class);
-
- private final Class<PrimaryAlignmentSelectionStrategy> clazz;
-
- PrimaryAlignmentStrategy(final Class<?> clazz) {
- this.clazz = (Class<PrimaryAlignmentSelectionStrategy>)clazz;
- }
-
- PrimaryAlignmentSelectionStrategy newInstance() {
- try {
- return clazz.newInstance();
- } catch (Exception e) {
- throw new PicardException("Trouble instantiating " + clazz.getName(), e);
- }
- }
- }
-
- /** Required main method implementation. */
- public static void main(final String[] argv) {
- System.exit(new MergeBamAlignment().instanceMain(argv));
- }
-
- @Override
- protected int doWork() {
- // Check the files are readable/writable
- SAMProgramRecord prod = null;
- if (PROGRAM_RECORD_ID != null) {
- prod = new SAMProgramRecord(PROGRAM_RECORD_ID);
- prod.setProgramVersion(PROGRAM_GROUP_VERSION);
- prod.setCommandLine(PROGRAM_GROUP_COMMAND_LINE);
- prod.setProgramName(PROGRAM_GROUP_NAME);
- }
- // TEMPORARY FIX until internal programs all specify EXPECTED_ORIENTATIONS
- if (JUMP_SIZE != null) {
- EXPECTED_ORIENTATIONS = Arrays.asList(SamPairUtil.PairOrientation.RF);
- }
- else if (EXPECTED_ORIENTATIONS == null || EXPECTED_ORIENTATIONS.isEmpty()) {
- EXPECTED_ORIENTATIONS = Arrays.asList(SamPairUtil.PairOrientation.FR);
- }
-
- final SamAlignmentMerger merger = new SamAlignmentMerger(UNMAPPED_BAM, OUTPUT,
- REFERENCE_SEQUENCE, prod, CLIP_ADAPTERS, IS_BISULFITE_SEQUENCE,
- ALIGNED_READS_ONLY, ALIGNED_BAM, MAX_INSERTIONS_OR_DELETIONS,
- ATTRIBUTES_TO_RETAIN, ATTRIBUTES_TO_REMOVE, READ1_TRIM, READ2_TRIM,
- READ1_ALIGNED_BAM, READ2_ALIGNED_BAM, EXPECTED_ORIENTATIONS, SORT_ORDER,
- PRIMARY_ALIGNMENT_STRATEGY.newInstance(), ADD_MATE_CIGAR);
- merger.setClipOverlappingReads(CLIP_OVERLAPPING_READS);
- merger.setMaxRecordsInRam(MAX_RECORDS_IN_RAM);
- merger.setKeepAlignerProperPairFlags(ALIGNER_PROPER_PAIR_FLAGS);
- merger.setIncludeSecondaryAlignments(INCLUDE_SECONDARY_ALIGNMENTS);
- merger.mergeAlignment();
- merger.close();
-
- return 0;
- }
-
- /**
- * Put any custom command-line validation in an override of this method.
- * clp is initialized at this point and can be used to print usage and access argv.
- * Any options set by command-line parser can be validated.
- * @return null if command line is valid. If command line is invalid, returns
- * an array of error messages to be written to the appropriate place.
- */
- protected String[] customCommandLineValidation() {
-
- if ((PROGRAM_RECORD_ID != null || PROGRAM_GROUP_VERSION != null ||
- PROGRAM_GROUP_COMMAND_LINE != null) &&
- (PROGRAM_RECORD_ID == null || PROGRAM_GROUP_VERSION == null ||
- PROGRAM_GROUP_COMMAND_LINE == null)) {
-
- return new String[] {"PROGRAM_RECORD_ID, PROGRAM_GROUP_VERSION, and " +
- "PROGRAM_GROUP_COMMAND_LINE must all be supplied or none should " +
- "be included."};
- }
-
- final boolean r1sExist = READ1_ALIGNED_BAM != null && READ1_ALIGNED_BAM.size() > 0;
- final boolean r2sExist = READ2_ALIGNED_BAM != null && READ2_ALIGNED_BAM.size() > 0;
- if ((r1sExist && !r2sExist) || (r2sExist && !r1sExist)) {
- return new String[] {"READ1_ALIGNED_BAM and READ2_ALIGNED_BAM " +
- "must both be supplied or neither should be included. For " +
- "single-end read use ALIGNED_BAM."};
- }
- if (ALIGNED_BAM == null || ALIGNED_BAM.size() == 0 && !(r1sExist && r2sExist)) {
- return new String[] {"Either ALIGNED_BAM or the combination of " +
- "READ1_ALIGNED_BAM and READ2_ALIGNED_BAM must be supplied."};
-
- }
-
- return null;
- }
-
-}
diff --git a/src/java/net/sf/picard/sam/MergeSamFiles.java b/src/java/net/sf/picard/sam/MergeSamFiles.java
deleted file mode 100644
index f17b3f4..0000000
--- a/src/java/net/sf/picard/sam/MergeSamFiles.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Reads a SAM or BAM file and combines the output to one file
- *
- * @author Tim Fennell
- */
-public class MergeSamFiles extends CommandLineProgram {
- private static final Log log = Log.getInstance(MergeSamFiles.class);
-
- // Usage and parameters
- @Usage
- public String USAGE = "Merges multiple SAM/BAM files into one file.\n";
-
- @Option(shortName="I", doc="SAM or BAM input file", minElements=1)
- public List<File> INPUT = new ArrayList<File>();
-
- @Option(shortName="O", doc="SAM or BAM file to write merged result to")
- public File OUTPUT;
-
- @Option(shortName=StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, doc="Sort order of output file", optional=true)
- public SAMFileHeader.SortOrder SORT_ORDER = SAMFileHeader.SortOrder.coordinate;
-
- @Option(doc="If true, assume that the input files are in the same sort order as the requested output sort order, even if their headers say otherwise.",
- shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
- public boolean ASSUME_SORTED = false;
-
- @Option(shortName="MSD", doc="Merge the sequence dictionaries", optional=true)
- public boolean MERGE_SEQUENCE_DICTIONARIES = false;
-
- @Option(doc="Option to create a background thread to encode, " +
- "compress and write to disk the output file. The threaded version uses about 20% more CPU and decreases " +
- "runtime by ~20% when writing out a compressed BAM file.")
- public boolean USE_THREADING = false;
-
- @Option(doc="Comment(s) to include in the merged output file's header.", optional=true, shortName="CO")
- public List<String> COMMENT = new ArrayList<String>();
-
- private static final int PROGRESS_INTERVAL = 1000000;
-
- /** Required main method implementation. */
- public static void main(final String[] argv) {
- System.exit(new MergeSamFiles().instanceMain(argv));
- }
-
- /** Combines multiple SAM/BAM files into one. */
- @Override
- protected int doWork() {
- boolean matchedSortOrders = true;
-
- // Open the files for reading and writing
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- {
- SAMSequenceDictionary dict = null; // Used to try and reduce redundant SDs in memory
-
- for (final File inFile : INPUT) {
- IoUtil.assertFileIsReadable(inFile);
- final SAMFileReader in = new SAMFileReader(inFile);
- readers.add(in);
- headers.add(in.getFileHeader());
-
- // A slightly hackish attempt to keep memory consumption down when merging multiple files with
- // large sequence dictionaries (10,000s of sequences). If the dictionaries are identical, then
- // replace the duplicate copies with a single dictionary to reduce the memory footprint.
- if (dict == null) {
- dict = in.getFileHeader().getSequenceDictionary();
- }
- else if (dict.equals(in.getFileHeader().getSequenceDictionary())) {
- in.getFileHeader().setSequenceDictionary(dict);
- }
-
- matchedSortOrders = matchedSortOrders && in.getFileHeader().getSortOrder() == SORT_ORDER;
- }
- }
-
- // If all the input sort orders match the output sort order then just merge them and
- // write on the fly, otherwise setup to merge and sort before writing out the final file
- IoUtil.assertFileIsWritable(OUTPUT);
- final boolean presorted;
- final SAMFileHeader.SortOrder headerMergerSortOrder;
- final boolean mergingSamRecordIteratorAssumeSorted;
-
- if (matchedSortOrders || SORT_ORDER == SAMFileHeader.SortOrder.unsorted || ASSUME_SORTED) {
- log.info("Input files are in same order as output so sorting to temp directory is not needed.");
- headerMergerSortOrder = SORT_ORDER;
- mergingSamRecordIteratorAssumeSorted = ASSUME_SORTED;
- presorted = true;
- }
- else {
- log.info("Sorting input files using temp directory " + TMP_DIR);
- headerMergerSortOrder = SAMFileHeader.SortOrder.unsorted;
- mergingSamRecordIteratorAssumeSorted = false;
- presorted = false;
- }
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(headerMergerSortOrder, headers, MERGE_SEQUENCE_DICTIONARIES);
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, mergingSamRecordIteratorAssumeSorted);
- final SAMFileHeader header = headerMerger.getMergedHeader();
- for (final String comment : COMMENT) {
- header.addComment(comment);
- }
- header.setSortOrder(SORT_ORDER);
- final SAMFileWriterFactory samFileWriterFactory = new SAMFileWriterFactory();
- if (USE_THREADING) {
- samFileWriterFactory.setUseAsyncIo(true);
- }
- final SAMFileWriter out = samFileWriterFactory.makeSAMOrBAMWriter(header, presorted, OUTPUT);
-
- // Lastly loop through and write out the records
- final ProgressLogger progress = new ProgressLogger(log, PROGRESS_INTERVAL);
- while (iterator.hasNext()) {
- final SAMRecord record = iterator.next();
- out.addAlignment(record);
- progress.record(record);
- }
-
- log.info("Finished reading inputs.");
- out.close();
- return 0;
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- if (CREATE_INDEX && SORT_ORDER != SAMFileHeader.SortOrder.coordinate) {
- return new String[]{"Can't CREATE_INDEX unless SORT_ORDER is coordinate"};
- }
- return null;
- }
-
-}
diff --git a/src/java/net/sf/picard/sam/MergingSamRecordIterator.java b/src/java/net/sf/picard/sam/MergingSamRecordIterator.java
deleted file mode 100644
index 359b706..0000000
--- a/src/java/net/sf/picard/sam/MergingSamRecordIterator.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-
-import java.util.*;
-import java.lang.reflect.Constructor;
-
-import net.sf.samtools.*;
-import net.sf.samtools.util.CloseableIterator;
-
-/**
- * Provides an iterator interface for merging multiple underlying iterators into a single
- * iterable stream. The underlying iterators/files must all have the same sort order unless
- * the requested output format is unsorted, in which case any combination is valid.
- */
-public class MergingSamRecordIterator implements CloseableIterator<SAMRecord> {
- private final PriorityQueue<ComparableSamRecordIterator> pq;
- private final SamFileHeaderMerger samHeaderMerger;
- private final Collection<SAMFileReader> readers;
- private final SAMFileHeader.SortOrder sortOrder;
- private final SAMRecordComparator comparator;
-
- private boolean initialized = false;
-
- /**
- * Constructs a new merging iterator with the same set of readers and sort order as
- * provided by the header merger parameter.
- * @param headerMerger The merged header and contents of readers.
- * @param forcePresorted True to ensure that the iterator checks the headers of the readers for appropriate sort order.
- * @deprecated replaced by (SamFileHeaderMerger, Collection<SAMFileReader>, boolean)
- */
- public MergingSamRecordIterator(final SamFileHeaderMerger headerMerger, final boolean forcePresorted) {
- this(headerMerger, headerMerger.getReaders(), forcePresorted);
- }
-
- /**
- * Constructs a new merging iterator with the same set of readers and sort order as
- * provided by the header merger parameter.
- * @param headerMerger The merged header and contents of readers.
- * @param assumeSorted false ensures that the iterator checks the headers of the readers for appropriate sort order.
- */
- public MergingSamRecordIterator(final SamFileHeaderMerger headerMerger, Collection<SAMFileReader> readers, final boolean assumeSorted) {
- this.samHeaderMerger = headerMerger;
- this.sortOrder = headerMerger.getMergedHeader().getSortOrder();
- this.comparator = getComparator();
- this.readers = readers;
-
- this.pq = new PriorityQueue<ComparableSamRecordIterator>(readers.size());
-
- for (final SAMFileReader reader : readers) {
- if(!samHeaderMerger.getHeaders().contains(reader.getFileHeader()))
- throw new PicardException("All iterators to be merged must be accounted for in the SAM header merger");
- if (!assumeSorted && this.sortOrder != SAMFileHeader.SortOrder.unsorted &&
- reader.getFileHeader().getSortOrder() != this.sortOrder){
- throw new PicardException("Files are not compatible with sort order");
- }
- }
- }
-
- /**
- * Add a set of SAM file iterators to the merging iterator. Use this to restrict the merged iteration to a given genomic interval,
- * rather than iterating over every read in the backing file or stream.
- * @param headerMerger The merged header and contents of readers.
- * @param iterators Iterator traversing over reader contents.
- */
- public MergingSamRecordIterator(final SamFileHeaderMerger headerMerger, final Map<SAMFileReader,CloseableIterator<SAMRecord>> iterators, final boolean assumeSorted) {
- this(headerMerger,iterators.keySet(),assumeSorted);
- for (final Map.Entry<SAMFileReader,CloseableIterator<SAMRecord>> mapping : iterators.entrySet())
- addIfNotEmpty(new ComparableSamRecordIterator(mapping.getKey(),mapping.getValue(),comparator));
- initialized = true;
- }
-
- private void startIterationIfRequired() {
- if(initialized)
- return;
- for(final SAMFileReader reader: readers)
- addIfNotEmpty(new ComparableSamRecordIterator(reader,reader.iterator(),comparator));
- initialized = true;
- }
-
- /**
- * Close down all open iterators.
- */
- public void close() {
- // Iterators not in the priority queue have already been closed; only close down the iterators that are still in the priority queue.
- for(CloseableIterator<SAMRecord> iterator: pq)
- iterator.close();
- }
-
- /** Returns true if any of the underlying iterators has more records, otherwise false. */
- public boolean hasNext() {
- startIterationIfRequired();
- return !this.pq.isEmpty();
- }
-
- /** Returns the next record from the top most iterator during merging. */
- public SAMRecord next() {
- startIterationIfRequired();
-
- final ComparableSamRecordIterator iterator = this.pq.poll();
- final SAMRecord record = iterator.next();
- addIfNotEmpty(iterator);
- record.setHeader(this.samHeaderMerger.getMergedHeader());
-
- // Fix the read group if needs be
- if (this.samHeaderMerger.hasReadGroupCollisions()) {
- final String oldGroupId = (String) record.getAttribute(ReservedTagConstants.READ_GROUP_ID);
- if (oldGroupId != null ) {
- final String newGroupId = this.samHeaderMerger.getReadGroupId(iterator.getReader().getFileHeader(),oldGroupId);
- record.setAttribute(ReservedTagConstants.READ_GROUP_ID, newGroupId);
- }
- }
-
- // Fix the program group if needs be
- if (this.samHeaderMerger.hasProgramGroupCollisions()) {
- final String oldGroupId = (String) record.getAttribute(ReservedTagConstants.PROGRAM_GROUP_ID);
- if (oldGroupId != null ) {
- final String newGroupId = this.samHeaderMerger.getProgramGroupId(iterator.getReader().getFileHeader(),oldGroupId);
- record.setAttribute(ReservedTagConstants.PROGRAM_GROUP_ID, newGroupId);
- }
- }
-
- // Fix up the sequence indexes if needs be
- if (this.samHeaderMerger.hasMergedSequenceDictionary()) {
- if (record.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- record.setReferenceIndex(this.samHeaderMerger.getMergedSequenceIndex(iterator.getReader().getFileHeader(),record.getReferenceIndex()));
- }
-
- if (record.getReadPairedFlag() && record.getMateReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- record.setMateReferenceIndex(this.samHeaderMerger.getMergedSequenceIndex(iterator.getReader().getFileHeader(),record.getMateReferenceIndex()));
- }
- }
-
- return record;
- }
-
- /**
- * Adds iterator to priority queue. If the iterator has more records it is added
- * otherwise it is closed and not added.
- */
- private void addIfNotEmpty(final ComparableSamRecordIterator iterator) {
- if (iterator.hasNext()) {
- pq.offer(iterator);
- }
- else {
- iterator.close();
- }
- }
-
- /** Unsupported operation. */
- public void remove() {
- throw new UnsupportedOperationException("MergingSAMRecorderIterator.remove()");
- }
-
- /**
- * Get the right comparator for a given sort order (coordinate, alphabetic). In the
- * case of "unsorted" it will return a comparator that gives an arbitrary but reflexive
- * ordering.
- */
- private SAMRecordComparator getComparator() {
- // For unsorted build a fake comparator that compares based on object ID
- if (this.sortOrder == SAMFileHeader.SortOrder.unsorted) {
- return new SAMRecordComparator() {
- public int fileOrderCompare(final SAMRecord lhs, final SAMRecord rhs) {
- return System.identityHashCode(lhs) - System.identityHashCode(rhs);
- }
-
- public int compare(final SAMRecord lhs, final SAMRecord rhs) {
- return fileOrderCompare(lhs, rhs);
- }
- };
- }
- if (samHeaderMerger.hasMergedSequenceDictionary() && sortOrder.equals(SAMFileHeader.SortOrder.coordinate)) {
- return new MergedSequenceDictionaryCoordinateOrderComparator();
- }
-
- // Otherwise try and figure out what kind of comparator to return and build it
- return this.sortOrder.getComparatorInstance();
- }
-
- /** Returns the merged header that the merging iterator is working from. */
- public SAMFileHeader getMergedHeader() {
- return this.samHeaderMerger.getMergedHeader();
- }
-
- /**
- * Ugh. Basically does a regular coordinate compare, but looks up the sequence indices in the merged
- * sequence dictionary. I hate the fact that this extends SAMRecordCoordinateComparator, but it avoids
- * more copy & paste.
- */
- private class MergedSequenceDictionaryCoordinateOrderComparator extends SAMRecordCoordinateComparator {
-
- public int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
- final int referenceIndex1 = getReferenceIndex(samRecord1);
- final int referenceIndex2 = getReferenceIndex(samRecord2);
- if (referenceIndex1 != referenceIndex2) {
- if (referenceIndex1 == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- return 1;
- } else if (referenceIndex2 == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- return -1;
- } else {
- return referenceIndex1 - referenceIndex2;
- }
- }
- if (referenceIndex1 == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- // Both are unmapped.
- return 0;
- }
- return samRecord1.getAlignmentStart() - samRecord2.getAlignmentStart();
- }
-
- private int getReferenceIndex(final SAMRecord samRecord) {
- if (samRecord.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getReferenceIndex());
- }
- if (samRecord.getMateReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- return samHeaderMerger.getMergedSequenceIndex(samRecord.getHeader(), samRecord.getMateReferenceIndex());
- }
- return SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX;
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/MostDistantPrimaryAlignmentSelectionStrategy.java b/src/java/net/sf/picard/sam/MostDistantPrimaryAlignmentSelectionStrategy.java
deleted file mode 100644
index 2641939..0000000
--- a/src/java/net/sf/picard/sam/MostDistantPrimaryAlignmentSelectionStrategy.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMUtils;
-import net.sf.samtools.util.CoordMath;
-
-import java.util.*;
-
-/**
- * For a paired-end aligner that aligns each end independently, select the pair of alignments that result
- * in the largest insert size. If such a pair of alignments cannot be found, either because one end is not aligned,
- * or because all alignment pairs are chimeric, then select the best MAPQ for each end independently.
- *
- * The primary alignments are then correlated so that their mate info points to each
- * other, but all non-primary alignments are uncorrelated.
- */
-public class MostDistantPrimaryAlignmentSelectionStrategy implements PrimaryAlignmentSelectionStrategy {
- // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
- // multiple alignments with equal mapping quality.
- private final Random random = new Random(1);
-
- @Override
- public void pickPrimaryAlignment(final HitsForInsert hitsForInsert) {
- final BestEndAlignmentsAccumulator firstEndBest = new BestEndAlignmentsAccumulator();
- final BestEndAlignmentsAccumulator secondEndBest = new BestEndAlignmentsAccumulator();
- final CollectionUtil.MultiMap<Integer, SAMRecord> firstEndBySequence =
- new CollectionUtil.MultiMap<Integer, SAMRecord>();
- final BestPairAlignmentsAccumulator pairBest = new BestPairAlignmentsAccumulator();
-
- for (final SAMRecord rec : hitsForInsert.firstOfPairOrFragment) {
- if (rec.getReadUnmappedFlag()) throw new IllegalStateException();
- firstEndBest.considerBest(rec);
- firstEndBySequence.append(rec.getReferenceIndex(), rec);
- }
-
- for (final SAMRecord secondEnd: hitsForInsert.secondOfPair) {
- if (secondEnd.getReadUnmappedFlag()) throw new IllegalStateException();
- secondEndBest.considerBest(secondEnd);
- final Collection<SAMRecord> firstEnds = firstEndBySequence.get(secondEnd.getReferenceIndex());
- if (firstEnds != null) {
- for (final SAMRecord firstEnd : firstEnds) {
- pairBest.considerBest(firstEnd, secondEnd);
- }
- }
- }
-
- final SAMRecord bestFirstEnd;
- final SAMRecord bestSecondEnd;
- if (pairBest.hasBest()) {
- final Map.Entry<SAMRecord, SAMRecord> pairEntry = pickRandomlyFromList(pairBest.bestAlignmentPairs);
- bestFirstEnd = pairEntry.getKey();
- bestSecondEnd = pairEntry.getValue();
- } else {
- if (firstEndBest.hasBest()) {
- bestFirstEnd = pickRandomlyFromList(firstEndBest.bestAlignments);
- } else {
- bestFirstEnd = null;
- }
- if (secondEndBest.hasBest()) {
- bestSecondEnd = pickRandomlyFromList(secondEndBest.bestAlignments);
- } else {
- bestSecondEnd = null;
- }
- }
-
- if (hitsForInsert.firstOfPairOrFragment.isEmpty() != (bestFirstEnd == null)) {
- throw new IllegalStateException("Should not happen");
- }
- if (hitsForInsert.secondOfPair.isEmpty() != (bestSecondEnd == null)) {
- throw new IllegalStateException("Should not happen");
- }
- if (bestFirstEnd != null) {
- moveToHead(hitsForInsert.firstOfPairOrFragment, bestFirstEnd);
- }
- if (bestSecondEnd != null) {
- moveToHead(hitsForInsert.secondOfPair, bestSecondEnd);
- }
- hitsForInsert.setPrimaryAlignment(0);
-
- // For non-primary alignments, de-correlate them so that the mate fields don't point at some
- // arbitrary alignment for the other end.
-
- // No non-primary alignments for one of the ends so nothing to do.
- if (hitsForInsert.firstOfPairOrFragment.size() <= 1 || hitsForInsert.secondOfPair.size() <= 1) return;
- final int amountToSlide = hitsForInsert.firstOfPairOrFragment.size() - 1;
- for (int i = 0; i < amountToSlide; ++i) {
- hitsForInsert.secondOfPair.add(1, null);
- }
-
-
- }
-
- private <T> T pickRandomlyFromList(final List<T> list) {
- return list.get(random.nextInt(list.size()));
- }
-
- // Uses reference equality, not .equals()
- private void moveToHead(final List<SAMRecord> list, final SAMRecord rec) {
- if (list.get(0) == rec) return;
- for (int i = 1; i < list.size(); ++i) {
- if (list.get(i) == rec) {
- list.remove(i);
- list.add(0, rec);
- return;
- }
- }
- throw new IllegalStateException("Should not be reached");
- }
-
- private static class BestEndAlignmentsAccumulator {
- public int bestMapq = -1;
- public List<SAMRecord> bestAlignments = new ArrayList<SAMRecord>();
-
- public void considerBest(final SAMRecord rec) {
- if (bestMapq == -1) {
- bestMapq = rec.getMappingQuality();
- bestAlignments.add(rec);
- } else {
- final int cmp = SAMUtils.compareMapqs(bestMapq, rec.getMappingQuality());
- if (cmp < 0) {
- bestMapq = rec.getMappingQuality();
- bestAlignments.clear();
- bestAlignments.add(rec);
- } else if (cmp == 0) {
- bestAlignments.add(rec);
- }
- }
- }
-
- public boolean hasBest() {
- return bestMapq != -1;
- }
- }
-
- private static class BestPairAlignmentsAccumulator {
- public int bestDistance = -1;
- public int bestPairMapq = -1;
- public List<Map.Entry<SAMRecord, SAMRecord>> bestAlignmentPairs =
- new ArrayList<Map.Entry<SAMRecord, SAMRecord>>();
-
- public void considerBest(final SAMRecord firstEnd, final SAMRecord secondEnd) {
- final int thisPairMapq = SAMUtils.combineMapqs(firstEnd.getMappingQuality(), secondEnd.getMappingQuality());
- final int thisDistance = CoordMath.getLength(Math.min(firstEnd.getAlignmentStart(), secondEnd.getAlignmentStart()),
- Math.max(firstEnd.getAlignmentEnd(), secondEnd.getAlignmentEnd()));
- if (thisDistance > bestDistance || (thisDistance == bestDistance && thisPairMapq > bestPairMapq)) {
- bestDistance = thisDistance;
- bestPairMapq = thisPairMapq;
- bestAlignmentPairs.clear();
- bestAlignmentPairs.add(new AbstractMap.SimpleEntry<SAMRecord, SAMRecord>(firstEnd, secondEnd));
- } else if (thisDistance == bestDistance && thisPairMapq == bestPairMapq) {
- bestAlignmentPairs.add(new AbstractMap.SimpleEntry<SAMRecord, SAMRecord>(firstEnd, secondEnd));
- }
- }
-
- public boolean hasBest() {
- return bestDistance != -1;
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/MultiHitAlignedReadIterator.java b/src/java/net/sf/picard/sam/MultiHitAlignedReadIterator.java
deleted file mode 100644
index f7fa051..0000000
--- a/src/java/net/sf/picard/sam/MultiHitAlignedReadIterator.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.filter.FilteringIterator;
-import net.sf.picard.filter.SamRecordFilter;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.util.*;
-
-import static net.sf.picard.sam.HitsForInsert.NumPrimaryAlignmentState;
-
-
-/**
- * Iterate over queryname-sorted SAM, and return each group of reads with the same queryname. Unmapped reads
- * are filtered out, as are alignments that don't seem to match any part of the reference.
- * If there are multiple hits for the same read, and the first and second ends need to be correlated,
- * then they are sorted by hit index. Supplemental alignments are discarded, with a logged message.
- * A set of hits for a single query may then be filtered with a caller-supplied filter, which will remove any
- * alignments that do not pass the filter. If the primary alignment is removed, the best-mapping secondary alignment
- * or alignment pair will be marked as primary.
- *
- *
- * @throws IllegalStateException if the input is not queryname-sorted.
- */
-class MultiHitAlignedReadIterator implements CloseableIterator<HitsForInsert> {
- private final PeekableIterator<SAMRecord> peekIterator;
- private final SAMRecordQueryNameComparator queryNameComparator = new SAMRecordQueryNameComparator();
- private final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy;
-
- private HitsForInsert theNext = null;
-
- /**
- *
- * @param querynameOrderIterator
- * @param primaryAlignmentSelectionStrategy Algorithm for selecting primary alignment when it is not clear from
- * the input what should be primary.
- */
- MultiHitAlignedReadIterator(final CloseableIterator<SAMRecord> querynameOrderIterator,
- final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy) {
- this.primaryAlignmentSelectionStrategy = primaryAlignmentSelectionStrategy;
- peekIterator = new PeekableIterator<SAMRecord>(new FilteringIterator(querynameOrderIterator,
- new SamRecordFilter() {
- // Filter unmapped reads.
- public boolean filterOut(final SAMRecord record) {
- return record.getReadUnmappedFlag() || SAMUtils.cigarMapsNoBasesToRef(record.getCigar());
- }
- public boolean filterOut(final SAMRecord first, final SAMRecord second) {
- return ((first.getReadUnmappedFlag() || SAMUtils.cigarMapsNoBasesToRef(first.getCigar()))
- && (second.getReadUnmappedFlag() || SAMUtils.cigarMapsNoBasesToRef(second.getCigar())));
- }
- }));
-
-
- advance();
- }
-
- public void close() {
- peekIterator.close();
- }
-
- public boolean hasNext() {
- return theNext != null;
- }
-
- /**
- * @throws IllegalStateException if the input is not queryname-sorted.
- */
- public HitsForInsert next() {
- if (!hasNext()) throw new NoSuchElementException();
- final HitsForInsert ret = theNext;
- advance();
- return ret;
- }
-
- private void advance() {
- while (peekIterator.hasNext()) {
- theNext = nextMaybeEmpty();
- if (theNext.numHits() > 0) return;
- }
- theNext = null;
- }
-
- private HitsForInsert nextMaybeEmpty() {
- if (!peekIterator.hasNext()) throw new IllegalStateException();
- final String readName = peekIterator.peek().getReadName();
- final HitsForInsert hits = new HitsForInsert();
-
- Boolean isPaired = null;
-
- // Accumulate the alignments matching readName.
- do {
- final SAMRecord rec = peekIterator.next();
- replaceHardWithSoftClips(rec);
- // It is critical to do this here, because SamAlignmentMerger uses this exception to determine
- // if the aligned input needs to be sorted.
- if (peekIterator.hasNext() && queryNameComparator.fileOrderCompare(rec, peekIterator.peek()) > 0) {
- throw new IllegalStateException("Underlying iterator is not queryname sorted: " +
- rec + " > " + peekIterator.peek());
- }
-
- if (isPaired == null) {
- isPaired = rec.getReadPairedFlag();
- } else if (isPaired != rec.getReadPairedFlag()) {
- throw new PicardException("Got a mix of paired and unpaired alignments for read " + readName);
- }
-
- // Records w/ a supplemental flag are stashed to the side until the primary alignment has
- // been determined, and then re-added into the process later
- if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) {
- if (rec.getSupplementaryAlignmentFlag()) {
- hits.addSupplementalFirstOfPairOrFragment(rec);
- } else {
- hits.addFirstOfPairOrFragment(rec);
- }
- } else if (rec.getSecondOfPairFlag()) {
- if (rec.getSupplementaryAlignmentFlag()) {
- hits.addSupplementalSecondOfPair(rec);
- } else {
- hits.addSecondOfPair(rec);
- }
- } else throw new PicardException("Read is marked as pair but neither first or second: " + readName);
- } while (peekIterator.hasNext() && peekIterator.peek().getReadName().equals(readName));
-
- // If there is no more than one alignment for each end, no need to do any coordination.
- if (hits.numHits() <= 1) {
- // No HI tags needed if only a single hit
- if (hits.getFirstOfPair(0) != null) {
- hits.getFirstOfPair(0).setAttribute(SAMTag.HI.name(), null);
- hits.getFirstOfPair(0).setNotPrimaryAlignmentFlag(false);
- }
- if (hits.getSecondOfPair(0) != null) {
- hits.getSecondOfPair(0).setAttribute(SAMTag.HI.name(), null);
- hits.getSecondOfPair(0).setNotPrimaryAlignmentFlag(false);
- }
- } else {
- primaryAlignmentSelectionStrategy.pickPrimaryAlignment(hits);
- }
-
- // Used to check that alignments for first and second were correlated, but this is no longer required.
- return hits;
- }
-
- /** Replaces hard clips with soft clips and fills in bases and qualities with dummy values as needed. */
- private void replaceHardWithSoftClips(final SAMRecord rec) {
- if (rec.getReadUnmappedFlag()) return;
- if (rec.getCigar().isEmpty()) return;
-
- List<CigarElement> elements = rec.getCigar().getCigarElements();
- final CigarElement first = elements.get(0);
- final CigarElement last = elements.size() == 1 ? null : elements.get(elements.size()-1);
- final int startHardClip = first.getOperator() == CigarOperator.H ? first.getLength() : 0;
- final int endHardClip = (last != null && last.getOperator() == CigarOperator.H) ? last.getLength() : 0;
-
- if (startHardClip + endHardClip > 0) {
- final int len = rec.getReadBases().length + startHardClip + endHardClip;
-
- // Fix the basecalls
- final byte[] bases = new byte[len];
- Arrays.fill(bases, (byte) 'N');
- System.arraycopy(rec.getReadBases(), 0, bases, startHardClip, rec.getReadBases().length);
-
- // Fix the quality scores
- final byte[] quals = new byte[len];
- Arrays.fill(quals, (byte) 2 );
- System.arraycopy(rec.getBaseQualities(), 0, quals, startHardClip, rec.getBaseQualities().length);
-
- // Fix the cigar!
- elements = new ArrayList<CigarElement>(elements); // make it modifiable
- if (startHardClip > 0) elements.set(0, new CigarElement(first.getLength(), CigarOperator.S));
- if (endHardClip > 0) elements.set(elements.size()-1, new CigarElement(last.getLength(), CigarOperator.S));
-
- // Set the update structures on the new record
- rec.setReadBases(bases);
- rec.setBaseQualities(quals);
- rec.setCigar(new Cigar(elements));
- }
- }
-
- /** Unsupported operation. */
- public void remove() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/src/java/net/sf/picard/sam/PrimaryAlignmentSelectionStrategy.java b/src/java/net/sf/picard/sam/PrimaryAlignmentSelectionStrategy.java
deleted file mode 100644
index b3a9024..0000000
--- a/src/java/net/sf/picard/sam/PrimaryAlignmentSelectionStrategy.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-/**
- * Given a set of alignments for a read or read pair, mark one alignment as primary, according to whatever
- * strategy is appropriate. Any pre-existing primary designation is ignored, so if the aligner has selected an
- * appropriate primary alignment, this class should not be called.
- */
-public interface PrimaryAlignmentSelectionStrategy {
- /**
- * When this method returns, one alignment has been marked as primary according to the implementation's strategy.
- *
- */
- void pickPrimaryAlignment(HitsForInsert hitsForInsert);
-}
diff --git a/src/java/net/sf/picard/sam/RAMReadEndsMap.java b/src/java/net/sf/picard/sam/RAMReadEndsMap.java
deleted file mode 100644
index 1e6d815..0000000
--- a/src/java/net/sf/picard/sam/RAMReadEndsMap.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-/**
- * Map from String to ReadEnds object. RAM-based implementation.
- *
- * @author alecw at broadinstitute.org
- */
-class RAMReadEndsMap implements ReadEndsMap {
-
- /**
- * Index of this list is sequence index. Value is map from String {read group id:read name} to ReadEnds.
- * When a ReadEnds is put into this container, it is stored according to the sequenceIndex of the mate
- */
- private List<Map<String, ReadEnds>> mapPerSequence = new ArrayList<Map<String, ReadEnds>>();
-
- public ReadEnds remove(int mateSequenceIndex, String key) {
- if (mateSequenceIndex >= mapPerSequence.size()) {
- return null;
- }
- return mapPerSequence.get(mateSequenceIndex).remove(key);
- }
-
- public void put(int mateSequenceIndex, String key, ReadEnds readEnds) {
- while (mateSequenceIndex >= mapPerSequence.size()) {
- mapPerSequence.add(new HashMap<String, ReadEnds>());
- }
- mapPerSequence.get(mateSequenceIndex).put(key, readEnds);
- }
-
- public int size() {
- int total = 0;
- for (Map<String, ReadEnds> map : mapPerSequence) {
- total += map.size();
- }
- return total;
- }
-
- /**
- * @return number of elements stored in RAM. Always <= size()
- */
- public int sizeInRam() {
- return size();
- }
-}
diff --git a/src/java/net/sf/picard/sam/ReadEnds.java b/src/java/net/sf/picard/sam/ReadEnds.java
deleted file mode 100644
index 48718f0..0000000
--- a/src/java/net/sf/picard/sam/ReadEnds.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-/** Little struct-like class to hold read pair (and fragment) end data for MarkDuplicates. */
-class ReadEnds implements MarkDuplicates.PhysicalLocation {
- public static final int SIZE_OF = (1*1) + (2*1) + (4*4) + (8*2) + 2 + 1 + 2 + 2
- + 8 + // last 8 == reference overhead
- 13; // This is determined experimentally with JProfiler
-
- public static final byte F=0, R=1, FF=2, FR=3, RR=4, RF=5;
-
- short libraryId;
- short score = 0;
- byte orientation;
- int read1Sequence = -1;
- int read1Coordinate = -1;
- long read1IndexInFile = -1;
- int read2Sequence = -1;
- int read2Coordinate = -1;
- long read2IndexInFile = -1;
-
- // Information used to detect optical dupes
- short readGroup = -1;
- short tile = -1;
- short x = -1, y = -1;
-
-
- boolean isPaired() { return this.read2Sequence != -1; }
-
- public short getReadGroup() { return this.readGroup; }
- public void setReadGroup(short readGroup) { this.readGroup = readGroup; }
-
- public short getTile() { return this.tile; }
- public void setTile(short tile) { this.tile = tile; }
-
- public short getX() { return this.x; }
- public void setX(short x) { this.x = x; }
-
- public short getY() { return this.y; }
- public void setY(short y) { this.y = y; }
-}
diff --git a/src/java/net/sf/picard/sam/ReadEndsCodec.java b/src/java/net/sf/picard/sam/ReadEndsCodec.java
deleted file mode 100644
index a3931fc..0000000
--- a/src/java/net/sf/picard/sam/ReadEndsCodec.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.util.SortingCollection;
-import net.sf.picard.PicardException;
-
-import java.io.*;
-
-/** Coded for ReadEnds that just outputs the primitive fields and reads them back. */
-class ReadEndsCodec implements SortingCollection.Codec<ReadEnds> {
- private DataInputStream in;
- private DataOutputStream out;
-
- public SortingCollection.Codec<ReadEnds> clone() {
- return new ReadEndsCodec();
- }
-
- public void setOutputStream(final OutputStream os) { this.out = new DataOutputStream(os); }
- public void setInputStream(final InputStream is) { this.in = new DataInputStream(is); }
-
- public DataInputStream getInputStream() {
- return in;
- }
-
- public DataOutputStream getOutputStream() {
- return out;
- }
-
- public void encode(final ReadEnds read) {
- try {
- this.out.writeShort(read.score);
- this.out.writeShort(read.libraryId);
- this.out.writeByte(read.orientation);
- this.out.writeInt(read.read1Sequence);
- this.out.writeInt(read.read1Coordinate);
- this.out.writeLong(read.read1IndexInFile);
- this.out.writeInt(read.read2Sequence);
-
- if (read.orientation > ReadEnds.R) {
- this.out.writeInt(read.read2Coordinate);
- this.out.writeLong(read.read2IndexInFile);
- }
-
- this.out.writeShort(read.readGroup);
- this.out.writeShort(read.tile);
- this.out.writeShort(read.x);
- this.out.writeShort(read.y);
- }
- catch (IOException ioe) {
- throw new PicardException("Exception writing ReadEnds to file.", ioe);
- }
- }
-
- public ReadEnds decode() {
- final ReadEnds read = new ReadEnds();
- try {
- // If the first read results in an EOF we've exhausted the stream
- try { read.score = this.in.readShort(); }
- catch (EOFException eof) { return null; }
-
- read.libraryId = this.in.readShort();
- read.orientation = this.in.readByte();
- read.read1Sequence = this.in.readInt();
- read.read1Coordinate = this.in.readInt();
- read.read1IndexInFile = this.in.readLong();
- read.read2Sequence = this.in.readInt();
-
- if (read.orientation > ReadEnds.R) {
- read.read2Coordinate = this.in.readInt();
- read.read2IndexInFile = this.in.readLong();
- }
-
- read.readGroup = this.in.readShort();
- read.tile = this.in.readShort();
- read.x = this.in.readShort();
- read.y = this.in.readShort();
-
- return read;
- }
- catch (IOException ioe) {
- throw new PicardException("Exception writing ReadEnds to file.", ioe);
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/ReadEndsMap.java b/src/java/net/sf/picard/sam/ReadEndsMap.java
deleted file mode 100644
index 68e3296..0000000
--- a/src/java/net/sf/picard/sam/ReadEndsMap.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-/**
- * Interface for storing and retrieving ReadEnds objects. An implementation may be disk-based to
- * reduce memory footprint.
- */
-public interface ReadEndsMap {
- /**
- * Remove element with given key from the map. Because an implementation may be disk-based,
- * the object returned may not be the same object that was put into the map
- * @param mateSequenceIndex must agree with the value used when the object was put into the map
- * @param key typically, concatenation of read group ID and read name
- * @return null if the key is not found, otherwise the object removed.
- */
- ReadEnds remove(int mateSequenceIndex, String key);
-
- /**
- * Store the element in the map with the given key. It is assumed that the element
- * is not already present in the map.
- * @param mateSequenceIndex use to optimize storage & retrieval. The same value must be used when trying
- * to remove this element. It is not valid to store the same key with two different mateSequenceIndexes.
- * @param key typically, concatenation of read group ID and read name
- * @param readEnds the object to be stored
- */
- void put(int mateSequenceIndex, String key, ReadEnds readEnds);
-
- /**
- * @return number of elements stored in map
- */
- int size();
-
- /**
- * @return number of elements stored in RAM. Always <= size()
- */
- int sizeInRam();
-}
diff --git a/src/java/net/sf/picard/sam/ReorderSam.java b/src/java/net/sf/picard/sam/ReorderSam.java
deleted file mode 100644
index 1847f09..0000000
--- a/src/java/net/sf/picard/sam/ReorderSam.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.reference.ReferenceSequenceFileFactory;
-import net.sf.picard.util.Log;
-import net.sf.samtools.*;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Reorders a SAM/BAM input file according to the order of contigs in a second reference sequence
- *
- * @author mdepristo
- */
-public class ReorderSam extends CommandLineProgram {
- @Usage(programVersion="1.0")
- public String USAGE = "Not to be confused with SortSam which sorts a SAM or BAM file with a valid sequence dictionary, " +
- "ReorderSam reorders reads in a SAM/BAM file to match the contig ordering in a provided reference file, " +
- "as determined by exact name matching of contigs. Reads mapped to contigs absent in the new " +
- "reference are dropped. Runs substantially faster if the input is an indexed BAM file.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input file (bam or sam) to extract reads from.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output file (bam or sam) to write extracted reads to.")
- public File OUTPUT;
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc="Reference sequence to reorder reads to match. " +
- "A sequence dictionary corresponding to the reference fasta is required. Create one with CreateSequenceDictionary.jar.")
- public File REFERENCE;
-
- @Option(shortName="S", doc="If true, then allows only a partial overlap of the BAM contigs with the new reference " +
- "sequence contigs. By default, this tool requires a corresponding contig in the new " +
- "reference for each read contig")
- public boolean ALLOW_INCOMPLETE_DICT_CONCORDANCE = false;
-
- @Option(shortName="U", doc="If true, then permits mapping from a read contig to a new reference contig with the " +
- "same name but a different length. Highly dangerous, only use if you know what you " +
- "are doing.")
- public boolean ALLOW_CONTIG_LENGTH_DISCORDANCE = false;
-
- private final Log log = Log.getInstance(ReorderSam.class);
-
- /** Required main method implementation. */
- public static void main(final String[] argv) {
- new ReorderSam().instanceMainWithExit(argv);
- }
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsReadable(REFERENCE);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final SAMFileReader in = new SAMFileReader(INPUT);
-
- ReferenceSequenceFile reference = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE);
- SAMSequenceDictionary refDict = reference.getSequenceDictionary();
-
- if (refDict == null) {
- log.error("No reference sequence dictionary found. Aborting. You can create a sequence dictionary for the reference fasta using CreateSequenceDictionary.jar.");
- in.close();
- return 1;
- }
-
- printDictionary("SAM/BAM file", in.getFileHeader().getSequenceDictionary());
- printDictionary("Reference", refDict);
- Map<Integer, Integer> newOrder = buildSequenceDictionaryMap(refDict, in.getFileHeader().getSequenceDictionary());
-
- // has to be after we create the newOrder
- SAMFileHeader outHeader = in.getFileHeader().clone();
- outHeader.setSequenceDictionary(refDict);
-
- log.info("Writing reads...");
- if (in.hasIndex()) {
- final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, true, OUTPUT);
-
- // write the reads in contig order
- for (final SAMSequenceRecord contig : refDict.getSequences() ) {
- final SAMRecordIterator it = in.query(contig.getSequenceName(), 0, 0, false);
- writeReads(out, it, newOrder, contig.getSequenceName());
- }
- // don't forget the unmapped reads
- writeReads( out, in.queryUnmapped(), newOrder, "unmapped" );
- out.close();
- }
- else {
- SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, false, OUTPUT);
- writeReads(out, in.iterator(), newOrder, "All reads");
- out.close();
- }
-
- // cleanup
- in.close();
- return 0;
- }
-
- /**
- * Low-level helper function that returns the new reference index for oldIndex according to the
- * ordering map newOrder. Read is provided in case an error occurs, so that an informative message
- * can be made.
- */
- private int newOrderIndex(SAMRecord read, int oldIndex, Map<Integer, Integer> newOrder) {
- if ( oldIndex == -1 )
- return -1; // unmapped read
- else {
- final Integer n = newOrder.get(oldIndex);
-
- if (n == null) throw new PicardException("BUG: no mapping found for read " + read.format());
- else return n;
- }
- }
-
- /**
- * Helper function that writes reads from iterator it into writer out, updating each SAMRecord along the way
- * according to the newOrder mapping from dictionary index -> index. Name is used for printing only.
- */
- private void writeReads(final SAMFileWriter out,
- final SAMRecordIterator it,
- final Map<Integer, Integer> newOrder,
- final String name) {
- long counter = 0;
- log.info(" Processing " + name);
-
- while ( it.hasNext() ) {
- counter++;
- final SAMRecord read = it.next();
- final int oldRefIndex = read.getReferenceIndex();
- final int oldMateIndex = read.getMateReferenceIndex();
- final int newRefIndex = newOrderIndex(read, oldRefIndex, newOrder);
-
- read.setHeader(out.getFileHeader());
- read.setReferenceIndex(newRefIndex);
-
- final int newMateIndex = newOrderIndex(read, oldMateIndex, newOrder);
- if ( oldMateIndex != -1 && newMateIndex == -1 ) { // becoming unmapped
- read.setMateAlignmentStart(0);
- read.setMateUnmappedFlag(true);
- read.setAttribute(SAMTag.MC.name(), null); // Set the Mate Cigar String to null
- }
- read.setMateReferenceIndex(newMateIndex);
-
- out.addAlignment(read);
- }
-
- it.close();
- log.info("Wrote " + counter + " reads");
- }
-
- /**
- * Constructs a mapping from read sequence records index -> new sequence dictionary index for use in
- * reordering the reference index and mate reference index in each read. -1 means unmapped.
- */
- private Map<Integer, Integer> buildSequenceDictionaryMap(final SAMSequenceDictionary refDict,
- final SAMSequenceDictionary readsDict) {
- Map<Integer, Integer> newOrder = new HashMap<Integer, Integer>();
-
- log.info("Reordering SAM/BAM file:");
- for (final SAMSequenceRecord refRec : refDict.getSequences() ) {
- final SAMSequenceRecord readsRec = readsDict.getSequence(refRec.getSequenceName());
-
- if (readsRec != null) {
- if ( refRec.getSequenceLength() != readsRec.getSequenceLength() ) {
- String msg = String.format("Discordant contig lengths: read %s LN=%d, ref %s LN=%d",
- readsRec.getSequenceName(), readsRec.getSequenceLength(),
- refRec.getSequenceName(), refRec.getSequenceLength());
- if ( ALLOW_CONTIG_LENGTH_DISCORDANCE ) {
- log.warn(msg);
- }
- else {
- throw new PicardException(msg);
- }
- }
-
- log.info(String.format(" Reordering read contig %s [index=%d] to => ref contig %s [index=%d]%n",
- readsRec.getSequenceName(), readsRec.getSequenceIndex(),
- refRec.getSequenceName(), refRec.getSequenceIndex() ));
- newOrder.put(readsRec.getSequenceIndex(), refRec.getSequenceIndex());
- }
- }
-
- for ( SAMSequenceRecord readsRec : readsDict.getSequences() ) {
- if ( ! newOrder.containsKey(readsRec.getSequenceIndex()) ) {
- if ( ALLOW_INCOMPLETE_DICT_CONCORDANCE )
- newOrder.put(readsRec.getSequenceIndex(), -1);
- else
- throw new PicardException("New reference sequence does not contain a matching contig for " + readsRec.getSequenceName());
- }
- }
-
- return newOrder;
- }
-
- /**
- * Helper function to print out a sequence dictionary
- */
- private void printDictionary(String name, SAMSequenceDictionary dict) {
- log.info(name);
- for (final SAMSequenceRecord contig : dict.getSequences()) {
- log.info( " SN=%s LN=%d%n", contig.getSequenceName(), contig.getSequenceLength());
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/ReplaceSamHeader.java b/src/java/net/sf/picard/sam/ReplaceSamHeader.java
deleted file mode 100644
index a69f537..0000000
--- a/src/java/net/sf/picard/sam/ReplaceSamHeader.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-
-import java.io.File;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class ReplaceSamHeader extends CommandLineProgram {
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Replace the SAMFileHeader in a SAM file with the given header. " +
- "Validation is minimal. It is up to the user to ensure that all the elements referred to in the SAMRecords " +
- "are present in the new header. Sort order of the two input files must be the same.";
-
- @Option(doc="SAM file from which SAMRecords will be read.", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
- public File INPUT;
-
- @Option(doc="SAM file from which SAMFileHeader will be read.")
- public File HEADER;
-
- @Option(doc="SAMFileHeader from HEADER file will be written to this file, followed by SAMRecords from INPUT file",
- shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
- public File OUTPUT;
-
- public static void main(final String[] argv) {
- new ReplaceSamHeader().instanceMainWithExit(argv);
- }
-
- /**
- * Do the work after command line has been parsed.
- * RuntimeException may be thrown by this method, and are reported appropriately.
- *
- * @return program exit status.
- */
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsReadable(HEADER);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final SAMFileReader headerReader = new SAMFileReader(HEADER);
- final SAMFileHeader replacementHeader = headerReader.getFileHeader();
- headerReader.close();
-
- final SAMFileReader.ValidationStringency originalStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.SILENT);
-
- try {
- if (BamFileIoUtils.isBamFile(INPUT)) {
- blockCopyReheader(replacementHeader);
- } else {
- standardReheader(replacementHeader);
- }
- } finally {
- SAMFileReader.setDefaultValidationStringency(originalStringency);
- }
-
- return 0;
- }
-
- private void standardReheader(final SAMFileHeader replacementHeader) {
- final SAMFileReader recordReader = new SAMFileReader(INPUT);
- if (replacementHeader.getSortOrder() != recordReader.getFileHeader().getSortOrder()) {
- throw new PicardException("Sort orders of INPUT (" + recordReader.getFileHeader().getSortOrder().name() +
- ") and HEADER (" + replacementHeader.getSortOrder().name() + ") do not agree.");
- }
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(replacementHeader, true, OUTPUT);
-
- final ProgressLogger progress = new ProgressLogger(Log.getInstance(ReplaceSamHeader.class));
- for (final SAMRecord rec : recordReader) {
- rec.setHeader(replacementHeader);
- writer.addAlignment(rec);
- progress.record(rec);
- }
- writer.close();
- recordReader.close();
- }
-
- private void blockCopyReheader(final SAMFileHeader replacementHeader) {
- BamFileIoUtils.reheaderBamFile(replacementHeader, INPUT, OUTPUT, CREATE_MD5_FILE, CREATE_INDEX);
- }
-}
diff --git a/src/java/net/sf/picard/sam/ReservedTagConstants.java b/src/java/net/sf/picard/sam/ReservedTagConstants.java
deleted file mode 100644
index bce920a..0000000
--- a/src/java/net/sf/picard/sam/ReservedTagConstants.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.SAMTag;
-
-/**
- * Constants for tags used in our SAM/BAM files
- */
-public class ReservedTagConstants {
- public static final String READ_GROUP_ID = SAMTag.RG.name(); // Specified in the SAM spec doc
- public static final String PROGRAM_GROUP_ID = SAMTag.PG.name(); // Specified in the SAM spec doc
-
- /** Present and set to 1 if a read is a noise read. */
- public static final String XN = "XN";
-
- /** Number of nucleotide differences (Specified in the SAM spec doc) */
- public static final String NM = SAMTag.NM.name();
-
- /** The sum of the mismatched qualities. */
- public static final String XQ = "XQ";
-
- /**
- * The name of an attribute which stores the 1-based index of the start of
- * sequence within a read (in original orientation) that should be clipped
- * or trimmed before alignment and downstream use.
- * The region to be clipped extends from this position to the end of the read.
- */
- public static final String XT = "XT";
-
- /** The original sequence before 454 cafie and homopolymer correction */
- public static final String XS = "XS";
-
- /** The Four54 edit string of 454 cafie and homopolymer corrections
- * <pre>
- * editString ::= {base operator position [- position]}* ; // Cafie needs 2 positions
- * base ::= A | T | G | C | N ; // N only for undercall
- * operator ::= o | u | c ; // o = Overcall, u = Undercall, c = Cafie.
- * position is 0 based position of the correction (assuming forward strand) . Cafie positions are to-from.
- * For example: XF :Z:Gc4-6Nu11Co15 means a cafie correction moved a G from position 6 to 4,
- * an N was inserted for an undercall at position 11, and a C was removed as an overcall at position 15
- */
- public static final String XF = "XF";
-
- /** The original pred quality scores before modifications such as 454 cafie and homopolymer correction */
- public static final String OQ = SAMTag.OQ.name();
-
- /** The original cigar before indel cleaning, or 454 cafie and homopolymer correction */
- public static final String OC = "OC";
-
-}
diff --git a/src/java/net/sf/picard/sam/RevertOriginalBaseQualitiesAndAddMateCigar.java b/src/java/net/sf/picard/sam/RevertOriginalBaseQualitiesAndAddMateCigar.java
deleted file mode 100644
index d90f623..0000000
--- a/src/java/net/sf/picard/sam/RevertOriginalBaseQualitiesAndAddMateCigar.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.BAMRecordCodec;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriter;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMRecordQueryNameComparator;
-import net.sf.samtools.SAMUtils;
-import net.sf.samtools.SamPairUtil;
-import net.sf.samtools.SamPairUtil;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-/**
- * This tool reverts the original base qualities (if specified) and adds the mate cigar tag to mapped BAMs.
- * If the file does not have OQs and already has mate cigar tags, nothing is done.
- * New BAM/BAI/MD5 files are created.
- * @author Nils Homer
- */
-public class RevertOriginalBaseQualitiesAndAddMateCigar extends CommandLineProgram {
-
- @Usage
- public String USAGE = getStandardUsagePreamble() +
- "Reverts the original base qualities and adds the mate cigar tag to read-group BAMs.";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The input SAM/BAM file to revert the state of.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output SAM/BAM file to create.")
- public File OUTPUT;
-
- @Option(shortName="SO", doc="The sort order to create the reverted output file with."
- + "By default, the sort order will be the same as the input.", optional = true)
- public SAMFileHeader.SortOrder SORT_ORDER = null;
-
- @Option(shortName=StandardOptionDefinitions.USE_ORIGINAL_QUALITIES_SHORT_NAME, doc="True to restore original" +
- " qualities from the OQ field to the QUAL field if available.")
- public boolean RESTORE_ORIGINAL_QUALITIES = true;
-
- @Option(doc="The maximum number of records to examine to determine if we can exit early and not output, given that"
- + " there are a no original base qualities (if we are to restore) and mate cigars exist."
- + " Set to 0 to never skip the file.")
- public int MAX_RECORDS_TO_EXAMINE = 10000;
-
- private final static Log log = Log.getInstance(RevertOriginalBaseQualitiesAndAddMateCigar.class);
-
- public RevertOriginalBaseQualitiesAndAddMateCigar() {
- this.CREATE_INDEX = true;
- this.CREATE_MD5_FILE = true;
- }
-
- /** Default main method impl. */
- public static void main(final String[] args) {
- new RevertOriginalBaseQualitiesAndAddMateCigar().instanceMainWithExit(args);
- }
-
- public int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- boolean foundPairedMappedReads = false;
-
- // Check if we can skip this file since it does not have OQ tags and the mate cigar tag is already there.
- final CanSkipSamFile skipSamFile = RevertOriginalBaseQualitiesAndAddMateCigar.canSkipSAMFile(INPUT, MAX_RECORDS_TO_EXAMINE, RESTORE_ORIGINAL_QUALITIES);
- log.info(skipSamFile.getMessage(MAX_RECORDS_TO_EXAMINE));
- if (skipSamFile.canSkip()) return 0;
-
- final SAMFileReader in = new SAMFileReader(INPUT, true);
- final SAMFileHeader inHeader = in.getFileHeader();
-
- // Build the output writer based on the correct sort order
- final SAMFileHeader outHeader = inHeader.clone();
- if (null == SORT_ORDER) this.SORT_ORDER = inHeader.getSortOrder(); // same as the input
- outHeader.setSortOrder(SORT_ORDER);
- SAMFileWriterFactory.setDefaultCreateIndexWhileWriting(CREATE_INDEX);
- SAMFileWriterFactory.setDefaultCreateMd5File(CREATE_MD5_FILE);
- final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, false, OUTPUT);
-
- // Iterate over the records, revert original base qualities, and push them into a SortingCollection by queryname
- final SortingCollection<SAMRecord> sorter = SortingCollection.newInstance(SAMRecord.class, new BAMRecordCodec(outHeader),
- new SAMRecordQueryNameComparator(), MAX_RECORDS_IN_RAM);
- final ProgressLogger revertingProgress = new ProgressLogger(log, 1000000, " reverted OQs");
- int numOriginalQualitiesRestored = 0;
- for (final SAMRecord record : in) {
- // Clean up reads that map off the end of the reference
- AbstractAlignmentMerger.createNewCigarsIfMapsOffEndOfReference(record);
-
- if (RESTORE_ORIGINAL_QUALITIES && null != record.getOriginalBaseQualities()) {
- // revert the original base qualities
- record.setBaseQualities(record.getOriginalBaseQualities());
- record.setOriginalBaseQualities(null);
- numOriginalQualitiesRestored++;
- }
- if (!foundPairedMappedReads && record.getReadPairedFlag() && !record.getReadUnmappedFlag()) foundPairedMappedReads = true;
- revertingProgress.record(record);
- sorter.add(record);
- }
- CloserUtil.close(in);
- log.info("Reverted the original base qualities for " + numOriginalQualitiesRestored + " records");
-
- /**
- * Iterator through sorting collection output
- * 1. Set mate cigar string on primary/non-supplemental records
- * 2. push record into SAMFileWriter to the output
- */
- final PeekableIterator<SAMRecord> sorterIterator = new PeekableIterator<SAMRecord>(sorter.iterator());
- final ProgressLogger sorterProgress = new ProgressLogger(log, 1000000, " mate cigars added");
- int numMateCigarsAdded = 0;
- while (sorterIterator.hasNext()) {
- final List<SAMRecord> records = new LinkedList<SAMRecord>();
-
-
- /**
- * Get all records with the same name, and then identify the canonical first and second end to which we
- * want to add mate cigars.
- */
- SAMRecord firstRecord = null, secondRecord = null;
- final SAMRecord first = sorterIterator.peek(); // peek so we consider it in the following loop
- while (sorterIterator.hasNext() && sorterIterator.peek().getReadName().equals(first.getReadName())) {
- final SAMRecord record = sorterIterator.next();
- // We must make sure that we find only one "primary" alignments for each end
- if (record.getReadPairedFlag() && !record.isSecondaryOrSupplementary()) {
- if (record.getFirstOfPairFlag()) {
- if (null != firstRecord) {
- throw new PicardException("Found two records that are paired, not supplementary, and first of the pair");
- }
- firstRecord = record;
- }
- else if (record.getSecondOfPairFlag()) {
- if (null != secondRecord) {
- throw new PicardException("Found two records that are paired, not supplementary, and second of the pair");
- }
- secondRecord = record;
- }
- }
- records.add(record);
- }
-
- // we must find both records, and then always update the mate cigar
- if (null != firstRecord && null != secondRecord) {
- // Update mate info
- SamPairUtil.setMateInfo(firstRecord, secondRecord, outHeader, true);
- numMateCigarsAdded+=2;
- }
-
- // Add it to the output file
- for (final SAMRecord record : records) {
- sorterProgress.record(record);
- out.addAlignment(record);
- }
-
- }
- sorterIterator.close();
- CloserUtil.close(out);
- log.info("Updated " + numMateCigarsAdded + " records with mate cigar");
- if (!foundPairedMappedReads) log.info("Did not find any paired mapped reads.");
-
- return 0;
- }
-
- /**
- * Used as a return for the canSkipSAMFile function.
- */
- public enum CanSkipSamFile {
- CAN_SKIP("Can skip the BAM file", true),
- CANNOT_SKIP_FOUND_OQ("Cannot skip the BAM as we found a record with an OQ", false),
- CANNOT_SKIP_FOUND_NO_MC("Cannot skip the BAM as we found a mate with no mate cigar tag", false),
- FOUND_NO_EVIDENCE("Found no evidence of OQ or mate with no mate cigar in the first %d records. Will continue...", false);
- private String format;
- private boolean skip;
-
- private CanSkipSamFile(String format, boolean skip) {
- this.format = format;
- this.skip = skip;
- }
-
- public String getMessage(int maxRecordsToExamine) { return String.format(this.format, maxRecordsToExamine); }
- public boolean canSkip() { return this.skip; }
- }
-
- /**
- * Checks if we can skip the SAM/BAM file when reverting origin base qualities and adding mate cigars.
- * @param inputFile the SAM/BAM input file
- * @param maxRecordsToExamine the maximum number of records to examine before quitting
- * @param revertOriginalBaseQualities true if we are to revert original base qualities, false otherwise
- * @return whether we can skip or not, and the explanation why.
- */
- public static CanSkipSamFile canSkipSAMFile(final File inputFile, final int maxRecordsToExamine, boolean revertOriginalBaseQualities) {
- final SAMFileReader in = new SAMFileReader(inputFile, true);
- final Iterator<SAMRecord> iterator = in.iterator();
- int numRecordsExamined = 0;
- CanSkipSamFile returnType = CanSkipSamFile.FOUND_NO_EVIDENCE;
-
- while (iterator.hasNext() && numRecordsExamined < maxRecordsToExamine) {
- final SAMRecord record = iterator.next();
-
- if (revertOriginalBaseQualities && null != record.getOriginalBaseQualities()) {
- // has OQ, break and return case #2
- returnType = CanSkipSamFile.CANNOT_SKIP_FOUND_OQ;
- break;
- }
-
- // check if mate pair and its mate is mapped
- if (record.getReadPairedFlag() && !record.getMateUnmappedFlag()) {
- if (null == SAMUtils.getMateCigar(record)) {
- // has no MC, break and return case #2
- returnType = CanSkipSamFile.CANNOT_SKIP_FOUND_NO_MC;
- break;
- }
- else {
- // has MC, previously checked that it does not have OQ, break and return case #1
- returnType = CanSkipSamFile.CAN_SKIP;
- break;
- }
- }
-
- numRecordsExamined++;
- }
-
- // no more records anyhow, so we can skip
- if (!iterator.hasNext() && CanSkipSamFile.FOUND_NO_EVIDENCE == returnType) {
- returnType = CanSkipSamFile.CAN_SKIP;
- }
-
- in.close();
-
- return returnType;
- }
-}
diff --git a/src/java/net/sf/picard/sam/RevertSam.java b/src/java/net/sf/picard/sam/RevertSam.java
deleted file mode 100644
index 73a9ace..0000000
--- a/src/java/net/sf/picard/sam/RevertSam.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Reverts a SAM file by optionally restoring original quality scores and by removing
- * all alignment information.
- */
-public class RevertSam extends CommandLineProgram {
- @Usage public String USAGE = getStandardUsagePreamble() +
- "Reverts SAM or BAM files to a previous state by removing certain types of information and/or " +
- "substituting in the original quality scores when available.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The input SAM/BAM file to revert the state of.")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output SAM/BAM file to create.")
- public File OUTPUT;
-
- @Option(shortName="SO", doc="The sort order to create the reverted output file with.")
- public SortOrder SORT_ORDER = SortOrder.queryname;
-
- @Option(shortName=StandardOptionDefinitions.USE_ORIGINAL_QUALITIES_SHORT_NAME, doc="True to restore original qualities from the OQ field to the QUAL field if available.")
- public boolean RESTORE_ORIGINAL_QUALITIES = true;
-
- @Option(doc="Remove duplicate read flags from all reads. Note that if this is true and REMOVE_ALIGNMENT_INFORMATION==false, " +
- " the output may have the unusual but sometimes desirable trait of having unmapped reads that are marked as duplicates.")
- public boolean REMOVE_DUPLICATE_INFORMATION = true;
-
- @Option(doc="Remove all alignment information from the file.")
- public boolean REMOVE_ALIGNMENT_INFORMATION = true;
-
- @Option(doc="When removing alignment information, the set of optional tags to remove.")
- public List<String> ATTRIBUTE_TO_CLEAR = new ArrayList<String>() {{
- add(SAMTag.NM.name());
- add(SAMTag.UQ.name());
- add(SAMTag.PG.name());
- add(SAMTag.MD.name());
- add(SAMTag.MQ.name());
- add(SAMTag.SA.name()); // Supplementary alignment metadata
- add(SAMTag.MC.name()); // Mate Cigar
- }};
-
- @Option(doc="WARNING: This option is potentially destructive. If enabled will discard reads in order to produce " +
- "a consistent output BAM. Reads discarded include (but are not limited to) paired reads with missing " +
- "mates, duplicated records, records with mismatches in length of bases and qualities. This option can " +
- "only be enabled if the output sort order is queryname and will always cause sorting to occur.")
- public boolean SANITIZE = false;
-
- @Option(doc="If SANITIZE=true and higher than MAX_DISCARD_FRACTION reads are discarded due to sanitization then" +
- "the program will exit with an Exception instead of exiting cleanly. Output BAM will still be valid.")
- public double MAX_DISCARD_FRACTION = 0.01;
-
- @Option(doc="The sample alias to use in the reverted output file. This will override the existing " +
- "sample alias in the file and is used only if all the read groups in the input file have the " +
- "same sample alias ", shortName=StandardOptionDefinitions.SAMPLE_ALIAS_SHORT_NAME, optional=true)
- public String SAMPLE_ALIAS;
-
- @Option(doc="The library name to use in the reverted output file. This will override the existing " +
- "sample alias in the file and is used only if all the read groups in the input file have the " +
- "same sample alias ", shortName=StandardOptionDefinitions.LIBRARY_NAME_SHORT_NAME, optional=true)
- public String LIBRARY_NAME;
-
- private final static Log log = Log.getInstance(RevertSam.class);
-
- /** Default main method impl. */
- public static void main(final String[] args) {
- new RevertSam().instanceMainWithExit(args);
- }
-
- /**
- * Enforce that output ordering is queryname when sanitization is turned on since it requires a queryname sort.
- */
- @Override protected String[] customCommandLineValidation() {
- if (SANITIZE && SORT_ORDER != SortOrder.queryname) {
- return new String[] {"SORT_ORDER must be queryname when sanitization is enabled with SANITIZE=true."};
- }
-
- return null;
- }
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final boolean sanitizing = SANITIZE;
- final SAMFileReader in = new SAMFileReader(INPUT, true);
- final SAMFileHeader inHeader = in.getFileHeader();
-
- // If we are going to override SAMPLE_ALIAS or LIBRARY_NAME, make sure all the read
- // groups have the same values.
- final List<SAMReadGroupRecord> rgs = inHeader.getReadGroups();
- if (SAMPLE_ALIAS != null || LIBRARY_NAME != null) {
- boolean allSampleAliasesIdentical = true;
- boolean allLibraryNamesIdentical = true;
- for (int i = 1; i < rgs.size(); i++) {
- if (!rgs.get(0).getSample().equals(rgs.get(i).getSample())) {
- allSampleAliasesIdentical = false;
- }
- if (!rgs.get(0).getLibrary().equals(rgs.get(i).getLibrary())) {
- allLibraryNamesIdentical = false;
- }
- }
- if (SAMPLE_ALIAS != null && !allSampleAliasesIdentical) {
- throw new PicardException("Read groups have multiple values for sample. " +
- "A value for SAMPLE_ALIAS cannot be supplied." );
- }
- if (LIBRARY_NAME != null && !allLibraryNamesIdentical) {
- throw new PicardException("Read groups have multiple values for library name. " +
- "A value for library name cannot be supplied." );
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Build the output writer with an appropriate header based on the options
- ////////////////////////////////////////////////////////////////////////////
- final boolean presorted = (inHeader.getSortOrder() == SORT_ORDER) || (SORT_ORDER == SortOrder.queryname && SANITIZE);
- final SAMFileHeader outHeader = new SAMFileHeader();
- for (final SAMReadGroupRecord rg : inHeader.getReadGroups()) {
- if (SAMPLE_ALIAS != null) {
- rg.setSample(SAMPLE_ALIAS);
- }
- if (LIBRARY_NAME != null) {
- rg.setLibrary(LIBRARY_NAME);
- }
- outHeader.addReadGroup(rg);
- }
- outHeader.setSortOrder(SORT_ORDER);
- if (!REMOVE_ALIGNMENT_INFORMATION) {
- outHeader.setSequenceDictionary(inHeader.getSequenceDictionary());
- outHeader.setProgramRecords(inHeader.getProgramRecords());
- }
-
- final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, presorted, OUTPUT);
-
-
- ////////////////////////////////////////////////////////////////////////////
- // Build a sorting collection to use if we are sanitizing
- ////////////////////////////////////////////////////////////////////////////
- final SortingCollection<SAMRecord> sorter;
- if (sanitizing) {
- sorter = SortingCollection.newInstance(SAMRecord.class, new BAMRecordCodec(outHeader), new SAMRecordQueryNameComparator(), MAX_RECORDS_IN_RAM);
- }
- else {
- sorter = null;
- }
-
- final ProgressLogger progress = new ProgressLogger(log, 1000000, "Reverted");
- for (final SAMRecord rec : in) {
- // Weed out non-primary and supplemental read as we don't want duplicates in the reverted file!
- if (rec.isSecondaryOrSupplementary()) continue;
-
- // Actually to the reverting of the remaining records
- revertSamRecord(rec);
-
- if (sanitizing) sorter.add(rec);
- else out.addAlignment(rec);
- progress.record(rec);
- }
-
- ////////////////////////////////////////////////////////////////////////////
- // Now if we're sanitizing, clean up the records and write them to the output
- ////////////////////////////////////////////////////////////////////////////
- if (!sanitizing) {
- out.close();
- }
- else {
- long total = 0, discarded = 0;
- final PeekableIterator<SAMRecord> iterator = new PeekableIterator<SAMRecord>(sorter.iterator());
- final ProgressLogger sanitizerProgress = new ProgressLogger(log, 1000000, "Sanitized");
-
- readNameLoop: while (iterator.hasNext()) {
- final List<SAMRecord> recs = fetchByReadName(iterator);
- total += recs.size();
-
- // Check that all the reads have bases and qualities of the same length
- for (final SAMRecord rec : recs) {
- if (rec.getReadBases().length != rec.getBaseQualities().length) {
- log.debug("Discarding " + recs.size() + " reads with name " + rec.getReadName() + " for mismatching bases and quals length.");
- discarded += recs.size();
- continue readNameLoop;
- }
- }
-
- // Check that if the first read is marked as unpaired that there is in fact only one read
- if (!recs.get(0).getReadPairedFlag() && recs.size() > 1) {
- log.debug("Discarding " + recs.size() + " reads with name " + recs.get(0).getReadName() + " because they claim to be unpaired.");
- discarded += recs.size();
- continue readNameLoop;
- }
-
- // Check that if we have paired reads there is exactly one first of pair and one second of pair
- if (recs.get(0).getReadPairedFlag()) {
- int firsts=0, seconds=0, unpaired=0;
- for (final SAMRecord rec : recs) {
- if (!rec.getReadPairedFlag()) ++unpaired;
- if (rec.getFirstOfPairFlag()) ++firsts;
- if (rec.getSecondOfPairFlag()) ++seconds;
- }
-
- if (unpaired > 0 || firsts != 1 || seconds != 1) {
- log.debug("Discarding " + recs.size() + " reads with name " + recs.get(0).getReadName() + " because pairing information in corrupt.");
- discarded += recs.size();
- continue readNameLoop;
- }
- }
-
- // If we've made it this far spit the records into the output!
- for (final SAMRecord rec : recs) {
- out.addAlignment(rec);
- sanitizerProgress.record(rec);
- }
- }
-
- out.close();
-
- final double discardRate = discarded / (double) total;
- final NumberFormat fmt = new DecimalFormat("0.000%");
- log.info("Discarded " + discarded + " out of " + total + " (" + fmt.format(discardRate) + ") reads in order to sanitize output.");
-
- if (discarded / (double) total > MAX_DISCARD_FRACTION) {
- throw new PicardException("Discarded " + fmt.format(discardRate) + " which is above MAX_DISCARD_FRACTION of " + fmt.format(MAX_DISCARD_FRACTION));
- }
- }
-
- return 0;
- }
-
- /**
- * Generates a list by consuming from the iterator in order starting with the first available
- * read and continuing while subsequent reads share the same read name. If there are no reads
- * remaining returns an empty list.
- */
- private List<SAMRecord> fetchByReadName(final PeekableIterator<SAMRecord> iterator) {
- final List<SAMRecord> out = new LinkedList<SAMRecord>();
-
- if (iterator.hasNext()) {
- final SAMRecord first = iterator.next();
- out.add(first);
-
- while (iterator.hasNext() && iterator.peek().getReadName().equals(first.getReadName())) {
- out.add(iterator.next());
- }
- }
-
- return out;
- }
-
- /**
- * Takes an individual SAMRecord and applies the set of changes/reversions to it that
- * have been requested by program level options.
- */
- public void revertSamRecord(final SAMRecord rec) {
- if (RESTORE_ORIGINAL_QUALITIES) {
- final byte[] oq = rec.getOriginalBaseQualities();
- if (oq != null) {
- rec.setBaseQualities(oq);
- rec.setOriginalBaseQualities(null);
- }
- }
-
- if (REMOVE_DUPLICATE_INFORMATION) {
- rec.setDuplicateReadFlag(false);
- }
-
- if (REMOVE_ALIGNMENT_INFORMATION) {
- if (rec.getReadNegativeStrandFlag()) {
- SAMRecordUtil.reverseComplement(rec);
- rec.setReadNegativeStrandFlag(false);
- }
-
- // Remove all alignment based information about the read itself
- rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR);
- rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY);
-
- if (!rec.getReadUnmappedFlag()) {
- rec.setInferredInsertSize(0);
- rec.setNotPrimaryAlignmentFlag(false);
- rec.setProperPairFlag(false);
- rec.setReadUnmappedFlag(true);
-
- }
-
- // Then remove any mate flags and info related to alignment
- if (rec.getReadPairedFlag()) {
- rec.setMateAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec.setMateNegativeStrandFlag(false);
- rec.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec.setMateUnmappedFlag(true);
- }
-
- // And then remove any tags that are calculated from the alignment
- for (final String tag : ATTRIBUTE_TO_CLEAR) {
- rec.setAttribute(tag, null);
- }
- }
- }
-
-}
diff --git a/src/java/net/sf/picard/sam/SamAlignmentMerger.java b/src/java/net/sf/picard/sam/SamAlignmentMerger.java
deleted file mode 100644
index 42a8e49..0000000
--- a/src/java/net/sf/picard/sam/SamAlignmentMerger.java
+++ /dev/null
@@ -1,353 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.samtools.BAMRecordCodec;
-import net.sf.samtools.CigarElement;
-import net.sf.samtools.CigarOperator;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMRecordQueryNameComparator;
-import net.sf.samtools.SamPairUtil;
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.PeekableIterator;
-import net.sf.samtools.SAMFileHeader.SortOrder;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMProgramRecord;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.DelegatingIterator;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * Class that takes in a set of alignment information in SAM format and merges it with the set
- * of all reads for which alignment was attempted, stored in an unmapped SAM file. This
- * class overrides mergeAlignment in AbstractAlignmentNMerger and proceeds on the assumption that
- * the underlying alignment records are aleady in query-name sorted order (true for bwa). If
- * they are not, the mergeAlignment method catches the IllegalStateException, forces a sort
- * of the underlying alignment records, and tries again.
- *
- * @author ktibbett at broadinstitute.org
- */
-public class SamAlignmentMerger extends AbstractAlignmentMerger {
-
- private final Log log = Log.getInstance(SamAlignmentMerger.class);
- private final List<File> alignedSamFile;
- private final List<File> read1AlignedSamFile;
- private final List<File> read2AlignedSamFile;
- private final int maxGaps;
- private boolean forceSort = false;
-
- /**
- * Constructor
- *
- * @param unmappedBamFile The BAM file that was used as the input to the aligner, which will
- * include info on all the reads that did not map. Required.
- * @param targetBamFile The file to which to write the merged SAM records. Required.
- * @param referenceFasta The reference sequence for the map files. Required.
- * @param programRecord Program record for taget file SAMRecords created.
- * @param clipAdapters Whether adapters marked in unmapped BAM file should be marked as
-* soft clipped in the merged bam. Required.
- * @param bisulfiteSequence Whether the reads are bisulfite sequence (used when calculating the
-* NM and UQ tags). Required.
- * @param alignedReadsOnly Whether to output only those reads that have alignment data
- * @param alignedSamFile The SAM file(s) with alignment information. Optional. If this is
-* not provided, then read1AlignedSamFile and read2AlignedSamFile must be.
- * @param maxGaps The maximum number of insertions or deletions permitted in an
-* alignment. Alignments with more than this many gaps will be ignored.
-* -1 means to allow any number of gaps.
- * @param attributesToRetain private attributes from the alignment record that should be
-* included when merging. This overrides the exclusion of
-* attributes whose tags start with the reserved characters
-* of X, Y, and Z
- * @param attributesToRetain attributes from the alignment record that should be
- * removed when merging. This overrides attributesToRetain if they share
- * common tags.
- * @param read1BasesTrimmed The number of bases trimmed from start of read 1 prior to alignment. Optional.
- * @param read2BasesTrimmed The number of bases trimmed from start of read 2 prior to alignment. Optional.
- * @param read1AlignedSamFile The alignment records for read1. Used when the two ends of a read are
-* aligned separately. This is optional, but must be specified if
-* alignedSamFile is not.
- * @param read2AlignedSamFile The alignment records for read1. Used when the two ends of a read are
-* aligned separately. This is optional, but must be specified if
-* alignedSamFile is not.
- * @param expectedOrientations A List of SamPairUtil.PairOrientations that are expected for
-* aligned pairs. Used to determine the properPair flag.
- * @param sortOrder The order in which the merged records should be output. If null,
-* output will be coordinate-sorted
- * @param primaryAlignmentSelectionStrategy How to handle multiple alignments for a fragment or read pair,
-* in which none are primary, or more than one is marked primary
- * @param addMateCigar True if we are to add or maintain the mate CIGAR (MC) tag, false if we are to remove or not include.
- */
- public SamAlignmentMerger(final File unmappedBamFile, final File targetBamFile, final File referenceFasta,
- final SAMProgramRecord programRecord, final boolean clipAdapters, final boolean bisulfiteSequence,
- final boolean alignedReadsOnly,
- final List<File> alignedSamFile, final int maxGaps, final List<String> attributesToRetain,
- final List<String> attributesToRemove,
- final Integer read1BasesTrimmed, final Integer read2BasesTrimmed,
- final List<File> read1AlignedSamFile, final List<File> read2AlignedSamFile,
- final List<SamPairUtil.PairOrientation> expectedOrientations,
- final SortOrder sortOrder,
- final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy,
- final boolean addMateCigar) {
-
- super(unmappedBamFile, targetBamFile, referenceFasta, clipAdapters, bisulfiteSequence,
- alignedReadsOnly, programRecord, attributesToRetain, attributesToRemove, read1BasesTrimmed,
- read2BasesTrimmed, expectedOrientations, sortOrder, primaryAlignmentSelectionStrategy, addMateCigar);
-
- if ((alignedSamFile == null || alignedSamFile.size() == 0) &&
- (read1AlignedSamFile == null || read1AlignedSamFile.size() == 0 ||
- read2AlignedSamFile == null || read2AlignedSamFile.size() == 0)) {
- throw new IllegalArgumentException("Either alignedSamFile or BOTH of read1AlignedSamFile and " +
- "read2AlignedSamFile must be specified.");
- }
-
- if (alignedSamFile != null) {
- for (final File f : alignedSamFile) {
- IoUtil.assertFileIsReadable(f);
- }
- } else {
- for (final File f : read1AlignedSamFile) {
- IoUtil.assertFileIsReadable(f);
- }
- for (final File f : read2AlignedSamFile) {
- IoUtil.assertFileIsReadable(f);
- }
- }
-
- this.alignedSamFile = alignedSamFile;
- this.read1AlignedSamFile = read1AlignedSamFile;
- this.read2AlignedSamFile = read2AlignedSamFile;
- this.maxGaps = maxGaps;
- if (programRecord == null) {
- final File tmpFile = this.alignedSamFile != null && this.alignedSamFile.size() > 0
- ? this.alignedSamFile.get(0)
- : this.read1AlignedSamFile.get(0);
- final SAMFileReader tmpReader = new SAMFileReader(tmpFile);
- tmpReader.setValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- if (tmpReader.getFileHeader().getProgramRecords().size() == 1) {
- setProgramRecord(tmpReader.getFileHeader().getProgramRecords().get(0));
- }
- tmpReader.close();
- }
- // If not null, the program record was already added in the superclass. DO NOT RE-ADD!
-
- if (getProgramRecord() != null) {
- final SAMFileReader tmp = new SAMFileReader(unmappedBamFile);
- try {
- for (final SAMProgramRecord pg : tmp.getFileHeader().getProgramRecords()) {
- if (pg.getId().equals(getProgramRecord().getId())) {
- throw new PicardException("Program Record ID already in use in unmapped BAM file.");
- }
- }
- }
- finally {
- tmp.close();
- }
- }
- log.info("Processing SAM file(s): " + alignedSamFile != null ? alignedSamFile : read1AlignedSamFile + "," + read2AlignedSamFile);
- }
-
-
-
- /**
- * Merges the alignment from the map file with the non-aligned records from the source BAM file.
- * Overrides mergeAlignment in AbstractAlignmentMerger. Tries first to proceed on the assumption
- * that the alignment records are pre-sorted. If not, catches the exception, forces a sort, and
- * tries again.
- */
- public void mergeAlignment() {
- try {
- super.mergeAlignment();
- }
- catch(final IllegalStateException ise) {
- log.warn("Exception merging bam alignment - attempting to sort aligned reads and try again: ", ise.getMessage());
- forceSort = true;
- resetRefSeqFileWalker();
- super.mergeAlignment();
- }
- }
- /**
- * Reads the aligned SAM records into a SortingCollection and returns an iterator over that collection
- */
- protected CloseableIterator<SAMRecord> getQuerynameSortedAlignedRecords() {
-
- final CloseableIterator<SAMRecord> mergingIterator;
- final SAMFileHeader header;
-
- // When the alignment records, including both ends of a pair, are in SAM files
- if (alignedSamFile != null && alignedSamFile.size() > 0) {
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(alignedSamFile.size());
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>(alignedSamFile.size());
- for (final File f : this.alignedSamFile) {
- final SAMFileReader r = new SAMFileReader(f);
- headers.add(r.getFileHeader());
- readers.add(r);
- }
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SortOrder.queryname, headers, false);
-
- mergingIterator = new MergingSamRecordIterator(headerMerger, readers, true);
- header = headerMerger.getMergedHeader();
-
- }
- // When the ends are aligned separately and don't have firstOfPair information correctly
- // set we use this branch.
- else {
- mergingIterator = new SeparateEndAlignmentIterator(this.read1AlignedSamFile, this.read2AlignedSamFile);
- header = ((SeparateEndAlignmentIterator)mergingIterator).getHeader();
- }
-
-
- if (!forceSort) {
- return mergingIterator;
- }
-
-
- final SortingCollection<SAMRecord> alignmentSorter = SortingCollection.newInstance(SAMRecord.class,
- new BAMRecordCodec(header), new SAMRecordQueryNameComparator(), MAX_RECORDS_IN_RAM);
-
- int count = 0;
- while (mergingIterator.hasNext()) {
- alignmentSorter.add(mergingIterator.next());
- count++;
- if (count > 0 && count % 1000000 == 0) {
- log.info("Read " + count + " records from alignment SAM/BAM.");
- }
- }
- log.info("Finished reading " + count + " total records from alignment SAM/BAM.");
-
- mergingIterator.close();
- return new DelegatingIterator<SAMRecord>(alignmentSorter.iterator()) {
- @Override
- public void close() {
- super.close();
- alignmentSorter.cleanup();
- }
- };
- }
-
- private class SuffixTrimingSamRecordIterator implements CloseableIterator<SAMRecord> {
- private final CloseableIterator<SAMRecord> underlyingIterator;
- private final String suffixToTrim;
-
- private SuffixTrimingSamRecordIterator(final CloseableIterator<SAMRecord> underlyingIterator, final String suffixToTrim) {
- this.underlyingIterator = underlyingIterator;
- this.suffixToTrim = suffixToTrim;
- }
-
- @Override
- public void close() {
- underlyingIterator.close();
- }
-
- @Override
- public boolean hasNext() {
- return underlyingIterator.hasNext();
- }
-
- @Override
- public SAMRecord next() {
- final SAMRecord rec = underlyingIterator.next();
- final String readName = rec.getReadName();
- if (readName.endsWith(suffixToTrim)) {
- rec.setReadName(readName.substring(0, readName.length() - suffixToTrim.length()));
- }
- return rec;
- }
-
- @Override
- public void remove() {
- underlyingIterator.remove();
- }
- }
-
- private class SeparateEndAlignmentIterator implements CloseableIterator<SAMRecord> {
-
- private final PeekableIterator<SAMRecord> read1Iterator;
- private final PeekableIterator<SAMRecord> read2Iterator;
- private final SAMFileHeader header;
-
- public SeparateEndAlignmentIterator(final List<File> read1Alignments, final List<File> read2Alignments) {
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- final List<SAMFileReader> read1 = new ArrayList<SAMFileReader>(read1Alignments.size());
- final List<SAMFileReader> read2 = new ArrayList<SAMFileReader>(read2Alignments.size());
- for (final File f : read1Alignments) {
- final SAMFileReader r = new SAMFileReader(f);
- headers.add(r.getFileHeader());
- read1.add(r);
- }
- for (final File f : read2Alignments) {
- final SAMFileReader r = new SAMFileReader(f);
- headers.add(r.getFileHeader());
- read2.add(r);
- }
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false);
- read1Iterator = new PeekableIterator<SAMRecord>(
- new SuffixTrimingSamRecordIterator(new MergingSamRecordIterator(headerMerger, read1, true), "/1"));
- read2Iterator = new PeekableIterator<SAMRecord>(
- new SuffixTrimingSamRecordIterator(new MergingSamRecordIterator(headerMerger, read2, true), "/2"));
-
- header = headerMerger.getMergedHeader();
- }
-
- public void close() {
- read1Iterator.close();
- read2Iterator.close();
- }
-
- public boolean hasNext() {
- return read1Iterator.hasNext() || read2Iterator.hasNext();
- }
-
- public SAMRecord next() {
- if (read1Iterator.hasNext()) {
- if (read2Iterator.hasNext()) {
- return (read1Iterator.peek().getReadName().compareTo(read2Iterator.peek().getReadName()) <= 0)
- ? setPairFlags(read1Iterator.next(), true)
- : setPairFlags(read2Iterator.next(), false);
- }
- else {
- return setPairFlags(read1Iterator.next(), true);
- }
- }
- else {
- return setPairFlags(read2Iterator.next(), false);
- }
- }
-
- public void remove() {
- throw new UnsupportedOperationException("remove() not supported");
- }
-
- public SAMFileHeader getHeader() { return this.header; }
-
- private SAMRecord setPairFlags(final SAMRecord sam, final boolean firstOfPair) {
- sam.setReadPairedFlag(true);
- sam.setFirstOfPairFlag(firstOfPair);
- sam.setSecondOfPairFlag(!firstOfPair);
- return sam;
- }
- }
-
- /**
- * For now, we only ignore those alignments that have more than <code>maxGaps</code> insertions
- * or deletions.
- */
- protected boolean ignoreAlignment(final SAMRecord sam) {
- if (maxGaps == -1) return false;
- int gaps = 0;
- for (final CigarElement el : sam.getCigar().getCigarElements()) {
- if (el.getOperator() == CigarOperator.I || el.getOperator() == CigarOperator.D ) {
- gaps++;
- }
- }
- return gaps > maxGaps;
- }
-
- // Accessor for testing
- public boolean getForceSort() {return this.forceSort; }
-}
diff --git a/src/java/net/sf/picard/sam/SamFileHeaderMerger.java b/src/java/net/sf/picard/sam/SamFileHeaderMerger.java
deleted file mode 100644
index 7102c26..0000000
--- a/src/java/net/sf/picard/sam/SamFileHeaderMerger.java
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import java.util.*;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.AbstractSAMHeaderRecord;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMProgramRecord;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.util.SequenceUtil;
-
-/**
- * Merges SAMFileHeaders that have the same sequences into a single merged header
- * object while providing read group translation for cases where read groups
- * clash across input headers.
- */
-public class SamFileHeaderMerger {
-
- /**
- * A 4-digit base 36 number is going to be attached to colliding SAMFileHeaderRecords,
- * To do this we first create an array of values to convert integer remainders into
- * base 36 values, we use base 36 because we have 10 digits and 26 numbers
- */
- private static final char [] INT_TO_BASE36 = new char[36];
- static {
- int aVal = (int) 'A';
- int zeroVal = (int) '0';
-
- for(int i = 0; i < 10; i++) {
- INT_TO_BASE36[i] = (char)(zeroVal + i);
- }
-
- for(int i = 0; i < 26; i++) {
- INT_TO_BASE36[i + 10] = (char)(aVal + i);
- }
- }
-
- //Super Header to construct
- private final SAMFileHeader mergedHeader;
- private Collection<SAMFileReader> readers;
- private final Collection<SAMFileHeader> headers;
- private int recordCounter;
-
- //Translation of old group ids to new group ids
- private final Map<SAMFileHeader, Map<String, String>> samReadGroupIdTranslation =
- new IdentityHashMap<SAMFileHeader, Map<String, String>>();
-
- //the read groups from different files use the same group ids
- private boolean hasReadGroupCollisions = false;
-
- //the program records from different files use the same program record ids
- private boolean hasProgramGroupCollisions = false;
-
- //Translation of old program group ids to new program group ids
- private final Map<SAMFileHeader, Map<String, String>> samProgramGroupIdTranslation =
- new IdentityHashMap<SAMFileHeader, Map<String, String>>();
-
- private boolean hasMergedSequenceDictionary = false;
-
- // Translation of old sequence dictionary ids to new dictionary ids
- // This is an IdentityHashMap because it can be quite expensive to compute the hashCode for
- // large SAMFileHeaders. It is possible that two input files will have identical headers so that
- // the regular HashMap would fold them together, but the value stored in each of the two
- // Map entries will be the same, so it should not hurt anything.
- private final Map<SAMFileHeader, Map<Integer, Integer>> samSeqDictionaryIdTranslationViaHeader =
- new IdentityHashMap<SAMFileHeader, Map<Integer, Integer>>();
-
- //HeaderRecordFactory that creates SAMReadGroupRecord instances.
- private static final HeaderRecordFactory<SAMReadGroupRecord> READ_GROUP_RECORD_FACTORY = new HeaderRecordFactory<SAMReadGroupRecord>() {
- public SAMReadGroupRecord createRecord(final String id, final SAMReadGroupRecord srcReadGroupRecord) {
- return new SAMReadGroupRecord(id, srcReadGroupRecord);
- }
- };
-
- //HeaderRecordFactory that creates SAMProgramRecord instances.
- private static final HeaderRecordFactory<SAMProgramRecord> PROGRAM_RECORD_FACTORY = new HeaderRecordFactory<SAMProgramRecord>() {
- public SAMProgramRecord createRecord(final String id, final SAMProgramRecord srcProgramRecord) {
- return new SAMProgramRecord(id, srcProgramRecord);
- }
- };
-
- //comparator used to sort lists of program group and read group records
- private static final Comparator<AbstractSAMHeaderRecord> RECORD_ID_COMPARATOR = new Comparator<AbstractSAMHeaderRecord>() {
- public int compare(final AbstractSAMHeaderRecord o1, final AbstractSAMHeaderRecord o2) {
- return o1.getId().compareTo(o2.getId());
- }
- };
-
- /**
- * Create SAMFileHeader with additional information. Required that sequence dictionaries agree.
- *
- * @param readers sam file readers to combine
- * @param sortOrder sort order new header should have
- * @deprecated replaced by SamFileHeaderMerger(Collection<SAMFileHeader>, SAMFileHeader.SortOrder, boolean)
- */
- public SamFileHeaderMerger(final Collection<SAMFileReader> readers, final SAMFileHeader.SortOrder sortOrder) {
- this(readers, sortOrder, false);
- }
-
- /**
- * Create SAMFileHeader with additional information.
- *
- * @param readers sam file readers to combine
- * @param sortOrder sort order new header should have
- * @param mergeDictionaries If true, merge sequence dictionaries in new header. If false, require that
- * all input sequence dictionaries be identical.
- * @deprecated replaced by SamFileHeaderMerger(Collection<SAMFileHeader>, SAMFileHeader.SortOrder, boolean)
- */
- public SamFileHeaderMerger(final Collection<SAMFileReader> readers, final SAMFileHeader.SortOrder sortOrder, final boolean mergeDictionaries) {
- this(sortOrder, getHeadersFromReaders(readers), mergeDictionaries);
- this.readers = readers;
- }
-
- /**
- * Create SAMFileHeader with additional information.. This is the preferred constructor.
- *
- * @param sortOrder sort order new header should have
- * @param headers sam file headers to combine
- * @param mergeDictionaries If true, merge sequence dictionaries in new header. If false, require that
- * all input sequence dictionaries be identical.
- */
- public SamFileHeaderMerger(final SAMFileHeader.SortOrder sortOrder, final Collection<SAMFileHeader> headers, final boolean mergeDictionaries) {
- this.headers = new LinkedHashSet<SAMFileHeader>(headers);
- this.mergedHeader = new SAMFileHeader();
-
- SAMSequenceDictionary sequenceDictionary;
- try {
- sequenceDictionary = getSequenceDictionary(headers);
- this.hasMergedSequenceDictionary = false;
- }
- catch (SequenceUtil.SequenceListsDifferException pe) {
- if (mergeDictionaries) {
- sequenceDictionary = mergeSequenceDictionaries(headers);
- this.hasMergedSequenceDictionary = true;
- }
- else {
- throw pe;
- }
- }
-
- this.mergedHeader.setSequenceDictionary(sequenceDictionary);
-
- // Set program that creates input alignments
- for (final SAMProgramRecord program : mergeProgramGroups(headers)) {
- this.mergedHeader.addProgramRecord(program);
- }
-
- // Set read groups for merged header
- final List<SAMReadGroupRecord> readGroups = mergeReadGroups(headers);
- this.mergedHeader.setReadGroups(readGroups);
- this.mergedHeader.setGroupOrder(SAMFileHeader.GroupOrder.none);
-
- this.mergedHeader.setSortOrder(sortOrder);
-
- for (final SAMFileHeader header : headers) {
- for (final String comment : header.getComments()) {
- this.mergedHeader.addComment(comment);
- }
- }
- }
-
- // Utilility method to make use with old constructor
- private static List<SAMFileHeader> getHeadersFromReaders(final Collection<SAMFileReader> readers) {
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(readers.size());
- for (final SAMFileReader reader : readers) {
- headers.add(reader.getFileHeader());
- }
- return headers;
- }
-
-
- /**
- * Checks to see if there are clashes where different readers are using the same read
- * group IDs. If yes, then those IDs that collided are remapped.
- *
- * @param headers headers to combine
- * @return new list of read groups constructed from all the readers
- */
- private List<SAMReadGroupRecord> mergeReadGroups(final Collection<SAMFileHeader> headers) {
- //prepare args for mergeHeaderRecords(..) call
- final HashSet<String> idsThatAreAlreadyTaken = new HashSet<String>();
-
- final List<HeaderRecordAndFileHeader<SAMReadGroupRecord>> readGroupsToProcess = new LinkedList<HeaderRecordAndFileHeader<SAMReadGroupRecord>>();
- for (final SAMFileHeader header : headers) {
- for (final SAMReadGroupRecord readGroup : header.getReadGroups()) {
- //verify that there are no existing id collisions in this input file
- if(!idsThatAreAlreadyTaken.add(readGroup.getId()))
- throw new PicardException("Input file: " + header + " contains more than one RG with the same id (" + readGroup.getId() + ")");
-
- readGroupsToProcess.add(new HeaderRecordAndFileHeader<SAMReadGroupRecord>(readGroup, header));
- }
- idsThatAreAlreadyTaken.clear();
- }
-
- final List<SAMReadGroupRecord> result = new LinkedList<SAMReadGroupRecord>();
-
- recordCounter = 0;
- hasReadGroupCollisions = mergeHeaderRecords(readGroupsToProcess, READ_GROUP_RECORD_FACTORY, idsThatAreAlreadyTaken, samReadGroupIdTranslation, result);
-
- //sort the result list by record id
- Collections.sort(result, RECORD_ID_COMPARATOR);
-
- return result;
- }
-
-
- /**
- * Checks to see if there are clashes where different readers are using the same program
- * group IDs. If yes, then those IDs that collided are remapped.
- *
- * @param headers headers to combine
- * @return new list of program groups constructed from all the readers
- */
- private List<SAMProgramRecord> mergeProgramGroups(final Collection<SAMFileHeader> headers) {
-
- final List<SAMProgramRecord> overallResult = new LinkedList<SAMProgramRecord>();
-
- //this Set will accumulate all SAMProgramRecord ids that have been encountered so far.
- final HashSet<String> idsThatAreAlreadyTaken = new HashSet<String>();
-
- //need to process all program groups
- List<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsLeftToProcess = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
- for (final SAMFileHeader header : headers) {
- for (final SAMProgramRecord programGroup : header.getProgramRecords()) {
- //verify that there are no existing id collisions in this input file
- if(!idsThatAreAlreadyTaken.add(programGroup.getId()))
- throw new PicardException("Input file: " + header + " contains more than one PG with the same id (" + programGroup.getId() + ")");
-
- programGroupsLeftToProcess.add(new HeaderRecordAndFileHeader<SAMProgramRecord>(programGroup, header));
- }
- idsThatAreAlreadyTaken.clear();
- }
-
- recordCounter = 0;
-
- //A program group header (lets say ID=2 PN=B PP=1) may have a PP (previous program) attribute which chains it to
- //another program group header (lets say ID=1 PN=A) to indicate that the given file was
- //processed by program A followed by program B. These PP attributes potentially
- //connect headers into one or more tree structures. Merging is done by
- //first merging all headers that don't have PP attributes (eg. tree roots),
- //then updating and merging all headers whose PPs point to the tree-root headers,
- //and so on until all program group headers are processed.
-
- //currentProgramGroups is the list of records to merge next. Start by merging the programGroups that don't have a PP attribute (eg. the tree roots).
- List< HeaderRecordAndFileHeader<SAMProgramRecord> > currentProgramGroups = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
- for(final Iterator<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsLeftToProcessIterator = programGroupsLeftToProcess.iterator(); programGroupsLeftToProcessIterator.hasNext(); ) {
- final HeaderRecordAndFileHeader<SAMProgramRecord> pair = programGroupsLeftToProcessIterator.next();
- if(pair.getHeaderRecord().getAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG) == null) {
- programGroupsLeftToProcessIterator.remove();
- currentProgramGroups.add(pair);
- }
- }
-
- //merge currentProgramGroups
- while(!currentProgramGroups.isEmpty())
- {
- final List<SAMProgramRecord> currentResult = new LinkedList<SAMProgramRecord>();
-
- hasProgramGroupCollisions |= mergeHeaderRecords(currentProgramGroups, PROGRAM_RECORD_FACTORY, idsThatAreAlreadyTaken, samProgramGroupIdTranslation, currentResult);
-
- //add currentResults to overallResults
- overallResult.addAll(currentResult);
-
- //apply the newly-computed id translations to currentProgramGroups and programGroupsLeftToProcess
- currentProgramGroups = translateIds(currentProgramGroups, samProgramGroupIdTranslation, false);
- programGroupsLeftToProcess = translateIds(programGroupsLeftToProcess, samProgramGroupIdTranslation, true);
-
- //find all records in programGroupsLeftToProcess whose ppId points to a record that was just processed (eg. a record that's in currentProgramGroups),
- //and move them to the list of programGroupsToProcessNext.
- final LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsToProcessNext = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
- for(final Iterator<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroupsLeftToProcessIterator = programGroupsLeftToProcess.iterator(); programGroupsLeftToProcessIterator.hasNext(); ) {
- final HeaderRecordAndFileHeader<SAMProgramRecord> pairLeftToProcess = programGroupsLeftToProcessIterator.next();
- final Object ppIdOfRecordLeftToProcess = pairLeftToProcess.getHeaderRecord().getAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG);
- //find what currentProgramGroups this ppId points to (NOTE: they have to come from the same file)
- for(final HeaderRecordAndFileHeader<SAMProgramRecord> justProcessedPair : currentProgramGroups) {
- final String idJustProcessed = justProcessedPair.getHeaderRecord().getId();
- if(pairLeftToProcess.getFileHeader() == justProcessedPair.getFileHeader() && ppIdOfRecordLeftToProcess.equals(idJustProcessed)) {
- programGroupsLeftToProcessIterator.remove();
- programGroupsToProcessNext.add(pairLeftToProcess);
- break;
- }
- }
- }
-
- currentProgramGroups = programGroupsToProcessNext;
- }
-
- //verify that all records were processed
- if(!programGroupsLeftToProcess.isEmpty()) {
- final StringBuffer errorMsg = new StringBuffer(programGroupsLeftToProcess.size() + " program groups weren't processed. Do their PP ids point to existing PGs? \n");
- for( final HeaderRecordAndFileHeader<SAMProgramRecord> pair : programGroupsLeftToProcess ) {
- final SAMProgramRecord record = pair.getHeaderRecord();
- errorMsg.append("@PG ID:"+record.getProgramGroupId()+" PN:"+record.getProgramName()+" PP:"+record.getPreviousProgramGroupId() +"\n");
- }
- throw new PicardException(errorMsg.toString());
- }
-
- //sort the result list by record id
- Collections.sort(overallResult, RECORD_ID_COMPARATOR);
-
- return overallResult;
- }
-
-
- /**
- * Utility method that takes a list of program groups and remaps all their
- * ids (including ppIds if requested) using the given idTranslationTable.
- *
- * NOTE: when remapping, this method creates new SAMProgramRecords and
- * doesn't mutate any records in the programGroups list.
- *
- * @param programGroups The program groups to translate.
- * @param idTranslationTable The translation table.
- * @param translatePpIds Whether ppIds should be translated as well.
- *
- * @return The list of translated records.
- */
- private List<HeaderRecordAndFileHeader<SAMProgramRecord>> translateIds(
- final List<HeaderRecordAndFileHeader<SAMProgramRecord>> programGroups,
- final Map<SAMFileHeader, Map<String, String>> idTranslationTable,
- final boolean translatePpIds) {
-
- //go through programGroups and translate any IDs and PPs based on the idTranslationTable.
- final List<HeaderRecordAndFileHeader<SAMProgramRecord>> result = new LinkedList<HeaderRecordAndFileHeader<SAMProgramRecord>>();
- for(final HeaderRecordAndFileHeader<SAMProgramRecord> pair : programGroups ) {
- final SAMProgramRecord record = pair.getHeaderRecord();
- final String id = record.getProgramGroupId();
- final String ppId = (String) record.getAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG);
-
- final SAMFileHeader header = pair.getFileHeader();
- final Map<String, String> translations = idTranslationTable.get(header);
-
- //see if one or both ids need to be translated
- SAMProgramRecord translatedRecord = null;
- if(translations != null)
- {
- final String translatedId = translations.get( id );
- final String translatedPpId = translatePpIds ? translations.get( ppId ) : null;
-
- final boolean needToTranslateId = translatedId != null && !translatedId.equals(id);
- final boolean needToTranslatePpId = translatedPpId != null && !translatedPpId.equals(ppId);
-
- if(needToTranslateId && needToTranslatePpId) {
- translatedRecord = new SAMProgramRecord(translatedId, record);
- translatedRecord.setAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG, translatedPpId);
- } else if(needToTranslateId) {
- translatedRecord = new SAMProgramRecord(translatedId, record);
- } else if(needToTranslatePpId) {
- translatedRecord = new SAMProgramRecord(id, record);
- translatedRecord.setAttribute(SAMProgramRecord.PREVIOUS_PROGRAM_GROUP_ID_TAG, translatedPpId);
- }
- }
-
- if(translatedRecord != null) {
- result.add(new HeaderRecordAndFileHeader<SAMProgramRecord>(translatedRecord, header));
- } else {
- result.add(pair); //keep the original record
- }
- }
-
- return result;
- }
-
-
- /**
- * Utility method for merging a List of AbstractSAMHeaderRecords. If it finds
- * records that have identical ids and attributes, it will collapse them
- * into one record. If it finds records that have identical ids but
- * non-identical attributes, this is treated as a collision. When collision happens,
- * the records' ids are remapped, and an old-id to new-id mapping is added to the idTranslationTable.
- *
- * NOTE: Non-collided records also get recorded in the idTranslationTable as
- * old-id to old-id. This way, an idTranslationTable lookup should never return null.
- *
- * @param headerRecords The header records to merge.
- * @param headerRecordFactory Constructs a specific subclass of AbstractSAMHeaderRecord.
- * @param idsThatAreAlreadyTaken If the id of a headerRecord matches an id in this set, it will be treated as a collision, and the headRecord's id will be remapped.
- * @param idTranslationTable When records collide, their ids are remapped, and an old-id to new-id
- * mapping is added to the idTranslationTable. Non-collided records also get recorded in the idTranslationTable as
- * old-id to old-id. This way, an idTranslationTable lookup should never return null.
- *
- * @param result The list of merged header records.
- *
- * @return True if there were collisions.
- */
- private <RecordType extends AbstractSAMHeaderRecord> boolean mergeHeaderRecords(final List<HeaderRecordAndFileHeader<RecordType>> headerRecords, final HeaderRecordFactory<RecordType> headerRecordFactory,
- final HashSet<String> idsThatAreAlreadyTaken, final Map<SAMFileHeader, Map<String, String>> idTranslationTable, final List<RecordType> result) {
-
- //The outer Map bins the header records by their ids. The nested Map further collapses
- //header records which, in addition to having the same id, also have identical attributes.
- //In other words, each key in the nested map represents one or more
- //header records which have both identical ids and identical attributes. The List of
- //SAMFileHeaders keeps track of which readers these header record(s) came from.
- final Map<String, Map<RecordType, List<SAMFileHeader>>> idToRecord =
- new LinkedHashMap<String, Map<RecordType, List<SAMFileHeader>>>();
-
- //Populate the idToRecord and seenIds data structures
- for (final HeaderRecordAndFileHeader<RecordType> pair : headerRecords) {
- final RecordType record = pair.getHeaderRecord();
- final SAMFileHeader header = pair.getFileHeader();
- final String recordId = record.getId();
- Map<RecordType, List<SAMFileHeader>> recordsWithSameId = idToRecord.get(recordId);
- if(recordsWithSameId == null) {
- recordsWithSameId = new LinkedHashMap<RecordType, List<SAMFileHeader>>();
- idToRecord.put(recordId, recordsWithSameId);
- }
-
- List<SAMFileHeader> fileHeaders = recordsWithSameId.get(record);
- if(fileHeaders == null) {
- fileHeaders = new LinkedList<SAMFileHeader>();
- recordsWithSameId.put(record, fileHeaders);
- }
-
- fileHeaders.add(header);
- }
-
- //Resolve any collisions between header records by remapping their ids.
- boolean hasCollisions = false;
- for (final Map.Entry<String, Map<RecordType, List<SAMFileHeader>>> entry : idToRecord.entrySet() )
- {
- final String recordId = entry.getKey();
- final Map<RecordType, List<SAMFileHeader>> recordsWithSameId = entry.getValue();
-
-
- for( final Map.Entry<RecordType, List<SAMFileHeader>> recordWithUniqueAttr : recordsWithSameId.entrySet()) {
- final RecordType record = recordWithUniqueAttr.getKey();
- final List<SAMFileHeader> fileHeaders = recordWithUniqueAttr.getValue();
-
- String newId;
- if(!idsThatAreAlreadyTaken.contains(recordId)) {
- //don't remap 1st record. If there are more records
- //with this id, they will be remapped in the 'else'.
- newId = recordId;
- idsThatAreAlreadyTaken.add(recordId);
- ++recordCounter;
- } else {
- //there is more than one record with this id.
- hasCollisions = true;
-
- //Below we tack on one of roughly 1.7 million possible 4 digit base36 at random we do this because
- //our old process of just counting from 0 upward and adding that to the previous id led to 1000s of hits on
- //idsThatAreAlreadyTaken.contains just to resolve 1 collision when merging 1000s of similarly processed bams
- while(idsThatAreAlreadyTaken.contains(newId = recordId + "." + positiveFourDigitBase36Str(recordCounter++)));
-
- idsThatAreAlreadyTaken.add( newId );
- }
-
- for(final SAMFileHeader fileHeader : fileHeaders) {
- Map<String, String> readerTranslationTable = idTranslationTable.get(fileHeader);
- if(readerTranslationTable == null) {
- readerTranslationTable = new HashMap<String, String>();
- idTranslationTable.put(fileHeader, readerTranslationTable);
- }
- readerTranslationTable.put(recordId, newId);
- }
-
- result.add( headerRecordFactory.createRecord(newId, record) );
- }
- }
-
- return hasCollisions;
- }
-
- /**
- * Convert an integer to base36, protected solely for testing
- * @param leftOver Both the initial value and the running quotient
- * @return A four digit string composed of base 36 symbols
- */
- public static String positiveFourDigitBase36Str(int leftOver) {
- if(leftOver == 0) {
- return "0";
- }
-
- final StringBuilder builder = new StringBuilder(10);
-
- while(leftOver > 0) {
- final int valueIndex = leftOver % 36;
- builder.append(INT_TO_BASE36[valueIndex]);
- leftOver /= 36;
- }
-
- return builder.reverse().toString();
- }
-
-
- /**
- * Get the sequences off the SAMFileHeader. Throws runtime exception if the sequence
- * are different from one another.
- *
- * @param headers headers to pull sequences from
- * @return sequences from files. Each file should have the same sequence
- */
- private SAMSequenceDictionary getSequenceDictionary(final Collection<SAMFileHeader> headers) {
- SAMSequenceDictionary sequences = null;
- for (final SAMFileHeader header : headers) {
-
- if (sequences == null) {
- sequences = header.getSequenceDictionary();
- }
- else {
- final SAMSequenceDictionary currentSequences = header.getSequenceDictionary();
- SequenceUtil.assertSequenceDictionariesEqual(sequences, currentSequences);
- }
- }
-
- return sequences;
- }
-
- /**
- * Get the sequences from the SAMFileHeader, and merge the resulting sequence dictionaries.
- *
- * @param headers headers to pull sequences from
- * @return sequences from files. Each file should have the same sequence
- */
- private SAMSequenceDictionary mergeSequenceDictionaries(final Collection<SAMFileHeader> headers) {
- SAMSequenceDictionary sequences = new SAMSequenceDictionary();
- for (final SAMFileHeader header : headers) {
- final SAMSequenceDictionary currentSequences = header.getSequenceDictionary();
- sequences = mergeSequences(sequences, currentSequences);
- }
- // second pass, make a map of the original seqeunce id -> new sequence id
- createSequenceMapping(headers, sequences);
- return sequences;
- }
-
- /**
- * They've asked to merge the sequence headers. What we support right now is finding the sequence name superset.
- *
- * @param mergeIntoDict the result of merging so far. All SAMSequenceRecords in here have been cloned from the originals.
- * @param mergeFromDict A new sequence dictionary to merge into mergeIntoDict.
- * @return A new sequence dictionary that resulting from merging the two inputs.
- */
- private SAMSequenceDictionary mergeSequences(final SAMSequenceDictionary mergeIntoDict, final SAMSequenceDictionary mergeFromDict) {
-
- // a place to hold the sequences that we haven't found a home for, in the order the appear in mergeFromDict.
- final LinkedList<SAMSequenceRecord> holder = new LinkedList<SAMSequenceRecord>();
-
- // Return value will be created from this.
- final LinkedList<SAMSequenceRecord> resultingDict = new LinkedList<SAMSequenceRecord>();
- for (final SAMSequenceRecord sequenceRecord : mergeIntoDict.getSequences()) {
- resultingDict.add(sequenceRecord);
- }
-
- // Index into resultingDict of previous SAMSequenceRecord from mergeFromDict that already existed in mergeIntoDict.
- int prevloc = -1;
- // Previous SAMSequenceRecord from mergeFromDict that already existed in mergeIntoDict.
- SAMSequenceRecord previouslyMerged = null;
-
- for (final SAMSequenceRecord sequenceRecord : mergeFromDict.getSequences()) {
- // Does it already exist in resultingDict?
- final int loc = getIndexOfSequenceName(resultingDict, sequenceRecord.getSequenceName());
- if (loc == -1) {
- // If doesn't already exist in resultingDict, save it an decide where to insert it later.
- holder.add(sequenceRecord.clone());
- } else if (prevloc > loc) {
- // If sequenceRecord already exists in resultingDict, but prior to the previous one
- // from mergeIntoDict that already existed, cannot merge.
- throw new PicardException("Cannot merge sequence dictionaries because sequence " +
- sequenceRecord.getSequenceName() + " and " + previouslyMerged.getSequenceName() +
- " are in different orders in two input sequence dictionaries.");
- } else {
- // Since sequenceRecord already exists in resultingDict, don't need to add it.
- // Add in all the sequences prior to it that have been held in holder.
- resultingDict.addAll(loc, holder);
- // Remember the index of sequenceRecord so can check for merge imcompatibility.
- prevloc = loc + holder.size();
- previouslyMerged = sequenceRecord;
- holder.clear();
- }
- }
- // Append anything left in holder.
- if (holder.size() != 0) {
- resultingDict.addAll(holder);
- }
- return new SAMSequenceDictionary(resultingDict);
- }
-
- /**
- * Find sequence in list.
- * @param list List to search for the sequence name.
- * @param sequenceName Name to search for.
- * @return Index of SAMSequenceRecord with the given name in list, or -1 if not found.
- */
- private static int getIndexOfSequenceName(final List<SAMSequenceRecord> list, final String sequenceName) {
- for (int i = 0; i < list.size(); ++i) {
- if (list.get(i).getSequenceName().equals(sequenceName)) {
- return i;
- }
- }
- return -1;
- }
-
- /**
- * create the sequence mapping. This map is used to convert the unmerged header sequence ID's to the merged
- * list of sequence id's.
- * @param headers the collections of headers.
- * @param masterDictionary the superset dictionary we've created.
- */
- private void createSequenceMapping(final Collection<SAMFileHeader> headers, final SAMSequenceDictionary masterDictionary) {
- final LinkedList<String> resultingDictStr = new LinkedList<String>();
- for (final SAMSequenceRecord r : masterDictionary.getSequences()) {
- resultingDictStr.add(r.getSequenceName());
- }
- for (final SAMFileHeader header : headers) {
- final Map<Integer, Integer> seqMap = new HashMap<Integer, Integer>();
- final SAMSequenceDictionary dict = header.getSequenceDictionary();
- for (final SAMSequenceRecord rec : dict.getSequences()) {
- seqMap.put(rec.getSequenceIndex(), resultingDictStr.indexOf(rec.getSequenceName()));
- }
- this.samSeqDictionaryIdTranslationViaHeader.put(header, seqMap);
- }
- }
-
-
-
- /**
- * Returns the read group id that should be used for the input read and RG id.
- *
- * @deprecated replaced by getReadGroupId(SAMFileHeader, String)
- * */
- public String getReadGroupId(final SAMFileReader reader, final String originalReadGroupId) {
- return getReadGroupId(reader.getFileHeader(), originalReadGroupId);
- }
-
- /** Returns the read group id that should be used for the input read and RG id. */
- public String getReadGroupId(final SAMFileHeader header, final String originalReadGroupId) {
- return this.samReadGroupIdTranslation.get(header).get(originalReadGroupId);
- }
-
- /**
- * @param reader one of the input files
- * @param originalProgramGroupId a program group ID from the above input file
- * @return new ID from the merged list of program groups in the output file
- * @deprecated replaced by getProgramGroupId(SAMFileHeader, String)
- */
- public String getProgramGroupId(final SAMFileReader reader, final String originalProgramGroupId) {
- return getProgramGroupId(reader.getFileHeader(), originalProgramGroupId);
- }
-
- /**
- * @param header one of the input headers
- * @param originalProgramGroupId a program group ID from the above input file
- * @return new ID from the merged list of program groups in the output file
- */
- public String getProgramGroupId(final SAMFileHeader header, final String originalProgramGroupId) {
- return this.samProgramGroupIdTranslation.get(header).get(originalProgramGroupId);
- }
-
- /** Returns true if there are read group duplicates within the merged headers. */
- public boolean hasReadGroupCollisions() {
- return this.hasReadGroupCollisions;
- }
-
- /** Returns true if there are program group duplicates within the merged headers. */
- public boolean hasProgramGroupCollisions() {
- return hasProgramGroupCollisions;
- }
-
- /** @return if we've merged the sequence dictionaries, return true */
- public boolean hasMergedSequenceDictionary() {
- return hasMergedSequenceDictionary;
- }
-
- /** Returns the merged header that should be written to any output merged file. */
- public SAMFileHeader getMergedHeader() {
- return this.mergedHeader;
- }
-
- /** Returns the collection of readers that this header merger is working with. May return null.
- * @deprecated replaced by getHeaders()
- */
- public Collection<SAMFileReader> getReaders() {
- return this.readers;
- }
-
- /** Returns the collection of readers that this header merger is working with.
- */
- public Collection<SAMFileHeader> getHeaders() {
- return this.headers;
- }
-
- /**
- * returns the new mapping for a specified reader, given it's old sequence index
- * @param reader the reader
- * @param oldReferenceSequenceIndex the old sequence (also called reference) index
- * @return the new index value
- * @deprecated replaced by getMergedSequenceIndex(SAMFileHeader, Integer)
- */
- public Integer getMergedSequenceIndex(final SAMFileReader reader, final Integer oldReferenceSequenceIndex) {
- return this.getMergedSequenceIndex(reader.getFileHeader(), oldReferenceSequenceIndex);
- }
-
- /**
- * Another mechanism for getting the new sequence index, for situations in which the reader is not available.
- * Note that if the SAMRecord has already had its header replaced with the merged header, this won't work.
- * @param header The original header for the input record in question.
- * @param oldReferenceSequenceIndex The original sequence index.
- * @return the new index value that is compatible with the merged sequence index.
- */
- public Integer getMergedSequenceIndex(final SAMFileHeader header, final Integer oldReferenceSequenceIndex) {
- final Map<Integer, Integer> mapping = this.samSeqDictionaryIdTranslationViaHeader.get(header);
- if (mapping == null) {
- throw new PicardException("No sequence dictionary mapping available for header: " + header);
- }
-
- final Integer newIndex = mapping.get(oldReferenceSequenceIndex);
- if (newIndex == null) {
- throw new PicardException("No mapping for reference index " + oldReferenceSequenceIndex + " from header: " + header);
- }
-
- return newIndex;
- }
-
-
- /**
- * Implementations of this interface are used by mergeHeaderRecords(..) to instantiate
- * specific subclasses of AbstractSAMHeaderRecord.
- */
- private static interface HeaderRecordFactory<RecordType extends AbstractSAMHeaderRecord> {
-
- /**
- * Constructs a new instance of RecordType.
- * @param id The id of the new record.
- * @param srcRecord Except for the id, the new record will be a copy of this source record.
- */
- public RecordType createRecord(final String id, RecordType srcRecord);
- }
-
- /**
- * Struct that groups together a subclass of AbstractSAMHeaderRecord with the
- * SAMFileHeader that it came from.
- */
- private static class HeaderRecordAndFileHeader<RecordType extends AbstractSAMHeaderRecord> {
- private final RecordType headerRecord;
- private final SAMFileHeader samFileHeader;
-
- public HeaderRecordAndFileHeader(final RecordType headerRecord, final SAMFileHeader samFileHeader) {
- this.headerRecord = headerRecord;
- this.samFileHeader = samFileHeader;
- }
-
- public RecordType getHeaderRecord() {
- return headerRecord;
- }
- public SAMFileHeader getFileHeader() {
- return samFileHeader;
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/SamFileValidator.java b/src/java/net/sf/picard/sam/SamFileValidator.java
deleted file mode 100644
index 5708cd7..0000000
--- a/src/java/net/sf/picard/sam/SamFileValidator.java
+++ /dev/null
@@ -1,800 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.metrics.MetricBase;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.reference.ReferenceSequenceFileWalker;
-import net.sf.picard.util.*;
-import net.sf.samtools.*;
-import net.sf.samtools.SAMFileReader.ValidationStringency;
-import net.sf.samtools.SAMValidationError.Type;
-import net.sf.samtools.util.*;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Validates SAM files as follows:
- * <ul>
- * <li>checks sam file header for sequence dictionary</li>
- * <li>checks sam file header for read groups</li>
- * <li>for each sam record
- * <ul>
- * <li>reports error detected by SAMRecord.isValid()</li>
- * <li>validates NM (nucleotide differences) exists and matches reality</li>
- * <li>validates mate fields agree with data in the mate record</li>
- * </ul>
- * </li>
- * </ul>
- *
- * @author Doug Voet
- * @see SAMRecord#isValid()
- */
-public class SamFileValidator {
- private Histogram<Type> errorsByType = new Histogram<Type>();
- private final PrintWriter out;
- private PairEndInfoMap pairEndInfoByName;
- private ReferenceSequenceFileWalker refFileWalker = null;
- private boolean verbose = false;
- private int maxVerboseOutput = 100;
- private SAMSortOrderChecker orderChecker;
- private Set<Type> errorsToIgnore = EnumSet.noneOf(Type.class);
- private boolean ignoreWarnings = false;
- private boolean bisulfiteSequenced = false;
- private boolean validateIndex = false;
- private boolean sequenceDictionaryEmptyAndNoWarningEmitted = false;
- private final int maxTempFiles;
-
- private final static Log log = Log.getInstance(SamFileValidator.class);
-
- public SamFileValidator(final PrintWriter out, final int maxTempFiles) {
- this.out = out;
- this.maxTempFiles = maxTempFiles;
- }
-
- /**
- * Sets one or more error types that should not be reported on.
- */
- public void setErrorsToIgnore(final Collection<Type> types) {
- if (!types.isEmpty()) {
- this.errorsToIgnore = EnumSet.copyOf(types);
- }
- }
-
- public void setIgnoreWarnings(final boolean ignoreWarnings) {
- this.ignoreWarnings = ignoreWarnings;
- }
-
- /**
- * Outputs validation summary report to out.
- *
- * @param samReader records to validate
- * @param reference if null, NM tag validation is skipped
- * @return boolean true if there are no validation errors, otherwise false
- */
- public boolean validateSamFileSummary(final SAMFileReader samReader, final ReferenceSequenceFile reference) {
- init(reference, samReader.getFileHeader());
-
- validateSamFile(samReader, out);
-
- boolean result = errorsByType.isEmpty();
-
- if (errorsByType.getCount() > 0) {
- // Convert to a histogram with String IDs so that WARNING: or ERROR: can be prepended to the error type.
- final Histogram<String> errorsAndWarningsByType = new Histogram<String>("Error Type", "Count");
- for (final Histogram<SAMValidationError.Type>.Bin bin : errorsByType.values()) {
- errorsAndWarningsByType.increment(bin.getId().getHistogramString(), bin.getValue());
- }
- final MetricsFile<ValidationMetrics, String> metricsFile = new MetricsFile<ValidationMetrics, String>();
- errorsByType.setBinLabel("Error Type");
- errorsByType.setValueLabel("Count");
- metricsFile.setHistogram(errorsAndWarningsByType);
- metricsFile.write(out);
- }
- cleanup();
- return result;
- }
-
- /**
- * Outputs validation error details to out.
- *
- * @param samReader records to validate
- * @param reference if null, NM tag validation is skipped
- * processing will stop after this threshold has been reached
- * @return boolean true if there are no validation errors, otherwise false
- */
- public boolean validateSamFileVerbose(final SAMFileReader samReader, final ReferenceSequenceFile reference) {
- init(reference, samReader.getFileHeader());
-
- try {
- validateSamFile(samReader, out);
- } catch (MaxOutputExceededException e) {
- out.println("Maximum output of [" + maxVerboseOutput + "] errors reached.");
- }
- boolean result = errorsByType.isEmpty();
- cleanup();
- return result;
- }
-
- public void validateBamFileTermination(final File inputFile) {
- BufferedInputStream inputStream = null;
- try {
- inputStream = IOUtil.toBufferedStream(new FileInputStream(inputFile));
- if (!BlockCompressedInputStream.isValidFile(inputStream)) {
- return;
- }
- final BlockCompressedInputStream.FileTermination terminationState =
- BlockCompressedInputStream.checkTermination(inputFile);
- if (terminationState.equals(BlockCompressedInputStream.FileTermination.DEFECTIVE)) {
- addError(new SAMValidationError(Type.TRUNCATED_FILE, "BAM file has defective last gzip block",
- inputFile.getPath()));
- } else if (terminationState.equals(BlockCompressedInputStream.FileTermination.HAS_HEALTHY_LAST_BLOCK)) {
- addError(new SAMValidationError(Type.BAM_FILE_MISSING_TERMINATOR_BLOCK,
- "Older BAM file -- does not have terminator block",
- inputFile.getPath()));
-
- }
- } catch (IOException e) {
- throw new PicardException("IOException", e);
- } finally {
- if (inputStream != null) {
- CloserUtil.close(inputStream);
- }
- }
- }
-
- private void validateSamFile(final SAMFileReader samReader, final PrintWriter out) {
- try {
- samReader.setValidationStringency(ValidationStringency.SILENT);
- validateHeader(samReader.getFileHeader());
- orderChecker = new SAMSortOrderChecker(samReader.getFileHeader().getSortOrder());
- validateSamRecordsAndQualityFormat(samReader, samReader.getFileHeader());
- validateUnmatchedPairs();
- if (validateIndex) {
- try {
- BamIndexValidator.exhaustivelyTestIndex(samReader);
- } catch (Exception e) {
- addError(new SAMValidationError(Type.INVALID_INDEX_FILE_POINTER, e.getMessage(), null));
- }
- }
-
- if (errorsByType.isEmpty()) {
- out.println("No errors found");
- }
- } finally {
- out.flush();
- }
- }
-
-
- /**
- * Report on reads marked as paired, for which the mate was not found.
- */
- private void validateUnmatchedPairs() {
- final InMemoryPairEndInfoMap inMemoryPairMap;
- if (pairEndInfoByName instanceof CoordinateSortedPairEndInfoMap) {
- // For the coordinate-sorted map, need to detect mate pairs in which the mateReferenceIndex on one end
- // does not match the readReference index on the other end, so the pairs weren't united and validated.
- inMemoryPairMap = new InMemoryPairEndInfoMap();
- CloseableIterator<Map.Entry<String, PairEndInfo>> it = ((CoordinateSortedPairEndInfoMap) pairEndInfoByName).iterator();
- while (it.hasNext()) {
- Map.Entry<String, PairEndInfo> entry = it.next();
- PairEndInfo pei = inMemoryPairMap.remove(entry.getValue().readReferenceIndex, entry.getKey());
- if (pei != null) {
- // Found a mismatch btw read.mateReferenceIndex and mate.readReferenceIndex
- List<SAMValidationError> errors = pei.validateMates(entry.getValue(), entry.getKey());
- for (final SAMValidationError error : errors) {
- addError(error);
- }
- } else {
- // Mate not found.
- inMemoryPairMap.put(entry.getValue().mateReferenceIndex, entry.getKey(), entry.getValue());
- }
- }
- it.close();
- } else {
- inMemoryPairMap = (InMemoryPairEndInfoMap) pairEndInfoByName;
- }
- // At this point, everything in InMemoryMap is a read marked as a pair, for which a mate was not found.
- for (final Map.Entry<String, PairEndInfo> entry : inMemoryPairMap) {
- addError(new SAMValidationError(Type.MATE_NOT_FOUND, "Mate not found for paired read", entry.getKey()));
- }
- }
-
- /**
- * SAM record and quality format validations are combined into a single method because validation must be completed
- * in only a single pass of the SamRecords (because a SamReader's iterator() method may not return the same
- * records on a subsequent call).
- */
- private void validateSamRecordsAndQualityFormat(final Iterable<SAMRecord> samRecords, final SAMFileHeader header) {
- final SAMRecordIterator iter = (SAMRecordIterator) samRecords.iterator();
- final ProgressLogger progress = new ProgressLogger(log, 10000000, "Validated Read");
- final QualityEncodingDetector qualityDetector = new QualityEncodingDetector();
- try {
- while (iter.hasNext()) {
- final SAMRecord record = iter.next();
-
- qualityDetector.add(record);
-
- final long recordNumber = progress.getCount() + 1;
- final Collection<SAMValidationError> errors = record.isValid();
- if (errors != null) {
- for (final SAMValidationError error : errors) {
- error.setRecordNumber(recordNumber);
- addError(error);
- }
- }
-
- validateMateFields(record, recordNumber);
- validateSortOrder(record, recordNumber);
- validateReadGroup(record, header);
- final boolean cigarIsValid = validateCigar(record, recordNumber);
- if (cigarIsValid) {
- validateNmTag(record, recordNumber);
- }
- validateSecondaryBaseCalls(record, recordNumber);
- validateTags(record, recordNumber);
- if (sequenceDictionaryEmptyAndNoWarningEmitted && !record.getReadUnmappedFlag()) {
- addError(new SAMValidationError(Type.MISSING_SEQUENCE_DICTIONARY, "Sequence dictionary is empty", null));
- sequenceDictionaryEmptyAndNoWarningEmitted = false;
-
- }
- progress.record(record);
- }
-
- try {
- if (progress.getCount() > 0) { // Avoid exception being thrown as a result of no qualities being read
- final FastqQualityFormat format = qualityDetector.generateBestGuess(QualityEncodingDetector.FileContext.SAM, FastqQualityFormat.Standard);
- if (format != FastqQualityFormat.Standard) {
- addError(new SAMValidationError(Type.INVALID_QUALITY_FORMAT, String.format("Detected %s quality score encoding, but expected %s.", format, FastqQualityFormat.Standard), null));
- }
- }
- } catch (PicardException e) {
- addError(new SAMValidationError(Type.INVALID_QUALITY_FORMAT, e.getMessage(), null));
- }
- } catch (SAMFormatException e) {
- // increment record number because the iterator behind the SAMFileReader
- // reads one record ahead so we will get this failure one record ahead
- final String msg = "SAMFormatException on record " + progress.getCount() + 1;
- out.println(msg);
- throw new PicardException(msg, e);
- } catch (FileTruncatedException e) {
- addError(new SAMValidationError(Type.TRUNCATED_FILE, "File is truncated", null));
- } finally {
- iter.close();
- }
- }
-
- private void validateReadGroup(final SAMRecord record, final SAMFileHeader header) {
- final SAMReadGroupRecord rg = record.getReadGroup();
- if (rg == null) {
- addError(new SAMValidationError(Type.RECORD_MISSING_READ_GROUP,
- "A record is missing a read group", record.getReadName()));
- } else if (header.getReadGroup(rg.getId()) == null) {
- addError(new SAMValidationError(Type.READ_GROUP_NOT_FOUND,
- "A record has a read group not found in the header: ",
- record.getReadName() + ", " + rg.getReadGroupId()));
- }
- }
-
- /**
- * Report error if a tag value is a Long.
- */
- private void validateTags(final SAMRecord record, final long recordNumber) {
- for (final SAMRecord.SAMTagAndValue tagAndValue : record.getAttributes()) {
- if (tagAndValue.value instanceof Long) {
- addError(new SAMValidationError(Type.TAG_VALUE_TOO_LARGE,
- "Numeric value too large for tag " + tagAndValue.tag,
- record.getReadName(), recordNumber));
- }
- }
- }
-
- private void validateSecondaryBaseCalls(final SAMRecord record, final long recordNumber) {
- final String e2 = (String) record.getAttribute(SAMTag.E2.name());
- if (e2 != null) {
- if (e2.length() != record.getReadLength()) {
- addError(new SAMValidationError(Type.MISMATCH_READ_LENGTH_AND_E2_LENGTH,
- String.format("E2 tag length (%d) != read length (%d)", e2.length(), record.getReadLength()),
- record.getReadName(), recordNumber));
- }
- final byte[] bases = record.getReadBases();
- final byte[] secondaryBases = StringUtil.stringToBytes(e2);
- for (int i = 0; i < Math.min(bases.length, secondaryBases.length); ++i) {
- if (SequenceUtil.isNoCall(bases[i]) || SequenceUtil.isNoCall(secondaryBases[i])) {
- continue;
- }
- if (SequenceUtil.basesEqual(bases[i], secondaryBases[i])) {
- addError(new SAMValidationError(Type.E2_BASE_EQUALS_PRIMARY_BASE,
- String.format("Secondary base call (%c) == primary base call (%c)",
- (char) secondaryBases[i], (char) bases[i]),
- record.getReadName(), recordNumber));
- break;
- }
- }
- }
- final String u2 = (String) record.getAttribute(SAMTag.U2.name());
- if (u2 != null && u2.length() != record.getReadLength()) {
- addError(new SAMValidationError(Type.MISMATCH_READ_LENGTH_AND_U2_LENGTH,
- String.format("U2 tag length (%d) != read length (%d)", u2.length(), record.getReadLength()),
- record.getReadName(), recordNumber));
- }
- }
-
- private boolean validateCigar(final SAMRecord record, final long recordNumber) {
- if (record.getReadUnmappedFlag()) {
- return true;
- }
- return validateCigar(record, recordNumber, true);
- }
-
- private boolean validateMateCigar(final SAMRecord record, final long recordNumber) {
- return validateCigar(record, recordNumber, false);
- }
-
- private boolean validateCigar(final SAMRecord record, final long recordNumber, final boolean isReadCigar) {
- final ValidationStringency savedStringency = record.getValidationStringency();
- record.setValidationStringency(ValidationStringency.LENIENT);
- final List<SAMValidationError> errors = isReadCigar ? record.validateCigar(recordNumber) : SAMUtils.validateMateCigar(record, recordNumber);
- record.setValidationStringency(savedStringency);
- if (errors == null) {
- return true;
- }
- boolean valid = true;
- for (final SAMValidationError error : errors) {
- addError(error);
- valid = false;
- }
- return valid;
- }
-
-
- private void validateSortOrder(final SAMRecord record, final long recordNumber) {
- final SAMRecord prev = orderChecker.getPreviousRecord();
- if (!orderChecker.isSorted(record)) {
- addError(new SAMValidationError(
- Type.RECORD_OUT_OF_ORDER,
- String.format(
- "The record is out of [%s] order, prior read name [%s], prior coodinates [%d:%d]",
- record.getHeader().getSortOrder().name(),
- prev.getReadName(),
- prev.getReferenceIndex(),
- prev.getAlignmentStart()),
- record.getReadName(),
- recordNumber));
- }
- }
-
- private void init(final ReferenceSequenceFile reference, final SAMFileHeader header) {
- if (header.getSortOrder() == SAMFileHeader.SortOrder.coordinate) {
- this.pairEndInfoByName = new CoordinateSortedPairEndInfoMap();
- } else {
- this.pairEndInfoByName = new InMemoryPairEndInfoMap();
- }
- if (reference != null) {
- this.refFileWalker = new ReferenceSequenceFileWalker(reference);
- }
- }
-
- private void cleanup() {
- this.errorsByType = null;
- this.pairEndInfoByName = null;
- this.refFileWalker = null;
- }
-
- private void validateNmTag(final SAMRecord record, final long recordNumber) {
- if (!record.getReadUnmappedFlag()) {
- final Integer tagNucleotideDiffs = record.getIntegerAttribute(ReservedTagConstants.NM);
- if (tagNucleotideDiffs == null) {
- addError(new SAMValidationError(
- Type.MISSING_TAG_NM,
- "NM tag (nucleotide differences) is missing",
- record.getReadName(),
- recordNumber));
- } else if (refFileWalker != null) {
- final ReferenceSequence refSequence = refFileWalker.get(record.getReferenceIndex());
- final int actualNucleotideDiffs = SequenceUtil.calculateSamNmTag(record, refSequence.getBases(),
- 0, isBisulfiteSequenced());
-
- if (!tagNucleotideDiffs.equals(actualNucleotideDiffs)) {
- addError(new SAMValidationError(
- Type.INVALID_TAG_NM,
- "NM tag (nucleotide differences) in file [" + tagNucleotideDiffs +
- "] does not match reality [" + actualNucleotideDiffs + "]",
- record.getReadName(),
- recordNumber));
- }
- }
- }
- }
-
- private void validateMateFields(final SAMRecord record, final long recordNumber) {
- if (!record.getReadPairedFlag() || record.isSecondaryOrSupplementary()) {
- return;
- }
- validateMateCigar(record, recordNumber);
-
- final PairEndInfo pairEndInfo = pairEndInfoByName.remove(record.getReferenceIndex(), record.getReadName());
- if (pairEndInfo == null) {
- pairEndInfoByName.put(record.getMateReferenceIndex(), record.getReadName(), new PairEndInfo(record, recordNumber));
- } else {
- final List<SAMValidationError> errors =
- pairEndInfo.validateMates(new PairEndInfo(record, recordNumber), record.getReadName());
- for (final SAMValidationError error : errors) {
- addError(error);
- }
- }
- }
-
- private void validateHeader(final SAMFileHeader fileHeader) {
- for (final SAMValidationError error : fileHeader.getValidationErrors()) {
- addError(error);
- }
- if (fileHeader.getVersion() == null) {
- addError(new SAMValidationError(Type.MISSING_VERSION_NUMBER, "Header has no version number", null));
- } else if (!SAMFileHeader.ACCEPTABLE_VERSIONS.contains(fileHeader.getVersion())) {
- addError(new SAMValidationError(Type.INVALID_VERSION_NUMBER, "Header version: " +
- fileHeader.getVersion() + " does not match any of the acceptable versions: " +
- StringUtil.join(", ", SAMFileHeader.ACCEPTABLE_VERSIONS.toArray(new String[0])),
- null));
- }
- if (fileHeader.getSequenceDictionary().isEmpty()) {
- sequenceDictionaryEmptyAndNoWarningEmitted = true;
- }
- if (fileHeader.getReadGroups().isEmpty()) {
- addError(new SAMValidationError(Type.MISSING_READ_GROUP, "Read groups is empty", null));
- }
- final List<SAMProgramRecord> pgs = fileHeader.getProgramRecords();
- for (int i = 0; i < pgs.size() - 1; i++) {
- for (int j = i + 1; j < pgs.size(); j++) {
- if (pgs.get(i).getProgramGroupId().equals(pgs.get(j).getProgramGroupId())) {
- addError(new SAMValidationError(Type.DUPLICATE_PROGRAM_GROUP_ID, "Duplicate " +
- "program group id: " + pgs.get(i).getProgramGroupId(), null));
- }
- }
- }
-
- final List<SAMReadGroupRecord> rgs = fileHeader.getReadGroups();
- final Set<String> readGroupIDs = new HashSet<String>();
-
- for (final SAMReadGroupRecord record : rgs) {
- final String readGroupID = record.getReadGroupId();
- if (readGroupIDs.contains(readGroupID)) {
- addError(new SAMValidationError(Type.DUPLICATE_READ_GROUP_ID, "Duplicate " +
- "read group id: " + readGroupID, null));
- } else {
- readGroupIDs.add(readGroupID);
- }
-
- final String platformValue = record.getPlatform();
- if (platformValue == null || "".equals(platformValue)) {
- addError(new SAMValidationError(Type.MISSING_PLATFORM_VALUE,
- "A platform (PL) attribute was not found for read group ",
- readGroupID));
- }
- }
-
- }
-
- private void addError(final SAMValidationError error) {
- // Just ignore an error if it's of a type we're not interested in
- if (this.errorsToIgnore.contains(error.getType())) return;
-
- if (this.ignoreWarnings && error.getType().severity == SAMValidationError.Severity.WARNING) return;
-
- this.errorsByType.increment(error.getType());
- if (verbose) {
- out.println(error);
- out.flush();
- if (this.errorsByType.getCount() >= maxVerboseOutput) {
- throw new MaxOutputExceededException();
- }
- }
- }
-
- /**
- * Control verbosity
- *
- * @param verbose True in order to emit a message per error or warning.
- * @param maxVerboseOutput If verbose, emit no more than this many messages. Ignored if !verbose.
- */
- public void setVerbose(final boolean verbose, final int maxVerboseOutput) {
- this.verbose = verbose;
- this.maxVerboseOutput = maxVerboseOutput;
- }
-
- public boolean isBisulfiteSequenced() {
- return bisulfiteSequenced;
- }
-
- public void setBisulfiteSequenced(boolean bisulfiteSequenced) {
- this.bisulfiteSequenced = bisulfiteSequenced;
- }
-
- public SamFileValidator setValidateIndex(boolean validateIndex) {
- // The SAMFileReader must also have IndexCaching enabled to have the index validated,
- // samReader.enableIndexCaching(true);
- this.validateIndex = validateIndex;
- return this;
- }
-
- public static class ValidationMetrics extends MetricBase {
- }
-
- /**
- * This class is used so we don't have to store the entire SAMRecord in memory while we wait
- * to find a record's mate and also to store the record number.
- */
- private static class PairEndInfo {
- private final int readAlignmentStart;
- private final int readReferenceIndex;
- private final boolean readNegStrandFlag;
- private final boolean readUnmappedFlag;
- private final String readCigarString;
-
- private final int mateAlignmentStart;
- private final int mateReferenceIndex;
- private final boolean mateNegStrandFlag;
- private final boolean mateUnmappedFlag;
- private final String mateCigarString;
-
- private final boolean firstOfPairFlag;
-
- private final long recordNumber;
-
- public PairEndInfo(final SAMRecord record, final long recordNumber) {
- this.recordNumber = recordNumber;
-
- this.readAlignmentStart = record.getAlignmentStart();
- this.readNegStrandFlag = record.getReadNegativeStrandFlag();
- this.readReferenceIndex = record.getReferenceIndex();
- this.readUnmappedFlag = record.getReadUnmappedFlag();
- this.readCigarString = record.getCigarString();
-
- this.mateAlignmentStart = record.getMateAlignmentStart();
- this.mateNegStrandFlag = record.getMateNegativeStrandFlag();
- this.mateReferenceIndex = record.getMateReferenceIndex();
- this.mateUnmappedFlag = record.getMateUnmappedFlag();
- final Object mcs = record.getAttribute(SAMTag.MC.name());
- this.mateCigarString = (mcs != null) ? (String) mcs : null;
-
- this.firstOfPairFlag = record.getFirstOfPairFlag();
- }
-
- private PairEndInfo(int readAlignmentStart, int readReferenceIndex, boolean readNegStrandFlag, boolean readUnmappedFlag,
- String readCigarString,
- int mateAlignmentStart, int mateReferenceIndex, boolean mateNegStrandFlag, boolean mateUnmappedFlag,
- String mateCigarString,
- boolean firstOfPairFlag, long recordNumber) {
- this.readAlignmentStart = readAlignmentStart;
- this.readReferenceIndex = readReferenceIndex;
- this.readNegStrandFlag = readNegStrandFlag;
- this.readUnmappedFlag = readUnmappedFlag;
- this.readCigarString = readCigarString;
- this.mateAlignmentStart = mateAlignmentStart;
- this.mateReferenceIndex = mateReferenceIndex;
- this.mateNegStrandFlag = mateNegStrandFlag;
- this.mateUnmappedFlag = mateUnmappedFlag;
- this.mateCigarString = mateCigarString;
- this.firstOfPairFlag = firstOfPairFlag;
- this.recordNumber = recordNumber;
- }
-
- public List<SAMValidationError> validateMates(final PairEndInfo mate, final String readName) {
- final List<SAMValidationError> errors = new ArrayList<SAMValidationError>();
- validateMateFields(this, mate, readName, errors);
- validateMateFields(mate, this, readName, errors);
- // Validations that should not be repeated on both ends
- if (this.firstOfPairFlag == mate.firstOfPairFlag) {
- final String whichEnd = this.firstOfPairFlag ? "first" : "second";
- errors.add(new SAMValidationError(
- Type.MATES_ARE_SAME_END,
- "Both mates are marked as " + whichEnd + " of pair",
- readName,
- this.recordNumber
- ));
- }
- return errors;
- }
-
- private void validateMateFields(final PairEndInfo end1, final PairEndInfo end2, final String readName, final List<SAMValidationError> errors) {
- if (end1.mateAlignmentStart != end2.readAlignmentStart) {
- errors.add(new SAMValidationError(
- Type.MISMATCH_MATE_ALIGNMENT_START,
- "Mate alignment does not match alignment start of mate",
- readName,
- end1.recordNumber));
- }
- if (end1.mateNegStrandFlag != end2.readNegStrandFlag) {
- errors.add(new SAMValidationError(
- Type.MISMATCH_FLAG_MATE_NEG_STRAND,
- "Mate negative strand flag does not match read negative strand flag of mate",
- readName,
- end1.recordNumber));
- }
- if (end1.mateReferenceIndex != end2.readReferenceIndex) {
- errors.add(new SAMValidationError(
- Type.MISMATCH_MATE_REF_INDEX,
- "Mate reference index (MRNM) does not match reference index of mate",
- readName,
- end1.recordNumber));
- }
- if (end1.mateUnmappedFlag != end2.readUnmappedFlag) {
- errors.add(new SAMValidationError(
- Type.MISMATCH_FLAG_MATE_UNMAPPED,
- "Mate unmapped flag does not match read unmapped flag of mate",
- readName,
- end1.recordNumber));
- }
- if ((end1.mateCigarString != null) && (!end1.mateCigarString.equals(end2.readCigarString))) {
- errors.add(new SAMValidationError(
- Type.MISMATCH_MATE_CIGAR_STRING,
- "Mate CIGAR string does not match CIGAR string of mate",
- readName,
- end1.recordNumber));
- }
- // Note - don't need to validate that the mateCigarString is a valid cigar string, since this
- // will be validated by validateCigar on the mate's record itself.
- }
- }
-
- /**
- * Thrown in addError indicating that maxVerboseOutput has been exceeded and processing should stop
- */
- private static class MaxOutputExceededException extends PicardException {
- MaxOutputExceededException() {
- super("maxVerboseOutput exceeded.");
- }
- }
-
- interface PairEndInfoMap extends Iterable<Map.Entry<String, PairEndInfo>> {
- void put(int mateReferenceIndex, String key, PairEndInfo value);
-
- PairEndInfo remove(int mateReferenceIndex, String key);
-
- CloseableIterator<Map.Entry<String, PairEndInfo>> iterator();
- }
-
- private class CoordinateSortedPairEndInfoMap implements PairEndInfoMap {
- private final CoordinateSortedPairInfoMap<String, PairEndInfo> onDiskMap =
- new CoordinateSortedPairInfoMap<String, PairEndInfo>(maxTempFiles, new Codec());
-
- public void put(int mateReferenceIndex, String key, PairEndInfo value) {
- onDiskMap.put(mateReferenceIndex, key, value);
- }
-
- public PairEndInfo remove(int mateReferenceIndex, String key) {
- return onDiskMap.remove(mateReferenceIndex, key);
- }
-
- public CloseableIterator<Map.Entry<String, PairEndInfo>> iterator() {
- return onDiskMap.iterator();
- }
-
- private class Codec implements CoordinateSortedPairInfoMap.Codec<String, PairEndInfo> {
- private DataInputStream in;
- private DataOutputStream out;
-
- public void setOutputStream(final OutputStream os) {
- this.out = new DataOutputStream(os);
- }
-
- public void setInputStream(final InputStream is) {
- this.in = new DataInputStream(is);
- }
-
- public void encode(final String key, final PairEndInfo record) {
- try {
- out.writeUTF(key);
- out.writeInt(record.readAlignmentStart);
- out.writeInt(record.readReferenceIndex);
- out.writeBoolean(record.readNegStrandFlag);
- out.writeBoolean(record.readUnmappedFlag);
- out.writeUTF(record.readCigarString);
- out.writeInt(record.mateAlignmentStart);
- out.writeInt(record.mateReferenceIndex);
- out.writeBoolean(record.mateNegStrandFlag);
- out.writeBoolean(record.mateUnmappedFlag);
- // writeUTF can't take null, so store a null mateCigarString as an empty string
- out.writeUTF(record.mateCigarString != null ? record.mateCigarString : "");
- out.writeBoolean(record.firstOfPairFlag);
- out.writeLong(record.recordNumber);
- } catch (IOException e) {
- throw new PicardException("Error spilling PairInfo to disk", e);
- }
- }
-
- public Map.Entry<String, PairEndInfo> decode() {
- try {
- final String key = in.readUTF();
- final int readAlignmentStart = in.readInt();
- final int readReferenceIndex = in.readInt();
- final boolean readNegStrandFlag = in.readBoolean();
- final boolean readUnmappedFlag = in.readBoolean();
- final String readCigarString = in.readUTF();
-
- final int mateAlignmentStart = in.readInt();
- final int mateReferenceIndex = in.readInt();
- final boolean mateNegStrandFlag = in.readBoolean();
- final boolean mateUnmappedFlag = in.readBoolean();
-
- // read mateCigarString - note that null value is stored as an empty string
- final String mcs = in.readUTF();
- final String mateCigarString = !mcs.isEmpty() ? mcs : null;
-
- final boolean firstOfPairFlag = in.readBoolean();
-
- final long recordNumber = in.readLong();
- final PairEndInfo rec = new PairEndInfo(readAlignmentStart, readReferenceIndex, readNegStrandFlag,
- readUnmappedFlag, readCigarString, mateAlignmentStart, mateReferenceIndex, mateNegStrandFlag,
- mateUnmappedFlag, mateCigarString,
- firstOfPairFlag, recordNumber);
- return new AbstractMap.SimpleEntry(key, rec);
- } catch (IOException e) {
- throw new PicardException("Error reading PairInfo from disk", e);
- }
- }
- }
- }
-
- private static class InMemoryPairEndInfoMap implements PairEndInfoMap {
- private final Map<String, PairEndInfo> map = new HashMap<String, PairEndInfo>();
-
- public void put(int mateReferenceIndex, String key, PairEndInfo value) {
- if (mateReferenceIndex != value.mateReferenceIndex)
- throw new IllegalArgumentException("mateReferenceIndex does not agree with PairEndInfo");
- map.put(key, value);
- }
-
- public PairEndInfo remove(int mateReferenceIndex, String key) {
- return map.remove(key);
- }
-
- public CloseableIterator<Map.Entry<String, PairEndInfo>> iterator() {
- final Iterator<Map.Entry<String, PairEndInfo>> it = map.entrySet().iterator();
- return new CloseableIterator<Map.Entry<String, PairEndInfo>>() {
- public void close() {
- // do nothing
- }
-
- public boolean hasNext() {
- return it.hasNext();
- }
-
- public Map.Entry<String, PairEndInfo> next() {
- return it.next();
- }
-
- public void remove() {
- it.remove();
- }
- };
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/SamFormatConverter.java b/src/java/net/sf/picard/sam/SamFormatConverter.java
deleted file mode 100644
index 6cc2759..0000000
--- a/src/java/net/sf/picard/sam/SamFormatConverter.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-
-import java.io.File;
-import java.util.Iterator;
-
-/**
- * Converts a BAM file to human-readable SAM output or vice versa
- *
- * @author ktibbett at broadinstitute.org
- */
-public class SamFormatConverter extends CommandLineProgram {
-
- private static final String PROGRAM_VERSION = "1.0";
-
- // The following attributes define the command-line arguments
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Convert a BAM file to a SAM file, or BAM to SAM.\n" + "" +
- "Input and output formats are determined by file extension.";
-
- @Option(doc="The BAM or SAM file to parse.", shortName= StandardOptionDefinitions.INPUT_SHORT_NAME) public File INPUT;
- @Option(doc="The BAM or SAM output file. ", shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME) public File OUTPUT;
-
- public static void main(final String[] argv) {
- new SamFormatConverter().instanceMainWithExit(argv);
- }
-
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
- final SAMFileReader reader = new SAMFileReader(INPUT);
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(reader.getFileHeader(), true, OUTPUT);
-
- if (CREATE_INDEX && writer.getFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate){
- throw new PicardException("Can't CREATE_INDEX unless sort order is coordinate");
- }
-
- final ProgressLogger progress = new ProgressLogger(Log.getInstance(SamFormatConverter.class));
- for (final SAMRecord rec : reader) {
- writer.addAlignment(rec);
- progress.record(rec);
- }
- reader.close();
- writer.close();
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/sam/SamToFastq.java b/src/java/net/sf/picard/sam/SamToFastq.java
deleted file mode 100755
index c81dd1a..0000000
--- a/src/java/net/sf/picard/sam/SamToFastq.java
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.fastq.FastqRecord;
-import net.sf.picard.fastq.FastqWriter;
-import net.sf.picard.fastq.FastqWriterFactory;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-import net.sf.samtools.util.Lazy;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * <p/>
- * Extracts read sequences and qualities from the input SAM/BAM file and writes them into
- * the output file in Sanger fastq format.
- * See <a href="http://maq.sourceforge.net/fastq.shtml">MAQ FastQ specification</a> for details.
- * In the RC mode (default is True), if the read is aligned and the alignment is to the reverse strand on the genome,
- * the read's sequence from input sam file will be reverse-complemented prior to writing it to fastq in order restore correctly
- * the original read sequence as it was generated by the sequencer.
- */
-public class SamToFastq extends CommandLineProgram {
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Extracts read sequences and qualities from the input SAM/BAM file and writes them into " +
- "the output file in Sanger fastq format. In the RC mode (default is True), if the read is aligned and the alignment is to the reverse strand on the genome, " +
- "the read's sequence from input SAM file will be reverse-complemented prior to writing it to fastq in order restore correctly" +
- "the original read sequence as it was generated by the sequencer.";
-
- @Option(doc = "Input SAM/BAM file to extract reads from", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
- public File INPUT;
-
- @Option(shortName = "F", doc = "Output fastq file (single-end fastq or, if paired, first end of the pair fastq).",
- mutex = {"OUTPUT_PER_RG"})
- public File FASTQ;
-
- @Option(shortName = "F2", doc = "Output fastq file (if paired, second end of the pair fastq).", optional = true,
- mutex = {"OUTPUT_PER_RG"})
- public File SECOND_END_FASTQ;
-
- @Option(shortName = "FU", doc = "Output fastq file for unpaired reads; may only be provided in paired-fastq mode", optional = true, mutex = {"OUTPUT_PER_RG"})
- public File UNPAIRED_FASTQ;
-
- @Option(shortName = "OPRG", doc = "Output a fastq file per read group (two fastq files per read group if the group is paired).",
- optional = true, mutex = {"FASTQ", "SECOND_END_FASTQ", "UNPAIRED_FASTQ"})
- public boolean OUTPUT_PER_RG;
-
- @Option(shortName = "ODIR", doc = "Directory in which to output the fastq file(s). Used only when OUTPUT_PER_RG is true.",
- optional = true)
- public File OUTPUT_DIR;
-
- @Option(shortName = "RC", doc = "Re-reverse bases and qualities of reads with negative strand flag set before writing them to fastq",
- optional = true)
- public boolean RE_REVERSE = true;
-
- @Option(shortName = "INTER", doc = "Will generate an interleaved fastq if paired, each line will have /1 or /2 to describe which end it came from")
- public boolean INTERLEAVE = false;
-
- @Option(shortName = "NON_PF", doc = "Include non-PF reads from the SAM file into the output FASTQ files.")
- public boolean INCLUDE_NON_PF_READS = false;
-
- @Option(shortName = "CLIP_ATTR", doc = "The attribute that stores the position at which " +
- "the SAM record should be clipped", optional = true)
- public String CLIPPING_ATTRIBUTE;
-
- @Option(shortName = "CLIP_ACT", doc = "The action that should be taken with clipped reads: " +
- "'X' means the reads and qualities should be trimmed at the clipped position; " +
- "'N' means the bases should be changed to Ns in the clipped region; and any " +
- "integer means that the base qualities should be set to that value in the " +
- "clipped region.", optional = true)
- public String CLIPPING_ACTION;
-
- @Option(shortName = "R1_TRIM", doc = "The number of bases to trim from the beginning of read 1.")
- public int READ1_TRIM = 0;
-
- @Option(shortName = "R1_MAX_BASES", doc = "The maximum number of bases to write from read 1 after trimming. " +
- "If there are fewer than this many bases left after trimming, all will be written. If this " +
- "value is null then all bases left after trimming will be written.", optional = true)
- public Integer READ1_MAX_BASES_TO_WRITE;
-
- @Option(shortName = "R2_TRIM", doc = "The number of bases to trim from the beginning of read 2.")
- public int READ2_TRIM = 0;
-
- @Option(shortName = "R2_MAX_BASES", doc = "The maximum number of bases to write from read 2 after trimming. " +
- "If there are fewer than this many bases left after trimming, all will be written. If this " +
- "value is null then all bases left after trimming will be written.", optional = true)
- public Integer READ2_MAX_BASES_TO_WRITE;
-
- @Option(doc = "If true, include non-primary alignments in the output. Support of non-primary alignments in SamToFastq " +
- "is not comprehensive, so there may be exceptions if this is set to true and there are paired reads with non-primary alignments.")
- public boolean INCLUDE_NON_PRIMARY_ALIGNMENTS = false;
-
- private final Log log = Log.getInstance(SamToFastq.class);
-
- public static void main(final String[] argv) {
- System.exit(new SamToFastq().instanceMain(argv));
- }
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- final SAMFileReader reader = new SAMFileReader(IoUtil.openFileForReading(INPUT));
- final Map<String, SAMRecord> firstSeenMates = new HashMap<String, SAMRecord>();
- final FastqWriterFactory factory = new FastqWriterFactory();
- factory.setCreateMd5(CREATE_MD5_FILE);
- final Map<SAMReadGroupRecord, FastqWriters> writers = generateWriters(reader.getFileHeader().getReadGroups(), factory);
-
- final ProgressLogger progress = new ProgressLogger(log);
- for (final SAMRecord currentRecord : reader) {
- if (currentRecord.isSecondaryOrSupplementary() && !INCLUDE_NON_PRIMARY_ALIGNMENTS)
- continue;
-
- // Skip non-PF reads as necessary
- if (currentRecord.getReadFailsVendorQualityCheckFlag() && !INCLUDE_NON_PF_READS)
- continue;
-
- final FastqWriters fq = writers.get(currentRecord.getReadGroup());
- if (currentRecord.getReadPairedFlag()) {
- final String currentReadName = currentRecord.getReadName();
- final SAMRecord firstRecord = firstSeenMates.remove(currentReadName);
- if (firstRecord == null) {
- firstSeenMates.put(currentReadName, currentRecord);
- } else {
- assertPairedMates(firstRecord, currentRecord);
-
- final SAMRecord read1 =
- currentRecord.getFirstOfPairFlag() ? currentRecord : firstRecord;
- final SAMRecord read2 =
- currentRecord.getFirstOfPairFlag() ? firstRecord : currentRecord;
- writeRecord(read1, 1, fq.getFirstOfPair(), READ1_TRIM, READ1_MAX_BASES_TO_WRITE);
- final FastqWriter secondOfPairWriter = fq.getSecondOfPair();
- if (secondOfPairWriter == null) {
- throw new PicardException("Input contains paired reads but no SECOND_END_FASTQ specified.");
- }
- writeRecord(read2, 2, secondOfPairWriter, READ2_TRIM, READ2_MAX_BASES_TO_WRITE);
- }
- } else {
- writeRecord(currentRecord, null, fq.getUnpaired(), READ1_TRIM, READ1_MAX_BASES_TO_WRITE);
- }
-
- progress.record(currentRecord);
- }
-
- reader.close();
-
- // Close all the fastq writers being careful to close each one only once!
- for (final FastqWriters writerMapping : new HashSet<FastqWriters>(writers.values())) {
- writerMapping.closeAll();
- }
-
- if (firstSeenMates.size() > 0) {
- SAMUtils.processValidationError(new SAMValidationError(SAMValidationError.Type.MATE_NOT_FOUND,
- "Found " + firstSeenMates.size() + " unpaired mates", null), VALIDATION_STRINGENCY);
- }
-
- return 0;
- }
-
- /**
- * Generates the writers for the given read groups or, if we are not emitting per-read-group, just returns the single set of writers.
- */
- private Map<SAMReadGroupRecord, FastqWriters> generateWriters(final List<SAMReadGroupRecord> samReadGroupRecords,
- final FastqWriterFactory factory) {
-
- final Map<SAMReadGroupRecord, FastqWriters> writerMap = new HashMap<SAMReadGroupRecord, FastqWriters>();
-
- final FastqWriters fastqWriters;
- if (!OUTPUT_PER_RG) {
- IoUtil.assertFileIsWritable(FASTQ);
- IoUtil.openFileForWriting(FASTQ);
- final FastqWriter firstOfPairWriter = factory.newWriter(FASTQ);
-
- final FastqWriter secondOfPairWriter;
- if (INTERLEAVE) {
- secondOfPairWriter = firstOfPairWriter;
- } else if (SECOND_END_FASTQ != null) {
- IoUtil.assertFileIsWritable(SECOND_END_FASTQ);
- IoUtil.openFileForWriting(SECOND_END_FASTQ);
- secondOfPairWriter = factory.newWriter(SECOND_END_FASTQ);
- } else {
- secondOfPairWriter = null;
- }
-
- /** Prepare the writer that will accept unpaired reads. If we're emitting a single fastq - and assuming single-ended reads -
- * then this is simply that one fastq writer. Otherwise, if we're doing paired-end, we emit to a third new writer, since
- * the other two fastqs are accepting only paired end reads. */
- final FastqWriter unpairedWriter = UNPAIRED_FASTQ == null ? firstOfPairWriter : factory.newWriter(UNPAIRED_FASTQ);
- fastqWriters = new FastqWriters(firstOfPairWriter, secondOfPairWriter, unpairedWriter);
-
- // For all read groups we may find in the bam, register this single set of writers for them.
- writerMap.put(null, fastqWriters);
- for (final SAMReadGroupRecord rg : samReadGroupRecords) {
- writerMap.put(rg, fastqWriters);
- }
- } else {
- // When we're creating a fastq-group per readgroup, by convention we do not emit a special fastq for unpaired reads.
- for (final SAMReadGroupRecord rg : samReadGroupRecords) {
- final FastqWriter firstOfPairWriter = factory.newWriter(makeReadGroupFile(rg, "_1"));
- // Create this writer on-the-fly; if we find no second-of-pair reads, don't bother making a writer (or delegating,
- // if we're interleaving).
- final Lazy<FastqWriter> lazySecondOfPairWriter = new Lazy<FastqWriter>(new Lazy.LazyInitializer<FastqWriter>() {
- @Override
- public FastqWriter make() {
- return INTERLEAVE ? firstOfPairWriter : factory.newWriter(makeReadGroupFile(rg, "_2"));
- }
- });
- writerMap.put(rg, new FastqWriters(firstOfPairWriter, lazySecondOfPairWriter, firstOfPairWriter));
- }
- }
- return writerMap;
- }
-
-
- private File makeReadGroupFile(final SAMReadGroupRecord readGroup, final String preExtSuffix) {
- String fileName = readGroup.getPlatformUnit();
- if (fileName == null) fileName = readGroup.getReadGroupId();
- fileName = IoUtil.makeFileNameSafe(fileName);
- if (preExtSuffix != null) fileName += preExtSuffix;
- fileName += ".fastq";
-
- final File result = (OUTPUT_DIR != null)
- ? new File(OUTPUT_DIR, fileName)
- : new File(fileName);
- IoUtil.assertFileIsWritable(result);
- return result;
- }
-
- void writeRecord(final SAMRecord read, final Integer mateNumber, final FastqWriter writer,
- final int basesToTrim, final Integer maxBasesToWrite) {
- final String seqHeader = mateNumber == null ? read.getReadName() : read.getReadName() + "/" + mateNumber;
- String readString = read.getReadString();
- String baseQualities = read.getBaseQualityString();
-
- // If we're clipping, do the right thing to the bases or qualities
- if (CLIPPING_ATTRIBUTE != null) {
- final Integer clipPoint = (Integer) read.getAttribute(CLIPPING_ATTRIBUTE);
- if (clipPoint != null) {
- if (CLIPPING_ACTION.equalsIgnoreCase("X")) {
- readString = clip(readString, clipPoint, null,
- !read.getReadNegativeStrandFlag());
- baseQualities = clip(baseQualities, clipPoint, null,
- !read.getReadNegativeStrandFlag());
-
- } else if (CLIPPING_ACTION.equalsIgnoreCase("N")) {
- readString = clip(readString, clipPoint, 'N',
- !read.getReadNegativeStrandFlag());
- } else {
- final char newQual = SAMUtils.phredToFastq(
- new byte[]{(byte) Integer.parseInt(CLIPPING_ACTION)}).charAt(0);
- baseQualities = clip(baseQualities, clipPoint, newQual,
- !read.getReadNegativeStrandFlag());
- }
- }
- }
- if (RE_REVERSE && read.getReadNegativeStrandFlag()) {
- readString = SequenceUtil.reverseComplement(readString);
- baseQualities = StringUtil.reverseString(baseQualities);
- }
- if (basesToTrim > 0) {
- readString = readString.substring(basesToTrim);
- baseQualities = baseQualities.substring(basesToTrim);
- }
-
- if (maxBasesToWrite != null && maxBasesToWrite < readString.length()) {
- readString = readString.substring(0, maxBasesToWrite);
- baseQualities = baseQualities.substring(0, maxBasesToWrite);
- }
-
- writer.write(new FastqRecord(seqHeader, readString, "", baseQualities));
-
- }
-
- /**
- * Utility method to handle the changes required to the base/quality strings by the clipping
- * parameters.
- *
- * @param src The string to clip
- * @param point The 1-based position of the first clipped base in the read
- * @param replacement If non-null, the character to replace in the clipped positions
- * in the string (a quality score or 'N'). If null, just trim src
- * @param posStrand Whether the read is on the positive strand
- * @return String The clipped read or qualities
- */
- private String clip(final String src, final int point, final Character replacement, final boolean posStrand) {
- final int len = src.length();
- String result = posStrand ? src.substring(0, point - 1) : src.substring(len - point + 1);
- if (replacement != null) {
- if (posStrand) {
- for (int i = point; i <= len; i++) {
- result += replacement;
- }
- } else {
- for (int i = 0; i <= len - point; i++) {
- result = replacement + result;
- }
- }
- }
- return result;
- }
-
- private void assertPairedMates(final SAMRecord record1, final SAMRecord record2) {
- if (!(record1.getFirstOfPairFlag() && record2.getSecondOfPairFlag() ||
- record2.getFirstOfPairFlag() && record1.getSecondOfPairFlag())) {
- throw new PicardException("Illegal mate state: " + record1.getReadName());
- }
- }
-
-
- /**
- * Put any custom command-line validation in an override of this method.
- * clp is initialized at this point and can be used to print usage and access argv.
- * Any options set by command-line parser can be validated.
- *
- * @return null if command line is valid. If command line is invalid, returns an array of error
- * messages to be written to the appropriate place.
- */
- protected String[] customCommandLineValidation() {
- if (INTERLEAVE && SECOND_END_FASTQ != null) {
- return new String[]{
- "Cannot set INTERLEAVE to true and pass in a SECOND_END_FASTQ"
- };
- }
-
- if (UNPAIRED_FASTQ != null && SECOND_END_FASTQ == null) {
- return new String[]{
- "UNPAIRED_FASTQ may only be set when also emitting read1 and read2 fastqs (so SECOND_END_FASTQ must also be set)."
- };
- }
-
- if ((CLIPPING_ATTRIBUTE != null && CLIPPING_ACTION == null) ||
- (CLIPPING_ATTRIBUTE == null && CLIPPING_ACTION != null)) {
- return new String[]{
- "Both or neither of CLIPPING_ATTRIBUTE and CLIPPING_ACTION should be set."};
- }
-
- if (CLIPPING_ACTION != null) {
- if (CLIPPING_ACTION.equals("N") || CLIPPING_ACTION.equals("X")) {
- // Do nothing, this is fine
- } else {
- try {
- Integer.parseInt(CLIPPING_ACTION);
- } catch (NumberFormatException nfe) {
- return new String[]{"CLIPPING ACTION must be one of: N, X, or an integer"};
- }
- }
- }
-
- if ((OUTPUT_PER_RG && OUTPUT_DIR == null) || ((!OUTPUT_PER_RG) && OUTPUT_DIR != null)) {
- return new String[]{
- "If OUTPUT_PER_RG is true, then OUTPUT_DIR should be set. " +
- "If "};
- }
-
-
- return null;
- }
-
- /**
- * A collection of {@link net.sf.picard.fastq.FastqWriter}s for particular types of reads.
- * <p/>
- * Allows for lazy construction of the second-of-pair writer, since when we are in the "output per read group mode", we only wish to
- * generate a second-of-pair fastq if we encounter a second-of-pair read.
- */
- static class FastqWriters {
- private final FastqWriter firstOfPair, unpaired;
- private final Lazy<FastqWriter> secondOfPair;
-
- /** Constructor if the consumer wishes for the second-of-pair writer to be built on-the-fly. */
- private FastqWriters(final FastqWriter firstOfPair, final Lazy<FastqWriter> secondOfPair, final FastqWriter unpaired) {
- this.firstOfPair = firstOfPair;
- this.unpaired = unpaired;
- this.secondOfPair = secondOfPair;
- }
-
- /** Simple constructor; all writers are pre-initialized.. */
- private FastqWriters(final FastqWriter firstOfPair, final FastqWriter secondOfPair, final FastqWriter unpaired) {
- this(firstOfPair, new Lazy<FastqWriter>(new Lazy.LazyInitializer<FastqWriter>() {
- @Override
- public FastqWriter make() {
- return secondOfPair;
- }
- }), unpaired);
- }
-
- public FastqWriter getFirstOfPair() {
- return firstOfPair;
- }
-
- public FastqWriter getSecondOfPair() {
- return secondOfPair.get();
- }
-
- public FastqWriter getUnpaired() {
- return unpaired;
- }
-
- public void closeAll() {
- final Set<FastqWriter> fastqWriters = new HashSet<FastqWriter>();
- fastqWriters.add(firstOfPair);
- fastqWriters.add(unpaired);
- // Make sure this is a no-op if the second writer was never fetched.
- if (secondOfPair.isInitialized()) fastqWriters.add(secondOfPair.get());
- for (final FastqWriter fastqWriter : fastqWriters) {
- fastqWriter.close();
- }
- }
- }
-}
diff --git a/src/java/net/sf/picard/sam/SortSam.java b/src/java/net/sf/picard/sam/SortSam.java
deleted file mode 100644
index ab5d324..0000000
--- a/src/java/net/sf/picard/sam/SortSam.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.*;
-
-import java.io.File;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SortSam extends CommandLineProgram {
- @Usage
- public String USAGE = getStandardUsagePreamble() + "Sorts the input SAM or BAM.\n" + "" +
- "Input and output formats are determined by file extension.";
-
- @Option(doc="The BAM or SAM file to sort.", shortName= StandardOptionDefinitions.INPUT_SHORT_NAME)
- public File INPUT;
-
- @Option(doc="The sorted BAM or SAM output file. ", shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME)
- public File OUTPUT;
-
- @Option(shortName=StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, doc="Sort order of output file")
- public SAMFileHeader.SortOrder SORT_ORDER;
-
- private final Log log = Log.getInstance(SortSam.class);
-
- public static void main(final String[] argv) {
- new SortSam().instanceMainWithExit(argv);
- }
-
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
- final SAMFileReader reader = new SAMFileReader(IoUtil.openFileForReading(INPUT));
- reader.getFileHeader().setSortOrder(SORT_ORDER);
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(reader.getFileHeader(), false, OUTPUT);
- writer.setProgressLogger(
- new ProgressLogger(log, (int) 1e7, "Wrote", "records from a sorting collection"));
-
- final ProgressLogger progress = new ProgressLogger(log, (int) 1e7, "Read");
- for (final SAMRecord rec: reader) {
- writer.addAlignment(rec);
- progress.record(rec);
- }
-
- log.info("Finished reading inputs, merging and writing to output now.");
-
- reader.close();
- writer.close();
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/sam/ValidateSamFile.java b/src/java/net/sf/picard/sam/ValidateSamFile.java
deleted file mode 100644
index dc2d448..0000000
--- a/src/java/net/sf/picard/sam/ValidateSamFile.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.PrintWriter;
-import java.util.List;
-import java.util.ArrayList;
-
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.util.FastqQualityFormat;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMValidationError;
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.reference.ReferenceSequenceFileFactory;
-
-/**
- * Command line program wrapping SamFileValidator.
- *
- * @author Doug Voet
- */
-public class ValidateSamFile extends CommandLineProgram {
-
- @Usage
- public final String USAGE =
- getStandardUsagePreamble() +
- "Read a SAM or BAM file and report on its validity.";
-
- public enum Mode { VERBOSE, SUMMARY }
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME,
- doc="Input SAM/BAM file")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME,
- doc="Output file or standard out if missing",
- optional=true)
- public File OUTPUT;
-
- @Option(shortName="M",
- doc="Mode of output")
- public Mode MODE = Mode.VERBOSE;
-
- @Option(doc="List of validation error types to ignore.")
- public List<SAMValidationError.Type> IGNORE = new ArrayList<SAMValidationError.Type>();
-
- @Option(shortName="MO",
- doc="The maximum number of lines output in verbose mode")
- public Integer MAX_OUTPUT = 100;
-
- @Option(shortName=StandardOptionDefinitions.REFERENCE_SHORT_NAME,
- doc="Reference sequence file, the NM tag check will be skipped if this is missing",
- optional=true)
- public File REFERENCE_SEQUENCE;
-
- @Option(doc="If true, only report errors and ignore warnings.")
- public boolean IGNORE_WARNINGS = false;
-
- @Option(doc="If true and input is a BAM file with an index file, also validates the index.")
- public boolean VALIDATE_INDEX = true;
-
- @Option (shortName="BISULFITE",
- doc="Whether the SAM or BAM file consists of bisulfite sequenced reads. " +
- "If so, C->T is not counted as an error in computing the value of the NM tag.")
- public boolean IS_BISULFITE_SEQUENCED = false;
-
- @Option(doc="Relevant for a coordinate-sorted file containing read pairs only. " +
- "Maximum number of file handles to keep open when spilling mate info to disk. " +
- "Set this number a little lower than the per-process maximum number of file that may be open. " +
- "This number can be found by executing the 'ulimit -n' command on a Unix system.")
- public int MAX_OPEN_TEMP_FILES = 8000;
-
- public static void main(final String[] args) {
- System.exit(new ValidateSamFile().instanceMain(args));
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- ReferenceSequenceFile reference = null;
- if (REFERENCE_SEQUENCE != null) {
- IoUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
- reference = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
-
- }
- final PrintWriter out;
- if (OUTPUT != null) {
- IoUtil.assertFileIsWritable(OUTPUT);
- try {
- out = new PrintWriter(OUTPUT);
- }
- catch (FileNotFoundException e) {
- // we already asserted this so we should not get here
- throw new PicardException("Unexpected exception", e);
- }
- }
- else {
- out = new PrintWriter(System.out);
- }
-
- final SAMFileReader.ValidationStringency originalStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- boolean result;
- try {
- final SAMFileReader samReader = new SAMFileReader(INPUT);
- if (!samReader.isBinary()) VALIDATE_INDEX=false;
- if (VALIDATE_INDEX){
- samReader.enableIndexCaching(true);
- }
- samReader.enableCrcChecking(true);
-
- final SamFileValidator validator = new SamFileValidator(out, MAX_OPEN_TEMP_FILES);
- validator.setErrorsToIgnore(IGNORE);
-
- if (IGNORE_WARNINGS) {
- validator.setIgnoreWarnings(IGNORE_WARNINGS);
- }
- if (MODE == Mode.SUMMARY) {
- validator.setVerbose(false, 0);
- } else {
- validator.setVerbose(true, MAX_OUTPUT);
- }
- if (IS_BISULFITE_SEQUENCED) {
- validator.setBisulfiteSequenced(IS_BISULFITE_SEQUENCED);
- }
- if (VALIDATE_INDEX){
- validator.setValidateIndex(VALIDATE_INDEX);
- }
- if (IoUtil.isRegularPath(INPUT)) {
- // Do not check termination if reading from a stream
- validator.validateBamFileTermination(INPUT);
- }
-
- result = false;
-
- switch (MODE) {
- case SUMMARY:
- result = validator.validateSamFileSummary(samReader, reference);
- break;
- case VERBOSE:
- result = validator.validateSamFileVerbose(samReader, reference);
- break;
- }
- out.flush();
- } finally {
- SAMFileReader.setDefaultValidationStringency(originalStringency);
- }
-
- return result ? 0 : 1;
- }
-}
diff --git a/src/java/net/sf/picard/sam/ViewSam.java b/src/java/net/sf/picard/sam/ViewSam.java
deleted file mode 100644
index 291a4b0..0000000
--- a/src/java/net/sf/picard/sam/ViewSam.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-
-import net.sf.samtools.*;
-import net.sf.samtools.util.AsciiWriter;
-
-/**
- * Very simple command that just reads a SAM or BAM file and writes out the header
- * and each records to standard out.
- *
- * @author tfennell at broad.mit.edu
- */
-public class ViewSam extends CommandLineProgram {
- public static enum AlignmentStatus { Aligned, Unaligned, All }
- public static enum PfStatus { PF, NonPF, All }
-
- @Usage public final String USAGE = getStandardUsagePreamble() + "Prints a SAM or BAM file to the screen.";
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The SAM or BAM file to view.")
- public File INPUT;
-
- @Option(doc="Print out all reads, just the aligned reads or just the unaligned reads.")
- public AlignmentStatus ALIGNMENT_STATUS = AlignmentStatus.All;
-
- @Option(doc="Print out all reads, just the PF reads or just the non-PF reads.")
- public PfStatus PF_STATUS = PfStatus.All;
-
- public static void main(final String[] args) {
- new ViewSam().instanceMain(args);
- }
-
- @Override
- protected int doWork() {
- return writeSamText(System.out);
- }
-
- /**
- * This is factored out of doWork only for unit testing.
- */
- int writeSamText(PrintStream printStream) {
- try {
- IoUtil.assertFileIsReadable(INPUT);
- final SAMFileReader in = new SAMFileReader(INPUT);
- final AsciiWriter writer = new AsciiWriter(printStream);
- final SAMFileHeader header = in.getFileHeader();
- if (header.getTextHeader() != null) {
- writer.write(header.getTextHeader());
- } else {
- // Headers that are too large are not retained as text, so need to regenerate text
- new SAMTextHeaderCodec().encode(writer, header, true);
- }
-
- for (final SAMRecord rec : in) {
- if (printStream.checkError()) {
- return 1;
- }
-
- if (this.ALIGNMENT_STATUS == AlignmentStatus.Aligned && rec.getReadUnmappedFlag()) continue;
- if (this.ALIGNMENT_STATUS == AlignmentStatus.Unaligned && !rec.getReadUnmappedFlag()) continue;
-
- if (this.PF_STATUS == PfStatus.PF && rec.getReadFailsVendorQualityCheckFlag()) continue;
- if (this.PF_STATUS == PfStatus.NonPF && !rec.getReadFailsVendorQualityCheckFlag()) continue;
-
- writer.write(rec.getSAMString());
- }
- writer.flush();
- if (printStream.checkError()) {
- return 1;
- }
- return 0;
- } catch (IOException e) {
- throw new PicardException("Exception writing SAM text", e);
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/AbstractInputParser.java b/src/java/net/sf/picard/util/AbstractInputParser.java
deleted file mode 100644
index c861c48..0000000
--- a/src/java/net/sf/picard/util/AbstractInputParser.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-
-import java.util.Iterator;
-
-import net.sf.samtools.util.AbstractIterator;
-import net.sf.samtools.util.CloseableIterator;
-
-/**
- * Class for parsing text files where each line consists of fields separated by whitespace.
- * Code is abstracted into this class so that we can optimize its performance over time.
- *
- * This class assumes that every line will have the same number of whitespace-separated "words"
- * and that lines that start with "#" are comments and should be ignored.
- *
- * Classes that extend this parser can do so simply by implementing their own constructors and the
- * readNextLine(), close(), and getFileName() methods.
- *
- * @author Kathleen Tibbetts
- */
-public abstract class AbstractInputParser
-extends AbstractIterator<String[]>
-implements Iterable<String[]>, CloseableIterator<String[]> {
-
- private boolean treatGroupedDelimitersAsOne = true; // Whether multiple delimiters in succession should be treated as one
- private int wordCount = 0; /* The number of delimiter-separated "words" per line of the file.
- We can save a little caclulation, or handle files with varying numbers of
- words per line, by specifying this if known in advance */
- private boolean skipBlankLines = true;
-
- /**
- * Closes this stream and releases any system resources associated with it.
- */
- public abstract void close();
-
- /**
- * @return the next line of text from the underlying stream(s) or null if there is no next line
- */
- protected abstract byte[] readNextLine();
-
- /**
- * @return the name(s) of the file(s) being parsed, or null if no name is available
- */
- public abstract String getFileName();
-
- /**
- * @return an iterator over a set of elements of type String[]
- */
- public Iterator<String[]> iterator() {
- if (isIterating()) {
- throw new IllegalStateException("iterator() method can only be called once, before the" +
- "first call to hasNext()");
- }
- hasNext();
- return this;
- }
-
- @Override
- protected String[] advance() {
- byte[] nextLine;
- do {
- nextLine = readNextLine();
- }
- while (nextLine != null && ((this.skipBlankLines && isBlank(nextLine)) || isComment(nextLine)));
- return nextLine == null ? null : parseLine(nextLine);
- }
-
- /**
- * This method represents the most efficient way (so far) to parse a line of whitespace-delimited text
- *
- * @param line the line to parse
- * @return an array of all the "words"
- */
- private String[] parseLine(final byte[] line) {
-
- if (getWordCount() == 0) {
- calculateWordCount(line);
- }
- final String[] parts = new String[getWordCount()];
- boolean delimiter = true;
- int index=0;
- int start = 0;
-
- try
- {
- for (int i = 0; i < line.length; i++) {
- if (isDelimiter(line[i])) {
- if (!delimiter) {
- parts[index++] = new String(line,start,i-start);
- }
- else if(!isTreatGroupedDelimitersAsOne()) {
- parts[index++] = null;
- }
- delimiter=true;
- }
- else {
- if (delimiter) start = i;
- delimiter = false;
- }
- }
- if (!delimiter) {
- parts[index] = new String(line,start,line.length-start);
- }
- }
- catch (ArrayIndexOutOfBoundsException e) {
- throw new PicardException("Unexpected number of elements found when parsing file " +
- this.getFileName() + ": " + index + ". Expected a maximum of " +
- this.getWordCount() + " elements per line:" + new String(line,0,line.length));
- }
- return parts;
- }
-
- /**
- * Calculates the number of delimiter-separated "words" in a line and sets the value of <code>wordCount</code>
- *
- * @param line representative line from the file
- */
- protected void calculateWordCount(final byte[] line) {
- int words = 0;
- boolean delimiter = true;
- for (final byte b : line) {
- if (isDelimiter(b)) {
- if (delimiter && !isTreatGroupedDelimitersAsOne()) words++;
- delimiter = true;
- } else {
- if (delimiter) words++;
- delimiter = false;
- }
- }
- if (delimiter && !isTreatGroupedDelimitersAsOne()) {
- words += 1;
- }
- setWordCount(words);
- }
-
- /**
- * Determines whether a given line is a comment
- *
- * @param line the line to evaluate
- * @return true if the line is a comment (and should be ignored) otherwise false
- */
- protected boolean isComment(final byte[] line) {
- return line.length > 0 && line[0] == '#';
- }
-
- /**
- * Determines whether a given line is a comment
- *
- * @param line the line to evaluate
- * @return true if the line is a comment (and should be ignored) otherwise false
- */
- protected boolean isBlank(final byte[] line) {
- return line.length == 0;
- }
-
- /**
- * Determines whether a given character is a delimiter
- *
- * @param b the character to evaluate
- * @return true if <code>b</code> is a delimiter; otherwise false
- */
- protected boolean isDelimiter(final byte b) {
- return b == ' ' || b == '\t';
- }
-
- protected int getWordCount() { return wordCount; }
- protected void setWordCount(final int wordCount) { this.wordCount = wordCount; }
- protected boolean isTreatGroupedDelimitersAsOne() { return treatGroupedDelimitersAsOne; }
- protected void setTreatGroupedDelimitersAsOne(final boolean treatGroupedDelimitersAsOne) {
- this.treatGroupedDelimitersAsOne = treatGroupedDelimitersAsOne;
- }
- protected boolean isSkipBlankLines() { return this.skipBlankLines; }
- protected void setSkipBlankLines(final boolean skipBlankLines) {
- this.skipBlankLines = skipBlankLines;
- }
-}
diff --git a/src/java/net/sf/picard/util/AdapterMarker.java b/src/java/net/sf/picard/util/AdapterMarker.java
deleted file mode 100644
index ac1476c..0000000
--- a/src/java/net/sf/picard/util/AdapterMarker.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.sam.ReservedTagConstants;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Store one or more AdapterPairs to use to mark adapter sequence of SAMRecords. This is a very compute-intensive process, so
- * this class implements two heuristics to reduce computation:
- * - Adapter sequences are truncated, and then any adapter pairs that become identical after truncation are collapsed into a single pair.
- * - After a specified number of reads with adapter sequence has been seen, prune the list of adapter pairs to include only the most
- * frequently seen adapters. For a flowcell, there should only be a single adapter pair found.
- *
- * Note that the AdapterPair object returned by all the adapterTrim* methods will not be one of the original AdapterPairs
- * passed to the ctor, but rather will be one of the truncated copies.
- */
-public class AdapterMarker {
- public static final int DEFAULT_ADAPTER_LENGTH = 30;
- public static final int DEFAULT_PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN = 100;
- public static final int DEFAULT_NUM_ADAPTERS_TO_KEEP = 1;
-
- // It is assumed that these are set once during execution, before the class is used to mark any adapters, but this is not enforced.
- private int thresholdForSelectingAdaptersToKeep = DEFAULT_PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN;
- private int numAdaptersToKeep = DEFAULT_NUM_ADAPTERS_TO_KEEP;
- private int minSingleEndMatchBases = ClippingUtility.MIN_MATCH_BASES;
- private int minPairMatchBases = ClippingUtility.MIN_MATCH_PE_BASES;
- private double maxSingleEndErrorRate = ClippingUtility.MAX_ERROR_RATE;
- private double maxPairErrorRate = ClippingUtility.MAX_PE_ERROR_RATE;
-
- // This is AtomicReference because one thread could be matching adapters while the threshold has been crossed in another
- // thread and the array is being replaced.
- private final AtomicReference<AdapterPair[]> adapters = new AtomicReference<AdapterPair[]>();
-
- // All the members below are only accessed within a synchronized block.
- private boolean thresholdReached = false;
- private int numAdaptersSeen = 0;
- private final CollectionUtil.DefaultingMap<AdapterPair, Integer> seenCounts = new CollectionUtil.DefaultingMap<AdapterPair, Integer>(0);
-
- /**
- * Truncates adapters to DEFAULT_ADAPTER_LENGTH
- * @param originalAdapters These should be in order from longest & most likely to shortest & least likely.
- */
- public AdapterMarker(final AdapterPair... originalAdapters) {
- this(DEFAULT_ADAPTER_LENGTH, originalAdapters);
- }
-
- /**
- * @param adapterLength Truncate adapters to this length.
- * @param originalAdapters These should be in order from longest & most likely to shortest & least likely.
- */
- public AdapterMarker(final int adapterLength, final AdapterPair... originalAdapters) {
- // Truncate each AdapterPair to the given length, and then combine any that end up the same after truncation.
- final ArrayList<TruncatedAdapterPair> truncatedAdapters = new ArrayList<TruncatedAdapterPair>();
- for (final AdapterPair adapter : originalAdapters) {
- final TruncatedAdapterPair truncatedAdapter = makeTruncatedAdapterPair(adapter, adapterLength);
- final int matchingIndex = truncatedAdapters.indexOf(truncatedAdapter);
- if (matchingIndex == -1) {
- truncatedAdapters.add(truncatedAdapter);
- } else {
- final TruncatedAdapterPair matchingAdapter = truncatedAdapters.get(matchingIndex);
- matchingAdapter.setName(matchingAdapter.getName() + "|" + adapter.getName());
- }
- }
- adapters.set(truncatedAdapters.toArray(new AdapterPair[truncatedAdapters.size()]));
- }
-
- public int getNumAdaptersToKeep() {
- return numAdaptersToKeep;
- }
-
- /**
- * After seeing the thresholdForSelectingAdapters number of adapters, keep up to this many of the original adapters.
- */
- public synchronized AdapterMarker setNumAdaptersToKeep(final int numAdaptersToKeep) {
- if (numAdaptersToKeep <= 0) {
- throw new IllegalArgumentException(String.format("numAdaptersToKeep should be positive: %d", numAdaptersToKeep));
- }
- this.numAdaptersToKeep = numAdaptersToKeep;
- return this;
- }
-
- public int getThresholdForSelectingAdaptersToKeep() {
- return thresholdForSelectingAdaptersToKeep;
- }
-
- /**
- * When this number of adapters have been matched, discard the least-frequently matching ones.
- * @param thresholdForSelectingAdaptersToKeep set to -1 to never discard any adapters.
- */
- public synchronized AdapterMarker setThresholdForSelectingAdaptersToKeep(final int thresholdForSelectingAdaptersToKeep) {
- this.thresholdForSelectingAdaptersToKeep = thresholdForSelectingAdaptersToKeep;
- return this;
- }
-
- public int getMinSingleEndMatchBases() {
- return minSingleEndMatchBases;
- }
-
- /**
- *
- * @param minSingleEndMatchBases When marking a single-end read, adapter must match at least this many bases.
- */
- public synchronized AdapterMarker setMinSingleEndMatchBases(final int minSingleEndMatchBases) {
- this.minSingleEndMatchBases = minSingleEndMatchBases;
- return this;
- }
-
- public int getMinPairMatchBases() {
- return minPairMatchBases;
- }
-
- /**
- *
- * @param minPairMatchBases When marking a paired-end read, adapter must match at least this many bases.
- */
- public synchronized AdapterMarker setMinPairMatchBases(final int minPairMatchBases) {
- this.minPairMatchBases = minPairMatchBases;
- return this;
- }
-
- public double getMaxSingleEndErrorRate() {
- return maxSingleEndErrorRate;
- }
-
- /**
- * @param maxSingleEndErrorRate For single-end read, no more than this fraction of the bases that align with the adapter can
- * mismatch the adapter and still be considered an adapter match.
- */
- public synchronized AdapterMarker setMaxSingleEndErrorRate(final double maxSingleEndErrorRate) {
- this.maxSingleEndErrorRate = maxSingleEndErrorRate;
- return this;
- }
-
- public double getMaxPairErrorRate() {
- return maxPairErrorRate;
- }
-
- /**
- * @param maxPairErrorRate For paired-end read, no more than this fraction of the bases that align with the adapter can
- * mismatch the adapter and still be considered an adapter match.
- */
- public synchronized AdapterMarker setMaxPairErrorRate(final double maxPairErrorRate) {
- this.maxPairErrorRate = maxPairErrorRate;
- return this;
- }
-
- public AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read) {
- return adapterTrimIlluminaSingleRead(read, minSingleEndMatchBases, maxSingleEndErrorRate);
- }
-
- public AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2) {
- return adapterTrimIlluminaPairedReads(read1, read2, minPairMatchBases, maxPairErrorRate);
- }
-
- /**
- * Overrides defaults for minMatchBases and maxErrorRate
- */
- public AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read, final int minMatchBases, final double maxErrorRate) {
- final AdapterPair ret = ClippingUtility.adapterTrimIlluminaSingleRead(read, minMatchBases, maxErrorRate, adapters.get());
- if (ret != null) tallyFoundAdapter(ret);
- return ret;
- }
-
- /**
- * Overrides defaults for minMatchBases and maxErrorRate
- */
- public AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2,
- final int minMatchBases, final double maxErrorRate) {
- final AdapterPair ret = ClippingUtility.adapterTrimIlluminaPairedReads(read1, read2, minMatchBases, maxErrorRate, adapters.get());
- if (ret != null) tallyFoundAdapter(ret);
- return ret;
- }
-
- /** For unit testing only */
- AdapterPair[] getAdapters() {
- return adapters.get();
- }
-
- private TruncatedAdapterPair makeTruncatedAdapterPair(final AdapterPair adapterPair, final int adapterLength) {
- return new TruncatedAdapterPair("truncated " + adapterPair.getName(),
- substringAndRemoveTrailingNs(adapterPair.get3PrimeAdapterInReadOrder(), adapterLength),
- substringAndRemoveTrailingNs(adapterPair.get5PrimeAdapterInReadOrder(), adapterLength));
- }
-
- /**
- * Truncate to the given length, and in addition truncate any trailing Ns.
- */
- private String substringAndRemoveTrailingNs(final String s, int length) {
- length = Math.min(length, s.length());
- final byte[] bytes = StringUtil.stringToBytes(s);
- while (length > 0 && SequenceUtil.isNoCall(bytes[length - 1])) {
- length--;
- }
- return s.substring(0, length);
- }
-
- /**
- * Keep track of every time an adapter is found, until it is time to prune the list of adapters.
- */
- private void tallyFoundAdapter(final AdapterPair foundAdapter) {
- // If caller does not want adapter pruning, do nothing.
- if (thresholdForSelectingAdaptersToKeep < 1) return;
- synchronized (this) {
- // Already pruned adapter list, so nothing more to do.
- if (thresholdReached) return;
-
- // Tally this adapter
- seenCounts.put(foundAdapter, seenCounts.get(foundAdapter) + 1);
-
- // Keep track of the number of times an adapter has been seen.
- numAdaptersSeen += 1;
-
- // Reached the threshold for pruning the list.
- if (numAdaptersSeen >= thresholdForSelectingAdaptersToKeep) {
-
- // Sort adapters by number of times each has been seen.
- final TreeMap<Integer, AdapterPair> sortedAdapters = new TreeMap<Integer, AdapterPair>(new Comparator<Integer>() {
- @Override
- public int compare(final Integer integer, final Integer integer2) {
- // Reverse of natural ordering
- return integer2.compareTo(integer);
- }
- });
- for (final Map.Entry<AdapterPair, Integer> entry : seenCounts.entrySet()) {
- sortedAdapters.put(entry.getValue(), entry.getKey());
- }
-
- // Keep the #numAdaptersToKeep adapters that have been seen the most, plus any ties.
- final ArrayList<AdapterPair> bestAdapters = new ArrayList<AdapterPair>(numAdaptersToKeep);
- int countOfLastAdapter = Integer.MAX_VALUE;
- for (final Map.Entry<Integer, AdapterPair> entry : sortedAdapters.entrySet()) {
- if (bestAdapters.size() >= numAdaptersToKeep) {
- if (entry.getKey() == countOfLastAdapter) {
- bestAdapters.add(entry.getValue());
- } else {
- break;
- }
- } else {
- countOfLastAdapter = entry.getKey();
- bestAdapters.add(entry.getValue());
- }
- }
- // Replace the existing list with the pruned list.
- thresholdReached = true;
- adapters.set(bestAdapters.toArray(new AdapterPair[bestAdapters.size()]));
- }
- }
- }
-
- private static class TruncatedAdapterPair implements AdapterPair {
- String name;
- final String fivePrime, threePrime, fivePrimeReadOrder;
- final byte[] fivePrimeBytes, threePrimeBytes, fivePrimeReadOrderBytes;
-
- private TruncatedAdapterPair(final String name, final String threePrimeReadOrder, final String fivePrimeReadOrder) {
- this.name = name;
- this.threePrime = threePrimeReadOrder;
- this.threePrimeBytes = StringUtil.stringToBytes(threePrimeReadOrder);
- this.fivePrimeReadOrder = fivePrimeReadOrder;
- this.fivePrimeReadOrderBytes = StringUtil.stringToBytes(fivePrimeReadOrder);
- this.fivePrime = SequenceUtil.reverseComplement(fivePrimeReadOrder);
- this.fivePrimeBytes = StringUtil.stringToBytes(this.fivePrime);
- }
-
- public String get3PrimeAdapter(){ return threePrime; }
- public String get5PrimeAdapter(){ return fivePrime; }
- public String get3PrimeAdapterInReadOrder(){ return threePrime; }
- public String get5PrimeAdapterInReadOrder() { return fivePrimeReadOrder; }
- public byte[] get3PrimeAdapterBytes() { return threePrimeBytes; }
- public byte[] get5PrimeAdapterBytes() { return fivePrimeBytes; }
- public byte[] get3PrimeAdapterBytesInReadOrder() { return threePrimeBytes; }
- public byte[] get5PrimeAdapterBytesInReadOrder() { return fivePrimeReadOrderBytes; }
-
- public String getName() { return this.name; }
-
- public void setName(final String name) {
- this.name = name;
- }
-
- // WARNING: These methods ignore the name member!
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final TruncatedAdapterPair that = (TruncatedAdapterPair) o;
-
- if (!fivePrime.equals(that.fivePrime)) return false;
- if (!threePrime.equals(that.threePrime)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = fivePrime.hashCode();
- result = 31 * result + threePrime.hashCode();
- return result;
- }
-
- @Override
- public String toString() {
- return "TruncatedAdapterPair{" +
- "fivePrimeReadOrder='" + fivePrimeReadOrder + '\'' +
- ", threePrime='" + threePrime + '\'' +
- ", name='" + name + '\'' +
- '}';
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/AdapterPair.java b/src/java/net/sf/picard/util/AdapterPair.java
deleted file mode 100644
index b9f0da1..0000000
--- a/src/java/net/sf/picard/util/AdapterPair.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.sf.picard.util;
-
-public interface AdapterPair {
-
- public String get3PrimeAdapter();
- public String get3PrimeAdapterInReadOrder();
- public byte[] get3PrimeAdapterBytes();
- public byte[] get3PrimeAdapterBytesInReadOrder();
-
- public String get5PrimeAdapter();
- public String get5PrimeAdapterInReadOrder();
- public byte[] get5PrimeAdapterBytes();
- public byte[] get5PrimeAdapterBytesInReadOrder();
-
- public String getName();
-}
diff --git a/src/java/net/sf/picard/util/AsyncIterator.java b/src/java/net/sf/picard/util/AsyncIterator.java
deleted file mode 100644
index 2c02aa1..0000000
--- a/src/java/net/sf/picard/util/AsyncIterator.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.util.CloseableIterator;
-
-import java.util.NoSuchElementException;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Wrapper around a CloseableIterator that reads in a separate thread, for cases in which that might be
- * efficient.
- */
-public class AsyncIterator<T> implements CloseableIterator<T> {
- private static volatile int threadsCreated = 0; // Just used for thread naming.
- public static final int DEFAULT_QUEUE_SIZE = 2000;
-
- private final AtomicBoolean isClosed = new AtomicBoolean(false);
- private final BlockingQueue<T> queue;
- private final Thread reader;
- private final ReaderRunnable readerRunnable;
- private final AtomicReference<Throwable> ex = new AtomicReference<Throwable>(null);
- private T theNext = null;
- private final CloseableIterator<T> underlyingIterator;
-
-
- public AsyncIterator(final CloseableIterator<T> underlyingIterator,
- final int queueSize,
- final String threadNamePrefix) {
- this.underlyingIterator = underlyingIterator;
- this.queue = new ArrayBlockingQueue<T>(queueSize);
- this.readerRunnable = new ReaderRunnable();
- this.reader = new Thread(readerRunnable, threadNamePrefix + threadsCreated++);
- this.reader.setDaemon(true);
- this.reader.start();
- getNext();
- }
-
-
- /**
- * Set theNext to the next item to be returned, or null if there are no more items.
- */
- private void getNext() {
- assertOpen();
-
- checkAndRethrow();
- try {
- theNext = null;
- while (!this.queue.isEmpty() || !this.readerRunnable.isDone()) {
- theNext = this.queue.poll(5, TimeUnit.SECONDS);
- checkAndRethrow();
- if (theNext != null) break;
- }
- } catch (InterruptedException ie) { throw new RuntimeException("Interrupted queueing item for writing.", ie); }
- checkAndRethrow();
- }
-
- public boolean hasNext() {
- assertOpen();
- return theNext != null;
- }
-
- public T next() {
- assertOpen();
- if (!hasNext()) throw new NoSuchElementException();
- final T ret = theNext;
- getNext();
- return ret;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Stops the thread and then calls synchronouslyClose() to allow implementation to do any one time clean up.
- */
- public void close() {
- checkAndRethrow();
-
- assertOpen();
- this.isClosed.set(true);
-
- try { this.reader.join(); }
- catch (InterruptedException ie) { throw new RuntimeException("Interrupted waiting on reader thread.", ie); }
-
- underlyingIterator.close();
- checkAndRethrow();
- this.queue.clear();
- }
-
- private void assertOpen() {
- if (this.isClosed.get()) {
- throw new RuntimeException("AsyncIterator already closed.");
- }
- }
-
- /**
- * Checks to see if an exception has been raised in the reader thread and if so rethrows it as an Error
- * or RuntimeException as appropriate.
- */
- private void checkAndRethrow() {
- final Throwable t = this.ex.get();
- if (t != null) {
- if (t instanceof Error) throw (Error) t;
- if (t instanceof RuntimeException) throw (RuntimeException) t;
- else throw new RuntimeException(t);
- }
- }
-
- /**
- * Small Runnable implementation that simply reads from underlying iterator and stores on the blocking queue.
- */
- private class ReaderRunnable implements Runnable {
- private final AtomicBoolean readerDone = new AtomicBoolean(false);
-
- public boolean isDone() { return readerDone.get(); }
-
- public void run() {
- try {
- boolean isEof = false;
- while (!isClosed.get() && !isEof) {
- try {
- if (!underlyingIterator.hasNext()) {
- isEof = true;
- } else {
- final T item = underlyingIterator.next();
- // Keep trying to put item on the queue unless close() has been called.
- while (!isClosed.get() && !queue.offer(item, 2, TimeUnit.SECONDS)) {
- }
- }
- }
- catch (InterruptedException ie) {
- /* Do Nothing */
- }
- }
- }
- catch (Throwable t) {
- ex.compareAndSet(null, t);
- } finally {
- readerDone.set(true);
- }
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/BasicInputParser.java b/src/java/net/sf/picard/util/BasicInputParser.java
deleted file mode 100644
index 4d6576f..0000000
--- a/src/java/net/sf/picard/util/BasicInputParser.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-
-import java.io.*;
-import java.util.Arrays;
-import java.util.ArrayList;
-
-import net.sf.samtools.util.BufferedLineReader;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.RuntimeIOException;
-
-/**
- * TextFileParser which reads a single text file.
- *
- * @author Kathleen Tibbetts
- */
-public class BasicInputParser extends AbstractInputParser
-{
- private BufferedLineReader reader;
- private final ArrayList<InputStream> inputs = new ArrayList<InputStream>();
- private final ArrayList<String> fileNames = new ArrayList<String>();
- String currentFileName = null;
- private String currentLine = null;
- private String nextLine = null;
- private int currentLineNumber = 0;
- private int nextLineNumber = 0;
-
- /**
- * Constructor. Opens up a buffered reader and reads the first line.
- *
- * @param inputStreams the file(s) to parse, in order
- */
- public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final InputStream... inputStreams) {
- if (inputStreams.length == 0) {
- throw new IllegalArgumentException("At least one input must be specified.");
- }
- this.inputs.addAll(Arrays.asList(inputStreams));
- reader = new BufferedLineReader(this.inputs.remove(0));
- this.setTreatGroupedDelimitersAsOne(treatGroupedDelimitersAsOne);
- }
-
- public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final int wordCount, final InputStream... inputStreams) {
- this(treatGroupedDelimitersAsOne, inputStreams);
- setWordCount(wordCount);
- }
-
- /**
- * Constructor. Opens up a buffered reader and reads the first line.
- *
- * @param files the file(s) to parse, in order
- */
- public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final File... files) {
- this(treatGroupedDelimitersAsOne, filesToInputStreams(files));
- for (File f : files) fileNames.add(f.getAbsolutePath());
- this.currentFileName = fileNames.remove(0);
- }
-
- /**
- * Constructor. In addition to opening and priming the files, it sets the number of
- * whitespace-separated "words" per line.
- *
- * @param files the file(s) to parse
- * @param wordCount number of whitespace-separated "words" per line
- */
- public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final int wordCount, final File... files) {
- this(treatGroupedDelimitersAsOne, files);
- setWordCount(wordCount);
- }
-
- /**
- * Workhorse method that reads the next line from the underlying reader
- *
- * @return String or null if there is no next line
- */
- protected byte[] readNextLine()
- {
- try {
- final String line = reader.readLine();
- if (nextLine != null && !isComment(nextLine.getBytes())) {
- currentLineNumber = nextLineNumber;
- currentLine = nextLine;
- }
- if (line != null) {
- nextLineNumber++;
- nextLine = line;
- return line.getBytes();
- }
- if (inputs.size() > 0) {
- advanceFile();
- return readNextLine();
- }
- return null;
- }
- catch(RuntimeIOException ioe) {
- throw new PicardException("Error reading from file " + currentFileName, ioe);
- }
- }
-
- protected void advanceFile() {
- currentFileName = fileNames.size() > 0 ? fileNames.remove(0) : null;
- nextLineNumber = 0;
- nextLine = null;
- reader = new BufferedLineReader(inputs.remove(0));
- }
-
- /**
- * Closes the underlying stream
- */
- public void close() {
- if (reader != null) {
- reader.close();
- }
- for(final InputStream stream : inputs){
- CloserUtil.close(stream);
- }
- }
-
- /**
- * Gets the name of the file being parsed
- *
- * @return the name of the file being parsed
- */
- public String getFileName() {
- return this.currentFileName != null ? this.currentFileName : "(file name unavailable)";
- }
-
- /**
- * Provides access to the current (just parsed) line in pre-parsed format.
- * NOTE: Because AbstractInputParser pre-fetches the next line, this method actually returns the
- * next line, not the most recent line returned by next().
- */
- public String getCurrentLine() {
- return this.currentLine;
- }
-
- /**
- * NOTE: Because AbstractInputParser pre-fetches the next line, this method actually returns the
- * next line, not the most recent line returned by next().
- */
- public int getCurrentLineNumber() {
- return currentLineNumber;
- }
-
- private static InputStream[] filesToInputStreams(final File files[]) {
- final InputStream result[] = new InputStream[files.length];
- for (int i = 0; i < files.length; i++) {
- result[i] = IoUtil.openFileForReading(files[i]);
- }
- return result;
- }
-}
diff --git a/src/java/net/sf/picard/util/CigarUtil.java b/src/java/net/sf/picard/util/CigarUtil.java
deleted file mode 100644
index cdb5df6..0000000
--- a/src/java/net/sf/picard/util/CigarUtil.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.*;
-import net.sf.samtools.util.CoordMath;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class CigarUtil {
- private static final Log log = Log.getInstance(CigarUtil.class);
-
- /** adjust the cigar based on adapter clipping.
- * TODO: If there is hard clipping at the end of the input CIGAR, it is lost. It should not be.
- * *
- * @param clipFrom 1-based position where the clipping starts
- * @param oldCigar The existing unclipped cigar
- * @return New adjusted list of cigar elements
- */
- // package visible so can be unit-tested
- public static List<CigarElement> softClipEndOfRead(final int clipFrom, final List<CigarElement> oldCigar) {
- final int clippedBases = (int)CoordMath.getLength(clipFrom, Cigar.getReadLength(oldCigar));
- List<CigarElement> newCigar = new LinkedList<CigarElement>();
- int pos = 1;
-
- for (CigarElement c : oldCigar) {
- // Distinguish two cases:
- // c occurs before the clipped region
- // c is adjacent to or straddles the boundary between clipped and unclipped region.
- // c never occurs after the clipped region; clipped region is always at the end
-
- final CigarOperator op = c.getOperator();
- final int length = op.consumesReadBases()? c.getLength() : 0;
- final int endPos = pos + length - 1; // same as pos on next iteration
-
- if (endPos < (clipFrom - 1)) {
- // handle elements before clip position (just copy them)
- newCigar.add(c);
-
- } else if (endPos >= (clipFrom - 1)) {
- // handle adjacent or straddling element
- elementStraddlesClippedRead(newCigar, c,
- (clipFrom -1) - (pos -1) , clippedBases);
- break;
- }
-
- pos = endPos + 1; // update pos for next iteration
- } // end loop over cigar elements
- return newCigar;
- }
-
- // a cigar element occurs in the middle of an adapter clipping
- static private void elementStraddlesClippedRead(List<CigarElement> newCigar, CigarElement c,
- int relativeClippedPosition,
- int clippedBases){
- final CigarOperator op = c.getOperator();
- int clipAmount = clippedBases;
- if (op.consumesReadBases()){
- if (op.consumesReferenceBases() & relativeClippedPosition > 0){
- newCigar.add(new CigarElement(relativeClippedPosition, op));
- }
- if (!op.consumesReferenceBases()){
- clipAmount = clippedBases + relativeClippedPosition;
- }
- } else if (relativeClippedPosition != 0){
- throw new SAMException("Unexpected non-0 relativeClippedPosition " + relativeClippedPosition);
- }
- newCigar.add(new CigarElement(clipAmount, CigarOperator.S)); // S is always last element
- }
-
- /**
- * Adds a soft-clip, based on <code>clipFrom</code>, to the SAM record's existing cigar
- * and, for negative strands, also adjusts the SAM record's start position.
- * Soft clips the end of the read as the read came off the sequencer.
- */
- public static void softClip3PrimeEndOfRead(SAMRecord rec, final int clipFrom) {
-
- final Cigar cigar = rec.getCigar();
- // we don't worry about SEED_REGION_LENGTH in clipFrom
- final boolean negativeStrand = rec.getReadNegativeStrandFlag();
- List<CigarElement> oldCigar = cigar.getCigarElements();
-
- if (!isValidCigar(rec, cigar, true)){
- return; // log message already issued
- }
- if (negativeStrand){
- // Can't just use Collections.reverse() here because oldCigar is unmodifiable
- oldCigar = new ArrayList<CigarElement>(oldCigar);
- Collections.reverse(oldCigar);
- }
- List<CigarElement> newCigarElems = CigarUtil.softClipEndOfRead(clipFrom, oldCigar);
-
- if (negativeStrand) {
- Collections.reverse(newCigarElems);
- }
-
- final Cigar newCigar = new Cigar(newCigarElems);
- if (negativeStrand){
- int oldLength = cigar.getReferenceLength();
- int newLength = newCigar.getReferenceLength();
- int sizeChange = oldLength - newLength;
- if (sizeChange > 0){
- rec.setAlignmentStart(rec.getAlignmentStart() + sizeChange);
- } else if (sizeChange < 0){
- throw new SAMException("The clipped length " + newLength +
- " is longer than the old unclipped length " + oldLength);
- }
- }
- rec.setCigar(newCigar);
-
- // Check that the end result is not a read without any aligned bases
- boolean hasMappedBases = false;
- for (final CigarElement elem : newCigar.getCigarElements()) {
- final CigarOperator op = elem.getOperator();
- if (op.consumesReferenceBases() && op.consumesReadBases()) {
- hasMappedBases = true;
- break;
- }
- }
-
- if (!hasMappedBases) {
- rec.setReadUnmappedFlag(true);
- rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR);
- rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY);
- rec.setInferredInsertSize(0);
- }
- else if (!isValidCigar(rec, newCigar, false)){
- // log message already issued
- throw new IllegalStateException("Invalid new Cigar: " + newCigar + " (" + oldCigar + ") for " +
- rec.getReadName());
- }
-
- }
-
- private static boolean isValidCigar(SAMRecord rec, Cigar cigar, boolean isOldCigar) {
- if (cigar == null || cigar.getCigarElements() == null || cigar.getCigarElements().size() == 0) {
- if (isOldCigar) {
- if (rec.getReadUnmappedFlag()) {
- // don't bother to warn since this does occur for PE reads
- } else {
- log.warn("Cigar is empty for read " + rec);
- }
- } else {
- log.error("Empty new cigar");
- }
- return false;
- }
-
- if (rec.getReadUnmappedFlag()){
- log.info("Unmapped read with cigar: " + rec.getReadName() + " (" + rec.getCigarString() + "/" + cigar.toString() + ")");
-
- }
- final List<SAMValidationError> validationErrors = cigar.isValid(rec.getReadName(), -1);
- if (validationErrors != null && validationErrors.size() != 0) {
- log.error("Invalid cigar for read " + rec +
- (isOldCigar ? " " : " for new cigar with clipped adapter ") +
- " (" + rec.getCigarString() + "/" + cigar.toString() + ") " +
- validationErrors);
- return false;
- }
-
- if (rec.getReadLength() != cigar.getReadLength()){
- // throw new PicardException(
- log.error( rec.getReadLength() +
- " read length does not = cigar length " + cigar.getReferenceLength() +
- (isOldCigar? " oldCigar " : " ") +
- rec + " cigar:" + cigar);
- return false;
- }
- return true;
- }
-
- /**
- * Adds additional soft-clipped bases at the 3' and/or 5' end of the cigar. Does not
- * change the existing cigar except to merge the newly added soft-clipped bases if the
- * element at the end of the cigar being modified is also a soft-clip.
- *
- * @param cigar The cigar on which to base the new cigar
- * @param negativeStrand Whether the read is on the negative strand
- * @param threePrimeEnd number of soft-clipped bases to add to the 3' end of the read
- * @param fivePrimeEnd number of soft-clipped bases to add to the 5' end of the read
- */
- public static Cigar addSoftClippedBasesToEndsOfCigar(Cigar cigar, boolean negativeStrand,
- final int threePrimeEnd, final int fivePrimeEnd) {
-
- List<CigarElement> newCigar = new ArrayList<CigarElement>(cigar.getCigarElements());
- if (negativeStrand) {
- Collections.reverse(newCigar);
- }
-
- if (threePrimeEnd > 0) {
- int last = newCigar.size()-1;
- int bases = threePrimeEnd;
- if (newCigar.get(last).getOperator() == CigarOperator.SOFT_CLIP) {
- CigarElement oldSoftClip = newCigar.remove(last);
- bases += oldSoftClip.getLength();
- }
- newCigar.add(new CigarElement(bases, CigarOperator.SOFT_CLIP));
- }
-
- if (fivePrimeEnd > 0) {
- int bases = fivePrimeEnd;
- if (newCigar.get(0).getOperator() == CigarOperator.SOFT_CLIP) {
- CigarElement oldSoftClip = newCigar.remove(0);
- bases += oldSoftClip.getLength();
- }
- newCigar.add(0, new CigarElement(bases, CigarOperator.SOFT_CLIP));
- }
-
- if (negativeStrand) {
- Collections.reverse(newCigar);
- }
- return new Cigar(newCigar);
- }
-
- // unpack a cigar string into an array of cigarOperators
- // to facilitate sequence manipulation
- public static char[] cigarArrayFromElements(List<CigarElement> cigar){
- int pos = 0;
- int length = 0;
- for (CigarElement e : cigar){
- length += e.getLength();
- }
- char[] result = new char[length];
- for (CigarElement e : cigar){
- for (int i = 0; i < e.getLength(); i++){
- CigarOperator o = e.getOperator();
- result[i+pos] = (char) CigarOperator.enumToCharacter(o);
- }
- pos += e.getLength();
- }
- return result;
- }
-
- // unpack a cigar string into an array of cigarOperators
- // to facilitate sequence manipulation
- public static char[] cigarArrayFromString(String cigar){
- return cigarArrayFromElements(TextCigarCodec.getSingleton().decode(cigar).getCigarElements());
- }
-
- // construct a cigar string from an array of cigarOperators.
- public static String cigarStringFromArray(final char[] cigar){
- String result = "";
- int length = cigar.length;
- char lastOp = 0; int lastLen = 0;
- for (int i=0; i < length; i++){
- if (cigar[i] == lastOp){
- lastLen++;
- } else if (cigar[i] == '-'){
- ; // nothing - just ignore '-'
- } else {
- if (lastOp != 0)
- result = result + Integer.toString(lastLen) + Character.toString(lastOp);
- lastLen = 1;
- lastOp = cigar[i];
- }
- }
- return result + Integer.toString(lastLen) + Character.toString(lastOp);
- }
-}
diff --git a/src/java/net/sf/picard/util/ClippingUtility.java b/src/java/net/sf/picard/util/ClippingUtility.java
deleted file mode 100644
index 96b5a75..0000000
--- a/src/java/net/sf/picard/util/ClippingUtility.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-import net.sf.samtools.SAMRecord;
-import net.sf.picard.sam.ReservedTagConstants;
-
-/**
- * Utilities to clip the adapater sequence from a SAMRecord read
- *
- * @author Tim Fennell
- */
-public class ClippingUtility {
-
- /**
- * The default value used for the minimum number of contiguous bases to match against.
- */
- public static final int MIN_MATCH_BASES = 12;
- /**
- * The default value used for the minimum number of contiguous bases to match against in a paired end read
- */
- public static final int MIN_MATCH_PE_BASES = 6;
-
- /**
- * The default value used for the maximum error rate when matching read bases to clippable sequence.
- */
- public static final double MAX_ERROR_RATE = 0.10;
- /**
- * The default value used for the maximum error rate when matching paired end read bases to clippable sequence.
- */
- public static final double MAX_PE_ERROR_RATE = 0.10;
-
- /**
- * The value returned by methods returning int when no match is found.
- */
- public static final int NO_MATCH = -1;
-
- private static final Log log = Log.getInstance(ClippingUtility.class);
-
- /**
- * @deprecated Use the varargs version. This no longer returns a warning string..
- */
- public static void adapterTrimIlluminaSingleRead(final SAMRecord read, final AdapterPair adapter) {
- adapterTrimIlluminaSingleRead(read, MIN_MATCH_BASES, MAX_ERROR_RATE, adapter);
- }
-
- /**
- * @deprecated Use the varargs version. This no longer returns a warning string..
- */
- public static void adapterTrimIlluminaSingleRead(final SAMRecord read, final AdapterPair adapter,
- final int minMatchBases, final double maxErrorRate) {
- adapterTrimIlluminaSingleRead(read, minMatchBases, maxErrorRate, adapter);
- }
-
- /**
- * Invokes adapterTrimIlluminRead with default parameters for a single read.
- * If the read is a negative strand, its bases will be reverse complemented
- * Simpler, more common of two overloads. Accepts multiple adapters
- * and tries them all until it finds the first one that matches.
- *
- * @param read SAM/BAM read to trim
- * @param adapters which adapters to try to use (indexed, paired_end, or single_end)
- * @return AdapterPair the AdapterPair matched, or null
- */
- public static AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read,final AdapterPair ... adapters) {
- return adapterTrimIlluminaSingleRead(read, MIN_MATCH_BASES, MAX_ERROR_RATE, adapters);
- }
-
- /**
- * Invokes adapterTrimIlluminRead with explicit matching thresholds for a single read.
- * If the read is a negative strand, a copy of its bases will be reverse complemented.
- * More general form of the two overloads. Accepts multiple adapters
- * and tries them all until it finds the first one that matches.
- *
- * @param read SAM/BAM read to trim
- * @param minMatchBases minimum number of contiguous bases to match against in a read
- * @param maxErrorRate maximum error rate when matching read bases
- * @param adapters which adapters to try (indexed, paired_end, or single_end)
- * @return AdapterPair the AdapterPair matched, or null
- */
- public static AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read, final int minMatchBases,
- final double maxErrorRate, final AdapterPair ... adapters) {
- for (AdapterPair adapter : adapters) {
- final int indexOfAdapterSequence = findIndexOfClipSequence(
- getReadBases(read), adapter.get3PrimeAdapterBytes(), minMatchBases, maxErrorRate);
- if (indexOfAdapterSequence != NO_MATCH) {
- // Convert to a one-based index for storage on the record.
- read.setAttribute(ReservedTagConstants.XT, indexOfAdapterSequence + 1);
- return adapter;
- }
- }
- return null;
- }
- /**
- * @deprecated Use the varargs version. This no longer returns a warning string..
- */
- public static String adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2, final AdapterPair adapters) {
- adapterTrimIlluminaPairedReads(read1, read2, MIN_MATCH_PE_BASES, MAX_PE_ERROR_RATE, adapters);
- return null;
- }
-
- /**
- * @deprecated Use the varargs version. This no longer returns a warning string..
- */
- public static String adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2,
- final AdapterPair adapters, final int minMatchBases, final double maxErrorRate) {
-
- adapterTrimIlluminaPairedReads(read1, read2, minMatchBases, maxErrorRate, adapters);
- return null;
- }
-
- /**
- * Invokes adapterTrimIlluminaPairedReads with default less stringent parameters for a pair of reads.
- * If the read is a negative strand, its bases will be reverse complemented
- * Simpler, more common of two overloads.
- *
- * @param read1 first read of the pair
- * @param read2 second read of the pair
- * @param adapters which adapters to use (indexed, paired_end, or single_end, nextera), attempted in order
- * @return int number of bases trimmed
- */
- public static AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2, final AdapterPair ... adapters) {
- return adapterTrimIlluminaPairedReads(read1, read2, MIN_MATCH_PE_BASES, MAX_PE_ERROR_RATE, adapters);
- }
-
- /**
- * Invokes adapterTrimIlluminaRead with explicit parameters for a pair of reads.
- * More general form of two overloads.
- * Returns a warning string when the trim positions found differed for each read.
- *
- * @param read1 first read of the pair.
- * If read1 is a negative strand, a copy of its bases will be reverse complemented.
- * @param read2 second read of the pair.
- * If read2 is a negative strand, a copy of its bases will be reverse complemented
- * @param minMatchBases minimum number of contiguous bases to match against in a read
- * @param maxErrorRate maximum error rate when matching read bases
- * @param adapters which adapters to use (indexed, paired_end, or single_end, nextera), attempted in order
- * @return int number of bases trimmed
- */
- public static AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2,
- final int minMatchBases, final double maxErrorRate, final AdapterPair ... adapters) {
- AdapterPair matched = null;
-
- for (final AdapterPair adapterPair : adapters) {
- final int index1 = findIndexOfClipSequence(
- getReadBases(read1), adapterPair.get3PrimeAdapterBytes(), minMatchBases, maxErrorRate);
- final int index2 = findIndexOfClipSequence(
- getReadBases(read2), adapterPair.get5PrimeAdapterBytesInReadOrder(), minMatchBases, maxErrorRate);
-
- if (index1 == index2) {
- if (index1 != NO_MATCH) {
- // This is the best result: both match exactly, we're done
- read1.setAttribute(ReservedTagConstants.XT, index1 + 1);
- read2.setAttribute(ReservedTagConstants.XT, index2 + 1);
- return adapterPair;
- }
- else {
- // Otherwise they were both no match, we just keep trying
- }
- } else if (index1 == NO_MATCH || index2 == NO_MATCH) {
- // One of them matched, but the other didn't.
- // Try matching the one that did match again with a little tighter
- // stringency and, if that works, trim both reads at the matching point.
- // This is only the second-best possibility... keep looking for a perfect match.
- if(attemptOneSidedMatch(read1, read2, index1, index2, 2 * minMatchBases)) {
- matched = adapterPair;
- }
-
- } else {
- // Both matched at different positions. Do nothing
- }
- }
-
-
- return matched;
- }
-
- /**
- * When an adapter is matched in only one end of a pair, we check it again with
- * stricter thresholds. If it still matches, then we trim both ends of the read
- * at the same location.
- */
- private static boolean attemptOneSidedMatch(final SAMRecord read1,
- final SAMRecord read2,
- final int index1,
- final int index2,
- final int stricterMinMatchBases) {
-
- // Save all the data about the read where we found the adapter match
- final int matchedIndex = index1 == NO_MATCH ? index2 : index1;
- final SAMRecord matchedRead = index1 == NO_MATCH ? read2 : read1;
-
-
- // If it still matches with a stricter minimum matched bases, then
- // clip both reads
- if (matchedRead.getReadLength() - matchedIndex >= stricterMinMatchBases) {
- if (read1.getReadBases().length > matchedIndex) {
- read1.setAttribute(ReservedTagConstants.XT, matchedIndex + 1);
- }
- if (read2.getReadBases().length > matchedIndex) {
- read2.setAttribute(ReservedTagConstants.XT, matchedIndex + 1);
- }
- return true;
- }
- return false;
- }
-
- /**
- * Returns an array of bytes representing the bases in the read,
- * reverse complementing them if the read is on the negative strand
- */
- private static byte[] getReadBases(final SAMRecord read) {
- if (!read.getReadNegativeStrandFlag()) {
- return read.getReadBases();
- }
- else {
- final byte[] reverseComplementedBases = new byte[read.getReadBases().length];
- System.arraycopy(read.getReadBases(), 0, reverseComplementedBases, 0, reverseComplementedBases.length);
- SequenceUtil.reverseComplement(reverseComplementedBases);
- return reverseComplementedBases;
- }
- }
-
- /**
- * Finds the first index of the adapterSequence sequence in the read sequence requiring at least minMatch
- * bases of pairwise alignment with a maximum number of errors dictated by maxErrorRate.
- *
- * @param read
- */
- public static int findIndexOfClipSequence(final byte[] read, final byte[] adapterSequence, final int minMatch, final double maxErrorRate) {
- // If the read's too short we can't possibly match it
- if (read == null || read.length < minMatch) return NO_MATCH;
- final int minClipPosition = 0;
-
- // Walk backwards down the read looking for the sequence
- READ_LOOP:
- for (int start = read.length - minMatch; start > minClipPosition -1; --start) {
- final int length = Math.min(read.length - start, adapterSequence.length);
- final int mismatchesAllowed = (int) (length * maxErrorRate);
- int mismatches = 0;
-
- for (int i = 0; i < length; ++i) {
- if (!SequenceUtil.isNoCall(adapterSequence[i]) && !SequenceUtil.basesEqual(adapterSequence[i], read[start + i])) {
- if (++mismatches > mismatchesAllowed) continue READ_LOOP;
- }
- }
-
- // If we got this far without breaking out, then it matches
- return start;
- }
-
- return NO_MATCH;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/util/CsvInputParser.java b/src/java/net/sf/picard/util/CsvInputParser.java
deleted file mode 100644
index 58e6a2c..0000000
--- a/src/java/net/sf/picard/util/CsvInputParser.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package net.sf.picard.util;
-
-import java.io.File;
-import java.io.InputStream;
-
-public class CsvInputParser extends BasicInputParser {
- /**
- * Constructor
- *
- * @param stream The input stream(s) to parse
- */
- public CsvInputParser(final boolean treatGroupedDelimitersAsOne, final InputStream... stream) {
- super(treatGroupedDelimitersAsOne, stream);
- }
-
- /**
- * Constructor
- *
- * @param file The file(s) to parse
- */
- public CsvInputParser(final boolean treatGroupedDelimitersAsOne, final File... file) {
- super(treatGroupedDelimitersAsOne, file);
- }
-
- /**
- * Determines whether a given character is a delimiter
- *
- * @param b the character to evaluate
- * @return true if <code>b</code> is a delimiter; otherwise false
- */
- @Override
- protected boolean isDelimiter(final byte b) {
- return b == ',';
- }
-
-}
diff --git a/src/java/net/sf/picard/util/DelimitedTextFileWithHeaderIterator.java b/src/java/net/sf/picard/util/DelimitedTextFileWithHeaderIterator.java
deleted file mode 100644
index 3681440..0000000
--- a/src/java/net/sf/picard/util/DelimitedTextFileWithHeaderIterator.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.util.*;
-
-/**
- * Iterate through a delimited text file in which columns are found by looking at a header line rather than by position.
- *
- * TODO: This effectively replaces TabbedTextFileWithHeaderParser although the latter hasn't been modified to use this
- * code instead.
- *
- * @author jgentry at broadinstitute.org
- */
-public class DelimitedTextFileWithHeaderIterator implements CloseableIterator<DelimitedTextFileWithHeaderIterator.Row> {
- public class Row {
- private final String[] fields;
- private final String currentLine;
-
- Row(final String[] fields, final String source) {
- this.fields = fields;
- this.currentLine = source;
- }
-
- /**
- * @return Array of fields in the order they appear in the file.
- */
- public String[] getFields() {
- return fields;
- }
-
- public String getField(final String columnLabel) {
- final Integer key = columnLabelIndices.get(columnLabel);
- if (key == null) throw new NoSuchElementException(String.format("column %s in %s", columnLabel, parser.getFileName()));
- return fields[key];
- }
-
- public Integer getIntegerField(final String columnLabel) {
- if (fields[columnLabelIndices.get(columnLabel)] == null) return null;
- return Integer.parseInt(fields[columnLabelIndices.get(columnLabel)]);
- }
-
- public String getCurrentLine() {
- return this.currentLine;
- }
- }
-
- /**
- * Map from column label to positional index.
- */
- private final Map<String, Integer> columnLabelIndices = new HashMap<String, Integer>();
- private final BasicInputParser parser;
-
- public DelimitedTextFileWithHeaderIterator(final BasicInputParser parser) {
- this.parser = parser;
- if (!parser.hasNext()) {
- throw new PicardException("No header line found in file " + parser.getFileName());
- }
- final String[] columnLabels = parser.next();
- for (int i = 0; i < columnLabels.length; ++i) {
- columnLabelIndices.put(columnLabels[i], i);
- }
- }
-
- /**
- * @param columnLabel
- * @return True if the given column label appears in the header.
- */
- public boolean hasColumn(final String columnLabel) {
- return columnLabelIndices.containsKey(columnLabel);
- }
-
- /**
- *
- * @return The set of column labels for this file in no particular order.
- */
- public Set<String> columnLabels() {
- return columnLabelIndices.keySet();
- }
-
- public int getCurrentLineNumber() {
- return parser.getCurrentLineNumber();
- }
-
- public Set<String> getColumnNames() {
- return Collections.unmodifiableSet(this.columnLabelIndices.keySet());
- }
-
- @Override
- public boolean hasNext() {
- return parser.hasNext();
- }
-
- @Override
- public Row next() {
- final String[] fields = parser.next();
- final String source = parser.getCurrentLine();
- return new Row(fields, source);
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void close() {
- parser.close();
- }
-}
diff --git a/src/java/net/sf/picard/util/FastqQualityFormat.java b/src/java/net/sf/picard/util/FastqQualityFormat.java
deleted file mode 100644
index a98bef6..0000000
--- a/src/java/net/sf/picard/util/FastqQualityFormat.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-/**
- * Enumeration for FastQ quality score formats formats.
- */
-public enum FastqQualityFormat {
- /** Early Solexa/Illumina (pre pipeline 1.3) style scores which encode Solexa qualities using an ASCII offset of 64 */
- Solexa,
- /** Recent Solexa/Illumina (pipeline 1.3+) style scores which encode PHRED qualities using an ASCII offset of 64 */
- Illumina,
- /** Sanger style FASTQ files which encode PHRED qualities using an ASCII offset of 33 */
- Standard
-}
diff --git a/src/java/net/sf/picard/util/FileAppendStreamLRUCache.java b/src/java/net/sf/picard/util/FileAppendStreamLRUCache.java
deleted file mode 100644
index 2989c56..0000000
--- a/src/java/net/sf/picard/util/FileAppendStreamLRUCache.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-
-/**
- * LRU cache of FileOutputStreams to handle situation in which it is necessary to have more FileOuputStreams
- * than resource limits will allow. Least-recently-used FileOutputStream is closed when it is pushed out of
- * the cache. When adding a new element to the cache, the file is opened in append mode.
- *
- * @author alecw at broadinstitute.org
- */
-public class FileAppendStreamLRUCache extends ResourceLimitedMap<File, FileOutputStream> {
- public FileAppendStreamLRUCache(final int cacheSize) {
- super(cacheSize, new Functor());
- }
-
- private static class Functor implements ResourceLimitedMapFunctor<File, FileOutputStream> {
-
- // Explicitly GC after this many calls to close() in order to force file handles to truly be released.
-
- private static final int GC_FREQUENCY = 10000;
- private int numCloses = 0;
-
- public FileOutputStream makeValue(final File file) {
- try {
- return new FileOutputStream(file, true);
- } catch (FileNotFoundException e) {
- // In case the file could not be opened because of too many file handles, try to force
- // file handles to be closed.
- System.gc();
- System.runFinalization();
- try {
- return new FileOutputStream(file, true);
- } catch (FileNotFoundException e2) {
- throw new PicardException(file + "not found", e2);
- }
- }
- }
-
- public void finalizeValue(final File file, final FileOutputStream fileOutputStream) {
- try {
- fileOutputStream.close();
- } catch (IOException e) {
- throw new PicardException("Exception closing FileOutputStream for " + file, e);
- }
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/FileChannelJDKBugWorkAround.java b/src/java/net/sf/picard/util/FileChannelJDKBugWorkAround.java
deleted file mode 100644
index 1ea405f..0000000
--- a/src/java/net/sf/picard/util/FileChannelJDKBugWorkAround.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.nio.channels.FileChannel;
-import java.nio.ByteBuffer;
-
-/**
- * Work-around for the following bug
- * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6503430
- *
- * Call the method in the main thread before launching threads that do memory-mapping.
- * @author alecw at broadinstitute.org
- */
-public class FileChannelJDKBugWorkAround {
- private static boolean alreadyCalled = false;
-
- public static byte doBugWorkAround() {
- if (alreadyCalled) return 0;
- try {
- File tmpFile = File.createTempFile("ignore-me.", ".bug-work-around");
- FileWriter writer = new FileWriter(tmpFile);
- writer.write("Hi, Mom!");
- writer.close();
- FileInputStream is = new FileInputStream(tmpFile);
- ByteBuffer buf = is.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, tmpFile.length());
- is.close();
- byte ret = buf.get();
- tmpFile.delete();
- alreadyCalled = true;
- return ret;
- } catch (IOException e) {
- throw new PicardException("IOException", e);
- }
-
- }
-}
diff --git a/src/java/net/sf/picard/util/FormatUtil.java b/src/java/net/sf/picard/util/FormatUtil.java
deleted file mode 100644
index 357494f..0000000
--- a/src/java/net/sf/picard/util/FormatUtil.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.Iso8601Date;
-
-import java.io.File;
-import java.security.InvalidParameterException;
-import java.text.*;
-import java.util.Date;
-import java.math.RoundingMode;
-
-/**
- * Simple class used to format object values into a standard format for printing.
- *
- * @author Tim Fennell
- */
-public class FormatUtil {
- private DateFormat dateFormat;
- private NumberFormat integerFormat;
- private NumberFormat floatFormat;
-
- /** Constructs a new FormatUtil and initializes various internal formatters. */
- public FormatUtil() {
- this.dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-
- this.integerFormat = NumberFormat.getIntegerInstance();
- this.integerFormat.setGroupingUsed(false);
-
- this.floatFormat = NumberFormat.getNumberInstance();
- this.floatFormat.setGroupingUsed(false);
- this.floatFormat.setMaximumFractionDigits(6);
- this.floatFormat.setRoundingMode(RoundingMode.HALF_DOWN);
- if (this.floatFormat instanceof DecimalFormat) {
- final DecimalFormat decimalFormat = (DecimalFormat)this.floatFormat;
- final DecimalFormatSymbols decimalFormatSymbols = decimalFormat.getDecimalFormatSymbols();
- decimalFormatSymbols.setNaN("?");
- decimalFormatSymbols.setInfinity("?");
- decimalFormat.setDecimalFormatSymbols(decimalFormatSymbols);
- }
- }
-
- /** Formats a short to an integer string. */
- public String format(short value) { return this.integerFormat.format(value); }
-
- /** Formats an int to an integer string. */
- public String format(int value) { return this.integerFormat.format(value); }
-
- /** Formats a long to an integer string. */
- public String format(long value) { return this.integerFormat.format(value); }
-
- /** Formats a float to a floating point string. */
- public String format(float value) {return this.floatFormat.format(value); }
-
- /** Formats a double to a floating point string. */
- public String format(double value) {return this.floatFormat.format(value); }
-
- /** Formats an enum to the String representation of an enum. */
- public String format(Enum value) { return value.name(); }
-
- /** Formats a date to a date string without time. */
- public String format(Date value) { return this.dateFormat.format(value); }
-
- /** Formats date & time */
- public String format(final Iso8601Date value) { return value.toString(); }
-
- /** Formats a boolean value to a String. */
- public String format(boolean value) { if (value) return "Y"; else return "N"; }
-
- /** Attempts to determine the type of value and format it appropriately. */
- public String format(Object value) {
- if (value == null) return "";
- if (value instanceof Short) return format( ((Short) value).shortValue() );
- if (value instanceof Integer) return format( ((Integer) value).intValue() );
- if (value instanceof Long) return format( ((Long) value).longValue() );
- if (value instanceof Float) return format( ((Float) value).floatValue() );
- if (value instanceof Double) return format( ((Double) value).doubleValue() );
- if (value instanceof Enum) return format( ((Enum) value) );
- if (value instanceof Iso8601Date) return format((Iso8601Date)value);
- if (value instanceof Date) return format( ((Date) value) );
- if (value instanceof Boolean) return format( ((Boolean) value).booleanValue() );
- return value.toString();
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // Parsing methods
- ///////////////////////////////////////////////////////////////////////////
-
- /** Parses a String into a short. */
- public short parseShort(String value) { return Short.parseShort(value); }
-
- /** Parses a String into an int. */
- public int parseInt(String value) { return Integer.parseInt(value); }
-
- /** Parses a String into a long. */
- public long parseLong(String value) { return Long.parseLong(value); }
-
- /** Parses a String into a float. */
- public float parseFloat(String value) {
- if ("?".equals(value) || "-?".equals(value)) return Float.NaN;
- else return Float.parseFloat(value);
- }
-
- /** Parses a String into a double. */
- public double parseDouble(String value) {
- if ("?".equals(value) || "-?".equals(value)) return Double.NaN;
- else return Double.parseDouble(value);
- }
-
- /** Parses a String into an Enum of the given type. */
- public <E extends Enum> E parseEnum(String value, Class<E> type) { return (E) Enum.valueOf(type, value); }
-
- /** Parses a String into a date. */
- public Date parseDate(String value) {
- try {
- return this.dateFormat.parse(value);
- }
- catch (ParseException pe) {
- throw new PicardException("Could not parse value as date: " + value, pe);
- }
- }
-
- /** Parse a String into an Iso8601 Date */
- public Iso8601Date parseIso8601Date(String value) { return new Iso8601Date(value); }
-
- /** Parses a String into a boolean. */
- public boolean parseBoolean(String value) {
- if (value == null || value.length() == 0) return false;
- char ch = Character.toUpperCase(value.charAt(0));
-
- return (ch == 'Y');
- }
-
- /**
- * Attempts to determine the correct parse method to call based on the desired
- * return type and then parses the String and returns the value.
- *
- * @param value the String value to be parsed
- * @param returnType the desired return type
- * @return an object of the returnType
- */
- public Object parseObject(String value, Class<?> returnType) {
- if (returnType == Short.class || returnType == Short.TYPE) return parseShort(value);
- if (returnType == Integer.class || returnType == Integer.TYPE) return parseInt(value);
- if (returnType == Long.class || returnType == Long.TYPE) return parseLong(value);
- if (returnType == Float.class || returnType == Float.TYPE) return parseFloat(value);
- if (returnType == Double.class || returnType == Double.TYPE) return parseDouble(value);
- if (returnType == Boolean.class || returnType == Boolean.TYPE) return parseBoolean(value);
- if (returnType == Iso8601Date.class) return parseIso8601Date(value);
- if (returnType == Date.class) return parseDate(value);
- if (returnType == Byte.class || returnType == Byte.TYPE) return parseInt(value);
- if (returnType == File.class) return new File(value);
- if (Enum.class.isAssignableFrom(returnType)) return parseEnum(value, (Class<? extends Enum>)returnType);
- if (returnType == String.class) return value;
-
- throw new InvalidParameterException("Don't know how to convert a String to a " + returnType.getName());
- }
-}
diff --git a/src/java/net/sf/picard/util/Histogram.java b/src/java/net/sf/picard/util/Histogram.java
deleted file mode 100644
index 0067830..0000000
--- a/src/java/net/sf/picard/util/Histogram.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import net.sf.picard.util.Histogram.Bin;
-
-import java.util.*;
-
-import static java.lang.Math.*;
-
-/**
- * Class for computing and accessing histogram type data. Stored internally in
- * a sorted Map so that keys can be iterated in order.
- *
- * @author Tim Fennell
- */
-public class Histogram<K extends Comparable> extends TreeMap<K, Bin> {
- private String binLabel = "BIN";
- private String valueLabel = "VALUE";
- private Double mean;
-
- /** Constructs a new Histogram with default bin and value labels. */
- public Histogram() { }
-
- /** Constructs a new Histogram with supplied bin and value labels. */
- public Histogram(final String binLabel, final String valueLabel) {
- this.binLabel = binLabel;
- this.valueLabel = valueLabel;
- }
-
- /** Constructs a new Histogram that'll use the supplied comparator to sort keys. */
- public Histogram(final Comparator<K> comparator) {
- super(comparator);
- }
-
- /** Constructor that takes labels for the bin and values and a comparator to sort the bins. */
- public Histogram(final String binLabel, final String valueLabel, final Comparator<K> comparator) {
- this(comparator);
- this.binLabel = binLabel;
- this.valueLabel = valueLabel;
- }
-
- /** Copy constructor for a histogram. */
- public Histogram(final Histogram<K> in) {
- super(in);
- this.binLabel = in.binLabel;
- this.valueLabel = in.valueLabel;
- this.mean = in.mean;
- }
-
- /** Represents a bin in the Histogram. */
- public class Bin {
- private final K id;
- private double value = 0;
-
- /** Constructs a new bin with the given ID. */
- private Bin(final K id) { this.id = id; }
-
- /** Gets the ID of this bin. */
- public K getId() { return id; }
-
- /** Gets the value in the bin. */
- public double getValue() { return value; }
-
- /** Returns the String format for the value in the bin. */
- public String toString() { return String.valueOf(this.value); }
-
- /** Checks the equality of the bin by ID and value. */
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final Bin bin = (Bin) o;
-
- if (Double.compare(bin.value, value) != 0) return false;
- if (!id.equals(bin.id)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result;
- final long temp;
- result = id.hashCode();
- temp = value != +0.0d ? Double.doubleToLongBits(value) : 0L;
- result = 31 * result + (int) (temp ^ (temp >>> 32));
- return result;
- }
-
- public double getIdValue() {
- if (id instanceof Number) {
- return ((Number) id).doubleValue();
- } else {
- throw new UnsupportedOperationException("getIdValue only supported for Histogram<? extends Number>");
- }
- }
- }
-
- /** Prefill the histogram with the supplied set of bins. */
- public void prefillBins(final K... ids) {
- for (final K id : ids) {
- put(id, new Bin(id));
- }
- }
-
- /** Increments the value in the designated bin by 1. */
- public void increment(final K id) {
- increment(id, 1d);
- }
-
- /** Increments the value in the designated bin by the supplied increment. */
- public void increment(final K id, final double increment) {
- Bin bin = get(id);
- if (bin == null) {
- bin = new Bin(id);
- put(id, bin);
- }
-
- bin.value += increment;
- mean = null;
- }
-
- public String getBinLabel() { return binLabel; }
- public void setBinLabel(final String binLabel) { this.binLabel = binLabel; }
-
- public String getValueLabel() { return valueLabel; }
- public void setValueLabel(final String valueLabel) { this.valueLabel = valueLabel; }
-
- /** Checks that the labels and values in the two histograms are identical. */
- public boolean equals(final Object o) {
- return o != null &&
- (o instanceof Histogram) &&
- ((Histogram) o).binLabel.equals(this.binLabel) &&
- ((Histogram) o).valueLabel.equals(this.valueLabel) &&
- super.equals(o);
- }
-
- public double getMean() {
- if (mean == null) {
- mean = getSum() / getCount();
- }
-
- return mean;
- }
-
- /**
- * Returns the sum of the products of the histgram bin ids and the number of entries in each bin.
- */
- public double getSum() {
- double total = 0;
- for (final Bin bin : values()) {
- total += bin.getValue() * bin.getIdValue();
- }
-
- return total;
- }
-
- /**
- * Returns the sum of the number of entries in each bin.
- */
- public double getSumOfValues() {
- double total = 0;
- for (final Bin bin : values()) {
- total += bin.getValue();
- }
-
- return total;
- }
-
- public double getStandardDeviation() {
- final double mean = getMean();
-
- double count = 0;
- double total = 0;
-
- for (final Bin bin : values()) {
- final double localCount = bin.getValue();
- final double value = bin.getIdValue();
-
- count += localCount;
- total += localCount * pow(value - mean, 2);
- }
-
- return Math.sqrt(total / (count-1));
- }
-
- /**
- * Calculates the mean bin size
- */
- public double getMeanBinSize() {
- return (getSumOfValues() / size());
- }
-
- /**
- * Calculates the median bin size
- */
- public double getMedianBinSize() {
- if (size() == 0) {
- return 0;
- }
-
- final List<Double> binValues = new ArrayList<Double>();
- for (final Bin bin : values()) {
- binValues.add(bin.getValue());
- }
- Collections.sort(binValues);
-
- final int midPoint = binValues.size() / 2;
- double median = binValues.get(midPoint);
- if (binValues.size() % 2 == 0) {
- median = (median + binValues.get(midPoint-1)) / 2;
- }
-
- return median;
- }
-
- /**
- * Calculates the standard deviation of the bin size
- */
- public double getStandardDeviationBinSize(final double mean) {
- double total = 0;
- for(final Bin bin : values()) {
- total += Math.pow(bin.getValue() - mean, 2);
- }
- return Math.sqrt(total / (Math.max(1,values().size()-1)));
- }
-
- /**
- * Gets the bin in which the given percentile falls.
- *
- * @param percentile a value between 0 and 1
- * @return the bin value in which the percentile falls
- */
- public double getPercentile(double percentile) {
- if (percentile <= 0) throw new IllegalArgumentException("Cannot query percentiles of 0 or below");
- if (percentile >= 1) throw new IllegalArgumentException("Cannot query percentiles of 1 or above");
-
- double total = getCount();
- double sofar = 0;
- for (Bin bin : values()) {
- sofar += bin.getValue();
- if (sofar / total >= percentile) return bin.getIdValue();
- }
-
- throw new IllegalStateException("Could not find percentile: " + percentile);
- }
-
- /**
- * Returns the cumulative probability of observing a value <= v when sampling the
- * distribution represented by this histogram.
- */
- public double getCumulativeProbability(final double v) {
- double count = 0;
- double total = 0;
-
- for (final Bin bin : values()) {
- final double binValue = bin.getIdValue();
- if (binValue <= v) count += bin.getValue();
- total += bin.getValue();
- }
-
- return count / total;
- }
-
- public double getMedian() {
- double total = 0;
- double count = getCount();
-
- // Base cases
- if (count == 0) return 0;
- if (count == 1) return values().iterator().next().getIdValue();
-
- final double midLow, midHigh;
- if (count % 2 == 0) {
- midLow = count / 2;
- midHigh = midLow + 1;
- }
- else {
- midLow = Math.ceil(count / 2);
- midHigh = midLow;
- }
-
- Double midLowValue = null;
- Double midHighValue = null;
- for (final Bin bin : values()) {
- total += bin.getValue();
- if (midLowValue == null && total >= midLow) midLowValue = bin.getIdValue();
- if (midHighValue == null && total >= midHigh) midHighValue = bin.getIdValue();
- if (midLowValue != null && midHighValue != null) break;
- }
-
- return (midLowValue + midHighValue) / 2;
- }
-
- /** Gets the median absolute deviation of the distribution. */
- public double getMedianAbsoluteDeviation() {
- final double median = getMedian();
- final Histogram<Double> deviations = new Histogram<Double>();
- for (final Bin bin : values()) {
- final double dev = abs(bin.getIdValue() - median);
- deviations.increment(dev, bin.getValue());
- }
-
- return deviations.getMedian();
- }
-
- /**
- * Returns a value that is intended to estimate the mean of the distribution, if the distribution is
- * essentially normal, by using the median absolute deviation to remove the effect of
- * erroneous massive outliers.
- */
- public double estimateSdViaMad() {
- return 1.4826 * getMedianAbsoluteDeviation();
- }
-
- /** Returns id of the Bin that's the mode of the distribution (i.e. the largest bin). */
- public double getMode() {
-
- return getModeBin().getIdValue();
- }
-
- /** Returns the Bin that's the mode of the distribution (i.e. the largest bin). */
- private Bin getModeBin() {
- Bin modeBin = null;
-
- for (final Bin bin : values()) {
- if (modeBin == null || modeBin.value < bin.value) {
- modeBin = bin;
- }
- }
-
- return modeBin;
- }
-
-
- public double getMin() {
- return firstEntry().getValue().getIdValue();
- }
-
- public double getMax() {
- return lastEntry().getValue().getIdValue();
- }
-
- public double getCount() {
- double count = 0;
- for (final Bin bin : values()) {
- count += bin.value;
- }
-
- return count;
- }
-
- /** Gets the geometric mean of the distribution. */
- public double getGeometricMean() {
- double total = 0;
- double count = 0;
- for (final Bin bin : values()) {
- total += bin.value * log(bin.getIdValue());
- count += bin.value;
- }
-
- return exp(total / count);
- }
-
- /**
- * Trims the histogram when the bins in the tail of the distribution contain fewer than mode/tailLimit items
- */
- public void trimByTailLimit(final int tailLimit) {
- if (isEmpty()) {
- return;
- }
-
- final Bin modeBin = getModeBin();
- final double mode = modeBin.getIdValue();
- final double sizeOfModeBin = modeBin.getValue();
- final double minimumBinSize = sizeOfModeBin/tailLimit;
- Histogram<K>.Bin lastBin = null;
-
- final List<K> binsToKeep = new ArrayList<K>();
- for (Histogram<K>.Bin bin : values()) {
- double binId = ((Number)bin.getId()).doubleValue();
-
- if (binId <= mode) {
- binsToKeep.add(bin.getId());
- }
- else if ((lastBin != null && ((Number)lastBin.getId()).doubleValue() != binId - 1) || bin.getValue() < minimumBinSize) {
- break;
- }
- else {
- binsToKeep.add(bin.getId());
- }
- lastBin = bin;
- }
-
- final Object keys[] = keySet().toArray();
- for (Object binId : keys) {
- if (!binsToKeep.contains((K)binId)) {
- remove(binId);
- }
- }
- }
-
- /**
- * Trims the histogram so that only bins <= width are kept.
- */
- public void trimByWidth(final int width) {
- final Iterator<K> it = descendingKeySet().iterator();
- while (it.hasNext()) {
-
- if (((Number)it.next()).doubleValue() > width) {
- it.remove();
- } else break;
- }
- }
-
- /***
- * Immutable method that divides the current Histogram by an input Histogram and generates a new one
- * Throws an exception if the bins don't match up exactly
- * @param divisorHistogram
- * @return
- * @throws IllegalArgumentException
- */
- public Histogram<K> divideByHistogram(final Histogram<K> divisorHistogram) throws IllegalArgumentException{
- Histogram<K> output = new Histogram<K>();
- if (!this.keySet().equals(divisorHistogram.keySet())) throw new IllegalArgumentException("Attempting to divide Histograms with non-identical bins");
- for (final K key : this.keySet()){
- Bin dividend = this.get(key);
- Bin divisor = divisorHistogram.get(key);
- output.increment(key, dividend.getValue()/divisor.getValue());
- }
- return output;
- }
-
- /***
- * Mutable method that allows the addition of a Histogram into the current one.
- * @param addHistogram
- */
- public void addHistogram(final Histogram<K> addHistogram) {
- for (final K key : addHistogram.keySet()){
- this.increment(key, addHistogram.get(key).getValue());
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/IlluminaUtil.java b/src/java/net/sf/picard/util/IlluminaUtil.java
deleted file mode 100644
index d1772c6..0000000
--- a/src/java/net/sf/picard/util/IlluminaUtil.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.Closeable;
-import java.util.List;
-
-/**
- * Misc utilities for working with Illumina specific files and data
- *
- * @author jburke at broadinstitute.org
- */
-public class IlluminaUtil {
-
- public static final String BARCODE_DELIMITER = "-";
-
- /**
- * Parse the tile # from the read name.
- * If we find that there are other elements needed from the read name, it might be a good idea to put
- * makeReadName() and various get..() methods into a new class.
- *
- * @param readName As produced by IlluminaUtil.makeReadName()
- * @return tile number, or null if read name is not in correct format.
- */
- public static Integer getTileFromReadName(final String readName) {
- final int first = readName.indexOf(':');
- if (first > 0) {
- final int second = readName.indexOf(':', first+1);
- if (second > 0) {
- final int third = readName.indexOf(':', second+1);
- if (third > 0) {
- return Integer.parseInt(readName.substring(second+1, third));
- }
- }
- }
-
- return null;
- }
-
- /**
- * Convert from Solexa-scaled ASCII qualities to Phred-scaled binary. The only difference is Solexa qualities have
- * 64 added to the phred binary to make them printable.
- *
- * @param solexaQualities Printable ASCII qualities.
- * @return binary Phred-scaled qualities.
- */
- public static byte[] makePhredBinaryFromSolexaQualityAscii_1_3(final String solexaQualities) {
- return makePhredBinaryFromSolexaQualityAscii_1_3(solexaQualities, 0, solexaQualities.length());
- }
-
- /**
- * Convert from Solexa-scaled ASCII qualities to Phred-scaled binary. The only difference is Solexa qualities have
- * 64 added to the phred binary to make them printable.
- *
- * @param solexaQualities Printable ASCII qualities.
- * @param offset Character at which to start conversion.
- * @param length Number of characters to convert.
- * @return binary Phred-scaled qualities.
- */
- public static byte[] makePhredBinaryFromSolexaQualityAscii_1_3(final String solexaQualities, final int offset, final int length) {
- final byte[] quals = StringUtil.stringToBytes(solexaQualities, offset, length);
- SolexaQualityConverter.getSingleton().convertSolexa_1_3_QualityCharsToPhredBinary(quals);
- return quals;
- }
-
- /**
- * Converts from Solexa ASCII to Phred binary in place. These are the older-style qualities
- * rather than Phred qualities with a different addend to make them printable.
- */
- public static void convertSolexaQualityAscii_1_1_ToPhredBinary(final byte[] solexaQualities) {
- SolexaQualityConverter.getSingleton().convertSolexaQualityCharsToPhredBinary(solexaQualities);
- }
-
- /**
- * Get a Solexa ASCII quality value from an array of strings that are integer qualities in this order:
- * [cycle-1-A, cycle-1-C, cycle-1-G, cycle-1-T, cycle-2-A, ...]. The best quality from the 4 qualities for
- * the cycle is found, and then it is ASCII-ized by adding 64.
- * @param qualities Array of integer quality strings.
- * @param cycleNumber Which cycle to get quality for.
- * @param formatter For converting decimal strings to ints.
- * @return best quality for the given cycle.
- * @throws net.sf.picard.PicardException if the best quality ASCII value is > 255.
- */
- public static byte getSolexaQualityCharFromFourQualities(final String[] qualities, final int cycleNumber, final FormatUtil formatter) {
- // It apparently is the case that all 4 qualities might be negative, but this appears to correspond to
- // an no-called base.
- int bestQuality = Integer.MIN_VALUE;
- final int startOffset = (cycleNumber - 1) * 4;
- for (int i = startOffset; i < startOffset + 4; ++i) {
- final int quality = formatter.parseInt(qualities[i]);
- if (quality > bestQuality) {
- bestQuality = quality;
- }
- }
- final int qualityAsCharacter = bestQuality + SolexaQualityConverter.SOLEXA_ADDEND;
- if (qualityAsCharacter > 255) {
- throw new PicardException("Quality too large: " + bestQuality);
- }
- return (byte)(qualityAsCharacter & 0xff);
- }
-
- // Strings indented below to make these easier to compare visually.
- /** Describes adapters used on each pair of strands */
- public static enum IlluminaAdapterPair implements AdapterPair {
-
- PAIRED_END( "AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT", //58 bases)
- "AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG"), // 61 bases
-
- INDEXED ( "AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT",
- "AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"), // note 8 N's // 67 bases
-
- SINGLE_END ( "AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT",
- "AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"),
-
- NEXTERA_V1( "AATGATACGGCGACCACCGAGATCTACACGCCTCCCTCGCGCCATCAGAGATGTGTATAAGAGACAG",
- "CTGTCTCTTATACACATCTCTGAGCGGGCTGGCAAGGCAGACCGNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
-
- NEXTERA_V2( "AATGATACGGCGACCACCGAGATCTACACNNNNNNNNTCGTCGGCAGCGTCAGATGTGTATAAGAGACAG",
- "CTGTCTCTTATACACATCTCCGAGCCCACGAGACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
-
- DUAL_INDEXED( "AATGATACGGCGACCACCGAGATCTNNNNNNNNACACTCTTTCCCTACACGACGCTCTTCCGATCT",
- "AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
-
- FLUIDIGM( "AATGATACGGCGACCACCGAGATCTACACTGACGACATGGTTCTACA",
- "AGACCAAGTCTCTGCTACCGTANNNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
-
- TRUSEQ_SMALLRNA( "AATGATACGGCGACCACCGAGATCTACACGTTCAGAGTTCTACAGTCCGACGATC",
- "TGGAATTCTCGGGTGCCAAGGAACTCCAGTCACNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
-
- // This one is at the end of the list because its 3' is a subset of several of the 3's above.
- // There are unit tests that try all AdapterPairs, and this one should go at the end os
- // it is checked last.
- ALTERNATIVE_SINGLE_END("AATGATACGGCGACCACCGACAGGTTCAGAGTTCTACAGTCCGACGATC",
- "TCGTATGCCGTCTTCTGCTTG"),
-
- ;
-
- final String fivePrime, threePrime, fivePrimeReadOrder;
- final byte[] fivePrimeBytes, threePrimeBytes, fivePrimeReadOrderBytes;
-
-
- private IlluminaAdapterPair(final String fivePrime, final String threePrime) {
- this.threePrime = threePrime;
- this.threePrimeBytes = StringUtil.stringToBytes(threePrime);
-
- this.fivePrime = fivePrime;
- this.fivePrimeReadOrder = SequenceUtil.reverseComplement(fivePrime);
- this.fivePrimeBytes = StringUtil.stringToBytes(fivePrime);
- this.fivePrimeReadOrderBytes = StringUtil.stringToBytes(fivePrimeReadOrder);
- }
-
- public String get3PrimeAdapter(){ return threePrime; }
- public String get5PrimeAdapter(){ return fivePrime; }
- public String get3PrimeAdapterInReadOrder(){ return threePrime; }
- public String get5PrimeAdapterInReadOrder() { return fivePrimeReadOrder; }
- public byte[] get3PrimeAdapterBytes() { return threePrimeBytes; }
- public byte[] get5PrimeAdapterBytes() { return fivePrimeBytes; }
- public byte[] get3PrimeAdapterBytesInReadOrder() { return threePrimeBytes; }
- public byte[] get5PrimeAdapterBytesInReadOrder() { return fivePrimeReadOrderBytes; }
- public String getName() { return this.name(); }
- }
-
- /**
- * Concatenates all the barcode sequences with BARCODE_DELIMITER
- * @param barcodes
- * @return A single string representation of all the barcodes
- */
- public static String barcodeSeqsToString(final List<String> barcodes) {
- return barcodeSeqsToString(barcodes.toArray(new String[barcodes.size()]));
- }
-
- /**
- * Concatenates all the barcode sequences with BARCODE_DELIMITER
- * @param barcodes
- * @return A single string representation of all the barcodes
- */
- public static String barcodeSeqsToString(final String barcodes[]) {
- final StringBuilder sb = new StringBuilder();
- for (final String bc : barcodes) {
- if (sb.length() > 0) sb.append(BARCODE_DELIMITER);
- sb.append(bc);
- }
- return sb.toString();
- }
-
- /**
- * Concatenates all the barcode sequences with BARCODE_DELIMITER
- * @param barcodes
- * @return A single string representation of all the barcodes
- */
- public static String barcodeSeqsToString(final byte barcodes[][]) {
- final String bcs[] = new String[barcodes.length];
- for (int i = 0; i < barcodes.length; i++) {
- bcs[i] = StringUtil.bytesToString(barcodes[i]);
- }
- return barcodeSeqsToString(bcs);
- }
-}
diff --git a/src/java/net/sf/picard/util/Interval.java b/src/java/net/sf/picard/util/Interval.java
deleted file mode 100644
index d53378f..0000000
--- a/src/java/net/sf/picard/util/Interval.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CoordMath;
-
-import java.util.Collection;
-
-/**
- * Represents a simple interval on a sequence. Coordinates are 1-based closed ended.
- *
- * @author Tim Fennell
- */
-public class Interval implements Comparable<Interval>, Cloneable {
- private final String sequence;
- private final int start;
- private final int end;
- private final boolean negativeStrand;
- private final String name;
-
- /**
- * Constructs an interval with the supplied sequence and start and end. If the end
- * position is less than the start position an exception is thrown.
- *
- * @param sequence the name of the sequence
- * @param start the start position of the interval on the sequence
- * @param end the end position of the interval on the sequence
- */
- public Interval(final String sequence, final int start, final int end) {
- this(sequence, start, end, false, null);
-
- }
-
- /**
- * Constructs an interval with the supplied sequence and start, end, strand and name.
- * If the end position is less than the start position an exception is thrown.
- *
- * @param sequence the name of the sequence
- * @param start the start position of the interval on the sequence
- * @param end the end position of the interval on the sequence
- * @param negative true to indicate negative strand, false otherwise
- * @param name the name (possibly null) of the interval
- *
- */
- public Interval(final String sequence, final int start, final int end, final boolean negative, final String name) {
- this.sequence = sequence;
- this.start = start;
- this.end = end;
- this.negativeStrand = negative;
- this.name = name;
- if (this.end < this.start-1) {
- throw new IllegalArgumentException("start must be less than or equal to end!");
- }
- }
-
- /** Gets the name of the sequence on which the interval resides. */
- public String getSequence() { return sequence; }
-
- /** Gets the 1-based start position of the interval on the sequence. */
- public int getStart() { return start; }
-
- /** Gets the 1-based closed-ended end position of the interval on the sequence. */
- public int getEnd() { return end; }
-
- /** Returns true if the interval is on the negative strand, otherwise false. */
- public boolean isNegativeStrand() { return this.negativeStrand; }
-
- /** Returns true if the interval is on the positive strand, otherwise false. */
- public boolean isPositiveStrand() { return !this.negativeStrand; }
-
- /** Returns the name of the interval, possibly null. */
- public String getName() { return this.name; }
-
- /** Returns true if this interval overlaps the other interval, otherwise false. */
- public boolean intersects(final Interval other) {
- return (this.getSequence().equals(other.getSequence()) &&
- CoordMath.overlaps(this.start, this.end, other.start, other.end));
- }
-
- public int getIntersectionLength(final Interval other) {
- if (this.intersects(other)) {
- return (int)CoordMath.getOverlap(this.getStart(), this.getEnd(), other.getStart(), other.getEnd());
- }
- return 0;
- }
-
-
- /** Returns a new Interval that represents the intersection between the two intervals. */
- public Interval intersect(final Interval that) {
- if (!intersects(that)) throw new IllegalArgumentException(that + " does not intersect " + this);
- return new Interval(this.sequence,
- Math.max(this.start, that.start),
- Math.min(this.end, that.end),
- this.negativeStrand,
- this.name + " intersection " + that.name);
- }
-
-
- /** Returns true if this interval overlaps the other interval, otherwise false. */
- public boolean abuts(final Interval other) {
- return this.getSequence().equals(other.getSequence()) &&
- (this.start == other.end + 1 || other.start == this.end + 1);
- }
-
- /** Gets the length of this interval. */
- public int length() { return this.end - this.start + 1; }
-
- /** Returns a new interval that is padded by the amount of bases specified on either side. */
- public Interval pad(final int left, final int right) {
- return new Interval(this.sequence, this.start-left, this.end+right, this.negativeStrand, this.name);
- }
-
- /** Counts the total number of bases a collection of intervals. */
- public static long countBases(final Collection<Interval> intervals) {
- long total = 0;
- for (final Interval i : intervals) {
- total += i.length();
- }
-
- return total;
- }
-
-
- /**
- * Sort based on sequence.compareTo, then start pos, then end pos
- * with null objects coming lexically last
- */
- public int compareTo(final Interval that) {
- if (that == null) return -1; // nulls last
-
- int result = this.sequence.compareTo(that.sequence);
- if (result == 0) {
- if (this.start == that.start) {
- result = this.end - that.end;
- }
- else {
- result = this.start - that.start;
- }
- }
-
- return result;
- }
-
- /** Equals method that agrees with {@link #compareTo(Interval)}. */
- public boolean equals(final Object other) {
- if (!(other instanceof Interval)) return false;
- else if (this == other) return true;
- else {
- Interval that = (Interval)other;
- return (this.compareTo(that) == 0);
- }
- }
-
- @Override
- public int hashCode() {
- int result = sequence.hashCode();
- result = 31 * result + start;
- result = 31 * result + end;
- return result;
- }
-
- public String toString() {
- return getSequence() + ":" + start + "-" + end;
- }
-
- @Override
- public Interval clone() {
- try { return (Interval) super.clone(); }
- catch (CloneNotSupportedException cnse) { throw new PicardException("That's unpossible", cnse); }
- }
-}
diff --git a/src/java/net/sf/picard/util/IntervalList.java b/src/java/net/sf/picard/util/IntervalList.java
deleted file mode 100644
index 22d959c..0000000
--- a/src/java/net/sf/picard/util/IntervalList.java
+++ /dev/null
@@ -1,654 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CollectionUtil;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringLineReader;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.vcf.VCFFileReader;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Represents a list of intervals against a reference sequence that can be written to
- * and read from a file. The file format is relatively simple and reflects the SAM
- * alignment format to a degree.
- *
- * A SAM style header must be present in the file which lists the sequence records
- * against which the intervals are described. After the header the file then contains
- * records one per line in text format with the following values tab-separated:
- * Sequence name,
- * Start position (1-based),
- * End position (1-based, end inclusive),
- * Strand (either + or -),
- * Interval name (an, ideally unique, name for the interval),
- *
- * @author Tim Fennell
- * @author Yossi Farjoun
- */
-public class IntervalList implements Iterable<Interval> {
- private final SAMFileHeader header;
- private final List<Interval> intervals = new ArrayList<Interval>();
-
- private static final Log log = Log.getInstance(IntervalList.class);
-
- /** Constructs a new interval list using the supplied header information. */
- public IntervalList(final SAMFileHeader header) {
- if (header == null) {
- throw new IllegalArgumentException("SAMFileHeader must be supplied.");
- }
- this.header = header;
- }
-
- /** Gets the header (if there is one) for the interval list. */
- public SAMFileHeader getHeader() { return header; }
-
- /** Returns an iterator over the intervals. */
- public Iterator<Interval> iterator() { return this.intervals.iterator(); }
-
- /** Adds an interval to the list of intervals. */
- public void add(final Interval interval) { this.intervals.add(interval); }
-
- /** Adds a Collection of intervals to the list of intervals. */
- public void addall(final Collection<Interval> intervals) {
- this.intervals.addAll(intervals);
- }
-
- /** Sorts the internal collection of intervals by coordinate. */
- @Deprecated // Use sorted() instead of sort(). The sort() function modifies the object in-place and
- // is therefore difficult to work with. sorted() returns a new IntervalList that is sorted
- public void sort() {
- Collections.sort(this.intervals, new IntervalCoordinateComparator(this.header));
- this.header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
- }
-
- /** returns an independent sorted IntervalList*/
- public IntervalList sorted() {
- final IntervalList sorted = IntervalList.copyOf(this);
- Collections.sort(sorted.intervals, new IntervalCoordinateComparator(sorted.header));
- sorted.header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
- return sorted;
- }
-
- /** Returned an independent IntervalList that is sorted and uniquified. */
- public IntervalList uniqued() {
- return uniqued(true);
- }
-
- /**
- * Returned an independent IntervalList that is sorted and uniquified.
- * @param concatenateNames If false, interval names are not concatenated when merging intervals to save space.
- */
- public IntervalList uniqued(final boolean concatenateNames) {
- final List<Interval> tmp = getUniqueIntervals(sorted(), concatenateNames);
- final IntervalList value = new IntervalList(this.header.clone());
- value.intervals.addAll(tmp);
- return value;
- }
-
- /** Sorts and uniques the list of intervals held within this interval list. */
- @Deprecated//use uniqued() instead. This function modifies the object in-place and
- // is therefore difficult to work with.
- public void unique() {
- unique(true);
- }
-
- /**
- * Sorts and uniques the list of intervals held within this interval list.
- * @param concatenateNames If false, interval names are not concatenated when merging intervals to save space.
- */
- @Deprecated//use uniqued() instead. This function modifies the object in-place and
- // is therefore difficult to work with
- public void unique(final boolean concatenateNames) {
- sort();
- final List<Interval> tmp = getUniqueIntervals(concatenateNames);
- this.intervals.clear();
- this.intervals.addAll(tmp);
- }
-
- /** Gets the set of intervals as held internally. */
- public List<Interval> getIntervals() {
- return Collections.unmodifiableList(this.intervals);
- }
-
- /**
- * Merges the list of intervals and then reduces them down where regions overlap
- * or are directly adjacent to one another. During this process the "merged" interval
- * will retain the strand and name of the 5' most interval merged.
- *
- * Note: has the side-effect of sorting the stored intervals in coordinate order if not already sorted.
- *
- * @return the set of unique intervals condensed from the contained intervals
- */
- @Deprecated//use uniqued().getIntervals() instead. This function modifies the object in-place and
- // is therefore difficult to work with
- public List<Interval> getUniqueIntervals() {
- return getUniqueIntervals(true);
- }
-
- //NO SIDE EFFECTS HERE!
- /**
- * Merges list of intervals and reduces them like net.sf.picard.util.IntervalList#getUniqueIntervals()
- * @param concatenateNames If false, the merged interval has the name of the earlier interval. This keeps name shorter.
- */
- public static List<Interval> getUniqueIntervals(final IntervalList list, final boolean concatenateNames) {
-
- final List<Interval> intervals;
- if (list.getHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
- intervals = list.sorted().intervals;
- }
- else {
- intervals = list.intervals;
- }
-
- final List<Interval> unique = new ArrayList<Interval>();
- final TreeSet<Interval> toBeMerged = new TreeSet<Interval>();
- Interval current = null;
-
- for (final Interval next : intervals) {
- if (current == null) {
- toBeMerged.add(next);
- current = next;
- }
- else if (current.intersects(next) || current.abuts(next)) {
- toBeMerged.add(next);
- current = new Interval(current.getSequence(), current.getStart(), Math.max(current.getEnd(), next.getEnd()), false , "");
- }
- else {
- // Emit merged/unique interval
- unique.add(merge(toBeMerged, concatenateNames));
-
- // Set current == next for next iteration
- toBeMerged.clear();
- current = next;
- toBeMerged.add(current);
- }
- }
-
- if (toBeMerged.size() > 0) unique.add(merge(toBeMerged, concatenateNames));
- return unique;
- }
-
- /**
- * Merges list of intervals and reduces them like net.sf.picard.util.IntervalList#getUniqueIntervals()
- * @param concatenateNames If false, the merged interval has the name of the earlier interval. This keeps name shorter.
- */
- @Deprecated //use uniqued(concatenateNames).getIntervals() or the static version instead to avoid changing the underlying object.
- /**
- * Merges list of intervals and reduces them like net.sf.picard.util.IntervalList#getUniqueIntervals()
- * @param concatenateNames If false, the merged interval has the name of the earlier interval. This keeps name shorter.
- */
- public List<Interval> getUniqueIntervals(final boolean concatenateNames) {
- if (getHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
- sort();
- }
-
- return getUniqueIntervals(this, concatenateNames);
- }
-
- /** Merges a sorted collection of intervals and optionally concatenates unique names or takes the first name. */
- static Interval merge(final SortedSet<Interval> intervals, final boolean concatenateNames) {
- final String chrom = intervals.first().getSequence();
- int start = intervals.first().getStart();
- int end = intervals.last().getEnd();
- final boolean neg = intervals.first().isNegativeStrand();
- final LinkedHashSet<String> names = new LinkedHashSet<String>();
- final String name;
-
- for (final Interval i : intervals) {
- if (i.getName() != null) names.add(i.getName());
- start = Math.min(start, i.getStart());
- end = Math.max(end, i.getEnd());
- }
-
- if (concatenateNames) { name = StringUtil.join("|", names); }
- else { name = names.iterator().next(); }
-
- return new Interval(chrom, start, end, neg, name);
- }
-
- /** Gets the (potentially redundant) sum of the length of the intervals in the list. */
- public long getBaseCount() {
- return Interval.countBases(this.intervals);
- }
-
- /** Gets the count of unique bases represented by the intervals in the list. */
- public long getUniqueBaseCount() {
- return uniqued().getBaseCount();
- }
-
- /** Returns the count of intervals in the list. */
- public int size() {
- return this.intervals.size();
- }
-
- /**
- * Parse a VCF file and convert to an IntervalList The name field of the IntervalList is taken from the ID field of the variant, if it exists. if not,
- * creates a name of the format interval-n where n is a running number that increments only on un-named intervals
- * @param file
- * @return
- */
- public static IntervalList fromVcf(final File file){
- final VCFFileReader vcfFileReader = new VCFFileReader(file, false);
- final IntervalList intervalList = IntervalList.fromVcf(vcfFileReader);
- vcfFileReader.close();
- return intervalList;
- }
-
- /**
- * Converts a vcf to an IntervalList. The name field of the IntervalList is taken from the ID field of the variant, if it exists. if not,
- * creates a name of the format interval-n where n is a running number that increments only on un-named intervals
- * @param vcf the vcfReader to be used for the conversion
- * @return an IntervalList constructed from input vcf
- */
- public static IntervalList fromVcf(final VCFFileReader vcf){
-
- //grab the dictionary from the VCF and use it in the IntervalList
- final SAMSequenceDictionary dict = vcf.getFileHeader().getSequenceDictionary();
- final SAMFileHeader samFileHeader = new SAMFileHeader();
- samFileHeader.setSequenceDictionary(dict);
- final IntervalList list = new IntervalList( samFileHeader);
-
- int intervals=0;
- for(final VariantContext vc : vcf){
- if(!vc.isFiltered()){
- String name = vc.getID();
- if(".".equals(name) || name == null)
- name = "interval-" + (++intervals);
- list.add(new Interval(vc.getChr(), vc.getStart(), vc.getEnd(), false, name));
- }
- }
-
- return list;
- }
-
- /** creates a independent copy of the given IntervalList
- *
- * @param list
- * @return
- */
- public static IntervalList copyOf(final IntervalList list){
- final IntervalList clone = new IntervalList(list.header.clone());
- clone.intervals.addAll(list.intervals);
- return clone;
- }
-
- /**
- * Parses an interval list from a file.
- * @param file the file containing the intervals
- * @return an IntervalList object that contains the headers and intervals from the file
- */
- public static IntervalList fromFile(final File file) {
- final BufferedReader reader=IoUtil.openFileForBufferedReading(file);
- final IntervalList list = fromReader(reader);
- try {
- reader.close();
- } catch (final IOException e) {
- throw new PicardException(String.format("Failed to close file %s after reading",file));
- }
-
- return list;
- }
-
- /**
- * Parses an interval list from a reader in a stream based fashion.
- * @param in a BufferedReader that can be read from
- * @return an IntervalList object that contains the headers and intervals from the file
- */
- public static IntervalList fromReader(final BufferedReader in) {
- try {
- // Setup a reader and parse the header
- final StringBuilder builder = new StringBuilder(4096);
- String line = null;
-
- while ((line = in.readLine()) != null) {
- if (line.startsWith("@")) {
- builder.append(line).append('\n');
- }
- else {
- break;
- }
- }
-
- if (builder.length() == 0) {
- throw new IllegalStateException("Interval list file must contain header. ");
- }
-
- final StringLineReader headerReader = new StringLineReader(builder.toString());
- final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
- final IntervalList list = new IntervalList(codec.decode(headerReader, "BufferedReader"));
- final SAMSequenceDictionary dict = list.getHeader().getSequenceDictionary();
-
- //there might not be any lines after the header, in which case we should return an empty list
- if(line == null) return list;
-
- // Then read in the intervals
- final FormatUtil format = new FormatUtil();
- do {
- if (line.trim().length() == 0) continue; // skip over blank lines
-
- // Make sure we have the right number of fields
- final String[] fields = line.split("\t");
- if (fields.length != 5) {
- throw new PicardException("Invalid interval record contains " +
- fields.length + " fields: " + line);
- }
-
- // Then parse them out
- final String seq = fields[0];
- final int start = format.parseInt(fields[1]);
- final int end = format.parseInt(fields[2]);
-
- final boolean negative;
- if (fields[3].equals("-")) negative = true;
- else if (fields[3].equals("+")) negative = false;
- else throw new IllegalArgumentException("Invalid strand field: " + fields[3]);
-
- final String name = fields[4];
-
- final Interval interval = new Interval(seq, start, end, negative, name);
- if (dict.getSequence(seq) == null) {
- log.warn("Ignoring interval for unknown reference: " + interval);
- }
- else {
- list.intervals.add(interval);
- }
- }
- while ((line = in.readLine()) != null);
-
- return list;
- }
- catch (final IOException ioe) {
- throw new PicardException("Error parsing interval list.", ioe);
- }
- finally {
- try { in.close(); } catch (final Exception e) { /* do nothing */ }
- }
- }
-
- /**
- * Writes out the list of intervals to the supplied file.
- * @param file a file to write to. If exists it will be overwritten.
- */
- public void write(final File file) {
- try {
- final BufferedWriter out = IoUtil.openFileForBufferedWriting(file);
- final FormatUtil format = new FormatUtil();
-
- // Write out the header
- if (this.header != null) {
- final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
- codec.encode(out, this.header);
- }
-
- // Write out the intervals
- for (final Interval interval : this) {
- out.write(interval.getSequence());
- out.write('\t');
- out.write(format.format(interval.getStart()));
- out.write('\t');
- out.write(format.format(interval.getEnd()));
- out.write('\t');
- out.write(interval.isPositiveStrand() ? '+' : '-');
- out.write('\t');
- if(interval.getName() != null){
- out.write(interval.getName());
- }
- else{
- out.write(".");
- }
- out.newLine();
- }
-
- out.flush();
- out.close();
- }
- catch (final IOException ioe) {
- throw new PicardException("Error writing out interval list to file: " + file.getAbsolutePath(), ioe);
- }
- }
-
- /**
- * A utility function for generating the intersection of two IntervalLists, checks for equal dictionaries.
- *
- * @param list1 the first IntervalList
- * @param list2 the second IntervalList
- * @return the intersection of list1 and list2.
- */
-
- public static IntervalList intersection(final IntervalList list1, final IntervalList list2) {
-
- final IntervalList result;
- // Ensure that all the sequence dictionaries agree and merge the lists
- SequenceUtil.assertSequenceDictionariesEqual(list1.getHeader().getSequenceDictionary(),
- list2.getHeader().getSequenceDictionary());
-
- result = new IntervalList(list1.getHeader().clone());
-
- final OverlapDetector<Interval> detector = new OverlapDetector<Interval>(0, 0);
-
- detector.addAll(list1.getIntervals(), list1.getIntervals());
-
- for (final Interval i : list2.getIntervals()) {
- final Collection<Interval> as = detector.getOverlaps(i);
- for (final Interval j : as) {
- final Interval tmp = i.intersect(j);
-
- result.add(tmp);
- }
- }
- return result.uniqued();
-
- }
-
- /**
- * A utility function for intersecting a list of IntervalLists, checks for equal dictionaries.
- *
- * @param lists the list of IntervalList
- * @return the intersection of all the IntervalLists in lists.
- */
-
-
- public static IntervalList intersection(final Collection<IntervalList> lists) {
-
- IntervalList intersection = null;
- for (final IntervalList list : lists) {
- if(intersection == null){
- intersection = list;
- }
- else{
- intersection = intersection(intersection, list);
- }
- }
- return intersection;
- }
-
-
-
-
- /**
- * A utility function for merging a list of IntervalLists, checks for equal dictionaries.
- * Merging does not look for overlapping intervals nor uniquify
- *
- * @param lists a list of IntervalList
- * @return the union of all the IntervalLists in lists.
- */
- public static IntervalList concatenate(final Collection<IntervalList> lists) {
- if(lists.isEmpty()){
- throw new PicardException("Cannot concatenate an empty list of IntervalLists.");
- }
-
- // Ensure that all the sequence dictionaries agree and merge the lists
- final SAMFileHeader header = lists.iterator().next().getHeader().clone();
- header.setSortOrder(SAMFileHeader.SortOrder.unsorted);
-
- final IntervalList merged = new IntervalList(header);
-
- for (final IntervalList in : lists) {
- SequenceUtil.assertSequenceDictionariesEqual(merged.getHeader().getSequenceDictionary(),
- in.getHeader().getSequenceDictionary());
-
- merged.addall(in.intervals);
- }
- return merged;
- }
-
-
-
- /**
- * A utility function for finding the union of a list of IntervalLists, checks for equal dictionaries.
- * also looks for overlapping intervals, uniquifies, and sorts (by coordinate)
- *
- * @param lists the list of IntervalList
- * @return the union of all the IntervalLists in lists.
- */
- public static IntervalList union(final Collection<IntervalList> lists) {
- final IntervalList merged = concatenate(lists);
- return merged.uniqued();
- }
-
-
- public static IntervalList union(final IntervalList list1, final IntervalList list2) {
- final Collection<IntervalList> duo = CollectionUtil.makeList(list1, list2);
- return IntervalList.union(duo);
- }
-
-
- /** inverts an IntervalList and returns one that has exactly all the bases in the dictionary that the original one does not.
- *
- * @param list an IntervalList
- * @return an IntervalList that is complementary to list
- */
- public static IntervalList invert(final IntervalList list) {
- final IntervalList inverse = new IntervalList(list.header.clone());
-
- final ListMap<Integer,Interval> map = new ListMap<Integer,Interval>();
-
- //add all the intervals (uniqued and therefore also sorted) to a ListMap from sequenceIndex to a list of Intervals
- for(final Interval i : list.uniqued().getIntervals()){
- map.add(list.getHeader().getSequenceIndex(i.getSequence()),i);
- }
-
- int intervals = 0; // a counter to supply newly-created intervals with a name
-
-
- //iterate over the contigs in the dictionary
- for (final SAMSequenceRecord samSequenceRecord : list.getHeader().getSequenceDictionary().getSequences()) {
- final Integer sequenceIndex = samSequenceRecord.getSequenceIndex();
- final String sequenceName = samSequenceRecord.getSequenceName();
- final int sequenceLength = samSequenceRecord.getSequenceLength();
-
- Integer lastCoveredPosition = 0; //start at beginning of sequence
- //iterate over list of intervals that are in sequence
- if (map.containsKey(sequenceIndex)) // if there are intervals in the ListMap on this contig, iterate over them (in order)
- for (final Interval i : map.get(sequenceIndex)) {
- if (i.getStart() > lastCoveredPosition + 1) //if there's space between the last interval and the current one, add an interval between them
- inverse.add(new Interval(sequenceName, lastCoveredPosition + 1, i.getStart() - 1, false, "interval-" + (++intervals)));
- lastCoveredPosition = i.getEnd(); //update the last covered position
- }
- //finally, if there's room between the last covered position and the end of the sequence, add an interval
- if (sequenceLength > lastCoveredPosition) //if there's space between the last interval and the next
- // one, add an interval. This also covers the case that there are no intervals in the ListMap for a contig.
- inverse.add(new Interval(sequenceName, lastCoveredPosition + 1, sequenceLength, false, "interval-" + (++intervals)));
- }
-
- return inverse;
- }
-
-
- /**
- * A utility function for subtracting a collection of IntervalLists from another. Resulting loci are those that are in the first collection
- * but not the second.
- *
- * @param listsToSubtractFrom the collection of IntervalList from which to subtract intervals
- * @param listsToSubtract the collection of intervals to subtract
- * @return an IntervalLists comprising all loci that are in first collection but not second.
- */
- public static IntervalList subtract(final Collection<IntervalList> listsToSubtractFrom, final Collection<IntervalList> listsToSubtract) {
- return intersection(
- union(listsToSubtractFrom),
- invert(union(listsToSubtract)));
- }
-
-
- /**
- * A utility function for finding the difference between two IntervalLists.
- *
- * @param lists1 the first collection of IntervalLists
- * @param lists2 the second collection of IntervalLists
- * @return the difference between the two intervals, i.e. the loci that are only in one IntervalList but not both
- */
- public static IntervalList difference(final Collection<IntervalList> lists1, final Collection<IntervalList> lists2) {
- return union(
- subtract(lists1, lists2),
- subtract(lists2, lists1));
- }
-
-
-
-}
-/**
- * Comparator that orders intervals based on their sequence index, by coordinate
- * then by strand and finally by name.
- */
-class IntervalCoordinateComparator implements Comparator<Interval> {
- private final SAMFileHeader header;
-
- /** Constructs a comparator using the supplied sequence header. */
- IntervalCoordinateComparator(final SAMFileHeader header) {
- this.header = header;
- }
-
- public int compare(final Interval lhs, final Interval rhs) {
- final int lhsIndex = this.header.getSequenceIndex(lhs.getSequence());
- final int rhsIndex = this.header.getSequenceIndex(rhs.getSequence());
- int retval = lhsIndex - rhsIndex;
-
- if (retval == 0) retval = lhs.getStart() - rhs.getStart();
- if (retval == 0) retval = lhs.getEnd() - rhs.getEnd();
- if (retval == 0) {
- if (lhs.isPositiveStrand() && rhs.isNegativeStrand()) retval = -1;
- else if (lhs.isNegativeStrand() && rhs.isPositiveStrand()) retval = 1;
- }
- if (retval == 0) {
- if (lhs.getName() == null) {
- if (rhs.getName() == null) return 0;
- else return -1;
- } else if (rhs.getName() == null) {
- return 1;
- }
- else {
- return lhs.getName().compareTo(rhs.getName());
- }
- }
-
- return retval;
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/util/IntervalListReferenceSequenceMask.java b/src/java/net/sf/picard/util/IntervalListReferenceSequenceMask.java
deleted file mode 100644
index d5d5610..0000000
--- a/src/java/net/sf/picard/util/IntervalListReferenceSequenceMask.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.SAMFileHeader;
-
-import java.util.BitSet;
-import java.util.List;
-
-/**
- * Serve up loci of interest based on an interval list.
- *
- * @author alecw at broadinstitute dot oh are gee
- */
-public class IntervalListReferenceSequenceMask implements ReferenceSequenceMask {
-
- private final SAMFileHeader header;
- // if memory usage becomes a problem... this could be changed to a SparseBitSet
- // http://java.sun.com/developer/onlineTraining/collections/magercises/BitSet/index.html
- private final BitSet currentBitSet = new BitSet();
- private int currentSequenceIndex = -1;
- private final PeekableIterator<Interval> intervalIterator;
- private final int lastSequenceIndex;
- private final int lastPosition;
-
- public IntervalListReferenceSequenceMask(final IntervalList intervalList) {
- this.header = intervalList.getHeader();
- if (intervalList.getHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
- intervalList.sort();
- }
- final List<Interval> uniqueIntervals = intervalList.getUniqueIntervals();
- if (uniqueIntervals.isEmpty()) {
- lastSequenceIndex = -1;
- lastPosition = 0;
- } else {
- final Interval lastInterval = uniqueIntervals.get(uniqueIntervals.size() - 1);
- lastSequenceIndex = header.getSequenceIndex((lastInterval.getSequence()));
- lastPosition = lastInterval.getEnd();
- }
- intervalIterator = new PeekableIterator<Interval>(uniqueIntervals.iterator());
- }
-
- /**
- * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
- * @return true if the mask is set for the given sequence and position
- */
- public boolean get(final int sequenceIndex, final int position) {
- ensureSequenceLoaded(sequenceIndex);
- return currentBitSet.get(position);
- }
-
- /**
- * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
- * @return the next pos on the given sequence >= position that is set, or -1 if there are no more set positions
- */
- public int nextPosition(final int sequenceIndex, final int position) {
- ensureSequenceLoaded(sequenceIndex);
- // nextSetBit returns the first set bit on or after the starting index, therefore position+1
- return currentBitSet.nextSetBit(position+1);
- }
-
- private void ensureSequenceLoaded(final int sequenceIndex) {
- if (sequenceIndex < this.currentSequenceIndex) {
- throw new IllegalArgumentException("Cannot look at an earlier sequence. Current: " +
- this.currentSequenceIndex + "; requested: " + sequenceIndex);
- }
- if (sequenceIndex > currentSequenceIndex) {
- currentBitSet.clear();
- while (intervalIterator.hasNext()) {
- final Interval interval = intervalIterator.peek();
- final int nextSequenceIndex = header.getSequenceIndex(interval.getSequence());
- if (nextSequenceIndex < sequenceIndex) {
- intervalIterator.next();
- } else if (nextSequenceIndex == sequenceIndex) {
- currentBitSet.set(interval.getStart(), interval.getEnd() + 1);
- intervalIterator.next();
- } else {
- break;
- }
- }
- currentSequenceIndex = sequenceIndex;
- }
- }
-
- /**
- * @return Largest sequence index for which there are set bits.
- */
- public int getMaxSequenceIndex() {
- return lastSequenceIndex;
- }
-
- /**
- * @return the largest position on the last sequence index
- */
- public int getMaxPosition() {
- return lastPosition;
- }
-
- public SAMFileHeader getHeader() {
- return header;
- }
-}
diff --git a/src/java/net/sf/picard/util/IntervalListTools.java b/src/java/net/sf/picard/util/IntervalListTools.java
deleted file mode 100644
index 9fc75a3..0000000
--- a/src/java/net/sf/picard/util/IntervalListTools.java
+++ /dev/null
@@ -1,352 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineParser;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMProgramRecord;
-
-import java.io.File;
-import java.text.DecimalFormat;
-import java.util.*;
-
-/**
- * Little class to aid working with interval lists.
- *
- * @author Tim Fennell
- */
-public class IntervalListTools extends CommandLineProgram {
- @Usage public final String USAGE = getStandardUsagePreamble() + " General tool for manipulating interval lists, " +
- "including sorting, merging, padding, uniqueifying, and other set-theoretic operations. Default operation if given one or more inputs is to " +
- "merge and sort them. Other options are controlled by arguments.";
-
- @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME,
- doc="One or more interval lists. If multiple interval lists are provided the output is the" +
- "result of merging the inputs.", minElements = 1)
- public List<File> INPUT;
-
- @Option(doc="The output interval list file to write (if SCATTER_COUNT is 1) or the directory into which " +
- "to write the scattered interval sub-directories (if SCATTER_COUNT > 1)", shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, optional = true)
- public File OUTPUT;
-
- @Option(doc="The amount to pad each end of the intervals by before other operations are undertaken. Negative numbers are allowed " +
- "and indicate intervals should be shrunk. Resulting intervals < 0 bases long will be removed. Padding is applied to the interval lists <b> before </b> the ACTION is performed.", optional=true)
- public int PADDING = 0;
-
- @Option(doc="If true, merge overlapping and adjacent intervals to create a list of unique intervals. Implies SORT=true")
- public boolean UNIQUE = false;
-
- @Option(doc="If true, sort the resulting interval list by coordinate.")
- public boolean SORT = true;
-
- @Option(doc = "Action to take on inputs.")
- public Action ACTION = Action.CONCAT;
-
- @Option(shortName = "SI", doc = "Second set of intervals for SUBTRACT and DIFFERENCE operations.", optional = true)
- public List<File> SECOND_INPUT;
-
- @Option(doc="One or more lines of comment to add to the header of the output file.", optional = true)
- public List<String> COMMENT = null;
-
- @Option(doc="The number of files into which to scatter the resulting list by locus.")
- public int SCATTER_COUNT = 1;
-
- @Option(doc = "Produce the inverse list", optional = true)
- public boolean INVERT = false;
-
- private static final Log log = Log.getInstance(IntervalListTools.class);
-
- public enum Action implements CommandLineParser.ClpEnum{
-
- CONCAT("The concatenation of all the INPUTs, no sorting or merging of overlapping/abutting intervals implied. Will result in an unsorted list unless requested otherwise.") {
- @Override
- IntervalList act(final List<IntervalList> list, final List<IntervalList> unused) {
- if(!unused.isEmpty()) throw new IllegalArgumentException(String.format("Second List found when action was %s. Ignoring second list.",this.name()));
- return IntervalList.concatenate(list);
- }
- },
- UNION ("Like CONCATENATE but with UNIQUE and SORT implied, the result being the set-wise union of all INPUTS.") {
- @Override
- IntervalList act(final List<IntervalList> list, final List<IntervalList> unused) {
- if(!unused.isEmpty()) throw new IllegalArgumentException(String.format("Second List found when action was %s. Ignoring second list.",this.name()));
- return IntervalList.union(list);
- }
- },
- INTERSECT ("The sorted, uniqued set of all loci that are contained in all of the INPUTs.") {
- @Override
- IntervalList act(final List<IntervalList> list, final List<IntervalList> unused) {
- if(!unused.isEmpty()) throw new IllegalArgumentException(String.format("Second List found when action was %s. Ignoring second list.",this.name()));
- return IntervalList.intersection(list);
- }
- },
- SUBTRACT ("Subtracts SECOND_INPUT from INPUT. The resulting loci are there in INPUT that are not in SECOND_INPUT") {
- @Override
- IntervalList act(final List<IntervalList> list1, final List<IntervalList> list2) {
- return IntervalList.subtract(list1, list2);
-
- }
- },
- SYMDIFF ("Find loci that are in INPUT or SECOND_INPUT but are not in both." ) {
- @Override
- IntervalList act(final List<IntervalList> list1, final List<IntervalList> list2) {
- return IntervalList.difference(list1, list2);
- }
- };
-
-
- String helpdoc;
- Action(final String helpdoc){
- this.helpdoc=helpdoc;
- }
-
- @Override
- public String getHelpDoc() {
- return helpdoc;
- }
- abstract IntervalList act(final List<IntervalList> list1, final List<IntervalList> list2);
-
- }
-
- // Stock main method
- public static void main(final String[] args) {
- new IntervalListTools().instanceMainWithExit(args);
- }
-
- @Override
- protected int doWork() {
- // Check inputs
- for (final File f : INPUT) IoUtil.assertFileIsReadable(f);
- for (final File f : SECOND_INPUT) IoUtil.assertFileIsReadable(f);
-
- if (OUTPUT != null) {
- if (SCATTER_COUNT == 1) {
- IoUtil.assertFileIsWritable(OUTPUT);
- }
- else {
- IoUtil.assertDirectoryIsWritable(OUTPUT);
- }
- }
-
- // Read in the interval lists and apply any padding
- final List<IntervalList> lists = new ArrayList<IntervalList>();
- for (final File f : INPUT) {
- final IntervalList list = IntervalList.fromFile(f);
- if (PADDING != 0) {
- final IntervalList out = new IntervalList(list.getHeader());
- for (final Interval i : list) {
- final int start = i.getStart() - PADDING;
- final int end = i.getEnd() + PADDING;
- if (start <= end) {
- final Interval i2 = new Interval(i.getSequence(), start, end, i.isNegativeStrand(), i.getName());
- out.add(i2);
- }
- }
-
- lists.add(out);
- }
- else {
- lists.add(list);
- }
- }
-
- // same for the second list
- final List<IntervalList> secondLists = new ArrayList<IntervalList>();
- for (final File f : SECOND_INPUT) {
- final IntervalList list = IntervalList.fromFile(f);
- if (PADDING != 0) {
- final IntervalList out = new IntervalList(list.getHeader());
- for (final Interval i : list) {
- final int start = i.getStart() - PADDING;
- final int end = i.getEnd() + PADDING;
- if (start <= end) {
- final Interval i2 = new Interval(i.getSequence(), start, end, i.isNegativeStrand(), i.getName());
- out.add(i2);
- }
- }
-
- secondLists.add(out);
- }
- else {
- secondLists.add(list);
- }
- }
-
- if (UNIQUE && !SORT ) {
- log.warn("UNIQUE=true requires sorting but SORT=false was specified. Results will be sorted!");
- }
-
- final IntervalList result = ACTION.act(lists, secondLists);
-
- if(INVERT){
- SORT=false; // no need to sort, since return will be sorted by definition.
- UNIQUE=false; //no need to unique since invert will already return a unique list.
- }
-
- final IntervalList possiblySortedResult = SORT ? result.sorted() : result;
- final IntervalList possiblyInvertedResult = INVERT ? IntervalList.invert(possiblySortedResult) : possiblySortedResult;
-
- //only get unique if this has been asked unless inverting (since the invert will return a unique list)
- final List<Interval> finalIntervals = UNIQUE ? possiblyInvertedResult.uniqued().getIntervals() : possiblyInvertedResult.getIntervals();
-
-
- // Decide on a PG ID and make a program group
- final SAMFileHeader header = result.getHeader();
- final Set<String> pgs = new HashSet<String>();
- for (final SAMProgramRecord pg : header.getProgramRecords()) pgs.add(pg.getId());
- for (int i = 1; i < Integer.MAX_VALUE; ++i) {
- if (!pgs.contains(String.valueOf(i))) {
- final SAMProgramRecord pg = new SAMProgramRecord(String.valueOf(i));
- pg.setCommandLine(getCommandLine());
- pg.setProgramName(getClass().getSimpleName());
- header.addProgramRecord(pg);
- break;
- }
- }
-
- // Add any comments
- if (COMMENT != null) {
- for (final String comment : COMMENT) {
- header.addComment(comment);
- }
- }
-
- final IntervalList output = new IntervalList(header);
- long total = 0;
- for (final Interval i : finalIntervals) {
- output.add(i);
- total += i.length();
- }
-
- int intervals = 0;
-
- if (OUTPUT != null) {
- if (SCATTER_COUNT == 1) {
- intervals = output.size();
- output.write(OUTPUT);
- }
- else {
- intervals = scatterIntervals(output);
- }
- }
-
- log.info("Output " + intervals + " intervals totalling " + output.getUniqueBaseCount() + " unique bases.");
-
- return 0;
- }
-
- @Override
- protected String[] customCommandLineValidation() {
- if (SCATTER_COUNT < 1) {
- return new String[] {"SCATTER_COUNT must be greater than 0."};
- }
- return null;
- }
-
- /**
- * Method to scatter an interval list by locus.
- * @param list The list of intervals to scatter
- * @return the number of intervals across the scattered lists (which may differ from the input
- * as some may have been split)
- */
- private int scatterIntervals(final IntervalList list) {
- // algorithm (to match the GATK):
- // split = ()
- // set size = 0
- // pop the head H off locs.
- // If size + size(H) < splitSize:
- // add H to split, continue
- // If size + size(H) == splitSize:
- // done with split, put in splits, restart
- // if size + size(H) > splitSize:
- // cut H into two pieces, first of which has splitSize - size bp
- // push both pieces onto locs, continue
- // The last split is special -- when you have only one split left, it gets all of the remaining locs
- // to deal with rounding issues
- final IntervalList uniquedList=list.uniqued();
- final long idealSplitLength = Math.max((long)Math.floor(uniquedList.getBaseCount() / (1.0*SCATTER_COUNT)), 1);
- int splitLength = 0;
- IntervalList split = new IntervalList(uniquedList.getHeader());
- int index = 1; // The index of the next split file to write
- final Iterator<Interval> it = uniquedList.iterator();
- int totalIntervals = 0;
- final DecimalFormat format = new DecimalFormat("0000");
-
- while (it.hasNext() && index < SCATTER_COUNT) {
- final Interval interval = it.next();
- int projectedSize = splitLength + interval.length();
- if (projectedSize < idealSplitLength) {
- split.add(interval);
- totalIntervals++;
- splitLength += interval.length();
- }
- else if (projectedSize == idealSplitLength) {
- split.add(interval);
- totalIntervals++;
- split.write(createDirectoryAndGetScatterFile(format.format(index++)));
- split = new IntervalList(uniquedList.getHeader());
- splitLength = 0;
- }
- else {
- int consumed = 0;
- while (projectedSize > idealSplitLength && index < SCATTER_COUNT) {
- final int amountToConsume =(int)(idealSplitLength - splitLength);
- final Interval partial = new Interval(interval.getSequence(), interval.getStart()+consumed,
- interval.getStart()+consumed+amountToConsume-1, interval.isNegativeStrand(), interval.getName());
- split.add(partial);
- totalIntervals++;
- split.write(createDirectoryAndGetScatterFile(format.format(index++)));
- split = new IntervalList(uniquedList.getHeader());
-
- consumed += amountToConsume;
- splitLength = 0;
- projectedSize = interval.length() - consumed;
- }
-
- // Add the remainder, if any, to the next split
- if (projectedSize > 0) {
- final Interval remainder = new Interval(interval.getSequence(), interval.getStart()+consumed,
- interval.getEnd(), interval.isNegativeStrand(), interval.getName());
- split.add(remainder);
- totalIntervals++;
- splitLength = remainder.length();
- }
- }
- }
- // Write everything left to the last split
- while (it.hasNext()) {
- split.add(it.next());
- totalIntervals++;
- }
- split.write(createDirectoryAndGetScatterFile(format.format(index)));
- return totalIntervals;
-
-
- }
-
- public static File getScatteredFileName(final File scatterDirectory, final int scatterTotal, final String formattedIndex) {
- return new File(scatterDirectory.getAbsolutePath() + "/temp_" + formattedIndex + "_of_" +
- scatterTotal + "/scattered.intervals");
-
- }
-
- private File createDirectoryAndGetScatterFile(final String formattedIndex) {
- createDirectoryOrFail(OUTPUT);
- final File result = getScatteredFileName(OUTPUT, SCATTER_COUNT, formattedIndex);
- createDirectoryOrFail(result.getParentFile());
- return result;
- }
-
- private void createDirectoryOrFail(final File directory) {
- if (!directory.exists()) {
- if (!directory.mkdir()) {
- throw new PicardException("Unable to create directory: " + directory.getAbsolutePath());
- }
- }
-
- }
-
-}
diff --git a/src/java/net/sf/picard/util/IntervalTree.java b/src/java/net/sf/picard/util/IntervalTree.java
deleted file mode 100644
index 77c89e9..0000000
--- a/src/java/net/sf/picard/util/IntervalTree.java
+++ /dev/null
@@ -1,1227 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * A Red-Black tree with intervals for keys.
- * Not thread-safe, and cannot be made so.
- *
- * 7/24/2008: This was copied from the tedUtils package.
- * IMPORTANT!!! It has been modified to use the Reseq way of
- * handling coordinates (end-inclusive).
- *
- * @author tsharpe
- */
-public class IntervalTree<V> implements Iterable<IntervalTree.Node<V>>
-{
- /**
- * Return the number of intervals in the tree.
- * @return The number of intervals.
- */
- public int size()
- {
- return mRoot == null ? 0 : mRoot.getSize();
- }
-
- /**
- * Remove all entries.
- */
- public void clear()
- {
- mRoot = null;
- }
-
- /**
- * Put a new interval into the tree (or update the value associated with an existing interval).
- * If the interval is novel, the special sentinel value is returned.
- * @param start The interval's start.
- * @param end The interval's end.
- * @param value The associated value.
- * @return The old value associated with that interval, or the sentinel.
- */
- @SuppressWarnings("null")
- public V put( final int start, final int end, final V value )
- {
- if ( start > end )
- throw new IllegalArgumentException("Start cannot exceed end.");
-
- V result = mSentinel;
-
- if ( mRoot == null )
- {
- mRoot = new Node<V>(start,end,value);
- }
- else
- {
- Node<V> parent = null;
- Node<V> node = mRoot;
- int cmpVal = 0;
-
- while ( node != null )
- {
- parent = node; // last non-null node
- cmpVal = node.compare(start,end);
- if ( cmpVal == 0 )
- {
- break;
- }
-
- node = cmpVal < 0 ? node.getLeft() : node.getRight();
- }
-
- if ( cmpVal == 0 )
- {
- result = parent.setValue(value);
- }
- else
- {
- if ( cmpVal < 0 )
- {
- mRoot = parent.insertLeft(start,end,value,mRoot);
- }
- else
- {
- mRoot = parent.insertRight(start,end,value,mRoot);
- }
- }
- }
-
- return result;
- }
-
- /**
- * Remove an interval from the tree. If the interval does not exist in the tree the
- * special sentinel value is returned.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return The value associated with that interval, or the sentinel.
- */
- public V remove( final int start, final int end )
- {
- V result = mSentinel;
- Node<V> node = mRoot;
-
- while ( node != null )
- {
- final int cmpVal = node.compare(start,end);
- if ( cmpVal == 0 )
- {
- result = node.getValue();
- mRoot = node.remove(mRoot);
- break;
- }
-
- node = cmpVal < 0 ? node.getLeft() : node.getRight();
- }
-
- return result;
- }
-
- /**
- * Find an interval.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return The Node that represents that interval, or null.
- */
- public Node<V> find( final int start, final int end )
- {
- Node<V> node = mRoot;
-
- while ( node != null )
- {
- final int cmpVal = node.compare(start,end);
- if ( cmpVal == 0 )
- {
- break;
- }
-
- node = cmpVal < 0 ? node.getLeft() : node.getRight();
- }
-
- return node;
- }
-
- /**
- * Find the nth interval in the tree.
- * @param idx The rank of the interval sought (from 0 to size()-1).
- * @return The Node that represents the nth interval.
- */
- public Node<V> findByIndex( final int idx )
- {
- return Node.findByRank(mRoot,idx+1);
- }
-
- /**
- * Find the rank of the specified interval. If the specified interval is not in the
- * tree, then -1 is returned.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return The rank of that interval, or -1.
- */
- public int getIndex( final int start, final int end )
- {
- return Node.getRank(mRoot,start,end) - 1;
- }
-
- /**
- * Find the least interval in the tree.
- * @return The earliest interval, or null if the tree is empty.
- */
- public Node<V> min()
- {
- Node<V> result = null;
- Node<V> node = mRoot;
-
- while ( node != null )
- {
- result = node;
- node = node.getLeft();
- }
-
- return result;
- }
-
- /**
- * Find the earliest interval in the tree greater than or equal to the specified interval.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return The earliest >= interval, or null if there is none.
- */
- @SuppressWarnings("null")
- public Node<V> min( final int start, final int end )
- {
- Node<V> result = null;
- Node<V> node = mRoot;
- int cmpVal = 0;
-
- while ( node != null )
- {
- result = node;
- cmpVal = node.compare(start,end);
- if ( cmpVal == 0 )
- {
- break;
- }
-
- node = cmpVal < 0 ? node.getLeft() : node.getRight();
- }
-
- if ( cmpVal > 0 )
- {
- result = result.getNext();
- }
-
- return result;
- }
-
- /**
- * Find the earliest interval in the tree that overlaps the specified interval.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return The earliest overlapping interval, or null if there is none.
- */
- public Node<V> minOverlapper( final int start, final int end )
- {
- Node<V> result = null;
- Node<V> node = mRoot;
-
- if ( node != null && node.getMaxEnd() >= start )
- {
- while ( true )
- {
- if ( node.getStart() <= end && start <= node.getEnd() )
- { // this node overlaps. there might be a lesser overlapper down the left sub-tree.
- // no need to consider the right sub-tree: even if there's an overlapper, if won't be minimal
- result = node;
- node = node.getLeft();
- if ( node == null || node.getMaxEnd() < start )
- break; // no left sub-tree or all nodes end too early
- }
- else
- { // no overlap. if there might be a left sub-tree overlapper, consider the left sub-tree.
- final Node<V> left = node.getLeft();
- if ( left != null && left.getMaxEnd() >= start )
- {
- node = left;
- }
- else
- { // left sub-tree cannot contain an overlapper. consider the right sub-tree.
- if ( node.getStart() > end )
- break; // everything in the right sub-tree is past the end of the query interval
-
- node = node.getRight();
- if ( node == null || node.getMaxEnd() < start )
- break; // no right sub-tree or all nodes end too early
- }
- }
- }
- }
-
- return result;
- }
-
- /**
- * Find the greatest interval in the tree.
- * @return The latest interval, or null if the tree is empty.
- */
- public Node<V> max()
- {
- Node<V> result = null;
- Node<V> node = mRoot;
-
- while ( node != null )
- {
- result = node;
- node = node.getRight();
- }
-
- return result;
- }
-
- /**
- * Find the latest interval in the tree less than or equal to the specified interval.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return The latest >= interval, or null if there is none.
- */
- @SuppressWarnings("null")
- public Node<V> max( final int start, final int end )
- {
- Node<V> result = null;
- Node<V> node = mRoot;
- int cmpVal = 0;
-
- while ( node != null )
- {
- result = node;
- cmpVal = node.compare(start,end);
- if ( cmpVal == 0 )
- {
- break;
- }
-
- node = cmpVal < 0 ? node.getLeft() : node.getRight();
- }
-
- if ( cmpVal < 0 )
- {
- result = result.getPrev();
- }
-
- return result;
- }
-
- /**
- * Return an iterator over the entire tree.
- * @return An iterator.
- */
- public Iterator<Node<V>> iterator()
- {
- return new FwdIterator(min());
- }
-
- /**
- * Return an iterator over all intervals greater than or equal to the specified interval.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return An iterator.
- */
- public Iterator<Node<V>> iterator( final int start, final int end )
- {
- return new FwdIterator(min(start,end));
- }
-
- /**
- * Return an iterator over all intervals overlapping the specified range.
- * @param start The range start.
- * @param end The range end.
- * @return An iterator.
- */
- public Iterator<Node<V>> overlappers( final int start, final int end )
- {
- return new OverlapIterator(start,end);
- }
-
- /**
- * Return an iterator over the entire tree that returns intervals in reverse order.
- * @return An iterator.
- */
- public Iterator<Node<V>> reverseIterator()
- {
- return new RevIterator(max());
- }
-
- /**
- * Return an iterator over all intervals less than or equal to the specified interval, in reverse order.
- * @param start The interval's start.
- * @param end The interval's end.
- * @return An iterator.
- */
- public Iterator<Node<V>> reverseIterator( final int start, final int end )
- {
- return new RevIterator(max(start,end));
- }
-
- /**
- * Get the special sentinel value that will be used to signal novelty when putting a new interval
- * into the tree, or to signal "not found" when removing an interval. This is null by default.
- * @return The sentinel value.
- */
- public V getSentinel()
- {
- return mSentinel;
- }
-
- /**
- * Set the special sentinel value that will be used to signal novelty when putting a new interval
- * into the tree, or to signal "not found" when removing an interval.
- * @param sentinel The new sentinel value.
- * @return The old sentinel value.
- */
- public V setSentinel( final V sentinel )
- {
- final V result = mSentinel;
- mSentinel = sentinel;
- return result;
- }
-
- /**
- * This method is only for debugging.
- * It verifies whether the tree is internally consistent with respect to the mMaxEnd cached on each node.
- * @throws IllegalStateException If an inconsistency is detected.
- */
- public void checkMaxEnds() {
- if (mRoot != null) mRoot.checkMaxEnd();
- }
-
- /**
- * This method draws a nested picture of the tree on System.out.
- * Useful for debugging.
- */
- public void printTree() {
- if (mRoot != null) mRoot.printNode();
- }
-
- void removeNode( final Node<V> node )
- {
- mRoot = node.remove(mRoot);
- }
-
- private Node<V> mRoot;
- private V mSentinel;
-
- public static class Node<V1>
- {
- // bit-wise definitions from which the other constants are composed
- public static final int HAS_LESSER_PART = 1;
- public static final int HAS_OVERLAPPING_PART = 2;
- public static final int HAS_GREATER_PART = 4;
- public static final int IS_ADJACENT_AND_EMPTY = 0;
- public static final int IS_STRICTLY_LESS = HAS_LESSER_PART; // 1
- public static final int IS_SUBSET = HAS_OVERLAPPING_PART; // 2
- public static final int IS_LEFT_OVERHANGING_OVERLAPPER = HAS_LESSER_PART | HAS_OVERLAPPING_PART; // 3
- public static final int IS_STRICTLY_GREATER = HAS_GREATER_PART; // 4
- // there is no value that equals 5, since that would imply overhanging on left and right without overlapping
- public static final int IS_RIGHT_OVERHANGING_OVERLAPPER = HAS_GREATER_PART | HAS_OVERLAPPING_PART; // 6
- public static final int IS_SUPERSET = HAS_LESSER_PART | HAS_OVERLAPPING_PART | HAS_GREATER_PART; // 7
-
- Node( final int start, final int end, final V1 value )
- {
- mStart = start;
- mEnd = end;
- mValue = value;
- mSize = 1;
- mMaxEnd = mEnd;
- mIsBlack = true;
- }
-
- Node( final Node<V1> parent, final int start, final int end, final V1 value )
- {
- mParent = parent;
- mStart = start;
- mEnd = end;
- mValue = value;
- mMaxEnd = mEnd;
- mSize = 1;
- }
-
- public int getStart()
- {
- return mStart;
- }
-
- public int getEnd()
- {
- return mEnd;
- }
-
- public int getLength()
- {
- return mEnd - mStart;
- }
-
- public int getRelationship( final Node<V1> interval )
- {
- int result = 0;
- if ( mStart < interval.getStart() )
- result = HAS_LESSER_PART;
- if ( mEnd > interval.getEnd() )
- result |= HAS_GREATER_PART;
- if ( mStart < interval.getEnd() && interval.getStart() < mEnd )
- result |= HAS_OVERLAPPING_PART;
- return result;
- }
-
- public boolean isAdjacent( final Node<V1> interval )
- {
- return mStart == interval.getEnd() || mEnd == interval.getStart();
- }
-
- public V1 getValue()
- {
- return mValue;
- }
-
- public V1 setValue( final V1 value )
- {
- final V1 result = mValue;
- mValue = value;
- return result;
- }
-
- int getSize()
- {
- return mSize;
- }
-
- int getMaxEnd()
- {
- return mMaxEnd;
- }
-
- Node<V1> getLeft()
- {
- return mLeft;
- }
-
- Node<V1> insertLeft( final int start, final int end, final V1 value, final Node<V1> root )
- {
- mLeft = new Node<V1>(this,start,end,value);
- return insertFixup(mLeft,root);
- }
-
- Node<V1> getRight()
- {
- return mRight;
- }
-
- Node<V1> insertRight( final int start, final int end, final V1 value, final Node<V1> root )
- {
- mRight = new Node<V1>(this,start,end,value);
- return insertFixup(mRight,root);
- }
-
- Node<V1> getNext()
- {
- Node<V1> result;
-
- if ( mRight != null )
- {
- result = mRight;
- while ( result.mLeft != null )
- {
- result = result.mLeft;
- }
- }
- else
- {
- Node<V1> node = this;
- result = mParent;
- while ( result != null && node == result.mRight )
- {
- node = result;
- result = result.mParent;
- }
- }
-
- return result;
- }
-
- Node<V1> getPrev()
- {
- Node<V1> result;
-
- if ( mLeft != null )
- {
- result = mLeft;
- while ( result.mRight != null )
- {
- result = result.mRight;
- }
- }
- else
- {
- Node<V1> node = this;
- result = mParent;
- while ( result != null && node == result.mLeft )
- {
- node = result;
- result = result.mParent;
- }
- }
-
- return result;
- }
-
- boolean wasRemoved()
- {
- return mSize == 0;
- }
-
- Node<V1> remove( Node<V1> root )
- {
- if ( mSize == 0 )
- {
- throw new IllegalStateException("Entry was already removed.");
- }
-
- if ( mLeft == null )
- {
- if ( mRight == null )
- { // no children
- if ( mParent == null )
- {
- root = null;
- }
- else if ( mParent.mLeft == this )
- {
- mParent.mLeft = null;
- fixup(mParent);
-
- if ( mIsBlack )
- root = removeFixup(mParent,null,root);
- }
- else
- {
- mParent.mRight = null;
- fixup(mParent);
-
- if ( mIsBlack )
- root = removeFixup(mParent,null,root);
- }
- }
- else
- { // single child on right
- root = spliceOut(mRight,root);
- }
- }
- else if ( mRight == null )
- { // single child on left
- root = spliceOut(mLeft,root);
- }
- else
- { // two children
- final Node<V1> next = getNext();
- root = next.remove(root);
-
- // put next into tree in same position as this, effectively removing this
- if ( (next.mParent = mParent) == null )
- root = next;
- else if ( mParent.mLeft == this )
- mParent.mLeft = next;
- else
- mParent.mRight = next;
-
- if ( (next.mLeft = mLeft) != null )
- {
- mLeft.mParent = next;
- }
-
- if ( (next.mRight = mRight) != null )
- {
- mRight.mParent = next;
- }
-
- next.mIsBlack = mIsBlack;
- next.mSize = mSize;
-
- // PIC-123 fix
- fixup(next);
- }
-
- mSize = 0;
- return root;
- }
-
- // backwards comparison! compares start+end to this.
- int compare( final int start, final int end )
- {
- int result = 0;
-
- if ( start > mStart )
- result = 1;
- else if ( start < mStart )
- result = -1;
- else if ( end > mEnd )
- result = 1;
- else if ( end < mEnd )
- result = -1;
-
- return result;
- }
-
- @SuppressWarnings("null")
- static <V1> Node<V1> getNextOverlapper( Node<V1> node, final int start, final int end )
- {
- do
- {
- Node<V1> nextNode = node.mRight;
- if ( nextNode != null && nextNode.mMaxEnd >= start )
- {
- node = nextNode;
- while ( (nextNode = node.mLeft) != null && nextNode.mMaxEnd >= start )
- node = nextNode;
- }
- else
- {
- nextNode = node;
- while ( (node = nextNode.mParent) != null && node.mRight == nextNode )
- nextNode = node;
- }
-
- if ( node != null && node.mStart > end )
- node = null;
- }
- while ( node != null && !(node.mStart <= end && start <= node.mEnd) );
-
- return node;
- }
-
- static <V1> Node<V1> findByRank( Node<V1> node, int rank )
- {
- while ( node != null )
- {
- final int nodeRank = node.getRank();
- if ( rank == nodeRank )
- break;
-
- if ( rank < nodeRank )
- {
- node = node.mLeft;
- }
- else
- {
- node = node.mRight;
- rank -= nodeRank;
- }
- }
-
- return node;
- }
-
- static <V1> int getRank( Node<V1> node, final int start, final int end )
- {
- int rank = 0;
-
- while ( node != null )
- {
- final int cmpVal = node.compare(start,end);
- if ( cmpVal < 0 )
- {
- node = node.mLeft;
- }
- else
- {
- rank += node.getRank();
- if ( cmpVal == 0 )
- return rank; // EARLY RETURN!!!
-
- node = node.mRight;
- }
- }
-
- return 0;
- }
-
- private int getRank()
- {
- int result = 1;
- if ( mLeft != null )
- result = mLeft.mSize + 1;
- return result;
- }
-
- private Node<V1> spliceOut( final Node<V1> child, Node<V1> root )
- {
- if ( (child.mParent = mParent) == null )
- {
- root = child;
- child.mIsBlack = true;
- }
- else
- {
- if ( mParent.mLeft == this )
- mParent.mLeft = child;
- else
- mParent.mRight = child;
- fixup(mParent);
-
- if ( mIsBlack )
- root = removeFixup(mParent,child,root);
- }
-
- return root;
- }
-
- private Node<V1> rotateLeft( Node<V1> root )
- {
- final Node<V1> child = mRight;
-
- final int childSize = child.mSize;
- child.mSize = mSize;
- mSize -= childSize;
-
- if ( (mRight = child.mLeft) != null )
- {
- mRight.mParent = this;
- mSize += mRight.mSize;
- }
-
- if ( (child.mParent = mParent) == null )
- root = child;
- else if ( this == mParent.mLeft )
- mParent.mLeft = child;
- else
- mParent.mRight = child;
-
- child.mLeft = this;
- mParent = child;
-
- setMaxEnd();
- child.setMaxEnd();
-
- return root;
- }
-
- private Node<V1> rotateRight( Node<V1> root )
- {
- final Node<V1> child = mLeft;
-
- final int childSize = child.mSize;
- child.mSize = mSize;
- mSize -= childSize;
-
- if ( (mLeft = child.mRight) != null )
- {
- mLeft.mParent = this;
- mSize += mLeft.mSize;
- }
-
- if ( (child.mParent = mParent) == null )
- root = child;
- else if ( this == mParent.mLeft )
- mParent.mLeft = child;
- else
- mParent.mRight = child;
-
- child.mRight = this;
- mParent = child;
-
- setMaxEnd();
- child.setMaxEnd();
-
- return root;
- }
-
- private void setMaxEnd()
- {
- mMaxEnd = mEnd;
- if ( mLeft != null )
- mMaxEnd = Math.max(mMaxEnd,mLeft.mMaxEnd);
- if ( mRight != null )
- mMaxEnd = Math.max(mMaxEnd,mRight.mMaxEnd);
- }
-
- private static <V1> void fixup( Node<V1> node )
- {
- do
- {
- node.mSize = 1;
- node.mMaxEnd = node.mEnd;
- if ( node.mLeft != null )
- {
- node.mSize += node.mLeft.mSize;
- node.mMaxEnd = Math.max(node.mMaxEnd,node.mLeft.mMaxEnd);
- }
- if ( node.mRight != null )
- {
- node.mSize += node.mRight.mSize;
- node.mMaxEnd = Math.max(node.mMaxEnd,node.mRight.mMaxEnd);
- }
- }
- while ( (node = node.mParent) != null );
- }
-
- private static <V1> Node<V1> insertFixup( Node<V1> daughter, Node<V1> root )
- {
- Node<V1> mom = daughter.mParent;
- fixup(mom);
-
- while( mom != null && !mom.mIsBlack )
- {
- final Node<V1> gramma = mom.mParent;
- Node<V1> auntie = gramma.mLeft;
- if ( auntie == mom )
- {
- auntie = gramma.mRight;
- if ( auntie != null && !auntie.mIsBlack )
- {
- mom.mIsBlack = true;
- auntie.mIsBlack = true;
- gramma.mIsBlack = false;
- daughter = gramma;
- }
- else
- {
- if ( daughter == mom.mRight )
- {
- root = mom.rotateLeft(root);
- mom = daughter;
- }
- mom.mIsBlack = true;
- gramma.mIsBlack = false;
- root = gramma.rotateRight(root);
- break;
- }
- }
- else
- {
- if ( auntie != null && !auntie.mIsBlack )
- {
- mom.mIsBlack = true;
- auntie.mIsBlack = true;
- gramma.mIsBlack = false;
- daughter = gramma;
- }
- else
- {
- if ( daughter == mom.mLeft )
- {
- root = mom.rotateRight(root);
- mom = daughter;
- }
- mom.mIsBlack = true;
- gramma.mIsBlack = false;
- root = gramma.rotateLeft(root);
- break;
- }
- }
- mom = daughter.mParent;
- }
- root.mIsBlack = true;
- return root;
- }
-
- private static <V1> Node<V1> removeFixup( Node<V1> parent, Node<V1> node, Node<V1> root )
- {
- do
- {
- if ( node == parent.mLeft )
- {
- Node<V1> sister = parent.mRight;
- if ( !sister.mIsBlack )
- {
- sister.mIsBlack = true;
- parent.mIsBlack = false;
- root = parent.rotateLeft(root);
- sister = parent.mRight;
- }
- if ( (sister.mLeft == null || sister.mLeft.mIsBlack) && (sister.mRight == null || sister.mRight.mIsBlack) )
- {
- sister.mIsBlack = false;
- node = parent;
- }
- else
- {
- if ( sister.mRight == null || sister.mRight.mIsBlack )
- {
- sister.mLeft.mIsBlack = true;
- sister.mIsBlack = false;
- root = sister.rotateRight(root);
- sister = parent.mRight;
- }
- sister.mIsBlack = parent.mIsBlack;
- parent.mIsBlack = true;
- sister.mRight.mIsBlack = true;
- root = parent.rotateLeft(root);
- node = root;
- }
- }
- else
- {
- Node<V1> sister = parent.mLeft;
- if ( !sister.mIsBlack )
- {
- sister.mIsBlack = true;
- parent.mIsBlack = false;
- root = parent.rotateRight(root);
- sister = parent.mLeft;
- }
- if ( (sister.mLeft == null || sister.mLeft.mIsBlack) && (sister.mRight == null || sister.mRight.mIsBlack) )
- {
- sister.mIsBlack = false;
- node = parent;
- }
- else
- {
- if ( sister.mLeft == null || sister.mLeft.mIsBlack )
- {
- sister.mRight.mIsBlack = true;
- sister.mIsBlack = false;
- root = sister.rotateLeft(root);
- sister = parent.mLeft;
- }
- sister.mIsBlack = parent.mIsBlack;
- parent.mIsBlack = true;
- sister.mLeft.mIsBlack = true;
- root = parent.rotateRight(root);
- node = root;
- }
- }
- parent = node.mParent;
- }
- while ( parent != null && node.mIsBlack );
-
- node.mIsBlack = true;
- return root;
- }
-
- public void checkMaxEnd() {
- if (mMaxEnd != calcMaxEnd()) {
- throw new IllegalStateException("Max end mismatch " + mMaxEnd + " vs " + calcMaxEnd() + ": " + this);
- }
- if (mLeft != null) mLeft.checkMaxEnd();
- if (mRight != null) mRight.checkMaxEnd();
- }
-
- private int calcMaxEnd() {
- int end = mEnd;
- if (mLeft != null) end = Math.max(end, mLeft.mMaxEnd);
- if (mRight != null) end = Math.max(end, mRight.mMaxEnd);
- return end;
- }
-
- public void printNode() {
- this.printNodeInternal("", "root: ");
- }
-
- private void printNodeInternal(final String padding, final String tag) {
- System.out.println(padding + tag + " " + this);
- if (mLeft != null) mLeft.printNodeInternal(padding + " ", "left: ");
- if (mRight != null) mRight.printNodeInternal(padding + " ", "right:");
- }
-
- public String toString() {
- return "Node(" + mStart + "," + mEnd + "," + mValue + "," + mSize + "," + mMaxEnd + "," + mIsBlack + ")";
- }
-
- private Node<V1> mParent;
- private Node<V1> mLeft;
- private Node<V1> mRight;
- private final int mStart;
- private final int mEnd;
- private V1 mValue;
- private int mSize;
- private int mMaxEnd;
- private boolean mIsBlack;
- }
-
- public class FwdIterator
- implements Iterator<Node<V>>
- {
- public FwdIterator( final Node<V> node )
- {
- mNext = node;
- }
-
- public boolean hasNext()
- {
- return mNext != null;
- }
-
- public Node<V> next()
- {
- if ( mNext == null )
- {
- throw new NoSuchElementException("No next element.");
- }
-
- if ( mNext.wasRemoved() )
- {
- mNext = min(mNext.getStart(),mNext.getEnd());
- if ( mNext == null )
- throw new ConcurrentModificationException("Current element was removed, and there are no more elements.");
- }
- mLast = mNext;
- mNext = mNext.getNext();
- return mLast;
- }
-
- public void remove()
- {
- if ( mLast == null )
- {
- throw new IllegalStateException("No entry to remove.");
- }
-
- removeNode(mLast);
- mLast = null;
- }
-
- private Node<V> mNext;
- private Node<V> mLast;
- }
-
- public class RevIterator
- implements Iterator<Node<V>>
- {
- public RevIterator( final Node<V> node )
- {
- mNext = node;
- }
-
- public boolean hasNext()
- {
- return mNext != null;
- }
-
- public Node<V> next()
- {
- if ( mNext == null )
- throw new NoSuchElementException("No next element.");
- if ( mNext.wasRemoved() )
- {
- mNext = max(mNext.getStart(),mNext.getEnd());
- if ( mNext == null )
- throw new ConcurrentModificationException("Current element was removed, and there are no more elements.");
- }
- mLast = mNext;
- mNext = mNext.getPrev();
- return mLast;
- }
-
- public void remove()
- {
- if ( mLast == null )
- {
- throw new IllegalStateException("No entry to remove.");
- }
-
- removeNode(mLast);
- mLast = null;
- }
-
- private Node<V> mNext;
- private Node<V> mLast;
- }
-
- public class OverlapIterator
- implements Iterator<Node<V>>
- {
- public OverlapIterator( final int start, final int end )
- {
- mNext = minOverlapper(start,end);
- mStart = start;
- mEnd = end;
- }
-
- public boolean hasNext()
- {
- return mNext != null;
- }
-
- public Node<V> next()
- {
- if ( mNext == null )
- {
- throw new NoSuchElementException("No next element.");
- }
-
- if ( mNext.wasRemoved() )
- {
- throw new ConcurrentModificationException("Current element was removed.");
- }
-
- mLast = mNext;
- mNext = Node.getNextOverlapper(mNext,mStart,mEnd);
- return mLast;
- }
-
- public void remove()
- {
- if ( mLast == null )
- {
- throw new IllegalStateException("No entry to remove.");
- }
-
- removeNode(mLast);
- mLast = null;
- }
-
- private Node<V> mNext;
- private Node<V> mLast;
- private final int mStart;
- private final int mEnd;
- }
-
- public static class ValuesIterator<V1>
- implements Iterator<V1>
- {
- public ValuesIterator( final Iterator<Node<V1>> itr )
- {
- mItr = itr;
- }
-
- public boolean hasNext()
- {
- return mItr.hasNext();
- }
-
- public V1 next()
- {
- return mItr.next().getValue();
- }
-
- public void remove()
- {
- mItr.remove();
- }
-
- private final Iterator<Node<V1>> mItr;
- }
-}
diff --git a/src/java/net/sf/picard/util/IntervalTreeMap.java b/src/java/net/sf/picard/util/IntervalTreeMap.java
deleted file mode 100644
index 2210874..0000000
--- a/src/java/net/sf/picard/util/IntervalTreeMap.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import java.util.*;
-
-/**
- * Utility class that implements an interval map.
- * This class functions as a java map but also supports efficient interval overlap queries.
- *
- * @author Bob Handsaker
- */
-public class IntervalTreeMap<T>
- extends AbstractMap<Interval, T>
-{
- private final Map<String, IntervalTree<T>> mSequenceMap = new HashMap<String, IntervalTree<T>>();
- private final EntrySet mEntrySet = new EntrySet();
-
- public IntervalTree<T> debugGetTree(final String sequence) {
- return mSequenceMap.get(sequence);
- }
-
- public IntervalTreeMap() {
- }
-
- public IntervalTreeMap(final Map<? extends Interval, ? extends T> map) {
- for (final Map.Entry<? extends Interval, ? extends T> entry : map.entrySet()) {
- put(entry.getKey(), entry.getValue());
- }
- }
-
- public void clear() {
- mSequenceMap.clear();
- }
-
- public boolean containsKey(final Object object) {
- if (!(object instanceof Interval)) {
- return false;
- }
- return containsKey((Interval) object);
- }
-
- public boolean containsKey(final Interval key) {
- final IntervalTree<T> tree = mSequenceMap.get(key.getSequence());
- if (tree == null) {
- return false;
- }
- return (tree.find(key.getStart(), key.getEnd()) != null);
- }
-
- public Set<Entry<Interval, T>> entrySet() {
- return mEntrySet;
- }
-
- public boolean equals(final Object o) {
- if (!(o instanceof IntervalTreeMap)) {
- return false;
- }
- return mSequenceMap.equals(((IntervalTreeMap)o).mSequenceMap);
- }
-
- public int hashCode() {
- return mSequenceMap.hashCode();
- }
-
- public T get(final Object object) {
- if (!(object instanceof Interval)) {
- return null;
- }
- return get((Interval) object);
- }
-
- public T get(final Interval key) {
- final IntervalTree<T> tree = mSequenceMap.get(key.getSequence());
- if (tree == null) {
- return null;
- }
- final IntervalTree.Node<T> node = tree.find(key.getStart(), key.getEnd());
- if (node == null) {
- return null;
- }
- return node.getValue();
- }
-
- public boolean isEmpty() {
- for (final IntervalTree<T> tree : mSequenceMap.values()) {
- if (tree.size() > 0) {
- return false;
- }
- }
- return true;
- }
-
- public T put(final Interval key, final T value) {
- IntervalTree<T> tree = mSequenceMap.get(key.getSequence());
- if (tree == null) {
- tree = new IntervalTree<T>();
- mSequenceMap.put(key.getSequence(), tree);
- }
- return tree.put(key.getStart(), key.getEnd(), value);
- }
-
- public T remove(final Object object) {
- if (!(object instanceof Interval)) {
- return null;
- }
- return remove((Interval)object);
- }
-
- public T remove(final Interval key) {
- final IntervalTree<T> tree = mSequenceMap.get(key.getSequence());
- if (tree == null) {
- return null;
- }
- return tree.remove(key.getStart(), key.getEnd());
- }
-
- public int size() {
- // Note: We should think about caching the size to avoid having to recompute it.
- int size = 0;
- for (final IntervalTree<T> tree : mSequenceMap.values()) {
- size += tree.size();
- }
- return size;
- }
-
- public Collection<T> getOverlapping(final Interval key) {
- final List<T> result = new ArrayList<T>();
- final IntervalTree<T> tree = mSequenceMap.get(key.getSequence());
- if (tree != null) {
- final Iterator<IntervalTree.Node<T>> iterator = tree.overlappers(key.getStart(), key.getEnd());
- while (iterator.hasNext()) {
- result.add(iterator.next().getValue());
- }
- }
- return result;
- }
-
- public Collection<T> getContained(final Interval key) {
- final List<T> result = new ArrayList<T>();
- final IntervalTree<T> tree = mSequenceMap.get(key.getSequence());
- if (tree != null) {
- final Iterator<IntervalTree.Node<T>> iterator = tree.overlappers(key.getStart(), key.getEnd());
- while (iterator.hasNext()) {
- final IntervalTree.Node<T> node = iterator.next();
- if (node.getStart() >= key.getStart() && node.getEnd() <= key.getEnd()) {
- result.add(node.getValue());
- }
- }
- }
- return result;
- }
-
- private class EntrySet
- extends AbstractSet<Map.Entry<Interval,T>> {
-
- public void clear() {
- IntervalTreeMap.this.clear();
- }
-
- public boolean contains(final Map.Entry<Interval,T> entry) {
- if (entry == null) {
- return false;
- }
- return entry.getValue().equals(IntervalTreeMap.this.get(entry.getKey()));
- }
-
- public boolean isEmpty() {
- return IntervalTreeMap.this.isEmpty();
- }
-
- public Iterator<Map.Entry<Interval,T>> iterator() {
- return new EntryIterator();
- }
-
- @SuppressWarnings("unchecked")
- public boolean remove(final Object object) {
- // Note: Could not figure out how to eliminate the unchecked cast.
- if (!(object instanceof Map.Entry)) {
- return false;
- }
- return remove((Map.Entry<Interval,T>)object);
- }
-
- public boolean remove(final Map.Entry<Interval,T> entry) {
- if (this.contains(entry)) {
- IntervalTreeMap.this.remove(entry.getKey());
- return true;
- } else {
- return false;
- }
- }
-
- public int size() {
- return IntervalTreeMap.this.size();
- }
- }
-
- private class EntryIterator
- implements Iterator<Map.Entry<Interval, T>> {
-
- private String mSequence = null;
- private Iterator<String> mSequenceIterator = null;
- private Iterator<IntervalTree.Node<T>> mTreeIterator = null;
-
- EntryIterator() {
- mSequenceIterator = mSequenceMap.keySet().iterator();
- advanceSequence();
- }
-
- public boolean hasNext() {
- return (mTreeIterator != null && mTreeIterator.hasNext());
- }
-
- public Map.Entry<Interval,T> next() {
- if (!hasNext()) {
- throw new NoSuchElementException("Iterator exhausted");
- }
- final IntervalTree.Node<T> node = mTreeIterator.next();
- final String sequence = mSequence;
- if (!mTreeIterator.hasNext()) {
- advanceSequence();
- }
- final Interval key = new Interval(sequence, node.getStart(), node.getEnd());
- final T value = node.getValue();
- return new MapEntry(key, value);
- }
-
- public void remove() {
- if (mTreeIterator == null) {
- throw new IllegalStateException("Iterator.next() has not been called");
- }
- mTreeIterator.remove();
- }
-
- private void advanceSequence() {
- while (mSequenceIterator.hasNext()) {
- mSequence = mSequenceIterator.next();
- mTreeIterator = mSequenceMap.get(mSequence).iterator();
- if (mTreeIterator.hasNext()) {
- break;
- }
- }
- }
- }
-
- private class MapEntry
- implements Map.Entry<Interval,T> {
-
- private final Interval mKey;
- private T mValue;
-
- MapEntry(final Interval key, final T value) {
- mKey = key;
- mValue = value;
- }
-
- public Interval getKey() {
- return mKey;
- }
-
- public T getValue() {
- return mValue;
- }
-
- public T setValue(final T value) {
- mValue = value;
- return IntervalTreeMap.this.put(mKey, mValue);
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/IntervalUtil.java b/src/java/net/sf/picard/util/IntervalUtil.java
deleted file mode 100644
index dd2b63c..0000000
--- a/src/java/net/sf/picard/util/IntervalUtil.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-
-import java.util.Iterator;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class IntervalUtil {
-
- /** Return true if the sequence/position lie in the provided interval. */
- public static boolean contains(final Interval interval, final String sequenceName, final long position) {
- return interval.getSequence().equals(sequenceName) && (position >= interval.getStart() && position <= interval.getEnd());
- }
-
- /** Return true if the sequence/position lie in the provided interval list. */
- public static boolean contains(final IntervalList intervalList, final String sequenceName, final long position) {
- for (final Interval interval : intervalList.getUniqueIntervals()) {
- if (contains(interval, sequenceName, position))
- return true;
- }
- return false;
- }
-
- /**
- * Throws RuntimeException if the given intervals are not locus ordered and non-overlapping
- * @param intervals
- * @param sequenceDictionary used to determine order of sequences
- */
- public static void assertOrderedNonOverlapping(final Iterator<Interval> intervals, final SAMSequenceDictionary sequenceDictionary) {
- if (!intervals.hasNext()) {
- return;
- }
- Interval prevInterval = intervals.next();
- int prevSequenceIndex = sequenceDictionary.getSequenceIndex(prevInterval.getSequence());
- while (intervals.hasNext()) {
- final Interval interval = intervals.next();
- if (prevInterval.intersects(interval)) {
- throw new PicardException("Intervals should not overlap: " + prevInterval + "; " + interval);
- }
- final int thisSequenceIndex = sequenceDictionary.getSequenceIndex(interval.getSequence());
- if (prevSequenceIndex > thisSequenceIndex ||
- (prevSequenceIndex == thisSequenceIndex && prevInterval.compareTo(interval) >= 0)) {
- throw new PicardException("Intervals not in order: " + prevInterval + "; " + interval);
- }
- prevInterval = interval;
- prevSequenceIndex = thisSequenceIndex;
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/IterableAdapter.java b/src/java/net/sf/picard/util/IterableAdapter.java
deleted file mode 100644
index aeb9a47..0000000
--- a/src/java/net/sf/picard/util/IterableAdapter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.sf.picard.util;
-
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-
-/**
- * Provides an adapter to wrap an Iterator with an Iterable, allowing it to be run through a foreach loop. Will only
- * allow iterator() to be called a single time - this is intended to be called inline.
- *
- * @author jgentry at broadinstitute.org
- */
-public class IterableAdapter<T> implements Iterable<T> {
- private boolean isIteratorCalled = false;
- private final Iterator<T> theIterator;
-
- public IterableAdapter(final Iterator<T> theIterator) {
- this.theIterator = theIterator;
- }
-
- @Override
- public Iterator<T> iterator() {
- if (isIteratorCalled) {
- throw new ConcurrentModificationException("iterator() can only be called once!");
- }
-
- isIteratorCalled = true;
- return theIterator;
- }
-}
diff --git a/src/java/net/sf/picard/util/IterableOnceIterator.java b/src/java/net/sf/picard/util/IterableOnceIterator.java
deleted file mode 100644
index c4b651d..0000000
--- a/src/java/net/sf/picard/util/IterableOnceIterator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package net.sf.picard.util;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * Abstract implementation of an iterator that also implements Iterable (to return itself)
- * so that it can be used if for() loops. Only supports calling iterator() once since new
- * iterators are not manufactured but the same object returned.
- *
- * @author Tim Fennell
- */
-public abstract class IterableOnceIterator<T> implements Iterable<T>, Iterator<T>, Closeable {
- private boolean iterated = false;
-
- /**
- * On the first call returns this object which is also an iterator. On subsequent calls throws
- * an exception since new iterators cannot be generated.
- */
- @Override
- public Iterator<T> iterator() {
- if (iterated) {
- throw new IllegalStateException("May not call iterator() more than once on IterableOnceIterator.");
- }
- else {
- iterated = true;
- return this;
- }
- }
-
- /** Operation not supported. */
- @Override
- public void remove() {
- throw new UnsupportedOperationException("remove() not supported");
- }
-
- /** Does nothing, intended to be overridden when needed. */
- @Override public void close() throws IOException {
- // Default do nothing implementation
- }
-}
diff --git a/src/java/net/sf/picard/util/ListMap.java b/src/java/net/sf/picard/util/ListMap.java
deleted file mode 100755
index 7d0d54e..0000000
--- a/src/java/net/sf/picard/util/ListMap.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import java.util.List;
-import java.util.HashMap;
-import java.util.ArrayList;
-
-/**
- * A Map class that holds a list of entries under each key instead of a single entry, and
- * provides utility methods for adding an entry under a key.
- *
- * @author Tim Fennell
- */
-public class ListMap<K,V> extends HashMap<K, List<V>> {
- /** Adds a single value to the list stored under a key. */
- public void add(K key, V value) {
- List<V> values = get(key);
- if (values == null) {
- values = new ArrayList<V>();
- put(key, values);
- }
-
- values.add(value);
- }
-}
diff --git a/src/java/net/sf/picard/util/Locus.java b/src/java/net/sf/picard/util/Locus.java
deleted file mode 100644
index 71766a6..0000000
--- a/src/java/net/sf/picard/util/Locus.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-/**
- * Location info about a locus.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public interface Locus {
- int getSequenceIndex();
-
- /** @return 1-based position */
- int getPosition();
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/util/LocusComparator.java b/src/java/net/sf/picard/util/LocusComparator.java
deleted file mode 100644
index e331a33..0000000
--- a/src/java/net/sf/picard/util/LocusComparator.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import java.util.Comparator;
-
-/**
- * compares first by sequence index then by position
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class LocusComparator<T extends Locus> implements Comparator<T> {
-
- public int compare(T thing1, T thing2) {
- int refCompare = thing1.getSequenceIndex() - thing2.getSequenceIndex();
- return refCompare == 0 ? thing1.getPosition() - thing2.getPosition() : refCompare;
- }
-}
diff --git a/src/java/net/sf/picard/util/LocusImpl.java b/src/java/net/sf/picard/util/LocusImpl.java
deleted file mode 100644
index 80b2dde..0000000
--- a/src/java/net/sf/picard/util/LocusImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-/**
- * Simple implementation of Locus interface for ease of passing as an arg and comparing with other Locus implementations.
- * @author alecw at broadinstitute.org
- */
-public class LocusImpl implements Locus {
- private final int sequenceIndex;
- private final int position;
-
- public LocusImpl(int sequenceIndex, int position) {
- this.position = position;
- this.sequenceIndex = sequenceIndex;
- }
-
- public int getSequenceIndex() {
- return sequenceIndex;
- }
-
- /**
- * @return 1-based position
- */
- public int getPosition() {
- return position;
- }
-}
diff --git a/src/java/net/sf/picard/util/Log.java b/src/java/net/sf/picard/util/Log.java
deleted file mode 100644
index bfe30ca..0000000
--- a/src/java/net/sf/picard/util/Log.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import java.io.PrintStream;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-
-/**
- * <p>A <em>wafer thin</em> wrapper around System.err that uses var-args to make it
- * much more efficient to call the logging methods in without having to
- * surround every call site with calls to Log.isXXXEnabled(). All the methods on this
- * class take a variable length list of arguments and, only if logging is enabled for
- * the level and channel being logged to, will those arguments be toString()'d and
- * appended together.</p>
- *
- * @author Tim Fennell
- */
-public final class Log {
- /** Enumeration for setting log levels. */
- public static enum LogLevel { ERROR, WARNING, INFO, DEBUG }
-
- private static LogLevel globalLogLevel = LogLevel.DEBUG;
-
- private final Class<?> clazz;
- private final String className;
- private final PrintStream out = System.err;
-
- /**
- * Private constructor
- */
- private Log(final Class<?> clazz) {
- this.clazz = clazz;
- this.className = clazz.getSimpleName();
- }
-
- /**
- * Get a Log instance to perform logging within the Class specified. Returns an instance
- * of this class which wraps an instance of the commons logging Log class.
- * @param clazz the Class which is going to be doing the logging
- * @return a Log instance with which to log
- */
- public static Log getInstance(final Class<?> clazz) {
- return new Log(clazz);
- }
-
- public static void setGlobalLogLevel(final LogLevel logLevel) {
- globalLogLevel = logLevel;
- }
-
- /** Returns true if the specified log level is enabled otherwise false. */
- public final boolean isEnabled(final LogLevel level) {
- return level.ordinal() <= globalLogLevel.ordinal();
- }
-
- /**
- * Private method that does the actual printing of messages to a PrintWriter. Outputs the log level,
- * class name and parts followed by the stack trace if a throwable is provided.
- *
- * @param level the Log level being logged at
- * @param throwable a Throwable if one is available otherwise null
- * @param parts the parts of the message to be concatenated
- */
- private void emit(final LogLevel level, final Throwable throwable, final Object... parts) {
- if (isEnabled(level)) {
- synchronized (this) {
- this.out.print(level.name());
- this.out.print('\t');
- this.out.print(getTimestamp());
- this.out.print('\t');
- this.out.print(this.className);
- this.out.print('\t');
-
- for (final Object part : parts) {
- if (part != null && part.getClass().isArray()) {
- final Class<?> component = part.getClass().getComponentType();
- if (component.equals(Boolean.TYPE)) this.out.print(Arrays.toString( (boolean[]) part));
- else if (component.equals(Byte.TYPE)) this.out.print(Arrays.toString( (byte[]) part));
- else if (component.equals(Character.TYPE)) this.out.print(Arrays.toString( (char[]) part));
- else if (component.equals(Double.TYPE)) this.out.print(Arrays.toString( (double[]) part));
- else if (component.equals(Float.TYPE)) this.out.print(Arrays.toString( (float[]) part));
- else if (component.equals(Integer.TYPE)) this.out.print(Arrays.toString( (int[]) part));
- else if (component.equals(Long.TYPE)) this.out.print(Arrays.toString( (long[]) part));
- else if (component.equals(Short.TYPE)) this.out.print(Arrays.toString( (short[]) part));
- else this.out.print(Arrays.toString( (Object[]) part));
- }
- else {
- this.out.print(part);
- }
- }
-
- this.out.println();
-
- // Print out the exception if there is one
- if (throwable != null) {
- throwable.printStackTrace(this.out);
- }
- }
- }
- }
-
- /**
- * Creates a date string for insertion into the log. Given that logs are sometimes held statically
- * and SimpleDateFormat is not thread safe, currently creates an instance each time :/
- */
- protected String getTimestamp() {
- final DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- return fmt.format(new Date());
- }
-
- /**
- * Logs a Throwable and optional message parts at level error.
- * @param throwable an instance of Throwable that should be logged with stack trace
- * @param messageParts zero or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void error(final Throwable throwable, final Object... messageParts) {
- emit(LogLevel.ERROR, throwable, messageParts);
- }
-
- /**
- * Logs a Throwable and optional message parts at level warn.
- * @param throwable an instance of Throwable that should be logged with stack trace
- * @param messageParts zero or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void warn(final Throwable throwable, final Object... messageParts) {
- emit(LogLevel.WARNING, throwable, messageParts);
- }
-
- /**
- * Logs a Throwable and optional message parts at level info.
- * @param throwable an instance of Throwable that should be logged with stack trace
- * @param messageParts zero or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void info(final Throwable throwable, final Object... messageParts) {
- emit(LogLevel.INFO, throwable, messageParts);
- }
-
- /**
- * Logs a Throwable and optional message parts at level debug.
- * @param throwable an instance of Throwable that should be logged with stack trace
- * @param messageParts zero or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void debug(final Throwable throwable, final Object... messageParts) {
- emit(LogLevel.DEBUG, throwable, messageParts);
- }
-
- // Similar methods, but without Throwables, follow
-
- /**
- * Logs one or more message parts at level error.
- * @param messageParts one or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void error(final Object... messageParts) {
- emit(LogLevel.ERROR, null, messageParts);
- }
-
- /**
- * Logs one or more message parts at level warn.
- * @param messageParts one or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void warn(final Object... messageParts) {
- emit(LogLevel.WARNING, null, messageParts);
- }
-
- /**
- * Logs one or more message parts at level info.
- * @param messageParts one or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void info(final Object... messageParts) {
- emit(LogLevel.INFO, null, messageParts);
- }
-
- /**
- * Logs one or more message parts at level debug.
- * @param messageParts one or more objects which should be combined, by calling toString()
- * to form the log message.
- */
- public final void debug(final Object... messageParts) {
- emit(LogLevel.DEBUG, null, messageParts);
- }
-}
diff --git a/src/java/net/sf/picard/util/MathUtil.java b/src/java/net/sf/picard/util/MathUtil.java
deleted file mode 100644
index 73f1011..0000000
--- a/src/java/net/sf/picard/util/MathUtil.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import java.math.BigDecimal;
-import java.util.Arrays;
-
-import static java.lang.Math.pow;
-
-/**
- * General math utilities
- *
- * @author Tim Fennell
- */
-public class MathUtil {
- /** The double value closest to 1 while still being less than 1. */
- public static final double MAX_PROB_BELOW_ONE = 0.9999999999999999d;
-
- /** Calculated the mean of an array of doubles. */
- public static double mean(final double[] in, final int start, final int stop) {
- double total = 0;
- for (int i = start; i < stop; ++i) {
- total += in[i];
- }
-
- return total / (stop - start);
- }
-
- /** Calculated the standard deviation of an array of doubles. */
- public static double stddev(final double[] in, final int start, final int length) {
- return stddev(in, start, length, mean(in, start, length));
- }
-
- /** Calculated the standard deviation of an array of doubles. */
- public static double stddev(final double[] in, final int start, final int stop, final double mean) {
- double total = 0;
- for (int i = start; i < stop; ++i) {
- total += (in[i] * in[i]);
- }
-
- return Math.sqrt((total / (stop - start)) - (mean * mean));
- }
-
- public static int compare(final int v1, final int v2) {
- return (v1 < v2 ? -1 : (v1 == v2 ? 0 : 1));
- }
-
- /** Calculate the median of an array of doubles. Assumes that the input is sorted */
- public static double median(final double... in) {
- if (in.length == 0) {
- throw new IllegalArgumentException("Attempting to find the median of an empty array");
- }
-
- final double[] data = Arrays.copyOf(in, in.length);
- Arrays.sort(data);
- final int middle = data.length / 2;
- return data.length % 2 == 1 ? data[middle] : (data[middle - 1] + data[middle]) / 2.0;
- }
-
- /**
- * Obtains percentage of two Longs
- * @param numerator dividend
- * @param denominator divisor
- * @return numerator/(double)denominator if both are non-null and denominator != 0, else returns null.
- */
- public static Double percentageOrNull(final Long numerator, final Long denominator) {
- if (numerator != null && denominator != null && denominator != 0) {
- return numerator.doubleValue() / denominator.doubleValue();
- } else {
- return null;
- }
- }
-
- /**
- * Round off the value to the specified precision.
- */
- public static double round(final double num, final int precision) {
- BigDecimal bd = new BigDecimal(num);
- bd = bd.setScale(precision, BigDecimal.ROUND_HALF_UP);
- return bd.doubleValue();
- }
-
- /** Returns the largest value stored in the array. */
- public static double max(final double[] nums) {
- return nums[indexOfMax(nums)];
- }
-
- /**
- * Returns the index of the largest element in the array. If there are multiple equal maxima then
- * the earliest one in the array is returned.
- */
- public static int indexOfMax(final double[] nums) {
- double max = nums[0];
- int index = 0;
- for (int i = 1; i < nums.length; ++i) {
- if (nums[i] > max) {
- max = nums[i];
- index = i;
- }
- }
-
- return index;
- }
-
- /** Returns the smallest value stored in the array. */
- public static double min(final double[] nums) {
- double min = nums[0];
- for (int i = 1; i < nums.length; ++i) {
- if (nums[i] < min) min = nums[i];
- }
-
- return min;
- }
-
- /** Mimic's R's seq() function to produce a sequence of equally spaced numbers. */
- public static double[] seq(final double from, final double to, final double by) {
- if (from < to && by <= 0) return new double[0];
- if (from > to && by >= 0) return new double[0];
- final int values = 1 + (int) Math.floor((to - from) / by);
- final double[] results = new double[values];
-
- BigDecimal value = new BigDecimal(from);
- BigDecimal increment = new BigDecimal(by);
-
- for (int i=0; i<values; ++i) {
- results[i] = value.doubleValue();
- value = value.add(increment);
- }
-
- return results;
- }
-
- /** "Promotes" an int[] into a double array with the same values (or as close as precision allows). */
- public static double[] promote(final int[] is) {
- final double[] ds = new double[is.length];
- for (int i = 0; i < is.length; ++i) ds[i] = is[i];
- return ds;
- }
-
- /**
- * Takes a complete set of mutually exclusive log likelihoods and converts them to probabilities
- * that sum to 1 with as much fidelity as possible. Limits probabilities to be in the space:
- * 0.9999999999999999 >= p >= (1-0.9999999999999999)/(likelihoods.length-1)
- */
- public static double[] logLikelihoodsToProbs(final double[] likelihoods) {
- // Note: bumping all the LLs so that the biggest is 300 ensures that we have the
- // widest range possible when unlogging them before one of them underflows. 10^300 is
- // near the maximum before you hit positive infinity.
-
- final double maxLikelihood = max(likelihoods);
- final double bump = 300 - maxLikelihood;
-
- final double[] tmp = new double[likelihoods.length];
- double total = 0;
- for (int i = 0; i < likelihoods.length; ++i) {
- tmp[i] = pow(10, likelihoods[i] + bump);
- total += tmp[i];
- }
-
- final double maxP = MAX_PROB_BELOW_ONE;
- final double minP = (1 - MAX_PROB_BELOW_ONE) / (tmp.length - 1);
-
- for (int i = 0; i < likelihoods.length; ++i) {
- tmp[i] /= total;
- if (tmp[i] > maxP) tmp[i] = maxP;
- else if (tmp[i] < minP) tmp[i] = minP;
- }
-
- return tmp;
- }
-
- /** Calculates the product of two arrays of the same length. */
- public static double[] multiply(final double[] lhs, final double[] rhs) {
- if (lhs.length != rhs.length) throw new IllegalArgumentException("Arrays must be of same length.");
-
- final int len = lhs.length;
- final double[] result = new double[len];
- for (int i = 0; i < len; ++i) result[i] = lhs[i] * rhs[i];
- return result;
- }
-
- /** Returns the sum of the elements in the array. */
- public static double sum(final double[] arr) {
- double result = 0;
- for (final double next : arr) result += next;
- return result;
- }
-
- /** Returns the sum of the elements in the array starting with start and ending before stop. */
- public static long sum(final long[] arr, final int start, final int stop) {
- long result = 0;
- for (int i=start; i<stop; ++i) {
- result += arr[i];
- }
- return result;
- }
-
- public static final LogMath LOG_2_MATH = new LogMath(2);
- public static final LogMath NATURAL_LOG_MATH = new LogMath(Math.exp(1)) {
- @Override
- public double getLogValue(final double nonLogValue) {
- return Math.log(nonLogValue);
- }
- };
-
- public static final LogMath LOG_10_MATH = new LogMath(10) {
- @Override
- public double getLogValue(final double nonLogValue) {
- return Math.log10(nonLogValue);
- }
- };
-
- /**
- * A collection of common math operations that work with log values. To use it, pass values from log space, the operation will be
- * computed in non-log space, and a value in log space will be returned.
- */
- public static class LogMath {
- private final double base;
-
- private LogMath(final double base) {
- this.base = base;
- }
-
- /** Returns the decimal representation of the provided log values. */
- public double getNonLogValue(final double logValue) {
- return Math.pow(base, logValue);
- }
-
- /** Returns the log-representation of the provided decimal value. */
- public double getLogValue(final double nonLogValue) {
- return Math.log(nonLogValue) / Math.log(base);
- }
-
- /** Computes the mean of the provided log values. */
- public double mean(final double... logValues) {
- return sum(logValues) - getLogValue(logValues.length);
- }
-
- /** Computes the sum of the provided log values. */
- public double sum(final double... logValues) {
- // Avoid overflow via scaling.
- final double scalingFactor = max(logValues);
- double simpleAdditionResult = 0;
- for (final double v : logValues) {
- simpleAdditionResult += getNonLogValue(v - scalingFactor);
- }
- return getLogValue(simpleAdditionResult) + scalingFactor;
- }
-
- /** Computes the sum of the provided log values. */
- public double product(final double... logValues) {
- return MathUtil.sum(logValues);
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/MergingIterator.java b/src/java/net/sf/picard/util/MergingIterator.java
deleted file mode 100644
index 25de224..0000000
--- a/src/java/net/sf/picard/util/MergingIterator.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.util.CloseableIterator;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.PriorityQueue;
-
-/**
- * An iterator over Iterators that return Ts. Calling next() returns the next T ordered according
- * to Comparator provided at construction time. Importantly, the elements in the input Iterators
- * must already be sorted according to the provided Comparator.
- */
-public class MergingIterator<T> implements CloseableIterator<T> {
-
- /*
- * An Iterator whose natural ordering is by the T that will be returned by the next call to
- * next().
- */
- private class ComparableIterator extends PeekableIterator<T> implements Comparable<ComparableIterator> {
-
- public ComparableIterator(final Iterator<T> iterator) {
- super(iterator);
- }
-
- @Override
- public int compareTo(final ComparableIterator that) {
- if (comparator.getClass() != comparator.getClass()) {
- throw new IllegalStateException("Can't compare two ComparableIterators that have different orderings.");
- }
-
- return comparator.compare(this.peek(), that.peek());
- }
- }
-
- /*
- * The general flow is to pull the "top" (according to the ComparableIterator's compareTo())
- * iterator off on calls to this.next(), get iterator.next() and then re-add the iterator to
- * the queue. Readding reorders the queue so the next "top" iterator is ready.
- */
- private final PriorityQueue<ComparableIterator> queue;
-
- private final Comparator<T> comparator;
-
- // This is the last T returned by the call to next(). It's used to make sure that the comparators
- // always return correctly ordered Ts.
- private T lastReturned;
-
- /**
- * Creates a MergingIterator over the given Collection of iterators whose elements will be
- * returned in the order defined by the given Comparator.
- */
- public MergingIterator(final Comparator<T> comparator, final Collection<CloseableIterator<T>> iterators) {
- if (iterators.isEmpty()) throw new IllegalArgumentException("One or more CloseableIterators must be provided.");
-
- this.comparator = comparator;
-
- this.queue = new PriorityQueue<ComparableIterator>();
- for (final CloseableIterator<T> iterator : iterators) {
- this.addIfNotEmpty(new ComparableIterator(iterator));
- }
-
- // If there are no iterators to read from after adding them all to the prioqueue,
- // should we throw? it's prob'ly an error.
- }
-
- /**
- * @see java.util.Iterator<T>.hasNext
- */
- @Override
- public boolean hasNext() {
- return ! this.queue.isEmpty();
- }
-
- /**
- * @see java.util.Iterator<T>.next
- */
- @Override
- public T next() {
- if ( ! this.hasNext()) throw new NoSuchElementException();
-
- final ComparableIterator recordIterator = this.queue.poll();
- // Assumes the iterator is closed & removed from the queue before recordIterator.hasNext() == false
- final T next = recordIterator.next();
- // I don't like having to test for null here -- it's really only null before the first call
- // to next() -- but I don't see any other way
- if (this.lastReturned != null && this.comparator.compare(lastReturned, next) > 0) {
- throw new IllegalStateException(
- "The elements of the input Iterators are not sorted according to the comparator " +
- this.comparator.getClass().getName());
- }
-
- addIfNotEmpty(recordIterator);
- this.lastReturned = next;
- return next;
- }
-
- /**
- * Unsupported.
- */
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Closes every CloseableIterator in this MergingIterator. After calling, calls to
- * hasNext() will always return false.
- */
- @Override
- public void close() {
- for (final ComparableIterator iterator : this.queue) {
- iterator.close();
- this.queue.remove(iterator);
- }
- }
-
- private void addIfNotEmpty(final ComparableIterator iterator) {
- if (iterator.hasNext()) queue.offer(iterator);
- else iterator.close();
- }
-}
diff --git a/src/java/net/sf/picard/util/MetricsDoclet.java b/src/java/net/sf/picard/util/MetricsDoclet.java
deleted file mode 100644
index 9a2333b..0000000
--- a/src/java/net/sf/picard/util/MetricsDoclet.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import com.sun.javadoc.*;
-
-import net.sf.picard.metrics.MetricBase;
-
-import java.util.TreeMap;
-import java.util.SortedMap;
-import java.io.PrintStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-
-/**
- * Doclet for use with JavaDoc that will find all classes extending MetricBase and
- * output information about the metrics definitions that go along with the classes.
- *
- * Takes a single parameter (-f file) to tell it where to output the resulting
- * documentation file in HTML format.
- *
- * @author Tim Fennell
- */
-public class MetricsDoclet {
- /**
- * Entry point called by the javadoc command line tool. Loops over all the
- * classes identifying metrics classes and then produces some basic information
- * about each in a single HTML file.
- *
- * @param root the root of the javadoc object hierarchy
- * @return true if completed successfully, false otherwise
- */
- public static boolean start(final RootDoc root) {
- // Build a set of metrics classes sorted by name
- final SortedMap<String,ClassDoc> metricsClasses = new TreeMap<String,ClassDoc>();
- for (final ClassDoc doc : root.classes()) {
- if (isMetricsClass(doc)) {
- System.out.println("Processing " + doc.qualifiedTypeName());
- metricsClasses.put(doc.typeName(), doc);
- }
- }
-
- // Get a print stream to write to
- final PrintStream out = getOutput(root);
- if (out == null) return false;
-
- // Write the headings
- out.println("<head>");
- out.println(" <title>Picard Metrics Definitions</title>");
- out.println(" <style>");
- out.println(" body { font-family: Arial; background-color: white; font-size: 10pt; }");
- out.println(" h2 { color: red; }");
- out.println(" .class_description { font-style: italic; }");
- out.println(" .metric_column_def { padding-bottom: 0px; margin-bottom: 8px; }");
- out.println(" .metric_column_def span { font-weight: bold; color: #222222; font-style: italic; }");
- out.println(" </style>");
- out.println("</head>");
- out.println("<h1>Picard Metrics Definitions</h1>");
-
- // Write out the TOC
- out.println("<h2>Table Of Contents</h2>");
- out.println("<ol>");
- for (final ClassDoc doc : metricsClasses.values()) {
- out.println("<li><a href=\"#" + doc.name() + "\">" + doc.name() + "</a>: " +
- firstSentence(doc) + "</li>");
- }
- out.println("</ol>");
-
- // Now print out each class
- for (final ClassDoc doc : metricsClasses.values()) {
- out.println("<a name=\"" + doc.name() + "\"");
- out.println("<h2>" + doc.name() + "</h2>");
- out.println("<p class=\"class_description\">" + doc.commentText() + "</p>");
- out.println("<h3>Column Definitions</h3>");
-
- for (final FieldDoc field : doc.fields()) {
- if (field.isPublic() && !field.isStatic()) {
- out.append("<div class=\"metric_column_def\"><span>" + field.name() + ": </span>");
- out.append(field.commentText());
- out.println("</div>");
- }
- }
- }
-
- out.close();
- return true;
- }
-
- /**
- * Checks to see if the class extends MetricBase using only the JavaDoc
- * metadata provided about the class.
- *
- * @param doc the ClassDoc representing the class to be tested
- * @return true if the class is a metrics class, false otherwise
- */
- protected static boolean isMetricsClass(ClassDoc doc) {
- final String metricBaseFqn = MetricBase.class.getName();
- if (!doc.isClass()) return false;
- if (doc.qualifiedTypeName().contains("personal")) return false;
-
- do {
- doc = doc.superclass();
- if (doc != null && metricBaseFqn.equals(doc.qualifiedTypeName())) return true;
- }
- while (doc != null);
-
- return false;
- }
-
- /**
- * Gets the file output parameter from the RootDoc and then opens an
- * PrintStream to write to the file.
- */
- protected static PrintStream getOutput(final RootDoc root) {
- for (final String[] arg : root.options()) {
- if (arg[0].equals("-f") && arg.length == 2) {
- try {
- return new PrintStream(new File(arg[1]));
- }
- catch (FileNotFoundException fnfe) {
- root.printError("Could not open destination file: " + arg[1]);
- fnfe.printStackTrace();
- return null;
- }
- }
- }
-
- root.printError("Destination file parameter -f not supplied.");
- return null;
- }
-
- /**
- * Required method by the javadoc caller that returns the expected number of elements
- * for doclet specific command line arguments.
- */
- public static int optionLength(final String option) {
- if(option.equals("-f")) {
- return 2;
- }
- return 0;
- }
-
- /**
- * Takes a Doc object and uses the firstSentenceTags() to recreate the first sentence
- * text.
- */
- protected static String firstSentence(final Doc doc) {
- final Tag[] tags = doc.firstSentenceTags();
- final StringBuilder builder = new StringBuilder(128);
- for (final Tag tag : tags) {
- builder.append(tag.text());
- }
-
- return builder.toString();
- }
-
-}
diff --git a/src/java/net/sf/picard/util/OverlapDetector.java b/src/java/net/sf/picard/util/OverlapDetector.java
deleted file mode 100644
index ffd3416..0000000
--- a/src/java/net/sf/picard/util/OverlapDetector.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import java.util.*;
-
-/**
- * Utility class to efficiently do in memory overlap detection between a large
- * set of mapping like objects, and one or more candidate mappings.
- */
-public class OverlapDetector<T> {
- private Map<Object, IntervalTree<Set<T>>> cache = new HashMap<Object, IntervalTree<Set<T>>>();
- private final int lhsBuffer;
- private final int rhsBuffer;
-
- /**
- * Constructs an overlap detector.
- * @param lhsBuffer the amount by which to "trim" coordinates of mappings on the left
- * hand side when calculating overlaps
- * @param rhsBuffer the amount by which to "trim" coordinates of mappings on the right
- * hand side when calculating overlaps
- */
- public OverlapDetector(int lhsBuffer, int rhsBuffer) {
- this.lhsBuffer = lhsBuffer;
- this.rhsBuffer = rhsBuffer;
- }
-
- /** Adds a mapping to the set of mappings against which to match candidates. */
- public void addLhs(T object, Interval interval) {
- Object seqId = interval.getSequence();
-
- IntervalTree<Set<T>> tree = this.cache.get(seqId);
- if (tree == null) {
- tree = new IntervalTree<Set<T>>();
- this.cache.put(seqId, tree);
- }
-
- int start = interval.getStart() + this.lhsBuffer;
- int end = interval.getEnd() - this.lhsBuffer;
-
- Set<T> objects = new HashSet<T>();
- objects.add(object);
- if (start <= end) // Don't put in sequences that have no overlappable bases
- {
- Set<T> alreadyThere = tree.put(start, end, objects);
- if (alreadyThere != null)
- {
- alreadyThere.add(object);
- tree.put(start, end, alreadyThere);
- }
- }
- }
-
- /** Adds all items to the overlap detector. */
- public void addAll(List<T> objects, List<Interval> intervals) {
- if (objects.size() != intervals.size()) {
- throw new IllegalArgumentException("Objects and intervals must be the same size.");
- }
-
- for (int i=0; i<objects.size(); ++i) {
- addLhs(objects.get(i), intervals.get(i));
- }
- }
-
- /** Gets all the objects that could be returned by the overlap detector. */
- public Collection<T> getAll() {
- Collection<T> all = new HashSet<T>();
- for (IntervalTree<Set<T>> tree : this.cache.values()) {
- for (IntervalTree.Node<Set<T>> node : tree) {
- all.addAll(node.getValue());
- }
- }
-
- return all;
- }
-
- /** Gets the collection of objects that overlap the provided mapping. */
- public Collection<T> getOverlaps(Interval rhs) {
- Collection<T> matches = new ArrayList<T>();
-
- Object seqId = rhs.getSequence();
- IntervalTree<Set<T>> tree = this.cache.get(seqId);
- int start = rhs.getStart() + this.rhsBuffer;
- int end = rhs.getEnd() - this.rhsBuffer;
-
- if (tree != null && start <= end)
- {
- Iterator<IntervalTree.Node<Set<T>>> it = tree.overlappers(start, end);
- while (it.hasNext())
- {
- IntervalTree.Node<Set<T>> node = it.next();
- matches.addAll(node.getValue());
- }
- }
-
- return matches;
- }
-}
diff --git a/src/java/net/sf/picard/util/PeekableIterator.java b/src/java/net/sf/picard/util/PeekableIterator.java
deleted file mode 100644
index 50bd0d8..0000000
--- a/src/java/net/sf/picard/util/PeekableIterator.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-
-import java.util.Iterator;
-
-/**
- * Generic Closable Iterator that allows you to peek at the next value before calling next
- */
-public class PeekableIterator<Object> implements CloseableIterator<Object> {
- private Iterator<Object> iterator;
- private Object nextObject;
-
- /** Constructs a new iterator that wraps the supplied iterator. */
- public PeekableIterator(Iterator<Object> iterator) {
- this.iterator = iterator;
- advance();
- }
-
- /** Closes the underlying iterator. */
- public void close() {
- CloserUtil.close(iterator);
- }
-
- /** True if there are more items, in which case both next() and peek() will return a value. */
- public boolean hasNext() {
- return this.nextObject != null;
- }
-
- /** Returns the next object and advances the iterator. */
- public Object next() {
- Object retval = this.nextObject;
- advance();
- return retval;
- }
-
- /**
- * Returns the next object but does not advance the iterator. Subsequent calls to peek()
- * and next() will return the same object.
- */
- public Object peek(){
- return this.nextObject;
- }
-
- private void advance(){
- if (this.iterator.hasNext()) {
- this.nextObject = iterator.next();
- }
- else {
- this.nextObject = null;
- }
- }
-
- /** Unsupported Operation. */
- public void remove() {
- throw new UnsupportedOperationException("Not supported: remove");
- }
-}
diff --git a/src/java/net/sf/picard/util/ProcessExecutor.java b/src/java/net/sf/picard/util/ProcessExecutor.java
deleted file mode 100644
index 369353c..0000000
--- a/src/java/net/sf/picard/util/ProcessExecutor.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.*;
-import java.util.concurrent.*;
-
-/**
- * Utility class that will execute sub processes via Runtime.getRuntime().exec(...) and read
- * off the output from stderr and stdout of the sub process. This implementation uses a different
- * thread to read each stream: the current thread for stdout and another, internal thread for
- * stderr. This utility is able to handle concurrent executions, spawning as many threads as
- * are required to handle the concurrent load.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class ProcessExecutor {
- private static final Log log = Log.getInstance(ProcessExecutor.class);
- private static final ExecutorService executorService = Executors.newCachedThreadPool(new ThreadFactory() {
- @Override
- public Thread newThread(final Runnable r) {
- return new Thread(r, "ProcessExecutor Thread");
- }
- });
-
- /**
- * Executes the command via Runtime.getRuntime().exec() then writes stderr to log.error
- * and stdout to log.info and blocks until the command is complete.
- *
- * @see Runtime#exec(String)
- *
- * @param command command string
- * @return return code of command
- */
- public static int execute(final String command) {
- try {
- final Process process = Runtime.getRuntime().exec(command);
- return readStreamsAndWaitFor(process);
- } catch (Throwable t) {
- throw new PicardException("Unexpected exception executing [" + net.sf.samtools.util.StringUtil.join(" ", command) + "]", t);
- }
- }
-
- /**
- * Executes the command via Runtime.getRuntime().exec() then writes stderr to log.error
- * and stdout to log.info and blocks until the command is complete.
- *
- * @see Runtime#exec(String[])
- *
- * @param commandParts command string
- * @return return code of command
- */
- public static int execute(final String[] commandParts) {
- return execute(commandParts, null);
- }
-
- /**
- * Executes the command via Runtime.getRuntime().exec(), writes <code>outputStreamString</code>
- * to the process output stream if it is not null, then writes stderr to log.error
- * and stdout to log.info and blocks until the command is complete.
- *
- * @see Runtime#exec(String[])
- *
- * @param commandParts command string
- * @return return code of command
- */
- public static int execute(final String[] commandParts, String outputStreamString) {
- try {
- final Process process = Runtime.getRuntime().exec(commandParts);
- if (outputStreamString != null) {
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
- writer.write(outputStreamString);
- writer.newLine();
- writer.close();
- }
- return readStreamsAndWaitFor(process);
- } catch (Throwable t) {
- throw new PicardException("Unexpected exception executing [" + net.sf.samtools.util.StringUtil.join(" ", commandParts) + "]", t);
- }
- }
-
- public static String executeAndReturnResult(final String command) {
- try {
- final Process process = Runtime.getRuntime().exec(command);
- final StringBuilderProcessOutputReader err = new StringBuilderProcessOutputReader(process.getErrorStream());
- final Future<?> stderrReader = executorService.submit(err);
- final StringBuilderProcessOutputReader stdout = new StringBuilderProcessOutputReader(process.getInputStream());
- stdout.run();
- // wait for stderr reader to be done
- stderrReader.get();
- final int result = process.waitFor();
- return result == 0 ? stdout.getOutput() : err.getOutput();
- } catch (Throwable t) {
- throw new PicardException("Unexpected exception executing [" + command + "]", t);
- }
-
- }
-
- public static class ExitStatusAndOutput {
- public final int exitStatus;
- public final String stdout;
- /** May be null if interleaved */
- public final String stderr;
-
- public ExitStatusAndOutput(int exitStatus, String stdout, String stderr) {
- this.exitStatus = exitStatus;
- this.stdout = stdout;
- this.stderr = stderr;
- }
- }
-
- /**
- * Execute the command and capture stdout and stderr.
- * @return Exit status of command, and both stderr and stdout interleaved into stdout attribute.
- */
- public static ExitStatusAndOutput executeAndReturnInterleavedOutput(final String command) {
- try {
- final Process process = Runtime.getRuntime().exec(command);
- return interleaveProcessOutput(process);
-
- } catch (Throwable t) {
- throw new PicardException("Unexpected exception executing [" + command + "]", t);
- }
- }
-
- /**
- * Execute the command and capture stdout and stderr.
- * @return Exit status of command, and both stderr and stdout interleaved into stdout attribute.
- */
- public static ExitStatusAndOutput executeAndReturnInterleavedOutput(final String[] commandArray) {
- try {
- final Process process = Runtime.getRuntime().exec(commandArray);
- return interleaveProcessOutput(process);
-
- } catch (Throwable t) {
- throw new PicardException("Unexpected exception executing [" + StringUtil.join(" ", commandArray) + "]", t);
- }
- }
-
- private static ExitStatusAndOutput interleaveProcessOutput(final Process process) throws InterruptedException, IOException {
- final BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
- final BufferedReader stderrReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
- final StringBuilder sb = new StringBuilder();
-
- String stdoutLine = null;
- String stderrLine = null;
- while ((stderrLine = stderrReader.readLine()) != null ||
- (stdoutLine = stdoutReader.readLine()) != null) {
- if (stderrLine!= null) sb.append(stderrLine).append('\n');
- if (stdoutLine!= null) sb.append(stdoutLine).append('\n');
- stderrLine = null;
- stdoutLine = null;
- }
- return new ExitStatusAndOutput(process.waitFor(), sb.toString(), null);
-
- }
-
- private static int readStreamsAndWaitFor(final Process process)
- throws InterruptedException, ExecutionException {
- final Future<?> stderrReader = executorService.submit(new LogErrorProcessOutputReader(process.getErrorStream()));
- new LogInfoProcessOutputReader(process.getInputStream()).run();
- // wait for stderr reader to be done
- stderrReader.get();
- return process.waitFor();
- }
-
-
- /**
- * Runnable that reads off the given stream and logs it somewhere.
- */
- private static abstract class ProcessOutputReader implements Runnable {
- private final BufferedReader reader;
- public ProcessOutputReader(final InputStream stream) {
- reader = new BufferedReader(new InputStreamReader(stream));
- }
-
- @Override
- public void run() {
- try {
- String line;
- while ((line = reader.readLine()) != null) {
- write(line);
- }
- } catch (IOException e) {
- throw new PicardException("Unexpected exception reading from process stream", e);
- }
- }
-
- protected abstract void write(String message);
- }
-
-
- private static class LogErrorProcessOutputReader extends ProcessOutputReader {
- public LogErrorProcessOutputReader(final InputStream stream) { super(stream); }
- @Override protected void write(final String message) { log.error(message); }
- }
-
- private static class LogInfoProcessOutputReader extends ProcessOutputReader {
- public LogInfoProcessOutputReader(final InputStream stream) { super(stream); }
- @Override protected void write(final String message) { log.info(message); }
- }
-
- private static class StringBuilderProcessOutputReader extends ProcessOutputReader {
- private final StringBuilder sb = new StringBuilder();
- public StringBuilderProcessOutputReader(final InputStream stream) { super(stream); }
- @Override protected void write(final String message) { sb.append(message).append("\n"); }
- public String getOutput() { return sb.toString(); }
- }
-
-}
diff --git a/src/java/net/sf/picard/util/ProgressLogger.java b/src/java/net/sf/picard/util/ProgressLogger.java
deleted file mode 100644
index f532076..0000000
--- a/src/java/net/sf/picard/util/ProgressLogger.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.ProgressLoggerInterface;
-
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-
-/**
- * Little progress logging class to facilitate consistent output of useful information when progressing
- * through a stream of SAM records.
- *
- * @author Tim Fennell
- */
-public class ProgressLogger implements ProgressLoggerInterface {
- private final Log log;
- private final int n;
- private final String verb;
- private final String noun;
- private final long startTime = System.currentTimeMillis();
-
- private final NumberFormat fmt = new DecimalFormat("#,###");
- private final NumberFormat timeFmt = new DecimalFormat("00");
-
- private long processed = 0;
-
- // Set to -1 until the first record is added
- private long lastStartTime = -1;
-
- /**
- * Construct a progress logger.
- * @param log the Log object to write outputs to
- * @param n the frequency with which to output (i.e. every N records)
- * @param verb the verb to log, e.g. "Processed, Read, Written".
- * @param noun the noun to use when logging, e.g. "Records, Variants, Loci"
- */
- public ProgressLogger(final Log log, final int n, final String verb, final String noun) {
- this.log = log;
- this.n = n;
- this.verb = verb;
- this.noun = noun;
- }
-
- /**
- * Construct a progress logger.
- * @param log the Log object to write outputs to
- * @param n the frequency with which to output (i.e. every N records)
- * @param verb the verb to log, e.g. "Processed, Read, Written".
- */
- public ProgressLogger(final Log log, final int n, final String verb) {
- this(log, n, verb, "records");
- }
-
- /**
- * Construct a progress logger with the desired log and frequency and the verb "Processed".
- * @param log the Log object to write outputs to
- * @param n the frequency with which to output (i.e. every N records)
- */
- public ProgressLogger(final Log log, final int n) { this(log, n, "Processed"); }
-
- /**
- * Construct a progress logger with the desired log, the verb "Processed" and a period of 1m records.
- * @param log the Log object to write outputs to
- */
- public ProgressLogger(final Log log) { this(log, 1000000); }
-
- public synchronized boolean record(final String chrom, final int pos) {
- if (this.lastStartTime == -1) this.lastStartTime = System.currentTimeMillis();
- if (++this.processed % this.n == 0) {
- final long now = System.currentTimeMillis();
- final long lastPeriodSeconds = (now - this.lastStartTime) / 1000;
- this.lastStartTime = now;
-
- final long seconds = (System.currentTimeMillis() - startTime) / 1000;
- final String elapsed = formatElapseTime(seconds);
- final String period = pad(fmt.format(lastPeriodSeconds), 4);
- final String processed = pad(fmt.format(this.processed), 13);
-
- final String readInfo;
- if (chrom == null) readInfo = "*/*";
- else readInfo = chrom + ":" + fmt.format(pos);
-
- log.info(this.verb, " ", processed, " " + noun + ". Elapsed time: ", elapsed, "s. Time for last ", fmt.format(this.n),
- ": ", period, "s. Last read position: ", readInfo);
- return true;
- }
- else {
- return false;
- }
- }
-
- /**
- * Records that a given record has been processed and triggers logging if necessary.
- * @return boolean true if logging was triggered, false otherwise
- */
- public synchronized boolean record(final SAMRecord rec) {
- if (rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- return record(null, 0);
- }
- else {
- return record(rec.getReferenceName(), rec.getAlignmentStart());
- }
- }
-
- /** Records multiple SAMRecords and triggers logging if necessary. */
- public boolean record(final SAMRecord... recs) {
- boolean triggered = false;
- for (final SAMRecord rec : recs) triggered = record(rec) || triggered;
- return triggered;
- }
-
- /** Returns the count of records processed. */
- public long getCount() { return this.processed; }
-
- /** Returns the number of seconds since progress tracking began. */
- public long getElapsedSeconds() { return (System.currentTimeMillis() - this.startTime) / 1000; }
-
- /** Left pads a string until it is at least the given length. */
- private String pad (String in, final int length) {
- while (in.length() < length) {
- in = " " + in;
- }
-
- return in;
- }
-
- /** Formats a number of seconds into hours:minutes:seconds. */
- private String formatElapseTime(final long seconds) {
- final long s = seconds % 60;
- final long allMinutes = seconds / 60;
- final long m = allMinutes % 60;
- final long h = allMinutes / 60;
-
- return timeFmt.format(h) + ":" + timeFmt.format(m) + ":" + timeFmt.format(s);
- }
-}
diff --git a/src/java/net/sf/picard/util/QualityEncodingDetector.java b/src/java/net/sf/picard/util/QualityEncodingDetector.java
deleted file mode 100644
index 808929b..0000000
--- a/src/java/net/sf/picard/util/QualityEncodingDetector.java
+++ /dev/null
@@ -1,359 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.fastq.FastqReader;
-import net.sf.picard.fastq.FastqRecord;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMRecordIterator;
-
-import java.util.*;
-
-import static java.util.Arrays.asList;
-
-/**
- * Utility for determining the type of quality encoding/format (see FastqQualityFormat) used in a SAM/BAM or Fastq.
- * <p/>
- * To use this class, invoke the detect() method with a SAMFileReader or FastqReader, as appropriate. The consumer is
- * responsible for closing readers.
- *
- * @author mccowan at broadinstitute.org
- */
-public class QualityEncodingDetector {
-
- private QualityRecordAggregator qualityAggregator = new QualityRecordAggregator();
-
- /**
- * The maximum number of records over which the detector will iterate before making a determination, by default.
- */
- public static final long DEFAULT_MAX_RECORDS_TO_ITERATE = 10000;
- private static final Log log = Log.getInstance(QualityEncodingDetector.class);
-
- public enum FileContext {FASTQ, SAM}
-
- static class Range {
- final int low, high;
-
- Range(final int low, final int high) {
- this.low = low;
- this.high = high;
- }
-
- boolean contains(final int value) {
- return value <= high && value >= low;
- }
- }
-
- /**
- * Collection of data about the different quality formats and how they are interpreted.
- */
- enum QualityScheme {
- Phred(
- new Range(0, 93), // Raw value range
- new Range(33, 126), // ASCII value range
- asList(new Range(33, 58)), // Ranges into which we expect at least one ASCII value to fall
- FastqQualityFormat.Standard // Associated quality format
- ),
- Solexa(
- new Range(-5, 62),
- new Range(59, 126),
- new ArrayList<Range>(),
- FastqQualityFormat.Solexa
- ),
- Illumina(
- new Range(0, 62),
- new Range(64, 126),
- new ArrayList<Range>(),
- FastqQualityFormat.Illumina
- );
- final Range rawRange, asciiRange;
- /**
- * Ranges into which we expect at least one value to fall if this formatting is being used. For example, for
- * Standard encoding, we expect to at least one ASCII value between 33 and 58 (0 and 25); otherwise, it's
- * probably not Standard-encoded.
- */
- final List<Range> expectedAsciiRanges;
- final FastqQualityFormat qualityFormat;
-
- QualityScheme(final Range rawRange, final Range asciiRange, final List<Range> expectedAsciiRanges, final FastqQualityFormat qualityFormat) {
- this.rawRange = rawRange;
- this.asciiRange = asciiRange;
- this.expectedAsciiRanges = expectedAsciiRanges;
- this.qualityFormat = qualityFormat;
- }
- }
-
- /**
- * Collecting reads and their quality scores for later analysis. Uses ASCII values since those are the inherently
- * "raw-est", read unmodified from the file.
- */
- private static class QualityRecordAggregator {
- private Set<Integer> observedAsciiQualities = new HashSet<Integer>();
-
- public Set<Integer> getObservedAsciiQualities() {
- return Collections.unmodifiableSet(observedAsciiQualities);
- }
-
- /**
- * Adds the FastqRecord's quality scores.
- */
- public void add(final FastqRecord fastqRecord) {
- addAsciiQuality(fastqRecord.getBaseQualityString().getBytes());
- }
-
- /**
- * Adds the SAMRecord's quality scores.
- * <p/>
- * Does not assume Phred quality encoding (for obvious reasons); getBaseQualityString() is used to read the
- * unmodified ASCII score. To elaborate, SAMFileReader, which is generating these SAMRecords, builds the
- * SAMRecord by subtracting a value from each quality score and storing that transformed value internally.
- * Since we desire original scores here (whatever was in the file to begin with), we effectively undo this
- * transformation by asking SAMRecord to convert the quality back into the ASCII that was read in the file.
- */
- public void add(final SAMRecord samRecord) {
- addAsciiQuality(samRecord.getBaseQualityString().getBytes());
- }
-
- private void addAsciiQuality(final byte... asciiQualities) {
- for (final byte asciiQuality : asciiQualities) {
- observedAsciiQualities.add((int) asciiQuality);
- }
- }
- }
-
- /**
- * Adds the provided reader's records to the detector.
- * @return The number of records read
- */
- public long add(final long maxRecords, final FastqReader... readers) {
- final Iterator<FastqRecord> iterator = generateInterleavedFastqIterator(readers);
- long recordCount = 0;
- while (iterator.hasNext() && recordCount++ != maxRecords) {
- this.add(iterator.next());
- }
- log.debug(String.format("Read %s records from %s.", recordCount, Arrays.toString(readers)));
- return recordCount;
- }
-
- /**
- * Adds the provided reader's records to the detector.
- * @return The number of records read
- */
- public long add(final long maxRecords, final SAMFileReader reader) {
- final SAMRecordIterator iterator = reader.iterator();
- long recordCount = 0;
- try {
- while (iterator.hasNext() && recordCount++ != maxRecords) {
- this.add(iterator.next());
- }
-
- return recordCount;
- } finally {
- iterator.close();
- }
- }
-
- /**
- * Adds the provided record's qualities to the detector.
- */
- public void add(final FastqRecord fastqRecord) {
- this.qualityAggregator.add(fastqRecord);
- }
-
- /**
- * Adds the provided record's qualities to the detector.
- */
- public void add(final SAMRecord samRecord) {
- this.qualityAggregator.add(samRecord);
- }
-
- /**
- * Tests whether or not the detector can make a determination without guessing (i.e., if all but one quality format
- * can be excluded using established exclusion conventions).
- *
- * @return True if more than one format is possible after exclusions; false otherwise
- */
- public boolean isDeterminationAmbiguous() {
- return this.generateCandidateQualities(true).size() > 1;
- }
-
- /**
- * Processes collected quality data and applies rules to determine which quality formats are possible.
- * <p/>
- * Specifically, for each format's known range of possible values (its "quality scheme"), exclude formats if any
- * observed values fall outside of that range. Additionally, exclude formats for which we expect to see at
- * least one quality in a range of values, but do not. (For example, for Phred, we expect to eventually see
- * a value below 58. If we never see such a value, we exclude Phred as a possible format unless the checkExpected
- * flag is set to false in which case we leave Phred as a possible quality format.)
- */
- public EnumSet<FastqQualityFormat> generateCandidateQualities(final boolean checkExpected) {
- final EnumSet<FastqQualityFormat> candidateFormats = EnumSet.allOf(FastqQualityFormat.class);
- final Set<Integer> observedAsciiQualities = this.qualityAggregator.getObservedAsciiQualities();
- if (observedAsciiQualities.isEmpty())
- throw new PicardException("Cannot determine candidate qualities: no qualities found.");
-
- for (final QualityScheme scheme : QualityScheme.values()) {
- final Iterator<Integer> qualityBinIterator = observedAsciiQualities.iterator();
- final Collection<Range> remainingExpectedValueRanges = new ArrayList<Range>(scheme.expectedAsciiRanges);
- while (qualityBinIterator.hasNext()) {
- final int quality = qualityBinIterator.next();
- if (!scheme.asciiRange.contains(quality)) {
- candidateFormats.remove(scheme.qualityFormat);
- }
-
- final Iterator<Range> expectedValueRangeIterator = remainingExpectedValueRanges.iterator();
- while (expectedValueRangeIterator.hasNext()) {
- if (expectedValueRangeIterator.next().contains(quality)) {
- expectedValueRangeIterator.remove();
- }
- }
- }
-
- /**
- * We remove elements from this list as we observe values in the corresponding range; if the list isn't
- * empty, we haven't seen a value in that range. In other words, we haven't seen a value we expected.
- * Consequently, we remove the corresponding format from the running possibilities.
- */
- if (!remainingExpectedValueRanges.isEmpty() && checkExpected) {
- candidateFormats.remove(scheme.qualityFormat);
- }
- }
-
- return candidateFormats;
- }
-
- /**
- * Interleaves FastqReader iterators so that serial-iteration of the result cycles between the constituent iterators.
- */
- private static Iterator<FastqRecord> generateInterleavedFastqIterator(final FastqReader... readers) {
- return new Iterator<FastqRecord>() {
- private Queue<Iterator<FastqRecord>> queue = new LinkedList<Iterator<FastqRecord>>();
-
- {
- for (final FastqReader reader : readers) {
- queue.add(reader.iterator());
- }
- }
-
- public boolean hasNext() {
- // If this returns true, the head of the queue will have a next element
- while (!queue.isEmpty()) {
- if (queue.peek().hasNext()) {
- return true;
- }
- queue.poll();
- }
- return false;
- }
-
- public FastqRecord next() {
- if (!hasNext()) throw new NoSuchElementException();
- final Iterator<FastqRecord> i = queue.poll();
- final FastqRecord result = i.next();
- queue.offer(i);
- return result;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- };
- }
-
- /**
- * Reads through the records in the provided fastq reader and uses their quality scores to determine the quality
- * format used in the fastq.
- *
- * @param readers The fastq readers from which qualities are to be read; at least one must be provided
- * @param maxRecords The maximum number of records to read from the reader before making a determination (a guess,
- * so more records is better)
- * @return The determined quality format
- */
- public static FastqQualityFormat detect(final long maxRecords, final FastqReader... readers) {
- final QualityEncodingDetector detector = new QualityEncodingDetector();
- final long recordCount = detector.add(maxRecords, readers);
- log.debug(String.format("Read %s records from %s.", recordCount, Arrays.toString(readers)));
- return detector.generateBestGuess(FileContext.FASTQ, null);
- }
-
- public static FastqQualityFormat detect(final FastqReader... readers) {
- return detect(DEFAULT_MAX_RECORDS_TO_ITERATE, readers);
- }
-
- /**
- * Reads through the records in the provided SAM reader and uses their quality scores to determine the quality
- * format used in the SAM.
- *
- * @param reader The SAM reader from which records are to be read
- * @param maxRecords The maximum number of records to read from the reader before making a determination (a guess,
- * so more records is better)
- * @return The determined quality format
- */
- public static FastqQualityFormat detect(final long maxRecords, final SAMFileReader reader) {
- final QualityEncodingDetector detector = new QualityEncodingDetector();
- final long recordCount = detector.add(maxRecords, reader);
- log.debug(String.format("Read %s records from %s.", recordCount, reader));
- return detector.generateBestGuess(FileContext.SAM, null);
- }
-
- public static FastqQualityFormat detect(final SAMFileReader reader) {
- return detect(DEFAULT_MAX_RECORDS_TO_ITERATE, reader);
- }
-
- /**
- * Reads through the records in the provided SAM reader and uses their quality scores to sanity check the expected
- * quality passed in. If the expected quality format is sane we just hand this back otherwise we throw a
- * {@link PicardException}.
- */
- public static FastqQualityFormat detect(final SAMFileReader reader, final FastqQualityFormat expectedQualityFormat) {
- //sanity check expectedQuality
- final QualityEncodingDetector detector = new QualityEncodingDetector();
- final long recordCount = detector.add(DEFAULT_MAX_RECORDS_TO_ITERATE, reader);
- log.debug(String.format("Read %s records from %s.", recordCount, reader));
- return detector.generateBestGuess(FileContext.SAM, expectedQualityFormat);
- }
-
- /**
- * Make the best guess at the quality format. If an expected quality is passed in the values are sanity checked
- * (ignoring expected range) and if they are deemed acceptable the expected quality is passed back. Otherwise we use
- * a set of heuristics to make our best guess.
- */
- public FastqQualityFormat generateBestGuess(final FileContext context, final FastqQualityFormat expectedQuality) {
- final EnumSet<FastqQualityFormat> possibleFormats;
- if (null != expectedQuality) {
- possibleFormats = this.generateCandidateQualities(false);
- if (possibleFormats.contains(expectedQuality)) {
- return expectedQuality;
- } else {
- throw new PicardException(
- String.format("The quality values do not fall in the range appropriate for the expected quality of %s.",
- expectedQuality.name()));
- }
- } else {
- possibleFormats = this.generateCandidateQualities(true);
- switch (possibleFormats.size()) {
- case 1:
- return possibleFormats.iterator().next();
- case 2:
- if (possibleFormats.equals(EnumSet.of(FastqQualityFormat.Illumina, FastqQualityFormat.Solexa))) {
- return FastqQualityFormat.Illumina;
- } else if (possibleFormats.equals(EnumSet.of(FastqQualityFormat.Illumina, FastqQualityFormat.Standard))) {
- switch (context) {
- case FASTQ:
- return FastqQualityFormat.Illumina;
- case SAM:
- return FastqQualityFormat.Standard;
- }
- } else if (possibleFormats.equals(EnumSet.of(FastqQualityFormat.Standard, FastqQualityFormat.Solexa))) {
- return FastqQualityFormat.Standard;
- } else throw new PicardException("Unreachable code.");
- case 3:
- throw new PicardException("The quality format cannot be determined: no formats were excluded.");
- case 0:
- throw new PicardException("The quality format cannot be determined: all formats were excluded.");
- default:
- throw new PicardException("Unreachable code.");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/picard/util/QualityUtil.java b/src/java/net/sf/picard/util/QualityUtil.java
deleted file mode 100644
index f35df2f..0000000
--- a/src/java/net/sf/picard/util/QualityUtil.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.SequenceUtil;
-
-/**
- * Utility class for working with quality scores and error probabilities.
- *
- * @author Tim Fennell
- */
-public final class QualityUtil {
- private static final double[] errorProbabilityByPhredScore;
-
- static {
- errorProbabilityByPhredScore = new double[101];
- for (int i=0; i<errorProbabilityByPhredScore.length; ++i) {
- errorProbabilityByPhredScore[i] = 1d/Math.pow(10d, i/10d);
- }
- }
-
- /** Given a phred score between 0 and 100 returns the probability of error. */
- public static double getErrorProbabilityFromPhredScore(final int i) {
- return errorProbabilityByPhredScore[i];
- }
-
- /** Gets the phred score for any given probability of error. */
- public static int getPhredScoreFromErrorProbability(final double probability) {
- return (int) Math.round(-10 * Math.log10(probability));
- }
-
- /** Gets the phred score given the specified observations and errors. */
- public static int getPhredScoreFromObsAndErrors(final double observations, final double errors) {
- return getPhredScoreFromErrorProbability(errors / observations);
- }
-
- /**
- * Calculates the sum of error probabilities for all read bases in the SAM record. Takes
- * the SAM record as opposed to the qualities directly so that it can make sure to count
- * no-calls as 1 instead of what the quality score says.
- * */
- public static double sumOfErrorProbabilities(final SAMRecord rec) {
- final byte[] bases = rec.getReadBases();
- final byte[] quals = rec.getBaseQualities();
-
- double sum = 0;
-
- for (int i=0; i<bases.length; ++i) {
- if (SequenceUtil.isNoCall(bases[i])) ++sum;
- else sum += QualityUtil.getErrorProbabilityFromPhredScore(quals[i]);
- }
-
- return sum;
- }
-}
diff --git a/src/java/net/sf/picard/util/RExecutor.java b/src/java/net/sf/picard/util/RExecutor.java
deleted file mode 100644
index b41486e..0000000
--- a/src/java/net/sf/picard/util/RExecutor.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.CollectionUtil;
-
-/**
- * Util class for executing R scripts.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class RExecutor {
- private static final Log LOG = Log.getInstance(RExecutor.class);
- private static final String R_EXE = "Rscript";
-
- /**
- * Executes the given R script that is stored in a file on the classpath. The script file
- * is read from the classpath and written to a temp file then executed by a call to Rscript.
- * Blocks until the R script is complete.
- *
- * @param rScriptName the fully qualified name of the classpath resource of the script
- * @param arguments any arguments required by the script
- * @return the return code of the R process
- */
- public static int executeFromClasspath(final String rScriptName, final String... arguments) {
- final File scriptFile = writeScriptFile(rScriptName);
- final int returnCode = executeFromFile(scriptFile, arguments);
- net.sf.samtools.util.IOUtil.deleteFiles(scriptFile);
- return returnCode;
- }
-
- /**
- * Executes the given R script that is stored in a file by a call to Rscript.
- * Blocks until the R script is complete.
- *
- * @param scriptFile the file object for the script
- * @param arguments any arguments required by the script
- * @return the return code of the R process
- */
- public static int executeFromFile(final File scriptFile, final String... arguments) {
- final String[] command = new String[arguments.length + 2];
- command[0] = R_EXE;
- command[1] = scriptFile.getAbsolutePath();
- System.arraycopy(arguments, 0, command, 2, arguments.length);
- LOG.info(String.format("Executing R script via command: %s", CollectionUtil.join(Arrays.asList(command), " ")));
- return ProcessExecutor.execute(command);
- }
-
- /**
- * Writes the classpath resource named by rScriptName to the temp dir.
- */
- private static File writeScriptFile(final String rScriptName) {
- InputStream scriptStream = null;
- OutputStream scriptFileStream = null;
- try {
- scriptStream = RExecutor.class.getClassLoader().getResourceAsStream(rScriptName);
- if (scriptStream == null) {
- throw new IllegalArgumentException("Script [" + rScriptName + "] not found in classpath");
- }
- final File scriptFile = File.createTempFile("script", ".R");
- scriptFileStream = IoUtil.openFileForWriting(scriptFile);
- IoUtil.copyStream(scriptStream, scriptFileStream);
- return scriptFile;
- } catch (IOException e) {
- throw new PicardException("Unexpected exception creating R script file", e);
- } finally {
- if (scriptStream != null) {
- try {
- scriptStream.close();
- } catch (IOException ignored) {
- }
- }
- if (scriptFileStream != null) {
- try {
- scriptFileStream.close();
- } catch (IOException ignored) {
- }
- }
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/ReferenceSequenceMask.java b/src/java/net/sf/picard/util/ReferenceSequenceMask.java
deleted file mode 100644
index 18ec096..0000000
--- a/src/java/net/sf/picard/util/ReferenceSequenceMask.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-/**
- * Interface for specifying loci of interest for genotype calling and other operations.
- * It is a requirement that the sequences be probed in ascending order.
- *
- * @author alecw at broadinstitute dot oh are gee
- */
-public interface ReferenceSequenceMask {
-
- /**
- * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
- * @return true if the mask is set for the given sequence and position
- */
- boolean get(int sequenceIndex, int position);
-
- /**
- * It is required that sequenceIndex is >= any previous sequenceIndex passed to this class.
- * @return the next pos on the given sequence >= position that is set, or -1 if there are no more set positions
- */
- int nextPosition(int sequenceIndex, int position);
-
- /**
- * @return Largest sequence index for which there are set bits.
- */
- int getMaxSequenceIndex();
-
- /**
- * @return the largest position on the last sequence index
- */
- int getMaxPosition();
-}
diff --git a/src/java/net/sf/picard/util/ResourceLimitedMap.java b/src/java/net/sf/picard/util/ResourceLimitedMap.java
deleted file mode 100644
index 2dcc33c..0000000
--- a/src/java/net/sf/picard/util/ResourceLimitedMap.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * LRU collection class for managing objects that place some resource burden such that not too many of them
- * can existing in the VM at one time, but they can be reconstructed ias necessary.
- * Original motivation was for an LRU cache of FileOutputStreams.
- *
- * @author alecw at broadinstitute.org
- */
-public class ResourceLimitedMap<Key, Value> {
- private static final float hashTableLoadFactor = 0.75f;
-
- private final LinkedHashMap<Key,Value> map;
- private final int cacheSize;
- private final ResourceLimitedMapFunctor<Key, Value> functor;
-
- /**
- * Create LRU cache
- * @param cacheSize Max number of objects to be stored in the cache.
- * @param functor Encapsulates methods for creating a new object if it isn't in the cache, and
- * for finalizing an object that is getting LRU'ed out of the cache.
- */
- public ResourceLimitedMap(final int cacheSize, final ResourceLimitedMapFunctor<Key, Value> functor) {
- this.cacheSize = cacheSize;
- this.functor = functor;
- // Make hash table big enough so that it never gets resized.
- final int hashTableCapacity = (int)Math.ceil(cacheSize / hashTableLoadFactor) + 1;
-
- // Created LinkedHashMap in LRU mode
- map = new LinkedHashMap<Key,Value>(hashTableCapacity, hashTableLoadFactor, true) {
- @Override protected boolean removeEldestEntry (final Map.Entry<Key,Value> eldest) {
- if (size() > ResourceLimitedMap.this.cacheSize) {
- ResourceLimitedMap.this.functor.finalizeValue(eldest.getKey(), eldest.getValue());
- return true;
- } else {
- return false;
- }
- }
- };
- }
-
- /**
- * Return an existing value, or create a new one if necessary. If creating a new one and the
- * cache is full, the eldest object is pushed out of the cache.
- * @param key Key of desired value.
- * @return Either existing value, or new value created from key and inserted into map.
- */
- public Value get(final Key key) {
- if (!map.containsKey(key)) {
- map.put(key, functor.makeValue(key));
- }
- return map.get(key);
- }
-
- public Value remove(final Key key) {
- return map.remove(key);
- }
-
- /**
- * Determine if the map contains the given key. Note that even if the map does not contain
- * the key, get(key) will return a value, because one will be created.
- * @param key
- * @return true if the map currently contains the given key. It is unknown whether the map
- * may have contained the key in the past.
- */
- public boolean containsKey(final Key key) {
- return map.containsKey(key);
- }
-
- /**
- * Remove all the values from the map, and call functory.finalizeValue() on each of them.
- */
- public void finalizeAll() {
- for (final Map.Entry<Key, Value> entry : map.entrySet()) {
- functor.finalizeValue(entry.getKey(), entry.getValue());
- }
- map.clear();
- }
-}
diff --git a/src/java/net/sf/picard/util/ResourceLimitedMapFunctor.java b/src/java/net/sf/picard/util/ResourceLimitedMapFunctor.java
deleted file mode 100644
index d709216..0000000
--- a/src/java/net/sf/picard/util/ResourceLimitedMapFunctor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-/**
- * c.f. ResourceLimitedMap for details.
- * @param <Key> Used to find and create value.
- * @param <Value> Type stored in ResourceLimitedMap, which is created as necessary
- * and finalized when it is the least-recently used.
- */
-public interface ResourceLimitedMapFunctor<Key, Value> {
-
- /**
- * Create a new value corresponding to the key
- * @param key
- * @return a new value corresponding to the key
- */
- Value makeValue(final Key key);
-
- /**
- * Clean up an existing value in conjunction with removing from ResourceLimitedMap.
- * @param key
- * @param value
- */
- void finalizeValue(final Key key, final Value value);
-}
diff --git a/src/java/net/sf/picard/util/SamLocusIterator.java b/src/java/net/sf/picard/util/SamLocusIterator.java
deleted file mode 100644
index 39ca075..0000000
--- a/src/java/net/sf/picard/util/SamLocusIterator.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.filter.*;
-import net.sf.samtools.*;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.util.*;
-
-/**
- * Iterator that traverses a SAM File, accumulating information on a per-locus basis.
- * Optionally takes a target interval list, in which case the loci returned are the ones covered by
- * the interval list. If no target interval list, whatever loci are covered by the input reads are returned.
- * By default duplicate reads and non-primary alignments are filtered out. Filtering may be changed
- * via setSamFilters().
- *
- * @author alecw at broadinstitute.org
- */
-public class SamLocusIterator implements Iterable<SamLocusIterator.LocusInfo>, CloseableIterator<SamLocusIterator.LocusInfo> {
- private static final Log LOG = Log.getInstance(SamLocusIterator.class);
-
- /**
- * A SAMRecord plus the zero-based offset in the read corresponding to the position in LocusInfo
- */
- public static class RecordAndOffset {
- private final SAMRecord record;
- private final int offset;
-
- public RecordAndOffset(final SAMRecord record, final int offset) {
- this.offset = offset;
- this.record = record;
- }
-
- /**
- * Zero-based offset into the read corresonding to the current position in LocusInfo
- */
- public int getOffset() {
- return offset;
- }
-
- public SAMRecord getRecord() {
- return record;
- }
-
- public byte getReadBase() {
- return record.getReadBases()[offset];
- }
-
- public byte getBaseQuality() {
- return record.getBaseQualities()[offset];
- }
- }
-
- /**
- * The unit of iteration. Holds the locus, plus a ReadAndOffset for each read that overlaps the locus
- */
- public static class LocusInfo implements Locus {
- private final SAMSequenceRecord referenceSequence;
- private final int position;
- private final List<RecordAndOffset> recordAndOffsets = new ArrayList<RecordAndOffset>(100);
-
- LocusInfo(final SAMSequenceRecord referenceSequence, final int position) {
- this.referenceSequence = referenceSequence;
- this.position = position;
- }
-
- /**
- * Accumulate info for one read at the locus.
- */
- public void add(final SAMRecord read, final int position) {
- recordAndOffsets.add(new RecordAndOffset(read, position));
- }
-
- public int getSequenceIndex() { return referenceSequence.getSequenceIndex(); }
-
- /**
- * @return 1-based reference position
- */
- public int getPosition() { return position; }
-
- public List<RecordAndOffset> getRecordAndPositions() {
- return Collections.unmodifiableList(recordAndOffsets);
- }
-
- public String getSequenceName() { return referenceSequence.getSequenceName(); }
-
- @Override
- public String toString() {
- return referenceSequence.getSequenceName() + ":" + position;
- }
-
- public int getSequenceLength(){return referenceSequence.getSequenceLength();}
- }
-
-
-
- private final SAMFileReader samReader;
- private final ReferenceSequenceMask referenceSequenceMask;
- private PeekableIterator<SAMRecord> samIterator;
- private List<SamRecordFilter> samFilters = Arrays.asList(new SecondaryOrSupplementaryFilter(),
- new DuplicateReadFilter());
- private final List<Interval> intervals;
- private final boolean useIndex;
-
- // LocusInfos on this list are ready to be returned by iterator. All reads that overlap
- // the locus have been accumulated before the LocusInfo is moved into this list.
- private final LinkedList<LocusInfo> complete = new LinkedList<LocusInfo>();
-
- // LocusInfos for which accumulation is in progress
- private final LinkedList<LocusInfo> accumulator = new LinkedList<LocusInfo>();
-
- private int qualityScoreCutoff = Integer.MIN_VALUE;
- private int mappingQualityScoreCutoff = Integer.MIN_VALUE;
- private boolean includeNonPfReads = true;
-
- /**
- * If true, emit a LocusInfo for every locus in the target map, or if no target map,
- * emit a LocusInfo for every locus in the reference sequence.
- * If false, emit a LocusInfo only if a locus has coverage.
- */
- private boolean emitUncoveredLoci = true;
-
- // When there is a target mask, these members remember the last locus for which a LocusInfo has been
- // returned, so that any uncovered locus in the target mask can be covered by a 0-coverage LocusInfo
- private int lastReferenceSequence = 0;
- private int lastPosition = 0;
-
- // Set to true when past all aligned reads in input SAM file
- private boolean finishedAlignedReads = false;
-
- private final LocusComparator<Locus> locusComparator = new LocusComparator<Locus>();
-
-
- /**
- * Prepare to iterate through the given SAM records, skipping non-primary alignments. Do not use
- * BAM index even if available.
- */
- public SamLocusIterator(final SAMFileReader samReader) {
- this(samReader, null);
- }
-
- /**
- * Prepare to iterate through the given SAM records, skipping non-primary alignments. Do not use
- * BAM index even if available.
- *
- * @param intervalList Either the list of desired intervals, or null. Note that if an intervalList is
- * passed in that is not coordinate sorted, it will eventually be coordinated sorted by this class.
- */
- public SamLocusIterator(final SAMFileReader samReader, final IntervalList intervalList) {
- this(samReader, intervalList, samReader.hasIndex());
- }
-
- /**
- * Prepare to iterate through the given SAM records, skipping non-primary alignments
- *
- * @param samReader must be coordinate sorted
- * @param intervalList Either the list of desired intervals, or null. Note that if an intervalList is
- * passed in that is not coordinate sorted, it will eventually be coordinated sorted by this class.
- * @param useIndex If true, do indexed lookup to improve performance. Not relevant if intervalList == null.
- * It is no longer the case the useIndex==true can make performance worse. It should always perform at least
- * as well as useIndex==false, and generally will be much faster.
- */
- public SamLocusIterator(final SAMFileReader samReader, final IntervalList intervalList, final boolean useIndex) {
- if (samReader.getFileHeader().getSortOrder() == null || samReader.getFileHeader().getSortOrder() == SAMFileHeader.SortOrder.unsorted) {
- LOG.warn("SamLocusIterator constructed with samReader that has SortOrder == unsorted. ", "" +
- "Assuming SAM is coordinate sorted, but exceptions may occur if it is not.");
- } else if (samReader.getFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
- throw new PicardException("SamLocusIterator cannot operate on a SAM file that is not coordinate sorted.");
- }
- this.samReader = samReader;
- this.useIndex = useIndex;
- if (intervalList != null) {
- intervals = intervalList.getUniqueIntervals();
- this.referenceSequenceMask = new IntervalListReferenceSequenceMask(intervalList);
- } else {
- intervals = null;
- this.referenceSequenceMask = new WholeGenomeReferenceSequenceMask(samReader.getFileHeader());
- }
- }
-
- public Iterator<LocusInfo> iterator() {
- if (samIterator != null) {
- throw new IllegalStateException("Cannot call iterator() more than once on SamLocusIterator");
- }
- CloseableIterator<SAMRecord> tempIterator;
- if (intervals != null) {
- tempIterator = new SamRecordIntervalIteratorFactory().makeSamRecordIntervalIterator(samReader, intervals, useIndex);
- } else {
- tempIterator = samReader.iterator();
- }
- if (samFilters != null) {
- tempIterator = new FilteringIterator(tempIterator, new AggregateFilter(samFilters));
- }
- samIterator = new PeekableIterator<SAMRecord>(tempIterator);
- return this;
- }
-
- public void close() {
- this.samIterator.close();
- }
-
- private boolean samHasMore() {
- return !finishedAlignedReads && (samIterator.peek() != null);
- }
-
- /**
- * @return true if there are more aligned reads in the SAM file, LocusInfos in some stage of accumulation,
- * or loci in the target mask that have yet to be covered.
- */
- public boolean hasNext() {
- if (this.samIterator == null) {
- iterator();
- }
-
- while (complete.isEmpty() && ((!accumulator.isEmpty()) || samHasMore() || hasRemainingMaskBases())) {
- final LocusInfo locusInfo = next();
- if (locusInfo != null) {
- complete.addFirst(locusInfo);
- }
- }
- return !complete.isEmpty();
- }
-
- /**
- * @return true if there are loci in the target mask that have yet to be covered by LocusInfos
- */
- private boolean hasRemainingMaskBases() {
- // if there are more sequences in the mask, by definition some of them must have
- // marked bases otherwise if we're in the last sequence, but we're not at the last marked position,
- // there is also more in the mask
- if (!emitUncoveredLoci) {
- // If not emitting uncovered loci, this check is irrelevant
- return false;
- }
- return (lastReferenceSequence < referenceSequenceMask.getMaxSequenceIndex() ||
- (lastReferenceSequence == referenceSequenceMask.getMaxSequenceIndex() &&
- lastPosition < referenceSequenceMask.nextPosition(lastReferenceSequence, lastPosition)));
- }
-
- /**
- * hasNext() has been fixed so that if it returns true, next() is now guaranteed not to return null.
- */
- public LocusInfo next() {
-
- // if we don't have any completed entries to return, try and make some!
- while(complete.isEmpty() && samHasMore()) {
- final SAMRecord rec = samIterator.peek();
-
- // There might be unmapped reads mixed in with the mapped ones, but when a read
- // is encountered with no reference index it means that all the mapped reads have been seen.
- if (rec.getReferenceIndex() == -1) {
- this.finishedAlignedReads = true;
- continue;
-
- }
- // Skip over an unaligned read that has been forced to be sorted with the aligned reads
- if (rec.getReadUnmappedFlag()
- || rec.getMappingQuality() < this.mappingQualityScoreCutoff
- || (!this.includeNonPfReads && rec.getReadFailsVendorQualityCheckFlag())) {
- samIterator.next();
- continue;
- }
-
- final Locus alignmentStart = new LocusImpl(rec.getReferenceIndex(), rec.getAlignmentStart());
-
- // emit everything that is before the start of the current read, because we know no more
- // coverage will be accumulated for those loci.
- while (!accumulator.isEmpty() && locusComparator.compare(accumulator.getFirst(), alignmentStart) < 0) {
- final LocusInfo first = accumulator.getFirst();
- populateCompleteQueue(alignmentStart);
- if (!complete.isEmpty()) {
- return complete.removeFirst();
- }
- if (!accumulator.isEmpty() && first == accumulator.getFirst()) {
- throw new PicardException("Stuck in infinite loop");
- }
- }
-
- // at this point, either the accumulator list is empty or the head should
- // be the same position as the first base of the read
- if (!accumulator.isEmpty()) {
- if (accumulator.getFirst().getSequenceIndex() != rec.getReferenceIndex() ||
- accumulator.getFirst().position != rec.getAlignmentStart()) {
- throw new IllegalStateException("accumulator should be empty or aligned with current SAMRecord");
- }
- }
-
- // Store the loci for the read in the accumulator
- accumulateSamRecord(rec);
-
- samIterator.next();
- }
-
- final Locus endLocus = new LocusImpl(Integer.MAX_VALUE, Integer.MAX_VALUE);
- // if we have nothing to return to the user, and we're at the end of the SAM iterator,
- // push everything into the complete queue
- if (complete.isEmpty() && !samHasMore()) {
- while(!accumulator.isEmpty()) {
- populateCompleteQueue(endLocus);
- if (!complete.isEmpty()) {
- return complete.removeFirst();
- }
- }
- }
-
- // if there are completed entries, return those
- if (!complete.isEmpty()) {
- return complete.removeFirst();
- } else if (emitUncoveredLoci){
- final Locus afterLastMaskPositionLocus = new LocusImpl(referenceSequenceMask.getMaxSequenceIndex(),
- referenceSequenceMask.getMaxPosition() + 1);
- // In this case... we're past the last read from SAM so see if we can
- // fill out any more (zero coverage) entries from the mask
- return createNextUncoveredLocusInfo(afterLastMaskPositionLocus);
- } else {
- return null;
- }
- }
-
- /**
- * Capture the loci covered by the given SAMRecord in the LocusInfos in the accumulator,
- * creating new LocusInfos as needed.
- */
- private void accumulateSamRecord(final SAMRecord rec) {
- // interpret the CIGAR string and add the base info
- for(final AlignmentBlock alignmentBlock : rec.getAlignmentBlocks()) {
- for (int i = 0; i < alignmentBlock.getLength(); ++i) {
- // 0-based offset into the read of the current base
- final int readOffset = alignmentBlock.getReadStart() + i - 1;
- // 1-based reference position that the current base aligns to
- final int refPos = alignmentBlock.getReferenceStart() + i;
-
- // 0-based offset from the aligned position of the first base in the read to the aligned position
- // of the current base.
- final int refOffset = refPos - rec.getAlignmentStart();
-
- // Ensure there are LocusInfos up to and including this position
- for (int j = accumulator.size(); j <= refOffset; ++j) {
- accumulator.add(new LocusInfo(getReferenceSequence(rec.getReferenceIndex()),
- rec.getAlignmentStart() + j));
- }
- // if the quality score cutoff is met, accumulate the base info
- if (rec.getBaseQualities()[readOffset] >= getQualityScoreCutoff()) {
- accumulator.get(refOffset).add(rec, readOffset);
- }
- }
- }
- }
-
- /**
- * Create the next relevant zero-coverage LocusInfo
- * @param stopBeforeLocus don't go up to this sequence and position
- * @return a zero-coverage LocusInfo, or null if there is none before the stopBefore locus
- */
- private LocusInfo createNextUncoveredLocusInfo(final Locus stopBeforeLocus) {
- while (lastReferenceSequence <= stopBeforeLocus.getSequenceIndex() &&
- lastReferenceSequence <= referenceSequenceMask.getMaxSequenceIndex()) {
-
- if (lastReferenceSequence == stopBeforeLocus.getSequenceIndex() &&
- lastPosition +1 >= stopBeforeLocus.getPosition()) {
- return null;
- }
-
-
-
- final int nextbit = referenceSequenceMask.nextPosition(lastReferenceSequence, lastPosition);
-
- // try the next reference sequence
- if (nextbit == -1) {
- // No more in this reference sequence
- if (lastReferenceSequence == stopBeforeLocus.getSequenceIndex()) {
- lastPosition = stopBeforeLocus.getPosition();
- return null;
- }
- lastReferenceSequence++;
- lastPosition = 0;
- } else if (lastReferenceSequence < stopBeforeLocus.getSequenceIndex() ||
- nextbit < stopBeforeLocus.getPosition()) {
- lastPosition = nextbit;
- return new LocusInfo(getReferenceSequence(lastReferenceSequence), lastPosition);
- } else if (nextbit >= stopBeforeLocus.getPosition()) {
- return null;
- }
-
- }
-
- return null;
- }
-
- /**
- * Pop the first entry from the LocusInfo accumulator into the complete queue. In addition,
- * check the ReferenceSequenceMask and if there are intervening mask positions between the last popped base and the one
- * about to be popped, put those on the complete queue as well.
- * Note that a single call to this method may not empty the accumulator completely, or even
- * empty it at all, because it may just put a zero-coverage LocusInfo into the complete queue.
- */
- private void populateCompleteQueue(final Locus stopBeforeLocus) {
- // Because of gapped alignments, it is possible to create LocusInfo's with no reads associated with them.
- // Skip over these.
- while (!accumulator.isEmpty() && accumulator.getFirst().getRecordAndPositions().isEmpty() &&
- locusComparator.compare(accumulator.getFirst(), stopBeforeLocus) < 0) {
- accumulator.removeFirst();
- }
- if (accumulator.isEmpty()) {
- return;
- }
- final LocusInfo locusInfo = accumulator.getFirst();
- if (locusComparator.compare(stopBeforeLocus, locusInfo) <= 0) {
- return;
- }
-
- // If necessary, emit a zero-coverage LocusInfo
- if (emitUncoveredLoci) {
- final LocusInfo zeroCoverage = createNextUncoveredLocusInfo(locusInfo);
- if (zeroCoverage != null) {
- complete.addLast(zeroCoverage);
- return;
- }
- }
-
- // At this point we know we're going to process the LocusInfo, so remove it from the accumulator.
- accumulator.removeFirst();
-
- // fill in any gaps based on our genome mask
- final int sequenceIndex = locusInfo.getSequenceIndex();
-
-
- // only add to the complete queue if it's in the mask (or we have no mask!)
- if (referenceSequenceMask.get(locusInfo.getSequenceIndex(), locusInfo.getPosition())) {
- complete.addLast(locusInfo);
- }
-
- lastReferenceSequence = sequenceIndex;
- lastPosition = locusInfo.getPosition();
- }
-
- private SAMSequenceRecord getReferenceSequence(final int referenceSequenceIndex) {
- return samReader.getFileHeader().getSequence(referenceSequenceIndex);
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Can not remove records from a SAM file via an iterator!");
- }
-
- // --------------------------------------------------------------------------------------------
- // Helper methods below this point...
- // --------------------------------------------------------------------------------------------
-
- /**
- * Controls which, if any, SAMRecords are filtered. By default duplicate reads and non-primary alignments
- * are filtered out. The list of filters passed here replaces any existing filters.
- * @param samFilters list of filters, or null if no filtering is desired.
- */
- public void setSamFilters(final List<SamRecordFilter> samFilters) {
- this.samFilters = samFilters;
- }
-
- public int getQualityScoreCutoff() { return qualityScoreCutoff; }
- public void setQualityScoreCutoff(final int qualityScoreCutoff) { this.qualityScoreCutoff = qualityScoreCutoff; }
-
- public int getMappingQualityScoreCutoff() {
- return mappingQualityScoreCutoff;
- }
- public void setMappingQualityScoreCutoff(final int mappingQualityScoreCutoff) { this.mappingQualityScoreCutoff = mappingQualityScoreCutoff; }
-
- public boolean isIncludeNonPfReads() { return includeNonPfReads; }
- public void setIncludeNonPfReads(final boolean includeNonPfReads) { this.includeNonPfReads = includeNonPfReads; }
-
- public boolean isEmitUncoveredLoci() {
- return emitUncoveredLoci;
- }
- public void setEmitUncoveredLoci(final boolean emitUncoveredLoci) {
- this.emitUncoveredLoci = emitUncoveredLoci;
- }
-}
diff --git a/src/java/net/sf/picard/util/SamRecordIntervalIteratorFactory.java b/src/java/net/sf/picard/util/SamRecordIntervalIteratorFactory.java
deleted file mode 100644
index 0f8af5d..0000000
--- a/src/java/net/sf/picard/util/SamRecordIntervalIteratorFactory.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.filter.FilteringIterator;
-import net.sf.picard.filter.IntervalFilter;
-import net.sf.picard.filter.SamRecordFilter;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * Create an iterator over a SAMFileReader that only returns reads that overlap one of the intervals
- * in an interval list.
- *
- * @author alecw at broadinstitute.org
- */
-public class SamRecordIntervalIteratorFactory {
-
- /**
- * @param samReader
- * @param uniqueIntervals list of intervals of interest, with overlaps merged, in coordinate order
- * @param useIndex if false, do not use a BAM index even if it is present.
- * @return an iterator that will be filtered so that only SAMRecords overlapping the intervals
- * in uniqueIntervals will be returned. If a BAM index is available, it will be used to improve performance.
- * Note however that if there are many intervals that cover a great deal of the genome, using the BAM
- * index may actually make performance worse.
- */
- public CloseableIterator<SAMRecord> makeSamRecordIntervalIterator(final SAMFileReader samReader,
- final List<Interval> uniqueIntervals,
- final boolean useIndex) {
- if (!samReader.hasIndex() || !useIndex) {
- final int stopAfterSequence;
- final int stopAfterPosition;
- if (uniqueIntervals.isEmpty()) {
- stopAfterSequence = -1;
- stopAfterPosition = -1;
- } else {
- final Interval lastInterval = uniqueIntervals.get(uniqueIntervals.size() - 1);
- stopAfterSequence = samReader.getFileHeader().getSequenceIndex(lastInterval.getSequence());
- stopAfterPosition = lastInterval.getEnd();
- }
- final IntervalFilter intervalFilter = new IntervalFilter(uniqueIntervals, samReader.getFileHeader());
- return new StopAfterFilteringIterator(samReader.iterator(), intervalFilter, stopAfterSequence, stopAfterPosition);
- } else {
- final SAMFileReader.QueryInterval[] queryIntervals = new SAMFileReader.QueryInterval[uniqueIntervals.size()];
- for (int i = 0; i < queryIntervals.length; ++i) {
- final Interval inputInterval = uniqueIntervals.get(i);
- queryIntervals[i] = samReader.makeQueryInterval(inputInterval.getSequence(),
- inputInterval.getStart(), inputInterval.getEnd());
- }
- return samReader.queryOverlapping(queryIntervals);
- }
- }
-
- /**
- * Halt iteration after a read is encountered that starts after the given sequence and position.
- * Note that most of this code is copied from FilteringIterator. It would be nice just to override getNextRecord,
- * but that method is called FilteringIterator ctor, so the stopAfter members can't be initialized before
- * it is called.
- * FilteringIterator ctor could take a boolean "advance" that would tell it whether or not to call getNextRecord
- * in the ctor, so that it could be delayed in the subclass. If this pattern happens again, we should do that.
- */
- private class StopAfterFilteringIterator implements CloseableIterator<SAMRecord> {
- private final int stopAfterSequence;
- private final int stopAfterPosition;
- private final Iterator<SAMRecord> iterator;
- private final SamRecordFilter filter;
- private SAMRecord next = null;
-
- private StopAfterFilteringIterator(Iterator<SAMRecord> iterator, SamRecordFilter filter,
- int stopAfterSequence, int stopAfterPosition) {
- this.stopAfterSequence = stopAfterSequence;
- this.stopAfterPosition = stopAfterPosition;
- this.iterator = iterator;
- this.filter = filter;
- next = getNextRecord();
- }
-
-
- /**
- * Returns true if the iteration has more elements.
- *
- * @return true if the iteration has more elements. Otherwise returns false.
- */
- public boolean hasNext() {
- return next != null;
- }
-
- /**
- * Returns the next element in the iteration.
- *
- * @return the next element in the iteration
- * @throws java.util.NoSuchElementException
- */
- public SAMRecord next() {
- if (next == null) {
- throw new NoSuchElementException("Iterator has no more elements.");
- }
- final SAMRecord result = next;
- next = getNextRecord();
- return result;
- }
-
- /**
- * Required method for Iterator API.
- *
- * @throws UnsupportedOperationException
- */
- public void remove() {
- throw new UnsupportedOperationException("Remove() not supported by FilteringIterator");
- }
-
- public void close() {
- CloserUtil.close(iterator);
- }
-
- protected SAMRecord getNextRecord() {
- while (iterator.hasNext()) {
- SAMRecord record = iterator.next();
- if (record.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) return null;
- else if (record.getReferenceIndex() > stopAfterSequence) return null;
- else if (record.getReferenceIndex() == stopAfterSequence && record.getAlignmentStart() > stopAfterPosition) {
- return null;
- }
- if (!filter.filterOut(record)) {
- return record;
- }
- }
- return null;
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/SolexaQualityConverter.java b/src/java/net/sf/picard/util/SolexaQualityConverter.java
deleted file mode 100644
index b0a05a2..0000000
--- a/src/java/net/sf/picard/util/SolexaQualityConverter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-/**
- * Optimized method for converting Solexa ASCII qualities into Phred scores.
- * Pre-computes all values in order to eliminate repeated computation.
- */
-public class SolexaQualityConverter {
-
- /**
- * This value is added to a Solexa quality score to make it printable ASCII
- */
- public static final int SOLEXA_ADDEND = 64;
-
- /**
- * This value is added to a Phred scord to make it printable ASCII
- */
- public static final int PHRED_ADDEND = 33;
-
- private static SolexaQualityConverter singleton = null;
-
- public static synchronized SolexaQualityConverter getSingleton() {
- if (singleton == null) {
- singleton = new SolexaQualityConverter();
- }
- return singleton;
- }
-
- /**
- * Mapping from ASCII value in Gerald export file to phred score
- */
- private final byte[] phredScore = new byte[256];
-
- private SolexaQualityConverter() {
- for (int i = 0; i < SOLEXA_ADDEND; ++i) {
- phredScore[i] = 0;
- }
- for (int i = SOLEXA_ADDEND; i < phredScore.length; ++i) {
- phredScore[i] = convertSolexaQualityCharToPhredBinary(i);
- }
- }
-
-
- /** Converts a solexa character quality into a phred numeric quality. */
- private byte convertSolexaQualityCharToPhredBinary(final int solexaQuality) {
- return (byte) Math.round(10d * Math.log10(1d+Math.pow(10d, (solexaQuality - SOLEXA_ADDEND)/10d)));
- }
-
- /**
- * Convert a solexa quality ASCII character into a phred score.
- */
- public byte solexaCharToPhredBinary(final byte solexaQuality) {
- return phredScore[solexaQuality];
- }
-
- /**
- * @return a byte array that can be indexed by Solexa ASCII quality, with value
- * of corresponding Phred score. Elements 0-63 are invalid because Solexa qualities
- * should all be >= 64. Do not modify this array!
- */
- public byte[] getSolexaToPhredConversionTable() {
- return phredScore;
- }
-
- /**
- * Decodes an array of solexa quality ASCII chars into Phred numeric space.
- * Decode in place in order to avoid extra object allocation.
- */
- public void convertSolexaQualityCharsToPhredBinary(final byte[] solexaQuals) {
- for (int i=0; i<solexaQuals.length; ++i) {
- solexaQuals[i] = phredScore[solexaQuals[i]];
- }
- }
-
- /**
- * Decodes an array of solexa quality ASCII chars into Phred ASCII space.
- * Decode in place in order to avoid extra object allocation.
- */
- public void convertSolexaQualityCharsToPhredChars(final byte[] solexaQuals) {
- for (int i=0; i<solexaQuals.length; ++i) {
- solexaQuals[i] = (byte)((phredScore[solexaQuals[i]] + PHRED_ADDEND) & 0xff);
- }
- }
-
- /**
- * Casava 1.3 stores phred-scaled qualities, but non-standard because they have 64 added to them
- * rather than the standard 33.
- * @param solexaQuals qualities are converted in place.
- */
- public void convertSolexa_1_3_QualityCharsToPhredBinary(final byte[] solexaQuals) {
- for (int i=0; i<solexaQuals.length; ++i) {
- solexaQuals[i] -= SOLEXA_ADDEND;
- }
- }
-
- public void convertSolexa_1_3_QualityCharsToPhredBinary(int offset, int length, final byte[] solexaQuals) {
- final int limit = offset + length;
- for (int i=offset; i < limit; ++i) {
- solexaQuals[i] -= SOLEXA_ADDEND;
- }
- }
-}
diff --git a/src/java/net/sf/picard/util/TabbedInputParser.java b/src/java/net/sf/picard/util/TabbedInputParser.java
deleted file mode 100644
index 4abbae4..0000000
--- a/src/java/net/sf/picard/util/TabbedInputParser.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import java.io.File;
-import java.io.InputStream;
-
-/**
- * Parser for tab-delimited files
- *
- * @author Kathleen Tibbetts
- */
-public class TabbedInputParser extends BasicInputParser {
-
- /**
- * Constructor
- *
- * @param stream The input stream(s) to parse
- */
- public TabbedInputParser(boolean treatGroupedDelimitersAsOne, InputStream... stream) {
- super(treatGroupedDelimitersAsOne, stream);
- }
-
- /**
- * Constructor
- *
- * @param file The file(s) to parse
- */
- public TabbedInputParser(boolean treatGroupedDelimitersAsOne, File... file) {
- super(treatGroupedDelimitersAsOne, file);
- }
-
- /**
- * Determines whether a given character is a delimiter
- *
- * @param b the character to evaluate
- * @return true if <code>b</code> is a delimiter; otherwise false
- */
- @Override
- protected boolean isDelimiter(final byte b) {
- return b == '\t';
- }
-}
diff --git a/src/java/net/sf/picard/util/TabbedTextFileWithHeaderParser.java b/src/java/net/sf/picard/util/TabbedTextFileWithHeaderParser.java
deleted file mode 100644
index fe5ce2a..0000000
--- a/src/java/net/sf/picard/util/TabbedTextFileWithHeaderParser.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.util.*;
-import java.util.Set;
-
-/**
- * Parse a tabbed text file in which columns are found by looking at a header line rather than by position.
- *
- * @author alecw at broadinstitute.org
- */
-public class TabbedTextFileWithHeaderParser implements Iterable<TabbedTextFileWithHeaderParser.Row> {
- public class Row {
- private final String[] fields;
- private final String currentLine;
-
- Row(final String[] fields, final String source) {
- this.fields = fields;
- this.currentLine = source;
- }
-
- /**
- * @return Array of fields in the order they appear in the file.
- */
- public String[] getFields() {
- return fields;
- }
-
- public String getField(final String columnLabel) {
- final Integer key = columnLabelIndices.get(columnLabel);
- if (key == null) throw new NoSuchElementException(String.format("column %s in %s", columnLabel, parser.getFileName()));
- return fields[key];
- }
-
- public Integer getIntegerField(final String columnLabel) {
- if (fields[columnLabelIndices.get(columnLabel)] == null) return null;
- return Integer.parseInt(fields[columnLabelIndices.get(columnLabel)]);
- }
-
- public String getCurrentLine() {
- return this.currentLine;
- }
- }
-
- class TheIterator implements CloseableIterator<Row> {
-
- @Override
- public boolean hasNext() {
- return parser.hasNext();
- }
-
- @Override
- public Row next() {
- final String[] fields = parser.next();
- final String source = parser.getCurrentLine();
- return new Row(fields, source);
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void close() {
- extantIterator = null;
- }
- }
-
- /**
- * Map from column label to positional index.
- */
- private final Map<String, Integer> columnLabelIndices = new HashMap<String, Integer>();
- private final TabbedInputParser parser;
- private TheIterator extantIterator;
-
- public TabbedTextFileWithHeaderParser(final TabbedInputParser parser) {
- this.parser = parser;
- if (!parser.hasNext()) {
- throw new PicardException("No header line found in file " + parser.getFileName());
- }
- final String[] columnLabels = parser.next();
- for (int i = 0; i < columnLabels.length; ++i) {
- columnLabelIndices.put(columnLabels[i], i);
- }
- }
-
- public TabbedTextFileWithHeaderParser(final File file) {
- this(new TabbedInputParser(false, file));
- }
-
- public TabbedTextFileWithHeaderParser(final File file, final String[] columnHeaders) {
- parser = new TabbedInputParser(false, file);
- if (!parser.hasNext()) {
- throw new PicardException("No header line found in file " + file);
- }
-
- for (int i = 0; i < columnHeaders.length; ++i) {
- columnLabelIndices.put(columnHeaders[i], i);
- }
- }
-
- /**
- * @param columnLabel
- * @return True if the given column label appears in the header.
- */
- public boolean hasColumn(final String columnLabel) {
- return columnLabelIndices.containsKey(columnLabel);
- }
-
- /**
- *
- * @return The set of column labels for this file in no particular order.
- */
- public Set<String> columnLabels() {
- return columnLabelIndices.keySet();
- }
-
- /**
- * Creates the iterator object. It is illegal to have more than one iterator extant
- * on the same parser object.
- */
- @Override
- public CloseableIterator<Row> iterator() {
- if (extantIterator != null) {
- throw new ConcurrentModificationException("Only one iterator allowed at a time.");
- }
- extantIterator = new TheIterator();
- return extantIterator;
- }
-
- /**
- * Release all resources associated with the parser. Iteration will not work after this
- * has been called.
- */
- public void close() {
- parser.close();
- }
-
- public int getCurrentLineNumber() {
- return parser.getCurrentLineNumber();
- }
-
- public Set<String> getColumnNames() {
- return Collections.unmodifiableSet(this.columnLabelIndices.keySet());
- }
-}
diff --git a/src/java/net/sf/picard/util/UnsignedTypeUtil.java b/src/java/net/sf/picard/util/UnsignedTypeUtil.java
deleted file mode 100644
index 6634e12..0000000
--- a/src/java/net/sf/picard/util/UnsignedTypeUtil.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package net.sf.picard.util;
-
-/**
- * A utility class for dealing with unsigned types. This class is primarily used for promoting a value in an unsigned type to
- * the same value in the net larger type of the same form (e.g. Integer to Long)
- */
-public class UnsignedTypeUtil {
-
- /** Convert an unsigned byte to a signed int */
- public static int uByteToInt(final byte unsignedByte) {
- return unsignedByte & 0xFF;
- }
-
- /** Convert an unsigned byte to a signed short */
- public static int uByteToShort(final byte unsignedByte) {
- return (short) unsignedByte & 0xFF;
- }
-
- /** Convert an unsigned short to an Int */
- public static int uShortToInt(final short unsignedShort) {
- return unsignedShort & 0xFFFF;
- }
-
- /** Convert an unsigned int to a long */
- public static long uIntToLong(final int unsignedInt) {
- return unsignedInt & 0xFFFFFFFFL;
- }
-}
diff --git a/src/java/net/sf/picard/util/WholeGenomeReferenceSequenceMask.java b/src/java/net/sf/picard/util/WholeGenomeReferenceSequenceMask.java
deleted file mode 100644
index ca24f06..0000000
--- a/src/java/net/sf/picard/util/WholeGenomeReferenceSequenceMask.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMSequenceRecord;
-
-/**
- * Implementation of ReferenceSequenceMask that indicates that all the loci in the sequence dictionary are of interest.
- * @author alecw at broadinstitute dot org
- */
-public class WholeGenomeReferenceSequenceMask implements ReferenceSequenceMask {
-
- SAMFileHeader header;
-
- public WholeGenomeReferenceSequenceMask(final SAMFileHeader header) {
- this.header = header;
- }
-
- /**
- * @return true if the mask is set for the given sequence and position
- */
- public boolean get(final int sequenceIndex, final int position) {
- if (sequenceIndex < 0) {
- throw new IllegalArgumentException("Negative sequence index " + sequenceIndex);
- }
- if (sequenceIndex >= header.getSequenceDictionary().size()) {
- return false;
- }
- final SAMSequenceRecord sequenceRecord = header.getSequence(sequenceIndex);
- return position <= sequenceRecord.getSequenceLength();
- }
-
- /**
- * @return the next pos on the given sequence >= position that is set, or -1 if there are no more set positions
- */
- public int nextPosition(final int sequenceIndex, final int position) {
- if (get(sequenceIndex, position + 1)) {
- return position + 1;
- } else {
- return -1;
- }
- }
-
- /**
- * @return Largest sequence index for which there are set bits.
- */
- public int getMaxSequenceIndex() {
- return header.getSequenceDictionary().size() - 1;
- }
-
- /**
- * @return the largest position on the last sequence index
- */
- public int getMaxPosition() {
- SAMSequenceRecord lastSequenceRecord = header.getSequence(getMaxSequenceIndex());
- return lastSequenceRecord.getSequenceLength();
- }
-}
diff --git a/src/java/net/sf/picard/vcf/MakeSitesOnlyVcf.java b/src/java/net/sf/picard/vcf/MakeSitesOnlyVcf.java
deleted file mode 100644
index 2f81e3b..0000000
--- a/src/java/net/sf/picard/vcf/MakeSitesOnlyVcf.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package net.sf.picard.vcf;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-import org.broadinstitute.variant.variantcontext.GenotypesContext;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.VariantContextBuilder;
-import org.broadinstitute.variant.variantcontext.writer.Options;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriter;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.broadinstitute.variant.vcf.*;
-
-import java.io.File;
-import java.util.*;
-
-/**
- * Writes out a VCF that contains all the site-level information for all records in the input VCF and no per-sample information.
- *
- * @author Tim Fennell
- */
-public class MakeSitesOnlyVcf extends CommandLineProgram {
- @Usage
- public final String usage = "Reads a VCF/VCF.gz/BCF and removes all genotype information from it while retaining " +
- "all site level information, including annotations based on genotypes (e.g. AN, AF). Output an be " +
- "any support variant format including .vcf, .vcf.gz or .bcf.";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input VCF or BCF")
- public File INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output VCF or BCF to emit without per-sample info.")
- public File OUTPUT;
-
- @Option(shortName="S", doc="Optionally one or more samples to retain when building the 'sites-only' VCF.", optional=true)
- public Set<String> SAMPLE = new TreeSet<String>();
-
- // Stock main method
- public static void main(final String[] args) {
- new MakeSitesOnlyVcf().instanceMainWithExit(args);
- }
-
- public MakeSitesOnlyVcf() {
- CREATE_INDEX = true;
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final VCFFileReader reader = new VCFFileReader(INPUT, false);
- final VCFHeader inputVcfHeader = new VCFHeader(reader.getFileHeader().getMetaDataInInputOrder());
- final SAMSequenceDictionary sequenceDictionary = inputVcfHeader.getSequenceDictionary();
-
- if (CREATE_INDEX && sequenceDictionary == null) {
- throw new PicardException("A sequence dictionary must be available (either through the input file or by setting it explicitly) when creating indexed output.");
- }
-
- final ProgressLogger progress = new ProgressLogger(Log.getInstance(MakeSitesOnlyVcf.class), 10000);
-
- // Setup the site-only file writer
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setOutputFile(OUTPUT)
- .setReferenceDictionary(sequenceDictionary);
- if (CREATE_INDEX)
- builder.setOption(Options.INDEX_ON_THE_FLY);
- else
- builder.unsetOption(Options.INDEX_ON_THE_FLY);
- final VariantContextWriter writer = builder.build();
-
- final VCFHeader header = new VCFHeader(inputVcfHeader.getMetaDataInInputOrder(), SAMPLE);
- writer.writeHeader(header);
-
- // Go through the input, strip the records and write them to the output
- final CloseableIterator<VariantContext> iterator = reader.iterator();
- while (iterator.hasNext()) {
- final VariantContext full = iterator.next();
- final VariantContext site = subsetToSamplesWithOriginalAnnotations(full, SAMPLE);
- writer.add(site);
- progress.record(site.getChr(), site.getStart());
- }
-
- CloserUtil.close(iterator);
- CloserUtil.close(reader);
- writer.close();
-
- return 0;
- }
-
- /** Makes a new VariantContext with only the desired samples. */
- private static VariantContext subsetToSamplesWithOriginalAnnotations(final VariantContext ctx, final Set<String> samples) {
- final VariantContextBuilder builder = new VariantContextBuilder(ctx);
- final GenotypesContext newGenotypes = ctx.getGenotypes().subsetToSamples(samples);
- builder.alleles(ctx.getAlleles());
- return builder.genotypes(newGenotypes).make();
- }
-}
diff --git a/src/java/net/sf/picard/vcf/MergeVcfs.java b/src/java/net/sf/picard/vcf/MergeVcfs.java
deleted file mode 100644
index 918f9f1..0000000
--- a/src/java/net/sf/picard/vcf/MergeVcfs.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.vcf;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineParser;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.MergingIterator;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.VariantContextComparator;
-import org.broadinstitute.variant.variantcontext.writer.Options;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriter;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.broadinstitute.variant.vcf.VCFFileReader;
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.broadinstitute.variant.vcf.VCFUtils;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.List;
-
-/**
- * Combines multiple VCF files into a single file. Input files must be sorted by their contigs
- * and, within contigs, by start position. Throws IllegalArgumentException if the contig lists
- * are not present in the input files, are not identical or if the sample lists are not the
- * same; this class uses the GATK to merge headers, which may throw exceptions if the headers
- * cannot be merged. See VCFUtils.smartMergeHeaders for details.
- *
- * An index file is created for the output file by default. Using an output file name with a
- * ".gz" extension will create gzip-compressed output.
- */
-public class MergeVcfs extends CommandLineProgram {
-
- @Usage
- public final String USAGE =
- CommandLineParser.getStandardUsagePreamble(getClass()) +
- "Merges multiple VCF or BCF files into one VCF file. Input files must be sorted by their contigs " +
- "and, within contigs, by start position. The input files must have the same sample and " +
- "contig lists. An index file is created and a sequence dictionary is required by default.";
-
- @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="VCF or BCF input files File format is determined by file extension.", minElements=1)
- public List<File> INPUT;
-
- @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The merged VCF or BCF file. File format is determined by file extension.")
- public File OUTPUT;
-
- @Option(shortName="D", doc="The index sequence dictionary to use instead of the sequence dictionary in the input file", optional = true)
- public File SEQUENCE_DICTIONARY;
-
- private final Log log = Log.getInstance(MergeVcfs.class);
-
- public static void main(final String[] argv) {
- new MergeVcfs().instanceMainWithExit(argv);
- }
-
- public MergeVcfs() {
- this.CREATE_INDEX = true;
- }
-
- @Override
- protected int doWork() {
- final ProgressLogger progress = new ProgressLogger(log, 10000);
- final List<String> sampleList = new ArrayList<String>();
- final Collection<CloseableIterator<VariantContext>> iteratorCollection = new ArrayList<CloseableIterator<VariantContext>>(INPUT.size());
- final Collection<VCFHeader> headers = new HashSet<VCFHeader>(INPUT.size());
-
- VariantContextComparator variantContextComparator = null;
- SAMSequenceDictionary sequenceDictionary = null;
-
- if (SEQUENCE_DICTIONARY != null) sequenceDictionary = SAMFileReader.getSequenceDictionary(SEQUENCE_DICTIONARY);
-
- for (final File file : INPUT) {
- IoUtil.assertFileIsReadable(file);
- final VCFFileReader fileReader = new VCFFileReader(file);
- final VCFHeader fileHeader = fileReader.getFileHeader();
-
- if (variantContextComparator == null) {
- variantContextComparator = fileHeader.getVCFRecordComparator();
- } else {
- if ( ! variantContextComparator.isCompatible(fileHeader.getContigLines())) {
- throw new IllegalArgumentException(
- "The contig entries in input file " + file.getAbsolutePath() + " are not compatible with the others.");
- }
- }
-
- if (sequenceDictionary == null) sequenceDictionary = fileHeader.getSequenceDictionary();
-
- if (sampleList.isEmpty()) {
- sampleList.addAll(fileHeader.getSampleNamesInOrder());
- } else {
- if ( ! sampleList.equals(fileHeader.getSampleNamesInOrder())) {
- throw new IllegalArgumentException("Input file " + file.getAbsolutePath() + " has sample entries that don't match the other files.");
- }
- }
-
- headers.add(fileHeader);
- iteratorCollection.add(fileReader.iterator());
- }
-
- if (CREATE_INDEX && sequenceDictionary == null) {
- throw new PicardException("A sequence dictionary must be available (either through the input file or by setting it explicitly) when creating indexed output.");
- }
-
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setOutputFile(OUTPUT)
- .setReferenceDictionary(sequenceDictionary)
- .clearOptions();
- if (CREATE_INDEX)
- builder.setOption(Options.INDEX_ON_THE_FLY);
- final VariantContextWriter writer = builder.build();
-
- writer.writeHeader(new VCFHeader(VCFUtils.smartMergeHeaders(headers, false), sampleList));
-
- final MergingIterator<VariantContext> mergingIterator = new MergingIterator<VariantContext>(variantContextComparator, iteratorCollection);
- while (mergingIterator.hasNext()) {
- final VariantContext context = mergingIterator.next();
- writer.add(context);
- progress.record(context.getChr(), context.getStart());
- }
-
- CloserUtil.close(mergingIterator);
- writer.close();
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/vcf/SplitVcfs.java b/src/java/net/sf/picard/vcf/SplitVcfs.java
deleted file mode 100644
index 971a7b2..0000000
--- a/src/java/net/sf/picard/vcf/SplitVcfs.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package net.sf.picard.vcf;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineParser;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.writer.Options;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriter;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.broadinstitute.variant.vcf.VCFFileReader;
-import org.broadinstitute.variant.vcf.VCFHeader;
-
-import java.io.File;
-import java.util.EnumSet;
-
-/**
- * Splits the input VCF file into two, one for indels and one for SNPs. The headers of the two output
- * files will be identical.
- *
- * An index file is created for the output file by default. Using an output file name with a ".gz"
- * extension will create gzip-compressed output.
- */
-public class SplitVcfs extends CommandLineProgram {
-
- @Usage
- public final String USAGE =
- CommandLineParser.getStandardUsagePreamble(getClass()) +
- "Splits an input VCF or BCF file into two VCF files, one for indel records and one for SNPs. The" +
- "headers of the two output files will be identical. An index file is created and a" +
- "sequence dictionary is required by default.";
-
- @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The VCF or BCF input file")
- public File INPUT;
-
- @Option(doc="The VCF or BCF file to which SNP records should be written. The file format is determined by file extension.")
- public File SNP_OUTPUT;
-
- @Option(doc="The VCF or BCF file to which indel records should be written. The file format is determined by file extension.")
- public File INDEL_OUTPUT;
-
- @Option(shortName="D", doc="The index sequence dictionary to use instead of the sequence dictionaries in the input files", optional = true)
- public File SEQUENCE_DICTIONARY;
-
- @Option(doc="If true an exception will be thrown if an event type other than SNP or indel is encountered")
- public Boolean STRICT = true;
-
- private final Log log = Log.getInstance(SplitVcfs.class);
-
- public static void main(final String[] argv) {
- new SplitVcfs().instanceMainWithExit(argv);
- }
-
- public SplitVcfs() {
- this.CREATE_INDEX = true;
- }
-
- @Override
- protected int doWork() {
- IoUtil.assertFileIsReadable(INPUT);
- final ProgressLogger progress = new ProgressLogger(log, 10000);
-
- final VCFFileReader fileReader = new VCFFileReader(INPUT);
- final VCFHeader fileHeader = fileReader.getFileHeader();
-
- final SAMSequenceDictionary sequenceDictionary =
- SEQUENCE_DICTIONARY != null
- ? SAMFileReader.getSequenceDictionary(SEQUENCE_DICTIONARY)
- : fileHeader.getSequenceDictionary();
- if (CREATE_INDEX && sequenceDictionary == null) {
- throw new PicardException("A sequence dictionary must be available (either through the input file or by setting it explicitly) when creating indexed output.");
- }
-
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(sequenceDictionary)
- .clearOptions();
- if (CREATE_INDEX)
- builder.setOption(Options.INDEX_ON_THE_FLY);
-
- final VariantContextWriter snpWriter = builder.setOutputFile(SNP_OUTPUT).build();
- final VariantContextWriter indelWriter = builder.setOutputFile(INDEL_OUTPUT).build();
- snpWriter.writeHeader(fileHeader);
- indelWriter.writeHeader(fileHeader);
-
- int incorrectVariantCount = 0;
-
- final CloseableIterator<VariantContext> iterator = fileReader.iterator();
- while (iterator.hasNext()) {
- final VariantContext context = iterator.next();
- if (context.isIndel()) indelWriter.add(context);
- else if (context.isSNP()) snpWriter.add(context);
- else {
- if (STRICT) throw new IllegalStateException("Found a record with type " + context.getType().name());
- else incorrectVariantCount++;
- }
-
- progress.record(context.getChr(), context.getStart());
- }
-
- if (incorrectVariantCount > 0) {
- log.debug("Found " + incorrectVariantCount + " records that didn't match SNP or INDEL");
- }
-
- CloserUtil.close(iterator);
- CloserUtil.close(fileReader);
- snpWriter.close();
- indelWriter.close();
-
- return 0;
- }
-}
diff --git a/src/java/net/sf/picard/vcf/VcfFormatConverter.java b/src/java/net/sf/picard/vcf/VcfFormatConverter.java
deleted file mode 100644
index fc87825..0000000
--- a/src/java/net/sf/picard/vcf/VcfFormatConverter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-* Copyright (c) 2013 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package net.sf.picard.vcf;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.cmdline.Usage;
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.Log;
-import net.sf.picard.util.ProgressLogger;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.writer.Options;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriter;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.broadinstitute.variant.vcf.VCFFileReader;
-import org.broadinstitute.variant.vcf.VCFHeader;
-
-import java.io.File;
-import java.util.EnumSet;
-
-/**
- * Converts an ASCII VCF file to a binary BCF or vice versa.
- *
- * @author jgentry at broadinstitute.org
- */
-public class VcfFormatConverter extends CommandLineProgram {
- // The following attributes define the command-line arguments
- public static final Log LOG = Log.getInstance(VcfFormatConverter.class);
-
- @Usage
- public String USAGE = getStandardUsagePreamble() +
- "Convert a VCF file to a BCF file, or BCF to VCF.\n" + "" +
- "Input and output formats are determined by file extension.";
-
- @Option(doc="The BCF or VCF input file. The file format is determined by file extension.", shortName= StandardOptionDefinitions.INPUT_SHORT_NAME)
- public File INPUT;
-
- @Option(doc="The BCF or VCF output file. The file format is determined by file extension.", shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME)
- public File OUTPUT;
-
- @Option(doc="Fail if an index is not available for the input VCF/BCF")
- public Boolean REQUIRE_INDEX = true;
-
- public static void main(final String[] argv) {
- new VcfFormatConverter().instanceMainWithExit(argv);
- }
-
- public VcfFormatConverter() {
- this.CREATE_INDEX = true;
- }
-
- @Override
- protected int doWork() {
- final ProgressLogger progress = new ProgressLogger(LOG, 10000);
-
- IoUtil.assertFileIsReadable(INPUT);
- IoUtil.assertFileIsWritable(OUTPUT);
-
- final VCFFileReader reader = new VCFFileReader(INPUT, REQUIRE_INDEX);
- final VCFHeader header = new VCFHeader(reader.getFileHeader());
- final SAMSequenceDictionary sequenceDictionary = header.getSequenceDictionary();
- if (CREATE_INDEX && sequenceDictionary == null) {
- throw new PicardException("A sequence dictionary must be available in the input file when creating indexed output.");
- }
-
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setOutputFile(OUTPUT)
- .setReferenceDictionary(sequenceDictionary);
- if (CREATE_INDEX)
- builder.setOption(Options.INDEX_ON_THE_FLY);
- else
- builder.unsetOption(Options.INDEX_ON_THE_FLY);
- final VariantContextWriter writer = builder.build();
- writer.writeHeader(header);
- final CloseableIterator<VariantContext> iterator = reader.iterator();
-
- while (iterator.hasNext()) {
- final VariantContext context = iterator.next();
- writer.add(context);
- progress.record(context.getChr(), context.getStart());
- }
-
- CloserUtil.close(iterator);
- CloserUtil.close(reader);
- writer.close();
-
- return 0;
- }
-}
diff --git a/src/java/net/sf/samtools/AbstractBAMFileIndex.java b/src/java/net/sf/samtools/AbstractBAMFileIndex.java
deleted file mode 100644
index a3a41e5..0000000
--- a/src/java/net/sf/samtools/AbstractBAMFileIndex.java
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.RuntimeIOException;
-import net.sf.samtools.seekablestream.SeekableStream;
-
-import java.io.*;
-import java.nio.channels.FileChannel;
-import java.nio.MappedByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.ByteBuffer;
-import java.util.*;
-
-/**
- * Provides basic, generic capabilities to be used reading BAM index files. Users can
- * subclass this class to create new BAM index functionality for adding querying facilities,
- * changing caching behavior, etc.
- *
- * Of particular note: the AbstractBAMFileIndex is, by design, the only class aware of the
- * details of the BAM index file format (other than the four classes representing the data,
- * BAMIndexContent, Bin, Chunk, LinearIndex, and the classes for building the BAM index).
- * Anyone wanting to implement a reader for a differing
- * or extended BAM index format should implement BAMIndex directly.
- */
-public abstract class AbstractBAMFileIndex implements BAMIndex {
-
- private final IndexFileBuffer mIndexBuffer;
-
- private SAMSequenceDictionary mBamDictionary = null;
-
- protected AbstractBAMFileIndex(
- final SeekableStream stream, final SAMSequenceDictionary dictionary)
- {
- mBamDictionary = dictionary;
- mIndexBuffer = new IndexStreamBuffer(stream);
- }
-
- protected AbstractBAMFileIndex(final File file, final SAMSequenceDictionary dictionary) {
- this(file, dictionary, true);
- }
-
- protected AbstractBAMFileIndex(final File file, final SAMSequenceDictionary dictionary, final boolean useMemoryMapping) {
- mBamDictionary = dictionary;
- mIndexBuffer = (useMemoryMapping ? new MemoryMappedFileBuffer(file) : new RandomAccessFileBuffer(file));
-
- // Verify the magic number.
- seek(0);
- final byte[] buffer = new byte[4];
- readBytes(buffer);
- if (!Arrays.equals(buffer, BAMFileConstants.BAM_INDEX_MAGIC)) {
- throw new RuntimeException("Invalid file header in BAM index " + file +
- ": " + new String(buffer));
- }
- }
-
- /**
- * Close this index and release any associated resources.
- */
- public void close() {
- mIndexBuffer.close();
- }
-
- /**
- * Get the number of levels employed by this index.
- * @return Number of levels in this index.
- */
- public static int getNumIndexLevels() {
- return GenomicIndexUtil.LEVEL_STARTS.length;
- }
-
- /**
- * Gets the first bin in the given level.
- * @param levelNumber Level number. 0-based.
- * @return The first bin in this level.
- */
- public static int getFirstBinInLevel(final int levelNumber) {
- return GenomicIndexUtil.LEVEL_STARTS[levelNumber];
- }
-
- /**
- * Gets the number of bins in the given level.
- * @param levelNumber Level number. 0-based.
- * @return The size (number of possible bins) of the given level.
- */
- public int getLevelSize(final int levelNumber) {
- if(levelNumber == getNumIndexLevels())
- return GenomicIndexUtil.MAX_BINS+1-GenomicIndexUtil.LEVEL_STARTS[levelNumber];
- else
- return GenomicIndexUtil.LEVEL_STARTS[levelNumber+1]-GenomicIndexUtil.LEVEL_STARTS[levelNumber];
- }
-
- /**
- * Gets the level associated with the given bin number.
- * @param bin The bin for which to determine the level.
- * @return the level associated with the given bin number.
- */
- public int getLevelForBin(final Bin bin) {
- if(bin.getBinNumber() >= GenomicIndexUtil.MAX_BINS)
- throw new SAMException("Tried to get level for invalid bin.");
- for(int i = getNumIndexLevels()-1; i >= 0; i--) {
- if(bin.getBinNumber() >= GenomicIndexUtil.LEVEL_STARTS[i])
- return i;
- }
- throw new SAMException("Unable to find correct bin for bin "+bin);
- }
-
- /**
- * Gets the first locus that this bin can index into.
- * @param bin The bin to test.
- * @return The last position that the given bin can represent.
- */
- public int getFirstLocusInBin(final Bin bin) {
- final int level = getLevelForBin(bin);
- final int levelStart = GenomicIndexUtil.LEVEL_STARTS[level];
- final int levelSize = ((level==getNumIndexLevels()-1) ? GenomicIndexUtil.MAX_BINS-1 : GenomicIndexUtil.LEVEL_STARTS[level+1]) - levelStart;
- return (bin.getBinNumber() - levelStart)*(GenomicIndexUtil.BIN_GENOMIC_SPAN /levelSize)+1;
- }
-
- /**
- * Gets the last locus that this bin can index into.
- * @param bin The bin to test.
- * @return The last position that the given bin can represent.
- */
- public int getLastLocusInBin(final Bin bin) {
- final int level = getLevelForBin(bin);
- final int levelStart = GenomicIndexUtil.LEVEL_STARTS[level];
- final int levelSize = ((level==getNumIndexLevels()-1) ? GenomicIndexUtil.MAX_BINS-1 : GenomicIndexUtil.LEVEL_STARTS[level+1]) - levelStart;
- return (bin.getBinNumber()-levelStart+1)*(GenomicIndexUtil.BIN_GENOMIC_SPAN /levelSize);
- }
-
- public int getNumberOfReferences() {
- seek(4);
- return readInteger();
- }
-
- /**
- * Use to get close to the unmapped reads at the end of a BAM file.
- * @return The file offset of the first record in the last linear bin, or -1
- * if there are no elements in linear bins (i.e. no mapped reads).
- */
- public long getStartOfLastLinearBin() {
- seek(4);
-
- final int sequenceCount = readInteger();
- // Because no reads may align to the last sequence in the sequence dictionary,
- // grab the last element of the linear index for each sequence, and return
- // the last one from the last sequence that has one.
- long lastLinearIndexPointer = -1;
- for (int i = 0; i < sequenceCount; i++) {
- // System.out.println("# Sequence TID: " + i);
- final int nBins = readInteger();
- // System.out.println("# nBins: " + nBins);
- for (int j1 = 0; j1 < nBins; j1++) {
- // Skip bin #
- skipBytes(4);
- final int nChunks = readInteger();
- // Skip chunks
- skipBytes(16 * nChunks);
- }
- final int nLinearBins = readInteger();
- if (nLinearBins > 0) {
- // Skip to last element of list of linear bins
- skipBytes(8 * (nLinearBins - 1));
- lastLinearIndexPointer = readLong();
- }
- }
-
- return lastLinearIndexPointer;
- }
-
- /**
- * Return meta data for the given reference including information about number of aligned, unaligned, and noCoordinate records
- *
- * @param reference the reference of interest
- * @return meta data for the reference
- */
- public BAMIndexMetaData getMetaData(final int reference) {
- seek(4);
-
- final List<Chunk> metaDataChunks = new ArrayList<Chunk>();
-
- final int sequenceCount = readInteger();
-
- if (reference >= sequenceCount) {
- return null;
- }
-
- skipToSequence(reference);
-
- final int binCount = readInteger();
- for (int binNumber = 0; binNumber < binCount; binNumber++) {
- final int indexBin = readInteger();
- final int nChunks = readInteger();
- if (indexBin == GenomicIndexUtil.MAX_BINS) {
- for (int ci = 0; ci < nChunks; ci++) {
- final long chunkBegin = readLong();
- final long chunkEnd = readLong();
- metaDataChunks.add(new Chunk(chunkBegin, chunkEnd));
- }
- } else {
- skipBytes(16 * nChunks);
- }
- }
- return new BAMIndexMetaData(metaDataChunks);
- }
-
- /**
- * Returns count of records unassociated with any reference. Call before the index file is closed
- *
- * @return meta data at the end of the bam index that indicates count of records holding no coordinates
- * or null if no meta data (old index format)
- */
- public Long getNoCoordinateCount() {
-
- seek(4);
- final int sequenceCount = readInteger();
-
- skipToSequence(sequenceCount);
- try { // in case of old index file without meta data
- return readLong();
- } catch (final Exception e) {
- return null;
- }
- }
-
- protected BAMIndexContent query(final int referenceSequence, final int startPos, final int endPos) {
- seek(4);
-
- final List<Chunk> metaDataChunks = new ArrayList<Chunk>();
-
- final int sequenceCount = readInteger();
-
- if (referenceSequence >= sequenceCount) {
- return null;
- }
-
- final BitSet regionBins = GenomicIndexUtil.regionToBins(startPos, endPos);
- if (regionBins == null) {
- return null;
- }
-
- skipToSequence(referenceSequence);
-
- final int binCount = readInteger();
- boolean metaDataSeen = false;
- final Bin[] bins = new Bin[getMaxBinNumberForReference(referenceSequence) +1];
- for (int binNumber = 0; binNumber < binCount; binNumber++) {
- final int indexBin = readInteger();
- final int nChunks = readInteger();
- final List<Chunk> chunks = new ArrayList<Chunk>(nChunks);
- // System.out.println("# bin[" + i + "] = " + indexBin + ", nChunks = " + nChunks);
- Chunk lastChunk = null;
- if (regionBins.get(indexBin)) {
- for (int ci = 0; ci < nChunks; ci++) {
- final long chunkBegin = readLong();
- final long chunkEnd = readLong();
- lastChunk = new Chunk(chunkBegin, chunkEnd);
- chunks.add(lastChunk);
- }
- } else if (indexBin == GenomicIndexUtil.MAX_BINS) {
- // meta data - build the bin so that the count of bins is correct;
- // but don't attach meta chunks to the bin, or normal queries will be off
- for (int ci = 0; ci < nChunks; ci++) {
- final long chunkBegin = readLong();
- final long chunkEnd = readLong();
- lastChunk = new Chunk(chunkBegin, chunkEnd);
- metaDataChunks.add(lastChunk);
- }
- metaDataSeen = true;
- continue; // don't create a Bin
- } else {
- skipBytes(16 * nChunks);
- }
- final Bin bin = new Bin(referenceSequence, indexBin);
- bin.setChunkList(chunks);
- bin.setLastChunk(lastChunk);
- bins[indexBin] = bin;
- }
-
- final int nLinearBins = readInteger();
-
- final int regionLinearBinStart = LinearIndex.convertToLinearIndexOffset(startPos);
- final int regionLinearBinStop = endPos > 0 ? LinearIndex.convertToLinearIndexOffset(endPos) : nLinearBins-1;
- final int actualStop = Math.min(regionLinearBinStop, nLinearBins -1);
-
- long[] linearIndexEntries = new long[0];
- if (regionLinearBinStart < nLinearBins) {
- linearIndexEntries = new long[actualStop-regionLinearBinStart+1];
- skipBytes(8 * regionLinearBinStart);
- for(int linearBin = regionLinearBinStart; linearBin <= actualStop; linearBin++)
- linearIndexEntries[linearBin-regionLinearBinStart] = readLong();
- }
-
- final LinearIndex linearIndex = new LinearIndex(referenceSequence,regionLinearBinStart,linearIndexEntries);
-
- return new BAMIndexContent(referenceSequence, bins, binCount - (metaDataSeen? 1 : 0), new BAMIndexMetaData(metaDataChunks), linearIndex);
- }
-
- /**
- * The maximum possible bin number for this reference sequence.
- * This is based on the maximum coordinate position of the reference
- * which is based on the size of the reference
- */
- private int getMaxBinNumberForReference(final int reference) {
- try {
- final int sequenceLength = mBamDictionary.getSequence(reference).getSequenceLength();
- return getMaxBinNumberForSequenceLength(sequenceLength);
- } catch (final Exception e) {
- return GenomicIndexUtil.MAX_BINS;
- }
- }
-
- /**
- * The maxiumum bin number for a reference sequence of a given length
- */
- static int getMaxBinNumberForSequenceLength(final int sequenceLength) {
- return getFirstBinInLevel(getNumIndexLevels() - 1) + (sequenceLength >> 14);
- // return 4680 + (sequenceLength >> 14); // note 4680 = getFirstBinInLevel(getNumIndexLevels() - 1)
- }
-
- abstract protected BAMIndexContent getQueryResults(int reference);
-
- /**
- * Gets the possible number of bins for a given reference sequence.
- * @return How many bins could possibly be used according to this indexing scheme to index a single contig.
- */
- protected int getMaxAddressibleGenomicLocation() {
- return GenomicIndexUtil.BIN_GENOMIC_SPAN;
- }
-
- /**
- * Get candidate bins for the specified region
- * @param startPos 1-based start of target region, inclusive.
- * @param endPos 1-based end of target region, inclusive.
- * @return bit set for each bin that may contain SAMRecords in the target region.
- */
- protected BitSet regionToBins(final int startPos, final int endPos) {
- final int maxPos = 0x1FFFFFFF;
- final int start = (startPos <= 0) ? 0 : (startPos-1) & maxPos;
- final int end = (endPos <= 0) ? maxPos : (endPos-1) & maxPos;
- if (start > end) {
- return null;
- }
- int k;
- final BitSet bitSet = new BitSet(GenomicIndexUtil.MAX_BINS);
- bitSet.set(0);
- for (k = 1 + (start>>26); k <= 1 + (end>>26); ++k) bitSet.set(k);
- for (k = 9 + (start>>23); k <= 9 + (end>>23); ++k) bitSet.set(k);
- for (k = 73 + (start>>20); k <= 73 + (end>>20); ++k) bitSet.set(k);
- for (k = 585 + (start>>17); k <= 585 + (end>>17); ++k) bitSet.set(k);
- for (k = 4681 + (start>>14); k <= 4681 + (end>>14); ++k) bitSet.set(k);
- return bitSet;
- }
-
- /**
- * @deprecated Invoke net.sf.samtools.Chunk#optimizeChunkList(java.util.List<net.sf.samtools.Chunk>, long) directly.
- */
- protected List<Chunk> optimizeChunkList(final List<Chunk> chunks, final long minimumOffset) {
- return Chunk.optimizeChunkList(chunks, minimumOffset);
- }
-
- private void skipToSequence(final int sequenceIndex) {
- for (int i = 0; i < sequenceIndex; i++) {
- // System.out.println("# Sequence TID: " + i);
- final int nBins = readInteger();
- // System.out.println("# nBins: " + nBins);
- for (int j = 0; j < nBins; j++) {
- readInteger(); // bin
- final int nChunks = readInteger();
- // System.out.println("# bin[" + j + "] = " + bin + ", nChunks = " + nChunks);
- skipBytes(16 * nChunks);
- }
- final int nLinearBins = readInteger();
- // System.out.println("# nLinearBins: " + nLinearBins);
- skipBytes(8 * nLinearBins);
- }
- }
-
- private void readBytes(final byte[] bytes) {
- mIndexBuffer.readBytes(bytes);
- }
-
- private int readInteger() {
- return mIndexBuffer.readInteger();
- }
-
- private long readLong() {
- return mIndexBuffer.readLong();
- }
-
- private void skipBytes(final int count) {
- mIndexBuffer.skipBytes(count);
- }
-
- private void seek(final int position) {
- mIndexBuffer.seek(position);
- }
-
- private abstract static class IndexFileBuffer {
- abstract void readBytes(final byte[] bytes);
- abstract int readInteger();
- abstract long readLong();
- abstract void skipBytes(final int count);
- abstract void seek(final int position);
- abstract void close();
- }
-
- /**
- * Traditional implementation of BAM index file access using memory mapped files.
- */
- private static class MemoryMappedFileBuffer extends IndexFileBuffer {
- private MappedByteBuffer mFileBuffer;
-
- MemoryMappedFileBuffer(final File file) {
- try {
- // Open the file stream.
- final FileInputStream fileStream = new FileInputStream(file);
- final FileChannel fileChannel = fileStream.getChannel();
- mFileBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0L, fileChannel.size());
- mFileBuffer.order(ByteOrder.LITTLE_ENDIAN);
- fileChannel.close();
- fileStream.close();
- } catch (final IOException exc) {
- throw new RuntimeIOException(exc.getMessage(), exc);
- }
- }
-
- void readBytes(final byte[] bytes) {
- mFileBuffer.get(bytes);
- }
-
- int readInteger() {
- return mFileBuffer.getInt();
- }
-
- long readLong() {
- return mFileBuffer.getLong();
- }
-
- void skipBytes(final int count) {
- mFileBuffer.position(mFileBuffer.position() + count);
- }
-
- void seek(final int position) {
- mFileBuffer.position(position);
- }
-
- void close() {
- mFileBuffer = null;
- }
- }
-
- /**
- * Alternative implementation of BAM index file access using regular I/O instead of memory mapping.
- *
- * This implementation can be more scalable for certain applications that need to access large numbers of BAM files.
- * Java provides no way to explicitly release a memory mapping. Instead, you need to wait for the garbage collector
- * to finalize the MappedByteBuffer. Because of this, when accessing many BAM files or when querying many BAM files
- * sequentially, you cannot easily control the physical memory footprint of the java process.
- * This can limit scalability and can have bad interactions with load management software like LSF, forcing you
- * to reserve enough physical memory for a worst case scenario.
- * The use of regular I/O allows you to trade somewhat slower performance for a small, fixed memory footprint
- * if that is more suitable for your application.
- */
- private static class RandomAccessFileBuffer extends IndexFileBuffer {
- private static final int PAGE_SIZE = 4 * 1024;
- private static final int PAGE_OFFSET_MASK = PAGE_SIZE-1;
- private static final int PAGE_MASK = ~PAGE_OFFSET_MASK;
- private static final int INVALID_PAGE = 1;
- private final File mFile;
- private RandomAccessFile mRandomAccessFile;
- private final int mFileLength;
- private int mFilePointer = 0;
- private int mCurrentPage = INVALID_PAGE;
- private final byte[] mBuffer = new byte[PAGE_SIZE];
-
- RandomAccessFileBuffer(final File file) {
- mFile = file;
- try {
- mRandomAccessFile = new RandomAccessFile(file, "r");
- final long fileLength = mRandomAccessFile.length();
- if (fileLength > Integer.MAX_VALUE) {
- throw new RuntimeException("BAM index file " + mFile + " is too large: " + fileLength);
- }
- mFileLength = (int) fileLength;
- } catch (final IOException exc) {
- throw new RuntimeIOException(exc.getMessage(), exc);
- }
- }
-
- void readBytes(final byte[] bytes) {
- int resultOffset = 0;
- int resultLength = bytes.length;
- if (mFilePointer + resultLength > mFileLength) {
- throw new RuntimeException("Attempt to read past end of BAM index file (file is truncated?): " + mFile);
- }
- while (resultLength > 0) {
- loadPage(mFilePointer);
- final int pageOffset = mFilePointer & PAGE_OFFSET_MASK;
- final int copyLength = Math.min(resultLength, PAGE_SIZE - pageOffset);
- System.arraycopy(mBuffer, pageOffset, bytes, resultOffset, copyLength);
- mFilePointer += copyLength;
- resultOffset += copyLength;
- resultLength -= copyLength;
- }
- }
-
- int readInteger() {
- // This takes advantage of the fact that integers in BAM index files are always 4-byte aligned.
- loadPage(mFilePointer);
- final int pageOffset = mFilePointer & PAGE_OFFSET_MASK;
- mFilePointer += 4;
- return((mBuffer[pageOffset + 0] & 0xFF) |
- ((mBuffer[pageOffset + 1] & 0xFF) << 8) |
- ((mBuffer[pageOffset + 2] & 0xFF) << 16) |
- ((mBuffer[pageOffset + 3] & 0xFF) << 24));
- }
-
- long readLong() {
- // BAM index files are always 4-byte aligned, but not necessrily 8-byte aligned.
- // So, rather than fooling with complex page logic we simply read the long in two 4-byte chunks.
- final long lower = readInteger();
- final long upper = readInteger();
- return ((upper << 32) | (lower & 0xFFFFFFFFL));
- }
-
- void skipBytes(final int count) {
- mFilePointer += count;
- }
-
- void seek(final int position) {
- mFilePointer = position;
- }
-
- void close() {
- mFilePointer = 0;
- mCurrentPage = INVALID_PAGE;
- if (mRandomAccessFile != null) {
- try {
- mRandomAccessFile.close();
- } catch (final IOException exc) {
- throw new RuntimeIOException(exc.getMessage(), exc);
- }
- mRandomAccessFile = null;
- }
- }
-
- private void loadPage(final int filePosition) {
- final int page = filePosition & PAGE_MASK;
- if (page == mCurrentPage) {
- return;
- }
- try {
- mRandomAccessFile.seek(page);
- final int readLength = Math.min(mFileLength - page, PAGE_SIZE);
- mRandomAccessFile.readFully(mBuffer, 0, readLength);
- mCurrentPage = page;
- } catch (final IOException exc) {
- throw new RuntimeIOException("Exception reading BAM index file " + mFile + ": " + exc.getMessage(), exc);
- }
- }
- }
-
- private static class IndexStreamBuffer extends IndexFileBuffer {
- private final SeekableStream in;
- private final ByteBuffer tmpBuf;
-
- public IndexStreamBuffer(final SeekableStream s) {
- in = s;
- tmpBuf = ByteBuffer.allocate(8); // Enough to fit a long.
- tmpBuf.order(ByteOrder.LITTLE_ENDIAN);
- }
-
- @Override public void close() {
- try { in.close(); }
- catch (final IOException e) { throw new RuntimeIOException(e); }
- }
- @Override public void readBytes(final byte[] bytes) {
- try { in.read(bytes); }
- catch (final IOException e) { throw new RuntimeIOException(e); }
- }
- @Override public void seek(final int position) {
- try { in.seek(position); }
- catch (final IOException e) { throw new RuntimeIOException(e); }
- }
-
- @Override public int readInteger() {
- try {
- final int r = in.read(tmpBuf.array(), 0, 4);
- if (r != 4)
- throw new RuntimeIOException("Expected 4 bytes, got " + r);
- } catch (final IOException e) { throw new RuntimeIOException(e); }
- return tmpBuf.getInt(0);
- }
- @Override public long readLong() {
- try {
- final int r = in.read(tmpBuf.array(), 0, 8);
- if (r != 8)
- throw new RuntimeIOException("Expected 8 bytes, got " + r);
- } catch (final IOException e) { throw new RuntimeIOException(e); }
- return tmpBuf.getLong(0);
- }
- @Override public void skipBytes(final int count) {
- try {
- for (int s = count; s > 0;) {
- final int skipped = (int)in.skip(s);
- if (skipped <= 0)
- throw new RuntimeIOException("Failed to skip " + s);
- s -= skipped;
- }
- } catch (final IOException e) { throw new RuntimeIOException(e); }
- }
- }
-}
diff --git a/src/java/net/sf/samtools/AbstractSAMHeaderRecord.java b/src/java/net/sf/samtools/AbstractSAMHeaderRecord.java
deleted file mode 100644
index 4268341..0000000
--- a/src/java/net/sf/samtools/AbstractSAMHeaderRecord.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Base class for the various concrete records in a SAM header, providing uniform
- * access to the attributes.
- */
-public abstract class AbstractSAMHeaderRecord {
- private final Map<String,String> mAttributes = new HashMap<String, String>();
-
- public String getAttribute(final String key) {
- return mAttributes.get(key);
- }
-
- /**
- * Set the given value for the attribute named 'key'. Replaces an existing value, if any.
- * If value is null, the attribute is removed.
- * Otherwise, the value will be converted to a String with toString.
- * @param key attribute name
- * @param value attribute value
- * @deprecated Use the version that takes a String value instead
- */
- public void setAttribute(final String key, final Object value) {
- setAttribute(key, value == null? null: value.toString());
- }
-
- /**
- * Set the given value for the attribute named 'key'. Replaces an existing value, if any.
- * If value is null, the attribute is removed.
- * Supported types are Character, Integer, Float and String. Byte and Short may also be
- * passed in but they will be converted to Integer.
- * @param key attribute name
- * @param value attribute value
- */
- public void setAttribute(final String key, final String value) {
- if (value == null) {
- mAttributes.remove(key);
- } else {
- mAttributes.put(key, value);
- }
- }
- /**
- * Returns the Set of attributes.
- */
- public Set<Map.Entry<String,String>> getAttributes() {
- return mAttributes.entrySet();
- }
-
-
- /**
- * Returns the ID tag (or equivalent) for this header record. The
- * default implementation throws a PicardException to indicate "not implemented".
- */
- public String getId() {
- throw new UnsupportedOperationException("Method not implemented for: " + this.getClass());
- }
-
- /**
- * For use in the equals() method of the concrete class.
- */
- protected boolean attributesEqual(final AbstractSAMHeaderRecord that) {
- return mAttributes.equals(that.mAttributes);
- }
-
- /**
- * For use in the hashCode() method of the concrete class.
- */
- protected int attributesHashCode() {
- return (mAttributes != null ? mAttributes.hashCode() : 0);
- }
-
- /**
- * Standard tags are the tags defined in SAM spec. These do not have type information in the test
- * representation, because the type information is predefined for each tag.
- * @return list of predefined tags for the concrete SAMHeader record type.
- */
- abstract Set<String> getStandardTags();
-
- /** Simple to String that outputs the concrete class name and the set of attributes stored. */
- @Override public String toString() {
- return getClass().getSimpleName() + this.mAttributes.toString();
- }
-}
diff --git a/src/java/net/sf/samtools/AlignmentBlock.java b/src/java/net/sf/samtools/AlignmentBlock.java
deleted file mode 100644
index ef928c7..0000000
--- a/src/java/net/sf/samtools/AlignmentBlock.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Represents the contiguous alignment of a subset of read bases to a reference
- * sequence. Simply put an alignment block tells you that read bases from
- * readStart are aligned to the reference (matching or mismatching) from
- * referenceStart for length bases.
- *
- * @author Tim Fennell
- */
-public class AlignmentBlock {
- private int readStart;
- private int referenceStart;
- private int length;
-
- /** Constructs a new alignment block with the supplied read and ref starts and length. */
- AlignmentBlock(int readStart, int referenceStart, int length) {
- this.readStart = readStart;
- this.referenceStart = referenceStart;
- this.length = length;
- }
-
- /** The first, 1-based, base in the read that is aligned to the reference reference. */
- public int getReadStart() { return readStart; }
-
- /** The first, 1-based, position in the reference to which the read is aligned. */
- public int getReferenceStart() { return referenceStart; }
-
- /** The number of contiguous bases aligned to the reference. */
- public int getLength() { return length; }
-}
diff --git a/src/java/net/sf/samtools/AsyncSAMFileWriter.java b/src/java/net/sf/samtools/AsyncSAMFileWriter.java
deleted file mode 100644
index 5543c83..0000000
--- a/src/java/net/sf/samtools/AsyncSAMFileWriter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package net.sf.samtools;
-
-import net.sf.samtools.util.AbstractAsyncWriter;
-import net.sf.samtools.util.ProgressLoggerInterface;
-
-/**
- * SAMFileWriter that can be wrapped around an underlying SAMFileWriter to provide asynchronous output. Records
- * added are placed into a queue, the queue is then drained into the underlying SAMFileWriter by a thread owned
- * by the instance.
- *
- * Exceptions experienced by the writer thread will be emitted back to the caller in subsequent calls to either
- * addAlignment() or close().
- *
- * @author Tim Fennell
- */
-class AsyncSAMFileWriter extends AbstractAsyncWriter<SAMRecord> implements SAMFileWriter {
-
- private final SAMFileWriter underlyingWriter;
-
- /**
- * Creates a new AsyncSAMFileWriter wrapping the provided SAMFileWriter.
- */
- public AsyncSAMFileWriter(final SAMFileWriter out) {
- this(out, DEFAULT_QUEUE_SIZE);
- }
-
- /**
- * Creates an AsyncSAMFileWriter wrapping the provided SAMFileWriter and using the specified
- * queue size for buffer SAMRecords.
- */
- public AsyncSAMFileWriter(final SAMFileWriter out, final int queueSize) {
- super(queueSize);
- this.underlyingWriter = out;
- }
-
- @Override protected void synchronouslyWrite(final SAMRecord item) { this.underlyingWriter.addAlignment(item); }
-
- @Override protected void synchronouslyClose() { this.underlyingWriter.close(); }
-
- @Override protected final String getThreadNamePrefix() { return "SAMFileWriterThread-"; }
-
- @Override
- public void setProgressLogger(final ProgressLoggerInterface progress) {
- this.underlyingWriter.setProgressLogger(progress);
- }
-
- /**
- * Adds an alignment to the queue to be written. Will re-throw any exception that was received when
- * writing prior record(s) to the underlying SAMFileWriter.
- */
- public void addAlignment(final SAMRecord alignment) {
- write(alignment);
- }
-
- /** Returns the SAMFileHeader from the underlying SAMFileWriter. */
- public SAMFileHeader getFileHeader() {
- return this.underlyingWriter.getFileHeader();
- }
-}
diff --git a/src/java/net/sf/samtools/BAMFileConstants.java b/src/java/net/sf/samtools/BAMFileConstants.java
deleted file mode 100644
index c51fcd5..0000000
--- a/src/java/net/sf/samtools/BAMFileConstants.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Constants used in reading & writing BAM files
- */
-class BAMFileConstants {
- /**
- * The beginning of a BAMRecord is a fixed-size block of 8 int32s
- */
- static final int FIXED_BLOCK_SIZE = 8 * 4;
-
- /**
- * BAM file magic number. This is what is present in the gunzipped version of the file,
- * which never exists on disk.
- */
-
- static final byte[] BAM_MAGIC = "BAM\1".getBytes();
- /**
- * BAM index file magic number.
- */
- static final byte[] BAM_INDEX_MAGIC = "BAI\1".getBytes();
-}
diff --git a/src/java/net/sf/samtools/BAMFileReader.java b/src/java/net/sf/samtools/BAMFileReader.java
deleted file mode 100644
index fe14aaa..0000000
--- a/src/java/net/sf/samtools/BAMFileReader.java
+++ /dev/null
@@ -1,987 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import net.sf.samtools.SAMFileReader.ValidationStringency;
-import net.sf.samtools.seekablestream.SeekableStream;
-import net.sf.samtools.util.*;
-
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-/**
- * Class for reading and querying BAM files.
- */
-class BAMFileReader extends SAMFileReader.ReaderImplementation {
- // True if reading from a File rather than an InputStream
- private boolean mIsSeekable = false;
-
- // For converting bytes into other primitive types
- private BinaryCodec mStream = null;
-
- // Underlying compressed data stream.
- private final BlockCompressedInputStream mCompressedInputStream;
- private SAMFileHeader mFileHeader = null;
-
- // One of these is populated if the file is seekable and an index exists
- private File mIndexFile = null;
- private SeekableStream mIndexStream = null;
-
- private BAMIndex mIndex = null;
- private long mFirstRecordPointer = 0;
- // If non-null, there is an unclosed iterator extant.
- private CloseableIterator<SAMRecord> mCurrentIterator = null;
-
- // If true, all SAMRecords are fully decoded as they are read.
- private final boolean eagerDecode;
-
- // For error-checking.
- private ValidationStringency mValidationStringency;
-
- // For creating BAMRecords
- private SAMRecordFactory samRecordFactory;
-
- /**
- * Use the caching index reader implementation rather than the disk-hit-per-file model.
- */
- private boolean mEnableIndexCaching = false;
-
- /**
- * Use the traditional memory-mapped implementation for BAM file indexes rather than regular I/O.
- */
- private boolean mEnableIndexMemoryMapping = true;
-
- /**
- * Add information about the origin (reader and position) to SAM records.
- */
- private SAMFileReader mFileReader = null;
-
- /**
- * Prepare to read BAM from a stream (not seekable)
- * @param stream source of bytes.
- * @param eagerDecode if true, decode all BAM fields as reading rather than lazily.
- * @param validationStringency Controls how to handle invalidate reads or header lines.
- */
- BAMFileReader(final InputStream stream,
- final File indexFile,
- final boolean eagerDecode,
- final ValidationStringency validationStringency,
- final SAMRecordFactory factory)
- throws IOException {
- mIndexFile = indexFile;
- mIsSeekable = false;
- mCompressedInputStream = new BlockCompressedInputStream(stream);
- mStream = new BinaryCodec(new DataInputStream(mCompressedInputStream));
- this.eagerDecode = eagerDecode;
- this.mValidationStringency = validationStringency;
- this.samRecordFactory = factory;
- this.mFileHeader = readHeader(this.mStream, this.mValidationStringency, null);
- }
-
- /**
- * Prepare to read BAM from a file (seekable)
- * @param file source of bytes.
- * @param eagerDecode if true, decode all BAM fields as reading rather than lazily.
- * @param validationStringency Controls how to handle invalidate reads or header lines.
- */
- BAMFileReader(final File file,
- final File indexFile,
- final boolean eagerDecode,
- final ValidationStringency validationStringency,
- final SAMRecordFactory factory)
- throws IOException {
- this(new BlockCompressedInputStream(file), indexFile!=null ? indexFile : findIndexFile(file), eagerDecode, file.getAbsolutePath(), validationStringency, factory);
- if (mIndexFile != null && mIndexFile.lastModified() < file.lastModified()) {
- System.err.println("WARNING: BAM index file " + mIndexFile.getAbsolutePath() +
- " is older than BAM " + file.getAbsolutePath());
- }
- // Provide better error message when there is an error reading.
- mStream.setInputFileName(file.getAbsolutePath());
- }
-
- BAMFileReader(final SeekableStream strm,
- final File indexFile,
- final boolean eagerDecode,
- final ValidationStringency validationStringency,
- final SAMRecordFactory factory)
- throws IOException {
- this(new BlockCompressedInputStream(strm), indexFile, eagerDecode, strm.getSource(), validationStringency, factory);
- }
-
- BAMFileReader(final SeekableStream strm,
- final SeekableStream indexStream,
- final boolean eagerDecode,
- final ValidationStringency validationStringency,
- final SAMRecordFactory factory)
- throws IOException {
- this(new BlockCompressedInputStream(strm), indexStream, eagerDecode, strm.getSource(), validationStringency, factory);
- }
-
- private BAMFileReader(final BlockCompressedInputStream compressedInputStream,
- final File indexFile,
- final boolean eagerDecode,
- final String source,
- final ValidationStringency validationStringency,
- final SAMRecordFactory factory)
- throws IOException {
- mIndexFile = indexFile;
- mIsSeekable = true;
- mCompressedInputStream = compressedInputStream;
- mStream = new BinaryCodec(new DataInputStream(mCompressedInputStream));
- this.eagerDecode = eagerDecode;
- this.mValidationStringency = validationStringency;
- this.samRecordFactory = factory;
- this.mFileHeader = readHeader(this.mStream, this.mValidationStringency, source);
- mFirstRecordPointer = mCompressedInputStream.getFilePointer();
- }
-
- private BAMFileReader(final BlockCompressedInputStream compressedInputStream,
- final SeekableStream indexStream,
- final boolean eagerDecode,
- final String source,
- final ValidationStringency validationStringency,
- final SAMRecordFactory factory)
- throws IOException {
- mIndexStream = indexStream;
- mIsSeekable = true;
- mCompressedInputStream = compressedInputStream;
- mStream = new BinaryCodec(new DataInputStream(mCompressedInputStream));
- this.eagerDecode = eagerDecode;
- this.mValidationStringency = validationStringency;
- this.samRecordFactory = factory;
- this.mFileHeader = readHeader(this.mStream, this.mValidationStringency, source);
- mFirstRecordPointer = mCompressedInputStream.getFilePointer();
- }
-
- /** Reads through the header and sequence records to find the virtual file offset of the first record in the BAM file. */
- static long findVirtualOffsetOfFirstRecord(final File bam) throws IOException {
- final BAMFileReader reader = new BAMFileReader(bam, null, false, ValidationStringency.SILENT, new DefaultSAMRecordFactory());
- final long offset = reader.mFirstRecordPointer;
- reader.close();
- return offset;
- }
-
- /**
- * If true, writes the source of every read into the source SAMRecords.
- * @param enabled true to write source information into each SAMRecord.
- */
- void enableFileSource(final SAMFileReader reader, final boolean enabled) {
- this.mFileReader = enabled ? reader : null;
- }
-
- /**
- * If true, uses the caching version of the index reader.
- * @param enabled true to write source information into each SAMRecord.
- */
- protected void enableIndexCaching(final boolean enabled) {
- if(mIndex != null)
- throw new SAMException("Unable to turn on index caching; index file has already been loaded.");
- this.mEnableIndexCaching = enabled;
- }
-
- /**
- * If false, disable the use of memory mapping for accessing index files (default behavior is to use memory mapping).
- * This is slower but more scalable when accessing large numbers of BAM files sequentially.
- * @param enabled True to use memory mapping, false to use regular I/O.
- */
- protected void enableIndexMemoryMapping(final boolean enabled) {
- if (mIndex != null) {
- throw new SAMException("Unable to change index memory mapping; index file has already been loaded.");
- }
- this.mEnableIndexMemoryMapping = enabled;
- }
-
- @Override void enableCrcChecking(final boolean enabled) {
- this.mCompressedInputStream.setCheckCrcs(enabled);
- }
-
- @Override void setSAMRecordFactory(final SAMRecordFactory factory) { this.samRecordFactory = factory; }
-
- /**
- * @return true if ths is a BAM file, and has an index
- */
- protected boolean hasIndex() {
- return (mIndexFile != null) || (mIndexStream != null);
- }
-
- /**
- * Retrieves the index for the given file type. Ensure that the index is of the specified type.
- * @return An index of the given type.
- */
- protected BAMIndex getIndex() {
- if(!hasIndex())
- throw new SAMException("No index is available for this BAM file.");
- if(mIndex == null) {
- if (mIndexFile != null)
- mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(mIndexFile, getFileHeader().getSequenceDictionary(), mEnableIndexMemoryMapping)
- : new DiskBasedBAMFileIndex(mIndexFile, getFileHeader().getSequenceDictionary(), mEnableIndexMemoryMapping);
- else
- mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(mIndexStream, getFileHeader().getSequenceDictionary())
- : new DiskBasedBAMFileIndex(mIndexStream, getFileHeader().getSequenceDictionary());
- }
- return mIndex;
- }
-
- void close() {
- if (mStream != null) {
- mStream.close();
- }
- if (mIndex != null) {
- mIndex.close();
- }
- mStream = null;
- mFileHeader = null;
- mIndex = null;
- }
-
- SAMFileHeader getFileHeader() {
- return mFileHeader;
- }
-
- /**
- * Set error-checking level for subsequent SAMRecord reads.
- */
- void setValidationStringency(final SAMFileReader.ValidationStringency validationStringency) {
- this.mValidationStringency = validationStringency;
- }
-
- SAMFileReader.ValidationStringency getValidationStringency() {
- return this.mValidationStringency;
- }
-
- /**
- * Prepare to iterate through the SAMRecords in file order.
- * Only a single iterator on a BAM file can be extant at a time. If getIterator() or a query method has been called once,
- * that iterator must be closed before getIterator() can be called again.
- * A somewhat peculiar aspect of this method is that if the file is not seekable, a second call to
- * getIterator() begins its iteration where the last one left off. That is the best that can be
- * done in that situation.
- */
- CloseableIterator<SAMRecord> getIterator() {
- if (mStream == null) {
- throw new IllegalStateException("File reader is closed");
- }
- if (mCurrentIterator != null) {
- throw new IllegalStateException("Iteration in progress");
- }
- if (mIsSeekable) {
- try {
- mCompressedInputStream.seek(mFirstRecordPointer);
- } catch (final IOException exc) {
- throw new RuntimeException(exc.getMessage(), exc);
- }
- }
- mCurrentIterator = new BAMFileIterator();
- return mCurrentIterator;
- }
-
- @Override
- CloseableIterator<SAMRecord> getIterator(final SAMFileSpan chunks) {
- if (mStream == null) {
- throw new IllegalStateException("File reader is closed");
- }
- if (mCurrentIterator != null) {
- throw new IllegalStateException("Iteration in progress");
- }
- if (!(chunks instanceof BAMFileSpan)) {
- throw new IllegalStateException("BAMFileReader cannot handle this type of file span.");
- }
-
- // Create an iterator over the given chunk boundaries.
- mCurrentIterator = new BAMFileIndexIterator(((BAMFileSpan)chunks).toCoordinateArray());
- return mCurrentIterator;
- }
-
- /**
- * Gets an unbounded pointer to the first record in the BAM file. Because the reader doesn't necessarily know
- * when the file ends, the rightmost bound of the file pointer will not end exactly where the file ends. However,
- * the rightmost bound is guaranteed to be after the last read in the file.
- * @return An unbounded pointer to the first record in the BAM file.
- */
- @Override
- SAMFileSpan getFilePointerSpanningReads() {
- return new BAMFileSpan(new Chunk(mFirstRecordPointer,Long.MAX_VALUE));
- }
-
- /**
- * Prepare to iterate through the SAMRecords that match the given interval.
- * Only a single iterator on a BAMFile can be extant at a time. The previous one must be closed
- * before calling any of the methods that return an iterator.
- *
- * Note that an unmapped SAMRecord may still have a reference name and an alignment start for sorting
- * purposes (typically this is the coordinate of its mate), and will be found by this method if the coordinate
- * matches the specified interval.
- *
- * Note that this method is not necessarily efficient in terms of disk I/O. The index does not have perfect
- * resolution, so some SAMRecords may be read and then discarded because they do not match the specified interval.
- *
- * @param sequence Reference sequence sought.
- * @param start Desired SAMRecords must overlap or be contained in the interval specified by start and end.
- * A value of zero implies the start of the reference sequence.
- * @param end A value of zero implies the end of the reference sequence.
- * @param contained If true, the alignments for the SAMRecords must be completely contained in the interval
- * specified by start and end. If false, the SAMRecords need only overlap the interval.
- * @return Iterator for the matching SAMRecords
- */
- CloseableIterator<SAMRecord> query(final String sequence, final int start, final int end, final boolean contained) {
- if (mStream == null) {
- throw new IllegalStateException("File reader is closed");
- }
- if (mCurrentIterator != null) {
- throw new IllegalStateException("Iteration in progress");
- }
- if (!mIsSeekable) {
- throw new UnsupportedOperationException("Cannot query stream-based BAM file");
- }
- final int referenceIndex = mFileHeader.getSequenceIndex(sequence);
- if (referenceIndex == -1) {
- mCurrentIterator = new EmptyBamIterator();
- } else {
- final SAMFileReader.QueryInterval[] queryIntervals = {new SAMFileReader.QueryInterval(referenceIndex, start, end)};
- mCurrentIterator = createIndexIterator(queryIntervals, contained);
- }
- return mCurrentIterator;
- }
-
- /**
- * Prepare to iterate through the SAMRecords that match any of the given intervals.
- * Only a single iterator on a BAMFile can be extant at a time. The previous one must be closed
- * before calling any of the methods that return an iterator.
- *
- * Note that an unmapped SAMRecord may still have a reference name and an alignment start for sorting
- * purposes (typically this is the coordinate of its mate), and will be found by this method if the coordinate
- * matches the specified interval.
- *
- * Note that this method is not necessarily efficient in terms of disk I/O. The index does not have perfect
- * resolution, so some SAMRecords may be read and then discarded because they do not match the specified interval.
- *
- * @param intervals list of intervals to be queried. Must be optimized.
- * @param contained If true, the alignments for the SAMRecords must be completely contained in the interval
- * specified by start and end. If false, the SAMRecords need only overlap the interval.
- * @return Iterator for the matching SAMRecords
- * @see net.sf.samtools.SAMFileReader.QueryInterval#optimizeIntervals(net.sf.samtools.SAMFileReader.QueryInterval[])
- */
- CloseableIterator<SAMRecord> query(final SAMFileReader.QueryInterval[] intervals, final boolean contained) {
- if (mStream == null) {
- throw new IllegalStateException("File reader is closed");
- }
- if (mCurrentIterator != null) {
- throw new IllegalStateException("Iteration in progress");
- }
- if (!mIsSeekable) {
- throw new UnsupportedOperationException("Cannot query stream-based BAM file");
- }
- mCurrentIterator = createIndexIterator(intervals, contained);
- return mCurrentIterator;
- }
-
- /**
- * Prepare to iterate through the SAMRecords with the given alignment start.
- * Only a single iterator on a BAMFile can be extant at a time. The previous one must be closed
- * before calling any of the methods that return an iterator.
- *
- * Note that an unmapped SAMRecord may still have a reference name and an alignment start for sorting
- * purposes (typically this is the coordinate of its mate), and will be found by this method if the coordinate
- * matches the specified interval.
- *
- * Note that this method is not necessarily efficient in terms of disk I/O. The index does not have perfect
- * resolution, so some SAMRecords may be read and then discarded because they do not match the specified interval.
- *
- * @param sequence Reference sequence sought.
- * @param start Alignment start sought.
- * @return Iterator for the matching SAMRecords.
- */
- CloseableIterator<SAMRecord> queryAlignmentStart(final String sequence, final int start) {
- if (mStream == null) {
- throw new IllegalStateException("File reader is closed");
- }
- if (mCurrentIterator != null) {
- throw new IllegalStateException("Iteration in progress");
- }
- if (!mIsSeekable) {
- throw new UnsupportedOperationException("Cannot query stream-based BAM file");
- }
- final int referenceIndex = mFileHeader.getSequenceIndex(sequence);
- if (referenceIndex == -1) {
- mCurrentIterator = new EmptyBamIterator();
- } else {
- mCurrentIterator = createStartingAtIndexIterator(referenceIndex, start);
- }
- return mCurrentIterator;
- }
-
- /**
- * Prepare to iterate through the SAMRecords that are unmapped and do not have a reference name or alignment start.
- * Only a single iterator on a BAMFile can be extant at a time. The previous one must be closed
- * before calling any of the methods that return an iterator.
- *
- * @return Iterator for the matching SAMRecords.
- */
- public CloseableIterator<SAMRecord> queryUnmapped() {
- if (mStream == null) {
- throw new IllegalStateException("File reader is closed");
- }
- if (mCurrentIterator != null) {
- throw new IllegalStateException("Iteration in progress");
- }
- if (!mIsSeekable) {
- throw new UnsupportedOperationException("Cannot query stream-based BAM file");
- }
- try {
- final long startOfLastLinearBin = getIndex().getStartOfLastLinearBin();
- if (startOfLastLinearBin != -1) {
- mCompressedInputStream.seek(startOfLastLinearBin);
- } else {
- // No mapped reads in file, just start at the first read in file.
- mCompressedInputStream.seek(mFirstRecordPointer);
- }
- mCurrentIterator = new BAMFileIndexUnmappedIterator();
- return mCurrentIterator;
- } catch (final IOException e) {
- throw new RuntimeException("IOException seeking to unmapped reads", e);
- }
- }
-
- /**
- * Reads the header of a BAM file from a stream
- * @param stream A BinaryCodec to read the header from
- * @param validationStringency Determines how stringent to be when validating the sam
- * @param source Note that this is used only for reporting errors.
- */
- protected static SAMFileHeader readHeader(final BinaryCodec stream, final ValidationStringency validationStringency, final String source)
- throws IOException {
-
- final byte[] buffer = new byte[4];
- stream.readBytes(buffer);
- if (!Arrays.equals(buffer, BAMFileConstants.BAM_MAGIC)) {
- throw new IOException("Invalid BAM file header");
- }
-
- final int headerTextLength = stream.readInt();
- final String textHeader = stream.readString(headerTextLength);
- final SAMTextHeaderCodec headerCodec = new SAMTextHeaderCodec();
- headerCodec.setValidationStringency(validationStringency);
- final SAMFileHeader samFileHeader = headerCodec.decode(new StringLineReader(textHeader),
- source);
-
- final int sequenceCount = stream.readInt();
- if (samFileHeader.getSequenceDictionary().size() > 0) {
- // It is allowed to have binary sequences but no text sequences, so only validate if both are present
- if (sequenceCount != samFileHeader.getSequenceDictionary().size()) {
- throw new SAMFormatException("Number of sequences in text header (" +
- samFileHeader.getSequenceDictionary().size() +
- ") != number of sequences in binary header (" + sequenceCount + ") for file " + source);
- }
- for (int i = 0; i < sequenceCount; i++) {
- final SAMSequenceRecord binarySequenceRecord = readSequenceRecord(stream, source);
- final SAMSequenceRecord sequenceRecord = samFileHeader.getSequence(i);
- if (!sequenceRecord.getSequenceName().equals(binarySequenceRecord.getSequenceName())) {
- throw new SAMFormatException("For sequence " + i + ", text and binary have different names in file " +
- source);
- }
- if (sequenceRecord.getSequenceLength() != binarySequenceRecord.getSequenceLength()) {
- throw new SAMFormatException("For sequence " + i + ", text and binary have different lengths in file " +
- source);
- }
- }
- } else {
- // If only binary sequences are present, copy them into samFileHeader
- final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>(sequenceCount);
- for (int i = 0; i < sequenceCount; i++) {
- sequences.add(readSequenceRecord(stream, source));
- }
- samFileHeader.setSequenceDictionary(new SAMSequenceDictionary(sequences));
- }
-
- return samFileHeader;
- }
-
- /**
- * Reads a single binary sequence record from the file or stream
- * @param source Note that this is used only for reporting errors.
- */
- private static SAMSequenceRecord readSequenceRecord(final BinaryCodec stream, final String source) {
- final int nameLength = stream.readInt();
- if (nameLength <= 1) {
- throw new SAMFormatException("Invalid BAM file header: missing sequence name in file " + source);
- }
- final String sequenceName = stream.readString(nameLength - 1);
- // Skip the null terminator
- stream.readByte();
- final int sequenceLength = stream.readInt();
- return new SAMSequenceRecord(SAMSequenceRecord.truncateSequenceName(sequenceName), sequenceLength);
- }
-
- /**
- * Encapsulates the restriction that only one iterator may be open at a time.
- */
- private abstract class AbstractBamIterator implements CloseableIterator<SAMRecord> {
-
- private boolean isClosed = false;
-
- public void close() {
- if (!isClosed) {
- if (mCurrentIterator != null && this != mCurrentIterator) {
- throw new IllegalStateException("Attempt to close non-current iterator");
- }
- mCurrentIterator = null;
- isClosed = true;
- }
- }
-
- protected void assertOpen() {
- if (isClosed) throw new AssertionError("Iterator has been closed");
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Not supported: remove");
- }
-
- }
-
- private class EmptyBamIterator extends AbstractBamIterator {
- @Override
- public boolean hasNext() {
- return false;
- }
-
- @Override
- public SAMRecord next() {
- throw new NoSuchElementException("next called on empty iterator");
- }
- }
-
- /**
-
- /**
- * Iterator for non-indexed sequential iteration through all SAMRecords in file.
- * Starting point of iteration is wherever current file position is when the iterator is constructed.
- */
- private class BAMFileIterator extends AbstractBamIterator {
- private SAMRecord mNextRecord = null;
- private final BAMRecordCodec bamRecordCodec;
- private long samRecordIndex = 0; // Records at what position (counted in records) we are at in the file
-
- BAMFileIterator() {
- this(true);
- }
-
- /**
- * @param advance Trick to enable subclass to do more setup before advancing
- */
- BAMFileIterator(final boolean advance) {
- this.bamRecordCodec = new BAMRecordCodec(getFileHeader(), samRecordFactory);
- this.bamRecordCodec.setInputStream(BAMFileReader.this.mStream.getInputStream(),
- BAMFileReader.this.mStream.getInputFileName());
-
- if (advance) {
- advance();
- }
- }
-
- public boolean hasNext() {
- assertOpen();
- return (mNextRecord != null);
- }
-
- public SAMRecord next() {
- assertOpen();
- final SAMRecord result = mNextRecord;
- advance();
- return result;
- }
-
- void advance() {
- try {
- mNextRecord = getNextRecord();
-
- if (mNextRecord != null) {
- ++this.samRecordIndex;
- // Because some decoding is done lazily, the record needs to remember the validation stringency.
- mNextRecord.setValidationStringency(mValidationStringency);
-
- if (mValidationStringency != ValidationStringency.SILENT) {
- final List<SAMValidationError> validationErrors = mNextRecord.isValid();
- SAMUtils.processValidationErrors(validationErrors,
- this.samRecordIndex, BAMFileReader.this.getValidationStringency());
- }
- }
- if (eagerDecode && mNextRecord != null) {
- mNextRecord.eagerDecode();
- }
- } catch (final IOException exc) {
- throw new RuntimeException(exc.getMessage(), exc);
- }
- }
-
- /**
- * Read the next record from the input stream.
- */
- SAMRecord getNextRecord() throws IOException {
- final long startCoordinate = mCompressedInputStream.getFilePointer();
- final SAMRecord next = bamRecordCodec.decode();
- final long stopCoordinate = mCompressedInputStream.getFilePointer();
-
- if(mFileReader != null && next != null)
- next.setFileSource(new SAMFileSource(mFileReader,new BAMFileSpan(new Chunk(startCoordinate,stopCoordinate))));
-
- return next;
- }
-
- /**
- * @return The record that will be return by the next call to next()
- */
- protected SAMRecord peek() {
- return mNextRecord;
- }
- }
-
- /**
- * Prepare to iterate through SAMRecords in the given reference that start exactly at the given start coordinate.
- * @param referenceIndex Desired reference sequence.
- * @param start 1-based alignment start.
- */
- private CloseableIterator<SAMRecord> createStartingAtIndexIterator(final int referenceIndex,
- final int start) {
-
- // Hit the index to determine the chunk boundaries for the required data.
- final BAMIndex fileIndex = getIndex();
- final BAMFileSpan fileSpan = fileIndex.getSpanOverlapping(referenceIndex, start, 0);
- final long[] filePointers = fileSpan != null ? fileSpan.toCoordinateArray() : null;
-
- // Create an iterator over the above chunk boundaries.
- final BAMFileIndexIterator iterator = new BAMFileIndexIterator(filePointers);
-
- // Add some preprocessing filters for edge-case reads that don't fit into this
- // query type.
- return new BAMQueryFilteringIterator(iterator,new BAMStartingAtIteratorFilter(referenceIndex,start));
- }
-
- /**
- * @throws java.lang.IllegalArgumentException if the intervals are not optimized
- * @see net.sf.samtools.SAMFileReader.QueryInterval#optimizeIntervals(net.sf.samtools.SAMFileReader.QueryInterval[])
- */
- private void assertIntervalsOptimized(final SAMFileReader.QueryInterval[] intervals) {
- if (intervals.length == 0) return;
- for (int i = 1; i < intervals.length; ++i) {
- final SAMFileReader.QueryInterval prev = intervals[i-1];
- final SAMFileReader.QueryInterval thisInterval = intervals[i];
- if (prev.compareTo(thisInterval) >= 0) {
- throw new IllegalArgumentException(String.format("List of intervals is not sorted: %s >= %s", prev, thisInterval));
- }
- if (prev.overlaps(thisInterval)) {
- throw new IllegalArgumentException(String.format("List of intervals is not optimized: %s intersects %s", prev, thisInterval));
- }
- if (prev.abuts(thisInterval)) {
- throw new IllegalArgumentException(String.format("List of intervals is not optimized: %s abuts %s", prev, thisInterval));
- }
- }
- }
-
- private CloseableIterator<SAMRecord> createIndexIterator(final SAMFileReader.QueryInterval[] intervals,
- final boolean contained) {
-
- assertIntervalsOptimized(intervals);
-
- // Hit the index to determine the chunk boundaries for the required data.
- final BAMFileSpan[] inputSpans = new BAMFileSpan[intervals.length];
- final BAMIndex fileIndex = getIndex();
- for (int i = 0; i < intervals.length; ++i) {
- final SAMFileReader.QueryInterval interval = intervals[i];
- final BAMFileSpan span = fileIndex.getSpanOverlapping(interval.referenceIndex, interval.start, interval.end);
- inputSpans[i] = span;
- }
- final long[] filePointers;
- if (inputSpans.length > 0) {
- filePointers = BAMFileSpan.merge(inputSpans).toCoordinateArray();
- } else {
- filePointers = null;
- }
-
- // Create an iterator over the above chunk boundaries.
- final BAMFileIndexIterator iterator = new BAMFileIndexIterator(filePointers);
-
- // Add some preprocessing filters for edge-case reads that don't fit into this
- // query type.
- return new BAMQueryFilteringIterator(iterator, new BAMQueryMultipleIntervalsIteratorFilter(intervals, contained));
- }
-
-
-
-
- /**
- * Look for BAM index file according to standard naming convention.
- *
- * @param dataFile BAM file name.
- * @return Index file name, or null if not found.
- */
- private static File findIndexFile(final File dataFile) {
- // If input is foo.bam, look for foo.bai
- File indexFile;
- final String fileName = dataFile.getName();
- if (fileName.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION)) {
- final String bai = fileName.substring(0, fileName.length() - BamFileIoUtils.BAM_FILE_EXTENSION.length()) + BAMIndex.BAMIndexSuffix;
- indexFile = new File(dataFile.getParent(), bai);
- if (indexFile.exists()) {
- return indexFile;
- }
- }
-
- // If foo.bai doesn't exist look for foo.bam.bai
- indexFile = new File(dataFile.getParent(), dataFile.getName() + BAMIndex.BAMIndexSuffix);
- if (indexFile.exists()) {
- return indexFile;
- } else {
- return null;
- }
- }
-
- /**
- * Iterate over the SAMRecords defined by the sections of the file described in the ctor argument.
- */
- private class BAMFileIndexIterator extends BAMFileIterator {
-
- private long[] mFilePointers = null;
- private int mFilePointerIndex = 0;
- private long mFilePointerLimit = -1;
-
- /**
- * Prepare to iterate through SAMRecords stored in the specified compressed blocks at the given offset.
- * @param filePointers the block / offset combination, stored in chunk format.
- */
- BAMFileIndexIterator(final long[] filePointers) {
- super(false); // delay advance() until after construction
- mFilePointers = filePointers;
- advance();
- }
-
- SAMRecord getNextRecord()
- throws IOException {
- // Advance to next file block if necessary
- while (mCompressedInputStream.getFilePointer() >= mFilePointerLimit) {
- if (mFilePointers == null ||
- mFilePointerIndex >= mFilePointers.length) {
- return null;
- }
- final long startOffset = mFilePointers[mFilePointerIndex++];
- final long endOffset = mFilePointers[mFilePointerIndex++];
- mCompressedInputStream.seek(startOffset);
- mFilePointerLimit = endOffset;
- }
- // Pull next record from stream
- return super.getNextRecord();
- }
- }
-
- /**
- * Pull SAMRecords from a coordinate-sorted iterator, and filter out any that do not match the filter.
- */
- public class BAMQueryFilteringIterator extends AbstractBamIterator {
- /**
- * The wrapped iterator.
- */
- protected final CloseableIterator<SAMRecord> wrappedIterator;
- /**
- * The next record to be returned. Will be null if no such record exists.
- */
- protected SAMRecord mNextRecord;
- private final BAMIteratorFilter iteratorFilter;
-
- public BAMQueryFilteringIterator(final CloseableIterator<SAMRecord> iterator,
- final BAMIteratorFilter iteratorFilter) {
- this.wrappedIterator = iterator;
- this.iteratorFilter = iteratorFilter;
- mNextRecord = advance();
- }
-
- /**
- * Returns true if a next element exists; false otherwise.
- */
- public boolean hasNext() {
- assertOpen();
- return mNextRecord != null;
- }
-
- /**
- * Gets the next record from the given iterator.
- * @return The next SAM record in the iterator.
- */
- public SAMRecord next() {
- if(!hasNext())
- throw new NoSuchElementException("BAMQueryFilteringIterator: no next element available");
- final SAMRecord currentRead = mNextRecord;
- mNextRecord = advance();
- return currentRead;
- }
-
- SAMRecord advance() {
- while (true) {
- // Pull next record from stream
- if(!wrappedIterator.hasNext())
- return null;
-
- final SAMRecord record = wrappedIterator.next();
- switch (iteratorFilter.compareToFilter(record)) {
- case MATCHES_FILTER: return record;
- case STOP_ITERATION: return null;
- case CONTINUE_ITERATION: break; // keep looping
- default: throw new SAMException("Unexpected return from compareToFilter");
- }
- }
- }
- }
-
- interface BAMIteratorFilter {
- /**
- * Determine if given record passes the filter, and if it does not, whether iteration should continue
- * or if this record is beyond the region(s) of interest.
- */
- FilteringIteratorState compareToFilter(final SAMRecord record);
- }
-
- /**
- * A decorating iterator that filters out records that do not match the given reference and start position.
- */
- private class BAMStartingAtIteratorFilter implements BAMIteratorFilter {
-
- private final int mReferenceIndex;
- private final int mRegionStart;
-
- public BAMStartingAtIteratorFilter(final int referenceIndex, final int start) {
- mReferenceIndex = referenceIndex;
- mRegionStart = start;
- }
-
- /**
- *
- * @return MATCHES_FILTER if this record matches the filter;
- * CONTINUE_ITERATION if does not match filter but iteration should continue;
- * STOP_ITERATION if does not match filter and iteration should end.
- */
- @Override
- public FilteringIteratorState compareToFilter(final SAMRecord record) {
- // If beyond the end of this reference sequence, end iteration
- final int referenceIndex = record.getReferenceIndex();
- if (referenceIndex < 0 || referenceIndex > mReferenceIndex) {
- return FilteringIteratorState.STOP_ITERATION;
- } else if (referenceIndex < mReferenceIndex) {
- // If before this reference sequence, continue
- return FilteringIteratorState.CONTINUE_ITERATION;
- }
- final int alignmentStart = record.getAlignmentStart();
- if (alignmentStart > mRegionStart) {
- // If scanned beyond target region, end iteration
- return FilteringIteratorState.STOP_ITERATION;
- } else if (alignmentStart == mRegionStart) {
- return FilteringIteratorState.MATCHES_FILTER;
- } else {
- return FilteringIteratorState.CONTINUE_ITERATION;
- }
- }
-
- }
-
- private class BAMFileIndexUnmappedIterator extends BAMFileIterator {
- private BAMFileIndexUnmappedIterator() {
- while (this.hasNext() && peek().getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- advance();
- }
- }
- }
-
- /**
- * Filters out records that do not match any of the given intervals and query type.
- */
- private class BAMQueryMultipleIntervalsIteratorFilter implements BAMIteratorFilter {
- final SAMFileReader.QueryInterval[] intervals;
- final boolean contained;
- int intervalIndex = 0;
-
-
- public BAMQueryMultipleIntervalsIteratorFilter(final SAMFileReader.QueryInterval[] intervals,
- final boolean contained) {
- this.contained = contained;
- this.intervals = intervals;
- }
-
- @Override
- public FilteringIteratorState compareToFilter(final SAMRecord record) {
- while (intervalIndex < intervals.length) {
- final IntervalComparison comparison = compareIntervalToRecord(intervals[intervalIndex], record);
- switch (comparison) {
- // Interval is before SAMRecord. Try next interval;
- case BEFORE: ++intervalIndex; break;
- // Interval is after SAMRecord. Keep scanning forward in SAMRecords
- case AFTER: return FilteringIteratorState.CONTINUE_ITERATION;
- // Found a good record
- case CONTAINED: return FilteringIteratorState.MATCHES_FILTER;
- // Either found a good record, or else keep scanning SAMRecords
- case OVERLAPPING: return
- (contained ? FilteringIteratorState.CONTINUE_ITERATION : FilteringIteratorState.MATCHES_FILTER);
- }
- }
- // Went past the last interval
- return FilteringIteratorState.STOP_ITERATION;
- }
-
- private IntervalComparison compareIntervalToRecord(final SAMFileReader.QueryInterval interval, final SAMRecord record) {
- // interval.end <= 0 implies the end of the reference sequence.
- final int intervalEnd = (interval.end <= 0? Integer.MAX_VALUE: interval.end);
- final int alignmentEnd;
- if (record.getReadUnmappedFlag() && record.getAlignmentStart() != SAMRecord.NO_ALIGNMENT_START) {
- // Unmapped read with coordinate of mate.
- alignmentEnd = record.getAlignmentStart();
- } else {
- alignmentEnd = record.getAlignmentEnd();
- }
-
- if (interval.referenceIndex < record.getReferenceIndex()) return IntervalComparison.BEFORE;
- else if (interval.referenceIndex > record.getReferenceIndex()) return IntervalComparison.AFTER;
- else if (intervalEnd < record.getAlignmentStart()) return IntervalComparison.BEFORE;
- else if (alignmentEnd < interval.start) return IntervalComparison.AFTER;
- else if (CoordMath.encloses(interval.start, intervalEnd, record.getAlignmentStart(), alignmentEnd)) {
- return IntervalComparison.CONTAINED;
- } else return IntervalComparison.OVERLAPPING;
- }
- }
-
- private enum IntervalComparison {
- BEFORE, AFTER, OVERLAPPING, CONTAINED
- }
-
- /**
- * Type returned by BAMIteratorFilter that tell BAMQueryFilteringIterator how to handle each SAMRecord.
- */
- private enum FilteringIteratorState {
- MATCHES_FILTER, STOP_ITERATION, CONTINUE_ITERATION
-
- }
-}
diff --git a/src/java/net/sf/samtools/BAMFileWriter.java b/src/java/net/sf/samtools/BAMFileWriter.java
deleted file mode 100644
index 04dda87..0000000
--- a/src/java/net/sf/samtools/BAMFileWriter.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.BinaryCodec;
-import net.sf.samtools.util.BlockCompressedFilePointerUtil;
-import net.sf.samtools.util.BlockCompressedInputStream;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import net.sf.samtools.util.BlockCompressedStreamConstants;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.IOUtil;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-
-/**
- * Concrete implementation of SAMFileWriter for writing gzipped BAM files.
- */
-class BAMFileWriter extends SAMFileWriterImpl {
-
- private final BinaryCodec outputBinaryCodec;
- private BAMRecordCodec bamRecordCodec = null;
- private final BlockCompressedOutputStream blockCompressedOutputStream;
- private BAMIndexer bamIndexer = null;
-
- protected BAMFileWriter(final File path) {
- blockCompressedOutputStream = new BlockCompressedOutputStream(path);
- outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
- outputBinaryCodec.setOutputFileName(path.getAbsolutePath());
- }
-
- protected BAMFileWriter(final File path, final int compressionLevel) {
- blockCompressedOutputStream = new BlockCompressedOutputStream(path, compressionLevel);
- outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
- outputBinaryCodec.setOutputFileName(path.getAbsolutePath());
- }
-
- protected BAMFileWriter(final OutputStream os, final File file) {
- blockCompressedOutputStream = new BlockCompressedOutputStream(os, file);
- outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
- outputBinaryCodec.setOutputFileName(getPathString(file));
- }
-
- protected BAMFileWriter(final OutputStream os, final File file, final int compressionLevel) {
- blockCompressedOutputStream = new BlockCompressedOutputStream(os, file, compressionLevel);
- outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
- outputBinaryCodec.setOutputFileName(getPathString(file));
- }
-
- private void prepareToWriteAlignments() {
- if (bamRecordCodec == null) {
- bamRecordCodec = new BAMRecordCodec(getFileHeader());
- bamRecordCodec.setOutputStream(outputBinaryCodec.getOutputStream(), getFilename());
- }
- }
-
- /** @return absolute path, or null if arg is null. */
- private String getPathString(final File path){
- return (path != null) ? path.getAbsolutePath() : null;
- }
-
- // Allow enabling the bam index construction
- // only enabled by factory method before anything is written
- void enableBamIndexConstruction () {
- if (!getSortOrder().equals(SAMFileHeader.SortOrder.coordinate)){
- throw new SAMException("Not creating BAM index since not sorted by coordinates: " + getSortOrder());
- }
- if(getFilename() == null){
- throw new SAMException("Not creating BAM index since we don't have an output file name");
- }
- bamIndexer = createBamIndex(getFilename());
- }
-
- private BAMIndexer createBamIndex(final String path) {
- try {
- final String indexFileBase = path.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION) ?
- path.substring(0, path.lastIndexOf(".")) : path;
- final File indexFile = new File(indexFileBase + BAMIndex.BAMIndexSuffix);
- if (indexFile.exists()) {
- if (!indexFile.canWrite()) {
- throw new SAMException("Not creating BAM index since unable to write index file " + indexFile);
- }
- }
- return new BAMIndexer(indexFile, getFileHeader());
- } catch (Exception e) {
- throw new SAMException("Not creating BAM index", e);
- }
- }
-
- protected void writeAlignment(final SAMRecord alignment) {
- prepareToWriteAlignments();
-
- if (bamIndexer != null) {
- try {
- final long startOffset = blockCompressedOutputStream.getFilePointer();
- bamRecordCodec.encode(alignment);
- final long stopOffset = blockCompressedOutputStream.getFilePointer();
- // set the alignment's SourceInfo and then prepare its index information
- alignment.setFileSource(new SAMFileSource(null, new BAMFileSpan(new Chunk(startOffset, stopOffset))));
- bamIndexer.processAlignment(alignment);
- } catch (Exception e) {
- bamIndexer = null;
- throw new SAMException("Exception when processing alignment for BAM index " + alignment, e);
- }
- } else {
- bamRecordCodec.encode(alignment);
- }
- }
-
- protected void writeHeader(final String textHeader) {
- writeHeader(outputBinaryCodec, getFileHeader(), textHeader);
- }
-
- protected void finish() {
- outputBinaryCodec.close();
- try {
- if (bamIndexer != null) {
- bamIndexer.finish();
- }
- } catch (Exception e) {
- throw new SAMException("Exception writing BAM index file", e);
- }
- }
-
- /** @return absolute path, or null if this writer does not correspond to a file. */
- protected String getFilename() {
- return outputBinaryCodec.getOutputFileName();
- }
-
- /**
- * Writes a header to a BAM file. samFileHeader and headerText are redundant - one can be used to regenerate the other but in
- * some instances we already have both so this allows us to save some cycles
- */
- protected static void writeHeader(final BinaryCodec outputBinaryCodec, final SAMFileHeader samFileHeader, final String headerText) {
- outputBinaryCodec.writeBytes(BAMFileConstants.BAM_MAGIC);
-
- // calculate and write the length of the SAM file header text and the header text
- outputBinaryCodec.writeString(headerText, true, false);
-
- // write the sequences binarily. This is redundant with the text header
- outputBinaryCodec.writeInt(samFileHeader.getSequenceDictionary().size());
- for (final SAMSequenceRecord sequenceRecord: samFileHeader.getSequenceDictionary().getSequences()) {
- outputBinaryCodec.writeString(sequenceRecord.getSequenceName(), true, true);
- outputBinaryCodec.writeInt(sequenceRecord.getSequenceLength());
- }
- }
-
- /**
- * Writes a header to a BAM file. Might need to regenerate the String version of the header, if one already has both the
- * samFileHeader and the String, use the version of this method which takes both.
- */
- protected static void writeHeader(final BinaryCodec outputBinaryCodec, final SAMFileHeader samFileHeader) {
- // Do not use SAMFileHeader.getTextHeader() as it is not updated when changes to the underlying object are made
- final String headerString;
- final Writer stringWriter = new StringWriter();
- new SAMTextHeaderCodec().encode(stringWriter, samFileHeader, true);
- headerString = stringWriter.toString();
-
- writeHeader(outputBinaryCodec, samFileHeader, headerString);
- }
-
- protected static void writeHeader(final OutputStream outputStream, final SAMFileHeader samFileHeader) {
- final BlockCompressedOutputStream blockCompressedOutputStream = new BlockCompressedOutputStream(outputStream, null);
- final BinaryCodec outputBinaryCodec = new BinaryCodec(new DataOutputStream(blockCompressedOutputStream));
- writeHeader(outputBinaryCodec, samFileHeader);
- try {
- blockCompressedOutputStream.flush();
- } catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- }
- }
-}
diff --git a/src/java/net/sf/samtools/BAMIndex.java b/src/java/net/sf/samtools/BAMIndex.java
deleted file mode 100644
index 2e76127..0000000
--- a/src/java/net/sf/samtools/BAMIndex.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * A basic interface for querying BAM indices.
- *
- * @author mhanna
- * @version 0.1
- */
-public interface BAMIndex {
-
- public static final String BAMIndexSuffix = ".bai";
-
- /**
- * Gets the compressed chunks which should be searched for the contents of records contained by the span
- * referenceIndex:startPos-endPos, inclusive. See the BAM spec for more information on how a chunk is
- * represented.
- *
- * @param referenceIndex The contig.
- * @param startPos Genomic start of query.
- * @param endPos Genomic end of query.
- * @return A file span listing the chunks in the BAM file.
- */
- BAMFileSpan getSpanOverlapping(final int referenceIndex, final int startPos, final int endPos);
-
- /**
- * Gets the start of the last linear bin in the index.
- * @return The chunk indicating the start of the last bin in the linear index.
- */
- long getStartOfLastLinearBin();
-
- /**
- * Gets meta data for the given reference including information about number of aligned, unaligned, and noCoordinate records
- * @param reference the reference of interest
- * @return meta data for the reference
- */
- public BAMIndexMetaData getMetaData(int reference);
-
- /**
- * Close the index and release any associated resources.
- */
- void close();
-}
diff --git a/src/java/net/sf/samtools/BAMIndexContent.java b/src/java/net/sf/samtools/BAMIndexContent.java
deleted file mode 100644
index 8ad8aeb..0000000
--- a/src/java/net/sf/samtools/BAMIndexContent.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Represents the contents of a bam index file for one reference.
- * A BAM index (.bai) file contains information for all references in the bam file.
- * This class describes the data present in the index file for one of these references;
- * including the bins, chunks, and linear index.
- */
-class BAMIndexContent extends BinningIndexContent {
- /**
- * Chunks containing metaData for the reference, e.g. number of aligned and unaligned records
- */
- private final BAMIndexMetaData mMetaData;
-
-
-
- /**
- * @param referenceSequence Content corresponds to this reference.
- * @param binList Array of bins represented by this content, possibly sparse
- * @param metaData Extra information about the reference in this index
- * @param linearIndex Additional index used to optimize queries
- */
- BAMIndexContent(final int referenceSequence, final BinList binList, final BAMIndexMetaData metaData, final LinearIndex linearIndex) {
- super(referenceSequence, binList, linearIndex);
- this.mMetaData = metaData;
- }
-
- /**
- * @param referenceSequence Content corresponds to this reference.
- * @param bins Array of bins represented by this content, possibly sparse
- * @param numberOfBins Number of non-null bins
- * @param metaData Extra information about the reference in this index
- * @param linearIndex Additional index used to optimize queries
- */
- BAMIndexContent(final int referenceSequence, final Bin[] bins, final int numberOfBins, final BAMIndexMetaData metaData, final LinearIndex linearIndex) {
- this(referenceSequence, new BinList(bins, numberOfBins), metaData, linearIndex);
- }
-
- /**
- * @return the meta data chunks for this content
- */
- public BAMIndexMetaData getMetaData() {
- return mMetaData;
- }
-
-}
diff --git a/src/java/net/sf/samtools/BAMIndexMetaData.java b/src/java/net/sf/samtools/BAMIndexMetaData.java
deleted file mode 100644
index afac41b..0000000
--- a/src/java/net/sf/samtools/BAMIndexMetaData.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.BlockCompressedFilePointerUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Metadata about the bam index contained within the bam index.
- * One instance created per index file.
- */
-public class BAMIndexMetaData {
-
- // information for the entire index.
- // stored at the end of the index
- private long noCoordinateRecords = 0;
-
- // information for each reference.
- // stored in two chunks in bin # MAX_BINS
- private long firstOffset = -1;
- private long lastOffset = 0;
- private int alignedRecords = 0;
- private int unAlignedRecords = 0; // unmapped, but associated with this reference
-
-
- /**
- * Constructor used when writing an index
- * construct one instance for each index generated
- */
- BAMIndexMetaData() {
- noCoordinateRecords = 0;
- newReference();
- }
-
- /**
- * Constructor used when reading an index
- * construct one instance for each index generated
- */
- BAMIndexMetaData(List<Chunk> chunkList) {
- noCoordinateRecords = 0;
-
- if (chunkList == null || chunkList.size() == 0) {
- // System.out.println("No metadata chunks");
- } else if (chunkList.size() != 2) {
- throw new SAMException("Unexpected number of metadata chunks " + (chunkList.size()));
- }
- // fill in the first/lastOffset un/alignedRecords from this
- boolean firstChunk = true;
- if (chunkList != null) {
- for (Chunk c : chunkList) {
- long start = c.getChunkStart();
- long end = c.getChunkEnd();
- if (firstChunk) {
- firstOffset = start;
- lastOffset = end;
- firstChunk = false;
- } else {
- firstChunk = true;
- alignedRecords = (int) start;
- unAlignedRecords = (int) end;
- }
- }
- }
- }
-
- /**
- * @return the count of aligned records associated with this reference
- */
- public int getAlignedRecordCount() {
- return alignedRecords;
- }
-
- /**
- * @return the count of unaligned records associated with this reference
- */
- public int getUnalignedRecordCount() {
- return unAlignedRecords;
- }
-
- /**
- * Call for each new reference sequence encountered
- */
- void newReference() {
- firstOffset = -1;
- lastOffset = 0;
- alignedRecords = 0;
- unAlignedRecords = 0;
- }
-
- /**
- * Extract relevant metaData from the record and its filePointer
- * Call only once per record in the file being indexed
- *
- * @param rec
- */
- void recordMetaData(final SAMRecord rec) {
-
- final int alignmentStart = rec.getAlignmentStart();
- if (alignmentStart == SAMRecord.NO_ALIGNMENT_START) {
- incrementNoCoordinateRecordCount();
- return;
- }
-
- if (rec.getFileSource() == null){
- throw new SAMException("BAM cannot be indexed without setting a fileSource for record " + rec);
- }
- final Chunk newChunk = ((BAMFileSpan) rec.getFileSource().getFilePointer()).getSingleChunk();
- final long start = newChunk.getChunkStart();
- final long end = newChunk.getChunkEnd();
-
- if (rec.getReadUnmappedFlag()) {
- unAlignedRecords++;
- } else {
- alignedRecords++;
- }
- if (BlockCompressedFilePointerUtil.compare(start, firstOffset) < 1 || firstOffset == -1) {
- this.firstOffset = start;
- }
- if (BlockCompressedFilePointerUtil.compare(lastOffset, end) < 1) {
- this.lastOffset = end;
- }
- }
-
- /**
- * Call whenever a reference with no coordinate information is encountered in the bam file
- */
- void incrementNoCoordinateRecordCount() {
- noCoordinateRecords++;
- }
-
- /**
- * Set local variable. Normally noCoordinateRecord count accessed from AbstractBAMFileIndex when reading
- */
- private void setNoCoordinateRecordCount(long count) {
- noCoordinateRecords = count;
- }
-
-
- /**
- * @return the count of records with no coordinate information in the bam file.
- * Not public, since only used by BAMIndexer when writing bam index.
- * Readers of bam index should use AbstractBAMFileIndex.getNoCoordinateRecordCount.
- */
- long getNoCoordinateRecordCount() {
- return noCoordinateRecords;
- }
-
- /**
- * @return the first virtual file offset used by this reference
- */
- long getFirstOffset() {
- return firstOffset;
- }
-
- /**
- * @return the last virtual file offset used by this reference
- */
- long getLastOffset() {
- return lastOffset;
- }
-
- /**
- * Prints meta-data statistics from BAM index (.bai) file
- * Statistics include count of aligned and unaligned reads for each reference sequence
- * and a count of all records with no start coordinate
- */
- static public void printIndexStats(final File inputBamFile) {
- try {
- final BAMFileReader bam = new BAMFileReader(inputBamFile, null, false, SAMFileReader.ValidationStringency.SILENT, new DefaultSAMRecordFactory());
- if (!bam.hasIndex()) {
- throw new SAMException("No index for bam file " + inputBamFile);
- }
- BAMIndexMetaData[] data = getIndexStats(bam);
- // read through all the bins of every reference.
- int nRefs = bam.getFileHeader().getSequenceDictionary().size();
- for (int i = 0; i < nRefs; i++) {
- final SAMSequenceRecord seq = bam.getFileHeader().getSequence(i);
- if (seq == null) continue;
- final String sequenceName = seq.getSequenceName();
- final int sequenceLength = seq.getSequenceLength();
- System.out.print(sequenceName + ' ' + "length=\t" + sequenceLength);
- if (data[i] == null) {
- System.out.println();
- continue;
- }
- System.out.println("\tAligned= " + data[i].getAlignedRecordCount() +
- "\tUnaligned= " + data[i].getUnalignedRecordCount());
- }
- System.out.println("NoCoordinateCount= " + data[0].getNoCoordinateRecordCount());
- } catch (IOException e) {
- throw new SAMException("Exception in getting index statistics", e);
- }
- }
-
- /**
- * Prints meta-data statistics from BAM index (.bai) file
- * Statistics include count of aligned and unaligned reads for each reference sequence
- * and a count of all records with no start coordinate
- */
- static public BAMIndexMetaData[] getIndexStats(final BAMFileReader bam){
-
- AbstractBAMFileIndex index = (AbstractBAMFileIndex) bam.getIndex();
- // read through all the bins of every reference.
- int nRefs = index.getNumberOfReferences();
- BAMIndexMetaData[] result = new BAMIndexMetaData[nRefs == 0 ? 1 : nRefs];
- for (int i = 0; i < nRefs; i++) {
- result[i] = index.getMetaData(i);
- }
-
- if (result[0] == null){
- result[0] = new BAMIndexMetaData();
- }
- final Long noCoordCount = index.getNoCoordinateCount();
- if (noCoordCount != null) // null in old index files without metadata
- result[0].setNoCoordinateRecordCount(noCoordCount);
-
- return result;
- }
-}
diff --git a/src/java/net/sf/samtools/BAMIndexWriter.java b/src/java/net/sf/samtools/BAMIndexWriter.java
deleted file mode 100644
index bbe9846..0000000
--- a/src/java/net/sf/samtools/BAMIndexWriter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * A basic interface for writing BAM index files
- *
- * @author mborkan
- */
-interface BAMIndexWriter { // note - only package visibility
-
- /**
- * Write the data for one alignments to one reference sequence
- *
- * @param content BAMIndexContent containing the information for one reference
- */
- public void writeReference(final BAMIndexContent content);
-
- /**
- * Writes out the count of records without coordinates
- *
- * @param count
- */
- public void writeNoCoordinateRecordCount(final Long count);
-
- /**
- * Any necessary processing at the end of the file
- */
- public void close();
-
-}
\ No newline at end of file
diff --git a/src/java/net/sf/samtools/BAMIndexer.java b/src/java/net/sf/samtools/BAMIndexer.java
deleted file mode 100644
index b58295a..0000000
--- a/src/java/net/sf/samtools/BAMIndexer.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sub-license, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.io.File;
-import java.io.OutputStream;
-
-/**
- * Class for both constructing BAM index content and writing it out.
- * There are two usage patterns:
- * 1) Building a bam index from an existing bam file
- * 2) Building a bam index while building the bam file
- * In both cases, processAlignment is called for each alignment record and
- * finish() is called at the end.
- */
-public class BAMIndexer {
-
- // The number of references (chromosomes) in the BAM file
- private final int numReferences;
-
- // output written as binary, or (for debugging) as text
- private final BAMIndexWriter outputWriter;
-
- private int currentReference = 0;
-
- // content is built up from the input bam file using this
- private final BAMIndexBuilder indexBuilder;
-
- /**
- * @param output binary BAM Index (.bai) file
- * @param fileHeader header for the corresponding bam file
- */
- public BAMIndexer(final File output, final SAMFileHeader fileHeader) {
-
- numReferences = fileHeader.getSequenceDictionary().size();
- indexBuilder = new BAMIndexBuilder(fileHeader.getSequenceDictionary());
- outputWriter = new BinaryBAMIndexWriter(numReferences, output);
- }
-
- /**
- * Prepare to index a BAM.
- * @param output Index will be written here. output will be closed when finish() method is called.
- * @param fileHeader header for the corresponding bam file.
- */
- public BAMIndexer(final OutputStream output, final SAMFileHeader fileHeader) {
-
- numReferences = fileHeader.getSequenceDictionary().size();
- indexBuilder = new BAMIndexBuilder(fileHeader.getSequenceDictionary());
- outputWriter = new BinaryBAMIndexWriter(numReferences, output);
- }
-
- /**
- * Record any index information for a given BAM record.
- * If this alignment starts a new reference, write out the old reference.
- * Requires a non-null value for rec.getFileSource().
- *
- * @param rec The BAM record
- */
- public void processAlignment(final SAMRecord rec) {
- try {
- final int reference = rec.getReferenceIndex();
- if (reference != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && reference != currentReference) {
- // process any completed references
- advanceToReference(reference);
- }
- indexBuilder.processAlignment(rec);
- } catch (final Exception e) {
- throw new SAMException("Exception creating BAM index for record " + rec, e);
- }
- }
-
- /**
- * After all the alignment records have been processed, finish is called.
- * Writes any final information and closes the output file.
- */
- public void finish() {
- // process any remaining references
- advanceToReference(numReferences);
- outputWriter.writeNoCoordinateRecordCount(indexBuilder.getNoCoordinateRecordCount());
- outputWriter.close();
- }
-
- /** write out any references between the currentReference and the nextReference */
- private void advanceToReference(final int nextReference) {
- while (currentReference < nextReference) {
- final BAMIndexContent content = indexBuilder.processReference(currentReference);
- outputWriter.writeReference(content);
- currentReference++;
- if (currentReference < numReferences) {
- indexBuilder.startNewReference();
- }
- }
- }
-
- /**
- * Generates a BAM index file, either textual or binary, from an input BAI file.
- * Only used for testing, but located here for visibility into CachingBAMFileIndex.
- *
- * @param output BAM Index (.bai) file (or bai.txt file when text)
- * @param textOutput Whether to create text output or binary
- */
- static public void createAndWriteIndex(final File input, final File output, final boolean textOutput) {
-
- // content is from an existing bai file.
-
- final CachingBAMFileIndex existingIndex = new CachingBAMFileIndex(input, null);
- final int n_ref = existingIndex.getNumberOfReferences();
- final BAMIndexWriter outputWriter;
- if (textOutput) {
- outputWriter = new TextualBAMIndexWriter(n_ref, output);
- } else {
- outputWriter = new BinaryBAMIndexWriter(n_ref, output);
- }
-
- // write the content one reference at a time
- try {
- for (int i = 0; i < n_ref; i++) {
- outputWriter.writeReference(existingIndex.getQueryResults(i));
- }
- outputWriter.writeNoCoordinateRecordCount(existingIndex.getNoCoordinateCount());
- outputWriter.close();
-
- } catch (final Exception e) {
- throw new SAMException("Exception creating BAM index", e);
- }
- }
-
- /**
- * Class for constructing BAM index files.
- * One instance is used to construct an entire index.
- * processAlignment is called for each alignment until a new reference is encountered, then
- * processReference is called when all records for the reference have been processed.
- */
- private class BAMIndexBuilder {
-
- private final SAMSequenceDictionary sequenceDictionary;
-
- private BinningIndexBuilder binningIndexBuilder;
-
- private int currentReference = -1;
-
- // information in meta data
- private final BAMIndexMetaData indexStats = new BAMIndexMetaData();
-
- BAMIndexBuilder(final SAMSequenceDictionary sequenceDictionary) {
- this.sequenceDictionary = sequenceDictionary;
- if (!sequenceDictionary.isEmpty()) startNewReference();
- }
-
- /**
- * Record any index information for a given BAM record
- *
- * @param rec The BAM record. Requires rec.getFileSource() is non-null.
- */
- public void processAlignment(final SAMRecord rec) {
-
- // metadata
- indexStats.recordMetaData(rec);
-
- if (rec.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START) {
- return; // do nothing for records without coordinates, but count them
- }
-
- // various checks
- final int reference = rec.getReferenceIndex();
- if (reference != currentReference) {
- throw new SAMException("Unexpected reference " + reference +
- " when constructing index for " + currentReference + " for record " + rec);
- }
-
- binningIndexBuilder.processFeature(new BinningIndexBuilder.FeatureToBeIndexed() {
- @Override
- public int getStart() {
- return rec.getAlignmentStart();
- }
-
- @Override
- public int getEnd() {
- return rec.getAlignmentEnd();
- }
-
- @Override
- public Integer getIndexingBin() {
- final Integer binNumber = rec.getIndexingBin();
- return (binNumber == null ? rec.computeIndexingBin() : binNumber);
-
- }
-
- @Override
- public Chunk getChunk() {
- final SAMFileSource source = rec.getFileSource();
- if (source == null) {
- throw new SAMException("No source (virtual file offsets); needed for indexing on BAM Record " + rec);
- }
- return ((BAMFileSpan) source.getFilePointer()).getSingleChunk();
- }
- });
-
- }
-
- /**
- * Creates the BAMIndexContent for this reference.
- * Requires all alignments of the reference have already been processed.
- * @return Null if there are no features for this reference.
- */
- public BAMIndexContent processReference(final int reference) {
-
- if (reference != currentReference) {
- throw new SAMException("Unexpected reference " + reference + " when constructing index for " + currentReference);
- }
-
- final BinningIndexContent indexContent = binningIndexBuilder.generateIndexContent();
- if (indexContent == null) return null;
- return new BAMIndexContent(indexContent.getReferenceSequence(), indexContent.getBins(),
- indexStats, indexContent.getLinearIndex());
-
- }
-
- /**
- * @return the count of records with no coordinate positions
- */
- public long getNoCoordinateRecordCount() {
- return indexStats.getNoCoordinateRecordCount();
- }
-
- /**
- * reinitialize all data structures when the reference changes
- */
- void startNewReference() {
- ++currentReference;
- // I'm not crazy about recycling this object, but that is the way it was originally written and
- // it helps keep track of no-coordinate read count (which shouldn't be stored in this class anyway).
- indexStats.newReference();
- binningIndexBuilder = new BinningIndexBuilder(currentReference,
- sequenceDictionary.getSequence(currentReference).getSequenceLength());
- }
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/samtools/BAMRecord.java b/src/java/net/sf/samtools/BAMRecord.java
deleted file mode 100644
index 22a48bc..0000000
--- a/src/java/net/sf/samtools/BAMRecord.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.StringUtil;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-
-/**
- * Wrapper class for binary BAM records.
- * Delays unpacking all data binary until requested.
- */
-public class BAMRecord extends SAMRecord {
- /**
- * Offset of the read name in the variable length section of the disk representation of BAMRecord
- */
- private static final int READ_NAME_OFFSET = 0;
-
- /**
- * Variable-length part of BAMRecord. Lazily decoded.
- */
- private byte[] mRestOfBinaryData = null;
-
- // Various lengths are stored, because they are in the fixed-length part of the BAMRecord, and it is
- // more efficient to remember them than decode the element they store the length of.
- // The length becomes invalid if the element is changed with a set() method.
- private int mReadLength = 0;
- private boolean mReadLengthValid = true;
- private final short mReadNameLength;
- private boolean mReadNameLengthValid = true;
- private final int mCigarLength;
- private boolean mCigarLengthValid = true;
-
- // Whether or not the getter needs to decode the corresponding element.
- // For all the other variable length elements, null == not yet decoded.
- private boolean mAttributesDecoded = false;
- private boolean mCigarDecoded = false;
-
- /**
- * If any of the properties set from mRestOfBinaryData have been overridden by calls to setters,
- * this is set to true, indicating that mRestOfBinaryData cannot be used to write this record to disk.
- */
- private boolean mBinaryDataStale;
-
- protected BAMRecord(final SAMFileHeader header,
- final int referenceID,
- final int coordinate,
- final short readNameLength,
- final short mappingQuality,
- final int indexingBin,
- final int cigarLen,
- final int flags,
- final int readLen,
- final int mateReferenceID,
- final int mateCoordinate,
- final int insertSize,
- final byte[] restOfData) {
- super(header);
- setReferenceIndex(referenceID);
- setAlignmentStart(coordinate);
- mReadNameLength = readNameLength;
- setMappingQuality(mappingQuality);
- mCigarLength = cigarLen;
- setFlags(flags);
- mReadLength = readLen;
- setMateReferenceIndex(mateReferenceID);
- setMateAlignmentStart(mateCoordinate);
- setInferredInsertSize(insertSize);
- mRestOfBinaryData = restOfData;
-
- // Set these to null in order to mark them as being candidates for lazy initialization.
- // If this is not done, they will have non-null defaults.
- super.setReadName(null);
- super.setCigarString(null);
- super.setReadBases(null);
- super.setBaseQualities(null);
-
- // Do this after the above because setCigarString will clear it.
- setIndexingBin(indexingBin);
-
- // Mark the binary block as being valid for writing back out to disk
- mBinaryDataStale = false;
- }
-
- /**
- * Force all the lazily-initialized attributes to be decoded.
- */
- protected void eagerDecode() {
- getReadName();
- getCigar();
- getReadBases();
- getBaseQualities();
- getBinaryAttributes();
- super.eagerDecode();
- mRestOfBinaryData = null;
- }
-
- /**
- * If this record has a valid binary representation of the variable-length portion of a binary record stored,
- * return that byte array, otherwise return null. This will never be true for SAMRecords. It will be true
- * for BAMRecords that have not been eagerDecoded(), and for which none of the data in the variable-length
- * portion has been changed.
- */
- @Override
- public byte[] getVariableBinaryRepresentation() {
- if (mBinaryDataStale) {
- return null;
- }
- // This may have been set to null by eagerDecode()
- return mRestOfBinaryData;
- }
-
- /**
- * Depending on the concrete implementation, the binary file size of attributes may be known without
- * computing them all.
- *
- * @return binary file size of attribute, if known, else -1.
- */
- @Override
- public int getAttributesBinarySize() {
- if (mBinaryDataStale || mRestOfBinaryData == null) {
- return -1;
- }
- final int tagsOffset = readNameSize() + cigarSize() + basesSize() + qualsSize();
- return mRestOfBinaryData.length - tagsOffset;
- }
-
- @Override
- public void setReadName(final String value) {
- super.setReadName(value);
- mBinaryDataStale = true;
- mReadNameLengthValid = false;
- }
-
- @Override
- public void setCigar(final Cigar cigar) {
- super.setCigar(cigar);
- mBinaryDataStale = true;
- mCigarLengthValid = false;
- mCigarDecoded = true;
- }
-
- @Override
- public void setCigarString(final String value) {
- super.setCigarString(value);
- mBinaryDataStale = true;
- mCigarLengthValid = false;
- mCigarDecoded = true;
- }
-
- @Override
- public void setReadBases(final byte[] value) {
- super.setReadBases(value);
- mBinaryDataStale = true;
- mReadLengthValid = false;
- }
-
- @Override
- public void setBaseQualities(final byte[] value) {
- super.setBaseQualities(value);
- mBinaryDataStale = true;
- }
-
- @Override
- protected void setAttribute(final short tag, final Object value, final boolean isUnsignedArray) {
- // populate all the attributes from the binary block before overwriting one
- getBinaryAttributes();
- super.setAttribute(tag, value, isUnsignedArray);
- mBinaryDataStale = true;
- }
-
- /**
- * Removes all attributes.
- */
- @Override
- public void clearAttributes() {
- mAttributesDecoded = true;
- mBinaryDataStale = true;
- super.clearAttributes();
- }
-
- /**
- * Avoids decoding binary block to get read length.
- */
- @Override
- public int getReadLength() {
- if (mReadLengthValid) {
- return mReadLength;
- }
- return super.getReadLength();
- }
-
- @Override
- public String getReadName() {
- String result = super.getReadName();
- if (mRestOfBinaryData != null && result == null) {
- result = decodeReadName();
- super.setReadName(result);
- }
- return result;
- }
-
- /**
- * Avoids decoding read name to get read name length. Do not include null terminator.
- */
- @Override
- public int getReadNameLength() {
- if (mReadNameLengthValid) {
- return mReadNameLength - 1;
- }
- return super.getReadNameLength();
- }
-
- @Override
- public Cigar getCigar() {
- if (mRestOfBinaryData != null && !mCigarDecoded) {
- final int cigarOffset = readNameSize();
- final ByteBuffer byteBuffer = ByteBuffer.wrap(mRestOfBinaryData, cigarOffset, cigarSize());
- byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
- super.initializeCigar(BinaryCigarCodec.getSingleton().decode(byteBuffer));
- mCigarDecoded = true;
- if (getValidationStringency() != SAMFileReader.ValidationStringency.SILENT && !this.getReadUnmappedFlag()) {
- // Don't know line number, and don't want to force read name to be decoded.
- SAMUtils.processValidationErrors(validateCigar(-1L), -1, getValidationStringency());
- }
- }
- return super.getCigar();
- }
-
- /**
- * Avoids decoding CIGAR in order to get length.
- */
- @Override
- public int getCigarLength() {
- if (mCigarLengthValid) {
- return mCigarLength;
- } else {
- return super.getCigarLength();
- }
- }
-
- @Override
- public byte[] getReadBases() {
- byte[] result = super.getReadBases();
- if (mRestOfBinaryData != null && result == null) {
- result = decodeReadBases();
- super.setReadBases(result);
- }
- return result;
- }
-
- @Override
- public byte[] getBaseQualities() {
- byte[] ret = super.getBaseQualities();
- if (mRestOfBinaryData != null && ret == null) {
- ret = decodeBaseQualities();
- super.setBaseQualities(ret);
- }
- return ret;
- }
-
- @Override
- public Object getAttribute(final short tag) {
- if (!mAttributesDecoded) {
- decodeAttributes();
- }
- return super.getAttribute(tag);
- }
-
- @Override
- protected SAMBinaryTagAndValue getBinaryAttributes() {
- if (!mAttributesDecoded) {
- decodeAttributes();
- }
- return super.getBinaryAttributes();
- }
-
- private void decodeAttributes() {
- if (mAttributesDecoded) {
- return;
- }
- mAttributesDecoded = true;
- final int tagsOffset = readNameSize() + cigarSize() + basesSize() + qualsSize();
- final int tagsSize = mRestOfBinaryData.length - tagsOffset;
- final SAMBinaryTagAndValue attributes = BinaryTagCodec.readTags(mRestOfBinaryData, tagsOffset, tagsSize, getValidationStringency());
- setAttributes(attributes);
- }
-
- private byte[] decodeBaseQualities() {
- if (mReadLength == 0) {
- return SAMRecord.NULL_QUALS;
- }
- final int qualsOffset = readNameSize() + cigarSize() + basesSize();
- final byte[] ret = new byte[qualsSize()];
- System.arraycopy(mRestOfBinaryData, qualsOffset, ret, 0, qualsSize());
- if (ret.length > 0 && ret[0] == (byte) 0xFF) {
- // BAM files store missing qualities as an array of 0xFF bytes.
- // 0xFF is an illegal quality score value (it cannot be encoded in SAM)
- // and so the first byte is a suitable marker.
- // We hide this quirk of the BAM encoding so that the BAM interface looks the same as SAM.
- return NULL_QUALS;
- }
- return ret;
- }
-
- private String decodeReadName() {
- // Don't include terminating null
- return StringUtil.bytesToString(mRestOfBinaryData, READ_NAME_OFFSET, mReadNameLength-1);
- }
-
- private byte[] decodeReadBases() {
- if (mReadLength == 0) {
- return NULL_SEQUENCE;
- }
- final int basesOffset = readNameSize() + cigarSize();
- return SAMUtils.compressedBasesToBytes(mReadLength, mRestOfBinaryData, basesOffset);
- }
-
- /* methods for computing disk size of variably-sized elements, in order to locate
- * elements in mRestOfBinaryData */
-
- private int readNameSize() {
- return mReadNameLength;
- }
-
- private int cigarSize() {
- return mCigarLength * 4;
- }
-
- private int basesSize() {
- return (mReadLength + 1)/2;
- }
-
- private int qualsSize() {
- return mReadLength;
- }
-}
diff --git a/src/java/net/sf/samtools/BAMRecordCodec.java b/src/java/net/sf/samtools/BAMRecordCodec.java
deleted file mode 100644
index b6bcfcf..0000000
--- a/src/java/net/sf/samtools/BAMRecordCodec.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.BinaryCodec;
-import net.sf.samtools.util.RuntimeEOFException;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-
-/**
- * Class for translating between in-memory and disk representation of BAMRecord.
- */
-public class BAMRecordCodec implements SortingCollection.Codec<SAMRecord> {
- private final BinaryCigarCodec cigarCodec = new BinaryCigarCodec();
- private final SAMFileHeader header;
- private final BinaryCodec binaryCodec = new BinaryCodec();
- private final BinaryTagCodec binaryTagCodec = new BinaryTagCodec(binaryCodec);
- private final SAMRecordFactory samRecordFactory;
-
- public BAMRecordCodec(final SAMFileHeader header) {
- this(header, new DefaultSAMRecordFactory());
- }
-
- public BAMRecordCodec(final SAMFileHeader header, final SAMRecordFactory factory) {
- this.header = header;
- this.samRecordFactory = factory;
- }
-
- public BAMRecordCodec clone() {
- // Do not clone the references to codecs, as they must be distinct for each instance.
- return new BAMRecordCodec(this.header, this.samRecordFactory);
- }
-
-
- /** Sets the output stream that records will be written to. */
- public void setOutputStream(final OutputStream os) {
- this.binaryCodec.setOutputStream(os);
- }
-
- /** Sets the output stream that records will be written to. */
- public void setOutputStream(final OutputStream os, final String filename) {
- this.binaryCodec.setOutputStream(os);
- this.binaryCodec.setOutputFileName(filename);
- }
-
- /** Sets the input stream that records will be read from. */
- public void setInputStream(final InputStream is) {
- this.binaryCodec.setInputStream(is);
- }
-
- /** Sets the input stream that records will be read from. */
- public void setInputStream(final InputStream is, final String filename) {
- this.binaryCodec.setInputStream(is);
- this.binaryCodec.setInputFileName(filename);
- }
-
- /**
- * Write object to OutputStream.
- * Reference and mate reference indices must be resolvable, which either means that these have been set into the
- * SAMRecord directly, or the SAMRecord must have a header assigned into it so that reference names can be
- * resolved into indices.
- *
- * @param alignment Record to be written.
- */
- public void encode(final SAMRecord alignment) {
- // Compute block size, as it is the first element of the file representation of SAMRecord
- final int readLength = alignment.getReadLength();
-
- final int cigarLength = alignment.getCigarLength();
-
- int blockSize = BAMFileConstants.FIXED_BLOCK_SIZE + alignment.getReadNameLength() + 1 + // null terminated
- cigarLength * 4 +
- (readLength + 1) / 2 + // 2 bases per byte, round up
- readLength;
-
- final int attributesSize = alignment.getAttributesBinarySize();
- if (attributesSize != -1) {
- // binary attribute size already known, don't need to compute.
- blockSize += attributesSize;
- } else {
- SAMBinaryTagAndValue attribute = alignment.getBinaryAttributes();
- while (attribute != null) {
- blockSize += (BinaryTagCodec.getTagSize(attribute.value));
- attribute = attribute.getNext();
- }
- }
-
- int indexBin = 0;
- if (alignment.getReferenceIndex() >= 0) {
- if (alignment.getIndexingBin() != null) {
- indexBin = alignment.getIndexingBin();
- } else {
- indexBin = alignment.computeIndexingBin();
- }
- }
-
- // Blurt out the elements
- this.binaryCodec.writeInt(blockSize);
- this.binaryCodec.writeInt(alignment.getReferenceIndex());
- // 0-based!!
- this.binaryCodec.writeInt(alignment.getAlignmentStart() - 1);
- this.binaryCodec.writeUByte((short)(alignment.getReadNameLength() + 1));
- this.binaryCodec.writeUByte((short)alignment.getMappingQuality());
- this.binaryCodec.writeUShort(indexBin);
- this.binaryCodec.writeUShort(cigarLength);
- this.binaryCodec.writeUShort(alignment.getFlags());
- this.binaryCodec.writeInt(alignment.getReadLength());
- this.binaryCodec.writeInt(alignment.getMateReferenceIndex());
- this.binaryCodec.writeInt(alignment.getMateAlignmentStart() - 1);
- this.binaryCodec.writeInt(alignment.getInferredInsertSize());
- final byte[] variableLengthBinaryBlock = alignment.getVariableBinaryRepresentation();
- if (variableLengthBinaryBlock != null) {
- // Don't need to encode variable-length block, because it is unchanged from
- // when the record was read from a BAM file.
- this.binaryCodec.writeBytes(variableLengthBinaryBlock);
- } else {
- if (alignment.getReadLength() != alignment.getBaseQualities().length &&
- alignment.getBaseQualities().length != 0) {
- throw new RuntimeException("Mismatch between read length and quals length writing read " +
- alignment.getReadName() + "; read length: " + alignment.getReadLength() +
- "; quals length: " + alignment.getBaseQualities().length);
- }
- this.binaryCodec.writeString(alignment.getReadName(), false, true);
- final int[] binaryCigar = cigarCodec.encode(alignment.getCigar());
- for (final int cigarElement : binaryCigar) {
- // Assumption that this will fit into an integer, despite the fact
- // that it is specced as a uint.
- this.binaryCodec.writeInt(cigarElement);
- }
- this.binaryCodec.writeBytes(SAMUtils.bytesToCompressedBases(alignment.getReadBases()));
- byte[] qualities = alignment.getBaseQualities();
- if (qualities.length == 0) {
- qualities = new byte[alignment.getReadLength()];
- Arrays.fill(qualities, (byte) 0xFF);
- }
- this.binaryCodec.writeBytes(qualities);
- SAMBinaryTagAndValue attribute = alignment.getBinaryAttributes();
- while (attribute != null) {
- this.binaryTagCodec.writeTag(attribute.tag, attribute.value, attribute.isUnsignedArray());
- attribute = attribute.getNext();
- }
- }
- }
-
- /**
- * Read the next record from the input stream and convert into a java object.
- *
- * @return null if no more records. Should throw exception if EOF is encountered in the middle of
- * a record.
- */
- public SAMRecord decode() {
- int recordLength = 0;
- try {
- recordLength = this.binaryCodec.readInt();
- }
- catch (RuntimeEOFException e) {
- return null;
- }
-
- if (recordLength < BAMFileConstants.FIXED_BLOCK_SIZE) {
- throw new SAMFormatException("Invalid record length: " + recordLength);
- }
-
- final int referenceID = this.binaryCodec.readInt();
- final int coordinate = this.binaryCodec.readInt() + 1;
- final short readNameLength = this.binaryCodec.readUByte();
- final short mappingQuality = this.binaryCodec.readUByte();
- final int bin = this.binaryCodec.readUShort();
- final int cigarLen = this.binaryCodec.readUShort();
- final int flags = this.binaryCodec.readUShort();
- final int readLen = this.binaryCodec.readInt();
- final int mateReferenceID = this.binaryCodec.readInt();
- final int mateCoordinate = this.binaryCodec.readInt() + 1;
- final int insertSize = this.binaryCodec.readInt();
- final byte[] restOfRecord = new byte[recordLength - BAMFileConstants.FIXED_BLOCK_SIZE];
- this.binaryCodec.readBytes(restOfRecord);
- final BAMRecord ret = this.samRecordFactory.createBAMRecord(
- header, referenceID, coordinate, readNameLength, mappingQuality,
- bin, cigarLen, flags, readLen, mateReferenceID, mateCoordinate, insertSize, restOfRecord);
- ret.setHeader(header);
- return ret;
- }
-}
diff --git a/src/java/net/sf/samtools/BamFileIoUtils.java b/src/java/net/sf/samtools/BamFileIoUtils.java
deleted file mode 100644
index e4d7406..0000000
--- a/src/java/net/sf/samtools/BamFileIoUtils.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package net.sf.samtools;
-
-import net.sf.samtools.util.BlockCompressedFilePointerUtil;
-import net.sf.samtools.util.BlockCompressedInputStream;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import net.sf.samtools.util.BlockCompressedStreamConstants;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.IOUtil;
-import net.sf.samtools.util.Md5CalculatingOutputStream;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-
-public class BamFileIoUtils {
- public static final String BAM_FILE_EXTENSION = ".bam";
-
- public static boolean isBamFile(final File file) {
- return ((file != null) && file.getName().endsWith(BAM_FILE_EXTENSION));
- }
-
- public static void reheaderBamFile(final SAMFileHeader samFileHeader, final File inputFile, final File outputFile) {
- reheaderBamFile(samFileHeader, inputFile, outputFile, true, true);
- }
-
- /**
- * Copy a BAM file but replacing the header
- * @param samFileHeader The header to use in the new file
- * @param inputFile The BAM file to copy, sans header
- * @param outputFile The new BAM file, constructed with the new header and the content from inputFile
- * @param createMd5 Whether or not to create an MD5 file for the new BAM
- * @param createIndex Whether or not to create an index file for the new BAM
- */
- public static void reheaderBamFile(final SAMFileHeader samFileHeader, final File inputFile, final File outputFile, final boolean createMd5, final boolean createIndex) {
- // TODO: In a future world where IoUtil and IOUtil are merged, de-comment these
-// IoUtil.assertFileIsReadable(inputFile);
-// IoUtil.assertFileIsWritable(outputFile);
-
- try {
- BlockCompressedInputStream.assertNonDefectiveFile(inputFile);
- assertSortOrdersAreEqual(samFileHeader, inputFile);
-
- final OutputStream outputStream = buildOutputStream(outputFile, createMd5, createIndex);
-
- BAMFileWriter.writeHeader(outputStream, samFileHeader);
- blockCopyBamFile(inputFile, outputStream, true, false);
-
- CloserUtil.close(inputFile);
- outputStream.close();
- } catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- }
- }
-
- /**
- * Copy data from a BAM file to an OutputStream by directly copying the gzip blocks
- *
- * @param inputFile The file to be copied
- * @param outputStream The stream to write the copied data to
- * @param skipHeader If true, the header of the input file will not be copied to the output stream
- * @param skipTerminator If true, the terminator block of the input file will not be written to the output stream
- */
- public static void blockCopyBamFile(final File inputFile, final OutputStream outputStream, final boolean skipHeader, final boolean skipTerminator) {
- FileInputStream in = null;
- try {
- in = new FileInputStream(inputFile);
-
- // a) It's good to check that the end of the file is valid and b) we need to know if there's a terminator block and not copy it if skipTerminator is true
- final BlockCompressedInputStream.FileTermination term = BlockCompressedInputStream.checkTermination(inputFile);
- if (term == BlockCompressedInputStream.FileTermination.DEFECTIVE)
- throw new SAMException(inputFile.getAbsolutePath() + " does not have a valid GZIP block at the end of the file.");
-
- if (skipHeader) {
- final long vOffsetOfFirstRecord = SAMUtils.findVirtualOffsetOfFirstRecordInBam(inputFile);
- final BlockCompressedInputStream blockIn = new BlockCompressedInputStream(inputFile);
- blockIn.seek(vOffsetOfFirstRecord);
- final long remainingInBlock = blockIn.available();
-
- // If we found the end of the header then write the remainder of this block out as a
- // new gzip block and then break out of the while loop
- if (remainingInBlock >= 0) {
- final BlockCompressedOutputStream blockOut = new BlockCompressedOutputStream(outputStream, null);
- IOUtil.transferByStream(blockIn, blockOut, remainingInBlock);
- blockOut.flush();
- // Don't close blockOut because closing underlying stream would break everything
- }
-
- long pos = BlockCompressedFilePointerUtil.getBlockAddress(blockIn.getFilePointer());
- blockIn.close();
- while (pos > 0) {
- pos -= in.skip(pos);
- }
- }
-
- // Copy remainder of input stream into output stream
- final long currentPos = in.getChannel().position();
- final long length = inputFile.length();
- final long skipLast = ((term == BlockCompressedInputStream.FileTermination.HAS_TERMINATOR_BLOCK) && skipTerminator) ?
- BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length : 0;
- final long bytesToWrite = length - skipLast - currentPos;
-
- IOUtil.transferByStream(in, outputStream, bytesToWrite);
- } catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- } finally {
- CloserUtil.close(in);
- }
- }
-
- /**
- * Assumes that all inputs and outputs are block compressed VCF files and copies them without decompressing and parsing
- * most of the gzip blocks. Will decompress and parse blocks up to the one containing the end of the header in each file
- * (often the first block) and re-compress any data remaining in that block into a new block in the output file. Subsequent
- * blocks (excluding a terminator block if present) are copied directly from input to output.
- */
- public static void gatherWithBlockCopying(final List<File> bams, final File output, final boolean createIndex, final boolean createMd5) {
- try {
- OutputStream out = new FileOutputStream(output);
- if (createMd5) out = new Md5CalculatingOutputStream(out, new File(output.getAbsolutePath() + ".md5"));
- if (createIndex) out = new StreamInflatingIndexingOutputStream(out, new File(output.getParentFile(), IOUtil.basename(output) + BAMIndex.BAMIndexSuffix));
- boolean isFirstFile = true;
-
- for (final File f : bams) {
- blockCopyBamFile(f, out, !isFirstFile, true);
- isFirstFile = false;
- }
-
- // And lastly add the Terminator block and close up
- out.write(BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK);
- out.close();
- }
- catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- }
- }
-
- private static OutputStream buildOutputStream(final File outputFile, final boolean createMd5, final boolean createIndex) throws IOException {
- OutputStream outputStream = new FileOutputStream(outputFile);
- if (createMd5) outputStream = new Md5CalculatingOutputStream(outputStream, new File(outputFile.getAbsolutePath() + ".md5"));
- if (createIndex) outputStream = new StreamInflatingIndexingOutputStream(outputStream, new File(outputFile.getParentFile(), IOUtil.basename(outputFile) + BAMIndex.BAMIndexSuffix));
- return outputStream;
- }
-
- private static void assertSortOrdersAreEqual(final SAMFileHeader newHeader, final File inputFile) throws IOException {
- final SAMFileHeader origHeader = new SAMFileReader(inputFile).getFileHeader();
- final SAMFileHeader.SortOrder newSortOrder = newHeader.getSortOrder();
- if (newSortOrder != SAMFileHeader.SortOrder.unsorted && newSortOrder != origHeader.getSortOrder()) {
- throw new SAMException("Sort order of new header does not match the original file, needs to be " + origHeader.getSortOrder());
- }
- }
-}
diff --git a/src/java/net/sf/samtools/BamIndexValidator.java b/src/java/net/sf/samtools/BamIndexValidator.java
deleted file mode 100644
index 7ebbd45..0000000
--- a/src/java/net/sf/samtools/BamIndexValidator.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-
-/**
- * One crisp, informative sentence or noun phrase that explains
- * the concept modeled by the class.
- * <p/>
- * This class is [<em>not</em>] thread safe [because it is immutable].
- */
-public class BamIndexValidator {
-
- public static int exhaustivelyTestIndex(SAMFileReader reader) { // throws Exception {
- // look at all chunk offsets in a linear index to make sure they are valid
-
- if (reader.hasBrowseableIndex()) {
-
- // content is from an existing bai file
- final CachingBAMFileIndex existingIndex = (CachingBAMFileIndex) reader.getBrowseableIndex(); // new CachingBAMFileIndex(inputBai, null);
- final int n_ref = existingIndex.getNumberOfReferences();
-
- int chunkCount = 0;
- int indexCount = 0;
- for (int i = 0; i < n_ref; i++) {
- BAMIndexContent content = existingIndex.getQueryResults(i);
- for (Chunk c : content.getAllChunks()) {
- final CloseableIterator<SAMRecord> iter = reader.iterator(new BAMFileSpan(c));
- chunkCount++;
- BAMRecord b = null;
- try {
- // if (iter.hasNext()) { // not needed since there should be something there
- b = (BAMRecord) iter.next();
- // }
- iter.close();
- } catch (Exception e) {
- throw new SAMException("Exception in BamIndexValidator. Last good record " + b + " in chunk " + c + " chunkCount=" + chunkCount, e);
- }
- }
- // also seek to every position in the linear index
- // final BAMRecordCodec bamRecordCodec = new BAMRecordCodec(reader.getFileHeader());
- // bamRecordCodec.setInputStream(reader.getInputStream());
-
- LinearIndex linearIndex = content.getLinearIndex();
- for (long l : linearIndex.getIndexEntries()) {
- try {
- if (l != 0) {
- final CloseableIterator<SAMRecord> iter = reader.iterator(new BAMFileSpan(new Chunk(l, l + 1)));
- BAMRecord b = (BAMRecord) iter.next(); // read the first record identified by the linear index
- indexCount++;
- iter.close();
- }
- } catch (Exception e) {
- throw new SAMException("Exception in BamIndexValidator. Linear index access failure " + l + " indexCount=" + indexCount, e);
- }
-
- }
- }
- return chunkCount;
- // System.out.println("Found " chunkCount + " chunks in test " + inputBai +
- // " linearIndex positions = " + indexCount);
- } // else not a bam file with a browseable index
- // System.err.println("No browseableIndex for reader");
- return 0;
- }
-
-}
diff --git a/src/java/net/sf/samtools/Bin.java b/src/java/net/sf/samtools/Bin.java
deleted file mode 100644
index 7f4f5c6..0000000
--- a/src/java/net/sf/samtools/Bin.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * An individual bin in a BAM file.
- *
- * @author mhanna
- * @version 0.1
- */
-public class Bin implements Comparable<Bin> {
- /**
- * The reference sequence associated with this bin.
- */
- private final int referenceSequence;
-
- /**
- * The number of this bin within the BAM file.
- */
- private final int binNumber;
-
- /**
- * The chunks associated with this bin.
- */
- private List<Chunk> chunkList;
-
- /**
- * The last chunk in the chunkList. Only maintained during index building,
- * not when reading existing index
- */
- private Chunk lastChunk;
-
- public Bin(final int referenceSequence, final int binNumber) {
- this.referenceSequence = referenceSequence;
- this.binNumber = binNumber;
- }
-
- protected int getReferenceSequence() {
- return referenceSequence;
- }
-
- public int getBinNumber() {
- return binNumber;
- }
-
- /**
- * See whether two bins are equal. If the ref seq and the bin number
- * are equal, assume equality of the chunk list.
- * @param other The other Bin to which to compare this.
- * @return True if the two bins are equal. False otherwise.
- */
- @Override
- public boolean equals(final Object other) {
- if(other == null) return false;
- if(!(other instanceof Bin)) return false;
-
- final Bin otherBin = (Bin)other;
- return this.referenceSequence == otherBin.referenceSequence && this.binNumber == otherBin.binNumber;
- }
-
- /**
- * Compute a unique hash code for the given reference sequence and bin number.
- * @return A unique hash code.
- */
- @Override
- public int hashCode() {
- return ((Integer)referenceSequence).hashCode() ^ ((Integer)binNumber).hashCode();
- }
-
- /**
- * Returns whether the bin currently contains chunks.
- * @return True if the bin has chunks, false otherwise.
- */
- public boolean containsChunks() {
- return chunkList != null;
- }
-
- /**
- * Compare two bins to see what ordering they should appear in.
- * @param other Other bin to which this bin should be compared.
- * @return -1 if this < other, 0 if this == other, 1 if this > other.
- */
- public int compareTo(final Bin other) {
- if(other == null)
- throw new ClassCastException("Cannot compare to a null object");
-
- // Check the reference sequences first.
- if(this.referenceSequence != other.referenceSequence)
- return referenceSequence - other.referenceSequence;
-
- // Then check the bin ordering.
- return binNumber - other.binNumber;
- }
-
- /**
- * Adds the first chunk to the bin
- */
- public void addInitialChunk(final Chunk newChunk){
- final List<Chunk> oldChunks = new ArrayList<Chunk>();
- setChunkList(oldChunks);
- setLastChunk(newChunk);
- oldChunks.add(newChunk);
- }
-
- /**
- * Sets the chunks associated with this bin
- */
- public void setChunkList(final List<Chunk> list){
- chunkList = list;
- }
-
- /**
- * Gets the list of chunks associated with this bin.
- * @return the chunks in this bin. If no chunks are associated, an empty list will be returned.
- */
- public List<Chunk> getChunkList(){
- if(chunkList == null)
- return Collections.<Chunk>emptyList();
- return chunkList;
- }
-
- /**
- * Optimization to keep lastChunk instead of iterating over all chunks repeatedly
- */
- public void setLastChunk(final Chunk c){
- lastChunk = c;
- }
-
- /**
- * Warning: Currently only valid during index building, not when reading existing index,
- * (AbstractBAMFileIndex.optimizeChunkList doesn't maintain this)
- * @return the last Chunk of the chunkList
- */
- public Chunk getLastChunk(){
- return lastChunk;
- }
-}
diff --git a/src/java/net/sf/samtools/BinList.java b/src/java/net/sf/samtools/BinList.java
deleted file mode 100644
index 29af568..0000000
--- a/src/java/net/sf/samtools/BinList.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.Iterator;
-import java.util.BitSet;
-import java.util.NoSuchElementException;
-
-/**
- * Provides a list of all bins which could exist in the BAM file.
- * Allows the user to iterate over all bins, selecting ones of interest
- * for later inspection.
- *
- * @author mhanna
- * @version 0.1
- */
-public class BinList implements Iterable<Bin> {
- /**
- * The reference sequence relevant to this bin list.
- */
- private final int referenceSequence;
-
- /**
- * For each sequence, which bins should be included in the BitSet.
- */
- private final BitSet bins;
-
- /**
- * Create a new BinList over sequenceCount sequences, consisting of the given bins.
- * @param referenceSequence Reference sequence to which these bins are relevant.
- * @param bins The given bins to include.
- */
- protected BinList(final int referenceSequence, final BitSet bins) {
- this.referenceSequence = referenceSequence;
- this.bins = bins;
- }
-
- /**
- * Gets an iterator over all selected bins.
- * @return An iterator over all selected bins.
- */
- public Iterator<Bin> iterator() {
- return new BinIterator();
- }
-
- /**
- * Get the reference sequence to which this bin belongs.
- * @return Integer representing the reference sequence.
- */
- protected int getReferenceSequence() {
- return referenceSequence;
- }
-
- /**
- * Retrieves the bins stored in this list.
- * @return A bitset where a bin is present in the list if the bit is true.
- */
- protected BitSet getBins() {
- return bins;
- }
-
- private class BinIterator implements Iterator<Bin> {
- /**
- * Stores the bin currently in use. Will be -1 if no more bins remain in the set.
- */
- private int nextBin;
-
- public BinIterator() {
- // Initialize the bin iterator to just before the first bin.
- nextBin = bins.nextSetBit(0);
- }
-
- /**
- * Are there more bins in this set, waiting to be returned?
- * @return True if more bins are remaining.
- */
- public boolean hasNext() {
- return nextBin >= 0;
- }
-
- /**
- * Gets the next bin in the provided BinList.
- * @return the next available bin in the BinList.
- */
- public Bin next() {
- if(!hasNext())
- throw new NoSuchElementException("This BinIterator is currently empty");
- int currentBin = nextBin;
- nextBin = bins.nextSetBit(nextBin+1);
- return new Bin(referenceSequence,currentBin);
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Unable to remove from a bin iterator");
- }
- }
-}
-
diff --git a/src/java/net/sf/samtools/BinaryBAMIndexWriter.java b/src/java/net/sf/samtools/BinaryBAMIndexWriter.java
deleted file mode 100644
index c0a009e..0000000
--- a/src/java/net/sf/samtools/BinaryBAMIndexWriter.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools;
-
-import net.sf.samtools.util.BinaryCodec;
-
-import java.io.*;
-import java.util.List;
-
-/**
- * Class for writing binary BAM index files
- */
-class BinaryBAMIndexWriter implements BAMIndexWriter {
-
- protected final int nRef;
- private final BinaryCodec codec;
- private int count = 0;
-
- /**
- * constructor
- *
- * @param nRef Number of reference sequences
- * @param output BAM Index output file
- */
- public BinaryBAMIndexWriter(final int nRef, final File output) {
-
- this.nRef = nRef;
-
- try {
- codec = new BinaryCodec(output, true);
- writeHeader();
- } catch (final Exception e) {
- throw new SAMException("Exception opening output file " + output, e);
- }
- }
-
- /**
- *
- * @param nRef Number of reference sequences.
- * @param output BAM index output stream. This stream will be closed when BinaryBAMIndexWriter.close() is called.
- */
- public BinaryBAMIndexWriter(final int nRef, final OutputStream output) {
-
- this.nRef = nRef;
-
- try {
- codec = new BinaryCodec(output);
- writeHeader();
- } catch (final Exception e) {
- throw new SAMException("Exception opening output stream", e);
- }
- }
-
- /**
- * Write this content as binary output
- */
- public void writeReference(final BAMIndexContent content) {
-
- if (content == null) {
- writeNullContent();
- count++;
- return;
- }
-
- if (content.getReferenceSequence() != count){
- throw new SAMException("Unexpectedly writing reference " + content.getReferenceSequence() +
- ", expecting reference " + count);
- }
- count ++;
-
- // write bins
-
- final BAMIndexContent.BinList bins = content.getBins();
- final int size = bins == null ? 0 : content.getNumberOfNonNullBins();
-
- if (size == 0) {
- writeNullContent();
- return;
- }
-
- //final List<Chunk> chunks = content.getMetaData() == null ? null
- // : content.getMetaData().getMetaDataChunks();
- final BAMIndexMetaData metaData = content.getMetaData();
-
- codec.writeInt(size + ((metaData != null)? 1 : 0 ));
- // codec.writeInt(size);
- for (final Bin bin : bins) { // note, bins will always be sorted
- if (bin.getBinNumber() == GenomicIndexUtil.MAX_BINS)
- continue;
- writeBin(bin);
- }
-
- // write metadata "bin" and chunks
- if (metaData != null)
- writeChunkMetaData(metaData);
-
- // write linear index
-
- final LinearIndex linearIndex = content.getLinearIndex();
- final long[] entries = linearIndex == null ? null : linearIndex.getIndexEntries();
- final int indexStart = linearIndex == null ? 0 : linearIndex.getIndexStart();
- final int n_intv = entries == null ? indexStart : entries.length + indexStart;
- codec.writeInt(n_intv);
- if (entries == null) {
- return;
- }
- // since indexStart is usually 0, this is usually a no-op
- for (int i = 0; i < indexStart; i++) {
- codec.writeLong(0);
- }
- for (int k = 0; k < entries.length; k++) {
- codec.writeLong(entries[k]);
- }
- try {
- codec.getOutputStream().flush();
- } catch (final IOException e) {
- throw new SAMException("IOException in BinaryBAMIndexWriter reference " + content.getReferenceSequence(), e);
- }
- }
-
- /**
- * Writes out the count of records without coordinates
- *
- * @param count
- */
- public void writeNoCoordinateRecordCount(final Long count) {
- codec.writeLong(count == null ? 0 : count);
- }
-
- /**
- * Any necessary processing at the end of the file
- */
- public void close() {
- codec.close();
- }
-
- private void writeBin(final Bin bin) {
- final int binNumber = bin.getBinNumber();
- if (binNumber >= GenomicIndexUtil.MAX_BINS){
- throw new SAMException("Unexpected bin number when writing bam index " + binNumber);
- }
-
- codec.writeInt(binNumber);
- if (bin.getChunkList() == null){
- codec.writeInt(0);
- return;
- }
- final List<Chunk> chunkList = bin.getChunkList();
- final int n_chunk = chunkList.size();
- codec.writeInt(n_chunk);
- for (final Chunk c : chunkList) {
- codec.writeLong(c.getChunkStart());
- codec.writeLong(c.getChunkEnd());
- }
- }
-
- /**
- * Write the meta data represented by the chunkLists associated with bin MAX_BINS 37450
- *
- * @param metaData information describing numAligned records, numUnAligned, etc
- */
- private void writeChunkMetaData(final BAMIndexMetaData metaData) {
- codec.writeInt(GenomicIndexUtil.MAX_BINS);
- final int nChunk = 2;
- codec.writeInt(nChunk);
- codec.writeLong(metaData.getFirstOffset());
- codec.writeLong(metaData.getLastOffset());
- codec.writeLong(metaData.getAlignedRecordCount());
- codec.writeLong(metaData.getUnalignedRecordCount());
-
- }
-
- private void writeHeader() {
- // magic string
- final byte[] magic = BAMFileConstants.BAM_INDEX_MAGIC;
- codec.writeBytes(magic);
- codec.writeInt(nRef);
- }
-
- private void writeNullContent() {
- codec.writeLong(0); // 0 bins , 0 intv
- }
-}
diff --git a/src/java/net/sf/samtools/BinaryCigarCodec.java b/src/java/net/sf/samtools/BinaryCigarCodec.java
deleted file mode 100644
index c8174a2..0000000
--- a/src/java/net/sf/samtools/BinaryCigarCodec.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.nio.ByteBuffer;
-
-/**
- * Converter between disk and in-memory (object, not String) CIGAR representation.
- */
-class BinaryCigarCodec {
- private static final BinaryCigarCodec singleton = new BinaryCigarCodec();
-
- /**
- * It is not necssary to get the singleton but it is preferrable to use the same one
- * over and over vs. creating a new object for each BAMRecord. This class has no state
- * so this is thread-safe.
- */
- static BinaryCigarCodec getSingleton() {
- return singleton;
- }
-
- /**
- * Convert CIGAR from object representation to disk representation.
- * @return Array of unsigned ints, one for each element of CIGAR.
- */
- int[] encode(final Cigar cigar) {
- if (cigar.numCigarElements() == 0) {
- return new int[0];
- }
-
- // Binary rep can be no longer than 1/2 of text rep
- // Although this is documented as uint, I think lengths will never get that long,
- // and it's a pain in Java.
- final int[] binaryCigar = new int[cigar.numCigarElements()];
- int binaryCigarLength = 0;
- for (int i = 0; i < cigar.numCigarElements(); ++i) {
- final CigarElement cigarElement = cigar.getCigarElement(i);
- final int op = CigarOperator.enumToBinary(cigarElement.getOperator());
- binaryCigar[binaryCigarLength++] = cigarElement.getLength() << 4 | op;
- }
- return binaryCigar;
- }
-
- /**
- * Convert CIGAR from disk representation to object.
- * @param binaryCigar ByteArray that is assumed to have byte order set appropriately for extracting ints.
- */
- Cigar decode(final ByteBuffer binaryCigar) {
- final Cigar ret = new Cigar();
- while (binaryCigar.hasRemaining()) {
- final int cigarette = binaryCigar.getInt();
- ret.add(binaryCigarToCigarElement(cigarette));
- }
- return ret;
- }
-
- /**
- * Convert CIGAR from disk representation to object.
- * @param binaryCigar Array of unsigned ints, one for each CIGAR element.
- */
- Cigar decode(final int[] binaryCigar) {
- final Cigar ret = new Cigar();
- for (final int cigarette : binaryCigar) {
- ret.add(binaryCigarToCigarElement(cigarette));
- }
- return ret;
- }
-
- /**
- * @param cigarette CIGAR element (operator + length) encoded as an unsigned int.
- * @return Object representation of the CIGAR element.
- */
- private static CigarElement binaryCigarToCigarElement(final int cigarette) {
- final int binaryOp = cigarette & 0xf;
- final int length = cigarette >> 4;
- return new CigarElement(length, CigarOperator.binaryToEnum(binaryOp));
- }
-}
diff --git a/src/java/net/sf/samtools/BinaryTagCodec.java b/src/java/net/sf/samtools/BinaryTagCodec.java
deleted file mode 100644
index 72de523..0000000
--- a/src/java/net/sf/samtools/BinaryTagCodec.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.BinaryCodec;
-import net.sf.samtools.util.StringUtil;
-
-import java.lang.reflect.Array;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Converter between disk and in-memory representation of a SAMRecord tag.
- */
-class BinaryTagCodec {
- // Size in bytes of the fixed part of the disk representation of a tag,
- // i.e. the number of bytes occupied by the tag name and tag type fields.
- private static final int FIXED_TAG_SIZE = 3;
-
- // Size in bytes of the fixed part of the value of a binary array,
- // i.e. the number of bytes occupied by the array type and the array length.
- private static final int FIXED_BINARY_ARRAY_TAG_SIZE = 5;
-
- // Integers are stored in the smallest size that will hold them.
- private static final long MAX_INT = Integer.MAX_VALUE;
- private static final long MAX_UINT = MAX_INT * 2 + 1;
- private static final long MAX_SHORT = Short.MAX_VALUE;
- private static final long MAX_USHORT = MAX_SHORT * 2 + 1;
- private static final long MAX_BYTE = Byte.MAX_VALUE;
- private static final long MAX_UBYTE = MAX_BYTE * 2 + 1;
-
- // Source or sink for disk representation.
- final BinaryCodec binaryCodec;
-
- /**
- * For writing tags.
- * For reading tags, a BinaryCodec is not used. See readTags() below.
- * @param binaryCodec where to write the file rep of the tags
- */
- BinaryTagCodec(final BinaryCodec binaryCodec) {
- this.binaryCodec = binaryCodec;
- }
-
- /**
- * @param attributeValue In-memory representation of a tag value.
- * @return Size in bytes to store the value on disk.
- */
- private static int getBinaryValueSize(final Object attributeValue) {
- switch (getTagValueType(attributeValue)) {
- case 'Z':
- return ((String)attributeValue).length() + 1;
- case 'A':
- return 1;
- case 'I':
- case 'i':
- return 4;
- case 's':
- case 'S':
- return 2;
- case 'c':
- case 'C':
- return 1;
- case 'f':
- return 4;
- case 'H':
- final byte[] byteArray = (byte[])attributeValue;
- return byteArray.length * 2 + 1;
- case 'B':
- final int numElements = Array.getLength(attributeValue);
- final int elementSize;
- if(attributeValue instanceof byte[]) {
- elementSize = 1;
- } else if(attributeValue instanceof short[]) {
- elementSize = 2;
- } else if(attributeValue instanceof int[]) {
- elementSize = 4;
- } else if(attributeValue instanceof float[]) {
- elementSize = 4;
- } else {
- throw new IllegalArgumentException("Unsupported array type: " + attributeValue.getClass());
- }
- return numElements * elementSize + FIXED_BINARY_ARRAY_TAG_SIZE;
- default:
- throw new IllegalArgumentException("When writing BAM, unrecognized tag type " +
- attributeValue.getClass().getName());
- }
- }
-
- /**
- * @param value In-memory representation of a tag value.
- * @return Size in bytes to store the tag name, tag type and tag value on disk.
- */
- static int getTagSize(final Object value) {
- return FIXED_TAG_SIZE + getBinaryValueSize(value);
- }
-
- /**
- * @param value In-memory representation of a tag value.
- * @return One-character disk representation of tag type.
- */
- static char getTagValueType(final Object value) {
- if (value instanceof String) {
- return 'Z';
- } else if (value instanceof Character) {
- return 'A';
- } else if (value instanceof Float) {
- return 'f';
- } else if (value instanceof Number) {
- if (!(value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long)) {
- throw new IllegalArgumentException("Unrecognized tag type " + value.getClass().getName());
- }
- return getIntegerType(((Number)value).longValue());
- } /*
- Note that H tag type is never written anymore, because B style is more compact.
- else if (value instanceof byte[]) {
- return 'H';
- }
- */
- else if (value instanceof byte[] || value instanceof short[] || value instanceof int[] || value instanceof float[]) {
- return 'B';
- } else {
- throw new IllegalArgumentException("When writing BAM, unrecognized tag type " +
- value.getClass().getName());
- }
- }
-
- /**
- * @param val Integer tag value.
- * @return Tag type corresponding to the smallest integer type that will hold the given value.
- */
- static private char getIntegerType(final long val) {
- if (val > MAX_UINT) {
- throw new IllegalArgumentException("Integer attribute value too large to be encoded in BAM");
- }
- if (val > MAX_INT) {
- return 'I';
- }
- if (val > MAX_USHORT) {
- return 'i';
- }
- if (val > MAX_SHORT) {
- return 'S';
- }
- if (val > MAX_UBYTE) {
- return 's';
- }
- if (val > MAX_BYTE) {
- return 'C';
- }
- if (val >= Byte.MIN_VALUE) {
- return 'c';
- }
- if (val >= Short.MIN_VALUE) {
- return 's';
- }
- if (val >= Integer.MIN_VALUE) {
- return 'i';
- }
- throw new IllegalArgumentException("Integer attribute value too negative to be encoded in BAM");
- }
-
- /**
- * Write the given tag name and value to disk.
- */
- void writeTag(final short tag, final Object value, final boolean isUnsignedArray) {
- binaryCodec.writeShort(tag);
- final char tagValueType = getTagValueType(value);
- binaryCodec.writeByte(tagValueType);
-
- switch (tagValueType) {
- case 'Z':
- binaryCodec.writeString((String)value, false, true);
- break;
- case 'A':
- binaryCodec.writeByte(((Character)value));
- break;
- case 'I':
- binaryCodec.writeUInt((Long)value);
- break;
- case 'i':
- binaryCodec.writeInt(((Number)value).intValue());
- break;
- case 's':
- binaryCodec.writeShort(((Number)value).shortValue());
- break;
- case 'S':
- binaryCodec.writeUShort(((Number)value).intValue());
- break;
- case 'c':
- binaryCodec.writeByte(((Number)value).byteValue());
- break;
- case 'C':
- binaryCodec.writeUByte(((Integer)value).shortValue());
- break;
- case 'f':
- binaryCodec.writeFloat((Float)value);
- break;
- /*
- Writing H is no longer supported
- case 'H':
- final byte[] byteArray = (byte[])value;
- binaryCodec.writeString(StringUtil.bytesToHexString(byteArray), false, true);
- break;
- */
- case 'B':
- writeArray(value, isUnsignedArray);
- break;
- default:
- throw new IllegalArgumentException("When writing BAM, unrecognized tag type " +
- value.getClass().getName());
- }
- }
-
- private void writeArray(final Object value, final boolean isUnsignedArray) {
- if (value instanceof byte[]) {
- binaryCodec.writeByte(isUnsignedArray? 'C': 'c');
- final byte[] array = (byte[]) value;
- binaryCodec.writeInt(array.length);
- for (final byte element: array) binaryCodec.writeByte(element);
-
- } else if (value instanceof short[]) {
- binaryCodec.writeByte(isUnsignedArray? 'S': 's');
- final short[] array = (short[]) value;
- binaryCodec.writeInt(array.length);
- for (final short element: array) binaryCodec.writeShort(element);
-
- } else if (value instanceof int[]) {
- binaryCodec.writeByte(isUnsignedArray? 'I': 'i');
- final int[] array = (int[]) value;
- binaryCodec.writeInt(array.length);
- for (final int element: array) binaryCodec.writeInt(element);
-
- } else if (value instanceof float[]) {
- binaryCodec.writeByte('f');
- final float[] array = (float[]) value;
- binaryCodec.writeInt(array.length);
- for (final float element: array) binaryCodec.writeFloat(element);
-
- } else throw new SAMException("Unrecognized array value type: " + value.getClass());
- }
-
- /**
- * Convert tags from little-endian disk representation to in-memory representation.
- * @param binaryRep Byte buffer containing file representation of tags.
- * @param offset Where in binaryRep tags start.
- * @param length How many bytes in binaryRep are tag storage.
- */
- static SAMBinaryTagAndValue readTags(final byte[] binaryRep, final int offset,
- final int length, final SAMFileReader.ValidationStringency validationStringency) {
- final ByteBuffer byteBuffer = ByteBuffer.wrap(binaryRep, offset, length);
- byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-
- SAMBinaryTagAndValue head = null;
- SAMBinaryTagAndValue tail = null;
-
- while (byteBuffer.hasRemaining()) {
- final short tag = byteBuffer.getShort();
- final byte tagType = byteBuffer.get();
- final SAMBinaryTagAndValue tmp;
- if (tagType != 'B') {
- tmp = new SAMBinaryTagAndValue(tag, readSingleValue(tagType, byteBuffer, validationStringency));
- } else {
- final TagValueAndUnsignedArrayFlag valueAndFlag = readArray(byteBuffer, validationStringency);
- if (valueAndFlag.isUnsignedArray) tmp = new SAMBinaryTagAndUnsignedArrayValue(tag, valueAndFlag.value);
- else tmp = new SAMBinaryTagAndValue(tag, valueAndFlag.value);
- }
-
- // If samjdk wrote the BAM then the attributes will be in lowest->highest tag order, to inserting at the
- // head each time will be very inefficient. To fix that we check here to see if the tag should go right on
- // the tail and if so stick it there, else insert it through the head.
- if (head == null) {
- head = tmp;
- tail = tmp;
- }
- else if (tmp.tag > tail.tag) {
- tail.insert(tmp);
- tail = tmp;
- }
- else {
- head = head.insert(tmp);
- }
- }
-
- return head;
- }
-
- /**
- * Read value of specified non-array type.
- * @param tagType What type to read.
- * @param byteBuffer Little-ending byte buffer to read value from.
- * @return Value in in-memory Object form.
- */
- private static Object readSingleValue(final byte tagType, final ByteBuffer byteBuffer,
- final SAMFileReader.ValidationStringency validationStringency) {
- switch (tagType) {
- case 'Z':
- return readNullTerminatedString(byteBuffer);
- case 'A':
- return (char)byteBuffer.get();
- case 'I':
- final long val = byteBuffer.getInt() & 0xffffffffL;
- if (val <= Integer.MAX_VALUE) {
- return (int)val;
- }
- SAMUtils.processValidationError(new SAMValidationError(SAMValidationError.Type.TAG_VALUE_TOO_LARGE,
- "Tag value " + val + " too large to store as signed integer.", null), validationStringency);
- // convert to unsigned int stored in a long
- return val;
- case 'i':
- return byteBuffer.getInt();
- case 's':
- return (int)byteBuffer.getShort();
- case 'S':
- // Convert to unsigned short stored in an int
- return byteBuffer.getShort() & 0xffff;
- case 'c':
- return (int)byteBuffer.get();
- case 'C':
- // Convert to unsigned byte stored in an int
- return (int)byteBuffer.get() & 0xff;
- case 'f':
- return byteBuffer.getFloat();
- case 'H':
- final String hexRep = readNullTerminatedString(byteBuffer);
- return StringUtil.hexStringToBytes(hexRep);
- default:
- throw new SAMFormatException("Unrecognized tag type: " + (char)tagType);
- }
- }
-
-
-
-
- /**
- * Read value of specified type.
- * @param byteBuffer Little-ending byte buffer to read value from.
- * @return CVO containing the value in in-memory Object form, and a flag indicating whether it is unsigned or not.
- */
- private static TagValueAndUnsignedArrayFlag readArray(final ByteBuffer byteBuffer,
- final SAMFileReader.ValidationStringency validationStringency) {
- final byte arrayType = byteBuffer.get();
- final boolean isUnsigned = Character.isUpperCase(arrayType);
- final int length = byteBuffer.getInt();
- final Object value;
- switch (Character.toLowerCase(arrayType)) {
- case 'c': {
- final byte[] array = new byte[length];
- value = array;
- byteBuffer.get(array);
- break;
- }
- case 's': {
- final short[] array = new short[length];
- value = array;
- for (int i = 0; i < length; ++i) {
- array[i] = byteBuffer.getShort();
- }
- break;
- }
-
- case 'i': {
- final int[] array = new int[length];
- value = array;
- for (int i = 0; i < length; ++i) {
- array[i] = byteBuffer.getInt();
- }
- break;
- }
-
- case 'f': {
- final float[] array = new float[length];
- value = array;
- for (int i = 0; i < length; ++i) {
- array[i] = byteBuffer.getFloat();
- }
- break;
- }
-
- default:
- throw new SAMFormatException("Unrecognized tag array type: " + (char)arrayType);
- }
- return new TagValueAndUnsignedArrayFlag(value, isUnsigned);
- }
-
- private static String readNullTerminatedString(final ByteBuffer byteBuffer) {
- // Count the number of bytes in the string
- byteBuffer.mark();
- final int startPosition = byteBuffer.position();
- while (byteBuffer.get() != 0) {}
- final int endPosition = byteBuffer.position();
-
- // Don't count null terminator
- final byte[] buf = new byte[endPosition - startPosition - 1];
- // Go back to the start of the string and read out the bytes
- byteBuffer.reset();
- byteBuffer.get(buf);
- // Skip over the null terminator
- byteBuffer.get();
- return StringUtil.bytesToString(buf);
- }
-}
diff --git a/src/java/net/sf/samtools/BinningIndexBuilder.java b/src/java/net/sf/samtools/BinningIndexBuilder.java
deleted file mode 100644
index e3d5492..0000000
--- a/src/java/net/sf/samtools/BinningIndexBuilder.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.BlockCompressedFilePointerUtil;
-
-import java.util.List;
-
-import static net.sf.samtools.GenomicIndexUtil.MAX_BINS;
-
-/**
- * Builder for a BinningIndexContent object.
- */
-public class BinningIndexBuilder {
- private final int referenceSequence;
- // the bins for the current reference
- private final Bin[] bins; // made only as big as needed for each reference
- private int binsSeen = 0;
-
- // linear index for the current reference
- private final long[] index = new long[LinearIndex.MAX_LINEAR_INDEX_SIZE];
- private int largestIndexSeen = -1;
-
-
- /**
- *
- * @param referenceSequence
- * @param sequenceLength 0 implies unknown length. Known length will reduce memory use.
- */
- public BinningIndexBuilder(final int referenceSequence, final int sequenceLength) {
- this.referenceSequence = referenceSequence;
- final int numBins;
- if (sequenceLength <= 0) numBins = MAX_BINS + 1;
- else numBins = AbstractBAMFileIndex.getMaxBinNumberForSequenceLength(sequenceLength) + 1;
- bins = new Bin[numBins];
- }
-
- public BinningIndexBuilder(final int referenceSequence) {
- this(referenceSequence, 0);
- }
-
- /**
- * coordinates are 1-based, inclusive
- */
- public interface FeatureToBeIndexed {
- public int getStart();
- public int getEnd();
- public Integer getIndexingBin();
- public Chunk getChunk();
- }
-
- public void processFeature(final FeatureToBeIndexed feature) {
-
- // process bins
-
- final Integer binNumber = feature.getIndexingBin();
- final int binNum = binNumber == null ? computeIndexingBin(feature) : binNumber;
-
-
- // is there a bin already represented for this index? if not, add one
- final Bin bin;
- if (bins[binNum] != null) {
- bin = bins[binNum];
- } else {
- bin = new Bin(referenceSequence, binNum);
- bins[binNum] = bin;
- binsSeen++;
- }
-
- // process chunks
-
- final Chunk newChunk = feature.getChunk();
- final long chunkStart = newChunk.getChunkStart();
- final long chunkEnd = newChunk.getChunkEnd();
-
- final List<Chunk> oldChunks = bin.getChunkList();
- if (!bin.containsChunks()) {
- bin.addInitialChunk(newChunk);
-
- } else {
- final Chunk lastChunk = bin.getLastChunk();
-
- // Coalesce chunks that are in the same or adjacent file blocks.
- // Similar to AbstractBAMFileIndex.optimizeChunkList,
- // but no need to copy the list, no minimumOffset, and maintain bin.lastChunk
- if (BlockCompressedFilePointerUtil.areInSameOrAdjacentBlocks(lastChunk.getChunkEnd(), chunkStart)) {
- lastChunk.setChunkEnd(chunkEnd); // coalesced
- } else {
- oldChunks.add(newChunk);
- bin.setLastChunk(newChunk);
- }
- }
-
- // process linear index
-
- // the smallest file offset that appears in the 16k window for this bin
- final int featureEnd = feature.getEnd();
- int startWindow = LinearIndex.convertToLinearIndexOffset(feature.getStart()); // the 16k window
- final int endWindow;
-
- if (featureEnd == GenomicIndexUtil.UNSET_GENOMIC_LOCATION) { // assume feature uses one position
- // Next line for C (samtools index) compatibility. Differs only when on a window boundary
- startWindow = LinearIndex.convertToLinearIndexOffset(feature.getStart() - 1);
- endWindow = startWindow;
- } else {
- endWindow = LinearIndex.convertToLinearIndexOffset(featureEnd);
- }
-
- if (endWindow > largestIndexSeen) {
- largestIndexSeen = endWindow;
- }
-
- // set linear index at every 16K window that this feature overlaps
- for (int win = startWindow; win <= endWindow; win++) {
- if (index[win] == 0 || chunkStart < index[win]) {
- index[win] = chunkStart;
- }
- }
- }
-
- /**
- * Creates the BAMIndexContent for this reference.
- * Requires all features of the reference have already been processed.
- */
- public BinningIndexContent generateIndexContent() {
-
-
- // process bins
- if (binsSeen == 0) return null; // no bins for this reference
-
- // process chunks
- // nothing needed
-
- // process linear index
- // linear index will only be as long as the largest index seen
- final long[] newIndex = new long[largestIndexSeen + 1]; // in java1.6 Arrays.copyOf(index, largestIndexSeen + 1);
-
- // C (samtools index) also fills in intermediate 0's with values. This seems unnecessary, but safe
- long lastNonZeroOffset = 0;
- for (int i = 0; i <= largestIndexSeen; i++) {
- if (index[i] == 0) {
- index[i] = lastNonZeroOffset; // not necessary, but C (samtools index) does this
- // note, if you remove the above line BAMIndexWriterTest.compareTextual and compareBinary will have to change
- } else {
- lastNonZeroOffset = index[i];
- }
- newIndex[i] = index[i];
- }
-
- final LinearIndex linearIndex = new LinearIndex(referenceSequence, 0, newIndex);
-
- return new BinningIndexContent(referenceSequence, new BinningIndexContent.BinList(bins, binsSeen), linearIndex);
- }
-
- private int computeIndexingBin(final FeatureToBeIndexed feature) {
- // reg2bin has zero-based, half-open API
- final int start = feature.getStart()-1;
- int end = feature.getEnd();
- if (end <= 0) {
- // If feature end cannot be determined (e.g. because a read is not really aligned),
- // then treat this as a one base feature for indexing purposes.
- end = start + 1;
- }
- return GenomicIndexUtil.reg2bin(start, end);
- }
-}
diff --git a/src/java/net/sf/samtools/BinningIndexContent.java b/src/java/net/sf/samtools/BinningIndexContent.java
deleted file mode 100644
index 2054e7b..0000000
--- a/src/java/net/sf/samtools/BinningIndexContent.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.*;
-
-/**
- * In-memory representation of the binning index for a single reference. BAM and Tabix are both binning indices
- * with slightly different disk formats but identical in-memory representations.
- */
-public class BinningIndexContent {
- /**
- * The reference sequence for the data currently loaded.
- */
- private final int mReferenceSequence;
-
- /**
- * A list of all bins in the above reference sequence.
- */
- private final BinList mBinList;
-
- /**
- * The linear index for the reference sequence above.
- */
- private final LinearIndex mLinearIndex;
-
-
- /**
- * @param referenceSequence Content corresponds to this reference.
- * @param binList Array of bins represented by this content, possibly sparse
- * @param linearIndex Additional index used to optimize queries
- */
- public BinningIndexContent(final int referenceSequence, final BinList binList, final LinearIndex linearIndex) {
- this.mReferenceSequence = referenceSequence;
- this.mBinList = binList;
- this.mLinearIndex = linearIndex;
- }
-
- /**
- * Reference for this Content
- */
- public int getReferenceSequence() {
- return mReferenceSequence;
- }
-
- /**
- * Does this content have anything in this bin?
- */
- public boolean containsBin(final Bin bin) {
- return mBinList.getBin(bin.getBinNumber()) != null;
- }
-
- /**
- * @return iterable list of bins represented by this content
- */
- public BinList getBins() {
- return mBinList;
- }
-
- /**
- * @return the number of non-null bins represented by this content
- */
- int getNumberOfNonNullBins() {
- return mBinList.getNumberOfNonNullBins();
- }
-
- /**
- * @return all chunks associated with all bins in this content
- */
- public List<Chunk> getAllChunks() {
- final List<Chunk> allChunks = new ArrayList<Chunk>();
- for (final Bin b : mBinList)
- if (b.getChunkList() != null) {
- allChunks.addAll(b.getChunkList());
- }
- return Collections.unmodifiableList(allChunks);
- }
-
- /**
- * @return the linear index represented by this content
- */
- public LinearIndex getLinearIndex() {
- return mLinearIndex;
- }
-
-
- /**
- *
- * @param startPos 1-based, inclusive
- * @param endPos 1-based, inclusive
- * @return List of Chunks overlapping the given region. May return null if there are none.
- */
- public List<Chunk> getChunksOverlapping(final int startPos, final int endPos) {
- final BitSet overlappingBins = GenomicIndexUtil.regionToBins(startPos,endPos);
- if (overlappingBins == null) return null;
-
- // System.out.println("# Sequence target TID: " + referenceIndex);
- final List<Bin> bins = new ArrayList<Bin>();
- for(final Bin bin: this.getBins()) {
- if (overlappingBins.get(bin.getBinNumber()))
- bins.add(bin);
- }
-
- if (bins.isEmpty()) {
- return null;
- }
-
- final List<Chunk> chunkList = new ArrayList<Chunk>();
- for(final Bin bin: bins) {
- for(final Chunk chunk: bin.getChunkList())
- chunkList.add(chunk.clone());
- }
-
- if (chunkList.isEmpty()) {
- return null;
- }
-
- return Chunk.optimizeChunkList(chunkList,this.getLinearIndex().getMinimumOffset(startPos));
- }
- /**
- * This class is used to encapsulate the list of Bins store in the BAMIndexContent
- * While it is currently represented as an array, we may decide to change it to an ArrayList or other structure
- */
- public static class BinList implements Iterable<Bin> {
-
- private final Bin[] mBinArray;
- public final int numberOfNonNullBins;
- public final int maxBinNumber; // invariant: maxBinNumber = mBinArray.length -1 since array is 0 based
-
- /**
- * @param binArray a sparse array representation of the bins. The index into the array is the bin number.
- * @param numberOfNonNullBins
- */
- public BinList(final Bin[] binArray, final int numberOfNonNullBins) {
- this.mBinArray = binArray;
- this.numberOfNonNullBins = numberOfNonNullBins;
- this.maxBinNumber = mBinArray.length - 1;
- }
-
- Bin getBin(final int binNumber) {
- if (binNumber > maxBinNumber) return null;
- return mBinArray[binNumber];
- }
-
- int getNumberOfNonNullBins() {
- return numberOfNonNullBins;
- }
-
- /**
- * @return An iterator over all non-empty bins.
- */
- public Iterator<Bin> iterator() {
- return new BinIterator();
- }
-
- private class BinIterator implements Iterator<Bin> {
- /**
- * Stores the bin # of the Bin currently in use.
- */
- private int nextBin;
-
- public BinIterator() {
- nextBin = 0;
- }
-
- /**
- * Are there more bins in this set, waiting to be returned?
- *
- * @return True if more bins are remaining.
- */
- public boolean hasNext() {
- while (nextBin <= maxBinNumber) {
- if (getBin(nextBin) != null) return true;
- nextBin++;
- }
- return false;
- }
-
- /**
- * Gets the next bin in the provided BinList.
- *
- * @return the next available bin in the BinList.
- */
- public Bin next() {
- if (!hasNext())
- throw new NoSuchElementException("This BinIterator is currently empty");
- final Bin result = getBin(nextBin);
- nextBin++;
- return result;
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Unable to remove from a bin iterator");
- }
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final BinList bins = (BinList) o;
-
- if (maxBinNumber != bins.maxBinNumber) return false;
- if (numberOfNonNullBins != bins.numberOfNonNullBins) return false;
- if (!Arrays.equals(mBinArray, bins.mBinArray)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = Arrays.hashCode(mBinArray);
- result = 31 * result + numberOfNonNullBins;
- result = 31 * result + maxBinNumber;
- return result;
- }
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final BinningIndexContent that = (BinningIndexContent) o;
-
- if (mReferenceSequence != that.mReferenceSequence) return false;
- if (!mBinList.equals(that.mBinList)) return false;
- if (!mLinearIndex.equals(that.mLinearIndex)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = mReferenceSequence;
- result = 31 * result + mBinList.hashCode();
- result = 31 * result + mLinearIndex.hashCode();
- return result;
- }
-}
diff --git a/src/java/net/sf/samtools/BrowseableBAMIndex.java b/src/java/net/sf/samtools/BrowseableBAMIndex.java
deleted file mode 100644
index eaa1ffb..0000000
--- a/src/java/net/sf/samtools/BrowseableBAMIndex.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package net.sf.samtools;
-
-/**
- * An index interface with additional functionality for querying and inspecting the structure of a BAM index.
- *
- * @author mhanna
- * @version 0.1
- */
-public interface BrowseableBAMIndex extends BAMIndex {
-
- /**
- * Gets the size (number of bins in) a given level of a BAM index.
- * @param levelNumber Level for which to inspect the size.
- * @return Size of the given level.
- */
- public int getLevelSize(final int levelNumber);
-
- /**
- * Gets the level associated with the given bin number.
- * @param bin The bin for which to determine the level.
- * @return the level associated with the given bin number.
- */
- public int getLevelForBin(final Bin bin);
-
- /**
- * Gets the first locus that this bin can index into.
- * @param bin The bin to test.
- * @return The last position that the given bin can represent.
- */
- int getFirstLocusInBin(final Bin bin);
-
- /**
- * Gets the last locus that this bin can index into.
- * @param bin The bin to test.
- * @return The last position that the given bin can represent.
- */
- int getLastLocusInBin(final Bin bin);
-
- /**
- * Get a list of bins in the BAM file that may contain SAMRecords for the given range.
- * @param referenceIndex sequence of desired SAMRecords
- * @param startPos 1-based start of the desired interval, inclusive
- * @param endPos 1-based end of the desired interval, inclusive
- * @return a list of bins that contain relevant data.
- */
- BinList getBinsOverlapping(final int referenceIndex, final int startPos, final int endPos);
-
- /**
- * Perform an overlapping query of all bins bounding the given location.
- * @param bin The bin over which to perform an overlapping query.
- * @return The file pointers
- */
- BAMFileSpan getSpanOverlapping(final Bin bin);
-}
diff --git a/src/java/net/sf/samtools/CachingBAMFileIndex.java b/src/java/net/sf/samtools/CachingBAMFileIndex.java
deleted file mode 100644
index 65d777e..0000000
--- a/src/java/net/sf/samtools/CachingBAMFileIndex.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.seekablestream.SeekableStream;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Class for reading BAM file indices, caching each contig as it's loaded and
- * dropping values when the next contig is loaded.
- */
-class CachingBAMFileIndex extends AbstractBAMFileIndex implements BrowseableBAMIndex
-{
- private Integer mLastReferenceRetrieved = null;
- private final WeakHashMap<Integer,BAMIndexContent> mQueriesByReference = new WeakHashMap<Integer,BAMIndexContent>();
-
- public CachingBAMFileIndex(final File file, final SAMSequenceDictionary dictionary) {
- super(file, dictionary);
- }
-
- public CachingBAMFileIndex(final SeekableStream stream, final SAMSequenceDictionary dictionary) {
- super(stream, dictionary);
- }
-
- public CachingBAMFileIndex(final File file, final SAMSequenceDictionary dictionary, final boolean useMemoryMapping) {
- super(file, dictionary, useMemoryMapping);
- }
-
- /**
- * Get list of regions of BAM file that may contain SAMRecords for the given range
- * @param referenceIndex sequence of desired SAMRecords
- * @param startPos 1-based start of the desired interval, inclusive
- * @param endPos 1-based end of the desired interval, inclusive
- * @return the virtual file position. Each pair is the first and last virtual file position
- * in a range that can be scanned to find SAMRecords that overlap the given positions.
- * May return null if there is no content overlapping the region.
- */
- public BAMFileSpan getSpanOverlapping(final int referenceIndex, final int startPos, final int endPos) {
- final BAMIndexContent queryResults = getQueryResults(referenceIndex);
-
- if(queryResults == null)
- return null;
-
- final List<Chunk> chunkList = queryResults.getChunksOverlapping(startPos, endPos);
- if (chunkList == null) return null;
-
- return new BAMFileSpan(chunkList);
- }
-
- /**
- * Get a list of bins in the BAM file that may contain SAMRecords for the given range.
- * @param referenceIndex sequence of desired SAMRecords
- * @param startPos 1-based start of the desired interval, inclusive
- * @param endPos 1-based end of the desired interval, inclusive
- * @return a list of bins that contain relevant data.
- */
- public BinList getBinsOverlapping(final int referenceIndex, final int startPos, final int endPos) {
- final BitSet regionBins = GenomicIndexUtil.regionToBins(startPos, endPos);
- if (regionBins == null) {
- return null;
- }
- return new BinList(referenceIndex,regionBins);
- }
-
- /**
- * Perform an overlapping query of all bins bounding the given location.
- * @param bin The bin over which to perform an overlapping query.
- * @return The file pointers
- */
- public BAMFileSpan getSpanOverlapping(final Bin bin) {
- if(bin == null)
- return null;
-
- final int referenceSequence = bin.getReferenceSequence();
- final BAMIndexContent indexQuery = getQueryResults(referenceSequence);
-
- if(indexQuery == null)
- return null;
-
- final int binLevel = getLevelForBin(bin);
- final int firstLocusInBin = getFirstLocusInBin(bin);
-
- // Add the specified bin to the tree if it exists.
- final List<Bin> binTree = new ArrayList<Bin>();
- if(indexQuery.containsBin(bin))
- binTree.add(indexQuery.getBins().getBin(bin.getBinNumber()));
-
- int currentBinLevel = binLevel;
- while(--currentBinLevel >= 0) {
- final int binStart = getFirstBinInLevel(currentBinLevel);
- final int binWidth = getMaxAddressibleGenomicLocation()/getLevelSize(currentBinLevel);
- final int binNumber = firstLocusInBin/binWidth + binStart;
- final Bin parentBin = indexQuery.getBins().getBin(binNumber);
- if(parentBin != null && indexQuery.containsBin(parentBin))
- binTree.add(parentBin);
- }
-
- List<Chunk> chunkList = new ArrayList<Chunk>();
- for(final Bin coveringBin: binTree) {
- for(final Chunk chunk: coveringBin.getChunkList())
- chunkList.add(chunk.clone());
- }
-
- final int start = getFirstLocusInBin(bin);
- chunkList = Chunk.optimizeChunkList(chunkList,indexQuery.getLinearIndex().getMinimumOffset(start));
- return new BAMFileSpan(chunkList);
- }
-
- /**
- * Looks up the cached BAM query results if they're still in the cache and not expired. Otherwise,
- * retrieves the cache results from disk.
- * @param referenceIndex The reference to load. CachingBAMFileIndex only stores index data for entire references.
- * @return The index information for this reference.
- */
- protected BAMIndexContent getQueryResults(final int referenceIndex) {
- // WeakHashMap is a bit weird in that its lookups are done via equals() equality, but expirations must be
- // handled via == equality. This implementation jumps through a few hoops to make sure that == equality still
- // holds even in the context of boxing/unboxing.
-
- // If this query is for the same reference index as the last query, return it.
- if(mLastReferenceRetrieved!=null && mLastReferenceRetrieved == referenceIndex)
- return mQueriesByReference.get(referenceIndex);
-
- // If not, check to see whether it's available in the cache.
- BAMIndexContent queryResults = mQueriesByReference.get(referenceIndex);
- if(queryResults != null) {
- mLastReferenceRetrieved = referenceIndex;
- mQueriesByReference.put(referenceIndex,queryResults);
- return queryResults;
- }
-
- // If not in the cache, attempt to load it from disk.
- queryResults = query(referenceIndex,1,-1);
- if(queryResults != null) {
- mLastReferenceRetrieved = referenceIndex;
- mQueriesByReference.put(referenceIndex,queryResults);
- return queryResults;
- }
-
- // Not even available on disk.
- return null;
- }
-}
diff --git a/src/java/net/sf/samtools/Chunk.java b/src/java/net/sf/samtools/Chunk.java
deleted file mode 100644
index 7e51d2b..0000000
--- a/src/java/net/sf/samtools/Chunk.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package net.sf.samtools;
-
-import net.sf.samtools.util.BlockCompressedFilePointerUtil;
-
-import java.io.Serializable;
-import java.util.*;
-
-/**
- * A [start,stop) file pointer pairing into the BAM file, stored
- * as a BAM file index. A chunk is represented as a single 64-bit
- * value where the high-order 48 bits point to the location of the
- * start of a compressed BGZF block within a BGZF file and the
- * low-order 16 bits point to a position within the decompressed
- * data in the BGZF block.
- *
- * See the SAM/BAM spec for more details.
- */
-public class Chunk implements Cloneable, Serializable,Comparable<Chunk> {
- private static final long serialVersionUID = 1L;
-
- /**
- * A pointer to the start of a region in a SAM/BAM file. The
- * start is inclusive: start reading from this point.
- */
- private long mChunkStart;
-
- /**
- * A pointer to the end of a region in a SAM/BAM file. The end
- * is exclusive: this pointer points to one byte past the end
- * of the region of interest inside the file.
- */
- private long mChunkEnd;
-
- public Chunk(final long start, final long end) {
- mChunkStart = start;
- mChunkEnd = end;
- }
-
- public Chunk clone() {
- return new Chunk(mChunkStart,mChunkEnd);
- }
-
- public long getChunkStart() {
- return mChunkStart;
- }
-
- protected void setChunkStart(final long value) {
- mChunkStart = value;
- }
-
- public long getChunkEnd() {
- return mChunkEnd;
- }
-
- protected void setChunkEnd(final long value) {
- mChunkEnd = value;
- }
-
- public int compareTo(final Chunk chunk) {
- int result = Long.signum(mChunkStart - chunk.mChunkStart);
- if (result == 0) {
- result = Long.signum(mChunkEnd - chunk.mChunkEnd);
- }
- return result;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final Chunk chunk = (Chunk) o;
-
- if (mChunkEnd != chunk.mChunkEnd) return false;
- if (mChunkStart != chunk.mChunkStart) return false;
-
- return true;
- }
-
- /**
- * Returns whether two chunks overlap.
- * @param other Chunk to which this should be compared.
- * @return True if the chunks overlap. Returns false if the two chunks abut or are disjoint.
- */
- public boolean overlaps(final Chunk other) {
- final int comparison = this.compareTo(other);
- if(comparison == 0)
- return true;
-
- // "sort" the two chunks using the comparator.
- final Chunk leftMost = comparison==-1 ? this : other;
- final Chunk rightMost = comparison==1 ? this : other;
-
- final long leftMostBlockAddress = BlockCompressedFilePointerUtil.getBlockAddress(leftMost.getChunkEnd());
- final long rightMostBlockAddress = BlockCompressedFilePointerUtil.getBlockAddress(rightMost.getChunkStart());
-
- // If the left block's address is after the right block's address, compare the two blocks.
- // If the two blocks are identical, compare the block offsets.
- // If the right block is after the left block, no overlap is possible.
- if(leftMostBlockAddress > rightMostBlockAddress)
- return true;
- else if(leftMostBlockAddress == rightMostBlockAddress) {
- final int leftMostOffset = BlockCompressedFilePointerUtil.getBlockOffset(leftMost.getChunkEnd());
- final int rightMostOffset = BlockCompressedFilePointerUtil.getBlockOffset(rightMost.getChunkStart());
- return leftMostOffset > rightMostOffset;
- }
- else
- return false;
- }
-
- /**
- * Returns whether two chunks overlap.
- * @param other Chunk to which this should be compared.
- * @return True if the two chunks are adjacent. Returns false if the chunks overlap or are discontinuous.
- */
- public boolean isAdjacentTo(final Chunk other) {
- // Simpler implementation would be to == the chunk end of one to the chunk start of the other. Chose this implementation to ensure that all chunk
- // comparisons point directly to the
- return (BlockCompressedFilePointerUtil.getBlockAddress(this.getChunkEnd()) == BlockCompressedFilePointerUtil.getBlockAddress(other.getChunkStart()) &&
- BlockCompressedFilePointerUtil.getBlockOffset(this.getChunkEnd()) == BlockCompressedFilePointerUtil.getBlockOffset(other.getChunkStart())) ||
- (BlockCompressedFilePointerUtil.getBlockAddress(this.getChunkStart()) == BlockCompressedFilePointerUtil.getBlockAddress(other.getChunkEnd()) &&
- BlockCompressedFilePointerUtil.getBlockOffset(this.getChunkStart()) == BlockCompressedFilePointerUtil.getBlockOffset(other.getChunkEnd()));
- }
-
- @Override
- public int hashCode() {
- int result = (int) (mChunkStart ^ (mChunkStart >>> 32));
- result = 31 * result + (int) (mChunkEnd ^ (mChunkEnd >>> 32));
- return result;
- }
-
- @Override
- public String toString() {
- return String.format("%d:%d-%d:%d",mChunkStart >> 16,mChunkStart & 0xFFFF,mChunkEnd >> 16,mChunkEnd & 0xFFFF);
- }
-
- /**
- * @param minimumOffset Discard chunks that end before this file offset.
- * @return sorted list of chunks in which adjacent chunks are coalesced.
- */
- public static List<Chunk> optimizeChunkList(final List<Chunk> chunks, final long minimumOffset) {
- Chunk lastChunk = null;
- Collections.sort(chunks);
- final List<Chunk> result = new ArrayList<Chunk>();
- for (final Chunk chunk : chunks) {
- if (chunk.getChunkEnd() <= minimumOffset) {
- continue; // linear index optimization
- }
- if (result.isEmpty()) {
- result.add(chunk);
- lastChunk = chunk;
- continue;
- }
- // Coalesce chunks that are in adjacent file blocks.
- // This is a performance optimization.
- if (!lastChunk.overlaps(chunk) && !lastChunk.isAdjacentTo(chunk)) {
- result.add(chunk);
- lastChunk = chunk;
- } else {
- if (chunk.getChunkEnd() > lastChunk.getChunkEnd()) {
- lastChunk.setChunkEnd(chunk.getChunkEnd());
- }
- }
- }
- return result;
- }
-}
diff --git a/src/java/net/sf/samtools/Cigar.java b/src/java/net/sf/samtools/Cigar.java
deleted file mode 100644
index 579eb03..0000000
--- a/src/java/net/sf/samtools/Cigar.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-
-/**
- * A list of CigarElements, which describes how a read aligns with the reference.
- * E.g. the Cigar string 10M1D25M means
- * * match or mismatch for 10 bases
- * * deletion of 1 base
- * * match or mismatch for 25 bases
- *
- * c.f. http://samtools.sourceforge.net/SAM1.pdf for complete CIGAR specification.
- */
-public class Cigar {
- private final List<CigarElement> cigarElements = new ArrayList<CigarElement>();
-
- public Cigar() {
- }
-
- public Cigar(final List<CigarElement> cigarElements) {
- this.cigarElements.addAll(cigarElements);
- }
-
- public List<CigarElement> getCigarElements() {
- return Collections.unmodifiableList(cigarElements);
- }
-
- public CigarElement getCigarElement(final int i) {
- return cigarElements.get(i);
- }
-
- public void add(final CigarElement cigarElement) {
- cigarElements.add(cigarElement);
- }
-
- public int numCigarElements() {
- return cigarElements.size();
- }
-
- public boolean isEmpty() {
- return cigarElements.isEmpty();
- }
-
- /**
- * @return The number of reference bases that the read covers, excluding padding.
- */
- public int getReferenceLength() {
- int length = 0;
- for (final CigarElement element : cigarElements) {
- switch (element.getOperator()) {
- case M:
- case D:
- case N:
- case EQ:
- case X:
- length += element.getLength();
- }
- }
- return length;
- }
-
- /**
- * @return The number of reference bases that the read covers, including padding.
- */
- public int getPaddedReferenceLength() {
- int length = 0;
- for (final CigarElement element : cigarElements) {
- switch (element.getOperator()) {
- case M:
- case D:
- case N:
- case EQ:
- case X:
- case P:
- length += element.getLength();
- }
- }
- return length;
- }
-
- /**
- * @return The number of read bases that the read covers.
- */
- public int getReadLength() {
- return getReadLength(cigarElements);
- }
-
- /**
- * @return The number of read bases that the read covers.
- */
- public static int getReadLength(final List<CigarElement> cigarElements) {
- int length = 0;
- for (final CigarElement element : cigarElements) {
- if (element.getOperator().consumesReadBases()){
- length += element.getLength();
- }
- }
- return length;
- }
-
- /**
- * Exhaustive validation of CIGAR.
- * Note that this method deliberately returns null rather than Collections.emptyList() if there
- * are no validation errors, because callers tend to assume that if a non-null list is returned, it is modifiable.
- * @param readName For error reporting only. May be null if not known.
- * @param recordNumber For error reporting only. May be -1 if not known.
- * @return List of validation errors, or null if no errors.
- */
- public List<SAMValidationError> isValid(final String readName, final long recordNumber) {
- if (this.isEmpty()) {
- return null;
- }
- List<SAMValidationError> ret = null;
- boolean seenRealOperator = false;
- for (int i = 0; i < cigarElements.size(); ++i) {
- final CigarElement element = cigarElements.get(i);
- if (element.getLength() == 0) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "CIGAR element with zero length", readName, recordNumber));
- }
- // clipping operator can only be at start or end of CIGAR
- final CigarOperator op = element.getOperator();
- if (isClippingOperator(op)) {
- if (op == CigarOperator.H) {
- if (i != 0 && i != cigarElements.size() - 1) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "Hard clipping operator not at start or end of CIGAR", readName, recordNumber));
- }
- } else {
- if (op != CigarOperator.S) throw new IllegalStateException("Should never happen: " + op.name());
- if (i == 0 || i == cigarElements.size() - 1) {
- // Soft clip at either end is fine
- } else if (i == 1) {
- if (cigarElements.size() == 3 && cigarElements.get(2).getOperator() == CigarOperator.H) {
- // Handle funky special case in which S operator is both one from the beginning and one
- // from the end.
- } else if (cigarElements.get(0).getOperator() != CigarOperator.H) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "Soft clipping CIGAR operator can only be inside of hard clipping operator",
- readName, recordNumber));
- }
- } else if (i == cigarElements.size() - 2) {
- if (cigarElements.get(cigarElements.size() - 1).getOperator() != CigarOperator.H) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "Soft clipping CIGAR operator can only be inside of hard clipping operator",
- readName, recordNumber));
- }
- } else {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "Soft clipping CIGAR operator can at start or end of read, or be inside of hard clipping operator",
- readName, recordNumber));
- }
-
- }
- } else if (isRealOperator(op)) {
- // Must be at least one real operator (MIDN)
- seenRealOperator = true;
- // There should be an M or P operator between any pair of IDN operators
- if (isInDelOperator(op)) {
- for (int j = i+1; j < cigarElements.size(); ++j) {
- final CigarOperator nextOperator = cigarElements.get(j).getOperator();
- // Allow
- if ((isRealOperator(nextOperator) && !isInDelOperator(nextOperator)) || isPaddingOperator(nextOperator)) {
- break;
- }
- if (isInDelOperator(nextOperator) && op == nextOperator) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.ADJACENT_INDEL_IN_CIGAR,
- "No M or N operator between pair of " + op.name() + " operators in CIGAR", readName, recordNumber));
- }
- }
- }
- } else if (isPaddingOperator(op)) {
- if (i == 0) {
- /*
- * Removed restriction that padding not be the first operator because if a read starts in the middle of a pad
- * in a padded reference, it is necessary to precede the read with padding so that alignment start refers to a
- * position on the unpadded reference.
- */
- } else if (i == cigarElements.size() - 1) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "Padding operator not valid at end of CIGAR", readName, recordNumber));
- } else if (!isRealOperator(cigarElements.get(i-1).getOperator()) ||
- !isRealOperator(cigarElements.get(i+1).getOperator())) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "Padding operator not between real operators in CIGAR", readName, recordNumber));
- }
- }
- }
- if (!seenRealOperator) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR,
- "No real operator (M|I|D|N) in CIGAR", readName, recordNumber));
- }
- return ret;
- }
-
- private static boolean isRealOperator(final CigarOperator op) {
- return op == CigarOperator.M || op == CigarOperator.EQ || op == CigarOperator.X ||
- op == CigarOperator.I || op == CigarOperator.D || op == CigarOperator.N;
- }
-
- private static boolean isInDelOperator(final CigarOperator op) {
- return op == CigarOperator.I || op == CigarOperator.D;
- }
-
- private static boolean isClippingOperator(final CigarOperator op) {
- return op == CigarOperator.S || op == CigarOperator.H;
- }
-
- private static boolean isPaddingOperator(final CigarOperator op) {
- return op == CigarOperator.P;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (!(o instanceof Cigar)) return false;
-
- final Cigar cigar = (Cigar) o;
-
- if (cigarElements != null ? !cigarElements.equals(cigar.cigarElements) : cigar.cigarElements != null)
- return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- return cigarElements != null ? cigarElements.hashCode() : 0;
- }
-
- public String toString() {
- return TextCigarCodec.getSingleton().encode(this);
- }
-}
diff --git a/src/java/net/sf/samtools/CigarElement.java b/src/java/net/sf/samtools/CigarElement.java
deleted file mode 100644
index 19feee3..0000000
--- a/src/java/net/sf/samtools/CigarElement.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * One component of a cigar string. The component comprises the operator, and the number of bases to which
- * the operator applies.
- */
-public class CigarElement {
- private final int length;
- private final CigarOperator operator;
-
- public CigarElement(final int length, final CigarOperator operator) {
- this.length = length;
- this.operator = operator;
- }
-
- public int getLength() {
- return length;
- }
-
- public CigarOperator getOperator() {
- return operator;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (!(o instanceof CigarElement)) return false;
-
- final CigarElement that = (CigarElement) o;
-
- if (length != that.length) return false;
- if (operator != that.operator) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = length;
- result = 31 * result + (operator != null ? operator.hashCode() : 0);
- return result;
- }
-}
diff --git a/src/java/net/sf/samtools/CigarOperator.java b/src/java/net/sf/samtools/CigarOperator.java
deleted file mode 100644
index 9454c7b..0000000
--- a/src/java/net/sf/samtools/CigarOperator.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * The operators that can appear in a cigar string, and information about their disk representations.
- */
-public enum CigarOperator {
- /** Match or mismatch */
- M(true, true, 'M'),
- /** Insertion vs. the reference. */
- I(true, false, 'I'),
- /** Deletion vs. the reference. */
- D(false, true, 'D'),
- /** Skipped region from the reference. */
- N(false, true, 'N'),
- /** Soft clip. */
- S(true, false, 'S'),
- /** Hard clip. */
- H(false, false, 'H'),
- /** Padding. */
- P(false, false, 'P'),
- /** Matches the reference. */
- EQ(true, true, '='),
- /** Mismatches the reference. */
- X(true, true, 'X')
- ;
-
- // Representation of CigarOperator in BAM file
- private static final byte OP_M = 0;
- private static final byte OP_I = 1;
- private static final byte OP_D = 2;
- private static final byte OP_N = 3;
- private static final byte OP_S = 4;
- private static final byte OP_H = 5;
- private static final byte OP_P = 6;
- private static final byte OP_EQ = 7;
- private static final byte OP_X = 8;
-
- private final boolean consumesReadBases;
- private final boolean consumesReferenceBases;
- private final byte character;
- private final String string;
-
- // Readable synonyms of the above enums
- public static final CigarOperator MATCH_OR_MISMATCH = M;
- public static final CigarOperator INSERTION = I;
- public static final CigarOperator DELETION = D;
- public static final CigarOperator SKIPPED_REGION = N;
- public static final CigarOperator SOFT_CLIP = S;
- public static final CigarOperator HARD_CLIP = H;
- public static final CigarOperator PADDING = P;
-
- /** Default constructor. */
- CigarOperator(boolean consumesReadBases, boolean consumesReferenceBases, char character) {
- this.consumesReadBases = consumesReadBases;
- this.consumesReferenceBases = consumesReferenceBases;
- this.character = (byte) character;
- this.string = new String(new char[] {character}).intern();
- }
-
- /** If true, represents that this cigar operator "consumes" bases from the read bases. */
- public boolean consumesReadBases() { return consumesReadBases; }
-
- /** If true, represents that this cigar operator "consumes" bases from the reference sequence. */
- public boolean consumesReferenceBases() { return consumesReferenceBases; }
-
- /**
- * @param b CIGAR operator in character form as appears in a text CIGAR string
- * @return CigarOperator enum value corresponding to the given character.
- */
- public static CigarOperator characterToEnum(final int b) {
- switch (b) {
- case 'M':
- return M;
- case 'I':
- return I;
- case 'D':
- return D;
- case 'N':
- return N;
- case 'S':
- return S;
- case 'H':
- return H;
- case 'P':
- return P;
- case '=':
- return EQ;
- case 'X':
- return X;
- default:
- throw new IllegalArgumentException("Unrecognized CigarOperator: " + b);
- }
- }
-
- /**
- * @param i CIGAR operator in binary form as appears in a BAMRecord.
- * @return CigarOperator enum value corresponding to the given int value.
- */
- public static CigarOperator binaryToEnum(final int i) {
- switch(i) {
- case OP_M:
- return M;
- case OP_I:
- return I;
- case OP_D:
- return D;
- case OP_N:
- return N;
- case OP_S:
- return S;
- case OP_H:
- return H;
- case OP_P:
- return P;
- case OP_EQ:
- return EQ;
- case OP_X:
- return X;
- default:
- throw new IllegalArgumentException("Unrecognized CigarOperator: " + i);
- }
- }
-
- /**
- *
- * @param e CigarOperator enum value.
- * @return CIGAR operator corresponding to the enum value in binary form as appears in a BAMRecord.
- */
- public static int enumToBinary(final CigarOperator e) {
- switch(e) {
- case M:
- return OP_M;
- case I:
- return OP_I;
- case D:
- return OP_D;
- case N:
- return OP_N;
- case S:
- return OP_S;
- case H:
- return OP_H;
- case P:
- return OP_P;
- case EQ:
- return OP_EQ;
- case X:
- return OP_X;
- default:
- throw new IllegalArgumentException("Unrecognized CigarOperator: " + e);
- }
- }
-
- /** Returns the character that should be used within a SAM file. */
- public static byte enumToCharacter(final CigarOperator e) {
- return e.character;
- }
-
- /** Returns the cigar operator as it would be seen in a SAM file. */
- @Override public String toString() {
- return this.string;
- }
-}
diff --git a/src/java/net/sf/samtools/DefaultSAMRecordFactory.java b/src/java/net/sf/samtools/DefaultSAMRecordFactory.java
deleted file mode 100644
index 07e6ab2..0000000
--- a/src/java/net/sf/samtools/DefaultSAMRecordFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package net.sf.samtools;
-
-/**
- * Default factory for creating SAM and BAM records used by the SAMFileReader classes.
- *
- * @author Tim Fennell
- */
-public class DefaultSAMRecordFactory implements SAMRecordFactory {
-
- /** Create a new SAMRecord to be filled in */
- public SAMRecord createSAMRecord(final SAMFileHeader header) {
- return new SAMRecord(header);
- }
-
- /** Create a new BAM Record. */
- public BAMRecord createBAMRecord (final SAMFileHeader header,
- final int referenceSequenceIndex,
- final int alignmentStart,
- final short readNameLength,
- final short mappingQuality,
- final int indexingBin,
- final int cigarLen,
- final int flags,
- final int readLen,
- final int mateReferenceSequenceIndex,
- final int mateAlignmentStart,
- final int insertSize,
- final byte[] variableLengthBlock) {
-
- return new BAMRecord(header,
- referenceSequenceIndex,
- alignmentStart,
- readNameLength,
- mappingQuality,
- indexingBin,
- cigarLen,
- flags,
- readLen,
- mateReferenceSequenceIndex,
- mateAlignmentStart,
- insertSize,
- variableLengthBlock);
- }
-}
diff --git a/src/java/net/sf/samtools/Defaults.java b/src/java/net/sf/samtools/Defaults.java
deleted file mode 100644
index d4e5368..0000000
--- a/src/java/net/sf/samtools/Defaults.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package net.sf.samtools;
-
-import java.io.File;
-
-/**
- * Embodies defaults for global values that affect how the SAM JDK operates. Defaults are encoded in the class
- * and are also overridable using system properties.
- *
- * @author Tim Fennell
- */
-public class Defaults {
- /** Should BAM index files be created when writing out coordinate sorted BAM files? Default = false. */
- public static final boolean CREATE_INDEX;
-
- /** Should MD5 files be created when writing out SAM and BAM files? Default = false. */
- public static final boolean CREATE_MD5;
-
- /** Should asynchronous I/O be used when writing out SAM and BAM files (one thread per file). Default = false. */
- public static final boolean USE_ASYNC_IO;
-
- /** Compresion level to be used for writing BAM and other block-compressed outputs. Default = 5. */
- public static final int COMPRESSION_LEVEL;
-
- /** Buffer size, in bytes, used whenever reading/writing files or streams. Default = 128k. */
- public static final int BUFFER_SIZE;
-
- /**
- * Even if BUFFER_SIZE is 0, this is guaranteed to be non-zero. If BUFFER_SIZE is non-zero,
- * this == BUFFER_SIZE
- */
- public static final int NON_ZERO_BUFFER_SIZE;
-
- /** Should BlockCompressedOutputStream attempt to load libIntelDeflater? */
- public static final boolean TRY_USE_INTEL_DEFLATER;
-
- /** Path to libIntelDeflater.so. If this is not set, the library is looked for in the directory
- * where the executable jar lives. */
- public static final String INTEL_DEFLATER_SHARED_LIBRARY_PATH;
-
- /** The reference FASTA file. If this is not set, the file is null. This file may be required for reading
- * writing SAM files (ex. CRAM).
- */
- public static final File REFERENCE_FASTA;
-
- static {
- CREATE_INDEX = getBooleanProperty("create_index", false);
- CREATE_MD5 = getBooleanProperty("create_md5", false);
- USE_ASYNC_IO = getBooleanProperty("use_async_io", false);
- COMPRESSION_LEVEL = getIntProperty("compression_level", 5);
- BUFFER_SIZE = getIntProperty("buffer_size", 1024 * 128);
- TRY_USE_INTEL_DEFLATER = getBooleanProperty("try_use_intel_deflater", true);
- INTEL_DEFLATER_SHARED_LIBRARY_PATH = getStringProperty("intel_deflater_so_path", null);
- if (BUFFER_SIZE == 0) {
- NON_ZERO_BUFFER_SIZE = 1024 * 128;
- } else {
- NON_ZERO_BUFFER_SIZE = BUFFER_SIZE;
- }
- REFERENCE_FASTA = getFileProperty("reference_fasta", null);
- }
-
- /** Gets a string system property, prefixed with "samjdk." using the default if the property does not exist.*/
- private static String getStringProperty(final String name, final String def) {
- return System.getProperty("samjdk." + name, def);
- }
-
- /** Gets a boolean system property, prefixed with "samjdk." using the default if the property does not exist.*/
- private static boolean getBooleanProperty(final String name, final boolean def) {
- final String value = getStringProperty(name, new Boolean(def).toString());
- return Boolean.parseBoolean(value);
- }
-
- /** Gets an int system property, prefixed with "samjdk." using the default if the property does not exist.*/
- private static int getIntProperty(final String name, final int def) {
- final String value = getStringProperty(name, new Integer(def).toString());
- return Integer.parseInt(value);
- }
-
- /** Gets a File system property, prefixed with "samdjk." using the default if the property does not exist.*/
- private static File getFileProperty(final String name, final String def) {
- final String value = getStringProperty(name, def);
- // TODO: assert that it is readable
- return (null == value) ? null : new File(value);
- }
-}
diff --git a/src/java/net/sf/samtools/DiskBasedBAMFileIndex.java b/src/java/net/sf/samtools/DiskBasedBAMFileIndex.java
deleted file mode 100644
index 7a00666..0000000
--- a/src/java/net/sf/samtools/DiskBasedBAMFileIndex.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.seekablestream.SeekableStream;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A class for reading BAM file indices, hitting the disk once per query.
- */
-class DiskBasedBAMFileIndex extends AbstractBAMFileIndex
-{
- DiskBasedBAMFileIndex(final File file, final SAMSequenceDictionary dictionary) {
- super(file, dictionary);
- }
-
- DiskBasedBAMFileIndex(final SeekableStream stream, final SAMSequenceDictionary dictionary) {
- super(stream, dictionary);
- }
-
- DiskBasedBAMFileIndex(final File file, final SAMSequenceDictionary dictionary, final boolean useMemoryMapping) {
- super(file, dictionary, useMemoryMapping);
- }
-
- /**
- * Get list of regions of BAM file that may contain SAMRecords for the given range
- * @param referenceIndex sequence of desired SAMRecords
- * @param startPos 1-based start of the desired interval, inclusive
- * @param endPos 1-based end of the desired interval, inclusive
- * @return array of pairs of virtual file positions. Each pair is the first and last
- * virtual file position in a range that can be scanned to find SAMRecords that overlap the given
- * positions. The last position in each pair is a virtual file pointer to the first SAMRecord beyond
- * the range that may contain the indicated SAMRecords.
- */
- public BAMFileSpan getSpanOverlapping(final int referenceIndex, final int startPos, final int endPos) {
- final BAMIndexContent queryResults = query(referenceIndex,startPos,endPos);
-
- if(queryResults == null)
- return null;
-
- List<Chunk> chunkList = new ArrayList<Chunk>();
- for(final Chunk chunk: queryResults.getAllChunks())
- chunkList.add(chunk.clone());
- chunkList = Chunk.optimizeChunkList(chunkList,queryResults.getLinearIndex().getMinimumOffset(startPos));
- return new BAMFileSpan(chunkList);
- }
-
- protected BAMIndexContent getQueryResults(final int reference){
- throw new UnsupportedOperationException();
- // todo: there ought to be a way to support this using the first startPos for the reference and the last
- // return query(reference, 1, -1);
- // If this were implemented, BAMIndexer.createAndWriteIndex could extend DiskBasedBAMFileIndex -or- CachingBAMFileIndex
- }
-}
diff --git a/src/java/net/sf/samtools/FileTruncatedException.java b/src/java/net/sf/samtools/FileTruncatedException.java
deleted file mode 100644
index 0c04cee..0000000
--- a/src/java/net/sf/samtools/FileTruncatedException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Thrown when it is possible to detect that a SAM or BAM file is truncated.
- *
- * @author alecw at broadinstitute.org
- */
-public class FileTruncatedException extends SAMException {
- public FileTruncatedException() {
- }
-
- public FileTruncatedException(final String s) {
- super(s);
- }
-
- public FileTruncatedException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-
- public FileTruncatedException(final Throwable throwable) {
- super(throwable);
- }
-}
diff --git a/src/java/net/sf/samtools/FixBAMFile.java b/src/java/net/sf/samtools/FixBAMFile.java
deleted file mode 100755
index 81949f6..0000000
--- a/src/java/net/sf/samtools/FixBAMFile.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- */
-package net.sf.samtools;
-
-import net.sf.samtools.SAMFileReader.ValidationStringency;
-import java.io.*;
-
-public class FixBAMFile
-{
- public static void main(String[] args) {
- File inputFile = new File(args[0]);
- File outputFile = new File(args[1]);
- SAMFileReader reader = new SAMFileReader(inputFile);
- reader.setValidationStringency(ValidationStringency.SILENT);
- SAMFileHeader header = reader.getFileHeader();
- SAMFileWriter writer = new SAMFileWriterFactory().makeBAMWriter(header, true, outputFile);
- for (SAMRecord record : reader) {
- if (record.getIndexingBin() != null) {
- record.setIndexingBin(record.computeIndexingBin());
- }
- writer.addAlignment(record);
- }
- writer.close();
- }
-}
diff --git a/src/java/net/sf/samtools/GenomicIndexUtil.java b/src/java/net/sf/samtools/GenomicIndexUtil.java
deleted file mode 100644
index f9785be..0000000
--- a/src/java/net/sf/samtools/GenomicIndexUtil.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.BitSet;
-
-/**
- * Constants and methods used by BAM and Tribble indices
- */
-public class GenomicIndexUtil {
- /**
- * Reports the total amount of genomic data that any bin can index.
- */
- public static final int BIN_GENOMIC_SPAN = 512*1024*1024;
-
- /**
- * What is the starting bin for each level?
- */
- public static final int[] LEVEL_STARTS = {0,1,9,73,585,4681};
-
- /**
- * Reports the maximum number of bins that can appear in a binning index.
- */
- public static final int MAX_BINS = 37450; // =(8^6-1)/7+1
-
- public static final int MAX_LINEAR_INDEX_SIZE = MAX_BINS+1-LEVEL_STARTS[LEVEL_STARTS.length-1];
-
-
- /**
- * E.g. for a SAMRecord with no genomic coordinate.
- */
- public static final int UNSET_GENOMIC_LOCATION = 0;
-
- /**
- * calculate the bin given an alignment in [beg,end)
- * Copied from SAM spec.
- * @param beg 0-based start of read (inclusive)
- * @param end 0-based end of read (exclusive)
- */
- static int reg2bin(final int beg, int end)
- {
- --end;
-
- if (beg>>14 == end>>14) return ((1<<15)-1)/7 + (beg>>14);
- if (beg>>17 == end>>17) return ((1<<12)-1)/7 + (beg>>17);
- if (beg>>20 == end>>20) return ((1<<9)-1)/7 + (beg>>20);
- if (beg>>23 == end>>23) return ((1<<6)-1)/7 + (beg>>23);
- if (beg>>26 == end>>26) return ((1<<3)-1)/7 + (beg>>26);
- return 0;
- }
-
- // TODO: It is disturbing that reg2bin is 0-based, but regionToBins is 1-based.
- // TODO: It is also suspicious that regionToBins decrements endPos. Test it!
- // TODO: However end is decremented in reg2bin so perhaps there is no conflict.
- /**
- * Get candidate bins for the specified region
- * @param startPos 1-based start of target region, inclusive.
- * @param endPos 1-based end of target region, inclusive.
- * @return bit set for each bin that may contain SAMRecords in the target region.
- */
- public static BitSet regionToBins(final int startPos, final int endPos) {
- final int maxPos = 0x1FFFFFFF;
- final int start = (startPos <= 0) ? 0 : (startPos-1) & maxPos;
- final int end = (endPos <= 0) ? maxPos : (endPos-1) & maxPos;
- if (start > end) {
- return null;
- }
- int k;
- final BitSet bitSet = new BitSet(GenomicIndexUtil.MAX_BINS);
- bitSet.set(0);
- for (k = 1 + (start>>26); k <= 1 + (end>>26); ++k) bitSet.set(k);
- for (k = 9 + (start>>23); k <= 9 + (end>>23); ++k) bitSet.set(k);
- for (k = 73 + (start>>20); k <= 73 + (end>>20); ++k) bitSet.set(k);
- for (k = 585 + (start>>17); k <= 585 + (end>>17); ++k) bitSet.set(k);
- for (k = 4681 + (start>>14); k <= 4681 + (end>>14); ++k) bitSet.set(k);
- return bitSet;
- }
-
-}
diff --git a/src/java/net/sf/samtools/LinearIndex.java b/src/java/net/sf/samtools/LinearIndex.java
deleted file mode 100644
index 21be098..0000000
--- a/src/java/net/sf/samtools/LinearIndex.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.Arrays;
-
-/**
- * The linear index associated with a given reference in a BAM index.
- *
- * @author mhanna
- * @version 0.1
- */
-public class LinearIndex {
-
- public static final int MAX_LINEAR_INDEX_SIZE = GenomicIndexUtil.MAX_LINEAR_INDEX_SIZE;
-
- public static final int BAM_LIDX_SHIFT = 14;
-
- /**
- * The reference sequence number for this linear index.
- */
- private final int mReferenceSequence;
-
- /**
- * Dictates the first stored element of the index.
- */
- private final int mIndexStart;
-
- /**
- * The linear index entries within this bin.
- */
- private final long[] mIndexEntries;
-
- public LinearIndex(final int referenceSequence, final int indexStart, final long[] indexEntries) {
- this.mReferenceSequence = referenceSequence;
- this.mIndexStart = indexStart;
- this.mIndexEntries = indexEntries;
- }
-
- public int getReferenceSequence() {
- return mReferenceSequence;
- }
-
- public int size() {
- return mIndexEntries.length;
- }
-
- public long get(final int index) {
- return mIndexEntries[index-mIndexStart];
- }
-
- public static int convertToLinearIndexOffset(final int contigPos) {
- final int indexPos = (contigPos <= 0) ? 0 : contigPos-1;
- return indexPos >> BAM_LIDX_SHIFT;
- }
-
- /**
- * Gets the minimum offset of any alignment start appearing in this index, according to the linear index.
- * @param startPos Starting position for this query.
- * @return The minimum offset, in chunk format, of any read appearing in this position.
- */
- public long getMinimumOffset(final int startPos) {
- final int start = (startPos <= 0) ? 0 : startPos-1;
- final int regionLinearBin = start >> BAM_LIDX_SHIFT;
- // System.out.println("# regionLinearBin: " + regionLinearBin);
- long minimumOffset = 0;
- if (regionLinearBin-mIndexStart < mIndexEntries.length)
- minimumOffset = mIndexEntries[regionLinearBin-mIndexStart];
- return minimumOffset;
- }
-
- /**
- * Direct access to the array. Be careful!
- * @return The elements of the linear index.
- */
- public long[] getIndexEntries() {
- return mIndexEntries;
- }
-
- public int getIndexStart() {
- return mIndexStart;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final LinearIndex that = (LinearIndex) o;
-
- if (mIndexStart != that.mIndexStart) return false;
- if (mReferenceSequence != that.mReferenceSequence) return false;
- if (!Arrays.equals(mIndexEntries, that.mIndexEntries)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = mReferenceSequence;
- result = 31 * result + mIndexStart;
- result = 31 * result + Arrays.hashCode(mIndexEntries);
- return result;
- }
-}
diff --git a/src/java/net/sf/samtools/NotPrimarySkippingIterator.java b/src/java/net/sf/samtools/NotPrimarySkippingIterator.java
deleted file mode 100644
index d47382b..0000000
--- a/src/java/net/sf/samtools/NotPrimarySkippingIterator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.PeekIterator;
-
-/**
- * Wrapper around SAMRecord iterator that skips over non-primary elements.
- * This iterator conflates a filtering iterator and a peekable iterator. It would be cleaner to
- * handle those concerns separately.
- */
-public class NotPrimarySkippingIterator {
- private final PeekIterator<SAMRecord> it;
-
- public NotPrimarySkippingIterator(final CloseableIterator<SAMRecord> underlyingIt) {
- it = new PeekIterator<SAMRecord>(underlyingIt);
- skipAnyNotprimary();
- }
-
- public boolean hasCurrent() {
- return it.hasNext();
- }
-
- public SAMRecord getCurrent() {
- assert(hasCurrent());
- return it.peek();
- }
-
- public boolean advance() {
- it.next();
- skipAnyNotprimary();
- return hasCurrent();
- }
-
- private void skipAnyNotprimary() {
- while (it.hasNext() && it.peek().getNotPrimaryAlignmentFlag()) {
- it.next();
- }
- }
-}
diff --git a/src/java/net/sf/samtools/SAMBinaryTagAndUnsignedArrayValue.java b/src/java/net/sf/samtools/SAMBinaryTagAndUnsignedArrayValue.java
deleted file mode 100644
index 5dd757b..0000000
--- a/src/java/net/sf/samtools/SAMBinaryTagAndUnsignedArrayValue.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Simple extension to SAMBinaryTagAndValue in order to distinguish unsigned array values, because
- * signedness cannot be determined by introspection of value.
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMBinaryTagAndUnsignedArrayValue extends SAMBinaryTagAndValue {
- public SAMBinaryTagAndUnsignedArrayValue(final short tag, final Object value) {
- super(tag, value);
- }
-
- /** Creates and returns a deep copy of the list of tag/values. */
- public SAMBinaryTagAndValue copy() {
- final SAMBinaryTagAndValue retval = new SAMBinaryTagAndUnsignedArrayValue(this.tag, this.value);
- if (next != null) retval.next = next.copy();
- return retval;
- }
-
- @Override
- public boolean isUnsignedArray() {
- return true;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMBinaryTagAndValue.java b/src/java/net/sf/samtools/SAMBinaryTagAndValue.java
deleted file mode 100644
index ffb358f..0000000
--- a/src/java/net/sf/samtools/SAMBinaryTagAndValue.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Holds a SAMRecord attribute and the tagname (in binary form) for that attribute.
- * SAMRecord stores tag name and value in this form, because much String creation is avoided this way.
- * See SAMTagUtil to convert the tag to String form.
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMBinaryTagAndValue {
- public final short tag;
- public final Object value;
- protected SAMBinaryTagAndValue next = null;
-
- public SAMBinaryTagAndValue(final short tag, final Object value) {
- this.tag = tag;
- this.value = value;
- }
-
- @Override public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- return typeSafeEquals((SAMBinaryTagAndValue) o);
- }
-
- /** Type safe equals method that recurses down the list looking for equality. */
- private boolean typeSafeEquals(final SAMBinaryTagAndValue that) {
- if (this.tag != that.tag) return false;
- if ((this.value == null) ? that.value == null : this.value.equals(that.value)) {
- if (this.next == null) return that.next == null;
- else return this.next.equals(that.next);
- }
- else {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- int result = (int) tag;
- result = 31 * result + value.hashCode();
- return result;
- }
-
- /** Creates and returns a deep copy of the list of tag/values. */
- public SAMBinaryTagAndValue copy() {
- final SAMBinaryTagAndValue retval = new SAMBinaryTagAndValue(this.tag, this.value);
- if (next != null) retval.next = next.copy();
- return retval;
- }
-
- // The methods below are for implementing a light-weight, single-direction linked list
-
- public SAMBinaryTagAndValue getNext() { return this.next; }
-
- /** Inserts at item into the ordered list of attributes and returns the head of the list/sub-list */
- public SAMBinaryTagAndValue insert(final SAMBinaryTagAndValue attr) {
- if (attr == null) return this;
- if (attr.next != null) throw new IllegalStateException("Can only insert single tag/value combinations.");
-
- if (attr.tag < this.tag) {
- // attr joins the list ahead of this element
- attr.next = this;
- return attr;
- }
- else if (this.tag == attr.tag) {
- // attr replaces this in the list
- attr.next = this.next;
- return attr;
- }
- else if (this.next == null) {
- // attr gets stuck on the end
- this.next = attr;
- return this;
- }
- else {
- // attr gets inserted somewhere in the tail
- this.next = this.next.insert(attr);
- return this;
- }
- }
-
- /** Removes a tag from the list and returns the new head of the list/sub-list. */
- public SAMBinaryTagAndValue remove(final short tag) {
- if (this.tag == tag) return this.next;
- else {
- if (this.next != null) this.next = this.next.remove(tag);
- return this;
- }
- }
-
- /** Returns the SAMBinaryTagAndValue that contains the required tag, or null if not contained. */
- public SAMBinaryTagAndValue find(final short tag) {
- if (this.tag == tag) return this;
- else if (this.tag > tag || this.next == null) return null;
- else return this.next.find(tag);
- }
-
- public boolean isUnsignedArray() {
- return false;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMException.java b/src/java/net/sf/samtools/SAMException.java
deleted file mode 100644
index 8ec29c5..0000000
--- a/src/java/net/sf/samtools/SAMException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SAMException extends RuntimeException {
- public SAMException() {
- }
-
- public SAMException(final String s) {
- super(s);
- }
-
- public SAMException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-
- public SAMException(final Throwable throwable) {
- super(throwable);
- }
-}
diff --git a/src/java/net/sf/samtools/SAMFileHeader.java b/src/java/net/sf/samtools/SAMFileHeader.java
deleted file mode 100644
index a0abe96..0000000
--- a/src/java/net/sf/samtools/SAMFileHeader.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import net.sf.samtools.util.StringLineReader;
-
-import java.lang.reflect.Constructor;
-import java.util.*;
-import java.io.StringWriter;
-
-/**
- * Header information from a SAM or BAM file.
- */
-public class SAMFileHeader extends AbstractSAMHeaderRecord
-{
- public static final String VERSION_TAG = "VN";
- public static final String SORT_ORDER_TAG = "SO";
- public static final String GROUP_ORDER_TAG = "GO";
- public static final String CURRENT_VERSION = "1.4";
- public static final Set<String> ACCEPTABLE_VERSIONS =
- new HashSet<String>(Arrays.asList("1.0", "1.3", "1.4"));
-
- /**
- * These tags are of known type, so don't need a type field in the text representation.
- */
- public static final Set<String> STANDARD_TAGS =
- new HashSet<String>(Arrays.asList(VERSION_TAG, SORT_ORDER_TAG, GROUP_ORDER_TAG));
-
- Set<String> getStandardTags() {
- return STANDARD_TAGS;
- }
-
- /**
- * Ways in which a SAM or BAM may be sorted.
- */
- public enum SortOrder {
-
- unsorted(null),
- queryname(SAMRecordQueryNameComparator.class),
- coordinate(SAMRecordCoordinateComparator.class);
-
- private final Class<? extends SAMRecordComparator> comparator;
-
- SortOrder(final Class<? extends SAMRecordComparator> comparatorClass) {
- this.comparator = comparatorClass;
- }
-
- /**
- * @return Comparator class to sort in the specified order, or null if unsorted.
- */
- public Class<? extends SAMRecordComparator> getComparator() {
- return comparator;
- }
-
- /**
- * @return Comparator to sort in the specified order, or null if unsorted.
- */
- public SAMRecordComparator getComparatorInstance() {
- if (comparator != null) {
- try {
- final Constructor<? extends SAMRecordComparator> ctor = comparator.getConstructor();
- return ctor.newInstance();
- }
- catch (Exception e) {
- throw new IllegalStateException("Could not instantiate a comparator for sort order: " +
- this.name(), e);
- }
- }
- return null;
- }
- }
-
- public enum GroupOrder {
- none, query, reference
- }
-
- private List<SAMReadGroupRecord> mReadGroups =
- new ArrayList<SAMReadGroupRecord>();
- private List<SAMProgramRecord> mProgramRecords = new ArrayList<SAMProgramRecord>();
- private final Map<String, SAMReadGroupRecord> mReadGroupMap =
- new HashMap<String, SAMReadGroupRecord>();
- private final Map<String, SAMProgramRecord> mProgramRecordMap = new HashMap<String, SAMProgramRecord>();
- private SAMSequenceDictionary mSequenceDictionary = new SAMSequenceDictionary();
- final private List<String> mComments = new ArrayList<String>();
- private String textHeader;
- private final List<SAMValidationError> mValidationErrors = new ArrayList<SAMValidationError>();
-
- public SAMFileHeader() {
- setAttribute(VERSION_TAG, CURRENT_VERSION);
- }
-
- public String getVersion() {
- return (String) getAttribute("VN");
- }
-
- public String getCreator() {
- return (String) getAttribute("CR");
- }
-
- public SAMSequenceDictionary getSequenceDictionary() {
- return mSequenceDictionary;
- }
-
- public List<SAMReadGroupRecord> getReadGroups() {
- return Collections.unmodifiableList(mReadGroups);
- }
-
- /**
- * Look up sequence record by name.
- */
- public SAMSequenceRecord getSequence(final String name) {
- return mSequenceDictionary.getSequence(name);
- }
-
- /**
- * Look up read group record by name.
- */
- public SAMReadGroupRecord getReadGroup(final String name) {
- return mReadGroupMap.get(name);
- }
-
- /**
- * Replace entire sequence dictionary. The given sequence dictionary is stored, not copied.
- */
- public void setSequenceDictionary(final SAMSequenceDictionary sequenceDictionary) {
- mSequenceDictionary = sequenceDictionary;
- }
-
- public void addSequence(final SAMSequenceRecord sequenceRecord) {
- mSequenceDictionary.addSequence(sequenceRecord);
- }
-
- /**
- * Look up a sequence record by index. First sequence in the header is the 0th.
- * @return The corresponding sequence record, or null if the index is out of range.
- */
- public SAMSequenceRecord getSequence(final int sequenceIndex) {
- return mSequenceDictionary.getSequence(sequenceIndex);
- }
-
- /**
- *
- * @return Sequence index for the given sequence name, or -1 if the name is not found.
- */
- public int getSequenceIndex(final String sequenceName) {
- return mSequenceDictionary.getSequenceIndex(sequenceName);
- }
-
- /**
- * Replace entire list of read groups. The given list is stored, not copied.
- */
- public void setReadGroups(final List<SAMReadGroupRecord> readGroups) {
- mReadGroups = readGroups;
- mReadGroupMap.clear();
- for (final SAMReadGroupRecord readGroupRecord : readGroups) {
- mReadGroupMap.put(readGroupRecord.getReadGroupId(), readGroupRecord);
- }
- }
-
- public void addReadGroup(final SAMReadGroupRecord readGroup) {
- if (mReadGroupMap.containsKey(readGroup.getReadGroupId())) {
- throw new IllegalArgumentException("Read group with group id " +
- readGroup.getReadGroupId() + " already exists in SAMFileHeader!");
- }
- mReadGroups.add(readGroup);
- mReadGroupMap.put(readGroup.getReadGroupId(), readGroup);
- }
-
- public List<SAMProgramRecord> getProgramRecords() {
- return Collections.unmodifiableList(mProgramRecords);
- }
-
- public void addProgramRecord(final SAMProgramRecord programRecord) {
- if (mProgramRecordMap.containsKey(programRecord.getProgramGroupId())) {
- throw new IllegalArgumentException("Program record with group id " +
- programRecord.getProgramGroupId() + " already exists in SAMFileHeader!");
- }
- this.mProgramRecords.add(programRecord);
- this.mProgramRecordMap.put(programRecord.getProgramGroupId(), programRecord);
- }
-
- public SAMProgramRecord getProgramRecord(final String pgId) {
- return this.mProgramRecordMap.get(pgId);
- }
-
- /**
- * Replace entire list of program records
- * @param programRecords This list is used directly, not copied.
- */
- public void setProgramRecords(final List<SAMProgramRecord> programRecords) {
- this.mProgramRecords = programRecords;
- this.mProgramRecordMap.clear();
- for (final SAMProgramRecord programRecord : this.mProgramRecords) {
- this.mProgramRecordMap.put(programRecord.getProgramGroupId(), programRecord);
- }
- }
-
- /**
- * @return a new SAMProgramRecord with an ID guaranteed to not exist in this SAMFileHeader
- */
- public SAMProgramRecord createProgramRecord() {
- for (int i = 0; i < Integer.MAX_VALUE; ++i) {
- final String s = Integer.toString(i);
- if (!this.mProgramRecordMap.containsKey(s)) {
- final SAMProgramRecord ret = new SAMProgramRecord(s);
- addProgramRecord(ret);
- return ret;
- }
- }
- throw new IllegalStateException("Surprising number of SAMProgramRecords");
- }
-
- public SortOrder getSortOrder() {
- final String so = getAttribute("SO");
- if (so == null || so.equals("unknown")) {
- return SortOrder.unsorted;
- }
- return SortOrder.valueOf((String) so);
- }
-
- public void setSortOrder(final SortOrder so) {
- setAttribute("SO", so.name());
- }
-
- public GroupOrder getGroupOrder() {
- if (getAttribute("GO") == null) {
- return GroupOrder.none;
- }
- return GroupOrder.valueOf((String)getAttribute("GO"));
- }
-
- public void setGroupOrder(final GroupOrder go) {
- setAttribute("GO", go.name());
- }
-
- /**
- * If this SAMHeader was read from a file, this property contains the header
- * as it appeared in the file, otherwise it is null. Note that this is not a toString()
- * operation. Changes to the SAMFileHeader object after reading from the file are not reflected in this value.
- *
- * In addition this value is only set if one of the following is true:
- * - The size of the header is < 1,048,576 characters (1MB ascii, 2MB unicode)
- * - There are either validation or parsing errors associated with the header
- *
- * Invalid header lines may appear in value but are not stored in the SAMFileHeader object.
- */
- public String getTextHeader() {
- return textHeader;
- }
-
- public void setTextHeader(final String textHeader) {
- this.textHeader = textHeader;
- }
-
- public List<String> getComments() {
- return Collections.unmodifiableList(mComments);
- }
-
- public void addComment(String comment) {
- if (!comment.startsWith(SAMTextHeaderCodec.COMMENT_PREFIX)) {
- comment = SAMTextHeaderCodec.COMMENT_PREFIX + comment;
- }
- mComments.add(comment);
- }
-
-
- /**
- * Replace existing comments with the contents of the given collection.
- */
- public void setComments(final Collection<String> comments) {
- mComments.clear();
- for (final String comment : comments) {
- addComment(comment);
- }
- }
-
- public List<SAMValidationError> getValidationErrors() {
- return Collections.unmodifiableList(mValidationErrors);
- }
-
- public void addValidationError(final SAMValidationError error) {
- mValidationErrors.add(error);
- }
-
- /**
- * Replace list of validation errors with the elements of the given list.
- */
- public void setValidationErrors(final Collection<SAMValidationError> errors) {
- mValidationErrors.clear();
- mValidationErrors.addAll(errors);
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final SAMFileHeader that = (SAMFileHeader) o;
-
- if (!attributesEqual(that)) return false;
- if (mProgramRecords != null ? !mProgramRecords.equals(that.mProgramRecords) : that.mProgramRecords != null)
- return false;
- if (mReadGroups != null ? !mReadGroups.equals(that.mReadGroups) : that.mReadGroups != null) return false;
- if (mSequenceDictionary != null ? !mSequenceDictionary.equals(that.mSequenceDictionary) : that.mSequenceDictionary != null)
- return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = attributesHashCode();
- result = 31 * result + (mSequenceDictionary != null ? mSequenceDictionary.hashCode() : 0);
- result = 31 * result + (mReadGroups != null ? mReadGroups.hashCode() : 0);
- result = 31 * result + (mProgramRecords != null ? mProgramRecords.hashCode() : 0);
- return result;
- }
-
- public final SAMFileHeader clone() {
- final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
- codec.setValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- final StringWriter stringWriter = new StringWriter();
- codec.encode(stringWriter, this);
- return codec.decode(new StringLineReader(stringWriter.toString()), "SAMFileHeader.clone");
- }
-}
diff --git a/src/java/net/sf/samtools/SAMFileReader.java b/src/java/net/sf/samtools/SAMFileReader.java
deleted file mode 100644
index 5b6ed4e..0000000
--- a/src/java/net/sf/samtools/SAMFileReader.java
+++ /dev/null
@@ -1,915 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import net.sf.samtools.seekablestream.SeekableBufferedStream;
-import net.sf.samtools.util.*;
-import net.sf.samtools.seekablestream.SeekableHTTPStream;
-import net.sf.samtools.seekablestream.SeekableStream;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.zip.GZIPInputStream;
-import java.net.URL;
-
-/**
- * Class for reading and querying SAM/BAM files. Delegates to appropriate concrete implementation.
- */
-public class SAMFileReader implements Iterable<SAMRecord>, Closeable {
-
- private static ValidationStringency defaultValidationStringency = ValidationStringency.DEFAULT_STRINGENCY;
-
- public static ValidationStringency getDefaultValidationStringency() {
- return defaultValidationStringency;
- }
-
- /**
- * Set validation stringency for all subsequently-created SAMFileReaders. This is the only way to
- * change the validation stringency for SAM header.
- * NOTE: Programs that change this should make sure to have a try/finally clause wrapping the work that
- * they do, so that the original stringency can be restored after the program's work is done. This facilitates
- * calling a program that is usually run stand-alone from another program, without messing up the original
- * validation stringency.
- */
- public static void setDefaultValidationStringency(final ValidationStringency defaultValidationStringency) {
- SAMFileReader.defaultValidationStringency = defaultValidationStringency;
- }
-
- /**
- * Returns the SAMSequenceDictionary from the provided FASTA.
- */
- public static SAMSequenceDictionary getSequenceDictionary(final File dictionaryFile) {
- final SAMFileReader samFileReader = new SAMFileReader(dictionaryFile);
- final SAMSequenceDictionary dict = samFileReader.getFileHeader().getSequenceDictionary();
- CloserUtil.close(dictionaryFile);
- return dict;
- }
-
- private boolean mIsBinary = false;
- private BAMIndex mIndex = null;
- private SAMRecordFactory samRecordFactory = new DefaultSAMRecordFactory();
- private ReaderImplementation mReader = null;
-
- private File samFile = null;
-
- /**
- * How strict to be when reading a SAM or BAM, beyond bare minimum validation.
- */
- public enum ValidationStringency {
- /**
- * Do the right thing, throw an exception if something looks wrong.
- */
- STRICT,
- /**
- * Emit warnings but keep going if possible.
- */
- LENIENT,
- /**
- * Like LENIENT, only don't emit warning messages.
- */
- SILENT;
-
- public static final ValidationStringency DEFAULT_STRINGENCY = STRICT;
- }
-
- /**
- * Internal interface for SAM/BAM file reader implementations.
- * Implemented as an abstract class to enforce better access control.
- */
- static abstract class ReaderImplementation {
- abstract void enableFileSource(final SAMFileReader reader, final boolean enabled);
- abstract void enableIndexCaching(final boolean enabled);
- abstract void enableIndexMemoryMapping(final boolean enabled);
- abstract void enableCrcChecking(final boolean enabled);
- abstract void setSAMRecordFactory(final SAMRecordFactory factory);
- abstract boolean hasIndex();
- abstract BAMIndex getIndex();
- abstract SAMFileHeader getFileHeader();
- abstract CloseableIterator<SAMRecord> getIterator();
- abstract CloseableIterator<SAMRecord> getIterator(SAMFileSpan fileSpan);
- abstract SAMFileSpan getFilePointerSpanningReads();
- abstract CloseableIterator<SAMRecord> query(String sequence, int start, int end, boolean contained);
- abstract CloseableIterator<SAMRecord> query(QueryInterval[] intervals, boolean contained);
- abstract CloseableIterator<SAMRecord> queryAlignmentStart(String sequence, int start);
- abstract public CloseableIterator<SAMRecord> queryUnmapped();
- abstract void close();
- // If true, emit warnings about format errors rather than throwing exceptions;
- abstract void setValidationStringency(final ValidationStringency validationStringency);
- abstract ValidationStringency getValidationStringency();
- }
-
-
- /**
- * Prepare to read a SAM or BAM file. Indexed lookup not allowed because reading from InputStream.
- */
- public SAMFileReader(final InputStream stream) {
- this(stream, false);
- }
-
- /**
- * Prepare to read a SAM or BAM file. If the given file is a BAM, and has a companion BAI index file
- * that is named according to the convention, it will be found and opened, and indexed query will be allowed.
- */
- public SAMFileReader(final File file) {
- this(file, null, false);
- }
-
- /**
- * Prepare to read a SAM or BAM file. If the given file is a BAM, and an index is present, indexed query
- * will be allowed.
- *
- * @param file SAM or BAM to read.
- * @param indexFile Index file that is companion to BAM, or null if no index file, or if index file
- * should be found automatically.
- */
- public SAMFileReader(final File file, final File indexFile) {
- this(file, indexFile, false);
- }
-
- /**
- * Read a SAM or BAM file. Indexed lookup not allowed because reading from InputStream.
- *
- * @param stream input SAM or BAM. This is buffered internally so caller need not buffer.
- * @param eagerDecode if true, decode SAM record entirely when reading it.
- */
- public SAMFileReader(final InputStream stream, final boolean eagerDecode) {
- init(stream, null, null, eagerDecode, defaultValidationStringency);
- }
-
- /**
- * Read a SAM or BAM file, possibly with an index file if present.
- * If the given file is a BAM, and an index is present, indexed query will be allowed.
- *
- * @param file SAM or BAM.
- * @param eagerDecode if true, decode SAM record entirely when reading it.
- */
- public SAMFileReader(final File file, final boolean eagerDecode) {
- this(file, null, eagerDecode);
- }
-
- /**
- * Read a SAM or BAM file, possibly with an index file. If the given file is a BAM, and an index is present,
- * indexed query will be allowed.
- *
- * @param file SAM or BAM.
- * @param indexFile Location of index file, or null in order to use the default index file (if present).
- * @param eagerDecode eagerDecode if true, decode SAM record entirely when reading it.
- */
- public SAMFileReader(final File file, final File indexFile, final boolean eagerDecode){
- init(null, file, indexFile, eagerDecode, defaultValidationStringency);
- }
-
- /**
- * Read a BAM file by http
- * indexed query will be allowed.
- *
- * @param url BAM.
- * @param indexFile Location of index file, or null if indexed access not required.
- * @param eagerDecode eagerDecode if true, decode SAM record entirely when reading it.
- */
- public SAMFileReader(final URL url, final File indexFile, final boolean eagerDecode) {
- init(new SeekableBufferedStream(new SeekableHTTPStream(url)),
- indexFile, eagerDecode, defaultValidationStringency);
- }
-
- /**
- * Read a BAM file via caller-supplied mechanism. Indexed query will be allowed, but
- * index file must be provided in that case.
- * @param strm BAM -- If the stream is not buffered, caller should wrap in SeekableBufferedStream for
- * better performance.
- * @param indexFile Location of index file, or null indexed access not required.
- * @param eagerDecode if true, decode SAM record entirely when reading it.
- */
- public SAMFileReader(final SeekableStream strm, final File indexFile, final boolean eagerDecode) {
- init(strm, indexFile, eagerDecode, defaultValidationStringency);
- }
-
- /**
- * @param strm BAM -- If the stream is not buffered, caller should wrap in SeekableBufferedStream for
- * better performance.
- */
- public SAMFileReader(final SeekableStream strm, final SeekableStream indexStream, final boolean eagerDecode) {
- init(strm, indexStream, eagerDecode, defaultValidationStringency);
- }
-
- public void close() {
- if (mReader != null) {
- mReader.close();
- }
- mReader = null;
- mIndex = null;
- }
-
- /**
- * If true, writes the source of every read into the source SAMRecords.
- * @param enabled true to write source information into each SAMRecord.
- */
- public void enableFileSource(final boolean enabled) {
- mReader.enableFileSource(this,enabled);
- }
-
- /**
- * If true, uses the caching version of the index reader.
- * @param enabled true to write source information into each SAMRecord.
- */
- public void enableIndexCaching(final boolean enabled) {
- if(mIndex != null)
- throw new SAMException("Unable to turn on index caching; index file has already been loaded.");
- mReader.enableIndexCaching(enabled);
- }
-
- /**
- * If false, disable the use of memory mapping for accessing index files (default behavior is to use memory mapping).
- * This is slower but more scalable when accessing large numbers of BAM files sequentially.
- * @param enabled True to use memory mapping, false to use regular I/O.
- */
- public void enableIndexMemoryMapping(final boolean enabled) {
- if (mIndex != null) {
- throw new SAMException("Unable to change index memory mapping; index file has already been loaded.");
- }
- mReader.enableIndexMemoryMapping(enabled);
- }
-
- /**
- * Only meaningful for BAM file readers - enables or disables checking of checksums on uncompressed
- * data during decompression. Enabling this will increase decompression time by 15-30%.
- */
- public void enableCrcChecking(final boolean enabled) {
- this.mReader.enableCrcChecking(enabled);
- }
-
- /**
- * Override the default SAMRecordFactory class used to instantiate instances of SAMRecord and BAMRecord.
- */
- public void setSAMRecordFactory(final SAMRecordFactory factory) {
- this.samRecordFactory = factory;
- this.mReader.setSAMRecordFactory(factory);
- }
-
- /**
- * @return True if this is a BAM reader.
- */
- public boolean isBinary() {
- return mIsBinary;
- }
-
- /**
- * @return true if ths is a BAM file, and has an index
- */
- public boolean hasIndex() {
- return mReader.hasIndex();
- }
-
- /**
- * Retrieves the index for the given file type. Ensure that the index is of the specified type.
- * @return An index of the given type.
- */
- public BAMIndex getIndex() {
- return mReader.getIndex();
- }
-
- /**
- * Returns true if the supported index is browseable, meaning the bins in it can be traversed
- * and chunk data inspected and retrieved.
- * @return True if the index supports the BrowseableBAMIndex interface. False otherwise.
- */
- public boolean hasBrowseableIndex() {
- return hasIndex() && getIndex() instanceof BrowseableBAMIndex;
- }
-
- /**
- * Gets an index tagged with the BrowseableBAMIndex interface. Throws an exception if no such
- * index is available.
- * @return An index with a browseable interface, if possible.
- * @throws SAMException if no such index is available.
- */
- public BrowseableBAMIndex getBrowseableIndex() {
- final BAMIndex index = getIndex();
- if(!(index instanceof BrowseableBAMIndex))
- throw new SAMException("Cannot return index: index created by BAM is not browseable.");
- return BrowseableBAMIndex.class.cast(index);
- }
-
- public SAMFileHeader getFileHeader() {
- return mReader.getFileHeader();
- }
-
- /**
- * Control validation of SAMRecords as they are read from file.
- * In order to control validation stringency for SAM Header, call SAMFileReader.setDefaultValidationStringency
- * before constructing a SAMFileReader.
- */
- public void setValidationStringency(final ValidationStringency validationStringency) {
- mReader.setValidationStringency(validationStringency);
- }
-
- /**
- * Iterate through file in order. For a SAMFileReader constructed from an InputStream, and for any SAM file,
- * a 2nd iteration starts where the 1st one left off. For a BAM constructed from a File, each new iteration
- * starts at the first record.
- * <p/>
- * Only a single open iterator on a SAM or BAM file may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first.
- */
- public SAMRecordIterator iterator() {
- return new AssertableIterator(mReader.getIterator());
- }
-
- /**
- * Iterate through the given chunks in the file.
- * @param chunks List of chunks for which to retrieve data.
- * @return An iterator over the given chunks.
- */
- public SAMRecordIterator iterator(final SAMFileSpan chunks) {
- return new AssertableIterator(mReader.getIterator(chunks));
- }
-
- /**
- * Gets a pointer spanning all reads in the BAM file.
- * @return Unbounded pointer to the first record, in chunk format.
- */
- public SAMFileSpan getFilePointerSpanningReads() {
- return mReader.getFilePointerSpanningReads();
- }
-
- /**
- * Iterate over records that match the given interval. Only valid to call this if hasIndex() == true.
- * <p/>
- * Only a single open iterator on a given SAMFileReader may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first. You can use a second SAMFileReader to iterate
- * in parallel over the same underlying file.
- * <p/>
- * Note that indexed lookup is not perfectly efficient in terms of disk I/O. I.e. some SAMRecords may be read
- * and then discarded because they do not match the interval of interest.
- * <p/>
- * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
- * is in the query region.
- *
- * @param sequence Reference sequence of interest.
- * @param start 1-based, inclusive start of interval of interest. Zero implies start of the reference sequence.
- * @param end 1-based, inclusive end of interval of interest. Zero implies end of the reference sequence.
- * @param contained If true, each SAMRecord returned is will have its alignment completely contained in the
- * interval of interest. If false, the alignment of the returned SAMRecords need only overlap the interval of interest.
- * @return Iterator over the SAMRecords matching the interval.
- */
- public SAMRecordIterator query(final String sequence, final int start, final int end, final boolean contained) {
- return new AssertableIterator(mReader.query(sequence, start, end, contained));
- }
-
- /**
- * Iterate over records that overlap the given interval. Only valid to call this if hasIndex() == true.
- * <p/>
- * Only a single open iterator on a given SAMFileReader may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first.
- * <p/>
- * Note that indexed lookup is not perfectly efficient in terms of disk I/O. I.e. some SAMRecords may be read
- * and then discarded because they do not match the interval of interest.
- * <p/>
- * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
- * is in the query region.
- *
- * @param sequence Reference sequence of interest.
- * @param start 1-based, inclusive start of interval of interest. Zero implies start of the reference sequence.
- * @param end 1-based, inclusive end of interval of interest. Zero implies end of the reference sequence.
- * @return Iterator over the SAMRecords overlapping the interval.
- */
- public SAMRecordIterator queryOverlapping(final String sequence, final int start, final int end) {
- return query(sequence, start, end, false);
- }
-
- /**
- * Iterate over records that are contained in the given interval. Only valid to call this if hasIndex() == true.
- * <p/>
- * Only a single open iterator on a given SAMFileReader may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first.
- * <p/>
- * Note that indexed lookup is not perfectly efficient in terms of disk I/O. I.e. some SAMRecords may be read
- * and then discarded because they do not match the interval of interest.
- * <p/>
- * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
- * is in the query region.
- *
- * @param sequence Reference sequence of interest.
- * @param start 1-based, inclusive start of interval of interest. Zero implies start of the reference sequence.
- * @param end 1-based, inclusive end of interval of interest. Zero implies end of the reference sequence.
- * @return Iterator over the SAMRecords contained in the interval.
- */
- public SAMRecordIterator queryContained(final String sequence, final int start, final int end) {
- return query(sequence, start, end, true);
- }
-
- /**
- * Iterate over records that match one of the given intervals. This may be more efficient than querying
- * each interval separately, because multiple reads of the same SAMRecords is avoided.
- * <p/>
- * Only valid to call this if hasIndex() == true.
- * <p/>
- * Only a single open iterator on a given SAMFileReader may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first. You can use a second SAMFileReader to iterate
- * in parallel over the same underlying file.
- * <p/>
- * Note that indexed lookup is not perfectly efficient in terms of disk I/O. I.e. some SAMRecords may be read
- * and then discarded because they do not match an interval of interest.
- * <p/>
- * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
- * is in the query region.
- *
- * @param intervals Intervals to be queried. The intervals must be optimized, i.e. in order, with overlapping
- * and abutting intervals merged. This can be done with
- * net.sf.samtools.SAMFileReader.QueryInterval#optimizeIntervals(net.sf.samtools.SAMFileReader.QueryInterval[])
- * @param contained If true, each SAMRecord returned is will have its alignment completely contained in one of the
- * intervals of interest. If false, the alignment of the returned SAMRecords need only overlap one of
- * the intervals of interest.
- * @return Iterator over the SAMRecords matching the interval.
- */
- public SAMRecordIterator query(final QueryInterval[] intervals, final boolean contained) {
- return new AssertableIterator(mReader.query(intervals, contained));
- }
-
- /**
- * Iterate over records that overlap any of the given intervals. This may be more efficient than querying
- * each interval separately, because multiple reads of the same SAMRecords is avoided.
- * <p/>
- * Only valid to call this if hasIndex() == true.
- * <p/>
- * Only a single open iterator on a given SAMFileReader may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first.
- * <p/>
- * Note that indexed lookup is not perfectly efficient in terms of disk I/O. I.e. some SAMRecords may be read
- * and then discarded because they do not match the interval of interest.
- * <p/>
- * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
- * is in the query region.
- *
- * @param intervals Intervals to be queried. The intervals must be optimized, i.e. in order, with overlapping
- * and abutting intervals merged. This can be done with
- * net.sf.samtools.SAMFileReader.QueryInterval#optimizeIntervals(net.sf.samtools.SAMFileReader.QueryInterval[])
- * @return Iterator over the SAMRecords overlapping any of the intervals.
- */
- public SAMRecordIterator queryOverlapping(final QueryInterval[] intervals) {
- return query(intervals, false);
- }
-
- /**
- * Iterate over records that are contained in the given interval. This may be more efficient than querying
- * each interval separately, because multiple reads of the same SAMRecords is avoided.
- * <p/>
- * Only valid to call this if hasIndex() == true.
- * <p/>
- * Only a single open iterator on a given SAMFileReader may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first.
- * <p/>
- * Note that indexed lookup is not perfectly efficient in terms of disk I/O. I.e. some SAMRecords may be read
- * and then discarded because they do not match the interval of interest.
- * <p/>
- * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
- * is in the query region.
- *
- * @param intervals Intervals to be queried. The intervals must be optimized, i.e. in order, with overlapping
- * and abutting intervals merged. This can be done with
- * net.sf.samtools.SAMFileReader.QueryInterval#optimizeIntervals(net.sf.samtools.SAMFileReader.QueryInterval[])
- * @return Iterator over the SAMRecords contained in any of the intervals.
- */
- public SAMRecordIterator queryContained(final QueryInterval[] intervals) {
- return query(intervals, true);
- }
-
-
- public SAMRecordIterator queryUnmapped() {
- return new AssertableIterator(mReader.queryUnmapped());
- }
-
- /**
- * Iterate over records that map to the given sequence and start at the given position. Only valid to call this if hasIndex() == true.
- * <p/>
- * Only a single open iterator on a given SAMFileReader may be extant at any one time. If you want to start
- * a second iteration, the first one must be closed first.
- * <p/>
- * Note that indexed lookup is not perfectly efficient in terms of disk I/O. I.e. some SAMRecords may be read
- * and then discarded because they do not match the interval of interest.
- * <p/>
- * Note that an unmapped read will be returned by this call if it has a coordinate for the purpose of sorting that
- * matches the arguments.
- *
- * @param sequence Reference sequence of interest.
- * @param start Alignment start of interest.
- * @return Iterator over the SAMRecords with the given alignment start.
- */
- public SAMRecordIterator queryAlignmentStart(final String sequence, final int start) {
- return new AssertableIterator(mReader.queryAlignmentStart(sequence, start));
- }
-
- /**
- * Fetch the mate for the given read. Only valid to call this if hasIndex() == true.
- * This will work whether the mate has a coordinate or not, so long as the given read has correct
- * mate information. This method iterates over the SAM file, so there may not be an unclosed
- * iterator on the SAM file when this method is called.
- *
- * Note that it is not possible to call queryMate when iterating over the SAMFileReader, because queryMate
- * requires its own iteration, and there cannot be two simultaneous iterations on the same SAMFileReader. The
- * work-around is to open a second SAMFileReader on the same input file, and call queryMate on the second
- * reader.
- *
- * @param rec Record for which mate is sought. Must be a paired read.
- * @return rec's mate, or null if it cannot be found.
- */
- public SAMRecord queryMate(final SAMRecord rec) {
- if (!rec.getReadPairedFlag()) {
- throw new IllegalArgumentException("queryMate called for unpaired read.");
- }
- if (rec.getFirstOfPairFlag() == rec.getSecondOfPairFlag()) {
- throw new IllegalArgumentException("SAMRecord must be either first and second of pair, but not both.");
- }
- final boolean firstOfPair = rec.getFirstOfPairFlag();
- final CloseableIterator<SAMRecord> it;
- if (rec.getMateReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- it = queryUnmapped();
- } else {
- it = queryAlignmentStart(rec.getMateReferenceName(), rec.getMateAlignmentStart());
- }
- try {
- SAMRecord mateRec = null;
- while (it.hasNext()) {
- final SAMRecord next = it.next();
- if (!next.getReadPairedFlag()) {
- if (rec.getReadName().equals(next.getReadName())) {
- throw new SAMFormatException("Paired and unpaired reads with same name: " + rec.getReadName());
- }
- continue;
- }
- if (firstOfPair) {
- if (next.getFirstOfPairFlag()) continue;
- } else {
- if (next.getSecondOfPairFlag()) continue;
- }
- if (rec.getReadName().equals(next.getReadName())) {
- if (mateRec != null) {
- throw new SAMFormatException("Multiple SAMRecord with read name " + rec.getReadName() +
- " for " + (firstOfPair ? "second" : "first") + " end.");
- }
- mateRec = next;
- }
- }
- return mateRec;
- } finally {
- it.close();
- }
- }
-
-
- private void init(final SeekableStream strm, final File indexFile, final boolean eagerDecode,
- final ValidationStringency validationStringency) {
-
- try {
- if (streamLooksLikeBam(strm)) {
- mIsBinary = true;
- mReader = new BAMFileReader(strm, indexFile, eagerDecode, validationStringency, this.samRecordFactory);
- } else {
- throw new SAMFormatException("Unrecognized file format: " + strm);
- }
- setValidationStringency(validationStringency);
- }
- catch (final IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- private void init(final SeekableStream strm, final SeekableStream indexStream, final boolean eagerDecode,
- final ValidationStringency validationStringency) {
-
- try {
- if (streamLooksLikeBam(strm)) {
- mIsBinary = true;
- mReader = new BAMFileReader(strm, indexStream, eagerDecode, validationStringency, this.samRecordFactory);
- } else {
- throw new SAMFormatException("Unrecognized file format: " + strm);
- }
- setValidationStringency(validationStringency);
- }
- catch (final IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- // Its too expensive to examine the remote file to determine type.
- // Rely on file extension.
- private boolean streamLooksLikeBam(final SeekableStream strm) {
- String source = strm.getSource();
- if(source == null) return true;
- source = source.toLowerCase();
- //Source will typically be a file path or URL
- //If it's a URL we require one of the query parameters to be bam file
- return source.endsWith(".bam") || source.contains(".bam?")|| source.contains(".bam&") || source.contains(".bam%26");
- }
-
- private void init(final InputStream stream, final File file, final File indexFile, final boolean eagerDecode, final ValidationStringency validationStringency) {
- if (stream != null && file != null) throw new IllegalArgumentException("stream and file are mutually exclusive");
- this.samFile = file;
-
- try {
- final BufferedInputStream bufferedStream;
- // Buffering is required because mark() and reset() are called on the input stream.
- final int bufferSize = Math.max(Defaults.BUFFER_SIZE, BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE);
- if (file != null) bufferedStream = new BufferedInputStream(new FileInputStream(file), bufferSize);
- else bufferedStream = IOUtil.toBufferedStream(stream);
- if (isBAMFile(bufferedStream)) {
- mIsBinary = true;
- if (file == null || !file.isFile()) {
- // Handle case in which file is a named pipe, e.g. /dev/stdin or created by mkfifo
- mReader = new BAMFileReader(bufferedStream, indexFile, eagerDecode, validationStringency, this.samRecordFactory);
- } else {
- bufferedStream.close();
- mReader = new BAMFileReader(file, indexFile, eagerDecode, validationStringency, this.samRecordFactory);
- }
- } else if (BlockCompressedInputStream.isValidFile(bufferedStream)) {
- mIsBinary = false;
- mReader = new SAMTextReader(new BlockCompressedInputStream(bufferedStream), validationStringency, this.samRecordFactory);
- } else if (isGzippedSAMFile(bufferedStream)) {
- mIsBinary = false;
- mReader = new SAMTextReader(new GZIPInputStream(bufferedStream), validationStringency, this.samRecordFactory);
- } else if (isSAMFile(bufferedStream)) {
- if (indexFile != null) {
- bufferedStream.close();
- throw new RuntimeException("Cannot use index file with textual SAM file");
- }
- mIsBinary = false;
- mReader = new SAMTextReader(bufferedStream, file, validationStringency, this.samRecordFactory);
- } else {
- bufferedStream.close();
- throw new SAMFormatException("Unrecognized file format");
- }
-
- setValidationStringency(validationStringency);
- mReader.setSAMRecordFactory(this.samRecordFactory);
- }
- catch (final IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * @param stream stream.markSupported() must be true
- * @return true if this looks like a BAM file.
- */
- private boolean isBAMFile(final InputStream stream)
- throws IOException {
- if (!BlockCompressedInputStream.isValidFile(stream)) {
- return false;
- }
- final int buffSize = BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE;
- stream.mark(buffSize);
- final byte[] buffer = new byte[buffSize];
- readBytes(stream, buffer, 0, buffSize);
- stream.reset();
- final byte[] magicBuf = new byte[4];
- final int magicLength = readBytes(new BlockCompressedInputStream(new ByteArrayInputStream(buffer)), magicBuf, 0, 4);
- return magicLength == BAMFileConstants.BAM_MAGIC.length && Arrays.equals(BAMFileConstants.BAM_MAGIC, magicBuf);
- }
-
- private static int readBytes(final InputStream stream, final byte[] buffer, final int offset, final int length)
- throws IOException {
- int bytesRead = 0;
- while (bytesRead < length) {
- final int count = stream.read(buffer, offset + bytesRead, length - bytesRead);
- if (count <= 0) {
- break;
- }
- bytesRead += count;
- }
- return bytesRead;
- }
-
- /**
- * Attempts to check whether the file is a gzipped sam file. Returns true if it
- * is and false otherwise.
- */
- private boolean isGzippedSAMFile(final BufferedInputStream stream) {
- if (!stream.markSupported()) {
- throw new IllegalArgumentException("Cannot test a stream that doesn't support marking.");
- }
- stream.mark(8000);
-
- try {
- final GZIPInputStream gunzip = new GZIPInputStream(stream);
- final int ch = gunzip.read();
- return true;
- }
- catch (final IOException ioe) {
- return false;
- }
- finally {
- try {
- stream.reset();
- }
- catch (final IOException ioe) {
- throw new IllegalStateException("Could not reset stream.");
- }
- }
- }
-
- private boolean isSAMFile(final InputStream stream) {
- // For now, assume every non-binary file is a SAM text file.
- return true;
- }
-
- @Override
- public String toString() {
- if (this.samFile == null) {
- return getClass().getSimpleName() + "{initialized with stream}";
- } else {
- return getClass().getSimpleName() + "{" + this.samFile.getAbsolutePath() + "}";
- }
- }
-
- /**
- * Wrapper class to let calls to Iterator return a SAMRecordIterator
- */
- static class AssertableIterator implements SAMRecordIterator {
-
- private final CloseableIterator<SAMRecord> wrappedIterator;
- private SAMRecord previous = null;
- private SAMRecordComparator comparator = null;
-
- public AssertableIterator(final CloseableIterator<SAMRecord> iterator) {
- wrappedIterator = iterator;
- }
-
- public SAMRecordIterator assertSorted(final SAMFileHeader.SortOrder sortOrder) {
-
- if (sortOrder == null || sortOrder == SAMFileHeader.SortOrder.unsorted) {
- comparator = null;
- return this;
- }
-
- comparator = sortOrder.getComparatorInstance();
- return this;
- }
-
- public SAMRecord next() {
- final SAMRecord result = wrappedIterator.next();
- if (comparator != null) {
- if (previous != null) {
- if (comparator.fileOrderCompare(previous, result) > 0) {
- throw new IllegalStateException("Records " + previous.getReadName() + " (" +
- previous.getReferenceName() + ":" + previous.getAlignmentStart() + ") " +
- "should come after " + result.getReadName() + " (" +
- result.getReferenceName() + ":" + result.getAlignmentStart() +
- ") when sorting with " + comparator.getClass().getName());
- }
- }
- previous = result;
- }
- return result;
- }
-
- public void close() { wrappedIterator.close(); }
- public boolean hasNext() { return wrappedIterator.hasNext(); }
- public void remove() { wrappedIterator.remove(); }
- }
-
-
- /**
- * Interval relative to a reference, for querying a BAM file.
- */
- public static class QueryInterval implements Comparable<QueryInterval> {
-
- /** Index of reference sequence, based on the sequence dictionary of the BAM file being queried. */
- public final int referenceIndex;
- /** 1-based, inclusive */
- public final int start;
- /** 1-based, inclusive. If <= 0, implies that the interval goes to the end of the reference sequence */
- public final int end;
-
-
- public QueryInterval(final int referenceIndex, final int start, final int end) {
- if (referenceIndex < 0) {
- throw new IllegalArgumentException("Invalid reference index " + referenceIndex);
- }
- this.referenceIndex = referenceIndex;
- this.start = start;
- this.end = end;
- }
-
-
- public int compareTo(final QueryInterval other) {
- int comp = this.referenceIndex - other.referenceIndex;
- if (comp != 0) return comp;
- comp = this.start - other.start;
- if (comp != 0) return comp;
- else if (this.end == other.end) return 0;
- else if (this.end == 0) return 1;
- else if (other.end == 0) return -1;
- else return this.end - other.end;
- }
-
- /**
- * @return true if both are on same reference, and other starts exactly where this ends.
- */
- public boolean abuts(final QueryInterval other) {
- return this.referenceIndex == other.referenceIndex && this.end == other.start;
- }
-
- /**
- * @return true if both are on same reference, and the overlap.
- */
- public boolean overlaps(final QueryInterval other) {
- if (this.referenceIndex != other.referenceIndex) {
- return false;
- }
- final int thisEnd = (this.end == 0? Integer.MAX_VALUE: this.end);
- final int otherEnd = (other.end == 0? Integer.MAX_VALUE: other.end);
- return CoordMath.overlaps(this.start, thisEnd, other.start, otherEnd);
- }
-
- @Override
- public String toString() {
- return String.format("%d:%d-%d", referenceIndex, start, end);
- }
-
- private static final QueryInterval[] EMPTY_QUERY_INTERVAL_ARRAY = new QueryInterval[0];
-
- /**
- *
- * @param inputIntervals WARNING: This list is modified (sorted) by this method.
- * @return Ordered list of intervals in which abutting and overlapping intervals are merged.
- */
- public static QueryInterval[] optimizeIntervals(final QueryInterval[] inputIntervals) {
- if (inputIntervals.length == 0) return EMPTY_QUERY_INTERVAL_ARRAY;
- Arrays.sort(inputIntervals);
-
- final List<QueryInterval> unique = new ArrayList<QueryInterval>();
- QueryInterval previous = inputIntervals[0];
-
-
- for(int i = 1; i < inputIntervals.length; ++i) {
- final QueryInterval next = inputIntervals[i];
- if (previous.abuts(next) || previous.overlaps(next)) {
- final int newEnd = ((previous.end == 0 || next.end == 0)? 0: Math.max(previous.end, next.end));
- previous = new QueryInterval(previous.referenceIndex, previous.start, newEnd);
- }
- else {
- unique.add(previous);
- previous = next;
- }
- }
-
- if (previous != null) unique.add(previous);
-
- return unique.toArray(EMPTY_QUERY_INTERVAL_ARRAY);
- }
- }
-
- /**
- * Convenience method to create a QueryInterval
- * @param sequence sequence of interest, must exist in sequence dictionary
- * @param start 1-based start position, must be >= 1
- * @param end 1-based end position.
- * @throws java.lang.IllegalArgumentException if sequence not found in sequence dictionary, or start position < 1
- */
- public QueryInterval makeQueryInterval(final String sequence, int start, int end) {
- int referenceIndex = getFileHeader().getSequenceIndex(sequence);
- if (referenceIndex < 0) {
- throw new IllegalArgumentException(String.format("Sequence '%s' not found in sequence dictionary", sequence));
- }
- if (start < 1) {
- throw new IllegalArgumentException("Start position must be >= 1");
- }
- return new QueryInterval(referenceIndex, start, end);
- }
-
- /**
- * Convenience method to create a QueryInterval that goes from start to end of given sequence.
- * @param sequence sequence of interest, must exist in sequence dictionary
- * @param start 1-based start position, must be >= 1
- * @throws java.lang.IllegalArgumentException if sequence not found in sequence dictionary, or start position < 1
- */
- public QueryInterval makeQueryInterval(final String sequence, int start) {
- return makeQueryInterval(sequence, start, 0);
- }
-
-}
diff --git a/src/java/net/sf/samtools/SAMFileSource.java b/src/java/net/sf/samtools/SAMFileSource.java
deleted file mode 100644
index 2272543..0000000
--- a/src/java/net/sf/samtools/SAMFileSource.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Represents the origin of a SAM record.
- *
- * @author mhanna
- * @version 0.1
- */
-public class SAMFileSource {
- /**
- * The reader originating this SAM record.
- */
- private SAMFileReader mReader;
-
- /**
- * The point on disk from which a record originates.
- */
- private SAMFileSpan mFilePointer;
-
- /**
- * Create a new SAMFileSource with the given reader and file pointer.
- * @param reader reader.
- * @param filePointer File pointer.
- */
- public SAMFileSource(final SAMFileReader reader, final SAMFileSpan filePointer) {
- this.mReader = reader;
- this.mFilePointer = filePointer;
- }
-
- /**
- * Retrieves the reader from which this read was initially retrieved.
- * @return The reader.
- */
- public SAMFileReader getReader() {
- return mReader;
- }
-
- /**
- * A pointer to the region on disk from which the read originated.
- * @return A pointer within the file.
- */
- public SAMFileSpan getFilePointer() {
- return mFilePointer;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMFileSpan.java b/src/java/net/sf/samtools/SAMFileSpan.java
deleted file mode 100644
index 4b0bf69..0000000
--- a/src/java/net/sf/samtools/SAMFileSpan.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.StringUtil;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * A interface representing a collection of (possibly) discontinuous segments in the
- * BAM file, possibly representing the results of an index query.
- */
-public interface SAMFileSpan extends Cloneable {
- /**
- * Gets a pointer over the data immediately following this span.
- * @return The a pointer to data immediately following this span.
- */
- public SAMFileSpan getContentsFollowing();
-
- /**
- * Remove all pointers in this file span before the given file span starts.
- * @param fileSpan The filespan before which to eliminate.
- * @return The portion of the chunk list after the given chunk.
- */
- public SAMFileSpan removeContentsBefore(final SAMFileSpan fileSpan);
-
- /**
- * Does this file span point to any data, or is it completely empty?
- * @return True if the file span is empty, false otherwise.
- */
- public boolean isEmpty();
-}
-
-/**
- * An ordered list of chunks, capable of representing a set of discontiguous
- * regions in the BAM file. FileSpans are mutable within the package, but perceived
- * as immutable outside the package.
- *
- * Some operations on FileSpans assume that the spans are sorted. In these cases,
- * sort order will be validated.
- *
- * @author mhanna
- * @version 0.1
- */
-class BAMFileSpan implements SAMFileSpan, Serializable {
- private static final long serialVersionUID = 1L;
-
- /**
- * The constituent chunks of this list.
- */
- private final List<Chunk> chunks;
-
- /**
- * Create a new empty list of chunks.
- */
- protected BAMFileSpan() {
- this.chunks = new ArrayList<Chunk>();
- }
-
- /**
- * Convenience constructor to construct a BAM file span from
- * a single chunk.
- * @param chunk Chunk to use as the sole region in this span.
- */
- protected BAMFileSpan(final Chunk chunk) {
- this.chunks = new ArrayList<Chunk>();
- chunks.add(chunk);
- }
-
- /**
- * Create a new chunk list from the given list of chunks.
- * @param chunks Constituent chunks.
- */
- protected BAMFileSpan(final List<Chunk> chunks) {
- this.chunks = new ArrayList<Chunk>(chunks);
- }
-
- /**
- * Does this chunk list map to any position within the BAM file?
- * @return True iff the ChunkList points to any data within the BAM.
- */
- public boolean isEmpty() {
- return chunks.isEmpty();
- }
-
- /**
- * Deep clone the given chunk list.
- * @return A copy of the chunk list.
- */
- public BAMFileSpan clone() {
- final BAMFileSpan clone = new BAMFileSpan();
- for(final Chunk chunk: chunks)
- clone.chunks.add(chunk.clone());
- return clone;
- }
-
- /**
- * Remove all chunks in this file span before the given file span starts.
- * If a chunk in the chunk list starts before and ends after the given
- * chunk, the first portion of the chunk will be deleted.
- * @param fileSpan The filespan before which to eliminate.
- * @return The portion of the chunk list after the given chunk.
- */
- public SAMFileSpan removeContentsBefore(final SAMFileSpan fileSpan) {
- if(fileSpan == null)
- return clone();
-
- if(!(fileSpan instanceof BAMFileSpan))
- throw new SAMException("Unable to compare ");
-
- final BAMFileSpan bamFileSpan = (BAMFileSpan)fileSpan;
-
- if(bamFileSpan.isEmpty())
- return clone();
-
- validateSorted();
-
- final BAMFileSpan trimmedChunkList = new BAMFileSpan();
- for(final Chunk chunkToTrim: chunks) {
- if(chunkToTrim.getChunkEnd() > chunkToTrim.getChunkStart()) {
- if(chunkToTrim.getChunkStart() >= bamFileSpan.chunks.get(0).getChunkStart()) {
- // This chunk from the list is completely beyond the start of the filtering chunk.
- trimmedChunkList.add(chunkToTrim.clone());
- }
- else {
- // This chunk from the list partially overlaps the filtering chunk and must be trimmed.
- trimmedChunkList.add(new Chunk(bamFileSpan.chunks.get(0).getChunkStart(),chunkToTrim.getChunkEnd()));
- }
- }
- }
- return trimmedChunkList;
- }
-
- /**
- * Gets a file span over the data immediately following this span.
- * @return The a pointer to data immediately following this span.
- */
- public SAMFileSpan getContentsFollowing() {
- if(chunks.isEmpty())
- throw new SAMException("Unable to get the file pointer following this one: no data present.");
- validateSorted();
- return new BAMFileSpan(new Chunk(chunks.get(chunks.size()-1).getChunkEnd(),Long.MAX_VALUE));
- }
-
- /**
- * Merge one span into another
- *
- * @param span - span with chunks to add to this one
- */
- public void add(final BAMFileSpan span) {
- for (final Chunk c : span.chunks) {
- chunks.add(c);
- }
- }
-
- /**
- * Adds a new chunk to this list. Visible only within the BAm.
- * @param chunk Chunk to add.
- */
- protected void add(final Chunk chunk) {
- chunks.add(chunk);
- }
-
- /**
- * Convert the chunk list to an array of offsets, paired in [start,end) format.
- * @return Array of offsets.
- */
- protected long[] toCoordinateArray() {
- final int count = chunks.size() * 2;
- if (count == 0) {
- return null;
- }
- int index = 0;
- final long[] result = new long[count];
- for (final Chunk chunk : chunks) {
- result[index++] = chunk.getChunkStart();
- result[index++] = chunk.getChunkEnd();
- }
- return result;
- }
-
- /**
- * Find the first offset in the chunk list
- * @return The first offset in the span
- */
- protected long getFirstOffset() {
- final long result = 0;
- if (chunks == null){
- return result;
- }
- for (final Chunk chunk : chunks) {
- return chunk.getChunkStart();
- }
- return result;
- }
-
- /**
- * Gets the constituent chunks stored in this span.
- * @return An unmodifiable list of chunks.
- */
- protected List<Chunk> getChunks() {
- return Collections.unmodifiableList(chunks);
- }
-
- /**
- * Checks that there is only a single chunk for this span and returns it.
- * @return The single chunk stored in this span
- */
- protected Chunk getSingleChunk() {
- if (chunks.size() != 1){
- throw new SAMException("Expecting a single chunk for span. Found " + chunks.size());
- }
- return chunks.get(0);
- }
-
- /**
- * The list of chunks is often represented as an array of
- * longs where every even-numbered index is a start coordinate
- * and every odd-numbered index is a stop coordinate. Convert
- * from that format back to a list of chunks.
- * @param coordinateArray List of chunks to convert.
- * @return A list of chunks.
- */
- protected static SAMFileSpan toChunkList(final long[] coordinateArray) {
- if(coordinateArray.length % 2 != 0)
- throw new SAMException("Data supplied does not appear to be in coordinate array format.");
-
- final BAMFileSpan chunkList = new BAMFileSpan();
- for(int i = 0; i < coordinateArray.length; i += 2)
- chunkList.add(new Chunk(coordinateArray[i],coordinateArray[i+1]));
-
- chunkList.validateSorted();
-
- return chunkList;
- }
-
- /**
- * Validates the list of chunks to ensure that they appear in sorted order.
- */
- private void validateSorted() {
- for(int i = 1; i < chunks.size(); i++) {
- if(chunks.get(i).getChunkStart() < chunks.get(i-1).getChunkEnd())
- throw new SAMException(String.format("Chunk list is unsorted; chunk %s is before chunk %s",chunks.get(i-1),chunks.get(i)));
- }
- }
-
- /**
- * Creates a string representation of this chunk list.
- */
- @Override
- public String toString() {
- return StringUtil.join(";", chunks);
- }
-
- /**
- *
- * @return A single BAMFileSpan that is an intelligent merge of the input spans, i.e. contiguous, overlapping
- * and contained chunks are intelligently merged, and the chunks are sorted.
- */
- public static BAMFileSpan merge(final BAMFileSpan[] spans) {
- int numInputChunks = 0;
- for (final BAMFileSpan span : spans) numInputChunks += span.chunks.size();
- final ArrayList<Chunk> inputChunks = new ArrayList<Chunk>(numInputChunks);
- for (final BAMFileSpan span : spans) inputChunks.addAll(span.chunks);
- return new BAMFileSpan(Chunk.optimizeChunkList(inputChunks, 0));
- }
-}
diff --git a/src/java/net/sf/samtools/SAMFileTruncatedReader.java b/src/java/net/sf/samtools/SAMFileTruncatedReader.java
deleted file mode 100644
index 7b2c1bd..0000000
--- a/src/java/net/sf/samtools/SAMFileTruncatedReader.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package net.sf.samtools;
-
-import java.io.File;
-import java.util.NoSuchElementException;
-
-/**
- * A truncated form of a SAMFileReader that iterates over a limited number of records.
- *
- * @author mccowan at broadinstitute.org
- */
-public class SAMFileTruncatedReader extends SAMFileReader {
- private class TruncatedIterator implements SAMRecordIterator {
- final SAMRecordIterator i;
- final long max;
- long currentRecord = 0;
-
- TruncatedIterator(final SAMRecordIterator i, final long max) {
- this.i = i;
- this.max = max;
- }
-
- public boolean hasNext() {
- return i.hasNext() && max != currentRecord;
- }
-
- public SAMRecord next() {
- if (this.hasNext()) {
- currentRecord += 1;
- return i.next();
- } else {
- throw new NoSuchElementException();
- }
- }
-
- public void remove() {
- i.remove();
- }
-
- public void close() {
- i.close();
- }
-
- public SAMRecordIterator assertSorted(final SAMFileHeader.SortOrder sortOrder) {
- return i.assertSorted(sortOrder);
- }
- }
-
- private final long maxRecordsToIterate;
-
- /**
- * @param input The SAM file
- * @param max The maximum number of records to read from the file via iterator() methods
- */
- public SAMFileTruncatedReader(final File input, final long max) {
- super(input);
- this.maxRecordsToIterate = max;
- }
-
- @Override
- public SAMRecordIterator iterator() {
- return new TruncatedIterator(super.iterator(), maxRecordsToIterate);
- }
-
- @Override
- public SAMRecordIterator iterator(final SAMFileSpan chunks) {
- return new TruncatedIterator(super.iterator(chunks), maxRecordsToIterate);
- }
-}
diff --git a/src/java/net/sf/samtools/SAMFileWriter.java b/src/java/net/sf/samtools/SAMFileWriter.java
deleted file mode 100644
index 46790fc..0000000
--- a/src/java/net/sf/samtools/SAMFileWriter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.ProgressLoggerInterface;
-
-/**
- * Interface for SAMText and BAM file writers. Clients need not care which they write to,
- * once the object is constructed.
- */
-public interface SAMFileWriter {
-
- void addAlignment(SAMRecord alignment);
-
- SAMFileHeader getFileHeader();
-
- /**
- * Sets a ProgressLogger on this writer. This is useful when pulling, for instance, from a
- * SortingCollection.
- */
- void setProgressLogger(final ProgressLoggerInterface progress);
-
- /**
- * Must be called to flush or file will likely be defective.
- */
- void close();
-}
diff --git a/src/java/net/sf/samtools/SAMFileWriterFactory.java b/src/java/net/sf/samtools/SAMFileWriterFactory.java
deleted file mode 100644
index e38cce1..0000000
--- a/src/java/net/sf/samtools/SAMFileWriterFactory.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import net.sf.samtools.util.IOUtil;
-import net.sf.samtools.util.Md5CalculatingOutputStream;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.*;
-
-/**
- * Create a SAMFileWriter for writing SAM or BAM.
- */
-public class SAMFileWriterFactory {
- private static boolean defaultCreateIndexWhileWriting = Defaults.CREATE_INDEX;
- private boolean createIndex = defaultCreateIndexWhileWriting ;
- private static boolean defaultCreateMd5File = Defaults.CREATE_MD5;
- private boolean createMd5File = defaultCreateMd5File;
- private boolean useAsyncIo = Defaults.USE_ASYNC_IO;
- private int asyncOutputBufferSize = AsyncSAMFileWriter.DEFAULT_QUEUE_SIZE;
- private int bufferSize = Defaults.BUFFER_SIZE;
- private File tmpDir;
-
-
- private Integer maxRecordsInRam;
-
- /** Sets the default for whether to create md5Files for BAM files this factory. */
- public static void setDefaultCreateMd5File(final boolean createMd5File) {
- defaultCreateMd5File = createMd5File;
- }
-
- /** Sets whether to create md5Files for BAMs from this factory. */
- public SAMFileWriterFactory setCreateMd5File(final boolean createMd5File) {
- this.createMd5File = createMd5File;
- return this;
- }
-
- /**
- * Sets the default for subsequent SAMFileWriterFactories
- * that do not specify whether to create an index.
- * If a BAM (not SAM) file is created, the setting is true, and the file header specifies coordinate order,
- * then a BAM index file will be written along with the BAM file.
- *
- * @param setting whether to attempt to create a BAM index while creating the BAM file
- */
- public static void setDefaultCreateIndexWhileWriting(final boolean setting) {
- defaultCreateIndexWhileWriting = setting;
- }
-
- /**
- * Convenience method allowing newSAMFileWriterFactory().setCreateIndex(true);
- * Equivalent to SAMFileWriterFactory.setDefaultCreateIndexWhileWriting(true); newSAMFileWriterFactory();
- * If a BAM (not SAM) file is created, the setting is true, and the file header specifies coordinate order,
- * then a BAM index file will be written along with the BAM file.
- *
- * @param setting whether to attempt to create a BAM index while creating the BAM file.
- * @return this factory object
- */
- public SAMFileWriterFactory setCreateIndex(final boolean setting){
- this.createIndex = setting;
- return this;
- }
-
- /**
- * Before creating a writer that is not presorted, this method may be called in order to override
- * the default number of SAMRecords stored in RAM before spilling to disk
- * (c.f. SAMFileWriterImpl.MAX_RECORDS_IN_RAM). When writing very large sorted SAM files, you may need
- * call this method in order to avoid running out of file handles. The RAM available to the JVM may need
- * to be increased in order to hold the specified number of records in RAM. This value affects the number
- * of records stored in subsequent calls to one of the make...() methods.
- *
- * @param maxRecordsInRam Number of records to store in RAM before spilling to temporary file when
- * creating a sorted SAM or BAM file.
- */
- public SAMFileWriterFactory setMaxRecordsInRam(final int maxRecordsInRam) {
- this.maxRecordsInRam = maxRecordsInRam;
- return this;
- }
-
- /**
- * Turn on or off the use of asynchronous IO for writing output SAM and BAM files. If true then
- * each SAMFileWriter creates a dedicated thread which is used for compression and IO activities.
- */
- public SAMFileWriterFactory setUseAsyncIo(final boolean useAsyncIo) {
- this.useAsyncIo = useAsyncIo;
- return this;
- }
-
- /**
- * If and only if using asynchronous IO then sets the maximum number of records that can be buffered per
- * SAMFileWriter before producers will block when trying to write another SAMRecord.
- */
- public SAMFileWriterFactory setAsyncOutputBufferSize(final int asyncOutputBufferSize) {
- this.asyncOutputBufferSize = asyncOutputBufferSize;
- return this;
- }
-
- /**
- * Controls size of write buffer.
- * Default value: [[net.sf.samtools.Defaults#BUFFER_SIZE]]
- *
- */
- public SAMFileWriterFactory setBufferSize(final int bufferSize) {
- this.bufferSize = bufferSize;
- return this;
- }
-
- /**
- * Set the temporary directory to use when sort data.
- * @param tmpDir Path to the temporary directory
- */
- public SAMFileWriterFactory setTempDirectory(final File tmpDir) {
- this.tmpDir = tmpDir;
- return this;
- }
-
- /**
- * Create a BAMFileWriter that is ready to receive SAMRecords. Uses default compression level.
- * @param header entire header. Sort order is determined by the sortOrder property of this arg.
- * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
- * @param outputFile where to write the output.
- */
- public SAMFileWriter makeBAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile) {
- return makeBAMWriter(header, presorted, outputFile, BlockCompressedOutputStream.getDefaultCompressionLevel());
- }
-
- /**
- *
- * Create a BAMFileWriter that is ready to receive SAMRecords.
- * @param header entire header. Sort order is determined by the sortOrder property of this arg.
- * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
- * @param outputFile where to write the output.
- * @param compressionLevel Override default compression level with the given value, between 0 (fastest) and 9 (smallest).
- */
- public SAMFileWriter makeBAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile,
- final int compressionLevel) {
- try {
- final boolean createMd5File = this.createMd5File && IOUtil.isRegularPath(outputFile);
- if (this.createMd5File && !createMd5File) {
- System.err.println("Cannot create MD5 file for BAM because output file is not a regular file: " + outputFile.getAbsolutePath());
- }
- OutputStream os = IOUtil.maybeBufferOutputStream(new FileOutputStream(outputFile, false), bufferSize);
- if (createMd5File) os = new Md5CalculatingOutputStream(os, new File(outputFile.getAbsolutePath() + ".md5"));
- final BAMFileWriter ret = new BAMFileWriter(os, outputFile, compressionLevel);
- final boolean createIndex = this.createIndex && IOUtil.isRegularPath(outputFile);
- if (this.createIndex && !createIndex) {
- System.err.println("Cannot create index for BAM because output file is not a regular file: " + outputFile.getAbsolutePath());
- }
- if (this.tmpDir!=null) ret.setTempDirectory(this.tmpDir);
- initializeBAMWriter(ret, header, presorted, createIndex);
-
- if (this.useAsyncIo) return new AsyncSAMFileWriter(ret, this.asyncOutputBufferSize);
- else return ret;
- }
- catch (final IOException ioe) {
- throw new RuntimeIOException("Error opening file: " + outputFile.getAbsolutePath());
- }
- }
-
- private void initializeBAMWriter(final BAMFileWriter writer, final SAMFileHeader header, final boolean presorted, final boolean createIndex) {
- writer.setSortOrder(header.getSortOrder(), presorted);
- if (maxRecordsInRam != null) {
- writer.setMaxRecordsInRam(maxRecordsInRam);
- }
- writer.setHeader(header);
- if (createIndex && writer.getSortOrder().equals(SAMFileHeader.SortOrder.coordinate)){
- writer.enableBamIndexConstruction();
- }
- }
-
- /**
- * Create a SAMTextWriter that is ready to receive SAMRecords.
- * @param header entire header. Sort order is determined by the sortOrder property of this arg.
- * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
- * @param outputFile where to write the output.
- */
- public SAMFileWriter makeSAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile) {
- try {
- final SAMTextWriter ret = this.createMd5File
- ? new SAMTextWriter(new Md5CalculatingOutputStream(new FileOutputStream(outputFile, false),
- new File(outputFile.getAbsolutePath() + ".md5")))
- : new SAMTextWriter(outputFile);
- ret.setSortOrder(header.getSortOrder(), presorted);
- if (maxRecordsInRam != null) {
- ret.setMaxRecordsInRam(maxRecordsInRam);
- }
- ret.setHeader(header);
-
- if (this.useAsyncIo) return new AsyncSAMFileWriter(ret, this.asyncOutputBufferSize);
- else return ret;
- }
- catch (final IOException ioe) {
- throw new RuntimeIOException("Error opening file: " + outputFile.getAbsolutePath());
- }
- }
-
- /**
- * Create a SAMTextWriter for writing to a stream that is ready to receive SAMRecords.
- * This method does not support the creation of an MD5 file
- *
- * @param header entire header. Sort order is determined by the sortOrder property of this arg.
- * @param presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
- * @param stream the stream to write records to. Note that this method does not buffer the stream, so the
- * caller must buffer if desired. Note that PrintStream is buffered.
- */
- public SAMFileWriter makeSAMWriter(final SAMFileHeader header, final boolean presorted, final OutputStream stream) {
- final SAMTextWriter ret = new SAMTextWriter(stream);
- ret.setSortOrder(header.getSortOrder(), presorted);
- if (maxRecordsInRam != null) {
- ret.setMaxRecordsInRam(maxRecordsInRam);
- }
- ret.setHeader(header);
-
- if (this.useAsyncIo) return new AsyncSAMFileWriter(ret, this.asyncOutputBufferSize);
- else return ret;
- }
-
-
- /**
- * Create either a SAM or a BAM writer based on examination of the outputFile extension.
- * @param header entire header. Sort order is determined by the sortOrder property of this arg.
- * @param presorted presorted if true, SAMRecords must be added to the SAMFileWriter in order that agrees with header.sortOrder.
- * @param outputFile where to write the output. Must end with .sam or .bam.
- * @return SAM or BAM writer based on file extension of outputFile.
- */
- public SAMFileWriter makeSAMOrBAMWriter(final SAMFileHeader header, final boolean presorted, final File outputFile) {
- final String filename = outputFile.getName();
- if (filename.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION)) {
- return makeBAMWriter(header, presorted, outputFile);
- }
- if (filename.endsWith(".sam")) {
- return makeSAMWriter(header, presorted, outputFile);
- }
- return makeBAMWriter(header, presorted, outputFile);
- }
-
-}
diff --git a/src/java/net/sf/samtools/SAMFileWriterImpl.java b/src/java/net/sf/samtools/SAMFileWriterImpl.java
deleted file mode 100644
index 2e752c8..0000000
--- a/src/java/net/sf/samtools/SAMFileWriterImpl.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.ProgressLoggerInterface;
-import net.sf.samtools.util.SortingCollection;
-
-import java.io.File;
-import java.io.StringWriter;
-
-/**
- * Base class for implementing SAM writer with any underlying format.
- * Mostly this manages accumulation & sorting of SAMRecords when appropriate,
- * and produces the text version of the header, since that seems to be a popular item
- * in both text and binary file formats.
- */
-public abstract class SAMFileWriterImpl implements SAMFileWriter
-{
- private static int DEAFULT_MAX_RECORDS_IN_RAM = 500000;
- private int maxRecordsInRam = DEAFULT_MAX_RECORDS_IN_RAM;
- private SAMFileHeader.SortOrder sortOrder;
- private SAMFileHeader header;
- private SortingCollection<SAMRecord> alignmentSorter;
- private File tmpDir = new File(System.getProperty("java.io.tmpdir"));
- private ProgressLoggerInterface progressLogger = null;
-
- // If true, records passed to addAlignment are already in the order specified by sortOrder
- private boolean presorted;
-
- // For validating presorted records.
- private SAMSortOrderChecker sortOrderChecker;
-
- /**
- * When writing records that are not presorted, specify the number of records stored in RAM
- * before spilling to disk. This method sets the default value for all SamFileWriterImpl
- * instances. Must be called before the constructor is called.
- * @param maxRecordsInRam
- */
- public static void setDefaultMaxRecordsInRam(final int maxRecordsInRam) {
- DEAFULT_MAX_RECORDS_IN_RAM = maxRecordsInRam;
- }
-
- /**
- * When writing records that are not presorted, this number determines the
- * number of records stored in RAM before spilling to disk.
- * @return DEAFULT_MAX_RECORDS_IN_RAM
- */
- public static int getDefaultMaxRecordsInRam() {
- return DEAFULT_MAX_RECORDS_IN_RAM;
- }
-
- /**
- * Sets the progress logger used by this implementation. Setting this lets this writer emit log
- * messages as SAM records in a SortingCollection are being written to disk.
- */
- public void setProgressLogger(final ProgressLoggerInterface progress) {
- this.progressLogger = progress;
- }
-
- /**
- * Must be called before calling setHeader(). SortOrder value in the header passed
- * to setHeader() is ignored. If setSortOrder is not called, default is SortOrder.unsorted.
- */
- public void setSortOrder(final SAMFileHeader.SortOrder sortOrder, final boolean presorted) {
- if (header != null) {
- throw new IllegalStateException("Cannot call SAMFileWriterImpl.setSortOrder after setHeader for " +
- getFilename());
- }
- this.sortOrder = sortOrder;
- this.presorted = presorted;
- }
-
- /**
- * Must be called after calling setHeader().
- */
- protected SAMFileHeader.SortOrder getSortOrder() {
- return this.sortOrder;
- }
-
- /**
- * When writing records that are not presorted, specify the number of records stored in RAM
- * before spilling to disk. Must be called before setHeader().
- * @param maxRecordsInRam
- */
- void setMaxRecordsInRam(final int maxRecordsInRam) {
- if (this.header != null) {
- throw new IllegalStateException("setMaxRecordsInRam must be called before setHeader()");
- }
- this.maxRecordsInRam = maxRecordsInRam;
- }
-
- /**
- * When writing records that are not presorted, specify the path of the temporary directory
- * for spilling to disk. Must be called before setHeader().
- * @param tmpDir path to the temporary directory
- */
- void setTempDirectory(final File tmpDir) {
- if (tmpDir!=null) {
- this.tmpDir = tmpDir;
- }
- }
-
- /**
- * Must be called before addAlignment.
- */
- public void setHeader(final SAMFileHeader header)
- {
- this.header = header;
- if (sortOrder == null) {
- sortOrder = SAMFileHeader.SortOrder.unsorted;
- }
- header.setSortOrder(sortOrder);
- final StringWriter headerTextBuffer = new StringWriter();
- new SAMTextHeaderCodec().encode(headerTextBuffer, header);
- final String headerText = headerTextBuffer.toString();
-
- writeHeader(headerText);
-
- if (presorted) {
- if (sortOrder.equals(SAMFileHeader.SortOrder.unsorted)) {
- presorted = false;
- } else {
- sortOrderChecker = new SAMSortOrderChecker(sortOrder);
- }
- } else if (!sortOrder.equals(SAMFileHeader.SortOrder.unsorted)) {
- alignmentSorter = SortingCollection.newInstance(SAMRecord.class,
- new BAMRecordCodec(header), makeComparator(), maxRecordsInRam, tmpDir);
- }
- }
-
- public SAMFileHeader getFileHeader() {
- return header;
- }
-
- private SAMRecordComparator makeComparator() {
- switch (sortOrder) {
- case coordinate:
- return new SAMRecordCoordinateComparator();
- case queryname:
- return new SAMRecordQueryNameComparator();
- case unsorted:
- return null;
- }
- throw new IllegalStateException("sortOrder should not be null");
- }
-
- public void addAlignment(final SAMRecord alignment)
- {
- if (sortOrder.equals(SAMFileHeader.SortOrder.unsorted)) {
- if (!header.getGroupOrder().equals(SAMFileHeader.GroupOrder.none)) {
- throw new UnsupportedOperationException("GroupOrder " + header.getGroupOrder() + " is not supported");
- }
- writeAlignment(alignment);
- } else if (presorted) {
- assertPresorted(alignment);
- writeAlignment(alignment);
- } else {
- alignmentSorter.add(alignment);
- }
- }
-
- private void assertPresorted(final SAMRecord alignment) {
- final SAMRecord prev = sortOrderChecker.getPreviousRecord();
- if (!sortOrderChecker.isSorted(alignment)) {
- throw new IllegalArgumentException("Alignments added out of order in SAMFileWriterImpl.addAlignment for " +
- getFilename() + ". Sort order is " + this.sortOrder + ". Offending records are at ["
- + sortOrderChecker.getSortKey(prev) + "] and ["
- + sortOrderChecker.getSortKey(alignment) + "]");
- }
- }
-
- /**
- * Must be called or else file will likely be defective.
- */
- public final void close()
- {
- if (alignmentSorter != null) {
- for (final SAMRecord alignment : alignmentSorter) {
- writeAlignment(alignment);
- if (progressLogger != null) progressLogger.record(alignment);
- }
- alignmentSorter.cleanup();
- }
- finish();
- }
-
- /**
- * Writes the record to disk. Sort order has been taken care of by the time
- * this method is called.
- * @param alignment
- */
- abstract protected void writeAlignment(SAMRecord alignment);
-
- /**
- * Write the header to disk. Header object is available via getHeader().
- * @param textHeader for convenience if the implementation needs it.
- */
- abstract protected void writeHeader(String textHeader);
-
- /**
- * Do any required flushing here.
- */
- abstract protected void finish();
-
- /**
- * For producing error messages.
- * @return Output filename, or null if there isn't one.
- */
- abstract protected String getFilename();
-}
diff --git a/src/java/net/sf/samtools/SAMFormatException.java b/src/java/net/sf/samtools/SAMFormatException.java
deleted file mode 100644
index 1ae70fd..0000000
--- a/src/java/net/sf/samtools/SAMFormatException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Thrown when a SAM file being read or decoded (text or binary) looks bad.
- */
-public class SAMFormatException extends SAMException {
- public SAMFormatException() {
- }
-
- public SAMFormatException(final String s) {
- super(s);
- }
-
- public SAMFormatException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-
- public SAMFormatException(final Throwable throwable) {
- super(throwable);
- }
-}
diff --git a/src/java/net/sf/samtools/SAMHeaderRecordComparator.java b/src/java/net/sf/samtools/SAMHeaderRecordComparator.java
deleted file mode 100644
index 8f01cea..0000000
--- a/src/java/net/sf/samtools/SAMHeaderRecordComparator.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package net.sf.samtools;
-
-/**
- * The MIT License
- * <p/>
- * Copyright (c) 2014 The Broad Institute
- * <p/>
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * <p/>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * <p/>
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-import java.util.Comparator;
-
-/**
- * Provides ordering based on SAM header records' attribute values. Provide the list of attributes to use
- * in the comparison to the constructor. Null attribute values (i.e., those attributes not present in the
- * record) sort behind those that have values.
- */
-public class SAMHeaderRecordComparator<T extends AbstractSAMHeaderRecord> implements Comparator<T> {
-
- private final String[] attributes;
-
- public SAMHeaderRecordComparator(final String... attributes) {
- this.attributes = attributes;
- }
-
- @Override
- public int compare(final T left, final T right) {
- for (final String attribute : attributes) {
- final String leftValue = left.getAttribute(attribute);
- final String rightValue = right.getAttribute(attribute);
-
- if (leftValue == null) {
- // Fastest comparison possible; two empty values are
- // equivalent, so move along to the next attribute
- if (rightValue == null) continue;
-
- // Otherwise left < right, since right has a value
- else return -1;
- }
-
- // left is not null; if right is, left > right
- if (rightValue == null) return 1;
-
- final int compare = leftValue.compareTo(rightValue);
- if (compare != 0) return compare;
- }
-
- return 0;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMLineParser.java b/src/java/net/sf/samtools/SAMLineParser.java
deleted file mode 100644
index 5356e33..0000000
--- a/src/java/net/sf/samtools/SAMLineParser.java
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import net.sf.samtools.util.StringUtil;
-
-/**
- * this class enables creation of a SAMRecord object from a String in SAM text format.
- */
-public class SAMLineParser {
-
- // From SAM specification
- private static final int QNAME_COL = 0;
- private static final int FLAG_COL = 1;
- private static final int RNAME_COL = 2;
- private static final int POS_COL = 3;
- private static final int MAPQ_COL = 4;
- private static final int CIGAR_COL = 5;
- private static final int MRNM_COL = 6;
- private static final int MPOS_COL = 7;
- private static final int ISIZE_COL = 8;
- private static final int SEQ_COL = 9;
- private static final int QUAL_COL = 10;
-
- private static final int NUM_REQUIRED_FIELDS = 11;
-
- // Read string must contain only these characters
- private static final Pattern VALID_BASES = Pattern
- .compile("^[acmgrsvtwyhkdbnACMGRSVTWYHKDBN.=]+$");
-
- /**
- * Allocate this once rather than for every line as a performance
- * optimization. The size is arbitrary -- merely large enough to handle the
- * maximum number of fields we might expect from a reasonable SAM file.
- */
- private final String[] mFields = new String[10000];
-
- /**
- * Add information about the origin (reader and position) to SAM records.
- */
- private final SAMFileReader mParentReader;
- private final SAMRecordFactory samRecordFactory;
- private final SAMFileReader.ValidationStringency validationStringency;
- private final SAMFileHeader mFileHeader;
- private final File mFile;
-
- private final TextTagCodec tagCodec = new TextTagCodec();
-
- private int currentLineNumber;
- private String currentLine;
-
- //
- // Constructors
- //
-
- /**
- * Public constructor. Use the default SAMRecordFactory and stringency.
- * @param samFileHeader SAM file header
- */
- public SAMLineParser(final SAMFileHeader samFileHeader) {
-
- this(new DefaultSAMRecordFactory(),
- SAMFileReader.ValidationStringency.DEFAULT_STRINGENCY, samFileHeader,
- null, null);
- }
-
- /**
- * Public constructor. Use the default SAMRecordFactory and stringency.
- * @param samFileHeader SAM file header
- * @param samFileReader SAM file reader For passing to SAMRecord.setFileSource, may be null.
- * @param samFile SAM file being read (for error message only, may be null)
- */
- public SAMLineParser(final SAMFileHeader samFileHeader,
- final SAMFileReader samFileReader, final File samFile) {
-
- this(new DefaultSAMRecordFactory(),
- SAMFileReader.ValidationStringency.DEFAULT_STRINGENCY, samFileHeader,
- samFileReader, samFile);
- }
-
- /**
- * Public constructor.
- * @param samRecordFactory SamRecord Factory
- * @param validationStringency validation stringency
- * @param samFileHeader SAM file header
- * @param samFileReader SAM file reader For passing to SAMRecord.setFileSource, may be null.
- * @param samFile SAM file being read (for error message only, may be null)
- */
- public SAMLineParser(final SAMRecordFactory samRecordFactory,
- final SAMFileReader.ValidationStringency validationStringency,
- final SAMFileHeader samFileHeader, final SAMFileReader samFileReader,
- final File samFile) {
-
- if (samRecordFactory == null)
- throw new NullPointerException("The SamRecordFactory must be set");
-
- if (validationStringency == null)
- throw new NullPointerException("The validationStringency must be set");
-
- if (samFileHeader == null)
- throw new NullPointerException("The mFileHeader must be set");
-
- this.samRecordFactory = samRecordFactory;
- this.validationStringency = validationStringency;
- this.mFileHeader = samFileHeader;
-
- // Can be null
- this.mParentReader = samFileReader;
-
- // Can be null
- this.mFile = samFile;
- }
-
- /**
- * Get the File header.
- * @return the SAM file header
- */
- public SAMFileHeader getFileHeader() {
-
- return this.mFileHeader;
- }
-
- /**
- * Get validation stringency.
- * @return validation stringency
- */
- public SAMFileReader.ValidationStringency getValidationStringency() {
-
- return this.validationStringency;
- }
-
- private int parseInt(final String s, final String fieldName) {
- final int ret;
- try {
- ret = Integer.parseInt(s);
- } catch (NumberFormatException e) {
- throw reportFatalErrorParsingLine("Non-numeric value in "
- + fieldName + " column");
- }
- return ret;
- }
-
- private void validateReferenceName(final String rname, final String fieldName) {
- if (rname.equals("=")) {
- if (fieldName.equals("MRNM")) {
- return;
- }
- reportErrorParsingLine("= is not a valid value for "
- + fieldName + " field.");
- }
- if (this.mFileHeader.getSequenceDictionary().size() != 0) {
- if (this.mFileHeader.getSequence(rname) == null) {
- reportErrorParsingLine(fieldName
- + " '" + rname + "' not found in any SQ record");
- }
- }
- }
-
- /**
- * Parse a SAM line.
- * @param line line to parse
- * @return a new SAMRecord object
- */
- public SAMRecord parseLine(final String line) {
-
- return parseLine(line, -1);
- }
-
- /**
- * Parse a SAM line.
- * @param line line to parse
- * @param lineNumber line number in the file. If the line number is not known
- * can be <=0.
- * @return a new SAMRecord object
- */
- public SAMRecord parseLine(final String line, final int lineNumber) {
-
- final String mCurrentLine = line;
- this.currentLineNumber = lineNumber;
- this.currentLine = line;
-
- final int numFields = StringUtil.split(mCurrentLine, mFields, '\t');
- if (numFields < NUM_REQUIRED_FIELDS) {
- throw reportFatalErrorParsingLine("Not enough fields");
- }
- if (numFields == mFields.length) {
- reportErrorParsingLine("Too many fields in SAM text record.");
- }
- for (int i = 0; i < numFields; ++i) {
- if (mFields[i].length() == 0) {
- reportErrorParsingLine("Empty field at position " + i + " (zero-based)");
- }
- }
- final SAMRecord samRecord =
- samRecordFactory.createSAMRecord(this.mFileHeader);
- samRecord.setValidationStringency(this.validationStringency);
- if (mParentReader != null)
- samRecord.setFileSource(new SAMFileSource(mParentReader, null));
- samRecord.setHeader(this.mFileHeader);
- samRecord.setReadName(mFields[QNAME_COL]);
-
- final int flags = parseInt(mFields[FLAG_COL], "FLAG");
- samRecord.setFlags(flags);
-
- String rname = mFields[RNAME_COL];
- if (!rname.equals("*")) {
- rname = SAMSequenceRecord.truncateSequenceName(rname);
- validateReferenceName(rname, "RNAME");
- samRecord.setReferenceName(rname);
- } else if (!samRecord.getReadUnmappedFlag()) {
- reportErrorParsingLine("RNAME is not specified but flags indicate mapped");
- }
-
- final int pos = parseInt(mFields[POS_COL], "POS");
- final int mapq = parseInt(mFields[MAPQ_COL], "MAPQ");
- final String cigar = mFields[CIGAR_COL];
- if (!SAMRecord.NO_ALIGNMENT_REFERENCE_NAME.equals(samRecord
- .getReferenceName())) {
- if (pos == 0) {
- reportErrorParsingLine("POS must be non-zero if RNAME is specified");
- }
- if (!samRecord.getReadUnmappedFlag() && cigar.equals("*")) {
- reportErrorParsingLine("CIGAR must not be '*' if RNAME is specified");
- }
- } else {
- if (pos != 0) {
- reportErrorParsingLine("POS must be zero if RNAME is not specified");
- }
- if (mapq != 0) {
- reportErrorParsingLine("MAPQ must be zero if RNAME is not specified");
- }
- if (!cigar.equals("*")) {
- reportErrorParsingLine("CIGAR must be '*' if RNAME is not specified");
- }
- }
- samRecord.setAlignmentStart(pos);
- samRecord.setMappingQuality(mapq);
- samRecord.setCigarString(cigar);
-
- String mateRName = mFields[MRNM_COL];
- if (mateRName.equals("*")) {
- if (samRecord.getReadPairedFlag() && !samRecord.getMateUnmappedFlag()) {
- reportErrorParsingLine("MRNM not specified but flags indicate mate mapped");
- }
- } else {
- if (!samRecord.getReadPairedFlag()) {
- reportErrorParsingLine("MRNM specified but flags indicate unpaired");
- }
- if (!"=".equals(mateRName)) {
- mateRName = SAMSequenceRecord.truncateSequenceName(mateRName);
- }
- validateReferenceName(mateRName, "MRNM");
- if (mateRName.equals("=")) {
- if (samRecord.getReferenceName() == null) {
- reportErrorParsingLine("MRNM is '=', but RNAME is not set");
- }
- samRecord.setMateReferenceName(samRecord.getReferenceName());
- } else {
- samRecord.setMateReferenceName(mateRName);
- }
- }
-
- final int matePos = parseInt(mFields[MPOS_COL], "MPOS");
- final int isize = parseInt(mFields[ISIZE_COL], "ISIZE");
- if (!samRecord.getMateReferenceName().equals(
- SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
- if (matePos == 0) {
- reportErrorParsingLine("MPOS must be non-zero if MRNM is specified");
- }
- } else {
- if (matePos != 0) {
- reportErrorParsingLine("MPOS must be zero if MRNM is not specified");
- }
- if (isize != 0) {
- reportErrorParsingLine("ISIZE must be zero if MRNM is not specified");
- }
- }
- samRecord.setMateAlignmentStart(matePos);
- samRecord.setInferredInsertSize(isize);
- if (!mFields[SEQ_COL].equals("*")) {
- validateReadBases(mFields[SEQ_COL]);
- samRecord.setReadString(mFields[SEQ_COL]);
- } else {
- samRecord.setReadBases(SAMRecord.NULL_SEQUENCE);
- }
- if (!mFields[QUAL_COL].equals("*")) {
- if (samRecord.getReadBases() == SAMRecord.NULL_SEQUENCE) {
- reportErrorParsingLine("QUAL should not be specified if SEQ is not specified");
- }
- if (samRecord.getReadString().length() != mFields[QUAL_COL].length()) {
- reportErrorParsingLine("length(QUAL) != length(SEQ)");
- }
- samRecord.setBaseQualityString(mFields[QUAL_COL]);
- } else {
- samRecord.setBaseQualities(SAMRecord.NULL_QUALS);
- }
-
- for (int i = NUM_REQUIRED_FIELDS; i < numFields; ++i) {
- parseTag(samRecord, mFields[i]);
- }
-
- final List<SAMValidationError> validationErrors = samRecord.isValid();
- if (validationErrors != null) {
- for (final SAMValidationError errorMessage : validationErrors) {
- reportErrorParsingLine(errorMessage.getMessage());
- }
- }
- return samRecord;
- }
-
- private void validateReadBases(final String bases) {
- /*
- * Using regex is slow, so check for invalid characters via
- * isValidReadBase(), which hopefully the JIT will optimize. if
- * (!VALID_BASES.matcher(bases).matches()) {
- * reportErrorParsingLine("Invalid character in read bases"); }
- */
- for (int i = 0; i < bases.length(); ++i) {
- if (!isValidReadBase(bases.charAt(i))) {
- reportErrorParsingLine("Invalid character in read bases");
- return;
- }
- }
- }
-
- private boolean isValidReadBase(final char base) {
- switch (base) {
- case 'a':
- case 'c':
- case 'm':
- case 'g':
- case 'r':
- case 's':
- case 'v':
- case 't':
- case 'w':
- case 'y':
- case 'h':
- case 'k':
- case 'd':
- case 'b':
- case 'n':
- case 'A':
- case 'C':
- case 'M':
- case 'G':
- case 'R':
- case 'S':
- case 'V':
- case 'T':
- case 'W':
- case 'Y':
- case 'H':
- case 'K':
- case 'D':
- case 'B':
- case 'N':
- case '.':
- case '=':
- return true;
- default:
- return false;
- }
- }
-
- private void parseTag(final SAMRecord samRecord, final String tag) {
- Map.Entry<String, Object> entry = null;
- try {
- entry = tagCodec.decode(tag);
- } catch (SAMFormatException e) {
- reportErrorParsingLine(e);
- }
- if (entry != null) {
- if (entry.getValue() instanceof TagValueAndUnsignedArrayFlag) {
- final TagValueAndUnsignedArrayFlag valueAndFlag =
- (TagValueAndUnsignedArrayFlag) entry.getValue();
- if (valueAndFlag.isUnsignedArray) {
- samRecord.setUnsignedArrayAttribute(entry.getKey(),
- valueAndFlag.value);
- } else {
- samRecord.setAttribute(entry.getKey(), valueAndFlag.value);
- }
- } else {
- samRecord.setAttribute(entry.getKey(), entry.getValue());
- }
- }
- }
-
- //
- // Error methods
- //
-
- private RuntimeException reportFatalErrorParsingLine(final String reason) {
- return new SAMFormatException(makeErrorString(reason));
- }
-
- private void reportErrorParsingLine(final String reason) {
- final String errorMessage = makeErrorString(reason);
-
- if (validationStringency == SAMFileReader.ValidationStringency.STRICT) {
- throw new SAMFormatException(errorMessage);
- } else if (validationStringency == SAMFileReader.ValidationStringency.LENIENT) {
- System.err
- .println("Ignoring SAM validation error due to lenient parsing:");
- System.err.println(errorMessage);
- }
- }
-
- private void reportErrorParsingLine(final Exception e) {
- final String errorMessage = makeErrorString(e.getMessage());
- if (validationStringency == SAMFileReader.ValidationStringency.STRICT) {
- throw new SAMFormatException(errorMessage);
- } else if (validationStringency == SAMFileReader.ValidationStringency.LENIENT) {
- System.err
- .println("Ignoring SAM validation error due to lenient parsing:");
- System.err.println(errorMessage);
- }
- }
-
- private String makeErrorString(final String reason) {
- String fileMessage = "";
- if (mFile != null) {
- fileMessage = "File " + mFile + "; ";
- }
- return "Error parsing text SAM file. "
- + reason + "; " + fileMessage + "Line "
- + (this.currentLineNumber <= 0 ? "unknown" : this.currentLineNumber)
- + "\nLine: " + this.currentLine;
- }
-
-}
diff --git a/src/java/net/sf/samtools/SAMProgramRecord.java b/src/java/net/sf/samtools/SAMProgramRecord.java
deleted file mode 100644
index 1ece45a..0000000
--- a/src/java/net/sf/samtools/SAMProgramRecord.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.*;
-
-/**
- * In-memory representation of @PG SAM header record.
- */
-public class SAMProgramRecord extends AbstractSAMHeaderRecord {
- public static final String PROGRAM_GROUP_ID_TAG = "ID";
- public static final String PROGRAM_NAME_TAG = "PN";
- public static final String PROGRAM_VERSION_TAG = "VN";
- public static final String COMMAND_LINE_TAG = "CL";
- public static final String PREVIOUS_PROGRAM_GROUP_ID_TAG = "PP";
- private String mProgramGroupId;
- public static final Set<String> STANDARD_TAGS = Collections.unmodifiableSet(
- new HashSet<String>(Arrays.asList(PROGRAM_GROUP_ID_TAG,
- PROGRAM_NAME_TAG,
- PROGRAM_VERSION_TAG,
- COMMAND_LINE_TAG,
- PREVIOUS_PROGRAM_GROUP_ID_TAG)) );
-
- public SAMProgramRecord(final String programGroupId) {
- this.mProgramGroupId = programGroupId;
- }
-
- public SAMProgramRecord(final String id, SAMProgramRecord srcProgramRecord) {
- mProgramGroupId = id;
- for (final Map.Entry<String, String> entry : srcProgramRecord.getAttributes()) {
- setAttribute(entry.getKey(), entry.getValue());
- }
- }
-
- public String getId() {
- return getProgramGroupId();
- }
-
- public String getProgramGroupId() {
- return mProgramGroupId;
- }
-
- public String getProgramName() {
- return (String)getAttribute(PROGRAM_NAME_TAG);
- }
-
- public void setProgramName(final String name) {
- setAttribute(PROGRAM_NAME_TAG, name);
- }
-
- public String getProgramVersion() {
- return (String)getAttribute(PROGRAM_VERSION_TAG);
- }
-
- public void setProgramVersion(final String version) {
- setAttribute(PROGRAM_VERSION_TAG, version);
- }
-
- public String getCommandLine() {
- return (String)getAttribute(COMMAND_LINE_TAG);
- }
-
- public void setCommandLine(final String commandLine) {
- setAttribute(COMMAND_LINE_TAG, commandLine);
- }
-
- public String getPreviousProgramGroupId() {
- return (String)getAttribute(PREVIOUS_PROGRAM_GROUP_ID_TAG);
- }
-
- public void setPreviousProgramGroupId(final String id) {
- setAttribute(PREVIOUS_PROGRAM_GROUP_ID_TAG, id);
- }
-
-
-
- /**
- * @return true if this == that except for the program group ID, which is arbitrary
- */
- public boolean equivalent(final SAMProgramRecord that) {
- return attributesEqual(that);
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final SAMProgramRecord that = (SAMProgramRecord) o;
-
- if (!attributesEqual(that)) return false;
- if (mProgramGroupId != null ? !mProgramGroupId.equals(that.mProgramGroupId) : that.mProgramGroupId != null) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = mProgramGroupId != null ? mProgramGroupId.hashCode() : 0;
- result = 31 * result + attributesHashCode();
- return result;
- }
-
- Set<String> getStandardTags() {
- return STANDARD_TAGS;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMReadGroupRecord.java b/src/java/net/sf/samtools/SAMReadGroupRecord.java
deleted file mode 100644
index a04f87c..0000000
--- a/src/java/net/sf/samtools/SAMReadGroupRecord.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import net.sf.samtools.util.Iso8601Date;
-
-import java.util.*;
-
-/**
- * Header information about a read group.
- */
-public class SAMReadGroupRecord extends AbstractSAMHeaderRecord
-{
- private String mReadGroupId = null;
- public static final String READ_GROUP_ID_TAG = "ID";
- public static final String READ_GROUP_SAMPLE_TAG = "SM";
- public static final String PREDICTED_MEDIAN_INSERT_SIZE_TAG = "PI";
- public static final String DATE_RUN_PRODUCED_TAG = "DT";
- public static final String FLOW_ORDER_TAG = "FO";
- public static final String KEY_SEQUENCE_TAG = "KS";
- public static final String DESCRIPTION_TAG = "DS";
- public static final String PLATFORM_UNIT_TAG = "PU";
- public static final String SEQUENCING_CENTER_TAG = "CN";
- public static final String PLATFORM_TAG = "PL";
- public static final String LIBRARY_TAG = "LB";
-
- public static final Set<String> STANDARD_TAGS =
- new HashSet<String>(Arrays.asList(READ_GROUP_ID_TAG, READ_GROUP_SAMPLE_TAG, LIBRARY_TAG,
- DESCRIPTION_TAG, PLATFORM_UNIT_TAG, PREDICTED_MEDIAN_INSERT_SIZE_TAG, SEQUENCING_CENTER_TAG,
- DATE_RUN_PRODUCED_TAG, PLATFORM_TAG, FLOW_ORDER_TAG, KEY_SEQUENCE_TAG));
-
- public SAMReadGroupRecord(final String id) { mReadGroupId = id; }
-
- public SAMReadGroupRecord(final String id, final SAMReadGroupRecord srcProgramRecord) {
- mReadGroupId = id;
- for (final Map.Entry<String, String> entry : srcProgramRecord.getAttributes()) {
- setAttribute(entry.getKey(), entry.getValue());
- }
- }
-
- public String getId() { return getReadGroupId(); }
- public String getReadGroupId() { return mReadGroupId; }
-
- public String getSample() { return getAttribute(READ_GROUP_SAMPLE_TAG); }
- public void setSample(final String value) { setAttribute(READ_GROUP_SAMPLE_TAG, value); }
-
- public String getLibrary() { return getAttribute(LIBRARY_TAG); }
- public void setLibrary(final String value) { setAttribute(LIBRARY_TAG, value); }
-
- public String getPlatformUnit() { return getAttribute(PLATFORM_UNIT_TAG); }
- public void setPlatformUnit(final String pu) { setAttribute(PLATFORM_UNIT_TAG, pu); }
-
- public String getPlatform() { return getAttribute(PLATFORM_TAG); }
- public void setPlatform(final String platform) { setAttribute(PLATFORM_TAG, platform); }
-
- public Date getRunDate() {
- final String dt = getAttribute(DATE_RUN_PRODUCED_TAG);
- if (dt == null) return null;
- else return new Iso8601Date(dt);
- }
-
- public String getFlowOrder() { return getAttribute(FLOW_ORDER_TAG); }
- public void setFlowOrder(final String flowOrder) { setAttribute(FLOW_ORDER_TAG, flowOrder); }
-
- public String getKeySequence() { return getAttribute(KEY_SEQUENCE_TAG); }
- public void setKeySequence(final String keySequence) { setAttribute(KEY_SEQUENCE_TAG, keySequence); }
-
- /**
- * Converts to Iso8601Date if not already in that form.
- */
- public void setRunDate(Date runDate) {
- if (runDate != null && !(runDate instanceof Iso8601Date)) {
- runDate = new Iso8601Date(runDate);
- }
- setAttribute(DATE_RUN_PRODUCED_TAG, runDate != null ? runDate.toString() : null);
- }
-
- public String getSequencingCenter() { return getAttribute(SEQUENCING_CENTER_TAG); }
- public void setSequencingCenter(final String center) { setAttribute(SEQUENCING_CENTER_TAG, center); }
-
- public String getDescription() { return getAttribute(DESCRIPTION_TAG); }
- public void setDescription(final String description) { setAttribute(DESCRIPTION_TAG, description); }
-
- public Integer getPredictedMedianInsertSize() {
- final String stringRep = getAttribute(PREDICTED_MEDIAN_INSERT_SIZE_TAG);
- if (stringRep == null) return null;
- return Integer.parseInt(stringRep);
- }
- public void setPredictedMedianInsertSize(final Integer predictedMedianInsertSize) {
-
- setAttribute(PREDICTED_MEDIAN_INSERT_SIZE_TAG, (predictedMedianInsertSize == null? null: predictedMedianInsertSize.toString()));
- }
-
- /**
- * @return true if this == that except for the read group ID, which is arbitrary
- */
- public boolean equivalent(final SAMReadGroupRecord that) {
- return attributesEqual(that);
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final SAMReadGroupRecord that = (SAMReadGroupRecord) o;
-
- if (!attributesEqual(that)) return false;
- if (mReadGroupId != null ? !mReadGroupId.equals(that.mReadGroupId) : that.mReadGroupId != null) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- return mReadGroupId.hashCode();
- }
-
- Set<String> getStandardTags() {
- return STANDARD_TAGS;
- }
-}
-
diff --git a/src/java/net/sf/samtools/SAMRecord.java b/src/java/net/sf/samtools/SAMRecord.java
deleted file mode 100644
index ded7ebe..0000000
--- a/src/java/net/sf/samtools/SAMRecord.java
+++ /dev/null
@@ -1,1732 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import net.sf.samtools.util.CoordMath;
-import net.sf.samtools.util.StringUtil;
-
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-
-/**
- * Java binding for a SAM file record. c.f. http://samtools.sourceforge.net/SAM1.pdf
- *
- * The presence of reference name/reference index and alignment start
- * do not necessarily mean that a read is aligned. Those values may merely be set to force a SAMRecord
- * to appear in a certain place in the sort order. The readUnmappedFlag must be checked to determine whether
- * or not a read is mapped. Only if the readUnmappedFlag is false can the reference name/index and alignment start
- * be interpreted as indicating an actual alignment position.
- *
- * Likewise, presence of mate reference name/index and mate alignment start do not necessarily mean that the
- * mate is aligned. These may be set for an unaligned mate if the mate has been forced into a particular place
- * in the sort order per the above paragraph. Only if the mateUnmappedFlag is false can the mate reference name/index
- * and mate alignment start be interpreted as indicating the actual alignment position of the mate.
- *
- * Note also that there are a number of getters & setters that are linked, i.e. they present different representations
- * of the same underlying data. In these cases there is typically a representation that is preferred because it
- * ought to be faster than some other representation. The following are the preferred representations:
- *
- * getReadNameLength() is preferred to getReadName().length()
- * get/setReadBases() is preferred to get/setReadString()
- * get/setBaseQualities() is preferred to get/setBaseQualityString()
- * get/setReferenceIndex() is preferred to get/setReferenceName()
- * get/setMateReferenceIndex() is preferred to get/setMateReferenceName()
- * getCigarLength() is preferred to getCigar().getNumElements()
- * get/setCigar() is preferred to get/setCigarString()
- *
- * Note that setIndexingBin() need not be called when writing SAMRecords. It will be computed as necessary. It is only
- * present as an optimization in the event that the value is already known and need not be computed.
- *
- * setHeader() need not be called when writing SAMRecords. It may be convenient to call it, however, because
- * get/setReferenceIndex() and get/setMateReferenceIndex() must have access to the SAM header, either as an argument
- * or previously passed to setHeader().
- *
- * setHeader() is called by the SAM reading code, so the get/setReferenceIndex() and get/setMateReferenceIndex()
- * methods will have access to the sequence dictionary.
- *
- * Some of the get() methods return values that are mutable, due to the limitations of Java. A caller should
- * never change the value returned by a get() method. If you want to change the value of some attribute of a
- * SAMRecord, create a new value object and call the appropriate set() method.
- *
- * By default, extensive validation of SAMRecords is done when they are read. Very limited validation is done when
- * values are set onto SAMRecords.
- */
-/**
- * @author alecw at broadinstitute.org
- * @author mishali.naik at intel.com
- */
-public class SAMRecord implements Cloneable
-{
- /**
- * Alignment score for a good alignment, but where computing a Phred-score is not feasible.
- */
- public static final int UNKNOWN_MAPPING_QUALITY = 255;
-
- /**
- * Alignment score for an unaligned read.
- */
- public static final int NO_MAPPING_QUALITY = 0;
-
- /**
- * If a read has this reference name, it is unaligned, but not all unaligned reads have
- * this reference name (see above).
- */
- public static final String NO_ALIGNMENT_REFERENCE_NAME = "*";
-
- /**
- * If a read has this reference index, it is unaligned, but not all unaligned reads have
- * this reference index (see above).
- */
- public static final int NO_ALIGNMENT_REFERENCE_INDEX = -1;
-
- /**
- * Cigar string for an unaligned read.
- */
- public static final String NO_ALIGNMENT_CIGAR = "*";
-
- /**
- * If a read has reference name "*", it will have this value for position.
- */
- public static final int NO_ALIGNMENT_START = GenomicIndexUtil.UNSET_GENOMIC_LOCATION;
-
- /**
- * This should rarely be used, since a read with no sequence doesn't make much sense.
- */
- public static final byte[] NULL_SEQUENCE = new byte[0];
-
- public static final String NULL_SEQUENCE_STRING = "*";
-
- /**
- * This should rarely be used, since all reads should have quality scores.
- */
- public static final byte[] NULL_QUALS = new byte[0];
- public static final String NULL_QUALS_STRING = "*";
-
- /**
- * abs(insertSize) must be <= this
- */
- public static final int MAX_INSERT_SIZE = 1<<29;
-
- /**
- * It is not necessary in general to use the flag constants, because there are getters
- * & setters that handles these symbolically.
- */
- private static final int READ_PAIRED_FLAG = 0x1;
- private static final int PROPER_PAIR_FLAG = 0x2;
- private static final int READ_UNMAPPED_FLAG = 0x4;
- private static final int MATE_UNMAPPED_FLAG = 0x8;
- private static final int READ_STRAND_FLAG = 0x10;
- private static final int MATE_STRAND_FLAG = 0x20;
- private static final int FIRST_OF_PAIR_FLAG = 0x40;
- private static final int SECOND_OF_PAIR_FLAG = 0x80;
- private static final int NOT_PRIMARY_ALIGNMENT_FLAG = 0x100;
- private static final int READ_FAILS_VENDOR_QUALITY_CHECK_FLAG = 0x200;
- private static final int DUPLICATE_READ_FLAG = 0x400;
- private static final int SUPPLEMENTARY_ALIGNMENT_FLAG = 0x800;
-
-
- private String mReadName = null;
- private byte[] mReadBases = NULL_SEQUENCE;
- private byte[] mBaseQualities = NULL_QUALS;
- private String mReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
- private int mAlignmentStart = NO_ALIGNMENT_START;
- private transient int mAlignmentEnd = NO_ALIGNMENT_START;
- private int mMappingQuality = NO_MAPPING_QUALITY;
- private String mCigarString = NO_ALIGNMENT_CIGAR;
- private Cigar mCigar = null;
- private List<AlignmentBlock> mAlignmentBlocks = null;
- private int mFlags = 0;
- private String mMateReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
- private int mMateAlignmentStart = 0;
- private int mInferredInsertSize = 0;
- private SAMBinaryTagAndValue mAttributes = null;
- protected Integer mReferenceIndex = null;
- protected Integer mMateReferenceIndex = null;
- private Integer mIndexingBin = null;
-
- /**
- * Some attributes (e.g. CIGAR) are not decoded immediately. Use this to decide how to validate when decoded.
- */
- private SAMFileReader.ValidationStringency mValidationStringency = SAMFileReader.ValidationStringency.SILENT;
-
- private SAMFileSource mFileSource;
- private SAMFileHeader mHeader = null;
-
- public SAMRecord(final SAMFileHeader header) {
- mHeader = header;
- }
-
- public String getReadName() {
- return mReadName;
- }
-
- /**
- * This method is preferred over getReadName().length(), because for BAMRecord
- * it may be faster.
- * @return length not including a null terminator.
- */
- public int getReadNameLength() {
- return mReadName.length();
- }
-
- public void setReadName(final String value) {
- mReadName = value;
- }
-
- /**
- * @return read sequence as a string of ACGTN=.
- */
- public String getReadString() {
- final byte[] readBases = getReadBases();
- if (readBases.length == 0) {
- return NULL_SEQUENCE_STRING;
- }
- return StringUtil.bytesToString(readBases);
- }
-
- public void setReadString(final String value) {
- if (NULL_SEQUENCE_STRING.equals(value)) {
- mReadBases = NULL_SEQUENCE;
- } else {
- final byte[] bases = StringUtil.stringToBytes(value);
- SAMUtils.normalizeBases(bases);
- setReadBases(bases);
- }
- }
-
-
- /**
- * Do not modify the value returned by this method. If you want to change the bases, create a new
- * byte[] and call setReadBases() or call setReadString().
- * @return read sequence as ASCII bytes ACGTN=.
- */
- public byte[] getReadBases() {
- return mReadBases;
- }
-
- public void setReadBases(final byte[] value) {
- mReadBases = value;
- }
-
- /**
- * This method is preferred over getReadBases().length, because for BAMRecord it may be faster.
- * @return number of bases in the read.
- */
- public int getReadLength() {
- return getReadBases().length;
- }
-
- /**
- * @return Base qualities, encoded as a FASTQ string.
- */
- public String getBaseQualityString() {
- if (Arrays.equals(NULL_QUALS, getBaseQualities())) {
- return NULL_QUALS_STRING;
- }
- return SAMUtils.phredToFastq(getBaseQualities());
- }
-
- public void setBaseQualityString(final String value) {
- if (NULL_QUALS_STRING.equals(value)) {
- setBaseQualities(NULL_QUALS);
- } else {
- setBaseQualities(SAMUtils.fastqToPhred(value));
- }
- }
-
- /**
- * Do not modify the value returned by this method. If you want to change the qualities, create a new
- * byte[] and call setBaseQualities() or call setBaseQualityString().
- * @return Base qualities, as binary phred scores (not ASCII).
- */
- public byte[] getBaseQualities() {
- return mBaseQualities;
- }
-
- public void setBaseQualities(final byte[] value) {
- mBaseQualities = value;
- }
-
- /**
- * If the original base quality scores have been store in the "OQ" tag will return the numeric
- * score as a byte[]
- */
- public byte[] getOriginalBaseQualities() {
- final String oqString = (String) getAttribute("OQ");
- if (oqString != null && oqString.length() > 0) {
- return SAMUtils.fastqToPhred(oqString);
- }
- else {
- return null;
- }
- }
-
- /**
- * Sets the original base quality scores into the "OQ" tag as a String. Supplied value should be
- * as phred-scaled numeric qualities.
- */
- public void setOriginalBaseQualities(final byte[] oq) {
- setAttribute("OQ", SAMUtils.phredToFastq(oq));
- }
-
- private static boolean hasReferenceName(final Integer referenceIndex, final String referenceName) {
- return (referenceIndex != null && referenceIndex != NO_ALIGNMENT_REFERENCE_INDEX) ||
- !NO_ALIGNMENT_REFERENCE_NAME.equals(referenceName);
- }
-
- /**
- * @return true if this SAMRecord has a reference, either as a String or index (or both).
- */
- private boolean hasReferenceName() {
- return hasReferenceName(mReferenceIndex, mReferenceName);
- }
-
- /**
- * @return true if this SAMRecord has a mate reference, either as a String or index (or both).
- */
- private boolean hasMateReferenceName() {
- return hasReferenceName(mMateReferenceIndex, mMateReferenceName);
- }
-
- /**
- * @return Reference name, or null if record has no reference.
- */
- public String getReferenceName() {
- return mReferenceName;
- }
-
- public void setReferenceName(final String value) {
- /* String.intern() is surprisingly expensive, so avoid it by looking up in sequence dictionary if possible */
- if (NO_ALIGNMENT_REFERENCE_NAME.equals(value)) {
- mReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
- mReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
- return;
- } else if (mHeader != null) {
- final int referenceIndex = mHeader.getSequenceIndex(value);
- if (referenceIndex != -1) {
- setReferenceIndex(referenceIndex);
- return;
- }
- }
- // Drop through from above if nothing done.
- mReferenceName = value.intern();
- mReferenceIndex = null;
- }
-
- /**
- * @return index of the reference sequence for this read in the sequence dictionary, or -1
- * if read has no reference sequence set, or if a String reference name is not found in the sequence index..
- */
- public Integer getReferenceIndex() {
- if (mReferenceIndex == null) {
- if (mReferenceName == null) {
- mReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
- } else if (NO_ALIGNMENT_REFERENCE_NAME.equals(mReferenceName)) {
- mReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
- } else {
- mReferenceIndex = mHeader.getSequenceIndex(mReferenceName);
- }
- }
- return mReferenceIndex;
- }
-
- /**
- * @param referenceIndex Must either equal -1 (indicating no reference), or exist in the sequence dictionary
- * in the header associated with this record.
- */
- public void setReferenceIndex(final int referenceIndex) {
- mReferenceIndex = referenceIndex;
- if (mReferenceIndex == NO_ALIGNMENT_REFERENCE_INDEX) {
- mReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
- } else {
- try {
- mReferenceName = mHeader.getSequence(referenceIndex).getSequenceName();
- } catch (final NullPointerException e) {
- throw new IllegalArgumentException("Reference index " + referenceIndex + " not found in sequence dictionary.", e);
- }
- }
- }
-
- /**
- * @return Mate reference name, or null if one is not assigned.
- */
- public String getMateReferenceName() {
- return mMateReferenceName;
- }
-
- public void setMateReferenceName(final String mateReferenceName) {
- /* String.intern() is surprisingly expensive, so avoid it by looking up in sequence dictionary if possible */
- if (NO_ALIGNMENT_REFERENCE_NAME.equals(mateReferenceName)) {
- mMateReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
- mMateReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
- return;
- } else if (mHeader != null) {
- final int referenceIndex = mHeader.getSequenceIndex(mateReferenceName);
- if (referenceIndex != -1) {
- setMateReferenceIndex(referenceIndex);
- return;
- }
- }
- // Drop through from above if nothing done.
- this.mMateReferenceName = mateReferenceName.intern();
- mMateReferenceIndex = null;
- }
-
- /**
- * @return index of the reference sequence for this read's mate in the sequence dictionary, or -1
- * if mate has no reference sequence set.
- */
- public Integer getMateReferenceIndex() {
- if (mMateReferenceIndex == null) {
- if (mMateReferenceName == null) {
- mMateReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
- } else if (NO_ALIGNMENT_REFERENCE_NAME.equals(mMateReferenceName)){
- mMateReferenceIndex = NO_ALIGNMENT_REFERENCE_INDEX;
- } else {
- mMateReferenceIndex = mHeader.getSequenceIndex(mMateReferenceName);
- }
- }
- return mMateReferenceIndex;
- }
-
- /**
- * @param referenceIndex Must either equal -1 (indicating no reference), or exist in the sequence dictionary
- * in the header associated with this record.
- */
- public void setMateReferenceIndex(final int referenceIndex) {
- mMateReferenceIndex = referenceIndex;
- if (mMateReferenceIndex == NO_ALIGNMENT_REFERENCE_INDEX) {
- mMateReferenceName = NO_ALIGNMENT_REFERENCE_NAME;
- } else {
- try {
- mMateReferenceName = mHeader.getSequence(referenceIndex).getSequenceName();
- } catch (final NullPointerException e) {
- throw new IllegalArgumentException("Reference index " + referenceIndex + " not found in sequence dictionary.", e);
- }
- }
- }
-
- /**
- * @return 1-based inclusive leftmost position of the clipped sequence, or 0 if there is no position.
- */
- public int getAlignmentStart() {
- return mAlignmentStart;
- }
-
- /**
- * @param value 1-based inclusive leftmost position of the clipped sequence, or 0 if there is no position.
- */
- public void setAlignmentStart(final int value) {
- mAlignmentStart = value;
- // Clear cached alignment end
- mAlignmentEnd = NO_ALIGNMENT_START;
- // Change to alignmentStart could change indexing bin
- setIndexingBin(null);
- }
-
- /**
- * @return 1-based inclusive rightmost position of the clipped sequence, or 0 read if unmapped.
- */
- public int getAlignmentEnd() {
- if (getReadUnmappedFlag()) {
- return NO_ALIGNMENT_START;
- }
- else if (this.mAlignmentEnd == NO_ALIGNMENT_START) {
- this.mAlignmentEnd = mAlignmentStart + getCigar().getReferenceLength() - 1;
- }
-
- return this.mAlignmentEnd;
- }
-
- /**
- * @return the alignment start (1-based, inclusive) adjusted for clipped bases. For example if the read
- * has an alignment start of 100 but the first 4 bases were clipped (hard or soft clipped)
- * then this method will return 96.
- *
- * Invalid to call on an unmapped read.
- */
- public int getUnclippedStart() {
- return SAMUtils.getUnclippedStart(getAlignmentStart(), getCigar());
- }
-
- /**
- * @return the alignment end (1-based, inclusive) adjusted for clipped bases. For example if the read
- * has an alignment end of 100 but the last 7 bases were clipped (hard or soft clipped)
- * then this method will return 107.
- *
- * Invalid to call on an unmapped read.
- */
- public int getUnclippedEnd() {
- return SAMUtils.getUnclippedEnd(getAlignmentEnd(), getCigar());
- }
-
-
- /**
- * @return 1-based inclusive reference position of the unclipped sequence at a given offset,
- * or 0 if there is no position.
- * For example, given the sequence NNNAAACCCGGG, cigar 3S9M, and an alignment start of 1,
- * and a (1-based)offset 10 (start of GGG) it returns 7 (1-based offset starting after the soft clip.
- * For example: given the sequence AAACCCGGGTTT, cigar 4M1D6M, an alignment start of 1,
- * an offset of 4 returns reference position 4, an offset of 5 returns reference position 6.
- * Another example: given the sequence AAACCCGGGTTT, cigar 4M1I6M, an alignment start of 1,
- * an offset of 4 returns reference position 4, an offset of 5 returns 0.
- * @offset 1-based location within the unclipped sequence
- */
- public int getReferencePositionAtReadPosition(final int offset) {
-
- if (offset == 0) return 0;
-
- for (final AlignmentBlock alignmentBlock : getAlignmentBlocks()) {
- if (CoordMath.getEnd(alignmentBlock.getReadStart(), alignmentBlock.getLength()) < offset) {
- continue;
- } else if (offset < alignmentBlock.getReadStart()) {
- return 0;
- } else {
- return alignmentBlock.getReferenceStart() + offset - alignmentBlock.getReadStart();
- }
- }
- return 0; // offset not located in an alignment block
- }
-
- /**
- * Unsupported. This property is derived from alignment start and CIGAR.
- */
- public void setAlignmentEnd(final int value) {
- throw new UnsupportedOperationException("Not supported: setAlignmentEnd");
- }
-
- /**
- * @return 1-based inclusive leftmost position of the clipped mate sequence, or 0 if there is no position.
- */
- public int getMateAlignmentStart() {
- return mMateAlignmentStart;
- }
-
- public void setMateAlignmentStart(final int mateAlignmentStart) {
- this.mMateAlignmentStart = mateAlignmentStart;
- }
-
- /**
- * @return insert size (difference btw 5' end of read & 5' end of mate), if possible, else 0.
- * Negative if mate maps to lower position than read.
- */
- public int getInferredInsertSize() {
- return mInferredInsertSize;
- }
-
- public void setInferredInsertSize(final int inferredInsertSize) {
- this.mInferredInsertSize = inferredInsertSize;
- }
-
- /**
- * @return phred scaled mapping quality. 255 implies valid mapping but quality is hard to compute.
- */
- public int getMappingQuality() {
- return mMappingQuality;
- }
-
- public void setMappingQuality(final int value) {
- mMappingQuality = value;
- }
-
- public String getCigarString() {
- if (mCigarString == null && getCigar() != null) {
- mCigarString = TextCigarCodec.getSingleton().encode(getCigar());
- }
- return mCigarString;
- }
-
- public void setCigarString(final String value) {
- mCigarString = value;
- mCigar = null;
- mAlignmentBlocks = null;
- // Clear cached alignment end
- mAlignmentEnd = NO_ALIGNMENT_START;
- // Change to cigar could change alignmentEnd, and thus indexing bin
- setIndexingBin(null);
- }
-
- /**
- * Do not modify the value returned by this method. If you want to change the Cigar, create a new
- * Cigar and call setCigar() or call setCigarString()
- * @return Cigar object for the read, or null if there is none.
- */
- public Cigar getCigar() {
- if (mCigar == null && mCigarString != null) {
- mCigar = TextCigarCodec.getSingleton().decode(mCigarString);
- if (getValidationStringency() != SAMFileReader.ValidationStringency.SILENT && !this.getReadUnmappedFlag()) {
- // Don't know line number, and don't want to force read name to be decoded.
- SAMUtils.processValidationErrors(this.validateCigar(-1L), -1L, getValidationStringency());
- }
- }
- return mCigar;
- }
-
- /**
- * This method is preferred over getCigar().getNumElements(), because for BAMRecord it may be faster.
- * @return number of cigar elements (number + operator) in the cigar string.
- */
- public int getCigarLength() {
- return getCigar().numCigarElements();
- }
-
- public void setCigar(final Cigar cigar) {
- initializeCigar(cigar);
- // Change to cigar could change alignmentEnd, and thus indexing bin
- setIndexingBin(null);
- }
-
- /**
- * For setting the Cigar string when BAMRecord has decoded it. Use this rather than setCigar()
- * so that indexing bin doesn't get clobbered.
- */
- protected void initializeCigar(final Cigar cigar) {
- this.mCigar = cigar;
- mCigarString = null;
- mAlignmentBlocks = null;
- // Clear cached alignment end
- mAlignmentEnd = NO_ALIGNMENT_START;
- }
-
- /**
- * Get the SAMReadGroupRecord for this SAMRecord.
- * @return The SAMReadGroupRecord from the SAMFileHeader for this SAMRecord, or null if
- * 1) this record has no RG tag, or 2) the header doesn't contain the read group with
- * the given ID.
- * @throws NullPointerException if this.getHeader() returns null.
- * @throws ClassCastException if RG tag does not have a String value.
- */
- public SAMReadGroupRecord getReadGroup() {
- final String rgId = (String)getAttribute(SAMTagUtil.getSingleton().RG);
- if (rgId == null) {
- return null;
- }
- return getHeader().getReadGroup(rgId);
- }
-
- /**
- * It is preferable to use the get*Flag() methods that handle the flag word symbolically.
- */
- public int getFlags() {
- return mFlags;
- }
-
- public void setFlags(final int value) {
- mFlags = value;
- // Could imply change to readUnmapped flag, which could change indexing bin
- setIndexingBin(null);
- }
-
- /**
- * the read is paired in sequencing, no matter whether it is mapped in a pair.
- */
- public boolean getReadPairedFlag() {
- return (mFlags & READ_PAIRED_FLAG) != 0;
- }
-
- private void requireReadPaired() {
- if (!getReadPairedFlag()) {
- throw new IllegalStateException("Inappropriate call if not paired read");
- }
- }
-
- /**
- * the read is mapped in a proper pair (depends on the protocol, normally inferred during alignment).
- */
- public boolean getProperPairFlag() {
- requireReadPaired();
- return getProperPairFlagUnchecked();
- }
-
- private boolean getProperPairFlagUnchecked() {
- return (mFlags & PROPER_PAIR_FLAG) != 0;
- }
-
- /**
- * the query sequence itself is unmapped.
- */
- public boolean getReadUnmappedFlag() {
- return (mFlags & READ_UNMAPPED_FLAG) != 0;
- }
-
- /**
- * the mate is unmapped.
- */
- public boolean getMateUnmappedFlag() {
- requireReadPaired();
- return getMateUnmappedFlagUnchecked();
- }
-
- private boolean getMateUnmappedFlagUnchecked() {
- return (mFlags & MATE_UNMAPPED_FLAG) != 0;
- }
-
- /**
- * strand of the query (false for forward; true for reverse strand).
- */
- public boolean getReadNegativeStrandFlag() {
- return (mFlags & READ_STRAND_FLAG) != 0;
- }
-
- /**
- * strand of the mate (false for forward; true for reverse strand).
- */
- public boolean getMateNegativeStrandFlag() {
- requireReadPaired();
- return getMateNegativeStrandFlagUnchecked();
- }
-
- private boolean getMateNegativeStrandFlagUnchecked() {
- return (mFlags & MATE_STRAND_FLAG) != 0;
- }
-
- /**
- * the read is the first read in a pair.
- */
- public boolean getFirstOfPairFlag() {
- requireReadPaired();
- return getFirstOfPairFlagUnchecked();
- }
-
- private boolean getFirstOfPairFlagUnchecked() {
- return (mFlags & FIRST_OF_PAIR_FLAG) != 0;
- }
-
- /**
- * the read is the second read in a pair.
- */
- public boolean getSecondOfPairFlag() {
- requireReadPaired();
- return getSecondOfPairFlagUnchecked();
- }
-
- private boolean getSecondOfPairFlagUnchecked() {
- return (mFlags & SECOND_OF_PAIR_FLAG) != 0;
- }
-
- /**
- * the alignment is not primary (a read having split hits may have multiple primary alignment records).
- */
- public boolean getNotPrimaryAlignmentFlag() {
- return (mFlags & NOT_PRIMARY_ALIGNMENT_FLAG) != 0;
- }
-
- /**
- * the alignment is supplementary (TODO: further explanation?).
- */
- public boolean getSupplementaryAlignmentFlag() {
- return (mFlags & SUPPLEMENTARY_ALIGNMENT_FLAG) != 0;
- }
-
- /**
- * the read fails platform/vendor quality checks.
- */
- public boolean getReadFailsVendorQualityCheckFlag() {
- return (mFlags & READ_FAILS_VENDOR_QUALITY_CHECK_FLAG) != 0;
- }
-
- /**
- * the read is either a PCR duplicate or an optical duplicate.
- */
- public boolean getDuplicateReadFlag() {
- return (mFlags & DUPLICATE_READ_FLAG) != 0;
- }
-
- /**
- * the read is paired in sequencing, no matter whether it is mapped in a pair.
- */
- public void setReadPairedFlag(final boolean flag) {
- setFlag(flag, READ_PAIRED_FLAG);
- }
-
- /**
- * the read is mapped in a proper pair (depends on the protocol, normally inferred during alignment).
- */
- public void setProperPairFlag(final boolean flag) {
- setFlag(flag, PROPER_PAIR_FLAG);
- }
-
- /**
- * the query sequence itself is unmapped. This method name is misspelled.
- * Use setReadUnmappedFlag instead.
- * @deprecated
- */
- public void setReadUmappedFlag(final boolean flag) {
- setReadUnmappedFlag(flag);
- }
-
- /**
- * the query sequence itself is unmapped.
- */
- public void setReadUnmappedFlag(final boolean flag) {
- setFlag(flag, READ_UNMAPPED_FLAG);
- // Change to readUnmapped could change indexing bin
- setIndexingBin(null);
- }
-
- /**
- * the mate is unmapped.
- */
- public void setMateUnmappedFlag(final boolean flag) {
- setFlag(flag, MATE_UNMAPPED_FLAG);
- }
-
- /**
- * strand of the query (false for forward; true for reverse strand).
- */
- public void setReadNegativeStrandFlag(final boolean flag) {
- setFlag(flag, READ_STRAND_FLAG);
- }
-
- /**
- * strand of the mate (false for forward; true for reverse strand).
- */
- public void setMateNegativeStrandFlag(final boolean flag) {
- setFlag(flag, MATE_STRAND_FLAG);
- }
-
- /**
- * the read is the first read in a pair.
- */
- public void setFirstOfPairFlag(final boolean flag) {
- setFlag(flag, FIRST_OF_PAIR_FLAG);
- }
-
- /**
- * the read is the second read in a pair.
- */
- public void setSecondOfPairFlag(final boolean flag) {
- setFlag(flag, SECOND_OF_PAIR_FLAG);
- }
-
- /**
- * the alignment is not primary (a read having split hits may have multiple primary alignment records).
- */
- public void setNotPrimaryAlignmentFlag(final boolean flag) {
- setFlag(flag, NOT_PRIMARY_ALIGNMENT_FLAG);
- }
-
- /**
- * the alignment is supplementary (TODO: further explanation?).
- */
- public void setSupplementaryAlignmentFlag(final boolean flag) {
- setFlag(flag, SUPPLEMENTARY_ALIGNMENT_FLAG);
- }
-
- /**
- * the read fails platform/vendor quality checks.
- */
- public void setReadFailsVendorQualityCheckFlag(final boolean flag) {
- setFlag(flag, READ_FAILS_VENDOR_QUALITY_CHECK_FLAG);
- }
-
- /**
- * the read is either a PCR duplicate or an optical duplicate.
- */
- public void setDuplicateReadFlag(final boolean flag) {
- setFlag(flag, DUPLICATE_READ_FLAG);
- }
-
- /**
- * Tests if this record is either a secondary and/or supplementary alignment;
- * equivalent to {@code (getNotPrimaryAlignmentFlag() || getSupplementaryAlignmentFlag())}.
- */
- public boolean isSecondaryOrSupplementary() {
- return getNotPrimaryAlignmentFlag() || getSupplementaryAlignmentFlag();
- }
-
- private void setFlag(final boolean flag, final int bit) {
- if (flag) {
- mFlags |= bit;
- } else {
- mFlags &= ~bit;
- }
- }
-
- public SAMFileReader.ValidationStringency getValidationStringency() {
- return mValidationStringency;
- }
-
- /**
- * Control validation of lazily-decoded elements.
- */
- public void setValidationStringency(final SAMFileReader.ValidationStringency validationStringency) {
- this.mValidationStringency = validationStringency;
- }
-
- /**
- * Get the value for a SAM tag.
- * WARNING: Some value types (e.g. byte[]) are mutable. It is dangerous to change one of these values in
- * place, because some SAMRecord implementations keep track of when attributes have been changed. If you
- * want to change an attribute value, call setAttribute() to replace the value.
- *
- * @param tag Two-character tag name.
- * @return Appropriately typed tag value, or null if the requested tag is not present.
- */
- public Object getAttribute(final String tag) {
- return getAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag));
- }
-
- /**
- * Get the tag value and attempt to coerce it into the requested type.
- * @param tag The requested tag.
- * @return The value of a tag, converted into an Integer if possible.
- * @throws RuntimeException If the value is not an integer type, or will not fit in an Integer.
- */
- public Integer getIntegerAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof Integer) {
- return (Integer)val;
- }
- if (!(val instanceof Number)) {
- throw new RuntimeException("Value for tag " + tag + " is not Number: " + val.getClass());
- }
- final long longVal = ((Number)val).longValue();
- if (longVal < Integer.MIN_VALUE || longVal > Integer.MAX_VALUE) {
- throw new RuntimeException("Value for tag " + tag + " is not in Integer range: " + longVal);
- }
- return (int)longVal;
- }
-
- /**
- * Get the tag value and attempt to coerce it into the requested type.
- * @param tag The requested tag.
- * @return The value of a tag, converted into a Short if possible.
- * @throws RuntimeException If the value is not an integer type, or will not fit in a Short.
- */
- public Short getShortAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof Short) {
- return (Short)val;
- }
- if (!(val instanceof Number)) {
- throw new RuntimeException("Value for tag " + tag + " is not Number: " + val.getClass());
- }
- final long longVal = ((Number)val).longValue();
- if (longVal < Short.MIN_VALUE || longVal > Short.MAX_VALUE) {
- throw new RuntimeException("Value for tag " + tag + " is not in Short range: " + longVal);
- }
- return (short)longVal;
- }
-
- /**
- * Get the tag value and attempt to coerce it into the requested type.
- * @param tag The requested tag.
- * @return The value of a tag, converted into a Byte if possible.
- * @throws RuntimeException If the value is not an integer type, or will not fit in a Byte.
- */
- public Byte getByteAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof Byte) {
- return (Byte)val;
- }
- if (!(val instanceof Number)) {
- throw new RuntimeException("Value for tag " + tag + " is not Number: " + val.getClass());
- }
- final long longVal = ((Number)val).longValue();
- if (longVal < Byte.MIN_VALUE || longVal > Byte.MAX_VALUE) {
- throw new RuntimeException("Value for tag " + tag + " is not in Short range: " + longVal);
- }
- return (byte)longVal;
- }
-
- public String getStringAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof String) {
- return (String)val;
- }
- throw new SAMException("Value for tag " + tag + " is not a String: " + val.getClass());
- }
-
- public Character getCharacterAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof Character) {
- return (Character)val;
- }
- throw new SAMException("Value for tag " + tag + " is not a Character: " + val.getClass());
- }
-
- public Float getFloatAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof Float) {
- return (Float)val;
- }
- throw new SAMException("Value for tag " + tag + " is not a Float: " + val.getClass());
- }
-
- /** Will work for signed byte array, unsigned byte array, or old-style hex array */
- public byte[] getByteArrayAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof byte[]) {
- return (byte[])val;
- }
- throw new SAMException("Value for tag " + tag + " is not a byte[]: " + val.getClass());
- }
-
- public byte[] getUnsignedByteArrayAttribute(final String tag) {
- final byte[] ret = getByteArrayAttribute(tag);
- if (ret != null) requireUnsigned(tag);
- return ret;
- }
-
- /** Will work for signed byte array or old-style hex array */
- public byte[] getSignedByteArrayAttribute(final String tag) {
- final byte[] ret = getByteArrayAttribute(tag);
- if (ret != null) requireSigned(tag);
- return ret;
- }
-
- public short[] getUnsignedShortArrayAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof short[]) {
- requireUnsigned(tag);
- return (short[]) val;
- }
- throw new SAMException("Value for tag " + tag + " is not a short[]: " + val.getClass());
- }
-
- public short[] getSignedShortArrayAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof short[]) {
- requireSigned(tag);
- return (short[]) val;
- }
- throw new SAMException("Value for tag " + tag + " is not a short[]: " + val.getClass());
- }
-
- public int[] getUnsignedIntArrayAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof int[]) {
- requireUnsigned(tag);
- return (int[]) val;
- }
- throw new SAMException("Value for tag " + tag + " is not a int[]: " + val.getClass());
- }
-
- public int[] getSignedIntArrayAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val == null) return null;
- if (val instanceof int[]) {
- requireSigned(tag);
- return (int[]) val;
- }
- throw new SAMException("Value for tag " + tag + " is not a int[]: " + val.getClass());
- }
-
- public float[] getFloatArrayAttribute(final String tag) {
- final Object val = getAttribute(tag);
- if (val != null && !(val instanceof float[])) {
- throw new SAMException("Value for tag " + tag + " is not a float[]: " + val.getClass());
- }
- return (float[]) val;
- }
-
- /**
- * @return True if this tag is an unsigned array, else false.
- * @throws SAMException if the tag is not present.
- */
- public boolean isUnsignedArrayAttribute(final String tag) {
- final SAMBinaryTagAndValue tmp = this.mAttributes.find(SAMTagUtil.getSingleton().makeBinaryTag(tag));
- if (tmp != null) return tmp.isUnsignedArray();
- throw new SAMException("Tag " + tag + " is not present in this SAMRecord");
- }
-
- private void requireSigned(final String tag) {
- if (isUnsignedArrayAttribute(tag)) throw new SAMException("Value for tag " + tag + " is not signed");
- }
-
- private void requireUnsigned(final String tag) {
- if (!isUnsignedArrayAttribute(tag)) throw new SAMException("Value for tag " + tag + " is not unsigned");
- }
-
- /**
- * @see SAMRecord#getAttribute(java.lang.String)
- * @param tag Binary representation of a 2-char String tag as created by SAMTagUtil.
- */
- public Object getAttribute(final short tag) {
- if (this.mAttributes == null) return null;
- else {
- final SAMBinaryTagAndValue tmp = this.mAttributes.find(tag);
- if (tmp != null) return tmp.value;
- else return null;
- }
- }
-
- /**
- * Set a named attribute onto the SAMRecord. Passing a null value causes the attribute to be cleared.
- * @param tag two-character tag name. See http://samtools.sourceforge.net/SAM1.pdf for standard and user-defined tags.
- * @param value Supported types are String, Char, Integer, Float, byte[], short[]. int[], float[].
- * If value == null, tag is cleared.
- *
- * Byte and Short are allowed but discouraged. If written to a SAM file, these will be converted to Integer,
- * whereas if written to BAM, getAttribute() will return as Byte or Short, respectively.
- *
- * Long with value between 0 and MAX_UINT is allowed for BAM but discouraged. Attempting to write such a value
- * to SAM will cause an exception to be thrown.
- *
- * To set unsigned byte[], unsigned short[] or unsigned int[] (which is discouraged because of poor Java language
- * support), setUnsignedArrayAttribute() must be used instead of this method.
- *
- * String values are not validated to ensure that they conform to SAM spec.
- */
- public void setAttribute(final String tag, final Object value) {
- if (value != null && value.getClass().isArray() && Array.getLength(value) == 0) {
- throw new IllegalArgumentException("Empty value passed for tag " + tag);
- }
- setAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag), value);
- }
-
- /**
- * Because Java does not support unsigned integer types, we think it is a bad idea to encode them in SAM
- * files. If you must do so, however, you must call this method rather than setAttribute, because calling
- * this method is the way to indicate that, e.g. a short array should be interpreted as unsigned shorts.
- * @param value must be one of byte[], short[], int[]
- */
- public void setUnsignedArrayAttribute(final String tag, final Object value) {
- if (!value.getClass().isArray()) {
- throw new IllegalArgumentException("Non-array passed to setUnsignedArrayAttribute for tag " + tag);
- }
- if (Array.getLength(value) == 0) {
- throw new IllegalArgumentException("Empty array passed to setUnsignedArrayAttribute for tag " + tag);
- }
- setAttribute(SAMTagUtil.getSingleton().makeBinaryTag(tag), value, true);
- }
-
- /**
- * @see net.sf.samtools.SAMRecord#setAttribute(java.lang.String, java.lang.Object)
- * @param tag Binary representation of a 2-char String tag as created by SAMTagUtil.
- */
- protected void setAttribute(final short tag, final Object value) {
- setAttribute(tag, value, false);
- }
-
- protected void setAttribute(final short tag, final Object value, final boolean isUnsignedArray) {
- if (value != null &&
- !(value instanceof Byte || value instanceof Short || value instanceof Integer ||
- value instanceof String || value instanceof Character || value instanceof Float ||
- value instanceof byte[] || value instanceof short[] || value instanceof int[] ||
- value instanceof float[])) {
- throw new SAMException("Attribute type " + value.getClass() + " not supported. Tag: " +
- SAMTagUtil.getSingleton().makeStringTag(tag));
- }
- if (value == null) {
- if (this.mAttributes != null) this.mAttributes = this.mAttributes.remove(tag);
- }
- else {
- final SAMBinaryTagAndValue tmp;
- if(!isUnsignedArray) {
- tmp = new SAMBinaryTagAndValue(tag, value);
- }
- else {
- if (!value.getClass().isArray() || value instanceof float[]) {
- throw new SAMException("Attribute type " + value.getClass() +
- " cannot be encoded as an unsigned array. Tag: " +
- SAMTagUtil.getSingleton().makeStringTag(tag));
- }
- tmp = new SAMBinaryTagAndUnsignedArrayValue(tag, value);
- }
- if (this.mAttributes == null) this.mAttributes = tmp;
- else this.mAttributes = this.mAttributes.insert(tmp);
- }
- }
-
- /**
- * Removes all attributes.
- */
- public void clearAttributes() {
- mAttributes = null;
- }
-
- /**
- * Replace any existing attributes with the given linked item.
- */
- protected void setAttributes(final SAMBinaryTagAndValue attributes) {
- mAttributes = attributes;
- }
-
- /**
- * @return Pointer to the first of the tags. Returns null if there are no tags.
- */
- protected SAMBinaryTagAndValue getBinaryAttributes() {
- return mAttributes;
- }
-
- /**
- * Tag name and value of an attribute, for getAttributes() method.
- */
- public static class SAMTagAndValue {
- public final String tag;
- public final Object value;
-
- public SAMTagAndValue(final String tag, final Object value) {
- this.tag = tag;
- this.value = value;
- }
- }
-
- /**
- * @return list of {tag, value} tuples
- */
- public List<SAMTagAndValue> getAttributes() {
- SAMBinaryTagAndValue binaryAttributes = getBinaryAttributes();
- final List<SAMTagAndValue> ret = new ArrayList<SAMTagAndValue>();
- while (binaryAttributes != null) {
- ret.add(new SAMTagAndValue(SAMTagUtil.getSingleton().makeStringTag(binaryAttributes.tag),
- binaryAttributes.value));
- binaryAttributes = binaryAttributes.getNext();
- }
- return ret;
- }
-
- Integer getIndexingBin() {
- return mIndexingBin;
- }
-
- /**
- * Used internally when writing BAMRecords.
- * @param mIndexingBin c.f. http://samtools.sourceforge.net/SAM1.pdf
- */
- void setIndexingBin(final Integer mIndexingBin) {
- this.mIndexingBin = mIndexingBin;
- }
-
- /**
- * Does not change state of this.
- * @return indexing bin based on alignment start & end.
- */
- int computeIndexingBin() {
- // reg2bin has zero-based, half-open API
- final int alignmentStart = getAlignmentStart()-1;
- int alignmentEnd = getAlignmentEnd();
- if (alignmentEnd <= 0) {
- // If alignment end cannot be determined (e.g. because this read is not really aligned),
- // then treat this as a one base alignment for indexing purposes.
- alignmentEnd = alignmentStart + 1;
- }
- return GenomicIndexUtil.reg2bin(alignmentStart, alignmentEnd);
- }
-
- public SAMFileHeader getHeader() {
- return mHeader;
- }
-
- /**
- * Setting header into SAMRecord facilitates conversion btw reference sequence names and indices
- * @param header contains sequence dictionary for this SAMRecord
- */
- public void setHeader(final SAMFileHeader header) {
- this.mHeader = header;
- }
-
- /**
- * If this record has a valid binary representation of the variable-length portion of a binary record stored,
- * return that byte array, otherwise return null. This will never be true for SAMRecords. It will be true
- * for BAMRecords that have not been eagerDecoded(), and for which none of the data in the variable-length
- * portion has been changed.
- */
- public byte[] getVariableBinaryRepresentation() {
- return null;
- }
-
- /**
- * Depending on the concrete implementation, the binary file size of attributes may be known without
- * computing them all.
- * @return binary file size of attribute, if known, else -1
- */
- public int getAttributesBinarySize() {
- return -1;
- }
-
- /**
- *
- * @return String representation of this.
- * @deprecated This method is not guaranteed to return a valid SAM text representation of the SAMRecord.
- * To get standard SAM text representation, use net.sf.samtools.SAMRecord#getSAMString().
- */
- public String format() {
- final StringBuilder buffer = new StringBuilder();
- addField(buffer, getReadName(), null, null);
- addField(buffer, getFlags(), null, null);
- addField(buffer, getReferenceName(), null, "*");
- addField(buffer, getAlignmentStart(), 0, "*");
- addField(buffer, getMappingQuality(), 0, "0");
- addField(buffer, getCigarString(), null, "*");
- addField(buffer, getMateReferenceName(), null, "*");
- addField(buffer, getMateAlignmentStart(), 0, "*");
- addField(buffer, getInferredInsertSize(), 0, "*");
- addField(buffer, getReadString(), null, "*");
- addField(buffer, getBaseQualityString(), null, "*");
- if (mAttributes != null) {
- SAMBinaryTagAndValue entry = getBinaryAttributes();
- while (entry != null) {
- addField(buffer, formatTagValue(entry.tag, entry.value));
- entry = entry.getNext();
- }
- }
- return buffer.toString();
- }
-
- private void addField(final StringBuilder buffer, final Object value, final Object defaultValue, final String defaultString) {
- if (safeEquals(value, defaultValue)) {
- addField(buffer, defaultString);
- } else if (value == null) {
- addField(buffer, "");
- } else {
- addField(buffer, value.toString());
- }
- }
-
- private void addField(final StringBuilder buffer, final String field) {
- if (buffer.length() > 0) {
- buffer.append('\t');
- }
- buffer.append(field);
- }
-
- private String formatTagValue(final short tag, final Object value) {
- final String tagString = SAMTagUtil.getSingleton().makeStringTag(tag);
- if (value == null || value instanceof String) {
- return tagString + ":Z:" + value;
- } else if (value instanceof Integer || value instanceof Long ||
- value instanceof Short || value instanceof Byte) {
- return tagString + ":i:" + value;
- } else if (value instanceof Character) {
- return tagString + ":A:" + value;
- } else if (value instanceof Float) {
- return tagString + ":f:" + value;
- } else if (value instanceof byte[]) {
- return tagString + ":H:" + StringUtil.bytesToHexString((byte[]) value);
- } else {
- throw new RuntimeException("Unexpected value type for tag " + tagString +
- ": " + value + " of class " + value.getClass().getName());
- }
- }
-
- private boolean safeEquals(final Object o1, final Object o2) {
- if (o1 == o2) {
- return true;
- } else if (o1 == null || o2 == null) {
- return false;
- } else {
- return o1.equals(o2);
- }
- }
-
- /**
- * Force all lazily-initialized data members to be initialized. If a subclass overrides this method,
- * typically it should also call super method.
- */
- protected void eagerDecode() {
- getCigar();
- getCigarString();
- }
-
- /**
- * Returns blocks of the read sequence that have been aligned directly to the
- * reference sequence. Note that clipped portions of the read and inserted and
- * deleted bases (vs. the reference) are not represented in the alignment blocks.
- */
- public List<AlignmentBlock> getAlignmentBlocks() {
- if (this.mAlignmentBlocks == null) {
- this.mAlignmentBlocks = SAMUtils.getAlignmentBlocks(getCigar(), getAlignmentStart(), "read cigar");
- }
- return this.mAlignmentBlocks;
- }
-
- /**
- * Run all validations of CIGAR. These include validation that the CIGAR makes sense independent of
- * placement, plus validation that CIGAR + placement yields all bases with M operator within the range of the reference.
- * @param recordNumber For error reporting. -1 if not known.
- * @return List of errors, or null if no errors.
- */
- public List<SAMValidationError> validateCigar(final long recordNumber) {
- List<SAMValidationError> ret = null;
-
- if (getValidationStringency() != SAMFileReader.ValidationStringency.SILENT && !this.getReadUnmappedFlag()) {
- ret = SAMUtils.validateCigar(this, getCigar(), getReferenceIndex(), getAlignmentBlocks(), recordNumber, "Read CIGAR");
- }
- return ret;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (!(o instanceof SAMRecord)) return false;
-
- final SAMRecord samRecord = (SAMRecord) o;
-
- // First check all the elements that do not require decoding
- if (mAlignmentStart != samRecord.mAlignmentStart) return false;
- if (mFlags != samRecord.mFlags) return false;
- if (mInferredInsertSize != samRecord.mInferredInsertSize) return false;
- if (mMappingQuality != samRecord.mMappingQuality) return false;
- if (mMateAlignmentStart != samRecord.mMateAlignmentStart) return false;
- if (mIndexingBin != null ? !mIndexingBin.equals(samRecord.mIndexingBin) : samRecord.mIndexingBin != null)
- return false;
- if (mMateReferenceIndex != null ? !mMateReferenceIndex.equals(samRecord.mMateReferenceIndex) : samRecord.mMateReferenceIndex != null)
- return false;
- if (mReferenceIndex != null ? !mReferenceIndex.equals(samRecord.mReferenceIndex) : samRecord.mReferenceIndex != null)
- return false;
-
- eagerDecode();
- samRecord.eagerDecode();
-
- if (mReadName != null ? !mReadName.equals(samRecord.mReadName) : samRecord.mReadName != null) return false;
- if (mAttributes != null ? !mAttributes.equals(samRecord.mAttributes) : samRecord.mAttributes != null)
- return false;
- if (!Arrays.equals(mBaseQualities, samRecord.mBaseQualities)) return false;
- if (mCigar != null ? !mCigar.equals(samRecord.mCigar) : samRecord.mCigar != null)
- return false;
- if (mMateReferenceName != null ? !mMateReferenceName.equals(samRecord.mMateReferenceName) : samRecord.mMateReferenceName != null)
- return false;
- if (!Arrays.equals(mReadBases, samRecord.mReadBases)) return false;
- if (mReferenceName != null ? !mReferenceName.equals(samRecord.mReferenceName) : samRecord.mReferenceName != null)
- return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- eagerDecode();
- int result = mReadName != null ? mReadName.hashCode() : 0;
- result = 31 * result + (mReadBases != null ? Arrays.hashCode(mReadBases) : 0);
- result = 31 * result + (mBaseQualities != null ? Arrays.hashCode(mBaseQualities) : 0);
- result = 31 * result + (mReferenceName != null ? mReferenceName.hashCode() : 0);
- result = 31 * result + mAlignmentStart;
- result = 31 * result + mMappingQuality;
- result = 31 * result + (mCigarString != null ? mCigarString.hashCode() : 0);
- result = 31 * result + mFlags;
- result = 31 * result + (mMateReferenceName != null ? mMateReferenceName.hashCode() : 0);
- result = 31 * result + mMateAlignmentStart;
- result = 31 * result + mInferredInsertSize;
- result = 31 * result + (mAttributes != null ? mAttributes.hashCode() : 0);
- result = 31 * result + (mReferenceIndex != null ? mReferenceIndex.hashCode() : 0);
- result = 31 * result + (mMateReferenceIndex != null ? mMateReferenceIndex.hashCode() : 0);
- result = 31 * result + (mIndexingBin != null ? mIndexingBin.hashCode() : 0);
- return result;
- }
-
- /**
- * Perform various validations of SAMRecord.
- * Note that this method deliberately returns null rather than Collections.emptyList() if there
- * are no validation errors, because callers tend to assume that if a non-null list is returned, it is modifiable.
- * @return null if valid. If invalid, returns a list of error messages.
- */
- public List<SAMValidationError> isValid() {
- // ret is only instantiate if there are errors to report, in order to reduce GC in the typical case
- // in which everything is valid. It's ugly, but more efficient.
- ArrayList<SAMValidationError> ret = null;
- if (!getReadPairedFlag()) {
- if (getProperPairFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR, "Proper pair flag should not be set for unpaired read.", getReadName()));
- }
- if (getMateUnmappedFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED, "Mate unmapped flag should not be set for unpaired read.", getReadName()));
- }
- if (getMateNegativeStrandFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_MATE_NEG_STRAND, "Mate negative strand flag should not be set for unpaired read.", getReadName()));
- }
- if (getFirstOfPairFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_FIRST_OF_PAIR, "First of pair flag should not be set for unpaired read.", getReadName()));
- }
- if (getSecondOfPairFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_SECOND_OF_PAIR, "Second of pair flag should not be set for unpaired read.", getReadName()));
- }
- if (getMateReferenceIndex() != NO_ALIGNMENT_REFERENCE_INDEX) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_MATE_REF_INDEX, "MRNM should not be set for unpaired read.", getReadName()));
- }
- } else {
- final List<SAMValidationError> errors = isValidReferenceIndexAndPosition(mMateReferenceIndex, mMateReferenceName,
- getMateAlignmentStart(), true);
- if (errors != null) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.addAll(errors);
- }
- if (!hasMateReferenceName() && !getMateUnmappedFlag()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED, "Mapped mate should have mate reference name", getReadName()));
- }
- if (!getFirstOfPairFlagUnchecked() && !getSecondOfPairFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.PAIRED_READ_NOT_MARKED_AS_FIRST_OR_SECOND,
- "Paired read should be marked as first of pair or second of pair.", getReadName()));
- }
-/*
- TODO: PIC-97 This validation should be enabled, but probably at this point there are too many
- BAM files that have the proper pair flag set when read or mate is unmapped.
- if (getMateUnmappedFlag() && getProperPairFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR, "Proper pair flag should not be set for unpaired read.", getReadName()));
- }
-*/
- }
- if (getInferredInsertSize() > MAX_INSERT_SIZE || getInferredInsertSize() < -MAX_INSERT_SIZE) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_INSERT_SIZE, "Insert size out of range", getReadName()));
- }
- if (getReadUnmappedFlag()) {
- if (getNotPrimaryAlignmentFlag()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_NOT_PRIM_ALIGNMENT, "Not primary alignment flag should not be set for unmapped read.", getReadName()));
- }
- if (getSupplementaryAlignmentFlag()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_SUPPLEMENTARY_ALIGNMENT, "Supplementary alignment flag should not be set for unmapped read.", getReadName()));
- }
- if (getMappingQuality() != 0) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_MAPPING_QUALITY, "MAPQ should be 0 for unmapped read.", getReadName()));
- }
- /* non-empty CIGAR on unmapped read is now allowed, because there are special reads when SAM is used to store assembly. */
-/*
- TODO: PIC-97 This validation should be enabled, but probably at this point there are too many
- BAM files that have the proper pair flag set when read or mate is unmapped.
- if (getProperPairFlagUnchecked()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR, "Proper pair flag should not be set for unmapped read.", getReadName()));
- }
-*/
- } else {
- if (getMappingQuality() >= 256) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_MAPPING_QUALITY, "MAPQ should be < 256.", getReadName()));
- }
- if (getCigarLength() == 0) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR, "CIGAR should have > zero elements for mapped read.", getReadName()));
- /* todo - will uncomment once unit tests are added
- } else if (getCigar().getReadLength() != getReadLength()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_CIGAR, "CIGAR read length " + getCigar().getReadLength() + " doesn't match read length " + getReadLength(), getReadName()));
- */
- }
- if (getHeader().getSequenceDictionary().size() == 0) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.MISSING_SEQUENCE_DICTIONARY, "Empty sequence dictionary.", getReadName()));
- }
- if (!hasReferenceName()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_FLAG_READ_UNMAPPED, "Mapped read should have valid reference name", getReadName()));
- }
-/*
- Oops! We know this is broken in older BAM files, so this having this validation will cause all sorts of
- problems!
- if (getIndexingBin() != null && getIndexingBin() != computeIndexingBin()) {
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_INDEXING_BIN,
- "Indexing bin (" + getIndexingBin() + ") does not agree with computed value (" + computeIndexingBin() + ")",
- getReadName()));
-
- }
-*/
- }
- // Validate the RG ID is found in header
- final String rgId = (String)getAttribute(SAMTagUtil.getSingleton().RG);
- if (rgId != null && getHeader().getReadGroup(rgId) == null) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.READ_GROUP_NOT_FOUND,
- "RG ID on SAMRecord not found in header: " + rgId, getReadName()));
- }
- final List<SAMValidationError> errors = isValidReferenceIndexAndPosition(mReferenceIndex, mReferenceName, getAlignmentStart(), false);
- if (errors != null) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.addAll(errors);
- }
- // TODO(mccowan): Is this asking "is this the primary alignment"?
- if (this.getReadLength() == 0 && !this.getNotPrimaryAlignmentFlag()) {
- final Object fz = getAttribute(SAMTagUtil.getSingleton().FZ);
- if (fz == null) {
- final String cq = (String)getAttribute(SAMTagUtil.getSingleton().CQ);
- final String cs = (String)getAttribute(SAMTagUtil.getSingleton().CS);
- if (cq == null || cq.length() == 0 || cs == null || cs.length() == 0) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.EMPTY_READ,
- "Zero-length read without FZ, CS or CQ tag", getReadName()));
- } else if (!getReadUnmappedFlag()) {
- boolean hasIndel = false;
- for (final CigarElement cigarElement : getCigar().getCigarElements()) {
- if (cigarElement.getOperator() == CigarOperator.DELETION ||
- cigarElement.getOperator() == CigarOperator.INSERTION) {
- hasIndel = true;
- break;
- }
- }
- if (!hasIndel) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.EMPTY_READ,
- "Colorspace read with zero-length bases but no indel", getReadName()));
- }
- }
- }
- }
- if (this.getReadLength() != getBaseQualities().length && !Arrays.equals(getBaseQualities(), NULL_QUALS)) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.MISMATCH_READ_LENGTH_AND_QUALS_LENGTH,
- "Read length does not match quals length", getReadName()));
- }
-
- if (this.getAlignmentStart() != NO_ALIGNMENT_START && this.getIndexingBin() != null &&
- this.computeIndexingBin() != this.getIndexingBin()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_INDEXING_BIN,
- "bin field of BAM record does not equal value computed based on alignment start and end, and length of sequence to which read is aligned",
- getReadName()));
- }
-
- if (ret == null || ret.size() == 0) {
- return null;
- }
- return ret;
- }
-
- /**
- * Gets the source of this SAM record -- both the reader that retrieved the record and the position on disk from
- * whence it came.
- * @return The file source. Note that the reader will be null if not activated using SAMFileReader.enableFileSource().
- */
- public SAMFileSource getFileSource() {
- return mFileSource;
- }
-
- /**
- * Sets a marker providing the source reader for this file and the position in the file from which the read originated.
- * @param fileSource source of the given file.
- */
- protected void setFileSource(final SAMFileSource fileSource) {
- mFileSource = fileSource;
- }
-
- private List<SAMValidationError> isValidReferenceIndexAndPosition(final Integer referenceIndex, final String referenceName,
- final int alignmentStart, final boolean isMate) {
- final boolean hasReference = hasReferenceName(referenceIndex, referenceName);
-
- // ret is only instantiate if there are errors to report, in order to reduce GC in the typical case
- // in which everything is valid. It's ugly, but more efficient.
- ArrayList<SAMValidationError> ret = null;
- if (!hasReference) {
- if (alignmentStart != 0) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_ALIGNMENT_START, buildMessage("Alignment start should be 0 because reference name = *.", isMate), getReadName()));
- }
- } else {
- if (alignmentStart == 0) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_ALIGNMENT_START, buildMessage("Alignment start should != 0 because reference name != *.", isMate), getReadName()));
- }
-
- if (getHeader().getSequenceDictionary().size() > 0) {
- final SAMSequenceRecord sequence =
- (referenceIndex != null? getHeader().getSequence(referenceIndex): getHeader().getSequence(referenceName));
- if (sequence == null) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_REFERENCE_INDEX, buildMessage("Reference sequence not found in sequence dictionary.", isMate), getReadName()));
- } else {
- if (alignmentStart > sequence.getSequenceLength()) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.INVALID_ALIGNMENT_START, buildMessage("Alignment start (" + alignmentStart + ") must be <= reference sequence length (" +
- sequence.getSequenceLength() + ") on reference " + sequence.getSequenceName(), isMate), getReadName()));
- }
- }
- }
- }
- return ret;
- }
-
- private String buildMessage(final String baseMessage, final boolean isMate) {
- return isMate ? "Mate " + baseMessage : baseMessage;
- }
-
- /**
- * Note that this does a shallow copy of everything, except for the attribute list, for which a copy of the list
- * is made, but the attributes themselves are copied by reference. This should be safe because callers should
- * never modify a mutable value returned by any of the get() methods anyway.
- */
- @Override
- public Object clone() throws CloneNotSupportedException {
- final SAMRecord newRecord = (SAMRecord)super.clone();
- if (mAttributes != null) {
- newRecord.mAttributes = this.mAttributes.copy();
- }
-
- return newRecord;
- }
-
- /** Simple toString() that gives a little bit of useful info about the read. */
- @Override
- public String toString() {
- final StringBuilder builder = new StringBuilder(64);
- builder.append(getReadName());
- if (getReadPairedFlag()) {
- if (getFirstOfPairFlag()) {
- builder.append(" 1/2");
- }
- else {
- builder.append(" 2/2");
- }
- }
-
- builder.append(" ");
- builder.append(String.valueOf(getReadLength()));
- builder.append("b");
-
- if (getReadUnmappedFlag()) {
- builder.append(" unmapped read.");
- }
- else {
- builder.append(" aligned read.");
- }
-
- return builder.toString();
- }
-
- /**
- Returns the record in the SAM line-based text format. Fields are
- separated by '\t' characters, and the String is terminated by '\n'.
- */
- public String getSAMString() {
- return SAMTextWriter.getSAMString(this);
- }
-}
-
diff --git a/src/java/net/sf/samtools/SAMRecordComparator.java b/src/java/net/sf/samtools/SAMRecordComparator.java
deleted file mode 100644
index 31f2e00..0000000
--- a/src/java/net/sf/samtools/SAMRecordComparator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.Comparator;
-
-/**
- * Interface for comparators that define the various SAM sort orders.
- */
-public interface SAMRecordComparator extends Comparator<SAMRecord> {
-
- /**
- * Less stringent compare method than the regular compare. If the two records
- * are equal enough that their ordering in a sorted SAM file would be arbitrary,
- * this method returns 0.
- * @return negative if samRecord1 < samRecord2, 0 if equal, else positive
- */
- public int fileOrderCompare(SAMRecord samRecord1, SAMRecord samRecord2);
-}
diff --git a/src/java/net/sf/samtools/SAMRecordCoordinateComparator.java b/src/java/net/sf/samtools/SAMRecordCoordinateComparator.java
deleted file mode 100644
index 5977e61..0000000
--- a/src/java/net/sf/samtools/SAMRecordCoordinateComparator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Comparator for sorting SAMRecords by coordinate. Note that the header is required because
- * the order of sequences in the header defines the major sort order.
- *
- * Ideally this method would only return 0 for completely equal SAMRecords, so that sort is
- * completely deterministic. This implementation does not achieve this completely, but it
- * comes pretty close, while avoiding decoding the variable length fields, except for read name,
- * which is decoded if coordinate and strand are equal.
- *
- * Extreme care must be taken to ensure the following:
- * if A == B, then B == A
- * if A < B, then B > A
- * if A < B && B < C, then A < C
- *
- */
-public class SAMRecordCoordinateComparator implements SAMRecordComparator {
- public int compare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
- int cmp = fileOrderCompare(samRecord1, samRecord2);
- if (cmp != 0) {
- return cmp;
- }
- // Test of negative strand flag is not really necessary, because it is tested
- // with cmp if getFlags, but it is left here because that is the way it was done
- // in the past.
- if (samRecord1.getReadNegativeStrandFlag() == samRecord2.getReadNegativeStrandFlag()) {
- cmp = samRecord1.getReadName().compareTo(samRecord2.getReadName());
- if (cmp != 0) return cmp;
- cmp = compareInts(samRecord1.getFlags(), samRecord2.getFlags());
- if (cmp != 0) return cmp;
- cmp = compareInts(samRecord1.getMappingQuality(), samRecord2.getMappingQuality());
- if (cmp != 0) return cmp;
- cmp = compareInts(samRecord1.getMateReferenceIndex(), samRecord2.getMateReferenceIndex());
- if (cmp != 0) return cmp;
- cmp = compareInts(samRecord1.getMateAlignmentStart(), samRecord2.getMateAlignmentStart());
- if (cmp != 0) return cmp;
- cmp = compareInts(samRecord1.getInferredInsertSize(), samRecord2.getInferredInsertSize());
- return cmp;
-
- }
- else return (samRecord1.getReadNegativeStrandFlag()? 1: -1);
- }
-
- private int compareInts(int i1, int i2) {
- if (i1 < i2) return -1;
- else if (i1 > i2) return 1;
- else return 0;
- }
-
- /**
- * Less stringent compare method than the regular compare. If the two records
- * are equal enough that their ordering in a sorted SAM file would be arbitrary,
- * this method returns 0. If read is paired and unmapped, use the mate mapping to sort.
- *
- * @return negative if samRecord1 < samRecord2, 0 if equal, else positive
- */
- public int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
- final int refIndex1 = samRecord1.getReferenceIndex();
- final int refIndex2 = samRecord2.getReferenceIndex();
- if (refIndex1 == -1) {
- return (refIndex2 == -1? 0: 1);
- } else if (refIndex2 == -1) {
- return -1;
- }
- final int cmp = refIndex1 - refIndex2;
- if (cmp != 0) {
- return cmp;
- }
- return samRecord1.getAlignmentStart() - samRecord2.getAlignmentStart();
- }
-}
diff --git a/src/java/net/sf/samtools/SAMRecordFactory.java b/src/java/net/sf/samtools/SAMRecordFactory.java
deleted file mode 100644
index aeb9af2..0000000
--- a/src/java/net/sf/samtools/SAMRecordFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package net.sf.samtools;
-
-/**
- * Factory interface which allows plugging in of different classes for generating instances of
- * SAMRecord and BAMRecord when reading from SAM/BAM files.
- *
- * @author Tim Fennell
- */
-public interface SAMRecordFactory {
-
- /** Create a new SAMRecord to be filled in */
- public SAMRecord createSAMRecord(SAMFileHeader header);
-
- /** Create a new BAM Record. */
- public BAMRecord createBAMRecord(final SAMFileHeader header,
- final int referenceSequenceIndex,
- final int alignmentStart,
- final short readNameLength,
- final short mappingQuality,
- final int indexingBin,
- final int cigarLen,
- final int flags,
- final int readLen,
- final int mateReferenceSequenceIndex,
- final int mateAlignmentStart,
- final int insertSize,
- final byte[] variableLengthBlock);
-}
diff --git a/src/java/net/sf/samtools/SAMRecordIterator.java b/src/java/net/sf/samtools/SAMRecordIterator.java
deleted file mode 100755
index 74492d5..0000000
--- a/src/java/net/sf/samtools/SAMRecordIterator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-
-/**
- * A general interface that adds functionality to a CloseableIterator of
- * SAMRecords. Currently, this interface is implemented by iterators that
- * want to validate as they are iterating that that the records in the
- * underlying SAM/BAM file are in a particular order.
- */
-public interface SAMRecordIterator extends CloseableIterator<SAMRecord> {
-
- /**
- * Establishes that records returned by this iterator are expected to
- * be in the specified sort order. If this method has been called,
- * then implementers must throw an IllegalStateException from next()
- * when a record is read that violates the sort order. This method
- * may be called multiple times over the course of an iteration,
- * changing the expected sort, if desired -- from the time it is called,
- * it validates whatever sort is set, or stops validating if it
- * is set to null or SAMFileHeader.SortOrder.unsorted. If this method
- * is not called, then no validation of the iterated records is done.
- *
- * @param sortOrder The order in which records are expected to be returned
- * @return This SAMRecordIterator
- */
- public SAMRecordIterator assertSorted(SAMFileHeader.SortOrder sortOrder);
-
-}
diff --git a/src/java/net/sf/samtools/SAMRecordQueryNameComparator.java b/src/java/net/sf/samtools/SAMRecordQueryNameComparator.java
deleted file mode 100644
index bcf7a3e..0000000
--- a/src/java/net/sf/samtools/SAMRecordQueryNameComparator.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Comparator for "queryname" ordering of SAMRecords.
- */
-public class SAMRecordQueryNameComparator implements SAMRecordComparator {
-
- public int compare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
- int cmp = fileOrderCompare(samRecord1, samRecord2);
- if (cmp != 0) {
- return cmp;
- }
-
- final boolean r1Paired = samRecord1.getReadPairedFlag();
- final boolean r2Paired = samRecord2.getReadPairedFlag();
-
- if (r1Paired || r2Paired) {
- if (!r1Paired) return 1;
- else if (!r2Paired) return -1;
- else if (samRecord1.getFirstOfPairFlag() && samRecord2.getSecondOfPairFlag()) return -1;
- else if (samRecord1.getSecondOfPairFlag() && samRecord2.getFirstOfPairFlag()) return 1;
- }
-
- if (samRecord1.getReadNegativeStrandFlag() != samRecord2.getReadNegativeStrandFlag()) {
- return (samRecord1.getReadNegativeStrandFlag()? 1: -1);
- }
- if (samRecord1.getNotPrimaryAlignmentFlag() != samRecord2.getNotPrimaryAlignmentFlag()) {
- return samRecord2.getNotPrimaryAlignmentFlag()? -1: 1;
- }
- if (samRecord1.getSupplementaryAlignmentFlag() != samRecord2.getSupplementaryAlignmentFlag()) {
- return samRecord2.getSupplementaryAlignmentFlag() ? -1 : 1;
- }
- final Integer hitIndex1 = samRecord1.getIntegerAttribute(SAMTag.HI.name());
- final Integer hitIndex2 = samRecord2.getIntegerAttribute(SAMTag.HI.name());
- if (hitIndex1 != null) {
- if (hitIndex2 == null) return 1;
- else {
- cmp = hitIndex1.compareTo(hitIndex2);
- if (cmp != 0) return cmp;
- }
- } else if (hitIndex2 != null) return -1;
- return 0;
- }
-
- /**
- * Less stringent compare method than the regular compare. If the two records
- * are equal enough that their ordering in a sorted SAM file would be arbitrary,
- * this method returns 0.
- *
- * @return negative if samRecord1 < samRecord2, 0 if equal, else positive
- */
- public int fileOrderCompare(final SAMRecord samRecord1, final SAMRecord samRecord2) {
- return compareReadNames(samRecord1.getReadName(), samRecord2.getReadName());
- }
-
- /**
- * Encapsulate algorithm for comparing read names in queryname-sorted file, since there have been
- * conversations about changing the behavior.
- */
- public static int compareReadNames(final String readName1, final String readName2) {
- return readName1.compareTo(readName2);
- }
-}
diff --git a/src/java/net/sf/samtools/SAMRecordSetBuilder.java b/src/java/net/sf/samtools/SAMRecordSetBuilder.java
deleted file mode 100644
index 7507239..0000000
--- a/src/java/net/sf/samtools/SAMRecordSetBuilder.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CoordMath;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Random;
-import java.util.TreeSet;
-/**
- * Factory class for creating SAMRecords for testing purposes. Various methods can be called
- * to add new SAM records (or pairs of records) to a list which can then be returned at
- * any point. The records must reference human chromosomes (excluding randoms etc.).
- *
- * Although this is a class for testing, it is in the src tree because it is included in the sam jarfile.
- *
- * @author Tim Fennell
- */
-public class SAMRecordSetBuilder implements Iterable<SAMRecord> {
- private static final String[] chroms = {
- "chr1", "chr2", "chr3", "chr4", "chr5", "chr6", "chr7", "chr8", "chr9", "chr10",
- "chr11", "chr12", "chr13", "chr14", "chr15", "chr16", "chr17", "chr18", "chr19", "chr20",
- "chr21", "chr22", "chrX", "chrY", "chrM"
- };
- private static final byte[] BASES = {'A','C','G','T'};
- private static final String READ_GROUP_ID = "1";
- private static final String SAMPLE = "FREE_SAMPLE";
- private final Random random = new Random();
-
- private final SAMFileHeader header;
- private final Collection<SAMRecord> records;
-
- private int readLength = 36 ;
-
- private SAMProgramRecord programRecord = null;
- private SAMReadGroupRecord readGroup = null;
-
- private static final int DEFAULT_CHROMOSOME_LENGTH = 100000000;
-
- /**
- * Constructs a new SAMRecordSetBuilder with all the data needed to keep the records
- * sorted in coordinate order.
- */
- public SAMRecordSetBuilder() {
- this(true, SAMFileHeader.SortOrder.coordinate);
- }
-
- /**
- * Construct a new SAMRecordSetBuilder.
- * @para
- * m sortForMe If true, keep the records created in sorted order.
- * @param sortOrder If sortForMe, defines the sort order.
- */
- public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
- this(sortForMe, sortOrder, true) ;
- }
-
- public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup) {
- this(sortForMe, sortOrder, addReadGroup, DEFAULT_CHROMOSOME_LENGTH);
- }
-
- public SAMRecordSetBuilder(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder, final boolean addReadGroup, final int defaultChromosomeLength) {
- final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>();
- for (final String chrom : chroms) {
- final SAMSequenceRecord sequenceRecord = new SAMSequenceRecord(chrom, defaultChromosomeLength);
- sequences.add(sequenceRecord);
- }
-
- this.header = new SAMFileHeader();
- this.header.setSequenceDictionary(new SAMSequenceDictionary(sequences));
- this.header.setSortOrder(sortOrder);
- if (sortForMe) {
- final SAMRecordComparator comparator;
- if (sortOrder == SAMFileHeader.SortOrder.queryname) {
- comparator = new SAMRecordQueryNameComparator();
- } else {
- comparator = new SAMRecordCoordinateComparator();
- }
- this.records = new TreeSet<SAMRecord>(comparator);
- } else {
- this.records = new ArrayList<SAMRecord>();
- }
-
- if (addReadGroup) {
- final SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(READ_GROUP_ID);
- readGroupRecord.setSample(SAMPLE);
- readGroupRecord.setPlatform("ILLUMINA");
- final List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>();
- readGroups.add(readGroupRecord);
- this.header.setReadGroups(readGroups);
- }
- }
-
- /**
- * Set the seed of the random number generator for cases in which repeatable result is desired.
- * @param seed
- */
- public void setRandomSeed(final long seed) {
- random.setSeed(seed);
- }
-
- /**
- * Adds the given program record to the header, and assigns the PG tag to any SAMRecords
- * created after it has been added. May be called multiple times in order to assign different
- * PG IDs to different SAMRecords. programRecord may be null to stop assignment of PG tag.
- * It is up to the caller to ensure that program record IDs do not collide.
- */
- public void setProgramRecord(final SAMProgramRecord programRecord) {
- this.programRecord = programRecord;
- if (programRecord != null) {
- this.header.addProgramRecord(programRecord);
- }
- }
-
- public void setReadGroup(final SAMReadGroupRecord readGroup) {
- this.readGroup = readGroup;
- if (readGroup != null) {
- this.header.addReadGroup(readGroup);
- }
- }
-
- /** Returns the accumulated list of sam records. */
- public Collection<SAMRecord> getRecords() { return this.records; }
-
- /** Returns a CloseableIterator over the collection of SAMRecords. */
- public CloseableIterator<SAMRecord> iterator() {
- return new CloseableIterator<SAMRecord>() {
- private final Iterator<SAMRecord> iterator = records.iterator();
- public void close() { /** Do nothing. */ }
- public boolean hasNext() { return this.iterator.hasNext(); }
- public SAMRecord next() { return this.iterator.next(); }
- public void remove() { this.iterator.remove(); }
- };
- }
-
- /**
- * Adds a fragment record (mapped or unmapped) to the set using the provided contig start and optionally the strand,
- * cigar string, quality string or default quality score. This does not modify the flag field, which should be updated
- * if desired before adding the return to the list of records.
- */
- private SAMRecord createReadNoFlag(final String name, final int contig, final int start, final boolean negativeStrand,
- final boolean recordUnmapped, final String cigar, final String qualityString,
- final int defaultQuality) throws SAMException {
- final SAMRecord rec = new SAMRecord(this.header);
- rec.setReadName(name);
- if (chroms.length <= contig) {
- throw new SAMException("Contig too big [" + chroms.length + " < " + contig);
- }
- if (0 <= contig) {
- rec.setReferenceIndex(contig);
- rec.setReferenceName(chroms[contig]);
- rec.setAlignmentStart(start);
- }
- if (!recordUnmapped) {
- rec.setReadNegativeStrandFlag(negativeStrand);
- if (null != cigar) {
- rec.setCigarString(cigar);
- readLength = rec.getCigar().getReadLength();
- } else if (!rec.getReadUnmappedFlag()) {
- rec.setCigarString(readLength + "M");
- }
- rec.setMappingQuality(255);
- } else {
- rec.setReadUnmappedFlag(true);
- }
- rec.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
-
- if (programRecord != null) {
- rec.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
- }
-
- if (readGroup != null) {
- rec.setAttribute(SAMTag.RG.name(), readGroup.getReadGroupId());
- }
-
- fillInBasesAndQualities(rec, qualityString, defaultQuality);
-
- return rec;
- }
-
- /**
- * Adds a skeletal fragment (non-PE) record to the set using the provided
- * contig start and strand information.
- */
- public void addFrag(final String name, final int contig, final int start, final boolean negativeStrand) {
- addFrag(name, contig, start, negativeStrand, false, null, null, -1);
- }
-
- /**
- * Adds a fragment record (mapped or unmapped) to the set using the provided contig start and optionally the strand,
- * cigar string, quality string or default quality score.
- */
- public SAMRecord addFrag(final String name, final int contig, final int start, final boolean negativeStrand,
- final boolean recordUnmapped, final String cigar, final String qualityString,
- final int defaultQuality) throws SAMException {
- final SAMRecord rec = createReadNoFlag(name, contig, start, negativeStrand, recordUnmapped, cigar, qualityString, defaultQuality);
- this.records.add(rec);
- return rec;
- }
-
- /**
- * Fills in the bases and qualities for the given record. Quality data is randomly generated if the defaultQuality
- * is set to -1. Otherwise all qualities will be set to defaultQuality. If a quality string is provided that string
- * will be used instead of the defaultQuality.
- */
- private void fillInBasesAndQualities(final SAMRecord rec, final String qualityString, final int defaultQuality) {
-
- if (null == qualityString) {
- fillInBasesAndQualities(rec, defaultQuality);
- } else {
- fillInBases(rec);
- rec.setBaseQualityString(qualityString);
- }
- }
-
- /**
- * Randomly fills in the bases for the given record.
- */
- private void fillInBases(final SAMRecord rec){
- final int length = this.readLength;
- final byte[] bases = new byte[length];
-
- for (int i = 0; i < length; ++i) {
- bases[i] = BASES[this.random.nextInt(BASES.length)];
- }
-
- rec.setReadBases(bases);
- }
-
- /**
- * Adds an unmapped fragment read to the builder.
- */
- public void addUnmappedFragment(final String name) {
- addFrag(name, -1, -1, false, true, null, null, -1);
- }
-
-
- /**
- * Adds a skeletal pair of records to the set using the provided
- * contig starts. The pair is assumed to be a well
- * formed pair sitting on a single contig.
- */
- public void addPair(final String name, final int contig, final int start1, final int start2) {
- final SAMRecord end1 = new SAMRecord(this.header);
- final SAMRecord end2 = new SAMRecord(this.header);
- final boolean end1IsFirstOfPair = this.random.nextBoolean();
-
- end1.setReadName(name);
- end1.setReferenceIndex(contig);
- end1.setAlignmentStart(start1);
- end1.setReadNegativeStrandFlag(false);
- end1.setCigarString(readLength + "M");
- end1.setMappingQuality(255);
- end1.setReadPairedFlag(true);
- end1.setProperPairFlag(true);
- end1.setMateReferenceIndex(contig);
- end1.setAttribute(SAMTag.MC.name(), readLength + "M");
- end1.setMateAlignmentStart(start2);
- end1.setMateNegativeStrandFlag(true);
- end1.setFirstOfPairFlag(end1IsFirstOfPair);
- end1.setSecondOfPairFlag(!end1IsFirstOfPair);
- end1.setInferredInsertSize((int) CoordMath.getLength(start1, CoordMath.getEnd(start2, this.readLength)));
- end1.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
- if (programRecord != null) {
- end1.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
- }
- if (readGroup != null) {
- end1.setAttribute(SAMTag.RG.name(), readGroup.getReadGroupId());
- }
- fillInBasesAndQualities(end1);
-
- end2.setReadName(name);
- end2.setReferenceIndex(contig);
- end2.setAlignmentStart(start2);
- end2.setReadNegativeStrandFlag(true);
- end2.setCigarString(readLength + "M");
- end2.setMappingQuality(255);
- end2.setReadPairedFlag(true);
- end2.setProperPairFlag(true);
- end2.setMateReferenceIndex(contig);
- end2.setAttribute(SAMTag.MC.name(), readLength + "M");
- end2.setMateAlignmentStart(start1);
- end2.setMateNegativeStrandFlag(false);
- end2.setFirstOfPairFlag(!end1IsFirstOfPair);
- end2.setSecondOfPairFlag(end1IsFirstOfPair);
- end2.setInferredInsertSize(end1.getInferredInsertSize());
- end2.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
- if (programRecord != null) {
- end2.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
- }
- if (readGroup != null) {
- end2.setAttribute(SAMTag.RG.name(), readGroup.getReadGroupId());
- }
- fillInBasesAndQualities(end2);
-
- this.records.add(end1);
- this.records.add(end2);
- }
-
- /**
- * Adds a pair of records (mapped or unmmapped) to the set using the provided contig starts.
- * The pair is assumed to be a well formed pair sitting on a single contig.
- */
- public List<SAMRecord> addPair(final String name, final int contig, final int start1, final int start2,
- final boolean record1Unmapped, final boolean record2Unmapped, final String cigar1,
- final String cigar2, final boolean strand1, final boolean strand2, final int defaultQuality) {
- final List<SAMRecord> recordsList = new LinkedList<SAMRecord>();
-
- final SAMRecord end1 = createReadNoFlag(name, contig, start1, strand1, record1Unmapped, cigar1, null, defaultQuality);
- final SAMRecord end2 = createReadNoFlag(name, contig, start2, strand2, record2Unmapped, cigar2, null, defaultQuality);
-
- end1.setReadPairedFlag(true);
- end1.setFirstOfPairFlag(true);
-
- if (!record1Unmapped && !record2Unmapped) {
- end1.setProperPairFlag(true);
- end2.setProperPairFlag(true);
- }
- end2.setReadPairedFlag(true);
- end2.setSecondOfPairFlag(true);
-
- // set mate info
- SamPairUtil.setMateInfo(end1, end2, header, true);
-
- recordsList.add(end1);
- recordsList.add(end2);
-
- records.add(end1);
- records.add(end2);
-
- return recordsList;
- }
-
- /**
- * Adds a pair with both ends unmapped to the builder.
- */
- public void addUnmappedPair(final String name) {
- final SAMRecord end1 = new SAMRecord(this.header);
- final SAMRecord end2 = new SAMRecord(this.header);
- final boolean end1IsFirstOfPair = this.random.nextBoolean();
-
- end1.setReadName(name);
- end1.setReadPairedFlag(false);
- end1.setReadUnmappedFlag(true);
- end1.setAttribute(SAMTag.MC.name(), null);
- end1.setProperPairFlag(false);
- end1.setFirstOfPairFlag(end1IsFirstOfPair);
- end1.setSecondOfPairFlag(!end1IsFirstOfPair);
- end1.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
- if (programRecord != null) {
- end1.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
- }
- fillInBasesAndQualities(end1);
-
- end2.setReadName(name);
- end2.setReadPairedFlag(false);
- end2.setReadUnmappedFlag(true);
- end2.setAttribute(SAMTag.MC.name(), null);
- end2.setProperPairFlag(false);
- end2.setFirstOfPairFlag(!end1IsFirstOfPair);
- end2.setSecondOfPairFlag(end1IsFirstOfPair);
- end2.setAttribute(SAMTag.RG.name(), READ_GROUP_ID);
- if (programRecord != null) {
- end2.setAttribute(SAMTag.PG.name(), programRecord.getProgramGroupId());
- }
- fillInBasesAndQualities(end2);
-
- this.records.add(end1);
- this.records.add(end2);
- }
-
- /**
- * Fills in bases and qualities with randomly generated data.
- * Relies on the alignment start and end having been set to get read length.
- */
- private void fillInBasesAndQualities(final SAMRecord rec) {
- fillInBasesAndQualities(rec, -1);
- }
-
- /**
- * Fills in bases and qualities with a set default quality. If the defaultQuality is set to -1 quality scores will
- * be randomly generated.
- * Relies on the alignment start and end having been set to get read length.
- */
- private void fillInBasesAndQualities(final SAMRecord rec, final int defaultQuality) {
- final int length = this.readLength;
- final byte[] quals = new byte[length];
-
- if (-1 != defaultQuality) {
- Arrays.fill(quals, (byte) defaultQuality);
- } else {
- for (int i = 0; i < length; ++i) {
- quals[i] = (byte) this.random.nextInt(50);
- }
- }
- rec.setBaseQualities(quals);
- fillInBases(rec);
- }
-
- /**
- * Creates samFileReader from the data in instance of this class
- * @return SAMFileReader
- */
- public SAMFileReader getSamReader() {
-
- final File tempFile;
-
- try {
- tempFile = File.createTempFile("temp", ".sam");
- } catch (final IOException e) {
- throw new RuntimeIOException("problems creating tempfile", e);
- }
-
-
-
- this.header.setAttribute("VN", "1.0");
- final SAMFileWriter w = new SAMFileWriterFactory().makeBAMWriter(this.header, true, tempFile);
- for (final SAMRecord r:this.getRecords()){
- w.addAlignment(r);
- }
-
-
- w.close();
-
- final SAMFileReader reader = new SAMFileReader(tempFile);
- tempFile.deleteOnExit();
-
- return reader;
- }
-
- public SAMFileHeader getHeader() {
- return header;
- }
- public void setReadLength(final int readLength) { this.readLength = readLength; }
-
-}
diff --git a/src/java/net/sf/samtools/SAMRecordUtil.java b/src/java/net/sf/samtools/SAMRecordUtil.java
deleted file mode 100644
index 69b5972..0000000
--- a/src/java/net/sf/samtools/SAMRecordUtil.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.StringUtil;
-import net.sf.samtools.util.SequenceUtil;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SAMRecordUtil {
-
- /** List of String tags that must be reversed if present when a SAMRecord is reverseComplemented */
- private static final short[] STRING_TAGS_TO_REVERSE = {
- SAMTagUtil.getSingleton().U2,
- SAMTagUtil.getSingleton().OQ
- };
-
- /**
- * Reverse-complement all known sequence and base quality attributes of the SAMRecord.
- */
- public static void reverseComplement(final SAMRecord rec) {
- final byte[] readBases = rec.getReadBases();
- SequenceUtil.reverseComplement(readBases);
- rec.setReadBases(readBases);
- final byte qualities[] = rec.getBaseQualities();
- reverseArray(qualities);
- rec.setBaseQualities(qualities);
- final byte[] sqTagValue = (byte[])rec.getAttribute(SAMTagUtil.getSingleton().SQ);
- if (sqTagValue != null) {
- SQTagUtil.reverseComplementSqArray(sqTagValue);
- rec.setAttribute(SAMTagUtil.getSingleton().SQ, sqTagValue);
- }
- final String e2TagValue = (String)rec.getAttribute(SAMTagUtil.getSingleton().E2);
- if (e2TagValue != null) {
- final byte[] secondaryBases = StringUtil.stringToBytes(e2TagValue);
- SequenceUtil.reverseComplement(secondaryBases);
- rec.setAttribute(SAMTagUtil.getSingleton().E2, StringUtil.bytesToString(secondaryBases));
- }
- for (final short stringTag : STRING_TAGS_TO_REVERSE) {
- final String value = (String)rec.getAttribute(stringTag);
- if (value != null) {
- rec.setAttribute(stringTag, StringUtil.reverseString(value));
- }
- }
- }
-
- /**
- * Reverse the given array in place.
- */
- public static void reverseArray(final byte[] array) {
- final int lastIndex = array.length - 1;
- int i, j;
- for (i=0, j=lastIndex; i<j; ++i, --j) {
- final byte tmp = array[i];
- array[i] = array[j];
- array[j] = tmp;
- }
- }
-}
diff --git a/src/java/net/sf/samtools/SAMSequenceDictionary.java b/src/java/net/sf/samtools/SAMSequenceDictionary.java
deleted file mode 100644
index 49f3f61..0000000
--- a/src/java/net/sf/samtools/SAMSequenceDictionary.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import java.util.*;
-
-/**
- * Collection of SAMSequenceRecords.
- */
-public class SAMSequenceDictionary {
- private List<SAMSequenceRecord> mSequences = new ArrayList<SAMSequenceRecord>();
- private final Map<String, SAMSequenceRecord> mSequenceMap = new HashMap<String, SAMSequenceRecord>();
-
- public SAMSequenceDictionary() {
- }
-
- public SAMSequenceDictionary(final List<SAMSequenceRecord> list) {
- this();
- setSequences(list);
- }
-
- public List<SAMSequenceRecord> getSequences() {
- return Collections.unmodifiableList(mSequences);
- }
-
- public SAMSequenceRecord getSequence(final String name) {
- return mSequenceMap.get(name);
- }
-
- /**
- * Replaces the existing list of SAMSequenceRecords with the given list.
- *
- * @param list This value is used directly, rather than being copied.
- */
- public void setSequences(final List<SAMSequenceRecord> list) {
- mSequences = list;
- mSequenceMap.clear();
- int index = 0;
- for (final SAMSequenceRecord record : list) {
- record.setSequenceIndex(index++);
- if (mSequenceMap.put(record.getSequenceName(), record) != null) {
- throw new IllegalArgumentException("Cannot add sequence that already exists in SAMSequenceDictionary: " +
- record.getSequenceName());
- }
- }
- }
-
- public void addSequence(final SAMSequenceRecord sequenceRecord) {
- if (mSequenceMap.containsKey(sequenceRecord.getSequenceName())) {
- throw new IllegalArgumentException("Cannot add sequence that already exists in SAMSequenceDictionary: " +
- sequenceRecord.getSequenceName());
- }
- sequenceRecord.setSequenceIndex(mSequences.size());
- mSequences.add(sequenceRecord);
- mSequenceMap.put(sequenceRecord.getSequenceName(), sequenceRecord);
- }
-
- /**
- * @return The SAMSequenceRecord with the given index, or null if index is out of range.
- */
- public SAMSequenceRecord getSequence(final int sequenceIndex) {
- if (sequenceIndex < 0 || sequenceIndex >= mSequences.size()) {
- return null;
- }
- return mSequences.get(sequenceIndex);
- }
-
- /**
- * @return The index for the given sequence name, or -1 if the name is not found.
- */
- public int getSequenceIndex(final String sequenceName) {
- final SAMSequenceRecord record = mSequenceMap.get(sequenceName);
- if (record == null) {
- return -1;
- }
- return record.getSequenceIndex();
- }
-
- public int size() {
- return mSequences.size();
- }
-
- /**
- * @return The sum of the lengths of the sequences in this dictionary
- */
- public long getReferenceLength() {
- long len = 0L;
- for (final SAMSequenceRecord seq : getSequences()) {
- len += seq.getSequenceLength();
- }
- return len;
- }
-
- public boolean isEmpty() {
- return mSequences.isEmpty();
- }
-
- private static String DICT_MISMATCH_TEMPLATE = "SAM dictionaries are not the same: %s.";
- /**
- * Non-comprehensive {@link #equals(Object)}-assertion: instead of calling {@link SAMSequenceRecord#equals(Object)} on constituent
- * {@link SAMSequenceRecord}s in this dictionary against its pair in the target dictionary, in order, call
- * {@link SAMSequenceRecord#isSameSequence(SAMSequenceRecord)}.
- *
- * @throws AssertionError When the dictionaries are not the same, with some human-readable information as to why
- */
- public void assertSameDictionary(final SAMSequenceDictionary that) {
- if (this == that) return;
-
- final Iterator<SAMSequenceRecord> thatSequences = that.mSequences.iterator();
- for (final SAMSequenceRecord thisSequence : mSequences) {
- if (!thatSequences.hasNext())
- throw new AssertionError(String.format(DICT_MISMATCH_TEMPLATE, thisSequence + " is present in only one dictionary"));
- else {
- final SAMSequenceRecord thatSequence = thatSequences.next();
- if(!thatSequence.isSameSequence(thisSequence))
- throw new AssertionError(
- String.format(DICT_MISMATCH_TEMPLATE, thatSequence + " was found when " + thisSequence + " was expected")
- );
- }
- }
- if (thatSequences.hasNext())
- throw new AssertionError(String.format(DICT_MISMATCH_TEMPLATE, thatSequences.next() + " is present in only one dictionary"));
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- SAMSequenceDictionary that = (SAMSequenceDictionary) o;
-
- if (!mSequences.equals(that.mSequences)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- return mSequences.hashCode();
- }
-}
\ No newline at end of file
diff --git a/src/java/net/sf/samtools/SAMSequenceRecord.java b/src/java/net/sf/samtools/SAMSequenceRecord.java
deleted file mode 100644
index f49fd31..0000000
--- a/src/java/net/sf/samtools/SAMSequenceRecord.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import java.util.*;
-import java.math.BigInteger;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.regex.Pattern;
-
-/**
- * Header information about a reference sequence. Corresponds to @SQ header record in SAM text header.
- */
-public class SAMSequenceRecord extends AbstractSAMHeaderRecord implements Cloneable
-{
- private String mSequenceName = null; // Value must be interned() if it's ever set/modified
- private int mSequenceIndex = -1;
- private int mSequenceLength = 0;
- public static final String SEQUENCE_NAME_TAG = "SN";
- public static final String SEQUENCE_LENGTH_TAG = "LN";
- public static final String MD5_TAG = "M5";
- public static final String ASSEMBLY_TAG = "AS";
- public static final String URI_TAG = "UR";
- public static final String SPECIES_TAG = "SP";
-
- /** If one sequence has this length, and another sequence had a different length, isSameSequence will
- * not complain that they are different sequences. */
- public static final int UNKNOWN_SEQUENCE_LENGTH = 0;
-
-
- /**
- * This is not a valid sequence name, because it is reserved in the MRNM field of SAM text format
- * to mean "same reference as RNAME field."
- */
- public static final String RESERVED_MRNM_SEQUENCE_NAME = "=";
-
- /**
- * The standard tags are stored in text header without type information, because the type of these tags is known.
- */
- public static final Set<String> STANDARD_TAGS =
- new HashSet<String>(Arrays.asList(SEQUENCE_NAME_TAG, SEQUENCE_LENGTH_TAG, ASSEMBLY_TAG, MD5_TAG, URI_TAG,
- SPECIES_TAG));
-
- // Split on any whitespace
- private static Pattern SEQUENCE_NAME_SPLITTER = Pattern.compile("\\s");
- // These are the chars matched by \\s.
- private static char[] WHITESPACE_CHARS = {' ', '\t', '\n', '\013', '\f', '\r'}; // \013 is vertical tab
-
- /**
- * @deprecated Use SAMSequenceRecord(final String name, final int sequenceLength) instead.
- * sequenceLength is required for the object to be considered valid.
- */
- public SAMSequenceRecord(final String name) {
- this(name, UNKNOWN_SEQUENCE_LENGTH);
- }
-
- public SAMSequenceRecord(final String name, final int sequenceLength) {
- if (name != null) {
- if (SEQUENCE_NAME_SPLITTER.matcher(name).find()) {
- throw new SAMException("Sequence name contains invalid character: " + name);
- }
- validateSequenceName(name);
- mSequenceName = name.intern();
- }
- mSequenceLength = sequenceLength;
- }
-
- public String getSequenceName() { return mSequenceName; }
- // We don't think this method should ever really be used, but we left it here
- // in case we forget and go to implement it later!
- private void setSequenceName(final String name) {
- if (name != null) {
- mSequenceName = name.intern();
- }
- else {
- mSequenceName = null;
- }
- }
-
- public int getSequenceLength() { return mSequenceLength; }
- public void setSequenceLength(final int value) { mSequenceLength = value; }
-
- public String getAssembly() { return (String) getAttribute("AS"); }
- public void setAssembly(final String value) { setAttribute("AS", value); }
-
- public String getSpecies() { return (String) getAttribute("SP"); }
- public void setSpecies(final String value) { setAttribute("SP", value); }
-
-
- /**
- * @return Index of this record in the sequence dictionary it lives in.
- */
- public int getSequenceIndex() { return mSequenceIndex; }
-
- // Private state used only by SAM implementation.
- public void setSequenceIndex(final int value) { mSequenceIndex = value; }
-
- /**
- * Looser comparison than equals(). We look only at sequence index, sequence length, and MD5 tag value
- * (or sequence names, if there is no MD5 tag in either record.
- */
- public boolean isSameSequence(final SAMSequenceRecord that) {
- if (this == that) return true;
- if (that == null) return false;
-
- if (mSequenceIndex != that.mSequenceIndex) return false;
- // PIC-439. Allow undefined length.
- if (mSequenceLength != UNKNOWN_SEQUENCE_LENGTH && that.mSequenceLength != UNKNOWN_SEQUENCE_LENGTH && mSequenceLength != that.mSequenceLength)
- return false;
- if (this.getAttribute(SAMSequenceRecord.MD5_TAG) != null && that.getAttribute(SAMSequenceRecord.MD5_TAG) != null) {
- final BigInteger thisMd5 = new BigInteger((String)this.getAttribute(SAMSequenceRecord.MD5_TAG), 16);
- final BigInteger thatMd5 = new BigInteger((String)that.getAttribute(SAMSequenceRecord.MD5_TAG), 16);
- if (!thisMd5.equals(thatMd5)) {
- return false;
- }
- }
- else {
- if (mSequenceName != that.mSequenceName) return false; // Compare using == since we intern() the Strings
- }
-
- return true;
- }
-
- private URI makeURI(final String s) throws URISyntaxException {
- URI uri = new URI(s);
- if (uri.getScheme() == null) {
- uri = new URI("file", uri.getUserInfo(), uri.getHost(), uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment());
- }
- return uri;
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (!(o instanceof SAMSequenceRecord)) return false;
-
- final SAMSequenceRecord that = (SAMSequenceRecord) o;
-
- if (mSequenceIndex != that.mSequenceIndex) return false;
- if (mSequenceLength != that.mSequenceLength) return false;
- if (!attributesEqual(that)) return false;
- if (mSequenceName != that.mSequenceName) return false; // Compare using == since we intern() the name
-
- return true;
- }
-
- @Override
- public int hashCode() {
- return mSequenceName != null ? mSequenceName.hashCode() : 0;
- }
-
- Set<String> getStandardTags() {
- return STANDARD_TAGS;
- }
-
- public final SAMSequenceRecord clone() {
- final SAMSequenceRecord ret = new SAMSequenceRecord(this.mSequenceName, this.mSequenceLength);
- ret.mSequenceIndex = this.mSequenceIndex;
- for (final Map.Entry<String, String> entry : this.getAttributes()) {
- ret.setAttribute(entry.getKey(), entry.getValue());
- }
- return ret;
- }
-
- /**
- * Truncate sequence name at first whitespace.
- */
- public static String truncateSequenceName(final String sequenceName) {
- /*
- * Instead of using regex split, do it manually for better performance.
- return SEQUENCE_NAME_SPLITTER.split(sequenceName, 2)[0];
- */
- int truncateAt = sequenceName.length();
- for (final char c : WHITESPACE_CHARS) {
- int index = sequenceName.indexOf(c);
- if (index != -1 && index < truncateAt) {
- truncateAt = index;
- }
- }
- return sequenceName.substring(0, truncateAt);
- }
-
- /**
- * Throw an exception if the sequence name is not valid.
- */
- public static void validateSequenceName(final String name) {
- if (RESERVED_MRNM_SEQUENCE_NAME.equals(name)) {
- throw new SAMException("'" + RESERVED_MRNM_SEQUENCE_NAME + "' is not a valid sequence name");
- }
- }
-
- @Override
- public String toString() {
- return String.format(
- "SAMSequenceRecord(name=%s,length=%s,dict_index=%s,assembly=%s)",
- getSequenceName(),
- getSequenceLength(),
- getSequenceIndex(),
- getAssembly()
- );
- }
-}
-
diff --git a/src/java/net/sf/samtools/SAMSortOrderChecker.java b/src/java/net/sf/samtools/SAMSortOrderChecker.java
deleted file mode 100644
index 403e48f..0000000
--- a/src/java/net/sf/samtools/SAMSortOrderChecker.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Encapsulates simple check for SAMRecord order.
- * @author alecw at broadinstitute.org
- */
-public class SAMSortOrderChecker {
- private final SAMFileHeader.SortOrder sortOrder;
- private SAMRecord prev;
- private final SAMRecordComparator comparator;
-
- public SAMSortOrderChecker(final SAMFileHeader.SortOrder sortOrder) {
- this.sortOrder = sortOrder;
- switch (sortOrder) {
- case coordinate:
- comparator = new SAMRecordCoordinateComparator();
- break;
- case queryname:
- comparator = new SAMRecordQueryNameComparator();
- break;
- case unsorted:
- default:
- comparator = null;
- break;
- }
- }
-
- /**
- * Check if given SAMRecord violates sort order relative to previous SAMRecord.
- * @return True if sort order is unsorted, if this is the first record, or if previous <= rec.
- */
- public boolean isSorted(final SAMRecord rec) {
- if (comparator == null) {
- return true;
- }
- boolean ret = true;
- if (prev != null) {
- ret = comparator.fileOrderCompare(prev, rec) <= 0;
- }
- prev = rec;
- return ret;
- }
-
- public SAMRecord getPreviousRecord() {
- return prev;
- }
-
- /**
- * Return the sort key used for the given sort order. Useful in error messages.
- */
- public String getSortKey(final SAMRecord rec) {
- switch (sortOrder) {
-
- case coordinate:
- return rec.getReferenceName() + ":" + rec.getAlignmentStart();
- case queryname:
- return rec.getReadName();
- case unsorted:
- default:
- return null;
- }
- }
-}
diff --git a/src/java/net/sf/samtools/SAMTag.java b/src/java/net/sf/samtools/SAMTag.java
deleted file mode 100644
index d5eeef5..0000000
--- a/src/java/net/sf/samtools/SAMTag.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * The standard tags for a SAM record that are defined in the SAM spec.
- */
-public enum SAMTag {
- RG, LB, PU, PG, AS, SQ, MQ, NM, H0, H1, H2, UQ, PQ, NH, IH, HI, MD, CS, CQ, CM, R2, Q2, S2, CC, CP, SM, AM, MF,
- E2, U2, OQ, FZ, SA, MC, BC
-}
diff --git a/src/java/net/sf/samtools/SAMTagUtil.java b/src/java/net/sf/samtools/SAMTagUtil.java
deleted file mode 100644
index ba108fc..0000000
--- a/src/java/net/sf/samtools/SAMTagUtil.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.StringUtil;
-
-/**
- * Facility for converting between String and short representation of a SAM tag. short representation
- * is used by SAM JDK internally and is much more efficient. Callers are encouraged to obtain the short
- * value for a tag of interest once, and then use the SAMRecord attribute API that takes shorts rather than
- * Strings.
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMTagUtil {
-
- // Standard tags pre-computed for convenience
- public final short RG = makeBinaryTag(SAMTag.RG.name());
- public final short LB = makeBinaryTag(SAMTag.LB.name());
- public final short PU = makeBinaryTag(SAMTag.PU.name());
- public final short PG = makeBinaryTag(SAMTag.PG.name());
- public final short AS = makeBinaryTag(SAMTag.AS.name());
- public final short SQ = makeBinaryTag(SAMTag.SQ.name());
- public final short MQ = makeBinaryTag(SAMTag.MQ.name());
- public final short NM = makeBinaryTag(SAMTag.NM.name());
- public final short H0 = makeBinaryTag(SAMTag.H0.name());
- public final short H1 = makeBinaryTag(SAMTag.H1.name());
- public final short H2 = makeBinaryTag(SAMTag.H2.name());
- public final short UQ = makeBinaryTag(SAMTag.UQ.name());
- public final short PQ = makeBinaryTag(SAMTag.PQ.name());
- public final short NH = makeBinaryTag(SAMTag.NH.name());
- public final short IH = makeBinaryTag(SAMTag.IH.name());
- public final short HI = makeBinaryTag(SAMTag.HI.name());
- public final short MD = makeBinaryTag(SAMTag.MD.name());
- public final short CS = makeBinaryTag(SAMTag.CS.name());
- public final short CQ = makeBinaryTag(SAMTag.CQ.name());
- public final short CM = makeBinaryTag(SAMTag.CM.name());
- public final short R2 = makeBinaryTag(SAMTag.R2.name());
- public final short Q2 = makeBinaryTag(SAMTag.Q2.name());
- public final short S2 = makeBinaryTag(SAMTag.S2.name());
- public final short CC = makeBinaryTag(SAMTag.CC.name());
- public final short CP = makeBinaryTag(SAMTag.CP.name());
- public final short SM = makeBinaryTag(SAMTag.SM.name());
- public final short AM = makeBinaryTag(SAMTag.AM.name());
- public final short MF = makeBinaryTag(SAMTag.MF.name());
- public final short E2 = makeBinaryTag(SAMTag.E2.name());
- public final short U2 = makeBinaryTag(SAMTag.U2.name());
- public final short OQ = makeBinaryTag(SAMTag.OQ.name());
- public final short FZ = makeBinaryTag(SAMTag.FZ.name());
- public final short SA = makeBinaryTag(SAMTag.SA.name());
- public final short MC = makeBinaryTag(SAMTag.MC.name());
-
- private static SAMTagUtil singleton;
-
- // Cache of already-converted tags. Should speed up SAM text generation.
- // Not synchronized because race condition is not a problem.
- private final String[] stringTags = new String[Short.MAX_VALUE];
-
- /**
- * Despite the fact that this class has state, it should be thread-safe because the cache
- * gets filled with the same values by any thread.
- */
- public static SAMTagUtil getSingleton() {
- if (singleton == null) {
- singleton = new SAMTagUtil();
- }
- return singleton;
- }
-
-
- /**
- * Convert from String representation of tag name to short representation.
- *
- * @param tag 2-character String representation of a tag name.
- * @return Tag name packed as 2 ASCII bytes in a short.
- */
- public short makeBinaryTag(final String tag) {
- if (tag.length() != 2) {
- throw new IllegalArgumentException("String tag does not have length() == 2: " + tag);
- }
- return (short)(tag.charAt(1) << 8 | tag.charAt(0));
- }
-
- /**
- * Convert from short representation of tag name to String representation.
- *
- * @param tag Tag name packed as 2 ASCII bytes in a short.
- * @return 2-character String representation of a tag name.
- */
- public String makeStringTag(final short tag) {
- String ret = stringTags[tag];
- if (ret == null) {
- final byte[] stringConversionBuf = new byte[2];
- stringConversionBuf[0] = (byte)(tag & 0xff);
- stringConversionBuf[1] = (byte)((tag >> 8) & 0xff);
- ret = StringUtil.bytesToString(stringConversionBuf);
- stringTags[tag] = ret;
- }
- return ret;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMTestUtil.java b/src/java/net/sf/samtools/SAMTestUtil.java
deleted file mode 100644
index 752dccf..0000000
--- a/src/java/net/sf/samtools/SAMTestUtil.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-
-/**
- * Misc methods for SAM-related unit tests. These are in the src tree rather than the tests tree
- * so that they will be included in sam.jar, and therefore can be used by tests outside of net.sf.samtools.
- * These methods use org.testng.Assert methods.
- */
-public class SAMTestUtil {
- /**
- * Basic sanity check for a pair of SAMRecords.
- */
- public void assertPairValid(final SAMRecord firstEnd, final SAMRecord secondEnd) {
- Assert.assertEquals(firstEnd.getReadName(), secondEnd.getReadName());
- Assert.assertTrue(firstEnd.getFirstOfPairFlag());
- Assert.assertTrue(secondEnd.getSecondOfPairFlag());
- Assert.assertFalse(secondEnd.getFirstOfPairFlag());
- Assert.assertFalse(firstEnd.getSecondOfPairFlag());
- if (!firstEnd.getReadUnmappedFlag() && !secondEnd.getReadUnmappedFlag()) {
- Assert.assertNotSame(firstEnd.getReadNegativeStrandFlag(),
- secondEnd.getReadNegativeStrandFlag());
- }
- }
-
- /**
- * Basic sanity check for a SAMRecord.
- */
- public void assertReadValid(final SAMRecord read) {
- Assert.assertEquals(read.getReadBases().length, read.getBaseQualities().length);
- // Note that it is possible to have an unmapped read that has a coordinate
- if (read.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
- Assert.assertEquals(read.getAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
- Assert.assertTrue(read.getReadUnmappedFlag());
- } else {
- Assert.assertNotSame(read.getAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
- }
- if (read.getReadUnmappedFlag()) {
- Assert.assertEquals(read.getMappingQuality(), SAMRecord.NO_MAPPING_QUALITY);
- Assert.assertEquals(read.getCigar().getCigarElements().size(), 0);
- } else {
- Assert.assertNotSame(read.getCigar().getCigarElements(), 0);
- }
- if (read.getReadPairedFlag()) {
- if (read.getMateReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
- Assert.assertEquals(read.getMateAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
- Assert.assertTrue(read.getMateUnmappedFlag());
- } else {
- // Even if the mate is unmapped, if it has a reference name, it should have a position.
- Assert.assertNotSame(read.getMateAlignmentStart(), SAMRecord.NO_ALIGNMENT_START);
- }
- if (read.getReadUnmappedFlag() || read.getMateUnmappedFlag() ||
- !read.getReferenceName().equals(read.getMateReferenceName())) {
- Assert.assertEquals(read.getInferredInsertSize(), 0);
- } else {
- Assert.assertNotSame(read.getInferredInsertSize(), 0);
- }
- if (!read.getReadUnmappedFlag() && !read.getMateUnmappedFlag()) {
- Assert.assertNotSame(read.getReadNegativeStrandFlag(), read.getMateNegativeStrandFlag(),
- read.getReadName());
- }
-
- } else {
- Assert.assertEquals(read.getInferredInsertSize(), 0);
- }
- }
-}
diff --git a/src/java/net/sf/samtools/SAMTextHeaderCodec.java b/src/java/net/sf/samtools/SAMTextHeaderCodec.java
deleted file mode 100644
index f7f4bab..0000000
--- a/src/java/net/sf/samtools/SAMTextHeaderCodec.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.DateParser;
-import net.sf.samtools.util.LineReader;
-import net.sf.samtools.util.RuntimeIOException;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.*;
-import java.util.regex.Pattern;
-
-/**
- * Parser for a SAM text header, and a generator of SAM text header.
- */
-public class SAMTextHeaderCodec {
- private static final String HEADER_LINE_START = "@";
-
- // These attributes are populated when parsing or generating
- private SAMFileHeader mFileHeader;
- private final TextTagCodec mTagCodec = new TextTagCodec();
-
- // These attributes are populated when parsing text
- private String mCurrentLine;
- private LineReader mReader;
- private String mSource;
- private List<SAMSequenceRecord> sequences;
- private List<SAMReadGroupRecord> readGroups;
- // Accumulate header while reading it from input.
- private final StringBuilder textHeader = new StringBuilder();
-
- // For error reporting when parsing
- private SAMFileReader.ValidationStringency validationStringency = SAMFileReader.ValidationStringency.SILENT;
-
- // These attributes are populated when generating text
- private BufferedWriter writer;
-
- private static final String TAG_KEY_VALUE_SEPARATOR = ":";
- private static final char TAG_KEY_VALUE_SEPARATOR_CHAR = ':';
- private static final String FIELD_SEPARATOR = "\t";
- private static final char FIELD_SEPARATOR_CHAR = '\t';
- private static final Pattern FIELD_SEPARATOR_RE = Pattern.compile(FIELD_SEPARATOR);
-
- public static final String COMMENT_PREFIX = HEADER_LINE_START + HeaderRecordType.CO.name() + FIELD_SEPARATOR;
-
- /**
- * Reads text SAM header and converts to a SAMFileHeader object.
- * @param reader Where to get header text from.
- * @param source Name of the input file, for error messages. May be null.
- * @return complete header object.
- */
- public SAMFileHeader decode(final LineReader reader, final String source) {
- mFileHeader = new SAMFileHeader();
- mReader = reader;
- mSource = source;
- sequences = new ArrayList<SAMSequenceRecord>();
- readGroups = new ArrayList<SAMReadGroupRecord>();
-
- while (advanceLine() != null) {
- final ParsedHeaderLine parsedHeaderLine = new ParsedHeaderLine(mCurrentLine);
- if (!parsedHeaderLine.isLineValid()) {
- continue;
- }
- switch (parsedHeaderLine.getHeaderRecordType()) {
-
- case HD:
- parseHDLine(parsedHeaderLine);
- break;
- case PG:
- parsePGLine(parsedHeaderLine);
- break;
- case RG:
- parseRGLine(parsedHeaderLine);
- break;
- case SQ:
- parseSQLine(parsedHeaderLine);
- break;
- case CO:
- mFileHeader.addComment(mCurrentLine);
- break;
- default:
- throw new IllegalStateException("Unrecognized header record type: " +
- parsedHeaderLine.getHeaderRecordType());
- }
- }
- mFileHeader.setSequenceDictionary(new SAMSequenceDictionary(sequences));
- mFileHeader.setReadGroups(readGroups);
-
- // Only store the header text if there was a parsing error or the it's less than 1MB on disk / 2MB in mem
- if (!mFileHeader.getValidationErrors().isEmpty() || textHeader.length() < (1024 * 1024)) {
- mFileHeader.setTextHeader(textHeader.toString());
- }
-
- SAMUtils.processValidationErrors(mFileHeader.getValidationErrors(), -1, validationStringency);
- return mFileHeader;
- }
-
- private String advanceLine() {
- final int nextChar = mReader.peek();
- if (nextChar != '@') {
- return null;
- }
- mCurrentLine = mReader.readLine();
- textHeader.append(mCurrentLine).append("\n");
- return mCurrentLine;
- }
-
- /**
- * Transfer standard and non-standard tags from text representation to in-memory representation.
- * All values are now stored as Strings.
- * @param record attributes get set into this object.
- * @param textAttributes Map of tag type to value. Some values may be removed by this method.
- */
- private void transferAttributes(final AbstractSAMHeaderRecord record, final Map<String, String> textAttributes) {
- // All header tags are now of type String, so no need to distinguish standard from non-standard.
- for (final Map.Entry<String, String> entry : textAttributes.entrySet()) {
- record.setAttribute(entry.getKey(), entry.getValue());
- }
-
- }
-
- private void parsePGLine(final ParsedHeaderLine parsedHeaderLine) {
- assert(HeaderRecordType.PG.equals(parsedHeaderLine.getHeaderRecordType()));
- if (!parsedHeaderLine.requireTag(SAMProgramRecord.PROGRAM_GROUP_ID_TAG)) {
- return;
- }
- final SAMProgramRecord programRecord = new SAMProgramRecord(parsedHeaderLine.removeValue(SAMProgramRecord.PROGRAM_GROUP_ID_TAG));
-
- transferAttributes(programRecord, parsedHeaderLine.mKeyValuePairs);
- mFileHeader.addProgramRecord(programRecord);
- }
-
- private void parseRGLine(final ParsedHeaderLine parsedHeaderLine) {
- assert(HeaderRecordType.RG.equals(parsedHeaderLine.getHeaderRecordType()));
- if (!parsedHeaderLine.requireTag(SAMReadGroupRecord.READ_GROUP_ID_TAG)) {
- return;
- }
- // Allow no SM tag if validation stringency is not strict. This call has the side effect of reporting an error
- // or throwing an exception depending on validation stringency if this is missing.
- parsedHeaderLine.requireTag(SAMReadGroupRecord.READ_GROUP_SAMPLE_TAG);
- final SAMReadGroupRecord samReadGroupRecord = new SAMReadGroupRecord(parsedHeaderLine.removeValue(SAMReadGroupRecord.READ_GROUP_ID_TAG));
- transferAttributes(samReadGroupRecord, parsedHeaderLine.mKeyValuePairs);
-
- // Convert non-String attributes to the appropriate types
- final String predictedMedianInsertSize =
- (String)samReadGroupRecord.getAttribute(SAMReadGroupRecord.PREDICTED_MEDIAN_INSERT_SIZE_TAG);
- if (predictedMedianInsertSize != null) {
- try {
- Integer.parseInt(predictedMedianInsertSize);
- samReadGroupRecord.setAttribute(SAMReadGroupRecord.PREDICTED_MEDIAN_INSERT_SIZE_TAG,predictedMedianInsertSize);
- } catch (NumberFormatException e) {
- reportErrorParsingLine(SAMReadGroupRecord.PREDICTED_MEDIAN_INSERT_SIZE_TAG +
- " is not numeric: " + predictedMedianInsertSize, SAMValidationError.Type.INVALID_PREDICTED_MEDIAN_INSERT_SIZE,
- e);
- }
- }
-
- final String dateRunProduced = (String)samReadGroupRecord.getAttribute(SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG);
- if (dateRunProduced != null) {
- Object date;
- try {
- date = mTagCodec.decodeDate(dateRunProduced);
- } catch (DateParser.InvalidDateException e) {
- // Can't convert date string into Date object. Treat it as a string if validation
- // stringency allows it.
- date = dateRunProduced;
- reportErrorParsingLine(SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG + " tag value '" +
- dateRunProduced + "' is not parseable as a date", SAMValidationError.Type.INVALID_DATE_STRING,
- e);
- }
- samReadGroupRecord.setAttribute(SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG, date.toString());
- }
-
- readGroups.add(samReadGroupRecord);
- }
-
- private void parseSQLine(final ParsedHeaderLine parsedHeaderLine) {
- assert(HeaderRecordType.SQ.equals(parsedHeaderLine.getHeaderRecordType()));
- if (!parsedHeaderLine.requireTag(SAMSequenceRecord.SEQUENCE_NAME_TAG) ||
- !parsedHeaderLine.requireTag(SAMSequenceRecord.SEQUENCE_LENGTH_TAG)) {
- return;
- }
- String sequenceName = parsedHeaderLine.removeValue(SAMSequenceRecord.SEQUENCE_NAME_TAG);
- sequenceName = SAMSequenceRecord.truncateSequenceName(sequenceName);
- final SAMSequenceRecord samSequenceRecord = new SAMSequenceRecord(sequenceName,
- Integer.parseInt(parsedHeaderLine.removeValue(SAMSequenceRecord.SEQUENCE_LENGTH_TAG)));
- transferAttributes(samSequenceRecord, parsedHeaderLine.mKeyValuePairs);
- sequences.add(samSequenceRecord);
- }
-
- private void parseHDLine(final ParsedHeaderLine parsedHeaderLine) {
- assert(HeaderRecordType.HD.equals(parsedHeaderLine.getHeaderRecordType()));
- if (!parsedHeaderLine.requireTag(SAMFileHeader.VERSION_TAG)) {
- return;
- }
- transferAttributes(mFileHeader, parsedHeaderLine.mKeyValuePairs);
- }
-
- private void reportErrorParsingLine(String reason, final SAMValidationError.Type type, final Throwable nestedException) {
- reason = "Error parsing SAM header. " + reason + ". Line:\n" + mCurrentLine;
- if (validationStringency != SAMFileReader.ValidationStringency.STRICT) {
- final SAMValidationError error = new SAMValidationError(type, reason, null, mReader.getLineNumber());
- error.setSource(mSource);
- mFileHeader.addValidationError(error);
- } else {
- String fileMessage = "";
- if (mSource != null) {
- fileMessage = "File " + mSource;
- }
- throw new SAMFormatException(reason + "; " + fileMessage +
- "; Line number " + mReader.getLineNumber(), nestedException);
- }
- }
-
- private enum HeaderRecordType {
- HD, SQ, RG, PG, CO
- }
-
- /**
- * Takes a header line as a String and converts it into a HeaderRecordType, and a map of key:value strings.
- * If the line does not contain a recognized HeaderRecordType, then the line is considered invalid, and will
- * not have any key:value pairs.
- */
- private class ParsedHeaderLine {
- private HeaderRecordType mHeaderRecordType;
- private final Map<String, String> mKeyValuePairs = new HashMap<String, String>();
- private boolean lineValid = false;
-
- ParsedHeaderLine(final String line) {
- assert(line.startsWith(HEADER_LINE_START));
-
- // Tab-separate
- String[] fields = new String[1024];
- int numFields = StringUtil.split(line, fields, FIELD_SEPARATOR_CHAR);
- if (numFields == fields.length) {
- // Lots of fields, so fall back
- fields = FIELD_SEPARATOR_RE.split(line);
- numFields = fields.length;
- }
-
- // Parse the HeaderRecordType
- try {
- mHeaderRecordType = HeaderRecordType.valueOf(fields[0].substring(1));
- } catch (IllegalArgumentException e) {
- reportErrorParsingLine("Unrecognized header record type", SAMValidationError.Type.UNRECOGNIZED_HEADER_TYPE, null);
- mHeaderRecordType = null;
- return;
- }
-
- // Do not parse key:value pairs for comment lines.
- if (mHeaderRecordType == HeaderRecordType.CO) {
- lineValid = true;
- return;
- }
-
- final String[] keyAndValue = new String[2];
- // Parse they key:value pairs
- for (int i = 1; i < numFields; ++i) {
- if (StringUtil.splitConcatenateExcessTokens(fields[i], keyAndValue, TAG_KEY_VALUE_SEPARATOR_CHAR) != 2) {
- reportErrorParsingLine("Problem parsing " + HEADER_LINE_START + mHeaderRecordType +
- " key:value pair", SAMValidationError.Type.POORLY_FORMATTED_HEADER_TAG, null);
- continue;
- }
- if (mKeyValuePairs.containsKey(keyAndValue[0]) &&
- ! mKeyValuePairs.get(keyAndValue[0]).equals(keyAndValue[1])) {
- reportErrorParsingLine("Problem parsing " + HEADER_LINE_START + mHeaderRecordType +
- " key:value pair " + keyAndValue[0] + ":" + keyAndValue[1] +
- " clashes with " + keyAndValue[0] + ":" + mKeyValuePairs.get(keyAndValue[0]),
- SAMValidationError.Type.HEADER_TAG_MULTIPLY_DEFINED, null);
- continue;
- }
- mKeyValuePairs.put(keyAndValue[0], keyAndValue[1]);
- }
- lineValid = true;
- }
-
- /**
- * True if the line is recognized as one of the valid HeaderRecordTypes.
- */
- public boolean isLineValid() {
- return lineValid;
- }
-
- /**
- * Handling depends on the validation stringency. If the tag is not present, and stringency is strict,
- * an exception is thrown. If stringency is not strict, false is returned.
- * @param tag Must be present for the line to be considered value.
- * @return True if tag is present.
- */
- boolean requireTag(final String tag) {
- if (!mKeyValuePairs.containsKey(tag)) {
- reportErrorParsingLine(HEADER_LINE_START + mHeaderRecordType + " line missing " + tag + " tag",
- SAMValidationError.Type.HEADER_RECORD_MISSING_REQUIRED_TAG, null);
- return false;
- }
- return true;
- }
-
- /**
- * @return null if line is invalid, otherwise the parsed HeaderRecordType
- */
- public HeaderRecordType getHeaderRecordType() {
- return mHeaderRecordType;
- }
-
- boolean containsKey(final String key) {
- return mKeyValuePairs.containsKey(key);
- }
-
- String getValue(final String key) {
- return mKeyValuePairs.get(key);
- }
-
- String removeValue(final String key) {
- final String ret = mKeyValuePairs.get(key);
- mKeyValuePairs.remove(key);
- return ret;
- }
-
- }
-
- /**
- * Convert SAMFileHeader from in-memory representation to text representation. Always writes
- * SAMFileHeader.CURRENT_VERSION as the version in the header.
- * @param writer where to write the header text.
- * @param header object to be converted to text.
- */
- public void encode(final Writer writer, final SAMFileHeader header) {
- encode(writer, header, false);
- }
-
- /**
- * Convert SAMFileHeader from in-memory representation to text representation.
- * @param writer where to write the header text.
- * @param header object to be converted to text.
- * @param keepExistingVersionNumber If true, writes whatever version # was in the header. If false, writes
- * SAMFileHeader.CURRENT_VERSION.
- */
- public void encode(final Writer writer, final SAMFileHeader header, final boolean keepExistingVersionNumber) {
- mFileHeader = header;
- this.writer = new BufferedWriter(writer);
- writeHDLine(keepExistingVersionNumber);
- for (final SAMSequenceRecord sequenceRecord: header.getSequenceDictionary().getSequences()) {
- writeSQLine(sequenceRecord);
- }
-
- for (final SAMReadGroupRecord readGroup : header.getReadGroups()) {
- writeRGLine(readGroup);
- }
- for (final SAMProgramRecord programRecord : header.getProgramRecords()) {
- writePGLine(programRecord);
- }
- for (final String comment : header.getComments()) {
- println(comment);
- }
- try {
- this.writer.flush();
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- private void println(final String s) {
- try {
- writer.append(s);
- writer.append("\n");
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- private void writePGLine(final SAMProgramRecord programRecord) {
- if (programRecord == null) {
- return;
- }
- final String[] fields = new String[2 + programRecord.getAttributes().size()];
- fields[0] = HEADER_LINE_START + HeaderRecordType.PG;
- fields[1] = SAMProgramRecord.PROGRAM_GROUP_ID_TAG + TAG_KEY_VALUE_SEPARATOR + programRecord.getProgramGroupId();
- encodeTags(programRecord, fields, 2);
- println(StringUtil.join(FIELD_SEPARATOR, fields));
- }
-
- private void writeRGLine(final SAMReadGroupRecord readGroup) {
- final String[] fields = new String[2 + readGroup.getAttributes().size()];
- fields[0] = HEADER_LINE_START + HeaderRecordType.RG;
- fields[1] = SAMReadGroupRecord.READ_GROUP_ID_TAG + TAG_KEY_VALUE_SEPARATOR + readGroup.getReadGroupId();
- encodeTags(readGroup, fields, 2);
- println(StringUtil.join(FIELD_SEPARATOR, fields));
- }
-
- private void writeHDLine(final boolean keepExistingVersionNumber) {
- final SAMFileHeader newHeader;
- if (keepExistingVersionNumber) {
- newHeader = mFileHeader;
- } else {
- // Make a copy of the header, excluding the version from the input header, so that
- // output get CURRENT_VERSION instead of whatever the version of the input header was.
- newHeader = new SAMFileHeader();
-
- for (final Map.Entry<String, String> entry : mFileHeader.getAttributes()) {
- if (!entry.getKey().equals(SAMFileHeader.VERSION_TAG)) {
- newHeader.setAttribute(entry.getKey(), entry.getValue());
- }
- }
- }
-
- final String[] fields = new String[1 + newHeader.getAttributes().size()];
- fields[0] = HEADER_LINE_START + HeaderRecordType.HD;
- encodeTags(newHeader, fields, 1);
- println(StringUtil.join(FIELD_SEPARATOR, fields));
- }
-
- private void writeSQLine(final SAMSequenceRecord sequenceRecord) {
- final int numAttributes =sequenceRecord.getAttributes() != null ? sequenceRecord.getAttributes().size() : 0;
- final String[] fields = new String[3 + numAttributes];
- fields[0] = HEADER_LINE_START + HeaderRecordType.SQ;
- fields[1] = SAMSequenceRecord.SEQUENCE_NAME_TAG + TAG_KEY_VALUE_SEPARATOR + sequenceRecord.getSequenceName();
- fields[2] = SAMSequenceRecord.SEQUENCE_LENGTH_TAG + TAG_KEY_VALUE_SEPARATOR + Integer.toString(sequenceRecord.getSequenceLength());
- encodeTags(sequenceRecord, fields, 3);
- println(StringUtil.join(FIELD_SEPARATOR, fields));
- }
-
- /**
- * Encode all the attributes in the given object as text
- * @param rec object containing attributes, and knowledge of which are standard tags
- * @param fields where to put the text representation of the tags. Must be big enough to hold all tags.
- * @param offset where to start putting text tag representations.
- */
- private void encodeTags(final AbstractSAMHeaderRecord rec, final String[] fields, int offset) {
- for (final Map.Entry<String, String> entry: rec.getAttributes()) {
- fields[offset++] = mTagCodec.encodeUntypedTag(entry.getKey(), entry.getValue());
- }
- }
-
- public void setValidationStringency(final SAMFileReader.ValidationStringency validationStringency) {
- if (validationStringency == null) {
- throw new IllegalArgumentException("null validationStringency not allowed");
- }
- this.validationStringency = validationStringency;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMTextReader.java b/src/java/net/sf/samtools/SAMTextReader.java
deleted file mode 100644
index bf651ff..0000000
--- a/src/java/net/sf/samtools/SAMTextReader.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import net.sf.samtools.util.BufferedLineReader;
-import net.sf.samtools.util.CloseableIterator;
-
-import java.io.File;
-import java.io.InputStream;
-
-
-/**
- * Internal class for reading SAM text files.
- */
-class SAMTextReader extends SAMFileReader.ReaderImplementation {
-
-
- private SAMRecordFactory samRecordFactory;
- private BufferedLineReader mReader;
- private SAMFileHeader mFileHeader = null;
- private String mCurrentLine = null;
- private RecordIterator mIterator = null;
- private File mFile = null;
-
- private SAMFileReader.ValidationStringency validationStringency = SAMFileReader.ValidationStringency.DEFAULT_STRINGENCY;
-
- /**
- * Add information about the origin (reader and position) to SAM records.
- */
- private SAMFileReader mParentReader;
-
- /**
- * Prepare to read a SAM text file.
- * @param stream Need not be buffered, as this class provides buffered reading.
- */
- SAMTextReader(final InputStream stream, final SAMFileReader.ValidationStringency validationStringency, final SAMRecordFactory factory) {
- mReader = new BufferedLineReader(stream);
- this.validationStringency = validationStringency;
- this.samRecordFactory = factory;
- readHeader();
- }
-
- /**
- * Prepare to read a SAM text file.
- * @param stream Need not be buffered, as this class provides buffered reading.
- * @param file For error reporting only.
- */
- SAMTextReader(final InputStream stream, final File file, final SAMFileReader.ValidationStringency validationStringency, final SAMRecordFactory factory) {
- this(stream, validationStringency, factory);
- mFile = file;
- }
-
- /**
- * If true, writes the source of every read into the source SAMRecords.
- * @param enabled true to write source information into each SAMRecord.
- */
- void enableFileSource(final SAMFileReader reader, final boolean enabled) {
- this.mParentReader = enabled ? reader : null;
- }
-
- void enableIndexCaching(final boolean enabled) {
- throw new UnsupportedOperationException("Cannot enable index caching for a SAM text reader");
- }
-
- void enableIndexMemoryMapping(final boolean enabled) {
- throw new UnsupportedOperationException("Cannot enable index memory mapping for a SAM text reader");
- }
-
- void enableCrcChecking(final boolean enabled) {
- // Do nothing - this has no meaning for SAM reading
- }
-
- void setSAMRecordFactory(final SAMRecordFactory factory) {
- this.samRecordFactory = factory;
- }
-
- boolean hasIndex() {
- return false;
- }
-
- BAMIndex getIndex() {
- throw new UnsupportedOperationException();
- }
-
- void close() {
- if (mReader != null) {
- try {
- mReader.close();
- } finally {
- mReader = null;
- }
- }
- }
-
- SAMFileHeader getFileHeader() {
- return mFileHeader;
- }
-
- public SAMFileReader.ValidationStringency getValidationStringency() {
- return validationStringency;
- }
-
- public void setValidationStringency(final SAMFileReader.ValidationStringency stringency) {
- this.validationStringency = stringency;
- }
-
- /**
- * There can only be one extant iterator on a SAMTextReader at a time. The previous one must
- * be closed before calling getIterator(). Because the input stream is not seekable, a subsequent
- * call to getIterator() returns an iterator that starts where the last one left off.
- *
- * @return Iterator of SAMRecords in file order.
- */
- CloseableIterator<SAMRecord> getIterator() {
- if (mReader == null) {
- throw new IllegalStateException("File reader is closed");
- }
- if (mIterator != null) {
- throw new IllegalStateException("Iteration in progress");
- }
- mIterator = new RecordIterator();
- return mIterator;
- }
-
- /**
- * Generally loads data at a given point in the file. Unsupported for SAMTextReaders.
- * @param fileSpan The file span.
- * @return An iterator over the given file span.
- */
- CloseableIterator<SAMRecord> getIterator(final SAMFileSpan fileSpan) {
- throw new UnsupportedOperationException("Cannot directly iterate over regions within SAM text files.");
- }
-
- /**
- * Generally gets a pointer to the first read in the file. Unsupported for SAMTextReaders.
- * @return An pointer to the first read in the file.
- */
- SAMFileSpan getFilePointerSpanningReads() {
- throw new UnsupportedOperationException("Cannot retrieve file pointers within SAM text files.");
- }
-
- /**
- * Unsupported for SAM text files.
- */
- CloseableIterator<SAMRecord> query(final String sequence, final int start, final int end, final boolean contained) {
- throw new UnsupportedOperationException("Cannot query SAM text files");
- }
-
- @Override
- CloseableIterator<SAMRecord> query(final SAMFileReader.QueryInterval[] intervals, final boolean contained) {
- throw new UnsupportedOperationException("Cannot query SAM text files");
- }
-
- /**
- * Unsupported for SAM text files.
- */
- CloseableIterator<SAMRecord> queryAlignmentStart(final String sequence, final int start) {
- throw new UnsupportedOperationException("Cannot query SAM text files");
- }
-
- public CloseableIterator<SAMRecord> queryUnmapped() {
- throw new UnsupportedOperationException("Cannot query SAM text files");
- }
-
- private void readHeader() {
- final SAMTextHeaderCodec headerCodec = new SAMTextHeaderCodec();
- headerCodec.setValidationStringency(validationStringency);
- mFileHeader = headerCodec.decode(mReader, (mFile != null? mFile.toString(): null));
- advanceLine();
- }
-
- private String advanceLine() {
- mCurrentLine = mReader.readLine();
- return mCurrentLine;
- }
-
-
-
-
-
- /**
- * SAMRecord iterator for SAMTextReader
- */
- private class RecordIterator implements CloseableIterator<SAMRecord> {
-
- private final SAMLineParser parser = new SAMLineParser(samRecordFactory, validationStringency,
- mFileHeader, mParentReader, mFile);
-
- private RecordIterator() {
- if (mReader == null) {
- throw new IllegalStateException("Reader is closed.");
- }
- }
-
- public void close() {
- SAMTextReader.this.close();
- }
-
- public boolean hasNext() {
- return mCurrentLine != null;
- }
-
- public SAMRecord next() {
- if (!hasNext()) {
- throw new IllegalStateException("Cannot call next() on exhausted iterator");
- }
- try {
- return parseLine();
- } finally {
- advanceLine();
- }
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Not supported: remove");
- }
-
- private SAMRecord parseLine() {
-
- return parser.parseLine(mCurrentLine, mReader.getLineNumber());
- }
-
- }
-}
-
diff --git a/src/java/net/sf/samtools/SAMTextWriter.java b/src/java/net/sf/samtools/SAMTextWriter.java
deleted file mode 100644
index a33b4e9..0000000
--- a/src/java/net/sf/samtools/SAMTextWriter.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.AsciiWriter;
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.*;
-
-/**
- * Writer for text-format SAM files.
- */
-public class SAMTextWriter extends SAMFileWriterImpl {
- private static final String FIELD_SEPARATOR = "\t";
-
- private final Writer out;
- // For error reporting only.
- private final File file;
- private final TextTagCodec tagCodec = new TextTagCodec();
- private final SAMTagUtil tagUtil = new SAMTagUtil();
-
- /**
- * Constructs a SAMTextWriter that outputs to a Writer.
- * @param out Writer.
- */
- public SAMTextWriter(Writer out) {
- this.out = out;
- this.file = null;
- }
-
- /**
- * Constructs a SAMTextWriter that writes to a File.
- * @param file Where to write the output.
- */
- public SAMTextWriter(final File file) {
- try {
- this.file = file;
- this.out = new AsciiWriter(new FileOutputStream(file));
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * Returns the Writer used by this instance. Useful for flushing the output.
- */
- public Writer getWriter() {
- return out;
- }
-
- /**
- * Constructs a SAMTextWriter that writes to an OutputStream. The OutputStream
- * is wrapped in an AsciiWriter, which can be retrieved with getWriter().
- * @param stream Need not be buffered because this class provides buffering.
- */
- public SAMTextWriter(final OutputStream stream) {
- this.file = null;
- this.out = new AsciiWriter(stream);
- }
-
- /**
- * Write the record.
- *
- * @param alignment SAMRecord.
- */
- public void writeAlignment(final SAMRecord alignment) {
- try {
- out.write(alignment.getReadName());
- out.write(FIELD_SEPARATOR);
- out.write(Integer.toString(alignment.getFlags()));
- out.write(FIELD_SEPARATOR);
- out.write(alignment.getReferenceName());
- out.write(FIELD_SEPARATOR);
- out.write(Integer.toString(alignment.getAlignmentStart()));
- out.write(FIELD_SEPARATOR);
- out.write(Integer.toString(alignment.getMappingQuality()));
- out.write(FIELD_SEPARATOR);
- out.write(alignment.getCigarString());
- out.write(FIELD_SEPARATOR);
-
- // == is OK here because these strings are interned
- if (alignment.getReferenceName() == alignment.getMateReferenceName() &&
- SAMRecord.NO_ALIGNMENT_REFERENCE_NAME != alignment.getReferenceName()) {
- out.write("=");
- } else {
- out.write(alignment.getMateReferenceName());
- }
- out.write(FIELD_SEPARATOR);
- out.write(Integer.toString(alignment.getMateAlignmentStart()));
- out.write(FIELD_SEPARATOR);
- out.write(Integer.toString(alignment.getInferredInsertSize()));
- out.write(FIELD_SEPARATOR);
- out.write(alignment.getReadString());
- out.write(FIELD_SEPARATOR);
- out.write(alignment.getBaseQualityString());
- SAMBinaryTagAndValue attribute = alignment.getBinaryAttributes();
- while (attribute != null) {
- out.write(FIELD_SEPARATOR);
- final String encodedTag;
- if (attribute.isUnsignedArray()) {
- encodedTag = tagCodec.encodeUnsignedArray(tagUtil.makeStringTag(attribute.tag), attribute.value);
- } else {
- encodedTag = tagCodec.encode(tagUtil.makeStringTag(attribute.tag), attribute.value);
- }
- out.write(encodedTag);
- attribute = attribute.getNext();
- }
- out.write("\n");
-
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /* This method is called by SAMRecord.getSAMString(). */
- private static SAMTextWriter textWriter = null;
- private static StringWriter stringWriter = null;
- static synchronized String getSAMString(final SAMRecord alignment) {
- if (stringWriter == null) stringWriter = new StringWriter();
- if (textWriter == null) textWriter = new SAMTextWriter(stringWriter);
- stringWriter.getBuffer().setLength(0);
- textWriter.writeAlignment(alignment);
- return stringWriter.toString();
- }
-
- /**
- * Write the header text. This method can also be used to write
- * an arbitrary String, not necessarily the header.
- *
- * @param textHeader String containing the text to write.
- */
- public void writeHeader(final String textHeader) {
- try {
- out.write(textHeader);
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * Do any required flushing here.
- */
- public void finish() {
- try {
- out.close();
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * For producing error messages.
- *
- * @return Output filename, or null if there isn't one.
- */
- public String getFilename() {
- if (file == null) {
- return null;
- }
- return file.getAbsolutePath();
- }
-}
diff --git a/src/java/net/sf/samtools/SAMTools.java b/src/java/net/sf/samtools/SAMTools.java
deleted file mode 100644
index 9209e42..0000000
--- a/src/java/net/sf/samtools/SAMTools.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-
-import net.sf.samtools.util.CloseableIterator;
-import java.io.*;
-
-
-/**
- * Command line utility for manipulating SAM/BAM files.
- */
-public class SAMTools
-{
- private String mCommand = null;
- private File mInputFile = null;
-
-
- public static void main(final String[] args)
- throws Exception {
- final int status = new SAMTools().run(args);
- if (status != 0) {
- System.exit(status);
- }
- }
-
- private SAMTools() {
- }
-
- private void usage() {
- System.out.println();
- System.out.println("SAMTools version 0.1.0");
- System.out.println("Tools for manipulating SAM/BAM files");
- System.out.println();
- System.out.println("Usage: SAMTools <command> <options...>");
- System.out.println();
- System.out.println("Commands:");
- System.out.println(" help");
- System.out.println(" view <file>");
- System.out.println();
- }
-
- private boolean parseArguments(final String[] args) {
- if (args.length == 0) {
- usage();
- return true;
- }
- final String command = args[0];
- final int argpos = 1;
- final int argcount = args.length - argpos;
- if (command.equals("help")) {
- usage();
- return true;
- } else if (command.equals("view")) {
- if (argcount != 1) {
- usage();
- return false;
- }
- mInputFile = new File(args[1]);
- if (!mInputFile.exists()) {
- System.out.println("Input file not found: " + mInputFile);
- return false;
- }
- } else {
- System.out.println("Unrecognized command: " + command);
- System.out.println();
- usage();
- return false;
- }
- mCommand = command;
- return true;
- }
-
- private int run(final String[] args)
- throws Exception {
- if (!parseArguments(args)) {
- return 1;
- }
- if (mCommand == null) {
- return 0;
- }
- if (mCommand.equals("view")) {
- return runView();
- }
- return 1;
- }
-
- private int runView() {
- final SAMFileReader reader = new SAMFileReader(mInputFile);
- final CloseableIterator<SAMRecord> iterator = reader.iterator();
- while (iterator.hasNext()) {
- final SAMRecord record = iterator.next();
- System.out.println(record.format());
- }
- iterator.close();
- return 0;
- }
-}
diff --git a/src/java/net/sf/samtools/SAMUtils.java b/src/java/net/sf/samtools/SAMUtils.java
deleted file mode 100644
index 5517ea8..0000000
--- a/src/java/net/sf/samtools/SAMUtils.java
+++ /dev/null
@@ -1,925 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CoordMath;
-import net.sf.samtools.util.RuntimeEOFException;
-import net.sf.samtools.util.StringUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * Utilty methods.
- */
-public final class SAMUtils
-{
- // Representation of bases, one for when in low-order nybble, one for when in high-order nybble.
- private static final byte COMPRESSED_EQUAL_LOW = 0;
- private static final byte COMPRESSED_A_LOW = 1;
- private static final byte COMPRESSED_C_LOW = 2;
- private static final byte COMPRESSED_M_LOW = 3;
- private static final byte COMPRESSED_G_LOW = 4;
- private static final byte COMPRESSED_R_LOW = 5;
- private static final byte COMPRESSED_S_LOW = 6;
- private static final byte COMPRESSED_V_LOW = 7;
- private static final byte COMPRESSED_T_LOW = 8;
- private static final byte COMPRESSED_W_LOW = 9;
- private static final byte COMPRESSED_Y_LOW = 10;
- private static final byte COMPRESSED_H_LOW = 11;
- private static final byte COMPRESSED_K_LOW = 12;
- private static final byte COMPRESSED_D_LOW = 13;
- private static final byte COMPRESSED_B_LOW = 14;
- private static final byte COMPRESSED_N_LOW = 15;
- private static final byte COMPRESSED_EQUAL_HIGH = COMPRESSED_EQUAL_LOW << 4;
- private static final byte COMPRESSED_A_HIGH = COMPRESSED_A_LOW << 4;
- private static final byte COMPRESSED_C_HIGH = COMPRESSED_C_LOW << 4;
- private static final byte COMPRESSED_G_HIGH = COMPRESSED_G_LOW << 4;
- private static final byte COMPRESSED_T_HIGH = (byte)(COMPRESSED_T_LOW << 4);
- private static final byte COMPRESSED_N_HIGH = (byte)(COMPRESSED_N_LOW << 4);
-
- private static final byte COMPRESSED_M_HIGH = (byte)(COMPRESSED_M_LOW << 4);
- private static final byte COMPRESSED_R_HIGH = (byte)(COMPRESSED_R_LOW << 4);
- private static final byte COMPRESSED_S_HIGH = (byte)(COMPRESSED_S_LOW << 4);
- private static final byte COMPRESSED_V_HIGH = (byte)(COMPRESSED_V_LOW << 4);
- private static final byte COMPRESSED_W_HIGH = (byte)(COMPRESSED_W_LOW << 4);
- private static final byte COMPRESSED_Y_HIGH = (byte)(COMPRESSED_Y_LOW << 4);
- private static final byte COMPRESSED_H_HIGH = (byte)(COMPRESSED_H_LOW << 4);
- private static final byte COMPRESSED_K_HIGH = (byte)(COMPRESSED_K_LOW << 4);
- private static final byte COMPRESSED_D_HIGH = (byte)(COMPRESSED_D_LOW << 4);
- private static final byte COMPRESSED_B_HIGH = (byte)(COMPRESSED_B_LOW << 4);
-
-
- public static final int MAX_PHRED_SCORE = 93;
-
- /**
- * Convert from a byte array containing =AaCcGgTtNn represented as ASCII, to a byte array half as long,
- * with =, A, C, G, T converted to 0, 1, 2, 4, 8, 15.
- * @param readBases Bases as ASCII bytes.
- * @return New byte array with bases represented as nybbles, in BAM binary format.
- */
- static byte[] bytesToCompressedBases(final byte[] readBases) {
- final byte[] compressedBases = new byte[(readBases.length + 1)/2];
- int i;
- for (i = 1; i < readBases.length; i+=2) {
- compressedBases[i/2] = (byte)(charToCompressedBaseHigh(readBases[i-1]) |
- charToCompressedBaseLow(readBases[i]));
- }
- // Last nybble
- if (i == readBases.length) {
- compressedBases[i/2] = charToCompressedBaseHigh((char)readBases[i-1]);
- }
- return compressedBases;
- }
-
- /**
- * Convert from a byte array with basese stored in nybbles, with =, A, C, G, T represented as 0, 1, 2, 4, 8, 15,
- * to a a byte array containing =AaCcGgTtNn represented as ASCII.
- * @param length Number of bases (not bytes) to convert.
- * @param compressedBases Bases represented as nybbles, in BAM binary format.
- * @param compressedOffset Byte offset in compressedBases to start.
- * @return New byte array with bases as ASCII bytes.
- */
- public static byte[] compressedBasesToBytes(final int length, final byte[] compressedBases, final int compressedOffset) {
- final byte[] ret = new byte[length];
- int i;
- for (i = 1; i < length; i+=2) {
- final int compressedIndex = i / 2 + compressedOffset;
- ret[i-1] = compressedBaseToByteHigh(compressedBases[compressedIndex]);
- ret[i] = compressedBaseToByteLow(compressedBases[compressedIndex]);
- }
- // Last nybble
- if (i == length) {
- ret[i-1] = compressedBaseToByteHigh(compressedBases[i/2 + compressedOffset]);
- }
- return ret;
- }
-
- /**
- * Convert from ASCII byte to BAM nybble representation of a base in low-order nybble.
- * @param base One of =AaCcGgTtNn.
- * @return Low-order nybble-encoded equivalent.
- */
- private static byte charToCompressedBaseLow(final int base) {
- switch (base) {
- case '=':
- return COMPRESSED_EQUAL_LOW;
- case 'a':
- case 'A':
- return COMPRESSED_A_LOW;
- case 'c':
- case 'C':
- return COMPRESSED_C_LOW;
- case 'g':
- case 'G':
- return COMPRESSED_G_LOW;
- case 't':
- case 'T':
- return COMPRESSED_T_LOW;
- case 'n':
- case 'N':
- case '.':
- return COMPRESSED_N_LOW;
-
- // IUPAC ambiguity codes
- case 'M':
- case 'm':
- return COMPRESSED_M_LOW;
- case 'R':
- case 'r':
- return COMPRESSED_R_LOW;
- case 'S':
- case 's':
- return COMPRESSED_S_LOW;
- case 'V':
- case 'v':
- return COMPRESSED_V_LOW;
- case 'W':
- case 'w':
- return COMPRESSED_W_LOW;
- case 'Y':
- case 'y':
- return COMPRESSED_Y_LOW;
- case 'H':
- case 'h':
- return COMPRESSED_H_LOW;
- case 'K':
- case 'k':
- return COMPRESSED_K_LOW;
- case 'D':
- case 'd':
- return COMPRESSED_D_LOW;
- case 'B':
- case 'b':
- return COMPRESSED_B_LOW;
- default:
- throw new IllegalArgumentException("Bad byte passed to charToCompressedBase: " + base);
- }
- }
-
- /**
- * Convert from ASCII byte to BAM nybble representation of a base in high-order nybble.
- * @param base One of =AaCcGgTtNn.
- * @return High-order nybble-encoded equivalent.
- */
- private static byte charToCompressedBaseHigh(final int base) {
- switch (base) {
- case '=':
- return COMPRESSED_EQUAL_HIGH;
- case 'a':
- case 'A':
- return COMPRESSED_A_HIGH;
- case 'c':
- case 'C':
- return COMPRESSED_C_HIGH;
- case 'g':
- case 'G':
- return COMPRESSED_G_HIGH;
- case 't':
- case 'T':
- return COMPRESSED_T_HIGH;
- case 'n':
- case 'N':
- case '.':
- return COMPRESSED_N_HIGH;
-
- // IUPAC ambiguity codes
- case 'M':
- case 'm':
- return COMPRESSED_M_HIGH;
- case 'R':
- case 'r':
- return COMPRESSED_R_HIGH;
- case 'S':
- case 's':
- return COMPRESSED_S_HIGH;
- case 'V':
- case 'v':
- return COMPRESSED_V_HIGH;
- case 'W':
- case 'w':
- return COMPRESSED_W_HIGH;
- case 'Y':
- case 'y':
- return COMPRESSED_Y_HIGH;
- case 'H':
- case 'h':
- return COMPRESSED_H_HIGH;
- case 'K':
- case 'k':
- return COMPRESSED_K_HIGH;
- case 'D':
- case 'd':
- return COMPRESSED_D_HIGH;
- case 'B':
- case 'b':
- return COMPRESSED_B_HIGH;
- default:
- throw new IllegalArgumentException("Bad byte passed to charToCompressedBase: " + base);
- }
- }
-
- /**
- * Convert from BAM nybble representation of a base in low-order nybble to ASCII byte.
- * @param base One of COMPRESSED_*_LOW, a low-order nybble encoded base.
- * @return ASCII base, one of ACGTN=.
- */
- private static byte compressedBaseToByteLow(final int base) {
- switch (base & 0xf) {
- case COMPRESSED_EQUAL_LOW:
- return '=';
- case COMPRESSED_A_LOW:
- return 'A';
- case COMPRESSED_C_LOW:
- return 'C';
- case COMPRESSED_G_LOW:
- return 'G';
- case COMPRESSED_T_LOW:
- return 'T';
- case COMPRESSED_N_LOW:
- return 'N';
-
- // IUPAC ambiguity codes
- case COMPRESSED_M_LOW: return 'M';
- case COMPRESSED_R_LOW: return 'R';
- case COMPRESSED_S_LOW: return 'S';
- case COMPRESSED_V_LOW: return 'V';
- case COMPRESSED_W_LOW: return 'W';
- case COMPRESSED_Y_LOW: return 'Y';
- case COMPRESSED_H_LOW: return 'H';
- case COMPRESSED_K_LOW: return 'K';
- case COMPRESSED_D_LOW: return 'D';
- case COMPRESSED_B_LOW: return 'B';
-
-
- default:
- throw new IllegalArgumentException("Bad byte passed to charToCompressedBase: " + base);
- }
- }
-
- /**
- * Convert from BAM nybble representation of a base in high-order nybble to ASCII byte.
- * @param base One of COMPRESSED_*_HIGH, a high-order nybble encoded base.
- * @return ASCII base, one of ACGTN=.
- */
- private static byte compressedBaseToByteHigh(final int base) {
- switch ((byte)(base & 0xf0)) {
- case COMPRESSED_EQUAL_HIGH:
- return '=';
- case COMPRESSED_A_HIGH:
- return 'A';
- case COMPRESSED_C_HIGH:
- return 'C';
- case COMPRESSED_G_HIGH:
- return 'G';
- case COMPRESSED_T_HIGH:
- return 'T';
- case COMPRESSED_N_HIGH:
- return 'N';
-
- // IUPAC ambiguity codes
- case COMPRESSED_M_HIGH: return 'M';
- case COMPRESSED_R_HIGH: return 'R';
- case COMPRESSED_S_HIGH: return 'S';
- case COMPRESSED_V_HIGH: return 'V';
- case COMPRESSED_W_HIGH: return 'W';
- case COMPRESSED_Y_HIGH: return 'Y';
- case COMPRESSED_H_HIGH: return 'H';
- case COMPRESSED_K_HIGH: return 'K';
- case COMPRESSED_D_HIGH: return 'D';
- case COMPRESSED_B_HIGH: return 'B';
-
- default:
- throw new IllegalArgumentException("Bad byte passed to charToCompressedBase: " + base);
- }
- }
-
- /**
- * Convert bases in place into canonical form, upper case, and with no-call represented as N.
- * @param bases
- */
- static void normalizeBases(final byte[] bases) {
- for (int i = 0; i < bases.length; ++i) {
- bases[i] = StringUtil.toUpperCase(bases[i]);
- if (bases[i] == '.') {
- bases[i] = 'N';
- }
- }
- }
-
- /**
- * Convert an array of bytes, in which each byte is a binary phred quality score, to
- * printable ASCII representation of the quality scores, ala FASTQ format.
- *
- * Equivalent to phredToFastq(data, 0, data.length)
- *
- * @param data Array of bytes in which each byte is a binar phred score.
- * @return String with ASCII representation of those quality scores.
- */
- public static String phredToFastq(final byte[] data) {
- if (data == null) {
- return null;
- }
- return phredToFastq(data, 0, data.length);
- }
-
- /**
- * Convert an array of bytes, in which each byte is a binary phred quality score, to
- * printable ASCII representation of the quality scores, ala FASTQ format.
- * @param buffer Array of bytes in which each byte is a binar phred score.
- * @param offset Where in buffer to start conversion.
- * @param length How many bytes of buffer to convert.
- * @return String with ASCII representation of those quality scores.
- */
- public static String phredToFastq(final byte[] buffer, final int offset, final int length) {
- final char[] chars = new char[length];
- for (int i = 0; i < length; i++) {
- chars[i] = phredToFastq(buffer[offset+i] & 0xFF);
- }
- return new String(chars);
- }
-
- /**
- * Convert a single binary phred score to printable ASCII representation, ala FASTQ format.
- * @param phredScore binary phred score.
- * @return Printable ASCII representation of phred score.
- */
- public static char phredToFastq(final int phredScore) {
- if (phredScore < 0 || phredScore > MAX_PHRED_SCORE) {
- throw new IllegalArgumentException("Cannot encode phred score: " + phredScore);
- }
- return (char) (33 + phredScore);
- }
-
- /**
- * Convert a string with phred scores in printable ASCII FASTQ format to an array
- * of binary phred scores.
- * @param fastq Phred scores in FASTQ printable ASCII format.
- * @return byte array of binary phred scores in which each byte corresponds to a character in the input string.
- */
- public static byte[] fastqToPhred(final String fastq) {
- if (fastq == null) {
- return null;
- }
- final int length = fastq.length();
- final byte[] scores = new byte[length];
- for (int i = 0; i < length; i++) {
- scores[i] = (byte) fastqToPhred(fastq.charAt(i));
- }
- return scores;
- }
-
- /**
- * Converts printable qualities in Sanger fastq format to binary phred scores.
- */
- public static void fastqToPhred(final byte[] fastq) {
- for (int i = 0; i < fastq.length; ++i) {
- fastq[i] = (byte)fastqToPhred((char)(fastq[i] & 0xff));
- }
- }
-
- /**
- * Convert a single printable ASCII FASTQ format phred score to binary phred score.
- * @param ch Printable ASCII FASTQ format phred score.
- * @return Binary phred score.
- */
- public static int fastqToPhred(final char ch) {
- if (ch < 33 || ch > 126) {
- throw new IllegalArgumentException("Invalid fastq character: " + ch);
- }
- return (ch - 33);
- }
-
- /**
- * calculate the bin given an alignment in [beg,end)
- * Copied from SAM spec.
- * @param beg 0-based start of read (inclusive)
- * @param end 0-based end of read (exclusive)
- * @deprecated Use GenomicIndexUtil.reg2bin
- */
- static int reg2bin(final int beg, final int end)
- {
- return GenomicIndexUtil.reg2bin(beg, end);
- }
-
- /**
- * Handle a list of validation errors according to the validation stringency.
- * @param validationErrors List of errors to report, or null if there are no errors.
- * @param samRecordIndex Record number of the SAMRecord corresponding to the validation errors, or -1 if
- * the record number is not known.
- * @param validationStringency If STRICT, throw a SAMFormatException. If LENIENT, print the validation
- * errors to stderr. If SILENT, do nothing.
- */
- static void processValidationErrors(final List<SAMValidationError> validationErrors,
- final long samRecordIndex,
- final SAMFileReader.ValidationStringency validationStringency) {
- if (validationErrors != null && validationErrors.size() > 0) {
- for (final SAMValidationError validationError : validationErrors) {
- validationError.setRecordNumber(samRecordIndex);
- }
- if (validationStringency == SAMFileReader.ValidationStringency.STRICT) {
- throw new SAMFormatException("SAM validation error: " + validationErrors.get(0));
- }
- else if (validationStringency == SAMFileReader.ValidationStringency.LENIENT) {
- for (final SAMValidationError error : validationErrors) {
- System.err.println("Ignoring SAM validation error: " + error);
- }
- }
- }
- }
-
- public static void processValidationError(final SAMValidationError validationError,
- final SAMFileReader.ValidationStringency validationStringency) {
- if (validationStringency == SAMFileReader.ValidationStringency.STRICT) {
- throw new SAMFormatException("SAM validation error: " + validationError);
- }
- else if (validationStringency == SAMFileReader.ValidationStringency.LENIENT) {
- System.err.println("Ignoring SAM validation error: " + validationError);
- }
-
- }
-
- private static final SAMHeaderRecordComparator<SAMReadGroupRecord> HEADER_RECORD_COMPARATOR =
- new SAMHeaderRecordComparator<SAMReadGroupRecord>(
- SAMReadGroupRecord.PLATFORM_UNIT_TAG,
- SAMReadGroupRecord.LIBRARY_TAG,
- SAMReadGroupRecord.DATE_RUN_PRODUCED_TAG,
- SAMReadGroupRecord.READ_GROUP_SAMPLE_TAG,
- SAMReadGroupRecord.SEQUENCING_CENTER_TAG,
- SAMReadGroupRecord.PLATFORM_TAG,
- SAMReadGroupRecord.DESCRIPTION_TAG,
- SAMReadGroupRecord.READ_GROUP_ID_TAG // We don't actually want to compare with ID but it's suitable
- // "just in case" since it's the only one that's actually required
- );
-
- /**
- * Calculate a hash code from identifying information in the RG (read group) records in a SAM file's
- * header. This hash code changes any time read groups are added or removed. Comparing one file's
- * hash code to another's tells you if the read groups in the BAM files are different.
- */
- public static String calculateReadGroupRecordChecksum(final File input) {
- final String ENCODING = "UTF-8";
-
- final MessageDigest digest;
- try {
- digest = MessageDigest.getInstance("MD5");
- } catch (final NoSuchAlgorithmException nsae) {
- throw new Error("No MD5 algorithm was available in a Java JDK? Unheard-of!");
- }
-
- // Sort the read group records by their first
- final SAMFileReader reader = new SAMFileReader(input);
- final List<SAMReadGroupRecord> sortedRecords = new ArrayList<SAMReadGroupRecord>(reader.getFileHeader().getReadGroups());
- Collections.sort(sortedRecords, HEADER_RECORD_COMPARATOR);
-
- for (final SAMReadGroupRecord rgRecord : sortedRecords) {
- final TreeMap<String, String> sortedAttributes = new TreeMap<String, String>();
- for (final Map.Entry<String, String> attributeEntry : rgRecord.getAttributes()) {
- sortedAttributes.put(attributeEntry.getKey(), attributeEntry.getValue());
- }
-
- try {
- for (final Map.Entry<String, String> sortedEntry : sortedAttributes.entrySet()) {
- if ( ! sortedEntry.getKey().equals(SAMReadGroupRecord.READ_GROUP_ID_TAG)) { // Redundant check, safety first
- digest.update(sortedEntry.getKey().getBytes(ENCODING));
- digest.update(sortedEntry.getValue().getBytes(ENCODING));
- }
- }
- } catch (final UnsupportedEncodingException uee) {
- throw new Error("No " + ENCODING + "!? WTH?");
- }
- }
-
- // Convert to a String and pad to get the full 32 chars.
- final StringBuilder hashText = new StringBuilder((new BigInteger(1, digest.digest())).toString(16));
- while (hashText.length() < 32 ) hashText.insert(0, "0");
-
- return hashText.toString();
- }
-
- /**
- * Chains <code>program</code> in front of the first "head" item in the list of
- * SAMProgramRecords in <code>header</code>. This method should not be used
- * when there are multiple chains of program groups in a header, only when
- * it can safely be assumed that there is only one chain. It correctly handles
- * the case where <code>program</code> has already been added to the header, so
- * it can be used whether creating a SAMProgramRecord with a constructor or when
- * calling SAMFileHeader.createProgramRecord().
- */
- public static void chainSAMProgramRecord(final SAMFileHeader header, final SAMProgramRecord program) {
-
- final List<SAMProgramRecord> pgs = header.getProgramRecords();
- if (pgs.size() > 0) {
- final List<String> referencedIds = new ArrayList<String>();
- for (final SAMProgramRecord pg : pgs) {
- if (pg.getPreviousProgramGroupId() != null) {
- referencedIds.add(pg.getPreviousProgramGroupId());
- }
- }
- for (final SAMProgramRecord pg : pgs) {
- // if record being chained has already been added, ignore it
- if (pg.getProgramGroupId().equals(program.getProgramGroupId())) {
- continue;
- }
- if (!referencedIds.contains(pg.getProgramGroupId())) {
- program.setPreviousProgramGroupId(pg.getProgramGroupId());
- break;
- }
- }
- }
- }
-
- public static void makeReadUnmapped(final SAMRecord rec) {
- if (rec.getReadNegativeStrandFlag()) {
- SAMRecordUtil.reverseComplement(rec);
- rec.setReadNegativeStrandFlag(false);
- }
- rec.setDuplicateReadFlag(false);
- rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR);
- rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY);
- rec.setInferredInsertSize(0);
- rec.setNotPrimaryAlignmentFlag(false);
- rec.setProperPairFlag(false);
- rec.setReadUnmappedFlag(true);
- }
-
-
- /**
- * Determines if a cigar has any element that both consumes read bases and consumes reference bases
- * (e.g. is not all soft-clipped)
- */
- public static boolean cigarMapsNoBasesToRef(final Cigar cigar) {
- for (final CigarElement el : cigar.getCigarElements()) {
- if (el.getOperator().consumesReadBases() && el.getOperator().consumesReferenceBases()) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Tests if the provided record is mapped entirely beyond the end of the reference (i.e., the alignment start is greater than the
- * length of the sequence to which the record is mapped).
- */
- public static boolean recordMapsEntirelyBeyondEndOfReference(final SAMRecord record) {
- return record.getHeader().getSequence(record.getReferenceIndex()).getSequenceLength() < record.getAlignmentStart();
- }
-
- /**
- *
- * @return negative if mapq1 < mapq2, etc.
- * Note that MAPQ(0) < MAPQ(255) < MAPQ(1)
- */
- public static int compareMapqs(final int mapq1, final int mapq2) {
- if (mapq1 == mapq2) return 0;
- if (mapq1 == 0) return -1;
- else if (mapq2 == 0) return 1;
- else if (mapq1 == 255) return -1;
- else if (mapq2 == 255) return 1;
- else return mapq1 - mapq2;
- }
-
-
- /**
- * Hokey algorithm for combining two MAPQs into values that are comparable, being cognizant of the fact
- * that in MAPQ world, 1 > 255 > 0. In this algorithm, 255 is treated as if it were 0.01, so that
- * CombinedMapq(1,0) > CombinedMapq(255, 255) > CombinedMapq(0, 0).
- * The return value should not be used for anything other than comparing to the return value of other
- * invocations of this method.
- */
- public static int combineMapqs(int m1, int m2) {
- if (m1 == 255) m1 = 1;
- else m1 *= 100;
-
- if (m2 == 255) m2 = 1;
- else m2 *= 100;
-
- return m1 + m2;
-
- }
-
- /**
- * Returns the virtual file offset of the first record in a BAM file - i.e. the virtual file
- * offset after skipping over the text header and the sequence records.
- */
- public static long findVirtualOffsetOfFirstRecordInBam(final File bamFile) {
- try { return BAMFileReader.findVirtualOffsetOfFirstRecord(bamFile); }
- catch (final IOException ioe) { throw new RuntimeEOFException(ioe); }
- }
-
- /**
- * Given a Cigar, Returns blocks of the sequence that have been aligned directly to the
- * reference sequence. Note that clipped portions, and inserted and deleted bases (vs. the reference)
- * are not represented in the alignment blocks.
- *
- * @param cigar The cigar containing the alignment information
- * @param alignmentStart The start (1-based) of the alignment
- * @param cigarTypeName The type of cigar passed - for error logging.
- * @return List of alignment blocks
- */
- public static List<AlignmentBlock> getAlignmentBlocks(final Cigar cigar, final int alignmentStart, final String cigarTypeName) {
- if (cigar == null) return Collections.emptyList();
-
- final List<AlignmentBlock> alignmentBlocks = new ArrayList<AlignmentBlock>();
- int readBase = 1;
- int refBase = alignmentStart;
-
- for (final CigarElement e : cigar.getCigarElements()) {
- switch (e.getOperator()) {
- case H : break; // ignore hard clips
- case P : break; // ignore pads
- case S : readBase += e.getLength(); break; // soft clip read bases
- case N : refBase += e.getLength(); break; // reference skip
- case D : refBase += e.getLength(); break;
- case I : readBase += e.getLength(); break;
- case M :
- case EQ :
- case X :
- final int length = e.getLength();
- alignmentBlocks.add(new AlignmentBlock(readBase, refBase, length));
- readBase += length;
- refBase += length;
- break;
- default : throw new IllegalStateException("Case statement didn't deal with " + cigarTypeName + " op: " + e.getOperator());
- }
- }
- return Collections.unmodifiableList(alignmentBlocks);
- }
-
- /**
- * @param alignmentStart The start (1-based) of the alignment
- * @param cigar The cigar containing the alignment information
- * @return the alignment start (1-based, inclusive) adjusted for clipped bases. For example if the read
- * has an alignment start of 100 but the first 4 bases were clipped (hard or soft clipped)
- * then this method will return 96.
- *
- * Invalid to call on an unmapped read.
- * Invalid to call with cigar = null
- */
- public static int getUnclippedStart(final int alignmentStart, final Cigar cigar) {
- int unClippedStart = alignmentStart;
- for (final CigarElement cig : cigar.getCigarElements()) {
- final CigarOperator op = cig.getOperator();
- if (op == CigarOperator.SOFT_CLIP || op == CigarOperator.HARD_CLIP) {
- unClippedStart -= cig.getLength();
- }
- else {
- break;
- }
- }
-
- return unClippedStart;
- }
-
- /**
- * @param alignmentEnd The end (1-based) of the alignment
- * @param cigar The cigar containing the alignment information
- * @return the alignment end (1-based, inclusive) adjusted for clipped bases. For example if the read
- * has an alignment end of 100 but the last 7 bases were clipped (hard or soft clipped)
- * then this method will return 107.
- *
- * Invalid to call on an unmapped read.
- * Invalid to call with cigar = null
- */
- public static int getUnclippedEnd(final int alignmentEnd, final Cigar cigar) {
- int unClippedEnd = alignmentEnd;
- final List<CigarElement> cigs = cigar.getCigarElements();
- for (int i=cigs.size() - 1; i>=0; --i) {
- final CigarElement cig = cigs.get(i);
- final CigarOperator op = cig.getOperator();
-
- if (op == CigarOperator.SOFT_CLIP || op == CigarOperator.HARD_CLIP) {
- unClippedEnd += cig.getLength();
- }
- else {
- break;
- }
- }
-
- return unClippedEnd;
- }
-
- /**
- * Returns the Mate Cigar String as stored in the attribute 'MC'.
- * @param rec the SAM record
- * @return Mate Cigar String, or null if there is none.
- */
- public static String getMateCigarString(final SAMRecord rec) {
- return rec.getStringAttribute(SAMTag.MC.name());
- }
-
- /**
- * Returns the Mate Cigar or null if there is none.
- * @param rec the SAM record
- * @param withValidation true if we are to validate the mate cigar before returning, false otherwise.
- * @return Cigar object for the read's mate, or null if there is none.
- */
- public static Cigar getMateCigar(final SAMRecord rec, final boolean withValidation) {
- final String mateCigarString = getMateCigarString(rec);
- Cigar mateCigar = null;
- if (mateCigarString != null) {
- mateCigar = TextCigarCodec.getSingleton().decode(mateCigarString);
- if (withValidation && rec.getValidationStringency() != SAMFileReader.ValidationStringency.SILENT) {
- final List<AlignmentBlock> alignmentBlocks = getAlignmentBlocks(mateCigar, rec.getMateAlignmentStart(), "mate cigar");
- SAMUtils.processValidationErrors(validateCigar(rec, mateCigar, rec.getMateReferenceIndex(), alignmentBlocks, -1, "Mate CIGAR"), -1L, rec.getValidationStringency());
- }
- }
- return mateCigar;
- }
-
- /**
- * Returns the Mate Cigar or null if there is none. No validation is done on the returned cigar.
- * @param rec the SAM record
- * @return Cigar object for the read's mate, or null if there is none.
- */
- public static Cigar getMateCigar(final SAMRecord rec) {
- return getMateCigar(rec, false);
- }
-
- /**
- * @param rec the SAM record
- * @return number of cigar elements (number + operator) in the mate cigar string.
- */
- public static int getMateCigarLength(final SAMRecord rec) {
- final Cigar mateCigar = getMateCigar(rec);
- return (mateCigar != null) ? mateCigar.numCigarElements() : 0;
- }
-
- /**
- * This method uses the MateCigar value as determined from the attribute MC. It must be non-null.
- * @param rec the SAM record
- * @return 1-based inclusive rightmost position of the clipped mate sequence, or 0 read if unmapped.
- */
- public static int getMateAlignmentEnd(final SAMRecord rec) {
- if (rec.getMateUnmappedFlag()) {
- throw new RuntimeException("getMateAlignmentEnd called on an unmapped mate.");
- }
- final Cigar mateCigar = SAMUtils.getMateCigar(rec);
- if (mateCigar == null) {
- throw new SAMException("Mate CIGAR (Tag MC) not found.");
- }
- return CoordMath.getEnd(rec.getMateAlignmentStart(), mateCigar.getReferenceLength());
- }
-
- /**
- * @param rec the SAM record
- * @return the mate alignment start (1-based, inclusive) adjusted for clipped bases. For example if the mate
- * has an alignment start of 100 but the first 4 bases were clipped (hard or soft clipped)
- * then this method will return 96.
- *
- * Invalid to call on an unmapped read.
- */
- public static int getMateUnclippedStart(final SAMRecord rec) {
- if (rec.getMateUnmappedFlag())
- throw new RuntimeException("getMateUnclippedStart called on an unmapped mate.");
- final Cigar mateCigar = getMateCigar(rec);
- if (mateCigar == null) {
- throw new SAMException("Mate CIGAR (Tag MC) not found.");
- }
- return SAMUtils.getUnclippedStart(rec.getMateAlignmentStart(), mateCigar);
- }
-
-
- /**
- * @param rec the SAM record
- * @return the mate alignment end (1-based, inclusive) adjusted for clipped bases. For example if the mate
- * has an alignment end of 100 but the last 7 bases were clipped (hard or soft clipped)
- * then this method will return 107.
- *
- * Invalid to call on an unmapped read.
- */
- public static int getMateUnclippedEnd(final SAMRecord rec) {
- if (rec.getMateUnmappedFlag()) {
- throw new RuntimeException("getMateUnclippedEnd called on an unmapped mate.");
- }
- final Cigar mateCigar = SAMUtils.getMateCigar(rec);
- if (mateCigar == null) {
- throw new SAMException("Mate CIGAR (Tag MC) not found.");
- }
- return SAMUtils.getUnclippedEnd(getMateAlignmentEnd(rec), mateCigar);
- }
-
- /**
- * @param rec the SAM record
- * Returns blocks of the mate sequence that have been aligned directly to the
- * reference sequence. Note that clipped portions of the mate and inserted and
- * deleted bases (vs. the reference) are not represented in the alignment blocks.
- */
- public static List<AlignmentBlock> getMateAlignmentBlocks(final SAMRecord rec) {
- return getAlignmentBlocks(getMateCigar(rec), rec.getMateAlignmentStart(), "mate cigar");
- }
-
- /**
- * Run all validations of the mate's CIGAR. These include validation that the CIGAR makes sense independent of
- * placement, plus validation that CIGAR + placement yields all bases with M operator within the range of the reference.
- * @param rec the SAM record
- * @param cigar The cigar containing the alignment information
- * @param referenceIndex The reference index
- * @param alignmentBlocks The alignment blocks (parsed from the cigar)
- * @param recordNumber For error reporting. -1 if not known.
- * @param cigarTypeName For error reporting. "Read CIGAR" or "Mate Cigar"
- * @return List of errors, or null if no errors.
- */
-
- public static List<SAMValidationError> validateCigar(final SAMRecord rec,
- final Cigar cigar,
- final Integer referenceIndex,
- final List<AlignmentBlock> alignmentBlocks,
- final long recordNumber,
- final String cigarTypeName) {
- // Don't know line number, and don't want to force read name to be decoded.
- List<SAMValidationError> ret = cigar.isValid(rec.getReadName(), recordNumber);
- if (referenceIndex != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- final SAMSequenceRecord sequence = rec.getHeader().getSequence(referenceIndex);
- final int referenceSequenceLength = sequence.getSequenceLength();
- for (final AlignmentBlock alignmentBlock : alignmentBlocks) {
- if (alignmentBlock.getReferenceStart() + alignmentBlock.getLength() - 1 > referenceSequenceLength) {
- if (ret == null) ret = new ArrayList<SAMValidationError>();
- ret.add(new SAMValidationError(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE,
- cigarTypeName + " M operator maps off end of reference", rec.getReadName(), recordNumber));
- break;
- }
- }
- }
- return ret;
- }
-
- /**
- * Run all validations of the mate's CIGAR. These include validation that the CIGAR makes sense independent of
- * placement, plus validation that CIGAR + placement yields all bases with M operator within the range of the reference.
- * @param rec the SAM record
- * @param recordNumber For error reporting. -1 if not known.
- * @return List of errors, or null if no errors.
- */
- public static List<SAMValidationError> validateMateCigar(final SAMRecord rec, final long recordNumber) {
- List<SAMValidationError> ret = null;
-
- if (rec.getValidationStringency() != SAMFileReader.ValidationStringency.SILENT) {
- if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) { // The mateCigar will be defined if the mate is mapped
- if (getMateCigarString(rec) != null) {
- ret = SAMUtils.validateCigar(rec, getMateCigar(rec), rec.getMateReferenceIndex(), getMateAlignmentBlocks(rec), recordNumber, "Mate CIGAR");
- }
- } else {
- if (getMateCigarString(rec) != null) {
- ret = new ArrayList<SAMValidationError>();
- if (rec.getMateUnmappedFlag()) {
- // If the Mate is unmapped, and the Mate Cigar String (MC Attribute) exists, that is a validation error.
- ret.add(new SAMValidationError(SAMValidationError.Type.MATE_CIGAR_STRING_INVALID_PRESENCE,
- "Mate CIGAR String (MC Attribute) present for a read whose mate is unmapped", rec.getReadName(), recordNumber));
- }
- else {
- // If the Mate is not paired, and the Mate Cigar String (MC Attribute) exists, that is a validation error.
- ret.add(new SAMValidationError(SAMValidationError.Type.MATE_CIGAR_STRING_INVALID_PRESENCE,
- "Mate CIGAR String (MC Attribute) present for a read that is not paired", rec.getReadName(), recordNumber));
- }
- }
- }
- }
-
- return ret;
- }
-
- /**
- * Checks to see if it is valid for this record to have a mate CIGAR (MC) and then if there is a mate CIGAR available. This is done by
- * checking that this record is paired, its mate is mapped, and that it returns a non-null mate CIGAR.
- * @param rec
- * @return
- */
- public static boolean hasMateCigar(SAMRecord rec) {
- // NB: use getMateCigarString rather than getMateCigar to avoid validation.
- return (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag() && null != SAMUtils.getMateCigarString(rec));
- }
-}
diff --git a/src/java/net/sf/samtools/SAMValidationError.java b/src/java/net/sf/samtools/SAMValidationError.java
deleted file mode 100644
index 3690d81..0000000
--- a/src/java/net/sf/samtools/SAMValidationError.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Class that encapsulates a validation error message as well as a type code so that
- * errors can be aggregated by type.
- *
- * @author Doug Voet
- */
-public class SAMValidationError {
- public enum Severity {
- WARNING, ERROR
- }
-
- public enum Type {
- /** quality encodings out of range; appear to be Solexa or Illumina when Phread expected */
- INVALID_QUALITY_FORMAT(Severity.WARNING),
-
- /** proper pair flag set for unpaired read */
- INVALID_FLAG_PROPER_PAIR,
-
- /** mate unmapped flag set when mate is mapped or not set when mate is not mapped */
- INVALID_FLAG_MATE_UNMAPPED,
-
- /** mate unmapped flag does not match read unmapped flag of mate */
- MISMATCH_FLAG_MATE_UNMAPPED,
-
- /** mate negative strand flag set for unpaired read */
- INVALID_FLAG_MATE_NEG_STRAND,
-
- /** mate negative strand flag does not match read negative strand flag of mate */
- MISMATCH_FLAG_MATE_NEG_STRAND,
-
- /** first of pair flag set for unpaired read */
- INVALID_FLAG_FIRST_OF_PAIR,
-
- /** second of pair flag set for unpaired read */
- INVALID_FLAG_SECOND_OF_PAIR,
-
- /** pair flag set but not marked as first or second of pair */
- PAIRED_READ_NOT_MARKED_AS_FIRST_OR_SECOND(Severity.WARNING),
-
- /** not primary alignment flag set for unmapped read */
- INVALID_FLAG_NOT_PRIM_ALIGNMENT,
-
- /** supplementary alignment flag set for unmapped read */
- INVALID_FLAG_SUPPLEMENTARY_ALIGNMENT,
-
- /** mapped read flat not set for mapped read */
- INVALID_FLAG_READ_UNMAPPED,
-
- /**
- * inferred insert size is out of range
- * @see SAMRecord#MAX_INSERT_SIZE
- */
- INVALID_INSERT_SIZE,
-
- /** mapping quality set for unmapped read or is >= 256 */
- INVALID_MAPPING_QUALITY,
-
- /** CIGAR string is empty for mapped read or not empty of unmapped read, or other CIGAR badness. */
- INVALID_CIGAR,
-
- /** CIGAR string contains I followed by D, or vice versa */
- ADJACENT_INDEL_IN_CIGAR(Severity.WARNING),
-
- /** mate reference index (MRNM) set for unpaired read */
- INVALID_MATE_REF_INDEX,
-
- /** mate reference index (MRNM) does not match reference index of mate */
- MISMATCH_MATE_REF_INDEX,
-
- /** reference index not found in sequence dictionary */
- INVALID_REFERENCE_INDEX,
-
- /** alignment start is can not be correct */
- INVALID_ALIGNMENT_START,
-
- /** mate alignment does not match alignment start of mate */
- MISMATCH_MATE_ALIGNMENT_START,
-
- /** the record's mate fields do not match the corresponding fields of the mate */
- MATE_FIELD_MISMATCH,
-
- /** the NM tag (nucleotide differences) is incorrect */
- INVALID_TAG_NM,
-
- /** the NM tag (nucleotide differences) is missing */
- MISSING_TAG_NM(Severity.WARNING),
-
- /** the sam/bam file is missing the header */
- MISSING_HEADER,
-
- /** there is no sequence dictionary in the header */
- MISSING_SEQUENCE_DICTIONARY,
-
- /** the header is missing read group information */
- MISSING_READ_GROUP,
-
- /** the record is out of order */
- RECORD_OUT_OF_ORDER,
-
- /** A read group ID on a SAMRecord is not found in the header */
- READ_GROUP_NOT_FOUND,
-
- /** A SAMRecord is found with no read group id */
- RECORD_MISSING_READ_GROUP(Severity.WARNING),
-
- /** Indexing bin set on SAMRecord does not agree with computed value. */
- INVALID_INDEXING_BIN,
-
- MISSING_VERSION_NUMBER,
-
- INVALID_VERSION_NUMBER,
-
- TRUNCATED_FILE,
-
- MISMATCH_READ_LENGTH_AND_QUALS_LENGTH,
-
- EMPTY_READ,
-
- /**
- * Bases corresponding to M operator in CIGAR are beyond the end of the reference.
- */
- CIGAR_MAPS_OFF_REFERENCE,
-
- /** Length of E2 (secondary base calls) and U2 (secondary base quals) tag values should match read length */
- MISMATCH_READ_LENGTH_AND_E2_LENGTH,
- MISMATCH_READ_LENGTH_AND_U2_LENGTH,
-
- /** Secondary base calls should not be the same as primary, unless one or the other is N */
- E2_BASE_EQUALS_PRIMARY_BASE(Severity.WARNING),
-
- /** BAM appears to be healthy, but is an older file so doesn't have terminator block. */
- BAM_FILE_MISSING_TERMINATOR_BLOCK(Severity.WARNING),
-
- /** Header record is not one of the standard types */
- UNRECOGNIZED_HEADER_TYPE,
-
- /** Header tag does not have colon */
- POORLY_FORMATTED_HEADER_TAG,
-
- /** Header tag appears more than once in header line with different value */
- HEADER_TAG_MULTIPLY_DEFINED,
-
- HEADER_RECORD_MISSING_REQUIRED_TAG,
-
- /** Date string is not ISO-8601 */
- INVALID_DATE_STRING(Severity.WARNING),
-
- /** Unsigned integer tag value is deprecated in BAM. */
- TAG_VALUE_TOO_LARGE,
-
- /** Invalid virtualFilePointer in index */
- INVALID_INDEX_FILE_POINTER,
-
- /** PI tag value is not numeric. */
- INVALID_PREDICTED_MEDIAN_INSERT_SIZE,
-
- /** Same read group id appears more than once */
- DUPLICATE_READ_GROUP_ID,
-
- /** The read group is missing its PL (platform unit) field */
- MISSING_PLATFORM_VALUE,
-
- /** The read group has an invalid value set for its PL field */
- INVALID_PLATFORM_VALUE,
-
- /** Same program group id appears more than once */
- DUPLICATE_PROGRAM_GROUP_ID,
-
- /** Read is marked as paired, but its pair was not found. */
- MATE_NOT_FOUND,
-
- /** Both mates are marked as first of pair, or both mates are marked as second of pair. */
- MATES_ARE_SAME_END,
-
- /** The Cigar String in the MC Tag does not match the Cigar String for the mate of this read. */
- MISMATCH_MATE_CIGAR_STRING,
-
- /** There is a Cigar String (stored in the MC Tag) for a read whose mate is NOT mapped. */
- MATE_CIGAR_STRING_INVALID_PRESENCE;
-
- public final Severity severity;
-
- private Type() {
- this.severity = Severity.ERROR;
- }
-
- private Type(final Severity severity) {
- this.severity = severity;
- }
-
- /**
- * @return Format for writing to histogram summary output.
- */
- public String getHistogramString() {
- return this.severity.name() + ":" + this.name();
- }
- }
-
- private final Type type;
- private final String message;
- private final String readName;
- private long recordNumber = -1;
- private String source;
-
- /**
- * Construct a SAMValidationError with unknown record number.
- * @param type
- * @param message
- * @param readName May be null if readName is not known.
- */
- public SAMValidationError(final Type type, final String message, final String readName) {
- this.type = type;
- this.message = message;
- this.readName = readName;
- }
-
- /**
- * Construct a SAMValidationError with possibly-known record number.
- * @param type
- * @param message
- * @param readName May be null if readName is not known.
- * @param recordNumber Position of the record in the SAM file it has been read from. -1 if not known.
- */
- public SAMValidationError(final Type type, final String message, final String readName, final long recordNumber) {
- this(type, message, readName);
- this.recordNumber = recordNumber;
- }
-
- public String toString() {
- final StringBuilder builder = new StringBuilder();
- builder.append(type.severity.toString());
- builder.append(": ");
- if (source != null) {
- builder.append("File ").append(source.toString()).append(", ");
- }
- if (recordNumber > 0) {
- builder.append("Record ").append(recordNumber).append(", ");
- }
- if (readName != null) {
- builder.append("Read name ").append(readName).append(", ");
- }
- return builder.append(message).toString();
- }
-
- public Type getType() { return type; }
- public String getMessage() { return message; }
-
- /** may be null */
- public String getReadName() { return readName; }
-
- /** 1-based. -1 if not known. */
- public long getRecordNumber() { return recordNumber; }
-
- public void setRecordNumber(final long recordNumber) { this.recordNumber = recordNumber; }
-
- public String getSource() {
- return source;
- }
-
- public void setSource(final String source) {
- this.source = source;
- }
-}
diff --git a/src/java/net/sf/samtools/SQTagUtil.java b/src/java/net/sf/samtools/SQTagUtil.java
deleted file mode 100644
index 72659b1..0000000
--- a/src/java/net/sf/samtools/SQTagUtil.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * Utility methods for encoding and decoding the SQ tag value of SAMRecord.
- *
- * @author alecw at broadinstitute.org
- */
-public class SQTagUtil {
- /**
- * The ordinals of these are stored in the high-order 2 bits of each byte of the SQ tag.
- * Note that these have the convenient property that the binary complement of each ordinal, masked to
- * the two low-order bits, is the complementary base.
- */
- public enum SQBase {
- SQ_A('A'), SQ_C('C'), SQ_G('G'), SQ_T('T');
- private final Character base;
-
- SQBase(final Character base) {
- this.base = base;
- }
-
- public Character getBase() {
- return base;
- }
- }
-
- /**
- * For complementing SQBase ordinals.
- */
- private static final int COMPLEMENT_MASK = 3;
-
- private static final int QUALITY_MASK = 0x3f;
- public static final byte MAX_QUALITY = QUALITY_MASK;
- private static final int BASE_INDEX_SHIFT = 6;
-
- /**
- * Convert a pair of likelihoods into a value suitable for passing to baseAndProbDiffToSqValue.
- * @param secondBestLikelihood Probability of the 2nd-best base call. 1 > secondBestLikelihood > thirdBestLikelihood.
- * @param thirdBestLikelihood Probability of the 3rd-best base call. thirdBestLikelihood > 0.
- * @return ratio of input probabilities for storing in SQ tag.
- */
- public static byte sqScaledProbabilityRatio(final double secondBestLikelihood, final double thirdBestLikelihood) {
- if (secondBestLikelihood >= 1.0 || thirdBestLikelihood <= 0 || thirdBestLikelihood > secondBestLikelihood) {
- throw new IllegalArgumentException("Likelihoods out of range. second best: " + secondBestLikelihood +
- "; third best: " + thirdBestLikelihood);
- }
- // Cap value at QUALITY_MASK
- return (byte)(Math.min(Math.round(-10.0 * Math.log10(thirdBestLikelihood/secondBestLikelihood)), QUALITY_MASK));
- }
-
- /**
- * Compress a base and a log probabiliy difference (-10log10(p3/p2)) into
- * a single byte so that it can be output in a SAMRecord's SQ field.
- *
- * @param base the 2nd-best base.
- * @param probRatio the log probability difference between the secondary and tertiary bases (-10log10(p3/p2)),
- * rounded to an integer and capped so it fits in 6 bits.
- * @return a byte containing the index and the log probability difference.
- */
- public static byte baseAndProbDiffToSqValue(final SQBase base, final byte probRatio) {
- return baseAndProbDiffToSqValue(base.ordinal(), probRatio);
- }
-
- /**
- * Compress a base and a log probabiliy difference (-10log10(p3/p2)) into
- * a single byte so that it can be output in a SAMRecord's SQ field.
- *
- * @param base the 2nd-best base (A=0, C=1, G=2, T=3).
- * @param probRatio the log probability difference between the secondary and tertiary bases (-10log10(p3/p2)),
- * rounded to an integer and capped so it fits in 6 bits. If this value is > MAX_QUALITY, it is truncated to that.
- * @return a byte containing the index and the log probability difference.
- */
- public static byte baseAndProbDiffToSqValue(final int base, final byte probRatio) {
- return (byte)((base << BASE_INDEX_SHIFT) | Math.min(probRatio, QUALITY_MASK));
- }
-
- /**
- * Retrieve SQ-scaled probability ratio from SQ value.
- * @param sqValue
- * @return the log probability difference between the secondary and tertiary bases (-10log10(p3/p2)).
- */
- public static byte sqValueToProbRatio(final byte sqValue) {
- return (byte)(sqValue & QUALITY_MASK);
- }
-
- /**
- * Retrieve the 2nd-best base call from SQ value.
- * @param sqValue
- * @return 2nd-best base call.
- */
- public static SQBase sqValueToBase(final byte sqValue) {
- return SQBase.values()[sqValueToBaseOrdinal(sqValue)];
- }
-
- /**
- * Retrieve the 2nd-best base call from SQ value.
- * @param sqValue
- * @return Ordinal of 2nd-best base call.
- */
- public static int sqValueToBaseOrdinal(final byte sqValue) {
- return (sqValue & 0xff) >>> BASE_INDEX_SHIFT;
- }
-
-
- /**
- * Reverses and complements the sqValues in place.
- * @param sqArray Array of SQ-values, with 2nd-best base in high-order 2 bits, and probability diff
- * in low-order 6 bits.
- */
- public static void reverseComplementSqArray(final byte[] sqArray) {
- final int lastIndex = sqArray.length - 1;
-
- int i, j;
- for (i=0, j=lastIndex; i<j; ++i, --j) {
- final byte tmp = complementSqValue(sqArray[i]);
- sqArray[i] = complementSqValue(sqArray[j]);
- sqArray[j] = tmp;
- }
- if (sqArray.length % 2 == 1) {
- sqArray[i] = complementSqValue(sqArray[i]);
- }
- }
-
- private static byte complementSqValue(final byte sqValue) {
- final byte probDiff = sqValueToProbRatio(sqValue);
- final int baseOrdinal = sqValueToBaseOrdinal(sqValue);
- final int complementOrdinal = COMPLEMENT_MASK & ~baseOrdinal;
- return baseAndProbDiffToSqValue(complementOrdinal, probDiff);
- }
-
-}
diff --git a/src/java/net/sf/samtools/SamPairUtil.java b/src/java/net/sf/samtools/SamPairUtil.java
deleted file mode 100644
index e93028f..0000000
--- a/src/java/net/sf/samtools/SamPairUtil.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Utility methods for pairs of SAMRecords
- */
-public class SamPairUtil {
-
- /**
- * The possible orientations of paired reads.
- *
- * F = mapped to forward strand
- * R = mapped to reverse strand
- *
- * FR means the read that's mapped to the forward strand comes before the
- * read mapped to the reverse strand when their 5'-end coordinates are
- * compared.
- */
- public static enum PairOrientation
- {
- FR, // ( 5' --F--> <--R-- 5' ) - aka. innie
- RF, // ( <--R-- 5' 5' --F--> ) - aka. outie
- TANDEM; // ( 5' --F--> 5' --F--> or ( <--R-- 5' <--R-- 5' )
-
- };
-
-
- /**
- * Computes the pair orientation of the given SAMRecord.
- * @param r
- * @return PairOrientation of the given SAMRecord.
- * @throws IllegalArgumentException If the record is not a paired read, or
- * one or both reads are unmapped.
- */
- public static PairOrientation getPairOrientation(SAMRecord r)
- {
- final boolean readIsOnReverseStrand = r.getReadNegativeStrandFlag();
-
- if(r.getReadUnmappedFlag() || !r.getReadPairedFlag() || r.getMateUnmappedFlag()) {
- throw new IllegalArgumentException("Invalid SAMRecord: " + r.getReadName() + ". This method only works for SAMRecords " +
- "that are paired reads with both reads aligned.");
- }
-
- if(readIsOnReverseStrand == r.getMateNegativeStrandFlag() ) {
- return PairOrientation.TANDEM;
- }
-
- final long positiveStrandFivePrimePos = ( readIsOnReverseStrand
- ? r.getMateAlignmentStart() //mate's 5' position ( x---> )
- : r.getAlignmentStart() ); //read's 5' position ( x---> )
-
- final long negativeStrandFivePrimePos = ( readIsOnReverseStrand
- ? r.getAlignmentEnd() //read's 5' position ( <---x )
- : r.getAlignmentStart() + r.getInferredInsertSize() ); //mate's 5' position ( <---x )
-
- return ( positiveStrandFivePrimePos < negativeStrandFivePrimePos
- ? PairOrientation.FR
- : PairOrientation.RF );
- }
-
-
-
- // TODO: KT and TF say this is more complicated than what I have here
- public static boolean isProperPair(final SAMRecord firstEnd, final SAMRecord secondEnd,
- final List<PairOrientation> expectedOrientations) {
- // are both records mapped?
- if (firstEnd.getReadUnmappedFlag() || secondEnd.getReadUnmappedFlag()) {
- return false;
- }
- if (firstEnd.getReferenceName().equals(SAMRecord.NO_ALIGNMENT_REFERENCE_NAME)) {
- return false;
- }
- // AND are they both mapped to the same chromosome
-
- if (!firstEnd.getReferenceName().equals(secondEnd.getReferenceName())) {
- return false;
- }
-
- // AND is the pair orientation in the set of expected orientations
- final PairOrientation actual = getPairOrientation(firstEnd);
- return expectedOrientations.contains(actual);
- }
-
- public static void assertMate(final SAMRecord firstOfPair, final SAMRecord secondOfPair) {
- // Validate paired reads arrive as first of pair, then second of pair
-
- if (firstOfPair == null) {
- throw new SAMException(
- "First record does not exist - cannot perform mate assertion!");
- } else if (secondOfPair == null) {
- throw new SAMException(
- firstOfPair.toString() + " is missing its mate");
- } else if (!firstOfPair.getReadPairedFlag()) {
- throw new SAMException(
- "First record is not marked as paired: " + firstOfPair.toString());
- } else if (!secondOfPair.getReadPairedFlag()) {
- throw new SAMException(
- "Second record is not marked as paired: " + secondOfPair.toString());
- } else if (!firstOfPair.getFirstOfPairFlag()) {
- throw new SAMException(
- "First record is not marked as first of pair: " + firstOfPair.toString());
- } else if (!secondOfPair.getSecondOfPairFlag()) {
- throw new SAMException(
- "Second record is not marked as second of pair: " + secondOfPair.toString());
- } else if (!firstOfPair.getReadName().equals(secondOfPair.getReadName())) {
- throw new SAMException(
- "First [" + firstOfPair.getReadName() + "] and Second [" +
- secondOfPair.getReadName() + "] readnames do not match!");
- }
- }
-
- /**
- * Obtain the secondOfPair mate belonging to the firstOfPair SAMRecord
- * (assumed to be in the next element of the specified samRecordIterator)
- * @param samRecordIterator the iterator assumed to contain the secondOfPair SAMRecord in the
- * next element in the iteration
- * @param firstOfPair the firstOfPair SAMRecord
- * @return the secondOfPair SAMRecord
- * @throws SAMException when the secondOfPair mate cannot be obtained due to assertion failures
- */
- public static SAMRecord obtainAssertedMate(final Iterator<SAMRecord> samRecordIterator,
- final SAMRecord firstOfPair) {
- if (samRecordIterator.hasNext()) {
- final SAMRecord secondOfPair = samRecordIterator.next();
- assertMate(firstOfPair, secondOfPair);
- return secondOfPair;
- } else {
- throw new SAMException(
- "Second record does not exist: " + firstOfPair.getReadName());
- }
- }
-
- /**
- * Compute SAMRecord insert size
- * @param firstEnd
- * @param secondEnd
- * @return note that when storing insert size on the secondEnd, the return value must be negated.
- */
- public static int computeInsertSize(final SAMRecord firstEnd, final SAMRecord secondEnd) {
- if (firstEnd.getReadUnmappedFlag() || secondEnd.getReadUnmappedFlag()) {
- return 0;
- }
- if (!firstEnd.getReferenceName().equals(secondEnd.getReferenceName())) {
- return 0;
- }
-
- final int firstEnd5PrimePosition = firstEnd.getReadNegativeStrandFlag()? firstEnd.getAlignmentEnd(): firstEnd.getAlignmentStart();
- final int secondEnd5PrimePosition = secondEnd.getReadNegativeStrandFlag()? secondEnd.getAlignmentEnd(): secondEnd.getAlignmentStart();
-
- final int adjustment = (secondEnd5PrimePosition >= firstEnd5PrimePosition) ? +1 : -1;
- return secondEnd5PrimePosition - firstEnd5PrimePosition + adjustment;
- }
-
- /**
- * Write the mate info for two SAMRecords
- * @param rec1 the first SAM record
- * @param rec2 the second SAM record
- * @param header the SAM file header
- * @param setMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
- */
- public static void setMateInfo(final SAMRecord rec1, final SAMRecord rec2, final SAMFileHeader header, final boolean setMateCigar) {
- // If neither read is unmapped just set their mate info
- if (!rec1.getReadUnmappedFlag() && !rec2.getReadUnmappedFlag()) {
- rec1.setMateReferenceIndex(rec2.getReferenceIndex());
- rec1.setMateAlignmentStart(rec2.getAlignmentStart());
- rec1.setMateNegativeStrandFlag(rec2.getReadNegativeStrandFlag());
- rec1.setMateUnmappedFlag(false);
- rec1.setAttribute(SAMTag.MQ.name(), rec2.getMappingQuality());
-
- rec2.setMateReferenceIndex(rec1.getReferenceIndex());
- rec2.setMateAlignmentStart(rec1.getAlignmentStart());
- rec2.setMateNegativeStrandFlag(rec1.getReadNegativeStrandFlag());
- rec2.setMateUnmappedFlag(false);
- rec2.setAttribute(SAMTag.MQ.name(), rec1.getMappingQuality());
-
- if (setMateCigar) {
- rec1.setAttribute(SAMTag.MC.name(), rec2.getCigarString());
- rec2.setAttribute(SAMTag.MC.name(), rec1.getCigarString());
- }
- else {
- rec1.setAttribute(SAMTag.MC.name(), null);
- rec2.setAttribute(SAMTag.MC.name(), null);
- }
- }
- // Else if they're both unmapped set that straight
- else if (rec1.getReadUnmappedFlag() && rec2.getReadUnmappedFlag()) {
- rec1.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec1.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec1.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec1.setMateAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec1.setMateNegativeStrandFlag(rec2.getReadNegativeStrandFlag());
- rec1.setMateUnmappedFlag(true);
- rec1.setAttribute(SAMTag.MQ.name(), null);
- rec1.setAttribute(SAMTag.MC.name(), null);
- rec1.setInferredInsertSize(0);
-
- rec2.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec2.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec2.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- rec2.setMateAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
- rec2.setMateNegativeStrandFlag(rec1.getReadNegativeStrandFlag());
- rec2.setMateUnmappedFlag(true);
- rec2.setAttribute(SAMTag.MQ.name(), null);
- rec2.setAttribute(SAMTag.MC.name(), null);
- rec2.setInferredInsertSize(0);
- }
- // And if only one is mapped copy it's coordinate information to the mate
- else {
- final SAMRecord mapped = rec1.getReadUnmappedFlag() ? rec2 : rec1;
- final SAMRecord unmapped = rec1.getReadUnmappedFlag() ? rec1 : rec2;
- unmapped.setReferenceIndex(mapped.getReferenceIndex());
- unmapped.setAlignmentStart(mapped.getAlignmentStart());
-
- mapped.setMateReferenceIndex(unmapped.getReferenceIndex());
- mapped.setMateAlignmentStart(unmapped.getAlignmentStart());
- mapped.setMateNegativeStrandFlag(unmapped.getReadNegativeStrandFlag());
- mapped.setMateUnmappedFlag(true);
- // For the mapped read, set it's mateCigar to null, since the other read must be unmapped
- mapped.setAttribute(SAMTag.MC.name(), null);
- mapped.setInferredInsertSize(0);
-
- unmapped.setMateReferenceIndex(mapped.getReferenceIndex());
- unmapped.setMateAlignmentStart(mapped.getAlignmentStart());
- unmapped.setMateNegativeStrandFlag(mapped.getReadNegativeStrandFlag());
- unmapped.setMateUnmappedFlag(false);
- // For the unmapped read, set it's mateCigar to the mate's Cigar, since the mate must be mapped
- if (setMateCigar) unmapped.setAttribute(SAMTag.MC.name(), mapped.getCigarString());
- else unmapped.setAttribute(SAMTag.MC.name(), null);
- unmapped.setInferredInsertSize(0);
- }
-
- final int insertSize = SamPairUtil.computeInsertSize(rec1, rec2);
- rec1.setInferredInsertSize(insertSize);
- rec2.setInferredInsertSize(-insertSize);
- }
-
- /**
- * Write the mate info for two SAMRecords. This will always clear/remove any mate cigar tag that is present.
- * @param rec1 the first SAM record
- * @param rec2 the second SAM record
- * @param header the SAM file header
- */
- public static void setMateInfo(final SAMRecord rec1, final SAMRecord rec2, final SAMFileHeader header) {
- setMateInfo(rec1, rec2, header, false);
- }
-
- /**
- * Sets mate pair information appropriately on a supplemental SAMRecord (e.g. from a split alignment)
- * using the primary alignment of the read's mate.
- * @param supplemental a supplemental alignment for the mate pair of the primary supplied
- * @param matePrimary the primary alignment of the the mate pair of the supplemental
- */
- public static void setMateInformationOnSupplementalAlignment( final SAMRecord supplemental,
- final SAMRecord matePrimary) {
- supplemental.setMateReferenceIndex(matePrimary.getReferenceIndex());
- supplemental.setMateAlignmentStart(matePrimary.getAlignmentStart());
- supplemental.setMateNegativeStrandFlag(matePrimary.getReadNegativeStrandFlag());
- supplemental.setMateUnmappedFlag(matePrimary.getReadUnmappedFlag());
- supplemental.setInferredInsertSize(-matePrimary.getInferredInsertSize());
- }
-
- /**
- * This method will clear any mate cigar already present.
- */
- public static void setProperPairAndMateInfo(final SAMRecord rec1, final SAMRecord rec2,
- final SAMFileHeader header,
- final List<PairOrientation> exepectedOrientations) {
- setProperPairAndMateInfo(rec1, rec2, header, exepectedOrientations, false);
- }
-
- /**
- * @param rec1
- * @param rec2
- * @param header
- * @param exepectedOrientations
- * @param addMateCigar true if we are to update/create the Mate CIGAR (MC) optional tag, false if we are to clear any mate cigar tag that is present.
- */
- public static void setProperPairAndMateInfo(final SAMRecord rec1, final SAMRecord rec2,
- final SAMFileHeader header,
- final List<PairOrientation> exepectedOrientations,
- final boolean addMateCigar) {
- setMateInfo(rec1, rec2, header, addMateCigar);
- setProperPairFlags(rec1, rec2, exepectedOrientations);
- }
-
- public static void setProperPairFlags(final SAMRecord rec1, final SAMRecord rec2, final List<PairOrientation> expectedOrientations) {
- final boolean properPair = (!rec1.getReadUnmappedFlag() && !rec2.getReadUnmappedFlag())
- ? isProperPair(rec1, rec2, expectedOrientations)
- : false;
- rec1.setProperPairFlag(properPair);
- rec2.setProperPairFlag(properPair);
- }
-}
diff --git a/src/java/net/sf/samtools/SecondaryOrSupplementarySkippingIterator.java b/src/java/net/sf/samtools/SecondaryOrSupplementarySkippingIterator.java
deleted file mode 100644
index f5899f6..0000000
--- a/src/java/net/sf/samtools/SecondaryOrSupplementarySkippingIterator.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.PeekIterator;
-
-/**
- * Wrapper around SAMRecord iterator that skips over secondary and supplementary elements.
- * This iterator conflates a filtering iterator and a peekable iterator. It would be cleaner to
- * handle those concerns separately. This class should be viewed as a replacement for NotPrimarySkippingIterator,
- * in that we did not want to change the functionality of NPSI to no longer match its name
- */
-public class SecondaryOrSupplementarySkippingIterator {
- private final PeekIterator<SAMRecord> it;
-
- public SecondaryOrSupplementarySkippingIterator(final CloseableIterator<SAMRecord> underlyingIt) {
- it = new PeekIterator<SAMRecord>(underlyingIt);
- skipAnyNotprimary();
- }
-
- public boolean hasCurrent() {
- return it.hasNext();
- }
-
- public SAMRecord getCurrent() {
- assert(hasCurrent());
- return it.peek();
- }
-
- public boolean advance() {
- it.next();
- skipAnyNotprimary();
- return hasCurrent();
- }
-
- private void skipAnyNotprimary() {
- while (it.hasNext() && it.peek().isSecondaryOrSupplementary()) {
- it.next();
- }
- }
-
-}
diff --git a/src/java/net/sf/samtools/StreamInflatingIndexingOutputStream.java b/src/java/net/sf/samtools/StreamInflatingIndexingOutputStream.java
deleted file mode 100644
index a422e9d..0000000
--- a/src/java/net/sf/samtools/StreamInflatingIndexingOutputStream.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package net.sf.samtools;
-
-
-import net.sf.samtools.util.RuntimeIOException;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-
-/**
- * OutputStream implementation that writes output to an underlying output stream while also copying the
- * same bytes to a PipedOutputStream that routes the data back into an Indexer to generate a BAMIndex
- * by inflating and decoding the stream and feeding the SAMRecords to a BAMIndexer.
- */
-class StreamInflatingIndexingOutputStream extends OutputStream {
- private final OutputStream s1;
- private final PipedOutputStream s2;
- private final Thread thread;
-
- public StreamInflatingIndexingOutputStream(final OutputStream s1, final File indexFile) {
- try {
- this.s1 = s1;
- this.s2 = new PipedOutputStream();
- final PipedInputStream pin = new PipedInputStream(this.s2, Defaults.NON_ZERO_BUFFER_SIZE);
- this.thread = new Thread(new Indexer(indexFile, pin), "BamIndexingThread");
- this.thread.start();
- }
- catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- }
- }
-
- @Override public final void write(final int b) throws IOException { this.s1.write(b); this.s2.write(b); }
- @Override public final void write(final byte[] b) throws IOException { this.s1.write(b); this.s2.write(b); }
- @Override public final void write(final byte[] b, final int off, final int len) throws IOException { this.s1.write(b, off, len); this.s2.write(b, off, len); }
- @Override public final void flush() throws IOException { this.s1.flush(); this.s2.flush(); }
-
- @Override public final void close() throws IOException {
- this.s1.close();
- this.s2.close();
-
- try { this.thread.join(); }
- catch (final InterruptedException ie) { throw new RuntimeException(ie); }
- }
-}
-
-/**
- * A little class that takes an InputStream from which it reads a BAM file, generates
- * a BAMIndex and then writes the index to the File provided. All operations are designed
- * to be carried out in a separate thread.
- */
-class Indexer implements Runnable {
- private final File index;
- private final InputStream stream;
-
- /** Constructs an indexer that reads from the stream provided and writes an index to the File provided. */
- Indexer(final File index, final InputStream stream) {
- this.index = index;
- this.stream = stream;
- }
-
- /** Runnable implementation that reads the entire stream and writes the index. */
- @Override
- public void run() {
- final SAMFileReader in = new SAMFileReader(this.stream);
- in.enableFileSource(true);
- in.setValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- in.enableCrcChecking(false);
- final BAMIndexer indexer = new BAMIndexer(this.index, in.getFileHeader());
- for (final SAMRecord rec : in) {
- indexer.processAlignment(rec);
- }
-
- indexer.finish();
- in.close();
- }
-}
diff --git a/src/java/net/sf/samtools/TagValueAndUnsignedArrayFlag.java b/src/java/net/sf/samtools/TagValueAndUnsignedArrayFlag.java
deleted file mode 100644
index c5ca6da..0000000
--- a/src/java/net/sf/samtools/TagValueAndUnsignedArrayFlag.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-/**
- * CVO to use as a method return value.
- */
-public class TagValueAndUnsignedArrayFlag {
- public final Object value;
- public final boolean isUnsignedArray;
-
- TagValueAndUnsignedArrayFlag(Object value, boolean unsignedArray) {
- this.value = value;
- isUnsignedArray = unsignedArray;
- }
-
- TagValueAndUnsignedArrayFlag(Object value) {
- this.value = value;
- this.isUnsignedArray = false;
- }
-}
diff --git a/src/java/net/sf/samtools/TextCigarCodec.java b/src/java/net/sf/samtools/TextCigarCodec.java
deleted file mode 100755
index 705f9e5..0000000
--- a/src/java/net/sf/samtools/TextCigarCodec.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.StringUtil;
-
-/**
- * Convert between String and Cigar class representations of CIGAR.
- */
-public class TextCigarCodec
-{
- private static final byte ZERO_BYTE = "0".getBytes()[0];
- private static final byte NINE_BYTE = "9".getBytes()[0];
-
- private static final TextCigarCodec singleton = new TextCigarCodec();
-
- /**
- * It is not necessary to get the singleton but it is preferable to use the same one
- * over and over vs. creating a new object for each BAMRecord. There is no state in this
- * class so this is thread-safe.
- * @return A singleton TextCigarCodec useful for converting Cigar classes to and from strings
- */
- public static TextCigarCodec getSingleton() {
- return singleton;
- }
-
-
- /**
- * Convert from Cigar class representation to String.
- * @param cigar in Cigar class format
- * @return CIGAR in String form ala SAM text file. "*" means empty CIGAR.
- */
- public String encode(final Cigar cigar) {
- if (cigar.isEmpty()) {
- return SAMRecord.NO_ALIGNMENT_CIGAR;
- }
- final StringBuilder ret = new StringBuilder();
- for (final CigarElement cigarElement : cigar.getCigarElements()) {
- ret.append(cigarElement.getLength());
- ret.append(cigarElement.getOperator());
- }
- return ret.toString();
- }
-
- /**
- * Convert from String CIGAR representation to Cigar class representation. Does not
- * do validation beyond the most basic CIGAR string well-formedness, i.e. each operator is
- * valid, and preceded by a decimal length.
- * @param textCigar CIGAR in String form ala SAM text file. "*" means empty CIGAR.
- * @throws RuntimeException if textCigar is invalid at the most basic level.
- * @return cigar in Cigar class format
- */
- public Cigar decode(final String textCigar) {
- if (SAMRecord.NO_ALIGNMENT_CIGAR.equals(textCigar)) {
- return new Cigar();
- }
- final Cigar ret = new Cigar();
- final byte[] cigarBytes = StringUtil.stringToBytes(textCigar);
- for (int i = 0; i < cigarBytes.length; ++i) {
- if (!isDigit(cigarBytes[i])) {
- throw new IllegalArgumentException("Malformed CIGAR string: " + textCigar);
- }
- int length = (cigarBytes[i] - ZERO_BYTE);
- for (++i; isDigit(cigarBytes[i]); ++i) {
- length = (length * 10) + cigarBytes[i] - ZERO_BYTE;
- }
- final CigarOperator operator = CigarOperator.characterToEnum(cigarBytes[i]);
- ret.add(new CigarElement(length, operator));
- }
- return ret;
- }
-
- private boolean isDigit(final byte c) {
- return c >= ZERO_BYTE && c <= NINE_BYTE;
- }
-
-
-
-}
-
-/******************************************************************/
-/**************************[END OF TextCigarCodec.java]*************************/
-/******************************************************************/
diff --git a/src/java/net/sf/samtools/TextTagCodec.java b/src/java/net/sf/samtools/TextTagCodec.java
deleted file mode 100644
index 5157c40..0000000
--- a/src/java/net/sf/samtools/TextTagCodec.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.Iso8601Date;
-import net.sf.samtools.util.StringUtil;
-import net.sf.samtools.util.DateParser;
-
-import java.lang.reflect.Array;
-import java.util.Map;
-import java.util.Date;
-import java.text.DateFormat;
-import java.text.ParseException;
-
-/**
- * Converter between SAM text representation of a tag, and in-memory Object representation.
- * Note that this class is not thread-safe, in that some local variables have been made into instance
- * variables in order to reduce object creation, but it should not ever be the case that the same
- * instance is used in multiple threads.
- */
-public class TextTagCodec {
- private static final int NUM_TAG_FIELDS = 3;
-
- /**
- * This is really a local variable of decode(), but allocated here to reduce allocations.
- */
- private final String[] fields = new String[NUM_TAG_FIELDS];
-
- /**
- * Convert in-memory representation of tag to SAM text representation.
- * @param tagName Two-character tag name.
- * @param value Tag value as approriate Object subclass.
- * @return SAM text String representation, i.e. name:type:value
- */
- public String encode(final String tagName, Object value) {
- final StringBuilder sb = new StringBuilder(tagName);
- sb.append(':');
- char tagType = BinaryTagCodec.getTagValueType(value);
- switch (tagType) {
- case 'c':
- case 'C':
- case 's':
- case 'S':
- case 'I':
- tagType = 'i';
- }
- if (tagType == 'H') {
- // H should never happen anymore.
- value = StringUtil.bytesToHexString((byte[])value);
- } else if (tagType == 'B') {
- value = getArrayType(value, false) + "," + encodeArrayValue(value);
- } else if (tagType == 'i') {
- final long longVal = ((Number) value).longValue();
- if (longVal > Integer.MAX_VALUE || longVal < Integer.MIN_VALUE) {
- throw new SAMFormatException("Value for tag " + tagName + " cannot be stored in an Integer: " + longVal);
- }
- }
- sb.append(tagType);
- sb.append(':');
- sb.append(value.toString());
- return sb.toString();
- }
-
- private char getArrayType(final Object array, final boolean isUnsigned) {
- final char type;
- final Class<?> componentType = array.getClass().getComponentType();
- if (componentType == Float.TYPE) {
- if (isUnsigned) throw new IllegalArgumentException("float array cannot be unsigned");
- return 'f';
- }
- else if (componentType == Byte.TYPE) type = 'c';
- else if (componentType == Short.TYPE) type = 's';
- else if (componentType == Integer.TYPE) type = 'i';
- else throw new IllegalArgumentException("Unrecognized array type " + componentType);
- return (isUnsigned? Character.toUpperCase(type): type);
- }
-
- private String encodeArrayValue(final Object value) {
- final StringBuilder ret = new StringBuilder(Array.get(value, 0).toString());
- final int length = Array.getLength(value);
- for (int i = 1; i < length; ++i) {
- ret.append(",");
- ret.append(Array.get(value, i).toString());
- }
- return ret.toString();
-
- }
-
- private long[] widenToUnsigned(final Object array) {
- final Class<?> componentType = array.getClass().getComponentType();
- final long mask;
- if (componentType == Byte.TYPE) mask = 0xffL;
- else if (componentType == Short.TYPE) mask = 0xffffL;
- else if (componentType == Integer.TYPE) mask = 0xffffffffL;
- else throw new IllegalArgumentException("Unrecognized unsigned array type " + componentType);
- final long[] ret = new long[Array.getLength(array)];
- for (int i = 0; i < ret.length; ++i) {
- ret[i] = Array.getLong(array, i) & mask;
- }
- return ret;
- }
-
- String encodeUnsignedArray(final String tagName, final Object array) {
- if (!array.getClass().isArray()) {
- throw new IllegalArgumentException("Non-array passed to encodeUnsignedArray: " + array.getClass());
- }
- final long[] widened = widenToUnsigned(array);
- return tagName + ":B:" + getArrayType(array, true) + "," + encodeArrayValue(widened);
- }
-
- /**
- * Encode a standard header tag, which should not have a type field.
- * @param tagName 2-character String.
- * @param value Not necessarily a String. Some of these are integers but the type is implied by
- * the tagName. Converted to String with toString().
- * @return Colon-separated text representation suitable for a SAM header, i.e. name:value.
- */
- public String encodeUntypedTag(final String tagName, final Object value) {
- final StringBuilder sb = new StringBuilder(tagName);
- sb.append(':');
- sb.append(value.toString());
- return sb.toString();
- }
-
- /**
- * Convert typed tag in SAM text format (name:type:value) into tag name and Object value representation.
- * @param tag SAM text format name:type:value tag.
- * @return Tag name as 2-character String, and tag value in appropriate class based on tag type.
- * If value is an unsigned array, then the value is a TagValueAndUnsignedArrayFlag object.
- */
- public Map.Entry<String, Object> decode(final String tag) {
- final int numFields = StringUtil.splitConcatenateExcessTokens(tag, fields, ':');
- if (numFields != TextTagCodec.NUM_TAG_FIELDS) {
- throw new SAMFormatException("Not enough fields in tag '" + tag + "'");
- }
- final String key = fields[0];
- final String type = fields[1];
- final String stringVal = fields[2];
- final Object val = convertStringToObject(type, stringVal);
- return new Map.Entry<String, Object>() {
- public String getKey() {
- return key;
- }
-
- public Object getValue() {
- return val;
- }
-
- public Object setValue(final Object o) {
- throw new UnsupportedOperationException();
- }
- };
- }
-
- private Object convertStringToObject(final String type, final String stringVal) {
- if (type.equals("Z")) {
- return stringVal;
- } else if (type.equals("A")) {
- if (stringVal.length() != 1) {
- throw new SAMFormatException("Tag of type A should have a single-character value");
- }
- return stringVal.charAt(0);
- } else if (type.equals("i")) {
- try {
- return new Integer(stringVal);
- } catch (NumberFormatException e) {
- throw new SAMFormatException("Tag of type i should have signed decimal value");
- }
- } else if (type.equals("f")) {
- try {
- return new Float(stringVal);
- } catch (NumberFormatException e) {
- throw new SAMFormatException("Tag of type f should have single-precision floating point value");
- }
- } else if (type.equals("H")) {
- try {
- return StringUtil.hexStringToBytes(stringVal);
- } catch (NumberFormatException e) {
- throw new SAMFormatException("Tag of type H should have valid hex string with even number of digits");
- }
- } else if (type.equals("B")) {
- return covertStringArrayToObject(stringVal);
- } else {
- throw new SAMFormatException("Unrecognized tag type: " + type);
- }
- }
-
- private Object covertStringArrayToObject(final String stringVal) {
- final String[] elementTypeAndValue = new String[2];
- if (StringUtil.splitConcatenateExcessTokens(stringVal, elementTypeAndValue, ',') != 2) {
- throw new SAMFormatException("Tag of type B should have an element type followed by comma");
- }
- if (elementTypeAndValue[0].length() != 1) {
- throw new SAMFormatException("Unrecognized element type for array tag value: " + elementTypeAndValue[0]);
- }
- final char elementType = elementTypeAndValue[0].charAt(0);
- final String[] stringValues = elementTypeAndValue[1].split(",");
- if (stringValues.length == 0) throw new SAMFormatException("Tag of type B should have at least one element");
- if (elementType == 'f') {
- final float[] ret = new float[stringValues.length];
- for (int i = 0; i < stringValues.length; ++i) {
- try {
- ret[i] = Float.parseFloat(stringValues[i]);
- } catch (NumberFormatException e) {
- throw new SAMFormatException("Array tag of type f should have single-precision floating point value");
- }
- }
- return ret;
- }
- long mask = Long.MAX_VALUE;
- long minValue = Long.MAX_VALUE;
- long maxValue = Long.MIN_VALUE;
- final boolean isUnsigned = Character.isUpperCase(elementType);
- switch (Character.toLowerCase(elementType)) {
- case 'c':
- if (isUnsigned) {
- mask = 0xffL;
- } else {
- minValue = Byte.MIN_VALUE;
- maxValue = Byte.MAX_VALUE;
- }
- break;
- case 's':
- if (isUnsigned) {
- mask = 0xffffL;
- } else {
- minValue = Short.MIN_VALUE;
- maxValue = Short.MAX_VALUE;
- }
- break;
- case 'i':
- if (isUnsigned) {
- mask = 0xffffffffL;
- } else {
- minValue = Integer.MIN_VALUE;
- maxValue = Integer.MAX_VALUE;
- }
- break;
- default:
- throw new SAMFormatException("Unrecognized array tag element type: " + elementType);
- }
- if (isUnsigned) {
- minValue = 0;
- maxValue = mask;
- }
- final long[] longValues = new long[stringValues.length];
- for (int i = 0; i < stringValues.length; ++i) {
- final long longValue;
- try {
- longValue = Long.parseLong(stringValues[i]);
- } catch (NumberFormatException e) {
- throw new SAMFormatException("Array tag of type " + elementType + " should have integral value");
- }
- if (longValue < minValue || longValue > maxValue) {
- throw new SAMFormatException("Value for element of array tag of type " + elementType +
- " is out of allowed range: " + longValue);
- }
- longValues[i] = longValue;
- }
-
- switch (Character.toLowerCase(elementType)) {
- case 'c': {
- final byte[] array = new byte[longValues.length];
- for (int i = 0; i < longValues.length; ++i) array[i] = (byte)longValues[i];
- if (isUnsigned) return new TagValueAndUnsignedArrayFlag(array, true);
- else return array;
- }
- case 's': {
- final short[] array = new short[longValues.length];
- for (int i = 0; i < longValues.length; ++i) array[i] = (short)longValues[i];
- if (isUnsigned) return new TagValueAndUnsignedArrayFlag(array, true);
- else return array;
- }
- case 'i':{
- final int[] array = new int[longValues.length];
- for (int i = 0; i < longValues.length; ++i) array[i] = (int)longValues[i];
- if (isUnsigned) return new TagValueAndUnsignedArrayFlag(array, true);
- else return array;
- }
- default:
- throw new SAMFormatException("Unrecognized array tag element type: " + elementType);
- }
- }
-
- Iso8601Date decodeDate(final String dateStr) {
- try {
- return new Iso8601Date(dateStr);
- } catch (DateParser.InvalidDateException ex) {
- try {
- return new Iso8601Date(DateFormat.getDateTimeInstance().parse(dateStr));
- } catch (ParseException e) {
- try {
- return new Iso8601Date(new Date(dateStr));
- } catch (Exception e1) {
- throw new DateParser.InvalidDateException("Could not parse as date: " + dateStr, e);
- }
- }
- }
- }
-}
diff --git a/src/java/net/sf/samtools/TextualBAMIndexWriter.java b/src/java/net/sf/samtools/TextualBAMIndexWriter.java
deleted file mode 100644
index c84cff2..0000000
--- a/src/java/net/sf/samtools/TextualBAMIndexWriter.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.PrintWriter;
-import java.util.List;
-
-/**
- * Class for writing binary BAM index files as human-readable text.
- * Used for testing only.
-
- */
-class TextualBAMIndexWriter implements BAMIndexWriter {
-
- protected final int nRef;
- protected final File output;
- private final PrintWriter pw;
- private int count = 0;
-
- /**
- * constructor
- *
- * @param nRef Number of reference sequences
- * @param output BAM Index output file
- */
- public TextualBAMIndexWriter(final int nRef, final File output) {
- this.output = output;
- this.nRef = nRef;
- try {
- pw = new PrintWriter(output);
- } catch (final FileNotFoundException e) {
- throw new SAMException("Can't find output file " + output, e);
- }
- writeHeader();
- }
-
- /**
- * Write header information at the beginning of the file
- */
- private void writeHeader() {
- pw.println("n_ref=" + nRef);
- }
-
- /**
- * Write this content as human-readable text
- */
- public void writeReference(final BAMIndexContent content) {
-
- final int reference = content.getReferenceSequence();
-
- if (content == null) {
- writeNullContent(reference);
- count++;
- return;
- }
-
- if (reference != count){
- throw new SAMException("Reference on content is " + reference + " but expecting reference " + count);
- }
- count++;
-
- final BAMIndexContent.BinList bins = content.getBins();
- final int size = bins == null ? 0 : content.getNumberOfNonNullBins();
-
- if (size == 0) {
- writeNullContent(reference);
- return;
- }
-
- //final List<Chunk> chunks = content.getMetaData() == null ? null
- // : content.getMetaData().getMetaDataChunks();
- final BAMIndexMetaData metaData = content.getMetaData();
-
- pw.println("Reference " + reference + " has n_bin= " + Integer.toString(size + (metaData != null? 1 : 0)));
-
- // chunks
- for (final Bin bin : bins) { // note, bins will always be sorted
- if (bin.getBinNumber() == GenomicIndexUtil.MAX_BINS) break;
- if (bin.getChunkList() == null) {
- pw.println(" Ref " + reference + " bin " + bin.getBinNumber() + " has no binArray"); // remove?
- continue;
- }
- final List<Chunk> chunkList = bin.getChunkList();
- if (chunkList == null) {
- pw.println(" Ref " + reference + " bin " + bin.getBinNumber() + " has no chunkList");
- continue;
- }
- pw.print(" Ref " + reference + " bin " + bin.getBinNumber() + " has n_chunk= " + chunkList.size());
- if (chunkList.size() == 0) {
- pw.println();
- }
- for (final Chunk c : chunkList) {
- pw.println(" Chunk: " + c.toString() +
- " start: " + Long.toString(c.getChunkStart(), 16) +
- " end: " + Long.toString(c.getChunkEnd(), 16));
- }
- }
-
- writeChunkMetaData(reference, metaData);
-
- // linear index
- final LinearIndex linearIndex = content.getLinearIndex();
- if (linearIndex == null || linearIndex.getIndexEntries() == null) {
- pw.println("Reference " + reference + " has n_intv= 0");
- return;
- }
- final long[] entries = linearIndex.getIndexEntries();
- final int indexStart = linearIndex.getIndexStart();
- // System.out.println("index start is " + indexStart);
- final int n_intv = entries.length + indexStart;
- pw.println("Reference " + reference + " has n_intv= " + n_intv);
- for (int k = 0; k < entries.length; k++) {
- if (entries[k] != 0) {
- pw.println(" Ref " + reference + " ioffset for " + (k + indexStart) + " is " + Long.toString(entries[k]));
- }
- }
- pw.flush (); // write each reference to disk as it's being created
- }
-
- /**
- * Write the meta data represented by the chunkLists associated with bin MAX_BINS 37450
- *
- * @param metaData information describing numAligned records, numUnAligned, etc
- */
- private void writeChunkMetaData(final int reference, final BAMIndexMetaData metaData) {
- final int nChunks = metaData == null ? 0 : 2;
- pw.print(" Ref " + reference + " bin 37450 has n_chunk= " + nChunks);
- if (nChunks == 0) {
- pw.println();
- } else {
- pw.println(" Chunk: " + // c.toString() +
- " start: " + Long.toString(metaData.getFirstOffset(), 16) +
- " end: " + Long.toString(metaData.getLastOffset(), 16));
- pw.println(" Chunk: " + // c.toString() +
- " start: " + Long.toString(metaData.getAlignedRecordCount(), 16) +
- " end: " + Long.toString(metaData.getUnalignedRecordCount(), 16));
- }
-
- }
-
- private void writeNullContent(final int reference) {
- pw.println("Reference " + reference + " has n_bin=0");
- pw.println("Reference " + reference + " has n_intv=0");
- }
-
- /**
- * Write count of records without coordinates
- *
- * @param noCoordinateCount the count of records seen with no coordinate positions in the start coordinate
- */
- public void writeNoCoordinateRecordCount(final Long noCoordinateCount) {
- pw.println("No Coordinate Count=" + noCoordinateCount);
- }
-
- /**
- * Any necessary processing at the end of the file
- */
- public void close() {
- pw.close();
- }
-}
diff --git a/src/java/net/sf/samtools/apps/TimeChannel.java b/src/java/net/sf/samtools/apps/TimeChannel.java
deleted file mode 100644
index fbfb666..0000000
--- a/src/java/net/sf/samtools/apps/TimeChannel.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- */
-package net.sf.samtools.apps;
-
-import java.io.RandomAccessFile;
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.nio.channels.FileChannel;
-import java.nio.MappedByteBuffer;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class TimeChannel {
- public static void main(String[] args) throws Exception {
- long fileSize = new File(args[0]).length();
- FileInputStream in = new FileInputStream(args[0]);
- FileChannel channel = in.getChannel();
- byte[] buf = new byte[64 * 1024];
- long totalBytesRead = 0;
- long mappedOffset = 0;
- // Map a round number of bytes that might correspond to some kind of page size boundary.
- long maxToMapAtATime = 1024 * 1024 * 1024;
- long mappedSize = Math.min(fileSize, maxToMapAtATime);
- while (totalBytesRead < fileSize) {
- System.err.println("mappedOffset: " + mappedOffset + "; mappedSize: " + mappedSize);
- System.err.println("fileSize: " + fileSize + "; totalBytesRead: " + totalBytesRead);
- MappedByteBuffer mappedBuffer = channel.map(FileChannel.MapMode.READ_ONLY, mappedOffset, mappedSize);
- while (mappedBuffer.remaining() > 0) {
- int bytesRead = Math.min(mappedBuffer.remaining(), buf.length);
- mappedBuffer.get(buf, 0, bytesRead);
- totalBytesRead += bytesRead;
- }
- mappedOffset += mappedSize;
- mappedSize = Math.min(fileSize - totalBytesRead, maxToMapAtATime);
- }
- System.out.println("Total bytes: " + totalBytesRead);
- }
-}
diff --git a/src/java/net/sf/samtools/apps/TimeRandomAccessFile.java b/src/java/net/sf/samtools/apps/TimeRandomAccessFile.java
deleted file mode 100644
index 8b4108f..0000000
--- a/src/java/net/sf/samtools/apps/TimeRandomAccessFile.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- */
-package net.sf.samtools.apps;
-
-import java.io.RandomAccessFile;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class TimeRandomAccessFile {
- public static void main(String[] args) throws Exception {
- RandomAccessFile raf = new RandomAccessFile(new File(args[0]), "r");
- byte[] buf = new byte[64 * 1024];
- long totalBytesRead = 0;
- int bytesRead;
- while ((bytesRead = readBytes(raf, buf, 0, buf.length)) > 0) {
- totalBytesRead += bytesRead;
- }
- System.out.println("Total bytes: " + totalBytesRead);
- }
- private static int readBytes(final RandomAccessFile file, final byte[] buffer, final int offset, final int length)
- throws IOException {
- int bytesRead = 0;
- while (bytesRead < length) {
- final int count = file.read(buffer, offset + bytesRead, length - bytesRead);
- if (count <= 0) {
- break;
- }
- bytesRead += count;
- }
- return bytesRead;
- }
-}
diff --git a/src/java/net/sf/samtools/example/ExampleSamUsage.java b/src/java/net/sf/samtools/example/ExampleSamUsage.java
deleted file mode 100644
index f1285a5..0000000
--- a/src/java/net/sf/samtools/example/ExampleSamUsage.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.example;
-
-import net.sf.samtools.*;
-
-import java.io.File;
-
-public class ExampleSamUsage {
- /**
- * Read a SAM or BAM file, convert each read name to upper case, and write a new
- * SAM or BAM file.
- */
- public void convertReadNamesToUpperCase(final File inputSamOrBamFile, final File outputSamOrBamFile) {
-
- // Open the input file. Automatically detects whether input is SAM or BAM
- // and delegates to a reader implementation for the appropriate format.
- final SAMFileReader inputSam = new SAMFileReader(inputSamOrBamFile);
-
- // makeSAMorBAMWriter() writes a file in SAM text or BAM binary format depending
- // on the file extension, which must be either .sam or .bam.
-
- // Since the SAMRecords will be written in the same order as they appear in the input file,
- // and the output file is specified as having the same sort order (as specified in
- // SAMFileHeader.getSortOrder(), presorted == true. This is much more efficient than
- // presorted == false, if coordinate or queryname sorting is specified, because the SAMRecords
- // can be written to the output file directly rather than being written to a temporary file
- // and sorted after all records have been sent to outputSam.
-
- final SAMFileWriter outputSam = new SAMFileWriterFactory().makeSAMOrBAMWriter(inputSam.getFileHeader(),
- true, outputSamOrBamFile);
-
- for (final SAMRecord samRecord : inputSam) {
- // Convert read name to upper case.
- samRecord.setReadName(samRecord.getReadName().toUpperCase());
- outputSam.addAlignment(samRecord);
- }
-
- outputSam.close();
- inputSam.close();
- }
-}
diff --git a/src/java/net/sf/samtools/seekablestream/ISeekableStreamFactory.java b/src/java/net/sf/samtools/seekablestream/ISeekableStreamFactory.java
deleted file mode 100644
index 901583d..0000000
--- a/src/java/net/sf/samtools/seekablestream/ISeekableStreamFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package net.sf.samtools.seekablestream;
-
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * Factory for creating {@link SeekableStream}s based on URLs/paths.
- * Implementations can be set as the default with {@link SeekableStreamFactory#setInstance(ISeekableStreamFactory)}
- * @author jacob
- * @date 2013-Oct-24
- */
-public interface ISeekableStreamFactory {
-
- public SeekableStream getStreamFor(URL url) throws IOException;
-
- public SeekableStream getStreamFor(String path) throws IOException;
-
- /**
- * Return a buffered {@code SeekableStream} which wraps the input {@code stream}
- * using the default buffer size
- * @param stream
- * @return
- */
- public SeekableStream getBufferedStream(SeekableStream stream);
-
- /**
- * Return a buffered {@code SeekableStream} which wraps the input {@code stream}
- * @param stream
- * @param bufferSize
- * @return
- */
- public SeekableStream getBufferedStream(SeekableStream stream, int bufferSize);
-}
diff --git a/src/java/net/sf/samtools/seekablestream/SeekableBufferedStream.java b/src/java/net/sf/samtools/seekablestream/SeekableBufferedStream.java
deleted file mode 100644
index ad4426d..0000000
--- a/src/java/net/sf/samtools/seekablestream/SeekableBufferedStream.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools.seekablestream;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A wrapper class to provide buffered read access to a SeekableStream. Just wrapping such a stream with
- * a BufferedInputStream will not work as it does not support seeking. In this implementation a
- * seek call is delegated to the wrapped stream, and the buffer reset.
- */
-public class SeekableBufferedStream extends SeekableStream {
-
- /** Little extension to buffered input stream to give access to the available bytes in the buffer. */
- private class ExtBufferedInputStream extends BufferedInputStream {
- private ExtBufferedInputStream(final InputStream inputStream, final int i) {
- super(inputStream, i);
- }
-
- /** Returns the number of bytes that can be read from the buffer without reading more into the buffer. */
- int getBytesInBufferAvailable() {
- if (this.count == this.pos) return 0; // documented test for "is buffer empty"
- else return this.buf.length - this.pos;
- }
- }
-
-
- public static final int DEFAULT_BUFFER_SIZE = 512000;
-
- final private int bufferSize;
- final SeekableStream wrappedStream;
- ExtBufferedInputStream bufferedStream;
- long position;
-
- public SeekableBufferedStream(final SeekableStream stream, final int bufferSize) {
- this.bufferSize = bufferSize;
- this.wrappedStream = stream;
- this.position = 0;
- bufferedStream = new ExtBufferedInputStream(wrappedStream, bufferSize);
- }
- public SeekableBufferedStream(final SeekableStream stream) {
- this(stream, DEFAULT_BUFFER_SIZE);
- }
-
- public long length() {
- return wrappedStream.length();
- }
-
- @Override
- public long skip(final long skipLength) throws IOException {
- if (skipLength < this.bufferedStream.getBytesInBufferAvailable()) {
- final long retval = this.bufferedStream.skip(skipLength);
- this.position += retval;
- return retval;
- }
- else {
- final long position = this.position + skipLength;
- seek(position);
- return skipLength;
- }
- }
-
- public void seek(final long position) throws IOException {
- this.position = position;
- wrappedStream.seek(position);
- bufferedStream = new ExtBufferedInputStream(wrappedStream, bufferSize);
- }
-
- public int read() throws IOException {
- int b = bufferedStream.read();
- position++;
- return b;
- }
-
- public int read(final byte[] buffer, final int offset, final int length) throws IOException {
- final int nBytesRead = bufferedStream.read(buffer, offset, length);
- if (nBytesRead > 0) {
- position += nBytesRead;
- }
- return nBytesRead;
- }
-
- public void close() throws IOException {
- wrappedStream.close();
- }
-
- public boolean eof() throws IOException {
- return position >= wrappedStream.length();
- }
-
- @Override
- public String getSource() {
- return wrappedStream.getSource();
- }
-
- @Override
- public long position() throws IOException {
- return position;
- }
-}
diff --git a/src/java/net/sf/samtools/seekablestream/SeekableFTPStream.java b/src/java/net/sf/samtools/seekablestream/SeekableFTPStream.java
deleted file mode 100644
index 253a568..0000000
--- a/src/java/net/sf/samtools/seekablestream/SeekableFTPStream.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package net.sf.samtools.seekablestream;
-
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * Unfortunately the seekable stream classes exist for both Tribble and Picard, and we need both. This class
- * is for use with Tribble and delegates all the work to a helper.
- *
- * @author jrobinso
- * @date Oct 27, 2010
- */
-public class SeekableFTPStream extends SeekableStream {
-
- SeekableFTPStreamHelper helper;
- public SeekableFTPStream(URL url) throws IOException {
- this(url, null);
- }
-
- public SeekableFTPStream(URL url, UserPasswordInput userPasswordInput) throws IOException {
- helper = new SeekableFTPStreamHelper(url, userPasswordInput);
- }
-
- public void seek(long position) {
- helper.seek(position);
- }
-
- public long position() {
- return helper.position();
- }
-
- @Override
- public boolean eof() throws IOException {
- return helper.eof();
- }
-
- @Override
- public String getSource() {
- return null; //TODO
- }
-
- @Override
- public long length() {
- return helper.length();
- }
-
-
- @Override
- public long skip(long n) throws IOException {
- return helper.skip(n);
- }
-
-
- @Override
- public int read(byte[] buffer, int offset, int len) throws IOException {
- return helper.read(buffer, offset, len);
- }
-
-
- public void close() throws IOException {
- helper.close();
- }
-
- public int read() throws IOException {
- return helper.read();
- }
-
-// private static final String EXPECTED = "Apache Software Foundation";
- private static final String EXPECTED1 = "\u00cf\u00ac\u00c9\u0075\u0043\u00d4\u00d5\u0079";
- private static final String EXPECTED2 = "\u00e4\u006c\u0077\u000c\u0016\u00f1\u0030\u008f";
- public static void main(String[] args) throws IOException {
-// String testURL = (args.length < 1) ? "ftp://apache.cs.utah.edu/apache.org/HEADER.html" : args[0];
- String testURL = (args.length < 1) ? "ftp://hgdownload.cse.ucsc.edu/goldenPath/panTro3/vsHg19/panTro3.hg19.all.chain.gz" : args[0];
- long startPosition = (args.length < 2) ? 0x0b66c78l : Long.parseLong(args[1]);
- int len = (args.length < 3) ? 8 : Integer.parseInt(args[2]);
- int skipLen = (args.length < 4) ? 0x18 : Integer.parseInt(args[3]);
- SeekableStream s = SeekableStreamFactory.getInstance().getStreamFor(testURL);
- byte[] buffer = new byte[len];
- s.seek(startPosition);
- s.read(buffer, 0, len);
- if (s.position() != startPosition + len && s.position() != s.length()) {
- System.out.println("1) updated position is incorrect");
- }
- String data = new String(buffer);
- System.out.println("1) read:" + data);
- if (args.length == 0) {
- System.out.println("1) expected:" + EXPECTED1);
- System.out.println("1) values do" + (EXPECTED1.equals(data) ? "" : " not") + " match");
- }
- s.skip(skipLen);
- s.read(buffer, 0, len);
- if (s.position() != startPosition + 2 * len + skipLen && s.position() != s.length()) {
- System.out.println("2) updated position is incorrect");
- }
- String data2 = new String(buffer);
- System.out.println("2) read:" + data2);
- if (args.length == 0) {
- System.out.println("2) expected:" + EXPECTED2);
- System.out.println("2) values do" + (EXPECTED2.equals(data2) ? "" : " not") + " match");
- }
- }
-}
diff --git a/src/java/net/sf/samtools/seekablestream/SeekableFTPStreamHelper.java b/src/java/net/sf/samtools/seekablestream/SeekableFTPStreamHelper.java
deleted file mode 100644
index c679496..0000000
--- a/src/java/net/sf/samtools/seekablestream/SeekableFTPStreamHelper.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package net.sf.samtools.seekablestream;
-
-import net.sf.samtools.util.ftp.FTPClient;
-import net.sf.samtools.util.ftp.FTPReply;
-import net.sf.samtools.util.ftp.FTPUtils;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * @author jrobinso
- * @date Oct 27, 2010
- */
-public class SeekableFTPStreamHelper {
-
- private long position = 0;
- private long contentLength = -1;
- private String host;
- private String path;
- private String userInfo;
- FTPClient ftp = null;
- private UserPasswordInput userPasswordInput;
-
- SeekableFTPStreamHelper(URL url, UserPasswordInput userPasswordInput) throws IOException {
- this.userInfo = url.getUserInfo();
- this.host = url.getHost();
- this.path = url.getPath();
- this.userPasswordInput = userPasswordInput;
- ftp = FTPUtils.connect(host, userInfo, userPasswordInput);
-
- ftp.binary();
- FTPReply reply = ftp.size(path);
- if(reply.isSuccess()) {
- contentLength = Long.parseLong(reply.getReplyString());
- }
-
- }
-
- public void seek(long position) {
- this.position = position;
- }
-
- public long position() {
- return position;
- }
-
- public boolean eof() throws IOException {
- return false;
- }
-
- public long length() {
- return contentLength;
- }
-
-
- public long skip(long n) throws IOException {
- long bytesToSkip = n;
- position += bytesToSkip;
- if (ftp != null) {
- ftp.setRestPosition(position);
- }
- return bytesToSkip;
- }
-
- public int read(byte[] buffer, int offset, int len) throws IOException {
-
- if (ftp == null) {
- ftp = FTPUtils.connect(host, userInfo, userPasswordInput);
- }
-
- if (offset < 0 || len < 0 || (offset + len) > buffer.length) {
- throw new IndexOutOfBoundsException();
- }
-
- if (len == 0) {
- return 0;
- }
-
- int n = 0;
- try {
-
- FTPReply reply = ftp.pasv();
-
- // If we are positioned at or beyond the EOF return -1
- if(contentLength >= 0 && position >= contentLength) {
- return -1;
- }
-
- if (position > 0) ftp.setRestPosition(position);
-
- reply = ftp.retr(path);
-
- InputStream is = ftp.getDataStream();
-
- while (n < len) {
- int count = is.read(buffer, offset + n, len - n);
- if (count < 0) {
- if (n == 0) {
- return -1;
- } else {
- break;
- }
- }
- n += count;
- }
-
- position += n;
-
- return n;
- } catch (EOFException e) {
- if (n < 0) {
- return -1;
- } else {
- position += n;
- return n;
- }
- } finally {
- // ALWAYS close ftp connection, this is more robust than trying to resue them,
- // and we don't want open connections hanging about
- ftp.disconnect();
- ftp = null;
- }
- }
-
-
- private void reconnect() throws IOException {
- if (ftp != null) {
- ftp.disconnect();
- }
- ftp = FTPUtils.connect(host, userInfo, userPasswordInput);
- }
-
-
- public void close() throws IOException {
- if (ftp != null) {
- ftp.disconnect();
- ftp = null;
- }
- }
-
-
- public int read() throws IOException {
- throw new UnsupportedOperationException("read() is not supported on SeekableHTTPStream. Must read in blocks.");
- }
-
-}
diff --git a/src/java/net/sf/samtools/seekablestream/SeekableFileStream.java b/src/java/net/sf/samtools/seekablestream/SeekableFileStream.java
deleted file mode 100644
index 9699246..0000000
--- a/src/java/net/sf/samtools/seekablestream/SeekableFileStream.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2007-2009 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-package net.sf.samtools.seekablestream;
-
-import java.io.*;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-
-/**
- *
- * @author jrobinso
- */
-public class SeekableFileStream extends SeekableStream {
-
- /**
- * Collection of all open instances. SeekableFileStream objects are usually open and kept open for the
- * duration of a session. This collection supports a method to close them all.
- */
- static Collection<SeekableFileStream> allInstances =
- Collections.synchronizedCollection(new HashSet<SeekableFileStream>());
-
-
- File file;
- RandomAccessFile fis;
-
- public SeekableFileStream(final File file) throws FileNotFoundException {
- this.file = file;
- fis = new RandomAccessFile(file, "r");
- allInstances.add(this);
- }
-
- public long length() {
- return file.length();
- }
-
- public boolean eof() throws IOException {
- return fis.length() == fis.getFilePointer();
- }
-
- public void seek(final long position) throws IOException {
- fis.seek(position);
- }
-
- public long position() throws IOException {
- return fis.getChannel().position();
- }
-
- @Override
- public long skip(long n) throws IOException {
- long initPos = position();
- fis.getChannel().position(initPos + n);
- return position() - initPos;
- }
-
- public int read(final byte[] buffer, final int offset, final int length) throws IOException {
- if (length < 0) {
- throw new IndexOutOfBoundsException();
- }
- int n = 0;
- while (n < length) {
- final int count = fis.read(buffer, offset + n, length - n);
- if (count < 0) {
- if (n > 0) {
- return n;
- } else {
- return count;
- }
- }
- n += count;
- }
- return n;
-
- }
-
- public int read() throws IOException {
- return fis.read();
- }
-
- @Override
- public int read(byte[] b) throws IOException {
- return fis.read(b);
- }
-
- @Override
- public String getSource() {
- return file.getAbsolutePath();
- }
-
-
- public void close() throws IOException {
- allInstances.remove(this);
- fis.close();
-
- }
-
- public static synchronized void closeAllInstances() {
- Collection<SeekableFileStream> clonedInstances = new HashSet<SeekableFileStream>();
- clonedInstances.addAll(allInstances);
- for (SeekableFileStream sfs : clonedInstances) {
- try {
- sfs.close();
- } catch (IOException e) {
- //TODO
- //log.error("Error closing SeekableFileStream", e);
- }
- }
- allInstances.clear();
- }
-}
diff --git a/src/java/net/sf/samtools/seekablestream/SeekableHTTPStream.java b/src/java/net/sf/samtools/seekablestream/SeekableHTTPStream.java
deleted file mode 100644
index 5120e72..0000000
--- a/src/java/net/sf/samtools/seekablestream/SeekableHTTPStream.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.seekablestream;
-
-import net.sf.samtools.util.HttpUtils;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.Proxy;
-import java.net.URL;
-
-/**
- * @author jrobinso
- */
-public class SeekableHTTPStream extends SeekableStream {
-
- private long position = 0;
- private long contentLength = -1;
- private final URL url;
- private final Proxy proxy;
-
- public SeekableHTTPStream(final URL url) {
- this(url, null);
-
- }
-
- public SeekableHTTPStream(final URL url, Proxy proxy) {
-
- this.proxy = proxy;
- this.url = url;
-
- // Try to get the file length
- // Note: This also sets setDefaultUseCaches(false), which is important
- final String contentLengthString = HttpUtils.getHeaderField(url, "Content-Length");
- if (contentLengthString != null) {
- try {
- contentLength = Long.parseLong(contentLengthString);
- }
- catch (NumberFormatException ignored) {
- System.err.println("WARNING: Invalid content length (" + contentLengthString + " for: " + url);
- contentLength = -1;
- }
- }
-
- }
-
- public long position() {
- return position;
- }
-
- public long length() {
- return contentLength;
- }
-
- @Override
- public long skip(long n) throws IOException {
- long bytesToSkip = Math.min(n, contentLength - position);
- position += bytesToSkip;
- return bytesToSkip;
- }
-
- public boolean eof() throws IOException {
- return contentLength > 0 && position >= contentLength;
- }
-
- public void seek(final long position) {
- this.position = position;
- }
-
- public int read(byte[] buffer, int offset, int len) throws IOException {
-
- if (offset < 0 || len < 0 || (offset + len) > buffer.length) {
- throw new IndexOutOfBoundsException("Offset="+offset+",len="+len+",buflen="+buffer.length);
- }
- if (len == 0) {
- return 0;
- }
-
- HttpURLConnection connection = null;
- InputStream is = null;
- String byteRange = "";
- int n = 0;
- try {
- connection = proxy == null ?
- (HttpURLConnection) url.openConnection() :
- (HttpURLConnection) url.openConnection(proxy);
-
- long endRange = position + len - 1;
- // IF we know the total content length, limit the end range to that.
- if (contentLength > 0) {
- endRange = Math.min(endRange, contentLength);
- }
- byteRange = "bytes=" + position + "-" + endRange;
- connection.setRequestProperty("Range", byteRange);
-
- is = connection.getInputStream();
-
- while (n < len) {
- int count = is.read(buffer, offset + n, len - n);
- if (count < 0) {
- if (n == 0) {
- return -1;
- } else {
- break;
- }
- }
- n += count;
- }
-
- position += n;
-
- return n;
-
- }
-
- catch (IOException e) {
- // THis is a bit of a hack, but its not clear how else to handle this. If a byte range is specified
- // that goes past the end of the file the response code will be 416. The MAC os translates this to
- // an IOException with the 416 code in the message. Windows translates the error to an EOFException.
- //
- // The BAM file iterator uses the return value to detect end of file (specifically looks for n == 0).
- if (e.getMessage().contains("416") || (e instanceof EOFException)) {
- if (n == 0) {
- return -1;
- } else {
- position += n;
- // As we are at EOF, the contentLength and position are by definition =
- contentLength = position;
- return n;
- }
- } else {
- throw e;
- }
-
- }
-
- finally {
- if (is != null) {
- is.close();
- }
- if (connection != null) {
- connection.disconnect();
- }
- }
- }
-
-
- public void close() throws IOException {
- // Nothing to do
- }
-
-
- public int read() throws IOException {
- byte []tmp=new byte[1];
- read(tmp,0,1);
- return (int) tmp[0] & 0xFF;
- }
-
- @Override
- public String getSource() {
- return url.toString();
- }
-}
diff --git a/src/java/net/sf/samtools/seekablestream/SeekableStream.java b/src/java/net/sf/samtools/seekablestream/SeekableStream.java
deleted file mode 100644
index 09ed534..0000000
--- a/src/java/net/sf/samtools/seekablestream/SeekableStream.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.seekablestream;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-public abstract class SeekableStream extends InputStream {
-
- public abstract long length();
-
- public abstract long position() throws IOException;
-
- public abstract void seek(long position) throws IOException;
-
- public abstract int read(byte[] buffer, int offset, int length) throws IOException;
-
- public abstract void close() throws IOException;
-
- public abstract boolean eof() throws IOException;
-
- /**
- * @return String representation of source (e.g. URL, file path, etc.), or null if not available.
- */
- public abstract String getSource();
-
- /**
- * Read enough bytes to fill the input buffer.
- * @param b
- * @throws EOFException If EOF is reached before buffer is filled
- */
- public void readFully(byte b[]) throws IOException {
- int len = b.length;
- if (len < 0){
- throw new IndexOutOfBoundsException();
- }
- int n = 0;
- while (n < len) {
- int count = read(b, n, len - n);
- if (count < 0){
- throw new EOFException();
- }
- n += count;
- }
- }
-
-}
diff --git a/src/java/net/sf/samtools/seekablestream/SeekableStreamFactory.java b/src/java/net/sf/samtools/seekablestream/SeekableStreamFactory.java
deleted file mode 100644
index 2dc1b2b..0000000
--- a/src/java/net/sf/samtools/seekablestream/SeekableStreamFactory.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.seekablestream;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * Singleton class for getting {@link SeekableStream}s from URL/paths
- * Applications using this library can set their own factory
- * @author jrobinso
- * @date Nov 30, 2009
- */
-public class SeekableStreamFactory{
-
- private static final ISeekableStreamFactory DEFAULT_FACTORY;
- private static ISeekableStreamFactory currentFactory;
-
- static{
- DEFAULT_FACTORY = new DefaultSeekableStreamFactory();
- currentFactory = DEFAULT_FACTORY;
- }
-
- private SeekableStreamFactory(){}
-
- public static void setInstance(final ISeekableStreamFactory factory){
- currentFactory = factory;
- }
-
- public static ISeekableStreamFactory getInstance(){
- return currentFactory;
- }
-
- /**
- * Does this path point to a regular file on disk and not something like a URL?
- * @param path the path to test
- * @return true if the path is to a file on disk
- */
- public static boolean isFilePath(final String path) {
- return ! ( path.startsWith("http:") || path.startsWith("https:") || path.startsWith("ftp:") );
- }
-
- private static class DefaultSeekableStreamFactory implements ISeekableStreamFactory {
-
- public SeekableStream getStreamFor(final URL url) throws IOException {
- return getStreamFor(url.toExternalForm());
- }
-
- public SeekableStream getStreamFor(final String path) throws IOException {
- // todo -- add support for SeekableBlockInputStream
-
- if (path.startsWith("http:") || path.startsWith("https:")) {
- final URL url = new URL(path);
- return new SeekableHTTPStream(url);
- } else if (path.startsWith("ftp:")) {
- return new SeekableFTPStream(new URL(path));
- } else {
- return new SeekableFileStream(new File(path));
- }
- }
-
- public SeekableStream getBufferedStream(SeekableStream stream){
- return getBufferedStream(stream, SeekableBufferedStream.DEFAULT_BUFFER_SIZE);
- }
-
- public SeekableStream getBufferedStream(SeekableStream stream, int bufferSize){
- if (bufferSize == 0) return stream;
- else return new SeekableBufferedStream(stream, bufferSize);
- }
-
- }
-
-}
diff --git a/src/java/net/sf/samtools/seekablestream/UserPasswordInput.java b/src/java/net/sf/samtools/seekablestream/UserPasswordInput.java
deleted file mode 100644
index 696d6c9..0000000
--- a/src/java/net/sf/samtools/seekablestream/UserPasswordInput.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.seekablestream;
-
-public interface UserPasswordInput {
- public void setHost(String host);
- public boolean showDialog();
- public String getUser();
- public String getPassword();
-}
diff --git a/src/java/net/sf/samtools/util/AbstractAsyncWriter.java b/src/java/net/sf/samtools/util/AbstractAsyncWriter.java
deleted file mode 100644
index 7048815..0000000
--- a/src/java/net/sf/samtools/util/AbstractAsyncWriter.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package net.sf.samtools.util;
-
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Abstract class that is designed to be extended and specialized to provide an asynchronous
- * wrapper around any kind of Writer class that takes an object and writes it out somehow.
- *
- * @author Tim Fennell
- */
-public abstract class AbstractAsyncWriter<T> {
- private static volatile int threadsCreated = 0; // Just used for thread naming.
- public static final int DEFAULT_QUEUE_SIZE = 2000;
-
- private final AtomicBoolean isClosed = new AtomicBoolean(false);
- private final BlockingQueue<T> queue;
- private final Thread writer;
- private final WriterRunnable writerRunnable;
- private final AtomicReference<Throwable> ex = new AtomicReference<Throwable>(null);
-
- /** Returns the prefix to use when naming threads. */
- protected abstract String getThreadNamePrefix();
-
- protected abstract void synchronouslyWrite(final T item);
-
- protected abstract void synchronouslyClose();
-
- /**
- * Creates an AbstractAsyncWriter that will use the provided WriterRunnable to consume from the
- * internal queue and write records into the synchronous writer.
- */
- protected AbstractAsyncWriter(final int queueSize) {
- this.queue = new ArrayBlockingQueue<T>(queueSize);
- this.writerRunnable = new WriterRunnable();
- this.writer = new Thread(writerRunnable, getThreadNamePrefix() + threadsCreated++);
- this.writer.setDaemon(true);
- this.writer.start();
- }
-
- /**
- * Public method for sub-classes or ultimately consumers to put an item into the queue
- * to be written out.
- */
- public void write(final T item) {
- if (this.isClosed.get()) throw new RuntimeException("Attempt to add record to closed writer.");
-
- checkAndRethrow();
- try { this.queue.put(item); }
- catch (InterruptedException ie) { throw new RuntimeException("Interrupted queueing item for writing.", ie); }
- checkAndRethrow();
- }
-
- /**
- * Attempts to finishing draining the queue and then calls synchronoslyClose() to allow implementation
- * to do any one time clean up.
- */
- public void close() {
- checkAndRethrow();
-
- if (this.isClosed.get()) {
- throw new RuntimeException("AbstractAsyncWriter already closed.");
- }
- else {
- this.isClosed.set(true);
-
- try { this.writer.join(); }
- catch (InterruptedException ie) { throw new RuntimeException("Interrupted waiting on writer thread.", ie); }
-
- // Assert that the queue is empty
- if (!this.queue.isEmpty()) {
- throw new RuntimeException("Queue should be empty but is size: " + this.queue.size());
- }
-
- synchronouslyClose();
- checkAndRethrow();
- }
- }
-
- /**
- * Checks to see if an exception has been raised in the writer thread and if so rethrows it as an Error
- * or RuntimeException as appropriate.
- */
- private final void checkAndRethrow() {
- final Throwable t = this.ex.get();
- if (t != null) {
- if (t instanceof Error) throw (Error) t;
- if (t instanceof RuntimeException) throw (RuntimeException) t;
- else throw new RuntimeException(t);
- }
- }
-
- /**
- * Small Runnable implementation that simply reads from the blocking queue and writes to the
- * synchronous writer.
- */
- private class WriterRunnable implements Runnable {
- public void run() {
- try {
- while (!queue.isEmpty() || !isClosed.get()) {
- try {
- final T item = queue.poll(2, TimeUnit.SECONDS);
- if (item != null) synchronouslyWrite(item);
- }
- catch (InterruptedException ie) {
- /* Do Nothing */
- }
- }
- }
- catch (Throwable t) {
- ex.compareAndSet(null, t);
- // In case a writer was blocking on a full queue before ex has been set, clear the queue
- // so that the writer will no longer be blocked so that it can see the exception.
- queue.clear();
- }
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/AbstractIterator.java b/src/java/net/sf/samtools/util/AbstractIterator.java
deleted file mode 100644
index 7c3b741..0000000
--- a/src/java/net/sf/samtools/util/AbstractIterator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools.util;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Base class of implementing iterators. All you have to do is implement advance which gets
- * the next element.
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public abstract class AbstractIterator<E> implements Iterator<E> {
- protected E next;
- private boolean iterating = false;
-
- @Override
- public boolean hasNext() {
- // If this is the start of iteration, queue up the first item
- if (!iterating) {
- next = advance();
- iterating = true;
- }
- return next != null;
- }
-
- @Override
- public E next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
-
- E ret = next;
- next = advance();
- return ret;
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException("Remove() not supported.");
- }
-
- /**
- * @return the next element or null if the iterator is at the end
- */
- protected abstract E advance();
-
- /**
- * Returns the next element in the iterator, if one exists. Otherwise, returns null. Invoking this method does not advance the iterator.
- * @return The next element in the iterator, without advancing, or, if no other element exists, null.
- */
- public E peek() {
- return next;
- }
-
- /**
- * @return true after the first time hasNext() or next() have been called
- */
- protected boolean isIterating() {
- return iterating;
- }
-}
diff --git a/src/java/net/sf/samtools/util/AsciiWriter.java b/src/java/net/sf/samtools/util/AsciiWriter.java
deleted file mode 100644
index 886d4a0..0000000
--- a/src/java/net/sf/samtools/util/AsciiWriter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.Defaults;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-
-/**
- * Fast (I hope) buffered Writer that converts char to byte merely by casting, rather than charset conversion.
- */
-public class AsciiWriter extends Writer {
-
- private final OutputStream os;
- // Buffer size has not been tuned.
- private final byte[] buffer = new byte[Defaults.NON_ZERO_BUFFER_SIZE];
- private int numBytes;
-
- /**
- * @param os need not be buffered as this class buffers
- */
- public AsciiWriter(final OutputStream os) {
- this.os = os;
- numBytes = 0;
- }
-
- /**
- * flushes and closes underlying OutputStream.
- */
- public void close() throws IOException {
- flush();
- os.close();
- }
-
- /**
- * flushes underlying OutputStream
- */
- public void flush() throws IOException {
- os.write(buffer, 0, numBytes);
- numBytes = 0;
- os.flush();
- }
-
- /**
- * All other Writer methods vector through this, so this is the only one that must be overridden.
- */
- public void write(final char[] chars, int offset, int length) throws IOException {
- while (length > 0) {
- final int charsToConvert = Math.min(length, buffer.length - numBytes);
- StringUtil.charsToBytes(chars, offset, charsToConvert, buffer, numBytes);
- numBytes += charsToConvert;
- offset += charsToConvert;
- length -= charsToConvert;
- if (numBytes == buffer.length) {
- os.write(buffer, 0, numBytes);
- numBytes = 0;
- }
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/BinaryCodec.java b/src/java/net/sf/samtools/util/BinaryCodec.java
deleted file mode 100644
index 84b0a9c..0000000
--- a/src/java/net/sf/samtools/util/BinaryCodec.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import java.io.*;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Encapsulates file representation of various primitive data types. Forces little-endian disk representation.
- * Note that this class is currently not very efficient. There are plans to increase the size of the ByteBuffer,
- * and move data between the ByteBuffer and the underlying input or output stream in larger chunks.
- *
- * All the read methods throw RuntimeEOFException if the input stream is exhausted before the required number
- * of bytes are read.
- *
- * @author Dave Tefft
- */
-public class BinaryCodec {
-
- //Outstream to write to
- private OutputStream outputStream;
- //If a file or filename was given it will be stored here. Used for error reporting.
- private String outputFileName;
-
- //Input stream to read from
- private InputStream inputStream;
- //If a file or filename was give to read from it will be stored here. Used for error reporting.
- private String inputFileName;
-
- /*
- Mode that the BinaryCodec is in. It is either writing to a binary file or reading from.
- This is set to true if it is writing to a binary file
- Right now we don't support reading and writing to the same file with the same BinaryCodec instance
- */
- private boolean isWriting;
-
- /**
- * For byte swapping.
- */
- private ByteBuffer byteBuffer;
-
- /**
- * For reading Strings of known length, this can reduce object creation
- */
- private final byte[] scratchBuffer = new byte[16];
-
- // Byte order used in BAM files.
- private static final ByteOrder LITTLE_ENDIAN = ByteOrder.LITTLE_ENDIAN;
- private static final byte NULL_BYTE[] = {0};
-
- private static final long MAX_UBYTE = (Byte.MAX_VALUE * 2) + 1;
- private static final long MAX_USHORT = (Short.MAX_VALUE * 2) + 1;
- private static final long MAX_UINT = ((long)Integer.MAX_VALUE * 2) + 1;
-
- // We never serialize more than this much at a time (except for Strings)
- private static final int MAX_BYTE_BUFFER = 8;
-
- //////////////////////////////////////////////////
- // Constructors //
- //////////////////////////////////////////////////
-
- /**
- * Constructs BinaryCodec from a file and set it's mode to writing or not
- *
- * @param file file to be written to or read from
- * @param writing whether the file is being written to
- */
- public BinaryCodec(final File file, final boolean writing) {
- this();
- try {
- this.isWriting = writing;
- if (this.isWriting) {
- this.outputStream = new FileOutputStream(file);
- this.outputFileName = file.getName();
- } else {
- this.inputStream = new FileInputStream(file);
- this.inputFileName = file.getName();
- }
- } catch (FileNotFoundException e) {
- throw new RuntimeIOException("File not found: " + file, e);
- }
- }
-
- /**
- * Constructs BinaryCodec from a file name and set it's mode to writing or not
- *
- * @param fileName name of the file to be written to or read from
- * @param writing writing whether the file is being written to
- */
- public BinaryCodec(final String fileName, final boolean writing) {
- this(new File(fileName), writing);
- }
-
- /**
- * Constructs BinaryCodec from an output stream
- *
- * @param outputStream Stream to write to, since it's an output stream we know that isWriting
- * should be set to true
- */
- public BinaryCodec(final OutputStream outputStream) {
- this();
- setOutputStream(outputStream);
- }
-
- /**
- * Constructs BinaryCodec from an input stream
- *
- * @param inputStream Stream to read from, since we are reading isWriting is set to false
- */
- public BinaryCodec(final InputStream inputStream) {
- this();
- setInputStream(inputStream);
- }
-
- /**
- * Ambiguous whether reading or writing until set{In,Out}putStream is called
- */
- public BinaryCodec() {
- initByteBuffer();
- }
-
- /**
- * Shared among ctors.
- * Note that if endianness is changed, all the unsigned methods must also be changed.
- */
- private void initByteBuffer() {
- byteBuffer = ByteBuffer.allocate(MAX_BYTE_BUFFER);
- byteBuffer.order(LITTLE_ENDIAN);
- }
-
- //////////////////////////////////////////////////
- // Writing methods //
- //////////////////////////////////////////////////
-
-
- /**
- * Write whatever has been put into the byte buffer
- * @param numBytes -- how much to write. Note that in case of writing an unsigned value,
- * more bytes were put into the ByteBuffer than will get written out.
- */
- private void writeByteBuffer(final int numBytes) {
- assert(numBytes <= byteBuffer.limit());
- writeBytes(byteBuffer.array(), 0, numBytes);
- }
-
- /**
- * Writes a byte to the output buffer
- *
- * @param bite byte array to write
- */
- public void writeByte(final byte bite) {
- byteBuffer.clear();
- byteBuffer.put(bite);
- writeByteBuffer(1);
- }
-
- public void writeByte(final int b) {
- writeByte((byte)b);
- }
-
- /**
- * Writes a byte array to the output buffer
- *
- * @param bytes value to write
- */
- public void writeBytes(final byte[] bytes) {
- writeBytes(bytes, 0, bytes.length);
- }
-
- public void writeBytes(final byte[] bytes, final int startOffset, final int numBytes) {
- if (!isWriting) {
- throw new IllegalStateException("Calling write method on BinaryCodec open for read.");
- }
- try {
- outputStream.write(bytes, startOffset, numBytes);
- } catch (IOException e) {
- throw new RuntimeIOException(constructErrorMessage("Write error"), e);
- }
- }
-
- /**
- * Write a 32-bit int to the output stream
- *
- * @param value int to write
- */
- public void writeInt(final int value) {
- byteBuffer.clear();
- byteBuffer.putInt(value);
- writeByteBuffer(4);
- }
-
- /**
- * Write a double (8 bytes) to the output stream
- *
- * @param value double to write
- */
- public void writeDouble(final double value) {
- byteBuffer.clear();
- byteBuffer.putDouble(value);
- writeByteBuffer(8);
- }
-
- /**
- * Write a 64-bit long to the output stream
- *
- * @param value long to write
- */
- public void writeLong(final long value) {
- byteBuffer.clear();
- byteBuffer.putLong(value);
- writeByteBuffer(8);
- }
-
-
- /**
- * Write a 16-bit short to output stream
- */
- public void writeShort(final short value) {
- byteBuffer.clear();
- byteBuffer.putShort(value);
- writeByteBuffer(2);
- }
-
- /**
- * Write a float (4 bytes) to the output stream
- *
- * @param value float to write
- */
- public void writeFloat(final float value) {
- byteBuffer.clear();
- byteBuffer.putFloat(value);
- writeByteBuffer(4);
- }
-
- /**
- * Writes a boolean (1 byte) to the output buffer
- *
- * @param value boolean to write
- */
- public void writeBoolean(final boolean value) {
- byteBuffer.clear();
- byteBuffer.put(value ? (byte)1 : (byte)0);
- writeByteBuffer(1);
- }
-
- /**
- * Writes a string to the buffer as ASCII bytes
- *
- * @param value string to write to buffer
- * @param writeLength prefix the string with the length as a 32-bit int
- * @param appendNull add a null byte to the end of the string
- */
- public void writeString(final String value, final boolean writeLength, final boolean appendNull) {
- if (writeLength) {
- int lengthToWrite = value.length();
- if (appendNull) lengthToWrite++;
- writeInt(lengthToWrite);
- }
-
- //Actually writes the string to a buffer
- writeString(value);
-
- if (appendNull) writeBytes(NULL_BYTE);
-
- }
-
-
- /**
- * Write a string to the buffer as ASCII bytes
- *
- * @param value string to write
- */
- private void writeString(final String value) {
- writeBytes(StringUtil.stringToBytes(value));
- }
-
- /**
- * Write an 8-bit unsigned byte.
- * NOTE: This method will break if we change to big-endian.
- */
- public void writeUByte(final short val) {
- if (val < 0) {
- throw new IllegalArgumentException("Negative value (" + val + ") passed to unsigned writing method.");
- }
- if (val > MAX_UBYTE) {
- throw new IllegalArgumentException("Value (" + val + ") to large to be written as ubyte.");
- }
- byteBuffer.clear();
- byteBuffer.putShort(val);
- writeByteBuffer(1);
- }
-
- /**
- * Write a 16-bit unsigned short.
- * NOTE: This method will break if we change to big-endian.
- */
- public void writeUShort(final int val) {
- if (val < 0) {
- throw new IllegalArgumentException("Negative value (" + val + ") passed to unsigned writing method.");
- }
- if (val > MAX_USHORT) {
- throw new IllegalArgumentException("Value (" + val + ") to large to be written as ushort.");
- }
- byteBuffer.clear();
- byteBuffer.putInt(val);
- writeByteBuffer(2);
- }
-
- /**
- * Write a 32-bit unsigned int.
- * NOTE: This method will break if we change to big-endian.
- */
- public void writeUInt(final long val) {
- if (val < 0) {
- throw new IllegalArgumentException("Negative value (" + val + ") passed to unsigned writing method.");
- }
- if (val > MAX_UINT) {
- throw new IllegalArgumentException("Value (" + val + ") to large to be written as uint.");
- }
- byteBuffer.clear();
- byteBuffer.putLong(val);
- writeByteBuffer(4);
- }
-
- //////////////////////////////////////////////////
- // Reading methods //
- //////////////////////////////////////////////////
-
- /**
- * Read a byte array from the input stream.
- *
- * @throws net.sf.samtools.util.RuntimeEOFException if fewer than buffer.length bytes to read
- */
- public void readBytes(final byte[] buffer) {
- readBytes(buffer, 0, buffer.length);
- }
-
- /**
- * Read a byte array from the input stream
- *
- * @param buffer where to put bytes read
- * @param offset offset to start putting bytes into buffer
- * @param length number of bytes to read
- * @throws RuntimeEOFException if fewer than length bytes to read
- */
- public void readBytes(final byte[] buffer, final int offset, final int length) {
- int totalNumRead = 0;
- do {
- final int numRead = readBytesOrFewer(buffer, offset + totalNumRead, length - totalNumRead);
- if (numRead < 0) {
- String msg = String.format("Premature EOF. Expected %d but only received %d", length, totalNumRead);
- throw new RuntimeEOFException(constructErrorMessage(msg));
- } else {
- totalNumRead += numRead;
- }
- } while (totalNumRead < length);
- }
-
- /**
- * Reads a byte array from the input stream.
- *
- * @param buffer where to put bytes read
- * @param offset offset to start putting bytes into buffer
- * @param length number of bytes to read. Fewer bytes may be read if EOF is reached before length bytes
- * have been read.
- * @return the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
- */
- public int readBytesOrFewer(final byte[] buffer, final int offset, final int length) {
- if (isWriting) {
- throw new IllegalStateException("Calling read method on BinaryCodec open for write.");
- }
- try {
- return inputStream.read(buffer, offset, length);
- } catch (IOException e) {
- throw new RuntimeIOException(constructErrorMessage("Read error"), e);
- }
- }
-
- /**
- * @return a single byte read from the input stream.
- */
- public byte readByte() {
- if (isWriting) {
- throw new IllegalStateException("Calling read method on BinaryCodec open for write.");
- }
- try {
- final int ret = inputStream.read();
- if (ret == -1) {
- throw new RuntimeEOFException(constructErrorMessage("Premature EOF"));
- }
- return (byte)ret;
- } catch (IOException e) {
- throw new RuntimeIOException(constructErrorMessage("Read error"), e);
- }
- }
-
- /**
- * @return true if it is possible to know for sure if at EOF, and it is known for sure.
- * If the input stream is a ByteArrayInputStream, this is faster than causing a RuntimeEOFException
- * to be thrown.
- */
- public boolean knownAtEof() {
- if (isWriting) {
- throw new IllegalStateException("Calling knownAtEof method on BinaryCodec open for write.");
- }
- try {
- return inputStream instanceof ByteArrayInputStream && inputStream.available() == 0;
- } catch (IOException e) {
- throw new RuntimeIOException(constructErrorMessage("available() error"), e);
- }
- }
-
- /**
- * Read a string off the input stream, as ASCII bytes
- *
- * @param length length of string to read
- * @return String read from stream
- */
- public String readString(final int length) {
- final byte[] buffer;
- // Recycle single buffer if possible
- if (length <= scratchBuffer.length) {
- buffer = scratchBuffer;
- } else {
- buffer = new byte[length];
-
- }
- readBytes(buffer, 0, length);
-
- return StringUtil.bytesToString(buffer, 0, length);
- }
-
- /**
- * Read ASCII bytes from the input stream until a null byte is read
- * @return String constructed from the ASCII bytes read
- */
- public String readNullTerminatedString() {
- return StringUtil.readNullTerminatedString(this);
- }
-
- /**
- * Read an int length, and then a String of that length
- * @param devourNull if true, the length include a null terminator, which is read and discarded
- */
- public String readLengthAndString(final boolean devourNull) {
- int length = readInt();
- if (devourNull) {
- --length;
- }
- final String ret = readString(length);
- if (devourNull) {
- readByte();
- }
- return ret;
- }
-
- private void readByteBuffer(final int numBytes) {
- assert(numBytes <= byteBuffer.capacity());
- readBytes(byteBuffer.array(), 0, numBytes);
- byteBuffer.limit(byteBuffer.capacity());
- byteBuffer.position(numBytes);
- }
-
- /**
- * Read an int off the input stream
- *
- * @return int from input stream
- */
- public int readInt() {
- readByteBuffer(4);
- byteBuffer.flip();
- return byteBuffer.getInt();
- }
-
- /**
- * Reads a double off the input stream
- *
- * @return double
- */
- public double readDouble() {
- readByteBuffer(8);
- byteBuffer.flip();
- return byteBuffer.getDouble();
- }
-
- /**
- * Reads a long off the input stream
- *
- * @return long
- */
- public long readLong() {
- readByteBuffer(8);
- byteBuffer.flip();
- return byteBuffer.getLong();
- }
-
- public short readShort() {
- readByteBuffer(2);
- byteBuffer.flip();
- return byteBuffer.getShort();
- }
-
- /**
- * Reads a float off the input stream
- *
- * @return float
- */
- public float readFloat() {
- readByteBuffer(4);
- byteBuffer.flip();
- return byteBuffer.getFloat();
- }
-
- /**
- * Reads a boolean off the input stream, represented as a byte with value 1 or 0
- *
- * @return boolean
- */
- public boolean readBoolean() {
- return (((int)readByte()) == 1);
- }
-
- /**
- * Reads an 8-bit unsigned byte from the input stream.
- * This method assumes little-endianness.
- */
- public short readUByte() {
- readByteBuffer(1);
- byteBuffer.put((byte)0);
- byteBuffer.flip();
- return byteBuffer.getShort();
- }
-
- /**
- * Reads a 16-bit unsigned short from the input stream.
- * This method assumes little-endianness.
- */
- public int readUShort() {
- readByteBuffer(2);
- byteBuffer.putShort((short)0);
- byteBuffer.flip();
- return byteBuffer.getInt();
- }
-
- /**
- * Reads a 32-bit unsigned int from the input stream.
- * This method assumes little-endianness.
- */
- public long readUInt() {
- readByteBuffer(4);
- byteBuffer.putInt(0);
- byteBuffer.flip();
- return byteBuffer.getLong();
- }
-
- /**
- * Close the appropriate stream
- */
- public void close() {
- try {
- if (this.isWriting) {
- // To the degree possible, make sure the bytes get forced to the file system,
- // or else cause an exception to be thrown.
- if (this.outputStream instanceof FileOutputStream) {
- this.outputStream.flush();
- FileOutputStream fos = (FileOutputStream)this.outputStream;
- try {
- fos.getFD().sync();
- } catch (SyncFailedException e) {
- // Since the sync is belt-and-suspenders anyway, don't throw an exception if it fails,
- // because on some OSs it will fail for some types of output. E.g. writing to /dev/null
- // on some Unixes.
- }
- }
- this.outputStream.close();
- }
- else this.inputStream.close();
- } catch (IOException e) {
- throw new RuntimeIOException(e.getMessage(), e);
- }
- }
-
- private String constructErrorMessage(final String msg) {
- final StringBuilder sb = new StringBuilder(msg);
- sb.append("; BinaryCodec in ");
- sb.append(isWriting? "write": "read");
- sb.append("mode; ");
- final String filename = isWriting? outputFileName: inputFileName;
- if (filename != null) {
- sb.append("file: ");
- sb.append(filename);
- } else {
- sb.append("streamed file (filename not available)");
- }
- return sb.toString();
- }
-
- //////////////////////////////////////////////////
- // Some getters //
- //////////////////////////////////////////////////
-
-
- public String getInputFileName() {
- return inputFileName;
- }
-
- public String getOutputFileName() {
- return outputFileName;
- }
-
- public void setOutputFileName(final String outputFileName) {
- this.outputFileName = outputFileName;
- }
-
- public void setInputFileName(final String inputFileName) {
- this.inputFileName = inputFileName;
- }
-
- public boolean isWriting() {
- return isWriting;
- }
-
- public OutputStream getOutputStream() {
- return outputStream;
- }
-
- public InputStream getInputStream() {
- return inputStream;
- }
-
- public void setInputStream(final InputStream is) {
- isWriting = false;
- this.inputStream = is;
- }
-
- public void setOutputStream(final OutputStream os) {
- isWriting = true;
- this.outputStream = os;
-
- }
-}
diff --git a/src/java/net/sf/samtools/util/BlockCompressedFilePointerUtil.java b/src/java/net/sf/samtools/util/BlockCompressedFilePointerUtil.java
deleted file mode 100644
index f593e33..0000000
--- a/src/java/net/sf/samtools/util/BlockCompressedFilePointerUtil.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-/**
- * Static for manipulating virtual file pointers in BGZF files.
- */
-public class BlockCompressedFilePointerUtil {
- private static final int SHIFT_AMOUNT = 16;
- private static final int OFFSET_MASK = 0xffff;
- private static final long ADDRESS_MASK = 0xFFFFFFFFFFFFL;
-
- public static final long MAX_BLOCK_ADDRESS = ADDRESS_MASK;
- public static final int MAX_OFFSET = OFFSET_MASK;
-
- /**
- * @param vfp1
- * @param vfp2
- * @return negative if vfp1 is earlier in file than vfp2, positive if it is later, 0 if equal.
- */
- public static int compare(final long vfp1, final long vfp2) {
- if (vfp1 == vfp2) return 0;
- // When treating as unsigned, negative number is > positive.
- if (vfp1 < 0 && vfp2 >= 0) return 1;
- if (vfp1 >= 0 && vfp2 < 0) return -1;
- // Either both negative or both non-negative, so regular comparison works.
- if (vfp1 < vfp2) return -1;
- return 1; // vfp1 > vfp2
- }
-
- /**
- * @return true if vfp2 points to somewhere in the same BGZF block, or the one immediately following vfp1's BGZF block.
- */
- public static boolean areInSameOrAdjacentBlocks(final long vfp1, final long vfp2) {
- final long block1 = getBlockAddress(vfp1);
- final long block2 = getBlockAddress(vfp2);
- return (block1 == block2 || block1 + 1 == block2);
- }
-
- /**
- * @param blockAddress File offset of start of BGZF block.
- * @param blockOffset Offset into uncompressed block.
- * @return Virtual file pointer that embodies the input parameters.
- */
- static long makeFilePointer(final long blockAddress, final int blockOffset) {
- if (blockOffset < 0) {
- throw new IllegalArgumentException("Negative blockOffset " + blockOffset + " not allowed.");
- }
- if (blockAddress < 0) {
- throw new IllegalArgumentException("Negative blockAddress " + blockAddress + " not allowed.");
- }
- if (blockOffset > MAX_OFFSET) {
- throw new IllegalArgumentException("blockOffset " + blockOffset + " too large.");
- }
- if (blockAddress > MAX_BLOCK_ADDRESS) {
- throw new IllegalArgumentException("blockAddress " + blockAddress + " too large.");
- }
- return blockAddress << SHIFT_AMOUNT | blockOffset;
- }
-
- /**
- * @param virtualFilePointer
- * @return File offset of start of BGZF block for this virtual file pointer.
- */
- public static long getBlockAddress(final long virtualFilePointer) {
- return (virtualFilePointer >> SHIFT_AMOUNT) & ADDRESS_MASK;
- }
-
- /**
- * @param virtualFilePointer
- * @return Offset into uncompressed block for this virtual file pointer.
- */
- public static int getBlockOffset(final long virtualFilePointer) {
- return (int) (virtualFilePointer & OFFSET_MASK);
- }
-
- public static String asString(final long vfp) {
- return String.format("%d(0x%x): (block address: %d, offset: %d)", vfp, vfp, getBlockAddress(vfp), getBlockOffset(vfp));
- }
-}
diff --git a/src/java/net/sf/samtools/util/BlockCompressedInputStream.java b/src/java/net/sf/samtools/util/BlockCompressedInputStream.java
deleted file mode 100755
index a66a4b2..0000000
--- a/src/java/net/sf/samtools/util/BlockCompressedInputStream.java
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.net.URL;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Arrays;
-
-import net.sf.samtools.FileTruncatedException;
-import net.sf.samtools.SAMException;
-import net.sf.samtools.seekablestream.SeekableBufferedStream;
-import net.sf.samtools.seekablestream.SeekableFileStream;
-import net.sf.samtools.seekablestream.SeekableHTTPStream;
-import net.sf.samtools.seekablestream.SeekableStream;
-
-/*
- * Utility class for reading BGZF block compressed files. The caller can treat this file like any other InputStream.
- * It probably is not necessary to wrap this stream in a buffering stream, because there is internal buffering.
- * The advantage of BGZF over conventional GZip format is that BGZF allows for seeking without having to read the
- * entire file up to the location being sought. Note that seeking is only possible if the ctor(File) is used.
- *
- * c.f. http://samtools.sourceforge.net/SAM1.pdf for details of BGZF format
- */
-public class BlockCompressedInputStream extends InputStream implements LocationAware {
- private InputStream mStream = null;
- private SeekableStream mFile = null;
- private byte[] mFileBuffer = null;
- private byte[] mCurrentBlock = null;
- private int mCurrentOffset = 0;
- private long mBlockAddress = 0;
- private int mLastBlockLength = 0;
- private final BlockGunzipper blockGunzipper = new BlockGunzipper();
-
-
- /**
- * Note that seek() is not supported if this ctor is used.
- */
- public BlockCompressedInputStream(final InputStream stream) {
- this(stream, true);
- }
-
- /**
- * Note that seek() is not supported if this ctor is used.
- */
- public BlockCompressedInputStream(final InputStream stream, final boolean allowBuffering) {
- if (allowBuffering) {
- mStream = IOUtil.toBufferedStream(stream);
- }
- else {
- mStream = stream;
- }
-
- mFile = null;
- }
-
- /**
- * Use this ctor if you wish to call seek()
- */
- public BlockCompressedInputStream(final File file)
- throws IOException {
- mFile = new SeekableFileStream(file);
- mStream = null;
-
- }
-
- public BlockCompressedInputStream(final URL url) {
- mFile = new SeekableBufferedStream(new SeekableHTTPStream(url));
- mStream = null;
- }
-
- /**
- * For providing some arbitrary data source. No additional buffering is
- * provided, so if the underlying source is not buffered, wrap it in a
- * SeekableBufferedStream before passing to this ctor.
- */
- public BlockCompressedInputStream(final SeekableStream strm) {
- mFile = strm;
- mStream = null;
- }
-
- /**
- * Determines whether or not the inflater will re-calculated the CRC on the decompressed data
- * and check it against the value stored in the GZIP header. CRC checking is an expensive
- * operation and should be used accordingly.
- */
- public void setCheckCrcs(final boolean check) {
- this.blockGunzipper.setCheckCrcs(check);
- }
-
- /**
- * @return the number of bytes that can be read (or skipped over) from this input stream without blocking by the
- * next caller of a method for this input stream. The next caller might be the same thread or another thread.
- * Note that although the next caller can read this many bytes without blocking, the available() method call itself
- * may block in order to fill an internal buffer if it has been exhausted.
- */
- public int available()
- throws IOException {
- if (mCurrentBlock == null || mCurrentOffset == mCurrentBlock.length) {
- readBlock();
- }
- if (mCurrentBlock == null) {
- return 0;
- }
- return mCurrentBlock.length - mCurrentOffset;
- }
-
- /**
- * Closes the underlying InputStream or RandomAccessFile
- */
- public void close()
- throws IOException {
- if (mFile != null) {
- mFile.close();
- mFile = null;
- } else if (mStream != null) {
- mStream.close();
- mStream = null;
- }
- // Encourage garbage collection
- mFileBuffer = null;
- mCurrentBlock = null;
- }
-
- /**
- * Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255.
- * If no byte is available because the end of the stream has been reached, the value -1 is returned.
- * This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
-
- * @return the next byte of data, or -1 if the end of the stream is reached.
- */
- public int read()
- throws IOException {
- return (available() > 0) ? (mCurrentBlock[mCurrentOffset++] & 0xFF) : -1;
- }
-
- /**
- * Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes
- * actually read is returned as an integer. This method blocks until input data is available, end of file is detected,
- * or an exception is thrown.
- *
- * read(buf) has the same effect as read(buf, 0, buf.length).
- *
- * @param buffer the buffer into which the data is read.
- * @return the total number of bytes read into the buffer, or -1 is there is no more data because the end of
- * the stream has been reached.
- */
- public int read(final byte[] buffer)
- throws IOException {
- return read(buffer, 0, buffer.length);
- }
-
- private volatile ByteArrayOutputStream buf = null;
- private static final byte eol = '\n';
- private static final byte eolCr = '\r';
-
- /**
- * Reads a whole line. A line is considered to be terminated by either a line feed ('\n'),
- * carriage return ('\r') or carriage return followed by a line feed ("\r\n").
- *
- * @return A String containing the contents of the line, excluding the line terminating
- * character, or null if the end of the stream has been reached
- *
- * @exception IOException If an I/O error occurs
- * @
- */
- public String readLine() throws IOException {
- int available = available();
- if (available == 0) {
- return null;
- }
- if(null == buf){ // lazy initialisation
- buf = new ByteArrayOutputStream(8192);
- }
- buf.reset();
- boolean done = false;
- boolean foundCr = false; // \r found flag
- while (!done) {
- int linetmpPos = mCurrentOffset;
- int bCnt = 0;
- while((available-- > 0)){
- final byte c = mCurrentBlock[linetmpPos++];
- if(c == eol){ // found \n
- done = true;
- break;
- } else if(foundCr){ // previous char was \r
- --linetmpPos; // current char is not \n so put it back
- done = true;
- break;
- } else if(c == eolCr){ // found \r
- foundCr = true;
- continue; // no ++bCnt
- }
- ++bCnt;
- }
- if(mCurrentOffset < linetmpPos){
- buf.write(mCurrentBlock, mCurrentOffset, bCnt);
- mCurrentOffset = linetmpPos;
- }
- available = available();
- if(available == 0){
- // EOF
- done = true;
- }
- }
- return buf.toString();
- }
-
- /**
- * Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read
- * as many as len bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer.
- *
- * This method blocks until input data is available, end of file is detected, or an exception is thrown.
- *
- * @param buffer buffer into which data is read.
- * @param offset the start offset in array b at which the data is written.
- * @param length the maximum number of bytes to read.
- * @return the total number of bytes read into the buffer, or -1 if there is no more data because the end of
- * the stream has been reached.
- */
- public int read(final byte[] buffer, int offset, int length)
- throws IOException {
- final int originalLength = length;
- while (length > 0) {
- final int available = available();
- if (available == 0) {
- // Signal EOF to caller
- if (originalLength == length) {
- return -1;
- }
- break;
- }
- final int copyLength = Math.min(length, available);
- System.arraycopy(mCurrentBlock, mCurrentOffset, buffer, offset, copyLength);
- mCurrentOffset += copyLength;
- offset += copyLength;
- length -= copyLength;
- }
- return originalLength - length;
- }
-
- /**
- * Seek to the given position in the file. Note that pos is a special virtual file pointer,
- * not an actual byte offset.
- *
- * @param pos virtual file pointer
- */
- public void seek(final long pos)
- throws IOException {
- if (mFile == null) {
- throw new IOException("Cannot seek on stream based file");
- }
- // Decode virtual file pointer
- // Upper 48 bits is the byte offset into the compressed stream of a block.
- // Lower 16 bits is the byte offset into the uncompressed stream inside the block.
- final long compressedOffset = BlockCompressedFilePointerUtil.getBlockAddress(pos);
- final int uncompressedOffset = BlockCompressedFilePointerUtil.getBlockOffset(pos);
- final int available;
- if (mBlockAddress == compressedOffset && mCurrentBlock != null) {
- available = mCurrentBlock.length;
- } else {
- mFile.seek(compressedOffset);
- mBlockAddress = compressedOffset;
- mLastBlockLength = 0;
- readBlock();
- available = available();
- }
- if (uncompressedOffset > available ||
- (uncompressedOffset == available && !eof())) {
- throw new IOException("Invalid file pointer: " + pos);
- }
- mCurrentOffset = uncompressedOffset;
- }
-
- private boolean eof() throws IOException {
- if (mFile.eof()) {
- return true;
- }
- // If the last remaining block is the size of the EMPTY_GZIP_BLOCK, this is the same as being at EOF.
- return (mFile.length() - (mBlockAddress + mLastBlockLength) == BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length);
- }
-
- /**
- * @return virtual file pointer that can be passed to seek() to return to the current position. This is
- * not an actual byte offset, so arithmetic on file pointers cannot be done to determine the distance between
- * the two.
- */
- public long getFilePointer() {
- if (mCurrentOffset == mCurrentBlock.length) {
- // If current offset is at the end of the current block, file pointer should point
- // to the beginning of the next block.
- return BlockCompressedFilePointerUtil.makeFilePointer(mBlockAddress + mLastBlockLength, 0);
- }
- return BlockCompressedFilePointerUtil.makeFilePointer(mBlockAddress, mCurrentOffset);
- }
-
- @Override
- public long getPosition() {
- return getFilePointer();
- }
-
- public static long getFileBlock(final long bgzfOffset) {
- return BlockCompressedFilePointerUtil.getBlockAddress(bgzfOffset);
- }
-
- /**
- * @param stream Must be at start of file. Throws RuntimeException if !stream.markSupported().
- * @return true if the given file looks like a valid BGZF file.
- */
- public static boolean isValidFile(final InputStream stream)
- throws IOException {
- if (!stream.markSupported()) {
- throw new RuntimeException("Cannot test non-buffered stream");
- }
- stream.mark(BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH);
- final byte[] buffer = new byte[BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH];
- final int count = readBytes(stream, buffer, 0, BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH);
- stream.reset();
- return count == BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH && isValidBlockHeader(buffer);
- }
-
- private static boolean isValidBlockHeader(final byte[] buffer) {
- return (buffer[0] == BlockCompressedStreamConstants.GZIP_ID1 &&
- (buffer[1] & 0xFF) == BlockCompressedStreamConstants.GZIP_ID2 &&
- (buffer[3] & BlockCompressedStreamConstants.GZIP_FLG) != 0 &&
- buffer[10] == BlockCompressedStreamConstants.GZIP_XLEN &&
- buffer[12] == BlockCompressedStreamConstants.BGZF_ID1 &&
- buffer[13] == BlockCompressedStreamConstants.BGZF_ID2);
- }
-
- private void readBlock()
- throws IOException {
-
- if (mFileBuffer == null) {
- mFileBuffer = new byte[BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE];
- }
- int count = readBytes(mFileBuffer, 0, BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH);
- if (count == 0) {
- // Handle case where there is no empty gzip block at end.
- mCurrentOffset = 0;
- mBlockAddress += mLastBlockLength;
- mCurrentBlock = new byte[0];
- return;
- }
- if (count != BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH) {
- throw new IOException("Premature end of file");
- }
- final int blockLength = unpackInt16(mFileBuffer, BlockCompressedStreamConstants.BLOCK_LENGTH_OFFSET) + 1;
- if (blockLength < BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH || blockLength > mFileBuffer.length) {
- throw new IOException("Unexpected compressed block length: " + blockLength);
- }
- final int remaining = blockLength - BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH;
- count = readBytes(mFileBuffer, BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH, remaining);
- if (count != remaining) {
- throw new FileTruncatedException("Premature end of file");
- }
- inflateBlock(mFileBuffer, blockLength);
- mCurrentOffset = 0;
- mBlockAddress += mLastBlockLength;
- mLastBlockLength = blockLength;
- }
-
- private void inflateBlock(final byte[] compressedBlock, final int compressedLength)
- throws IOException {
- final int uncompressedLength = unpackInt32(compressedBlock, compressedLength-4);
- byte[] buffer = mCurrentBlock;
- mCurrentBlock = null;
- if (buffer == null || buffer.length != uncompressedLength) {
- try {
- buffer = new byte[uncompressedLength];
- } catch (final NegativeArraySizeException e) {
- throw new RuntimeException("BGZF file has invalid uncompressedLength: " + uncompressedLength, e);
- }
- }
- blockGunzipper.unzipBlock(buffer, compressedBlock, compressedLength);
- mCurrentBlock = buffer;
- }
-
- private int readBytes(final byte[] buffer, final int offset, final int length)
- throws IOException {
- if (mFile != null) {
- return readBytes(mFile, buffer, offset, length);
- } else if (mStream != null) {
- return readBytes(mStream, buffer, offset, length);
- } else {
- return 0;
- }
- }
-
- private static int readBytes(final SeekableStream file, final byte[] buffer, final int offset, final int length)
- throws IOException {
- int bytesRead = 0;
- while (bytesRead < length) {
- final int count = file.read(buffer, offset + bytesRead, length - bytesRead);
- if (count <= 0) {
- break;
- }
- bytesRead += count;
- }
- return bytesRead;
- }
-
- private static int readBytes(final InputStream stream, final byte[] buffer, final int offset, final int length)
- throws IOException {
- int bytesRead = 0;
- while (bytesRead < length) {
- final int count = stream.read(buffer, offset + bytesRead, length - bytesRead);
- if (count <= 0) {
- break;
- }
- bytesRead += count;
- }
- return bytesRead;
- }
-
- private int unpackInt16(final byte[] buffer, final int offset) {
- return ((buffer[offset] & 0xFF) |
- ((buffer[offset+1] & 0xFF) << 8));
- }
-
- private int unpackInt32(final byte[] buffer, final int offset) {
- return ((buffer[offset] & 0xFF) |
- ((buffer[offset+1] & 0xFF) << 8) |
- ((buffer[offset+2] & 0xFF) << 16) |
- ((buffer[offset+3] & 0xFF) << 24));
- }
-
- public enum FileTermination {HAS_TERMINATOR_BLOCK, HAS_HEALTHY_LAST_BLOCK, DEFECTIVE}
-
- public static FileTermination checkTermination(final File file)
- throws IOException {
- final long fileSize = file.length();
- if (fileSize < BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length) {
- return FileTermination.DEFECTIVE;
- }
- final RandomAccessFile raFile = new RandomAccessFile(file, "r");
- try {
- raFile.seek(fileSize - BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length);
- byte[] buf = new byte[BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length];
- raFile.readFully(buf);
- if (Arrays.equals(buf, BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK)) {
- return FileTermination.HAS_TERMINATOR_BLOCK;
- }
- final int bufsize = (int)Math.min(fileSize, BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE);
- buf = new byte[bufsize];
- raFile.seek(fileSize - bufsize);
- raFile.read(buf);
- for (int i = buf.length - BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length;
- i >= 0; --i) {
- if (!preambleEqual(BlockCompressedStreamConstants.GZIP_BLOCK_PREAMBLE,
- buf, i, BlockCompressedStreamConstants.GZIP_BLOCK_PREAMBLE.length)) {
- continue;
- }
- final ByteBuffer byteBuffer = ByteBuffer.wrap(buf, i + BlockCompressedStreamConstants.GZIP_BLOCK_PREAMBLE.length, 4);
- byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
- final int totalBlockSizeMinusOne = byteBuffer.getShort() & 0xFFFF;
- if (buf.length - i == totalBlockSizeMinusOne + 1) {
- return FileTermination.HAS_HEALTHY_LAST_BLOCK;
- } else {
- return FileTermination.DEFECTIVE;
- }
- }
- return FileTermination.DEFECTIVE;
- } finally {
- raFile.close();
- }
- }
-
- public static void assertNonDefectiveFile(final File file) throws IOException {
- if (checkTermination(file) == FileTermination.DEFECTIVE) {
- throw new SAMException(file.getAbsolutePath() + " does not have a valid GZIP block at the end of the file.");
- }
- }
-
- private static boolean preambleEqual(final byte[] preamble, final byte[] buf, final int startOffset, final int length) {
- for (int i = 0; i < length; ++i) {
- if (preamble[i] != buf[i + startOffset]) {
- return false;
- }
- }
- return true;
- }
-}
-
-
diff --git a/src/java/net/sf/samtools/util/BlockCompressedOutputStream.java b/src/java/net/sf/samtools/util/BlockCompressedOutputStream.java
deleted file mode 100644
index 5c98742..0000000
--- a/src/java/net/sf/samtools/util/BlockCompressedOutputStream.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.util.zip.DeflaterFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.zip.CRC32;
-import java.util.zip.Deflater;
-
-/**
- * Writer for a file that is a series of gzip blocks (BGZF format). The caller just treats it as an
- * OutputStream, and under the covers a gzip block is written when the amount of uncompressed as-yet-unwritten
- * bytes reaches a threshold.
- *
- * The advantage of BGZF over conventional gzip is that BGZF allows for seeking without having to scan through
- * the entire file up to the position being sought.
- *
- * Note that the flush() method should not be called by client
- * unless you know what you're doing, because it forces a gzip block to be written even if the
- * number of buffered bytes has not reached threshold. close(), on the other hand, must be called
- * when done writing in order to force the last gzip block to be written.
- *
- * c.f. http://samtools.sourceforge.net/SAM1.pdf for details of BGZF file format.
- */
-public class BlockCompressedOutputStream
- extends OutputStream
- implements LocationAware
-{
- private static int defaultCompressionLevel = BlockCompressedStreamConstants.DEFAULT_COMPRESSION_LEVEL;
-
- /**
- * Sets the GZip compression level for subsequent BlockCompressedOutputStream object creation
- * that do not specify the compression level.
- * @param compressionLevel 1 <= compressionLevel <= 9
- */
- public static void setDefaultCompressionLevel(final int compressionLevel) {
- if (compressionLevel < Deflater.NO_COMPRESSION || compressionLevel > Deflater.BEST_COMPRESSION) {
- throw new IllegalArgumentException("Invalid compression level: " + compressionLevel);
- }
- defaultCompressionLevel = compressionLevel;
- }
-
- public static int getDefaultCompressionLevel() {
- return defaultCompressionLevel;
- }
-
- private final BinaryCodec codec;
- private final byte[] uncompressedBuffer = new byte[BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE];
- private int numUncompressedBytes = 0;
- private final byte[] compressedBuffer =
- new byte[BlockCompressedStreamConstants.MAX_COMPRESSED_BLOCK_SIZE -
- BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH];
- private final Deflater deflater;
-
- // A second deflater is created for the very unlikely case where the regular deflation actually makes
- // things bigger, and the compressed block is too big. It should be possible to downshift the
- // primary deflater to NO_COMPRESSION level, recompress, and then restore it to its original setting,
- // but in practice that doesn't work.
- // The motivation for deflating at NO_COMPRESSION level is that it will predictably produce compressed
- // output that is 10 bytes larger than the input, and the threshold at which a block is generated is such that
- // the size of tbe final gzip block will always be <= 64K. This is preferred over the previous method,
- // which would attempt to compress up to 64K bytes, and if the resulting compressed block was too large,
- // try compressing fewer input bytes (aka "downshifting'). The problem with downshifting is that
- // getFilePointer might return an inaccurate value.
- // I assume (AW 29-Oct-2013) that there is no value in using hardware-assisted deflater for no-compression mode,
- // so just use JDK standard.
- private final Deflater noCompressionDeflater = new Deflater(Deflater.NO_COMPRESSION, true);
- private final CRC32 crc32 = new CRC32();
- private File file = null;
- private long mBlockAddress = 0;
-
-
- // Really a local variable, but allocate once to reduce GC burden.
- private final byte[] singleByteArray = new byte[1];
-
- /**
- * Uses default compression level, which is 5 unless changed by setDefaultCompressionLevel
- */
- public BlockCompressedOutputStream(final String filename) {
- this(filename, defaultCompressionLevel);
- }
-
- /**
- * Uses default compression level, which is 5 unless changed by setDefaultCompressionLevel
- */
- public BlockCompressedOutputStream(final File file) {
- this(file, defaultCompressionLevel);
- }
-
- /**
- * Prepare to compress at the given compression level
- * @param compressionLevel 1 <= compressionLevel <= 9
- */
- public BlockCompressedOutputStream(final String filename, final int compressionLevel) {
- this(new File(filename), compressionLevel);
- }
-
- /**
- * Prepare to compress at the given compression level
- * @param compressionLevel 1 <= compressionLevel <= 9
- */
- public BlockCompressedOutputStream(final File file, final int compressionLevel) {
- this.file = file;
- codec = new BinaryCodec(file, true);
- deflater = DeflaterFactory.makeDeflater(compressionLevel, true);
- }
-
- /**
- * Constructors that take output streams
- * file may be null
- */
- public BlockCompressedOutputStream(final OutputStream os, final File file) {
- this(os, file, defaultCompressionLevel);
- }
-
- public BlockCompressedOutputStream(final OutputStream os, final File file, final int compressionLevel) {
- this.file = file;
- codec = new BinaryCodec(os);
- if (file != null) {
- codec.setOutputFileName(file.getAbsolutePath());
- }
- deflater = DeflaterFactory.makeDeflater(compressionLevel, true);
- }
-
- /**
- *
- * @param location May be null. Used for error messages, and for checking file termination.
- * @param output May or not already be a BlockCompressedOutputStream.
- * @return A BlockCompressedOutputStream, either by wrapping the given OutputStream, or by casting if it already
- * is a BCOS.
- */
- public static BlockCompressedOutputStream maybeBgzfWrapOutputStream(final File location, OutputStream output) {
- if (!(output instanceof BlockCompressedOutputStream)) {
- return new BlockCompressedOutputStream(output, location);
- } else {
- return (BlockCompressedOutputStream)output;
- }
- }
-
- /**
- * Writes b.length bytes from the specified byte array to this output stream. The general contract for write(b)
- * is that it should have exactly the same effect as the call write(b, 0, b.length).
- * @param bytes the data
- */
- @Override
- public void write(final byte[] bytes) throws IOException {
- write(bytes, 0, bytes.length);
- }
-
- /**
- * Writes len bytes from the specified byte array starting at offset off to this output stream. The general
- * contract for write(b, off, len) is that some of the bytes in the array b are written to the output stream in order;
- * element b[off] is the first byte written and b[off+len-1] is the last byte written by this operation.
- *
- * @param bytes the data
- * @param startIndex the start offset in the data
- * @param numBytes the number of bytes to write
- */
- @Override
- public void write(final byte[] bytes, int startIndex, int numBytes) throws IOException {
- assert(numUncompressedBytes < uncompressedBuffer.length);
- while (numBytes > 0) {
- final int bytesToWrite = Math.min(uncompressedBuffer.length - numUncompressedBytes, numBytes);
- System.arraycopy(bytes, startIndex, uncompressedBuffer, numUncompressedBytes, bytesToWrite);
- numUncompressedBytes += bytesToWrite;
- startIndex += bytesToWrite;
- numBytes -= bytesToWrite;
- assert(numBytes >= 0);
- if (numUncompressedBytes == uncompressedBuffer.length) {
- deflateBlock();
- }
- }
- }
-
- /**
- * WARNING: flush() affects the output format, because it causes the current contents of uncompressedBuffer
- * to be compressed and written, even if it isn't full. Unless you know what you're doing, don't call flush().
- * Instead, call close(), which will flush any unwritten data before closing the underlying stream.
- *
- */
- @Override
- public void flush() throws IOException {
- while (numUncompressedBytes > 0) {
- deflateBlock();
- }
- codec.getOutputStream().flush();
- }
-
- /**
- * close() must be called in order to flush any remaining buffered bytes. An unclosed file will likely be
- * defective.
- *
- */
- @Override
- public void close() throws IOException {
- flush();
- // For debugging...
- // if (numberOfThrottleBacks > 0) {
- // System.err.println("In BlockCompressedOutputStream, had to throttle back " + numberOfThrottleBacks +
- // " times for file " + codec.getOutputFileName());
- // }
- codec.writeBytes(BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK);
- codec.close();
- // Can't re-open something that is not a regular file, e.g. a named pipe or an output stream
- if (this.file == null || !this.file.isFile()) return;
- if (BlockCompressedInputStream.checkTermination(this.file) !=
- BlockCompressedInputStream.FileTermination.HAS_TERMINATOR_BLOCK) {
- throw new IOException("Terminator block not found after closing BGZF file " + this.file);
- }
- }
-
- /**
- * Writes the specified byte to this output stream. The general contract for write is that one byte is written
- * to the output stream. The byte to be written is the eight low-order bits of the argument b.
- * The 24 high-order bits of b are ignored.
- * @param bite
- * @throws IOException
- */
- public void write(final int bite) throws IOException {
- singleByteArray[0] = (byte)bite;
- write(singleByteArray);
- }
-
- /** Encode virtual file pointer
- * Upper 48 bits is the byte offset into the compressed stream of a block.
- * Lower 16 bits is the byte offset into the uncompressed stream inside the block.
- */
- public long getFilePointer(){
- return BlockCompressedFilePointerUtil.makeFilePointer(mBlockAddress, numUncompressedBytes);
- }
-
- @Override
- public long getPosition() {
- return getFilePointer();
- }
-
- /**
- * Attempt to write the data in uncompressedBuffer to the underlying file in a gzip block.
- * If the entire uncompressedBuffer does not fit in the maximum allowed size, reduce the amount
- * of data to be compressed, and slide the excess down in uncompressedBuffer so it can be picked
- * up in the next deflate event.
- * @return size of gzip block that was written.
- */
- private int deflateBlock() {
- if (numUncompressedBytes == 0) {
- return 0;
- }
- final int bytesToCompress = numUncompressedBytes;
- // Compress the input
- deflater.reset();
- deflater.setInput(uncompressedBuffer, 0, bytesToCompress);
- deflater.finish();
- int compressedSize = deflater.deflate(compressedBuffer, 0, compressedBuffer.length);
-
- // If it didn't all fit in compressedBuffer.length, set compression level to NO_COMPRESSION
- // and try again. This should always fit.
- if (!deflater.finished()) {
- noCompressionDeflater.reset();
- noCompressionDeflater.setInput(uncompressedBuffer, 0, bytesToCompress);
- noCompressionDeflater.finish();
- compressedSize = noCompressionDeflater.deflate(compressedBuffer, 0, compressedBuffer.length);
- if (!noCompressionDeflater.finished()) {
- throw new IllegalStateException("unpossible");
- }
- }
- // Data compressed small enough, so write it out.
- crc32.reset();
- crc32.update(uncompressedBuffer, 0, bytesToCompress);
-
- final int totalBlockSize = writeGzipBlock(compressedSize, bytesToCompress, crc32.getValue());
- assert(bytesToCompress <= numUncompressedBytes);
-
- // Clear out from uncompressedBuffer the data that was written
- if (bytesToCompress == numUncompressedBytes) {
- numUncompressedBytes = 0;
- } else {
- System.arraycopy(uncompressedBuffer, bytesToCompress, uncompressedBuffer, 0,
- numUncompressedBytes - bytesToCompress);
- numUncompressedBytes -= bytesToCompress;
- }
- mBlockAddress += totalBlockSize;
- return totalBlockSize;
- }
-
- /**
- * Writes the entire gzip block, assuming the compressed data is stored in compressedBuffer
- * @return size of gzip block that was written.
- */
- private int writeGzipBlock(final int compressedSize, final int uncompressedSize, final long crc) {
- // Init gzip header
- codec.writeByte(BlockCompressedStreamConstants.GZIP_ID1);
- codec.writeByte(BlockCompressedStreamConstants.GZIP_ID2);
- codec.writeByte(BlockCompressedStreamConstants.GZIP_CM_DEFLATE);
- codec.writeByte(BlockCompressedStreamConstants.GZIP_FLG);
- codec.writeInt(0); // Modification time
- codec.writeByte(BlockCompressedStreamConstants.GZIP_XFL);
- codec.writeByte(BlockCompressedStreamConstants.GZIP_OS_UNKNOWN);
- codec.writeShort(BlockCompressedStreamConstants.GZIP_XLEN);
- codec.writeByte(BlockCompressedStreamConstants.BGZF_ID1);
- codec.writeByte(BlockCompressedStreamConstants.BGZF_ID2);
- codec.writeShort(BlockCompressedStreamConstants.BGZF_LEN);
- final int totalBlockSize = compressedSize + BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH +
- BlockCompressedStreamConstants.BLOCK_FOOTER_LENGTH;
-
- // I don't know why we store block size - 1, but that is what the spec says
- codec.writeShort((short)(totalBlockSize - 1));
- codec.writeBytes(compressedBuffer, 0, compressedSize);
- codec.writeInt((int)crc);
- codec.writeInt(uncompressedSize);
- return totalBlockSize;
- }
-}
diff --git a/src/java/net/sf/samtools/util/BlockCompressedStreamConstants.java b/src/java/net/sf/samtools/util/BlockCompressedStreamConstants.java
deleted file mode 100644
index ea25733..0000000
--- a/src/java/net/sf/samtools/util/BlockCompressedStreamConstants.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.Defaults;
-
-/**
- * Constants shared by BlockCompressed{Input,Output}Stream classes
- */
-public class BlockCompressedStreamConstants {
- // Number of bytes in the gzip block before the deflated data.
- // This is not the standard header size, because we include one optional subfield,
- // but it is the standard for us.
- public static final int BLOCK_HEADER_LENGTH = 18;
-
- // Location in the gzip block of the total block size (actually total block size - 1)
- public static final int BLOCK_LENGTH_OFFSET = 16;
-
- // Number of bytes that follow the deflated data
- public static final int BLOCK_FOOTER_LENGTH = 8;
-
- // We require that a compressed block (including header and footer, be <= this)
- public static final int MAX_COMPRESSED_BLOCK_SIZE = 64 * 1024;
-
- // Gzip overhead is the header, the footer, and the block size (encoded as a short).
- public static final int GZIP_OVERHEAD = BLOCK_HEADER_LENGTH + BLOCK_FOOTER_LENGTH + 2;
-
- // If Deflater has compression level == NO_COMPRESSION, 10 bytes of overhead (determined experimentally).
- public static final int NO_COMPRESSION_OVERHEAD = 10;
-
- // Push out a gzip block when this many uncompressed bytes have been accumulated.
- // This size is selected so that if data is not compressible, if Deflater is given
- // compression level == NO_COMPRESSION, compressed size is guaranteed to be <= MAX_COMPRESSED_BLOCK_SIZE.
- public static final int DEFAULT_UNCOMPRESSED_BLOCK_SIZE = 64 * 1024 - (GZIP_OVERHEAD + NO_COMPRESSION_OVERHEAD);
-
- // Magic numbers
- public static final byte GZIP_ID1 = 31;
- public static final int GZIP_ID2 = 139;
-
- // FEXTRA flag means there are optional fields
- public static final int GZIP_FLG = 4;
-
- // extra flags
- public static final int GZIP_XFL = 0;
-
- // length of extra subfield
- public static final short GZIP_XLEN = 6;
-
- // The deflate compression, which is customarily used by gzip
- public static final byte GZIP_CM_DEFLATE = 8;
-
- public static final int DEFAULT_COMPRESSION_LEVEL = Defaults.COMPRESSION_LEVEL;
-
- // We don't care about OS because we're not doing line terminator translation
- public static final int GZIP_OS_UNKNOWN = 255;
-
- // The subfield ID
- public static final byte BGZF_ID1 = 66;
- public static final byte BGZF_ID2 = 67;
-
- // subfield length in bytes
- public static final byte BGZF_LEN = 2;
-
- public static final byte[] EMPTY_GZIP_BLOCK = {
- BlockCompressedStreamConstants.GZIP_ID1,
- (byte)BlockCompressedStreamConstants.GZIP_ID2,
- BlockCompressedStreamConstants.GZIP_CM_DEFLATE,
- BlockCompressedStreamConstants.GZIP_FLG,
- 0, 0, 0, 0, // Modification time
- BlockCompressedStreamConstants.GZIP_XFL,
- (byte)BlockCompressedStreamConstants.GZIP_OS_UNKNOWN,
- BlockCompressedStreamConstants.GZIP_XLEN, 0, // Little-endian short
- BlockCompressedStreamConstants.BGZF_ID1,
- BlockCompressedStreamConstants.BGZF_ID2,
- BlockCompressedStreamConstants.BGZF_LEN, 0, // Little-endian short
- // Total block size - 1
- BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH +
- BlockCompressedStreamConstants.BLOCK_FOOTER_LENGTH - 1 + 2, 0, // Little-endian short
- // Dummy payload?
- 3, 0,
- 0, 0, 0, 0, // crc
- 0, 0, 0, 0, // uncompressedSize
- };
- public static final byte[] GZIP_BLOCK_PREAMBLE = {
- BlockCompressedStreamConstants.GZIP_ID1,
- (byte)BlockCompressedStreamConstants.GZIP_ID2,
- BlockCompressedStreamConstants.GZIP_CM_DEFLATE,
- BlockCompressedStreamConstants.GZIP_FLG,
- 0, 0, 0, 0, // Modification time
- BlockCompressedStreamConstants.GZIP_XFL,
- (byte)BlockCompressedStreamConstants.GZIP_OS_UNKNOWN,
- BlockCompressedStreamConstants.GZIP_XLEN, 0, // Little-endian short
- BlockCompressedStreamConstants.BGZF_ID1,
- BlockCompressedStreamConstants.BGZF_ID2,
- BlockCompressedStreamConstants.BGZF_LEN, 0, // Little-endian short
- };
-}
diff --git a/src/java/net/sf/samtools/util/BlockGunzipper.java b/src/java/net/sf/samtools/util/BlockGunzipper.java
deleted file mode 100644
index 365a6bd..0000000
--- a/src/java/net/sf/samtools/util/BlockGunzipper.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMFormatException;
-
-import java.util.zip.Inflater;
-import java.util.zip.CRC32;
-import java.util.zip.DataFormatException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Alternative to GZIPInputStream, for decompressing GZIP blocks that are already loaded into a byte[].
- * The main advantage is that this object can be used over and over again to decompress many blocks,
- * whereas a new GZIPInputStream and ByteArrayInputStream would otherwise need to be created for each
- * block to be decompressed.
- *
- * This code requires that the GZIP header conform to the GZIP blocks written to BAM files, with
- * a specific subfield and no other optional stuff.
- *
- * @author alecw at broadinstitute.org
- */
-public class BlockGunzipper {
- private final Inflater inflater = new Inflater(true); // GZIP mode
- private final CRC32 crc32 = new CRC32();
- private boolean checkCrcs = false;
-
- /** Allows the caller to decide whether or not to check CRCs on when uncompressing blocks. */
- public void setCheckCrcs(final boolean check) {
- this.checkCrcs = check;
- }
-
- /**
- * Decompress GZIP-compressed data
- * @param uncompressedBlock must be big enough to hold decompressed output.
- * @param compressedBlock compressed data starting at offset 0
- * @param compressedLength size of compressed data, possibly less than the size of the buffer.
- */
- void unzipBlock(byte[] uncompressedBlock, byte[] compressedBlock, int compressedLength) {
- try {
- ByteBuffer byteBuffer = ByteBuffer.wrap(compressedBlock, 0, compressedLength);
- byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
-
- // Validate GZIP header
- if (byteBuffer.get() != BlockCompressedStreamConstants.GZIP_ID1 ||
- byteBuffer.get() != (byte)BlockCompressedStreamConstants.GZIP_ID2 ||
- byteBuffer.get() != BlockCompressedStreamConstants.GZIP_CM_DEFLATE ||
- byteBuffer.get() != BlockCompressedStreamConstants.GZIP_FLG
- ) {
- throw new SAMFormatException("Invalid GZIP header");
- }
- // Skip MTIME, XFL, OS fields
- byteBuffer.position(byteBuffer.position() + 6);
- if (byteBuffer.getShort() != BlockCompressedStreamConstants.GZIP_XLEN) {
- throw new SAMFormatException("Invalid GZIP header");
- }
- // Skip blocksize subfield intro
- byteBuffer.position(byteBuffer.position() + 4);
- // Read ushort
- final int totalBlockSize = (byteBuffer.getShort() & 0xffff) + 1;
- if (totalBlockSize != compressedLength) {
- throw new SAMFormatException("GZIP blocksize disagreement");
- }
-
- // Read expected size and CRD from end of GZIP block
- final int deflatedSize = compressedLength - BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH - BlockCompressedStreamConstants.BLOCK_FOOTER_LENGTH;
- byteBuffer.position(byteBuffer.position() + deflatedSize);
- int expectedCrc = byteBuffer.getInt();
- int uncompressedSize = byteBuffer.getInt();
- inflater.reset();
-
- // Decompress
- inflater.setInput(compressedBlock, BlockCompressedStreamConstants.BLOCK_HEADER_LENGTH, deflatedSize);
- final int inflatedBytes = inflater.inflate(uncompressedBlock, 0, uncompressedSize);
- if (inflatedBytes != uncompressedSize) {
- throw new SAMFormatException("Did not inflate expected amount");
- }
-
- // Validate CRC if so desired
- if (this.checkCrcs) {
- crc32.reset();
- crc32.update(uncompressedBlock, 0, uncompressedSize);
- final long crc = crc32.getValue();
- if ((int)crc != expectedCrc) {
- throw new SAMFormatException("CRC mismatch");
- }
- }
- } catch (DataFormatException e)
- {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/BufferedLineReader.java b/src/java/net/sf/samtools/util/BufferedLineReader.java
deleted file mode 100644
index 90ea98b..0000000
--- a/src/java/net/sf/samtools/util/BufferedLineReader.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.Defaults;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.Charset;
-
-/**
- * Implementation of LineReader that is a thin wrapper around BufferedReader. On Linux, this is faster
- * than AsciiLineReaderImpl. If you use AsciiLineReader rather than this class, it will detect the OS
- * and delegate to the preferred implementation.
- *
- * TODO: Replace this with {@link java.io.LineNumberReader}?
- *
- * @author alecw at broadinstitute.org
- */
-public class BufferedLineReader implements LineReader {
-
- private final BufferedReader reader;
- private int lineNumber = 0;
- private String peekedLine;
-
- public BufferedLineReader(final InputStream is) {
- this(is, Defaults.NON_ZERO_BUFFER_SIZE);
- }
-
- public BufferedLineReader(final InputStream is, final int bufferSize) {
- reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")), bufferSize);
- }
-
- /**
- * Read a line and remove the line terminator
- *
- * @return the line read, or null if EOF has been reached.
- */
- public String readLine() {
- ++lineNumber;
- try {
- final String ret;
- if (peekedLine != null) {
- ret = peekedLine;
- peekedLine = null;
- } else {
- ret = reader.readLine();
- }
- return ret;
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * @return 1-based number of line most recently read
- */
- public int getLineNumber() {
- return lineNumber;
- }
-
- /**
- * Non-destructive one-character look-ahead.
- *
- * @return If not eof, the next character that would be read. If eof, -1.
- */
- public int peek() {
- if (peekedLine == null) {
- try {
- peekedLine = reader.readLine();
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
- if (peekedLine == null) {
- return -1;
- }
- if (peekedLine.length() == 0) {
- return '\n';
- }
- return peekedLine.charAt(0);
- }
-
- public void close() {
- peekedLine = null;
- try {
- reader.close();
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/CloseableIterator.java b/src/java/net/sf/samtools/util/CloseableIterator.java
deleted file mode 100755
index 13d9a3a..0000000
--- a/src/java/net/sf/samtools/util/CloseableIterator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import java.io.Closeable;
-import java.util.Iterator;
-
-/**
- * This interface is used by iterators that use releasable resources during iteration.
- *
- * The consumer of a CloseableIterator should ensure that the close() method is always called,
- * for example by putting such a call in a finally block. Two conventions should be followed
- * by all implementors of CloseableIterator:
- * 1) The close() method should be idempotent: calling close() twice should have no effect.
- * 2) When hasNext() returns false, the iterator implementation should automatically close itself.
- * The latter makes it somewhat safer for consumers to use the for loop syntax for iteration:
- * for (Type obj : getCloseableIterator()) { ... }
- *
- * We do not inherit from java.io.Closeable because IOExceptions are a pain to deal with.
- */
-public interface CloseableIterator<T> extends Iterator<T>, Closeable {
-
- public void close();
-}
diff --git a/src/java/net/sf/samtools/util/CloserUtil.java b/src/java/net/sf/samtools/util/CloserUtil.java
deleted file mode 100644
index da4e93c..0000000
--- a/src/java/net/sf/samtools/util/CloserUtil.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.util.CloseableIterator;
-
-import java.util.List;
-import java.util.Arrays;
-import java.io.Closeable;
-import java.io.IOException;
-
-/**
- * Utility to close things that implement Closeable
- * WARNING: This should only be used for Closeable things open for read, because it ignores exceptions, and
- * the caller will probably want to know about exceptions when closing a file being written to, because
- * this may indicate a failure to flush.
- *
- * @author Kathleen Tibbetts
- */
-public class CloserUtil {
-
- /**
- * Calls close() on <code>obj</code> if it implements Closeable
- *
- * @param obj The potentially closeable object
- */
- public static void close(Object obj) {
- if (obj != null) {
- close(Arrays.asList(obj));
- }
- }
-
- /**
- * Calls close() on all elements of <code>objs</code> that implement Closeable
- *
- * @param objs A list of potentially closeable objects
- */
- public static void close(List<Object> objs) {
- for (Object o : objs) {
- if (o instanceof Closeable) {
- try {
- ((Closeable)o).close();
- }
- catch (IOException ioe) {
- // Do nothing
- }
- } else if (o instanceof CloseableIterator) {
- ((CloseableIterator)o).close();
- }
- else {
- try {
- java.lang.reflect.Method m = o.getClass().getMethod("close");
- m.invoke(o);
- }
- catch (Exception e) { /** Ignore */ }
- }
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/CollectionUtil.java b/src/java/net/sf/samtools/util/CollectionUtil.java
deleted file mode 100755
index 58bcd5f..0000000
--- a/src/java/net/sf/samtools/util/CollectionUtil.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import java.util.*;
-
-/**
- * Small utility methods for dealing with collection classes.
- * @author mccowan
- */
-public class CollectionUtil {
-
- /** Simple case-insensitive lexical comparator of objects using their {@link Object#toString()} value. */
- final public static Comparator<Object> OBJECT_TOSTRING_COMPARATOR = new Comparator<Object>() {
- @Override
- public int compare(final Object o1, final Object o2) {
- return o1.toString().compareToIgnoreCase(o2.toString());
- }
- };
-
- public static <T> List<T> makeList (final T... list) {
- final List<T> result = new ArrayList<T>();
- Collections.addAll(result, list);
-
- return result;
- }
-
- public static <T> Set<T> makeSet (final T... list) {
- final Set<T> result = new HashSet<T>();
- Collections.addAll(result, list);
- return result;
- }
-
- public static <T> Collection<T> makeCollection (final Iterator<T> i) {
- final List<T> list = new LinkedList<T>();
- while (i.hasNext()) {
- list.add(i.next());
- }
- return list;
- }
-
- /** Construct a string by toString()ing each item in the collection with inBetween between each item. */
- public static String join(final Collection<?> items, final String inBetween) {
- final StringBuilder builder = new StringBuilder();
- for (final Object item : items) {
- if (builder.length() > 0) builder.append(inBetween);
- builder.append(item);
- }
-
- return builder.toString();
- }
-
- public static <T> T getSoleElement(final Collection<T> items) {
- if (items.size() != 1)
- throw new IllegalArgumentException(String.format("Expected a single element in %s, but found %s.", items, items.size()));
- return items.iterator().next();
- }
-
- /** Simple multi-map for convenience of storing collections in map values. */
- public static class MultiMap<K, V> extends HashMap<K, Collection<V>> {
- public void append(final K k, final V v) {
- this.initializeKeyIfUninitialized(k);
- this.get(k).add(v);
- }
-
- public void appendAll(final K k, final Collection<? extends V> v) {
- this.initializeKeyIfUninitialized(k);
- this.get(k).addAll(v);
- }
-
- private void initializeKeyIfUninitialized(final K k) {
- if (!this.containsKey(k))
- this.put(k, new LinkedList<V>());
- }
- }
-
- /**
- * Partitions a collection into groups based on a characteristics of that group. Partitions are embodied in a map, whose keys are the
- * value of that characteristic, and the values are the partition of elements whose characteristic evaluate to that key.
- */
- public static <K, V> Map<K,Collection<V>> partition(final Collection<V> collection, final Partitioner<V, K> p) {
- final MultiMap<K, V> partitionToValues = new MultiMap<K, V>();
- for (final V entry : collection) {
- partitionToValues.append(p.getPartition(entry), entry);
- }
- return partitionToValues;
- }
- public static abstract class Partitioner<V, K> {
- public abstract K getPartition(final V v);
- }
-
- /**
- * A defaulting map, which returns a default value when a value that does not exist in the map is looked up.
- *
- * This map supports two modes: injecting-on-default, and not injecting-on-default. When injecting on default, when a lookup is
- * performed and a default value is returned, the default value is injected at that key, so that it now lives in the underlying map.
- * Without this mode, the value is simply returned and the underlying map is unaffected.
- *
- * Note: When using injecting-on-default mode, and performing a lookup with a non-key type (the get method accepts any object), a
- * class cast exception will be thrown because a non-key type cannot be added to the map.
- * @param <K>
- * @param <V>
- */
- public static class DefaultingMap<K, V> extends HashMap<K, V> {
- final Factory<V, K> defaultGenerator;
- final boolean injectValueOnDefault;
-
- /** Creates a defaulting map which defaults to the provided value and with injecting-on-default disabled. */
- public DefaultingMap(final V defaultValue) {
- this(new Factory<V, K>() {
- @Override
- public V make(final K k) {
- return defaultValue;
- }
- }, false);
- }
-
- /**
- * Creates a defaulting map that generates defaults from the provided factory. This is useful when the default is non-static, or
- * the default is mutable, and the client wishes to get a value and mutate it and persist those changes in the map.
- */
- public DefaultingMap(final Factory<V, K> defaultGenerator, final boolean injectValueOnDefaulting) {
- this.defaultGenerator = defaultGenerator;
- this.injectValueOnDefault = injectValueOnDefaulting;
- }
-
- @Override
- @SuppressWarnings("unchecked") // Expect that the cast is successful; otherwise, client is breaking contract.
- public V get(final Object key) {
- if (!this.containsKey(key)) {
- final V val = this.defaultGenerator.make((K) key);
- if (this.injectValueOnDefault) {
- this.put((K) key, val);
- }
- return val;
- } else {
- return super.get(key);
- }
- }
-
- public interface Factory<V, K> {
- /**
- * @param k
- */
- V make(K k);
- }
- }
-
-}
diff --git a/src/java/net/sf/samtools/util/CoordMath.java b/src/java/net/sf/samtools/util/CoordMath.java
deleted file mode 100644
index ed70759..0000000
--- a/src/java/net/sf/samtools/util/CoordMath.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-/**
- * Static methods that encapsulate the standard SAM way of storing ranges: one-based, with both ends
- * inclusive.
- */
-public class CoordMath {
-
- public static int getLength(final int start, final int end) {
- return (end - start) + 1;
- }
-
- public static int getStart(final int end, final int length) {
- return end - length + 1;
- }
-
- public static int getEnd(final int start, final int length) {
- return start + length - 1;
- }
-
- /**
- * Checks to see if the two sets of coordinates have any overlap.
- */
- public static boolean overlaps(final int start, final int end, final int start2, final int end2) {
- return (start2 >= start && start2 <= end) || (end2 >=start && end2 <= end) ||
- encloses(start2, end2, start, end);
- }
-
- /** Returns true if the "inner" coords and totally enclosed by the "outer" coords. */
- public static boolean encloses(final int outerStart, final int outerEnd, final int innerStart, final int innerEnd) {
- return innerStart >= outerStart && innerEnd <= outerEnd;
- }
-
- /**
- * Determines the amount of overlap between two coordinate ranges. Assumes that the two ranges
- * actually do overlap and therefore may produce strange results when they do not!
- */
- public static int getOverlap(final int start, final int end, final int start2, final int end2) {
- return getLength(Math.max(start, start2), Math.min(end, end2));
- }
-
- /**
- * Determines the read cycle number for the base
- *
- * @param isNegativeStrand true if the read is negative strand
- * @param readLength
- * @param readBaseIndex the 0-based index of the read base in question
- */
- public static int getCycle(boolean isNegativeStrand, int readLength, final int readBaseIndex) {
- return isNegativeStrand ? readLength - readBaseIndex : readBaseIndex + 1;
- }
-
-}
diff --git a/src/java/net/sf/samtools/util/DateParser.java b/src/java/net/sf/samtools/util/DateParser.java
deleted file mode 100644
index eab68db..0000000
--- a/src/java/net/sf/samtools/util/DateParser.java
+++ /dev/null
@@ -1,340 +0,0 @@
-// DateParser.java
-// $Id: DateParser.java,v 1.3 2001/01/04 13:26:19 bmahe Exp $
-// (c) COPYRIGHT MIT, INRIA and Keio, 2000.
-
-/*
-W3C IPR SOFTWARE NOTICE
-
-Copyright 1995-1998 World Wide Web Consortium, (Massachusetts Institute of
-Technology, Institut National de Recherche en Informatique et en
-Automatique, Keio University). All Rights Reserved.
-http://www.w3.org/Consortium/Legal/
-
-This W3C work (including software, documents, or other related items) is
-being provided by the copyright holders under the following license. By
-obtaining, using and/or copying this work, you (the licensee) agree that you
-have read, understood, and will comply with the following terms and
-conditions:
-
-Permission to use, copy, and modify this software and its documentation,
-with or without modification, for any purpose and without fee or royalty is
-hereby granted, provided that you include the following on ALL copies of the
-software and documentation or portions thereof, including modifications,
-that you make:
-
- 1. The full text of this NOTICE in a location viewable to users of the
- redistributed or derivative work.
- 2. Any pre-existing intellectual property disclaimers, notices, or terms
- and conditions. If none exist, a short notice of the following form
- (hypertext is preferred, text is permitted) should be used within the
- body of any redistributed or derivative code: "Copyright World Wide
- Web Consortium, (Massachusetts Institute of Technology, Institut
- National de Recherche en Informatique et en Automatique, Keio
- University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
- 3. Notice of any changes or modifications to the W3C files, including the
- date changes were made. (We recommend you provide URIs to the location
- from which the code is derived).
-
-In addition, creators of derivitive works must include the full text of this
-NOTICE in a location viewable to users of the derivitive work.
-
-THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
-MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
-PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
-ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
-
-COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
-DOCUMENTATION.
-
-The name and trademarks of copyright holders may NOT be used in advertising
-or publicity pertaining to the software without specific, written prior
-permission. Title to copyright in this software and any associated
-documentation will at all times remain with copyright holders.
-
-____________________________________
-
-This formulation of W3C's notice and license became active on August 14
-1998. See the older formulation for the policy prior to this date. Please
-see our Copyright FAQ for common questions about using materials from our
-site, including specific terms and conditions for packages like libwww,
-Amaya, and Jigsaw. Other questions about this notice can be directed to
-site-policy at w3.org .
-
-
-
-
-webmaster
-(last updated 14-Aug-1998)
-
- */
-
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.util.TimeZone;
-
-/**
- * NOTE: This code has been taken from w3.org, and modified slightly to handle timezones of the form [-+]DDDD,
- * and also to fix a bug in the application of time zone to the parsed date.
- *
- * Date parser for ISO 8601 format
- * http://www.w3.org/TR/1998/NOTE-datetime-19980827
- * @version $Revision: 1.3 $
- * @author bmahe at w3.org
- */
-public class DateParser {
-
- private static boolean check(StringTokenizer st, String token)
- throws InvalidDateException
- {
- if (!st.hasMoreElements()) return false;
- if (st.nextToken().equals(token)) {
- return true;
- } else {
- throw new InvalidDateException("Missing ["+token+"]");
- }
- }
-
- private static Calendar getCalendar(String isodate)
- throws InvalidDateException
- {
- // YYYY-MM-DDThh:mm:ss.sTZD
- StringTokenizer st = new StringTokenizer(isodate, "-T:.+Z", true);
-
- Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
- calendar.clear();
- try {
- // Year
- if (st.hasMoreTokens()) {
- int year = Integer.parseInt(st.nextToken());
- calendar.set(Calendar.YEAR, year);
- } else {
- return calendar;
- }
- // Month
- if (check(st, "-") && (st.hasMoreTokens())) {
- int month = Integer.parseInt(st.nextToken()) -1;
- calendar.set(Calendar.MONTH, month);
- } else {
- return calendar;
- }
- // Day
- if (check(st, "-") && (st.hasMoreTokens())) {
- int day = Integer.parseInt(st.nextToken());
- calendar.set(Calendar.DAY_OF_MONTH, day);
- } else {
- return calendar;
- }
- // Hour
- if (check(st, "T") && (st.hasMoreTokens())) {
- int hour = Integer.parseInt(st.nextToken());
- calendar.set(Calendar.HOUR_OF_DAY, hour);
- } else {
- calendar.set(Calendar.HOUR_OF_DAY, 0);
- calendar.set(Calendar.MINUTE, 0);
- calendar.set(Calendar.SECOND, 0);
- calendar.set(Calendar.MILLISECOND, 0);
- return calendar;
- }
- // Minutes
- if (check(st, ":") && (st.hasMoreTokens())) {
- int minutes = Integer.parseInt(st.nextToken());
- calendar.set(Calendar.MINUTE, minutes);
- } else {
- calendar.set(Calendar.MINUTE, 0);
- calendar.set(Calendar.SECOND, 0);
- calendar.set(Calendar.MILLISECOND, 0);
- return calendar;
- }
-
- //
- // Not mandatory now
- //
-
- // Secondes
- if (! st.hasMoreTokens()) {
- return calendar;
- }
- String tok = st.nextToken();
- if (tok.equals(":")) { // secondes
- if (st.hasMoreTokens()) {
- int secondes = Integer.parseInt(st.nextToken());
- calendar.set(Calendar.SECOND, secondes);
- if (! st.hasMoreTokens()) {
- return calendar;
- }
- // frac sec
- tok = st.nextToken();
- if (tok.equals(".")) {
- // bug fixed, thx to Martin Bottcher
- String nt = st.nextToken();
- while(nt.length() < 3) {
- nt += "0";
- }
- nt = nt.substring( 0, 3 ); //Cut trailing chars..
- int millisec = Integer.parseInt(nt);
- //int millisec = Integer.parseInt(st.nextToken()) * 10;
- calendar.set(Calendar.MILLISECOND, millisec);
- if (! st.hasMoreTokens()) {
- return calendar;
- }
- tok = st.nextToken();
- } else {
- calendar.set(Calendar.MILLISECOND, 0);
- }
- } else {
- throw new InvalidDateException("No secondes specified");
- }
- } else {
- calendar.set(Calendar.SECOND, 0);
- calendar.set(Calendar.MILLISECOND, 0);
- }
- // Timezone
- if (! tok.equals("Z")) { // UTC
- if (! (tok.equals("+") || tok.equals("-"))) {
- throw new InvalidDateException("only Z, + or - allowed");
- }
- boolean plus = tok.equals("+");
- if (! st.hasMoreTokens()) {
- throw new InvalidDateException("Missing hour field");
- }
- int tzhour = Integer.parseInt(st.nextToken());
- int tzmin = 0;
- if (check(st, ":") && (st.hasMoreTokens())) {
- tzmin = Integer.parseInt(st.nextToken());
- } else {
- // Modified by AW -- minute field is not required, and minutes may be represented
- // without colon between hours and minutes
- // throw new InvalidDateException("Missing minute field");
- if (tzhour >= 100) {
- tzmin = tzhour % 100;
- tzhour /= 100;
- }
- }
- if (!plus) { // Modified by AW -- !plus instead of plus
- calendar.add(Calendar.HOUR, tzhour);
- calendar.add(Calendar.MINUTE, tzmin);
- } else {
- calendar.add(Calendar.HOUR, -tzhour);
- calendar.add(Calendar.MINUTE, -tzmin);
- }
- }
- } catch (NumberFormatException ex) {
- throw new InvalidDateException("["+ex.getMessage()+
- "] is not an integer");
- }
- return calendar;
- }
-
- /**
- * Parse the given string in ISO 8601 format and build a Date object.
- * @param isodate the date in ISO 8601 format
- * @return a Date instance
- * @exception InvalidDateException if the date is not valid
- */
- public static Date parse(String isodate)
- throws InvalidDateException
- {
- Calendar calendar = getCalendar(isodate);
- return calendar.getTime();
- }
-
- private static String twoDigit(int i) {
- if (i >=0 && i < 10) {
- return "0"+String.valueOf(i);
- }
- return String.valueOf(i);
- }
-
- /**
- * Generate a ISO 8601 date
- * @param date a Date instance
- * @return a string representing the date in the ISO 8601 format
- */
- public static String getIsoDate(Date date) {
- Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
- calendar.setTime(date);
- StringBuffer buffer = new StringBuffer();
- buffer.append(calendar.get(Calendar.YEAR));
- buffer.append("-");
- buffer.append(twoDigit(calendar.get(Calendar.MONTH) + 1));
- buffer.append("-");
- buffer.append(twoDigit(calendar.get(Calendar.DAY_OF_MONTH)));
- buffer.append("T");
- buffer.append(twoDigit(calendar.get(Calendar.HOUR_OF_DAY)));
- buffer.append(":");
- buffer.append(twoDigit(calendar.get(Calendar.MINUTE)));
- buffer.append(":");
- buffer.append(twoDigit(calendar.get(Calendar.SECOND)));
- buffer.append(".");
- buffer.append(twoDigit(calendar.get(Calendar.MILLISECOND) / 10));
- buffer.append("Z");
- return buffer.toString();
- }
-
- public static void test(String isodate) {
- System.out.println("----------------------------------");
- try {
- Date date = parse(isodate);
- System.out.println(">> "+isodate);
- System.out.println(">> "+date.toString()+" ["+date.getTime()+"]");
- System.out.println(">> "+getIsoDate(date));
- } catch (InvalidDateException ex) {
- System.err.println(isodate+" is invalid");
- System.err.println(ex.getMessage());
- }
- System.out.println("----------------------------------");
- }
-
- public static void test(Date date) {
- String isodate = null;
- System.out.println("----------------------------------");
- try {
- System.out.println(">> "+date.toString()+" ["+date.getTime()+"]");
- isodate = getIsoDate(date);
- System.out.println(">> "+isodate);
- date = parse(isodate);
- System.out.println(">> "+date.toString()+" ["+date.getTime()+"]");
- } catch (InvalidDateException ex) {
- System.err.println(isodate+" is invalid");
- System.err.println(ex.getMessage());
- }
- System.out.println("----------------------------------");
- }
-
- public static void main(String args[]) {
- test("1997-07-16T19:20:30.45-02:00");
- test("1997-07-16T19:20:30+01:00");
- test("1997-07-16T19:20:30+01:00");
- test("1997-07-16T19:20");
- test("1997-07-16");
- test("1997-07");
- test("1997");
- test(new Date());
- }
-
- public static class InvalidDateException extends SAMException {
- public InvalidDateException() {
- }
-
- public InvalidDateException(final String s) {
- super(s);
- }
-
- public InvalidDateException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-
- public InvalidDateException(final Throwable throwable) {
- super(throwable);
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/DelegatingIterator.java b/src/java/net/sf/samtools/util/DelegatingIterator.java
deleted file mode 100644
index 603f8f1..0000000
--- a/src/java/net/sf/samtools/util/DelegatingIterator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package net.sf.samtools.util;
-
-import net.sf.samtools.util.CloseableIterator;
-
-import java.util.Iterator;
-
-/**
- * Simple iterator class that delegates all method calls to an underlying iterator. Useful
- * for in-line subclassing to add behaviour to one or more methods.
- *
- * @author Tim Fennell
- */
-public class DelegatingIterator<T> implements CloseableIterator<T> {
- private final Iterator<T> iterator;
-
- public DelegatingIterator(final Iterator<T> iterator) {
- this.iterator = iterator;
- }
-
- public void close() {
- if (iterator instanceof CloseableIterator) {
- ((CloseableIterator) this.iterator).close();
- }
- }
-
- public boolean hasNext() {
- return this.iterator.hasNext();
- }
-
- public T next() {
- return this.iterator.next();
- }
-
- public void remove() {
- this.iterator.remove();
- }
-}
diff --git a/src/java/net/sf/samtools/util/HttpUtils.java b/src/java/net/sf/samtools/util/HttpUtils.java
deleted file mode 100644
index b259a76..0000000
--- a/src/java/net/sf/samtools/util/HttpUtils.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package net.sf.samtools.util;
-
-import java.io.IOException;
-import java.net.URLConnection;
-import java.net.URL;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-
-/**
- * User: jrobinso
- * Date: Sep 23, 2009
- */
-public class HttpUtils {
-
- public static String getETag(final URL url) {
- return getHeaderField(url, "ETag");
- }
-
- private static URLConnection openConnection(final URL url) throws IOException{
- URLConnection conn = url.openConnection();
- conn.setReadTimeout(3000);
- conn.setDefaultUseCaches(false);
- conn.setUseCaches(false);
- return conn;
- }
-
- public static String getHeaderField(final URL url, final String name) {
- URLConnection conn = null;
- try {
- // Create a URLConnection object for a URL
- conn = openConnection(url);
- return conn.getHeaderField(name);
-
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- finally {
- if (conn != null && conn instanceof HttpURLConnection) {
- ((HttpURLConnection) conn).disconnect();
- }
- }
- }
-
- public static void printHeaderFields(final URL url) {
-
- URLConnection conn = null;
- try {
- // Create a URLConnection object for a URL
- conn = openConnection(url);
-
- for (final String name : conn.getHeaderFields().keySet()) {
- System.out.println(name + "\t" + conn.getHeaderField(name));
-
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- if (conn != null && conn instanceof HttpURLConnection) {
- ((HttpURLConnection) conn).disconnect();
- }
- }
- }
-
- public static boolean resourceAvailable(final URL url) {
- return getETag(url) != null;
- }
-
- public static void main(final String[] args) throws MalformedURLException {
- //printHeaderFields(new URL(
- // "http://www.broadinstitute.org/igvdata/1KG/DCC_merged/freeze5/NA12891.pilot2.SLX.bam"));
- System.out.println(getETag(new URL(
- "http://www.broadinstitute.org/igvdata/test/sam/303KY.8.paired1.bam.tdf")));
- System.out.println(resourceAvailable(new URL(
- "http://www.broadinstitute.org/igvdata/test/sam/303KY.8.paired1.bam.tdf")));
-
-
- }
-}
diff --git a/src/java/net/sf/samtools/util/IOUtil.java b/src/java/net/sf/samtools/util/IOUtil.java
deleted file mode 100644
index aff1209..0000000
--- a/src/java/net/sf/samtools/util/IOUtil.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-
-import net.sf.samtools.Defaults;
-import net.sf.samtools.seekablestream.SeekableBufferedStream;
-import net.sf.samtools.seekablestream.SeekableFileStream;
-import net.sf.samtools.seekablestream.SeekableStream;
-
-import java.io.*;
-
-/**
- * Miscellaneous stateless static IO-oriented methods.
- */
-public class IOUtil {
- /**
- * @deprecated Use Defaults.NON_ZERO_BUFFER_SIZE instead.
- */
- @Deprecated public static final int STANDARD_BUFFER_SIZE = Defaults.NON_ZERO_BUFFER_SIZE;
-
- public static final long ONE_GB = 1024 * 1024 * 1024;
- public static final long TWO_GBS = 2 * ONE_GB;
- public static final long FIVE_GBS = 5 * ONE_GB;
-
- /**
- * Wrap the given stream in a BufferedInputStream, if it isn't already wrapper
- * @param stream stream to be wrapped
- * @return A BufferedInputStream wrapping stream, or stream itself if stream instanceof BufferedInputStream.
- */
- public static BufferedInputStream toBufferedStream(final InputStream stream) {
- if (stream instanceof BufferedInputStream) {
- return (BufferedInputStream) stream;
- } else {
- return new BufferedInputStream(stream, Defaults.NON_ZERO_BUFFER_SIZE);
- }
- }
-
- /**
- * Transfers from the input stream to the output stream using stream operations and a buffer.
- */
- public static void transferByStream(final InputStream in, final OutputStream out, final long bytes) {
- final byte[] buffer = new byte[Defaults.NON_ZERO_BUFFER_SIZE];
- long remaining = bytes;
-
- try {
- while (remaining > 0) {
- final int read = in.read(buffer, 0, (int) Math.min(buffer.length, remaining));
- out.write(buffer, 0, read);
- remaining -= read;
- }
- }
- catch (final IOException ioe) {
- throw new RuntimeIOException(ioe);
- }
- }
-
- /**
- * @return If Defaults.BUFFER_SIZE > 0, wrap os in BufferedOutputStream, else return os itself.
- */
- public static OutputStream maybeBufferOutputStream(final OutputStream os) {
- return maybeBufferOutputStream(os, Defaults.BUFFER_SIZE);
- }
-
- /**
- * @return If bufferSize > 0, wrap os in BufferedOutputStream, else return os itself.
- */
- public static OutputStream maybeBufferOutputStream(final OutputStream os, final int bufferSize) {
- if (bufferSize > 0) return new BufferedOutputStream(os, bufferSize);
- else return os;
- }
-
- public static SeekableStream maybeBufferedSeekableStream(final SeekableStream stream, final int bufferSize) {
- return bufferSize > 0 ? new SeekableBufferedStream(stream, bufferSize) : stream;
- }
-
- public static SeekableStream maybeBufferedSeekableStream(final SeekableStream stream) {
- return maybeBufferedSeekableStream(stream, Defaults.BUFFER_SIZE);
- }
-
- public static SeekableStream maybeBufferedSeekableStream(final File file) {
- try {
- return maybeBufferedSeekableStream(new SeekableFileStream(file));
- } catch (final FileNotFoundException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * @return If Defaults.BUFFER_SIZE > 0, wrap is in BufferedInputStream, else return is itself.
- */
- public static InputStream maybeBufferInputStream(final InputStream is) {
- return maybeBufferInputStream(is, Defaults.BUFFER_SIZE);
- }
-
- /**
- * @return If bufferSize > 0, wrap is in BufferedInputStream, else return is itself.
- */
- public static InputStream maybeBufferInputStream(final InputStream is, final int bufferSize) {
- if (bufferSize > 0) return new BufferedInputStream(is, bufferSize);
- else return is;
- }
-
- public static Reader maybeBufferReader(Reader reader, final int bufferSize) {
- if (bufferSize > 0) reader = new BufferedReader(reader, bufferSize);
- return reader;
- }
-
- public static Reader maybeBufferReader(final Reader reader) {
- return maybeBufferReader(reader, Defaults.BUFFER_SIZE);
- }
-
- public static Writer maybeBufferWriter(Writer writer, final int bufferSize) {
- if (bufferSize > 0) writer = new BufferedWriter(writer, bufferSize);
- return writer;
- }
-
- public static Writer maybeBufferWriter(final Writer writer) {
- return maybeBufferWriter(writer, Defaults.BUFFER_SIZE);
- }
-
-
- /**
- * Delete a list of files, and write a warning message if one could not be deleted.
- * @param files Files to be deleted.
- */
- public static void deleteFiles(final File... files) {
- for (final File f : files) {
- if (!f.delete()) {
- System.err.println("Could not delete file " + f);
- }
- }
- }
-
- public static void deleteFiles(final Iterable<File> files) {
- for (final File f : files) {
- if (!f.delete()) {
- System.err.println("Could not delete file " + f);
- }
- }
- }
-
-
- /**
- * @return true if the path is not a device (e.g. /dev/null or /dev/stdin), and is not
- * an existing directory. I.e. is is a regular path that may correspond to an existing
- * file, or a path that could be a regular output file.
- */
- public static boolean isRegularPath(final File file) {
- return !file.exists() || file.isFile();
- }
-
- /**
- * Creates a new tmp file on one of the available temp filesystems, registers it for deletion
- * on JVM exit and then returns it.
- */
- public static File newTempFile(final String prefix, final String suffix,
- final File[] tmpDirs, final long minBytesFree) throws IOException {
- File f = null;
-
- for (int i=0; i<tmpDirs.length; ++i) {
- if ( i == tmpDirs.length-1 || tmpDirs[i].getUsableSpace() > minBytesFree) {
- f = File.createTempFile(prefix, suffix, tmpDirs[i]);
- f.deleteOnExit();
- break;
- }
- }
-
- return f;
- }
-
- /** Creates a new tmp file on one of the potential filesystems that has at least 5GB free. */
- public static File newTempFile(final String prefix, final String suffix,
- final File[] tmpDirs) throws IOException {
- return newTempFile(prefix, suffix, tmpDirs, FIVE_GBS);
- }
-
-
- /** Returns a default tmp directory. */
- public static File getDefaultTmpDir() {
- final String user = System.getProperty("user.name");
- final String tmp = System.getProperty("java.io.tmpdir");
-
- if (tmp.endsWith(File.separatorChar + user)) return new File(tmp);
- else return new File(tmp, user);
- }
-
- /** Returns the name of the file minus the extension (i.e. text after the last "." in the filename). */
- public static String basename(final File f) {
- final String full = f.getName();
- final int index = full.lastIndexOf(".");
- if (index > 0 && index > full.lastIndexOf(File.separator)) {
- return full.substring(0, index);
- }
- else {
- return full;
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/Iso8601Date.java b/src/java/net/sf/samtools/util/Iso8601Date.java
deleted file mode 100644
index 3d969eb..0000000
--- a/src/java/net/sf/samtools/util/Iso8601Date.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * Use this type rather than java.util.Date in command-line options in order to get ISO 8601 parsing.
- * The ctors below truncate milliseconds, since our formatter does not write them. Note that it is possible
- * to modify an Iso8601Date so that it has fractional seconds, but that is discouraged.
- *
- * @author alecw at broadinstitute.org
- */
-public class Iso8601Date extends Date {
- private static final ThreadLocal<DateFormat> iso8601DateFormatter = new ThreadLocal<DateFormat>() {
- protected synchronized DateFormat initialValue() {
- return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
- }
- };
-
- public Iso8601Date(final String dateStr) {
- super(DateParser.parse(dateStr).getTime());
- truncateMilliseconds();
- }
-
- public Iso8601Date(final Date date) {
- super(date.getTime());
- truncateMilliseconds();
- }
-
- public String toString() {
- return iso8601DateFormatter.get().format(this);
- }
-
- private void truncateMilliseconds() {
- long time = getTime();
- long mod = time % 1000;
- if (mod != 0) {
- super.setTime(time - mod);
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/Lazy.java b/src/java/net/sf/samtools/util/Lazy.java
deleted file mode 100644
index 04a592b..0000000
--- a/src/java/net/sf/samtools/util/Lazy.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.sf.samtools.util;
-
-/**
- * Simple utility for building an on-demand (lazy) object-initializer.
- *
- * Works by accepting an initializer describing how to build the on-demand object, which is only called once and only after the first
- * invocation of {@link #get()} (or it may not be called at all).
- *
- * @author mccowan
- */
-public class Lazy<T> {
- private final LazyInitializer<T> initializer;
- private boolean isInitialized = false;
- private T instance;
-
- /** Simple cons */
- public Lazy(final LazyInitializer<T> initializer) {
- this.initializer = initializer;
- }
-
- /** Returns the instance associated with this {@link Lazy}, initializing it if necessary. */
- public synchronized T get() {
- if (!isInitialized) {
- this.instance = initializer.make();
- isInitialized = true;
- }
- return instance;
- }
-
- /** Describes how to build the instance of the lazy object. */
- public interface LazyInitializer<T> {
- /** Returns the desired object instance. */
- T make();
- }
-
- public boolean isInitialized() {
- return isInitialized;
- }
-}
diff --git a/src/java/net/sf/samtools/util/LineReader.java b/src/java/net/sf/samtools/util/LineReader.java
deleted file mode 100644
index 5f09b81..0000000
--- a/src/java/net/sf/samtools/util/LineReader.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import java.io.Closeable;
-
-/**
- * Interface allows for implementations that read lines from a String, an ASCII file, or somewhere else.
- */
-public interface LineReader extends Closeable{
-
- /**
- * Read a line and remove the line terminator
- * @return the line read, or null if EOF has been reached.
- */
- String readLine();
-
- /**
- * @return 1-based number of line most recently read
- */
- int getLineNumber();
-
- /**
- * Non-destructive one-character look-ahead.
- * @return If not eof, the next character that would be read. If eof, -1.
- */
- int peek();
-
- public void close();
-}
diff --git a/src/java/net/sf/samtools/util/LocationAware.java b/src/java/net/sf/samtools/util/LocationAware.java
deleted file mode 100644
index 7ad3f5c..0000000
--- a/src/java/net/sf/samtools/util/LocationAware.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package net.sf.samtools.util;
-
-/**
- * Describes API for getting current position in a stream, writer, or underlying file.
- *
- * The expected functionality is simple: if you are a output stream / writer, and you've written 50 bytes to the stream, then
- * {@link #getPosition()} should return 50; if you are an input stream or file reader, and you've read 25 bytes from the object, then it
- * should return 25.
- *
- * In the context of an iterator or any producer-like object that doesn't map directly to a byte stream, {@link #getPosition()} should
- * return the position (in the underlying stream being read/written to) of the most-recently read/written element. For example, if you
- * are reading lines from a file with a {@link org.broad.tribble.readers.AsciiLineReaderIterator}, calling {@link #getPosition()} should return the byte position
- * of the start of the most recent line returned by {@link org.broad.tribble.readers.AsciiLineReaderIterator#next()}.
- *
- * @author mccowan
- */
-public interface LocationAware {
- /**
- * The current offset, in bytes, of this stream/writer/file. Or, if this is an iterator/producer, the offset (in bytes) of the
- * END of the most recently returned record (since a produced record corresponds to something that has been read already). See class
- * javadoc for more.
- *
- * Note that for BGZF files, this does not represent an actually file position, but a virtual file pointer.
- */
- public long getPosition();
-}
diff --git a/src/java/net/sf/samtools/util/Md5CalculatingInputStream.java b/src/java/net/sf/samtools/util/Md5CalculatingInputStream.java
deleted file mode 100755
index 01227fe..0000000
--- a/src/java/net/sf/samtools/util/Md5CalculatingInputStream.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-
-import java.io.*;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * Class to generate an MD5 string for a file as it is being read
- *
- * @author ktibbett at broadinstitue.org
- */
-public class Md5CalculatingInputStream extends InputStream {
-
- private final InputStream is;
- private final MessageDigest md5;
- private final File digestFile;
- private String hash;
-
- /**
- * Constructor that takes in the InputStream that we are wrapping
- * and creates the MD5 MessageDigest
- */
- public Md5CalculatingInputStream(InputStream is, File digestFile) {
- super();
- this.is = is;
- this.digestFile = digestFile;
- this.hash = null;
-
- try {
- md5 = MessageDigest.getInstance("MD5");
- md5.reset();
- }
- catch (NoSuchAlgorithmException e) {
- throw new RuntimeException("MD5 algorithm not found", e);
- }
- }
-
- public int read() throws IOException {
- int result = is.read();
- if (result != -1) md5.update((byte)result);
- return result;
- }
-
- public int read(byte[] b) throws IOException {
- int result = is.read(b);
- if (result != -1) md5.update(b, 0, result);
- return result;
- }
-
-
- public int read(byte[] b, int off, int len) throws IOException {
- int result = is.read(b, off, len);
- if (result != -1) md5.update(b, off, result);
- return result;
- }
-
- public String md5() {
- if(hash == null) {
- throw new SAMException("Attempting to access md5 digest before the entire file is read! Call close first.");
- }
- return hash;
- }
-
- private String makeHash() {
- if(hash == null) {
- hash = new BigInteger(1, md5.digest()).toString(16);
- if (hash.length() != 32) {
- final String zeros = "00000000000000000000000000000000";
- hash = zeros.substring(0, 32 - hash.length()) + hash;
- }
- return hash;
- } else {
- throw new SAMException("MD5InputStream is already closed!");
- }
- }
-
- public void close() throws IOException {
- is.close();
- makeHash();
-
- if(digestFile != null) {
- BufferedWriter writer = new BufferedWriter(new FileWriter(digestFile));
- writer.write(hash);
- writer.close();
- }
- }
-
- // Methods not supported or overridden because they would not result in a valid hash
- public boolean markSupported() { return false; }
- public void mark(int readlimit) {
- throw new UnsupportedOperationException("mark() is not supported by the MD5CalculatingInputStream");
- }
- public void reset() throws IOException {
- throw new UnsupportedOperationException("reset() is not supported by the MD5CalculatingInputStream");
- }
- public long skip(long n) throws IOException {
- throw new UnsupportedOperationException("skip() is not supported by the MD5CalculatingInputStream");
- }
-
- // Methods delegated to the wrapped InputStream
- public int available() throws IOException { return is.available(); }
-
-}
diff --git a/src/java/net/sf/samtools/util/Md5CalculatingOutputStream.java b/src/java/net/sf/samtools/util/Md5CalculatingOutputStream.java
deleted file mode 100755
index 7d2dd50..0000000
--- a/src/java/net/sf/samtools/util/Md5CalculatingOutputStream.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-
-import java.io.*;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * Class to generate an MD5 string for a file as it is being read
- *
- * @author ktibbett at broadinstitue.org
- */
-public class Md5CalculatingOutputStream extends OutputStream {
-
- private final OutputStream os;
- private final MessageDigest md5;
- private final File digestFile;
- private String hash;
-
- /**
- * Constructor that takes in the OutputStream that we are wrapping
- * and creates the MD5 MessageDigest
- */
- public Md5CalculatingOutputStream(OutputStream os, File digestFile) {
- super();
- this.hash = null;
- this.os = os;
- this.digestFile = digestFile;
-
- try {
- md5 = MessageDigest.getInstance("MD5");
- md5.reset();
- }
- catch (NoSuchAlgorithmException e) {
- throw new RuntimeException("MD5 algorithm not found", e);
- }
- }
-
- public void write(int b) throws IOException {
- md5.update((byte)b);
- os.write(b);
- }
-
- public void write(byte[] b) throws IOException {
- md5.update(b);
- os.write(b);
- }
-
-
- public void write(byte[] b, int off, int len) throws IOException {
- md5.update(b, off, len);
- os.write(b, off, len);
- }
-
- public String md5() {
- if(hash == null) {
- throw new SAMException("Attempting to access md5 digest before the entire file is written! Call close first.");
- }
-
- return hash;
- }
-
- private String makeHash() {
- if(hash == null) {
- hash = new BigInteger(1, md5.digest()).toString(16);
- if (hash.length() != 32) {
- final String zeros = "00000000000000000000000000000000";
- hash = zeros.substring(0, 32 - hash.length()) + hash;
- }
- return hash;
- } else {
- throw new SAMException("Calling close on Md5CalculatingOutputStream twice!");
- }
- }
-
- public void close() throws IOException {
- os.close();
- makeHash();
-
- if(digestFile != null) {
- BufferedWriter writer = new BufferedWriter(new FileWriter(digestFile));
- writer.write(hash);
- writer.close();
- }
- }
-
- // Pass-through method
- public void flush() throws IOException { os.flush(); }
-
-}
diff --git a/src/java/net/sf/samtools/util/PeekIterator.java b/src/java/net/sf/samtools/util/PeekIterator.java
deleted file mode 100644
index f315922..0000000
--- a/src/java/net/sf/samtools/util/PeekIterator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import java.util.Iterator;
-
-/**
- * Wrapper around an iterator that enables non-destructive peeking at the next element that would
- * be returned by next()
- */
-public class PeekIterator<T> implements Iterator<T> {
- Iterator<T> underlyingIterator;
- T peekedElement = null;
-
- public PeekIterator(final Iterator<T> underlyingIterator) {
- this.underlyingIterator = underlyingIterator;
- }
-
- /**
- * @return true if the iteration has more elements. (In other words, returns true if next would return an element
- * rather than throwing an exception.)
- */
- public boolean hasNext() {
- return peekedElement != null || underlyingIterator.hasNext();
- }
-
- /**
- * @return the next element in the iteration. Calling this method repeatedly until the hasNext() method returns
- * false will return each element in the underlying collection exactly once.
- */
- public T next() {
- if (peekedElement != null) {
- final T ret = peekedElement;
- peekedElement = null;
- return ret;
- }
- return underlyingIterator.next();
- }
-
- /**
- * @return the next element in the iteration, but without removing it, so the next call to next() or peek()
- * will return the same element as returned by the current call to peek().
- */
- public T peek() {
- if (peekedElement == null) {
- peekedElement = underlyingIterator.next();
- }
- return peekedElement;
- }
-
- /**
- * Unsupported
- */
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- /**
- * @return the iterator wrapped by this object.
- */
- public Iterator<T> getUnderlyingIterator() {
- return underlyingIterator;
- }
-}
diff --git a/src/java/net/sf/samtools/util/ProgressLoggerInterface.java b/src/java/net/sf/samtools/util/ProgressLoggerInterface.java
deleted file mode 100644
index 0401e55..0000000
--- a/src/java/net/sf/samtools/util/ProgressLoggerInterface.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.sf.samtools.util;
-
-/**
- * The MIT License
- * <p/>
- * Copyright (c) 2014 The Broad Institute
- * <p/>
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * <p/>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * <p/>
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-import net.sf.samtools.SAMRecord;
-
-/**
- * An interface defining the record() methods of the Picard-public ProgressLogger implementation.
- */
-public interface ProgressLoggerInterface {
-
- public boolean record(final String chrom, final int pos);
- public boolean record(final SAMRecord rec);
- public boolean record(final SAMRecord... recs);
-
-}
diff --git a/src/java/net/sf/samtools/util/RelativeIso8601Date.java b/src/java/net/sf/samtools/util/RelativeIso8601Date.java
deleted file mode 100644
index 0a9a4b4..0000000
--- a/src/java/net/sf/samtools/util/RelativeIso8601Date.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package net.sf.samtools.util;
-
-import java.util.Date;
-
-/**
- * Like {@link Iso8601Date}, but also comes in a "lazy now" flavor.
- *
- * When "lazy now" mode is enabled, this instance's date value is undefined until the first time it is queried, at which time it is set to
- * {@link System#currentTimeMillis()}. This value is returned on subsequent queries, so it is consistent.
- *
- * The "lazy state" is conveyed via {@link #toString()}. A "lazy now" instance will answer {@link #toString()} with
- * {@link #LAZY_NOW_LABEL} if the time has not yet been queried/set, or a {@link Iso8601Date}-formatted date of the query time if it
- * has been queried. This characteristic is useful for serialization and persistence purposes.
- *
- * Consumers can create "lazy now" instances via the {@link #generateLazyNowInstance()} factory method or by passing {@link #LAZY_NOW_LABEL} to
- * {@link #RelativeIso8601Date(String)}.
- *
- * @author mccowan
- */
-public class RelativeIso8601Date extends Iso8601Date {
-
- public static final String LAZY_NOW_LABEL = "NOW";
-
- /** Flag that indicates this instance is lazy and has not yet been queried (and so its value should be updated at the next query). */
- private boolean doSetTimeNextQuery;
-
- /** Returns a "lazy now" instance. */
- public static RelativeIso8601Date generateLazyNowInstance() {
- return new RelativeIso8601Date(LAZY_NOW_LABEL);
- }
-
- public RelativeIso8601Date(final Date date) {
- super(date);
- doSetTimeNextQuery = false;
- }
-
- public RelativeIso8601Date(final String dateStr) {
- /**
- * We must pass a date parsable {@link Iso8601Date#Iso8601Date(String)}; we will never actually read the passed value, so it doesn't
- * matter what it is.
- */
- super(LAZY_NOW_LABEL.equals(dateStr) ? new Iso8601Date(new Date()).toString() : dateStr);
- doSetTimeNextQuery = LAZY_NOW_LABEL.equals(dateStr);
- }
-
- /** Updates the time stored by this instance if it's a "lazy now" instance and has never been stored. */
- private synchronized void conditionallyUpdateTime() {
- if (!doSetTimeNextQuery) {
- super.setTime(System.currentTimeMillis());
- doSetTimeNextQuery = false;
- }
- }
-
- /**
- * Returns a {@link String} representation of this date.
- * @return An {@link Iso8601Date}-formatted string, or the value of {@link #LAZY_NOW_LABEL} if this is a "lazy now" instance.
- */
- @Override
- public String toString() {
- return doSetTimeNextQuery ? LAZY_NOW_LABEL : super.toString();
- }
-
- @Override
- public long getTime() {
- conditionallyUpdateTime();
- return super.getTime();
- }
-
- @Override
- public boolean after(final Date when) {
- conditionallyUpdateTime();
- return super.after(when);
- }
-
- @Override
- public boolean before(final Date when) {
- conditionallyUpdateTime();
- return super.before(when);
- }
-
- @Override
- public Object clone() {
- conditionallyUpdateTime();
- return super.clone();
- }
-
- @Override
- public int compareTo(final Date anotherDate) {
- conditionallyUpdateTime();
- return super.compareTo(anotherDate);
- }
-
- @Override
- public boolean equals(final Object obj) {
- conditionallyUpdateTime();
- return super.equals(obj);
- }
-
- @Override
- public int getDate() {
- conditionallyUpdateTime();
- return super.getDate();
- }
-
- @Override
- public int getDay() {
- conditionallyUpdateTime();
- return super.getDay();
- }
-
- @Override
- public int getHours() {
- conditionallyUpdateTime();
- return super.getHours();
- }
-
- @Override
- public int getMinutes() {
- conditionallyUpdateTime();
- return super.getMinutes();
- }
-
- @Override
- public int getMonth() {
- conditionallyUpdateTime();
- return super.getMonth();
- }
-
- @Override
- public int getSeconds() {
- conditionallyUpdateTime();
- return super.getSeconds();
- }
-
- @Override
- public int getTimezoneOffset() {
- conditionallyUpdateTime();
- return super.getTimezoneOffset();
- }
-
- @Override
- public int getYear() {
- conditionallyUpdateTime();
- return super.getYear();
- }
-
- @Override
- public int hashCode() {
- conditionallyUpdateTime();
- return super.hashCode();
- }
-
- @Override
- public void setDate(final int date) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setHours(final int hours) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setMinutes(final int minutes) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setMonth(final int month) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setSeconds(final int seconds) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setTime(final long time) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setYear(final int year) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/src/java/net/sf/samtools/util/RuntimeEOFException.java b/src/java/net/sf/samtools/util/RuntimeEOFException.java
deleted file mode 100644
index ae4d70d..0000000
--- a/src/java/net/sf/samtools/util/RuntimeEOFException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-
-/**
- * Thrown by various codecs to indicate EOF without having to clutter the API with throws clauses
- */
-public class RuntimeEOFException extends SAMException {
- public RuntimeEOFException() {
- }
-
- public RuntimeEOFException(final String s) {
- super(s);
- }
-
- public RuntimeEOFException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-
- public RuntimeEOFException(final Throwable throwable) {
- super(throwable);
- }
-}
diff --git a/src/java/net/sf/samtools/util/RuntimeIOException.java b/src/java/net/sf/samtools/util/RuntimeIOException.java
deleted file mode 100644
index 6c2f5ad..0000000
--- a/src/java/net/sf/samtools/util/RuntimeIOException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-
-/**
- * Thrown by various IO classes to indicate IOException without having to clutter the API with throws clauses
- */
-public class RuntimeIOException extends SAMException {
- public RuntimeIOException() {
- }
-
- public RuntimeIOException(final String s) {
- super(s);
- }
-
- public RuntimeIOException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-
- public RuntimeIOException(final Throwable throwable) {
- super(throwable);
- }
-}
diff --git a/src/java/net/sf/samtools/util/SequenceUtil.java b/src/java/net/sf/samtools/util/SequenceUtil.java
deleted file mode 100644
index 6348eee..0000000
--- a/src/java/net/sf/samtools/util/SequenceUtil.java
+++ /dev/null
@@ -1,767 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.*;
-
-import java.io.File;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class SequenceUtil {
- /** Byte typed variables for all normal bases. */
- public static final byte a='a', c='c', g='g', t='t', n='n', A='A', C='C', G='G', T='T', N='N';
-
- /**
- * Calculate the reverse complement of the specified sequence
- * (Stolen from Reseq)
- *
- * @param sequenceData
- * @return reverse complement
- */
- public static String reverseComplement(final String sequenceData) {
- final byte[] bases = net.sf.samtools.util.StringUtil.stringToBytes(sequenceData);
- reverseComplement(bases);
- return net.sf.samtools.util.StringUtil.bytesToString(bases);
- }
-
- /** Attempts to efficiently compare two bases stored as bytes for equality. */
- public static boolean basesEqual(byte lhs, byte rhs) {
- if (lhs == rhs) return true;
- else {
- if (lhs > 90) lhs -= 32;
- if (rhs > 90) rhs -= 32;
- }
-
- return lhs == rhs;
- }
-
- /**
- * returns true if the value of base represents a no call
- */
- public static boolean isNoCall(final byte base) {
- return base == 'N' || base == 'n' || base == '.';
- }
-
- /** Returns true if the byte is in [acgtACGT]. */
- public static boolean isValidBase(final byte b){
- return b == a || b == A ||
- b == c || b == C ||
- b == g || b == G ||
- b == t || b == T;
- }
-
- /** Calculates the fraction of bases that are G/C in the sequence. */
- public static double calculateGc(final byte[] bases) {
- int gcs = 0;
- for (int i=0; i<bases.length; ++i) {
- final byte b = bases[i];
- if (b == 'C' || b == 'G' || b == 'c' || b == 'g') ++gcs;
- }
-
- return gcs / (double) bases.length;
- }
-
- /**
- * Throws an exception only if both parameters are not null
- * @param s1 a list of sequence headers
- * @param s2 a second list of sequence headers
- */
- public static void assertSequenceListsEqual(final List<SAMSequenceRecord> s1, final List<SAMSequenceRecord> s2) {
- if (s1 != null && s2 != null) {
-
- if (s1.size() != s2.size()) {
- throw new SequenceListsDifferException(
- "Sequence dictionaries are not the same size (" + s1.size() + ", " + s2.size() +
- ")");
- }
-
- for (int i = 0; i < s1.size(); ++i) {
- if (!s1.get(i).isSameSequence(s2.get(i))) {
- String s1Attrs = "";
- for (final java.util.Map.Entry<String, String> entry : s1.get(i)
- .getAttributes()) {
- s1Attrs += "/" + entry.getKey() + "=" + entry.getValue();
- }
- String s2Attrs = "";
- for (final java.util.Map.Entry<String, String> entry : s2.get(i)
- .getAttributes()) {
- s2Attrs += "/" + entry.getKey() + "=" + entry.getValue();
- }
- throw new SequenceListsDifferException(
- "Sequences at index " + i + " don't match: " +
- s1.get(i).getSequenceIndex() + "/" + s1.get(i).getSequenceLength() +
- "/" + s1.get(i).getSequenceName() + s1Attrs + " " +
- s2.get(i).getSequenceIndex() + "/" + s2.get(i).getSequenceLength() +
- "/" + s2.get(i).getSequenceName() + s2Attrs);
- }
- }
- }
- }
-
- public static class SequenceListsDifferException extends SAMException {
- public SequenceListsDifferException() {
- }
-
- public SequenceListsDifferException(final String s) {
- super(s);
- }
-
- public SequenceListsDifferException(final String s, final Throwable throwable) {
- super(s, throwable);
- }
-
- public SequenceListsDifferException(final Throwable throwable) {
- super(throwable);
- }
- }
-
- /**
- * Returns true if both parameters are null or equal, otherwise returns false
- */
- public static boolean areSequenceDictionariesEqual(final SAMSequenceDictionary s1, final SAMSequenceDictionary s2) {
- if (s1 == null && s2 == null) return true;
- if (s1 == null || s2 == null) return false;
-
- try {
- assertSequenceListsEqual(s1.getSequences(), s2.getSequences());
- return true;
- } catch (SequenceListsDifferException e) {
- return false;
- }
- }
-
- /**
- * Throws an exception if both parameters are non-null and unequal.
- */
- public static void assertSequenceDictionariesEqual(final SAMSequenceDictionary s1, final SAMSequenceDictionary s2) {
- if (s1 == null || s2 == null) return;
- assertSequenceListsEqual(s1.getSequences(), s2.getSequences());
- }
-
- /**
- * Throws an exception if both parameters are non-null and unequal, including the filenames.
- */
- public static void assertSequenceDictionariesEqual(final SAMSequenceDictionary s1, final SAMSequenceDictionary s2,
- final File f1, final File f2) {
- try {
- assertSequenceDictionariesEqual(s1, s2);
- } catch (SequenceListsDifferException e) {
- throw new SequenceListsDifferException("In files " + f1.getAbsolutePath() + " and " + f2.getAbsolutePath(), e);
- }
- }
- /**
- * Create a simple ungapped cigar string, which might have soft clipping at either end
- * @param alignmentStart raw aligment start, which may result in read hanging off beginning or end of read
- * @return cigar string that may have S operator at beginning or end, and has M operator for the rest of the read
- */
- public static String makeCigarStringWithPossibleClipping(final int alignmentStart, final int readLength, final int referenceSequenceLength) {
- int start = alignmentStart;
- int leftSoftClip = 0;
- if (start < 1) {
- leftSoftClip = 1 - start;
- start = 1;
- }
- int rightSoftClip = 0;
- if (alignmentStart + readLength > referenceSequenceLength + 1) {
- rightSoftClip = alignmentStart + readLength - referenceSequenceLength - 1;
- }
- // CIGAR is trivial because there are no indels or clipping in Gerald
- final int matchLength = readLength - leftSoftClip - rightSoftClip;
- if (matchLength < 1) {
- throw new SAMException("Unexpected cigar string with no M op for read.");
- }
- return makeSoftClipCigar(leftSoftClip) + Integer.toString(matchLength) + "M" + makeSoftClipCigar(rightSoftClip);
- }
-
- /**
- * Create a cigar string for a gapped alignment, which may have soft clipping at either end
- * @param alignmentStart raw alignment start, which may result in read hanging off beginning or end of read
- * @param readLength
- * @param referenceSequenceLength
- * @param indelPosition number of matching bases before indel. Must be > 0
- * @param indelLength length of indel. Positive for insertion, negative for deletion.
- * @return cigar string that may have S operator at beginning or end, has one or two M operators, and an I or a D.
- */
- public static String makeCigarStringWithIndelPossibleClipping(final int alignmentStart,
- final int readLength,
- final int referenceSequenceLength,
- final int indelPosition,
- final int indelLength) {
- int start = alignmentStart;
- int leftSoftClip = 0;
- if (start < 1) {
- leftSoftClip = 1 - start;
- start = 1;
- }
- int rightSoftClip = 0;
- final int alignmentEnd = alignmentStart + readLength - indelLength;
- if (alignmentEnd > referenceSequenceLength + 1) {
- rightSoftClip = alignmentEnd - referenceSequenceLength - 1;
- }
- if (leftSoftClip >= indelPosition) {
- throw new IllegalStateException("Soft clipping entire pre-indel match. leftSoftClip: " + leftSoftClip +
- "; indelPosition: " + indelPosition);
- }
- // CIGAR is trivial because there are no indels or clipping in Gerald
- final int firstMatchLength = indelPosition - leftSoftClip;
- final int secondMatchLength = readLength - indelPosition - (indelLength > 0? indelLength: 0) - rightSoftClip;
- if (secondMatchLength < 1) {
- throw new SAMException("Unexpected cigar string with no M op for read.");
- }
- return makeSoftClipCigar(leftSoftClip) + Integer.toString(firstMatchLength) + "M" +
- Math.abs(indelLength) + (indelLength > 0? "I": "D") +
- Integer.toString(secondMatchLength) + "M" +
- makeSoftClipCigar(rightSoftClip);
- }
-
- public static String makeSoftClipCigar(final int clipLength) {
- if (clipLength == 0) {
- return "";
- }
- return Integer.toString(clipLength) + "S";
- }
-
- /** Calculates the number of mismatches between the read and the reference sequence provided. */
- public static int countMismatches(final SAMRecord read, final byte[] referenceBases) {
- return countMismatches(read, referenceBases, 0, false);
- }
-
- /** Calculates the number of mismatches between the read and the reference sequence provided. */
- public static int countMismatches(final SAMRecord read, final byte[] referenceBases, final int referenceOffset) {
- return countMismatches(read, referenceBases, referenceOffset, false);
- }
-
- /**
- * Calculates the number of mismatches between the read and the reference sequence provided.
- *
- * @param referenceBases Array of ASCII bytes that covers at least the the portion of the reference sequence
- * to which read is aligned from getReferenceStart to getReferenceEnd.
- * @param referenceOffset 0-based offset of the first element of referenceBases relative to the start
- * of that reference sequence.
- * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
- * and C->T on the positive strand and G->A on the negative strand will not be counted
- * as mismatches.
- */
- public static int countMismatches(final SAMRecord read, final byte[] referenceBases, final int referenceOffset,
- final boolean bisulfiteSequence) {
- try {
- int mismatches = 0;
-
- final byte[] readBases = read.getReadBases();
-
- for (final AlignmentBlock block : read.getAlignmentBlocks()) {
- final int readBlockStart = block.getReadStart() - 1;
- final int referenceBlockStart = block.getReferenceStart() - 1 - referenceOffset;
- final int length = block.getLength();
-
- for (int i=0; i<length; ++i) {
- if (!bisulfiteSequence) {
- if (!basesEqual(readBases[readBlockStart+i], referenceBases[referenceBlockStart+i])) {
- ++mismatches;
- }
- }
- else {
- if (!bisulfiteBasesEqual(read.getReadNegativeStrandFlag(), readBases[readBlockStart+i],
- referenceBases[referenceBlockStart+i])) {
- ++mismatches;
- }
- }
- }
- }
- return mismatches;
- } catch (Exception e) {
- throw new SAMException("Exception counting mismatches for read " + read, e);
- }
- }
-
- /**
- * Calculates the number of mismatches between the read and the reference sequence provided.
- *
- * @param referenceBases Array of ASCII bytes that covers at least the the portion of the reference sequence
- * to which read is aligned from getReferenceStart to getReferenceEnd.
- * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
- * and C->T on the positive strand and G->A on the negative strand will not be counted
- * as mismatches.
- */
- public static int countMismatches(final SAMRecord read, final byte[] referenceBases, final boolean bisulfiteSequence) {
- return countMismatches(read, referenceBases, 0, bisulfiteSequence);
- }
-
- /**
- * Sadly, this is a duplicate of the method above, except that it takes char[] for referenceBases rather
- * than byte[]. This is because GATK needs it this way.
- *
- * TODO: Remove this method when GATK map method is changed to take refseq as byte[].
- */
- private static int countMismatches(final SAMRecord read, final char[] referenceBases, final int referenceOffset) {
- int mismatches = 0;
-
- final byte[] readBases = read.getReadBases();
-
- for (final AlignmentBlock block : read.getAlignmentBlocks()) {
- final int readBlockStart = block.getReadStart() - 1;
- final int referenceBlockStart = block.getReferenceStart() - 1 - referenceOffset;
- final int length = block.getLength();
-
- for (int i=0; i<length; ++i) {
- if (!basesEqual(readBases[readBlockStart+i], StringUtil.charToByte(referenceBases[referenceBlockStart+i]))) {
- ++mismatches;
- }
- }
- }
- return mismatches;
- }
-
- /**
- * Calculates the sum of qualities for mismatched bases in the read.
- * @param referenceBases Array of ASCII bytes in which the 0th position in the array corresponds
- * to the first element of the reference sequence to which read is aligned.
- */
- public static int sumQualitiesOfMismatches(final SAMRecord read, final byte[] referenceBases) {
- return sumQualitiesOfMismatches(read, referenceBases, 0, false);
- }
-
- /**
- * Calculates the sum of qualities for mismatched bases in the read.
- * @param referenceBases Array of ASCII bytes that covers at least the the portion of the reference sequence
- * to which read is aligned from getReferenceStart to getReferenceEnd.
- * @param referenceOffset 0-based offset of the first element of referenceBases relative to the start
- * of that reference sequence.
- */
- public static int sumQualitiesOfMismatches(final SAMRecord read, final byte[] referenceBases,
- final int referenceOffset) {
- return sumQualitiesOfMismatches(read, referenceBases, referenceOffset, false);
- }
-
- /**
- * Calculates the sum of qualities for mismatched bases in the read.
- * @param referenceBases Array of ASCII bytes that covers at least the the portion of the reference sequence
- * to which read is aligned from getReferenceStart to getReferenceEnd.
- * @param referenceOffset 0-based offset of the first element of referenceBases relative to the start
- * of that reference sequence.
- * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
- * and C->T on the positive strand and G->A on the negative strand will not be counted
- * as mismatches.
- */
- public static int sumQualitiesOfMismatches(final SAMRecord read, final byte[] referenceBases,
- final int referenceOffset, final boolean bisulfiteSequence) {
- int qualities = 0;
-
- final byte[] readBases = read.getReadBases();
- final byte[] readQualities = read.getBaseQualities();
-
- if (read.getAlignmentStart() <= referenceOffset) {
- throw new IllegalArgumentException("read.getAlignmentStart(" + read.getAlignmentStart() +
- ") <= referenceOffset(" + referenceOffset + ")");
- }
-
- for (final AlignmentBlock block : read.getAlignmentBlocks()) {
- final int readBlockStart = block.getReadStart() - 1;
- final int referenceBlockStart = block.getReferenceStart() - 1 - referenceOffset;
- final int length = block.getLength();
-
- for (int i=0; i<length; ++i) {
- if (!bisulfiteSequence) {
- if (!basesEqual(readBases[readBlockStart+i], referenceBases[referenceBlockStart+i])) {
- qualities += readQualities[readBlockStart+i];
- }
-
- }
- else {
- if (!bisulfiteBasesEqual(read.getReadNegativeStrandFlag(), readBases[readBlockStart+i],
- referenceBases[referenceBlockStart+i])) {
- qualities += readQualities[readBlockStart+i];
- }
- }
- }
- }
-
- return qualities;
- }
-
- /**
- * Sadly, this is a duplicate of the method above, except that it takes char[] for referenceBases rather
- * than byte[]. This is because GATK needs it this way.
- *
- * TODO: Remove this method when GATK map method is changed to take refseq as byte[].
- */
- public static int sumQualitiesOfMismatches(final SAMRecord read, final char[] referenceBases,
- final int referenceOffset) {
- int qualities = 0;
-
- final byte[] readBases = read.getReadBases();
- final byte[] readQualities = read.getBaseQualities();
-
- if (read.getAlignmentStart() <= referenceOffset) {
- throw new IllegalArgumentException("read.getAlignmentStart(" + read.getAlignmentStart() +
- ") <= referenceOffset(" + referenceOffset + ")");
- }
-
- for (final AlignmentBlock block : read.getAlignmentBlocks()) {
- final int readBlockStart = block.getReadStart() - 1;
- final int referenceBlockStart = block.getReferenceStart() - 1 - referenceOffset;
- final int length = block.getLength();
-
- for (int i=0; i<length; ++i) {
- if (!basesEqual(readBases[readBlockStart+i], StringUtil.charToByte(referenceBases[referenceBlockStart+i]))) {
- qualities += readQualities[readBlockStart+i];
- }
- }
- }
-
- return qualities;
- }
-
- public static int countInsertedBases(final Cigar cigar) {
- int ret = 0;
- for (final CigarElement element : cigar.getCigarElements()) {
- if (element.getOperator() == CigarOperator.INSERTION) ret += element.getLength();
- }
- return ret;
- }
-
- public static int countDeletedBases(final Cigar cigar) {
- int ret = 0;
- for (final CigarElement element : cigar.getCigarElements()) {
- if (element.getOperator() == CigarOperator.DELETION) ret += element.getLength();
- }
- return ret;
- }
-
- public static int countInsertedBases(final SAMRecord read) {
- return countInsertedBases(read.getCigar());
- }
-
- public static int countDeletedBases(final SAMRecord read) {
- return countDeletedBases(read.getCigar());
- }
-
- /**
- * Calculates the for the predefined NM tag from the SAM spec. To the result of
- * countMismatches() it adds 1 for each indel.
- */
- public static int calculateSamNmTag(final SAMRecord read, final byte[] referenceBases) {
- return calculateSamNmTag(read, referenceBases, 0, false);
- }
-
- /**
- * Calculates the for the predefined NM tag from the SAM spec. To the result of
- * countMismatches() it adds 1 for each indel.
-
- * @param referenceOffset 0-based offset of the first element of referenceBases relative to the start
- * of that reference sequence.
- */
- public static int calculateSamNmTag(final SAMRecord read, final byte[] referenceBases,
- final int referenceOffset) {
- return calculateSamNmTag(read, referenceBases, referenceOffset, false);
- }
-
- /**
- * Calculates the for the predefined NM tag from the SAM spec. To the result of
- * countMismatches() it adds 1 for each indel.
-
- * @param referenceOffset 0-based offset of the first element of referenceBases relative to the start
- * of that reference sequence.
- * @param bisulfiteSequence If this is true, it is assumed that the reads were bisulfite treated
- * and C->T on the positive strand and G->A on the negative strand will not be counted
- * as mismatches.
- */
- public static int calculateSamNmTag(final SAMRecord read, final byte[] referenceBases,
- final int referenceOffset, final boolean bisulfiteSequence) {
- int samNm = countMismatches(read, referenceBases, referenceOffset, bisulfiteSequence);
- for (final CigarElement el : read.getCigar().getCigarElements()) {
- if (el.getOperator() == CigarOperator.INSERTION || el.getOperator() == CigarOperator.DELETION) {
- samNm += el.getLength();
- }
- }
- return samNm;
- }
-
- /**
- * Sadly, this is a duplicate of the method above, except that it takes char[] for referenceBases rather
- * than byte[]. This is because GATK needs it this way.
- *
- * TODO: Remove this method when GATK map method is changed to take refseq as byte[].
- */
- public static int calculateSamNmTag(final SAMRecord read, final char[] referenceBases,
- final int referenceOffset) {
- int samNm = countMismatches(read, referenceBases, referenceOffset);
- for (final CigarElement el : read.getCigar().getCigarElements()) {
- if (el.getOperator() == CigarOperator.INSERTION || el.getOperator() == CigarOperator.DELETION) {
- samNm += el.getLength();
- }
- }
- return samNm;
- }
-
- /** Returns the complement of a single byte. */
- public static byte complement(final byte b) {
- switch (b) {
- case a: return t;
- case c: return g;
- case g: return c;
- case t: return a;
- case A: return T;
- case C: return G;
- case G: return C;
- case T: return A;
- default: return b;
- }
- }
-
- /** Reverses and complements the bases in place. */
- public static void reverseComplement(final byte[] bases) {
- final int lastIndex = bases.length - 1;
-
- int i, j;
- for (i=0, j=lastIndex; i<j; ++i, --j) {
- final byte tmp = complement(bases[i]);
- bases[i] = complement(bases[j]);
- bases[j] = tmp;
- }
- if (bases.length % 2 == 1) {
- bases[i] = complement(bases[i]);
- }
- }
-
-
- /** Reverses the quals in place. */
- public static void reverseQualities(final byte[] quals) {
- final int lastIndex = quals.length - 1;
-
- int i, j;
- for (i=0, j=lastIndex; i<j; ++i, --j) {
- final byte tmp = quals[i];
- quals[i] = quals[j];
- quals[j] = tmp;
- }
- }
-
- /** Returns true if the bases are equal OR if the mismatch cannot be accounted for by
- * bisfulite treatment. C->T on the positive strand and G->A on the negative strand
- * do not count as mismatches */
- public static boolean bisulfiteBasesEqual(final boolean negativeStrand, final byte read, final byte reference) {
- return (basesEqual(read, reference)) || (isBisulfiteConverted(read, reference, negativeStrand));
- }
-
- public static boolean bisulfiteBasesEqual(final byte read, final byte reference) {
- return bisulfiteBasesEqual(false, read, reference);
- }
-
- /**
- * Checks for bisulfite conversion, C->T on the positive strand and G-> on the negative strand.
- */
- public static boolean isBisulfiteConverted(final byte read, final byte reference, final boolean negativeStrand) {
- if (negativeStrand) {
- if (basesEqual(reference, G) && basesEqual(read, A)) {
- return true;
- }
- }
- else {
- if (basesEqual(reference, C) && basesEqual(read, T)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean isBisulfiteConverted(final byte read, final byte reference) {
- return isBisulfiteConverted(read, reference, false);
- }
-
- /*
- * Regexp for MD string.
- *
- * \G = end of previous match.
- * (?:[0-9]+) non-capturing (why non-capturing?) group of digits. For this number of bases read matches reference.
- * - or -
- * Single reference base for case in which reference differs from read.
- * - or -
- * ^one or more reference bases that are deleted in read.
- *
- */
- static final Pattern mdPat = Pattern.compile("\\G(?:([0-9]+)|([ACTGNactgn])|(\\^[ACTGNactgn]+))");
-
- /**
- * Produce reference bases from an aligned SAMRecord with MD string and Cigar.
- * @param rec Must contain non-empty CIGAR and MD attribute.
- * @param includeReferenceBasesForDeletions If true, include reference bases that are deleted in the read.
- * This will make the returned array not line up with the read if there are deletions.
- * @return References bases corresponding to the read. If there is an insertion in the read, reference contains
- * '-'. If the read is soft-clipped, reference contains '0'. If there is a skipped region and
- * includeReferenceBasesForDeletions==true, reference will have Ns for the skipped region.
- */
- public static byte[] makeReferenceFromAlignment(final SAMRecord rec, final boolean includeReferenceBasesForDeletions) {
- final String md = rec.getStringAttribute(SAMTag.MD.name());
- if (md == null) {
- throw new SAMException("Cannot create reference from SAMRecord with no MD tag, read: " + rec.getReadName());
- }
- // Not sure how long output will be, but it will be no longer than this.
- int maxOutputLength = 0;
- final Cigar cigar = rec.getCigar();
- if (cigar == null) {
- throw new SAMException("Cannot create reference from SAMRecord with no CIGAR, read: " + rec.getReadName());
- }
- for (final CigarElement cigarElement : cigar.getCigarElements()) {
- maxOutputLength += cigarElement.getLength();
- }
- final byte[] ret = new byte[maxOutputLength];
- int outIndex = 0;
-
- final Matcher match = mdPat.matcher(md);
- int curSeqPos = 0;
-
- int savedBases = 0;
- final byte[] seq = rec.getReadBases();
- for (final CigarElement cigEl : cigar.getCigarElements())
- {
- final int cigElLen = cigEl.getLength();
- final CigarOperator cigElOp = cigEl.getOperator();
-
-
- if (cigElOp == CigarOperator.SKIPPED_REGION) {
- // We've decided that MD tag will not contain bases for skipped regions, as they
- // could be megabases long, so just put N in there if caller wants reference bases,
- // otherwise ignore skipped regions.
- if (includeReferenceBasesForDeletions) {
- for (int i = 0; i < cigElLen; ++i) {
- ret[outIndex++] = N;
- }
- }
- }
- // If it consumes reference bases, it's either a match or a deletion in the sequence
- // read. Either way, we're going to need to parse through the MD.
- else if (cigElOp.consumesReferenceBases()) {
- // We have a match region, go through the MD
- int basesMatched = 0;
-
- // Do we have any saved matched bases?
- while ((savedBases>0) && (basesMatched < cigElLen))
- {
- ret[outIndex++] = seq[curSeqPos++];
- savedBases--;
- basesMatched++;
- }
-
- while (basesMatched < cigElLen)
- {
- boolean matched = match.find();
- if (matched)
- {
- String mg;
- if ( ((mg = match.group(1)) !=null) && (mg.length() > 0) )
- {
- // It's a number , meaning a series of matches
- final int num = Integer.parseInt(mg);
- for (int i = 0; i < num; i++)
- {
- if (basesMatched<cigElLen)
- {
- ret[outIndex++] = seq[curSeqPos++];
- }
- else
- {
- savedBases++;
- }
- basesMatched++;
- }
- }
-
- else if ( ((mg = match.group(2)) !=null) && (mg.length() > 0) )
- {
- // It's a single nucleotide, meaning a mismatch
- if (basesMatched<cigElLen)
- {
- ret[outIndex++] = StringUtil.charToByte(mg.charAt(0));
- curSeqPos++;
- }
- else
- {
- throw new IllegalStateException("Should never happen.");
- }
- basesMatched++;
- }
- else if ( ((mg = match.group(3)) !=null) && (mg.length() > 0) )
- {
- // It's a deletion, starting with a caret
- // don't include caret
- if (includeReferenceBasesForDeletions) {
- final byte[] deletedBases = StringUtil.stringToBytes(mg);
- System.arraycopy(deletedBases, 1, ret, outIndex, deletedBases.length - 1);
- outIndex += deletedBases.length - 1;
- }
- basesMatched += mg.length() - 1;
-
- // Check just to make sure.
- if (basesMatched != cigElLen)
- {
- throw new SAMException("Got a deletion in CIGAR (" + cigar + ", deletion " + cigElLen +
- " length) with an unequal ref insertion in MD (" + md + ", md " + basesMatched + " length");
- }
- if (cigElOp != CigarOperator.DELETION)
- {
- throw new SAMException ("Got an insertion in MD ("+md+") without a corresponding deletion in cigar ("+cigar+")");
- }
-
- }
- else
- {
- matched = false;
- }
- }
-
- if (!matched)
- {
- throw new SAMException("Illegal MD pattern: " + md + " for read " + rec.getReadName() +
- " with CIGAR " + rec.getCigarString());
- }
- }
-
- }
- else if (cigElOp.consumesReadBases())
- {
- // We have an insertion in read
- for (int i = 0; i < cigElLen; i++)
- {
- final char c = (cigElOp == CigarOperator.SOFT_CLIP) ? '0' : '-';
- ret[outIndex++] = StringUtil.charToByte(c);
- curSeqPos++;
- }
- }
- else
- {
- // It's an op that consumes neither read nor reference bases. Do we just ignore??
- }
-
- }
- if (outIndex < ret.length) {
- final byte[] shorter = new byte[outIndex];
- System.arraycopy(ret, 0, shorter, 0, outIndex);
- return shorter;
- }
- return ret;
- }
-}
diff --git a/src/java/net/sf/samtools/util/SnappyLoader.java b/src/java/net/sf/samtools/util/SnappyLoader.java
deleted file mode 100644
index 8b1dfc0..0000000
--- a/src/java/net/sf/samtools/util/SnappyLoader.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-import org.xerial.snappy.LoadSnappy;
-import org.xerial.snappy.SnappyInputStream;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.Constructor;
-
-/**
- * If Snappy is available, obtain single-arg ctors for SnappyInputStream and SnappyOutputStream.
- */
-public class SnappyLoader {
- private static final int SNAPPY_BLOCK_SIZE = 32768; // keep this as small as can be without hurting compression ratio.
- private final Constructor<InputStream> SnappyInputStreamCtor;
- private final Constructor<OutputStream> SnappyOutputStreamCtor;
- public final boolean SnappyAvailable;
-
- // Force Snappy-java code to be loaded into executable jars.
- private final SnappyInputStream ignoreMe = null;
-
- // Force bcel to load Snappy.
- //private static final Class SnappyClass = SnappyInputStream.class;
-
- private static final boolean DefaultVerbosity = Boolean.valueOf(System.getProperty("snappy.loader.verbosity", "false"));
-
- public SnappyLoader() {
- this(DefaultVerbosity);
- }
-
- /**
- * Constructs a new SnappyLoader which will check to see if snappy is available in the JVM/library path.
- * @param verbose if true output a small number of debug messages to System.err
- */
- public SnappyLoader(final boolean verbose) {
- Constructor<InputStream> inputStreamCtor = null;
- Constructor<OutputStream> outputStreamCtor = null;
- Class<Error> snappyErrorClass = null;
-
- if (java.lang.Boolean.valueOf(System.getProperty("snappy.disable", "false"))) {
- System.err.println("Snappy is disabled via system property.");
- }
- else {
- try {
- final Class<InputStream> snappyInputStreamClass = (Class<InputStream>)Class.forName("org.xerial.snappy.SnappyInputStream");
- final Class<OutputStream> snappyOutputStreamClass = (Class<OutputStream>)Class.forName("org.xerial.snappy.SnappyOutputStream");
- snappyErrorClass = (Class<Error>)Class.forName("org.xerial.snappy.SnappyError");
- inputStreamCtor = snappyInputStreamClass.getConstructor(InputStream.class);
- outputStreamCtor = snappyOutputStreamClass.getConstructor(OutputStream.class, Integer.TYPE);
- }
- catch (NoSuchMethodException e) { /* Do nothing. */ }
- catch (ClassNotFoundException e) { /* Do nothing. */ }
- }
-
- this.SnappyInputStreamCtor = inputStreamCtor;
- this.SnappyOutputStreamCtor = outputStreamCtor;
-
- if (this.SnappyInputStreamCtor != null && this.SnappyOutputStreamCtor != null) {
- // Don't try to call any Snappy code until classes have been found via reflection above.
- boolean tmpSnappyAvailable;
- try {
- if (!LoadSnappy.load()) {
- if (verbose) System.err.println("Snappy dll failed to load.");
- tmpSnappyAvailable = false;
- }
- else {
- if (verbose) System.err.println("Snappy stream classes loaded.");
- tmpSnappyAvailable = true;
- }
- } catch (Error e) {
- if (e.getClass().equals(snappyErrorClass)) {
- if (verbose) System.err.println("Snappy dll failed to load: " + e.getMessage());
- tmpSnappyAvailable = false;
- } else {
- throw e;
- }
- }
- SnappyAvailable = tmpSnappyAvailable;
- }
- else {
- if (verbose) System.err.println("Snappy stream classes not loaded.");
- SnappyAvailable = false;
- }
- }
-
- /** Wrap an InputStream in a SnappyInputStream. If Snappy is not available will throw an exception. */
- public InputStream wrapInputStream(final InputStream inputStream) {
- try {
- return SnappyInputStreamCtor.newInstance(inputStream);
- } catch (Exception e) {
- throw new SAMException("Error instantiating SnappyInputStream", e);
- }
- }
-
- /** Wrap an InputStream in a SnappyInputStream. If Snappy is not available will throw an exception. */
- public OutputStream wrapOutputStream(final OutputStream outputStream) {
- try {
- return SnappyOutputStreamCtor.newInstance(outputStream, SNAPPY_BLOCK_SIZE);
- } catch (Exception e) {
- throw new SAMException("Error instantiating SnappyOutputStream", e);
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/SortingCollection.java b/src/java/net/sf/samtools/util/SortingCollection.java
deleted file mode 100644
index 4162b04..0000000
--- a/src/java/net/sf/samtools/util/SortingCollection.java
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.Defaults;
-
-import java.io.*;
-import java.lang.reflect.Array;
-import java.util.*;
-
-/**
- * Collection to which many records can be added. After all records are added, the collection can be
- * iterated, and the records will be returned in order defined by the comparator. Records may be spilled
- * to a temporary directory if there are more records added than will fit in memory. As a result of this,
- * the objects returned may not be identical to the objects added to the collection, but they should be
- * equal as determined by the codec used to write them to disk and read them back.
- *
- * When iterating over the collection, the number of file handles required is numRecordsInCollection/maxRecordsInRam.
- * If this becomes a limiting factor, a file handle cache could be added.
- *
- * If Snappy DLL is available and snappy.disable system property is not set to true, then Snappy is used
- * to compress temporary files.
- */
-public class SortingCollection<T> implements Iterable<T> {
-
- /**
- * Client must implement this class, which defines the way in which records are written to and
- * read from file.
- */
- public interface Codec<T> extends Cloneable {
- /**
- * Where to write encoded output
- * @param os
- */
- void setOutputStream(OutputStream os);
-
- /**
- * Where to read encoded input from
- * @param is
- */
- void setInputStream(InputStream is);
- /**
- * Write object to output stream
- * @param val what to write
- */
- void encode(T val);
-
- /**
- * Read the next record from the input stream and convert into a java object.
- * @return null if no more records. Should throw exception if EOF is encountered in the middle of
- * a record.
- */
- T decode();
-
- /**
- * Must return a cloned copy of the codec that can be used independently of
- * the original instance. This is required so that multiple codecs can exist simultaneously
- * that each is reading a separate file.
- */
- Codec<T> clone();
- }
-
- /** Directories where files of sorted records go. */
- private final File[] tmpDirs;
-
- /** The minimum amount of space free on a temp filesystem to write a file there. */
- private final long TMP_SPACE_FREE = IOUtil.FIVE_GBS;
-
- /**
- * Used to write records to file, and used as a prototype to create codecs for reading.
- */
- private final SortingCollection.Codec<T> codec;
-
- /**
- * For sorting, both when spilling records to file, and merge sorting.
- */
- private final Comparator<T> comparator;
- private final int maxRecordsInRam;
- private int numRecordsInRam = 0;
- private T[] ramRecords;
- private boolean iterationStarted = false;
- private boolean doneAdding = false;
-
- /**
- * Set to true when all temp files have been cleaned up
- */
- private boolean cleanedUp = false;
-
- /**
- * List of files in tmpDir containing sorted records
- */
- private final List<File> files = new ArrayList<File>();
-
- private boolean destructiveIteration = true;
-
- private TempStreamFactory tempStreamFactory = new TempStreamFactory();
-
- /**
- * Prepare to accumulate records to be sorted
- * @param componentType Class of the record to be sorted. Necessary because of Java generic lameness.
- * @param codec For writing records to file and reading them back into RAM
- * @param comparator Defines output sort order
- * @param maxRecordsInRam how many records to accumulate before spilling to disk
- * @param tmpDir Where to write files of records that will not fit in RAM
- */
- private SortingCollection(final Class<T> componentType, final SortingCollection.Codec<T> codec,
- final Comparator<T> comparator, final int maxRecordsInRam, final File... tmpDir) {
- if (maxRecordsInRam <= 0) {
- throw new IllegalArgumentException("maxRecordsInRam must be > 0");
- }
-
- if (tmpDir == null || tmpDir.length == 0) {
- throw new IllegalArgumentException("At least one temp directory must be provided.");
- }
-
- this.tmpDirs = tmpDir;
- this.codec = codec;
- this.comparator = comparator;
- this.maxRecordsInRam = maxRecordsInRam;
- this.ramRecords = (T[])Array.newInstance(componentType, maxRecordsInRam);
- }
-
- public void add(final T rec) {
- if (doneAdding) {
- throw new IllegalStateException("Cannot add after calling doneAdding()");
- }
- if (iterationStarted) {
- throw new IllegalStateException("Cannot add after calling iterator()");
- }
- if (numRecordsInRam == maxRecordsInRam) {
- spillToDisk();
- }
- ramRecords[numRecordsInRam++] = rec;
- }
-
- /**
- * This method can be called after caller is done adding to collection, in order to possibly free
- * up memory. If iterator() is called immediately after caller is done adding, this is not necessary,
- * because iterator() triggers the same freeing.
- */
- public void doneAdding() {
- if (this.cleanedUp) {
- throw new IllegalStateException("Cannot call doneAdding() after cleanup() was called.");
- }
- if (doneAdding) {
- return;
- }
-
- doneAdding = true;
-
- if (this.files.isEmpty()) {
- return;
- }
-
- if (this.numRecordsInRam > 0) {
- spillToDisk();
- }
-
- // Facilitate GC
- this.ramRecords = null;
- }
-
- /**
- * @return True if this collection is allowed to discard data during iteration in order to reduce memory
- * footprint, precluding a second iteration over the collection.
- */
- public boolean isDestructiveIteration() {
- return destructiveIteration;
- }
-
- /**
- * Tell this collection that it is allowed to discard data during iteration in order to reduce memory footprint,
- * precluding a second iteration. This is true by default.
- */
- public void setDestructiveIteration(boolean destructiveIteration) {
- this.destructiveIteration = destructiveIteration;
- }
-
- /**
- * Sort the records in memory, write them to a file, and clear the buffer of records in memory.
- */
- private void spillToDisk() {
- try {
- Arrays.sort(this.ramRecords, 0, this.numRecordsInRam, this.comparator);
- final File f = newTempFile();
- OutputStream os = null;
- try {
- os = tempStreamFactory.wrapTempOutputStream(new FileOutputStream(f), Defaults.BUFFER_SIZE);
- this.codec.setOutputStream(os);
- for (int i = 0; i < this.numRecordsInRam; ++i) {
- this.codec.encode(ramRecords[i]);
- // Facilitate GC
- this.ramRecords[i] = null;
- }
-
- os.flush();
- } catch (RuntimeIOException ex) {
- throw new RuntimeIOException("Problem writing temporary file " + f.getAbsolutePath() +
- ". Try setting TMP_DIR to a file system with lots of space.", ex);
- } finally {
- if (os != null) {
- os.close();
- }
- }
-
- this.numRecordsInRam = 0;
- this.files.add(f);
-
- }
- catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * Creates a new tmp file on one of the available temp filesystems, registers it for deletion
- * on JVM exit and then returns it.
- */
- private File newTempFile() throws IOException {
- return IOUtil.newTempFile("sortingcollection.", ".tmp", this.tmpDirs, TMP_SPACE_FREE);
- }
-
- /**
- * Prepare to iterate through the records in order. This method may be called more than once,
- * but add() may not be called after this method has been called.
- */
- public CloseableIterator<T> iterator() {
- if (this.cleanedUp) {
- throw new IllegalStateException("Cannot call iterator() after cleanup() was called.");
- }
- doneAdding();
-
- this.iterationStarted = true;
- if (this.files.isEmpty()) {
- return new InMemoryIterator();
- } else {
- return new MergingIterator();
- }
- }
-
- /**
- * Delete any temporary files. After this method is called, iterator() may not be called.
- */
- public void cleanup() {
- this.iterationStarted = true;
- this.cleanedUp = true;
-
- IOUtil.deleteFiles(this.files);
- }
-
- /**
- * Syntactic sugar around the ctor, to save some typing of type parameters
- *
- * @param componentType Class of the record to be sorted. Necessary because of Java generic lameness.
- * @param codec For writing records to file and reading them back into RAM
- * @param comparator Defines output sort order
- * @param maxRecordsInRAM how many records to accumulate in memory before spilling to disk
- * @param tmpDir Where to write files of records that will not fit in RAM
- */
- public static <T> SortingCollection<T> newInstance(final Class<T> componentType,
- final SortingCollection.Codec<T> codec,
- final Comparator<T> comparator,
- final int maxRecordsInRAM,
- final File... tmpDir) {
- return new SortingCollection<T>(componentType, codec, comparator, maxRecordsInRAM, tmpDir);
-
- }
-
- /**
- * Syntactic sugar around the ctor, to save some typing of type parameters
- *
- * @param componentType Class of the record to be sorted. Necessary because of Java generic lameness.
- * @param codec For writing records to file and reading them back into RAM
- * @param comparator Defines output sort order
- * @param maxRecordsInRAM how many records to accumulate in memory before spilling to disk
- * @param tmpDirs Where to write files of records that will not fit in RAM
- */
- public static <T> SortingCollection<T> newInstance(final Class<T> componentType,
- final SortingCollection.Codec<T> codec,
- final Comparator<T> comparator,
- final int maxRecordsInRAM,
- final Collection<File> tmpDirs) {
- return new SortingCollection<T>(componentType,
- codec,
- comparator,
- maxRecordsInRAM,
- tmpDirs.toArray(new File[tmpDirs.size()]));
-
- }
-
-
- /**
- * Syntactic sugar around the ctor, to save some typing of type parameters. Writes files to java.io.tmpdir
- *
- * @param componentType Class of the record to be sorted. Necessary because of Java generic lameness.
- * @param codec For writing records to file and reading them back into RAM
- * @param comparator Defines output sort order
- * @param maxRecordsInRAM how many records to accumulate in memory before spilling to disk
- */
- public static <T> SortingCollection<T> newInstance(final Class<T> componentType,
- final SortingCollection.Codec<T> codec,
- final Comparator<T> comparator,
- final int maxRecordsInRAM) {
-
- final File tmpDir = new File(System.getProperty("java.io.tmpdir"));
- return new SortingCollection<T>(componentType, codec, comparator, maxRecordsInRAM, tmpDir);
- }
-
- /**
- * For iteration when number of records added is less than the threshold for spilling to disk.
- */
- class InMemoryIterator implements CloseableIterator<T> {
- private int iterationIndex = 0;
-
- InMemoryIterator() {
- Arrays.sort(SortingCollection.this.ramRecords,
- 0,
- SortingCollection.this.numRecordsInRam,
- SortingCollection.this.comparator);
- }
-
- public void close() {
- // nothing to do
- }
-
- public boolean hasNext() {
- return this.iterationIndex < SortingCollection.this.numRecordsInRam;
- }
-
- public T next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- T ret = SortingCollection.this.ramRecords[iterationIndex];
- if (destructiveIteration) SortingCollection.this.ramRecords[iterationIndex] = null;
- ++iterationIndex;
- return ret;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-
- /**
- * For iteration when spilling to disk has occurred.
- * Each file is has records in sort order within the file.
- * This iterator automatically closes when it iterates to the end, but if not iterating
- * to the end it is a good idea to call close().
- *
- * Algorithm: MergingIterator maintains a PriorityQueue of PeekFileRecordIterators.
- * Each PeekFileRecordIterator iterates through a file in which the records are sorted.
- * The comparator for PeekFileRecordIterator used by the PriorityQueue peeks at the next record from
- * the file, so the first element in the PriorityQueue is the file that has the next record to be emitted.
- * In order to get the next record, the first PeekFileRecordIterator in the PriorityQueue is popped,
- * the record is obtained from that iterator, and then if that iterator is not empty, it is pushed back into
- * the PriorityQueue. Because it now has a different record as its next element, it may go into another
- * location in the PriorityQueue
- */
- class MergingIterator implements CloseableIterator<T> {
- private final PollableTreeSet<PeekFileRecordIterator> queue;
-
- MergingIterator() {
- this.queue = new PollableTreeSet<PeekFileRecordIterator>(new PeekFileRecordIteratorComparator());
- int n = 0;
- for (final File f : SortingCollection.this.files) {
- final FileRecordIterator it = new FileRecordIterator(f);
- if (it.hasNext()) {
- this.queue.add(new PeekFileRecordIterator(it, n++));
- }
- else {
- it.close();
- }
- }
- }
-
- public boolean hasNext() {
- return !this.queue.isEmpty();
- }
-
- public T next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
-
- final PeekFileRecordIterator fileIterator = queue.poll();
- final T ret = fileIterator.next();
- if (fileIterator.hasNext()) {
- this.queue.add(fileIterator);
- }
- else {
- ((CloseableIterator<T>)fileIterator.getUnderlyingIterator()).close();
- }
-
- return ret;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- public void close() {
- while (!this.queue.isEmpty()) {
- final PeekFileRecordIterator it = this.queue.poll();
- ((CloseableIterator<T>)it.getUnderlyingIterator()).close();
- }
- }
- }
-
- /**
- * Read a file of records in format defined by the codec
- */
- class FileRecordIterator implements CloseableIterator<T> {
- private final File file;
- private final FileInputStream is;
- private final Codec<T> codec;
- private T currentRecord = null;
-
- FileRecordIterator(final File file) {
- this.file = file;
- try {
- this.is = new FileInputStream(file);
- this.codec = SortingCollection.this.codec.clone();
- this.codec.setInputStream(tempStreamFactory.wrapTempInputStream(this.is, Defaults.BUFFER_SIZE));
- advance();
- }
- catch (FileNotFoundException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- public boolean hasNext() {
- return this.currentRecord != null;
- }
-
- public T next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- final T ret = this.currentRecord;
- advance();
- return ret;
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
-
- private void advance() {
- this.currentRecord = this.codec.decode();
- }
-
- public void close() {
- CloserUtil.close(this.is);
- }
- }
-
-
- /**
- * Just a typedef
- */
- class PeekFileRecordIterator extends PeekIterator<T> {
- final int n; // A serial number used for tie-breaking in the sort
- PeekFileRecordIterator(final Iterator<T> underlyingIterator, final int n) {
- super(underlyingIterator);
- this.n = n;
- }
- }
-
- class PeekFileRecordIteratorComparator implements Comparator<PeekFileRecordIterator> {
-
- public int compare(final PeekFileRecordIterator lhs, final PeekFileRecordIterator rhs) {
- final int result = comparator.compare(lhs.peek(), rhs.peek());
- if (result == 0) return lhs.n - rhs.n;
- else return result;
- }
- }
-
- /** Little class that provides the Java 1.5 TreeSet with a poll() method */
- static class PollableTreeSet<T> extends TreeSet<T> {
- PollableTreeSet(final Comparator<? super T> comparator) {
- super(comparator);
- }
-
- public T poll() {
- if (isEmpty()) {
- return null;
- }
- else {
- final T t = first();
- remove(t);
- return t;
- }
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/SortingLongCollection.java b/src/java/net/sf/samtools/util/SortingLongCollection.java
deleted file mode 100644
index 932f969..0000000
--- a/src/java/net/sf/samtools/util/SortingLongCollection.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.Defaults;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Accumulate a list of longs that can then be sorted in natural order and iterated over.
- * If there are more values accumulated than a specified maximum, values are spilled to disk.
- *
- * Note that because this class returns primitive longs rather than Longs, it does not conform to
- * any of the Collection iteration interfaces. Use as follows:
- *
- * 1. ctor
- * 2. call add() as many times as desired.
- * 3. call doneAddingStartIteration().
- * 4. call hasNext() and next() until exhausted or had enough.
- * 5. optionally call cleanup() to free space in temporary directory as soon as possible.
- *
- * If there are few enough values so that they all can be kept in RAM, then the array is sorted
- * and iterated over trivially.
- *
- * If there are more values that can fit in RAM, then values are sorted and written to a temp file when the max
- * number to be stored in RAM is reached. Multiple temp files are then merged during iteration via PriorityQueue.
- *
- * c.f. SortingCollection for more details.
- *
- * @author alecw at broadinstitute.org
- */
-public class SortingLongCollection {
- public static final int SIZEOF = 8;
- public static final int MAX_ITEMS_IN_RAM = (int)Math.floor((Integer.MAX_VALUE/8)*.999);
-
- /**
- * Where files of sorted values go.
- */
- private final File[] tmpDir;
-
- private final int maxValuesInRam;
- private int numValuesInRam = 0;
- private long[] ramValues;
-
-
- /**
- * Set to true when done adding and ready to iterate
- */
- private boolean doneAdding = false;
-
- /**
- * Set to true when all temp files have been cleaned up
- */
- private boolean cleanedUp = false;
-
- /**
- * List of files in tmpDir containing sorted values
- */
- private final List<File> files = new ArrayList<File>();
-
- // for in-memory iteration
- private int iterationIndex = 0;
-
- // For disk-based iteration
- private PriorityQueue<PeekFileValueIterator> priorityQueue;
-
- /**
- * Prepare to accumulate values to be sorted
- * @param maxValuesInRam how many values to accumulate before spilling to disk
- * @param tmpDir Where to write files of values that will not fit in RAM
- */
- public SortingLongCollection(final int maxValuesInRam, final File... tmpDir) {
- if (maxValuesInRam <= 0) {
- throw new IllegalArgumentException("maxValuesInRam must be > 0");
- }
- this.tmpDir = tmpDir;
- this.maxValuesInRam = Math.min(maxValuesInRam, MAX_ITEMS_IN_RAM);
- this.ramValues = new long[maxValuesInRam];
- }
-
- /**
- * Add a value to the collection.
- * @param value
- */
- public void add(final long value) {
- if (doneAdding) {
- throw new IllegalStateException("Cannot add after calling doneAddingStartIteration()");
- }
- if (numValuesInRam == maxValuesInRam) {
- spillToDisk();
- }
- ramValues[numValuesInRam++] = value;
- }
-
- /**
- * This method must be called after done adding, and before calling hasNext() or next().
- */
- public void doneAddingStartIteration() {
- if (cleanedUp || doneAdding) {
- throw new IllegalStateException("Cannot call doneAddingStartIteration() after cleanup() was called.");
- }
- doneAdding = true;
-
- if (this.files.isEmpty()) {
- Arrays.sort(this.ramValues, 0, this.numValuesInRam);
- return;
- }
-
- if (this.numValuesInRam > 0) {
- spillToDisk();
- }
-
- this.priorityQueue = new PriorityQueue<PeekFileValueIterator>(files.size(),
- new PeekFileValueIteratorComparator());
- for (final File f : files) {
- final FileValueIterator it = new FileValueIterator(f);
- if (it.hasNext()) {
- this.priorityQueue.offer(new PeekFileValueIterator(it));
- }
- }
-
- // Facilitate GC
- this.ramValues = null;
- }
-
- /**
- * Sort the values in memory, write them to a file, and clear the buffer of values in memory.
- */
- private void spillToDisk() {
-
- try {
- Arrays.sort(this.ramValues, 0, this.numValuesInRam);
- final File f = IOUtil.newTempFile("sortingcollection.", ".tmp", this.tmpDir, IOUtil.FIVE_GBS);
- DataOutputStream os = null;
- try {
- final long numBytes = this.numValuesInRam * SIZEOF;
- os = new DataOutputStream(IOUtil.maybeBufferOutputStream(new FileOutputStream(f)));
- f.deleteOnExit();
- for (int i = 0; i < this.numValuesInRam; ++i) {
- os.writeLong(ramValues[i]);
- }
- os.flush();
- }
- finally {
- if (os != null) {
- os.close();
- }
- }
-
- this.numValuesInRam = 0;
- this.files.add(f);
-
- }
- catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * Delete any temporary files. After this method is called, no other method calls should be made on this object.
- */
- public void cleanup() {
- this.doneAdding = true;
- this.cleanedUp = true;
- this.ramValues = null;
-
- IOUtil.deleteFiles(this.files);
- }
-
-
- /**
- * Call only after doneAddingStartIteration() has been called.
- *
- * @return true if there is another value to be gotten.
- */
- public boolean hasNext() {
- if (!doneAdding || cleanedUp) {
- throw new IllegalStateException();
- }
- if (this.ramValues != null) {
- // in-memory iteration
- return this.iterationIndex < numValuesInRam;
- } else {
- return !priorityQueue.isEmpty();
- }
- }
-
- /**
- * Call only if hasNext() == true.
- * @return next value from collection, in natural sort order.
- */
- public long next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- if (this.ramValues != null) {
- // in-memory iteration
- return ramValues[iterationIndex++];
- } else {
-
- final PeekFileValueIterator fileIterator = priorityQueue.poll();
- final long ret = fileIterator.next();
- if (fileIterator.hasNext()) {
- this.priorityQueue.offer(fileIterator);
- } else {
- fileIterator.close();
- }
- return ret;
- }
- }
-
- /**
- * Read a file of longs
- */
- private static class FileValueIterator {
- private final File file;
- private final DataInputStream is;
- private long currentRecord = 0;
- private boolean isCurrentRecord = true;
-
- FileValueIterator(final File file) {
- this.file = file;
- try {
- is = new DataInputStream(IOUtil.maybeBufferInputStream(new FileInputStream(file)));
- next();
- }
- catch (FileNotFoundException e) {
- throw new RuntimeIOException(file.getAbsolutePath(), e);
- }
- }
-
- boolean hasNext() {
- return isCurrentRecord;
- }
-
- long next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- final long ret = currentRecord;
- try {
- currentRecord = is.readLong();
- } catch (EOFException eof) {
- isCurrentRecord = false;
- currentRecord = 0;
- } catch(IOException e) {
- throw new RuntimeException(e);
- }
- return ret;
- }
-
- void close() {
- CloserUtil.close(is);
- IOUtil.deleteFiles(file);
- }
- }
-
-
- /**
- * Add peek() functionality to FileValueIterator
- */
- private static class PeekFileValueIterator {
- private FileValueIterator underlyingIterator;
- private long peekValue;
- private boolean hasPeekedValue = false;
-
- PeekFileValueIterator(final FileValueIterator underlyingIterator) {
- this.underlyingIterator = underlyingIterator;
- }
-
- boolean hasNext() {
- return hasPeekedValue || underlyingIterator.hasNext();
- }
-
- long next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- if (hasPeekedValue) {
- hasPeekedValue = false;
- return peekValue;
- }
- return underlyingIterator.next();
- }
-
- long peek() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- if (!hasPeekedValue) {
- peekValue = underlyingIterator.next();
- hasPeekedValue = true;
- }
- return peekValue;
- }
-
- void close() {
- underlyingIterator.close();
- hasPeekedValue = false;
- underlyingIterator = null;
- }
- }
-
- private static class PeekFileValueIteratorComparator implements Comparator<PeekFileValueIterator> {
-
- public int compare(final PeekFileValueIterator it1, final PeekFileValueIterator it2) {
- if (it1.peek() < it2.peek()) {
- return -1;
- }
- if (it1.peek() == it2.peek()) {
- return 0;
- }
- return 1;
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/StopWatch.java b/src/java/net/sf/samtools/util/StopWatch.java
deleted file mode 100644
index 603aba7..0000000
--- a/src/java/net/sf/samtools/util/StopWatch.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-/**
- * Utility to help in performance testing.
- */
-public class StopWatch {
-
- private long startTime = 0;
- private long elapsedTime = 0;
- private boolean running = false;
-
-
- public void start() {
- this.startTime = System.currentTimeMillis();
- this.running = true;
- }
-
-
- public void stop() {
- long stopTime = System.currentTimeMillis();
- elapsedTime += stopTime - startTime;
- this.running = false;
- }
-
- public void reset() {
- stop();
- elapsedTime = 0;
- startTime = 0;
- }
-
- /**
- * Returns the cumulative time between all the start() and stop() calls made to this object. If the
- * StopWatch is currently running, also includes the time between the most recent start() and now.
- * @return elapsedTime in milliseconds
- */
- public long getElapsedTime() {
- final long currentElapsed;
- if (running) {
- currentElapsed = (System.currentTimeMillis() - startTime);
- } else {
- currentElapsed = 0;
- }
- return currentElapsed + elapsedTime;
- }
-
-
- /**
- * @return same as getElapsedTime(), but truncated to seconds.
- */
- public long getElapsedTimeSecs() {
- return getElapsedTime() / 1000;
- }
-}
diff --git a/src/java/net/sf/samtools/util/StringLineReader.java b/src/java/net/sf/samtools/util/StringLineReader.java
deleted file mode 100644
index a7e240c..0000000
--- a/src/java/net/sf/samtools/util/StringLineReader.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import java.util.regex.Pattern;
-
-/**
- * Implementation of LineReader that gets its input from a String. No charset conversion
- * is necessary because the String is in unicode. Handles CR, LF or CRLF line termination,
- * but if asked to return the line terminator, it always comes back as LF.
- */
-public class StringLineReader implements LineReader {
- private static final Pattern CRLF = Pattern.compile("\r\n");
- private final String theString;
- private int curPos = 0;
- private int lineNumber = 0;
-
- public StringLineReader(final String s) {
- // Simplify later processing by replacing crlf with just lf, and replacing solo cr with lf.
- // Note that String.replace(String, String) causes a regex to be used, so precompilation should be
- // the best we can do short of handling the string directly.
- this.theString = CRLF.matcher(s).replaceAll("\n").replace('\r', '\n');
- }
-
- /**
- * Read a line and remove the line terminator
- */
- public String readLine() {
- return readLine(false);
- }
-
- /**
- * Read a line and optionally include the line terminator
- *
- * @param includeTerminators
- * @return the next line from the input, with \n terminator if present and requested, or null if no more input.
- */
- private String readLine(final boolean includeTerminators) {
- if (curPos == theString.length()) {
- return null;
- }
- final int nextLfIndex = theString.indexOf('\n', curPos);
- if (nextLfIndex == -1) {
- final int startPos = curPos;
- curPos = theString.length();
- ++lineNumber;
- return theString.substring(startPos);
- }
- final int startPos = curPos;
- final int endPos = nextLfIndex + (includeTerminators? 1: 0);
- curPos = nextLfIndex + 1;
- ++lineNumber;
- return theString.substring(startPos, endPos);
- }
-
- /**
- * @return 1-based number of line most recently read
- */
- public int getLineNumber() {
- return lineNumber;
- }
-
- /**
- * Non-destructive one-character look-ahead.
- *
- * @return If not eof, the next character that would be read. If eof, -1.
- */
- public int peek() {
- if (curPos == theString.length()) {
- return -1;
- }
- return theString.charAt(curPos);
- }
-
- public void close() {
- curPos = theString.length();
- }
-}
diff --git a/src/java/net/sf/samtools/util/StringUtil.java b/src/java/net/sf/samtools/util/StringUtil.java
deleted file mode 100644
index eee2161..0000000
--- a/src/java/net/sf/samtools/util/StringUtil.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools.util;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Arrays;
-
-/**
- * Grab-bag of stateless String-oriented utilities.
- */
-public class StringUtil {
- private static final byte UPPER_CASE_OFFSET = 'A' - 'a';
-
- /**
- * @param separator String to interject between each string in strings arg
- * @param objs List of objs to be joined
- * @return String that concatenates the result of each item's to String method for all items in objs, with separator between each of them.
- */
- public static <T> String join(final String separator, final Collection<T> objs) {
- if (objs.size() == 0) {
- return "";
- }
-
- boolean notFirst = false;
-
- final StringBuilder ret = new StringBuilder();
- for (final Object obj : objs) {
- if(notFirst) {
- ret.append(separator);
- }
- ret.append(obj.toString());
- notFirst = true;
- }
- return ret.toString();
- }
-
- public static <T> String join(final String separator, final T... objs) {
- final List<T> values = Arrays.asList(objs);
- return join(separator, values);
- }
-
-
- /**
- * Split the string into tokens separated by the given delimiter. Profiling has
- * revealed that the standard string.split() method typically takes > 1/2
- * the total time when used for parsing ascii files.
- * Note that if tokens arg is not large enough to all the tokens in the string, excess tokens are discarded.
- *
- * @param aString the string to split
- * @param tokens an array to hold the parsed tokens
- * @param delim character that delimits tokens
- * @return the number of tokens parsed
- */
- public static int split(final String aString, final String[] tokens, final char delim) {
-
- final int maxTokens = tokens.length;
- int nTokens = 0;
- int start = 0;
- int end = aString.indexOf(delim);
- if(end < 0) {
- tokens[nTokens++] = aString;
- return nTokens;
- }
- while ((end > 0) && (nTokens < maxTokens))
- {
- tokens[nTokens++] = aString.substring(start, end);
- start = end + 1;
- end = aString.indexOf(delim, start);
-
- }
- // Add the trailing string, if there is room and if it is not empty.
- if (nTokens < maxTokens)
- {
- final String trailingString = aString.substring(start);
- if (trailingString.length() > 0)
- {
- tokens[nTokens++] = trailingString;
- }
- }
- return nTokens;
- }
-
- /**
- * Split the string into tokens separated by the given delimiter. Profiling has
- * revealed that the standard string.split() method typically takes > 1/2
- * the total time when used for parsing ascii files.
- * Note that the string is split into no more elements than tokens arg will hold, so the final tokenized
- * element may contain delimiter chars.
- *
- * @param aString the string to split
- * @param tokens an array to hold the parsed tokens
- * @param delim character that delimits tokens
- * @return the number of tokens parsed
- */
- public static int splitConcatenateExcessTokens(final String aString, final String[] tokens, final char delim) {
-
- final int maxTokens = tokens.length;
- int nTokens = 0;
- int start = 0;
- int end = aString.indexOf(delim);
- if(end < 0) {
- tokens[nTokens++] = aString;
- return nTokens;
- }
- while ((end > 0) && (nTokens < maxTokens - 1))
- {
- tokens[nTokens++] = aString.substring(start, end);
- start = end + 1;
- end = aString.indexOf(delim, start);
-
- }
- // Add the trailing string, if it is not empty.
- final String trailingString = aString.substring(start);
- if (trailingString.length() > 0)
- {
- tokens[nTokens++] = trailingString;
- }
- return nTokens;
- }
-
- /**
- * @param b ASCII character
- * @return lowercase version of arg if it was uppercase, otherwise returns arg
- */
- public static byte toLowerCase(final byte b) {
- if (b < 'A' || b > 'Z') {
- return b;
- }
- return (byte)(b - UPPER_CASE_OFFSET);
- }
-
- /**
- * @param b ASCII character
- * @return uppercase version of arg if it was lowercase, otherwise returns arg
- */
- public static byte toUpperCase(final byte b) {
- if (b < 'a' || b > 'z') {
- return b;
- }
- return (byte)(b + UPPER_CASE_OFFSET);
- }
-
- /**
- * Converts in place all lower case letters to upper case in the byte array provided.
- */
- public static void toUpperCase(final byte[] bytes) {
- final int length = bytes.length;
- for (int i=0; i<length; ++i) {
- if (bytes[i] >= 'a' && bytes[i] <= 'z') {
- bytes[i] = (byte) (bytes[i] + UPPER_CASE_OFFSET);
- }
- }
- }
-
-
- /**
- * Checks that a String doesn't contain one or more characters of interest.
- *
- * @param illegalChars the String to check
- * @param chars the characters to check for
- * @return String the input String for convenience
- * @throws IllegalArgumentException if the String contains one or more of the characters
- */
- public static String assertCharactersNotInString(final String illegalChars, final char... chars) {
- for (final char illegalChar : illegalChars.toCharArray()) {
- for (final char ch: chars) {
- if (illegalChar == ch) {
- throw new IllegalArgumentException("Supplied String contains illegal character '" + illegalChar + "'.");
- }
- }
- }
-
- return illegalChars;
- }
-
- /**
- * Return input string with newlines inserted to ensure that all lines
- * have length <= maxLineLength. if a word is too long, it is simply broken
- * at maxLineLength. Does not handle tabs intelligently (due to implementer laziness).
- */
- public static String wordWrap(final String s, final int maxLineLength) {
- final String[] lines = s.split("\n");
- final StringBuilder sb = new StringBuilder();
- for (final String line: lines) {
- if (sb.length() > 0) {
- sb.append("\n");
- }
- sb.append(wordWrapSingleLine(line, maxLineLength));
- }
- if (s.endsWith("\n")) {
- sb.append("\n");
- }
- return sb.toString();
- }
-
- public static String wordWrapSingleLine(final String s, final int maxLineLength) {
- if (s.length() <= maxLineLength) {
- return s;
- }
- final StringBuilder sb = new StringBuilder();
- int startCopyFrom = 0;
- while (startCopyFrom < s.length()) {
- int lastSpaceIndex = startCopyFrom;
- int i;
- // Find break point (if it exists)
- for (i = startCopyFrom; i < s.length() && i - startCopyFrom < maxLineLength; ++i) {
- if (Character.isWhitespace(s.charAt(i))) {
- lastSpaceIndex = i;
- }
- }
- if (i - startCopyFrom < maxLineLength) {
- lastSpaceIndex = i;
- }
- // Include any trailing whitespace
- for (; lastSpaceIndex < s.length() && Character.isWhitespace(s.charAt(lastSpaceIndex)); ++lastSpaceIndex) {}
- if (sb.length() > 0) {
- sb.append("\n");
- }
- // Handle situation in which there is no word break. Just break the word in the middle.
- if (lastSpaceIndex == startCopyFrom) {
- lastSpaceIndex = i;
- }
- sb.append(s.substring(startCopyFrom, lastSpaceIndex));
- startCopyFrom = lastSpaceIndex;
- }
- return sb.toString();
- }
-
-
- public static String intValuesToString(final int[] intVals) {
- final StringBuilder sb = new StringBuilder(intVals.length);
- if(intVals.length > 0) {
- sb.append(String.valueOf(intVals[0]));
- for(int i = 1; i < intVals.length; i++) {
- sb.append(", ");
- sb.append(String.valueOf(intVals[i]));
- }
- }
-
- return sb.toString();
- }
-
- public static String intValuesToString(final short[] shortVals) {
- final StringBuilder sb = new StringBuilder(shortVals.length);
- if(shortVals.length > 0) {
- sb.append(String.valueOf(shortVals[0]));
- for(int i = 1; i < shortVals.length; i++) {
- sb.append(", ");
- sb.append(String.valueOf(shortVals[i]));
- }
- }
-
- return sb.toString();
- }
-
- ////////////////////////////////////////////////////////////////////
- // The following methods all convert btw bytes and Strings, without
- // using the Java character set mechanism.
- ////////////////////////////////////////////////////////////////////
-
- public static String bytesToString(final byte[] data) {
- if (data == null) {
- return null;
- }
- return bytesToString(data, 0, data.length);
- }
-
- @SuppressWarnings("deprecation")
- public static String bytesToString(final byte[] buffer, final int offset, final int length) {
-/*
- The non-deprecated way, that requires allocating char[]
- final char[] charBuffer = new char[length];
- for (int i = 0; i < length; ++i) {
- charBuffer[i] = (char)buffer[i+offset];
- }
- return new String(charBuffer);
-*/
- return new String(buffer, 0, offset, length);
- }
-
- @SuppressWarnings("deprecation")
- public static byte[] stringToBytes(final String s) {
-/*
- The non-deprecated way, that requires allocating char[]
- final byte[] byteBuffer = new byte[s.length()];
- final char[] charBuffer = s.toCharArray();
- for (int i = 0; i < charBuffer.length; ++i) {
- byteBuffer[i] = (byte)(charBuffer[i] & 0xff);
- }
- return byteBuffer;
-*/
- final byte[] byteBuffer = new byte[s.length()];
- s.getBytes(0, byteBuffer.length, byteBuffer, 0);
- return byteBuffer;
- }
-
- @SuppressWarnings("deprecation")
- public static byte[] stringToBytes(final String s, final int offset, final int length) {
- final byte[] byteBuffer = new byte[length];
- s.getBytes(offset, offset + length, byteBuffer, 0);
- return byteBuffer;
- }
-
- // This method might more appropriately live in BinaryCodec, but all the byte <=> char conversion
- // should be in the same place.
- public static String readNullTerminatedString(final BinaryCodec binaryCodec) {
- final StringBuilder ret = new StringBuilder();
- for (byte b = binaryCodec.readByte(); b != 0; b = binaryCodec.readByte()) {
- ret.append((char)(b & 0xff));
- }
- return ret.toString();
- }
-
- /**
- * Convert chars to bytes merely by casting
- * @param chars input chars
- * @param charOffset where to start converting from chars array
- * @param length how many chars to convert
- * @param bytes where to put the converted output
- * @param byteOffset where to start writing the converted output.
- */
- public static void charsToBytes(final char[] chars, final int charOffset, final int length,
- final byte[] bytes, final int byteOffset) {
- for (int i = 0; i < length; ++i) {
- bytes[byteOffset + i] = (byte)chars[charOffset + i];
- }
- }
-
- /**
- * Convert ASCII char to byte.
- */
- public static byte charToByte(final char c) {
- return (byte)c;
- }
-
- /**
- * Convert ASCII byte to ASCII char.
- */
- public static char byteToChar(final byte b) {
- return (char)(b & 0xff);
- }
-
- /**
- * Convert a byte array into a String hex representation.
- * @param data Input to be converted.
- * @return String twice as long as data.length with hex representation of data.
- */
- public static String bytesToHexString(final byte[] data) {
- final char[] chars = new char[2 * data.length];
- for (int i = 0; i < data.length; i++) {
- final byte b = data[i];
- chars[2*i] = toHexDigit((b >> 4) & 0xF);
- chars[2*i+1] = toHexDigit(b & 0xF);
- }
- return new String(chars);
- }
-
- /**
- * Convert a String containing hex characters into an array of bytes with the binary representation
- * of the hex string
- * @param s Hex string. Length must be even because each pair of hex chars is converted into a byte.
- * @return byte array with binary representation of hex string.
- * @throws NumberFormatException
- */
- public static byte[] hexStringToBytes(final String s) throws NumberFormatException {
- if (s.length() % 2 != 0) {
- throw new NumberFormatException("Hex representation of byte string does not have even number of hex chars: " + s);
- }
- final byte[] ret = new byte[s.length() / 2];
- for (int i = 0; i < ret.length; ++i) {
- ret[i] = (byte) ((fromHexDigit(s.charAt(i * 2)) << 4) | fromHexDigit(s.charAt(i * 2 + 1)));
- }
- return ret;
- }
-
- public static char toHexDigit(final int value) {
- return (char) ((value < 10) ? ('0' + value) : ('A' + value - 10));
- }
-
- public static int fromHexDigit(final char c) throws NumberFormatException {
- final int ret = Character.digit(c, 16);
- if (ret == -1) {
- throw new NumberFormatException("Not a valid hex digit: " + c);
- }
- return ret;
- }
-
- /**
- * Reverse the given string. Does not check for null.
- * @param s String to be reversed.
- * @return New string that is the reverse of the input string.
- */
- public static String reverseString(final String s) {
- final StringBuilder sb = new StringBuilder(s);
- sb.reverse();
- return sb.toString();
- }
-
- /**
- * <p>Checks if a String is whitespace, empty ("") or null.</p>
- *
- * <pre>
- * StringUtils.isBlank(null) = true
- * StringUtils.isBlank("") = true
- * StringUtils.isBlank(" ") = true
- * StringUtils.isBlank("sam") = false
- * StringUtils.isBlank(" sam ") = false
- * </pre>
- *
- * @param str the String to check, may be null
- * @return <code>true</code> if the String is null, empty or whitespace
- */
- public static boolean isBlank(String str) {
- int strLen;
- if (str == null || (strLen = str.length()) == 0) {
- return true;
- }
- for (int i = 0; i < strLen; i++) {
- if (!Character.isWhitespace(str.charAt(i)) ) {
- return false;
- }
- }
- return true;
- }
-
- /* <p>Generates a string of one character to a specified length</p>
- *
- * @param c the Character to repeat
- * @param repeatNumber the number of times to repeat the character
- * @return String with the character c repeated repeatNumber times
- */
- public static String repeatCharNTimes(char c, int repeatNumber) {
- char[] output = new char[repeatNumber];
- Arrays.fill(output, c);
- return String.valueOf(output);
- }
-
- /** Returns {@link Object#toString()} of the provided value if it isn't null; "" otherwise. */
- public static final String EMPTY_STRING = "";
- public static String asEmptyIfNull(final Object string) {
- return string == null ? EMPTY_STRING : string.toString();
- }
-}
diff --git a/src/java/net/sf/samtools/util/TempStreamFactory.java b/src/java/net/sf/samtools/util/TempStreamFactory.java
deleted file mode 100644
index 985ba11..0000000
--- a/src/java/net/sf/samtools/util/TempStreamFactory.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Factory class for wrapping input and output streams for temporary files. If available, Snappy is used to
- * compress output files. Therefore, if a temporary output file is written with an output stream obtained
- * from this class, it must be read by an input stream created by this class, otherwise a file written with
- * compression will not be read with decompression.
- */
-public class TempStreamFactory {
- private static SnappyLoader snappyLoader = null;
-
- private static synchronized SnappyLoader getSnappyLoader() {
- if (snappyLoader == null) snappyLoader = new SnappyLoader();
- return snappyLoader;
- }
-
- /**
- * Wrap the given InputStream in a SnappyInputStream if available.
- * @return If Snappy is available, a SnappyInputStream wrapping inputStream.
- * If not, and bufferSize > 0, a BufferedInputStream.
- * Otherwise inputStream is returned.
- */
- public InputStream wrapTempInputStream(final InputStream inputStream, final int bufferSize) {
- InputStream is = IOUtil.maybeBufferInputStream(inputStream, bufferSize);
- if (getSnappyLoader().SnappyAvailable) {
- try {
- return getSnappyLoader().wrapInputStream(is);
- } catch (Exception e) {
- throw new SAMException("Error creating SnappyInputStream", e);
- }
- } else {
- return is;
- }
- }
-
- /**
- * Wrap the given OutputStream in a SnappyOutputStream if available.
- * @return If Snappy is available, a SnappyOutputStream wrapping outputStream.
- * If not, and bufferSize > 0, a BufferedOutputStream.
- * Otherwise outputStream is returned.
- */
- public OutputStream wrapTempOutputStream(final OutputStream outputStream, final int bufferSize) {
- OutputStream os = outputStream;
- if (bufferSize > 0) os = new BufferedOutputStream(os, bufferSize);
- if (getSnappyLoader().SnappyAvailable) {
- try {
- os = getSnappyLoader().wrapOutputStream(os);
- } catch (Exception e) {
- throw new SAMException("Error creating SnappyOutputStream", e);
- }
- }
- return os;
- }
-}
diff --git a/src/java/net/sf/samtools/util/TestUtil.java b/src/java/net/sf/samtools/util/TestUtil.java
deleted file mode 100644
index d45d74b..0000000
--- a/src/java/net/sf/samtools/util/TestUtil.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.SAMException;
-
-import java.io.File;
-import java.io.IOException;
-
-public class TestUtil {
-
- public static File getTempDirectory(final String prefix, final String suffix) {
- final File tempDirectory;
- try {
- tempDirectory = File.createTempFile(prefix, suffix);
- } catch (IOException e) {
- throw new SAMException("Failed to create temporary file.", e);
- }
- if (!tempDirectory.delete())
- throw new SAMException("Failed to delete file: " + tempDirectory);
- if (!tempDirectory.mkdir())
- throw new SAMException("Failed to make directory: " + tempDirectory);
- tempDirectory.deleteOnExit();
- return tempDirectory;
- }
-
- /**
- * @deprecated Use properly spelled method.
- */
- public static File getTempDirecory(final String prefix, final String suffix) {
- return getTempDirectory(prefix, suffix);
- }
-
- /**
- * Little test utility to help tests that create multiple levels of subdirectories
- * clean up after themselves.
- *
- * @param directory The directory to be deleted (along with its subdirectories)
- */
- public static void recursiveDelete(final File directory) {
- for (final File f : directory.listFiles()) {
- if (f.isDirectory()) {
- recursiveDelete(f);
- }
- f.delete();
- }
- }
-}
diff --git a/src/java/net/sf/samtools/util/Tuple.java b/src/java/net/sf/samtools/util/Tuple.java
deleted file mode 100644
index 98ce0cd..0000000
--- a/src/java/net/sf/samtools/util/Tuple.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.sf.samtools.util;
-
-/**
- * A simple tuple class.
- *
- * @author mccowan
- */
-public class Tuple<A, B> {
- public final A a;
- public final B b;
-
- public Tuple(final A a, final B b) {
- this.a = a;
- this.b = b;
- }
-}
diff --git a/src/java/net/sf/samtools/util/ftp/FTPClient.java b/src/java/net/sf/samtools/util/ftp/FTPClient.java
deleted file mode 100644
index ad10668..0000000
--- a/src/java/net/sf/samtools/util/ftp/FTPClient.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTIES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package net.sf.samtools.util.ftp;
-
-import net.sf.samtools.SAMException;
-
-import java.io.*;
-import java.net.Socket;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-
-/**
- * @author jrobinso
- * @date Oct 30, 2010
- */
-public class FTPClient {
-
- private Socket commandSocket = null;
-
- public static int READ_TIMEOUT = 5 * 60 * 1000;
-
- /**
- * Stream to write commands.
- * NOTE -- a PrintStream is used no purpose (as opposed to PrintWriter). PrintWriter will not work!
- */
- private PrintStream commandStream = null;
- private BufferedReader responseReader = null;
- private InputStream dataStream;
- private String passiveHost;
- private int passivePort;
- long restPosition = -1;
- String host;
-
- /**
- * Connects to the given FTP host on the default port.
- */
- public FTPReply connect(String host) throws IOException {
- this.host = host;
- commandSocket = new Socket(host, 21);
- commandSocket.setSoTimeout(READ_TIMEOUT);
- commandStream = new PrintStream(commandSocket.getOutputStream());
- responseReader = new BufferedReader(new InputStreamReader(commandSocket.getInputStream()));
-
- FTPReply reply = new FTPReply(responseReader);
-
- if (!reply.isPositiveCompletion()) {
- disconnect();
- }
-
- return reply;
- }
-
-
- /**
- * Executes the given FTP command on our current connection, returning the
- * three digit response code from the server. This method only works for
- * commands that do not require an additional data port.
- */
- public FTPReply executeCommand(String command) throws IOException {
- commandStream.println(command);
- return new FTPReply(responseReader);
- }
-
-
- /**
- * Wrapper for the commands <code>user [username]</code> and <code>pass
- * [password]</code>.
- */
- public FTPReply login(String username, String password) throws IOException {
- FTPReply response = executeCommand("user " + username);
- if (!response.isPositiveIntermediate()) return response;
- response = executeCommand("pass " + password);
- return response;
- }
-
- public FTPReply quit() throws IOException {
- return executeCommand("QUIT");
- }
-
- public FTPReply binary() throws IOException {
- return executeCommand("TYPE I");
- }
-
-
- public FTPReply pasv() throws IOException {
-
- FTPReply reply = executeCommand("PASV");
-
- if (reply.getCode() == 226 || reply.getCode() == 426) {
- reply = getReply();
- }
-
- String response = reply.getReplyString();
-
-
- int code = reply.getCode();
-
- int opening = response.indexOf('(');
- int closing = response.indexOf(')', opening + 1);
- if (closing > 0) {
- String dataLink = response.substring(opening + 1, closing);
- StringTokenizer tokenizer = new StringTokenizer(dataLink, ",");
- try {
- passiveHost = tokenizer.nextToken() + "." + tokenizer.nextToken() + "."
- + tokenizer.nextToken() + "." + tokenizer.nextToken();
- passivePort = Integer.parseInt(tokenizer.nextToken()) * 256
- + Integer.parseInt(tokenizer.nextToken());
- } catch (NumberFormatException e) {
- throw new IOException("SimpleFTP received bad data link information: " + response);
- } catch (NoSuchElementException e){
- throw new IOException("SimpleFTP received bad data link information: " + response);
- }
- }
-
- if (reply.isPositiveCompletion()) {
- if (dataStream == null) {
- Socket dataSocket = new Socket(passiveHost, passivePort);
- dataSocket.setSoTimeout(READ_TIMEOUT);
- dataStream = new SocketInputStream(dataSocket, dataSocket.getInputStream());
- }
- }
- return reply;
- }
-
- public void setRestPosition(long position) {
- this.restPosition = position;
- }
-
- public FTPReply retr(String file) throws IOException {
-
- if (restPosition >= 0) {
- FTPReply restReply = executeCommand("REST " + restPosition);
- if (!restReply.isSuccess()) {
- return restReply;
- }
- }
-
- return executeCommand("RETR " + file);
- }
-
- public FTPReply getReply() throws IOException {
- return new FTPReply(responseReader);
- }
-
- /**
- * Return the size of the remote file
- *
- * @param file
- * @return
- * @throws IOException
- */
- public FTPReply size(String file) throws IOException {
-
- return executeCommand("SIZE " + file);
-
- }
-
-
- public InputStream getDataStream() throws IOException {
- return dataStream;
- }
-
- public void closeDataStream() throws IOException {
- // NOTE -- some ftp servers seem to need a pause before closing the data stream
- // if (dataStream != null) {
- // try {
- // //
- // Thread.sleep(3000);
- // } catch (InterruptedException e) {
- //
- // }
- dataStream.close();
- //}
- dataStream = null;
- }
-
-
- /**
- * Disconnects from the host to which we are currently connected.
- */
- public void disconnect() {
- try {
- //quit();
- if (commandStream != null) {
- commandStream.close();
- responseReader.close();
- commandSocket.close();
-
- if (dataStream != null) {
- dataStream.close();
- }
- }
- } catch (IOException e) {
- throw new SAMException("Error disconnecting", e);
- }
-
- commandStream = null;
- responseReader = null;
- commandSocket = null;
- }
-
- class SocketInputStream extends FilterInputStream {
-
- Socket socket;
-
- SocketInputStream(Socket socket, InputStream inputStream) {
- super(inputStream);
- this.socket = socket;
- }
-
- @Override
- public void close() throws IOException {
- super.close();
- socket.close();
- FTPClient.this.dataStream = null;
- }
- }
-
-}
diff --git a/src/java/net/sf/samtools/util/ftp/FTPReply.java b/src/java/net/sf/samtools/util/ftp/FTPReply.java
deleted file mode 100644
index 970ec99..0000000
--- a/src/java/net/sf/samtools/util/ftp/FTPReply.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package net.sf.samtools.util.ftp;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-
-/**
- * @author jrobinso
- * @date Oct 30, 2010
- */
-public class FTPReply {
-
- String reply;
- int code;
-
- public FTPReply(BufferedReader inputStream) throws IOException {
-
- String response = null;
- do {
- response = inputStream.readLine();
- } while (response != null &&
- !(Character.isDigit(response.charAt(0)) &&
- Character.isDigit(response.charAt(1)) &&
- Character.isDigit(response.charAt(2)) &&
- response.charAt(3) == ' '));
- if (response == null || response.length() < 3) {
- code = -1;
- } else {
- code = Integer.parseInt(response.substring(0, 3));
- reply = response.substring(3).trim();
-
- }
- }
-
- /**
- * Gets server reply code from the control port after an ftp command has
- * been executed. It knows the last line of the response because it begins
- * with a 3 digit number and a space, (a dash instead of a space would be a
- * continuation).
- */
-
- public int getCode() throws IOException {
- return code;
- }
-
-
- /**
- * Gets server reply string from the control port after an ftp command has
- * been executed. This consists only of the last line of the response,
- * and only the part after the response code.
- */
- public String getReplyString()
- throws IOException {
-
- return reply;
- }
-
-
- public boolean isSuccess() {
- return isPositiveCompletion() || isPositiveIntermediate();
- }
-
- /**
- * Determine if a reply code is a positive completion response. All
- * codes beginning with a 2 are positive completion responses.
- * The FTP server will send a positive completion response on the final
- * successful completion of a command.
- * <p/>
- *
- * @return True if a reply code is a postive completion response, false
- * if not.
- * *
- */
- public boolean isPositiveCompletion() {
- return (code >= 200 && code < 300);
- }
-
-
- /**
- * Determine if a reply code is a positive intermediate response. All
- * codes beginning with a 3 are positive intermediate responses.
- * The FTP server will send a positive intermediate response on the
- * successful completion of one part of a multi-part sequence of
- * commands. For example, after a successful USER command, a positive
- * intermediate response will be sent to indicate that the server is
- * ready for the PASS command.
- * <p/>
- *
- * @return True if a reply code is a postive intermediate response, false
- * if not.
- * *
- */
- public boolean isPositiveIntermediate() {
- return (code >= 300 && code < 400);
- }
-}
diff --git a/src/java/net/sf/samtools/util/ftp/FTPStream.java b/src/java/net/sf/samtools/util/ftp/FTPStream.java
deleted file mode 100644
index 34738b5..0000000
--- a/src/java/net/sf/samtools/util/ftp/FTPStream.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package net.sf.samtools.util.ftp;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-
-/**
- * A "non-seekable" ftp stream. This one doesn't support random access.
- *
- * It is assumed that the ftp client has been connected, put in passive mode,
- * set to binary, and otherwise prepped for reading before creating this stream.
- *
- * @author jrobinso
- * @date Oct 31, 2010
- */
-public class FTPStream extends FilterInputStream {
-
- FTPClient ftp;
-
- public FTPStream(FTPClient ftp) throws IOException {
- super(ftp.getDataStream());
- this.ftp = ftp;
- }
-
-
- @Override
- public int read(byte[] bytes, int i, int i1) throws IOException {
- return super.read(bytes, i, i1); //To change body of overridden methods use File | Settings | File Templates.
- }
-
- @Override
- public void close() throws IOException {
- super.close();
- ftp.disconnect();
- }
-}
diff --git a/src/java/net/sf/samtools/util/ftp/FTPUtils.java b/src/java/net/sf/samtools/util/ftp/FTPUtils.java
deleted file mode 100644
index 539f13d..0000000
--- a/src/java/net/sf/samtools/util/ftp/FTPUtils.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package net.sf.samtools.util.ftp;
-
-
-import net.sf.samtools.SAMException;
-import net.sf.samtools.seekablestream.UserPasswordInput;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * @author jrobinso
- * @date Aug 31, 2010
- */
-public class FTPUtils {
-
- static Map<String, String> userCredentials = new HashMap<String, String>();
-
- static int TIMEOUT = 10000;
-
- public static boolean resourceAvailable(URL url) {
- InputStream is = null;
- try {
- URLConnection conn = url.openConnection();
- conn.setConnectTimeout(TIMEOUT);
- conn.setReadTimeout(TIMEOUT);
- is = conn.getInputStream();
- return (is.read() >= 0);
-
- } catch (IOException e) {
- return false;
- }
- finally {
- if (is != null) {
- try {
- is.close();
- } catch (IOException e) {
- throw new SAMException("Error closing connection", e);
- }
- }
- }
- }
-
- public static long getContentLength(URL url) throws IOException {
- FTPClient ftp = null;
- try {
- ftp = FTPUtils.connect(url.getHost(), url.getUserInfo(), null);
- String sizeString = ftp.executeCommand("size " + url.getPath()).getReplyString();
- return Integer.parseInt(sizeString);
- } catch (Exception e) {
- return -1 ;
- }
- finally {
- if(ftp != null) {
- ftp.disconnect();
- }
- }
- }
-
-
- /**
- * Connect to an FTP server
- *
- * @param host
- * @param userInfo
- * @param userPasswordInput Dialog with which a user can enter credentials, if login fails
- * @return
- * @throws IOException
- */
- public static synchronized FTPClient connect(String host, String userInfo, UserPasswordInput userPasswordInput) throws IOException {
-
- FTPClient ftp = new FTPClient();
- FTPReply reply = ftp.connect(host);
- if (!reply.isSuccess()) {
- throw new RuntimeException("Could not connect to " + host);
- }
-
- String user = "anonymous";
- String password = "igv at broadinstitute.org";
-
- if (userInfo == null) {
- userInfo = userCredentials.get(host);
- }
- if (userInfo != null) {
- String[] tmp = userInfo.split(":");
- user = tmp[0];
- if (tmp.length > 1) {
- password = tmp[1];
- }
- }
-
- reply = ftp.login(user, password);
- if (!reply.isSuccess()) {
- if (userPasswordInput == null) {
- throw new RuntimeException("Login failure for host: " + host);
- }
- else {
- userPasswordInput.setHost(host);
- boolean success = false;
- while (!success) {
- if (userPasswordInput.showDialog()) {
- user = userPasswordInput.getUser();
- password = userPasswordInput.getPassword();
- reply = ftp.login(user, password);
- success = reply.isSuccess();
- } else {
- // canceled
- break;
- }
-
- }
- if (success) {
- userInfo = user + ":" + password;
- userCredentials.put(host, userInfo);
- } else {
- throw new RuntimeException("Login failure for host: " + host);
- }
- }
- }
-
- reply = ftp.binary();
- if (!(reply.isSuccess())) {
- throw new RuntimeException("Could not set binary mode on host: " + host);
- }
-
- return ftp;
-
- }
-
-}
-
diff --git a/src/java/net/sf/samtools/util/zip/DeflaterFactory.java b/src/java/net/sf/samtools/util/zip/DeflaterFactory.java
deleted file mode 100644
index 0c6af8c..0000000
--- a/src/java/net/sf/samtools/util/zip/DeflaterFactory.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util.zip;
-
-import net.sf.samtools.Defaults;
-import net.sf.samtools.SAMException;
-
-import java.lang.reflect.Constructor;
-import java.util.zip.Deflater;
-
-/**
- * Create zlib-based Deflater if JNI library and other require libraries are available, otherwise create standard
- * JDK Deflater.
- * Java 7 has its own Deflater implementation (libzip.so). This is almost as fast as a zlib-based Deflater, so in general
- * there isn't a compelling reason to use zlib. However, Intel has created a hardware-assisted zlib implementation
- * as part of their IPP (Integrated Performance Primitives) package that can run significantly faster on some Intel
- * hardware. We have seen compression times reduced by 13% to 33% depending on particular hardware, and hope that
- * newer Intel processors will be even better.
- *
- * Note that this class will no longer be necessary once Java 8 is required, because JDK 8 will use zlib instead
- * of libzip implementation.
- */
-public class DeflaterFactory {
-
- private static Constructor<IntelDeflater> intelDeflaterConstructor;
-
- static {
- try {
- if (Defaults.TRY_USE_INTEL_DEFLATER) {
- final Class<IntelDeflater> clazz = (Class<IntelDeflater>) Class.forName("net.sf.samtools.util.zip.IntelDeflater");
- intelDeflaterConstructor = clazz.getConstructor(Integer.TYPE, Boolean.TYPE);
- }
- } catch (ClassNotFoundException e) {
- intelDeflaterConstructor = null;
- } catch (NoSuchMethodException e) {
- intelDeflaterConstructor = null;
- } catch (UnsatisfiedLinkError e) {
- intelDeflaterConstructor = null;
- }
- }
-
- public static Deflater makeDeflater(final int compressionLevel, final boolean nowrap) {
- if (intelDeflaterConstructor != null) {
- try {
- return intelDeflaterConstructor.newInstance(compressionLevel, nowrap);
- } catch (Exception e) {
- throw new SAMException("Exception constructing IntelDeflater", e);
- }
- } else {
- return new Deflater(compressionLevel, nowrap);
- }
- }
-
- public static boolean usingIntelDeflater() {
- return intelDeflaterConstructor != null;
- }
-}
diff --git a/src/java/net/sf/samtools/util/zip/IntelDeflater.java b/src/java/net/sf/samtools/util/zip/IntelDeflater.java
deleted file mode 100644
index 1ce5de6..0000000
--- a/src/java/net/sf/samtools/util/zip/IntelDeflater.java
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package net.sf.samtools.util.zip;
-
-import net.sf.samtools.Defaults;
-
-import java.io.File;
-import java.net.URL;
-import java.util.zip.Deflater;
-
-/**
- * This is a copy of java.util.zip.Deflater from OpenJDK 7, with the following changes:
- * - package and class name changed
- * - static block to load libIntelDeflater library
- * - extends java.util.zip.Deflater so that IntelDeflater object can be used as regular Deflater object.
- * Note however that all methods of Deflater are overridden.
- *
- * The shared library is found via one of the following mechanisms:
- * 1. if samjdk.intel_deflater_so_path system property is set, this is assumed to be the path of libIntelDeflater.so
- * 2. If system property is not set, directory where the jarfile that this class came from lives is tried as location
- * of libIntelDeflater.so
- * 3. If either of the above fails to find the library, regular LD_LIBRARY_PATH is used to find the library.
- * 4. If that doesn't work, class fails to load and code falls back to regular Java Deflater class.
- *
- *
- * The rest of this document is copied verbatim from the original OpenJDK file.
- *
- * This class provides support for general purpose compression using the
- * popular ZLIB compression library. The ZLIB compression library was
- * initially developed as part of the PNG graphics standard and is not
- * protected by patents. It is fully described in the specifications at
- * the <a href="package-summary.html#package_description">java.util.zip
- * package description</a>.
- *
- * <p>The following code fragment demonstrates a trivial compression
- * and decompression of a string using <tt>IntelDeflater</tt> and
- * <tt>Inflater</tt>.
- *
- * <blockquote><pre>
- * try {
- * // Encode a String into bytes
- * String inputString = "blahblahblah";
- * byte[] input = inputString.getBytes("UTF-8");
- *
- * // Compress the bytes
- * byte[] output = new byte[100];
- * IntelDeflater compresser = new IntelDeflater();
- * compresser.setInput(input);
- * compresser.finish();
- * int compressedDataLength = compresser.deflate(output);
- * compresser.end();
- *
- * // Decompress the bytes
- * Inflater decompresser = new Inflater();
- * decompresser.setInput(output, 0, compressedDataLength);
- * byte[] result = new byte[100];
- * int resultLength = decompresser.inflate(result);
- * decompresser.end();
- *
- * // Decode the bytes into a String
- * String outputString = new String(result, 0, resultLength, "UTF-8");
- * } catch(java.io.UnsupportedEncodingException ex) {
- * // handle
- * } catch (java.util.zip.DataFormatException ex) {
- * // handle
- * }
- * </pre></blockquote>
- *
- * @see java.util.zip.Inflater
- * @author David Connelly
- */
-public
-class IntelDeflater extends Deflater {
-
- private final ZStreamRef zsRef;
- private byte[] buf = new byte[0];
- private int off, len;
- private int level, strategy;
- private boolean setParams;
- private boolean finish, finished;
-
- /**
- * Compression flush mode used to achieve best compression result.
- *
- * @see IntelDeflater#deflate(byte[], int, int, int)
- * @since 1.7
- */
- public static final int NO_FLUSH = 0;
-
- /**
- * Compression flush mode used to flush out all pending output; may
- * degrade compression for some compression algorithms.
- *
- * @see IntelDeflater#deflate(byte[], int, int, int)
- * @since 1.7
- */
- public static final int SYNC_FLUSH = 2;
-
- /**
- * Compression flush mode used to flush out all pending output and
- * reset the deflater. Using this mode too often can seriously degrade
- * compression.
- *
- * @see IntelDeflater#deflate(byte[], int, int, int)
- * @since 1.7
- */
- public static final int FULL_FLUSH = 3;
-
- static {
- try {
- final File sharedLibrary;
- if (Defaults.INTEL_DEFLATER_SHARED_LIBRARY_PATH != null) {
- // Load via path set by -Dsamjdk.intel_deflater_so_path=<path>
- sharedLibrary = new File(Defaults.INTEL_DEFLATER_SHARED_LIBRARY_PATH);
- } else {
- // Look in directory containing this class for the library
- URL jarUrl = IntelDeflater.class.getProtectionDomain().getCodeSource().getLocation();
- sharedLibrary = new File(new File(jarUrl.getPath()).getParentFile(), "libIntelDeflater.so");
- }
- System.load(sharedLibrary.getAbsolutePath());
- } catch (Throwable e) {
- // Possible exceptions:
- // System.load: UnsatisfiedLinkError
- // getProtectionDomain: SecurityException
- // NullPointerException due to getCodeSource returning null
-
- // Try to find via LD_LIBRARY_PATH
- System.loadLibrary("IntelDeflater");
- }
- initIDs();
- }
-
- /**
- * Creates a new compressor using the specified compression level.
- * If 'nowrap' is true then the ZLIB header and checksum fields will
- * not be used in order to support the compression format used in
- * both GZIP and PKZIP.
- * @param level the compression level (0-9)
- * @param nowrap if true then use GZIP compatible compression
- */
- public IntelDeflater(int level, boolean nowrap) {
- this.level = level;
- this.strategy = DEFAULT_STRATEGY;
- this.zsRef = new ZStreamRef(init(level, DEFAULT_STRATEGY, nowrap));
- }
-
- /**
- * Creates a new compressor using the specified compression level.
- * Compressed data will be generated in ZLIB format.
- * @param level the compression level (0-9)
- */
- public IntelDeflater(int level) {
- this(level, false);
- }
-
- /**
- * Creates a new compressor with the default compression level.
- * Compressed data will be generated in ZLIB format.
- */
- public IntelDeflater() {
- this(DEFAULT_COMPRESSION, false);
- }
-
- /**
- * Sets input data for compression. This should be called whenever
- * needsInput() returns true indicating that more input data is required.
- * @param b the input data bytes
- * @param off the start offset of the data
- * @param len the length of the data
- * @see IntelDeflater#needsInput
- */
- @Override
- public void setInput(byte[] b, int off, int len) {
- if (b== null) {
- throw new NullPointerException();
- }
- if (off < 0 || len < 0 || off > b.length - len) {
- throw new ArrayIndexOutOfBoundsException();
- }
- synchronized (zsRef) {
- this.buf = b;
- this.off = off;
- this.len = len;
- }
- }
-
- /**
- * Sets input data for compression. This should be called whenever
- * needsInput() returns true indicating that more input data is required.
- * @param b the input data bytes
- * @see IntelDeflater#needsInput
- */
- @Override
- public void setInput(byte[] b) {
- setInput(b, 0, b.length);
- }
-
- /**
- * Sets preset dictionary for compression. A preset dictionary is used
- * when the history buffer can be predetermined. When the data is later
- * uncompressed with Inflater.inflate(), Inflater.getAdler() can be called
- * in order to get the Adler-32 value of the dictionary required for
- * decompression.
- * @param b the dictionary data bytes
- * @param off the start offset of the data
- * @param len the length of the data
- * @see java.util.zip.Inflater#inflate
- * @see java.util.zip.Inflater#getAdler
- */
- @Override
- public void setDictionary(byte[] b, int off, int len) {
- if (b == null) {
- throw new NullPointerException();
- }
- if (off < 0 || len < 0 || off > b.length - len) {
- throw new ArrayIndexOutOfBoundsException();
- }
- synchronized (zsRef) {
- ensureOpen();
- setDictionary(zsRef.address(), b, off, len);
- }
- }
-
- /**
- * Sets preset dictionary for compression. A preset dictionary is used
- * when the history buffer can be predetermined. When the data is later
- * uncompressed with Inflater.inflate(), Inflater.getAdler() can be called
- * in order to get the Adler-32 value of the dictionary required for
- * decompression.
- * @param b the dictionary data bytes
- * @see java.util.zip.Inflater#inflate
- * @see java.util.zip.Inflater#getAdler
- */
- @Override
- public void setDictionary(byte[] b) {
- setDictionary(b, 0, b.length);
- }
-
- /**
- * Sets the compression strategy to the specified value.
- * @param strategy the new compression strategy
- * @exception IllegalArgumentException if the compression strategy is
- * invalid
- */
- @Override
- public void setStrategy(int strategy) {
- switch (strategy) {
- case DEFAULT_STRATEGY:
- case FILTERED:
- case HUFFMAN_ONLY:
- break;
- default:
- throw new IllegalArgumentException();
- }
- synchronized (zsRef) {
- if (this.strategy != strategy) {
- this.strategy = strategy;
- setParams = true;
- }
- }
- }
-
- /**
- * Sets the current compression level to the specified value.
- * @param level the new compression level (0-9)
- * @exception IllegalArgumentException if the compression level is invalid
- */
- @Override
- public void setLevel(int level) {
- if ((level < 0 || level > 9) && level != DEFAULT_COMPRESSION) {
- throw new IllegalArgumentException("invalid compression level");
- }
- synchronized (zsRef) {
- if (this.level != level) {
- this.level = level;
- setParams = true;
- }
- }
- }
-
- /**
- * Returns true if the input data buffer is empty and setInput()
- * should be called in order to provide more input.
- * @return true if the input data buffer is empty and setInput()
- * should be called in order to provide more input
- */
- @Override
- public boolean needsInput() {
- return len <= 0;
- }
-
- /**
- * When called, indicates that compression should end with the current
- * contents of the input buffer.
- */
- @Override
- public void finish() {
- synchronized (zsRef) {
- finish = true;
- }
- }
-
- /**
- * Returns true if the end of the compressed data output stream has
- * been reached.
- * @return true if the end of the compressed data output stream has
- * been reached
- */
- @Override
- public boolean finished() {
- synchronized (zsRef) {
- return finished;
- }
- }
-
- /**
- * Compresses the input data and fills specified buffer with compressed
- * data. Returns actual number of bytes of compressed data. A return value
- * of 0 indicates that {@link #needsInput() needsInput} should be called
- * in order to determine if more input data is required.
- *
- * <p>This method uses {@link #NO_FLUSH} as its compression flush mode.
- * An invocation of this method of the form {@code deflater.deflate(b, off, len)}
- * yields the same result as the invocation of
- * {@code deflater.deflate(b, off, len, IntelDeflater.NO_FLUSH)}.
- *
- * @param b the buffer for the compressed data
- * @param off the start offset of the data
- * @param len the maximum number of bytes of compressed data
- * @return the actual number of bytes of compressed data written to the
- * output buffer
- */
- @Override
- public int deflate(byte[] b, int off, int len) {
- return deflate(b, off, len, NO_FLUSH);
- }
-
- /**
- * Compresses the input data and fills specified buffer with compressed
- * data. Returns actual number of bytes of compressed data. A return value
- * of 0 indicates that {@link #needsInput() needsInput} should be called
- * in order to determine if more input data is required.
- *
- * <p>This method uses {@link #NO_FLUSH} as its compression flush mode.
- * An invocation of this method of the form {@code deflater.deflate(b)}
- * yields the same result as the invocation of
- * {@code deflater.deflate(b, 0, b.length, IntelDeflater.NO_FLUSH)}.
- *
- * @param b the buffer for the compressed data
- * @return the actual number of bytes of compressed data written to the
- * output buffer
- */
- @Override
- public int deflate(byte[] b) {
- return deflate(b, 0, b.length, NO_FLUSH);
- }
-
- /**
- * Compresses the input data and fills the specified buffer with compressed
- * data. Returns actual number of bytes of data compressed.
- *
- * <p>Compression flush mode is one of the following three modes:
- *
- * <ul>
- * <li>{@link #NO_FLUSH}: allows the deflater to decide how much data
- * to accumulate, before producing output, in order to achieve the best
- * compression (should be used in normal use scenario). A return value
- * of 0 in this flush mode indicates that {@link #needsInput()} should
- * be called in order to determine if more input data is required.
- *
- * <li>{@link #SYNC_FLUSH}: all pending output in the deflater is flushed,
- * to the specified output buffer, so that an inflater that works on
- * compressed data can get all input data available so far (In particular
- * the {@link #needsInput()} returns {@code true} after this invocation
- * if enough output space is provided). Flushing with {@link #SYNC_FLUSH}
- * may degrade compression for some compression algorithms and so it
- * should be used only when necessary.
- *
- * <li>{@link #FULL_FLUSH}: all pending output is flushed out as with
- * {@link #SYNC_FLUSH}. The compression state is reset so that the inflater
- * that works on the compressed output data can restart from this point
- * if previous compressed data has been damaged or if random access is
- * desired. Using {@link #FULL_FLUSH} too often can seriously degrade
- * compression.
- * </ul>
- *
- * <p>In the case of {@link #FULL_FLUSH} or {@link #SYNC_FLUSH}, if
- * the return value is {@code len}, the space available in output
- * buffer {@code b}, this method should be invoked again with the same
- * {@code flush} parameter and more output space.
- *
- * @param b the buffer for the compressed data
- * @param off the start offset of the data
- * @param len the maximum number of bytes of compressed data
- * @param flush the compression flush mode
- * @return the actual number of bytes of compressed data written to
- * the output buffer
- *
- * @throws IllegalArgumentException if the flush mode is invalid
- * @since 1.7
- */
- public int deflate(byte[] b, int off, int len, int flush) {
- //System.out.println("Inside IntelDeflater\n");
- if (b == null) {
- throw new NullPointerException();
- }
- if (off < 0 || len < 0 || off > b.length - len) {
- throw new ArrayIndexOutOfBoundsException();
- }
- synchronized (zsRef) {
- ensureOpen();
- if (flush == NO_FLUSH || flush == SYNC_FLUSH ||
- flush == FULL_FLUSH)
- return deflateBytes(zsRef.address(), b, off, len, flush);
- throw new IllegalArgumentException();
- }
- }
-
- /**
- * Returns the ADLER-32 value of the uncompressed data.
- * @return the ADLER-32 value of the uncompressed data
- */
- @Override
- public int getAdler() {
- synchronized (zsRef) {
- ensureOpen();
- return getAdler(zsRef.address());
- }
- }
-
- /**
- * Returns the total number of uncompressed bytes input so far.
- *
- * <p>Since the number of bytes may be greater than
- * Integer.MAX_VALUE, the {@link #getBytesRead()} method is now
- * the preferred means of obtaining this information.</p>
- *
- * @return the total number of uncompressed bytes input so far
- */
- @Override
- public int getTotalIn() {
- return (int) getBytesRead();
- }
-
- /**
- * Returns the total number of uncompressed bytes input so far.</p>
- *
- * @return the total (non-negative) number of uncompressed bytes input so far
- * @since 1.5
- */
- @Override
- public long getBytesRead() {
- synchronized (zsRef) {
- ensureOpen();
- return getBytesRead(zsRef.address());
- }
- }
-
- /**
- * Returns the total number of compressed bytes output so far.
- *
- * <p>Since the number of bytes may be greater than
- * Integer.MAX_VALUE, the {@link #getBytesWritten()} method is now
- * the preferred means of obtaining this information.</p>
- *
- * @return the total number of compressed bytes output so far
- */
- @Override
- public int getTotalOut() {
- return (int) getBytesWritten();
- }
-
- /**
- * Returns the total number of compressed bytes output so far.</p>
- *
- * @return the total (non-negative) number of compressed bytes output so far
- * @since 1.5
- */
- @Override
- public long getBytesWritten() {
- synchronized (zsRef) {
- ensureOpen();
- return getBytesWritten(zsRef.address());
- }
- }
-
- /**
- * Resets deflater so that a new set of input data can be processed.
- * Keeps current compression level and strategy settings.
- */
- @Override
- public void reset() {
- synchronized (zsRef) {
- ensureOpen();
- reset(zsRef.address());
- finish = false;
- finished = false;
- off = len = 0;
- }
- }
-
- /**
- * Closes the compressor and discards any unprocessed input.
- * This method should be called when the compressor is no longer
- * being used, but will also be called automatically by the
- * finalize() method. Once this method is called, the behavior
- * of the IntelDeflater object is undefined.
- */
- @Override
- public void end() {
- synchronized (zsRef) {
- long addr = zsRef.address();
- zsRef.clear();
- if (addr != 0) {
- end(addr);
- buf = null;
- }
- }
- }
-
- /**
- * Closes the compressor when garbage is collected.
- */
- protected void finalize() {
- end();
- }
-
- private void ensureOpen() {
- assert Thread.holdsLock(zsRef);
- if (zsRef.address() == 0)
- throw new NullPointerException("IntelDeflater has been closed");
- }
-
- private static native void initIDs();
- private native static long init(int level, int strategy, boolean nowrap);
- private native static void setDictionary(long addr, byte[] b, int off, int len);
- private native int deflateBytes(long addr, byte[] b, int off, int len,
- int flush);
- private native static int getAdler(long addr);
- private native static long getBytesRead(long addr);
- private native static long getBytesWritten(long addr);
- private native static void reset(long addr);
- private native static void end(long addr);
-}
-
diff --git a/src/java/net/sf/samtools/util/zip/ZStreamRef.java b/src/java/net/sf/samtools/util/zip/ZStreamRef.java
deleted file mode 100644
index 5a49d8a..0000000
--- a/src/java/net/sf/samtools/util/zip/ZStreamRef.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package net.sf.samtools.util.zip;
-
-/**
- * Copied from OpenJDK 7. Only change is package name, because IntelDeflater needs this and
- * the original class is private to java.util.zip package.
- *
- * A reference to the native zlib's z_stream structure.
- */
-
-class ZStreamRef {
-
- private long address;
- ZStreamRef (long address) {
- this.address = address;
- }
-
- long address() {
- return address;
- }
-
- void clear() {
- address = 0;
- }
-}
diff --git a/src/java/org/broad/tribble/AbstractFeatureCodec.java b/src/java/org/broad/tribble/AbstractFeatureCodec.java
deleted file mode 100644
index cfc11d0..0000000
--- a/src/java/org/broad/tribble/AbstractFeatureCodec.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble;
-
-import java.io.IOException;
-
-/**
- * Simple basic class providing much of the basic functionality of codecs
- */
-public abstract class AbstractFeatureCodec<FEATURE_TYPE extends Feature, SOURCE> implements FeatureCodec<FEATURE_TYPE, SOURCE> {
- private final Class<FEATURE_TYPE> myClass;
-
- protected AbstractFeatureCodec(final Class<FEATURE_TYPE> myClass) {
- this.myClass = myClass;
- }
-
- @Override
- public Feature decodeLoc(final SOURCE source) throws IOException {
- return decode(source);
- }
-
- @Override
- public Class<FEATURE_TYPE> getFeatureType() {
- return myClass;
- }
-
- @Override
- public boolean canDecode(final String path) {
- return false;
- }
-
-}
diff --git a/src/java/org/broad/tribble/AbstractFeatureReader.java b/src/java/org/broad/tribble/AbstractFeatureReader.java
deleted file mode 100644
index 8dd9008..0000000
--- a/src/java/org/broad/tribble/AbstractFeatureReader.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble;
-
-import org.broad.tribble.index.Index;
-import org.broad.tribble.util.ParsingUtils;
-import org.broad.tribble.util.TabixUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * jrobinso
- * <p/>
- * the feature reader class, which uses indices and codecs to read in Tribble file formats.
- */
-public abstract class AbstractFeatureReader<T extends Feature, SOURCE> implements FeatureReader<T> {
- // the logging destination for this source
- //private final static Logger log = Logger.getLogger("BasicFeatureSource");
-
- // the path to underlying data source
- String path;
-
- // the query source, codec, and header
- // protected final QuerySource querySource;
- protected final FeatureCodec<T, SOURCE> codec;
- protected FeatureCodecHeader header;
-
- private static ComponentMethods methods = new ComponentMethods();
-
- public static final Set<String> BLOCK_COMPRESSED_EXTENSIONS = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(".gz", ".gzip", ".bgz", ".bgzf")));
-
- /**
- * Calls {@link #getFeatureReader(String, FeatureCodec, boolean)} with {@code requireIndex} = true
- */
- public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureFile, final FeatureCodec<FEATURE, SOURCE> codec) throws TribbleException {
- return getFeatureReader(featureFile, codec, true);
- }
-
- /**
- * {@link #getFeatureReader(String, String, FeatureCodec, boolean)} with {@code null} for indexResource
- * @throws TribbleException
- */
- public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureResource, final FeatureCodec<FEATURE, SOURCE> codec, final boolean requireIndex) throws TribbleException {
- return getFeatureReader(featureResource, null, codec, requireIndex);
- }
-
- /**
- *
- * @param featureResource the feature file to create from
- * @param indexResource the index for the feature file. If null, will auto-generate (if necessary)
- * @param codec
- * @param requireIndex whether an index is required for this file
- * @return
- * @throws TribbleException
- */
- public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureResource, String indexResource, final FeatureCodec<FEATURE, SOURCE> codec, final boolean requireIndex) throws TribbleException {
-
- try {
- // Test for tabix index
- if (methods.isTabix(featureResource, indexResource)) {
- if ( ! (codec instanceof AsciiFeatureCodec) )
- throw new TribbleException("Tabix indexed files only work with ASCII codecs, but received non-Ascii codec " + codec.getClass().getSimpleName());
- return new TabixFeatureReader<FEATURE, SOURCE>(featureResource, (AsciiFeatureCodec) codec);
- }
- // Not tabix => tribble index file (might be gzipped, but not block gzipped)
- else {
- return new TribbleIndexedFeatureReader<FEATURE, SOURCE>(featureResource, codec, requireIndex);
- }
- } catch (IOException e) {
- throw new TribbleException.MalformedFeatureFile("Unable to create BasicFeatureReader using feature file ", featureResource, e);
- } catch (TribbleException e) {
- e.setSource(featureResource);
- throw e;
- }
- }
-
- /**
- * Return a reader with a supplied index.
- *
- * @param featureResource the path to the source file containing the features
- * @param codec used to decode the features
- * @param index index of featureResource
- * @return a reader for this data
- * @throws TribbleException
- */
- public static <FEATURE extends Feature, SOURCE> AbstractFeatureReader<FEATURE, SOURCE> getFeatureReader(final String featureResource, final FeatureCodec<FEATURE, SOURCE> codec, final Index index) throws TribbleException {
- try {
- return new TribbleIndexedFeatureReader<FEATURE, SOURCE>(featureResource, codec, index);
- } catch (IOException e) {
- throw new TribbleException.MalformedFeatureFile("Unable to create AbstractFeatureReader using feature file ", featureResource, e);
- }
-
- }
-
- protected AbstractFeatureReader(final String path, final FeatureCodec<T, SOURCE> codec) {
- this.path = path;
- this.codec = codec;
- }
-
- /**
- * Whether the reader has an index or not
- * Default implementation returns false
- * @return
- */
- public boolean hasIndex(){
- return false;
- }
-
- public static void setComponentMethods(ComponentMethods methods){
- AbstractFeatureReader.methods = methods;
- }
-
- /**
- * Whether a filename ends in one of the BLOCK_COMPRESSED_EXTENSIONS
- * @param fileName
- * @return
- */
- public static boolean hasBlockCompressedExtension (final String fileName) {
- for (final String extension : BLOCK_COMPRESSED_EXTENSIONS) {
- if (fileName.toLowerCase().endsWith(extension))
- return true;
- }
- return false;
- }
-
- /**
- * Whether the name of a file ends in one of the BLOCK_COMPRESSED_EXTENSIONS
- * @param file
- * @return
- */
- public static boolean hasBlockCompressedExtension (final File file) {
- return hasBlockCompressedExtension(file.getName());
- }
-
- /**
- * get the header
- *
- * @return the header object we've read-in
- */
- public Object getHeader() {
- return header.getHeaderValue();
- }
-
- static class EmptyIterator<T extends Feature> implements CloseableTribbleIterator<T> {
- public Iterator iterator() { return this; }
- public boolean hasNext() { return false; }
- public T next() { return null; }
- public void remove() { }
- @Override public void close() { }
- }
-
- public static class ComponentMethods{
-
- public boolean isTabix(String resourcePath, String indexPath) throws IOException{
- if(indexPath == null){
- indexPath = ParsingUtils.appendToPath(resourcePath, TabixUtils.STANDARD_INDEX_EXTENSION);
- }
- return hasBlockCompressedExtension(resourcePath) && ParsingUtils.resourceExists(indexPath);
- }
- }
-}
diff --git a/src/java/org/broad/tribble/AsciiFeatureCodec.java b/src/java/org/broad/tribble/AsciiFeatureCodec.java
deleted file mode 100644
index 225938f..0000000
--- a/src/java/org/broad/tribble/AsciiFeatureCodec.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble;
-
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.LocationAware;
-import org.broad.tribble.readers.*;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A convenience base class for codecs that want to read in features from ASCII lines.
- * <p/>
- * This class overrides the general decode locs for streams and presents instead
- * Strings to decode(String) and readHeader(LineReader) functions.
- *
- * @param <T> The feature type this codec reads
- */
-public abstract class AsciiFeatureCodec<T extends Feature> extends AbstractFeatureCodec<T, LineIterator> {
- protected AsciiFeatureCodec(final Class<T> myClass) {
- super(myClass);
- }
-
- @Override
- public void close(final LineIterator lineIterator) {
- CloserUtil.close(lineIterator);
- }
-
- @Override
- public boolean isDone(final LineIterator lineIterator) {
- return !lineIterator.hasNext();
- }
-
- @Override
- public LocationAware makeIndexableSourceFromStream(final InputStream bufferedInputStream) {
- final PositionalBufferedStream pbs;
- if (bufferedInputStream instanceof PositionalBufferedStream) {
- pbs = (PositionalBufferedStream) bufferedInputStream;
- } else {
- pbs = new PositionalBufferedStream(bufferedInputStream);
- }
- return new AsciiLineReaderIterator(new AsciiLineReader(pbs));
- }
-
- @Override
- public LineIterator makeSourceFromStream(final InputStream bufferedInputStream) {
- return new LineIteratorImpl(LineReaderUtil.fromBufferedStream(bufferedInputStream));
- }
-
- /**
- * Convenience method. Decoding in ASCII files operates line-by-line, so obviate the need to call
- * {@link org.broad.tribble.readers.LineIterator#next()} in implementing classes and, instead, have them implement
- * {@link AsciiFeatureCodec#decode(String)}.
- */
- @Override
- public T decode(final LineIterator lineIterator) {
- return decode(lineIterator.next());
- }
-
- /** @see {@link AsciiFeatureCodec#decode(org.broad.tribble.readers.LineIterator)} */
- public abstract T decode(String s);
-
- @Override
- public FeatureCodecHeader readHeader(final LineIterator lineIterator) throws IOException {
- // TODO: Track header end here, rather than assuming there isn't one.
- return new FeatureCodecHeader(readActualHeader(lineIterator), FeatureCodecHeader.NO_HEADER_END);
- }
-
- /**
- * Read and return the header, or null if there is no header.
- *
- * @return the actual header data in the file, or null if none is available
- */
- abstract public Object readActualHeader(final LineIterator reader);
-}
diff --git a/src/java/org/broad/tribble/BasicFeature.java b/src/java/org/broad/tribble/BasicFeature.java
deleted file mode 100644
index ec6eb24..0000000
--- a/src/java/org/broad/tribble/BasicFeature.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.broad.tribble;
-
-/*
- * Copyright (c) 2012, The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * Trivial feature -- all it holds is the key information.
- *
- * @author Mark DePristo
- * @since 5/3/12
- */
-public class BasicFeature implements Feature {
- private final String chr;
- private final int start, stop;
-
- public BasicFeature(final String chr, final int start, final int stop) {
- this.chr = chr;
- this.start = start;
- this.stop = stop;
- }
-
- public String getChr() {
- return chr;
- }
-
- public int getStart() {
- return start;
- }
-
- public int getEnd() {
- return stop;
- }
-}
diff --git a/src/java/org/broad/tribble/BinaryFeatureCodec.java b/src/java/org/broad/tribble/BinaryFeatureCodec.java
deleted file mode 100644
index 9a153d5..0000000
--- a/src/java/org/broad/tribble/BinaryFeatureCodec.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.broad.tribble;
-
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.LocationAware;
-import org.broad.tribble.readers.PositionalBufferedStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Implements common methods of {@link FeatureCodec}s that read from {@link PositionalBufferedStream}s.
- * @author mccowan
- */
-abstract public class BinaryFeatureCodec<T extends Feature> implements FeatureCodec<T, PositionalBufferedStream> {
- @Override
- public PositionalBufferedStream makeSourceFromStream(final InputStream bufferedInputStream) {
- if (bufferedInputStream instanceof PositionalBufferedStream)
- return (PositionalBufferedStream) bufferedInputStream;
- else
- return new PositionalBufferedStream(bufferedInputStream);
- }
-
- /** {@link PositionalBufferedStream} is already {@link LocationAware}. */
- @Override
- public LocationAware makeIndexableSourceFromStream(final InputStream bufferedInputStream) {
- return makeSourceFromStream(bufferedInputStream);
- }
-
- @Override
- public void close(final PositionalBufferedStream source) {
- CloserUtil.close(source);
- }
-
- @Override
- public boolean isDone(final PositionalBufferedStream source) {
- try {
- return source.isDone();
- } catch (final IOException e) {
- throw new RuntimeException("Failure reading from stream.", e);
- }
- }
-}
diff --git a/src/java/org/broad/tribble/CloseableTribbleIterator.java b/src/java/org/broad/tribble/CloseableTribbleIterator.java
deleted file mode 100644
index 70b1e0c..0000000
--- a/src/java/org/broad/tribble/CloseableTribbleIterator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2009-2010 by The Broad Institute, Inc.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble;
-
-import net.sf.samtools.util.CloseableIterator;
-
-/**
- * The basic iterator we use in Tribble, which allows closing and basic iteration.
- * @param <T> the feature type
- */
-public interface CloseableTribbleIterator<T extends Feature> extends CloseableIterator<T>, Iterable<T> {}
diff --git a/src/java/org/broad/tribble/Feature.java b/src/java/org/broad/tribble/Feature.java
deleted file mode 100644
index f789bf5..0000000
--- a/src/java/org/broad/tribble/Feature.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble;
-
-
-/**
- * Represents a locus on a reference sequence. The coordinate conventions for start and end are implementation
- * dependent, no specific contact is specified here.
- */
-public interface Feature {
-
- /**
- * Return the features reference sequence name, e.g chromosome or contig
- */
- public String getChr();
-
- /**
- * Return the start position
- */
- public int getStart();
-
- /**
- * Return the end position
- */
- public int getEnd();
-}
diff --git a/src/java/org/broad/tribble/FeatureCodec.java b/src/java/org/broad/tribble/FeatureCodec.java
deleted file mode 100644
index ca49fd3..0000000
--- a/src/java/org/broad/tribble/FeatureCodec.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble;
-
-import net.sf.samtools.util.LocationAware;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * The base interface for classes that read in features.
- * <p/>
- * FeatureCodecs have to implement two key methods:
- * <p/>
- * {@link #readHeader(SOURCE)} - Reads the header, provided a {@link SOURCE} pointing at the beginning of the source input.
- * {@link #decode(SOURCE)} - Reads a {@link Feature} record, provided a {@link SOURCE} pointing at the beginning of a record within the
- * source input.
- * <p/>
- * Note that it's not safe to carry state about the {@link SOURCE} within the codec. There's no guarantee about its state between calls.
- *
- * @param <FEATURE_TYPE> The type of {@link Feature} this codec generates
- * @param <SOURCE> The type of the data source this codec reads from
- */
-public interface FeatureCodec<FEATURE_TYPE extends Feature, SOURCE> {
- /**
- * Decode a line to obtain just its FeatureLoc for indexing -- contig, start, and stop.
- *
- * @param source the input stream from which to decode the next record
- * @return Return the FeatureLoc encoded by the line, or null if the line does not represent a feature (e.g. is
- * a comment)
- */
- public Feature decodeLoc(final SOURCE source) throws IOException;
-
- /**
- * Decode a single {@link Feature} from the {@link SOURCE}, reading no further in the underlying source than beyond that feature.
- *
- * @param source the input stream from which to decode the next record
- * @return Return the Feature encoded by the line, or null if the line does not represent a feature (e.g. is
- * a comment)
- */
- public FEATURE_TYPE decode(final SOURCE source) throws IOException;
-
- /**
- * Read and return the header, or null if there is no header.
- *
- * Note: Implementers of this method must be careful to read exactly as much from {@link SOURCE} as needed to parse the header, and no
- * more. Otherwise, data that might otherwise be fed into parsing a {@link Feature} may be lost.
- *
- * @param source the source from which to decode the header
- * @return header object
- */
- public FeatureCodecHeader readHeader(final SOURCE source) throws IOException;
-
- /**
- * This function returns the object the codec generates. This is allowed to be Feature in the case where
- * conditionally different types are generated. Be as specific as you can though.
- * <p/>
- * This function is used by reflections based tools, so we can know the underlying type
- *
- * @return the feature type this codec generates.
- */
- public Class<FEATURE_TYPE> getFeatureType();
-
- /**
- * Generates a reader of type {@link SOURCE} appropriate for use by this codec from the generic input stream. Implementers should
- * assume the stream is buffered.
- */
- public SOURCE makeSourceFromStream(final InputStream bufferedInputStream);
-
- /**
- * Generates a {@link LocationAware} reader of type {@link SOURCE}. Like {@link #makeSourceFromStream(java.io.InputStream)}, except
- * the {@link LocationAware} compatibility is required for creating indexes.
- *
- * Implementers of this method must return a type that is both {@link LocationAware} as well as {@link SOURCE}. Note that this
- * requirement cannot be enforced via the method signature due to limitations in Java's generic typing system. Instead, consumers
- * should cast the call result into a {@link SOURCE} when applicable.
- */
- public LocationAware makeIndexableSourceFromStream(final InputStream bufferedInputStream);
-
- /** Adapter method that assesses whether the provided {@link SOURCE} has more data. True if it does, false otherwise. */
- public boolean isDone(final SOURCE source);
-
- /** Adapter method that closes the provided {@link SOURCE}. */
- public void close(final SOURCE source);
-
- /**
- * This function returns true iff the File potentialInput can be parsed by this
- * codec.
- * <p/>
- * There is an assumption that there's never a situation where two different Codecs
- * return true for the same file. If this occurs, the recommendation would be to error out.
- * <p/>
- * Note this function must never throw an error. All errors should be trapped
- * and false returned.
- *
- * @param path the file to test for parsability with this codec
- * @return true if potentialInput can be parsed, false otherwise
- */
- public boolean canDecode(final String path);
-}
diff --git a/src/java/org/broad/tribble/FeatureCodecHeader.java b/src/java/org/broad/tribble/FeatureCodecHeader.java
deleted file mode 100644
index 8dea58f..0000000
--- a/src/java/org/broad/tribble/FeatureCodecHeader.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble;
-
-/**
- * A class to represent a header of a feature containing file. Specific to a codec. All
- * codecs must return a non-null value now for their header, but the header can be the
- * empty header object or the end case be set to NO_HEADER_END.
- *
- * Note that if the headerEnd value is > 0 the readers will skip the header for the codec upfront,
- * so that decode() doesn't have to deal with potentially seeing header records in the inputstream.
- *
- * @author Mark DePristo
- * @since 5/2/12
- */
-public class FeatureCodecHeader {
- /** The value of the headerEnd field when there's no header */
- public final static long NO_HEADER_END = 0;
-
- /** An public instance representing no header */
- public final static FeatureCodecHeader EMPTY_HEADER = new FeatureCodecHeader(null, NO_HEADER_END);
-
- private final Object headerValue;
- private final long headerEnd;
-
- /**
- * Create a FeatureCodecHeader indicating the contents of the header (can be null)
- * and the byte position in the file where the header ends (not inclusive). headerEnd
- * should be NO_HEADER_END when no header is present.
- *
- * @param headerValue the header data read by the codec
- * @param headerEnd the position (not inclusive) of the end of the header. 1 would
- * mean just the first byte of the file is the header. Zero indicates
- * there's no header at all
- */
- public FeatureCodecHeader(final Object headerValue, final long headerEnd) {
- if ( headerEnd < 0 ) throw new TribbleException("Header end < 0");
- this.headerValue = headerValue;
- this.headerEnd = headerEnd;
- }
-
- /**
- * @return the header value provided by the codec for this file
- */
- public Object getHeaderValue() {
- return headerValue;
- }
-
- /**
- * @return to position, not inclusive, where the header ends. Must be >= 0
- */
- public long getHeaderEnd() {
- return headerEnd;
- }
-
- /**
- * @return true if we should skip some bytes to skip this header
- */
- public boolean skipHeaderBytes() {
- return getHeaderEnd() != NO_HEADER_END;
- }
-}
diff --git a/src/java/org/broad/tribble/FeatureReader.java b/src/java/org/broad/tribble/FeatureReader.java
deleted file mode 100644
index e035d27..0000000
--- a/src/java/org/broad/tribble/FeatureReader.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * the basic interface that feature sources need to match
- * @param <T> a feature type
- */
-public interface FeatureReader<T extends Feature> {
-
- public CloseableTribbleIterator<T> query(final String chr, final int start, final int end) throws IOException;
-
- public CloseableTribbleIterator<T> iterator() throws IOException;
-
- public void close() throws IOException;
-
- public List<String> getSequenceNames();
-
- public Object getHeader();
-
-}
diff --git a/src/java/org/broad/tribble/NameAwareCodec.java b/src/java/org/broad/tribble/NameAwareCodec.java
deleted file mode 100755
index e0abcdc..0000000
--- a/src/java/org/broad/tribble/NameAwareCodec.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-package org.broad.tribble;
-
-/**
- * Created by IntelliJ IDEA.
- * User: depristo
- * Date: Jun 29, 2010
- * Time: 3:48:47 PM
- * To change this template use File | Settings | File Templates.
- */
-public interface NameAwareCodec {
- public String getName();
- public void setName(String name);
-}
diff --git a/src/java/org/broad/tribble/TabixFeatureReader.java b/src/java/org/broad/tribble/TabixFeatureReader.java
deleted file mode 100644
index cdaba0b..0000000
--- a/src/java/org/broad/tribble/TabixFeatureReader.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble;
-
-import net.sf.samtools.util.BlockCompressedInputStream;
-import org.broad.tribble.readers.*;
-import org.broad.tribble.util.ParsingUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * @author Jim Robinson
- * @since 2/11/12
- */
-public class TabixFeatureReader<T extends Feature, SOURCE> extends AbstractFeatureReader<T, SOURCE> {
-
- TabixReader tabixReader;
- List<String> sequenceNames;
-
- /**
- *
- * @param featureFile - path to a feature file. Can be a local file, http url, or ftp url
- * @param codec
- * @throws IOException
- */
- public TabixFeatureReader(final String featureFile, final AsciiFeatureCodec codec) throws IOException {
- super(featureFile, codec);
- tabixReader = new TabixReader(featureFile);
- sequenceNames = new ArrayList<String>(tabixReader.mChr2tid.keySet());
- readHeader();
- }
-
-
- /**
- * read the header
- *
- * @return a Object, representing the file header, if available
- * @throws IOException throws an IOException if we can't open the file
- */
- private void readHeader() throws IOException {
- SOURCE source = null;
- try {
- source = codec.makeSourceFromStream(new PositionalBufferedStream(new BlockCompressedInputStream(ParsingUtils.openInputStream(path))));
- header = codec.readHeader(source);
- } catch (Exception e) {
- throw new TribbleException.MalformedFeatureFile("Unable to parse header with error: " + e.getMessage(), path, e);
- } finally {
- if (source != null) {
- codec.close(source);
- }
- }
- }
-
- @Override
- public boolean hasIndex(){
- return true;
- }
-
-
- public List<String> getSequenceNames() {
- return sequenceNames;
- }
-
- /**
- * Return iterator over all features overlapping the given interval
- *
- * @param chr
- * @param start
- * @param end
- * @return
- * @throws IOException
- */
- public CloseableTribbleIterator<T> query(final String chr, final int start, final int end) throws IOException {
- final List<String> mp = getSequenceNames();
- if (mp == null) throw new TribbleException.TabixReaderFailure("Unable to find sequence named " + chr +
- " in the tabix index. ", path);
- if (!mp.contains(chr)) {
- return new EmptyIterator<T>();
- }
- final TabixIteratorLineReader lineReader = new TabixIteratorLineReader(tabixReader.query(tabixReader.mChr2tid.get(chr), start - 1, end));
- return new FeatureIterator<T>(lineReader, start - 1, end);
- }
-
- public CloseableTribbleIterator<T> iterator() throws IOException {
- final InputStream is = new BlockCompressedInputStream(ParsingUtils.openInputStream(path));
- final PositionalBufferedStream stream = new PositionalBufferedStream(is);
- final LineReader reader = LineReaderUtil.fromBufferedStream(stream, LineReaderUtil.LineReaderOption.SYNCHRONOUS);
- return new FeatureIterator<T>(reader, 0, Integer.MAX_VALUE);
- }
-
- public void close() throws IOException {
-
- }
-
-
- class FeatureIterator<T extends Feature> implements CloseableTribbleIterator<T> {
- private T currentRecord;
- private LineReader lineReader;
- private int start;
- private int end;
-
- public FeatureIterator(final LineReader lineReader, final int start, final int end) throws IOException {
- this.lineReader = lineReader;
- this.start = start;
- this.end = end;
- readNextRecord();
- }
-
-
- /**
- * Advance to the next record in the query interval.
- *
- * @throws IOException
- */
- protected void readNextRecord() throws IOException {
- currentRecord = null;
- String nextLine;
- while (currentRecord == null && (nextLine = lineReader.readLine()) != null) {
- final Feature f;
- try {
- f = ((AsciiFeatureCodec)codec).decode(nextLine);
- if (f == null) {
- continue; // Skip
- }
- if (f.getStart() > end) {
- return; // Done
- }
- if (f.getEnd() <= start) {
- continue; // Skip
- }
-
- currentRecord = (T) f;
-
- } catch (TribbleException e) {
- e.setSource(path);
- throw e;
- } catch (NumberFormatException e) {
- String error = "Error parsing line: " + nextLine;
- throw new TribbleException.MalformedFeatureFile(error, path, e);
- }
-
-
- }
- }
-
-
- public boolean hasNext() {
- return currentRecord != null;
- }
-
- public T next() {
- T ret = currentRecord;
- try {
- readNextRecord();
- } catch (IOException e) {
- throw new RuntimeException("Unable to read the next record, the last record was at " +
- ret.getChr() + ":" + ret.getStart() + "-" + ret.getEnd(), e);
- }
- return ret;
-
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Remove is not supported in Iterators");
- }
-
- public void close() {
- lineReader.close();
- }
-
- public Iterator<T> iterator() {
- return this;
- }
- }
-
-
-}
diff --git a/src/java/org/broad/tribble/Tribble.java b/src/java/org/broad/tribble/Tribble.java
deleted file mode 100644
index abccbb7..0000000
--- a/src/java/org/broad/tribble/Tribble.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble;
-
-import org.broad.tribble.util.ParsingUtils;
-
-import java.io.File;
-
-/**
- * Common, tribble wide constants and static functions
- */
-public class Tribble {
- private Tribble() { } // can't be instantiated
-
- public final static String STANDARD_INDEX_EXTENSION = ".idx";
-
- /**
- * Return the name of the index file for the provided {@code filename}
- * Does not actually create an index
- * @param filename
- * @return
- */
- public static String indexFile(String filename) {
- return ParsingUtils.appendToPath(filename, STANDARD_INDEX_EXTENSION);
- }
-
- /**
- * Return the File of the index file for the provided {@code file}
- * Does not actually create an index
- * @param file
- * @return
- */
- public static File indexFile(File file) {
- return new File(file.getAbsoluteFile() + STANDARD_INDEX_EXTENSION);
- }
-
-}
diff --git a/src/java/org/broad/tribble/TribbleException.java b/src/java/org/broad/tribble/TribbleException.java
deleted file mode 100644
index 9593d17..0000000
--- a/src/java/org/broad/tribble/TribbleException.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble;
-
-
-/**
- * @author Aaron
- *
- * The base Tribble exception; this allows external libraries to catch any exception Tribble generates
- *
- */
-public class TribbleException extends RuntimeException {
- // what file or input source we are working from
- String source;
-
- public TribbleException(String msg) {
- super(msg);
- }
-
- public TribbleException(String message, Throwable throwable) {
- super(message, throwable);
- }
-
- /**
- * set the source for the file; where we got lines from
- * @param source the source location, usually a file though it could be a http link or other source
- */
- public void setSource(String source) {
- this.source = source;
- }
-
- /**
- * override the default message with ours, which attaches the source file in question
- * @return a string with our internal error, along with the causitive source file (or other input source)
- */
- public String getMessage() {
- String ret = super.getMessage();
- if ( source != null )
- ret = ret + ", for input source: " + source;
- return ret;
- }
-
- // //////////////////////////////////////////////////////////////////////
- // other more specific exceptions generated in Tribble
- // //////////////////////////////////////////////////////////////////////
-
-
- // //////////////////////////////////////////////////////////////////////
- // Codec exception
- // //////////////////////////////////////////////////////////////////////
- // if the line to decode is incorrect
- public static class InvalidDecodeLine extends TribbleException {
- public InvalidDecodeLine(String message, String line) { super (message + ", line = " + line); }
-
- public InvalidDecodeLine(String message, int lineNo) { super (message + ", at line number " + lineNo); }
- }
-
- public static class InvalidHeader extends TribbleException {
- public InvalidHeader(String message) { super ("Your input file has a malformed header: " + message); }
- }
-
- // capture other internal codec exceptions
- public static class InternalCodecException extends TribbleException {
- public InternalCodecException(String message) { super (message); }
- }
-
- // //////////////////////////////////////////////////////////////////////
- // Index exceptions
- // //////////////////////////////////////////////////////////////////////
- public static class UnableToCreateCorrectIndexType extends TribbleException {
- public UnableToCreateCorrectIndexType(String message, Exception e) {
- super(message,e);
- }
- public UnableToCreateCorrectIndexType(String message) {
- super(message);
- }
- }
-
- // //////////////////////////////////////////////////////////////////////
- // Source exceptions
- // //////////////////////////////////////////////////////////////////////
- public static class FeatureFileDoesntExist extends TribbleException {
- public FeatureFileDoesntExist(String message, String file) {
- super(message);
- setSource(file);
- }
- }
-
- public static class MalformedFeatureFile extends TribbleException {
- public MalformedFeatureFile(String message, String f, Exception e) {
- super(message,e);
- setSource(f);
- }
- public MalformedFeatureFile(String message, String f) {
- super(message);
- setSource(f);
- }
- }
-
- public static class UnableToReadIndexFile extends TribbleException {
- public UnableToReadIndexFile(String message, String f, Exception e) {
- super(message,e);
- setSource(f);
- }
- }
-
- public static class TabixReaderFailure extends TribbleException {
- public TabixReaderFailure(String message, String f, Exception e) {
- super(message,e);
- setSource(f);
- }
-
- public TabixReaderFailure(String message, String f) {
- super(message);
- setSource(f);
- }
- }
-}
diff --git a/src/java/org/broad/tribble/TribbleIndexedFeatureReader.java b/src/java/org/broad/tribble/TribbleIndexedFeatureReader.java
deleted file mode 100644
index 8a7b418..0000000
--- a/src/java/org/broad/tribble/TribbleIndexedFeatureReader.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble;
-
-import net.sf.samtools.seekablestream.SeekableStream;
-import net.sf.samtools.seekablestream.SeekableStreamFactory;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import org.broad.tribble.readers.PositionalBufferedStream;
-import org.broad.tribble.util.ParsingUtils;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.GZIPInputStream;
-
-/**
- * A reader for text feature files (i.e. not tabix files). This includes tribble-indexed and non-indexed files. If
- * index both iterate() and query() methods are supported.
- * <p/>
- * Note: Non-indexed files can be gzipped, but not bgzipped.
- *
- * @author Jim Robinson
- * @since 2/11/12
- */
-public class TribbleIndexedFeatureReader<T extends Feature, SOURCE> extends AbstractFeatureReader<T, SOURCE> {
-
- private Index index;
-
- /**
- * is the path pointing to our source data a regular file?
- */
- private final boolean pathIsRegularFile;
-
- /**
- * a potentially reusable seekable stream for queries over regular files
- */
- private SeekableStream seekableStream = null;
-
- /**
- * We lazy-load the index but it might not even exist
- * Don't want to keep checking if that's the case
- */
- private boolean needCheckForIndex = true;
-
- /**
- * @param featurePath - path to the feature file, can be a local file path, http url, or ftp url
- * @param codec - codec to decode the features
- * @param requireIndex - true if the reader will be queries for specific ranges. An index (idx) file must exist
- * @throws IOException
- */
- public TribbleIndexedFeatureReader(final String featurePath, final FeatureCodec<T, SOURCE> codec, final boolean requireIndex) throws IOException {
-
- super(featurePath, codec);
-
- if (requireIndex) {
- this.loadIndex();
- if(!this.hasIndex()){
- throw new TribbleException("An index is required, but none found.");
- }
- }
-
- // does path point to a regular file?
- this.pathIsRegularFile = SeekableStreamFactory.isFilePath(path);
-
- readHeader();
- }
-
- /**
- * @param featureFile - path to the feature file, can be a local file path, http url, or ftp url
- * @param codec - codec to decode the features
- * @param index - a tribble Index object
- * @throws IOException
- */
- public TribbleIndexedFeatureReader(final String featureFile, final FeatureCodec<T, SOURCE> codec, final Index index) throws IOException {
- this(featureFile, codec, false); // required to read the header
- this.index = index;
- this.needCheckForIndex = false;
- }
-
- /**
- * Attempt to load the index for the specified {@link #path}.
- * If the {@link #path} has no available index file,
- * does nothing
- * @throws IOException
- */
- private void loadIndex() throws IOException{
- String indexFile = Tribble.indexFile(this.path);
- if (ParsingUtils.resourceExists(indexFile)) {
- index = IndexFactory.loadIndex(indexFile);
- } else {
- // See if the index itself is gzipped
- indexFile = ParsingUtils.appendToPath(indexFile, ".gz");
- if (ParsingUtils.resourceExists(indexFile)) {
- index = IndexFactory.loadIndex(indexFile);
- }
- }
- this.needCheckForIndex = false;
- }
-
- /**
- * Get a seekable stream appropriate to read information from the current feature path
- * <p/>
- * This function ensures that if reuseStreamInQuery returns true then this function will only
- * ever return a single unique instance of SeekableStream for all calls given this instance of
- * TribbleIndexedFeatureReader. If reuseStreamInQuery() returns false then the returned SeekableStream
- * will be newly opened each time, and should be closed after each use.
- *
- * @return a SeekableStream
- */
- private SeekableStream getSeekableStream() throws IOException {
- final SeekableStream result;
- if (reuseStreamInQuery()) {
- // if the stream points to an underlying file, only create the underlying seekable stream once
- if (seekableStream == null) seekableStream = SeekableStreamFactory.getInstance().getStreamFor(path);
- result = seekableStream;
- } else {
- // we are not reusing the stream, so make a fresh copy each time we request it
- result = SeekableStreamFactory.getInstance().getStreamFor(path);
- }
-
- return result;
- }
-
- /**
- * Are we attempting to reuse the underlying stream in query() calls?
- *
- * @return true if
- */
- private boolean reuseStreamInQuery() {
- return pathIsRegularFile;
- }
-
- public void close() throws IOException {
- // close the seekable stream if that's necessary
- if (seekableStream != null) seekableStream.close();
- }
-
- /**
- * Return the sequence (chromosome/contig) names in this file, if known.
- *
- * @return list of strings of the contig names
- */
- public List<String> getSequenceNames() {
- return !this.hasIndex() ? new ArrayList<String>() : new ArrayList<String>(index.getSequenceNames());
- }
-
- @Override
- public boolean hasIndex() {
- if(index == null && this.needCheckForIndex){
- try {
- this.loadIndex();
- } catch (IOException e) {
- throw new TribbleException("Error loading index file: " + e.getMessage(), e);
- }
- }
- return index != null;
- }
-
- /**
- * read the header from the file
- *
- * @throws IOException throws an IOException if we can't open the file
- */
- private void readHeader() throws IOException {
- InputStream is = null;
- PositionalBufferedStream pbs = null;
- try {
- is = ParsingUtils.openInputStream(path);
- if (path.endsWith("gz")) {
- // TODO -- warning I don't think this can work, the buffered input stream screws up position
- is = new GZIPInputStream(new BufferedInputStream(is));
- }
- pbs = new PositionalBufferedStream(is);
- final SOURCE source = codec.makeSourceFromStream(pbs);
- header = codec.readHeader(source);
- } catch (Exception e) {
- throw new TribbleException.MalformedFeatureFile("Unable to parse header with error: " + e.getMessage(), path, e);
- } finally {
- if (pbs != null) pbs.close();
- else if (is != null) is.close();
- }
- }
-
- /**
- * Return an iterator to iterate over features overlapping the specified interval
- * <p/>
- * Note that TribbleIndexedFeatureReader only supports issuing and manipulating a single query
- * for each reader. That is, the behavior of the following code is undefined:
- * <p/>
- * reader = new TribbleIndexedFeatureReader()
- * Iterator it1 = reader.query("x", 10, 20)
- * Iterator it2 = reader.query("x", 1000, 1010)
- * <p/>
- * As a consequence of this, the TribbleIndexedFeatureReader are also not thread-safe.
- *
- * @param chr contig
- * @param start start position
- * @param end end position
- * @return an iterator of records in this interval
- * @throws IOException
- */
- public CloseableTribbleIterator<T> query(final String chr, final int start, final int end) throws IOException {
-
- if (!this.hasIndex()) {
- throw new TribbleException("Index not found for: " + path);
- }
-
- if (index.containsChromosome(chr)) {
- final List<Block> blocks = index.getBlocks(chr, start - 1, end);
- return new QueryIterator(chr, start, end, blocks);
- } else {
- return new EmptyIterator<T>();
- }
- }
-
-
- /**
- * @return Return an iterator to iterate over the entire file
- * @throws IOException
- */
- public CloseableTribbleIterator<T> iterator() throws IOException {
- return new WFIterator();
- }
-
- /**
- * Class to iterator over an entire file.
- */
- class WFIterator implements CloseableTribbleIterator<T> {
- private T currentRecord;
- private SOURCE source;
-
- /**
- * Constructor for iterating over the entire file (seekableStream).
- *
- * @throws IOException
- */
- public WFIterator() throws IOException {
- final InputStream inputStream = ParsingUtils.openInputStream(path);
-
- final PositionalBufferedStream pbs;
- if (path.endsWith(".gz")) {
- // Gzipped -- we need to buffer the GZIPInputStream methods as this class makes read() calls,
- // and seekableStream does not support single byte reads
- final InputStream is = new GZIPInputStream(new BufferedInputStream(inputStream, 512000));
- pbs = new PositionalBufferedStream(is, 1000); // Small buffer as this is buffered already.
- } else {
- pbs = new PositionalBufferedStream(inputStream, 512000);
- }
- /**
- * The header was already read from the original source in the constructor; don't read it again, since some codecs keep state
- * about its initializagtion. Instead, skip that part of the stream.
- */
- pbs.skip(header.getHeaderEnd());
- source = codec.makeSourceFromStream(pbs);
- readNextRecord();
- }
-
- @Override
- public boolean hasNext() {
- return currentRecord != null;
- }
-
- @Override
- public T next() {
- final T ret = currentRecord;
- try {
- readNextRecord();
- } catch (IOException e) {
- throw new RuntimeException("Unable to read the next record, the last record was at " +
- ret.getChr() + ":" + ret.getStart() + "-" + ret.getEnd(), e);
- }
- return ret;
- }
-
-
- /**
- * Advance to the next record in the query interval.
- *
- * @throws IOException
- */
- private void readNextRecord() throws IOException {
- currentRecord = null;
-
- while (!codec.isDone(source)) {
- final T f;
- try {
- f = codec.decode(source);
-
- if (f == null) {
- continue;
- }
-
- currentRecord = f;
- return;
-
- } catch (TribbleException e) {
- e.setSource(path);
- throw e;
- } catch (NumberFormatException e) {
- final String error = "Error parsing line at byte position: " + source;
- throw new TribbleException.MalformedFeatureFile(error, path, e);
- }
- }
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException("Remove is not supported in Iterators");
- }
-
- @Override
- public void close() {
- codec.close(source);
- }
-
- @Override
- public WFIterator iterator() {
- return this;
- }
- }
-
- /**
- * Iterator for a query interval
- */
- class QueryIterator implements CloseableTribbleIterator<T> {
- private String chrAlias;
- int start;
- int end;
- private T currentRecord;
- private SOURCE source;
- private SeekableStream mySeekableStream;
- private Iterator<Block> blockIterator;
-
-
- public QueryIterator(final String chr, final int start, final int end, final List<Block> blocks) throws IOException {
- this.start = start;
- this.end = end;
- mySeekableStream = getSeekableStream();
- blockIterator = blocks.iterator();
- advanceBlock();
- readNextRecord();
-
- // The feature chromosome might not be the query chromosome, due to alias definitions. We assume
- // the chromosome of the first record is correct and record it here. This is not pretty.
- chrAlias = (currentRecord == null ? chr : currentRecord.getChr());
-
- }
-
-
- public boolean hasNext() {
- return currentRecord != null;
- }
-
- public T next() {
- final T ret = currentRecord;
- try {
- readNextRecord();
- } catch (IOException e) {
- throw new RuntimeException("Unable to read the next record, the last record was at " +
- ret.getChr() + ":" + ret.getStart() + "-" + ret.getEnd(), e);
- }
- return ret;
- }
-
-
- private void advanceBlock() throws IOException {
- while (blockIterator != null && blockIterator.hasNext()) {
- final Block block = blockIterator.next();
- if (block.getSize() > 0) {
- final int bufferSize = Math.min(2000000, block.getSize() > 100000000 ? 10000000 : (int) block.getSize());
- source = codec.makeSourceFromStream(new PositionalBufferedStream(new BlockStreamWrapper(mySeekableStream, block), bufferSize));
- // note we don't have to skip the header here as the block should never start in the header
- return;
- }
- }
-
- // If we get here the blocks are exhausted, set reader to null
- if (source != null) {
- codec.close(source);
- source = null;
- }
- }
-
- /**
- * Advance to the next record in the query interval.
- *
- * @throws IOException
- */
- private void readNextRecord() throws IOException {
-
- if (source == null) {
- return; // <= no more features to read
- }
-
- currentRecord = null;
-
- while (true) { // Loop through blocks
- while (!codec.isDone(source)) { // Loop through current block
- final T f;
- try {
- f = codec.decode(source);
- if (f == null) {
- continue; // Skip
- }
- if ((chrAlias != null && !f.getChr().equals(chrAlias)) || f.getStart() > end) {
- if (blockIterator.hasNext()) {
- advanceBlock();
- continue;
- } else {
- return; // Done
- }
- }
- if (f.getEnd() < start) {
- continue; // Skip
- }
-
- currentRecord = f; // Success
- return;
-
- } catch (TribbleException e) {
- e.setSource(path);
- throw e;
- } catch (NumberFormatException e) {
- final String error = "Error parsing line: " + source;
- throw new TribbleException.MalformedFeatureFile(error, path, e);
- }
- }
- if (blockIterator != null && blockIterator.hasNext()) {
- advanceBlock(); // Advance to next block
- } else {
- return; // No blocks left, we're done.
- }
- }
- }
-
-
- public void remove() {
- throw new UnsupportedOperationException("Remove is not supported.");
- }
-
-
- public void close() {
- // Note that this depends on BlockStreamWrapper not actually closing the underlying stream
- codec.close(source);
- if (!reuseStreamInQuery()) {
- // if we are going to reuse the underlying stream we don't close the underlying stream.
- try {
- mySeekableStream.close();
- } catch (IOException e) {
- throw new TribbleException("Couldn't close seekable stream", e);
- }
- }
- }
-
- public Iterator<T> iterator() {
- return this;
- }
- }
-
-
- /**
- * Wrapper around a SeekableStream that limits reading to the specified "block" of bytes. Attempts to
- * read beyond the end of the block should return -1 (EOF).
- */
- static class BlockStreamWrapper extends InputStream {
-
- SeekableStream seekableStream;
- long maxPosition;
-
- BlockStreamWrapper(final SeekableStream seekableStream, final Block block) throws IOException {
- this.seekableStream = seekableStream;
- seekableStream.seek(block.getStartPosition());
- maxPosition = block.getEndPosition();
- }
-
- @Override
- public int read() throws IOException {
- return (seekableStream.position() > maxPosition) ? -1 : seekableStream.read();
- }
-
- @Override
- public int read(final byte[] bytes, final int off, final int len) throws IOException {
- // note the careful treatment here to ensure we can continue to
- // read very long > Integer sized blocks
- final long maxBytes = maxPosition - seekableStream.position();
- if (maxBytes <= 0) {
- return -1;
- }
-
- final int bytesToRead = (int) Math.min(len, Math.min(maxBytes, Integer.MAX_VALUE));
- return seekableStream.read(bytes, off, bytesToRead);
-
- }
- }
-
-
-}
diff --git a/src/java/org/broad/tribble/annotation/Strand.java b/src/java/org/broad/tribble/annotation/Strand.java
deleted file mode 100644
index efac6d0..0000000
--- a/src/java/org/broad/tribble/annotation/Strand.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.annotation;
-
-/**
- * Enum for strand, which can be encoded as string
- */
-public enum Strand {
- POSITIVE("+"), NEGATIVE("-"), NONE("!"); // not really sure what we should do for the NONE Enum
-
- /**
- * How we represent the strand information as text
- */
- private String encoding;
- Strand(String str) {
- encoding = str;
- }
-
- /**
- * provide a way to take an encoding string, and produce a Strand
- * @param encoding the encoding string
- * @return a Strand object, if an appropriate one cannot be located an IllegalArg exception
- */
- public static Strand toStrand(String encoding) {
- for (Strand st : Strand.values())
- if (st.encoding.equals(encoding))
- return st;
- throw new IllegalArgumentException("Unable to match encoding to Strand enum for encoding string " + encoding);
- }
-
-}
\ No newline at end of file
diff --git a/src/java/org/broad/tribble/bed/BEDCodec.java b/src/java/org/broad/tribble/bed/BEDCodec.java
deleted file mode 100644
index 90dcdfb..0000000
--- a/src/java/org/broad/tribble/bed/BEDCodec.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.bed;
-
-import org.broad.tribble.AsciiFeatureCodec;
-import org.broad.tribble.annotation.Strand;
-import org.broad.tribble.readers.LineIterator;
-import org.broad.tribble.util.ParsingUtils;
-
-import java.util.regex.Pattern;
-
-/**
- * Codec for parsing BED file, as described by UCSC
- * See https://genome.ucsc.edu/FAQ/FAQformat.html#format1
- *
- * @author jrobinso
- * Date: Dec 20, 2009
- */
-public class BEDCodec extends AsciiFeatureCodec<BEDFeature> {
-
- private static final Pattern SPLIT_PATTERN = Pattern.compile("\\t|( +)");
- private final int startOffsetValue;
-
- /**
- * Calls {@link #BEDCodec(StartOffset)} with an argument
- * of {@code StartOffset.ONE}
- */
- public BEDCodec() {
- this(StartOffset.ONE);
- }
-
-
- /**
- * BED format is 0-based, but Tribble is 1-based.
- * Set desired start position at either ZERO or ONE
- */
- public BEDCodec(final StartOffset startOffset) {
- super(BEDFeature.class);
- this.startOffsetValue = startOffset.value();
- }
-
-
- public BEDFeature decodeLoc(String line) {
- return decode(line);
- }
-
- @Override
- public BEDFeature decode(String line) {
-
- if (line.trim().length() == 0) {
- return null;
- }
-
- if (line.startsWith("#") || line.startsWith("track") || line.startsWith("browser")) {
- this.readHeaderLine(line);
- return null;
- }
-
- String[] tokens = SPLIT_PATTERN.split(line, -1);
- return decode(tokens);
- }
-
- @Override
- public Object readActualHeader(LineIterator reader) {
- return null;
- }
-
- public BEDFeature decode(String[] tokens) {
- int tokenCount = tokens.length;
-
- // The first 3 columns are non optional for BED. We will relax this
- // and only require 2.
-
- if (tokenCount < 2) {
- return null;
- }
-
- String chr = tokens[0];
-
- // The BED format uses a first-base-is-zero convention, Tribble features use 1 => add 1.
- int start = Integer.parseInt(tokens[1]) + startOffsetValue;
-
- int end = start;
- if (tokenCount > 2) {
- end = Integer.parseInt(tokens[2]);
- }
-
- FullBEDFeature feature = new FullBEDFeature(chr, start, end);
-
- // The rest of the columns are optional. Stop parsing upon encountering
- // a non-expected value
-
- // Name
- if (tokenCount > 3) {
- String name = tokens[3].replaceAll("\"", "");
- feature.setName(name);
- }
-
- // Score
- if (tokenCount > 4) {
- try {
- float score = Float.parseFloat(tokens[4]);
- feature.setScore(score);
- } catch (NumberFormatException numberFormatException) {
-
- // Unexpected, but does not invalidate the previous values.
- // Stop parsing the line here but keep the feature
- // Don't log, would just slow parsing down.
- return feature;
- }
- }
-
- // Strand
- if (tokenCount > 5) {
- String strandString = tokens[5].trim();
- char strand = (strandString.length() == 0)
- ? ' ' : strandString.charAt(0);
-
- if (strand == '-') {
- feature.setStrand(Strand.NEGATIVE);
- } else if (strand == '+') {
- feature.setStrand(Strand.POSITIVE);
- } else {
- feature.setStrand(Strand.NONE);
- }
- }
-
- //Color
- if (tokenCount > 8) {
- String colorString = tokens[8];
- feature.setColor(ParsingUtils.parseColor(colorString));
- }
-
- // Coding information is optional
- if (tokenCount > 11) {
- createExons(start, tokens, feature, feature.getStrand());
- }
-
- return feature;
- }
-
- protected boolean readHeaderLine(String line) {
- //We don't parse BED header
- return false;
- }
-
- private void createExons(int start, String[] tokens, FullBEDFeature gene,
- Strand strand) throws NumberFormatException {
-
- int cdStart = Integer.parseInt(tokens[6]) + startOffsetValue;
- int cdEnd = Integer.parseInt(tokens[7]);
-
- int exonCount = Integer.parseInt(tokens[9]);
- String[] exonSizes = new String[exonCount];
- String[] startsBuffer = new String[exonCount];
- ParsingUtils.split(tokens[10], exonSizes, ',');
- ParsingUtils.split(tokens[11], startsBuffer, ',');
-
- int exonNumber = (strand == Strand.NEGATIVE ? exonCount : 1);
-
- if (startsBuffer.length == exonSizes.length) {
- for (int i = 0; i < startsBuffer.length; i++) {
- int exonStart = start + Integer.parseInt(startsBuffer[i]);
- int exonEnd = exonStart + Integer.parseInt(exonSizes[i]) - 1;
- gene.addExon(exonStart, exonEnd, cdStart, cdEnd, exonNumber);
-
- if (strand == Strand.NEGATIVE) {
- exonNumber--;
- } else {
- exonNumber++;
- }
- }
- }
- }
-
- @Override
- public boolean canDecode(final String path) {
- return path.toLowerCase().endsWith(".bed");
- }
-
- public int getStartOffset() {
- return this.startOffsetValue;
- }
-
- /**
- * Indicate whether co-ordinates or 0-based or 1-based.
- * <p/>
- * Tribble uses 1-based, BED files use 0.
- * e.g.:
- * start_position = bedline_start_position - startIndex.value()
- */
- public enum StartOffset {
- ZERO(0),
- ONE(1);
- private int start;
-
- private StartOffset(int start) {
- this.start = start;
- }
-
- public int value() {
- return this.start;
- }
- }
-
-}
diff --git a/src/java/org/broad/tribble/bed/BEDFeature.java b/src/java/org/broad/tribble/bed/BEDFeature.java
deleted file mode 100644
index 6870f98..0000000
--- a/src/java/org/broad/tribble/bed/BEDFeature.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.bed;
-
-import org.broad.tribble.Feature;
-import org.broad.tribble.annotation.Strand;
-
-import java.awt.*;
-
-/**
- * @author jrobinso
- * @date Dec 24, 2009
- */
-public interface BEDFeature extends Feature {
- Strand getStrand();
-
- String getType();
-
- Color getColor();
-
- String getDescription();
-
- java.util.List<FullBEDFeature.Exon> getExons();
-
- String getName();
-
- float getScore();
-
- String getLink();
-}
diff --git a/src/java/org/broad/tribble/bed/FullBEDFeature.java b/src/java/org/broad/tribble/bed/FullBEDFeature.java
deleted file mode 100644
index 0aef4c9..0000000
--- a/src/java/org/broad/tribble/bed/FullBEDFeature.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.bed;
-
-import org.broad.tribble.annotation.Strand;
-
-import java.util.ArrayList;
-
-/**
- * Object for full BED file.
- */
-public class FullBEDFeature extends SimpleBEDFeature implements BEDFeature {
-
- private java.util.List<Exon> exons = new ArrayList();
-
- public FullBEDFeature(String chr, int start, int end) {
- super(start, end, chr);
-
- }
-
- public java.util.List<Exon> getExons() {
- return exons;
- }
-
- public void setExons(java.util.List<Exon> exons) {
- this.exons = exons;
- }
-
- public void addExon(Exon exon) {
- if (exon == null) {
- this.exons = new ArrayList();
- }
- exons.add(exon);
- }
-
- public void addExon(int exonStart, int exonEnd, int cdStart, int cdEnd, int exonNumber) {
- Exon exon = new Exon(exonStart, exonEnd);
- exon.setCodingStart(cdStart);
- exon.setCodingEnd(cdEnd);
- exon.setNumber(exonNumber);
- addExon(exon);
- }
-
- /**
- * A sub region of a feature. For example, a Gene exon
- *
- * @author jrobinso
- */
- public class Exon {
-
- int start;
- int end;
- /**
- * The index of the exon relative to the start codon. The exon with the start
- * codon is number "1".
- */
- private int number;
- private int readingFrame = -1;
-
- /**
- * Coding start position. This is the leftmost position of the coding region, not neccessarily the 5'utr end
- */
- private int codingStart;
- private int codingEnd;
- boolean utr = false;
-
- // The position of the first base of this exon relative to the start of the mRNA. This will correspond
- // to either the beginning or end of the exon, depending on the strand
- private int mrnaBase = -1;
-
-
- public void setMrnaBase(int base) {
- this.mrnaBase = base;
- }
-
-
- /**
- * Constructs ...
- *
- * @param start
- * @param end
- */
- public Exon(int start, int end) {
- this.start = start;
- this.end = end;
-
- // By default the entre exon is a coding region
- this.codingStart = start;
- this.codingEnd = end;
- }
-
- /**
- * Flag indicating that the entire exon is the UTR.
- *
- * @param utr
- */
- public void setUTR(boolean utr) {
- this.utr = utr;
- if (strand == Strand.POSITIVE) {
- codingStart = codingEnd = end;
- } else {
- codingStart = codingEnd = start;
- }
- }
-
- /**
- * Method description
- *
- * @param codingStart
- */
- public void setCodingStart(int codingStart) {
- this.codingStart = Math.max(start, codingStart);
- }
-
- /**
- * Method description
- *
- * @param codingEnd
- */
- public void setCodingEnd(int codingEnd) {
- this.codingEnd = Math.min(end, codingEnd);
- }
-
- /**
- * Method description
- *
- * @param offset
- */
- public void setReadingFrame(int offset) {
- this.readingFrame = offset;
- }
-
- /**
- * Method description
- *
- * @param phase
- */
- public void setPhase(int phase) {
- if (strand == Strand.POSITIVE) {
- readingFrame = phase;
- } else if (strand == Strand.NEGATIVE) {
- int modLen = (getCodingLength() - phase) % 3;
- readingFrame = modLen;
- }
- }
-
-
- /**
- * Method description
- *
- * @return
- */
- public int getCdStart() {
- return codingStart;
- }
-
- /**
- * Method description
- *
- * @return
- */
- public int getCdEnd() {
- return this.codingEnd;
- }
-
- /**
- * Method description
- *
- * @return
- */
- public int getCodingLength() {
- return utr ? 0 : Math.max(0, codingEnd - codingStart + 1);
- }
-
- /**
- * This is exposed for unit tests.
- *
- * @return
- */
- int getReadingShift() {
- return readingFrame;
- }
-
-
- public String getValueString(double position) {
- String msg = number > 0 ? "Exon number: " + number : "";
- return msg;
- }
-
- public int getNumber() {
- return number;
- }
-
- public void setNumber(int number) {
- this.number = number;
- }
- }
-
-
- public class Exon2 {
-
- /**
- * The index of the exon relative to the start codon. The exon with the start
- * codon is number "1".
- */
- private int number;
- private int readingFrame = -1;
-
- /**
- * Coding start position. This is the leftmost position of the coding region, not neccessarily the 5'utr end
- */
- private int start;
- private int end;
- private int codingStart;
- private int codingEnd;
- //private AminoAcidSequence aminoAcidSequence;
- boolean utr = false;
-
- // The position of the first base of this exon relative to the start of the mRNA. This will correspond
- // to either the beginning or end of the exon, depending on the strand
- private int mrnaBase = -1;
-
-
- public Exon2(int start, int end, int codingStart, int codingDne) {
-
- this.start = start;
- this.end = end;
- this.codingStart = codingStart;
- this.codingEnd = codingDne;
- }
-
-
- public void setMrnaBase(int base) {
- this.mrnaBase = base;
- }
-
- public int getAminoAcidNumber(int genomeCoordinate) {
- if (mrnaBase < 0) {
- return -1;
- }
- if (genomeCoordinate < getStart() || genomeCoordinate > getEnd()) {
- throw new IndexOutOfBoundsException();
- }
- if (getStrand() == Strand.POSITIVE) {
- int mrnaCoord = mrnaBase + (genomeCoordinate - codingStart) - 1;
- return mrnaCoord < 0 ? -1 : mrnaCoord / 3 + 1;
-
- } else if (getStrand() == Strand.NEGATIVE) {
- int mrnaCoord = mrnaBase + (codingEnd - genomeCoordinate);
- return mrnaCoord < 0 ? -1 : mrnaCoord / 3 + 1;
-
- } else {
- return 0;
- }
- }
-
- /**
- * Flag indicating that the entire exon is the UTR.
- *
- * @param utr
- */
- public void setUTR(boolean utr) {
- this.utr = utr;
- if (getStrand() == Strand.POSITIVE) {
- codingStart = codingEnd = getEnd();
- } else {
- codingStart = codingEnd = getStart();
- }
- }
-
- /**
- * Method description
- *
- * @param codingStart
- */
- public void setCodingStart(int codingStart) {
- this.codingStart = Math.max(getStart(), codingStart);
- }
-
- /**
- * Method description
- *
- * @param codingEnd
- */
- public void setCodingEnd(int codingEnd) {
- this.codingEnd = Math.min(getEnd(), codingEnd);
- }
-
- /**
- * Method description
- *
- * @param offset
- */
- public void setReadingFrame(int offset) {
- this.readingFrame = offset;
- }
-
- /**
- * Method description
- *
- * @param phase
- */
- public void setPhase(int phase) {
- if (getStrand() == Strand.POSITIVE) {
- readingFrame = phase;
- } else if (getStrand() == Strand.NEGATIVE) {
- int modLen = (getCodingLength() - phase) % 3;
- readingFrame = modLen;
- }
- }
-
-
- /**
- * Method description
- *
- * @return
- */
- public int getCdStart() {
- return codingStart;
- }
-
- /**
- * Method description
- *
- * @return
- */
- public int getCdEnd() {
- return this.codingEnd;
- }
-
- /**
- * Method description
- *
- * @return
- */
- public int getCodingLength() {
- return utr ? 0 : Math.max(0, codingEnd - codingStart);
- }
-
- /**
- * This is exposed for unit tests.
- *
- * @return
- */
- int getReadingShift() {
- return readingFrame;
- }
-
-
- /**
- * Method description
- *
- * @return
- */
- /*
- public AminoAcidSequence getAminoAcidSequence() {
- if (aminoAcidSequence == null) {
- computeAminoAcidSequence();
- }
- return aminoAcidSequence;
- }
- */
-
-
- /*
- public void setAminoAcidSequence(AminoAcidSequence aminoAcidSequence) {
- this.aminoAcidSequence = aminoAcidSequence;
- }
- */
-
- /*
- private void computeAminoAcidSequence() {
-
- if (utr) {
- return;
- }
- int start = getStart();
- int end = getEnd();
- String chr = getChr();
- if (readingFrame >= 0) {
- int readStart = (codingStart > start) ? codingStart : start + readingFrame;
- int readEnd = Math.min(end, codingEnd);
- if (readEnd > readStart + 3) {
- String genome = IGVModel.getInstance().getViewContext().getGenomeId();
- aminoAcidSequence = AminoAcidManager.getAminoAcidSequence(genome, chr, readStart,
- readEnd, getStrand());
- }
- }
- }
- */
-
-
- public String getValueString(double position) {
- String msg = number > 0 ? "Exon number: " + number : "";
- int aaNumber = this.getAminoAcidNumber((int) position);
- if (aaNumber > 0) {
- msg += "<br>Amino acid number: " + aaNumber;
- }
- return msg;
- }
-
- public int getNumber() {
- return number;
- }
-
- public void setNumber(int number) {
- this.number = number;
- }
-
- }
-
-}
diff --git a/src/java/org/broad/tribble/bed/SimpleBEDFeature.java b/src/java/org/broad/tribble/bed/SimpleBEDFeature.java
deleted file mode 100644
index 0e8bdc5..0000000
--- a/src/java/org/broad/tribble/bed/SimpleBEDFeature.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.bed;
-
-import org.broad.tribble.annotation.Strand;
-
-import java.awt.*;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Feature from a BED file without exon blocks.
- */
-public class SimpleBEDFeature implements BEDFeature {
- protected String chr;
- protected int start = -1;
- protected int end = -1;
- protected Strand strand = Strand.NONE;
- private String name = "";
- private float score = Float.NaN;
- private String type = "";
- private Color color;
- private String description;//protected float confidence;
- //private String identifier;
- private String link;
-
- public SimpleBEDFeature(int start, int end, String chr) {
- this.start = start;
- this.end = end;
- this.chr = chr;
- }
-
- public String getChr() {
- return chr;
- }
-
- public int getStart() {
- return start;
- }
-
- public int getEnd() {
- return end;
- }
-
- public Strand getStrand() {
- return strand;
- }
-
- public void setStrand(Strand strand) {
- this.strand = strand;
- }
-
- public void setChr(String chr) {
- this.chr = chr;
- }
-
- public void setStart(int start) {
- this.start = start;
- }
-
- public void setEnd(int end) {
- this.end = end;
- }
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public Color getColor() {
- return color;
- }
-
- public void setColor(Color color) {
- this.color = color;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public float getScore() {
- return score;
- }
-
- public void setScore(float score) {
- this.score = score;
- }
-
- public String getLink() {
- return link;
- }
-
- public void setLink(String link) {
- this.link = link;
- }
-
- final static List<FullBEDFeature.Exon> emptyExonList = new ArrayList();
-
- public java.util.List<FullBEDFeature.Exon> getExons() {
- return emptyExonList;
- }
-}
diff --git a/src/java/org/broad/tribble/dbsnp/OldDbSNPCodec.java b/src/java/org/broad/tribble/dbsnp/OldDbSNPCodec.java
deleted file mode 100644
index 5e241fb..0000000
--- a/src/java/org/broad/tribble/dbsnp/OldDbSNPCodec.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.dbsnp;
-
-import org.broad.tribble.AsciiFeatureCodec;
-import org.broad.tribble.Feature;
-import org.broad.tribble.annotation.Strand;
-import org.broad.tribble.readers.LineIterator;
-
-
-/**
- * @author aaron
- *
- * Example format:
- * 585 chr1 433 433 rs56289060 0 + - - -/C genomic insertion unknown 0 0 unknown between 1
- * 585 chr1 491 492 rs55998931 0 + C C C/T genomic single unknown 0 0 unknown exact 1
- */
-public class OldDbSNPCodec extends AsciiFeatureCodec<OldDbSNPFeature> {
-
- // the number of tokens we expect to parse from a dbSNP line
- static final int expectedTokenCount = 18;
-
- public OldDbSNPCodec() {
- super(OldDbSNPFeature.class);
- }
-
- public Feature decodeLoc(String line) {
- return decode(line);
- }
-
- /**
- * Decode a line as a db SNP Feature.
- *
- * @param line the line to decode
- *
- * @return Return the Feature encoded by the line, or null if the line does not represent a feature (e.g. is
- * a comment)
- *
- * The ordering of db SNP fields from the UCSC track browser:
- * 1 bin
- * 2 chromosome
- * 3 chromosome Start
- * 4 chromosome End
- * 5 name
- * 6 score
- * 7 strand
- * 8 reference base NCBI
- * 9 reference base UCSC
- * 10 observed base
- * 11 mol. Type
- * 12 class
- * 13 valid
- * 14 avHet
- * 15 avHetSE
- * 16 functions
- * 17 locType
- * 18 weight
- */
- public OldDbSNPFeature decode(String line) {
- // we may be asked to process a header line; ignore it
- if (line.startsWith("#")) return null;
-
- // split the line
- String[] tokens = line.split("\\t+");
- return decode(tokens);
- }
-
- @Override
- public Object readActualHeader(final LineIterator reader) {
- return null;
- }
-
- public OldDbSNPFeature decode(String[] tokens){
- // check to see if we've parsed the string into the right number of tokens (expectedTokenCount)
- if (tokens.length != expectedTokenCount)
- return null;
- // throw new CodecLineParsingException("the dbSNP line didn't have the expected number of tokens " +
- // "(expected = " + expectedTokenCount + ", saw = " + tokens.length + " on " +
- //
- // "line = " + line + ")");
- // create a new feature from the line
- int start = Integer.valueOf(tokens[2])+1;
- int stop = Integer.valueOf(tokens[3]);
- stop = (stop < start) ? start : stop; // Indels can be of length zero in dbSNP, we make them length one
- OldDbSNPFeature feature = new OldDbSNPFeature(tokens[1],
- start,
- stop);
-
- feature.setRsID(tokens[4]);
- feature.setScore(Integer.valueOf(tokens[5]));
- feature.setStrand(tokens[6].equals("+") ? Strand.POSITIVE : Strand.NEGATIVE);
- feature.setNCBIRefBase(tokens[7]);
- feature.setUCSCRefBase(tokens[8]);
- // split the observed bases
- feature.setObserved(tokens[9].split("/"));
- feature.setMolType(tokens[10]);
- feature.setVariantType(tokens[11]);
- feature.setValidationStatus(tokens[12]);
- feature.setAvHet(Double.valueOf(tokens[13]));
- feature.setAvHetSE(Double.valueOf(tokens[14]));
- feature.setFunction(tokens[15]);
- feature.setLocationType(tokens[16]);
- feature.setWeight(Integer.valueOf(tokens[17]));
-
- // return the setup feature
- return feature;
- }
-}
diff --git a/src/java/org/broad/tribble/dbsnp/OldDbSNPFeature.java b/src/java/org/broad/tribble/dbsnp/OldDbSNPFeature.java
deleted file mode 100644
index 2c5547c..0000000
--- a/src/java/org/broad/tribble/dbsnp/OldDbSNPFeature.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.dbsnp;
-
-import org.broad.tribble.Feature;
-import org.broad.tribble.annotation.Strand;
-
-
-/**
- * @author aaron
- *
- * This class represents a DBSNP track, as retrieved from the UCSC browser.
- *
- * Example format:
- * bin chrom chromStart chromEnd rsID score strand refNCBI refUCSC observed molType class valid avHet avHetSE func locType weight
- * 585 chr1 433 433 rs56289060 0 + - - -/C genomic insertion unknown 0 0 unknown between 1
- * 585 chr1 491 492 rs55998931 0 + C C C/T genomic single unknown 0 0 unknown exact 1
- */
-public class OldDbSNPFeature implements Feature {
-
- private String contig; // our contig location
- private int start; // our starting location, zero based
- private int stop; // our stopping location
-
- private String rsID = ""; // the snp indentifier
- private int score = 0;
- private Strand strand = Strand.NONE; // Which DNA strand contains the observed alleles
-
- private String ncbiRefBase = "N"; // the reference base according to NCBI
- private String ucscRefBase = "N"; // the reference base according to UCSC
-
- private String[] mObserved = null; // The sequences of the observed alleles
-
- private String molType = "genomic"; // molecule type
- private String classType = "unknown"; // The class of variant (simple, insertion, deletion, range, etc.)
- private String validationStatus; // The validation status of the SNP
-
- private double avHet = 0.0; // The average heterozygosity from all observations
- private double avHetSE = 0.0; // The Standard Error for the average heterozygosity
-
- private String function = "unknown"; // The functional category of the SNP (coding-synon, coding-nonsynon, intron, etc.)
- private String locationType = "unknown"; // How the variant affects the reference sequence
- private int weight = 0; // The quality of the alignment
-
- /**
- * create the dbSNP feature, given the following information:
- *
- * @param contig the contig rsID
- * @param start the start position, one based
- * @param stop the stop position, one based
- */
- OldDbSNPFeature(String contig,
- int start,
- int stop) {
- this.contig = contig;
- this.start = start;
- this.stop = stop;
- }
-
- /*
- * the required getting and setter methods
- */
-
- public String getChr() {
- return contig;
- }
-
- public int getStart() {
- return start;
- }
-
- public int getEnd() {
- return stop;
- }
-
- /*
- * getter and setter methods for the rest of the dbSNP data
- */
-
- public int getScore() {
- return score;
- }
-
- public void setScore(int score) {
- this.score = score;
- }
-
- public Strand getStrand() {
- return strand;
- }
-
- public void setStrand(Strand strand) {
- this.strand = strand;
- }
-
- public String getNCBIRefBase() {
- return ncbiRefBase;
- }
-
- public void setNCBIRefBase(String ncbiRefBase) {
- this.ncbiRefBase = ncbiRefBase;
- }
-
- public String getUCSCRefBase() {
- return ucscRefBase;
- }
-
- public void setUCSCRefBase(String ucscRefBase) {
- this.ucscRefBase = ucscRefBase;
- }
-
- public String[] getObserved() {
- return mObserved;
- }
-
- public void setObserved(String[] mObserved) {
- this.mObserved = mObserved;
- }
-
- public String getMolType() {
- return molType;
- }
-
- public void setMolType(String molType) {
- this.molType = molType;
- }
-
- public String getVariantType() {
- return classType;
- }
-
- public void setVariantType(String classType) {
- this.classType = classType;
- }
-
- public String getValidationStatus() {
- return validationStatus;
- }
-
- public void setValidationStatus(String validationStatus) {
- this.validationStatus = validationStatus;
- }
-
- public double getAvHet() {
- return avHet;
- }
-
- public void setAvHet(double avHet) {
- this.avHet = avHet;
- }
-
- public double getAvHetSE() {
- return avHetSE;
- }
-
- public void setAvHetSE(double avHetSE) {
- this.avHetSE = avHetSE;
- }
-
- public String getFunction() {
- return function;
- }
-
- public void setFunction(String function) {
- this.function = function;
- }
-
- public String getLocationType() {
- return locationType;
- }
-
- public void setLocationType(String locationType) {
- this.locationType = locationType;
- }
-
- public int getWeight() {
- return weight;
- }
-
- public void setWeight(int weight) {
- this.weight = weight;
- }
-
- public String getRsID() {
- return rsID;
- }
-
- public void setRsID(String rsID) {
- this.rsID = rsID;
- }
-}
diff --git a/src/java/org/broad/tribble/example/CountRecords.java b/src/java/org/broad/tribble/example/CountRecords.java
deleted file mode 100644
index 429926c..0000000
--- a/src/java/org/broad/tribble/example/CountRecords.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.example;
-
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.Feature;
-import org.broad.tribble.FeatureCodec;
-import org.broad.tribble.Tribble;
-import org.broad.tribble.bed.BEDCodec;
-import org.broad.tribble.dbsnp.OldDbSNPCodec;
-import org.broad.tribble.gelitext.GeliTextCodec;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import org.broad.tribble.index.linear.LinearIndex;
-import org.broad.tribble.util.LittleEndianOutputStream;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * An example of how to index a feature file, and then count all the records in the file.
- * This is also useful for testing the feature reader
- */
-public class CountRecords {
-
- /**
- * The main method of this class:
- * 1) checks to see that the feature file exists
- * 2) loads an index from disk, if one doesn't exist, it creates it and writes it to disk
- * 3) creates a FeatureSource
- * 4) iterates over the records, emitting a final tally for the number of features seen
- *
- * @param args a single parameter, the file name to load
- */
- public static void main(String[] args) {
-
- // check yourself before you wreck yourself - we require one arg, the input file
- if (args.length > 2)
- printUsage();
-
- // our feature file
- File featureFile = new File(args[0]);
- if (!featureFile.exists()) {
- System.err.println("File " + featureFile.getAbsolutePath() + " doesnt' exist");
- printUsage();
- }
-
- int optimizeIndex = args.length == 2 ? Integer.valueOf(args[1]) : -1;
-
- // determine the codec
- FeatureCodec codec = getFeatureCodec(featureFile);
-
- runWithIndex(featureFile, codec, optimizeIndex);
-
- }
-
- /**
- *
- * @see org.broad.tribble.index.linear.LinearIndex#optimize(double)
- * @param featureInput File containing features
- * @param codec Codec used to read the features
- * @param optimizeThreshold Threshold used to optimize the linear index
- * @return
- */
- public static long runWithIndex(File featureInput, FeatureCodec codec, int optimizeThreshold) {
- // get an index
- Index index = loadIndex(featureInput, codec);
- if ( optimizeThreshold != -1 )
- ((LinearIndex)index).optimize(optimizeThreshold);
-
- // get a reader
- AbstractFeatureReader reader = null;
- try {
- reader = AbstractFeatureReader.getFeatureReader(featureInput.getAbsolutePath(), codec, index);
-
- // now read iterate over the file
- long recordCount = 0l;
-
- // this call could be replaced with a query
- Iterator<Feature> iter = reader.iterator();
-
- // cycle through the iterators
- while (iter.hasNext()) {
- Feature feat = iter.next();
- ++recordCount;
- }
-
- System.err.println("We saw " + recordCount + " record in file " + featureInput);
- return recordCount;
-
- } catch (IOException e) {
- throw new RuntimeException("Something went wrong while reading feature file " + featureInput, e);
- }
- }
-
- /**
- * print usage information
- */
- public static void printUsage() {
- System.err.println("Usage: java -jar CountRecords.jar <inputFile>");
- System.err.println(" Where input can be of type: VCF (ends in .vcf or .VCF");
- System.err.println(" Bed (ends in .bed or .bed");
- System.err.println(" OldDbSNP (ends in .snp or .rod");
- /**
- * you could add others here; also look in the GATK code-base for an example of a dynamic way
- * to load Tribble codecs.
- */
- System.exit(1);
- }
-
- /**
- *
- * @param featureFile the feature file
- * @param codec the codec to decode features with
- * @return an index instance
- */
- public static Index loadIndex(File featureFile, FeatureCodec codec) {
- // lets setup a index file name
- File indexFile = Tribble.indexFile(featureFile);
-
- // our index instance;
- Index index = null;
-
- // can we read the index file
- if (indexFile.canRead()) {
- System.err.println("Loading index from disk for index file -> " + indexFile);
- index = IndexFactory.loadIndex(indexFile.getAbsolutePath());
- // else we want to make the index, and write it to disk if possible
- } else {
- System.err.println("Creating the index and memory, then writing to disk for index file -> " + indexFile);
- index = createAndWriteNewIndex(featureFile,indexFile,codec);
- }
-
- return index;
- }
-
- /**
- * creates a new index, given the feature file and the codec
- * @param featureFile the feature file (i.e. .vcf, .bed)
- * @param indexFile the index file; the location we should be writing the index to
- * @param codec the codec to read features with
- * @return an index instance
- */
- public static Index createAndWriteNewIndex(File featureFile, File indexFile, FeatureCodec codec) {
- try {
- Index index = IndexFactory.createLinearIndex(featureFile, codec);
-
- // try to write it to disk
- LittleEndianOutputStream stream = new LittleEndianOutputStream(new FileOutputStream(indexFile));
- index.write(stream);
- stream.close();
-
- return index;
- } catch (IOException e) {
- throw new RuntimeException("Unable to create index from file " + featureFile,e);
- }
- }
-
- /**
- * Return a {@code FeatureCodec} instance appropriate for the given
- * {@code featureFile}. Codec is generated based on file extension
- * @param featureFile
- * @return
- * @throws IllegalArgumentException If a codec cannot be found
- */
- public static FeatureCodec getFeatureCodec(File featureFile) {
- // quickly determine the codec type
- //if (featureFile.getName().endsWith(".vcf") || featureFile.getName().endsWith(".VCF") )
- // return new VCFCodec();
- if (featureFile.getName().endsWith(".bed") || featureFile.getName().endsWith(".BED") )
- return new BEDCodec();
- if (featureFile.getName().endsWith(".snp") || featureFile.getName().endsWith(".rod") )
- return new OldDbSNPCodec();
- if (featureFile.getName().endsWith(".geli.calls") || featureFile.getName().endsWith(".geli") )
- return new GeliTextCodec();
- //if (featureFile.getName().endsWith(".txt") || featureFile.getName().endsWith(".TXT") )
- // return new SoapSNPCodec();
- throw new IllegalArgumentException("Unable to determine correct file type based on the file name, for file -> " + featureFile);
- }
-}
diff --git a/src/java/org/broad/tribble/example/ExampleBinaryCodec.java b/src/java/org/broad/tribble/example/ExampleBinaryCodec.java
deleted file mode 100644
index 0e01df0..0000000
--- a/src/java/org/broad/tribble/example/ExampleBinaryCodec.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.example;
-
-import org.broad.tribble.*;
-import org.broad.tribble.readers.AsciiLineReader;
-import org.broad.tribble.readers.LineIterator;
-import org.broad.tribble.readers.PositionalBufferedStream;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * An example binary codec that encodes / decodes contig / start / stop values via DataInputStreams
- *
- * @author Mark DePristo
- */
-public class ExampleBinaryCodec extends BinaryFeatureCodec<Feature> {
- public final static String HEADER_LINE = "# BinaryTestFeature";
-
- @Override
- public Feature decodeLoc(final PositionalBufferedStream stream) throws IOException {
- return decode(stream);
- }
-
- @Override
- public Feature decode(final PositionalBufferedStream stream) throws IOException {
- DataInputStream dis = new DataInputStream(stream);
- String contig = dis.readUTF();
- int start = dis.readInt();
- int stop = dis.readInt();
- return new BasicFeature(contig, start, stop);
- }
-
- @Override
- public FeatureCodecHeader readHeader(final PositionalBufferedStream stream) throws IOException {
- // Construct a reader that does not read ahead (because we don't want to consume data from the stream that is not the header)
- final AsciiLineReader nonReadAheadLineReader = new AsciiLineReader(stream);
- final List<String> headerLines = new ArrayList<String>();
- long headerLengthInBytes = 0;
- while (stream.peek() == ('#' & 0xff)) { // Look for header lines, which are prefixed by '#'.
- headerLines.add(nonReadAheadLineReader.readLine());
- headerLengthInBytes = stream.getPosition();
- }
- return new FeatureCodecHeader(headerLines, headerLengthInBytes);
- }
-
- @Override
- public Class<Feature> getFeatureType() {
-
- return Feature.class;
- }
- @Override
- public boolean canDecode(final String path) {
- return false;
- }
-
- /**
- * Convenience method that creates an ExampleBinaryCodec file from another feature file.
- *
- * For testing purposes really
- *
- * @param source file containing the features
- * @param dest the place to write the binary features
- * @param codec of the source file features
- * @throws IOException
- */
- public static <FEATURE_TYPE extends Feature> void convertToBinaryTest(final File source, final File dest, final FeatureCodec<FEATURE_TYPE, LineIterator> codec) throws IOException {
- final FeatureReader<FEATURE_TYPE> reader = AbstractFeatureReader.getFeatureReader(source.getAbsolutePath(), codec, false); // IndexFactory.loadIndex(idxFile));
- final OutputStream output = new FileOutputStream(dest);
- ExampleBinaryCodec.convertToBinaryTest(reader, output);
- }
-
- /**
- * Convenience method that creates an ExampleBinaryCodec file from another feature file.
- *
- * For testing purposes really
- *
- * @throws IOException
- */
- public static <FEATURE_TYPE extends Feature> void convertToBinaryTest(final FeatureReader<FEATURE_TYPE> reader, final OutputStream out) throws IOException {
- DataOutputStream dos = new DataOutputStream(out);
- dos.writeBytes(HEADER_LINE + "\n");
- Iterator<FEATURE_TYPE> it = reader.iterator();
- while ( it.hasNext() ) {
- final Feature f = it.next();
- dos.writeUTF(f.getChr());
- dos.writeInt(f.getStart());
- dos.writeInt(f.getEnd());
- }
- dos.close();
- reader.close();
- }
-}
diff --git a/src/java/org/broad/tribble/example/IndexToTable.java b/src/java/org/broad/tribble/example/IndexToTable.java
deleted file mode 100644
index ee636d6..0000000
--- a/src/java/org/broad/tribble/example/IndexToTable.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-package org.broad.tribble.example;
-
-import org.broad.tribble.index.IndexFactory;
-import org.broad.tribble.index.linear.LinearIndex;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-import java.io.FileNotFoundException;
-
-
-public class IndexToTable {
-
- /**
- * this class:
- * 1) checks to see that the feature file exists
- * 2) loads an index from disk, if one doesn't exist, it creates it and writes it to disk
- * 3) Converts the index to a human readable table
- * @see LinearIndex#writeTable(java.io.PrintStream)
- *
- * @param args 2 parameters:
- * 1) The path of the file to index
- * 2) The output file path
- */
- public static void main(String[] args) {
-
- // check yourself before you wreck yourself - we require one arg, the input file
- if (args.length != 2)
- printUsage();
-
- //LinearIndex.enableAdaptiveIndexing = false;
- LinearIndex idx = (LinearIndex)IndexFactory.loadIndex(new File(args[0]).getAbsolutePath());
- try {
- idx.writeTable(new PrintStream(new FileOutputStream(new File(args[1]))));
- } catch ( FileNotFoundException e ) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- /**
- * print usage information
- */
- public static void printUsage() {
- System.err.println("Usage: java -jar IndexToTable.jar index.file output.table");
- System.exit(1);
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broad/tribble/example/IndicesAreEqual.java b/src/java/org/broad/tribble/example/IndicesAreEqual.java
deleted file mode 100644
index c241e13..0000000
--- a/src/java/org/broad/tribble/example/IndicesAreEqual.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.example;
-
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-
-import java.io.File;
-
-/**
- * Check with two index files are equal
- */
-public class IndicesAreEqual {
-
- /**
- *
- * @param args 2 parameters, the paths of the two index files to compare
- */
- public static void main(String[] args) {
- if ( args.length != 2 )
- printUsage();
- else {
- Index index1 = loadIndex(args[0]);
- Index index2 = loadIndex(args[1]);
- System.out.printf("%n");
- System.out.printf("index1: %s%n", args[0]);
- System.out.printf("index2: %s%n", args[1]);
- boolean eq = index1.equals(index2);
- System.out.printf(" equals() = %b%n", eq);
- }
- }
-
- /**
- * print usage information
- */
- public static void printUsage() {
- System.err.println("Usage: java -jar IndicesAreEqual.jar index1 index2");
- System.err.println(" Prints out true / false if index1 and index2 are equal");
- System.exit(1);
- }
-
- /**
- * @return an index instance
- */
- public static Index loadIndex(String filename) {
- //System.err.println("Loading index from disk for index file -> " + filename);
- File file = new File(filename);
- if (file.canRead()) {
- return IndexFactory.loadIndex(file.getAbsolutePath());
- } else {
- printUsage();
- return null;
- }
- }
-}
diff --git a/src/java/org/broad/tribble/example/ProfileIndexReading.java b/src/java/org/broad/tribble/example/ProfileIndexReading.java
deleted file mode 100644
index 5ec49e7..0000000
--- a/src/java/org/broad/tribble/example/ProfileIndexReading.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-package org.broad.tribble.example;
-
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-
-public class ProfileIndexReading {
-
- /**
- * This class times the loading of an index file a number of times,
- * and prints the result of each trial
- * @param args Two parameters:
- * 1) The number of trials to run
- * 2) Index file to load
- */
- public static void main(String[] args) {
-
- // check yourself before you wreck yourself - we require one arg, the input file
- if (args.length < 2)
- printUsage();
-
- int iterations = Integer.valueOf(args[0]);
- for ( int j = 1; j < args.length; j++ ) {
- String indexFile = args[j];
- System.out.printf("Reading %s%n", indexFile);
- long startTime = System.currentTimeMillis();
- for ( int i = 0; i < iterations; i++ ) {
- System.out.printf(" iteration %d%n", i);
- Index index = IndexFactory.loadIndex(indexFile);
- }
- long stopTime = System.currentTimeMillis();
- System.out.printf("Runtime %s %.2f%n", indexFile, (stopTime - startTime) / 1000.0);
- }
- }
-
- /**
- * print usage information
- */
- public static void printUsage() {
- System.err.println("Usage: java -jar ReadIndices.jar iterations index.file...");
- System.exit(1);
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broad/tribble/exception/CodecLineParsingException.java b/src/java/org/broad/tribble/exception/CodecLineParsingException.java
deleted file mode 100644
index 23e336b..0000000
--- a/src/java/org/broad/tribble/exception/CodecLineParsingException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.exception;
-
-
-/**
- * Class CodecLineParsingException
- *
- * a generic exception we use if the codec has trouble parsing the line its given
- *
- * @author aaron
- */
-public class CodecLineParsingException extends RuntimeException {
-
- public CodecLineParsingException(Throwable cause) {
- super(cause);
- }
-
- public CodecLineParsingException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public CodecLineParsingException(String message) {
- super(message);
- }
-
- public CodecLineParsingException() {
- }
-}
diff --git a/src/java/org/broad/tribble/exception/UnsortedFileException.java b/src/java/org/broad/tribble/exception/UnsortedFileException.java
deleted file mode 100644
index df179fc..0000000
--- a/src/java/org/broad/tribble/exception/UnsortedFileException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.exception;
-
-/**
- * an exception for when we've discovered that an input file is unsorted; sorted files are required by Tribble
- */
-public class UnsortedFileException extends RuntimeException {
-
- public UnsortedFileException(Throwable cause) {
- super(cause);
- }
-
- public UnsortedFileException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public UnsortedFileException(String message) {
- super(message);
- }
-
- public UnsortedFileException() {
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broad/tribble/gelitext/DiploidGenotype.java b/src/java/org/broad/tribble/gelitext/DiploidGenotype.java
deleted file mode 100644
index 3b3847e..0000000
--- a/src/java/org/broad/tribble/gelitext/DiploidGenotype.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.gelitext;
-
-
-/**
- * Class DiploidGenotype
- *
- * Enum describing all possible combinations of diploid genotype variations;
- * AA, AC, etc.
- *
- * @author aaron
- */
-public enum DiploidGenotype {
- AA, AC, AG, AT, CC, CG, CT, GG, GT, TT;
-
- public static DiploidGenotype toDiploidGenotype(String genotype) {
- if (genotype.length() != 2)
- throw new DiploidGenotypeException("Genotype string for conversion should be of length 2, we were passed = " + genotype);
- genotype = genotype.toUpperCase();
- for (DiploidGenotype g: DiploidGenotype.values())
- if (g.toString().equals(genotype)) return g;
- throw new DiploidGenotypeException("Unable to find genotype matching " + genotype);
- }
-
- public boolean isHet() {
- return toString().toCharArray()[0] != toString().toCharArray()[1];
- }
-
- public boolean containsBase(char base) {
- return (toString().charAt(0) == base || toString().charAt(1) == base);
- }
-}
-
-class DiploidGenotypeException extends RuntimeException {
- DiploidGenotypeException(String s) {
- super(s);
- }
-
- DiploidGenotypeException(String s, Throwable throwable) {
- super(s, throwable);
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broad/tribble/gelitext/GeliTextCodec.java b/src/java/org/broad/tribble/gelitext/GeliTextCodec.java
deleted file mode 100644
index b8b0c6b..0000000
--- a/src/java/org/broad/tribble/gelitext/GeliTextCodec.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.gelitext;
-
-import net.sf.samtools.util.CollectionUtil;
-import org.broad.tribble.AsciiFeatureCodec;
-import org.broad.tribble.Feature;
-import org.broad.tribble.exception.CodecLineParsingException;
-import org.broad.tribble.readers.LineIterator;
-
-import java.util.Arrays;
-
-
-/**
- * <p/>
- * A codec for parsing geli text files, which is the text version of the geli binary format.
- * <p/>
- * <p/>
- * GELI text has the following tab-seperated fields:
- * contig the contig (string)
- * position the position on the contig (long)
- * refBase the reference base (char)
- * depthOfCoverage the depth of coverage at this position (int)
- * maximumMappingQual the maximum mapping quality of a read at this position (int)
- * genotype the called genotype (string)
- * LODBestToReference the LOD score of the best to the reference (double)
- * LODBestToNext the LOD score of the best to the next best genotype (double)
- * likelihoods the array of all genotype likelihoods, in ordinal ordering (array of 10 doubles, in ordinal order)
- *
- * @author aaron
- */
-public class GeliTextCodec extends AsciiFeatureCodec<GeliTextFeature> {
- public GeliTextCodec() {
- super(GeliTextFeature.class);
- }
-
- public Feature decodeLoc(final String line) {
- return decode(line);
- }
-
- @Override
- public GeliTextFeature decode(final String line) {
- // clean out header lines and comments
- if (line.startsWith("#") || line.startsWith("@"))
- return null;
-
- // parse into tokens
- final String[] parts = line.trim().split("\\s+");
- return decode(parts);
- }
-
- @Override
- public Object readActualHeader(LineIterator reader) {
- return null;
- }
-
- public GeliTextFeature decode(final String[] tokens) {
- try {
- // check that we got the correct number of tokens in the split
- if (tokens.length != 18)
- throw new CodecLineParsingException("Invalid GeliTextFeature row found -- incorrect element count. Expected 18, got " + tokens.length + " line = " + CollectionUtil.join(Arrays.asList(tokens), " "));
-
- // UPPER case and sort
- final char[] x = tokens[5].toUpperCase().toCharArray();
- Arrays.sort(x);
- final String bestGenotype = new String(x);
-
- final double[] genotypeLikelihoods = new double[10];
- for (int pieceIndex = 8, offset = 0; pieceIndex < 18; pieceIndex++, offset++) {
- genotypeLikelihoods[offset] = Double.valueOf(tokens[pieceIndex]);
- }
- return new GeliTextFeature(tokens[0],
- Long.valueOf(tokens[1]),
- Character.toUpperCase(tokens[2].charAt(0)),
- Integer.valueOf(tokens[3]),
- Integer.valueOf(tokens[4]),
- DiploidGenotype.toDiploidGenotype(bestGenotype),
- Double.valueOf(tokens[6]),
- Double.valueOf(tokens[7]),
- genotypeLikelihoods);
- } catch (CodecLineParsingException e) {
- e.printStackTrace();
- throw new RuntimeException("Unable to parse line " + CollectionUtil.join(Arrays.asList(tokens), " "), e);
- } catch (NumberFormatException e) {
- e.printStackTrace();
- throw new RuntimeException("Unable to parse line " + CollectionUtil.join(Arrays.asList(tokens), " "), e);
- }
- }
-}
diff --git a/src/java/org/broad/tribble/gelitext/GeliTextFeature.java b/src/java/org/broad/tribble/gelitext/GeliTextFeature.java
deleted file mode 100644
index afdf7b8..0000000
--- a/src/java/org/broad/tribble/gelitext/GeliTextFeature.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.gelitext;
-
-import org.broad.tribble.Feature;
-
-import java.util.Arrays;
-
-
-/**
- * <p/>
- * Class GeliTextFeature
- * <p/>
- * This is a feature for the Geli text object, which is the text version of the Geli binary genotyping format.
- *
- * @author aaron
- */
-public class GeliTextFeature implements Feature {
-
- private final String contig; // the contig name
- private final long position; // the position on the contig
- private final char refBase; // the reference base
- private final int depthOfCoverage; // the depth of coverage at this position
- private final int maximumMappingQual; // the maximum mapping quality of a read at this position
- private final DiploidGenotype genotype; // the called genotype
- private final double LODBestToReference; // the LOD score of the best to the reference
- private final double LODBestToNext; // the LOD score of the best to the next best genotype
- private final double likelihoods[]; // the array of all genotype likelihoods, in ordinal order
-
- /**
- * Create a geli text feature, given:
- *
- * @param contig the contig
- * @param position the position on the contig
- * @param refBase the reference base
- * @param depthOfCoverage the depth of coverage at this position
- * @param maximumMappingQual the maximum mapping quality of a read at this position
- * @param genotype the called genotype
- * @param LODBestToReference the LOD score of the best to the reference
- * @param LODBestToNext the LOD score of the best to the next best genotype
- * @param likelihoods the array of all genotype likelihoods, in ordinal ordering
- */
- public GeliTextFeature(String contig,
- long position,
- char refBase,
- int depthOfCoverage,
- int maximumMappingQual,
- DiploidGenotype genotype,
- double LODBestToReference,
- double LODBestToNext,
- double[] likelihoods) {
- this.contig = contig;
- this.position = position;
- this.refBase = refBase;
- this.depthOfCoverage = depthOfCoverage;
- this.maximumMappingQual = maximumMappingQual;
- this.genotype = genotype;
- this.LODBestToReference = LODBestToReference;
- this.LODBestToNext = LODBestToNext;
- this.likelihoods = likelihoods;
- }
-
- /** Return the features reference sequence name, e.g chromosome or contig */
- public String getChr() {
- return this.contig;
- }
-
- /** Return the start position in 1-based coordinates (first base is 1) */
- public int getStart() {
- return (int) this.position;
- }
-
- /**
- * Return the end position following 1-based fully closed conventions. The length of a feature is
- * end - start + 1;
- */
- public int getEnd() {
- return (int) this.position;
- }
-
- public char getRefBase() {
- return refBase;
- }
-
- public int getDepthOfCoverage() {
- return depthOfCoverage;
- }
-
- public int getMaximumMappingQual() {
- return maximumMappingQual;
- }
-
- public DiploidGenotype getGenotype() {
- return genotype;
- }
-
- public double getLODBestToNext() {
- return LODBestToNext;
- }
-
- public double getLODBestToReference() {
- return LODBestToReference;
- }
-
- public double[] getLikelihoods() {
- return likelihoods;
- }
-
- private static double Epsilon = 0.0001;
- public boolean equals(Object o) {
- if (!(o instanceof GeliTextFeature)) return false;
- GeliTextFeature other = (GeliTextFeature)o;
- if (!Arrays.equals(likelihoods,other.likelihoods)) return false;
- if (!contig.equals(other.contig)) return false;
- if (!(position == other.position)) return false;
- if (!(refBase == other.refBase)) return false;
- if (!(depthOfCoverage == other.depthOfCoverage)) return false;
- if (!(maximumMappingQual == other.maximumMappingQual)) return false;
- if (!(genotype == other.genotype)) return false;
- if (!(Math.abs(LODBestToReference - other.LODBestToReference) < Epsilon)) return false;
- if (!(Math.abs(LODBestToNext - other.LODBestToNext) < Epsilon)) return false;
- return true;
- }
-}
diff --git a/src/java/org/broad/tribble/index/AbstractIndex.java b/src/java/org/broad/tribble/index/AbstractIndex.java
deleted file mode 100644
index a4aa781..0000000
--- a/src/java/org/broad/tribble/index/AbstractIndex.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index;
-
-import org.broad.tribble.Tribble;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.util.LittleEndianInputStream;
-import org.broad.tribble.util.LittleEndianOutputStream;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * <p/>
- * An abstract implementation of the index class. This class takes care of the basics that are common
- * to all of the current indexing classes; including the version information, common header properties,
- * and reading and writing the header to disk.
- *
- * @author jrobinso
- */
-public abstract class AbstractIndex implements MutableIndex {
-
- public enum IndexType {
- LINEAR(1),
- INTERVAL_TREE(2);
- public final int fileHeaderTypeIdentifier;
-
- IndexType(int fileHeaderTypeIdentifier) {
- this.fileHeaderTypeIdentifier = fileHeaderTypeIdentifier;
- }
- }
-
- // todo -- up to version 4 and use ETag to detect out of date
- // todo -- inode number + size in bytes + modification time
- // todo -- remove MD5
-
- // the current version of the index
- public static final int VERSION = 3;
- public static final int MAGIC_NUMBER = 1480870228; // byte[]{'T', 'I', 'D', 'X'};
-
-
- private final static String NO_MD5 = "";
- private final static long NO_FILE_SIZE = -1L;
- private final static long NO_TS = -1L;
-
- protected int version; // Our version value
- protected File indexedFile = null; // The file we've created this index for
- protected long indexedFileSize = NO_FILE_SIZE; // The size of the indexed file
- protected long indexedFileTS = NO_TS; // The timestamp
- protected String indexedFileMD5 = NO_MD5; // The MD5 value, generally not filled in (expensive to calc)
- protected int flags;
-
- public boolean hasFileSize() {
- return indexedFileSize != NO_FILE_SIZE;
- }
-
- public boolean hasTimestamp() {
- return indexedFileTS != NO_TS;
- }
-
- public boolean hasMD5() {
- return indexedFileMD5 != NO_MD5;
- }
-
- private LinkedHashMap<String, String> properties;
-
- /**
- * the map of our chromosome bins
- */
- protected LinkedHashMap<String, ChrIndex> chrIndices;
-
- /**
- * Any flags we're using
- */
- private static final int SEQUENCE_DICTIONARY_FLAG = 0x8000; // if we have a sequence dictionary in our header
-
- /**
- * @param obj
- * @return true if this and obj are 'effectively' equivalent data structures.
- */
- public boolean equalsIgnoreProperties(final Object obj) {
- if (this == obj) return true;
- if (!(obj instanceof AbstractIndex)) {
- System.err.printf("equals: %s not instance of AbstractIndex", obj);
- return false;
- }
-
- final AbstractIndex other = (AbstractIndex) obj;
-
- if (version != other.version) {
- System.err.printf("equals version: this %d != other %d%n", version, other.version);
- return false;
- }
-
- if (indexedFile != other.indexedFile && (indexedFile == null || !indexedFile.equals(other.indexedFile))) {
- System.err.printf("equals indexedFile: this %s != other %s%n", indexedFile, other.indexedFile);
- return false;
- }
-
- if (indexedFileSize != other.indexedFileSize) {
- System.err.printf("equals indexedFileSize: this %d != other %d%n", indexedFileSize, other.indexedFileSize);
- return false;
- }
-
- if (!indexedFileMD5.equals(other.indexedFileMD5)) {
- System.err.printf("equals indexedFileMD5: this %s != other %s%n", indexedFileMD5, other.indexedFileMD5);
- return false;
- }
-
- if (flags != other.flags) {
- System.err.printf("equals flags: this %d != other %d%n", flags, other.flags);
- return false;
- }
-
- if (!chrIndices.equals(other.chrIndices)) {
- System.err.printf("equals chrIndeces: this %s != other %s%n", chrIndices, other.chrIndices);
- return false;
- }
-
- return true;
- }
-
- /**
- * create an abstract index, with defaults for the version value, and empty properties and chromosome lists
- */
- public AbstractIndex() {
- this.version = VERSION; // <= is overriden when file is read
- this.properties = new LinkedHashMap<String, String>();
- chrIndices = new LinkedHashMap();
- }
-
- /**
- * create an index file from the target feature file
- *
- * @param featureFile the feature file to create an index from
- */
- public AbstractIndex(final String featureFile) {
- this(new File(featureFile));
- }
-
- public AbstractIndex(final File featureFile) {
- this();
- this.indexedFile = featureFile;
- }
-
- public AbstractIndex(final AbstractIndex parent) {
- this();
- this.version = parent.version;
- this.indexedFile = parent.indexedFile;
- this.indexedFileSize = parent.indexedFileSize;
- this.indexedFileTS = parent.indexedFileTS;
- this.indexedFileMD5 = parent.indexedFileMD5;
- this.flags = parent.flags;
- this.properties = (LinkedHashMap<String, String>) parent.properties.clone();
- }
-
- protected void validateIndexHeader(final int indexType, final LittleEndianInputStream dis) throws IOException {
- final int magicNumber = dis.readInt();
- if (magicNumber != MAGIC_NUMBER) {
- throw new TribbleException(String.format("Unexpected magic number %d", magicNumber));
- }
- final int type = dis.readInt();
- if (type != indexType) {
- throw new TribbleException(String.format("Unexpected index type %d", type));
- }
-
- }
-
- /**
- * check the current version against the version we read in
- *
- * @return true if we're up to date, false otherwise
- */
- public boolean isCurrentVersion() {
- return version == VERSION;
- }
-
- public File getIndexedFile() {
- return indexedFile;
- }
-
- public long getIndexedFileSize() {
- return indexedFileSize;
- }
-
- public long getIndexedFileTS() {
- return indexedFileTS;
- }
-
- public String getIndexedFileMD5() {
- return indexedFileMD5;
- }
-
- public int getFlags() {
- return flags;
- }
-
- public int getVersion() {
- return version;
- }
-
- public void setMD5(final String md5) {
- this.indexedFileMD5 = md5;
- }
-
- public boolean containsChromosome(final String chr) {
- return chrIndices.containsKey(chr);
- }
-
- public void finalizeIndex() {
- // these two functions must be called now because the file may be being written during on the fly indexing
- if (indexedFile != null) {
- this.indexedFileSize = indexedFile.length();
- this.indexedFileTS = indexedFile.lastModified();
- }
- }
-
- /**
- * write the header to the target output stream
- *
- * @param dos the little endian output stream
- * @throws IOException an exception when we can't write to the file
- */
- private void writeHeader(final LittleEndianOutputStream dos) throws IOException {
- dos.writeInt(MAGIC_NUMBER);
- dos.writeInt(getType());
- dos.writeInt(version);
- dos.writeString(indexedFile.getAbsolutePath());
- dos.writeLong(indexedFileSize);
- dos.writeLong(indexedFileTS);
- dos.writeString(indexedFileMD5);
- dos.writeInt(flags);
-
- // Properties (Version 3 and later)
- dos.writeInt(properties.size());
- for (final Map.Entry<String, String> prop : properties.entrySet()) {
- dos.writeString(prop.getKey());
- dos.writeString(prop.getValue());
- }
- }
-
- /**
- * read the header from the input stream
- *
- * @param dis the little endian input stream
- * @throws IOException if we fail to read from the file at any point
- */
- private void readHeader(final LittleEndianInputStream dis) throws IOException {
-
- version = dis.readInt();
- indexedFile = new File(dis.readString());
- indexedFileSize = dis.readLong();
- indexedFileTS = dis.readLong();
- indexedFileMD5 = dis.readString();
- flags = dis.readInt();
- if (version < 3 && (flags & SEQUENCE_DICTIONARY_FLAG) == SEQUENCE_DICTIONARY_FLAG) {
- readSequenceDictionary(dis);
- }
-
- if (version >= 3) {
- int nProperties = dis.readInt();
- while (nProperties-- > 0) {
- final String key = dis.readString();
- final String value = dis.readString();
- properties.put(key, value);
- }
- }
- }
-
- /**
- * Kept to maintain backward compatibility with pre version 3 indexes. The sequence dictionary is no longer
- * used, use getSequenceNames() instead.
- *
- * @param dis
- * @throws IOException
- */
- private void readSequenceDictionary(final LittleEndianInputStream dis) throws IOException {
- final int size = dis.readInt();
- if (size < 0) throw new IllegalStateException("Size of the sequence dictionary entries is negative");
- for (int x = 0; x < size; x++) {
- dis.readString();
- dis.readInt();
- }
- }
-
- public List<String> getSequenceNames() {
- return new ArrayList<String>(chrIndices.keySet());
- }
-
- public List<Block> getBlocks(final String chr, final int start, final int end) {
- return getChrIndex(chr).getBlocks(start, end);
- }
-
- public List<Block> getBlocks(final String chr) {
- return getChrIndex(chr).getBlocks();
- }
-
- /**
- * @param chr
- * @return return the ChrIndex associated with chr,
- * @throws IllegalArgumentException if {@code chr} not found
- */
- private final ChrIndex getChrIndex(final String chr) {
- final ChrIndex chrIdx = chrIndices.get(chr);
- if (chrIdx == null) {
- throw new IllegalArgumentException("getBlocks() called with of unknown contig " + chr);
- } else {
- return chrIdx;
- }
- }
-
- public void write(final LittleEndianOutputStream stream) throws IOException {
- writeHeader(stream);
-
- //# of chromosomes
- stream.writeInt(chrIndices.size());
- for (final ChrIndex chrIdx : chrIndices.values()) {
- chrIdx.write(stream);
- }
- }
-
- @Override
- public void writeBasedOnFeatureFile(final File featureFile) throws IOException {
- if (!featureFile.isFile()) return;
- final LittleEndianOutputStream idxStream =
- new LittleEndianOutputStream(new FileOutputStream(Tribble.indexFile(featureFile)));
- write(idxStream);
- idxStream.close();
-
- }
-
- public void read(final LittleEndianInputStream dis) throws IOException {
- try {
- readHeader(dis);
-
- int nChromosomes = dis.readInt();
- chrIndices = new LinkedHashMap<String, ChrIndex>(nChromosomes);
-
- while (nChromosomes-- > 0) {
- final ChrIndex chrIdx = (ChrIndex) getChrIndexClass().newInstance();
- chrIdx.read(dis);
- chrIndices.put(chrIdx.getName(), chrIdx);
- }
-
- } catch (final InstantiationException e) {
- throw new TribbleException.UnableToCreateCorrectIndexType("Unable to create class " + getChrIndexClass(), e);
- } catch (final IllegalAccessException e) {
- throw new TribbleException.UnableToCreateCorrectIndexType("Unable to create class " + getChrIndexClass(), e);
- } finally {
- dis.close();
- }
-
- //printIndexInfo();
- }
-
- protected void printIndexInfo() {
- System.out.println(String.format("Index for %s with %d indices", indexedFile, chrIndices.size()));
- final BlockStats stats = getBlockStats(true);
- System.out.println(String.format(" total blocks %d", stats.total));
- System.out.println(String.format(" total empty blocks %d", stats.empty));
- }
-
- protected static class BlockStats {
- long total = 0, empty = 0, objects = 0, size = 0;
- }
-
- protected BlockStats getBlockStats(final boolean logDetails) {
- final BlockStats stats = new BlockStats();
- for (final Map.Entry<String, ChrIndex> elt : chrIndices.entrySet()) {
- final List<Block> blocks = elt.getValue().getBlocks();
-
- if (blocks != null) {
- final int nBlocks = blocks.size();
-
- int nEmptyBlocks = 0;
- for (final Block b : elt.getValue().getBlocks()) {
- if (b.getSize() == 0) nEmptyBlocks++;
- }
- stats.empty += nEmptyBlocks;
- stats.total += nBlocks;
-
- if (logDetails)
- System.out.println(String.format(" %s => %d blocks, %d empty, %.2f", elt.getKey(), nBlocks, nEmptyBlocks, (100.0 * nEmptyBlocks) / nBlocks));
- }
- }
-
- return stats;
- }
-
- protected String statsSummary() {
- final BlockStats stats = getBlockStats(false);
- return String.format("%12d blocks (%12d empty (%.2f%%))", stats.total, stats.empty, (100.0 * stats.empty) / stats.total);
- }
-
- public void addProperty(final String key, final String value) {
- properties.put(key, value);
- }
-
- public void addProperties(final Map<String, String> properties) {
- this.properties.putAll(properties);
- }
-
- /**
- * return a mapping of name to property value
- *
- * @return the mapping of values as an unmodifiable map
- */
- public Map<String, String> getProperties() {
- return Collections.unmodifiableMap(properties);
- }
-
- /**
- * get the index type
- *
- * @return The index type
- */
- protected abstract int getType();
-
- /**
- * returns the class for the index type
- *
- * @return a Class, from which a new instance can be created
- */
- public abstract Class getChrIndexClass();
-}
diff --git a/src/java/org/broad/tribble/index/Block.java b/src/java/org/broad/tribble/index/Block.java
deleted file mode 100644
index 0308f0b..0000000
--- a/src/java/org/broad/tribble/index/Block.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-/**
- * Represents a contiguous block of bytes in a file, defined by a start position and size (in bytes)
-*/
-public class Block {
-
- private final long startPosition;
- private long size;
-
- /**
- * @param startPosition in bytes
- * @param size in bytes
- */
- public Block(final long startPosition, final long size) {
- this.startPosition = startPosition;
- this.size = size;
- }
-
- /**
- * @return the startPosition
- */
- public long getStartPosition() {
- return startPosition;
- }
-
- public long getEndPosition() {
- return startPosition + size;
- }
-
- /**
- * This method is used to aid in consolidating blocks.
- * Sets the size based on the provided {@code endPosition}
- * @param endPosition Where the block ends, in bytes
- */
- public void setEndPosition(final long endPosition) {
- if(endPosition < startPosition)
- throw new IllegalArgumentException("Attempting to set block end position to " +
- endPosition + " which is before the start of " + startPosition);
- size = endPosition - startPosition;
-
- }
-
- /**
- * @return the # of bytes in this block. Note that for block-compressed files, this is not truly the
- * size of the block in the file. getEndPosition should be used to determine the virtual file offset
- * of the end of the region of interest.
- */
- public long getSize() {
- return size;
- }
-
- public boolean equals(final Object obj) {
- if ( this == obj ) return true;
- if ( ! (obj instanceof Block) ) return false;
- final Block otherBlock = (Block)obj;
- return this.startPosition == otherBlock.startPosition && this.size == otherBlock.size;
- }
-}
diff --git a/src/java/org/broad/tribble/index/ChrIndex.java b/src/java/org/broad/tribble/index/ChrIndex.java
deleted file mode 100644
index d427470..0000000
--- a/src/java/org/broad/tribble/index/ChrIndex.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-import org.broad.tribble.util.LittleEndianInputStream;
-import org.broad.tribble.util.LittleEndianOutputStream;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Represents an index on a specific chromosome
- */
-
-public interface ChrIndex {
-
- public String getName();
-
- /**
- * @return all blocks in ChrIndex
- */
- List<Block> getBlocks();
-
- /**
- * @param start the start position, one based
- * @param end the end position, one based
- * @return a list of blocks that include the region defined from start to stop. Can never return null
- */
- List<Block> getBlocks(int start, int end);
-
- void write(LittleEndianOutputStream dos) throws IOException;
-
- void read(LittleEndianInputStream dis) throws IOException;
-}
diff --git a/src/java/org/broad/tribble/index/DynamicIndexCreator.java b/src/java/org/broad/tribble/index/DynamicIndexCreator.java
deleted file mode 100644
index 629df96..0000000
--- a/src/java/org/broad/tribble/index/DynamicIndexCreator.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-package org.broad.tribble.index;
-
-import org.broad.tribble.Feature;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.index.interval.IntervalIndexCreator;
-import org.broad.tribble.index.linear.LinearIndexCreator;
-import org.broad.tribble.util.MathUtils;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.TreeMap;
-
-
-/**
- * A DynamicIndexCreator creates the proper index based on an {@link IndexFactory.IndexBalanceApproach} and
- * the characteristics of the file. Ultimately this is either a LinearIndex or an IntervalTreeIndex, with index
- * parameters based on whether seek time or file size is to be minimized.
- */
-public class DynamicIndexCreator extends TribbleIndexCreator {
- IndexFactory.IndexBalanceApproach iba;
- Map<IndexFactory.IndexType,TribbleIndexCreator> creators;
-
- /**
- * we're interested in two stats:
- * the longest feature and the density of features
- */
- int longestFeatureLength = 0;
- long featureCount = 0;
-
- MathUtils.RunningStat stats = new MathUtils.RunningStat();
- long basesSeen = 0;
- Feature lastFeature = null;
- File inputFile;
-
- public DynamicIndexCreator(final File inputFile, final IndexFactory.IndexBalanceApproach iba) {
- this.iba = iba;
- // get a list of index creators
- this.inputFile = inputFile;
- creators = getIndexCreators(inputFile,iba);
- }
-
- public Index finalizeIndex(final long finalFilePosition) {
- // finalize all of the indexes
- // return the score of the indexes we've generated
- final Map<Double,TribbleIndexCreator> mapping = scoreIndexes((double)featureCount/(double)basesSeen, creators, longestFeatureLength, iba);
- final TribbleIndexCreator creator = getMinIndex(mapping, this.iba);
-
- for (final Map.Entry<String, String> entry : properties.entrySet()) {
- creator.addProperty(entry.getKey(), entry.getValue());
- }
-
- // add our statistics to the file
- creator.addProperty("FEATURE_LENGTH_MEAN",String.valueOf(stats.mean()));
- creator.addProperty("FEATURE_LENGTH_STD_DEV",String.valueOf(stats.standardDeviation()));
- creator.addProperty("MEAN_FEATURE_VARIANCE",String.valueOf(stats.variance()));
-
- // add the feature count
- creator.addProperty("FEATURE_COUNT",String.valueOf(featureCount));
-
- // Now let's finalize and create the index itself
- return creator.finalizeIndex(finalFilePosition);
- }
-
- /**
- * create a list of index creators (initialized) representing the common index types we'd suspect they'd like to use
- * @param inputFile the input file to use to create the indexes
- * @return a map of index type to the best index for that balancing approach
- */
- private Map<IndexFactory.IndexType,TribbleIndexCreator> getIndexCreators(final File inputFile, final IndexFactory.IndexBalanceApproach iba) {
- final Map<IndexFactory.IndexType,TribbleIndexCreator> creators = new HashMap<IndexFactory.IndexType,TribbleIndexCreator>();
-
- if (iba == IndexFactory.IndexBalanceApproach.FOR_SIZE) {
- // add a linear index with the default bin size
- final LinearIndexCreator linearNormal = new LinearIndexCreator(inputFile, LinearIndexCreator.DEFAULT_BIN_WIDTH);
- creators.put(IndexFactory.IndexType.LINEAR,linearNormal);
-
- // create a tree index with the default size
- final IntervalIndexCreator treeNormal = new IntervalIndexCreator(inputFile, IntervalIndexCreator.DEFAULT_FEATURE_COUNT);
- creators.put(IndexFactory.IndexType.INTERVAL_TREE,treeNormal);
- }
-
- // this section is a little more arbitrary; we're creating indexes with a bin size that's a portion of the default; these
- // values were determined experimentally
- if (iba == IndexFactory.IndexBalanceApproach.FOR_SEEK_TIME) {
- // create a linear index with a small bin size
- final LinearIndexCreator linearSmallBin =
- new LinearIndexCreator(inputFile, Math.max(200, LinearIndexCreator.DEFAULT_BIN_WIDTH / 4));
- creators.put(IndexFactory.IndexType.LINEAR,linearSmallBin);
-
- // create a tree index with a small index size
- final IntervalIndexCreator treeSmallBin =
- new IntervalIndexCreator(inputFile, Math.max(20, IntervalIndexCreator.DEFAULT_FEATURE_COUNT / 8));
- creators.put(IndexFactory.IndexType.INTERVAL_TREE,treeSmallBin);
- }
-
- return creators;
- }
-
-
- public void addFeature(final Feature f, final long filePosition) {
- // protected static Map<Double,Index> createIndex(FileBasedFeatureIterator<Feature> iterator, Map<IndexType,IndexCreator> creators, IndexBalanceApproach iba) {
- // feed each feature to the indexes we've created
- // first take care of the stats
- featureCount++;
-
- // calculate the number of bases seen - we have to watch out for the situation where the last record was on the previous chromosome
- basesSeen = (lastFeature == null) ? basesSeen + f.getStart() :
- ((f.getStart() - lastFeature.getStart() >= 0) ? basesSeen + (f.getStart() - lastFeature.getStart()) : basesSeen + f.getStart());
-
- longestFeatureLength = Math.max(longestFeatureLength,(f.getEnd()-f.getStart()) + 1);
-
- // push the longest feature to the running stats
- stats.push(longestFeatureLength);
-
- // now feed the feature to each of our creators
- for (final IndexCreator creator : creators.values()) {
- creator.addFeature(f,filePosition);
- }
-
- //Redundant check, done in IndexFactory
- // if the last feature is after the current feature, exception out
-// if (lastFeature != null && f.getStart() < lastFeature.getStart() && lastFeature.getChr().equals(f.getChr()))
-// throw new TribbleException.MalformedFeatureFile("We saw a record with a start of " + f.getChr() + ":" + f.getStart() +
-// " after a record with a start of " + lastFeature.getChr() + ":" + lastFeature.getStart(), inputFile.getAbsolutePath());
-
- // save the last feature
- lastFeature = f;
- }
-
- /**
- * score the available indexes for the specified density and feature lengths
- *
- * The scoring method is trying to determine how many features would be returned for a sample one base query; or:
- * (features/seek). For the interval index this is clear: it's the bin size (interval is binned by feature count).
- * for Linear indexes it's the density of features X the number of bins we need to retrieve (which is determined
- * by the bin size X the longest feature).
- *
- * @param densityOfFeatures the density of features (features/base)
- * @param indexes Map from IndexType -> IndexCreator
- * @param longestFeature the longest feature we've found
- * @param iba the index balancing approach
- * @return the best index available for the target indexes
- */
- protected static LinkedHashMap<Double,TribbleIndexCreator> scoreIndexes(final double densityOfFeatures, final Map<IndexFactory.IndexType,TribbleIndexCreator> indexes, final int longestFeature, final IndexFactory.IndexBalanceApproach iba) {
- if (indexes.size() < 1) throw new IllegalArgumentException("Please specify at least one index to evaluate");
-
- final LinkedHashMap<Double,TribbleIndexCreator> scores = new LinkedHashMap<Double,TribbleIndexCreator>();
-
- for (final Map.Entry<IndexFactory.IndexType,TribbleIndexCreator> entry : indexes.entrySet()) {
- // we have different scoring
- if (entry.getValue() instanceof LinearIndexCreator) {
- final double binSize = ((LinearIndexCreator)(entry.getValue())).getBinSize();
- scores.put(binSize * densityOfFeatures * Math.ceil((double) longestFeature / binSize), entry.getValue());
- } else if (entry.getValue() instanceof IntervalIndexCreator) {
- scores.put((double) ((IntervalIndexCreator)entry.getValue()).getFeaturesPerInterval(), entry.getValue());
- } else {
- throw new TribbleException.UnableToCreateCorrectIndexType("Unknown index type, we don't have a scoring method for " + entry.getValue().getClass());
- }
- }
- return scores;
- }
-
- /**
- * utility function to find the min of a list
- * @param scores the list of scaled features/bin scores for each index type
- * @return the best score <b>index value</b>
- */
- private TribbleIndexCreator getMinIndex(final Map<Double,TribbleIndexCreator> scores, final IndexFactory.IndexBalanceApproach iba) {
- final TreeMap<Double,TribbleIndexCreator> map = new TreeMap<Double,TribbleIndexCreator>();
- map.putAll(scores);
-
- // if we are optimizing for seek time, choose the lowest score (adjusted features/bin value), if for storage size, choose the opposite
- final TribbleIndexCreator idx = (iba != IndexFactory.IndexBalanceApproach.FOR_SEEK_TIME) ? map.get(map.lastKey()) : map.get(map.firstKey());
- return idx;
- }
-
- @Override
- public void addProperty(final String key, final String value) {
- for (final TribbleIndexCreator creator : creators.values()) {
- creator.addProperty(key, value);
- }
- }
-}
diff --git a/src/java/org/broad/tribble/index/Index.java b/src/java/org/broad/tribble/index/Index.java
deleted file mode 100644
index f60e23a..0000000
--- a/src/java/org/broad/tribble/index/Index.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-import org.broad.tribble.util.LittleEndianOutputStream;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Interface for all index implementations.
- * An index file is used for efficient lookup of features from a feature file;
- * and Index represents that index file.
- */
-public interface Index {
- /**
- * Query the index.
- * @param chr the chromosome
- * @param start the start position
- * @param end the end position
- * @return a list of blocks that contain the specified interval. Can never return null
- * @throws IllegalArgumentException of chr isn't part of this index
- */
- List<Block> getBlocks(String chr, int start, int end);
-
- /**
- * @return true if the index is up to date, false otherwise
- */
- public boolean isCurrentVersion();
-
- /**
- * @return a list of the sequence names we've seen during indexing, in order
- */
- List<String> getSequenceNames();
-
- /**
- * @param chr the chromosome (or contig) name
- * @return true if we have an entry; false otherwise
- */
- public boolean containsChromosome(final String chr);
-
- /**
- * all indexes are writable to disk
- * @param stream the stream to write the index to. Caller must close after invocation.
- * @throws IOException if the index is unable to write to the specified location
- */
- public void write(LittleEndianOutputStream stream) throws IOException;
-
- /**
- * Write an appropriately named and located Index file based on the name and location of the featureFile.
- * If featureFile is not a normal file, the index will silently not be written.
- * @param featureFile
- */
- public void writeBasedOnFeatureFile(File featureFile) throws IOException;
-
- /**
- * @return get the list of properties for this index. Returns null if no properties.
- */
- public Map<String,String> getProperties();
-
- /**
- * Returns true if this and obj are 'effectively' equivalent indices. Ignores the
- * time stamp on the file, as this may not be the same for even identical indices
- * @param obj
- * @return
- */
- public boolean equalsIgnoreProperties(Object obj);
-}
diff --git a/src/java/org/broad/tribble/index/IndexCreator.java b/src/java/org/broad/tribble/index/IndexCreator.java
deleted file mode 100644
index 87e0006..0000000
--- a/src/java/org/broad/tribble/index/IndexCreator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-import org.broad.tribble.Feature;
-
-/**
- *
- * An interface for creating indexes
- *
- * @author jrobinso
- */
-public interface IndexCreator {
- /**
- * Add a feature to the index
- * @param feature the feature, of which start, end, and contig must be filled in
- * @param filePosition the current file position, at the beginning of the specified feature
- */
- public void addFeature(Feature feature, long filePosition);
-
- /**
- * Create the index, given the stream of features passed in to this point
- * @param finalFilePosition the final file position, for indexes that have to close out with the final position
- * @return an index object
- */
- public Index finalizeIndex(long finalFilePosition);
-}
-
-
diff --git a/src/java/org/broad/tribble/index/IndexFactory.java b/src/java/org/broad/tribble/index/IndexFactory.java
deleted file mode 100644
index f3730c0..0000000
--- a/src/java/org/broad/tribble/index/IndexFactory.java
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-import net.sf.samtools.Defaults;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.BlockCompressedInputStream;
-import org.broad.tribble.*;
-import org.broad.tribble.index.interval.IntervalIndexCreator;
-import org.broad.tribble.index.interval.IntervalTreeIndex;
-import org.broad.tribble.index.linear.LinearIndex;
-import org.broad.tribble.index.linear.LinearIndexCreator;
-import org.broad.tribble.index.tabix.TabixFormat;
-import org.broad.tribble.index.tabix.TabixIndex;
-import net.sf.samtools.util.LocationAware;
-import org.broad.tribble.index.tabix.TabixIndexCreator;
-import org.broad.tribble.readers.PositionalBufferedStream;
-import org.broad.tribble.util.LittleEndianInputStream;
-import org.broad.tribble.util.LittleEndianOutputStream;
-import org.broad.tribble.util.ParsingUtils;
-import org.broad.tribble.util.TabixUtils;
-
-import java.io.*;
-import java.lang.reflect.Constructor;
-import java.util.*;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Factory class for creating indexes. It is the responsibility of this class to determine and create the
- * correct index type from the input file or stream. Only LinearIndex and IntervalTreeIndex are supported
- * by this factory.
- */
-public class IndexFactory {
- /** We can optimize index-file-creation for different factors. As of this writing, those are index-file size or seeking time. */
- public enum IndexBalanceApproach {
- FOR_SIZE,
- FOR_SEEK_TIME
- }
-
- /**
- * an enum that contains all of the information about the index types, and how to create them
- */
- public enum IndexType {
- LINEAR(LinearIndex.MAGIC_NUMBER, LinearIndex.INDEX_TYPE, LinearIndexCreator.class, LinearIndex.class, LinearIndexCreator.DEFAULT_BIN_WIDTH),
- INTERVAL_TREE(IntervalTreeIndex.MAGIC_NUMBER, IntervalTreeIndex.INDEX_TYPE, IntervalIndexCreator.class, IntervalTreeIndex.class, IntervalIndexCreator.DEFAULT_FEATURE_COUNT),
- // Tabix index initialization requires additional information, so generic construction won't work, thus indexCreatorClass is null.
- TABIX(TabixIndex.MAGIC_NUMBER, null, null, TabixIndex.class, -1);
-
- private final int magicNumber;
- private final Integer tribbleIndexType;
- private final Class<IndexCreator> indexCreatorClass;
- private final int defaultBinSize;
- private final Class<Index> indexType;
-
- public int getDefaultBinSize() {
- return defaultBinSize;
- }
-
- public IndexCreator getIndexCreator() {
- try {
- return indexCreatorClass.newInstance();
- } catch ( final InstantiationException e ) {
- throw new TribbleException("Couldn't make index creator in " + this, e);
- } catch ( final IllegalAccessException e ) {
- throw new TribbleException("Couldn't make index creator in " + this, e);
- }
- }
-
- public boolean canCreate() {
- return indexCreatorClass != null;
- }
-
- IndexType(final int magicNumber, final Integer tribbleIndexType, final Class creator, final Class indexClass, final int defaultBinSize) {
- this.magicNumber = magicNumber;
- this.tribbleIndexType = tribbleIndexType;
- indexCreatorClass = creator;
- indexType = indexClass;
- this.defaultBinSize = defaultBinSize;
- }
-
- public Integer getTribbleIndexType() {
- return tribbleIndexType;
- }
-
- public Class getIndexType() {
- return indexType;
- }
-
- public int getMagicNumber() { return magicNumber; }
-
- /**
- *
- * @param is InputStream of index. This will be reset to location it was at when method was invoked.
- * @return The {@code IndexType} based on the {@code headerValue}
- * @throws TribbleException.UnableToCreateCorrectIndexType
- */
- public static IndexType getIndexType(final BufferedInputStream is) {
- // Currently only need 8 bytes, so this should be plenty
- is.mark(128);
- final LittleEndianInputStream dis = new LittleEndianInputStream(is);
- final int magicNumber;
- final int type;
-
- try {
- // Read the type and version, then create the appropriate type
- magicNumber = dis.readInt();
- // This is not appropriate for all types, but it doesn't hurt to read it.
- type = dis.readInt();
- is.reset();
-
- for (final IndexType indexType : IndexType.values()) {
- if (indexType.magicNumber == magicNumber &&
- (indexType.tribbleIndexType == null || indexType.tribbleIndexType == type)) {
- return indexType;
- }
- }
- } catch (final IOException e) {
- throw new TribbleException("Problem detecting index type", e);
- }
-
- throw new TribbleException.UnableToCreateCorrectIndexType(
- String.format("Unknown index type. magic number: 0x%x; type %d", magicNumber, type));
- }
- }
-
-
- /**
- * Load in index from the specified file. The type of index (LinearIndex or IntervalTreeIndex) is determined
- * at run time by reading the type flag in the file.
- *
- * @param indexFile from which to load the index
- */
- public static Index loadIndex(final String indexFile) {
- final Index idx = null;
- BufferedInputStream bufferedInputStream = null;
- final LittleEndianInputStream dis = null;
- try {
- InputStream inputStream = ParsingUtils.openInputStream(indexFile);
- if (indexFile.endsWith(".gz")) {
- inputStream = new GZIPInputStream(inputStream);
- }
- else if (indexFile.endsWith(TabixUtils.STANDARD_INDEX_EXTENSION)) {
- inputStream = new BlockCompressedInputStream(inputStream);
- }
- // Must be buffered, because getIndexType uses mark and reset
- bufferedInputStream = new BufferedInputStream(inputStream, Defaults.NON_ZERO_BUFFER_SIZE);
- final Class indexClass = IndexType.getIndexType(bufferedInputStream).getIndexType();
-
- final Constructor ctor = indexClass.getConstructor(InputStream.class);
-
- return (Index) ctor.newInstance(bufferedInputStream);
- } catch (final IOException ex) {
- throw new TribbleException.UnableToReadIndexFile("Unable to read index file", indexFile, ex);
- } catch (final Exception ex) {
- throw new RuntimeException(ex);
- } finally {
- try {
- if (bufferedInputStream != null) bufferedInputStream.close();
- if (dis != null) dis.close();
- //log.info(String.format("Closed %s and %s", is, dis));
- } catch (final IOException e) {
- //log.error("Error closing indexFile: " + indexFile, e);
- }
- }
- }
-
-
- /**
- * a helper method for creating a linear binned index with default bin size
- *
- * @param inputFile the input file to load features from
- * @param codec the codec to use for decoding records
- */
- public static LinearIndex createLinearIndex(final File inputFile, final FeatureCodec codec) {
- return createLinearIndex(inputFile, codec, LinearIndexCreator.DEFAULT_BIN_WIDTH);
- }
-
- /**
- * a helper method for creating a linear binned index
- *
- * @param inputFile the input file to load features from
- * @param codec the codec to use for decoding records
- * @param binSize the bin size
- */
- public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> LinearIndex createLinearIndex(final File inputFile,
- final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
- final int binSize) {
- final LinearIndexCreator indexCreator = new LinearIndexCreator(inputFile, binSize);
- return (LinearIndex)createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
- }
-
- /**
- * create an interval-tree index with the default features per bin count
- *
- * @param inputFile the file containing the features
- * @param codec to decode the features
- */
- public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> IntervalTreeIndex createIntervalIndex(final File inputFile,
- final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec) {
- return createIntervalIndex(inputFile, codec, IntervalIndexCreator.DEFAULT_FEATURE_COUNT);
- }
-
-
- /**
- * a helper method for creating an interval-tree index
- *
- * @param inputFile the input file to load features from
- * @param codec the codec to use for decoding records
- * @param featuresPerInterval
- */
- public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> IntervalTreeIndex createIntervalIndex(final File inputFile,
- final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
- final int featuresPerInterval) {
- final IntervalIndexCreator indexCreator = new IntervalIndexCreator(inputFile, featuresPerInterval);
- return (IntervalTreeIndex)createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
- }
-
- /**
- * Create a dynamic index with the default balancing approach
- *
- * @param inputFile the input file to load features from
- * @param codec the codec to use for decoding records
- */
- public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> Index createDynamicIndex(final File inputFile, final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec) {
- return createDynamicIndex(inputFile, codec, IndexBalanceApproach.FOR_SEEK_TIME);
- }
-
- /**
- * Create a index of the specified type with default binning parameters
- *
- * @param inputFile the input file to load features from
- * @param codec the codec to use for decoding records
- * @param type the type of index to create
- */
- public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> Index createIndex(final File inputFile,
- final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
- final IndexType type) {
- switch (type) {
- case INTERVAL_TREE: return createIntervalIndex(inputFile, codec);
- case LINEAR: return createLinearIndex(inputFile, codec);
- // Tabix index initialization requires additional information, so this construction method won't work.
- case TABIX: throw new UnsupportedOperationException("Tabix indices cannot be created through a generic interface");
- }
- throw new IllegalArgumentException("Unrecognized IndexType " + type);
- }
-
- /**
- * Write the index to a file; little endian.
- * @param idx
- * @param idxFile
- * @throws IOException
- */
- public static void writeIndex(final Index idx, final File idxFile) throws IOException {
- LittleEndianOutputStream stream = null;
- try {
- stream = new LittleEndianOutputStream(new BufferedOutputStream(new FileOutputStream(idxFile)));
- idx.write(stream);
- }
- finally {
- if(stream != null) {
- stream.close();
- }
- }
- }
-
- /**
- * create a dynamic index, given an input file, codec, and balance approach
- *
- * @param inputFile the input file to load features from
- * @param codec the codec to use for decoding records
- * @param iba the index balancing approach
- */
- public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> Index createDynamicIndex(final File inputFile,
- final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
- final IndexBalanceApproach iba) {
- // get a list of index creators
- final DynamicIndexCreator indexCreator = new DynamicIndexCreator(inputFile, iba);
- return createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
- }
-
- /**
- * @param inputFile The file to be indexed.
- * @param codec Mechanism for reading inputFile.
- * @param tabixFormat Header fields for TabixIndex to be produced.
- * @param sequenceDictionary May be null, but if present may reduce memory footprint for index creation. Features
- * in inputFile must be in the order defined by sequenceDictionary, if it is present.
- */
- public static <FEATURE_TYPE extends Feature, SOURCE_TYPE> TabixIndex createTabixIndex(final File inputFile,
- final FeatureCodec<FEATURE_TYPE, SOURCE_TYPE> codec,
- final TabixFormat tabixFormat,
- final SAMSequenceDictionary sequenceDictionary) {
- final TabixIndexCreator indexCreator = new TabixIndexCreator(sequenceDictionary, tabixFormat);
- return (TabixIndex)createIndex(inputFile, new FeatureIterator<FEATURE_TYPE, SOURCE_TYPE>(inputFile, codec), indexCreator);
- }
-
-
-
- private static Index createIndex(final File inputFile, final FeatureIterator iterator, final IndexCreator creator) {
- Feature lastFeature = null;
- Feature currentFeature;
- final Map<String, Feature> visitedChromos = new HashMap<String, Feature>(40);
- while (iterator.hasNext()) {
- final long position = iterator.getPosition();
- currentFeature = iterator.next();
-
- checkSorted(inputFile, lastFeature, currentFeature);
- //should only visit chromosomes once
- final String curChr = currentFeature.getChr();
- final String lastChr = lastFeature != null ? lastFeature.getChr() : null;
- if(!curChr.equals(lastChr)){
- if(visitedChromos.containsKey(curChr)){
- String msg = "Input file must have contiguous chromosomes.";
- msg += " Saw feature " + featToString(visitedChromos.get(curChr));
- msg += " followed later by " + featToString(lastFeature);
- msg += " and then " + featToString(currentFeature);
- throw new TribbleException.MalformedFeatureFile(msg, inputFile.getAbsolutePath());
- }else{
- visitedChromos.put(curChr, currentFeature);
- }
- }
-
- creator.addFeature(currentFeature, position);
-
- lastFeature = currentFeature;
- }
-
- iterator.close();
- return creator.finalizeIndex(iterator.getPosition());
- }
-
- private static String featToString(final Feature feature){
- return feature.getChr() + ":" + feature.getStart() + "-" + feature.getEnd();
- }
-
- private static void checkSorted(final File inputFile, final Feature lastFeature, final Feature currentFeature){
- // if the last currentFeature is after the current currentFeature, exception out
- if (lastFeature != null && currentFeature.getStart() < lastFeature.getStart() && lastFeature.getChr().equals(currentFeature.getChr()))
- throw new TribbleException.MalformedFeatureFile("Input file is not sorted by start position. \n" +
- "We saw a record with a start of " + currentFeature.getChr() + ":" + currentFeature.getStart() +
- " after a record with a start of " + lastFeature.getChr() + ":" + lastFeature.getStart(), inputFile.getAbsolutePath());
- }
-
-
- /**
- * Iterator for reading features from a file, given a {@code FeatureCodec}.
- */
- static class FeatureIterator<FEATURE_TYPE extends Feature, SOURCE> implements CloseableTribbleIterator<Feature> {
- // the stream we use to get features
- private final SOURCE source;
- // the next feature
- private Feature nextFeature;
- // our codec
- private final FeatureCodec<FEATURE_TYPE, SOURCE> codec;
- private final File inputFile;
-
- // we also need cache our position
- private long cachedPosition;
-
- /**
- *
- * @param inputFile The file from which to read. Stream for reading is opened on construction.
- * @param codec
- */
- public FeatureIterator(final File inputFile, final FeatureCodec<FEATURE_TYPE, SOURCE> codec) {
- this.codec = codec;
- this.inputFile = inputFile;
- final FeatureCodecHeader header = readHeader();
- source = (SOURCE) codec.makeIndexableSourceFromStream(initStream(inputFile, header.getHeaderEnd()));
- readNextFeature();
- }
-
- /**
- * Some codecs, e.g. VCF files, need the header to decode features. This is a rather poor design,
- * the internal header is set as a side-affect of reading it, but we have to live with it for now.
- */
- private FeatureCodecHeader readHeader() {
- try {
- final SOURCE source = this.codec.makeSourceFromStream(initStream(inputFile, 0));
- final FeatureCodecHeader header = this.codec.readHeader(source);
- codec.close(source);
- return header;
- } catch (final IOException e) {
- throw new TribbleException.InvalidHeader("Error reading header " + e.getMessage());
- }
- }
-
- private PositionalBufferedStream initStream(final File inputFile, final long skip) {
- try {
- final FileInputStream is = new FileInputStream(inputFile);
- final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
- if ( skip > 0 ) pbs.skip(skip);
- return pbs;
- } catch (final FileNotFoundException e) {
- throw new TribbleException.FeatureFileDoesntExist("Unable to open the input file, most likely the file doesn't exist.", inputFile.getAbsolutePath());
- } catch (final IOException e) {
- throw new TribbleException.MalformedFeatureFile("Error initializing stream", inputFile.getAbsolutePath(), e);
- }
- }
-
- public boolean hasNext() {
- return nextFeature != null;
- }
-
- public Feature next() {
- final Feature ret = nextFeature;
- readNextFeature();
- return ret;
- }
-
- /**
- * @throws UnsupportedOperationException
- */
- public void remove() {
- throw new UnsupportedOperationException("We cannot remove");
- }
-
-
- /**
- * @return the file position from the underlying reader
- */
- public long getPosition() {
- return (hasNext()) ? cachedPosition : ((LocationAware) source).getPosition();
- }
-
- @Override
- public Iterator<Feature> iterator() {
- return this;
- }
-
- @Override
- public void close() {
- codec.close(source);
- }
-
- /**
- * Read the next feature from the stream
- * @throws TribbleException.MalformedFeatureFile
- */
- private void readNextFeature() {
- cachedPosition = ((LocationAware) source).getPosition();
- try {
- nextFeature = null;
- while (nextFeature == null && !codec.isDone(source)) {
- nextFeature = codec.decodeLoc(source);
- }
- } catch (final IOException e) {
- throw new TribbleException.MalformedFeatureFile("Unable to read a line from the file", inputFile.getAbsolutePath(), e);
- }
- }
- }
-}
diff --git a/src/java/org/broad/tribble/index/MutableIndex.java b/src/java/org/broad/tribble/index/MutableIndex.java
deleted file mode 100644
index e0bb991..0000000
--- a/src/java/org/broad/tribble/index/MutableIndex.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-import java.util.Map;
-
-/**
- * Some Index implementations can be modified in memory. Also, properties do not make sense for all index types.
- * Only the relevant index implementations implement this interface.
- */
-public interface MutableIndex extends Index {
- void addProperty(String key, String value);
-
- void addProperties(Map<String, String> properties);
-}
diff --git a/src/java/org/broad/tribble/index/TribbleIndexCreator.java b/src/java/org/broad/tribble/index/TribbleIndexCreator.java
deleted file mode 100644
index 2c5b80f..0000000
--- a/src/java/org/broad/tribble/index/TribbleIndexCreator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-import java.util.LinkedHashMap;
-
-/**
- * Base class for Tribble-specific index creators.
- */
-public abstract class TribbleIndexCreator implements IndexCreator {
- protected LinkedHashMap<String, String> properties = new LinkedHashMap<String, String>();
-
- public void addProperty(final String key, final String value) {
- properties.put(key, value);
- }
-}
diff --git a/src/java/org/broad/tribble/index/interval/Interval.java b/src/java/org/broad/tribble/index/interval/Interval.java
deleted file mode 100644
index 7afced2..0000000
--- a/src/java/org/broad/tribble/index/interval/Interval.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index.interval;
-
-import org.broad.tribble.index.Block;
-
-
-/**
- * Quick and dirty interval class
- * Describes a genomic interval and where in a file information for that
- * interval can be obtained
- */
-public class Interval implements Comparable {
- /**
- * Start of the interval in genomic coordinates -- this is exposed on purpose, getters have a significant
- * performance penalty for this field.
- */
- final int start;
-
- /**
- * End of the interval in genomic coordinates -- this is exposed on purpose, getters have a significant
- * performance penalty for this field.
- */
- final int end;
-
- /**
- * File block (position, size) containing the data for this interval
- */
- private Block block;
-
- public Interval(int start, int end) {
- assert start <= end;
- this.start = start;
- this.end = end;
- }
-
-
- public Interval(int start, int end, Block block) {
- assert start <= end;
- this.start = start;
- this.end = end;
- this.block = block;
- }
-
-
- public boolean equals(Object other) {
- if (this == other)
- return true;
- if (this.getClass().equals(other.getClass())) {
- Interval otherInterval = (Interval) other;
- return (this.start == otherInterval.start &&
- this.end == otherInterval.end);
- }
- return false;
- }
-
-
- public int hashCode() {
- return start;
- }
-
-
- public int compareTo(Object o) {
- Interval other = (Interval) o;
- if (this.start < other.start)
- return -1;
- if (this.start > other.start)
- return 1;
-
- if (this.end < other.end)
- return -1;
- if (this.end > other.end)
- return 1;
-
- return 0;
- }
-
- public String toString() {
- return "Interval[" + this.start + ", " + this.end + "]";
- }
-
-
- /**
- * @return whether this interval overlaps the other.
- */
- public boolean overlaps(Interval other) {
- return (this.start <= other.end &&
- other.start <= this.end);
- }
-
-
- /**
- * @return The file block for this interval
- */
- public Block getBlock() {
- return block;
- }
-}
-
diff --git a/src/java/org/broad/tribble/index/interval/IntervalIndexCreator.java b/src/java/org/broad/tribble/index/interval/IntervalIndexCreator.java
deleted file mode 100644
index e8ef0ec..0000000
--- a/src/java/org/broad/tribble/index/interval/IntervalIndexCreator.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index.interval;
-
-import org.broad.tribble.Feature;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.TribbleIndexCreator;
-import org.broad.tribble.index.interval.IntervalTreeIndex.ChrIndex;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * Creates interval indexes from a stream of features
- * @author jrobinso
- */
-public class IntervalIndexCreator extends TribbleIndexCreator {
-
- public static int DEFAULT_FEATURE_COUNT = 600;
-
- /**
- * Maximum number of features stored per interval.
- * @see #DEFAULT_FEATURE_COUNT
- */
- private int featuresPerInterval = DEFAULT_FEATURE_COUNT;
-
- private final LinkedList<ChrIndex> chrList = new LinkedList<ChrIndex>();
-
- /**
- * Instance variable for the number of features we currently are storing in the interval
- */
- private int featureCount = 0;
-
- private final ArrayList<MutableInterval> intervals = new ArrayList<MutableInterval>();
-
- File inputFile;
-
- public IntervalIndexCreator(final File inputFile, final int featuresPerInterval) {
- this.inputFile = inputFile;
- this.featuresPerInterval = featuresPerInterval;
- }
-
- public IntervalIndexCreator(final File inputFile) {
- this(inputFile, DEFAULT_FEATURE_COUNT);
- }
-
- public void addFeature(final Feature feature, final long filePosition) {
- // if we don't have a chrIndex yet, or if the last one was for the previous contig, create a new one
- if (chrList.size() == 0 || !chrList.getLast().getName().equals(feature.getChr())) {
- // if we're creating a new chrIndex (not the first), make sure to dump the intervals to the old chrIndex
- if (chrList.size() != 0)
- addIntervalsToLastChr(filePosition);
-
- // create a new chr index for the current contig
- chrList.add(new ChrIndex(feature.getChr()));
- intervals.clear();
- }
-
- // if we're about to overflow the current bin, make a new one
- if (featureCount >= featuresPerInterval || intervals.size() == 0) {
- final MutableInterval i = new MutableInterval();
- i.setStart(feature.getStart());
- i.setStartFilePosition(filePosition);
- if( intervals.size() > 0) intervals.get(intervals.size()-1).setEndFilePosition(filePosition);
- featureCount = 0; // reset the feature count
- intervals.add(i);
- }
-
- // make sure we update the ending position of the bin
- intervals.get(intervals.size()-1).setStop(Math.max(feature.getEnd(),intervals.get(intervals.size()-1).getStop()));
- featureCount++;
- }
-
- /**
- * dump the intervals we have stored to the last chrList entry
- * @param currentPos the current position, for the last entry in the interval list
- */
- private void addIntervalsToLastChr(final long currentPos) {
- for (int x = 0; x < intervals.size(); x++) {
- if (x == intervals.size()-1) intervals.get(x).setEndFilePosition(currentPos);
- chrList.getLast().insert(intervals.get(x).toInterval());
- }
- }
-
- /**
- * finalize the index; create a tree index given the feature list passed in so far
- * @param finalFilePosition the final file position, for indexes that have to close out with the final position
- * @return a Tree Index
- */
- public Index finalizeIndex(final long finalFilePosition) {
- final IntervalTreeIndex featureIndex = new IntervalTreeIndex(inputFile.getAbsolutePath());
- // dump the remaining bins to the index
- addIntervalsToLastChr(finalFilePosition);
- featureIndex.setChrIndex(chrList);
- featureIndex.addProperties(properties);
- featureIndex.finalizeIndex();
- return featureIndex;
- }
-
- public int getFeaturesPerInterval() {
- return featuresPerInterval;
- }
-}
-
-/**
- * The interval class isn't mutable; use this private class as a temporary storage until we're ready to make intervals
- */
-class MutableInterval {
-
- // the start, the stop, and the start position
- private int start;
- private int stop;
- private long startFilePosition;
- private long endFilePosition;
-
- public void setStart(final int start) {
- if (start < 0) throw new IllegalArgumentException("Start must be greater than 0!");
- this.start = start;
- }
-
- public void setStop(final int stop) {
- if (stop < 0) throw new IllegalArgumentException("Start must be greater than 0!");
- this.stop = stop;
- }
-
- public void setStartFilePosition(final long startFilePosition) {
- this.startFilePosition = startFilePosition;
- }
-
- public void setEndFilePosition(final long endFilePosition) {
- this.endFilePosition = endFilePosition;
- }
-
- public Interval toInterval() {
- return new Interval(start,stop,new Block(startFilePosition, endFilePosition - startFilePosition));
- }
-
- public int getStop() {
- return stop;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broad/tribble/index/interval/IntervalTree.java b/src/java/org/broad/tribble/index/interval/IntervalTree.java
deleted file mode 100644
index ab5faba..0000000
--- a/src/java/org/broad/tribble/index/interval/IntervalTree.java
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index.interval;
-
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.*;
-
-/** An implementation of an interval tree, following the explanation.
- * from CLR. For efficiently finding all intervals which overlap a given
- * interval or point.
- *
- * References:
- * http://en.wikipedia.org/wiki/Interval_tree
- *
- * Cormen, Thomas H.; Leiserson, Charles E., Rivest, Ronald L. (1990). Introduction to Algorithms (1st ed.). MIT Press and McGraw-Hill. ISBN 0-262-03141-8
- *
- *
- */
-public class IntervalTree {
-
- Node root;
- Node NIL = Node.NIL;
-
- /**
- * See {@link #getSize()}
- */
- int size;
-
- public IntervalTree() {
- this.root = NIL;
- this.size = 0;
- }
-
-
- public void insert(Interval interval) {
- Node node = new Node(interval);
- insert(node);
- size++;
- }
-
- /**
- * The estimated size of the tree. We keep a running count
- * on each insert, this getter returns that count.
- * @see #size()
- * @return
- */
- public int getSize() {
- return size;
- }
-
- /**
- *
- * @param interval
- * @return all matches as a list of Intervals
- */
- public List<Interval> findOverlapping(Interval interval) {
-
- if (root().isNull()) {
- return Collections.emptyList();
- }
-
- List<Interval> results = new ArrayList();
- searchAll(interval, root(), results);
- return results;
- }
-
- public String toString() {
- return root().toString();
- }
-
- private List<Interval> searchAll(Interval interval, Node node, List<Interval> results) {
- if (node.interval.overlaps(interval)) {
- results.add(node.interval);
- }
- if (!node.left.isNull() && node.left.max >= interval.start) {
- searchAll(interval, node.left, results);
- }
- if (!node.right.isNull() && node.right.min <= interval.end) {
- searchAll(interval, node.right, results);
- }
- return results;
- }
-
- /**
- * Return all intervals in tree.
- * TODO: an iterator would be more effecient.
- * @return
- */
- public List<Interval> getIntervals() {
- if (root().isNull()) {
- return Collections.emptyList();
- }
- List<Interval> results = new ArrayList(size);
- getAll(root(), results);
- return results;
- }
-
- /**
- * Get all nodes which are descendants of {@code node}, inclusive.
- * {@code results} is modified in place
- * @param node
- * @param results
- * @return the total list of descendants, including original {@code results}
- */
- private List<Interval> getAll(Node node, List<Interval> results) {
-
- results.add(node.interval);
- if (!node.left.isNull()) {
- getAll(node.left, results);
- }
- if (!node.right.isNull()) {
- getAll(node.right, results);
- }
- return results;
- }
-
-
- /**
- * Used for testing only.
- *
- * @param node
- * @return
- */
- private int getRealMax(Node node) {
- if (node.isNull())
- return Integer.MIN_VALUE;
- int leftMax = getRealMax(node.left);
- int rightMax = getRealMax(node.right);
- int nodeHigh = (node.interval).end;
-
- int max1 = (leftMax > rightMax ? leftMax : rightMax);
- return (max1 > nodeHigh ? max1 : nodeHigh);
- }
-
- /**
- * Used for testing only
- *
- * @param node
- * @return
- */
- private int getRealMin(Node node) {
- if (node.isNull())
- return Integer.MAX_VALUE;
-
- int leftMin = getRealMin(node.left);
- int rightMin = getRealMin(node.right);
- int nodeLow = (node.interval).start;
-
- int min1 = (leftMin < rightMin ? leftMin : rightMin);
- return (min1 < nodeLow ? min1 : nodeLow);
- }
-
-
- private void insert(Node x) {
- assert (x != null);
- assert (!x.isNull());
-
- treeInsert(x);
- x.color = Node.RED;
- while (x != this.root && x.parent.color == Node.RED) {
- if (x.parent == x.parent.parent.left) {
- Node y = x.parent.parent.right;
- if (y.color == Node.RED) {
- x.parent.color = Node.BLACK;
- y.color = Node.BLACK;
- x.parent.parent.color = Node.RED;
- x = x.parent.parent;
- } else {
- if (x == x.parent.right) {
- x = x.parent;
- this.leftRotate(x);
- }
- x.parent.color = Node.BLACK;
- x.parent.parent.color = Node.RED;
- this.rightRotate(x.parent.parent);
- }
- } else {
- Node y = x.parent.parent.left;
- if (y.color == Node.RED) {
- x.parent.color = Node.BLACK;
- y.color = Node.BLACK;
- x.parent.parent.color = Node.RED;
- x = x.parent.parent;
- } else {
- if (x == x.parent.left) {
- x = x.parent;
- this.rightRotate(x);
- }
- x.parent.color = Node.BLACK;
- x.parent.parent.color = Node.RED;
- this.leftRotate(x.parent.parent);
- }
- }
- }
- this.root.color = Node.BLACK;
- }
-
-
- private Node root() {
- return this.root;
- }
-
-
- private void leftRotate(Node x) {
- Node y = x.right;
- x.right = y.left;
- if (y.left != NIL) {
- y.left.parent = x;
- }
- y.parent = x.parent;
- if (x.parent == NIL) {
- this.root = y;
- } else {
- if (x.parent.left == x) {
- x.parent.left = y;
- } else {
- x.parent.right = y;
- }
- }
- y.left = x;
- x.parent = y;
-
- applyUpdate(x);
- // no need to apply update on y, since it'll y is an ancestor
- // of x, and will be touched by applyUpdate().
- }
-
-
- private void rightRotate(Node x) {
- Node y = x.left;
- x.left = y.right;
- if (y.right != NIL) {
- y.right.parent = x;
- }
- y.parent = x.parent;
- if (x.parent == NIL) {
- this.root = y;
- } else {
- if (x.parent.right == x) {
- x.parent.right = y;
- } else {
- x.parent.left = y;
- }
- }
- y.right = x;
- x.parent = y;
-
-
- applyUpdate(x);
- // no need to apply update on y, since it'll y is an ancestor
- // of x, and will be touched by applyUpdate().
- }
-
-
- /**
- * Note: Does not maintain RB constraints, this is done post insert
- *
- * @param x
- */
- private void treeInsert(Node x) {
- Node node = this.root;
- Node y = NIL;
- while (node != NIL) {
- y = node;
- if (x.interval.start <= node.interval.start) {
- node = node.left;
- } else {
- node = node.right;
- }
- }
- x.parent = y;
-
- if (y == NIL) {
- this.root = x;
- x.left = x.right = NIL;
- } else {
- if (x.interval.start <= y.interval.start) {
- y.left = x;
- } else {
- y.right = x;
- }
- }
-
- this.applyUpdate(x);
- }
-
-
- // Applies the statistic update on the node and its ancestors.
-
- private void applyUpdate(Node node) {
- while (!node.isNull()) {
- this.update(node);
- node = node.parent;
- }
- }
-
- private void update(Node node) {
- node.max = Math.max(Math.max(node.left.max, node.right.max), node.interval.end);
- node.min = Math.min(Math.min(node.left.min, node.right.min), node.interval.start);
- }
-
- /**
- * @see #getSize()
- * @return Returns the number of nodes in the tree.
- * Recalculated each call
- */
- public int size() {
- return _size(this.root);
- }
-
-
- private int _size(Node node) {
- if (node.isNull())
- return 0;
- return 1 + _size(node.left) + _size(node.right);
- }
-
-
- private boolean allRedNodesFollowConstraints(Node node) {
- if (node.isNull())
- return true;
-
- if (node.color == Node.BLACK) {
- return (allRedNodesFollowConstraints(node.left) &&
- allRedNodesFollowConstraints(node.right));
- }
-
- // At this point, we know we're on a RED node.
- return (node.left.color == Node.BLACK &&
- node.right.color == Node.BLACK &&
- allRedNodesFollowConstraints(node.left) &&
- allRedNodesFollowConstraints(node.right));
- }
-
-
- // Check that both ends are equally balanced in terms of black height.
-
- private boolean isBalancedBlackHeight(Node node) {
- if (node.isNull())
- return true;
- return (blackHeight(node.left) == blackHeight(node.right) &&
- isBalancedBlackHeight(node.left) &&
- isBalancedBlackHeight(node.right));
- }
-
-
- // The black height of a node should be left/right equal.
-
- private int blackHeight(Node node) {
- if (node.isNull())
- return 0;
- int leftBlackHeight = blackHeight(node.left);
- if (node.color == Node.BLACK) {
- return leftBlackHeight + 1;
- } else {
- return leftBlackHeight;
- }
- }
-
-
- /**
- * Test code: make sure that the tree has all the properties
- * defined by Red Black trees and interval trees
- * <p/>
- * o. Root is black.
- * <p/>
- * o. NIL is black.
- * <p/>
- * o. Red nodes have black children.
- * <p/>
- * o. Every path from root to leaves contains the same number of
- * black nodes.
- * <p/>
- * o. getMax(node) is the maximum of any interval rooted at that node..
- * <p/>
- * This code is expensive, and only meant to be used for
- * assertions and testing.
- */
- public boolean isValid() {
- if (this.root.color != Node.BLACK) {
- //logger.warn("root color is wrong");
- return false;
- }
- if (NIL.color != Node.BLACK) {
- //logger.warn("NIL color is wrong");
- return false;
- }
- if (allRedNodesFollowConstraints(this.root) == false) {
- //logger.warn("red node doesn't follow constraints");
- return false;
- }
- if (isBalancedBlackHeight(this.root) == false) {
- //logger.warn("black height unbalanced");
- return false;
- }
-
- return hasCorrectMaxFields(this.root) &&
- hasCorrectMinFields(this.root);
- }
-
-
- private boolean hasCorrectMaxFields(Node node) {
- if (node.isNull())
- return true;
- return (getRealMax(node) == (node.max) &&
- hasCorrectMaxFields(node.left) &&
- hasCorrectMaxFields(node.right));
- }
-
-
- private boolean hasCorrectMinFields(Node node) {
- if (node.isNull())
- return true;
- return (getRealMin(node) == (node.min) &&
- hasCorrectMinFields(node.left) &&
- hasCorrectMinFields(node.right));
- }
-
-
- static class Node {
-
- public static boolean BLACK = false;
- public static boolean RED = true;
-
- Interval interval;
- int min;
- int max;
- Node left;
- Node right;
-
- // Color and parent are used for inserts. If tree is immutable these are not required (no requirement
- // to store these persistently).
- boolean color;
- Node parent;
-
-
- private Node() {
- this.max = Integer.MIN_VALUE;
- this.min = Integer.MAX_VALUE;
- }
-
- public void store(DataOutputStream dos) throws IOException {
- dos.writeInt(interval.start);
- dos.writeInt(interval.end);
- dos.writeInt(min);
- dos.writeInt(max);
-
- }
-
- public Node(Interval interval) {
- this();
- this.parent = NIL;
- this.left = NIL;
- this.right = NIL;
- this.interval = interval;
- this.color = RED;
- }
-
-
- static Node NIL;
-
- static {
- NIL = new Node();
- NIL.color = BLACK;
- NIL.parent = NIL;
- NIL.left = NIL;
- NIL.right = NIL;
- }
-
-
- public boolean isNull() {
- return this == NIL;
- }
-
-
- public String toString() {
-
- // Make some shorthand for the nodes
- Map<Interval, Integer> keys = new LinkedHashMap();
-
- if (this == NIL) {
- return "nil";
- }
-
- StringBuffer buf = new StringBuffer();
- _toString(buf, keys);
-
- buf.append("\n");
- for (Map.Entry<Interval, Integer> entry : keys.entrySet()) {
- buf.append(entry.getValue() + " = " + entry.getKey());
- buf.append("\n");
- }
-
- return buf.toString();
- }
-
- public void _toString(StringBuffer buf, Map<Interval, Integer> keys) {
- if (this == NIL) {
- buf.append("nil");
- buf.append("\n");
- return;
- }
-
- Integer selfKey = keys.get(this.interval);
- if (selfKey == null) {
- selfKey = keys.size();
- keys.put(this.interval, selfKey);
- }
- Integer leftKey = keys.get(this.left.interval);
- if (leftKey == null) {
- leftKey = keys.size();
- keys.put(this.left.interval, leftKey);
- }
- Integer rightKey = keys.get(this.right.interval);
- if (rightKey == null) {
- rightKey = keys.size();
- keys.put(this.right.interval, rightKey);
- }
-
-
- buf.append(selfKey + " -> " + leftKey + " , " + rightKey);
- buf.append("\n");
- this.left._toString(buf, keys);
- this.right._toString(buf, keys);
- }
- }
-}
-
diff --git a/src/java/org/broad/tribble/index/interval/IntervalTreeIndex.java b/src/java/org/broad/tribble/index/interval/IntervalTreeIndex.java
deleted file mode 100644
index da98ecc..0000000
--- a/src/java/org/broad/tribble/index/interval/IntervalTreeIndex.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index.interval;
-
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.index.AbstractIndex;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.util.LittleEndianInputStream;
-import org.broad.tribble.util.LittleEndianOutputStream;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * Index based on an interval tree
- * @see IntervalTree
- * @author jrobinso
- * @date Jul 9, 2010
- */
-public class IntervalTreeIndex extends AbstractIndex {
- public static final int INDEX_TYPE = IndexType.INTERVAL_TREE.fileHeaderTypeIdentifier;
-
- /**
- * Load from file.
- * @param inputStream This method assumes that the input stream is already buffered as appropriate. Caller
- * should close after this object is constructed.
- */
- public IntervalTreeIndex(final InputStream inputStream) throws IOException {
- final LittleEndianInputStream dis = new LittleEndianInputStream(inputStream);
- validateIndexHeader(INDEX_TYPE, dis);
- read(dis);
- }
-
- /**
- * Prepare to build an index.
- * @param featureFile File which we are indexing
- */
- public IntervalTreeIndex(final String featureFile) {
- super(featureFile);
- }
-
- @Override
- public Class getChrIndexClass() {
- return ChrIndex.class;
- }
-
- @Override
- protected int getType() {
- return INDEX_TYPE;
- }
-
- /**
- * Add a new interval to this index
- * @param chr Chromosome
- * @param interval
- */
- public void insert(final String chr, final Interval interval) {
- ChrIndex chrIdx = (ChrIndex) chrIndices.get(chr);
- if (chrIdx == null) {
- chrIdx = new ChrIndex(chr);
- chrIndices.put(chr, chrIdx);
- }
- chrIdx.insert(interval);
- }
-
- protected void setChrIndex(final List<ChrIndex> indicies) {
- for (final ChrIndex index : indicies) {
- chrIndices.put(index.getName(), index);
- }
- }
-
- public void printTree() {
-
- for (final String chr : chrIndices.keySet()) {
- System.out.println(chr + ":");
- final ChrIndex chrIdx = (ChrIndex) chrIndices.get(chr);
- chrIdx.printTree();
- System.out.println();
- }
- }
-
- public static class ChrIndex implements org.broad.tribble.index.ChrIndex {
-
- IntervalTree tree;
- String name;
-
- /**
- * Default constructor needed for factory methods -- DO NOT REMOVE
- */
- public ChrIndex() {
-
- }
-
- public ChrIndex(final String name) {
- this.name = name;
- tree = new IntervalTree();
- }
-
- public String getName() {
- return name;
- }
-
- public void insert(final Interval iv) {
- tree.insert(iv);
- }
-
- public List<Block> getBlocks() {
- return null;
- }
-
-
- public List<Block> getBlocks(final int start, final int end) {
-
- // Get intervals and build blocks list
- final List<Interval> intervals = tree.findOverlapping(new Interval(start, end));
-
- // save time (and save throwing an exception) if the blocks are empty, return now
- if (intervals == null || intervals.size() == 0) return new ArrayList<Block>();
-
- final Block[] blocks = new Block[intervals.size()];
- int idx = 0;
- for (final Interval iv : intervals) {
- blocks[idx++] = iv.getBlock();
- }
-
- // Sort blocks by start position
- Arrays.sort(blocks, new Comparator<Block>() {
- public int compare(final Block b1, final Block b2) {
- // this is a little cryptic because the normal method (b1.getStartPosition() - b2.getStartPosition()) wraps in int space and we incorrectly sort the blocks in extreme cases
- return b1.getStartPosition() - b2.getStartPosition() < 1 ? -1 : (b1.getStartPosition() - b2.getStartPosition() > 1 ? 1 : 0);
- }
- });
-
- // Consolidate blocks that are close together
- final List<Block> consolidatedBlocks = new ArrayList(blocks.length);
- Block lastBlock = blocks[0];
- consolidatedBlocks.add(lastBlock);
- for (int i = 1; i < blocks.length; i++) {
- final Block block = blocks[i];
- if (block.getStartPosition() < (lastBlock.getEndPosition() + 1000)) {
- lastBlock.setEndPosition(block.getEndPosition());
- } else {
- lastBlock = block;
- consolidatedBlocks.add(lastBlock);
- }
- }
-
- return consolidatedBlocks;
- }
-
- public void printTree() {
- System.out.println(tree.toString());
- }
-
- public void write(final LittleEndianOutputStream dos) throws IOException {
-
- dos.writeString(name);
- final List<Interval> intervals = tree.getIntervals();
-
- dos.writeInt(intervals.size());
- for (final Interval interval : intervals) {
- dos.writeInt(interval.start);
- dos.writeInt(interval.end);
- dos.writeLong(interval.getBlock().getStartPosition());
- dos.writeInt((int)interval.getBlock().getSize());
- }
-
- }
-
- public void read(final LittleEndianInputStream dis) throws IOException {
-
- tree = new IntervalTree();
-
- name = dis.readString();
- int nIntervals = dis.readInt();
- while (nIntervals-- > 0) {
-
- final int start = dis.readInt();
- final int end = dis.readInt();
- final long pos = dis.readLong();
- final int size = dis.readInt();
-
- final Interval iv = new Interval(start, end, new Block(pos, size));
- tree.insert(iv);
- }
-
-
- }
-
- }
-}
diff --git a/src/java/org/broad/tribble/index/linear/LinearIndex.java b/src/java/org/broad/tribble/index/linear/LinearIndex.java
deleted file mode 100644
index 910c1fc..0000000
--- a/src/java/org/broad/tribble/index/linear/LinearIndex.java
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright (c) 2009-2010 by The Broad Institute, Inc.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index.linear;
-
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.index.AbstractIndex;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.util.LittleEndianInputStream;
-import org.broad.tribble.util.LittleEndianOutputStream;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.util.*;
-
-/**
- * Index defined by dividing the genome by chromosome, then each chromosome into bins of fixed width (in
- * genomic coordinates). Features are allocated to bins by start position. The longest feature in each
- * recorded and used to adjust the start position of a query to include all bins that might have a feature
- * that overlaps the query interval. This works well for feature sets of approximately homogeneous length,
- * or whose longest feature is on the order of the bin width or less.
- * <p/>
- * magicNumber integer
- * type integer
- * version integer
- * filename null terminated character array
- * filesize long
- * lastModified long
- * md5 String
- * flags integer
- * <p/>
- * ------ LINEAR INDEX
- * nChromosomes integer
- */
-public class LinearIndex extends AbstractIndex {
-
- // NOTE: To debug uncomment the System.getProperty and recompile.
- public static final double MAX_FEATURES_PER_BIN = Double.valueOf(System.getProperty("MAX_FEATURES_PER_BIN", "100"));
- public static final int INDEX_TYPE = IndexType.LINEAR.fileHeaderTypeIdentifier;
-
- private final static int MAX_BIN_WIDTH = 1 * 1000 * 1000 * 1000; // widths must be less than 1 billion
-
- // 1MB: we will no merge bins with any features in them beyond this size, no matter how sparse, per chromosome
- private static final long MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX = Long.valueOf(System.getProperty("MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX", "1024000"));
-
- public static boolean enableAdaptiveIndexing = true;
-
- /**
- * Initialize using the specified {@code indices}
- * @param indices
- * @param featureFile
- */
- public LinearIndex(final List<ChrIndex> indices, final File featureFile) {
- super(featureFile.getAbsolutePath());
- for (final ChrIndex index : indices)
- chrIndices.put(index.getName(), index);
- }
-
- private LinearIndex(final LinearIndex parent, final List<ChrIndex> indices) {
- super(parent);
- for (final ChrIndex index : indices)
- chrIndices.put(index.getName(), index);
- }
-
- /**
- * Initialize with default parameters
- * @param featureFile File for which this is an index
- */
- public LinearIndex(final String featureFile) {
- super(featureFile);
- }
-
- /**
- * Load from file.
- * @param inputStream This method assumes that the input stream is already buffered as appropriate.
- */
- public LinearIndex(final InputStream inputStream) throws IOException {
- final LittleEndianInputStream dis = new LittleEndianInputStream(inputStream);
- validateIndexHeader(INDEX_TYPE, dis);
- read(dis);
- }
-
- public boolean isCurrentVersion() {
- if (!super.isCurrentVersion()) return false;
-
- // todo fixme nasty hack to determine if this is an old style V3 linear index (without nFeaturesPerBin)
- for (final org.broad.tribble.index.ChrIndex chrIndex : chrIndices.values())
- if (((ChrIndex) chrIndex).OLD_V3_INDEX)
- return false;
-
- return true;
- }
-
- @Override
- protected int getType() {
- return INDEX_TYPE;
- }
-
- public List<String> getSequenceNames() {
- return (chrIndices == null ? Collections.EMPTY_LIST :
- Collections.unmodifiableList(new ArrayList<String>(chrIndices.keySet())));
- }
-
- @Override
- public Class getChrIndexClass() {
- return ChrIndex.class;
- }
-
-
- /**
- * Blocks are organized as a simple flat list:
- * <p/>
- * Block 0
- * Block 1
- * Block 2
- * <p/>
- * There's a constant bin width, so that each block corresponds to a specific interval
- * over the genome based on its index, as in:
- * <p/>
- * Block 0: (0 - binWidth]
- * Block 1: (binWidth - 2 * binWidth]
- * Block 2: (2 * binWidth - 3 * binWidth]
- * <p/>
- * Note that covered regions are open on the left ( and closed on the right ].
- * <p/>
- * In general, if block i is the ith block (starting from 0), then block i
- * contains all records that have starting position > (i * binWidth) and
- * <= ((i + 1) * binWidth))
- */
- public static class ChrIndex implements org.broad.tribble.index.ChrIndex {
- private String name = "";
- private int binWidth;
- private int longestFeature;
- private int nFeatures;
- private List<Block> blocks;
-
- private boolean OLD_V3_INDEX = false;
-
- /**
- * Default constructor needed for factory methods -- DO NOT REMOVE
- */
- public ChrIndex() {
-
- }
-
- ChrIndex(final String name, final int binWidth) {
- this.name = name;
- this.binWidth = binWidth;
- this.blocks = new ArrayList<Block>(100);
- this.longestFeature = 0;
- //this.largestBlockSize = 0;
- this.nFeatures = 0;
- }
-
- public String getName() {
- return name;
- }
-
- void addBlock(final Block block) {
- blocks.add(block);
- //largestBlockSize = Math.max(largestBlockSize, block.getSize());
- }
-
- public int getNBlocks() {
- return blocks.size();
- }
-
- public List<Block> getBlocks() {
- return blocks;
- }
-
- public List<Block> getBlocks(final int start, final int end) {
- if (blocks.isEmpty()) {
- return Collections.emptyList();
- } else {
- // Adjust position for the longest feature in this chromosome. This insures we get
- // features that start before the bin but extend into it
- final int adjustedPosition = Math.max(start - longestFeature, 0);
- final int startBinNumber = adjustedPosition / binWidth;
- if (startBinNumber >= blocks.size()) // are we off the end of the bin list, so return nothing
- return Collections.emptyList();
- else {
- final int endBinNumber = Math.min((end - 1) / binWidth, blocks.size() - 1);
-
- // By definition blocks are adjacent for the liner index. Combine them into one merged block
-
- final long startPos = blocks.get(startBinNumber).getStartPosition();
- final long endPos = blocks.get(endBinNumber).getStartPosition() + blocks.get(endBinNumber).getSize();
- final long size = endPos - startPos;
- if (size == 0) {
- return Collections.EMPTY_LIST;
- } else {
- final Block mergedBlock = new Block(startPos, size);
- return Arrays.asList(mergedBlock);
- }
- }
- }
- }
-
-
- public void updateLongestFeature(final int featureLength) {
- longestFeature = Math.max(longestFeature, featureLength);
- }
-
- public int getNFeatures() {
- return this.nFeatures;
- }
-
- public void incrementFeatureCount() {
- this.nFeatures++;
- }
-
- public void write(final LittleEndianOutputStream dos) throws IOException {
-
- // Chr name, binSize, # bins, longest feature
- dos.writeString(name);
- dos.writeInt(binWidth);
- dos.writeInt(blocks.size());
- dos.writeInt(longestFeature);
- dos.writeInt(0); // no longer used
- //dos.writeInt(largestBlockSize);
- dos.writeInt(nFeatures);
-
- long pos = 0;
- long size = 0;
- for (final Block block : blocks) {
- pos = block.getStartPosition();
- size = block.getSize();
- dos.writeLong(pos);
- }
- // End of last block for this chromosome
- dos.writeLong(pos + size);
- }
-
- public void read(final LittleEndianInputStream dis) throws IOException {
- name = dis.readString();
- binWidth = dis.readInt();
- final int nBins = dis.readInt();
- longestFeature = dis.readInt();
- //largestBlockSize = dis.readInt();
- // largestBlockSize and totalBlockSize are old V3 index values. largest block size should be 0 for
- // all newer V3 block. This is a nasty hack that should be removed when we go to V4 (XML!) indices
- OLD_V3_INDEX = dis.readInt() > 0;
- nFeatures = dis.readInt();
-
- // note the code below accounts for > 60% of the total time to read an index
- blocks = new ArrayList<Block>(nBins);
- long pos = dis.readLong();
- for (int binNumber = 0; binNumber < nBins; binNumber++) {
- final long nextPos = dis.readLong();
- final long size = nextPos - pos;
- blocks.add(new Block(pos, size));
- pos = nextPos;
- }
- }
-
- public boolean equals(final Object obj) {
- if (this == obj) return true;
- if (!(obj instanceof ChrIndex)) return false;
- final ChrIndex other = (ChrIndex) obj;
- return binWidth == other.binWidth
- && longestFeature == other.longestFeature
- //&& largestBlockSize == other.largestBlockSize
- && nFeatures == other.nFeatures
- && name.equals(other.name)
- && blocks.equals(other.blocks);
- }
-
- /**
- * @return Total size of all blocks
- */
- public long getTotalSize() {
- long n = 0;
- for (final Block b : getBlocks())
- n += b.getSize();
- return n;
- }
-
- public double getAverageFeatureSize() {
- return (1.0 * getTotalSize()) / getNFeatures();
- }
-
- public double getFeaturesPerBlock() {
- return (1.0 * getNFeatures()) / getNBlocks();
- }
-
- private double getNFeaturesOfMostDenseBlock(final double featureSize) {
- double m = -1;
- for (final Block b : getBlocks()) {
- final double n = b.getSize() / featureSize;
- if (m == -1 || n > m) m = n;
- }
- return m;
- }
-
- private double optimizeScore() {
- return getNFeaturesOfMostDenseBlock(getAverageFeatureSize());
- }
-
- public ChrIndex optimize(final double threshold) {
- return optimize(this, threshold, 0);
- }
-
- private static boolean badBinWidth(final ChrIndex idx) {
- if (idx.binWidth > MAX_BIN_WIDTH || idx.binWidth < 0) // an overflow occurred
- return true;
- else if (MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX != 0 && idx.getNFeatures() > 1 && idx.binWidth > MAX_BIN_WIDTH_FOR_OCCUPIED_CHR_INDEX) {
- return true;
- } else {
- return false;
- }
- }
-
- private static ChrIndex optimize(ChrIndex idx, final double threshold, int level) {
- ChrIndex best = idx;
-
- while (true) {
- final double score = idx.optimizeScore();
-
- if (score > threshold || idx.getNBlocks() == 1 || badBinWidth(idx))
- break;
- else {
- best = idx; // remember the last best option
-
- // try to make a better one
- idx = mergeBlocks(idx);
- level++;
- }
-
- if (level > 30) throw new IllegalStateException("Too many iterations");
- }
-
- return best;
- }
-
- private static ChrIndex mergeBlocks(final ChrIndex idx) {
- final ChrIndex merged = new ChrIndex(idx.name, idx.binWidth * 2); // increasing width by 2 each time
- merged.longestFeature = idx.longestFeature;
- merged.nFeatures = idx.nFeatures;
-
- final Iterator<Block> blocks = idx.getBlocks().iterator();
- if (!blocks.hasNext())
- throw new IllegalStateException("Block iterator cannot be empty at the start for " + idx.getName());
-
- // extremely simple merging algorithm. Walk left to right, joining up blocks adjacent blocks.
- while (blocks.hasNext()) {
- final Block b1 = blocks.next();
- final Block b2 = blocks.hasNext() ? blocks.next() : null;
-
- if (b2 == null)
- merged.addBlock(b1);
- else
- // the new block is simply the start of the first block and the size of both together
- merged.addBlock(new Block(b1.getStartPosition(), b1.getSize() + b2.getSize()));
- }
-
- return merged;
- }
-
- private static String dupString(final char c, final int nCopies) {
- final char[] chars = new char[nCopies];
- Arrays.fill(chars, c);
- return new String(chars);
- }
- }
-
- /**
- * Adapative optimization of the linear index
- * @param threshold threshold to use for optimizing each constituent {@code chrIndex}
- * @return The new optimized index
- */
- public Index optimize(final double threshold) {
- if (enableAdaptiveIndexing) {
-
- final List<ChrIndex> newIndices = new ArrayList<ChrIndex>(this.chrIndices.size());
- for (final String name : chrIndices.keySet()) {
- final LinearIndex.ChrIndex oldIdx = (LinearIndex.ChrIndex) chrIndices.get(name);
- final LinearIndex.ChrIndex newIdx = oldIdx.optimize(threshold);
- newIndices.add(newIdx);
- }
- return new LinearIndex(this, newIndices);
- } else {
- return this;
- }
- }
-
- public Index optimize() {
- return optimize(MAX_FEATURES_PER_BIN);
- }
-
- /**
- * Code to convert linear index to a text table for analysis
- * @param out Stream to which to write out table to
- */
- public void writeTable(final PrintStream out) {
- out.printf("chr binWidth avg.feature.size nFeatures.total block.id start.pos size nFeatures%n");
- for (final String name : chrIndices.keySet()) {
- final LinearIndex.ChrIndex chrIdx = (LinearIndex.ChrIndex) chrIndices.get(name);
- int blockCount = 0;
- for (final Block b : chrIdx.getBlocks()) {
- out.printf("%s %d %.2f %d %d %d %d %d%n", name, chrIdx.binWidth, chrIdx.getAverageFeatureSize(), chrIdx.getNFeatures(), blockCount,
- blockCount * chrIdx.binWidth, b.getSize(), (int) (b.getSize() / chrIdx.getAverageFeatureSize()));
- blockCount++;
- }
- }
- }
-
- // purely for testing purposes
- protected final void setTS(final long ts) {
- this.indexedFileTS = ts;
- }
-}
-
diff --git a/src/java/org/broad/tribble/index/linear/LinearIndexCreator.java b/src/java/org/broad/tribble/index/linear/LinearIndexCreator.java
deleted file mode 100644
index fb48ae4..0000000
--- a/src/java/org/broad/tribble/index/linear/LinearIndexCreator.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index.linear;
-
-import org.broad.tribble.Feature;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.TribbleIndexCreator;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * For creating a LinearIndex from a stream of features.
- *
- * @author jrobinso
- */
-public class LinearIndexCreator extends TribbleIndexCreator {
- public static int DEFAULT_BIN_WIDTH = 8000;
- // the set bin width
- private int binWidth = DEFAULT_BIN_WIDTH;
-
- // the input file
- private final File inputFile;
-
- private final LinkedList<LinearIndex.ChrIndex> chrList = new LinkedList<LinearIndex.ChrIndex>();
- private int longestFeature= 0;
-
- private final ArrayList<Block> blocks = new ArrayList<Block>();
-
- public LinearIndexCreator(final File inputFile, final int binSize) {
- this.inputFile = inputFile;
- binWidth = binSize;
- }
-
- public LinearIndexCreator(final File inputFile) {
- this(inputFile, DEFAULT_BIN_WIDTH);
- }
-
- /**
- * add a feature to the index
- * @param feature the feature, from which we use the contig, start, and stop
- * @param filePosition the position of the file at the BEGINNING of the current feature
- */
- public void addFeature(final Feature feature, final long filePosition) {
- // fi we don't have a chrIndex yet, or if the last one was for the previous contig, create a new one
- if (chrList.size() == 0 || !chrList.getLast().getName().equals(feature.getChr())) {
- // if we're creating a new chrIndex (not the first), make sure to dump the blocks to the old chrIndex
- if (chrList.size() != 0)
- for (int x = 0; x < blocks.size(); x++) {
- blocks.get(x).setEndPosition((x + 1 == blocks.size()) ? filePosition : blocks.get(x + 1).getStartPosition());
- chrList.getLast().addBlock(blocks.get(x));
- }
- chrList.add(new LinearIndex.ChrIndex(feature.getChr(),binWidth));
- blocks.clear();
-
- // Add the first block
- blocks.add(new Block(filePosition, 0));
- longestFeature = 0;
- }
-
- // if start > current bin location, make new bins until we're at the correct location
- while (feature.getStart() > blocks.size() * binWidth) {
- blocks.add(new Block(filePosition,0));
- }
- if ((feature.getEnd()- feature.getStart())+1 > longestFeature) {
- longestFeature = (feature.getEnd()- feature.getStart())+1;
- chrList.getLast().updateLongestFeature(longestFeature);
- }
- chrList.getLast().incrementFeatureCount();
- }
-
- /**
- * finalize the index; producing an index object
- * @param finalFilePosition the final file position, for indexes that have to close out with the final position
- * @return an Index object
- */
- public Index finalizeIndex(final long finalFilePosition) {
- if (finalFilePosition == 0)
- throw new IllegalArgumentException("finalFilePosition != 0, -> " + finalFilePosition);
-
- for (int x = 0; x < blocks.size(); x++) {
- blocks.get(x).setEndPosition((x + 1 == blocks.size()) ? finalFilePosition : blocks.get(x+1).getStartPosition());
- chrList.getLast().addBlock(blocks.get(x));
- }
- blocks.clear();
-
- final LinearIndex index = new LinearIndex(chrList,inputFile);
- index.addProperties(properties);
- index.finalizeIndex();
- return index.optimize();
- }
-
- /**
- * the current default bin size
- * @return
- */
- public int defaultBinSize() {
- return DEFAULT_BIN_WIDTH;
- }
-
- public int getBinSize() { return binWidth; }
-}
-
diff --git a/src/java/org/broad/tribble/index/tabix/TabixFormat.java b/src/java/org/broad/tribble/index/tabix/TabixFormat.java
deleted file mode 100644
index 8f82229..0000000
--- a/src/java/org/broad/tribble/index/tabix/TabixFormat.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index.tabix;
-
-import org.broad.tribble.TribbleException;
-
-/**
- * The values in a Tabix header that define the format of the file being indexed, e.g. gff, bed, vcf
- */
-public class TabixFormat implements Cloneable {
- public static final int ZERO_BASED = 0x10000;
- public static final int GENERIC_FLAGS = 0;
- public static final int SAM_FLAGS = 1;
- public static final int VCF_FLAGS = 2;
- public static final int UCSC_FLAGS = GENERIC_FLAGS | ZERO_BASED;
-
- /** Predefined headers for known formats */
- public static TabixFormat GFF = new TabixFormat(GENERIC_FLAGS, 1, 4, 5, '#', 0);
- public static TabixFormat BED = new TabixFormat(UCSC_FLAGS, 1, 2, 3, '#', 0);
- public static TabixFormat PSLTBL = new TabixFormat(UCSC_FLAGS, 15, 17, 18, '#', 0);
- public static TabixFormat SAM = new TabixFormat(SAM_FLAGS, 3, 4, 0, '@', 0);
- public static TabixFormat VCF = new TabixFormat(VCF_FLAGS, 1, 2, 0, '#', 0);
-
- /** Describes interpretation of file being indexed. See FLAGS constants above. */
- public int flags;
- /** One-based index of the column in the file being indexed containing the sequence name */
- public int sequenceColumn;
- /** One-based index of the column in the file being indexed containing the start position. */
- public int startPositionColumn;
- /**
- * One-based index of the column in the file being indexed containing the end position. Zero implies
- * there is no end position column.
- */
- public int endPositionColumn;
- /** Lines in the file being indexed that start with this character are ignored. */
- public char metaCharacter;
- /** This is part of the index header, but does not appear to be used. */
- public int numHeaderLinesToSkip;
-
- public TabixFormat() {
- }
-
- public TabixFormat(final int flags, final int sequenceColumn, final int startPositionColumn, final int endPositionColumn, final char metaCharacter, final int numHeaderLinesToSkip) {
- this.flags = flags;
- this.sequenceColumn = sequenceColumn;
- this.startPositionColumn = startPositionColumn;
- this.endPositionColumn = endPositionColumn;
- this.metaCharacter = metaCharacter;
- this.numHeaderLinesToSkip = numHeaderLinesToSkip;
- }
-
- @Override
- public TabixFormat clone() {
- try {
- return (TabixFormat)super.clone();
- } catch (final CloneNotSupportedException e) {
- throw new TribbleException("unpossible!");
- }
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final TabixFormat that = (TabixFormat) o;
-
- if (endPositionColumn != that.endPositionColumn) return false;
- if (flags != that.flags) return false;
- if (metaCharacter != that.metaCharacter) return false;
- if (numHeaderLinesToSkip != that.numHeaderLinesToSkip) return false;
- if (sequenceColumn != that.sequenceColumn) return false;
- if (startPositionColumn != that.startPositionColumn) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = flags;
- result = 31 * result + sequenceColumn;
- result = 31 * result + startPositionColumn;
- result = 31 * result + endPositionColumn;
- result = 31 * result + (int) metaCharacter;
- result = 31 * result + numHeaderLinesToSkip;
- return result;
- }
-}
diff --git a/src/java/org/broad/tribble/index/tabix/TabixIndex.java b/src/java/org/broad/tribble/index/tabix/TabixIndex.java
deleted file mode 100644
index 44fd98a..0000000
--- a/src/java/org/broad/tribble/index/tabix/TabixIndex.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index.tabix;
-
-import net.sf.samtools.Bin;
-import net.sf.samtools.BinningIndexContent;
-import net.sf.samtools.Chunk;
-import net.sf.samtools.LinearIndex;
-import net.sf.samtools.util.BlockCompressedInputStream;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.StringUtil;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.util.LittleEndianInputStream;
-import org.broad.tribble.util.LittleEndianOutputStream;
-import org.broad.tribble.util.TabixUtils;
-
-import java.io.EOFException;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.*;
-
-/**
- * This class represent a Tabix index that has been built in memory or read from a file. It can be queried or
- * written to a file.
- */
-public class TabixIndex implements Index {
- private static final byte[] MAGIC = {'T', 'B', 'I', 1};
- public static final int MAGIC_NUMBER;
- static {
- final ByteBuffer bb = ByteBuffer.allocate(MAGIC.length);
- bb.put(MAGIC);
- bb.flip();
- MAGIC_NUMBER = bb.order(ByteOrder.LITTLE_ENDIAN).getInt();
- }
-
- private final TabixFormat formatSpec;
- private final List<String> sequenceNames;
- private final BinningIndexContent[] indices;
-
- /**
- * @param formatSpec Information about how to interpret the file being indexed. Unused by this class other than
- * written to an output file.
- * @param sequenceNames Sequences in the file being indexed, in the order they appear in the file.
- * @param indices One for each element of sequenceNames
- */
- public TabixIndex(final TabixFormat formatSpec, final List<String> sequenceNames, final BinningIndexContent[] indices) {
- if (sequenceNames.size() != indices.length) {
- throw new IllegalArgumentException("sequenceNames.size() != indices.length");
- }
- this.formatSpec = formatSpec.clone();
- this.sequenceNames = Collections.unmodifiableList(new ArrayList<String>(sequenceNames));
- this.indices = indices;
- }
-
- /**
- * @param inputStream This is expected to be buffered and be gzip-decompressing as appropriate. Caller
- * should close input stream after ctor returns.
- */
- public TabixIndex(final InputStream inputStream) throws IOException {
- this(inputStream, false);
- }
-
- /**
- * Convenient ctor that opens the file, wraps with with BGZF reader, and closes after reading index.
- */
- public TabixIndex(final File tabixFile) throws IOException {
- this(new BlockCompressedInputStream(tabixFile), true);
- }
-
- private TabixIndex(final InputStream inputStream, final boolean closeInputStream) throws IOException {
- final LittleEndianInputStream dis = new LittleEndianInputStream(inputStream);
- if (dis.readInt() != MAGIC_NUMBER) {
- throw new TribbleException(String.format("Unexpected magic number 0x%x", MAGIC_NUMBER));
- }
- final int numSequences = dis.readInt();
- indices = new BinningIndexContent[numSequences];
- formatSpec = new TabixFormat();
- formatSpec.flags = dis.readInt();
- formatSpec.sequenceColumn = dis.readInt();
- formatSpec.startPositionColumn = dis.readInt();
- formatSpec.endPositionColumn = dis.readInt();
- formatSpec.metaCharacter = (char)dis.readInt();
- formatSpec.numHeaderLinesToSkip = dis.readInt();
- final int nameBlockSize = dis.readInt();
- final byte[] nameBlock = new byte[nameBlockSize];
- if (dis.read(nameBlock) != nameBlockSize) throw new EOFException("Premature end of file reading Tabix header");
- final List<String> sequenceNames = new ArrayList<String>(numSequences);
- int startPos = 0;
- for (int i = 0; i < numSequences; ++i) {
- int endPos = startPos;
- while (nameBlock[endPos] != '\0') ++endPos;
- sequenceNames.add(StringUtil.bytesToString(nameBlock, startPos, endPos - startPos));
- startPos = endPos + 1;
- }
- if (startPos != nameBlockSize) {
- throw new TribbleException("Tabix header format exception. Sequence name block is longer than expected");
- }
- for (int i = 0; i < numSequences; ++i) {
- indices[i] = loadSequence(i, dis);
- }
- if (closeInputStream) CloserUtil.close(dis);
- this.sequenceNames = Collections.unmodifiableList(sequenceNames);
- }
-
- /**
- *
- * @param chr the chromosome
- * @param start the start position, one-based, inclusive.
- * @param end the end position, one-based, inclusive.
- * @return List of regions of file that are candidates for the given query.
- *
- * TODO: This method has not yet been tested, since the primary task is index writing.
- */
- @Override
- public List<Block> getBlocks(final String chr, final int start, final int end) {
- final int sequenceIndex = sequenceNames.indexOf(chr);
- if (sequenceIndex == -1 || indices[sequenceIndex] == null) {
- return Collections.EMPTY_LIST;
- }
- final List<Chunk> chunks = indices[sequenceIndex].getChunksOverlapping(start, end);
- final List<Block> ret = new ArrayList<Block>(chunks.size());
- for (final Chunk chunk : chunks) {
- ret.add(new Block(chunk.getChunkStart(), chunk.getChunkEnd() - chunk.getChunkStart()));
- }
- return ret;
- }
-
- @Override
- public boolean isCurrentVersion() {
- return true;
- }
-
- @Override
- public List<String> getSequenceNames() {
- return sequenceNames;
- }
-
- @Override
- public boolean containsChromosome(final String chr) {
- return sequenceNames.contains(chr);
- }
-
- /**
- *
- * No arbitrary properties in Tabix
- */
- @Override
- public Map<String, String> getProperties() {
- return null;
- }
-
- @Override
- public boolean equalsIgnoreProperties(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final TabixIndex that = (TabixIndex) o;
-
- if (!formatSpec.equals(that.formatSpec)) return false;
- if (!Arrays.equals(indices, that.indices)) return false;
- return sequenceNames.equals(that.sequenceNames);
-
- }
-
- public TabixFormat getFormatSpec() {
- return formatSpec;
- }
-
- /**
- * Writes the index with BGZF.
- * @param tabixFile Where to write the index.
- */
- public void write(final File tabixFile) {
- final LittleEndianOutputStream los = new LittleEndianOutputStream(new BlockCompressedOutputStream(tabixFile));
- try {
- write(los);
- los.close();
- } catch (final IOException e) {
- throw new TribbleException("Exception writing " + tabixFile.getAbsolutePath(), e);
- }
- }
-
- /**
- * Writes to a file with appropriate name and directory based on feature file.
- * @param featureFile File being indexed.
- */
- @Override
- public void writeBasedOnFeatureFile(final File featureFile) throws IOException {
- if (!featureFile.isFile()) return;
- write(new File(featureFile.getAbsolutePath() + TabixUtils.STANDARD_INDEX_EXTENSION));
- }
-
- /**
- *
- * @param los It is assumes that caller has done appropriate buffering and BlockCompressedOutputStream wrapping.
- * Caller should close output stream after invoking this method.
- * @throws IOException
- */
- @Override
- public void write(final LittleEndianOutputStream los) throws IOException {
- los.writeInt(MAGIC_NUMBER);
- los.writeInt(sequenceNames.size());
- los.writeInt(formatSpec.flags);
- los.writeInt(formatSpec.sequenceColumn);
- los.writeInt(formatSpec.startPositionColumn);
- los.writeInt(formatSpec.endPositionColumn);
- los.writeInt(formatSpec.metaCharacter);
- los.writeInt(formatSpec.numHeaderLinesToSkip);
- int nameBlockSize = sequenceNames.size(); // null terminators
- for (final String sequenceName : sequenceNames) nameBlockSize += sequenceName.length();
- los.writeInt(nameBlockSize);
- for (final String sequenceName : sequenceNames) {
- los.write(StringUtil.stringToBytes(sequenceName));
- los.write(0);
- }
- for (final BinningIndexContent index : indices) {
- writeSequence(index, los);
- }
- }
-
- private void writeSequence(final BinningIndexContent indexContent, final LittleEndianOutputStream los) throws IOException {
- if (indexContent == null) {
- los.writeInt(0);
- } else {
- final BinningIndexContent.BinList binList = indexContent.getBins();
- los.writeInt(binList.numberOfNonNullBins);
- for (final Bin bin : binList) {
- writeBin(bin, los);
- }
- writeLinearIndex(indexContent.getLinearIndex(), los);
- }
- }
-
- private void writeLinearIndex(final LinearIndex linearIndex, final LittleEndianOutputStream los) throws IOException {
- if (linearIndex.getIndexStart() != 0) {
- // This could be handled by writing zeroes, but it is not expected so just fail.
- throw new IllegalArgumentException("Non-zero linear index start");
- }
- final long[] entries = linearIndex.getIndexEntries();
- los.writeInt(entries.length);
- for (final long entry : entries) los.writeLong(entry);
- }
-
- private void writeBin(final Bin bin, final LittleEndianOutputStream los) throws IOException {
- los.writeInt(bin.getBinNumber());
- final List<Chunk> chunkList = bin.getChunkList();
- los.writeInt(chunkList.size());
- for (final Chunk chunk: chunkList) {
- los.writeLong(chunk.getChunkStart());
- los.writeLong(chunk.getChunkEnd());
- }
- }
-
- /**
- * Although this is probably identical to BAM index reading code, code does not exist there to load directly
- * into a BinningIndexContent object, so that is implemented here.
- * @param referenceSequenceIndex Merely for setting in the returned object, not for seeking into the file.
- * @param dis This method assumes that the current position is at the start of the reference.
- */
- private BinningIndexContent loadSequence(final int referenceSequenceIndex, final LittleEndianInputStream dis) throws IOException {
- final int numBins = dis.readInt();
- if (numBins == 0) return null;
- int nonNullBins = 0;
- final ArrayList<Bin> bins = new ArrayList<Bin>();
- for (int i = 0; i < numBins; ++i) {
- final Bin bin = loadBin(referenceSequenceIndex, dis);
- if (bin != null) {
- // File is not sparse, but array being produced is sparse, so grow array with nulls as appropriate
- // so that bin number == index into array.
- ++nonNullBins;
- if (bins.size() > bin.getBinNumber()) {
- if (bins.get(bin.getBinNumber()) != null) {
- throw new TribbleException("Bin " + bin.getBinNumber() + " appears more than once in file");
- }
- bins.set(bin.getBinNumber(),bin);
- } else {
- // Grow bins array as needed.
- bins.ensureCapacity(bin.getBinNumber() + 1);
- while (bins.size() < bin.getBinNumber()) bins.add(null);
- bins.add(bin);
- }
- }
- }
- final LinearIndex linearIndex = loadLinearIndex(referenceSequenceIndex, dis);
- return new BinningIndexContent(referenceSequenceIndex,
- new BinningIndexContent.BinList(bins.toArray(new Bin[bins.size()]), nonNullBins), linearIndex);
- }
-
- private LinearIndex loadLinearIndex(final int referenceSequenceIndex, final LittleEndianInputStream dis) throws IOException {
- final int numElements = dis.readInt();
- final long[] elements = new long[numElements];
- for (int i = 0; i < numElements; ++i) {
- elements[i] = dis.readLong();
- }
- return new LinearIndex(referenceSequenceIndex, 0, elements);
- }
-
- private Bin loadBin(final int referenceSequenceIndex, final LittleEndianInputStream dis) throws IOException {
- final int binNumber = dis.readInt();
- final Bin ret = new Bin(referenceSequenceIndex, binNumber);
- final int numChunks = dis.readInt();
- final List<Chunk> chunkList = new ArrayList<Chunk>(numChunks);
- for (int i = 0; i < numChunks; ++i) {
- chunkList.add(loadChunk(dis));
- }
- ret.setChunkList(chunkList);
- return ret;
- }
-
- private Chunk loadChunk(final LittleEndianInputStream dis) throws IOException {
- final long start = dis.readLong();
- final long end = dis.readLong();
- return new Chunk(start, end);
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final TabixIndex index = (TabixIndex) o;
-
- if (!formatSpec.equals(index.formatSpec)) return false;
- if (!Arrays.equals(indices, index.indices)) return false;
- if (!sequenceNames.equals(index.sequenceNames)) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = formatSpec.hashCode();
- result = 31 * result + sequenceNames.hashCode();
- result = 31 * result + Arrays.hashCode(indices);
- return result;
- }
-}
diff --git a/src/java/org/broad/tribble/index/tabix/TabixIndexCreator.java b/src/java/org/broad/tribble/index/tabix/TabixIndexCreator.java
deleted file mode 100644
index 7fdb438..0000000
--- a/src/java/org/broad/tribble/index/tabix/TabixIndexCreator.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index.tabix;
-
-import net.sf.samtools.*;
-import org.broad.tribble.Feature;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexCreator;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * IndexCreator for Tabix.
- * Features are expected to be 1-based, inclusive.
- */
-public class TabixIndexCreator implements IndexCreator {
- private final TabixFormat formatSpec;
- private final List<BinningIndexContent> indexContents = new ArrayList<BinningIndexContent>();
- private final List<String> sequenceNames = new ArrayList<String>();
- // Merely a faster way to ensure that features are added in a specific sequence name order
- private final Set<String> sequenceNamesSeen = new HashSet<String>();
- // A sequence dictionary is not required, but if it is provided all sequences names must be present in it.
- // It is used to determine the length of a sequence in order to optimize index memory allocation.
- private final SAMSequenceDictionary sequenceDictionary;
-
- private String currentSequenceName = null;
- private BinningIndexBuilder indexBuilder = null;
- // A feature can't be added to the index until the next feature is added because the next feature
- // defines the location of the end of the previous feature in the output file.
- private TabixFeature previousFeature = null;
-
-
- /**
- * @param sequenceDictionary is not required, but if present all features added must refer to sequences in the
- * dictionary. It is used to optimize the memory needed to build the index.
- */
- public TabixIndexCreator(final SAMSequenceDictionary sequenceDictionary,
- final TabixFormat formatSpec) {
- this.sequenceDictionary = sequenceDictionary;
- this.formatSpec = formatSpec.clone();
- }
-
- public TabixIndexCreator(final TabixFormat formatSpec) {
- this(null, formatSpec);
- }
-
- @Override
- public void addFeature(final Feature feature, final long filePosition) {
- final String sequenceName = feature.getChr();
- final int referenceIndex;
- if (sequenceName.equals(currentSequenceName)) {
- referenceIndex = sequenceNames.size() - 1;
- } else {
- referenceIndex = sequenceNames.size();
- if (currentSequenceName != null && sequenceNamesSeen.contains(sequenceName)) {
- throw new IllegalArgumentException("Sequence " + feature + " added out sequence of order");
- }
- }
- final TabixFeature thisFeature = new TabixFeature(referenceIndex, feature.getStart(), feature.getEnd(), filePosition);
- if (previousFeature != null) {
- if (previousFeature.compareTo(thisFeature) > 0) {
- throw new IllegalArgumentException(String.format("Features added out of order: previous (%s) > next (%s)",
- previousFeature, thisFeature));
- }
- finalizeFeature(filePosition);
- }
- previousFeature = thisFeature;
- if (referenceIndex == sequenceNames.size()) {
- advanceToReference(sequenceName);
- }
- }
-
- private void finalizeFeature(final long featureEndPosition) {
- previousFeature.featureEndFilePosition = featureEndPosition;
- if (previousFeature.featureStartFilePosition >= previousFeature.featureEndFilePosition) {
- throw new IllegalArgumentException(String.format("Feature start position %d >= feature end position %d",
- previousFeature.featureStartFilePosition, previousFeature.featureEndFilePosition));
- }
- indexBuilder.processFeature(previousFeature);
- }
-
- private void advanceToReference(final String sequenceName) {
- if (indexBuilder != null) {
- indexContents.add(indexBuilder.generateIndexContent());
- }
- // If sequence dictionary is provided, BinningIndexBuilder can reduce size of array it allocates.
- final int sequenceLength;
- if (sequenceDictionary != null) {
- sequenceLength = sequenceDictionary.getSequence(sequenceName).getSequenceLength();
- } else {
- sequenceLength = 0;
- }
- indexBuilder = new BinningIndexBuilder(sequenceNames.size(), sequenceLength);
- sequenceNames.add(sequenceName);
- currentSequenceName = sequenceName;
- sequenceNamesSeen.add(sequenceName);
- }
-
- @Override
- public Index finalizeIndex(final long finalFilePosition) {
- if (previousFeature != null) {
- finalizeFeature(finalFilePosition);
- }
- if (indexBuilder != null) {
- indexContents.add(indexBuilder.generateIndexContent());
- }
- // Make this as big as the sequence dictionary, even if there is not content for every sequence,
- // but truncate the sequence dictionary before its end if there are sequences in the sequence dictionary without
- // any features.
- final BinningIndexContent[] indices = indexContents.toArray(new BinningIndexContent[sequenceNames.size()]);
- return new TabixIndex(formatSpec, sequenceNames, indices);
- }
-
-
- private static class TabixFeature implements BinningIndexBuilder.FeatureToBeIndexed, Comparable<TabixFeature> {
- private final int referenceIndex;
- private final int start;
- private final int end;
- private final long featureStartFilePosition;
- // Position after this feature in the file.
- private long featureEndFilePosition = -1;
-
- private TabixFeature(final int referenceIndex, final int start, final int end, final long featureStartFilePosition) {
- this.referenceIndex = referenceIndex;
- this.start = start;
- this.end = end;
- this.featureStartFilePosition = featureStartFilePosition;
- }
-
- @Override
- public int getStart() {
- return start;
- }
-
- @Override
- public int getEnd() {
- return end;
- }
-
- /**
- *
- * @return null -- Let index builder compute this.
- */
- @Override
- public Integer getIndexingBin() {
- return null;
- }
-
- @Override
- public Chunk getChunk() {
- if (featureEndFilePosition == -1) {
- throw new IllegalStateException("End position is not set");
- }
- return new Chunk(featureStartFilePosition, featureEndFilePosition);
- }
-
- @Override
- public int compareTo(final TabixFeature other) {
- final int ret = this.referenceIndex - other.referenceIndex;
- if (ret != 0) return ret;
- return this.start - other.start;
- }
-
- @Override
- public String toString() {
- return "TabixFeature{" +
- "referenceIndex=" + referenceIndex +
- ", start=" + start +
- ", end=" + end +
- ", featureStartFilePosition=" + featureStartFilePosition +
- ", featureEndFilePosition=" + featureEndFilePosition +
- '}';
- }
- }
-}
diff --git a/src/java/org/broad/tribble/readers/AsciiLineReader.java b/src/java/org/broad/tribble/readers/AsciiLineReader.java
deleted file mode 100644
index 0ef2c3d..0000000
--- a/src/java/org/broad/tribble/readers/AsciiLineReader.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2007-2009 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-package org.broad.tribble.readers;
-
-import net.sf.samtools.util.LocationAware;
-import org.broad.tribble.TribbleException;
-
-import java.io.*;
-
-/**
- * A simple class that provides {@link #readLine()} functionality around a PositionalBufferedStream
- *
- * {@link BufferedReader} and its {@link java.io.BufferedReader#readLine()} method should be used in preference to this class (when the
- * {@link net.sf.samtools.util.LocationAware} functionality is not required) because it offers greater performance.
- *
- * @author jrobinso
- */
-public class AsciiLineReader implements LineReader, LocationAware {
- private static final int BUFFER_OVERFLOW_INCREASE_FACTOR = 2;
- private static final byte LINEFEED = (byte) ('\n' & 0xff);
- private static final byte CARRIAGE_RETURN = (byte) ('\r' & 0xff);
-
- PositionalBufferedStream is;
- char[] lineBuffer;
-
- public AsciiLineReader(final InputStream is){
- this(new PositionalBufferedStream(is));
- }
-
- public AsciiLineReader(final PositionalBufferedStream is) {
- this.is = is;
- // Allocate this only once, even though it is essentially a local variable of
- // readLine. This makes a huge difference in performance
- lineBuffer = new char[10000];
- }
-
- /**
- * @return The position of the InputStream
- */
- public long getPosition(){
- if(is == null){
- throw new TribbleException("getPosition() called but no default stream was provided to the class on creation");
- }
- return is.getPosition();
- }
-
- /**
- * Read a line of text. A line is considered to be terminated by any one
- * of a line feed ('\n'), a carriage return ('\r'), or a carriage return
- * followed immediately by a linefeed.
- *
- * @param stream the stream to read the next line from
- * @return A String containing the contents of the line or null if the
- * end of the stream has been reached
- */
- public final String readLine(final PositionalBufferedStream stream) throws IOException{
- int linePosition = 0;
-
- while (true) {
- final int b = stream.read();
-
- if (b == -1) {
- // eof reached. Return the last line, or null if this is a new line
- if (linePosition > 0) {
- return new String(lineBuffer, 0, linePosition);
- } else {
- return null;
- }
- }
-
- final char c = (char) (b & 0xFF);
- if (c == LINEFEED || c == CARRIAGE_RETURN) {
- if (c == CARRIAGE_RETURN && stream.peek() == LINEFEED) {
- stream.read(); // <= skip the trailing \n in case of \r\n termination
- }
-
- return new String(lineBuffer, 0, linePosition);
- } else {
- // Expand line buffer size if neccessary. Reserve at least 2 characters
- // for potential line-terminators in return string
-
- if (linePosition > (lineBuffer.length - 3)) {
- final char[] temp = new char[BUFFER_OVERFLOW_INCREASE_FACTOR * lineBuffer.length];
- System.arraycopy(lineBuffer, 0, temp, 0, lineBuffer.length);
- lineBuffer = temp;
- }
-
- lineBuffer[linePosition++] = c;
- }
- }
- }
-
- /**
- * Same as {@link #readLine(PositionalBufferedStream)} but uses the stream provided in the constructor
- *
- * @return
- */
- public final String readLine() throws IOException{
- if ( is == null ){
- throw new TribbleException("readLine() called without an explicit stream argument but no default stream was provided to the class on creation");
- }
- return readLine(is);
- }
-
- @Override
- public void close() {
- if ( is != null ) is.close();
- lineBuffer = null;
- }
-
- public static void main(final String[] args) throws Exception {
- final File testFile = new File(args[0]);
- final int iterations = Integer.valueOf(args[1]);
- final boolean includeBufferedReader = Boolean.valueOf(args[2]);
- long t0, lineCount, dt;
- double rate;
-
- System.out.printf("Testing %s%n", args[0]);
- for (int i = 0; i < iterations; i++) {
- if ( includeBufferedReader ) {
- final BufferedReader reader2 = new BufferedReader(new FileReader(testFile));
- t0 = System.currentTimeMillis();
- lineCount = 0;
- while (reader2.readLine() != null) {
- lineCount++;
- }
- dt = System.currentTimeMillis() - t0;
- rate = ((double) lineCount) / dt;
- printStatus("BufferedReader", lineCount, rate, dt);
- reader2.close();
- }
-
- if ( includeBufferedReader ) {
- final LongLineBufferedReader longLineBufferedReader = new LongLineBufferedReader(new BufferedReader(new FileReader(testFile)));
- t0 = System.currentTimeMillis();
- lineCount = 0;
- while (longLineBufferedReader.readLine() != null) {
- lineCount++;
- }
- dt = System.currentTimeMillis() - t0;
- rate = ((double) lineCount) / dt;
- printStatus("BufferedReader", lineCount, rate, dt);
- longLineBufferedReader.close();
- }
-
- final PositionalBufferedStream pbs = new PositionalBufferedStream(new FileInputStream(testFile));
- final LineReader reader = new AsciiLineReader(pbs);
- t0 = System.currentTimeMillis();
- lineCount = 0;
- while (reader.readLine() != null) {
- lineCount++;
- }
- dt = System.currentTimeMillis() - t0;
- rate = ((double) lineCount) / dt;
- printStatus("PositionalBufferedStream", lineCount, rate, dt);
- pbs.close();
- }
- }
-
- private static final void printStatus(final String name, final long lineCount, final double rate, final long dt) {
- System.out.printf("%30s: %d lines read. Rate = %.2e lines per second. DT = %d%n", name, lineCount, rate, dt);
- System.out.flush();
- }
-}
-
diff --git a/src/java/org/broad/tribble/readers/AsciiLineReaderIterator.java b/src/java/org/broad/tribble/readers/AsciiLineReaderIterator.java
deleted file mode 100644
index 6ffcef7..0000000
--- a/src/java/org/broad/tribble/readers/AsciiLineReaderIterator.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.broad.tribble.readers;
-
-import net.sf.samtools.util.AbstractIterator;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.LocationAware;
-import net.sf.samtools.util.Tuple;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-/**
- * A class that iterates over the lines and line positions in an {@link AsciiLineReader}.
- *
- * This class is slower than other {@link LineIterator}s because it is driven by {@link AsciiLineReader}, but offers the benefit of
- * implementing {@link net.sf.samtools.util.LocationAware}, which is required for indexing. If you do not require {@link net.sf.samtools.util.LocationAware}, consider using
- * {@link LineIteratorImpl} as an alternative to this class.
- *
- * Note an important distinction in the way this class and its inner iterator differ: in the inner iterator, the position stored with
- * a line is the position at the start of that line. However, {@link #getPosition()} of the outer class must return the position at the
- * end of the most-recently-returned line (or the start of the underlying {@link AsciiLineReader}, if no line has been read). The latter
- * bit of logic here is required to conform with the interface described by {@link net.sf.samtools.util.LocationAware#getPosition()}.
- *
- * @author mccowan
- */
-public class AsciiLineReaderIterator implements LocationAware, LineIterator, Closeable {
- private final AsciiLineReader asciiLineReader;
- private final TupleIterator i;
- private Tuple<String, Long> current = null;
-
- public AsciiLineReaderIterator(final AsciiLineReader asciiLineReader) {
- this.asciiLineReader = asciiLineReader;
- this.i = new TupleIterator();
- }
-
- @Override
- public void close() throws IOException {
- CloserUtil.close(asciiLineReader);
- }
-
- @Override
- public boolean hasNext() {
- return i.hasNext();
- }
-
- @Override
- public String next() {
- current = i.next();
- return current.a;
- }
-
- @Override
- public void remove() {
- i.remove();
- }
-
- /**
- * Returns the byte position at the end of the most-recently-read line (a.k.a., the beginning of the next line) from {@link #next()} in
- * the underlying {@link AsciiLineReader}.
- */
- @Override
- public long getPosition() {
- return i.getPosition();
- }
-
- @Override
- public String peek() {
- return i.peek().a;
- }
-
- /**
- * This is stored internally since it iterates over {@link net.sf.samtools.util.Tuple}, not {@link String} (and the outer
- * class can't do both).
- */
- private class TupleIterator extends AbstractIterator<Tuple<String, Long>> implements LocationAware {
-
- public TupleIterator() {
- hasNext(); // Initialize the iterator, which appears to be a requirement of the parent class. TODO: Really?
- }
-
- @Override
- protected Tuple<String, Long> advance() {
- final String line;
- final long position = asciiLineReader.getPosition(); // A line's position is where it starts, so get it before reading the line.
- try {
- line = asciiLineReader.readLine();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- return line == null ? null : new Tuple<String, Long>(line, position);
- }
-
- /** Returns the byte position at the beginning of the next line. */
- @Override
- public long getPosition() {
- final Tuple<String, Long> peek = peek();
- // Be careful: peek will be null at the end of the stream.
- return peek != null ? peek.b : asciiLineReader.getPosition();
- }
- }
-}
diff --git a/src/java/org/broad/tribble/readers/AsynchronousLineReader.java b/src/java/org/broad/tribble/readers/AsynchronousLineReader.java
deleted file mode 100644
index 166e079..0000000
--- a/src/java/org/broad/tribble/readers/AsynchronousLineReader.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.broad.tribble.readers;
-
-import net.sf.samtools.util.CloserUtil;
-import org.broad.tribble.TribbleException;
-
-import java.io.Reader;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A LineReader implementation that delegates the work of reading and fetching lines to another thread. The thread terminates when it
- * encounters EOF in the underlying reader, or when this LineReader is closed.
- *
- * @author mccowan
- */
-public class AsynchronousLineReader implements LineReader {
- public static final int DEFAULT_NUMBER_LINES_BUFFER = 100;
-
- private final LongLineBufferedReader bufferedReader;
- private final BlockingQueue<String> lineQueue;
- private final Thread worker;
- private volatile Throwable workerException = null;
- private volatile boolean eofReached = false;
-
- public AsynchronousLineReader(final Reader reader, final int lineReadAheadSize) {
- bufferedReader = new LongLineBufferedReader(reader);
- lineQueue = new LinkedBlockingQueue<String>(lineReadAheadSize);
- worker = new Thread(new Worker());
- worker.setDaemon(true);
- worker.start();
- }
-
- public AsynchronousLineReader(final Reader reader) {
- this(reader, DEFAULT_NUMBER_LINES_BUFFER);
- }
-
- @Override
- public String readLine() {
- try {
- // Continually poll until we get a result, unless the underlying reader is finished.
- for (; ; ) {
- checkAndThrowIfWorkerException();
- final String pollResult = this.lineQueue.poll(100, TimeUnit.MILLISECONDS); // Not ideal for small files.
- if (pollResult == null) {
- if (eofReached) {
- checkAndThrowIfWorkerException();
- return lineQueue.poll(); // If there is nothing left, returns null as expected. Otherwise, grabs next element.
- }
- } else {
- return pollResult;
- }
- }
- } catch (final InterruptedException e) {
- throw new TribbleException("Line polling interrupted.", e);
- }
- }
-
- private void checkAndThrowIfWorkerException() {
- if (workerException != null) {
- throw new TribbleException("Exception encountered in worker thread.", workerException);
- }
- }
-
- @Override
- public void close() {
- this.worker.interrupt(); // Allow the worker to close gracefully.
- }
-
- private class Worker implements Runnable {
- @Override
- public void run() {
- try {
- for (; ; ) {
- final String line = bufferedReader.readLine();
- if (line == null) {
- eofReached = true;
- break;
- } else {
- try {
- lineQueue.put(line);
- } catch (final InterruptedException e) {
- /**
- * A thread interruption is not an exceptional state: it means a {@link AsynchronousLineReader#close();} has
- * been called, so shut down gracefully.
- */
- break;
- }
- }
- }
- } catch (final Throwable e) {
- AsynchronousLineReader.this.workerException = e;
- } finally {
- CloserUtil.close(AsynchronousLineReader.this.bufferedReader);
- }
- }
- }
-}
diff --git a/src/java/org/broad/tribble/readers/LineIterator.java b/src/java/org/broad/tribble/readers/LineIterator.java
deleted file mode 100644
index bd8e3f0..0000000
--- a/src/java/org/broad/tribble/readers/LineIterator.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.broad.tribble.readers;
-
-import java.util.Iterator;
-
-/**
- * A very simple descriptor for line-iterables.
- * @author mccowan
- */
-public interface LineIterator extends Iterator<String> {
- /** Peeks at the next line, without expending any elements in the underlying iterator. */
- public String peek();
-}
diff --git a/src/java/org/broad/tribble/readers/LineIteratorImpl.java b/src/java/org/broad/tribble/readers/LineIteratorImpl.java
deleted file mode 100644
index 4084e46..0000000
--- a/src/java/org/broad/tribble/readers/LineIteratorImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.broad.tribble.readers;
-
-import net.sf.samtools.util.AbstractIterator;
-import net.sf.samtools.util.CloserUtil;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-/** A simple iterator over the elements in LineReader. */
-public class LineIteratorImpl extends AbstractIterator<String> implements LineIterator, Closeable {
- private final LineReader lineReader;
-
- /**
- * @param lineReader The line reader whose elements are to be iterated over.
- */
- public LineIteratorImpl(final LineReader lineReader) {
- this.lineReader = lineReader;
- }
-
- @Override
- protected String advance() {
- try {
- return lineReader.readLine();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void close() throws IOException {
- CloserUtil.close(lineReader);
- }
-}
diff --git a/src/java/org/broad/tribble/readers/LineReader.java b/src/java/org/broad/tribble/readers/LineReader.java
deleted file mode 100644
index 08345d8..0000000
--- a/src/java/org/broad/tribble/readers/LineReader.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.readers;
-
-import java.io.IOException;
-
-/**
- * Interface for line-oriented readers.
- */
-public interface LineReader {
-
- /**
- * @return The next "line" from the source. Typically a line is a set of characters
- * terminated by '\n', '\r', or '\r\n'. The line-terminator is not included
- * @throws IOException
- */
- public String readLine() throws IOException;
-
-
- public void close();
-}
diff --git a/src/java/org/broad/tribble/readers/LineReaderUtil.java b/src/java/org/broad/tribble/readers/LineReaderUtil.java
deleted file mode 100644
index bac947a..0000000
--- a/src/java/org/broad/tribble/readers/LineReaderUtil.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.broad.tribble.readers;
-
-import net.sf.samtools.Defaults;
-import net.sf.samtools.util.CloserUtil;
-import org.broad.tribble.TribbleException;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-/**
- * A collection of factories for generating {@link LineReader}s.
- *
- * @author mccowan
- */
-public class LineReaderUtil {
- public enum LineReaderOption {
- ASYNCHRONOUS, SYNCHRONOUS
- }
-
- /**
- * Like {@link #fromBufferedStream(java.io.InputStream, org.broad.tribble.readers.LineReaderUtil.LineReaderOption)}, but the synchronicity
- * option is determined by {@link net.sf.samtools.Defaults}: if asynchronous I/O is enabled, an asynchronous line reader will be
- * returned.
- */
- public static LineReader fromBufferedStream(final InputStream stream) {
- return fromBufferedStream(stream, Defaults.USE_ASYNC_IO ? LineReaderOption.ASYNCHRONOUS : LineReaderOption.SYNCHRONOUS);
- }
-
- /**
- * Convenience factory for composing a LineReader from an InputStream.
- */
- public static LineReader fromBufferedStream(final InputStream bufferedStream, final LineReaderOption option) {
- final InputStreamReader bufferedInputStreamReader = new InputStreamReader(bufferedStream);
- switch (option) {
- case ASYNCHRONOUS:
- return new AsynchronousLineReader(bufferedInputStreamReader);
- case SYNCHRONOUS:
- return new LineReader() {
- final LongLineBufferedReader reader = new LongLineBufferedReader(bufferedInputStreamReader);
-
- @Override
- public String readLine() {
- try {
- return reader.readLine();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void close() {
- CloserUtil.close(reader);
- }
- };
- default:
- throw new TribbleException(String.format("Unrecognized LineReaderUtil option: %s.", option));
- }
- }
-
-}
diff --git a/src/java/org/broad/tribble/readers/LongLineBufferedReader.java b/src/java/org/broad/tribble/readers/LongLineBufferedReader.java
deleted file mode 100644
index aced12f..0000000
--- a/src/java/org/broad/tribble/readers/LongLineBufferedReader.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.broad.tribble.readers;
-
-
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * A variant of {@link java.io.BufferedReader} with improved performance reading files with long lines.
- *
- * This class is almost identical to BufferedReader, but it retains a single line buffer for accumulating characters in a line, and allows
- * its size to grow. Conversely, {@link java.io.BufferedReader} assumes each new line will be approximately 80 characters and its
- * performance suffers when that is not the case.
- *
- * Unlike {@link java.io.BufferedReader}, this class is not thread safe.
- *
- * @author mccowan
- */
-public class LongLineBufferedReader extends Reader {
-
- private Reader in;
-
- private char cb[];
- private int nChars, nextChar;
-
- private static final int INVALIDATED = -2;
- private static final int UNMARKED = -1;
- private int markedChar = UNMARKED;
- private int readAheadLimit = 0; /* Valid only when markedChar > 0 */
-
- /**
- * If the next character is a line feed, skip it
- */
- private boolean skipLF = false;
-
- /**
- * The skipLF flag when the mark was set
- */
- private boolean markedSkipLF = false;
-
- private static final int DEFAULT_CHAR_BUFFER_SIZE = 8192;
- private static final int DEFAULT_EXPECTED_LINE_LENGTH = 80;
-
- private StringBuilder lineBuffer = new StringBuilder(DEFAULT_EXPECTED_LINE_LENGTH);
-
- /**
- * Creates a buffering character-input stream that uses an input buffer of
- * the specified size.
- *
- * @param in A Reader
- * @param sz Input-buffer size
- * @throws IllegalArgumentException If sz is <= 0
- */
- public LongLineBufferedReader(Reader in, int sz) {
- super(in);
- if (sz <= 0)
- throw new IllegalArgumentException("Buffer size <= 0");
- this.in = in;
- cb = new char[sz];
- nextChar = nChars = 0;
- }
-
- /**
- * Creates a buffering character-input stream that uses a default-sized
- * input buffer.
- *
- * @param in A Reader
- */
- public LongLineBufferedReader(Reader in) {
- this(in, DEFAULT_CHAR_BUFFER_SIZE);
- }
-
- /**
- * Checks to make sure that the stream has not been closed
- */
- private void ensureOpen() throws IOException {
- if (in == null)
- throw new IOException("Stream closed");
- }
-
- /**
- * Fills the input buffer, taking the mark into account if it is valid.
- */
- private void fill() throws IOException {
- int dst;
- if (markedChar <= UNMARKED) {
- /* No mark */
- dst = 0;
- } else {
- /* Marked */
- int delta = nextChar - markedChar;
- if (delta >= readAheadLimit) {
- /* Gone past read-ahead limit: Invalidate mark */
- markedChar = INVALIDATED;
- readAheadLimit = 0;
- dst = 0;
- } else {
- if (readAheadLimit <= cb.length) {
- /* Shuffle in the current buffer */
- System.arraycopy(cb, markedChar, cb, 0, delta);
- markedChar = 0;
- dst = delta;
- } else {
- /* Reallocate buffer to accommodate read-ahead limit */
- char ncb[] = new char[readAheadLimit];
- System.arraycopy(cb, markedChar, ncb, 0, delta);
- cb = ncb;
- markedChar = 0;
- dst = delta;
- }
- nextChar = nChars = delta;
- }
- }
-
- int n;
- do {
- n = in.read(cb, dst, cb.length - dst);
- } while (n == 0);
- if (n > 0) {
- nChars = dst + n;
- nextChar = dst;
- }
- }
-
- /**
- * Reads a single character.
- *
- * @return The character read, as an integer in the range
- * 0 to 65535 (<tt>0x00-0xffff</tt>), or -1 if the
- * end of the stream has been reached
- * @throws IOException If an I/O error occurs
- */
- public int read() throws IOException {
- synchronized (lock) {
- ensureOpen();
- for (; ; ) {
- if (nextChar >= nChars) {
- fill();
- if (nextChar >= nChars)
- return -1;
- }
- if (skipLF) {
- skipLF = false;
- if (cb[nextChar] == '\n') {
- nextChar++;
- continue;
- }
- }
- return cb[nextChar++];
- }
- }
- }
-
- /**
- * Reads characters into a portion of an array, reading from the underlying
- * stream if necessary.
- */
- private int read1(char[] cbuf, int off, int len) throws IOException {
- if (nextChar >= nChars) {
- /* If the requested length is at least as large as the buffer, and
- if there is no mark/reset activity, and if line feeds are not
- being skipped, do not bother to copy the characters into the
- local buffer. In this way buffered streams will cascade
- harmlessly. */
- if (len >= cb.length && markedChar <= UNMARKED && !skipLF) {
- return in.read(cbuf, off, len);
- }
- fill();
- }
- if (nextChar >= nChars) return -1;
- if (skipLF) {
- skipLF = false;
- if (cb[nextChar] == '\n') {
- nextChar++;
- if (nextChar >= nChars)
- fill();
- if (nextChar >= nChars)
- return -1;
- }
- }
- int n = Math.min(len, nChars - nextChar);
- System.arraycopy(cb, nextChar, cbuf, off, n);
- nextChar += n;
- return n;
- }
-
- /**
- * Reads characters into a portion of an array.
- * <p/>
- * <p> This method implements the general contract of the corresponding
- * <code>{@link Reader#read(char[], int, int) read}</code> method of the
- * <code>{@link Reader}</code> class. As an additional convenience, it
- * attempts to read as many characters as possible by repeatedly invoking
- * the <code>read</code> method of the underlying stream. This iterated
- * <code>read</code> continues until one of the following conditions becomes
- * true: <ul>
- * <p/>
- * <li> The specified number of characters have been read,
- * <p/>
- * <li> The <code>read</code> method of the underlying stream returns
- * <code>-1</code>, indicating end-of-file, or
- * <p/>
- * <li> The <code>ready</code> method of the underlying stream
- * returns <code>false</code>, indicating that further input requests
- * would block.
- * <p/>
- * </ul> If the first <code>read</code> on the underlying stream returns
- * <code>-1</code> to indicate end-of-file then this method returns
- * <code>-1</code>. Otherwise this method returns the number of characters
- * actually read.
- * <p/>
- * <p> Subclasses of this class are encouraged, but not required, to
- * attempt to read as many characters as possible in the same fashion.
- * <p/>
- * <p> Ordinarily this method takes characters from this stream's character
- * buffer, filling it from the underlying stream as necessary. If,
- * however, the buffer is empty, the mark is not valid, and the requested
- * length is at least as large as the buffer, then this method will read
- * characters directly from the underlying stream into the given array.
- * Thus redundant <code>BufferedReaderTwo</code>s will not copy data
- * unnecessarily.
- *
- * @param cbuf Destination buffer
- * @param off Offset at which to start storing characters
- * @param len Maximum number of characters to read
- * @return The number of characters read, or -1 if the end of the
- * stream has been reached
- * @throws IOException If an I/O error occurs
- */
- public int read(char cbuf[], int off, int len) throws IOException {
- synchronized (lock) {
- ensureOpen();
- if ((off < 0) || (off > cbuf.length) || (len < 0) ||
- ((off + len) > cbuf.length) || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- } else if (len == 0) {
- return 0;
- }
-
- int n = read1(cbuf, off, len);
- if (n <= 0) return n;
- while ((n < len) && in.ready()) {
- int n1 = read1(cbuf, off + n, len - n);
- if (n1 <= 0) break;
- n += n1;
- }
- return n;
- }
- }
-
- /**
- * Reads a line of text. A line is considered to be terminated by any one
- * of a line feed ('\n'), a carriage return ('\r'), or a carriage return
- * followed immediately by a linefeed.
- *
- * @param ignoreLF If true, the next '\n' will be skipped
- * @return A String containing the contents of the line, not including
- * any line-termination characters, or null if the end of the
- * stream has been reached
- * @throws IOException If an I/O error occurs
- * @see java.io.LineNumberReader#readLine()
- */
- String readLine(boolean ignoreLF) throws IOException {
- int startChar;
- lineBuffer.setLength(0);
-
- synchronized (lock) {
- ensureOpen();
- boolean omitLF = ignoreLF || skipLF;
-
- bufferLoop:
- for (; ; ) {
-
- if (nextChar >= nChars)
- fill();
- if (nextChar >= nChars) { /* EOF */
- if (lineBuffer != null && lineBuffer.length() > 0)
- return lineBuffer.toString();
- else
- return null;
- }
- boolean eol = false;
- char c = 0;
- int i;
-
- /* Skip a leftover '\n', if necessary */
- if (omitLF && (cb[nextChar] == '\n'))
- nextChar++;
- skipLF = false;
- omitLF = false;
-
- charLoop:
- for (i = nextChar; i < nChars; i++) {
- c = cb[i];
- if ((c == '\n') || (c == '\r')) {
- eol = true;
- break charLoop;
- }
- }
-
- startChar = nextChar;
- nextChar = i;
-
- if (eol) {
- String str;
- lineBuffer.append(cb, startChar, i - startChar);
- str = lineBuffer.toString();
- nextChar++;
- if (c == '\r') {
- skipLF = true;
- }
- return str;
- }
-
- lineBuffer.append(cb, startChar, i - startChar);
- }
- }
- }
-
- /**
- * Reads a line of text. A line is considered to be terminated by any one
- * of a line feed ('\n'), a carriage return ('\r'), or a carriage return
- * followed immediately by a linefeed.
- *
- * @return A String containing the contents of the line, not including
- * any line-termination characters, or null if the end of the
- * stream has been reached
- * @throws IOException If an I/O error occurs
- */
- public String readLine() throws IOException {
- return readLine(false);
- }
-
- /**
- * Skips characters.
- *
- * @param n The number of characters to skip
- * @return The number of characters actually skipped
- * @throws IllegalArgumentException If <code>n</code> is negative.
- * @throws IOException If an I/O error occurs
- */
- public long skip(long n) throws IOException {
- if (n < 0L) {
- throw new IllegalArgumentException("skip value is negative");
- }
- synchronized (lock) {
- ensureOpen();
- long r = n;
- while (r > 0) {
- if (nextChar >= nChars)
- fill();
- if (nextChar >= nChars) /* EOF */
- break;
- if (skipLF) {
- skipLF = false;
- if (cb[nextChar] == '\n') {
- nextChar++;
- }
- }
- long d = nChars - nextChar;
- if (r <= d) {
- nextChar += r;
- r = 0;
- break;
- } else {
- r -= d;
- nextChar = nChars;
- }
- }
- return n - r;
- }
- }
-
- /**
- * Tells whether this stream is ready to be read. A buffered character
- * stream is ready if the buffer is not empty, or if the underlying
- * character stream is ready.
- *
- * @throws IOException If an I/O error occurs
- */
- public boolean ready() throws IOException {
- synchronized (lock) {
- ensureOpen();
-
- /*
- * If newline needs to be skipped and the next char to be read
- * is a newline character, then just skip it right away.
- */
- if (skipLF) {
- /* Note that in.ready() will return true if and only if the next
- * read on the stream will not block.
- */
- if (nextChar >= nChars && in.ready()) {
- fill();
- }
- if (nextChar < nChars) {
- if (cb[nextChar] == '\n')
- nextChar++;
- skipLF = false;
- }
- }
- return (nextChar < nChars) || in.ready();
- }
- }
-
- /**
- * Tells whether this stream supports the mark() operation, which it does.
- */
- public boolean markSupported() {
- return true;
- }
-
- /**
- * Marks the present position in the stream. Subsequent calls to reset()
- * will attempt to reposition the stream to this point.
- *
- * @param readAheadLimit Limit on the number of characters that may be
- * read while still preserving the mark. An attempt
- * to reset the stream after reading characters
- * up to this limit or beyond may fail.
- * A limit value larger than the size of the input
- * buffer will cause a new buffer to be allocated
- * whose size is no smaller than limit.
- * Therefore large values should be used with care.
- * @throws IllegalArgumentException If readAheadLimit is < 0
- * @throws IOException If an I/O error occurs
- */
- public void mark(int readAheadLimit) throws IOException {
- if (readAheadLimit < 0) {
- throw new IllegalArgumentException("Read-ahead limit < 0");
- }
- synchronized (lock) {
- ensureOpen();
- this.readAheadLimit = readAheadLimit;
- markedChar = nextChar;
- markedSkipLF = skipLF;
- }
- }
-
- /**
- * Resets the stream to the most recent mark.
- *
- * @throws IOException If the stream has never been marked,
- * or if the mark has been invalidated
- */
- public void reset() throws IOException {
- synchronized (lock) {
- ensureOpen();
- if (markedChar < 0)
- throw new IOException((markedChar == INVALIDATED)
- ? "Mark invalid"
- : "Stream not marked");
- nextChar = markedChar;
- skipLF = markedSkipLF;
- }
- }
-
- public void close() throws IOException {
- synchronized (lock) {
- if (in == null)
- return;
- in.close();
- in = null;
- cb = null;
- }
- }
-}
diff --git a/src/java/org/broad/tribble/readers/Positional.java b/src/java/org/broad/tribble/readers/Positional.java
deleted file mode 100644
index f79ee2a..0000000
--- a/src/java/org/broad/tribble/readers/Positional.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.readers;
-
-import net.sf.samtools.util.LocationAware;
-
-import java.io.IOException;
-
-/**
- * Minimal interface for an object at support getting the current position in the stream / writer / file, as well as a handful of other
- * reader-like features.
- *
- * @author depristo
- */
-public interface Positional extends LocationAware {
- /**
- * Is the stream done? Equivalent to ! hasNext() for an iterator?
- * @return true if the stream has reached EOF, false otherwise
- */
- public boolean isDone() throws IOException;
-
- /**
- * Skip the next nBytes in the stream.
- * @param nBytes to skip, must be >= 0
- * @return the number of bytes actually skippped.
- * @throws IOException
- */
- public long skip(long nBytes) throws IOException;
-
- /**
- * Return the next byte in the first, without actually reading it from the stream.
- *
- * Has the same output as read()
- *
- * @return the next byte, or -1 if EOF encountered
- * @throws IOException
- */
- public int peek() throws IOException;
-}
diff --git a/src/java/org/broad/tribble/readers/PositionalBufferedStream.java b/src/java/org/broad/tribble/readers/PositionalBufferedStream.java
deleted file mode 100644
index 743f19f..0000000
--- a/src/java/org/broad/tribble/readers/PositionalBufferedStream.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2007-2009 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-package org.broad.tribble.readers;
-
-import org.broad.tribble.TribbleException;
-
-import java.io.*;
-
-/**
- * A wrapper around an {@code InputStream} which performs it's own buffering, and keeps track of the position.
- *
- * @author depristo
- */
-public final class PositionalBufferedStream extends InputStream implements Positional {
- final InputStream is;
- final byte[] buffer;
- int nextChar;
- int nChars;
- long position;
-
- public PositionalBufferedStream(final InputStream is) {
- this(is, 512000);
- }
-
- public PositionalBufferedStream(final InputStream is, final int bufferSize) {
- this.is = is;
- buffer = new byte[bufferSize];
- nextChar = nChars = 0;
- }
-
- public final long getPosition() {
- return position;
- }
-
- @Override
- public final int read() throws IOException {
- final int c = peek();
- if ( c >= 0 ) {
- // update position and buffer offset if peek says we aren't yet done
- position++;
- nextChar++;
- }
- return c;
- }
-
- @Override
- public final int read(final byte[] bytes, final int start, final int len) throws IOException {
- if ( len == 0 ) // If len is zero, then no bytes are read and 0 is returned
- return 0;
- if (nChars < 0) // If no byte is available because the stream is at end of file, the value -1 is returned
- return -1;
- else {
- int nRead = 0;
- int remaining = len;
-
- while ( remaining > 0 ) {
- // Try to Refill buffer if at the end of current buffer
- if ( nChars == nextChar )
- if ( fill() < 0 ) { // EOF
- break;
- }
-
- // we copy as many bytes from the buffer as possible, up to the number of need
- final int nCharsToCopy = Math.min(nChars - nextChar, remaining);
- System.arraycopy(buffer, nextChar, bytes, start + nRead, nCharsToCopy);
-
- // update nextChar (pointer into buffer) and keep track of nRead and remaining
- nextChar += nCharsToCopy;
- nRead += nCharsToCopy;
- remaining -= nCharsToCopy;
- }
-
- // make sure we update our position tracker to reflect having advanced by nRead bytes
- position += nRead;
-
- /** Conform to {@link InputStream#read(byte[], int, int)} contract by returning -1 if EOF and no data was read. */
- return nRead == 0 ? -1 : nRead;
- }
- }
-
- @Override
- public final int read(final byte[] bytes) throws IOException {
- return read(bytes, 0, bytes.length);
- }
-
- @Override
- public final boolean isDone() throws IOException {
- return nChars == -1 || peek() == -1;
- }
-
- @Override
- public final int peek() throws IOException {
- // Check for EOF
- if (nChars < 0) {
- return -1;
- } else if (nextChar == nChars){
- //Try to Refill buffer if at the end of current buffer
- if ( fill() < 0 ){
- return -1;
- }
- }
-
- return byteToInt(buffer[nextChar]);
- }
-
- private final int fill() throws IOException {
- nChars = is.read(buffer);
- nextChar = 0;
- return nChars;
- }
-
- public final long skip(final long nBytes) throws IOException {
- long remainingToSkip = nBytes;
-
- // because we have this buffer, that may be shorter than nBytes
- // we loop while there are bytes to skip, filling the buffer
- // When the buffer contains enough data that we have less than
- // its less left to skip we increase nextChar by the remaining
- // amount
- while ( remainingToSkip > 0 && ! isDone() ) {
- final long bytesLeftInBuffer = nChars - nextChar;
- if ( remainingToSkip > bytesLeftInBuffer ) {
- // we need to refill the buffer and continue our skipping
- remainingToSkip -= bytesLeftInBuffer;
- fill();
- } else {
- // there are enough bytes in the buffer to not read again
- // we just push forward the pointer nextChar
- nextChar += remainingToSkip;
- remainingToSkip = 0;
- }
- }
-
- final long actuallySkipped = nBytes - remainingToSkip;
- position += actuallySkipped;
- return actuallySkipped;
- }
-
- public final void close() {
- try {
- is.close();
- } catch (IOException ex) {
- new TribbleException("Failed to close PositionalBufferedStream", ex);
- }
- }
-
- private final static int byteToInt(byte b) {
- return b & 0xFF;
- }
-
- public static void main(String[] args) throws Exception {
- final File testFile = new File(args[0]);
- final int iterations = Integer.valueOf(args[1]);
- final boolean includeInputStream = Boolean.valueOf(args[2]);
- final boolean doReadFileInChunks = Boolean.valueOf(args[3]);
-
- System.out.printf("Testing %s%n", args[0]);
- for (int i = 0; i < iterations; i++) {
- if ( includeInputStream ) {
- final InputStream is = new FileInputStream(testFile);
- if ( doReadFileInChunks )
- readFileInChunks("InputStream", is);
- else
- readFileByLine("InputStream", is);
- is.close();
- }
-
- final PositionalBufferedStream pbs = new PositionalBufferedStream(new FileInputStream(testFile));
- if ( doReadFileInChunks )
- readFileInChunks("PositionalBufferedStream", pbs);
- else
- readFileByLine("PositionalBufferedStream", pbs);
- pbs.close();
- }
- }
-
- private static void readFileByLine(final String name, final InputStream is) throws IOException {
- final BufferedReader reader2 = new BufferedReader(new InputStreamReader(is));
- final long t0 = System.currentTimeMillis();
- long lineCount = 0;
- while (reader2.readLine() != null) {
- lineCount++;
- }
- final long dt = System.currentTimeMillis() - t0;
- final double rate = ((double) lineCount) / dt;
- printStatus(name, lineCount, rate, dt);
- reader2.close();
- }
-
- private static void readFileInChunks(final String name, final InputStream is) throws IOException {
- final long t0 = System.currentTimeMillis();
- long chunk = 0;
- final byte[] bytes = new byte[4096];
- while (is.read(bytes) != -1) {
- chunk++;
- }
- final long dt = System.currentTimeMillis() - t0;
- final double rate = ((double) chunk) / dt;
- printStatus(name, chunk, rate, dt);
- is.close();
- }
-
-
- private static final void printStatus(final String name, long lineCount, double rate, long dt) {
- System.out.printf("%30s: %d lines read. Rate = %.2e lines per second. DT = %d%n", name, lineCount, rate, dt);
- System.out.flush();
- }
-}
-
diff --git a/src/java/org/broad/tribble/readers/TabixIteratorLineReader.java b/src/java/org/broad/tribble/readers/TabixIteratorLineReader.java
deleted file mode 100644
index cd7fb93..0000000
--- a/src/java/org/broad/tribble/readers/TabixIteratorLineReader.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.readers;
-
-import java.io.IOException;
-
-/**
- * @author Jim Robinson
- * @date 2/11/12
- */
-public class TabixIteratorLineReader implements LineReader {
-
- TabixReader.Iterator iterator;
-
-
- public TabixIteratorLineReader(TabixReader.Iterator iterator) {
- this.iterator = iterator;
- }
-
- public String readLine() {
- try {
- return iterator != null ? iterator.next() : null;
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- public void close() {
- // Ignore -
- }
-}
diff --git a/src/java/org/broad/tribble/readers/TabixReader.java b/src/java/org/broad/tribble/readers/TabixReader.java
deleted file mode 100644
index b1c2d3a..0000000
--- a/src/java/org/broad/tribble/readers/TabixReader.java
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.readers;
-
-import java.io.*;
-import java.nio.*;
-import java.util.HashMap;
-import java.util.Arrays;
-import java.lang.StringBuffer;
-
-import net.sf.samtools.seekablestream.ISeekableStreamFactory;
-import net.sf.samtools.seekablestream.SeekableStream;
-import net.sf.samtools.util.BlockCompressedInputStream;
-import net.sf.samtools.seekablestream.SeekableStreamFactory;
-import org.broad.tribble.Tribble;
-import org.broad.tribble.util.ParsingUtils;
-import org.broad.tribble.util.TabixUtils;
-
-/**
- * @author Heng Li <hengli at broadinstitute.org>
- */
-public class TabixReader {
- private String mFn;
- private String mIdxFn;
- BlockCompressedInputStream mFp;
-
- private int mPreset;
- private int mSc;
- private int mBc;
- private int mEc;
- private int mMeta;
- private int mSkip;
- private String[] mSeq;
-
- public HashMap<String, Integer> mChr2tid;
-
- private static int MAX_BIN = 37450;
- private static int TAD_MIN_CHUNK_GAP = 32768;
- private static int TAD_LIDX_SHIFT = 14;
-
- protected class TPair64 implements Comparable<TPair64> {
- long u, v;
-
- public TPair64(final long _u, final long _v) {
- u = _u;
- v = _v;
- }
-
- public TPair64(final TPair64 p) {
- u = p.u;
- v = p.v;
- }
-
- public int compareTo(final TPair64 p) {
- return u == p.u ? 0 : ((u < p.u) ^ (u < 0) ^ (p.u < 0)) ? -1 : 1; // unsigned 64-bit comparison
- }
- }
-
- protected class TIndex {
- HashMap<Integer, TPair64[]> b; // binning index
- long[] l; // linear index
- }
-
- protected TIndex[] mIndex;
-
- private class TIntv {
- int tid, beg, end;
- }
-
- private static boolean less64(final long u, final long v) { // unsigned 64-bit comparison
- return (u < v) ^ (u < 0) ^ (v < 0);
- }
-
- /**
- * @param fn File name of the data file
- */
- public TabixReader(final String fn) throws IOException {
- this(fn, SeekableStreamFactory.getInstance().getBufferedStream(SeekableStreamFactory.getInstance().getStreamFor(fn)));
- }
-
- /**
- * @param fn File name of the data file (used for error messages only)
- * @param stream Seekable stream from which the data is read
- */
- public TabixReader(final String fn, SeekableStream stream) throws IOException {
- this(fn, null, stream);
- }
-
- /**
- * @param fn File name of the data file (used for error messages only)
- * @param idxFn Full path to the index file. Auto-generated if null
- * @param stream Seekable stream from which the data is read
- */
- public TabixReader(final String fn, final String idxFn, SeekableStream stream) throws IOException {
- mFn = fn;
- mFp = new BlockCompressedInputStream(stream);
- if(idxFn == null){
- mIdxFn = ParsingUtils.appendToPath(fn, TabixUtils.STANDARD_INDEX_EXTENSION);
- }
- readIndex();
- }
-
- private static int reg2bins(final int beg, final int _end, final int[] list) {
- int i = 0, k, end = _end;
- if (beg >= end) return 0;
- if (end >= 1 << 29) end = 1 << 29;
- --end;
- list[i++] = 0;
- for (k = 1 + (beg >> 26); k <= 1 + (end >> 26); ++k) list[i++] = k;
- for (k = 9 + (beg >> 23); k <= 9 + (end >> 23); ++k) list[i++] = k;
- for (k = 73 + (beg >> 20); k <= 73 + (end >> 20); ++k) list[i++] = k;
- for (k = 585 + (beg >> 17); k <= 585 + (end >> 17); ++k) list[i++] = k;
- for (k = 4681 + (beg >> 14); k <= 4681 + (end >> 14); ++k) list[i++] = k;
- return i;
- }
-
- public static int readInt(final InputStream is) throws IOException {
- byte[] buf = new byte[4];
- is.read(buf);
- return ByteBuffer.wrap(buf).order(ByteOrder.LITTLE_ENDIAN).getInt();
- }
-
- public static long readLong(final InputStream is) throws IOException {
- byte[] buf = new byte[8];
- is.read(buf);
- return ByteBuffer.wrap(buf).order(ByteOrder.LITTLE_ENDIAN).getLong();
- }
-
- public static String readLine(final InputStream is) throws IOException {
- StringBuffer buf = new StringBuffer();
- int c;
- while ((c = is.read()) >= 0 && c != '\n')
- buf.append((char) c);
- if (c < 0) return null;
- return buf.toString();
- }
-
- /**
- * Read the Tabix index from a file
- *
- * @param fp File pointer
- */
- public void readIndex(SeekableStream fp) throws IOException {
- if (fp == null) return;
- BlockCompressedInputStream is = new BlockCompressedInputStream(fp);
- byte[] buf = new byte[4];
-
- is.read(buf, 0, 4); // read "TBI\1"
- mSeq = new String[readInt(is)]; // # sequences
- mChr2tid = new HashMap<String, Integer>();
- mPreset = readInt(is);
- mSc = readInt(is);
- mBc = readInt(is);
- mEc = readInt(is);
- mMeta = readInt(is);
- mSkip = readInt(is);
- // read sequence dictionary
- int i, j, k, l = readInt(is);
- buf = new byte[l];
- is.read(buf);
- for (i = j = k = 0; i < buf.length; ++i) {
- if (buf[i] == 0) {
- byte[] b = new byte[i - j];
- System.arraycopy(buf, j, b, 0, b.length);
- String s = new String(b);
- mChr2tid.put(s, k);
- mSeq[k++] = s;
- j = i + 1;
- }
- }
- // read the index
- mIndex = new TIndex[mSeq.length];
- for (i = 0; i < mSeq.length; ++i) {
- // the binning index
- int n_bin = readInt(is);
- mIndex[i] = new TIndex();
- mIndex[i].b = new HashMap<Integer, TPair64[]>();
- for (j = 0; j < n_bin; ++j) {
- int bin = readInt(is);
- TPair64[] chunks = new TPair64[readInt(is)];
- for (k = 0; k < chunks.length; ++k) {
- long u = readLong(is);
- long v = readLong(is);
- chunks[k] = new TPair64(u, v); // in C, this is inefficient
- }
- mIndex[i].b.put(bin, chunks);
- }
- // the linear index
- mIndex[i].l = new long[readInt(is)];
- for (k = 0; k < mIndex[i].l.length; ++k)
- mIndex[i].l[k] = readLong(is);
- }
- // close
- is.close();
- }
-
- /**
- * Read the Tabix index from the default file.
- */
- public void readIndex() throws IOException {
- ISeekableStreamFactory ssf = SeekableStreamFactory.getInstance();
- readIndex(ssf.getBufferedStream(ssf.getStreamFor(mIdxFn), 128000));
- }
-
- /**
- * Read one line from the data file.
- */
- public String readLine() throws IOException {
- return readLine(mFp);
- }
-
- private int chr2tid(final String chr) {
- if (mChr2tid.containsKey(chr)) return mChr2tid.get(chr);
- else return -1;
- }
-
- /**
- * Parse a region in the format of "chr1", "chr1:100" or "chr1:100-1000"
- *
- * @param reg Region string
- * @return An array where the three elements are sequence_id,
- * region_begin and region_end. On failure, sequence_id==-1.
- */
- public int[] parseReg(final String reg) { // FIXME: NOT working when the sequence name contains : or -.
- String chr;
- int colon, hyphen;
- int[] ret = new int[3];
- colon = reg.indexOf(':');
- hyphen = reg.indexOf('-');
- chr = colon >= 0 ? reg.substring(0, colon) : reg;
- ret[1] = colon >= 0 ? Integer.parseInt(reg.substring(colon + 1, hyphen >= 0 ? hyphen : reg.length())) - 1 : 0;
- ret[2] = hyphen >= 0 ? Integer.parseInt(reg.substring(hyphen + 1)) : 0x7fffffff;
- ret[0] = chr2tid(chr);
- return ret;
- }
-
- private TIntv getIntv(final String s) {
- TIntv intv = new TIntv();
- int col = 0, end = 0, beg = 0;
- while ((end = s.indexOf('\t', beg)) >= 0 || end == -1) {
- ++col;
- if (col == mSc) {
- intv.tid = chr2tid(end != -1 ? s.substring(beg, end) : s.substring(beg));
- } else if (col == mBc) {
- intv.beg = intv.end = Integer.parseInt(end != -1 ? s.substring(beg, end) : s.substring(beg));
- if ((mPreset & 0x10000) != 0) ++intv.end;
- else --intv.beg;
- if (intv.beg < 0) intv.beg = 0;
- if (intv.end < 1) intv.end = 1;
- } else { // FIXME: SAM supports are not tested yet
- if ((mPreset & 0xffff) == 0) { // generic
- if (col == mEc)
- intv.end = Integer.parseInt(end != -1 ? s.substring(beg, end) : s.substring(beg));
- } else if ((mPreset & 0xffff) == 1) { // SAM
- if (col == 6) { // CIGAR
- int l = 0, i, j;
- String cigar = s.substring(beg, end);
- for (i = j = 0; i < cigar.length(); ++i) {
- if (cigar.charAt(i) > '9') {
- int op = cigar.charAt(i);
- if (op == 'M' || op == 'D' || op == 'N')
- l += Integer.parseInt(cigar.substring(j, i));
- j = i + 1;
- }
- }
- intv.end = intv.beg + l;
- }
- } else if ((mPreset & 0xffff) == 2) { // VCF
- String alt;
- alt = end >= 0 ? s.substring(beg, end) : s.substring(beg);
- if (col == 4) { // REF
- if (alt.length() > 0) intv.end = intv.beg + alt.length();
- } else if (col == 8) { // INFO
- int e_off = -1, i = alt.indexOf("END=");
- if (i == 0) e_off = 4;
- else if (i > 0) {
- i = alt.indexOf(";END=");
- if (i >= 0) e_off = i + 5;
- }
- if (e_off > 0) {
- i = alt.indexOf(";", e_off);
- intv.end = Integer.parseInt(i > e_off ? alt.substring(e_off, i) : alt.substring(e_off));
- }
- }
- }
- }
- if (end == -1) break;
- beg = end + 1;
- }
- return intv;
- }
-
- public class Iterator {
- private int i, n_seeks;
- private int tid, beg, end;
- private TPair64[] off;
- private long curr_off;
- private boolean iseof;
-
- public Iterator(final int _tid, final int _beg, final int _end, final TPair64[] _off) {
- i = -1;
- n_seeks = 0;
- curr_off = 0;
- iseof = false;
- off = _off;
- tid = _tid;
- beg = _beg;
- end = _end;
- }
-
- public String next() throws IOException {
- if (iseof) return null;
- for (; ;) {
- if (curr_off == 0 || !less64(curr_off, off[i].v)) { // then jump to the next chunk
- if (i == off.length - 1) break; // no more chunks
- if (i >= 0) assert (curr_off == off[i].v); // otherwise bug
- if (i < 0 || off[i].v != off[i + 1].u) { // not adjacent chunks; then seek
- mFp.seek(off[i + 1].u);
- curr_off = mFp.getFilePointer();
- ++n_seeks;
- }
- ++i;
- }
- String s;
- if ((s = readLine(mFp)) != null) {
- TIntv intv;
- char[] str = s.toCharArray();
- curr_off = mFp.getFilePointer();
- if (str.length == 0 || str[0] == mMeta) continue;
- intv = getIntv(s);
- if (intv.tid != tid || intv.beg >= end) break; // no need to proceed
- else if (intv.end > beg && intv.beg < end) return s; // overlap; return
- } else break; // end of file
- }
- iseof = true;
- return null;
- }
- }
-
- /**
- * Return
- * @param tid Sequence id
- * @param beg beginning of interval, genomic coords
- * @param end end of interval, genomic coords
- * @return an iterator over the lines within the specified interval
- */
- public Iterator query(final int tid, final int beg, final int end) {
- TPair64[] off, chunks;
- long min_off;
- TIndex idx = mIndex[tid];
- int[] bins = new int[MAX_BIN];
- int i, l, n_off, n_bins = reg2bins(beg, end, bins);
- if (idx.l.length > 0)
- min_off = (beg >> TAD_LIDX_SHIFT >= idx.l.length) ? idx.l[idx.l.length - 1] : idx.l[beg >> TAD_LIDX_SHIFT];
- else min_off = 0;
- for (i = n_off = 0; i < n_bins; ++i) {
- if ((chunks = idx.b.get(bins[i])) != null)
- n_off += chunks.length;
- }
- if (n_off == 0) return null;
- off = new TPair64[n_off];
- for (i = n_off = 0; i < n_bins; ++i)
- if ((chunks = idx.b.get(bins[i])) != null)
- for (int j = 0; j < chunks.length; ++j)
- if (less64(min_off, chunks[j].v))
- off[n_off++] = new TPair64(chunks[j]);
- Arrays.sort(off, 0, n_off);
- // resolve completely contained adjacent blocks
- for (i = 1, l = 0; i < n_off; ++i) {
- if (less64(off[l].v, off[i].v)) {
- ++l;
- off[l].u = off[i].u;
- off[l].v = off[i].v;
- }
- }
- n_off = l + 1;
- // resolve overlaps between adjacent blocks; this may happen due to the merge in indexing
- for (i = 1; i < n_off; ++i)
- if (!less64(off[i - 1].v, off[i].u)) off[i - 1].v = off[i].u;
- // merge adjacent blocks
- for (i = 1, l = 0; i < n_off; ++i) {
- if (off[l].v >> 16 == off[i].u >> 16) off[l].v = off[i].v;
- else {
- ++l;
- off[l].u = off[i].u;
- off[l].v = off[i].v;
- }
- }
- n_off = l + 1;
- // return
- TPair64[] ret = new TPair64[n_off];
- for (i = 0; i < n_off; ++i) {
- if (off[i] != null) ret[i] = new TPair64(off[i].u, off[i].v); // in C, this is inefficient
- }
- if (ret.length == 0 || (ret.length == 1 && ret[0] == null))
- return null;
- return new TabixReader.Iterator(tid, beg, end, ret);
- }
-
- /**
- *
- * @see #parseReg(String)
- * @param reg A region string of the form acceptable by {@link #parseReg(String)}
- * @return
- */
- public Iterator query(final String reg) {
- int[] x = parseReg(reg);
- return query(x[0], x[1], x[2]);
- }
-
- public static void main(String[] args) {
- if (args.length < 1) {
- System.out.println("Usage: java -cp .:sam.jar TabixReader <in.gz> [region]");
- System.exit(1);
- }
- try {
- TabixReader tr = new TabixReader(args[0]);
- String s;
- if (args.length == 1) { // no region is specified; print the whole file
- while ((s = tr.readLine()) != null)
- System.out.println(s);
- } else { // a region is specified; random access
- TabixReader.Iterator iter = tr.query(args[1]); // get the iterator
- while ((s = iter.next()) != null)
- System.out.println(s);
- }
- } catch (IOException e) {
- }
- }
-
- // ADDED BY JTR
- public void close() {
- if(mFp != null) {
- try {
- mFp.close();
- } catch (IOException e) {
-
- }
- }
- }
-}
diff --git a/src/java/org/broad/tribble/readme.txt b/src/java/org/broad/tribble/readme.txt
deleted file mode 100644
index 6ee86c3..0000000
--- a/src/java/org/broad/tribble/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Source root for tribble project -- indexed, queryable genomic file formats
\ No newline at end of file
diff --git a/src/java/org/broad/tribble/util/FTPHelper.java b/src/java/org/broad/tribble/util/FTPHelper.java
deleted file mode 100644
index b3bc946..0000000
--- a/src/java/org/broad/tribble/util/FTPHelper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.broad.tribble.util;
-
-import net.sf.samtools.util.ftp.FTPClient;
-import net.sf.samtools.util.ftp.FTPStream;
-import net.sf.samtools.util.ftp.FTPUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * @author jacob
- * @date 2013-Apr-11
- */
-public class FTPHelper implements URLHelper {
-
- private URL url;
-
- public FTPHelper(URL url){
- if(!url.getProtocol().toLowerCase().equals("ftp")){
- throw new IllegalArgumentException("FTPHelper can only be used with ftp protocol, not " + url.getProtocol());
- }
- this.url = url;
- }
-
- @Override
- public URL getUrl() {
- return this.url;
- }
-
- @Override
- public long getContentLength() throws IOException {
- return FTPUtils.getContentLength(this.url);
- }
-
- @Override
- public InputStream openInputStream() throws IOException {
- String file = url.getPath();
- FTPClient ftp = FTPUtils.connect(url.getHost(), url.getUserInfo(), null);
- ftp.pasv();
- ftp.retr(file);
- return new FTPStream(ftp);
- }
-
- @Override
- public InputStream openInputStreamForRange(long start, long end) throws IOException {
- throw new UnsupportedOperationException("Cannot perform range operations over FTP");
- }
-
- @Override
- public boolean exists() throws IOException {
- return FTPUtils.resourceAvailable(this.url);
- }
-}
diff --git a/src/java/org/broad/tribble/util/HTTPHelper.java b/src/java/org/broad/tribble/util/HTTPHelper.java
deleted file mode 100644
index 9e4d0d4..0000000
--- a/src/java/org/broad/tribble/util/HTTPHelper.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package org.broad.tribble.util;
-
-import java.io.FileNotFoundException;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.Proxy;
-import java.net.URL;
-import java.net.URLConnection;
-
-/**
- * Simple implementation of URLHelper based on the JDK URL and HttpURLConnection classes. This
- * version optionally takes a proxy, but does not support authentication.
- *
- * @author jrobinso
- * @date Jun 28, 2011
- */
-public class HTTPHelper implements URLHelper {
- /**
- * Global proxy setting -- shared by all instances
- */
- static Proxy proxy;
-
- private URL url;
-
- public HTTPHelper(URL url) {
- this.url = url;
- proxy = null;
-
- try {
- URLConnection conn = openConnection();
- conn.setDefaultUseCaches(false);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- public static synchronized void setProxy(Proxy p) {
- proxy = p;
- }
-
- public URL getUrl() {
- return url;
- }
-
- /**
- * @return content length of the resource
- * @throws IOException
- */
- public long getContentLength() throws IOException {
-
- HttpURLConnection con = null;
- try {
- con = openConnection();
- con.setRequestMethod("HEAD");
- if((con.getResponseCode() != HttpURLConnection.HTTP_OK)) {
- System.out.println("Error (" + con.getResponseMessage() + " ) fetching content length: " + url);
- return -1;
- }
- else {
- String contentLength = con.getHeaderField("Content-Length");
- return contentLength == null ? -1 : Long.parseLong(contentLength);
- }
- }
- finally {
- if (con != null) con.disconnect();
- }
- }
-
-
- public InputStream openInputStream() throws IOException {
-
- HttpURLConnection connection = openConnection();
- return new WrapperInputStream(connection, connection.getInputStream());
- }
-
-
- /**
- * Open an input stream for the requested byte range. Its the client's responsibility to close the stream.
- *
- * @param start start of range in bytes
- * @param end end of range ni bytes
- * @return
- * @throws IOException
- */
- public InputStream openInputStreamForRange(long start, long end) throws IOException {
-
- HttpURLConnection connection = openConnection();
- String byteRange = "bytes=" + start + "-" + end;
- connection.setRequestProperty("Range", byteRange);
- return new WrapperInputStream(connection, connection.getInputStream());
- }
-
- private HttpURLConnection openConnection() throws IOException {
- HttpURLConnection connection;
- if (proxy == null) {
- connection = (HttpURLConnection) url.openConnection();
- } else {
- connection = (HttpURLConnection) url.openConnection(proxy);
- }
- return connection;
- }
-
- public boolean exists() throws IOException{
- HttpURLConnection con = null;
- try {
- con = openConnection();
- con.setRequestMethod("HEAD");
- return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
- }
- catch (IOException e) {
- // This is what we are testing for, so its not really an exception
- return false;
- }
- finally {
- if (con != null) con.disconnect();
- }
- }
-
- class WrapperInputStream extends FilterInputStream {
-
- HttpURLConnection connection;
-
- protected WrapperInputStream(HttpURLConnection connection, InputStream inputStream) {
- super(inputStream);
- this.connection = connection;
- }
-
- @Override
- public void close() throws IOException {
- super.close();
- connection.disconnect();
- }
- }
-
-
-}
diff --git a/src/java/org/broad/tribble/util/LittleEndianInputStream.java b/src/java/org/broad/tribble/util/LittleEndianInputStream.java
deleted file mode 100644
index 5654a8b..0000000
--- a/src/java/org/broad/tribble/util/LittleEndianInputStream.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-* Adapted from example code in
-* Title: Hardcore Java
-* Title: Java I/O
-* Second Edition: May 2006
-* ISBN 10: 0-596-52750-0
-* ISBN 13: 9780596527501
-*
-* http://www.javafaq.nu/java-example-code-1078.html
-*
-*/
-package org.broad.tribble.util;
-
-import java.io.*;
-
-
-/**
- * Input stream with methods to convert byte arrays to numeric values using "little endian" order.
- * <p/>
- * Note: This class is not thread safe => instances should not be shared amongst threads
- */
-public class LittleEndianInputStream extends FilterInputStream {
-
- byte[] buffer;
-
- public LittleEndianInputStream(InputStream in) {
- super(in);
- buffer = new byte[8];
-
- }
-
- /**
- *
- * @return the next byte of this input stream, interpreted as an unsigned 8-bit number
- * @throws IOException
- */
- public byte readByte() throws IOException {
- int ch = in.read();
- if (ch < 0) {
- throw new EOFException();
- }
- return (byte) (ch);
- }
-
- public short readShort() throws IOException {
- int byte1 = in.read();
- int byte2 = in.read();
- if (byte2 < 0) {
- throw new EOFException();
- }
-
- return (short) (((byte2 << 24) >>> 16) + ((byte1 << 24) >>> 24));
- }
-
-
- public int readInt() throws IOException {
- int byte1 = in.read();
- int byte2 = in.read();
- int byte3 = in.read();
- int byte4 = in.read();
- if (byte4 < 0) {
- throw new EOFException();
- }
- return (byte4 << 24)
- + ((byte3 << 24) >>> 8)
- + ((byte2 << 24) >>> 16)
- + ((byte1 << 24) >>> 24);
-
- }
-
- /**
- *
- */
-
- public long readLong() throws IOException {
- readFully(buffer);
- long byte1 = (long) buffer[0];
- long byte2 = (long) buffer[1];
- long byte3 = (long) buffer[2];
- long byte4 = (long) buffer[3];
- long byte5 = (long) buffer[4];
- long byte6 = (long) buffer[5];
- long byte7 = (long) buffer[6];
- long byte8 = (long) buffer[7];
- return (byte8 << 56)
- + ((byte7 << 56) >>> 8)
- + ((byte6 << 56) >>> 16)
- + ((byte5 << 56) >>> 24)
- + ((byte4 << 56) >>> 32)
- + ((byte3 << 56) >>> 40)
- + ((byte2 << 56) >>> 48)
- + ((byte1 << 56) >>> 56);
- }
-
- public final double readDouble() throws IOException {
- return Double.longBitsToDouble(this.readLong());
- }
-
- public final float readFloat() throws IOException {
- return Float.intBitsToFloat(this.readInt());
- }
-
- /**
- * Read a null terminated byte array and return result as a string
- *
- * @return
- * @throws IOException
- */
-
- public String readString() throws IOException {
- ByteArrayOutputStream bis = new ByteArrayOutputStream(100);
- byte b;
- while ((b = (byte) in.read()) != 0) {
- if(b < 0) {
- throw new EOFException();
- }
- bis.write(b);
- }
- return new String(bis.toByteArray());
- }
-
-
- /**
- * Keep reading until the input buffer is filled.
- */
- private void readFully(byte b[]) throws IOException {
- int len = b.length;
- if (len < 0)
- throw new IndexOutOfBoundsException();
- int n = 0;
- while (n < len) {
- int count = read(b, n, len - n);
- if (count < 0)
- throw new EOFException();
- n += count;
- }
- }
-
-
-}
diff --git a/src/java/org/broad/tribble/util/LittleEndianOutputStream.java b/src/java/org/broad/tribble/util/LittleEndianOutputStream.java
deleted file mode 100644
index 2b71e75..0000000
--- a/src/java/org/broad/tribble/util/LittleEndianOutputStream.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-* Adapted from example code in
-* Title: Hardcore Java
-* Title: Java I/O
-* Second Edition: May 2006
-* ISBN 10: 0-596-52750-0
-* ISBN 13: 9780596527501
-*
-* http://www.javafaq.nu/java-example-code-1078.html
-*
-*/
-
-package org.broad.tribble.util;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-
-public final class LittleEndianOutputStream extends FilterOutputStream {
-
- protected long written;
-
- public LittleEndianOutputStream(OutputStream out) {
- super(out);
- }
-
- public void write(int b) throws IOException {
- out.write(b);
- written++;
- }
-
- public void write(byte[] data, int offset, int length)
- throws IOException {
- out.write(data, offset, length);
- written += length;
- }
-
- public void writeBoolean(boolean b) throws IOException {
- if (b) this.write(1);
- else this.write(0);
- }
-
- public void writeByte(int b) throws IOException {
- out.write(b);
- written++;
- }
-
- public void writeShort(int s) throws IOException {
- out.write(s & 0xFF);
- out.write((s >>> 8) & 0xFF);
- written += 2;
- }
-
- public void writeChar(int c) throws IOException {
- out.write(c & 0xFF);
- out.write((c >>> 8) & 0xFF);
- written += 2;
- }
-
- public void writeInt(int i) throws IOException {
-
- out.write(i & 0xFF);
- out.write((i >>> 8) & 0xFF);
- out.write((i >>> 16) & 0xFF);
- out.write((i >>> 24) & 0xFF);
- written += 4;
-
- }
-
- public void writeLong(long l) throws IOException {
-
- out.write((int) l & 0xFF);
- out.write((int) (l >>> 8) & 0xFF);
- out.write((int) (l >>> 16) & 0xFF);
- out.write((int) (l >>> 24) & 0xFF);
- out.write((int) (l >>> 32) & 0xFF);
- out.write((int) (l >>> 40) & 0xFF);
- out.write((int) (l >>> 48) & 0xFF);
- out.write((int) (l >>> 56) & 0xFF);
- written += 8;
-
- }
-
- public final void writeFloat(float f) throws IOException {
- this.writeInt(Float.floatToIntBits(f));
- }
-
- public final void writeDouble(double d) throws IOException {
- this.writeLong(Double.doubleToLongBits(d));
- }
-
- public void writeBytes(String s) throws IOException {
- int length = s.length();
- for (int i = 0; i < length; i++) {
- out.write((byte) s.charAt(i));
- }
- written += length;
- }
-
- /**
- * Srite a string as a null terminated byte array.
- *
- * @param s
- * @throws IOException
- */
- public void writeString(String s) throws IOException {
- writeBytes(s);
- write((byte) 0);
- }
-
- public long getWrittenCount() {
- return written;
- }
-
- // Method provide to enable "reseting" to a previous state.
- public void setWrittenCount(long count) {
- this.written = count;
- }
-}// end LittleEndianOutputStream
diff --git a/src/java/org/broad/tribble/util/MathUtils.java b/src/java/org/broad/tribble/util/MathUtils.java
deleted file mode 100644
index 1b8bf54..0000000
--- a/src/java/org/broad/tribble/util/MathUtils.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.util;
-
-/**
- * a collection of functions and classes for various common calculations
- */
-public class MathUtils {
-
- /**
- * a class for calculating moving statistics - this class returns the
- * mean, variance, and std dev after accumulating any number of records.
- * taken from http://www.johndcook.com/standard_deviation.html
- */
- public static class RunningStat {
- private double oldMean, newMean, oldStdDev, newStdDev;
- private long recordCount = 0;
-
- /**
- * @param x the value to add to the running mean and variance
- */
- public void push(double x) {
- recordCount++;
- // See Knuth TAOCP vol 2, 3rd edition, page 232
- if (recordCount == 1) {
- oldMean = newMean = x;
- oldStdDev = 0.0;
- } else {
- newMean = oldMean + (x - oldMean) / recordCount;
- newStdDev = oldStdDev + (x - oldMean) * (x - newMean);
-
- // set up for next iteration
- oldMean = newMean;
- oldStdDev = newStdDev;
- }
- }
-
- public void clear() { recordCount = 0; }
- public final long numDataValues() { return recordCount; }
- public final double mean() { return (recordCount > 0) ? newMean : 0.0; }
- public double variance() { return ((recordCount > 1) ? newStdDev / (recordCount - 1) : 0.0); }
- public double standardDeviation() { return Math.sqrt(variance()); }
- }
-
-}
diff --git a/src/java/org/broad/tribble/util/ParsingUtils.java b/src/java/org/broad/tribble/util/ParsingUtils.java
deleted file mode 100644
index 25bc9ce..0000000
--- a/src/java/org/broad/tribble/util/ParsingUtils.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.util;
-
-import net.sf.samtools.util.HttpUtils;
-
-import java.awt.*;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-import java.util.List;
-
-/**
- * @author jrobinso
- */
-public class ParsingUtils {
-
- public static Map<Object, Color> colorCache = new WeakHashMap<Object, Color>(100);
-
- // HTML 4.1 color table, + orange and magenta
- static Map<String, String> colorSymbols = new HashMap();
-
- private static final Class defaultUrlHelperClass = RemoteURLHelper.class;
- public static Class urlHelperClass = defaultUrlHelperClass;
-
- static {
- colorSymbols.put("white", "FFFFFF");
- colorSymbols.put("silver", "C0C0C0");
- colorSymbols.put("gray", "808080");
- colorSymbols.put("black", "000000");
- colorSymbols.put("red", "FF0000");
- colorSymbols.put("maroon", "800000");
- colorSymbols.put("yellow", "FFFF00");
- colorSymbols.put("olive", "808000");
- colorSymbols.put("lime", "00FF00");
- colorSymbols.put("green", "008000");
- colorSymbols.put("aqua", "00FFFF");
- colorSymbols.put("teal", "008080");
- colorSymbols.put("blue", "0000FF");
- colorSymbols.put("navy", "000080");
- colorSymbols.put("fuchsia", "FF00FF");
- colorSymbols.put("purple", "800080");
- colorSymbols.put("orange", "FFA500");
- colorSymbols.put("magenta", "FF00FF");
- }
-
-
- public static InputStream openInputStream(String path)
- throws IOException {
-
- InputStream inputStream;
-
- if (path.startsWith("http:") || path.startsWith("https:") || path.startsWith("ftp:")) {
- inputStream = getURLHelper(new URL(path)).openInputStream();
- } else {
- File file = new File(path);
- inputStream = new FileInputStream(file);
- }
-
- return inputStream;
- }
-
- //public static String join(String separator, Collection<String> strings) {
- // return join( separator, strings.toArray(new String[0]) );
- //}
-
- public static <T> String join(String separator, Collection<T> objects) {
- if (objects.isEmpty()) {
- return "";
- }
- Iterator<T> iter = objects.iterator();
- final StringBuilder ret = new StringBuilder(iter.next().toString());
- while (iter.hasNext()) {
- ret.append(separator);
- ret.append(iter.next().toString());
- }
-
- return ret.toString();
- }
-
- /**
- * a small utility function for sorting a list
- *
- * @param list
- * @param <T>
- * @return
- */
- public static <T extends Comparable> List<T> sortList(Collection<T> list) {
- ArrayList<T> ret = new ArrayList<T>();
- ret.addAll(list);
- Collections.sort(ret);
- return ret;
- }
-
- public static <T extends Comparable<T>, V> String sortedString(Map<T, V> c) {
- List<T> t = new ArrayList<T>(c.keySet());
- Collections.sort(t);
-
- List<String> pairs = new ArrayList<String>();
- for (T k : t) {
- pairs.add(k + "=" + c.get(k));
- }
-
- return "{" + ParsingUtils.join(", ", pairs.toArray(new String[pairs.size()])) + "}";
- }
-
- /**
- * join an array of strings given a seperator
- *
- * @param separator the string to insert between each array element
- * @param strings the array of strings
- * @return a string, which is the joining of all array values with the separator
- */
- public static String join(String separator, String[] strings) {
- return join(separator, strings, 0, strings.length);
- }
-
- /**
- * join a set of strings, using the separator provided, from index start to index stop
- *
- * @param separator the separator to use
- * @param strings the list of strings
- * @param start the start position (index in the list)0
- * @param end the end position (index in the list)
- * @return a joined string, or "" if end - start == 0
- */
- public static String join(String separator, String[] strings, int start, int end) {
- if ((end - start) == 0) {
- return "";
- }
- StringBuilder ret = new StringBuilder(strings[start]);
- for (int i = start + 1; i < end; ++i) {
- ret.append(separator);
- ret.append(strings[i]);
- }
- return ret.toString();
- }
-
-
- /**
- * Split the string into tokesn separated by the given delimiter. Profiling has
- * revealed that the standard string.split() method typically takes > 1/2
- * the total time when used for parsing ascii files.
- *
- * @param aString the string to split
- * @param tokens an array to hold the parsed tokens
- * @param delim character that delimits tokens
- * @return the number of tokens parsed
- */
- public static int split(String aString, String[] tokens, char delim) {
- return split(aString, tokens, delim, false);
- }
-
- /**
- * Split the string into tokens separated by the given delimiter. Profiling has
- * revealed that the standard string.split() method typically takes > 1/2
- * the total time when used for parsing ascii files.
- *
- * @param aString the string to split
- * @param tokens an array to hold the parsed tokens
- * @param delim character that delimits tokens
- * @param condenseTrailingTokens if true and there are more tokens than will fit in the tokens array,
- * condense all trailing tokens into the last token
- * @return the number of tokens parsed
- */
- public static int split(String aString, String[] tokens, char delim, boolean condenseTrailingTokens) {
-
- int maxTokens = tokens.length;
- int nTokens = 0;
- int start = 0;
- int end = aString.indexOf(delim);
-
- if (end == 0) {
- if (aString.length() > 1) {
- start = 1;
- end = aString.indexOf(delim, start);
- } else {
- return 0;
- }
- }
-
- if (end < 0) {
- tokens[nTokens++] = aString;
- return nTokens;
- }
-
- while ((end > 0) && (nTokens < maxTokens)) {
- tokens[nTokens++] = aString.substring(start, end);
- start = end + 1;
- end = aString.indexOf(delim, start);
- }
-
- // condense if appropriate
- if (condenseTrailingTokens && nTokens == maxTokens) {
- tokens[nTokens - 1] = tokens[nTokens - 1] + delim + aString.substring(start);
- }
- // Add the trailing string
- else if (nTokens < maxTokens) {
- String trailingString = aString.substring(start);
- tokens[nTokens++] = trailingString;
- }
-
- return nTokens;
- }
-
-
- // trim a string for the given character (i.e. not just whitespace)
-
- public static String trim(String str, char ch) {
- char[] array = str.toCharArray();
- int start = 0;
- while (start < array.length && array[start] == ch)
- start++;
-
- int end = array.length - 1;
- while (end > start && array[end] == ch)
- end--;
-
- return str.substring(start, end + 1);
- }
-
-
- /**
- * Split the string into tokens separated by tab or space(s). This method
- * was added so support wig and bed files, which apparently accept space delimiters.
- * <p/>
- * Note: TODO REGEX expressions are not used for speed. This should be re-evaluated with JDK 1.5 or later
- *
- * @param aString the string to split
- * @param tokens an array to hold the parsed tokens
- * @return the number of tokens parsed
- */
- public static int splitWhitespace(String aString, String[] tokens) {
-
- int maxTokens = tokens.length;
- int nTokens = 0;
- int start = 0;
- int tabEnd = aString.indexOf('\t');
- int spaceEnd = aString.indexOf(' ');
- int end = tabEnd < 0 ? spaceEnd : spaceEnd < 0 ? tabEnd : Math.min(spaceEnd, tabEnd);
- while ((end > 0) && (nTokens < maxTokens)) {
- //tokens[nTokens++] = new String(aString.toCharArray(), start, end-start); // aString.substring(start, end);
- tokens[nTokens++] = aString.substring(start, end);
-
- start = end + 1;
- // Gobble up any whitespace before next token -- don't gobble tabs, consecutive tabs => empty cell
- while (start < aString.length() && aString.charAt(start) == ' ') {
- start++;
- }
-
- tabEnd = aString.indexOf('\t', start);
- spaceEnd = aString.indexOf(' ', start);
- end = tabEnd < 0 ? spaceEnd : spaceEnd < 0 ? tabEnd : Math.min(spaceEnd, tabEnd);
-
- }
-
- // Add the trailing string
- if (nTokens < maxTokens) {
- String trailingString = aString.substring(start);
- tokens[nTokens++] = trailingString;
- }
- return nTokens;
- }
-
- public static <T extends Comparable<? super T>> boolean isSorted(Iterable<T> iterable) {
- Iterator<T> iter = iterable.iterator();
- if (!iter.hasNext())
- return true;
-
- T t = iter.next();
- while (iter.hasNext()) {
- T t2 = iter.next();
- if (t.compareTo(t2) > 0)
- return false;
-
- t = t2;
- }
-
- return true;
- }
-
- /**
- * Convert an rgb string, hex, or symbol to a color.
- *
- * @param string
- * @return
- */
- public static Color parseColor(String string) {
- try {
- Color c = colorCache.get(string);
- if (c == null) {
- if (string.contains(",")) {
- String[] rgb = string.split(",");
- int red = Integer.parseInt(rgb[0]);
- int green = Integer.parseInt(rgb[1]);
- int blue = Integer.parseInt(rgb[2]);
- c = new Color(red, green, blue);
- } else if (string.startsWith("#")) {
- c = hexToColor(string.substring(1));
- } else {
- String hexString = colorSymbols.get(string.toLowerCase());
- if (hexString != null) {
- c = hexToColor(hexString);
- }
- }
-
- if (c == null) {
- c = Color.black;
- }
- colorCache.put(string, c);
- }
- return c;
-
- } catch (NumberFormatException numberFormatException) {
- //TODO Throw this exception?
- return Color.black;
- }
- }
-
-
- private static Color hexToColor(String string) {
- if (string.length() == 6) {
- int red = Integer.parseInt(string.substring(0, 2), 16);
- int green = Integer.parseInt(string.substring(2, 4), 16);
- int blue = Integer.parseInt(string.substring(4, 6), 16);
- return new Color(red, green, blue);
- } else {
- return null;
- }
-
- }
-
- public static boolean resourceExists(String resource) throws IOException{
-
- boolean remoteFile = resource.startsWith("http://") || resource.startsWith("https://") || resource.startsWith("ftp://");
- if (remoteFile) {
- URL url = null;
- try {
- url = new URL(resource);
- } catch (MalformedURLException e) {
- // Malformed URLs by definition don't exist
- return false;
- }
- URLHelper helper = getURLHelper(url);
- return helper.exists();
- } else {
- return (new File(resource)).exists();
- }
- }
-
- /**
- * Return the registered URLHelper, constructed with the provided URL
- * @see #registerHelperClass(Class)
- * @param url
- * @return
- */
- public static URLHelper getURLHelper(URL url) {
- try {
- return getURLHelper(urlHelperClass, url);
- } catch (Exception e) {
- return getURLHelper(defaultUrlHelperClass, url);
- }
- }
-
- private static URLHelper getURLHelper(Class helperClass, URL url) {
- try {
- Constructor constr = helperClass.getConstructor(URL.class);
- return (URLHelper) constr.newInstance(url);
- } catch (Exception e) {
- String errMsg = "Error instantiating url helper for class: " + helperClass;
- throw new IllegalStateException(errMsg, e);
- }
- }
-
- /**
- * Register a {@code URLHelper} class to be used for URL operations. The helper
- * may be used for both FTP and HTTP operations, so if any FTP URLs are used
- * the {@code URLHelper} must support it.
- *
- * The default helper class is {@link RemoteURLHelper}, which delegates to FTP/HTTP
- * helpers as appropriate.
- *
- * @see URLHelper
- * @param helperClass Class which implements {@link URLHelper}, and have a constructor
- * which takes a URL as it's only argument.
- */
- public static void registerHelperClass(Class helperClass) {
- if (!URLHelper.class.isAssignableFrom(helperClass)) {
- throw new IllegalArgumentException("helperClass must implement URLHelper");
- //TODO check that it has 1 arg constructor of proper type
- }
- urlHelperClass = helperClass;
- }
-
- /**
- * Add the {@code indexExtension} to the {@code filepath}, preserving
- * query string elements if present. Intended for use where {@code filepath}
- * is a URL. Will behave correctly on regular file paths (just add the extension
- * to the end)
- * @param filepath
- * @param indexExtension
- * @return
- */
- public static String appendToPath(String filepath, String indexExtension) {
- String tabxIndex = null;
- URL url = null;
- try{
- url = new URL(filepath);
- }catch (MalformedURLException e){
- //pass
- }
- if (url != null) {
- String path = url.getPath();
- String indexPath = path + indexExtension;
- tabxIndex = filepath.replace(path, indexPath);
- } else {
- tabxIndex = filepath + indexExtension;
- }
- return tabxIndex;
- }
-}
diff --git a/src/java/org/broad/tribble/util/RemoteURLHelper.java b/src/java/org/broad/tribble/util/RemoteURLHelper.java
deleted file mode 100644
index 7f24ce6..0000000
--- a/src/java/org/broad/tribble/util/RemoteURLHelper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.broad.tribble.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * Implementation of URLHelper designed for remote resources.
- * Determines appropriate helper based on protocol (ftp/http),
- * and then delegates.
- *
- * @author jacob
- * @date 2013-Apr-11
- */
-public class RemoteURLHelper implements URLHelper {
-
- private URLHelper wrappedHelper;
-
- public RemoteURLHelper(URL url){
- String protocol = url.getProtocol().toLowerCase();
- if(protocol.startsWith("http")){
- this.wrappedHelper = new HTTPHelper(url);
- }else if(protocol.startsWith("ftp")){
- this.wrappedHelper = new FTPHelper(url);
- }else{
- throw new IllegalArgumentException("Unable to create helper for url with protocol " + protocol);
- }
- }
-
- @Override
- public URL getUrl() {
- return this.wrappedHelper.getUrl();
- }
-
- @Override
- public long getContentLength() throws IOException {
- return this.wrappedHelper.getContentLength();
- }
-
- @Override
- public InputStream openInputStream() throws IOException {
- return this.wrappedHelper.openInputStream();
- }
-
- @Override
- public InputStream openInputStreamForRange(long start, long end) throws IOException {
- return this.wrappedHelper.openInputStreamForRange(start, end);
- }
-
- @Override
- public boolean exists() throws IOException {
- return this.wrappedHelper.exists();
- }
-}
diff --git a/src/java/org/broad/tribble/util/TabixUtils.java b/src/java/org/broad/tribble/util/TabixUtils.java
deleted file mode 100644
index 07cae06..0000000
--- a/src/java/org/broad/tribble/util/TabixUtils.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.util;
-
-
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.util.BlockCompressedInputStream;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.readers.TabixReader;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * classes that have anything to do with tabix
- */
-public class TabixUtils {
-
- public static final String STANDARD_INDEX_EXTENSION = ".tbi";
-
- public static class TPair64 implements Comparable<TPair64> {
- public long u, v;
-
- public TPair64(final long _u, final long _v) {
- u = _u;
- v = _v;
- }
-
- public TPair64(final TPair64 p) {
- u = p.u;
- v = p.v;
- }
-
- public int compareTo(final TPair64 p) {
- return u == p.u ? 0 : ((u < p.u) ^ (u < 0) ^ (p.u < 0)) ? -1 : 1; // unsigned 64-bit comparison
- }
- }
-
- public static class TIndex {
- public HashMap<Integer, TPair64[]> b; // binning index
- public long[] l; // linear index
- }
-
-
- public static class TIntv {
- public int tid, beg, end;
- }
-
-
- public static boolean less64(final long u, final long v) { // unsigned 64-bit comparison
- return (u < v) ^ (u < 0) ^ (v < 0);
- }
-
- /**
- * Generates the SAMSequenceDictionary from the given tabix index file
- *
- * @param tabixIndex the tabix index file
- * @return non-null sequence dictionary
- */
- public static SAMSequenceDictionary getSequenceDictionary(final File tabixIndex) {
- if (tabixIndex == null) throw new IllegalArgumentException();
-
- try {
- final BlockCompressedInputStream is = new BlockCompressedInputStream(tabixIndex);
-
- // read preliminary bytes
- byte[] buf = new byte[32];
- is.read(buf, 0, 32);
-
- // read sequence dictionary
- int i, j, len = TabixReader.readInt(is);
- buf = new byte[len];
- is.read(buf);
-
- final List<SAMSequenceRecord> sequences = new ArrayList<SAMSequenceRecord>();
- for (i = j = 0; i < buf.length; ++i) {
- if (buf[i] == 0) {
- byte[] b = new byte[i - j];
- System.arraycopy(buf, j, b, 0, b.length);
- sequences.add(new SAMSequenceRecord(new String(b)));
- j = i + 1;
- }
- }
- is.close();
-
- return new SAMSequenceDictionary(sequences);
- } catch (Exception e) {
- throw new TribbleException("Unable to read tabix index: " + e.getMessage());
- }
- }
-}
diff --git a/src/java/org/broad/tribble/util/URLHelper.java b/src/java/org/broad/tribble/util/URLHelper.java
deleted file mode 100644
index dfaa4b1..0000000
--- a/src/java/org/broad/tribble/util/URLHelper.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
- * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
- * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
- * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
- * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
- * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
- * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
- * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
- * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
- * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
- */
-
-package org.broad.tribble.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * Interface defining a helper class for dealing with URL resources. Purpose of this class is to provide the
- * flexibility to use either URLConnection or Apache HTTPClient. Also want to delegate to either HTTP or FTP
- *
- * @see HTTPHelper
- * @see FTPHelper
- * @author jrobinso
- * @date Jun 28, 2011
- */
-public interface URLHelper {
-
- URL getUrl();
-
- long getContentLength() throws IOException;
-
- InputStream openInputStream() throws IOException;
-
- /**
- * May throw an OperationUnsupportedException
- * @deprecated Will be removed in a future release, as is somewhat fragile
- * and not used.
- * @param start
- * @param end
- * @return
- * @throws IOException
- */
- @Deprecated
- InputStream openInputStreamForRange(long start, long end) throws IOException;
-
- public boolean exists() throws IOException;
-
-}
diff --git a/src/java/org/broad/tribble/util/popgen/HardyWeinbergCalculation.java b/src/java/org/broad/tribble/util/popgen/HardyWeinbergCalculation.java
deleted file mode 100755
index a756d94..0000000
--- a/src/java/org/broad/tribble/util/popgen/HardyWeinbergCalculation.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-package org.broad.tribble.util.popgen;
-
-/**
-* The Broad Institute
-* SOFTWARE COPYRIGHT NOTICE AGREEMENT
-* This software and its documentation are copyright 2004 by the
-* Broad Institute/Massachusetts Institute of Technology. All rights are reserved.
-*
-* This software is supplied without any warranty or guaranteed support whatsoever. Neither
-* the Broad Institute nor MIT can be responsible for its use, misuse, or functionality.
-*/
-
-/**
-* This class calculates a HardyWeinberg p-value given three values representing
-* the observed frequences of homozygous and heterozygous genotypes in the
-* test population.
-*
-* @author Bob Handsaker
-*/
-public final class HardyWeinbergCalculation {
- /**
- * This class is not instantiable.
- */
- private HardyWeinbergCalculation() {
- }
-
- /**
- * Calculates exact two-sided hardy-weinberg p-value. Parameters
- * are number of genotypes, number of rare alleles observed and
- * number of heterozygotes observed.
- *
- * (c) 2003 Jan Wigginton, Goncalo Abecasis (goncalo at umich.edu)
- */
- public static double hwCalculate(int obsAA, int obsAB, int obsBB) {
- int diplotypes = obsAA + obsAB + obsBB;
- int rare = (obsAA * 2) + obsAB;
- int hets = obsAB;
-
- //make sure "rare" allele is really the rare allele
- if (rare > diplotypes) {
- rare = (2 * diplotypes) - rare;
- }
-
- //make sure numbers aren't screwy
- if (hets > rare) {
- return -1;
- }
-
- double[] tailProbs = new double[rare + 1];
-
- for (int z = 0; z < tailProbs.length; z++) {
- tailProbs[z] = 0;
- }
-
- //start at midpoint
- int mid = (rare * ((2 * diplotypes) - rare)) / (2 * diplotypes);
-
- //check to ensure that midpoint and rare alleles have same parity
- if (((rare & 1) ^ (mid & 1)) != 0) {
- mid++;
- }
-
- int het = mid;
- int hom_r = (rare - mid) / 2;
- int hom_c = diplotypes - het - hom_r;
-
- //Calculate probability for each possible observed heterozygote
- //count up to a scaling constant, to avoid underflow and overflow
- tailProbs[mid] = 1.0;
-
- double sum = tailProbs[mid];
-
- for (het = mid; het > 1; het -= 2) {
- tailProbs[het - 2] = (tailProbs[het] * het * (het - 1.0)) / (4.0 * (hom_r + 1.0) * (hom_c +
- 1.0));
- sum += tailProbs[het - 2];
-
- //2 fewer hets for next iteration -> add one rare and one common homozygote
- hom_r++;
- hom_c++;
- }
-
- het = mid;
- hom_r = (rare - mid) / 2;
- hom_c = diplotypes - het - hom_r;
-
- for (het = mid; het <= (rare - 2); het += 2) {
- tailProbs[het + 2] = (tailProbs[het] * 4.0 * hom_r * hom_c) / ((het + 2.0) * (het +
- 1.0));
- sum += tailProbs[het + 2];
-
- //2 more hets for next iteration -> subtract one rare and one common homozygote
- hom_r--;
- hom_c--;
- }
-
- for (int z = 0; z < tailProbs.length; z++) {
- tailProbs[z] /= sum;
- }
-
- double top = tailProbs[hets];
-
- for (int i = hets + 1; i <= rare; i++) {
- top += tailProbs[i];
- }
-
- double otherSide = tailProbs[hets];
-
- for (int i = hets - 1; i >= 0; i--) {
- otherSide += tailProbs[i];
- }
-
- if ((top > 0.5) && (otherSide > 0.5)) {
- return 1.0;
- }
-
- if (top < otherSide) {
- return top * 2;
- }
-
- return otherSide * 2;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/bcf2/BCF2Codec.java b/src/java/org/broadinstitute/variant/bcf2/BCF2Codec.java
deleted file mode 100644
index 63ca54c..0000000
--- a/src/java/org/broadinstitute/variant/bcf2/BCF2Codec.java
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broad.tribble.BinaryFeatureCodec;
-import org.broad.tribble.Feature;
-import org.broad.tribble.FeatureCodecHeader;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.readers.LineIterator;
-import org.broad.tribble.readers.LineIteratorImpl;
-import org.broad.tribble.readers.LineReaderUtil;
-import org.broad.tribble.readers.PositionalBufferedStream;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.variantcontext.*;
-import org.broadinstitute.variant.vcf.*;
-
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Decode BCF2 files
- */
-public final class BCF2Codec extends BinaryFeatureCodec<VariantContext> {
- private final static int ALLOWED_MAJOR_VERSION = 2;
- private final static int MIN_MINOR_VERSION = 1;
-
- private BCFVersion bcfVersion = null;
-
- private VCFHeader header = null;
-
- /**
- * Maps offsets (encoded in BCF) into contig names (from header) for the CHROM field
- */
- private final ArrayList<String> contigNames = new ArrayList<String>();
-
- /**
- * Maps header string names (encoded in VCF) into strings found in the BCF header
- *
- * Initialized when processing the header
- */
- private ArrayList<String> dictionary;
-
- /**
- * Our decoder that reads low-level objects from the BCF2 records
- */
- private final BCF2Decoder decoder = new BCF2Decoder();
-
- /**
- * Provides some sanity checking on the header
- */
- private final static int MAX_HEADER_SIZE = 0x08000000;
-
- /**
- * Genotype field decoders that are initialized when the header is read
- */
- private BCF2GenotypeFieldDecoders gtFieldDecoders = null;
-
- /**
- * A cached array of GenotypeBuilders for efficient genotype decoding.
- *
- * Caching it allows us to avoid recreating this intermediate data
- * structure each time we decode genotypes
- */
- private GenotypeBuilder[] builders = null;
-
- // for error handling
- private int recordNo = 0;
- private int pos = 0;
-
-
- // ----------------------------------------------------------------------
- //
- // Feature codec interface functions
- //
- // ----------------------------------------------------------------------
-
- @Override
- public Feature decodeLoc( final PositionalBufferedStream inputStream ) {
- return decode(inputStream);
- }
-
- @Override
- public VariantContext decode( final PositionalBufferedStream inputStream ) {
- try {
- recordNo++;
- final VariantContextBuilder builder = new VariantContextBuilder();
-
- final int sitesBlockSize = decoder.readBlockSize(inputStream);
- final int genotypeBlockSize = decoder.readBlockSize(inputStream);
-
- decoder.readNextBlock(sitesBlockSize, inputStream);
- decodeSiteLoc(builder);
- final SitesInfoForDecoding info = decodeSitesExtendedInfo(builder);
-
- decoder.readNextBlock(genotypeBlockSize, inputStream);
- createLazyGenotypesDecoder(info, builder);
- return builder.fullyDecoded(true).make();
- } catch ( IOException e ) {
- throw new TribbleException("Failed to read BCF file", e);
- }
- }
-
- @Override
- public Class<VariantContext> getFeatureType() {
- return VariantContext.class;
- }
-
- @Override
- public FeatureCodecHeader readHeader( final PositionalBufferedStream inputStream ) {
- try {
- // note that this reads the magic as well, and so does double duty
- bcfVersion = BCFVersion.readBCFVersion(inputStream);
- if ( bcfVersion == null )
- error("Input stream does not contain a BCF encoded file; BCF magic header info not found");
-
- if ( bcfVersion.getMajorVersion() != ALLOWED_MAJOR_VERSION )
- error("BCF2Codec can only process BCF2 files, this file has major version " + bcfVersion.getMajorVersion());
- if ( bcfVersion.getMinorVersion() < MIN_MINOR_VERSION )
- error("BCF2Codec can only process BCF2 files with minor version >= " + MIN_MINOR_VERSION + " but this file has minor version " + bcfVersion.getMinorVersion());
-
- if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
- System.err.println("Parsing data stream with BCF version " + bcfVersion);
- }
-
- final int headerSizeInBytes = BCF2Type.INT32.read(inputStream);
-
- if ( headerSizeInBytes <= 0 || headerSizeInBytes > MAX_HEADER_SIZE) // no bigger than 8 MB
- error("BCF2 header has invalid length: " + headerSizeInBytes + " must be >= 0 and < "+ MAX_HEADER_SIZE);
-
- final byte[] headerBytes = new byte[headerSizeInBytes];
- if ( inputStream.read(headerBytes) != headerSizeInBytes )
- error("Couldn't read all of the bytes specified in the header length = " + headerSizeInBytes);
-
- final PositionalBufferedStream bps = new PositionalBufferedStream(new ByteArrayInputStream(headerBytes));
- final LineIterator lineIterator = new LineIteratorImpl(LineReaderUtil.fromBufferedStream(bps, LineReaderUtil.LineReaderOption.SYNCHRONOUS));
- final VCFCodec headerParser = new VCFCodec();
- this.header = (VCFHeader) headerParser.readActualHeader(lineIterator);
- bps.close();
- } catch ( IOException e ) {
- throw new TribbleException("I/O error while reading BCF2 header");
- }
-
- // create the config offsets
- if ( ! header.getContigLines().isEmpty() ) {
- contigNames.clear();
- for ( final VCFContigHeaderLine contig : header.getContigLines()) {
- if ( contig.getID() == null || contig.getID().equals("") )
- error("found a contig with an invalid ID " + contig);
- contigNames.add(contig.getID());
- }
- } else {
- error("Didn't find any contig lines in BCF2 file header");
- }
-
- // create the string dictionary
- dictionary = parseDictionary(header);
-
- // prepare the genotype field decoders
- gtFieldDecoders = new BCF2GenotypeFieldDecoders(header);
-
- // create and initialize the genotype builder array
- final int nSamples = header.getNGenotypeSamples();
- builders = new GenotypeBuilder[nSamples];
- for ( int i = 0; i < nSamples; i++ ) {
- builders[i] = new GenotypeBuilder(header.getGenotypeSamples().get(i));
- }
-
- // position right before next line (would be right before first real record byte at end of header)
- return new FeatureCodecHeader(header, inputStream.getPosition());
- }
-
- @Override
- public boolean canDecode( final String path ) {
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(path);
- final BCFVersion version = BCFVersion.readBCFVersion(fis);
- return version != null && version.getMajorVersion() == ALLOWED_MAJOR_VERSION;
- } catch ( FileNotFoundException e ) {
- return false;
- } catch ( IOException e ) {
- return false;
- } finally {
- try {
- if ( fis != null ) fis.close();
- } catch ( IOException e ) {
- // do nothing
- }
- }
- }
-
- // --------------------------------------------------------------------------------
- //
- // implicit block
- //
- // The first four records of BCF are inline untype encoded data of:
- //
- // 4 byte integer chrom offset
- // 4 byte integer start
- // 4 byte integer ref length
- // 4 byte float qual
- //
- // --------------------------------------------------------------------------------
-
- /**
- * Decode the sites level data from this classes decoder
- *
- * @param builder
- * @return
- */
- @Requires({"builder != null"})
- private final void decodeSiteLoc(final VariantContextBuilder builder) throws IOException {
- final int contigOffset = decoder.decodeInt(BCF2Type.INT32);
- final String contig = lookupContigName(contigOffset);
- builder.chr(contig);
-
- this.pos = decoder.decodeInt(BCF2Type.INT32) + 1; // GATK is one based, BCF2 is zero-based
- final int refLength = decoder.decodeInt(BCF2Type.INT32);
- builder.start((long)pos);
- builder.stop((long)(pos + refLength - 1)); // minus one because GATK has closed intervals but BCF2 is open
- }
-
- /**
- * Decode the sites level data from this classes decoder
- *
- * @param builder
- * @return
- */
- @Requires({"builder != null", "decoder != null"})
- @Ensures({"result != null", "result.isValid()"})
- private final SitesInfoForDecoding decodeSitesExtendedInfo(final VariantContextBuilder builder) throws IOException {
- final Object qual = decoder.decodeSingleValue(BCF2Type.FLOAT);
- if ( qual != null ) {
- builder.log10PError(((Double)qual) / -10.0);
- }
-
- final int nAlleleInfo = decoder.decodeInt(BCF2Type.INT32);
- final int nFormatSamples = decoder.decodeInt(BCF2Type.INT32);
- final int nAlleles = nAlleleInfo >> 16;
- final int nInfo = nAlleleInfo & 0x0000FFFF;
- final int nFormatFields = nFormatSamples >> 24;
- final int nSamples = nFormatSamples & 0x00FFFFF;
-
- if ( header.getNGenotypeSamples() != nSamples )
- error("Reading BCF2 files with different numbers of samples per record " +
- "is not currently supported. Saw " + header.getNGenotypeSamples() +
- " samples in header but have a record with " + nSamples + " samples");
-
- decodeID(builder);
- final List<Allele> alleles = decodeAlleles(builder, pos, nAlleles);
- decodeFilter(builder);
- decodeInfo(builder, nInfo);
-
- final SitesInfoForDecoding info = new SitesInfoForDecoding(nFormatFields, nSamples, alleles);
- if ( ! info.isValid() )
- error("Sites info is malformed: " + info);
- return info;
- }
-
- protected final static class SitesInfoForDecoding {
- final int nFormatFields;
- final int nSamples;
- final List<Allele> alleles;
-
- private SitesInfoForDecoding(final int nFormatFields, final int nSamples, final List<Allele> alleles) {
- this.nFormatFields = nFormatFields;
- this.nSamples = nSamples;
- this.alleles = alleles;
- }
-
- public boolean isValid() {
- return nFormatFields >= 0 &&
- nSamples >= 0 &&
- alleles != null && ! alleles.isEmpty() && alleles.get(0).isReference();
- }
-
- @Override
- public String toString() {
- return String.format("nFormatFields = %d, nSamples = %d, alleles = %s", nFormatFields, nSamples, alleles);
- }
- }
-
- /**
- * Decode the id field in this BCF2 file and store it in the builder
- * @param builder
- */
- private void decodeID( final VariantContextBuilder builder ) throws IOException {
- final String id = (String)decoder.decodeTypedValue();
-
- if ( id == null )
- builder.noID();
- else
- builder.id(id);
- }
-
- /**
- * Decode the alleles from this BCF2 file and put the results in builder
- * @param builder
- * @param pos
- * @param nAlleles
- * @return the alleles
- */
- @Requires("nAlleles > 0")
- private List<Allele> decodeAlleles( final VariantContextBuilder builder, final int pos, final int nAlleles ) throws IOException {
- // TODO -- probably need inline decoder for efficiency here (no sense in going bytes -> string -> vector -> bytes
- List<Allele> alleles = new ArrayList<Allele>(nAlleles);
- String ref = null;
-
- for ( int i = 0; i < nAlleles; i++ ) {
- final String alleleBases = (String)decoder.decodeTypedValue();
-
- final boolean isRef = i == 0;
- final Allele allele = Allele.create(alleleBases, isRef);
- if ( isRef ) ref = alleleBases;
-
- alleles.add(allele);
- }
- assert ref != null;
-
- builder.alleles(alleles);
-
- assert ref.length() > 0;
-
- return alleles;
- }
-
- /**
- * Decode the filter field of this BCF2 file and store the result in the builder
- * @param builder
- */
- private void decodeFilter( final VariantContextBuilder builder ) throws IOException {
- final Object value = decoder.decodeTypedValue();
-
- if ( value == null )
- builder.unfiltered();
- else {
- if ( value instanceof Integer ) {
- // fast path for single integer result
- final String filterString = getDictionaryString((Integer)value);
- if ( VCFConstants.PASSES_FILTERS_v4.equals(filterString))
- builder.passFilters();
- else
- builder.filter(filterString);
- } else {
- for ( final int offset : (List<Integer>)value )
- builder.filter(getDictionaryString(offset));
- }
- }
- }
-
- /**
- * Loop over the info field key / value pairs in this BCF2 file and decode them into the builder
- *
- * @param builder
- * @param numInfoFields
- */
- @Requires("numInfoFields >= 0")
- private void decodeInfo( final VariantContextBuilder builder, final int numInfoFields ) throws IOException {
- if ( numInfoFields == 0 )
- // fast path, don't bother doing any work if there are no fields
- return;
-
- final Map<String, Object> infoFieldEntries = new HashMap<String, Object>(numInfoFields);
- for ( int i = 0; i < numInfoFields; i++ ) {
- final String key = getDictionaryString();
- Object value = decoder.decodeTypedValue();
- final VCFCompoundHeaderLine metaData = VariantContextUtils.getMetaDataForField(header, key);
- if ( metaData.getType() == VCFHeaderLineType.Flag ) value = true; // special case for flags
- infoFieldEntries.put(key, value);
- }
-
- builder.attributes(infoFieldEntries);
- }
-
- // --------------------------------------------------------------------------------
- //
- // Decoding Genotypes
- //
- // --------------------------------------------------------------------------------
-
- /**
- * Create the lazy loader for the genotypes data, and store it in the builder
- * so that the VC will be able to decode on demand the genotypes data
- *
- * @param siteInfo
- * @param builder
- */
- private void createLazyGenotypesDecoder( final SitesInfoForDecoding siteInfo,
- final VariantContextBuilder builder ) {
- if (siteInfo.nSamples > 0) {
- final LazyGenotypesContext.LazyParser lazyParser =
- new BCF2LazyGenotypesDecoder(this, siteInfo.alleles, siteInfo.nSamples, siteInfo.nFormatFields, builders);
-
- final LazyData lazyData = new LazyData(header, siteInfo.nFormatFields, decoder.getRecordBytes());
- final LazyGenotypesContext lazy = new LazyGenotypesContext(lazyParser, lazyData, header.getNGenotypeSamples());
-
- // did we resort the sample names? If so, we need to load the genotype data
- if ( !header.samplesWereAlreadySorted() )
- lazy.decode();
-
- builder.genotypesNoValidation(lazy);
- }
- }
-
- public static class LazyData {
- final public VCFHeader header;
- final public int nGenotypeFields;
- final public byte[] bytes;
-
- @Requires({"nGenotypeFields > 0", "bytes != null"})
- public LazyData(final VCFHeader header, final int nGenotypeFields, final byte[] bytes) {
- this.header = header;
- this.nGenotypeFields = nGenotypeFields;
- this.bytes = bytes;
- }
- }
-
- @Ensures("result != null")
- private final String getDictionaryString() throws IOException {
- return getDictionaryString((Integer) decoder.decodeTypedValue());
- }
-
- @Requires("offset < dictionary.size()")
- @Ensures("result != null")
- protected final String getDictionaryString(final int offset) {
- return dictionary.get(offset);
- }
-
- /**
- * Translate the config offset as encoded in the BCF file into the actual string
- * name of the contig from the dictionary
- *
- * @param contigOffset
- * @return
- */
- @Requires({"contigOffset >= 0", "contigOffset < contigNames.size()"})
- @Ensures("result != null")
- private final String lookupContigName( final int contigOffset ) {
- return contigNames.get(contigOffset);
- }
-
- @Requires("header != null")
- @Ensures({"result != null", "! result.isEmpty()"})
- private final ArrayList<String> parseDictionary(final VCFHeader header) {
- final ArrayList<String> dict = BCF2Utils.makeDictionary(header);
-
- // if we got here we never found a dictionary, or there are no elements in the dictionary
- if ( dict.isEmpty() )
- error("Dictionary header element was absent or empty");
-
- return dict;
- }
-
- /**
- * @return the VCFHeader we found in this BCF2 file
- */
- protected VCFHeader getHeader() {
- return header;
- }
-
- @Requires("field != null")
- @Ensures("result != null")
- protected BCF2GenotypeFieldDecoders.Decoder getGenotypeFieldDecoder(final String field) {
- return gtFieldDecoders.getDecoder(field);
- }
-
- private void error(final String message) throws RuntimeException {
- throw new TribbleException(String.format("%s, at record %d with position %d:", message, recordNo, pos));
- }
-}
diff --git a/src/java/org/broadinstitute/variant/bcf2/BCF2Decoder.java b/src/java/org/broadinstitute/variant/bcf2/BCF2Decoder.java
deleted file mode 100644
index b997070..0000000
--- a/src/java/org/broadinstitute/variant/bcf2/BCF2Decoder.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.utils.GeneralUtils;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-public final class BCF2Decoder {
- byte[] recordBytes = null;
- ByteArrayInputStream recordStream = null;
-
- public BCF2Decoder() {
- // nothing to do
- }
-
- /**
- * Create a new decoder ready to read BCF2 data from the byte[] recordBytes, for testing purposes
- *
- * @param recordBytes
- */
- protected BCF2Decoder(final byte[] recordBytes) {
- setRecordBytes(recordBytes);
- }
-
- // ----------------------------------------------------------------------
- //
- // Routines to load, set, skip blocks of underlying data we are decoding
- //
- // ----------------------------------------------------------------------
-
- /**
- * Reads the next record from input stream and prepare this decoder to decode values from it
- *
- * @param stream
- * @return
- */
- public void readNextBlock(final int blockSizeInBytes, final InputStream stream) {
- if ( blockSizeInBytes < 0 ) throw new TribbleException("Invalid block size " + blockSizeInBytes);
- setRecordBytes(readRecordBytes(blockSizeInBytes, stream));
- }
-
- /**
- * Skips the next record from input stream, invalidating current block data
- *
- * @param stream
- * @return
- */
- public void skipNextBlock(final int blockSizeInBytes, final InputStream stream) {
- try {
- final int bytesRead = (int)stream.skip(blockSizeInBytes);
- validateReadBytes(bytesRead, 1, blockSizeInBytes);
- } catch ( IOException e ) {
- throw new TribbleException("I/O error while reading BCF2 file", e);
- }
- this.recordBytes = null;
- this.recordStream = null;
- }
-
- /**
- * Returns the byte[] for the block of data we are currently decoding
- * @return
- */
- public byte[] getRecordBytes() {
- return recordBytes;
- }
-
- /**
- * The size of the current block in bytes
- *
- * @return
- */
- public int getBlockSize() {
- return recordBytes.length;
- }
-
- public boolean blockIsFullyDecoded() {
- return recordStream.available() == 0;
- }
-
- /**
- * Use the recordBytes[] to read BCF2 records from now on
- *
- * @param recordBytes
- */
- @Requires("recordBytes != null")
- @Ensures({"this.recordBytes == recordBytes", "recordStream != null"})
- public void setRecordBytes(final byte[] recordBytes) {
- this.recordBytes = recordBytes;
- this.recordStream = new ByteArrayInputStream(recordBytes);
- }
-
- // ----------------------------------------------------------------------
- //
- // High-level decoder
- //
- // ----------------------------------------------------------------------
-
- public final Object decodeTypedValue() throws IOException {
- final byte typeDescriptor = readTypeDescriptor();
- return decodeTypedValue(typeDescriptor);
- }
-
- public final Object decodeTypedValue(final byte typeDescriptor) throws IOException {
- final int size = decodeNumberOfElements(typeDescriptor);
- return decodeTypedValue(typeDescriptor, size);
- }
-
- @Requires("size >= 0")
- public final Object decodeTypedValue(final byte typeDescriptor, final int size) throws IOException {
- if ( size == 0 ) {
- // missing value => null in java
- return null;
- } else {
- final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
- if ( type == BCF2Type.CHAR ) { // special case string decoding for efficiency
- return decodeLiteralString(size);
- } else if ( size == 1 ) {
- return decodeSingleValue(type);
- } else {
- final ArrayList<Object> ints = new ArrayList<Object>(size);
- for ( int i = 0; i < size; i++ ) {
- final Object val = decodeSingleValue(type);
- if ( val == null ) continue; // auto-pruning. We remove trailing nulls
- ints.add(val);
- }
- return ints.isEmpty() ? null : ints; // return null when all of the values are null
- }
- }
- }
-
- public final Object decodeSingleValue(final BCF2Type type) throws IOException {
- // TODO -- decodeTypedValue should integrate this routine
- final int value = decodeInt(type);
-
- if ( value == type.getMissingBytes() )
- return null;
- else {
- switch (type) {
- case INT8:
- case INT16:
- case INT32: return value;
- case FLOAT: return rawFloatToFloat(value);
- case CHAR: return value & 0xFF; // TODO -- I cannot imagine why we'd get here, as string needs to be special cased
- default: throw new TribbleException("BCF2 codec doesn't know how to decode type " + type );
- }
- }
- }
-
- // ----------------------------------------------------------------------
- //
- // Decode raw primitive data types (ints, floats, and strings)
- //
- // ----------------------------------------------------------------------
-
- private final Object decodeLiteralString(final int size) {
- assert size > 0;
-
- // TODO -- assumes size > 0
- final byte[] bytes = new byte[size]; // TODO -- in principle should just grab bytes from underlying array
- try {
- recordStream.read(bytes);
-
- int goodLength = 0;
- for ( ; goodLength < bytes.length ; goodLength++ )
- if ( bytes[goodLength] == 0 ) break;
-
- if ( goodLength == 0 )
- return null;
- else {
- final String s = new String(bytes, 0, goodLength);
- return BCF2Utils.isCollapsedString(s) ? BCF2Utils.explodeStringList(s) : s;
- }
- } catch ( IOException e ) {
- throw new TribbleException("readByte failure", e);
- }
- }
-
- @Ensures("result >= 0")
- public final int decodeNumberOfElements(final byte typeDescriptor) throws IOException {
- if ( BCF2Utils.sizeIsOverflow(typeDescriptor) )
- // -1 ensures we explode immediately with a bad size if the result is missing
- return decodeInt(readTypeDescriptor(), -1);
- else
- // the size is inline, so just decode it
- return BCF2Utils.decodeSize(typeDescriptor);
- }
-
- /**
- * Decode an int from the stream. If the value in the stream is missing,
- * returns missingValue. Requires the typeDescriptor indicate an inline
- * single element event
- *
- * @param typeDescriptor
- * @return
- */
- @Requires("BCF2Utils.decodeSize(typeDescriptor) == 1")
- public final int decodeInt(final byte typeDescriptor, final int missingValue) throws IOException {
- final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
- final int i = decodeInt(type);
- return i == type.getMissingBytes() ? missingValue : i;
- }
-
- @Requires("type != null")
- public final int decodeInt(final BCF2Type type) throws IOException {
- return type.read(recordStream);
- }
-
- /**
- * Low-level reader for int[]
- *
- * Requires a typeDescriptor so the function knows how many elements to read,
- * and how they are encoded.
- *
- * If size == 0 => result is null
- * If size > 0 => result depends on the actual values in the stream
- * -- If the first element read is MISSING, result is null (all values are missing)
- * -- Else result = int[N] where N is the first N non-missing values decoded
- *
- * @param maybeDest if not null we'll not allocate space for the vector, but instead use
- * the externally allocated array of ints to store values. If the
- * size of this vector is < the actual size of the elements, we'll be
- * forced to use freshly allocated arrays. Also note that padded
- * int elements are still forced to do a fresh allocation as well.
- * @return see description
- */
- @Requires({"type != null", "type.isIntegerType()", "size >= 0"})
- public final int[] decodeIntArray(final int size, final BCF2Type type, int[] maybeDest) throws IOException {
- if ( size == 0 ) {
- return null;
- } else {
- if ( maybeDest != null && maybeDest.length < size )
- maybeDest = null; // by nulling this out we ensure that we do fresh allocations as maybeDest is too small
-
- final int val1 = decodeInt(type);
- if ( val1 == type.getMissingBytes() ) {
- // fast path for first element being missing
- for ( int i = 1; i < size; i++ ) decodeInt(type);
- return null;
- } else {
- // we know we will have at least 1 element, so making the int[] is worth it
- final int[] ints = maybeDest == null ? new int[size] : maybeDest;
- ints[0] = val1; // we already read the first one
- for ( int i = 1; i < size; i++ ) {
- ints[i] = decodeInt(type);
- if ( ints[i] == type.getMissingBytes() ) {
- // read the rest of the missing values, dropping them
- for ( int j = i + 1; j < size; j++ ) decodeInt(type);
- // deal with auto-pruning by returning an int[] containing
- // only the non-MISSING values. We do this by copying the first
- // i elements, as i itself is missing
- return Arrays.copyOf(ints, i);
- }
- }
- return ints; // all of the elements were non-MISSING
- }
- }
- }
-
- public final int[] decodeIntArray(final byte typeDescriptor, final int size) throws IOException {
- final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
- return decodeIntArray(size, type, null);
- }
-
- private double rawFloatToFloat(final int rawFloat) {
- return (double)Float.intBitsToFloat(rawFloat);
- }
-
- // ----------------------------------------------------------------------
- //
- // Utility functions
- //
- // ----------------------------------------------------------------------
-
- /**
- * Read the size of the next block from inputStream
- *
- * @param inputStream
- * @return
- */
- public final int readBlockSize(final InputStream inputStream) throws IOException {
- return BCF2Type.INT32.read(inputStream);
- }
-
- /**
- * Read all bytes for a BCF record block into a byte[], and return it
- *
- * Is smart about reading from the stream multiple times to fill the buffer, if necessary
- *
- * @param blockSizeInBytes number of bytes to read
- * @param inputStream the stream to read from
- * @return a non-null byte[] containing exactly blockSizeInBytes bytes from the inputStream
- */
- @Requires({"blockSizeInBytes >= 0", "inputStream != null"})
- @Ensures("result != null")
- private static byte[] readRecordBytes(final int blockSizeInBytes, final InputStream inputStream) {
- assert blockSizeInBytes >= 0;
-
- final byte[] record = new byte[blockSizeInBytes];
- try {
- int bytesRead = 0;
- int nReadAttempts = 0; // keep track of how many times we've read
-
- // because we might not read enough bytes from the file in a single go, do it in a loop until we get EOF
- while ( bytesRead < blockSizeInBytes ) {
- final int read1 = inputStream.read(record, bytesRead, blockSizeInBytes - bytesRead);
- if ( read1 == -1 )
- validateReadBytes(bytesRead, nReadAttempts, blockSizeInBytes);
- else
- bytesRead += read1;
- }
-
- if ( GeneralUtils.DEBUG_MODE_ENABLED && nReadAttempts > 1 ) { // TODO -- remove me
- System.err.println("Required multiple read attempts to actually get the entire BCF2 block, unexpected behavior");
- }
-
- validateReadBytes(bytesRead, nReadAttempts, blockSizeInBytes);
- } catch ( IOException e ) {
- throw new TribbleException("I/O error while reading BCF2 file", e);
- }
-
- return record;
- }
-
- /**
- * Make sure we read the right number of bytes, or throw an error
- *
- * @param actuallyRead
- * @param nReadAttempts
- * @param expected
- */
- private static void validateReadBytes(final int actuallyRead, final int nReadAttempts, final int expected) {
- assert expected >= 0;
-
- if ( actuallyRead < expected ) {
- throw new TribbleException(
- String.format("Failed to read next complete record: expected %d bytes but read only %d after %d iterations",
- expected, actuallyRead, nReadAttempts));
- }
- }
-
- public final byte readTypeDescriptor() throws IOException {
- return BCF2Utils.readByte(recordStream);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/bcf2/BCF2GenotypeFieldDecoders.java b/src/java/org/broadinstitute/variant/bcf2/BCF2GenotypeFieldDecoders.java
deleted file mode 100644
index 87d6765..0000000
--- a/src/java/org/broadinstitute/variant/bcf2/BCF2GenotypeFieldDecoders.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broadinstitute.variant.vcf.VCFConstants;
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.broadinstitute.variant.variantcontext.Allele;
-import org.broadinstitute.variant.variantcontext.GenotypeBuilder;
-
-import java.io.IOException;
-import java.util.*;
-
-/**
- * An efficient scheme for building and obtaining specialized
- * genotype field decoders. Used by the BCFCodec to parse
- * with little overhead the fields from BCF2 encoded genotype
- * records
- *
- * @author Mark DePristo
- * @since 6/12
- */
-public class BCF2GenotypeFieldDecoders {
- private final static boolean ENABLE_FASTPATH_GT = true;
- private final static int MIN_SAMPLES_FOR_FASTPATH_GENOTYPES = 0; // TODO -- update to reasonable number
-
- // initialized once per writer to allow parallel writers to work
- private final HashMap<String, Decoder> genotypeFieldDecoder = new HashMap<String, Decoder>();
- private final Decoder defaultDecoder = new GenericDecoder();
-
- public BCF2GenotypeFieldDecoders(final VCFHeader header) {
- // TODO -- fill in appropriate decoders for each FORMAT field in the header
-
- genotypeFieldDecoder.put(VCFConstants.GENOTYPE_KEY, new GTDecoder());
- // currently the generic decoder handles FILTER values properly, in so far as we don't tolerate multiple filter field values per genotype
- genotypeFieldDecoder.put(VCFConstants.GENOTYPE_FILTER_KEY, new FTDecoder());
- genotypeFieldDecoder.put(VCFConstants.DEPTH_KEY, new DPDecoder());
- genotypeFieldDecoder.put(VCFConstants.GENOTYPE_ALLELE_DEPTHS, new ADDecoder());
- genotypeFieldDecoder.put(VCFConstants.GENOTYPE_PL_KEY, new PLDecoder());
- genotypeFieldDecoder.put(VCFConstants.GENOTYPE_QUALITY_KEY, new GQDecoder());
- }
-
- // -----------------------------------------------------------------
- //
- // Genotype field decoder
- //
- // -----------------------------------------------------------------
-
- /**
- * Return decoder appropriate for field, or the generic decoder if no
- * specialized one is bound
- * @param field the GT field to decode
- * @return a non-null decoder
- */
- @Requires("field != null")
- @Ensures("result != null")
- public Decoder getDecoder(final String field) {
- final Decoder d = genotypeFieldDecoder.get(field);
- return d == null ? defaultDecoder : d;
- }
-
- /**
- * Decoder a field (implicit from creation) encoded as
- * typeDescriptor in the decoder object in the GenotypeBuilders
- * one for each sample in order.
- *
- * The way this works is that this decode method
- * iterates over the builders, decoding a genotype field
- * in BCF2 for each sample from decoder.
- *
- * This system allows us to easily use specialized
- * decoders for specific genotype field values. For example,
- * we use a special decoder to directly read the BCF2 data for
- * the PL field into a int[] rather than the generic List of Integer
- */
- public interface Decoder {
- @Requires({"siteAlleles != null", "! siteAlleles.isEmpty()",
- "field != null", "decoder != null", "gbs != null", "gbs.length != 0"})
- public void decode(final List<Allele> siteAlleles,
- final String field,
- final BCF2Decoder decoder,
- final byte typeDescriptor,
- final int numElements,
- final GenotypeBuilder[] gbs) throws IOException;
- }
-
- private class GTDecoder implements Decoder {
- @Override
- public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
- if ( ENABLE_FASTPATH_GT && siteAlleles.size() == 2 && numElements == 2 && gbs.length >= MIN_SAMPLES_FOR_FASTPATH_GENOTYPES )
- fastBiallelicDiploidDecode(siteAlleles, decoder, typeDescriptor, gbs);
- else {
- generalDecode(siteAlleles, numElements, decoder, typeDescriptor, gbs);
- }
- }
-
- /**
- * fast path for many samples with diploid genotypes
- *
- * The way this would work is simple. Create a List<Allele> diploidGenotypes[] object
- * After decoding the offset, if that sample is diploid compute the
- * offset into the alleles vector which is simply offset = allele0 * nAlleles + allele1
- * if there's a value at diploidGenotypes[offset], use it, otherwise create the genotype
- * cache it and use that
- *
- * Some notes. If there are nAlleles at the site, there are implicitly actually
- * n + 1 options including
- */
- @Requires("siteAlleles.size() == 2")
- @SuppressWarnings({"unchecked"})
- private final void fastBiallelicDiploidDecode(final List<Allele> siteAlleles,
- final BCF2Decoder decoder,
- final byte typeDescriptor,
- final GenotypeBuilder[] gbs) throws IOException {
- final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
-
- final int nPossibleGenotypes = 3 * 3;
- final Object allGenotypes[] = new Object[nPossibleGenotypes];
-
- for ( final GenotypeBuilder gb : gbs ) {
- final int a1 = decoder.decodeInt(type);
- final int a2 = decoder.decodeInt(type);
-
- if ( a1 == type.getMissingBytes() ) {
- assert a2 == type.getMissingBytes();
- // no called sample GT = .
- gb.alleles(null);
- } else if ( a2 == type.getMissingBytes() ) {
- gb.alleles(Arrays.asList(getAlleleFromEncoded(siteAlleles, a1)));
- } else {
- // downshift to remove phase
- final int offset = (a1 >> 1) * 3 + (a2 >> 1);
- assert offset < allGenotypes.length;
-
- // TODO -- how can I get rid of this cast?
- List<Allele> gt = (List<Allele>)allGenotypes[offset];
- if ( gt == null ) {
- final Allele allele1 = getAlleleFromEncoded(siteAlleles, a1);
- final Allele allele2 = getAlleleFromEncoded(siteAlleles, a2);
- gt = Arrays.asList(allele1, allele2);
- allGenotypes[offset] = gt;
- }
-
- gb.alleles(gt);
- }
-
- final boolean phased = (a1 & 0x01) == 1;
- gb.phased(phased);
- }
- }
-
- private final void generalDecode(final List<Allele> siteAlleles,
- final int ploidy,
- final BCF2Decoder decoder,
- final byte typeDescriptor,
- final GenotypeBuilder[] gbs) throws IOException {
- final BCF2Type type = BCF2Utils.decodeType(typeDescriptor);
-
- // a single cache for the encoded genotypes, since we don't actually need this vector
- final int[] tmp = new int[ploidy];
-
- for ( final GenotypeBuilder gb : gbs ) {
- final int[] encoded = decoder.decodeIntArray(ploidy, type, tmp);
- if ( encoded == null )
- // no called sample GT = .
- gb.alleles(null);
- else {
- assert encoded.length > 0;
-
- // we have at least some alleles to decode
- final List<Allele> gt = new ArrayList<Allele>(encoded.length);
-
- // note that the auto-pruning of fields magically handles different
- // ploidy per sample at a site
- for ( final int encode : encoded )
- gt.add(getAlleleFromEncoded(siteAlleles, encode));
-
- gb.alleles(gt);
- final boolean phased = (encoded[0] & 0x01) == 1;
- gb.phased(phased);
- }
- }
- }
-
- @Requires({"siteAlleles != null && ! siteAlleles.isEmpty()", "encode >= 0"})
- @Ensures("result != null")
- private final Allele getAlleleFromEncoded(final List<Allele> siteAlleles, final int encode) {
- final int offset = encode >> 1;
- return offset == 0 ? Allele.NO_CALL : siteAlleles.get(offset - 1);
- }
- }
-
- private class DPDecoder implements Decoder {
- @Override
- public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
- for ( final GenotypeBuilder gb : gbs ) {
- // the -1 is for missing
- gb.DP(decoder.decodeInt(typeDescriptor, -1));
- }
- }
- }
-
- private class GQDecoder implements Decoder {
- @Override
- public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
- for ( final GenotypeBuilder gb : gbs ) {
- // the -1 is for missing
- gb.GQ(decoder.decodeInt(typeDescriptor, -1));
- }
- }
- }
-
- private class ADDecoder implements Decoder {
- @Override
- public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
- for ( final GenotypeBuilder gb : gbs ) {
- gb.AD(decoder.decodeIntArray(typeDescriptor, numElements));
- }
- }
- }
-
- private class PLDecoder implements Decoder {
- @Override
- public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
- for ( final GenotypeBuilder gb : gbs ) {
- gb.PL(decoder.decodeIntArray(typeDescriptor, numElements));
- }
- }
- }
-
- private class GenericDecoder implements Decoder {
- @Override
- public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
- for ( final GenotypeBuilder gb : gbs ) {
- Object value = decoder.decodeTypedValue(typeDescriptor, numElements);
- if ( value != null ) { // don't add missing values
- if ( value instanceof List && ((List)value).size() == 1) {
- // todo -- I really hate this, and it suggests that the code isn't completely right
- // the reason it's here is that it's possible to prune down a vector to a singleton
- // value and there we have the contract that the value comes back as an atomic value
- // not a vector of size 1
- value = ((List)value).get(0);
- }
- gb.attribute(field, value);
- }
- }
- }
- }
-
- private class FTDecoder implements Decoder {
- @Override
- public void decode(final List<Allele> siteAlleles, final String field, final BCF2Decoder decoder, final byte typeDescriptor, final int numElements, final GenotypeBuilder[] gbs) throws IOException {
- for ( final GenotypeBuilder gb : gbs ) {
- Object value = decoder.decodeTypedValue(typeDescriptor, numElements);
- assert value == null || value instanceof String;
- gb.filter((String)value);
- }
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/bcf2/BCF2LazyGenotypesDecoder.java b/src/java/org/broadinstitute/variant/bcf2/BCF2LazyGenotypesDecoder.java
deleted file mode 100644
index ffbfe81..0000000
--- a/src/java/org/broadinstitute/variant/bcf2/BCF2LazyGenotypesDecoder.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import com.google.java.contract.Requires;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.variantcontext.*;
-
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Lazy version of genotypes decoder for BCF2 genotypes
- *
- * @author Mark DePristo
- * @since 5/12
- */
-public class BCF2LazyGenotypesDecoder implements LazyGenotypesContext.LazyParser {
- // the essential information for us to use to decode the genotypes data
- // initialized when this lazy decoder is created, as we know all of this from the BCF2Codec
- // and its stored here again for code cleanliness
- private final BCF2Codec codec;
- private final List<Allele> siteAlleles;
- private final int nSamples;
- private final int nFields;
- private final GenotypeBuilder[] builders;
-
- @Requires("codec.getHeader().getNGenotypeSamples() == builders.length")
- BCF2LazyGenotypesDecoder(final BCF2Codec codec, final List<Allele> alleles, final int nSamples,
- final int nFields, final GenotypeBuilder[] builders) {
- this.codec = codec;
- this.siteAlleles = alleles;
- this.nSamples = nSamples;
- this.nFields = nFields;
- this.builders = builders;
- }
-
- @Override
- public LazyGenotypesContext.LazyData parse(final Object data) {
- try {
-
- // load our byte[] data into the decoder
- final BCF2Decoder decoder = new BCF2Decoder(((BCF2Codec.LazyData)data).bytes);
-
- for ( int i = 0; i < nSamples; i++ )
- builders[i].reset(true);
-
- for ( int i = 0; i < nFields; i++ ) {
- // get the field name
- final int offset = (Integer) decoder.decodeTypedValue();
- final String field = codec.getDictionaryString(offset);
-
- // the type of each element
- final byte typeDescriptor = decoder.readTypeDescriptor();
- final int numElements = decoder.decodeNumberOfElements(typeDescriptor);
- final BCF2GenotypeFieldDecoders.Decoder fieldDecoder = codec.getGenotypeFieldDecoder(field);
- try {
- fieldDecoder.decode(siteAlleles, field, decoder, typeDescriptor, numElements, builders);
- } catch ( ClassCastException e ) {
- throw new TribbleException("BUG: expected encoding of field " + field
- + " inconsistent with the value observed in the decoded value");
- }
- }
-
- final ArrayList<Genotype> genotypes = new ArrayList<Genotype>(nSamples);
- for ( final GenotypeBuilder gb : builders )
- genotypes.add(gb.make());
-
- return new LazyGenotypesContext.LazyData(genotypes, codec.getHeader().getSampleNamesInOrder(), codec.getHeader().getSampleNameToOffset());
- } catch ( IOException e ) {
- throw new TribbleException("Unexpected IOException parsing already read genotypes data block", e);
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/bcf2/BCF2Type.java b/src/java/org/broadinstitute/variant/bcf2/BCF2Type.java
deleted file mode 100644
index 4504b8d..0000000
--- a/src/java/org/broadinstitute/variant/bcf2/BCF2Type.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import com.google.java.contract.Requires;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.EnumSet;
-
-/**
- * BCF2 types and associated information
- *
- * @author depristo
- * @since 05/12
- */
-public enum BCF2Type {
- // the actual values themselves
- MISSING(0, 0, 0x00) {
- @Override public int read(final InputStream in) throws IOException {
- throw new IllegalArgumentException("Cannot read MISSING type");
- }
- @Override public void write(final int value, final OutputStream out) throws IOException {
- throw new IllegalArgumentException("Cannot write MISSING type");
- }
- },
-
- INT8 (1, 1, 0xFFFFFF80, -127, 127) {
- @Override
- public int read(final InputStream in) throws IOException {
- return BCF2Utils.readByte(in);
- }
-
- @Override
- public void write(final int value, final OutputStream out) throws IOException {
- out.write(0xFF & value); // TODO -- do we need this operation?
- }
- },
-
- INT16(2, 2, 0xFFFF8000, -32767, 32767) {
- @Override
- public int read(final InputStream in) throws IOException {
- final int b2 = BCF2Utils.readByte(in) & 0xFF;
- final int b1 = BCF2Utils.readByte(in) & 0xFF;
- return (short)((b1 << 8) | b2);
- }
-
- @Override
- public void write(final int value, final OutputStream out) throws IOException {
- // TODO -- optimization -- should we put this in a local buffer?
- out.write((0x00FF & value));
- out.write((0xFF00 & value) >> 8);
- }
- },
-
- INT32(3, 4, 0x80000000, -2147483647, 2147483647) {
- @Override
- public int read(final InputStream in) throws IOException {
- final int b4 = BCF2Utils.readByte(in) & 0xFF;
- final int b3 = BCF2Utils.readByte(in) & 0xFF;
- final int b2 = BCF2Utils.readByte(in) & 0xFF;
- final int b1 = BCF2Utils.readByte(in) & 0xFF;
- return (int)(b1 << 24 | b2 << 16 | b3 << 8 | b4);
- }
-
- @Override
- public void write(final int value, final OutputStream out) throws IOException {
- out.write((0x000000FF & value));
- out.write((0x0000FF00 & value) >> 8);
- out.write((0x00FF0000 & value) >> 16);
- out.write((0xFF000000 & value) >> 24);
- }
- },
-
- FLOAT(5, 4, 0x7F800001) {
- @Override
- public int read(final InputStream in) throws IOException {
- return INT32.read(in);
- }
-
- @Override
- public void write(final int value, final OutputStream out) throws IOException {
- INT32.write(value, out);
- }
- },
-
- CHAR (7, 1, 0x00000000) {
- @Override
- public int read(final InputStream in) throws IOException {
- return INT8.read(in);
- }
-
- @Override
- public void write(final int value, final OutputStream out) throws IOException {
- INT8.write(value, out);
- }
- };
-
- private final int id;
- private final Object missingJavaValue;
- private final int missingBytes;
- private final int sizeInBytes;
- private final long minValue, maxValue;
-
- BCF2Type(final int id, final int sizeInBytes, final int missingBytes) {
- this(id, sizeInBytes, missingBytes, 0, 0);
- }
-
- BCF2Type(final int id, final int sizeInBytes, final int missingBytes, final long minValue, final long maxValue) {
- this.id = id;
- this.sizeInBytes = sizeInBytes;
- this.missingJavaValue = null;
- this.missingBytes = missingBytes;
- this.minValue = minValue;
- this.maxValue = maxValue;
- }
-
- /**
- * How many bytes are used to represent this type on disk?
- * @return
- */
- public int getSizeInBytes() {
- return sizeInBytes;
- }
-
- /**
- * The ID according to the BCF2 specification
- * @return
- */
- public int getID() { return id; }
-
- /**
- * Can we encode value v in this type, according to its declared range.
- *
- * Only makes sense for integer values
- *
- * @param v
- * @return
- */
- @Requires("this.isIntegerType()")
- public final boolean withinRange(final long v) { return v >= minValue && v <= maxValue; }
-
- /**
- * Return the java object (aka null) that is used to represent a missing value for this
- * type in Java
- *
- * @return
- */
- public Object getMissingJavaValue() { return missingJavaValue; }
-
- /**
- * The bytes (encoded as an int) that are used to represent a missing value
- * for this type in BCF2
- *
- * @return
- */
- public int getMissingBytes() { return missingBytes; }
-
- /**
- * An enum set of the types that might represent Integer values
- */
- private final static EnumSet<BCF2Type> INTEGERS = EnumSet.of(INT8, INT16, INT32);
-
- /**
- * @return true if this BCF2Type corresponds to the magic "MISSING" type (0x00)
- */
- public boolean isMissingType() {
- return this == MISSING;
- }
-
- public boolean isIntegerType() {
- return INTEGERS.contains(this);
- }
-
- /**
- * Read a value from in stream of this BCF2 type as an int [32 bit] collection of bits
- *
- * For intX and char values this is just the int / byte value of the underlying data represented as a 32 bit int
- * For a char the result must be converted to a char by (char)(byte)(0x0F & value)
- * For doubles it's necessary to convert subsequently this value to a double via Double.bitsToDouble()
- *
- * @param in
- * @return
- * @throws IOException
- */
- @Requires("in != null")
- public int read(final InputStream in) throws IOException {
- throw new IllegalArgumentException("Not implemented");
- }
-
- @Requires("out != null")
- public void write(final int value, final OutputStream out) throws IOException {
- throw new IllegalArgumentException("Not implemented");
- }
-}
diff --git a/src/java/org/broadinstitute/variant/bcf2/BCF2Utils.java b/src/java/org/broadinstitute/variant/bcf2/BCF2Utils.java
deleted file mode 100644
index d699242..0000000
--- a/src/java/org/broadinstitute/variant/bcf2/BCF2Utils.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.vcf.*;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Common utilities for working with BCF2 files
- *
- * Includes convenience methods for encoding, decoding BCF2 type descriptors (size + type)
- *
- * @author depristo
- * @since 5/12
- */
-public final class BCF2Utils {
- public static final int MAX_ALLELES_IN_GENOTYPES = 127;
-
- public static final int OVERFLOW_ELEMENT_MARKER = 15;
- public static final int MAX_INLINE_ELEMENTS = 14;
-
- public final static BCF2Type[] INTEGER_TYPES_BY_SIZE = new BCF2Type[]{BCF2Type.INT8, BCF2Type.INT16, BCF2Type.INT32};
- public final static BCF2Type[] ID_TO_ENUM;
-
- static {
- int maxID = -1;
- for ( BCF2Type v : BCF2Type.values() ) maxID = Math.max(v.getID(), maxID);
- ID_TO_ENUM = new BCF2Type[maxID+1];
- for ( BCF2Type v : BCF2Type.values() ) ID_TO_ENUM[v.getID()] = v;
- }
-
- private BCF2Utils() {}
-
- /**
- * Create a strings dictionary from the VCF header
- *
- * The dictionary is an ordered list of common VCF identifers (FILTER, INFO, and FORMAT)
- * fields.
- *
- * Note that its critical that the list be dedupped and sorted in a consistent manner each time,
- * as the BCF2 offsets are encoded relative to this dictionary, and if it isn't determined exactly
- * the same way as in the header each time it's very bad
- *
- * @param header the VCFHeader from which to build the dictionary
- * @return a non-null dictionary of elements, may be empty
- */
- @Requires("header != null")
- @Ensures({"result != null", "new HashSet(result).size() == result.size()"})
- public static ArrayList<String> makeDictionary(final VCFHeader header) {
- final Set<String> seen = new HashSet<String>();
- final ArrayList<String> dict = new ArrayList<String>();
-
- // special case the special PASS field which doesn't show up in the FILTER field definitions
- seen.add(VCFConstants.PASSES_FILTERS_v4);
- dict.add(VCFConstants.PASSES_FILTERS_v4);
-
- // set up the strings dictionary
- for ( VCFHeaderLine line : header.getMetaDataInInputOrder() ) {
- if ( line.shouldBeAddedToDictionary() ) {
- final VCFIDHeaderLine idLine = (VCFIDHeaderLine)line;
- if ( ! seen.contains(idLine.getID())) {
- dict.add(idLine.getID());
- seen.add(idLine.getID());
- }
- }
- }
-
- return dict;
- }
-
- @Requires({"nElements >= 0", "nElements <= OVERFLOW_ELEMENT_MARKER", "type != null"})
- public static byte encodeTypeDescriptor(final int nElements, final BCF2Type type ) {
- return (byte)((0x0F & nElements) << 4 | (type.getID() & 0x0F));
- }
-
- @Ensures("result >= 0")
- public static int decodeSize(final byte typeDescriptor) {
- return (0xF0 & typeDescriptor) >> 4;
- }
-
- @Ensures("result >= 0")
- public static int decodeTypeID(final byte typeDescriptor) {
- return typeDescriptor & 0x0F;
- }
-
- @Ensures("result != null")
- public static BCF2Type decodeType(final byte typeDescriptor) {
- return ID_TO_ENUM[decodeTypeID(typeDescriptor)];
- }
-
- public static boolean sizeIsOverflow(final byte typeDescriptor) {
- return decodeSize(typeDescriptor) == OVERFLOW_ELEMENT_MARKER;
- }
-
- public static byte readByte(final InputStream stream) throws IOException {
- return (byte)(stream.read() & 0xFF);
- }
-
- /**
- * Collapse multiple strings into a comma separated list
- *
- * ["s1", "s2", "s3"] => ",s1,s2,s3"
- *
- * @param strings size > 1 list of strings
- * @return
- */
- @Requires({"strings != null"})
- @Ensures("result != null")
- public static String collapseStringList(final List<String> strings) {
- if ( strings.isEmpty() ) return "";
- else if ( strings.size() == 1 ) return strings.get(0);
- else {
- final StringBuilder b = new StringBuilder();
- for ( final String s : strings ) {
- if ( s != null ) {
- assert s.indexOf(",") == -1; // no commas in individual strings
- b.append(",").append(s);
- }
- }
- return b.toString();
- }
- }
-
- /**
- * Inverse operation of collapseStringList.
- *
- * ",s1,s2,s3" => ["s1", "s2", "s3"]
- *
- *
- * @param collapsed
- * @return
- */
- @Requires({"collapsed != null", "isCollapsedString(collapsed)"})
- @Ensures("result != null")
- public static List<String> explodeStringList(final String collapsed) {
- assert isCollapsedString(collapsed);
- final String[] exploded = collapsed.substring(1).split(",");
- return Arrays.asList(exploded);
- }
-
- @Requires("s != null")
- public static boolean isCollapsedString(final String s) {
- return s.length() > 0 && s.charAt(0) == ',';
- }
-
- /**
- * Returns a good name for a shadow BCF file for vcfFile.
- *
- * foo.vcf => foo.bcf
- * foo.xxx => foo.xxx.bcf
- *
- * If the resulting BCF file cannot be written, return null. Happens
- * when vcfFile = /dev/null for example
- *
- * @param vcfFile
- * @return the BCF
- */
- @Requires("vcfFile != null")
- public static final File shadowBCF(final File vcfFile) {
- final String path = vcfFile.getAbsolutePath();
- if ( path.contains(".vcf") )
- return new File(path.replace(".vcf", ".bcf"));
- else {
- final File bcf = new File( path + ".bcf" );
- if ( bcf.canRead() )
- return bcf;
- else {
- try {
- // this is the only way to robustly decide if we could actually write to BCF
- final FileOutputStream o = new FileOutputStream(bcf);
- o.close();
- bcf.delete();
- return bcf;
- } catch ( FileNotFoundException e ) {
- return null;
- } catch ( IOException e ) {
- return null;
- }
- }
- }
- }
-
- @Ensures("result.isIntegerType()")
- public static BCF2Type determineIntegerType(final int value) {
- for ( final BCF2Type potentialType : INTEGER_TYPES_BY_SIZE) {
- if ( potentialType.withinRange(value) )
- return potentialType;
- }
-
- throw new TribbleException("Integer cannot be encoded in allowable range of even INT32: " + value);
- }
-
- @Ensures("result.isIntegerType()")
- public static BCF2Type determineIntegerType(final int[] values) {
- // find the min and max values in the array
- int max = 0, min = 0;
- for ( final int v : values ) {
- if ( v > max ) max = v;
- if ( v < min ) min = v;
- }
-
- final BCF2Type maxType = determineIntegerType(max);
- final BCF2Type minType = determineIntegerType(min);
-
- // INT8 < INT16 < INT32 so this returns the larger of the two
- return maxType.compareTo(minType) >= 0 ? maxType : minType;
- }
-
- /**
- * Returns the maximum BCF2 integer size of t1 and t2
- *
- * For example, if t1 == INT8 and t2 == INT16 returns INT16
- *
- * @param t1
- * @param t2
- * @return
- */
- @Requires({"t1.isIntegerType()","t2.isIntegerType()"})
- @Ensures("result.isIntegerType()")
- public static BCF2Type maxIntegerType(final BCF2Type t1, final BCF2Type t2) {
- switch ( t1 ) {
- case INT8: return t2;
- case INT16: return t2 == BCF2Type.INT32 ? t2 : t1;
- case INT32: return t1;
- default: throw new TribbleException("BUG: unexpected BCF2Type " + t1);
- }
- }
-
- @Ensures("result.isIntegerType()")
- public static BCF2Type determineIntegerType(final List<Integer> values) {
- BCF2Type maxType = BCF2Type.INT8;
- for ( final int value : values ) {
- final BCF2Type type1 = determineIntegerType(value);
- switch ( type1 ) {
- case INT8: break;
- case INT16: maxType = BCF2Type.INT16; break;
- case INT32: return BCF2Type.INT32; // fast path for largest possible value
- default: throw new TribbleException("Unexpected integer type " + type1 );
- }
- }
- return maxType;
- }
-
- /**
- * Helper function that takes an object and returns a list representation
- * of it:
- *
- * o == null => []
- * o is a list => o
- * else => [o]
- *
- * @param o
- * @return
- */
- public static List<Object> toList(final Object o) {
- if ( o == null ) return Collections.emptyList();
- else if ( o instanceof List ) return (List<Object>)o;
- else if ( o.getClass().isArray() ) {
- final List<Object> l = new ArrayList<Object>();
- Collections.addAll(l, (int[])o);
- return l;
- }
- else return Collections.singletonList(o);
- }
-
- /**
- * Are the elements and their order in the output and input headers consistent so that
- * we can write out the raw genotypes block without decoding and recoding it?
- *
- * If the order of INFO, FILTER, or contrig elements in the output header is different than
- * in the input header we must decode the blocks using the input header and then recode them
- * based on the new output order.
- *
- * If they are consistent, we can simply pass through the raw genotypes block bytes, which is
- * a *huge* performance win for large blocks.
- *
- * Many common operations on BCF2 files (merging them for -nt, selecting a subset of records, etc)
- * don't modify the ordering of the header fields and so can safely pass through the genotypes
- * undecoded. Some operations -- those at add filters or info fields -- can change the ordering
- * of the header fields and so produce invalid BCF2 files if the genotypes aren't decoded
- */
- public static boolean headerLinesAreOrderedConsistently(final VCFHeader outputHeader, final VCFHeader genotypesBlockHeader) {
- // first, we have to have the same samples in the same order
- if ( ! nullAsEmpty(outputHeader.getSampleNamesInOrder()).equals(nullAsEmpty(genotypesBlockHeader.getSampleNamesInOrder())) )
- return false;
-
- final Iterator<? extends VCFIDHeaderLine> outputLinesIt = outputHeader.getIDHeaderLines().iterator();
- final Iterator<? extends VCFIDHeaderLine> inputLinesIt = genotypesBlockHeader.getIDHeaderLines().iterator();
-
- while ( inputLinesIt.hasNext() ) {
- if ( ! outputLinesIt.hasNext() ) // missing lines in output
- return false;
-
- final VCFIDHeaderLine outputLine = outputLinesIt.next();
- final VCFIDHeaderLine inputLine = inputLinesIt.next();
-
- if ( ! inputLine.getClass().equals(outputLine.getClass()) || ! inputLine.getID().equals(outputLine.getID()) )
- return false;
- }
-
- return true;
- }
-
- private static <T> List<T> nullAsEmpty(List<T> l) {
- if ( l == null )
- return Collections.emptyList();
- else
- return l;
- }
-}
diff --git a/src/java/org/broadinstitute/variant/bcf2/BCFVersion.java b/src/java/org/broadinstitute/variant/bcf2/BCFVersion.java
deleted file mode 100644
index dcb2d60..0000000
--- a/src/java/org/broadinstitute/variant/bcf2/BCFVersion.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-
-/**
- * Simple holder for BCF version information
- *
- * User: depristo
- * Date: 8/2/12
- * Time: 2:16 PM
- */
-public class BCFVersion {
- /**
- * BCF2 begins with the MAGIC info BCF_M_m where M is the major version (currently 2)
- * and m is the minor version, currently 1
- */
- public static final byte[] MAGIC_HEADER_START = "BCF".getBytes();
-
- final int majorVersion;
- final int minorVersion;
-
- public BCFVersion(int majorVersion, int minorVersion) {
- this.majorVersion = majorVersion;
- this.minorVersion = minorVersion;
- }
-
- /**
- * @return the major version number of this BCF file
- */
- public int getMajorVersion() {
- return majorVersion;
- }
-
- /**
- * @return the minor version number of this BCF file
- */
- public int getMinorVersion() {
- return minorVersion;
- }
-
- /**
- * Return a new BCFVersion object describing the major and minor version of the BCF file in stream
- *
- * Note that stream must be at the very start of the file.
- *
- * @param stream
- * @return a BCFVersion object, or null if stream doesn't contain a BCF file
- * @throws IOException
- */
- public static BCFVersion readBCFVersion(final InputStream stream) throws IOException {
- final byte[] magicBytes = new byte[MAGIC_HEADER_START.length];
- stream.read(magicBytes);
- if ( Arrays.equals(magicBytes, MAGIC_HEADER_START) ) {
- // we're a BCF file
- final int majorByte = stream.read();
- final int minorByte = stream.read();
- return new BCFVersion( majorByte, minorByte );
- } else
- return null;
- }
-
- /**
- * Write out the BCF magic information indicating this is a BCF file with corresponding major and minor versions
- * @param out
- * @throws IOException
- */
- public void write(final OutputStream out) throws IOException {
- out.write(MAGIC_HEADER_START);
- out.write(getMajorVersion() & 0xFF);
- out.write(getMinorVersion() & 0xFF);
- }
-
- @Override
- public String toString() {
- return String.format("BCF%d.%d", getMajorVersion(), getMinorVersion());
- }
-}
diff --git a/src/java/org/broadinstitute/variant/utils/GeneralUtils.java b/src/java/org/broadinstitute/variant/utils/GeneralUtils.java
deleted file mode 100644
index 2dbc865..0000000
--- a/src/java/org/broadinstitute/variant/utils/GeneralUtils.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.utils;
-
-import java.util.*;
-
-/**
- * Constants and utility methods used throughout the VCF/BCF/VariantContext classes
- */
-public class GeneralUtils {
-
- /**
- * Setting this to true causes the VCF/BCF/VariantContext classes to emit debugging information
- * to standard error
- */
- public static final boolean DEBUG_MODE_ENABLED = false;
-
- /**
- * The smallest log10 value we'll emit from normalizeFromLog10 and other functions
- * where the real-space value is 0.0.
- */
- public final static double LOG10_P_OF_ZERO = -1000000.0;
-
- /**
- * Returns a string of the form elt1.toString() [sep elt2.toString() ... sep elt.toString()] for a collection of
- * elti objects (note there's no actual space between sep and the elti elements). Returns
- * "" if collection is empty. If collection contains just elt, then returns elt.toString()
- *
- * @param separator the string to use to separate objects
- * @param objects a collection of objects. the element order is defined by the iterator over objects
- * @param <T> the type of the objects
- * @return a non-null string
- */
- public static <T> String join(final String separator, final Collection<T> objects) {
- if (objects.isEmpty()) { // fast path for empty collection
- return "";
- } else {
- final Iterator<T> iter = objects.iterator();
- final T first = iter.next();
-
- if ( ! iter.hasNext() ) // fast path for singleton collections
- return first.toString();
- else { // full path for 2+ collection that actually need a join
- final StringBuilder ret = new StringBuilder(first.toString());
- while(iter.hasNext()) {
- ret.append(separator);
- ret.append(iter.next().toString());
- }
- return ret.toString();
- }
- }
- }
-
- /**
- * normalizes the log10-based array. ASSUMES THAT ALL ARRAY ENTRIES ARE <= 0 (<= 1 IN REAL-SPACE).
- *
- * @param array the array to be normalized
- * @return a newly allocated array corresponding the normalized values in array
- */
- public static double[] normalizeFromLog10(double[] array) {
- return normalizeFromLog10(array, false);
- }
-
- /**
- * normalizes the log10-based array. ASSUMES THAT ALL ARRAY ENTRIES ARE <= 0 (<= 1 IN REAL-SPACE).
- *
- * @param array the array to be normalized
- * @param takeLog10OfOutput if true, the output will be transformed back into log10 units
- * @return a newly allocated array corresponding the normalized values in array, maybe log10 transformed
- */
- public static double[] normalizeFromLog10(double[] array, boolean takeLog10OfOutput) {
- return normalizeFromLog10(array, takeLog10OfOutput, false);
- }
-
- /**
- * See #normalizeFromLog10 but with the additional option to use an approximation that keeps the calculation always in log-space
- *
- * @param array
- * @param takeLog10OfOutput
- * @param keepInLogSpace
- *
- * @return
- */
- public static double[] normalizeFromLog10(double[] array, boolean takeLog10OfOutput, boolean keepInLogSpace) {
- // for precision purposes, we need to add (or really subtract, since they're
- // all negative) the largest value; also, we need to convert to normal-space.
- double maxValue = arrayMax(array);
-
- // we may decide to just normalize in log space without converting to linear space
- if (keepInLogSpace) {
- for (int i = 0; i < array.length; i++) {
- array[i] -= maxValue;
- }
- return array;
- }
-
- // default case: go to linear space
- double[] normalized = new double[array.length];
-
- for (int i = 0; i < array.length; i++)
- normalized[i] = Math.pow(10, array[i] - maxValue);
-
- // normalize
- double sum = 0.0;
- for (int i = 0; i < array.length; i++)
- sum += normalized[i];
- for (int i = 0; i < array.length; i++) {
- double x = normalized[i] / sum;
- if (takeLog10OfOutput) {
- x = Math.log10(x);
- if ( x < LOG10_P_OF_ZERO || Double.isInfinite(x) )
- x = array[i] - maxValue;
- }
-
- normalized[i] = x;
- }
-
- return normalized;
- }
-
- public static double arrayMax(final double[] array) {
- return array[maxElementIndex(array, array.length)];
- }
-
- public static int maxElementIndex(final double[] array) {
- return maxElementIndex(array, array.length);
- }
-
- public static int maxElementIndex(final double[] array, final int endIndex) {
- if (array == null || array.length == 0)
- throw new IllegalArgumentException("Array cannot be null!");
-
- int maxI = 0;
- for (int i = 1; i < endIndex; i++) {
- if (array[i] > array[maxI])
- maxI = i;
- }
-
- return maxI;
- }
-
- public static <T> List<T> cons(final T elt, final List<T> l) {
- List<T> l2 = new ArrayList<T>();
- l2.add(elt);
- if (l != null) l2.addAll(l);
- return l2;
- }
-
- /**
- * Make all combinations of N size of objects
- *
- * if objects = [A, B, C]
- * if N = 1 => [[A], [B], [C]]
- * if N = 2 => [[A, A], [B, A], [C, A], [A, B], [B, B], [C, B], [A, C], [B, C], [C, C]]
- *
- * @param objects
- * @param n
- * @param <T>
- * @param withReplacement if false, the resulting permutations will only contain unique objects from objects
- * @return
- */
- public static <T> List<List<T>> makePermutations(final List<T> objects, final int n, final boolean withReplacement) {
- final List<List<T>> combinations = new ArrayList<List<T>>();
-
- if ( n <= 0 )
- ;
- else if ( n == 1 ) {
- for ( final T o : objects )
- combinations.add(Collections.singletonList(o));
- } else {
- final List<List<T>> sub = makePermutations(objects, n - 1, withReplacement);
- for ( List<T> subI : sub ) {
- for ( final T a : objects ) {
- if ( withReplacement || ! subI.contains(a) )
- combinations.add(cons(a, subI));
- }
- }
- }
-
- return combinations;
- }
-
- /**
- * Compares double values for equality (within 1e-6), or inequality.
- *
- * @param a the first double value
- * @param b the second double value
- * @return -1 if a is greater than b, 0 if a is equal to be within 1e-6, 1 if b is greater than a.
- */
- public static byte compareDoubles(double a, double b) {
- return compareDoubles(a, b, 1e-6);
- }
-
- /**
- * Compares double values for equality (within epsilon), or inequality.
- *
- * @param a the first double value
- * @param b the second double value
- * @param epsilon the precision within which two double values will be considered equal
- * @return -1 if a is greater than b, 0 if a is equal to be within epsilon, 1 if b is greater than a.
- */
- public static byte compareDoubles(double a, double b, double epsilon) {
- if (Math.abs(a - b) < epsilon) {
- return 0;
- }
- if (a > b) {
- return -1;
- }
- return 1;
- }
-
- static public final <T> List<T> reverse(final List<T> l) {
- final List<T> newL = new ArrayList<T>(l);
- Collections.reverse(newL);
- return newL;
- }
-}
-
-
diff --git a/src/java/org/broadinstitute/variant/variantcontext/Allele.java b/src/java/org/broadinstitute/variant/variantcontext/Allele.java
deleted file mode 100644
index 0113923..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/Allele.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import net.sf.samtools.util.StringUtil;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-/**
- * Immutable representation of an allele
- *
- * Types of alleles:
- *
- * Ref: a t C g a // C is the reference base
- *
- * : a t G g a // C base is a G in some individuals
- *
- * : a t - g a // C base is deleted w.r.t. the reference
- *
- * : a t CAg a // A base is inserted w.r.t. the reference sequence
- *
- * In these cases, where are the alleles?
- *
- * SNP polymorphism of C/G -> { C , G } -> C is the reference allele
- * 1 base deletion of C -> { tC , t } -> C is the reference allele and we include the preceding reference base (null alleles are not allowed)
- * 1 base insertion of A -> { C ; CA } -> C is the reference allele (because null alleles are not allowed)
- *
- * Suppose I see a the following in the population:
- *
- * Ref: a t C g a // C is the reference base
- * : a t G g a // C base is a G in some individuals
- * : a t - g a // C base is deleted w.r.t. the reference
- *
- * How do I represent this? There are three segregating alleles:
- *
- * { C , G , - }
- *
- * and these are represented as:
- *
- * { tC, tG, t }
- *
- * Now suppose I have this more complex example:
- *
- * Ref: a t C g a // C is the reference base
- * : a t - g a
- * : a t - - a
- * : a t CAg a
- *
- * There are actually four segregating alleles:
- *
- * { Cg , -g, --, and CAg } over bases 2-4
- *
- * represented as:
- *
- * { tCg, tg, t, tCAg }
- *
- * Critically, it should be possible to apply an allele to a reference sequence to create the
- * correct haplotype sequence:
- *
- * Allele + reference => haplotype
- *
- * For convenience, we are going to create Alleles where the GenomeLoc of the allele is stored outside of the
- * Allele object itself. So there's an idea of an A/C polymorphism independent of it's surrounding context.
- *
- * Given list of alleles it's possible to determine the "type" of the variation
- *
- * A / C @ loc => SNP
- * - / A => INDEL
- *
- * If you know where allele is the reference, you can determine whether the variant is an insertion or deletion.
- *
- * Alelle also supports is concept of a NO_CALL allele. This Allele represents a haplotype that couldn't be
- * determined. This is usually represented by a '.' allele.
- *
- * Note that Alleles store all bases as bytes, in **UPPER CASE**. So 'atc' == 'ATC' from the perspective of an
- * Allele.
-
- * @author ebanks, depristo
- */
-public class Allele implements Comparable<Allele> {
- private static final byte[] EMPTY_ALLELE_BASES = new byte[0];
-
- private boolean isRef = false;
- private boolean isNoCall = false;
- private boolean isSymbolic = false;
-
- private byte[] bases = null;
-
- public final static String NO_CALL_STRING = ".";
- /** A generic static NO_CALL allele for use */
-
- // no public way to create an allele
- protected Allele(byte[] bases, boolean isRef) {
- // null alleles are no longer allowed
- if ( wouldBeNullAllele(bases) ) {
- throw new IllegalArgumentException("Null alleles are not supported");
- }
-
- // no-calls are represented as no bases
- if ( wouldBeNoCallAllele(bases) ) {
- this.bases = EMPTY_ALLELE_BASES;
- isNoCall = true;
- if ( isRef ) throw new IllegalArgumentException("Cannot tag a NoCall allele as the reference allele");
- return;
- }
-
- if ( wouldBeSymbolicAllele(bases) ) {
- isSymbolic = true;
- if ( isRef ) throw new IllegalArgumentException("Cannot tag a symbolic allele as the reference allele");
- }
- else {
- StringUtil.toUpperCase(bases);
- }
-
- this.isRef = isRef;
- this.bases = bases;
-
- if ( ! acceptableAlleleBases(bases) )
- throw new IllegalArgumentException("Unexpected base in allele bases \'" + new String(bases)+"\'");
- }
-
- protected Allele(String bases, boolean isRef) {
- this(bases.getBytes(), isRef);
- }
-
- /**
- * Creates a new allele based on the provided one. Ref state will be copied unless ignoreRefState is true
- * (in which case the returned allele will be non-Ref).
- *
- * This method is efficient because it can skip the validation of the bases (since the original allele was already validated)
- *
- * @param allele the allele from which to copy the bases
- * @param ignoreRefState should we ignore the reference state of the input allele and use the default ref state?
- */
- protected Allele(final Allele allele, final boolean ignoreRefState) {
- this.bases = allele.bases;
- this.isRef = ignoreRefState ? false : allele.isRef;
- this.isNoCall = allele.isNoCall;
- this.isSymbolic = allele.isSymbolic;
- }
-
-
- private final static Allele REF_A = new Allele("A", true);
- private final static Allele ALT_A = new Allele("A", false);
- private final static Allele REF_C = new Allele("C", true);
- private final static Allele ALT_C = new Allele("C", false);
- private final static Allele REF_G = new Allele("G", true);
- private final static Allele ALT_G = new Allele("G", false);
- private final static Allele REF_T = new Allele("T", true);
- private final static Allele ALT_T = new Allele("T", false);
- private final static Allele REF_N = new Allele("N", true);
- private final static Allele ALT_N = new Allele("N", false);
- public final static Allele NO_CALL = new Allele(NO_CALL_STRING, false);
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // creation routines
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * Create a new Allele that includes bases and if tagged as the reference allele if isRef == true. If bases
- * == '-', a Null allele is created. If bases == '.', a no call Allele is created.
- *
- * @param bases the DNA sequence of this variation, '-', of '.'
- * @param isRef should we make this a reference allele?
- * @throws IllegalArgumentException if bases contains illegal characters or is otherwise malformated
- */
- public static Allele create(byte[] bases, boolean isRef) {
- if ( bases == null )
- throw new IllegalArgumentException("create: the Allele base string cannot be null; use new Allele() or new Allele(\"\") to create a Null allele");
-
- if ( bases.length == 1 ) {
- // optimization to return a static constant Allele for each single base object
- switch (bases[0]) {
- case '.':
- if ( isRef ) throw new IllegalArgumentException("Cannot tag a NoCall allele as the reference allele");
- return NO_CALL;
- case 'A': case 'a' : return isRef ? REF_A : ALT_A;
- case 'C': case 'c' : return isRef ? REF_C : ALT_C;
- case 'G': case 'g' : return isRef ? REF_G : ALT_G;
- case 'T': case 't' : return isRef ? REF_T : ALT_T;
- case 'N': case 'n' : return isRef ? REF_N : ALT_N;
- default: throw new IllegalArgumentException("Illegal base [" + (char)bases[0] + "] seen in the allele");
- }
- } else {
- return new Allele(bases, isRef);
- }
- }
-
- public static Allele create(byte base, boolean isRef) {
- return create( new byte[]{ base }, isRef);
- }
-
- public static Allele create(byte base) {
- return create( base, false );
- }
-
- public static Allele extend(Allele left, byte[] right) {
- if (left.isSymbolic())
- throw new IllegalArgumentException("Cannot extend a symbolic allele");
- byte[] bases = new byte[left.length() + right.length];
- System.arraycopy(left.getBases(), 0, bases, 0, left.length());
- System.arraycopy(right, 0, bases, left.length(), right.length);
-
- return create(bases, left.isReference());
- }
-
- /**
- * @param bases bases representing an allele
- * @return true if the bases represent the null allele
- */
- public static boolean wouldBeNullAllele(byte[] bases) {
- return (bases.length == 1 && bases[0] == '-') || bases.length == 0;
- }
-
- /**
- * @param bases bases representing an allele
- * @return true if the bases represent the NO_CALL allele
- */
- public static boolean wouldBeNoCallAllele(byte[] bases) {
- return bases.length == 1 && bases[0] == '.';
- }
-
- /**
- * @param bases bases representing an allele
- * @return true if the bases represent a symbolic allele
- */
- public static boolean wouldBeSymbolicAllele(byte[] bases) {
- if ( bases.length <= 2 )
- return false;
- else {
- final String strBases = new String(bases);
- return (bases[0] == '<' && bases[bases.length-1] == '>') ||
- (strBases.contains("[") || strBases.contains("]"));
- }
- }
-
- /**
- * @param bases bases representing an allele
- * @return true if the bases represent the well formatted allele
- */
- public static boolean acceptableAlleleBases(String bases) {
- return acceptableAlleleBases(bases.getBytes(), true);
- }
-
- public static boolean acceptableAlleleBases(String bases, boolean allowNsAsAcceptable) {
- return acceptableAlleleBases(bases.getBytes(), allowNsAsAcceptable);
- }
-
- /**
- * @param bases bases representing an allele
- * @return true if the bases represent the well formatted allele
- */
- public static boolean acceptableAlleleBases(byte[] bases) {
- return acceptableAlleleBases(bases, true); // default: N bases are acceptable
- }
-
- public static boolean acceptableAlleleBases(byte[] bases, boolean allowNsAsAcceptable) {
- if ( wouldBeNullAllele(bases) )
- return false;
-
- if ( wouldBeNoCallAllele(bases) || wouldBeSymbolicAllele(bases) )
- return true;
-
- for (byte base : bases ) {
- switch (base) {
- case 'A': case 'C': case 'G': case 'T': case 'a': case 'c': case 'g': case 't':
- break;
- case 'N' : case 'n' :
- if (allowNsAsAcceptable)
- break;
- else
- return false;
- default:
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * @see Allele(byte[], boolean)
- *
- * @param bases bases representing an allele
- * @param isRef is this the reference allele?
- */
- public static Allele create(String bases, boolean isRef) {
- return create(bases.getBytes(), isRef);
- }
-
-
- /**
- * Creates a non-Ref allele. @see Allele(byte[], boolean) for full information
- *
- * @param bases bases representing an allele
- */
- public static Allele create(String bases) {
- return create(bases, false);
- }
-
- /**
- * Creates a non-Ref allele. @see Allele(byte[], boolean) for full information
- *
- * @param bases bases representing an allele
- */
- public static Allele create(byte[] bases) {
- return create(bases, false);
- }
-
- /**
- * Creates a new allele based on the provided one. Ref state will be copied unless ignoreRefState is true
- * (in which case the returned allele will be non-Ref).
- *
- * This method is efficient because it can skip the validation of the bases (since the original allele was already validated)
- *
- * @param allele the allele from which to copy the bases
- * @param ignoreRefState should we ignore the reference state of the input allele and use the default ref state?
- */
- public static Allele create(final Allele allele, final boolean ignoreRefState) {
- return new Allele(allele, ignoreRefState);
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // accessor routines
- //
- // ---------------------------------------------------------------------------------------------------------
-
- // Returns true if this is the NO_CALL allele
- public boolean isNoCall() { return isNoCall; }
- // Returns true if this is not the NO_CALL allele
- public boolean isCalled() { return ! isNoCall(); }
-
- // Returns true if this Allele is the reference allele
- public boolean isReference() { return isRef; }
- // Returns true if this Allele is not the reference allele
- public boolean isNonReference() { return ! isReference(); }
-
- // Returns true if this Allele is symbolic (i.e. no well-defined base sequence)
- public boolean isSymbolic() { return isSymbolic; }
-
- // Returns a nice string representation of this object
- public String toString() {
- return ( isNoCall() ? NO_CALL_STRING : getDisplayString() ) + (isReference() ? "*" : "");
- }
-
- /**
- * Return the DNA bases segregating in this allele. Note this isn't reference polarized,
- * so the Null allele is represented by a vector of length 0
- *
- * @return the segregating bases
- */
- public byte[] getBases() { return isSymbolic ? EMPTY_ALLELE_BASES : bases; }
-
- /**
- * Return the DNA bases segregating in this allele in String format.
- * This is useful, because toString() adds a '*' to reference alleles and getBases() returns garbage when you call toString() on it.
- *
- * @return the segregating bases
- */
- public String getBaseString() { return isNoCall() ? NO_CALL_STRING : new String(getBases()); }
-
- /**
- * Return the printed representation of this allele.
- * Same as getBaseString(), except for symbolic alleles.
- * For symbolic alleles, the base string is empty while the display string contains <TAG>.
- *
- * @return the allele string representation
- */
- public String getDisplayString() { return new String(bases); }
-
- /**
- * Same as #getDisplayString() but returns the result as byte[].
- *
- * Slightly faster then getDisplayString()
- *
- * @return the allele string representation
- */
- public byte[] getDisplayBases() { return bases; }
-
- /**
- * @param other the other allele
- *
- * @return true if these alleles are equal
- */
- public boolean equals(Object other) {
- return ( ! (other instanceof Allele) ? false : equals((Allele)other, false) );
- }
-
- /**
- * @return hash code
- */
- public int hashCode() {
- int hash = 1;
- for (int i = 0; i < bases.length; i++)
- hash += (i+1) * bases[i];
- return hash;
- }
-
- /**
- * Returns true if this and other are equal. If ignoreRefState is true, then doesn't require both alleles has the
- * same ref tag
- *
- * @param other allele to compare to
- * @param ignoreRefState if true, ignore ref state in comparison
- * @return true if this and other are equal
- */
- public boolean equals(Allele other, boolean ignoreRefState) {
- return this == other || (isRef == other.isRef || ignoreRefState) && isNoCall == other.isNoCall && (bases == other.bases || Arrays.equals(bases, other.bases));
- }
-
- /**
- * @param test bases to test against
- *
- * @return true if this Allele contains the same bases as test, regardless of its reference status; handles Null and NO_CALL alleles
- */
- public boolean basesMatch(byte[] test) { return !isSymbolic && (bases == test || Arrays.equals(bases, test)); }
-
- /**
- * @param test bases to test against
- *
- * @return true if this Allele contains the same bases as test, regardless of its reference status; handles Null and NO_CALL alleles
- */
- public boolean basesMatch(String test) { return basesMatch(test.toUpperCase().getBytes()); }
-
- /**
- * @param test allele to test against
- *
- * @return true if this Allele contains the same bases as test, regardless of its reference status; handles Null and NO_CALL alleles
- */
- public boolean basesMatch(Allele test) { return basesMatch(test.getBases()); }
-
- /**
- * @return the length of this allele. Null and NO_CALL alleles have 0 length.
- */
- public int length() {
- return isSymbolic ? 0 : bases.length;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // useful static functions
- //
- // ---------------------------------------------------------------------------------------------------------
-
- public static Allele getMatchingAllele(Collection<Allele> allAlleles, byte[] alleleBases) {
- for ( Allele a : allAlleles ) {
- if ( a.basesMatch(alleleBases) ) {
- return a;
- }
- }
-
- if ( wouldBeNoCallAllele(alleleBases) )
- return NO_CALL;
- else
- return null; // couldn't find anything
- }
-
- public int compareTo(Allele other) {
- if ( isReference() && other.isNonReference() )
- return -1;
- else if ( isNonReference() && other.isReference() )
- return 1;
- else
- return getBaseString().compareTo(other.getBaseString()); // todo -- potential performance issue
- }
-
- public static boolean oneIsPrefixOfOther(Allele a1, Allele a2) {
- if ( a2.length() >= a1.length() )
- return firstIsPrefixOfSecond(a1, a2);
- else
- return firstIsPrefixOfSecond(a2, a1);
- }
-
- private static boolean firstIsPrefixOfSecond(Allele a1, Allele a2) {
- String a1String = a1.getBaseString();
- return a2.getBaseString().substring(0, a1String.length()).equals(a1String);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/CommonInfo.java b/src/java/org/broadinstitute/variant/variantcontext/CommonInfo.java
deleted file mode 100644
index 16fa52e..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/CommonInfo.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-import org.broadinstitute.variant.vcf.VCFConstants;
-
-import java.util.*;
-
-
-/**
- * Common utility routines for VariantContext and Genotype
- *
- * @author depristo
- */
-public final class CommonInfo {
- public static final double NO_LOG10_PERROR = 1.0;
-
- private static Set<String> NO_FILTERS = Collections.emptySet();
- private static Map<String, Object> NO_ATTRIBUTES = Collections.unmodifiableMap(new HashMap<String, Object>());
-
- private double log10PError = NO_LOG10_PERROR;
- private String name = null;
- private Set<String> filters = null;
- private Map<String, Object> attributes = NO_ATTRIBUTES;
-
- public CommonInfo(String name, double log10PError, Set<String> filters, Map<String, Object> attributes) {
- this.name = name;
- setLog10PError(log10PError);
- this.filters = filters;
- if ( attributes != null && ! attributes.isEmpty() ) {
- this.attributes = attributes;
- }
- }
-
- /**
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * Sets the name
- *
- * @param name the name associated with this information
- */
- public void setName(String name) {
- if ( name == null ) throw new IllegalArgumentException("Name cannot be null " + this);
- this.name = name;
- }
-
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Filter
- //
- // ---------------------------------------------------------------------------------------------------------
-
- public Set<String> getFiltersMaybeNull() {
- return filters;
- }
-
- public Set<String> getFilters() {
- return filters == null ? NO_FILTERS : Collections.unmodifiableSet(filters);
- }
-
- public boolean filtersWereApplied() {
- return filters != null;
- }
-
- public boolean isFiltered() {
- return filters == null ? false : filters.size() > 0;
- }
-
- public boolean isNotFiltered() {
- return ! isFiltered();
- }
-
- public void addFilter(String filter) {
- if ( filters == null ) // immutable -> mutable
- filters = new HashSet<String>();
-
- if ( filter == null ) throw new IllegalArgumentException("BUG: Attempting to add null filter " + this);
- if ( getFilters().contains(filter) ) throw new IllegalArgumentException("BUG: Attempting to add duplicate filter " + filter + " at " + this);
- filters.add(filter);
- }
-
- public void addFilters(Collection<String> filters) {
- if ( filters == null ) throw new IllegalArgumentException("BUG: Attempting to add null filters at" + this);
- for ( String f : filters )
- addFilter(f);
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Working with log error rates
- //
- // ---------------------------------------------------------------------------------------------------------
-
- public boolean hasLog10PError() {
- return getLog10PError() != NO_LOG10_PERROR;
- }
-
- /**
- * @return the -1 * log10-based error estimate
- */
- public double getLog10PError() { return log10PError; }
- public double getPhredScaledQual() { return getLog10PError() * -10; }
-
- public void setLog10PError(double log10PError) {
- if ( log10PError > 0 && log10PError != NO_LOG10_PERROR)
- throw new IllegalArgumentException("BUG: log10PError cannot be > 0 : " + this.log10PError);
- if ( Double.isInfinite(this.log10PError) )
- throw new IllegalArgumentException("BUG: log10PError should not be Infinity");
- if ( Double.isNaN(this.log10PError) )
- throw new IllegalArgumentException("BUG: log10PError should not be NaN");
- this.log10PError = log10PError;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Working with attributes
- //
- // ---------------------------------------------------------------------------------------------------------
- public void clearAttributes() {
- attributes = new HashMap<String, Object>();
- }
-
- /**
- * @return the attribute map
- */
- public Map<String, Object> getAttributes() {
- return Collections.unmodifiableMap(attributes);
- }
-
- // todo -- define common attributes as enum
-
- public void setAttributes(Map<String, ?> map) {
- clearAttributes();
- putAttributes(map);
- }
-
- public void putAttribute(String key, Object value) {
- putAttribute(key, value, false);
- }
-
- public void putAttribute(String key, Object value, boolean allowOverwrites) {
- if ( ! allowOverwrites && hasAttribute(key) )
- throw new IllegalStateException("Attempting to overwrite key->value binding: key = " + key + " this = " + this);
-
- if ( attributes == NO_ATTRIBUTES ) // immutable -> mutable
- attributes = new HashMap<String, Object>();
-
- attributes.put(key, value);
- }
-
- public void removeAttribute(String key) {
- if ( attributes == NO_ATTRIBUTES ) // immutable -> mutable
- attributes = new HashMap<String, Object>();
- attributes.remove(key);
- }
-
- public void putAttributes(Map<String, ?> map) {
- if ( map != null ) {
- // for efficiency, we can skip the validation if the map is empty
- if ( attributes.size() == 0 ) {
- if ( attributes == NO_ATTRIBUTES ) // immutable -> mutable
- attributes = new HashMap<String, Object>();
- attributes.putAll(map);
- } else {
- for ( Map.Entry<String, ?> elt : map.entrySet() ) {
- putAttribute(elt.getKey(), elt.getValue(), false);
- }
- }
- }
- }
-
- public boolean hasAttribute(String key) {
- return attributes.containsKey(key);
- }
-
- public int getNumAttributes() {
- return attributes.size();
- }
-
- /**
- * @param key the attribute key
- *
- * @return the attribute value for the given key (or null if not set)
- */
- public Object getAttribute(String key) {
- return attributes.get(key);
- }
-
- public Object getAttribute(String key, Object defaultValue) {
- if ( hasAttribute(key) )
- return attributes.get(key);
- else
- return defaultValue;
- }
-
- public String getAttributeAsString(String key, String defaultValue) {
- Object x = getAttribute(key);
- if ( x == null ) return defaultValue;
- if ( x instanceof String ) return (String)x;
- return String.valueOf(x); // throws an exception if this isn't a string
- }
-
- public int getAttributeAsInt(String key, int defaultValue) {
- Object x = getAttribute(key);
- if ( x == null || x == VCFConstants.MISSING_VALUE_v4 ) return defaultValue;
- if ( x instanceof Integer ) return (Integer)x;
- return Integer.valueOf((String)x); // throws an exception if this isn't a string
- }
-
- public double getAttributeAsDouble(String key, double defaultValue) {
- Object x = getAttribute(key);
- if ( x == null ) return defaultValue;
- if ( x instanceof Double ) return (Double)x;
- if ( x instanceof Integer ) return (Integer)x;
- return Double.valueOf((String)x); // throws an exception if this isn't a string
- }
-
- public boolean getAttributeAsBoolean(String key, boolean defaultValue) {
- Object x = getAttribute(key);
- if ( x == null ) return defaultValue;
- if ( x instanceof Boolean ) return (Boolean)x;
- return Boolean.valueOf((String)x); // throws an exception if this isn't a string
- }
-
-// public String getAttributeAsString(String key) { return (String.valueOf(getExtendedAttribute(key))); } // **NOTE**: will turn a null Object into the String "null"
-// public int getAttributeAsInt(String key) { Object x = getExtendedAttribute(key); return x instanceof Integer ? (Integer)x : Integer.valueOf((String)x); }
-// public double getAttributeAsDouble(String key) { Object x = getExtendedAttribute(key); return x instanceof Double ? (Double)x : Double.valueOf((String)x); }
-// public boolean getAttributeAsBoolean(String key) { Object x = getExtendedAttribute(key); return x instanceof Boolean ? (Boolean)x : Boolean.valueOf((String)x); }
-// public Integer getAttributeAsIntegerNoException(String key) { try {return getAttributeAsInt(key);} catch (Exception e) {return null;} }
-// public Double getAttributeAsDoubleNoException(String key) { try {return getAttributeAsDouble(key);} catch (Exception e) {return null;} }
-// public String getAttributeAsStringNoException(String key) { if (getExtendedAttribute(key) == null) return null; return getAttributeAsString(key); }
-// public Boolean getAttributeAsBooleanNoException(String key) { try {return getAttributeAsBoolean(key);} catch (Exception e) {return null;} }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/FastGenotype.java b/src/java/org/broadinstitute/variant/variantcontext/FastGenotype.java
deleted file mode 100644
index 2ed8914..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/FastGenotype.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-import com.google.java.contract.Requires;
-
-import java.util.*;
-
-/**
- * This class encompasses all the basic information about a genotype. It is immutable.
- *
- * A genotype has several key fields
- *
- * -- a sample name, must be a non-null string
- *
- * -- an ordered list of alleles, intrepreted as the genotype of the sample,
- * each allele for each chromosome given in order. If alleles = [a*, t]
- * then the sample is a/t, with a (the reference from the *) the first
- * chromosome and t on the second chromosome
- *
- * -- a isPhased marker indicting where the alleles are phased with respect to some global
- * coordinate system. See VCF4.1 spec for a detailed discussion
- *
- * -- Inline, optimized ints and int[] values for:
- * -- GQ: the phred-scaled genotype quality, of -1 if it's missing
- *
- * -- DP: the count of reads at this locus for this sample, of -1 if missing
- *
- * -- AD: an array of counts of reads at this locus, one for each Allele at the site.
- * that is, for each allele in the surrounding VariantContext. Null if missing.
- *
- * -- PL: phred-scaled genotype likelihoods in standard VCF4.1 order for
- * all combinations of the alleles in the surrounding VariantContext, given
- * the ploidy of the sample (from the alleles vector). Null if missing.
- *
- * -- A general map from String keys to -> Object values for all other attributes in
- * this genotype. Note that this map should not contain duplicate values for the
- * standard bindings for GQ, DP, AD, and PL. Genotype filters can be put into
- * this genotype, but it isn't respected by the GATK in analyses
- *
- * The only way to build a Genotype object is with a GenotypeBuilder, which permits values
- * to be set in any order, which means that GenotypeBuilder may at some in the chain of
- * sets pass through invalid states that are not permitted in a fully formed immutable
- * Genotype.
- *
- * Note this is a simplified, refactored Genotype object based on the original
- * generic (and slow) implementation from the original VariantContext + Genotype
- * codebase.
- *
- * @author Mark DePristo
- * @since 05/12
- */
-public final class FastGenotype extends Genotype {
- private final List<Allele> alleles;
- private final boolean isPhased;
- private final int GQ;
- private final int DP;
- private final int[] AD;
- private final int[] PL;
- private final Map<String, Object> extendedAttributes;
-
- /**
- * The only way to make one of these, for use by GenotypeBuilder only
- *
- * @param sampleName
- * @param alleles
- * @param isPhased
- * @param GQ
- * @param DP
- * @param AD
- * @param PL
- * @param extendedAttributes
- */
- @Requires({
- "sampleName != null",
- "alleles != null",
- "GQ >= -1",
- "DP >= -1",
- "validADorPLField(AD)",
- "validADorPLField(PL)",
- "extendedAttributes != null",
- "! hasForbiddenKey(extendedAttributes)"})
- protected FastGenotype(final String sampleName,
- final List<Allele> alleles,
- final boolean isPhased,
- final int GQ,
- final int DP,
- final int[] AD,
- final int[] PL,
- final String filters,
- final Map<String, Object> extendedAttributes) {
- super(sampleName, filters);
- this.alleles = alleles;
- this.isPhased = isPhased;
- this.GQ = GQ;
- this.DP = DP;
- this.AD = AD;
- this.PL = PL;
- this.extendedAttributes = extendedAttributes;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Implmenting the abstract methods
- //
- // ---------------------------------------------------------------------------------------------------------
-
- @Override public List<Allele> getAlleles() {
- return alleles;
- }
-
- @Override public Allele getAllele(int i) {
- return alleles.get(i);
- }
-
- @Override public boolean isPhased() {
- return isPhased;
- }
-
- @Override public int getDP() {
- return DP;
- }
-
- @Override public int[] getAD() {
- return AD;
- }
-
- @Override public int getGQ() {
- return GQ;
- }
-
- @Override public int[] getPL() {
- return PL;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // get routines for extended attributes
- //
- // ---------------------------------------------------------------------------------------------------------
-
- public Map<String, Object> getExtendedAttributes() {
- return extendedAttributes;
- }
-
- /**
- * Is values a valid AD or PL field
- * @param values
- * @return
- */
- private static boolean validADorPLField(final int[] values) {
- if ( values != null )
- for ( int v : values )
- if ( v < 0 )
- return false;
- return true;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/Genotype.java b/src/java/org/broadinstitute/variant/variantcontext/Genotype.java
deleted file mode 100644
index 3695c39..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/Genotype.java
+++ /dev/null
@@ -1,676 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Invariant;
-import com.google.java.contract.Requires;
-import org.broad.tribble.util.ParsingUtils;
-import org.broadinstitute.variant.vcf.VCFConstants;
-
-import java.util.*;
-
-/**
- * This class encompasses all the basic information about a genotype. It is immutable.
- *
- * @author Mark DePristo
- */
- at Invariant({
- "getAlleles() != null",
- "getSampleName() != null",
- "getPloidy() >= 0",
- "! hasForbiddenKey(getExtendedAttributes())"})
-public abstract class Genotype implements Comparable<Genotype> {
- /**
- * A list of genotype field keys corresponding to values we
- * manage inline in the Genotype object. They must not appear in the
- * extended attributes map
- */
- public final static Collection<String> PRIMARY_KEYS = Arrays.asList(
- VCFConstants.GENOTYPE_FILTER_KEY,
- VCFConstants.GENOTYPE_KEY,
- VCFConstants.GENOTYPE_QUALITY_KEY,
- VCFConstants.DEPTH_KEY,
- VCFConstants.GENOTYPE_ALLELE_DEPTHS,
- VCFConstants.GENOTYPE_PL_KEY);
-
- public final static String PHASED_ALLELE_SEPARATOR = "|";
- public final static String UNPHASED_ALLELE_SEPARATOR = "/";
-
- private final String sampleName;
- private GenotypeType type = null;
- private final String filters;
-
- protected Genotype(final String sampleName, final String filters) {
- this.sampleName = sampleName;
- this.filters = filters;
- }
-
- /**
- * @return the alleles for this genotype. Cannot be null. May be empty
- */
- @Ensures("result != null")
- public abstract List<Allele> getAlleles();
-
- /**
- * Returns how many times allele appears in this genotype object?
- *
- * @param allele
- * @return a value >= 0 indicating how many times the allele occurred in this sample's genotype
- */
- @Requires("allele != null")
- @Ensures("result >= 0")
- public int countAllele(final Allele allele) {
- int c = 0;
- for ( final Allele a : getAlleles() )
- if ( a.equals(allele) )
- c++;
-
- return c;
- }
-
- /**
- * Get the ith allele in this genotype
- *
- * @param i the ith allele, must be < the ploidy, starting with 0
- * @return the allele at position i, which cannot be null
- */
- @Requires({"i >=0 && i < getPloidy()", "getType() != GenotypeType.UNAVAILABLE"})
- @Ensures("result != null")
- public abstract Allele getAllele(int i);
-
- /**
- * Are the alleles phased w.r.t. the global phasing system?
- *
- * @return true if yes
- */
- public abstract boolean isPhased();
-
- /**
- * What is the ploidy of this sample?
- *
- * @return the ploidy of this genotype. 0 if the site is no-called.
- */
- @Ensures("result >= 0")
- public int getPloidy() {
- return getAlleles().size();
- }
-
- /**
- * @return the sequencing depth of this sample, or -1 if this value is missing
- */
- @Ensures("result >= -1")
- public abstract int getDP();
-
- /**
- * @return the count of reads, one for each allele in the surrounding Variant context,
- * matching the corresponding allele, or null if this value is missing. MUST
- * NOT BE MODIFIED!
- */
- public abstract int[] getAD();
-
- /**
- * Returns the name associated with this sample.
- *
- * @return a non-null String
- */
- @Ensures("result != null")
- public String getSampleName() {
- return sampleName;
- }
-
- /**
- * Returns a phred-scaled quality score, or -1 if none is available
- * @return
- */
- @Ensures("result >= -1")
- public abstract int getGQ();
-
- /**
- * Does the PL field have a value?
- * @return true if there's a PL field value
- */
- @Ensures("(result == false && getPL() == null) || (result == true && getPL() != null)")
- public boolean hasPL() {
- return getPL() != null;
- }
-
- /**
- * Does the AD field have a value?
- * @return true if there's a AD field value
- */
- @Ensures("(result == false && getAD() == null) || (result == true && getAD() != null)")
- public boolean hasAD() {
- return getAD() != null;
- }
-
- /**
- * Does the GQ field have a value?
- * @return true if there's a GQ field value
- */
- @Ensures("(result == false && getGQ() == -1) || (result == true && getGQ() >= 0)")
- public boolean hasGQ() {
- return getGQ() != -1;
- }
-
- /**
- * Does the DP field have a value?
- * @return true if there's a DP field value
- */
- @Ensures("(result == false && getDP() == -1) || (result == true && getDP() >= 0)")
- public boolean hasDP() {
- return getDP() != -1;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // The type of this genotype
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * @return the high-level type of this sample's genotype
- */
- @Ensures({"type != null", "result != null"})
- public GenotypeType getType() {
- if ( type == null ) {
- type = determineType();
- }
- return type;
- }
-
- /**
- * Internal code to determine the type of the genotype from the alleles vector
- * @return the type
- */
- @Requires("type == null") // we should never call if already calculated
- protected GenotypeType determineType() {
- // TODO -- this code is slow and could be optimized for the diploid case
- final List<Allele> alleles = getAlleles();
- if ( alleles.isEmpty() )
- return GenotypeType.UNAVAILABLE;
-
- boolean sawNoCall = false, sawMultipleAlleles = false;
- Allele observedAllele = null;
-
- for ( final Allele allele : alleles ) {
- if ( allele.isNoCall() )
- sawNoCall = true;
- else if ( observedAllele == null )
- observedAllele = allele;
- else if ( !allele.equals(observedAllele) )
- sawMultipleAlleles = true;
- }
-
- if ( sawNoCall ) {
- if ( observedAllele == null )
- return GenotypeType.NO_CALL;
- return GenotypeType.MIXED;
- }
-
- if ( observedAllele == null )
- throw new IllegalStateException("BUG: there are no alleles present in this genotype but the alleles list is not null");
-
- return sawMultipleAlleles ? GenotypeType.HET : observedAllele.isReference() ? GenotypeType.HOM_REF : GenotypeType.HOM_VAR;
- }
-
- /**
- * @return true if all observed alleles are the same (regardless of whether they are ref or alt); if any alleles are no-calls, this method will return false.
- */
- public boolean isHom() { return isHomRef() || isHomVar(); }
-
- /**
- * @return true if all observed alleles are ref; if any alleles are no-calls, this method will return false.
- */
- public boolean isHomRef() { return getType() == GenotypeType.HOM_REF; }
-
- /**
- * @return true if all observed alleles are alt; if any alleles are no-calls, this method will return false.
- */
- public boolean isHomVar() { return getType() == GenotypeType.HOM_VAR; }
-
- /**
- * @return true if we're het (observed alleles differ); if the ploidy is less than 2 or if any alleles are no-calls, this method will return false.
- */
- public boolean isHet() { return getType() == GenotypeType.HET; }
-
- /**
- * @return true if this genotype is not actually a genotype but a "no call" (e.g. './.' in VCF); if any alleles are not no-calls (even if some are), this method will return false.
- */
- public boolean isNoCall() { return getType() == GenotypeType.NO_CALL; }
-
- /**
- * @return true if this genotype is comprised of any alleles that are not no-calls (even if some are).
- */
- public boolean isCalled() { return getType() != GenotypeType.NO_CALL && getType() != GenotypeType.UNAVAILABLE; }
-
- /**
- * @return true if this genotype is comprised of both calls and no-calls.
- */
- public boolean isMixed() { return getType() == GenotypeType.MIXED; }
-
- /**
- * @return true if the type of this genotype is set.
- */
- public boolean isAvailable() { return getType() != GenotypeType.UNAVAILABLE; }
-
- // ------------------------------------------------------------------------------
- //
- // methods for getting genotype likelihoods for a genotype object, if present
- //
- // ------------------------------------------------------------------------------
-
- /**
- * @return Returns true if this Genotype has PL field values
- */
- @Ensures("(result && getLikelihoods() != null) || (! result && getLikelihoods() == null)")
- public boolean hasLikelihoods() {
- return getPL() != null;
- }
-
- /**
- * Convenience function that returns a string representation of the PL field of this
- * genotype, or . if none is available.
- *
- * @return a non-null String representation for the PL of this sample
- */
- @Ensures("result != null")
- public String getLikelihoodsString() {
- return hasLikelihoods() ? getLikelihoods().toString() : VCFConstants.MISSING_VALUE_v4;
- }
-
- /**
- * Returns the GenotypesLikelihoods data associated with this Genotype, or null if missing
- * @return null or a GenotypesLikelihood object for this sample's PL field
- */
- @Ensures("(hasLikelihoods() && result != null) || (! hasLikelihoods() && result == null)")
- public GenotypeLikelihoods getLikelihoods() {
- return hasLikelihoods() ? GenotypeLikelihoods.fromPLs(getPL()) : null;
- }
-
- /**
- * Are all likelihoods for this sample non-informative?
- *
- * Returns true if all PLs are 0 => 0,0,0 => true
- * 0,0,0,0,0,0 => true
- * 0,10,100 => false
- *
- * @return true if all samples PLs are equal and == 0
- */
- public boolean isNonInformative() {
- if ( getPL() == null )
- return true;
- else {
- for ( final int PL : getPL() ) {
- if ( PL != 0 )
- return false;
- }
-
- return true;
- }
- }
-
- /**
- * Unsafe low-level accessor the PL field itself, may be null.
- *
- * @return a pointer to the underlying PL data. MUST NOT BE MODIFIED!
- */
- public abstract int[] getPL();
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Many different string representations
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * Return a VCF-like string representation for the alleles of this genotype.
- *
- * Does not append the reference * marker on the alleles.
- *
- * @return a string representing the genotypes, or null if the type is unavailable.
- */
- @Ensures("result != null || ! isAvailable()")
- public String getGenotypeString() {
- return getGenotypeString(true);
- }
-
- /**
- * Return a VCF-like string representation for the alleles of this genotype.
- *
- * If ignoreRefState is true, will not append the reference * marker on the alleles.
- *
- * @return a string representing the genotypes, or null if the type is unavailable.
- */
- @Ensures("result != null || ! isAvailable()")
- public String getGenotypeString(boolean ignoreRefState) {
- if ( getPloidy() == 0 )
- return "NA";
-
- // Notes:
- // 1. Make sure to use the appropriate separator depending on whether the genotype is phased
- // 2. If ignoreRefState is true, then we want just the bases of the Alleles (ignoring the '*' indicating a ref Allele)
- // 3. So that everything is deterministic with regards to integration tests, we sort Alleles (when the genotype isn't phased, of course)
- return ParsingUtils.join(isPhased() ? PHASED_ALLELE_SEPARATOR : UNPHASED_ALLELE_SEPARATOR,
- ignoreRefState ? getAlleleStrings() : (isPhased() ? getAlleles() : ParsingUtils.sortList(getAlleles())));
- }
-
- /**
- * Utility that returns a list of allele strings corresponding to the alleles in this sample
- * @return
- */
- protected List<String> getAlleleStrings() {
- final List<String> al = new ArrayList<String>(getPloidy());
- for ( Allele a : getAlleles() )
- al.add(a.getBaseString());
-
- return al;
- }
-
- public String toString() {
- return String.format("[%s %s%s%s%s%s%s%s]",
- getSampleName(),
- getGenotypeString(false),
- toStringIfExists(VCFConstants.GENOTYPE_QUALITY_KEY, getGQ()),
- toStringIfExists(VCFConstants.DEPTH_KEY, getDP()),
- toStringIfExists(VCFConstants.GENOTYPE_ALLELE_DEPTHS, getAD()),
- toStringIfExists(VCFConstants.GENOTYPE_PL_KEY, getPL()),
- toStringIfExists(VCFConstants.GENOTYPE_FILTER_KEY, getFilters()),
- sortedString(getExtendedAttributes()));
- }
-
- public String toBriefString() {
- return String.format("%s:Q%d", getGenotypeString(false), getGQ());
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Comparison operations
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * comparable genotypes -> compareTo on the sample names
- * @param genotype
- * @return
- */
- @Override
- public int compareTo(final Genotype genotype) {
- return getSampleName().compareTo(genotype.getSampleName());
- }
-
- public boolean sameGenotype(final Genotype other) {
- return sameGenotype(other, true);
- }
-
- public boolean sameGenotype(final Genotype other, boolean ignorePhase) {
- if (getPloidy() != other.getPloidy())
- return false; // gotta have the same number of allele to be equal
-
- // By default, compare the elements in the lists of alleles, element-by-element
- Collection<Allele> thisAlleles = this.getAlleles();
- Collection<Allele> otherAlleles = other.getAlleles();
-
- if (ignorePhase) { // do not care about order, only identity of Alleles
- thisAlleles = new TreeSet<Allele>(thisAlleles); //implemented Allele.compareTo()
- otherAlleles = new TreeSet<Allele>(otherAlleles);
- }
-
- return thisAlleles.equals(otherAlleles);
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // get routines for extended attributes
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * Returns the extended attributes for this object
- * @return is never null, but is often isEmpty()
- */
- @Ensures({"result != null", "! hasForbiddenKey(result)"})
- public abstract Map<String, Object> getExtendedAttributes();
-
- /**
- * Is key associated with a value (even a null one) in the extended attributes?
- *
- * Note this will not return true for the inline attributes DP, GQ, AD, or PL
- *
- * @param key a non-null string key to check for an association
- * @return true if key has a value in the extendedAttributes
- */
- @Requires({"key != null", "! isForbiddenKey(key)"})
- public boolean hasExtendedAttribute(final String key) {
- return getExtendedAttributes().containsKey(key);
- }
-
- /**
- * Get the extended attribute value associated with key, if possible
- *
- * @param key a non-null string key to fetch a value for
- * @param defaultValue the value to return if key isn't in the extended attributes
- * @return a value (potentially) null associated with key, or defaultValue if no association exists
- */
- @Requires({"key != null", "! isForbiddenKey(key)"})
- @Ensures("hasExtendedAttribute(key) || result == defaultValue")
- public Object getExtendedAttribute(final String key, final Object defaultValue) {
- return hasExtendedAttribute(key) ? getExtendedAttributes().get(key) : defaultValue;
- }
-
- /**
- * Same as #getExtendedAttribute with a null default
- *
- * @param key
- * @return
- */
- public Object getExtendedAttribute(final String key) {
- return getExtendedAttribute(key, null);
- }
-
- /**
- * Returns the filter string associated with this Genotype.
- *
- * @return If this result == null, then the genotype is considered PASSing filters
- * If the result != null, then the genotype has failed filtering for the reason(s)
- * specified in result. To be reference compliant multiple filter field
- * string values can be encoded with a ; separator.
- */
- public final String getFilters() {
- return filters;
- }
-
- /**
- * Is this genotype filtered or not?
- *
- * @return returns false if getFilters() == null
- */
- @Ensures({"result != (getFilters() == null)"})
- public final boolean isFiltered() {
- return getFilters() != null;
- }
-
- @Deprecated public boolean hasLog10PError() { return hasGQ(); }
- @Deprecated public double getLog10PError() { return getGQ() / -10.0; }
- @Deprecated public int getPhredScaledQual() { return getGQ(); }
-
- @Deprecated
- public String getAttributeAsString(String key, String defaultValue) {
- Object x = getExtendedAttribute(key);
- if ( x == null ) return defaultValue;
- if ( x instanceof String ) return (String)x;
- return String.valueOf(x); // throws an exception if this isn't a string
- }
-
- @Deprecated
- public int getAttributeAsInt(String key, int defaultValue) {
- Object x = getExtendedAttribute(key);
- if ( x == null || x == VCFConstants.MISSING_VALUE_v4 ) return defaultValue;
- if ( x instanceof Integer ) return (Integer)x;
- return Integer.valueOf((String)x); // throws an exception if this isn't a string
- }
-
- @Deprecated
- public double getAttributeAsDouble(String key, double defaultValue) {
- Object x = getExtendedAttribute(key);
- if ( x == null ) return defaultValue;
- if ( x instanceof Double ) return (Double)x;
- return Double.valueOf((String)x); // throws an exception if this isn't a string
- }
-
- /**
- * A totally generic getter, that allows you to specific keys that correspond
- * to even inline values (GQ, for example). Can be very expensive. Additionally,
- * all int[] are converted inline into List<Integer> for convenience.
- *
- * @param key
- * @return
- */
- public Object getAnyAttribute(final String key) {
- if (key.equals(VCFConstants.GENOTYPE_KEY)) {
- return getAlleles();
- } else if (key.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) {
- return getGQ();
- } else if (key.equals(VCFConstants.GENOTYPE_ALLELE_DEPTHS)) {
- return Arrays.asList(getAD());
- } else if (key.equals(VCFConstants.GENOTYPE_PL_KEY)) {
- return Arrays.asList(getPL());
- } else if (key.equals(VCFConstants.DEPTH_KEY)) {
- return getDP();
- } else {
- return getExtendedAttribute(key);
- }
- }
-
- public boolean hasAnyAttribute(final String key) {
- if (key.equals(VCFConstants.GENOTYPE_KEY)) {
- return isAvailable();
- } else if (key.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) {
- return hasGQ();
- } else if (key.equals(VCFConstants.GENOTYPE_ALLELE_DEPTHS)) {
- return hasAD();
- } else if (key.equals(VCFConstants.GENOTYPE_PL_KEY)) {
- return hasPL();
- } else if (key.equals(VCFConstants.DEPTH_KEY)) {
- return hasDP();
- } else {
- return hasExtendedAttribute(key);
- }
- }
-
- // TODO -- add getAttributesAsX interface here
-
- // ------------------------------------------------------------------------------
- //
- // private utilities
- //
- // ------------------------------------------------------------------------------
-
- /**
- * a utility method for generating sorted strings from a map key set.
- * @param c the map
- * @param <T> the key type
- * @param <V> the value type
- * @return a sting, enclosed in {}, with comma seperated key value pairs in order of the keys
- */
- @Requires("c != null")
- protected static <T extends Comparable<T>, V> String sortedString(Map<T, V> c) {
-
- // NOTE -- THIS IS COPIED FROM GATK UTILS TO ALLOW US TO KEEP A SEPARATION BETWEEN THE GATK AND VCF CODECS
- final List<T> t = new ArrayList<T>(c.keySet());
- Collections.sort(t);
-
- final List<String> pairs = new ArrayList<String>();
- for (final T k : t) {
- pairs.add(k + "=" + c.get(k));
- }
-
- return pairs.isEmpty() ? "" : " {" + ParsingUtils.join(", ", pairs.toArray(new String[pairs.size()])) + "}";
- }
-
- /**
- * Returns a display name for field name with value v if this isn't -1. Otherwise returns ""
- * @param name of the field ("AD")
- * @param v the value of the field, or -1 if missing
- * @return a non-null string for display if the field is not missing
- */
- @Requires("name != null")
- @Ensures("result != null")
- protected final static String toStringIfExists(final String name, final int v) {
- return v == -1 ? "" : " " + name + " " + v;
- }
-
- /**
- * Returns a display name for field name with String value v if this isn't null. Otherwise returns ""
- * @param name of the field ("FT")
- * @param v the value of the field, or null if missing
- * @return a non-null string for display if the field is not missing
- */
- protected final static String toStringIfExists(final String name, final String v) {
- return v == null ? "" : " " + name + " " + v;
- }
-
- /**
- * Returns a display name for field name with values vs if this isn't null. Otherwise returns ""
- * @param name of the field ("AD")
- * @param vs the value of the field, or null if missing
- * @return a non-null string for display if the field is not missing
- */
- @Requires("name != null")
- @Ensures("result != null")
- protected final static String toStringIfExists(final String name, final int[] vs) {
- if ( vs == null )
- return "";
- else {
- StringBuilder b = new StringBuilder();
- b.append(" ").append(name).append(" ");
- for ( int i = 0; i < vs.length; i++ ) {
- if ( i != 0 ) b.append(",");
- b.append(vs[i]);
- }
- return b.toString();
- }
- }
-
- /**
- * Does the attribute map have a mapping involving a forbidden key (i.e.,
- * one that's managed inline by this Genotypes object?
- *
- * @param attributes the extended attributes key
- * @return
- */
- protected final static boolean hasForbiddenKey(final Map<String, Object> attributes) {
- for ( final String forbidden : PRIMARY_KEYS)
- if ( attributes.containsKey(forbidden) )
- return true;
- return false;
- }
-
- protected final static boolean isForbiddenKey(final String key) {
- return PRIMARY_KEYS.contains(key);
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/GenotypeBuilder.java b/src/java/org/broadinstitute/variant/variantcontext/GenotypeBuilder.java
deleted file mode 100644
index 31ba942..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/GenotypeBuilder.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Invariant;
-import com.google.java.contract.Requires;
-import org.broad.tribble.util.ParsingUtils;
-import org.broadinstitute.variant.vcf.VCFConstants;
-
-import java.util.*;
-
-/**
- * A builder class for genotypes
- *
- * Provides convenience setter methods for all of the Genotype field
- * values. Setter methods can be used in any order, allowing you to
- * pass through states that wouldn't be allowed in the highly regulated
- * immutable Genotype class.
- *
- * All fields default to meaningful MISSING values.
- *
- * Call make() to actually create the corresponding Genotype object from
- * this builder. Can be called multiple times to create independent copies,
- * or with intervening sets to conveniently make similar Genotypes with
- * slight modifications.
- *
- * @author Mark DePristo
- * @since 06/12
- */
- at Invariant({"alleles != null"})
-public final class GenotypeBuilder {
- private static final List<Allele> HAPLOID_NO_CALL = Arrays.asList(Allele.NO_CALL);
- private static final List<Allele> DIPLOID_NO_CALL = Arrays.asList(Allele.NO_CALL, Allele.NO_CALL);
-
- private String sampleName = null;
- private List<Allele> alleles = Collections.emptyList();
-
- private boolean isPhased = false;
- private int GQ = -1;
- private int DP = -1;
- private int[] AD = null;
- private int[] PL = null;
- private Map<String, Object> extendedAttributes = null;
- private String filters = null;
- private int initialAttributeMapSize = 5;
-
- private final static Map<String, Object> NO_ATTRIBUTES =
- Collections.unmodifiableMap(new HashMap<String, Object>(0));
-
- // -----------------------------------------------------------------
- //
- // Factory methods
- //
- // -----------------------------------------------------------------
-
- public static Genotype create(final String sampleName, final List<Allele> alleles) {
- return new GenotypeBuilder(sampleName, alleles).make();
- }
-
- public static Genotype create(final String sampleName,
- final List<Allele> alleles,
- final Map<String, Object> attributes) {
- return new GenotypeBuilder(sampleName, alleles).attributes(attributes).make();
- }
-
- protected static Genotype create(final String sampleName,
- final List<Allele> alleles,
- final double[] gls) {
- return new GenotypeBuilder(sampleName, alleles).PL(gls).make();
- }
-
- /**
- * Create a new Genotype object for a sample that's missing from the VC (i.e., in
- * the output header). Defaults to a diploid no call genotype ./.
- *
- * @param sampleName the name of this sample
- * @return an initialized Genotype with sampleName that's a diploid ./. no call genotype
- */
- public static Genotype createMissing(final String sampleName, final int ploidy) {
- final GenotypeBuilder builder = new GenotypeBuilder(sampleName);
- switch ( ploidy ) {
- case 1: builder.alleles(HAPLOID_NO_CALL); break;
- case 2: builder.alleles(DIPLOID_NO_CALL); break;
- default: builder.alleles(Collections.nCopies(ploidy, Allele.NO_CALL)); break;
- }
- return builder.make();
- }
-
- /**
- * Create a empty builder. Both a sampleName and alleles must be provided
- * before trying to make a Genotype from this builder.
- */
- public GenotypeBuilder() {}
-
- /**
- * Create a builder using sampleName. Alleles must be provided
- * before trying to make a Genotype from this builder.
- * @param sampleName
- */
- public GenotypeBuilder(final String sampleName) {
- name(sampleName);
- }
-
- /**
- * Make a builder using sampleName and alleles for starting values
- * @param sampleName
- * @param alleles
- */
- public GenotypeBuilder(final String sampleName, final List<Allele> alleles) {
- name(sampleName);
- alleles(alleles);
- }
-
- /**
- * Create a new builder starting with the values in Genotype g
- * @param g
- */
- public GenotypeBuilder(final Genotype g) {
- copy(g);
- }
-
- /**
- * Copy all of the values for this builder from Genotype g
- * @param g
- * @return
- */
- public GenotypeBuilder copy(final Genotype g) {
- name(g.getSampleName());
- alleles(g.getAlleles());
- phased(g.isPhased());
- GQ(g.getGQ());
- DP(g.getDP());
- AD(g.getAD());
- PL(g.getPL());
- filter(g.getFilters());
- attributes(g.getExtendedAttributes());
- return this;
- }
-
- /**
- * Reset all of the builder attributes to their defaults. After this
- * function you must provide sampleName and alleles before trying to
- * make more Genotypes.
- */
- public final void reset(final boolean keepSampleName) {
- if ( ! keepSampleName ) sampleName = null;
- alleles = Collections.emptyList();
- isPhased = false;
- GQ = -1;
- DP = -1;
- AD = null;
- PL = null;
- filters = null;
- extendedAttributes = null;
- }
-
- /**
- * Create a new Genotype object using the values set in this builder.
- *
- * After creation the values in this builder can be modified and more Genotypes
- * created, althrough the contents of array values like PL should never be modified
- * inline as they are not copied for efficiency reasons.
- *
- * @return a newly minted Genotype object with values provided from this builder
- */
- @Ensures({"result != null"})
- public Genotype make() {
- final Map<String, Object> ea = extendedAttributes == null ? NO_ATTRIBUTES : extendedAttributes;
- return new FastGenotype(sampleName, alleles, isPhased, GQ, DP, AD, PL, filters, ea);
- }
-
- /**
- * Set this genotype's name
- * @param sampleName
- * @return
- */
- @Requires({"sampleName != null"})
- @Ensures({"this.sampleName != null"})
- public GenotypeBuilder name(final String sampleName) {
- this.sampleName = sampleName;
- return this;
- }
-
- /**
- * Set this genotype's alleles
- * @param alleles
- * @return
- */
- @Ensures({"this.alleles != null"})
- public GenotypeBuilder alleles(final List<Allele> alleles) {
- if ( alleles == null )
- this.alleles = Collections.emptyList();
- else
- this.alleles = alleles;
- return this;
- }
-
- /**
- * Is this genotype phased?
- * @param phased
- * @return
- */
- public GenotypeBuilder phased(final boolean phased) {
- isPhased = phased;
- return this;
- }
-
- @Requires({"GQ >= -1"})
- @Ensures({"this.GQ == GQ", "this.GQ >= -1"})
- public GenotypeBuilder GQ(final int GQ) {
- this.GQ = GQ;
- return this;
- }
-
- /**
- * Adaptor interface from the pLog10Error system.
- *
- * Will be retired when
- *
- * @param pLog10Error
- * @return
- */
- @Deprecated
- public GenotypeBuilder log10PError(final double pLog10Error) {
- if ( pLog10Error == CommonInfo.NO_LOG10_PERROR )
- return GQ(-1);
- else
- return GQ((int)Math.round(pLog10Error * -10));
- }
-
- /**
- * This genotype has no GQ value
- * @return
- */
- public GenotypeBuilder noGQ() { GQ = -1; return this; }
-
- /**
- * This genotype has no AD value
- * @return
- */
- public GenotypeBuilder noAD() { AD = null; return this; }
-
- /**
- * This genotype has no DP value
- * @return
- */
- public GenotypeBuilder noDP() { DP = -1; return this; }
-
- /**
- * This genotype has no PL value
- * @return
- */
- public GenotypeBuilder noPL() { PL = null; return this; }
-
- /**
- * This genotype has this DP value
- * @return
- */
- @Requires({"DP >= -1"})
- @Ensures({"this.DP == DP"})
- public GenotypeBuilder DP(final int DP) {
- this.DP = DP;
- return this;
- }
-
- /**
- * This genotype has this AD value
- * @return
- */
- @Requires({"AD == null || AD.length > 0"})
- @Ensures({"this.AD == AD"})
- public GenotypeBuilder AD(final int[] AD) {
- this.AD = AD;
- return this;
- }
-
- /**
- * This genotype has this PL value, as int[]. FAST
- * @return
- */
- @Requires("PL == null || PL.length > 0")
- @Ensures({"this.PL == PL"})
- public GenotypeBuilder PL(final int[] PL) {
- this.PL = PL;
- return this;
- }
-
- /**
- * This genotype has this PL value, converted from double[]. SLOW
- * @return
- */
- @Requires("PL == null || PL.length > 0")
- @Ensures({"this.PL == PL"})
- public GenotypeBuilder PL(final double[] GLs) {
- this.PL = GenotypeLikelihoods.fromLog10Likelihoods(GLs).getAsPLs();
- return this;
- }
-
- /**
- * This genotype has these attributes.
- *
- * Cannot contain inline attributes (DP, AD, GQ, PL)
- * @return
- */
- @Requires("attributes != null")
- @Ensures("attributes.isEmpty() || extendedAttributes != null")
- public GenotypeBuilder attributes(final Map<String, Object> attributes) {
- for ( Map.Entry<String, Object> pair : attributes.entrySet() )
- attribute(pair.getKey(), pair.getValue());
- return this;
- }
-
- /**
- * Tells this builder to remove all extended attributes
- *
- * @return
- */
- public GenotypeBuilder noAttributes() {
- this.extendedAttributes = null;
- return this;
- }
-
- /**
- * This genotype has this attribute key / value pair.
- *
- * Cannot contain inline attributes (DP, AD, GQ, PL)
- * @return
- */
- @Requires({"key != null"})
- @Ensures({"extendedAttributes != null", "extendedAttributes.containsKey(key)"})
- public GenotypeBuilder attribute(final String key, final Object value) {
- if ( extendedAttributes == null )
- extendedAttributes = new HashMap<String, Object>(initialAttributeMapSize);
- extendedAttributes.put(key, value);
- return this;
- }
-
- /**
- * Tells this builder to make a Genotype object that has had filters applied,
- * which may be empty (passes) or have some value indicating the reasons
- * why it's been filtered.
- *
- * @param filters non-null list of filters. empty list => PASS
- * @return this builder
- */
- @Requires("filters != null")
- public GenotypeBuilder filters(final List<String> filters) {
- if ( filters.isEmpty() )
- return filter(null);
- else if ( filters.size() == 1 )
- return filter(filters.get(0));
- else
- return filter(ParsingUtils.join(";", ParsingUtils.sortList(filters)));
- }
-
- /**
- * varargs version of #filters
- * @param filters
- * @return
- */
- @Requires("filters != null")
- public GenotypeBuilder filters(final String ... filters) {
- return filters(Arrays.asList(filters));
- }
-
- /**
- * Most efficient version of setting filters -- just set the filters string to filters
- *
- * @param filter if filters == null or filters.equals("PASS") => genotype is PASS
- * @return
- */
- public GenotypeBuilder filter(final String filter) {
- this.filters = VCFConstants.PASSES_FILTERS_v4.equals(filter) ? null : filter;
- return this;
- }
-
- /**
- * This genotype is unfiltered
- *
- * @return
- */
- public GenotypeBuilder unfiltered() {
- return filter(null);
- }
-
- /**
- * Tell's this builder that we have at most these number of attributes
- * @return
- */
- public GenotypeBuilder maxAttributes(final int i) {
- initialAttributeMapSize = i;
- return this;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/GenotypeLikelihoods.java b/src/java/org/broadinstitute/variant/variantcontext/GenotypeLikelihoods.java
deleted file mode 100644
index 8b80691..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/GenotypeLikelihoods.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.vcf.VCFConstants;
-
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.List;
-
-public class GenotypeLikelihoods {
- private final static int NUM_LIKELIHOODS_CACHE_N_ALLELES = 5;
- private final static int NUM_LIKELIHOODS_CACHE_PLOIDY = 10;
- // caching numAlleles up to 5 and ploidy up to 10
- private final static int[][] numLikelihoodCache = new int[NUM_LIKELIHOODS_CACHE_N_ALLELES][NUM_LIKELIHOODS_CACHE_PLOIDY];
-
- public final static int MAX_PL = Integer.MAX_VALUE;
-
- //
- // There are two objects here because we are lazy in creating both representations
- // for this object: a vector of log10 Probs and the PL phred-scaled string. Supports
- // having one set during initializating, and dynamic creation of the other, if needed
- //
- private double[] log10Likelihoods = null;
- private String likelihoodsAsString_PLs = null;
-
-
- /**
- * initialize num likelihoods cache
- */
- static {
- // must be done before PLIndexToAlleleIndex
- for ( int numAlleles = 1; numAlleles < NUM_LIKELIHOODS_CACHE_N_ALLELES; numAlleles++ ) {
- for ( int ploidy = 1; ploidy < NUM_LIKELIHOODS_CACHE_PLOIDY; ploidy++ ) {
- numLikelihoodCache[numAlleles][ploidy] = calcNumLikelihoods(numAlleles, ploidy);
- }
- }
- }
-
- /**
- * The maximum number of alleles that we can represent as genotype likelihoods
- */
- public final static int MAX_ALT_ALLELES_THAT_CAN_BE_GENOTYPED = 50;
-
- /*
- * a cache of the PL index to the 2 alleles it represents over all possible numbers of alternate alleles
- */
- private final static GenotypeLikelihoodsAllelePair[] PLIndexToAlleleIndex = calculatePLcache(MAX_ALT_ALLELES_THAT_CAN_BE_GENOTYPED);
-
- public final static GenotypeLikelihoods fromPLField(String PLs) {
- return new GenotypeLikelihoods(PLs);
- }
-
- @Deprecated
- public final static GenotypeLikelihoods fromGLField(String GLs) {
- return new GenotypeLikelihoods(parseDeprecatedGLString(GLs));
- }
-
- public final static GenotypeLikelihoods fromLog10Likelihoods(double[] log10Likelihoods) {
- return new GenotypeLikelihoods(log10Likelihoods);
- }
-
- public final static GenotypeLikelihoods fromPLs(final int[] pls) {
- return new GenotypeLikelihoods(PLsToGLs(pls));
- }
-
- //
- // You must use the factory methods now
- //
- private GenotypeLikelihoods(String asString) {
- likelihoodsAsString_PLs = asString;
- }
-
- private GenotypeLikelihoods(double[] asVector) {
- log10Likelihoods = asVector;
- }
-
- /**
- * Returns the genotypes likelihoods in negative log10 vector format. pr{AA} = x, this
- * vector returns math.log10(x) for each of the genotypes. Can return null if the
- * genotype likelihoods are "missing".
- *
- * @return
- */
- public double[] getAsVector() {
- // assumes one of the likelihoods vector or the string isn't null
- if ( log10Likelihoods == null ) {
- // make sure we create the GL string if it doesn't already exist
- log10Likelihoods = parsePLsIntoLikelihoods(likelihoodsAsString_PLs);
- }
-
- return log10Likelihoods;
- }
-
- public int[] getAsPLs() {
- final double[] GLs = getAsVector();
- return GLs == null ? null : GLsToPLs(GLs);
- }
-
- public String toString() {
- return getAsString();
- }
-
- public String getAsString() {
- if ( likelihoodsAsString_PLs == null ) {
- // todo -- should we accept null log10Likelihoods and set PLs as MISSING?
- if ( log10Likelihoods == null )
- throw new TribbleException("BUG: Attempted to get likelihoods as strings and neither the vector nor the string is set!");
- likelihoodsAsString_PLs = convertLikelihoodsToPLString(log10Likelihoods);
- }
-
- return likelihoodsAsString_PLs;
- }
-
- @Override public boolean equals(Object aThat) {
- //check for self-comparison
- if ( this == aThat ) return true;
-
- if ( !(aThat instanceof GenotypeLikelihoods) ) return false;
- GenotypeLikelihoods that = (GenotypeLikelihoods)aThat;
-
- // now a proper field-by-field evaluation can be made.
- // GLs are considered equal if the corresponding PLs are equal
- return Arrays.equals(getAsPLs(), that.getAsPLs());
- }
-
- //Return genotype likelihoods as an EnumMap with Genotypes as keys and likelihoods as values
- //Returns null in case of missing likelihoods
- public EnumMap<GenotypeType,Double> getAsMap(boolean normalizeFromLog10){
- //Make sure that the log10likelihoods are set
- double[] likelihoods = normalizeFromLog10 ? GeneralUtils.normalizeFromLog10(getAsVector()) : getAsVector();
- if(likelihoods == null)
- return null;
- EnumMap<GenotypeType,Double> likelihoodsMap = new EnumMap<GenotypeType, Double>(GenotypeType.class);
- likelihoodsMap.put(GenotypeType.HOM_REF,likelihoods[GenotypeType.HOM_REF.ordinal()-1]);
- likelihoodsMap.put(GenotypeType.HET,likelihoods[GenotypeType.HET.ordinal()-1]);
- likelihoodsMap.put(GenotypeType.HOM_VAR, likelihoods[GenotypeType.HOM_VAR.ordinal() - 1]);
- return likelihoodsMap;
- }
-
- //Return the neg log10 Genotype Quality (GQ) for the given genotype
- //Returns Double.NEGATIVE_INFINITY in case of missing genotype
-
- /**
- * This is really dangerous and returns completely wrong results for genotypes from a multi-allelic context.
- * Use getLog10GQ(Genotype,VariantContext) or getLog10GQ(Genotype,List<Allele>) in place of it.
- *
- * If you **know** you're biallelic, use getGQLog10FromLikelihoods directly.
- * @param genotype - actually a genotype type (no call, hom ref, het, hom var)
- * @return an unsafe quantity that could be negative. In the bi-allelic case, the GQ resulting from best minus next best (if the type is the best).
- */
- @Deprecated
- public double getLog10GQ(GenotypeType genotype){
- return getGQLog10FromLikelihoods(genotype.ordinal() - 1 /* NO_CALL IS FIRST */, getAsVector());
- }
-
- @Requires({"genotypeAlleles != null","genotypeAlleles.size()==2","contextAlleles != null","contextAlleles.size() >= 1"})
- private double getLog10GQ(List<Allele> genotypeAlleles,List<Allele> contextAlleles) {
- int allele1Index = contextAlleles.indexOf(genotypeAlleles.get(0));
- int allele2Index = contextAlleles.indexOf(genotypeAlleles.get(1));
- int plIndex = calculatePLindex(allele1Index,allele2Index);
- return getGQLog10FromLikelihoods(plIndex,getAsVector());
- }
-
- public double getLog10GQ(Genotype genotype, List<Allele> vcAlleles ) {
- return getLog10GQ(genotype.getAlleles(),vcAlleles);
- }
-
- public double getLog10GQ(Genotype genotype, VariantContext context) {
- return getLog10GQ(genotype,context.getAlleles());
- }
-
- public static double getGQLog10FromLikelihoods(int iOfChoosenGenotype, double[] likelihoods){
- if(likelihoods == null)
- return Double.NEGATIVE_INFINITY;
-
- double qual = Double.NEGATIVE_INFINITY;
- for (int i=0; i < likelihoods.length; i++) {
- if (i==iOfChoosenGenotype)
- continue;
- if (likelihoods[i] >= qual)
- qual = likelihoods[i];
- }
-
- // qual contains now max(likelihoods[k]) for all k != bestGTguess
- qual = likelihoods[iOfChoosenGenotype] - qual;
-
- if (qual < 0) {
- // QUAL can be negative if the chosen genotype is not the most likely one individually.
- // In this case, we compute the actual genotype probability and QUAL is the likelihood of it not being the chosen one
- double[] normalized = GeneralUtils.normalizeFromLog10(likelihoods);
- double chosenGenotype = normalized[iOfChoosenGenotype];
- return Math.log10(1.0 - chosenGenotype);
- } else {
- // invert the size, as this is the probability of making an error
- return -1 * qual;
- }
- }
-
- private final static double[] parsePLsIntoLikelihoods(String likelihoodsAsString_PLs) {
- if ( !likelihoodsAsString_PLs.equals(VCFConstants.MISSING_VALUE_v4) ) {
- String[] strings = likelihoodsAsString_PLs.split(",");
- double[] likelihoodsAsVector = new double[strings.length];
- try {
- for ( int i = 0; i < strings.length; i++ ) {
- likelihoodsAsVector[i] = Integer.parseInt(strings[i]) / -10.0;
- }
- } catch (NumberFormatException e) {
- throw new TribbleException("The GL/PL tag contains non-integer values: " + likelihoodsAsString_PLs);
- }
- return likelihoodsAsVector;
- } else
- return null;
- }
-
- /**
- * Back-compatibility function to read old style GL formatted genotype likelihoods in VCF format
- * @param GLString
- * @return
- */
- private final static double[] parseDeprecatedGLString(String GLString) {
- if ( !GLString.equals(VCFConstants.MISSING_VALUE_v4) ) {
- String[] strings = GLString.split(",");
- double[] likelihoodsAsVector = new double[strings.length];
- for ( int i = 0; i < strings.length; i++ ) {
- likelihoodsAsVector[i] = Double.parseDouble(strings[i]);
- }
- return likelihoodsAsVector;
- }
-
- return null;
- }
-
- private final static String convertLikelihoodsToPLString(final double[] GLs) {
- if ( GLs == null )
- return VCFConstants.MISSING_VALUE_v4;
-
- final StringBuilder s = new StringBuilder();
- boolean first = true;
- for ( final int pl : GLsToPLs(GLs) ) {
- if ( ! first )
- s.append(",");
- else
- first = false;
-
- s.append(pl);
- }
-
- return s.toString();
- }
-
- private final static int[] GLsToPLs(final double[] GLs) {
- final int[] pls = new int[GLs.length];
- final double adjust = maxPL(GLs);
-
- for ( int i = 0; i < GLs.length; i++ ) {
- pls[i] = (int)Math.round(Math.min(-10 * (GLs[i] - adjust), MAX_PL));
- }
-
- return pls;
- }
-
- private final static double maxPL(final double[] GLs) {
- double adjust = Double.NEGATIVE_INFINITY;
- for ( double l : GLs ) adjust = Math.max(adjust, l);
- return adjust;
- }
-
- private final static double[] PLsToGLs(final int pls[]) {
- double[] likelihoodsAsVector = new double[pls.length];
- for ( int i = 0; i < pls.length; i++ ) {
- likelihoodsAsVector[i] = pls[i] / -10.0;
- }
- return likelihoodsAsVector;
- }
-
- // -------------------------------------------------------------------------------------
- //
- // Static conversion utilities, going from GL/PL index to allele index and vice versa.
- //
- // -------------------------------------------------------------------------------------
-
- /*
- * Class representing the 2 alleles (or rather their indexes into VariantContext.getAllele()) corresponding to a specific PL index.
- * Note that the reference allele is always index=0.
- */
- public static class GenotypeLikelihoodsAllelePair {
- public final int alleleIndex1, alleleIndex2;
-
- public GenotypeLikelihoodsAllelePair(final int alleleIndex1, final int alleleIndex2) {
- this.alleleIndex1 = alleleIndex1;
- this.alleleIndex2 = alleleIndex2;
- }
- }
-
- private static GenotypeLikelihoodsAllelePair[] calculatePLcache(final int altAlleles) {
- final int numLikelihoods = numLikelihoods(1 + altAlleles, 2);
- final GenotypeLikelihoodsAllelePair[] cache = new GenotypeLikelihoodsAllelePair[numLikelihoods];
-
- // for all possible combinations of 2 alleles
- for ( int allele1 = 0; allele1 <= altAlleles; allele1++ ) {
- for ( int allele2 = allele1; allele2 <= altAlleles; allele2++ ) {
- cache[calculatePLindex(allele1, allele2)] = new GenotypeLikelihoodsAllelePair(allele1, allele2);
- }
- }
-
- // a bit of sanity checking
- for ( int i = 0; i < cache.length; i++ ) {
- if ( cache[i] == null )
- throw new IllegalStateException("BUG: cache entry " + i + " is unexpected null");
- }
-
- return cache;
- }
-
- // -------------------------------------------------------------------------------------
- //
- // num likelihoods given number of alleles and ploidy
- //
- // -------------------------------------------------------------------------------------
-
- /**
- * Actually does the computation in @see #numLikelihoods
- *
- * @param numAlleles
- * @param ploidy
- * @return
- */
- private static final int calcNumLikelihoods(final int numAlleles, final int ploidy) {
- if (numAlleles == 1)
- return 1;
- else if (ploidy == 1)
- return numAlleles;
- else {
- int acc =0;
- for (int k=0; k <= ploidy; k++ )
- acc += calcNumLikelihoods(numAlleles - 1, ploidy - k);
- return acc;
- }
- }
-
- /**
- * Compute how many likelihood elements are associated with the given number of alleles
- * Equivalent to asking in how many ways N non-negative integers can add up to P is S(N,P)
- * where P = ploidy (number of chromosomes) and N = total # of alleles.
- * Each chromosome can be in one single state (0,...,N-1) and there are P of them.
- * Naive solution would be to store N*P likelihoods, but this is not necessary because we can't distinguish chromosome states, but rather
- * only total number of alt allele counts in all chromosomes.
- *
- * For example, S(3,2) = 6: For alleles A,B,C, on a diploid organism we have six possible genotypes:
- * AA,AB,BB,AC,BC,CC.
- * Another way of expressing is with vector (#of A alleles, # of B alleles, # of C alleles)
- * which is then, for ordering above, (2,0,0), (1,1,0), (0,2,0), (1,1,0), (0,1,1), (0,0,2)
- * In general, for P=2 (regular biallelic), then S(N,2) = N*(N+1)/2
- *
- * Note this method caches the value for most common num Allele / ploidy combinations for efficiency
- *
- * Recursive implementation:
- * S(N,P) = sum_{k=0}^P S(N-1,P-k)
- * because if we have N integers, we can condition 1 integer to be = k, and then N-1 integers have to sum to P-K
- * With initial conditions
- * S(N,1) = N (only way to have N integers add up to 1 is all-zeros except one element with a one. There are N of these vectors)
- * S(1,P) = 1 (only way to have 1 integer add to P is with that integer P itself).
- *
- * @param numAlleles Number of alleles (including ref)
- * @param ploidy Ploidy, or number of chromosomes in set
- * @return Number of likelihood elements we need to hold.
- */
- @Requires({"ploidy > 0", "numAlleles > 0"})
- @Ensures("result > 0")
- public static int numLikelihoods(final int numAlleles, final int ploidy) {
- if ( numAlleles < NUM_LIKELIHOODS_CACHE_N_ALLELES
- && ploidy < NUM_LIKELIHOODS_CACHE_PLOIDY )
- return numLikelihoodCache[numAlleles][ploidy];
- else {
- // have to calculate on the fly
- return calcNumLikelihoods(numAlleles, ploidy);
- }
- }
-
- // As per the VCF spec: "the ordering of genotypes for the likelihoods is given by: F(j/k) = (k*(k+1)/2)+j.
- // In other words, for biallelic sites the ordering is: AA,AB,BB; for triallelic sites the ordering is: AA,AB,BB,AC,BC,CC, etc."
- // Assumes that allele1Index < allele2Index
- public static int calculatePLindex(final int allele1Index, final int allele2Index) {
- return (allele2Index * (allele2Index+1) / 2) + allele1Index;
- }
-
- /**
- * get the allele index pair for the given PL
- *
- * @param PLindex the PL index
- * @return the allele index pair
- */
- public static GenotypeLikelihoodsAllelePair getAllelePair(final int PLindex) {
- // make sure that we've cached enough data
- if ( PLindex >= PLIndexToAlleleIndex.length )
- throw new IllegalStateException("Internal limitation: cannot genotype more than " + MAX_ALT_ALLELES_THAT_CAN_BE_GENOTYPED + " alleles");
-
- return PLIndexToAlleleIndex[PLindex];
- }
-
- // An index conversion from the deprecated PL ordering to the new VCF-based ordering for up to 3 alternate alleles
- protected static final int[] PLindexConversion = new int[]{0, 1, 3, 6, 2, 4, 7, 5, 8, 9};
-
- /**
- * get the allele index pair for the given PL using the deprecated PL ordering:
- * AA,AB,AC,AD,BB,BC,BD,CC,CD,DD instead of AA,AB,BB,AC,BC,CC,AD,BD,CD,DD.
- * Although it's painful to keep this conversion around, our DiploidSNPGenotypeLikelihoods class uses the deprecated
- * ordering and I know with certainty that external users have built code on top of it; changing it now would
- * cause a whole lot of heartache for our collaborators, so for now at least there's a standard conversion method.
- * This method assumes at most 3 alternate alleles.
- *
- * @param PLindex the PL index
- * @return the allele index pair
- */
- @Deprecated
- public static GenotypeLikelihoodsAllelePair getAllelePairUsingDeprecatedOrdering(final int PLindex) {
- return getAllelePair(PLindexConversion[PLindex]);
- }
-
- /**
- * get the PL indexes (AA, AB, BB) for the given allele pair; assumes allele1Index <= allele2Index.
- *
- * @param allele1Index the index in VariantContext.getAllele() of the first allele
- * @param allele2Index the index in VariantContext.getAllele() of the second allele
- * @return the PL indexes
- */
- public static int[] getPLIndecesOfAlleles(final int allele1Index, final int allele2Index) {
-
- final int[] indexes = new int[3];
- indexes[0] = calculatePLindex(allele1Index, allele1Index);
- indexes[1] = calculatePLindex(allele1Index, allele2Index);
- indexes[2] = calculatePLindex(allele2Index, allele2Index);
- return indexes;
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/GenotypeType.java b/src/java/org/broadinstitute/variant/variantcontext/GenotypeType.java
deleted file mode 100644
index 7074431..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/GenotypeType.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-/**
- * Summary types for Genotype objects
- *
- * @author Your Name
- * @since Date created
- */
-public enum GenotypeType {
- /** The sample is no-called (all alleles are NO_CALL */
- NO_CALL,
- /** The sample is homozygous reference */
- HOM_REF,
- /** The sample is heterozygous, with at least one ref and at least one one alt in any order */
- HET,
- /** All alleles are non-reference */
- HOM_VAR,
- /** There is no allele data availble for this sample (alleles.isEmpty) */
- UNAVAILABLE,
- /** Some chromosomes are NO_CALL and others are called */
- MIXED // no-call and call in the same genotype
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/GenotypesContext.java b/src/java/org/broadinstitute/variant/variantcontext/GenotypesContext.java
deleted file mode 100644
index d0684d2..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/GenotypesContext.java
+++ /dev/null
@@ -1,724 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-
-import java.util.*;
-
-/**
- * Represents an ordered collection of Genotype objects
- */
-public class GenotypesContext implements List<Genotype> {
- /**
- * static constant value for an empty GenotypesContext. Useful since so many VariantContexts have no genotypes
- */
- public final static GenotypesContext NO_GENOTYPES =
- new GenotypesContext(new ArrayList<Genotype>(0), new HashMap<String, Integer>(0), Collections.<String>emptyList()).immutable();
-
- /**
- *sampleNamesInOrder a list of sample names, one for each genotype in genotypes, sorted in alphabetical order
- */
- List<String> sampleNamesInOrder = null;
-
- /**
- * a map optimized for efficient lookup. Each genotype in genotypes must have its
- * sample name in sampleNameToOffset, with a corresponding integer value that indicates the offset of that
- * genotype in the vector of genotypes
- */
- Map<String, Integer> sampleNameToOffset = null;
-
- /**
- * An ArrayList of genotypes contained in this context
- *
- * WARNING: TO ENABLE THE LAZY VERSION OF THIS CLASS, NO METHODS SHOULD DIRECTLY
- * ACCESS THIS VARIABLE. USE getGenotypes() INSTEAD.
- *
- */
- ArrayList<Genotype> notToBeDirectlyAccessedGenotypes;
-
- /**
- * Cached value of the maximum ploidy observed among all samples
- */
- private int maxPloidy = -1;
-
- /** Are we allowing users to modify the list? */
- boolean immutable = false;
-
- // ---------------------------------------------------------------------------
- //
- // private constructors -- you have to use static create methods to make these classes
- //
- // ---------------------------------------------------------------------------
-
- /**
- * Create an empty GenotypeContext
- */
- protected GenotypesContext() {
- this(10);
- }
-
- /**
- * Create an empty GenotypeContext, with initial capacity for n elements
- */
- @Requires("n >= 0")
- protected GenotypesContext(final int n) {
- this(new ArrayList<Genotype>(n));
- }
-
- /**
- * Create an GenotypeContext containing genotypes
- */
- @Requires("genotypes != null")
- protected GenotypesContext(final ArrayList<Genotype> genotypes) {
- this.notToBeDirectlyAccessedGenotypes = genotypes;
- this.sampleNameToOffset = null;
- }
-
- /**
- * Create a fully resolved GenotypeContext containing genotypes, sample lookup table,
- * and sorted sample names
- *
- * @param genotypes our genotypes in arbitrary
- * @param sampleNameToOffset map optimized for efficient lookup. Each genotype in genotypes must have its
- * sample name in sampleNameToOffset, with a corresponding integer value that indicates the offset of that
- * genotype in the vector of genotypes
- * @param sampleNamesInOrder a list of sample names, one for each genotype in genotypes, sorted in alphabetical
- * order.
- */
- @Requires({"genotypes != null",
- "sampleNameToOffset != null",
- "sampleNamesInOrder != null",
- "genotypes.size() == sampleNameToOffset.size()",
- "genotypes.size() == sampleNamesInOrder.size()"})
- protected GenotypesContext(final ArrayList<Genotype> genotypes,
- final Map<String, Integer> sampleNameToOffset,
- final List<String> sampleNamesInOrder) {
- this.notToBeDirectlyAccessedGenotypes = genotypes;
- this.sampleNameToOffset = sampleNameToOffset;
- this.sampleNamesInOrder = sampleNamesInOrder;
- }
-
- // ---------------------------------------------------------------------------
- //
- // public static factory methods
- //
- // ---------------------------------------------------------------------------
-
- /**
- * Basic creation routine
- * @return an empty, mutable GenotypeContext
- */
- @Ensures({"result != null"})
- public static final GenotypesContext create() {
- return new GenotypesContext();
- }
-
- /**
- * Basic creation routine
- * @return an empty, mutable GenotypeContext with initial capacity for nGenotypes
- */
- @Requires("nGenotypes >= 0")
- @Ensures({"result != null"})
- public static final GenotypesContext create(final int nGenotypes) {
- return new GenotypesContext(nGenotypes);
- }
-
- /**
- * Create a fully resolved GenotypeContext containing genotypes, sample lookup table,
- * and sorted sample names
- *
- * @param genotypes our genotypes in arbitrary
- * @param sampleNameToOffset map optimized for efficient lookup. Each genotype in genotypes must have its
- * sample name in sampleNameToOffset, with a corresponding integer value that indicates the offset of that
- * genotype in the vector of genotypes
- * @param sampleNamesInOrder a list of sample names, one for each genotype in genotypes, sorted in alphabetical
- * order.
- * @return an mutable GenotypeContext containing genotypes with already present lookup data
- */
- @Requires({"genotypes != null",
- "sampleNameToOffset != null",
- "sampleNamesInOrder != null"})
- @Ensures({"result != null"})
- public static final GenotypesContext create(final ArrayList<Genotype> genotypes,
- final Map<String, Integer> sampleNameToOffset,
- final List<String> sampleNamesInOrder) {
- return new GenotypesContext(genotypes, sampleNameToOffset, sampleNamesInOrder);
- }
-
- /**
- * Create a fully resolved GenotypeContext containing genotypes
- *
- * @param genotypes our genotypes in arbitrary
- * @return an mutable GenotypeContext containing genotypes
- */
- @Requires({"genotypes != null"})
- @Ensures({"result != null"})
- public static final GenotypesContext create(final ArrayList<Genotype> genotypes) {
- return genotypes == null ? NO_GENOTYPES : new GenotypesContext(genotypes);
- }
-
- /**
- * Create a fully resolved GenotypeContext containing genotypes
- *
- * @param genotypes our genotypes in arbitrary
- * @return an mutable GenotypeContext containing genotypes
- */
- @Requires({"genotypes != null"})
- @Ensures({"result != null"})
- public static final GenotypesContext create(final Genotype... genotypes) {
- return create(new ArrayList<Genotype>(Arrays.asList(genotypes)));
- }
-
- /**
- * Create a freshly allocated GenotypeContext containing the genotypes in toCopy
- *
- * @param toCopy the GenotypesContext to copy
- * @return an mutable GenotypeContext containing genotypes
- */
- @Requires({"toCopy != null"})
- @Ensures({"result != null"})
- public static final GenotypesContext copy(final GenotypesContext toCopy) {
- return create(new ArrayList<Genotype>(toCopy.getGenotypes()));
- }
-
- /**
- * Create a GenotypesContext containing the genotypes in iteration order contained
- * in toCopy
- *
- * @param toCopy the collection of genotypes
- * @return an mutable GenotypeContext containing genotypes
- */
- @Ensures({"result != null"})
- public static final GenotypesContext copy(final Collection<Genotype> toCopy) {
- return toCopy == null ? NO_GENOTYPES : create(new ArrayList<Genotype>(toCopy));
- }
-
- // ---------------------------------------------------------------------------
- //
- // Mutability methods
- //
- // ---------------------------------------------------------------------------
-
- public final GenotypesContext immutable() {
- immutable = true;
- return this;
- }
-
- public boolean isMutable() {
- return ! immutable;
- }
-
- public final void checkImmutability() {
- if ( immutable )
- throw new IllegalAccessError("GenotypeMap is currently immutable, but a mutator method was invoked on it");
- }
-
- // ---------------------------------------------------------------------------
- //
- // caches
- //
- // ---------------------------------------------------------------------------
-
- @Ensures({"sampleNameToOffset == null"})
- protected void invalidateSampleNameMap() {
- sampleNameToOffset = null;
- }
-
- @Ensures({"sampleNamesInOrder == null"})
- protected void invalidateSampleOrdering() {
- sampleNamesInOrder = null;
- }
-
- @Ensures({"sampleNamesInOrder != null"})
- protected void ensureSampleOrdering() {
- if ( sampleNamesInOrder == null ) {
- sampleNamesInOrder = new ArrayList<String>(size());
-
- for ( int i = 0; i < size(); i++ ) {
- sampleNamesInOrder.add(getGenotypes().get(i).getSampleName());
- }
- Collections.sort(sampleNamesInOrder);
- }
- }
-
- @Ensures({"sampleNameToOffset != null"})
- protected void ensureSampleNameMap() {
- if ( sampleNameToOffset == null ) {
- sampleNameToOffset = new HashMap<String, Integer>(size());
-
- for ( int i = 0; i < size(); i++ ) {
- sampleNameToOffset.put(getGenotypes().get(i).getSampleName(), i);
- }
- }
- }
-
- // ---------------------------------------------------------------------------
- //
- // Lazy methods
- //
- // ---------------------------------------------------------------------------
-
- public boolean isLazyWithData() {
- return this instanceof LazyGenotypesContext &&
- ((LazyGenotypesContext)this).getUnparsedGenotypeData() != null;
- }
-
- // ---------------------------------------------------------------------------
- //
- // Map methods
- //
- // ---------------------------------------------------------------------------
-
- protected ArrayList<Genotype> getGenotypes() {
- return notToBeDirectlyAccessedGenotypes;
- }
-
- @Override
- public void clear() {
- checkImmutability();
- invalidateSampleNameMap();
- invalidateSampleOrdering();
- getGenotypes().clear();
- }
-
- @Override
- public int size() {
- return getGenotypes().size();
- }
-
- @Override
- public boolean isEmpty() {
- return getGenotypes().isEmpty();
- }
-
- /**
- * Adds a single genotype to this context.
- *
- * There are many constraints on this input, and important
- * impacts on the performance of other functions provided by this
- * context.
- *
- * First, the sample name of genotype must be unique within this
- * context. However, this is not enforced in the code itself, through
- * you will invalid the contract on this context if you add duplicate
- * samples and are running with CoFoJa enabled.
- *
- * Second, adding genotype also updates the sample name -> index map,
- * so add() followed by containsSample and related function is an efficient
- * series of operations.
- *
- * Third, adding the genotype invalidates the sorted list of sample names, to
- * add() followed by any of the SampleNamesInOrder operations is inefficient, as
- * each SampleNamesInOrder must rebuild the sorted list of sample names at
- * an O(n log n) cost.
- *
- * @param genotype
- * @return
- */
- @Override
- @Requires({"genotype != null", "get(genotype.getSampleName()) == null"})
- public boolean add(final Genotype genotype) {
- checkImmutability();
- invalidateSampleOrdering();
-
- if ( sampleNameToOffset != null ) {
- // update the name map by adding entries
- sampleNameToOffset.put(genotype.getSampleName(), size());
- }
-
- return getGenotypes().add(genotype);
- }
-
- @Override
- @Requires("! contains(genotype)")
- public void add(final int i, final Genotype genotype) {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Adds all of the genotypes to this context
- *
- * See {@link #add(Genotype)} for important information about this functions
- * constraints and performance costs
- *
- * @param genotypes
- * @return
- */
- @Override
- @Requires("! containsAny(genotypes)")
- public boolean addAll(final Collection<? extends Genotype> genotypes) {
- checkImmutability();
- invalidateSampleOrdering();
-
- if ( sampleNameToOffset != null ) {
- // update the name map by adding entries
- int pos = size();
- for ( final Genotype g : genotypes ) {
- sampleNameToOffset.put(g.getSampleName(), pos++);
- }
- }
-
- return getGenotypes().addAll(genotypes);
- }
-
- @Override
- public boolean addAll(final int i, final Collection<? extends Genotype> genotypes) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean contains(final Object o) {
- return getGenotypes().contains(o);
- }
-
- @Override
- public boolean containsAll(final Collection<?> objects) {
- return getGenotypes().containsAll(objects);
- }
-
- private boolean containsAny(final Collection<? extends Genotype> genotypes) {
- for ( final Genotype g : genotypes ) {
- if ( contains(g) ) return true;
- }
- return false;
- }
-
- @Override
- public Genotype get(final int i) {
- return getGenotypes().get(i);
- }
-
- /**
- * What is the max ploidy among all samples? Returns defaultPloidy if no genotypes are present
- *
- * @param defaultPloidy the default ploidy, if all samples are no-called
- * @return
- */
- @Ensures("result >= 0")
- public int getMaxPloidy(final int defaultPloidy) {
- if ( defaultPloidy < 0 ) throw new IllegalArgumentException("defaultPloidy must be greater than or equal to 0");
-
- if ( maxPloidy == -1 ) {
- maxPloidy = 0; // necessary in the case where there are no genotypes
- for ( final Genotype g : getGenotypes() ) {
- maxPloidy = Math.max(g.getPloidy(), maxPloidy);
- }
-
- // everything is no called so we return the default ploidy
- if ( maxPloidy == 0 ) maxPloidy = defaultPloidy;
- }
-
- return maxPloidy;
- }
-
- /**
- * Gets sample associated with this sampleName, or null if none is found
- *
- * @param sampleName
- * @return
- */
- public Genotype get(final String sampleName) {
- Integer offset = getSampleI(sampleName);
- return offset == null ? null : getGenotypes().get(offset);
- }
-
- private Integer getSampleI(final String sampleName) {
- ensureSampleNameMap();
- return sampleNameToOffset.get(sampleName);
- }
-
- @Override
- public int indexOf(final Object o) {
- return getGenotypes().indexOf(o);
- }
-
- @Override
- public Iterator<Genotype> iterator() {
- return getGenotypes().iterator();
- }
-
- @Override
- public int lastIndexOf(final Object o) {
- return getGenotypes().lastIndexOf(o);
- }
-
- @Override
- public ListIterator<Genotype> listIterator() {
- // todo -- must be immutable
- throw new UnsupportedOperationException();
-// return genotypes.listIterator();
- }
-
- @Override
- public ListIterator<Genotype> listIterator(final int i) {
- // todo -- must be immutable
- throw new UnsupportedOperationException();
-// return genotypes.listIterator(i);
- }
-
- /**
- * Note that remove requires us to invalidate our sample -> index
- * cache. The loop:
- *
- * GenotypesContext gc = ...
- * for ( sample in samples )
- * if ( gc.containsSample(sample) )
- * gc.remove(sample)
- *
- * is extremely inefficient, as each call to remove invalidates the cache
- * and containsSample requires us to rebuild it, an O(n) operation.
- *
- * If you must remove many samples from the GC, use either removeAll or retainAll
- * to avoid this O(n * m) operation.
- *
- * @param i
- * @return
- */
- @Override
- public Genotype remove(final int i) {
- checkImmutability();
- invalidateSampleNameMap();
- invalidateSampleOrdering();
- return getGenotypes().remove(i);
- }
-
- /**
- * See for important warning {@link this.remove(Integer)}
- * @param o
- * @return
- */
- @Override
- public boolean remove(final Object o) {
- checkImmutability();
- invalidateSampleNameMap();
- invalidateSampleOrdering();
- return getGenotypes().remove(o);
- }
-
- @Override
- public boolean removeAll(final Collection<?> objects) {
- checkImmutability();
- invalidateSampleNameMap();
- invalidateSampleOrdering();
- return getGenotypes().removeAll(objects);
- }
-
- @Override
- public boolean retainAll(final Collection<?> objects) {
- checkImmutability();
- invalidateSampleNameMap();
- invalidateSampleOrdering();
- return getGenotypes().retainAll(objects);
- }
-
- @Override
- public Genotype set(final int i, final Genotype genotype) {
- checkImmutability();
- final Genotype prev = getGenotypes().set(i, genotype);
-
- invalidateSampleOrdering();
- if ( sampleNameToOffset != null ) {
- // update the name map by removing the old entry and replacing it with the new one
- sampleNameToOffset.remove(prev.getSampleName());
- sampleNameToOffset.put(genotype.getSampleName(), i);
- }
-
- return prev;
- }
-
- /**
- * Replaces the genotype in this context -- note for efficiency
- * reasons we do not add the genotype if it's not present. The
- * return value will be null indicating this happened.
- *
- * Note this operation is preserves the map cache Sample -> Offset but
- * invalidates the sorted list of samples. Using replace within a loop
- * containing any of the SampleNameInOrder operation requires an O(n log n)
- * resorting after each replace operation.
- *
- * @param genotype a non null genotype to bind in this context
- * @return null if genotype was not added, otherwise returns the previous genotype
- */
- @Requires("genotype != null")
- public Genotype replace(final Genotype genotype) {
- checkImmutability();
- Integer offset = getSampleI(genotype.getSampleName());
- if ( offset == null )
- return null;
- else
- return set(offset, genotype);
- }
-
- @Override
- public List<Genotype> subList(final int i, final int i1) {
- return getGenotypes().subList(i, i1);
- }
-
- @Override
- public Object[] toArray() {
- return getGenotypes().toArray();
- }
-
- @Override
- public <T> T[] toArray(final T[] ts) {
- return getGenotypes().toArray(ts);
- }
-
- /**
- * Iterate over the Genotypes in this context in the order specified by sampleNamesInOrder
- *
- * @param sampleNamesInOrder a Iterable of String, containing exactly one entry for each Genotype sample name in
- * this context
- * @return a Iterable over the genotypes in this context.
- */
- @Requires("sampleNamesInOrder != null")
- public Iterable<Genotype> iterateInSampleNameOrder(final Iterable<String> sampleNamesInOrder) {
- return new Iterable<Genotype>() {
- @Override
- public Iterator<Genotype> iterator() {
- return new InOrderIterator(sampleNamesInOrder.iterator());
- }
- };
- }
-
- /**
- * Iterate over the Genotypes in this context in their sample name order (A, B, C)
- * regardless of the underlying order in the vector of genotypes
- * @return a Iterable over the genotypes in this context.
- */
- public Iterable<Genotype> iterateInSampleNameOrder() {
- return iterateInSampleNameOrder(getSampleNamesOrderedByName());
- }
-
- private final class InOrderIterator implements Iterator<Genotype> {
- final Iterator<String> sampleNamesInOrder;
-
- private InOrderIterator(final Iterator<String> sampleNamesInOrder) {
- this.sampleNamesInOrder = sampleNamesInOrder;
- }
-
- @Override
- public boolean hasNext() {
- return sampleNamesInOrder.hasNext();
- }
-
- @Override
- public Genotype next() {
- return get(sampleNamesInOrder.next());
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-
- /**
- * @return The set of sample names for all genotypes in this context, in arbitrary order
- */
- @Ensures("result != null")
- public Set<String> getSampleNames() {
- ensureSampleNameMap();
- return sampleNameToOffset.keySet();
- }
-
- /**
- * @return The set of sample names for all genotypes in this context, in their natural ordering (A, B, C)
- */
- @Ensures("result != null")
- public List<String> getSampleNamesOrderedByName() {
- ensureSampleOrdering();
- return sampleNamesInOrder;
- }
-
- @Requires("sample != null")
- public boolean containsSample(final String sample) {
- ensureSampleNameMap();
- return sampleNameToOffset.containsKey(sample);
- }
-
- @Requires("samples != null")
- public boolean containsSamples(final Collection<String> samples) {
- return getSampleNames().containsAll(samples);
- }
-
- /**
- * Return a freshly allocated subcontext of this context containing only the samples
- * listed in samples. Note that samples can contain names not in this context, they
- * will just be ignored.
- *
- * @param samples
- * @return
- */
- @Requires("samples != null")
- @Ensures("result != null")
- public GenotypesContext subsetToSamples( final Set<String> samples ) {
- final int nSamples = samples.size();
-
- if ( nSamples == 0 )
- return NO_GENOTYPES;
- else { // nGenotypes < nSamples
- final GenotypesContext subset = create(samples.size());
- for ( final String sample : samples ) {
- final Genotype g = get(sample);
- if ( g != null )
- subset.add(g);
- }
- return subset;
- }
- }
-
- @Override
- public String toString() {
- final List<String> gS = new ArrayList<String>();
- for ( final Genotype g : this.iterateInSampleNameOrder() )
- gS.add(g.toString());
- return "[" + join(",", gS) + "]";
- }
-
- // copied from Utils
- private static <T> String join(final String separator, final Collection<T> objects) {
- if (objects.isEmpty()) { // fast path for empty collection
- return "";
- } else {
- final Iterator<T> iter = objects.iterator();
- final T first = iter.next();
-
- if ( ! iter.hasNext() ) // fast path for singleton collections
- return first.toString();
- else { // full path for 2+ collection that actually need a join
- final StringBuilder ret = new StringBuilder(first.toString());
- while(iter.hasNext()) {
- ret.append(separator);
- ret.append(iter.next().toString());
- }
- return ret.toString();
- }
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/JEXLMap.java b/src/java/org/broadinstitute/variant/variantcontext/JEXLMap.java
deleted file mode 100644
index d43a887..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/JEXLMap.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package org.broadinstitute.variant.variantcontext;
-
-import org.apache.commons.jexl2.JexlContext;
-import org.apache.commons.jexl2.MapContext;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.variantcontext.VariantContextUtils.JexlVCMatchExp;
-import org.broadinstitute.variant.vcf.VCFConstants;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * this is an implementation of a Map of JexlVCMatchExp to true or false values. It lazy initializes each value
- * as requested to save as much processing time as possible.
- *
- * Compatible with JEXL 1.1 (this code will be easier if we move to 2.0, all of the functionality can go into the
- * JexlContext's get()
- *
- */
-
-class JEXLMap implements Map<JexlVCMatchExp, Boolean> {
- // our variant context and/or Genotype
- private final VariantContext vc;
- private final Genotype g;
-
- // our context
- private JexlContext jContext = null;
-
- // our mapping from JEXLVCMatchExp to Booleans, which will be set to NULL for previously uncached JexlVCMatchExp
- private Map<JexlVCMatchExp,Boolean> jexl;
-
-
- public JEXLMap(Collection<JexlVCMatchExp> jexlCollection, VariantContext vc, Genotype g) {
- this.vc = vc;
- this.g = g;
- initialize(jexlCollection);
- }
-
- public JEXLMap(Collection<JexlVCMatchExp> jexlCollection, VariantContext vc) {
- this(jexlCollection, vc, null);
- }
-
- private void initialize(Collection<JexlVCMatchExp> jexlCollection) {
- jexl = new HashMap<JexlVCMatchExp,Boolean>();
- for (JexlVCMatchExp exp: jexlCollection) {
- jexl.put(exp, null);
- }
- }
-
- /**
- * create the internal JexlContext, only when required. This code is where new JEXL context variables
- * should get added.
- *
- */
- private void createContext() {
- if ( g == null ) {
- // todo -- remove dependancy on g to the entire system
- jContext = new VariantJEXLContext(vc);
- } else {
- //
- // this whole branch is here just to support G jexl operations
- //
- Map<String, Object> infoMap = new HashMap<String, Object>();
-
- if ( vc != null ) {
- // create a mapping of what we know about the variant context, its Chromosome, positions, etc.
- infoMap.put("CHROM", vc.getChr());
- infoMap.put("POS", vc.getStart());
- infoMap.put("TYPE", vc.getType().toString());
- infoMap.put("QUAL", String.valueOf(vc.getPhredScaledQual()));
-
- // add alleles
- infoMap.put("ALLELES", GeneralUtils.join(";", vc.getAlleles()));
- infoMap.put("N_ALLELES", String.valueOf(vc.getNAlleles()));
-
- // add attributes
- addAttributesToMap(infoMap, vc.getAttributes());
-
- // add filter fields
- infoMap.put("FILTER", vc.isFiltered() ? "1" : "0");
- for ( Object filterCode : vc.getFilters() ) {
- infoMap.put(String.valueOf(filterCode), "1");
- }
-
- // add genotype-specific fields
- // TODO -- implement me when we figure out a good way to represent this
- // for ( Genotype g : vc.getGenotypes().values() ) {
- // String prefix = g.getSampleName() + ".";
- // addAttributesToMap(infoMap, g.getAttributes(), prefix);
- // infoMap.put(prefix + "GT", g.getGenotypeString());
- // }
-
- // add specific genotype if one is provided
- infoMap.put(VCFConstants.GENOTYPE_KEY, g.getGenotypeString());
- infoMap.put("isHomRef", g.isHomRef() ? "1" : "0");
- infoMap.put("isHet", g.isHet() ? "1" : "0");
- infoMap.put("isHomVar", g.isHomVar() ? "1" : "0");
- infoMap.put(VCFConstants.GENOTYPE_QUALITY_KEY, g.getGQ());
- if ( g.hasDP() )
- infoMap.put(VCFConstants.DEPTH_KEY, g.getDP());
- for ( Entry<String, Object> e : g.getExtendedAttributes().entrySet() ) {
- if ( e.getValue() != null && !e.getValue().equals(VCFConstants.MISSING_VALUE_v4) )
- infoMap.put(e.getKey(), e.getValue());
- }
- }
-
- // create the internal context that we can evaluate expressions against
-
- jContext = new MapContext(infoMap);
- }
- }
-
- /**
- * @return the size of the internal data structure
- */
- public int size() {
- return jexl.size();
- }
-
- /**
- * @return true if we're empty
- */
- public boolean isEmpty() { return this.jexl.isEmpty(); }
-
- /**
- * do we contain the specified key
- * @param o the key
- * @return true if we have a value for that key
- */
- public boolean containsKey(Object o) { return jexl.containsKey(o); }
-
- public Boolean get(Object o) {
- // if we've already determined the value, return it
- if (jexl.containsKey(o) && jexl.get(o) != null) return jexl.get(o);
-
- // try and cast the expression
- JexlVCMatchExp e = (JexlVCMatchExp) o;
- evaluateExpression(e);
- return jexl.get(e);
- }
-
- /**
- * get the keyset of map
- * @return a set of keys of type JexlVCMatchExp
- */
- public Set<JexlVCMatchExp> keySet() {
- return jexl.keySet();
- }
-
- /**
- * get all the values of the map. This is an expensive call, since it evaluates all keys that haven't
- * been evaluated yet. This is fine if you truely want all the keys, but if you only want a portion, or know
- * the keys you want, you would be better off using get() to get them by name.
- * @return a collection of boolean values, representing the results of all the variants evaluated
- */
- public Collection<Boolean> values() {
- // this is an expensive call
- for (JexlVCMatchExp exp : jexl.keySet())
- if (jexl.get(exp) == null)
- evaluateExpression(exp);
- return jexl.values();
- }
-
- /**
- * evaulate a JexlVCMatchExp's expression, given the current context (and setup the context if it's null)
- * @param exp the JexlVCMatchExp to evaluate
- */
- private void evaluateExpression(JexlVCMatchExp exp) {
- // if the context is null, we need to create it to evaluate the JEXL expression
- if (this.jContext == null) createContext();
- try {
- final Boolean value = (Boolean) exp.exp.evaluate(jContext);
- // treat errors as no match
- jexl.put(exp, value == null ? false : value);
- } catch (Exception e) {
- // if exception happens because variable is undefined (i.e. field in expression is not present), evaluate to FALSE
- // todo - might be safer if we explicitly checked for an exception type, but Apache's API doesn't seem to have that ability
- if (e.getMessage().contains("undefined variable"))
- jexl.put(exp,false);
- else
- throw new IllegalArgumentException(String.format("Invalid JEXL expression detected for %s with message %s", exp.name, e.getMessage()));
- }
- }
-
- /**
- * helper function: adds the list of attributes to the information map we're building
- * @param infoMap the map
- * @param attributes the attributes
- */
- private static void addAttributesToMap(Map<String, Object> infoMap, Map<String, ?> attributes ) {
- for (Entry<String, ?> e : attributes.entrySet()) {
- infoMap.put(e.getKey(), String.valueOf(e.getValue()));
- }
- }
-
- public Boolean put(JexlVCMatchExp jexlVCMatchExp, Boolean aBoolean) {
- return jexl.put(jexlVCMatchExp,aBoolean);
- }
-
- public void putAll(Map<? extends JexlVCMatchExp, ? extends Boolean> map) {
- jexl.putAll(map);
- }
-
- // //////////////////////////////////////////////////////////////////////////////////////
- // The Following are unsupported at the moment
- // //////////////////////////////////////////////////////////////////////////////////////
-
- // this doesn't make much sense to implement, boolean doesn't offer too much variety to deal
- // with evaluating every key in the internal map.
- public boolean containsValue(Object o) {
- throw new UnsupportedOperationException("containsValue() not supported on a JEXLMap");
- }
-
- // this doesn't make much sense
- public Boolean remove(Object o) {
- throw new UnsupportedOperationException("remove() not supported on a JEXLMap");
- }
-
-
- public Set<Entry<JexlVCMatchExp, Boolean>> entrySet() {
- throw new UnsupportedOperationException("clear() not supported on a JEXLMap");
- }
-
- // nope
- public void clear() {
- throw new UnsupportedOperationException("clear() not supported on a JEXLMap");
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/LazyGenotypesContext.java b/src/java/org/broadinstitute/variant/variantcontext/LazyGenotypesContext.java
deleted file mode 100644
index 4825615..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/LazyGenotypesContext.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Lazy-loading GenotypesContext. A lazy-loading context has access to the
- * VCFParser and a unparsed string of genotype data. If the user attempts to manipulate
- * the genotypes contained in this context, we decode the data and become a full blown
- * GenotypesContext. However, if the user never does this we are spared a lot of expense
- * decoding the genotypes unnecessarily.
- */
-public class LazyGenotypesContext extends GenotypesContext {
- /** The LazyParser we'll use to decode unparsedGenotypeData if necessary */
- final LazyParser parser;
-
- Object unparsedGenotypeData;
-
- /**
- * nUnparsedGenotypes the number of genotypes contained in the unparsedGenotypes data
- * (known already in the parser). Useful for isEmpty and size() optimizations
- */
- final int nUnparsedGenotypes;
-
- /**
- * True if we've already decoded the values in unparsedGenotypeData
- */
- boolean loaded = false;
-
- private final static ArrayList<Genotype> EMPTY = new ArrayList<Genotype>(0);
-
- /**
- * Simple lazy parser interface. Provide an object implementing this
- * interface to LazyGenotypesContext, and it's parse method will be called
- * when the use of the lazy context requires the underlying genotypes data
- * be parsed into Genotype objects. The data argument is the data provided
- * to the LazyGenotypesContext holding encoded genotypes data
- */
- public interface LazyParser {
- @Requires("data != null")
- @Ensures("result != null")
- public LazyData parse(Object data);
- }
-
- /**
- * Returns the data used in the full GenotypesContext constructor
- *
- * {@link GenotypesContext#GenotypesContext(java.util.ArrayList, java.util.Map, java.util.List)}
- */
- public static class LazyData {
- final ArrayList<Genotype> genotypes;
- final Map<String, Integer> sampleNameToOffset;
- final List<String> sampleNamesInOrder;
-
- @Requires({"genotypes != null", "sampleNamesInOrder != null", "sampleNameToOffset != null"})
- public LazyData(final ArrayList<Genotype> genotypes,
- final List<String> sampleNamesInOrder,
- final Map<String, Integer> sampleNameToOffset) {
- this.genotypes = genotypes;
- this.sampleNamesInOrder = sampleNamesInOrder;
- this.sampleNameToOffset = sampleNameToOffset;
- }
- }
-
- /**
- * Creates a new lazy loading genotypes context using the LazyParser to create
- * genotypes data on demand.
- *
- * @param parser the parser to be used to load on-demand genotypes data
- * @param unparsedGenotypeData the encoded genotypes data that we will decode if necessary
- * @param nUnparsedGenotypes the number of genotypes that will be produced if / when we actually decode the genotypes data
- */
- @Requires({"parser != null", "unparsedGenotypeData != null", "nUnparsedGenotypes >= 0"})
- public LazyGenotypesContext(final LazyParser parser, final Object unparsedGenotypeData, final int nUnparsedGenotypes) {
- super(EMPTY);
- this.parser = parser;
- this.unparsedGenotypeData = unparsedGenotypeData;
- this.nUnparsedGenotypes = nUnparsedGenotypes;
- }
-
- /**
- * Overrides the genotypes accessor. If we haven't already, decode the genotypes data
- * and store the decoded results in the appropriate variables. Otherwise we just
- * returned the decoded result directly. Note some care needs to be taken here as
- * the value in notToBeDirectlyAccessedGenotypes may diverge from what would be produced
- * by decode, if after the first decode the genotypes themselves are replaced
- * @return
- */
- @Override
- @Ensures("result != null")
- protected ArrayList<Genotype> getGenotypes() {
- decode();
- return notToBeDirectlyAccessedGenotypes;
- }
-
- /**
- * Force us to decode the genotypes, if not already done
- */
- public void decode() {
- if ( ! loaded ) {
- //System.out.printf("Loading genotypes... %s:%d%n", contig, start);
- LazyData parsed = parser.parse(unparsedGenotypeData);
- notToBeDirectlyAccessedGenotypes = parsed.genotypes;
- sampleNamesInOrder = parsed.sampleNamesInOrder;
- sampleNameToOffset = parsed.sampleNameToOffset;
- loaded = true;
- unparsedGenotypeData = null; // don't hold the unparsed data any longer
-
- // warning -- this path allows us to create a VariantContext that doesn't run validateGenotypes()
- // That said, it's not such an important routine -- it's just checking that the genotypes
- // are well formed w.r.t. the alleles list, but this will be enforced within the VCFCodec
- }
- }
-
- /**
- * Overrides the ensure* functionality. If the data hasn't been loaded
- * yet and we want to build the cache, just decode it and we're done. If we've
- * already decoded the data, though, go through the super class
- */
- @Override
- protected synchronized void ensureSampleNameMap() {
- if ( ! loaded ) {
- decode(); // will load up all of the necessary data
- } else {
- super.ensureSampleNameMap();
- }
- }
-
- @Override
- protected synchronized void ensureSampleOrdering() {
- if ( ! loaded ) {
- decode(); // will load up all of the necessary data
- } else {
- super.ensureSampleOrdering();
- }
- }
-
- @Override
- protected void invalidateSampleNameMap() {
- // if the cache is invalidated, and we haven't loaded our data yet, do so
- if ( ! loaded ) decode();
- super.invalidateSampleNameMap();
- }
-
- @Override
- protected void invalidateSampleOrdering() {
- // if the cache is invalidated, and we haven't loaded our data yet, do so
- if ( ! loaded ) decode();
- super.invalidateSampleOrdering();
- }
-
- @Override
- public boolean isEmpty() {
- // optimization -- we know the number of samples in the unparsed data, so use it here to
- // avoid parsing just to know if the genotypes context is empty
- return loaded ? super.isEmpty() : nUnparsedGenotypes == 0;
- }
-
- @Override
- public int size() {
- // optimization -- we know the number of samples in the unparsed data, so use it here to
- // avoid parsing just to know the size of the context
- return loaded ? super.size() : nUnparsedGenotypes;
- }
-
- public Object getUnparsedGenotypeData() {
- return unparsedGenotypeData;
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/VariantContext.java b/src/java/org/broadinstitute/variant/variantcontext/VariantContext.java
deleted file mode 100644
index cc4a369..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/VariantContext.java
+++ /dev/null
@@ -1,1653 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import org.broad.tribble.Feature;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.util.ParsingUtils;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.vcf.*;
-
-import java.util.*;
-
-/**
- * Class VariantContext
- *
- * == High-level overview ==
- *
- * The VariantContext object is a single general class system for representing genetic variation data composed of:
- *
- * * Allele: representing single genetic haplotypes (A, T, ATC, -) (note that null alleles are used here for illustration; see the Allele class for how to represent indels)
- * * Genotype: an assignment of alleles for each chromosome of a single named sample at a particular locus
- * * VariantContext: an abstract class holding all segregating alleles at a locus as well as genotypes
- * for multiple individuals containing alleles at that locus
- *
- * The class system works by defining segregating alleles, creating a variant context representing the segregating
- * information at a locus, and potentially creating and associating genotypes with individuals in the context.
- *
- * All of the classes are highly validating -- call validate() if you modify them -- so you can rely on the
- * self-consistency of the data once you have a VariantContext in hand. The system has a rich set of assessor
- * and manipulator routines, as well as more complex static support routines in VariantContextUtils.
- *
- * The VariantContext (and Genotype) objects are attributed (supporting addition of arbitrary key/value pairs) and
- * filtered (can represent a variation that is viewed as suspect).
- *
- * VariantContexts are dynamically typed, so whether a VariantContext is a SNP, Indel, or NoVariant depends
- * on the properties of the alleles in the context. See the detailed documentation on the Type parameter below.
- *
- * It's also easy to create subcontexts based on selected genotypes.
- *
- * == Working with Variant Contexts ==
- * By default, VariantContexts are immutable. In order to access (in the rare circumstances where you need them)
- * setter routines, you need to create MutableVariantContexts and MutableGenotypes.
- *
- * === Some example data ===
- *
- * Allele A, Aref, T, Tref;
- * Allele del, delRef, ATC, ATCref;
- *
- * A [ref] / T at 10
- * GenomeLoc snpLoc = GenomeLocParser.createGenomeLoc("chr1", 10, 10);
- *
- * A / ATC [ref] from 20-23
- * GenomeLoc delLoc = GenomeLocParser.createGenomeLoc("chr1", 20, 22);
- *
- * // A [ref] / ATC immediately after 20
- * GenomeLoc insLoc = GenomeLocParser.createGenomeLoc("chr1", 20, 20);
- *
- * === Alleles ===
- *
- * See the documentation in the Allele class itself
- *
- * What are they?
- *
- * Alleles can be either reference or non-reference
- *
- * Examples of alleles used here:
- *
- * A = new Allele("A");
- * Aref = new Allele("A", true);
- * T = new Allele("T");
- * ATC = new Allele("ATC");
- *
- * === Creating variant contexts ===
- *
- * ==== By hand ====
- *
- * Here's an example of a A/T polymorphism with the A being reference:
- *
- * <pre>
- * VariantContext vc = new VariantContext(name, snpLoc, Arrays.asList(Aref, T));
- * </pre>
- *
- * If you want to create a non-variant site, just put in a single reference allele
- *
- * <pre>
- * VariantContext vc = new VariantContext(name, snpLoc, Arrays.asList(Aref));
- * </pre>
- *
- * A deletion is just as easy:
- *
- * <pre>
- * VariantContext vc = new VariantContext(name, delLoc, Arrays.asList(ATCref, del));
- * </pre>
- *
- * The only thing that distinguishes between an insertion and deletion is which is the reference allele.
- * An insertion has a reference allele that is smaller than the non-reference allele, and vice versa for deletions.
- *
- * <pre>
- * VariantContext vc = new VariantContext("name", insLoc, Arrays.asList(delRef, ATC));
- * </pre>
- *
- * ==== Converting rods and other data structures to VCs ====
- *
- * You can convert many common types into VariantContexts using the general function:
- *
- * <pre>
- * VariantContextAdaptors.convertToVariantContext(name, myObject)
- * </pre>
- *
- * dbSNP and VCFs, for example, can be passed in as myObject and a VariantContext corresponding to that
- * object will be returned. A null return type indicates that the type isn't yet supported. This is the best
- * and easiest way to create contexts using RODs.
- *
- *
- * === Working with genotypes ===
- *
- * <pre>
- * List<Allele> alleles = Arrays.asList(Aref, T);
- * Genotype g1 = new Genotype(Arrays.asList(Aref, Aref), "g1", 10);
- * Genotype g2 = new Genotype(Arrays.asList(Aref, T), "g2", 10);
- * Genotype g3 = new Genotype(Arrays.asList(T, T), "g3", 10);
- * VariantContext vc = new VariantContext(snpLoc, alleles, Arrays.asList(g1, g2, g3));
- * </pre>
- *
- * At this point we have 3 genotypes in our context, g1-g3.
- *
- * You can assess a good deal of information about the genotypes through the VariantContext:
- *
- * <pre>
- * vc.hasGenotypes()
- * vc.isMonomorphicInSamples()
- * vc.isPolymorphicInSamples()
- * vc.getSamples().size()
- *
- * vc.getGenotypes()
- * vc.getGenotypes().get("g1")
- * vc.hasGenotype("g1")
- *
- * vc.getCalledChrCount()
- * vc.getCalledChrCount(Aref)
- * vc.getCalledChrCount(T)
- * </pre>
- *
- * === NO_CALL alleles ===
- *
- * The system allows one to create Genotypes carrying special NO_CALL alleles that aren't present in the
- * set of context alleles and that represent undetermined alleles in a genotype:
- *
- * Genotype g4 = new Genotype(Arrays.asList(Allele.NO_CALL, Allele.NO_CALL), "NO_DATA_FOR_SAMPLE", 10);
- *
- *
- * === subcontexts ===
- * It's also very easy get subcontext based only the data in a subset of the genotypes:
- *
- * <pre>
- * VariantContext vc12 = vc.subContextFromGenotypes(Arrays.asList(g1,g2));
- * VariantContext vc1 = vc.subContextFromGenotypes(Arrays.asList(g1));
- * </pre>
- *
- * <s3>
- * Fully decoding. Currently VariantContexts support some fields, particularly those
- * stored as generic attributes, to be of any type. For example, a field AB might
- * be naturally a floating point number, 0.51, but when it's read into a VC its
- * not decoded into the Java presentation but left as a string "0.51". A fully
- * decoded VariantContext is one where all values have been converted to their
- * corresponding Java object types, based on the types declared in a VCFHeader.
- *
- * The fullyDecode() takes a header object and creates a new fully decoded VariantContext
- * where all fields are converted to their true java representation. The VCBuilder
- * can be told that all fields are fully decoded, in which case no work is done when
- * asking for a fully decoded version of the VC.
- * </s3>
- *
- * @author depristo
- */
-public class VariantContext implements Feature { // to enable tribble integration
- private final static boolean WARN_ABOUT_BAD_END = true;
- private final static int MAX_ALLELE_SIZE_FOR_NON_SV = 150;
- private boolean fullyDecoded = false;
- protected CommonInfo commonInfo = null;
- public final static double NO_LOG10_PERROR = CommonInfo.NO_LOG10_PERROR;
-
- public final static Set<String> PASSES_FILTERS = Collections.unmodifiableSet(new LinkedHashSet<String>());
-
- /** The location of this VariantContext */
- final protected String contig;
- final protected long start;
- final protected long stop;
- private final String ID;
-
- /** The type (cached for performance reasons) of this context */
- protected Type type = null;
-
- /** A set of the alleles segregating in this context */
- final protected List<Allele> alleles;
-
- /** A mapping from sampleName -> genotype objects for all genotypes associated with this context */
- protected GenotypesContext genotypes = null;
-
- /** Counts for each of the possible Genotype types in this context */
- protected int[] genotypeCounts = null;
-
- public final static GenotypesContext NO_GENOTYPES = GenotypesContext.NO_GENOTYPES;
-
- // a fast cached access point to the ref / alt alleles for biallelic case
- private Allele REF = null;
-
- // set to the alt allele when biallelic, otherwise == null
- private Allele ALT = null;
-
- /* cached monomorphic value: null -> not yet computed, False, True */
- private Boolean monomorphic = null;
-
- /*
-* Determine which genotype fields are in use in the genotypes in VC
-* @return an ordered list of genotype fields in use in VC. If vc has genotypes this will always include GT first
-*/
- public List<String> calcVCFGenotypeKeys(final VCFHeader header) {
- final Set<String> keys = new HashSet<String>();
-
- boolean sawGoodGT = false;
- boolean sawGoodQual = false;
- boolean sawGenotypeFilter = false;
- boolean sawDP = false;
- boolean sawAD = false;
- boolean sawPL = false;
- for (final Genotype g : this.getGenotypes()) {
- keys.addAll(g.getExtendedAttributes().keySet());
- if ( g.isAvailable() ) sawGoodGT = true;
- if ( g.hasGQ() ) sawGoodQual = true;
- if ( g.hasDP() ) sawDP = true;
- if ( g.hasAD() ) sawAD = true;
- if ( g.hasPL() ) sawPL = true;
- if (g.isFiltered()) sawGenotypeFilter = true;
- }
-
- if ( sawGoodQual ) keys.add(VCFConstants.GENOTYPE_QUALITY_KEY);
- if ( sawDP ) keys.add(VCFConstants.DEPTH_KEY);
- if ( sawAD ) keys.add(VCFConstants.GENOTYPE_ALLELE_DEPTHS);
- if ( sawPL ) keys.add(VCFConstants.GENOTYPE_PL_KEY);
- if ( sawGenotypeFilter ) keys.add(VCFConstants.GENOTYPE_FILTER_KEY);
-
- List<String> sortedList = ParsingUtils.sortList(new ArrayList<String>(keys));
-
- // make sure the GT is first
- if (sawGoodGT) {
- final List<String> newList = new ArrayList<String>(sortedList.size()+1);
- newList.add(VCFConstants.GENOTYPE_KEY);
- newList.addAll(sortedList);
- sortedList = newList;
- }
-
- if (sortedList.isEmpty() && header.hasGenotypingData()) {
- // this needs to be done in case all samples are no-calls
- return Collections.singletonList(VCFConstants.GENOTYPE_KEY);
- } else {
- return sortedList;
- }
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // validation mode
- //
- // ---------------------------------------------------------------------------------------------------------
-
- public enum Validation {
- ALLELES,
- GENOTYPES
- }
-
- private final static EnumSet<Validation> NO_VALIDATION = EnumSet.noneOf(Validation.class);
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // constructors: see VariantContextBuilder
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * Copy constructor
- *
- * @param other the VariantContext to copy
- */
- protected VariantContext(VariantContext other) {
- this(other.getSource(), other.getID(), other.getChr(), other.getStart(), other.getEnd(),
- other.getAlleles(), other.getGenotypes(), other.getLog10PError(),
- other.getFiltersMaybeNull(),
- other.getAttributes(),
- other.fullyDecoded, NO_VALIDATION);
- }
-
- /**
- * the actual constructor. Private access only
- *
- * @param source source
- * @param contig the contig
- * @param start the start base (one based)
- * @param stop the stop reference base (one based)
- * @param alleles alleles
- * @param genotypes genotypes map
- * @param log10PError qual
- * @param filters filters: use null for unfiltered and empty set for passes filters
- * @param attributes attributes
- * @param validationToPerform set of validation steps to take
- */
- protected VariantContext(final String source,
- final String ID,
- final String contig,
- final long start,
- final long stop,
- final Collection<Allele> alleles,
- final GenotypesContext genotypes,
- final double log10PError,
- final Set<String> filters,
- final Map<String, Object> attributes,
- final boolean fullyDecoded,
- final EnumSet<Validation> validationToPerform ) {
- if ( contig == null ) { throw new IllegalArgumentException("Contig cannot be null"); }
- this.contig = contig;
- this.start = start;
- this.stop = stop;
-
- // intern for efficiency. equals calls will generate NPE if ID is inappropriately passed in as null
- if ( ID == null || ID.equals("") ) throw new IllegalArgumentException("ID field cannot be the null or the empty string");
- this.ID = ID.equals(VCFConstants.EMPTY_ID_FIELD) ? VCFConstants.EMPTY_ID_FIELD : ID;
-
- this.commonInfo = new CommonInfo(source, log10PError, filters, attributes);
-
- if ( alleles == null ) { throw new IllegalArgumentException("Alleles cannot be null"); }
-
- // we need to make this a LinkedHashSet in case the user prefers a given ordering of alleles
- this.alleles = makeAlleles(alleles);
-
- if ( genotypes == null || genotypes == NO_GENOTYPES ) {
- this.genotypes = NO_GENOTYPES;
- } else {
- this.genotypes = genotypes.immutable();
- }
-
- // cache the REF and ALT alleles
- int nAlleles = alleles.size();
- for ( Allele a : alleles ) {
- if ( a.isReference() ) {
- REF = a;
- } else if ( nAlleles == 2 ) { // only cache ALT when biallelic
- ALT = a;
- }
- }
-
- this.fullyDecoded = fullyDecoded;
-
- if ( ! validationToPerform.isEmpty() ) {
- validate(validationToPerform);
- }
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Selectors
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * This method subsets down to a set of samples.
- *
- * At the same time returns the alleles to just those in use by the samples,
- * if rederiveAllelesFromGenotypes is true, otherwise the full set of alleles
- * in this VC is returned as the set of alleles in the subContext, even if
- * some of those alleles aren't in the samples
- *
- * WARNING: BE CAREFUL WITH rederiveAllelesFromGenotypes UNLESS YOU KNOW WHAT YOU ARE DOING?
- *
- * @param sampleNames the sample names
- * @param rederiveAllelesFromGenotypes if true, returns the alleles to just those in use by the samples, true should be default
- * @return new VariantContext subsetting to just the given samples
- */
- public VariantContext subContextFromSamples(Set<String> sampleNames, final boolean rederiveAllelesFromGenotypes ) {
- if ( sampleNames.containsAll(getSampleNames()) && ! rederiveAllelesFromGenotypes ) {
- return this; // fast path when you don't have any work to do
- } else {
- VariantContextBuilder builder = new VariantContextBuilder(this);
- GenotypesContext newGenotypes = genotypes.subsetToSamples(sampleNames);
-
- if ( rederiveAllelesFromGenotypes ) {
- Set<Allele> allelesFromGenotypes = allelesOfGenotypes(newGenotypes);
-
- // ensure original order of genotypes
- List<Allele> rederivedAlleles = new ArrayList<Allele>(allelesFromGenotypes.size());
- for (Allele allele : alleles)
- if (allelesFromGenotypes.contains(allele))
- rederivedAlleles.add(allele);
-
- builder.alleles(rederivedAlleles);
- }
- else {
- builder.alleles(alleles);
- }
-
- return builder.genotypes(newGenotypes).make();
- }
- }
-
- /**
- * @see #subContextFromSamples(java.util.Set, boolean) with rederiveAllelesFromGenotypes = true
- *
- * @param sampleNames
- * @return
- */
- public VariantContext subContextFromSamples(final Set<String> sampleNames) {
- return subContextFromSamples(sampleNames, true);
- }
-
- public VariantContext subContextFromSample(String sampleName) {
- return subContextFromSamples(Collections.singleton(sampleName));
- }
-
- /**
- * helper routine for subcontext
- * @param genotypes genotypes
- * @return allele set
- */
- private final Set<Allele> allelesOfGenotypes(Collection<Genotype> genotypes) {
- final Set<Allele> alleles = new HashSet<Allele>();
-
- boolean addedref = false;
- for ( final Genotype g : genotypes ) {
- for ( final Allele a : g.getAlleles() ) {
- addedref = addedref || a.isReference();
- if ( a.isCalled() )
- alleles.add(a);
- }
- }
- if ( ! addedref ) alleles.add(getReference());
-
- return alleles;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // type operations
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * see: http://www.ncbi.nlm.nih.gov/bookshelf/br.fcgi?book=handbook&part=ch5&rendertype=table&id=ch5.ch5_t3
- *
- * Format:
- * dbSNP variation class
- * Rules for assigning allele classes
- * Sample allele definition
- *
- * Single Nucleotide Polymorphisms (SNPs)a
- * Strictly defined as single base substitutions involving A, T, C, or G.
- * A/T
- *
- * Deletion/Insertion Polymorphisms (DIPs)
- * Designated using the full sequence of the insertion as one allele, and either a fully
- * defined string for the variant allele or a '-' character to specify the deleted allele.
- * This class will be assigned to a variation if the variation alleles are of different lengths or
- * if one of the alleles is deleted ('-').
- * T/-/CCTA/G
- *
- * No-variation
- * Reports may be submitted for segments of sequence that are assayed and determined to be invariant
- * in the sample.
- * (NoVariation)
- *
- * Mixed
- * Mix of other classes
- *
- * Also supports NO_VARIATION type, used to indicate that the site isn't polymorphic in the population
- *
- *
- * Not currently supported:
- *
- * Heterozygous sequence
- * The term heterozygous is used to specify a region detected by certain methods that do not
- * resolve the polymorphism into a specific sequence motif. In these cases, a unique flanking
- * sequence must be provided to define a sequence context for the variation.
- * (heterozygous)
- *
- * Microsatellite or short tandem repeat (STR)
- * Alleles are designated by providing the repeat motif and the copy number for each allele.
- * Expansion of the allele repeat motif designated in dbSNP into full-length sequence will
- * be only an approximation of the true genomic sequence because many microsatellite markers are
- * not fully sequenced and are resolved as size variants only.
- * (CAC)8/9/10/11
- *
- * Named variant
- * Applies to insertion/deletion polymorphisms of longer sequence features, such as retroposon
- * dimorphism for Alu or line elements. These variations frequently include a deletion '-' indicator
- * for the absent allele.
- * (alu) / -
- *
- * Multi-Nucleotide Polymorphism (MNP)
- * Assigned to variations that are multi-base variations of a single, common length
- * GGA/AGT
- */
- public enum Type {
- NO_VARIATION,
- SNP,
- MNP, // a multi-nucleotide polymorphism
- INDEL,
- SYMBOLIC,
- MIXED,
- }
-
- /**
- * Determines (if necessary) and returns the type of this variation by examining the alleles it contains.
- *
- * @return the type of this VariantContext
- **/
- public Type getType() {
- if ( type == null )
- determineType();
-
- return type;
- }
-
- /**
- * convenience method for SNPs
- *
- * @return true if this is a SNP, false otherwise
- */
- public boolean isSNP() { return getType() == Type.SNP; }
-
-
- /**
- * convenience method for variants
- *
- * @return true if this is a variant allele, false if it's reference
- */
- public boolean isVariant() { return getType() != Type.NO_VARIATION; }
-
- /**
- * convenience method for point events
- *
- * @return true if this is a SNP or ref site, false if it's an indel or mixed event
- */
- public boolean isPointEvent() { return isSNP() || !isVariant(); }
-
- /**
- * convenience method for indels
- *
- * @return true if this is an indel, false otherwise
- */
- public boolean isIndel() { return getType() == Type.INDEL; }
-
- /**
- * @return true if the alleles indicate a simple insertion (i.e., the reference allele is Null)
- */
- public boolean isSimpleInsertion() {
- // can't just call !isSimpleDeletion() because of complex indels
- return isSimpleIndel() && getReference().length() == 1;
- }
-
- /**
- * @return true if the alleles indicate a simple deletion (i.e., a single alt allele that is Null)
- */
- public boolean isSimpleDeletion() {
- // can't just call !isSimpleInsertion() because of complex indels
- return isSimpleIndel() && getAlternateAllele(0).length() == 1;
- }
-
- /**
- * @return true if the alleles indicate a simple indel, false otherwise.
- */
- public boolean isSimpleIndel() {
- return getType() == Type.INDEL // allelic lengths differ
- && isBiallelic() // exactly 2 alleles
- && getReference().length() > 0 // ref is not null or symbolic
- && getAlternateAllele(0).length() > 0 // alt is not null or symbolic
- && getReference().getBases()[0] == getAlternateAllele(0).getBases()[0] // leading bases match for both alleles
- && (getReference().length() == 1 || getAlternateAllele(0).length() == 1);
- }
-
- /**
- * @return true if the alleles indicate neither a simple deletion nor a simple insertion
- */
- public boolean isComplexIndel() {
- return isIndel() && !isSimpleDeletion() && !isSimpleInsertion();
- }
-
- public boolean isSymbolic() {
- return getType() == Type.SYMBOLIC;
- }
-
- public boolean isStructuralIndel() {
- if ( getType() == Type.INDEL ) {
- List<Integer> sizes = getIndelLengths();
- if ( sizes != null ) {
- for ( Integer length : sizes ) {
- if ( length > MAX_ALLELE_SIZE_FOR_NON_SV ) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- /**
- *
- * @return true if the variant is symbolic or a large indel
- */
- public boolean isSymbolicOrSV() {
- return isSymbolic() || isStructuralIndel();
- }
-
- public boolean isMNP() {
- return getType() == Type.MNP;
- }
-
- /**
- * convenience method for indels
- *
- * @return true if this is an mixed variation, false otherwise
- */
- public boolean isMixed() { return getType() == Type.MIXED; }
-
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Generic accessors
- //
- // ---------------------------------------------------------------------------------------------------------
-
- public boolean hasID() {
- return getID() != VCFConstants.EMPTY_ID_FIELD;
- }
-
- public boolean emptyID() {
- return ! hasID();
- }
-
- public String getID() {
- return ID;
- }
-
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // get routines to access context info fields
- //
- // ---------------------------------------------------------------------------------------------------------
- public String getSource() { return commonInfo.getName(); }
- public Set<String> getFiltersMaybeNull() { return commonInfo.getFiltersMaybeNull(); }
- public Set<String> getFilters() { return commonInfo.getFilters(); }
- public boolean isFiltered() { return commonInfo.isFiltered(); }
- public boolean isNotFiltered() { return commonInfo.isNotFiltered(); }
- public boolean filtersWereApplied() { return commonInfo.filtersWereApplied(); }
- public boolean hasLog10PError() { return commonInfo.hasLog10PError(); }
- public double getLog10PError() { return commonInfo.getLog10PError(); }
- public double getPhredScaledQual() { return commonInfo.getPhredScaledQual(); }
-
- public Map<String, Object> getAttributes() { return commonInfo.getAttributes(); }
- public boolean hasAttribute(String key) { return commonInfo.hasAttribute(key); }
- public Object getAttribute(String key) { return commonInfo.getAttribute(key); }
-
- public Object getAttribute(String key, Object defaultValue) {
- return commonInfo.getAttribute(key, defaultValue);
- }
-
- public String getAttributeAsString(String key, String defaultValue) { return commonInfo.getAttributeAsString(key, defaultValue); }
- public int getAttributeAsInt(String key, int defaultValue) { return commonInfo.getAttributeAsInt(key, defaultValue); }
- public double getAttributeAsDouble(String key, double defaultValue) { return commonInfo.getAttributeAsDouble(key, defaultValue); }
- public boolean getAttributeAsBoolean(String key, boolean defaultValue) { return commonInfo.getAttributeAsBoolean(key, defaultValue); }
-
- public CommonInfo getCommonInfo() {
- return commonInfo;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Working with alleles
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * @return the reference allele for this context
- */
- public Allele getReference() {
- Allele ref = REF;
- if ( ref == null )
- throw new IllegalStateException("BUG: no reference allele found at " + this);
- return ref;
- }
-
-
- /**
- * @return true if the context is strictly bi-allelic
- */
- public boolean isBiallelic() {
- return getNAlleles() == 2;
- }
-
- /**
- * @return The number of segregating alleles in this context
- */
- public int getNAlleles() {
- return alleles.size();
- }
-
- /**
- * Returns the maximum ploidy of all samples in this VC, or default if there are no genotypes
- *
- * This function is caching, so it's only expensive on the first call
- *
- * @param defaultPloidy the default ploidy, if all samples are no-called
- * @return default, or the max ploidy
- */
- public int getMaxPloidy(final int defaultPloidy) {
- return genotypes.getMaxPloidy(defaultPloidy);
- }
-
- /**
- * @return The allele sharing the same bases as this String. A convenience method; better to use byte[]
- */
- public Allele getAllele(String allele) {
- return getAllele(allele.getBytes());
- }
-
- /**
- * @return The allele sharing the same bases as this byte[], or null if no such allele is present.
- */
- public Allele getAllele(byte[] allele) {
- return Allele.getMatchingAllele(getAlleles(), allele);
- }
-
- /**
- * @return True if this context contains Allele allele, or false otherwise
- */
- public boolean hasAllele(final Allele allele) {
- return hasAllele(allele, false, true);
- }
-
- public boolean hasAllele(final Allele allele, final boolean ignoreRefState) {
- return hasAllele(allele, ignoreRefState, true);
- }
-
- public boolean hasAlternateAllele(final Allele allele) {
- return hasAllele(allele, false, false);
- }
-
- public boolean hasAlternateAllele(final Allele allele, final boolean ignoreRefState) {
- return hasAllele(allele, ignoreRefState, false);
- }
-
- private boolean hasAllele(final Allele allele, final boolean ignoreRefState, final boolean considerRefAllele) {
- if ( (considerRefAllele && allele == REF) || allele == ALT ) // optimization for cached cases
- return true;
-
- final List<Allele> allelesToConsider = considerRefAllele ? getAlleles() : getAlternateAlleles();
- for ( Allele a : allelesToConsider ) {
- if ( a.equals(allele, ignoreRefState) )
- return true;
- }
-
- return false;
- }
-
-
- /**
- * Gets the alleles. This method should return all of the alleles present at the location,
- * including the reference allele. There are no constraints imposed on the ordering of alleles
- * in the set. If the reference is not an allele in this context it will not be included.
- *
- * @return the set of alleles
- */
- public List<Allele> getAlleles() { return alleles; }
-
- /**
- * Gets the alternate alleles. This method should return all the alleles present at the location,
- * NOT including the reference allele. There are no constraints imposed on the ordering of alleles
- * in the set.
- *
- * @return the set of alternate alleles
- */
- public List<Allele> getAlternateAlleles() {
- return alleles.subList(1, alleles.size());
- }
-
- /**
- * Gets the sizes of the alternate alleles if they are insertion/deletion events, and returns a list of their sizes
- *
- * @return a list of indel lengths ( null if not of type indel or mixed )
- */
- public List<Integer> getIndelLengths() {
- if ( getType() != Type.INDEL && getType() != Type.MIXED ) {
- return null;
- }
-
- List<Integer> lengths = new ArrayList<Integer>();
- for ( Allele a : getAlternateAlleles() ) {
- lengths.add(a.length() - getReference().length());
- }
-
- return lengths;
- }
-
- /**
- * @param i -- the ith allele (from 0 to n - 2 for a context with n alleles including a reference allele)
- * @return the ith non-reference allele in this context
- * @throws IllegalArgumentException if i is invalid
- */
- public Allele getAlternateAllele(int i) {
- return alleles.get(i+1);
- }
-
- /**
- * @param other VariantContext whose alleles to compare against
- * @return true if this VariantContext has the same alleles (both ref and alts) as other,
- * regardless of ordering. Otherwise returns false.
- */
- public boolean hasSameAllelesAs ( final VariantContext other ) {
- return hasSameAlternateAllelesAs(other) && other.getReference().equals(getReference(), false);
- }
-
- /**
- * @param other VariantContext whose alternate alleles to compare against
- * @return true if this VariantContext has the same alternate alleles as other,
- * regardless of ordering. Otherwise returns false.
- */
- public boolean hasSameAlternateAllelesAs ( final VariantContext other ) {
- List<Allele> thisAlternateAlleles = getAlternateAlleles();
- List<Allele> otherAlternateAlleles = other.getAlternateAlleles();
-
- if ( thisAlternateAlleles.size() != otherAlternateAlleles.size() ) {
- return false;
- }
-
- for ( Allele allele : thisAlternateAlleles ) {
- if ( ! otherAlternateAlleles.contains(allele) ) {
- return false;
- }
- }
-
- return true;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Working with genotypes
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * @return the number of samples in the context
- */
- public int getNSamples() {
- return genotypes.size();
- }
-
- /**
- * @return true if the context has associated genotypes
- */
- public boolean hasGenotypes() {
- return ! genotypes.isEmpty();
- }
-
- public boolean hasGenotypes(Collection<String> sampleNames) {
- return genotypes.containsSamples(sampleNames);
- }
-
- /**
- * @return set of all Genotypes associated with this context
- */
- public GenotypesContext getGenotypes() {
- return genotypes;
- }
-
- public Iterable<Genotype> getGenotypesOrderedByName() {
- return genotypes.iterateInSampleNameOrder();
- }
-
- public Iterable<Genotype> getGenotypesOrderedBy(Iterable<String> sampleOrdering) {
- return genotypes.iterateInSampleNameOrder(sampleOrdering);
- }
-
- /**
- * Returns a map from sampleName -> Genotype for the genotype associated with sampleName. Returns a map
- * for consistency with the multi-get function.
- *
- * @param sampleName the sample name
- * @return mapping from sample name to genotype
- * @throws IllegalArgumentException if sampleName isn't bound to a genotype
- */
- public GenotypesContext getGenotypes(String sampleName) {
- return getGenotypes(Collections.singleton(sampleName));
- }
-
- /**
- * Returns a map from sampleName -> Genotype for each sampleName in sampleNames. Returns a map
- * for consistency with the multi-get function.
- *
- * For testing convenience only
- *
- * @param sampleNames a unique list of sample names
- * @return subsetting genotypes context
- * @throws IllegalArgumentException if sampleName isn't bound to a genotype
- */
- protected GenotypesContext getGenotypes(Collection<String> sampleNames) {
- return getGenotypes().subsetToSamples(new HashSet<String>(sampleNames));
- }
-
- public GenotypesContext getGenotypes(Set<String> sampleNames) {
- return getGenotypes().subsetToSamples(sampleNames);
- }
-
-
- /**
- * @return the set of all sample names in this context, not ordered
- */
- public Set<String> getSampleNames() {
- return getGenotypes().getSampleNames();
- }
-
- public List<String> getSampleNamesOrderedByName() {
- return getGenotypes().getSampleNamesOrderedByName();
- }
-
- /**
- * @param sample the sample name
- *
- * @return the Genotype associated with the given sample in this context or null if the sample is not in this context
- */
- public Genotype getGenotype(String sample) {
- return getGenotypes().get(sample);
- }
-
- public boolean hasGenotype(String sample) {
- return getGenotypes().containsSample(sample);
- }
-
- public Genotype getGenotype(int ith) {
- return genotypes.get(ith);
- }
-
-
- /**
- * Returns the number of chromosomes carrying any allele in the genotypes (i.e., excluding NO_CALLS)
- *
- * @return chromosome count
- */
- public int getCalledChrCount() {
- final Set<String> noSamples = Collections.emptySet();
- return getCalledChrCount(noSamples);
- }
-
- /**
- * Returns the number of chromosomes carrying any allele in the genotypes (i.e., excluding NO_CALLS)
- *
- * @param sampleIds IDs of samples to take into account. If empty then all samples are included.
- * @return chromosome count
- */
- public int getCalledChrCount(Set<String> sampleIds) {
- int n = 0;
- GenotypesContext genotypes = sampleIds.isEmpty() ? getGenotypes() : getGenotypes(sampleIds);
-
- for ( final Genotype g : genotypes) {
- for ( final Allele a : g.getAlleles() )
- n += a.isNoCall() ? 0 : 1;
- }
-
- return n;
- }
-
- /**
- * Returns the number of chromosomes carrying allele A in the genotypes
- *
- * @param a allele
- * @return chromosome count
- */
- public int getCalledChrCount(Allele a) {
- return getCalledChrCount(a,new HashSet<String>(0));
- }
-
- /**
- * Returns the number of chromosomes carrying allele A in the genotypes
- *
- * @param a allele
- * @param sampleIds - IDs of samples to take into account. If empty then all samples are included.
- * @return chromosome count
- */
- public int getCalledChrCount(Allele a, Set<String> sampleIds) {
- int n = 0;
- GenotypesContext genotypes = sampleIds.isEmpty() ? getGenotypes() : getGenotypes(sampleIds);
-
- for ( final Genotype g : genotypes ) {
- n += g.countAllele(a);
- }
-
- return n;
- }
-
- /**
- * Genotype-specific functions -- are the genotypes monomorphic w.r.t. to the alleles segregating at this
- * site? That is, is the number of alternate alleles among all fo the genotype == 0?
- *
- * @return true if it's monomorphic
- */
- public boolean isMonomorphicInSamples() {
- if ( monomorphic == null )
- monomorphic = ! isVariant() || (hasGenotypes() && getCalledChrCount(getReference()) == getCalledChrCount());
- return monomorphic;
- }
-
- /**
- * Genotype-specific functions -- are the genotypes polymorphic w.r.t. to the alleles segregating at this
- * site? That is, is the number of alternate alleles among all fo the genotype > 0?
- *
- * @return true if it's polymorphic
- */
- public boolean isPolymorphicInSamples() {
- return ! isMonomorphicInSamples();
- }
-
- private void calculateGenotypeCounts() {
- if ( genotypeCounts == null ) {
- genotypeCounts = new int[GenotypeType.values().length];
-
- for ( final Genotype g : getGenotypes() ) {
- genotypeCounts[g.getType().ordinal()]++;
- }
- }
- }
-
- /**
- * Genotype-specific functions -- how many no-calls are there in the genotypes?
- *
- * @return number of no calls
- */
- public int getNoCallCount() {
- calculateGenotypeCounts();
- return genotypeCounts[GenotypeType.NO_CALL.ordinal()];
- }
-
- /**
- * Genotype-specific functions -- how many hom ref calls are there in the genotypes?
- *
- * @return number of hom ref calls
- */
- public int getHomRefCount() {
- calculateGenotypeCounts();
- return genotypeCounts[GenotypeType.HOM_REF.ordinal()];
- }
-
- /**
- * Genotype-specific functions -- how many het calls are there in the genotypes?
- *
- * @return number of het calls
- */
- public int getHetCount() {
- calculateGenotypeCounts();
- return genotypeCounts[GenotypeType.HET.ordinal()];
- }
-
- /**
- * Genotype-specific functions -- how many hom var calls are there in the genotypes?
- *
- * @return number of hom var calls
- */
- public int getHomVarCount() {
- calculateGenotypeCounts();
- return genotypeCounts[GenotypeType.HOM_VAR.ordinal()];
- }
-
- /**
- * Genotype-specific functions -- how many mixed calls are there in the genotypes?
- *
- * @return number of mixed calls
- */
- public int getMixedCount() {
- calculateGenotypeCounts();
- return genotypeCounts[GenotypeType.MIXED.ordinal()];
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // validation: extra-strict validation routines for paranoid users
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * Run all extra-strict validation tests on a Variant Context object
- *
- * @param reportedReference the reported reference allele
- * @param observedReference the actual reference allele
- * @param rsIDs the true dbSNP IDs
- */
- public void extraStrictValidation(final Allele reportedReference, final Allele observedReference, final Set<String> rsIDs) {
- // validate the reference
- validateReferenceBases(reportedReference, observedReference);
-
- // validate the RS IDs
- validateRSIDs(rsIDs);
-
- // validate the altenate alleles
- validateAlternateAlleles();
-
- // validate the AN and AC fields
- validateChromosomeCounts();
-
- // TODO: implement me
- //checkReferenceTrack();
- }
-
- public void validateReferenceBases(final Allele reportedReference, final Allele observedReference) {
- if ( reportedReference != null && !reportedReference.basesMatch(observedReference) ) {
- throw new TribbleException.InternalCodecException(String.format("the REF allele is incorrect for the record at position %s:%d, fasta says %s vs. VCF says %s", getChr(), getStart(), observedReference.getBaseString(), reportedReference.getBaseString()));
- }
- }
-
- public void validateRSIDs(Set<String> rsIDs) {
- if ( rsIDs != null && hasID() ) {
- for ( String id : getID().split(VCFConstants.ID_FIELD_SEPARATOR) ) {
- if ( id.startsWith("rs") && !rsIDs.contains(id) )
- throw new TribbleException.InternalCodecException(String.format("the rsID %s for the record at position %s:%d is not in dbSNP", id, getChr(), getStart()));
- }
- }
- }
-
- public void validateAlternateAlleles() {
- if ( !hasGenotypes() )
- return;
-
- List<Allele> reportedAlleles = getAlleles();
- Set<Allele> observedAlleles = new HashSet<Allele>();
- observedAlleles.add(getReference());
- for ( final Genotype g : getGenotypes() ) {
- if ( g.isCalled() )
- observedAlleles.addAll(g.getAlleles());
- }
- if ( observedAlleles.contains(Allele.NO_CALL) )
- observedAlleles.remove(Allele.NO_CALL);
-
- if ( reportedAlleles.size() != observedAlleles.size() )
- throw new TribbleException.InternalCodecException(String.format("one or more of the ALT allele(s) for the record at position %s:%d are not observed at all in the sample genotypes", getChr(), getStart()));
-
- int originalSize = reportedAlleles.size();
- // take the intersection and see if things change
- observedAlleles.retainAll(reportedAlleles);
- if ( observedAlleles.size() != originalSize )
- throw new TribbleException.InternalCodecException(String.format("one or more of the ALT allele(s) for the record at position %s:%d are not observed at all in the sample genotypes", getChr(), getStart()));
- }
-
- public void validateChromosomeCounts() {
- if ( !hasGenotypes() )
- return;
-
- // AN
- if ( hasAttribute(VCFConstants.ALLELE_NUMBER_KEY) ) {
- int reportedAN = Integer.valueOf(getAttribute(VCFConstants.ALLELE_NUMBER_KEY).toString());
- int observedAN = getCalledChrCount();
- if ( reportedAN != observedAN )
- throw new TribbleException.InternalCodecException(String.format("the Allele Number (AN) tag is incorrect for the record at position %s:%d, %d vs. %d", getChr(), getStart(), reportedAN, observedAN));
- }
-
- // AC
- if ( hasAttribute(VCFConstants.ALLELE_COUNT_KEY) ) {
- ArrayList<Integer> observedACs = new ArrayList<Integer>();
-
- // if there are alternate alleles, record the relevant tags
- if ( getAlternateAlleles().size() > 0 ) {
- for ( Allele allele : getAlternateAlleles() ) {
- observedACs.add(getCalledChrCount(allele));
- }
- }
- else { // otherwise, set them to 0
- observedACs.add(0);
- }
-
- if ( getAttribute(VCFConstants.ALLELE_COUNT_KEY) instanceof List ) {
- final List reportedACs = (List)getAttribute(VCFConstants.ALLELE_COUNT_KEY);
- if ( observedACs.size() != reportedACs.size() )
- throw new TribbleException.InternalCodecException(String.format("the Allele Count (AC) tag doesn't have the correct number of values for the record at position %s:%d, %d vs. %d", getChr(), getStart(), reportedACs.size(), observedACs.size()));
- for (int i = 0; i < observedACs.size(); i++) {
- // need to cast to int to make sure we don't have an issue below with object equals (earlier bug) - EB
- final int reportedAC = Integer.valueOf(reportedACs.get(i).toString());
- if ( reportedAC != observedACs.get(i) )
- throw new TribbleException.InternalCodecException(String.format("the Allele Count (AC) tag is incorrect for the record at position %s:%d, %s vs. %d", getChr(), getStart(), reportedAC, observedACs.get(i)));
- }
- } else {
- if ( observedACs.size() != 1 )
- throw new TribbleException.InternalCodecException(String.format("the Allele Count (AC) tag doesn't have enough values for the record at position %s:%d", getChr(), getStart()));
- int reportedAC = Integer.valueOf(getAttribute(VCFConstants.ALLELE_COUNT_KEY).toString());
- if ( reportedAC != observedACs.get(0) )
- throw new TribbleException.InternalCodecException(String.format("the Allele Count (AC) tag is incorrect for the record at position %s:%d, %d vs. %d", getChr(), getStart(), reportedAC, observedACs.get(0)));
- }
- }
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // validation: the normal validation routines are called automatically upon creation of the VC
- //
- // ---------------------------------------------------------------------------------------------------------
-
- private boolean validate(final EnumSet<Validation> validationToPerform) {
- validateStop();
- for (final Validation val : validationToPerform ) {
- switch (val) {
- case ALLELES: validateAlleles(); break;
- case GENOTYPES: validateGenotypes(); break;
- default: throw new IllegalArgumentException("Unexpected validation mode " + val);
- }
- }
-
- return true;
- }
-
- /**
- * Check that getEnd() == END from the info field, if it's present
- */
- private void validateStop() {
- if ( hasAttribute(VCFConstants.END_KEY) ) {
- final int end = getAttributeAsInt(VCFConstants.END_KEY, -1);
- assert end != -1;
- if ( end != getEnd() ) {
- final String message = "Badly formed variant context at location " + getChr() + ":"
- + getStart() + "; getEnd() was " + getEnd()
- + " but this VariantContext contains an END key with value " + end;
- if ( GeneralUtils.DEBUG_MODE_ENABLED && WARN_ABOUT_BAD_END ) {
- System.err.println(message);
- }
- else {
- throw new TribbleException(message);
- }
- }
- } else {
- final long length = (stop - start) + 1;
- if ( ! hasSymbolicAlleles() && length != getReference().length() ) {
- throw new IllegalStateException("BUG: GenomeLoc " + contig + ":" + start + "-" + stop + " has a size == " + length + " but the variation reference allele has length " + getReference().length() + " this = " + this);
- }
- }
- }
-
- private void validateAlleles() {
-
- boolean alreadySeenRef = false;
-
- for ( final Allele allele : alleles ) {
- // make sure there's only one reference allele
- if ( allele.isReference() ) {
- if ( alreadySeenRef ) throw new IllegalArgumentException("BUG: Received two reference tagged alleles in VariantContext " + alleles + " this=" + this);
- alreadySeenRef = true;
- }
-
- if ( allele.isNoCall() ) {
- throw new IllegalArgumentException("BUG: Cannot add a no call allele to a variant context " + alleles + " this=" + this);
- }
- }
-
- // make sure there's one reference allele
- if ( ! alreadySeenRef )
- throw new IllegalArgumentException("No reference allele found in VariantContext");
- }
-
- private void validateGenotypes() {
- if ( this.genotypes == null ) throw new IllegalStateException("Genotypes is null");
-
- for ( final Genotype g : this.genotypes ) {
- if ( g.isAvailable() ) {
- for ( Allele gAllele : g.getAlleles() ) {
- if ( ! hasAllele(gAllele) && gAllele.isCalled() )
- throw new IllegalStateException("Allele in genotype " + gAllele + " not in the variant context " + alleles);
- }
- }
- }
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // utility routines
- //
- // ---------------------------------------------------------------------------------------------------------
-
- private void determineType() {
- if ( type == null ) {
- switch ( getNAlleles() ) {
- case 0:
- throw new IllegalStateException("Unexpected error: requested type of VariantContext with no alleles!" + this);
- case 1:
- // note that this doesn't require a reference allele. You can be monomorphic independent of having a
- // reference allele
- type = Type.NO_VARIATION;
- break;
- default:
- determinePolymorphicType();
- }
- }
- }
-
- private void determinePolymorphicType() {
- type = null;
-
- // do a pairwise comparison of all alleles against the reference allele
- for ( Allele allele : alleles ) {
- if ( allele == REF )
- continue;
-
- // find the type of this allele relative to the reference
- Type biallelicType = typeOfBiallelicVariant(REF, allele);
-
- // for the first alternate allele, set the type to be that one
- if ( type == null ) {
- type = biallelicType;
- }
- // if the type of this allele is different from that of a previous one, assign it the MIXED type and quit
- else if ( biallelicType != type ) {
- type = Type.MIXED;
- return;
- }
- }
- }
-
- private static Type typeOfBiallelicVariant(Allele ref, Allele allele) {
- if ( ref.isSymbolic() )
- throw new IllegalStateException("Unexpected error: encountered a record with a symbolic reference allele");
-
- if ( allele.isSymbolic() )
- return Type.SYMBOLIC;
-
- if ( ref.length() == allele.length() ) {
- if ( allele.length() == 1 )
- return Type.SNP;
- else
- return Type.MNP;
- }
-
- // Important note: previously we were checking that one allele is the prefix of the other. However, that's not an
- // appropriate check as can be seen from the following example:
- // REF = CTTA and ALT = C,CT,CA
- // This should be assigned the INDEL type but was being marked as a MIXED type because of the prefix check.
- // In truth, it should be absolutely impossible to return a MIXED type from this method because it simply
- // performs a pairwise comparison of a single alternate allele against the reference allele (whereas the MIXED type
- // is reserved for cases of multiple alternate alleles of different types). Therefore, if we've reached this point
- // in the code (so we're not a SNP, MNP, or symbolic allele), we absolutely must be an INDEL.
-
- return Type.INDEL;
-
- // old incorrect logic:
- // if (oneIsPrefixOfOther(ref, allele))
- // return Type.INDEL;
- // else
- // return Type.MIXED;
- }
-
- public String toString() {
- // Note: passing genotypes to String.format() will implicitly decode the genotypes
- // This may not be desirable, so don't decode by default
-
- return genotypes.isLazyWithData() ? toStringUnparsedGenotypes() : toStringDecodeGenotypes();
- }
-
- public String toStringDecodeGenotypes() {
- return String.format("[VC %s @ %s Q%s of type=%s alleles=%s attr=%s GT=%s",
- getSource(), contig + ":" + (start - stop == 0 ? start : start + "-" + stop),
- hasLog10PError() ? String.format("%.2f", getPhredScaledQual()) : ".",
- this.getType(),
- ParsingUtils.sortList(this.getAlleles()),
- ParsingUtils.sortedString(this.getAttributes()),
- this.getGenotypes());
- }
-
- private String toStringUnparsedGenotypes() {
- return String.format("[VC %s @ %s Q%s of type=%s alleles=%s attr=%s GT=%s",
- getSource(), contig + ":" + (start - stop == 0 ? start : start + "-" + stop),
- hasLog10PError() ? String.format("%.2f", getPhredScaledQual()) : ".",
- this.getType(),
- ParsingUtils.sortList(this.getAlleles()),
- ParsingUtils.sortedString(this.getAttributes()),
- ((LazyGenotypesContext)this.genotypes).getUnparsedGenotypeData());
- }
-
- public String toStringWithoutGenotypes() {
- return String.format("[VC %s @ %s Q%s of type=%s alleles=%s attr=%s",
- getSource(), contig + ":" + (start - stop == 0 ? start : start + "-" + stop),
- hasLog10PError() ? String.format("%.2f", getPhredScaledQual()) : ".",
- this.getType(),
- ParsingUtils.sortList(this.getAlleles()),
- ParsingUtils.sortedString(this.getAttributes()));
- }
-
- // protected basic manipulation routines
- private static List<Allele> makeAlleles(Collection<Allele> alleles) {
- final List<Allele> alleleList = new ArrayList<Allele>(alleles.size());
-
- boolean sawRef = false;
- for ( final Allele a : alleles ) {
- for ( final Allele b : alleleList ) {
- if ( a.equals(b, true) )
- throw new IllegalArgumentException("Duplicate allele added to VariantContext: " + a);
- }
-
- // deal with the case where the first allele isn't the reference
- if ( a.isReference() ) {
- if ( sawRef )
- throw new IllegalArgumentException("Alleles for a VariantContext must contain at most one reference allele: " + alleles);
- alleleList.add(0, a);
- sawRef = true;
- }
- else
- alleleList.add(a);
- }
-
- if ( alleleList.isEmpty() )
- throw new IllegalArgumentException("Cannot create a VariantContext with an empty allele list");
-
- if ( alleleList.get(0).isNonReference() )
- throw new IllegalArgumentException("Alleles for a VariantContext must contain at least one reference allele: " + alleles);
-
- return alleleList;
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // Fully decode
- //
- // ---------------------------------------------------------------------------------------------------------
-
- /**
- * Return a VC equivalent to this one but where all fields are fully decoded
- *
- * See VariantContext document about fully decoded
- *
- * @param header containing types about all fields in this VC
- * @return a fully decoded version of this VC
- */
- public VariantContext fullyDecode(final VCFHeader header, final boolean lenientDecoding) {
- if ( isFullyDecoded() )
- return this;
- else {
- // TODO -- warning this is potentially very expensive as it creates copies over and over
- final VariantContextBuilder builder = new VariantContextBuilder(this);
- fullyDecodeInfo(builder, header, lenientDecoding);
- fullyDecodeGenotypes(builder, header);
- builder.fullyDecoded(true);
- return builder.make();
- }
- }
-
- /**
- * See VariantContext document about fully decoded
- * @return true if this is a fully decoded VC
- */
- public boolean isFullyDecoded() {
- return fullyDecoded;
- }
-
- private final void fullyDecodeInfo(final VariantContextBuilder builder, final VCFHeader header, final boolean lenientDecoding) {
- builder.attributes(fullyDecodeAttributes(getAttributes(), header, lenientDecoding));
- }
-
- private final Map<String, Object> fullyDecodeAttributes(final Map<String, Object> attributes,
- final VCFHeader header,
- final boolean lenientDecoding) {
- final Map<String, Object> newAttributes = new HashMap<String, Object>(10);
-
- for ( final Map.Entry<String, Object> attr : attributes.entrySet() ) {
- final String field = attr.getKey();
-
- if ( field.equals(VCFConstants.GENOTYPE_FILTER_KEY) )
- continue; // gross, FT is part of the extended attributes
-
- final VCFCompoundHeaderLine format = VariantContextUtils.getMetaDataForField(header, field);
- final Object decoded = decodeValue(field, attr.getValue(), format);
-
- if ( decoded != null &&
- ! lenientDecoding
- && format.getCountType() != VCFHeaderLineCount.UNBOUNDED
- && format.getType() != VCFHeaderLineType.Flag ) { // we expect exactly the right number of elements
- final int obsSize = decoded instanceof List ? ((List) decoded).size() : 1;
- final int expSize = format.getCount(this);
- if ( obsSize != expSize ) {
- throw new TribbleException.InvalidHeader("Discordant field size detected for field " +
- field + " at " + getChr() + ":" + getStart() + ". Field had " + obsSize + " values " +
- "but the header says this should have " + expSize + " values based on header record " +
- format);
- }
- }
- newAttributes.put(field, decoded);
- }
-
- return newAttributes;
- }
-
- private final Object decodeValue(final String field, final Object value, final VCFCompoundHeaderLine format) {
- if ( value instanceof String ) {
- if ( field.equals(VCFConstants.GENOTYPE_PL_KEY) )
- return GenotypeLikelihoods.fromPLField((String)value);
-
- final String string = (String)value;
- if ( string.indexOf(",") != -1 ) {
- final String[] splits = string.split(",");
- final List<Object> values = new ArrayList<Object>(splits.length);
- for ( int i = 0; i < splits.length; i++ )
- values.add(decodeOne(field, splits[i], format));
- return values;
- } else {
- return decodeOne(field, string, format);
- }
- } else if ( value instanceof List && (((List) value).get(0)) instanceof String ) {
- final List<String> asList = (List<String>)value;
- final List<Object> values = new ArrayList<Object>(asList.size());
- for ( final String s : asList )
- values.add(decodeOne(field, s, format));
- return values;
- } else {
- return value;
- }
-
- // allowMissingValuesComparedToHeader
- }
-
- private final Object decodeOne(final String field, final String string, final VCFCompoundHeaderLine format) {
- try {
- if ( string.equals(VCFConstants.MISSING_VALUE_v4) )
- return null;
- else {
- switch ( format.getType() ) {
- case Character: return string;
- case Flag:
- final boolean b = Boolean.valueOf(string) || string.equals("1");
- if ( b == false )
- throw new TribbleException("VariantContext FLAG fields " + field + " cannot contain false values"
- + " as seen at " + getChr() + ":" + getStart());
- return b;
- case String: return string;
- case Integer: return Integer.valueOf(string);
- case Float: return Double.valueOf(string);
- default: throw new TribbleException("Unexpected type for field" + field);
- }
- }
- } catch (NumberFormatException e) {
- throw new TribbleException("Could not decode field " + field + " with value " + string + " of declared type " + format.getType());
- }
- }
-
- private final void fullyDecodeGenotypes(final VariantContextBuilder builder, final VCFHeader header) {
- final GenotypesContext gc = new GenotypesContext();
- for ( final Genotype g : getGenotypes() ) {
- gc.add(fullyDecodeGenotypes(g, header));
- }
- builder.genotypesNoValidation(gc);
- }
-
- private final Genotype fullyDecodeGenotypes(final Genotype g, final VCFHeader header) {
- final Map<String, Object> map = fullyDecodeAttributes(g.getExtendedAttributes(), header, true);
- return new GenotypeBuilder(g).attributes(map).make();
- }
-
- // ---------------------------------------------------------------------------------------------------------
- //
- // tribble integration routines -- not for public consumption
- //
- // ---------------------------------------------------------------------------------------------------------
- public String getChr() {
- return contig;
- }
-
- public int getStart() {
- return (int)start;
- }
-
- public int getEnd() {
- return (int)stop;
- }
-
- public boolean hasSymbolicAlleles() {
- return hasSymbolicAlleles(getAlleles());
- }
-
- public static boolean hasSymbolicAlleles( final List<Allele> alleles ) {
- for ( final Allele a: alleles ) {
- if (a.isSymbolic()) {
- return true;
- }
- }
- return false;
- }
-
- public Allele getAltAlleleWithHighestAlleleCount() {
- // optimization: for bi-allelic sites, just return the 1only alt allele
- if ( isBiallelic() )
- return getAlternateAllele(0);
-
- Allele best = null;
- int maxAC1 = 0;
- for ( Allele a : getAlternateAlleles() ) {
- final int ac = getCalledChrCount(a);
- if ( ac >= maxAC1 ) {
- maxAC1 = ac;
- best = a;
- }
-
- }
- return best;
- }
-
- /**
- * Lookup the index of allele in this variant context
- *
- * @param allele the allele whose index we want to get
- * @return the index of the allele into getAlleles(), or -1 if it cannot be found
- */
- public int getAlleleIndex(final Allele allele) {
- return getAlleles().indexOf(allele);
- }
-
- /**
- * Return the allele index #getAlleleIndex for each allele in alleles
- *
- * @param alleles the alleles we want to look up
- * @return a list of indices for each allele, in order
- */
- public List<Integer> getAlleleIndices(final Collection<Allele> alleles) {
- final List<Integer> indices = new LinkedList<Integer>();
- for ( final Allele allele : alleles )
- indices.add(getAlleleIndex(allele));
- return indices;
- }
-
- public int[] getGLIndecesOfAlternateAllele(Allele targetAllele) {
- final int index = getAlleleIndex(targetAllele);
- if ( index == -1 ) throw new IllegalArgumentException("Allele " + targetAllele + " not in this VariantContex " + this);
- return GenotypeLikelihoods.getPLIndecesOfAlleles(0, index);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/VariantContextBuilder.java b/src/java/org/broadinstitute/variant/variantcontext/VariantContextBuilder.java
deleted file mode 100644
index bbacbc1..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/VariantContextBuilder.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import com.google.java.contract.*;
-import org.broadinstitute.variant.vcf.VCFConstants;
-
-import java.util.*;
-
-/**
- * Builder class for VariantContext
- *
- * Some basic assumptions here:
- *
- * 1 -- data isn't protectively copied. If you provide an attribute map to
- * the build, and modify it later, the builder will see this and so will any
- * resulting variant contexts. It's best not to modify collections provided
- * to a builder.
- *
- * 2 -- the system uses the standard builder model, allowing the simple construction idiom:
- *
- * builder.source("a").genotypes(gc).id("x").make() => VariantContext
- *
- * 3 -- The best way to copy a VariantContext is:
- *
- * new VariantContextBuilder(vc).make() => a copy of VC
- *
- * 4 -- validation of arguments is done at the during the final make() call, so a
- * VariantContextBuilder can exist in an inconsistent state as long as those issues
- * are resolved before the call to make() is issued.
- *
- * @author depristo
- */
-public class VariantContextBuilder {
- // required fields
- private boolean fullyDecoded = false;
- private String source = null;
- private String contig = null;
- private long start = -1;
- private long stop = -1;
- private Collection<Allele> alleles = null;
-
- // optional -> these are set to the appropriate default value
- private String ID = VCFConstants.EMPTY_ID_FIELD;
- private GenotypesContext genotypes = GenotypesContext.NO_GENOTYPES;
- private double log10PError = VariantContext.NO_LOG10_PERROR;
- private Set<String> filters = null;
- private Map<String, Object> attributes = null;
- private boolean attributesCanBeModified = false;
-
- /** enum of what must be validated */
- final private EnumSet<VariantContext.Validation> toValidate = EnumSet.noneOf(VariantContext.Validation.class);
-
- /**
- * Create an empty VariantContextBuilder where all values adopt their default values. Note that
- * source, chr, start, stop, and alleles must eventually be filled in, or the resulting VariantContext
- * will throw an error.
- */
- public VariantContextBuilder() {}
-
- /**
- * Create an empty VariantContextBuilder where all values adopt their default values, but the bare min.
- * of info (source, chr, start, stop, and alleles) have been provided to start.
- */
- @Requires({"source != null", "contig != null", "start >= 0", "stop >= 0",
- "alleles != null && !alleles.isEmpty()"})
- public VariantContextBuilder(String source, String contig, long start, long stop, Collection<Allele> alleles) {
- this.source = source;
- this.contig = contig;
- this.start = start;
- this.stop = stop;
- this.alleles = alleles;
- this.attributes = Collections.emptyMap(); // immutable
- toValidate.add(VariantContext.Validation.ALLELES);
- }
-
- /**
- * Returns a new builder based on parent -- the new VC will have all fields initialized
- * to their corresponding values in parent. This is the best way to create a derived VariantContext
- *
- * @param parent Cannot be null
- */
- public VariantContextBuilder(VariantContext parent) {
- if ( parent == null ) throw new IllegalArgumentException("BUG: VariantContextBuilder parent argument cannot be null in VariantContextBuilder");
- this.alleles = parent.alleles;
- this.attributes = parent.getAttributes();
- this.attributesCanBeModified = false;
- this.contig = parent.contig;
- this.filters = parent.getFiltersMaybeNull();
- this.genotypes = parent.genotypes;
- this.ID = parent.getID();
- this.log10PError = parent.getLog10PError();
- this.source = parent.getSource();
- this.start = parent.getStart();
- this.stop = parent.getEnd();
- this.fullyDecoded = parent.isFullyDecoded();
- }
-
- public VariantContextBuilder(VariantContextBuilder parent) {
- if ( parent == null ) throw new IllegalArgumentException("BUG: VariantContext parent argument cannot be null in VariantContextBuilder");
- this.alleles = parent.alleles;
- this.attributesCanBeModified = false;
- this.contig = parent.contig;
- this.genotypes = parent.genotypes;
- this.ID = parent.ID;
- this.log10PError = parent.log10PError;
- this.source = parent.source;
- this.start = parent.start;
- this.stop = parent.stop;
- this.fullyDecoded = parent.fullyDecoded;
-
- this.attributes(parent.attributes);
- this.filters(parent.filters);
- }
-
- public VariantContextBuilder copy() {
- return new VariantContextBuilder(this);
- }
-
- /**
- * Tells this builder to use this collection of alleles for the resulting VariantContext
- *
- * @param alleles
- * @return this builder
- */
- @Requires({"alleles != null", "!alleles.isEmpty()"})
- public VariantContextBuilder alleles(final Collection<Allele> alleles) {
- this.alleles = alleles;
- toValidate.add(VariantContext.Validation.ALLELES);
- return this;
- }
-
- public VariantContextBuilder alleles(final List<String> alleleStrings) {
- List<Allele> alleles = new ArrayList<Allele>(alleleStrings.size());
-
- for ( int i = 0; i < alleleStrings.size(); i++ ) {
- alleles.add(Allele.create(alleleStrings.get(i), i == 0));
- }
-
- return alleles(alleles);
- }
-
- public VariantContextBuilder alleles(final String ... alleleStrings) {
- return alleles(Arrays.asList(alleleStrings));
- }
-
- public List<Allele> getAlleles() {
- return new ArrayList<Allele>(alleles);
- }
-
- /**
- * Tells this builder to use this map of attributes alleles for the resulting VariantContext
- *
- * Attributes can be null -> meaning there are no attributes. After
- * calling this routine the builder assumes it can modify the attributes
- * object here, if subsequent calls are made to set attribute values
- * @param attributes
- */
- public VariantContextBuilder attributes(final Map<String, Object> attributes) {
- if (attributes != null) {
- this.attributes = attributes;
- }
- else {
- this.attributes = new HashMap<String, Object>();
- }
-
- this.attributesCanBeModified = true;
- return this;
- }
-
- /**
- * Puts the key -> value mapping into this builder's attributes
- *
- * @param key
- * @param value
- * @return
- */
- @Requires({"key != null"})
- @Ensures({"this.attributes.size() == old(this.attributes.size()) || this.attributes.size() == old(this.attributes.size()+1)"})
- public VariantContextBuilder attribute(final String key, final Object value) {
- makeAttributesModifiable();
- attributes.put(key, value);
- return this;
- }
-
- /**
- * Removes key if present in the attributes
- *
- * @param key key to remove
- * @return
- */
- @Requires({"key != null"})
- @Ensures({"this.attributes.size() == old(this.attributes.size()) || this.attributes.size() == old(this.attributes.size()-1)"})
- public VariantContextBuilder rmAttribute(final String key) {
- makeAttributesModifiable();
- attributes.remove(key);
- return this;
- }
-
- /**
- * Removes list of keys if present in the attributes
- *
- * @param keys list of keys to remove
- * @return
- */
- @Requires({"keys != null"})
- @Ensures({"this.attributes.size() <= old(this.attributes.size())"})
- public VariantContextBuilder rmAttributes(final List<String> keys) {
- makeAttributesModifiable();
- for ( final String key : keys )
- attributes.remove(key);
- return this;
- }
-
- /**
- * Makes the attributes field modifiable. In many cases attributes is just a pointer to an immutable
- * collection, so methods that want to add / remove records require the attributes to be copied to a
- */
- @Ensures({"this.attributesCanBeModified"})
- private void makeAttributesModifiable() {
- if ( ! attributesCanBeModified ) {
- this.attributesCanBeModified = true;
- this.attributes = new HashMap<String, Object>(attributes);
- }
- }
-
- /**
- * This builder's filters are set to this value
- *
- * filters can be null -> meaning there are no filters
- * @param filters
- */
- public VariantContextBuilder filters(final Set<String> filters) {
- this.filters = filters;
- return this;
- }
-
- /**
- * {@link #filters}
- *
- * @param filters
- * @return
- */
- public VariantContextBuilder filters(final String ... filters) {
- filters(new LinkedHashSet<String>(Arrays.asList(filters)));
- return this;
- }
-
- @Requires({"filter != null", "!filter.equals(\"PASS\")"})
- public VariantContextBuilder filter(final String filter) {
- if ( this.filters == null ) this.filters = new LinkedHashSet<String>(1);
- this.filters.add(filter);
- return this;
- }
-
- /**
- * Tells this builder that the resulting VariantContext should have PASS filters
- *
- * @return
- */
- public VariantContextBuilder passFilters() {
- return filters(VariantContext.PASSES_FILTERS);
- }
-
- /**
- * Tells this builder that the resulting VariantContext be unfiltered
- *
- * @return
- */
- public VariantContextBuilder unfiltered() {
- this.filters = null;
- return this;
- }
-
- /**
- * Tells this builder that the resulting VariantContext should use this genotypes GenotypeContext
- *
- * Note that genotypes can be null -> meaning there are no genotypes
- *
- * @param genotypes
- */
- public VariantContextBuilder genotypes(final GenotypesContext genotypes) {
- this.genotypes = genotypes;
- if ( genotypes != null )
- toValidate.add(VariantContext.Validation.GENOTYPES);
- return this;
- }
-
- public VariantContextBuilder genotypesNoValidation(final GenotypesContext genotypes) {
- this.genotypes = genotypes;
- return this;
- }
-
- /**
- * Tells this builder that the resulting VariantContext should use a GenotypeContext containing genotypes
- *
- * Note that genotypes can be null -> meaning there are no genotypes
- *
- * @param genotypes
- */
- public VariantContextBuilder genotypes(final Collection<Genotype> genotypes) {
- return genotypes(GenotypesContext.copy(genotypes));
- }
-
- /**
- * Tells this builder that the resulting VariantContext should use a GenotypeContext containing genotypes
- * @param genotypes
- */
- public VariantContextBuilder genotypes(final Genotype ... genotypes) {
- return genotypes(GenotypesContext.copy(Arrays.asList(genotypes)));
- }
-
- /**
- * Tells this builder that the resulting VariantContext should not contain any GenotypeContext
- */
- public VariantContextBuilder noGenotypes() {
- this.genotypes = null;
- return this;
- }
-
- /**
- * Tells us that the resulting VariantContext should have ID
- * @param ID
- * @return
- */
- @Requires("ID != null")
- public VariantContextBuilder id(final String ID) {
- this.ID = ID;
- return this;
- }
-
- /**
- * Tells us that the resulting VariantContext should not have an ID
- * @return
- */
- public VariantContextBuilder noID() {
- return id(VCFConstants.EMPTY_ID_FIELD);
- }
-
- /**
- * Tells us that the resulting VariantContext should have log10PError
- * @param log10PError
- * @return
- */
- @Requires("log10PError <= 0 || log10PError == VariantContext.NO_LOG10_PERROR")
- public VariantContextBuilder log10PError(final double log10PError) {
- this.log10PError = log10PError;
- return this;
- }
-
- /**
- * Tells us that the resulting VariantContext should have source field set to source
- * @param source
- * @return
- */
- @Requires("source != null")
- public VariantContextBuilder source(final String source) {
- this.source = source;
- return this;
- }
-
- /**
- * Tells us that the resulting VariantContext should have the specified location
- * @param contig
- * @param start
- * @param stop
- * @return
- */
- @Requires({"contig != null", "start >= 0", "stop >= 0"})
- public VariantContextBuilder loc(final String contig, final long start, final long stop) {
- this.contig = contig;
- this.start = start;
- this.stop = stop;
- toValidate.add(VariantContext.Validation.ALLELES);
- return this;
- }
-
- /**
- * Tells us that the resulting VariantContext should have the specified contig chr
- * @param contig
- * @return
- */
- @Requires({"contig != null"})
- public VariantContextBuilder chr(final String contig) {
- this.contig = contig;
- return this;
- }
-
- /**
- * Tells us that the resulting VariantContext should have the specified contig start
- * @param start
- * @return
- */
- @Requires({"start >= 0"})
- public VariantContextBuilder start(final long start) {
- this.start = start;
- toValidate.add(VariantContext.Validation.ALLELES);
- return this;
- }
-
- /**
- * Tells us that the resulting VariantContext should have the specified contig stop
- * @param stop
- * @return
- */
- @Requires({"stop >= 0"})
- public VariantContextBuilder stop(final long stop) {
- this.stop = stop;
- return this;
- }
-
- /**
- * @see #computeEndFromAlleles(java.util.List, int, int) with endForSymbolicAlleles == -1
- */
- public VariantContextBuilder computeEndFromAlleles(final List<Allele> alleles, final int start) {
- return computeEndFromAlleles(alleles, start, -1);
- }
-
- /**
- * Compute the end position for this VariantContext from the alleles themselves
- *
- * assigns this builder the stop position computed.
- *
- * @param alleles the list of alleles to consider. The reference allele must be the first one
- * @param start the known start position of this event
- * @param endForSymbolicAlleles the end position to use if any of the alleles is symbolic. Can be -1
- * if no is expected but will throw an error if one is found
- * @return this builder
- */
- @Requires({"! alleles.isEmpty()", "start > 0", "endForSymbolicAlleles == -1 || endForSymbolicAlleles > 0" })
- public VariantContextBuilder computeEndFromAlleles(final List<Allele> alleles, final int start, final int endForSymbolicAlleles) {
- stop(VariantContextUtils.computeEndFromAlleles(alleles, start, endForSymbolicAlleles));
- return this;
- }
-
- /**
- * @return true if this builder contains fully decoded data
- *
- * See VariantContext for more information
- */
- public boolean isFullyDecoded() {
- return fullyDecoded;
- }
-
- /**
- * Sets this builder's fully decoded state to true.
- *
- * A fully decoded builder indicates that all fields are represented by their
- * proper java objects (e.g., Integer(10) not "10").
- *
- * See VariantContext for more information
- *
- * @param isFullyDecoded
- */
- public VariantContextBuilder fullyDecoded(boolean isFullyDecoded) {
- this.fullyDecoded = isFullyDecoded;
- return this;
- }
-
- /**
- * Takes all of the builder data provided up to this point, and instantiates
- * a freshly allocated VariantContext with all of the builder data. This
- * VariantContext is validated as appropriate and if not failing QC (and
- * throwing an exception) is returned.
- *
- * Note that this function can be called multiple times to create multiple
- * VariantContexts from the same builder.
- */
- public VariantContext make() {
- return new VariantContext(source, ID, contig, start, stop, alleles,
- genotypes, log10PError, filters, attributes,
- fullyDecoded, toValidate);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/VariantContextComparator.java b/src/java/org/broadinstitute/variant/variantcontext/VariantContextComparator.java
deleted file mode 100644
index 7a8b9cb..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/VariantContextComparator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.broadinstitute.variant.variantcontext;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import org.broadinstitute.variant.vcf.VCFContigHeaderLine;
-
-import java.util.*;
-
-/**
- * A Comparator that orders VariantContexts by the ordering of the contigs/chromosomes in the List
- * provided at construction time, then by start position with each contig/chromosome.
- */
-public class VariantContextComparator implements Comparator<VariantContext> {
-
- public static List<String> getSequenceNameList(final SAMSequenceDictionary dictionary) {
- final List<String> list = new ArrayList<String>();
- for (final SAMSequenceRecord record : dictionary.getSequences()) {
- list.add(record.getSequenceName());
- }
- return list;
- }
-
- // For fast lookup of the contig's index in the contig list
- private final Map<String, Integer> contigIndexLookup;
-
- public VariantContextComparator(final List<String> contigs) {
- if (contigs.size() == 0) throw new IllegalArgumentException("One or more contigs must be in the contig list.");
-
- final Map<String, Integer> protoContigIndexLookup = new HashMap<String, Integer>();
- int index = 0;
- for (final String contig : contigs) {
- protoContigIndexLookup.put(contig, index++);
- }
-
- if (protoContigIndexLookup.size() != contigs.size()) {
- throw new IllegalArgumentException("There are duplicate contigs/chromosomes in the input contig list.");
- }
-
- this.contigIndexLookup = Collections.unmodifiableMap(protoContigIndexLookup);
- }
-
- /**
- * Creates a VariantContextComparator from the given VCF contig header lines. The header lines'
- * index values are used to order the contigs. Throws IllegalArgumentException if there are dupe
- *
- */
- public VariantContextComparator(final Collection<VCFContigHeaderLine> headerLines) {
- if (headerLines.size() == 0) throw new IllegalArgumentException("One or more header lines must be in the header line collection.");
-
- final Map<String, Integer> protoContigIndexLookup = new HashMap<String, Integer>();
- for (final VCFContigHeaderLine headerLine : headerLines) {
- protoContigIndexLookup.put(headerLine.getID(), headerLine.getContigIndex());
- }
-
- if (protoContigIndexLookup.size() != headerLines.size()) {
- throw new IllegalArgumentException("There are duplicate contigs/chromosomes in the input header line collection.");
- }
-
- final Set<Integer> protoIndexValues = new HashSet<Integer>(protoContigIndexLookup.values());
- if (protoIndexValues.size() != headerLines.size()) {
- throw new IllegalArgumentException("One or more contigs share the same index number.");
- }
-
- this.contigIndexLookup = Collections.unmodifiableMap(protoContigIndexLookup);
- }
-
- public VariantContextComparator(final SAMSequenceDictionary dictionary) {
- this(getSequenceNameList(dictionary));
- }
-
- @Override
- public int compare(final VariantContext firstVariantContext, final VariantContext secondVariantContext) {
- // Will throw NullPointerException -- happily -- if either of the chromosomes/contigs aren't
- // present. This error checking should already have been done in the constructor but it's left
- // in as defence anyway.
- final int contigCompare =
- this.contigIndexLookup.get(firstVariantContext.getChr()) - this.contigIndexLookup.get(secondVariantContext.getChr());
- return contigCompare != 0
- ? contigCompare
- : firstVariantContext.getStart() - secondVariantContext.getStart();
- }
-
- /**
- * Returns true if the given header lines are from a file sorted according to this VariantContextComparator.
- * For sorting to work properly, the contig in each header line must have the same index.
- */
- public boolean isCompatible(final Collection<VCFContigHeaderLine> headerLines) {
- for (final VCFContigHeaderLine headerLine : headerLines) {
- final Integer existingIndex = this.contigIndexLookup.get(headerLine.getID());
- if (existingIndex == null || headerLine.getContigIndex() != existingIndex.intValue()) return false;
- }
-
- return true;
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/VariantContextUtils.java b/src/java/org/broadinstitute/variant/variantcontext/VariantContextUtils.java
deleted file mode 100644
index a23bcbb..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/VariantContextUtils.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import net.sf.samtools.util.Lazy;
-import org.apache.commons.jexl2.Expression;
-import org.apache.commons.jexl2.JexlEngine;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.vcf.*;
-
-import java.util.*;
-
-public class VariantContextUtils {
- private static Set<String> MISSING_KEYS_WARNED_ABOUT = new HashSet<String>();
-
- /** Use a {@link Lazy} {@link JexlEngine} instance to avoid class-loading issues. (Applications that access this class are otherwise
- * forced to build a {@link JexlEngine} instance, which depends on some apache logging libraries that mightn't be packaged.) */
- final public static Lazy<JexlEngine> engine = new Lazy<JexlEngine>(new Lazy.LazyInitializer<JexlEngine>() {
- @Override
- public JexlEngine make() {
- final JexlEngine jexl = new JexlEngine();
- jexl.setSilent(false); // will throw errors now for selects that don't evaluate properly
- jexl.setLenient(false);
- jexl.setDebug(false);
- return jexl;
- }
- });
- private final static boolean ASSUME_MISSING_FIELDS_ARE_STRINGS = false;
-
- /**
- * Computes the alternate allele frequency at the provided {@link VariantContext} by dividing its "AN" by its "AC".
- * @param vc The variant whose alternate allele frequency is computed
- * @return The alternate allele frequency in [0, 1]
- * @throws AssertionError When either annotation is missing, or when the compuated frequency is outside the expected range
- */
- public static double calculateAltAlleleFrequency(final VariantContext vc) {
- if (!vc.hasAttribute(VCFConstants.ALLELE_NUMBER_KEY) || !vc.hasAttribute(VCFConstants.ALLELE_COUNT_KEY))
- throw new AssertionError(String.format(
- "Cannot compute the provided variant's alt allele frequency because it does not have both %s and %s annotations: %s",
- VCFConstants.ALLELE_NUMBER_KEY,
- VCFConstants.ALLELE_COUNT_KEY,
- vc));
- final double altAlleleCount = vc.getAttributeAsInt(VCFConstants.ALLELE_COUNT_KEY, 0);
- final double totalCount = vc.getAttributeAsInt(VCFConstants.ALLELE_NUMBER_KEY, 0);
- final double aaf = altAlleleCount / totalCount;
- if (aaf > 1 || aaf < 0)
- throw new AssertionError(String.format("Expected a minor allele frequency in the range [0, 1], but got %s. vc=%s", aaf, vc));
- return aaf;
- }
-
- /**
- * Update the attributes of the attributes map given the VariantContext to reflect the
- * proper chromosome-based VCF tags
- *
- * @param vc the VariantContext
- * @param attributes the attributes map to populate; must not be null; may contain old values
- * @param removeStaleValues should we remove stale values from the mapping?
- * @return the attributes map provided as input, returned for programming convenience
- */
- public static Map<String, Object> calculateChromosomeCounts(VariantContext vc, Map<String, Object> attributes, boolean removeStaleValues) {
- return calculateChromosomeCounts(vc, attributes, removeStaleValues, new HashSet<String>(0));
- }
-
- /**
- * Update the attributes of the attributes map given the VariantContext to reflect the
- * proper chromosome-based VCF tags
- *
- * @param vc the VariantContext
- * @param attributes the attributes map to populate; must not be null; may contain old values
- * @param removeStaleValues should we remove stale values from the mapping?
- * @param founderIds - Set of founders Ids to take into account. AF and FC will be calculated over the founders.
- * If empty or null, counts are generated for all samples as unrelated individuals
- * @return the attributes map provided as input, returned for programming convenience
- */
- public static Map<String, Object> calculateChromosomeCounts(VariantContext vc, Map<String, Object> attributes, boolean removeStaleValues, final Set<String> founderIds) {
- final int AN = vc.getCalledChrCount();
-
- // if everyone is a no-call, remove the old attributes if requested
- if ( AN == 0 && removeStaleValues ) {
- if ( attributes.containsKey(VCFConstants.ALLELE_COUNT_KEY) )
- attributes.remove(VCFConstants.ALLELE_COUNT_KEY);
- if ( attributes.containsKey(VCFConstants.ALLELE_FREQUENCY_KEY) )
- attributes.remove(VCFConstants.ALLELE_FREQUENCY_KEY);
- if ( attributes.containsKey(VCFConstants.ALLELE_NUMBER_KEY) )
- attributes.remove(VCFConstants.ALLELE_NUMBER_KEY);
- return attributes;
- }
-
- if ( vc.hasGenotypes() ) {
- attributes.put(VCFConstants.ALLELE_NUMBER_KEY, AN);
-
- // if there are alternate alleles, record the relevant tags
- if ( vc.getAlternateAlleles().size() > 0 ) {
- ArrayList<Double> alleleFreqs = new ArrayList<Double>();
- ArrayList<Integer> alleleCounts = new ArrayList<Integer>();
- ArrayList<Integer> foundersAlleleCounts = new ArrayList<Integer>();
- double totalFoundersChromosomes = (double)vc.getCalledChrCount(founderIds);
- int foundersAltChromosomes;
- for ( Allele allele : vc.getAlternateAlleles() ) {
- foundersAltChromosomes = vc.getCalledChrCount(allele,founderIds);
- alleleCounts.add(vc.getCalledChrCount(allele));
- foundersAlleleCounts.add(foundersAltChromosomes);
- if ( AN == 0 ) {
- alleleFreqs.add(0.0);
- } else {
- final Double freq = (double)foundersAltChromosomes / totalFoundersChromosomes;
- alleleFreqs.add(freq);
- }
- }
-
- attributes.put(VCFConstants.ALLELE_COUNT_KEY, alleleCounts.size() == 1 ? alleleCounts.get(0) : alleleCounts);
- attributes.put(VCFConstants.ALLELE_FREQUENCY_KEY, alleleFreqs.size() == 1 ? alleleFreqs.get(0) : alleleFreqs);
- } else {
- // if there's no alt AC and AF shouldn't be present
- attributes.remove(VCFConstants.ALLELE_COUNT_KEY);
- attributes.remove(VCFConstants.ALLELE_FREQUENCY_KEY);
- }
- }
-
- return attributes;
- }
-
- /**
- * Update the attributes of the attributes map in the VariantContextBuilder to reflect the proper
- * chromosome-based VCF tags based on the current VC produced by builder.make()
- *
- * @param builder the VariantContextBuilder we are updating
- * @param removeStaleValues should we remove stale values from the mapping?
- */
- public static void calculateChromosomeCounts(VariantContextBuilder builder, boolean removeStaleValues) {
- VariantContext vc = builder.make();
- builder.attributes(calculateChromosomeCounts(vc, new HashMap<String, Object>(vc.getAttributes()), removeStaleValues, new HashSet<String>(0)));
- }
-
- /**
- * Update the attributes of the attributes map in the VariantContextBuilder to reflect the proper
- * chromosome-based VCF tags based on the current VC produced by builder.make()
- *
- * @param builder the VariantContextBuilder we are updating
- * @param founderIds - Set of founders to take into account. AF and FC will be calculated over the founders only.
- * If empty or null, counts are generated for all samples as unrelated individuals
- * @param removeStaleValues should we remove stale values from the mapping?
- */
- public static void calculateChromosomeCounts(VariantContextBuilder builder, boolean removeStaleValues, final Set<String> founderIds) {
- VariantContext vc = builder.make();
- builder.attributes(calculateChromosomeCounts(vc, new HashMap<String, Object>(vc.getAttributes()), removeStaleValues, founderIds));
- }
-
- public final static VCFCompoundHeaderLine getMetaDataForField(final VCFHeader header, final String field) {
- VCFCompoundHeaderLine metaData = header.getFormatHeaderLine(field);
- if ( metaData == null ) metaData = header.getInfoHeaderLine(field);
- if ( metaData == null ) {
- if ( ASSUME_MISSING_FIELDS_ARE_STRINGS ) {
- if ( ! MISSING_KEYS_WARNED_ABOUT.contains(field) ) {
- MISSING_KEYS_WARNED_ABOUT.add(field);
- if ( GeneralUtils.DEBUG_MODE_ENABLED )
- System.err.println("Field " + field + " missing from VCF header, assuming it is an unbounded string type");
- }
- return new VCFInfoHeaderLine(field, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "Auto-generated string header for " + field);
- }
- else
- throw new TribbleException("Fully decoding VariantContext requires header line for all fields, but none was found for " + field);
- }
- return metaData;
- }
-
- /**
- * A simple but common wrapper for matching VariantContext objects using JEXL expressions
- */
- public static class JexlVCMatchExp {
- public String name;
- public Expression exp;
-
- /**
- * Create a new matcher expression with name and JEXL expression exp
- * @param name name
- * @param exp expression
- */
- public JexlVCMatchExp(String name, Expression exp) {
- this.name = name;
- this.exp = exp;
- }
- }
-
- /**
- * Method for creating JexlVCMatchExp from input walker arguments names and exps. These two arrays contain
- * the name associated with each JEXL expression. initializeMatchExps will parse each expression and return
- * a list of JexlVCMatchExp, in order, that correspond to the names and exps. These are suitable input to
- * match() below.
- *
- * @param names names
- * @param exps expressions
- * @return list of matches
- */
- public static List<JexlVCMatchExp> initializeMatchExps(String[] names, String[] exps) {
- if ( names == null || exps == null )
- throw new IllegalArgumentException("BUG: neither names nor exps can be null: names " + Arrays.toString(names) + " exps=" + Arrays.toString(exps) );
-
- if ( names.length != exps.length )
- throw new IllegalArgumentException("Inconsistent number of provided filter names and expressions: names=" + Arrays.toString(names) + " exps=" + Arrays.toString(exps));
-
- Map<String, String> map = new HashMap<String, String>();
- for ( int i = 0; i < names.length; i++ ) { map.put(names[i], exps[i]); }
-
- return VariantContextUtils.initializeMatchExps(map);
- }
-
- public static List<JexlVCMatchExp> initializeMatchExps(ArrayList<String> names, ArrayList<String> exps) {
- String[] nameArray = new String[names.size()];
- String[] expArray = new String[exps.size()];
- return initializeMatchExps(names.toArray(nameArray), exps.toArray(expArray));
- }
-
-
- /**
- * Method for creating JexlVCMatchExp from input walker arguments mapping from names to exps. These two arrays contain
- * the name associated with each JEXL expression. initializeMatchExps will parse each expression and return
- * a list of JexlVCMatchExp, in order, that correspond to the names and exps. These are suitable input to
- * match() below.
- *
- * @param names_and_exps mapping of names to expressions
- * @return list of matches
- */
- public static List<JexlVCMatchExp> initializeMatchExps(Map<String, String> names_and_exps) {
- List<JexlVCMatchExp> exps = new ArrayList<JexlVCMatchExp>();
-
- for ( Map.Entry<String, String> elt : names_and_exps.entrySet() ) {
- String name = elt.getKey();
- String expStr = elt.getValue();
-
- if ( name == null || expStr == null ) throw new IllegalArgumentException("Cannot create null expressions : " + name + " " + expStr);
- try {
- Expression exp = engine.get().createExpression(expStr);
- exps.add(new JexlVCMatchExp(name, exp));
- } catch (Exception e) {
- throw new IllegalArgumentException("Argument " + name + "has a bad value. Invalid expression used (" + expStr + "). Please see the JEXL docs for correct syntax.") ;
- }
- }
-
- return exps;
- }
-
- /**
- * Returns true if exp match VC. See collection<> version for full docs.
- * @param vc variant context
- * @param exp expression
- * @return true if there is a match
- */
- public static boolean match(VariantContext vc, JexlVCMatchExp exp) {
- return match(vc,Arrays.asList(exp)).get(exp);
- }
-
- /**
- * Matches each JexlVCMatchExp exp against the data contained in vc, and returns a map from these
- * expressions to true (if they matched) or false (if they didn't). This the best way to apply JEXL
- * expressions to VariantContext records. Use initializeMatchExps() to create the list of JexlVCMatchExp
- * expressions.
- *
- * @param vc variant context
- * @param exps expressions
- * @return true if there is a match
- */
- public static Map<JexlVCMatchExp, Boolean> match(VariantContext vc, Collection<JexlVCMatchExp> exps) {
- return new JEXLMap(exps,vc);
-
- }
-
- /**
- * Returns true if exp match VC/g. See collection<> version for full docs.
- * @param vc variant context
- * @param g genotype
- * @param exp expression
- * @return true if there is a match
- */
- public static boolean match(VariantContext vc, Genotype g, JexlVCMatchExp exp) {
- return match(vc,g,Arrays.asList(exp)).get(exp);
- }
-
- /**
- * Matches each JexlVCMatchExp exp against the data contained in vc/g, and returns a map from these
- * expressions to true (if they matched) or false (if they didn't). This the best way to apply JEXL
- * expressions to VariantContext records/genotypes. Use initializeMatchExps() to create the list of JexlVCMatchExp
- * expressions.
- *
- * @param vc variant context
- * @param g genotype
- * @param exps expressions
- * @return true if there is a match
- */
- public static Map<JexlVCMatchExp, Boolean> match(VariantContext vc, Genotype g, Collection<JexlVCMatchExp> exps) {
- return new JEXLMap(exps,vc,g);
- }
-
- /**
- * Returns a newly allocated VC that is the same as VC, but without genotypes
- * @param vc variant context
- * @return new VC without genotypes
- */
- @Requires("vc != null")
- @Ensures("result != null")
- public static VariantContext sitesOnlyVariantContext(VariantContext vc) {
- return new VariantContextBuilder(vc).noGenotypes().make();
- }
-
- /**
- * Returns a newly allocated list of VC, where each VC is the same as the input VCs, but without genotypes
- * @param vcs collection of VCs
- * @return new VCs without genotypes
- */
- @Requires("vcs != null")
- @Ensures("result != null")
- public static Collection<VariantContext> sitesOnlyVariantContexts(Collection<VariantContext> vcs) {
- List<VariantContext> r = new ArrayList<VariantContext>();
- for ( VariantContext vc : vcs )
- r.add(sitesOnlyVariantContext(vc));
- return r;
- }
-
- public static int getSize( VariantContext vc ) {
- return vc.getEnd() - vc.getStart() + 1;
- }
-
- public static Set<String> genotypeNames(final Collection<Genotype> genotypes) {
- final Set<String> names = new HashSet<String>(genotypes.size());
- for ( final Genotype g : genotypes )
- names.add(g.getSampleName());
- return names;
- }
-
- /**
- * Compute the end position for this VariantContext from the alleles themselves
- *
- * In the trivial case this is a single BP event and end = start (open intervals)
- * In general the end is start + ref length - 1, handling the case where ref length == 0
- * However, if alleles contains a symbolic allele then we use endForSymbolicAllele in all cases
- *
- * @param alleles the list of alleles to consider. The reference allele must be the first one
- * @param start the known start position of this event
- * @param endForSymbolicAlleles the end position to use if any of the alleles is symbolic. Can be -1
- * if no is expected but will throw an error if one is found
- * @return this builder
- */
- @Requires({"! alleles.isEmpty()", "start > 0", "endForSymbolicAlleles == -1 || endForSymbolicAlleles > 0" })
- public static int computeEndFromAlleles(final List<Allele> alleles, final int start, final int endForSymbolicAlleles) {
- final Allele ref = alleles.get(0);
-
- if ( ref.isNonReference() )
- throw new IllegalStateException("computeEndFromAlleles requires first allele to be reference");
-
- if ( VariantContext.hasSymbolicAlleles(alleles) ) {
- if ( endForSymbolicAlleles == -1 )
- throw new IllegalStateException("computeEndFromAlleles found a symbolic allele but endForSymbolicAlleles was provided");
- return endForSymbolicAlleles;
- } else {
- return start + Math.max(ref.length() - 1, 0);
- }
- }
-
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/VariantJEXLContext.java b/src/java/org/broadinstitute/variant/variantcontext/VariantJEXLContext.java
deleted file mode 100644
index fff48eb..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/VariantJEXLContext.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import org.apache.commons.jexl2.JexlContext;
-import org.apache.commons.jexl2.MapContext;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.vcf.VCFConstants;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- *
- * @author aaron
- * @author depristo
- *
- * Class VariantJEXLContext
- *
- * implements the JEXML context for VariantContext; this saves us from
- * having to generate a JEXML context lookup map everytime we want to evaluate an expression.
- *
- * This is package protected, only classes in variantcontext should have access to it.
- *
- * // todo -- clean up to remove or better support genotype filtering
- */
-
-class VariantJEXLContext implements JexlContext {
- // our stored variant context
- private VariantContext vc;
-
- private interface AttributeGetter {
- public Object get(VariantContext vc);
- }
-
- private static Map<String, AttributeGetter> x = new HashMap<String, AttributeGetter>();
-
- static {
- x.put("vc", new AttributeGetter() { public Object get(VariantContext vc) { return vc; }});
- x.put("CHROM", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getChr(); }});
- x.put("POS", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getStart(); }});
- x.put("TYPE", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getType().toString(); }});
- x.put("QUAL", new AttributeGetter() { public Object get(VariantContext vc) { return -10 * vc.getLog10PError(); }});
- x.put("ALLELES", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getAlleles(); }});
- x.put("N_ALLELES", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getNAlleles(); }});
- x.put("FILTER", new AttributeGetter() { public Object get(VariantContext vc) { return vc.isFiltered() ? "1" : "0"; }});
-
-// x.put("GT", new AttributeGetter() { public Object get(VariantContext vc) { return g.getGenotypeString(); }});
- x.put("homRefCount", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getHomRefCount(); }});
- x.put("hetCount", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getHetCount(); }});
- x.put("homVarCount", new AttributeGetter() { public Object get(VariantContext vc) { return vc.getHomVarCount(); }});
- }
-
- public VariantJEXLContext(VariantContext vc) {
- this.vc = vc;
- }
-
- public Object get(String name) {
- Object result = null;
- if ( x.containsKey(name) ) { // dynamic resolution of name -> value via map
- result = x.get(name).get(vc);
- } else if ( vc.hasAttribute(name)) {
- result = vc.getAttribute(name);
- } else if ( vc.getFilters().contains(name) ) {
- result = "1";
- }
-
- //System.out.printf("dynamic lookup %s => %s%n", name, result);
-
- return result;
- }
-
- public boolean has(String name) {
- return get(name) != null;
- }
-
- public void set(String name, Object value) {
- throw new UnsupportedOperationException("remove() not supported on a VariantJEXLContext");
- }
-}
-
-
-
-
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/AsyncVariantContextWriter.java b/src/java/org/broadinstitute/variant/variantcontext/writer/AsyncVariantContextWriter.java
deleted file mode 100644
index 4bc2c2e..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/AsyncVariantContextWriter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.broadinstitute.variant.variantcontext.writer;
-
-import net.sf.samtools.util.AbstractAsyncWriter;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.vcf.VCFHeader;
-
-/**
- * AsyncVariantContextWriter that can be wrapped around an underlying AsyncVariantContextWriter to provide asynchronous output. Records
- * added are placed into a queue, the queue is then drained into the underlying VariantContextWriter by a thread owned
- * by the instance.
- *
- * Exceptions experienced by the writer thread will be emitted back to the caller in subsequent calls to either
- * add() or close().
- *
- * @author George Grant
- */
-public class AsyncVariantContextWriter extends AbstractAsyncWriter<VariantContext> implements VariantContextWriter {
- private final VariantContextWriter underlyingWriter;
-
- /**
- * Creates a new AsyncVariantContextWriter wrapping the provided VariantContextWriter.
- */
- public AsyncVariantContextWriter(final VariantContextWriter out) {
- this(out, DEFAULT_QUEUE_SIZE);
- }
-
- /**
- * Creates an AsyncVariantContextWriter wrapping the provided VariantContextWriter and using the specified
- * queue size for buffer VariantContexts.
- */
- public AsyncVariantContextWriter(final VariantContextWriter out, final int queueSize) {
- super(queueSize);
- this.underlyingWriter = out;
- }
-
- @Override protected void synchronouslyWrite(final VariantContext item) { this.underlyingWriter.add(item); }
-
- @Override protected void synchronouslyClose() { this.underlyingWriter.close(); }
-
- @Override protected final String getThreadNamePrefix() { return "VariantContextWriterThread-"; }
-
- public void add(final VariantContext vc) {
- write(vc);
- }
-
- public void writeHeader(final VCFHeader header) {
- this.underlyingWriter.writeHeader(header);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2Encoder.java b/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2Encoder.java
deleted file mode 100644
index d2a3d54..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2Encoder.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broadinstitute.variant.bcf2.BCF2Type;
-import org.broadinstitute.variant.bcf2.BCF2Utils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public final class BCF2Encoder {
- // TODO -- increase default size?
- public static final int WRITE_BUFFER_INITIAL_SIZE = 16384;
- private ByteArrayOutputStream encodeStream = new ByteArrayOutputStream(WRITE_BUFFER_INITIAL_SIZE);
-
- // --------------------------------------------------------------------------------
- //
- // Functions to return the data being encoded here
- //
- // --------------------------------------------------------------------------------
-
- @Ensures("result != null")
- public byte[] getRecordBytes() {
- byte[] bytes = encodeStream.toByteArray();
- encodeStream.reset();
- return bytes;
- }
-
- // --------------------------------------------------------------------------------
- //
- // Writing typed values (have type byte)
- //
- // --------------------------------------------------------------------------------
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTypedMissing(final BCF2Type type) throws IOException {
- encodeType(0, type);
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTyped(final Object value, final BCF2Type type) throws IOException {
- if ( value == null )
- encodeTypedMissing(type);
- else {
- switch ( type ) {
- case INT8:
- case INT16:
- case INT32: encodeTypedInt((Integer)value, type); break;
- case FLOAT: encodeTypedFloat((Double) value); break;
- case CHAR: encodeTypedString((String) value); break;
- default: throw new IllegalArgumentException("Illegal type encountered " + type);
- }
- }
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTypedInt(final int v) throws IOException {
- final BCF2Type type = BCF2Utils.determineIntegerType(v);
- encodeTypedInt(v, type);
- }
-
- @Requires("type.isIntegerType()")
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTypedInt(final int v, final BCF2Type type) throws IOException {
- encodeType(1, type);
- encodeRawInt(v, type);
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTypedString(final String s) throws IOException {
- encodeTypedString(s.getBytes());
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTypedString(final byte[] s) throws IOException {
- if ( s == null )
- encodeType(0, BCF2Type.CHAR);
- else {
- encodeType(s.length, BCF2Type.CHAR);
- for ( int i = 0; i < s.length; i++ ) {
- encodeRawChar(s[i]);
- }
- }
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTypedFloat(final double d) throws IOException {
- encodeType(1, BCF2Type.FLOAT);
- encodeRawFloat(d);
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeTyped(List<? extends Object> v, final BCF2Type type) throws IOException {
- if ( type == BCF2Type.CHAR && v.size() != 0 ) {
- final String s = BCF2Utils.collapseStringList((List<String>) v);
- v = stringToBytes(s);
- }
-
- encodeType(v.size(), type);
- encodeRawValues(v, type);
- }
-
- // --------------------------------------------------------------------------------
- //
- // Writing raw values (don't have a type byte)
- //
- // --------------------------------------------------------------------------------
-
- public final <T extends Object> void encodeRawValues(final Collection<T> v, final BCF2Type type) throws IOException {
- for ( final T v1 : v ) {
- encodeRawValue(v1, type);
- }
- }
-
- public final <T extends Object> void encodeRawValue(final T value, final BCF2Type type) throws IOException {
- try {
- if ( value == type.getMissingJavaValue() )
- encodeRawMissingValue(type);
- else {
- switch (type) {
- case INT8:
- case INT16:
- case INT32: encodeRawBytes((Integer) value, type); break;
- case FLOAT: encodeRawFloat((Double) value); break;
- case CHAR: encodeRawChar((Byte) value); break;
- default: throw new IllegalArgumentException("Illegal type encountered " + type);
- }
- }
- } catch ( ClassCastException e ) {
- throw new ClassCastException("BUG: invalid type cast to " + type + " from " + value);
- }
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeRawMissingValue(final BCF2Type type) throws IOException {
- encodeRawBytes(type.getMissingBytes(), type);
- }
-
- @Requires("size >= 0")
- public final void encodeRawMissingValues(final int size, final BCF2Type type) throws IOException {
- for ( int i = 0; i < size; i++ )
- encodeRawMissingValue(type);
- }
-
- // --------------------------------------------------------------------------------
- //
- // low-level encoders
- //
- // --------------------------------------------------------------------------------
-
- public final void encodeRawChar(final byte c) throws IOException {
- encodeStream.write(c);
- }
-
- public final void encodeRawFloat(final double value) throws IOException {
- encodeRawBytes(Float.floatToIntBits((float) value), BCF2Type.FLOAT);
- }
-
- @Requires("size >= 0")
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeType(final int size, final BCF2Type type) throws IOException {
- if ( size <= BCF2Utils.MAX_INLINE_ELEMENTS ) {
- final int typeByte = BCF2Utils.encodeTypeDescriptor(size, type);
- encodeStream.write(typeByte);
- } else {
- final int typeByte = BCF2Utils.encodeTypeDescriptor(BCF2Utils.OVERFLOW_ELEMENT_MARKER, type);
- encodeStream.write(typeByte);
- // write in the overflow size
- encodeTypedInt(size);
- }
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeRawInt(final int value, final BCF2Type type) throws IOException {
- type.write(value, encodeStream);
- }
-
- @Ensures("encodeStream.size() > old(encodeStream.size())")
- public final void encodeRawBytes(final int value, final BCF2Type type) throws IOException {
- type.write(value, encodeStream);
- }
-
- // --------------------------------------------------------------------------------
- //
- // utility functions
- //
- // --------------------------------------------------------------------------------
-
- @Requires({"s != null", "sizeToWrite >= 0"})
- public void encodeRawString(final String s, final int sizeToWrite) throws IOException {
- final byte[] bytes = s.getBytes();
- for ( int i = 0; i < sizeToWrite; i++ )
- if ( i < bytes.length )
- encodeRawChar(bytes[i]);
- else
- encodeRawMissingValue(BCF2Type.CHAR);
- }
-
- /**
- * Totally generic encoder that examines o, determines the best way to encode it, and encodes it
- *
- * This method is incredibly slow, but it's only used for UnitTests so it doesn't matter
- *
- * @param o
- * @return
- */
- @Requires("o != null")
- public final BCF2Type encode(final Object o) throws IOException {
- if ( o == null ) throw new IllegalArgumentException("Generic encode cannot deal with null values");
-
- if ( o instanceof List ) {
- final BCF2Type type = determineBCFType(((List) o).get(0));
- encodeTyped((List) o, type);
- return type;
- } else {
- final BCF2Type type = determineBCFType(o);
- encodeTyped(o, type);
- return type;
- }
- }
-
- @Requires("arg != null")
- private final BCF2Type determineBCFType(final Object arg) {
- final Object toType = arg instanceof List ? ((List)arg).get(0) : arg;
-
- if ( toType instanceof Integer )
- return BCF2Utils.determineIntegerType((Integer) toType);
- else if ( toType instanceof String )
- return BCF2Type.CHAR;
- else if ( toType instanceof Double )
- return BCF2Type.FLOAT;
- else
- throw new IllegalArgumentException("No native encoding for Object of type " + arg.getClass().getSimpleName());
- }
-
- private final List<Byte> stringToBytes(final String v) throws IOException {
- if ( v == null || v.equals("") )
- return Collections.emptyList();
- else {
- // TODO -- this needs to be optimized away for efficiency
- final byte[] bytes = v.getBytes();
- final List<Byte> l = new ArrayList<Byte>(bytes.length);
- for ( int i = 0; i < bytes.length; i++) l.add(bytes[i]);
- return l;
- }
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldEncoder.java b/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldEncoder.java
deleted file mode 100644
index 88b9c49..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldEncoder.java
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Invariant;
-import com.google.java.contract.Requires;
-import org.broadinstitute.variant.bcf2.BCF2Type;
-import org.broadinstitute.variant.bcf2.BCF2Utils;
-import org.broadinstitute.variant.vcf.VCFCompoundHeaderLine;
-import org.broadinstitute.variant.vcf.VCFHeaderLineCount;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
- at Invariant({
- "headerLine != null",
- "dictionaryOffsetType.isIntegerType()",
- "dictionaryOffset >= 0"
-})
-public abstract class BCF2FieldEncoder {
- /**
- * The header line describing the field we will encode values of
- */
- final VCFCompoundHeaderLine headerLine;
-
- /**
- * The BCF2 type we'll use to encoder this field, if it can be determined statically.
- * If not, this variable must be null
- */
- final BCF2Type staticType;
-
- /**
- * The integer offset into the strings map of the BCF2 file corresponding to this
- * field.
- */
- final int dictionaryOffset;
-
- /**
- * The integer type we use to encode our dictionary offset in the BCF2 file
- */
- final BCF2Type dictionaryOffsetType;
-
- // ----------------------------------------------------------------------
- //
- // Constructor
- //
- // ----------------------------------------------------------------------
-
- @Requires({"headerLine != null", "dict != null"})
- private BCF2FieldEncoder(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict, final BCF2Type staticType) {
- this.headerLine = headerLine;
- this.staticType = staticType;
-
- final Integer offset = dict.get(getField());
- if ( offset == null ) throw new IllegalStateException("Format error: could not find string " + getField() + " in header as required by BCF");
- this.dictionaryOffset = offset;
- dictionaryOffsetType = BCF2Utils.determineIntegerType(offset);
- }
-
- // ----------------------------------------------------------------------
- //
- // Basic accessors
- //
- // ----------------------------------------------------------------------
-
- @Ensures("result != null")
- public final String getField() { return headerLine.getID(); }
-
- /**
- * Write the field key (dictionary offset and type) into the BCF2Encoder stream
- *
- * @param encoder where we write our dictionary offset
- * @throws IOException
- */
- @Requires("encoder != null")
- public final void writeFieldKey(final BCF2Encoder encoder) throws IOException {
- encoder.encodeTypedInt(dictionaryOffset, dictionaryOffsetType);
- }
-
- @Override
- public String toString() {
- return "BCF2FieldEncoder for " + getField() + " with count " + getCountType() + " encoded with " + getClass().getSimpleName();
- }
-
- // ----------------------------------------------------------------------
- //
- // methods to determine the number of encoded elements
- //
- // ----------------------------------------------------------------------
-
- @Ensures("result != null")
- protected final VCFHeaderLineCount getCountType() {
- return headerLine.getCountType();
- }
-
- /**
- * True if this field has a constant, fixed number of elements (such as 1 for an atomic integer)
- *
- * @return
- */
- @Ensures("result != (hasValueDeterminedNumElements() || hasContextDeterminedNumElements())")
- public boolean hasConstantNumElements() {
- return getCountType() == VCFHeaderLineCount.INTEGER;
- }
-
- /**
- * True if the only way to determine how many elements this field contains is by
- * inspecting the actual value directly, such as when the number of elements
- * is a variable length list per site or per genotype.
- * @return
- */
- @Ensures("result != (hasConstantNumElements() || hasContextDeterminedNumElements())")
- public boolean hasValueDeterminedNumElements() {
- return getCountType() == VCFHeaderLineCount.UNBOUNDED;
- }
-
- /**
- * True if this field has a non-fixed number of elements that depends only on the properties
- * of the current VariantContext, such as one value per Allele or per genotype configuration.
- *
- * @return
- */
- @Ensures("result != (hasValueDeterminedNumElements() || hasConstantNumElements())")
- public boolean hasContextDeterminedNumElements() {
- return ! hasConstantNumElements() && ! hasValueDeterminedNumElements();
- }
-
- /**
- * Get the number of elements, assuming this field has a constant number of elements.
- * @return
- */
- @Requires("hasConstantNumElements()")
- @Ensures("result >= 0")
- public int numElements() {
- return headerLine.getCount();
- }
-
- /**
- * Get the number of elements by looking at the actual value provided
- * @return
- */
- @Requires("hasValueDeterminedNumElements()")
- @Ensures("result >= 0")
- public int numElements(final Object value) {
- return numElementsFromValue(value);
- }
-
- /**
- * Get the number of elements, assuming this field has context-determined number of elements.
- * @return
- */
- @Requires("hasContextDeterminedNumElements()")
- @Ensures("result >= 0")
- public int numElements(final VariantContext vc) {
- return headerLine.getCount(vc);
- }
-
- /**
- * A convenience access for the number of elements, returning
- * the number of encoded elements, either from the fixed number
- * it has, from the VC, or from the value itself.
- * @param vc
- * @param value
- * @return
- */
- @Ensures("result >= 0")
- public final int numElements(final VariantContext vc, final Object value) {
- if ( hasConstantNumElements() ) return numElements();
- else if ( hasContextDeterminedNumElements() ) return numElements(vc);
- else return numElements(value);
- }
-
- /**
- * Given a value, return the number of elements we will encode for it.
- *
- * Assumes the value is encoded as a List
- *
- * @param value
- * @return
- */
- @Requires("hasValueDeterminedNumElements()")
- @Ensures("result >= 0")
- protected int numElementsFromValue(final Object value) {
- if ( value == null ) return 0;
- else if ( value instanceof List ) return ((List) value).size();
- else return 1;
- }
-
- // ----------------------------------------------------------------------
- //
- // methods to determine the BCF2 type of the encoded values
- //
- // ----------------------------------------------------------------------
-
- /**
- * Is the BCF2 type of this field static, or does it have to be determine from
- * the actual field value itself?
- * @return
- */
- @Ensures("result || isDynamicallyTyped()")
- public final boolean isStaticallyTyped() { return ! isDynamicallyTyped(); }
-
- /**
- * Is the BCF2 type of this field static, or does it have to be determine from
- * the actual field value itself?
- * @return
- */
- @Ensures("result || isStaticallyTyped()")
- public final boolean isDynamicallyTyped() { return staticType == null; }
-
- /**
- * Get the BCF2 type for this field, either from the static type of the
- * field itself or by inspecting the value itself.
- *
- * @return
- */
- public final BCF2Type getType(final Object value) {
- return isDynamicallyTyped() ? getDynamicType(value) : getStaticType();
- }
-
- @Requires("isStaticallyTyped()")
- @Ensures("result != null")
- public final BCF2Type getStaticType() {
- return staticType;
- }
-
- @Requires("isDynamicallyTyped()")
- @Ensures("result != null")
- public BCF2Type getDynamicType(final Object value) {
- throw new IllegalStateException("BUG: cannot get dynamic type for statically typed BCF2 field " + getField());
- }
-
- // ----------------------------------------------------------------------
- //
- // methods to encode values, including the key abstract method
- //
- // ----------------------------------------------------------------------
-
- /**
- * Key abstract method that should encode a value of the given type into the encoder.
- *
- * Value will be of a type appropriate to the underlying encoder. If the genotype field is represented as
- * an int[], this will be value, and the encoder needs to handle encoding all of the values in the int[].
- *
- * The argument should be used, not the getType() method in the superclass as an outer loop might have
- * decided a more general type (int16) to use, even through this encoder could have been done with int8.
- *
- * If minValues > 0, then encodeValue must write in at least minValues items from value. If value is atomic,
- * this means that minValues - 1 MISSING values should be added to the encoder. If minValues is a collection
- * type (int[]) then minValues - values.length should be added. This argument is intended to handle padding
- * of values in genotype fields.
- *
- * @param encoder
- * @param value
- * @param type
- * @param minValues
- * @throws IOException
- */
- @Requires({"encoder != null", "isDynamicallyTyped() || type == getStaticType()", "minValues >= 0"})
- public abstract void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException;
-
- // ----------------------------------------------------------------------
- //
- // Subclass to encode Strings
- //
- // ----------------------------------------------------------------------
-
- public static class StringOrCharacter extends BCF2FieldEncoder {
- public StringOrCharacter(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
- super(headerLine, dict, BCF2Type.CHAR);
- }
-
- @Override
- public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
- final String s = javaStringToBCF2String(value);
- encoder.encodeRawString(s, Math.max(s.length(), minValues));
- }
-
- //
- // Regardless of what the header says, BCF2 strings and characters are always encoded
- // as arrays of CHAR type, which has a variable number of elements depending on the
- // exact string being encoded
- //
- @Override public boolean hasConstantNumElements() { return false; }
- @Override public boolean hasContextDeterminedNumElements() { return false; }
- @Override public boolean hasValueDeterminedNumElements() { return true; }
- @Override protected int numElementsFromValue(final Object value) {
- return value == null ? 0 : javaStringToBCF2String(value).length();
- }
-
- /**
- * Recode the incoming object to a String, compacting it into a
- * BCF2 string if the value is a list.
- *
- * @param value a String or List<String> to encode, or null
- * @return a non-null string to encode
- */
- @Ensures("result != null")
- private String javaStringToBCF2String(final Object value) {
- if ( value == null )
- return "";
- else if (value instanceof List) {
- final List<String> l = (List<String>)value;
- return BCF2Utils.collapseStringList(l);
- } else if ( value.getClass().isArray() ) {
- final List<String> l = new ArrayList<String>();
- Collections.addAll(l, (String[])value);
- return BCF2Utils.collapseStringList(l);
- } else
- return (String)value;
- }
- }
-
- // ----------------------------------------------------------------------
- //
- // Subclass to encode FLAG
- //
- // ----------------------------------------------------------------------
-
- public static class Flag extends BCF2FieldEncoder {
- public Flag(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
- super(headerLine, dict, BCF2Type.INT8);
- if ( ! headerLine.isFixedCount() || headerLine.getCount() != 0 )
- throw new IllegalStateException("Flag encoder only supports atomic flags for field " + getField());
- }
-
- @Override
- public int numElements() {
- return 1; // the header says 0 but we will write 1 value
- }
-
- @Override
- @Requires({"minValues <= 1", "value != null", "value instanceof Boolean", "((Boolean)value) == true"})
- public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
- encoder.encodeRawBytes(1, getStaticType());
- }
- }
-
- // ----------------------------------------------------------------------
- //
- // Subclass to encode FLOAT
- //
- // ----------------------------------------------------------------------
-
- public static class Float extends BCF2FieldEncoder {
- final boolean isAtomic;
-
- public Float(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
- super(headerLine, dict, BCF2Type.FLOAT);
- isAtomic = hasConstantNumElements() && numElements() == 1;
- }
-
- @Override
- public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
- int count = 0;
- // TODO -- can be restructured to avoid toList operation
- if ( isAtomic ) {
- // fast path for fields with 1 fixed float value
- if ( value != null ) {
- encoder.encodeRawFloat((Double)value);
- count++;
- }
- } else {
- // handle generic case
- final List<Double> doubles = toList(Double.class, value);
- for ( final Double d : doubles ) {
- if ( d != null ) { // necessary because .,. => [null, null] in VC
- encoder.encodeRawFloat(d);
- count++;
- }
- }
- }
- for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
- }
- }
-
- // ----------------------------------------------------------------------
- //
- // Subclass to encode int[]
- //
- // ----------------------------------------------------------------------
-
- public static class IntArray extends BCF2FieldEncoder {
- public IntArray(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
- super(headerLine, dict, null);
- }
-
- @Override
- protected int numElementsFromValue(final Object value) {
- return value == null ? 0 : ((int[])value).length;
- }
-
- @Override
- public BCF2Type getDynamicType(final Object value) {
- return value == null ? BCF2Type.INT8 : BCF2Utils.determineIntegerType((int[])value);
- }
-
- @Requires("value == null || ((int[])value).length <= minValues")
- @Override
- public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
- int count = 0;
- if ( value != null ) {
- for ( final int i : (int[])value ) {
- encoder.encodeRawInt(i, type);
- count++;
- }
- }
- for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
- }
- }
-
- // ----------------------------------------------------------------------
- //
- // Subclass to encode List<Integer>
- //
- // ----------------------------------------------------------------------
-
- /**
- * Specialized int encoder for atomic (non-list) integers
- */
- public static class AtomicInt extends BCF2FieldEncoder {
- public AtomicInt(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
- super(headerLine, dict, null);
- }
-
- @Override
- public BCF2Type getDynamicType(final Object value) {
- return value == null ? BCF2Type.INT8 : BCF2Utils.determineIntegerType((Integer)value);
- }
-
- @Override
- public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
- int count = 0;
- if ( value != null ) {
- encoder.encodeRawInt((Integer)value, type);
- count++;
- }
- for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
- }
- }
-
- public static class GenericInts extends BCF2FieldEncoder {
- public GenericInts(final VCFCompoundHeaderLine headerLine, final Map<String, Integer> dict ) {
- super(headerLine, dict, null);
- }
-
- @Override
- public BCF2Type getDynamicType(final Object value) {
- return value == null ? BCF2Type.INT8 : BCF2Utils.determineIntegerType(toList(Integer.class, value));
- }
-
- @Override
- public void encodeValue(final BCF2Encoder encoder, final Object value, final BCF2Type type, final int minValues) throws IOException {
- int count = 0;
- for ( final Integer i : toList(Integer.class, value) ) {
- if ( i != null ) { // necessary because .,. => [null, null] in VC
- encoder.encodeRawInt(i, type);
- count++;
- }
- }
- for ( ; count < minValues; count++ ) encoder.encodeRawMissingValue(type);
- }
- }
-
-
- // ----------------------------------------------------------------------
- //
- // Helper methods
- //
- // ----------------------------------------------------------------------
-
- /**
- * Helper function that takes an object and returns a list representation
- * of it:
- *
- * o == null => []
- * o is a list => o
- * else => [o]
- *
- * @param c the class of the object
- * @param o the object to convert to a Java List
- * @return
- */
- private final static <T> List<T> toList(final Class<T> c, final Object o) {
- if ( o == null ) return Collections.emptyList();
- else if ( o instanceof List ) return (List<T>)o;
- else if ( o.getClass().isArray() ) {
- final List<T> l = new ArrayList<T>();
- Collections.addAll(l, (T[])o);
- return l;
- }
- else return Collections.singletonList((T)o);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldWriter.java b/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldWriter.java
deleted file mode 100644
index 9667d18..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldWriter.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broadinstitute.variant.bcf2.BCF2Type;
-import org.broadinstitute.variant.bcf2.BCF2Utils;
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.broadinstitute.variant.variantcontext.Allele;
-import org.broadinstitute.variant.variantcontext.Genotype;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public abstract class BCF2FieldWriter {
- private final VCFHeader header;
- private final BCF2FieldEncoder fieldEncoder;
-
- @Requires({"header != null", "fieldEncoder != null"})
- protected BCF2FieldWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- this.header = header;
- this.fieldEncoder = fieldEncoder;
- }
-
- @Ensures("result != null")
- protected VCFHeader getHeader() { return header; }
- @Ensures("result != null")
- protected BCF2FieldEncoder getFieldEncoder() {
- return fieldEncoder;
- }
- @Ensures("result != null")
- protected String getField() { return getFieldEncoder().getField(); }
-
- @Requires("vc != null")
- public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
- fieldEncoder.writeFieldKey(encoder);
- }
-
- public void done(final BCF2Encoder encoder, final VariantContext vc) throws IOException { } // TODO -- overload done so that we null out values and test for correctness
-
- @Override
- public String toString() {
- return "BCF2FieldWriter " + getClass().getSimpleName() + " with encoder " + getFieldEncoder();
- }
-
- // --------------------------------------------------------------------------------
- //
- // Sites writers
- //
- // --------------------------------------------------------------------------------
-
- public static abstract class SiteWriter extends BCF2FieldWriter {
- protected SiteWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- super(header, fieldEncoder);
- }
-
- public abstract void site(final BCF2Encoder encoder, final VariantContext vc) throws IOException;
- }
-
- public static class GenericSiteWriter extends SiteWriter {
- public GenericSiteWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- super(header, fieldEncoder);
- }
-
- @Override
- public void site(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
- final Object rawValue = vc.getAttribute(getField(), null);
- final BCF2Type type = getFieldEncoder().getType(rawValue);
- if ( rawValue == null ) {
- // the value is missing, just write in null
- encoder.encodeType(0, type);
- } else {
- final int valueCount = getFieldEncoder().numElements(vc, rawValue);
- encoder.encodeType(valueCount, type);
- getFieldEncoder().encodeValue(encoder, rawValue, type, valueCount);
- }
- }
- }
-
- // --------------------------------------------------------------------------------
- //
- // Genotypes writers
- //
- // --------------------------------------------------------------------------------
-
- public static abstract class GenotypesWriter extends BCF2FieldWriter {
- int nValuesPerGenotype = -1;
- BCF2Type encodingType = null;
-
- protected GenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- super(header, fieldEncoder);
-
- if ( fieldEncoder.hasConstantNumElements() ) {
- nValuesPerGenotype = getFieldEncoder().numElements();
- }
- }
-
- @Override
- @Requires({"encodingType != null",
- "nValuesPerGenotype >= 0 || ! getFieldEncoder().hasConstantNumElements()"})
- @Ensures("nValuesPerGenotype >= 0")
- public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
- // writes the key information
- super.start(encoder, vc);
-
- // only update if we need to
- if ( ! getFieldEncoder().hasConstantNumElements() ) {
- if ( getFieldEncoder().hasContextDeterminedNumElements() )
- // we are cheap -- just depends on genotype of allele counts
- nValuesPerGenotype = getFieldEncoder().numElements(vc);
- else
- // we have to go fishing through the values themselves (expensive)
- nValuesPerGenotype = computeMaxSizeOfGenotypeFieldFromValues(vc);
- }
-
- encoder.encodeType(nValuesPerGenotype, encodingType);
- }
-
- @Requires({"encodingType != null", "nValuesPerGenotype >= 0"})
- public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
- final Object fieldValue = g.getExtendedAttribute(getField(), null);
- getFieldEncoder().encodeValue(encoder, fieldValue, encodingType, nValuesPerGenotype);
- }
-
- @Ensures({"result >= 0"})
- protected int numElements(final VariantContext vc, final Genotype g) {
- return getFieldEncoder().numElements(vc, g.getExtendedAttribute(getField()));
- }
-
- @Ensures({"result >= 0"})
- private final int computeMaxSizeOfGenotypeFieldFromValues(final VariantContext vc) {
- int size = -1;
-
- for ( final Genotype g : vc.getGenotypes() ) {
- size = Math.max(size, numElements(vc, g));
- }
-
- return size;
- }
- }
-
- public static class StaticallyTypeGenotypesWriter extends GenotypesWriter {
- public StaticallyTypeGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- super(header, fieldEncoder);
- encodingType = getFieldEncoder().getStaticType();
- }
- }
-
- public static class IntegerTypeGenotypesWriter extends GenotypesWriter {
- public IntegerTypeGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- super(header, fieldEncoder);
- }
-
- @Override
- public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
- // the only value that is dynamic are integers
- final List<Integer> values = new ArrayList<Integer>(vc.getNSamples());
- for ( final Genotype g : vc.getGenotypes() ) {
- for ( final Object i : BCF2Utils.toList(g.getExtendedAttribute(getField(), null)) ) {
- if ( i != null ) values.add((Integer)i); // we know they are all integers
- }
- }
-
- encodingType = BCF2Utils.determineIntegerType(values);
- super.start(encoder, vc);
- }
- }
-
- public static class IGFGenotypesWriter extends GenotypesWriter {
- final IntGenotypeFieldAccessors.Accessor ige;
-
- public IGFGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder, final IntGenotypeFieldAccessors.Accessor ige) {
- super(header, fieldEncoder);
- this.ige = ige;
-
- if ( ! (fieldEncoder instanceof BCF2FieldEncoder.IntArray) )
- throw new IllegalArgumentException("BUG: IntGenotypesWriter requires IntArray encoder for field " + getField());
- }
-
- @Override
- public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
- // TODO
- // TODO this piece of code consumes like 10% of the runtime alone because fo the vc.getGenotypes() iteration
- // TODO
- encodingType = BCF2Type.INT8;
- for ( final Genotype g : vc.getGenotypes() ) {
- final int[] pls = ige.getValues(g);
- final BCF2Type plsType = getFieldEncoder().getType(pls);
- encodingType = BCF2Utils.maxIntegerType(encodingType, plsType);
- if ( encodingType == BCF2Type.INT32 )
- break; // stop early
- }
-
- super.start(encoder, vc);
- }
-
- @Override
- public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
- getFieldEncoder().encodeValue(encoder, ige.getValues(g), encodingType, nValuesPerGenotype);
- }
-
- @Override
- protected int numElements(final VariantContext vc, final Genotype g) {
- return ige.getSize(g);
- }
- }
-
- public static class FTGenotypesWriter extends StaticallyTypeGenotypesWriter {
- public FTGenotypesWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- super(header, fieldEncoder);
- }
-
- public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
- final String fieldValue = g.getFilters();
- getFieldEncoder().encodeValue(encoder, fieldValue, encodingType, nValuesPerGenotype);
- }
-
- @Override
- protected int numElements(final VariantContext vc, final Genotype g) {
- return getFieldEncoder().numElements(vc, g.getFilters());
- }
- }
-
- public static class GTWriter extends GenotypesWriter {
- final Map<Allele, Integer> alleleMapForTriPlus = new HashMap<Allele, Integer>(5);
- Allele ref, alt1;
-
- public GTWriter(final VCFHeader header, final BCF2FieldEncoder fieldEncoder) {
- super(header, fieldEncoder);
- }
-
- @Override
- public void start(final BCF2Encoder encoder, final VariantContext vc) throws IOException {
- if ( vc.getNAlleles() > BCF2Utils.MAX_ALLELES_IN_GENOTYPES )
- throw new IllegalStateException("Current BCF2 encoder cannot handle sites " +
- "with > " + BCF2Utils.MAX_ALLELES_IN_GENOTYPES + " alleles, but you have "
- + vc.getNAlleles() + " at " + vc.getChr() + ":" + vc.getStart());
-
- encodingType = BCF2Type.INT8;
- buildAlleleMap(vc);
- nValuesPerGenotype = vc.getMaxPloidy(2);
-
- super.start(encoder, vc);
- }
-
- @Override
- public void addGenotype(final BCF2Encoder encoder, final VariantContext vc, final Genotype g) throws IOException {
- final int samplePloidy = g.getPloidy();
- for ( int i = 0; i < nValuesPerGenotype; i++ ) {
- if ( i < samplePloidy ) {
- // we encode the actual allele
- final Allele a = g.getAllele(i);
- final int offset = getAlleleOffset(a);
- final int encoded = ((offset+1) << 1) | (g.isPhased() ? 0x01 : 0x00);
- encoder.encodeRawBytes(encoded, encodingType);
- } else {
- // we need to pad with missing as we have ploidy < max for this sample
- encoder.encodeRawBytes(encodingType.getMissingBytes(), encodingType);
- }
- }
- }
-
- /**
- * Fast path code to determine the offset.
- *
- * Inline tests for == against ref (most common, first test)
- * == alt1 (second most common, second test)
- * == NO_CALL (third)
- * and finally in the map from allele => offset for all alt 2+ alleles
- *
- * @param a the allele whose offset we wish to determine
- * @return the offset (from 0) of the allele in the list of variant context alleles (-1 means NO_CALL)
- */
- @Requires("a != null")
- private final int getAlleleOffset(final Allele a) {
- if ( a == ref ) return 0;
- else if ( a == alt1 ) return 1;
- else if ( a == Allele.NO_CALL ) return -1;
- else {
- final Integer o = alleleMapForTriPlus.get(a);
- if ( o == null ) throw new IllegalStateException("BUG: Couldn't find allele offset for allele " + a);
- return o;
- }
- }
-
- private final void buildAlleleMap(final VariantContext vc) {
- // these are fast path options to determine the offsets for
- final int nAlleles = vc.getNAlleles();
- ref = vc.getReference();
- alt1 = nAlleles > 1 ? vc.getAlternateAllele(0) : null;
-
- if ( nAlleles > 2 ) {
- // for multi-allelics we need to clear the map, and add additional looks
- alleleMapForTriPlus.clear();
- final List<Allele> alleles = vc.getAlleles();
- for ( int i = 2; i < alleles.size(); i++ ) {
- alleleMapForTriPlus.put(alleles.get(i), i);
- }
- }
- }
- }
-}
-
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldWriterManager.java b/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldWriterManager.java
deleted file mode 100644
index a3cbc5b..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2FieldWriterManager.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.vcf.*;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * See #BCFWriter for documentation on this classes role in encoding BCF2 files
- *
- * @author Mark DePristo
- * @since 06/12
- */
-public class BCF2FieldWriterManager {
- final Map<String, BCF2FieldWriter.SiteWriter> siteWriters = new HashMap<String, BCF2FieldWriter.SiteWriter>();
- final Map<String, BCF2FieldWriter.GenotypesWriter> genotypesWriters = new HashMap<String, BCF2FieldWriter.GenotypesWriter>();
- final IntGenotypeFieldAccessors intGenotypeFieldAccessors = new IntGenotypeFieldAccessors();
-
- public BCF2FieldWriterManager() { }
-
- /**
- * Setup the FieldWriters appropriate to each INFO and FORMAT in the VCF header
- *
- * Must be called before any of the getter methods will work
- *
- * @param header a VCFHeader containing description for every INFO and FORMAT field we'll attempt to write out to BCF
- * @param encoder the encoder we are going to use to write out the BCF2 data
- * @param stringDictionary a map from VCFHeader strings to their offsets for encoding
- */
- public void setup(final VCFHeader header, final BCF2Encoder encoder, final Map<String, Integer> stringDictionary) {
- for (final VCFInfoHeaderLine line : header.getInfoHeaderLines()) {
- final String field = line.getID();
- final BCF2FieldWriter.SiteWriter writer = createInfoWriter(header, line, encoder, stringDictionary);
- add(siteWriters, field, writer);
- }
-
- for (final VCFFormatHeaderLine line : header.getFormatHeaderLines()) {
- final String field = line.getID();
- final BCF2FieldWriter.GenotypesWriter writer = createGenotypesWriter(header, line, encoder, stringDictionary);
- add(genotypesWriters, field, writer);
- }
- }
-
- @Requires({"field != null", "writer != null"})
- @Ensures("map.containsKey(field)")
- private final <T> void add(final Map<String, T> map, final String field, final T writer) {
- if ( map.containsKey(field) )
- throw new IllegalStateException("BUG: field " + field + " already seen in VCFHeader while building BCF2 field encoders");
- map.put(field, writer);
- }
-
- // -----------------------------------------------------------------
- //
- // Master routine to look at the header, a specific line, and
- // build an appropriate SiteWriter for that header element
- //
- // -----------------------------------------------------------------
-
- private BCF2FieldWriter.SiteWriter createInfoWriter(final VCFHeader header,
- final VCFInfoHeaderLine line,
- final BCF2Encoder encoder,
- final Map<String, Integer> dict) {
- return new BCF2FieldWriter.GenericSiteWriter(header, createFieldEncoder(line, encoder, dict, false));
- }
-
- private BCF2FieldEncoder createFieldEncoder(final VCFCompoundHeaderLine line,
- final BCF2Encoder encoder,
- final Map<String, Integer> dict,
- final boolean createGenotypesEncoders ) {
-
- if ( createGenotypesEncoders && intGenotypeFieldAccessors.getAccessor(line.getID()) != null ) {
- if ( GeneralUtils.DEBUG_MODE_ENABLED && line.getType() != VCFHeaderLineType.Integer )
- System.err.println("Warning: field " + line.getID() + " expected to encode an integer but saw " + line.getType() + " for record " + line);
- return new BCF2FieldEncoder.IntArray(line, dict);
- } else if ( createGenotypesEncoders && line.getID().equals(VCFConstants.GENOTYPE_KEY) ) {
- return new BCF2FieldEncoder.GenericInts(line, dict);
- } else {
- switch ( line.getType() ) {
- case Character:
- case String:
- return new BCF2FieldEncoder.StringOrCharacter(line, dict);
- case Flag:
- return new BCF2FieldEncoder.Flag(line, dict);
- case Float:
- return new BCF2FieldEncoder.Float(line, dict);
- case Integer:
- if ( line.isFixedCount() && line.getCount() == 1 )
- return new BCF2FieldEncoder.AtomicInt(line, dict);
- else
- return new BCF2FieldEncoder.GenericInts(line, dict);
- default:
- throw new IllegalArgumentException("Unexpected type for field " + line.getID());
- }
- }
- }
-
- // -----------------------------------------------------------------
- //
- // Master routine to look at the header, a specific line, and
- // build an appropriate Genotypes for that header element
- //
- // -----------------------------------------------------------------
-
- private BCF2FieldWriter.GenotypesWriter createGenotypesWriter(final VCFHeader header,
- final VCFFormatHeaderLine line,
- final BCF2Encoder encoder,
- final Map<String, Integer> dict) {
- final String field = line.getID();
- final BCF2FieldEncoder fieldEncoder = createFieldEncoder(line, encoder, dict, true);
-
- if ( field.equals(VCFConstants.GENOTYPE_KEY) ) {
- return new BCF2FieldWriter.GTWriter(header, fieldEncoder);
- } else if ( line.getID().equals(VCFConstants.GENOTYPE_FILTER_KEY) ) {
- return new BCF2FieldWriter.FTGenotypesWriter(header, fieldEncoder);
- } else if ( intGenotypeFieldAccessors.getAccessor(field) != null ) {
- return new BCF2FieldWriter.IGFGenotypesWriter(header, fieldEncoder, intGenotypeFieldAccessors.getAccessor(field));
- } else if ( line.getType() == VCFHeaderLineType.Integer ) {
- return new BCF2FieldWriter.IntegerTypeGenotypesWriter(header, fieldEncoder);
- } else {
- return new BCF2FieldWriter.StaticallyTypeGenotypesWriter(header, fieldEncoder);
- }
- }
-
- // -----------------------------------------------------------------
- //
- // Accessors to get site / genotype writers
- //
- // -----------------------------------------------------------------
-
- /**
- * Get a site writer specialized to encode values for site info field
- * @param field key found in the VCF header INFO records
- * @return non-null writer if one can be found, or null if none exists for field
- */
- public BCF2FieldWriter.SiteWriter getSiteFieldWriter(final String field) {
- return getWriter(field, siteWriters);
- }
-
- /**
- * Get a genotypes writer specialized to encode values for genotypes field
- * @param field key found in the VCF header FORMAT records
- * @return non-null writer if one can be found, or null if none exists for field
- */
- public BCF2FieldWriter.GenotypesWriter getGenotypeFieldWriter(final String field) {
- return getWriter(field, genotypesWriters);
- }
-
- @Requires({"map != null", "key != null"})
- public <T> T getWriter(final String key, final Map<String, T> map) {
- return map.get(key);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2Writer.java b/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2Writer.java
deleted file mode 100644
index 462f32d..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/BCF2Writer.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import net.sf.samtools.SAMSequenceDictionary;
-import org.broad.tribble.index.IndexCreator;
-import org.broadinstitute.variant.bcf2.BCF2Codec;
-import org.broadinstitute.variant.bcf2.BCF2Type;
-import org.broadinstitute.variant.bcf2.BCF2Utils;
-import org.broadinstitute.variant.bcf2.BCFVersion;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.vcf.VCFConstants;
-import org.broadinstitute.variant.vcf.VCFContigHeaderLine;
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.broadinstitute.variant.variantcontext.*;
-import org.broadinstitute.variant.vcf.VCFUtils;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * VariantContextWriter that emits BCF2 binary encoding
- *
- * Overall structure of this writer is complex for efficiency reasons
- *
- * -- The BCF2Writer manages the low-level BCF2 encoder, the mappings
- * from contigs and strings to offsets, the VCF header, and holds the
- * lower-level encoders that map from VC and Genotype fields to their
- * specific encoders. This class also writes out the standard BCF2 fields
- * like POS, contig, the size of info and genotype data, QUAL, etc. It
- * has loops over the INFO and GENOTYPES to encode each individual datum
- * with the generic field encoders, but the actual encoding work is
- * done with by the FieldWriters classes themselves
- *
- * -- BCF2FieldWriter are specialized classes for writing out SITE and
- * genotype information for specific SITE/GENOTYPE fields (like AC for
- * sites and GQ for genotypes). These are objects in themselves because
- * the manage all of the complexity of relating the types in the VCF header
- * with the proper encoding in BCF as well as the type representing this
- * in java. Relating all three of these pieces of information together
- * is the main complexity challenge in the encoder. The piece of code
- * that determines which FieldWriters to associate with each SITE and
- * GENOTYPE field is the BCF2FieldWriterManager. These FieldWriters
- * are specialized for specific combinations of encoders (see below)
- * and contexts (genotypes) for efficiency, so they smartly manage
- * the writing of PLs (encoded as int[]) directly into the lowest
- * level BCFEncoder.
- *
- * -- At the third level is the BCF2FieldEncoder, relatively simple
- * pieces of code that handle the task of determining the right
- * BCF2 type for specific field values, as well as reporting back
- * information such as the number of elements used to encode it
- * (simple for atomic values like Integer but complex for PLs
- * or lists of strings)
- *
- * -- At the lowest level is the BCF2Encoder itself. This provides
- * just the limited encoding methods specified by the BCF2 specification. This encoder
- * doesn't do anything but make it possible to conveniently write out valid low-level
- * BCF2 constructs.
- *
- * @author Mark DePristo
- * @since 06/12
- */
-class BCF2Writer extends IndexingVariantContextWriter {
- public static final int MAJOR_VERSION = 2;
- public static final int MINOR_VERSION = 1;
-
- final private static boolean ALLOW_MISSING_CONTIG_LINES = false;
-
- private final OutputStream outputStream; // Note: do not flush until completely done writing, to avoid issues with eventual BGZF support
- private VCFHeader header;
- private final Map<String, Integer> contigDictionary = new HashMap<String, Integer>();
- private final Map<String, Integer> stringDictionaryMap = new LinkedHashMap<String, Integer>();
- private final boolean doNotWriteGenotypes;
- private String[] sampleNames = null;
-
- private final BCF2Encoder encoder = new BCF2Encoder(); // initialized after the header arrives
- final BCF2FieldWriterManager fieldManager = new BCF2FieldWriterManager();
-
- /**
- * cached results for whether we can write out raw genotypes data.
- */
- private VCFHeader lastVCFHeaderOfUnparsedGenotypes = null;
- private boolean canPassOnUnparsedGenotypeDataForLastVCFHeader = false;
-
- public BCF2Writer(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
- final boolean enableOnTheFlyIndexing, final boolean doNotWriteGenotypes) {
- super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing);
- this.outputStream = getOutputStream();
- this.doNotWriteGenotypes = doNotWriteGenotypes;
- }
-
- public BCF2Writer(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
- final IndexCreator indexCreator,
- final boolean enableOnTheFlyIndexing, final boolean doNotWriteGenotypes) {
- super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing, indexCreator);
- this.outputStream = getOutputStream();
- this.doNotWriteGenotypes = doNotWriteGenotypes;
- }
-
- // --------------------------------------------------------------------------------
- //
- // Interface functions
- //
- // --------------------------------------------------------------------------------
-
- @Override
- public void writeHeader(VCFHeader header) {
- // make sure the header is sorted correctly
- header = new VCFHeader(header.getMetaDataInSortedOrder(), header.getGenotypeSamples());
-
- // create the config offsets map
- if ( header.getContigLines().isEmpty() ) {
- if ( ALLOW_MISSING_CONTIG_LINES ) {
- if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
- System.err.println("No contig dictionary found in header, falling back to reference sequence dictionary");
- }
- createContigDictionary(VCFUtils.makeContigHeaderLines(getRefDict(), null));
- } else {
- throw new IllegalStateException("Cannot write BCF2 file with missing contig lines");
- }
- } else {
- createContigDictionary(header.getContigLines());
- }
-
- // set up the map from dictionary string values -> offset
- final ArrayList<String> dict = BCF2Utils.makeDictionary(header);
- for ( int i = 0; i < dict.size(); i++ ) {
- stringDictionaryMap.put(dict.get(i), i);
- }
-
- sampleNames = header.getGenotypeSamples().toArray(new String[header.getNGenotypeSamples()]);
-
- // setup the field encodings
- fieldManager.setup(header, encoder, stringDictionaryMap);
-
- try {
- // write out the header into a byte stream, get its length, and write everything to the file
- final ByteArrayOutputStream capture = new ByteArrayOutputStream();
- final OutputStreamWriter writer = new OutputStreamWriter(capture);
- this.header = VCFWriter.writeHeader(header, writer, doNotWriteGenotypes, VCFWriter.getVersionLine(), "BCF2 stream");
- writer.append('\0'); // the header is null terminated by a byte
- writer.close();
-
- final byte[] headerBytes = capture.toByteArray();
- new BCFVersion(MAJOR_VERSION, MINOR_VERSION).write(outputStream);
- BCF2Type.INT32.write(headerBytes.length, outputStream);
- outputStream.write(headerBytes);
- } catch (IOException e) {
- throw new RuntimeException("BCF2 stream: Got IOException while trying to write BCF2 header", e);
- }
- }
-
- @Override
- public void add( VariantContext vc ) {
- if ( doNotWriteGenotypes )
- vc = new VariantContextBuilder(vc).noGenotypes().make();
- vc = vc.fullyDecode(header, false);
-
- super.add(vc); // allow on the fly indexing
-
- try {
- final byte[] infoBlock = buildSitesData(vc);
- final byte[] genotypesBlock = buildSamplesData(vc);
-
- // write the two blocks to disk
- writeBlock(infoBlock, genotypesBlock);
- }
- catch ( IOException e ) {
- throw new RuntimeException("Error writing record to BCF2 file: " + vc.toString(), e);
- }
- }
-
- @Override
- public void close() {
- try {
- outputStream.flush();
- outputStream.close();
- }
- catch ( IOException e ) {
- throw new RuntimeException("Failed to close BCF2 file");
- }
- super.close();
- }
-
- // --------------------------------------------------------------------------------
- //
- // implicit block
- //
- // The first four records of BCF are inline untype encoded data of:
- //
- // 4 byte integer chrom offset
- // 4 byte integer start
- // 4 byte integer ref length
- // 4 byte float qual
- //
- // --------------------------------------------------------------------------------
- private byte[] buildSitesData( VariantContext vc ) throws IOException {
- final int contigIndex = contigDictionary.get(vc.getChr());
- if ( contigIndex == -1 )
- throw new IllegalStateException(String.format("Contig %s not found in sequence dictionary from reference", vc.getChr()));
-
- // note use of encodeRawValue to not insert the typing byte
- encoder.encodeRawValue(contigIndex, BCF2Type.INT32);
-
- // pos. GATK is 1 based, BCF2 is 0 based
- encoder.encodeRawValue(vc.getStart() - 1, BCF2Type.INT32);
-
- // ref length. GATK is closed, but BCF2 is open so the ref length is GATK end - GATK start + 1
- // for example, a SNP is in GATK at 1:10-10, which has ref length 10 - 10 + 1 = 1
- encoder.encodeRawValue(vc.getEnd() - vc.getStart() + 1, BCF2Type.INT32);
-
- // qual
- if ( vc.hasLog10PError() )
- encoder.encodeRawFloat((float) vc.getPhredScaledQual());
- else
- encoder.encodeRawMissingValue(BCF2Type.FLOAT);
-
- // info fields
- final int nAlleles = vc.getNAlleles();
- final int nInfo = vc.getAttributes().size();
- final int nGenotypeFormatFields = getNGenotypeFormatFields(vc);
- final int nSamples = header.getNGenotypeSamples();
-
- encoder.encodeRawInt((nAlleles << 16) | (nInfo & 0x0000FFFF), BCF2Type.INT32);
- encoder.encodeRawInt((nGenotypeFormatFields << 24) | (nSamples & 0x00FFFFF), BCF2Type.INT32);
-
- buildID(vc);
- buildAlleles(vc);
- buildFilter(vc);
- buildInfo(vc);
-
- return encoder.getRecordBytes();
- }
-
-
- /**
- * Can we safely write on the raw (undecoded) genotypes of an input VC?
- *
- * The cache depends on the undecoded lazy data header == lastVCFHeaderOfUnparsedGenotypes, in
- * which case we return the previous result. If it's not cached, we use the BCF2Util to
- * compare the VC header with our header (expensive) and cache it.
- *
- * @param lazyData
- * @return
- */
- private boolean canSafelyWriteRawGenotypesBytes(final BCF2Codec.LazyData lazyData) {
- if ( lazyData.header != lastVCFHeaderOfUnparsedGenotypes ) {
- // result is already cached
- canPassOnUnparsedGenotypeDataForLastVCFHeader = BCF2Utils.headerLinesAreOrderedConsistently(this.header,lazyData.header);
- lastVCFHeaderOfUnparsedGenotypes = lazyData.header;
- }
-
- return canPassOnUnparsedGenotypeDataForLastVCFHeader;
- }
-
- private BCF2Codec.LazyData getLazyData(final VariantContext vc) {
- if ( vc.getGenotypes().isLazyWithData() ) {
- final LazyGenotypesContext lgc = (LazyGenotypesContext)vc.getGenotypes();
-
- if ( lgc.getUnparsedGenotypeData() instanceof BCF2Codec.LazyData &&
- canSafelyWriteRawGenotypesBytes((BCF2Codec.LazyData) lgc.getUnparsedGenotypeData())) {
- return (BCF2Codec.LazyData)lgc.getUnparsedGenotypeData();
- } else {
- lgc.decode(); // WARNING -- required to avoid keeping around bad lazy data for too long
- }
- }
-
- return null;
- }
-
- /**
- * Try to get the nGenotypeFields as efficiently as possible.
- *
- * If this is a lazy BCF2 object just grab the field count from there,
- * otherwise do the whole counting by types test in the actual data
- *
- * @param vc
- * @return
- */
- private int getNGenotypeFormatFields(final VariantContext vc) {
- final BCF2Codec.LazyData lazyData = getLazyData(vc);
- return lazyData != null ? lazyData.nGenotypeFields : vc.calcVCFGenotypeKeys(header).size();
- }
-
- private void buildID( VariantContext vc ) throws IOException {
- encoder.encodeTypedString(vc.getID());
- }
-
- private void buildAlleles( VariantContext vc ) throws IOException {
- for ( Allele allele : vc.getAlleles() ) {
- final byte[] s = allele.getDisplayBases();
- if ( s == null )
- throw new IllegalStateException("BUG: BCF2Writer encountered null padded allele" + allele);
- encoder.encodeTypedString(s);
- }
- }
-
- private void buildFilter( VariantContext vc ) throws IOException {
- if ( vc.isFiltered() ) {
- encodeStringsByRef(vc.getFilters());
- } else if ( vc.filtersWereApplied() ) {
- encodeStringsByRef(Collections.singleton(VCFConstants.PASSES_FILTERS_v4));
- } else {
- encoder.encodeTypedMissing(BCF2Type.INT8);
- }
- }
-
- private void buildInfo( VariantContext vc ) throws IOException {
- for ( Map.Entry<String, Object> infoFieldEntry : vc.getAttributes().entrySet() ) {
- final String field = infoFieldEntry.getKey();
- final BCF2FieldWriter.SiteWriter writer = fieldManager.getSiteFieldWriter(field);
- if ( writer == null ) errorUnexpectedFieldToWrite(vc, field, "INFO");
- writer.start(encoder, vc);
- writer.site(encoder, vc);
- writer.done(encoder, vc);
- }
- }
-
- private byte[] buildSamplesData(final VariantContext vc) throws IOException {
- final BCF2Codec.LazyData lazyData = getLazyData(vc); // has critical side effects
- if ( lazyData != null ) {
- // we never decoded any data from this BCF file, so just pass it back
- return lazyData.bytes;
- }
-
- // we have to do work to convert the VC into a BCF2 byte stream
- final List<String> genotypeFields = vc.calcVCFGenotypeKeys(header);
- for ( final String field : genotypeFields ) {
- final BCF2FieldWriter.GenotypesWriter writer = fieldManager.getGenotypeFieldWriter(field);
- if ( writer == null ) errorUnexpectedFieldToWrite(vc, field, "FORMAT");
-
- assert writer != null;
-
- writer.start(encoder, vc);
- for ( final String name : sampleNames ) {
- Genotype g = vc.getGenotype(name);
- if ( g == null ) g = GenotypeBuilder.createMissing(name, writer.nValuesPerGenotype);
- writer.addGenotype(encoder, vc, g);
- }
- writer.done(encoder, vc);
- }
- return encoder.getRecordBytes();
- }
-
- /**
- * Throws a meaningful error message when a field (INFO or FORMAT) is found when writing out a file
- * but there's no header line for it.
- *
- * @param vc
- * @param field
- * @param fieldType
- */
- private void errorUnexpectedFieldToWrite(final VariantContext vc, final String field, final String fieldType) {
- throw new IllegalStateException("Found field " + field + " in the " + fieldType + " fields of VariantContext at " +
- vc.getChr() + ":" + vc.getStart() + " from " + vc.getSource() + " but this hasn't been defined in the VCFHeader");
- }
-
- // --------------------------------------------------------------------------------
- //
- // Low-level block encoding
- //
- // --------------------------------------------------------------------------------
-
- /**
- * Write the data in the encoder to the outputstream as a length encoded
- * block of data. After this call the encoder stream will be ready to
- * start a new data block
- *
- * @throws IOException
- */
- @Requires({"infoBlock.length > 0", "genotypesBlock.length >= 0"})
- private void writeBlock(final byte[] infoBlock, final byte[] genotypesBlock) throws IOException {
- BCF2Type.INT32.write(infoBlock.length, outputStream);
- BCF2Type.INT32.write(genotypesBlock.length, outputStream);
- outputStream.write(infoBlock);
- outputStream.write(genotypesBlock);
- }
-
- @Requires("! strings.isEmpty()")
- @Ensures("result.isIntegerType()")
- private BCF2Type encodeStringsByRef(final Collection<String> strings) throws IOException {
- final List<Integer> offsets = new ArrayList<Integer>(strings.size());
-
- // iterate over strings until we find one that needs 16 bits, and break
- for ( final String string : strings ) {
- final Integer got = stringDictionaryMap.get(string);
- if ( got == null ) throw new IllegalStateException("Format error: could not find string " + string + " in header as required by BCF");
- final int offset = got;
- offsets.add(offset);
- }
-
- final BCF2Type type = BCF2Utils.determineIntegerType(offsets);
- encoder.encodeTyped(offsets, type);
- return type;
- }
-
- /**
- * Create the contigDictionary from the contigLines extracted from the VCF header
- *
- * @param contigLines
- */
- @Requires("contigDictionary.isEmpty()")
- private void createContigDictionary(final Collection<VCFContigHeaderLine> contigLines) {
- int offset = 0;
- for ( VCFContigHeaderLine contig : contigLines )
- contigDictionary.put(contig.getID(), offset++);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/IndexingVariantContextWriter.java b/src/java/org/broadinstitute/variant/variantcontext/writer/IndexingVariantContextWriter.java
deleted file mode 100644
index 1a9fe24..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/IndexingVariantContextWriter.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.util.LocationAware;
-import org.broad.tribble.index.*;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.vcf.VCFHeader;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * this class writes VCF files
- */
-abstract class IndexingVariantContextWriter implements VariantContextWriter {
- private final String name;
- private final File location;
- private final SAMSequenceDictionary refDict;
-
- private OutputStream outputStream;
- private LocationAware locationSource = null;
- private IndexCreator indexer = null;
-
- private IndexingVariantContextWriter(final String name, final File location, final OutputStream output, final SAMSequenceDictionary refDict) {
- this.name = name;
- this.location = location;
- this.outputStream = output;
- this.refDict = refDict;
- }
-
- /**
- * Create a VariantContextWriter with an associated index using the default index creator
- *
- * @param name the name of this writer (i.e. the file name or stream)
- * @param location the path to the output file
- * @param output the output stream to write to
- * @param refDict the reference dictionary
- * @param enableOnTheFlyIndexing is OTF indexing enabled?
- */
- @Requires({"name != null",
- "! ( location == null && output == null )",
- "! ( enableOnTheFlyIndexing && location == null )"})
- protected IndexingVariantContextWriter(final String name, final File location, final OutputStream output, final SAMSequenceDictionary refDict,
- final boolean enableOnTheFlyIndexing) {
- this(name, location, output, refDict);
-
- if ( enableOnTheFlyIndexing ) {
- initIndexingWriter(new DynamicIndexCreator(location, IndexFactory.IndexBalanceApproach.FOR_SEEK_TIME));
- }
- }
-
- /**
- * Create a VariantContextWriter with an associated index using a custom index creator
- *
- * @param name the name of this writer (i.e. the file name or stream)
- * @param location the path to the output file
- * @param output the output stream to write to
- * @param refDict the reference dictionary
- * @param enableOnTheFlyIndexing is OTF indexing enabled?
- * @param idxCreator the custom index creator. NOTE: must be initialized
- */
- @Requires({"name != null",
- "! ( location == null && output == null )",
- "! ( enableOnTheFlyIndexing && location == null )",
- "idxCreator != null"})
- protected IndexingVariantContextWriter(final String name, final File location, final OutputStream output, final SAMSequenceDictionary refDict,
- final boolean enableOnTheFlyIndexing, final IndexCreator idxCreator) {
- this(name, location, output, refDict);
-
- if ( enableOnTheFlyIndexing ) {
- // TODO: Handle non-Tribble IndexCreators
- initIndexingWriter(idxCreator);
- }
- }
-
- @Requires({"idxCreator != null"})
- private void initIndexingWriter(final IndexCreator idxCreator) {
- indexer = idxCreator;
- if (outputStream instanceof LocationAware) {
- locationSource = (LocationAware)outputStream;
- } else {
- final PositionalOutputStream positionalOutputStream = new PositionalOutputStream(outputStream);
- locationSource = positionalOutputStream;
- outputStream = positionalOutputStream;
- }
- }
-
- @Ensures("result != null")
- public OutputStream getOutputStream() {
- return outputStream;
- }
-
- @Ensures("result != null")
- public String getStreamName() {
- return name;
- }
-
- public abstract void writeHeader(VCFHeader header);
-
- /**
- * attempt to close the VCF file
- */
- public void close() {
- try {
- // close the underlying output stream
- outputStream.close();
-
- // close the index stream (keep it separate to help debugging efforts)
- if (indexer != null) {
- if (indexer instanceof TribbleIndexCreator) {
- setIndexSequenceDictionary((TribbleIndexCreator)indexer, refDict);
- }
- final Index index = indexer.finalizeIndex(locationSource.getPosition());
- index.writeBasedOnFeatureFile(location);
- }
-
-
- } catch (final IOException e) {
- throw new RuntimeException("Unable to close index for " + getStreamName(), e);
- }
- }
-
- /**
- * @return the reference sequence dictionary used for the variant contexts being written
- */
- public SAMSequenceDictionary getRefDict() {
- return refDict;
- }
-
- /**
- * add a record to the file
- *
- * @param vc the Variant Context object
- */
- public void add(final VariantContext vc) {
- // if we are doing on the fly indexing, add the record ***before*** we write any bytes
- if ( indexer != null )
- indexer.addFeature(vc, locationSource.getPosition());
- }
-
- /**
- * Returns a reasonable "name" for this writer, to display to the user if something goes wrong
- *
- * @param location
- * @param stream
- * @return
- */
- protected static final String writerName(final File location, final OutputStream stream) {
- return location == null ? stream.toString() : location.getAbsolutePath();
- }
-
- // a constant we use for marking sequence dictionary entries in the Tribble index property list
- private static final String SequenceDictionaryPropertyPredicate = "DICT:";
-
- private static void setIndexSequenceDictionary(final TribbleIndexCreator indexCreator, final SAMSequenceDictionary dict) {
- for (final SAMSequenceRecord seq : dict.getSequences()) {
- final String contig = SequenceDictionaryPropertyPredicate + seq.getSequenceName();
- final String length = String.valueOf(seq.getSequenceLength());
- indexCreator.addProperty(contig,length);
- }
- }
-}
-
-/**
- * Wraps output stream in a manner which keeps track of the position within the file and allowing writes
- * at arbitrary points
- */
-final class PositionalOutputStream extends OutputStream implements LocationAware
-{
- private final OutputStream out;
- private long position = 0;
-
- public PositionalOutputStream(final OutputStream out) {
- this.out = out;
- }
-
- public final void write(final byte[] bytes) throws IOException {
- write(bytes, 0, bytes.length);
- }
-
- public final void write(final byte[] bytes, final int startIndex, final int numBytes) throws IOException {
- position += numBytes;
- out.write(bytes, startIndex, numBytes);
- }
-
- public final void write(final int c) throws IOException {
- position++;
- out.write(c);
- }
-
- public final long getPosition() { return position; }
-
- @Override
- public void close() throws IOException {
- super.close();
- out.close();
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/IntGenotypeFieldAccessors.java b/src/java/org/broadinstitute/variant/variantcontext/writer/IntGenotypeFieldAccessors.java
deleted file mode 100644
index 9a485d2..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/IntGenotypeFieldAccessors.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import org.broadinstitute.variant.vcf.VCFConstants;
-import org.broadinstitute.variant.variantcontext.Genotype;
-
-import java.util.HashMap;
-
-/**
- * A convenient way to provide a single view on the many int and int[] field values we work with,
- * for writing out the values. This class makes writing out the inline AD, GQ, PL, DP fields
- * easy and fast
- *
- * @author Mark DePristo
- * @since 6/12
- */
-public class IntGenotypeFieldAccessors {
- // initialized once per writer to allow parallel writers to work
- private final HashMap<String, Accessor> intGenotypeFieldEncoders = new HashMap<String, Accessor>();
-
- public IntGenotypeFieldAccessors() {
- intGenotypeFieldEncoders.put(VCFConstants.DEPTH_KEY, new IntGenotypeFieldAccessors.DPAccessor());
- intGenotypeFieldEncoders.put(VCFConstants.GENOTYPE_ALLELE_DEPTHS, new IntGenotypeFieldAccessors.ADAccessor());
- intGenotypeFieldEncoders.put(VCFConstants.GENOTYPE_PL_KEY, new IntGenotypeFieldAccessors.PLAccessor());
- intGenotypeFieldEncoders.put(VCFConstants.GENOTYPE_QUALITY_KEY, new IntGenotypeFieldAccessors.GQAccessor());
- }
-
- /**
- * Return an accessor for field, or null if none exists
- * @param field
- * @return
- */
- public Accessor getAccessor(final String field) {
- return intGenotypeFieldEncoders.get(field);
- }
-
- public static abstract class Accessor {
- public abstract int[] getValues(final Genotype g);
-
- public final int getSize(final Genotype g) {
- final int[] v = getValues(g);
- return v == null ? 0 : v.length;
- }
- }
-
- private static abstract class AtomicAccessor extends Accessor {
- private final int[] singleton = new int[1];
-
- @Override
- public int[] getValues(final Genotype g) {
- singleton[0] = getValue(g);
- return singleton[0] == -1 ? null : singleton;
- }
-
- public abstract int getValue(final Genotype g);
- }
-
- public static class GQAccessor extends AtomicAccessor {
- @Override public int getValue(final Genotype g) { return Math.min(g.getGQ(), VCFConstants.MAX_GENOTYPE_QUAL); }
- }
-
- public static class DPAccessor extends AtomicAccessor {
- @Override public int getValue(final Genotype g) { return g.getDP(); }
- }
-
- public static class ADAccessor extends Accessor {
- @Override public int[] getValues(final Genotype g) { return g.getAD(); }
- }
-
- public static class PLAccessor extends Accessor {
- @Override public int[] getValues(final Genotype g) { return g.getPL(); }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/Options.java b/src/java/org/broadinstitute/variant/variantcontext/writer/Options.java
deleted file mode 100644
index eac2eb8..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/Options.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-/**
- * Available writer options for VariantContextWriters
- *
- * @author Mark DePristo
- * @since 5/12
- */
-public enum Options {
- INDEX_ON_THE_FLY,
- DO_NOT_WRITE_GENOTYPES,
- ALLOW_MISSING_FIELDS_IN_HEADER,
- FORCE_BCF,
- USE_ASYNC_IO // Turn on or off the use of asynchronous IO for writing output VCF files.
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/SortingVariantContextWriter.java b/src/java/org/broadinstitute/variant/variantcontext/writer/SortingVariantContextWriter.java
deleted file mode 100644
index d7254fa..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/SortingVariantContextWriter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-/**
- * this class writes VCF files, allowing records to be passed in unsorted (up to a certain genomic distance away)
- */
-class SortingVariantContextWriter extends SortingVariantContextWriterBase {
-
- // the maximum START distance between records that we'll cache
- private int maxCachingStartDistance;
-
- /**
- * create a local-sorting VCF writer, given an inner VCF writer to write to
- *
- * @param innerWriter the VCFWriter to write to
- * @param maxCachingStartDistance the maximum start distance between records that we'll cache
- * @param takeOwnershipOfInner Should this Writer close innerWriter when it's done with it
- */
- public SortingVariantContextWriter(VariantContextWriter innerWriter, int maxCachingStartDistance, boolean takeOwnershipOfInner) {
- super(innerWriter, takeOwnershipOfInner);
- this.maxCachingStartDistance = maxCachingStartDistance;
- }
-
- public SortingVariantContextWriter(VariantContextWriter innerWriter, int maxCachingStartDistance) {
- this(innerWriter, maxCachingStartDistance, false); // by default, don't own inner
- }
-
- protected void noteCurrentRecord(VariantContext vc) {
- super.noteCurrentRecord(vc); // first, check for errors
-
- // then, update mostUpstreamWritableLoc:
- int mostUpstreamWritableIndex = vc.getStart() - maxCachingStartDistance;
- this.mostUpstreamWritableLoc = Math.max(BEFORE_MOST_UPSTREAM_LOC, mostUpstreamWritableIndex);
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/SortingVariantContextWriterBase.java b/src/java/org/broadinstitute/variant/variantcontext/writer/SortingVariantContextWriterBase.java
deleted file mode 100644
index c4588df..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/SortingVariantContextWriterBase.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-import java.util.*;
-import java.util.concurrent.PriorityBlockingQueue;
-
-/**
- * This class writes VCF files, allowing records to be passed in unsorted.
- * It also enforces that it is never passed records of the same chromosome with any other chromosome in between them.
- */
-abstract class SortingVariantContextWriterBase implements VariantContextWriter {
-
- // The VCFWriter to which to actually write the sorted VCF records
- private final VariantContextWriter innerWriter;
-
- // the current queue of un-emitted records
- private final Queue<VCFRecord> queue;
-
- // The locus until which we are permitted to write out (inclusive)
- protected Integer mostUpstreamWritableLoc;
- protected static final int BEFORE_MOST_UPSTREAM_LOC = 0; // No real locus index is <= 0
-
- // The set of chromosomes already passed over and to which it is forbidden to return
- private final Set<String> finishedChromosomes;
-
- // Should we call innerWriter.close() in close()
- private final boolean takeOwnershipOfInner;
-
- // --------------------------------------------------------------------------------
- //
- // Constructors
- //
- // --------------------------------------------------------------------------------
-
- /**
- * create a local-sorting VCF writer, given an inner VCF writer to write to
- *
- * @param innerWriter the VCFWriter to write to
- * @param takeOwnershipOfInner Should this Writer close innerWriter when it's done with it
- */
- public SortingVariantContextWriterBase(VariantContextWriter innerWriter, boolean takeOwnershipOfInner) {
- this.innerWriter = innerWriter;
- this.finishedChromosomes = new TreeSet<String>();
- this.takeOwnershipOfInner = takeOwnershipOfInner;
-
- // has to be PriorityBlockingQueue to be thread-safe
- this.queue = new PriorityBlockingQueue<VCFRecord>(50, new VariantContextComparator());
-
- this.mostUpstreamWritableLoc = BEFORE_MOST_UPSTREAM_LOC;
- }
-
- public SortingVariantContextWriterBase(VariantContextWriter innerWriter) {
- this(innerWriter, false); // by default, don't own inner
- }
-
- // --------------------------------------------------------------------------------
- //
- // public interface functions
- //
- // --------------------------------------------------------------------------------
-
- @Override
- public void writeHeader(VCFHeader header) {
- innerWriter.writeHeader(header);
- }
-
- /**
- * attempt to close the VCF file; we need to flush the queue first
- */
- @Override
- public void close() {
- stopWaitingToSort();
-
- if (takeOwnershipOfInner)
- innerWriter.close();
- }
-
-
- /**
- * add a record to the file
- *
- * @param vc the Variant Context object
- */
- @Override
- public synchronized void add(VariantContext vc) {
- /* Note that the code below does not prevent the successive add()-ing of: (chr1, 10), (chr20, 200), (chr15, 100)
- since there is no implicit ordering of chromosomes:
- */
- VCFRecord firstRec = queue.peek();
- if (firstRec != null && !vc.getChr().equals(firstRec.vc.getChr())) { // if we hit a new contig, flush the queue
- if (finishedChromosomes.contains(vc.getChr()))
- throw new IllegalArgumentException("Added a record at " + vc.getChr() + ":" + vc.getStart() + ", but already finished with chromosome" + vc.getChr());
-
- finishedChromosomes.add(firstRec.vc.getChr());
- stopWaitingToSort();
- }
-
- noteCurrentRecord(vc); // possibly overwritten
-
- queue.add(new VCFRecord(vc));
- emitSafeRecords();
- }
-
- /**
- * Gets a string representation of this object.
- * @return a string representation of this object
- */
- @Override
- public String toString() {
- return getClass().getName();
- }
-
- // --------------------------------------------------------------------------------
- //
- // protected interface functions for subclasses to use
- //
- // --------------------------------------------------------------------------------
-
- private synchronized void stopWaitingToSort() {
- emitRecords(true);
- mostUpstreamWritableLoc = BEFORE_MOST_UPSTREAM_LOC;
- }
-
- protected synchronized void emitSafeRecords() {
- emitRecords(false);
- }
-
- protected void noteCurrentRecord(VariantContext vc) {
- // did the user break the contract by giving a record too late?
- if (mostUpstreamWritableLoc != null && vc.getStart() < mostUpstreamWritableLoc) // went too far back, since may have already written anything that is <= mostUpstreamWritableLoc
- throw new IllegalArgumentException("Permitted to write any record upstream of position " + mostUpstreamWritableLoc + ", but a record at " + vc.getChr() + ":" + vc.getStart() + " was just added.");
- }
-
- // --------------------------------------------------------------------------------
- //
- // private implementation functions
- //
- // --------------------------------------------------------------------------------
-
- private synchronized void emitRecords(boolean emitUnsafe) {
- while (!queue.isEmpty()) {
- VCFRecord firstRec = queue.peek();
-
- // No need to wait, waiting for nothing, or before what we're waiting for:
- if (emitUnsafe || mostUpstreamWritableLoc == null || firstRec.vc.getStart() <= mostUpstreamWritableLoc) {
- queue.poll();
- innerWriter.add(firstRec.vc);
- }
- else {
- break;
- }
- }
- }
-
- private static class VariantContextComparator implements Comparator<VCFRecord> {
- public int compare(VCFRecord r1, VCFRecord r2) {
- return r1.vc.getStart() - r2.vc.getStart();
- }
- }
-
- private static class VCFRecord {
- public VariantContext vc;
-
- public VCFRecord(VariantContext vc) {
- this.vc = vc;
- }
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/VCFWriter.java b/src/java/org/broadinstitute/variant/variantcontext/writer/VCFWriter.java
deleted file mode 100644
index 7a43e83..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/VCFWriter.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import org.broad.tribble.index.IndexCreator;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.VariantContextBuilder;
-import org.broadinstitute.variant.vcf.VCFConstants;
-import org.broadinstitute.variant.vcf.VCFEncoder;
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.broadinstitute.variant.vcf.VCFHeaderLine;
-import org.broadinstitute.variant.vcf.VCFHeaderVersion;
-
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-/**
- * this class writes VCF files
- */
-class VCFWriter extends IndexingVariantContextWriter {
-
- private static final String VERSION_LINE =
- VCFHeader.METADATA_INDICATOR + VCFHeaderVersion.VCF4_1.getFormatString() + "=" + VCFHeaderVersion.VCF4_1.getVersionString();
-
- // Initialized when the header is written to the output stream
- private VCFEncoder vcfEncoder = null;
-
- // the VCF header we're storing
- protected VCFHeader mHeader = null;
-
- private final boolean allowMissingFieldsInHeader;
-
- // should we write genotypes or just sites?
- private final boolean doNotWriteGenotypes;
-
- /*
- * The VCF writer uses an internal Writer, based by the ByteArrayOutputStream lineBuffer,
- * to temp. buffer the header and per-site output before flushing the per line output
- * in one go to the super.getOutputStream. This results in high-performance, proper encoding,
- * and allows us to avoid flushing explicitly the output stream getOutputStream, which
- * allows us to properly compress vcfs in gz format without breaking indexing on the fly
- * for uncompressed streams.
- */
- private static final int INITIAL_BUFFER_SIZE = 1024 * 16;
- private final ByteArrayOutputStream lineBuffer = new ByteArrayOutputStream(INITIAL_BUFFER_SIZE);
- /* Wrapping in a {@link BufferedWriter} avoids frequent conversions with individual writes to OutputStreamWriter. */
- private final Writer writer = new BufferedWriter(new OutputStreamWriter(lineBuffer, VCFEncoder.VCF_CHARSET));
-
- public VCFWriter(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
- final boolean enableOnTheFlyIndexing,
- final boolean doNotWriteGenotypes, final boolean allowMissingFieldsInHeader ) {
- super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing);
- this.doNotWriteGenotypes = doNotWriteGenotypes;
- this.allowMissingFieldsInHeader = allowMissingFieldsInHeader;
- }
-
- public VCFWriter(final File location, final OutputStream output, final SAMSequenceDictionary refDict,
- final IndexCreator indexCreator, final boolean enableOnTheFlyIndexing,
- final boolean doNotWriteGenotypes, final boolean allowMissingFieldsInHeader ) {
- super(writerName(location, output), location, output, refDict, enableOnTheFlyIndexing, indexCreator);
- this.doNotWriteGenotypes = doNotWriteGenotypes;
- this.allowMissingFieldsInHeader = allowMissingFieldsInHeader;
- }
- // --------------------------------------------------------------------------------
- //
- // VCFWriter interface functions
- //
- // --------------------------------------------------------------------------------
-
- /*
- * Write String s to the internal buffered writer.
- *
- * writeAndResetBuffer() must be called to actually write the data to the true output stream.
- *
- * @param s the string to write
- * @throws IOException
- */
- private void write(final String s) throws IOException {
- writer.write(s);
- }
-
- /*
- * Actually write the line buffer contents to the destination output stream. After calling this function
- * the line buffer is reset so the contents of the buffer can be reused
- */
- private void writeAndResetBuffer() throws IOException {
- writer.flush();
- getOutputStream().write(lineBuffer.toByteArray());
- lineBuffer.reset();
- }
-
- @Override
- public void writeHeader(final VCFHeader header) {
- // note we need to update the mHeader object after this call because they header
- // may have genotypes trimmed out of it, if doNotWriteGenotypes is true
- try {
- this.mHeader = writeHeader(header, writer, doNotWriteGenotypes, getVersionLine(), getStreamName());
- this.vcfEncoder = new VCFEncoder(this.mHeader, this.allowMissingFieldsInHeader);
- writeAndResetBuffer();
-
- } catch ( IOException e ) {
- throw new RuntimeException("Couldn't write file " + getStreamName(), e);
- }
- }
-
- public static String getVersionLine() {
- return VERSION_LINE;
- }
-
- public static VCFHeader writeHeader(VCFHeader header,
- final Writer writer,
- final boolean doNotWriteGenotypes,
- final String versionLine,
- final String streamNameForError) {
- header = doNotWriteGenotypes ? new VCFHeader(header.getMetaDataInSortedOrder()) : header;
-
- try {
- // the file format field needs to be written first
- writer.write(versionLine + "\n");
-
- for (final VCFHeaderLine line : header.getMetaDataInSortedOrder() ) {
- if ( VCFHeaderVersion.isFormatString(line.getKey()) )
- continue;
-
- writer.write(VCFHeader.METADATA_INDICATOR);
- writer.write(line.toString());
- writer.write("\n");
- }
-
- // write out the column line
- writer.write(VCFHeader.HEADER_INDICATOR);
- boolean isFirst = true;
- for (final VCFHeader.HEADER_FIELDS field : header.getHeaderFields() ) {
- if ( isFirst )
- isFirst = false; // don't write out a field separator
- else
- writer.write(VCFConstants.FIELD_SEPARATOR);
- writer.write(field.toString());
- }
-
- if ( header.hasGenotypingData() ) {
- writer.write(VCFConstants.FIELD_SEPARATOR);
- writer.write("FORMAT");
- for (final String sample : header.getGenotypeSamples() ) {
- writer.write(VCFConstants.FIELD_SEPARATOR);
- writer.write(sample);
- }
- }
-
- writer.write("\n");
- writer.flush(); // necessary so that writing to an output stream will work
- }
- catch (IOException e) {
- throw new RuntimeException("IOException writing the VCF header to " + streamNameForError, e);
- }
-
- return header;
- }
-
- /**
- * attempt to close the VCF file
- */
- @Override
- public void close() {
- // try to close the vcf stream
- try {
- // TODO -- would it be useful to null out the line buffer so we don't have it around unnecessarily?
- writer.close();
- } catch (IOException e) {
- throw new RuntimeException("Unable to close " + getStreamName(), e);
- }
-
- super.close();
- }
-
- /**
- * Add a record to the file
- */
- @Override
- public void add(final VariantContext context) {
- try {
- super.add(context);
-
- if (this.doNotWriteGenotypes) write(this.vcfEncoder.encode(new VariantContextBuilder(context).noGenotypes().make()));
- else write(this.vcfEncoder.encode(context));
- write("\n");
-
- writeAndResetBuffer();
-
- } catch (IOException e) {
- throw new RuntimeException("Unable to write the VCF object to " + getStreamName(), e);
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriter.java b/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriter.java
deleted file mode 100644
index 4ab6b2d..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriter.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-/**
- * this class writes VCF files
- */
-public interface VariantContextWriter {
-
- public void writeHeader(VCFHeader header);
-
- /**
- * attempt to close the VCF file
- */
- public void close();
-
- public void add(VariantContext vc);
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterBuilder.java b/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterBuilder.java
deleted file mode 100644
index e7c3b2d..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterBuilder.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
-* Copyright (c) 2014 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import net.sf.samtools.Defaults;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import net.sf.samtools.util.IOUtil;
-import net.sf.samtools.util.Md5CalculatingOutputStream;
-import net.sf.samtools.util.RuntimeIOException;
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.index.IndexCreator;
-import org.broad.tribble.index.tabix.TabixFormat;
-import org.broad.tribble.index.tabix.TabixIndexCreator;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.util.EnumSet;
-
-/**
- * Created with IntelliJ IDEA.
- * User: thibault
- * Date: 3/7/14
- * Time: 2:07 PM
- *
- * Provides methods for creating VariantContextWriters using the Builder pattern.
- * Replaces VariantContextWriterFactory.
- *
- * The caller must choose an output file or an output stream for the VariantContextWriter to write to.
- * When a file is chosen, the output stream is created implicitly based on Defaults and options passed to the builder.
- * When a stream is chosen, it is passed unchanged to the VariantContextWriter.
- *
- * Example: Create a series of files with buffering and indexing on the fly.
- * Determine the appropriate file type based on filename.
- *
- * VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- * .setReferenceDictionary(refDict)
- * .setOption(Options.INDEX_ON_THE_FLY)
- * .setBuffer(8192);
- *
- * VariantContextWriter sample1_writer = builder
- * .setOutputFile("sample1.vcf")
- * .build();
- * VariantContextWriter sample2_writer = builder
- * .setOutputFile("sample2.bcf")
- * .build();
- * VariantContextWriter sample3_writer = builder
- * .setOutputFile("sample3.vcf.bgzf")
- * .build();
- *
- * Example: Explicitly turn off buffering and explicitly set the file type
- *
- * VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- * .setReferenceDictionary(refDict)
- * .setOption(Options.INDEX_ON_THE_FLY)
- * .unsetBuffering();
- *
- * VariantContextWriter sample1_writer = builder
- * .setOutputFile("sample1.custom_extension")
- * .setOutputFileType(OutputType.VCF)
- * .build();
- * VariantContextWriter sample2_writer = builder
- * .setOutputFile("sample2.custom_extension")
- * .setOutputFileType(OutputType.BLOCK_COMPRESSED_VCF)
- * .build();
-
- */
-public class VariantContextWriterBuilder {
- public static final EnumSet<Options> DEFAULT_OPTIONS = EnumSet.of(Options.INDEX_ON_THE_FLY);
- public static final EnumSet<Options> NO_OPTIONS = EnumSet.noneOf(Options.class);
-
- public enum OutputType {
- UNSPECIFIED,
- VCF,
- BCF,
- BLOCK_COMPRESSED_VCF,
- VCF_STREAM,
- BCF_STREAM
- }
-
- public static final EnumSet<OutputType> FILE_TYPES = EnumSet.of(OutputType.VCF, OutputType.BCF, OutputType.BLOCK_COMPRESSED_VCF);
- public static final EnumSet<OutputType> STREAM_TYPES = EnumSet.of(OutputType.VCF_STREAM, OutputType.BCF_STREAM);
-
- private SAMSequenceDictionary refDict = null;
- private OutputType outType = OutputType.UNSPECIFIED;
- private File outFile = null;
- private OutputStream outStream = null;
- private IndexCreator idxCreator = null;
- private int bufferSize = Defaults.BUFFER_SIZE;
- private boolean createMD5 = Defaults.CREATE_MD5;
- private EnumSet<Options> options = DEFAULT_OPTIONS.clone();
-
- /**
- * Default constructor. Adds USE_ASYNC_IO to the Options if it is present in Defaults.
- */
- public VariantContextWriterBuilder() {
- if (Defaults.USE_ASYNC_IO)
- options.add(Options.USE_ASYNC_IO);
- }
-
- /**
- * Set the reference dictionary to be used by VariantContextWriters created by this builder
- *
- * @param refDict the reference dictionary
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setReferenceDictionary(final SAMSequenceDictionary refDict) {
- this.refDict = refDict;
- return this;
- }
-
- /**
- * Set the output file for the next VariantContextWriter created by this builder
- * Determines file type implicitly from the filename
- *
- * @param outFile the file the VariantContextWriter will write to
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOutputFile(final File outFile) {
- this.outFile = outFile;
- this.outStream = null;
- determineOutputTypeFromFilename();
- return this;
- }
-
- /**
- * Set the output file for the next VariantContextWriter created by this builder
- * Determines file type implicitly from the filename
- *
- * @param outFile the file the VariantContextWriter will write to
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOutputFile(final String outFile) {
- this.outFile = new File(outFile);
- this.outStream = null;
- determineOutputTypeFromFilename();
- return this;
- }
-
- /**
- * Set the output file type for the next VariantContextWriter created by this builder
- *
- * @param outType the type of file the VariantContextWriter will write to
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOutputFileType(final OutputType outType) {
- if (!FILE_TYPES.contains(outType))
- throw new IllegalArgumentException("Must choose a file type, not other output types.");
-
- if (this.outFile == null || this.outStream != null)
- throw new IllegalArgumentException("Cannot set a file type if the output is not to a file.");
-
- this.outType = outType;
- return this;
- }
-
- /**
- * Set the output VCF stream for the next VariantContextWriter created by this builder
- * If buffered writing is desired, caller must provide some kind of buffered OutputStream.
- *
- * @param outStream the output stream to write to
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOutputVCFStream(final OutputStream outStream) {
- this.outStream = outStream;
- this.outFile = null;
- this.outType = OutputType.VCF_STREAM;
- return this;
- }
-
- /**
- * Set the output BCF stream for the next VariantContextWriter created by this builder
- * If buffered writing is desired, caller must provide some kind of buffered OutputStream.
- *
- * @param outStream the output stream to write to
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOutputBCFStream(final OutputStream outStream) {
- this.outStream = outStream;
- this.outFile = null;
- this.outType = OutputType.BCF_STREAM;
- return this;
- }
-
- /**
- * Set the output stream (VCF, by default) for the next VariantContextWriter created by this builder
- * If buffered writing is desired, caller must provide some kind of buffered OutputStream.
- *
- * @param outStream the output stream to write to
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOutputStream(final OutputStream outStream) {
- return setOutputVCFStream(outStream);
- }
-
- /**
- * Set an IndexCreator for the next VariantContextWriter created by this builder
- *
- * @param idxCreator the IndexCreator to use
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setIndexCreator(final IndexCreator idxCreator) {
- this.idxCreator = idxCreator;
- return this;
- }
-
- /**
- * Do not pass an IndexCreator to the next VariantContextWriter created by this builder
- *
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder clearIndexCreator() {
- this.idxCreator = null;
- return this;
- }
-
- /**
- * Set a buffer size for the file output stream passed to the next VariantContextWriter created by this builder
- * Set to 0 for no buffering
- * Does not affect OutputStreams passed directly to VariantContextWriterBuilder
- *
- * @param bufferSize the buffer size to use
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setBuffer(final int bufferSize) {
- this.bufferSize = bufferSize;
- return this;
- }
-
- /**
- * Do not use buffering in the next VariantContextWriter created by this builder
- * Does not affect OutputStreams passed directly to VariantContextWriterBuilder
- *
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder unsetBuffering() {
- this.bufferSize = 0;
- return this;
- }
-
- /**
- * Choose whether to also create an MD5 digest file for the next VariantContextWriter created by this builder
- *
- * @param createMD5 boolean, true to create an MD5 digest
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setCreateMD5(final boolean createMD5) {
- this.createMD5 = createMD5;
- return this;
- }
-
- /**
- * Create an MD5 digest file for the next VariantContextWriter created by this builder
- *
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setCreateMD5() {
- return setCreateMD5(true);
- }
-
- /**
- * Don't create an MD5 digest file for the next VariantContextWriter created by this builder
- *
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder unsetCreateMD5() {
- return setCreateMD5(false);
- }
-
- /**
- * Replace the set of Options for the VariantContextWriterBuilder with a new set
- *
- * @param options the complete set of options to use
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOptions(final EnumSet<Options> options) {
- this.options = options;
- return this;
- }
-
- /**
- * Add one option to the set of Options for the VariantContextWriterBuilder, if it's not already present
- *
- * @param option the option to set
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder setOption(final Options option) {
- this.options.add(option);
- return this;
- }
-
- /**
- * Remove one option from the set of Options for the VariantContextWriterBuilder, if it's present
- *
- * @param option the option to unset
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder unsetOption(final Options option) {
- this.options.remove(option);
- return this;
- }
-
- /**
- * Remove all options from the set of Options for the VariantContextWriterBuilder
- *
- * @return this VariantContextWriterBuilder
- */
- public VariantContextWriterBuilder clearOptions() {
- this.options = NO_OPTIONS;
- return this;
- }
-
- /**
- * Validate and build the VariantContextWriter
- *
- * @return the VariantContextWriter as specified by previous method calls
- */
- public VariantContextWriter build() {
- VariantContextWriter writer = null;
-
- // don't allow FORCE_BCF to modify the outType state
- OutputType typeToBuild = this.outType;
-
- if (this.options.contains(Options.FORCE_BCF)) {
- if (FILE_TYPES.contains(this.outType))
- typeToBuild = OutputType.BCF;
- else if (STREAM_TYPES.contains(this.outType))
- typeToBuild = OutputType.BCF_STREAM;
- }
-
- OutputStream outStreamFromFile = this.outStream;
- if (FILE_TYPES.contains(this.outType)) {
- try {
- outStreamFromFile = IOUtil.maybeBufferOutputStream(new FileOutputStream(outFile), bufferSize);
- } catch (final FileNotFoundException e) {
- throw new RuntimeIOException("File not found: " + outFile, e);
- }
-
- if (createMD5)
- outStreamFromFile = new Md5CalculatingOutputStream(outStreamFromFile, new File(outFile.getAbsolutePath() + ".md5"));
- }
-
- switch (typeToBuild) {
- case UNSPECIFIED:
- throw new IllegalArgumentException("Must specify file or stream output type.");
- case VCF:
- if ((refDict == null) && (options.contains(Options.INDEX_ON_THE_FLY)))
- throw new IllegalArgumentException("A reference dictionary is required for creating Tribble indices on the fly");
-
- writer = createVCFWriter(outFile, outStreamFromFile);
- break;
- case BLOCK_COMPRESSED_VCF:
- if (refDict == null)
- idxCreator = new TabixIndexCreator(TabixFormat.VCF);
- else
- idxCreator = new TabixIndexCreator(refDict, TabixFormat.VCF);
-
- writer = createVCFWriter(outFile, new BlockCompressedOutputStream(outStreamFromFile, outFile));
- break;
- case BCF:
- if ((refDict == null) && (options.contains(Options.INDEX_ON_THE_FLY)))
- throw new IllegalArgumentException("A reference dictionary is required for creating Tribble indices on the fly");
-
- writer = createBCFWriter(outFile, outStreamFromFile);
- break;
- case VCF_STREAM:
- if (options.contains(Options.INDEX_ON_THE_FLY))
- throw new IllegalArgumentException("VCF index creation not supported for stream output.");
-
- writer = createVCFWriter(null, outStream);
- break;
- case BCF_STREAM:
- if (options.contains(Options.INDEX_ON_THE_FLY))
- throw new IllegalArgumentException("BCF index creation not supported for stream output.");
-
- writer = createBCFWriter(null, outStream);
- break;
- }
-
- if (this.options.contains(Options.USE_ASYNC_IO))
- writer = new AsyncVariantContextWriter(writer, AsyncVariantContextWriter.DEFAULT_QUEUE_SIZE);
-
- return writer;
- }
-
- private void determineOutputTypeFromFilename() {
- if (isBCF(this.outFile)) {
- this.outType = OutputType.BCF;
- } else if (isCompressedVCF(this.outFile)) {
- this.outType = OutputType.BLOCK_COMPRESSED_VCF;
- } else if (isVCF(this.outFile)) {
- this.outType = OutputType.VCF;
- }
- else {
- this.outType = OutputType.UNSPECIFIED;
- }
- }
-
- private boolean isVCF(final File outFile) {
- return outFile != null && outFile.getName().endsWith(".vcf");
- }
-
- private boolean isBCF(final File outFile) {
- return outFile != null && outFile.getName().endsWith(".bcf");
- }
-
- private boolean isCompressedVCF(final File outFile) {
- if (outFile == null)
- return false;
-
- return AbstractFeatureReader.hasBlockCompressedExtension(outFile);
- }
-
- private VariantContextWriter createVCFWriter(final File writerFile, final OutputStream writerStream) {
- if (idxCreator == null) {
- return new VCFWriter(writerFile, writerStream, refDict,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES),
- options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER));
- }
- else {
- return new VCFWriter(writerFile, writerStream, refDict, idxCreator,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES),
- options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER));
- }
- }
-
- private VariantContextWriter createBCFWriter(final File writerFile, final OutputStream writerStream) {
- if (idxCreator == null) {
- return new BCF2Writer(writerFile, writerStream, refDict,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES));
- }
- else {
- return new BCF2Writer(writerFile, writerStream, refDict, idxCreator,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES));
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterFactory.java b/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterFactory.java
deleted file mode 100644
index 85a7f22..0000000
--- a/src/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterFactory.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import net.sf.samtools.Defaults;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import net.sf.samtools.util.IOUtil;
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.index.IndexCreator;
-import org.broad.tribble.index.tabix.TabixFormat;
-import org.broad.tribble.index.tabix.TabixIndexCreator;
-
-import java.io.*;
-import java.util.EnumSet;
-
-/**
- * Factory methods to create VariantContext writers
- *
- * @author depristo
- * @since 5/12
- *
- * @deprecated Replaced by {@link org.broadinstitute.variant.variantcontext.writer.VariantContextWriterBuilder}
- */
- at Deprecated
-public class VariantContextWriterFactory {
-
- public static final EnumSet<Options> DEFAULT_OPTIONS = EnumSet.of(Options.INDEX_ON_THE_FLY);
- public static final EnumSet<Options> NO_OPTIONS = EnumSet.noneOf(Options.class);
-
- static {
- if (Defaults.USE_ASYNC_IO) {
- DEFAULT_OPTIONS.add(Options.USE_ASYNC_IO);
- }
- }
-
- private VariantContextWriterFactory() {}
-
- public static VariantContextWriter create(final File location, final SAMSequenceDictionary refDict) {
- return create(location, openOutputStream(location), refDict, DEFAULT_OPTIONS);
- }
-
- public static VariantContextWriter create(final File location, final SAMSequenceDictionary refDict, final EnumSet<Options> options) {
- return create(location, openOutputStream(location), refDict, options);
- }
-
- /**
- * @param output If buffered writing is desired, caller must provide some kind of buffered OutputStream.
- */
- public static VariantContextWriter create(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict) {
- return create(location, output, refDict, DEFAULT_OPTIONS);
- }
-
- /**
- * @param output If buffered writing is desired, caller must provide some kind of buffered OutputStream.
- */
- public static VariantContextWriter create(final OutputStream output,
- final SAMSequenceDictionary refDict,
- final EnumSet<Options> options) {
- return create(null, output, refDict, options);
- }
-
- /**
- * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
- * but does not control where the file is written
- * @param output This is where the BCF is actually written. If buffered writing is desired, caller must provide
- * some kind of buffered OutputStream.
- */
- public static VariantContextWriter createBcf2(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final EnumSet<Options> options) {
- return maybeWrapWithAsyncWriter(new BCF2Writer(location, output, refDict,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES)), options);
- }
-
- /**
- * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
- * but does not control where the file is written
- * @param output This is where the BCF is actually written. If buffered writing is desired, caller must provide
- * some kind of buffered OutputStream.
- */
- public static VariantContextWriter createBcf2(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final IndexCreator indexCreator,
- final EnumSet<Options> options) {
- return maybeWrapWithAsyncWriter(new BCF2Writer(location, output, refDict, indexCreator,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES)), options);
- }
-
- /**
- * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
- * but does not control where the file is written
- * @param output This is where the VCF is actually written. If buffered writing is desired, caller must provide
- * some kind of buffered OutputStream.
- */
- public static VariantContextWriter createVcf(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final EnumSet<Options> options) {
- return maybeWrapWithAsyncWriter(new VCFWriter(location, output, refDict,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES),
- options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER)), options);
- }
-
- /**
- * @param location Note that this parameter is used to producing intelligent log messages, and for naming the index,
- * but does not control where the file is written
- * @param output This is where the VCF is actually written. If buffered writing is desired, caller must provide
- * some kind of buffered OutputStream.
- */
- public static VariantContextWriter createVcf(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final IndexCreator indexCreator,
- final EnumSet<Options> options) {
- return maybeWrapWithAsyncWriter(new VCFWriter(location, output, refDict, indexCreator,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES),
- options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER)), options);
- }
-
- /**
- * @param location Note that this parameter is used to producing intelligent log messages,
- * but does not control where the file is written
- * @param output This is where the VCF is actually written. If buffered writing is desired, caller must provide
- * some kind of buffered OutputStream.
- */
- public static VariantContextWriter createBlockCompressedVcf(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final EnumSet<Options> options) {
- final TabixIndexCreator indexCreator;
- if (options.contains(Options.INDEX_ON_THE_FLY)) {
- indexCreator = new TabixIndexCreator(refDict, TabixFormat.VCF);
- } else {
- indexCreator = null;
- }
- return maybeWrapWithAsyncWriter(new VCFWriter(location, BlockCompressedOutputStream.maybeBgzfWrapOutputStream(location, output),
- refDict, indexCreator,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES),
- options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER)), options);
- }
-
- /**
- * @param location Note that this parameter is used to producing intelligent log messages,
- * but does not control where the file is written
- * @param output This is where the VCF is actually written. If buffered writing is desired, caller must provide
- * some kind of buffered OutputStream.
- */
- public static VariantContextWriter createBlockCompressedVcf(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final IndexCreator indexCreator,
- final EnumSet<Options> options) {
- return maybeWrapWithAsyncWriter(new VCFWriter(location, BlockCompressedOutputStream.maybeBgzfWrapOutputStream(location, output),
- refDict, indexCreator,
- options.contains(Options.INDEX_ON_THE_FLY),
- options.contains(Options.DO_NOT_WRITE_GENOTYPES),
- options.contains(Options.ALLOW_MISSING_FIELDS_IN_HEADER)), options);
- }
-
- public static VariantContextWriter create(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final EnumSet<Options> options) {
-
- if (isBCFOutput(location, options)) {
- return createBcf2(location, output, refDict, options);
- } else if (isCompressedVcf(location)) {
- return createBlockCompressedVcf(location, output, refDict, options);
- } else {
- return createVcf(location, output, refDict, options);
- }
- }
-
- /**
- * @param output If buffered writing is desired, caller must provide some kind of buffered OutputStream.
- */
- public static VariantContextWriter create(final File location,
- final OutputStream output,
- final SAMSequenceDictionary refDict,
- final IndexCreator indexCreator,
- final EnumSet<Options> options) {
-
- if (isBCFOutput(location, options)) {
- return createBcf2(location, output, refDict, indexCreator, options);
- } else if (isCompressedVcf(location)) {
- return createBlockCompressedVcf(location, output, refDict, indexCreator, options);
- } else {
- return createVcf(location, output, refDict, indexCreator, options);
- }
- }
-
- private static VariantContextWriter maybeWrapWithAsyncWriter(final VariantContextWriter writer,
- final EnumSet<Options> options) {
- if (options.contains(Options.USE_ASYNC_IO)) {
- return new AsyncVariantContextWriter(writer, AsyncVariantContextWriter.DEFAULT_QUEUE_SIZE);
- }
- else return writer;
- }
-
- /**
- * Should we output a BCF file based solely on the name of the file at location?
- *
- * @param location
- * @return
- */
- public static boolean isBCFOutput(final File location) {
- return isBCFOutput(location, EnumSet.noneOf(Options.class));
- }
-
- public static boolean isBCFOutput(final File location, final EnumSet<Options> options) {
- return options.contains(Options.FORCE_BCF) || (location != null && location.getName().contains(".bcf"));
- }
-
- public static boolean isCompressedVcf(final File location) {
- if (location == null)
- return false;
-
- return AbstractFeatureReader.hasBlockCompressedExtension(location);
- }
-
- public static VariantContextWriter sortOnTheFly(final VariantContextWriter innerWriter, final int maxCachingStartDistance) {
- return sortOnTheFly(innerWriter, maxCachingStartDistance, false);
- }
-
- public static VariantContextWriter sortOnTheFly(final VariantContextWriter innerWriter, final int maxCachingStartDistance, final boolean takeOwnershipOfInner) {
- return new SortingVariantContextWriter(innerWriter, maxCachingStartDistance, takeOwnershipOfInner);
- }
-
- /**
- * Returns a output stream writing to location, or throws an exception if this fails
- * @param location
- * @return
- */
- protected static OutputStream openOutputStream(final File location) {
- try {
- return IOUtil.maybeBufferOutputStream(new FileOutputStream(location));
- } catch (final FileNotFoundException e) {
- throw new RuntimeException(location + ": Unable to create VCF writer", e);
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/AbstractVCFCodec.java b/src/java/org/broadinstitute/variant/vcf/AbstractVCFCodec.java
deleted file mode 100644
index 32e9a8f..0000000
--- a/src/java/org/broadinstitute/variant/vcf/AbstractVCFCodec.java
+++ /dev/null
@@ -1,781 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import net.sf.samtools.util.BlockCompressedInputStream;
-import org.broad.tribble.AsciiFeatureCodec;
-import org.broad.tribble.Feature;
-import org.broad.tribble.NameAwareCodec;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.util.ParsingUtils;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.variantcontext.*;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.*;
-import java.util.zip.GZIPInputStream;
-
-
-public abstract class AbstractVCFCodec extends AsciiFeatureCodec<VariantContext> implements NameAwareCodec {
- public final static int MAX_ALLELE_SIZE_BEFORE_WARNING = (int)Math.pow(2, 20);
-
- protected final static int NUM_STANDARD_FIELDS = 8; // INFO is the 8th column
-
- // we have to store the list of strings that make up the header until they're needed
- protected VCFHeader header = null;
- protected VCFHeaderVersion version = null;
-
- // a mapping of the allele
- protected Map<String, List<Allele>> alleleMap = new HashMap<String, List<Allele>>(3);
-
- // for ParsingUtils.split
- protected String[] GTValueArray = new String[100];
- protected String[] genotypeKeyArray = new String[100];
- protected String[] infoFieldArray = new String[1000];
- protected String[] infoValueArray = new String[1000];
-
- // for performance testing purposes
- public static boolean validate = true;
-
- // a key optimization -- we need a per thread string parts array, so we don't allocate a big array over and over
- // todo: make this thread safe?
- protected String[] parts = null;
- protected String[] genotypeParts = null;
- protected final String[] locParts = new String[6];
-
- // for performance we cache the hashmap of filter encodings for quick lookup
- protected HashMap<String,List<String>> filterHash = new HashMap<String,List<String>>();
-
- // we store a name to give to each of the variant contexts we emit
- protected String name = "Unknown";
-
- protected int lineNo = 0;
-
- protected Map<String, String> stringCache = new HashMap<String, String>();
-
- protected boolean warnedAboutNoEqualsForNonFlag = false;
-
- /**
- * If true, then we'll magically fix up VCF headers on the fly when we read them in
- */
- protected boolean doOnTheFlyModifications = true;
-
- /**
- * If non-null, we will replace the sample name read from the VCF header with this sample name. This feature works
- * only for single-sample VCFs.
- */
- protected String remappedSampleName = null;
-
- protected AbstractVCFCodec() {
- super(VariantContext.class);
- }
-
- /**
- * Creates a LazyParser for a LazyGenotypesContext to use to decode
- * our genotypes only when necessary. We do this instead of eagarly
- * decoding the genotypes just to turn around and reencode in the frequent
- * case where we don't actually want to manipulate the genotypes
- */
- class LazyVCFGenotypesParser implements LazyGenotypesContext.LazyParser {
- final List<Allele> alleles;
- final String contig;
- final int start;
-
- LazyVCFGenotypesParser(final List<Allele> alleles, final String contig, final int start) {
- this.alleles = alleles;
- this.contig = contig;
- this.start = start;
- }
-
- @Override
- public LazyGenotypesContext.LazyData parse(final Object data) {
- //System.out.printf("Loading genotypes... %s:%d%n", contig, start);
- return createGenotypeMap((String) data, alleles, contig, start);
- }
- }
-
- /**
- * parse the filter string, first checking to see if we already have parsed it in a previous attempt
- * @param filterString the string to parse
- * @return a set of the filters applied
- */
- protected abstract List<String> parseFilters(String filterString);
-
- /**
- * create a VCF header from a set of header record lines
- *
- * @param headerStrings a list of strings that represent all the ## and # entries
- * @return a VCFHeader object
- */
- protected VCFHeader parseHeaderFromLines( final List<String> headerStrings, final VCFHeaderVersion version ) {
- this.version = version;
-
- Set<VCFHeaderLine> metaData = new LinkedHashSet<VCFHeaderLine>();
- Set<String> sampleNames = new LinkedHashSet<String>();
- int contigCounter = 0;
- // iterate over all the passed in strings
- for ( String str : headerStrings ) {
- if ( !str.startsWith(VCFHeader.METADATA_INDICATOR) ) {
- String[] strings = str.substring(1).split(VCFConstants.FIELD_SEPARATOR);
- if ( strings.length < VCFHeader.HEADER_FIELDS.values().length )
- throw new TribbleException.InvalidHeader("there are not enough columns present in the header line: " + str);
-
- int arrayIndex = 0;
- for (VCFHeader.HEADER_FIELDS field : VCFHeader.HEADER_FIELDS.values()) {
- try {
- if (field != VCFHeader.HEADER_FIELDS.valueOf(strings[arrayIndex]))
- throw new TribbleException.InvalidHeader("we were expecting column name '" + field + "' but we saw '" + strings[arrayIndex] + "'");
- } catch (IllegalArgumentException e) {
- throw new TribbleException.InvalidHeader("unknown column name '" + strings[arrayIndex] + "'; it does not match a legal column header name.");
- }
- arrayIndex++;
- }
-
- boolean sawFormatTag = false;
- if ( arrayIndex < strings.length ) {
- if ( !strings[arrayIndex].equals("FORMAT") )
- throw new TribbleException.InvalidHeader("we were expecting column name 'FORMAT' but we saw '" + strings[arrayIndex] + "'");
- sawFormatTag = true;
- arrayIndex++;
- }
-
- while ( arrayIndex < strings.length )
- sampleNames.add(strings[arrayIndex++]);
-
- if ( sawFormatTag && sampleNames.size() == 0 )
- throw new TribbleException.InvalidHeader("The FORMAT field was provided but there is no genotype/sample data");
-
- // If we're performing sample name remapping and there is exactly one sample specified in the header, replace
- // it with the remappedSampleName. Throw an error if there are 0 or multiple samples and remapping was requested
- // for this file.
- if ( remappedSampleName != null ) {
- // We currently only support on-the-fly sample name remapping for single-sample VCFs
- if ( sampleNames.isEmpty() || sampleNames.size() > 1 ) {
- throw new TribbleException(String.format("Cannot remap sample name to %s because %s samples are specified in the VCF header, and on-the-fly sample name remapping is only supported for single-sample VCFs",
- remappedSampleName, sampleNames.isEmpty() ? "no" : "multiple"));
- }
-
- sampleNames.clear();
- sampleNames.add(remappedSampleName);
- }
-
- } else {
- if ( str.startsWith(VCFConstants.INFO_HEADER_START) ) {
- final VCFInfoHeaderLine info = new VCFInfoHeaderLine(str.substring(7), version);
- metaData.add(info);
- } else if ( str.startsWith(VCFConstants.FILTER_HEADER_START) ) {
- final VCFFilterHeaderLine filter = new VCFFilterHeaderLine(str.substring(9), version);
- metaData.add(filter);
- } else if ( str.startsWith(VCFConstants.FORMAT_HEADER_START) ) {
- final VCFFormatHeaderLine format = new VCFFormatHeaderLine(str.substring(9), version);
- metaData.add(format);
- } else if ( str.startsWith(VCFConstants.CONTIG_HEADER_START) ) {
- final VCFContigHeaderLine contig = new VCFContigHeaderLine(str.substring(9), version, VCFConstants.CONTIG_HEADER_START.substring(2), contigCounter++);
- metaData.add(contig);
- } else if ( str.startsWith(VCFConstants.ALT_HEADER_START) ) {
- final VCFSimpleHeaderLine alt = new VCFSimpleHeaderLine(str.substring(6), version, VCFConstants.ALT_HEADER_START.substring(2), Arrays.asList("ID", "Description"));
- metaData.add(alt);
- } else {
- int equals = str.indexOf("=");
- if ( equals != -1 )
- metaData.add(new VCFHeaderLine(str.substring(2, equals), str.substring(equals+1)));
- }
- }
- }
-
- this.header = new VCFHeader(metaData, sampleNames);
- if ( doOnTheFlyModifications )
- this.header = VCFStandardHeaderLines.repairStandardHeaderLines(this.header);
- return this.header;
- }
-
- /**
- * Explicitly set the VCFHeader on this codec. This will overwrite the header read from the file
- * and the version state stored in this instance; conversely, reading the header from a file will
- * overwrite whatever is set here. The returned header may not be identical to the header argument
- * since the header lines may be "repaired" (i.e., rewritten) if doOnTheFlyModifications is set.
- */
- public VCFHeader setVCFHeader(final VCFHeader header, final VCFHeaderVersion version) {
- this.version = version;
-
- if (this.doOnTheFlyModifications) this.header = VCFStandardHeaderLines.repairStandardHeaderLines(header);
- else this.header = header;
-
- return this.header;
- }
-
- /**
- * the fast decode function
- * @param line the line of text for the record
- * @return a feature, (not guaranteed complete) that has the correct start and stop
- */
- public Feature decodeLoc(String line) {
- return decodeLine(line, false);
- }
-
- /**
- * decode the line into a feature (VariantContext)
- * @param line the line
- * @return a VariantContext
- */
- public VariantContext decode(String line) {
- return decodeLine(line, true);
- }
-
- private VariantContext decodeLine(final String line, final boolean includeGenotypes) {
- // the same line reader is not used for parsing the header and parsing lines, if we see a #, we've seen a header line
- if (line.startsWith(VCFHeader.HEADER_INDICATOR)) return null;
-
- // our header cannot be null, we need the genotype sample names and counts
- if (header == null) throw new TribbleException("VCF Header cannot be null when decoding a record");
-
- if (parts == null)
- parts = new String[Math.min(header.getColumnCount(), NUM_STANDARD_FIELDS+1)];
-
- final int nParts = ParsingUtils.split(line, parts, VCFConstants.FIELD_SEPARATOR_CHAR, true);
-
- // if we have don't have a header, or we have a header with no genotyping data check that we
- // have eight columns. Otherwise check that we have nine (normal columns + genotyping data)
- if (( (header == null || !header.hasGenotypingData()) && nParts != NUM_STANDARD_FIELDS) ||
- (header != null && header.hasGenotypingData() && nParts != (NUM_STANDARD_FIELDS + 1)) )
- throw new TribbleException("Line " + lineNo + ": there aren't enough columns for line " + line + " (we expected " + (header == null ? NUM_STANDARD_FIELDS : NUM_STANDARD_FIELDS + 1) +
- " tokens, and saw " + nParts + " )");
-
- return parseVCFLine(parts, includeGenotypes);
- }
-
- /**
- * parse out the VCF line
- *
- * @param parts the parts split up
- * @return a variant context object
- */
- private VariantContext parseVCFLine(final String[] parts, final boolean includeGenotypes) {
- VariantContextBuilder builder = new VariantContextBuilder();
- builder.source(getName());
-
- // increment the line count
- // TODO -- because of the way the engine utilizes Tribble, we can parse a line multiple times (especially when
- // TODO -- the first record is far along the contig) and the line counter can get out of sync
- lineNo++;
-
- // parse out the required fields
- final String chr = getCachedString(parts[0]);
- builder.chr(chr);
- int pos = -1;
- try {
- pos = Integer.valueOf(parts[1]);
- } catch (NumberFormatException e) {
- generateException(parts[1] + " is not a valid start position in the VCF format");
- }
- builder.start(pos);
-
- if ( parts[2].length() == 0 )
- generateException("The VCF specification requires a valid ID field");
- else if ( parts[2].equals(VCFConstants.EMPTY_ID_FIELD) )
- builder.noID();
- else
- builder.id(parts[2]);
-
- final String ref = getCachedString(parts[3].toUpperCase());
- final String alts = getCachedString(parts[4].toUpperCase());
- builder.log10PError(parseQual(parts[5]));
-
- final List<String> filters = parseFilters(getCachedString(parts[6]));
- if ( filters != null ) builder.filters(new HashSet<String>(filters));
- final Map<String, Object> attrs = parseInfo(parts[7]);
- builder.attributes(attrs);
-
- if ( attrs.containsKey(VCFConstants.END_KEY) ) {
- // update stop with the end key if provided
- try {
- builder.stop(Integer.valueOf(attrs.get(VCFConstants.END_KEY).toString()));
- } catch (Exception e) {
- generateException("the END value in the INFO field is not valid");
- }
- } else {
- builder.stop(pos + ref.length() - 1);
- }
-
- // get our alleles, filters, and setup an attribute map
- final List<Allele> alleles = parseAlleles(ref, alts, lineNo);
- builder.alleles(alleles);
-
- // do we have genotyping data
- if (parts.length > NUM_STANDARD_FIELDS && includeGenotypes) {
- final LazyGenotypesContext.LazyParser lazyParser = new LazyVCFGenotypesParser(alleles, chr, pos);
- final int nGenotypes = header.getNGenotypeSamples();
- LazyGenotypesContext lazy = new LazyGenotypesContext(lazyParser, parts[8], nGenotypes);
-
- // did we resort the sample names? If so, we need to load the genotype data
- if ( !header.samplesWereAlreadySorted() )
- lazy.decode();
-
- builder.genotypesNoValidation(lazy);
- }
-
- VariantContext vc = null;
- try {
- vc = builder.make();
- } catch (Exception e) {
- generateException(e.getMessage());
- }
-
- return vc;
- }
-
- /**
- * get the name of this codec
- * @return our set name
- */
- public String getName() {
- return name;
- }
-
- /**
- * set the name of this codec
- * @param name new name
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Return a cached copy of the supplied string.
- *
- * @param str string
- * @return interned string
- */
- protected String getCachedString(String str) {
- String internedString = stringCache.get(str);
- if ( internedString == null ) {
- internedString = new String(str);
- stringCache.put(internedString, internedString);
- }
- return internedString;
- }
-
- /**
- * parse out the info fields
- * @param infoField the fields
- * @return a mapping of keys to objects
- */
- private Map<String, Object> parseInfo(String infoField) {
- Map<String, Object> attributes = new HashMap<String, Object>();
-
- if ( infoField.length() == 0 )
- generateException("The VCF specification requires a valid (non-zero length) info field");
-
- if ( !infoField.equals(VCFConstants.EMPTY_INFO_FIELD) ) {
- if ( infoField.indexOf("\t") != -1 || infoField.indexOf(" ") != -1 )
- generateException("The VCF specification does not allow for whitespace in the INFO field. Offending field value was \"" + infoField + "\"");
-
- int infoFieldSplitSize = ParsingUtils.split(infoField, infoFieldArray, VCFConstants.INFO_FIELD_SEPARATOR_CHAR, false);
- for (int i = 0; i < infoFieldSplitSize; i++) {
- String key;
- Object value;
-
- int eqI = infoFieldArray[i].indexOf("=");
- if ( eqI != -1 ) {
- key = infoFieldArray[i].substring(0, eqI);
- String valueString = infoFieldArray[i].substring(eqI+1);
-
- // split on the INFO field separator
- int infoValueSplitSize = ParsingUtils.split(valueString, infoValueArray, VCFConstants.INFO_FIELD_ARRAY_SEPARATOR_CHAR, false);
- if ( infoValueSplitSize == 1 ) {
- value = infoValueArray[0];
- final VCFInfoHeaderLine headerLine = header.getInfoHeaderLine(key);
- if ( headerLine != null && headerLine.getType() == VCFHeaderLineType.Flag && value.equals("0") ) {
- // deal with the case where a flag field has =0, such as DB=0, by skipping the add
- continue;
- }
- } else {
- ArrayList<String> valueList = new ArrayList<String>(infoValueSplitSize);
- for ( int j = 0; j < infoValueSplitSize; j++ )
- valueList.add(infoValueArray[j]);
- value = valueList;
- }
- } else {
- key = infoFieldArray[i];
- final VCFInfoHeaderLine headerLine = header.getInfoHeaderLine(key);
- if ( headerLine != null && headerLine.getType() != VCFHeaderLineType.Flag ) {
- if ( GeneralUtils.DEBUG_MODE_ENABLED && ! warnedAboutNoEqualsForNonFlag ) {
- System.err.println("Found info key " + key + " without a = value, but the header says the field is of type "
- + headerLine.getType() + " but this construct is only value for FLAG type fields");
- warnedAboutNoEqualsForNonFlag = true;
- }
-
- value = VCFConstants.MISSING_VALUE_v4;
- } else {
- value = true;
- }
- }
-
- // this line ensures that key/value pairs that look like key=; are parsed correctly as MISSING
- if ( "".equals(value) ) value = VCFConstants.MISSING_VALUE_v4;
-
- attributes.put(key, value);
- }
- }
-
- return attributes;
- }
-
- /**
- * create a an allele from an index and an array of alleles
- * @param index the index
- * @param alleles the alleles
- * @return an Allele
- */
- protected static Allele oneAllele(String index, List<Allele> alleles) {
- if ( index.equals(VCFConstants.EMPTY_ALLELE) )
- return Allele.NO_CALL;
- final int i;
- try {
- i = Integer.valueOf(index);
- } catch ( NumberFormatException e ) {
- throw new TribbleException.InternalCodecException("The following invalid GT allele index was encountered in the file: " + index);
- }
- if ( i >= alleles.size() )
- throw new TribbleException.InternalCodecException("The allele with index " + index + " is not defined in the REF/ALT columns in the record");
- return alleles.get(i);
- }
-
-
- /**
- * parse genotype alleles from the genotype string
- * @param GT GT string
- * @param alleles list of possible alleles
- * @param cache cache of alleles for GT
- * @return the allele list for the GT string
- */
- protected static List<Allele> parseGenotypeAlleles(String GT, List<Allele> alleles, Map<String, List<Allele>> cache) {
- // cache results [since they are immutable] and return a single object for each genotype
- List<Allele> GTAlleles = cache.get(GT);
-
- if ( GTAlleles == null ) {
- StringTokenizer st = new StringTokenizer(GT, VCFConstants.PHASING_TOKENS);
- GTAlleles = new ArrayList<Allele>(st.countTokens());
- while ( st.hasMoreTokens() ) {
- String genotype = st.nextToken();
- GTAlleles.add(oneAllele(genotype, alleles));
- }
- cache.put(GT, GTAlleles);
- }
-
- return GTAlleles;
- }
-
- /**
- * parse out the qual value
- * @param qualString the quality string
- * @return return a double
- */
- protected static Double parseQual(String qualString) {
- // if we're the VCF 4 missing char, return immediately
- if ( qualString.equals(VCFConstants.MISSING_VALUE_v4))
- return VariantContext.NO_LOG10_PERROR;
-
- Double val = Double.valueOf(qualString);
-
- // check to see if they encoded the missing qual score in VCF 3 style, with either the -1 or -1.0. check for val < 0 to save some CPU cycles
- if ((val < 0) && (Math.abs(val - VCFConstants.MISSING_QUALITY_v3_DOUBLE) < VCFConstants.VCF_ENCODING_EPSILON))
- return VariantContext.NO_LOG10_PERROR;
-
- // scale and return the value
- return val / -10.0;
- }
-
- /**
- * parse out the alleles
- * @param ref the reference base
- * @param alts a string of alternates to break into alleles
- * @param lineNo the line number for this record
- * @return a list of alleles, and a pair of the shortest and longest sequence
- */
- protected static List<Allele> parseAlleles(String ref, String alts, int lineNo) {
- List<Allele> alleles = new ArrayList<Allele>(2); // we are almost always biallelic
- // ref
- checkAllele(ref, true, lineNo);
- Allele refAllele = Allele.create(ref, true);
- alleles.add(refAllele);
-
- if ( alts.indexOf(",") == -1 ) // only 1 alternatives, don't call string split
- parseSingleAltAllele(alleles, alts, lineNo);
- else
- for ( String alt : alts.split(",") )
- parseSingleAltAllele(alleles, alt, lineNo);
-
- return alleles;
- }
-
- /**
- * check to make sure the allele is an acceptable allele
- * @param allele the allele to check
- * @param isRef are we the reference allele?
- * @param lineNo the line number for this record
- */
- private static void checkAllele(String allele, boolean isRef, int lineNo) {
- if ( allele == null || allele.length() == 0 )
- generateException(generateExceptionTextForBadAlleleBases(""), lineNo);
-
- if ( GeneralUtils.DEBUG_MODE_ENABLED && MAX_ALLELE_SIZE_BEFORE_WARNING != -1 && allele.length() > MAX_ALLELE_SIZE_BEFORE_WARNING ) {
- System.err.println(String.format("Allele detected with length %d exceeding max size %d at approximately line %d, likely resulting in degraded VCF processing performance", allele.length(), MAX_ALLELE_SIZE_BEFORE_WARNING, lineNo));
- }
-
- if ( isSymbolicAllele(allele) ) {
- if ( isRef ) {
- generateException("Symbolic alleles not allowed as reference allele: " + allele, lineNo);
- }
- } else {
- // check for VCF3 insertions or deletions
- if ( (allele.charAt(0) == VCFConstants.DELETION_ALLELE_v3) || (allele.charAt(0) == VCFConstants.INSERTION_ALLELE_v3) )
- generateException("Insertions/Deletions are not supported when reading 3.x VCF's. Please" +
- " convert your file to VCF4 using VCFTools, available at http://vcftools.sourceforge.net/index.html", lineNo);
-
- if (!Allele.acceptableAlleleBases(allele))
- generateException(generateExceptionTextForBadAlleleBases(allele), lineNo);
-
- if ( isRef && allele.equals(VCFConstants.EMPTY_ALLELE) )
- generateException("The reference allele cannot be missing", lineNo);
- }
- }
-
- /**
- * Generates the exception text for the case where the allele string contains unacceptable bases.
- *
- * @param allele non-null allele string
- * @return non-null exception text string
- */
- private static String generateExceptionTextForBadAlleleBases(final String allele) {
- if ( allele.length() == 0 )
- return "empty alleles are not permitted in VCF records";
- if ( allele.contains("[") || allele.contains("]") || allele.contains(":") || allele.contains(".") )
- return "VCF support for complex rearrangements with breakends has not yet been implemented";
- return "unparsable vcf record with allele " + allele;
- }
-
- /**
- * return true if this is a symbolic allele (e.g. <SOMETAG>) or
- * structural variation breakend (with [ or ]), otherwise false
- * @param allele the allele to check
- * @return true if the allele is a symbolic allele, otherwise false
- */
- private static boolean isSymbolicAllele(String allele) {
- return (allele != null && allele.length() > 2 &&
- ((allele.startsWith("<") && allele.endsWith(">")) ||
- (allele.contains("[") || allele.contains("]"))));
- }
-
- /**
- * parse a single allele, given the allele list
- * @param alleles the alleles available
- * @param alt the allele to parse
- * @param lineNo the line number for this record
- */
- private static void parseSingleAltAllele(List<Allele> alleles, String alt, int lineNo) {
- checkAllele(alt, false, lineNo);
-
- Allele allele = Allele.create(alt, false);
- if ( ! allele.isNoCall() )
- alleles.add(allele);
- }
-
- public final static boolean canDecodeFile(final String potentialInput, final String MAGIC_HEADER_LINE) {
- try {
- return isVCFStream(new FileInputStream(potentialInput), MAGIC_HEADER_LINE) ||
- isVCFStream(new GZIPInputStream(new FileInputStream(potentialInput)), MAGIC_HEADER_LINE) ||
- isVCFStream(new BlockCompressedInputStream(new FileInputStream(potentialInput)), MAGIC_HEADER_LINE);
- } catch ( FileNotFoundException e ) {
- return false;
- } catch ( IOException e ) {
- return false;
- }
- }
-
- private final static boolean isVCFStream(final InputStream stream, final String MAGIC_HEADER_LINE) {
- try {
- byte[] buff = new byte[MAGIC_HEADER_LINE.length()];
- int nread = stream.read(buff, 0, MAGIC_HEADER_LINE.length());
- boolean eq = Arrays.equals(buff, MAGIC_HEADER_LINE.getBytes());
- return eq;
-// String firstLine = new String(buff);
-// return firstLine.startsWith(MAGIC_HEADER_LINE);
- } catch ( IOException e ) {
- return false;
- } catch ( RuntimeException e ) {
- return false;
- } finally {
- try { stream.close(); } catch ( IOException e ) {}
- }
- }
-
-
- /**
- * create a genotype map
- *
- * @param str the string
- * @param alleles the list of alleles
- * @return a mapping of sample name to genotype object
- */
- public LazyGenotypesContext.LazyData createGenotypeMap(final String str,
- final List<Allele> alleles,
- final String chr,
- final int pos) {
- if (genotypeParts == null)
- genotypeParts = new String[header.getColumnCount() - NUM_STANDARD_FIELDS];
-
- int nParts = ParsingUtils.split(str, genotypeParts, VCFConstants.FIELD_SEPARATOR_CHAR);
- if ( nParts != genotypeParts.length )
- generateException("there are " + (nParts-1) + " genotypes while the header requires that " + (genotypeParts.length-1) + " genotypes be present for all records at " + chr + ":" + pos, lineNo);
-
- ArrayList<Genotype> genotypes = new ArrayList<Genotype>(nParts);
-
- // get the format keys
- int nGTKeys = ParsingUtils.split(genotypeParts[0], genotypeKeyArray, VCFConstants.GENOTYPE_FIELD_SEPARATOR_CHAR);
-
- // cycle through the sample names
- Iterator<String> sampleNameIterator = header.getGenotypeSamples().iterator();
-
- // clear out our allele mapping
- alleleMap.clear();
-
- // cycle through the genotype strings
- for (int genotypeOffset = 1; genotypeOffset < nParts; genotypeOffset++) {
- int GTValueSplitSize = ParsingUtils.split(genotypeParts[genotypeOffset], GTValueArray, VCFConstants.GENOTYPE_FIELD_SEPARATOR_CHAR);
-
- final String sampleName = sampleNameIterator.next();
- final GenotypeBuilder gb = new GenotypeBuilder(sampleName);
-
- // check to see if the value list is longer than the key list, which is a problem
- if (nGTKeys < GTValueSplitSize)
- generateException("There are too many keys for the sample " + sampleName + ", keys = " + parts[8] + ", values = " + parts[genotypeOffset]);
-
- int genotypeAlleleLocation = -1;
- if (nGTKeys >= 1) {
- gb.maxAttributes(nGTKeys - 1);
-
- for (int i = 0; i < nGTKeys; i++) {
- final String gtKey = genotypeKeyArray[i];
- boolean missing = i >= GTValueSplitSize;
-
- // todo -- all of these on the fly parsing of the missing value should be static constants
- if (gtKey.equals(VCFConstants.GENOTYPE_KEY)) {
- genotypeAlleleLocation = i;
- } else if ( missing ) {
- // if its truly missing (there no provided value) skip adding it to the attributes
- } else if (gtKey.equals(VCFConstants.GENOTYPE_FILTER_KEY)) {
- final List<String> filters = parseFilters(getCachedString(GTValueArray[i]));
- if ( filters != null ) gb.filters(filters);
- } else if ( GTValueArray[i].equals(VCFConstants.MISSING_VALUE_v4) ) {
- // don't add missing values to the map
- } else {
- if (gtKey.equals(VCFConstants.GENOTYPE_QUALITY_KEY)) {
- if ( GTValueArray[i].equals(VCFConstants.MISSING_GENOTYPE_QUALITY_v3) )
- gb.noGQ();
- else
- gb.GQ((int)Math.round(Double.valueOf(GTValueArray[i])));
- } else if (gtKey.equals(VCFConstants.GENOTYPE_ALLELE_DEPTHS)) {
- gb.AD(decodeInts(GTValueArray[i]));
- } else if (gtKey.equals(VCFConstants.GENOTYPE_PL_KEY)) {
- gb.PL(decodeInts(GTValueArray[i]));
- } else if (gtKey.equals(VCFConstants.GENOTYPE_LIKELIHOODS_KEY)) {
- gb.PL(GenotypeLikelihoods.fromGLField(GTValueArray[i]).getAsPLs());
- } else if (gtKey.equals(VCFConstants.DEPTH_KEY)) {
- gb.DP(Integer.valueOf(GTValueArray[i]));
- } else {
- gb.attribute(gtKey, GTValueArray[i]);
- }
- }
- }
- }
-
- // check to make sure we found a genotype field if our version is less than 4.1 file
- if ( ! version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_1) && genotypeAlleleLocation == -1 )
- generateException("Unable to find the GT field for the record; the GT field is required before VCF4.1");
- if ( genotypeAlleleLocation > 0 )
- generateException("Saw GT field at position " + genotypeAlleleLocation + ", but it must be at the first position for genotypes when present");
-
- final List<Allele> GTalleles = (genotypeAlleleLocation == -1 ? new ArrayList<Allele>(0) : parseGenotypeAlleles(GTValueArray[genotypeAlleleLocation], alleles, alleleMap));
- gb.alleles(GTalleles);
- gb.phased(genotypeAlleleLocation != -1 && GTValueArray[genotypeAlleleLocation].indexOf(VCFConstants.PHASED) != -1);
-
- // add it to the list
- try {
- genotypes.add(gb.make());
- } catch (TribbleException e) {
- throw new TribbleException.InternalCodecException(e.getMessage() + ", at position " + chr+":"+pos);
- }
- }
-
- return new LazyGenotypesContext.LazyData(genotypes, header.getSampleNamesInOrder(), header.getSampleNameToOffset());
- }
-
- private final String[] INT_DECODE_ARRAY = new String[10000];
- private final int[] decodeInts(final String string) {
- final int nValues = ParsingUtils.split(string, INT_DECODE_ARRAY, ',');
- final int[] values = new int[nValues];
- try {
- for ( int i = 0; i < nValues; i++ )
- values[i] = Integer.valueOf(INT_DECODE_ARRAY[i]);
- } catch (final NumberFormatException e) {
- return null;
- }
- return values;
- }
-
- /**
- * Forces all VCFCodecs to not perform any on the fly modifications to the VCF header
- * of VCF records. Useful primarily for raw comparisons such as when comparing
- * raw VCF records
- */
- public final void disableOnTheFlyModifications() {
- doOnTheFlyModifications = false;
- }
-
- /**
- * Replaces the sample name read from the VCF header with the remappedSampleName. Works
- * only for single-sample VCFs -- attempting to perform sample name remapping for multi-sample
- * VCFs will produce an Exception.
- *
- * @param remappedSampleName replacement sample name for the sample specified in the VCF header
- */
- public void setRemappedSampleName( final String remappedSampleName ) {
- this.remappedSampleName = remappedSampleName;
- }
-
- protected void generateException(String message) {
- throw new TribbleException(String.format("The provided VCF file is malformed at approximately line number %d: %s", lineNo, message));
- }
-
- protected static void generateException(String message, int lineNo) {
- throw new TribbleException(String.format("The provided VCF file is malformed at approximately line number %d: %s", lineNo, message));
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCF3Codec.java b/src/java/org/broadinstitute/variant/vcf/VCF3Codec.java
deleted file mode 100644
index 6c468c9..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCF3Codec.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.readers.LineIterator;
-import org.broad.tribble.readers.LineReader;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * A feature codec for the VCF3 specification, to read older VCF files. VCF3 has been
- * depreciated in favor of VCF4 (See VCF codec for the latest information)
- *
- * <p>
- * Reads historical VCF3 encoded files (1000 Genomes Pilot results, for example)
- * </p>
- *
- * <p>
- * See also: @see <a href="http://vcftools.sourceforge.net/specs.html">VCF specification</a><br>
- * See also: @see <a href="http://www.ncbi.nlm.nih.gov/pubmed/21653522">VCF spec. publication</a>
- * </p>
- *
- * @author Mark DePristo
- * @since 2010
- */
-public class VCF3Codec extends AbstractVCFCodec {
- public final static String VCF3_MAGIC_HEADER = "##fileformat=VCFv3";
-
- /**
- * @param reader the line reader to take header lines from
- * @return the number of header lines
- */
- public Object readActualHeader(final LineIterator reader) {
- final List<String> headerStrings = new ArrayList<String>();
-
- VCFHeaderVersion version = null;
- boolean foundHeaderVersion = false;
- while (reader.hasNext()) {
- lineNo++;
- final String line = reader.peek();
- if (line.startsWith(VCFHeader.METADATA_INDICATOR)) {
- final String[] lineFields = line.substring(2).split("=");
- if (lineFields.length == 2 && VCFHeaderVersion.isFormatString(lineFields[0]) ) {
- if ( !VCFHeaderVersion.isVersionString(lineFields[1]) )
- throw new TribbleException.InvalidHeader(lineFields[1] + " is not a supported version");
- foundHeaderVersion = true;
- version = VCFHeaderVersion.toHeaderVersion(lineFields[1]);
- if ( version != VCFHeaderVersion.VCF3_3 && version != VCFHeaderVersion.VCF3_2 )
- throw new TribbleException.InvalidHeader("This codec is strictly for VCFv3 and does not support " + lineFields[1]);
- }
- headerStrings.add(reader.next());
- }
- else if (line.startsWith(VCFHeader.HEADER_INDICATOR)) {
- if (!foundHeaderVersion) {
- throw new TribbleException.InvalidHeader("We never saw a header line specifying VCF version");
- }
- headerStrings.add(reader.next());
- return super.parseHeaderFromLines(headerStrings, version);
- }
- else {
- throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
- }
-
- }
- throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
- }
-
-
- /**
- * parse the filter string, first checking to see if we already have parsed it in a previous attempt
- * @param filterString the string to parse
- * @return a set of the filters applied
- */
- protected List<String> parseFilters(String filterString) {
-
- // null for unfiltered
- if ( filterString.equals(VCFConstants.UNFILTERED) )
- return null;
-
- // empty set for passes filters
- List<String> fFields = new ArrayList<String>();
-
- if ( filterString.equals(VCFConstants.PASSES_FILTERS_v3) )
- return new ArrayList<String>(fFields);
-
- if ( filterString.length() == 0 )
- generateException("The VCF specification requires a valid filter status");
-
- // do we have the filter string cached?
- if ( filterHash.containsKey(filterString) )
- return new ArrayList<String>(filterHash.get(filterString));
-
- // otherwise we have to parse and cache the value
- if ( filterString.indexOf(VCFConstants.FILTER_CODE_SEPARATOR) == -1 )
- fFields.add(filterString);
- else
- fFields.addAll(Arrays.asList(filterString.split(VCFConstants.FILTER_CODE_SEPARATOR)));
-
- filterHash.put(filterString, fFields);
-
- return fFields;
- }
-
- @Override
- public boolean canDecode(final String potentialInput) {
- return canDecodeFile(potentialInput, VCF3_MAGIC_HEADER);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFCodec.java b/src/java/org/broadinstitute/variant/vcf/VCFCodec.java
deleted file mode 100644
index fad90ca..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFCodec.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.readers.LineIterator;
-
-import java.util.*;
-
-/**
- * A feature codec for the VCF 4 specification
- *
- * <p>
- * VCF is a text file format (most likely stored in a compressed manner). It contains meta-information lines, a
- * header line, and then data lines each containing information about a position in the genome.
- * </p>
- * <p>One of the main uses of next-generation sequencing is to discover variation amongst large populations
- * of related samples. Recently the format for storing next-generation read alignments has been
- * standardised by the SAM/BAM file format specification. This has significantly improved the
- * interoperability of next-generation tools for alignment, visualisation, and variant calling.
- * We propose the Variant Call Format (VCF) as a standarised format for storing the most prevalent
- * types of sequence variation, including SNPs, indels and larger structural variants, together
- * with rich annotations. VCF is usually stored in a compressed manner and can be indexed for
- * fast data retrieval of variants from a range of positions on the reference genome.
- * The format was developed for the 1000 Genomes Project, and has also been adopted by other projects
- * such as UK10K, dbSNP, or the NHLBI Exome Project. VCFtools is a software suite that implements
- * various utilities for processing VCF files, including validation, merging and comparing,
- * and also provides a general Perl and Python API.
- * The VCF specification and VCFtools are available from http://vcftools.sourceforge.net.</p>
- *
- * <p>
- * See also: @see <a href="http://vcftools.sourceforge.net/specs.html">VCF specification</a><br>
- * See also: @see <a href="http://www.ncbi.nlm.nih.gov/pubmed/21653522">VCF spec. publication</a>
- * </p>
- *
- * <h2>File format example</h2>
- * <pre>
- * ##fileformat=VCFv4.0
- * #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878
- * chr1 109 . A T 0 PASS AC=1 GT:AD:DP:GL:GQ 0/1:610,327:308:-316.30,-95.47,-803.03:99
- * chr1 147 . C A 0 PASS AC=1 GT:AD:DP:GL:GQ 0/1:294,49:118:-57.87,-34.96,-338.46:99
- * </pre>
- *
- * @author Mark DePristo
- * @since 2010
- */
-public class VCFCodec extends AbstractVCFCodec {
- // Our aim is to read in the records and convert to VariantContext as quickly as possible, relying on VariantContext to do the validation of any contradictory (or malformed) record parameters.
- public final static String VCF4_MAGIC_HEADER = "##fileformat=VCFv4";
-
- /**
- * Reads all of the header from the provided iterator, but no reads no further.
- * @param lineIterator the line reader to take header lines from
- * @return The parsed header
- */
- @Override
- public Object readActualHeader(final LineIterator lineIterator) {
- final List<String> headerStrings = new ArrayList<String>();
-
- String line;
- boolean foundHeaderVersion = false;
- while (lineIterator.hasNext()) {
- line = lineIterator.peek();
- lineNo++;
- if (line.startsWith(VCFHeader.METADATA_INDICATOR)) {
- final String[] lineFields = line.substring(2).split("=");
- if (lineFields.length == 2 && VCFHeaderVersion.isFormatString(lineFields[0]) ) {
- if ( !VCFHeaderVersion.isVersionString(lineFields[1]) )
- throw new TribbleException.InvalidHeader(lineFields[1] + " is not a supported version");
- foundHeaderVersion = true;
- version = VCFHeaderVersion.toHeaderVersion(lineFields[1]);
- if ( ! version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_0) )
- throw new TribbleException.InvalidHeader("This codec is strictly for VCFv4; please use the VCF3 codec for " + lineFields[1]);
- if ( version != VCFHeaderVersion.VCF4_0 && version != VCFHeaderVersion.VCF4_1 && version != VCFHeaderVersion.VCF4_2 )
- throw new TribbleException.InvalidHeader("This codec is strictly for VCFv4 and does not support " + lineFields[1]);
- }
- headerStrings.add(lineIterator.next());
- }
- else if (line.startsWith(VCFHeader.HEADER_INDICATOR)) {
- if (!foundHeaderVersion) {
- throw new TribbleException.InvalidHeader("We never saw a header line specifying VCF version");
- }
- headerStrings.add(lineIterator.next());
- super.parseHeaderFromLines(headerStrings, version);
- return this.header;
- }
- else {
- throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
- }
-
- }
- throw new TribbleException.InvalidHeader("We never saw the required CHROM header line (starting with one #) for the input VCF file");
- }
-
- /**
- * parse the filter string, first checking to see if we already have parsed it in a previous attempt
- *
- * @param filterString the string to parse
- * @return a set of the filters applied or null if filters were not applied to the record (e.g. as per the missing value in a VCF)
- */
- protected List<String> parseFilters(final String filterString) {
- // null for unfiltered
- if ( filterString.equals(VCFConstants.UNFILTERED) )
- return null;
-
- if ( filterString.equals(VCFConstants.PASSES_FILTERS_v4) )
- return Collections.emptyList();
- if ( filterString.equals(VCFConstants.PASSES_FILTERS_v3) )
- generateException(VCFConstants.PASSES_FILTERS_v3 + " is an invalid filter name in vcf4", lineNo);
- if ( filterString.length() == 0 )
- generateException("The VCF specification requires a valid filter status: filter was " + filterString, lineNo);
-
- // do we have the filter string cached?
- if ( filterHash.containsKey(filterString) )
- return filterHash.get(filterString);
-
- // empty set for passes filters
- final List<String> fFields = new LinkedList<String>();
- // otherwise we have to parse and cache the value
- if ( !filterString.contains(VCFConstants.FILTER_CODE_SEPARATOR) )
- fFields.add(filterString);
- else
- fFields.addAll(Arrays.asList(filterString.split(VCFConstants.FILTER_CODE_SEPARATOR)));
-
- filterHash.put(filterString, Collections.unmodifiableList(fFields));
-
- return fFields;
- }
-
- @Override
- public boolean canDecode(final String potentialInput) {
- return canDecodeFile(potentialInput, VCF4_MAGIC_HEADER);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFCompoundHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFCompoundHeaderLine.java
deleted file mode 100644
index 12db895..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFCompoundHeaderLine.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.variantcontext.GenotypeLikelihoods;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.ArrayList;
-import java.util.Map;
-
-/**
- * a base class for compound header lines, which include info lines and format lines (so far)
- */
-public abstract class VCFCompoundHeaderLine extends VCFHeaderLine implements VCFIDHeaderLine {
-
- public enum SupportedHeaderLineType {
- INFO(true), FORMAT(false);
-
- public final boolean allowFlagValues;
- SupportedHeaderLineType(boolean flagValues) {
- allowFlagValues = flagValues;
- }
- }
-
- // the field types
- private String name;
- private int count = -1;
- private VCFHeaderLineCount countType;
- private String description;
- private VCFHeaderLineType type;
-
- // access methods
- public String getID() { return name; }
- public String getDescription() { return description; }
- public VCFHeaderLineType getType() { return type; }
- public VCFHeaderLineCount getCountType() { return countType; }
- public boolean isFixedCount() { return countType == VCFHeaderLineCount.INTEGER; }
- public int getCount() {
- if ( ! isFixedCount() )
- throw new TribbleException("Asking for header line count when type is not an integer");
- return count;
- }
-
- /**
- * Get the number of values expected for this header field, given the properties of VariantContext vc
- *
- * If the count is a fixed count, return that. For example, a field with size of 1 in the header returns 1
- * If the count is of type A, return vc.getNAlleles - 1
- * If the count is of type G, return the expected number of genotypes given the number of alleles in VC and the
- * max ploidy among all samples. Note that if the max ploidy of the VC is 0 (there's no GT information
- * at all, then implicitly assume diploid samples when computing G values.
- * If the count is UNBOUNDED return -1
- *
- * @param vc
- * @return
- */
- public int getCount(final VariantContext vc) {
- switch ( countType ) {
- case INTEGER: return count;
- case UNBOUNDED: return -1;
- case A: return vc.getNAlleles() - 1;
- case G:
- final int ploidy = vc.getMaxPloidy(2);
- return GenotypeLikelihoods.numLikelihoods(vc.getNAlleles(), ploidy);
- default:
- throw new TribbleException("Unknown count type: " + countType);
- }
- }
-
- public void setNumberToUnbounded() {
- countType = VCFHeaderLineCount.UNBOUNDED;
- count = -1;
- }
-
- // our type of line, i.e. format, info, etc
- private final SupportedHeaderLineType lineType;
-
- /**
- * create a VCF format header line
- *
- * @param name the name for this header line
- * @param count the count for this header line
- * @param type the type for this header line
- * @param description the description for this header line
- * @param lineType the header line type
- */
- protected VCFCompoundHeaderLine(String name, int count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) {
- super(lineType.toString(), "");
- this.name = name;
- this.countType = VCFHeaderLineCount.INTEGER;
- this.count = count;
- this.type = type;
- this.description = description;
- this.lineType = lineType;
- validate();
- }
-
- /**
- * create a VCF format header line
- *
- * @param name the name for this header line
- * @param count the count type for this header line
- * @param type the type for this header line
- * @param description the description for this header line
- * @param lineType the header line type
- */
- protected VCFCompoundHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description, SupportedHeaderLineType lineType) {
- super(lineType.toString(), "");
- this.name = name;
- this.countType = count;
- this.type = type;
- this.description = description;
- this.lineType = lineType;
- validate();
- }
-
- /**
- * create a VCF format header line
- *
- * @param line the header line
- * @param version the VCF header version
- * @param lineType the header line type
- *
- */
- protected VCFCompoundHeaderLine(String line, VCFHeaderVersion version, SupportedHeaderLineType lineType) {
- super(lineType.toString(), "");
-
- final ArrayList<String> expectedTags = new ArrayList(Arrays.asList("ID","Number","Type","Description"));
- if ( version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_2) )
- expectedTags.add("Version");
- final Map<String,String> mapping = VCFHeaderLineTranslator.parseLine(version, line, expectedTags);
- name = mapping.get("ID");
- count = -1;
- final String numberStr = mapping.get("Number");
- if ( numberStr.equals(VCFConstants.PER_ALLELE_COUNT) ) {
- countType = VCFHeaderLineCount.A;
- } else if ( numberStr.equals(VCFConstants.PER_GENOTYPE_COUNT) ) {
- countType = VCFHeaderLineCount.G;
- } else if ( (version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_0) && numberStr.equals(VCFConstants.UNBOUNDED_ENCODING_v4)) ||
- (! version.isAtLeastAsRecentAs(VCFHeaderVersion.VCF4_0) && numberStr.equals(VCFConstants.UNBOUNDED_ENCODING_v3)) ) {
- countType = VCFHeaderLineCount.UNBOUNDED;
- } else {
- countType = VCFHeaderLineCount.INTEGER;
- count = Integer.valueOf(numberStr);
-
- }
-
- if ( count < 0 && countType == VCFHeaderLineCount.INTEGER )
- throw new TribbleException.InvalidHeader("Count < 0 for fixed size VCF header field " + name);
-
- try {
- type = VCFHeaderLineType.valueOf(mapping.get("Type"));
- } catch (Exception e) {
- throw new TribbleException(mapping.get("Type") + " is not a valid type in the VCF specification (note that types are case-sensitive)");
- }
- if (type == VCFHeaderLineType.Flag && !allowFlagValues())
- throw new IllegalArgumentException("Flag is an unsupported type for this kind of field");
-
- description = mapping.get("Description");
- if ( description == null && ALLOW_UNBOUND_DESCRIPTIONS ) // handle the case where there's no description provided
- description = UNBOUND_DESCRIPTION;
-
- this.lineType = lineType;
-
- validate();
- }
-
- private void validate() {
- if ( name == null || type == null || description == null || lineType == null )
- throw new IllegalArgumentException(String.format("Invalid VCFCompoundHeaderLine: key=%s name=%s type=%s desc=%s lineType=%s",
- super.getKey(), name, type, description, lineType ));
- if ( name.contains("<") || name.contains(">") )
- throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain angle brackets");
- if ( name.contains("=") )
- throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain an equals sign");
-
- if ( type == VCFHeaderLineType.Flag && count != 0 ) {
- count = 0;
- if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
- System.err.println("FLAG fields must have a count value of 0, but saw " + count + " for header line " + getID() + ". Changing it to 0 inside the code");
- }
- }
- }
-
- /**
- * make a string representation of this header line
- * @return a string representation
- */
- protected String toStringEncoding() {
- Map<String,Object> map = new LinkedHashMap<String,Object>();
- map.put("ID", name);
- Object number;
- switch ( countType ) {
- case A: number = VCFConstants.PER_ALLELE_COUNT; break;
- case G: number = VCFConstants.PER_GENOTYPE_COUNT; break;
- case UNBOUNDED: number = VCFConstants.UNBOUNDED_ENCODING_v4; break;
- case INTEGER:
- default: number = count;
- }
- map.put("Number", number);
- map.put("Type", type);
- map.put("Description", description);
- return lineType.toString() + "=" + VCFHeaderLine.toStringEncoding(map);
- }
-
- /**
- * returns true if we're equal to another compounder header line
- * @param o a compound header line
- * @return true if equal
- */
- public boolean equals(Object o) {
- if ( !(o instanceof VCFCompoundHeaderLine) )
- return false;
- VCFCompoundHeaderLine other = (VCFCompoundHeaderLine)o;
- return equalsExcludingDescription(other) &&
- description.equals(other.description);
- }
-
- public boolean equalsExcludingDescription(VCFCompoundHeaderLine other) {
- return count == other.count &&
- countType == other.countType &&
- type == other.type &&
- lineType == other.lineType &&
- name.equals(other.name);
- }
-
- public boolean sameLineTypeAndName(VCFCompoundHeaderLine other) {
- return lineType == other.lineType &&
- name.equals(other.name);
- }
-
- /**
- * do we allow flag (boolean) values? (i.e. booleans where you don't have specify the value, AQ means AQ=true)
- * @return true if we do, false otherwise
- */
- abstract boolean allowFlagValues();
-
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFConstants.java b/src/java/org/broadinstitute/variant/vcf/VCFConstants.java
deleted file mode 100644
index b45edea..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFConstants.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import java.util.Locale;
-
-public final class VCFConstants {
- public static final Locale VCF_LOCALE = Locale.US;
-
- // reserved INFO/FORMAT field keys
- public static final String ANCESTRAL_ALLELE_KEY = "AA";
- public static final String ALLELE_COUNT_KEY = "AC";
- public static final String MLE_ALLELE_COUNT_KEY = "MLEAC";
- public static final String ALLELE_FREQUENCY_KEY = "AF";
- public static final String MLE_ALLELE_FREQUENCY_KEY = "MLEAF";
- public static final String MLE_PER_SAMPLE_ALLELE_COUNT_KEY = "MLPSAC";
- public static final String MLE_PER_SAMPLE_ALLELE_FRACTION_KEY = "MLPSAF";
- public static final String ALLELE_NUMBER_KEY = "AN";
- public static final String RMS_BASE_QUALITY_KEY = "BQ";
- public static final String CIGAR_KEY = "CIGAR";
- public static final String DBSNP_KEY = "DB";
- public static final String DEPTH_KEY = "DP";
- public static final String DOWNSAMPLED_KEY = "DS";
- public static final String EXPECTED_ALLELE_COUNT_KEY = "EC";
- public static final String END_KEY = "END";
-
- public static final String GENOTYPE_FILTER_KEY = "FT";
- public static final String GENOTYPE_KEY = "GT";
- public static final String GENOTYPE_POSTERIORS_KEY = "GP";
- public static final String GENOTYPE_QUALITY_KEY = "GQ";
- public static final String GENOTYPE_ALLELE_DEPTHS = "AD";
- public static final String GENOTYPE_PL_KEY = "PL"; // phred-scaled genotype likelihoods
- @Deprecated public static final String GENOTYPE_LIKELIHOODS_KEY = "GL"; // log10 scaled genotype likelihoods
-
- public static final String HAPMAP2_KEY = "H2";
- public static final String HAPMAP3_KEY = "H3";
- public static final String HAPLOTYPE_QUALITY_KEY = "HQ";
- public static final String RMS_MAPPING_QUALITY_KEY = "MQ";
- public static final String MAPPING_QUALITY_ZERO_KEY = "MQ0";
- public static final String SAMPLE_NUMBER_KEY = "NS";
- public static final String PHASE_QUALITY_KEY = "PQ";
- public static final String PHASE_SET_KEY = "PS";
- public static final String OLD_DEPTH_KEY = "RD";
- public static final String STRAND_BIAS_KEY = "SB";
- public static final String SOMATIC_KEY = "SOMATIC";
- public static final String VALIDATED_KEY = "VALIDATED";
- public static final String THOUSAND_GENOMES_KEY = "1000G";
-
- // separators
- public static final String FORMAT_FIELD_SEPARATOR = ":";
- public static final String GENOTYPE_FIELD_SEPARATOR = ":";
- public static final char GENOTYPE_FIELD_SEPARATOR_CHAR = ':';
- public static final String FIELD_SEPARATOR = "\t";
- public static final char FIELD_SEPARATOR_CHAR = '\t';
- public static final String FILTER_CODE_SEPARATOR = ";";
- public static final String INFO_FIELD_ARRAY_SEPARATOR = ",";
- public static final char INFO_FIELD_ARRAY_SEPARATOR_CHAR = ',';
- public static final String ID_FIELD_SEPARATOR = ";";
- public static final String INFO_FIELD_SEPARATOR = ";";
- public static final char INFO_FIELD_SEPARATOR_CHAR = ';';
- public static final String UNPHASED = "/";
- public static final String PHASED = "|";
- public static final String PHASED_SWITCH_PROB_v3 = "\\";
- public static final String PHASING_TOKENS = "/|\\";
-
- // header lines
- public static final String FILTER_HEADER_START = "##FILTER";
- public static final String FORMAT_HEADER_START = "##FORMAT";
- public static final String INFO_HEADER_START = "##INFO";
- public static final String ALT_HEADER_START = "##ALT";
- public static final String CONTIG_HEADER_KEY = "contig";
- public static final String CONTIG_HEADER_START = "##" + CONTIG_HEADER_KEY;
- public static final String GATK_COMMAND_START = "##GATKCommandLine";
-
- // old indel alleles
- public static final char DELETION_ALLELE_v3 = 'D';
- public static final char INSERTION_ALLELE_v3 = 'I';
-
- // missing/default values
- public static final String UNFILTERED = ".";
- public static final String PASSES_FILTERS_v3 = "0";
- public static final String PASSES_FILTERS_v4 = "PASS";
- public static final String EMPTY_ID_FIELD = ".";
- public static final String EMPTY_INFO_FIELD = ".";
- public static final String EMPTY_ALTERNATE_ALLELE_FIELD = ".";
- public static final String MISSING_VALUE_v4 = ".";
- public static final String MISSING_QUALITY_v3 = "-1";
- public static final Double MISSING_QUALITY_v3_DOUBLE = Double.valueOf(MISSING_QUALITY_v3);
-
- public static final String MISSING_GENOTYPE_QUALITY_v3 = "-1";
- public static final String MISSING_HAPLOTYPE_QUALITY_v3 = "-1";
- public static final String MISSING_DEPTH_v3 = "-1";
- public static final String UNBOUNDED_ENCODING_v4 = ".";
- public static final String UNBOUNDED_ENCODING_v3 = "-1";
- public static final String PER_ALLELE_COUNT = "A";
- public static final String PER_GENOTYPE_COUNT = "G";
- public static final String EMPTY_ALLELE = ".";
- public static final String EMPTY_GENOTYPE = "./.";
- public static final int MAX_GENOTYPE_QUAL = 99;
-
- public static final Double VCF_ENCODING_EPSILON = 0.00005; // when we consider fields equal(), used in the Qual compare
- public static final String REFSAMPLE_DEPTH_KEY = "REFDEPTH";
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFContigHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFContigHeaderLine.java
deleted file mode 100644
index d65c56a..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFContigHeaderLine.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import net.sf.samtools.SAMSequenceRecord;
-import org.broad.tribble.TribbleException;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A special class representing a contig VCF header line. Knows the true contig order and sorts on that
- *
- * @author mdepristo
- */
-public class VCFContigHeaderLine extends VCFSimpleHeaderLine {
- final Integer contigIndex;
-
- /**
- * create a VCF contig header line
- *
- * @param line the header line
- * @param version the vcf header version
- * @param key the key for this header line
- */
- public VCFContigHeaderLine(final String line, final VCFHeaderVersion version, final String key, final int contigIndex) {
- super(line, version, key, null);
- if (contigIndex < 0) throw new TribbleException("The contig index is less than zero.");
- this.contigIndex = contigIndex;
- }
-
- public VCFContigHeaderLine(final Map<String, String> mapping, final int contigIndex) {
- super(VCFHeader.CONTIG_KEY, mapping);
- if (contigIndex < 0) throw new TribbleException("The contig index is less than zero.");
- this.contigIndex = contigIndex;
- }
-
- VCFContigHeaderLine(final SAMSequenceRecord sequenceRecord, final String assembly) {
- super(VCFHeader.CONTIG_KEY, new HashMap<String, String>() {{
- // Now inside an init block in an anon HashMap subclass
- this.put("ID", sequenceRecord.getSequenceName());
- this.put("length", Integer.toString(sequenceRecord.getSequenceLength()));
- if ( assembly != null ) this.put("assembly", assembly);
- }});
- this.contigIndex = sequenceRecord.getSequenceIndex();
- }
-
- public Integer getContigIndex() {
- return contigIndex;
- }
-
- public SAMSequenceRecord getSAMSequenceRecord() {
- final String lengthString = this.getGenericFieldValue("length");
- if (lengthString == null) throw new TribbleException("Contig " + this.getID() + " does not have a length field.");
- final SAMSequenceRecord record = new SAMSequenceRecord(this.getID(), Integer.valueOf(lengthString));
- record.setSequenceIndex(this.contigIndex);
- return record;
- }
-
- /**
- * IT IS CRITICAL THAT THIS BE OVERRIDDEN SO WE SORT THE CONTIGS IN THE CORRECT ORDER
- */
- @Override
- public int compareTo(final Object other) {
- if ( other instanceof VCFContigHeaderLine )
- return contigIndex.compareTo(((VCFContigHeaderLine) other).contigIndex);
- else {
- return super.compareTo(other);
- }
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFEncoder.java b/src/java/org/broadinstitute/variant/vcf/VCFEncoder.java
deleted file mode 100644
index f50cac3..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFEncoder.java
+++ /dev/null
@@ -1,381 +0,0 @@
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.util.ParsingUtils;
-import org.broadinstitute.variant.variantcontext.Allele;
-import org.broadinstitute.variant.variantcontext.Genotype;
-import org.broadinstitute.variant.variantcontext.GenotypeBuilder;
-import org.broadinstitute.variant.variantcontext.GenotypesContext;
-import org.broadinstitute.variant.variantcontext.LazyGenotypesContext;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.writer.IntGenotypeFieldAccessors;
-
-import java.lang.reflect.Array;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * Functions specific to encoding VCF records.
- */
-public class VCFEncoder {
-
- /**
- * The encoding used for VCF files: ISO-8859-1
- */
- public static final Charset VCF_CHARSET = Charset.forName("ISO-8859-1");
- private static final String QUAL_FORMAT_STRING = "%.2f";
- private static final String QUAL_FORMAT_EXTENSION_TO_TRIM = ".00";
-
- private final IntGenotypeFieldAccessors GENOTYPE_FIELD_ACCESSORS = new IntGenotypeFieldAccessors();
-
- private VCFHeader header;
-
- private boolean allowMissingFieldsInHeader = false;
-
- /**
- * Prepare a VCFEncoder that will encode records appropriate to the given VCF header, optionally
- * allowing missing fields in the header.
- */
- public VCFEncoder(final VCFHeader header, final boolean allowMissingFieldsInHeader) {
- if (header == null) throw new NullPointerException("The VCF header must not be null.");
- this.header = header;
- this.allowMissingFieldsInHeader = allowMissingFieldsInHeader;
- }
-
- /**
- * Please see the notes in the default constructor
- */
- @Deprecated
- public void setVCFHeader(final VCFHeader header) {
- this.header = header;
- }
-
- /**
- * Please see the notes in the default constructor
- */
- @Deprecated
- public void setAllowMissingFieldsInHeader(final boolean allow) {
- this.allowMissingFieldsInHeader = allow;
- }
-
- public String encode(final VariantContext context) {
- if (this.header == null) {
- throw new NullPointerException("The header field must be set on the VCFEncoder before encoding records.");
- }
-
- final StringBuilder stringBuilder = new StringBuilder();
-
- // CHROM
- stringBuilder.append(context.getChr()).append(VCFConstants.FIELD_SEPARATOR);
-
- // POS
- stringBuilder.append(String.valueOf(context.getStart())).append(VCFConstants.FIELD_SEPARATOR);
-
- // ID
- stringBuilder.append(context.getID()).append(VCFConstants.FIELD_SEPARATOR);
-
- // REF
- stringBuilder.append(context.getReference().getDisplayString()).append(VCFConstants.FIELD_SEPARATOR);
-
- // ALT
- if ( context.isVariant() ) {
- Allele altAllele = context.getAlternateAllele(0);
- String alt = altAllele.getDisplayString();
- stringBuilder.append(alt);
-
- for (int i = 1; i < context.getAlternateAlleles().size(); i++) {
- altAllele = context.getAlternateAllele(i);
- alt = altAllele.getDisplayString();
- stringBuilder.append(",");
- stringBuilder.append(alt);
- }
- } else {
- stringBuilder.append(VCFConstants.EMPTY_ALTERNATE_ALLELE_FIELD);
- }
-
- stringBuilder.append(VCFConstants.FIELD_SEPARATOR);
-
- // QUAL
- if ( ! context.hasLog10PError()) stringBuilder.append(VCFConstants.MISSING_VALUE_v4);
- else stringBuilder.append(formatQualValue(context.getPhredScaledQual()));
- stringBuilder.append(VCFConstants.FIELD_SEPARATOR);
-
- // FILTER
- stringBuilder.append(getFilterString(context)).append(VCFConstants.FIELD_SEPARATOR);
-
- // INFO
- final Map<String, String> infoFields = new TreeMap<String, String>();
- for (final Map.Entry<String, Object> field : context.getAttributes().entrySet() ) {
- if ( ! this.header.hasInfoLine(field.getKey())) fieldIsMissingFromHeaderError(context, field.getKey(), "INFO");
-
- final String outputValue = formatVCFField(field.getValue());
- if (outputValue != null) infoFields.put(field.getKey(), outputValue);
- }
- writeInfoString(infoFields, stringBuilder);
-
- // FORMAT
- final GenotypesContext gc = context.getGenotypes();
- if (gc.isLazyWithData() && ((LazyGenotypesContext) gc).getUnparsedGenotypeData() instanceof String) {
- stringBuilder.append(VCFConstants.FIELD_SEPARATOR);
- stringBuilder.append(((LazyGenotypesContext) gc).getUnparsedGenotypeData().toString());
- } else {
- final List<String> genotypeAttributeKeys = context.calcVCFGenotypeKeys(this.header);
- if ( ! genotypeAttributeKeys.isEmpty()) {
- for (final String format : genotypeAttributeKeys)
- if ( ! this.header.hasFormatLine(format))
- fieldIsMissingFromHeaderError(context, format, "FORMAT");
-
- final String genotypeFormatString = ParsingUtils.join(VCFConstants.GENOTYPE_FIELD_SEPARATOR, genotypeAttributeKeys);
-
- stringBuilder.append(VCFConstants.FIELD_SEPARATOR);
- stringBuilder.append(genotypeFormatString);
-
- final Map<Allele, String> alleleStrings = buildAlleleStrings(context);
- addGenotypeData(context, alleleStrings, genotypeAttributeKeys, stringBuilder);
- }
- }
-
- return stringBuilder.toString();
- }
-
- VCFHeader getVCFHeader() {
- return this.header;
- }
-
- boolean getAllowMissingFieldsInHeader() {
- return this.allowMissingFieldsInHeader;
- }
-
- private String getFilterString(final VariantContext vc) {
- if (vc.isFiltered()) {
- for (final String filter : vc.getFilters()) {
- if ( ! this.header.hasFilterLine(filter)) fieldIsMissingFromHeaderError(vc, filter, "FILTER");
- }
-
- return ParsingUtils.join(";", ParsingUtils.sortList(vc.getFilters()));
- }
- else if (vc.filtersWereApplied()) return VCFConstants.PASSES_FILTERS_v4;
- else return VCFConstants.UNFILTERED;
- }
-
- private String formatQualValue(final double qual) {
- String s = String.format(QUAL_FORMAT_STRING, qual);
- if ( s.endsWith(QUAL_FORMAT_EXTENSION_TO_TRIM) )
- s = s.substring(0, s.length() - QUAL_FORMAT_EXTENSION_TO_TRIM.length());
- return s;
- }
-
- private void fieldIsMissingFromHeaderError(final VariantContext vc, final String id, final String field) {
- if ( ! allowMissingFieldsInHeader)
- throw new IllegalStateException("Key " + id + " found in VariantContext field " + field
- + " at " + vc.getChr() + ":" + vc.getStart()
- + " but this key isn't defined in the VCFHeader. We require all VCFs to have"
- + " complete VCF headers by default.");
- }
-
- String formatVCFField(final Object val) {
- final String result;
- if ( val == null )
- result = VCFConstants.MISSING_VALUE_v4;
- else if ( val instanceof Double )
- result = formatVCFDouble((Double) val);
- else if ( val instanceof Boolean )
- result = (Boolean)val ? "" : null; // empty string for true, null for false
- else if ( val instanceof List ) {
- result = formatVCFField(((List)val).toArray());
- } else if ( val.getClass().isArray() ) {
- final int length = Array.getLength(val);
- if ( length == 0 )
- return formatVCFField(null);
- final StringBuilder sb = new StringBuilder(formatVCFField(Array.get(val, 0)));
- for ( int i = 1; i < length; i++) {
- sb.append(",");
- sb.append(formatVCFField(Array.get(val, i)));
- }
- result = sb.toString();
- } else
- result = val.toString();
-
- return result;
- }
-
- /**
- * Takes a double value and pretty prints it to a String for display
- *
- * Large doubles => gets %.2f style formatting
- * Doubles < 1 / 10 but > 1/100 </>=> get %.3f style formatting
- * Double < 1/100 => %.3e formatting
- * @param d
- * @return
- */
- public static String formatVCFDouble(final double d) {
- final String format;
- if ( d < 1 ) {
- if ( d < 0.01 ) {
- if ( Math.abs(d) >= 1e-20 )
- format = "%.3e";
- else {
- // return a zero format
- return "0.00";
- }
- } else {
- format = "%.3f";
- }
- } else {
- format = "%.2f";
- }
-
- return String.format(format, d);
- }
-
- static int countOccurrences(final char c, final String s) {
- int count = 0;
- for (int i = 0; i < s.length(); i++) {
- count += s.charAt(i) == c ? 1 : 0;
- }
- return count;
- }
-
- static boolean isMissingValue(final String s) {
- // we need to deal with the case that it's a list of missing values
- return (countOccurrences(VCFConstants.MISSING_VALUE_v4.charAt(0), s) + countOccurrences(',', s) == s.length());
- }
-
- /*
- * Add the genotype data
- */
- public void addGenotypeData(final VariantContext vc, final Map<Allele, String> alleleMap, final List<String> genotypeFormatKeys, final StringBuilder builder) {
- final int ploidy = vc.getMaxPloidy(2);
-
- for (final String sample : this.header.getGenotypeSamples()) {
- builder.append(VCFConstants.FIELD_SEPARATOR);
-
- Genotype g = vc.getGenotype(sample);
- if (g == null) g = GenotypeBuilder.createMissing(sample, ploidy);
-
- final List<String> attrs = new ArrayList<String>(genotypeFormatKeys.size());
- for (final String field : genotypeFormatKeys) {
- if (field.equals(VCFConstants.GENOTYPE_KEY)) {
- if ( ! g.isAvailable()) {
- throw new IllegalStateException("GTs cannot be missing for some samples if they are available for others in the record");
- }
-
- writeAllele(g.getAllele(0), alleleMap, builder);
- for (int i = 1; i < g.getPloidy(); i++) {
- builder.append(g.isPhased() ? VCFConstants.PHASED : VCFConstants.UNPHASED);
- writeAllele(g.getAllele(i), alleleMap, builder);
- }
- continue;
-
- } else {
- final String outputValue;
- if ( field.equals(VCFConstants.GENOTYPE_FILTER_KEY ) ) {
- outputValue = g.isFiltered() ? g.getFilters() : VCFConstants.PASSES_FILTERS_v4;
- } else {
- final IntGenotypeFieldAccessors.Accessor accessor = GENOTYPE_FIELD_ACCESSORS.getAccessor(field);
- if ( accessor != null ) {
- final int[] intValues = accessor.getValues(g);
- if ( intValues == null )
- outputValue = VCFConstants.MISSING_VALUE_v4;
- else if ( intValues.length == 1 ) // fast path
- outputValue = Integer.toString(intValues[0]);
- else {
- final StringBuilder sb = new StringBuilder();
- sb.append(intValues[0]);
- for ( int i = 1; i < intValues.length; i++) {
- sb.append(",");
- sb.append(intValues[i]);
- }
- outputValue = sb.toString();
- }
- } else {
- Object val = g.hasExtendedAttribute(field) ? g.getExtendedAttribute(field) : VCFConstants.MISSING_VALUE_v4;
-
- final VCFFormatHeaderLine metaData = this.header.getFormatHeaderLine(field);
- if ( metaData != null ) {
- final int numInFormatField = metaData.getCount(vc);
- if ( numInFormatField > 1 && val.equals(VCFConstants.MISSING_VALUE_v4) ) {
- // If we have a missing field but multiple values are expected, we need to construct a new string with all fields.
- // For example, if Number=2, the string has to be ".,."
- final StringBuilder sb = new StringBuilder(VCFConstants.MISSING_VALUE_v4);
- for ( int i = 1; i < numInFormatField; i++ ) {
- sb.append(",");
- sb.append(VCFConstants.MISSING_VALUE_v4);
- }
- val = sb.toString();
- }
- }
-
- // assume that if key is absent, then the given string encoding suffices
- outputValue = formatVCFField(val);
- }
- }
-
- if ( outputValue != null )
- attrs.add(outputValue);
- }
- }
-
- // strip off trailing missing values
- for (int i = attrs.size()-1; i >= 0; i--) {
- if ( isMissingValue(attrs.get(i))) attrs.remove(i);
- else break;
- }
-
- for (int i = 0; i < attrs.size(); i++) {
- if ( i > 0 || genotypeFormatKeys.contains(VCFConstants.GENOTYPE_KEY)) {
- builder.append(VCFConstants.GENOTYPE_FIELD_SEPARATOR);
- }
- builder.append(attrs.get(i));
- }
- }
- }
-
- /*
- * Create the info string; assumes that no values are null
- */
- private void writeInfoString(final Map<String, String> infoFields, final StringBuilder builder) {
- if ( infoFields.isEmpty() ) {
- builder.append(VCFConstants.EMPTY_INFO_FIELD);
- return;
- }
-
- boolean isFirst = true;
- for (final Map.Entry<String, String> entry : infoFields.entrySet()) {
- if (isFirst) isFirst = false;
- else builder.append(VCFConstants.INFO_FIELD_SEPARATOR);
-
- builder.append(entry.getKey());
-
- if ( ! entry.getValue().equals("")) {
- final VCFInfoHeaderLine metaData = this.header.getInfoHeaderLine(entry.getKey());
- if ( metaData == null || metaData.getCountType() != VCFHeaderLineCount.INTEGER || metaData.getCount() != 0 ) {
- builder.append("=");
- builder.append(entry.getValue());
- }
- }
- }
- }
-
- public Map<Allele, String> buildAlleleStrings(final VariantContext vc) {
- final Map<Allele, String> alleleMap = new HashMap<Allele, String>(vc.getAlleles().size()+1);
- alleleMap.put(Allele.NO_CALL, VCFConstants.EMPTY_ALLELE); // convenience for lookup
-
- final List<Allele> alleles = vc.getAlleles();
- for ( int i = 0; i < alleles.size(); i++ ) {
- alleleMap.put(alleles.get(i), String.valueOf(i));
- }
-
- return alleleMap;
- }
-
- private void writeAllele(final Allele allele, final Map<Allele, String> alleleMap, final StringBuilder builder) {
- final String encoding = alleleMap.get(allele);
- if ( encoding == null )
- throw new RuntimeException("Allele " + allele + " is not an allele in the variant context");
- builder.append(encoding);
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFFileReader.java b/src/java/org/broadinstitute/variant/vcf/VCFFileReader.java
deleted file mode 100644
index a9f03e1..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFFileReader.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.broadinstitute.variant.vcf;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.CloserUtil;
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.FeatureReader;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.bcf2.BCF2Codec;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Simplified interface for reading from VCF/BCF files.
- */
-public class VCFFileReader implements Closeable, Iterable<VariantContext> {
-
- private final FeatureReader<VariantContext> reader;
-
- /**
- * Returns true if the given file appears to be a BCF file.
- */
- public static boolean isBCF(final File file) {
- return file.getAbsolutePath().endsWith(".bcf");
- }
-
- /**
- * Returns the SAMSequenceDictionary from the provided VCF file.
- */
- public static SAMSequenceDictionary getSequenceDictionary(final File file) {
- final SAMSequenceDictionary dict = new VCFFileReader(file, false).getFileHeader().getSequenceDictionary();
- CloserUtil.close(file);
- return dict;
- }
-
- /** Constructs a VCFFileReader that requires the index to be present. */
- public VCFFileReader(final File file) {
- this(file, true);
- }
-
- /** Allows construction of a VCFFileReader that will or will not assert the presence of an index as desired. */
- public VCFFileReader(final File file, final boolean requireIndex) {
- this.reader = AbstractFeatureReader.getFeatureReader(
- file.getAbsolutePath(),
- isBCF(file) ? new BCF2Codec() : new VCFCodec(),
- requireIndex);
- }
-
- /** Returns the VCFHeader associated with this VCF/BCF file. */
- public VCFHeader getFileHeader() {
- return (VCFHeader) reader.getHeader();
- }
-
- /** Returns an iterator over all records in this VCF/BCF file. */
- public CloseableIterator<VariantContext> iterator() {
- try { return reader.iterator(); }
- catch (final IOException ioe) {
- throw new TribbleException("Could not create an iterator from a feature reader.", ioe);
- }
- }
-
- /** Queries for records within the region specified. */
- public CloseableIterator<VariantContext> query(final String chrom, final int start, final int end) {
- try { return reader.query(chrom, start, end); }
- catch (final IOException ioe) {
- throw new TribbleException("Could not create an iterator from a feature reader.", ioe);
- }
- }
-
- public void close() {
- try { this.reader.close(); }
- catch (final IOException ioe) {
- throw new TribbleException("Could not close a variant context feature reader.", ioe);
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFFilterHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFFilterHeaderLine.java
deleted file mode 100644
index 72f70e4..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFFilterHeaderLine.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import java.util.Arrays;
-
-/**
- * @author ebanks
- * A class representing a key=value entry for FILTER fields in the VCF header
- */
-public class VCFFilterHeaderLine extends VCFSimpleHeaderLine {
-
- /**
- * create a VCF filter header line
- *
- * @param name the name for this header line
- * @param description the description for this header line
- */
- public VCFFilterHeaderLine(String name, String description) {
- super("FILTER", name, description);
- }
-
- /**
- * Convenience constructor for FILTER whose description is the name
- * @param name
- */
- public VCFFilterHeaderLine(String name) {
- super("FILTER", name, name);
- }
-
- /**
- * create a VCF info header line
- *
- * @param line the header line
- * @param version the vcf header version
- */
- public VCFFilterHeaderLine(String line, VCFHeaderVersion version) {
- super(line, version, "FILTER", Arrays.asList("ID", "Description"));
- }
-
- @Override
- public boolean shouldBeAddedToDictionary() {
- return true;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFFormatHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFFormatHeaderLine.java
deleted file mode 100644
index ea05753..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFFormatHeaderLine.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-
-/**
- * @author ebanks
- * <p/>
- * Class VCFFormatHeaderLine
- * <p/>
- * A class representing a key=value entry for genotype FORMAT fields in the VCF header
- */
-public class VCFFormatHeaderLine extends VCFCompoundHeaderLine {
-
- public VCFFormatHeaderLine(String name, int count, VCFHeaderLineType type, String description) {
- super(name, count, type, description, SupportedHeaderLineType.FORMAT);
- if (type == VCFHeaderLineType.Flag)
- throw new IllegalArgumentException("Flag is an unsupported type for format fields");
- }
-
- public VCFFormatHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description) {
- super(name, count, type, description, SupportedHeaderLineType.FORMAT);
- }
-
- public VCFFormatHeaderLine(String line, VCFHeaderVersion version) {
- super(line, version, SupportedHeaderLineType.FORMAT);
- }
-
- // format fields do not allow flag values (that wouldn't make much sense, how would you encode this in the genotype).
- @Override
- boolean allowFlagValues() {
- return false;
- }
-
- @Override
- public boolean shouldBeAddedToDictionary() {
- return true;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFHeader.java b/src/java/org/broadinstitute/variant/vcf/VCFHeader.java
deleted file mode 100644
index 42365e3..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFHeader.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.util.ParsingUtils;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.variantcontext.VariantContextComparator;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-
-/**
- * NOTE: This class allows duplicate entries in the metadata & stores header lines in
- * lots of places. The original author noted that this should be cleaned up at some point
- * in the future (jgentry - 5/2013)
- *
- * @author aaron
- * <p/>
- * Class VCFHeader
- * <p/>
- * A class representing the VCF header
- */
-public class VCFHeader {
-
- // the mandatory header fields
- public enum HEADER_FIELDS {
- CHROM, POS, ID, REF, ALT, QUAL, FILTER, INFO
- }
-
- // the associated meta data
- private final Set<VCFHeaderLine> mMetaData = new LinkedHashSet<VCFHeaderLine>();
- private final Map<String, VCFInfoHeaderLine> mInfoMetaData = new LinkedHashMap<String, VCFInfoHeaderLine>();
- private final Map<String, VCFFormatHeaderLine> mFormatMetaData = new LinkedHashMap<String, VCFFormatHeaderLine>();
- private final Map<String, VCFFilterHeaderLine> mFilterMetaData = new LinkedHashMap<String, VCFFilterHeaderLine>();
- private final Map<String, VCFHeaderLine> mOtherMetaData = new LinkedHashMap<String, VCFHeaderLine>();
- private final List<VCFContigHeaderLine> contigMetaData = new ArrayList<VCFContigHeaderLine>();
-
- // the list of auxillary tags
- private final List<String> mGenotypeSampleNames = new ArrayList<String>();
-
- // the character string that indicates meta data
- public static final String METADATA_INDICATOR = "##";
-
- // the header string indicator
- public static final String HEADER_INDICATOR = "#";
-
- public static final String SOURCE_KEY = "source";
- public static final String REFERENCE_KEY = "reference";
- public static final String CONTIG_KEY = "contig";
- public static final String INTERVALS_KEY = "intervals";
- public static final String EXCLUDE_INTERVALS_KEY = "excludeIntervals";
- public static final String INTERVAL_MERGING_KEY = "interval_merging";
- public static final String INTERVAL_SET_RULE_KEY = "interval_set_rule";
- public static final String INTERVAL_PADDING_KEY = "interval_padding";
-
- // were the input samples sorted originally (or are we sorting them)?
- private boolean samplesWereAlreadySorted = true;
-
- // cache for efficient conversion of VCF -> VariantContext
- private ArrayList<String> sampleNamesInOrder = null;
- private HashMap<String, Integer> sampleNameToOffset = null;
-
- private boolean writeEngineHeaders = true;
- private boolean writeCommandLine = true;
-
- /**
- * Create an empty VCF header with no header lines and no samples
- */
- public VCFHeader() {
- this(Collections.<VCFHeaderLine>emptySet(), Collections.<String>emptySet());
- }
-
- /**
- * create a VCF header, given a list of meta data and auxillary tags
- *
- * @param metaData the meta data associated with this header
- */
- public VCFHeader(final Set<VCFHeaderLine> metaData) {
- mMetaData.addAll(metaData);
- loadVCFVersion();
- loadMetaDataMaps();
- }
-
- /**
- * Creates a deep copy of the given VCFHeader, duplicating all its metadata and
- * sample names.
- */
- public VCFHeader(final VCFHeader toCopy) {
- this(toCopy.mMetaData, toCopy.mGenotypeSampleNames);
- }
-
- /**
- * create a VCF header, given a list of meta data and auxillary tags
- *
- * @param metaData the meta data associated with this header
- * @param genotypeSampleNames the sample names
- */
- public VCFHeader(final Set<VCFHeaderLine> metaData, final Set<String> genotypeSampleNames) {
- this(metaData, new ArrayList<String>(genotypeSampleNames));
- }
-
- public VCFHeader(final Set<VCFHeaderLine> metaData, final List<String> genotypeSampleNames) {
- this(metaData);
-
- if ( genotypeSampleNames.size() != new HashSet<String>(genotypeSampleNames).size() )
- throw new TribbleException.InvalidHeader("BUG: VCF header has duplicate sample names");
-
- mGenotypeSampleNames.addAll(genotypeSampleNames);
- samplesWereAlreadySorted = ParsingUtils.isSorted(genotypeSampleNames);
- buildVCFReaderMaps(genotypeSampleNames);
- }
-
- /**
- * Tell this VCF header to use pre-calculated sample name ordering and the
- * sample name -> offset map. This assumes that all VariantContext created
- * using this header (i.e., read by the VCFCodec) will have genotypes
- * occurring in the same order
- *
- * @param genotypeSampleNamesInAppearenceOrder genotype sample names, must iterator in order of appearance
- */
- private void buildVCFReaderMaps(final Collection<String> genotypeSampleNamesInAppearenceOrder) {
- sampleNamesInOrder = new ArrayList<String>(genotypeSampleNamesInAppearenceOrder.size());
- sampleNameToOffset = new HashMap<String, Integer>(genotypeSampleNamesInAppearenceOrder.size());
-
- int i = 0;
- for (final String name : genotypeSampleNamesInAppearenceOrder) {
- sampleNamesInOrder.add(name);
- sampleNameToOffset.put(name, i++);
- }
- Collections.sort(sampleNamesInOrder);
- }
-
-
- /**
- * Sets a header line in the header metadata. This is essentially a Set.add call, which means that
- * equals() and hashCode() are used to determine whether an additional header line is added or an
- * existing header line is replaced.
- */
- public void addMetaDataLine(final VCFHeaderLine headerLine) {
- mMetaData.add(headerLine);
- loadMetaDataMaps();
- }
-
- /**
- * @return all of the VCF header lines of the ##contig form in order, or an empty list if none were present
- */
- public List<VCFContigHeaderLine> getContigLines() {
- return Collections.unmodifiableList(contigMetaData);
- }
-
- /**
- * Returns the contigs in this VCF file as a SAMSequenceDictionary. Returns null if contigs lines are
- * not present in the header. Throws PicardException if one or more contig lines do not have length
- * information.
- */
- public SAMSequenceDictionary getSequenceDictionary() {
- final List<VCFContigHeaderLine> contigHeaderLines = this.getContigLines();
- if (contigHeaderLines.isEmpty()) return null;
-
- final List<SAMSequenceRecord> sequenceRecords = new ArrayList<SAMSequenceRecord>(contigHeaderLines.size());
- for (final VCFContigHeaderLine contigHeaderLine : contigHeaderLines) {
- sequenceRecords.add(contigHeaderLine.getSAMSequenceRecord());
- }
-
- return new SAMSequenceDictionary(sequenceRecords);
- }
-
- /**
- * Completely replaces the contig records in this header with those in the given SAMSequenceDictionary.
- */
- public void setSequenceDictionary(final SAMSequenceDictionary dictionary) {
- this.contigMetaData.clear();
- for (final SAMSequenceRecord record : dictionary.getSequences()) {
- contigMetaData.add(new VCFContigHeaderLine(record, null));
- }
-
- this.mMetaData.addAll(contigMetaData);
- }
-
- public VariantContextComparator getVCFRecordComparator() {
- return new VariantContextComparator(this.getContigLines());
- }
-
- /**
- * @return all of the VCF FILTER lines in their original file order, or an empty list if none were present
- */
- public List<VCFFilterHeaderLine> getFilterLines() {
- final List<VCFFilterHeaderLine> filters = new ArrayList<VCFFilterHeaderLine>();
- for (final VCFHeaderLine line : mMetaData) {
- if ( line instanceof VCFFilterHeaderLine ) {
- filters.add((VCFFilterHeaderLine)line);
- }
- }
- return filters;
- }
-
- /**
- * @return all of the VCF FILTER lines in their original file order, or an empty list if none were present
- */
- public List<VCFIDHeaderLine> getIDHeaderLines() {
- final List<VCFIDHeaderLine> filters = new ArrayList<VCFIDHeaderLine>();
- for (final VCFHeaderLine line : mMetaData) {
- if (line instanceof VCFIDHeaderLine) {
- filters.add((VCFIDHeaderLine)line);
- }
- }
- return filters;
- }
-
- /**
- * check our metadata for a VCF version tag, and throw an exception if the version is out of date
- * or the version is not present
- */
- public void loadVCFVersion() {
- final List<VCFHeaderLine> toRemove = new ArrayList<VCFHeaderLine>();
- for (final VCFHeaderLine line : mMetaData)
- if (VCFHeaderVersion.isFormatString(line.getKey())) {
- toRemove.add(line);
- }
- // remove old header lines for now,
- mMetaData.removeAll(toRemove);
-
- }
-
- /**
- * load the format/info meta data maps (these are used for quick lookup by key name)
- */
- private void loadMetaDataMaps() {
- for (final VCFHeaderLine line : mMetaData) {
- if ( line instanceof VCFInfoHeaderLine ) {
- final VCFInfoHeaderLine infoLine = (VCFInfoHeaderLine)line;
- addMetaDataMapBinding(mInfoMetaData, infoLine);
- } else if ( line instanceof VCFFormatHeaderLine ) {
- final VCFFormatHeaderLine formatLine = (VCFFormatHeaderLine)line;
- addMetaDataMapBinding(mFormatMetaData, formatLine);
- } else if ( line instanceof VCFFilterHeaderLine ) {
- final VCFFilterHeaderLine filterLine = (VCFFilterHeaderLine)line;
- mFilterMetaData.put(filterLine.getID(), filterLine);
- } else if ( line instanceof VCFContigHeaderLine ) {
- contigMetaData.add((VCFContigHeaderLine)line);
- } else {
- mOtherMetaData.put(line.getKey(), line);
- }
- }
-
- if ( hasFormatLine(VCFConstants.GENOTYPE_LIKELIHOODS_KEY) && ! hasFormatLine(VCFConstants.GENOTYPE_PL_KEY) ) {
- if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
- System.err.println("Found " + VCFConstants.GENOTYPE_LIKELIHOODS_KEY + " format, but no "
- + VCFConstants.GENOTYPE_PL_KEY + " field. We now only manage PL fields internally"
- + " automatically adding a corresponding PL field to your VCF header");
- }
- addMetaDataLine(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_PL_KEY, VCFHeaderLineCount.G, VCFHeaderLineType.Integer, "Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification"));
- }
- }
-
- /**
- * Add line to map, issuing warnings about duplicates
- *
- * @param map
- * @param line
- * @param <T>
- */
- private <T extends VCFCompoundHeaderLine> void addMetaDataMapBinding(final Map<String, T> map, final T line) {
- final String key = line.getID();
- if ( map.containsKey(key) ) {
- if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
- System.err.println("Found duplicate VCF header lines for " + key + "; keeping the first only" );
- }
- }
- else {
- map.put(key, line);
- }
- }
-
- /**
- * get the header fields in order they're presented in the input file (which is now required to be
- * the order presented in the spec).
- *
- * @return a set of the header fields, in order
- */
- public Set<HEADER_FIELDS> getHeaderFields() {
- return new LinkedHashSet<HEADER_FIELDS>(Arrays.asList(HEADER_FIELDS.values()));
- }
-
- /**
- * get the meta data, associated with this header, in sorted order
- *
- * @return a set of the meta data
- */
- public Set<VCFHeaderLine> getMetaDataInInputOrder() {
- return makeGetMetaDataSet(mMetaData);
- }
-
- public Set<VCFHeaderLine> getMetaDataInSortedOrder() {
- return makeGetMetaDataSet(new TreeSet<VCFHeaderLine>(mMetaData));
- }
-
- private static Set<VCFHeaderLine> makeGetMetaDataSet(final Set<VCFHeaderLine> headerLinesInSomeOrder) {
- final Set<VCFHeaderLine> lines = new LinkedHashSet<VCFHeaderLine>();
- lines.add(new VCFHeaderLine(VCFHeaderVersion.VCF4_1.getFormatString(), VCFHeaderVersion.VCF4_1.getVersionString()));
- lines.addAll(headerLinesInSomeOrder);
- return Collections.unmodifiableSet(lines);
- }
-
- /**
- * Get the VCFHeaderLine whose key equals key. Returns null if no such line exists
- * @param key
- * @return
- */
- public VCFHeaderLine getMetaDataLine(final String key) {
- for (final VCFHeaderLine line: mMetaData) {
- if ( line.getKey().equals(key) )
- return line;
- }
-
- return null;
- }
-
- /**
- * get the genotyping sample names
- *
- * @return a list of the genotype column names, which may be empty if hasGenotypingData() returns false
- */
- public List<String> getGenotypeSamples() {
- return mGenotypeSampleNames;
- }
-
- public int getNGenotypeSamples() {
- return mGenotypeSampleNames.size();
- }
-
- /**
- * do we have genotyping data?
- *
- * @return true if we have genotyping columns, false otherwise
- */
- public boolean hasGenotypingData() {
- return getNGenotypeSamples() > 0;
- }
-
- /**
- * were the input samples sorted originally?
- *
- * @return true if the input samples were sorted originally, false otherwise
- */
- public boolean samplesWereAlreadySorted() {
- return samplesWereAlreadySorted;
- }
-
- /** @return the column count */
- public int getColumnCount() {
- return HEADER_FIELDS.values().length + (hasGenotypingData() ? mGenotypeSampleNames.size() + 1 : 0);
- }
-
- /**
- * Returns the INFO HeaderLines in their original ordering
- */
- public Collection<VCFInfoHeaderLine> getInfoHeaderLines() {
- return mInfoMetaData.values();
- }
-
- /**
- * Returns the FORMAT HeaderLines in their original ordering
- */
- public Collection<VCFFormatHeaderLine> getFormatHeaderLines() {
- return mFormatMetaData.values();
- }
-
- /**
- * @param id the header key name
- * @return the meta data line, or null if there is none
- */
- public VCFInfoHeaderLine getInfoHeaderLine(final String id) {
- return mInfoMetaData.get(id);
- }
-
- /**
- * @param id the header key name
- * @return the meta data line, or null if there is none
- */
- public VCFFormatHeaderLine getFormatHeaderLine(final String id) {
- return mFormatMetaData.get(id);
- }
-
- /**
- * @param id the header key name
- * @return the meta data line, or null if there is none
- */
- public VCFFilterHeaderLine getFilterHeaderLine(final String id) {
- return mFilterMetaData.get(id);
- }
-
- public boolean hasInfoLine(final String id) {
- return getInfoHeaderLine(id) != null;
- }
-
- public boolean hasFormatLine(final String id) {
- return getFormatHeaderLine(id) != null;
- }
-
- public boolean hasFilterLine(final String id) {
- return getFilterHeaderLine(id) != null;
- }
-
- /**
- * @param key the header key name
- * @return the meta data line, or null if there is none
- */
- public VCFHeaderLine getOtherHeaderLine(final String key) {
- return mOtherMetaData.get(key);
- }
-
- /**
- * If true additional engine headers will be written to the VCF, otherwise only the walker headers will be output.
- * @return true if additional engine headers will be written to the VCF
- */
- public boolean isWriteEngineHeaders() {
- return writeEngineHeaders;
- }
-
- /**
- * If true additional engine headers will be written to the VCF, otherwise only the walker headers will be output.
- * @param writeEngineHeaders true if additional engine headers will be written to the VCF
- */
- public void setWriteEngineHeaders(final boolean writeEngineHeaders) {
- this.writeEngineHeaders = writeEngineHeaders;
- }
-
- /**
- * If true, and isWriteEngineHeaders also returns true, the command line will be written to the VCF.
- * @return true if the command line will be written to the VCF
- */
- public boolean isWriteCommandLine() {
- return writeCommandLine;
- }
-
- /**
- * If true, and isWriteEngineHeaders also returns true, the command line will be written to the VCF.
- * @param writeCommandLine true if the command line will be written to the VCF
- */
- public void setWriteCommandLine(final boolean writeCommandLine) {
- this.writeCommandLine = writeCommandLine;
- }
-
- public ArrayList<String> getSampleNamesInOrder() {
- return sampleNamesInOrder;
- }
-
- public HashMap<String, Integer> getSampleNameToOffset() {
- return sampleNameToOffset;
- }
-
- @Override
- public String toString() {
- final StringBuilder b = new StringBuilder();
- b.append("[VCFHeader:");
- for ( final VCFHeaderLine line : mMetaData )
- b.append("\n\t").append(line);
- return b.append("\n]").toString();
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFHeaderLine.java
deleted file mode 100644
index a096cf1..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLine.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.TribbleException;
-
-import java.util.Map;
-
-
-/**
- * @author ebanks
- * <p/>
- * Class VCFHeaderLine
- * <p/>
- * A class representing a key=value entry in the VCF header
- */
-public class VCFHeaderLine implements Comparable {
- protected static final boolean ALLOW_UNBOUND_DESCRIPTIONS = true;
- protected static final String UNBOUND_DESCRIPTION = "Not provided in original VCF header";
-
- private String mKey = null;
- private String mValue = null;
-
- /**
- * create a VCF header line
- *
- * @param key the key for this header line
- * @param value the value for this header line
- */
- public VCFHeaderLine(String key, String value) {
- if ( key == null )
- throw new IllegalArgumentException("VCFHeaderLine: key cannot be null");
- if ( key.contains("<") || key.contains(">") )
- throw new IllegalArgumentException("VCFHeaderLine: key cannot contain angle brackets");
- if ( key.contains("=") )
- throw new IllegalArgumentException("VCFHeaderLine: key cannot contain an equals sign");
- mKey = key;
- mValue = value;
- }
-
- /**
- * Get the key
- *
- * @return the key
- */
- public String getKey() {
- return mKey;
- }
-
- /**
- * Get the value
- *
- * @return the value
- */
- public String getValue() {
- return mValue;
- }
-
- /**
- * By default the header lines won't be added to the dictionary, unless this method will be override (for example in FORMAT, INFO or FILTER header lines)
- *
- * @return false
- */
- public boolean shouldBeAddedToDictionary() {
- return false;
- }
-
- public String toString() {
- return toStringEncoding();
- }
-
- /**
- * Should be overloaded in sub classes to do subclass specific
- *
- * @return the string encoding
- */
- protected String toStringEncoding() {
- return mKey + "=" + mValue;
- }
-
- public boolean equals(Object o) {
- if ( !(o instanceof VCFHeaderLine) )
- return false;
- return mKey.equals(((VCFHeaderLine)o).getKey()) && mValue.equals(((VCFHeaderLine)o).getValue());
- }
-
- public int compareTo(Object other) {
- return toString().compareTo(other.toString());
- }
-
- /**
- * @param line the line
- * @return true if the line is a VCF meta data line, or false if it is not
- */
- public static boolean isHeaderLine(String line) {
- return line != null && line.length() > 0 && VCFHeader.HEADER_INDICATOR.equals(line.substring(0,1));
- }
-
- /**
- * create a string of a mapping pair for the target VCF version
- * @param keyValues a mapping of the key->value pairs to output
- * @return a string, correctly formatted
- */
- public static String toStringEncoding(Map<String, ? extends Object> keyValues) {
- StringBuilder builder = new StringBuilder();
- builder.append("<");
- boolean start = true;
- for (Map.Entry<String,?> entry : keyValues.entrySet()) {
- if (start) start = false;
- else builder.append(",");
-
- if ( entry.getValue() == null ) throw new TribbleException.InternalCodecException("Header problem: unbound value at " + entry + " from " + keyValues);
-
- builder.append(entry.getKey());
- builder.append("=");
- builder.append(entry.getValue().toString().contains(",") ||
- entry.getValue().toString().contains(" ") ||
- entry.getKey().equals("Description") ? "\""+ entry.getValue() + "\"" : entry.getValue());
- }
- builder.append(">");
- return builder.toString();
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineCount.java b/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineCount.java
deleted file mode 100644
index bae404b..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineCount.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-/**
- * the count encodings we use for fields in VCF header lines
- */
-public enum VCFHeaderLineCount {
- INTEGER, A, G, UNBOUNDED;
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineTranslator.java b/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineTranslator.java
deleted file mode 100644
index ab6ee8f..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineTranslator.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.TribbleException;
-
-import java.util.*;
-
-/**
- * A class for translating between vcf header versions
- */
-public class VCFHeaderLineTranslator {
- private static Map<VCFHeaderVersion,VCFLineParser> mapping;
-
- static {
- mapping = new HashMap<VCFHeaderVersion,VCFLineParser>();
- mapping.put(VCFHeaderVersion.VCF4_0,new VCF4Parser());
- mapping.put(VCFHeaderVersion.VCF4_1,new VCF4Parser());
- mapping.put(VCFHeaderVersion.VCF4_2,new VCF4Parser());
- mapping.put(VCFHeaderVersion.VCF3_3,new VCF3Parser());
- mapping.put(VCFHeaderVersion.VCF3_2,new VCF3Parser());
- }
-
- public static Map<String,String> parseLine(VCFHeaderVersion version, String valueLine, List<String> expectedTagOrder) {
- return mapping.get(version).parseLine(valueLine,expectedTagOrder);
- }
-}
-
-
-interface VCFLineParser {
- public Map<String,String> parseLine(String valueLine, List<String> expectedTagOrder);
-}
-
-
-/**
- * a class that handles the to and from disk for VCF 4 lines
- */
-class VCF4Parser implements VCFLineParser {
- /**
- * parse a VCF4 line
- * @param valueLine the line
- * @return a mapping of the tags parsed out
- */
- public Map<String, String> parseLine(String valueLine, List<String> expectedTagOrder) {
- // our return map
- Map<String, String> ret = new LinkedHashMap<String, String>();
-
- // a builder to store up characters as we go
- StringBuilder builder = new StringBuilder();
-
- // store the key when we're parsing out the values
- String key = "";
-
- // where are we in the stream of characters?
- int index = 0;
-
- // are we inside a quotation? we don't special case ',' then
- boolean inQuote = false;
-
- // a little switch machine to parse out the tags. Regex ended up being really complicated and ugly [yes, but this machine is getting ugly now... MAD]
- for (char c: valueLine.toCharArray()) {
- if ( c == '\"' ) {
- inQuote = ! inQuote;
- } else if ( inQuote ) {
- builder.append(c);
- } else {
- switch (c) {
- case ('<') : if (index == 0) break; // if we see a open bracket at the beginning, ignore it
- case ('>') : if (index == valueLine.length()-1) ret.put(key,builder.toString().trim()); break; // if we see a close bracket, and we're at the end, add an entry to our list
- case ('=') : key = builder.toString().trim(); builder = new StringBuilder(); break; // at an equals, copy the key and reset the builder
- case (',') : ret.put(key,builder.toString().trim()); builder = new StringBuilder(); break; // drop the current key value to the return map
- default: builder.append(c); // otherwise simply append to the current string
- }
- }
-
- index++;
- }
-
- // validate the tags against the expected list
- index = 0;
- if ( expectedTagOrder != null ) {
- if ( ret.size() > expectedTagOrder.size() )
- throw new TribbleException.InvalidHeader("unexpected tag count " + ret.size() + " in line " + valueLine);
- for ( String str : ret.keySet() ) {
- if ( !expectedTagOrder.get(index).equals(str) )
- throw new TribbleException.InvalidHeader("Unexpected tag " + str + " in line " + valueLine);
- index++;
- }
- }
- return ret;
- }
-}
-
-class VCF3Parser implements VCFLineParser {
-
- public Map<String, String> parseLine(String valueLine, List<String> expectedTagOrder) {
- // our return map
- Map<String, String> ret = new LinkedHashMap<String, String>();
-
- // a builder to store up characters as we go
- StringBuilder builder = new StringBuilder();
-
- // where are we in the stream of characters?
- int index = 0;
- // where in the expected tag order are we?
- int tagIndex = 0;
-
- // are we inside a quotation? we don't special case ',' then
- boolean inQuote = false;
-
- // a little switch machine to parse out the tags. Regex ended up being really complicated and ugly
- for (char c: valueLine.toCharArray()) {
- switch (c) {
- case ('\"') : inQuote = !inQuote; break; // a quote means we ignore ',' in our strings, keep track of it
- case (',') : if (!inQuote) { ret.put(expectedTagOrder.get(tagIndex++),builder.toString()); builder = new StringBuilder(); break; } // drop the current key value to the return map
- default: builder.append(c); // otherwise simply append to the current string
- }
- index++;
- }
- ret.put(expectedTagOrder.get(tagIndex++),builder.toString());
-
- // validate the tags against the expected list
- index = 0;
- if (tagIndex != expectedTagOrder.size()) throw new IllegalArgumentException("Unexpected tag count " + tagIndex + ", we expected " + expectedTagOrder.size());
- for (String str : ret.keySet()){
- if (!expectedTagOrder.get(index).equals(str)) throw new IllegalArgumentException("Unexpected tag " + str + " in string " + valueLine);
- index++;
- }
- return ret;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineType.java b/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineType.java
deleted file mode 100644
index d2d502a..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFHeaderLineType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-/**
- * the type encodings we use for fields in VCF header lines
- */
-public enum VCFHeaderLineType {
- Integer, Float, String, Character, Flag;
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFHeaderVersion.java b/src/java/org/broadinstitute/variant/vcf/VCFHeaderVersion.java
deleted file mode 100644
index 812b4fa..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFHeaderVersion.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.TribbleException;
-
-/**
- * information that identifies each header version
- */
-public enum VCFHeaderVersion {
- VCF3_2("VCRv3.2","format"),
- VCF3_3("VCFv3.3","fileformat"),
- VCF4_0("VCFv4.0","fileformat"),
- VCF4_1("VCFv4.1","fileformat"),
- VCF4_2("VCFv4.2","fileformat");
-
- private final String versionString;
- private final String formatString;
-
- /**
- * create the enum, privately, using:
- * @param vString the version string
- * @param fString the format string
- */
- VCFHeaderVersion(String vString, String fString) {
- this.versionString = vString;
- this.formatString = fString;
- }
-
- /**
- * get the header version
- * @param version the version string
- * @return a VCFHeaderVersion object
- */
- public static VCFHeaderVersion toHeaderVersion(String version) {
- version = clean(version);
- for (VCFHeaderVersion hv : VCFHeaderVersion.values())
- if (hv.versionString.equals(version))
- return hv;
- return null;
- }
-
- /**
- * are we a valid version string of some type
- * @param version the version string
- * @return true if we're valid of some type, false otherwise
- */
- public static boolean isVersionString(String version){
- return toHeaderVersion(version) != null;
- }
-
- /**
- * are we a valid format string for some type
- * @param format the format string
- * @return true if we're valid of some type, false otherwise
- */
- public static boolean isFormatString(String format){
- format = clean(format);
- for (VCFHeaderVersion hv : VCFHeaderVersion.values())
- if (hv.formatString.equals(format))
- return true;
- return false;
- }
-
- public static VCFHeaderVersion getHeaderVersion(String versionLine) {
- String[] lineFields = versionLine.split("=");
- if ( lineFields.length != 2 || !isFormatString(lineFields[0].substring(2)) )
- throw new TribbleException.InvalidHeader(versionLine + " is not a valid VCF version line");
-
- if ( !isVersionString(lineFields[1]) )
- throw new TribbleException.InvalidHeader(lineFields[1] + " is not a supported version");
-
- return toHeaderVersion(lineFields[1]);
- }
-
- /**
- * Utility function to clean up a VCF header string
- *
- * @param s string
- * @return trimmed version of s
- */
- private static String clean(String s) {
- return s.trim();
- }
-
- /**
- * Determines whether this version is at least as recent as a given version
- *
- * @param target the target version to compare against
- * @return true if this version is at least as recent as the target version, false otherwise
- */
- public boolean isAtLeastAsRecentAs(final VCFHeaderVersion target) {
- switch (target) {
- case VCF4_2:
- return this == VCF4_2;
- case VCF4_1:
- return this == VCF4_1 || this == VCF4_2;
- case VCF4_0:
- return this != VCF3_2 && this != VCF3_3;
- case VCF3_3:
- return this != VCF3_2;
- case VCF3_2:
- default:
- return true;
- }
- }
-
- public String getVersionString() {
- return versionString;
- }
-
- public String getFormatString() {
- return formatString;
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFIDHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFIDHeaderLine.java
deleted file mode 100644
index cdd5440..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFIDHeaderLine.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-/** an interface for ID-based header lines **/
-public interface VCFIDHeaderLine {
- String getID();
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFInfoHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFInfoHeaderLine.java
deleted file mode 100644
index 5fc64ac..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFInfoHeaderLine.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-
-/**
- * @author ebanks
- * <p/>
- * Class VCFInfoHeaderLine
- * <p/>
- * A class representing a key=value entry for INFO fields in the VCF header
- */
-public class VCFInfoHeaderLine extends VCFCompoundHeaderLine {
- public VCFInfoHeaderLine(String name, int count, VCFHeaderLineType type, String description) {
- super(name, count, type, description, SupportedHeaderLineType.INFO);
- }
-
- public VCFInfoHeaderLine(String name, VCFHeaderLineCount count, VCFHeaderLineType type, String description) {
- super(name, count, type, description, SupportedHeaderLineType.INFO);
- }
-
- public VCFInfoHeaderLine(String line, VCFHeaderVersion version) {
- super(line, version, SupportedHeaderLineType.INFO);
- }
-
- // info fields allow flag values
- @Override
- boolean allowFlagValues() {
- return true;
- }
-
- @Override
- public boolean shouldBeAddedToDictionary() {
- return true;
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFRecordCodec.java b/src/java/org/broadinstitute/variant/vcf/VCFRecordCodec.java
deleted file mode 100644
index 15cbf59..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFRecordCodec.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.broadinstitute.variant.vcf;
-
-import net.sf.samtools.util.SortingCollection;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintStream;
-
-/**
- * Writes VariantContext instances to an OutputStream without headers or metadata. For use
- * with SortingCollection ONLY.
- */
-public class VCFRecordCodec implements SortingCollection.Codec<VariantContext> {
-
- final VCFCodec vcfDecoder = new VCFCodec();
-
- final VCFEncoder vcfEncoder;
-
- private PrintStream outputStream = null;
-
- private BufferedReader inputReader = null;
-
- public VCFRecordCodec(final VCFHeader header) {
- this.vcfEncoder = new VCFEncoder(header, false);
- // Explicitly set the version because it's not available in the header itself.
- this.vcfDecoder.setVCFHeader(header, VCFHeaderVersion.VCF4_1);
- }
-
- @Override
- public void setOutputStream(final OutputStream stream) {
- this.outputStream = new PrintStream(stream);
- }
-
- @Override
- public void setInputStream(final InputStream stream) {
- this.inputReader = new BufferedReader(new InputStreamReader(stream));
- }
-
- @Override
- public void encode(final VariantContext context) {
- this.outputStream.println(this.vcfEncoder.encode(context));
- }
-
- @Override
- public VariantContext decode() {
- try {
- final String line;
- return ((line = inputReader.readLine()) != null) ? this.vcfDecoder.decode(line) : null;
- } catch (final IOException ioe) {
- throw new RuntimeException("Could not decode/read a VCF record for a sorting collection: " + ioe.getMessage(), ioe);
- }
- }
-
- @Override
- public VCFRecordCodec clone() {
- return new VCFRecordCodec(this.vcfEncoder.getVCFHeader());
- }
-}
-
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFSimpleHeaderLine.java b/src/java/org/broadinstitute/variant/vcf/VCFSimpleHeaderLine.java
deleted file mode 100644
index 2ee8261..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFSimpleHeaderLine.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * @author ebanks
- * A class representing a key=value entry for simple VCF header types
- */
-public class VCFSimpleHeaderLine extends VCFHeaderLine implements VCFIDHeaderLine {
-
- private String name;
- private Map<String, String> genericFields = new LinkedHashMap<String, String>();
-
- /**
- * create a VCF filter header line
- *
- * @param key the key for this header line
- * @param name the name for this header line
- * @param description description for this header line
- */
- public VCFSimpleHeaderLine(String key, String name, String description) {
- super(key, "");
- Map<String, String> map = new LinkedHashMap<String, String>(1);
- map.put("Description", description);
- initialize(name, map);
- }
-
- /**
- * create a VCF info header line
- *
- * @param line the header line
- * @param version the vcf header version
- * @param key the key for this header line
- * @param expectedTagOrdering the tag ordering expected for this header line
- */
- public VCFSimpleHeaderLine(final String line, final VCFHeaderVersion version, final String key, final List<String> expectedTagOrdering) {
- this(key, VCFHeaderLineTranslator.parseLine(version, line, expectedTagOrdering));
- }
-
- public VCFSimpleHeaderLine(final String key, final Map<String, String> mapping) {
- super(key, "");
- name = mapping.get("ID");
- initialize(name, mapping);
- }
-
- /**
- * Returns the String value associated with the given key. Returns null if there is no value. Key
- * must not be null.
- */
- String getGenericFieldValue(final String key) {
- return this.genericFields.get(key);
- }
-
- protected void initialize(String name, Map<String, String> genericFields) {
- if ( name == null || genericFields == null || genericFields.isEmpty() )
- throw new IllegalArgumentException(String.format("Invalid VCFSimpleHeaderLine: key=%s name=%s", super.getKey(), name));
- if ( name.contains("<") || name.contains(">") )
- throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain angle brackets");
- if ( name.contains("=") )
- throw new IllegalArgumentException("VCFHeaderLine: ID cannot contain an equals sign");
-
- this.name = name;
- this.genericFields.putAll(genericFields);
- }
-
- protected String toStringEncoding() {
- Map<String, Object> map = new LinkedHashMap<String, Object>();
- map.put("ID", name);
- map.putAll(genericFields);
- return getKey() + "=" + VCFHeaderLine.toStringEncoding(map);
- }
-
- public boolean equals(Object o) {
- if ( !(o instanceof VCFSimpleHeaderLine) )
- return false;
- VCFSimpleHeaderLine other = (VCFSimpleHeaderLine)o;
- if ( !name.equals(other.name) || genericFields.size() != other.genericFields.size() )
- return false;
- for ( Map.Entry<String, String> entry : genericFields.entrySet() ) {
- if ( !entry.getValue().equals(other.genericFields.get(entry.getKey())) )
- return false;
- }
-
- return true;
- }
-
- public String getID() {
- return name;
- }
-}
\ No newline at end of file
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFStandardHeaderLines.java b/src/java/org/broadinstitute/variant/vcf/VCFStandardHeaderLines.java
deleted file mode 100644
index d289c67..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFStandardHeaderLines.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import com.google.java.contract.Ensures;
-import com.google.java.contract.Requires;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.utils.GeneralUtils;
-
-import java.util.*;
-
-/**
- * Manages header lines for standard VCF INFO and FORMAT fields
- *
- * Provides simple mechanisms for registering standard lines,
- * looking them up, and adding them to headers
- *
- * @author Mark DePristo
- * @since 6/12
- */
-public class VCFStandardHeaderLines {
- /**
- * Enabling this causes us to repair header lines even if only their descriptions differ
- */
- private final static boolean REPAIR_BAD_DESCRIPTIONS = false;
- private static Standards<VCFFormatHeaderLine> formatStandards = new Standards<VCFFormatHeaderLine>();
- private static Standards<VCFInfoHeaderLine> infoStandards = new Standards<VCFInfoHeaderLine>();
-
- /**
- * Walks over the VCF header and repairs the standard VCF header lines in it, returning a freshly
- * allocated VCFHeader with standard VCF header lines repaired as necessary
- *
- * @param header
- * @return
- */
- @Requires("header != null")
- @Ensures("result != null")
- public static VCFHeader repairStandardHeaderLines(final VCFHeader header) {
- final Set<VCFHeaderLine> newLines = new LinkedHashSet<VCFHeaderLine>(header.getMetaDataInInputOrder().size());
- for ( VCFHeaderLine line : header.getMetaDataInInputOrder() ) {
- if ( line instanceof VCFFormatHeaderLine ) {
- line = formatStandards.repair((VCFFormatHeaderLine) line);
- } else if ( line instanceof VCFInfoHeaderLine) {
- line = infoStandards.repair((VCFInfoHeaderLine) line);
- }
-
- newLines.add(line);
- }
-
- return new VCFHeader(newLines, header.getGenotypeSamples());
- }
-
- /**
- * Adds header lines for each of the format fields in IDs to header, returning the set of
- * IDs without standard descriptions, unless throwErrorForMissing is true, in which
- * case this situation results in a TribbleException
- *
- * @param IDs
- * @return
- */
- public static Set<String> addStandardFormatLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final Collection<String> IDs) {
- return formatStandards.addToHeader(headerLines, IDs, throwErrorForMissing);
- }
-
- /**
- * @see #addStandardFormatLines(java.util.Set, boolean, java.util.Collection)
- *
- * @param headerLines
- * @param throwErrorForMissing
- * @param IDs
- * @return
- */
- public static Set<String> addStandardFormatLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final String ... IDs) {
- return addStandardFormatLines(headerLines, throwErrorForMissing, Arrays.asList(IDs));
- }
-
- /**
- * Returns the standard format line for ID. If none exists, return null or throw an exception, depending
- * on throwErrorForMissing
- *
- * @param ID
- * @param throwErrorForMissing
- * @return
- */
- public static VCFFormatHeaderLine getFormatLine(final String ID, final boolean throwErrorForMissing) {
- return formatStandards.get(ID, throwErrorForMissing);
- }
-
- /**
- * Returns the standard format line for ID. If none exists throw an exception
- *
- * @param ID
- * @return
- */
- public static VCFFormatHeaderLine getFormatLine(final String ID) {
- return formatStandards.get(ID, true);
- }
-
- private static void registerStandard(final VCFFormatHeaderLine line) {
- formatStandards.add(line);
- }
-
- /**
- * Adds header lines for each of the info fields in IDs to header, returning the set of
- * IDs without standard descriptions, unless throwErrorForMissing is true, in which
- * case this situation results in a TribbleException
- *
- * @param IDs
- * @return
- */
- public static Set<String> addStandardInfoLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final Collection<String> IDs) {
- return infoStandards.addToHeader(headerLines, IDs, throwErrorForMissing);
- }
-
- /**
- * @see #addStandardFormatLines(java.util.Set, boolean, java.util.Collection)
- *
- * @param IDs
- * @return
- */
- public static Set<String> addStandardInfoLines(final Set<VCFHeaderLine> headerLines, final boolean throwErrorForMissing, final String ... IDs) {
- return addStandardInfoLines(headerLines, throwErrorForMissing, Arrays.asList(IDs));
- }
-
- /**
- * Returns the standard info line for ID. If none exists, return null or throw an exception, depending
- * on throwErrorForMissing
- *
- * @param ID
- * @param throwErrorForMissing
- * @return
- */
- public static VCFInfoHeaderLine getInfoLine(final String ID, final boolean throwErrorForMissing) {
- return infoStandards.get(ID, throwErrorForMissing);
- }
-
- /**
- * Returns the standard info line for ID. If none exists throw an exception
- *
- * @param ID
- * @return
- */
- public static VCFInfoHeaderLine getInfoLine(final String ID) {
- return getInfoLine(ID, true);
- }
-
- private static void registerStandard(final VCFInfoHeaderLine line) {
- infoStandards.add(line);
- }
-
-
- //
- // VCF header line constants
- //
- static {
- // FORMAT lines
- registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_KEY, 1, VCFHeaderLineType.String, "Genotype"));
- registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_QUALITY_KEY, 1, VCFHeaderLineType.Integer, "Genotype Quality"));
- registerStandard(new VCFFormatHeaderLine(VCFConstants.DEPTH_KEY, 1, VCFHeaderLineType.Integer, "Approximate read depth (reads with MQ=255 or with bad mates are filtered)"));
- registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_PL_KEY, VCFHeaderLineCount.G, VCFHeaderLineType.Integer, "Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification"));
- registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_ALLELE_DEPTHS, VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "Allelic depths for the ref and alt alleles in the order listed"));
- registerStandard(new VCFFormatHeaderLine(VCFConstants.GENOTYPE_FILTER_KEY, 1, VCFHeaderLineType.String, "Genotype-level filter"));
-
- // INFO lines
- registerStandard(new VCFInfoHeaderLine(VCFConstants.END_KEY, 1, VCFHeaderLineType.Integer, "Stop position of the interval"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.MLE_ALLELE_COUNT_KEY, VCFHeaderLineCount.A, VCFHeaderLineType.Integer, "Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.MLE_ALLELE_FREQUENCY_KEY, VCFHeaderLineCount.A, VCFHeaderLineType.Float, "Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.DOWNSAMPLED_KEY, 0, VCFHeaderLineType.Flag, "Were any of the samples downsampled?"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.DBSNP_KEY, 0, VCFHeaderLineType.Flag, "dbSNP Membership"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.DEPTH_KEY, 1, VCFHeaderLineType.Integer, "Approximate read depth; some reads may have been filtered"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.STRAND_BIAS_KEY, 1, VCFHeaderLineType.Float, "Strand Bias"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.ALLELE_FREQUENCY_KEY, VCFHeaderLineCount.A, VCFHeaderLineType.Float, "Allele Frequency, for each ALT allele, in the same order as listed"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.ALLELE_COUNT_KEY, VCFHeaderLineCount.A, VCFHeaderLineType.Integer, "Allele count in genotypes, for each ALT allele, in the same order as listed"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.ALLELE_NUMBER_KEY, 1, VCFHeaderLineType.Integer, "Total number of alleles in called genotypes"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.MAPPING_QUALITY_ZERO_KEY, 1, VCFHeaderLineType.Integer, "Total Mapping Quality Zero Reads"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.RMS_MAPPING_QUALITY_KEY, 1, VCFHeaderLineType.Float, "RMS Mapping Quality"));
- registerStandard(new VCFInfoHeaderLine(VCFConstants.SOMATIC_KEY, 0, VCFHeaderLineType.Flag, "Somatic event"));
- }
-
- private static class Standards<T extends VCFCompoundHeaderLine> {
- private final Map<String, T> standards = new HashMap<String, T>();
-
- @Requires("line != null")
- @Ensures({"result != null", "result.getID().equals(line.getID())"})
- public T repair(final T line) {
- final T standard = get(line.getID(), false);
- if ( standard != null ) {
- final boolean badCountType = line.getCountType() != standard.getCountType();
- final boolean badCount = line.isFixedCount() && ! badCountType && line.getCount() != standard.getCount();
- final boolean badType = line.getType() != standard.getType();
- final boolean badDesc = ! line.getDescription().equals(standard.getDescription());
- final boolean needsRepair = badCountType || badCount || badType || (REPAIR_BAD_DESCRIPTIONS && badDesc);
-
- if ( needsRepair ) {
- if ( GeneralUtils.DEBUG_MODE_ENABLED ) {
- System.err.println("Repairing standard header line for field " + line.getID() + " because"
- + (badCountType ? " -- count types disagree; header has " + line.getCountType() + " but standard is " + standard.getCountType() : "")
- + (badType ? " -- type disagree; header has " + line.getType() + " but standard is " + standard.getType() : "")
- + (badCount ? " -- counts disagree; header has " + line.getCount() + " but standard is " + standard.getCount() : "")
- + (badDesc ? " -- descriptions disagree; header has '" + line.getDescription() + "' but standard is '" + standard.getDescription() + "'": ""));
- }
- return standard;
- } else
- return line;
- } else
- return line;
- }
-
- @Requires("headerLines != null")
- @Ensures({"result != null", "result.isEmpty() || ! throwErrorForMissing", "IDs.containsAll(result)"})
- public Set<String> addToHeader(final Set<VCFHeaderLine> headerLines, final Collection<String> IDs, final boolean throwErrorForMissing) {
- final Set<String> missing = new HashSet<String>();
- for ( final String ID : IDs ) {
- final T line = get(ID, throwErrorForMissing);
- if ( line == null )
- missing.add(ID);
- else
- headerLines.add(line);
- }
-
- return missing;
- }
-
- @Requires("line != null")
- @Ensures({"standards.containsKey(line.getID())"})
- public void add(final T line) {
- if ( standards.containsKey(line.getID()) )
- throw new TribbleException("Attempting to add multiple standard header lines for ID " + line.getID());
- standards.put(line.getID(), line);
- }
-
- @Requires("ID != null")
- @Ensures({"result != null || ! throwErrorForMissing"})
- public T get(final String ID, final boolean throwErrorForMissing) {
- final T x = standards.get(ID);
- if ( throwErrorForMissing && x == null )
- throw new TribbleException("Couldn't find a standard VCF header line for field " + ID);
- return x;
- }
- }
-}
diff --git a/src/java/org/broadinstitute/variant/vcf/VCFUtils.java b/src/java/org/broadinstitute/variant/vcf/VCFUtils.java
deleted file mode 100644
index 815c323..0000000
--- a/src/java/org/broadinstitute/variant/vcf/VCFUtils.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import org.broadinstitute.variant.utils.GeneralUtils;
-
-import java.io.File;
-import java.util.*;
-
-public class VCFUtils {
-
- public static Set<VCFHeaderLine> smartMergeHeaders(Collection<VCFHeader> headers, boolean emitWarnings) throws IllegalStateException {
- HashMap<String, VCFHeaderLine> map = new HashMap<String, VCFHeaderLine>(); // from KEY.NAME -> line
- HeaderConflictWarner conflictWarner = new HeaderConflictWarner(emitWarnings);
-
- // todo -- needs to remove all version headers from sources and add its own VCF version line
- for ( VCFHeader source : headers ) {
- //System.out.printf("Merging in header %s%n", source);
- for ( VCFHeaderLine line : source.getMetaDataInSortedOrder()) {
-
- String key = line.getKey();
- if ( line instanceof VCFIDHeaderLine )
- key = key + "-" + ((VCFIDHeaderLine)line).getID();
-
- if ( map.containsKey(key) ) {
- VCFHeaderLine other = map.get(key);
- if ( line.equals(other) ) {
- // continue;
- } else if ( ! line.getClass().equals(other.getClass()) ) {
- throw new IllegalStateException("Incompatible header types: " + line + " " + other );
- } else if ( line instanceof VCFFilterHeaderLine ) {
- String lineName = ((VCFFilterHeaderLine) line).getID();
- String otherName = ((VCFFilterHeaderLine) other).getID();
- if ( ! lineName.equals(otherName) )
- throw new IllegalStateException("Incompatible header types: " + line + " " + other );
- } else if ( line instanceof VCFCompoundHeaderLine ) {
- VCFCompoundHeaderLine compLine = (VCFCompoundHeaderLine)line;
- VCFCompoundHeaderLine compOther = (VCFCompoundHeaderLine)other;
-
- // if the names are the same, but the values are different, we need to quit
- if (! (compLine).equalsExcludingDescription(compOther) ) {
- if ( compLine.getType().equals(compOther.getType()) ) {
- // The Number entry is an Integer that describes the number of values that can be
- // included with the INFO field. For example, if the INFO field contains a single
- // number, then this value should be 1. However, if the INFO field describes a pair
- // of numbers, then this value should be 2 and so on. If the number of possible
- // values varies, is unknown, or is unbounded, then this value should be '.'.
- conflictWarner.warn(line, "Promoting header field Number to . due to number differences in header lines: " + line + " " + other);
- compOther.setNumberToUnbounded();
- } else if ( compLine.getType() == VCFHeaderLineType.Integer && compOther.getType() == VCFHeaderLineType.Float ) {
- // promote key to Float
- conflictWarner.warn(line, "Promoting Integer to Float in header: " + compOther);
- map.put(key, compOther);
- } else if ( compLine.getType() == VCFHeaderLineType.Float && compOther.getType() == VCFHeaderLineType.Integer ) {
- // promote key to Float
- conflictWarner.warn(line, "Promoting Integer to Float in header: " + compOther);
- } else {
- throw new IllegalStateException("Incompatible header types, collision between these two types: " + line + " " + other );
- }
- }
- if ( ! compLine.getDescription().equals(compOther.getDescription()) )
- conflictWarner.warn(line, "Allowing unequal description fields through: keeping " + compOther + " excluding " + compLine);
- } else {
- // we are not equal, but we're not anything special either
- conflictWarner.warn(line, "Ignoring header line already in map: this header line = " + line + " already present header = " + other);
- }
- } else {
- map.put(key, line);
- //System.out.printf("Adding header line %s%n", line);
- }
- }
- }
-
- return new HashSet<VCFHeaderLine>(map.values());
- }
-
- /**
- * Add / replace the contig header lines in the VCFHeader with the in the reference file and master reference dictionary
- *
- * @param oldHeader the header to update
- * @param referenceFile the file path to the reference sequence used to generate this vcf
- * @param refDict the SAM formatted reference sequence dictionary
- */
- public static VCFHeader withUpdatedContigs(final VCFHeader oldHeader, final File referenceFile, final SAMSequenceDictionary refDict) {
- return new VCFHeader(withUpdatedContigsAsLines(oldHeader.getMetaDataInInputOrder(), referenceFile, refDict), oldHeader.getGenotypeSamples());
- }
-
- public static Set<VCFHeaderLine> withUpdatedContigsAsLines(final Set<VCFHeaderLine> oldLines, final File referenceFile, final SAMSequenceDictionary refDict) {
- return withUpdatedContigsAsLines(oldLines, referenceFile, refDict, false);
- }
-
- public static Set<VCFHeaderLine> withUpdatedContigsAsLines(final Set<VCFHeaderLine> oldLines, final File referenceFile, final SAMSequenceDictionary refDict, boolean referenceNameOnly) {
- final Set<VCFHeaderLine> lines = new LinkedHashSet<VCFHeaderLine>(oldLines.size());
-
- for ( final VCFHeaderLine line : oldLines ) {
- if ( line instanceof VCFContigHeaderLine )
- continue; // skip old contig lines
- if ( line.getKey().equals(VCFHeader.REFERENCE_KEY) )
- continue; // skip the old reference key
- lines.add(line);
- }
-
- for ( final VCFHeaderLine contigLine : makeContigHeaderLines(refDict, referenceFile) )
- lines.add(contigLine);
-
- String referenceValue;
- if (referenceFile != null) {
- if (referenceNameOnly) {
- int extensionStart = referenceFile.getName().lastIndexOf(".");
- referenceValue = extensionStart == -1 ? referenceFile.getName() : referenceFile.getName().substring(0, extensionStart);
- }
- else {
- referenceValue = "file://" + referenceFile.getAbsolutePath();
- }
- lines.add(new VCFHeaderLine(VCFHeader.REFERENCE_KEY, referenceValue));
- }
- return lines;
- }
-
- /**
- * Create VCFHeaderLines for each refDict entry, and optionally the assembly if referenceFile != null
- * @param refDict reference dictionary
- * @param referenceFile for assembly name. May be null
- * @return list of vcf contig header lines
- */
- public static List<VCFContigHeaderLine> makeContigHeaderLines(final SAMSequenceDictionary refDict,
- final File referenceFile) {
- final List<VCFContigHeaderLine> lines = new ArrayList<VCFContigHeaderLine>();
- final String assembly = referenceFile != null ? getReferenceAssembly(referenceFile.getName()) : null;
- for ( SAMSequenceRecord contig : refDict.getSequences() )
- lines.add(makeContigHeaderLine(contig, assembly));
- return lines;
- }
-
- private static VCFContigHeaderLine makeContigHeaderLine(final SAMSequenceRecord contig, final String assembly) {
- final Map<String, String> map = new LinkedHashMap<String, String>(3);
- map.put("ID", contig.getSequenceName());
- map.put("length", String.valueOf(contig.getSequenceLength()));
- if ( assembly != null ) map.put("assembly", assembly);
- return new VCFContigHeaderLine(map, contig.getSequenceIndex());
- }
-
- private static String getReferenceAssembly(final String refPath) {
- // This doesn't need to be perfect as it's not a required VCF header line, but we might as well give it a shot
- String assembly = null;
- if (refPath.contains("b37") || refPath.contains("v37"))
- assembly = "b37";
- else if (refPath.contains("b36"))
- assembly = "b36";
- else if (refPath.contains("hg18"))
- assembly = "hg18";
- else if (refPath.contains("hg19"))
- assembly = "hg19";
- return assembly;
- }
-
- /** Only displays a warning if warnings are enabled and an identical warning hasn't been already issued */
- private static final class HeaderConflictWarner {
- boolean emitWarnings;
- Set<String> alreadyIssued = new HashSet<String>();
-
- private HeaderConflictWarner( final boolean emitWarnings ) {
- this.emitWarnings = emitWarnings;
- }
-
- public void warn(final VCFHeaderLine line, final String msg) {
- if ( GeneralUtils.DEBUG_MODE_ENABLED && emitWarnings && ! alreadyIssued.contains(line.getKey()) ) {
- alreadyIssued.add(line.getKey());
- System.err.println(msg);
- }
- }
- }
-}
diff --git a/src/java/picard/PicardException.java b/src/java/picard/PicardException.java
new file mode 100644
index 0000000..d08ea6b
--- /dev/null
+++ b/src/java/picard/PicardException.java
@@ -0,0 +1,41 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard;
+
+/**
+ * Basic Picard runtime exception that, for now, does nothing much
+ *
+ * @author Kathleen Tibbetts
+ */
+public class PicardException extends RuntimeException
+{
+ public PicardException(final String message) {
+ super(message);
+ }
+
+ public PicardException(final String message, final Throwable throwable) {
+ super(message, throwable);
+ }
+
+}
diff --git a/src/java/picard/Test.java b/src/java/picard/Test.java
new file mode 100644
index 0000000..c0ac40e
--- /dev/null
+++ b/src/java/picard/Test.java
@@ -0,0 +1,56 @@
+package picard;
+
+import htsjdk.samtools.util.StopWatch;
+import htsjdk.samtools.util.StringUtil;
+
+import java.util.StringTokenizer;
+
+/**
+ *
+ */
+public class Test {
+ private final String text = "C0A69ACXX111213:6:1101:10000:144257\t83\t5\t128984606\t60\t76M\t=\t128984542\t-140\tAGTGTTAGAACTTCCTCCCCAAAGCATATACTTCAGTGGCAAGCTGTCCTGGATGAAGGTATGACCAACCAGATCA\t at FFFEECC>EFHBJIGIFGIEIJJJIHED<IEHIGIIJIIIGJIGJIIIIIJGGCJIIGIHHHBHGHFFDFFFC@@\tXT:A:U\tNM:i:0\tSM:i:37\tAM:i:37\tX0:i:1\tX1:i:0\tXM:i:0\tXO:i:0\tXG:i:0\tMD:Z:76";
+
+ public static void main(String[] args) {
+ new Test().run();
+ }
+
+ public void run() {
+ final int ITERATIONS = 1000000;
+ final String[] fields = new String[10000];
+ final StopWatch watch = new StopWatch();
+
+ watch.start();
+ for (int i=0; i<ITERATIONS; ++i) {
+ if (StringUtil.split(text, fields, '\t') > 100) {
+ System.out.println("Mama Mia that's a lot of tokens!!");
+ }
+ }
+ watch.stop();
+ System.out.println("StringUtil.split() took " + watch.getElapsedTime());
+ watch.reset();
+
+ watch.start();
+ for (int i=0; i<ITERATIONS; ++i) {
+ if (split(text, fields, "\t") > 100) {
+ System.out.println("Mama Mia that's a lot of tokens!!");
+ }
+ }
+ watch.stop();
+ System.out.println("StringTokenizer took " + watch.getElapsedTime());
+ }
+
+ public int split(final String s, final String[] tokens, final String token) {
+ final StringTokenizer tokenizer = new StringTokenizer(s, token, false);
+ int i=0;
+ while (tokenizer.hasMoreTokens()) {
+ tokens[i++] = tokenizer.nextToken();
+ }
+
+ return i;
+ }
+
+
+
+
+}
diff --git a/src/java/picard/analysis/AlignmentSummaryMetrics.java b/src/java/picard/analysis/AlignmentSummaryMetrics.java
new file mode 100644
index 0000000..4a7db22
--- /dev/null
+++ b/src/java/picard/analysis/AlignmentSummaryMetrics.java
@@ -0,0 +1,162 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * High level metrics about the alignment of reads within a SAM file, produced by
+ * the CollectAlignmentSummaryMetrics program and usually stored in a file with
+ * the extension ".alignment_summary_metrics".
+ */
+public class AlignmentSummaryMetrics extends MultilevelMetrics {
+ public enum Category { UNPAIRED, FIRST_OF_PAIR, SECOND_OF_PAIR, PAIR }
+
+ /**
+ * One of either UNPAIRED (for a fragment run), FIRST_OF_PAIR when metrics are for only the
+ * first read in a paired run, SECOND_OF_PAIR when the metrics are for only the second read
+ * in a paired run or PAIR when the metrics are aggregated for both first and second reads
+ * in a pair.
+ */
+ public Category CATEGORY;
+
+ /**
+ * The total number of reads including all PF and non-PF reads. When CATEGORY equals PAIR
+ * this value will be 2x the number of clusters.
+ */
+ public long TOTAL_READS;
+
+ /** The number of PF reads where PF is defined as passing Illumina's filter. */
+ public long PF_READS;
+
+ /** The percentage of reads that are PF (PF_READS / TOTAL_READS) */
+ public double PCT_PF_READS;
+
+ /**
+ * The number of PF reads that are marked as noise reads. A noise read is one which is composed
+ * entirely of A bases and/or N bases. These reads are marked as they are usually artifactual and
+ * are of no use in downstream analysis.
+ */
+ public long PF_NOISE_READS;
+
+ /**
+ * The number of PF reads that were aligned to the reference sequence. This includes reads that
+ * aligned with low quality (i.e. their alignments are ambiguous).
+ */
+ public long PF_READS_ALIGNED;
+
+ /**
+ * The percentage of PF reads that aligned to the reference sequence. PF_READS_ALIGNED / PF_READS
+ */
+ public double PCT_PF_READS_ALIGNED;
+
+ /**
+ * The total number of aligned bases, in all mapped PF reads, that are aligned to the reference sequence.
+ */
+ public long PF_ALIGNED_BASES;
+
+ /**
+ * The number of PF reads that were aligned to the reference sequence with a mapping quality of
+ * Q20 or higher signifying that the aligner estimates a 1/100 (or smaller) chance that the
+ * alignment is wrong.
+ */
+ public long PF_HQ_ALIGNED_READS;
+
+ /**
+ * The number of bases aligned to the reference sequence in reads that were mapped at high
+ * quality. Will usually approximate PF_HQ_ALIGNED_READS * READ_LENGTH but may differ when
+ * either mixed read lengths are present or many reads are aligned with gaps.
+ */
+ public long PF_HQ_ALIGNED_BASES;
+
+ /**
+ * The subset of PF_HQ_ALIGNED_BASES where the base call quality was Q20 or higher.
+ */
+ public long PF_HQ_ALIGNED_Q20_BASES;
+
+ /**
+ * The median number of mismatches versus the reference sequence in reads that were aligned
+ * to the reference at high quality (i.e. PF_HQ_ALIGNED READS).
+ */
+ public double PF_HQ_MEDIAN_MISMATCHES;
+
+ /**
+ * The rate of bases mismatching the reference for all bases aligned to the reference sequence.
+ */
+ public double PF_MISMATCH_RATE;
+
+ /**
+ * The percentage of bases that mismatch the reference in PF HQ aligned reads.
+ */
+ public double PF_HQ_ERROR_RATE;
+
+ /**
+ * The number of insertion and deletion events per 100 aligned bases. Uses the number of events
+ * as the numerator, not the number of inserted or deleted bases.
+ */
+ public double PF_INDEL_RATE;
+
+ /**
+ * The mean read length of the set of reads examined. When looking at the data for a single lane with
+ * equal length reads this number is just the read length. When looking at data for merged lanes with
+ * differing read lengths this is the mean read length of all reads.
+ */
+ public double MEAN_READ_LENGTH;
+
+ /**
+ * The number of aligned reads whose mate pair was also aligned to the reference.
+ */
+ public long READS_ALIGNED_IN_PAIRS;
+
+ /**
+ * The percentage of reads whose mate pair was also aligned to the reference.
+ * READS_ALIGNED_IN_PAIRS / PF_READS_ALIGNED
+ */
+ public double PCT_READS_ALIGNED_IN_PAIRS;
+
+ /**
+ * The number of instrument cycles in which 80% or more of base calls were no-calls.
+ */
+ public long BAD_CYCLES;
+
+ /**
+ * The number of PF reads aligned to the positive strand of the genome divided by the number of
+ * PF reads aligned to the genome.
+ */
+ public double STRAND_BALANCE;
+
+ /**
+ * The percentage of reads that map outside of a maximum insert size (usually 100kb) or that have
+ * the two ends mapping to different chromosomes.
+ */
+ public double PCT_CHIMERAS;
+
+ /**
+ * The percentage of PF reads that are unaligned and match to a known adapter sequence right from the
+ * start of the read.
+ */
+ public double PCT_ADAPTER;
+
+}
diff --git a/src/java/picard/analysis/AlignmentSummaryMetricsCollector.java b/src/java/picard/analysis/AlignmentSummaryMetricsCollector.java
new file mode 100644
index 0000000..7f5327d
--- /dev/null
+++ b/src/java/picard/analysis/AlignmentSummaryMetricsCollector.java
@@ -0,0 +1,390 @@
+package picard.analysis;
+
+import htsjdk.samtools.AlignmentBlock;
+import htsjdk.samtools.BAMRecord;
+import htsjdk.samtools.CigarElement;
+import htsjdk.samtools.CigarOperator;
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.CoordMath;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.metrics.PerUnitMetricCollector;
+import picard.metrics.SAMRecordAndReference;
+import picard.metrics.SAMRecordAndReferenceMultiLevelCollector;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class AlignmentSummaryMetricsCollector extends SAMRecordAndReferenceMultiLevelCollector<AlignmentSummaryMetrics, Comparable<?>> {
+ // If we have a reference sequence, collect metrics on how well we aligned to it
+ private final boolean doRefMetrics;
+
+ //the adapter sequences converted to byte arrays
+ private final byte[][] adapterKmers;
+
+ //A list of Strings representing the sequence of bases in an adapter
+ private final List<String> adapterSequence;
+
+ //Paired end reads above this insert size will be considered chimeric along with inter-chromosomal pairs.
+ private final int maxInsertSize;
+
+
+ //Whether the SAM or BAM file consists of bisulfite sequenced reads.
+ private final boolean isBisulfiteSequenced;
+
+ //The minimum mapping quality a base has to meet in order to be considered high quality
+ private final int MAPPING_QUALITY_THRESOLD = 20;
+
+ //The minimum quality a base has to meet in order to be consider hq_20
+ private final static int BASE_QUALITY_THRESHOLD = 20;
+
+ //The number of bases to check in order to map a read to an adapter
+ private static final int ADAPTER_MATCH_LENGTH = 16;
+
+ // The maximum number of mismatches a read can have and still be considered as matching an adapter
+ private static final int MAX_ADAPTER_ERRORS = 1;
+
+ public AlignmentSummaryMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
+ final boolean doRefMetrics, final List<String> adapterSequence, final int maxInsertSize, boolean isBisulfiteSequenced) {
+ this.doRefMetrics = doRefMetrics;
+ this.adapterSequence = adapterSequence;
+ this.adapterKmers = prepareAdapterSequences();
+ this.maxInsertSize = maxInsertSize;
+ this.isBisulfiteSequenced = isBisulfiteSequenced;
+ setup(accumulationLevels, samRgRecords);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<AlignmentSummaryMetrics, Comparable<?>, SAMRecordAndReference> makeChildCollector(String sample, String library, String readGroup) {
+ return new GroupAlignmentSummaryMetricsPerUnitMetricCollector(sample, library, readGroup);
+ }
+
+ @Override
+ public void acceptRecord(final SAMRecord rec, final ReferenceSequence ref) {
+ if (!rec.isSecondaryOrSupplementary()) {
+ super.acceptRecord(rec, ref);
+ }
+ }
+
+ /** Converts the supplied adapter sequences to byte arrays in both fwd and rc. */
+ private byte [][] prepareAdapterSequences() {
+ final Set<String> kmers = new HashSet<String>();
+
+ // Make a set of all kmers of adapterMatchLength
+ for (final String seq : adapterSequence) {
+ for (int i=0; i<=seq.length() - ADAPTER_MATCH_LENGTH; ++i) {
+ final String kmer = seq.substring(i, i+ADAPTER_MATCH_LENGTH).toUpperCase();
+
+ int ns = 0;
+ for (final char ch : kmer.toCharArray()) if (ch == 'N') ++ns;
+ if (ns <= MAX_ADAPTER_ERRORS) {
+ kmers.add(kmer);
+ kmers.add(SequenceUtil.reverseComplement(kmer));
+ }
+ }
+ }
+
+ // Make an array of byte[] for the kmers
+ final byte [][] adapterKmers = new byte[kmers.size()][];
+ int i=0;
+ for (final String kmer : kmers) {
+ adapterKmers[i++] = StringUtil.stringToBytes(kmer);
+ }
+ return adapterKmers;
+ }
+
+ /**
+ * Checks the first ADAPTER_MATCH_LENGTH bases of the read against known adapter sequences and returns
+ * true if the read matches an adapter sequence with MAX_ADAPTER_ERRORS mismsatches or fewer.
+ *
+ * @param read the basecalls for the read in the order and orientation the machine read them
+ * @return true if the read matches an adapter and false otherwise
+ */
+ private boolean isAdapterSequence(final byte[] read) {
+ if (read.length < ADAPTER_MATCH_LENGTH) return false;
+
+ for (final byte[] adapter : adapterKmers) {
+ int errors = 0;
+
+ for (int i=0; i<adapter.length; ++i) {
+ if (read[i] != adapter[i]) {
+ if (++errors > MAX_ADAPTER_ERRORS) break;
+ }
+ }
+
+ if (errors <= MAX_ADAPTER_ERRORS) return true;
+ }
+
+ return false;
+ }
+
+ private class GroupAlignmentSummaryMetricsPerUnitMetricCollector implements PerUnitMetricCollector<AlignmentSummaryMetrics, Comparable<?>, SAMRecordAndReference> {
+ final IndividualAlignmentSummaryMetricsCollector unpairedCollector;
+ final IndividualAlignmentSummaryMetricsCollector firstOfPairCollector;
+ final IndividualAlignmentSummaryMetricsCollector secondOfPairCollector;
+ final IndividualAlignmentSummaryMetricsCollector pairCollector;
+ final String sample;
+ final String library;
+ final String readGroup;
+
+ public GroupAlignmentSummaryMetricsPerUnitMetricCollector(final String sample, final String library, final String readGroup) {
+ this.sample = sample;
+ this.library = library;
+ this.readGroup = readGroup;
+ unpairedCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.UNPAIRED, sample, library, readGroup);
+ firstOfPairCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.FIRST_OF_PAIR, sample, library, readGroup);
+ secondOfPairCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.SECOND_OF_PAIR, sample, library, readGroup);
+ pairCollector = new IndividualAlignmentSummaryMetricsCollector(AlignmentSummaryMetrics.Category.PAIR, sample, library, readGroup);
+ }
+
+ public void acceptRecord(final SAMRecordAndReference args) {
+ final SAMRecord rec = args.getSamRecord();
+ final ReferenceSequence ref = args.getReferenceSequence();
+
+ if (rec.getReadPairedFlag()) {
+ if (rec.getFirstOfPairFlag()) {
+ firstOfPairCollector.addRecord(rec, ref);
+ }
+ else {
+ secondOfPairCollector.addRecord(rec, ref);
+ }
+
+ pairCollector.addRecord(rec, ref);
+ }
+ else {
+ unpairedCollector.addRecord(rec, ref);
+ }
+ }
+
+ @Override
+ public void finish() {
+ // Let the collectors do any summary computations etc.
+ unpairedCollector.onComplete();
+ firstOfPairCollector.onComplete();
+ secondOfPairCollector.onComplete();
+ pairCollector.onComplete();
+ }
+
+ @Override
+ public void addMetricsToFile(final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> file) {
+ if (firstOfPairCollector.getMetrics().TOTAL_READS > 0) {
+ // override how bad cycle is determined for paired reads, it should be
+ // the sum of first and second reads
+ pairCollector.getMetrics().BAD_CYCLES = firstOfPairCollector.getMetrics().BAD_CYCLES +
+ secondOfPairCollector.getMetrics().BAD_CYCLES;
+
+ file.addMetric(firstOfPairCollector.getMetrics());
+ file.addMetric(secondOfPairCollector.getMetrics());
+ file.addMetric(pairCollector.getMetrics());
+ }
+
+ //if there are no reads in any category then we will returned an unpaired alignment summary metric with all zero values
+ if (unpairedCollector.getMetrics().TOTAL_READS > 0 || firstOfPairCollector.getMetrics().TOTAL_READS == 0) {
+ file.addMetric(unpairedCollector.getMetrics());
+ }
+ }
+
+ /**
+ * Class that counts reads that match various conditions
+ */
+ private class IndividualAlignmentSummaryMetricsCollector {
+ private long numPositiveStrand = 0;
+ private final Histogram<Integer> readLengthHistogram = new Histogram<Integer>();
+ private AlignmentSummaryMetrics metrics;
+ private long chimeras;
+ private long chimerasDenominator;
+ private long adapterReads;
+ private long indels;
+
+ private long nonBisulfiteAlignedBases = 0;
+ private long hqNonBisulfiteAlignedBases = 0;
+ private final Histogram<Long> mismatchHistogram = new Histogram<Long>();
+ private final Histogram<Long> hqMismatchHistogram = new Histogram<Long>();
+ private final Histogram<Integer> badCycleHistogram = new Histogram<Integer>();
+
+ public IndividualAlignmentSummaryMetricsCollector(final AlignmentSummaryMetrics.Category pairingCategory,
+ final String sample,
+ final String library,
+ final String readGroup) {
+ metrics = new AlignmentSummaryMetrics();
+ metrics.CATEGORY = pairingCategory;
+ metrics.SAMPLE = sample;
+ metrics.LIBRARY = library;
+ metrics.READ_GROUP = readGroup;
+ }
+
+ public void addRecord(final SAMRecord record, final ReferenceSequence ref) {
+ if (record.isSecondaryOrSupplementary()) {
+ // only want 1 count per read so skip non primary alignments
+ return;
+ }
+
+ collectReadData(record, ref);
+ collectQualityData(record, ref);
+ }
+
+ public void onComplete() {
+ //summarize read data
+ if (metrics.TOTAL_READS > 0)
+ {
+ metrics.PCT_PF_READS = (double) metrics.PF_READS / (double) metrics.TOTAL_READS;
+ metrics.PCT_ADAPTER = this.adapterReads / (double) metrics.PF_READS;
+ metrics.MEAN_READ_LENGTH = readLengthHistogram.getMean();
+
+ //Calculate BAD_CYCLES
+ metrics.BAD_CYCLES = 0;
+ for (final Histogram<Integer>.Bin cycleBin : badCycleHistogram.values()) {
+ final double badCyclePercentage = cycleBin.getValue() / metrics.TOTAL_READS;
+ if (badCyclePercentage >= .8) {
+ metrics.BAD_CYCLES++;
+ }
+ }
+
+ if(doRefMetrics) {
+ if (metrics.PF_READS > 0) metrics.PCT_PF_READS_ALIGNED = (double) metrics.PF_READS_ALIGNED / (double) metrics.PF_READS;
+ if (metrics.PF_READS_ALIGNED > 0) metrics.PCT_READS_ALIGNED_IN_PAIRS = (double) metrics.READS_ALIGNED_IN_PAIRS/ (double) metrics.PF_READS_ALIGNED;
+ if (metrics.PF_READS_ALIGNED > 0) metrics.STRAND_BALANCE = numPositiveStrand / (double) metrics.PF_READS_ALIGNED;
+ if (this.chimerasDenominator > 0) metrics.PCT_CHIMERAS = this.chimeras / (double) this.chimerasDenominator;
+
+ if (nonBisulfiteAlignedBases > 0) metrics.PF_MISMATCH_RATE = mismatchHistogram.getSum() / (double) nonBisulfiteAlignedBases;
+ metrics.PF_HQ_MEDIAN_MISMATCHES = hqMismatchHistogram.getMedian();
+ if (hqNonBisulfiteAlignedBases > 0) metrics.PF_HQ_ERROR_RATE = hqMismatchHistogram.getSum() / (double) hqNonBisulfiteAlignedBases;
+ if (metrics.PF_ALIGNED_BASES > 0) metrics.PF_INDEL_RATE = this.indels / (double) metrics.PF_ALIGNED_BASES;
+ }
+ }
+ }
+
+ private void collectReadData(final SAMRecord record, final ReferenceSequence ref) {
+ metrics.TOTAL_READS++;
+ readLengthHistogram.increment(record.getReadBases().length);
+
+ if (!record.getReadFailsVendorQualityCheckFlag()) {
+ metrics.PF_READS++;
+ if (isNoiseRead(record)) metrics.PF_NOISE_READS++;
+
+ if (record.getReadUnmappedFlag()) {
+ // If the read is unmapped see if it's adapter sequence
+ final byte[] readBases = record.getReadBases();
+ if (!(record instanceof BAMRecord)) StringUtil.toUpperCase(readBases);
+
+ if (isAdapterSequence(readBases)) {
+ this.adapterReads++;
+ }
+ }
+ else if(doRefMetrics) {
+ metrics.PF_READS_ALIGNED++;
+ if (!record.getReadNegativeStrandFlag()) numPositiveStrand++;
+
+ if (record.getReadPairedFlag() && !record.getMateUnmappedFlag()) {
+ metrics.READS_ALIGNED_IN_PAIRS++;
+
+ // Check that both ends have mapq > minimum
+ final Integer mateMq = record.getIntegerAttribute("MQ");
+ if (mateMq == null || mateMq >= MAPPING_QUALITY_THRESOLD && record.getMappingQuality() >= MAPPING_QUALITY_THRESOLD) {
+ ++this.chimerasDenominator;
+
+ // With both reads mapped we can see if this pair is chimeric
+ if (Math.abs(record.getInferredInsertSize()) > maxInsertSize ||
+ !record.getReferenceIndex().equals(record.getMateReferenceIndex())) {
+ ++this.chimeras;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void collectQualityData(final SAMRecord record, final ReferenceSequence reference) {
+ // If the read isnt an aligned PF read then look at the read for no-calls
+ if (record.getReadUnmappedFlag() || record.getReadFailsVendorQualityCheckFlag() || !doRefMetrics) {
+ final byte[] readBases = record.getReadBases();
+ for (int i = 0; i < readBases.length; i++) {
+ if (SequenceUtil.isNoCall(readBases[i])) {
+ badCycleHistogram.increment(CoordMath.getCycle(record.getReadNegativeStrandFlag(), readBases.length, i));
+ }
+ }
+ }
+ else if (!record.getReadFailsVendorQualityCheckFlag()) {
+ final boolean highQualityMapping = isHighQualityMapping(record);
+ if (highQualityMapping) metrics.PF_HQ_ALIGNED_READS++;
+
+ final byte[] readBases = record.getReadBases();
+ final byte[] refBases = reference.getBases();
+ final byte[] qualities = record.getBaseQualities();
+ final int refLength = refBases.length;
+ long mismatchCount = 0;
+ long hqMismatchCount = 0;
+
+ for (final AlignmentBlock alignmentBlock : record.getAlignmentBlocks()) {
+ final int readIndex = alignmentBlock.getReadStart() - 1;
+ final int refIndex = alignmentBlock.getReferenceStart() - 1;
+ final int length = alignmentBlock.getLength();
+
+ for (int i=0; i<length && refIndex+i<refLength; ++i) {
+ final int readBaseIndex = readIndex + i;
+ boolean mismatch = !SequenceUtil.basesEqual(readBases[readBaseIndex], refBases[refIndex+i]);
+ boolean bisulfiteBase = false;
+ if (mismatch && isBisulfiteSequenced) {
+ if ( (record.getReadNegativeStrandFlag() &&
+ (refBases[refIndex+i] == 'G' || refBases[refIndex+i] =='g') &&
+ (readBases[readBaseIndex] == 'A' || readBases[readBaseIndex] == 'a'))
+ || ((!record.getReadNegativeStrandFlag()) &&
+ (refBases[refIndex+i] == 'C' || refBases[refIndex+i] == 'c') &&
+ (readBases[readBaseIndex] == 'T') || readBases[readBaseIndex] == 't') ) {
+
+ bisulfiteBase = true;
+ mismatch = false;
+ }
+ }
+
+ if(mismatch) mismatchCount++;
+
+ metrics.PF_ALIGNED_BASES++;
+ if(!bisulfiteBase) nonBisulfiteAlignedBases++;
+
+ if (highQualityMapping) {
+ metrics.PF_HQ_ALIGNED_BASES++;
+ if (!bisulfiteBase) hqNonBisulfiteAlignedBases++;
+ if (qualities[readBaseIndex] >= BASE_QUALITY_THRESHOLD) metrics.PF_HQ_ALIGNED_Q20_BASES++;
+ if (mismatch) hqMismatchCount++;
+ }
+
+ if (mismatch || SequenceUtil.isNoCall(readBases[readBaseIndex])) {
+ badCycleHistogram.increment(CoordMath.getCycle(record.getReadNegativeStrandFlag(), readBases.length, i));
+ }
+ }
+ }
+
+ mismatchHistogram.increment(mismatchCount);
+ hqMismatchHistogram.increment(hqMismatchCount);
+
+ // Add any insertions and/or deletions to the global count
+ for (final CigarElement elem : record.getCigar().getCigarElements()) {
+ final CigarOperator op = elem.getOperator();
+ if (op == CigarOperator.INSERTION || op == CigarOperator.DELETION) ++ this.indels;
+ }
+ }
+ }
+
+ private boolean isNoiseRead(final SAMRecord record) {
+ final Object noiseAttribute = record.getAttribute(ReservedTagConstants.XN);
+ return (noiseAttribute != null && noiseAttribute.equals(1));
+ }
+
+ private boolean isHighQualityMapping(final SAMRecord record) {
+ return !record.getReadFailsVendorQualityCheckFlag() &&
+ record.getMappingQuality() >= MAPPING_QUALITY_THRESOLD;
+ }
+
+ public AlignmentSummaryMetrics getMetrics() {
+ return this.metrics;
+ }
+ }
+ }
+}
diff --git a/src/java/picard/analysis/BaseDistributionByCycleMetrics.java b/src/java/picard/analysis/BaseDistributionByCycleMetrics.java
new file mode 100644
index 0000000..8884f06
--- /dev/null
+++ b/src/java/picard/analysis/BaseDistributionByCycleMetrics.java
@@ -0,0 +1,13 @@
+package picard.analysis;
+
+import htsjdk.samtools.metrics.MetricBase;
+
+public class BaseDistributionByCycleMetrics extends MetricBase {
+ public int READ_END;
+ public int CYCLE;
+ public double PCT_A;
+ public double PCT_C;
+ public double PCT_G;
+ public double PCT_T;
+ public double PCT_N;
+}
diff --git a/src/java/picard/analysis/CollectAlignmentSummaryMetrics.java b/src/java/picard/analysis/CollectAlignmentSummaryMetrics.java
new file mode 100644
index 0000000..489bdc0
--- /dev/null
+++ b/src/java/picard/analysis/CollectAlignmentSummaryMetrics.java
@@ -0,0 +1,145 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.Defaults;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.IlluminaUtil;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A command line tool to read a BAM file and produce standard alignment metrics that would be applicable to any alignment.
+ * Metrics to include, but not limited to:
+ * <ul>
+ * <li>Total number of reads (total, period, no exclusions)</li>
+ * <li>Total number of PF reads (PF == does not fail vendor check flag)</li>
+ * <li>Number of PF noise reads (does not fail vendor check and has noise attr set)</li>
+ * <li>Total aligned PF reads (any PF read that has a sequence and position)</li>
+ * <li>High quality aligned PF reads (high quality == mapping quality >= 20)</li>
+ * <li>High quality aligned PF bases (actual aligned bases, calculate off alignment blocks)</li>
+ * <li>High quality aligned PF Q20 bases (subset of above where base quality >= 20)</li>
+ * <li>Median mismatches in HQ aligned PF reads (how many aligned bases != ref on average)</li>
+ * <li>Reads aligned in pairs (vs. reads aligned with mate unaligned/not present)</li>
+ * <li>Read length (how to handle mixed lengths?)</li>
+ * <li>Bad Cycles - how many machine cycles yielded combined no-call and mismatch rates of >= 80%</li>
+ * <li>Strand balance - reads mapped to positive strand / total mapped reads</li>
+ * </ul>
+ * Metrics are written for the first read of a pair, the second read, and combined for the pair.
+ *
+ * @author Doug Voet (dvoet at broadinstitute dot org)
+ */
+ at CommandLineProgramProperties(
+ usage = CollectAlignmentSummaryMetrics.USAGE_SUMMARY + CollectAlignmentSummaryMetrics.USAGE_DETAILS,
+ usageShort = CollectAlignmentSummaryMetrics.USAGE_SUMMARY,
+ programGroup = Metrics.class
+)
+public class CollectAlignmentSummaryMetrics extends SinglePassSamProgram {
+ static final String USAGE_SUMMARY = "Produces a file containing summary alignment metrics from a SAM or BAM.";
+ static final String USAGE_DETAILS = "<br />" +
+ "<h4>Usage example:</h4>" +
+ "<pre>" +
+ " java -jar picard.jar CollectAlignmentMetrics \\<br />" +
+ " R=reference.fasta \\<br />" +
+ " I=input.bam \\<br />" +
+ " O=output.txt" +
+ "</pre>" +
+ "<hr />";
+
+ private static final Log log = Log.getInstance(CollectAlignmentSummaryMetrics.class);
+
+ // Usage and parameters
+
+ @Option(doc="Paired end reads above this insert size will be considered chimeric along with inter-chromosomal pairs.")
+ public int MAX_INSERT_SIZE = 100000;
+
+ @Option(doc="List of adapter sequences to use when processing the alignment metrics")
+ public List<String> ADAPTER_SEQUENCE = CollectionUtil.makeList(
+ IlluminaUtil.IlluminaAdapterPair.SINGLE_END.get5PrimeAdapter(),
+ IlluminaUtil.IlluminaAdapterPair.SINGLE_END.get3PrimeAdapter(),
+ IlluminaUtil.IlluminaAdapterPair.PAIRED_END.get5PrimeAdapter(),
+ IlluminaUtil.IlluminaAdapterPair.PAIRED_END.get3PrimeAdapter(),
+ IlluminaUtil.IlluminaAdapterPair.INDEXED.get5PrimeAdapter(),
+ IlluminaUtil.IlluminaAdapterPair.INDEXED.get3PrimeAdapter()
+ );
+
+ @Option(shortName="LEVEL", doc="The level(s) at which to accumulate metrics. ")
+ private Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
+
+ @Option(shortName="BS", doc="Whether the SAM or BAM file consists of bisulfite sequenced reads. ")
+ public boolean IS_BISULFITE_SEQUENCED = false;
+
+ //overridden to make it visible on the commandline and to change the doc.
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc = "Reference sequence file. Note that while this argument isn't required, without it only a small subset of the metrics will be calculated.", optional = true, overridable = true)
+ public File REFERENCE_SEQUENCE = Defaults.REFERENCE_FASTA;
+
+ private AlignmentSummaryMetricsCollector collector;
+
+ /** Required main method implementation. */
+ public static void main(final String[] argv) {
+ new CollectAlignmentSummaryMetrics().instanceMainWithExit(argv);
+ }
+
+ /** Silly method that is necessary to give unit test access to call doWork() */
+ protected final int testDoWork() { return doWork(); }
+
+ @Override protected void setup(final SAMFileHeader header, final File samFile) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ if (header.getSequenceDictionary().isEmpty()) {
+ log.warn(INPUT.getAbsoluteFile() + " has no sequence dictionary. If any reads " +
+ "in the file are aligned then alignment summary metrics collection will fail.");
+ }
+
+ final boolean doRefMetrics = REFERENCE_SEQUENCE != null;
+ collector = new AlignmentSummaryMetricsCollector(METRIC_ACCUMULATION_LEVEL, header.getReadGroups(), doRefMetrics,
+ ADAPTER_SEQUENCE, MAX_INSERT_SIZE, IS_BISULFITE_SEQUENCED);
+ }
+
+ @Override protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
+ collector.acceptRecord(rec, ref);
+ }
+
+ @Override protected void finish() {
+ collector.finish();
+
+ final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> file = getMetricsFile();
+ collector.addAllLevelsToFile(file);
+
+ file.write(OUTPUT);
+ }
+}
diff --git a/src/java/picard/analysis/CollectBaseDistributionByCycle.java b/src/java/picard/analysis/CollectBaseDistributionByCycle.java
new file mode 100644
index 0000000..fb3bacd
--- /dev/null
+++ b/src/java/picard/analysis/CollectBaseDistributionByCycle.java
@@ -0,0 +1,188 @@
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.RExecutor;
+
+ at CommandLineProgramProperties(
+ usage = "Program to chart the nucleotide distribution per cycle in a SAM or BAM file.",
+ usageShort = "Program to chart the nucleotide distribution per cycle in a SAM or BAM file.",
+ programGroup = Metrics.class
+)
+public class CollectBaseDistributionByCycle extends SinglePassSamProgram {
+
+ @Option(shortName = "CHART", doc = "A file (with .pdf extension) to write the chart to.")
+ public File CHART_OUTPUT;
+
+ @Option(doc = "If set to true, calculate the base distribution over aligned reads only.")
+ public boolean ALIGNED_READS_ONLY = false;
+
+ @Option(doc = "If set to true calculate the base distribution over PF reads only.")
+ public boolean PF_READS_ONLY = false;
+
+ private HistogramGenerator hist;
+ private String plotSubtitle = "";
+ private final Log log = Log.getInstance(CollectBaseDistributionByCycle.class);
+
+ public static void main(String[] args) {
+ System.exit(new CollectBaseDistributionByCycle().instanceMain(args));
+ }
+
+ @Override
+ protected void setup(final SAMFileHeader header, final File samFile) {
+ IOUtil.assertFileIsWritable(CHART_OUTPUT);
+ final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
+ if (readGroups.size() == 1) {
+ plotSubtitle = StringUtil.asEmptyIfNull(readGroups.get(0).getLibrary());
+ }
+ hist = new HistogramGenerator();
+ }
+
+ @Override
+ protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
+ if ((PF_READS_ONLY) && (rec.getReadFailsVendorQualityCheckFlag())) {
+ return;
+ }
+ if ((ALIGNED_READS_ONLY) && (rec.getReadUnmappedFlag())) {
+ return;
+ }
+ if (rec.isSecondaryOrSupplementary()) {
+ return;
+ }
+ hist.addRecord(rec);
+ }
+
+ @Override
+ protected void finish() {
+ final MetricsFile<BaseDistributionByCycleMetrics, ?> metrics = getMetricsFile();
+ hist.addToMetricsFile(metrics);
+ metrics.write(OUTPUT);
+ if (hist.isEmpty()) {
+ log.warn("No valid bases found in input file. No plot will be produced.");
+ } else {
+ final int rResult = RExecutor.executeFromClasspath("picard/analysis/baseDistributionByCycle.R",
+ OUTPUT.getAbsolutePath(),
+ CHART_OUTPUT.getAbsolutePath(),
+ INPUT.getName(),
+ plotSubtitle);
+ if (rResult != 0) {
+ throw new PicardException("R script nucleotideDistributionByCycle.R failed with return code " + rResult);
+ }
+ }
+ }
+
+ private class HistogramGenerator {
+ private int maxLengthSoFar = 0;
+ final private long[][] firstReadTotalsByCycle = new long[5][maxLengthSoFar];
+ private long[] firstReadCountsByCycle = new long[maxLengthSoFar];
+ final private long[][] secondReadTotalsByCycle = new long[5][maxLengthSoFar];
+ private long[] secondReadCountsByCycle = new long[maxLengthSoFar];
+ private boolean seenSecondEnd = false;
+
+ private int baseToInt(final byte base) {
+ switch (base) {
+ case 'A':
+ case 'a':
+ return 0;
+ case 'C':
+ case 'c':
+ return 1;
+ case 'G':
+ case 'g':
+ return 2;
+ case 'T':
+ case 't':
+ return 3;
+ }
+ return 4;
+ }
+
+ void addRecord(final SAMRecord rec) {
+ final byte[] bases = rec.getReadBases();
+ if (bases == null) {
+ return;
+ }
+ final int length = bases.length;
+ final boolean rc = rec.getReadNegativeStrandFlag();
+ ensureArraysBigEnough(length + 1);
+ if ((rec.getReadPairedFlag()) && (rec.getSecondOfPairFlag())) {
+ seenSecondEnd = true;
+ for (int i = 0; i < length; i++) {
+ final int cycle = rc ? length - i : i + 1;
+ secondReadTotalsByCycle[baseToInt(bases[i])][cycle] += 1;
+ secondReadCountsByCycle[cycle] += 1;
+ }
+ } else {
+ for (int i = 0; i < length; i++) {
+ final int cycle = rc ? length - i : i + 1;
+ firstReadTotalsByCycle[baseToInt(bases[i])][cycle] += 1;
+ firstReadCountsByCycle[cycle] += 1;
+ }
+ }
+ }
+
+ private void ensureArraysBigEnough(final int length) {
+ if (length > maxLengthSoFar) {
+ for (int i = 0; i < 5; i++) {
+ firstReadTotalsByCycle[i] = Arrays.copyOf(firstReadTotalsByCycle[i], length);
+ secondReadTotalsByCycle[i] = Arrays.copyOf(secondReadTotalsByCycle[i], length);
+ }
+ firstReadCountsByCycle = Arrays.copyOf(firstReadCountsByCycle, length);
+ secondReadCountsByCycle = Arrays.copyOf(secondReadCountsByCycle, length);
+ maxLengthSoFar = length;
+ }
+ }
+
+ boolean isEmpty() {
+ return maxLengthSoFar == 0;
+ }
+
+ public void addToMetricsFile(final MetricsFile<BaseDistributionByCycleMetrics, ?> metrics) {
+ int firstReadLength = 0;
+ for (int i = 0; i < maxLengthSoFar; i++) {
+ if (0 != firstReadCountsByCycle[i]) {
+ final BaseDistributionByCycleMetrics metric = new BaseDistributionByCycleMetrics();
+ metric.READ_END = 1;
+ metric.CYCLE = i;
+ metric.PCT_A = (100.0 * firstReadTotalsByCycle[0][i] / firstReadCountsByCycle[i]);
+ metric.PCT_C = (100.0 * firstReadTotalsByCycle[1][i] / firstReadCountsByCycle[i]);
+ metric.PCT_G = (100.0 * firstReadTotalsByCycle[2][i] / firstReadCountsByCycle[i]);
+ metric.PCT_T = (100.0 * firstReadTotalsByCycle[3][i] / firstReadCountsByCycle[i]);
+ metric.PCT_N = (100.0 * firstReadTotalsByCycle[4][i] / firstReadCountsByCycle[i]);
+ metrics.addMetric(metric);
+ firstReadLength = i;
+ }
+ }
+ if (seenSecondEnd) {
+ for (int i = 0; i < maxLengthSoFar; i++) {
+ if (0 != secondReadCountsByCycle[i]) {
+ final BaseDistributionByCycleMetrics metric = new BaseDistributionByCycleMetrics();
+ metric.READ_END = 2;
+ metric.CYCLE = (i + firstReadLength);
+ metric.PCT_A = (100.0 * secondReadTotalsByCycle[0][i] / secondReadCountsByCycle[i]);
+ metric.PCT_C = (100.0 * secondReadTotalsByCycle[1][i] / secondReadCountsByCycle[i]);
+ metric.PCT_G = (100.0 * secondReadTotalsByCycle[2][i] / secondReadCountsByCycle[i]);
+ metric.PCT_T = (100.0 * secondReadTotalsByCycle[3][i] / secondReadCountsByCycle[i]);
+ metric.PCT_N = (100.0 * secondReadTotalsByCycle[4][i] / secondReadCountsByCycle[i]);
+ metrics.addMetric(metric);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/java/picard/analysis/CollectGcBiasMetrics.java b/src/java/picard/analysis/CollectGcBiasMetrics.java
new file mode 100644
index 0000000..e748ecf
--- /dev/null
+++ b/src/java/picard/analysis/CollectGcBiasMetrics.java
@@ -0,0 +1,236 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.analysis.directed.GcBiasMetricsCollector;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.metrics.GcBiasMetrics;
+import picard.util.RExecutor;
+
+import java.io.File;
+import java.text.NumberFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tool to collect information about GC bias in the reads in a given BAM file. Computes
+ * the number of windows (of size specified by WINDOW_SIZE) in the genome at each GC%
+ * and counts the number of read starts in each GC bin. What is output and plotted is
+ * the "normalized coverage" in each bin - i.e. the number of reads per window normalized
+ * to the average number of reads per window across the whole genome.
+ *
+ * @author Tim Fennell
+ * edited by Kylee Bergin
+ */
+ at CommandLineProgramProperties(
+ usage = "Tool to collect information about GC bias in the reads in a given BAM file. Computes" +
+ " the number of windows (of size specified by WINDOW_SIZE) in the genome at each GC%" +
+ " and counts the number of read starts in each GC bin. What is output and plotted is" +
+ " the \"normalized coverage\" in each bin - i.e. the number of reads per window normalized" +
+ " to the average number of reads per window across the whole genome..\n",
+ usageShort = "Collects information about GC bias in the reads in the provided SAM or BAM",
+ programGroup = Metrics.class
+)
+public class CollectGcBiasMetrics extends SinglePassSamProgram {
+ /** The location of the R script to do the plotting. */
+ private static final String R_SCRIPT = "picard/analysis/gcBias.R";
+
+ // Usage and parameters
+
+ @Option(shortName = "CHART", doc = "The PDF file to render the chart to.")
+ public File CHART_OUTPUT;
+
+ @Option(shortName = "S", doc = "The text file to write summary metrics to.", optional = true)
+ public File SUMMARY_OUTPUT;
+
+ @Option(doc = "The size of windows on the genome that are used to bin reads.")
+ public int WINDOW_SIZE = 100;
+
+ @Option(doc = "For summary metrics, exclude GC windows that include less than this fraction of the genome.")
+ public double MINIMUM_GENOME_FRACTION = 0.00001;
+
+ @Option(shortName = "BS", doc = "Whether the SAM or BAM file consists of bisulfite sequenced reads.")
+ public boolean IS_BISULFITE_SEQUENCED = false;
+
+ @Option(shortName = "LEVEL", doc = "The level(s) at which to accumulate metrics.")
+ public Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
+
+ // Calculates GcBiasMetrics for all METRIC_ACCUMULATION_LEVELs provided
+ private GcBiasMetricsCollector multiCollector;
+
+ //windowSize is the size of the scanning window that goes over the reference
+ private final int windowSize = WINDOW_SIZE;
+ final int[] windowsByGc = new int[WINDOWS];
+
+ // Histograms to track the number of windows at each GC, and the number of read starts
+ // at windows of each GC. Need 101 to get from 0-100.
+ private static final int WINDOWS = 101;
+
+ //Hash map of gc[] with reference name as key
+ private final Map<String, byte[]> gcByRef = new HashMap<String, byte[]>();
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Stock main method
+ ////////////////////////////////////////////////////////////////////////////
+ public static void main(final String[] args) {
+ System.exit(new CollectGcBiasMetrics().instanceMain(args));
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Setup calculates gc[] for the reference. Must be done at startup to avoid
+ // missing reference sequences in the case of small files that may
+ // not have reads aligning to every reference sequence
+ /////////////////////////////////////////////////////////////////////////////
+ @Override
+ protected void setup(final SAMFileHeader header, final File samFile) {
+ IOUtil.assertFileIsWritable(CHART_OUTPUT);
+
+ if (SUMMARY_OUTPUT != null) IOUtil.assertFileIsWritable(SUMMARY_OUTPUT);
+
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+
+ final ReferenceSequenceFile refFile = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
+ ReferenceSequence ref;
+
+ while ((ref = refFile.nextSequence()) != null) {
+ final byte[] refBases = ref.getBases();
+ final String refName = ref.getName();
+ StringUtil.toUpperCase(refBases);
+ final int refLength = refBases.length;
+ final int lastWindowStart = refLength - windowSize;
+ final byte[] gc = calculateAllGcs(refBases, windowsByGc, lastWindowStart);
+ gcByRef.put(refName, gc);
+ }
+ //Delegate actual collection to GcBiasMetricCollector
+ multiCollector = new GcBiasMetricsCollector(METRIC_ACCUMULATION_LEVEL, gcByRef, windowsByGc, header.getReadGroups(), windowSize, IS_BISULFITE_SEQUENCED);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // MultiCollector acceptRead
+ ////////////////////////////////////////////////////////////////////////////
+ @Override
+ protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
+ multiCollector.acceptRecord(rec, ref);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Write out all levels of normalized coverage metrics to a file
+ /////////////////////////////////////////////////////////////////////////////
+ @Override
+ protected void finish() {
+ multiCollector.finish();
+ final MetricsFile<GcBiasMetrics, Integer> file = getMetricsFile();
+ final MetricsFile<GcBiasDetailMetrics, ?> detailMetricsFile = getMetricsFile();
+ final MetricsFile<GcBiasSummaryMetrics, ?> summaryMetricsFile = getMetricsFile();
+ multiCollector.addAllLevelsToFile(file);
+ final List<GcBiasMetrics> gcBiasMetricsList = file.getMetrics();
+ for(final GcBiasMetrics gcbm : gcBiasMetricsList){
+ final List<GcBiasDetailMetrics> gcDetailList = gcbm.DETAILS.getMetrics();
+ for(final GcBiasDetailMetrics d : gcDetailList) {
+ detailMetricsFile.addMetric(d);
+ }
+ summaryMetricsFile.addMetric(gcbm.SUMMARY);
+ }
+ detailMetricsFile.write(OUTPUT);
+ summaryMetricsFile.write(SUMMARY_OUTPUT);
+
+ final NumberFormat fmt = NumberFormat.getIntegerInstance();
+ fmt.setGroupingUsed(true);
+ RExecutor.executeFromClasspath(R_SCRIPT,
+ OUTPUT.getAbsolutePath(),
+ SUMMARY_OUTPUT.getAbsolutePath(),
+ CHART_OUTPUT.getAbsolutePath(),
+ String.valueOf(WINDOW_SIZE));
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Calculcate all the GC values for all windows
+ /////////////////////////////////////////////////////////////////////////////
+ private byte[] calculateAllGcs(final byte[] refBases, final int[] windowsByGc, final int lastWindowStart) {
+ final CalculateGcState state = new CalculateGcState();
+ final int refLength = refBases.length;
+ final byte[] gc = new byte[refLength + 1];
+ for (int i = 1; i < lastWindowStart; ++i) {
+ final int windowEnd = i + windowSize;
+ final int windowGc = calculateGc(refBases, i, windowEnd, state);
+ gc[i] = (byte) windowGc;
+ if (windowGc != -1) windowsByGc[windowGc]++;
+ }
+ return gc;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Calculates GC as a number from 0 to 100 in the specified window.
+ // If the window includes more than five no-calls then -1 is returned.
+ /////////////////////////////////////////////////////////////////////////////
+ private int calculateGc(final byte[] bases, final int startIndex, final int endIndex, final CalculateGcState state) {
+ if (state.init) {
+ state.init = false;
+ state.gcCount = 0;
+ state.nCount = 0;
+ for (int i = startIndex; i < endIndex; ++i) {
+ final byte base = bases[i];
+ if (base == 'G' || base == 'C') ++state.gcCount;
+ else if (base == 'N') ++state.nCount;
+ }
+ } else {
+ final byte newBase = bases[endIndex - 1];
+ if (newBase == 'G' || newBase == 'C') ++state.gcCount;
+ else if (newBase == 'N') ++state.nCount;
+
+ if (state.priorBase == 'G' || state.priorBase == 'C') --state.gcCount;
+ else if (state.priorBase == 'N') --state.nCount;
+ }
+ state.priorBase = bases[startIndex];
+ if (state.nCount > 4) return -1;
+ else return (state.gcCount * 100) / (endIndex - startIndex);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Keeps track of current GC calculation state
+ /////////////////////////////////////////////////////////////////////////////
+ class CalculateGcState {
+ boolean init = true;
+ int nCount;
+ int gcCount;
+ byte priorBase;
+ }
+}
+
+
diff --git a/src/java/picard/analysis/CollectInsertSizeMetrics.java b/src/java/picard/analysis/CollectInsertSizeMetrics.java
new file mode 100644
index 0000000..141c5fd
--- /dev/null
+++ b/src/java/picard/analysis/CollectInsertSizeMetrics.java
@@ -0,0 +1,157 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.PicardException;
+import picard.analysis.directed.InsertSizeMetricsCollector;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.RExecutor;
+
+import java.io.File;
+import java.util.Set;
+
+/**
+ * Command line program to read non-duplicate insert sizes, create a Histogram
+ * and report distribution statistics.
+ *
+ * @author Doug Voet (dvoet at broadinstitute dot org)
+ */
+ at CommandLineProgramProperties(
+ usage = "Reads a SAM or BAM file and writes a file containing metrics about " +
+ "the statistical distribution of insert size (excluding duplicates) " +
+ "and generates a Histogram plot.",
+ usageShort = "Writes insert size distribution metrics for a SAM or BAM file",
+ programGroup = Metrics.class
+)
+public class CollectInsertSizeMetrics extends SinglePassSamProgram {
+ private static final Log log = Log.getInstance(CollectInsertSizeMetrics.class);
+ private static final String Histogram_R_SCRIPT = "picard/analysis/insertSizeHistogram.R";
+
+ @Option(shortName="H", doc="File to write insert size Histogram chart to.")
+ public File Histogram_FILE;
+
+ @Option(doc="Generate mean, sd and plots by trimming the data down to MEDIAN + DEVIATIONS*MEDIAN_ABSOLUTE_DEVIATION. " +
+ "This is done because insert size data typically includes enough anomalous values from chimeras and other " +
+ "artifacts to make the mean and sd grossly misleading regarding the real distribution.")
+ public double DEVIATIONS = 10;
+
+ @Option(shortName="W", doc="Explicitly sets the Histogram width, overriding automatic truncation of Histogram tail. " +
+ "Also, when calculating mean and standard deviation, only bins <= Histogram_WIDTH will be included.", optional=true)
+ public Integer Histogram_WIDTH = null;
+
+ @Option(shortName="M", doc="When generating the Histogram, discard any data categories (out of FR, TANDEM, RF) that have fewer than this " +
+ "percentage of overall reads. (Range: 0 to 1).")
+ public float MINIMUM_PCT = 0.05f;
+
+ @Option(shortName="LEVEL", doc="The level(s) at which to accumulate metrics. ")
+ private Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
+
+ // Calculates InsertSizeMetrics for all METRIC_ACCUMULATION_LEVELs provided
+ private InsertSizeMetricsCollector multiCollector;
+
+ /** Required main method implementation. */
+ public static void main(final String[] argv) {
+ new CollectInsertSizeMetrics().instanceMainWithExit(argv);
+ }
+
+ /**
+ * Put any custom command-line validation in an override of this method.
+ * clp is initialized at this point and can be used to print usage and access argv.
+ * Any options set by command-line parser can be validated.
+ *
+ * @return null if command line is valid. If command line is invalid, returns an array of error message
+ * to be written to the appropriate place.
+ */
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (MINIMUM_PCT < 0 || MINIMUM_PCT > 0.5) {
+ return new String[]{"MINIMUM_PCT was set to " + MINIMUM_PCT + ". It must be between 0 and 0.5 so all data categories don't get discarded."};
+ }
+
+ return super.customCommandLineValidation();
+ }
+
+ @Override protected boolean usesNoRefReads() { return false; }
+
+ @Override protected void setup(final SAMFileHeader header, final File samFile) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+ IOUtil.assertFileIsWritable(Histogram_FILE);
+
+ //Delegate actual collection to InsertSizeMetricCollector
+ multiCollector = new InsertSizeMetricsCollector(METRIC_ACCUMULATION_LEVEL, header.getReadGroups(), MINIMUM_PCT, Histogram_WIDTH, DEVIATIONS);
+ }
+
+ @Override protected void acceptRead(final SAMRecord record, final ReferenceSequence ref) {
+ multiCollector.acceptRecord(record, ref);
+ }
+
+ @Override protected void finish() {
+ multiCollector.finish();
+
+ final MetricsFile<InsertSizeMetrics, Integer> file = getMetricsFile();
+ multiCollector.addAllLevelsToFile(file);
+
+ if(file.getNumHistograms() == 0) {
+ //can happen if user sets MINIMUM_PCT = 0.5, etc.
+ log.warn("All data categories were discarded because they contained < " + MINIMUM_PCT +
+ " of the total aligned paired data.");
+ final InsertSizeMetricsCollector.PerUnitInsertSizeMetricsCollector allReadsCollector = (InsertSizeMetricsCollector.PerUnitInsertSizeMetricsCollector) multiCollector.getAllReadsCollector();
+ log.warn("Total mapped pairs in all categories: " + (allReadsCollector == null ? allReadsCollector : allReadsCollector.getTotalInserts()));
+ }
+ else {
+ file.write(OUTPUT);
+
+ final int rResult;
+ if(Histogram_WIDTH == null) {
+ rResult = RExecutor.executeFromClasspath(
+ Histogram_R_SCRIPT,
+ OUTPUT.getAbsolutePath(),
+ Histogram_FILE.getAbsolutePath(),
+ INPUT.getName());
+ } else {
+ rResult = RExecutor.executeFromClasspath(
+ Histogram_R_SCRIPT,
+ OUTPUT.getAbsolutePath(),
+ Histogram_FILE.getAbsolutePath(),
+ INPUT.getName(),
+ String.valueOf( Histogram_WIDTH ) ); //Histogram_WIDTH is passed because R automatically sets Histogram width to the last
+ //bin that has data, which may be less than Histogram_WIDTH and confuse the user.
+ }
+
+ if (rResult != 0) {
+ throw new PicardException("R script " + Histogram_R_SCRIPT + " failed with return code " + rResult);
+ }
+ }
+ }
+}
diff --git a/src/java/picard/analysis/CollectJumpingLibraryMetrics.java b/src/java/picard/analysis/CollectJumpingLibraryMetrics.java
new file mode 100644
index 0000000..a54035a
--- /dev/null
+++ b/src/java/picard/analysis/CollectJumpingLibraryMetrics.java
@@ -0,0 +1,249 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.SamPairUtil.PairOrientation;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+import picard.sam.DuplicationMetrics;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Command-line program to compute metrics about outward-facing pairs, inward-facing
+ * pairs, and chimeras in a jumping library.
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Computes jumping library metrics. Gets all data for computation from the first" +
+ "read in each pair and assumes that the MQ tag is set with the mate's mapping quality. If the " +
+ "MQ tag is not set, then the program assumes that the mate's mapping quality is >= MINIMUM_MAPPING_QUALITY",
+ usageShort = "Produces jumping library metrics for the provided SAM/BAMs",
+ programGroup = Metrics.class
+)
+public class CollectJumpingLibraryMetrics extends CommandLineProgram {
+ // Usage and parameters
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "BAM file(s) of reads with duplicates marked")
+ public List<File> INPUT = new ArrayList<File>();
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "File to which metrics should be written")
+ public File OUTPUT;
+ @Option(shortName = StandardOptionDefinitions.MINIMUM_MAPPING_QUALITY_SHORT_NAME, doc = "Mapping quality minimum cutoff")
+ public Integer MINIMUM_MAPPING_QUALITY = 0;
+ @Option(shortName = "T", doc = "When calculating mean and stdev stop when the bins in the tail of the distribution " +
+ "contain fewer than mode/TAIL_LIMIT items")
+ public int TAIL_LIMIT = 10000;
+ @Option(doc = "Jumps greater than or equal to the greater of this value or 2 times the mode of the " +
+ "outward-facing pairs are considered chimeras")
+ public int CHIMERA_KB_MIN = 100000;
+
+ private static final int SAMPLE_FOR_MODE = 50000; // How many outward-facing pairs to sample to determine the mode
+
+ /** Stock main method. */
+ public static void main(String[] args) {
+ System.exit(new CollectJumpingLibraryMetrics().instanceMain(args));
+ }
+
+ /**
+ * Calculates the detailed statistics about the jumping library and then generates the results.
+ */
+ protected int doWork() {
+
+ for (File f : INPUT) {
+ IOUtil.assertFileIsReadable(f);
+ }
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ Histogram<Integer> innieHistogram = new Histogram<Integer>();
+ Histogram<Integer> outieHistogram = new Histogram<Integer>();
+
+ int fragments = 0;
+ int innies = 0;
+ int outies = 0;
+ int innieDupes = 0;
+ int outieDupes = 0;
+ int crossChromPairs = 0;
+ int superSized = 0;
+ int tandemPairs = 0;
+ double chimeraSizeMinimum = Math.max(getOutieMode(), (double) CHIMERA_KB_MIN);
+
+ for (File f : INPUT) {
+ SamReader reader = SamReaderFactory.makeDefault().open(f);
+
+ if (reader.getFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
+ throw new PicardException("SAM file must " + f.getName() + " must be sorted in coordintate order");
+ }
+
+ for (SAMRecord sam : reader) {
+
+ // We're getting all our info from the first of each pair.
+ if (!sam.getFirstOfPairFlag()) {
+ continue;
+ }
+
+ // Ignore unmapped read pairs
+ if (sam.getReadUnmappedFlag()) {
+ if (!sam.getMateUnmappedFlag()) {
+ fragments++;
+ continue;
+ }
+
+ // If both ends are unmapped and we've hit unaligned reads we're done
+ if (sam.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
+ break;
+ }
+ continue;
+ }
+
+ if (sam.getMateUnmappedFlag()) {
+ fragments++;
+ continue;
+ }
+
+ // Ignore low-quality reads. If we don't have the mate mapping quality, assume it's OK
+ if ((sam.getAttribute(SAMTag.MQ.name()) != null &&
+ sam.getIntegerAttribute(SAMTag.MQ.name()) < MINIMUM_MAPPING_QUALITY) ||
+ sam.getMappingQuality() < MINIMUM_MAPPING_QUALITY) {
+ continue;
+ }
+
+ final int absInsertSize = Math.abs(sam.getInferredInsertSize());
+ if (absInsertSize > chimeraSizeMinimum) {
+ superSized++;
+ } else if (sam.getMateNegativeStrandFlag() == sam.getReadNegativeStrandFlag()) {
+ tandemPairs++;
+ } else if (!sam.getMateReferenceIndex().equals(sam.getReferenceIndex())) {
+ crossChromPairs++;
+ } else {
+ final PairOrientation pairOrientation = SamPairUtil.getPairOrientation(sam);
+ if (pairOrientation == PairOrientation.RF) {
+ outieHistogram.increment(absInsertSize);
+ outies++;
+ if (sam.getDuplicateReadFlag()) {
+ outieDupes++;
+ }
+ } else if (pairOrientation == PairOrientation.FR) {
+ innieHistogram.increment(absInsertSize);
+ innies++;
+ if (sam.getDuplicateReadFlag()) {
+ innieDupes++;
+ }
+ } else {
+ throw new IllegalStateException("This should never happen");
+ }
+ }
+ }
+ CloserUtil.close(reader);
+ }
+
+ MetricsFile<JumpingLibraryMetrics, Integer> metricsFile = getMetricsFile();
+ JumpingLibraryMetrics metrics = new JumpingLibraryMetrics();
+ metrics.JUMP_PAIRS = outies;
+ metrics.JUMP_DUPLICATE_PAIRS = outieDupes;
+ metrics.JUMP_DUPLICATE_PCT = outies != 0 ? outieDupes / (double) outies : 0;
+ metrics.JUMP_LIBRARY_SIZE = (outies > 0 && outieDupes > 0) ? DuplicationMetrics.estimateLibrarySize(outies, outies - outieDupes) : 0;
+ outieHistogram.trimByTailLimit(TAIL_LIMIT);
+ metrics.JUMP_MEAN_INSERT_SIZE = outieHistogram.getMean();
+ metrics.JUMP_STDEV_INSERT_SIZE = outieHistogram.getStandardDeviation();
+ metrics.NONJUMP_PAIRS = innies;
+ metrics.NONJUMP_DUPLICATE_PAIRS = innieDupes;
+ metrics.NONJUMP_DUPLICATE_PCT = innies != 0 ? innieDupes / (double) innies : 0;
+ metrics.NONJUMP_LIBRARY_SIZE = (innies > 0 && innieDupes > 0) ? DuplicationMetrics.estimateLibrarySize(innies, innies - innieDupes) : 0;
+ innieHistogram.trimByTailLimit(TAIL_LIMIT);
+ metrics.NONJUMP_MEAN_INSERT_SIZE = innieHistogram.getMean();
+ metrics.NONJUMP_STDEV_INSERT_SIZE = innieHistogram.getStandardDeviation();
+ metrics.CHIMERIC_PAIRS = crossChromPairs + superSized + tandemPairs;
+ metrics.FRAGMENTS = fragments;
+ double totalPairs = outies + innies + metrics.CHIMERIC_PAIRS;
+ metrics.PCT_JUMPS = totalPairs != 0 ? outies / totalPairs : 0;
+ metrics.PCT_NONJUMPS = totalPairs != 0 ? innies / totalPairs : 0;
+ metrics.PCT_CHIMERAS = totalPairs != 0 ? metrics.CHIMERIC_PAIRS / totalPairs : 0;
+ metricsFile.addMetric(metrics);
+ metricsFile.write(OUTPUT);
+
+ return 0;
+ }
+
+ /**
+ * Calculates the mode for outward-facing pairs, using the first SAMPLE_FOR_MODE
+ * outward-facing pairs found in INPUT
+ */
+ private double getOutieMode() {
+
+ int samplePerFile = SAMPLE_FOR_MODE / INPUT.size();
+
+ Histogram<Integer> histo = new Histogram<Integer>();
+
+ for (File f : INPUT) {
+ SamReader reader = SamReaderFactory.makeDefault().open(f);
+ int sampled = 0;
+ for (Iterator<SAMRecord> it = reader.iterator(); it.hasNext() && sampled < samplePerFile; ) {
+ SAMRecord sam = it.next();
+ if (!sam.getFirstOfPairFlag()) {
+ continue;
+ }
+ // If we get here we've hit the end of the aligned reads
+ if (sam.getReadUnmappedFlag() && sam.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
+ break;
+ } else if (sam.getReadUnmappedFlag() || sam.getMateUnmappedFlag()) {
+ continue;
+ } else {
+ if ((sam.getAttribute(SAMTag.MQ.name()) == null ||
+ sam.getIntegerAttribute(SAMTag.MQ.name()) >= MINIMUM_MAPPING_QUALITY) &&
+ sam.getMappingQuality() >= MINIMUM_MAPPING_QUALITY &&
+ sam.getMateNegativeStrandFlag() != sam.getReadNegativeStrandFlag() &&
+ sam.getMateReferenceIndex().equals(sam.getReferenceIndex())) {
+ if (SamPairUtil.getPairOrientation(sam) == PairOrientation.RF) {
+ histo.increment(Math.abs(sam.getInferredInsertSize()));
+ sampled++;
+ }
+ }
+ }
+
+ }
+ CloserUtil.close(reader);
+ }
+
+ return histo.size() > 0 ? histo.getMode() : 0;
+ }
+}
diff --git a/src/java/picard/analysis/CollectMultipleMetrics.java b/src/java/picard/analysis/CollectMultipleMetrics.java
new file mode 100644
index 0000000..1603822
--- /dev/null
+++ b/src/java/picard/analysis/CollectMultipleMetrics.java
@@ -0,0 +1,259 @@
+package picard.analysis;
+
+import htsjdk.samtools.util.CollectionUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.cmdline.StandardOptionDefinitions;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * Class that is designed to instantiate and execute multiple metrics programs that extend
+ * SinglePassSamProgram while making only a single pass through the SAM file and supplying
+ * each program with the records as it goes.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Takes an input BAM and reference sequence and runs one or more Picard " +
+ "metrics modules at the same time to cut down on I/O. Currently all programs are run with " +
+ "default options and fixed output extesions, but this may become more flexible in future.",
+ usageShort = "A \"meta-metrics\" calculating program that produces multiple metrics for the provided SAM/BAM",
+ programGroup = Metrics.class
+)
+public class CollectMultipleMetrics extends CommandLineProgram {
+
+ /**
+ * This interface allows developers to create Programs to run in addition to the ones defined in the Program enum.
+ * Includes a method for determining whether or not a Program explicitly needs a reference sequence (i.e. cannot be null)
+ */
+ public static interface ProgramInterface {
+ SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference);
+ public boolean needsReferenceSequence();
+ }
+
+ public static enum Program implements ProgramInterface {
+ CollectAlignmentSummaryMetrics {
+ @Override
+ public boolean needsReferenceSequence() {
+ return false;
+ }
+
+ @Override
+ public SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference) {
+ final CollectAlignmentSummaryMetrics program = new CollectAlignmentSummaryMetrics();
+ program.OUTPUT = new File(outbase + ".alignment_summary_metrics");
+
+ // Generally programs should not be accessing these directly but it might make things smoother
+ // to just set them anyway. These are set here to make sure that in case of a the derived class
+ // overrides
+ program.INPUT = input;
+ program.REFERENCE_SEQUENCE = reference;
+
+ return program;
+ }
+ },
+ CollectInsertSizeMetrics {
+ @Override
+ public boolean needsReferenceSequence() {
+ return false;
+ }
+
+ @Override
+ public SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference) {
+ final CollectInsertSizeMetrics program = new CollectInsertSizeMetrics();
+ program.OUTPUT = new File(outbase + ".insert_size_metrics");
+ program.Histogram_FILE = new File(outbase + ".insert_size_histogram.pdf");
+ // Generally programs should not be accessing these directly but it might make things smoother
+ // to just set them anyway. These are set here to make sure that in case of a the derived class
+ // overrides
+ program.INPUT = input;
+ program.REFERENCE_SEQUENCE = reference;
+
+ return program;
+ }
+ },
+ QualityScoreDistribution {
+ @Override
+ public boolean needsReferenceSequence() {
+ return false;
+ }
+ @Override
+ public SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference) {
+ final QualityScoreDistribution program = new QualityScoreDistribution();
+ program.OUTPUT = new File(outbase + ".quality_distribution_metrics");
+ program.CHART_OUTPUT = new File(outbase + ".quality_distribution.pdf");
+ // Generally programs should not be accessing these directly but it might make things smoother
+ // to just set them anyway. These are set here to make sure that in case of a the derived class
+ // overrides
+ program.INPUT = input;
+ program.REFERENCE_SEQUENCE = reference;
+
+ return program;
+ }
+ },
+ MeanQualityByCycle {
+ @Override
+ public boolean needsReferenceSequence() {
+ return false;
+ }
+ @Override
+ public SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference) {
+ final MeanQualityByCycle program = new MeanQualityByCycle();
+ program.OUTPUT = new File(outbase + ".quality_by_cycle_metrics");
+ program.CHART_OUTPUT = new File(outbase + ".quality_by_cycle.pdf");
+ // Generally programs should not be accessing these directly but it might make things smoother
+ // to just set them anyway. These are set here to make sure that in case of a the derived class
+ // overrides
+ program.INPUT = input;
+ program.REFERENCE_SEQUENCE = reference;
+
+ return program;
+ }
+ },
+ CollectBaseDistributionByCycle {
+ @Override
+ public boolean needsReferenceSequence() {
+ return false;
+ }
+ @Override
+ public SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference) {
+ final CollectBaseDistributionByCycle program = new CollectBaseDistributionByCycle();
+ program.OUTPUT = new File(outbase + ".base_distribution_by_cycle_metrics");
+ program.CHART_OUTPUT = new File(outbase + ".base_distribution_by_cycle.pdf");
+ // Generally programs should not be accessing these directly but it might make things smoother
+ // to just set them anyway. These are set here to make sure that in case of a the derived class
+ // overrides
+ program.INPUT = input;
+ program.REFERENCE_SEQUENCE = reference;
+
+ return program;
+ }
+ },
+ CollectGcBiasMetrics {
+ @Override
+ public boolean needsReferenceSequence() {
+ return true;
+ }
+ @Override
+ public SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference) {
+ final CollectGcBiasMetrics program = new CollectGcBiasMetrics();
+ program.OUTPUT = new File(outbase + ".gc_bias.detail_metrics");
+ program.SUMMARY_OUTPUT = new File(outbase + ".gc_bias.summary_metrics");
+ program.CHART_OUTPUT = new File(outbase + ".gc_bias.pdf");
+
+ program.INPUT = input;
+ program.METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS,
+ MetricAccumulationLevel.LIBRARY);
+ program.WINDOW_SIZE = 100;
+ program.MINIMUM_GENOME_FRACTION = 1.0E-5;
+ program.IS_BISULFITE_SEQUENCED = false;
+ program.ASSUME_SORTED = false;
+
+ //GC_Bias actually uses the class-level REFERENCE_SEQUENCE variable.
+ program.REFERENCE_SEQUENCE = reference;
+
+ return program;
+ }
+ },
+ RnaSeqMetrics {
+ @Override
+ public boolean needsReferenceSequence() {
+ return true;
+ }
+ @Override
+ public SinglePassSamProgram makeInstance(final String outbase, final File input, final File reference) {
+ final CollectRnaSeqMetrics program = new CollectRnaSeqMetrics();
+ program.OUTPUT = new File(outbase + ".rna_metrics");
+ program.CHART_OUTPUT = new File(outbase + ".rna_coverage.pdf");
+ // Generally programs should not be accessing these directly but it might make things smoother
+ // to just set them anyway. These are set here to make sure that in case of a the derived class
+ // overrides
+ program.INPUT = input;
+ program.REFERENCE_SEQUENCE = reference;
+
+ return program;
+ }
+ }
+ }
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input SAM or BAM file.")
+ public File INPUT;
+
+
+ @Option(doc = "If true (default), then the sort order in the header file will be ignored.",
+ shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
+ public boolean ASSUME_SORTED = true;
+
+ @Option(doc = "Stop after processing N reads, mainly for debugging.")
+ public int STOP_AFTER = 0;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Base name of output files.")
+ public String OUTPUT;
+
+ @Option(doc = "List of metrics programs to apply during the pass through the SAM file.")
+ public List<Program> PROGRAM = CollectionUtil.makeList(Program.CollectAlignmentSummaryMetrics, Program.CollectBaseDistributionByCycle,
+ Program.CollectInsertSizeMetrics, Program.MeanQualityByCycle, Program.QualityScoreDistribution);
+
+ /**
+ * Contents of PROGRAM list is transferred to this list during command-line validation, so that an outside
+ * developer can invoke this class programmatically and provide alternative Programs to run by calling
+ * setProgramsToRun().
+ */
+ private List<ProgramInterface> programsToRun;
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new CollectMultipleMetrics().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (PROGRAM.isEmpty()) {
+ return new String[]{"No programs specified with PROGRAM"};
+ }
+ programsToRun = new ArrayList<ProgramInterface>(PROGRAM);
+ return super.customCommandLineValidation();
+ }
+
+ /**
+ * Use this method when invoking CollectMultipleMetrics programmatically to run programs other than the ones
+ * available via enum. This must be called before doWork().
+ */
+ public void setProgramsToRun(final List<ProgramInterface> programsToRun) {
+ this.programsToRun = programsToRun;
+ }
+
+ @Override
+ public int doWork() {
+ if (OUTPUT.endsWith(".")) {
+ OUTPUT = OUTPUT.substring(0, OUTPUT.length() - 1);
+ }
+
+ final List<SinglePassSamProgram> programs = new ArrayList<SinglePassSamProgram>();
+ for (final ProgramInterface program : new HashSet<ProgramInterface>(programsToRun)) {
+ if (program.needsReferenceSequence() && REFERENCE_SEQUENCE==null) {
+ throw new PicardException("The " + program.toString() + " program needs a Reference Sequence, please set REFERENCE_SEQUENCE in the command line");
+ }
+ final SinglePassSamProgram instance = program.makeInstance(OUTPUT, INPUT, REFERENCE_SEQUENCE);
+
+ // Generally programs should not be accessing these directly but it might make things smoother
+ // to just set them anyway
+ instance.INPUT = INPUT;
+ instance.REFERENCE_SEQUENCE = REFERENCE_SEQUENCE;
+
+ instance.setDefaultHeaders(getDefaultHeaders());
+
+ programs.add(instance);
+ }
+ SinglePassSamProgram.makeItSo(INPUT, REFERENCE_SEQUENCE, ASSUME_SORTED, STOP_AFTER, programs);
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/analysis/CollectOxoGMetrics.java b/src/java/picard/analysis/CollectOxoGMetrics.java
new file mode 100644
index 0000000..5392ba4
--- /dev/null
+++ b/src/java/picard/analysis/CollectOxoGMetrics.java
@@ -0,0 +1,458 @@
+package picard.analysis;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.filter.DuplicateReadFilter;
+import htsjdk.samtools.filter.InsertSizeFilter;
+import htsjdk.samtools.filter.NotPrimaryAlignmentFilter;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.ListMap;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.SamLocusIterator;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.DbSnpBitSetUtil;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CodeUtil.getOrElse;
+import static htsjdk.samtools.util.SequenceUtil.generateAllKmers;
+import static java.lang.Math.log10;
+
+/**
+ * Class for trying to quantify the CpCG->CpCA error rate.
+ */
+ at CommandLineProgramProperties(
+ usage = CollectOxoGMetrics.USAGE,
+ usageShort = CollectOxoGMetrics.USAGE,
+ programGroup = Metrics.class
+)
+public class CollectOxoGMetrics extends CommandLineProgram {
+ static final String USAGE = "Collects metrics quantifying the CpCG -> CpCA error rate from the provided SAM/BAM";
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "Input BAM file for analysis.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "Location of output metrics file to write.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME,
+ doc = "Reference sequence to which BAM is aligned.")
+ public File REFERENCE_SEQUENCE;
+
+ @Option(doc = "An optional list of intervals to restrict analysis to.",
+ optional = true)
+ public File INTERVALS;
+
+ @Option(doc = "VCF format dbSNP file, used to exclude regions around known polymorphisms from analysis.",
+ optional = true)
+ public File DB_SNP;
+
+ @Option(shortName = "Q",
+ doc = "The minimum base quality score for a base to be included in analysis.")
+ public int MINIMUM_QUALITY_SCORE = 20;
+
+ @Option(shortName = "MQ",
+ doc = "The minimum mapping quality score for a base to be included in analysis.")
+ public int MINIMUM_MAPPING_QUALITY = 30;
+
+ @Option(shortName = "MIN_INS",
+ doc = "The minimum insert size for a read to be included in analysis. Set of 0 to allow unpaired reads.")
+ public int MINIMUM_INSERT_SIZE = 60;
+
+ @Option(shortName = "MAX_INS",
+ doc = "The maximum insert size for a read to be included in analysis. Set of 0 to allow unpaired reads.")
+ public int MAXIMUM_INSERT_SIZE = 600;
+
+ @Option(doc = "When available, use original quality scores for filtering.")
+ public boolean USE_OQ = true;
+
+ @Option(doc = "The number of context bases to include on each side of the assayed G/C base.")
+ public int CONTEXT_SIZE = 1;
+
+ @Option(doc = "The optional set of sequence contexts to restrict analysis to. If not supplied all contexts are analyzed.")
+ public Set<String> CONTEXTS = new HashSet<String>();
+
+ @Option(doc = "For debugging purposes: stop after visiting this many sites with at least 1X coverage.")
+ public int STOP_AFTER = Integer.MAX_VALUE;
+
+ private final Log log = Log.getInstance(CollectOxoGMetrics.class);
+ private static final String UNKNOWN_LIBRARY = "UnknownLibrary";
+ private static final String UNKNOWN_SAMPLE = "UnknownSample";
+
+ /** Metrics class for outputs. */
+ public static final class CpcgMetrics extends MetricBase {
+ /** The name of the sample being assayed. */
+ public String SAMPLE_ALIAS;
+ /** The name of the library being assayed. */
+ public String LIBRARY;
+ /** The sequence context being reported on. */
+ public String CONTEXT;
+ /** The total number of sites that had at least one base covering them. */
+ public int TOTAL_SITES;
+ /** The total number of basecalls observed at all sites. */
+ public long TOTAL_BASES;
+ /** The number of reference alleles observed as C in read 1 and G in read 2. */
+ public long REF_NONOXO_BASES;
+ /** The number of reference alleles observed as G in read 1 and C in read 2. */
+ public long REF_OXO_BASES;
+ /** The total number of reference alleles observed */
+ public long REF_TOTAL_BASES;
+ /**
+ * The count of observed A basecalls at C reference positions and T basecalls
+ * at G reference bases that are correlated to instrument read number in a way
+ * that rules out oxidation as the cause
+ */
+ public long ALT_NONOXO_BASES;
+ /**
+ * The count of observed A basecalls at C reference positions and T basecalls
+ * at G reference bases that are correlated to instrument read number in a way
+ * that is consistent with oxidative damage.
+ */
+ public long ALT_OXO_BASES;
+ /** The oxo error rate, calculated as max(ALT_OXO_BASES - ALT_NONOXO_BASES, 1) / TOTAL_BASES */
+ public double OXIDATION_ERROR_RATE;
+ /** -10 * log10(OXIDATION_ERROR_RATE) */
+ public double OXIDATION_Q;
+
+ // Fields below this point are metrics that are calculated to see if there is oxidative damage that is
+ // biased toward the reference base - i.e. occurs more where the reference base is a C vs. a G or vice
+ // versa.
+
+ /** The number of ref basecalls observed at sites where the genome reference == C. */
+ public long C_REF_REF_BASES;
+ /** The number of ref basecalls observed at sites where the genome reference == G. */
+ public long G_REF_REF_BASES;
+ /** The number of alt (A/T) basecalls observed at sites where the genome reference == C. */
+ public long C_REF_ALT_BASES;
+ /** The number of alt (A/T) basecalls observed at sites where the genome reference == G. */
+ public long G_REF_ALT_BASES;
+
+ /**
+ * The rate at which C>A and G>T substitutions are observed at C reference sites above the expected rate if there
+ * were no bias between sites with a C reference base vs. a G reference base.
+ */
+ public double C_REF_OXO_ERROR_RATE;
+ /** C_REF_OXO_ERROR_RATE expressed as a phred-scaled quality score. */
+ public double C_REF_OXO_Q;
+ /**
+ * The rate at which C>A and G>T substitutions are observed at G reference sites above the expected rate if there
+ * were no bias between sites with a C reference base vs. a G reference base.
+ */
+ public double G_REF_OXO_ERROR_RATE;
+ /** G_REF_OXO_ERROR_RATE expressed as a phred-scaled quality score. */
+ public double G_REF_OXO_Q;
+ }
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new CollectOxoGMetrics().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final int size = 1 + 2 * CONTEXT_SIZE;
+ final List<String> messages = new ArrayList<String>();
+
+ for (final String ctx : CONTEXTS) {
+ if (ctx.length() != size) {
+ messages.add("Context " + ctx + " is not " + size + " long as implied by CONTEXT_SIZE=" + CONTEXT_SIZE);
+ } else if (ctx.charAt(ctx.length() / 2) != 'C') {
+ messages.add("Middle base of context sequence " + ctx + " must be C");
+ }
+ }
+
+ if (MINIMUM_INSERT_SIZE < 0) messages.add("MINIMUM_INSERT_SIZE cannot be negative");
+ if (MAXIMUM_INSERT_SIZE < 0) messages.add("MAXIMUM_INSERT_SIZE cannot be negative");
+ if (MAXIMUM_INSERT_SIZE < MINIMUM_INSERT_SIZE) {
+ messages.add("MAXIMUM_INSERT_SIZE cannot be less than MINIMUM_INSERT_SIZE");
+ }
+
+ return messages.isEmpty() ? null : messages.toArray(new String[messages.size()]);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ if (INTERVALS != null) IOUtil.assertFileIsReadable(INTERVALS);
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+
+ final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(REFERENCE_SEQUENCE);
+ final SamReader in = SamReaderFactory.makeDefault().open(INPUT);
+
+ final Set<String> samples = new HashSet<String>();
+ final Set<String> libraries = new HashSet<String>();
+ for (final SAMReadGroupRecord rec : in.getFileHeader().getReadGroups()) {
+ samples.add(getOrElse(rec.getSample(), UNKNOWN_SAMPLE));
+ libraries.add(getOrElse(rec.getLibrary(), UNKNOWN_LIBRARY));
+ }
+
+ // Setup the calculators
+ final Set<String> contexts = CONTEXTS.isEmpty() ? makeContextStrings(CONTEXT_SIZE) : CONTEXTS;
+ final ListMap<String, Calculator> calculators = new ListMap<String, Calculator>();
+ for (final String context : contexts) {
+ for (final String library : libraries) {
+ calculators.add(context, new Calculator(library, context));
+ }
+ }
+
+ // Load up dbSNP if available
+ log.info("Loading dbSNP File: " + DB_SNP);
+ final DbSnpBitSetUtil dbSnp;
+ if (DB_SNP != null) dbSnp = new DbSnpBitSetUtil(DB_SNP, in.getFileHeader().getSequenceDictionary());
+ else dbSnp = null;
+
+ // Make an iterator that will filter out funny looking things
+ final SamLocusIterator iterator;
+ if (INTERVALS != null) {
+ final IntervalList intervals = IntervalList.fromFile(INTERVALS);
+ iterator = new SamLocusIterator(in, intervals.uniqued(), false);
+ } else {
+ iterator = new SamLocusIterator(in);
+ }
+ iterator.setEmitUncoveredLoci(false);
+ iterator.setMappingQualityScoreCutoff(MINIMUM_MAPPING_QUALITY);
+
+ final List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
+ filters.add(new NotPrimaryAlignmentFilter());
+ filters.add(new DuplicateReadFilter());
+ if (MINIMUM_INSERT_SIZE > 0 || MAXIMUM_INSERT_SIZE > 0) {
+ filters.add(new InsertSizeFilter(MINIMUM_INSERT_SIZE, MAXIMUM_INSERT_SIZE));
+ }
+ iterator.setSamFilters(filters);
+
+ log.info("Starting iteration.");
+ long nextLogTime = 0;
+ int sites = 0;
+
+ for (final SamLocusIterator.LocusInfo info : iterator) {
+ // Skip dbSNP sites
+ final String chrom = info.getSequenceName();
+ final int pos = info.getPosition();
+ final int index = pos - 1;
+ if (dbSnp != null && dbSnp.isDbSnpSite(chrom, pos)) continue;
+
+ // Skip sites at the end of chromosomes
+ final byte[] bases = refWalker.get(info.getSequenceIndex()).getBases();
+ if (pos < 3 || pos > bases.length - 3) continue;
+
+ // Skip non C-G bases
+ final byte base = StringUtil.toUpperCase(bases[index]);
+ if (base != 'C' && base != 'G') continue;
+
+ // Get the context string
+ final String context;
+ {
+ final String tmp = StringUtil.bytesToString(bases, index - CONTEXT_SIZE, 1 + (2 * CONTEXT_SIZE)).toUpperCase();
+ if (base == 'C') context = tmp;
+ else /* if G */ context = SequenceUtil.reverseComplement(tmp);
+ }
+
+ final List<Calculator> calculatorsForContext = calculators.get(context);
+ if (calculatorsForContext == null) continue; // happens if we get ambiguous bases in the reference
+ for (final Calculator calc : calculatorsForContext) calc.accept(info, base);
+
+ // See if we need to stop
+ if (++sites % 100 == 0) {
+ final long now = System.currentTimeMillis();
+ if (now > nextLogTime) {
+ log.info("Visited " + sites + " sites of interest. Last site: " + chrom + ":" + pos);
+ nextLogTime = now + 60000;
+ }
+ }
+ if (sites >= STOP_AFTER) break;
+ }
+
+ final MetricsFile<CpcgMetrics, Integer> file = getMetricsFile();
+ for (final List<Calculator> calcs : calculators.values()) {
+ for (final Calculator calc : calcs) {
+ final CpcgMetrics m = calc.finish();
+ m.SAMPLE_ALIAS = StringUtil.join(",", new ArrayList<String>(samples));
+ file.addMetric(m);
+ }
+ }
+
+ file.write(OUTPUT);
+ CloserUtil.close(in);
+ return 0;
+ }
+
+ private Set<String> makeContextStrings(final int contextSize) {
+ final Set<String> contexts = new HashSet<String>();
+
+ for (final byte[] kmer : generateAllKmers(2 * contextSize + 1)) {
+ if (kmer[contextSize] == 'C') {
+ contexts.add(StringUtil.bytesToString(kmer));
+ }
+ }
+
+ log.info("Generated " + contexts.size() + " context strings.");
+ return contexts;
+ }
+
+ /** A little class for counting alleles. */
+ private static class Counts {
+ int controlA;
+ int oxidatedA;
+ int controlC;
+ int oxidatedC;
+
+ int total() { return controlC + oxidatedC + controlA + oxidatedA; }
+ }
+
+ /**
+ * Class that calculated CpCG metrics for a specific library.
+ */
+ private class Calculator {
+ private final String library;
+ private final String context;
+
+ // Things to be accumulated
+ int sites = 0;
+ long refCcontrolA = 0;
+ long refCoxidatedA = 0;
+ long refCcontrolC = 0;
+ long refCoxidatedC = 0;
+ long refGcontrolA = 0;
+ long refGoxidatedA = 0;
+ long refGcontrolC = 0;
+ long refGoxidatedC = 0;
+
+ Calculator(final String library, final String context) {
+ this.library = library;
+ this.context = context;
+ }
+
+ void accept(final SamLocusIterator.LocusInfo info, final byte refBase) {
+ final Counts counts = computeAlleleFraction(info, refBase);
+
+ if (counts.total() > 0) {
+ // Things calculated on all sites with coverage
+ this.sites++;
+ if (refBase == 'C') {
+ this.refCcontrolA += counts.controlA;
+ this.refCoxidatedA += counts.oxidatedA;
+ this.refCcontrolC += counts.controlC;
+ this.refCoxidatedC += counts.oxidatedC;
+ } else if (refBase == 'G') {
+ this.refGcontrolA += counts.controlA;
+ this.refGoxidatedA += counts.oxidatedA;
+ this.refGcontrolC += counts.controlC;
+ this.refGoxidatedC += counts.oxidatedC;
+ } else {
+ throw new IllegalStateException("Reference bases other than G and C not supported.");
+ }
+ }
+ }
+
+ CpcgMetrics finish() {
+ final CpcgMetrics m = new CpcgMetrics();
+ m.LIBRARY = this.library;
+ m.CONTEXT = this.context;
+ m.TOTAL_SITES = this.sites;
+ m.TOTAL_BASES = this.refCcontrolC + this.refCoxidatedC + this.refCcontrolA + this.refCoxidatedA +
+ this.refGcontrolC + this.refGoxidatedC + this.refGcontrolA + this.refGoxidatedA;
+ m.REF_OXO_BASES = this.refCoxidatedC + refGoxidatedC;
+ m.REF_NONOXO_BASES = this.refCcontrolC + this.refGcontrolC;
+ m.REF_TOTAL_BASES = m.REF_OXO_BASES + m.REF_NONOXO_BASES;
+ m.ALT_NONOXO_BASES = this.refCcontrolA + this.refGcontrolA;
+ m.ALT_OXO_BASES = this.refCoxidatedA + this.refGoxidatedA;
+
+ /**
+ * Why do we calculate the oxo error rate using oxidatedA - controlA you ask? We know that all the
+ * bases counted in oxidatedA are consistent with 8-oxo-G damage during shearing, but not all of them
+ * will have been caused by this. If we assume that C>A errors caused by other factors will occur randomly
+ * with respect to read1/read2, then we should see as many in the 8-oxo-G consistent state as not. So we
+ * assume that controlA is half the story, and remove the other half from oxidatedA.
+ */
+ m.OXIDATION_ERROR_RATE = Math.max(m.ALT_OXO_BASES - m.ALT_NONOXO_BASES, 1) / (double) m.TOTAL_BASES;
+ m.OXIDATION_Q = -10 * log10(m.OXIDATION_ERROR_RATE);
+
+ /** Now look for things that have a reference base bias! */
+ m.C_REF_REF_BASES = this.refCcontrolC + this.refCoxidatedC;
+ m.G_REF_REF_BASES = this.refGcontrolC + this.refGoxidatedC;
+ m.C_REF_ALT_BASES = this.refCcontrolA + this.refCoxidatedA;
+ m.G_REF_ALT_BASES = this.refGcontrolA + this.refGoxidatedA;
+
+ final double cRefErrorRate = m.C_REF_ALT_BASES / (double) (m.C_REF_ALT_BASES + m.C_REF_REF_BASES);
+ final double gRefErrorRate = m.G_REF_ALT_BASES / (double) (m.G_REF_ALT_BASES + m.G_REF_REF_BASES);
+
+ m.C_REF_OXO_ERROR_RATE = Math.max(cRefErrorRate - gRefErrorRate, 1e-10);
+ m.G_REF_OXO_ERROR_RATE = Math.max(gRefErrorRate - cRefErrorRate, 1e-10);
+ m.C_REF_OXO_Q = -10 * log10(m.C_REF_OXO_ERROR_RATE);
+ m.G_REF_OXO_Q = -10 * log10(m.G_REF_OXO_ERROR_RATE);
+
+ return m;
+ }
+
+ /**
+ *
+ */
+ private Counts computeAlleleFraction(final SamLocusIterator.LocusInfo info, final byte refBase) {
+ final Counts counts = new Counts();
+ final byte altBase = (refBase == 'C') ? (byte) 'A' : (byte) 'T';
+
+ for (final SamLocusIterator.RecordAndOffset rec : info.getRecordAndPositions()) {
+ final byte qual;
+ final SAMRecord samrec = rec.getRecord();
+
+ if (USE_OQ) {
+ final byte[] oqs = samrec.getOriginalBaseQualities();
+ if (oqs != null) qual = oqs[rec.getOffset()];
+ else qual = rec.getBaseQuality();
+ } else {
+ qual = rec.getBaseQuality();
+ }
+
+ // Skip if below qual, or if library isn't a match
+ if (qual < MINIMUM_QUALITY_SCORE) continue;
+ if (!this.library.equals(getOrElse(samrec.getReadGroup().getLibrary(), UNKNOWN_LIBRARY))) continue;
+
+ // Get the read base, and get it in "as read" orientation
+ final byte base = rec.getReadBase();
+ final byte baseAsRead = samrec.getReadNegativeStrandFlag() ? SequenceUtil.complement(base) : base;
+ final int read = samrec.getReadPairedFlag() && samrec.getSecondOfPairFlag() ? 2 : 1;
+
+ // Figure out how to count the alternative allele. If the damage is caused by oxidation of G
+ // during shearing (in non-rnaseq data), then we know that:
+ // G>T observation is always in read 1
+ // C>A observation is always in read 2
+ // But if the substitution is from other causes the distribution of A/T across R1/R2 will be
+ // random.
+ if (base == refBase) {
+ if (baseAsRead == 'G' && read == 1) ++counts.oxidatedC;
+ else if (baseAsRead == 'G' && read == 2) ++counts.controlC;
+ else if (baseAsRead == 'C' && read == 1) ++counts.controlC;
+ else if (baseAsRead == 'C' && read == 2) ++counts.oxidatedC;
+ } else if (base == altBase) {
+ if (baseAsRead == 'T' && read == 1) ++counts.oxidatedA;
+ else if (baseAsRead == 'T' && read == 2) ++counts.controlA;
+ else if (baseAsRead == 'A' && read == 1) ++counts.controlA;
+ else if (baseAsRead == 'A' && read == 2) ++counts.oxidatedA;
+ }
+ }
+
+ return counts;
+ }
+ }
+}
diff --git a/src/java/picard/analysis/CollectQualityYieldMetrics.java b/src/java/picard/analysis/CollectQualityYieldMetrics.java
new file mode 100644
index 0000000..4753e18
--- /dev/null
+++ b/src/java/picard/analysis/CollectQualityYieldMetrics.java
@@ -0,0 +1,179 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+
+import java.io.File;
+
+/**
+ * Command line program to calibrate quality yield metrics
+ *
+ * @author Martha Borkan
+ */
+ at CommandLineProgramProperties(
+ usage = "Collects quality yield metrics, a set of metrics that quantify the quality and yield of sequence data from a " +
+ "SAM/BAM input file.",
+ usageShort = "Collects a set of metrics that quantify the quality and yield of sequence data from the provided SAM/BAM",
+ programGroup = Metrics.class
+)
+public class CollectQualityYieldMetrics extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "A SAM or BAM file to process.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "The metrics file to write with quality yield metrics.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.USE_ORIGINAL_QUALITIES_SHORT_NAME,
+ doc = "If available in the OQ tag, use the original quality scores " +
+ "as inputs instead of the quality scores in the QUAL field.")
+ public boolean USE_ORIGINAL_QUALITIES = true;
+
+ /** Stock main method for a command line program. */
+ public static void main(final String[] argv) {
+ new CollectQualityYieldMetrics().instanceMainWithExit(argv);
+ }
+
+ /**
+ * Main method for the program. Checks that all input files are present and
+ * readable and that the output file can be written to. Then iterates through
+ * all the records accumulating metrics. Finally writes metrics file
+ */
+ protected int doWork() {
+ final Log log = Log.getInstance(getClass());
+ final ProgressLogger progress = new ProgressLogger(log);
+
+ // Some quick parameter checking
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ log.info("Reading input file and calculating metrics.");
+
+ final SamReader sam = SamReaderFactory.makeDefault().open(INPUT);
+
+ final MetricsFile<QualityYieldMetrics, Integer> metricsFile = getMetricsFile();
+ final QualityYieldMetrics metrics = new QualityYieldMetrics();
+
+ for (final SAMRecord rec : sam) {
+ metrics.TOTAL_READS++;
+ final int length = rec.getReadLength();
+
+ final boolean isPfRead = !rec.getReadFailsVendorQualityCheckFlag();
+ if (isPfRead) {
+ metrics.PF_READS++;
+ metrics.PF_BASES += length;
+ }
+
+ metrics.TOTAL_BASES += length;
+
+ final byte[] quals;
+ if (USE_ORIGINAL_QUALITIES) {
+ byte[] tmp = rec.getOriginalBaseQualities();
+ if (tmp == null) tmp = rec.getBaseQualities();
+ quals = tmp;
+ } else {
+ quals = rec.getBaseQualities();
+ }
+
+ // add up quals, and quals >= 20
+ for (int i = 0; i < quals.length; ++i) {
+ metrics.Q20_EQUIVALENT_YIELD += quals[i];
+ if (quals[i] >= 20) metrics.Q20_BASES++;
+ if (quals[i] >= 30) metrics.Q30_BASES++;
+
+ if (isPfRead) {
+ metrics.PF_Q20_EQUIVALENT_YIELD += quals[i];
+ if (quals[i] >= 20) metrics.PF_Q20_BASES++;
+ if (quals[i] >= 30) metrics.PF_Q30_BASES++;
+ }
+ }
+
+ progress.record(rec);
+ }
+
+ metrics.READ_LENGTH = metrics.TOTAL_READS == 0 ? 0 : (int) (metrics.TOTAL_BASES / metrics.TOTAL_READS);
+ metrics.Q20_EQUIVALENT_YIELD = metrics.Q20_EQUIVALENT_YIELD / 20;
+ metrics.PF_Q20_EQUIVALENT_YIELD = metrics.PF_Q20_EQUIVALENT_YIELD / 20;
+
+ metricsFile.addMetric(metrics);
+ metricsFile.write(OUTPUT);
+
+ return 0;
+ }
+
+ /** A set of metrics used to describe the general quality of a BAM file */
+ public static class QualityYieldMetrics extends MetricBase {
+
+ /** The total number of reads in the input file */
+ public int TOTAL_READS = 0;
+
+ /** The number of reads that are PF - pass filter */
+ public int PF_READS = 0;
+
+ /** The average read length of all the reads (will be fixed for a lane) */
+ public int READ_LENGTH = 0;
+
+ /** The total number of bases in all reads */
+ public long TOTAL_BASES;
+
+ /** The total number of bases in all PF reads */
+ public long PF_BASES = 0;
+
+ /** The number of bases in all reads that achieve quality score 20 or higher */
+ public long Q20_BASES = 0;
+
+ /** The number of bases in PF reads that achieve quality score 20 or higher */
+ public long PF_Q20_BASES = 0;
+
+ /** The number of bases in all reads that achieve quality score 20 or higher */
+ public long Q30_BASES = 0;
+
+ /** The number of bases in PF reads that achieve quality score 20 or higher */
+ public long PF_Q30_BASES = 0;
+
+ /** The sum of quality scores of all bases divided by 20 */
+ public long Q20_EQUIVALENT_YIELD = 0;
+
+ /** The sum of quality scores of all bases divided by 20 */
+ public long PF_Q20_EQUIVALENT_YIELD = 0;
+
+ }
+
+}
diff --git a/src/java/picard/analysis/CollectRawWgsMetrics.java b/src/java/picard/analysis/CollectRawWgsMetrics.java
new file mode 100644
index 0000000..d6305fc
--- /dev/null
+++ b/src/java/picard/analysis/CollectRawWgsMetrics.java
@@ -0,0 +1,37 @@
+package picard.analysis;
+
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+
+/**
+ * Computes a number of metrics that are useful for evaluating coverage and performance of whole genome sequencing experiments, same implementation as CollectWgsMetrics, with different defaults: lacks baseQ and mappingQ filters and has much higher coverage cap.
+ *
+ * @author farjoun
+ */
+ at CommandLineProgramProperties(
+ usage = "Computes a number of metrics that are useful for evaluating coverage and performance of " +
+ "whole genome sequencing experiments. Defaults are different than for CollectWgsMetrics.",
+ usageShort = "Writes whole genome sequencing-related metrics for a SAM or BAM file",
+ programGroup = Metrics.class
+)
+public class CollectRawWgsMetrics extends CollectWgsMetrics{
+
+ @Option(shortName="MQ", doc="Minimum mapping quality for a read to contribute coverage.")
+ public int MINIMUM_MAPPING_QUALITY = 0;
+
+ @Option(shortName="Q", doc="Minimum base quality for a base to contribute coverage.")
+ public int MINIMUM_BASE_QUALITY = 3;
+
+ @Option(shortName="CAP", doc="Treat bases with coverage exceeding this value as if they had coverage at this value.")
+ public int COVERAGE_CAP = 100000;
+
+ // rename the class so that in the metric file it is annotated differently.
+ public static class RawWgsMetrics extends WgsMetrics {}
+
+ @Override
+ protected WgsMetrics generateWgsMetrics() {
+ return new RawWgsMetrics();
+ }
+
+}
diff --git a/src/java/picard/analysis/CollectRnaSeqMetrics.java b/src/java/picard/analysis/CollectRnaSeqMetrics.java
new file mode 100644
index 0000000..b205a28
--- /dev/null
+++ b/src/java/picard/analysis/CollectRnaSeqMetrics.java
@@ -0,0 +1,156 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.OverlapDetector;
+import picard.PicardException;
+import picard.analysis.directed.RnaSeqMetricsCollector;
+import picard.annotation.Gene;
+import picard.annotation.GeneAnnotationReader;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.RExecutor;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+ at CommandLineProgramProperties(
+ usage = "Collect metrics about the alignment of RNA to various functional classes of loci in the genome:" +
+ "coding, intronic, UTR, intergenic, ribosomal. Also determines strand-specificity for strand-specific libraries.",
+ usageShort = "Produces RNA alignment metrics for a SAM or BAM file",
+ programGroup = Metrics.class
+)
+public class CollectRnaSeqMetrics extends SinglePassSamProgram {
+ private static final Log LOG = Log.getInstance(CollectRnaSeqMetrics.class);
+
+ @Option(doc="Gene annotations in refFlat form. Format described here: http://genome.ucsc.edu/goldenPath/gbdDescriptionsOld.html#RefFlat")
+ public File REF_FLAT;
+
+ @Option(doc="Location of rRNA sequences in genome, in interval_list format. " +
+ "If not specified no bases will be identified as being ribosomal. " +
+ "Format described here: http://samtools.github.io/htsjdk/javadoc/htsjdk/htsjdk/samtools/util/IntervalList.html", optional = true)
+ public File RIBOSOMAL_INTERVALS;
+
+ @Option(shortName = "STRAND", doc="For strand-specific library prep. " +
+ "For unpaired reads, use FIRST_READ_TRANSCRIPTION_STRAND if the reads are expected to be on the transcription strand.")
+ public RnaSeqMetricsCollector.StrandSpecificity STRAND_SPECIFICITY;
+
+ @Option(doc="When calculating coverage based values (e.g. CV of coverage) only use transcripts of this length or greater.")
+ public int MINIMUM_LENGTH = 500;
+
+ @Option(doc="The PDF file to write out a plot of normalized position vs. coverage.", shortName="CHART", optional = true)
+ public File CHART_OUTPUT;
+
+ @Option(doc="If a read maps to a sequence specified with this option, all the bases in the read are counted as ignored bases. " +
+ "These reads are not counted as ")
+ public Set<String> IGNORE_SEQUENCE = new HashSet<String>();
+
+ @Option(doc="This percentage of the length of a fragment must overlap one of the ribosomal intervals for a read or read pair by this must in order to be considered rRNA.")
+ public double RRNA_FRAGMENT_PERCENTAGE = 0.8;
+
+ @Option(shortName="LEVEL", doc="The level(s) at which to accumulate metrics. ")
+ private final Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
+
+ private RnaSeqMetricsCollector collector;
+
+ /**
+ * A subtitle for the plot, usually corresponding to a library.
+ */
+ private String plotSubtitle = "";
+
+ /** Required main method implementation. */
+ public static void main(final String[] argv) {
+ new CollectRnaSeqMetrics().instanceMainWithExit(argv);
+ }
+
+ @Override
+ protected void setup(final SAMFileHeader header, final File samFile) {
+
+ if (CHART_OUTPUT != null) IOUtil.assertFileIsWritable(CHART_OUTPUT);
+
+ final OverlapDetector<Gene> geneOverlapDetector = GeneAnnotationReader.loadRefFlat(REF_FLAT, header.getSequenceDictionary());
+ LOG.info("Loaded " + geneOverlapDetector.getAll().size() + " genes.");
+
+ final Long ribosomalBasesInitialValue = RIBOSOMAL_INTERVALS != null ? 0L : null;
+ final OverlapDetector<Interval> ribosomalSequenceOverlapDetector = RnaSeqMetricsCollector.makeOverlapDetector(samFile, header, RIBOSOMAL_INTERVALS);
+
+ final HashSet<Integer> ignoredSequenceIndices = RnaSeqMetricsCollector.makeIgnoredSequenceIndicesSet(header, IGNORE_SEQUENCE);
+
+ collector = new RnaSeqMetricsCollector(METRIC_ACCUMULATION_LEVEL, header.getReadGroups(), ribosomalBasesInitialValue,
+ geneOverlapDetector, ribosomalSequenceOverlapDetector, ignoredSequenceIndices, MINIMUM_LENGTH, STRAND_SPECIFICITY, RRNA_FRAGMENT_PERCENTAGE,
+ true);
+
+ // If we're working with a single library, assign that library's name as a suffix to the plot title
+ final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
+ if (readGroups.size() == 1) {
+ this.plotSubtitle = readGroups.get(0).getLibrary();
+ if (null == this.plotSubtitle) this.plotSubtitle = "";
+ }
+ }
+
+ @Override
+ protected void acceptRead(final SAMRecord rec, final ReferenceSequence refSeq) {
+ collector.acceptRecord(rec, refSeq);
+ }
+
+ @Override
+ protected void finish() {
+ collector.finish();
+
+ final MetricsFile<RnaSeqMetrics, Integer> file = getMetricsFile();
+ collector.addAllLevelsToFile(file);
+ file.write(OUTPUT);
+
+ boolean atLeastOneHistogram = false;
+ for (final Histogram<Integer> histo : file.getAllHistograms()) {
+ atLeastOneHistogram = atLeastOneHistogram || !histo.isEmpty();
+ }
+ // Generate the coverage by position plot
+ if (CHART_OUTPUT != null && atLeastOneHistogram) {
+ final int rResult = RExecutor.executeFromClasspath("picard/analysis/rnaSeqCoverage.R",
+ OUTPUT.getAbsolutePath(),
+ CHART_OUTPUT.getAbsolutePath(),
+ INPUT.getName(),
+ this.plotSubtitle);
+
+ if (rResult != 0) {
+ throw new PicardException("Problem invoking R to generate plot.");
+ }
+ }
+ }
+
+}
diff --git a/src/java/picard/analysis/CollectRrbsMetrics.java b/src/java/picard/analysis/CollectRrbsMetrics.java
new file mode 100644
index 0000000..16d8eff
--- /dev/null
+++ b/src/java/picard/analysis/CollectRrbsMetrics.java
@@ -0,0 +1,184 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.RExecutor;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Calculates and reports QC metrics for RRBS data based on the methylation status at individual C/G bases as well
+ * as CpG sites across all reads in the input BAM/SAM file.
+ *
+ * @author jgentry at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = CollectRrbsMetrics.USAGE,
+ usageShort = CollectRrbsMetrics.USAGE,
+ programGroup = Metrics.class
+)
+public class CollectRrbsMetrics extends CommandLineProgram {
+ final static String USAGE = "Collects metrics about bisulfite conversion for RRBS data";
+
+ // Path to R file for plotting purposes
+ private static final String R_SCRIPT = "picard/analysis/rrbsQc.R";
+
+ @Option(doc = "The BAM or SAM file containing aligned reads. Must be coordinate sorted", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+ @Option(doc = "Base name for output files", shortName = StandardOptionDefinitions.METRICS_FILE_SHORT_NAME)
+ public String METRICS_FILE_PREFIX;
+ @Option(doc = "The reference sequence fasta file", shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME)
+ public File REFERENCE;
+ @Option(doc = "Minimum read length")
+ public int MINIMUM_READ_LENGTH = 5;
+ @Option(doc = "Threshold for base quality of a C base before it is considered")
+ public int C_QUALITY_THRESHOLD = 20;
+ @Option(doc = "Threshold for quality of a base next to a C before the C base is considered")
+ public int NEXT_BASE_QUALITY_THRESHOLD = 10;
+ @Option(doc = "Maximum percentage of mismatches in a read for it to be considered, with a range of 0-1")
+ public double MAX_MISMATCH_RATE = 0.1;
+ @Option(doc = "Set of sequence names to consider, if not specified all sequences will be used", optional = true)
+ public Set<String> SEQUENCE_NAMES = new HashSet<String>();
+ @Option(shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME,
+ doc = "If true, assume that the input file is coordinate sorted even if the header says otherwise.")
+ public boolean ASSUME_SORTED = false;
+ @Option(shortName = "LEVEL", doc = "The level(s) at which to accumulate metrics. ")
+ public Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
+
+ public static final String DETAIL_FILE_EXTENSION = "rrbs_detail_metrics";
+ public static final String SUMMARY_FILE_EXTENSION = "rrbs_summary_metrics";
+ public static final String PDF_FILE_EXTENSION = "rrbs_qc.pdf";
+
+ private static final Log log = Log.getInstance(CollectRrbsMetrics.class);
+
+ public static void main(final String[] args) {
+ new CollectRrbsMetrics().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ if (!METRICS_FILE_PREFIX.endsWith(".")) {
+ METRICS_FILE_PREFIX = METRICS_FILE_PREFIX + ".";
+ }
+ final File SUMMARY_OUT = new File(METRICS_FILE_PREFIX + SUMMARY_FILE_EXTENSION);
+ final File DETAILS_OUT = new File(METRICS_FILE_PREFIX + DETAIL_FILE_EXTENSION);
+ final File PLOTS_OUT = new File(METRICS_FILE_PREFIX + PDF_FILE_EXTENSION);
+ assertIoFiles(SUMMARY_OUT, DETAILS_OUT, PLOTS_OUT);
+
+ final SamReader samReader = SamReaderFactory.makeDefault().open(INPUT);
+ if (!ASSUME_SORTED && samReader.getFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
+ throw new PicardException("The input file " + INPUT.getAbsolutePath() + " does not appear to be coordinate sorted");
+ }
+
+ final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(REFERENCE);
+ final ProgressLogger progressLogger = new ProgressLogger(log);
+
+ final RrbsMetricsCollector metricsCollector = new RrbsMetricsCollector(METRIC_ACCUMULATION_LEVEL, samReader.getFileHeader().getReadGroups(),
+ C_QUALITY_THRESHOLD, NEXT_BASE_QUALITY_THRESHOLD, MINIMUM_READ_LENGTH, MAX_MISMATCH_RATE);
+
+ for (final SAMRecord samRecord : samReader) {
+ progressLogger.record(samRecord);
+ if (!samRecord.getReadUnmappedFlag() && !isSequenceFiltered(samRecord.getReferenceName())) {
+ final ReferenceSequence referenceSequence = refWalker.get(samRecord.getReferenceIndex());
+ metricsCollector.acceptRecord(samRecord, referenceSequence);
+ }
+ }
+ metricsCollector.finish();
+ final MetricsFile<RrbsMetrics, Comparable<?>> rrbsMetrics = getMetricsFile();
+ metricsCollector.addAllLevelsToFile(rrbsMetrics);
+
+ // Using RrbsMetrics as a way to get both of the metrics objects through the MultiLevelCollector. Once
+ // we get it out split it apart to the two separate MetricsFiles and write them to file
+ final MetricsFile<RrbsSummaryMetrics, ?> summaryFile = getMetricsFile();
+ final MetricsFile<RrbsCpgDetailMetrics, ?> detailsFile = getMetricsFile();
+ for (final RrbsMetrics rrbsMetric : rrbsMetrics.getMetrics()) {
+ summaryFile.addMetric(rrbsMetric.getSummaryMetrics());
+ for (final RrbsCpgDetailMetrics detailMetric : rrbsMetric.getDetailMetrics()) {
+ detailsFile.addMetric(detailMetric);
+ }
+ }
+ summaryFile.write(SUMMARY_OUT);
+ detailsFile.write(DETAILS_OUT);
+ RExecutor.executeFromClasspath(R_SCRIPT, DETAILS_OUT.getAbsolutePath(), SUMMARY_OUT.getAbsolutePath(), PLOTS_OUT.getAbsolutePath());
+ CloserUtil.close(samReader);
+ return 0;
+ }
+
+ private boolean isSequenceFiltered(final String sequenceName) {
+ return (SEQUENCE_NAMES != null) && (SEQUENCE_NAMES.size() > 0) && (!SEQUENCE_NAMES.contains(sequenceName));
+ }
+
+ private void assertIoFiles(final File summaryFile, final File detailsFile, final File plotsFile) {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsReadable(REFERENCE);
+ IOUtil.assertFileIsWritable(summaryFile);
+ IOUtil.assertFileIsWritable(detailsFile);
+ IOUtil.assertFileIsWritable(plotsFile);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final List<String> errorMsgs = new ArrayList<String>();
+ if (MAX_MISMATCH_RATE < 0 || MAX_MISMATCH_RATE > 1) {
+ errorMsgs.add("MAX_MISMATCH_RATE must be in the range of 0-1");
+ }
+
+ if (C_QUALITY_THRESHOLD < 0) {
+ errorMsgs.add("C_QUALITY_THRESHOLD must be >= 0");
+ }
+
+ if (NEXT_BASE_QUALITY_THRESHOLD < 0) {
+ errorMsgs.add("NEXT_BASE_QUALITY_THRESHOLD must be >= 0");
+ }
+
+ if (MINIMUM_READ_LENGTH <= 0) {
+ errorMsgs.add("MINIMUM_READ_LENGTH must be > 0");
+ }
+
+ return errorMsgs.size() == 0 ? null : errorMsgs.toArray(new String[errorMsgs.size()]);
+ }
+}
diff --git a/src/java/picard/analysis/CollectWgsMetrics.java b/src/java/picard/analysis/CollectWgsMetrics.java
new file mode 100644
index 0000000..bfb4a00
--- /dev/null
+++ b/src/java/picard/analysis/CollectWgsMetrics.java
@@ -0,0 +1,314 @@
+package picard.analysis;
+
+import htsjdk.samtools.AlignmentBlock;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.filter.SecondaryAlignmentFilter;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SamLocusIterator;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.util.MathUtil;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * Computes a number of metrics that are useful for evaluating coverage and performance of whole genome sequencing experiments.
+ *
+ * @author tfennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Computes a number of metrics that are useful for evaluating coverage and performance of " +
+ "whole genome sequencing experiments.",
+ usageShort = "Writes whole genome sequencing-related metrics for a SAM or BAM file",
+ programGroup = Metrics.class
+)
+public class CollectWgsMetrics extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input SAM or BAM file.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Output metrics file.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc = "The reference sequence fasta aligned to.")
+ public File REFERENCE_SEQUENCE;
+
+ @Option(shortName = "MQ", doc = "Minimum mapping quality for a read to contribute coverage.", overridable = true)
+ public int MINIMUM_MAPPING_QUALITY = 20;
+
+ @Option(shortName = "Q", doc = "Minimum base quality for a base to contribute coverage.", overridable = true)
+ public int MINIMUM_BASE_QUALITY = 20;
+
+ @Option(shortName = "CAP", doc = "Treat bases with coverage exceeding this value as if they had coverage at this value.", overridable = true)
+ public int COVERAGE_CAP = 250;
+
+ @Option(doc = "For debugging purposes, stop after processing this many genomic bases.")
+ public long STOP_AFTER = -1;
+
+ @Option(doc = "Determines whether to include the base quality histogram in the metrics file.")
+ public boolean INCLUDE_BQ_HISTOGRAM = false;
+
+ private final Log log = Log.getInstance(CollectWgsMetrics.class);
+
+ /** Metrics for evaluating the performance of whole genome sequencing experiments. */
+ public static class WgsMetrics extends MetricBase {
+ /** The number of non-N bases in the genome reference over which coverage will be evaluated. */
+ public long GENOME_TERRITORY;
+ /** The mean coverage in bases of the genome territory, after all filters are applied. */
+ public double MEAN_COVERAGE;
+ /** The standard deviation of coverage of the genome after all filters are applied. */
+ public double SD_COVERAGE;
+ /** The median coverage in bases of the genome territory, after all filters are applied. */
+ public double MEDIAN_COVERAGE;
+ /** The median absolute deviation of coverage of the genome after all filters are applied. */
+ public double MAD_COVERAGE;
+
+ /** The fraction of aligned bases that were filtered out because they were in reads with low mapping quality (default is < 20). */
+ public double PCT_EXC_MAPQ;
+ /** The fraction of aligned bases that were filtered out because they were in reads marked as duplicates. */
+ public double PCT_EXC_DUPE;
+ /** The fraction of aligned bases that were filtered out because they were in reads without a mapped mate pair. */
+ public double PCT_EXC_UNPAIRED;
+ /** The fraction of aligned bases that were filtered out because they were of low base quality (default is < 20). */
+ public double PCT_EXC_BASEQ;
+ /** The fraction of aligned bases that were filtered out because they were the second observation from an insert with overlapping reads. */
+ public double PCT_EXC_OVERLAP;
+ /** The fraction of aligned bases that were filtered out because they would have raised coverage above the capped value (default cap = 250x). */
+ public double PCT_EXC_CAPPED;
+ /** The total fraction of aligned bases excluded due to all filters. */
+ public double PCT_EXC_TOTAL;
+
+ /** The fraction of bases that attained at least 5X sequence coverage in post-filtering bases. */
+ public double PCT_5X;
+ /** The fraction of bases that attained at least 10X sequence coverage in post-filtering bases. */
+ public double PCT_10X;
+ /** The fraction of bases that attained at least 15X sequence coverage in post-filtering bases. */
+ public double PCT_15X;
+ /** The fraction of bases that attained at least 20X sequence coverage in post-filtering bases. */
+ public double PCT_20X;
+ /** The fraction of bases that attained at least 25X sequence coverage in post-filtering bases. */
+ public double PCT_25X;
+ /** The fraction of bases that attained at least 30X sequence coverage in post-filtering bases. */
+ public double PCT_30X;
+ /** The fraction of bases that attained at least 40X sequence coverage in post-filtering bases. */
+ public double PCT_40X;
+ /** The fraction of bases that attained at least 50X sequence coverage in post-filtering bases. */
+ public double PCT_50X;
+ /** The fraction of bases that attained at least 60X sequence coverage in post-filtering bases. */
+ public double PCT_60X;
+ /** The fraction of bases that attained at least 70X sequence coverage in post-filtering bases. */
+ public double PCT_70X;
+ /** The fraction of bases that attained at least 80X sequence coverage in post-filtering bases. */
+ public double PCT_80X;
+ /** The fraction of bases that attained at least 90X sequence coverage in post-filtering bases. */
+ public double PCT_90X;
+ /** The fraction of bases that attained at least 100X sequence coverage in post-filtering bases. */
+ public double PCT_100X;
+ }
+
+ public static void main(final String[] args) {
+ new CollectWgsMetrics().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+
+ // Setup all the inputs
+ final ProgressLogger progress = new ProgressLogger(log, 10000000, "Processed", "loci");
+ final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(REFERENCE_SEQUENCE);
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+
+ final SamLocusIterator iterator = new SamLocusIterator(in);
+ final List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
+ final CountingFilter dupeFilter = new CountingDuplicateFilter();
+ final CountingFilter mapqFilter = new CountingMapQFilter(MINIMUM_MAPPING_QUALITY);
+ final CountingPairedFilter pairFilter = new CountingPairedFilter();
+ filters.add(mapqFilter);
+ filters.add(dupeFilter);
+ filters.add(pairFilter);
+ filters.add(new SecondaryAlignmentFilter()); // Not a counting filter because we never want to count reads twice
+ iterator.setSamFilters(filters);
+ iterator.setEmitUncoveredLoci(true);
+ iterator.setMappingQualityScoreCutoff(0); // Handled separately because we want to count bases
+ iterator.setQualityScoreCutoff(0); // Handled separately because we want to count bases
+ iterator.setIncludeNonPfReads(false);
+
+ final int max = COVERAGE_CAP;
+ final long[] HistogramArray = new long[max + 1];
+ final long[] baseQHistogramArray = new long[Byte.MAX_VALUE];
+ final boolean usingStopAfter = STOP_AFTER > 0;
+ final long stopAfter = STOP_AFTER - 1;
+ long counter = 0;
+
+ long basesExcludedByBaseq = 0;
+ long basesExcludedByOverlap = 0;
+ long basesExcludedByCapping = 0;
+
+ // Loop through all the loci
+ while (iterator.hasNext()) {
+ final SamLocusIterator.LocusInfo info = iterator.next();
+
+ // Check that the reference is not N
+ final ReferenceSequence ref = refWalker.get(info.getSequenceIndex());
+ final byte base = ref.getBases()[info.getPosition() - 1];
+ if (base == 'N') continue;
+
+ // Figure out the coverage while not counting overlapping reads twice, and excluding various things
+ final HashSet<String> readNames = new HashSet<String>(info.getRecordAndPositions().size());
+ int pileupSize = 0;
+ for (final SamLocusIterator.RecordAndOffset recs : info.getRecordAndPositions()) {
+
+ if (recs.getBaseQuality() < MINIMUM_BASE_QUALITY) { ++basesExcludedByBaseq; continue; }
+ if (!readNames.add(recs.getRecord().getReadName())) { ++basesExcludedByOverlap; continue; }
+ pileupSize++;
+ if (pileupSize <= max) {
+ baseQHistogramArray[recs.getRecord().getBaseQualities()[recs.getOffset()]]++;
+ }
+ }
+
+ final int depth = Math.min(readNames.size(), max);
+ if (depth < readNames.size()) basesExcludedByCapping += readNames.size() - max;
+ HistogramArray[depth]++;
+
+ // Record progress and perhaps stop
+ progress.record(info.getSequenceName(), info.getPosition());
+ if (usingStopAfter && ++counter > stopAfter) break;
+ }
+
+ // Construct and write the outputs
+ final Histogram<Integer> histo = new Histogram<Integer>("coverage", "count");
+ for (int i = 0; i < HistogramArray.length; ++i) {
+ histo.increment(i, HistogramArray[i]);
+ }
+
+ // Construct and write the outputs
+ final Histogram<Integer> baseQHisto = new Histogram<Integer>("value", "baseq_count");
+ for (int i=0; i<baseQHistogramArray.length; ++i) {
+ baseQHisto.increment(i, baseQHistogramArray[i]);
+ }
+
+ final WgsMetrics metrics = generateWgsMetrics();
+ metrics.GENOME_TERRITORY = (long) histo.getSumOfValues();
+ metrics.MEAN_COVERAGE = histo.getMean();
+ metrics.SD_COVERAGE = histo.getStandardDeviation();
+ metrics.MEDIAN_COVERAGE = histo.getMedian();
+ metrics.MAD_COVERAGE = histo.getMedianAbsoluteDeviation();
+
+ final long basesExcludedByDupes = dupeFilter.getFilteredBases();
+ final long basesExcludedByMapq = mapqFilter.getFilteredBases();
+ final long basesExcludedByPairing = pairFilter.getFilteredBases();
+ final double total = histo.getSum();
+ final double totalWithExcludes = total + basesExcludedByDupes + basesExcludedByMapq + basesExcludedByPairing + basesExcludedByBaseq + basesExcludedByOverlap + basesExcludedByCapping;
+ metrics.PCT_EXC_DUPE = basesExcludedByDupes / totalWithExcludes;
+ metrics.PCT_EXC_MAPQ = basesExcludedByMapq / totalWithExcludes;
+ metrics.PCT_EXC_UNPAIRED = basesExcludedByPairing / totalWithExcludes;
+ metrics.PCT_EXC_BASEQ = basesExcludedByBaseq / totalWithExcludes;
+ metrics.PCT_EXC_OVERLAP = basesExcludedByOverlap / totalWithExcludes;
+ metrics.PCT_EXC_CAPPED = basesExcludedByCapping / totalWithExcludes;
+ metrics.PCT_EXC_TOTAL = (totalWithExcludes - total) / totalWithExcludes;
+
+ metrics.PCT_5X = MathUtil.sum(HistogramArray, 5, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_10X = MathUtil.sum(HistogramArray, 10, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_15X = MathUtil.sum(HistogramArray, 15, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_20X = MathUtil.sum(HistogramArray, 20, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_25X = MathUtil.sum(HistogramArray, 25, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_30X = MathUtil.sum(HistogramArray, 30, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_40X = MathUtil.sum(HistogramArray, 40, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_50X = MathUtil.sum(HistogramArray, 50, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_60X = MathUtil.sum(HistogramArray, 60, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_70X = MathUtil.sum(HistogramArray, 70, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_80X = MathUtil.sum(HistogramArray, 80, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_90X = MathUtil.sum(HistogramArray, 90, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+ metrics.PCT_100X = MathUtil.sum(HistogramArray, 100, HistogramArray.length) / (double) metrics.GENOME_TERRITORY;
+
+ final MetricsFile<WgsMetrics, Integer> out = getMetricsFile();
+ out.addMetric(metrics);
+ out.addHistogram(histo);
+ if (INCLUDE_BQ_HISTOGRAM) {
+ out.addHistogram(baseQHisto);
+ }
+ out.write(OUTPUT);
+
+ return 0;
+ }
+
+ protected WgsMetrics generateWgsMetrics() {
+ return new WgsMetrics();
+ }
+}
+
+/**
+ * A SamRecordFilter that counts the number of aligned bases in the reads which it filters out. Abstract and designed
+ * to be subclassed to implement the desired filter.
+ */
+abstract class CountingFilter implements SamRecordFilter {
+ private long filteredRecords = 0;
+ private long filteredBases = 0;
+
+ /** Gets the number of records that have been filtered out thus far. */
+ public long getFilteredRecords() { return this.filteredRecords; }
+
+ /** Gets the number of bases that have been filtered out thus far. */
+ public long getFilteredBases() { return this.filteredBases; }
+
+ @Override
+ public final boolean filterOut(final SAMRecord record) {
+ final boolean filteredOut = reallyFilterOut(record);
+ if (filteredOut) {
+ ++filteredRecords;
+ for (final AlignmentBlock block : record.getAlignmentBlocks()) {
+ this.filteredBases += block.getLength();
+ }
+ }
+ return filteredOut;
+ }
+
+ abstract public boolean reallyFilterOut(final SAMRecord record);
+
+ @Override
+ public boolean filterOut(final SAMRecord first, final SAMRecord second) {
+ throw new UnsupportedOperationException();
+ }
+}
+
+/** Counting filter that discards reads that have been marked as duplicates. */
+class CountingDuplicateFilter extends CountingFilter {
+ @Override
+ public boolean reallyFilterOut(final SAMRecord record) { return record.getDuplicateReadFlag(); }
+}
+
+/** Counting filter that discards reads below a configurable mapping quality threshold. */
+class CountingMapQFilter extends CountingFilter {
+ private final int minMapq;
+
+ CountingMapQFilter(final int minMapq) { this.minMapq = minMapq; }
+
+ @Override
+ public boolean reallyFilterOut(final SAMRecord record) { return record.getMappingQuality() < minMapq; }
+}
+
+/** Counting filter that discards reads that are unpaired in sequencing and paired reads who's mates are not mapped. */
+class CountingPairedFilter extends CountingFilter {
+ @Override
+ public boolean reallyFilterOut(final SAMRecord record) { return !record.getReadPairedFlag() || record.getMateUnmappedFlag(); }
+}
+
diff --git a/src/java/picard/analysis/CompareMetrics.java b/src/java/picard/analysis/CompareMetrics.java
new file mode 100644
index 0000000..130bba6
--- /dev/null
+++ b/src/java/picard/analysis/CompareMetrics.java
@@ -0,0 +1,53 @@
+package picard.analysis;
+
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.PositionalArguments;
+import picard.cmdline.programgroups.Metrics;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.List;
+
+/**
+ * Compare two metrics files.
+ */
+ at CommandLineProgramProperties(
+ usage = CompareMetrics.USAGE,
+ usageShort = CompareMetrics.USAGE,
+ programGroup = Metrics.class
+)
+public class CompareMetrics extends CommandLineProgram {
+
+ static final String USAGE = "Compare two metrics files";
+
+ @PositionalArguments(minElements = 2, maxElements = 2)
+ public List<File> metricsFiles;
+
+ private static final Log log = Log.getInstance(CompareMetrics.class);
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFilesAreReadable(metricsFiles);
+ final MetricsFile<?, ?> metricsA = new MetricsFile();
+ final MetricsFile<?, ?> metricsB = new MetricsFile();
+ try {
+ metricsA.read(new FileReader(metricsFiles.get(0)));
+ metricsB.read(new FileReader(metricsFiles.get(1)));
+ final boolean areEqual = metricsA.areMetricsEqual(metricsB) && metricsA.areHistogramsEqual(metricsB);
+ final String status = areEqual ? "EQUAL" : "NOT EQUAL";
+ log.info("Files " + metricsFiles.get(0) + " and " + metricsFiles.get(1) + "are " + status);
+ } catch (final Exception e) {
+ throw new PicardException(e.getMessage());
+ }
+ return 0;
+ }
+
+ public static void main(String[] argv) {
+ new CompareMetrics().instanceMainWithExit(argv);
+ }
+}
diff --git a/src/java/picard/analysis/GcBiasDetailMetrics.java b/src/java/picard/analysis/GcBiasDetailMetrics.java
new file mode 100644
index 0000000..281a23c
--- /dev/null
+++ b/src/java/picard/analysis/GcBiasDetailMetrics.java
@@ -0,0 +1,64 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * Class that holds detailed metrics about reads that fall within windows of a certain
+ * GC bin on the reference genome.
+ *
+ * @author Tim Fennell
+ */
+public class GcBiasDetailMetrics extends MultilevelMetrics {
+ public String ACCUMULATION_LEVEL;
+ /** The G+C content of the reference sequence represented by this bin. Values are from 0% to 100% */
+ public int GC;
+
+ /** The number of windows on the reference genome that have this G+C content. */
+ public int WINDOWS;
+
+ /** The number of reads whose start position is at the start of a window of this GC. */
+ public long READ_STARTS;
+
+ /** The mean quality (determined via the error rate) of all bases of all reads that are assigned to windows of this GC. */
+ public int MEAN_BASE_QUALITY;
+
+ /**
+ * The ration of "coverage" in this GC bin vs. the mean coverage of all GC bins. A number of
+ * 1 represents mean coverage, a number less than one represents lower than mean coverage (e.g. 0.5
+ * means half as much coverage as average) while a number greater than one represents higher than
+ * mean coverage (e.g. 3.1 means this GC bin has 3.1 times more reads per window than average).
+ */
+ public double NORMALIZED_COVERAGE;
+
+ /**
+ * The radius of error bars in this bin based on the number of observations made. For example if
+ * the normalized coverage is 0.75 and the error bar width is 0.1 then the error bars would be
+ * drawn from 0.65 to 0.85.
+ */
+ public double ERROR_BAR_WIDTH;
+
+}
diff --git a/src/java/picard/analysis/GcBiasSummaryMetrics.java b/src/java/picard/analysis/GcBiasSummaryMetrics.java
new file mode 100644
index 0000000..6841a67
--- /dev/null
+++ b/src/java/picard/analysis/GcBiasSummaryMetrics.java
@@ -0,0 +1,57 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * High level metrics that capture how biased the coverage in a certain lane is.
+ *
+ * @author Tim Fennell
+ */
+public class GcBiasSummaryMetrics extends MultilevelMetrics {
+ public String ACCUMULATION_LEVEL;
+
+ /** The window size on the genome used to calculate the GC of the sequence. */
+ public int WINDOW_SIZE;
+
+ /** The total number of clusters that were seen in the gc bias calculation. */
+ public int TOTAL_CLUSTERS;
+
+ /** The total number of aligned reads used to compute the gc bias metrics. */
+ public int ALIGNED_READS;
+
+ /**
+ * Illumina-style AT dropout metric. Calculated by taking each GC bin independently and calculating
+ * (%ref_at_gc - %reads_at_gc) and summing all positive values for GC=[0..50].
+ */
+ public double AT_DROPOUT;
+
+ /**
+ * Illumina-style GC dropout metric. Calculated by taking each GC bin independently and calculating
+ * (%ref_at_gc - %reads_at_gc) and summing all positive values for GC=[50..100].
+ */
+ public double GC_DROPOUT;
+}
diff --git a/src/java/picard/analysis/InsertSizeMetrics.java b/src/java/picard/analysis/InsertSizeMetrics.java
new file mode 100644
index 0000000..af492cd
--- /dev/null
+++ b/src/java/picard/analysis/InsertSizeMetrics.java
@@ -0,0 +1,94 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SamPairUtil.PairOrientation;
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * Metrics about the insert size distribution of a paired-end library, created by the
+ * CollectInsertSizeMetrics program and usually written to a file with the extension
+ * ".insert_size_metrics". In addition the insert size distribution is plotted to
+ * a file with the extension ".insert_size_Histogram.pdf".
+ *
+ * @author Doug Voet (dvoet at broadinstitute dot org)
+ */
+public class InsertSizeMetrics extends MultilevelMetrics {
+
+ /** The MEDIAN insert size of all paired end reads where both ends mapped to the same chromosome. */
+ public double MEDIAN_INSERT_SIZE;
+
+ /**
+ * The median absolute deviation of the distribution. If the distribution is essentially normal then
+ * the standard deviation can be estimated as ~1.4826 * MAD.
+ */
+ public double MEDIAN_ABSOLUTE_DEVIATION;
+
+ /** The minimum measured insert size. This is usually 1 and not very useful as it is likely artifactual. */
+ public int MIN_INSERT_SIZE;
+ /**
+ * The maximum measure insert size by alignment. This is usually very high representing either an artifact
+ * or possibly the presence of a structural re-arrangement.
+ */
+ public int MAX_INSERT_SIZE;
+ /**
+ * The mean insert size of the "core" of the distribution. Artefactual outliers in the distribution often
+ * cause calculation of nonsensical mean and stdev values. To avoid this the distribution is first trimmed
+ * to a "core" distribution of +/- N median absolute deviations around the median insert size. By default
+ * N=10, but this is configurable.
+ */
+ public double MEAN_INSERT_SIZE;
+ /** Standard deviation of insert sizes over the "core" of the distribution. */
+ public double STANDARD_DEVIATION;
+ /** The total number of read pairs that were examined in the entire distribution. */
+ public long READ_PAIRS;
+ /** The pair orientation of the reads in this data category. */
+ public PairOrientation PAIR_ORIENTATION;
+
+ /** The "width" of the bins, centered around the median, that encompass 10% of all read pairs. */
+ public int WIDTH_OF_10_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 20% of all read pairs. */
+ public int WIDTH_OF_20_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 30% of all read pairs. */
+ public int WIDTH_OF_30_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 40% of all read pairs. */
+ public int WIDTH_OF_40_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 50% of all read pairs. */
+ public int WIDTH_OF_50_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 60% of all read pairs. */
+ public int WIDTH_OF_60_PERCENT;
+ /**
+ * The "width" of the bins, centered around the median, that encompass 70% of all read pairs.
+ * This metric divided by 2 should approximate the standard deviation when the insert size
+ * distribution is a normal distribution.
+ */
+ public int WIDTH_OF_70_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 80% of all read pairs. */
+ public int WIDTH_OF_80_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 90% of all read pairs. */
+ public int WIDTH_OF_90_PERCENT;
+ /** The "width" of the bins, centered around the median, that encompass 100% of all read pairs. */
+ public int WIDTH_OF_99_PERCENT;
+}
diff --git a/src/java/picard/analysis/JumpingLibraryMetrics.java b/src/java/picard/analysis/JumpingLibraryMetrics.java
new file mode 100644
index 0000000..de60c62
--- /dev/null
+++ b/src/java/picard/analysis/JumpingLibraryMetrics.java
@@ -0,0 +1,127 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.analysis;
+
+import picard.sam.DuplicationMetrics;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.metrics.MetricBase;
+
+/**
+ * High level metrics about the presence of outward- and inward-facing pairs
+ * within a SAM file generated with a jumping library, produced by
+ * the CollectJumpingLibraryMetrics program and usually stored in a file with
+ * the extension ".jump_metrics".
+ */
+public class JumpingLibraryMetrics extends MetricBase {
+
+ /**
+ * The number of outward-facing pairs in the SAM file
+ */
+ public long JUMP_PAIRS;
+
+ /**
+ * The number of outward-facing pairs that are duplicates
+ */
+ public long JUMP_DUPLICATE_PAIRS;
+
+ /**
+ * The percentage of outward-facing pairs that are marked as duplicates
+ */
+ public double JUMP_DUPLICATE_PCT;
+
+ /**
+ * The estimated library size for outward-facing pairs
+ */
+ public long JUMP_LIBRARY_SIZE;
+
+ /**
+ * The mean insert size for outward-facing pairs
+ */
+ public double JUMP_MEAN_INSERT_SIZE;
+
+ /**
+ * The standard deviation on the insert size for outward-facing pairs
+ */
+ public double JUMP_STDEV_INSERT_SIZE;
+
+ /**
+ * The number of inward-facing pairs in the SAM file
+ */
+ public long NONJUMP_PAIRS;
+
+ /**
+ * The number of inward-facing pais that are duplicates
+ */
+ public long NONJUMP_DUPLICATE_PAIRS;
+
+ /**
+ * The percentage of inward-facing pairs that are marked as duplicates
+ */
+ public double NONJUMP_DUPLICATE_PCT;
+
+ /**
+ * The estimated library size for inward-facing pairs
+ */
+ public long NONJUMP_LIBRARY_SIZE;
+
+ /**
+ * The mean insert size for inward-facing pairs
+ */
+ public double NONJUMP_MEAN_INSERT_SIZE;
+
+ /**
+ * The standard deviation on the insert size for inward-facing pairs
+ */
+ public double NONJUMP_STDEV_INSERT_SIZE;
+
+ /**
+ * The number of pairs where either (a) the ends fall on different chromosomes or (b) the insert size
+ * is greater than the maximum of 100000 or 2 times the mode of the insert size for outward-facing pairs.
+ */
+ public long CHIMERIC_PAIRS;
+
+ /**
+ * The number of fragments in the SAM file
+ */
+ public long FRAGMENTS;
+
+ /**
+ * The number of outward-facing pairs expressed as a percentage of the total of all outward facing pairs,
+ * inward-facing pairs, and chimeric pairs.
+ */
+ public double PCT_JUMPS;
+
+ /**
+ * The number of inward-facing pairs expressed as a percentage of the total of all outward facing pairs,
+ * inward-facing pairs, and chimeric pairs.
+ */
+ public double PCT_NONJUMPS;
+
+ /**
+ * The number of chimeric pairs expressed as a percentage of the total of all outward facing pairs,
+ * inward-facing pairs, and chimeric pairs.
+ */
+ public double PCT_CHIMERAS;
+
+}
diff --git a/src/java/picard/analysis/MeanQualityByCycle.java b/src/java/picard/analysis/MeanQualityByCycle.java
new file mode 100644
index 0000000..8c7c11a
--- /dev/null
+++ b/src/java/picard/analysis/MeanQualityByCycle.java
@@ -0,0 +1,207 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.RExecutor;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * Program to generate a data table and chart of mean quality by cycle from a
+ * BAM file. Works best on a single lane/run of data, but can be applied to
+ * merged BAMs - the output may just be a little confusing.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Program to generate a data table and pdf chart of " +
+ "mean base quality by cycle from a SAM or BAM file. Works best on a single lane/run of data, but can be applied to" +
+ "merged BAMs. Uses R to generate chart output.",
+ usageShort = "Writes mean quality by cycle for a SAM or BAM file",
+ programGroup = Metrics.class
+)
+public class MeanQualityByCycle extends SinglePassSamProgram {
+
+ @Option(shortName="CHART", doc="A file (with .pdf extension) to write the chart to.")
+ public File CHART_OUTPUT;
+
+ @Option(doc="If set to true, calculate mean quality over aligned reads only.")
+ public boolean ALIGNED_READS_ONLY = false;
+
+ @Option(doc="If set to true calculate mean quality over PF reads only.")
+ public boolean PF_READS_ONLY = false;
+
+ private final HistogramGenerator q = new HistogramGenerator(false);
+ private final HistogramGenerator oq = new HistogramGenerator(true);
+
+ /**
+ * A subtitle for the plot, usually corresponding to a library.
+ */
+ private String plotSubtitle = "";
+
+ private final Log log = Log.getInstance(MeanQualityByCycle.class);
+
+ /** Required main method. */
+ public static void main(String[] args) {
+ System.exit(new MeanQualityByCycle().instanceMain(args));
+ }
+
+ private static class HistogramGenerator {
+ final boolean useOriginalQualities;
+ int maxLengthSoFar = 0;
+ double[] firstReadTotalsByCycle = new double[maxLengthSoFar];
+ long[] firstReadCountsByCycle = new long[maxLengthSoFar];
+ double[] secondReadTotalsByCycle = new double[maxLengthSoFar];
+ long[] secondReadCountsByCycle = new long[maxLengthSoFar];
+
+ private HistogramGenerator(final boolean useOriginalQualities) {
+ this.useOriginalQualities = useOriginalQualities;
+ }
+
+ void addRecord(final SAMRecord rec) {
+ final byte[] quals = (useOriginalQualities ? rec.getOriginalBaseQualities() : rec.getBaseQualities());
+ if (quals == null) return;
+
+ final int length = quals.length;
+ final boolean rc = rec.getReadNegativeStrandFlag();
+ ensureArraysBigEnough(length+1);
+
+ for (int i=0; i<length; ++i) {
+ final int cycle = rc ? length-i : i+1;
+
+ if (rec.getReadPairedFlag() && rec.getSecondOfPairFlag()) {
+ secondReadTotalsByCycle[cycle] += quals[i];
+ secondReadCountsByCycle[cycle] += 1;
+ }
+ else {
+ firstReadTotalsByCycle[cycle] += quals[i];
+ firstReadCountsByCycle[cycle] += 1;
+ }
+ }
+ }
+
+ private void ensureArraysBigEnough(final int length) {
+ if (length > maxLengthSoFar) {
+ firstReadTotalsByCycle = Arrays.copyOf(firstReadTotalsByCycle, length);
+ firstReadCountsByCycle = Arrays.copyOf(firstReadCountsByCycle, length);
+ secondReadTotalsByCycle = Arrays.copyOf(secondReadTotalsByCycle , length);
+ secondReadCountsByCycle = Arrays.copyOf(secondReadCountsByCycle, length);
+ maxLengthSoFar = length;
+ }
+ }
+
+ Histogram<Integer> getMeanQualityHistogram() {
+ final String label = useOriginalQualities ? "MEAN_ORIGINAL_QUALITY" : "MEAN_QUALITY";
+ final Histogram<Integer> meanQualities = new Histogram<Integer>("CYCLE", label);
+
+ int firstReadLength = 0;
+
+ for (int cycle=0; cycle < firstReadTotalsByCycle.length; ++cycle) {
+ if (firstReadTotalsByCycle[cycle] > 0) {
+ meanQualities.increment(cycle, firstReadTotalsByCycle[cycle] / firstReadCountsByCycle[cycle]);
+ firstReadLength = cycle;
+ }
+ }
+
+ for (int i=0; i< secondReadTotalsByCycle.length; ++i) {
+ if (secondReadCountsByCycle[i] > 0) {
+ final int cycle = firstReadLength + i;
+ meanQualities.increment(cycle, secondReadTotalsByCycle[i] / secondReadCountsByCycle[i]);
+ }
+ }
+
+ return meanQualities;
+ }
+
+ boolean isEmpty() {
+ return maxLengthSoFar == 0;
+ }
+ }
+
+ @Override
+ protected void setup(final SAMFileHeader header, final File samFile) {
+ IOUtil.assertFileIsWritable(CHART_OUTPUT);
+ // If we're working with a single library, assign that library's name
+ // as a suffix to the plot title
+ final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
+ if (readGroups.size() == 1) {
+ plotSubtitle = StringUtil.asEmptyIfNull(readGroups.get(0).getLibrary());
+ }
+ }
+
+ @Override
+ protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
+ // Skip unwanted records
+ if (PF_READS_ONLY && rec.getReadFailsVendorQualityCheckFlag()) return;
+ if (ALIGNED_READS_ONLY && rec.getReadUnmappedFlag()) return;
+ if (rec.isSecondaryOrSupplementary()) return;
+
+ q.addRecord(rec);
+ oq.addRecord(rec);
+ }
+
+ @Override
+ protected void finish() {
+ // Generate a "Histogram" of mean quality and write it to the file
+ final MetricsFile<?,Integer> metrics = getMetricsFile();
+ metrics.addHistogram(q.getMeanQualityHistogram());
+ if (!oq.isEmpty()) metrics.addHistogram(oq.getMeanQualityHistogram());
+ metrics.write(OUTPUT);
+
+ if (q.isEmpty() && oq.isEmpty()) {
+ log.warn("No valid bases found in input file. No plot will be produced.");
+ }
+ else {
+ // Now run R to generate a chart
+ final int rResult = RExecutor.executeFromClasspath(
+ "picard/analysis/meanQualityByCycle.R",
+ OUTPUT.getAbsolutePath(),
+ CHART_OUTPUT.getAbsolutePath(),
+ INPUT.getName(),
+ plotSubtitle);
+
+ if (rResult != 0) {
+ throw new PicardException("R script meanQualityByCycle.R failed with return code " + rResult);
+ }
+ }
+ }
+}
+
diff --git a/src/java/picard/analysis/MetricAccumulationLevel.java b/src/java/picard/analysis/MetricAccumulationLevel.java
new file mode 100755
index 0000000..95451a4
--- /dev/null
+++ b/src/java/picard/analysis/MetricAccumulationLevel.java
@@ -0,0 +1,32 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.analysis;
+
+/**
+ * For use with Picard metrics programs that may output metrics for multiple levels
+ * of aggregation with an analysis. Used to specify which metrics to output
+ */
+public enum MetricAccumulationLevel {
+ ALL_READS, SAMPLE, LIBRARY, READ_GROUP
+}
diff --git a/src/java/picard/analysis/QualityScoreDistribution.java b/src/java/picard/analysis/QualityScoreDistribution.java
new file mode 100644
index 0000000..bc227d8
--- /dev/null
+++ b/src/java/picard/analysis/QualityScoreDistribution.java
@@ -0,0 +1,152 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.RExecutor;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Charts quality score distribution within a BAM file.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Program to chart " +
+ "quality score distributions in a SAM or BAM file.",
+ usageShort = "Charts quality score distributions for a SAM or BAM file",
+ programGroup = Metrics.class
+)
+public class QualityScoreDistribution extends SinglePassSamProgram {
+
+ @Option(shortName="CHART", doc="A file (with .pdf extension) to write the chart to.")
+ public File CHART_OUTPUT;
+
+ @Option(doc="If set to true calculate mean quality over aligned reads only.")
+ public boolean ALIGNED_READS_ONLY = false;
+
+ @Option(shortName="PF", doc="If set to true calculate mean quality over PF reads only.")
+ public boolean PF_READS_ONLY = false;
+
+ @Option(doc="If set to true, include quality for no-call bases in the distribution.")
+ public boolean INCLUDE_NO_CALLS = false;
+
+ private final long[] qCounts = new long[128];
+ private final long[] oqCounts = new long[128];
+
+ /**
+ * A subtitle for the plot, usually corresponding to a library.
+ */
+ private String plotSubtitle = "";
+
+ private final Log log = Log.getInstance(QualityScoreDistribution.class);
+
+ /** Required main method. */
+ public static void main(final String[] args) {
+ System.exit(new QualityScoreDistribution().instanceMain(args));
+ }
+
+ @Override
+ protected void setup(final SAMFileHeader header, final File samFile) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+ IOUtil.assertFileIsWritable(CHART_OUTPUT);
+
+ // If we're working with a single library, assign that library's name
+ // as a suffix to the plot title
+ final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
+ if (readGroups.size() == 1) {
+ this.plotSubtitle = readGroups.get(0).getLibrary();
+ if (null == this.plotSubtitle) this.plotSubtitle = "";
+ }
+ }
+
+ @Override
+ protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
+ // Skip unwanted records
+ if (PF_READS_ONLY && rec.getReadFailsVendorQualityCheckFlag()) return;
+ if (ALIGNED_READS_ONLY && rec.getReadUnmappedFlag()) return;
+ if (rec.isSecondaryOrSupplementary()) return;
+
+ final byte[] bases = rec.getReadBases();
+ final byte[] quals = rec.getBaseQualities();
+ final byte[] oq = rec.getOriginalBaseQualities();
+
+ final int length = quals.length;
+
+ for (int i=0; i<length; ++i) {
+ if (INCLUDE_NO_CALLS || !SequenceUtil.isNoCall(bases[i])) {
+ qCounts[quals[i]]++;
+ if (oq != null) oqCounts[oq[i]]++;
+ }
+ }
+ }
+
+ @Override
+ protected void finish() {
+ // Built the Histograms out of the long[]s
+ final Histogram<Byte> qHisto = new Histogram<Byte>("QUALITY", "COUNT_OF_Q");
+ final Histogram<Byte> oqHisto = new Histogram<Byte>("QUALITY", "COUNT_OF_OQ");
+
+ for (int i=0; i< qCounts.length; ++i) {
+ if (qCounts[i] > 0) qHisto.increment( (byte) i, (double) qCounts[i]);
+ if (oqCounts[i] > 0) oqHisto.increment((byte) i, (double) oqCounts[i]);
+ }
+
+ final MetricsFile<?,Byte> metrics = getMetricsFile();
+ metrics.addHistogram(qHisto);
+ if (!oqHisto.isEmpty()) metrics.addHistogram(oqHisto);
+ metrics.write(OUTPUT);
+ if (qHisto.isEmpty() && oqHisto.isEmpty()) {
+ log.warn("No valid bases found in input file. No plot will be produced.");
+ }
+ else {
+ // Now run R to generate a chart
+ final int rResult = RExecutor.executeFromClasspath(
+ "picard/analysis/qualityScoreDistribution.R",
+ OUTPUT.getAbsolutePath(),
+ CHART_OUTPUT.getAbsolutePath(),
+ INPUT.getName(),
+ this.plotSubtitle);
+
+ if (rResult != 0) {
+ throw new PicardException("R script qualityScoreDistribution.R failed with return code " + rResult);
+ }
+ }
+ }
+}
diff --git a/src/java/picard/analysis/RnaSeqMetrics.java b/src/java/picard/analysis/RnaSeqMetrics.java
new file mode 100644
index 0000000..0121040
--- /dev/null
+++ b/src/java/picard/analysis/RnaSeqMetrics.java
@@ -0,0 +1,111 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.analysis;
+
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * Metrics about the alignment of RNA-seq reads within a SAM file to genes, produced by the CollectRnaSeqMetrics
+ * program and usually stored in a file with the extension ".rna_metrics".
+ */
+public class RnaSeqMetrics extends MultilevelMetrics {
+ /** The total number of PF bases including non-aligned reads. */
+ public long PF_BASES;
+
+ /**
+ * The total number of aligned PF bases. Non-primary alignments are not counted. Bases in aligned reads that
+ * do not correspond to reference (e.g. soft clips, insertions) are not counted.
+ */
+ public long PF_ALIGNED_BASES;
+
+ /** Number of bases in primary aligments that align to ribosomal sequence. */
+ public Long RIBOSOMAL_BASES;
+
+ /** Number of bases in primary aligments that align to a non-UTR coding base for some gene, and not ribosomal sequence. */
+ public long CODING_BASES;
+
+ /** Number of bases in primary aligments that align to a UTR base for some gene, and not a coding base. */
+ public long UTR_BASES;
+
+ /** Number of bases in primary aligments that align to an intronic base for some gene, and not a coding or UTR base. */
+ public long INTRONIC_BASES;
+
+ /** Number of bases in primary aligments that do not align to any gene. */
+ public long INTERGENIC_BASES;
+
+ /**
+ * Number of primary alignments that map to a sequence specified on command-line as IGNORED_SEQUENCE. These are not
+ * counted in PF_ALIGNED_BASES, CORRECT_STRAND_READS, INCORRECT_STRAND_READS, or any of the base-counting metrics.
+ * These reads are counted in PF_BASES.
+ */
+ public long IGNORED_READS;
+
+ /** Number of aligned reads that map to the correct strand. 0 if library is not strand-specific. */
+ public long CORRECT_STRAND_READS;
+
+ /** Number of aligned reads that map to the incorrect strand. 0 if library is not strand-specific. */
+ public long INCORRECT_STRAND_READS;
+
+ /** RIBOSOMAL_BASES / PF_ALIGNED_BASES */
+ public Double PCT_RIBOSOMAL_BASES;
+
+ /** CODING_BASES / PF_ALIGNED_BASES */
+ public double PCT_CODING_BASES;
+
+ /** UTR_BASES / PF_ALIGNED_BASES */
+ public double PCT_UTR_BASES;
+
+ /** INTRONIC_BASES / PF_ALIGNED_BASES */
+ public double PCT_INTRONIC_BASES;
+
+ /** INTERGENIC_BASES / PF_ALIGNED_BASES */
+ public double PCT_INTERGENIC_BASES;
+
+ /** PCT_UTR_BASES + PCT_CODING_BASES */
+ public double PCT_MRNA_BASES;
+
+ /** The percentage of bases mapping to mRNA divided by the total number of PF bases. */
+ public double PCT_USABLE_BASES;
+
+ /** CORRECT_STRAND_READS/(CORRECT_STRAND_READS + INCORRECT_STRAND_READS). 0 if library is not strand-specific. */
+ public double PCT_CORRECT_STRAND_READS;
+
+ /** The median CV of coverage of the 1000 most highly expressed transcripts. Ideal value = 0. */
+ public double MEDIAN_CV_COVERAGE;
+
+ /**
+ * The median 5 prime bias of the 1000 most highly expressed transcripts, where 5 prime bias is calculated per
+ * transcript as: mean coverage of the 5' most 100 bases divided by the mean coverage of the whole transcript.
+ */
+ public double MEDIAN_5PRIME_BIAS;
+
+ /**
+ * The median 3 prime bias of the 1000 most highly expressed transcripts, where 3 prime bias is calculated per
+ * transcript as: mean coverage of the 3' most 100 bases divided by the mean coverage of the whole transcript.
+ */
+ public double MEDIAN_3PRIME_BIAS;
+
+ /** The ratio of coverage at the 5' end of to the 3' end based on the 1000 most highly expressed transcripts. */
+ public double MEDIAN_5PRIME_TO_3PRIME_BIAS;
+}
diff --git a/src/java/picard/analysis/RrbsCpgDetailMetrics.java b/src/java/picard/analysis/RrbsCpgDetailMetrics.java
new file mode 100644
index 0000000..9e4fd85
--- /dev/null
+++ b/src/java/picard/analysis/RrbsCpgDetailMetrics.java
@@ -0,0 +1,44 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * Holds information about CpG sites encountered for RRBS processing QC
+ * @author jgentry
+ */
+public final class RrbsCpgDetailMetrics extends MultilevelMetrics {
+ /** Sequence the CpG is seen in */
+ public String SEQUENCE_NAME;
+ /** Position within the sequence of the CpG site */
+ public Integer POSITION;
+ /** Number of times this CpG site was encountered */
+ public Integer TOTAL_SITES;
+ /** Number of times this CpG site was converted (TG for + strand, CA for - strand) */
+ public Integer CONVERTED_SITES;
+ /** TOTAL_BASES / CONVERTED_BASES */
+ public Double PCT_CONVERTED;
+}
diff --git a/src/java/picard/analysis/RrbsMetrics.java b/src/java/picard/analysis/RrbsMetrics.java
new file mode 100644
index 0000000..01672c1
--- /dev/null
+++ b/src/java/picard/analysis/RrbsMetrics.java
@@ -0,0 +1,56 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.metrics.MetricBase;
+
+import java.util.List;
+
+/**
+ * Holds per-MetricAccumulationLevel metric information for the RRBS metrics. Required as the MultiLevelCollector
+ * is designed around having a single metrics object and we have two being calculated so RrbsMetricsCollector builds
+ * this object which can be teased apart downstream
+ *
+ * NB: This is purely for internal use, if used as a proper metric object it likely won't do what you want it to
+ *
+ * @author jgentry at broadinstitute.org
+ */
+class RrbsMetrics extends MetricBase {
+ private final RrbsSummaryMetrics summaryMetrics;
+ private final List<RrbsCpgDetailMetrics> detailMetrics;
+
+ public RrbsMetrics(final RrbsSummaryMetrics summaryMetrics, final List<RrbsCpgDetailMetrics> detailMetrics) {
+ this.summaryMetrics = summaryMetrics;
+ this.detailMetrics = detailMetrics;
+ }
+
+ public List<RrbsCpgDetailMetrics> getDetailMetrics() {
+ return detailMetrics;
+ }
+
+ public RrbsSummaryMetrics getSummaryMetrics() {
+ return summaryMetrics;
+ }
+}
diff --git a/src/java/picard/analysis/RrbsMetricsCollector.java b/src/java/picard/analysis/RrbsMetricsCollector.java
new file mode 100644
index 0000000..7923dd1
--- /dev/null
+++ b/src/java/picard/analysis/RrbsMetricsCollector.java
@@ -0,0 +1,311 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.AlignmentBlock;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.metrics.PerUnitMetricCollector;
+import picard.metrics.SAMRecordAndReference;
+import picard.metrics.SAMRecordAndReferenceMultiLevelCollector;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+public class RrbsMetricsCollector extends SAMRecordAndReferenceMultiLevelCollector<RrbsMetrics, Comparable<?>> {
+ private final int minReadLength;
+ private final double maxMismatchRate;
+ private final int cQualityThreshold;
+ private final int nextBaseQualityThreshold;
+
+ public RrbsMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
+ final int cQualityThreshold, final int nextBaseQualityThreshold, final int minReadLength,
+ final double maxMismatchRate) {
+ this.cQualityThreshold = cQualityThreshold;
+ this.nextBaseQualityThreshold = nextBaseQualityThreshold;
+ this.minReadLength = minReadLength;
+ this.maxMismatchRate = maxMismatchRate;
+ setup(accumulationLevels, samRgRecords);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<RrbsMetrics, Comparable<?>, SAMRecordAndReference> makeChildCollector(final String sample, final String library, final String readGroup) {
+ return new PerUnitRrbsMetricsCollector(sample, library, readGroup);
+ }
+
+ private class PerUnitRrbsMetricsCollector implements PerUnitMetricCollector<RrbsMetrics, Comparable<?>, SAMRecordAndReference> {
+ final String sample;
+ final String library;
+ final String readGroup;
+
+ // Counters for CpG & non-CpG seen/converted sites
+ int nCytoConverted = 0;
+ int nCytoTotal = 0;
+ final Histogram<CpgLocation> cpgTotal = new Histogram<CpgLocation>();
+ final Histogram<CpgLocation> cpgConverted = new Histogram<CpgLocation>();
+
+ // Counters for QC filters used in the final metrics
+ int mappedRecordCount = 0;
+ int smallReadCount = 0;
+ int mismatchCount = 0;
+ int noCpgCount = 0;
+
+ // Final metrics calculated once all the reads are done
+ double cytoConversionRate;
+ double cpgConversionRate;
+ int nCpgSeen;
+ int nCpgConverted;
+ double coverageMean;
+ int coverageMedian;
+
+ public PerUnitRrbsMetricsCollector(final String sample, final String library, final String readGroup) {
+ this.sample = sample;
+ this.library = library;
+ this.readGroup = readGroup;
+ }
+
+ public void acceptRecord(final SAMRecordAndReference args) {
+ mappedRecordCount++;
+
+ final SAMRecord samRecord = args.getSamRecord();
+ final ReferenceSequence referenceSequence = args.getReferenceSequence();
+
+ final byte[] readBases = samRecord.getReadBases();
+ final byte[] readQualities = samRecord.getBaseQualities();
+ final byte[] refBases = referenceSequence.getBases();
+
+ if (samRecord.getReadLength() < minReadLength) {
+ smallReadCount++;
+ return;
+ } else if (SequenceUtil.countMismatches(samRecord, refBases, true) > Math.round(samRecord.getReadLength() * maxMismatchRate)) {
+ mismatchCount++;
+ return;
+ }
+
+ // We only record non-CpG C sites if there was at least one CpG in the read, keep track of
+ // the values for this record and then apply to the global totals if valid
+ int recordCpgs = 0;
+
+ for (final AlignmentBlock alignmentBlock : samRecord.getAlignmentBlocks()) {
+ final int blockLength = alignmentBlock.getLength();
+ final int refFragmentStart = alignmentBlock.getReferenceStart() - 1;
+ final int readFragmentStart = alignmentBlock.getReadStart() - 1;
+
+ final byte[] refFragment = getFragment(refBases, refFragmentStart, blockLength);
+ final byte[] readFragment = getFragment(readBases, readFragmentStart, blockLength);
+ final byte[] readQualityFragment = getFragment(readQualities, readFragmentStart, blockLength);
+
+ if (samRecord.getReadNegativeStrandFlag()) {
+ // In the case of a negative strand, reverse (and complement for base arrays) the reference,
+ // reads & qualities so that it can be treated as a positive strand for the rest of the process
+ SequenceUtil.reverseComplement(refFragment);
+ SequenceUtil.reverseComplement(readFragment);
+ SequenceUtil.reverseQualities(readQualityFragment);
+ }
+
+ for (int i=0; i < blockLength-1; i++) {
+ final int curRefIndex = getCurRefIndex(refFragmentStart, blockLength, i, samRecord.getReadNegativeStrandFlag());
+
+ // Look at a 2-base window to see if we're on a CpG site, and if so check for conversion
+ // (CG -> TG). We do not consider ourselves to be on a CpG site if we're on the last base of a read
+ if ((SequenceUtil.basesEqual(refFragment[i], SequenceUtil.C)) &&
+ (SequenceUtil.basesEqual(refFragment[i+1], SequenceUtil.G))) {
+ // We want to catch the case where there's a CpG in the reference, even if it is not valid
+ // to prevent the C showing up as a non-CpG C down below. Otherwise this could have been all
+ // in one if statement
+ if (isValidCpg(refFragment, readFragment, readQualityFragment, i)) {
+ recordCpgs++;
+ final CpgLocation curLocation = new CpgLocation(samRecord.getReferenceName(), curRefIndex);
+ cpgTotal.increment(curLocation);
+ if (SequenceUtil.isBisulfiteConverted(readFragment[i], refFragment[i])) {
+ cpgConverted.increment(curLocation);
+ }
+ }
+ i++;
+ } else if (isC(refFragment[i], readFragment[i]) && isAboveCytoQcThreshold(readQualities, i) &&
+ SequenceUtil.bisulfiteBasesEqual(false, readFragment[i+1], refFragment[i+1])) {
+ // C base in the reference that's not associated with a CpG
+ nCytoTotal++;
+ if (SequenceUtil.isBisulfiteConverted(readFragment[i], refFragment[i])) {
+ nCytoConverted++;
+ }
+ }
+ }
+ }
+
+ if (recordCpgs == 0) {
+ noCpgCount++;
+ }
+ }
+
+ public void finish() {
+ cytoConversionRate = nCytoTotal == 0 ? 0 : nCytoConverted / (double)nCytoTotal;
+ nCpgSeen = (int)cpgTotal.getSumOfValues();
+ nCpgConverted = (int)cpgConverted.getSumOfValues();
+ cpgConversionRate = nCpgSeen == 0 ? 0 : nCpgConverted / (double)nCpgSeen;
+ coverageMean = cpgTotal.getMeanBinSize();
+ coverageMedian = (int)cpgTotal.getMedianBinSize();
+ }
+
+ @Override
+ public void addMetricsToFile(final MetricsFile<RrbsMetrics, Comparable<?>> metricsFile) {
+ // Create both the summary and detail metrics & add them to the RrbsMetrics container class for
+ // the downstream code to use as desired
+ final RrbsSummaryMetrics summaryMetrics = buildSummaryMetrics();
+ final List<RrbsCpgDetailMetrics> detailMetrics = buildDetailMetrics();
+ final RrbsMetrics rrbsMetrics = new RrbsMetrics(summaryMetrics, detailMetrics);
+ metricsFile.addMetric(rrbsMetrics);
+ }
+
+ private RrbsSummaryMetrics buildSummaryMetrics() {
+ final RrbsSummaryMetrics summaryMetrics = new RrbsSummaryMetrics();
+ summaryMetrics.SAMPLE = sample;
+ summaryMetrics.READ_GROUP = readGroup;
+ summaryMetrics.LIBRARY = library;
+ summaryMetrics.READS_ALIGNED = mappedRecordCount;
+ summaryMetrics.NON_CPG_BASES = nCytoTotal;
+ summaryMetrics.NON_CPG_CONVERTED_BASES = nCytoConverted;
+ summaryMetrics.PCT_NON_CPG_BASES_CONVERTED = cytoConversionRate;
+ summaryMetrics.CPG_BASES_SEEN = nCpgSeen;
+ summaryMetrics.CPG_BASES_CONVERTED = nCpgConverted;
+ summaryMetrics.PCT_CPG_BASES_CONVERTED = cpgConversionRate;
+ summaryMetrics.MEAN_CPG_COVERAGE = coverageMean;
+ summaryMetrics.MEDIAN_CPG_COVERAGE = coverageMedian;
+ summaryMetrics.READS_IGNORED_SHORT = smallReadCount;
+ summaryMetrics.READS_WITH_NO_CPG = noCpgCount;
+ summaryMetrics.READS_IGNORED_MISMATCHES = mismatchCount;
+ return summaryMetrics;
+ }
+
+ private List<RrbsCpgDetailMetrics> buildDetailMetrics() {
+ final List<RrbsCpgDetailMetrics> detailMetrics = new ArrayList<RrbsCpgDetailMetrics>();
+ for (final CpgLocation key : cpgTotal.keySet()) {
+ final RrbsCpgDetailMetrics cpgMetric = new RrbsCpgDetailMetrics();
+ cpgMetric.SAMPLE = sample;
+ cpgMetric.READ_GROUP = readGroup;
+ cpgMetric.LIBRARY = library;
+ cpgMetric.SEQUENCE_NAME = key.getSequence();
+ cpgMetric.POSITION = key.getPosition();
+ cpgMetric.TOTAL_SITES = (int)cpgTotal.get(key).getValue();
+ cpgMetric.CONVERTED_SITES = cpgConverted.containsKey(key) ? (int)cpgConverted.get(key).getValue() : 0;
+ cpgMetric.PCT_CONVERTED = cpgMetric.CONVERTED_SITES == 0 ? 0 : cpgMetric.CONVERTED_SITES / (double)cpgMetric.TOTAL_SITES;
+ detailMetrics.add(cpgMetric);
+ }
+ return detailMetrics;
+ }
+ }
+
+ private byte[] getFragment(final byte[] fullArray, final int fragmentStart, final int length) {
+ return Arrays.copyOfRange(fullArray, fragmentStart, fragmentStart + length);
+ }
+
+ /**
+ * True if there's a C in the reference as well as read (possibly bisulfite converted)
+ */
+ private boolean isC(final byte refBase, final byte readBase) {
+ return (SequenceUtil.basesEqual(refBase, SequenceUtil.C) && SequenceUtil.bisulfiteBasesEqual(readBase, refBase));
+ }
+
+ /**
+ * Checks a pair of bases for CpG status & quality thresholds
+ */
+ private boolean isValidCpg(final byte[] refBases, final byte[] readBases, final byte[] readQualities, final int index) {
+ return isC(refBases[index], readBases[index]) && SequenceUtil.basesEqual(refBases[index+1], readBases[index+1]) &&
+ isAboveCytoQcThreshold(readQualities, index);
+ }
+
+ /**
+ * Any cyto base (CpG context or not) needs to be above a specified quality threshold. Similarly, the neighboring
+ * base on the 3' side must also be above another threshold unless the cyto base is the final base in the 3'
+ * direction.
+ */
+ private boolean isAboveCytoQcThreshold(final byte[] readQualities, final int index) {
+ return ((index < readQualities.length - 1) && (readQualities[index] >= cQualityThreshold) &&
+ (readQualities[index+1] >= nextBaseQualityThreshold));
+ }
+
+ /**
+ * Accounts for the fact that negative strand counts have been reversed
+ */
+ private int getCurRefIndex(final int refStart, final int blockLength, final int idx, final boolean isNegative) {
+ return isNegative ? refStart + (blockLength - 1) - idx - 1 : refStart + idx;
+ }
+}
+
+/**
+ * Used to keep track of the location of CpG sites
+ */
+class CpgLocation implements Comparable<CpgLocation> {
+ private final String sequence;
+ private final Integer position;
+
+ public CpgLocation(final String sequence, final int position) {
+ this.sequence = sequence;
+ this.position = position;
+ }
+
+ @Override
+ public int compareTo(final CpgLocation other) {
+ final int seqComp = sequence.compareTo(other.sequence);
+ return seqComp == 0 ? position.compareTo(other.position) : seqComp;
+ }
+
+ @Override
+ public boolean equals(final Object other) {
+ if (this == other) {
+ return true;
+ }
+
+ if (other == null || getClass() != other.getClass()) {
+ return false;
+ }
+
+ final CpgLocation that = (CpgLocation)other;
+
+ return (sequence.equals(that.sequence)) && (position.equals(that.position));
+ }
+
+ @Override
+ public int hashCode() {
+ int result = sequence.hashCode();
+ result = 31 * result + position;
+ return result;
+ }
+
+ public String getSequence() {
+ return sequence;
+ }
+
+ public Integer getPosition() {
+ return position;
+ }
+}
diff --git a/src/java/picard/analysis/RrbsSummaryMetrics.java b/src/java/picard/analysis/RrbsSummaryMetrics.java
new file mode 100644
index 0000000..2454eb0
--- /dev/null
+++ b/src/java/picard/analysis/RrbsSummaryMetrics.java
@@ -0,0 +1,59 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * Holds summary statistics from RRBS processing QC
+ *
+ * @author jgentry
+ */
+public final class RrbsSummaryMetrics extends MultilevelMetrics {
+ /** Number of mapped reads processed */
+ public Integer READS_ALIGNED;
+ /** Number of times a non-CpG cytosine was encountered */
+ public Integer NON_CPG_BASES;
+ /** Number of times a non-CpG cytosine was converted (C->T for +, G->A for -) */
+ public Integer NON_CPG_CONVERTED_BASES;
+ /** NON_CPG_BASES / NON_CPG_CONVERTED_BASES */
+ public Double PCT_NON_CPG_BASES_CONVERTED;
+ /** Number of CpG sites encountered */
+ public Integer CPG_BASES_SEEN;
+ /** Number of CpG sites that were converted (TG for +, CA for -) */
+ public Integer CPG_BASES_CONVERTED;
+ /** CPG_BASES_SEEN / CPG_BASES_CONVERTED */
+ public Double PCT_CPG_BASES_CONVERTED;
+ /** Mean coverage of CpG sites */
+ public Double MEAN_CPG_COVERAGE;
+ /** Median coverage of CpG sites */
+ public Integer MEDIAN_CPG_COVERAGE;
+ /** Number of reads discarded for having no CpG sites */
+ public Integer READS_WITH_NO_CPG;
+ /** Number of reads discarded due to being too short */
+ public Integer READS_IGNORED_SHORT;
+ /** Number of reads discarded for exceeding the mismatch threshold */
+ public Integer READS_IGNORED_MISMATCHES;
+}
diff --git a/src/java/picard/analysis/SinglePassSamProgram.java b/src/java/picard/analysis/SinglePassSamProgram.java
new file mode 100644
index 0000000..ac14bf5
--- /dev/null
+++ b/src/java/picard/analysis/SinglePassSamProgram.java
@@ -0,0 +1,153 @@
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * Super class that is designed to provide some consistent structure between subclasses that
+ * simply iterate once over a coordinate sorted BAM and collect information from the records
+ * as the go in order to produce some kind of output.
+ *
+ * @author Tim Fennell
+ */
+public abstract class SinglePassSamProgram extends CommandLineProgram {
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input SAM or BAM file.")
+ public File INPUT;
+
+ @Option(shortName = "O", doc = "File to write the output to.")
+ public File OUTPUT;
+
+ @Option(doc = "If true (default), then the sort order in the header file will be ignored.",
+ shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
+ public boolean ASSUME_SORTED = true;
+
+ @Option(doc = "Stop after processing N reads, mainly for debugging.")
+ public long STOP_AFTER = 0;
+
+ private static final Log log = Log.getInstance(SinglePassSamProgram.class);
+
+ /**
+ * Final implementation of doWork() that checks and loads the input and optionally reference
+ * sequence files and the runs the sublcass through the setup() acceptRead() and finish() steps.
+ */
+ @Override
+ protected final int doWork() {
+ makeItSo(INPUT, REFERENCE_SEQUENCE, ASSUME_SORTED, STOP_AFTER, Arrays.asList(this));
+ return 0;
+ }
+
+ public static void makeItSo(final File input,
+ final File referenceSequence,
+ final boolean assumeSorted,
+ final long stopAfter,
+ final Collection<SinglePassSamProgram> programs) {
+
+ // Setup the standard inputs
+ IOUtil.assertFileIsReadable(input);
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(referenceSequence).open(input);
+
+ // Optionally load up the reference sequence and double check sequence dictionaries
+ final ReferenceSequenceFileWalker walker;
+ if (referenceSequence == null) {
+ walker = null;
+ } else {
+ IOUtil.assertFileIsReadable(referenceSequence);
+ walker = new ReferenceSequenceFileWalker(referenceSequence);
+
+ if (!in.getFileHeader().getSequenceDictionary().isEmpty()) {
+ SequenceUtil.assertSequenceDictionariesEqual(in.getFileHeader().getSequenceDictionary(),
+ walker.getSequenceDictionary());
+ }
+ }
+
+ // Check on the sort order of the BAM file
+ {
+ final SortOrder sort = in.getFileHeader().getSortOrder();
+ if (sort != SortOrder.coordinate) {
+ if (assumeSorted) {
+ log.warn("File reports sort order '" + sort + "', assuming it's coordinate sorted anyway.");
+ } else {
+ throw new PicardException("File " + input.getAbsolutePath() + " should be coordinate sorted but " +
+ "the header says the sort order is " + sort + ". If you believe the file " +
+ "to be coordinate sorted you may pass ASSUME_SORTED=true");
+ }
+ }
+ }
+
+ // Call the abstract setup method!
+ boolean anyUseNoRefReads = false;
+ for (final SinglePassSamProgram program : programs) {
+ program.setup(in.getFileHeader(), input);
+ anyUseNoRefReads = anyUseNoRefReads || program.usesNoRefReads();
+ }
+
+
+ final ProgressLogger progress = new ProgressLogger(log);
+
+ for (final SAMRecord rec : in) {
+ final ReferenceSequence ref;
+ if (walker == null || rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
+ ref = null;
+ } else {
+ ref = walker.get(rec.getReferenceIndex());
+ }
+
+ for (final SinglePassSamProgram program : programs) {
+ program.acceptRead(rec, ref);
+ }
+
+ progress.record(rec);
+
+ // See if we need to terminate early?
+ if (stopAfter > 0 && progress.getCount() >= stopAfter) {
+ break;
+ }
+
+ // And see if we're into the unmapped reads at the end
+ if (!anyUseNoRefReads && rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
+ break;
+ }
+ }
+
+ CloserUtil.close(in);
+
+ for (final SinglePassSamProgram program : programs) {
+ program.finish();
+ }
+ }
+
+ /** Can be overriden and set to false if the section of unmapped reads at the end of the file isn't needed. */
+ protected boolean usesNoRefReads() { return true; }
+
+ /** Should be implemented by subclasses to do one-time initialization work. */
+ protected abstract void setup(final SAMFileHeader header, final File samFile);
+
+ /**
+ * Should be implemented by subclasses to accept SAMRecords one at a time.
+ * If the read has a reference sequence and a reference sequence file was supplied to the program
+ * it will be passed as 'ref'. Otherwise 'ref' may be null.
+ */
+ protected abstract void acceptRead(final SAMRecord rec, final ReferenceSequence ref);
+
+ /** Should be implemented by subclasses to do one-time finalization work. */
+ protected abstract void finish();
+
+}
diff --git a/src/java/picard/analysis/artifacts/ArtifactCounter.java b/src/java/picard/analysis/artifacts/ArtifactCounter.java
new file mode 100644
index 0000000..953b6f1
--- /dev/null
+++ b/src/java/picard/analysis/artifacts/ArtifactCounter.java
@@ -0,0 +1,216 @@
+package picard.analysis.artifacts;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.ListMap;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.analysis.artifacts.SequencingArtifactMetrics.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Keeps track of artifact counts, and extracts metrics once accumulation is finished.
+ */
+class ArtifactCounter {
+ private final String sampleAlias;
+ private final String library;
+
+ private final Set<String> fullContexts;
+ private final Map<String, String> leadingContextMap;
+ private final Map<String, String> trailingContextMap;
+ private final Map<String, String> zeroContextMap;
+
+ private final ContextAccumulator fullContextAccumulator;
+ private final ContextAccumulator halfContextAccumulator;
+ private final ContextAccumulator zeroContextAccumulator;
+
+ private final List<PreAdapterSummaryMetrics> preAdapterSummaryMetricsList;
+ private final List<PreAdapterDetailMetrics> preAdapterDetailMetricsList;
+ private final List<BaitBiasSummaryMetrics> baitBiasSummaryMetricsList;
+ private final List<BaitBiasDetailMetrics> baitBiasDetailMetricsList;
+
+ public ArtifactCounter(final String sampleAlias, final String library, final int contextSize, final boolean expectedTandemReads) {
+ this.sampleAlias = sampleAlias;
+ this.library = library;
+
+ // define the contexts
+ this.fullContexts = new HashSet<String>();
+ for (final byte[] kmer : SequenceUtil.generateAllKmers(2 * contextSize + 1)) {
+ this.fullContexts.add(StringUtil.bytesToString(kmer));
+ }
+
+ // the half contexts specify either leading or trailing bases. the zero context is just the center.
+ // NB: we use N to represent a wildcard base, rather than an ambiguous base. It's assumed that all of the input
+ // contexts are unambiguous, and that any actual N's in the data have been dealt with elsewhere.
+ final String padding = StringUtil.repeatCharNTimes('N', contextSize);
+ this.leadingContextMap = new HashMap<String, String>();
+ this.trailingContextMap = new HashMap<String, String>();
+ this.zeroContextMap = new HashMap<String, String>();
+ for (final String context : this.fullContexts) {
+ final String leading = context.substring(0, contextSize);
+ final String trailing = context.substring(contextSize + 1, context.length());
+ final char center = context.charAt(contextSize);
+ this.leadingContextMap.put(context, leading + center + padding);
+ this.trailingContextMap.put(context, padding + center + trailing);
+ this.zeroContextMap.put(context, padding + center + padding);
+ }
+
+ // set up the accumulators
+ final Set<String> halfContexts = new HashSet<String>();
+ halfContexts.addAll(leadingContextMap.values());
+ halfContexts.addAll(trailingContextMap.values());
+ final Set<String> zeroContexts = new HashSet<String>();
+ zeroContexts.addAll(zeroContextMap.values());
+
+ this.fullContextAccumulator = new ContextAccumulator(fullContexts, expectedTandemReads);
+ this.halfContextAccumulator = new ContextAccumulator(halfContexts, expectedTandemReads);
+ this.zeroContextAccumulator = new ContextAccumulator(zeroContexts, expectedTandemReads);
+
+ // these will get populated in the final step
+ preAdapterSummaryMetricsList = new ArrayList<PreAdapterSummaryMetrics>();
+ preAdapterDetailMetricsList = new ArrayList<PreAdapterDetailMetrics>();
+ baitBiasSummaryMetricsList = new ArrayList<BaitBiasSummaryMetrics>();
+ baitBiasDetailMetricsList = new ArrayList<BaitBiasDetailMetrics>();
+ }
+
+ /**
+ * Add a record to all the accumulators.
+ */
+ public void countRecord(final String refContext, final char calledBase, final SAMRecord rec) {
+ if (this.fullContexts.contains(refContext)) {
+ this.fullContextAccumulator.countRecord(refContext, calledBase, rec);
+ this.halfContextAccumulator.countRecord(this.leadingContextMap.get(refContext), calledBase, rec);
+ this.halfContextAccumulator.countRecord(this.trailingContextMap.get(refContext), calledBase, rec);
+ this.zeroContextAccumulator.countRecord(this.zeroContextMap.get(refContext), calledBase, rec);
+ }
+ }
+
+ /**
+ * Stop counting, tally things up, and extract metrics.
+ */
+ public void finish() {
+ final ListMap<Transition, DetailPair> allDetailMetrics = getDetailMetrics();
+ final Map<Transition, SummaryPair> allSummaryMetrics = getSummaryMetrics();
+
+ for (final Transition transition : Transition.altValues()) {
+ final SummaryPair summary = allSummaryMetrics.get(transition);
+ final List<DetailPair> details = allDetailMetrics.get(transition);
+ preAdapterSummaryMetricsList.add(summary.preAdapterMetrics);
+ baitBiasSummaryMetricsList.add(summary.baitBiasMetrics);
+ for (final DetailPair detail : details) {
+ preAdapterDetailMetricsList.add(detail.preAdapterMetrics);
+ baitBiasDetailMetricsList.add(detail.baitBiasMetrics);
+ }
+ }
+ }
+
+ public List<PreAdapterSummaryMetrics> getPreAdapterSummaryMetrics() { return preAdapterSummaryMetricsList; }
+ public List<PreAdapterDetailMetrics> getPreAdapterDetailMetrics() { return preAdapterDetailMetricsList; }
+ public List<BaitBiasSummaryMetrics> getBaitBiasSummaryMetrics() { return baitBiasSummaryMetricsList; }
+ public List<BaitBiasDetailMetrics> getBaitBiasDetailMetrics() { return baitBiasDetailMetricsList; }
+
+ /**
+ * Core method to compute summary metrics. For each transition, we report:
+ * 1. the total Q-score across all contexts
+ * 2. the worst full context and its Q-score
+ * 3. the worst leading context and its Q-score
+ * 4. the worst trailing context and its Q-score
+ *
+ */
+ private Map<Transition, SummaryPair> getSummaryMetrics() {
+ final Map<Transition, SummaryPair> summaryMetricsMap = new HashMap<Transition, SummaryPair>();
+
+ // extract the detail metrics from each accumulator
+ final ListMap<Transition, DetailPair> fullMetrics = this.fullContextAccumulator.calculateMetrics(sampleAlias, library);
+ final ListMap<Transition, DetailPair> halfMetrics = this.halfContextAccumulator.calculateMetrics(sampleAlias, library);
+ final ListMap<Transition, DetailPair> zeroMetrics = this.zeroContextAccumulator.calculateMetrics(sampleAlias, library);
+
+ // compute the summary metrics - one row for each transition
+ for (final Transition transition : Transition.altValues()) {
+ final List<DetailPair> fullMetricsForTransition = fullMetrics.get(transition);
+ final List<DetailPair> zeroMetricsForTransition = zeroMetrics.get(transition);
+ if (zeroMetricsForTransition.size() != 1) {
+ throw new PicardException("Should have exactly one context-free metric pair for transition: " + transition);
+ }
+
+ // we want to report on leading / trailing contexts separately
+ final List<DetailPair> leadingMetricsForTransition = new ArrayList<DetailPair>();
+ final List<DetailPair> trailingMetricsForTransition = new ArrayList<DetailPair>();
+ for (final DetailPair metrics : halfMetrics.get(transition)) {
+ // first make sure they're the same context
+ if (!metrics.preAdapterMetrics.CONTEXT.equals(metrics.baitBiasMetrics.CONTEXT)) {
+ throw new PicardException("Input detail metrics are not matched up properly - contexts differ.");
+ }
+ final boolean isLeading = this.leadingContextMap.containsValue(metrics.preAdapterMetrics.CONTEXT);
+ final boolean isTrailing = this.trailingContextMap.containsValue(metrics.preAdapterMetrics.CONTEXT);
+ // if the original contextSize is 0, there's no difference between leading and trailing, so add it to both
+ if (isLeading) leadingMetricsForTransition.add(metrics);
+ if (isTrailing) trailingMetricsForTransition.add(metrics);
+ }
+
+ // get the worst cases
+ final DetailPair totalMetric = zeroMetricsForTransition.get(0);
+ final DetailPair worstFullMetric = getWorstMetrics(fullMetricsForTransition);
+ final DetailPair worstLeadingMetric = getWorstMetrics(leadingMetricsForTransition);
+ final DetailPair worstTrailingMetric = getWorstMetrics(trailingMetricsForTransition);
+
+ // construct the actual summary metrics - a combination of all the data we've just extracted
+ final PreAdapterSummaryMetrics preAdapterSummaryMetrics = new PreAdapterSummaryMetrics();
+ final BaitBiasSummaryMetrics baitBiasSummaryMetrics = new BaitBiasSummaryMetrics();
+
+ preAdapterSummaryMetrics.SAMPLE_ALIAS = this.sampleAlias;
+ preAdapterSummaryMetrics.LIBRARY = this.library;
+ preAdapterSummaryMetrics.REF_BASE = transition.ref();
+ preAdapterSummaryMetrics.ALT_BASE = transition.call();
+ preAdapterSummaryMetrics.TOTAL_QSCORE = totalMetric.preAdapterMetrics.QSCORE;
+ preAdapterSummaryMetrics.WORST_CXT = worstFullMetric.preAdapterMetrics.CONTEXT;
+ preAdapterSummaryMetrics.WORST_CXT_QSCORE = worstFullMetric.preAdapterMetrics.QSCORE;
+ preAdapterSummaryMetrics.WORST_PRE_CXT = worstLeadingMetric.preAdapterMetrics.CONTEXT;
+ preAdapterSummaryMetrics.WORST_PRE_CXT_QSCORE = worstLeadingMetric.preAdapterMetrics.QSCORE;
+ preAdapterSummaryMetrics.WORST_POST_CXT = worstTrailingMetric.preAdapterMetrics.CONTEXT;
+ preAdapterSummaryMetrics.WORST_POST_CXT_QSCORE = worstTrailingMetric.preAdapterMetrics.QSCORE;
+ preAdapterSummaryMetrics.inferArtifactName();
+
+ baitBiasSummaryMetrics.SAMPLE_ALIAS = this.sampleAlias;
+ baitBiasSummaryMetrics.LIBRARY = this.library;
+ baitBiasSummaryMetrics.REF_BASE = transition.ref();
+ baitBiasSummaryMetrics.ALT_BASE = transition.call();
+ baitBiasSummaryMetrics.TOTAL_QSCORE = totalMetric.baitBiasMetrics.QSCORE;
+ baitBiasSummaryMetrics.WORST_CXT = worstFullMetric.baitBiasMetrics.CONTEXT;
+ baitBiasSummaryMetrics.WORST_CXT_QSCORE = worstFullMetric.baitBiasMetrics.QSCORE;
+ baitBiasSummaryMetrics.WORST_PRE_CXT = worstLeadingMetric.baitBiasMetrics.CONTEXT;
+ baitBiasSummaryMetrics.WORST_PRE_CXT_QSCORE = worstLeadingMetric.baitBiasMetrics.QSCORE;
+ baitBiasSummaryMetrics.WORST_POST_CXT = worstTrailingMetric.baitBiasMetrics.CONTEXT;
+ baitBiasSummaryMetrics.WORST_POST_CXT_QSCORE = worstTrailingMetric.baitBiasMetrics.QSCORE;
+ baitBiasSummaryMetrics.inferArtifactName();
+
+ // add the finalized metrics to the map
+ summaryMetricsMap.put(transition, new SummaryPair(preAdapterSummaryMetrics, baitBiasSummaryMetrics));
+ }
+ return summaryMetricsMap;
+ }
+
+ private ListMap<Transition, DetailPair> getDetailMetrics() {
+ return this.fullContextAccumulator.calculateMetrics(this.sampleAlias, this.library);
+ }
+
+ /**
+ * Given a list of detail metrics, get the worst pre-adapter metrics, and independently from that get the worst bait bias metrics
+ * (in terms of Q-score).
+ */
+ private DetailPair getWorstMetrics(final List<DetailPair> metrics) {
+ PreAdapterDetailMetrics worstPreAdapterMetrics = null;
+ BaitBiasDetailMetrics worstBaitBiasMetrics = null;
+ for (final DetailPair m : metrics) {
+ if (worstPreAdapterMetrics == null || m.preAdapterMetrics.QSCORE < worstPreAdapterMetrics.QSCORE) worstPreAdapterMetrics = m.preAdapterMetrics;
+ if (worstBaitBiasMetrics == null || m.baitBiasMetrics.QSCORE < worstBaitBiasMetrics.QSCORE) worstBaitBiasMetrics = m.baitBiasMetrics;
+ }
+ return new DetailPair(worstPreAdapterMetrics, worstBaitBiasMetrics);
+ }
+}
diff --git a/src/java/picard/analysis/artifacts/CollectSequencingArtifactMetrics.java b/src/java/picard/analysis/artifacts/CollectSequencingArtifactMetrics.java
new file mode 100644
index 0000000..e9c9771
--- /dev/null
+++ b/src/java/picard/analysis/artifacts/CollectSequencingArtifactMetrics.java
@@ -0,0 +1,290 @@
+package picard.analysis.artifacts;
+
+import htsjdk.samtools.AlignmentBlock;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.filter.AggregateFilter;
+import htsjdk.samtools.filter.AlignedFilter;
+import htsjdk.samtools.filter.DuplicateReadFilter;
+import htsjdk.samtools.filter.FailsVendorReadQualityFilter;
+import htsjdk.samtools.filter.InsertSizeFilter;
+import htsjdk.samtools.filter.MappingQualityFilter;
+import htsjdk.samtools.filter.NotPrimaryAlignmentFilter;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.IntervalListReferenceSequenceMask;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.analysis.SinglePassSamProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.DbSnpBitSetUtil;
+import picard.analysis.artifacts.SequencingArtifactMetrics.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CodeUtil.getOrElse;
+
+/**
+ * Quantify substitution errors caused by mismatched base pairings during various
+ * stages of sample / library prep.
+ *
+ * We measure two distinct error types - artifacts that are introduced before
+ * the addition of the read1/read2 adapters ("pre adapter") and those that are
+ * introduced after target selection ("bait bias"). For each of these, we provide
+ * summary metrics as well as detail metrics broken down by reference context
+ * (the ref bases surrounding the substitution event).
+ *
+ * For a deeper explanation, see Costello et al. 2013:
+ * http://www.ncbi.nlm.nih.gov/pubmed/23303777
+ *
+ * @author mattsooknah
+ *
+ */
+ at CommandLineProgramProperties(
+ usage = CollectSequencingArtifactMetrics.USAGE,
+ usageShort = CollectSequencingArtifactMetrics.USAGE,
+ programGroup = Metrics.class
+)
+public class CollectSequencingArtifactMetrics extends SinglePassSamProgram {
+ static final String USAGE = "Collect metrics to quantify single-base sequencing artifacts.";
+
+ @Option(doc = "An optional list of intervals to restrict analysis to.", optional = true)
+ public File INTERVALS;
+
+ @Option(doc = "VCF format dbSNP file, used to exclude regions around known polymorphisms from analysis.", optional = true)
+ public File DB_SNP;
+
+ @Option(shortName = "Q", doc = "The minimum base quality score for a base to be included in analysis.")
+ public int MINIMUM_QUALITY_SCORE = 20;
+
+ @Option(shortName = "MQ", doc = "The minimum mapping quality score for a base to be included in analysis.")
+ public int MINIMUM_MAPPING_QUALITY = 30;
+
+ @Option(shortName = "MIN_INS", doc = "The minimum insert size for a read to be included in analysis.")
+ public int MINIMUM_INSERT_SIZE = 60;
+
+ @Option(shortName = "MAX_INS", doc = "The maximum insert size for a read to be included in analysis. Set to 0 to have no maximum.")
+ public int MAXIMUM_INSERT_SIZE = 600;
+
+ @Option(shortName = "UNPAIRED", doc = "Include unpaired reads. If set to true then all paired reads will be included as well - " +
+ "MINIMUM_INSERT_SIZE and MAXIMUM_INSERT_SIZE will be ignored.")
+ public boolean INCLUDE_UNPAIRED = false;
+
+ @Option(shortName = "TANDEM", doc = "Set to true if mate pairs are being sequenced from the same strand, " +
+ "i.e. they're expected to face the same direction.")
+ public boolean TANDEM_READS = false;
+
+ @Option(doc = "When available, use original quality scores for filtering.")
+ public boolean USE_OQ = true;
+
+ @Option(doc = "The number of context bases to include on each side of the assayed base.")
+ public int CONTEXT_SIZE = 1;
+
+ @Option(doc = "If specified, only print results for these contexts in the detail metrics output. " +
+ "However, the summary metrics output will still take all contexts into consideration.")
+ public Set<String> CONTEXTS_TO_PRINT = new HashSet<String>();
+
+ private static final String UNKNOWN_LIBRARY = "UnknownLibrary";
+ private static final String UNKNOWN_SAMPLE = "UnknownSample";
+
+ private File preAdapterSummaryOut;
+ private File preAdapterDetailsOut;
+ private File baitBiasSummaryOut;
+ private File baitBiasDetailsOut;
+
+ private IntervalListReferenceSequenceMask intervalMask;
+ private DbSnpBitSetUtil dbSnpMask;
+ private SamRecordFilter recordFilter;
+
+ private final Set<String> samples = new HashSet<String>();
+ private final Set<String> libraries = new HashSet<String>();
+ private final Map<String, ArtifactCounter> artifactCounters = new HashMap<String, ArtifactCounter>();
+
+ public static void main(final String[] args) {
+ new CollectSequencingArtifactMetrics().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final List<String> messages = new ArrayList<String>();
+
+ final int contextFullLength = 2 * CONTEXT_SIZE + 1;
+ if (CONTEXT_SIZE < 0) messages.add("CONTEXT_SIZE cannot be negative");
+ for (final String context : CONTEXTS_TO_PRINT) {
+ if (context.length() != contextFullLength) {
+ messages.add("Context " + context + " is not the length implied by CONTEXT_SIZE: " + contextFullLength);
+ }
+ }
+
+ if (MINIMUM_INSERT_SIZE < 0) messages.add("MINIMUM_INSERT_SIZE cannot be negative");
+ if (MAXIMUM_INSERT_SIZE < 0) messages.add("MAXIMUM_INSERT_SIZE cannot be negative");
+ if (MAXIMUM_INSERT_SIZE > 0 && MAXIMUM_INSERT_SIZE < MINIMUM_INSERT_SIZE) {
+ messages.add("MAXIMUM_INSERT_SIZE cannot be less than MINIMUM_INSERT_SIZE unless set to 0");
+ }
+
+ return messages.isEmpty() ? null : messages.toArray(new String[messages.size()]);
+ }
+
+ @Override
+ protected void setup(final SAMFileHeader header, final File samFile) {
+ preAdapterSummaryOut = new File(OUTPUT + SequencingArtifactMetrics.PRE_ADAPTER_SUMMARY_EXT);
+ preAdapterDetailsOut = new File(OUTPUT + SequencingArtifactMetrics.PRE_ADAPTER_DETAILS_EXT);
+ baitBiasSummaryOut = new File(OUTPUT + SequencingArtifactMetrics.BAIT_BIAS_SUMMARY_EXT);
+ baitBiasDetailsOut = new File(OUTPUT + SequencingArtifactMetrics.BAIT_BIAS_DETAILS_EXT);
+
+ IOUtil.assertFileIsWritable(preAdapterSummaryOut);
+ IOUtil.assertFileIsWritable(preAdapterDetailsOut);
+ IOUtil.assertFileIsWritable(baitBiasSummaryOut);
+ IOUtil.assertFileIsWritable(baitBiasDetailsOut);
+
+ for (final SAMReadGroupRecord rec : header.getReadGroups()) {
+ samples.add(getOrElse(rec.getSample(), UNKNOWN_SAMPLE));
+ libraries.add(getOrElse(rec.getLibrary(), UNKNOWN_LIBRARY));
+ }
+
+ if (INTERVALS != null) {
+ IOUtil.assertFileIsReadable(INTERVALS);
+ intervalMask = new IntervalListReferenceSequenceMask(IntervalList.fromFile(INTERVALS).uniqued());
+ }
+
+ if (DB_SNP != null) {
+ IOUtil.assertFileIsReadable(DB_SNP);
+ dbSnpMask = new DbSnpBitSetUtil(DB_SNP, header.getSequenceDictionary());
+ }
+
+ // set record-level filters
+ final List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
+ filters.add(new FailsVendorReadQualityFilter());
+ filters.add(new NotPrimaryAlignmentFilter());
+ filters.add(new DuplicateReadFilter());
+ filters.add(new AlignedFilter(true)); // discard unmapped reads
+ filters.add(new MappingQualityFilter(MINIMUM_MAPPING_QUALITY));
+ if (!INCLUDE_UNPAIRED) {
+ final int effectiveMaxInsertSize = (MAXIMUM_INSERT_SIZE == 0) ? Integer.MAX_VALUE : MAXIMUM_INSERT_SIZE;
+ filters.add(new InsertSizeFilter(MINIMUM_INSERT_SIZE, effectiveMaxInsertSize));
+ }
+ recordFilter = new AggregateFilter(filters);
+
+ // set up the artifact counters
+ final String sampleAlias = StringUtil.join(",", new ArrayList<String>(samples));
+ for (final String library : libraries) {
+ artifactCounters.put(library, new ArtifactCounter(sampleAlias, library, CONTEXT_SIZE, TANDEM_READS));
+ }
+ }
+
+ @Override
+ protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) {
+ // see if the whole read should be skipped
+ if (recordFilter.filterOut(rec)) return;
+
+ // check read group + library
+ final String library = (rec.getReadGroup() == null) ? UNKNOWN_LIBRARY : getOrElse(rec.getReadGroup().getLibrary(), UNKNOWN_LIBRARY);
+ if (!libraries.contains(library)) {
+ // should never happen if SAM is valid
+ throw new PicardException("Record contains library that is missing from header: " + library);
+ }
+
+ // iterate over aligned positions
+ for (final AlignmentBlock block : rec.getAlignmentBlocks()) {
+ for (int offset = 0; offset < block.getLength(); offset++) {
+ // remember, these are 1-based!
+ final int readPos = block.getReadStart() + offset;
+ final int refPos = block.getReferenceStart() + offset;
+
+ /**
+ * Skip regions outside of intervals.
+ *
+ * NB: IntervalListReferenceSequenceMask.get() has side-effects which assume
+ * that successive ReferenceSequence's passed to this method will be in-order
+ * (e.g. it will break if you call acceptRead() with chr1, then chr2, then chr1
+ * again). So this only works if the underlying iteration is coordinate-sorted.
+ */
+ if (intervalMask != null && !intervalMask.get(ref.getContigIndex(), refPos)) continue;
+
+ // skip dbSNP sites
+ if (dbSnpMask != null && dbSnpMask.isDbSnpSite(ref.getName(), refPos)) continue;
+
+ // skip the ends of the reference
+ final int contextStartIndex = refPos - CONTEXT_SIZE - 1;
+ final int contextFullLength = 2 * CONTEXT_SIZE + 1;
+ if (contextStartIndex < 0 || contextStartIndex + contextFullLength > ref.length()) continue;
+
+ // skip contexts with N bases
+ final String context = StringUtil.bytesToString(ref.getBases(), contextStartIndex, contextFullLength).toUpperCase();
+ if (context.contains("N")) continue;
+
+ // skip low BQ sites
+ if (failsBaseQualityCutoff(readPos, rec)) continue;
+
+ // skip N bases in read
+ final char readBase = Character.toUpperCase((char) rec.getReadBases()[readPos - 1]);
+ if (readBase == 'N') continue;
+
+ // count the base!
+ artifactCounters.get(library).countRecord(context, readBase, rec);
+ }
+ }
+ }
+
+ @Override
+ protected void finish() {
+ final MetricsFile<PreAdapterSummaryMetrics, Integer> preAdapterSummaryMetricsFile = getMetricsFile();
+ final MetricsFile<PreAdapterDetailMetrics, Integer> preAdapterDetailMetricsFile = getMetricsFile();
+ final MetricsFile<BaitBiasSummaryMetrics, Integer> baitBiasSummaryMetricsFile = getMetricsFile();
+ final MetricsFile<BaitBiasDetailMetrics, Integer> baitBiasDetailMetricsFile = getMetricsFile();
+
+ for (final ArtifactCounter counter : artifactCounters.values()) {
+ // build metrics
+ counter.finish();
+
+ // write metrics
+ preAdapterSummaryMetricsFile.addAllMetrics(counter.getPreAdapterSummaryMetrics());
+ baitBiasSummaryMetricsFile.addAllMetrics(counter.getBaitBiasSummaryMetrics());
+
+ for (final PreAdapterDetailMetrics preAdapterDetailMetrics : counter.getPreAdapterDetailMetrics()) {
+ if (CONTEXTS_TO_PRINT.size() == 0 || CONTEXTS_TO_PRINT.contains(preAdapterDetailMetrics.CONTEXT)) {
+ preAdapterDetailMetricsFile.addMetric(preAdapterDetailMetrics);
+ }
+ }
+ for (final BaitBiasDetailMetrics baitBiasDetailMetrics : counter.getBaitBiasDetailMetrics()) {
+ if (CONTEXTS_TO_PRINT.size() == 0 || CONTEXTS_TO_PRINT.contains(baitBiasDetailMetrics.CONTEXT)) {
+ baitBiasDetailMetricsFile.addMetric(baitBiasDetailMetrics);
+ }
+ }
+
+ }
+
+ preAdapterDetailMetricsFile.write(preAdapterDetailsOut);
+ preAdapterSummaryMetricsFile.write(preAdapterSummaryOut);
+ baitBiasDetailMetricsFile.write(baitBiasDetailsOut);
+ baitBiasSummaryMetricsFile.write(baitBiasSummaryOut);
+ }
+
+ @Override
+ protected boolean usesNoRefReads() { return false; }
+
+ /**
+ * Check if this read base fails the base quality cutoff.
+ */
+ private boolean failsBaseQualityCutoff(final int oneIndexedPos, final SAMRecord rec) {
+ final byte qual;
+ if (USE_OQ && rec.getOriginalBaseQualities() != null) {
+ qual = rec.getOriginalBaseQualities()[oneIndexedPos - 1];
+ } else {
+ qual = rec.getBaseQualities()[oneIndexedPos - 1];
+ }
+ return (qual < MINIMUM_QUALITY_SCORE);
+ }
+}
diff --git a/src/java/picard/analysis/artifacts/ContextAccumulator.java b/src/java/picard/analysis/artifacts/ContextAccumulator.java
new file mode 100644
index 0000000..06f126b
--- /dev/null
+++ b/src/java/picard/analysis/artifacts/ContextAccumulator.java
@@ -0,0 +1,132 @@
+package picard.analysis.artifacts;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.ListMap;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.PicardException;
+import picard.analysis.artifacts.SequencingArtifactMetrics.*;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Keeps track of the AlignmentAccumulators for each artifact / context of interest.
+ */
+class ContextAccumulator {
+
+ // are the PE reads expected to face the same direction?
+ private final boolean expectedTandemReads;
+ private final Map<Transition, Map<String, AlignmentAccumulator>> artifactMap;
+
+ public ContextAccumulator(final Set<String> contexts, final boolean expectedTandemReads) {
+ this.expectedTandemReads = expectedTandemReads;
+ this.artifactMap = new HashMap<Transition, Map<String, AlignmentAccumulator>>();
+ for (final Transition transition : Transition.values()) {
+ this.artifactMap.put(transition, new HashMap<String, AlignmentAccumulator>());
+ }
+ for (final String context : contexts) {
+ final char refBase = getCentralBase(context);
+ for (final byte calledBase : SequenceUtil.VALID_BASES_UPPER) {
+ final Transition transition = Transition.transitionOf(refBase, (char)calledBase);
+ this.artifactMap.get(transition).put(context, new AlignmentAccumulator());
+ }
+ }
+ }
+
+ public void countRecord(final String refContext, final char calledBase, final SAMRecord rec) {
+ final char refBase = getCentralBase(refContext);
+ final Transition transition = Transition.transitionOf(refBase, calledBase);
+ this.artifactMap.get(transition).get(refContext).countRecord(rec);
+ }
+
+ /**
+ * Core method to compute detailed (i.e. context-by-context) metrics from this accumulator.
+ */
+ public ListMap<Transition, DetailPair> calculateMetrics(final String sampleAlias, final String library) {
+ final ListMap<Transition, DetailPair> detailMetricsMap = new ListMap<Transition, DetailPair>();
+ for (final Transition altTransition : Transition.altValues()) {
+ final Transition refTransition = altTransition.matchingRef();
+ for (final String context : this.artifactMap.get(altTransition).keySet()) {
+ // each combination of artifact + context represents a single metric row
+ final PreAdapterDetailMetrics preAdapterDetailMetrics = new PreAdapterDetailMetrics();
+ final BaitBiasDetailMetrics baitBiasDetailMetrics = new BaitBiasDetailMetrics();
+
+ // populate basic fields
+ preAdapterDetailMetrics.SAMPLE_ALIAS = sampleAlias;
+ preAdapterDetailMetrics.LIBRARY = library;
+ preAdapterDetailMetrics.CONTEXT = context;
+ preAdapterDetailMetrics.REF_BASE = altTransition.ref();
+ preAdapterDetailMetrics.ALT_BASE = altTransition.call();
+
+ baitBiasDetailMetrics.SAMPLE_ALIAS = sampleAlias;
+ baitBiasDetailMetrics.LIBRARY = library;
+ baitBiasDetailMetrics.CONTEXT = context;
+ baitBiasDetailMetrics.REF_BASE = altTransition.ref();
+ baitBiasDetailMetrics.ALT_BASE = altTransition.call();
+
+ // retrieve all the necessary alignment counters.
+ final AlignmentAccumulator fwdRefAlignments = this.artifactMap.get(refTransition).get(context);
+ final AlignmentAccumulator fwdAltAlignments = this.artifactMap.get(altTransition).get(context);
+ final AlignmentAccumulator revRefAlignments = this.artifactMap.get(refTransition.complement()).get(SequenceUtil.reverseComplement(context));
+ final AlignmentAccumulator revAltAlignments = this.artifactMap.get(altTransition.complement()).get(SequenceUtil.reverseComplement(context));
+
+ // categorize observations of pre-adapter artifacts
+ if (expectedTandemReads) {
+ // if both ends are sequenced on the same strand, then read1/read2 should exhibit the same bias
+ preAdapterDetailMetrics.PRO_REF_BASES = fwdRefAlignments.R1_POS + fwdRefAlignments.R2_POS + revRefAlignments.R1_NEG + revRefAlignments.R2_NEG;
+ preAdapterDetailMetrics.PRO_ALT_BASES = fwdAltAlignments.R1_POS + fwdAltAlignments.R2_POS + revAltAlignments.R1_NEG + revAltAlignments.R2_NEG;
+ preAdapterDetailMetrics.CON_REF_BASES = fwdRefAlignments.R1_NEG + fwdRefAlignments.R2_NEG + revRefAlignments.R1_POS + revRefAlignments.R2_POS;
+ preAdapterDetailMetrics.CON_ALT_BASES = fwdAltAlignments.R1_NEG + fwdAltAlignments.R2_NEG + revAltAlignments.R1_POS + revAltAlignments.R2_POS;
+ } else {
+ // if ends are sequenced on opposite strands, then read1/read2 should exhibit opposite biases
+ preAdapterDetailMetrics.PRO_REF_BASES = fwdRefAlignments.R1_POS + fwdRefAlignments.R2_NEG + revRefAlignments.R1_NEG + revRefAlignments.R2_POS;
+ preAdapterDetailMetrics.PRO_ALT_BASES = fwdAltAlignments.R1_POS + fwdAltAlignments.R2_NEG + revAltAlignments.R1_NEG + revAltAlignments.R2_POS;
+ preAdapterDetailMetrics.CON_REF_BASES = fwdRefAlignments.R1_NEG + fwdRefAlignments.R2_POS + revRefAlignments.R1_POS + revRefAlignments.R2_NEG;
+ preAdapterDetailMetrics.CON_ALT_BASES = fwdAltAlignments.R1_NEG + fwdAltAlignments.R2_POS + revAltAlignments.R1_POS + revAltAlignments.R2_NEG;
+ }
+
+ // categorize observations of bait bias artifacts
+ baitBiasDetailMetrics.FWD_CXT_REF_BASES = fwdRefAlignments.R1_POS + fwdRefAlignments.R1_NEG + fwdRefAlignments.R2_POS + fwdRefAlignments.R2_NEG;
+ baitBiasDetailMetrics.FWD_CXT_ALT_BASES = fwdAltAlignments.R1_POS + fwdAltAlignments.R1_NEG + fwdAltAlignments.R2_POS + fwdAltAlignments.R2_NEG;
+ baitBiasDetailMetrics.REV_CXT_REF_BASES = revRefAlignments.R1_POS + revRefAlignments.R1_NEG + revRefAlignments.R2_POS + revRefAlignments.R2_NEG;
+ baitBiasDetailMetrics.REV_CXT_ALT_BASES = revAltAlignments.R1_POS + revAltAlignments.R1_NEG + revAltAlignments.R2_POS + revAltAlignments.R2_NEG;
+
+ // calculate error rates + Q-scores
+ preAdapterDetailMetrics.calculateDerivedStatistics();
+ baitBiasDetailMetrics.calculateDerivedStatistics();
+
+ // add the finalized metrics to the map
+ detailMetricsMap.add(altTransition, new DetailPair(preAdapterDetailMetrics, baitBiasDetailMetrics));
+ }
+ }
+ return detailMetricsMap;
+ }
+
+ private char getCentralBase(final String context) {
+ if (context.length() % 2 == 0) throw new PicardException("Contexts cannot have an even number of bases: " + context);
+ else return context.charAt(context.length() / 2);
+ }
+
+ /**
+ * Little class for breaking down alignments by read1/read2 and positive/negative strand.
+ */
+ private static class AlignmentAccumulator {
+ private long R1_POS = 0;
+ private long R1_NEG = 0;
+ private long R2_POS = 0;
+ private long R2_NEG = 0;
+
+ private void countRecord(final SAMRecord rec) {
+ final boolean isNegativeStrand = rec.getReadNegativeStrandFlag();
+ final boolean isReadTwo = rec.getReadPairedFlag() && rec.getSecondOfPairFlag();
+ if (isReadTwo) {
+ if (isNegativeStrand) this.R2_NEG++;
+ else this.R2_POS++;
+ } else {
+ if (isNegativeStrand) this.R1_NEG++;
+ else this.R1_POS++;
+ }
+ }
+ }
+}
diff --git a/src/java/picard/analysis/artifacts/ConvertSequencingArtifactToOxoG.java b/src/java/picard/analysis/artifacts/ConvertSequencingArtifactToOxoG.java
new file mode 100644
index 0000000..1908431
--- /dev/null
+++ b/src/java/picard/analysis/artifacts/ConvertSequencingArtifactToOxoG.java
@@ -0,0 +1,168 @@
+package picard.analysis.artifacts;
+
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+import picard.analysis.CollectOxoGMetrics.*;
+import picard.analysis.artifacts.SequencingArtifactMetrics.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+ at CommandLineProgramProperties(
+ usage = ConvertSequencingArtifactToOxoG.USAGE,
+ usageShort = ConvertSequencingArtifactToOxoG.USAGE,
+ programGroup = Metrics.class
+)
+public class ConvertSequencingArtifactToOxoG extends CommandLineProgram {
+ static final String USAGE = "Extract OxoG metrics format from generalized artifact metrics.";
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "Basename for input artifact metrics")
+ public File INPUT_BASE;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "Basename for output OxoG metrics. Defaults to same basename as input metrics",
+ optional = true)
+ public File OUTPUT_BASE;
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new ConvertSequencingArtifactToOxoG().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ if (OUTPUT_BASE == null) { OUTPUT_BASE = INPUT_BASE; }
+
+ final File PRE_ADAPTER_IN = new File(INPUT_BASE + SequencingArtifactMetrics.PRE_ADAPTER_DETAILS_EXT);
+ final File BAIT_BIAS_IN = new File(INPUT_BASE + SequencingArtifactMetrics.BAIT_BIAS_DETAILS_EXT);
+ final File OXOG_OUT = new File(OUTPUT_BASE + ".oxog_metrics");
+
+ IOUtil.assertFileIsReadable(PRE_ADAPTER_IN);
+ IOUtil.assertFileIsReadable(BAIT_BIAS_IN);
+ IOUtil.assertFileIsWritable(OXOG_OUT);
+
+ final List<PreAdapterDetailMetrics> preAdapterDetailMetricsList = (List<PreAdapterDetailMetrics>) MetricsFile.readBeans(PRE_ADAPTER_IN);
+ final List<BaitBiasDetailMetrics> baitBiasDetailMetricsList = (List<BaitBiasDetailMetrics>) MetricsFile.readBeans(BAIT_BIAS_IN);
+
+ // TODO should we validate that the two inputs match up as expected?
+
+ /**
+ * Determine output fields. Just copy these from the input for now.
+ */
+ final String oxogSampleAlias = preAdapterDetailMetricsList.get(0).SAMPLE_ALIAS;
+ final Set<String> oxogLibraries = new HashSet<String>();
+ final Set<String> oxogContexts = new HashSet<String>();
+ for (final PreAdapterDetailMetrics preAdapter : preAdapterDetailMetricsList) {
+ oxogLibraries.add(preAdapter.LIBRARY);
+ // Remember that OxoG only reports on the 'C' contexts
+ if (preAdapter.REF_BASE == 'C') {
+ oxogContexts.add(preAdapter.CONTEXT);
+ }
+ }
+
+ /**
+ * Store the inputs in maps of {Library -> {Context, Metric}} for easy access.
+ * Remember, we only care about two transitions - C>A and G>T! Thus, for each context we
+ * will only store one metric.
+ */
+ final Map<String, Map<String, PreAdapterDetailMetrics>> preAdapterDetailMetricsMap = new HashMap<String, Map<String, PreAdapterDetailMetrics>>();
+ final Map<String, Map<String, BaitBiasDetailMetrics>> baitBiasDetailMetricsMap = new HashMap<String, Map<String, BaitBiasDetailMetrics>>();
+ for (final String library : oxogLibraries) {
+ final Map<String, PreAdapterDetailMetrics> contextsToPreAdapter = new HashMap<String, PreAdapterDetailMetrics>();
+ final Map<String, BaitBiasDetailMetrics> contextsToBaitBias = new HashMap<String, BaitBiasDetailMetrics>();
+ preAdapterDetailMetricsMap.put(library, contextsToPreAdapter);
+ baitBiasDetailMetricsMap.put(library, contextsToBaitBias);
+ }
+ for (final PreAdapterDetailMetrics preAdapter : preAdapterDetailMetricsList) {
+ final Transition transition = Transition.transitionOf(preAdapter.REF_BASE, preAdapter.ALT_BASE);
+ if (isOxoG(transition)) {
+ preAdapterDetailMetricsMap.get(preAdapter.LIBRARY).put(preAdapter.CONTEXT, preAdapter);
+ }
+ }
+ for (final BaitBiasDetailMetrics baitBias : baitBiasDetailMetricsList) {
+ final Transition transition = Transition.transitionOf(baitBias.REF_BASE, baitBias.ALT_BASE);
+ if (isOxoG(transition)) {
+ baitBiasDetailMetricsMap.get(baitBias.LIBRARY).put(baitBias.CONTEXT, baitBias);
+ }
+ }
+
+ /**
+ * Create the OxoG metrics
+ */
+ final List<CpcgMetrics> oxogMetrics = new ArrayList<CpcgMetrics>();
+ for (final String library : oxogLibraries) {
+ for (final String context : oxogContexts) {
+ final CpcgMetrics m = new CpcgMetrics();
+ m.SAMPLE_ALIAS = oxogSampleAlias;
+ m.LIBRARY = library;
+ m.CONTEXT = context;
+ m.TOTAL_SITES = 0; // not calculated in the input metrics
+
+ /**
+ * Get the relevant input metrics. This is done in a somewhat confusing way:
+ *
+ * 1. For pre-adapter metrics: note that OxoG only reports 'C' contexts, even though the actual pre-adapter OxoG artifact
+ * occurs when the reference-strand base is 'G'. This is because OxoG reverse-complements all the contexts for some reason.
+ * Thus when we add an entry for 'ACA' in the output, we actually need to get that data from 'TGT' in the input.
+ *
+ * 2. For bait-bias metrics: for each context, we report two opposing error rates, C_REF and G_REF, because for this metric
+ * the bias could really go in either direction (whereas for pre-adapter artifacts we only expect one direction: G>T, but
+ * never C>A, on the original reference strand). C_REF corresponds to the actual context printed in that row, and G_REF
+ * corresponds to its reverse complement. So for 'ACA' in the output, we need to take data from both 'ACA' and 'TGT' in the
+ * input.
+ */
+
+ final PreAdapterDetailMetrics preAdapter = preAdapterDetailMetricsMap.get(library).get(SequenceUtil.reverseComplement(context));
+ final BaitBiasDetailMetrics baitBiasFwd = baitBiasDetailMetricsMap.get(library).get(context);
+ final BaitBiasDetailMetrics baitBiasRev = baitBiasDetailMetricsMap.get(library).get(SequenceUtil.reverseComplement(context));
+
+ // extract fields from PreAdapterDetailMetrics
+ m.TOTAL_BASES = preAdapter.PRO_REF_BASES + preAdapter.PRO_ALT_BASES + preAdapter.CON_REF_BASES + preAdapter.CON_ALT_BASES;
+ m.REF_TOTAL_BASES = preAdapter.PRO_REF_BASES + preAdapter.CON_REF_BASES;
+ m.REF_NONOXO_BASES = preAdapter.CON_REF_BASES;
+ m.REF_OXO_BASES = preAdapter.PRO_REF_BASES;
+ m.ALT_NONOXO_BASES = preAdapter.CON_ALT_BASES;
+ m.ALT_OXO_BASES = preAdapter.PRO_ALT_BASES;
+ m.OXIDATION_ERROR_RATE = preAdapter.ERROR_RATE;
+ m.OXIDATION_Q = preAdapter.QSCORE;
+
+ // extract fields from BaitBiasDetailMetrics
+ m.C_REF_REF_BASES = baitBiasFwd.FWD_CXT_REF_BASES;
+ m.G_REF_REF_BASES = baitBiasFwd.REV_CXT_REF_BASES;
+ m.C_REF_ALT_BASES = baitBiasFwd.FWD_CXT_ALT_BASES;
+ m.G_REF_ALT_BASES = baitBiasFwd.REV_CXT_ALT_BASES;
+ m.C_REF_OXO_ERROR_RATE = baitBiasFwd.ERROR_RATE;
+ m.C_REF_OXO_Q = baitBiasFwd.QSCORE;
+ m.G_REF_OXO_ERROR_RATE = baitBiasRev.ERROR_RATE;
+ m.G_REF_OXO_Q = baitBiasRev.QSCORE;
+
+ // add it
+ oxogMetrics.add(m);
+ }
+ }
+
+ final MetricsFile<CpcgMetrics, Integer> outputFile = getMetricsFile();
+ for (final CpcgMetrics m : oxogMetrics) {
+ outputFile.addMetric(m);
+ }
+
+ outputFile.write(OXOG_OUT);
+ return 0;
+ }
+
+ private boolean isOxoG(final Transition t) {
+ return t.equals(Transition.CtoA) || t.equals(Transition.GtoT);
+ }
+}
diff --git a/src/java/picard/analysis/artifacts/SequencingArtifactMetrics.java b/src/java/picard/analysis/artifacts/SequencingArtifactMetrics.java
new file mode 100644
index 0000000..e4cb0ff
--- /dev/null
+++ b/src/java/picard/analysis/artifacts/SequencingArtifactMetrics.java
@@ -0,0 +1,269 @@
+package picard.analysis.artifacts;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.util.QualityUtil;
+
+public class SequencingArtifactMetrics {
+ public static final String PRE_ADAPTER_SUMMARY_EXT = ".pre_adapter_summary_metrics";
+ public static final String PRE_ADAPTER_DETAILS_EXT = ".pre_adapter_detail_metrics";
+ public static final String BAIT_BIAS_SUMMARY_EXT = ".bait_bias_summary_metrics";
+ public static final String BAIT_BIAS_DETAILS_EXT = ".bait_bias_detail_metrics";
+
+ private static final double MIN_ERROR = 1e-10; // minimum error rate to report
+
+ /**
+ * Summary analysis of a single pre-adapter artifact.
+ *
+ * These artifacts occur on the original template strand, before the addition of adapters,
+ * so they correlate with read number / orientation in a specific way.
+ *
+ * For example, the well-known "Oxo-G" artifact occurs when a G on the template
+ * strand is oxidized, giving it an affinity for binding to A rather than the usual C.
+ * Thus PCR will introduce apparent G>T substitutions in read 1 and C>A in read 2.
+ * In the resulting alignments, a given G>T or C>A observation could either be:
+ *
+ * 1. a true mutation
+ * 2. an OxoG artifact
+ * 3. some other kind of artifact
+ *
+ * On average, we assume that 1 and 3 will not display this read number / orientation bias, so
+ * their contributions will cancel out in the calculation.
+ *
+ */
+ public static class PreAdapterSummaryMetrics extends MetricBase {
+ /** The name of the sample being assayed. */
+ public String SAMPLE_ALIAS;
+ /** The name of the library being assayed. */
+ public String LIBRARY;
+ /** The (upper-case) original base on the reference strand. */
+ public char REF_BASE;
+ /** The (upper-case) alternative base that is called as a result of DNA damage. */
+ public char ALT_BASE;
+
+ /**
+ * The total Phred-scaled Q-score for this artifact. A lower Q-score
+ * means a higher probability that a REF_BASE:ALT_BASE observation
+ * randomly picked from the data will be due to this artifact, rather
+ * than a true variant.
+ */
+ public double TOTAL_QSCORE;
+
+ /** The sequence context (reference bases surrounding the locus of interest) having the lowest Q-score among all contexts for this artifact. */
+ public String WORST_CXT;
+ /** The Q-score for the worst context. */
+ public double WORST_CXT_QSCORE;
+
+ /** The pre-context (reference bases leading up to the locus of interest) with the lowest Q-score. */
+ public String WORST_PRE_CXT;
+ /** The Q-score for the worst pre-context. */
+ public double WORST_PRE_CXT_QSCORE;
+
+ /** The post-context (reference bases trailing after the locus of interest) with the lowest Q-score. */
+ public String WORST_POST_CXT;
+ /** The Q-score for the worst post-context. */
+ public double WORST_POST_CXT_QSCORE;
+
+ /** A "nickname" of this artifact, if it is a known error mode. */
+ public String ARTIFACT_NAME;
+
+ /**
+ * Label the artifacts corresponding to known error modes.
+ */
+ public void inferArtifactName() {
+ if (this.REF_BASE == 'G' && this.ALT_BASE == 'T') this.ARTIFACT_NAME = "OxoG";
+ else if (this.REF_BASE == 'C' && this.ALT_BASE == 'T') this.ARTIFACT_NAME = "Deamination";
+ else this.ARTIFACT_NAME = "NA";
+ }
+ }
+
+ /**
+ * Summary analysis of a single bait bias artifact, also known as a reference bias artifact.
+ *
+ * These artifacts occur during or after the target selection step, and correlate with substitution
+ * rates that are "biased", or higher for sites having one base on the reference/positive strand
+ * relative to sites having the complementary base on that strand.
+ *
+ * For example, a G>T artifact during the target selection step might result in a higher
+ * G>T / C>A substitution rate at sites with a G on the positive strand (and C on the negative),
+ * relative to sites with the flip (C positive / G negative). This is known as the "G-Ref" artifact.
+ *
+ */
+ public static class BaitBiasSummaryMetrics extends MetricBase {
+ /** The name of the sample being assayed. */
+ public String SAMPLE_ALIAS;
+ /** The name of the library being assayed. */
+ public String LIBRARY;
+ /** The (upper-case) original base on the reference strand. */
+ public char REF_BASE;
+ /** The (upper-case) alternative base that is called as a result of DNA damage. */
+ public char ALT_BASE;
+
+ /**
+ * The total Phred-scaled Q-score for this artifact. A lower Q-score
+ * means a higher probability that a REF_BASE:ALT_BASE observation
+ * randomly picked from the data will be due to this artifact, rather
+ * than a true variant.
+ */
+ public double TOTAL_QSCORE;
+
+ /** The sequence context (reference bases surrounding the locus of interest) having the lowest Q-score among all contexts for this artifact. */
+ public String WORST_CXT;
+ /** The Q-score for the worst context. */
+ public double WORST_CXT_QSCORE;
+
+ /** The pre-context (reference bases leading up to the locus of interest) with the lowest Q-score. */
+ public String WORST_PRE_CXT;
+ /** The Q-score for the worst pre-context. */
+ public double WORST_PRE_CXT_QSCORE;
+
+ /** The post-context (reference bases trailing after the locus of interest) with the lowest Q-score. */
+ public String WORST_POST_CXT;
+ /** The Q-score for the worst post-context. */
+ public double WORST_POST_CXT_QSCORE;
+
+ /** A "nickname" of this artifact, if it is a known error mode. */
+ public String ARTIFACT_NAME;
+
+ /**
+ * Label the artifacts corresponding to known error modes.
+ */
+ public void inferArtifactName() {
+ if (this.REF_BASE == 'G' && this.ALT_BASE == 'T') this.ARTIFACT_NAME = "Gref";
+ else if (this.REF_BASE == 'C' && this.ALT_BASE == 'A') this.ARTIFACT_NAME = "Cref";
+ else this.ARTIFACT_NAME = "NA";
+ }
+ }
+
+ /**
+ * Pre-adapter artifacts broken down by context.
+ */
+ public static class PreAdapterDetailMetrics extends MetricBase {
+ /** The name of the sample being assayed. */
+ public String SAMPLE_ALIAS;
+ /** The name of the library being assayed. */
+ public String LIBRARY;
+ /** The (upper-case) original base on the reference strand. */
+ public char REF_BASE;
+ /** The (upper-case) alternative base that is called as a result of DNA damage. */
+ public char ALT_BASE;
+
+ /** The sequence context to which the analysis is constrained. */
+ public String CONTEXT;
+
+ /** The number of REF_BASE:REF_BASE alignments having a read number and orientation that supports the presence of this artifact. */
+ public long PRO_REF_BASES;
+ /** The number of REF_BASE:ALT_BASE alignments having a read number and orientation that supports the presence of this artifact. */
+ public long PRO_ALT_BASES;
+ /** The number of REF_BASE:REF_BASE alignments having a read number and orientation that refutes the presence of this artifact. */
+ public long CON_REF_BASES;
+ /** The number of REF_BASE:ALT_BASE alignments having a read number and orientation that refutes the presence of this artifact. */
+ public long CON_ALT_BASES;
+
+ /**
+ * The estimated error rate due to this artifact.
+ * Calculated as max(1e-10, (PRO_ALT_BASES - CON_ALT_BASES) / (PRO_ALT_BASES + PRO_REF_BASES + CON_ALT_BASES + CON_REF_BASES)).
+ */
+ public double ERROR_RATE;
+ /** The Phred-scaled quality score of the artifact, calculated as -10 * log10(ERROR_RATE). */
+ public double QSCORE;
+
+ /**
+ * Calculate the error rate given the raw counts. Negative rates are set to MIN_ERROR.
+ */
+ public void calculateDerivedStatistics() {
+ this.ERROR_RATE = MIN_ERROR;
+ final long totalBases = this.PRO_REF_BASES + this.PRO_ALT_BASES + this.CON_REF_BASES + this.CON_ALT_BASES;
+ if (totalBases > 0) {
+ final double rawErrorRate = (this.PRO_ALT_BASES - this.CON_ALT_BASES) / (double) totalBases;
+ this.ERROR_RATE = Math.max(MIN_ERROR, rawErrorRate);
+ }
+ this.QSCORE = QualityUtil.getPhredScoreFromErrorProbability(this.ERROR_RATE);
+ }
+ }
+
+ /**
+ * Bait bias artifacts broken down by context.
+ */
+ public static class BaitBiasDetailMetrics extends MetricBase {
+ /** The name of the sample being assayed. */
+ public String SAMPLE_ALIAS;
+ /** The name of the library being assayed. */
+ public String LIBRARY;
+ /** The (upper-case) original base on the reference strand. */
+ public char REF_BASE;
+ /** The (upper-case) alternative base that is called as a result of DNA damage. */
+ public char ALT_BASE;
+
+ /** The sequence context to which the analysis is constrained. */
+ public String CONTEXT;
+
+ /** The number of REF_BASE:REF_BASE alignments at sites with the given reference context. */
+ public long FWD_CXT_REF_BASES;
+ /** The number of REF_BASE:ALT_BASE alignments at sites with the given reference context. */
+ public long FWD_CXT_ALT_BASES;
+ /** The number of ~REF_BASE:~REF_BASE alignments at sites complementary to the given reference context. */
+ public long REV_CXT_REF_BASES;
+ /** The number of ~REF_BASE:~ALT_BASE alignments at sites complementary to the given reference context. */
+ public long REV_CXT_ALT_BASES;
+
+ /** The substitution rate of REF_BASE:ALT_BASE, calculated as max(1e-10, FWD_CXT_ALT_BASES / (FWD_CXT_ALT_BASES + FWD_CXT_REF_BASES)). */
+ public double FWD_ERROR_RATE;
+ /** The substitution rate of ~REF_BASE:~ALT_BASE, calculated as max(1e-10, REV_CXT_ALT_BASES / (REV_CXT_ALT_BASES + REV_CXT_REF_BASES)). */
+ public double REV_ERROR_RATE;
+
+ /**
+ * The bait bias error rate, calculated as max(1e-10, FWD_ERROR_RATE - REV_ERROR_RATE).
+ */
+ public double ERROR_RATE;
+ /** The Phred-scaled quality score of the artifact, calculated as -10 * log10(ERROR_RATE). */
+ public double QSCORE;
+
+ /**
+ * Calculate the error rate given the raw counts. Negative rates are set to MIN_ERROR.
+ */
+ public void calculateDerivedStatistics() {
+ this.FWD_ERROR_RATE = MIN_ERROR;
+ final long fwdBases = this.FWD_CXT_REF_BASES + this.FWD_CXT_ALT_BASES;
+ if (fwdBases > 0) {
+ final double fwdErr = this.FWD_CXT_ALT_BASES / (double) fwdBases;
+ this.FWD_ERROR_RATE = Math.max(MIN_ERROR, fwdErr);
+ }
+
+ this.REV_ERROR_RATE = MIN_ERROR;
+ final long revBases = this.REV_CXT_REF_BASES + this.REV_CXT_ALT_BASES;
+ if (revBases > 0) {
+ final double revErr = this.REV_CXT_ALT_BASES / (double) revBases;
+ this.REV_ERROR_RATE = Math.max(MIN_ERROR, revErr);
+ }
+
+ this.ERROR_RATE = Math.max(MIN_ERROR, this.FWD_ERROR_RATE - this.REV_ERROR_RATE);
+ this.QSCORE = QualityUtil.getPhredScoreFromErrorProbability(this.ERROR_RATE);
+ }
+ }
+
+ /**
+ * Little container for passing around a detail metrics pair.
+ */
+ static class DetailPair {
+ final PreAdapterDetailMetrics preAdapterMetrics;
+ final BaitBiasDetailMetrics baitBiasMetrics;
+
+ DetailPair(final PreAdapterDetailMetrics preAdapterMetrics, final BaitBiasDetailMetrics baitBiasMetrics) {
+ this.preAdapterMetrics = preAdapterMetrics;
+ this.baitBiasMetrics = baitBiasMetrics;
+ }
+ }
+
+ /**
+ * Little container for passing around a summary metrics pair.
+ */
+ static class SummaryPair {
+ final PreAdapterSummaryMetrics preAdapterMetrics;
+ final BaitBiasSummaryMetrics baitBiasMetrics;
+
+ SummaryPair(final PreAdapterSummaryMetrics preAdapterMetrics, final BaitBiasSummaryMetrics baitBiasMetrics) {
+ this.preAdapterMetrics = preAdapterMetrics;
+ this.baitBiasMetrics = baitBiasMetrics;
+ }
+ }
+}
diff --git a/src/java/picard/analysis/artifacts/Transition.java b/src/java/picard/analysis/artifacts/Transition.java
new file mode 100644
index 0000000..303b0ee
--- /dev/null
+++ b/src/java/picard/analysis/artifacts/Transition.java
@@ -0,0 +1,54 @@
+package picard.analysis.artifacts;
+
+import htsjdk.samtools.util.SequenceUtil;
+
+enum Transition {
+ AtoA('A','A'), AtoC('A','C'), AtoG('A','G'), AtoT('A','T'),
+ CtoA('C','A'), CtoC('C','C'), CtoG('C','G'), CtoT('C','T'),
+ GtoA('G','A'), GtoC('G','C'), GtoG('G','G'), GtoT('G','T'),
+ TtoA('T','A'), TtoC('T','C'), TtoG('T','G'), TtoT('T','T');
+
+ private static final Transition[] ALT_VALUES = new Transition[]{
+ AtoC, AtoG, AtoT, CtoA, CtoG, CtoT, GtoA, GtoC, GtoT, TtoA, TtoC, TtoG
+ };
+
+ private final char ref;
+ private final char call;
+
+ Transition(final char ref, final char call) {
+ this.ref = ref;
+ this.call = call;
+ }
+
+ public static Transition transitionOf(final char ref, final char call) {
+ return valueOf(ref + "to" + call);
+ }
+
+ /**
+ * Like values(), but ignores the ref:ref "transitions".
+ */
+ public static Transition[] altValues() { return ALT_VALUES; }
+
+ /**
+ * Return the complementary transition. Both ref and call must be complemented.
+ */
+ public Transition complement() {
+ return transitionOf((char) SequenceUtil.complement((byte) this.ref), (char) SequenceUtil.complement((byte) this.call));
+ }
+
+ /**
+ * Return the ref:ref transition corresponding to this ref:alt transition.
+ */
+ public Transition matchingRef() {
+ return transitionOf(this.ref, this.ref);
+ }
+
+ public char ref() { return this.ref; }
+
+ public char call() { return this.call; }
+
+ @Override
+ public String toString() {
+ return this.ref + ">" + this.call;
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/analysis/directed/CalculateHsMetrics.java b/src/java/picard/analysis/directed/CalculateHsMetrics.java
new file mode 100644
index 0000000..5d42821
--- /dev/null
+++ b/src/java/picard/analysis/directed/CalculateHsMetrics.java
@@ -0,0 +1,98 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis.directed;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.StringUtil;
+import picard.analysis.MetricAccumulationLevel;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * Calculates a set of HS metrics from a sam or bam file. See HsMetricsCollector and CollectTargetedMetrics for more details.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Calculates a set of Hybrid Selection specific metrics from an aligned SAM" +
+ "or BAM file. If a reference sequence is provided, AT/GC dropout metrics will " +
+ "be calculated, and the PER_TARGET_COVERAGE option can be used to output GC and " +
+ "mean coverage information for every target.",
+ usageShort = "Calculates Hybrid Selection-specific metrics for a SAM or BAM file",
+ programGroup = Metrics.class
+)
+public class CalculateHsMetrics extends CollectTargetedMetrics<HsMetrics, HsMetricCollector> {
+
+ @Option(shortName = "BI", doc = "An interval list file that contains the locations of the baits used.", minElements=1)
+ public List<File> BAIT_INTERVALS;
+
+ @Option(shortName = "N", doc = "Bait set name. If not provided it is inferred from the filename of the bait intervals.", optional = true)
+ public String BAIT_SET_NAME;
+
+ @Override
+ protected IntervalList getProbeIntervals() {
+ for (final File file : BAIT_INTERVALS) IOUtil.assertFileIsReadable(file);
+ return IntervalList.fromFiles(BAIT_INTERVALS);
+ }
+
+ @Override
+ protected String getProbeSetName() {
+ if (BAIT_SET_NAME != null) {
+ return BAIT_SET_NAME;
+ } else {
+ final SortedSet<String> baitSetNames = new TreeSet<String>();
+ for (final File file : BAIT_INTERVALS) {
+ baitSetNames.add(CollectTargetedMetrics.renderProbeNameFromFile(file));
+ }
+ return StringUtil.join(".", baitSetNames);
+ }
+ }
+
+ /** Stock main method. */
+ public static void main(final String[] argv) {
+ System.exit(new CalculateHsMetrics().instanceMain(argv));
+ }
+
+ @Override
+ protected HsMetricCollector makeCollector(final Set<MetricAccumulationLevel> accumulationLevels,
+ final List<SAMReadGroupRecord> samRgRecords,
+ final ReferenceSequenceFile refFile,
+ final File perTargetCoverage,
+ final IntervalList targetIntervals,
+ final IntervalList probeIntervals,
+ final String probeSetName) {
+ return new HsMetricCollector(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
+ }
+}
diff --git a/src/java/picard/analysis/directed/CollectTargetedMetrics.java b/src/java/picard/analysis/directed/CollectTargetedMetrics.java
new file mode 100644
index 0000000..93df377
--- /dev/null
+++ b/src/java/picard/analysis/directed/CollectTargetedMetrics.java
@@ -0,0 +1,158 @@
+package picard.analysis.directed;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.analysis.MetricAccumulationLevel;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.metrics.MultilevelMetrics;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Both CollectTargetedPCRMetrics and CalculateHybridSelection metrics share virtually identical program structures except
+ * for the name of their targeting mechanisms (e.g. bait set or amplicon set). The shared behavior of these programs
+ * is encapsulated in CollectTargetedMetrics which is then subclassed by CalculateHsMetrics and CollectTargetedPcrMetrics.
+ * <p/>
+ * This program verifies the input parameters to TargetMetricsCollector and converts all files to
+ * the format desired by TargetMetricsCollector. Then it instantiates a TargetMetricsCollector and
+ * collects metric information for all reads in the INPUT sam file.
+ */
+public abstract class CollectTargetedMetrics<METRIC extends MultilevelMetrics, COLLECTOR extends TargetMetricsCollector<METRIC>> extends CommandLineProgram {
+
+ private static final Log log = Log.getInstance(CalculateHsMetrics.class);
+
+ protected abstract IntervalList getProbeIntervals();
+
+ protected abstract String getProbeSetName();
+
+ /**
+ * A factory method for the TargetMetricsCollector to use this time. Examples of TargetMetricsCollector:
+ * (TargetedPcrMetricsCollector, HsMetricsCalculator)
+ *
+ * @return A TargetMetricsCollector to which we will pass SAMRecords
+ */
+ protected abstract COLLECTOR makeCollector(final Set<MetricAccumulationLevel> accumulationLevels,
+ final List<SAMReadGroupRecord> samRgRecords,
+ final ReferenceSequenceFile refFile,
+ final File perTargetCoverage,
+ final IntervalList targetIntervals,
+ final IntervalList probeIntervals,
+ final String probeSetName);
+
+
+ @Option(shortName = "TI", doc = "An interval list file that contains the locations of the targets.", minElements=1)
+ public List<File> TARGET_INTERVALS;
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "An aligned SAM or BAM file.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output file to write the metrics to.")
+ public File OUTPUT;
+
+ @Option(shortName = "LEVEL", doc = "The level(s) at which to accumulate metrics.")
+ public Set<MetricAccumulationLevel> METRIC_ACCUMULATION_LEVEL = CollectionUtil.makeSet(MetricAccumulationLevel.ALL_READS);
+
+ @Option(optional = true, doc = "An optional file to output per target coverage information to.")
+ public File PER_TARGET_COVERAGE;
+
+ /**
+ * Asserts that files are readable and writable and then fires off an
+ * HsMetricsCalculator instance to do the real work.
+ */
+ protected int doWork() {
+ for (final File targetInterval : TARGET_INTERVALS) IOUtil.assertFileIsReadable(targetInterval);
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ if (PER_TARGET_COVERAGE != null) IOUtil.assertFileIsWritable(PER_TARGET_COVERAGE);
+
+ final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+ final IntervalList targetIntervals = IntervalList.fromFiles(TARGET_INTERVALS);
+
+ // Validate that the targets and baits have the same references as the reads file
+ SequenceUtil.assertSequenceDictionariesEqual(
+ reader.getFileHeader().getSequenceDictionary(),
+ targetIntervals.getHeader().getSequenceDictionary());
+ SequenceUtil.assertSequenceDictionariesEqual(
+ reader.getFileHeader().getSequenceDictionary(),
+ getProbeIntervals().getHeader().getSequenceDictionary()
+ );
+
+ ReferenceSequenceFile ref = null;
+ if (REFERENCE_SEQUENCE != null) {
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+ ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
+ SequenceUtil.assertSequenceDictionariesEqual(
+ reader.getFileHeader().getSequenceDictionary(), ref.getSequenceDictionary(),
+ INPUT, REFERENCE_SEQUENCE
+ );
+ }
+
+ final COLLECTOR collector = makeCollector(
+ METRIC_ACCUMULATION_LEVEL,
+ reader.getFileHeader().getReadGroups(),
+ ref,
+ PER_TARGET_COVERAGE,
+ targetIntervals,
+ getProbeIntervals(),
+ getProbeSetName()
+ );
+
+ final ProgressLogger progress = new ProgressLogger(log);
+ for (final SAMRecord record : reader) {
+ collector.acceptRecord(record, null);
+ progress.record(record);
+ }
+
+ // Write the output file
+ final MetricsFile<METRIC, Integer> metrics = getMetricsFile();
+ collector.finish();
+
+ collector.addAllLevelsToFile(metrics);
+
+ metrics.write(OUTPUT);
+
+ CloserUtil.close(reader);
+ return 0;
+ }
+
+ /** Renders a probe name from the provided file, returning {@link java.io.File#getName()} with all extensions stripped. */
+ static String renderProbeNameFromFile(final File probeIntervalFile) {
+ final String name = probeIntervalFile.getName();
+ final int firstPeriodIndex = name.indexOf('.');
+ if (firstPeriodIndex == -1) {
+ return name;
+ } else {
+ return name.substring(0, firstPeriodIndex);
+ }
+ }
+
+ protected String[] customCommandLineValidation() {
+ if (PER_TARGET_COVERAGE != null && (METRIC_ACCUMULATION_LEVEL.size() != 1 ||
+ METRIC_ACCUMULATION_LEVEL.iterator().next() != MetricAccumulationLevel.ALL_READS)) {
+ return new String[]{"PER_TARGET_COVERAGE can be specified only when METRIC_ACCUMULATION_LEVEL is set " +
+ "to ALL_READS."};
+ }
+
+ if (PER_TARGET_COVERAGE != null && REFERENCE_SEQUENCE == null) {
+ return new String[]{"Must supply REFERENCE_SEQUENCE when supplying PER_TARGET_COVERAGE"};
+ }
+
+ return super.customCommandLineValidation();
+ }
+}
diff --git a/src/java/picard/analysis/directed/CollectTargetedPcrMetrics.java b/src/java/picard/analysis/directed/CollectTargetedPcrMetrics.java
new file mode 100644
index 0000000..45d3bee
--- /dev/null
+++ b/src/java/picard/analysis/directed/CollectTargetedPcrMetrics.java
@@ -0,0 +1,66 @@
+package picard.analysis.directed;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.util.IntervalList;
+import picard.analysis.MetricAccumulationLevel;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Metrics;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Collect metric information for target pcr metrics runs. See CollectTargetedMetrics and TargetPcrMetricsCollector for
+ * more information
+ */
+ at CommandLineProgramProperties(
+ usage = "Calculates a set of metrics to Illumina Truseq Custom Amplicon sequencing from an aligned SAM" +
+ "or BAM file. If a reference sequence is provided, AT/GC dropout metrics will " +
+ "be calculated, and the PER_TARGET_COVERAGE option can be used to output GC and " +
+ "mean coverage information for every target.",
+ usageShort = "Produces Targeted PCR-related metrics given the provided SAM/BAM",
+ programGroup = Metrics.class
+)
+public class CollectTargetedPcrMetrics extends CollectTargetedMetrics<TargetedPcrMetrics, TargetedPcrMetricsCollector> {
+
+ @Option(shortName = "AI", doc = "An interval list file that contains the locations of the baits used.")
+ public File AMPLICON_INTERVALS;
+
+ @Option(shortName = "N", doc = "Custom amplicon set name. If not provided it is inferred from the filename of the AMPLICON_INTERVALS intervals.", optional = true)
+ public String CUSTOM_AMPLICON_SET_NAME;
+
+ /**
+ * @return AMPLICON_INTERVALS
+ */
+ @Override
+ protected IntervalList getProbeIntervals() {
+ return IntervalList.fromFile(AMPLICON_INTERVALS);
+ }
+
+ /**
+ * @return CUSTOM_AMPLICON_SET_NAME
+ */
+ @Override
+ protected String getProbeSetName() {
+ return CUSTOM_AMPLICON_SET_NAME != null ? CUSTOM_AMPLICON_SET_NAME : CollectTargetedMetrics.renderProbeNameFromFile(AMPLICON_INTERVALS);
+ }
+
+ /** Stock main method. */
+ public static void main(final String[] argv) {
+ System.exit(new CollectTargetedPcrMetrics().instanceMain(argv));
+ }
+
+ @Override
+ protected TargetedPcrMetricsCollector makeCollector(final Set<MetricAccumulationLevel> accumulationLevels,
+ final List<SAMReadGroupRecord> samRgRecords,
+ final ReferenceSequenceFile refFile,
+ final File perTargetCoverage,
+ final IntervalList targetIntervals,
+ final IntervalList probeIntervals,
+ final String probeSetName) {
+ return new TargetedPcrMetricsCollector(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
+ }
+}
diff --git a/src/java/picard/analysis/directed/GcBiasMetricsCollector.java b/src/java/picard/analysis/directed/GcBiasMetricsCollector.java
new file mode 100644
index 0000000..c8cb08e
--- /dev/null
+++ b/src/java/picard/analysis/directed/GcBiasMetricsCollector.java
@@ -0,0 +1,298 @@
+package picard.analysis.directed;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.QualityUtil;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.analysis.GcBiasDetailMetrics;
+import picard.analysis.GcBiasSummaryMetrics;
+import picard.metrics.GcBiasMetrics;
+import picard.analysis.MetricAccumulationLevel;
+import picard.metrics.MultiLevelCollector;
+import picard.metrics.PerUnitMetricCollector;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.HashMap;
+
+/** Calculates GC Bias Metrics on multiple levels
+ * Created by kbergin on 3/23/15.
+ */
+public class GcBiasMetricsCollector extends MultiLevelCollector<GcBiasMetrics, Integer, GcBiasCollectorArgs> {
+ // Histograms to track the number of windows at each GC, and the number of read starts
+ // at windows of each GC. Need 101 to get from 0-100.
+ private final int windowSize;
+ private final boolean bisulfite;
+ private final Map<String, byte[]> gcByRef;
+ private int[] windowsByGc = new int[WINDOWS];
+ private static final int WINDOWS = 101;
+
+ public GcBiasMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final Map<String, byte[]> gcByRef, final int[] windowsByGc, final List<SAMReadGroupRecord> samRgRecords, final int windowSize, final boolean bisulfite) {
+ this.windowSize = windowSize;
+ this.bisulfite = bisulfite;
+ this.gcByRef = gcByRef;
+ this.windowsByGc = windowsByGc;
+ setup(accumulationLevels, samRgRecords);
+ }
+ /////////////////////////////////////////////////////////////////////////////
+ // This method is called once Per samRecord
+ /////////////////////////////////////////////////////////////////////////////
+ @Override
+ protected GcBiasCollectorArgs makeArg(final SAMRecord rec, final ReferenceSequence ref) {
+ return new GcBiasCollectorArgs(rec, ref);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ //Make a GcBiasCollector with the given arguments
+ /////////////////////////////////////////////////////////////////////////////
+ @Override
+ protected PerUnitMetricCollector<GcBiasMetrics, Integer, GcBiasCollectorArgs> makeChildCollector(final String sample, final String library, final String readGroup) {
+ return new PerUnitGcBiasMetricsCollector(sample, library, readGroup);
+ }
+
+ @Override
+ public void acceptRecord(final SAMRecord rec, final ReferenceSequence ref) {super.acceptRecord(rec, ref);}
+
+ /////////////////////////////////////////////////////////////////////////////
+ //A collector for individual GcBiasMetrics for a given SAMPLE or SAMPLE/LIBRARY
+ //or SAMPLE/LIBRARY/READ_GROUP (depending on aggregation levels)
+ /////////////////////////////////////////////////////////////////////////////
+ public class PerUnitGcBiasMetricsCollector implements PerUnitMetricCollector<GcBiasMetrics, Integer, GcBiasCollectorArgs> {
+ Map<String, GcObject> gcData = new HashMap<String, GcObject>();
+ private String sample = null;
+ private String library = null;
+ private String readGroup = null;
+ private static final String allReads = "All_Reads";
+
+ /////////////////////////////////////////////////////////////////////////////
+ //Records the accumulation level for each level of collection and initializes
+ // a GcObject for this accumulation level
+ /////////////////////////////////////////////////////////////////////////////
+ public PerUnitGcBiasMetricsCollector(final String sample, final String library, final String readGroup) {
+ this.sample = sample;
+ this.library = library;
+ this.readGroup = readGroup;
+ final String prefix;
+ if (this.readGroup != null) {
+ prefix = this.readGroup;
+ gcData.put(prefix, new GcObject());
+ } else if (this.library != null) {
+ prefix = this.library;
+ gcData.put(prefix, new GcObject());
+ } else if (this.sample != null) {
+ prefix = this.sample;
+ gcData.put(prefix, new GcObject());
+ } else {
+ prefix = allReads;
+ gcData.put(prefix, new GcObject());
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ //Takes each record and sends them to addRead to calculate gc metrics for
+ // that read for each accumulation level
+ /////////////////////////////////////////////////////////////////////////////
+ public void acceptRecord(final GcBiasCollectorArgs args) {
+ final SAMRecord rec = args.getRec();
+ final String type;
+ if (!rec.getReadUnmappedFlag()) {
+ final ReferenceSequence ref = args.getRef();
+ final byte[] refBases = ref.getBases();
+ final String refName = ref.getName();
+ final byte[] gc = gcByRef.get(refName);
+ final String group;
+ if (this.readGroup != null) {
+ type = this.readGroup;
+ group = "Read Group";
+ addRead(gcData.get(type), rec, group, gc, refBases);
+ } else if (this.library != null) {
+ type = this.library;
+ group = "Library";
+ addRead(gcData.get(type), rec, group, gc, refBases);
+ } else if (this.sample != null) {
+ type = this.sample;
+ group = "Sample";
+ addRead(gcData.get(type), rec, group, gc, refBases);
+ } else {
+ type = allReads;
+ group = "All Reads";
+ addRead(gcData.get(type), rec, group, gc, refBases);
+ }
+ }
+ else {
+ for (final Map.Entry<String, GcObject> entry : gcData.entrySet()) {
+ final GcObject gcCur = entry.getValue();
+ if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) ++gcCur.totalClusters;
+ }
+ }
+ }
+
+ public void finish() {}
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Sums the values in an int[].
+ /////////////////////////////////////////////////////////////////////////////
+ private double sum(final int[] values) {
+ final int length = values.length;
+ double total = 0;
+ for (int i = 0; i < length; i++) {
+ total += values[i];
+ }
+
+ return total;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ //Called to add metrics to the output file for each level of collection
+ // these metrics are used for graphing gc bias in R script
+ /////////////////////////////////////////////////////////////////////////////
+ public void addMetricsToFile(final MetricsFile<GcBiasMetrics, Integer> file) {
+ for (final Map.Entry<String, GcObject> entry : gcData.entrySet()) {
+ final GcObject gcCur = entry.getValue();
+ final String gcType = entry.getKey();
+
+ final int[] readsByGc = gcCur.readsByGc;
+ final long[] errorsByGc = gcCur.errorsByGc;
+ final long[] basesByGc = gcCur.basesByGc;
+ final int totalClusters = gcCur.totalClusters;
+ final int totalAlignedReads = gcCur.totalAlignedReads;
+ final String group = gcCur.group;
+
+ final GcBiasMetrics metrics = new GcBiasMetrics();
+
+ final double totalWindows = sum(windowsByGc);
+ final double totalReads = sum(readsByGc);
+ final double meanReadsPerWindow = totalReads / totalWindows;
+
+ if (totalAlignedReads > 0) {
+ for (int i = 0; i < windowsByGc.length; ++i) {
+ final GcBiasDetailMetrics detail = new GcBiasDetailMetrics();
+ detail.GC = i;
+ detail.WINDOWS = windowsByGc[i];
+ detail.READ_STARTS = readsByGc[i];
+ if (errorsByGc[i] > 0) detail.MEAN_BASE_QUALITY = QualityUtil.getPhredScoreFromObsAndErrors(basesByGc[i], errorsByGc[i]);
+ if (windowsByGc[i] != 0) {
+ detail.NORMALIZED_COVERAGE = (detail.READ_STARTS / (double) detail.WINDOWS) / meanReadsPerWindow;
+ detail.ERROR_BAR_WIDTH = (Math.sqrt(detail.READ_STARTS) / (double) detail.WINDOWS) / meanReadsPerWindow;
+ }
+ else{
+ detail.NORMALIZED_COVERAGE = 0;
+ detail.ERROR_BAR_WIDTH = 0;
+ }
+ detail.ACCUMULATION_LEVEL = group;
+ if (group.equals("Read Group")) {
+ detail.READ_GROUP = gcType;}
+ else if (group.equals("Sample")) {
+ detail.SAMPLE = gcType;}
+ else if (group.equals("Library")) {
+ detail.LIBRARY = gcType;}
+ metrics.DETAILS.addMetric(detail);
+ }
+
+ // Synthesize the high level summary metrics
+ final GcBiasSummaryMetrics summary = new GcBiasSummaryMetrics();
+ if (group.equals("Read Group")) {summary.READ_GROUP = gcType;}
+ else if (group.equals("Sample")) {summary.SAMPLE = gcType;}
+ else if (group.equals("Library")) {summary.LIBRARY = gcType;}
+
+ summary.ACCUMULATION_LEVEL = group;
+ summary.WINDOW_SIZE = windowSize;
+ summary.TOTAL_CLUSTERS = totalClusters;
+ summary.ALIGNED_READS = totalAlignedReads;
+
+ calculateDropoutMetrics(metrics.DETAILS.getMetrics(), summary);
+
+ metrics.SUMMARY = summary;
+
+ file.addMetric(metrics);
+ }
+ }
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Calculates the Illumina style AT and GC dropout numbers
+ /////////////////////////////////////////////////////////////////////////////
+ private void calculateDropoutMetrics(final Collection<GcBiasDetailMetrics> details,
+ final GcBiasSummaryMetrics summary) {
+ // First calculate the totals
+ double totalReads = 0;
+ double totalWindows = 0;
+
+ for (final GcBiasDetailMetrics detail : details) {
+ totalReads += detail.READ_STARTS;
+ totalWindows += detail.WINDOWS;
+ }
+
+ double atDropout = 0;
+ double gcDropout = 0;
+
+ for (final GcBiasDetailMetrics detail : details) {
+ final double relativeReads = detail.READ_STARTS / totalReads;
+ final double relativeWindows = detail.WINDOWS / totalWindows;
+ final double dropout = (relativeWindows - relativeReads) * 100;
+
+ if (dropout > 0) {
+ if (detail.GC <= 50) atDropout += dropout;
+ else{ gcDropout += dropout; }
+ }
+ }
+
+ summary.AT_DROPOUT = atDropout;
+ summary.GC_DROPOUT = gcDropout;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ //Keeps track of each level of GcCalculation
+ /////////////////////////////////////////////////////////////////////////////
+ class GcObject{
+ int totalClusters = 0;
+ int totalAlignedReads = 0;
+ int[] readsByGc = new int[WINDOWS];
+ long[] basesByGc = new long[WINDOWS];
+ long[] errorsByGc = new long[WINDOWS];
+ String group = null;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ //Adds each read to the appropriate gcObj which is determined in acceptRecord above
+ //Also calculates values for calculating GC Bias at each level
+ /////////////////////////////////////////////////////////////////////////////
+ private void addRead(final GcObject gcObj, final SAMRecord rec, final String group, final byte[] gc, final byte[] refBases) {
+ if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) ++gcObj.totalClusters;
+ final int pos = rec.getReadNegativeStrandFlag() ? rec.getAlignmentEnd() - windowSize : rec.getAlignmentStart();
+ ++gcObj.totalAlignedReads;
+ if (pos > 0) {
+ final int windowGc = gc[pos];
+ if (windowGc >= 0) {
+ ++gcObj.readsByGc[windowGc];
+ gcObj.basesByGc[windowGc] += rec.getReadLength();
+ gcObj.errorsByGc[windowGc] +=
+ SequenceUtil.countMismatches(rec, refBases, bisulfite) +
+ SequenceUtil.countInsertedBases(rec) + SequenceUtil.countDeletedBases(rec);
+ }
+ }
+ if (gcObj.group == null) {
+ gcObj.group = group;
+ }
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Arguments that need to be passed to each PerUnitMetricCollector
+// for the given record
+/////////////////////////////////////////////////////////////////////////////
+class GcBiasCollectorArgs {
+ private final SAMRecord rec;
+ private final ReferenceSequence ref;
+ public SAMRecord getRec() {return rec;}
+ public ReferenceSequence getRef() {return ref;}
+ public GcBiasCollectorArgs(final SAMRecord rec, final ReferenceSequence ref) {
+ this.rec = rec;
+ this.ref = ref;
+ }
+}
diff --git a/src/java/picard/analysis/directed/HsMetricCollector.java b/src/java/picard/analysis/directed/HsMetricCollector.java
new file mode 100644
index 0000000..23ae6e7
--- /dev/null
+++ b/src/java/picard/analysis/directed/HsMetricCollector.java
@@ -0,0 +1,124 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis.directed;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.util.IntervalList;
+import picard.analysis.MetricAccumulationLevel;
+import picard.sam.DuplicationMetrics;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Calculates HS metrics for a given SAM or BAM file. Requires the input of a list of
+ * target intervals and a list of bait intervals. Can be invoked either on an entire
+ * iterator of SAMRecords or be passed SAMRecords one at a time.
+ *
+ * @author Jonathan Burke
+ */
+public class HsMetricCollector extends TargetMetricsCollector<HsMetrics> {
+
+ public HsMetricCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords, final ReferenceSequenceFile refFile, final File perTargetCoverage, final IntervalList targetIntervals, final IntervalList probeIntervals, final String probeSetName) {
+ super(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
+ }
+
+ @Override
+ public HsMetrics convertMetric(final TargetMetrics targetMetrics) {
+ final HsMetrics hsMetrics = new HsMetrics();
+ TargetMetricsCollector.reflectiveCopy(targetMetrics, hsMetrics,
+ new String[]{"PROBE_SET", "PROBE_TERRITORY", "ON_PROBE_BASES", "NEAR_PROBE_BASES", "OFF_PROBE_BASES", "PCT_OFF_PROBE", "ON_PROBE_VS_SELECTED", "MEAN_PROBE_COVERAGE"},
+ new String[]{"BAIT_SET", "BAIT_TERRITORY", "ON_BAIT_BASES", "NEAR_BAIT_BASES", "OFF_BAIT_BASES", "PCT_OFF_BAIT", "ON_BAIT_VS_SELECTED", "MEAN_BAIT_COVERAGE"}
+ );
+
+ hsMetrics.BAIT_DESIGN_EFFICIENCY = (double) hsMetrics.TARGET_TERRITORY / (double) hsMetrics.BAIT_TERRITORY;
+ hsMetrics.PCT_USABLE_BASES_ON_BAIT = hsMetrics.ON_BAIT_BASES / (double) targetMetrics.PF_BASES;
+ hsMetrics.PCT_USABLE_BASES_ON_TARGET = hsMetrics.ON_TARGET_BASES / (double) targetMetrics.PF_BASES;
+ hsMetrics.HS_LIBRARY_SIZE = DuplicationMetrics.estimateLibrarySize(targetMetrics.PF_SELECTED_PAIRS, targetMetrics.PF_SELECTED_UNIQUE_PAIRS);
+
+ //need HSLIBRARY_SIZE
+ hsMetrics.HS_PENALTY_10X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 10);
+ hsMetrics.HS_PENALTY_20X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 20);
+ hsMetrics.HS_PENALTY_30X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 30);
+ hsMetrics.HS_PENALTY_40X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 40);
+ hsMetrics.HS_PENALTY_50X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 50);
+ hsMetrics.HS_PENALTY_100X = calculateHsPenalty(hsMetrics.HS_LIBRARY_SIZE, targetMetrics, 100);
+ return hsMetrics;
+ }
+
+ /**
+ * Attempts to calculate the HS penalty incurred by the library in order to get 80%
+ * of target bases (in non-zero-covered targets) to a specific target coverage (e.g. 20X).
+ *
+ * @param coverageGoal the desired coverage target (e.g. 20X)
+ * @return the hs penalty - a multiplier that tells if you want, e.g. 20X coverage, then you will
+ * need to produce this many PF aligned bases per target bases in your design!
+ */
+ private double calculateHsPenalty(final Long librarySize, final TargetMetrics targetMetrics, final int coverageGoal) {
+ if (librarySize == null) return 0;
+
+ final double meanCoverage = targetMetrics.ON_TARGET_FROM_PAIR_BASES / (double) targetMetrics.TARGET_TERRITORY;
+ final double fold80 = targetMetrics.FOLD_80_BASE_PENALTY;
+ final long pairs = targetMetrics.PF_SELECTED_PAIRS;
+ final long uniquePairs = targetMetrics.PF_SELECTED_UNIQUE_PAIRS;
+ final double onTargetPct = (double) targetMetrics.ON_TARGET_BASES / (double) targetMetrics.PF_UQ_BASES_ALIGNED;
+
+ final double uniquePairGoalMultiplier = (coverageGoal / meanCoverage) * fold80;
+ double pairMultiplier = uniquePairGoalMultiplier;
+ double increment = 1;
+ boolean goingUp = uniquePairGoalMultiplier >= 1;
+ double finalPairMultiplier = -1;
+
+ // Converge "pairMultiplier" to the number that gives us a uniquePairMultiplier equal
+ // to the coverage multiplier we desire. If we can't get there with 1000X coverage,
+ // we're not going to get there!
+ for (int i=0; i<10000; ++i) {
+ final double uniquePairMultiplier = DuplicationMetrics.estimateRoi(librarySize, pairMultiplier, pairs, uniquePairs);
+
+ if (Math.abs(uniquePairMultiplier - uniquePairGoalMultiplier) / uniquePairGoalMultiplier <= 0.001) {
+ finalPairMultiplier = pairMultiplier;
+ break;
+ }
+ else if ((uniquePairMultiplier > uniquePairGoalMultiplier && goingUp) ||
+ (uniquePairMultiplier < uniquePairGoalMultiplier && !goingUp)){
+ increment /= 2;
+ goingUp = !goingUp;
+ }
+
+ pairMultiplier += (goingUp ? increment : -increment);
+ }
+
+ if (finalPairMultiplier == -1) {
+ return -1;
+ }
+ else {
+ final double uniqueFraction = (uniquePairs * uniquePairGoalMultiplier) / (pairs * finalPairMultiplier);
+ return (1 / uniqueFraction) * fold80 * (1 / onTargetPct);
+ }
+ }
+
+}
diff --git a/src/java/picard/analysis/directed/HsMetrics.java b/src/java/picard/analysis/directed/HsMetrics.java
new file mode 100644
index 0000000..c08391e
--- /dev/null
+++ b/src/java/picard/analysis/directed/HsMetrics.java
@@ -0,0 +1,194 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis.directed;
+
+import picard.metrics.MultilevelMetrics;
+
+/**
+ * The set of metrics captured that are specific to a hybrid selection analysis.
+ *
+ * @author Tim Fennell
+ */
+public class HsMetrics extends MultilevelMetrics {
+ /** The name of the bait set used in the hybrid selection. */
+ public String BAIT_SET;
+
+ /** The number of bases in the reference genome used for alignment. */
+ public long GENOME_SIZE;
+
+ /** The number of bases which have one or more baits on top of them. */
+ public long BAIT_TERRITORY;
+
+ /** The unique number of target bases in the experiment where target is usually exons etc. */
+ public long TARGET_TERRITORY;
+
+ /** Target terrirtoy / bait territory. 1 == perfectly efficient, 0.5 = half of baited bases are not target. */
+ public double BAIT_DESIGN_EFFICIENCY;
+
+ /** The total number of reads in the SAM or BAM file examine. */
+ public long TOTAL_READS;
+
+ /** The number of reads that pass the vendor's filter. */
+ public long PF_READS;
+
+ /** The number of PF reads that are not marked as duplicates. */
+ public long PF_UNIQUE_READS;
+
+ /** PF reads / total reads. The percent of reads passing filter. */
+ public double PCT_PF_READS;
+
+ /** PF Unique Reads / Total Reads. */
+ public double PCT_PF_UQ_READS;
+
+ /** The number of PF unique reads that are aligned with mapping score > 0 to the reference genome. */
+ public long PF_UQ_READS_ALIGNED;
+
+ /** PF Reads Aligned / PF Reads. */
+ public double PCT_PF_UQ_READS_ALIGNED;
+
+ /** The number of bases in the PF aligned reads that are mapped to a reference base. Accounts for clipping and gaps. */
+ public long PF_UQ_BASES_ALIGNED;
+
+ /** The number of PF aligned bases that mapped to a baited region of the genome. */
+ public long ON_BAIT_BASES;
+
+ /** The number of PF aligned bases that mapped to within a fixed interval of a baited region, but not on a baited region. */
+ public long NEAR_BAIT_BASES;
+
+ /** The number of PF aligned bases that mapped to neither on or near a bait. */
+ public long OFF_BAIT_BASES;
+
+ /** The number of PF aligned bases that mapped to a targeted region of the genome. */
+ public long ON_TARGET_BASES;
+
+ /** On+Near Bait Bases / PF Bases Aligned. */
+ public double PCT_SELECTED_BASES;
+
+ /** The percentage of aligned PF bases that mapped neither on or near a bait. */
+ public double PCT_OFF_BAIT;
+
+ /** The percentage of on+near bait bases that are on as opposed to near. */
+ public double ON_BAIT_VS_SELECTED;
+
+ /** The mean coverage of all baits in the experiment. */
+ public double MEAN_BAIT_COVERAGE;
+
+ /** The mean coverage of targets that received at least coverage depth = 2 at one base. */
+ public double MEAN_TARGET_COVERAGE;
+
+ /** The number of aligned, de-duped, on-bait bases out of the PF bases available. */
+ public double PCT_USABLE_BASES_ON_BAIT;
+
+ /** The number of aligned, de-duped, on-target bases out of the PF bases available. */
+ public double PCT_USABLE_BASES_ON_TARGET;
+
+ /** The fold by which the baited region has been amplified above genomic background. */
+ public double FOLD_ENRICHMENT;
+
+ /** The number of targets that did not reach coverage=2 over any base. */
+ public double ZERO_CVG_TARGETS_PCT;
+
+ /**
+ * The fold over-coverage necessary to raise 80% of bases in "non-zero-cvg" targets to
+ * the mean coverage level in those targets.
+ */
+ public double FOLD_80_BASE_PENALTY;
+
+ /** The percentage of ALL target bases achieving 2X or greater coverage. */
+ public double PCT_TARGET_BASES_2X;
+ /** The percentage of ALL target bases achieving 10X or greater coverage. */
+ public double PCT_TARGET_BASES_10X;
+ /** The percentage of ALL target bases achieving 20X or greater coverage. */
+ public double PCT_TARGET_BASES_20X;
+ /** The percentage of ALL target bases achieving 30X or greater coverage. */
+ public double PCT_TARGET_BASES_30X;
+ /** The percentage of ALL target bases achieving 40X or greater coverage. */
+ public double PCT_TARGET_BASES_40X;
+ /** The percentage of ALL target bases achieving 50X or greater coverage. */
+ public double PCT_TARGET_BASES_50X;
+ /** The percentage of ALL target bases achieving 100X or greater coverage. */
+ public double PCT_TARGET_BASES_100X;
+
+ /** The estimated number of unique molecules in the selected part of the library. */
+ public Long HS_LIBRARY_SIZE;
+
+ /**
+ * The "hybrid selection penalty" incurred to get 80% of target bases to 10X. This metric
+ * should be interpreted as: if I have a design with 10 megabases of target, and want to get
+ * 10X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 10 * HS_PENALTY_10X.
+ */
+ public double HS_PENALTY_10X;
+
+ /**
+ * The "hybrid selection penalty" incurred to get 80% of target bases to 20X. This metric
+ * should be interpreted as: if I have a design with 10 megabases of target, and want to get
+ * 20X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 20 * HS_PENALTY_20X.
+ */
+ public double HS_PENALTY_20X;
+
+ /**
+ * The "hybrid selection penalty" incurred to get 80% of target bases to 30X. This metric
+ * should be interpreted as: if I have a design with 10 megabases of target, and want to get
+ * 30X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 30 * HS_PENALTY_30X.
+ */
+ public double HS_PENALTY_30X;
+
+ /**
+ * The "hybrid selection penalty" incurred to get 80% of target bases to 40X. This metric
+ * should be interpreted as: if I have a design with 10 megabases of target, and want to get
+ * 40X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 40 * HS_PENALTY_40X.
+ */
+ public double HS_PENALTY_40X;
+
+ /**
+ * The "hybrid selection penalty" incurred to get 80% of target bases to 50X. This metric
+ * should be interpreted as: if I have a design with 10 megabases of target, and want to get
+ * 50X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 50 * HS_PENALTY_50X.
+ */
+ public double HS_PENALTY_50X;
+
+ /**
+ * The "hybrid selection penalty" incurred to get 80% of target bases to 100X. This metric
+ * should be interpreted as: if I have a design with 10 megabases of target, and want to get
+ * 100X coverage I need to sequence until PF_ALIGNED_BASES = 10^7 * 100 * HS_PENALTY_100X.
+ */
+ public double HS_PENALTY_100X;
+
+ /**
+ * A measure of how undercovered <= 50% GC regions are relative to the mean. For each GC bin [0..50]
+ * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
+ * AT DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
+ * reads that should have mapped to GC<=50% regions mapped elsewhere.
+ */
+ public double AT_DROPOUT;
+
+ /**
+ * A measure of how undercovered >= 50% GC regions are relative to the mean. For each GC bin [50..100]
+ * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
+ * GC DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
+ * reads that should have mapped to GC>=50% regions mapped elsewhere.
+ */
+ public double GC_DROPOUT;
+}
diff --git a/src/java/picard/analysis/directed/InsertSizeMetricsCollector.java b/src/java/picard/analysis/directed/InsertSizeMetricsCollector.java
new file mode 100644
index 0000000..27de45d
--- /dev/null
+++ b/src/java/picard/analysis/directed/InsertSizeMetricsCollector.java
@@ -0,0 +1,212 @@
+package picard.analysis.directed;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.Histogram;
+import picard.analysis.InsertSizeMetrics;
+import picard.analysis.MetricAccumulationLevel;
+import picard.metrics.MultiLevelCollector;
+import picard.metrics.PerUnitMetricCollector;
+
+import java.util.EnumMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Collects InserSizeMetrics on the specified accumulationLevels using
+ */
+public class InsertSizeMetricsCollector extends MultiLevelCollector<InsertSizeMetrics, Integer, InsertSizeCollectorArgs> {
+ // When generating the Histogram, discard any data categories (out of FR, TANDEM, RF) that have fewer than this
+ // percentage of overall reads. (Range: 0 to 1)
+ private final double minimumPct;
+
+ // Generate mean, sd and plots by trimming the data down to MEDIAN + DEVIATIONS*MEDIAN_ABSOLUTE_DEVIATION.
+ // This is done because insert size data typically includes enough anomolous values from chimeras and other
+ // artifacts to make the mean and sd grossly misleading regarding the real distribution.
+ private final double deviations;
+
+ //Explicitly sets the Histogram width, overriding automatic truncation of Histogram tail.
+ //Also, when calculating mean and stdev, only bins <= Histogram_WIDTH will be included.
+ private final Integer histogramWidth;
+
+ public InsertSizeMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
+ final double minimumPct, final Integer HistogramWidth, final double deviations) {
+ this.minimumPct = minimumPct;
+ this.histogramWidth = HistogramWidth;
+ this.deviations = deviations;
+ setup(accumulationLevels, samRgRecords);
+ }
+
+ // We will pass insertSize and PairOrientation with the DefaultPerRecordCollectorArgs passed to the record collectors
+ // This method is called once Per samRecord
+ @Override
+ protected InsertSizeCollectorArgs makeArg(SAMRecord samRecord, ReferenceSequence refSeq) {
+ final int insertSize = Math.abs(samRecord.getInferredInsertSize());
+ final SamPairUtil.PairOrientation orientation = SamPairUtil.getPairOrientation(samRecord);
+
+ return new InsertSizeCollectorArgs(insertSize, orientation);
+ }
+
+ /** Make an InsertSizeCollector with the given arguments */
+ @Override
+ protected PerUnitMetricCollector<InsertSizeMetrics, Integer, InsertSizeCollectorArgs> makeChildCollector(final String sample, final String library, final String readGroup) {
+ return new PerUnitInsertSizeMetricsCollector(sample, library, readGroup);
+ }
+
+ @Override
+ public void acceptRecord(final SAMRecord record, final ReferenceSequence refSeq) {
+ if (!record.getReadPairedFlag() ||
+ record.getReadUnmappedFlag() ||
+ record.getMateUnmappedFlag() ||
+ record.getFirstOfPairFlag() ||
+ record.isSecondaryOrSupplementary() ||
+ record.getDuplicateReadFlag() ||
+ record.getInferredInsertSize() == 0) {
+ return;
+ }
+
+ super.acceptRecord(record, refSeq);
+ }
+
+ /** A Collector for individual InsertSizeMetrics for a given SAMPLE or SAMPLE/LIBRARY or SAMPLE/LIBRARY/READ_GROUP (depending on aggregation levels) */
+ public class PerUnitInsertSizeMetricsCollector implements PerUnitMetricCollector<InsertSizeMetrics, Integer, InsertSizeCollectorArgs> {
+ final EnumMap<SamPairUtil.PairOrientation, Histogram<Integer>> Histograms = new EnumMap<SamPairUtil.PairOrientation, Histogram<Integer>>(SamPairUtil.PairOrientation.class);
+ final String sample;
+ final String library;
+ final String readGroup;
+ private double totalInserts = 0;
+
+ public PerUnitInsertSizeMetricsCollector(final String sample, final String library, final String readGroup) {
+ this.sample = sample;
+ this.library = library;
+ this.readGroup = readGroup;
+ String prefix = null;
+ if (this.readGroup != null) {
+ prefix = this.readGroup + ".";
+ }
+ else if (this.library != null) {
+ prefix = this.library + ".";
+ }
+ else if (this.sample != null) {
+ prefix = this.sample + ".";
+ }
+ else {
+ prefix = "All_Reads.";
+ }
+ Histograms.put(SamPairUtil.PairOrientation.FR, new Histogram<Integer>("insert_size", prefix + "fr_count"));
+ Histograms.put(SamPairUtil.PairOrientation.TANDEM, new Histogram<Integer>("insert_size", prefix + "tandem_count"));
+ Histograms.put(SamPairUtil.PairOrientation.RF, new Histogram<Integer>("insert_size", prefix + "rf_count"));
+ }
+
+ public void acceptRecord(final InsertSizeCollectorArgs args) {
+ Histograms.get(args.getPairOrientation()).increment(args.getInsertSize());
+ }
+
+ public void finish() { }
+
+ public double getTotalInserts() {
+ return totalInserts;
+ }
+
+ public void addMetricsToFile(final MetricsFile<InsertSizeMetrics,Integer> file) {
+ for (final Histogram<Integer> h : this.Histograms.values()) totalInserts += h.getCount();
+
+ for(final Map.Entry<SamPairUtil.PairOrientation, Histogram<Integer>> entry : Histograms.entrySet()) {
+ final SamPairUtil.PairOrientation pairOrientation = entry.getKey();
+ final Histogram<Integer> Histogram = entry.getValue();
+ final double total = Histogram.getCount();
+
+ // Only include a category if it has a sufficient percentage of the data in it
+ if( total > totalInserts * minimumPct ) {
+ final InsertSizeMetrics metrics = new InsertSizeMetrics();
+ metrics.SAMPLE = this.sample;
+ metrics.LIBRARY = this.library;
+ metrics.READ_GROUP = this.readGroup;
+ metrics.PAIR_ORIENTATION = pairOrientation;
+ metrics.READ_PAIRS = (long) total;
+ metrics.MAX_INSERT_SIZE = (int) Histogram.getMax();
+ metrics.MIN_INSERT_SIZE = (int) Histogram.getMin();
+ metrics.MEDIAN_INSERT_SIZE = Histogram.getMedian();
+ metrics.MEDIAN_ABSOLUTE_DEVIATION = Histogram.getMedianAbsoluteDeviation();
+
+ final double median = Histogram.getMedian();
+ double covered = 0;
+ double low = median;
+ double high = median;
+
+ while (low >= Histogram.getMin() || high <= Histogram.getMax()) {
+ final Histogram<Integer>.Bin lowBin = Histogram.get((int) low);
+ if (lowBin != null) covered += lowBin.getValue();
+
+ if (low != high) {
+ final Histogram<Integer>.Bin highBin = Histogram.get((int) high);
+ if (highBin != null) covered += highBin.getValue();
+ }
+
+ final double percentCovered = covered / total;
+ final int distance = (int) (high - low) + 1;
+ if (percentCovered >= 0.1 && metrics.WIDTH_OF_10_PERCENT == 0) metrics.WIDTH_OF_10_PERCENT = distance;
+ if (percentCovered >= 0.2 && metrics.WIDTH_OF_20_PERCENT == 0) metrics.WIDTH_OF_20_PERCENT = distance;
+ if (percentCovered >= 0.3 && metrics.WIDTH_OF_30_PERCENT == 0) metrics.WIDTH_OF_30_PERCENT = distance;
+ if (percentCovered >= 0.4 && metrics.WIDTH_OF_40_PERCENT == 0) metrics.WIDTH_OF_40_PERCENT = distance;
+ if (percentCovered >= 0.5 && metrics.WIDTH_OF_50_PERCENT == 0) metrics.WIDTH_OF_50_PERCENT = distance;
+ if (percentCovered >= 0.6 && metrics.WIDTH_OF_60_PERCENT == 0) metrics.WIDTH_OF_60_PERCENT = distance;
+ if (percentCovered >= 0.7 && metrics.WIDTH_OF_70_PERCENT == 0) metrics.WIDTH_OF_70_PERCENT = distance;
+ if (percentCovered >= 0.8 && metrics.WIDTH_OF_80_PERCENT == 0) metrics.WIDTH_OF_80_PERCENT = distance;
+ if (percentCovered >= 0.9 && metrics.WIDTH_OF_90_PERCENT == 0) metrics.WIDTH_OF_90_PERCENT = distance;
+ if (percentCovered >= 0.99 && metrics.WIDTH_OF_99_PERCENT == 0) metrics.WIDTH_OF_99_PERCENT = distance;
+
+ --low;
+ ++high;
+ }
+
+ // Trim the Histogram down to get rid of outliers that would make the chart useless.
+ final Histogram<Integer> trimmedHisto = Histogram; //alias it
+ trimmedHisto.trimByWidth(getWidthToTrimTo(metrics));
+
+ metrics.MEAN_INSERT_SIZE = trimmedHisto.getMean();
+ metrics.STANDARD_DEVIATION = trimmedHisto.getStandardDeviation();
+
+ file.addHistogram(trimmedHisto);
+ file.addMetric(metrics);
+ }
+ }
+ }
+
+ /**
+ * @return {@link #histogramWidth} if it was specified in the constructor or a calculated width based on the stdev of the input metric and {@link #deviations}
+ */
+ private int getWidthToTrimTo(InsertSizeMetrics metrics) {
+ if (histogramWidth == null) {
+ return (int) (metrics.MEDIAN_INSERT_SIZE + (deviations * metrics.MEDIAN_ABSOLUTE_DEVIATION));
+ } else {
+ return histogramWidth;
+ }
+ }
+ }
+}
+
+// Arguments that need to be calculated once per SAMRecord that are then passed to each PerUnitMetricCollector
+// for the given record
+class InsertSizeCollectorArgs {
+ private final int insertSize;
+ private final SamPairUtil.PairOrientation po;
+
+
+ public int getInsertSize() {
+ return insertSize;
+ }
+
+ public SamPairUtil.PairOrientation getPairOrientation() {
+ return po;
+ }
+
+ public InsertSizeCollectorArgs(final int insertSize, final SamPairUtil.PairOrientation po) {
+ this.insertSize = insertSize;
+ this.po = po;
+ }
+}
diff --git a/src/java/picard/analysis/directed/RnaSeqMetricsCollector.java b/src/java/picard/analysis/directed/RnaSeqMetricsCollector.java
new file mode 100644
index 0000000..d6ab4f1
--- /dev/null
+++ b/src/java/picard/analysis/directed/RnaSeqMetricsCollector.java
@@ -0,0 +1,413 @@
+package picard.analysis.directed;
+
+import htsjdk.samtools.AlignmentBlock;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.CoordMath;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.OverlapDetector;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.PicardException;
+import picard.analysis.MetricAccumulationLevel;
+import picard.analysis.RnaSeqMetrics;
+import picard.annotation.Gene;
+import picard.annotation.LocusFunction;
+import picard.metrics.PerUnitMetricCollector;
+import picard.metrics.SAMRecordMultiLevelCollector;
+import picard.util.MathUtil;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class RnaSeqMetricsCollector extends SAMRecordMultiLevelCollector<RnaSeqMetrics, Integer> {
+ public enum StrandSpecificity {NONE, FIRST_READ_TRANSCRIPTION_STRAND, SECOND_READ_TRANSCRIPTION_STRAND}
+
+ private final int minimumLength;
+ private final StrandSpecificity strandSpecificity;
+ private final double rrnaFragmentPercentage;
+ private final Long ribosomalInitialValue;
+
+ final private Set<Integer> ignoredSequenceIndices;
+
+ private final OverlapDetector<Gene> geneOverlapDetector;
+ private final OverlapDetector<Interval> ribosomalSequenceOverlapDetector;
+ private final boolean collectCoverageStatistics;
+
+ public RnaSeqMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
+ final Long ribosomalBasesInitialValue, OverlapDetector<Gene> geneOverlapDetector, OverlapDetector<Interval> ribosomalSequenceOverlapDetector,
+ final HashSet<Integer> ignoredSequenceIndices, final int minimumLength, final StrandSpecificity strandSpecificity,
+ final double rrnaFragmentPercentage, boolean collectCoverageStatistics) {
+ this.ribosomalInitialValue = ribosomalBasesInitialValue;
+ this.ignoredSequenceIndices = ignoredSequenceIndices;
+ this.geneOverlapDetector = geneOverlapDetector;
+ this.ribosomalSequenceOverlapDetector = ribosomalSequenceOverlapDetector;
+ this.minimumLength = minimumLength;
+ this.strandSpecificity = strandSpecificity;
+ this.rrnaFragmentPercentage = rrnaFragmentPercentage;
+ this.collectCoverageStatistics = collectCoverageStatistics;
+ setup(accumulationLevels, samRgRecords);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<RnaSeqMetrics, Integer, SAMRecord> makeChildCollector(final String sample, final String library, final String readGroup) {
+ return new PerUnitRnaSeqMetricsCollector(sample, library, readGroup, ribosomalInitialValue);
+ }
+
+ public static OverlapDetector<Interval> makeOverlapDetector(final File samFile, final SAMFileHeader header, final File ribosomalIntervalsFile) {
+
+ OverlapDetector<Interval> ribosomalSequenceOverlapDetector = new OverlapDetector<Interval>(0, 0);
+ if (ribosomalIntervalsFile != null) {
+
+ final IntervalList ribosomalIntervals = IntervalList.fromFile(ribosomalIntervalsFile);
+ try {
+ SequenceUtil.assertSequenceDictionariesEqual(header.getSequenceDictionary(), ribosomalIntervals.getHeader().getSequenceDictionary());
+ } catch (SequenceUtil.SequenceListsDifferException e) {
+ throw new PicardException("Sequence dictionaries differ in " + samFile.getAbsolutePath() + " and " + ribosomalIntervalsFile.getAbsolutePath(),
+ e);
+ }
+ final IntervalList uniquedRibosomalIntervals = ribosomalIntervals.uniqued();
+ final List<Interval> intervals = uniquedRibosomalIntervals.getIntervals();
+ ribosomalSequenceOverlapDetector.addAll(intervals, intervals);
+ }
+ return ribosomalSequenceOverlapDetector;
+ }
+
+ public static HashSet<Integer> makeIgnoredSequenceIndicesSet(final SAMFileHeader header, final Set<String> ignoredSequence) {
+ final HashSet<Integer> ignoredSequenceIndices = new HashSet<Integer>();
+ for (final String sequenceName: ignoredSequence) {
+ final SAMSequenceRecord sequenceRecord = header.getSequence(sequenceName);
+ if (sequenceRecord == null) {
+ throw new PicardException("Unrecognized sequence " + sequenceName + " passed as argument to IGNORE_SEQUENCE");
+ }
+ ignoredSequenceIndices.add(sequenceRecord.getSequenceIndex());
+ }
+ return ignoredSequenceIndices;
+ }
+
+ private class PerUnitRnaSeqMetricsCollector implements PerUnitMetricCollector<RnaSeqMetrics, Integer, SAMRecord> {
+
+ final RnaSeqMetrics metrics = new RnaSeqMetrics();
+
+ private final Map<Gene.Transcript, int[]> coverageByTranscript = new HashMap<Gene.Transcript, int[]>();
+
+ public PerUnitRnaSeqMetricsCollector(final String sample,
+ final String library,
+ final String readGroup,
+ final Long ribosomalBasesInitialValue) {
+ this.metrics.SAMPLE = sample;
+ this.metrics.LIBRARY = library;
+ this.metrics.READ_GROUP = readGroup;
+ this.metrics.RIBOSOMAL_BASES = ribosomalBasesInitialValue;
+
+ }
+
+ public void acceptRecord(SAMRecord rec) {
+ // Filter out some reads, and collect the total number of PF bases
+ if (rec.getReadFailsVendorQualityCheckFlag() || rec.isSecondaryOrSupplementary()) return;
+
+ this.metrics.PF_BASES += rec.getReadLength();
+ if (rec.getReadUnmappedFlag()) return;
+
+ if (ignoredSequenceIndices.contains(rec.getReferenceIndex())) {
+ ++this.metrics.IGNORED_READS;
+ return;
+ }
+
+ // Grab information about the alignment and overlapping genes etc.
+ final Interval readInterval = new Interval(rec.getReferenceName(), rec.getAlignmentStart(), rec.getAlignmentEnd());
+
+ // Attempt to get an interval for the entire fragment (if paired read) else just use the read itself.
+ // If paired read is chimeric or has one end unmapped, don't create an interval.
+ final Interval fragmentInterval;
+ if (!rec.getReadPairedFlag()) {
+ fragmentInterval = readInterval;
+ } else if (rec.getMateUnmappedFlag() || rec.getReferenceIndex() != rec.getMateReferenceIndex()) {
+ fragmentInterval = null;
+ } else {
+ final int fragmentStart = Math.min(rec.getAlignmentStart(), rec.getMateAlignmentStart());
+ final int fragmentEnd = CoordMath.getEnd(fragmentStart, Math.abs(rec.getInferredInsertSize()));
+ fragmentInterval = new Interval(rec.getReferenceName(), fragmentStart, fragmentEnd);
+ }
+ if (fragmentInterval != null) {
+ final Collection<Interval> overlappingRibosomalIntervals = ribosomalSequenceOverlapDetector.getOverlaps(fragmentInterval);
+ int intersectionLength = 0;
+ for (final Interval overlappingInterval : overlappingRibosomalIntervals) {
+ final int thisIntersectionLength = overlappingInterval.getIntersectionLength(fragmentInterval);
+ intersectionLength = Math.max(intersectionLength, thisIntersectionLength);
+ }
+ if (intersectionLength/(double)fragmentInterval.length() >= rrnaFragmentPercentage) {
+ // Assume entire read is ribosomal.
+ // TODO: Should count reads, not bases?
+ metrics.RIBOSOMAL_BASES += rec.getReadLength();
+ int numAlignedBases = 0;
+ for (final AlignmentBlock alignmentBlock : rec.getAlignmentBlocks()) {
+ numAlignedBases += alignmentBlock.getLength();
+ }
+ metrics.PF_ALIGNED_BASES += numAlignedBases;
+ return;
+ }
+ }
+
+ final Collection<Gene> overlappingGenes = geneOverlapDetector.getOverlaps(readInterval);
+ final List<AlignmentBlock> alignmentBlocks = rec.getAlignmentBlocks();
+ boolean overlapsExon = false;
+
+ for (final AlignmentBlock alignmentBlock : alignmentBlocks) {
+ // Get functional class for each position in the alignment block.
+ final LocusFunction[] locusFunctions = new LocusFunction[alignmentBlock.getLength()];
+
+ // By default, if base does not overlap with rRNA or gene, it is intergenic.
+ Arrays.fill(locusFunctions, 0, locusFunctions.length, LocusFunction.INTERGENIC);
+
+ for (final Gene gene : overlappingGenes) {
+ for (final Gene.Transcript transcript : gene) {
+ transcript.assignLocusFunctionForRange(alignmentBlock.getReferenceStart(), locusFunctions);
+ // if you want to gather coverage statistics, this variable should be true.
+ // added for cases with many units [samples/read groups] which overwhelm memory.
+ // Add coverage to our coverage counter for this transcript
+ if (collectCoverageStatistics) {
+ int[] coverage = this.coverageByTranscript.get(transcript);
+ if (coverage == null) {
+ coverage = new int[transcript.length()];
+ this.coverageByTranscript.put(transcript, coverage);
+ }
+ transcript.addCoverageCounts(alignmentBlock.getReferenceStart(),
+ CoordMath.getEnd(alignmentBlock.getReferenceStart(), alignmentBlock.getLength()),
+ coverage);
+ }
+
+ }
+ }
+
+ // Tally the function of each base in the alignment block.
+ for (final LocusFunction locusFunction : locusFunctions) {
+ ++metrics.PF_ALIGNED_BASES;
+ switch (locusFunction) {
+ case INTERGENIC:
+ ++metrics.INTERGENIC_BASES;
+ break;
+ case INTRONIC:
+ ++metrics.INTRONIC_BASES;
+ break;
+ case UTR:
+ ++metrics.UTR_BASES;
+ overlapsExon = true;
+ break;
+ case CODING:
+ ++metrics.CODING_BASES;
+ overlapsExon = true;
+ break;
+ case RIBOSOMAL:
+ ++metrics.RIBOSOMAL_BASES;
+ break;
+ }
+ }
+ }
+
+ // Strand-specificity is tallied on read basis rather than base at a time. A read that aligns to more than one
+ // gene is not counted.
+ if (overlapsExon && strandSpecificity != StrandSpecificity.NONE && overlappingGenes.size() == 1) {
+ final boolean negativeTranscriptionStrand = overlappingGenes.iterator().next().isNegativeStrand();
+ final boolean negativeReadStrand = rec.getReadNegativeStrandFlag();
+ final boolean readAndTranscriptStrandsAgree = negativeReadStrand == negativeTranscriptionStrand;
+ final boolean readOneOrUnpaired = !rec.getReadPairedFlag() || rec.getFirstOfPairFlag();
+ final boolean firstReadExpectedToAgree = strandSpecificity == StrandSpecificity.FIRST_READ_TRANSCRIPTION_STRAND;
+ final boolean thisReadExpectedToAgree = readOneOrUnpaired == firstReadExpectedToAgree;
+ // If the read strand is the same as the strand of the transcript, and the end is the one that is supposed to agree,
+ // then the strand specificity for this read is correct.
+ // -- OR --
+ // If the read strand is not the same as the strand of the transcript, and the end is not the one that is supposed
+ // to agree, then the strand specificity for this read is correct.
+ if (readAndTranscriptStrandsAgree == thisReadExpectedToAgree) {
+ ++metrics.CORRECT_STRAND_READS;
+ } else {
+ ++metrics.INCORRECT_STRAND_READS;
+ }
+ }
+
+ }
+
+ public void finish() {
+ if (metrics.PF_ALIGNED_BASES > 0) {
+ if (metrics.RIBOSOMAL_BASES != null) {
+ metrics.PCT_RIBOSOMAL_BASES = metrics.RIBOSOMAL_BASES / (double) metrics.PF_ALIGNED_BASES;
+ }
+ metrics.PCT_CODING_BASES = metrics.CODING_BASES / (double) metrics.PF_ALIGNED_BASES;
+ metrics.PCT_UTR_BASES = metrics.UTR_BASES / (double) metrics.PF_ALIGNED_BASES;
+ metrics.PCT_INTRONIC_BASES = metrics.INTRONIC_BASES / (double) metrics.PF_ALIGNED_BASES;
+ metrics.PCT_INTERGENIC_BASES = metrics.INTERGENIC_BASES / (double) metrics.PF_ALIGNED_BASES;
+ metrics.PCT_MRNA_BASES = metrics.PCT_CODING_BASES + metrics.PCT_UTR_BASES;
+ metrics.PCT_USABLE_BASES = (metrics.CODING_BASES + metrics.UTR_BASES) / (double) metrics.PF_BASES;
+ }
+
+ if (metrics.CORRECT_STRAND_READS > 0 || metrics.INCORRECT_STRAND_READS > 0) {
+ metrics.PCT_CORRECT_STRAND_READS = metrics.CORRECT_STRAND_READS/(double)(metrics.CORRECT_STRAND_READS + metrics.INCORRECT_STRAND_READS);
+ }
+ }
+
+ @Override
+ public void addMetricsToFile(final MetricsFile<RnaSeqMetrics, Integer> file) {
+ // Compute metrics based on coverage of top 1000 genes
+ final Histogram<Integer> normalizedCovByPos = computeCoverageMetrics();
+ file.addMetric(metrics);
+ file.addHistogram(normalizedCovByPos);
+ }
+
+ /**
+ * Computes a set of coverage based metrics on the mostly highly expressed genes' most highly
+ * expressed transcripts.
+ */
+ private Histogram<Integer> computeCoverageMetrics() {
+ final Histogram<Double> cvs = new Histogram<Double>();
+ final Histogram<Double> fivePrimeSkews = new Histogram<Double>();
+ final Histogram<Double> threePrimeSkews = new Histogram<Double>();
+ final Histogram<Double> gapBasesPerKb = new Histogram<Double>();
+ final Histogram<Double> fiveToThreeSkews = new Histogram<Double>();
+ String prefix = null;
+ if (this.metrics.READ_GROUP != null) {
+ prefix = this.metrics.READ_GROUP + ".";
+ }
+ else if (this.metrics.LIBRARY != null) {
+ prefix = this.metrics.LIBRARY + ".";
+ }
+ else if (this.metrics.SAMPLE != null) {
+ prefix = this.metrics.SAMPLE + ".";
+ }
+ else {
+ prefix = "All_Reads.";
+ }
+
+ final Histogram<Integer> normalizedCoverageByNormalizedPosition = new Histogram<Integer>("normalized_position", prefix + "normalized_coverage");
+
+ final Map<Gene.Transcript,int[]> transcripts = pickTranscripts(coverageByTranscript);
+ final double transcriptCount = transcripts.size();
+
+ for (final Map.Entry<Gene.Transcript,int[]> entry : transcripts.entrySet()) {
+ final Gene.Transcript tx = entry.getKey();
+ final double[] coverage;
+ {
+ final double[] tmp = MathUtil.promote(entry.getValue());
+ if (tx.getGene().isPositiveStrand()) coverage = tmp;
+ else coverage = copyAndReverse(tmp);
+ }
+ final double mean = MathUtil.mean(coverage, 0, coverage.length);
+
+ // Calculate the CV of coverage for this tx
+ final double stdev = MathUtil.stddev(coverage, 0, coverage.length, mean);
+ final double cv = stdev / mean;
+ cvs.increment(cv);
+
+ // Calculate the 5' and 3' biases
+ {
+ final int PRIME_BASES = 100;
+ final double fivePrimeCoverage = MathUtil.mean(coverage, 0, PRIME_BASES);
+ final double threePrimeCoverage = MathUtil.mean(coverage, coverage.length - PRIME_BASES, coverage.length);
+
+ fivePrimeSkews.increment(fivePrimeCoverage / mean);
+ threePrimeSkews.increment(threePrimeCoverage / mean);
+ fiveToThreeSkews.increment(fivePrimeCoverage / threePrimeCoverage);
+ }
+
+ // Calculate normalized coverage vs. normalized position
+ {
+ final int lastIndex = coverage.length - 1;
+
+ for (int percent=0; percent<=100; ++percent) {
+ final double p = percent / 100d;
+ final int start = (int) Math.max(0, lastIndex * (p-0.005));
+ final int end = (int) Math.min(lastIndex, lastIndex * (p+0.005));
+ final int length = end - start + 1;
+
+ double sum = 0;
+ for (int i=start; i<=end; ++i) sum += coverage[i];
+ final double normalized = (sum / length) / mean;
+ normalizedCoverageByNormalizedPosition.increment(percent, normalized / transcriptCount);
+ }
+ }
+
+ // Calculate gap bases per kilobase
+ // {
+ // int gapBases = 0;
+ // final double minCoverage = mean * 0.1;
+ // for (int i=0; i<coverage.length; ++i) {
+ // if (coverage[i] < minCoverage) ++gapBases;
+ // }
+ // gapBasesPerKb.increment(gapBases / (coverage.length / 1000d));
+ // }
+ }
+
+ this.metrics.MEDIAN_CV_COVERAGE = cvs.getMedian();
+ this.metrics.MEDIAN_5PRIME_BIAS = fivePrimeSkews.getMedian();
+ this.metrics.MEDIAN_3PRIME_BIAS = threePrimeSkews.getMedian();
+ this.metrics.MEDIAN_5PRIME_TO_3PRIME_BIAS = fiveToThreeSkews.getMedian();
+
+ return normalizedCoverageByNormalizedPosition;
+ }
+
+ /** Little method to copy an array and reverse it at the same time. */
+ private double[] copyAndReverse(final double[] in) {
+ final double[] out = new double[in.length];
+ for (int i=0, j=in.length-1; i<in.length; ++i, --j) out[j] = in[i];
+ return out;
+ }
+
+ /** Picks the set of transcripts on which the coverage metrics are to be calculated. */
+ public Map<Gene.Transcript, int[]> pickTranscripts(final Map<Gene.Transcript, int[]> transcriptCoverage) {
+ final Map<Gene.Transcript, Double> bestPerGene = new HashMap<Gene.Transcript, Double>();
+
+ // Make a map of the best transcript per gene to it's mean coverage
+ for (final Gene gene : geneOverlapDetector.getAll()) {
+ Gene.Transcript best = null;
+ double bestMean = 0;
+
+ for (final Gene.Transcript tx : gene) {
+ final int[] cov = transcriptCoverage.get(tx);
+
+ if (tx.length() < Math.max(minimumLength, 100)) continue;
+ if (cov == null) continue;
+
+ final double mean = MathUtil.mean(MathUtil.promote(cov), 0, cov.length);
+ if (mean < 1d) continue;
+ if (best == null || mean > bestMean) {
+ best = tx;
+ bestMean = mean;
+ }
+ }
+
+ if (best != null) bestPerGene.put(best, bestMean);
+ }
+
+ // Find the 1000th best coverage value
+ final double[] coverages = new double[bestPerGene.size()];
+ int i=0;
+ for (final double d : bestPerGene.values()) coverages[i++] = d;
+ Arrays.sort(coverages);
+ final double min = coverages.length == 0 ? 0 : coverages[Math.max(0, coverages.length - 1001)];
+
+ // And finally build the output map
+ final Map<Gene.Transcript, int[]> retval = new HashMap<Gene.Transcript, int[]>();
+ for (final Map.Entry<Gene.Transcript,Double> entry : bestPerGene.entrySet()) {
+ final Gene.Transcript tx = entry.getKey();
+ final double coverage = entry.getValue();
+
+ if (coverage >= min) {
+ retval.put(tx, transcriptCoverage.get(tx));
+ }
+ }
+
+ return retval;
+ }
+
+ }
+}
diff --git a/src/java/picard/analysis/directed/TargetMetricsCollector.java b/src/java/picard/analysis/directed/TargetMetricsCollector.java
new file mode 100644
index 0000000..f08b48c
--- /dev/null
+++ b/src/java/picard/analysis/directed/TargetMetricsCollector.java
@@ -0,0 +1,759 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis.directed;
+
+import htsjdk.samtools.AlignmentBlock;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.CoordMath;
+import htsjdk.samtools.util.FormatUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.OverlapDetector;
+import htsjdk.samtools.util.RuntimeIOException;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.analysis.MetricAccumulationLevel;
+import picard.metrics.MultilevelMetrics;
+import picard.metrics.PerUnitMetricCollector;
+import picard.metrics.SAMRecordMultiLevelCollector;
+import picard.util.MathUtil;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * TargetMetrics, are metrics to measure how well we hit specific targets (or baits) when using a targeted sequencing process like hybrid selection
+ * or Targeted PCR Techniques (TSCA). TargetMetrics at the moment are the metrics that are shared by both HybridSelection and TargetedPcrMetrics.
+ *
+ * TargetMetricsCollector collects for a run these common metrics and can be sub-classed to provide metrics more specific to a targeted sequencing
+ * run.
+ *
+ * Note: Probe is the name I've used to indicate the bait set or amplicon set (e.g. the individual technological units used to target specific
+ * sites).
+ *
+ * @author Jonathan Burke
+ */
+public abstract class TargetMetricsCollector<METRIC_TYPE extends MultilevelMetrics> extends SAMRecordMultiLevelCollector<METRIC_TYPE, Integer> {
+
+ // What is considered "near" to the bait
+ private static final int NEAR_PROBE_DISTANCE = 250;
+
+ //If perTargetCoverage != null then coverage is computed for each specified target and output to this file
+ private final File perTargetCoverage;
+
+ //The name of the set of probes used
+ private final String probeSetName;
+
+ private static final Log log = Log.getInstance(TargetMetricsCollector.class);
+
+ //The interval list indicating the regions targeted by all probes
+ private final IntervalList allProbes;
+
+ //The interval list of the the regions we intend to cover
+ private final IntervalList allTargets;
+
+ // Overlap detector for finding overlaps between reads and the experimental targets
+ private final OverlapDetector<Interval> targetDetector;
+
+ // Overlap detector for finding overlaps between the reads and the baits (and the near bait space)
+ private final OverlapDetector<Interval> probeDetector;
+
+ private Map<Interval,Double> intervalToGc = null;
+
+ //The number of bases within all unique intervals in allProbes
+ private final long probeTerritory;
+
+ //The number of bases within all unique intervals found in allTargets
+ private final long targetTerritory;
+
+ private final long genomeSize;
+
+ //A map of coverage by target in which coverage is reset every read, this is done
+ //so that we can calculate overlap for a read once and the resulting coverage is
+ //than added to the cumulative coverage of every collector that collects
+ //information on that read
+ private Map<Interval, Coverage> coverageByTargetForRead;
+ private Coverage [] cov;
+
+ //Converts a targetMetric into a more specific metric of METRIC_TYPE
+ public abstract METRIC_TYPE convertMetric(final TargetMetrics targetMetrics);
+
+ /**
+ * Since the targeted metrics (HsMetrics, TargetedPcrMetrics,...) share many of the same values as TargetMetrics, this copy will copy all public attributes in targetMetrics
+ * to the outputMetrics' attributes of the same name. If no matching attribute exists in the outputMetrics or the attribute of the target metrics class also is found
+ * in targetKeys then it's value is not copied. Further more, targetKeys and outputKeys are attribute name arrays synchronized by the index.
+ * For each target key, targetMetrics.<targetKeys[i]> is assigned to outputMetrics.<outputKeys[i]>
+ *
+ * @param targetMetrics A metric with values to be copied
+ * @param outputMetrics A metrics intended to receive values from targetMetrics
+ * @param targetKeys Specific names of attributes of targetMetrics to copy to outputMetrics, each key has a corresponding one in outputKeys
+ * @param outputKeys Specific names of the destination attributes of outputMetrics that will be filled with values of outputMetrics, each key has a corresponding one in targetKeys
+ * @param <MT> The type of metric of outputMetrics
+ */
+ protected static <MT extends MetricBase> void reflectiveCopy(final TargetMetrics targetMetrics, final MT outputMetrics, final String [] targetKeys, final String [] outputKeys) {
+
+ if(targetKeys == null || outputKeys == null) {
+ if(outputKeys != null) {
+ throw new PicardException("Target keys is null but output keys == " + StringUtil.join(",", outputKeys));
+ }
+
+ if(targetKeys != null) {
+ throw new PicardException("Output keys is null but target keys == " + StringUtil.join(",", targetKeys));
+ }
+ } else {
+ if(targetKeys.length != outputKeys.length) {
+ throw new PicardException("Target keys and output keys do not have the same length: " +
+ "targetKeys == (" + StringUtil.join(",", targetKeys) + ") " +
+ "outputKeys == (" + StringUtil.join(",", outputKeys) + ")");
+ }
+ }
+
+ final Class mtClass = outputMetrics.getClass();
+ final Set<Field> targetSet = CollectionUtil.makeSet(TargetMetrics.class.getFields());
+
+ for(final String targetKey : targetKeys) {
+ if(targetSet.contains(targetKey)) {
+ targetSet.remove(targetKey);
+ }
+ }
+
+ final Set<String> outputSet = new HashSet<String>();
+ for(final Field field : outputMetrics.getClass().getFields()) {
+ outputSet.add(field.getName());
+ }
+
+ for(final Field field : targetSet) {
+ if(outputSet.contains(field.getName())) {
+ try {
+ final Field outputField = mtClass.getField(field.getName());
+ outputField.set(outputMetrics, field.get(targetMetrics));
+ } catch (Exception e) {
+ throw new PicardException("Exception while copying targetMetrics to " + outputMetrics.getClass().getName(), e);
+ }
+ }
+ }
+
+ for(int i = 0; i < targetKeys.length; i++) {
+ try {
+ Field targetMetricField = TargetMetrics.class.getField(targetKeys[i]);
+ Field outputMetricField = mtClass.getField(outputKeys[i]);
+ outputMetricField.set(outputMetrics, targetMetricField.get(targetMetrics));
+ } catch(final Exception exc) {
+ throw new PicardException("Exception while copying TargetMetrics." + targetKeys[i] + " to " + mtClass.getName() + "." + outputKeys[i], exc);
+ }
+ }
+ }
+
+ public TargetMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords, final ReferenceSequenceFile refFile,
+ final File perTargetCoverage, final IntervalList targetIntervals, final IntervalList probeIntervals, final String probeSetName) {
+ this.perTargetCoverage = perTargetCoverage;
+ this.probeSetName = probeSetName;
+
+ this.allProbes = probeIntervals;
+ this.allTargets = targetIntervals;
+
+ final List<Interval> uniqueBaits = this.allProbes.uniqued().getIntervals();
+ this.probeDetector = new OverlapDetector<Interval>(-NEAR_PROBE_DISTANCE, 0);
+ this.probeDetector.addAll(uniqueBaits, uniqueBaits);
+ this.probeTerritory = Interval.countBases(uniqueBaits);
+
+ final List<Interval> uniqueTargets = this.allTargets.uniqued().getIntervals();
+ targetDetector = new OverlapDetector<Interval>(0,0);
+ this.targetDetector.addAll(uniqueTargets, uniqueTargets);
+ this.targetTerritory = Interval.countBases(uniqueTargets);
+
+ // Populate the coverage by target map
+ int i = 0;
+ cov = new Coverage[uniqueTargets.size()];
+ this.coverageByTargetForRead = new LinkedHashMap<Interval, Coverage>(uniqueTargets.size() * 2, 0.5f);
+ for (final Interval target : uniqueTargets) {
+ final Coverage coverage = new Coverage(target, 0);
+ this.coverageByTargetForRead.put(target, coverage);
+ cov[i++] = coverage;
+ }
+
+ long genomeSizeAccumulator = 0;
+ for (final SAMSequenceRecord seq : this.allProbes.getHeader().getSequenceDictionary().getSequences()) {
+ genomeSizeAccumulator += seq.getSequenceLength();
+ }
+ this.genomeSize = genomeSizeAccumulator;
+
+
+ if (refFile != null) {
+ intervalToGc = new HashMap<Interval,Double>();
+ for (final Interval target : uniqueTargets) {
+ final ReferenceSequence rs = refFile.getSubsequenceAt(target.getSequence(), target.getStart(), target.getEnd());
+ intervalToGc.put(target,SequenceUtil.calculateGc(rs.getBases()));
+ }
+ }
+
+ setup(accumulationLevels, samRgRecords);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Integer, SAMRecord> makeChildCollector(final String sample, final String library, final String readGroup) {
+ final PerUnitTargetMetricCollector collector = new PerUnitTargetMetricCollector(probeSetName, coverageByTargetForRead.keySet(),
+ sample, library, readGroup, probeTerritory, targetTerritory, genomeSize,
+ intervalToGc);
+ if (this.probeSetName != null) {
+ collector.setBaitSetName(probeSetName);
+ }
+
+ return collector;
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Integer, SAMRecord> makeAllReadCollector() {
+ final PerUnitTargetMetricCollector collector = (PerUnitTargetMetricCollector) makeChildCollector(null, null, null);
+ if (perTargetCoverage != null) {
+ collector.setPerTargetOutput(perTargetCoverage);
+ }
+
+ return collector;
+ }
+
+ /**
+ * Collect the Target Metrics for one unit of "accumulation" (i.e. for one sample, or for one library ...)
+ */
+ public class PerUnitTargetMetricCollector implements PerUnitMetricCollector<METRIC_TYPE, Integer, SAMRecord> {
+
+ private final Map<Interval,Double> intervalToGc;
+ private File perTargetOutput;
+
+ // A Map to accumulate per-bait-region (i.e. merge of overlapping targets) coverage. */
+ private final Map<Interval, Coverage> coverageByTarget;
+
+ private final TargetMetrics metrics = new TargetMetrics();
+
+ /**
+ * Constructor that parses the squashed reference to genome reference file and stores the
+ * information in a map for later use.
+ */
+ public PerUnitTargetMetricCollector(final String probeSetName, final Set<Interval> coverageTargets,
+ final String sample, final String library, final String readGroup,
+ final long probeTerritory, final long targetTerritory, final long genomeSize,
+ final Map<Interval, Double> intervalToGc) {
+ this.metrics.SAMPLE = sample;
+ this.metrics.LIBRARY = library;
+ this.metrics.READ_GROUP = readGroup;
+ this.metrics.PROBE_SET = probeSetName;
+
+ metrics.PROBE_TERRITORY = probeTerritory;
+ metrics.TARGET_TERRITORY = targetTerritory;
+ metrics.GENOME_SIZE = genomeSize;
+
+ this.coverageByTarget = new LinkedHashMap<Interval, Coverage>(coverageTargets.size() * 2, 0.5f);
+ for (Interval target : coverageTargets) {
+ this.coverageByTarget.put(target, new Coverage(target,0));
+ }
+
+ this.intervalToGc = intervalToGc;
+ }
+
+ /** If set, the metrics collector will output per target coverage information to this file. */
+ public void setPerTargetOutput(final File perTargetOutput) {
+ this.perTargetOutput = perTargetOutput;
+ }
+
+ /** Sets the name of the bait set explicitly instead of inferring it from the bait file. */
+ public void setBaitSetName(final String name) {
+ this.metrics.PROBE_SET = name;
+ }
+
+ /** Adds information about an individual SAMRecord to the statistics. */
+ public void acceptRecord(final SAMRecord rec) {
+ // Just plain avoid records that are marked as not-primary
+ if (rec.isSecondaryOrSupplementary()) return;
+
+ this.metrics.TOTAL_READS += 1;
+
+ // Check for PF reads
+ if (rec.getReadFailsVendorQualityCheckFlag()) {
+ return;
+ }
+
+ // Prefetch the list of target and bait overlaps here as they're needed multiple times.
+ final Collection<Interval> targets;
+ final Collection<Interval> probes;
+
+ if (!rec.getReadUnmappedFlag()) {
+ final Interval read = new Interval(rec.getReferenceName(), rec.getAlignmentStart(), rec.getAlignmentEnd());
+ targets = targetDetector.getOverlaps(read);
+ probes = probeDetector.getOverlaps(read);
+ }
+ else {
+ targets = null;
+ probes = null;
+ }
+
+ ++this.metrics.PF_READS;
+ this.metrics.PF_BASES += rec.getReadLength();
+
+ // And now calculate the values we need for HS_LIBRARY_SIZE
+ if (rec.getReadPairedFlag() && rec.getFirstOfPairFlag() && !rec.getReadUnmappedFlag() && !rec.getMateUnmappedFlag()) {
+ if (probes != null && !probes.isEmpty()) {
+ ++this.metrics.PF_SELECTED_PAIRS;
+ if (!rec.getDuplicateReadFlag()) ++this.metrics.PF_SELECTED_UNIQUE_PAIRS;
+ }
+ }
+
+ // Check for reads that are marked as duplicates
+ if (rec.getDuplicateReadFlag()) {
+ return;
+ }
+ else {
+ ++this.metrics.PF_UNIQUE_READS;
+ }
+
+ // Don't bother with reads that didn't align uniquely
+ if (rec.getReadUnmappedFlag() || rec.getMappingQuality() == 0) {
+ return;
+ }
+
+ this.metrics.PF_UQ_READS_ALIGNED += 1;
+ for (final AlignmentBlock block : rec.getAlignmentBlocks()) {
+ this.metrics.PF_UQ_BASES_ALIGNED += block.getLength();
+ }
+
+ final boolean mappedInPair = rec.getReadPairedFlag() && !rec.getMateUnmappedFlag();
+
+ // Find the target overlaps
+ if (targets != null && !targets.isEmpty()) {
+ for (final Interval target : targets) {
+ final Coverage coverage = this.coverageByTarget.get(target);
+
+ for (final AlignmentBlock block : rec.getAlignmentBlocks()) {
+ final int end = CoordMath.getEnd(block.getReferenceStart(), block.getLength());
+ for (int pos=block.getReferenceStart(); pos<=end; ++ pos) {
+ if (pos >= target.getStart() && pos <= target.getEnd()) {
+ ++this.metrics.ON_TARGET_BASES;
+ if (mappedInPair) ++this.metrics.ON_TARGET_FROM_PAIR_BASES;
+ coverage.addBase(pos - target.getStart());
+ }
+ }
+ }
+ }
+ }
+
+ // Now do the bait overlaps
+ int mappedBases = 0;
+ for (final AlignmentBlock block : rec.getAlignmentBlocks()) mappedBases += block.getLength();
+ int onBaitBases = 0;
+
+ if (probes != null && !probes.isEmpty()) {
+ for (final Interval bait : probes) {
+ for (final AlignmentBlock block : rec.getAlignmentBlocks()) {
+ final int end = CoordMath.getEnd(block.getReferenceStart(), block.getLength());
+
+ for (int pos=block.getReferenceStart(); pos<=end; ++pos) {
+ if (pos >= bait.getStart() && pos <= bait.getEnd()) ++onBaitBases;
+ }
+ }
+ }
+
+ this.metrics.ON_PROBE_BASES += onBaitBases;
+ this.metrics.NEAR_PROBE_BASES += (mappedBases - onBaitBases);
+ }
+ else {
+ this.metrics.OFF_PROBE_BASES += mappedBases;
+ }
+
+ }
+
+ @Override
+ public void finish() {
+ metrics.PCT_PF_READS = metrics.PF_READS / (double) metrics.TOTAL_READS;
+ metrics.PCT_PF_UQ_READS = metrics.PF_UNIQUE_READS / (double) metrics.TOTAL_READS;
+ metrics.PCT_PF_UQ_READS_ALIGNED = metrics.PF_UQ_READS_ALIGNED / (double) metrics.PF_UNIQUE_READS;
+
+ final double denominator = (metrics.ON_PROBE_BASES + metrics.NEAR_PROBE_BASES + metrics.OFF_PROBE_BASES);
+
+ metrics.PCT_SELECTED_BASES = (metrics.ON_PROBE_BASES + metrics.NEAR_PROBE_BASES) / denominator;
+ metrics.PCT_OFF_PROBE = metrics.OFF_PROBE_BASES / denominator;
+ metrics.ON_PROBE_VS_SELECTED = metrics.ON_PROBE_BASES / (double) (metrics.ON_PROBE_BASES + metrics.NEAR_PROBE_BASES);
+ metrics.MEAN_PROBE_COVERAGE = metrics.ON_PROBE_BASES / (double) metrics.PROBE_TERRITORY;
+ metrics.FOLD_ENRICHMENT = (metrics.ON_PROBE_BASES/ denominator) / ((double) metrics.PROBE_TERRITORY / metrics.GENOME_SIZE);
+
+ calculateTargetCoverageMetrics();
+ calculateGcMetrics();
+ }
+
+ /** Calculates how much additional sequencing is needed to raise 80% of bases to the mean for the lane. */
+ private void calculateTargetCoverageMetrics() {
+ final short[] depths = new short[(int) this.metrics.TARGET_TERRITORY]; // may not use entire array
+ int zeroCoverageTargets = 0;
+ int depthIndex = 0;
+ double totalCoverage = 0;
+ int basesConsidered = 0;
+
+ for (final Coverage c : this.coverageByTarget.values()) {
+ if (!c.hasCoverage()) {
+ ++zeroCoverageTargets;
+ continue;
+ }
+
+ final short[] targetDepths = c.getDepths();
+ basesConsidered += targetDepths.length;
+
+ for (final short depth : targetDepths) {
+ depths[depthIndex++] = depth;
+ totalCoverage += depth;
+ }
+ }
+
+ this.metrics.MEAN_TARGET_COVERAGE = totalCoverage / basesConsidered;
+
+ // Sort the array (ASCENDING) and then find the base the coverage value that lies at the 80%
+ // line, which is actually at 20% into the array now
+ Arrays.sort(depths);
+ // Note. basesConsidered can be between 0 and depths.length inclusive. indexOf80thPercentile will be -1 in the latter case
+ final int indexOf80thPercentile = Math.max((depths.length - 1 - basesConsidered) + (int) (basesConsidered * 0.2), 0);
+ final int coverageAt80thPercentile = depths[indexOf80thPercentile];
+ this.metrics.FOLD_80_BASE_PENALTY = this.metrics.MEAN_TARGET_COVERAGE / coverageAt80thPercentile;
+ this.metrics.ZERO_CVG_TARGETS_PCT = zeroCoverageTargets / (double) allTargets.getIntervals().size();
+
+ // Now do the "how many bases at X" calculations.
+ int totalTargetBases = 0;
+ int targetBases2x = 0;
+ int targetBases10x = 0;
+ int targetBases20x = 0;
+ int targetBases30x = 0;
+ int targetBases40x = 0;
+ int targetBases50x = 0;
+ int targetBases100x = 0;
+
+ for (final Coverage c : this.coverageByTarget.values()) {
+ for (final short depth : c.getDepths()) {
+ ++totalTargetBases;
+
+ if (depth >= 2) {
+ ++targetBases2x;
+ if (depth >=10) {
+ ++targetBases10x;
+ if (depth >= 20) {
+ ++targetBases20x;
+ if (depth >=30) {
+ ++targetBases30x;
+ if (depth >=40) {
+ ++targetBases40x;
+ if (depth >=50) {
+ ++targetBases50x;
+ if (depth >=100) {
+ ++targetBases100x;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ this.metrics.PCT_TARGET_BASES_2X = (double) targetBases2x / (double) totalTargetBases;
+ this.metrics.PCT_TARGET_BASES_10X = (double) targetBases10x / (double) totalTargetBases;
+ this.metrics.PCT_TARGET_BASES_20X = (double) targetBases20x / (double) totalTargetBases;
+ this.metrics.PCT_TARGET_BASES_30X = (double) targetBases30x / (double) totalTargetBases;
+ this.metrics.PCT_TARGET_BASES_40X = (double) targetBases40x / (double) totalTargetBases;
+ this.metrics.PCT_TARGET_BASES_50X = (double) targetBases50x / (double) totalTargetBases;
+ this.metrics.PCT_TARGET_BASES_100X = (double) targetBases100x / (double) totalTargetBases;
+ }
+
+ private void calculateGcMetrics() {
+ if (this.intervalToGc != null) {
+ log.info("Calculating GC metrics");
+
+ // Setup the output file if we're outputting per-target coverage
+ FormatUtil fmt = new FormatUtil();
+ final PrintWriter out;
+ try {
+ if (perTargetOutput != null) {
+ out = new PrintWriter(perTargetOutput);
+ out.println("chrom\tstart\tend\tlength\tname\t%gc\tmean_coverage\tnormalized_coverage\tmin_normalized_coverage");
+ }
+ else {
+ out = null;
+ }
+ }
+ catch (IOException ioe) { throw new RuntimeIOException(ioe); }
+
+ final int bins = 101;
+ final long[] targetBasesByGc = new long[bins];
+ final long[] alignedBasesByGc = new long[bins];
+
+ for (final Map.Entry<Interval,Coverage> entry : this.coverageByTarget.entrySet()) {
+ final Interval interval = entry.getKey();
+ final Coverage cov = entry.getValue();
+
+ final double gcDouble = this.intervalToGc.get(interval);
+ final int gc = (int) Math.round(gcDouble * 100);
+
+ targetBasesByGc[gc] += interval.length();
+ alignedBasesByGc[gc] += cov.getTotal();
+
+ if (out != null) {
+ final double coverage = cov.getTotal() / (double) interval.length();
+ final double min = MathUtil.min(cov.getDepths());
+
+ out.println(interval.getSequence() + "\t" +
+ interval.getStart() + "\t" +
+ interval.getEnd() + "\t" +
+ interval.length() + "\t" +
+ interval.getName() + "\t" +
+ fmt.format(gcDouble) + "\t" +
+ fmt.format(coverage) + "\t" +
+ fmt.format(coverage / this.metrics.MEAN_TARGET_COVERAGE) + "\t" +
+ fmt.format(min / this.metrics.MEAN_TARGET_COVERAGE)
+ );
+ }
+ }
+
+ if (out != null) out.close();
+
+ // Total things up
+ long totalTarget = 0;
+ long totalBases = 0;
+ for (int i=0; i<targetBasesByGc.length; ++i) {
+ totalTarget += targetBasesByGc[i];
+ totalBases += alignedBasesByGc[i];
+ }
+
+ // Re-express things as % of the totals and calculate dropout metrics
+ for (int i=0; i<targetBasesByGc.length; ++i) {
+ final double targetPct = targetBasesByGc[i] / (double) totalTarget;
+ final double alignedPct = alignedBasesByGc[i] / (double) totalBases;
+
+ double dropout = (alignedPct - targetPct) * 100d;
+ if (dropout < 0) {
+ dropout = Math.abs(dropout);
+
+ if (i <=50) this.metrics.AT_DROPOUT += dropout;
+ if (i >=50) this.metrics.GC_DROPOUT += dropout;
+ }
+ }
+ }
+ }
+
+
+ @Override
+ public void addMetricsToFile(MetricsFile<METRIC_TYPE, Integer> hsMetricsComparableMetricsFile) {
+ hsMetricsComparableMetricsFile.addMetric(convertMetric(this.metrics));
+ }
+ }
+
+ /**
+ * A simple class that is used to store the coverage information about an interval.
+ *
+ * @author Tim Fennell
+ */
+ public static class Coverage {
+ private final Interval interval;
+ private final short[] depths;
+
+ /** Constructs a new coverage object for the provided mapping with the desired padding either side. */
+ public Coverage(final Interval i, final int padding) {
+ this.interval = i;
+ this.depths = new short[interval.length() + 2*padding];
+ }
+
+ /** Adds a single point of depth at the desired offset into the coverage array. */
+ public void addBase(final int offset) {
+ if (offset >= 0 && offset < this.depths.length) {
+ // Prevent overflow if depth is too great, while avoiding doubling memory requirement.
+ if (this.depths[offset] < Short.MAX_VALUE) {
+ this.depths[offset] += 1;
+ }
+ }
+ }
+
+ /** Returns true if any base in the range has coverage of > 1 */
+ public boolean hasCoverage() {
+ for (final short s : depths) {
+ if (s > 1) return true;
+ }
+
+ return false;
+ }
+
+ /** Gets the coverage depths as an array of shorts. */
+ public short[] getDepths() { return this.depths; }
+
+ public int getTotal() {
+ int total = 0;
+ for (int i=0; i<depths.length; ++i) total += depths[i];
+ return total;
+ }
+
+ @Override
+ public String toString() {
+ return "TargetedMetricCollector(interval=" + interval + ", depths = [" + StringUtil.intValuesToString(this.depths) + "])";
+ }
+ }
+}
+
+/**
+ * For a sequencing run targeting specific regions of the genome this metric class holds metrics describing
+ * how well those regions were targeted.
+ */
+class TargetMetrics extends MultilevelMetrics {
+ /** The name of the PROBE_SET (BAIT SET, AMPLICON SET, ...) used in this metrics collection run */
+ public String PROBE_SET;
+
+ /** The number of unique bases covered by the intervals of all probes in the probe set */
+ public long PROBE_TERRITORY;
+
+ /** The number of unique bases covered by the intervals of all targets that should be covered */
+ public long TARGET_TERRITORY;
+
+ /** The number of bases in the reference genome used for alignment. */
+ public long GENOME_SIZE;
+
+ /** The total number of reads in the SAM or BAM file examined. */
+ public long TOTAL_READS;
+
+ /** The number of reads that pass the vendor's filter. */
+ public long PF_READS;
+
+ /** The number of bases in the SAM or BAM file to be examined */
+ public long PF_BASES;
+
+ /** The number of PF reads that are not marked as duplicates. */
+ public long PF_UNIQUE_READS;
+
+ // Tracks the number of read pairs that we see that are PF (used to calculate library size) */
+ public long PF_SELECTED_PAIRS;
+
+ // Tracks the number of unique PF reads pairs we see (used to calc library size)
+ public long PF_SELECTED_UNIQUE_PAIRS;
+
+ /** The number of PF unique reads that are aligned with mapping score > 0 to the reference genome. */
+ public long PF_UQ_READS_ALIGNED;
+
+ /** The number of PF unique bases that are aligned with mapping score > 0 to the reference genome. */
+ public long PF_UQ_BASES_ALIGNED;
+
+ /** The number of PF aligned probed that mapped to a baited region of the genome. */
+ public long ON_PROBE_BASES;
+
+ /** The number of PF aligned bases that mapped to within a fixed interval of a probed region, but not on a baited region. */
+ public long NEAR_PROBE_BASES;
+
+ /** The number of PF aligned bases that mapped to neither on or near a probe. */
+ public long OFF_PROBE_BASES;
+
+ /** The number of PF aligned bases that mapped to a targeted region of the genome. */
+ public long ON_TARGET_BASES;
+
+ /** The number of PF aligned bases that are mapped in pair to a targeted region of the genome. */
+ public long ON_TARGET_FROM_PAIR_BASES;
+
+ //metrics below here are derived after collection
+
+ /** PF reads / total reads. The percent of reads passing filter. */
+ public double PCT_PF_READS;
+
+ /** PF Unique Reads / Total Reads. */
+ public double PCT_PF_UQ_READS;
+
+ /** PF Reads Aligned / PF Reads. */
+ public double PCT_PF_UQ_READS_ALIGNED;
+
+ /** On+Near Bait Bases / PF Bases Aligned. */
+ public double PCT_SELECTED_BASES;
+
+ /** The percentage of aligned PF bases that mapped neither on or near a probe. */
+ public double PCT_OFF_PROBE;
+
+ /** The percentage of on+near probe bases that are on as opposed to near. */
+ public double ON_PROBE_VS_SELECTED;
+
+ /** The mean coverage of all probes in the experiment. */
+ public double MEAN_PROBE_COVERAGE;
+
+ /** The fold by which the probed region has been amplified above genomic background. */
+ public double FOLD_ENRICHMENT;
+
+ /** The mean coverage of targets that recieved at least coverage depth = 2 at one base. */
+ public double MEAN_TARGET_COVERAGE;
+
+ /** The number of targets that did not reach coverage=2 over any base. */
+ public double ZERO_CVG_TARGETS_PCT;
+
+ /**
+ * The fold over-coverage necessary to raise 80% of bases in "non-zero-cvg" targets to
+ * the mean coverage level in those targets.
+ */
+ public double FOLD_80_BASE_PENALTY;
+
+ /** The percentage of ALL target bases acheiving 2X or greater coverage. */
+ public double PCT_TARGET_BASES_2X;
+ /** The percentage of ALL target bases acheiving 10X or greater coverage. */
+ public double PCT_TARGET_BASES_10X;
+ /** The percentage of ALL target bases acheiving 20X or greater coverage. */
+ public double PCT_TARGET_BASES_20X;
+ /** The percentage of ALL target bases acheiving 30X or greater coverage. */
+ public double PCT_TARGET_BASES_30X;
+ /** The percentage of ALL target bases acheiving 40X or greater coverage. */
+ public double PCT_TARGET_BASES_40X;
+ /** The percentage of ALL target bases acheiving 50X or greater coverage. */
+ public double PCT_TARGET_BASES_50X;
+ /** The percentage of ALL target bases acheiving 100X or greater coverage. */
+ public double PCT_TARGET_BASES_100X;
+
+ /**
+ * A measure of how undercovered <= 50% GC regions are relative to the mean. For each GC bin [0..50]
+ * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
+ * AT DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
+ * reads that should have mapped to GC<=50% regions mapped elsewhere.
+ */
+ public double AT_DROPOUT;
+
+ /**
+ * A measure of how undercovered >= 50% GC regions are relative to the mean. For each GC bin [50..100]
+ * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
+ * GC DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
+ * reads that should have mapped to GC>=50% regions mapped elsewhere.
+ */
+ public double GC_DROPOUT;
+}
diff --git a/src/java/picard/analysis/directed/TargetedPcrMetrics.java b/src/java/picard/analysis/directed/TargetedPcrMetrics.java
new file mode 100644
index 0000000..63971ea
--- /dev/null
+++ b/src/java/picard/analysis/directed/TargetedPcrMetrics.java
@@ -0,0 +1,119 @@
+package picard.analysis.directed;
+
+import picard.metrics.MultilevelMetrics;
+
+/** Metrics class for targeted pcr runs such as TSCA runs */
+public class TargetedPcrMetrics extends MultilevelMetrics {
+
+ /** The name of the amplicon set used in this metrics collection run */
+ public String CUSTOM_AMPLICON_SET;
+
+ /** The number of bases in the reference genome used for alignment. */
+ public long GENOME_SIZE;
+
+ /** The number of unique bases covered by the intervals of all amplicons in the amplicon set */
+ public long AMPLICON_TERRITORY;
+
+ /** The number of unique bases covered by the intervals of all targets that should be covered */
+ public long TARGET_TERRITORY;
+
+ /** The total number of reads in the SAM or BAM file examine. */
+ public long TOTAL_READS;
+
+ /** The number of reads that pass the vendor's filter. */
+ public long PF_READS;
+
+ /** THe number of bases in the SAM or BAM file to be examined */
+ public long PF_BASES;
+
+ /** The number of PF reads that are not marked as duplicates. */
+ public long PF_UNIQUE_READS;
+
+ /** PF reads / total reads. The percent of reads passing filter. */
+ public double PCT_PF_READS;
+
+ /** PF Unique Reads / Total Reads. */
+ public double PCT_PF_UQ_READS;
+
+ /** The number of PF unique reads that are aligned with mapping score > 0 to the reference genome. */
+ public long PF_UQ_READS_ALIGNED;
+
+ /** Tracks the number of read pairs that we see that are PF (used to calculate library size) */
+ public long PF_SELECTED_PAIRS;
+
+ /** Tracks the number of unique PF reads pairs we see (used to calc library size) */
+ public long PF_SELECTED_UNIQUE_PAIRS;
+
+ /** PF Reads Aligned / PF Reads. */
+ public double PCT_PF_UQ_READS_ALIGNED;
+
+ /** The number of PF unique bases that are aligned with mapping score > 0 to the reference genome. */
+ public long PF_UQ_BASES_ALIGNED;
+
+ /** The number of PF aligned amplified that mapped to an amplified region of the genome. */
+ public long ON_AMPLICON_BASES;
+
+ /** The number of PF aligned bases that mapped to within a fixed interval of an amplified region, but not on a baited region. */
+ public long NEAR_AMPLICON_BASES;
+
+ /** The number of PF aligned bases that mapped to neither on or near an amplicon. */
+ public long OFF_AMPLICON_BASES;
+
+ /** The number of PF aligned bases that mapped to a targeted region of the genome. */
+ public long ON_TARGET_BASES;
+
+ /** The number of PF aligned bases that are mapped in pair to a targeted region of the genome. */
+ public long ON_TARGET_FROM_PAIR_BASES;
+
+ /** On+Near Amplicon Bases / PF Bases Aligned. */
+ public double PCT_AMPLIFIED_BASES;
+
+ /** The percentage of aligned PF bases that mapped neither on or near an amplicon. */
+ public double PCT_OFF_AMPLICON;
+
+ /** The percentage of on+near amplicon bases that are on as opposed to near. */
+ public double ON_AMPLICON_VS_SELECTED;
+
+ /** The mean coverage of all amplicons in the experiment. */
+ public double MEAN_AMPLICON_COVERAGE;
+
+ /** The mean coverage of targets that recieved at least coverage depth = 2 at one base. */
+ public double MEAN_TARGET_COVERAGE;
+
+ /** The fold by which the amplicon region has been amplified above genomic background. */
+ public double FOLD_ENRICHMENT;
+
+ /** The number of targets that did not reach coverage=2 over any base. */
+ public double ZERO_CVG_TARGETS_PCT;
+
+ /**
+ * The fold over-coverage necessary to raise 80% of bases in "non-zero-cvg" targets to
+ * the mean coverage level in those targets.
+ */
+ public double FOLD_80_BASE_PENALTY;
+
+ /** The percentage of ALL target bases achieving 2X or greater coverage. */
+ public double PCT_TARGET_BASES_2X;
+ /** The percentage of ALL target bases achieving 10X or greater coverage. */
+ public double PCT_TARGET_BASES_10X;
+ /** The percentage of ALL target bases achieving 20X or greater coverage. */
+ public double PCT_TARGET_BASES_20X;
+ /** The percentage of ALL target bases achieving 30X or greater coverage. */
+ public double PCT_TARGET_BASES_30X;
+
+ /**
+ * A measure of how undercovered <= 50% GC regions are relative to the mean. For each GC bin [0..50]
+ * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
+ * AT DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
+ * reads that should have mapped to GC<=50% regions mapped elsewhere.
+ */
+ public double AT_DROPOUT;
+
+ /**
+ * A measure of how undercovered >= 50% GC regions are relative to the mean. For each GC bin [50..100]
+ * we calculate a = % of target territory, and b = % of aligned reads aligned to these targets.
+ * GC DROPOUT is then abs(sum(a-b when a-b < 0)). E.g. if the value is 5% this implies that 5% of total
+ * reads that should have mapped to GC>=50% regions mapped elsewhere.
+ */
+ public double GC_DROPOUT;
+}
diff --git a/src/java/picard/analysis/directed/TargetedPcrMetricsCollector.java b/src/java/picard/analysis/directed/TargetedPcrMetricsCollector.java
new file mode 100644
index 0000000..81f5c99
--- /dev/null
+++ b/src/java/picard/analysis/directed/TargetedPcrMetricsCollector.java
@@ -0,0 +1,60 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis.directed;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.util.IntervalList;
+import picard.analysis.MetricAccumulationLevel;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Calculates HS metrics for a given SAM or BAM file. Requires the input of a list of
+ * target intervals and a list of bait intervals. Can be invoked either on an entire
+ * iterator of SAMRecords or be passed SAMRecords one at a time.
+ *
+ * @author Jonathan Burke
+ */
+public class TargetedPcrMetricsCollector extends TargetMetricsCollector<TargetedPcrMetrics> {
+ //maybe instead just inject this into the TargetedMetricCollector ->
+
+ public TargetedPcrMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords, final ReferenceSequenceFile refFile, final File perTargetCoverage, final IntervalList targetIntervals, final IntervalList probeIntervals, final String probeSetName) {
+ super(accumulationLevels, samRgRecords, refFile, perTargetCoverage, targetIntervals, probeIntervals, probeSetName);
+ }
+
+ @Override
+ public TargetedPcrMetrics convertMetric(TargetMetrics targetMetrics) {
+ final TargetedPcrMetrics pcrMetrics = new TargetedPcrMetrics();
+ TargetMetricsCollector.reflectiveCopy(targetMetrics, pcrMetrics,
+ new String[]{"PROBE_SET", "PROBE_TERRITORY", "ON_PROBE_BASES", "NEAR_PROBE_BASES", "OFF_PROBE_BASES", "PCT_SELECTED_BASES", "PCT_OFF_PROBE", "ON_PROBE_VS_SELECTED", "MEAN_PROBE_COVERAGE"},
+ new String[]{"CUSTOM_AMPLICON_SET", "AMPLICON_TERRITORY", "ON_AMPLICON_BASES", "NEAR_AMPLICON_BASES", "OFF_AMPLICON_BASES", "PCT_AMPLIFIED_BASES", "PCT_OFF_AMPLICON", "ON_AMPLICON_VS_SELECTED", "MEAN_AMPLICON_COVERAGE"}
+ );
+
+ return pcrMetrics;
+ }
+}
diff --git a/src/java/picard/annotation/AnnotationException.java b/src/java/picard/annotation/AnnotationException.java
new file mode 100644
index 0000000..bf6bdfa
--- /dev/null
+++ b/src/java/picard/annotation/AnnotationException.java
@@ -0,0 +1,40 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.annotation;
+
+import picard.PicardException;
+
+/**
+ * Exception thrown when loading gene annotations. It is expected that there will be inconsistencies in annotation
+ * files, such that these exceptions may be reported but not cause program termination.
+ */
+public class AnnotationException extends PicardException{
+ public AnnotationException(String message) {
+ super(message);
+ }
+
+ public AnnotationException(String message, Throwable throwable) {
+ super(message, throwable);
+ }
+}
diff --git a/src/java/picard/annotation/Gene.java b/src/java/picard/annotation/Gene.java
new file mode 100644
index 0000000..5a2ebb6
--- /dev/null
+++ b/src/java/picard/annotation/Gene.java
@@ -0,0 +1,238 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.annotation;
+
+import htsjdk.samtools.util.CoordMath;
+import htsjdk.samtools.util.Interval;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Holds annotation of a gene for storage in an OverlapDetector. May hold multiple transcripts for the same gene.
+ * The transcripts must all be relative to the same strand.
+ */
+public class Gene extends Interval implements Iterable<Gene.Transcript> {
+ private final Map<String, Transcript> transcripts = new HashMap<String, Transcript>();
+
+
+ public Gene(final String sequence, final int start, final int end, final boolean negative, final String name) {
+ super(sequence, start, end, negative, name);
+ }
+
+ public Transcript addTranscript(final String name, final int transcriptionStart, final int transcriptionEnd, final int codingStart, final int codingEnd, final int numExons) {
+ if (transcripts.containsKey(name)) {
+ throw new AnnotationException("Transcript " + name + " for gene " + this.getName() + " appears more than once");
+ }
+ else {
+ final Transcript tx = new Transcript(name, transcriptionStart, transcriptionEnd, codingStart, codingEnd, numExons);
+ transcripts.put(name, tx);
+ return tx;
+ }
+ }
+
+ public Iterator<Transcript> iterator() {
+ return transcripts.values().iterator();
+ }
+
+ public int compareTo(final Gene that) {
+ final int ret = super.compareTo(that);
+ if (ret != 0) return ret;
+ return Boolean.valueOf(this.isPositiveStrand()).compareTo(that.isPositiveStrand());
+ }
+
+ public boolean equals(final Object other) {
+ if (!(other instanceof Gene)) return false;
+ else if (this == other) return true;
+ else {
+ final Gene that = (Gene)other;
+ return (this.compareTo(that) == 0);
+ }
+ }
+
+
+
+ /**
+ * A single transcript of a gene. Sequence name is stored in the enclosing object (class Gene).
+ */
+ public class Transcript {
+ public final String name;
+ public final int transcriptionStart;
+ public final int transcriptionEnd;
+ public final int codingStart;
+ public final int codingEnd;
+ public final Exon[] exons;
+ private int length; // the number of bases in the transcript
+
+ /**
+ * 1-based, inclusive representation of an exon. The sequence name is stored in an enclosing object (class Gene).
+ */
+ public class Exon {
+ public final int start;
+ public final int end;
+
+ public Exon(final int start, final int end) {
+ this.start = start;
+ this.end = end;
+ }
+ }
+
+ public Transcript(final String name, final int transcriptionStart, final int transcriptionEnd, final int codingStart, final int codingEnd, final int numExons) {
+ this.name = name;
+ this.transcriptionStart = transcriptionStart;
+ this.transcriptionEnd = transcriptionEnd;
+ this.codingStart = codingStart;
+ this.codingEnd = codingEnd;
+ this.exons = new Exon[numExons];
+ }
+
+ public Exon addExon(final int start, final int end) {
+ for (int i=0; i<this.exons.length; ++i) {
+ if (exons[i] == null) {
+ exons[i] = new Exon(start, end);
+ this.length += CoordMath.getLength(start, end);
+ return exons[i];
+ }
+ }
+
+ throw new IllegalStateException("Attempting to add more exons that exist for transcript.");
+ }
+
+ public int start() {
+ return exons[0].start;
+ }
+
+ public int end() {
+ return exons[exons.length -1].end;
+ }
+
+ public int length() {
+ return this.length;
+ }
+
+ public boolean isSoloTranscript() {
+ return Gene.this.transcripts.size() == 1;
+ }
+
+ public Gene getGene() {
+ return Gene.this;
+ }
+
+ /**
+ * Write into locusFunctions the function of each position from start to start + locusFunctions.length
+ * relative to this transcript. Does not overwrite an existing value in locusFunctions that is stronger
+ * than the function for that locus in this transcript.
+ * @param start 1-based genomic coordinate of the first position in locusFunctions.
+ * @param locusFunctions
+ */
+ public void assignLocusFunctionForRange(final int start, final LocusFunction[] locusFunctions) {
+ for (int i = Math.max(start, transcriptionStart);
+ i <= Math.min(transcriptionEnd, CoordMath.getEnd(start, locusFunctions.length)); ++i) {
+
+ if (locusFunctions[i - start].ordinal() > LocusFunction.CODING.ordinal()) continue;
+
+ final LocusFunction locusFunction;
+ if (inExon(i)) {
+ if (utr(i)) locusFunction = LocusFunction.UTR;
+ else locusFunction = LocusFunction.CODING;
+ } else locusFunction = LocusFunction.INTRONIC;
+ if (locusFunction.ordinal() > locusFunctions[i - start].ordinal()) {
+ locusFunctions[i - start] = locusFunction;
+ }
+ }
+ }
+
+ /**
+ *
+ * @param genomeStart
+ * @param genomeEnd
+ * @param coverage
+ */
+ public void addCoverageCounts(final int genomeStart, final int genomeEnd, final int[] coverage) {
+ for (int i=genomeStart; i<genomeEnd; ++i) {
+ final int txBase = getTranscriptCoordinate(i);
+ if (txBase > 0) coverage[txBase-1]++;
+ }
+ }
+
+ /** Given a coordinate on the genome (same chromosome) give the corresponding coordinate in the transcript. */
+ public int getTranscriptCoordinate(final int genomeCoordinate) {
+ int exonOffset = 0;
+ for (final Exon e : exons) {
+ if (genomeCoordinate >= e.start && genomeCoordinate <=e.end) {
+ return (genomeCoordinate - e.start + 1) + exonOffset;
+ }
+ else {
+ exonOffset += CoordMath.getLength(e.start, e.end);
+ }
+ }
+
+ return -1;
+ }
+
+ private boolean utr(final int locus) {
+ return locus < codingStart || locus > codingEnd;
+ }
+
+ private boolean inExon(final int locus) {
+ for (int i = 0; i < exons.length; ++i) {
+ final Exon exon = exons[i];
+ if (exon.start > locus) return false;
+ if (inRange(exon.start, exon.end, locus)) return true;
+ }
+ return false;
+ }
+
+ private boolean inRange(final int start, final int end, final int locus) {
+ return (locus >= start && locus <= end);
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final Transcript that = (Transcript) o;
+
+ if (codingEnd != that.codingEnd) return false;
+ if (codingStart != that.codingStart) return false;
+ if (transcriptionEnd != that.transcriptionEnd) return false;
+ if (transcriptionStart != that.transcriptionStart) return false;
+ if (!name.equals(that.name)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = name.hashCode();
+ result = 31 * result + transcriptionStart;
+ result = 31 * result + transcriptionEnd;
+ result = 31 * result + codingStart;
+ result = 31 * result + codingEnd;
+ return result;
+ }
+ }
+}
diff --git a/src/java/picard/annotation/GeneAnnotationReader.java b/src/java/picard/annotation/GeneAnnotationReader.java
new file mode 100644
index 0000000..e4a37a6
--- /dev/null
+++ b/src/java/picard/annotation/GeneAnnotationReader.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.annotation;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.OverlapDetector;
+
+import java.io.File;
+
+/**
+ * Load gene annotations into an OverlapDetector of Gene objects.
+ * Currently only refFlat format is accepted.
+ */
+public class GeneAnnotationReader {
+ public static OverlapDetector<Gene> loadRefFlat(File refFlatFile, SAMSequenceDictionary sequenceDictionary) {
+ return RefFlatReader.load(refFlatFile, sequenceDictionary);
+ }
+}
diff --git a/src/java/picard/annotation/LocusFunction.java b/src/java/picard/annotation/LocusFunction.java
new file mode 100644
index 0000000..280e724
--- /dev/null
+++ b/src/java/picard/annotation/LocusFunction.java
@@ -0,0 +1,33 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.annotation;
+
+/**
+ * Describes the behavior of a locus relative to a gene. Note that these are enumerated in a specific order:
+ * (INTERGENIC, INTRONIC, UTR, CODING, RIBOSOMAL) so that e.g. if a locus is CODING in one gene and UTR in another,
+ * we count it as CODING.
+ */
+public enum LocusFunction {
+ INTERGENIC, INTRONIC, UTR, CODING, RIBOSOMAL
+}
diff --git a/src/java/picard/annotation/RefFlatReader.java b/src/java/picard/annotation/RefFlatReader.java
new file mode 100644
index 0000000..fa21a04
--- /dev/null
+++ b/src/java/picard/annotation/RefFlatReader.java
@@ -0,0 +1,191 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.annotation;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.OverlapDetector;
+import picard.annotation.Gene.Transcript;
+import picard.annotation.Gene.Transcript.Exon;
+import picard.util.TabbedTextFileWithHeaderParser;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Loads gene annotations from a refFlat file into an OverlapDetector<Gene>. Discards annotations that are not
+ * internally consistent, e.g. transcripts on different chromosomes or different strands.
+ */
+public class RefFlatReader {
+ private static final Log LOG = Log.getInstance(RefFlatReader.class);
+ // These are in the order that columns appear in refFlat format.
+ public enum RefFlatColumns{GENE_NAME, TRANSCRIPT_NAME, CHROMOSOME, STRAND, TX_START, TX_END, CDS_START, CDS_END,
+ EXON_COUNT, EXON_STARTS, EXON_ENDS}
+
+ private static final String[] RefFlatColumnLabels = new String[RefFlatColumns.values().length];
+
+ static {
+ for (int i = 0; i < RefFlatColumnLabels.length; ++i) {
+ RefFlatColumnLabels[i] = RefFlatColumns.values()[i].name();
+ }
+ }
+
+ private final File refFlatFile;
+ private final SAMSequenceDictionary sequenceDictionary;
+
+ RefFlatReader(final File refFlatFile, final SAMSequenceDictionary sequenceDictionary) {
+ this.refFlatFile = refFlatFile;
+ this.sequenceDictionary = sequenceDictionary;
+ }
+
+ static OverlapDetector<Gene> load(final File refFlatFile, final SAMSequenceDictionary sequenceDictionary) {
+ return new RefFlatReader(refFlatFile, sequenceDictionary).load();
+ }
+
+ OverlapDetector<Gene> load() {
+ final OverlapDetector<Gene> overlapDetector = new OverlapDetector<Gene>(0, 0);
+
+ final int expectedColumns = RefFlatColumns.values().length;
+ final TabbedTextFileWithHeaderParser parser = new TabbedTextFileWithHeaderParser(refFlatFile, RefFlatColumnLabels);
+ final Map<String, List<TabbedTextFileWithHeaderParser.Row>> refFlatLinesByGene =
+ new HashMap<String, List<TabbedTextFileWithHeaderParser.Row>>();
+
+ for (final TabbedTextFileWithHeaderParser.Row row : parser) {
+ final int lineNumber = parser.getCurrentLineNumber(); // getCurrentLineNumber returns the number of the next line
+ if (row.getFields().length != expectedColumns) {
+ throw new AnnotationException("Wrong number of fields in refFlat file " + refFlatFile + " at line " +
+ lineNumber);
+ }
+ final String geneName = row.getField(RefFlatColumns.GENE_NAME.name());
+ final String transcriptName = row.getField(RefFlatColumns.TRANSCRIPT_NAME.name());
+ final String transcriptDescription = geneName + ":" + transcriptName;
+ final String chromosome = row.getField(RefFlatColumns.CHROMOSOME.name());
+ if (!isSequenceRecognized(chromosome)) {
+ LOG.debug("Skipping " + transcriptDescription + " due to unrecognized sequence " + chromosome);
+ } else {
+ List<TabbedTextFileWithHeaderParser.Row> transcriptLines = refFlatLinesByGene.get(geneName);
+ if (transcriptLines == null) {
+ transcriptLines = new ArrayList<TabbedTextFileWithHeaderParser.Row>();
+ refFlatLinesByGene.put(geneName, transcriptLines);
+ }
+ transcriptLines.add(row);
+ }
+ }
+
+ int longestInterval = 0;
+ int numIntervalsOver1MB = 0;
+
+ for (final List<TabbedTextFileWithHeaderParser.Row> transcriptLines : refFlatLinesByGene.values()) {
+ try {
+ final Gene gene = makeGeneFromRefFlatLines(transcriptLines);
+ overlapDetector.addLhs(gene, gene);
+ if (gene.length() > longestInterval) longestInterval = gene.length();
+ if (gene.length() > 1000000) ++numIntervalsOver1MB;
+ } catch (AnnotationException e) {
+ LOG.debug(e.getMessage() + " -- skipping");
+ }
+ }
+ LOG.debug("Longest gene: " + longestInterval + "; number of genes > 1MB: " + numIntervalsOver1MB);
+ return overlapDetector;
+ }
+
+ private boolean isSequenceRecognized(final String sequence) {
+ return (sequenceDictionary.getSequence(sequence) != null);
+ }
+
+
+ private Gene makeGeneFromRefFlatLines(final List<TabbedTextFileWithHeaderParser.Row> transcriptLines) {
+ final String geneName = transcriptLines.get(0).getField(RefFlatColumns.GENE_NAME.name());
+ final String strandStr = transcriptLines.get(0).getField(RefFlatColumns.STRAND.name());
+ final boolean negative = strandStr.equals("-");
+ final String chromosome = transcriptLines.get(0).getField(RefFlatColumns.CHROMOSOME.name());
+
+ // Figure out the extend of the gene
+ int start = Integer.MAX_VALUE;
+ int end = Integer.MIN_VALUE;
+ for (final TabbedTextFileWithHeaderParser.Row row: transcriptLines) {
+ start = Math.min(start, row.getIntegerField(RefFlatColumns.TX_START.name()) + 1);
+ end = Math.max(end, row.getIntegerField(RefFlatColumns.TX_END.name()));
+ }
+
+ final Gene gene = new Gene(chromosome, start, end, negative, geneName);
+
+ for (final TabbedTextFileWithHeaderParser.Row row: transcriptLines) {
+ if (!strandStr.equals(row.getField(RefFlatColumns.STRAND.name()))) {
+ throw new AnnotationException("Strand disagreement in refFlat file for gene " + geneName);
+ }
+ if (!chromosome.equals(row.getField(RefFlatColumns.CHROMOSOME.name()))) {
+ throw new AnnotationException("Chromosome disagreement(" + chromosome + " != " + row.getField(RefFlatColumns.CHROMOSOME.name()) +
+ ") in refFlat file for gene " + geneName);
+ }
+
+ // This adds it to the Gene also
+ final Transcript tx = makeTranscriptFromRefFlatLine(gene, row);
+ }
+
+ return gene;
+ }
+
+ /**
+ * Conversion from 0-based half-open to 1-based inclusive intervals is done here.
+ */
+ private Gene.Transcript makeTranscriptFromRefFlatLine(final Gene gene, final TabbedTextFileWithHeaderParser.Row row) {
+ final String geneName = row.getField(RefFlatColumns.GENE_NAME.name());
+ final String transcriptName = row.getField(RefFlatColumns.TRANSCRIPT_NAME.name());
+ final String transcriptDescription = geneName + ":" + transcriptName;
+ final int exonCount = Integer.parseInt(row.getField(RefFlatColumns.EXON_COUNT.name()));
+ final String[] exonStarts = row.getField(RefFlatColumns.EXON_STARTS.name()).split(",");
+ final String[] exonEnds = row.getField(RefFlatColumns.EXON_ENDS.name()).split(",");
+
+ if (exonCount != exonStarts.length) {
+ throw new AnnotationException("Number of exon starts does not agree with number of exons for " + transcriptDescription);
+ }
+ if (exonCount != exonEnds.length) {
+ throw new AnnotationException("Number of exon ends does not agree with number of exons for " + transcriptDescription);
+ }
+
+ final int transcriptionStart = row.getIntegerField(RefFlatColumns.TX_START.name()) + 1;
+ final int transcriptionEnd = row.getIntegerField(RefFlatColumns.TX_END.name());
+ final int codingStart = row.getIntegerField(RefFlatColumns.CDS_START.name()) + 1;
+ final int codingEnd = row.getIntegerField(RefFlatColumns.CDS_END.name());
+
+ final Transcript tx = gene.addTranscript(transcriptName, transcriptionStart, transcriptionEnd, codingStart, codingEnd, exonCount);
+
+ for (int i = 0; i < exonCount; ++i) {
+ final Exon e = tx.addExon(Integer.parseInt(exonStarts[i]) + 1, Integer.parseInt(exonEnds[i]));
+
+ if (e.start > e.end) {
+ throw new AnnotationException("Exon has 0 or negative extent for " + transcriptDescription);
+ }
+ if (i > 0 && tx.exons[i-1].end >= tx.exons[i].start) {
+ throw new AnnotationException("Exons overlap for " + transcriptDescription);
+ }
+ }
+
+ return tx;
+ }
+}
diff --git a/src/java/picard/cmdline/ClassFinder.java b/src/java/picard/cmdline/ClassFinder.java
new file mode 100644
index 0000000..81bd2cb
--- /dev/null
+++ b/src/java/picard/cmdline/ClassFinder.java
@@ -0,0 +1,183 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+
+import htsjdk.samtools.util.Log;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.net.URLDecoder;
+import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * Utility class that can scan for classes in the classpath and find all the ones
+ * annotated with a particular annotation.
+ *
+ * @author Tim Fennell
+ */
+public class ClassFinder {
+ private final Set<Class<?>> classes = new HashSet<Class<?>>();
+ private final ClassLoader loader;
+ private Class<?> parentType;
+ // If not null, only look for classes in this jar
+ private String jarPath = null;
+
+ private static final Log log = Log.getInstance(ClassFinder.class);
+
+ public ClassFinder() {
+ loader = Thread.currentThread().getContextClassLoader();
+ }
+
+ public ClassFinder(final ClassLoader loader) {
+ this.loader = loader;
+ }
+
+ public ClassFinder(final File jarFile) throws IOException {
+ // The class loader must have the context in order to load dependent classes when loading a class,
+ // but the jarPath is remembered so that the iteration over the classpath skips anything other than
+ // the jarPath.
+ jarPath = jarFile.getCanonicalPath();
+ final URL[] urls = {new URL("file", "", jarPath)};
+ loader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
+ }
+
+ /** Convert a filename to a class name by removing '.class' and converting '/'s to '.'s. */
+ public String toClassName(final String filename) {
+ return filename.substring(0, filename.lastIndexOf(".class"))
+ .replace('/', '.').replace('\\', '.');
+ }
+
+ /**
+ * Scans the classpath for classes within the specified package and sub-packages that
+ * extend the parentType. This method can be called repeatedly
+ * with different packages. Classes are accumulated internally and
+ * can be accessed by calling {@link #getClasses()}.
+ */
+ public void find(String packageName, final Class<?> parentType) {
+ this.parentType = parentType;
+ packageName = packageName.replace('.', '/');
+ final Enumeration<URL> urls;
+
+ try {
+ urls = loader.getResources(packageName);
+ }
+ catch (IOException ioe) {
+ log.warn("Could not read package: " + packageName, ioe);
+ return;
+ }
+
+ while (urls.hasMoreElements()) {
+ try {
+ String urlPath = urls.nextElement().getFile();
+ urlPath = URLDecoder.decode(urlPath, "UTF-8");
+ if ( urlPath.startsWith("file:") ) {
+ urlPath = urlPath.substring(5);
+ }
+ if (urlPath.indexOf('!') > 0) {
+ urlPath = urlPath.substring(0, urlPath.indexOf('!'));
+ }
+ if (jarPath != null && !jarPath.equals(urlPath)) {
+ continue;
+ }
+
+ //Log.info("Looking for classes in location: " + urlPath);
+ final File file = new File(urlPath);
+ if ( file.isDirectory() ) {
+ scanDir(file, packageName);
+ }
+ else {
+ scanJar(file, packageName);
+ }
+ }
+ catch (IOException ioe) {
+ log.warn("could not read entries", ioe);
+ }
+ }
+ }
+
+ /**
+ * Scans the entries in a ZIP/JAR file for classes under the parent package.
+ * @param file the jar file to be scanned
+ * @param packagePath the top level package to start from
+ */
+ protected void scanJar(final File file, final String packagePath) throws IOException {
+ final ZipFile zip = new ZipFile(file);
+ final Enumeration<? extends ZipEntry> entries = zip.entries();
+ while ( entries.hasMoreElements() ) {
+ final ZipEntry entry = entries.nextElement();
+ final String name = entry.getName();
+ if (name.startsWith(packagePath)) {
+ handleItem(name);
+ }
+ }
+ }
+
+ /**
+ * Scans a directory on the filesystem for classes.
+ * @param file the directory or file to examine
+ * @param path the package path acculmulated so far (e.g. edu/mit/broad)
+ */
+ protected void scanDir(final File file, final String path) {
+ for ( final File child: file.listFiles() ) {
+ final String newPath = (path==null ? child.getName() : path + '/' + child.getName() );
+ if ( child.isDirectory() ) {
+ scanDir(child, newPath);
+ }
+ else {
+ handleItem(newPath);
+ }
+ }
+ }
+
+ /**
+ * Checks an item to see if it is a class and is annotated with the specified
+ * annotation. If so, adds it to the set, otherwise ignores it.
+ * @param name the path equivelant to the package + class/item name
+ */
+ protected void handleItem(final String name) {
+ if (name.endsWith(".class")) {
+ final String classname = toClassName(name);
+
+ try {
+ final Class<?> type = loader.loadClass(classname);
+ if (parentType.isAssignableFrom(type)) {
+ this.classes.add(type);
+ }
+ }
+ catch (Throwable t) {
+ log.debug("could not load class: " + classname, t);
+ }
+ }
+ }
+
+ /** Fetches the set of classes discovered so far. */
+ public Set<Class<?>> getClasses() {
+ return this.classes;
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/cmdline/CommandLineDefaults.java b/src/java/picard/cmdline/CommandLineDefaults.java
new file mode 100644
index 0000000..f9ebe79
--- /dev/null
+++ b/src/java/picard/cmdline/CommandLineDefaults.java
@@ -0,0 +1,48 @@
+package picard.cmdline;
+
+import java.io.File;
+
+/**
+ * Embodies defaults for global values that affect how the Picard Command Line operates. Defaults are encoded in the class
+ * and are also overridable using system properties.
+ *
+ * @author Nils Homer
+ */
+public class CommandLineDefaults {
+
+ /** Implementation note, this is duplicate code stolen from HTSJDK's Default.java
+
+ /**
+ * Decides if we want to write colors to the terminal.
+ */
+ public static final boolean COLOR_STATUS;
+
+ static {
+ COLOR_STATUS = getBooleanProperty("color_status", true);
+ }
+
+ /** Gets a string system property, prefixed with "picard.cmdline." using the default if the property does not exist. */
+ private static String getStringProperty(final String name, final String def) {
+ return System.getProperty("picard.cmdline." + name, def);
+ }
+
+ /** Gets a boolean system property, prefixed with "picard.cmdline." using the default if the property does not exist. */
+ private static boolean getBooleanProperty(final String name, final boolean def) {
+ final String value = getStringProperty(name, new Boolean(def).toString());
+ return Boolean.parseBoolean(value);
+ }
+
+ /** Gets an int system property, prefixed with "picard.cmdline." using the default if the property does not exist. */
+ private static int getIntProperty(final String name, final int def) {
+ final String value = getStringProperty(name, new Integer(def).toString());
+ return Integer.parseInt(value);
+ }
+
+ /** Gets a File system property, prefixed with "picard.cmdline." using the default if the property does not exist. */
+ private static File getFileProperty(final String name, final String def) {
+ final String value = getStringProperty(name, def);
+ // TODO: assert that it is readable
+ return (null == value) ? null : new File(value);
+ }
+}
+
diff --git a/src/java/picard/cmdline/CommandLineParseException.java b/src/java/picard/cmdline/CommandLineParseException.java
new file mode 100644
index 0000000..c9e9758
--- /dev/null
+++ b/src/java/picard/cmdline/CommandLineParseException.java
@@ -0,0 +1,36 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import picard.PicardException;
+
+public class CommandLineParseException extends PicardException {
+ public CommandLineParseException(final String s) {
+ super(s);
+ }
+
+ public CommandLineParseException(final String s, final Throwable throwable) {
+ super(s, throwable);
+ }
+}
diff --git a/src/java/picard/cmdline/CommandLineParser.java b/src/java/picard/cmdline/CommandLineParser.java
new file mode 100644
index 0000000..3c70bcc
--- /dev/null
+++ b/src/java/picard/cmdline/CommandLineParser.java
@@ -0,0 +1,1257 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CollectionUtil.MultiMap;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Annotation-driven utility for parsing command-line arguments, checking for errors, and producing usage message.
+ * <p/>
+ * This class supports options of the form KEY=VALUE, plus positional arguments. Positional arguments must not contain
+ * an equal sign lest they be mistaken for a KEY=VALUE pair.
+ * <p/>
+ * The caller must supply an object that both defines the command line and has the parsed options set into it.
+ * For each possible KEY=VALUE option, there must be a public data member annotated with @Option. The KEY name is
+ * the name of the data member. An abbreviated name may also be specified with the shortName attribute of @Option.
+ * If the data member is a List<T>, then the option may be specified multiple times. The type of the data member,
+ * or the type of the List element must either have a ctor T(String), or must be an Enum. List options must
+ * be initialized by the caller with some kind of list. Any other option that is non-null is assumed to have the given
+ * value as a default. If an option has no default value, and does not have the optional attribute of @Option set,
+ * is required. For List options, minimum and maximum number of elements may be specified in the @Option annotation.
+ * <p/>
+ * A single List data member may be annotated with the @PositionalArguments. This behaves similarly to a Option
+ * with List data member: the caller must initialize the data member, the type must be constructable from String, and
+ * min and max number of elements may be specified. If no @PositionalArguments annotation appears in the object,
+ * then it is an error for the command line to contain positional arguments.
+ * <p/>
+ * A single String public data member may be annotated with @Usage. This string, if present, is used to
+ * construct the usage message. Details about the possible options are automatically appended to this string.
+ * If @Usage does not appear, a boilerplate usage message is used.
+ */
+public class CommandLineParser {
+ // For formatting option section of usage message.
+ private static final int OPTION_COLUMN_WIDTH = 30;
+ private static final int DESCRIPTION_COLUMN_WIDTH = 90;
+
+ private static final Boolean[] TRUE_FALSE_VALUES = {Boolean.TRUE, Boolean.FALSE};
+
+ private static final String[] PACKAGES_WITH_WEB_DOCUMENTATION = {"picard"};
+
+ // Use these if no @Usage annotation
+ private static final String defaultUsagePreamble = "Usage: program [options...]\n";
+ private static final String defaultUsagePreambleWithPositionalArguments =
+ "Usage: program [options...] [positional-arguments...]\n";
+ private static final String OPTIONS_FILE = "OPTIONS_FILE";
+
+ private static final String PRECEDENCE_SYMBOL = "++";
+
+ /** name, shortName, description for options built in to framework */
+ private static final String[][] FRAMEWORK_OPTION_DOC = {
+ {"--help", "-h", "Displays options specific to this tool."},
+ {"--stdhelp", "-H", "Displays options specific to this tool AND " +
+ "options common to all Picard command line tools."},
+ {"--version", null, "Displays program version."}
+ };
+
+ private final Set<String> optionsThatCannotBeOverridden = new HashSet<String>();
+
+ /**
+ * A typical command line program will call this to get the beginning of the usage message,
+ * and then append a description of the program, like this:
+ * <p/>
+ * \@Usage
+ * public String USAGE = CommandLineParser.getStandardUsagePreamble(getClass()) + "Frobnicates the freebozzle."
+ */
+ public static String getStandardUsagePreamble(final Class mainClass) {
+ return "USAGE: " + mainClass.getSimpleName() + " [options]\n\n" +
+ (hasWebDocumentation(mainClass) ?
+ "Documentation: http://broadinstitute.github.io/picard/command-line-overview.html#" +
+ mainClass.getSimpleName() + "\n\n"
+ : "");
+ }
+
+ /**
+ * Determines if a class has web documentation based on its package name
+ *
+ * @param clazz
+ * @return true if the class has web documentation, false otherwise
+ */
+ public static boolean hasWebDocumentation(final Class clazz) {
+ for (final String pkg : PACKAGES_WITH_WEB_DOCUMENTATION) {
+ if (clazz.getPackage().getName().startsWith(pkg)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @return the link to a FAQ
+ */
+ public static String getFaqLink() {
+ return "To get help, see http://broadinstitute.github.io/picard/index.html#GettingHelp";
+ }
+
+ /**
+ * Find all of the members annotated with @NestedOptions.
+ * This is package scope and static so that CommandLineProgram can use it to provide default implementation
+ * of its own getNestedOptions() method.
+ */
+ static Map<String, Object> getNestedOptions(final Object callerOptions) {
+ // LinkedHashMap so usage message is generated in order of declaration
+ final Map<String, Object> ret = new LinkedHashMap<String, Object>();
+ final Class<?> clazz = callerOptions.getClass();
+ for (final Field field : getAllFields(clazz)) {
+ if (field.getAnnotation(NestedOptions.class) != null) {
+ field.setAccessible(true);
+ try {
+ ret.put(field.getName(), field.get(callerOptions));
+ } catch (final IllegalAccessException e) {
+ throw new RuntimeException("Should never happen.", e);
+ }
+ }
+ }
+ return ret;
+ }
+
+ // This is the object that the caller has provided that contains annotations,
+ // and into which the values will be assigned.
+ private final Object callerOptions;
+
+ // For child CommandLineParser, this contains the prefix for the option names, which is needed for generating
+ // the command line. For non-nested, this is the empty string.
+ private final String prefix;
+ // For non-nested, empty string. For nested, prefix + "."
+ private final String prefixDot;
+
+ // null if no @PositionalArguments annotation
+ private Field positionalArguments;
+ private int minPositionalArguments;
+ private int maxPositionalArguments;
+
+ // List of all the data members with @Option annotation
+ private final List<OptionDefinition> optionDefinitions = new ArrayList<OptionDefinition>();
+
+ // Maps long name, and short name, if present, to an option definition that is
+ // also in the optionDefinitions list.
+ private final Map<String, OptionDefinition> optionMap = new HashMap<String, OptionDefinition>();
+
+ // Maps child options prefix to CommandLineParser for the child object.
+ // Key: option prefix.
+ private final Map<String, CommandLineParser> childOptionsMap = new LinkedHashMap<String, CommandLineParser>();
+
+ // Holds the command-line arguments for a child option parser.
+ // Key: option prefix. Value: List of arguments for child corresponding to that prefix (with prefix stripped).
+ private final MultiMap<String, ChildOptionArg> childOptionArguments = new MultiMap<String, ChildOptionArg>();
+
+ // For printing error messages when parsing command line.
+ private PrintStream messageStream;
+
+ // In case implementation wants to get at arg for some reason.
+ private String[] argv;
+
+ private String programVersion = null;
+
+ // The command line used to launch this program, including non-null default options that
+ // weren't explicitly specified. This is used for logging and debugging.
+ private String commandLine = "";
+
+ /**
+ * This attribute is here just to facilitate printing usage for OPTIONS_FILE
+ */
+ public File IGNORE_THIS_PROPERTY;
+
+ // The associated program properties using the CommandLineProgramProperties annotation
+ private final CommandLineProgramProperties programProperties;
+
+ /**
+ * Prepare for parsing command line arguments, by validating annotations.
+ *
+ * @param callerOptions This object contains annotations that define the acceptable command-line options,
+ * and ultimately will receive the settings when a command line is parsed.
+ */
+ public CommandLineParser(final Object callerOptions) {
+ this(callerOptions, "");
+ }
+
+ private String getUsagePreamble() {
+ String usagePreamble = "";
+ if (null != programProperties) {
+ usagePreamble += programProperties.usage();
+ } else if (positionalArguments == null) {
+ usagePreamble += defaultUsagePreamble;
+ } else {
+ usagePreamble += defaultUsagePreambleWithPositionalArguments;
+ }
+ if (null != this.programVersion && 0 < this.programVersion.length()) {
+ usagePreamble += "Version: " + getVersion() + "\n";
+ }
+ return usagePreamble;
+ }
+
+ /**
+ * @param prefix Non-empty for child options object.
+ */
+ private CommandLineParser(final Object callerOptions, final String prefix) {
+ this.callerOptions = callerOptions;
+
+ this.prefix = prefix;
+ if (prefix.isEmpty()) {
+ prefixDot = "";
+ } else {
+ prefixDot = prefix + ".";
+ }
+
+
+ for (final Field field : getAllFields(this.callerOptions.getClass())) {
+ if (field.getAnnotation(PositionalArguments.class) != null) {
+ handlePositionalArgumentAnnotation(field);
+ }
+ if (field.getAnnotation(Option.class) != null) {
+ handleOptionAnnotation(field);
+ } else if (!isCommandLineProgram() && field.getAnnotation(NestedOptions.class) != null) {
+ // If callerOptions is an instance of CommandLineProgram, defer creation of child
+ // CommandLineParsers until after parsing options for this parser, in case CommandLineProgram
+ // wants to do something dynamic based on values for this parser.
+ handleNestedOptionsAnnotation(field);
+ }
+ }
+
+ this.programProperties = this.callerOptions.getClass().getAnnotation(CommandLineProgramProperties.class);
+ }
+
+ private boolean isCommandLineProgram() {
+ return callerOptions instanceof CommandLineProgram;
+ }
+
+ private static List<Field> getAllFields(Class clazz) {
+ final List<Field> ret = new ArrayList<Field>();
+ do {
+ ret.addAll(Arrays.asList(clazz.getDeclaredFields()));
+ clazz = clazz.getSuperclass();
+ } while (clazz != null);
+ return ret;
+ }
+
+ public String getVersion() {
+ return this.callerOptions.getClass().getPackage().getImplementationVersion();
+ }
+
+ /**
+ * Print a usage message based on the options object passed to the ctor.
+ *
+ * @param stream Where to write the usage message.
+ */
+ public void usage(final PrintStream stream, final boolean printCommon) {
+ if (prefix.isEmpty()) {
+ stream.print(getStandardUsagePreamble(callerOptions.getClass()) + getUsagePreamble());
+ stream.println("\nVersion: " + getVersion());
+ stream.println("\n\nOptions:\n");
+
+ for (final String[] optionDoc : FRAMEWORK_OPTION_DOC) {
+ printOptionParamUsage(stream, optionDoc[0], optionDoc[1], null, optionDoc[2]);
+ }
+ }
+
+ if (!optionDefinitions.isEmpty()) {
+ for (final OptionDefinition optionDefinition : optionDefinitions) {
+ if (printCommon || !optionDefinition.isCommon) printOptionUsage(stream, optionDefinition);
+ }
+ }
+
+ if (printCommon) {
+ final Field fileField;
+ try {
+ fileField = getClass().getField("IGNORE_THIS_PROPERTY");
+ } catch (final NoSuchFieldException e) {
+ throw new PicardException("Should never happen", e);
+ }
+ final OptionDefinition optionsFileOptionDefinition =
+ new OptionDefinition(fileField, OPTIONS_FILE, "",
+ "File of OPTION_NAME=value pairs. No positional parameters allowed. Unlike command-line options, " +
+ "unrecognized options are ignored. " + "A single-valued option set in an options file may be overridden " +
+ "by a subsequent command-line option. " +
+ "A line starting with '#' is considered a comment.",
+ false, true, false, 0, Integer.MAX_VALUE, null, true, new String[0]);
+ printOptionUsage(stream, optionsFileOptionDefinition);
+ }
+
+ // Generate usage for child parsers.
+ final Collection<CommandLineParser> childClps;
+ childClps = getChildParsersForHelp();
+ for (final CommandLineParser childClp : childClps) {
+ childClp.usage(stream, printCommon);
+ }
+ }
+
+ private Collection<CommandLineParser> getChildParsersForHelp() {
+ final Collection<CommandLineParser> childClps;
+ if (isCommandLineProgram()) {
+ childClps = new ArrayList<CommandLineParser>();
+ for (final Map.Entry<String, Object> entry :
+ ((CommandLineProgram) callerOptions).getNestedOptionsForHelp().entrySet()) {
+ if (entry.getKey().contains(".")) {
+ throw new IllegalArgumentException("Prefix for nested options should not contain period: " + entry.getKey());
+ }
+ childClps.add(new CommandLineParser(entry.getValue(), prefixDot + entry.getKey()));
+ }
+ } else {
+ childClps = childOptionsMap.values();
+ }
+ return childClps;
+ }
+
+
+ public void htmlUsage(final PrintStream stream, final String programName, final boolean printCommon) {
+ // TODO: Should HTML escape usage preamble and option usage, including line breaks
+ stream.println("<a id=\"" + programName + "\"/>");
+ stream.println("<h3>" + programName + "</h3>");
+ stream.println("<section>");
+ stream.println("<p>" + getUsagePreamble() + "</p>");
+ boolean hasOptions = false;
+ for (final OptionDefinition optionDefinition : optionDefinitions) {
+ if (!optionDefinition.isCommon || printCommon) {
+ hasOptions = true;
+ break;
+ }
+ }
+ if (hasOptions) {
+ htmlPrintOptions(stream, printCommon);
+ }
+ stream.println("</section>");
+ }
+
+ public void htmlPrintOptions(final PrintStream stream, final boolean printCommon) {
+ stream.println("<table>");
+ stream.println("<tr><th>Option</th><th>Description</th></tr>");
+ if (printCommon) {
+ for (final String[] optionDoc : FRAMEWORK_OPTION_DOC) {
+ stream.println("<tr><td>" + optionDoc[0] + "</td><td>" +
+ htmlEscape(optionDoc[2]) + "</td></tr>");
+ }
+ }
+ htmlPrintOptionTableRows(stream, printCommon);
+ stream.println("</table>");
+ }
+
+ /**
+ * Prints options as rows in an HTML table.
+ *
+ * @param stream
+ * @param printCommon
+ */
+ private void htmlPrintOptionTableRows(final PrintStream stream, final boolean printCommon) {
+ for (final OptionDefinition optionDefinition : optionDefinitions) {
+ if (!optionDefinition.isCommon || printCommon) {
+ printHtmlOptionUsage(stream, optionDefinition);
+ }
+ }
+ for (final CommandLineParser childParser : getChildParsersForHelp()) {
+ childParser.htmlPrintOptionTableRows(stream, false);
+ }
+
+ }
+
+ private static String htmlEscape(String str) {
+ // May need more here
+ str = str.replaceAll("<", "<");
+ str = str.replaceAll("\n", "\n<p>");
+ return str;
+ }
+
+ /**
+ * Parse command-line options, and store values in callerOptions object passed to ctor.
+ *
+ * @param messageStream Where to write error messages.
+ * @param args Command line tokens.
+ * @return true if command line is valid.
+ */
+ public boolean parseOptions(final PrintStream messageStream, final String[] args) {
+ this.argv = args;
+ this.messageStream = messageStream;
+ if (prefix.isEmpty()) {
+ commandLine = callerOptions.getClass().getName();
+ }
+ for (int i = 0; i < args.length; ++i) {
+ final String arg = args[i];
+ if (arg.equals("-h") || arg.equals("--help")) {
+ usage(messageStream, false);
+ return false;
+ }
+ if (arg.equals("-H") || arg.equals("--stdhelp")) {
+ usage(messageStream, true);
+ return false;
+ }
+
+ if (arg.equals("--version")) {
+ messageStream.println(getVersion());
+ return false;
+ }
+
+
+ final String[] pair = arg.split("=", 2);
+ if (pair.length == 2 && pair[1].length() == 0) {
+
+ if (i < args.length - 1) {
+ pair[1] = args[++i];
+ }
+ }
+ if (pair.length == 2) {
+ if (!parseOption(pair[0], pair[1], false)) {
+ messageStream.println();
+ usage(messageStream, true);
+ return false;
+ }
+ } else if (!parsePositionalArgument(arg)) {
+ messageStream.println();
+ usage(messageStream, false);
+ return false;
+ }
+ }
+ if (!checkNumArguments()) {
+ messageStream.println();
+ usage(messageStream, false);
+ return false;
+ }
+
+ if (!parseChildOptions()) {
+ messageStream.println();
+ usage(messageStream, false);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * After command line has been parsed, make sure that all required options have values, and that
+ * lists with minimum # of elements have sufficient.
+ *
+ * @return true if valid
+ */
+ private boolean checkNumArguments() {
+ //Also, since we're iterating over all options and args, use this opportunity to recreate the commandLineString
+ final StringBuilder commandLineString = new StringBuilder();
+ try {
+ for (final OptionDefinition optionDefinition : optionDefinitions) {
+ final String fullName = prefixDot + optionDefinition.name;
+ final StringBuilder mutextOptionNames = new StringBuilder();
+ for (final String mutexOption : optionDefinition.mutuallyExclusive) {
+ final OptionDefinition mutextOptionDef = optionMap.get(mutexOption);
+ if (mutextOptionDef != null && mutextOptionDef.hasBeenSet) {
+ mutextOptionNames.append(" ").append(prefixDot).append(mutextOptionDef.name);
+ }
+ }
+ if (optionDefinition.hasBeenSet && mutextOptionNames.length() > 0) {
+ messageStream.println("ERROR: Option '" + fullName +
+ "' cannot be used in conjunction with option(s)" +
+ mutextOptionNames.toString());
+ return false;
+ }
+ if (optionDefinition.isCollection) {
+ final Collection c = (Collection) optionDefinition.field.get(callerOptions);
+ if (c.size() < optionDefinition.minElements) {
+ messageStream.println("ERROR: Option '" + fullName + "' must be specified at least " +
+ optionDefinition.minElements + " times.");
+ return false;
+ }
+ } else if (!optionDefinition.optional && !optionDefinition.hasBeenSet &&
+ !optionDefinition.hasBeenSetFromParent && mutextOptionNames.length() == 0) {
+ messageStream.print("ERROR: Option '" + fullName + "' is required");
+ if (optionDefinition.mutuallyExclusive.isEmpty()) {
+ messageStream.println(".");
+ } else {
+ messageStream.println(" unless any of " + optionDefinition.mutuallyExclusive +
+ " are specified.");
+ }
+ return false;
+ }
+
+ }
+ if (positionalArguments != null) {
+ final Collection c = (Collection) positionalArguments.get(callerOptions);
+ if (c.size() < minPositionalArguments) {
+ messageStream.println("ERROR: At least " + minPositionalArguments +
+ " positional arguments must be specified.");
+ return false;
+ }
+ for (final Object posArg : c) {
+ commandLineString.append(" ").append(posArg.toString());
+ }
+ }
+ //first, append args that were explicitly set
+ for (final OptionDefinition optionDefinition : optionDefinitions) {
+ if (optionDefinition.hasBeenSet) {
+ commandLineString.append(" ").append(prefixDot).append(optionDefinition.name).append("=").append(
+ optionDefinition.field.get(callerOptions));
+ }
+ }
+ commandLineString.append(" "); //separator to tell the 2 apart
+ //next, append args that weren't explicitly set, but have a default value
+ for (final OptionDefinition optionDefinition : optionDefinitions) {
+ if (!optionDefinition.hasBeenSet && !optionDefinition.defaultValue.equals("null")) {
+ commandLineString.append(" ").append(prefixDot).append(optionDefinition.name).append("=").append(
+ optionDefinition.defaultValue);
+ }
+ }
+ this.commandLine += commandLineString.toString();
+ return true;
+ } catch (final IllegalAccessException e) {
+ // Should never happen because lack of publicness has already been checked.
+ throw new RuntimeException(e);
+ }
+
+
+ }
+
+ private boolean parsePositionalArgument(final String stringValue) {
+ if (positionalArguments == null) {
+ messageStream.println("ERROR: Invalid argument '" + stringValue + "'.");
+ return false;
+ }
+ final Object value;
+ try {
+ value = constructFromString(getUnderlyingType(positionalArguments), stringValue);
+ } catch (final CommandLineParseException e) {
+ messageStream.println("ERROR: " + e.getMessage());
+ return false;
+ }
+ final Collection c;
+ try {
+ c = (Collection) positionalArguments.get(callerOptions);
+ } catch (final IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ if (c.size() >= maxPositionalArguments) {
+ messageStream.println("ERROR: No more than " + maxPositionalArguments +
+ " positional arguments may be specified on the command line.");
+ return false;
+ }
+ c.add(value);
+ return true;
+ }
+
+ private boolean parseOption(final String key, final String stringValue, final boolean optionsFile) {
+ return parseOption(key, stringValue, optionsFile, false);
+ }
+
+ private boolean parseOption(String key, final String stringValue, final boolean optionsFile,
+ boolean precedenceSet) {
+ key = key.toUpperCase();
+ if (key.equals(OPTIONS_FILE)) {
+ commandLine += " " + prefix + OPTIONS_FILE + "=" + stringValue;
+ return parseOptionsFile(stringValue);
+ }
+
+ // Check to see if the precedence symbol was used
+ if (key.startsWith(PRECEDENCE_SYMBOL)) {
+ key = key.substring(PRECEDENCE_SYMBOL.length());
+ precedenceSet = true;
+ }
+
+ // Save child options for later processing.
+ final Integer prefixIndex = key.indexOf('.');
+ if (prefixIndex != -1) {
+ final String prefix = key.substring(0, prefixIndex);
+ final String subKey = key.substring(prefixIndex + 1);
+ if (!subKey.isEmpty()) {
+ childOptionArguments.append(prefix, new ChildOptionArg(subKey, stringValue, optionsFile,
+ precedenceSet));
+ return true;
+ } else {
+ messageStream.println("ERROR: Unrecognized option: " + key);
+ return false;
+ }
+ }
+
+ final OptionDefinition optionDefinition = optionMap.get(key);
+ if (optionDefinition == null) {
+ if (optionsFile) {
+ // Silently ignore unrecognized option from options file
+ return true;
+ }
+ messageStream.println("ERROR: Unrecognized option: " + key);
+ return false;
+ }
+
+ // Check to see if the option has been "fixed" already
+ if (this.optionsThatCannotBeOverridden.contains(optionDefinition.name)) {
+ return true;
+ } else if (precedenceSet) {
+ this.optionsThatCannotBeOverridden.add(optionDefinition.name);
+ }
+
+ if (!optionDefinition.isCollection) {
+ if (optionDefinition.hasBeenSet && !optionDefinition.hasBeenSetFromOptionsFile) {
+ messageStream.println("ERROR: Option '" + key + "' cannot be specified more than once.");
+ return false;
+ }
+ }
+ final Object value;
+ try {
+ if (stringValue.equals("null")) {
+ //"null" is a special value that allows the user to override any default
+ //value set for this arg. It can only be used for optional args. When
+ //used for a list arg, it will clear the list.
+ if (optionDefinition.optional) {
+ value = null;
+ } else {
+ messageStream.println("ERROR: non-null value must be provided for '" + key + "'.");
+ return false;
+ }
+ } else {
+ value = constructFromString(getUnderlyingType(optionDefinition.field), stringValue);
+ }
+
+ } catch (final CommandLineParseException e) {
+ messageStream.println("ERROR: " + e.getMessage());
+ return false;
+ }
+ try {
+ if (optionDefinition.isCollection) {
+ final Collection c = (Collection) optionDefinition.field.get(callerOptions);
+ if (value == null) {
+ //user specified this arg=null which is interpreted as empty list
+ c.clear();
+ } else if (c.size() >= optionDefinition.maxElements) {
+ messageStream.println("ERROR: Option '" + key + "' cannot be used more than " +
+ optionDefinition.maxElements + " times.");
+ return false;
+ } else {
+ c.add(value);
+ }
+ optionDefinition.hasBeenSet = true;
+ optionDefinition.hasBeenSetFromOptionsFile = optionsFile;
+ } else {
+ //get all fields with this name and set them to the argument.
+ final String fieldName = optionDefinition.field.getName();
+ final Field[] fields = callerOptions.getClass().getFields();
+ for (final Field field : fields) {
+ if (field.getName().equals(fieldName)) {
+ field.set(callerOptions, value);
+ optionDefinition.hasBeenSet = true;
+ }
+ }
+ if (!optionDefinition.hasBeenSet) {
+ optionDefinition.field.set(callerOptions, value);
+ optionDefinition.hasBeenSet = true;
+ }
+ optionDefinition.hasBeenSetFromOptionsFile = optionsFile;
+ }
+ } catch (final IllegalAccessException e) {
+ // Should never happen because we only iterate through public fields.
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
+
+ /**
+ * Parsing of options from file is looser than normal. Any unrecognized options are
+ * ignored, and a single-valued option that is set in a file may be overridden by a
+ * subsequent appearance of that option.
+ * A line that starts with '#' is ignored.
+ *
+ * @param optionsFile
+ * @return false if a fatal error occurred
+ */
+ private boolean parseOptionsFile(final String optionsFile) {
+ return parseOptionsFile(optionsFile, true);
+ }
+
+ /**
+ * @param optionFileStyleValidation true: unrecognized options are silently ignored; and a single-valued option may be overridden.
+ * false: standard rules as if the options in the file were on the command line directly.
+ * @return
+ */
+ public boolean parseOptionsFile(final String optionsFile, final boolean optionFileStyleValidation) {
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new FileReader(optionsFile));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (line.startsWith("#") || line.trim().length() == 0) {
+ continue;
+ }
+ final String[] pair = line.split("=", 2);
+ if (pair.length == 2) {
+ if (!parseOption(pair[0], pair[1], optionFileStyleValidation)) {
+ messageStream.println();
+ usage(messageStream, true);
+ return false;
+ }
+ } else {
+ messageStream.println("Strange line in OPTIONS_FILE " + optionsFile + ": " + line);
+ usage(messageStream, true);
+ return false;
+ }
+ }
+ reader.close();
+ return true;
+
+ } catch (final IOException e) {
+ throw new PicardException("I/O error loading OPTIONS_FILE=" + optionsFile, e);
+ } finally {
+ CloserUtil.close(reader);
+ }
+ }
+
+ private void printHtmlOptionUsage(final PrintStream stream, final OptionDefinition optionDefinition) {
+ final String type = getUnderlyingType(optionDefinition.field).getSimpleName();
+ final String optionLabel = prefixDot + optionDefinition.name + " (" + type + ")";
+ stream.println("<tr><td>" + optionLabel + "</td><td>" +
+ htmlEscape(makeOptionDescription(optionDefinition)) + "</td></tr>");
+ }
+
+ private void printOptionUsage(final PrintStream stream, final OptionDefinition optionDefinition) {
+ printOptionParamUsage(stream, optionDefinition.name, optionDefinition.shortName,
+ getUnderlyingType(optionDefinition.field).getSimpleName(),
+ makeOptionDescription(optionDefinition));
+ }
+
+
+ private void printOptionParamUsage(final PrintStream stream, final String name, final String shortName,
+ final String type, final String optionDescription) {
+ String optionLabel = prefixDot + name;
+ if (type != null) optionLabel += "=" + type;
+
+ stream.print(optionLabel);
+ if (shortName != null && shortName.length() > 0) {
+ stream.println();
+ optionLabel = prefixDot + shortName;
+ if (type != null) optionLabel += "=" + type;
+ stream.print(optionLabel);
+ }
+
+ int numSpaces = OPTION_COLUMN_WIDTH - optionLabel.length();
+ if (optionLabel.length() > OPTION_COLUMN_WIDTH) {
+ stream.println();
+ numSpaces = OPTION_COLUMN_WIDTH;
+ }
+ printSpaces(stream, numSpaces);
+ final String wrappedDescription = StringUtil.wordWrap(optionDescription, DESCRIPTION_COLUMN_WIDTH);
+ final String[] descriptionLines = wrappedDescription.split("\n");
+ for (int i = 0; i < descriptionLines.length; ++i) {
+ if (i > 0) {
+ printSpaces(stream, OPTION_COLUMN_WIDTH);
+ }
+ stream.println(descriptionLines[i]);
+ }
+ stream.println();
+ }
+
+ private String makeOptionDescription(final OptionDefinition optionDefinition) {
+ final StringBuilder sb = new StringBuilder();
+ if (optionDefinition.doc.length() > 0) {
+ sb.append(optionDefinition.doc);
+ sb.append(" ");
+ }
+ if (optionDefinition.optional) {
+ sb.append("Default value: ");
+ sb.append(optionDefinition.defaultValue);
+ sb.append(". ");
+ if (!optionDefinition.defaultValue.equals("null")) {
+ sb.append("This option can be set to 'null' to clear the default value. ");
+ }
+ } else if (!optionDefinition.isCollection) {
+ sb.append("Required. ");
+ }
+ Object[] enumConstants = getUnderlyingType(optionDefinition.field).getEnumConstants();
+ if (enumConstants == null && getUnderlyingType(optionDefinition.field) == Boolean.class) {
+ enumConstants = TRUE_FALSE_VALUES;
+ }
+
+ if (enumConstants != null) {
+ final Boolean isClpEnum = enumConstants.length > 0 && (enumConstants[0] instanceof ClpEnum);
+
+ sb.append("Possible values: {");
+ if (isClpEnum) sb.append("\n");
+
+ for (int i = 0; i < enumConstants.length; ++i) {
+ if (i > 0 && !isClpEnum) {
+ sb.append(", ");
+ }
+ sb.append(enumConstants[i].toString());
+
+ if (isClpEnum) {
+ sb.append(" (").append(((ClpEnum) enumConstants[i]).getHelpDoc()).append(")\n");
+ }
+ }
+ sb.append("} ");
+ }
+ if (optionDefinition.isCollection) {
+ if (optionDefinition.minElements == 0) {
+ if (optionDefinition.maxElements == Integer.MAX_VALUE) {
+ sb.append("This option may be specified 0 or more times. ");
+ } else {
+ sb.append("This option must be specified no more than ").append(optionDefinition.maxElements).append(
+ " times. ");
+ }
+ } else if (optionDefinition.maxElements == Integer.MAX_VALUE) {
+ sb.append("This option must be specified at least ").append(optionDefinition.minElements).append(" times. ");
+ } else {
+ sb.append("This option may be specified between ").append(optionDefinition.minElements).append(
+ " and ").append(optionDefinition.maxElements).append(" times. ");
+ }
+
+ if (!optionDefinition.defaultValue.equals("null")) {
+ sb.append("This option can be set to 'null' to clear the default list. ");
+ }
+
+ }
+ if (!optionDefinition.mutuallyExclusive.isEmpty()) {
+ sb.append(" Cannot be used in conjuction with option(s)");
+ for (final String option : optionDefinition.mutuallyExclusive) {
+ final OptionDefinition mutextOptionDefinition = optionMap.get(option);
+
+ if (mutextOptionDefinition == null) {
+ throw new PicardException("Invalid option definition in source code. " + option +
+ " doesn't match any known option.");
+ }
+
+ sb.append(" ").append(mutextOptionDefinition.name);
+ if (mutextOptionDefinition.shortName.length() > 0) {
+ sb.append(" (").append(mutextOptionDefinition.shortName).append(")");
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ private void printSpaces(final PrintStream stream, final int numSpaces) {
+ final StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < numSpaces; ++i) {
+ sb.append(" ");
+ }
+ stream.print(sb);
+ }
+
+ private void handleOptionAnnotation(final Field field) {
+ try {
+ field.setAccessible(true);
+ final Option optionAnnotation = field.getAnnotation(Option.class);
+ final boolean isCollection = isCollectionField(field);
+ if (isCollection) {
+ if (optionAnnotation.maxElements() == 0) {
+ throw new CommandLineParserDefinitionException("@Option member " + field.getName() +
+ "has maxElements = 0");
+ }
+ if (optionAnnotation.minElements() > optionAnnotation.maxElements()) {
+ throw new CommandLineParserDefinitionException("In @Option member " + field.getName() +
+ ", minElements cannot be > maxElements");
+ }
+ if (field.get(callerOptions) == null) {
+ createCollection(field, callerOptions, "@Option");
+ }
+ }
+ if (!canBeMadeFromString(getUnderlyingType(field))) {
+ throw new CommandLineParserDefinitionException("@Option member " + field.getName() +
+ " must have a String ctor or be an enum");
+ }
+
+ final OptionDefinition optionDefinition = new OptionDefinition(field,
+ field.getName(),
+ optionAnnotation.shortName(),
+ optionAnnotation.doc(), optionAnnotation.optional() || (field.get(callerOptions) != null),
+ optionAnnotation.overridable(), isCollection, optionAnnotation.minElements(),
+ optionAnnotation.maxElements(), field.get(callerOptions), optionAnnotation.common(),
+ optionAnnotation.mutex());
+
+ for (final String option : optionAnnotation.mutex()) {
+ final OptionDefinition mutextOptionDef = optionMap.get(option);
+ if (mutextOptionDef != null) {
+ mutextOptionDef.mutuallyExclusive.add(field.getName());
+ }
+ }
+ if (!optionDefinition.overridable && optionMap.containsKey(optionDefinition.name)) {
+ throw new CommandLineParserDefinitionException(optionDefinition.name + " has already been used.");
+ }
+ if (optionDefinition.shortName.length() > 0) {
+ if (optionMap.containsKey(optionDefinition.shortName)) {
+ if (!optionDefinition.overridable) {
+ throw new CommandLineParserDefinitionException(optionDefinition.shortName +
+ " has already been used");
+ }
+ } else {
+ optionMap.put(optionDefinition.shortName, optionDefinition);
+ }
+ }
+ //if we are overridable and we already exist don't add again to the option defs
+ if (!(optionDefinition.overridable && optionMap.containsKey(optionDefinition.name))) {
+ optionDefinitions.add(optionDefinition);
+ optionMap.put(optionDefinition.name, optionDefinition);
+ }
+ //we are overridable but we already exist in the map so we need to update the hidden field value
+ else if (optionMap.containsKey(optionDefinition.name)) {
+ field.set(this.callerOptions, optionMap.get(optionDefinition.name).field.get(callerOptions));
+ }
+ } catch (final IllegalAccessException e) {
+ throw new CommandLineParserDefinitionException(field.getName() +
+ " must have public visibility to have @Option annotation");
+ }
+ }
+
+ private void handlePositionalArgumentAnnotation(final Field field) {
+ if (positionalArguments != null) {
+ throw new CommandLineParserDefinitionException
+ ("@PositionalArguments cannot be used more than once in an option class.");
+ }
+ field.setAccessible(true);
+ positionalArguments = field;
+ if (!isCollectionField(field)) {
+ throw new CommandLineParserDefinitionException("@PositionalArguments must be applied to a Collection");
+ }
+
+ if (!canBeMadeFromString(getUnderlyingType(field))) {
+ throw new CommandLineParserDefinitionException("@PositionalParameters member " + field.getName() +
+ "does not have a String ctor");
+ }
+
+ final PositionalArguments positionalArgumentsAnnotation = field.getAnnotation(PositionalArguments.class);
+ minPositionalArguments = positionalArgumentsAnnotation.minElements();
+ maxPositionalArguments = positionalArgumentsAnnotation.maxElements();
+ if (minPositionalArguments > maxPositionalArguments) {
+ throw new CommandLineParserDefinitionException("In @PositionalArguments, minElements cannot be > maxElements");
+ }
+ try {
+ if (field.get(callerOptions) == null) {
+ createCollection(field, callerOptions, "@PositionalParameters");
+ }
+ } catch (final IllegalAccessException e) {
+ throw new CommandLineParserDefinitionException(field.getName() +
+ " must have public visibility to have @PositionalParameters annotation");
+
+ }
+ }
+
+ private void handleNestedOptionsAnnotation(final Field field) {
+ field.setAccessible(true);
+ try {
+ childOptionsMap.put(field.getName(),
+ new CommandLineParser(field.get(this.callerOptions), prefixDot + field.getName()));
+ } catch (final IllegalAccessException e) {
+ throw new CommandLineParserDefinitionException("Should never happen.", e);
+ }
+ }
+
+ private boolean isCollectionField(final Field field) {
+ try {
+ field.getType().asSubclass(Collection.class);
+ return true;
+ } catch (final ClassCastException e) {
+ return false;
+ }
+ }
+
+ private void createCollection(final Field field, final Object callerOptions, final String annotationType)
+ throws IllegalAccessException {
+ try {
+ field.set(callerOptions, field.getType().newInstance());
+ } catch (final Exception ex) {
+ try {
+ field.set(callerOptions, new ArrayList());
+ } catch (final IllegalArgumentException e) {
+ throw new CommandLineParserDefinitionException("In collection " + annotationType +
+ " member " + field.getName() +
+ " cannot be constructed or auto-initialized with ArrayList, so collection must be initialized explicitly.");
+ }
+
+ }
+
+ }
+
+ /**
+ * Returns the type that each instance of the argument needs to be converted to. In
+ * the case of primitive fields it will return the wrapper type so that String
+ * constructors can be found.
+ */
+ private Class getUnderlyingType(final Field field) {
+ if (isCollectionField(field)) {
+ final ParameterizedType clazz = (ParameterizedType) (field.getGenericType());
+ final Type[] genericTypes = clazz.getActualTypeArguments();
+ if (genericTypes.length != 1) {
+ throw new CommandLineParserDefinitionException("Strange collection type for field " +
+ field.getName());
+ }
+ return (Class) genericTypes[0];
+
+ } else {
+ final Class type = field.getType();
+ if (type == Byte.TYPE) return Byte.class;
+ if (type == Short.TYPE) return Short.class;
+ if (type == Integer.TYPE) return Integer.class;
+ if (type == Long.TYPE) return Long.class;
+ if (type == Float.TYPE) return Float.class;
+ if (type == Double.TYPE) return Double.class;
+ if (type == Boolean.TYPE) return Boolean.class;
+
+ return type;
+ }
+ }
+
+ // True if clazz is an enum, or if it has a ctor that takes a single String argument.
+ private boolean canBeMadeFromString(final Class clazz) {
+ if (clazz.isEnum()) {
+ return true;
+ }
+ try {
+ clazz.getConstructor(String.class);
+ return true;
+ } catch (final NoSuchMethodException e) {
+ return false;
+ }
+ }
+
+ private Object constructFromString(final Class clazz, final String s) {
+ try {
+ if (clazz.isEnum()) {
+ try {
+ return Enum.valueOf(clazz, s);
+ } catch (final IllegalArgumentException e) {
+ throw new CommandLineParseException("'" + s + "' is not a valid value for " +
+ clazz.getSimpleName() + ".", e);
+ }
+ }
+ final Constructor ctor = clazz.getConstructor(String.class);
+ return ctor.newInstance(s);
+ } catch (final NoSuchMethodException e) {
+ // Shouldn't happen because we've checked for presence of ctor
+ throw new CommandLineParseException("Cannot find string ctor for " + clazz.getName(), e);
+ } catch (final InstantiationException e) {
+ throw new CommandLineParseException("Abstract class '" + clazz.getSimpleName() +
+ "'cannot be used for an option value type.", e);
+ } catch (final IllegalAccessException e) {
+ throw new CommandLineParseException("String constructor for option value type '" + clazz.getSimpleName() +
+ "' must be public.", e);
+ } catch (final InvocationTargetException e) {
+ throw new CommandLineParseException("Problem constructing " + clazz.getSimpleName() +
+ " from the string '" + s + "'.", e.getCause());
+ }
+ }
+
+ public String[] getArgv() {
+ return argv;
+ }
+
+ public interface ClpEnum {
+ String getHelpDoc();
+ }
+
+ protected static class OptionDefinition {
+ final Field field;
+ final String name;
+ final String shortName;
+ final String doc;
+ final boolean optional;
+ final boolean overridable;
+ final boolean isCollection;
+ final int minElements;
+ final int maxElements;
+ final String defaultValue;
+ final boolean isCommon;
+ boolean hasBeenSet = false;
+ boolean hasBeenSetFromOptionsFile = false;
+ boolean hasBeenSetFromParent = false;
+ final Set<String> mutuallyExclusive;
+
+ private OptionDefinition(final Field field, final String name, final String shortName, final String doc,
+ final boolean optional, final boolean overridable, boolean collection, final int minElements,
+ final int maxElements, final Object defaultValue, final boolean isCommon,
+ final String[] mutuallyExclusive) {
+ this.field = field;
+ this.name = name.toUpperCase();
+ this.shortName = shortName.toUpperCase();
+ this.doc = doc;
+ this.optional = optional;
+ this.overridable = overridable;
+ isCollection = collection;
+ this.minElements = minElements;
+ this.maxElements = maxElements;
+ if (defaultValue != null) {
+ if (isCollection && ((Collection) defaultValue).isEmpty()) {
+ //treat empty collections the same as uninitialized primitive types
+ this.defaultValue = "null";
+ } else {
+ //this is an intialized primitive type or a non-empty collection
+ this.defaultValue = defaultValue.toString();
+ }
+ } else {
+ this.defaultValue = "null";
+ }
+ this.isCommon = isCommon;
+ this.mutuallyExclusive = new HashSet<String>(Arrays.asList(mutuallyExclusive));
+ }
+ }
+
+ /**
+ * Holds a command-line argument that is destined for a child parser. Prefix has been stripped from name.
+ */
+ private static class ChildOptionArg {
+ final String name;
+ final String value;
+ final boolean fromFile;
+ final boolean precedenceSet;
+
+ private ChildOptionArg(final String name, final String value, final boolean fromFile, final boolean precedenceSet) {
+ this.name = name;
+ this.value = value;
+ this.fromFile = fromFile;
+ this.precedenceSet = precedenceSet;
+ }
+ }
+
+ /**
+ * Propagate options from parent to children as appropriate, parse command line options for
+ * children, and then validate that children have been properly initialized. This is done recursively
+ * for any child that itself has a child.
+ *
+ * @return true if parsing is successful. Writes any errors to the message stream.
+ */
+ private boolean parseChildOptions() {
+
+ // If callerOptions is not an instance of CommandLineProgram, then the child options are populated
+ // when annotations are processed.
+ if (isCommandLineProgram()) {
+ final CommandLineProgram commandLineProgram = (CommandLineProgram) callerOptions;
+ for (final Map.Entry<String, Object> entry : commandLineProgram.getNestedOptions().entrySet()) {
+ if (entry.getKey().contains(".")) {
+ throw new IllegalArgumentException("Prefix for nested options should not contain period: " + entry.getKey());
+ }
+ childOptionsMap.put(entry.getKey(),
+ new CommandLineParser(entry.getValue(), prefixDot + entry.getKey()));
+ }
+ }
+ boolean retval = true;
+
+ // Check for child options for which there is no parser
+ for (final String prefix : childOptionArguments.keySet()) {
+ if (!childOptionsMap.containsKey(prefix)) {
+ messageStream.println("ERROR: Option prefix '" + prefix + "' is not valid.");
+ retval = false;
+ }
+ }
+
+ try {
+ // Propagate options from this parser to child parsers
+ for (final OptionDefinition optionDefinition : optionDefinitions) {
+ // Handling collection value propagation is confusing, so just don't do it.
+ if (optionDefinition.isCollection) continue;
+ final Object value = optionDefinition.field.get(callerOptions);
+ if (value == null) continue;
+ for (final CommandLineParser childParser : childOptionsMap.values()) {
+ maybePropagateValueToChild(childParser, optionDefinition, value);
+ }
+ }
+ } catch (final IllegalAccessException e) {
+ throw new RuntimeException("Should never happen", e);
+ }
+
+ for (final Map.Entry<String, CommandLineParser> entry : childOptionsMap.entrySet()) {
+ final String prefix = entry.getKey();
+ final CommandLineParser childParser = entry.getValue();
+ childParser.messageStream = this.messageStream;
+ final Collection<ChildOptionArg> childOptionArgs = this.childOptionArguments.get(prefix);
+ if (childOptionArgs != null) {
+ for (final ChildOptionArg arg : childOptionArgs) {
+ childParser.parseOption(arg.name, arg.value, arg.fromFile, arg.precedenceSet);
+ }
+ }
+ if (!childParser.checkNumArguments()) {
+ retval = false;
+ }
+ if (!childParser.parseChildOptions()) {
+ retval = false;
+ }
+ this.commandLine += " " + childParser.getCommandLine();
+ }
+
+ return retval;
+ }
+
+ /**
+ * Propagate value from parent to child if appropriate to do so.
+ */
+ private void maybePropagateValueToChild(final CommandLineParser childParser,
+ final OptionDefinition optionDefinition,
+ final Object value) {
+ try {
+ final OptionDefinition childOptionDefinition = childParser.optionMap.get(optionDefinition.name);
+ if (childOptionDefinition != null) {
+ final Object childValue = childOptionDefinition.field.get(childParser.callerOptions);
+ if (childValue == null || optionDefinition.hasBeenSet) {
+ childOptionDefinition.field.set(childParser.callerOptions, value);
+ childOptionDefinition.hasBeenSetFromParent = true;
+ childOptionDefinition.hasBeenSetFromOptionsFile = optionDefinition.hasBeenSetFromOptionsFile;
+ }
+ }
+ } catch (final IllegalAccessException e) {
+ throw new RuntimeException("Should never happen", e);
+ }
+ }
+
+ /**
+ * The commandline used to run this program, including any default args that
+ * weren't necessarily specified. This is used for logging and debugging.
+ * <p/>
+ * NOTE: {@link #parseOptions(PrintStream, String[])} must be called before
+ * calling this method.
+ *
+ * @return The commandline, or null if {@link #parseOptions(PrintStream, String[])}
+ * hasn't yet been called, or didn't complete successfully.
+ */
+ public String getCommandLine() { return commandLine; }
+
+ /**
+ * This method is only needed when calling one of the public methods that doesn't take a messageStream argument.
+ */
+ public void setMessageStream(final PrintStream messageStream) {
+ this.messageStream = messageStream;
+ }
+
+ public Object getCallerOptions() {
+ return callerOptions;
+ }
+}
diff --git a/src/java/picard/cmdline/CommandLineParserDefinitionException.java b/src/java/picard/cmdline/CommandLineParserDefinitionException.java
new file mode 100644
index 0000000..e9b857b
--- /dev/null
+++ b/src/java/picard/cmdline/CommandLineParserDefinitionException.java
@@ -0,0 +1,36 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import picard.PicardException;
+
+public class CommandLineParserDefinitionException extends PicardException {
+ public CommandLineParserDefinitionException(final String s) {
+ super(s);
+ }
+
+ public CommandLineParserDefinitionException(final String s, final Throwable throwable) {
+ super(s, throwable);
+ }
+}
diff --git a/src/java/picard/cmdline/CommandLineProgram.java b/src/java/picard/cmdline/CommandLineProgram.java
new file mode 100644
index 0000000..4dad5a0
--- /dev/null
+++ b/src/java/picard/cmdline/CommandLineProgram.java
@@ -0,0 +1,331 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import htsjdk.samtools.Defaults;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMFileWriterImpl;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.ValidationStringency;
+import htsjdk.samtools.metrics.Header;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.metrics.StringHeader;
+import htsjdk.samtools.util.BlockCompressedOutputStream;
+import htsjdk.samtools.util.BlockCompressedStreamConstants;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.zip.DeflaterFactory;
+
+import java.io.File;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.net.InetAddress;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Abstract class to facilitate writing command-line programs.
+ *
+ * To use:
+ *
+ * 1. Extend this class with a concrete class that has data members annotated with @Option, @PositionalArguments
+ * and/or @Usage annotations.
+ *
+ * 2. If there is any custom command-line validation, override customCommandLineValidation(). When this method is
+ * called, the command line has been parsed and set into the data members of the concrete class.
+ *
+ * 3. Implement a method doWork(). This is called after successful command-line processing. The value it returns is
+ * the exit status of the program. It is assumed that the concrete class emits any appropriate error message before
+ * returning non-zero. doWork() may throw unchecked exceptions, which are caught and reported appropriately.
+ *
+ * 4. Implement the following static method in the concrete class:
+ *
+ * public static void main(String[] argv) {
+ new MyConcreteClass().instanceMain(argv);
+ }
+
+
+ */
+public abstract class CommandLineProgram {
+ @Option(common=true, optional=true)
+ public List<File> TMP_DIR = new ArrayList<File>();
+
+ @Option(doc = "Control verbosity of logging.", common=true)
+ public Log.LogLevel VERBOSITY = Log.LogLevel.INFO;
+
+ @Option(doc = "Whether to suppress job-summary info on System.err.", common=true)
+ public Boolean QUIET = false;
+
+ @Option(doc = "Validation stringency for all SAM files read by this program. Setting stringency to SILENT " +
+ "can improve performance when processing a BAM file in which variable-length data (read, qualities, tags) " +
+ "do not otherwise need to be decoded.", common=true)
+ public ValidationStringency VALIDATION_STRINGENCY = ValidationStringency.DEFAULT_STRINGENCY;
+
+ @Option(doc = "Compression level for all compressed files created (e.g. BAM and GELI).", common=true)
+ public int COMPRESSION_LEVEL = BlockCompressedStreamConstants.DEFAULT_COMPRESSION_LEVEL;
+
+ @Option(doc = "When writing SAM files that need to be sorted, this will specify the number of records stored in RAM before spilling to disk. Increasing this number reduces the number of file handles needed to sort a SAM file, and increases the amount of RAM needed.", optional=true, common=true)
+ public Integer MAX_RECORDS_IN_RAM = SAMFileWriterImpl.getDefaultMaxRecordsInRam();
+
+ @Option(doc = "Whether to create a BAM index when writing a coordinate-sorted BAM file.", common=true)
+ public Boolean CREATE_INDEX = Defaults.CREATE_INDEX;
+
+ @Option(doc="Whether to create an MD5 digest for any BAM or FASTQ files created. ", common=true)
+ public boolean CREATE_MD5_FILE = Defaults.CREATE_MD5;
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc = "Reference sequence file.", common = true, optional = true, overridable = true)
+ public File REFERENCE_SEQUENCE = Defaults.REFERENCE_FASTA;
+
+ @Option(doc="Google Genomics API client_secrets.json file path.", common = true)
+ public String GA4GH_CLIENT_SECRETS="client_secrets.json";
+
+ private final String standardUsagePreamble = CommandLineParser.getStandardUsagePreamble(getClass());
+
+ static {
+ // Register custom reader factory for reading data from Google Genomics
+ // implementation of GA4GH API.
+ // With this it will be possible to pass these urls as INPUT params.
+ // E.g. java -jar dist/picard.jar ViewSam \
+ // INPUT=https://www.googleapis.com/genomics/v1beta2/readgroupsets/CK256frpGBD44IWHwLP22R4/ \
+ // GA4GH_CLIENT_SECRETS=../client_secrets.json
+ if (System.getProperty("samjdk.custom_reader") == null) {
+ System.setProperty("samjdk.custom_reader",
+ "https://www.googleapis.com/genomics," +
+ "com.google.cloud.genomics.gatk.htsjdk.GA4GHReaderFactory");
+ }
+ }
+
+ /**
+ * Initialized in parseArgs. Subclasses may want to access this to do their
+ * own validation, and then print usage using commandLineParser.
+ */
+ private CommandLineParser commandLineParser;
+
+ private final List<Header> defaultHeaders = new ArrayList<Header>();
+
+ /**
+ * The reconstructed commandline used to run this program. Used for logging
+ * and debugging.
+ */
+ private String commandLine;
+
+ /**
+ * Do the work after command line has been parsed. RuntimeException may be
+ * thrown by this method, and are reported appropriately.
+ * @return program exit status.
+ */
+ protected abstract int doWork();
+
+ public void instanceMainWithExit(final String[] argv) {
+ System.exit(instanceMain(argv));
+ }
+
+ public int instanceMain(final String[] argv) {
+ if (!parseArgs(argv)) {
+ return 1;
+ }
+
+ // Provide one temp directory if the caller didn't
+ if (this.TMP_DIR == null) this.TMP_DIR = new ArrayList<File>();
+ if (this.TMP_DIR.isEmpty()) TMP_DIR.add(IOUtil.getDefaultTmpDir());
+
+ // Build the default headers
+ final Date startDate = new Date();
+ this.defaultHeaders.add(new StringHeader(commandLine));
+ this.defaultHeaders.add(new StringHeader("Started on: " + startDate));
+
+ Log.setGlobalLogLevel(VERBOSITY);
+ if (System.getProperty("ga4gh.client_secrets") == null) {
+ System.setProperty("ga4gh.client_secrets", GA4GH_CLIENT_SECRETS);
+ }
+ SamReaderFactory.setDefaultValidationStringency(VALIDATION_STRINGENCY);
+ BlockCompressedOutputStream.setDefaultCompressionLevel(COMPRESSION_LEVEL);
+
+ if (MAX_RECORDS_IN_RAM != null) {
+ SAMFileWriterImpl.setDefaultMaxRecordsInRam(MAX_RECORDS_IN_RAM);
+ }
+
+ if (CREATE_INDEX){
+ SAMFileWriterFactory.setDefaultCreateIndexWhileWriting(true);
+ }
+
+ SAMFileWriterFactory.setDefaultCreateMd5File(CREATE_MD5_FILE);
+
+ for (final File f : TMP_DIR) {
+ // Intentially not checking the return values, because it may be that the program does not
+ // need a tmp_dir. If this fails, the problem will be discovered downstream.
+ if (!f.exists()) f.mkdirs();
+ f.setReadable(true, false);
+ f.setWritable(true, false);
+ System.setProperty("java.io.tmpdir", f.getAbsolutePath()); // in loop so that last one takes effect
+ }
+
+ if (!QUIET) {
+ System.err.println("[" + new Date() + "] " + commandLine);
+
+ // Output a one liner about who/where and what software/os we're running on
+ try {
+ System.err.println("[" + new Date() + "] Executing as " +
+ System.getProperty("user.name") + "@" + InetAddress.getLocalHost().getHostName() +
+ " on " + System.getProperty("os.name") + " " + System.getProperty("os.version") +
+ " " + System.getProperty("os.arch") + "; " + System.getProperty("java.vm.name") +
+ " " + System.getProperty("java.runtime.version") +
+ "; Picard version: " + commandLineParser.getVersion() +
+ " " + (DeflaterFactory.usingIntelDeflater()? "IntelDeflater": "JdkDeflater"));
+ }
+ catch (Exception e) { /* Unpossible! */ }
+ }
+
+ int ret = -1;
+ try {
+ ret = doWork();
+ } finally {
+ try {
+ // Emit the time even if program throws
+ if (!QUIET) {
+ final Date endDate = new Date();
+ final double elapsedMinutes = (endDate.getTime() - startDate.getTime()) / (1000d * 60d);
+ final String elapsedString = new DecimalFormat("#,##0.00").format(elapsedMinutes);
+ System.err.println("[" + endDate + "] " + getClass().getName() + " done. Elapsed time: " + elapsedString + " minutes.");
+ System.err.println("Runtime.totalMemory()=" + Runtime.getRuntime().totalMemory());
+ if (ret != 0 && CommandLineParser.hasWebDocumentation(this.getClass())) System.err.println(CommandLineParser.getFaqLink());
+ }
+ }
+ catch (Throwable e) {
+ // do nothing
+ }
+ }
+ return ret;
+ }
+
+ /**
+ * Put any custom command-line validation in an override of this method.
+ * clp is initialized at this point and can be used to print usage and access argv.
+ * Any options set by command-line parser can be validated.
+ * @return null if command line is valid. If command line is invalid, returns an array of error message
+ * to be written to the appropriate place.
+ */
+ protected String[] customCommandLineValidation() {
+ final List<String> ret = new ArrayList<String>();
+ for (final Object childOptionsObject : getNestedOptions().values()) {
+ if (childOptionsObject instanceof CommandLineProgram) {
+ final CommandLineProgram childClp = (CommandLineProgram)childOptionsObject;
+ final String[] childErrors = childClp.customCommandLineValidation();
+ if (childErrors != null) {
+ for (final String error: childErrors) {
+ ret.add(error);
+ }
+ }
+ }
+ }
+ if (!ret.isEmpty()) {
+ ret.toArray(new String[ret.size()]);
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @return true if command line is valid
+ */
+ protected boolean parseArgs(final String[] argv) {
+
+ commandLineParser = new CommandLineParser(this);
+ final boolean ret = commandLineParser.parseOptions(System.err, argv);
+ commandLine = commandLineParser.getCommandLine();
+ if (!ret) {
+ return false;
+ }
+ final String[] customErrorMessages = customCommandLineValidation();
+ if (customErrorMessages != null) {
+ for (final String msg : customErrorMessages) {
+ System.err.println(msg);
+ }
+ commandLineParser.usage(System.err, false);
+ return false;
+ }
+ return true;
+ }
+
+ /** Gets a MetricsFile with default headers already written into it. */
+ protected <A extends MetricBase,B extends Comparable<?>> MetricsFile<A,B> getMetricsFile() {
+ final MetricsFile<A,B> file = new MetricsFile<A,B>();
+ for (final Header h : this.defaultHeaders) {
+ file.addHeader(h);
+ }
+
+ return file;
+ }
+
+ public String getStandardUsagePreamble() {
+ return standardUsagePreamble;
+ }
+
+ public CommandLineParser getCommandLineParser() {
+ return commandLineParser;
+ }
+
+
+ /**
+ * @return Version stored in the manifest of the jarfile.
+ */
+ public String getVersion() {
+ return getCommandLineParser().getVersion();
+ }
+
+ public String getCommandLine() {
+ return commandLine;
+ }
+
+ public void setDefaultHeaders(final List<Header> headers) {
+ this.defaultHeaders.clear();
+ this.defaultHeaders.addAll(headers);
+ }
+
+ public List<Header> getDefaultHeaders() {
+ return this.defaultHeaders;
+ }
+
+ /**
+ * @return Map of nested options, where the key is the prefix to be used when specifying Options inside of a nested
+ * options object, and the value is the nested options object itself. Default implementation is to return a
+ * map of all the fields annotated with @NestedOptions, with key being the field name.
+ */
+ public Map<String, Object> getNestedOptions() {
+ return CommandLineParser.getNestedOptions(this);
+ }
+
+ /**
+ * @return Map of nested options, where the key is the prefix to be used when specifying Options inside of a nested
+ * options object, and the value is the nested options object itself, for the purpose of generating help.
+ * Default implementation is to return the same map as getNestedOptions().
+ */
+ public Map<String, Object> getNestedOptionsForHelp() {
+ return getNestedOptions();
+ }
+}
diff --git a/src/java/picard/cmdline/CommandLineProgramGroup.java b/src/java/picard/cmdline/CommandLineProgramGroup.java
new file mode 100644
index 0000000..443a560
--- /dev/null
+++ b/src/java/picard/cmdline/CommandLineProgramGroup.java
@@ -0,0 +1,21 @@
+package picard.cmdline;
+
+import java.util.Comparator;
+
+/**
+ * Interface for groups of CommandLinePrograms.
+ * @author Nils Homer
+ */
+public interface CommandLineProgramGroup {
+
+ /** Gets the name of this program. **/
+ public String getName();
+ /** Gets the description of this program. **/
+ public String getDescription();
+ /** Compares two program groups by name. **/
+ static public Comparator<CommandLineProgramGroup> comparator = new Comparator<CommandLineProgramGroup>() {
+ public int compare(final CommandLineProgramGroup a, final CommandLineProgramGroup b) {
+ return a.getName().compareTo(b.getName());
+ }
+ };
+}
diff --git a/src/java/picard/cmdline/CommandLineProgramProperties.java b/src/java/picard/cmdline/CommandLineProgramProperties.java
new file mode 100644
index 0000000..1bc5f7e
--- /dev/null
+++ b/src/java/picard/cmdline/CommandLineProgramProperties.java
@@ -0,0 +1,46 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import picard.cmdline.programgroups.None;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+
+/**
+ * Annotates a command line program with various properties, such as usage (short and long),
+ * as well as to which program group it belongs.
+ *
+ * TODO: enforced that any CommandLineProgram has this property defined (use an annotation processor?).
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+public @interface CommandLineProgramProperties {
+ String usage();
+ String usageShort();
+ Class<? extends CommandLineProgramGroup> programGroup() default None.class;
+ boolean omitFromCommandLine() default false;
+}
diff --git a/src/java/picard/cmdline/CreateHtmlDocForProgram.java b/src/java/picard/cmdline/CreateHtmlDocForProgram.java
new file mode 100644
index 0000000..c22f5b5
--- /dev/null
+++ b/src/java/picard/cmdline/CreateHtmlDocForProgram.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+/**
+ * Print out the usage for one or more CommandLinePrograms in a form close to what is used in the Sourceforge Picard website.
+ *
+ * @author alecw at broadinstitute.org
+ */
+public class CreateHtmlDocForProgram {
+ public static void main(final String[] args) throws Exception {
+ for (final String clazz : args) {
+ CommandLineProgram mainClass = (CommandLineProgram)Class.forName(clazz).newInstance();
+ CommandLineParser clp = new CommandLineParser(mainClass);
+ clp.htmlUsage(System.out, mainClass.getClass().getSimpleName(), false);
+ }
+ }
+}
diff --git a/src/java/picard/cmdline/CreateHtmlDocForStandardOptions.java b/src/java/picard/cmdline/CreateHtmlDocForStandardOptions.java
new file mode 100644
index 0000000..553cf4f
--- /dev/null
+++ b/src/java/picard/cmdline/CreateHtmlDocForStandardOptions.java
@@ -0,0 +1,45 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+public class CreateHtmlDocForStandardOptions {
+ public static void main(final String[] args) throws Exception {
+ System.setProperty("java.io.tmpdir", "<System temp directory>");
+ System.setProperty("user.name", "<current user name>");
+ CommandLineParser clp = new CommandLineParser(new DummyProgram());
+ clp.htmlPrintOptions(System.out, true);
+ }
+
+ @CommandLineProgramProperties(
+ usage = "",
+ usageShort = "",
+ omitFromCommandLine = true
+ )
+ static class DummyProgram extends CommandLineProgram {
+ @Override
+ protected int doWork() {
+ return 0;
+ }
+ }
+}
diff --git a/src/java/picard/cmdline/NestedOptions.java b/src/java/picard/cmdline/NestedOptions.java
new file mode 100644
index 0000000..0066197
--- /dev/null
+++ b/src/java/picard/cmdline/NestedOptions.java
@@ -0,0 +1,43 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Used to annotate a field in a CommandLineProgram that holds a instance containing @Option-annotated
+ * fields. To set a value for a nested option on the command line, use <member-name>.<option>=value.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.FIELD)
+ at Documented
+public @interface NestedOptions {
+ /** Text that appears for this group of options in text describing usage of the command line program. */
+ String doc() default "";
+
+}
diff --git a/src/java/picard/cmdline/Option.java b/src/java/picard/cmdline/Option.java
new file mode 100644
index 0000000..faf49e7
--- /dev/null
+++ b/src/java/picard/cmdline/Option.java
@@ -0,0 +1,86 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Used to annotate which fields of a CommandLineProgram are options given at the command line.
+ * If a command line call looks like "cmd option=foo x=y bar baz" the CommandLineProgram
+ * would have annotations on fields to handle the values of option and x. All options
+ * must be in the form name=value on the command line. The java type of the option
+ * will be inferred from the type of the field or from the generic type of the collection
+ * if this option is allowed more than once. The type must be an enum or
+ * have a constructor with a single String parameter.
+ *
+ * @author Alec Wysoker
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.FIELD)
+ at Documented
+public @interface Option {
+ /** The name of the option as it would appear on the command line. */
+ String shortName() default "";
+
+ /** Text that appears for this option in text describing usage of the command line program. */
+ String doc() default "";
+
+ /**
+ * If set to false, an exception will be thrown if the option is not specified.
+ * If 2 options are mutually exclusive and both have optional=false it will be
+ * interpreted as one or the other is required and an exception will only be thrown if
+ * neither are specified.
+ */
+ boolean optional() default false;
+
+ /**
+ * Array of option names that cannot be used in conjunction with this one.
+ * If 2 options are mutually exclusive and both have optional=false it will be
+ * interpreted as one OR the other is required and an exception will only be thrown if
+ * neither are specified.
+ */
+ String[] mutex() default {};
+
+ /** The minimum number of times that this option is required. */
+ int minElements() default 0;
+
+ /** The maximum number of times this option is allowed. */
+ int maxElements() default Integer.MAX_VALUE;
+
+ /**
+ * Is this an Option common to all command line programs. If it is then it will only
+ * be displayed in usage info when H or STDHELP is used to display usage.
+ */
+ boolean common() default false;
+
+ /**
+ * This boolean determines if this annotation overrides a parent annotation. If that is the case then
+ * the options of the parent annotation are overridden with this annotation.
+ */
+ boolean overridable() default false;
+}
diff --git a/src/java/picard/cmdline/PicardCommandLine.java b/src/java/picard/cmdline/PicardCommandLine.java
new file mode 100644
index 0000000..f3e4d3a
--- /dev/null
+++ b/src/java/picard/cmdline/PicardCommandLine.java
@@ -0,0 +1,316 @@
+package picard.cmdline;
+
+import htsjdk.samtools.Defaults;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.StringUtil;
+
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+/**
+ * This is the main class of Picard and is the way of executing individual command line programs.
+ *
+ * CommandLinePrograms are listed in a single command line interface based on the java package specified to instanceMain.
+ *
+ * If you want your own single command line program, extend this class and give instanceMain a new list of java packages in which to
+ * search for classes that extend CommandLineProgram.
+ *
+ */
+public class PicardCommandLine {
+ private static final Log log = Log.getInstance(PicardCommandLine.class);
+
+ private static String initializeColor(final String color) {
+ if (CommandLineDefaults.COLOR_STATUS) return color;
+ else return "";
+ }
+
+ /** Provides ANSI colors for the terminal output **/
+ private final static String KNRM = initializeColor("\u001B[0m"); // reset
+ private final static String KBLD = initializeColor("\u001B[1m"); // Bold
+ private final static String KRED = initializeColor("\u001B[31m");
+ private final static String KGRN = initializeColor("\u001B[32m");
+ private final static String KYEL = initializeColor("\u001B[33m");
+ private final static String KBLU = initializeColor("\u001B[34m");
+ private final static String KMAG = initializeColor("\u001B[35m");
+ private final static String KCYN = initializeColor("\u001B[36m");
+ private final static String KWHT = initializeColor("\u001B[37m");
+ private final static String KBLDRED = initializeColor("\u001B[1m\u001B[31m");
+
+ /** The name of this unified command line program **/
+ private final static String COMMAND_LINE_NAME = PicardCommandLine.class.getSimpleName();
+
+ /** The packages we wish to include in our command line **/
+ protected static List<String> getPackageList() {
+ final List<String> packageList = new ArrayList<String>();
+ packageList.add("picard");
+ return packageList;
+ }
+
+ /**
+ * The main method.
+ *
+ * Give a list of java packages in which to search for classes that extend CommandLineProgram. Those will be included
+ * on the command line.
+ * **/
+ protected int instanceMain(final String[] args, final List<String> packageList, final String commandLineName) {
+ final CommandLineProgram program = extractCommandLineProgram(args, packageList, commandLineName);
+ if (null == program) return 1; // no program found!
+ // we can lop off the first two arguments but it requires an array copy or alternatively we could update CLP to remove them
+ // in the constructor do the former in this implementation.
+ final String[] mainArgs = Arrays.copyOfRange(args, 1, args.length);
+ return program.instanceMain(mainArgs);
+ }
+
+ /** For testing **/
+ protected int instanceMain(final String[] args) {
+ return instanceMain(args, getPackageList(), COMMAND_LINE_NAME);
+ }
+
+ /** Override this if you want to include different java packages to search for classes that extend CommandLineProgram. **/
+ public static void main(final String[] args) {
+ System.exit(new PicardCommandLine().instanceMain(args, getPackageList(), COMMAND_LINE_NAME));
+ }
+
+ /** Returns the command line program specified, or prints the usage and exits with exit code 1 **/
+ private static CommandLineProgram extractCommandLineProgram(final String[] args, final List<String> packageList, final String commandLineName) {
+ /** Get the set of classes that are our command line programs **/
+ final ClassFinder classFinder = new ClassFinder();
+ for (final String pkg : packageList) {
+ classFinder.find(pkg, CommandLineProgram.class);
+ }
+ String missingAnnotationClasses = "";
+
+ final Map<String, Class<?>> simpleNameToClass = new HashMap<String, Class<?>>();
+ for (final Class clazz : classFinder.getClasses()) {
+ // No interfaces, synthetic, primitive, local, or abstract classes.
+ if (!clazz.isInterface() && !clazz.isSynthetic() && !clazz.isPrimitive() && !clazz.isLocalClass()
+ && !Modifier.isAbstract(clazz.getModifiers())) {
+ final CommandLineProgramProperties property = getProgramProperty(clazz);
+ // Check for missing annotations
+ if (null == property) {
+ if (missingAnnotationClasses.isEmpty()) missingAnnotationClasses += clazz.getSimpleName();
+ else missingAnnotationClasses += ", " + clazz.getSimpleName();
+ }
+ else if (!property.omitFromCommandLine()) { /** We should check for missing annotations later **/
+ if (simpleNameToClass.containsKey(clazz.getSimpleName())) {
+ throw new RuntimeException("Simple class name collision: " + clazz.getSimpleName());
+ }
+ simpleNameToClass.put(clazz.getSimpleName(), clazz);
+ }
+ }
+ }
+ if (!missingAnnotationClasses.isEmpty()) {
+ throw new RuntimeException("The following classes are missing the required CommandLineProgramProperties annotation: " + missingAnnotationClasses);
+ }
+
+ final Set<Class<?>> classes = new HashSet<Class<?>>();
+ classes.addAll(simpleNameToClass.values());
+
+ if (args.length < 1) {
+ printUsage(classes, commandLineName);
+ } else {
+ if (args[0].equals("-h")) {
+ printUsage(classes, commandLineName);
+ } else if(args[0].equals("--list-commands")) {
+ printCommandList(classes);
+ } else {
+ if (simpleNameToClass.containsKey(args[0])) {
+ final Class clazz = simpleNameToClass.get(args[0]);
+ try {
+ return (CommandLineProgram)clazz.newInstance();
+ } catch (final InstantiationException e) {
+ throw new RuntimeException(e);
+ } catch (final IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ printUsage(classes, commandLineName);
+ printUnknown(classes, args[0]);
+ }
+ }
+ return null;
+ }
+
+ public static CommandLineProgramProperties getProgramProperty(Class clazz) {
+ return (CommandLineProgramProperties)clazz.getAnnotation(CommandLineProgramProperties.class);
+ }
+
+ private static class SimpleNameComparator implements Comparator<Class> {
+ @Override
+ public int compare(final Class aClass, final Class bClass) {
+ return aClass.getSimpleName().compareTo(bClass.getSimpleName());
+ }
+ }
+
+ private static void printCommandList(final Set<Class<?>> classes) {
+ printUsage(classes, null, true, true);
+ }
+
+ private static void printUsage(final Set<Class<?>> classes, final String commandLineName) {
+ printUsage(classes, commandLineName, false, false);
+ }
+
+ private static void printUsage(final Set<Class<?>> classes, final String commandLineName, boolean commandListOnly, boolean toStdout) {
+ final StringBuilder builder = new StringBuilder();
+ if (!commandListOnly) {
+ builder.append(KBLDRED + "USAGE: " + commandLineName + " " + KGRN + "<program name>" + KBLDRED + " [-h]\n\n" + KNRM);
+ builder.append(KBLDRED + "Available Programs:\n" + KNRM);
+ }
+
+ /** Group CommandLinePrograms by CommandLineProgramGroup **/
+ final Map<Class<? extends CommandLineProgramGroup>, CommandLineProgramGroup> programGroupClassToProgramGroupInstance = new HashMap<Class<? extends CommandLineProgramGroup>, CommandLineProgramGroup>();
+ final Map<CommandLineProgramGroup, List<Class>> programsByGroup = new TreeMap<CommandLineProgramGroup, List<Class>>(CommandLineProgramGroup.comparator);
+ final Map<Class, CommandLineProgramProperties> programsToProperty = new HashMap<Class, CommandLineProgramProperties>();
+ for (final Class clazz : classes) {
+ // Get the command line property for this command line program
+ final CommandLineProgramProperties property = getProgramProperty(clazz);
+ if (null == property) {
+ throw new RuntimeException(String.format("The class '%s' is missing the required CommandLineProgramProperties annotation.", clazz.getSimpleName()));
+ }
+ programsToProperty.put(clazz, property);
+ // Get the command line program group for the command line property
+ // NB: we want to minimize the number of times we make a new instance, hence programGroupClassToProgramGroupInstance
+ CommandLineProgramGroup programGroup = programGroupClassToProgramGroupInstance.get(property.programGroup());
+ if (null == programGroup) {
+ try {
+ programGroup = property.programGroup().newInstance();
+ } catch (final InstantiationException e) {
+ throw new RuntimeException(e);
+ } catch (final IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ programGroupClassToProgramGroupInstance.put(property.programGroup(), programGroup);
+ }
+ List<Class> programs = programsByGroup.get(programGroup);
+ if (null == programs) {
+ programsByGroup.put(programGroup, programs = new ArrayList<Class>());
+ }
+ programs.add(clazz);
+ }
+
+ /** Print out the programs in each group **/
+ for (final Map.Entry<CommandLineProgramGroup, List<Class>> entry : programsByGroup.entrySet()) {
+ final CommandLineProgramGroup programGroup = entry.getKey();
+
+ if (!commandListOnly) {
+ builder.append(KWHT + "--------------------------------------------------------------------------------------\n" + KNRM);
+ builder.append(String.format("%s%-48s %-45s%s\n", KRED, programGroup.getName() + ":", programGroup.getDescription(), KNRM));
+ }
+
+ final List<Class> sortedClasses = new ArrayList<Class>();
+ sortedClasses.addAll(entry.getValue());
+ Collections.sort(sortedClasses, new SimpleNameComparator());
+
+ for (final Class clazz : sortedClasses) {
+ final CommandLineProgramProperties property = programsToProperty.get(clazz);
+ if (null == property) {
+ throw new RuntimeException(String.format("Unexpected error: did not find the CommandLineProgramProperties annotation for '%s'", clazz.getSimpleName()));
+ }
+ if (!commandListOnly) {
+ if (clazz.getSimpleName().length() >= 45) {
+ builder.append(String.format("%s %s %s%s%s\n", KGRN, clazz.getSimpleName(), KCYN, property.usageShort(), KNRM));
+ } else {
+ builder.append(String.format("%s %-45s%s%s%s\n", KGRN, clazz.getSimpleName(), KCYN, property.usageShort(), KNRM));
+ }
+ }
+ else {
+ builder.append(clazz.getSimpleName() + "\n");
+ }
+ }
+ if (!commandListOnly) builder.append(String.format("\n"));
+ }
+ if (!commandListOnly) builder.append(KWHT + "--------------------------------------------------------------------------------------\n\n" + KNRM);
+ if (toStdout) {
+ System.out.print(builder.toString());
+ }
+ else {
+ System.err.print(builder.toString());
+ }
+ }
+
+ /** similarity floor for matching in printUnknown **/
+ private final static int HELP_SIMILARITY_FLOOR = 7;
+ private final static int MINIMUM_SUBSTRING_LENGTH = 5;
+
+ /** When a command does not match any known command, searches for similar commands, using the same method as GIT **/
+ public static void printUnknown(final Set<Class<?>> classes, final String command) {
+ final Map<Class, Integer> distances = new HashMap<Class, Integer>();
+
+ int bestDistance = Integer.MAX_VALUE;
+ int bestN = 0;
+
+ // Score against all classes
+ for (final Class clazz : classes) {
+ final String name = clazz.getSimpleName();
+ final int distance;
+ if (name.equals(command)) {
+ throw new RuntimeException("Command matches: " + command);
+ }
+ if (name.startsWith(command) || (MINIMUM_SUBSTRING_LENGTH <= command.length() && name.contains(command))) {
+ distance = 0;
+ }
+ else {
+ distance = StringUtil.levenshteinDistance(command, name, 0, 2, 1, 4);
+ }
+ distances.put(clazz, distance);
+
+ if (distance < bestDistance) {
+ bestDistance = distance;
+ bestN = 1;
+ }
+ else if (distance == bestDistance) {
+ bestN++;
+ }
+ }
+
+ // Upper bound on the similarity score
+ if (0 == bestDistance && bestN == classes.size()) {
+ bestDistance = HELP_SIMILARITY_FLOOR + 1;
+ }
+
+ // Output similar matches
+ System.err.println(String.format("'%s' is not a valid command. See PicardCommandLine --help for more information.", command));
+ if (bestDistance < HELP_SIMILARITY_FLOOR) {
+ System.err.println(String.format("Did you mean %s?", (bestN < 2) ? "this" : "one of these"));
+ for (final Class clazz : classes) {
+ if (bestDistance == distances.get(clazz)) {
+ System.err.println(String.format(" %s", clazz.getSimpleName()));
+ }
+ }
+ }
+ }
+}
diff --git a/src/java/picard/cmdline/PositionalArguments.java b/src/java/picard/cmdline/PositionalArguments.java
new file mode 100644
index 0000000..ec8c9c5
--- /dev/null
+++ b/src/java/picard/cmdline/PositionalArguments.java
@@ -0,0 +1,52 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Used to annotate which field of a CommandLineProgram should store parameters given at the
+ * command line which are not options. Fields with this annotation must be a Collection
+ * (and probably should be a List if order is important).
+ * If a command line call looks like "cmd option=foo x=y bar baz" the values "bar" and "baz"
+ * would be added to the collection with this annotation. The java type of the arguments
+ * will be inferred from the generic type of the collection. The type must be an enum or
+ * have a constructor with a single String parameter.
+ *
+ * @author Alec Wysoker
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.FIELD)
+ at Documented
+public @interface PositionalArguments {
+ /** The minimum number of arguments required. */
+ int minElements() default 0;
+
+ /** The maximum number of arguments allowed. */
+ int maxElements() default Integer.MAX_VALUE;
+}
diff --git a/src/java/picard/cmdline/StandardOptionDefinitions.java b/src/java/picard/cmdline/StandardOptionDefinitions.java
new file mode 100644
index 0000000..4620800
--- /dev/null
+++ b/src/java/picard/cmdline/StandardOptionDefinitions.java
@@ -0,0 +1,48 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+/**
+ * A set of String constants in which the name of the constant (minus the _SHORT_NAME suffix)
+ * is the standard long Option name, and the value of the constant is the standard shortName.
+ */
+public class StandardOptionDefinitions {
+ public static final String INPUT_SHORT_NAME = "I";
+ public static final String OUTPUT_SHORT_NAME = "O";
+ public static final String REFERENCE_SHORT_NAME = "R";
+ public static final String SAMPLE_ALIAS_SHORT_NAME = "ALIAS";
+ public static final String LIBRARY_NAME_SHORT_NAME = "LIB";
+ public static final String EXPECTED_INSERT_SIZE_SHORT_NAME = "INSERT";
+ public static final String LANE_SHORT_NAME = "L";
+ public static final String SEQUENCE_DICTIONARY_SHORT_NAME = "SD";
+ public static final String METRICS_FILE_SHORT_NAME = "M";
+ public static final String ASSUME_SORTED_SHORT_NAME = "AS";
+ public static final String PF_READS_ONLY_SHORT_NAME = "PF";
+ public static final String MINIMUM_MAPPING_QUALITY_SHORT_NAME = "MQ";
+ public static final String READ_GROUP_ID_SHORT_NAME = "RG";
+ public static final String PROGRAM_RECORD_ID_SHORT_NAME = "PG";
+ public static final String MINIMUM_LOD_SHORT_NAME = "LOD";
+ public static final String SORT_ORDER_SHORT_NAME = "SO";
+ public static final String USE_ORIGINAL_QUALITIES_SHORT_NAME = "OQ";
+}
diff --git a/src/java/picard/cmdline/programgroups/Fasta.java b/src/java/picard/cmdline/programgroups/Fasta.java
new file mode 100644
index 0000000..5edb46d
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/Fasta.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+* @author nhomer
+*/
+public class Fasta implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "Fasta"; }
+ @Override
+ public String getDescription() { return "Tools for manipulating FASTA, or related data."; }
+}
diff --git a/src/java/picard/cmdline/programgroups/Illumina.java b/src/java/picard/cmdline/programgroups/Illumina.java
new file mode 100644
index 0000000..4f8a043
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/Illumina.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+* @author nhomer
+*/
+public class Illumina implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "Illumina Tools"; }
+ @Override
+ public String getDescription() { return "Tools for manipulating data specific to Illumina sequencers."; }
+}
diff --git a/src/java/picard/cmdline/programgroups/Intervals.java b/src/java/picard/cmdline/programgroups/Intervals.java
new file mode 100644
index 0000000..1de82ca
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/Intervals.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+* @author nhomer
+*/
+public class Intervals implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "Interval Tools"; }
+ @Override
+ public String getDescription() { return "Tools for manipulating Picard interval lists."; }
+}
diff --git a/src/java/picard/cmdline/programgroups/Metrics.java b/src/java/picard/cmdline/programgroups/Metrics.java
new file mode 100644
index 0000000..34c4299
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/Metrics.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+* @author nhomer
+*/
+public class Metrics implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "Metrics"; }
+ @Override
+ public String getDescription() { return "Tools for reporting metrics on various data types."; }
+}
diff --git a/src/java/picard/cmdline/programgroups/None.java b/src/java/picard/cmdline/programgroups/None.java
new file mode 100644
index 0000000..41f0618
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/None.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+* @author nhomer
+*/
+public class None implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "Miscellaneous Tools"; }
+ @Override
+ public String getDescription() { return "A set of miscellaneous tools."; }
+}
diff --git a/src/java/picard/cmdline/programgroups/SamOrBam.java b/src/java/picard/cmdline/programgroups/SamOrBam.java
new file mode 100644
index 0000000..5020f79
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/SamOrBam.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+* @author nhomer
+*/
+public class SamOrBam implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "SAM/BAM"; }
+ @Override
+ public String getDescription() { return "Tools for manipulating SAM, BAM, or related data."; }
+}
diff --git a/src/java/picard/cmdline/programgroups/Testing.java b/src/java/picard/cmdline/programgroups/Testing.java
new file mode 100644
index 0000000..663f031
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/Testing.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+ * @author nhomer
+ */
+public class Testing implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "Unit Testing"; }
+ @Override
+ public String getDescription() { return "Unit testing"; }
+}
diff --git a/src/java/picard/cmdline/programgroups/VcfOrBcf.java b/src/java/picard/cmdline/programgroups/VcfOrBcf.java
new file mode 100644
index 0000000..52b893c
--- /dev/null
+++ b/src/java/picard/cmdline/programgroups/VcfOrBcf.java
@@ -0,0 +1,13 @@
+package picard.cmdline.programgroups;
+
+import picard.cmdline.CommandLineProgramGroup;
+
+/**
+* @author nhomer.
+*/
+public class VcfOrBcf implements CommandLineProgramGroup {
+ @Override
+ public String getName() { return "VCF/BCF"; }
+ @Override
+ public String getDescription() { return "Tools for manipulating VCF, BCF, or related data."; }
+}
diff --git a/src/java/picard/fastq/BamToBfq.java b/src/java/picard/fastq/BamToBfq.java
new file mode 100644
index 0000000..168bbe2
--- /dev/null
+++ b/src/java/picard/fastq/BamToBfq.java
@@ -0,0 +1,94 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.fastq;
+
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+
+/**
+ * CommandLineProgram to generate to bfq files for use by the Maq aligner
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Create BFQ files from a BAM file for use by the Maq aligner.",
+ usageShort = "Create BFQ files from a BAM file for use by the Maq aligner.",
+ programGroup = SamOrBam.class
+)
+public class BamToBfq extends CommandLineProgram {
+
+ // The following attributes define the command-line arguments
+
+ @Option(doc="The BAM file to parse.", shortName=StandardOptionDefinitions.INPUT_SHORT_NAME) public File INPUT;
+ @Option(doc="The analysis directory for the binary output file. ") public File ANALYSIS_DIR;
+ @Option(doc="Flowcell barcode (e.g. 30PYMAAXX). ", shortName="F", mutex="OUTPUT_FILE_PREFIX") public String FLOWCELL_BARCODE;
+ @Option(doc="Lane number. ", shortName= StandardOptionDefinitions.LANE_SHORT_NAME, optional=true,mutex="OUTPUT_FILE_PREFIX") public Integer LANE;
+ @Option(doc="Prefix for all output files", mutex={"FLOWCELL_BARCODE","LANE"}) public String OUTPUT_FILE_PREFIX;
+ @Option(doc="Number of reads to align (null = all).", shortName="NUM", optional=true) public Integer READS_TO_ALIGN;
+ @Option(doc="Number of reads to break into individual groups for alignment", shortName="CHUNK") public Integer READ_CHUNK_SIZE = 2000000;
+ @Option(doc="Whether this is a paired-end run. ", shortName="PE") public Boolean PAIRED_RUN;
+ @Option(doc="Deprecated option; use READ_NAME_PREFIX instead", mutex="READ_NAME_PREFIX", shortName="RB", optional=true) public String RUN_BARCODE;
+ @Option(doc="Prefix to be stripped off the beginning of all read names (to make them short enough to run in Maq)", optional=true) public String READ_NAME_PREFIX;
+ @Option(doc="Whether to include non-PF reads", shortName="NONPF", optional=true) public Boolean INCLUDE_NON_PF_READS = false;
+ @Option(doc="Whether to clip adapters from the reads") public boolean CLIP_ADAPTERS = true;
+ @Option(doc="The number of bases from each read to write to the bfq file. If this is non-null, then " +
+ "only the first BASES_TO_WRITE bases from each read will be written.", optional=true) public Integer BASES_TO_WRITE = null;
+
+ protected int doWork() {
+
+ String outputPrefix = ANALYSIS_DIR.getAbsolutePath();
+ if (!outputPrefix.endsWith("/")) {
+ outputPrefix += "/";
+ }
+ outputPrefix += OUTPUT_FILE_PREFIX + ".";
+
+ BamToBfqWriter writer = new BamToBfqWriter(INPUT, outputPrefix, READS_TO_ALIGN,
+ READ_CHUNK_SIZE, PAIRED_RUN, READ_NAME_PREFIX,
+ INCLUDE_NON_PF_READS, CLIP_ADAPTERS, BASES_TO_WRITE);
+ writer.writeBfqFiles();
+ return 0;
+ }
+
+ public static void main(String[] argv) {
+ System.exit(new BamToBfq().instanceMain(argv));
+ }
+
+ protected String[] customCommandLineValidation() {
+
+ if (OUTPUT_FILE_PREFIX == null) {
+ OUTPUT_FILE_PREFIX = FLOWCELL_BARCODE + "." + LANE;
+ }
+ if (READ_NAME_PREFIX == null) {
+ READ_NAME_PREFIX = RUN_BARCODE + ":";
+ }
+ return null;
+ }
+
+}
diff --git a/src/java/picard/fastq/BamToBfqWriter.java b/src/java/picard/fastq/BamToBfqWriter.java
new file mode 100644
index 0000000..04dd5d3
--- /dev/null
+++ b/src/java/picard/fastq/BamToBfqWriter.java
@@ -0,0 +1,444 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.fastq;
+
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.filter.AggregateFilter;
+import htsjdk.samtools.filter.FailsVendorReadQualityFilter;
+import htsjdk.samtools.filter.FilteringIterator;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.filter.TagFilter;
+import htsjdk.samtools.filter.WholeReadClippedFilter;
+import htsjdk.samtools.util.BinaryCodec;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import picard.PicardException;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Class to take unmapped reads in BAM file format and create Maq binary fastq format file(s) --
+ * one or two of them, depending on whether it's a paired-end read. This relies on the unmapped
+ * BAM file having all paired reads together in order.
+ */
+public class BamToBfqWriter {
+
+ private static final int SEED_REGION_LENGTH = 28;
+ private static final int MAX_SEED_REGION_NOCALL_FIXES = 2;
+
+ private final File bamFile;
+ private final String outputPrefix;
+ private final String namePrefix;
+ private final int nameTrim;
+ private boolean pairedReads = false;
+ private int wrote = 0;
+ private int increment = 1;
+ private int chunk = 0;
+ private BinaryCodec codec1;
+ private BinaryCodec codec2;
+ private final Log log = Log.getInstance(BamToBfqWriter.class);
+ private final boolean includeNonPfReads;
+ private final boolean clipAdapters;
+ private final Integer basesToWrite;
+
+ /**
+ * Constructor
+ *
+ * @param bamFile the BAM file to read from
+ * @param outputPrefix the directory and file prefix for the binary fastq files
+ * @param total the total number of records that should be written, drawn evenly
+ * from throughout the file (null for all).
+ * @param chunk the maximum number of records that should be written to any one file
+ * @param pairedReads whether these reads are from a paired-end run
+ * @param namePrefix The string to be stripped off the read name
+ * before writing to the bfq file. May be null, in which case
+ * the name will not be trimmed.
+ * @param includeNonPfReads whether to include non pf-reads
+ * @param clipAdapters whether to replace adapters as marked with XT:i clipping position attribute
+ */
+ public BamToBfqWriter(final File bamFile, final String outputPrefix, final Integer total,
+ final Integer chunk, final boolean pairedReads, String namePrefix,
+ boolean includeNonPfReads, boolean clipAdapters, Integer basesToWrite) {
+
+ IOUtil.assertFileIsReadable(bamFile);
+ this.bamFile = bamFile;
+ this.outputPrefix = outputPrefix;
+ this.pairedReads = pairedReads;
+ if (total != null) {
+ final double writeable = (double)countWritableRecords();
+ this.increment = (int)Math.floor(writeable/total.doubleValue());
+ if (this.increment == 0) {
+ this.increment = 1;
+ }
+ }
+ if (chunk != null) {
+ this.chunk = chunk;
+ }
+ this.namePrefix = namePrefix;
+ this.nameTrim = namePrefix != null ? namePrefix.length() : 0;
+ this.includeNonPfReads = includeNonPfReads;
+ this.clipAdapters = clipAdapters;
+ this.basesToWrite = basesToWrite;
+ }
+
+ /**
+ * Constructor
+ *
+ * @param bamFile the BAM file to read from
+ * @param outputPrefix the directory and file prefix for the binary fastq files
+ * @param pairedReads whether these reads are from a paired-end run
+ * @param namePrefix the barcode of the run (to be stripped off the read name
+ * before writing to the bfq file)
+ * @param includeNonPfReads whether to include non pf-reads
+ */
+ public BamToBfqWriter(final File bamFile, final String outputPrefix, final boolean pairedReads,
+ String namePrefix, boolean includeNonPfReads) {
+ this(bamFile, outputPrefix, null, null, pairedReads, namePrefix, includeNonPfReads, true, null);
+ }
+
+ /**
+ * Writes the binary fastq file(s) to the output directory
+ */
+ public void writeBfqFiles() {
+
+ final SamReader reader = SamReaderFactory.makeDefault().open(bamFile);
+ final Iterator<SAMRecord> iterator = reader.iterator();
+
+ // Filter out noise reads and reads that fail the quality filter
+ final TagFilter tagFilter = new TagFilter(ReservedTagConstants.XN, 1);
+ final FailsVendorReadQualityFilter qualityFilter = new FailsVendorReadQualityFilter();
+ final WholeReadClippedFilter clippedFilter = new WholeReadClippedFilter();
+
+
+ if (!pairedReads) {
+ List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
+ filters.add(tagFilter);
+ filters.add(clippedFilter);
+ if (!this.includeNonPfReads) {
+ filters.add(qualityFilter);
+ }
+ writeSingleEndBfqs(iterator, filters);
+ codec1.close();
+ }
+ else {
+ writePairedEndBfqs(iterator, tagFilter, qualityFilter, clippedFilter);
+ codec1.close();
+ codec2.close();
+ }
+ log.info("Wrote " + wrote + " bfq records.");
+ CloserUtil.close(reader);
+ }
+
+ /**
+ * Path for writing bfqs for paired-end reads
+ *
+ * @param iterator the iterator witht he SAM Records to write
+ * @param tagFilter the filter for noise reads
+ * @param qualityFilter the filter for PF reads
+ */
+ private void writePairedEndBfqs(final Iterator<SAMRecord> iterator, final TagFilter tagFilter,
+ final FailsVendorReadQualityFilter qualityFilter,
+ SamRecordFilter ... otherFilters) {
+ // Open the codecs for writing
+ int fileIndex = 0;
+ initializeNextBfqFiles(fileIndex++);
+
+ int records = 0;
+
+ RECORD_LOOP: while (iterator.hasNext()) {
+ final SAMRecord first = iterator.next();
+ if (!iterator.hasNext()) {
+ throw new PicardException("Mismatched number of records in " + this.bamFile.getAbsolutePath());
+ }
+ final SAMRecord second = iterator.next();
+ if (!second.getReadName().equals(first.getReadName()) ||
+ first.getFirstOfPairFlag() == second.getFirstOfPairFlag()) {
+ throw new PicardException("Unmatched read pairs in " + this.bamFile.getAbsolutePath() +
+ ": " + first.getReadName() + ", " + second.getReadName() + ".");
+ }
+
+ // If *both* are noise reads, filter them out
+ if (tagFilter.filterOut(first) && tagFilter.filterOut(second)) {
+ continue;
+ }
+
+ // If either fails to pass filter, then exclude them as well
+ if (!includeNonPfReads && (qualityFilter.filterOut(first) || qualityFilter.filterOut(second))) {
+ continue;
+ }
+
+ // If either fails any of the other filters, exclude them both
+ for (SamRecordFilter filter : otherFilters) {
+ if (filter.filterOut(first) || filter.filterOut(second)) {
+ continue RECORD_LOOP;
+ }
+ }
+
+ // Otherwise, write them out
+ records++;
+ if (records % increment == 0) {
+ first.setReadName(first.getReadName() + "/1");
+ writeFastqRecord(first.getFirstOfPairFlag() ? codec1 : codec2, first);
+ second.setReadName(second.getReadName() + "/2");
+ writeFastqRecord(second.getFirstOfPairFlag() ? codec1 : codec2, second);
+ wrote++;
+ if (wrote % 1000000 == 0) {
+ log.info(wrote + " records written.");
+ }
+ if (chunk > 0 && wrote % chunk == 0) {
+ initializeNextBfqFiles(fileIndex++);
+ }
+ }
+ }
+ }
+
+ /**
+ * Path for writing bfqs for single-end reads
+ *
+ * @param iterator the iterator with he SAM Records to write
+ * @param filters the list of filters to be applied
+ */
+ private void writeSingleEndBfqs(final Iterator<SAMRecord> iterator, final List<SamRecordFilter> filters) {
+
+ // Open the codecs for writing
+ int fileIndex = 0;
+ initializeNextBfqFiles(fileIndex++);
+
+ int records = 0;
+
+ final FilteringIterator it = new FilteringIterator(iterator, new AggregateFilter(filters));
+ while (it.hasNext()) {
+ final SAMRecord record = it.next();
+ records++;
+ if (records % increment == 0) {
+
+ record.setReadName(record.getReadName() + "/1");
+ writeFastqRecord(codec1, record);
+ wrote++;
+ if (wrote % 1000000 == 0) {
+ log.info(wrote + " records processed.");
+ }
+ if (chunk > 0 && wrote % chunk == 0) {
+ initializeNextBfqFiles(fileIndex++);
+ }
+ }
+ }
+ }
+
+ /**
+ * Closes any the open bfq file(s), if any, and opens the new one(s)
+ *
+ * @param fileIndex the index (counter) of the files to write
+ */
+ private void initializeNextBfqFiles(final int fileIndex) {
+ // Close the codecs if they were writing before
+ if (codec1 != null) {
+ codec1.close();
+ if (pairedReads) {
+ codec2.close();
+ }
+ }
+
+ // Open new file, using the fileIndex.
+ final File bfq1 = getOutputFile(this.outputPrefix , 1, fileIndex);
+ codec1 = new BinaryCodec(IOUtil.openFileForWriting(bfq1));
+ log.info("Now writing to file " + bfq1.getAbsolutePath());
+ if (pairedReads) {
+ final File bfq2 = getOutputFile(this.outputPrefix , 2, fileIndex);
+ codec2 = new BinaryCodec(IOUtil.openFileForWriting(bfq2));
+ log.info("Now writing to file " + bfq2.getAbsolutePath());
+ }
+ }
+
+ /**
+ * Writes out a SAMRecord in Maq fastq format
+ *
+ * @param codec the code to write to
+ * @param rec the SAMRecord to write
+ */
+ private void writeFastqRecord(final BinaryCodec codec, final SAMRecord rec) {
+
+ // Trim the run barcode off the read name
+ String readName = rec.getReadName();
+ if (namePrefix != null && readName.startsWith(namePrefix)) {
+ readName = readName.substring(nameTrim);
+ }
+ // Writes the length of the read name and then the name (null-terminated)
+ codec.writeString(readName, true, true);
+
+ final char[] seqs = rec.getReadString().toCharArray();
+ final char[] quals = rec.getBaseQualityString().toCharArray();
+
+ int retainedLength = seqs.length;
+ if (clipAdapters){
+ // adjust to a shorter length iff clipping tag exists
+ Integer trimPoint = rec.getIntegerAttribute(ReservedTagConstants.XT);
+ if (trimPoint != null) {
+ assert (rec.getReadLength() == seqs.length);
+ retainedLength = Math.min(seqs.length, Math.max(SEED_REGION_LENGTH, trimPoint -1));
+ }
+ }
+
+ // Write the length of the sequence
+ codec.writeInt(basesToWrite != null ? basesToWrite : seqs.length);
+
+ // Calculate and write the sequence and qualities
+ final byte[] seqsAndQuals = encodeSeqsAndQuals(seqs, quals, retainedLength);
+ codec.writeBytes(seqsAndQuals);
+ }
+
+ private byte[] encodeSeqsAndQuals(char[] seqs, char[] quals, int retainedLength) {
+ final byte[] seqsAndQuals = new byte[basesToWrite == null ? seqs.length : basesToWrite];
+
+ int seedRegionNoCallFixes = 0;
+ for (int i = 0; i < retainedLength && i < seqsAndQuals.length; i++) {
+ int quality = Math.min(quals[i]-33, 63);
+ final int base;
+ switch(seqs[i]) {
+ case 'A':
+ case 'a':
+ base = 0;
+ break;
+ case 'C':
+ case 'c':
+ base = 1;
+ break;
+ case 'G':
+ case 'g':
+ base = 2;
+ break;
+ case 'T':
+ case 't':
+ base = 3;
+ break;
+ case 'N':
+ case 'n':
+ case '.':
+ base = 0;
+ if (i < SEED_REGION_LENGTH ) {
+ if (seedRegionNoCallFixes < MAX_SEED_REGION_NOCALL_FIXES) {
+ quality = 1;
+ seedRegionNoCallFixes++;
+ }
+ else {
+ quality = 0;
+ }
+ }
+ else {
+ quality = 1;
+ }
+ break;
+ default:
+ throw new PicardException("Unknown base when writing bfq file: " + seqs[i]);
+ }
+ seqsAndQuals[i] = encodeBaseAndQuality(base, quality);
+ }
+ // rewrite clipped adapter with all A's of quality 1
+ for (int i = retainedLength; i < seqsAndQuals.length; i++) {
+ seqsAndQuals[i] = encodeBaseAndQuality(0, 1);
+ }
+
+ return seqsAndQuals;
+ }
+
+ private byte encodeBaseAndQuality(int base, int quality) {
+ return (byte) ((base << 6) | quality);
+ }
+
+ /**
+ * Count the number of records in the bamFile that could potentially be written
+ *
+ * @return the number of records in the Bam file
+ */
+ private int countWritableRecords() {
+ int count = 0;
+
+ final SamReader reader = SamReaderFactory.makeDefault().open(this.bamFile);
+ if(!reader.getFileHeader().getSortOrder().equals(SAMFileHeader.SortOrder.queryname)) {
+ //this is a fix for issue PIC-274: It looks like BamToBfqWriter requires that the input BAM is queryname sorted,
+ //but it doesn't check this early, nor produce an understandable error message."
+ throw new PicardException("Input file (" + this.bamFile.getAbsolutePath() +") needs to be sorted by queryname.");
+ }
+ final PeekableIterator<SAMRecord> it = new PeekableIterator<SAMRecord>(reader.iterator());
+ if (!this.pairedReads) {
+ // Filter out noise reads and reads that fail the quality filter
+ final List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>();
+ filters.add(new TagFilter(ReservedTagConstants.XN, 1));
+ if (!this.includeNonPfReads) {
+ filters.add(new FailsVendorReadQualityFilter());
+ }
+ final FilteringIterator itr = new FilteringIterator(it, new AggregateFilter(filters));
+ while (itr.hasNext()) {
+ itr.next();
+ count++;
+ }
+ }
+ else {
+ while (it.hasNext()) {
+ final SAMRecord first = it.next();
+ final SAMRecord second = it.next();
+ // If both are noise reads, filter them out
+ if (first.getAttribute(ReservedTagConstants.XN) != null &&
+ second.getAttribute(ReservedTagConstants.XN) != null) {
+ // skip it
+ }
+ // If either fails to pass filter, then exclude them as well
+ else if (!this.includeNonPfReads && (first.getReadFailsVendorQualityCheckFlag() || second.getReadFailsVendorQualityCheckFlag()) ) {
+ // skip it
+ }
+ // Otherwise, write them out
+ else {
+ count++;
+ }
+ }
+ }
+ it.close();
+ CloserUtil.close(reader);
+ return count;
+ }
+
+ /**
+ * Constructs the name for the output file and returns the file
+ *
+ * @param outputPrefix the directory and file prefix for the output bfq file
+ * @param read whether this is the file for the first or second read
+ * @param index used in file name
+ * @return a new File object for the bfq file.
+ */
+ private File getOutputFile(final String outputPrefix, final int read, final int index) {
+ final File result = new File(outputPrefix + index + "." + read + ".bfq");
+ IOUtil.assertFileIsWritable(result);
+ return result;
+ }
+
+}
diff --git a/src/java/picard/fastq/Casava18ReadNameEncoder.java b/src/java/picard/fastq/Casava18ReadNameEncoder.java
new file mode 100644
index 0000000..eacae48
--- /dev/null
+++ b/src/java/picard/fastq/Casava18ReadNameEncoder.java
@@ -0,0 +1,46 @@
+package picard.fastq;
+
+import htsjdk.samtools.util.StringUtil;
+import picard.illumina.parser.ClusterData;
+
+/**
+ * A read name encoder conforming to the standard described by Illumina Casava 1.8.
+ *
+ * @see <a href="http://biowulf.nih.gov/apps/CASAVA1_8_Changes.pdf">Casava 1.8 update</a>
+ * @author mccowan
+ */
+public class Casava18ReadNameEncoder implements ReadNameEncoder {
+ final static int CONTROL_FIELD_VALUE = 0;
+ final String runId, instrumentName, flowcellId;
+
+ static enum IsFilteredLabel {
+ Y, N;
+ static IsFilteredLabel get(final boolean passesFilter) {
+ return passesFilter ? N : Y;
+ }
+ }
+
+ public Casava18ReadNameEncoder(final String instrumentName, final String runId, final String flowcellId) {
+ this.runId = runId;
+ this.instrumentName = instrumentName;
+ this.flowcellId = flowcellId;
+ }
+
+ @Override
+ public String generateReadName(final ClusterData cluster, final Integer pairNumber) {
+ return String.format(
+ "%s:%s:%s:%d:%d:%d:%d %s:%s:%d:%s",
+ instrumentName,
+ runId,
+ flowcellId,
+ cluster.getLane(),
+ cluster.getTile(),
+ cluster.getX(),
+ cluster.getY(),
+ StringUtil.asEmptyIfNull(pairNumber),
+ IsFilteredLabel.get(cluster.isPf()),
+ CONTROL_FIELD_VALUE,
+ StringUtil.asEmptyIfNull(cluster.getMatchedBarcode())
+ );
+ }
+}
diff --git a/src/java/picard/fastq/IlluminaReadNameEncoder.java b/src/java/picard/fastq/IlluminaReadNameEncoder.java
new file mode 100644
index 0000000..80b40fc
--- /dev/null
+++ b/src/java/picard/fastq/IlluminaReadNameEncoder.java
@@ -0,0 +1,28 @@
+package picard.fastq;
+
+import picard.illumina.parser.ClusterData;
+
+/**
+ * A read name encoder following the encoding initially produced by picard fastq writers.
+ *
+ * @see <a href="http://en.wikipedia.org/wiki/FASTQ_format#Illumina_sequence_identifiers">Illumina sequence identifiers</a> almost describes the format used here, except instead of an instrument name, we write the run barcode
+ * @author mccowan
+ */
+public class IlluminaReadNameEncoder implements ReadNameEncoder {
+ final String runBarcode;
+ public IlluminaReadNameEncoder(final String runBarcode) {
+ this.runBarcode = runBarcode;
+ }
+
+ @Override
+ public String generateReadName(final ClusterData cluster, final Integer pairNumber) {
+ return runBarcode + ":" + cluster.getLane() + ":" + cluster.getTile() + ":" + cluster.getX() + ":" + cluster.getY() + generatePairNumberSuffix(pairNumber);
+ }
+
+ private static String generatePairNumberSuffix(final Integer pairNumber) {
+ if (pairNumber == null)
+ return "";
+ else
+ return "/" + pairNumber;
+ }
+}
diff --git a/src/java/picard/fastq/ReadNameEncoder.java b/src/java/picard/fastq/ReadNameEncoder.java
new file mode 100644
index 0000000..71837dd
--- /dev/null
+++ b/src/java/picard/fastq/ReadNameEncoder.java
@@ -0,0 +1,17 @@
+package picard.fastq;
+
+import picard.illumina.parser.ClusterData;
+
+/**
+ * @author mccowan
+ */
+public interface ReadNameEncoder {
+ /**
+ * Generates a read name string for the provided cluster.
+ *
+ * @param cluster The cluster whose reads are having its name generated
+ * @param pairNumber 1 if this is the first of the pair, 2 if it is the second, or null if this not a paired read.
+ * @return The read name
+ */
+ String generateReadName(ClusterData cluster, Integer pairNumber);
+}
diff --git a/src/java/picard/illumina/CheckIlluminaDirectory.java b/src/java/picard/illumina/CheckIlluminaDirectory.java
new file mode 100644
index 0000000..bc34da6
--- /dev/null
+++ b/src/java/picard/illumina/CheckIlluminaDirectory.java
@@ -0,0 +1,248 @@
+package picard.illumina;
+
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProcessExecutor;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Illumina;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.illumina.parser.IlluminaDataProviderFactory;
+import picard.illumina.parser.IlluminaDataType;
+import picard.illumina.parser.IlluminaFileUtil;
+import picard.illumina.parser.OutputMapping;
+import picard.illumina.parser.ParameterizedFileUtil;
+import picard.illumina.parser.ReadStructure;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Program to check a lane of an Illumina output directory. This program checks that files exist, are non-zero in length, for every tile/cycle and
+ * specified data type. If NO data type is specified then the default data types used by IlluminaBasecallsToSam are used.
+ */
+ at CommandLineProgramProperties(
+ usage = "Check that the files to provide the data specified by DATA_TYPES are available, exist, and are reasonably sized for every tile/cycle. " +
+ "Reasonably sized means non-zero sized for files that exist per tile and equal size for binary files that exist per cycle/per tile. " +
+ "CheckIlluminaDirectory DOES NOT check that the individual records in a file are well-formed.",
+ usageShort = "Asserts the validity of the data in the specified Illumina basecalling data",
+ programGroup = Illumina.class
+)
+public class CheckIlluminaDirectory extends CommandLineProgram {
+ private static final Log log = Log.getInstance(CheckIlluminaDirectory.class);
+
+ // The following attributes define the command-line arguments
+
+ @Option(doc = "The basecalls output directory. ", shortName = "B")
+ public File BASECALLS_DIR;
+
+ @Option(doc = "The data types that should be checked for each tile/cycle. If no values are provided then the data types checked are those " +
+ "required by IlluminaBaseCallsToSam (which is a superset of those used in ExtractIlluminaBarcodes). These data types vary slightly depending on " +
+ "whether or not the run is barcoded so READ_STRUCTURE should be the same as that which will be passed to IlluminaBasecallsToSam. If this option " +
+ "is left unspecified then both ExtractIlluminaBarcodes and IlluminaBaseCallsToSam should complete successfully UNLESS the " +
+ "individual records of the files themselves are spurious.",
+ shortName = "DT", optional = true)
+ public final Set<IlluminaDataType> DATA_TYPES = new TreeSet<IlluminaDataType>();
+
+ @Option(doc = ReadStructure.PARAMETER_DOC + " Note: If you want to check whether or not a future IlluminaBasecallsToSam or ExtractIlluminaBarcodes " +
+ "run will fail then be sure to use the exact same READ_STRUCTURE that you would pass to these programs for this run.",
+ shortName = "RS")
+ public String READ_STRUCTURE;
+
+ @Option(doc = "The number of the lane(s) to check. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME,
+ minElements = 1)
+ public List<Integer> LANES;
+
+ @Option(doc = "The number(s) of the tile(s) to check. ", shortName = "T", optional = true)
+ public List<Integer> TILE_NUMBERS;
+
+ @Option(doc = "A flag to determine whether or not to create fake versions of the missing files.", shortName = "F",
+ optional = true)
+ public Boolean FAKE_FILES = false;
+
+ @Option(doc = "A flag to create symlinks to the loc file for the X Ten for each tile.", shortName = "X",
+ optional = true)
+ public Boolean LINK_LOCS = false;
+
+ /**
+ * Required main method implementation.
+ */
+ public static void main(final String[] argv) {
+ new CheckIlluminaDirectory().instanceMainWithExit(argv);
+ }
+
+ @Override
+ protected int doWork() {
+ final ReadStructure readStructure = new ReadStructure(READ_STRUCTURE);
+ if (DATA_TYPES.isEmpty()) {
+ DATA_TYPES.addAll(Arrays.asList(IlluminaBasecallsConverter.DATA_TYPES_NO_BARCODE));
+ }
+
+ final List<Integer> failingLanes = new ArrayList<Integer>();
+ int totalFailures = 0;
+
+ final int[] expectedCycles = new OutputMapping(readStructure).getOutputCycles();
+ log.info("Checking lanes(" + StringUtil.join(",", LANES) + " in basecalls directory (" + BASECALLS_DIR
+ .getAbsolutePath() + ")\n");
+ log.info("Expected cycles: " + StringUtil.intValuesToString(expectedCycles));
+
+ for (final Integer lane : LANES) {
+ IlluminaFileUtil fileUtil = new IlluminaFileUtil(BASECALLS_DIR, lane);
+ final List<Integer> expectedTiles = fileUtil.getExpectedTiles();
+ if (!TILE_NUMBERS.isEmpty()) {
+ expectedTiles.retainAll(TILE_NUMBERS);
+ }
+
+ if (LINK_LOCS) {
+ createLocFileSymlinks(fileUtil, lane);
+ //we need to create a new file util because it stores a cache to the files it found on
+ //construction and this doesn't inclue the recently created symlinks
+ fileUtil = new IlluminaFileUtil(BASECALLS_DIR, lane);
+ }
+
+ log.info("Checking lane " + lane);
+ log.info("Expected tiles: " + StringUtil.join(", ", expectedTiles));
+
+ final int numFailures = verifyLane(fileUtil, expectedTiles, expectedCycles, DATA_TYPES, FAKE_FILES);
+
+ if (numFailures > 0) {
+ log.info("Lane " + lane + " FAILED " + " Total Errors: " + numFailures);
+ failingLanes.add(lane);
+ totalFailures += numFailures;
+ } else {
+ log.info("Lane " + lane + " SUCCEEDED ");
+ }
+ }
+
+ int status = 0;
+ if (totalFailures == 0) {
+ log.info("SUCCEEDED! All required files are present and non-empty.");
+ } else {
+ status = totalFailures;
+ log.info("FAILED! There were " + totalFailures + " in the following lanes: " + StringUtil
+ .join(", ", failingLanes));
+ }
+
+ return status;
+ }
+
+ private void createLocFileSymlinks(final IlluminaFileUtil fileUtil, final int lane) {
+ final File baseFile = new File(BASECALLS_DIR.getParentFile().getAbsolutePath() + File.separator + "s.locs");
+ final File newFileBase = new File(baseFile.getParent() + File.separator + IlluminaFileUtil
+ .longLaneStr(lane) + File.separator);
+ if (baseFile.exists()) {
+ boolean success = true;
+ if (!newFileBase.exists()) {
+ success = newFileBase.mkdirs();
+ }
+ if (success) {
+ for (final Integer tile : fileUtil.getExpectedTiles()) {
+ final String newName =
+ newFileBase + File.separator + String.format("s_%d_%d.locs", lane, tile);
+ final ProcessExecutor.ExitStatusAndOutput output =
+ ProcessExecutor.executeAndReturnInterleavedOutput(new String[]{"ln", "-fs", baseFile.getAbsolutePath(), newName});
+ if (output.exitStatus != 0) {
+ throw new PicardException("Could not create symlink: " + output.stdout);
+ }
+ }
+ } else {
+ throw new PicardException(String.format("Could not create lane directory: %s.", newFileBase.getAbsolutePath()));
+ }
+ } else {
+ throw new PicardException(String.format("Locations file %s does not exist.", baseFile.getAbsolutePath()));
+ }
+
+ }
+
+ /**
+ * Use fileUtil to find the data types that would be used by IlluminaDataProvider. Verify that for the expected
+ * tiles/cycles/data types that all the files needed to provide their data is present. This method logs every
+ * error that is found (excluding file faking errors) and returns the number of errors found
+ *
+ * @param fileUtil A file util paramterized with the directory/lane to check
+ * @param expectedTiles The tiles we expect to be available/well-formed
+ * @param cycles The cycles we expect to be available/well-formed
+ * @param dataTypes The data types we expect to be available/well-formed
+ * @return The number of errors found/logged for this directory/lane
+ */
+ private static final int verifyLane(final IlluminaFileUtil fileUtil, final List<Integer> expectedTiles,
+ final int[] cycles,
+ final Set<IlluminaDataType> dataTypes, final boolean fakeFiles) {
+ if (expectedTiles.isEmpty()) {
+ throw new PicardException(
+ "0 input tiles were specified! Check to make sure this lane is in the InterOp file!");
+ }
+
+ if (cycles.length == 0) {
+ throw new PicardException("0 output cycles were specified!");
+ }
+
+ int numFailures = 0;
+
+ //find what request IlluminaDataTypes we have files for and select the most preferred file format available for that type
+ final Map<IlluminaFileUtil.SupportedIlluminaFormat, Set<IlluminaDataType>> formatToDataTypes =
+ IlluminaDataProviderFactory.determineFormats(dataTypes, fileUtil);
+
+ //find if we have any IlluminaDataType with NO available file formats and, if any exist, increase the error count
+ final Set<IlluminaDataType> unmatchedDataTypes =
+ IlluminaDataProviderFactory.findUnmatchedTypes(dataTypes, formatToDataTypes);
+ if (!unmatchedDataTypes.isEmpty()) {
+ if (fakeFiles) {
+ for (final IlluminaDataType dataType : unmatchedDataTypes) {
+ final IlluminaFileUtil.SupportedIlluminaFormat format =
+ IlluminaDataProviderFactory.findPreferredFormat(dataType, fileUtil);
+ fileUtil.getUtil(format).fakeFiles(expectedTiles, cycles, format);
+
+ }
+ }
+ log.info("Could not find a format with available files for the following data types: " + StringUtil
+ .join(", ", new ArrayList<IlluminaDataType>(unmatchedDataTypes)));
+ numFailures += unmatchedDataTypes.size();
+ }
+
+ for (final IlluminaFileUtil.SupportedIlluminaFormat format : formatToDataTypes.keySet()) {
+ final ParameterizedFileUtil util = fileUtil.getUtil(format);
+ final List<String> failures = util.verify(expectedTiles, cycles);
+ //if we have failures and we want to fake files then fake them now.
+ if (!failures.isEmpty() && fakeFiles) {
+ //fake files
+ util.fakeFiles(expectedTiles, cycles, format);
+
+ }
+ numFailures += failures.size();
+ for (final String failure : failures) {
+ log.info(failure);
+ }
+ }
+
+ return numFailures;
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ IOUtil.assertDirectoryIsReadable(BASECALLS_DIR);
+ final List<String> errors = new ArrayList<String>();
+
+ for (final Integer lane : LANES) {
+ if (lane < 1) {
+ errors.add(
+ "LANES must be greater than or equal to 1. LANES passed in " + StringUtil.join(", ", LANES));
+ break;
+ }
+ }
+
+ if (errors.isEmpty()) {
+ return null;
+ } else {
+ return errors.toArray(new String[errors.size()]);
+ }
+ }
+}
diff --git a/src/java/picard/illumina/ClusterDataToSamConverter.java b/src/java/picard/illumina/ClusterDataToSamConverter.java
new file mode 100644
index 0000000..ad4716f
--- /dev/null
+++ b/src/java/picard/illumina/ClusterDataToSamConverter.java
@@ -0,0 +1,174 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.filter.SolexaNoiseFilter;
+import picard.fastq.IlluminaReadNameEncoder;
+import picard.fastq.ReadNameEncoder;
+import picard.illumina.parser.ClusterData;
+import picard.illumina.parser.ReadData;
+import picard.illumina.parser.ReadStructure;
+import picard.util.AdapterMarker;
+import picard.util.AdapterPair;
+import picard.util.IlluminaUtil;
+
+import java.util.List;
+
+/**
+ * Takes ClusterData provided by an IlluminaDataProvider into one or two SAMRecords,
+ * as appropriate, and optionally marking adapter sequence. There is one converter per
+ * IlluminaBasecallsToSam run, and all the TileProcessors use the same converter.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class ClusterDataToSamConverter implements
+ IlluminaBasecallsConverter.ClusterDataConverter<IlluminaBasecallsToSam.SAMRecordsForCluster> {
+
+
+ private final String runBarcode;
+ private final String readGroupId;
+ private final SamRecordFilter filters = new SolexaNoiseFilter();
+ private final boolean isPairedEnd;
+ private final boolean isBarcoded;
+ private final int [] templateIndices;
+ private final int [] barcodeIndices;
+ private final AdapterMarker adapterMarker;
+ private final int outputRecordsPerCluster;
+ private final ReadNameEncoder readNameEncoder;
+
+ /**
+ * Constructor
+ *
+ * @param runBarcode Used to construct read names.
+ * @param readGroupId If non-null, set RG attribute on SAMRecord to this.
+ * @param readStructure The expected structure (number of reads and indexes,
+ * and their length) in the read.
+ * @param adapters The list of adapters to check for in the read
+ */
+ public ClusterDataToSamConverter(final String runBarcode,
+ final String readGroupId,
+ final ReadStructure readStructure,
+ final List<IlluminaUtil.IlluminaAdapterPair> adapters) {
+ this.runBarcode = runBarcode;
+ this.readGroupId = readGroupId;
+
+ this.readNameEncoder = new IlluminaReadNameEncoder(runBarcode);
+
+ this.isPairedEnd = readStructure.templates.length() == 2;
+ this.isBarcoded = !readStructure.barcodes.isEmpty();
+
+ if (adapters.isEmpty()) {
+ this.adapterMarker = null;
+ } else {
+ this.adapterMarker = new AdapterMarker(adapters.toArray(new AdapterPair[adapters.size()]));
+ }
+
+ this.templateIndices = readStructure.templates.getIndices();
+ this.barcodeIndices = readStructure.barcodes.getIndices();
+
+ this.outputRecordsPerCluster = readStructure.templates.length();
+ }
+
+ /**
+ * Creates a new SAM record from the basecall data
+ */
+ private SAMRecord createSamRecord(final ReadData readData, final String readName, final boolean isPf, final boolean firstOfPair, final String unmatchedBarcode) {
+ final SAMRecord sam = new SAMRecord(null);
+ sam.setReadName(readName);
+ sam.setReadBases(readData.getBases());
+ sam.setBaseQualities(readData.getQualities());
+
+ // Flag values
+ sam.setReadPairedFlag(isPairedEnd);
+ sam.setReadUnmappedFlag(true);
+ sam.setReadFailsVendorQualityCheckFlag(!isPf);
+ if (isPairedEnd) {
+ sam.setMateUnmappedFlag(true);
+ sam.setFirstOfPairFlag(firstOfPair);
+ sam.setSecondOfPairFlag(!firstOfPair);
+ }
+
+ if (filters.filterOut(sam)) {
+ sam.setAttribute(ReservedTagConstants.XN, 1);
+ }
+
+ if (this.readGroupId != null) {
+ sam.setAttribute(SAMTag.RG.name(), readGroupId);
+ }
+
+ // If it's a barcoded run and the read isn't assigned to a barcode, then add the barcode
+ // that was read as an optional tag
+ if (unmatchedBarcode != null) {
+ sam.setAttribute(SAMTag.BC.name(), unmatchedBarcode);
+ }
+
+ return sam;
+ }
+
+ /**
+ * Creates the SAMRecord for each read in the cluster
+ */
+ public IlluminaBasecallsToSam.SAMRecordsForCluster convertClusterToOutputRecord(final ClusterData cluster) {
+
+ final IlluminaBasecallsToSam.SAMRecordsForCluster ret = new IlluminaBasecallsToSam.SAMRecordsForCluster(outputRecordsPerCluster);
+ final String readName = readNameEncoder.generateReadName(cluster, null); // Use null here to prevent /1 or /2 suffixes on read name.
+
+ // Get and transform the unmatched barcode, if any, to store with the reads
+ String unmatchedBarcode = null;
+ if (isBarcoded && cluster.getMatchedBarcode() == null) {
+ final byte barcode[][] = new byte[barcodeIndices.length][];
+ for (int i = 0; i < barcodeIndices.length; i++) {
+ barcode[i] = cluster.getRead(barcodeIndices[i]).getBases();
+ }
+ unmatchedBarcode = IlluminaUtil.barcodeSeqsToString(barcode).replace('.', 'N'); //TODO: This has a separator, where as in other places we do not use a separator
+ }
+
+ final SAMRecord firstOfPair = createSamRecord(
+ cluster.getRead(templateIndices[0]), readName, cluster.isPf(), true,unmatchedBarcode);
+ ret.records[0] = firstOfPair;
+
+ SAMRecord secondOfPair = null;
+
+ if(isPairedEnd) {
+ secondOfPair = createSamRecord(
+ cluster.getRead(templateIndices[1]), readName, cluster.isPf(), false, unmatchedBarcode);
+ ret.records[1] = secondOfPair;
+ }
+
+ if (adapterMarker != null) {
+ // Clip the read
+ if (isPairedEnd) {
+ adapterMarker.adapterTrimIlluminaPairedReads(firstOfPair, secondOfPair);
+ }
+ else {
+ adapterMarker.adapterTrimIlluminaSingleRead(firstOfPair);
+ }
+ }
+ return ret;
+ }
+}
diff --git a/src/java/picard/illumina/CollectIlluminaBasecallingMetrics.java b/src/java/picard/illumina/CollectIlluminaBasecallingMetrics.java
new file mode 100644
index 0000000..f15e4de
--- /dev/null
+++ b/src/java/picard/illumina/CollectIlluminaBasecallingMetrics.java
@@ -0,0 +1,276 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina;
+
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.programgroups.Illumina;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.illumina.parser.ClusterData;import picard.illumina.parser.IlluminaDataProvider;import picard.illumina.parser.IlluminaDataProviderFactory;import picard.illumina.parser.IlluminaDataType;import picard.illumina.parser.ReadStructure;import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.Histogram;
+import picard.util.TabbedTextFileWithHeaderParser;
+import htsjdk.samtools.util.StringUtil;
+
+import java.io.File;
+import java.lang.Comparable;import java.lang.Double;import java.lang.Exception;import java.lang.Integer;import java.lang.Math;import java.lang.Override;import java.lang.String;import java.lang.StringBuilder;import java.text.DecimalFormat;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/***
+ * A Command line tool to collect Illumina Basecalling metrics for a sequencing run
+ * Requires a Lane and an input file of Barcodes to expect.
+ * Outputs metrics:
+ * * Mean Clusters Per Tile
+ * * Standard Deviation of Clusters Per Tile
+ * * Mean Pf Clusters Per Tile
+ * * Standard Deviation of Pf Clusters Per Tile
+ * * Mean Percentage of Pf Clusters Per Tile
+ * * Standard Deviation of Percentage of Pf Clusters Per Tile
+ */
+ at CommandLineProgramProperties(
+ usage = CollectIlluminaBasecallingMetrics.USAGE,
+ usageShort = CollectIlluminaBasecallingMetrics.USAGE,
+ programGroup = Illumina.class
+)
+public class CollectIlluminaBasecallingMetrics extends CommandLineProgram {
+ //Command Line Arguments
+ static final String USAGE = "Given an Illumina basecalling and a lane, produces per-lane-barcode basecalling metrics";
+
+ @Option(doc="The Illumina basecalls output directory from which data are read", shortName="B")
+ public File BASECALLS_DIR;
+
+ @Option(doc="The lane whose data will be read", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
+ public Integer LANE;
+
+ // TODO: No longer optional after old workflows are through
+ @Option(doc="The file containing barcodes to expect from the run - barcodeData.#",shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, optional = true)
+ public File INPUT;
+
+ @Option(doc=ReadStructure.PARAMETER_DOC, shortName="RS")
+ public String READ_STRUCTURE;
+
+ @Option(doc="The file to which the collected metrics are written", shortName= StandardOptionDefinitions.OUTPUT_SHORT_NAME, optional = true)
+ public File OUTPUT;
+
+ private int barcodeLength = 0;
+ private String unmatched_barcode;
+ private final SortedMap<String, IlluminaMetricCounts> barcodeToMetricCounts;
+
+ private static final String BARCODE_NAME_COLUMN = "barcode_name";
+ private static final String BARCODE_SEQUENCE_COLUMN_NAME_STUB = "barcode_sequence_";
+
+ public CollectIlluminaBasecallingMetrics() {
+ this.barcodeToMetricCounts = new TreeMap<String, IlluminaMetricCounts>();
+ }
+
+ @Override
+ protected int doWork() {
+ // File and Directory Validation
+ IOUtil.assertDirectoryIsReadable(BASECALLS_DIR);
+ if (OUTPUT == null) OUTPUT = new File(BASECALLS_DIR, String.format("LANE%s_basecalling_metrics", LANE));
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final IlluminaDataProviderFactory factory;
+ final ReadStructure readStructure = new ReadStructure(READ_STRUCTURE);
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
+
+ if (INPUT == null) {
+ // TODO: Legacy support. Remove when INPUT is required, after all old workflows are through
+ factory = new IlluminaDataProviderFactory(BASECALLS_DIR, LANE, readStructure, bclQualityEvaluationStrategy,
+ IlluminaDataType.PF, IlluminaDataType.Position);
+ } else {
+ // Grab expected barcode data from barcodeData.<LANE>
+ IOUtil.assertFileIsReadable(INPUT);
+ final TabbedTextFileWithHeaderParser barcodesParser = new TabbedTextFileWithHeaderParser(INPUT);
+ for (final TabbedTextFileWithHeaderParser.Row row : barcodesParser) {
+ final String barcodeName = row.getField(BARCODE_NAME_COLUMN);
+ final StringBuilder barcode = new StringBuilder();
+ for (int i = 1; i <= readStructure.barcodes.length(); i++) {
+ barcode.append(row.getField(BARCODE_SEQUENCE_COLUMN_NAME_STUB + i));
+ if (barcodeLength == 0) barcodeLength = barcode.length();
+ }
+
+ // Only add the barcode to the hash if it has sequences. For libraries
+ // that don't have barcodes this won't be set in the file.
+ if (barcode.length() > 0) {
+ barcodeToMetricCounts.put(barcode.toString(), new IlluminaMetricCounts(barcode.toString(), barcodeName, LANE));
+ }
+ }
+
+ factory = barcodeToMetricCounts.isEmpty()
+ ? new IlluminaDataProviderFactory(
+ BASECALLS_DIR,
+ LANE,
+ readStructure,
+ bclQualityEvaluationStrategy,
+ IlluminaDataType.PF,
+ IlluminaDataType.Position)
+ : new IlluminaDataProviderFactory(
+ BASECALLS_DIR,
+ LANE,
+ readStructure,
+ bclQualityEvaluationStrategy,
+ IlluminaDataType.PF,
+ IlluminaDataType.Position,
+ IlluminaDataType.Barcodes);
+ }
+
+ unmatched_barcode = StringUtil.repeatCharNTimes('N', barcodeLength);
+
+ //Initialize data provider, iterate over clusters, and collect statistics
+ final IlluminaDataProvider provider = factory.makeDataProvider();
+
+ while (provider.hasNext()) {
+ final ClusterData cluster = provider.next();
+ addCluster(cluster);
+ }
+
+ onComplete();
+ return 0;
+ }
+
+ /***
+ * Process new cluster of Illumina data - increment a running counter of data
+ */
+ private void addCluster(final ClusterData cluster) {
+ //compute hash of Barcode and Lane for key
+ String barcode = cluster.getMatchedBarcode();
+ if (barcode == null) barcode = unmatched_barcode;
+
+ //increment counts
+ IlluminaMetricCounts counters = barcodeToMetricCounts.get(barcode);
+ if (counters == null) {
+ counters = new IlluminaMetricCounts(barcode,null,LANE);
+ barcodeToMetricCounts.put(barcode, counters);
+ }
+ final int tileNumber = cluster.getTile();
+ counters.incrementClusterCount(tileNumber,cluster.isPf());
+ }
+
+ /**
+ * Handles completion of metric collection. Metrics are computed from counts of data and written out to a file.
+ */
+ private void onComplete() {
+ try {
+ final MetricsFile<IlluminaBasecallingMetrics, Comparable<?>> file = getMetricsFile();
+ final IlluminaMetricCounts allLaneCounts = new IlluminaMetricCounts(null, null, LANE);
+ for (final String s : barcodeToMetricCounts.keySet()) {
+ final IlluminaMetricCounts counts = barcodeToMetricCounts.get(s);
+ counts.addMetricsToFile(file);
+ allLaneCounts.addIlluminaMetricCounts(counts);
+ }
+ if (! barcodeToMetricCounts.keySet().contains("")) allLaneCounts.addMetricsToFile(file); // detect non-indexed case
+ file.write(OUTPUT);
+ } catch (final Exception ex) {
+ throw new PicardException("Error writing output file " + OUTPUT.getPath(), ex);
+ }
+ }
+
+ public static void main(final String[] argv) {
+ new CollectIlluminaBasecallingMetrics().instanceMainWithExit(argv);
+ }
+
+ /***
+ * This class manages counts of Illumina Basecalling data on a Per Barcode Per Lane basis. Cluster and PFCluster
+ * counts are stored per tile number.
+ */
+ private class IlluminaMetricCounts {
+ /*** Stores counts of clusters found for a specific Barcode-Lane combination across all tiles. Key = Tile Number, Value = count of clusters***/
+ private final Histogram<Integer> tileToClusterHistogram;
+ /*** Stores counts of pf clusters found for a specific Barcode-Lane combination across all tiles. Key = Tile Number, Value = count of clusters***/
+ private final Histogram<Integer> tileToPfClusterHistogram;
+ final IlluminaBasecallingMetrics metrics;
+
+ public IlluminaMetricCounts(final String barcode, final String barcodeName, final Integer laneNumber) {
+ this.tileToClusterHistogram = new Histogram<Integer>();
+ this.tileToPfClusterHistogram = new Histogram<Integer>();
+ this.metrics = new IlluminaBasecallingMetrics();
+ this.metrics.MOLECULAR_BARCODE_SEQUENCE_1 = barcode;
+ this.metrics.MOLECULAR_BARCODE_NAME = barcodeName;
+ this.metrics.LANE = Integer.toString(laneNumber);
+ }
+
+ /* Increments cluster count by 1 for a given tile number */
+ public void incrementClusterCount(final int tileNumber, final boolean isPf) {
+ incrementClusterCount(tileNumber,1d, isPf);
+ }
+
+ /* Increments cluster count by an amount for a given tile number */
+ public void incrementClusterCount(final int tileNumber, final double incrementAmount, final boolean isPf) {
+ incrementClusterCount(tileNumber, incrementAmount, (isPf ? 1d : 0d));
+ }
+
+ /* Increments cluster count by an amount for a given tile number */
+ public void incrementClusterCount(final Integer tileNumber, final double incrementAmount, final double pfIncrementAmount) {
+ tileToClusterHistogram.increment(tileNumber, incrementAmount);
+ tileToPfClusterHistogram.increment(tileNumber, pfIncrementAmount);
+ }
+
+ /* Handles calculating final metrics and updating the metric object */
+ private void onComplete() {
+ final double meanClustersPerTile = tileToClusterHistogram.getMeanBinSize();
+ metrics.MEAN_CLUSTERS_PER_TILE = Math.round(meanClustersPerTile);
+ metrics.SD_CLUSTERS_PER_TILE = Math.round(tileToClusterHistogram.getStandardDeviationBinSize(meanClustersPerTile));
+
+ final double meanPfClustersPerTile = tileToPfClusterHistogram.getMeanBinSize();
+ metrics.MEAN_PF_CLUSTERS_PER_TILE = Math.round(meanPfClustersPerTile);
+ metrics.SD_PF_CLUSTERS_PER_TILE = Math.round(tileToPfClusterHistogram.getStandardDeviationBinSize(meanPfClustersPerTile));
+
+ final DecimalFormat decFormat = new DecimalFormat("#.##");
+ final Histogram<Integer> laneToPctPfClusterHistogram = tileToPfClusterHistogram.divideByHistogram(tileToClusterHistogram);
+ final double meanPctPfClustersPerTile = laneToPctPfClusterHistogram.getMeanBinSize();
+ metrics.MEAN_PCT_PF_CLUSTERS_PER_TILE = (Double.isNaN(meanPctPfClustersPerTile) ? 0 : Double.valueOf(decFormat.format(meanPctPfClustersPerTile * 100)));
+ metrics.SD_PCT_PF_CLUSTERS_PER_TILE = Double.valueOf(decFormat.format(laneToPctPfClusterHistogram.getStandardDeviationBinSize(meanPctPfClustersPerTile) * 100));
+
+ metrics.TOTAL_CLUSTERS = (long) this.tileToClusterHistogram.getSumOfValues();
+ metrics.PF_CLUSTERS = (long) this.tileToPfClusterHistogram.getSumOfValues();
+
+ final ReadStructure readStructure = new ReadStructure(READ_STRUCTURE);
+ int templateBaseCountPerCluster = 0;
+ for (int i = 0; i < readStructure.templates.length(); i++) templateBaseCountPerCluster += readStructure.templates.get(i).length;
+ metrics.TOTAL_READS = metrics.TOTAL_CLUSTERS * readStructure.templates.length();
+ metrics.PF_READS = metrics.PF_CLUSTERS * readStructure.templates.length();
+ metrics.TOTAL_BASES = metrics.TOTAL_CLUSTERS * templateBaseCountPerCluster;
+ metrics.PF_BASES = metrics.PF_CLUSTERS * templateBaseCountPerCluster;
+
+ }
+
+ /* Computes final metric based on data counts and writes to output metric file */
+ public void addMetricsToFile(final MetricsFile<IlluminaBasecallingMetrics, Comparable<?>> file) {
+ onComplete();
+ file.addMetric(metrics);
+ }
+
+ /* Merges data from another IlluminaMetricCount object into current one.*/
+ public void addIlluminaMetricCounts(final IlluminaMetricCounts counts) {
+ this.tileToClusterHistogram.addHistogram(counts.tileToClusterHistogram);
+ this.tileToPfClusterHistogram.addHistogram(counts.tileToPfClusterHistogram);
+ }
+ }
+}
diff --git a/src/java/picard/illumina/CollectIlluminaLaneMetrics.java b/src/java/picard/illumina/CollectIlluminaLaneMetrics.java
new file mode 100644
index 0000000..a73a157
--- /dev/null
+++ b/src/java/picard/illumina/CollectIlluminaLaneMetrics.java
@@ -0,0 +1,161 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina;
+
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.programgroups.Illumina;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.Tile;
+import picard.illumina.parser.TileMetricsUtil;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.Log;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Command-line wrapper around {@link IlluminaLaneMetricsCollector}.
+ * @author mccowan
+ */
+
+ at CommandLineProgramProperties(
+ usage = CollectIlluminaLaneMetrics.USAGE,
+ usageShort = CollectIlluminaLaneMetrics.USAGE,
+ programGroup = Illumina.class
+)
+public class CollectIlluminaLaneMetrics extends CommandLineProgram {
+ static final String USAGE = "Collects Illumina lane metrics for the given basecalling analysis directory";
+
+ @Option(doc = "The Illumina run directory of the run for which the lane metrics are to be generated")
+ public File RUN_DIRECTORY;
+
+ @Option(doc = "The directory to which the output file will be written")
+ public File OUTPUT_DIRECTORY;
+
+ @Option(doc = "The prefix to be prepended to the file name of the output file; an appropriate suffix will be applied", shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public String OUTPUT_PREFIX;
+
+ @Option(doc= ReadStructure.PARAMETER_DOC, shortName="RS")
+ public ReadStructure READ_STRUCTURE;
+
+ @Override
+ protected int doWork() {
+ final MetricsFile<MetricBase, Comparable<?>> laneMetricsFile = this.getMetricsFile();
+ final MetricsFile<MetricBase, Comparable<?>> phasingMetricsFile = this.getMetricsFile();
+ IlluminaLaneMetricsCollector.collectLaneMetrics(RUN_DIRECTORY, OUTPUT_DIRECTORY, OUTPUT_PREFIX, laneMetricsFile, phasingMetricsFile, READ_STRUCTURE);
+ return 0;
+ }
+
+ public static void main(final String[] args) {
+ new CollectIlluminaLaneMetrics().instanceMainWithExit(args);
+ }
+
+ /**
+ * Utility for collating Tile records from the Illumina TileMetrics file into lane-level and phasing-level metrics.
+ */
+ public static class IlluminaLaneMetricsCollector {
+
+ private final static Log LOG = Log.getInstance(IlluminaLaneMetricsCollector.class);
+
+ /** Returns a partitioned collection of lane number to Tile objects from the provided basecall directory. */
+ public static Map<Integer, Collection<Tile>> readLaneTiles(final File illuminaRunDirectory, final ReadStructure readStructure) {
+ final Collection<Tile> tiles;
+ try {
+ tiles = TileMetricsUtil.parseTileMetrics(TileMetricsUtil.renderTileMetricsFileFromBasecallingDirectory(illuminaRunDirectory), readStructure);
+ } catch (final FileNotFoundException e) {
+ throw new PicardException("Unable to open laneMetrics file.", e);
+ }
+
+ return CollectionUtil.partition(tiles,
+ new CollectionUtil.Partitioner<Tile, Integer>() {
+ @Override
+ public Integer getPartition(final Tile tile) {
+ return tile.getLaneNumber();
+ }
+ });
+ }
+
+ /** Parses the tile data from the basecall directory and writes to both the lane and phasing metrics files */
+ public static void collectLaneMetrics(final File runDirectory, final File outputDirectory, final String outputPrefix,
+ final MetricsFile<MetricBase, Comparable<?>> laneMetricsFile,
+ final MetricsFile<MetricBase, Comparable<?>> phasingMetricsFile,
+ final ReadStructure readStructure) {
+ final Map<Integer, Collection<Tile>> laneTiles = readLaneTiles(runDirectory, readStructure);
+ writeLaneMetrics(laneTiles, outputDirectory, outputPrefix, laneMetricsFile);
+ writePhasingMetrics(laneTiles, outputDirectory, outputPrefix, phasingMetricsFile);
+ }
+
+ public static File writePhasingMetrics(final Map<Integer, Collection<Tile>> laneTiles, final File outputDirectory,
+ final String outputPrefix, final MetricsFile<MetricBase, Comparable<?>> phasingMetricsFile) {
+ for (final Map.Entry<Integer, Collection<Tile>> entry : laneTiles.entrySet()) {
+ for (final IlluminaPhasingMetrics phasingMetric : IlluminaPhasingMetrics.getPhasingMetricsForTiles(entry.getKey()
+ .longValue(),
+ entry.getValue())) {
+ phasingMetricsFile.addMetric(phasingMetric);
+ }
+ }
+
+ return writeMetrics(phasingMetricsFile, outputDirectory, outputPrefix, IlluminaPhasingMetrics.getExtension());
+ }
+
+ public static File writeLaneMetrics(final Map<Integer, Collection<Tile>> laneTiles, final File outputDirectory,
+ final String outputPrefix, final MetricsFile<MetricBase, Comparable<?>> laneMetricsFile) {
+ for (final Map.Entry<Integer, Collection<Tile>> entry : laneTiles.entrySet()) {
+ final IlluminaLaneMetrics laneMetric = new IlluminaLaneMetrics();
+ laneMetric.LANE = entry.getKey().longValue();
+ laneMetric.CLUSTER_DENSITY = calculateLaneDensityFromTiles(entry.getValue());
+ laneMetricsFile.addMetric(laneMetric);
+ }
+
+ return writeMetrics(laneMetricsFile, outputDirectory, outputPrefix, IlluminaLaneMetrics.getExtension());
+ }
+
+ private static File writeMetrics(final MetricsFile<MetricBase, Comparable<?>> metricsFile, final File outputDirectory,
+ final String outputPrefix, final String outputExtension) {
+ final File outputFile = new File(outputDirectory, String.format("%s.%s", outputPrefix, outputExtension));
+ LOG.info(String.format("Writing %s lane metrics to %s ...", metricsFile.getMetrics().size(), outputFile));
+ metricsFile.write(outputFile);
+ return outputFile;
+ }
+
+ private static double calculateLaneDensityFromTiles(final Collection<Tile> tiles) {
+ double area = 0;
+ double clusters = 0;
+ for (final Tile tile : tiles) {
+ area += (tile.getClusterCount() / tile.getClusterDensity());
+ clusters += tile.getClusterCount();
+ }
+ return clusters/area;
+ }
+ }
+}
diff --git a/src/java/picard/illumina/ExtractIlluminaBarcodes.java b/src/java/picard/illumina/ExtractIlluminaBarcodes.java
new file mode 100644
index 0000000..4d2f590
--- /dev/null
+++ b/src/java/picard/illumina/ExtractIlluminaBarcodes.java
@@ -0,0 +1,717 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Illumina;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.illumina.parser.ClusterData;
+import picard.illumina.parser.IlluminaDataProvider;
+import picard.illumina.parser.IlluminaDataProviderFactory;
+import picard.illumina.parser.IlluminaDataType;
+import picard.illumina.parser.ReadDescriptor;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.ReadType;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.util.IlluminaUtil;
+import picard.util.TabbedTextFileWithHeaderParser;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Determine the barcode for each read in an Illumina lane.
+ * For each tile, a file is written to the basecalls directory of the form s_<lane>_<tile>_barcode.txt.
+ * An output file contains a line for each read in the tile, aligned with the regular basecall output
+ * The output file contains the following tab-separated columns:
+ * - read subsequence at barcode position
+ * - Y or N indicating if there was a barcode match
+ * - matched barcode sequence (empty if read did not match one of the barcodes). If there is no match
+ * but we're close to the threshold of calling it a match we output the barcode that would have been
+ * matched but in lower case
+ *
+ * @author jburke at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Determine the barcode for each read in an Illumina lane.\n" +
+ "For each tile, a file is written to the basecalls directory of the form s_<lane>_<tile>_barcode.txt. " +
+ "An output file contains a line for each read in the tile, aligned with the regular basecall output. \n" +
+ "The output file contains the following tab-separated columns: \n" +
+ " * read subsequence at barcode position\n" +
+ " * Y or N indicating if there was a barcode match\n" +
+ " * matched barcode sequence\n" +
+ "Note that the order of specification of barcodes can cause arbitrary differences in output for poorly matching barcodes.\n\n",
+ usageShort = "Tool to determine the barcode for each read in an Illumina lane",
+ programGroup = Illumina.class
+)
+public class ExtractIlluminaBarcodes extends CommandLineProgram {
+
+ // The following attributes define the command-line arguments
+
+ @Option(doc = "The Illumina basecalls directory. ", shortName = "B")
+ public File BASECALLS_DIR;
+
+ @Option(doc = "Where to write _barcode.txt files. By default, these are written to BASECALLS_DIR.", optional = true)
+ public File OUTPUT_DIR;
+
+ @Option(doc = "Lane number. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
+ public Integer LANE;
+
+ @Option(doc = ReadStructure.PARAMETER_DOC, shortName = "RS")
+ public String READ_STRUCTURE;
+
+ @Option(doc = "Barcode sequence. These must be unique, and all the same length. This cannot be used with reads that " +
+ "have more than one barcode; use BARCODE_FILE in that case. ", mutex = {"BARCODE_FILE"})
+ public List<String> BARCODE = new ArrayList<String>();
+
+ @Option(doc = "Tab-delimited file of barcode sequences, barcode name and, optionally, library name. " +
+ "Barcodes must be unique and all the same length. Column headers must be 'barcode_sequence_1', " +
+ "'barcode_sequence_2' (optional), 'barcode_name', and 'library_name'.", mutex = {"BARCODE"})
+ public File BARCODE_FILE;
+
+ @Option(doc = "Per-barcode and per-lane metrics written to this file.", shortName = StandardOptionDefinitions.METRICS_FILE_SHORT_NAME)
+ public File METRICS_FILE;
+
+ @Option(doc = "Maximum mismatches for a barcode to be considered a match.")
+ public int MAX_MISMATCHES = 1;
+
+ @Option(doc = "Minimum difference between number of mismatches in the best and second best barcodes for a barcode to be considered a match.")
+ public int MIN_MISMATCH_DELTA = 1;
+
+ @Option(doc = "Maximum allowable number of no-calls in a barcode read before it is considered unmatchable.")
+ public int MAX_NO_CALLS = 2;
+
+ @Option(shortName = "Q", doc = "Minimum base quality. Any barcode bases falling below this quality will be considered a mismatch even in the bases match.")
+ public int MINIMUM_BASE_QUALITY = 0;
+
+ @Option(doc = "The minimum quality (after transforming 0s to 1s) expected from reads. If qualities are lower than this value, an error is thrown." +
+ "The default of 2 is what the Illumina's spec describes as the minimum, but in practice the value has been observed lower.")
+ public int MINIMUM_QUALITY = BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY;
+
+ @Option(shortName = "GZIP", doc = "Compress output s_l_t_barcode.txt files using gzip and append a .gz extension to the file names.")
+ public boolean COMPRESS_OUTPUTS = false;
+
+ @Option(doc = "Run this many PerTileBarcodeExtractors in parallel. If NUM_PROCESSORS = 0, number of cores is automatically set to " +
+ "the number of cores available on the machine. If NUM_PROCESSORS < 0 then the number of cores used will be " +
+ "the number available on the machine less NUM_PROCESSORS.")
+ public int NUM_PROCESSORS = 1;
+
+ private static final Log LOG = Log.getInstance(ExtractIlluminaBarcodes.class);
+
+ /** The read structure of the actual Illumina Run, i.e. the readStructure of the input data */
+ private ReadStructure readStructure;
+
+ private IlluminaDataProviderFactory factory;
+
+ private final Map<String, BarcodeMetric> barcodeToMetrics = new LinkedHashMap<String, BarcodeMetric>();
+
+ private final NumberFormat tileNumberFormatter = NumberFormat.getNumberInstance();
+ private BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
+
+ public ExtractIlluminaBarcodes() {
+ tileNumberFormatter.setMinimumIntegerDigits(4);
+ tileNumberFormatter.setGroupingUsed(false);
+ }
+
+ @Override
+ protected int doWork() {
+
+ IOUtil.assertFileIsWritable(METRICS_FILE);
+ if (OUTPUT_DIR == null) {
+ OUTPUT_DIR = BASECALLS_DIR;
+ }
+ IOUtil.assertDirectoryIsWritable(OUTPUT_DIR);
+
+ // Create BarcodeMetric for counting reads that don't match any barcode
+ final String[] noMatchBarcode = new String[readStructure.barcodes.length()];
+ int index = 0;
+ for (final ReadDescriptor d : readStructure.descriptors) {
+ if (d.type == ReadType.Barcode) {
+ noMatchBarcode[index++] = StringUtil.repeatCharNTimes('N', d.length);
+ }
+ }
+
+ final BarcodeMetric noMatchMetric = new BarcodeMetric(null, null, IlluminaUtil.barcodeSeqsToString(noMatchBarcode), noMatchBarcode);
+
+ final int numProcessors;
+ if (NUM_PROCESSORS == 0) {
+ numProcessors = Runtime.getRuntime().availableProcessors();
+ } else if (NUM_PROCESSORS < 0) {
+ numProcessors = Runtime.getRuntime().availableProcessors() + NUM_PROCESSORS;
+ } else {
+ numProcessors = NUM_PROCESSORS;
+ }
+
+ LOG.info("Processing with " + numProcessors + " PerTileBarcodeExtractor(s).");
+ final ExecutorService pool = Executors.newFixedThreadPool(numProcessors);
+
+ // TODO: This is terribly inefficient; we're opening a huge number of files via the extractor constructor and we never close them.
+ final List<PerTileBarcodeExtractor> extractors = new ArrayList<PerTileBarcodeExtractor>(factory.getAvailableTiles().size());
+ for (final int tile : factory.getAvailableTiles()) {
+ final PerTileBarcodeExtractor extractor = new PerTileBarcodeExtractor(
+ tile,
+ getBarcodeFile(tile),
+ barcodeToMetrics,
+ noMatchMetric,
+ factory,
+ MINIMUM_BASE_QUALITY,
+ MAX_NO_CALLS,
+ MAX_MISMATCHES,
+ MIN_MISMATCH_DELTA
+ );
+ extractors.add(extractor);
+ }
+ try {
+ for (final PerTileBarcodeExtractor extractor : extractors) {
+ pool.submit(extractor);
+ }
+ pool.shutdown();
+ // Wait a while for existing tasks to terminate
+ if (!pool.awaitTermination(6, TimeUnit.HOURS)) {
+ pool.shutdownNow(); // Cancel any still-executing tasks
+ // Wait a while for tasks to respond to being cancelled
+ if (!pool.awaitTermination(60, TimeUnit.SECONDS))
+ LOG.error("Pool did not terminate");
+ return 1;
+ }
+ } catch (final Throwable e) {
+ // (Re-)Cancel if current thread also interrupted
+ LOG.error(e, "Parent thread encountered problem submitting extractors to thread pool or awaiting shutdown of threadpool. Attempting to kill threadpool.");
+ pool.shutdownNow();
+ return 2;
+ }
+
+ LOG.info("Processed " + extractors.size() + " tiles.");
+ for (final PerTileBarcodeExtractor extractor : extractors) {
+ for (final String key : barcodeToMetrics.keySet()) {
+ barcodeToMetrics.get(key).merge(extractor.getMetrics().get(key));
+ }
+ noMatchMetric.merge(extractor.getNoMatchMetric());
+ if (extractor.getException() != null) {
+ LOG.error("Abandoning metrics calculation because one or more PerTileBarcodeExtractors failed.");
+ return 4;
+ }
+ }
+
+ // Finish metrics tallying.
+ int totalReads = noMatchMetric.READS;
+ int totalPfReads = noMatchMetric.PF_READS;
+ int totalPfReadsAssigned = 0;
+ for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
+ totalReads += barcodeMetric.READS;
+ totalPfReads += barcodeMetric.PF_READS;
+ totalPfReadsAssigned += barcodeMetric.PF_READS;
+ }
+
+ if (totalReads > 0) {
+ noMatchMetric.PCT_MATCHES = noMatchMetric.READS / (double) totalReads;
+ double bestPctOfAllBarcodeMatches = 0;
+ for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
+ barcodeMetric.PCT_MATCHES = barcodeMetric.READS / (double) totalReads;
+ if (barcodeMetric.PCT_MATCHES > bestPctOfAllBarcodeMatches) {
+ bestPctOfAllBarcodeMatches = barcodeMetric.PCT_MATCHES;
+ }
+ }
+ if (bestPctOfAllBarcodeMatches > 0) {
+ noMatchMetric.RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
+ noMatchMetric.PCT_MATCHES / bestPctOfAllBarcodeMatches;
+ for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
+ barcodeMetric.RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
+ barcodeMetric.PCT_MATCHES / bestPctOfAllBarcodeMatches;
+ }
+ }
+ }
+
+ if (totalPfReads > 0) {
+ noMatchMetric.PF_PCT_MATCHES = noMatchMetric.PF_READS / (double) totalPfReads;
+ double bestPctOfAllBarcodeMatches = 0;
+ for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
+ barcodeMetric.PF_PCT_MATCHES = barcodeMetric.PF_READS / (double) totalPfReads;
+ if (barcodeMetric.PF_PCT_MATCHES > bestPctOfAllBarcodeMatches) {
+ bestPctOfAllBarcodeMatches = barcodeMetric.PF_PCT_MATCHES;
+ }
+ }
+ if (bestPctOfAllBarcodeMatches > 0) {
+ noMatchMetric.PF_RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
+ noMatchMetric.PF_PCT_MATCHES / bestPctOfAllBarcodeMatches;
+ for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
+ barcodeMetric.PF_RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT =
+ barcodeMetric.PF_PCT_MATCHES / bestPctOfAllBarcodeMatches;
+ }
+ }
+ }
+
+ // Warn about minimum qualities and assert that we've achieved the minimum.
+ for (Map.Entry<Byte, Integer> entry : bclQualityEvaluationStrategy.getPoorQualityFrequencies().entrySet()) {
+ LOG.warn(String.format("Observed low quality of %s %s times.", entry.getKey(), entry.getValue()));
+ }
+ bclQualityEvaluationStrategy.assertMinimumQualities();
+
+ // Calculate the normalized matches
+ if (totalPfReadsAssigned > 0) {
+ final double mean = (double) totalPfReadsAssigned / (double) barcodeToMetrics.values().size();
+ for (final BarcodeMetric m : barcodeToMetrics.values()) {
+ m.PF_NORMALIZED_MATCHES = m.PF_READS / mean;
+ }
+ }
+
+ final MetricsFile<BarcodeMetric, Integer> metrics = getMetricsFile();
+ for (final BarcodeMetric barcodeMetric : barcodeToMetrics.values()) {
+ metrics.addMetric(barcodeMetric);
+ }
+ metrics.addMetric(noMatchMetric);
+ metrics.write(METRICS_FILE);
+ return 0;
+ }
+
+ /** Create a barcode filename corresponding to the given tile qseq file. */
+ private File getBarcodeFile(final int tile) {
+ return new File(OUTPUT_DIR,
+ "s_" + LANE + "_" + tileNumberFormatter.format(tile) + "_barcode.txt" + (COMPRESS_OUTPUTS ? ".gz" : ""));
+ }
+
+ /**
+ * Validate that POSITION >= 1, and that all BARCODEs are the same length and unique
+ *
+ * @return null if command line is valid. If command line is invalid, returns an array of error message
+ * to be written to the appropriate place.
+ */
+ @Override
+ protected String[] customCommandLineValidation() {
+ final ArrayList<String> messages = new ArrayList<String>();
+
+ this.bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(MINIMUM_QUALITY);
+
+ /**
+ * In extract illumina barcodes we NEVER want to look at the template reads, therefore replace them with skips because
+ * IlluminaDataProvider and its factory will not open these nor produce ClusterData with the template reads in them, thus reducing
+ * the file IO and value copying done by the data provider
+ */
+ readStructure = new ReadStructure(READ_STRUCTURE.replaceAll("T", "S"));
+ final IlluminaDataType[] datatypes = (MINIMUM_BASE_QUALITY > 0) ?
+ new IlluminaDataType[]{IlluminaDataType.BaseCalls, IlluminaDataType.PF, IlluminaDataType.QualityScores} :
+ new IlluminaDataType[]{IlluminaDataType.BaseCalls, IlluminaDataType.PF};
+ factory = new IlluminaDataProviderFactory(BASECALLS_DIR, LANE, readStructure, bclQualityEvaluationStrategy, datatypes);
+
+ if (BARCODE_FILE != null) {
+ parseBarcodeFile(messages);
+ } else {
+ final Set<String> barcodes = new HashSet<String>();
+ for (final String barcode : BARCODE) {
+ if (barcodes.contains(barcode)) {
+ messages.add("Barcode " + barcode + " specified more than once.");
+ }
+ barcodes.add(barcode);
+ final BarcodeMetric metric = new BarcodeMetric(null, null, barcode, new String[]{barcode});
+ barcodeToMetrics.put(barcode, metric);
+ }
+ }
+ if (barcodeToMetrics.keySet().size() == 0) {
+ messages.add("No barcodes have been specified.");
+ }
+ if (messages.size() == 0) {
+ return null;
+ }
+ return messages.toArray(new String[messages.size()]);
+ }
+
+ public static void main(final String[] argv) {
+ new ExtractIlluminaBarcodes().instanceMainWithExit(argv);
+ }
+
+ private static final String BARCODE_SEQUENCE_COLUMN = "barcode_sequence";
+ private static final String BARCODE_SEQUENCE_1_COLUMN = "barcode_sequence_1";
+ private static final String BARCODE_NAME_COLUMN = "barcode_name";
+ private static final String LIBRARY_NAME_COLUMN = "library_name";
+
+ private void parseBarcodeFile(final ArrayList<String> messages) {
+ final TabbedTextFileWithHeaderParser barcodesParser = new TabbedTextFileWithHeaderParser(BARCODE_FILE);
+ final String sequenceColumn = barcodesParser.hasColumn(BARCODE_SEQUENCE_COLUMN)
+ ? BARCODE_SEQUENCE_COLUMN : barcodesParser.hasColumn(BARCODE_SEQUENCE_1_COLUMN)
+ ? BARCODE_SEQUENCE_1_COLUMN : null;
+ if (sequenceColumn == null) {
+ messages.add(BARCODE_FILE + " does not have " + BARCODE_SEQUENCE_COLUMN + " or " +
+ BARCODE_SEQUENCE_1_COLUMN + " column header");
+ return;
+ }
+ final boolean hasBarcodeName = barcodesParser.hasColumn(BARCODE_NAME_COLUMN);
+ final boolean hasLibraryName = barcodesParser.hasColumn(LIBRARY_NAME_COLUMN);
+ final int numBarcodes = readStructure.barcodes.length();
+ final Set<String> barcodes = new HashSet<String>();
+ for (final TabbedTextFileWithHeaderParser.Row row : barcodesParser) {
+ final String bcStrings[] = new String[numBarcodes];
+ int barcodeNum = 1;
+ for (final ReadDescriptor rd : readStructure.descriptors) {
+ if (rd.type != ReadType.Barcode) continue;
+ final String header = barcodeNum == 1 ? sequenceColumn : "barcode_sequence_" + String.valueOf(barcodeNum);
+ bcStrings[barcodeNum - 1] = row.getField(header);
+ barcodeNum++;
+ }
+ final String bcStr = IlluminaUtil.barcodeSeqsToString(bcStrings);
+ if (barcodes.contains(bcStr)) {
+ messages.add("Barcode " + bcStr + " specified more than once in " + BARCODE_FILE);
+ }
+ barcodes.add(bcStr);
+ final String barcodeName = (hasBarcodeName ? row.getField(BARCODE_NAME_COLUMN) : "");
+ final String libraryName = (hasLibraryName ? row.getField(LIBRARY_NAME_COLUMN) : "");
+ final BarcodeMetric metric = new BarcodeMetric(barcodeName, libraryName, bcStr, bcStrings);
+ barcodeToMetrics.put(StringUtil.join("", bcStrings), metric);
+ }
+ barcodesParser.close();
+ }
+
+ /**
+ * Metrics produced by the ExtractIlluminaBarcodes program that is used to parse data in
+ * the basecalls directory and determine to which barcode each read should be assigned.
+ */
+ public static class BarcodeMetric extends MetricBase {
+ /**
+ * The barcode (from the set of expected barcodes) for which the following metrics apply.
+ * Note that the "symbolic" barcode of NNNNNN is used to report metrics for all reads that
+ * do not match a barcode.
+ */
+ public String BARCODE;
+ public String BARCODE_NAME = "";
+ public String LIBRARY_NAME = "";
+ /** The total number of reads matching the barcode. */
+ public int READS = 0;
+ /** The number of PF reads matching this barcode (always less than or equal to READS). */
+ public int PF_READS = 0;
+ /** The number of all reads matching this barcode that matched with 0 errors or no-calls. */
+ public int PERFECT_MATCHES = 0;
+ /** The number of PF reads matching this barcode that matched with 0 errors or no-calls. */
+ public int PF_PERFECT_MATCHES = 0;
+ /** The number of all reads matching this barcode that matched with 1 error or no-call. */
+ public int ONE_MISMATCH_MATCHES = 0;
+ /** The number of PF reads matching this barcode that matched with 1 error or no-call. */
+ public int PF_ONE_MISMATCH_MATCHES = 0;
+ /** The percentage of all reads in the lane that matched to this barcode. */
+ public double PCT_MATCHES = 0d;
+ /**
+ * The rate of all reads matching this barcode to all reads matching the most prevelant barcode. For the
+ * most prevelant barcode this will be 1, for all others it will be less than 1 (except for the possible
+ * exception of when there are more orphan reads than for any other barcode, in which case the value
+ * may be arbitrarily large). One over the lowest number in this column gives you the fold-difference
+ * in representation between barcodes.
+ */
+ public double RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT = 0d;
+ /** The percentage of PF reads in the lane that matched to this barcode. */
+ public double PF_PCT_MATCHES = 0d;
+
+ /**
+ * The rate of PF reads matching this barcode to PF reads matching the most prevelant barcode. For the
+ * most prevelant barcode this will be 1, for all others it will be less than 1 (except for the possible
+ * exception of when there are more orphan reads than for any other barcode, in which case the value
+ * may be arbitrarily large). One over the lowest number in this column gives you the fold-difference
+ * in representation of PF reads between barcodes.
+ */
+ public double PF_RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT = 0d;
+
+ /**
+ * The "normalized" matches to each barcode. This is calculated as the number of pf reads matching
+ * this barcode over the sum of all pf reads matching any barcode (excluding orphans). If all barcodes
+ * are represented equally this will be 1.
+ */
+ public double PF_NORMALIZED_MATCHES;
+
+ protected byte[][] barcodeBytes;
+
+ public BarcodeMetric(final String barcodeName, final String libraryName,
+ final String barcodeDisplay, final String[] barcodeSeqs) {
+
+ this.BARCODE = barcodeDisplay;
+ this.BARCODE_NAME = barcodeName;
+ this.LIBRARY_NAME = libraryName;
+ this.barcodeBytes = new byte[barcodeSeqs.length][];
+ for (int i = 0; i < barcodeSeqs.length; i++) {
+ barcodeBytes[i] = htsjdk.samtools.util.StringUtil.stringToBytes(barcodeSeqs[i]);
+ }
+ }
+
+ /** This ctor is necessary for when reading metrics from file */
+ public BarcodeMetric() {
+ barcodeBytes = null;
+ }
+
+ /** Creates a copy of metric initialized with only non-accumulated and non-calculated values set */
+ public static BarcodeMetric copy(final BarcodeMetric metric) {
+ final BarcodeMetric result = new BarcodeMetric();
+ result.BARCODE = metric.BARCODE;
+ result.BARCODE_NAME = metric.BARCODE_NAME;
+ result.LIBRARY_NAME = metric.LIBRARY_NAME;
+ result.barcodeBytes = metric.barcodeBytes;
+ return result;
+ }
+
+ /**
+ * Adds the non-calculated
+ *
+ * @param metric
+ */
+ public void merge(final BarcodeMetric metric) {
+ this.READS += metric.READS;
+ this.PF_READS += metric.PF_READS;
+ this.PERFECT_MATCHES += metric.PERFECT_MATCHES;
+ this.PF_PERFECT_MATCHES += metric.PF_PERFECT_MATCHES;
+ this.ONE_MISMATCH_MATCHES += metric.ONE_MISMATCH_MATCHES;
+ this.PF_ONE_MISMATCH_MATCHES += metric.PF_ONE_MISMATCH_MATCHES;
+ }
+
+ }
+
+ /** Extracts barcodes and accumulates metrics for an entire tile. */
+ private static class PerTileBarcodeExtractor implements Runnable {
+ private final int tile;
+ private final File barcodeFile;
+ private final Map<String, BarcodeMetric> metrics;
+ private final BarcodeMetric noMatch;
+ private Exception exception = null;
+ private final boolean usingQualityScores;
+ private final IlluminaDataProvider provider;
+ private final ReadStructure outputReadStructure;
+ private final int maxNoCalls, maxMismatches, minMismatchDelta, minimumBaseQuality;
+
+ /** Utility class to hang onto data about the best match for a given barcode */
+ class BarcodeMatch {
+ boolean matched;
+ String barcode;
+ int mismatches;
+ int mismatchesToSecondBest;
+ }
+
+ /**
+ * Constructor
+ *
+ * @param tile The number of the tile being processed; used for logging only.
+ * @param barcodeFile The file to write the barcodes to
+ * @param noMatchMetric A "template" metric that is cloned and the clone is stored internally for accumulating data
+ * @param barcodeToMetrics A "template" metric map whose metrics are cloned, and the clones are stored internally for accumulating data
+ */
+ public PerTileBarcodeExtractor(
+ final int tile,
+ final File barcodeFile,
+ final Map<String, BarcodeMetric> barcodeToMetrics,
+ final BarcodeMetric noMatchMetric,
+ final IlluminaDataProviderFactory factory,
+ final int minimumBaseQuality,
+ final int maxNoCalls,
+ final int maxMismatches,
+ final int minMismatchDelta
+ ) {
+ this.tile = tile;
+ this.barcodeFile = barcodeFile;
+ this.usingQualityScores = minimumBaseQuality > 0;
+ this.maxNoCalls = maxNoCalls;
+ this.maxMismatches = maxMismatches;
+ this.minMismatchDelta = minMismatchDelta;
+ this.minimumBaseQuality = minimumBaseQuality;
+ this.metrics = new LinkedHashMap<String, BarcodeMetric>(barcodeToMetrics.size());
+ for (final String key : barcodeToMetrics.keySet()) {
+ this.metrics.put(key, BarcodeMetric.copy(barcodeToMetrics.get(key)));
+ }
+ this.noMatch = BarcodeMetric.copy(noMatchMetric);
+ this.provider = factory.makeDataProvider(Arrays.asList(tile));
+ this.outputReadStructure = factory.getOutputReadStructure();
+
+ }
+
+ // These methods return the results of the extraction
+ public synchronized Map<String, BarcodeMetric> getMetrics() {
+ return this.metrics;
+ }
+
+ public synchronized BarcodeMetric getNoMatchMetric() { return this.noMatch; }
+
+ public synchronized Exception getException() { return this.exception; }
+
+ /** run method which extracts barcodes and accumulates metrics for an entire tile */
+ synchronized public void run() {
+ try {
+ LOG.info("Extracting barcodes for tile " + tile);
+
+ //Sometimes makeDataProvider takes a while waiting for slow file IO, for each tile the needed set of files
+ //is non-overlapping sets of files so make the data providers in the individual threads for PerTileBarcodeExtractors
+ //so they are not all waiting for each others file operations
+
+ //Most likely we have SKIPS in our read structure since we replace all template reads with skips in the input data structure
+ //(see customCommnandLineValidation), therefore we must use the outputReadStructure to index into the output cluster data
+ final int[] barcodeIndices = outputReadStructure.barcodes.getIndices();
+ final BufferedWriter writer = IOUtil.openFileForBufferedWriting(barcodeFile);
+ final byte barcodeSubsequences[][] = new byte[barcodeIndices.length][];
+ final byte qualityScores[][] = usingQualityScores ? new byte[barcodeIndices.length][] : null;
+ while (provider.hasNext()) {
+ // Extract the barcode from the cluster and write it to the file for the tile
+ final ClusterData cluster = provider.next();
+ for (int i = 0; i < barcodeIndices.length; i++) {
+ barcodeSubsequences[i] = cluster.getRead(barcodeIndices[i]).getBases();
+ if (usingQualityScores) qualityScores[i] = cluster.getRead(barcodeIndices[i]).getQualities();
+ }
+ final boolean passingFilter = cluster.isPf();
+ final BarcodeMatch match = findBestBarcodeAndUpdateMetrics(barcodeSubsequences, qualityScores, passingFilter, metrics, noMatch);
+
+ final String yOrN = (match.matched ? "Y" : "N");
+
+ for (final byte[] bc : barcodeSubsequences) {
+ writer.write(StringUtil.bytesToString(bc));
+ }
+ writer.write("\t" + yOrN + "\t" + match.barcode + "\t" + String.valueOf(match.mismatches) +
+ "\t" + String.valueOf(match.mismatchesToSecondBest));
+ writer.newLine();
+ }
+ writer.close();
+ } catch (final Exception e) {
+ LOG.error(e, "Error processing tile ", this.tile);
+ this.exception = e;
+ }
+ finally{
+ provider.close();
+ }
+ }
+
+ /**
+ * Find the best barcode match for the given read sequence, and accumulate metrics
+ *
+ * @param readSubsequences portion of read containing barcode
+ * @param passingFilter PF flag for the current read
+ * @return perfect barcode string, if there was a match within tolerance, or null if not.
+ */
+ private BarcodeMatch findBestBarcodeAndUpdateMetrics(final byte[][] readSubsequences,
+ final byte[][] qualityScores,
+ final boolean passingFilter,
+ final Map<String, BarcodeMetric> metrics,
+ final BarcodeMetric noMatchBarcodeMetric) {
+ BarcodeMetric bestBarcodeMetric = null;
+ int totalBarcodeReadBases = 0;
+ int numNoCalls = 0; // NoCalls are calculated for all the barcodes combined
+
+ for (final byte[] bc : readSubsequences) {
+ totalBarcodeReadBases += bc.length;
+ for (final byte b : bc) if (SequenceUtil.isNoCall(b)) ++numNoCalls;
+ }
+
+ // PIC-506 When forcing all reads to match a single barcode, allow a read to match even if every
+ // base is a mismatch.
+ int numMismatchesInBestBarcode = totalBarcodeReadBases + 1;
+ int numMismatchesInSecondBestBarcode = totalBarcodeReadBases + 1;
+
+ for (final BarcodeMetric barcodeMetric : metrics.values()) {
+ final int numMismatches = countMismatches(barcodeMetric.barcodeBytes, readSubsequences, qualityScores);
+ if (numMismatches < numMismatchesInBestBarcode) {
+ if (bestBarcodeMetric != null) {
+ numMismatchesInSecondBestBarcode = numMismatchesInBestBarcode;
+ }
+ numMismatchesInBestBarcode = numMismatches;
+ bestBarcodeMetric = barcodeMetric;
+ } else if (numMismatches < numMismatchesInSecondBestBarcode) {
+ numMismatchesInSecondBestBarcode = numMismatches;
+ }
+ }
+
+ final boolean matched = bestBarcodeMetric != null &&
+ numNoCalls <= maxNoCalls &&
+ numMismatchesInBestBarcode <= maxMismatches &&
+ numMismatchesInSecondBestBarcode - numMismatchesInBestBarcode >= minMismatchDelta;
+
+ final BarcodeMatch match = new BarcodeMatch();
+
+ // If we have something that's not a "match" but matches one barcode
+ // slightly, we output that matching barcode in lower case
+ if (numNoCalls + numMismatchesInBestBarcode < totalBarcodeReadBases) {
+ match.mismatches = numMismatchesInBestBarcode;
+ match.mismatchesToSecondBest = numMismatchesInSecondBestBarcode;
+ match.barcode = bestBarcodeMetric.BARCODE.toLowerCase().replaceAll(IlluminaUtil.BARCODE_DELIMITER, "");
+ } else {
+ match.mismatches = totalBarcodeReadBases;
+ match.barcode = "";
+ }
+
+ if (matched) {
+ ++bestBarcodeMetric.READS;
+ if (passingFilter) {
+ ++bestBarcodeMetric.PF_READS;
+ }
+ if (numMismatchesInBestBarcode == 0) {
+ ++bestBarcodeMetric.PERFECT_MATCHES;
+ if (passingFilter) {
+ ++bestBarcodeMetric.PF_PERFECT_MATCHES;
+ }
+ } else if (numMismatchesInBestBarcode == 1) {
+ ++bestBarcodeMetric.ONE_MISMATCH_MATCHES;
+ if (passingFilter) {
+ ++bestBarcodeMetric.PF_ONE_MISMATCH_MATCHES;
+ }
+ }
+
+ match.matched = true;
+ match.barcode = bestBarcodeMetric.BARCODE.replaceAll(IlluminaUtil.BARCODE_DELIMITER, "");
+ } else {
+ ++noMatchBarcodeMetric.READS;
+ if (passingFilter) {
+ ++noMatchBarcodeMetric.PF_READS;
+ }
+ }
+
+ return match;
+ }
+
+ /**
+ * Compare barcode sequence to bases from read
+ *
+ * @return how many bases did not match
+ */
+ private int countMismatches(final byte[][] barcodeBytes, final byte[][] readSubsequence, final byte[][] qualities) {
+ int numMismatches = 0;
+ // Read sequence and barcode length may not be equal, so we just use the shorter of the two
+ for (int j = 0; j < barcodeBytes.length; j++) {
+ final int basesToCheck = Math.min(barcodeBytes[j].length, readSubsequence[j].length);
+ for (int i = 0; i < basesToCheck; ++i) {
+ if (!SequenceUtil.isNoCall(readSubsequence[j][i])) {
+ if (!SequenceUtil.basesEqual(barcodeBytes[j][i], readSubsequence[j][i])) ++numMismatches;
+ else if (qualities != null && qualities[j][i] < minimumBaseQuality) ++numMismatches;
+ }
+ }
+ }
+ return numMismatches;
+ }
+ }
+}
diff --git a/src/java/picard/illumina/IlluminaBasecallingMetrics.java b/src/java/picard/illumina/IlluminaBasecallingMetrics.java
new file mode 100644
index 0000000..27270b0
--- /dev/null
+++ b/src/java/picard/illumina/IlluminaBasecallingMetrics.java
@@ -0,0 +1,83 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina;
+
+import htsjdk.samtools.metrics.MetricBase;
+import java.lang.Override;
+import java.lang.String;
+
+/***
+ * Metric for Illumina Basecalling that stores means and standard deviations on a per-barcode per-lane basis. Averages
+ * and means are taken over all tiles.
+ */
+public class IlluminaBasecallingMetrics extends MetricBase
+{
+ /** The lane for which the metrics were calculated. */
+ public String LANE;
+ /** The barcode sequence for which the metrics were calculated. */
+ public String MOLECULAR_BARCODE_SEQUENCE_1;
+ /** The barcode name for which the metrics were calculated. */
+ public String MOLECULAR_BARCODE_NAME;
+ /** The total number of bases assigned to the index. */
+ public long TOTAL_BASES;
+ /** The total number of passing-filter bases assigned to the index. */
+ public long PF_BASES;
+ /** The total number of reads assigned to the index. */
+ public long TOTAL_READS;
+ /** The total number of passing-filter reads assigned to the index. */
+ public long PF_READS;
+ /** The total number of clusters assigned to the index. */
+ public long TOTAL_CLUSTERS;
+ /** The total number of PF clusters assigned to the index. */
+ public long PF_CLUSTERS;
+ /** The mean number of clusters per tile. */
+ public double MEAN_CLUSTERS_PER_TILE = 0d;
+ /** The standard deviation of clusters per tile. */
+ public double SD_CLUSTERS_PER_TILE = 0d;
+ /** The mean percentage of pf clusters per tile. */
+ public double MEAN_PCT_PF_CLUSTERS_PER_TILE = 0d;
+ /** The standard deviation in percentage of pf clusters per tile. */
+ public double SD_PCT_PF_CLUSTERS_PER_TILE = 0d;
+ /** The mean number of pf clusters per tile. */
+ public double MEAN_PF_CLUSTERS_PER_TILE = 0d;
+ /** The standard deviation in number of pf clusters per tile. */
+ public double SD_PF_CLUSTERS_PER_TILE = 0d;
+
+ @Override
+ public String toString() {
+ return String.format("IlluminaBasecallingMetric(Lane:%s,Barcode:%s,Name:%s,MEAN_CLUSTERS_PER_TILE:%s,SD_CLUSTERS_PER_TILE:%s," +
+ "MEAN_PCT_PF_CLUSTERS_PER_TILE:%s,SD_PCT_PF_CLUSTERS_STD_PER_TILE:%s," +
+ "MEAN_PF_CLUSTERS_PER_TILE:%s,SD_PF_CLUSTERS_PER_TILE:%s",
+ LANE
+ ,MOLECULAR_BARCODE_SEQUENCE_1
+ ,MOLECULAR_BARCODE_NAME
+ ,MEAN_CLUSTERS_PER_TILE
+ ,SD_CLUSTERS_PER_TILE
+ ,MEAN_PCT_PF_CLUSTERS_PER_TILE
+ ,SD_PCT_PF_CLUSTERS_PER_TILE
+ ,MEAN_PF_CLUSTERS_PER_TILE
+ ,SD_PF_CLUSTERS_PER_TILE);
+ }
+}
diff --git a/src/java/picard/illumina/IlluminaBasecallsConverter.java b/src/java/picard/illumina/IlluminaBasecallsConverter.java
new file mode 100644
index 0000000..01103ab
--- /dev/null
+++ b/src/java/picard/illumina/IlluminaBasecallsConverter.java
@@ -0,0 +1,901 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekIterator;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SortingCollection;
+import picard.PicardException;
+import picard.illumina.parser.ClusterData;
+import picard.illumina.parser.IlluminaDataProvider;
+import picard.illumina.parser.IlluminaDataProviderFactory;
+import picard.illumina.parser.IlluminaDataType;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.util.FileChannelJDKBugWorkAround;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.TreeMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.PriorityBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+/**
+ * Manages the conversion of Illumina basecalls into some output format. Creates multiple threads to manage reading,
+ * sorting and writing efficiently. Output is written in queryname output. Optionally demultiplexes indexed reads
+ * into separate outputs by barcode.
+ *
+ * @param <CLUSTER_OUTPUT_RECORD> The class to which a ClusterData is converted in preparation for writing.
+ */
+public class IlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> {
+ /**
+ * Describes the state of a barcode's data's processing in the context of a tile. It is either not available in
+ * that tile, has been read, has been queued to be written to file, or has been written to file. A barcode only
+ * takes on a state once the tile (which is serving as the context of this state) has been read.
+ */
+ private enum TileBarcodeProcessingState {
+ NA, READ, QUEUED_FOR_WRITE, WRITTEN
+ }
+
+ /**
+ * Describes the state of a tile being processed. It is either not yet completely read, or read.
+ */
+ private enum TileProcessingState {
+ NOT_DONE_READING, DONE_READING
+ }
+
+ private static final Log log = Log.getInstance(IlluminaBasecallsConverter.class);
+
+ public static final IlluminaDataType[] DATA_TYPES_NO_BARCODE =
+ {IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position, IlluminaDataType.PF};
+ private static final IlluminaDataType[] DATA_TYPES_WITH_BARCODE = Arrays.copyOf(DATA_TYPES_NO_BARCODE, DATA_TYPES_NO_BARCODE.length + 1);
+
+ static {
+ DATA_TYPES_WITH_BARCODE[DATA_TYPES_WITH_BARCODE.length - 1] = IlluminaDataType.Barcodes;
+ }
+
+ /**
+ * A comparator for tile numbers, which are not necessarily ordered by the number's value.
+ */
+ public static final Comparator<Integer> TILE_NUMBER_COMPARATOR = new Comparator<Integer>() {
+ @Override
+ public int compare(final Integer integer1, final Integer integer2) {
+ final String s1 = integer1.toString();
+ final String s2 = integer2.toString();
+ // Because a the tile number is followed by a colon, a tile number that
+ // is a prefix of another tile number should sort after. (e.g. 10 sorts after 100).
+ if (s1.length() < s2.length()) {
+ if (s2.startsWith(s1)) {
+ return 1;
+ }
+ } else if (s2.length() < s1.length()) {
+ if (s1.startsWith(s2)) {
+ return -1;
+ }
+ }
+ return s1.compareTo(s2);
+ }
+ };
+
+ private final Comparator<CLUSTER_OUTPUT_RECORD> outputRecordComparator;
+
+ private final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
+ private final Map<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> barcodeRecordWriterMap;
+ private final int maxReadsInRamPerTile;
+ private final boolean demultiplex;
+ private final List<File> tmpDirs;
+ private final IlluminaDataProviderFactory factory;
+ private ClusterDataConverter<CLUSTER_OUTPUT_RECORD> converter = null;
+ private final ProgressLogger readProgressLogger = new ProgressLogger(log, 1000000, "Read");
+ private final ProgressLogger writeProgressLogger = new ProgressLogger(log, 1000000, "Write");
+ private int numThreads;
+ // If FORCE_GC, this is non-null. For production this is not necessary because it will run until the JVM
+ // ends, but for unit testing it is desirable to stop the task when done with this instance.
+ private final TimerTask gcTimerTask;
+ private List<Integer> tiles;
+ private final boolean includeNonPfReads;
+ private final SortingCollection.Codec<CLUSTER_OUTPUT_RECORD> codecPrototype;
+ // Annoying that we need this.
+ private final Class<CLUSTER_OUTPUT_RECORD> outputRecordClass;
+
+ /**
+ * @param basecallsDir Where to read basecalls from.
+ * @param lane What lane to process.
+ * @param readStructure How to interpret each cluster.
+ * @param barcodeRecordWriterMap Map from barcode to CLUSTER_OUTPUT_RECORD writer. If demultiplex is false, must contain
+ * one writer stored with key=null.
+ * @param demultiplex If true, output is split by barcode, otherwise all are written to the same output stream.
+ * @param maxReadsInRamPerTile Configures number of reads each tile will store in RAM before spilling to disk.
+ * @param tmpDirs For SortingCollection spilling.
+ * @param numProcessors Controls number of threads. If <= 0, the number of threads allocated is
+ * available cores - numProcessors.
+ * @param forceGc Force explicit GC periodically. This is good for causing memory maps to be released.
+ * @param firstTile (For debugging) If non-null, start processing at this tile.
+ * @param tileLimit (For debugging) If non-null, process no more than this many tiles.
+ * @param outputRecordComparator For sorting output records within a single tile.
+ * @param codecPrototype For spilling output records to disk.
+ * @param outputRecordClass Inconveniently needed to create SortingCollections.
+ * @param includeNonPfReads If true, will include ALL reads (including those which do not have PF set)
+ */
+ public IlluminaBasecallsConverter(final File basecallsDir, final int lane, final ReadStructure readStructure,
+ final Map<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> barcodeRecordWriterMap,
+ final boolean demultiplex,
+ final int maxReadsInRamPerTile,
+ final List<File> tmpDirs,
+ final int numProcessors, final boolean forceGc,
+ final Integer firstTile, final Integer tileLimit,
+ final Comparator<CLUSTER_OUTPUT_RECORD> outputRecordComparator,
+ final SortingCollection.Codec<CLUSTER_OUTPUT_RECORD> codecPrototype,
+ final Class<CLUSTER_OUTPUT_RECORD> outputRecordClass,
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
+ final boolean applyEamssFiltering,
+ final boolean includeNonPfReads
+ ) {
+ this(basecallsDir, null, lane, readStructure,
+ barcodeRecordWriterMap, demultiplex, maxReadsInRamPerTile,
+ tmpDirs, numProcessors, forceGc, firstTile, tileLimit,
+ outputRecordComparator, codecPrototype, outputRecordClass,
+ bclQualityEvaluationStrategy, applyEamssFiltering,
+ includeNonPfReads);
+ }
+
+ /**
+ * @param basecallsDir Where to read basecalls from.
+ * @param barcodesDir Where to read barcodes from (optional; use basecallsDir if not specified).
+ * @param lane What lane to process.
+ * @param readStructure How to interpret each cluster.
+ * @param barcodeRecordWriterMap Map from barcode to CLUSTER_OUTPUT_RECORD writer. If demultiplex is false, must contain
+ * one writer stored with key=null.
+ * @param demultiplex If true, output is split by barcode, otherwise all are written to the same output stream.
+ * @param maxReadsInRamPerTile Configures number of reads each tile will store in RAM before spilling to disk.
+ * @param tmpDirs For SortingCollection spilling.
+ * @param numProcessors Controls number of threads. If <= 0, the number of threads allocated is
+ * available cores - numProcessors.
+ * @param forceGc Force explicit GC periodically. This is good for causing memory maps to be released.
+ * @param firstTile (For debugging) If non-null, start processing at this tile.
+ * @param tileLimit (For debugging) If non-null, process no more than this many tiles.
+ * @param outputRecordComparator For sorting output records within a single tile.
+ * @param codecPrototype For spilling output records to disk.
+ * @param outputRecordClass Inconveniently needed to create SortingCollections.
+ * @param includeNonPfReads If true, will include ALL reads (including those which do not have PF set)
+ */
+ public IlluminaBasecallsConverter(final File basecallsDir, File barcodesDir, final int lane,
+ final ReadStructure readStructure,
+ final Map<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> barcodeRecordWriterMap,
+ final boolean demultiplex,
+ final int maxReadsInRamPerTile,
+ final List<File> tmpDirs, final int numProcessors,
+ final boolean forceGc, final Integer firstTile,
+ final Integer tileLimit,
+ final Comparator<CLUSTER_OUTPUT_RECORD> outputRecordComparator,
+ final SortingCollection.Codec<CLUSTER_OUTPUT_RECORD> codecPrototype,
+ final Class<CLUSTER_OUTPUT_RECORD> outputRecordClass,
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
+ final boolean applyEamssFiltering, final boolean includeNonPfReads
+ ) {
+ this.barcodeRecordWriterMap = barcodeRecordWriterMap;
+ this.demultiplex = demultiplex;
+ this.maxReadsInRamPerTile = maxReadsInRamPerTile;
+ this.tmpDirs = tmpDirs;
+ this.outputRecordComparator = outputRecordComparator;
+ this.codecPrototype = codecPrototype;
+ this.outputRecordClass = outputRecordClass;
+ this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
+ this.includeNonPfReads = includeNonPfReads;
+
+ // If we're forcing garbage collection, collect every 5 minutes in a daemon thread.
+ if (forceGc) {
+ final Timer gcTimer = new Timer(true);
+ final long delay = 5 * 1000 * 60;
+ gcTimerTask = new TimerTask() {
+ @Override
+ public void run() {
+ log.info("Before explicit GC, Runtime.totalMemory()=" + Runtime.getRuntime().totalMemory());
+ System.gc();
+ System.runFinalization();
+ log.info("After explicit GC, Runtime.totalMemory()=" + Runtime.getRuntime().totalMemory());
+ }
+ };
+ gcTimer.scheduleAtFixedRate(gcTimerTask, delay, delay);
+ } else {
+ gcTimerTask = null;
+ }
+
+ this.factory = new IlluminaDataProviderFactory(basecallsDir, barcodesDir, lane, readStructure, bclQualityEvaluationStrategy, getDataTypesFromReadStructure(readStructure, demultiplex));
+ this.factory.setApplyEamssFiltering(applyEamssFiltering);
+
+ if (numProcessors == 0) {
+ this.numThreads = Runtime.getRuntime().availableProcessors();
+ } else if (numProcessors < 0) {
+ this.numThreads = Runtime.getRuntime().availableProcessors() + numProcessors;
+ } else {
+ this.numThreads = numProcessors;
+ }
+ this.tiles = new ArrayList<Integer>(factory.getAvailableTiles());
+ // Since the first non-fixed part of the read name is the tile number, without preceding zeroes,
+ // and the output is sorted by read name, process the tiles in this order.
+ Collections.sort(tiles, TILE_NUMBER_COMPARATOR);
+ if (firstTile != null) {
+ int i;
+ for (i = 0; i < tiles.size(); ++i) {
+ if (tiles.get(i).intValue() == firstTile.intValue()) {
+ tiles = tiles.subList(i, tiles.size());
+ break;
+ }
+ }
+ if (tiles.get(0).intValue() != firstTile.intValue()) {
+ throw new PicardException("firstTile=" + firstTile + ", but that tile was not found.");
+ }
+ }
+ if (tileLimit != null && tiles.size() > tileLimit) {
+ tiles = tiles.subList(0, tileLimit);
+ }
+
+ this.numThreads = Math.max(1, Math.min(this.numThreads, tiles.size()));
+ }
+
+ /**
+ * Must be called before doTileProcessing. This is not passed in the ctor because often the
+ * IlluminaDataProviderFactory is needed in order to construct the converter.
+ *
+ * @param converter Converts ClusterData to CLUSTER_OUTPUT_RECORD
+ */
+ public void setConverter(final ClusterDataConverter<CLUSTER_OUTPUT_RECORD> converter) {
+ this.converter = converter;
+ }
+
+ /**
+ * In case caller needs to get some info from factory.
+ */
+ public IlluminaDataProviderFactory getFactory() {
+ return factory;
+ }
+
+ /**
+ * Do the work, i.e. create a bunch of threads to read, sort and write.
+ * setConverter() must be called before calling this method.
+ */
+ public void doTileProcessing() {
+ try {
+ // TODO: Eliminate this when switch to JDK 7
+ FileChannelJDKBugWorkAround.doBugWorkAround();
+
+ // Generate the list of tiles that will be processed
+ final List<Tile> tiles = new ArrayList<Tile>();
+ for (final Integer tileNumber : this.tiles) {
+ tiles.add(new Tile(tileNumber));
+ }
+
+ final TileReadAggregator tileReadAggregator = new TileReadAggregator(tiles);
+ tileReadAggregator.submit();
+ try {
+ tileReadAggregator.awaitWorkComplete();
+ } catch (final InterruptedException e) {
+ log.error(e, "Failure encountered in worker thread; attempting to shut down remaining worker threads and terminate ...");
+ throw new PicardException("Failure encountered in worker thread; see log for details.");
+ } finally {
+ tileReadAggregator.shutdown();
+ }
+
+ for (final Map.Entry<Byte, Integer> entry : bclQualityEvaluationStrategy.getPoorQualityFrequencies().entrySet()) {
+ log.warn(String.format("Observed low quality of %s %s times.", entry.getKey(), entry.getValue()));
+ }
+ bclQualityEvaluationStrategy.assertMinimumQualities();
+
+ } finally {
+ try {
+ if (gcTimerTask != null) gcTimerTask.cancel();
+ } catch (final Throwable ex) {
+ log.warn(ex, "Ignoring exception stopping background GC thread.");
+ }
+ // Close the writers
+ for (final Map.Entry<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> entry : barcodeRecordWriterMap.entrySet()) {
+ final ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD> writer = entry.getValue();
+ log.debug(String.format("Closing file for barcode %s.", entry.getKey()));
+ writer.close();
+ }
+ }
+ }
+
+ /**
+ * Simple representation of a tile
+ */
+ private static class Tile implements Comparable<Tile> {
+ private final int tileNumber;
+
+ public Tile(final int i) {
+ tileNumber = i;
+ }
+
+ public int getNumber() {
+ return tileNumber;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ return o instanceof Tile && this.getNumber() == ((Tile) o).getNumber();
+ }
+
+ @Override
+ public int compareTo(final Tile o) {
+ return TILE_NUMBER_COMPARATOR.compare(this.getNumber(), o.getNumber());
+ }
+ }
+
+
+ /**
+ * A Runnable that carries a priority which is used to compare and order other PriorityRunnables in a task queue.
+ */
+ private abstract class PriorityRunnable implements Runnable {
+ private final int priority;
+
+ /**
+ * Create a new priority runnable with a default priority of 1.
+ */
+ public PriorityRunnable() {
+ this(1);
+ }
+
+ public PriorityRunnable(final int priority) {
+ this.priority = priority;
+ }
+
+ /**
+ * Returns the priority level. Higher priorities are run earlier.
+ *
+ * @return
+ */
+ int getPriority() {
+ return this.priority;
+ }
+ }
+
+
+ /**
+ * Represents the state of a tile's processing and encapsulates the data collected from that tile.
+ * <p/>
+ * TileProcessingRecords are accessed from each worker thread to assess the progress of the run, so its methods
+ * are synchronized.
+ */
+ private class TileProcessingRecord {
+ final private Map<String, SortingCollection<CLUSTER_OUTPUT_RECORD>> barcodeToRecordCollection =
+ new HashMap<String, SortingCollection<CLUSTER_OUTPUT_RECORD>>();
+ final private Map<String, TileBarcodeProcessingState> barcodeToProcessingState = new HashMap<String, TileBarcodeProcessingState>();
+ private TileProcessingState state = TileProcessingState.NOT_DONE_READING;
+ private long recordCount = 0;
+
+ /**
+ * Returns the state of this tile's processing.
+ */
+ public synchronized TileProcessingState getState() {
+ return this.state;
+ }
+
+ /**
+ * Sets the state of this tile's processing.
+ */
+ public synchronized void setState(final TileProcessingState state) {
+ this.state = state;
+ }
+
+ /**
+ * Adds the provided record to this tile.
+ */
+ public synchronized void addRecord(final String barcode, final CLUSTER_OUTPUT_RECORD record) {
+ this.recordCount += 1;
+
+ // Grab the existing collection, or initialize it if it doesn't yet exist
+ SortingCollection<CLUSTER_OUTPUT_RECORD> recordCollection = this.barcodeToRecordCollection.get(barcode);
+ if (recordCollection == null) {
+ if (!barcodeRecordWriterMap.containsKey(barcode))
+ throw new PicardException(String.format("Read records with barcode %s, but this barcode was not expected. (Is it referenced in the parameters file?)", barcode));
+ recordCollection = this.newSortingCollection();
+ this.barcodeToRecordCollection.put(barcode, recordCollection);
+ this.barcodeToProcessingState.put(barcode, null);
+ }
+ recordCollection.add(record);
+ }
+
+ private synchronized SortingCollection<CLUSTER_OUTPUT_RECORD> newSortingCollection() {
+ final int maxRecordsInRam =
+ maxReadsInRamPerTile /
+ barcodeRecordWriterMap.size();
+ return SortingCollection.newInstance(
+ outputRecordClass,
+ codecPrototype.clone(),
+ outputRecordComparator,
+ maxRecordsInRam,
+ tmpDirs);
+ }
+
+ /**
+ * Returns the number of unique barcodes read.
+ */
+ public synchronized long getBarcodeCount() {
+ return this.barcodeToRecordCollection.size();
+ }
+
+ /**
+ * Returns the number of records read.
+ */
+ public synchronized long getRecordCount() {
+ return recordCount;
+ }
+
+ /**
+ * Returns the mapping of barcodes to records associated with them.
+ */
+ public synchronized Map<String, SortingCollection<CLUSTER_OUTPUT_RECORD>> getBarcodeRecords() {
+ return barcodeToRecordCollection;
+ }
+
+ /**
+ * Gets the state of the provided barcode's data's processing progress. Only invoke this query if this tile
+ * is in a DONE_READING state.
+ *
+ * @throws IllegalStateException When a barcode is queried before the tile is in the DONE_READING state
+ */
+ public synchronized TileBarcodeProcessingState getBarcodeState(final String barcode) {
+ if (this.getState() == TileProcessingState.NOT_DONE_READING) {
+ throw new IllegalStateException(
+ "A tile's barcode data's state cannot be queried until the tile has been completely read.");
+ }
+
+ if (this.barcodeToProcessingState.containsKey(barcode)) {
+ return this.barcodeToProcessingState.get(barcode);
+ } else {
+ return TileBarcodeProcessingState.NA;
+ }
+ }
+
+ public synchronized Map<String, TileBarcodeProcessingState> getBarcodeProcessingStates() {
+ return this.barcodeToProcessingState;
+ }
+
+ /**
+ * Sets the processing state of the provided barcode in this record.
+ *
+ * @throws java.util.NoSuchElementException When the provided barcode is not one associated with this record.
+ */
+ public synchronized void setBarcodeState(final String barcode, final TileBarcodeProcessingState state) {
+ if (this.barcodeToProcessingState.containsKey(barcode)) {
+ this.barcodeToProcessingState.put(barcode, state);
+ } else {
+ throw new NoSuchElementException(String.format("No record of the provided barcode, %s.", barcode));
+ }
+ }
+
+ /**
+ * Returns the distinct set of barcodes for which data has been collected in this record.
+ *
+ * @return
+ */
+ public synchronized Set<String> getBarcodes() {
+ return this.getBarcodeRecords().keySet();
+ }
+ }
+
+ /**
+ * Reads the information from a tile via an IlluminaDataProvider and feeds red information into a processingRecord
+ * managed by the TileReadAggregator.
+ */
+ private class TileReader {
+ private final Tile tile;
+ private final TileReadAggregator handler;
+ private final TileProcessingRecord processingRecord;
+
+ public TileReader(final Tile tile, final TileReadAggregator handler, final TileProcessingRecord processingRecord) {
+ this.tile = tile;
+ this.handler = handler;
+ this.processingRecord = processingRecord;
+ }
+
+ /**
+ * Reads the data from the appropriate IlluminaDataProvider and feeds it into the TileProcessingRecord for
+ * this tile.
+ */
+ public void process() {
+ final IlluminaDataProvider dataProvider = factory.makeDataProvider(Arrays.asList(this.tile.getNumber()));
+ log.debug(String.format("Reading data from tile %s ...", tile.getNumber()));
+
+ while (dataProvider.hasNext()) {
+ final ClusterData cluster = dataProvider.next();
+ readProgressLogger.record(null, 0);
+ // If this cluster is passing, or we do NOT want to ONLY emit passing reads, then add it to the next
+ if (cluster.isPf() || includeNonPfReads) {
+ final String barcode = (demultiplex ? cluster.getMatchedBarcode() : null);
+ this.processingRecord.addRecord(barcode, converter.convertClusterToOutputRecord(cluster));
+ }
+ }
+
+ this.handler.completeTile(this.tile);
+ dataProvider.close();
+ }
+ }
+
+
+ /**
+ * Aggregates data collected from tiles and writes them to file. Accepts records from TileReaders and maps
+ * them to the appropriate BAM writers.
+ */
+ private class TileReadAggregator {
+ /**
+ * The collection of records associated with a particular tile.
+ * <p/>
+ * Implemented as a TreeMap to guarantee tiles are iterated over in natural order.
+ */
+ private final Map<Tile, TileProcessingRecord> tileRecords = new TreeMap<Tile, TileProcessingRecord>();
+
+ /**
+ * The executor responsible for doing work.
+ * <p/>
+ * Implemented as a ThreadPoolExecutor with a PriorityBlockingQueue which orders submitted Runnables by their
+ * priority.
+ */
+ private final ExecutorService prioritizingThreadPool = new ThreadPoolExecutor(
+ numThreads,
+ numThreads,
+ 0L,
+ MILLISECONDS,
+ new PriorityBlockingQueue<Runnable>(5, new Comparator<Runnable>() {
+ @Override
+ /**
+ * Compare the two Runnables, and assume they are PriorityRunnable; if not something strange is
+ * going on, so allow a ClassCastException be thrown.
+ */
+ public int compare(final Runnable o1, final Runnable o2) {
+ // Higher priority items go earlier in the queue, so reverse the "natural" comparison.
+ return ((PriorityRunnable) o2).getPriority() - ((PriorityRunnable) o1).getPriority();
+ }
+ })
+ );
+
+ /**
+ * The object acting as a latch to notify when the aggregator completes its work.
+ */
+ private final Object completionLatch = new Object();
+
+ /**
+ * Stores the thread that is executing this work so that it can be interrupted upon failure.
+ */
+ private Thread parentThread;
+ private final Object workEnqueueMonitor = new Object();
+ private final AtomicBoolean submitted = new AtomicBoolean(false);
+
+
+ /**
+ * Creates a TileReadAggregator that reads from the provided tiles.
+ *
+ * @param tiles
+ */
+ public TileReadAggregator(final Collection<Tile> tiles) {
+ for (final Tile t : tiles) {
+ tileRecords.put(t, new TileProcessingRecord());
+ }
+ }
+
+ /**
+ * Execute the tile aggregator's work. Creates a thread pool to read data from tiles and write them to file.
+ * Invoke this method only once.
+ *
+ * @throws IllegalStateException If submit was called more than once.
+ */
+ public void submit() {
+ // Ensure the aggregator as not yet been submitted
+ if (!this.submitted.compareAndSet(false, true)) {
+ throw new IllegalStateException("The submit() method may not be called more than once.");
+ }
+
+ // Set the thread that is executing this work
+ this.parentThread = Thread.currentThread();
+
+ /**
+ * For each tile, create and submit a tile processor. Give it a negative execution priority (so that
+ * prioritized tasks with a positive execution priority execute first), and give later tiles a lesser
+ * (more negative) priority.
+ */
+ int priority = 0;
+ for (final Tile tile : this.tileRecords.keySet()) {
+ final TileReader reader = new TileReader(tile, this, this.tileRecords.get(tile));
+ this.prioritizingThreadPool.execute(new PriorityRunnable(--priority) {
+ @Override
+ public void run() {
+ try {
+ reader.process();
+ } catch (final RuntimeException e) {
+ /**
+ * In the event of an internal failure, signal to the parent thread that something has gone
+ * wrong. This is necessary because if an item of work fails to complete, the aggregator will
+ * will never reach its completed state, and it will never terminate.
+ */
+ parentThread.interrupt();
+ throw e;
+ } catch (final Error e) {
+ parentThread.interrupt();
+ throw e;
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * Signals that a tile's processing is complete. This must be invoked exactly once per tile, and only after
+ * all of that tile has been processed.
+ *
+ * @throws IllegalStateException When the tile is already in the completed state.
+ */
+ private void completeTile(final Tile tile) {
+ final TileProcessingRecord tileRecord = this.tileRecords.get(tile);
+
+ if (tileRecord.getState() == TileProcessingState.DONE_READING) {
+ throw new IllegalStateException("This tile is already in the completed state.");
+ }
+
+ // Update all of the barcodes and the tile to be marked as read
+ for (final String barcode : tileRecord.getBarcodes()) {
+ tileRecord.setBarcodeState(barcode, TileBarcodeProcessingState.READ);
+ tileRecord.barcodeToRecordCollection.get(barcode).doneAdding();
+ }
+ tileRecord.setState(TileProcessingState.DONE_READING);
+
+ log.debug(String.format("Completed reading tile %s; collected %s reads spanning %s barcodes.",
+ tile.getNumber(), tileRecord.getRecordCount(), tileRecord.getBarcodeCount()));
+
+ //noinspection SynchronizationOnLocalVariableOrMethodParameter
+ this.findAndEnqueueWorkOrSignalCompletion();
+ }
+
+ /**
+ * Blocks until this aggregator completes its work.
+ *
+ * @throws InterruptedException
+ */
+ public void awaitWorkComplete() throws InterruptedException {
+ synchronized (this.completionLatch) {
+ this.completionLatch.wait();
+ }
+ }
+
+ /**
+ * Signals to any thread awaiting via awaitWorkComplete() that no work remains. Called
+ * when this aggregator has reached its completed state.
+ */
+ private void signalWorkComplete() {
+ synchronized (this.completionLatch) {
+ this.completionLatch.notifyAll();
+ }
+ }
+
+ /**
+ * Poll the aggregator to find more tasks for it to enqueue. Specifically, searches for un-written data
+ * read from tiles for each barcode and enqueues it for writing.
+ */
+ private void findAndEnqueueWorkOrSignalCompletion() {
+ synchronized (this.workEnqueueMonitor) {
+ /**
+ * If there is work remaining to be done in this aggregator, walk through all of the barcodes and find
+ * tiles which have not yet written their barcode data but are in a state where they are able to.
+ */
+ if (this.isWorkCompleted()) {
+ this.signalWorkComplete();
+ } else {
+ final Queue<Runnable> tasks = new LinkedList<Runnable>();
+ for (final String barcode : barcodeRecordWriterMap.keySet()) {
+ NEXT_BARCODE:
+ for (final Map.Entry<Tile, TileProcessingRecord> entry : this.tileRecords.entrySet()) {
+ final Tile tile = entry.getKey();
+ final TileProcessingRecord tileRecord = entry.getValue();
+
+ /**
+ * If this tile has not been read, we cannot write this or later tiles' barcode data;
+ * move to the next barcode.
+ */
+ if (tileRecord.getState() != TileProcessingState.DONE_READING) {
+ break;
+ }
+ switch (tileRecord.getBarcodeState(barcode)) {
+ case NA:
+ case WRITTEN:
+ /**
+ * There is no data for this barcode for this tile, or it is already written; in
+ * either scenario, this barcode will not be processed further for this tile, so
+ * move onto the next tile as a possible candidate.
+ */
+ continue;
+ case QUEUED_FOR_WRITE:
+ /**
+ * The write for this barcode is in progress for this tile, so skip to the next
+ * barcode.
+ */
+ break NEXT_BARCODE;
+ case READ:
+ /**
+ * This barcode has been read, and all of the earlier tiles have been written
+ * for this barcode, so queue its writing.
+ */
+ tileRecord.setBarcodeState(barcode, TileBarcodeProcessingState.QUEUED_FOR_WRITE);
+ log.debug(String.format("Enqueuing work for tile %s and barcode %s.", tile.getNumber(), barcode));
+ tasks.add(this.newBarcodeWorkInstance(tile, tileRecord, barcode));
+ break NEXT_BARCODE;
+ }
+ }
+ }
+
+ for (final Runnable task : tasks) {
+ this.prioritizingThreadPool.execute(task);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a PriorityRunnable that encapsulates the work involved with writing the provided tileRecord's data
+ * for the given barcode to disk.
+ *
+ * @param tile The tile from which the record was read
+ * @param tileRecord The processing record associated with the tile
+ * @param barcode The barcode whose data within the tileRecord is to be written
+ * @return The runnable that upon invocation writes the barcode's data from the tileRecord to disk
+ */
+ private PriorityRunnable newBarcodeWorkInstance(final Tile tile, final TileProcessingRecord tileRecord, final String barcode) {
+ return new PriorityRunnable() {
+ @Override
+ public void run() {
+ try {
+ final SortingCollection<CLUSTER_OUTPUT_RECORD> records = tileRecord.getBarcodeRecords().get(barcode);
+ final ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD> writer = barcodeRecordWriterMap.get(barcode);
+
+ log.debug(String.format("Writing records from tile %s with barcode %s ...", tile.getNumber(), barcode));
+
+ final PeekIterator<CLUSTER_OUTPUT_RECORD> it = new PeekIterator<CLUSTER_OUTPUT_RECORD>(records.iterator());
+ while (it.hasNext()) {
+ final CLUSTER_OUTPUT_RECORD rec = it.next();
+
+ /**
+ * PIC-330 Sometimes there are two reads with the same cluster coordinates, and thus
+ * the same read name. Discard both of them. This code assumes that the two first of pairs
+ * will come before the two second of pairs, so it isn't necessary to look ahead a different
+ * distance for paired end. It also assumes that for paired ends there will be duplicates
+ * for both ends, so there is no need to be PE-aware.
+ */
+ if (it.hasNext()) {
+ final CLUSTER_OUTPUT_RECORD lookAhead = it.peek();
+
+/* TODO: Put this in SAMFileWriter wrapper
+ if (!rec.getReadUnmappedFlag() || !lookAhead.getReadUnmappedFlag()) {
+ throw new IllegalStateException("Should not have mapped reads.");
+ }
+*/
+
+ if (outputRecordComparator.compare(rec, lookAhead) == 0) {
+ it.next();
+ log.info("Skipping reads with identical read names: " + rec.toString());
+ continue;
+ }
+ }
+
+ writer.write(rec);
+ writeProgressLogger.record(null, 0);
+ }
+
+ tileRecord.setBarcodeState(barcode, TileBarcodeProcessingState.WRITTEN);
+ findAndEnqueueWorkOrSignalCompletion();
+
+ } catch (final RuntimeException e) {
+ /**
+ * In the event of an internal failure, signal to the parent thread that something has gone
+ * wrong. This is necessary because if an item of work fails to complete, the aggregator will
+ * will never reach its completed state, and it will never terminate.
+ */
+ parentThread.interrupt();
+ throw e;
+ } catch (final Error e) {
+ parentThread.interrupt();
+ throw e;
+ }
+ }
+
+ };
+ }
+
+ /**
+ * Returns true if this aggregator has not completed its work. Specifically, returns false iff
+ * any tile's barcode data yas not yet been written.
+ *
+ * @return True if more work remains to be done, false otherwise
+ */
+ public boolean isWorkCompleted() {
+ for (final Map.Entry<Tile, TileProcessingRecord> entry : this.tileRecords.entrySet()) {
+ final TileProcessingRecord tileProcessingRecord = entry.getValue();
+
+ if (tileProcessingRecord.getState() != TileProcessingState.DONE_READING) {
+ log.debug(String.format("Work is not completed because a tile isn't done being read: %s.", entry.getKey().getNumber()));
+ return false;
+ } else {
+ for (final Map.Entry<String, TileBarcodeProcessingState> barcodeStateEntry : tileProcessingRecord.getBarcodeProcessingStates().entrySet()) {
+ final TileBarcodeProcessingState barcodeProcessingState = barcodeStateEntry.getValue();
+ if (barcodeProcessingState != TileBarcodeProcessingState.WRITTEN) {
+ log.debug(String.format("Work is not completed because a tile isn't done being read: Tile %s, Barcode %s, Processing State %s.", entry.getKey().getNumber(), barcodeStateEntry.getKey(), barcodeProcessingState));
+ return false;
+ }
+ }
+ }
+ }
+ log.info("All work is complete.");
+ return true;
+ }
+
+ /**
+ * Terminates the threads currently exiting in the thread pool abruptly via ThreadPoolExecutor.shutdownNow().
+ */
+ public void shutdown() {
+ this.prioritizingThreadPool.shutdownNow();
+ }
+ }
+
+ /**
+ * Given a read structure return the data types that need to be parsed for this run
+ */
+ private static IlluminaDataType[] getDataTypesFromReadStructure(final ReadStructure readStructure,
+ final boolean demultiplex) {
+ if (readStructure.barcodes.isEmpty() || !demultiplex) {
+ return DATA_TYPES_NO_BARCODE;
+ } else {
+ return DATA_TYPES_WITH_BARCODE;
+ }
+ }
+
+ public static interface ClusterDataConverter<OUTPUT_RECORD> {
+
+ /**
+ * Creates the OUTPUT_RECORDs from the cluster
+ */
+ public OUTPUT_RECORD convertClusterToOutputRecord(final ClusterData cluster);
+ }
+
+ public static interface ConvertedClusterDataWriter<OUTPUT_RECORD> {
+ void write(final OUTPUT_RECORD rec);
+
+ void close();
+ }
+}
diff --git a/src/java/picard/illumina/IlluminaBasecallsToFastq.java b/src/java/picard/illumina/IlluminaBasecallsToFastq.java
new file mode 100644
index 0000000..c058215
--- /dev/null
+++ b/src/java/picard/illumina/IlluminaBasecallsToFastq.java
@@ -0,0 +1,488 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.fastq.BasicFastqWriter;
+import htsjdk.samtools.fastq.FastqReader;
+import htsjdk.samtools.fastq.FastqRecord;
+import htsjdk.samtools.fastq.FastqWriter;
+import htsjdk.samtools.fastq.FastqWriterFactory;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.SortingCollection;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Illumina;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.fastq.Casava18ReadNameEncoder;
+import picard.fastq.IlluminaReadNameEncoder;
+import picard.fastq.ReadNameEncoder;
+import picard.illumina.parser.ClusterData;
+import picard.illumina.parser.ReadData;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.util.IlluminaUtil;
+import picard.util.TabbedTextFileWithHeaderParser;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+ at CommandLineProgramProperties(
+ usage = "Generate fastq file(s) from data in an Illumina basecalls output directory.\n" +
+ "Separate fastq file(s) are created for each template read, and for each barcode read, in the basecalls.\n" +
+ "Template fastqs have extensions like .<number>.fastq, where <number> is the number of the template read,\n" +
+ "starting with 1. Barcode fastqs have extensions like .barcode_<number>.fastq, where <number> is the number\n" +
+ "of the barcode read, starting with 1.",
+ usageShort = "Generate fastq file(s) from data in an Illumina basecalls output directory",
+ programGroup = Illumina.class
+)
+public class IlluminaBasecallsToFastq extends CommandLineProgram {
+ // The following attributes define the command-line arguments
+
+ @Option(doc = "The basecalls directory. ", shortName = "B")
+ public File BASECALLS_DIR;
+
+ @Option(doc = "The barcodes directory with _barcode.txt files (generated by ExtractIlluminaBarcodes). If not set, use BASECALLS_DIR. ", shortName = "BCD", optional = true)
+ public File BARCODES_DIR;
+
+ @Option(doc = "Lane number. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
+ public Integer LANE;
+
+ @Option(doc = "The prefix for output fastqs. Extensions as described above are appended. Use this option for " +
+ "a non-barcoded run, or for a barcoded run in which it is not desired to demultiplex reads into separate " +
+ "files by barcode.",
+ shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ mutex = {"MULTIPLEX_PARAMS"})
+ public File OUTPUT_PREFIX;
+
+ @Option(doc = "The barcode of the run. Prefixed to read names.", optional = false)
+ public String RUN_BARCODE;
+
+ @Option(doc = "The name of the machine on which the run was sequenced; required if emitting Casava1.8-style read name headers", optional = true)
+ public String MACHINE_NAME;
+
+ @Option(doc = "The barcode of the flowcell that was sequenced; required if emitting Casava1.8-style read name headers", optional = true)
+ public String FLOWCELL_BARCODE;
+
+ @Option(doc = ReadStructure.PARAMETER_DOC, shortName = "RS")
+ public String READ_STRUCTURE;
+
+ @Option(doc = "Tab-separated file for creating all output fastqs demultiplexed by barcode for a lane with single " +
+ "IlluminaBasecallsToFastq invocation. The columns are OUTPUT_PREFIX, and BARCODE_1, BARCODE_2 ... BARCODE_X " +
+ "where X = number of barcodes per cluster (optional). Row with BARCODE_1 set to 'N' is used to specify " +
+ "an output_prefix for no barcode match.",
+ mutex = {"OUTPUT_PREFIX"})
+ public File MULTIPLEX_PARAMS;
+
+ @Option(doc = "Which adapters to look for in the read.")
+ public List<IlluminaUtil.IlluminaAdapterPair> ADAPTERS_TO_CHECK = new ArrayList<IlluminaUtil.IlluminaAdapterPair>(
+ Arrays.asList(IlluminaUtil.IlluminaAdapterPair.INDEXED,
+ IlluminaUtil.IlluminaAdapterPair.DUAL_INDEXED,
+ IlluminaUtil.IlluminaAdapterPair.NEXTERA_V2,
+ IlluminaUtil.IlluminaAdapterPair.FLUIDIGM));
+
+ @Option(doc = "The number of threads to run in parallel. If NUM_PROCESSORS = 0, number of cores is automatically set to " +
+ "the number of cores available on the machine. If NUM_PROCESSORS < 0, then the number of cores used will" +
+ " be the number available on the machine less NUM_PROCESSORS.")
+ public Integer NUM_PROCESSORS = 0;
+
+ @Option(doc = "If set, this is the first tile to be processed (used for debugging). Note that tiles are not processed" +
+ " in numerical order.",
+ optional = true)
+ public Integer FIRST_TILE;
+
+ @Option(doc = "If set, process no more than this many tiles (used for debugging).", optional = true)
+ public Integer TILE_LIMIT;
+
+ @Option(doc="Apply EAMSS filtering to identify inappropriately quality scored bases towards the ends of reads" +
+ " and convert their quality scores to Q2.")
+ public boolean APPLY_EAMSS_FILTER = true;
+
+ @Option(doc = "If true, call System.gc() periodically. This is useful in cases in which the -Xmx value passed " +
+ "is larger than the available memory.")
+ public Boolean FORCE_GC = true;
+
+ @Option(doc = "Configure SortingCollections to store this many records before spilling to disk. For an indexed" +
+ " run, each SortingCollection gets this value/number of indices.")
+ public int MAX_READS_IN_RAM_PER_TILE = 1200000;
+
+ @Option(doc="The minimum quality (after transforming 0s to 1s) expected from reads. If qualities are lower than this value, an error is thrown." +
+ "The default of 2 is what the Illumina's spec describes as the minimum, but in practice the value has been observed lower.")
+ public int MINIMUM_QUALITY = BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY;
+
+ @Option(doc="Whether to include non-PF reads", shortName="NONPF", optional=true)
+ public boolean INCLUDE_NON_PF_READS = true;
+
+ @Option(doc="The read name header formatting to emit. Casava1.8 formatting has additional information beyond Illumina, including: " +
+ "the passing-filter flag value for the read, the flowcell name, and the sequencer name.", optional = false)
+ public ReadNameFormat READ_NAME_FORMAT = ReadNameFormat.CASAVA_1_8;
+
+ @Option(shortName = "GZIP", doc = "Compress output FASTQ files using gzip and append a .gz extension to the file names.")
+ public boolean COMPRESS_OUTPUTS = false;
+
+ /** Simple switch to control the read name format to emit. */
+ public enum ReadNameFormat {
+ CASAVA_1_8, ILLUMINA
+ }
+
+ private final Map<String, FastqRecordsWriter> barcodeFastqWriterMap = new HashMap<String, FastqRecordsWriter>();
+ private ReadStructure readStructure;
+ IlluminaBasecallsConverter<FastqRecordsForCluster> basecallsConverter;
+ private static final Log log = Log.getInstance(IlluminaBasecallsToFastq.class);
+ private final FastqWriterFactory fastqWriterFactory = new FastqWriterFactory();
+ private ReadNameEncoder readNameEncoder;
+ private static final Comparator<FastqRecordsForCluster> queryNameComparator = new Comparator<FastqRecordsForCluster>() {
+ @Override
+ public int compare(final FastqRecordsForCluster r1, final FastqRecordsForCluster r2) {
+ return SAMRecordQueryNameComparator.compareReadNames(r1.templateRecords[0].getReadHeader(),
+ r2.templateRecords[0].getReadHeader());
+ }
+ };
+
+ @Override
+ protected int doWork() {
+ initialize();
+
+ basecallsConverter.doTileProcessing();
+
+ return 0;
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final LinkedList<String> errors = new LinkedList<String>();
+ if (READ_NAME_FORMAT == ReadNameFormat.CASAVA_1_8 && MACHINE_NAME == null) {
+ errors.add("MACHINE_NAME is required when using Casava1.8-style read name headers.");
+ }
+
+ if (READ_NAME_FORMAT == ReadNameFormat.CASAVA_1_8 && FLOWCELL_BARCODE == null) {
+ errors.add("FLOWCELL_BARCODE is required when using Casava1.8-style read name headers.");
+ }
+
+ if (errors.isEmpty()) {
+ return null;
+ } else {
+ return errors.toArray(new String[errors.size()]);
+ }
+ }
+
+ /**
+ * Prepares loggers, initiates garbage collection thread, parses arguments and initialized variables appropriately/
+ */
+ private void initialize() {
+ fastqWriterFactory.setCreateMd5(CREATE_MD5_FILE);
+ switch (READ_NAME_FORMAT) {
+ case CASAVA_1_8:
+ readNameEncoder = new Casava18ReadNameEncoder(MACHINE_NAME, RUN_BARCODE, FLOWCELL_BARCODE);
+ break;
+ case ILLUMINA:
+ readNameEncoder = new IlluminaReadNameEncoder(RUN_BARCODE);
+ break;
+ }
+
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(MINIMUM_QUALITY);
+ readStructure = new ReadStructure(READ_STRUCTURE);
+ if (MULTIPLEX_PARAMS != null) {
+ IOUtil.assertFileIsReadable(MULTIPLEX_PARAMS);
+ }
+ final boolean demultiplex;
+ if (OUTPUT_PREFIX != null) {
+ barcodeFastqWriterMap.put(null, buildWriter(OUTPUT_PREFIX));
+ demultiplex = false;
+ } else {
+ populateWritersFromMultiplexParams();
+ demultiplex = true;
+ }
+ final int readsPerCluster = readStructure.templates.length() + readStructure.barcodes.length();
+ basecallsConverter = new IlluminaBasecallsConverter<FastqRecordsForCluster>(BASECALLS_DIR, BARCODES_DIR, LANE, readStructure,
+ barcodeFastqWriterMap, demultiplex, MAX_READS_IN_RAM_PER_TILE/readsPerCluster, TMP_DIR, NUM_PROCESSORS,
+ FORCE_GC, FIRST_TILE, TILE_LIMIT, queryNameComparator,
+ new FastqRecordsForClusterCodec(readStructure.templates.length(),
+ readStructure.barcodes.length()), FastqRecordsForCluster.class, bclQualityEvaluationStrategy,
+ this.APPLY_EAMSS_FILTER, INCLUDE_NON_PF_READS);
+
+ log.info("READ STRUCTURE IS " + readStructure.toString());
+
+ basecallsConverter.setConverter(
+ new ClusterToFastqRecordsForClusterConverter(
+ basecallsConverter.getFactory().getOutputReadStructure()));
+
+ }
+
+ /**
+ * Assert that expectedCols are present
+ *
+ * @param actualCols The columns present in the MULTIPLEX_PARAMS file
+ * @param expectedCols The columns that are REQUIRED
+ */
+ private void assertExpectedColumns(final Set<String> actualCols, final Set<String> expectedCols) {
+ final Set<String> missingColumns = new HashSet<String>(expectedCols);
+ missingColumns.removeAll(actualCols);
+
+ if (missingColumns.size() > 0) {
+ throw new PicardException(String.format(
+ "MULTIPLEX_PARAMS file %s is missing the following columns: %s.",
+ MULTIPLEX_PARAMS.getAbsolutePath(), StringUtil.join(", ", missingColumns
+ )));
+ }
+ }
+
+ /**
+ * For each line in the MULTIPLEX_PARAMS file create a FastqRecordsWriter and put it in the barcodeFastqWriterMap map,
+ * where the key to the map is the concatenation of all barcodes in order for the given line.
+ */
+ private void populateWritersFromMultiplexParams() {
+ final TabbedTextFileWithHeaderParser libraryParamsParser = new TabbedTextFileWithHeaderParser(MULTIPLEX_PARAMS);
+
+ final Set<String> expectedColumnLabels = CollectionUtil.makeSet("OUTPUT_PREFIX");
+ final List<String> barcodeColumnLabels = new ArrayList<String>();
+ for (int i = 1; i <= readStructure.barcodes.length(); i++) {
+ barcodeColumnLabels.add("BARCODE_" + i);
+ }
+
+ expectedColumnLabels.addAll(barcodeColumnLabels);
+ assertExpectedColumns(libraryParamsParser.columnLabels(), expectedColumnLabels);
+
+ for (final TabbedTextFileWithHeaderParser.Row row : libraryParamsParser) {
+ List<String> barcodeValues = null;
+
+ if (barcodeColumnLabels.size() > 0) {
+ barcodeValues = new ArrayList<String>();
+ for (final String barcodeLabel : barcodeColumnLabels) {
+ barcodeValues.add(row.getField(barcodeLabel));
+ }
+ }
+
+ final String key = (barcodeValues == null || barcodeValues.contains("N")) ? null : StringUtil.join("", barcodeValues);
+ if (barcodeFastqWriterMap.containsKey(key)) { //This will catch the case of having more than 1 line in a non-barcoded MULTIPLEX_PARAMS file
+ throw new PicardException("Row for barcode " + key + " appears more than once in MULTIPLEX_PARAMS file " +
+ MULTIPLEX_PARAMS);
+ }
+
+ final FastqRecordsWriter writer = buildWriter(new File(row.getField("OUTPUT_PREFIX")));
+ barcodeFastqWriterMap.put(key, writer);
+ }
+ if (barcodeFastqWriterMap.isEmpty()) {
+ throw new PicardException("MULTIPLEX_PARAMS file " + MULTIPLEX_PARAMS + " does have any data rows.");
+ }
+ libraryParamsParser.close();
+ }
+
+ /**
+ * @return FastqRecordsWriter that contains one or more FastqWriters (amount depends on read structure), all using
+ * outputPrefix to determine the filename(s).
+ */
+ private FastqRecordsWriter buildWriter(final File outputPrefix) {
+ final File outputDir = outputPrefix.getAbsoluteFile().getParentFile();
+ IOUtil.assertDirectoryIsWritable(outputDir);
+ final String prefixString = outputPrefix.getName();
+ final String suffixString = COMPRESS_OUTPUTS ? "fastq.gz" : "fastq";
+ final FastqWriter[] templateWriters = new FastqWriter[readStructure.templates.length()];
+ final FastqWriter[] barcodeWriters = new FastqWriter[readStructure.barcodes.length()];
+ for (int i = 0; i < templateWriters.length; ++i) {
+ final String filename = String.format("%s.%d.%s", prefixString, i+1, suffixString);
+ templateWriters[i] = fastqWriterFactory.newWriter(new File(outputDir, filename));
+ }
+ for (int i = 0; i < barcodeWriters.length; ++i) {
+ final String filename = String.format("%s.barcode_%d.%s", prefixString, i+1, suffixString);
+ barcodeWriters[i] = fastqWriterFactory.newWriter(new File(outputDir, filename));
+ }
+ return new FastqRecordsWriter(templateWriters, barcodeWriters);
+ }
+
+ public static void main(final String[] args) {
+ new IlluminaBasecallsToFastq().instanceMainWithExit(args);
+ }
+
+ /**
+ * Container for various FastqWriters, one for each template read and one for each barcode read.
+ */
+ private static class FastqRecordsWriter implements IlluminaBasecallsConverter.ConvertedClusterDataWriter<FastqRecordsForCluster> {
+ final FastqWriter[] templateWriters;
+ final FastqWriter[] barcodeWriters;
+
+ /**
+ * @param templateWriters Writers for template reads in order, e,g. 0th element is for template read 1.
+ * @param barcodeWriters Writers for barcode reads in order, e,g. 0th element is for barcode read 1.
+ */
+ private FastqRecordsWriter(final FastqWriter[] templateWriters, final FastqWriter[] barcodeWriters) {
+ this.templateWriters = templateWriters;
+ this.barcodeWriters = barcodeWriters;
+ }
+
+ @Override
+ public void write(final FastqRecordsForCluster records) {
+ write(templateWriters, records.templateRecords);
+ write(barcodeWriters, records.barcodeRecords);
+ }
+
+ private void write(final FastqWriter[] writers, final FastqRecord[] records) {
+ for (int i = 0; i < writers.length; ++i) {
+ writers[i].write(records[i]);
+ }
+ }
+
+ @Override
+ public void close() {
+ for (final FastqWriter writer : templateWriters) {
+ writer.close();
+ }
+ for (final FastqWriter writer : barcodeWriters) {
+ writer.close();
+ }
+ }
+ }
+
+ /**
+ * Contains the results of transforming one cluster into the record(s) to be written to output file(s).
+ */
+ static class FastqRecordsForCluster {
+ // These are accessed directly by converter and writer rather than through getters and setters.
+ final FastqRecord[] templateRecords;
+ final FastqRecord[] barcodeRecords;
+
+ FastqRecordsForCluster(final int numTemplates, final int numBarcodes) {
+ templateRecords = new FastqRecord[numTemplates];
+ barcodeRecords = new FastqRecord[numBarcodes];
+ }
+ }
+
+ /**
+ * Passed to IlluminaBaseCallsConverter to do the conversion from input format to output format.
+ */
+ class ClusterToFastqRecordsForClusterConverter
+ implements IlluminaBasecallsConverter.ClusterDataConverter<FastqRecordsForCluster> {
+
+ private final int [] templateIndices;
+ private final int [] barcodeIndices;
+
+ ClusterToFastqRecordsForClusterConverter(final ReadStructure outputReadStructure) {
+ this.templateIndices = outputReadStructure.templates.getIndices();
+ this.barcodeIndices = outputReadStructure.barcodes.getIndices();
+ }
+
+ @Override
+ public FastqRecordsForCluster convertClusterToOutputRecord(final ClusterData cluster) {
+ final FastqRecordsForCluster ret = new FastqRecordsForCluster(readStructure.templates.length(), readStructure.barcodes.length());
+ final boolean appendReadNumberSuffix = ret.templateRecords.length > 1;
+ makeFastqRecords(ret.templateRecords, templateIndices, cluster, appendReadNumberSuffix);
+ makeFastqRecords(ret.barcodeRecords, barcodeIndices, cluster, false);
+ return ret;
+ }
+
+ private void makeFastqRecords(final FastqRecord[] recs, final int[] indices,
+ final ClusterData cluster, final boolean appendReadNumberSuffix) {
+ for (short i = 0; i < indices.length; ++i) {
+ final ReadData readData = cluster.getRead(indices[i]);
+ final String readBases = StringUtil.bytesToString(readData.getBases()).replace('.', 'N');
+ final String readName = readNameEncoder.generateReadName(cluster, appendReadNumberSuffix ? i + 1 : null);
+ recs[i] = new FastqRecord(
+ readName,
+ readBases,
+ null,
+ SAMUtils.phredToFastq(readData.getQualities())
+ );
+ }
+ }
+ }
+
+ /**
+ * Coded passed to IlluminaBasecallsConverter for use in SortingCollections of output records.
+ */
+ static class FastqRecordsForClusterCodec implements SortingCollection.Codec<FastqRecordsForCluster> {
+ private final int numTemplates;
+ private final int numBarcodes;
+ private BasicFastqWriter writer = null;
+ private FastqReader reader = null;
+
+ FastqRecordsForClusterCodec(final int numTemplates, final int numBarcodes) {
+ this.numTemplates = numTemplates;
+ this.numBarcodes = numBarcodes;
+ }
+
+ @Override
+ public void setOutputStream(final OutputStream os) {
+ writer = new BasicFastqWriter(new PrintStream(os));
+ }
+
+ @Override
+ public void setInputStream(final InputStream is) {
+ reader = new FastqReader(new BufferedReader(new InputStreamReader(is)));
+ }
+
+ @Override
+ public void encode(final FastqRecordsForCluster val) {
+ if (numTemplates != val.templateRecords.length) throw new IllegalStateException();
+ if (numBarcodes != val.barcodeRecords.length) throw new IllegalStateException();
+ encodeArray(val.templateRecords);
+ encodeArray(val.barcodeRecords);
+ writer.flush();
+ }
+
+ private void encodeArray(final FastqRecord[] recs) {
+ for (final FastqRecord rec: recs) {
+ writer.write(rec);
+ }
+ }
+
+ @Override
+ public FastqRecordsForCluster decode() {
+ if (!reader.hasNext()) return null;
+ final FastqRecordsForCluster ret = new FastqRecordsForCluster(numTemplates, numBarcodes);
+ decodeArray(ret.templateRecords);
+ decodeArray(ret.barcodeRecords);
+ return ret;
+ }
+
+ private void decodeArray(final FastqRecord[] recs) {
+ for (int i = 0; i < recs.length; ++i) {
+ recs[i] = reader.next();
+ }
+ }
+
+ @Override
+ public SortingCollection.Codec<FastqRecordsForCluster> clone() {
+ return new FastqRecordsForClusterCodec(numTemplates, numBarcodes);
+ }
+ }
+}
diff --git a/src/java/picard/illumina/IlluminaBasecallsToSam.java b/src/java/picard/illumina/IlluminaBasecallsToSam.java
new file mode 100644
index 0000000..94e56d0
--- /dev/null
+++ b/src/java/picard/illumina/IlluminaBasecallsToSam.java
@@ -0,0 +1,546 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina;
+
+import htsjdk.samtools.BAMRecordCodec;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Iso8601Date;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.SortingCollection;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Illumina;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.util.IlluminaUtil;
+import picard.util.IlluminaUtil.IlluminaAdapterPair;
+import picard.util.TabbedTextFileWithHeaderParser;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * IlluminaBasecallsToSam transforms a lane of Illumina data file formats (bcl, locs, clocs, qseqs, etc.) into
+ * SAM or BAM file format.
+ * <p/>
+ * In this application, barcode data is read from Illumina data file groups, each of which is associated with a tile.
+ * Each tile may contain data for any number of barcodes, and a single barcode's data may span multiple tiles. Once the
+ * barcode data is collected from files, each barcode's data is written to its own SAM/BAM. The barcode data must be
+ * written in order; this means that barcode data from each tile is sorted before it is written to file, and that if a
+ * barcode's data does span multiple tiles, data collected from each tile must be written in the order of the tiles
+ * themselves.
+ * <p/>
+ * This class employs a number of private subclasses to achieve this goal. The TileReadAggregator controls the flow
+ * of operation. It is fed a number of Tiles which it uses to spawn TileReaders. TileReaders are responsible for
+ * reading Illumina data for their respective tiles from disk, and as they collect that data, it is fed back into the
+ * TileReadAggregator. When a TileReader completes a tile, it notifies the TileReadAggregator, which reviews what was
+ * read and conditionally queues its writing to disk, baring in mind the requirements of write-order described in the
+ * previous paragraph. As writes complete, the TileReadAggregator re-evalutes the state of reads/writes and may queue
+ * more writes. When all barcodes for all tiles have been written, the TileReadAggregator shuts down.
+ * <p/>
+ * The TileReadAggregator controls task execution using a specialized ThreadPoolExecutor. It accepts special Runnables
+ * of type PriorityRunnable which allow a priority to be assigned to the runnable. When the ThreadPoolExecutor is
+ * assigning threads, it gives priority to those PriorityRunnables with higher priority values. In this application,
+ * TileReaders are assigned lowest priority, and write tasks are assigned high priority. It is designed in this fashion
+ * to minimize the amount of time data must remain in memory (write the data as soon as possible, then discard it from
+ * memory) while maximizing CPU usage.
+ *
+ * @author jburke at broadinstitute.org
+ * @author mccowan at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = IlluminaBasecallsToSam.USAGE,
+ usageShort = IlluminaBasecallsToSam.USAGE,
+ programGroup = Illumina.class
+)
+public class IlluminaBasecallsToSam extends CommandLineProgram {
+ // The following attributes define the command-line arguments
+
+ public static final String USAGE = "Generate a SAM or BAM file from data in an Illumina basecalls output directory";
+
+ @Option(doc = "The basecalls directory. ", shortName = "B")
+ public File BASECALLS_DIR;
+
+ @Option(doc = "The barcodes directory with _barcode.txt files (generated by ExtractIlluminaBarcodes). If not set, use BASECALLS_DIR. ", shortName = "BCD", optional = true)
+ public File BARCODES_DIR;
+
+ @Option(doc = "Lane number. ", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
+ public Integer LANE;
+
+ @Option(doc = "Deprecated (use LIBRARY_PARAMS). The output SAM or BAM file. Format is determined by extension.",
+ shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ mutex = {"BARCODE_PARAMS", "LIBRARY_PARAMS"})
+ public File OUTPUT;
+
+ @Option(doc = "The barcode of the run. Prefixed to read names.")
+ public String RUN_BARCODE;
+
+ @Option(doc = "Deprecated (use LIBRARY_PARAMS). The name of the sequenced sample",
+ shortName = StandardOptionDefinitions.SAMPLE_ALIAS_SHORT_NAME,
+ mutex = {"BARCODE_PARAMS", "LIBRARY_PARAMS"})
+ public String SAMPLE_ALIAS;
+
+ @Option(doc = "ID used to link RG header record with RG tag in SAM record. " +
+ "If these are unique in SAM files that get merged, merge performance is better. " +
+ "If not specified, READ_GROUP_ID will be set to <first 5 chars of RUN_BARCODE>.<LANE> .",
+ shortName = StandardOptionDefinitions.READ_GROUP_ID_SHORT_NAME, optional = true)
+ public String READ_GROUP_ID;
+
+ @Option(doc = "Deprecated (use LIBRARY_PARAMS). The name of the sequenced library",
+ shortName = StandardOptionDefinitions.LIBRARY_NAME_SHORT_NAME,
+ optional = true,
+ mutex = {"BARCODE_PARAMS", "LIBRARY_PARAMS"})
+ public String LIBRARY_NAME;
+
+ @Option(doc = "The name of the sequencing center that produced the reads. Used to set the RG.CN tag.", optional = true)
+ public String SEQUENCING_CENTER = "BI";
+
+ @Option(doc = "The start date of the run.", optional = true)
+ public Date RUN_START_DATE;
+
+ @Option(doc = "The name of the sequencing technology that produced the read.", optional = true)
+ public String PLATFORM = "illumina";
+
+ @Option(doc = ReadStructure.PARAMETER_DOC, shortName = "RS")
+ public String READ_STRUCTURE;
+
+ @Option(doc = "Deprecated (use LIBRARY_PARAMS). Tab-separated file for creating all output BAMs for barcoded run " +
+ "with single IlluminaBasecallsToSam invocation. Columns are BARCODE, OUTPUT, SAMPLE_ALIAS, and " +
+ "LIBRARY_NAME. Row with BARCODE=N is used to specify a file for no barcode match",
+ mutex = {"OUTPUT", "SAMPLE_ALIAS", "LIBRARY_NAME", "LIBRARY_PARAMS"})
+ public File BARCODE_PARAMS;
+
+ @Option(doc = "Tab-separated file for creating all output BAMs for a lane with single IlluminaBasecallsToSam " +
+ "invocation. The columns are OUTPUT, SAMPLE_ALIAS, and LIBRARY_NAME, BARCODE_1, BARCODE_2 ... BARCODE_X " +
+ "where X = number of barcodes per cluster (optional). Row with BARCODE_1 set to 'N' is used to specify a file " +
+ "for no barcode match. You may also provide any 2 letter RG header attributes (excluding PU, CN, PL, and" +
+ " DT) as columns in this file and the values for those columns will be inserted into the RG tag for the" +
+ " BAM file created for a given row.",
+ mutex = {"OUTPUT", "SAMPLE_ALIAS", "LIBRARY_NAME", "BARCODE_PARAMS"})
+ public File LIBRARY_PARAMS;
+
+ @Option(doc = "Which adapters to look for in the read.")
+ public List<IlluminaAdapterPair> ADAPTERS_TO_CHECK = new ArrayList<IlluminaAdapterPair>(
+ Arrays.asList(IlluminaAdapterPair.INDEXED,
+ IlluminaAdapterPair.DUAL_INDEXED,
+ IlluminaAdapterPair.NEXTERA_V2,
+ IlluminaAdapterPair.FLUIDIGM));
+
+ @Option(doc = "The number of threads to run in parallel. If NUM_PROCESSORS = 0, number of cores is automatically set to " +
+ "the number of cores available on the machine. If NUM_PROCESSORS < 0, then the number of cores used will" +
+ " be the number available on the machine less NUM_PROCESSORS.")
+ public Integer NUM_PROCESSORS = 0;
+
+ @Option(doc = "If set, this is the first tile to be processed (used for debugging). Note that tiles are not processed" +
+ " in numerical order.",
+ optional = true)
+ public Integer FIRST_TILE;
+
+ @Option(doc = "If set, process no more than this many tiles (used for debugging).", optional = true)
+ public Integer TILE_LIMIT;
+
+ @Option(doc = "If true, call System.gc() periodically. This is useful in cases in which the -Xmx value passed " +
+ "is larger than the available memory.")
+ public Boolean FORCE_GC = true;
+
+ @Option(doc="Apply EAMSS filtering to identify inappropriately quality scored bases towards the ends of reads" +
+ " and convert their quality scores to Q2.")
+ public boolean APPLY_EAMSS_FILTER = true;
+
+ @Option(doc = "Configure SortingCollections to store this many records before spilling to disk. For an indexed" +
+ " run, each SortingCollection gets this value/number of indices.")
+ public int MAX_READS_IN_RAM_PER_TILE = 1200000;
+
+ @Option(doc="The minimum quality (after transforming 0s to 1s) expected from reads. If qualities are lower than this value, an error is thrown." +
+ "The default of 2 is what the Illumina's spec describes as the minimum, but in practice the value has been observed lower.")
+ public int MINIMUM_QUALITY = BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY;
+
+ @Option(doc="Whether to include non-PF reads", shortName="NONPF", optional=true)
+ public boolean INCLUDE_NON_PF_READS = true;
+
+ private final Map<String, SAMFileWriterWrapper> barcodeSamWriterMap = new HashMap<String, SAMFileWriterWrapper>();
+ private ReadStructure readStructure;
+ IlluminaBasecallsConverter<SAMRecordsForCluster> basecallsConverter;
+ private static final Log log = Log.getInstance(IlluminaBasecallsToSam.class);
+ private BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
+
+ @Override
+ protected int doWork() {
+ initialize();
+ basecallsConverter.doTileProcessing();
+ return 0;
+ }
+
+ /**
+ * Prepares loggers, initiates garbage collection thread, parses arguments and initialized variables appropriately/
+ */
+ private void initialize() {
+ this.bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(MINIMUM_QUALITY);
+
+ if (OUTPUT != null) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+ }
+
+ if (LIBRARY_PARAMS != null) {
+ IOUtil.assertFileIsReadable(LIBRARY_PARAMS);
+ }
+
+ if (OUTPUT != null) {
+ barcodeSamWriterMap.put(null, buildSamFileWriter(OUTPUT, SAMPLE_ALIAS, LIBRARY_NAME, buildSamHeaderParameters(null)));
+ } else {
+ populateWritersFromLibraryParams();
+ }
+
+ readStructure = new ReadStructure(READ_STRUCTURE);
+
+ final int numOutputRecords = readStructure.templates.length();
+
+ basecallsConverter = new IlluminaBasecallsConverter<SAMRecordsForCluster>(BASECALLS_DIR, BARCODES_DIR, LANE, readStructure,
+ barcodeSamWriterMap, true, MAX_READS_IN_RAM_PER_TILE/numOutputRecords, TMP_DIR, NUM_PROCESSORS, FORCE_GC,
+ FIRST_TILE, TILE_LIMIT, new QueryNameComparator(), new Codec(numOutputRecords), SAMRecordsForCluster.class,
+ bclQualityEvaluationStrategy, this.APPLY_EAMSS_FILTER, INCLUDE_NON_PF_READS);
+
+ log.info("DONE_READING STRUCTURE IS " + readStructure.toString());
+
+ /**
+ * Be sure to pass the outputReadStructure to ClusterDataToSamConverter, which reflects the structure of the output cluster
+ * data which may be different from the input read structure (specifically if there are skips).
+ */
+ final ClusterDataToSamConverter converter = new ClusterDataToSamConverter(RUN_BARCODE, READ_GROUP_ID,
+ basecallsConverter.getFactory().getOutputReadStructure(), ADAPTERS_TO_CHECK);
+ basecallsConverter.setConverter(converter);
+
+ }
+
+ /**
+ * Assert that expectedCols are present and return actualCols - expectedCols
+ *
+ * @param actualCols The columns present in the LIBRARY_PARAMS file
+ * @param expectedCols The columns that are REQUIRED
+ * @return actualCols - expectedCols
+ */
+ private Set<String> findAndFilterExpectedColumns(final Set<String> actualCols, final Set<String> expectedCols) {
+ final Set<String> missingColumns = new HashSet<String>(expectedCols);
+ missingColumns.removeAll(actualCols);
+
+ if (missingColumns.size() > 0) {
+ throw new PicardException(String.format(
+ "LIBRARY_PARAMS file %s is missing the following columns: %s.",
+ LIBRARY_PARAMS.getAbsolutePath(), StringUtil.join(", ", missingColumns
+ )));
+ }
+
+ final Set<String> remainingColumns = new HashSet<String>(actualCols);
+ remainingColumns.removeAll(expectedCols);
+ return remainingColumns;
+ }
+
+ /**
+ * Given a set of columns assert that all columns conform to the format of an RG header attribute (i.e. 2 letters)
+ * the attribute is NOT a member of the rgHeaderTags that are built by default in buildSamHeaderParameters
+ *
+ * @param rgTagColumns A set of columns that should conform to the rg header attribute format
+ */
+ private void checkRgTagColumns(final Set<String> rgTagColumns) {
+ final Set<String> forbiddenHeaders = buildSamHeaderParameters(null).keySet();
+ forbiddenHeaders.retainAll(rgTagColumns);
+
+ if (forbiddenHeaders.size() > 0) {
+ throw new PicardException("Illegal ReadGroup tags in library params(barcode params) file(" + LIBRARY_PARAMS.getAbsolutePath() + ") Offending headers = " + StringUtil.join(", ", forbiddenHeaders));
+ }
+
+ for (final String column : rgTagColumns) {
+ if (column.length() > 2) {
+ throw new PicardException("Column label (" + column + ") unrecognized. Library params(barcode params) can only contain the columns " +
+ "(OUTPUT, LIBRARY_NAME, SAMPLE_ALIAS, BARCODE, BARCODE_<X> where X is a positive integer) OR two letter RG tags!");
+ }
+ }
+ }
+
+ /**
+ * For each line in the LIBRARY_PARAMS file create a SamFileWriter and put it in the barcodeSamWriterMap map, where
+ * the key to the map is the concatenation of all barcodes in order for the given line
+ */
+ private void populateWritersFromLibraryParams() {
+ final TabbedTextFileWithHeaderParser libraryParamsParser = new TabbedTextFileWithHeaderParser(LIBRARY_PARAMS);
+
+ final Set<String> expectedColumnLabels = CollectionUtil.makeSet("OUTPUT", "SAMPLE_ALIAS", "LIBRARY_NAME");
+ final List<String> barcodeColumnLabels = new ArrayList<String>();
+ if (readStructure.barcodes.length() == 1) {
+ //For the single barcode read case, the barcode label name can either by BARCODE or BARCODE_1
+ if (libraryParamsParser.hasColumn("BARCODE")) {
+ barcodeColumnLabels.add("BARCODE");
+ } else if (libraryParamsParser.hasColumn("BARCODE_1")) {
+ barcodeColumnLabels.add("BARCODE_1");
+ } else {
+ throw new PicardException("LIBRARY_PARAMS(BARCODE_PARAMS) file " + LIBRARY_PARAMS + " does not have column BARCODE or BARCODE_1.");
+ }
+ } else {
+ for (int i = 1; i <= readStructure.barcodes.length(); i++) {
+ barcodeColumnLabels.add("BARCODE_" + i);
+ }
+ }
+
+ expectedColumnLabels.addAll(barcodeColumnLabels);
+ final Set<String> rgTagColumns = findAndFilterExpectedColumns(libraryParamsParser.columnLabels(), expectedColumnLabels);
+ checkRgTagColumns(rgTagColumns);
+
+ for (final TabbedTextFileWithHeaderParser.Row row : libraryParamsParser) {
+ List<String> barcodeValues = null;
+
+ if (barcodeColumnLabels.size() > 0) {
+ barcodeValues = new ArrayList<String>();
+ for (final String barcodeLabel : barcodeColumnLabels) {
+ barcodeValues.add(row.getField(barcodeLabel));
+ }
+ }
+
+ final String key = (barcodeValues == null || barcodeValues.contains("N")) ? null : StringUtil.join("", barcodeValues);
+ if (barcodeSamWriterMap.containsKey(key)) { //This will catch the case of having more than 1 line in a non-barcoded LIBRARY_PARAMS file
+ throw new PicardException("Row for barcode " + key + " appears more than once in LIBRARY_PARAMS or BARCODE_PARAMS file " +
+ LIBRARY_PARAMS);
+ }
+
+ final Map<String, String> samHeaderParams = buildSamHeaderParameters(barcodeValues);
+
+ for (final String tagName : rgTagColumns) {
+ samHeaderParams.put(tagName, row.getField(tagName));
+ }
+
+ final SAMFileWriterWrapper writer = buildSamFileWriter(new File(row.getField("OUTPUT")),
+ row.getField("SAMPLE_ALIAS"), row.getField("LIBRARY_NAME"), samHeaderParams);
+ barcodeSamWriterMap.put(key, writer);
+ }
+ if (barcodeSamWriterMap.isEmpty()) {
+ throw new PicardException("LIBRARY_PARAMS(BARCODE_PARAMS) file " + LIBRARY_PARAMS + " does have any data rows.");
+ }
+ libraryParamsParser.close();
+ }
+
+ /**
+ * Create the list of headers that will be added to the SAMFileHeader for a library with the given barcodes (or
+ * the entire run if barcodes == NULL). Note that any value that is null will NOT be added via buildSamFileWriter
+ * but is placed in the map in order to be able to query the tags that we automatically add.
+ *
+ * @param barcodes The list of barcodes that uniquely identify the read group we are building parameters for
+ * @return A Map of ReadGroupHeaderTags -> Values
+ */
+ private Map<String, String> buildSamHeaderParameters(final List<String> barcodes) {
+ final Map<String, String> params = new HashMap<String, String>();
+
+ String platformUnit = RUN_BARCODE + "." + LANE;
+ if (barcodes != null) platformUnit += ("." + IlluminaUtil.barcodeSeqsToString(barcodes));
+ params.put("PU", platformUnit);
+
+ params.put("CN", SEQUENCING_CENTER);
+ params.put("PL", PLATFORM);
+ if (RUN_START_DATE != null) {
+ final Iso8601Date date = new Iso8601Date(RUN_START_DATE);
+ params.put("DT", date.toString());
+ } else {
+ params.put("DT", null);
+ }
+
+ return params;
+ }
+
+ /**
+ * Build a SamFileWriter that will write its contents to the output file.
+ *
+ * @param output The file to which to write
+ * @param sampleAlias The sample alias set in the read group header
+ * @param libraryName The name of the library to which this read group belongs
+ * @param headerParameters Header parameters that will be added to the RG header for this SamFile
+ * @return A SAMFileWriter
+ */
+ private SAMFileWriterWrapper buildSamFileWriter(final File output, final String sampleAlias,
+ final String libraryName, final Map<String, String> headerParameters) {
+ IOUtil.assertFileIsWritable(output);
+ final SAMReadGroupRecord rg = new SAMReadGroupRecord(READ_GROUP_ID);
+ rg.setSample(sampleAlias);
+
+ if (libraryName != null) rg.setLibrary(libraryName);
+ for (final Map.Entry<String, String> tagNameToValue : headerParameters.entrySet()) {
+ if (tagNameToValue.getValue() != null) {
+ rg.setAttribute(tagNameToValue.getKey(), tagNameToValue.getValue());
+ }
+ }
+
+ final SAMFileHeader header = new SAMFileHeader();
+ header.setSortOrder(SAMFileHeader.SortOrder.queryname);
+ header.addReadGroup(rg);
+ return new SAMFileWriterWrapper(new SAMFileWriterFactory().makeSAMOrBAMWriter(header, true, output));
+ }
+
+ public static void main(final String[] args) {
+ System.exit(new IlluminaBasecallsToSam().instanceMain(args));
+ }
+
+ /**
+ * Put any custom command-line validation in an override of this method.
+ * clp is initialized at this point and can be used to print usage and access args.
+ * Any options set by command-line parser can be validated.
+ *
+ * @return null if command line is valid. If command line is invalid, returns an array of error message
+ * to be written to the appropriate place.
+ */
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (BARCODE_PARAMS != null) {
+ LIBRARY_PARAMS = BARCODE_PARAMS;
+ }
+
+ final ArrayList<String> messages = new ArrayList<String>();
+
+ readStructure = new ReadStructure(READ_STRUCTURE);
+ if (!readStructure.barcodes.isEmpty()) {
+ if (LIBRARY_PARAMS == null) {
+ messages.add("BARCODE_PARAMS or LIBRARY_PARAMS is missing. If READ_STRUCTURE contains a B (barcode)" +
+ " then either LIBRARY_PARAMS or BARCODE_PARAMS(deprecated) must be provided!");
+ }
+ }
+
+ if (READ_GROUP_ID == null) {
+ READ_GROUP_ID = RUN_BARCODE.substring(0, 5) + "." + LANE;
+ }
+ if (messages.size() == 0) {
+ return null;
+ }
+ return messages.toArray(new String[messages.size()]);
+ }
+
+ private static class SAMFileWriterWrapper
+ implements IlluminaBasecallsConverter.ConvertedClusterDataWriter<SAMRecordsForCluster> {
+ public final SAMFileWriter writer;
+
+ private SAMFileWriterWrapper(final SAMFileWriter writer) {
+ this.writer = writer;
+ }
+
+ @Override
+ public void write(final SAMRecordsForCluster records) {
+ for (final SAMRecord rec : records.records) {
+ writer.addAlignment(rec);
+ }
+ }
+
+ @Override
+ public void close() {
+ writer.close();
+ }
+ }
+
+ static class SAMRecordsForCluster {
+ final SAMRecord[] records;
+
+ SAMRecordsForCluster(final int numRecords) {
+ records = new SAMRecord[numRecords];
+ }
+ }
+
+ static class QueryNameComparator implements Comparator<SAMRecordsForCluster> {
+ private final SAMRecordQueryNameComparator comparator = new SAMRecordQueryNameComparator();
+ @Override
+ public int compare(final SAMRecordsForCluster s1, final SAMRecordsForCluster s2) {
+ return comparator.compare(s1.records[0], s2.records[0]);
+ }
+ }
+
+ static class Codec implements SortingCollection.Codec<SAMRecordsForCluster> {
+ private final BAMRecordCodec bamCodec;
+ private final int numRecords;
+
+ Codec(final int numRecords, final BAMRecordCodec bamCodec) {
+ this.numRecords = numRecords;
+ this.bamCodec = bamCodec;
+ }
+
+ Codec(final int numRecords) {
+ this(numRecords, new BAMRecordCodec(null));
+ }
+
+ @Override
+ public void setOutputStream(final OutputStream os) {
+ bamCodec.setOutputStream(os);
+ }
+
+ @Override
+ public void setInputStream(final InputStream is) {
+ bamCodec.setInputStream(is);
+ }
+
+ @Override
+ public void encode(final SAMRecordsForCluster val) {
+ if (val.records.length != numRecords) {
+ throw new IllegalStateException(String.format("Expected number of clusters %d != actual %d",
+ numRecords, val.records.length));
+ }
+ for (final SAMRecord rec : val.records) {
+ bamCodec.encode(rec);
+ }
+ }
+
+ @Override
+ public SAMRecordsForCluster decode() {
+ final SAMRecord zerothRecord = bamCodec.decode();
+ if (zerothRecord == null) return null;
+ final SAMRecordsForCluster ret = new SAMRecordsForCluster(numRecords);
+ ret.records[0] = zerothRecord;
+ for (int i = 1; i < numRecords; ++i) {
+ ret.records[i] = bamCodec.decode();
+ if (ret.records[i] == null) {
+ throw new IllegalStateException(String.format("Expected to read % records but read only %d", numRecords, i));
+ }
+ }
+ return ret;
+ }
+
+ @Override
+ public SortingCollection.Codec<SAMRecordsForCluster> clone() {
+ return new Codec(numRecords, bamCodec.clone());
+ }
+ }
+}
diff --git a/src/java/picard/illumina/IlluminaLaneMetrics.java b/src/java/picard/illumina/IlluminaLaneMetrics.java
new file mode 100644
index 0000000..5e27214
--- /dev/null
+++ b/src/java/picard/illumina/IlluminaLaneMetrics.java
@@ -0,0 +1,23 @@
+package picard.illumina;
+
+import htsjdk.samtools.metrics.MetricBase;
+import java.lang.Double;
+import java.lang.Long;
+import java.lang.String;
+
+/**
+ * Embodies characteristics that describe a lane.
+ * @author mccowan
+ */
+public class IlluminaLaneMetrics extends MetricBase {
+ /** The number of clusters per unit area on the this lane expressed in units of [cluster / mm^2]. */
+ public Double CLUSTER_DENSITY;
+
+ /** This lane's number. */
+ public Long LANE;
+
+ /** This property is not exposed in a field to avoid complications with MetricBase's dependency on reflection. */
+ public static String getExtension() {
+ return "illumina_lane_metrics";
+ }
+}
diff --git a/src/java/picard/illumina/IlluminaPhasingMetrics.java b/src/java/picard/illumina/IlluminaPhasingMetrics.java
new file mode 100644
index 0000000..57c16dc
--- /dev/null
+++ b/src/java/picard/illumina/IlluminaPhasingMetrics.java
@@ -0,0 +1,68 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina;
+
+import picard.illumina.parser.Tile;
+import picard.illumina.parser.TileTemplateRead;
+import htsjdk.samtools.metrics.MetricBase;
+
+import java.lang.String;import java.util.ArrayList;
+import java.util.Collection;
+
+
+/**
+ * Metrics for Illumina Basecalling that stores median phasing and prephasing percentages on a per-template-read, per-lane basis.
+ * For each lane/template read # (i.e. FIRST, SECOND) combination we will store the median values of both the phasing and prephasing
+ * values for every tile in that lane/template read pair.
+ *
+ * @author jgentry
+ */
+public class IlluminaPhasingMetrics extends MetricBase {
+ public long LANE;
+ public String TYPE_NAME;
+ public double PHASING_APPLIED;
+ public double PREPHASING_APPLIED;
+
+ /** Calculate the median phasing & prephasing values for a lane's tiles and create the appropriate IlluminaPhasingMetrics for them */
+ public static Collection<IlluminaPhasingMetrics> getPhasingMetricsForTiles(final long lane, final Collection<Tile> tilesForLane) {
+ final LanePhasingMetricsCollector lanePhasingMetricsCollector = new LanePhasingMetricsCollector(tilesForLane);
+ final Collection<IlluminaPhasingMetrics> phasingMetrics = new ArrayList<IlluminaPhasingMetrics>();
+ for (final TileTemplateRead tileTemplateRead : lanePhasingMetricsCollector.getMedianPhasingMap().keySet()) {
+ final IlluminaPhasingMetrics phasingMetric = new IlluminaPhasingMetrics();
+ phasingMetric.LANE = lane;
+ phasingMetric.TYPE_NAME = tileTemplateRead.toString();
+ phasingMetric.PHASING_APPLIED = lanePhasingMetricsCollector.getMedianPhasingMap().get(tileTemplateRead);
+ phasingMetric.PREPHASING_APPLIED = lanePhasingMetricsCollector.getMedianPrePhasingMap().get(tileTemplateRead);
+ phasingMetrics.add(phasingMetric);
+ }
+
+ return phasingMetrics;
+ }
+
+ /** This property is not exposed in a field to avoid complications with MetricBase's dependency on reflection. */
+ public static String getExtension() {
+ return "illumina_phasing_metrics";
+ }
+}
diff --git a/src/java/picard/illumina/LanePhasingMetricsCollector.java b/src/java/picard/illumina/LanePhasingMetricsCollector.java
new file mode 100644
index 0000000..ffa6556
--- /dev/null
+++ b/src/java/picard/illumina/LanePhasingMetricsCollector.java
@@ -0,0 +1,84 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina;
+
+import picard.illumina.parser.Tile;
+import picard.illumina.parser.TileTemplateRead;
+import picard.util.MathUtil;
+import htsjdk.samtools.util.CollectionUtil;
+
+import java.lang.Float;import java.util.*;import java.util.Collection;import java.util.Collections;import java.util.Map;import java.util.TreeMap;
+
+/** Helper class used to transform tile data for a lane into a collection of IlluminaPhasingMetrics */
+public class LanePhasingMetricsCollector {
+ private final Map<TileTemplateRead, Float> medianPhasingMap;
+ private final Map<TileTemplateRead, Float> medianPrePhasingMap;
+
+ /** Constructor takes a lane's collection of Tiles and calculates the median phasing/prephasing for the
+ * first and second (if available) reads
+ */
+ public LanePhasingMetricsCollector(final Collection<Tile> laneTiles) {
+ final Map<TileTemplateRead, Float> medianPhasingMap = new TreeMap<TileTemplateRead, Float>();
+ final Map<TileTemplateRead, Float> medianPrePhasingMap = new TreeMap<TileTemplateRead, Float>();
+
+ final CollectionUtil.MultiMap<TileTemplateRead, Float> phasingValues = new CollectionUtil.MultiMap<TileTemplateRead, Float>();
+ final CollectionUtil.MultiMap<TileTemplateRead, Float> prePhasingValues = new CollectionUtil.MultiMap<TileTemplateRead, Float>();
+
+ // Collect the phasing/prephasing values from all of the tiles, sorted by template read #
+ for (final Tile tile : laneTiles) {
+ for (final TileTemplateRead tileTemplateRead : tile.getPhasingMap().keySet()) {
+ phasingValues.append(tileTemplateRead, tile.getPhasingMap().get(tileTemplateRead));
+ prePhasingValues.append(tileTemplateRead, tile.getPrePhasingMap().get(tileTemplateRead));
+ }
+ }
+
+ // Calculate the medians for the collected data
+ for (final TileTemplateRead tileTemplateRead : phasingValues.keySet()) {
+ medianPhasingMap.put(tileTemplateRead, medianPercentage(phasingValues.get(tileTemplateRead)));
+ medianPrePhasingMap.put(tileTemplateRead, medianPercentage(prePhasingValues.get(tileTemplateRead)));
+ }
+
+ this.medianPhasingMap = Collections.unmodifiableMap(medianPhasingMap);
+ this.medianPrePhasingMap = Collections.unmodifiableMap(medianPrePhasingMap);
+ }
+
+ public Map<TileTemplateRead, Float> getMedianPhasingMap() {
+ return medianPhasingMap;
+ }
+
+ public Map<TileTemplateRead, Float> getMedianPrePhasingMap() {
+ return medianPrePhasingMap;
+ }
+
+ private static float medianPercentage(final Collection<Float> phaseValues) {
+ final double[] values = new double[phaseValues.size()];
+ int i = 0;
+ for (Float phaseValue : phaseValues) {
+ values[i] = (double)phaseValue;
+ i++;
+ }
+ return (float)MathUtil.median(values) * 100;
+ }
+}
diff --git a/src/java/picard/illumina/MarkIlluminaAdapters.java b/src/java/picard/illumina/MarkIlluminaAdapters.java
new file mode 100644
index 0000000..5cc05fa
--- /dev/null
+++ b/src/java/picard/illumina/MarkIlluminaAdapters.java
@@ -0,0 +1,277 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina;
+
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordIterator;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Illumina;
+import picard.util.AdapterMarker;
+import picard.util.AdapterPair;
+import picard.util.ClippingUtility;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import static picard.util.IlluminaUtil.IlluminaAdapterPair;
+
+/**
+ * Command line program to mark the location of adapter sequences.
+ * This also outputs a Histogram of metrics describing the clipped bases
+ *
+ * @author Tim Fennell (adapted by mborkan at broadinstitute.org)
+ */
+ at CommandLineProgramProperties(
+ usage = "Reads a SAM or BAM file and rewrites it with new adapter-trimming tags.\n" +
+ "Clear any existing adapter-trimming tags (XT:i:).\n" +
+ "Only works for unaligned files in query-name order.\n"+
+ "Note: This is a utility program and will not be run in the pipeline.\n",
+ usageShort = "Reads a SAM or BAM file and rewrites it with new adapter-trimming tags",
+ programGroup = Illumina.class
+)
+public class MarkIlluminaAdapters extends CommandLineProgram {
+
+ // The following attributes define the command-line arguments
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(doc = "If output is not specified, just the metrics are generated",
+ shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, optional = true)
+ public File OUTPUT;
+
+ @Option(doc = "Histogram showing counts of bases_clipped in how many reads", shortName = "M")
+ public File METRICS;
+
+ @Option(doc = "The minimum number of bases to match over when clipping single-end reads.")
+ public int MIN_MATCH_BASES_SE = ClippingUtility.MIN_MATCH_BASES;
+
+ @Option(doc = "The minimum number of bases to match over (per-read) when clipping paired-end reads.")
+ public int MIN_MATCH_BASES_PE = ClippingUtility.MIN_MATCH_PE_BASES;
+
+ @Option(doc = "The maximum mismatch error rate to tolerate when clipping single-end reads.")
+ public double MAX_ERROR_RATE_SE = ClippingUtility.MAX_ERROR_RATE;
+
+ @Option(doc = "The maximum mismatch error rate to tolerate when clipping paired-end reads.")
+ public double MAX_ERROR_RATE_PE = ClippingUtility.MAX_PE_ERROR_RATE;
+
+ @Option(doc = "DEPRECATED. Whether this is a paired-end run. No longer used.", shortName = "PE", optional = true)
+ public Boolean PAIRED_RUN;
+
+ @Option(doc = "Which adapters sequences to attempt to identify and clip.")
+ public List<IlluminaAdapterPair> ADAPTERS =
+ CollectionUtil.makeList(IlluminaAdapterPair.INDEXED,
+ IlluminaAdapterPair.DUAL_INDEXED,
+ IlluminaAdapterPair.PAIRED_END
+ );
+
+ @Option(doc = "For specifying adapters other than standard Illumina", optional = true)
+ public String FIVE_PRIME_ADAPTER;
+ @Option(doc = "For specifying adapters other than standard Illumina", optional = true)
+ public String THREE_PRIME_ADAPTER;
+
+ @Option(doc = "Adapters are truncated to this length to speed adapter matching. Set to a large number to effectively disable truncation.")
+ public int ADAPTER_TRUNCATION_LENGTH = AdapterMarker.DEFAULT_ADAPTER_LENGTH;
+
+ @Option(doc = "If looking for multiple adapter sequences, then after having seen this many adapters, shorten the list of sequences. " +
+ "Keep the adapters that were found most frequently in the input so far. " +
+ "Set to -1 if the input has a heterogeneous mix of adapters so shortening is undesirable.",
+ shortName = "APT")
+ public int PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN = AdapterMarker.DEFAULT_PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN;
+
+ @Option(doc = "If pruning the adapter list, keep only this many adapter sequences when pruning the list (plus any adapters that " +
+ "were tied with the adapters being kept).")
+ public int NUM_ADAPTERS_TO_KEEP = AdapterMarker.DEFAULT_NUM_ADAPTERS_TO_KEEP;
+
+ private static final Log log = Log.getInstance(MarkIlluminaAdapters.class);
+
+ // Stock main method
+ public static void main(final String[] args) {
+ System.exit(new MarkIlluminaAdapters().instanceMain(args));
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ if ((FIVE_PRIME_ADAPTER != null && THREE_PRIME_ADAPTER == null) || (THREE_PRIME_ADAPTER != null && FIVE_PRIME_ADAPTER == null)) {
+ return new String[]{"Either both or neither of THREE_PRIME_ADAPTER and FIVE_PRIME_ADAPTER must be set."};
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(METRICS);
+
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+ final SAMFileHeader.SortOrder order = in.getFileHeader().getSortOrder();
+ SAMFileWriter out = null;
+ if (OUTPUT != null) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+ out = new SAMFileWriterFactory().makeSAMOrBAMWriter(in.getFileHeader(), true, OUTPUT);
+ }
+
+ final Histogram<Integer> histo = new Histogram<Integer>("clipped_bases", "read_count");
+
+ // Combine any adapters and custom adapter pairs from the command line into an array for use in clipping
+ final AdapterPair[] adapters;
+ {
+ final List<AdapterPair> tmp = new ArrayList<AdapterPair>();
+ tmp.addAll(ADAPTERS);
+ if (FIVE_PRIME_ADAPTER != null && THREE_PRIME_ADAPTER != null) {
+ tmp.add(new CustomAdapterPair(FIVE_PRIME_ADAPTER, THREE_PRIME_ADAPTER));
+ }
+ adapters = tmp.toArray(new AdapterPair[tmp.size()]);
+ }
+
+ ////////////////////////////////////////////////////////////////////////
+ // Main loop that consumes reads, clips them and writes them to the output
+ ////////////////////////////////////////////////////////////////////////
+ final ProgressLogger progress = new ProgressLogger(log, 1000000, "Read");
+ final SAMRecordIterator iterator = in.iterator();
+
+ final AdapterMarker adapterMarker = new AdapterMarker(ADAPTER_TRUNCATION_LENGTH, adapters).
+ setMaxPairErrorRate(MAX_ERROR_RATE_PE).setMinPairMatchBases(MIN_MATCH_BASES_PE).
+ setMaxSingleEndErrorRate(MAX_ERROR_RATE_SE).setMinSingleEndMatchBases(MIN_MATCH_BASES_SE).
+ setNumAdaptersToKeep(NUM_ADAPTERS_TO_KEEP).
+ setThresholdForSelectingAdaptersToKeep(PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN);
+
+ while (iterator.hasNext()) {
+ final SAMRecord rec = iterator.next();
+ final SAMRecord rec2 = rec.getReadPairedFlag() && iterator.hasNext() ? iterator.next() : null;
+ rec.setAttribute(ReservedTagConstants.XT, null);
+
+ // Do the clipping one way for PE and another for SE reads
+ if (rec.getReadPairedFlag()) {
+ // Assert that the input file is in query name order only if we see some PE reads
+ if (order != SAMFileHeader.SortOrder.queryname) {
+ throw new PicardException("Input BAM file must be sorted by queryname");
+ }
+
+ if (rec2 == null) throw new PicardException("Missing mate pair for paired read: " + rec.getReadName());
+ rec2.setAttribute(ReservedTagConstants.XT, null);
+
+ // Assert that we did in fact just get two mate pairs
+ if (!rec.getReadName().equals(rec2.getReadName())) {
+ throw new PicardException("Adjacent reads expected to be mate-pairs have different names: " +
+ rec.getReadName() + ", " + rec2.getReadName());
+ }
+
+ // establish which of pair is first and which second
+ final SAMRecord first, second;
+
+ if (rec.getFirstOfPairFlag() && rec2.getSecondOfPairFlag()) {
+ first = rec;
+ second = rec2;
+ } else if (rec.getSecondOfPairFlag() && rec2.getFirstOfPairFlag()) {
+ first = rec2;
+ second = rec;
+ } else {
+ throw new PicardException("Two reads with same name but not correctly marked as 1st/2nd of pair: " + rec.getReadName());
+ }
+
+ adapterMarker.adapterTrimIlluminaPairedReads(first, second);
+ } else {
+ adapterMarker.adapterTrimIlluminaSingleRead(rec);
+ }
+
+ // Then output the records, update progress and metrics
+ for (final SAMRecord r : new SAMRecord[]{rec, rec2}) {
+ if (r != null) {
+ progress.record(r);
+ if (out != null) out.addAlignment(r);
+
+ final Integer clip = rec.getIntegerAttribute(ReservedTagConstants.XT);
+ if (clip != null) histo.increment(rec.getReadLength() - clip + 1);
+ }
+ }
+ }
+
+ if (out != null) out.close();
+
+ // Lastly output the metrics to file
+ final MetricsFile<?, Integer> metricsFile = getMetricsFile();
+ metricsFile.setHistogram(histo);
+ metricsFile.write(METRICS);
+
+ CloserUtil.close(in);
+ return 0;
+ }
+
+ private class CustomAdapterPair implements AdapterPair {
+
+ final String fivePrime, threePrime, fivePrimeReadOrder;
+ final byte[] fivePrimeBytes, threePrimeBytes, fivePrimeReadOrderBytes;
+
+ private CustomAdapterPair(final String fivePrime, final String threePrime) {
+ this.threePrime = threePrime;
+ this.threePrimeBytes = StringUtil.stringToBytes(threePrime);
+
+ this.fivePrime = fivePrime;
+ this.fivePrimeReadOrder = SequenceUtil.reverseComplement(fivePrime);
+ this.fivePrimeBytes = StringUtil.stringToBytes(fivePrime);
+ this.fivePrimeReadOrderBytes = StringUtil.stringToBytes(fivePrimeReadOrder);
+ }
+
+ public String get3PrimeAdapter() { return threePrime; }
+
+ public String get5PrimeAdapter() { return fivePrime; }
+
+ public String get3PrimeAdapterInReadOrder() { return threePrime; }
+
+ public String get5PrimeAdapterInReadOrder() { return fivePrimeReadOrder; }
+
+ public byte[] get3PrimeAdapterBytes() { return threePrimeBytes; }
+
+ public byte[] get5PrimeAdapterBytes() { return fivePrimeBytes; }
+
+ public byte[] get3PrimeAdapterBytesInReadOrder() { return threePrimeBytes; }
+
+ public byte[] get5PrimeAdapterBytesInReadOrder() { return fivePrimeReadOrderBytes; }
+
+ public String getName() { return "Custom adapter pair"; }
+ }
+}
diff --git a/src/java/picard/illumina/parser/BarcodeParser.java b/src/java/picard/illumina/parser/BarcodeParser.java
new file mode 100644
index 0000000..675a419
--- /dev/null
+++ b/src/java/picard/illumina/parser/BarcodeParser.java
@@ -0,0 +1,84 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CollectionUtil;
+import picard.illumina.parser.readers.BarcodeFileReader;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * @author jburke at broadinstitute.org
+ */
+class BarcodeParser extends PerTileParser<BarcodeData> {
+
+ private static final Set<IlluminaDataType> SUPPORTED_TYPES = Collections.unmodifiableSet(CollectionUtil.makeSet(IlluminaDataType.Barcodes));
+
+ public BarcodeParser(final IlluminaFileMap tilesToFiles) {
+ super(tilesToFiles);
+ }
+
+ public BarcodeParser(final IlluminaFileMap tilesToFiles, final int nextTile) {
+ super(tilesToFiles, nextTile);
+ }
+
+ @Override
+ protected CloseableIterator<BarcodeData> makeTileIterator(File nextTileFile) {
+ return new BarcodeDataIterator(nextTileFile);
+ }
+
+ public Set<IlluminaDataType> supportedTypes() {
+ return SUPPORTED_TYPES;
+ }
+
+ private static class BarcodeDataIterator implements CloseableIterator<BarcodeData>{
+ private BarcodeFileReader bfr;
+ public BarcodeDataIterator(final File file) {
+ bfr = new BarcodeFileReader(file);
+ }
+
+ public void close() {
+ bfr.close();
+ }
+
+ public boolean hasNext() {
+ return bfr.hasNext();
+ }
+
+ public BarcodeData next() {
+ return new BarcodeData() {
+ public String getBarcode() {
+ return bfr.next();
+ }
+ };
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/BclData.java b/src/java/picard/illumina/parser/BclData.java
new file mode 100644
index 0000000..ac8845d
--- /dev/null
+++ b/src/java/picard/illumina/parser/BclData.java
@@ -0,0 +1,30 @@
+package picard.illumina.parser;
+
+/** A class that implements the IlluminaData interfaces provided by this parser
+ * One BclData object is returned to IlluminaDataProvider per cluster and each
+ * first level array in bases and qualities represents a single read in that
+ * cluster */
+public class BclData implements BaseData, QualityData {
+ public final byte [][] bases;
+ public final byte [][] qualities;
+
+ public BclData(final int[] outputLengths) {
+ bases = new byte[outputLengths.length][];
+ qualities = new byte[outputLengths.length][];
+
+ for(int i = 0; i < outputLengths.length; i++) {
+ bases[i] = new byte[outputLengths[i]];
+ qualities[i] = new byte[outputLengths[i]];
+ }
+ }
+
+ @Override
+ public byte[][] getBases() {
+ return bases;
+ }
+
+ @Override
+ public byte[][] getQualities() {
+ return qualities;
+ }
+}
diff --git a/src/java/picard/illumina/parser/BclParser.java b/src/java/picard/illumina/parser/BclParser.java
new file mode 100644
index 0000000..a694bb2
--- /dev/null
+++ b/src/java/picard/illumina/parser/BclParser.java
@@ -0,0 +1,295 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.illumina.parser.readers.BclReader;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CollectionUtil.makeSet;
+
+/**
+ * BclParser parses a number of BclFiles equal to the total of all the values in outputLengths and returns a BclData object
+ * segmented based on these lengths. The only client of this class should be IlluminaDataProvider and an test classes. See BclReader for
+ * more information on BclFiles. BclParser provides support for reading BaseCalls and QualityScores.
+ */
+class BclParser extends PerTileCycleParser<BclData> {
+ private static final int EAMSS_M2_GE_THRESHOLD = 30;
+ private static final int EAMSS_S1_LT_THRESHOLD = 15; //was 15
+ public static final byte MASKING_QUALITY = (byte) 0x02;
+
+ private static final Set<IlluminaDataType> SUPPORTED_TYPES = Collections.unmodifiableSet(makeSet(IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores));
+
+ protected final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
+ private final boolean applyEamssFilter;
+
+ public BclParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles, final OutputMapping outputMapping, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy) {
+ this(directory, lane, tilesToCycleFiles, outputMapping, true, bclQualityEvaluationStrategy);
+ this.initialize();
+ }
+
+ public BclParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles, final OutputMapping outputMapping, final boolean applyEamssFilter, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy) {
+ super(directory, lane, tilesToCycleFiles, outputMapping);
+ this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
+ this.applyEamssFilter = applyEamssFilter;
+ this.initialize();
+ }
+
+ /**
+ * Create a Bcl parser for an individual cycle and wrap it with the CycleFilesParser interface which populates
+ * the correct cycle in BclData.
+ *
+ * @param files The files to parse.
+ * @return A CycleFilesParser that populates a BclData object with data for a single cycle
+ */
+ @Override
+ protected CycleFilesParser<BclData> makeCycleFileParser(final List<File> files) {
+ return new BclDataCycleFileParser(files);
+ }
+
+ @Override
+ public void initialize() {
+ seekToTile(currentTile);
+ }
+
+ @Override
+ public Set<IlluminaDataType> supportedTypes() {
+ return SUPPORTED_TYPES;
+ }
+
+ @Override
+ public BclData next() {
+ final BclData bclData = super.next();
+
+ final byte[][] bases = bclData.getBases();
+ final byte[][] qualities = bclData.getQualities();
+
+ //first run EAMSS
+ if (this.applyEamssFilter) {
+ for (int i = 0; i < bases.length; i++) {
+ runEamssForReadInPlace(bases[i], qualities[i]);
+ }
+ }
+
+ return bclData;
+ }
+
+ /**
+ * EAMSS is an Illumina Developed Algorithm for detecting reads whose quality has deteriorated towards
+ * their end and revising the quality to the masking quality (2) if this is the case. This algorithm
+ * works as follows (with one exception):
+ * <p/>
+ * Start at the end (high indices, at the right below) of the read and calculate an EAMSS tally at each
+ * location as follow:
+ * if(quality[i] < 15) tally += 1
+ * if(quality[i] >= 15 and < 30) tally = tally
+ * if(quality[i] >= 30) tally -= 2
+ * <p/>
+ * <p/>
+ * For each location, keep track of this tally (e.g.)
+ * Read Starts at <- this end
+ * Cycle: 1 2 3 4 5 6 7 8 9
+ * Bases: A C T G G G T C A
+ * Qualities: 32 32 16 15 8 10 32 2 2
+ * Cycle Score: -2 -2 0 0 1 1 -2 1 1 //The EAMSS Score determined for this cycle alone
+ * EAMSS TALLY: 0 0 2 2 2 1 0 2 1
+ * X - Earliest instance of Max-Score
+ * <p/>
+ * You must keep track of the maximum EAMSS tally (in this case 2) and the earliest(lowest) cycle at which
+ * it occurs. If and only if, the max EAMSS tally >= 1 then from there until the end(highest cycle) of the
+ * read reassign these qualities as 2 (the masking quality). The output qualities would therefore be
+ * transformed from:
+ * <p/>
+ * Original Qualities: 32 32 16 15 8 10 32 2 2 to
+ * Final Qualities: 32 32 2 2 2 2 2 2 2
+ * X - Earliest instance of max-tally/end of masking
+ * <p/>
+ * IMPORTANT:
+ * The one exception is: If the max EAMSS Tally is preceded by a long string of G basecalls (10 or more, with a single basecall exception per10 bases)
+ * then the masking continues to the beginning of that string of G's. E.g.:
+ * <p/>
+ * Cycle: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
+ * Bases: C T A C A G A G G G G G G G G C A T
+ * Qualities: 30 22 26 27 28 30 7 34 20 19 38 15 32 32 10 4 2 5
+ * Cycle Score: -2 0 0 0 0 -2 1 -2 0 0 -2 0 -2 -2 1 1 1 1
+ * EAMSS TALLY: -2 -5 -5 -5 -5 -5 -3 -4 -2 -2 -2 0 0 2 4 3 2 1
+ * X- Earliest instance of Max-Tally
+ * <p/>
+ * Resulting Transformation:
+ * Bases: C T A C A G A G G G G G G G G C A T
+ * Original Qualities: 30 22 26 27 28 30 7 34 20 19 38 15 32 32 10 4 2 5
+ * Final Qualities: 30 22 26 27 28 2 2 2 2 2 2 2 2 2 2 2 2 2
+ * X- Earliest instance of Max-Tally
+ * X - Start of EAMSS masking due to G-Run
+ * <p/>
+ * To further clarify the exception rule here are a few examples:
+ * A C G A C G G G G G G G G G G G G G G G G G G G G A C T
+ * X - Earliest instance of Max-Tally
+ * X - Start of EAMSS masking (with a two base call jump because we have 20 bases in the run already)
+ * <p/>
+ * T T G G A G G G G G G G G G G G G G G G G G G A G A C T
+ * X - Earliest instance of Max-Tally
+ * X - We can skip this A as well as the earlier A because we have 20 or more bases in the run already
+ * X - Start of EAMSS masking (with a two base call jump because we have 20 bases in the run)
+ * <p/>
+ * T T G G G A A G G G G G G G G G G G G G G G G G G T T A T
+ * X - Earliest instance of Max-Tally
+ * X X - WE can skip these bases because the first A counts as the first skip and as far as the length of the string of G's is
+ * concerned, these are both counted like G's
+ * X - This A is the 20th base in the string of G's and therefore can be skipped
+ * X - Note that the A's previous to the G's are only included because there are G's further on that are within the number
+ * of allowable exceptions away (i.e. 2 in this instance), if there were NO G's after the A's you CANNOT count the A's
+ * as part of the G strings (even if no exceptions have previously occured) In other words, the end of the string of G's
+ * MUST end in a G not an "exception"
+ * <p/>
+ * However, if the max-tally occurs to the right of the run of Gs then this is still part of the string of G's but does count towards
+ * the number of exceptions allowable
+ * (e.g.)
+ * T T G G G G G G G G G G A C G
+ * X - Earliest instance of Max-tally
+ * The first index CAN be considered as an exception, the above would be masked to
+ * the following point:
+ * T T G G G G G G G G G G A C G
+ * X - End of EAMSS masking due to G-Run
+ * <p/>
+ * To sum up the final points, a string of G's CAN START with an exception but CANNOT END in an exception.
+ *
+ * @param bases Bases for a single read in the cluster ( not the entire cluster )
+ * @param qualities Qualities for a single read in the cluster ( not the entire cluster )
+ */
+ protected static void runEamssForReadInPlace(final byte[] bases, final byte[] qualities) {
+ int eamssTally = 0;
+ int maxTally = Integer.MIN_VALUE;
+ int indexOfMax = -1;
+
+ for (int i = bases.length - 1; i >= 0; i--) {
+ final int quality = (0xff & qualities[i]);
+
+ if (quality >= EAMSS_M2_GE_THRESHOLD) {
+ eamssTally -= 2;
+ } else if (quality < EAMSS_S1_LT_THRESHOLD) {
+ eamssTally += 1;
+ }
+
+ if (eamssTally >= maxTally) {
+ indexOfMax = i;
+ maxTally = eamssTally;
+ }
+ }
+
+ if (maxTally >= 1) {
+ int numGs = 0;
+ int exceptions = 0;
+
+ for (int i = indexOfMax; i >= 0; i--) {
+ if (bases[i] == 'G') {
+ ++numGs;
+ } else {
+ final Integer skip = skipBy(i, numGs, exceptions, bases);
+ if (skip != null) {
+ exceptions += skip;
+ numGs += skip;
+ i -= (skip - 1);
+ } else {
+ break;
+ }
+ }
+ }
+
+ if (numGs >= 10) {
+ indexOfMax = (indexOfMax + 1) - numGs;
+ }
+
+ for (int i = indexOfMax; i < qualities.length; i++) {
+ qualities[i] = MASKING_QUALITY;
+ }
+ }
+ }
+
+ /**
+ * Determine whether or not the base at index is part of a skippable section in a run of G's, if so
+ * return the number of bases that the section is composed of.
+ *
+ * @param index Current index, which should be the index of a non-'G' base
+ * @param numGs The number of bases in the current string of G's for this read
+ * @param prevExceptions The number of exceptions previously detected in this string by this method
+ * @param bases The bases of this read
+ * @return If we have not reached our exception limit (1/every 10bases) and a G is within exceptionLimit(numGs/10)
+ * indices before the current index then return index - (index of next g), else return null Null indicates this is
+ * NOT a skippable region, if we run into index 0 without finding a g then NULL is also returned
+ */
+ private static Integer skipBy(final int index, final int numGs, final int prevExceptions, final byte[] bases) {
+ Integer skip = null;
+ for (int backup = 1; backup <= index; backup++) {
+ final int exceptionLimit = Math.max((numGs + backup) / 10, 1);
+ if (prevExceptions + backup > exceptionLimit) {
+ break;
+ }
+ if (bases[index - backup] == 'G') {
+ skip = backup;
+ break;
+ }
+ }
+
+ return skip;
+ }
+
+ private class BclDataCycleFileParser implements CycleFilesParser<BclData> {
+ final CloseableIterator<BclData> reader;
+
+ public BclDataCycleFileParser(final List<File> files) {
+ reader = new BclReader(files, outputMapping.getOutputReadLengths(),
+ bclQualityEvaluationStrategy, false);
+ }
+
+ @Override
+ public void close() {
+ reader.close();
+ }
+
+ @Override
+ public BclData next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return reader.next();
+ }
+
+ @Override
+ public boolean hasNext() {
+ try {
+ return reader.hasNext();
+ } catch (final NullPointerException npe) {
+ return false;
+ }
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/ClusterData.java b/src/java/picard/illumina/parser/ClusterData.java
new file mode 100644
index 0000000..a401c23
--- /dev/null
+++ b/src/java/picard/illumina/parser/ClusterData.java
@@ -0,0 +1,200 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+import picard.PicardException;
+
+/**
+ * Store the information from Illumina files for a single cluster with one or more reads.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class ClusterData {
+
+ private int lane = -1;
+ private int tile = -1;
+ private int x = -1;
+ private int y = -1;
+ private final ReadData [] reads;
+ private Boolean pf;
+ private String matchedBarcode;
+
+ /** Used for testing, reads is set directly with no copying to the input array */
+ public ClusterData(final ReadData ... reads) {
+ this.reads = reads;
+ }
+
+ /** Creates a ClusterData with one read for each type provided */
+ public ClusterData(final ReadType [] readTypes) {
+ reads = new ReadData[readTypes.length];
+ for(int i = 0; i < readTypes.length; i++) {
+ reads[i] = new ReadData(readTypes[i]);
+ }
+ }
+
+ public String toString() {
+ return "ClusterData(lane: " + lane + "; tile: " + tile + "; x: " + x + "; y: " + y + "; pf: " + pf +
+ "; matchedBarcode: " + matchedBarcode + ")";
+ }
+
+ public int getTile() {
+ return tile;
+ }
+
+ public void setTile(final int tile) {
+ this.tile = tile;
+ }
+
+ public boolean tileIsSet() {
+ return tile != -1;
+ }
+
+ public ReadData getRead(final int index) {
+ return reads[index];
+ }
+
+ public int getNumReads() {
+ return reads.length;
+ }
+
+ /**
+ * Either set this value if not already set, or if already set, throw an exception if new value != current value.
+ */
+ public void setOrCheckTile(final int tile) {
+ if (tileIsSet()) {
+ if (this.tile != tile) {
+ throw new PicardException("Tile number mismatch for " + this + " : " + this.tile + " != " + tile);
+ }
+ } else {
+ this.tile = tile;
+ }
+ }
+
+ public int getLane() {
+ return lane;
+ }
+
+ public void setLane(final int lane) {
+ this.lane = lane;
+ }
+
+ public boolean laneIsSet() {
+ return lane != -1;
+ }
+
+ /**
+ * Either set this value if not already set, or if already set, throw an exception if new value != current value.
+ */
+ public void setOrCheckLane(final int lane) {
+ if (laneIsSet()) {
+ if (this.lane != lane) {
+ throw new PicardException("Lane number mismatch for " + this + " : " + this.lane + " != " + lane);
+ }
+ } else {
+ this.lane = lane;
+ }
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public void setX(final int x) {
+ this.x = x;
+ }
+
+ public boolean xIsSet() {
+ return x != -1;
+ }
+
+ /**
+ * Either set this value if not already set, or if already set, throw an exception if new value != current value.
+ */
+ public void setOrCheckX(final int x) {
+ if (xIsSet()) {
+ if (this.x != x) {
+ throw new PicardException("X value mismatch for " + this + " : " + this.x + " != " + x);
+ }
+ } else {
+ this.x = x;
+ }
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public void setY(final int y) {
+ this.y = y;
+ }
+
+ public boolean yIsSet() {
+ return y != -1;
+ }
+
+ /**
+ * Either set this value if not already set, or if already set, throw an exception if new value != current value.
+ */
+ public void setOrCheckY(final int y) {
+ if (yIsSet()) {
+ if (this.y != y) {
+ throw new PicardException("Y value mismatch for " + this + " : " + this.y + " != " + y);
+ }
+ } else {
+ this.y = y;
+ }
+ }
+
+ public Boolean isPf() {
+ return pf;
+ }
+
+ public void setPf(final boolean pf) {
+ this.pf = pf;
+ }
+
+ /**
+ * Either set this value if not already set, or if already set, throw an exception if new value != current value.
+ */
+ public void setOrCheckPf(final boolean pf) {
+ if (this.pf == null) {
+ this.pf = pf;
+ } else if (this.pf != pf) {
+ throw new PicardException("PF value mismatch for " + this + " : ");
+ }
+ }
+
+ /**
+ * @return The barcode matched (not the actual sequence from the read, which may not perfectly match
+ * the barcode).
+ */
+ public String getMatchedBarcode() {
+ return matchedBarcode;
+ }
+
+ public void setMatchedBarcode(final String matchedBarcode) {
+ this.matchedBarcode = matchedBarcode;
+ }
+}
diff --git a/src/java/picard/illumina/parser/ClusterIntensityFileReader.java b/src/java/picard/illumina/parser/ClusterIntensityFileReader.java
new file mode 100644
index 0000000..c88a3ab
--- /dev/null
+++ b/src/java/picard/illumina/parser/ClusterIntensityFileReader.java
@@ -0,0 +1,216 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.util.UnsignedTypeUtil;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.Arrays;
+
+/**
+ * Read a .cnf (binary noise) or .cif (binary intensity) file. A file in this format contains
+ * 1 or more cycles of data for a set of clusters, with 4 values per cycle, one for each channel.
+ * A file can store its values in either a byte or a short per value, but the API treats them all as shorts.
+ * This class does not distinguish btw CIF and CNF files.
+ *
+ * @author jburke at broadinstitute.org
+ */
+class ClusterIntensityFileReader {
+
+ private static final byte[] IDENTIFIER = StringUtil.stringToBytes("CIF");
+ private static final byte FILE_VERSION = 1;
+ private static final int HEADER_SIZE = 13;
+ private static final int NUM_CHANNELS = IntensityChannel.values().length;
+
+ // Just for error reporting
+ private final File file;
+
+ /**
+ * The entire file is mmapped
+ */
+ private final MappedByteBuffer buf;
+ private final ClusterIntensityFileHeader header;
+
+ // Precomputed for speed, I hope.
+ private final int cycleSize;
+ private final int channelSize;
+
+ public static class ClusterIntensityFileHeader {
+ public final int elementSize;
+ public final int firstCycle;
+ public final int numCycles;
+ public final int numClusters;
+
+ public ClusterIntensityFileHeader(final byte[] headerBytes, final File file) {
+ if(headerBytes.length < HEADER_SIZE) {
+ throw new PicardException("Bytes past to header constructor are too short excpected(" + HEADER_SIZE + ") received (" + headerBytes.length);
+ }
+
+ ByteBuffer buf = ByteBuffer.allocate(headerBytes.length); //for doing some byte conversions
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ buf.put(headerBytes);
+ buf.position(0);
+
+ final byte[] identifierBuf = new byte[IDENTIFIER.length];
+ buf.get(identifierBuf);
+ if (!Arrays.equals(identifierBuf, IDENTIFIER)) {
+ throw new PicardException("Cluster intensity file " + file + " contains unexpected header: " +
+ StringUtil.bytesToString(identifierBuf));
+ }
+ final byte fileVersion = buf.get();
+ if (fileVersion != FILE_VERSION) {
+ throw new PicardException("Cluster intensity file " + file + " contains unexpected version: " + fileVersion);
+ }
+ elementSize = buf.get();
+ if (elementSize < 1 || elementSize > 2) {
+ throw new PicardException("Cluster intensity file " + file + " contains unexpected element size: " + elementSize);
+ }
+ // convert these to unsigned
+ firstCycle = UnsignedTypeUtil.uShortToInt(buf.getShort());
+ numCycles = UnsignedTypeUtil.uShortToInt(buf.getShort());
+ if (numCycles == 0) {
+ throw new PicardException("Cluster intensity file " + file + " has zero cycles.");
+ }
+ numClusters = buf.getInt();
+ if (numClusters < 0) {
+ // It is possible for there to be no clusters in a tile.
+ throw new PicardException("Cluster intensity file " + file + " has negative number of clusters: " +numClusters);
+ }
+ }
+ }
+
+ /**
+ * Prepare to parse a CIF or CNF file.
+ * @param file The file to be parsed.
+ */
+ public ClusterIntensityFileReader(final File file) {
+ try {
+ this.file = file;
+ final FileInputStream is = new FileInputStream(this.file);
+ final FileChannel channel = is.getChannel();
+ final long fileSize = channel.size();
+ buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ CloserUtil.close(channel);
+ CloserUtil.close(is);
+ final byte [] headerBytes = new byte[HEADER_SIZE];
+ buf.get(headerBytes);
+ this.header = new ClusterIntensityFileHeader(headerBytes, this.file);
+ } catch (IOException e) {
+ throw new PicardException("IOException opening cluster intensity file " + file, e);
+ }
+ cycleSize = NUM_CHANNELS * header.numClusters * header.elementSize;
+ channelSize = header.numClusters * header.elementSize;
+ }
+
+ /**
+ * Get the value for the given args. Value is returned as a signed short regardless of whether storage is
+ * in bytes or shorts.
+ * @param cluster 0-based cluster number.
+ * @param channel Which channel is desired.
+ * @param cycle Absolute cycle number. E.g. if the first cycle in the file is N, then the first value that can
+ * be fetched is cycle=N
+ * @return Intensity or noise (depending on whether this is a CIF or CNF file).
+ */
+ public short getValue(final int cluster, final IntensityChannel channel, final int cycle) {
+ if (cycle < header.firstCycle || cycle >= header.firstCycle + header.numCycles) {
+ throw new IllegalArgumentException("Requested cycle (" + cycle + ") number out of range. First cycle=" +
+ header.firstCycle + "; numCycles=" + header.numCycles);
+ }
+ if (cluster < 0 || cluster >= header.numClusters) {
+ throw new IllegalArgumentException("Requested cluster (" + cluster + ") number out of range. numClustersInTile=" + header.numClusters);
+ }
+ final int relativeCycle = cycle - header.firstCycle;
+ final int position = HEADER_SIZE + relativeCycle * cycleSize + channel.ordinal() * channelSize + cluster * header.elementSize;
+ buf.position(position);
+ if (header.elementSize == 1) {
+ return buf.get();
+ } else {
+ return buf.getShort();
+ }
+ }
+
+ public File getFile() {
+ return file;
+ }
+
+ /**
+ * @return The first (one-based) cycle stored in this file.
+ */
+ public int getFirstCycle() {
+ return header.firstCycle;
+ }
+
+ /**
+ * @return Number of clusters stored in this file.
+ */
+ public int getNumClusters() {
+ return header.numClusters;
+ }
+
+ /**
+ * @return Number of cycles stored in this file.
+ */
+ public int getNumCycles() {
+ return header.numCycles;
+ }
+
+ /**
+ * @return the size of one intensity value for one channel in this file.
+ */
+ public int getElementSize() {
+ return header.elementSize;
+ }
+
+ public static ClusterIntensityFileHeader readHeaders(final File intensityFile) {
+ FileInputStream reader = null;
+ byte [] headerBytes = new byte[HEADER_SIZE];
+ int bytesRead = 0;
+ try {
+ reader = new FileInputStream(intensityFile);
+ bytesRead = reader.read(headerBytes);
+ } catch(FileNotFoundException fnfExc) {
+ throw new PicardException("Error opening intensity file (" + intensityFile.getAbsolutePath() +")", fnfExc);
+ } catch(IOException ioExc) {
+ throw new PicardException("Error reading values from header for intensity file (" + intensityFile.getAbsolutePath() + ")", ioExc);
+ } finally {
+ CloserUtil.close(reader);
+ }
+
+ if(bytesRead != HEADER_SIZE)
+ throw new PicardException("Error reading intensity file header, too few bytes read, expected( " + HEADER_SIZE + ") read(" + bytesRead + ")");
+
+ return new ClusterIntensityFileHeader(headerBytes, intensityFile);
+ }
+}
diff --git a/src/java/picard/illumina/parser/CycleIlluminaFileMap.java b/src/java/picard/illumina/parser/CycleIlluminaFileMap.java
new file mode 100644
index 0000000..cb11e07
--- /dev/null
+++ b/src/java/picard/illumina/parser/CycleIlluminaFileMap.java
@@ -0,0 +1,74 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import picard.PicardException;
+
+import java.util.List;
+import java.util.Set;
+import java.util.TreeMap;
+
+/**
+ * For per cycle files. Maps a Cycle -> Tile -> List<File>
+ *
+ * @author jburke at broadinstitute.org
+ */
+class CycleIlluminaFileMap extends TreeMap<Integer, IlluminaFileMap> {
+ /**
+ * Return a CycleIlluminaFileMap with only the tiles listed and all of the cycles provided.
+ * Important NOTE: this DOES NOT eliminate cycles from the cycles parameter passed in that are missing in the cyclesFileIterator of any given lane in the CycleIlluminaFileMap
+ */
+ public CycleIlluminaFileMap keep(final List<Integer> tilesToKeep, final Set<Integer> cycles) {
+ final CycleIlluminaFileMap ciMap = new CycleIlluminaFileMap();
+
+ if (cycles != null) {
+ for (final int cycle : cycles) {
+ final IlluminaFileMap template = this.get(cycle);
+ if (template != null) {
+ ciMap.put(cycle, template.keep(tilesToKeep));
+ }
+ }
+ }
+
+ return ciMap;
+ }
+
+ /**
+ * Assert that this map has an iterator for all of the expectedTiles and each iterator has expectedCycles number
+ * of files. Also, assert that each cycle file for a given tile is the same size
+ *
+ * @param expectedTiles A list of tiles that should be in this map
+ * @param expectedCycles The total number of files(cycles) that should be in each CycledFilesIterator
+ */
+ public void assertValid(final List<Integer> expectedTiles, final int[] expectedCycles) {
+ if (size() != expectedCycles.length) {
+ throw new PicardException("Expected CycledIlluminaFileMap to contain " + expectedCycles.length + " cycles but only " + size() + " were found!");
+ }
+ if (this.firstEntry().getValue().size() != expectedTiles.size()) {
+ throw new PicardException("Expected CycledIlluminaFileMap to contain " + expectedTiles.size()
+ + " tiles but only " + this.firstEntry().getValue().size() + " were found!");
+ }
+ }
+
+}
diff --git a/src/java/picard/illumina/parser/FilterParser.java b/src/java/picard/illumina/parser/FilterParser.java
new file mode 100644
index 0000000..09b07c3
--- /dev/null
+++ b/src/java/picard/illumina/parser/FilterParser.java
@@ -0,0 +1,83 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.illumina.parser.readers.FilterFileReader;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CollectionUtil.makeSet;
+
+/**
+ * Sequentially parses filter files for the given tiles. One tile is processed at a time. IlluminaDataProvider should
+ * be the ONLY client class for this class except for test classes. For more information on the filterFile format
+ * and reading it, see FilterFileReader.
+ */
+class FilterParser extends PerTileParser<PfData> {
+ private static Set<IlluminaDataType> supportedTypes = Collections.unmodifiableSet(makeSet(IlluminaDataType.PF));
+
+ public FilterParser(final IlluminaFileMap tilesToFiles){
+ super(tilesToFiles);
+ }
+
+ public FilterParser(final IlluminaFileMap tilesToFiles, final int startingTile){
+ super(tilesToFiles, startingTile);
+ }
+
+ /** Wrap a filterFile reader in a closeable iterator and return it*/
+ @Override
+ protected CloseableIterator<PfData> makeTileIterator(final File iterator) {
+ return new CloseableIterator<PfData>() {
+ private FilterFileReader reader = new FilterFileReader(iterator);
+
+ public void close() {
+ reader = null;
+ }
+
+ public boolean hasNext() {
+ return reader.hasNext();
+ }
+
+ public PfData next() {
+ final boolean nextValue = reader.next();
+ return new PfData() {
+ public boolean isPf() {
+ return nextValue;
+ }
+ };
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ public Set<IlluminaDataType> supportedTypes() {
+ return supportedTypes;
+ }
+}
diff --git a/src/java/picard/illumina/parser/FourChannelIntensityData.java b/src/java/picard/illumina/parser/FourChannelIntensityData.java
new file mode 100644
index 0000000..a097ed6
--- /dev/null
+++ b/src/java/picard/illumina/parser/FourChannelIntensityData.java
@@ -0,0 +1,103 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import picard.PicardException;
+
+import java.util.Arrays;
+
+/**
+ * Holds a 4 short values for each cycle of a read. This is used, to store raw intensities,
+ * processed intensities, or noise. Note that for Illumina 1.1 and 1.3, these are floating point values,
+ * but are truncated to shorts to store here.
+ *
+ * Indices into the channel arrays are zero-based, i.e. the first cycle is 0.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class FourChannelIntensityData {
+ /**
+ * Major index: channel number; minor index: cycle number (zero based)
+ */
+ private short [] a;
+ private short [] c;
+ private short [] g;
+ private short [] t;
+
+ public FourChannelIntensityData(final int numberOfCycles) {
+ a = new short[numberOfCycles];
+ c = new short[numberOfCycles];
+ g = new short[numberOfCycles];
+ t = new short[numberOfCycles];
+ }
+
+ public short[] getChannel(final IntensityChannel channel) {
+ switch(channel) {
+ case A: return a;
+ case C: return c;
+ case G: return g;
+ case T: return t;
+ }
+
+ throw new PicardException("Unexpected intensity channel " + channel);
+ }
+
+ public short[] getA() {
+ return a;
+ }
+
+ public short[] getC() {
+ return c;
+ }
+
+ public short[] getG() {
+ return g;
+ }
+
+ public short[] getT() {
+ return t;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final FourChannelIntensityData that = (FourChannelIntensityData)o;
+ return Arrays.equals(this.a, that.a) &&
+ Arrays.equals(this.c, that.c) &&
+ Arrays.equals(this.g, that.g) &&
+ Arrays.equals(this.t, that.t);
+ }
+
+ @Override
+ public int hashCode() {
+ int ret = 0;
+ ret = ret * 31 + Arrays.hashCode(a);
+ ret += ret * 31 + Arrays.hashCode(c);
+ ret += ret * 31 + Arrays.hashCode(g);
+ ret += ret * 31 + Arrays.hashCode(t);
+ return ret;
+ }
+}
diff --git a/src/java/picard/illumina/parser/IlluminaData.java b/src/java/picard/illumina/parser/IlluminaData.java
new file mode 100644
index 0000000..3303825
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaData.java
@@ -0,0 +1,69 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+/**
+ * There is one IlluminaData sub-interface for each IlluminaDataType enum value.
+ * IlluminaParsers must return objects implementing at least one of the interfaces below.
+ * IlluminaDataProvider will take IlluminaData objects created by IlluminaParsers and cast them to the types they
+ * implement and these objects will then be used to populate the ClusterData object.
+ *
+ * @author jburke at broadinstitute.org
+ */
+interface IlluminaData {
+}
+
+// Note: PositionalData was spun out this round but since every parser has means of retrieving lane/tile from the
+// file name, we are going to move lane/tile to be queryable from parsers in future revisions and therefore if you
+// want lane/tile info you will NOT have to parse one of the Positional Data formats (pos, locs, clocs, qseqs)
+interface PositionalData extends IlluminaData {
+ public int getXCoordinate();
+ public int getYCoordinate();
+}
+
+interface BaseData extends IlluminaData {
+ public byte [][] getBases();
+}
+
+interface QualityData extends IlluminaData {
+ public byte [][] getQualities();
+}
+
+interface NoiseData extends IlluminaData {
+ public FourChannelIntensityData [] getNoise();
+}
+
+interface RawIntensityData extends IlluminaData{
+ public FourChannelIntensityData [] getRawIntensities();
+}
+
+interface PfData extends IlluminaData {
+ public boolean isPf();
+}
+
+interface BarcodeData extends IlluminaData {
+ public String getBarcode();
+}
+
+
diff --git a/src/java/picard/illumina/parser/IlluminaDataProvider.java b/src/java/picard/illumina/parser/IlluminaDataProvider.java
new file mode 100644
index 0000000..fc3a327
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaDataProvider.java
@@ -0,0 +1,230 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+import picard.PicardException;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Parse various formats and versions of Illumina Basecall files, and use them the to populate
+ * ClusterData objects. Clients of this code should use IlluminaDataProviderFactory to create an IlluminaDataProvider.
+ * IlluminaDataProvider is immutable after construction.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class IlluminaDataProvider implements Iterator<ClusterData>, Iterable<ClusterData> {
+
+ /** contains QSeqs, bcls, or other Illumina file types that will be parsed by this class */
+ private final File basecallDirectory; //These two are for error reporting only
+ private final int lane;
+
+ /** A list of parsers (already initialized) that should output data in a format consistent with readStructure */
+ private final IlluminaParser[] parsers;
+
+ /**
+ * for each parser in this.parsers there is an array of IlluminaDataTypes that specifies what datatypes that parser is providing in
+ * this particular run. A parser may be able to provide data types which may not be listed here because client code may not
+ * have specified these data types
+ */
+ private final IlluminaDataType[][] dataTypes;
+
+ /** Calculated once, outputReadTypes describes the type of read data for each ReadData that will be found in output ClusterData objects */
+ private final ReadType[] outputReadTypes;
+
+ /** Number of reads in each ClusterData */
+ private final int numReads;
+
+ /**
+ * Create an IlluminaDataProvider given a map of parsersToDataTypes for particular file formats. Compute once the miscellaneous data for the
+ * run that will be passed to each ClusterData.
+ *
+ * @param basecallDirectory For error reporting only.
+ * @param lane For error reporting only.
+ */
+ IlluminaDataProvider(final OutputMapping outputMapping,
+ final Map<IlluminaParser, Set<IlluminaDataType>> parsersToDataTypes,
+ final File basecallDirectory, final int lane) {
+ this.basecallDirectory = basecallDirectory;
+ this.lane = lane;
+ numReads = outputMapping.numOutputReads();
+
+ final int numParsers = parsersToDataTypes.size();
+ if (numParsers == 0) {
+ throw new PicardException("There were 0 parsers passed to IlluminaDataProvider!");
+ }
+
+ int i = 0;
+ parsers = new IlluminaParser[numParsers];
+ dataTypes = new IlluminaDataType[numParsers][];
+ for (final Map.Entry<IlluminaParser, Set<IlluminaDataType>> pToD : parsersToDataTypes.entrySet()) {
+ parsers[i] = pToD.getKey();
+ final Set<IlluminaDataType> dts = pToD.getValue();
+ dataTypes[i] = new IlluminaDataType[dts.size()];
+ dts.toArray(dataTypes[i++]);
+ }
+
+ this.outputReadTypes = new ReadType[numReads];
+ i = 0;
+ for (final ReadDescriptor rd : outputMapping.getOutputDescriptors()) {
+ outputReadTypes[i++] = rd.type;
+ }
+ }
+
+ /**
+ * @return True if we have more clusters to read
+ */
+ public boolean hasNext() {
+ final boolean more = parsers[0].hasNext();
+ if (!more) {
+ for (int i = 1; i < parsers.length; i++) {
+ if (parsers[i].hasNext()) {
+ throw new PicardException("Unequal length Illumina files in " + basecallDirectory + ", lane " + lane + ". Failing parser: " + parsers[i].getClass().getName());
+ }
+ }
+ }
+
+ return more;
+ }
+
+ /**
+ * @return Current cluster data populated with only the data that matches one of the data types in dataTypes.
+ */
+ public ClusterData next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+
+ final ClusterData cluster = new ClusterData(outputReadTypes);
+ cluster.setLane(lane);
+
+ //IMPORTANT NOTE: This assignment to tile MUST happen BEFORE the loop below because getTileOfNextCluster
+ //returns the tile for the next cluster and if we call this after the loop then whenever we pass a tile
+ //boundary the last cluster in the previous tile will have the wrong tile number
+ cluster.setTile(parsers[0].getTileOfNextCluster());
+
+ for (int i = 0; i < parsers.length; i++) {
+ final IlluminaData ilData = parsers[i].next();
+ for (final IlluminaDataType ilDataType : dataTypes[i]) {
+ switch (ilDataType) {
+ case Position:
+ addData(cluster, (PositionalData) ilData);
+ break;
+
+ case PF:
+ addData(cluster, (PfData) ilData);
+ break;
+
+ case Barcodes:
+ addData(cluster, (BarcodeData) ilData);
+ break;
+
+ case BaseCalls:
+ addReadData(cluster, numReads, (BaseData) ilData);
+ break;
+
+ case QualityScores:
+ addReadData(cluster, numReads, (QualityData) ilData);
+ break;
+
+ default:
+ throw new PicardException("Unknown data type " + ilDataType + " requested by IlluminaDataProviderFactory");
+ }
+ }
+ }
+
+ return cluster;
+ }
+
+ /*
+ * Methods for that transfer data from the IlluminaData objects to the current cluster
+ */
+ private void addData(final ClusterData clusterData, final PositionalData posData) {
+ clusterData.setX(posData.getXCoordinate());
+ clusterData.setY(posData.getYCoordinate());
+ }
+
+ private void addData(final ClusterData clusterData, final PfData pfData) {
+ clusterData.setPf(pfData.isPf());
+ }
+
+ private void addData(final ClusterData clusterData, final BarcodeData barcodeData) {
+ clusterData.setMatchedBarcode(barcodeData.getBarcode());
+ }
+
+ private void addReadData(final ClusterData clusterData, final int numReads, final BaseData baseData) {
+ final byte[][] bases = baseData.getBases();
+ for (int i = 0; i < numReads; i++) {
+ clusterData.getRead(i).setBases(bases[i]);
+ }
+ }
+
+ private void addReadData(final ClusterData clusterData, final int numReads, final QualityData qualityData) {
+ final byte[][] qualities = qualityData.getQualities();
+ for (int i = 0; i < numReads; i++) {
+ clusterData.getRead(i).setQualities(qualities[i]);
+ }
+ }
+
+ private void addReadData(final ClusterData clusterData, final int numReads, final RawIntensityData rawIntensityData) {
+ final FourChannelIntensityData[] fcids = rawIntensityData.getRawIntensities();
+ for (int i = 0; i < numReads; i++) {
+ clusterData.getRead(i).setRawIntensities(fcids[i]);
+ }
+ }
+
+ private void addReadData(final ClusterData clusterData, final int numReads, final NoiseData noiseData) {
+ final FourChannelIntensityData[] fcids = noiseData.getNoise();
+ for (int i = 0; i < numReads; i++) {
+ clusterData.getRead(i).setNoise(fcids[i]);
+ }
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** Jump so that the next record returned will be from the specified tile. */
+ public void seekToTile(final int oneBasedTileNumber) {
+ for (final IlluminaParser parser : parsers) {
+ parser.seekToTile(oneBasedTileNumber);
+ }
+ }
+
+ @Override
+ public Iterator<ClusterData> iterator() {
+ return this;
+ }
+
+ public void close() {
+ for (final IlluminaParser parser : parsers) {
+ parser.close();
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/IlluminaDataProviderFactory.java b/src/java/picard/illumina/parser/IlluminaDataProviderFactory.java
new file mode 100644
index 0000000..ea7f536
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaDataProviderFactory.java
@@ -0,0 +1,389 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+import static htsjdk.samtools.util.CollectionUtil.makeSet;
+
+/**
+ * IlluminaDataProviderFactory accepts options for parsing Illumina data files for a lane and creates an
+ * IlluminaDataProvider, an iterator over the ClusterData for that lane, which utilizes these options.
+ * <p/>
+ * <p/>
+ * Note: Since we tend to use IlluminaDataProviderFactory in multithreaded environments (e.g. we call makeDataProvider
+ * in a different thread per tile in IlluminaBasecallsToSam). I've made it essentially immutable. makeDataProvider/getTiles
+ * are now idempotent (well as far as IlluminaDataProviderFactory is concerned, many file handles and other things are
+ * opened when makeDataProvider is called). We may in the future want dataTypes to be provided to the
+ * makeDataProvider factory methods so configuration is not done multiple times for the same basecallDirectory in
+ * client code.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class IlluminaDataProviderFactory {
+ private static final Log log = Log.getInstance(IlluminaDataProviderFactory.class);
+
+ /**
+ * A map of data types to a list of file formats in the order in which we prefer those file types (E.g. we would rather parse Bcls before QSeqs, Locs files before Clocs files ...)
+ * We try to prefer data types that will be the fastest to parse/smallest in memory
+ * NOTE: In the code below, if Qseq is chosen to provide for ANY data type then it is used for ALL its data types (since we'll have to parse the entire line for each Qseq anyways)
+ */
+ private static final Map<IlluminaDataType, List<SupportedIlluminaFormat>> DATA_TYPE_TO_PREFERRED_FORMATS = new HashMap<IlluminaDataType, List<SupportedIlluminaFormat>>();
+
+ static {
+ /** For types found in Qseq, we prefer the NON-Qseq file formats first. However, if we end up using Qseqs then we use Qseqs for EVERY type it provides,
+ * see determineFormats
+ */
+ DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.BaseCalls, makeList(
+ SupportedIlluminaFormat.MultiTileBcl, SupportedIlluminaFormat.Bcl));
+ DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.QualityScores, makeList(
+ SupportedIlluminaFormat.MultiTileBcl, SupportedIlluminaFormat.Bcl));
+ DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.PF, makeList(
+ SupportedIlluminaFormat.MultiTileFilter, SupportedIlluminaFormat.Filter));
+ DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.Position, makeList(
+ SupportedIlluminaFormat.MultiTileLocs, SupportedIlluminaFormat.Locs, SupportedIlluminaFormat.Clocs,
+ SupportedIlluminaFormat.Pos));
+
+ DATA_TYPE_TO_PREFERRED_FORMATS.put(IlluminaDataType.Barcodes, makeList(SupportedIlluminaFormat.Barcode));
+ }
+
+ // The following properties must be specified by caller.
+ /** basecallDirectory holds QSeqs or bcls * */
+ private final File basecallDirectory;
+ private final File barcodesDirectory;
+ private final int lane;
+
+ /**
+ * Whether or not to apply EAMSS filtering if parsing BCLs for the bases and quality scores.
+ */
+ private boolean applyEamssFiltering = true;
+
+ /**
+ * A Map of file formats to the dataTypes they will provide for this run.
+ */
+ protected final Map<SupportedIlluminaFormat, Set<IlluminaDataType>> formatToDataTypes;
+
+ /** Basecall Directory/lane parameterized util for finding IlluminaFiles */
+ private final IlluminaFileUtil fileUtil;
+
+
+ private final List<Integer> availableTiles;
+
+ private final OutputMapping outputMapping;
+ private final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
+
+ /**
+ * Create factory with the specified options, one that favors using QSeqs over all other files
+ *
+ * @param basecallDirectory The baseCalls directory of a complete Illumina directory. Files are found by searching relative to this folder (some of them higher up in the directory tree).
+ * @param lane Which lane to iterate over.
+ * @param readStructure The read structure to which output clusters will conform. When not using QSeqs, EAMSS masking(see BclParser) is run on individual reads as found in the readStructure, if
+ * the readStructure specified does not match the readStructure implied by the sequencer's output than the quality scores output may differ than what would be found
+ * in a run's QSeq files
+ * @param dataTypesArg Which data types to read
+ */
+ public IlluminaDataProviderFactory(final File basecallDirectory, final int lane, final ReadStructure readStructure,
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
+ final IlluminaDataType... dataTypesArg) {
+ this(basecallDirectory, null,
+ lane, readStructure,
+ bclQualityEvaluationStrategy,
+ dataTypesArg);
+ }
+
+ /**
+ * Create factory with the specified options, one that favors using QSeqs over all other files
+ *
+ * @param basecallDirectory The baseCalls directory of a complete Illumina directory. Files are found by searching relative to this folder (some of them higher up in the directory tree).
+ * @param barcodesDirectory The barcodesDirectory with barcode files extracted by 'ExtractIlluminaBarcodes' (optional, use basecallDirectory if not specified)
+ * @param lane Which lane to iterate over.
+ * @param readStructure The read structure to which output clusters will conform. When not using QSeqs, EAMSS masking(see BclParser) is run on individual reads as found in the readStructure, if
+ * the readStructure specified does not match the readStructure implied by the sequencer's output than the quality scores output may differ than what would be found
+ * in a run's QSeq files
+ * @param dataTypesArg Which data types to read
+ */
+ public IlluminaDataProviderFactory(final File basecallDirectory, File barcodesDirectory, final int lane,
+ final ReadStructure readStructure,
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy, final IlluminaDataType... dataTypesArg) {
+ this.basecallDirectory = basecallDirectory;
+ this.barcodesDirectory = barcodesDirectory;
+ this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
+
+ this.lane = lane;
+ /* The types of data that will be returned by any IlluminaDataProviders created by this factory.
+
+ Note: In previous version, data of types not specified might be returned if a data type was specified
+ for data residing in QSeqs (since QSeqs span multiple data types). This is no longer the case, you
+ MUST specify all data types that should be returned.*/
+ final Set<IlluminaDataType> dataTypes = Collections.unmodifiableSet(new HashSet<IlluminaDataType>(Arrays.asList(dataTypesArg)));
+
+ if (dataTypes.isEmpty()) {
+ throw new PicardException("No data types have been specified for basecall output " + basecallDirectory +
+ ", lane " + lane);
+ }
+
+ this.fileUtil = new IlluminaFileUtil(basecallDirectory, barcodesDirectory, lane);
+
+ //find what request IlluminaDataTypes we have files for and select the most preferred file format available for that type
+ formatToDataTypes = determineFormats(dataTypes, fileUtil);
+
+ //find if we have any IlluminaDataType with NO available file formats and, if any exist, throw an exception
+ final Set<IlluminaDataType> unmatchedDataTypes = findUnmatchedTypes(dataTypes, formatToDataTypes);
+ if (unmatchedDataTypes.size() > 0) {
+ throw new PicardException("Could not find a format with available files for the following data types: " + StringUtil.join(", ", new ArrayList<IlluminaDataType>(unmatchedDataTypes)));
+ }
+
+ log.debug("The following file formats will be used by IlluminaDataProvider: " + StringUtil.join("," + formatToDataTypes.keySet()));
+
+ availableTiles = fileUtil.getActualTiles(new ArrayList<SupportedIlluminaFormat>(formatToDataTypes.keySet()));
+ if (availableTiles.isEmpty()) {
+ throw new PicardException("No available tiles were found, make sure that " + basecallDirectory.getAbsolutePath() + " has a lane " + lane);
+ }
+
+ outputMapping = new OutputMapping(readStructure);
+ }
+
+ /**
+ * Sometimes (in the case of skipped reads) the logical read structure of the output cluster data is different from the input
+ * readStructure
+ *
+ * @return The ReadStructure describing the output cluster data
+ */
+ public ReadStructure getOutputReadStructure() {
+ return outputMapping.getOutputReadStructure();
+ }
+
+ /**
+ * Return the list of tiles available for this flowcell and lane. These are in ascending numerical order.
+ *
+ * @return List of all tiles available for this flowcell and lane.
+ */
+ public List<Integer> getAvailableTiles() {
+ return availableTiles;
+ }
+
+ /** Sets whether or not EAMSS filtering will be applied if parsing BCL files for bases and quality scores. */
+ public void setApplyEamssFiltering(final boolean applyEamssFiltering) {
+ this.applyEamssFiltering = applyEamssFiltering;
+ }
+
+ /**
+ * Call this method to create a ClusterData iterator over all clusters for all tiles in ascending numeric order.
+ *
+ * @return An iterator for reading the Illumina basecall output for the lane specified in the ctor.
+ */
+ public IlluminaDataProvider makeDataProvider() {
+ return makeDataProvider(null);
+ }
+
+ /**
+ * Call this method to create a ClusterData iterator over the specified tiles.
+ *
+ * @return An iterator for reading the Illumina basecall output for the lane specified in the constructor.
+ */
+ public IlluminaDataProvider makeDataProvider(List<Integer> requestedTiles) {
+ if (requestedTiles == null) {
+ requestedTiles = availableTiles;
+ } else {
+ if (requestedTiles.size() == 0) {
+ throw new PicardException("Zero length tile list supplied to makeDataProvider, you must specify at least 1 tile OR pass NULL to use all available tiles");
+ }
+ }
+
+ final Map<IlluminaParser, Set<IlluminaDataType>> parsersToDataType = new HashMap<IlluminaParser, Set<IlluminaDataType>>();
+ for (final Map.Entry<SupportedIlluminaFormat, Set<IlluminaDataType>> fmToDt : formatToDataTypes.entrySet()) {
+ parsersToDataType.put(makeParser(fmToDt.getKey(), requestedTiles), fmToDt.getValue());
+ }
+
+ log.debug("The following parsers will be used by IlluminaDataProvider: " + StringUtil.join("," + parsersToDataType.keySet()));
+
+ return new IlluminaDataProvider(outputMapping, parsersToDataType, basecallDirectory, lane);
+ }
+
+ /**
+ * Given a set of formats to data types they provide, find any requested data types that do not have a format associated with them and return them
+ *
+ * @param requestedDataTypes Data types that need to be provided
+ * @param formatToMatchedTypes A map of file formats to data types that will support them
+ * @return The data types that go unsupported by the formats found in formatToMatchedTypes
+ */
+ public static Set<IlluminaDataType> findUnmatchedTypes(final Set<IlluminaDataType> requestedDataTypes, final Map<SupportedIlluminaFormat, Set<IlluminaDataType>> formatToMatchedTypes) {
+ final Set<IlluminaDataType> copiedTypes = new HashSet<IlluminaDataType>(requestedDataTypes);
+ for (final Set<IlluminaDataType> matchedTypes : formatToMatchedTypes.values()) {
+ copiedTypes.removeAll(matchedTypes);
+ }
+
+ return copiedTypes;
+ }
+
+ /**
+ * For all requestedDataTypes return a map of file format to set of provided data types that covers as many requestedDataTypes as possible and
+ * chooses the most preferred available formats possible
+ *
+ * @param requestedDataTypes Data types to be provided
+ * @param fileUtil A file util for the lane/directory we wish to provide data for
+ * @return A Map<Supported file format, Set of data types file format provides>
+ */
+ public static Map<SupportedIlluminaFormat, Set<IlluminaDataType>> determineFormats(final Set<IlluminaDataType> requestedDataTypes, final IlluminaFileUtil fileUtil) {
+ //For predictable ordering and uniqueness only, put the requestedDataTypes into a treeSet
+ final SortedSet<IlluminaDataType> toSupport = new TreeSet<IlluminaDataType>(requestedDataTypes);
+ final Map<SupportedIlluminaFormat, Set<IlluminaDataType>> fileTypeToDataTypes = new HashMap<SupportedIlluminaFormat, Set<IlluminaDataType>>();
+ final Map<IlluminaDataType, SupportedIlluminaFormat> dataTypeToFormat = new HashMap<IlluminaDataType, SupportedIlluminaFormat>();
+
+ for (final IlluminaDataType ts : toSupport) {
+ final SupportedIlluminaFormat preferredFormat = findPreferredAvailableFormat(ts, fileUtil);
+ if (preferredFormat != null) {
+ dataTypeToFormat.put(ts, preferredFormat);
+ }
+ }
+
+ for (final IlluminaDataType dt : toSupport) {
+ final SupportedIlluminaFormat format = dataTypeToFormat.get(dt);
+
+ if (format != null) {
+ if (fileTypeToDataTypes.containsKey(format)) {
+ fileTypeToDataTypes.get(format).add(dt);
+ } else {
+ fileTypeToDataTypes.put(dataTypeToFormat.get(dt), makeSet(dt));
+ }
+ }
+ }
+
+ return fileTypeToDataTypes;
+ }
+
+ /**
+ * Given a data type find the most preferred file format that also has files available
+ *
+ * @param dt Type of desired data
+ * @param fileUtil Util for the lane/directory in which we will find data
+ * @return The file format that is "most preferred" (i.e. fastest to parse/smallest in memory)
+ */
+ private static SupportedIlluminaFormat findPreferredAvailableFormat(final IlluminaDataType dt, final IlluminaFileUtil fileUtil) {
+ return findPreferredFormat(dt, fileUtil, true);
+ }
+
+ /**
+ * Given a data type find the most preferred file format even if files are not available
+ *
+ * @param dt Type of desired data
+ * @param fileUtil Util for the lane/directory in which we will find data
+ * @return The file format that is "most preferred" (i.e. fastest to parse/smallest in memory)
+ */
+ public static SupportedIlluminaFormat findPreferredFormat(final IlluminaDataType dt, final IlluminaFileUtil fileUtil) {
+ return findPreferredFormat(dt, fileUtil, false);
+ }
+
+ private static SupportedIlluminaFormat findPreferredFormat(final IlluminaDataType dt, final IlluminaFileUtil fileUtil,
+ final boolean checkAvailable) {
+ final List<SupportedIlluminaFormat> preferredFormats = DATA_TYPE_TO_PREFERRED_FORMATS.get(dt);
+ SupportedIlluminaFormat format = null;
+ for (int i = 0; i < preferredFormats.size() && format == null; i++) {
+ if (checkAvailable && fileUtil.getUtil(preferredFormats.get(i)).filesAvailable()) {
+ format = preferredFormats.get(i);
+ } else if (!checkAvailable) {
+ format = preferredFormats.get(i);
+ }
+ }
+
+ return format;
+ }
+
+ /**
+ * There are multiple parsers for the same IlluminaDataType (e.g. BCLParser and QSeqParser). Instantiate an instance of the preferred parser for
+ * the given data type with the information available and return it.
+ *
+ * @param format The type of data we want to parse
+ * @param requestedTiles The requestedTiles over which we will be parsing data
+ * @return A parser that will parse dataType data over the given requestedTiles and cycles and output it in groupings of the sizes specified in outputLengths
+ */
+ private IlluminaParser makeParser(final SupportedIlluminaFormat format, final List<Integer> requestedTiles) {
+ final IlluminaParser parser;
+ switch (format) {
+ case Barcode:
+ parser = new BarcodeParser(((PerTileFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.Barcode)).getFiles(requestedTiles));
+ break;
+
+ case Bcl: {
+ final CycleIlluminaFileMap bclFileMap = ((PerTilePerCycleFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.Bcl))
+ .getFiles(requestedTiles, outputMapping.getOutputCycles());
+ bclFileMap.assertValid(requestedTiles, outputMapping.getOutputCycles());
+ parser = new BclParser(basecallDirectory, lane, bclFileMap, outputMapping, this.applyEamssFiltering, bclQualityEvaluationStrategy);
+ break;
+ }
+
+ case Filter:
+ final IlluminaFileMap filterFileMap = ((PerTileFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.Filter)).getFiles(requestedTiles);
+ parser = new FilterParser(filterFileMap);
+ break;
+
+ case Locs:
+ case Clocs:
+ case Pos:
+ final PerTileFileUtil fu = (PerTileFileUtil) fileUtil.getUtil(format);
+ parser = new PosParser(fu.getFiles(requestedTiles), format);
+ break;
+
+ case MultiTileFilter:
+ parser = ((MultiTileFilterFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.MultiTileFilter)).makeParser(requestedTiles);
+ break;
+
+ case MultiTileLocs:
+ parser = ((MultiTileLocsFileUtil)fileUtil.getUtil(SupportedIlluminaFormat.MultiTileLocs)).makeParser(requestedTiles);
+ break;
+
+ case MultiTileBcl: {
+ final MultiTileBclFileUtil util = (MultiTileBclFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.MultiTileBcl);
+ final CycleIlluminaFileMap bclFileMap = util.getFiles(requestedTiles, outputMapping.getOutputCycles());
+ bclFileMap.assertValid(requestedTiles, outputMapping.getOutputCycles());
+ parser = new MultiTileBclParser(basecallDirectory, lane, bclFileMap, outputMapping,
+ this.applyEamssFiltering, bclQualityEvaluationStrategy, util.tileIndex);
+ break;
+ }
+
+ default:
+ throw new PicardException("Unrecognized data type(" + format + ") found by IlluminaDataProviderFactory!");
+ }
+
+ return parser;
+ }
+}
diff --git a/src/java/picard/illumina/parser/IlluminaDataType.java b/src/java/picard/illumina/parser/IlluminaDataType.java
new file mode 100644
index 0000000..c67327f
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaDataType.java
@@ -0,0 +1,35 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+/**
+ * List of data types of interest when parsing Illumina data. Because different Illumina versions
+ * splatter data of these types across different files, by specifying only the data types of interest,
+ * the number of files read can be reduced.
+ * @author jburke at broadinstitute.org
+ */
+public enum IlluminaDataType {
+ Position, BaseCalls, QualityScores, PF, Barcodes
+}
diff --git a/src/java/picard/illumina/parser/IlluminaFileMap.java b/src/java/picard/illumina/parser/IlluminaFileMap.java
new file mode 100644
index 0000000..83d0489
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaFileMap.java
@@ -0,0 +1,58 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TreeMap;
+
+/**
+ * For "non-cycle" files (files that have multiple cycles per file). Maps a Tile -> File
+ * @author jburke at broadinstitute.org
+ */
+class IlluminaFileMap extends TreeMap<Integer, File> {
+
+ /** Return a file map that includes only the tiles listed */
+ public IlluminaFileMap keep(final List<Integer> tilesToKeep) {
+ final IlluminaFileMap fileMap = new IlluminaFileMap();
+ for(final Integer tile : tilesToKeep) {
+ final File file = this.get(tile);
+ if(file != null) {
+ fileMap.put(tile, file);
+ }
+ }
+ return fileMap;
+ }
+
+ /**
+ * Return the List of Files in order starting at the given tile and containing all files with tile numbers greater than startingTile that
+ * are within this map
+ * @param startingTile The first File in the returned list will correspond to this tile
+ * @return A List of files for all tiles >= startingTile that are contained in this FileMap
+ */
+ public List<File> getFilesStartingAt(final int startingTile) {
+ return new ArrayList<File>(this.tailMap(startingTile).values());
+ }
+}
diff --git a/src/java/picard/illumina/parser/IlluminaFileNotFoundException.java b/src/java/picard/illumina/parser/IlluminaFileNotFoundException.java
new file mode 100644
index 0000000..07f38b2
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaFileNotFoundException.java
@@ -0,0 +1,44 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import picard.PicardException;
+
+import java.io.File;
+
+/**
+ * @author jburke at broadinstitute.org
+ */
+class IlluminaFileNotFoundException extends PicardException {
+ public final File file;
+ public IlluminaFileNotFoundException(final File file, final String message) {
+ super(message);
+ this.file = file;
+ }
+
+ public IlluminaFileNotFoundException(final File file, final String message, final Throwable throwable) {
+ super(message, throwable);
+ this.file = file;
+ }
+}
diff --git a/src/java/picard/illumina/parser/IlluminaFileUtil.java b/src/java/picard/illumina/parser/IlluminaFileUtil.java
new file mode 100644
index 0000000..df3a91c
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaFileUtil.java
@@ -0,0 +1,263 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.illumina.parser.fakers.BarcodeFileFaker;
+import picard.illumina.parser.fakers.BclFileFaker;
+import picard.illumina.parser.fakers.ClocsFileFaker;
+import picard.illumina.parser.fakers.FilterFileFaker;
+import picard.illumina.parser.fakers.LocsFileFaker;
+import picard.illumina.parser.fakers.PosFileFaker;
+import picard.illumina.parser.readers.TileMetricsOutReader;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+import java.util.regex.Pattern;
+
+/**
+ * General utils for dealing with IlluminaFiles as well as utils for specific, support formats.
+ * This class contains utils that span across multiple Illumina files but it's primary intent
+ * was to provide support for basic file types. Each supported file type can be accessed
+ * via a factory method (make<filetype>Ft). When IlluminaFileUtil is created it is parameterized
+ * by basecallDir and lane and all IlluminaFileTypes created by IlluminaFileUtil will also be
+ * parameterized in this fashion.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class IlluminaFileUtil {
+ public static final Pattern CYCLE_SUBDIRECTORY_PATTERN = Pattern.compile("^C(\\d+)\\.1$");
+
+ public enum SupportedIlluminaFormat {
+ Bcl,
+ Locs,
+ Clocs,
+ Pos,
+ Filter,
+ Barcode,
+ MultiTileFilter,
+ MultiTileLocs,
+ MultiTileBcl
+ }
+
+ private final File basecallLaneDir;
+ private final File intensityLaneDir;
+ private final File basecallDir;
+ private final File barcodeDir;
+ private final File intensityDir;
+ private final int lane;
+
+ private final File tileMetricsOut;
+ private final Map<SupportedIlluminaFormat, ParameterizedFileUtil> utils = new HashMap<SupportedIlluminaFormat, ParameterizedFileUtil>();
+
+ public IlluminaFileUtil(final File basecallDir, final int lane) {
+ this(basecallDir, null, lane);
+ }
+
+
+ public IlluminaFileUtil(final File basecallDir, File barcodeDir, final int lane) {
+ this.lane = lane;
+ this.basecallDir = basecallDir;
+ this.barcodeDir = barcodeDir;
+ this.intensityDir = basecallDir.getParentFile();
+ final File dataDir = intensityDir.getParentFile();
+ this.basecallLaneDir = new File(basecallDir, longLaneStr(lane));
+ this.intensityLaneDir = new File(intensityDir, longLaneStr(lane));
+ final File interopDir = new File(dataDir.getParentFile(), "InterOp");
+ tileMetricsOut = new File(interopDir, "TileMetricsOut.bin");
+ }
+
+
+ /**
+ * Return the lane we're inspecting
+ */
+ public int getLane() {
+ return lane;
+ }
+
+ /**
+ * Given a file type, get the Parameterized File Util object associated with it
+ */
+ public ParameterizedFileUtil getUtil(final SupportedIlluminaFormat format) {
+ ParameterizedFileUtil parameterizedFileUtil = utils.get(format);
+ if (parameterizedFileUtil == null) {
+ switch (format) {
+ case Bcl:
+ final ParameterizedFileUtil bclFileUtil = new PerTilePerCycleFileUtil(".bcl", basecallLaneDir, new BclFileFaker(), lane);
+ final ParameterizedFileUtil gzBclFileUtil = new PerTilePerCycleFileUtil(".bcl.gz", basecallLaneDir, new BclFileFaker(), lane);
+ if (bclFileUtil.filesAvailable() && !gzBclFileUtil.filesAvailable()) {
+ parameterizedFileUtil = bclFileUtil;
+ } else if (!bclFileUtil.filesAvailable() && gzBclFileUtil.filesAvailable()) {
+ parameterizedFileUtil = gzBclFileUtil;
+ } else if (!bclFileUtil.filesAvailable() && !gzBclFileUtil.filesAvailable()) {
+ parameterizedFileUtil = bclFileUtil;
+ } else {
+ throw new PicardException(
+ "Not all BCL files in " + basecallLaneDir.getAbsolutePath() + " have the same extension!");
+ }
+ utils.put(SupportedIlluminaFormat.Bcl, parameterizedFileUtil);
+ break;
+ case Locs:
+ parameterizedFileUtil = new PerTileFileUtil(".locs", intensityLaneDir, new LocsFileFaker(), lane);
+ utils.put(SupportedIlluminaFormat.Locs, parameterizedFileUtil);
+ break;
+ case Clocs:
+ parameterizedFileUtil = new PerTileFileUtil(".clocs", intensityLaneDir, new ClocsFileFaker(), lane);
+ utils.put(SupportedIlluminaFormat.Clocs, parameterizedFileUtil);
+ break;
+ case Pos:
+ parameterizedFileUtil = new PerTileFileUtil("_pos.txt", intensityDir, new PosFileFaker(), lane);
+ utils.put(SupportedIlluminaFormat.Pos, parameterizedFileUtil);
+ break;
+ case Filter:
+ parameterizedFileUtil = new PerTileFileUtil(".filter", basecallLaneDir, new FilterFileFaker(), lane);
+ utils.put(SupportedIlluminaFormat.Filter, parameterizedFileUtil);
+ break;
+ case Barcode:
+ parameterizedFileUtil = new PerTileFileUtil("_barcode.txt", barcodeDir != null ? barcodeDir : basecallDir, new BarcodeFileFaker(), lane, false);
+ utils.put(SupportedIlluminaFormat.Barcode, parameterizedFileUtil);
+ break;
+ case MultiTileFilter:
+ parameterizedFileUtil = new MultiTileFilterFileUtil(basecallLaneDir, lane);
+ utils.put(SupportedIlluminaFormat.MultiTileFilter, parameterizedFileUtil);
+ break;
+ case MultiTileLocs:
+ parameterizedFileUtil = new MultiTileLocsFileUtil(new File(intensityDir, basecallLaneDir.getName()), basecallLaneDir, lane);
+ utils.put(SupportedIlluminaFormat.MultiTileLocs, parameterizedFileUtil);
+ break;
+ case MultiTileBcl:
+ parameterizedFileUtil = new MultiTileBclFileUtil(basecallLaneDir, lane);
+ utils.put(SupportedIlluminaFormat.MultiTileBcl, parameterizedFileUtil);
+ break;
+ }
+ }
+ return parameterizedFileUtil;
+ }
+
+ /**
+ * Return the list of tiles we would expect for this lane based on the metrics found in InterOp/TileMetricsOut.bin
+ */
+ public List<Integer> getExpectedTiles() {
+ IOUtil.assertFileIsReadable(tileMetricsOut);
+ //Used just to ensure predictable ordering
+ final TreeSet<Integer> expectedTiles = new TreeSet<Integer>();
+
+ final Iterator<TileMetricsOutReader.IlluminaTileMetrics> tileMetrics = new TileMetricsOutReader(tileMetricsOut);
+ while (tileMetrics.hasNext()) {
+ final TileMetricsOutReader.IlluminaTileMetrics tileMetric = tileMetrics.next();
+
+ if (tileMetric.getLaneNumber() == lane) {
+ if (!expectedTiles.contains(tileMetric.getTileNumber())) {
+ expectedTiles.add(tileMetric.getTileNumber());
+ }
+ }
+ }
+
+ CloserUtil.close(tileMetrics);
+ return new ArrayList<Integer>(expectedTiles);
+ }
+
+ /**
+ * Get the available tiles for the given formats, if the formats have tile lists that differ then
+ * throw an exception, if any of the format
+ */
+ public List<Integer> getActualTiles(final List<SupportedIlluminaFormat> formats) {
+ if (formats == null) {
+ throw new PicardException("Format list provided to getTiles was null!");
+ }
+
+ if (formats.size() == 0) {
+ throw new PicardException(
+ "0 Formats were specified. You need to specify at least SupportedIlluminaFormat to use getTiles");
+ }
+
+ final List<Integer> tiles = getUtil(formats.get(0)).getTiles();
+ for (int i = 1; i < formats.size(); i++) {
+ final List<Integer> fmTiles = getUtil(formats.get(i)).getTiles();
+ if (tiles.size() != fmTiles.size() || !tiles.containsAll(fmTiles)) {
+ throw new PicardException(
+ "Formats do not have the same number of tiles! " + summarizeTileCounts(formats));
+ }
+ }
+
+ return tiles;
+ }
+
+ public File tileMetricsOut() {
+ return tileMetricsOut;
+ }
+
+ /*
+ * Return a string representing the Lane in the format "L00<lane>"
+ *
+ * @param lane The lane to transform
+ * @return A long string representation of the name
+ */
+ public static String longLaneStr(final int lane) {
+ String lstr = String.valueOf(lane);
+ final int zerosToAdd = 3 - lstr.length();
+
+ for (int i = 0; i < zerosToAdd; i++) {
+ lstr = "0" + lstr;
+ }
+ return "L" + lstr;
+ }
+
+
+ private String liToStr(final List<Integer> intList) {
+ if (intList.size() == 0) {
+ return "";
+ }
+
+ String summary = String.valueOf(intList.get(0));
+ for (int i = 1; i < intList.size(); i++) {
+ summary += ", " + String.valueOf(intList.get(i));
+ }
+
+ return summary;
+ }
+
+ private String summarizeTileCounts(final List<SupportedIlluminaFormat> formats) {
+ String summary;
+ ParameterizedFileUtil pfu = getUtil(formats.get(0));
+ List<Integer> tiles = pfu.getTiles();
+ summary = pfu.extension + "(" + liToStr(tiles) + ")";
+
+ for (final SupportedIlluminaFormat format : formats) {
+ pfu = getUtil(format);
+ tiles = pfu.getTiles();
+
+ summary += ", " + pfu.extension + "(" + liToStr(tiles) + ")";
+ }
+
+ return summary;
+ }
+}
diff --git a/src/java/picard/illumina/parser/IlluminaMetricsCode.java b/src/java/picard/illumina/parser/IlluminaMetricsCode.java
new file mode 100644
index 0000000..e0355a6
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaMetricsCode.java
@@ -0,0 +1,42 @@
+package picard.illumina.parser;
+
+/**
+ * Illumina's TileMetricsOut.bin file codes various metrics, both concrete (all density id's are code 100) or as a base code
+ * (e.g. phasing values are computed from a base of 200).
+ *
+ * @author jgentry
+ */
+public enum IlluminaMetricsCode {
+ DENSITY_ID(100),
+ CLUSTER_ID(102),
+ PHASING_BASE(200),
+ PREPHASING_BASE(201);
+
+ private final int metricsCode;
+
+ IlluminaMetricsCode(final int metricsCode) {
+ this.metricsCode = metricsCode;
+ }
+
+ /**
+ * Phasing codes are between 200 and 299 (inclusive). Phasing codes are defined as being
+ * (200 + ((N - 1) * 2)) for (a 0-based) read descriptor N (i.e., 200, 202, 204, etc.) Prephasing codes are defined
+ * as being (201 + ((N - 1) * 2)) for read descriptor N (i.e., 201, 203, 205, etc.). So for a 101T8B101T read
+ * structure, there will be phasing codes of 200, 202 and 204 and prephasing codes of 201, 203, 205.
+ */
+ public static int getPhasingCode(final int readDescriptorIndex, final IlluminaMetricsCode phasingType) {
+ if (!isPhasing(phasingType)) {
+ throw new IllegalArgumentException("phasingType must be PHASING_BASE or PREPHASING_BASE");
+ }
+
+ return (phasingType.getMetricsCode() + (readDescriptorIndex * 2));
+ }
+
+ public static boolean isPhasing(final IlluminaMetricsCode metricsCode) {
+ return (metricsCode.equals(PHASING_BASE) || metricsCode.equals(PREPHASING_BASE));
+ }
+
+ public int getMetricsCode() {
+ return metricsCode;
+ }
+}
diff --git a/src/java/picard/illumina/parser/IlluminaParser.java b/src/java/picard/illumina/parser/IlluminaParser.java
new file mode 100644
index 0000000..c97e4cb
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaParser.java
@@ -0,0 +1,75 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Interface for classes that parse information out of the Illumina Pipeline
+ *
+ * @author jburke at broadinstitute.org
+ */
+interface IlluminaParser<DATA_TYPE extends IlluminaData> extends Iterator<DATA_TYPE> {
+ /** Jump so that the next record returned will be from the specified tile. */
+ void seekToTile(int oneBasedTileNumber);
+
+ /**
+ * Read the next read's set of data and set it into the provided data object. The object must have
+ * the appropriate IlluminaEndData objects set into it for first end, second end, barcode.
+ */
+ DATA_TYPE next();
+
+ /**
+ * Is there a DATA_TYPE object for another cluster remaining.
+ *
+ * @return TRUE if there is a DATA_TYPE object for the next cluster that can be provided by
+ * next
+ */
+ boolean hasNext();
+
+ /**
+ * Get the tile for the NEXT DATA_TYPE object that will be returned by this parser. This should
+ * be called BEFORE next if you want the tile for the value returned by next
+ */
+ public int getTileOfNextCluster();
+
+ /**
+ * Given the expected tiles and cycles for this run, make sure this parser can provide data for
+ * all tiles/cycles or throws an exception if it's missing any required data or data structures
+ * it relies on do not disagree with the provided tiles/cycles
+ *
+ * @param tiles The number of tiles in the current run
+ * @param cycles The number of cycles in the current run
+ */
+ void verifyData(final List<Integer> tiles, final int[] cycles);
+
+ /** The DataTypes that this parser can provide */
+ Set<IlluminaDataType> supportedTypes();
+
+ void close();
+
+}
diff --git a/src/java/picard/illumina/parser/IlluminaTextIterator.java b/src/java/picard/illumina/parser/IlluminaTextIterator.java
new file mode 100644
index 0000000..30474c4
--- /dev/null
+++ b/src/java/picard/illumina/parser/IlluminaTextIterator.java
@@ -0,0 +1,121 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloserUtil;
+import picard.PicardException;
+import picard.util.BasicInputParser;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+
+/**
+ * Abstract class for parsing text-based whitespace-delimited Illumina output files, organized
+ * by tile. Concrete implementations must call setFiles() in order to provide the list of files
+ * to be iterated over.
+ *
+ * @author jburke at broadinstitute.org
+ */
+class IlluminaTextIterator implements Iterator<String[]> {
+
+ // Location of illumina output files to be parsed
+ private final int lane;
+ private int currentTile = 0;
+
+ // List of files of the given type, sorted by tile #
+ private IlluminaFileMap files;
+
+ private boolean treatGroupedDelimitersAsOne = true;
+ private BasicInputParser parser;
+
+ public IlluminaTextIterator(final int lane, final IlluminaFileMap files) {
+ this.lane = lane;
+ this.files = files;
+ currentTile = files.firstKey();
+ }
+
+ public IlluminaTextIterator(final int lane, final IlluminaFileMap files,
+ final boolean treatGroupedDelimitersAsOne) {
+ this(lane, files);
+ this.treatGroupedDelimitersAsOne = treatGroupedDelimitersAsOne;
+ currentTile = files.firstKey();
+ }
+
+ /**
+ * Jump so that the next record returned will be the first one from the specified tile.
+ */
+ public void seekToTile(final int oneBasedTileNumber) {
+ CloserUtil.close(parser);
+ currentTile = oneBasedTileNumber;
+ initializeParser();
+ }
+
+ /**
+ * Prepare to iterate.
+ */
+ private void initializeParser() {
+ final List<File> fileSubset = files.getFilesStartingAt(currentTile);
+ parser = new BasicInputParser(treatGroupedDelimitersAsOne, fileSubset.toArray(new File[fileSubset.size()]));
+ }
+
+ /**
+ * Read the next record from the list of input files, and load into data argument.
+ */
+ @Override
+ public String [] next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+
+ return parser.next();
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException("Remove is not supported by IlluminaTextIterator");
+ }
+
+ public boolean hasNext() {
+ if(parser == null) initializeParser();
+ return parser.hasNext();
+ }
+
+ protected int getLane() {
+ return lane;
+ }
+
+ public String getCurrentFilename() {
+ if(parser == null) initializeParser();
+ return parser.getFileName();
+ }
+
+ protected void validateLane(final int lane) {
+ if (lane != getLane()) {
+ throw new PicardException("Lane number mismatch: " + lane + " != " + getLane());
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/IntensityChannel.java b/src/java/picard/illumina/parser/IntensityChannel.java
new file mode 100644
index 0000000..3624397
--- /dev/null
+++ b/src/java/picard/illumina/parser/IntensityChannel.java
@@ -0,0 +1,38 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+/**
+ * The channels in a FourChannelIntensityData object, and the channels produced by a ClusterIntensityFileReader,
+ * for cases in which it is desirable to handle these abstractly rather than having the specific names
+ * in the source code.
+ *
+ * @author alecw at broadinstitute.org
+*/
+public enum IntensityChannel {
+
+ A, C, G, T;
+
+ public static final int NUM_CHANNELS = IntensityChannel.values().length;
+}
diff --git a/src/java/picard/illumina/parser/MultiTileBclFileUtil.java b/src/java/picard/illumina/parser/MultiTileBclFileUtil.java
new file mode 100644
index 0000000..ba635a6
--- /dev/null
+++ b/src/java/picard/illumina/parser/MultiTileBclFileUtil.java
@@ -0,0 +1,115 @@
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.IOUtil;
+import picard.illumina.parser.fakers.MultiTileBclFileFaker;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * NextSeq-style bcl's have all tiles for a cycle in a single file.
+ */
+public class MultiTileBclFileUtil extends ParameterizedFileUtil {
+ final File basecallLaneDir;
+ final File bci;
+ final TileIndex tileIndex;
+ final CycleIlluminaFileMap cycleFileMap = new CycleIlluminaFileMap();
+
+ MultiTileBclFileUtil(final File basecallLaneDir, final int lane) {
+ // Since these file names do not contain lane number, first two args to ctor are the same.
+ super("^(\\d{4}).bcl.bgzf$", ".bcl.bgzf", basecallLaneDir,
+ new MultiTileBclFileFaker(), lane);
+ this.basecallLaneDir = basecallLaneDir;
+ bci = new File(basecallLaneDir, "s_" + lane + ".bci");
+ // Do this once rather than when deciding if these files exist and again later.
+ final File[] cycleFiles = IOUtil.getFilesMatchingRegexp(base, matchPattern);
+ if (bci.exists()) {
+ tileIndex = new TileIndex(bci);
+ if (cycleFiles != null) {
+ for (final File file : cycleFiles) {
+ final String fileName = file.getName();
+ final String cycleNum = fileName.substring(0, fileName.indexOf('.'));
+ final IlluminaFileMap fileMap = new IlluminaFileMap();
+ for(final Integer tile : tileIndex.getTiles()) {
+ fileMap.put(tile, file);
+ }
+ cycleFileMap.put(Integer.valueOf(cycleNum), fileMap);
+ }
+ }
+ } else {
+ tileIndex = null;
+ }
+
+ }
+
+ public CycleIlluminaFileMap getFiles(final List<Integer> tiles, final int[] cycles) {
+ // Filter input list of cycles according to which actually exist
+ final ArrayList<Integer> goodCycleList = new ArrayList<Integer>(cycles.length);
+ for (final int cycle : cycles) {
+ if (cycleFileMap.containsKey(cycle)) {
+ goodCycleList.add(cycle);
+ }
+ }
+ // Ensure cycles are sorted.
+ Collections.sort(goodCycleList);
+ final int[] goodCycles = new int[goodCycleList.size()];
+ for (int i = 0; i < goodCycles.length; ++i) {
+ goodCycles[i] = goodCycleList.get(i);
+ }
+
+ // Create the map.
+ final CycleIlluminaFileMap cycledMap = new CycleIlluminaFileMap();
+ if (goodCycles.length > 0) {
+ for(final int cycle : goodCycles) {
+ final IlluminaFileMap fileMap = cycleFileMap.get(cycle).keep(tiles);
+ cycledMap.put(cycle, fileMap);
+ }
+ }
+ return cycledMap;
+ }
+
+ @Override
+ public boolean filesAvailable() {
+ return bci.exists() && cycleFileMap.size() > 0;
+ }
+
+ @Override
+ public List<Integer> getTiles() {
+ if (tileIndex == null) {
+ return Collections.emptyList();
+ }
+ return tileIndex.getTiles();
+ }
+
+ @Override
+ public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
+ if (tileIndex == null) {
+ return Collections.singletonList("Tile index(" + bci.getAbsolutePath() + ") does not exist!");
+ }
+ final List<String> ret = tileIndex.verify(expectedTiles);
+ for (final int expectedCycle : expectedCycles) {
+ if (!cycleFileMap.containsKey(expectedCycle)) {
+ ret.add(expectedCycle + ".bcl.bgzf not found in " + base);
+ }
+ }
+ return ret;
+ }
+
+ @Override
+ public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] expectedCycles,
+ final IlluminaFileUtil.SupportedIlluminaFormat format) {
+ if (tileIndex == null) {
+ return Collections.singletonList("Tile index(" + bci.getAbsolutePath() + ") does not exist!");
+ }
+ final List<String> ret = tileIndex.verify(expectedTiles);
+ for (final int expectedCycle : expectedCycles) {
+ if (!cycleFileMap.containsKey(expectedCycle)) {
+ ret.add(expectedCycle + ".bcl.bgzf not found in " + base);
+ }
+ }
+ return ret;
+ }
+}
+
diff --git a/src/java/picard/illumina/parser/MultiTileBclParser.java b/src/java/picard/illumina/parser/MultiTileBclParser.java
new file mode 100644
index 0000000..c39f18a
--- /dev/null
+++ b/src/java/picard/illumina/parser/MultiTileBclParser.java
@@ -0,0 +1,170 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.illumina.parser.readers.BclReader;
+
+import java.io.File;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * Parse .bcl.bgzf files that contain multiple tiles in a single file. This requires an index file that tells
+ * the bgzf virtual file offset of the start of each tile in the block-compressed bcl file.
+ */
+public class MultiTileBclParser extends BclParser {
+ private final TileIndex tileIndex;
+ private MultiTileBclDataCycleFileParser cycleFileParser = null;
+ public MultiTileBclParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles,
+ final OutputMapping outputMapping, final boolean applyEamssFilter,
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
+ final TileIndex tileIndex) {
+ super(directory, lane, tilesToCycleFiles, outputMapping, applyEamssFilter, bclQualityEvaluationStrategy);
+ this.tileIndex = tileIndex;
+ this.initialize();
+ }
+
+ @Override
+ public void initialize(){
+ if(tileIndex != null){
+ seekToTile(currentTile);
+ }
+ }
+
+ private CountLimitedIterator makeReader(final List<File> files) {
+ if(tileIndex != null) {
+ final BclReader bclReader = BclReader.makeSeekable(files, bclQualityEvaluationStrategy, outputMapping.getOutputReadLengths());
+ final int numClustersInTile = bclReader.seek(files, tileIndex, currentTile);
+ return new CountLimitedIterator(bclReader, numClustersInTile);
+ }
+ else{
+ return null;
+ }
+ }
+
+ @Override
+ protected CycleFilesParser<BclData> makeCycleFileParser(final List<File> files) {
+ if (cycleFileParser == null) {
+ cycleFileParser = new MultiTileBclDataCycleFileParser(files, currentTile);
+ } else {
+ final int numClustersInTile = cycleFileParser.getReader().seek(files, tileIndex, currentTile);
+ cycleFileParser.setCurrentTile(currentTile);
+ cycleFileParser.resetClusterLimit(numClustersInTile);
+ }
+ return cycleFileParser;
+ }
+
+ /**
+ * An iterator wrapper that stops when it has return a pre-determined number of records even if the underlying
+ * iterator still had more records.
+ */
+ static class CountLimitedIterator implements CloseableIterator<BclData> {
+ public BclReader getUnderlyingIterator() {
+ return underlyingIterator;
+ }
+
+ private final BclReader underlyingIterator;
+ private int recordLimit;
+ private int numRecordsRead = 0;
+
+ CountLimitedIterator(final BclReader underlyingIterator, final int recordLimit) {
+ this.underlyingIterator = underlyingIterator;
+ this.recordLimit = recordLimit;
+ }
+
+ @Override
+ public void close() {
+ //underlyingIterator.close();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return numRecordsRead < recordLimit && underlyingIterator.hasNext();
+ }
+
+ @Override
+ public BclData next() {
+ if (!hasNext()) throw new NoSuchElementException();
+ ++numRecordsRead;
+ return underlyingIterator.next();
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+
+ private class MultiTileBclDataCycleFileParser implements CycleFilesParser<BclData> {
+ final CountLimitedIterator reader;
+ int currentTile;
+
+ public MultiTileBclDataCycleFileParser(final List<File> files, final int currentTile) {
+ this.currentTile = currentTile;
+ reader = makeReader(files);
+ }
+
+ @Override
+ public void close() {
+ reader.close();
+ }
+
+ @Override
+ public BclData next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return reader.next();
+ }
+
+ @Override
+ public boolean hasNext() {
+ try {
+ return reader.hasNext();
+ } catch (final NullPointerException npe) {
+ return false;
+ }
+ }
+
+ public int getCurrentTile(){
+ return currentTile;
+ }
+
+ public BclReader getReader() {
+ return reader.getUnderlyingIterator();
+ }
+
+ public void resetClusterLimit(final int numClustersInTile) {
+ reader.recordLimit = numClustersInTile;
+ reader.numRecordsRead = 0;
+ }
+
+ public void setCurrentTile(final int currentTile) {
+ this.currentTile = currentTile;
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/MultiTileFileUtil.java b/src/java/picard/illumina/parser/MultiTileFileUtil.java
new file mode 100644
index 0000000..c53ee26
--- /dev/null
+++ b/src/java/picard/illumina/parser/MultiTileFileUtil.java
@@ -0,0 +1,120 @@
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.illumina.parser.fakers.BciFileFaker;
+import picard.illumina.parser.fakers.FileFaker;
+import picard.illumina.parser.fakers.FilterFileFaker;
+import picard.illumina.parser.fakers.MultiTileLocsFileFaker;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * For file types for which there is one file per lane, with fixed record size, and all the tiles in it,
+ * so the s_<lane>.bci file can be used to figure out where each tile starts and ends.
+ */
+public abstract class MultiTileFileUtil<OUTPUT_RECORD extends IlluminaData> extends ParameterizedFileUtil {
+ protected final File bci;
+ protected TileIndex tileIndex;
+ protected File dataFile;
+
+ MultiTileFileUtil(final String extension, final File base, final File bciDir, final FileFaker fileFaker,
+ final int lane) {
+ super(false, extension, base, fileFaker, lane);
+ bci = new File(bciDir, "s_" + lane + ".bci");
+ if (bci.exists()) {
+ tileIndex = new TileIndex(bci);
+ } else {
+ tileIndex = null;
+ }
+ final File[] filesMatchingRegexp = IOUtil.getFilesMatchingRegexp(base, matchPattern);
+ if (filesMatchingRegexp == null || filesMatchingRegexp.length == 0) {
+ dataFile = null;
+ } else if (filesMatchingRegexp.length == 1) {
+ dataFile = filesMatchingRegexp[0];
+ } else {
+ throw new PicardException("More than one filter file found in " + base.getAbsolutePath());
+ }
+ }
+
+ @Override
+ public boolean filesAvailable() {
+ return tileIndex != null && dataFile != null && dataFile.exists();
+ }
+
+ @Override
+ public List<Integer> getTiles() {
+ if (tileIndex == null) {
+ return Collections.emptyList();
+ }
+ return tileIndex.getTiles();
+ }
+
+ /**
+ * expectedCycles are not checked in this implementation.
+ */
+ @Override
+ public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
+ if (tileIndex == null) {
+ return Collections.singletonList("Tile index(" + bci.getAbsolutePath() + ") does not exist!");
+ }
+ return tileIndex.verify(expectedTiles);
+ }
+
+ @Override
+ public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] expectedCycles,
+ final IlluminaFileUtil.SupportedIlluminaFormat format) {
+ //we need to fake a bci file for the tile index
+ final BciFileFaker bciFileFaker = new BciFileFaker();
+ try {
+ bciFileFaker.fakeBciFile(bci, expectedTiles);
+ tileIndex = new TileIndex(bci);
+ faker.fakeFile(base, expectedTiles, lane, extension);
+ final File[] filesMatchingRegexp = IOUtil.getFilesMatchingRegexp(base, matchPattern);
+ if (filesMatchingRegexp == null || filesMatchingRegexp.length == 0) {
+ dataFile = null;
+ } else if (filesMatchingRegexp.length == 1) {
+ dataFile = filesMatchingRegexp[0];
+ } else {
+ throw new PicardException("More than one filter file found in " + base.getAbsolutePath());
+ }
+ } catch (final IOException e) {
+ return Collections.singletonList("Could not create tile index file: " + bci.getAbsolutePath());
+ }
+ return tileIndex.verify(expectedTiles);
+ }
+
+ abstract IlluminaParser<OUTPUT_RECORD> makeParser(List<Integer> requestedTiles);
+
+}
+
+class MultiTileFilterFileUtil extends MultiTileFileUtil<PfData> {
+
+ /**
+ * @param basecallLaneDir location of .filter file and also .bci file
+ */
+ MultiTileFilterFileUtil(final File basecallLaneDir, final int lane) {
+ super(".filter", basecallLaneDir, basecallLaneDir, new FilterFileFaker(), lane);
+ }
+
+ @Override
+ IlluminaParser<PfData> makeParser(final List<Integer> requestedTiles) {
+ return new MultiTileFilterParser(tileIndex, requestedTiles, dataFile);
+ }
+}
+
+class MultiTileLocsFileUtil extends MultiTileFileUtil<PositionalData> {
+
+ MultiTileLocsFileUtil(final File basecallLaneDir, final File bciDir, final int lane) {
+ super(".locs", basecallLaneDir, bciDir, new MultiTileLocsFileFaker(), lane);
+ }
+
+ @Override
+ IlluminaParser<PositionalData> makeParser(final List<Integer> requestedTiles) {
+ return new MultiTileLocsParser(tileIndex, requestedTiles, dataFile, lane);
+ }
+}
+
diff --git a/src/java/picard/illumina/parser/MultiTileFilterParser.java b/src/java/picard/illumina/parser/MultiTileFilterParser.java
new file mode 100644
index 0000000..4c05431
--- /dev/null
+++ b/src/java/picard/illumina/parser/MultiTileFilterParser.java
@@ -0,0 +1,64 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import picard.illumina.parser.readers.FilterFileReader;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Read filter file that contains multiple tiles in a single file. A tile index is needed to parse this
+ * file so that {tile number, cluster number} can be converted into absolute record number in file.
+ */
+public class MultiTileFilterParser extends MultiTileParser<PfData> {
+ private final FilterFileReader reader;
+
+ public MultiTileFilterParser(final TileIndex tileIndex, final List<Integer> requestedTiles, final File filterFile) {
+ super(tileIndex, requestedTiles, Collections.singleton(IlluminaDataType.PF));
+ reader = new FilterFileReader(filterFile);
+ }
+
+ @Override
+ PfData readNext() {
+ final boolean nextVal = reader.next();
+ return new PfData() {
+ @Override
+ public boolean isPf() {
+ return nextVal;
+ }
+ };
+ }
+
+ @Override
+ void skipRecords(final int numToSkip) {
+ reader.skipRecords(numToSkip);
+ }
+
+ @Override
+ public void close() {
+ //no-op
+ }
+}
diff --git a/src/java/picard/illumina/parser/MultiTileLocsParser.java b/src/java/picard/illumina/parser/MultiTileLocsParser.java
new file mode 100644
index 0000000..df8e23d
--- /dev/null
+++ b/src/java/picard/illumina/parser/MultiTileLocsParser.java
@@ -0,0 +1,82 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import picard.illumina.parser.readers.AbstractIlluminaPositionFileReader;
+import picard.illumina.parser.readers.LocsFileReader;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Read locs file that contains multiple tiles in a single file. A tile index is needed to parse this
+ * file so that {tile number, cluster number} can be converted into absolute record number in file.
+ */
+public class MultiTileLocsParser extends MultiTileParser<PositionalData> {
+ private final LocsFileReader reader;
+ private final int lane;
+
+ public MultiTileLocsParser(final TileIndex tileIndex, final List<Integer> requestedTiles, final File locsFile, final int lane) {
+ super(tileIndex, requestedTiles, Collections.singleton(IlluminaDataType.Position));
+ final int tileNumber;
+ if (requestedTiles.size() == 1) tileNumber = requestedTiles.get(0);
+ else tileNumber = -1;
+ this.reader = new LocsFileReader(locsFile, lane, tileNumber);
+ this.lane = lane;
+ }
+
+ @Override
+ PositionalData readNext() {
+ final int tile = getTileOfNextCluster();
+ final AbstractIlluminaPositionFileReader.PositionInfo nextVal = reader.next();
+ return new PositionalData() {
+ public int getXCoordinate() {
+ return nextVal.xQseqCoord;
+ }
+
+ public int getYCoordinate() {
+ return nextVal.yQseqCoord;
+ }
+
+ public int getLane() {
+ return lane;
+ }
+
+ public int getTile() {
+ return tile;
+ }
+ };
+ }
+
+ @Override
+ void skipRecords(final int numToSkip) {
+ reader.skipRecords(numToSkip);
+ }
+
+ @Override
+ public void close() {
+ reader.close();
+ }
+}
diff --git a/src/java/picard/illumina/parser/MultiTileParser.java b/src/java/picard/illumina/parser/MultiTileParser.java
new file mode 100644
index 0000000..f62f2c4
--- /dev/null
+++ b/src/java/picard/illumina/parser/MultiTileParser.java
@@ -0,0 +1,128 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.PeekIterator;
+import picard.PicardException;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Abstract class for files with fixed-length records for multiple tiles, e.g. .locs and .filter files.
+ * @param <OUTPUT_RECORD> The kind of record to be returned (as opposed to the type of the record stored in the file).
+ */
+public abstract class MultiTileParser<OUTPUT_RECORD extends IlluminaData> implements IlluminaParser<OUTPUT_RECORD> {
+ private final TileIndex tileIndex;
+ private final Iterator<TileIndex.TileIndexRecord> tileIndexIterator;
+ private final PeekIterator<Integer> requestedTilesIterator;
+ private final Set<IlluminaDataType> supportedTypes;
+ private int nextRecordIndex = 0;
+ private int nextClusterInTile;
+ private TileIndex.TileIndexRecord currentTile = null;
+
+ /**
+ * @param tileIndex Enables conversion from tile number to record number in this file.
+ * @param requestedTiles Iterate over these tile numbers, which must be in ascending order.
+ * @param supportedTypes The data types(s) that are provided by this file type, used to decide what file types to read.
+ */
+ public MultiTileParser(final TileIndex tileIndex,
+ final List<Integer> requestedTiles,
+ final Set<IlluminaDataType> supportedTypes) {
+ this.tileIndex = tileIndex;
+ this.tileIndexIterator = tileIndex.iterator();
+ this.requestedTilesIterator = new PeekIterator<Integer>(requestedTiles.iterator());
+ this.supportedTypes = supportedTypes;
+ }
+
+ @Override
+ public void seekToTile(final int oneBasedTileNumber) {
+ while (tileIndexIterator.hasNext()) {
+ final TileIndex.TileIndexRecord next = tileIndexIterator.next();
+ if (next.tile > oneBasedTileNumber) {
+ throw new PicardException(
+ String.format("Cannot seek backwards: next tile %d > tile sought %d", next.tile, oneBasedTileNumber));
+ } else if (next.tile == oneBasedTileNumber) {
+ currentTile = next;
+ break;
+ }
+ }
+ if (nextRecordIndex > currentTile.indexOfFirstClusterInTile) {
+ throw new PicardException(
+ String.format("Seem to be in wrong position %d > %d", nextRecordIndex, currentTile.indexOfFirstClusterInTile));
+ }
+ skipRecords(currentTile.indexOfFirstClusterInTile - nextRecordIndex);
+ nextRecordIndex = currentTile.indexOfFirstClusterInTile;
+ nextClusterInTile = 0;
+ }
+
+ @Override
+ public OUTPUT_RECORD next() {
+ if (!hasNext()) throw new NoSuchElementException();
+ OUTPUT_RECORD ret = readNext();
+ ++nextClusterInTile;
+ ++nextRecordIndex;
+ return ret;
+ }
+
+ @Override
+ public boolean hasNext() {
+ // Skip over any empty tiles
+ while ((currentTile == null || nextClusterInTile >= currentTile.numClustersInTile) && requestedTilesIterator.hasNext()) {
+ seekToTile(requestedTilesIterator.next());
+ }
+ return currentTile != null && nextClusterInTile < currentTile.numClustersInTile;
+ }
+
+ @Override
+ public int getTileOfNextCluster() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ if (currentTile != null && nextClusterInTile < currentTile.numClustersInTile) return currentTile.tile;
+ else return requestedTilesIterator.peek();
+ }
+
+ @Override
+ public void verifyData(final List<Integer> tiles, final int[] cycles) {
+ final List<String> tileErrors = tileIndex.verify(tiles);
+ if (!tileErrors.isEmpty()) throw new PicardException(tileErrors.get(0));
+ //No need to validate cycles until such time as this class is used for cycle-oriented data types
+ }
+
+ @Override
+ public Set<IlluminaDataType> supportedTypes() {
+ return supportedTypes;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ abstract OUTPUT_RECORD readNext();
+ abstract void skipRecords(int numToSkip);
+}
diff --git a/src/java/picard/illumina/parser/OutputMapping.java b/src/java/picard/illumina/parser/OutputMapping.java
new file mode 100644
index 0000000..a6d5784
--- /dev/null
+++ b/src/java/picard/illumina/parser/OutputMapping.java
@@ -0,0 +1,183 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+
+/**
+ * In multiple locations we need to know what cycles are output, as of now we output all non-skip cycles, but rather than sprinkle
+ * this knowledge throughout the parser code, instead OutputMapping provides all the data a client might want about the
+ * cycles to be output including what ReadType they are.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class OutputMapping {
+ /**
+ * This class represents the mapping from Raw Cycles to TwoDIndices into output data structures and ClusterData. This class
+ * also contains ReadStructure.Substructure that describes which reads/cycles should be output.
+ *
+ * For each cycle # (1-Based) there is a corresponding element in the cycleToOutputIndex array where
+ * cycleToOutputIndex[cycle#].arrayIndex indicates the readNumber that cycle will be found on and cycleToOutputIndex[cycle#].elementIndex
+ * indicates the array inde on that readNumber that the cycle occupies. There are also various intermediate byte[][]
+ * structures (in BclData, QseqReadData, etc...) where the top level array corresponds with the readNumber and the second-level
+ * array corresponds with cycleNumber, cycleToOutputIndex is used to index into these arrays.
+ */
+ private final TwoDIndex[] cycleToOutputIndex;
+
+ /** The collection of ReadDescriptors and information about those read descriptors that describe all the
+ * cycles that IlluminaDataProvider should output in a ClusterData object */
+ private final ReadStructure.Substructure outputSubstructure;
+
+ /** The original read structure without any skips */
+ private final ReadStructure outputReadStructure;
+
+ /**
+ * Create an OutputMapping from a readStructure, currently the outputSubstructure just references the readStructure.nonSkips
+ * Substructure
+ * @param readStructure The readStructure for the given run that we want an OutputMapping for
+ */
+ public OutputMapping(final ReadStructure readStructure) {
+ this.outputSubstructure = readStructure.nonSkips;
+ this.cycleToOutputIndex = makeCycleToOutputIndexArray(readStructure);
+ this.outputReadStructure = outputSubstructure.toReadStructure();
+ }
+
+ /** @return The number of reads that should be found in the output clusterData */
+ public int numOutputReads() {
+ return outputSubstructure.length();
+ }
+
+ /** @return An array of cycles in ascending order of all the cycles that should be output. */
+ public int [] getOutputCycles() {
+ return outputSubstructure.getCycles();
+ }
+
+ /** @return An ordered array of lengths, where each element represents the size of output reads respectively */
+ public int [] getOutputReadLengths() {
+ return outputSubstructure.getDescriptorLengths();
+ }
+
+ /** @return The total number of cycles that will be output */
+ public int getTotalOutputCycles() {
+ return outputSubstructure.getTotalCycles();
+ }
+
+ /** @return An ordered array of Ranges over cycle indices(cycle#-1), where each range represents a contiguous block of cycles
+ * to output, and each cycle in getOutputCycles() is in ONE AND ONLY ONE Range, all ranges are inclusive of both ends
+ */
+ public Range [] getCycleIndexRanges() {
+ return outputSubstructure.getCycleIndexRanges();
+ }
+
+ /** @return An iterator over the read descriptors that describe the reads to be output*/
+ public Iterable<ReadDescriptor> getOutputDescriptors() {
+ return outputSubstructure;
+ }
+
+ public ReadStructure getOutputReadStructure() {
+ return outputReadStructure;
+ }
+
+ /**
+ * Return an index that where:
+ * index.arrayIndex - represents either the read number the cycle will be output too, or (in some cases)
+ * an array index into a two dimensional array of byte[][] where the top level array corresponds to read number
+ *
+ * index.elementIndex - represents the element a cycle will appear in inside it's give read, or the element
+ * in an array as described above
+ * @param cycle The cycle for which we want an index
+ * @return A TwoDArrayIndex indicating where this cycle can be found
+ */
+ public TwoDIndex getOutputIndexForCycle(final int cycle) {
+ return cycleToOutputIndex[cycle];
+ }
+
+ /**
+ * An index into two dimensional arrays or other two dimensional structures where arrayIndex equals the index
+ * into the top level structure and elementIndex is equal to the index into the bottom level structure
+ */
+ static class TwoDIndex {
+ //index into the "outer structure" i.e. if we have an array T[][], we would index T[majorIndex][minorIndex]
+ public final int majorIndex;
+
+ //index into the "inner structure", see majorIndex
+ public final int minorIndex;
+
+ public TwoDIndex(final int majorIndex, final int minorIndex) {
+ this.majorIndex = majorIndex;
+ this.minorIndex = minorIndex;
+ }
+
+ @Override
+ public String toString() {
+ return "TwoDIndex(majorIndex == " + majorIndex + ", minorIndex == " + minorIndex + ")";
+ }
+
+ @Override
+ public boolean equals(final Object thatObj) {
+ if(thatObj == null || !(thatObj instanceof TwoDIndex)) {
+ return false;
+ }
+
+ final TwoDIndex that = (TwoDIndex) thatObj;
+ return this.majorIndex == that.majorIndex && this.minorIndex == that.minorIndex;
+ }
+ }
+
+ /**
+ * Create an array where each index corresponds to a cycle # (with Cycle 0 = null) and each element in
+ * an index into a ClusterData's reads/bases and reads/qualities for the run described by readStructure
+ * @param readStructure The readStructure describing the run concerned
+ * @return An array of TwoDArrayIndexes
+ */
+ private TwoDIndex[] makeCycleToOutputIndexArray(final ReadStructure readStructure) {
+ int totalCycles = readStructure.totalCycles;
+ final TwoDIndex[] cycleToOutputIndex = new TwoDIndex[totalCycles + 1];
+
+ final int [] outputCycles = getOutputCycles();
+ final int [] outputLengths = getOutputReadLengths();
+ int outputCycleIndex = 0;
+ int arrIndex = 0;
+ int elementIndex = 0;
+ for(int i = 1; i <= totalCycles && outputCycleIndex < outputCycles.length; i++) {
+ if(outputCycles[outputCycleIndex] == i) {
+ if(elementIndex >= outputLengths[arrIndex]) {
+ elementIndex = 0;
+ ++arrIndex;
+ }
+
+ cycleToOutputIndex[i] = new TwoDIndex(arrIndex, elementIndex);
+ ++elementIndex;
+ ++outputCycleIndex;
+ }
+ }
+
+ if(outputCycleIndex != outputCycles.length) {
+ throw new PicardException("Error in read structure outputCycles (" + StringUtil.intValuesToString(outputCycles) + ") and total cycles (" + totalCycles + ") OutputCycleIndex(" + outputCycleIndex + ")");
+ }
+
+ return cycleToOutputIndex;
+ }
+}
diff --git a/src/java/picard/illumina/parser/ParameterizedFileUtil.java b/src/java/picard/illumina/parser/ParameterizedFileUtil.java
new file mode 100644
index 0000000..9e062d5
--- /dev/null
+++ b/src/java/picard/illumina/parser/ParameterizedFileUtil.java
@@ -0,0 +1,188 @@
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.illumina.parser.fakers.FileFaker;
+
+import java.io.File;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public abstract class ParameterizedFileUtil {
+ public static final String PER_TILE_PATTERN_STRING = "s_(\\d+)_(\\d{1,5})";
+ /**
+ * The file extension for this class, file extension does not have the standard meaning
+ * in this instance. It means, all the characters that come after the identifying portion of
+ * the file (after lane, tile, and end that is). So _qseq.txt and .filter are both file extensions
+ */
+ protected final String extension;
+
+ /**
+ * A pattern that will match files of this type for this lane
+ */
+ protected Pattern matchPattern;
+
+ protected final int lane;
+ protected List<Integer> tiles;
+ /**
+ * If you think of the file system as a tree, this is the deepest directory(node) on the tree that
+ * still contains all of the files for this given type (e.g. If we're talking about BCLs the directory
+ * structure is:
+ * <p/>
+ * BaseCall Dir
+ * |
+ * L001
+ * | | |
+ * C1.1 C2.1 ... Cn.1
+ * | | |
+ * bcl Files ... bclFiles
+ * <p/>
+ * L001 is the base because it contains every BCL file in the run (though those files are nested in
+ * other folders).
+ */
+ protected final File base;
+ protected final FileFaker faker;
+
+ protected static final boolean DefaultSkipEmptyFiles = true;
+ protected final boolean skipEmptyFiles;
+
+ public ParameterizedFileUtil(final boolean laneTileRegex, final String extension, final File base,
+ final FileFaker faker, final int lane, final boolean skipEmptyFiles) {
+ this(extension, base, faker, lane, skipEmptyFiles);
+ if (laneTileRegex) {
+ matchPattern = Pattern.compile(escapePeriods(makeLaneTileRegex(processTxtExtension(extension), lane)));
+ } else {
+ matchPattern = Pattern.compile(escapePeriods(makeLaneRegex(extension, lane)));
+ }
+ }
+
+ public ParameterizedFileUtil(final boolean laneTileRegex, final String extension, final File base,
+ final FileFaker faker, final int lane) {
+ this(laneTileRegex, extension, base, faker, lane, DefaultSkipEmptyFiles);
+ }
+
+ public ParameterizedFileUtil(final String pattern, final String extension, final File base, final FileFaker faker,
+ final int lane) {
+ this(extension, base, faker, lane);
+ this.matchPattern = Pattern.compile(pattern);
+ }
+
+ private ParameterizedFileUtil(final String extension, final File base, final FileFaker faker,
+ final int lane) {
+ this(extension, base, faker, lane, DefaultSkipEmptyFiles);
+ }
+
+ private ParameterizedFileUtil(final String extension, final File base, final FileFaker faker,
+ final int lane, final boolean skipEmptyFiles) {
+ this.faker = faker;
+ this.extension = extension;
+ this.base = base;
+ this.lane = lane;
+ this.skipEmptyFiles = skipEmptyFiles;
+ }
+
+ /**
+ * Determine whether or not files are available
+ *
+ * @return return true if files are found matching this types pattern, false otherwise
+ */
+ public abstract boolean filesAvailable();
+
+ /**
+ * Return a list of all tiles available for this file format and run
+ *
+ * @return A List of tile integers
+ */
+ public List<Integer> getTiles() {
+ return tiles;
+ }
+
+ /**
+ * Given the expected tiles/expected cycles for this file type, return a list of error messages describing any
+ * missing/or malformed files
+ *
+ * @param expectedTiles An ordered list of tile numbers
+ * @param expectedCycles An ordered list of cycle numbers that may contain gaps
+ * @return A list of error messages for this format
+ */
+ public abstract List<String> verify(List<Integer> expectedTiles, int[] expectedCycles);
+
+ /**
+ * Given the expected tiles/expected cycles for this file type create a set of fake files such that the
+ * verification criteria are met.
+ *
+ * @param expectedTiles An ordered list of tile numbers
+ * @param cycles An ordered list of cycle numbers that may contain gaps
+ * @param format The format of the files that are to be faked
+ * @return A list of error messages for this format
+ */
+ public abstract List<String> fakeFiles(List<Integer> expectedTiles, int[] cycles,
+ IlluminaFileUtil.SupportedIlluminaFormat format);
+
+ /**
+ * Returns only lane and tile information as PerTileFt's do not have End information.
+ *
+ * @param fileName Filename to analyze for data
+ * @return A LaneTile object with the discovered Lane and Tile information and a null end field.
+ */
+ protected Integer fileToTile(final String fileName) {
+ final Matcher matcher = matchPattern.matcher(fileName);
+ if (!matcher.matches()) {
+ return null;
+ }
+ return Integer.parseInt(matcher.group(1));
+ }
+
+ /**
+ * Return a regex string for finding Lane and Tile given a file extension pattern
+ */
+ public static String makeLaneTileRegex(final String fileNameEndPattern, final int lane) {
+ if (lane < 0) {
+ throw new PicardException("Lane (" + lane + ") cannot be negative");
+ }
+ return "^" + "s_" + lane + "_(\\d{1,5})" + fileNameEndPattern + "$";
+ }
+
+ private String makeLaneRegex(final String fileNameEndPattern, final int lane) {
+ return "^s_" + lane + fileNameEndPattern + "$";
+ }
+
+ /**
+ * The period separator is expected in the file extension, since some do not start with it
+ */
+ private String escapePeriods(final String preEscaped) {
+ return preEscaped
+ .replaceAll("\\.", "\\."); //In the first one the \\ is inside a regex in the second it's NOT
+ }
+
+ /**
+ * For filename patterns that end with .txt tack on the option .gz extension
+ */
+ private String processTxtExtension(final String fileNameEndPattern) {
+ if (fileNameEndPattern.endsWith(".txt")) {
+ return fileNameEndPattern + "(\\.gz|\\.bz2)?";
+ } else {
+ return fileNameEndPattern;
+ }
+ }
+
+ /**
+ * Return all files that match pattern of the given file type in the given base directory
+ */
+ protected IlluminaFileMap getTiledFiles(final File baseDirectory, final Pattern pattern) {
+ final IlluminaFileMap fileMap = new IlluminaFileMap();
+ if (baseDirectory.exists()) {
+ IOUtil.assertDirectoryIsReadable(baseDirectory);
+ final File[] files = IOUtil.getFilesMatchingRegexp(baseDirectory, pattern);
+ for (final File file : files) {
+ if (!skipEmptyFiles || file.length() > 0) {
+ fileMap.put(fileToTile(file.getName()), file);
+ }
+ }
+ }
+
+ return fileMap;
+ }
+
+}
diff --git a/src/java/picard/illumina/parser/PerTileCycleParser.java b/src/java/picard/illumina/parser/PerTileCycleParser.java
new file mode 100644
index 0000000..7cd5960
--- /dev/null
+++ b/src/java/picard/illumina/parser/PerTileCycleParser.java
@@ -0,0 +1,200 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import picard.PicardException;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.TreeSet;
+
+/**
+ * PerTilePerCycleParser is an abstract IlluminaParser that maintains a list of file parsers for the current tile (1 for each cycle)
+ * and coordinates the construction/population of an IlluminaData object on a cycle by cycle basis.
+ *
+ * @param <ILLUMINA_DATA>
+ */
+abstract class PerTileCycleParser<ILLUMINA_DATA extends IlluminaData> implements IlluminaParser<ILLUMINA_DATA> {
+
+ /** Location of illumina output files to be parsed. Typically this is Data/Intensities/L00<lane> */
+ private final File laneDirectory;
+
+ /** The lane to iterate over */
+ private final int lane;
+
+ /** A parser for the current tile */
+ private CycleFilesParser<ILLUMINA_DATA> cycleFilesParser;
+
+ final OutputMapping outputMapping;
+
+ /** The current tile number */
+ protected int currentTile;
+
+ /** Map of Cycle -> Tile -> List<File> */
+ private final CycleIlluminaFileMap cyclesToTileFiles;
+
+ private final TreeSet<Integer> tileOrder;
+
+ /**
+ * Construct a per tile parser
+ *
+ * @param directory The directory containing the lane we are analyzing (i.e. the parent of the L00<lane> directory)
+ * @param lane The lane that is being iterated over
+ * @param cyclesToTileFiles A map of tile to CycleFilesIterators whose iterators contain only the cycles we want to output
+ * @param outputMapping Data structure containing information on how we should output data
+ */
+ PerTileCycleParser(final File directory, final int lane, final CycleIlluminaFileMap cyclesToTileFiles, final OutputMapping outputMapping) {
+ this.tileOrder = getTileOrder(cyclesToTileFiles);
+ this.lane = lane;
+ this.laneDirectory = new File(directory, IlluminaFileUtil.longLaneStr(this.lane));
+ this.cyclesToTileFiles = cyclesToTileFiles;
+ this.currentTile = tileOrder.first();
+ this.outputMapping = outputMapping;
+ }
+
+ private TreeSet<Integer> getTileOrder(final CycleIlluminaFileMap cyclesToTileFiles) {
+ final TreeSet<Integer> uniqueTiles = new TreeSet<Integer>();
+
+ for (final IlluminaFileMap fileMap : cyclesToTileFiles.values()) {
+ uniqueTiles.addAll(fileMap.keySet());
+ }
+ return uniqueTiles;
+ }
+
+ /**
+ * For a given cycle, return a CycleFilesParser.
+ *
+ * @param file The file to parse
+ * @return A CycleFilesParser that will populate the correct position in the IlluminaData object with that cycle's data.
+ */
+ protected abstract CycleFilesParser<ILLUMINA_DATA> makeCycleFileParser(final List<File> file);
+
+ public abstract void initialize();
+
+ /**
+ * CycleFileParsers iterate through the clusters of a file and populate an IlluminaData object with a single cycle's
+ * value.
+ *
+ * @param <ILLUMINA_DATA>
+ */
+ protected interface CycleFilesParser<ILLUMINA_DATA> {
+ public void close();
+
+ public ILLUMINA_DATA next();
+
+ public boolean hasNext();
+ }
+
+ /**
+ * Clear the current set of cycleFileParsers and replace them with the ones for the tile indicated by oneBasedTileNumber
+ *
+ * @param tile requested tile
+ */
+ @Override
+ public void seekToTile(final int tile) {
+ currentTile = tile;
+
+ if(cycleFilesParser != null) {
+ cycleFilesParser.close();
+ }
+
+ int totalCycles = 0;
+ final List<File> tileFiles = new ArrayList<File>();
+ for (final Map.Entry<Integer, IlluminaFileMap> entry : cyclesToTileFiles.entrySet()) {
+ tileFiles.add(entry.getValue().get(currentTile));
+ ++totalCycles;
+ }
+ cycleFilesParser = makeCycleFileParser(tileFiles);
+
+ if (totalCycles != outputMapping.getTotalOutputCycles()) {
+ throw new PicardException("Number of cycle OUTPUT files found (" + totalCycles + ") does not equal the number expected (" + outputMapping.getTotalOutputCycles() + ")");
+ }
+ }
+
+ /**
+ * Return the data for the next cluster by:
+ * 1. Advancing tiles if we reached the end of the current tile.
+ * 2. For each cycle, get the appropriate parser and have it populate it's data into the IlluminaData object.
+ *
+ * @return The IlluminaData object for the next cluster
+ */
+ @Override
+ public ILLUMINA_DATA next() { //iterate over clusters
+ if (!hasNext()) {
+ throw new NoSuchElementException("IlluminaData is missing in lane " + lane + " at directory location " + laneDirectory.getAbsolutePath());
+ }
+
+ if (!cycleFilesParser.hasNext()) {
+ seekToTile(tileOrder.higher(currentTile));
+ }
+
+ return cycleFilesParser.next();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return cycleFilesParser.hasNext() || currentTile < tileOrder.last();
+ }
+
+ /**
+ * Returns the tile of the next cluster that will be returned by PerTilePerCycleParser and therefore should be called before
+ * next() if you want to know the tile for the data returned by next()
+ *
+ * @return The tile number of the next ILLUMINA_DATA object to be returned
+ */
+ public int getTileOfNextCluster() {
+ //if the current parser still has more clusters, return the current tile number
+ if (cycleFilesParser.hasNext()) {
+ return currentTile;
+ }
+
+ //if the current parser is EMPTY, return the next tile number
+ if (currentTile < tileOrder.last()) {
+ return tileOrder.higher(currentTile);
+ }
+
+ //If we are at the end of clusters then this method should not be called, throw an exception
+ throw new NoSuchElementException();
+ }
+
+ @Override
+ public void verifyData(List<Integer> tiles, final int[] cycles) {
+ if (tiles == null) {
+ tiles = new ArrayList<Integer>(this.cyclesToTileFiles.keySet());
+ }
+ this.cyclesToTileFiles.assertValid(tiles, cycles);
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("Remove is not supported by " + this.getClass().getName());
+ }
+
+ @Override
+ public void close() {
+ cycleFilesParser.close();
+ }
+}
diff --git a/src/java/picard/illumina/parser/PerTileFileUtil.java b/src/java/picard/illumina/parser/PerTileFileUtil.java
new file mode 100644
index 0000000..af31681
--- /dev/null
+++ b/src/java/picard/illumina/parser/PerTileFileUtil.java
@@ -0,0 +1,83 @@
+package picard.illumina.parser;
+
+import picard.illumina.parser.fakers.FileFaker;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+public class PerTileFileUtil extends ParameterizedFileUtil {
+ private final IlluminaFileMap fileMap;
+
+ public PerTileFileUtil(final String extension, final File base,
+ final FileFaker faker, final int lane) {
+ this(extension, base, faker, lane, DefaultSkipEmptyFiles);
+ }
+
+ public PerTileFileUtil(final String extension, final File base,
+ final FileFaker faker, final int lane, final boolean skipEmptyFiles) {
+ super(true, extension, base, faker, lane, skipEmptyFiles);
+ this.fileMap = getTiledFiles(base, matchPattern);
+ if (fileMap.size() > 0) {
+ this.tiles = Collections.unmodifiableList(new ArrayList<Integer>(this.fileMap.keySet()));
+ } else {
+ this.tiles = new ArrayList<Integer>();
+ }
+ }
+
+ @Override
+ public boolean filesAvailable() {
+ return !fileMap.isEmpty();
+ }
+
+ public IlluminaFileMap getFiles() {
+ return fileMap;
+ }
+
+ public IlluminaFileMap getFiles(final List<Integer> tiles) {
+ return fileMap.keep(tiles);
+ }
+
+ @Override
+ public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
+ final List<String> failures = new LinkedList<String>();
+
+ if (!base.exists()) {
+ failures.add("Base directory(" + base.getAbsolutePath() + ") does not exist!");
+ } else {
+ if (!tiles.containsAll(expectedTiles)) {
+ final List<Integer> missing = new ArrayList<Integer>(expectedTiles);
+ missing.removeAll(tiles);
+ failures.add("Missing tile " + missing + " for file type " + extension + ".");
+ }
+ }
+ return failures;
+ }
+
+ @Override
+ public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] cycles,
+ final IlluminaFileUtil.SupportedIlluminaFormat format) {
+ final List<String> failures = new LinkedList<String>();
+ if (!base.exists()) {
+ failures.add("Base directory(" + base.getAbsolutePath() + ") does not exist!");
+ } else {
+ for (final Integer tile : expectedTiles) {
+ if (!tiles.contains(tile) || fileMap.get(tile).length() == 0) {
+ //create a new file of this type
+ try {
+ faker.fakeFile(base, tile, lane, extension);
+ } catch (final IOException e) {
+ failures.add(String.format("Could not create fake file %s: %s", fileMap.get(tile),
+ e.getMessage()));
+ }
+
+ }
+ }
+ }
+ return failures;
+ }
+
+}
diff --git a/src/java/picard/illumina/parser/PerTileParser.java b/src/java/picard/illumina/parser/PerTileParser.java
new file mode 100644
index 0000000..86bca2d
--- /dev/null
+++ b/src/java/picard/illumina/parser/PerTileParser.java
@@ -0,0 +1,142 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/** Abstract base class for Parsers that open a single tile file at a time and iterate through them. */
+public abstract class PerTileParser<ILLUMINA_DATA extends IlluminaData> implements IlluminaParser<ILLUMINA_DATA> {
+ private final IlluminaFileMap tileToFiles;
+ private CloseableIterator<ILLUMINA_DATA> currentIterator;
+ private Integer nextTile;
+ private Integer currentTile;
+
+ /** Factory method for the iterator of each tile */
+ protected abstract CloseableIterator<ILLUMINA_DATA> makeTileIterator(final File nextTileFile);
+
+ public PerTileParser(final IlluminaFileMap tilesToFiles) {
+ this.tileToFiles = tilesToFiles;
+ this.nextTile = tilesToFiles.firstKey();
+ this.currentTile = null;
+ }
+
+ public PerTileParser(final IlluminaFileMap tilesToFiles, final int nextTile) {
+ this.tileToFiles = tilesToFiles;
+ this.currentTile = null;
+ this.nextTile = nextTile;
+
+ if(!tilesToFiles.containsKey(nextTile)) {
+ throw new IllegalArgumentException("NextTile (" + nextTile + ") is not contained by tilesToFiles (" + StringUtil.join(",", new ArrayList<Integer>(tilesToFiles.keySet())));
+ }
+ }
+
+ /**
+ * Return the tile of the NEXT ILLUMINA_DATA object to be returned by the method next. This might force us to advance to the
+ * next file (as it will contains the data for the next) tile/ILLUMINA_DATA object.
+ * @return tile number for the next ILLUMINA_DATA object to be returned
+ */
+ public int getTileOfNextCluster() {
+ maybeAdvance();
+ return currentTile;
+ }
+
+ private void advanceTile() {
+ if(nextTile == null){
+ throw new NoSuchElementException("No more tiles to advance!");
+ }
+
+ if(currentIterator != null) {
+ currentIterator.close();
+ }
+
+ currentIterator = makeTileIterator(tileToFiles.get(nextTile));
+ currentTile = nextTile;
+ nextTile = tileToFiles.higherKey(nextTile);
+ }
+
+ public void seekToTile(int oneBasedTileNumber) {
+ nextTile = oneBasedTileNumber;
+
+ if(!tileToFiles.containsKey(oneBasedTileNumber)) {
+ throw new PicardException("PerTileParser does not contain key(" + oneBasedTileNumber +") keys available (" + StringUtil.join(",", new ArrayList<Integer>(tileToFiles.keySet())) + ")");
+ }
+
+ if(currentIterator != null) {
+ currentIterator.close();
+ }
+ currentIterator = null;
+ }
+
+ public void maybeAdvance() {
+ if(!hasNext()) {
+ throw new NoSuchElementException();
+ }
+
+ if(currentIterator == null || !currentIterator.hasNext()) {
+ advanceTile();
+ }
+ }
+
+ public ILLUMINA_DATA next() {
+ maybeAdvance();
+
+ return currentIterator.next();
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean hasNext() {
+ // Skip over empty tiles
+ while ((currentIterator == null || !currentIterator.hasNext()) && nextTile != null) {
+ advanceTile();
+ }
+ return currentIterator != null && currentIterator.hasNext();
+ }
+
+ public void close() {
+ if(currentIterator != null) {
+ currentIterator.close();
+ }
+ }
+
+ public void verifyData(List<Integer> tiles, final int [] cycles) {
+ final List<Integer> mapTiles = new ArrayList<Integer>(this.tileToFiles.keySet());
+ if(!mapTiles.containsAll(tiles)) {
+ throw new PicardException("Missing tiles in PerTileParser expected(" + StringUtil.join(",", tiles) + ") but found (" + StringUtil.join(",", mapTiles) + ")");
+ }
+
+ if(!tiles.containsAll(mapTiles)) {
+ throw new PicardException("Extra tiles where found in PerTileParser expected(" + StringUtil.join(",", tiles) + ") but found (" + StringUtil.join(",", mapTiles) + ")");
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/PerTilePerCycleFileUtil.java b/src/java/picard/illumina/parser/PerTilePerCycleFileUtil.java
new file mode 100644
index 0000000..63af850
--- /dev/null
+++ b/src/java/picard/illumina/parser/PerTilePerCycleFileUtil.java
@@ -0,0 +1,268 @@
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.illumina.parser.fakers.FileFaker;
+import picard.illumina.parser.readers.BclReader;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+
+public class PerTilePerCycleFileUtil extends ParameterizedFileUtil {
+
+ private final CycleIlluminaFileMap cycleFileMap;
+ private final Set<Integer> detectedCycles = new TreeSet<Integer>();
+
+ public PerTilePerCycleFileUtil(final String extension,
+ final File base, final FileFaker faker, final int lane) {
+ super(true, extension, base, faker, lane);
+ //sideEffect, assigned to numCycles
+ this.cycleFileMap = getPerTilePerCycleFiles();
+ }
+
+ /**
+ * For the given tiles, populate a CycleIlluminaFileMap that contains all these tiles and will iterate through
+ * all the files for these tiles in expectedBase
+ * Side Effect: Assigns numCycles
+ *
+ * @return A CycleIlluminaFileMap with the listed (or all) tiles for at least expectedCycles number of cycles(or total available
+ * cycles if expectedCycles is null)
+ */
+ protected CycleIlluminaFileMap getPerTilePerCycleFiles() {
+ final CycleIlluminaFileMap cycledMap = new CycleIlluminaFileMap();
+
+ final File laneDir = base;
+ final File[] tempCycleDirs;
+ tempCycleDirs = IOUtil.getFilesMatchingRegexp(laneDir, IlluminaFileUtil.CYCLE_SUBDIRECTORY_PATTERN);
+ if (tempCycleDirs == null || tempCycleDirs.length == 0) {
+ return cycledMap;
+ }
+
+ for (final File tempCycleDir : tempCycleDirs) {
+ detectedCycles.add(getCycleFromDir(tempCycleDir));
+ }
+
+ final Set<Integer> uniqueTiles = new HashSet<Integer>();
+
+ for (final File cycleDir : tempCycleDirs) {
+ final IlluminaFileMap fileMap = getTiledFiles(cycleDir, matchPattern);
+ uniqueTiles.addAll(fileMap.keySet());
+ cycledMap.put(getCycleFromDir(cycleDir), fileMap);
+ }
+
+ this.tiles = Collections.unmodifiableList(new ArrayList<Integer>(uniqueTiles));
+ return cycledMap;
+ }
+
+ public CycleIlluminaFileMap getFiles() {
+ return cycleFileMap;
+ }
+
+ public CycleIlluminaFileMap getFiles(final List<Integer> tiles) {
+ return cycleFileMap.keep(tiles, detectedCycles);
+ }
+
+ /**
+ * Returns a cycleIlluminaFileMap with all available tiles but limited to the cycles passed in. Any cycles that are missing
+ * cycle files or directories will be removed from the cycle list that is kept.
+ *
+ * @param cycles Cycles that should be present in the output CycleIlluminaFileMap
+ * @return A CycleIlluminaFileMap with all available tiles but at most the cycles passed in by the cycles parameter
+ */
+ public CycleIlluminaFileMap getFiles(final int[] cycles) {
+ //Remove any cycles that were discovered to be NON-EXISTENT when this util was instantiated
+ final Set<Integer> filteredCycles = removeNonExistentCycles(cycles);
+ return cycleFileMap.keep(tiles, filteredCycles);
+ }
+
+ /**
+ * Returns a cycleIlluminaFileMap that contains only the tiles and cycles specified (and fewer if the original CycleIlluminaFileMap, created
+ * on util instantiation, doesn't contain any of these tiles/cycles).
+ *
+ * @param cycles Cycles that should be present in the output CycleIlluminaFileMap
+ * @return A CycleIlluminaFileMap with at most the tiles/cycles listed in the parameters
+ */
+ public CycleIlluminaFileMap getFiles(final List<Integer> tiles, final int[] cycles) {
+ //Remove any cycles that were discovered to be NON-EXISTENT when this util was instantiated
+ final Set<Integer> filteredCycles = removeNonExistentCycles(cycles);
+ return cycleFileMap.keep(tiles, filteredCycles);
+ }
+
+ private Set<Integer> removeNonExistentCycles(final int[] cycles) {
+
+ final TreeSet<Integer> inputCyclesSet = new TreeSet<Integer>();
+ for (final Integer inputCycle : cycles) {
+ inputCyclesSet.add(inputCycle);
+ }
+
+ inputCyclesSet.retainAll(detectedCycles);
+
+ return inputCyclesSet;
+ }
+
+ public Set<Integer> getDetectedCycles() {
+ return detectedCycles;
+ }
+
+ /**
+ * Discover all files of this type in expectedBase that match pattern and construct a list of tiles
+ * available based on these files. The same number of tiles is expected in each cycle dir.
+ *
+ * @return A list of tile integers for all tiles available
+ */
+ public List<Integer> getTiles() {
+ return tiles;
+ }
+
+ public boolean filesAvailable() {
+ boolean filesAvailable = false;
+ for (final IlluminaFileMap fileMap : cycleFileMap.values()) {
+ if (!fileMap.isEmpty()) {
+ filesAvailable = true;
+ break;
+ }
+ }
+ return filesAvailable;
+ }
+
+ @Override
+ public List<String> verify(final List<Integer> expectedTiles, final int[] expectedCycles) {
+ final List<String> failures = new LinkedList<String>();
+ final Map<Integer, Long> tileToFileLengthMap = new HashMap<Integer, Long>();
+
+ if (!base.exists()) {
+ failures.add("Base directory(" + base.getAbsolutePath() + ") does not exist!");
+ } else {
+ final CycleIlluminaFileMap cfm = getFiles(expectedTiles, expectedCycles);
+ for (final int currentCycle : expectedCycles) {
+ final IlluminaFileMap fileMap = cfm.get(currentCycle);
+ if (fileMap != null) {
+ for (final int tile : expectedTiles) {
+ final File cycleFile = fileMap.get(tile);
+ if (cycleFile != null) {
+ if (tileToFileLengthMap.get(tile) == null) {
+ tileToFileLengthMap.put(tile, cycleFile.length());
+ } else if (!extension.equals(".bcl.gz") && tileToFileLengthMap.get(tile) != cycleFile.length()) {
+
+ // TODO: The gzip bcl files might not be the same length despite having the same content,
+ // for now we're punting on this but this should be looked into at some point
+ failures.add("File type " + extension
+ + " has cycles files of different length. Current cycle ("
+ + currentCycle + ") " +
+ "Length of first non-empty file (" + tileToFileLengthMap.get(tile)
+ + ") length of current cycle (" + cycleFile.length() + ")"
+ + " File(" + cycleFile.getAbsolutePath() + ")");
+ }
+ } else {
+ failures.add("File type " + extension + " is missing a file for cycle " + currentCycle + " and tile " + tile);
+ }
+ }
+ } else {
+ failures.add("Missing file for cycle " + currentCycle + " in directory " + base.getAbsolutePath()
+ + " for file type " + extension);
+ }
+ }
+
+ }
+
+
+ return failures;
+ }
+
+ @Override
+ public List<String> fakeFiles(final List<Integer> expectedTiles, final int[] expectedCycles,
+ final IlluminaFileUtil.SupportedIlluminaFormat format) {
+ final List<String> failures = new LinkedList<String>();
+
+ if (!base.exists()) {
+ base.mkdirs();
+ }
+
+ final Set<Integer> missingCycleSet = new TreeSet<Integer>();
+ for (final Integer cycle : expectedCycles) {
+ missingCycleSet.add(cycle);
+ }
+
+ missingCycleSet.removeAll(detectedCycles);
+
+ for (final Integer cycle : missingCycleSet) {
+ final File cycleDirectory = new File(base, "C" + cycle + ".1");
+ if (cycleDirectory.mkdirs()) {
+ detectedCycles.add(cycle);
+ }
+ }
+
+ final CycleIlluminaFileMap cfm = getPerTilePerCycleFiles();
+ final Map<Integer, Integer> tileToSizeMap = new HashMap<Integer, Integer>();
+ for (final int currentCycle : expectedCycles) {
+ final IlluminaFileMap fileMap = cfm.get(currentCycle);
+
+ if (fileMap == null) {
+ for (final Integer tile : expectedTiles) {
+ final File fileToFake = new File(base + File.separator + getFileForCycle(currentCycle, tile));
+ try {
+ if (tileToSizeMap.containsKey(tile)) {
+ faker.fakeFile(fileToFake, tileToSizeMap.get(tile));
+ }
+ else{
+ faker.fakeFile(fileToFake, 1);
+ }
+ } catch (final IOException e) {
+ failures.add("Could not create fake file: " + e.getMessage());
+ }
+ }
+ } else {
+ for (final int tile : expectedTiles) {
+ final File cycleFile = fileMap.get(tile);
+ if (cycleFile != null && !tileToSizeMap.containsKey(tile)) {
+ tileToSizeMap.put(tile, (int) BclReader.getNumberOfClusters(cycleFile));
+ }
+ try {
+ if (cycleFile == null) {
+ final File fileToFake = new File(base + File.separator + getFileForCycle(currentCycle, tile));
+ if (tileToSizeMap.containsKey(tile)) {
+ faker.fakeFile(fileToFake, tileToSizeMap.get(tile));
+ } else {
+ faker.fakeFile(fileToFake, 1);
+ }
+ }
+ } catch (final IOException e) {
+ failures.add("Could not create fake file: " + e.getMessage());
+ }
+ }
+ }
+
+ }
+
+ for (final Integer cycle : missingCycleSet) {
+ failures.add("Missing cycle directory " + cycle + " in directory " + base.getAbsolutePath()
+ + " for file type " + extension);
+ }
+ return failures;
+ }
+
+ private String getFileForCycle(final int currentCycle, final int tile) {
+ return "C" + currentCycle + ".1" + File.separator + "s_" + lane + "_" + tile + extension;
+ }
+
+ private static int getCycleFromDir(final File tempCycleDir) {
+ final String fileName = tempCycleDir.getName();
+
+ final Matcher matcher = IlluminaFileUtil.CYCLE_SUBDIRECTORY_PATTERN.matcher(fileName);
+ if (!matcher.matches()) {
+ throw new PicardException("Invalid cycle directory name " + tempCycleDir.getName());
+ }
+
+ return Integer.parseInt(matcher.group(1));
+ }
+}
diff --git a/src/java/picard/illumina/parser/PosParser.java b/src/java/picard/illumina/parser/PosParser.java
new file mode 100644
index 0000000..d6e3aff
--- /dev/null
+++ b/src/java/picard/illumina/parser/PosParser.java
@@ -0,0 +1,133 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.PicardException;
+import picard.illumina.parser.readers.AbstractIlluminaPositionFileReader;
+import picard.illumina.parser.readers.ClocsFileReader;
+import picard.illumina.parser.readers.LocsFileReader;
+import picard.illumina.parser.readers.PosFileReader;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CollectionUtil.makeSet;
+
+/**
+ * PosParser parses multiple files formatted as one of the three file formats that contain position information
+ * only (pos, locs, and clocs). This parser takes a map from tilesToFiles and a FileType enum value indicating
+ * whether or not these are POS,LOCS, or CLOCS files. The only client classes to this class should be IlluminaDataProvider
+ * and test classes. Check out AbstractIlluminaFileReader, PosFileReader, LocsFileReader, and ClocsFileReader for
+ * more information on Position related illumina files.
+ */
+public class PosParser extends PerTileParser<PositionalData> {
+ private static Set<IlluminaDataType> supportedTypes = Collections.unmodifiableSet(makeSet(IlluminaDataType.Position));
+
+ /** The FileType of the files we are parsing */
+ private final IlluminaFileUtil.SupportedIlluminaFormat fileType;
+
+ public PosParser(final IlluminaFileMap tilesToFiles, final IlluminaFileUtil.SupportedIlluminaFormat fileType) {
+ super(tilesToFiles);
+ this.fileType = fileType;
+ }
+
+ public PosParser(final IlluminaFileMap tilesToFiles, final int startingTile, final IlluminaFileUtil.SupportedIlluminaFormat fileType) {
+ super(tilesToFiles, startingTile);
+ this.fileType = fileType;
+ }
+
+ /**
+ * Make an CloseableIterator<PositionalData> based on the given file and fileType specified at construction.
+ * This method wraps a reader in an iterator that converts it's output to the output format expected by
+ * IlluminaDataProvider (PositionalData).
+ * @param file A file for the current tile being parsed
+ * @return An iterator over the PositionalData in that file.
+ */
+ @Override
+ protected CloseableIterator<PositionalData> makeTileIterator(final File file) {
+
+ final AbstractIlluminaPositionFileReader fileReader;
+ switch(fileType){
+ case Pos:
+ fileReader = new PosFileReader(file);
+ break;
+
+ case Locs:
+ fileReader = new LocsFileReader(file);
+ break;
+
+ case Clocs:
+ fileReader = new ClocsFileReader(file);
+ break;
+
+ default:
+ throw new PicardException("Unrecognized pos file type " + fileType.name());
+ }
+
+ return new CloseableIterator<PositionalData>() {
+ private AbstractIlluminaPositionFileReader reader = fileReader;
+
+ public void close() {
+ reader.close();
+ }
+
+ public boolean hasNext() {
+ return reader.hasNext();
+ }
+
+ public PositionalData next() {
+ final AbstractIlluminaPositionFileReader.PositionInfo nextValue = reader.next();
+ return new PositionalData() {
+ public int getXCoordinate() {
+ return nextValue.xQseqCoord;
+ }
+
+ public int getYCoordinate() {
+ return nextValue.yQseqCoord;
+ }
+
+ public int getLane() {
+ return nextValue.lane;
+ }
+
+ public int getTile() {
+ return nextValue.tile;
+ }
+ };
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ @Override
+ public Set<IlluminaDataType> supportedTypes() {
+ return supportedTypes;
+ }
+
+}
diff --git a/src/java/picard/illumina/parser/Range.java b/src/java/picard/illumina/parser/Range.java
new file mode 100644
index 0000000..8629675
--- /dev/null
+++ b/src/java/picard/illumina/parser/Range.java
@@ -0,0 +1,65 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import picard.PicardException;
+
+/**
+ * While structurally identical to CompositeIndex, this class is maintained as it makes code more readable when the two are used together (see QSeqParser)
+ * @author jburke at broadinstitute.org
+ */
+public class Range {
+ public final int start;
+ public final int end;
+ public final int length;
+ public Range(final int start, final int end) {
+ if(end < start) {
+ throw new PicardException("Nonsensical Range(" + start + ", " + end + ")");
+ }
+
+ this.start = start;
+ this.end = end;
+ this.length = end - start + 1;
+ }
+
+ @Override
+ public boolean equals(final Object object) {
+ if(object == null || !(object instanceof Range)) {
+ return false;
+ }
+
+ final Range that = (Range) object;
+ return that.start == this.start && that.end == this.end;
+ }
+
+ @Override
+ public int hashCode() {
+ return (int)Math.pow(start, end);
+ }
+
+ @Override
+ public String toString() {
+ return "Range(" + start + ", " + end + ", " + length +")";
+ }
+}
diff --git a/src/java/picard/illumina/parser/ReadData.java b/src/java/picard/illumina/parser/ReadData.java
new file mode 100644
index 0000000..b1b2909
--- /dev/null
+++ b/src/java/picard/illumina/parser/ReadData.java
@@ -0,0 +1,96 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+/**
+ * Data for a single end of a paired-end read, a barcode read, or for the entire read if not paired end.
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class ReadData {
+ private byte[] bases;
+ private byte[] qualities;
+ private FourChannelIntensityData rawIntensities;
+ private FourChannelIntensityData noise;
+ private ReadType readType;
+
+ public ReadData() {
+ }
+
+ public ReadData(ReadType readType) {
+ this.readType = readType;
+ }
+
+ /**
+ * @return ASCII byte representation of bases.
+ */
+ public byte[] getBases() {
+ return bases;
+ }
+
+ public void setBases(final byte[] bases) {
+ this.bases = bases;
+ }
+
+ /**
+ * @return Noise values as produced by Illumina software, converted to shorts.
+ */
+ public FourChannelIntensityData getNoise() {
+ return noise;
+ }
+
+ public void setNoise(final FourChannelIntensityData noise) {
+ this.noise = noise;
+ }
+
+ /**
+ * @return Phred-binary scaled qualities. E.g. Q20 is the byte with value==20.
+ */
+ public byte[] getQualities() {
+ return qualities;
+ }
+
+ public void setQualities(final byte[] qualities) {
+ this.qualities = qualities;
+ }
+
+ /**
+ * @return Raw intensity values as produced by Illumina software, converted to shorts.
+ */
+ public FourChannelIntensityData getRawIntensities() {
+ return rawIntensities;
+ }
+
+ public void setRawIntensities(final FourChannelIntensityData rawIntensities) {
+ this.rawIntensities = rawIntensities;
+ }
+
+ public ReadType getReadType() {
+ return readType;
+ }
+
+ public void setReadType(final ReadType readType) {
+ this.readType = readType;
+ }
+}
diff --git a/src/java/picard/illumina/parser/ReadDescriptor.java b/src/java/picard/illumina/parser/ReadDescriptor.java
new file mode 100644
index 0000000..956e828
--- /dev/null
+++ b/src/java/picard/illumina/parser/ReadDescriptor.java
@@ -0,0 +1,57 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+/**
+ * Represents one set of cycles in an ReadStructure (e.g. if the ReadStructure is 36TB836T then
+ * 36T, 8B, and 36T are invidually represented internally as a ReadDescriptor).
+ */
+public class ReadDescriptor {
+ public final int length;
+ public final ReadType type;
+
+ public ReadDescriptor(final int length, final ReadType type) {
+ this.length = length;
+ this.type = type;
+ }
+
+ @Override
+ public String toString() {
+ return this.length + this.type.name();
+ }
+
+ public boolean equals(final Object other) {
+ if(this == other) return true;
+ if(other.getClass() != this.getClass()) return false;
+
+ final ReadDescriptor that = (ReadDescriptor) other;
+ return this.length == that.length && this.type == that.type;
+ }
+
+ @Override
+ public int hashCode() {
+ return 31 * this.type.ordinal() + 379 * length;
+ }
+}
diff --git a/src/java/picard/illumina/parser/ReadStructure.java b/src/java/picard/illumina/parser/ReadStructure.java
new file mode 100644
index 0000000..7bf53b9
--- /dev/null
+++ b/src/java/picard/illumina/parser/ReadStructure.java
@@ -0,0 +1,361 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CoordMath;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Describes the intended logical output structure of clusters of an Illumina run.
+ * (e.g. If the input data consists of 80 base
+ * clusters and we provide a read structure of "36T8B36T" then those bases should be split into 3 reads:
+ * read one should be 36 cycles of template,
+ * read two should be 8 cycles of barcode,
+ * read three should be another 36 cycle template read.)
+ * Note: In future releases, ReadStructures will be specified by clients of IlluminaDataProvider(currently
+ * read structures are detected by IlluminaDataProviderFactory via the structure of QSeq files). When working with
+ * QSeq formats, while the individual reads need not fall on QSeq end file boundaries the total number of cycles
+ * should equal the total number of cycles found in all end files for one tile. (e.g. if I have 80 reads and
+ * 3 end files per tile, those end files should have a total of 80 reads in them regardless of how many reads
+ * appear in each individual file)
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class ReadStructure {
+ public static final String PARAMETER_DOC =
+ "A description of the logical structure of clusters in an Illumina Run, i.e. a description of the structure IlluminaBasecallsToSam " +
+ "assumes the data to be in. It should consist of integer/character pairs describing the number of cycles and the type of those " +
+ "cycles (B for Barcode, T for Template, and S for skip). E.g. If the input data consists of 80 base clusters and we provide a " +
+ "read structure of \"36T8B8S28T\" then, before being converted to SAM records those bases will be split into 4 reads where " +
+ "read one consists of 36 cycles of template, read two consists of 8 cycles of barcode, read three will be an 8 base read of " +
+ "skipped cycles and read four is another 28 cycle template read. The read consisting of skipped cycles would NOT be included " +
+ "in output SAM/BAM file read groups.";
+ public final List<ReadDescriptor> descriptors;
+ public final int totalCycles;
+ public final int [] readLengths;
+
+ public final Substructure barcodes;
+ public final Substructure templates;
+ public final Substructure skips;
+
+ //nonSkips include barcode and template indices in the order they appear in the descriptors list
+ public final Substructure nonSkips;
+
+ /** Characters representing valid ReadTypes */
+ private static final String ValidTypeChars;
+
+ /** ValidTypeChars except characters are separated by commas */
+ private static final String ValidTypeCharsWSep;
+
+ static {
+ String validTypes = "";
+ String vtWSep = "";
+
+ boolean written = false;
+ for(ReadType rt : ReadType.values()) {
+ if(written) {
+ vtWSep += ",";
+ }
+
+ validTypes += rt.name();
+ vtWSep += rt.name();
+ }
+
+ ValidTypeChars = validTypes;
+ ValidTypeCharsWSep = vtWSep;
+ }
+
+ private static final String ReadStructureMsg = "Read structure must be formatted as follows: " +
+ "<number of bases><type><number of bases><type>...<number of bases> where number of bases is a " +
+ "positive (NON-ZERO) integer and type is one of the following characters " + ValidTypeCharsWSep +
+ " (e.g. 76T8B68T would denote a paired-end run with a 76 base first end an 8 base barcode followed by a 68 base second end).";
+ private static final Pattern FullPattern = java.util.regex.Pattern.compile("^((\\d+[" + ValidTypeChars + "]{1}))+$");
+ private static final Pattern SubPattern = java.util.regex.Pattern.compile("(\\d+)([" + ValidTypeChars + "]{1})");
+
+ /**
+ * Copies collection into descriptors (making descriptors unmodifiable) and then calculates relevant statistics about descriptors.
+ * @param collection A collection of ReadDescriptors that describes this ReadStructure
+ */
+ public ReadStructure(final List<ReadDescriptor> collection) {
+ if(collection.size() == 0) { //If this changes, change hashcode
+ throw new IllegalArgumentException("ReadStructure does not support 0 length clusters!");
+ }
+
+ final List<Range> allRanges = new ArrayList<Range>(collection.size());
+ this.descriptors = Collections.unmodifiableList(collection);
+ int cycles = 0;
+
+ final List<Integer> nonSkipIndicesList = new ArrayList<Integer>();
+ final List<Integer> barcodeIndicesList = new ArrayList<Integer>();
+ final List<Integer> templateIndicesList = new ArrayList<Integer>();
+ final List<Integer> skipIndicesList = new ArrayList<Integer>();
+ readLengths = new int[collection.size()];
+
+ int currentCycleIndex = 0; // Current cycle in the entire read structure
+ int descIndex = 0;
+ for(final ReadDescriptor desc : descriptors) {
+ if(desc.length == 0 || desc.length < 0) {
+ throw new IllegalArgumentException("ReadStructure only supports ReadDescriptor lengths > 0, found(" + desc.length + ")");
+ }
+
+ final int endIndexOfRange = CoordMath.getEnd(currentCycleIndex, desc.length);
+ allRanges.add(new Range(currentCycleIndex, endIndexOfRange));
+ currentCycleIndex = endIndexOfRange + 1;
+
+ readLengths[descIndex] = desc.length;
+ cycles += desc.length;
+ switch(desc.type) {
+ case B:
+ nonSkipIndicesList.add(descIndex);
+ barcodeIndicesList.add(descIndex);
+ break;
+ case T:
+ nonSkipIndicesList.add(descIndex);
+ templateIndicesList.add(descIndex);
+ break;
+ case S:
+ skipIndicesList.add(descIndex);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unsupported ReadType (" + desc.type + ") encountered by IlluminaRunConfiugration!");
+ }
+ ++descIndex;
+ }
+
+ this.totalCycles = cycles;
+ this.barcodes = new Substructure(barcodeIndicesList, allRanges);
+ this.templates = new Substructure(templateIndicesList, allRanges);
+ this.skips = new Substructure(skipIndicesList, allRanges);
+ this.nonSkips = new Substructure(nonSkipIndicesList, allRanges);
+ }
+
+ /**
+ * Converts readStructureString into a List<ReadDescriptor> and calls the primary constructor using this List as it's argument.
+ * @param readStructureString A string of the format <number of bases><type><number of bases><type>...<number of bases><type> describing
+ * this read structure
+ */
+ public ReadStructure(final String readStructureString) {
+ this(readStructureStringToDescriptors(readStructureString));
+ }
+
+ public int getNumDescriptors() {
+ return descriptors.size();
+ }
+
+ /**
+ * Converts this object into a String using rules complementary to the single string constructor above.
+ * @return A string of the form <number of bases><type><number of bases><type>...<number of bases><type> with one
+ * <number of bases><type> per ReadDescriptor in descriptors.
+ */
+ @Override
+ public String toString() {
+ String out = "";
+ for(final ReadDescriptor rd : descriptors) {
+ out += rd.toString();
+ }
+ return out;
+ }
+
+ /**
+ * Converts readStructureString into a List<ReadDescriptor>
+ * @param readStructure A string of the format <number of bases><type><number of bases><type>...<number of bases><type> describing
+ * a read structure
+ * @return A List<ReadDescriptor> corresponding to the input string
+ */
+ private final static List<ReadDescriptor> readStructureStringToDescriptors(final String readStructure) {
+ final Matcher fullMatcher = FullPattern.matcher(readStructure);
+ if(!fullMatcher.matches()) {
+ throw new IllegalArgumentException(readStructure + " cannot be parsed as a ReadStructure! " + ReadStructureMsg);
+ }
+
+
+ final Matcher subMatcher = SubPattern.matcher(readStructure);
+ final List<ReadDescriptor> descriptors = new ArrayList<ReadDescriptor>();
+ while(subMatcher.find()) {
+ final ReadDescriptor rd = new ReadDescriptor(Integer.parseInt(subMatcher.group(1)), ReadType.valueOf(subMatcher.group(2)));
+ descriptors.add(rd);
+ }
+
+ return descriptors;
+ }
+
+ @Override
+ public boolean equals(final Object thatObj) {
+ if(this == thatObj) return true;
+ if(this.getClass() != thatObj.getClass()) return false;
+
+ final ReadStructure that = (ReadStructure) thatObj;
+ if(this.descriptors.size() != that.descriptors.size()) {
+ return false;
+ }
+
+ for(int i = 0; i < this.descriptors.size(); i++) {
+ if(!this.descriptors.get(i).equals(that.descriptors.get(i))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int res = descriptors.get(0).hashCode();
+ for(int i = 1; i < descriptors.size(); i++) {
+ res *= descriptors.get(i).hashCode();
+ }
+
+ return res;
+ }
+
+ /** Represents a subset of ReadDescriptors in the containing ReadStructure, they ARE NOT necessarily contiguous
+ * in the containing ReadStrucure but they ARE in the order they appear in the containing ReadStructure */
+ public class Substructure implements Iterable<ReadDescriptor> {
+ /** Total number of descriptors == readTypeIndices.length */
+ private final int numDescriptors;
+
+ /** The indices into the ReadStructure for this Substructure */
+ private final int [] descriptorIndices;
+
+ /** The length of each individual ReadDescriptor in this substructure */
+ private final int [] descriptorLengths;
+
+ /** Ranges of cycle indexes (cycle # - 1) covered by each descriptor */
+ private final Range [] cycleIndexRanges;
+
+ /** The total number of cycles covered by this Substructure */
+ private final int totalCycles;
+
+ /**
+ * Indices into the ReadStructure.descriptors for this specific substructure, indices
+ * must be in the order they appear in the descriptors list (but the indices do NOT have to be continuous)
+ * @param descriptorIndices A list of indices into ReadStructure.descriptors of the enclosing ReadStructure
+ * @param allRanges A list of ranges for all reads (not just those in this substructure) in the same order as ReadStructure.descriptors
+ */
+ public Substructure(final List<Integer> descriptorIndices, final List<Range> allRanges) {
+ this.numDescriptors = descriptorIndices.size();
+
+ this.descriptorIndices = new int[numDescriptors];
+ this.descriptorLengths = new int[numDescriptors];
+ for(int i = 0; i < descriptorIndices.size(); i++) {
+ this.descriptorIndices[i] = descriptorIndices.get(i);
+ this.descriptorLengths[i] = descriptors.get(this.descriptorIndices[i]).length;
+ }
+
+ this.cycleIndexRanges = new Range[numDescriptors];
+ for(int i = 0; i < numDescriptors; i++) {
+ this.cycleIndexRanges[i] = allRanges.get(this.descriptorIndices[i]);
+ }
+
+ int totalLength = 0;
+ for(final int length : descriptorLengths) {
+ totalLength += length;
+ }
+ totalCycles = totalLength;
+ }
+
+ public ReadDescriptor get(final int index) {
+ return descriptors.get(descriptorIndices[index]);
+ }
+
+ public boolean isEmpty() {
+ return numDescriptors == 0;
+ }
+
+ public int length() {
+ return numDescriptors;
+ }
+
+ public int getTotalCycles() {
+ return totalCycles;
+ }
+
+ public int [] getIndices() {
+ return descriptorIndices;
+ }
+
+ public int [] getDescriptorLengths() {
+ return descriptorLengths;
+ }
+
+ public Range [] getCycleIndexRanges() {
+ return cycleIndexRanges;
+ }
+ public Iterator<ReadDescriptor> iterator() {
+ return new IndexedIterator(descriptorIndices);
+ }
+
+ public int [] getCycles() {
+ int [] cycles = new int[totalCycles];
+ int cycleIndex = 0;
+ for(final Range range : cycleIndexRanges) {
+ for(int i = range.start; i <= range.end; i++) {
+ cycles[cycleIndex++] = i+1;
+ }
+ }
+ return cycles;
+ }
+
+ /** Create a ReadStructure from this substructure composed of only the descriptors contained in this substructure, Any
+ * ReadDescriptors not in this substructure are treated as if they don't exist (e.g. if you have a readStructure
+ * (36T8S8B36T) and this substructure consists of all the non-skipped reads than toReadStructure would return
+ * (36T8B36T) in ReadStructure form*/
+ public ReadStructure toReadStructure() {
+ final List<ReadDescriptor> descriptors = new ArrayList<ReadDescriptor>(numDescriptors);
+ for(final ReadDescriptor rd : this) {
+ descriptors.add(rd);
+ }
+ return new ReadStructure(descriptors);
+ }
+ }
+
+ /** An iterator over a Substructure's ReadDescriptors */
+ private class IndexedIterator implements Iterator<ReadDescriptor> {
+ private int index;
+ private int [] indices;
+ public IndexedIterator(final int [] indices) {
+ this.indices = indices;
+ this.index = 0;
+ }
+
+ public boolean hasNext() {
+ return index < indices.length;
+ }
+
+ public ReadDescriptor next() {
+ return descriptors.get(indices[index++]);
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/ReadType.java b/src/java/picard/illumina/parser/ReadType.java
new file mode 100644
index 0000000..bd69cd5
--- /dev/null
+++ b/src/java/picard/illumina/parser/ReadType.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+/**
+* A read type describes a stretch of cycles in an ReadStructure
+* (e.g. Assume we have a paired end/barcoded run with the 76 template cycles followed by 8 barcode cycles followed by
+* another 76 template reads, the run would be represented by the ReadStructure 76T8B76T)
+* Note: Currently SKIP is unused by IlluminaBasecallsToSam, ExtractIlluminaBarcodes, and IlluminaDataProvider
+**/
+public enum ReadType {
+ T, B, S;
+
+ public static final ReadType Template = T;
+ public static final ReadType Barcode = B;
+ public static final ReadType Skip = S;
+}
diff --git a/src/java/picard/illumina/parser/Tile.java b/src/java/picard/illumina/parser/Tile.java
new file mode 100644
index 0000000..a08f219
--- /dev/null
+++ b/src/java/picard/illumina/parser/Tile.java
@@ -0,0 +1,119 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CollectionUtil;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+/** Represents a tile from TileMetricsOut.bin. Stores information on location (lane & tile #, density, number of clusters and the
+ * phasing/prephasing values associated with this tile
+ *
+ * @author jgentry
+ */
+public class Tile {
+ private final int lane, tile;
+ private final float density, clusters;
+
+ private final Map<TileTemplateRead, Float> phasingMap;
+ private final Map<TileTemplateRead, Float> prePhasingMap;
+
+ /**
+ * @param tilePhasingValues Either one or two TilePhasingValues, corresponding to the FIRST and potentially SECOND template reads
+ */
+ public Tile(final int lane, final int tile, final float density, final float clusters, final TilePhasingValue... tilePhasingValues) {
+ this.lane = lane;
+ this.tile = tile;
+ this.density = density;
+ this.clusters = clusters;
+
+ final Collection<TilePhasingValue> phasingValues = ensureSoleTilePhasingValuesPerRead(Arrays.asList(tilePhasingValues));
+
+ final Map<TileTemplateRead, Float> phasingMap = new HashMap<TileTemplateRead, Float>();
+ final Map<TileTemplateRead, Float> prePhasingMap = new HashMap<TileTemplateRead, Float>();
+
+ /** For each of the TileReads, assign their phasing & prephasing values to the respective maps, which we will
+ * use later to calculate the medians
+ */
+ for (final TilePhasingValue phasingValue : phasingValues) {
+ phasingMap.put(phasingValue.getTileTemplateRead(), phasingValue.getPhasingValue());
+ prePhasingMap.put(phasingValue.getTileTemplateRead(), phasingValue.getPrePhasingValue());
+ }
+
+ this.phasingMap = Collections.unmodifiableMap(phasingMap);
+ this.prePhasingMap = Collections.unmodifiableMap(prePhasingMap);
+ }
+
+ /** Returns the number of this tile's parent lane. */
+ public int getLaneNumber() {
+ return lane;
+ }
+
+ /** Returns the number/name of this tile. */
+ public int getTileNumber() {
+ return tile;
+ }
+
+ /** Returns the cluster density of this tile, in units of [cluster/mm^2]. */
+ public float getClusterDensity() {
+ return density;
+ }
+
+ /** Returns the number of on this tile. */
+ public float getClusterCount() {
+ return clusters;
+ }
+
+ public Map<TileTemplateRead, Float> getPhasingMap() {
+ return phasingMap;
+ }
+
+ public Map<TileTemplateRead, Float> getPrePhasingMap() {
+ return prePhasingMap;
+ }
+
+ /** For any given TileTemplateRead, we want to make sure that there is only a single TilePhasingValue */
+ private static Collection<TilePhasingValue> ensureSoleTilePhasingValuesPerRead(final Collection<TilePhasingValue> tilePhasingValues) {
+ final Map<TileTemplateRead, Collection<TilePhasingValue>> partitionedMap = CollectionUtil.partition(tilePhasingValues,
+ new CollectionUtil.Partitioner<TilePhasingValue, TileTemplateRead>() {
+ @Override
+ public TileTemplateRead getPartition(final TilePhasingValue phasingValue) {
+ return phasingValue.getTileTemplateRead();
+ }
+ });
+
+ final Collection<TilePhasingValue> newTilePhasingValues = new LinkedList<TilePhasingValue>();
+ for (final TileTemplateRead read : partitionedMap.keySet()) {
+ newTilePhasingValues.add(CollectionUtil.getSoleElement(partitionedMap.get(read)));
+ }
+
+ return newTilePhasingValues;
+ }
+}
diff --git a/src/java/picard/illumina/parser/TileIndex.java b/src/java/picard/illumina/parser/TileIndex.java
new file mode 100644
index 0000000..298d9a1
--- /dev/null
+++ b/src/java/picard/illumina/parser/TileIndex.java
@@ -0,0 +1,170 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Load a file containing 8-byte records like this:
+ * tile number: 4-byte int
+ * number of clusters in tile: 4-byte int
+ * Number of records to read is determined by reaching EOF.
+ */
+public class TileIndex implements Iterable<TileIndex.TileIndexRecord> {
+ private final File tileIndexFile;
+ private final List<TileIndexRecord> tiles = new ArrayList<TileIndexRecord>();
+
+ TileIndex(final File tileIndexFile) {
+ try {
+ this.tileIndexFile = tileIndexFile;
+ final InputStream is = IOUtil.maybeBufferInputStream(new FileInputStream(tileIndexFile));
+ final ByteBuffer buf = ByteBuffer.allocate(8);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ int absoluteRecordIndex = 0;
+ int numTiles = 0;
+ while (readTileIndexRecord(buf.array(), buf.capacity(), is)) {
+ buf.rewind();
+ buf.limit(buf.capacity());
+ final int tile = buf.getInt();
+ // Note: not handling unsigned ints > 2^31, but could if one of these exceptions is thrown.
+ if (tile < 0) throw new PicardException("Tile number too large in " + tileIndexFile.getAbsolutePath());
+ final int numClusters = buf.getInt();
+ if (numClusters < 0) throw new PicardException("Cluster size too large in " + tileIndexFile.getAbsolutePath());
+ tiles.add(new TileIndexRecord(tile, numClusters, absoluteRecordIndex, numTiles++));
+ absoluteRecordIndex += numClusters;
+ }
+ CloserUtil.close(is);
+ } catch (final IOException e) {
+ throw new PicardException("Problem reading " + tileIndexFile.getAbsolutePath(), e);
+ }
+ }
+
+ public File getFile() {
+ return tileIndexFile;
+ }
+
+ public int getNumTiles() {
+ return tiles.size();
+ }
+
+ private boolean readTileIndexRecord(final byte[] buf, final int numBytes, final InputStream is) throws IOException {
+ int totalBytesRead = 0;
+ while (totalBytesRead < numBytes) {
+ final int bytesRead = is.read(buf, totalBytesRead, numBytes - totalBytesRead);
+ if (bytesRead == -1) {
+ if (totalBytesRead != 0) {
+ throw new PicardException(tileIndexFile.getAbsolutePath() + " has incomplete last block");
+ } else return false;
+ }
+ totalBytesRead += bytesRead;
+ }
+ return true;
+ }
+
+ public List<Integer> getTiles() {
+ final List<Integer> ret = new ArrayList<Integer>(tiles.size());
+ for (final TileIndexRecord rec : tiles) ret.add(rec.tile);
+ return ret;
+ }
+
+ public List<String> verify(final List<Integer> expectedTiles) {
+ final Set<Integer> tileSet = new HashSet<Integer>(tiles.size());
+ for (final TileIndexRecord rec : tiles) tileSet.add(rec.tile);
+ final List<String> failures = new LinkedList<String>();
+ for (final int expectedTile : expectedTiles) {
+ if (!tileSet.contains(expectedTile)) {
+ failures.add("Tile " + expectedTile + " not found in " + tileIndexFile.getAbsolutePath());
+ }
+ }
+ return failures;
+ }
+
+ @Override
+ public Iterator<TileIndexRecord> iterator() {
+ return tiles.iterator();
+ }
+
+ /**
+ * @throws java.util.NoSuchElementException if tile is not found
+ */
+ public TileIndexRecord findTile(final int tileNumber) {
+ for (final TileIndexRecord rec : this) {
+ if (rec.tile == tileNumber) return rec;
+ if (rec.tile > tileNumber) {
+ break;
+ }
+ }
+ throw new NoSuchElementException(String.format("Tile %d not found in %s", tileNumber, tileIndexFile));
+ }
+
+ public static class TileIndexRecord {
+ /**
+ * Number of the tile, e.g. 11101. These don't necessarily start at 0, and there may be gaps.
+ */
+ final int tile;
+
+ final int numClustersInTile;
+
+ public int getNumClustersInTile() {
+ return numClustersInTile;
+ }
+
+ public int getZeroBasedTileNumber() {
+ return zeroBasedTileNumber;
+ }
+
+ /**
+ * I.e. the sum of numClustersInTile for all tiles preceding this one.
+ */
+ final int indexOfFirstClusterInTile;
+
+ /**
+ * A contiguous numbering of tiles starting at 0.
+ */
+ final int zeroBasedTileNumber;
+
+ private TileIndexRecord(final int tile, final int numClustersInTile, final int indexOfFirstClusterInTile, final int zeroBasedTileNumber) {
+ this.tile = tile;
+ this.numClustersInTile = numClustersInTile;
+ this.indexOfFirstClusterInTile = indexOfFirstClusterInTile;
+ this.zeroBasedTileNumber = zeroBasedTileNumber;
+ }
+ }
+}
diff --git a/src/java/picard/illumina/parser/TileMetricsUtil.java b/src/java/picard/illumina/parser/TileMetricsUtil.java
new file mode 100644
index 0000000..04af80f
--- /dev/null
+++ b/src/java/picard/illumina/parser/TileMetricsUtil.java
@@ -0,0 +1,161 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IterableAdapter;
+import picard.PicardException;
+import picard.illumina.parser.readers.TileMetricsOutReader;
+import picard.illumina.parser.readers.TileMetricsOutReader.IlluminaTileMetrics;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Utility for reading the tile data from an Illumina run directory's TileMetricsOut.bin file
+ *
+ * @author mccowan
+ */
+public class TileMetricsUtil {
+ /** The path to the directory containing the tile metrics file relative to the basecalling directory. */
+ public static String INTEROP_SUBDIRECTORY_NAME = "InterOp";
+
+ /** The expected name of the tile metrics output file. */
+ public static String TILE_METRICS_OUT_FILE_NAME = "TileMetricsOut.bin";
+
+ /** Returns the path to the TileMetrics file given the basecalling directory. */
+ public static File renderTileMetricsFileFromBasecallingDirectory(final File illuminaRunDirectory) {
+ return new File(new File(illuminaRunDirectory, INTEROP_SUBDIRECTORY_NAME), TILE_METRICS_OUT_FILE_NAME);
+ }
+
+ /**
+ * Returns an unmodifiable collection of tile data read from the provided file. For each tile we will extract:
+ * - lane number
+ * - tile number
+ * - density
+ * - cluster ID
+ * - Phasing & Prephasing for first template read (if available)
+ * - Phasing & Prephasing for second template read (if available)
+ */
+ public static Collection<Tile> parseTileMetrics(final File tileMetricsOutFile, final ReadStructure readStructure) throws FileNotFoundException {
+ // Get the tile metrics lines from TileMetricsOut, keeping only the last value for any Lane/Tile/Code combination
+ final Collection<IlluminaTileMetrics> tileMetrics = determineLastValueForLaneTileMetricsCode(new TileMetricsOutReader
+ (tileMetricsOutFile));
+
+ // Collect the tiles by lane & tile, and then collect the metrics by lane
+ final Map<String, Collection<IlluminaTileMetrics>> locationToMetricsMap = partitionTileMetricsByLocation(tileMetrics);
+ final Collection<Tile> tiles = new LinkedList<Tile>();
+ for (final Map.Entry<String, Collection<IlluminaTileMetrics>> entry : locationToMetricsMap.entrySet()) {
+ final Collection<IlluminaTileMetrics> tileRecords = entry.getValue();
+
+ // Get a mapping from metric code number to the corresponding IlluminaTileMetrics
+ final Map<Integer, Collection<IlluminaTileMetrics>> codeMetricsMap = partitionTileMetricsByCode(tileRecords);
+
+ final Set<Integer> observedCodes = codeMetricsMap.keySet();
+ if (!(observedCodes.contains(IlluminaMetricsCode.DENSITY_ID.getMetricsCode()) && observedCodes.contains(IlluminaMetricsCode.CLUSTER_ID.getMetricsCode())))
+ throw new PicardException(String.format("Expected to find cluster and density record codes (%s and %s) in records read for tile location %s (lane:tile), but found only %s.",
+ IlluminaMetricsCode.CLUSTER_ID.getMetricsCode(), IlluminaMetricsCode.DENSITY_ID.getMetricsCode(), entry.getKey(), observedCodes));
+
+ final IlluminaTileMetrics densityRecord = CollectionUtil.getSoleElement(codeMetricsMap.get(IlluminaMetricsCode.DENSITY_ID.getMetricsCode()));
+ final IlluminaTileMetrics clusterRecord = CollectionUtil.getSoleElement(codeMetricsMap.get(IlluminaMetricsCode.CLUSTER_ID.getMetricsCode()));
+
+ // Snag the phasing data for each read in the read structure. For both types of phasing values, this is the median of all of the individual values seen
+ final Collection<TilePhasingValue> tilePhasingValues = getTilePhasingValues(codeMetricsMap, readStructure);
+
+ tiles.add(new Tile(densityRecord.getLaneNumber(), densityRecord.getTileNumber(), densityRecord.getMetricValue(), clusterRecord.getMetricValue(),
+ tilePhasingValues.toArray(new TilePhasingValue[tilePhasingValues.size()])));
+ }
+
+ return Collections.unmodifiableCollection(tiles);
+ }
+
+ /** Pulls out the phasing & prephasing value for the template reads and returns a collection of TilePhasingValues representing these */
+ private static Collection<TilePhasingValue> getTilePhasingValues(final Map<Integer, Collection<IlluminaTileMetrics>> codeMetricsMap, final ReadStructure readStructure) {
+ boolean isFirstRead = true;
+ final Collection<TilePhasingValue> tilePhasingValues = new ArrayList<TilePhasingValue>();
+ for (int descriptorIndex = 0; descriptorIndex < readStructure.descriptors.size(); descriptorIndex++) {
+ if (readStructure.descriptors.get(descriptorIndex).type == ReadType.Template) {
+ final TileTemplateRead tileTemplateRead = isFirstRead ? TileTemplateRead.FIRST : TileTemplateRead.SECOND;
+ // For both phasing & prephasing, pull out the value and create a TilePhasingValue for further processing
+ final int phasingCode = IlluminaMetricsCode.getPhasingCode(descriptorIndex, IlluminaMetricsCode.PHASING_BASE);
+ final int prePhasingCode = IlluminaMetricsCode.getPhasingCode(descriptorIndex, IlluminaMetricsCode.PREPHASING_BASE);
+
+ if (!(codeMetricsMap.containsKey(phasingCode) && codeMetricsMap.containsKey(prePhasingCode))) {
+ throw new PicardException("Don't have both phasing and prephasing values for tile");
+ }
+
+ tilePhasingValues.add(new TilePhasingValue(tileTemplateRead,
+ CollectionUtil.getSoleElement(codeMetricsMap.get(phasingCode)).getMetricValue(),
+ CollectionUtil.getSoleElement(codeMetricsMap.get(prePhasingCode)).getMetricValue()));
+ isFirstRead = false;
+ }
+ }
+
+ return tilePhasingValues;
+ }
+
+ /** According to Illumina, for every lane/tile/code combination they will only use the last value. Filter out the previous values */
+ private static Collection<IlluminaTileMetrics> determineLastValueForLaneTileMetricsCode(final Iterator<IlluminaTileMetrics>
+ tileMetricsIterator) {
+ final Map<TileMetricsOutReader.IlluminaLaneTileCode, IlluminaTileMetrics> filteredTileMetrics = new HashMap<TileMetricsOutReader.IlluminaLaneTileCode, IlluminaTileMetrics>();
+ for (final IlluminaTileMetrics illuminaTileMetrics : new IterableAdapter<IlluminaTileMetrics>(tileMetricsIterator)) {
+ filteredTileMetrics.put(illuminaTileMetrics.getLaneTileCode(), illuminaTileMetrics);
+ }
+
+ return filteredTileMetrics.values();
+ }
+
+ private static String renderMetricLocationKey(final IlluminaTileMetrics metric) {
+ return String.format("%s:%s", metric.getLaneNumber(), metric.getTileNumber());
+ }
+
+ // Wrapper around CollectionUtil.Partitioner, purely to de-bulk the actual methods
+ private static Map<Integer, Collection<IlluminaTileMetrics>> partitionTileMetricsByCode(final Collection<IlluminaTileMetrics> tileMetrics) {
+ return CollectionUtil.partition(tileMetrics, new CollectionUtil.Partitioner<IlluminaTileMetrics, Integer>() {
+ @Override
+ public Integer getPartition(final IlluminaTileMetrics metric) {
+ return metric.getMetricCode();
+ }
+ });
+ }
+
+ // Wrapper around CollectionUtil.Partitioner, purely to de-bulk the actual methods
+ private static Map<String, Collection<IlluminaTileMetrics>> partitionTileMetricsByLocation(final Collection<IlluminaTileMetrics> tileMetrics) {
+ return CollectionUtil.partition(tileMetrics, new CollectionUtil.Partitioner<IlluminaTileMetrics, String>() {
+ @Override
+ public String getPartition(final IlluminaTileMetrics metric) {
+ return renderMetricLocationKey(metric);
+ }
+ });
+ }
+}
diff --git a/src/java/picard/illumina/parser/TilePhasingValue.java b/src/java/picard/illumina/parser/TilePhasingValue.java
new file mode 100644
index 0000000..3ab1461
--- /dev/null
+++ b/src/java/picard/illumina/parser/TilePhasingValue.java
@@ -0,0 +1,30 @@
+package picard.illumina.parser;
+
+/**
+ * Captures information about a phasing value - Which read it corresponds to, which phasing type and a median value
+ *
+ * @author jgentry
+ */
+public class TilePhasingValue {
+ private final TileTemplateRead tileTemplateRead;
+ private final float phasingValue;
+ private final float prePhasingValue;
+
+ public TilePhasingValue(final TileTemplateRead tileTemplateRead, final float phasingValue, final float prePhasingValue) {
+ this.tileTemplateRead = tileTemplateRead;
+ this.phasingValue = phasingValue;
+ this.prePhasingValue = prePhasingValue;
+ }
+
+ public TileTemplateRead getTileTemplateRead() {
+ return tileTemplateRead;
+ }
+
+ public float getPhasingValue() {
+ return phasingValue;
+ }
+
+ public float getPrePhasingValue() {
+ return prePhasingValue;
+ }
+}
diff --git a/src/java/picard/illumina/parser/TileTemplateRead.java b/src/java/picard/illumina/parser/TileTemplateRead.java
new file mode 100644
index 0000000..501d8f6
--- /dev/null
+++ b/src/java/picard/illumina/parser/TileTemplateRead.java
@@ -0,0 +1,32 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.illumina.parser;
+
+/** Defines the first or second template read for a tile
+ * @author jgentry
+ */
+public enum TileTemplateRead {
+ FIRST, SECOND
+}
diff --git a/src/java/picard/illumina/parser/fakers/BarcodeFileFaker.java b/src/java/picard/illumina/parser/fakers/BarcodeFileFaker.java
new file mode 100644
index 0000000..4b8aacf
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/BarcodeFileFaker.java
@@ -0,0 +1,25 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by jcarey on 3/13/14.
+ */
+public class BarcodeFileFaker extends FileFaker {
+ private final String barcodeString = "1\tn\t \n";
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ buffer.put(barcodeString.getBytes());
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return barcodeString.getBytes().length;
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/BciFileFaker.java b/src/java/picard/illumina/parser/fakers/BciFileFaker.java
new file mode 100644
index 0000000..e297481
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/BciFileFaker.java
@@ -0,0 +1,52 @@
+package picard.illumina.parser.fakers;
+
+import htsjdk.samtools.util.CloserUtil;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+import java.util.List;
+
+/**
+ * Created by jcarey on 3/14/14.
+ */
+public class BciFileFaker extends FileFaker {
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ for (final Integer tile : tiles) {
+ buffer.putInt(tile);
+ buffer.putInt(1);
+ }
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return 8 * tiles.size();
+ }
+
+ public void fakeBciFile(final File bci, final List<Integer> expectedTiles) throws IOException {
+ tiles = expectedTiles;
+ final FileOutputStream fileOutputStream = new FileOutputStream(bci);
+ final FileChannel channel = fileOutputStream.getChannel();
+ final ByteBuffer buffer = ByteBuffer.allocate(8 * expectedTiles.size());
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+
+ fakeFile(buffer);
+ buffer.flip();
+
+ channel.write(buffer);
+ channel.force(true);
+
+ CloserUtil.close(channel);
+ CloserUtil.close(fileOutputStream);
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/BclFileFaker.java b/src/java/picard/illumina/parser/fakers/BclFileFaker.java
new file mode 100644
index 0000000..a54a42f
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/BclFileFaker.java
@@ -0,0 +1,30 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+public class BclFileFaker extends FileFaker {
+
+ @Override
+ public void fakeFile(final ByteBuffer buffer) {
+
+ // Write the number of elements to the header. The state variable "size" contains
+ // the number of elements; we've allocated "size" plus the size of the header
+ // (four bytes) to the buffer.
+ buffer.putInt(size);
+
+ while (size > 0) {
+ // Fill the file with no calls
+ buffer.put((byte) 0);
+ size--;
+ }
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ protected int bufferSize() {
+ return size + 4;
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/ClocsFileFaker.java b/src/java/picard/illumina/parser/fakers/ClocsFileFaker.java
new file mode 100644
index 0000000..9855bd0
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/ClocsFileFaker.java
@@ -0,0 +1,25 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+public class ClocsFileFaker extends FileFaker {
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ buffer.put((byte) 1);
+ buffer.putInt(1);
+ buffer.put((byte) (0xff & 1));
+ buffer.put((byte) (0xff & 5));
+ buffer.put((byte) (0xff & 5));
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return Integer.SIZE + (Byte.SIZE * 4);
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/FileFaker.java b/src/java/picard/illumina/parser/fakers/FileFaker.java
new file mode 100644
index 0000000..ead0a57
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/FileFaker.java
@@ -0,0 +1,79 @@
+package picard.illumina.parser.fakers;
+
+import htsjdk.samtools.util.BlockCompressedOutputStream;
+import picard.illumina.parser.readers.BclReader;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.Channels;
+import java.nio.channels.WritableByteChannel;
+import java.util.Collections;
+import java.util.List;
+import java.util.zip.GZIPOutputStream;
+
+public abstract class FileFaker {
+
+ int size;
+ List<Integer> tiles;
+
+ protected abstract void fakeFile(ByteBuffer buffer);
+
+ protected abstract boolean addLeadingZeros();
+
+ protected abstract int bufferSize();
+
+ public void fakeFile(final File base, final int tile, final int lane, final String extension) throws IOException {
+ fakeFile(base, Collections.singletonList(tile), lane, extension);
+ }
+
+ public void fakeFile(final File base, final List<Integer> expectedTiles, final int lane, final String extension)
+ throws IOException {
+ if (base.exists() || base.mkdirs()) {
+ this.tiles = expectedTiles;
+ final File fakeFile;
+ if (expectedTiles.size() == 1) {
+ String longTileName = String.valueOf(tiles.get(0));
+ if (addLeadingZeros()) {
+ while (longTileName.length() < 4) {
+ longTileName = "0" + longTileName;
+ }
+ }
+ fakeFile = new File(base, String.format("s_%d_%s%s", lane, longTileName, extension));
+ } else {
+ fakeFile = new File(base, String.format("s_%s%s", lane, extension));
+ }
+
+ fakeFile(fakeFile, bufferSize());
+ }
+
+ }
+
+ public void fakeFile(final File cycleFile, Integer size) throws IOException {
+ if (size == null) {
+ size = 1;
+ }
+ this.size = size;
+
+ final OutputStream outputStream;
+ if (BclReader.isGzipped(cycleFile)) outputStream = new GZIPOutputStream(new FileOutputStream(cycleFile));
+ else if (BclReader.isBlockGzipped(cycleFile)) outputStream = new BlockCompressedOutputStream(cycleFile);
+ else outputStream = new FileOutputStream(cycleFile);
+
+ final WritableByteChannel channel = Channels.newChannel(outputStream);
+ final ByteBuffer buffer = ByteBuffer.allocate(this.bufferSize());
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+
+ fakeFile(buffer);
+
+ buffer.flip();
+
+ channel.write(buffer);
+
+ channel.close();
+ outputStream.close();
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/FilterFileFaker.java b/src/java/picard/illumina/parser/fakers/FilterFileFaker.java
new file mode 100644
index 0000000..94cd341
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/FilterFileFaker.java
@@ -0,0 +1,34 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by jcarey on 3/13/14.
+ *
+ * Illumina uses an algorithm described in "Theory of RTA" that determines whether or not a cluster passes filter("PF") or not.
+ * These values are written as sequential bytes to Filter Files. The structure of a filter file is as follows:
+ * Bytes 0-3 : 0
+ * Bytes 4-7 : unsigned int version
+ * Bytes 8-11 : unsigned int numClusters
+ * Bytes 12...: boolean encoded in a byte representing whether the cluster passing or failing.
+ */
+public class FilterFileFaker extends FileFaker {
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ buffer.putInt(0); // 0
+ buffer.putInt(3); // Version number
+ buffer.putInt(1); // Number of clusters
+ buffer.put((byte) 0); // Byte representing a cluster failing filter(not a PF read)
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return true;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return Integer.SIZE * 3;
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/LocsFileFaker.java b/src/java/picard/illumina/parser/fakers/LocsFileFaker.java
new file mode 100644
index 0000000..be4f5f5
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/LocsFileFaker.java
@@ -0,0 +1,28 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by jcarey on 3/13/14.
+ */
+public class LocsFileFaker extends FileFaker {
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ buffer.putInt(1);
+ buffer.putFloat(1.0f);
+ buffer.putInt(1);
+ buffer.putFloat(5.0f);
+ buffer.putFloat(5.0f);
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return (Integer.SIZE * 2) + (Float.SIZE * 3);
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/MultiTileBclFileFaker.java b/src/java/picard/illumina/parser/fakers/MultiTileBclFileFaker.java
new file mode 100644
index 0000000..c4b7cee
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/MultiTileBclFileFaker.java
@@ -0,0 +1,32 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by jcarey on 3/13/14.
+ */
+public class MultiTileBclFileFaker extends FileFaker {
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ buffer.putInt(1);
+ for (final Integer tile : tiles) {
+ long perTileSize = size;
+ while (perTileSize > 0) {
+ //fill the file with no calls
+ buffer.put((byte) 0);
+ perTileSize--;
+ }
+ }
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return ((size - Integer.SIZE) * tiles.size()) + Integer.SIZE;
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/MultiTileLocsFileFaker.java b/src/java/picard/illumina/parser/fakers/MultiTileLocsFileFaker.java
new file mode 100644
index 0000000..5ba7ef9
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/MultiTileLocsFileFaker.java
@@ -0,0 +1,30 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by jcarey on 3/13/14.
+ */
+public class MultiTileLocsFileFaker extends FileFaker {
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ buffer.putInt(1);
+ buffer.putFloat(1.0f);
+ buffer.putInt(1);
+ for (int count = 0; count < tiles.size(); count++) {
+ buffer.putFloat(5.0f + (count * 0.5f));
+ buffer.putFloat(5.0f + (count * 0.5f));
+ }
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return (Integer.SIZE * 2) + (Float.SIZE * tiles.size()) + Float.SIZE;
+ }
+}
diff --git a/src/java/picard/illumina/parser/fakers/PosFileFaker.java b/src/java/picard/illumina/parser/fakers/PosFileFaker.java
new file mode 100644
index 0000000..d3c449e
--- /dev/null
+++ b/src/java/picard/illumina/parser/fakers/PosFileFaker.java
@@ -0,0 +1,25 @@
+package picard.illumina.parser.fakers;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by jcarey on 3/13/14.
+ */
+public class PosFileFaker extends FileFaker {
+ private final String posFileString = "102.0\t303.3\n";
+
+ @Override
+ protected void fakeFile(final ByteBuffer buffer) {
+ buffer.put(posFileString.getBytes());
+ }
+
+ @Override
+ protected boolean addLeadingZeros() {
+ return false;
+ }
+
+ @Override
+ protected int bufferSize() {
+ return posFileString.getBytes().length;
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/AbstractIlluminaPositionFileReader.java b/src/java/picard/illumina/parser/readers/AbstractIlluminaPositionFileReader.java
new file mode 100644
index 0000000..7068a36
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/AbstractIlluminaPositionFileReader.java
@@ -0,0 +1,177 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser.readers;
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.PicardException;
+
+import java.io.File;
+import java.util.NoSuchElementException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * The position files of Illumina are nearly the same form: Pos files consist of text based tabbed
+ * x-y coordinate float pairs, locs files are binary x-y float pairs, clocs are compressed binary
+ * x-y float pairs. Each of these file types we read sequentially and are really concerned with
+ * iterating over the coordinates and returning them as as they would appear in a QSeq file.
+ * Therefore, this abstract base class provides the basic functionality for iterating over
+ * the values found in these files and converting them into qseq style coordinates.
+ *
+ * Currently these readers also return lane/tile but this will be unnecessary in future releases.
+ */
+
+public abstract class AbstractIlluminaPositionFileReader implements CloseableIterator<AbstractIlluminaPositionFileReader.PositionInfo> {
+ public static final float MAX_POS = 9999999.99f;
+
+ /**
+ * At least one NextSeq run produced a small negative value for y coordinate (-5), so allow small
+ * negative values and see what happens.
+ */
+ public static final float MIN_POS = -10.0f;
+
+ public class PositionInfo {
+ /** The x-position as it occurs in the file being read */
+ public final float xPos;
+
+ /** The y-position as it occurs in the file being read*/
+ public final float yPos;
+
+ /** The lane, which is determined from the file name*/
+ public final int lane;
+
+ /** The tile, which is determined from the file name*/
+ public final int tile;
+
+ /** The QSeq style x-coordinat, an integer = Math.round(xPos*10 + 1000)*/
+ public final int xQseqCoord;
+
+ /** The QSeq style y-coordinates, an integer = Math.round(yPos*10 + 1000)*/
+ public final int yQseqCoord;
+
+ public PositionInfo(final float x, final float y, final int lane, final int tile) {
+ if(x < MIN_POS || y < MIN_POS || x > MAX_POS || y > MAX_POS) {
+
+ throw new IllegalArgumentException(
+ String.format("Cluster location not in the range %f..%f. x: %f; y: %f; lane: %d; tile: %d",
+ MIN_POS, MAX_POS, x, y, lane, tile));
+ }
+
+ this.xPos = x;
+ this.yPos = y;
+ this.xQseqCoord = posToQSeqCoord(x);
+ this.yQseqCoord = posToQSeqCoord(y);
+ this.lane = lane;
+ this.tile = tile;
+ }
+
+ /** Convert a value in float form as it occurs in pos,locs,and clocs files into integer as it is found in QSeqs */
+ private int posToQSeqCoord(final float pos) {
+ return Math.round(pos * 10 + 1000);
+ }
+
+ public boolean equals(final Object other) {
+ if(other == null || other.getClass() != AbstractIlluminaPositionFileReader.PositionInfo.class) {
+ return false;
+ }
+ if(other == this) return true;
+ final PositionInfo otherPi = (PositionInfo) other;
+ return this.xPos == otherPi.xPos && this.yPos == otherPi.yPos &&
+ this.lane == otherPi.lane && this.tile == otherPi.tile &&
+ this.xQseqCoord == otherPi.xQseqCoord && this.yQseqCoord == otherPi.yQseqCoord;
+ }
+ }
+
+ //Note: Perhaps use the IlluminaFileUtil to do this part
+ private static final Pattern FileNamePattern = Pattern.compile("^s_(\\d+)_(\\d+)(_pos\\.txt|\\.locs|\\.clocs|_pos\\.txt.gz|_pos\\.txt.bz2)$");
+
+ private final File file;
+ private final int lane;
+ private final int tile;
+
+ public AbstractIlluminaPositionFileReader(final File file) {
+ this.file = file;
+
+ final int [] laneAndTile = fileNameToLaneAndTile(file.getName());
+ lane = laneAndTile[0];
+ tile = laneAndTile[1];
+ }
+
+ /**
+ * Use this ctor if lane and tile are not discernible from file name.
+ * @param file
+ * @param lane
+ * @param tile
+ */
+ public AbstractIlluminaPositionFileReader(final File file, final int lane, final int tile) {
+ this.file = file;
+ this.lane = lane;
+ this.tile = tile;
+ }
+
+ public int getTile() {
+ return tile;
+ }
+
+ public int getLane() {
+ return lane;
+ }
+
+ public File getFile() {
+ return file;
+ }
+
+ /** Extract the lane/tile from the given filename **/
+ private int [] fileNameToLaneAndTile(final String fileName) {
+ final String [] tokens = fileName.split(File.pathSeparator);
+ final Matcher matcher = FileNamePattern.matcher(tokens[tokens.length - 1]);
+ if(!matcher.matches()) {
+ throw new PicardException("File name not of the right structure: <filePath>/s_<lane>_<tile>(_pos.txt|_pos.txt.gz|_pos.txt.bz2.locs|.clocs). File name (" + fileName + ")");
+ }
+
+ return new int[]{Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))};
+ }
+
+ /** Return the next set of coordinates in a given file. **/
+ public final PositionInfo next() {
+ if(! hasNext()) {
+ throw new NoSuchElementException("No such cluster, cluster count(" + makeExceptionMsg() +")");
+ }
+ return unsafeNextInfo();
+ }
+
+ /** Returns the next position info. Implementations of this method do not need to call hasNext since
+ * it is called in next() */
+ protected abstract PositionInfo unsafeNextInfo();
+
+ /** Create a string that will be included in any NoSuchElementException thrown by the next() method */
+ protected abstract String makeExceptionMsg();
+
+ /** Return true if the file has more elements to return, false otherwise */
+ public abstract boolean hasNext();
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/BarcodeFileReader.java b/src/java/picard/illumina/parser/readers/BarcodeFileReader.java
new file mode 100644
index 0000000..55be293
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/BarcodeFileReader.java
@@ -0,0 +1,52 @@
+package picard.illumina.parser.readers;
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.util.BasicInputParser;
+
+import java.io.File;
+
+/**
+ * Reads a single barcode file line by line and returns the barcode if there was a match or NULL otherwise.
+ *
+ * Barcode.txt file Format (consists of tab delimited columns, 1 record per row)
+ * sequence_read Matched(Y/N) BarcodeSequenceMatched
+ *
+ * sequence read - the actual bases at barcode position
+ * Matched(y/n) - Y or N indicating if there was a barcode match
+ * BarcodeSequenceMatched - matched barcode sequence (empty if read did not match one of the barcodes).
+ */
+public class BarcodeFileReader implements CloseableIterator<String> {
+ private static final int Y_OR_N_COLUMN = 1;
+ private static final int BARCODE_COLUMN = 2;
+ private final BasicInputParser textIterator;
+
+ public BarcodeFileReader(final File barcodeFile) {
+ this.textIterator = new BasicInputParser(false, barcodeFile);
+ }
+
+ @Override
+ public String next() {
+ final String [] fields = textIterator.next();
+ final String barcode;
+ if (fields[Y_OR_N_COLUMN].equals("Y")) {
+ barcode = fields[BARCODE_COLUMN];
+ } else {
+ barcode = null;
+ }
+
+ return barcode;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return textIterator.hasNext();
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("Remove is not supported by " + BarcodeFileReader.class.getName());
+ }
+
+ public void close() {
+ textIterator.close();
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/BclIndexReader.java b/src/java/picard/illumina/parser/readers/BclIndexReader.java
new file mode 100644
index 0000000..665b576
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/BclIndexReader.java
@@ -0,0 +1,75 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser.readers;
+
+import picard.PicardException;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+
+/**
+ * Annoyingly, there are two different files with extension .bci in NextSeq output. This reader handles
+ * the file that contains virtual file pointers into a .bcl.bgzf file. After the header, there is a 64-bit record
+ * per tile.
+ */
+public class BclIndexReader {
+ private static final int BCI_HEADER_SIZE = 8;
+ private static final int BCI_VERSION = 0;
+
+ private final BinaryFileIterator<Long> bciIterator;
+ private final int numTiles;
+ private final File bciFile;
+ private int nextRecordNumber = 0;
+
+ public BclIndexReader(final File bclFile) {
+ bciFile = new File(bclFile.getAbsolutePath() + ".bci");
+ bciIterator = MMapBackedIteratorFactory.getLongIterator(BCI_HEADER_SIZE, bciFile);
+ final ByteBuffer headerBytes = bciIterator.getHeaderBytes();
+ final int actualVersion = headerBytes.getInt();
+ if (actualVersion != BCI_VERSION) {
+ throw new PicardException(String.format("Unexpected version number %d in %s", actualVersion, bciFile.getAbsolutePath()));
+ }
+ numTiles = headerBytes.getInt();
+ }
+
+ public int getNumTiles() {
+ return numTiles;
+ }
+
+ public long get(final int recordNumber) {
+ if (recordNumber < nextRecordNumber) {
+ throw new IllegalArgumentException("Can only read forward");
+ }
+ if (recordNumber > nextRecordNumber) {
+ bciIterator.skipElements(recordNumber - nextRecordNumber);
+ nextRecordNumber = recordNumber;
+ }
+ ++nextRecordNumber;
+ return bciIterator.getElement();
+ }
+
+ public File getBciFile() {
+ return bciFile;
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/BclQualityEvaluationStrategy.java b/src/java/picard/illumina/parser/readers/BclQualityEvaluationStrategy.java
new file mode 100644
index 0000000..dfc8608
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/BclQualityEvaluationStrategy.java
@@ -0,0 +1,99 @@
+package picard.illumina.parser.readers;
+
+import htsjdk.samtools.util.CollectionUtil;
+import picard.PicardException;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Describes a mechanism for revising and evaluating qualities read from a BCL file. This class accumulates observations about low quality
+ * scores that it evaluates, so distinct instances should be used for unrelated sets of BCL readers.
+ *
+ * The mechanism for revising qualities is not configurable. The qualities that are less than 1 are revised to 1, and other qualities are
+ * not affected.
+ *
+ * This class is thread-safe and a single instance can and should be passed to {@link BclReader}s running in separate threads.
+ *
+ * To replicate the functionality of {@link BclReader}s prior to the introduction of this class, create a single instance passing
+ * {@link #ILLUMINA_ALLEGED_MINIMUM_QUALITY} to the constructor, and then call {@link #assertMinimumQualities()} once the readers finish
+ * their work.
+ *
+ * @author mccowan
+ */
+public class BclQualityEvaluationStrategy {
+ public static final int ILLUMINA_ALLEGED_MINIMUM_QUALITY = 2;
+ private final int minimumRevisedQuality;
+ /** A thread-safe defaulting map that injects an AtomicInteger starting at 0 when a uninitialized key is get-ted. */
+ private Map<Byte, AtomicInteger> qualityCountMap = Collections.synchronizedMap(new CollectionUtil.DefaultingMap<Byte, AtomicInteger>(
+ new CollectionUtil.DefaultingMap.Factory<AtomicInteger, Byte>() {
+ @Override
+ public AtomicInteger make(final Byte _) {
+ return new AtomicInteger(0);
+ }
+ }, true));
+
+ /**
+ * @param minimumRevisedQuality The minimum quality that should be seen from revised qualities; controls whether or not an exception
+ * is thrown when calling {@link #assertMinimumQualities()}
+ */
+ public BclQualityEvaluationStrategy(final int minimumRevisedQuality) {
+ this.minimumRevisedQuality = minimumRevisedQuality;
+ }
+
+ /** The rule used to revise quality scores, which is: if it's less than 1, make it 1. */
+ private static byte generateRevisedQuality(final byte quality) { return (byte) Math.max(quality, 1); }
+
+ /**
+ * Accepts a quality read from a BCL file and (1) returns a 1 if the value was 0 and (2) makes a note of the provided quality if it is
+ * low. Because of (2) each record's quality should be passed only once to this method, otherwise it will be observed multiple times.
+ *
+ * @param quality The quality score read from the BCL
+ * @return The revised new quality score
+ */
+ public byte reviseAndConditionallyLogQuality(final byte quality) {
+ final byte revisedQuality = generateRevisedQuality(quality);
+ if (quality < ILLUMINA_ALLEGED_MINIMUM_QUALITY) {
+ qualityCountMap.get(quality).incrementAndGet();
+ }
+ return revisedQuality;
+ }
+
+ /**
+ * Reviews the qualities observed thus far and throws an exception if any are below the minimum quality threshold.
+ */
+ public void assertMinimumQualities() {
+ final Collection<String> errorTokens = new LinkedList<String>();
+ for (final Map.Entry<Byte, AtomicInteger> entry : this.qualityCountMap.entrySet()) {
+ /**
+ * We're comparing revised qualities here, not observed, but the qualities that are logged in qualityCountMap are observed
+ * qualities. So as we iterate through it, convert observed qualities into their revised value.
+ */
+ if (generateRevisedQuality(entry.getKey()) < minimumRevisedQuality) {
+ errorTokens.add(String.format("quality %s observed %s times", entry.getKey(), entry.getValue()));
+ }
+ }
+ if (!errorTokens.isEmpty()) {
+ throw new PicardException(String.format(
+ "Found BCL qualities that fell beneath minimum threshold of %s: %s.",
+ minimumRevisedQuality,
+ CollectionUtil.join(errorTokens, "; ")
+ ));
+ }
+ }
+
+ /**
+ * Returns a view of number of qualities that failed, where the key is the quality score and the value is the number of observations.
+ */
+ public Map<Byte, Integer> getPoorQualityFrequencies() {
+ final Map<Byte, Integer> qualityCountMapCopy = new HashMap<Byte, Integer>();
+ for (final Map.Entry<Byte, AtomicInteger> entry : qualityCountMap.entrySet()) {
+ qualityCountMapCopy.put(entry.getKey(), entry.getValue().intValue());
+ }
+ return Collections.unmodifiableMap(qualityCountMapCopy);
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/BclReader.java b/src/java/picard/illumina/parser/readers/BclReader.java
new file mode 100644
index 0000000..777a565
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/BclReader.java
@@ -0,0 +1,357 @@
+/*
+* The MIT License
+*
+* Copyright (c) 2012 The Broad Institute
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+* THE SOFTWARE.
+*/
+package picard.illumina.parser.readers;
+
+import htsjdk.samtools.Defaults;
+import htsjdk.samtools.util.BlockCompressedInputStream;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.RuntimeIOException;
+import picard.PicardException;
+import picard.illumina.parser.BclData;
+import picard.illumina.parser.TileIndex;
+import picard.util.UnsignedTypeUtil;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.List;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * BCL Files are base call and quality score binary files containing a (base,quality) pair for successive clusters.
+ * The file is structured as followed:
+ * Bytes 1-4 : unsigned int numClusters
+ * Bytes 5-numClusters + 5 : 1 byte base/quality score
+ * <p/>
+ * The base/quality scores are organized as follows (with one exception, SEE BELOW):
+ * The right 2 most bits (these are the LEAST significant bits) indicate the base, where
+ * A=00(0x00), C=01(0x01), G=10(0x02), and T=11(0x03)
+ * <p/>
+ * The remaining bytes compose the quality score which is an unsigned int.
+ * <p/>
+ * EXCEPTION: If a byte is entirely 0 (e.g. byteRead == 0) then it is a no call, the base
+ * becomes '.' and the Quality becomes 2, the default illumina masking value
+ * <p/>
+ * (E.g. if we get a value in binary of 10001011 it gets transformed as follows:
+ * <p/>
+ * Value read: 10001011(0x8B)
+ * <p/>
+ * Quality Base
+ * <p/>
+ * 100010 11
+ * 00100010 0x03
+ * 0x22 T
+ * 34 T
+ * <p/>
+ * So the output base/quality will be a (T/34)
+ */
+public class BclReader implements CloseableIterator<BclData> {
+ private static final byte BASE_MASK = 0x0003;
+ private static final int HEADER_SIZE = 4;
+ private static final byte[] BASE_LOOKUP = new byte[]{'A', 'C', 'G', 'T'};
+
+ private final InputStream[] streams;
+ private final File[] streamFiles;
+ private final int[] outputLengths;
+ int[] numClustersPerCycle;
+
+ private final BclQualityEvaluationStrategy bclQualityEvaluationStrategy;
+ private BclData queue = null;
+
+ public BclReader(final List<File> bclsForOneTile, final int[] outputLengths,
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy, final boolean seekable) {
+ try {
+ this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
+ this.outputLengths = outputLengths;
+
+ int cycles = 0;
+ for (final int outputLength : outputLengths) {
+ cycles += outputLength;
+ }
+ this.streams = new InputStream[cycles];
+ this.streamFiles = new File[cycles];
+ this.numClustersPerCycle = new int[cycles];
+
+ final ByteBuffer byteBuffer = ByteBuffer.allocate(HEADER_SIZE);
+ byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+ for (int i = 0; i < cycles; ++i) {
+ final File bclFile = bclsForOneTile.get(i);
+ if (bclFile == null) {
+ close();
+ throw new RuntimeIOException(String.format("Could not find BCL file for cycle %d", i));
+ }
+ final String filePath = bclFile.getName();
+ final boolean isGzip = filePath.endsWith(".gz");
+ final boolean isBgzf = filePath.endsWith(".bgzf");
+ final InputStream stream = open(bclFile, seekable, isGzip, isBgzf);
+ final int read = stream.read(byteBuffer.array());
+ if (read != HEADER_SIZE) {
+ close();
+ throw new RuntimeIOException(String.format("BCL %s has invalid header structure.", bclFile.getAbsoluteFile()));
+ }
+ numClustersPerCycle[i] = byteBuffer.getInt();
+ if (!isBgzf && !isGzip) {
+ assertProperFileStructure(bclFile, numClustersPerCycle[i], stream);
+ }
+ this.streams[i] = stream;
+ this.streamFiles[i] = bclFile;
+ byteBuffer.clear();
+ }
+ } catch (final IOException ioe) {
+ throw new RuntimeIOException(ioe);
+ }
+ }
+
+ public static boolean isGzipped(final File file) {
+ return file.getAbsolutePath().endsWith(".gz");
+ }
+
+ public static boolean isBlockGzipped(final File file) {
+ return file.getAbsolutePath().endsWith(".bgzf");
+ }
+
+ public static long getNumberOfClusters(final File file) {
+ InputStream stream = null;
+ try {
+ if (isBlockGzipped(file)) stream = new BlockCompressedInputStream(IOUtil.maybeBufferedSeekableStream(file));
+ else if (isGzipped(file)) stream = new GZIPInputStream(IOUtil.maybeBufferInputStream(new FileInputStream(file)));
+ else stream = IOUtil.maybeBufferInputStream(new FileInputStream(file));
+
+ return getNumberOfClusters(file.getAbsolutePath(), stream);
+
+ } catch (final IOException ioe) {
+ throw new PicardException("Could not open file " + file.getAbsolutePath() + " to get its cluster count: " + ioe.getMessage(), ioe);
+ } finally {
+ CloserUtil.close(stream);
+ }
+ }
+
+ private static long getNumberOfClusters(final String filePath, final InputStream inputStream) {
+ final byte[] header = new byte[HEADER_SIZE];
+
+ try {
+ final int headerBytesRead = inputStream.read(header);
+ if (headerBytesRead != HEADER_SIZE) {
+ throw new PicardException("Malformed file, expected header of size " + HEADER_SIZE + " but received " + headerBytesRead);
+ }
+ } catch (final IOException ioe) {
+ throw new PicardException("Unable to read header for file (" + filePath + ")", ioe);
+ }
+
+ final ByteBuffer headerBuf = ByteBuffer.wrap(header);
+ headerBuf.order(ByteOrder.LITTLE_ENDIAN);
+ return UnsignedTypeUtil.uIntToLong(headerBuf.getInt());
+ }
+
+
+ public BclReader(final File bclFile, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy, final boolean seekable) {
+ try {
+
+ this.outputLengths = new int[]{1};
+ this.streams = new InputStream[1];
+ this.streamFiles = new File[1];
+ this.numClustersPerCycle = new int[]{1};
+ this.bclQualityEvaluationStrategy = bclQualityEvaluationStrategy;
+
+ final ByteBuffer byteBuffer = ByteBuffer.allocate(HEADER_SIZE);
+ final String filePath = bclFile.getName();
+ final boolean isGzip = filePath.endsWith(".gz");
+ final boolean isBgzf = filePath.endsWith(".bgzf");
+ final InputStream stream = open(bclFile, seekable, isGzip, isBgzf);
+ final int read = stream.read(byteBuffer.array());
+
+ if (read != HEADER_SIZE) {
+ throw new RuntimeIOException(String.format("BCL %s has invalid header structure.", bclFile.getAbsoluteFile()));
+ }
+
+ byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+ this.numClustersPerCycle[0] = byteBuffer.getInt();
+ if (!isBgzf && !isGzip) {
+ assertProperFileStructure(bclFile, this.numClustersPerCycle[0], stream);
+ }
+ this.streams[0] = stream;
+ this.streamFiles[0] = bclFile;
+ } catch (final IOException ioe) {
+ throw new PicardException("IOException opening file " + bclFile.getAbsoluteFile(), ioe);
+ }
+ }
+
+ void assertProperFileStructure(final File file, final int numClusters, final InputStream stream) {
+ final long elementsInFile = file.length() - HEADER_SIZE;
+ if (numClusters != elementsInFile) {
+ CloserUtil.close(stream);
+ throw new PicardException("Expected " + numClusters + " in file but found " + elementsInFile);
+ }
+ }
+
+ InputStream open(final File file, final boolean seekable, final boolean isGzip, final boolean isBgzf) throws IOException {
+ final String filePath = file.getAbsolutePath();
+
+ try {
+ // Open up a buffered stream to read from the file and optionally wrap it in a gzip stream
+ // if necessary
+ if (isBgzf) {
+ // Only BlockCompressedInputStreams can seek, and only if they are fed a SeekableStream.
+ return new BlockCompressedInputStream(IOUtil.maybeBufferedSeekableStream(file));
+ } else if (isGzip) {
+ if (seekable) {
+ throw new IllegalArgumentException(
+ String.format("Cannot create a seekable reader for gzip bcl: %s.", filePath)
+ );
+ }
+ return (IOUtil.maybeBufferInputStream(new GZIPInputStream(new FileInputStream(file), Defaults.BUFFER_SIZE / 2),
+ Defaults.BUFFER_SIZE / 2));
+ } else {
+ if (seekable) {
+ throw new IllegalArgumentException(
+ String.format("Cannot create a seekable reader for provided bcl: %s.", filePath)
+ );
+ }
+ return IOUtil.maybeBufferInputStream(new FileInputStream(file));
+ }
+ } catch (final FileNotFoundException fnfe) {
+ throw new PicardException("File not found: (" + filePath + ")", fnfe);
+ } catch (final IOException ioe) {
+ throw new PicardException("Error reading file: (" + filePath + ")", ioe);
+ }
+ }
+
+ public void close() {
+ for (final InputStream stream : this.streams) {
+ CloserUtil.close(stream);
+ }
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (queue == null) {
+ advance();
+ }
+ return queue != null;
+ }
+
+ private long getNumClusters() {
+ return numClustersPerCycle[0];
+ }
+
+ protected void assertProperFileStructure(final File file) {
+ final long elementsInFile = file.length() - HEADER_SIZE;
+ if (numClustersPerCycle[0] != elementsInFile) {
+ throw new PicardException("Expected " + numClustersPerCycle[0] + " in file " + file.getAbsolutePath() + " but found " + elementsInFile);
+
+ }
+ }
+
+ public BclData next() {
+ if (queue == null) {
+ advance();
+ }
+
+ final BclData data = queue;
+ queue = null;
+ return data;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ void advance() {
+ int totalCycleCount = 0;
+ final BclData data = new BclData(outputLengths);
+ for (int read = 0; read < outputLengths.length; read++) {
+ for (int cycle = 0; cycle < outputLengths[read]; ++cycle) {
+ try {
+
+ final int readByte;
+ try {
+ readByte = this.streams[totalCycleCount].read();
+ } catch (IOException e) {
+ // when logging the error, increment cycle by 1, since totalCycleCount is zero-indexed but Illumina directories are 1-indexed.
+ throw new IOException(String.format("Error while reading from BCL file for cycle %d. Offending file on disk is %s",
+ (totalCycleCount+1), this.streamFiles[totalCycleCount].getAbsolutePath()), e);
+ }
+
+ if (readByte == -1) {
+ queue = null;
+ return;
+ }
+
+ if (readByte == 0) {
+ //NO CALL, don't confuse with an A call
+ data.bases[read][cycle] = (byte) '.';
+ data.qualities[read][cycle] = (byte) 2;
+ } else {
+ data.bases[read][cycle] = BASE_LOOKUP[readByte & BASE_MASK];
+ data.qualities[read][cycle] = bclQualityEvaluationStrategy.reviseAndConditionallyLogQuality((byte) (readByte >>> 2));
+ }
+ totalCycleCount++;
+ } catch (final IOException ioe) {
+ throw new RuntimeIOException(ioe);
+ }
+
+ }
+ }
+ this.queue = data;
+ }
+
+ public static BclReader makeSeekable(final List<File> files, final BclQualityEvaluationStrategy bclQualityEvaluationStrategy, final int[] outputLengths) {
+ return new BclReader(files, outputLengths, bclQualityEvaluationStrategy, true);
+ }
+
+ public int seek(final List<File> files, final TileIndex tileIndex, final int currentTile) {
+ int count = 0;
+ int numClustersInTile = 0;
+ for (final InputStream inputStream : streams) {
+ final TileIndex.TileIndexRecord tileIndexRecord = tileIndex.findTile(currentTile);
+ final BclIndexReader bclIndexReader = new BclIndexReader(files.get(count));
+ final long virtualFilePointer = bclIndexReader.get(tileIndexRecord.getZeroBasedTileNumber());
+ if (!(inputStream instanceof BlockCompressedInputStream)) {
+ throw new UnsupportedOperationException("Seeking only allowed on bzgf");
+ } else {
+ try {
+ if (tileIndex.getNumTiles() != bclIndexReader.getNumTiles()) {
+ throw new PicardException(String.format("%s.getNumTiles(%d) != %s.getNumTiles(%d)",
+ tileIndex.getFile().getAbsolutePath(), tileIndex.getNumTiles(), bclIndexReader.getBciFile().getAbsolutePath(), bclIndexReader.getNumTiles()));
+ }
+ ((BlockCompressedInputStream) inputStream).seek(virtualFilePointer);
+ numClustersInTile = tileIndexRecord.getNumClustersInTile();
+ } catch (final IOException e) {
+ throw new PicardException("Problem seeking to " + virtualFilePointer, e);
+ }
+ }
+ count++;
+ }
+ return numClustersInTile;
+ }
+}
+
diff --git a/src/java/picard/illumina/parser/readers/ClocsFileReader.java b/src/java/picard/illumina/parser/readers/ClocsFileReader.java
new file mode 100644
index 0000000..04bc7fe
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/ClocsFileReader.java
@@ -0,0 +1,157 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser.readers;
+
+import picard.PicardException;
+import picard.util.UnsignedTypeUtil;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+
+/**
+ * The clocs file format is one of 3 Illumina formats(pos, locs, and clocs) that stores position data exclusively.
+ * clocs files store position data for successive clusters, compressed in bins as follows:
+ * Byte 0 : unused
+ * Byte 1-4 : unsigned int numBins
+ * The rest of the file consists of bins/blocks, where a bin consists of an integer
+ * indicating number of blocks, followed by that number of blocks and a block consists
+ * of an x-y coordinate pair. In otherwords:
+ *
+ * for each bin
+ * byte 1: Unsigned int numBlocks
+ * for each block:
+ * byte 1 : byte xRelativeCoordinate
+ * byte 2 : byte yRelativeCoordinate
+ *
+ * Actual x and y values are computed using the following algorithm
+ *
+ * xOffset = yOffset = 0
+ * imageWidth = 2048
+ * blockSize = 25
+ * maxXbins:Int = Math.Ceiling((double)ImageWidth/(double)blockSize)
+ * for each bin:
+ * for each location:
+ * x = convert.ToSingle(xRelativeCoordinate/10f + xoffset)
+ * y = convert.toSingle(yRelativeCoordinate/10f + yoffset)
+ * if (binIndex > 0 && ((binIndex + 1) % maxXbins == 0)) {
+ * xOffset = 0; yOffset += blockSize
+ * } else xOffset += blockSize
+ */
+public class ClocsFileReader extends AbstractIlluminaPositionFileReader {
+
+ private static final int HEADER_SIZE = 5;
+
+ private static final int IMAGE_WIDTH = 2048;
+ private static final int BLOCK_SIZE = 25;
+ private static final int NUM_BINS_IN_ROW = (int)Math.ceil((double) IMAGE_WIDTH / (double) BLOCK_SIZE);
+
+ /** Total number of bins */
+ private final long numBins;
+
+ /** An iterator through clocsFile's bytes */
+ private final BinaryFileIterator<Byte> byteIterator;
+
+ //mutable vars
+ private float xOffset;
+ private float yOffset;
+ private long currentBin;
+ private int numClustersInBin; //MAX 255
+ private long currentClusterInBin;
+
+ public ClocsFileReader(final File clocsFile) {
+ super(clocsFile);
+
+ byteIterator = MMapBackedIteratorFactory.getByteIterator(HEADER_SIZE, clocsFile);
+
+ final ByteBuffer hbs = byteIterator.getHeaderBytes();
+ hbs.get(); //unusedByte
+ numBins = UnsignedTypeUtil.uIntToLong(hbs.getInt());
+
+ xOffset = 0;
+ yOffset = 0;
+ currentBin = 0;
+ startBlock();
+
+ checkAndAdvanceBin();
+ }
+
+ /**
+ * Grab the next set of offset values, decompress them.
+ * @return the position information of the next offset values
+ */
+ @Override
+ protected PositionInfo unsafeNextInfo() {
+ final byte xByte = byteIterator.next();
+ final byte yByte = byteIterator.next();
+
+ final float xPos = UnsignedTypeUtil.uByteToInt(xByte)/10f + xOffset;
+ final float yPos = UnsignedTypeUtil.uByteToInt(yByte)/10f + yOffset;
+ ++currentClusterInBin;
+ checkAndAdvanceBin();
+
+ return new PositionInfo(xPos, yPos, getLane(), getTile());
+ }
+
+ /** Compute offset for next bin and then increment the bin number and reset block information*/
+ private void checkAndAdvanceBin() {
+ while(currentClusterInBin >= numClustersInBin && currentBin < numBins) { //While rather than if statement to skip empty blocks
+ if ((currentBin + 1) % NUM_BINS_IN_ROW == 0) {
+ xOffset = 0;
+ yOffset += BLOCK_SIZE;
+ } else{
+ xOffset += BLOCK_SIZE;
+ }
+
+ currentBin += 1;
+ if(currentBin < numBins) {
+ startBlock();
+ }
+ }
+ }
+
+ /** Start the next block by reading it's numBlocks byte and setting the currentBlock index to 0 */
+ private void startBlock() {
+ numClustersInBin = UnsignedTypeUtil.uByteToInt(byteIterator.next());
+ currentClusterInBin = 0;
+ }
+
+ @Override
+ protected String makeExceptionMsg() {
+ return "ClocsFileReader(file=" + getFile().getName() + ", lane=" + getLane() + ", tile=" + getTile() +
+ ", currentBin=" + currentBin + ", numBins=" + numBins + ", xOffset=" + xOffset + ", yOffset" + yOffset +
+ ", currentBlock=" + currentClusterInBin + ", numBlocks=" + numClustersInBin;
+ }
+
+ @Override
+ public boolean hasNext() {
+ boolean valuesRemain = currentClusterInBin < numClustersInBin || currentBin < (numBins -1);
+ if(!valuesRemain && byteIterator.hasNext()) {
+ throw new PicardException("Read the number of expected bins( " + numBins + ") but still had more elements in file( " + byteIterator.getFile().getAbsolutePath() + ") ");
+ }
+ return valuesRemain;
+ }
+
+ public void close() {
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/FilterFileReader.java b/src/java/picard/illumina/parser/readers/FilterFileReader.java
new file mode 100644
index 0000000..16b824b
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/FilterFileReader.java
@@ -0,0 +1,114 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser.readers;
+
+import picard.PicardException;
+import picard.util.UnsignedTypeUtil;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+
+/**
+ * Illumina uses an algorithm described in "Theory of RTA" that determines whether or not a cluster passes filter("PF") or not.
+ * These values are written as sequential bytes to Filter Files. The structure of a filter file is as follows:
+ * Bytes 0-3 : 0
+ * Bytes 4-7 : unsigned int version
+ * Bytes 8-11 : unsigned int numClusters
+ */
+public class FilterFileReader implements Iterator<Boolean> {
+ /** Number of bytes in the files header that will be skipped by the iterator*/
+ private static final int HEADER_SIZE = 12;
+
+ /** Expected Version */
+ public final int EXPECTED_VERSION = 3;
+
+ /** Iterator over each cluster in the FilterFile */
+ private final BinaryFileIterator<Byte> bbIterator;
+
+ /** Version number found in the FilterFile, this should equal 3 */
+ public final int version;
+
+ /** The number of cluster's pf values stored in this file */
+ public final long numClusters;
+
+ /** Byte representing a cluster failing filter(not a PF read), we test this exactly at
+ * the moment but technically the standard may be to check only lowest significant bit */
+ private final static byte FailedFilter = 0x00;
+
+ /** Byte representing a cluster passing filter(a PF read), we test this exactly at
+ * the moment but technically the standard may be to check only lowest significant bit */
+ private final static byte PassedFilter = 0x01;
+
+ /** The index of the current cluster within the file*/
+ private int currentCluster;
+
+ public FilterFileReader(final File file) {
+ bbIterator = MMapBackedIteratorFactory.getByteIterator(HEADER_SIZE, file);
+ final ByteBuffer headerBuf = bbIterator.getHeaderBytes();
+
+ for(int i = 0; i < 4; i++) {
+ final byte b = headerBuf.get();
+ if(b != 0) {
+ throw new PicardException("The first four bytes of a Filter File should be 0 but byte " + i + " was " + b + " in file " + file.getAbsolutePath());
+ }
+ }
+
+ version = headerBuf.getInt();
+ if(version != EXPECTED_VERSION) {
+ throw new PicardException("Expected version is " + EXPECTED_VERSION + " but version found was " + version + " in file " + file.getAbsolutePath());
+ }
+
+ numClusters = UnsignedTypeUtil.uIntToLong(headerBuf.getInt());
+ bbIterator.assertTotalElementsEqual(numClusters);
+
+ currentCluster = 0;
+ }
+
+ public boolean hasNext() {
+ return currentCluster < numClusters;
+ }
+
+ public Boolean next() {
+ final byte value = bbIterator.next();
+ currentCluster += 1;
+ if(value == PassedFilter) {
+ return true;
+ } else if(value == FailedFilter) {
+ return false;
+ } else {
+ String hexVal = Integer.toHexString(value);
+ hexVal = (hexVal.length() < 2 ? "0x0" : "0x") + hexVal;
+ throw new PicardException("Didn't recognized PF Byte (" + hexVal + ")" + " for element (" + currentCluster + ") in file(" + bbIterator.getFile().getAbsolutePath() + ")");
+ }
+ }
+
+ public void skipRecords(final int numToSkip) {
+ bbIterator.skipElements(numToSkip);
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/LocsFileReader.java b/src/java/picard/illumina/parser/readers/LocsFileReader.java
new file mode 100644
index 0000000..730fd23
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/LocsFileReader.java
@@ -0,0 +1,119 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser.readers;
+
+import picard.PicardException;
+import picard.util.UnsignedTypeUtil;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+
+/**
+ * The locs file format is one 3 Illumina formats(pos, locs, and clocs) that stores position data exclusively.
+ * locs files store position data for successive clusters in 4 byte float pairs, described as follows:
+ * bytes 1-4 : (int?) Version number (1)
+ * bytes 5-8 : 4 byte float equaling 1.0
+ * bytes 9-12 : unsigned int numClusters
+ * bytes 13-16: : X coordinate of first cluster (32-bit float)
+ * bytes 17-20: : Y coordinate of first cluster (32-bit float)
+ *
+ * The remaining bytes of the file store the X and Y coordinates of the remaining clusters.
+ */
+
+public class LocsFileReader extends AbstractIlluminaPositionFileReader {
+ /** Size of the opening file header, this is skipped by the iterator below*/
+ private static final int HEADER_SIZE = 12;
+
+ /** The first four bytes of a locs file should equal a little endian 1 */
+ private static final int BYTES_1_TO_4 = 1;
+
+ /** The expected version of locs files */
+ private static final float VERSION = 1.0f;
+
+ /** An iterator over all of the coordinate values in the file, remember next needs to be called
+ * twice per coordinate pair */
+ private BinaryFileIterator<Float> bbIterator;
+
+ /** Total clusters in the file as read in the file header */
+ private long numClusters;
+
+ /** The index of the next cluster to be returned */
+ private int nextCluster;
+
+ public LocsFileReader(final File file) {
+ super(file);
+
+ initialize(file);
+ }
+
+ public LocsFileReader(final File file, final int lane, final int tile) {
+ super(file, lane, tile);
+
+ initialize(file);
+ }
+
+ private void initialize(final File file) {
+ bbIterator = MMapBackedIteratorFactory.getFloatIterator(HEADER_SIZE, file);
+ final ByteBuffer headerBuf = bbIterator.getHeaderBytes();
+
+ final int firstValue = headerBuf.getInt();
+ if(firstValue != BYTES_1_TO_4) {
+ throw new PicardException("First header byte of locs files should be " + BYTES_1_TO_4 + " value found(" + firstValue + ")");
+ }
+
+ final float versionNumber = headerBuf.getFloat();
+ if(versionNumber != VERSION) {
+ throw new PicardException("First header byte of locs files should be " + VERSION + " value found(" + firstValue + ")");
+ }
+
+ numClusters = UnsignedTypeUtil.uIntToLong(headerBuf.getInt());
+ bbIterator.assertTotalElementsEqual(numClusters * 2);
+ }
+
+ @Override
+ protected PositionInfo unsafeNextInfo() {
+ final float xVal = bbIterator.next();
+ final float yVal = bbIterator.next();
+ ++nextCluster;
+ return new PositionInfo(xVal, yVal, getLane(), getTile());
+ }
+
+ @Override
+ protected String makeExceptionMsg() {
+ return "LocsFileReader(file=" + getFile().getAbsolutePath() + ", numClusters=" + numClusters + ") ";
+ }
+
+ @Override
+ public boolean hasNext() {
+ return nextCluster < numClusters;
+ }
+
+ public void close() {
+ bbIterator = null;
+ }
+
+ public void skipRecords(final int numToSkip) {
+ bbIterator.skipElements(numToSkip * 2);
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/MMapBackedIteratorFactory.java b/src/java/picard/illumina/parser/readers/MMapBackedIteratorFactory.java
new file mode 100644
index 0000000..0a66128
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/MMapBackedIteratorFactory.java
@@ -0,0 +1,298 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser.readers;
+
+
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * MMapBackedIteratorFactory a file reader that takes a header size and a binary file, maps the file to
+ * a read-only byte buffer and provides methods to retrieve the header as it's own bytebuffer and create
+ * iterators of different data types over the values of file (starting after the end of the header).
+ * Values provided by the MMappedBinaryFileReader are read as if they are little endian.
+ *
+ * Note (read to end):
+ * This class IS thread-safe and immutable though the iterator and ByteBuffers it produces are NOT.
+ * The values read are assumed to be signed, NO promoting/sign conversion happens in this class.
+ */
+public class MMapBackedIteratorFactory {
+ private static int BYTE_SIZE = 1;
+ private static int INT_SIZE = 4;
+ private static int FLOAT_SIZE = 4;
+ private static int LONG_SIZE = 8;
+
+ public static BinaryFileIterator<Integer> getIntegerIterator(final int headerSize, final File binaryFile) {
+ checkFactoryVars(headerSize, binaryFile);
+ final ByteBuffer buf = getBuffer(binaryFile);
+ final byte [] header = getHeader(buf, headerSize);
+
+ return new IntegerMMapIterator(header, binaryFile, buf);
+ }
+
+ public static BinaryFileIterator<Byte> getByteIterator(final int headerSize, final File binaryFile) {
+ checkFactoryVars(headerSize, binaryFile);
+ final ByteBuffer buf = getBuffer(binaryFile);
+ final byte [] header = getHeader(buf, headerSize);
+
+ return new ByteMMapIterator(header, binaryFile, buf);
+ }
+
+ public static BinaryFileIterator<Float> getFloatIterator(final int headerSize, final File binaryFile) {
+ checkFactoryVars(headerSize, binaryFile);
+ final ByteBuffer buf = getBuffer(binaryFile);
+ final byte [] header = getHeader(buf, headerSize);
+
+ return new FloatMMapIterator(header, binaryFile, buf);
+ }
+
+ public static BinaryFileIterator<Long> getLongIterator(final int headerSize, final File binaryFile) {
+ checkFactoryVars(headerSize, binaryFile);
+ final ByteBuffer buf = getBuffer(binaryFile);
+ final byte [] header = getHeader(buf, headerSize);
+
+ return new LongMMapIterator(header, binaryFile, buf);
+ }
+
+ public static BinaryFileIterator<ByteBuffer> getByteBufferIterator(final int headerSize, final int elementSize, final File binaryFile) {
+ checkFactoryVars(headerSize, binaryFile);
+ final ByteBuffer buf = getBuffer(binaryFile);
+ final byte [] header = getHeader(buf, headerSize);
+
+ return new ByteBufferMMapIterator(header, binaryFile, elementSize, buf);
+ }
+
+ private static void checkFactoryVars(final int headerSize, final File binaryFile) {
+ IOUtil.assertFileIsReadable(binaryFile);
+
+ if(headerSize < 0) {
+ throw new PicardException("Header size cannot be negative. HeaderSize(" + headerSize + ") for file " + binaryFile.getAbsolutePath());
+ }
+
+ if(headerSize > binaryFile.length()) {
+ throw new PicardException("Header size(" + headerSize + ") is greater than file size(" + binaryFile.length() + ") for file " + binaryFile.getAbsolutePath());
+ }
+ }
+
+ private static ByteBuffer getBuffer(final File binaryFile) {
+ final ByteBuffer buf;
+ try {
+ final FileInputStream is = new FileInputStream(binaryFile);
+ final FileChannel channel = is.getChannel();
+ final long fileSize = channel.size();
+ buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+ CloserUtil.close(channel);
+ CloserUtil.close(is);
+ } catch (IOException e) {
+ throw new PicardException("IOException opening cluster binary file " + binaryFile, e);
+ }
+
+ return buf;
+ }
+
+ private static byte [] getHeader(final ByteBuffer buf, final int headerSize) {
+ final byte [] headerBytes = new byte[headerSize];
+ if(headerSize > 0) {
+ buf.get(headerBytes);
+ }
+ return headerBytes;
+ }
+
+ /** A simple iterator that uses a reference to the enclosing ByteBuffer and a member position
+ * value to iterate over values in the buffer, starting after headerSize bytes */
+ static abstract class MMapBackedIterator<TYPE> extends BinaryFileIterator<TYPE>{
+ protected final ByteBuffer buffer;
+
+ protected MMapBackedIterator(final byte[] header, final File file, final int elementSize, final ByteBuffer buffer) {
+ super(header, file, elementSize);
+ this.buffer = buffer;
+ }
+
+ public boolean hasNext() {
+ return buffer.limit() - buffer.position() >= elementSize;
+ }
+
+ public void skipElements(final int numElements) {
+ buffer.position(buffer.position() + (numElements * elementSize));
+ }
+
+ /** The method that actually retrieves the data from the enclosing buffer */
+ protected abstract TYPE getElement();
+
+ public Iterator<TYPE> iterator() {
+ return this;
+ }
+ }
+
+ private static class IntegerMMapIterator extends MMapBackedIterator<Integer> {
+ public IntegerMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
+ super(header, file, INT_SIZE, buf);
+ }
+
+ @Override
+ protected Integer getElement() {
+ return buffer.getInt();
+ }
+ }
+
+ private static class ByteMMapIterator extends MMapBackedIterator<Byte> {
+ public ByteMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
+ super(header, file, BYTE_SIZE, buf);
+ }
+
+ @Override
+ protected Byte getElement() {
+ return buffer.get();
+ }
+ }
+
+ private static class FloatMMapIterator extends MMapBackedIterator<Float> {
+ public FloatMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
+ super(header, file, FLOAT_SIZE, buf);
+ }
+
+ @Override
+ protected Float getElement() {
+ return buffer.getFloat();
+ }
+ }
+
+ private static class LongMMapIterator extends MMapBackedIterator<Long> {
+ public LongMMapIterator(final byte[] header, final File file, final ByteBuffer buf) {
+ super(header, file, LONG_SIZE, buf);
+ }
+
+ @Override
+ protected Long getElement() {
+ return buffer.getLong();
+ }
+ }
+
+ //TODO: Add test
+ //TODO: Make a note that if you want to multithread over this then you have to copy the contents
+ private static class ByteBufferMMapIterator extends MMapBackedIterator<ByteBuffer> {
+ private byte [] localBacking;
+ private ByteBuffer localBuffer;
+ public ByteBufferMMapIterator(final byte[] header, final File file, final int elementBufferSize, final ByteBuffer buf) {
+ super(header, file, elementBufferSize, buf);
+ this.localBacking = new byte[elementBufferSize];
+ this.localBuffer = ByteBuffer.wrap(localBacking);
+ this.localBuffer.order(ByteOrder.LITTLE_ENDIAN);
+ }
+
+ @Override
+ protected ByteBuffer getElement() {
+ localBuffer.position(0);
+ buffer.get(this.localBacking);
+ localBuffer.position(0);
+ return localBuffer;
+ }
+ }
+}
+
+
+abstract class BinaryFileIterator<TYPE> implements Iterator<TYPE>, Iterable<TYPE> {
+ protected final File file;
+ protected final long fileSize;
+ protected final int elementSize;
+ private final byte [] header;
+
+ public BinaryFileIterator(final byte[] header, final File file, final int elementSize) {
+ this.header = header;
+ this.file = file;
+ this.fileSize = file.length();
+ this.elementSize = elementSize;
+ }
+ /** Return the bytes found in the first headerSize bytes of the file, wrapped as a
+ * ByteBuffer */
+ public ByteBuffer getHeaderBytes() {
+ final ByteBuffer bb = ByteBuffer.allocate(header.length);
+ bb.order(ByteOrder.LITTLE_ENDIAN);
+ bb.put(header);
+ bb.position(0);
+ return bb;
+ }
+
+ public void assertTotalElementsEqual(final long numElements) {
+ if(getElementsInFile() != numElements) {
+ throw new PicardException("Expected " + numElements + " elements in file but found " + getElementsInFile() + " elements! File(" + file.getAbsolutePath() + ")");
+ }
+
+ if(getExtraBytes() != 0) {
+ throw new PicardException("Malformed file, expected " + (header.length + numElements * elementSize) + " bytes in file, found " + fileSize + " bytes for file("
+ + file.getAbsolutePath() + ")");
+ }
+ }
+
+ public int getElementSize() {
+ return elementSize;
+ }
+
+ public long getExtraBytes() {
+ return fileSize - header.length - (getElementsInFile() * elementSize);
+ }
+
+ public long getElementsInFile() {
+ return (fileSize - header.length) / elementSize;
+ }
+
+ public File getFile() {
+ return file;
+ }
+
+ public TYPE next() {
+ if(!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return getElement();
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+
+ public Iterator<TYPE> iterator() {
+ return this;
+ }
+
+ /** The method that actually retrieves the data from the enclosing buffer */
+ protected abstract TYPE getElement();
+ public abstract void skipElements(final int numElementsToSkip);
+ public abstract boolean hasNext();
+}
+
+
+
diff --git a/src/java/picard/illumina/parser/readers/PosFileReader.java b/src/java/picard/illumina/parser/readers/PosFileReader.java
new file mode 100644
index 0000000..3108abb
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/PosFileReader.java
@@ -0,0 +1,89 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.parser.readers;
+
+import htsjdk.samtools.util.CloserUtil;
+import picard.PicardException;
+import picard.util.BasicInputParser;
+
+import java.io.File;
+
+/**
+ * The pos file format is one 3 Illumina formats(pos, locs, and clocs) that stores position data exclusively.
+ * pos files store position data for successive clusters in tabbed delimited coordinated pairs, 1 per file row e.g.:
+ *
+ * xPos1\tyPos1
+ * xPos2\tyPos2
+ * 102.0\t303.3
+ * ...
+ * xPosn-1\yPosn-1
+ * xPosn\yPosn
+ *
+ * Where n = the total number of clusters (and therefore lines) in the file.
+ */
+public class PosFileReader extends AbstractIlluminaPositionFileReader {
+
+ private final BasicInputParser parser;
+
+ public PosFileReader(final File posFile) {
+ super(posFile);
+ this.parser = new BasicInputParser(true, posFile);
+ }
+
+ /** Read a line of text and parse it into two float values, create a PositionInfo and return it */
+ @Override
+ protected PositionInfo unsafeNextInfo() {
+ final String [] strVals = this.parser.next();
+ if(strVals.length != 2) {
+ throw new PicardException("Pos file number of values != 2, found (" + strVals.length +")" + makeExceptionMsg());
+ }
+ try {
+ final float xVal = Float.parseFloat(strVals[0]);
+ final float yVal = Float.parseFloat(strVals[1]);
+
+ if(xVal <0 || yVal < 0) {
+ throw new NumberFormatException("X and Y pos values cannot be negative!");
+ }
+
+ return new PositionInfo(xVal, yVal, getLane(), getTile());
+ } catch(final NumberFormatException nfe) {
+ throw new PicardException("Bad x or y value in " + makeExceptionMsg(), nfe);
+ }
+ }
+
+ @Override
+ protected String makeExceptionMsg() {
+ return "pos file( " + parser.getFileName() +
+ " ) on line number( " + parser.getCurrentLineNumber() +
+ " ) with current line = " + parser.getCurrentLine();
+ }
+
+ public boolean hasNext() {
+ return parser.hasNext();
+ }
+
+ public void close() {
+ CloserUtil.close(parser);
+ }
+}
diff --git a/src/java/picard/illumina/parser/readers/TileMetricsOutReader.java b/src/java/picard/illumina/parser/readers/TileMetricsOutReader.java
new file mode 100644
index 0000000..215e067
--- /dev/null
+++ b/src/java/picard/illumina/parser/readers/TileMetricsOutReader.java
@@ -0,0 +1,167 @@
+package picard.illumina.parser.readers;
+
+import picard.PicardException;
+import picard.util.UnsignedTypeUtil;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Reads a TileMetricsOut file commonly found in the InterOp directory of an Illumina Run Folder. This
+ * reader DOES NOT try to interpret the metrics code or metrics value but instead returns them in what
+ * is essentially a struct.
+ *
+ * File Format:
+ * byte 0 (unsigned byte) = The version number which MUST be 2 or an exception will be thrown
+ * byte 1 (unsigned byte) = The record size which must be 10 or an exception will be thrown
+ * bytes 3 + (current_record * 10) to (current_record * 10 + 10) (TileMetrics Record) = The actual records each of size 10 that
+ * get converted into IlluminaPhasingMetrics objects
+ *
+ * TileMetrics Record Format:
+ * Each 10 byte record is of the following format:
+ * byte 0-1 (unsigned short) = lane number
+ * byte 2-3 (unsigned short) = tile number
+ * byte 4-5 (unisgned short) = metrics code, see Theory of RTA document by Illumina for definition
+ * byte 6-9 (float) = metrics value, see Theory of RTA document by Illumina for definition
+ */
+public class TileMetricsOutReader implements Iterator<TileMetricsOutReader.IlluminaTileMetrics> {
+ private static final int HEADER_SIZE = 2;
+ private static final int EXPECTED_RECORD_SIZE = 10;
+ private static final int EXPECTED_VERSION = 2;
+
+ private final BinaryFileIterator<ByteBuffer> bbIterator;
+
+ /**
+ * Return a TileMetricsOutReader for the specified file
+ * @param tileMetricsOutFile The file to read
+ */
+ public TileMetricsOutReader(final File tileMetricsOutFile) {
+ bbIterator = MMapBackedIteratorFactory.getByteBufferIterator(HEADER_SIZE, EXPECTED_RECORD_SIZE, tileMetricsOutFile);
+
+ final ByteBuffer header = bbIterator.getHeaderBytes();
+
+ //Get the version, should be EXPECTED_VERSION, which is 2
+ final int actualVersion = UnsignedTypeUtil.uByteToInt(header.get());
+ if(actualVersion != EXPECTED_VERSION) {
+ throw new PicardException("TileMetricsOutReader expects the version number to be " + EXPECTED_VERSION + ". Actual Version in Header( " + actualVersion + ")" );
+ }
+
+ final int actualRecordSize = UnsignedTypeUtil.uByteToInt(header.get());
+ if(EXPECTED_RECORD_SIZE != actualRecordSize) {
+ throw new PicardException("TileMetricsOutReader expects the record size to be " + EXPECTED_RECORD_SIZE + ". Actual Record Size in Header( " + actualRecordSize + ")" );
+ }
+ }
+
+ public boolean hasNext() {
+ return bbIterator.hasNext();
+ }
+
+ public IlluminaTileMetrics next() {
+ if(!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return new IlluminaTileMetrics(bbIterator.next());
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * IlluminaPhasingMetrics corresponds to a single record in a TileMetricsOut file
+ */
+ public static class IlluminaTileMetrics {
+ private final IlluminaLaneTileCode laneTileCode;
+ private final float metricValue;
+
+ public IlluminaTileMetrics(final ByteBuffer bb) {
+ this(UnsignedTypeUtil.uShortToInt(bb.getShort()), UnsignedTypeUtil.uShortToInt(bb.getShort()),
+ UnsignedTypeUtil.uShortToInt(bb.getShort()), bb.getFloat());
+ }
+
+ public IlluminaTileMetrics(final int laneNumber, final int tileNumber, final int metricCode, final float metricValue) {
+ this.laneTileCode = new IlluminaLaneTileCode(laneNumber, tileNumber, metricCode);
+ this.metricValue = metricValue;
+ }
+
+ public int getLaneNumber() {
+ return laneTileCode.getLaneNumber();
+ }
+
+ public int getTileNumber() {
+ return laneTileCode.getTileNumber();
+ }
+
+ public int getMetricCode() {
+ return laneTileCode.getMetricCode();
+ }
+
+ public float getMetricValue() {
+ return metricValue;
+ }
+
+ public IlluminaLaneTileCode getLaneTileCode() {
+ return laneTileCode;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (o instanceof IlluminaTileMetrics) {
+ final IlluminaTileMetrics that = (IlluminaTileMetrics) o;
+ return laneTileCode == that.laneTileCode && metricValue == that.metricValue; // Identical tile data should render exactly the same float.
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ return String.format("%s:%s:%s:%s", laneTileCode.getLaneNumber(), laneTileCode.getTileNumber(), laneTileCode.getMetricCode(), metricValue).hashCode(); // Slow but adequate.
+ }
+ }
+
+ /** Helper class which captures the combination of a lane, tile & metric code */
+ public static class IlluminaLaneTileCode {
+ private final int laneNumber;
+ private final int tileNumber;
+ private final int metricCode;
+
+ public IlluminaLaneTileCode(final int laneNumber, final int tileNumber, final int metricCode) {
+ this.laneNumber = laneNumber;
+ this.tileNumber = tileNumber;
+ this.metricCode = metricCode;
+ }
+
+ public int getLaneNumber() {
+ return laneNumber;
+ }
+
+ public int getTileNumber() {
+ return tileNumber;
+ }
+
+ public int getMetricCode() {
+ return metricCode;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (o instanceof IlluminaLaneTileCode) {
+ final IlluminaLaneTileCode that = (IlluminaLaneTileCode) o;
+ return laneNumber == that.laneNumber && tileNumber == that.tileNumber && metricCode == that.metricCode;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ int result = laneNumber;
+ result = 31 * result + tileNumber;
+ result = 31 * result + metricCode;
+ return result;
+ }
+ }
+}
diff --git a/src/java/picard/illumina/quality/CollectHiSeqXPfFailMetrics.java b/src/java/picard/illumina/quality/CollectHiSeqXPfFailMetrics.java
new file mode 100644
index 0000000..66ae083
--- /dev/null
+++ b/src/java/picard/illumina/quality/CollectHiSeqXPfFailMetrics.java
@@ -0,0 +1,510 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina.quality;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+import picard.illumina.parser.ClusterData;
+import picard.illumina.parser.IlluminaDataProvider;
+import picard.illumina.parser.IlluminaDataProviderFactory;
+import picard.illumina.parser.IlluminaDataType;
+import picard.illumina.parser.ReadData;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Collect metrics regarding the reason for reads (sequenced by HiSeqX) not passing the Illumina PF Filter. (BETA)
+ *
+ * @author Yossi Farjoun
+ */
+ at CommandLineProgramProperties(
+ usage = "Classify PF-Failing reads in a HiSeqX Illumina Basecalling directory into various categories. The classification is based on a heuristic that was derived by looking at a few titration experiments.",
+ usageShort = "Classify PF-Failing reads in a HiSeqX Illumina Basecalling directory into various categories.",
+ programGroup = Metrics.class
+)
+
+public class CollectHiSeqXPfFailMetrics extends CommandLineProgram {
+ @Option(doc = "The Illumina basecalls directory. ", shortName = "B")
+ public File BASECALLS_DIR;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Basename for metrics file. Resulting file will be" +
+ " <OUTPUT>" + summaryMetricsExtension, optional = false)
+ public File OUTPUT;
+
+ @Option(shortName = "P", doc = "The fraction of (non-PF) reads for which to output explicit classification. Output file will be <OUTPUT>" + detailedMetricsExtension + " (if PROB_EXPLICIT_READS != 0)", optional = true)
+ public double PROB_EXPLICIT_READS = 0;
+
+ @Option(doc = "Lane number.", shortName = StandardOptionDefinitions.LANE_SHORT_NAME)
+ public Integer LANE;
+
+ @Option(shortName = "NP", doc = "Run this many PerTileBarcodeExtractors in parallel. If NUM_PROCESSORS = 0, number of cores is automatically set to " +
+ "the number of cores available on the machine. If NUM_PROCESSORS < 0 then the number of cores used will be " +
+ "the number available on the machine less NUM_PROCESSORS.", optional = true)
+ public int NUM_PROCESSORS = 1;
+
+ @Option(doc = "Number of cycles to look at. At time of writing PF status gets determined at cycle 24 so numbers greater than this will yield strange results. " +
+ "In addition, PF status is currently determined at cycle 24, so running this with any other value is neither tested nor recommended.", optional = true)
+ public int N_CYCLES = 24;
+
+ private static final Log LOG = Log.getInstance(CollectHiSeqXPfFailMetrics.class);
+
+ private final Map<Integer, PFFailSummaryMetric> tileToSummaryMetrics = new LinkedHashMap<Integer, PFFailSummaryMetric>();
+ private final Map<Integer, List<PFFailDetailedMetric>> tileToDetailedMetrics = new LinkedHashMap<Integer, List<PFFailDetailedMetric>>();
+
+ //Add "T" to the number of cycles to create a "TemplateRead" of the desired length.
+ private final ReadStructure READ_STRUCTURE = new ReadStructure(N_CYCLES + "T");
+
+ public final static String detailedMetricsExtension = ".pffail_detailed_metrics";
+ public final static String summaryMetricsExtension = ".pffail_summary_metrics";
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final List<String> errors = new ArrayList<String>();
+
+ if (N_CYCLES < 0) {
+ errors.add("Number of Cycles to look at must be greater than 0");
+ }
+
+ if (PROB_EXPLICIT_READS > 1 || PROB_EXPLICIT_READS < 0) {
+ errors.add("PROB_EXPLICIT_READS must be a probability, i.e., 0 <= PROB_EXPLICIT_READS <= 1");
+ }
+
+ if (errors.size() > 0) {
+ return errors.toArray(new String[errors.size()]);
+ } else {
+ return super.customCommandLineValidation();
+ }
+ }
+
+ /** Stock main method. */
+ public static void main(final String[] args) {
+ new CollectHiSeqXPfFailMetrics().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+
+ final IlluminaDataProviderFactory factory = new IlluminaDataProviderFactory(BASECALLS_DIR, LANE, READ_STRUCTURE,
+ new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY),
+ IlluminaDataType.BaseCalls,
+ IlluminaDataType.PF,
+ IlluminaDataType.QualityScores,
+ IlluminaDataType.Position);
+
+ final File summaryMetricsFileName = new File(OUTPUT + summaryMetricsExtension);
+ final File detailedMetricsFileName = new File(OUTPUT + detailedMetricsExtension);
+
+ IOUtil.assertFileIsWritable(summaryMetricsFileName);
+ if (PROB_EXPLICIT_READS != 0) {
+ IOUtil.assertFileIsWritable(detailedMetricsFileName);
+ }
+
+ final int numProcessors;
+ if (NUM_PROCESSORS == 0) {
+ numProcessors = Runtime.getRuntime().availableProcessors();
+ } else if (NUM_PROCESSORS < 0) {
+ numProcessors = Runtime.getRuntime().availableProcessors() + NUM_PROCESSORS;
+ } else {
+ numProcessors = NUM_PROCESSORS;
+ }
+
+ // Create thread-pool submit jobs and what for their completion
+ LOG.info("Processing with " + numProcessors + " PerTilePFMetricsExtractor(s).");
+ final ExecutorService pool = Executors.newFixedThreadPool(numProcessors);
+
+ final List<PerTilePFMetricsExtractor> extractors = new ArrayList<PerTilePFMetricsExtractor>(factory.getAvailableTiles().size());
+ for (final int tile : factory.getAvailableTiles()) {
+ tileToSummaryMetrics.put(tile, new PFFailSummaryMetric(Integer.toString(tile)));
+ tileToDetailedMetrics.put(tile, new ArrayList<PFFailDetailedMetric>());
+
+ final PerTilePFMetricsExtractor extractor = new PerTilePFMetricsExtractor(
+ tile,
+ tileToSummaryMetrics.get(tile),
+ tileToDetailedMetrics.get(tile),
+ factory,
+ PROB_EXPLICIT_READS
+ );
+ extractors.add(extractor);
+ }
+ try {
+ for (final PerTilePFMetricsExtractor extractor : extractors) {
+ pool.submit(extractor);
+ }
+ pool.shutdown();
+ // Wait forever for tasks to terminate
+ pool.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
+ } catch (final Throwable e) {
+ // Cancel if current thread also interrupted
+ LOG.error(e, "Parent thread encountered problem submitting extractors to thread pool or awaiting shutdown of threadpool. Attempting to kill threadpool.");
+ pool.shutdownNow();
+ return 2;
+ }
+
+ LOG.info("Processed " + extractors.size() + " tiles.");
+
+ // Check for exceptions from extractors
+ for (final PerTilePFMetricsExtractor extractor : extractors) {
+ if (extractor.getException() != null) {
+ LOG.error("Abandoning metrics calculation because one or more PerTilePFMetricsExtractors failed.");
+ return 4;
+ }
+ }
+
+ // Add detailed metrics to file
+ final MetricsFile<PFFailDetailedMetric, ?> detailedMetrics = getMetricsFile();
+ for (final Collection<PFFailDetailedMetric> detailedMetricCollection : tileToDetailedMetrics.values()) {
+ for (final PFFailDetailedMetric metric : detailedMetricCollection) {
+ detailedMetrics.addMetric(metric);
+ }
+ }
+
+ // If detailed metrics were requested, write them now.
+ if (PROB_EXPLICIT_READS > 0) {
+ detailedMetrics.write(detailedMetricsFileName);
+ }
+
+ // Finish metrics tallying. Looping twice so that the "All" metrics will come out on top.
+ final PFFailSummaryMetric totalMetric = new PFFailSummaryMetric("All"); // a "fake" tile that will contain the total tally
+ for (final PFFailSummaryMetric summaryMetric : tileToSummaryMetrics.values()) {
+ totalMetric.merge(summaryMetric);
+ }
+
+ // Derive fields for total metric and add to file
+ totalMetric.calculateDerivedFields();
+ final MetricsFile<PFFailSummaryMetric, ?> summaryMetricsFile = getMetricsFile();
+ summaryMetricsFile.addMetric(totalMetric);
+
+ // Prepare each tile's derived fields and add it to the file
+ for (final PFFailSummaryMetric summaryMetric : tileToSummaryMetrics.values()) {
+ summaryMetric.calculateDerivedFields();
+ summaryMetricsFile.addMetric(summaryMetric);
+ }
+
+ // Actually write the summary metrics to their file.
+ summaryMetricsFile.write(summaryMetricsFileName);
+
+ return 0;
+ }
+
+ /** Extracts metrics from a HiSeqX tile. */
+ private static class PerTilePFMetricsExtractor implements Runnable {
+
+ private final int tile;
+ private final PFFailSummaryMetric summaryMetric;
+ final Collection<PFFailDetailedMetric> detailedMetrics;
+ private Exception exception = null;
+ private final IlluminaDataProvider provider;
+ final private double pWriteDetailed;
+ final private Random random = new Random();
+
+ /**
+ * Constructor
+ *
+ * @param tile The number of the tile being processed.
+ * @param summaryMetric A summaryMetric for collecting the tile data in.
+ * @param detailedMetrics A set of metrics for collecting the classification data in.
+ * @param factory A dataprovider for IlluminaData
+ */
+ public PerTilePFMetricsExtractor(
+ final int tile,
+ final PFFailSummaryMetric summaryMetric,
+ final Collection<PFFailDetailedMetric> detailedMetrics,
+ final IlluminaDataProviderFactory factory,
+ final double pWriteDetailed
+ ) {
+ this.tile = tile;
+ this.summaryMetric = summaryMetric;
+ this.detailedMetrics = detailedMetrics;
+ this.pWriteDetailed = pWriteDetailed;
+ this.provider = factory.makeDataProvider(Arrays.asList(tile));
+ }
+
+ public Exception getException() { return this.exception; }
+
+ /** run method which extracts accumulates metrics for a tile */
+ public void run() {
+ try {
+ LOG.info("Extracting PF metrics for tile " + tile);
+
+ /**
+ * Sometimes makeDataProvider takes a while waiting for slow file IO, for each tile the needed set of files
+ * is non-overlapping sets of files so make the data providers in the individual threads for Extractors
+ * so they are not all waiting for each others file operations
+ */
+ while (provider.hasNext()) {
+ // Extract the PF status and infer reason if FAIL from the cluster and update the summaryMetric for the tile
+ final ClusterData cluster = provider.next();
+ this.summaryMetric.READS++;
+ if (!cluster.isPf()) {
+ this.summaryMetric.PF_FAIL_READS++;
+
+ final ReadClassifier readClassifier = new ReadClassifier(cluster.getRead(0));
+
+ if (random.nextDouble() < pWriteDetailed) {
+ detailedMetrics.add(new PFFailDetailedMetric(tile, cluster.getX(), cluster.getY(), readClassifier.numNs, readClassifier.numQGtTwo, readClassifier.failClass));
+ }
+ switch (readClassifier.failClass) {
+ case EMPTY:
+ this.summaryMetric.PF_FAIL_EMPTY++;
+ break;
+ case MISALIGNED:
+ this.summaryMetric.PF_FAIL_MISALIGNED++;
+ break;
+ case POLYCLONAL:
+ this.summaryMetric.PF_FAIL_POLYCLONAL++;
+ break;
+ case UNKNOWN:
+ this.summaryMetric.PF_FAIL_UNKNOWN++;
+ break;
+ default:
+ LOG.error("Got unexpected fail Reason");
+ }
+ }
+ }
+ } catch (final Exception e) {
+ LOG.error(e, "Error processing tile ", this.tile);
+ this.exception = e;
+ } finally {
+ provider.close();
+ }
+ }
+ }
+
+ protected static class ReadClassifier {
+ public enum PfFailReason {
+ EMPTY,
+ POLYCLONAL,
+ MISALIGNED,
+ UNKNOWN
+ }
+
+ private final int numNs; // The number of Ns in the base calls
+ private final int numQGtTwo; // The number of quality scores greater than 2
+ private PfFailReason failClass = null; // The classification of the failure mode
+
+ /**
+ * Heart of CLP.
+ * This class actually classifies ReadData into the reason why it failed PF
+ * classification is based on a small set of titrated flowcells sequenced at the Broad Institute by the Genomics Platform.
+ * Three cluster were observed:
+ * - numNs~24 and was found only near the boundaries of tiles. it didn't seem to depend on concentration. For this reason it
+ * was classified as MISALIGNED
+ * <p/>
+ * - numNs~0 and numQGtTwo<=8 these were found throughout the tiles and _decreased_ in number as the concentration of the library increased
+ * Thus it was concluded that these correspond to the EMPTY wells
+ * <p/>
+ * - numNs~0 and numQGtTwo>=12 there were found throughout the tiles and _increased_ in number as the concentration of the library increased
+ * Thus it was concluded that these correspond to the POLYCLONAL wells
+ * <p/>
+ * - the remaining reads were few in number the classification for them wasn't clear. Thus they are left as UNKNOWN.
+ * <p/>
+ * We use the length of the read as a parameter and scale the 8 and the 12 accordingly as length/3 and length/2, but in reality this has only
+ * been tested on length=24.
+ *
+ * @param read The read to classify.
+ */
+ public ReadClassifier(final ReadData read) {
+
+ final int length = read.getBases().length;
+
+ numNs = countEquals(read.getBases(), (byte) '.'); // Ns are returned as periods from Illumina
+ numQGtTwo = countGreaterThan(read.getQualities(), (byte) 2);
+
+ failClass = PfFailReason.UNKNOWN; //for cases not covered below
+ if (numNs >= (length - 1)) {
+ failClass = PfFailReason.MISALIGNED;
+ } else if (numNs <= 1) {
+ if (numQGtTwo <= length / 3) {
+ failClass = PfFailReason.EMPTY;
+ } else if (numQGtTwo >= length / 2) {
+ failClass = PfFailReason.POLYCLONAL;
+ }
+ }
+ }
+ }
+
+ /** a metric class for describing FP failing reads from an Illumina HiSeqX lane * */
+ public static class PFFailDetailedMetric extends MetricBase {
+ // The Tile that is described by this metric.
+ public Integer TILE;
+
+ //The X coordinate of the read within the tile
+ public int X;
+
+ //The Y coordinate of the read within the tile
+ public int Y;
+
+ //The number of Ns found in this read.
+ public int NUM_N;
+
+ //The number of Quality scores greater than 2 found in this read
+ public int NUM_Q_GT_TWO;
+
+ /**
+ * The classification of this read: {EMPTY, POLYCLONAL, MISALIGNED, UNKNOWN}
+ * (See PFFailSummaryMetric for explanation regarding the possible classification.)
+ */
+ public ReadClassifier.PfFailReason CLASSIFICATION;
+
+ public PFFailDetailedMetric(final Integer TILE, final int x, final int y, final int NUM_N, final int NUM_Q_GT_TWO, final ReadClassifier.PfFailReason CLASSIFICATION) {
+ this.TILE = TILE;
+ X = x;
+ Y = y;
+ this.NUM_N = NUM_N;
+ this.NUM_Q_GT_TWO = NUM_Q_GT_TWO;
+ this.CLASSIFICATION = CLASSIFICATION;
+ }
+
+ /** This ctor is necessary for when reading metrics from file */
+ public PFFailDetailedMetric() {
+ }
+ }
+
+ /**
+ * Metrics produced by the GetHiSeqXPFFailMetrics program. Used to diagnose lanes from HiSeqX
+ * Sequencing, providing the number and fraction of each of the reasons that reads could have not passed PF.
+ * Possible reasons are EMPTY (reads from empty wells with no template strand), POLYCLONAL (reads from wells that had more than one strand
+ * cloned in them), MISALIGNED (reads from wells that are near the edge of the tile), UNKNOWN (reads that didn't pass PF but couldn't be diagnosed)
+ */
+ public static class PFFailSummaryMetric extends MetricBase {
+ /** The Tile that is described by this metric. Can be a string (like "All") to mean some marginal over tiles. * */
+ public String TILE = null;
+
+ /** The total number of reads examined */
+ public int READS = 0;
+
+ /** The number of non-PF reads in this tile. */
+ public int PF_FAIL_READS = 0;
+
+ /** The fraction of PF_READS */
+ public double PCT_PF_FAIL_READS = 0.0;
+
+ /** The number of non-PF reads in this tile that are deemed empty. */
+ public int PF_FAIL_EMPTY = 0;
+
+ /** The fraction of non-PF reads in this tile that are deemed empty (as fraction of all non-PF reads). */
+ public double PCT_PF_FAIL_EMPTY = 0.0;
+
+ /** The number of non-PF reads in this tile that are deemed multiclonal. */
+ public int PF_FAIL_POLYCLONAL = 0;
+
+ /** The fraction of non-PF reads in this tile that are deemed multiclonal (as fraction of all non-PF reads). */
+ public double PCT_PF_FAIL_POLYCLONAL = 0.0;
+
+ /** The number of non-PF reads in this tile that are deemed "misaligned". */
+ public int PF_FAIL_MISALIGNED = 0;
+
+ /** The fraction of non-PF reads in this tile that are deemed "misaligned" (as fraction of all non-PF reads). */
+ public double PCT_PF_FAIL_MISALIGNED = 0.0;
+
+ /** The number of non-PF reads in this tile that have not been classified. */
+ public int PF_FAIL_UNKNOWN = 0;
+
+ /** The fraction of non-PF reads in this tile that have not been classified (as fraction of all non-PF reads). */
+ public double PCT_PF_FAIL_UNKNOWN = 0.0;
+
+ // constructor takes a String for tile since we want to have one instance with tile="All". This tile will contain the summary of all the tiles
+ public PFFailSummaryMetric(final String tile) {
+ TILE = tile;
+ }
+
+ /** This ctor is necessary for when reading metrics from file */
+ public PFFailSummaryMetric() {
+ }
+
+ /**
+ * Adds the non-calculated fields from the other metric to this one.
+ *
+ * @param metric
+ */
+ public void merge(final PFFailSummaryMetric metric) {
+ this.READS += metric.READS;
+ this.PF_FAIL_READS += metric.PF_FAIL_READS;
+ this.PF_FAIL_EMPTY += metric.PF_FAIL_EMPTY;
+ this.PF_FAIL_MISALIGNED += metric.PF_FAIL_MISALIGNED;
+ this.PF_FAIL_POLYCLONAL += metric.PF_FAIL_POLYCLONAL;
+ this.PF_FAIL_UNKNOWN += metric.PF_FAIL_UNKNOWN;
+ }
+
+ public void calculateDerivedFields() {
+ //protect against divide by zero
+ if (this.READS != 0) {
+ this.PCT_PF_FAIL_READS = (double) this.PF_FAIL_READS / this.READS;
+ this.PCT_PF_FAIL_EMPTY = (double) this.PF_FAIL_EMPTY / this.READS;
+ this.PCT_PF_FAIL_MISALIGNED = (double) this.PF_FAIL_MISALIGNED / this.READS;
+ this.PCT_PF_FAIL_POLYCLONAL = (double) this.PF_FAIL_POLYCLONAL / this.READS;
+ this.PCT_PF_FAIL_UNKNOWN = (double) this.PF_FAIL_UNKNOWN / this.READS;
+ }
+ }
+ }
+
+ /**
+ * a simple function that counts how many elements in array are equal to 'toCount'
+ *
+ * @param array
+ * @param toCount
+ * @return number of elements in array that == 'toCount'
+ */
+ static private int countEquals(final byte[] array, final byte toCount) {
+ int count = 0;
+ for (final byte t : array) {
+ if (t == toCount) count++;
+ }
+ return count;
+ }
+
+ /**
+ * a simple function that counts how many elements in array are greater-than-or-equal-to 'value'
+ *
+ * @param array
+ * @param value
+ * @return number of elements in array that >= 'value'
+ */
+ static private int countGreaterThan(final byte[] array, final byte value) {
+ int count = 0;
+ for (final int t : array) {
+ if (t > value) count++;
+ }
+ return count;
+ }
+}
diff --git a/src/java/picard/metrics/GcBiasMetrics.java b/src/java/picard/metrics/GcBiasMetrics.java
new file mode 100644
index 0000000..69e3020
--- /dev/null
+++ b/src/java/picard/metrics/GcBiasMetrics.java
@@ -0,0 +1,40 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.metrics;
+
+/**
+ * Created by kbergin on 3/23/15.
+ */
+
+import htsjdk.samtools.metrics.MetricBase;
+import picard.analysis.GcBiasDetailMetrics;
+import picard.analysis.GcBiasSummaryMetrics;
+import htsjdk.samtools.metrics.MetricsFile;
+
+public class GcBiasMetrics extends MetricBase {
+ public MetricsFile<GcBiasDetailMetrics, ?> DETAILS = new MetricsFile<GcBiasDetailMetrics, Comparable>();
+
+ public GcBiasSummaryMetrics SUMMARY;
+}
diff --git a/src/java/picard/metrics/MultiLevelCollector.java b/src/java/picard/metrics/MultiLevelCollector.java
new file mode 100644
index 0000000..914adad
--- /dev/null
+++ b/src/java/picard/metrics/MultiLevelCollector.java
@@ -0,0 +1,341 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.metrics;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import picard.PicardException;
+import picard.analysis.MetricAccumulationLevel;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * MultiLevelCollector handles accumulating Metrics at different MetricAccumulationLevels(ALL_READS, SAMPLE, LIBRARY, READ_GROUP).
+ * Based on the accumulationLevels and readGroup records passed to its constructor, MultiLevelCollector
+ * will instantiate the number of PerUnitMetricCollector's needed to generate metrics for each of the levels provided.
+ *
+ * To Use:
+ *
+ * Instantiate a MultiLevelCollector and call setup(see thoughts about extending MultiLevelCollector below)
+ * setup will create the underlying classes that will handle the accumulation level logic.
+ * Pass all reads you wish to collect data against to MultiLevelCollector via the acceptRecord method
+ * Call finish and use addAllLevelsToFile to add all of the metrics at each accumulation level to the given file.
+ *
+ * Extend MultiLevelCollector and implement makeArg and makeChildCollector
+ * You will most likely want to make a class that extends PerUnitMetricCollector. This class should do the work of keeping
+ * track of values for one specific "accumulation unit" (e.g. for one library, or for one read group depending on what levels
+ * you are accumulating at).
+ *
+ * If a record has any expensive calculations to be done (that don't need to be done differently depending
+ * on what sample/library/read group the read is for) then create a container class for the results of these calculations and pass
+ * this class as the ARGTYPE of both the PerUnitMetricCollector and MultiLevelCollector. You can then do these calculations in the makeArg
+ * method and they will only be done once per record.
+ *
+ * @param <METRIC_TYPE> The type of metrics being collected
+ * @param <Histogram_KEY> If there is are Histograms related to metrics of type <BEAN> then <HKEY> is the key value to these Histograms
+ * @param <ARGTYPE> The type of argument passed to individual PerUnitMetricCollector (see SAMRecordMultilevelCollector and PerUnitMetricCollector)
+ */
+public abstract class MultiLevelCollector<METRIC_TYPE extends MetricBase, Histogram_KEY extends Comparable, ARGTYPE> {
+
+ public static final String UNKNOWN = "unknown";
+ //The collector that will accept all records (allReads is NULL if !calculateAll)
+ private PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> allReadCollector;
+
+ //A list of Distributor that is at most length 3, 1 for each (SAMPLE, LIBRARY, READ_GROUP) accumulation levels
+ //these will be listed in the order in which their children would be added to a metric file
+ private List<Distributor> outputOrderedDistributors;
+
+ //Convert the current SAMRecord and the ReferenceSequence for that record into an ARGTYPE object
+ //see accept record for use
+ protected abstract ARGTYPE makeArg(final SAMRecord samRec, final ReferenceSequence refSeq);
+
+ /**
+ * Construct a PerUnitMetricCollector with the given arguments.
+ * @param sample If aggregating by ALL_READS this will be null, otherwise the sample that will be used to identify
+ * this collector
+ * @param library If aggregating by SAMPLE this will be null, otherwise the library that will be used to identify
+ * this collector
+ * @param readGroup If aggregating by LIBRARY this will be null, otherwise the readGroup that will be used to identify
+ * this collector
+ * @return A PerUnitMetricCollector parameterized by the given arguments
+ */
+ protected abstract PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeChildCollector(final String sample, final String library, final String readGroup);
+
+ //These are exposed here (rather than being encapsulated in the Distributor subclasses below in order
+ //to provide subclasses with an explicit point to add initialization (specific to accumulation level) for
+ //a PerUnitMetricCollector it is creating
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeAllReadCollector() {
+ return makeChildCollector(null, null, null);
+ }
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeSampleCollector(final SAMReadGroupRecord rg) {
+ return makeChildCollector(rg.getSample(), null, null);
+ }
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeLibraryCollector(final SAMReadGroupRecord rg) {
+ return makeChildCollector(rg.getSample(), rg.getLibrary(), null);
+ }
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeReadGroupCollector(final SAMReadGroupRecord rg) {
+ return makeChildCollector(rg.getSample(), rg.getLibrary(), rg.getPlatformUnit());
+ }
+
+ /**
+ * Distributors group PerUnitMetricCollectors based on a AccumulationLevel. Their structure mimics
+ * PerUnitMetricCollectors but instead of adding records to metrics they identify which
+ * PerUnitMetricCollector should receive a specific record and distribute records on to the that collector
+ *
+ * There were will be 0 or 1 Distributors for each of the following MetriAcummulationLevels:
+ * ALL_READS, SAMPLE, LIBRARY, READ_GROUP
+ */
+ private abstract class Distributor {
+ //A Map mapping the key for a specific record (as determined by getKey) to the appropriate collector
+ private final Map<String, PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE>> collectors;
+
+ //Given a SAMReadGroupRecord, return the key that identifies the collector for the corresponding SAMRecord
+ protected abstract String getKey(final SAMReadGroupRecord rg);
+
+ //Make a PerUnitMetricCollector for this given Distributor
+ protected abstract PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeCollector(final SAMReadGroupRecord rg);
+
+ protected abstract PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeUnknownCollector();
+
+ public Distributor(final List<SAMReadGroupRecord> rgRecs) {
+ collectors = new LinkedHashMap<String, PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE>>();
+ for(final SAMReadGroupRecord rg : rgRecs) {
+ final String key = getKey(rg);
+ if(!collectors.containsKey(key)) {
+ collectors.put(key, makeCollector(rg));
+ }
+ }
+ }
+
+ /** Call finish on each PerUnitMetricCollector in this Aggregate Collector */
+ public void finish() {
+ for(final PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> collector : collectors.values()) {
+ collector.finish();
+ }
+ }
+
+ /** Call acceptRecord(args) on the record collector identified by getKey */
+ public void acceptRecord(final ARGTYPE args, final SAMReadGroupRecord rg) {
+
+ String key = UNKNOWN;
+ if(rg != null) {
+ final String computedKey = getKey(rg);
+ if(computedKey != null) {
+ key = computedKey;
+ }
+ }
+ PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> collector = collectors.get(key);
+ if (collector == null) {
+ if (!UNKNOWN.equals(key)) {
+ throw new PicardException("Could not find collector for " + key);
+ }
+ collector = makeUnknownCollector();
+ collectors.put(key, collector);
+ }
+ collector.acceptRecord(args);
+ }
+
+ /** Add all records to the MetricsFile passed in, this will happen in the order they were
+ * found in the input ReadGroup records */
+ public void addToFile(final MetricsFile<METRIC_TYPE, Histogram_KEY> file) {
+ for(final PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> collector : collectors.values()) {
+ collector.addMetricsToFile(file);
+ }
+ }
+ }
+
+ /** A dummy Distributor to handle the ALL_READS accumulation level. No distribution is required
+ * since there should only ever be one PerUnitMetricCollector for ALL_READS.
+ */
+ private class AllReadsDistributor extends Distributor {
+
+ public AllReadsDistributor(final List<SAMReadGroupRecord> rgRecs) {
+ super(new ArrayList<SAMReadGroupRecord>());
+ makeCollector(null);
+ }
+
+ @Override
+ protected String getKey(SAMReadGroupRecord rg) {
+ return null;
+ }
+
+ public void acceptRecord(final ARGTYPE args, final SAMReadGroupRecord rg) {
+ allReadCollector.acceptRecord(args);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeCollector(final SAMReadGroupRecord rg) {
+ allReadCollector = makeAllReadCollector();
+ return allReadCollector;
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeUnknownCollector() {
+ throw new UnsupportedOperationException("Should not happen");
+ }
+
+ @Override
+ public void finish() {
+ allReadCollector.finish();
+ }
+
+ @Override
+ public void addToFile(final MetricsFile<METRIC_TYPE, Histogram_KEY> file) {
+ allReadCollector.addMetricsToFile(file);
+ }
+ }
+
+ //Discriminates between records based on sample name, and calls acceptRecord on the appropriate PerUnitMetricCollectors
+ private class SampleDistributor extends Distributor {
+ public SampleDistributor(final List<SAMReadGroupRecord> rgRecs) {
+ super(rgRecs);
+ }
+
+ @Override
+ protected String getKey(SAMReadGroupRecord rg) {
+ return rg.getSample();
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeCollector(SAMReadGroupRecord rg) {
+ return makeSampleCollector(rg);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeUnknownCollector() {
+ return makeChildCollector(UNKNOWN, null, null);
+ }
+ }
+
+ //Discriminates between records based on library name, and calls acceptRecord on the appropriate PerUnitMetricCollectors
+ private class LibraryDistributor extends Distributor {
+ public LibraryDistributor(final List<SAMReadGroupRecord> rgRecs) {
+ super(rgRecs);
+ }
+
+ @Override
+ protected String getKey(SAMReadGroupRecord rg) {
+ return rg.getLibrary();
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeCollector(SAMReadGroupRecord rg) {
+ return makeLibraryCollector(rg);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeUnknownCollector() {
+ return makeChildCollector(UNKNOWN, UNKNOWN, null);
+ }
+ }
+
+ //Discriminates between records based on read group name, and calls acceptRecord on the appropriate PerUnitMetricCollectors
+ private class ReadGroupCollector extends Distributor {
+ public ReadGroupCollector(final List<SAMReadGroupRecord> rgRecs) {
+ super(rgRecs);
+ }
+
+ @Override
+ protected String getKey(SAMReadGroupRecord rg) {
+ return rg.getPlatformUnit();
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeCollector(SAMReadGroupRecord rg) {
+ return makeReadGroupCollector(rg);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> makeUnknownCollector() {
+ return makeChildCollector(UNKNOWN, UNKNOWN, UNKNOWN);
+ }
+ }
+
+ /**
+ * Use an init method so that overloaded methods in subclasses can pass use parameters that are initialized in their constructor
+ * @param accumulationLevels PerUnitMetricCollectors will only be created for the levels identified by accumulationLevels
+ * @param samRgRecords PerUnitMetricCollectors will be created for each of the different samples, libraries, and
+ * readGroups found in the records depending on the accumulationLevels provided
+ */
+ protected void setup(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords) {
+ outputOrderedDistributors = new ArrayList<Distributor>(4);
+ if(accumulationLevels.contains(MetricAccumulationLevel.ALL_READS)) {
+ outputOrderedDistributors.add(new AllReadsDistributor(samRgRecords));
+ }
+ if (accumulationLevels.contains(MetricAccumulationLevel.SAMPLE)) {
+ outputOrderedDistributors.add(new SampleDistributor(samRgRecords));
+ }
+
+ if(accumulationLevels.contains(MetricAccumulationLevel.LIBRARY)) {
+ outputOrderedDistributors.add(new LibraryDistributor(samRgRecords));
+ }
+
+ if(accumulationLevels.contains(MetricAccumulationLevel.READ_GROUP)) {
+ outputOrderedDistributors.add(new ReadGroupCollector(samRgRecords));
+ }
+ }
+
+ /**
+ * Construct a argument of ARGTYPE using the given SAMRecord and ReferenceSequence then pass
+ * this value to all collectors that should include this record
+ */
+ public void acceptRecord(final SAMRecord record, final ReferenceSequence refSeq) {
+ final ARGTYPE arg = makeArg(record, refSeq);
+
+ for(final Distributor collector : outputOrderedDistributors) {
+ collector.acceptRecord(arg, record.getReadGroup());
+ }
+ }
+
+ /**
+ * Call finish on all PerUnitMetricCollectors
+ */
+ public void finish() {
+ for(final Distributor collector : outputOrderedDistributors) {
+ collector.finish();
+ }
+ }
+
+ /** Get the PerUnitMetricCollector that collects reads for all levels */
+ public PerUnitMetricCollector<METRIC_TYPE, Histogram_KEY, ARGTYPE> getAllReadsCollector() {
+ return allReadCollector;
+ }
+
+ /** Add all metrics to the given file in the following MetricAccumulationLevel order
+ * ALL_READS, SAMPLE, LIBRARY, READ_GROUP.
+ */
+ public void addAllLevelsToFile(final MetricsFile<METRIC_TYPE, Histogram_KEY> file) {
+ for(final Distributor collector : outputOrderedDistributors) {
+ collector.addToFile(file);
+ }
+ }
+}
diff --git a/src/java/picard/metrics/MultilevelMetrics.java b/src/java/picard/metrics/MultilevelMetrics.java
new file mode 100644
index 0000000..d845a63
--- /dev/null
+++ b/src/java/picard/metrics/MultilevelMetrics.java
@@ -0,0 +1,18 @@
+package picard.metrics;
+
+
+import htsjdk.samtools.metrics.MetricBase;
+
+public class MultilevelMetrics extends MetricBase {
+ /** The sample to which these metrics apply. If null, it means they apply
+ * to all reads in the file. */
+ public String SAMPLE;
+
+ /** The library to which these metrics apply. If null, it means that the
+ * metrics were accumulated at the sample level. */
+ public String LIBRARY = null;
+
+ /** The read group to which these metrics apply. If null, it means that
+ * the metrics were accumulated at the library or sample level.*/
+ public String READ_GROUP = null;
+}
diff --git a/src/java/picard/metrics/PerUnitMetricCollector.java b/src/java/picard/metrics/PerUnitMetricCollector.java
new file mode 100644
index 0000000..846f920
--- /dev/null
+++ b/src/java/picard/metrics/PerUnitMetricCollector.java
@@ -0,0 +1,61 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.metrics;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+
+/**
+ * PerRecordCollector - An interface for classes that collect data in order to generate one or more metrics.
+ * This process usually occurs in the following fashion:
+ * 1. Loop through a data set (usually all records in a BAM file) and call collector.acceptRecord( data ),
+ * data in this step is usually added to metrics/Histogram objects
+ * 2. Call collector.finish() - perform any final calculations necessary after ALL records have been accepted
+ * 3. addMetricsToFile is then used to add any metric(s) or Histogram(s) to the given file
+ *
+ * BEAN - The Metric type we are generating
+ * HKEY - The Key used in any Histograms, use a Wildcard(?) type if there are no Histograms
+ * ARGTYPE - Collectors are often used in groups of accumulation levels, in order to avoid recalculating
+ * any information needed by multiple collectors we allow different types of arguments that
+ * extend DefaultPerRecordCollectorArgs to accommodate any computed values
+ */
+public interface PerUnitMetricCollector<BEAN extends MetricBase, HKEY extends Comparable, ARGTYPE> {
+ /**
+ * Add a SAMRecord (with ReferenceSequence and Read Group info) to the metric(s) being calculated)
+ * @param args Contains SAMRecord, SAMReadGroupRecord, ReferenceSequence of current record and any previously
+ * computed values that might be needed for this class
+ */
+ public void acceptRecord(final ARGTYPE args);
+
+ /** When all records have been collected, compute any final values needed to finish constructing metrics/Histogram */
+ public void finish();
+
+ /**
+ * Any metrics collected will be added to the metric file provided.
+ * @param file MetricsFile to which all metrics created by this collector should be added
+ */
+ public void addMetricsToFile(final MetricsFile<BEAN, HKEY> file);
+}
+
diff --git a/src/java/picard/metrics/SAMRecordAndReference.java b/src/java/picard/metrics/SAMRecordAndReference.java
new file mode 100644
index 0000000..6c7a498
--- /dev/null
+++ b/src/java/picard/metrics/SAMRecordAndReference.java
@@ -0,0 +1,22 @@
+package picard.metrics;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.reference.ReferenceSequence;
+
+public class SAMRecordAndReference {
+ private final SAMRecord samRec;
+ private final ReferenceSequence refSeq;
+
+ public SAMRecordAndReference(final SAMRecord samRec, final ReferenceSequence refSeq) {
+ this.samRec = samRec;
+ this.refSeq = refSeq;
+ }
+
+ public SAMRecord getSamRecord() {
+ return samRec;
+ }
+
+ public ReferenceSequence getReferenceSequence() {
+ return refSeq;
+ }
+}
diff --git a/src/java/picard/metrics/SAMRecordAndReferenceMultiLevelCollector.java b/src/java/picard/metrics/SAMRecordAndReferenceMultiLevelCollector.java
new file mode 100644
index 0000000..7feadc4
--- /dev/null
+++ b/src/java/picard/metrics/SAMRecordAndReferenceMultiLevelCollector.java
@@ -0,0 +1,15 @@
+package picard.metrics;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.reference.ReferenceSequence;
+
+public abstract class SAMRecordAndReferenceMultiLevelCollector<BEAN extends MetricBase, HKEY extends Comparable> extends MultiLevelCollector<BEAN, HKEY, SAMRecordAndReference> {
+
+ @Override
+ protected SAMRecordAndReference makeArg(SAMRecord samRec, final ReferenceSequence refSeq) {
+ return new SAMRecordAndReference(samRec, refSeq);
+ }
+}
+
+
diff --git a/src/java/picard/metrics/SAMRecordMultiLevelCollector.java b/src/java/picard/metrics/SAMRecordMultiLevelCollector.java
new file mode 100644
index 0000000..14c9968
--- /dev/null
+++ b/src/java/picard/metrics/SAMRecordMultiLevelCollector.java
@@ -0,0 +1,14 @@
+package picard.metrics;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.reference.ReferenceSequence;
+
+/** Defines a MultilevelPerRecordCollector using the argument type of SAMRecord so that this doesn't have to be redefined for each subclass of MultilevelPerRecordCollector */
+public abstract class SAMRecordMultiLevelCollector<BEAN extends MetricBase, HKEY extends Comparable> extends MultiLevelCollector<BEAN, HKEY, SAMRecord> {
+
+ @Override
+ protected SAMRecord makeArg(SAMRecord samRec, final ReferenceSequence refSeq) {
+ return samRec;
+ }
+}
diff --git a/src/java/picard/pedigree/PedFile.java b/src/java/picard/pedigree/PedFile.java
new file mode 100644
index 0000000..fae0464
--- /dev/null
+++ b/src/java/picard/pedigree/PedFile.java
@@ -0,0 +1,171 @@
+package picard.pedigree;
+
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.RuntimeIOException;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.regex.Pattern;
+
+/**
+ * Represents a .ped file of family information as documented here:
+ * http://pngu.mgh.harvard.edu/~purcell/plink/data.shtml
+ *
+ * Stores the information in memory as a map of individualId -> Pedigree information for that individual
+ */
+public class PedFile extends TreeMap<String, PedFile.PedTrio> {
+ private static final Log log = Log.getInstance(PedFile.class);
+ static final Pattern WHITESPACE = Pattern.compile("\\s+");
+ static final Pattern TAB = Pattern.compile("\\t");
+ private final Pattern delimiterPattern;
+ private final String delimiterString; // A textual representation of the delimiter, for output purposes
+
+ // These two are really for PedTrio, but they can't be static in there and need to be accessed outside of PedFile
+ public static final Number NO_PHENO = new Integer(-9);
+ public static final Sex UNKNOWN_SEX = Sex.Unknown;
+
+ public PedFile(final boolean isTabMode) {
+ delimiterPattern = isTabMode ? TAB : WHITESPACE;
+ delimiterString = isTabMode ? "tabs" : "whitespace";
+ }
+
+ /** Adds a trio to the PedFile keyed by the individual id. */
+ public void add(final PedTrio trio) {
+ put(trio.getIndividualId(), trio);
+ }
+
+ /**
+ * Writes a set of pedigrees out to disk.
+ */
+ public void write(final File file) {
+ IOUtil.assertFileIsWritable(file);
+ final BufferedWriter out = IOUtil.openFileForBufferedWriting(file);
+
+ try {
+ for (final PedTrio trio : values()) {
+ out.write(trio.getFamilyId());
+ out.write("\t");
+ out.write(trio.getIndividualId());
+ out.write("\t");
+ out.write(trio.getPaternalId());
+ out.write("\t");
+ out.write(trio.getMaternalId());
+ out.write("\t");
+ out.write(String.valueOf(trio.getSex().toCode()));
+ out.write("\t");
+ out.write(trio.getPhenotype().toString());
+ out.newLine();
+ }
+
+ out.close();
+ }
+ catch (final IOException ioe) {
+ throw new RuntimeIOException("IOException while writing to file " + file.getAbsolutePath(), ioe);
+ }
+ }
+
+ /**
+ * Attempts to read a pedigree file into memory.
+ */
+ public static PedFile fromFile(final File file, final boolean isTabMode) {
+ final PedFile pedFile = new PedFile(isTabMode);
+
+ IOUtil.assertFileIsReadable(file);
+ for (final String line : IOUtil.readLines(file)) {
+ final String[] fields = pedFile.delimiterPattern.split(line);
+ if (fields.length != 6) {
+ log.error("Ped file line contained invalid number of fields, skipping: " + line);
+ continue;
+ }
+
+ final PedTrio trio = pedFile.new PedTrio(fields[0],
+ fields[1],
+ fields[2],
+ fields[3],
+ Sex.fromCode(Integer.parseInt(fields[4])),
+ fields[5].contains(".") ? Double.parseDouble(fields[5]) : Integer.parseInt(fields[5])
+ );
+ pedFile.add(trio);
+ }
+
+ return pedFile;
+ }
+
+ /**
+ * Scans through the pedigrees and removes all entries that do not have both paternal and maternal ids set.
+ */
+ public PedFile removeIncompleteTrios() {
+ final Iterator<Map.Entry<String,PedTrio>> iterator = entrySet().iterator();
+
+ while (iterator.hasNext()) {
+ if (!iterator.next().getValue().hasBothParents()) iterator.remove();
+ }
+
+ return this;
+ }
+
+ public class PedTrio {
+ private final String familyId;
+ private final String individualId;
+ private final String paternalId;
+ private final String maternalId;
+ private final Sex sex;
+ private final Number phenotype;
+
+ /** Constructs a TRIO that cannot be modified after the fact. */
+ public PedTrio(final String familyId, final String individualId, final String paternalId, final String maternalId, final Sex sex, final Number phenotype) {
+ if (delimiterPattern.split(familyId).length != 1) throw new IllegalArgumentException("FamilyID cannot contain " + delimiterString + ": [" + familyId + "]");
+ if (delimiterPattern.split(individualId).length != 1) throw new IllegalArgumentException("IndividualID cannot contain " + delimiterString + ": [" + individualId + "]");
+ if (delimiterPattern.split(paternalId).length != 1) throw new IllegalArgumentException("PaternalID cannot contain " + delimiterString + ": [" + paternalId + "]");
+ if (delimiterPattern.split(maternalId).length != 1) throw new IllegalArgumentException("MaternalID cannot contain " + delimiterString + ": [" + maternalId + "]");
+
+ this.familyId = familyId;
+ this.individualId = individualId;
+ this.paternalId = paternalId;
+ this.maternalId = maternalId;
+ this.sex = sex;
+ this.phenotype = phenotype;
+ }
+
+ /** True if this record has paternal and maternal ids, otherwise false. */
+ public boolean hasBothParents() {
+ return this.paternalId != null && this.maternalId != null;
+ }
+
+ public String getFamilyId() { return familyId; }
+ public String getIndividualId() { return individualId; }
+ public String getPaternalId() { return paternalId; }
+ public String getMaternalId() { return maternalId; }
+ public Sex getSex() { return sex; }
+ public Number getPhenotype() { return phenotype; }
+ }
+
+ /** Function that accepts a map from sample-name to its sex and creates a PEDFile
+ * documenting the sexes. Note that the parents are created as UNKNOWNS in this implementation
+ * as the purpose is only to create a PED file for the sex of the samples, not the whole pedigree
+ * @param sampleSexes a map from sample-name to its sex
+ * @return a PedFile object that contains data.
+ */
+ static public PedFile fromSexMap(final Map<String, Sex> sampleSexes) {
+
+ final PedFile pedfile = new PedFile(true);
+ int parentCounter = 1;
+ for (final Map.Entry<String, Sex> sampleSex : sampleSexes.entrySet()) {
+ final PedFile.PedTrio ped = pedfile.new PedTrio(
+ sampleSex.getKey(), sampleSex.getKey(),
+ "UNKNOWN" + (parentCounter),
+ "UNKNOWN" + (parentCounter + 1),
+ sampleSex.getValue(), PedFile.NO_PHENO);
+ parentCounter += 2;
+
+ pedfile.add(ped);
+ }
+
+ return pedfile;
+ }
+}
diff --git a/src/java/picard/pedigree/Sex.java b/src/java/picard/pedigree/Sex.java
new file mode 100644
index 0000000..041717f
--- /dev/null
+++ b/src/java/picard/pedigree/Sex.java
@@ -0,0 +1,26 @@
+package picard.pedigree;
+
+/**
+ * Represents the sex of an individual.
+ */
+public enum Sex {
+ Male(1), Female(2), Unknown(-9);
+
+ /** The integer code used when reading/writing ped files. */
+ private final int code;
+
+ /** Private constructor that takes the pedigree code for sex. */
+ private Sex(final int code) {
+ this.code = code;
+ }
+
+ /** Returns the code used to encode this sex in a ped/fam file. */
+ public int toCode() { return this.code;}
+
+ /** Decodes the Sex from a numeric code. Note that any value other than 1 or 2 will return Unknown. */
+ public static Sex fromCode(final int code) {
+ if (code == Male.code) return Male;
+ else if (code == Female.code) return Female;
+ else return Unknown;
+ }
+}
diff --git a/src/java/picard/reference/ExtractSequences.java b/src/java/picard/reference/ExtractSequences.java
new file mode 100644
index 0000000..2270b6c
--- /dev/null
+++ b/src/java/picard/reference/ExtractSequences.java
@@ -0,0 +1,116 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.reference;
+
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.SequenceUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Fasta;
+import picard.cmdline.StandardOptionDefinitions;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Simple command line program that allows sub-sequences represented by an interval
+ * list to be extracted from a reference sequence file.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Extracts one or more intervals described in an interval_list file " +
+ "from a given reference sequence and writes them out in FASTA format. Requires a fasta index " +
+ "file to be present.",
+ usageShort = "Extracts intervals from a reference sequence, writing them to a FASTA file",
+ programGroup = Fasta.class
+)
+public class ExtractSequences extends CommandLineProgram {
+
+ @Option(doc="Interval list describing intervals to be extracted from the reference sequence.")
+ public File INTERVAL_LIST;
+
+ @Option(shortName= StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc="Reference sequence file.")
+ public File REFERENCE_SEQUENCE;
+
+ @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output fasta file.")
+ public File OUTPUT;
+
+ @Option(doc="Maximum line length for sequence data.")
+ public int LINE_LENGTH = 80;
+
+ public static void main(final String[] args) {
+ new ExtractSequences().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INTERVAL_LIST);
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final IntervalList intervals = IntervalList.fromFile(INTERVAL_LIST);
+ final ReferenceSequenceFile ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
+ SequenceUtil.assertSequenceDictionariesEqual(intervals.getHeader().getSequenceDictionary(), ref.getSequenceDictionary());
+
+ final BufferedWriter out = IOUtil.openFileForBufferedWriting(OUTPUT);
+
+ for (final Interval interval : intervals) {
+ final ReferenceSequence seq = ref.getSubsequenceAt(interval.getSequence(), interval.getStart(), interval.getEnd());
+ final byte[] bases = seq.getBases();
+ if (interval.isNegativeStrand()) SequenceUtil.reverseComplement(bases);
+
+ try {
+ out.write(">");
+ out.write(interval.getName());
+ out.write("\n");
+
+ for (int i=0; i<bases.length; ++i) {
+ if (i > 0 && i % LINE_LENGTH == 0) out.write("\n");
+ out.write(bases[i]);
+ }
+
+ out.write("\n");
+ }
+ catch (IOException ioe) {
+ throw new PicardException("Error writing to file " + OUTPUT.getAbsolutePath(), ioe);
+
+ }
+ }
+
+ CloserUtil.close(out);
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/reference/NormalizeFasta.java b/src/java/picard/reference/NormalizeFasta.java
new file mode 100644
index 0000000..4f798fb
--- /dev/null
+++ b/src/java/picard/reference/NormalizeFasta.java
@@ -0,0 +1,97 @@
+package picard.reference;
+
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.RuntimeIOException;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Fasta;
+import picard.cmdline.StandardOptionDefinitions;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Little program to "normalize" a fasta file to ensure that all line of sequence are the
+ * same length, and are a reasonable length!
+ */
+ at CommandLineProgramProperties(
+ usage = "Takes any file that conforms to the fasta format and " +
+ "normalizes it so that all lines of sequence except the last line per named sequence " +
+ "are of the same length.",
+ usageShort = "Normalizes lines of sequence in a fasta file to be of the same length",
+ programGroup = Fasta.class
+)
+public class NormalizeFasta extends CommandLineProgram {
+
+ @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The input fasta file to normalize.")
+ public File INPUT;
+
+ @Option(shortName= StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output fasta file to write.")
+ public File OUTPUT;
+
+ @Option(doc="The line length to be used for the output fasta file.")
+ public int LINE_LENGTH=100;
+
+ @Option(doc="Truncate sequence names at first whitespace.")
+ public boolean TRUNCATE_SEQUENCE_NAMES_AT_WHITESPACE=false;
+
+ private final Log log = Log.getInstance(NormalizeFasta.class);
+
+ public static void main(final String[] args) {
+ new NormalizeFasta().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ if (INPUT.getAbsoluteFile().equals(OUTPUT.getAbsoluteFile())) {
+ throw new IllegalArgumentException("Input and output cannot be the same file.");
+ }
+
+ final ReferenceSequenceFile ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(INPUT, TRUNCATE_SEQUENCE_NAMES_AT_WHITESPACE);
+ final BufferedWriter out = IOUtil.openFileForBufferedWriting(OUTPUT);
+
+ ReferenceSequence seq = null;
+ while ((seq = ref.nextSequence()) != null) {
+ final String name = seq.getName();
+ final byte[] bases = seq.getBases();
+
+ try {
+ out.write(">");
+ out.write(name);
+ out.newLine();
+
+ if (bases.length == 0) {
+ log.warn("Sequence " + name + " contains 0 bases.");
+ }
+ else {
+ for (int i=0; i<bases.length; ++i) {
+ if (i > 0 && i % LINE_LENGTH == 0) out.write("\n");
+ out.write(bases[i]);
+ }
+
+ out.write("\n");
+ }
+ }
+ catch (IOException ioe) {
+ throw new PicardException("Error writing to file " + OUTPUT.getAbsolutePath(), ioe);
+
+ }
+ }
+ try {
+ out.close();
+ } catch (IOException e) {
+ throw new RuntimeIOException(e);
+ }
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/AbstractAlignmentMerger.java b/src/java/picard/sam/AbstractAlignmentMerger.java
new file mode 100644
index 0000000..26614b8
--- /dev/null
+++ b/src/java/picard/sam/AbstractAlignmentMerger.java
@@ -0,0 +1,756 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.BAMRecordCodec;
+import htsjdk.samtools.Cigar;
+import htsjdk.samtools.CigarElement;
+import htsjdk.samtools.CigarOperator;
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordCoordinateComparator;
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.SAMRecordUtil;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.filter.FilteringIterator;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
+import htsjdk.samtools.util.CigarUtil;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.SortingCollection;
+import picard.PicardException;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Abstract class that coordinates the general task of taking in a set of alignment information,
+ * possibly in SAM format, possibly in other formats, and merging that with the set of all reads
+ * for which alignment was attempted, stored in an unmapped SAM file.
+ * <p/>
+ * The order of processing is as follows:
+ * <p/>
+ * 1. Get records from the unmapped bam and the alignment data
+ * 2. Merge the alignment information and public tags ONLY from the aligned SAMRecords
+ * 3. Do additional modifications -- handle clipping, trimming, etc.
+ * 4. Fix up mate information on paired reads
+ * 5. Do a final calculation of the NM and UQ tags.
+ * 6. Write the records to the output file.
+ * <p/>
+ * Concrete subclasses which extend AbstractAlignmentMerger should implement getQueryNameSortedAlignedRecords.
+ * If these records are not in queryname order, mergeAlignment will throw an IllegalStateException.
+ * <p/>
+ * Subclasses may optionally implement ignoreAlignment(), which can be used to skip over certain alignments.
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+public abstract class AbstractAlignmentMerger {
+
+ public static final int MAX_RECORDS_IN_RAM = 500000;
+
+ private static final char[] RESERVED_ATTRIBUTE_STARTS = {'X', 'Y', 'Z'};
+
+ private final Log log = Log.getInstance(AbstractAlignmentMerger.class);
+ private final ProgressLogger progress = new ProgressLogger(this.log, 1000000, "Merged", "records");
+
+ private final File unmappedBamFile;
+ private final File targetBamFile;
+ private final SAMSequenceDictionary sequenceDictionary;
+ private ReferenceSequenceFileWalker refSeq = null;
+ private final boolean clipAdapters;
+ private final boolean bisulfiteSequence;
+ private SAMProgramRecord programRecord;
+ private final boolean alignedReadsOnly;
+ private final SAMFileHeader header;
+ private final List<String> attributesToRetain = new ArrayList<String>();
+ private final List<String> attributesToRemove = new ArrayList<String>();
+ protected final File referenceFasta;
+ private final Integer read1BasesTrimmed;
+ private final Integer read2BasesTrimmed;
+ private final List<SamPairUtil.PairOrientation> expectedOrientations;
+ private final SortOrder sortOrder;
+ private MultiHitAlignedReadIterator alignedIterator = null;
+ private boolean clipOverlappingReads = true;
+ private int maxRecordsInRam = MAX_RECORDS_IN_RAM;
+ private final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy;
+ private boolean keepAlignerProperPairFlags = false;
+ private boolean addMateCigar = false;
+
+ private final SamRecordFilter alignmentFilter = new SamRecordFilter() {
+ public boolean filterOut(final SAMRecord record) {
+ return ignoreAlignment(record);
+ }
+
+ public boolean filterOut(final SAMRecord first, final SAMRecord second) {
+ throw new UnsupportedOperationException("Paired SamRecordFilter not implemented!");
+ }
+ };
+ private boolean includeSecondaryAlignments = true;
+
+ /** Class that allows a Sorting Collection and a SAMFileWriter to be treated identically. */
+ private static class Sink {
+ private final SAMFileWriter writer;
+ private final SortingCollection<SAMRecord> sorter;
+
+ /** Constructs a sink that outputs to a SAMFileWriter. */
+ public Sink(final SAMFileWriter writer) {
+ this.writer = writer;
+ this.sorter = null;
+ }
+
+ /** Constructs a sink that outputs to a Sorting Collection. */
+ public Sink(final SortingCollection<SAMRecord> sorter) {
+ this.writer = null;
+ this.sorter = sorter;
+ }
+
+ /** Adds a record to the sink. */
+ void add(final SAMRecord rec) {
+ if (writer != null) writer.addAlignment(rec);
+ if (sorter != null) sorter.add(rec);
+ }
+
+ /** Closes the underlying resource. */
+ void close() {
+ if (this.writer != null) this.writer.close();
+ if (this.sorter != null) this.sorter.doneAdding();
+ }
+ }
+
+
+ protected abstract CloseableIterator<SAMRecord> getQuerynameSortedAlignedRecords();
+
+ protected boolean ignoreAlignment(final SAMRecord sam) { return false; } // default implementation
+
+ /**
+ * Constructor
+ *
+ * @param unmappedBamFile The BAM file that was used as the input to the aligner, which will
+ * include info on all the reads that did not map. Required.
+ * @param targetBamFile The file to which to write the merged SAM records. Required.
+ * @param referenceFasta The reference sequence for the map files. Required.
+ * @param clipAdapters Whether adapters marked in unmapped BAM file should be marked as
+ * soft clipped in the merged bam. Required.
+ * @param bisulfiteSequence Whether the reads are bisulfite sequence (used when calculating the
+ * NM and UQ tags). Required.
+ * @param alignedReadsOnly Whether to output only those reads that have alignment data
+ * @param programRecord Program record for target file SAMRecords created.
+ * @param attributesToRetain private attributes from the alignment record that should be
+ * included when merging. This overrides the exclusion of
+ * attributes whose tags start with the reserved characters
+ * of X, Y, and Z
+ * @param attributesToRemove attributes from the alignment record that should be
+ * removed when merging. This overrides attributesToRetain if they share
+ * common tags.
+ * @param read1BasesTrimmed The number of bases trimmed from start of read 1 prior to alignment. Optional.
+ * @param read2BasesTrimmed The number of bases trimmed from start of read 2 prior to alignment. Optional.
+ * @param expectedOrientations A List of SamPairUtil.PairOrientations that are expected for
+ * aligned pairs. Used to determine the properPair flag.
+ * @param sortOrder The order in which the merged records should be output. If null,
+ * output will be coordinate-sorted
+ * @param primaryAlignmentSelectionStrategy What to do when there are multiple primary alignments, or multiple
+ * alignments but none primary, for a read or read pair.
+ * @param addMateCigar True if we are to add or maintain the mate CIGAR (MC) tag, false if we are to remove or not include.
+ */
+ public AbstractAlignmentMerger(final File unmappedBamFile, final File targetBamFile,
+ final File referenceFasta, final boolean clipAdapters,
+ final boolean bisulfiteSequence, final boolean alignedReadsOnly,
+ final SAMProgramRecord programRecord, final List<String> attributesToRetain,
+ final List<String> attributesToRemove,
+ final Integer read1BasesTrimmed, final Integer read2BasesTrimmed,
+ final List<SamPairUtil.PairOrientation> expectedOrientations,
+ final SAMFileHeader.SortOrder sortOrder,
+ final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy,
+ final boolean addMateCigar) {
+ IOUtil.assertFileIsReadable(unmappedBamFile);
+ IOUtil.assertFileIsWritable(targetBamFile);
+ IOUtil.assertFileIsReadable(referenceFasta);
+
+ this.unmappedBamFile = unmappedBamFile;
+ this.targetBamFile = targetBamFile;
+ this.referenceFasta = referenceFasta;
+
+ this.refSeq = new ReferenceSequenceFileWalker(referenceFasta);
+ this.sequenceDictionary = refSeq.getSequenceDictionary();
+ if (this.sequenceDictionary == null) {
+ throw new PicardException("No sequence dictionary found for " + referenceFasta.getAbsolutePath() +
+ ". Use CreateSequenceDictionary.jar to create a sequence dictionary.");
+ }
+
+ this.clipAdapters = clipAdapters;
+ this.bisulfiteSequence = bisulfiteSequence;
+ this.alignedReadsOnly = alignedReadsOnly;
+
+ this.header = new SAMFileHeader();
+ this.sortOrder = sortOrder != null ? sortOrder : SortOrder.coordinate;
+ header.setSortOrder(SortOrder.coordinate);
+ if (programRecord != null) {
+ setProgramRecord(programRecord);
+ }
+ header.setSequenceDictionary(this.sequenceDictionary);
+ if (attributesToRetain != null) {
+ this.attributesToRetain.addAll(attributesToRetain);
+ }
+ if (attributesToRemove != null) {
+ this.attributesToRemove.addAll(attributesToRemove);
+ // attributesToRemove overrides attributesToRetain
+ if (!this.attributesToRetain.isEmpty()) {
+ for (String attribute : this.attributesToRemove) {
+ if (this.attributesToRetain.contains(attribute)) {
+ log.info("Overriding retaining the " + attribute + " tag since remove overrides retain.");
+ this.attributesToRetain.remove(attribute);
+ }
+ }
+ }
+ }
+ this.read1BasesTrimmed = read1BasesTrimmed;
+ this.read2BasesTrimmed = read2BasesTrimmed;
+ this.expectedOrientations = expectedOrientations;
+
+ this.primaryAlignmentSelectionStrategy = primaryAlignmentSelectionStrategy;
+
+ this.addMateCigar = addMateCigar;
+ }
+
+ /** Allows the caller to override the maximum records in RAM. */
+ public void setMaxRecordsInRam(final int maxRecordsInRam) {
+ this.maxRecordsInRam = maxRecordsInRam;
+ }
+
+ /**
+ * Do this unconditionally, not just for aligned records, for two reasons:
+ * - An unaligned read has been processed by the aligner, so it is more truthful.
+ * - When chaining additional PG records, having all the records in the output file refer to the same PG
+ * record means that only one chain will need to be created, rather than a chain for the mapped reads
+ * and a separate chain for the unmapped reads.
+ */
+ private void maybeSetPgTag(final SAMRecord rec) {
+ if (this.programRecord != null) {
+ rec.setAttribute(ReservedTagConstants.PROGRAM_GROUP_ID, this.programRecord.getProgramGroupId());
+ }
+ }
+
+ /**
+ * /**
+ * Merges the alignment data with the non-aligned records from the source BAM file.
+ */
+ public void mergeAlignment(final File referenceFasta) {
+ // Open the file of unmapped records and write the read groups to the the header for the merged file
+ final SamReader unmappedSam = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).open(this.unmappedBamFile);
+
+ final CloseableIterator<SAMRecord> unmappedIterator = unmappedSam.iterator();
+ this.header.setReadGroups(unmappedSam.getFileHeader().getReadGroups());
+
+ int aligned = 0;
+ int unmapped = 0;
+
+ // Get the aligned records and set up the first one
+ alignedIterator = new MultiHitAlignedReadIterator(new FilteringIterator(getQuerynameSortedAlignedRecords(), alignmentFilter), primaryAlignmentSelectionStrategy);
+ HitsForInsert nextAligned = nextAligned();
+
+ // Check that the program record we are going to insert is not already used in the unmapped SAM
+ // Must come after calling getQuerynameSortedAlignedRecords() in case opening the aligned records
+ // sets the program group
+ if (getProgramRecord() != null) {
+ for (final SAMProgramRecord pg : unmappedSam.getFileHeader().getProgramRecords()) {
+ if (pg.getId().equals(getProgramRecord().getId())) {
+ throw new PicardException("Program Record ID already in use in unmapped BAM file.");
+ }
+ }
+ }
+
+ // If the output requested is coordinate order then run everything through a sorting collection
+ // in order to have access to the records in coordinate order prior to outputting them. Otherwise
+ // write directly to the output BAM file in queryname order.
+ final Sink sink;
+ if (this.sortOrder == SortOrder.coordinate) {
+ final SortingCollection<SAMRecord> sorted1 = SortingCollection.newInstance(
+ SAMRecord.class, new BAMRecordCodec(header), new SAMRecordCoordinateComparator(),
+ MAX_RECORDS_IN_RAM);
+ sink = new Sink(sorted1);
+ }
+ else { // catches queryname and unsorted
+ final SAMFileHeader header = this.header.clone();
+ header.setSortOrder(this.sortOrder);
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(header, true, this.targetBamFile);
+ writer.setProgressLogger(new ProgressLogger(log, (int) 1e7, "Wrote", "records to output in queryname order"));
+ sink = new Sink(writer);
+ }
+
+ while (unmappedIterator.hasNext()) {
+ // Load next unaligned read or read pair.
+ final SAMRecord rec = unmappedIterator.next();
+
+ rec.setHeader(this.header);
+ maybeSetPgTag(rec);
+
+ final SAMRecord secondOfPair;
+ if (rec.getReadPairedFlag()) {
+ secondOfPair = unmappedIterator.next();
+ secondOfPair.setHeader(this.header);
+ maybeSetPgTag(secondOfPair);
+
+ // Validate that paired reads arrive as first of pair followed by second of pair
+ if (!rec.getReadName().equals(secondOfPair.getReadName()))
+ throw new PicardException("Second read from pair not found in unmapped bam: " + rec.getReadName() + ", " + secondOfPair.getReadName());
+
+ if (!rec.getFirstOfPairFlag())
+ throw new PicardException("First record in unmapped bam is not first of pair: " + rec.getReadName());
+ if (!secondOfPair.getReadPairedFlag())
+ throw new PicardException("Second record in unmapped bam is not marked as paired: " + secondOfPair.getReadName());
+ if (!secondOfPair.getSecondOfPairFlag())
+ throw new PicardException("Second record in unmapped bam is not second of pair: " + secondOfPair.getReadName());
+ } else {
+ secondOfPair = null;
+ }
+
+ // See if there are alignments for current unaligned read or read pair.
+ if (nextAligned != null && rec.getReadName().equals(nextAligned.getReadName())) {
+ // If there are multiple alignments for a read (pair), then the unaligned SAMRecord must be cloned
+ // before copying info from the aligned record to the unaligned.
+ final boolean clone = nextAligned.numHits() > 1 || nextAligned.hasSupplementalHits();
+ SAMRecord r1Primary = null, r2Primary = null;
+
+ if (rec.getReadPairedFlag()) {
+ for (int i = 0; i < nextAligned.numHits(); ++i) {
+ // firstAligned or secondAligned may be null, if there wasn't an alignment for the end,
+ // or if the alignment was rejected by ignoreAlignment.
+ final SAMRecord firstAligned = nextAligned.getFirstOfPair(i);
+ final SAMRecord secondAligned = nextAligned.getSecondOfPair(i);
+
+ final boolean isPrimaryAlignment = (firstAligned != null && !firstAligned.isSecondaryOrSupplementary()) ||
+ (secondAligned != null && !secondAligned.isSecondaryOrSupplementary());
+
+ final SAMRecord firstToWrite;
+ final SAMRecord secondToWrite;
+ if (clone) {
+ firstToWrite = clone(rec);
+ secondToWrite = clone(secondOfPair);
+ } else {
+ firstToWrite = rec;
+ secondToWrite = secondOfPair;
+ }
+
+ // If these are the primary alignments then stash them for use on any supplemental alignments
+ if (isPrimaryAlignment) {
+ r1Primary = firstToWrite;
+ r2Primary = secondToWrite;
+ }
+
+ transferAlignmentInfoToPairedRead(firstToWrite, secondToWrite, firstAligned, secondAligned);
+
+ // Only write unmapped read when it has the mate info from the primary alignment.
+ if (!firstToWrite.getReadUnmappedFlag() || isPrimaryAlignment) {
+ addIfNotFiltered(sink, firstToWrite);
+ if (firstToWrite.getReadUnmappedFlag()) ++unmapped;
+ else ++aligned;
+ }
+ if (!secondToWrite.getReadUnmappedFlag() || isPrimaryAlignment) {
+ addIfNotFiltered(sink, secondToWrite);
+ if (!secondToWrite.getReadUnmappedFlag()) ++aligned;
+ else ++unmapped;
+ }
+ }
+
+ // Take all of the supplemental reads which had been stashed and add them (as appropriate) to sorted
+ for (final boolean isRead1 : new boolean[]{true, false}) {
+ final List<SAMRecord> supplementals = isRead1 ? nextAligned.getSupplementalFirstOfPairOrFragment() : nextAligned.getSupplementalSecondOfPair();
+ final SAMRecord sourceRec = isRead1 ? rec : secondOfPair;
+ final SAMRecord matePrimary = isRead1 ? r2Primary : r1Primary;
+
+ for (final SAMRecord supp : supplementals) {
+ final SAMRecord out = clone(sourceRec);
+ transferAlignmentInfoToFragment(out, supp);
+ if (matePrimary != null) SamPairUtil.setMateInformationOnSupplementalAlignment(out, matePrimary, addMateCigar);
+ ++aligned;
+ addIfNotFiltered(sink, out);
+ }
+ }
+ } else {
+ for (int i = 0; i < nextAligned.numHits(); ++i) {
+ final SAMRecord recToWrite = clone ? clone(rec) : rec;
+ transferAlignmentInfoToFragment(recToWrite, nextAligned.getFragment(i));
+ addIfNotFiltered(sink, recToWrite);
+ if (recToWrite.getReadUnmappedFlag()) ++unmapped;
+ else ++aligned;
+ }
+ // Take all of the supplemental reads which had been stashed and add them (as appropriate) to sorted
+ for (final SAMRecord supplementalRec : nextAligned.getSupplementalFirstOfPairOrFragment()) {
+ final SAMRecord recToWrite = clone(rec);
+ transferAlignmentInfoToFragment(recToWrite, supplementalRec);
+ addIfNotFiltered(sink, recToWrite);
+ ++aligned;
+ }
+ }
+ nextAligned = nextAligned();
+ } else {
+ // There was no alignment for this read or read pair.
+ if (nextAligned != null &&
+ SAMRecordQueryNameComparator.compareReadNames(rec.getReadName(), nextAligned.getReadName()) > 0) {
+ throw new IllegalStateException("Aligned record iterator (" + nextAligned.getReadName() +
+ ") is behind the unmapped reads (" + rec.getReadName() + ")");
+ }
+ // No matching read from alignedIterator -- just output reads as is.
+ if (!alignedReadsOnly) {
+ sink.add(rec);
+ ++unmapped;
+ if (secondOfPair != null) {
+ sink.add(secondOfPair);
+ ++unmapped;
+ }
+ }
+ }
+ }
+ unmappedIterator.close();
+ if (alignedIterator.hasNext()) {
+ throw new IllegalStateException("Reads remaining on alignment iterator: " + alignedIterator.next().getReadName() + "!");
+ }
+ alignedIterator.close();
+ sink.close();
+
+ // Write the records to the output file in specified sorted order,
+ if (this.sortOrder == SortOrder.coordinate) {
+ header.setSortOrder(this.sortOrder);
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(header, true, this.targetBamFile);
+ writer.setProgressLogger(new ProgressLogger(log, (int) 1e7, "Wrote", "records from a sorting collection"));
+ final ProgressLogger finalProgress = new ProgressLogger(log, 10000000, "Written in coordinate order to output", "records");
+
+ for (final SAMRecord rec : sink.sorter) {
+ if (!rec.getReadUnmappedFlag()) {
+ if (refSeq != null) {
+ final byte[] referenceBases = refSeq.get(sequenceDictionary.getSequenceIndex(rec.getReferenceName())).getBases();
+ rec.setAttribute(SAMTag.NM.name(), SequenceUtil.calculateSamNmTag(rec, referenceBases, 0, bisulfiteSequence));
+
+ if (rec.getBaseQualities() != SAMRecord.NULL_QUALS) {
+ rec.setAttribute(SAMTag.UQ.name(), SequenceUtil.sumQualitiesOfMismatches(rec, referenceBases, 0, bisulfiteSequence));
+ }
+ }
+ }
+ writer.addAlignment(rec);
+ finalProgress.record(rec);
+ }
+ writer.close();
+ sink.sorter.cleanup();
+ }
+
+ CloserUtil.close(unmappedSam);
+ log.info("Wrote " + aligned + " alignment records and " + (alignedReadsOnly ? 0 : unmapped) + " unmapped reads.");
+ }
+
+ /**
+ * Add record if it is primary or optionally secondary.
+ */
+ private void addIfNotFiltered(final Sink out, final SAMRecord rec) {
+ if (includeSecondaryAlignments || !rec.getNotPrimaryAlignmentFlag()) {
+ out.add(rec);
+ this.progress.record(rec);
+ }
+ }
+
+ private SAMRecord clone(final SAMRecord rec) {
+ try {
+ return (SAMRecord) rec.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new PicardException("Should never happen.");
+ }
+ }
+
+ /**
+ * @return Next read's alignment(s) from aligned input or null, if there are no more.
+ * The alignments are run through ignoreAlignment() filter before being returned, which may result
+ * in an entire read being skipped if all alignments for that read should be ignored.
+ */
+ private HitsForInsert nextAligned() {
+ if (alignedIterator.hasNext()) return alignedIterator.next();
+ return null;
+ }
+
+ /**
+ * Copies alignment info from aligned to unaligned read, clips as appropriate, and sets PG ID.
+ *
+ * @param unaligned Original SAMRecord, and object into which values are copied.
+ * @param aligned Holds alignment info that will be copied into unaligned.
+ */
+ private void transferAlignmentInfoToFragment(final SAMRecord unaligned, final SAMRecord aligned) {
+ setValuesFromAlignment(unaligned, aligned);
+ updateCigarForTrimmedOrClippedBases(unaligned, aligned);
+ if (SAMUtils.cigarMapsNoBasesToRef(unaligned.getCigar())) {
+ SAMUtils.makeReadUnmapped(unaligned);
+ } else if (SAMUtils.recordMapsEntirelyBeyondEndOfReference(aligned)) {
+ log.warn("Record mapped off end of reference; making unmapped: " + aligned);
+ SAMUtils.makeReadUnmapped(unaligned);
+ }
+ }
+
+ /**
+ * Copies alignment info from aligned to unaligned read, if there is an alignment, and sets mate information.
+ *
+ * @param firstUnaligned Original first of pair, into which alignment and pair info will be written.
+ * @param secondUnaligned Original second of pair, into which alignment and pair info will be written.
+ * @param firstAligned Aligned first of pair, or null if no alignment.
+ * @param secondAligned Aligned second of pair, or null if no alignment.
+ */
+ private void transferAlignmentInfoToPairedRead(final SAMRecord firstUnaligned, final SAMRecord secondUnaligned, final SAMRecord firstAligned, final SAMRecord secondAligned) {
+ if (firstAligned != null) transferAlignmentInfoToFragment(firstUnaligned, firstAligned);
+ if (secondAligned != null) transferAlignmentInfoToFragment(secondUnaligned, secondAligned);
+ if (isClipOverlappingReads()) clipForOverlappingReads(firstUnaligned, secondUnaligned);
+ SamPairUtil.setMateInfo(secondUnaligned, firstUnaligned, header, addMateCigar);
+ if (!keepAlignerProperPairFlags) {
+ SamPairUtil.setProperPairFlags(secondUnaligned, firstUnaligned, expectedOrientations);
+ }
+ }
+
+
+ /**
+ * Checks to see whether the ends of the reads overlap and soft clips reads
+ * them if necessary.
+ */
+ protected void clipForOverlappingReads(final SAMRecord read1, final SAMRecord read2) {
+ // If both reads are mapped, see if we need to clip the ends due to small
+ // insert size
+ if (!(read1.getReadUnmappedFlag() || read2.getReadUnmappedFlag())) {
+
+ if (read1.getReadNegativeStrandFlag() != read2.getReadNegativeStrandFlag()) {
+ final SAMRecord pos = (read1.getReadNegativeStrandFlag()) ? read2 : read1;
+ final SAMRecord neg = (read1.getReadNegativeStrandFlag()) ? read1 : read2;
+
+ // Innies only -- do we need to do anything else about jumping libraries?
+ if (pos.getAlignmentStart() < neg.getAlignmentEnd()) {
+ final int posDiff = pos.getAlignmentEnd() - neg.getAlignmentEnd();
+ final int negDiff = pos.getAlignmentStart() - neg.getAlignmentStart();
+
+ if (posDiff > 0) {
+ CigarUtil.softClip3PrimeEndOfRead(pos, Math.min(pos.getReadLength(),
+ pos.getReadLength() - posDiff + 1));
+ }
+
+ if (negDiff > 0) {
+ CigarUtil.softClip3PrimeEndOfRead(neg, Math.min(neg.getReadLength(),
+ neg.getReadLength() - negDiff + 1));
+ }
+
+ }
+ } else {
+ // TODO: What about RR/FF pairs?
+ }
+ }
+
+ }
+
+ /**
+ * Sets the values from the alignment record on the unaligned BAM record. This
+ * preserves all data from the unaligned record (ReadGroup, NoiseRead status, etc)
+ * and adds all the alignment info
+ *
+ * @param rec The unaligned read record
+ * @param alignment The alignment record
+ */
+ protected void setValuesFromAlignment(final SAMRecord rec, final SAMRecord alignment) {
+ for (final SAMRecord.SAMTagAndValue attr : alignment.getAttributes()) {
+ // Copy over any non-reserved attributes. attributesToRemove overrides attributesToRetain.
+ if ((!isReservedTag(attr.tag) || this.attributesToRetain.contains(attr.tag)) && !this.attributesToRemove.contains(attr.tag)) {
+ rec.setAttribute(attr.tag, attr.value);
+ }
+ }
+ rec.setReadUnmappedFlag(alignment.getReadUnmappedFlag());
+
+ // Note that it is important to get reference names rather than indices in case the sequence dictionaries
+ // in the two files are in different orders.
+ rec.setReferenceName(alignment.getReferenceName());
+
+ rec.setAlignmentStart(alignment.getAlignmentStart());
+ rec.setReadNegativeStrandFlag(alignment.getReadNegativeStrandFlag());
+ rec.setNotPrimaryAlignmentFlag(alignment.getNotPrimaryAlignmentFlag());
+ rec.setSupplementaryAlignmentFlag(alignment.getSupplementaryAlignmentFlag());
+ if (!alignment.getReadUnmappedFlag()) {
+ // only aligned reads should have cigar and mapping quality set
+ rec.setCigar(alignment.getCigar()); // cigar may change when a
+ // clipCigar called below
+ rec.setMappingQuality(alignment.getMappingQuality());
+ }
+ if (rec.getReadPairedFlag()) {
+ rec.setProperPairFlag(alignment.getProperPairFlag());
+ // Mate info and alignment size will get set by the ClippedPairFixer.
+ }
+
+ // If it's on the negative strand, reverse complement the bases
+ // and reverse the order of the qualities
+ if (rec.getReadNegativeStrandFlag()) {
+ SAMRecordUtil.reverseComplement(rec);
+ }
+
+ }
+
+ private static Cigar createNewCigarIfMapsOffEndOfReference(SAMFileHeader header,
+ boolean isUnmapped,
+ int referenceIndex,
+ int alignmentEnd,
+ int readLength,
+ Cigar oldCigar) {
+ Cigar newCigar = null;
+ if (!isUnmapped) {
+ final SAMSequenceRecord refseq = header.getSequence(referenceIndex);
+ final int overhang = alignmentEnd - refseq.getSequenceLength();
+ if (overhang > 0) {
+ // 1-based index of first base in read to clip.
+ int clipFrom = readLength - overhang + 1;
+ // we have to check if the last element is soft-clipping, so we can subtract that from clipFrom
+ final CigarElement cigarElement = oldCigar.getCigarElement(oldCigar.getCigarElements().size()-1);
+ if (CigarOperator.SOFT_CLIP == cigarElement.getOperator()) clipFrom -= cigarElement.getLength();
+ final List<CigarElement> newCigarElements = CigarUtil.softClipEndOfRead(clipFrom, oldCigar.getCigarElements());
+ newCigar = new Cigar(newCigarElements);
+ }
+ }
+ return newCigar;
+ }
+
+ /**
+ * Soft-clip an alignment that hangs off the end of its reference sequence. Checks both the read and its mate,
+ * if available.
+ *
+ * @param rec
+ */
+ public static void createNewCigarsIfMapsOffEndOfReference(final SAMRecord rec) {
+ // If the read maps off the end of the alignment, clip it
+ if (!rec.getReadUnmappedFlag()) {
+ final Cigar readCigar = createNewCigarIfMapsOffEndOfReference(rec.getHeader(),
+ rec.getReadUnmappedFlag(),
+ rec.getReferenceIndex(),
+ rec.getAlignmentEnd(),
+ rec.getReadLength(),
+ rec.getCigar());
+ if (null != readCigar) rec.setCigar(readCigar);
+ }
+
+ // If the read's mate maps off the end of the alignment, clip it
+ if (SAMUtils.hasMateCigar(rec)) {
+ Cigar mateCigar = SAMUtils.getMateCigar(rec);
+ mateCigar = createNewCigarIfMapsOffEndOfReference(rec.getHeader(),
+ rec.getMateUnmappedFlag(),
+ rec.getMateReferenceIndex(),
+ SAMUtils.getMateAlignmentEnd(rec), // NB: this could be computed without another call to getMateCigar
+ mateCigar.getReadLength(),
+ mateCigar);
+ if (null != mateCigar) rec.setAttribute(SAMTag.MC.name(), mateCigar.toString());
+ }
+ }
+
+ protected void updateCigarForTrimmedOrClippedBases(final SAMRecord rec, final SAMRecord alignment) {
+ // If the read was trimmed or not all the bases were sent for alignment, clip it
+ final int alignmentReadLength = alignment.getReadLength();
+ final int originalReadLength = rec.getReadLength();
+ final int trimmed = (!rec.getReadPairedFlag()) || rec.getFirstOfPairFlag()
+ ? this.read1BasesTrimmed != null ? this.read1BasesTrimmed : 0
+ : this.read2BasesTrimmed != null ? this.read2BasesTrimmed : 0;
+ final int notWritten = originalReadLength - (alignmentReadLength + trimmed);
+
+ // Update cigar if the mate maps off the reference
+ createNewCigarsIfMapsOffEndOfReference(rec);
+
+ rec.setCigar(CigarUtil.addSoftClippedBasesToEndsOfCigar(
+ rec.getCigar(), rec.getReadNegativeStrandFlag(), notWritten, trimmed));
+
+ // If the adapter sequence is marked and clipAdapter is true, clip it
+ if (this.clipAdapters && rec.getAttribute(ReservedTagConstants.XT) != null) {
+ CigarUtil.softClip3PrimeEndOfRead(rec, rec.getIntegerAttribute(ReservedTagConstants.XT));
+ }
+ }
+
+
+ protected SAMSequenceDictionary getSequenceDictionary() { return this.sequenceDictionary; }
+
+ protected SAMProgramRecord getProgramRecord() { return this.programRecord; }
+
+ protected void setProgramRecord(final SAMProgramRecord pg) {
+ if (this.programRecord != null) {
+ throw new IllegalStateException("Cannot set program record more than once on alignment merger.");
+ }
+ this.programRecord = pg;
+ this.header.addProgramRecord(pg);
+ SAMUtils.chainSAMProgramRecord(header, pg);
+ }
+
+ protected boolean isReservedTag(final String tag) {
+ final char firstCharOfTag = tag.charAt(0);
+
+ // All tags that start with a lower-case letter are user defined and should not be overridden by aligner
+ // unless explicitly specified in attributesToRetain.
+ if (Character.isLowerCase(firstCharOfTag)) return true;
+
+ for (final char c : RESERVED_ATTRIBUTE_STARTS) {
+ if (firstCharOfTag == c) return true;
+ }
+ return false;
+ }
+
+ protected SAMFileHeader getHeader() { return this.header; }
+
+ protected void resetRefSeqFileWalker() {
+ this.refSeq = new ReferenceSequenceFileWalker(referenceFasta);
+ }
+
+ public boolean isClipOverlappingReads() {
+ return clipOverlappingReads;
+ }
+
+ public void setClipOverlappingReads(final boolean clipOverlappingReads) {
+ this.clipOverlappingReads = clipOverlappingReads;
+ }
+
+ public boolean isKeepAlignerProperPairFlags() {
+ return keepAlignerProperPairFlags;
+ }
+
+ /**
+ * If true, keep the aligner's idea of proper pairs rather than letting alignment merger decide.
+ */
+ public void setKeepAlignerProperPairFlags(final boolean keepAlignerProperPairFlags) {
+ this.keepAlignerProperPairFlags = keepAlignerProperPairFlags;
+ }
+
+ public void setIncludeSecondaryAlignments(final boolean includeSecondaryAlignments) {
+ this.includeSecondaryAlignments = includeSecondaryAlignments;
+ }
+
+ public void close() {
+ CloserUtil.close(this.refSeq);
+ }
+}
diff --git a/src/java/picard/sam/AddCommentsToBam.java b/src/java/picard/sam/AddCommentsToBam.java
new file mode 100644
index 0000000..aa4c23e
--- /dev/null
+++ b/src/java/picard/sam/AddCommentsToBam.java
@@ -0,0 +1,63 @@
+package picard.sam;
+
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * A tool to add comments to a BAM file header. Effectively copies the BAM file except for the addition of the @CO records
+ * in the header. This tool does not support SAM files.
+ *
+ * @author jgentry
+ */
+ at CommandLineProgramProperties(
+ usage = "Adds one or more comments to the header of a specified BAM file. Copies the file with the " +
+ "modified header to a specified output file. Note that a block copying method is used to ensure efficient transfer to the " +
+ "output file. SAM files are not supported",
+ usageShort = "Adds comments to the header of a BAM file",
+ programGroup = SamOrBam.class
+)
+public class AddCommentsToBam extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input BAM file to add a comment to the header")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Output BAM file to write results")
+ public File OUTPUT;
+
+ @Option(shortName = "C", doc = "Comments to add to the BAM file")
+ public List<String> COMMENT;
+
+ public static void main(final String[] args) { new AddCommentsToBam().instanceMainWithExit(args); }
+
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ if (INPUT.getAbsolutePath().endsWith(".sam")) {
+ throw new PicardException("SAM files are not supported");
+ }
+
+ final SAMFileHeader samFileHeader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).getFileHeader(INPUT);
+ for (final String comment : COMMENT) {
+ if (comment.contains("\n")) {
+ throw new PicardException("Comments can not contain a new line");
+ }
+ samFileHeader.addComment(comment);
+ }
+
+ BamFileIoUtils.reheaderBamFile(samFileHeader, INPUT, OUTPUT, CREATE_MD5_FILE, CREATE_INDEX);
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/AddOrReplaceReadGroups.java b/src/java/picard/sam/AddOrReplaceReadGroups.java
new file mode 100644
index 0000000..27d6976
--- /dev/null
+++ b/src/java/picard/sam/AddOrReplaceReadGroups.java
@@ -0,0 +1,135 @@
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SamInputResource;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Iso8601Date;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.Arrays;
+
+/**
+ * Replaces read groups in a BAM file
+ *
+ * @author mdepristo
+ */
+ at CommandLineProgramProperties(
+ usage = "Replaces all read groups in the INPUT file with a single new read group and assigns " +
+ "all reads to this read group in the OUTPUT BAM",
+ usageShort = "Replaces read groups in a BAM or SAM file with a single new read group",
+ programGroup = SamOrBam.class
+)
+public class AddOrReplaceReadGroups extends CommandLineProgram {
+
+ @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input file (bam or sam or a GA4GH url).")
+ public String INPUT = null;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Output file (bam or sam).")
+ public File OUTPUT = null;
+
+ @Option(shortName = StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, optional = true,
+ doc = "Optional sort order to output in. If not supplied OUTPUT is in the same order as INPUT.")
+ public SortOrder SORT_ORDER;
+
+ @Option(shortName = "ID", doc = "Read Group ID")
+ public String RGID = "1";
+
+ @Option(shortName = "LB", doc = "Read Group Library")
+ public String RGLB;
+
+ @Option(shortName = "PL", doc = "Read Group platform (e.g. illumina, solid)")
+ public String RGPL;
+
+ @Option(shortName = "PU", doc = "Read Group platform unit (eg. run barcode)")
+ public String RGPU;
+
+ @Option(shortName = "SM", doc = "Read Group sample name")
+ public String RGSM;
+
+ @Option(shortName = "CN", doc = "Read Group sequencing center name", optional = true)
+ public String RGCN;
+
+ @Option(shortName = "DS", doc = "Read Group description", optional = true)
+ public String RGDS;
+
+ @Option(shortName = "DT", doc = "Read Group run date", optional = true)
+ public Iso8601Date RGDT;
+
+ @Option(shortName = "PI", doc = "Read Group predicted insert size", optional = true)
+ public Integer RGPI;
+
+ @Option(shortName = "PG", doc = "Read Group program group", optional = true)
+ public String RGPG;
+
+ @Option(shortName = "PM", doc = "Read Group platform model", optional = true)
+ public String RGPM;
+
+ private final Log log = Log.getInstance(AddOrReplaceReadGroups.class);
+
+ /** Required main method implementation. */
+ public static void main(final String[] argv) {
+ new AddOrReplaceReadGroups().instanceMainWithExit(argv);
+ }
+
+ protected int doWork() {
+ IOUtil.assertInputIsValid(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final SamReader in = SamReaderFactory.makeDefault()
+ .referenceSequence(REFERENCE_SEQUENCE)
+ .open(SamInputResource.of(INPUT));
+
+ // create the read group we'll be using
+ final SAMReadGroupRecord rg = new SAMReadGroupRecord(RGID);
+ rg.setLibrary(RGLB);
+ rg.setPlatform(RGPL);
+ rg.setSample(RGSM);
+ rg.setPlatformUnit(RGPU);
+ if (RGCN != null) rg.setSequencingCenter(RGCN);
+ if (RGDS != null) rg.setDescription(RGDS);
+ if (RGDT != null) rg.setRunDate(RGDT);
+ if (RGPI != null) rg.setPredictedMedianInsertSize(RGPI);
+ if (RGPG != null) rg.setProgramGroup(RGPG);
+ if (RGPM != null) rg.setPlatformModel(RGPM);
+
+ log.info(String.format("Created read group ID=%s PL=%s LB=%s SM=%s%n", rg.getId(), rg.getPlatform(), rg.getLibrary(), rg.getSample()));
+
+ // create the new header and output file
+ final SAMFileHeader inHeader = in.getFileHeader();
+ final SAMFileHeader outHeader = inHeader.clone();
+ outHeader.setReadGroups(Arrays.asList(rg));
+ if (SORT_ORDER != null) outHeader.setSortOrder(SORT_ORDER);
+
+ final SAMFileWriter outWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader,
+ outHeader.getSortOrder() == inHeader.getSortOrder(),
+ OUTPUT);
+
+ final ProgressLogger progress = new ProgressLogger(log);
+ for (final SAMRecord read : in) {
+ read.setAttribute(SAMTag.RG.name(), RGID);
+ outWriter.addAlignment(read);
+ progress.record(read);
+ }
+
+ // cleanup
+ CloserUtil.close(in);
+ outWriter.close();
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/BamIndexStats.java b/src/java/picard/sam/BamIndexStats.java
new file mode 100755
index 0000000..17d6e7f
--- /dev/null
+++ b/src/java/picard/sam/BamIndexStats.java
@@ -0,0 +1,80 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.BAMIndex;
+import htsjdk.samtools.BAMIndexMetaData;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+
+/**
+ * Command line program to print statistics from BAM index (.bai) file
+ * Statistics include count of aligned and unaligned reads for each reference sequence
+ * and a count of all records with no start coordinate.
+ * Similar to the 'samtools idxstats' command.
+ *
+ * @author Martha Borkan
+ */
+ at CommandLineProgramProperties(
+ usage = "Generates BAM index statistics, including the number of aligned and unaligned SAMRecords for each reference sequence, " +
+ "and the number of SAMRecords with no coordinate." +
+ "Input BAM file must have a corresponding index file.\n",
+ usageShort = "Generates index statistics from a BAM file",
+ programGroup = SamOrBam.class
+)
+public class BamIndexStats extends CommandLineProgram {
+
+ private static final Log log = Log.getInstance(BamIndexStats.class);
+
+ @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc="A BAM file to process.")
+ public File INPUT;
+
+ /** Stock main method for a command line program. */
+ public static void main(final String[] argv) {
+ System.exit(new BamIndexStats().instanceMain(argv));
+ }
+
+ /**
+ * Main method for the program. Checks that input file is present and
+ * readable, then iterates through the index printing meta data to stdout.
+ */
+ protected int doWork() {
+
+ if (INPUT.getName().endsWith(BAMIndex.BAMIndexSuffix))
+ log.warn("INPUT should be BAM file not index file");
+ IOUtil.assertFileIsReadable(INPUT);
+ BAMIndexMetaData.printIndexStats(INPUT);
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/BestEndMapqPrimaryAlignmentStrategy.java b/src/java/picard/sam/BestEndMapqPrimaryAlignmentStrategy.java
new file mode 100644
index 0000000..a438cad
--- /dev/null
+++ b/src/java/picard/sam/BestEndMapqPrimaryAlignmentStrategy.java
@@ -0,0 +1,104 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMUtils;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Random;
+
+
+/**
+ * For an aligner that aligns each end independently, select the alignment for each end with the best MAPQ, and
+ * make that the primary. The primary alignments are then correlated so that their mate info points to each
+ * other, but all non-primary alignments are uncorrelated.
+ */
+public class BestEndMapqPrimaryAlignmentStrategy implements PrimaryAlignmentSelectionStrategy {
+ private static final MapqComparator MAPQ_COMPARATOR = new MapqComparator();
+
+ // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
+ // multiple alignments with equal mapping quality.
+ private final Random random = new Random(1);
+
+ /**
+ * Primary alignment was filtered out. Need to select a new one.
+ */
+ public void pickPrimaryAlignment(final HitsForInsert hits) {
+
+ if (hits.numHits() == 0) throw new IllegalArgumentException("No alignments to pick from");
+ Collections.sort(hits.firstOfPairOrFragment, MAPQ_COMPARATOR);
+ Collections.sort(hits.secondOfPair, MAPQ_COMPARATOR);
+
+ randomlySelectPrimaryFromBest(hits.firstOfPairOrFragment);
+ randomlySelectPrimaryFromBest(hits.secondOfPair);
+ hits.setPrimaryAlignment(0);
+
+ if (!hits.isPaired()) return;
+
+ // For non-primary alignments, de-correlate them so that the mate fields don't point at some
+ // arbitrary alignment for the other end.
+
+ // No non-primary alignments for one of the ends so nothing to do.
+ if (hits.firstOfPairOrFragment.size() <= 1 || hits.secondOfPair.size() <= 1) return;
+ final int amountToSlide = hits.firstOfPairOrFragment.size() - 1;
+ for (int i = 0; i < amountToSlide; ++i) {
+ hits.secondOfPair.add(1, null);
+ }
+ }
+
+
+ /**
+ * Randomly picks one of the best alignments and puts it into the 0th slot of the list.
+ * @param recs List of alignments sorted in descending order of alignment quality.
+ */
+ private void randomlySelectPrimaryFromBest(List<SAMRecord> recs) {
+ if (recs.isEmpty()) return;
+ final int bestMapq = recs.get(0).getMappingQuality();
+ int i;
+ for (i = 1; i < recs.size() && recs.get(i).getMappingQuality() == bestMapq; ++i) {
+ }
+ final int bestIndex = random.nextInt(i);
+ if (bestIndex == 0) return;
+ final SAMRecord tmp = recs.get(0);
+ recs.set(0, recs.get(bestIndex));
+ recs.set(bestIndex, tmp);
+ }
+
+ // Sorts in descending order, but 255 is considered > 0 but < 1, and unmapped is worst of all
+ private static class MapqComparator implements Comparator<SAMRecord> {
+ public int compare(final SAMRecord rec1, final SAMRecord rec2) {
+ if (rec1.getReadUnmappedFlag()) {
+ if (rec2.getReadUnmappedFlag()) return 0;
+ else return 1;
+ } else if (rec2.getReadUnmappedFlag()) {
+ return -1;
+ }
+ return -SAMUtils.compareMapqs(rec1.getMappingQuality(), rec2.getMappingQuality());
+ }
+ }
+}
+
diff --git a/src/java/picard/sam/BestMapqPrimaryAlignmentSelectionStrategy.java b/src/java/picard/sam/BestMapqPrimaryAlignmentSelectionStrategy.java
new file mode 100644
index 0000000..4d5be6c
--- /dev/null
+++ b/src/java/picard/sam/BestMapqPrimaryAlignmentSelectionStrategy.java
@@ -0,0 +1,96 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMUtils;
+import picard.sam.HitsForInsert.NumPrimaryAlignmentState;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * This strategy was designed for TopHat output, but could be of general utility. It picks the alignment with best MAPQ.
+ * If paired-end, it is the alignment in which the sum of the MAPQs of both ends is the best. In case of ties, one
+ * is selected arbitrarily. This strategy expects pair-aware alignments, with the corresponding alignment for each
+ * mate of the pair correlated by HI (hit index) tag. If the aligner has set a pair of alignments as primary, this
+ * is used (assuming one of those alignments is not filtered out). Otherwise the alignment pair with best MapQ is
+ * selected.
+ */
+public class BestMapqPrimaryAlignmentSelectionStrategy implements PrimaryAlignmentSelectionStrategy {
+ // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
+ // multiple alignments with equal mapping quality.
+ private final Random random = new Random(1);
+
+ /**
+ * Primary alignment was filtered out. Need to select a new one.
+ */
+ public void pickPrimaryAlignment(final HitsForInsert hits) {
+
+ if (hits.numHits() == 0) throw new IllegalArgumentException("No alignments to pick from");
+ hits.coordinateByHitIndex();
+ // See if primary alignment is not already unambiguously determined.
+ final NumPrimaryAlignmentState firstEndAlignmentState = hits.tallyPrimaryAlignments(true);
+ final NumPrimaryAlignmentState secondEndAlignmentState = hits.tallyPrimaryAlignments(false);
+
+ if ((firstEndAlignmentState == NumPrimaryAlignmentState.NONE && secondEndAlignmentState == NumPrimaryAlignmentState.NONE) ||
+ firstEndAlignmentState == NumPrimaryAlignmentState.MORE_THAN_ONE ||
+ secondEndAlignmentState == NumPrimaryAlignmentState.MORE_THAN_ONE) {
+ // Need to use selected strategy for picking primary.
+
+ // Find all the hits with the best MAPQ.
+ final List<Integer> primaryAlignmentIndices = new ArrayList<Integer>(hits.numHits());
+ int bestMapQ = -1;
+ for (int i = 0; i < hits.numHits(); ++i) {
+ final int firstEndMapq;
+ if (hits.getFirstOfPair(i) != null) {
+ firstEndMapq = hits.getFirstOfPair(i).getMappingQuality();
+ } else {
+ firstEndMapq = 0;
+ }
+ final int secondEndMapq;
+ if (hits.getSecondOfPair(i) != null) {
+ secondEndMapq = hits.getSecondOfPair(i).getMappingQuality();
+ } else {
+ secondEndMapq = 0;
+ }
+ int thisMapQ = SAMUtils.combineMapqs(firstEndMapq, secondEndMapq);
+ if (thisMapQ > bestMapQ) {
+ bestMapQ = thisMapQ;
+ primaryAlignmentIndices.clear();
+ }
+ if (thisMapQ == bestMapQ) primaryAlignmentIndices.add(i);
+ }
+
+ // Of all the hits with the best MAPQ, randomly select one to be primary.
+ final int primaryAlignmentIndex;
+ if (primaryAlignmentIndices.size() == 1) primaryAlignmentIndex = primaryAlignmentIndices.get(0);
+ else if (primaryAlignmentIndices.size() > 1) primaryAlignmentIndex =
+ primaryAlignmentIndices.get(random.nextInt(primaryAlignmentIndices.size()));
+ else throw new IllegalStateException("Never found a best MAPQ -- should never happen");
+
+ hits.setPrimaryAlignment(primaryAlignmentIndex);
+ }
+ }
+}
diff --git a/src/java/picard/sam/BuildBamIndex.java b/src/java/picard/sam/BuildBamIndex.java
new file mode 100755
index 0000000..177df98
--- /dev/null
+++ b/src/java/picard/sam/BuildBamIndex.java
@@ -0,0 +1,144 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.BAMIndex;
+import htsjdk.samtools.BAMIndexer;
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SamInputResource;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.net.URL;
+
+/**
+ * Command line program to generate a BAM index (.bai) file from a BAM (.bam) file
+ *
+ * @author Martha Borkan
+ */
+ at CommandLineProgramProperties(
+ usage = "Generates a BAM index (.bai) file.",
+ usageShort = "Generates a BAM index (.bai) file",
+ programGroup = SamOrBam.class
+)
+public class BuildBamIndex extends CommandLineProgram {
+
+ private static final Log log = Log.getInstance(BuildBamIndex.class);
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "A BAM file or URL to process. Must be sorted in coordinate order.")
+ public String INPUT;
+
+ URL inputUrl = null; // INPUT as URL
+ File inputFile = null; // INPUT as File, if it can't be interpreted as a valid URL
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "The BAM index file. Defaults to x.bai if INPUT is x.bam, otherwise INPUT.bai.\n" +
+ "If INPUT is a URL and OUTPUT is unspecified, defaults to a file in the current directory.", optional = true)
+ public File OUTPUT;
+
+ /** Stock main method for a command line program. */
+ public static void main(final String[] argv) {
+ System.exit(new BuildBamIndex().instanceMain(argv));
+ }
+
+ /**
+ * Main method for the program. Checks that all input files are present and
+ * readable and that the output file can be written to. Then iterates through
+ * all the records generating a BAM Index, then writes the bai file.
+ */
+ protected int doWork() {
+
+ try {
+ inputUrl = new URL(INPUT);
+ } catch (java.net.MalformedURLException e) {
+ inputFile = new File(INPUT);
+ }
+
+ // set default output file - input-file.bai
+ if (OUTPUT == null) {
+
+ final String baseFileName;
+ if (inputUrl != null) {
+ final String path = inputUrl.getPath();
+ final int lastSlash = path.lastIndexOf("/");
+ baseFileName = path.substring(lastSlash + 1, path.length());
+ } else {
+ baseFileName = inputFile.getAbsolutePath();
+ }
+
+ if (baseFileName.endsWith(BamFileIoUtils.BAM_FILE_EXTENSION)) {
+
+ final int index = baseFileName.lastIndexOf(".");
+ OUTPUT = new File(baseFileName.substring(0, index) + BAMIndex.BAMIndexSuffix);
+
+ } else {
+ OUTPUT = new File(baseFileName + BAMIndex.BAMIndexSuffix);
+ }
+ }
+
+ IOUtil.assertFileIsWritable(OUTPUT);
+ final SamReader bam;
+
+ if (inputUrl != null) {
+ // remote input
+ bam = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE)
+ .disable(SamReaderFactory.Option.EAGERLY_DECODE)
+ .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS)
+ .open(SamInputResource.of(inputUrl));
+ } else {
+ // input from a normal file
+ IOUtil.assertFileIsReadable(inputFile);
+ bam = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE)
+ .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS)
+ .open(inputFile);
+ }
+
+ if (bam.type() != SamReader.Type.BAM_TYPE) {
+ throw new SAMException("Input file must be bam file, not sam file.");
+ }
+
+ if (!bam.getFileHeader().getSortOrder().equals(SAMFileHeader.SortOrder.coordinate)) {
+ throw new SAMException("Input bam file must be sorted by coordinates");
+ }
+
+ BAMIndexer.createIndex(bam, OUTPUT);
+
+ log.info("Successfully wrote bam index file " + OUTPUT);
+ CloserUtil.close(bam);
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/CalculateReadGroupChecksum.java b/src/java/picard/sam/CalculateReadGroupChecksum.java
new file mode 100644
index 0000000..cbc53bb
--- /dev/null
+++ b/src/java/picard/sam/CalculateReadGroupChecksum.java
@@ -0,0 +1,64 @@
+package picard.sam;
+
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+ at CommandLineProgramProperties(
+ usage = "Creates a hash code based on identifying information in the RG (read group) " +
+ "records in a SAM file's header. This hash code changes any time read groups are added or removed " +
+ "comparing one file's hash code to another tells you if the read groups in the BAM files are different.",
+ usageShort = "Creates a hash code based on the read groups (RG) in the SAM or BAM header.",
+ programGroup = SamOrBam.class
+)
+public class CalculateReadGroupChecksum extends CommandLineProgram {
+
+ private static final String OUTPUT_FILE_EXTENSION = ".read_group_md5";
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The input SAM or BAM file. ")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The file to which the hash code should be written.", optional = true)
+ public File OUTPUT;
+
+ public static void main(final String[] args) {
+ new CalculateReadGroupChecksum().instanceMainWithExit(args);
+ }
+
+ /**
+ * Creates a file name (not including the path) for an RG MD5 file based on the name of the input file.
+ */
+ public static String getOutputFileName(final File inputFile) {
+ return inputFile.getName() + OUTPUT_FILE_EXTENSION;
+ }
+
+ @Override
+ protected int doWork() {
+ final File output =
+ OUTPUT == null
+ ? new File(INPUT.getParentFile(), getOutputFileName(INPUT))
+ : OUTPUT;
+
+ IOUtil.assertFileIsWritable(output);
+ final String hashText = SAMUtils.calculateReadGroupRecordChecksum(INPUT, REFERENCE_SEQUENCE);
+
+ try {
+ final FileWriter outputWriter = new FileWriter(output);
+ outputWriter.write(hashText);
+ outputWriter.close();
+ } catch (final IOException ioe) {
+ throw new PicardException(
+ "Could not write the computed hash (" + hashText + ") to the output file: " + ioe.getMessage(), ioe);
+ }
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/sam/CheckTerminatorBlock.java b/src/java/picard/sam/CheckTerminatorBlock.java
new file mode 100644
index 0000000..41ffd92
--- /dev/null
+++ b/src/java/picard/sam/CheckTerminatorBlock.java
@@ -0,0 +1,50 @@
+package picard.sam;
+
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.BlockCompressedInputStream;
+import htsjdk.samtools.util.BlockCompressedInputStream.FileTermination;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Simple class to check the terminator block of a SAM file.
+ */
+ at CommandLineProgramProperties(
+ usage = CheckTerminatorBlock.USAGE,
+ usageShort = CheckTerminatorBlock.USAGE,
+ programGroup = SamOrBam.class
+)
+public class CheckTerminatorBlock extends CommandLineProgram {
+ static final String USAGE = "Asserts the provided gzip file's (e.g., BAM) last block is well-formed; RC 100 otherwise";
+
+ @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The block compressed file to check.")
+ public File INPUT;
+
+ public static void main(final String[] args) {
+ new CheckTerminatorBlock().instanceMainWithExit(args);
+ }
+
+ @Override protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ try {
+ final FileTermination term = BlockCompressedInputStream.checkTermination(INPUT);
+ System.err.println(term.name());
+ if (term == FileTermination.DEFECTIVE) {
+ return 100;
+ }
+ else {
+ return 0;
+ }
+ }
+ catch (IOException ioe) {
+ throw new PicardException("Exception reading terminator block of file: " + INPUT.getAbsolutePath());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/sam/CleanSam.java b/src/java/picard/sam/CleanSam.java
new file mode 100644
index 0000000..9cd8451
--- /dev/null
+++ b/src/java/picard/sam/CleanSam.java
@@ -0,0 +1,107 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.ValidationStringency;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+
+/**
+ * @author alecw at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = CleanSam.USAGE,
+ usageShort = CleanSam.USAGE,
+ programGroup = SamOrBam.class
+)
+public class CleanSam extends CommandLineProgram {
+
+ static final String USAGE = "Cleans the provided SAM/BAM, soft-clipping beyond-end-of-reference alignments and setting MAPQ to 0 for unmapped reads";
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input SAM to be cleaned.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Where to write cleaned SAM.")
+ public File OUTPUT;
+
+ public static void main(final String[] argv) {
+ new CleanSam().instanceMainWithExit(argv);
+ }
+
+ /**
+ * Do the work after command line has been parsed.
+ * RuntimeException may be thrown by this method, and are reported appropriately.
+ *
+ * @return program exit status.
+ */
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ final SamReaderFactory factory = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE);
+ if (VALIDATION_STRINGENCY == ValidationStringency.STRICT) {
+ factory.validationStringency(ValidationStringency.LENIENT);
+ }
+ final SamReader reader = factory.open(INPUT);
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(reader.getFileHeader(), true, OUTPUT);
+ final CloseableIterator<SAMRecord> it = reader.iterator();
+ final ProgressLogger progress = new ProgressLogger(Log.getInstance(CleanSam.class));
+
+ // If the read (or its mate) maps off the end of the alignment, clip it
+ while (it.hasNext()) {
+ final SAMRecord rec = it.next();
+
+ // If the read (or its mate) maps off the end of the alignment, clip it
+ AbstractAlignmentMerger.createNewCigarsIfMapsOffEndOfReference(rec);
+
+ // check the read's mapping quality
+ if (rec.getReadUnmappedFlag() && 0 != rec.getMappingQuality()) {
+ rec.setMappingQuality(0);
+ }
+
+ writer.addAlignment(rec);
+ progress.record(rec);
+ }
+
+ writer.close();
+ it.close();
+ CloserUtil.close(reader);
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/CompareSAMs.java b/src/java/picard/sam/CompareSAMs.java
new file mode 100644
index 0000000..38d9d86
--- /dev/null
+++ b/src/java/picard/sam/CompareSAMs.java
@@ -0,0 +1,528 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.SecondaryOrSupplementarySkippingIterator;
+import htsjdk.samtools.util.CloserUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.PositionalArguments;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Rudimentary SAM comparer. Compares headers, and if headers are compatible enough, compares SAMRecords,
+ * looking only at basic alignment info. Summarizes the number of alignments that match, mismatch, are missing, etc.
+ *
+ * @author alecw at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "USAGE: CompareSAMS <SAMFile1> <SAMFile2>\n" +
+ "Compares the headers of the two input SAM or BAM files, and, if possible, the SAMRecords. " +
+ "For SAMRecords, compares only the readUnmapped flag, reference name, start position and strand. " +
+ "Reports the number of SAMRecords that match, differ in alignment, are mapped in only one input, " +
+ "or are missing in one of the files",
+ usageShort = "Compares two input SAM or BAM files",
+ programGroup = SamOrBam.class
+)
+public class CompareSAMs extends CommandLineProgram {
+
+ @PositionalArguments(minElements = 2, maxElements = 2)
+ public List<File> samFiles;
+
+ private final SamReader[] samReaders = new SamReader[2];
+ private boolean sequenceDictionariesDiffer;
+ private int mappingsMatch = 0;
+ private int unmappedBoth = 0;
+ private int unmappedLeft = 0;
+ private int unmappedRight = 0;
+ private int mappingsDiffer = 0;
+ private int missingLeft = 0;
+ private int missingRight = 0;
+ private boolean areEqual;
+
+ public static void main(String[] argv) {
+ new CompareSAMs().instanceMainWithExit(argv);
+ }
+
+ /**
+ * Do the work after command line has been parsed. RuntimeException may be
+ * thrown by this method, and are reported appropriately.
+ *
+ * @return program exit status.
+ */
+ @Override
+ protected int doWork() {
+ for (int i = 0; i < samFiles.size(); ++i) {
+ samReaders[i] = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(samFiles.get(i));
+ }
+ areEqual = compareHeaders();
+ areEqual = compareAlignments() && areEqual;
+ printReport();
+ if (!areEqual) {
+ System.out.println("SAM files differ.");
+ } else {
+ System.out.println("SAM files match.");
+ }
+ CloserUtil.close(samReaders);
+ return 0;
+ }
+
+ private void printReport() {
+ System.out.println("Match\t" + mappingsMatch);
+ System.out.println("Differ\t" + mappingsDiffer);
+ System.out.println("Unmapped_both\t" + unmappedBoth);
+ System.out.println("Unmapped_left\t" + unmappedLeft);
+ System.out.println("Unmapped_right\t" + unmappedRight);
+ System.out.println("Missing_left\t" + missingLeft);
+ System.out.println("Missing_right\t" + missingRight);
+ }
+
+ private boolean compareAlignments() {
+ if (!compareValues(samReaders[0].getFileHeader().getSortOrder(), samReaders[1].getFileHeader().getSortOrder(),
+ "Sort Order")) {
+ System.out.println("Cannot compare alignments if sort orders differ.");
+ return false;
+ }
+ switch (samReaders[0].getFileHeader().getSortOrder()) {
+ case coordinate:
+ if (sequenceDictionariesDiffer) {
+ System.out.println("Cannot compare coordinate-sorted SAM files because sequence dictionaries differ.");
+ return false;
+ }
+ return compareCoordinateSortedAlignments();
+ case queryname:
+ return compareQueryNameSortedAlignments();
+ case duplicate:
+ case unsorted:
+ return compareUnsortedAlignments();
+ default:
+ // unreachable
+ return false;
+ }
+ }
+
+ private boolean compareCoordinateSortedAlignments() {
+ final SecondaryOrSupplementarySkippingIterator itLeft =
+ new SecondaryOrSupplementarySkippingIterator(samReaders[0].iterator());
+ final SecondaryOrSupplementarySkippingIterator itRight =
+ new SecondaryOrSupplementarySkippingIterator(samReaders[1].iterator());
+
+ // Save any reads which haven't been matched during in-order scan.
+ final Map<String, SAMRecord> leftUnmatched = new HashMap<String, SAMRecord>();
+ final Map<String, SAMRecord> rightUnmatched = new HashMap<String, SAMRecord>();
+
+ boolean ret = true;
+
+ while (itLeft.hasCurrent()) {
+ if (!itRight.hasCurrent()) {
+ // Exhausted right side. See if any of the remaining left reads match
+ // any of the saved right reads.
+ for (; itLeft.hasCurrent(); itLeft.advance()) {
+ final SAMRecord left = itLeft.getCurrent();
+ final SAMRecord right = rightUnmatched.remove(left.getReadName());
+ if (right == null) {
+ ++missingRight;
+ } else {
+ tallyAlignmentRecords(left, right);
+ }
+ }
+ break;
+ }
+ // Don't assume stability of order beyond the coordinate. Therefore grab all the
+ // reads from the left that has the same coordinate.
+ final SAMRecord left = itLeft.getCurrent();
+ final Map<String, SAMRecord> leftCurrentCoordinate = new HashMap<String, SAMRecord>();
+ leftCurrentCoordinate.put(left.getReadName(), left);
+ while (itLeft.advance()) {
+ final SAMRecord nextLeft = itLeft.getCurrent();
+ if (compareAlignmentCoordinates(left, nextLeft) == 0) {
+ leftCurrentCoordinate.put(nextLeft.getReadName(), nextLeft);
+ } else {
+ break;
+ }
+ }
+ // Advance the right iterator until it is >= the left reads that have just been grabbed
+ while (itRight.hasCurrent() && compareAlignmentCoordinates(left, itRight.getCurrent()) > 0) {
+ final SAMRecord right = itRight.getCurrent();
+ rightUnmatched.put(right.getReadName(), right);
+ itRight.advance();
+ }
+ // For each right read that has the same coordinate as the current left reads,
+ // see if there is a matching left read. If so, process and discard. If not,
+ // save the right read for later.
+ for (; itRight.hasCurrent() && compareAlignmentCoordinates(left, itRight.getCurrent()) == 0; itRight.advance()) {
+ final SAMRecord right = itRight.getCurrent();
+ final SAMRecord matchingLeft = leftCurrentCoordinate.remove(right.getReadName());
+ if (matchingLeft != null) {
+ ret = tallyAlignmentRecords(matchingLeft, right) && ret;
+ } else {
+ rightUnmatched.put(right.getReadName(), right);
+ }
+ }
+
+ // Anything left in leftCurrentCoordinate has not been matched
+ for (final SAMRecord samRecord : leftCurrentCoordinate.values()) {
+ leftUnmatched.put(samRecord.getReadName(), samRecord);
+ }
+ }
+ // The left iterator has been exhausted. See if any of the remaining right reads
+ // match any of the saved left reads.
+ for (; itRight.hasCurrent(); itRight.advance()) {
+ final SAMRecord right = itRight.getCurrent();
+ final SAMRecord left = leftUnmatched.remove(right.getReadName());
+ if (left != null) {
+ tallyAlignmentRecords(left, right);
+ } else {
+ ++missingLeft;
+ }
+ }
+
+ // Look up reads that were unmatched from left, and see if they are in rightUnmatched.
+ // If found, remove from rightUnmatched and tally.
+ for (final Map.Entry<String, SAMRecord> leftEntry : leftUnmatched.entrySet()) {
+ final String readName = leftEntry.getKey();
+ final SAMRecord left = leftEntry.getValue();
+ final SAMRecord right = rightUnmatched.remove(readName);
+ if (right == null) {
+ ++missingRight;
+ continue;
+ }
+ tallyAlignmentRecords(left, right);
+ }
+
+ // Any elements remaining in rightUnmatched are guaranteed not to be in leftUnmatched.
+ missingLeft += rightUnmatched.size();
+
+ if (ret) {
+ if (missingLeft > 0 || missingRight > 0 || mappingsDiffer > 0 || unmappedLeft > 0 || unmappedRight > 0) {
+ ret = false;
+ }
+ }
+ return ret;
+ }
+
+ private int compareAlignmentCoordinates(final SAMRecord left, final SAMRecord right) {
+ final String leftReferenceName = left.getReferenceName();
+ final String rightReferenceName = right.getReferenceName();
+ if (leftReferenceName == null && rightReferenceName == null) {
+ return 0;
+ } else if (leftReferenceName == null) {
+ return 1;
+ } else if (rightReferenceName == null) {
+ return -1;
+ }
+ final int leftReferenceIndex = samReaders[0].getFileHeader().getSequenceIndex(leftReferenceName);
+ final int rightReferenceIndex = samReaders[0].getFileHeader().getSequenceIndex(rightReferenceName);
+
+ if (leftReferenceIndex != rightReferenceIndex) {
+ return leftReferenceIndex - rightReferenceIndex;
+ }
+ return left.getAlignmentStart() - right.getAlignmentStart();
+ }
+
+ private boolean compareQueryNameSortedAlignments() {
+ final SecondaryOrSupplementarySkippingIterator it1 = new SecondaryOrSupplementarySkippingIterator(samReaders[0].iterator());
+ final SecondaryOrSupplementarySkippingIterator it2 = new SecondaryOrSupplementarySkippingIterator(samReaders[1].iterator());
+
+ boolean ret = true;
+ while (it1.hasCurrent()) {
+ if (!it2.hasCurrent()) {
+ missingRight += countRemaining(it1);
+ return false;
+ }
+ final int cmp = it1.getCurrent().getReadName().compareTo(it2.getCurrent().getReadName());
+ if (cmp < 0) {
+ ++missingRight;
+ it1.advance();
+ ret = false;
+ } else if (cmp > 0) {
+ ++missingLeft;
+ it2.advance();
+ ret = false;
+ } else {
+ if (!tallyAlignmentRecords(it1.getCurrent(), it2.getCurrent())) {
+ ret = false;
+ }
+ it1.advance();
+ it2.advance();
+ }
+ }
+ if (it2.hasCurrent()) {
+ missingLeft += countRemaining(it2);
+ return false;
+ }
+ return ret;
+ }
+
+ private boolean compareUnsortedAlignments() {
+ final SecondaryOrSupplementarySkippingIterator it1 = new SecondaryOrSupplementarySkippingIterator(samReaders[0].iterator());
+ final SecondaryOrSupplementarySkippingIterator it2 = new SecondaryOrSupplementarySkippingIterator(samReaders[1].iterator());
+ boolean ret = true;
+ for (; it1.hasCurrent(); it1.advance(), it2.advance()) {
+ if (!it2.hasCurrent()) {
+ missingRight += countRemaining(it1);
+ return false;
+ }
+ final SAMRecord s1 = it1.getCurrent();
+ final SAMRecord s2 = it2.getCurrent();
+ if (!compareValues(s1.getReadName(), s2.getReadName(), "Read names")) {
+ System.out.println("Read names cease agreeing in unsorted SAM files . Comparison aborting.");
+ }
+ ret = tallyAlignmentRecords(s1, s2) && ret;
+ }
+
+ if (it2.hasCurrent()) {
+ missingLeft += countRemaining(it2);
+ return false;
+ }
+ return ret;
+ }
+
+ private int countRemaining(final SecondaryOrSupplementarySkippingIterator it) {
+ int i;
+ for (i = 0; it.hasCurrent(); ++i) {
+ it.advance();
+ }
+ return i;
+ }
+
+ private boolean tallyAlignmentRecords(final SAMRecord s1, final SAMRecord s2) {
+ if (!s1.getReadName().equals(s2.getReadName())) {
+ throw new PicardException("Read names do not match: " + s1.getReadName() + " : " + s2.getReadName());
+ }
+ if (s1.getReadUnmappedFlag() && s2.getReadUnmappedFlag()) {
+ ++unmappedBoth;
+ return true;
+ }
+ if (s1.getReadUnmappedFlag()) {
+ ++unmappedLeft;
+ return false;
+ }
+ if (s2.getReadUnmappedFlag()) {
+ ++unmappedRight;
+ return false;
+ }
+ final boolean ret = (s1.getReferenceName().equals(s2.getReferenceName()) &&
+ s1.getAlignmentStart() == s2.getAlignmentStart() &&
+ s1.getReadNegativeStrandFlag() == s1.getReadNegativeStrandFlag());
+ if (!ret) {
+ ++mappingsDiffer;
+ } else {
+ ++mappingsMatch;
+ }
+ return ret;
+ }
+
+ private boolean compareHeaders() {
+ final SAMFileHeader h1 = samReaders[0].getFileHeader();
+ final SAMFileHeader h2 = samReaders[1].getFileHeader();
+ boolean ret = compareValues(h1.getVersion(), h2.getVersion(), "File format version");
+ ret = compareValues(h1.getCreator(), h2.getCreator(), "File creator") && ret;
+ ret = compareValues(h1.getAttribute("SO"), h2.getAttribute("SO"), "Sort order") && ret;
+ if (!compareSequenceDictionaries(h1, h2)) {
+ ret = false;
+ sequenceDictionariesDiffer = true;
+ }
+ ret = compareReadGroups(h1, h2) && ret;
+ ret = compareProgramRecords(h1, h2) && ret;
+ return ret;
+ }
+
+ private boolean compareProgramRecords(final SAMFileHeader h1, final SAMFileHeader h2) {
+ final List<SAMProgramRecord> l1 = h1.getProgramRecords();
+ final List<SAMProgramRecord> l2 = h2.getProgramRecords();
+ if (!compareValues(l1.size(), l2.size(), "Number of program records")) {
+ return false;
+ }
+ boolean ret = true;
+ for (int i = 0; i < l1.size(); ++i) {
+ ret = compareProgramRecord(l1.get(i), l2.get(i)) && ret;
+ }
+ return ret;
+ }
+
+ private boolean compareProgramRecord(final SAMProgramRecord programRecord1, final SAMProgramRecord programRecord2) {
+ if (programRecord1 == null && programRecord2 == null) {
+ return true;
+ }
+ if (programRecord1 == null) {
+ reportDifference("null", programRecord2.getProgramGroupId(), "Program Record");
+ return false;
+ }
+ if (programRecord2 == null) {
+ reportDifference(programRecord1.getProgramGroupId(), "null", "Program Record");
+ return false;
+ }
+ boolean ret = compareValues(programRecord1.getProgramGroupId(), programRecord2.getProgramGroupId(),
+ "Program Name");
+ final String[] attributes = {"VN", "CL"};
+ for (final String attribute : attributes) {
+ ret = compareValues(programRecord1.getAttribute(attribute), programRecord2.getAttribute(attribute),
+ attribute + " Program Record attribute") && ret;
+ }
+ return ret;
+ }
+
+ private boolean compareReadGroups(final SAMFileHeader h1, final SAMFileHeader h2) {
+ final List<SAMReadGroupRecord> l1 = h1.getReadGroups();
+ final List<SAMReadGroupRecord> l2 = h2.getReadGroups();
+ if (!compareValues(l1.size(), l2.size(), "Number of read groups")) {
+ return false;
+ }
+ boolean ret = true;
+ for (int i = 0; i < l1.size(); ++i) {
+ ret = compareReadGroup(l1.get(i), l2.get(i)) && ret;
+ }
+ return ret;
+ }
+
+ private boolean compareReadGroup(final SAMReadGroupRecord samReadGroupRecord1, final SAMReadGroupRecord samReadGroupRecord2) {
+ boolean ret = compareValues(samReadGroupRecord1.getReadGroupId(), samReadGroupRecord2.getReadGroupId(),
+ "Read Group ID");
+ ret = compareValues(samReadGroupRecord1.getSample(), samReadGroupRecord2.getSample(),
+ "Sample for read group " + samReadGroupRecord1.getReadGroupId()) && ret;
+ ret = compareValues(samReadGroupRecord1.getLibrary(), samReadGroupRecord2.getLibrary(),
+ "Library for read group " + samReadGroupRecord1.getReadGroupId()) && ret;
+ final String[] attributes = {"DS", "PU", "PI", "CN", "DT", "PL"};
+ for (final String attribute : attributes) {
+ ret = compareValues(samReadGroupRecord1.getAttribute(attribute), samReadGroupRecord2.getAttribute(attribute),
+ attribute + " for read group " + samReadGroupRecord1.getReadGroupId()) && ret;
+ }
+ return ret;
+ }
+
+ private boolean compareSequenceDictionaries(final SAMFileHeader h1, final SAMFileHeader h2) {
+ final List<SAMSequenceRecord> s1 = h1.getSequenceDictionary().getSequences();
+ final List<SAMSequenceRecord> s2 = h2.getSequenceDictionary().getSequences();
+ if (s1.size() != s2.size()) {
+ reportDifference(s1.size(), s2.size(), "Length of sequence dictionaries");
+ return false;
+ }
+ boolean ret = true;
+ for (int i = 0; i < s1.size(); ++i) {
+ ret = compareSequenceRecord(s1.get(i), s2.get(i), i + 1) && ret;
+ }
+ return ret;
+ }
+
+ private boolean compareSequenceRecord(final SAMSequenceRecord sequenceRecord1, final SAMSequenceRecord sequenceRecord2, final int which) {
+ if (!sequenceRecord1.getSequenceName().equals(sequenceRecord2.getSequenceName())) {
+ reportDifference(sequenceRecord1.getSequenceName(), sequenceRecord2.getSequenceName(),
+ "Name of sequence record " + which);
+ return false;
+ }
+ boolean ret = compareValues(sequenceRecord1.getSequenceLength(), sequenceRecord2.getSequenceLength(), "Length of sequence " +
+ sequenceRecord1.getSequenceName());
+ ret = compareValues(sequenceRecord1.getSpecies(), sequenceRecord2.getSpecies(), "Species of sequence " +
+ sequenceRecord1.getSequenceName()) && ret;
+ ret = compareValues(sequenceRecord1.getAssembly(), sequenceRecord2.getAssembly(), "Assembly of sequence " +
+ sequenceRecord1.getSequenceName()) && ret;
+ ret = compareValues(sequenceRecord1.getAttribute("M5"), sequenceRecord2.getAttribute("M5"), "MD5 of sequence " +
+ sequenceRecord1.getSequenceName()) && ret;
+ ret = compareValues(sequenceRecord1.getAttribute("UR"), sequenceRecord2.getAttribute("UR"), "URI of sequence " +
+ sequenceRecord1.getSequenceName()) && ret;
+ return ret;
+ }
+
+ private <T> boolean compareValues(final T v1, final T v2, final String label) {
+ if (v1 == null) {
+ if (v2 == null) {
+ return true;
+ }
+ reportDifference(v1, v2, label);
+ return false;
+ }
+ if (v2 == null) {
+ reportDifference(v1, v2, label);
+ return false;
+ }
+ if (!v1.equals(v2)) {
+ reportDifference(v1, v2, label);
+ return false;
+ }
+ return true;
+ }
+
+ private void reportDifference(final String s1, final String s2, final String label) {
+ System.out.println(label + " differs.");
+ System.out.println(samFiles.get(0) + ": " + s1);
+ System.out.println(samFiles.get(1) + ": " + s2);
+ }
+
+ private void reportDifference(Object o1, Object o2, final String label) {
+ if (o1 == null) {
+ o1 = "null";
+ }
+ if (o2 == null) {
+ o2 = "null";
+ }
+ reportDifference(o1.toString(), o2.toString(), label);
+ }
+
+ public int getMappingsMatch() {
+ return mappingsMatch;
+ }
+
+ public int getUnmappedBoth() {
+ return unmappedBoth;
+ }
+
+ public int getUnmappedLeft() {
+ return unmappedLeft;
+ }
+
+ public int getUnmappedRight() {
+ return unmappedRight;
+ }
+
+ public int getMappingsDiffer() {
+ return mappingsDiffer;
+ }
+
+ public int getMissingLeft() {
+ return missingLeft;
+ }
+
+ public int getMissingRight() {
+ return missingRight;
+ }
+
+ public boolean areEqual() {
+ return areEqual;
+ }
+
+}
diff --git a/src/java/picard/sam/CreateSequenceDictionary.java b/src/java/picard/sam/CreateSequenceDictionary.java
new file mode 100644
index 0000000..c9f98bf
--- /dev/null
+++ b/src/java/picard/sam/CreateSequenceDictionary.java
@@ -0,0 +1,185 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Fasta;
+import picard.cmdline.StandardOptionDefinitions;
+
+import java.io.File;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Create a SAM/BAM file from a fasta containing reference sequence. The output SAM file contains a header but no
+ * SAMRecords, and the header contains only sequence records.
+ */
+ at CommandLineProgramProperties(
+ usage = "Read fasta or fasta.gz containing reference sequences, and write as a SAM or BAM file with only sequence dictionary.\n",
+ usageShort = "Creates a SAM or BAM file from reference sequence in fasta format",
+ programGroup = Fasta.class
+)
+public class CreateSequenceDictionary extends CommandLineProgram {
+
+ // The following attributes define the command-line arguments
+
+ @Option(doc = "Input reference fasta or fasta.gz", shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME)
+ public File REFERENCE;
+
+ @Option(doc = "Output SAM or BAM file containing only the sequence dictionary",
+ shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public File OUTPUT;
+
+ @Option(doc = "Put into AS field of sequence dictionary entry if supplied", optional = true)
+ public String GENOME_ASSEMBLY;
+
+ @Option(doc = "Put into UR field of sequence dictionary entry. If not supplied, input reference file is used",
+ optional = true)
+ public String URI;
+
+ @Option(doc = "Put into SP field of sequence dictionary entry", optional = true)
+ public String SPECIES;
+
+ @Option(doc = "Make sequence name the first word from the > line in the fasta file. " +
+ "By default the entire contents of the > line is used, excluding leading and trailing whitespace.")
+ public boolean TRUNCATE_NAMES_AT_WHITESPACE = true;
+
+ @Option(doc = "Stop after writing this many sequences. For testing.")
+ public int NUM_SEQUENCES = Integer.MAX_VALUE;
+
+ private final MessageDigest md5;
+
+ public CreateSequenceDictionary() {
+ try {
+ md5 = MessageDigest.getInstance("MD5");
+ } catch (NoSuchAlgorithmException e) {
+ throw new PicardException("MD5 algorithm not found", e);
+ }
+ }
+
+ public static void main(final String[] argv) {
+ System.exit(new CreateSequenceDictionary().instanceMain(argv));
+ }
+
+ /**
+ * Use reference filename to create URI to go into header if URI was not passed on cmd line.
+ */
+ protected String[] customCommandLineValidation() {
+ if (URI == null) {
+ URI = "file:" + REFERENCE.getAbsolutePath();
+ }
+ return null;
+ }
+
+ /**
+ * Do the work after command line has been parsed.
+ * RuntimeException may be thrown by this method, and are reported appropriately.
+ *
+ * @return program exit status.
+ */
+ protected int doWork() {
+ if (OUTPUT.exists()) {
+ throw new PicardException(OUTPUT.getAbsolutePath() +
+ " already exists. Delete this file and try again, or specify a different output file.");
+ }
+ final SAMSequenceDictionary sequences = makeSequenceDictionary(REFERENCE);
+ final SAMFileHeader samHeader = new SAMFileHeader();
+ samHeader.setSequenceDictionary(sequences);
+ final SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(samHeader, false, OUTPUT);
+ samWriter.close();
+ return 0;
+ }
+
+ /**
+ * Read all the sequences from the given reference file, and convert into SAMSequenceRecords
+ * @param referenceFile fasta or fasta.gz
+ * @return SAMSequenceRecords containing info from the fasta, plus from cmd-line arguments.
+ */
+ public SAMSequenceDictionary makeSequenceDictionary(final File referenceFile) {
+ final ReferenceSequenceFile refSeqFile =
+ ReferenceSequenceFileFactory.getReferenceSequenceFile(referenceFile, TRUNCATE_NAMES_AT_WHITESPACE);
+ ReferenceSequence refSeq;
+ final List<SAMSequenceRecord> ret = new ArrayList<SAMSequenceRecord>();
+ final Set<String> sequenceNames = new HashSet<String>();
+ for (int numSequences = 0; numSequences < NUM_SEQUENCES && (refSeq = refSeqFile.nextSequence()) != null; ++numSequences) {
+ if (sequenceNames.contains(refSeq.getName())) {
+ throw new PicardException("Sequence name appears more than once in reference: " + refSeq.getName());
+ }
+ sequenceNames.add(refSeq.getName());
+ ret.add(makeSequenceRecord(refSeq));
+ }
+ return new SAMSequenceDictionary(ret);
+ }
+
+ /**
+ * Create one SAMSequenceRecord from a single fasta sequence
+ */
+ private SAMSequenceRecord makeSequenceRecord(final ReferenceSequence refSeq) {
+ final SAMSequenceRecord ret = new SAMSequenceRecord(refSeq.getName(), refSeq.length());
+
+ // Compute MD5 of upcased bases
+ final byte[] bases = refSeq.getBases();
+ for (int i = 0; i < bases.length; ++i) {
+ bases[i] = StringUtil.toUpperCase(bases[i]);
+ }
+
+ ret.setAttribute(SAMSequenceRecord.MD5_TAG, md5Hash(bases));
+ if (GENOME_ASSEMBLY != null) {
+ ret.setAttribute(SAMSequenceRecord.ASSEMBLY_TAG, GENOME_ASSEMBLY);
+ }
+ ret.setAttribute(SAMSequenceRecord.URI_TAG, URI);
+ if (SPECIES != null) {
+ ret.setAttribute(SAMSequenceRecord.SPECIES_TAG, SPECIES);
+ }
+ return ret;
+ }
+
+ private String md5Hash(final byte[] bytes) {
+ md5.reset();
+ md5.update(bytes);
+ String s = new BigInteger(1, md5.digest()).toString(16);
+ if (s.length() != 32) {
+ final String zeros = "00000000000000000000000000000000";
+ s = zeros.substring(0, 32 - s.length()) + s;
+ }
+ return s;
+ }
+}
diff --git a/src/java/picard/sam/DownsampleSam.java b/src/java/picard/sam/DownsampleSam.java
new file mode 100644
index 0000000..6675c0a
--- /dev/null
+++ b/src/java/picard/sam/DownsampleSam.java
@@ -0,0 +1,77 @@
+package picard.sam;
+
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.DownsamplingIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.Random;
+
+/**
+ * Class to randomly downsample a BAM file while respecting that we should either get rid
+ * of both ends of a pair or neither end of the pair!
+ */
+ at CommandLineProgramProperties(
+ usage = "Randomly down-sample a SAM or BAM file to retain " +
+ "a random subset of the reads. Mate-pairs are either both kept or both discarded. Reads marked as not primary " +
+ "alignments are all discarded. Each read is given a probability P of being retained - results with the exact " +
+ "same input in the same order and with the same value for RANDOM_SEED will produce the same results.",
+ usageShort = "Down-sample a SAM or BAM file to retain a random subset of the reads",
+ programGroup = SamOrBam.class
+)
+public class DownsampleSam extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The input SAM or BAM file to downsample.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output, downsampled, SAM or BAM file to write.")
+ public File OUTPUT;
+
+ @Option(shortName = "R", doc = "Random seed to use if reproducibilty is desired. " +
+ "Setting to null will cause multiple invocations to produce different results.")
+ public Long RANDOM_SEED = 1L;
+
+ @Option(shortName = "P", doc = "The probability of keeping any individual read, between 0 and 1.")
+ public double PROBABILITY = 1;
+
+ private final Log log = Log.getInstance(DownsampleSam.class);
+
+ public static void main(final String[] args) {
+ new DownsampleSam().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final Random r = RANDOM_SEED == null ? new Random() : new Random(RANDOM_SEED);
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(in.getFileHeader(), true, OUTPUT);
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e7, "Wrote");
+ final DownsamplingIterator iterator = new DownsamplingIterator(in.iterator(), r, PROBABILITY);
+
+ for (final SAMRecord rec : iterator) {
+ out.addAlignment(rec);
+ progress.record(rec);
+ }
+
+ out.close();
+ CloserUtil.close(in);
+ log.info("Finished! Kept " + iterator.getKeptReads() + " out of " + iterator.getTotalReads() + " reads.");
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/DuplicationMetrics.java b/src/java/picard/sam/DuplicationMetrics.java
new file mode 100644
index 0000000..2523c12
--- /dev/null
+++ b/src/java/picard/sam/DuplicationMetrics.java
@@ -0,0 +1,203 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.util.Histogram;
+
+/**
+ * Metrics that are calculated during the process of marking duplicates
+ * within a stream of SAMRecords.
+ */
+public class DuplicationMetrics extends MetricBase {
+ /** The library on which the duplicate marking was performed. */
+ public String LIBRARY;
+
+ /**
+ * The number of mapped reads examined which did not have a mapped mate pair,
+ * either because the read is unpaired, or the read is paired to an unmapped mate.
+ */
+ public long UNPAIRED_READS_EXAMINED;
+
+ /** The number of mapped read pairs examined. */
+ public long READ_PAIRS_EXAMINED;
+
+ /** The total number of unmapped reads examined. */
+ public long UNMAPPED_READS;
+
+ /** The number of fragments that were marked as duplicates. */
+ public long UNPAIRED_READ_DUPLICATES;
+
+ /** The number of read pairs that were marked as duplicates. */
+ public long READ_PAIR_DUPLICATES;
+
+ /**
+ * The number of read pairs duplicates that were caused by optical duplication.
+ * Value is always < READ_PAIR_DUPLICATES, which counts all duplicates regardless of source.
+ */
+ public long READ_PAIR_OPTICAL_DUPLICATES;
+
+ /** The percentage of mapped sequence that is marked as duplicate. */
+ public Double PERCENT_DUPLICATION;
+
+ /** The estimated number of unique molecules in the library based on PE duplication. */
+ public Long ESTIMATED_LIBRARY_SIZE;
+
+ /**
+ * Fills in the ESTIMATED_LIBRARY_SIZE based on the paired read data examined where
+ * possible and the PERCENT_DUPLICATION.
+ */
+ public void calculateDerivedMetrics() {
+ this.ESTIMATED_LIBRARY_SIZE = estimateLibrarySize(this.READ_PAIRS_EXAMINED - this.READ_PAIR_OPTICAL_DUPLICATES,
+ this.READ_PAIRS_EXAMINED - this.READ_PAIR_DUPLICATES);
+
+ PERCENT_DUPLICATION = (UNPAIRED_READ_DUPLICATES + READ_PAIR_DUPLICATES *2) /(double) (UNPAIRED_READS_EXAMINED + READ_PAIRS_EXAMINED *2);
+ }
+
+ /**
+ * Estimates the size of a library based on the number of paired end molecules observed
+ * and the number of unique pairs ovserved.
+ *
+ * Based on the Lander-Waterman equation that states:
+ * C/X = 1 - exp( -N/X )
+ * where
+ * X = number of distinct molecules in library
+ * N = number of read pairs
+ * C = number of distinct fragments observed in read pairs
+ */
+ public static Long estimateLibrarySize(final long readPairs, final long uniqueReadPairs) {
+ final long readPairDuplicates = readPairs - uniqueReadPairs;
+
+ if (readPairs > 0 && readPairDuplicates > 0) {
+ long n = readPairs;
+ long c = uniqueReadPairs;
+
+ double m = 1.0, M = 100.0;
+
+ if (c >= n || f(m*c, c, n) < 0) {
+ throw new IllegalStateException("Invalid values for pairs and unique pairs: "
+ + n + ", " + c);
+
+ }
+
+ while( f(M*c, c, n) >= 0 ) M *= 10.0;
+
+ for (int i=0; i<40; i++ ) {
+ double r = (m+M)/2.0;
+ double u = f( r * c, c, n );
+ if ( u == 0 ) break;
+ else if ( u > 0 ) m = r;
+ else if ( u < 0 ) M = r;
+ }
+
+ return (long) (c * (m+M)/2.0);
+ }
+ else {
+ return null;
+ }
+ }
+
+ /** Method that is used in the computation of estimated library size. */
+ private static double f(double x, double c, double n) {
+ return c/x - 1 + Math.exp(-n/x);
+ }
+
+ /**
+ * Estimates the ROI (return on investment) that one would see if a library was sequenced to
+ * x higher coverage than the observed coverage.
+ *
+ * @param estimatedLibrarySize the estimated number of molecules in the library
+ * @param x the multiple of sequencing to be simulated (i.e. how many X sequencing)
+ * @param pairs the number of pairs observed in the actual sequencing
+ * @param uniquePairs the number of unique pairs observed in the actual sequencing
+ * @return a number z <= x that estimates if you had pairs*x as your sequencing then you
+ * would observe uniquePairs*z unique pairs.
+ */
+ public static double estimateRoi(long estimatedLibrarySize, double x, long pairs, long uniquePairs) {
+ return estimatedLibrarySize * ( 1 - Math.exp(-(x*pairs)/estimatedLibrarySize) ) / uniquePairs;
+ }
+
+ /**
+ * Calculates a histogram using the estimateRoi method to estimate the effective yield
+ * doing x sequencing for x=1..10.
+ */
+ public Histogram<Double> calculateRoiHistogram() {
+ if (ESTIMATED_LIBRARY_SIZE == null) {
+ try {
+ calculateDerivedMetrics();
+ if (ESTIMATED_LIBRARY_SIZE == null) return null;
+ }
+ catch (IllegalStateException ise) { return null; }
+ }
+
+ long uniquePairs = READ_PAIRS_EXAMINED - READ_PAIR_DUPLICATES;
+ Histogram<Double> histo = new Histogram<Double>();
+
+ for (double x=1; x<=100; x+=1) {
+ histo.increment(x, estimateRoi(ESTIMATED_LIBRARY_SIZE, x, READ_PAIRS_EXAMINED, uniquePairs));
+ }
+
+ return histo;
+ }
+
+ // Main method used for debugging the derived metrics
+ // Usage = DuplicationMetrics READ_PAIRS READ_PAIR_DUPLICATES
+ public static void main(String[] args) {
+ DuplicationMetrics m = new DuplicationMetrics();
+ m.READ_PAIRS_EXAMINED = Integer.parseInt(args[0]);
+ m.READ_PAIR_DUPLICATES = Integer.parseInt(args[1]);
+ m.calculateDerivedMetrics();
+ System.out.println("Percent Duplication: " + m.PERCENT_DUPLICATION);
+ System.out.println("Est. Library Size : " + m.ESTIMATED_LIBRARY_SIZE);
+ System.out.println();
+
+ System.out.println("X Seq\tX Unique");
+ for (Histogram<Double>.Bin bin : m.calculateRoiHistogram().values()) {
+ System.out.println(bin.getId() + "\t" + bin.getValue());
+ }
+
+// DuplicationMetrics m = new DuplicationMetrics();
+// m.READ_PAIRS_EXAMINED = Long.parseLong(args[0]);
+// m.READ_PAIR_DUPLICATES = Long.parseLong(args[1]);
+// final long UNIQUE_READ_PAIRS = m.READ_PAIRS_EXAMINED - m.READ_PAIR_DUPLICATES;
+// final double xCoverage = Double.parseDouble(args[2]);
+// final double uniqueXCoverage = xCoverage * ((double) UNIQUE_READ_PAIRS / (double) m.READ_PAIRS_EXAMINED);
+// final double oneOverCoverage = 1 / xCoverage;
+//
+// m.calculateDerivedMetrics();
+// System.out.println("Percent Duplication: " + m.PERCENT_DUPLICATION);
+// System.out.println("Est. Library Size : " + m.ESTIMATED_LIBRARY_SIZE);
+// System.out.println();
+//
+//
+// System.out.println("Coverage\tUnique Coverage\tDuplication");
+// for (double d = oneOverCoverage; (int) (d*xCoverage)<=50; d+=oneOverCoverage) {
+// double coverage = d * xCoverage;
+// double uniqueCoverage = uniqueXCoverage * m.estimateRoi(m.ESTIMATED_LIBRARY_SIZE, d, m.READ_PAIRS_EXAMINED, UNIQUE_READ_PAIRS);
+// double duplication = (coverage - uniqueCoverage) / coverage;
+// System.out.println(coverage + "\t" + uniqueCoverage + "\t" + duplication);
+// }
+ }
+}
diff --git a/src/java/picard/sam/EarliestFragmentPrimaryAlignmentSelectionStrategy.java b/src/java/picard/sam/EarliestFragmentPrimaryAlignmentSelectionStrategy.java
new file mode 100644
index 0000000..e68fcd1
--- /dev/null
+++ b/src/java/picard/sam/EarliestFragmentPrimaryAlignmentSelectionStrategy.java
@@ -0,0 +1,93 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.AlignmentBlock;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.CoordMath;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * When it is necessary to pick a primary alignment from a group of alignments for a read, pick the one that maps
+ * the earliest base in the read. This implementation only works for fragments, not for pairs.
+ * If there are multiple alignments that all start mapping at the same offest in the read, pick the one with the best
+ * MAPQ. If there are multiple alignments that have the earliest mapping and that have the same MAPQ, pick one randomly.
+ */
+public class EarliestFragmentPrimaryAlignmentSelectionStrategy implements PrimaryAlignmentSelectionStrategy {
+ // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
+ // multiple alignments with equal mapping quality.
+ private final Random random = new Random(1);
+
+ public void pickPrimaryAlignment(final HitsForInsert hitsForInsert) {
+
+ if (hitsForInsert.numHits() == 0) throw new IllegalArgumentException("No alignments to pick from");
+
+ // Gather the earliest alignment(s) with best MAPQ
+ final List<Integer> earliestAlignments = new ArrayList<Integer>();
+ int earliestMappedBase = Integer.MAX_VALUE;
+ int bestMapQ = -1;
+ for (int i = 0; i < hitsForInsert.numHits(); ++i) {
+ final SAMRecord rec = hitsForInsert.getFragment(i);
+ if (rec.getReadUnmappedFlag()) continue;
+ final int thisFirstMappedBase = getIndexOfFirstAlignedBase(rec);
+ final int thisMapQ = rec.getMappingQuality();
+ if (thisFirstMappedBase < earliestMappedBase ||
+ (thisFirstMappedBase == earliestMappedBase && thisMapQ > bestMapQ)) {
+ earliestAlignments.clear();
+ earliestAlignments.add(i);
+ earliestMappedBase = thisFirstMappedBase;
+ bestMapQ = thisMapQ;
+ } else if (thisFirstMappedBase == earliestMappedBase && thisMapQ == bestMapQ) {
+ earliestAlignments.add(i);
+ } // else it is not the earliest or the best so skip it.
+ }
+
+
+ if (earliestAlignments.size() == 1) {
+ // If only one best, pick it.
+ hitsForInsert.setPrimaryAlignment(earliestAlignments.get(0));
+ } else {
+ // Arbitrarily select one of the best
+ hitsForInsert.setPrimaryAlignment(earliestAlignments.get(random.nextInt(earliestAlignments.size())));
+ }
+ }
+
+ /**
+ * Returns 1-based index of first base in read that corresponds to M in CIGAR string.
+ * Note that first is relative to 5' end, so that for reverse-strand alignment, the index of
+ * the last base aligned is computed relative to the end of the read.
+ */
+ int getIndexOfFirstAlignedBase(final SAMRecord rec) {
+ final List<AlignmentBlock> alignmentBlocks = rec.getAlignmentBlocks();
+ if (rec.getReadNegativeStrandFlag()) {
+ final AlignmentBlock alignmentBlock = alignmentBlocks.get(alignmentBlocks.size() - 1);
+ return rec.getReadLength() - CoordMath.getEnd(alignmentBlock.getReadStart(), alignmentBlock.getLength()) + 1;
+ } else {
+ return alignmentBlocks.get(0).getReadStart();
+ }
+ }
+}
diff --git a/src/java/picard/sam/FastqToSam.java b/src/java/picard/sam/FastqToSam.java
new file mode 100644
index 0000000..9aa68fc
--- /dev/null
+++ b/src/java/picard/sam/FastqToSam.java
@@ -0,0 +1,499 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.fastq.FastqConstants;
+import htsjdk.samtools.fastq.FastqConstants.FastqExtensions;
+import htsjdk.samtools.fastq.FastqReader;
+import htsjdk.samtools.fastq.FastqRecord;
+import htsjdk.samtools.util.FastqQualityFormat;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Iso8601Date;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.QualityEncodingDetector;
+import htsjdk.samtools.util.SolexaQualityConverter;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Converts a fastq file to an unaligned BAM/SAM format.
+ * See <a href="http://maq.sourceforge.net/fastq.shtml">MAQ FastQ specification</a> for details.
+ * Three fastq versions are supported: FastqSanger, FastqSolexa and FastqIllumina.
+ * Input files can be in GZip format (end in .gz).
+ */
+ at CommandLineProgramProperties(
+ usage = "Extracts read sequences and qualities from the input fastq file and writes them into the output file in unaligned BAM format."
+ + " Input files can be in GZip format (end in .gz).\n",
+ usageShort = "Converts a fastq file to an unaligned BAM or SAM file",
+ programGroup = SamOrBam.class
+)
+public class FastqToSam extends CommandLineProgram {
+ private static final Log LOG = Log.getInstance(FastqToSam.class);
+
+ @Option(shortName="F1", doc="Input fastq file (optionally gzipped) for single end data, or first read in paired end data.")
+ public File FASTQ;
+
+ @Option(shortName="F2", doc="Input fastq file (optionally gzipped) for the second read of paired end data.", optional=true)
+ public File FASTQ2;
+
+ @Option(doc="Use sequential fastq files with the suffix <prefix>_###.fastq or <prefix>_###.fastq.gz", optional=true)
+ public boolean USE_SEQUENTIAL_FASTQS = false;
+
+ @Option(shortName="V", doc="A value describing how the quality values are encoded in the fastq. Either Solexa for pre-pipeline 1.3 " +
+ "style scores (solexa scaling + 66), Illumina for pipeline 1.3 and above (phred scaling + 64) or Standard for phred scaled " +
+ "scores with a character shift of 33. If this value is not specified, the quality format will be detected automatically.", optional = true)
+ public FastqQualityFormat QUALITY_FORMAT;
+
+ @Option(doc="Output SAM/BAM file. ", shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public File OUTPUT ;
+
+ @Option(shortName="RG", doc="Read group name")
+ public String READ_GROUP_NAME = "A";
+
+ @Option(shortName="SM", doc="Sample name to insert into the read group header")
+ public String SAMPLE_NAME;
+
+ @Option(shortName="LB", doc="The library name to place into the LB attribute in the read group header", optional=true)
+ public String LIBRARY_NAME;
+
+ @Option(shortName="PU", doc="The platform unit (often run_barcode.lane) to insert into the read group header", optional=true)
+ public String PLATFORM_UNIT;
+
+ @Option(shortName="PL", doc="The platform type (e.g. illumina, solid) to insert into the read group header", optional=true)
+ public String PLATFORM;
+
+ @Option(shortName="CN", doc="The sequencing center from which the data originated", optional=true)
+ public String SEQUENCING_CENTER;
+
+ @Option(shortName = "PI", doc = "Predicted median insert size, to insert into the read group header", optional = true)
+ public Integer PREDICTED_INSERT_SIZE;
+
+ @Option(shortName = "PG", doc = "Program group to insert into the read group header.", optional=true)
+ public String PROGRAM_GROUP;
+
+ @Option(shortName = "PM", doc = "Platform model to insert into the group header (free-form text providing further details of the platform/technology used)", optional=true)
+ public String PLATFORM_MODEL;
+
+ @Option(doc="Comment(s) to include in the merged output file's header.", optional=true, shortName="CO")
+ public List<String> COMMENT = new ArrayList<String>();
+
+ @Option(shortName = "DS", doc = "Inserted into the read group header", optional = true)
+ public String DESCRIPTION;
+
+ @Option(shortName = "DT", doc = "Date the run was produced, to insert into the read group header", optional = true)
+ public Iso8601Date RUN_DATE;
+
+ @Option(shortName="SO", doc="The sort order for the output sam/bam file.")
+ public SortOrder SORT_ORDER = SortOrder.queryname;
+
+ @Option(doc="Minimum quality allowed in the input fastq. An exception will be thrown if a quality is less than this value.")
+ public int MIN_Q = 0;
+
+ @Option(doc="Maximum quality allowed in the input fastq. An exception will be thrown if a quality is greater than this value.")
+ public int MAX_Q = SAMUtils.MAX_PHRED_SCORE;
+
+ @Option(doc="If true and this is an unpaired fastq any occurance of '/1' will be removed from the end of a read name.")
+ public Boolean STRIP_UNPAIRED_MATE_NUMBER = false;
+
+ @Option(doc="Allow (and ignore) empty lines")
+ public Boolean ALLOW_AND_IGNORE_EMPTY_LINES = false;
+
+ private static final SolexaQualityConverter solexaQualityConverter = SolexaQualityConverter.getSingleton();
+
+ /**
+ * Looks at fastq input(s) and attempts to determine the proper quality format
+ *
+ * Closes the reader(s) by side effect
+ *
+ * @param reader1 The first fastq input
+ * @param reader2 The second fastq input, if necessary. To not use this input, set it to null
+ * @param expectedQuality If provided, will be used for sanity checking. If left null, autodetection will occur
+ */
+ public static FastqQualityFormat determineQualityFormat(final FastqReader reader1, final FastqReader reader2, final FastqQualityFormat expectedQuality) {
+ final QualityEncodingDetector detector = new QualityEncodingDetector();
+
+ if (reader2 == null) {
+ detector.add(QualityEncodingDetector.DEFAULT_MAX_RECORDS_TO_ITERATE, reader1);
+ } else {
+ detector.add(QualityEncodingDetector.DEFAULT_MAX_RECORDS_TO_ITERATE, reader1, reader2);
+ reader2.close();
+ }
+
+ reader1.close();
+
+ final FastqQualityFormat qualityFormat = detector.generateBestGuess(QualityEncodingDetector.FileContext.FASTQ, expectedQuality);
+ if (detector.isDeterminationAmbiguous()) {
+ LOG.warn("Making ambiguous determination about fastq's quality encoding; more than one format possible based on observed qualities.");
+ }
+ LOG.info(String.format("Auto-detected quality format as: %s.", qualityFormat));
+
+ return qualityFormat;
+ }
+
+ /** Stock main method. */
+ public static void main(final String[] argv) {
+ System.exit(new FastqToSam().instanceMain(argv));
+ }
+
+ /**
+ * Get a list of FASTQs that are sequentially numbered based on the first (base) fastq.
+ * The files should be named:
+ * <prefix>_001.<extension>, <prefix>_002.<extension>, ..., <prefix>_XYZ.<extension>
+ * The base files should be:
+ * <prefix>_001.<extension>
+ * An example would be:
+ * RUNNAME_S8_L005_R1_001.fastq
+ * RUNNAME_S8_L005_R1_002.fastq
+ * RUNNAME_S8_L005_R1_003.fastq
+ * RUNNAME_S8_L005_R1_004.fastq
+ * where `baseFastq` is the first in that list.
+ */
+ protected static List<File> getSequentialFileList(final File baseFastq) {
+ final List<File> files = new ArrayList<File>();
+ files.add(baseFastq);
+
+ // Find the correct extension used in the base FASTQ
+ FastqExtensions fastqExtensions = null;
+ String suffix = null; // store the suffix including the extension
+ for (final FastqExtensions ext : FastqExtensions.values()) {
+ suffix = "_001" + ext.getExtension();
+ if (baseFastq.getAbsolutePath().endsWith(suffix)) {
+ fastqExtensions = ext;
+ break;
+ }
+ }
+ if (null == fastqExtensions) {
+ throw new PicardException(String.format("Could not parse the FASTQ extension (expected '_001' + '%s'): %s", FastqExtensions.values().toString(), baseFastq));
+ }
+
+ // Find all the files
+ for (int idx = 2; true; idx++) {
+ String fastq = baseFastq.getAbsolutePath();
+ fastq = String.format("%s_%03d%s", fastq.substring(0, fastq.length() - suffix.length()), idx, fastqExtensions.getExtension());
+ try {
+ IOUtil.assertFileIsReadable(new File(fastq));
+ } catch (final SAMException e) { // the file is not readable, so do not continue
+ break;
+ }
+ files.add(new File(fastq));
+ }
+
+ return files;
+ }
+
+ /* Simply invokes the right method for unpaired or paired data. */
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(FASTQ);
+ if (FASTQ2 != null) {
+ IOUtil.assertFileIsReadable(FASTQ2);
+ }
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final SAMFileHeader header = createSamFileHeader();
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(header, false, OUTPUT);
+
+ // Set the quality format
+ QUALITY_FORMAT = FastqToSam.determineQualityFormat(fileToFastqReader(FASTQ),
+ (FASTQ2 == null) ? null : fileToFastqReader(FASTQ2),
+ QUALITY_FORMAT);
+
+ // Lists for sequential files, but also used when not sequential
+ final List<FastqReader> readers1 = new ArrayList<FastqReader>();
+ final List<FastqReader> readers2 = new ArrayList<FastqReader>();
+
+ if (USE_SEQUENTIAL_FASTQS) {
+ // Get all the files
+ for (final File fastq : getSequentialFileList(FASTQ)) {
+ readers1.add(fileToFastqReader(fastq));
+ }
+ if (null != FASTQ2) {
+ for (final File fastq : getSequentialFileList(FASTQ2)) {
+ readers2.add(fileToFastqReader(fastq));
+ }
+ if (readers1.size() != readers2.size()) {
+ throw new PicardException(String.format("Found %d files for FASTQ and %d files for FASTQ2.", readers1.size(), readers2.size()));
+ }
+ }
+ }
+ else {
+ readers1.add(fileToFastqReader(FASTQ));
+ if (FASTQ2 != null) {
+ readers2.add(fileToFastqReader(FASTQ2));
+ }
+ }
+
+ // Loop through the FASTQs
+ for (int idx = 0; idx < readers1.size(); idx++) {
+ makeItSo(readers1.get(idx),
+ (readers2.isEmpty()) ? null : readers2.get(idx),
+ writer);
+ }
+
+ // Close all the things
+ for (final FastqReader reader : readers1) reader.close();
+ for (final FastqReader reader : readers2) reader.close();
+ writer.close();
+
+ return 0;
+ }
+
+ /**
+ * Handles the FastqToSam execution on the FastqReader(s).
+ *
+ * In some circumstances it might be useful to circumvent the command line based instantiation of this
+ * class, however note that there is no handholding or guardrails to running in this manner.
+ *
+ * It is the caller's responsibility to close the reader(s)
+ *
+ * @param reader1 The FastqReader for the first fastq file
+ * @param reader2 The second FastqReader if applicable. Pass in null if only using a single reader
+ * @param writer The SAMFileWriter where the new SAM file is written
+ *
+ */
+ public void makeItSo(final FastqReader reader1, final FastqReader reader2, final SAMFileWriter writer) {
+ final int readCount = (reader2 == null) ? doUnpaired(reader1, writer) : doPaired(reader1, reader2, writer);
+ LOG.info("Processed " + readCount + " fastq reads");
+ }
+
+ /** Creates a simple SAM file from a single fastq file. */
+ protected int doUnpaired(final FastqReader freader, final SAMFileWriter writer) {
+ int readCount = 0;
+ final ProgressLogger progress = new ProgressLogger(LOG);
+ for ( ; freader.hasNext() ; readCount++) {
+ final FastqRecord frec = freader.next();
+ final SAMRecord srec = createSamRecord(writer.getFileHeader(), getReadName(frec.getReadHeader(), false) , frec, false) ;
+ srec.setReadPairedFlag(false);
+ writer.addAlignment(srec);
+ progress.record(srec);
+ }
+
+ return readCount;
+ }
+
+ /** More complicated method that takes two fastq files and builds pairing information in the SAM. */
+ protected int doPaired(final FastqReader freader1, final FastqReader freader2, final SAMFileWriter writer) {
+ int readCount = 0;
+ final ProgressLogger progress = new ProgressLogger(LOG);
+ for ( ; freader1.hasNext() && freader2.hasNext() ; readCount++) {
+ final FastqRecord frec1 = freader1.next();
+ final FastqRecord frec2 = freader2.next();
+
+ final String frec1Name = getReadName(frec1.getReadHeader(), true);
+ final String frec2Name = getReadName(frec2.getReadHeader(), true);
+ final String baseName = getBaseName(frec1Name, frec2Name, freader1, freader2);
+
+ final SAMRecord srec1 = createSamRecord(writer.getFileHeader(), baseName, frec1, true) ;
+ srec1.setFirstOfPairFlag(true);
+ srec1.setSecondOfPairFlag(false);
+ writer.addAlignment(srec1);
+ progress.record(srec1);
+
+ final SAMRecord srec2 = createSamRecord(writer.getFileHeader(), baseName, frec2, true) ;
+ srec2.setFirstOfPairFlag(false);
+ srec2.setSecondOfPairFlag(true);
+ writer.addAlignment(srec2);
+ progress.record(srec2);
+ }
+
+ if (freader1.hasNext() || freader2.hasNext()) {
+ throw new PicardException("Input paired fastq files must be the same length");
+ }
+
+ return readCount;
+ }
+
+ private FastqReader fileToFastqReader(final File file) {
+ return new FastqReader(file, ALLOW_AND_IGNORE_EMPTY_LINES);
+ }
+
+ private SAMRecord createSamRecord(final SAMFileHeader header, final String baseName, final FastqRecord frec, final boolean paired) {
+ final SAMRecord srec = new SAMRecord(header);
+ srec.setReadName(baseName);
+ srec.setReadString(frec.getReadString());
+ srec.setReadUnmappedFlag(true);
+ srec.setAttribute(ReservedTagConstants.READ_GROUP_ID, READ_GROUP_NAME);
+ final byte[] quals = StringUtil.stringToBytes(frec.getBaseQualityString());
+ convertQuality(quals, QUALITY_FORMAT);
+ for (final byte qual : quals) {
+ final int uQual = qual & 0xff;
+ if (uQual < MIN_Q || uQual > MAX_Q) {
+ throw new PicardException("Base quality " + uQual + " is not in the range " + MIN_Q + ".." +
+ MAX_Q + " for read " + frec.getReadHeader());
+ }
+ }
+ srec.setBaseQualities(quals);
+
+ if (paired) {
+ srec.setReadPairedFlag(true);
+ srec.setMateUnmappedFlag(true);
+ }
+ return srec ;
+ }
+
+ /** Creates a simple header with the values provided on the command line. */
+ public SAMFileHeader createSamFileHeader() {
+ final SAMReadGroupRecord rgroup = new SAMReadGroupRecord(this.READ_GROUP_NAME);
+ rgroup.setSample(this.SAMPLE_NAME);
+ if (this.LIBRARY_NAME != null) rgroup.setLibrary(this.LIBRARY_NAME);
+ if (this.PLATFORM != null) rgroup.setPlatform(this.PLATFORM);
+ if (this.PLATFORM_UNIT != null) rgroup.setPlatformUnit(this.PLATFORM_UNIT);
+ if (this.SEQUENCING_CENTER != null) rgroup.setSequencingCenter(SEQUENCING_CENTER);
+ if (this.PREDICTED_INSERT_SIZE != null) rgroup.setPredictedMedianInsertSize(PREDICTED_INSERT_SIZE);
+ if (this.DESCRIPTION != null) rgroup.setDescription(this.DESCRIPTION);
+ if (this.RUN_DATE != null) rgroup.setRunDate(this.RUN_DATE);
+ if (this.PLATFORM_MODEL != null) rgroup.setPlatformModel(this.PLATFORM_MODEL);
+ if (this.PROGRAM_GROUP != null) rgroup.setProgramGroup(this.PROGRAM_GROUP);
+
+ final SAMFileHeader header = new SAMFileHeader();
+ header.addReadGroup(rgroup);
+
+ for (final String comment : COMMENT) {
+ header.addComment(comment);
+ }
+
+ header.setSortOrder(this.SORT_ORDER);
+ return header ;
+ }
+
+ /** Based on the type of quality scores coming in, converts them to a numeric byte[] in phred scale. */
+ void convertQuality(final byte[] quals, final FastqQualityFormat version) {
+ switch (version) {
+ case Standard:
+ SAMUtils.fastqToPhred(quals);
+ break ;
+ case Solexa:
+ solexaQualityConverter.convertSolexaQualityCharsToPhredBinary(quals);
+ break ;
+ case Illumina:
+ solexaQualityConverter.convertSolexa_1_3_QualityCharsToPhredBinary(quals);
+ break ;
+ }
+ }
+
+ /** Returns read baseName and asserts correct pair read name format:
+ * <ul>
+ * <li> Paired reads must either have the exact same read names or they must contain at least one "/"
+ * <li> and the First pair read name must end with "/1" and second pair read name ends with "/2"
+ * <li> The baseName (read name part before the /) must be the same for both read names
+ * <li> If the read names are exactly the same but end in "/2" or "/1" then an exception will be thrown
+ * </ul>
+ */
+ String getBaseName(final String readName1, final String readName2, final FastqReader freader1, final FastqReader freader2) {
+ String [] toks = getReadNameTokens(readName1, 1, freader1);
+ final String baseName1 = toks[0] ;
+ final String num1 = toks[1] ;
+
+ toks = getReadNameTokens(readName2, 2, freader2);
+ final String baseName2 = toks[0] ;
+ final String num2 = toks[1];
+
+ if (!baseName1.equals(baseName2)) {
+ throw new PicardException(String.format("In paired mode, read name 1 (%s) does not match read name 2 (%s)", baseName1,baseName2));
+ }
+
+ final boolean num1Blank = StringUtil.isBlank(num1);
+ final boolean num2Blank = StringUtil.isBlank(num2);
+ if (num1Blank || num2Blank) {
+ if(!num1Blank) throw new PicardException(error(freader1,"Pair 1 number is missing (" +readName1+ "). Both pair numbers must be present or neither.")); //num1 != blank and num2 == blank
+ else if(!num2Blank) throw new PicardException(error(freader2, "Pair 2 number is missing (" +readName2+ "). Both pair numbers must be present or neither.")); //num1 == blank and num =2 != blank
+ } else {
+ if (!num1.equals("1")) throw new PicardException(error(freader1,"Pair 1 number must be 1 ("+readName1+")"));
+ if (!num2.equals("2")) throw new PicardException(error(freader2,"Pair 2 number must be 2 ("+readName2+")"));
+ }
+
+ return baseName1 ;
+ }
+
+ /** Breaks up read name into baseName and number separated by the last / */
+ private String [] getReadNameTokens(final String readName, final int pairNum, final FastqReader freader) {
+ if(readName.equals("")) throw new PicardException(error(freader,"Pair read name "+pairNum+" cannot be empty: "+readName));
+
+ final int idx = readName.lastIndexOf("/");
+ final String result[] = new String[2];
+
+ if (idx == -1) {
+ result[0] = readName;
+ result[1] = null;
+ } else {
+ result[1] = readName.substring(idx+1, readName.length()); // should be a 1 or 2
+
+ if(!result[1].equals("1") && !result[1].equals("2")) { //if not a 1 or 2 then names must be identical
+ result[0] = readName;
+ result[1] = null;
+ }
+ else {
+ result[0] = readName.substring(0,idx); // baseName
+ }
+ }
+
+ return result ;
+ }
+
+ /** Little utility to give error messages corresponding to line numbers in the input files. */
+ private String error(final FastqReader freader, final String str) {
+ return str +" at line "+freader.getLineNumber() +" in file "+freader.getFile().getAbsolutePath();
+ }
+
+ // Read names cannot contain blanks
+ private String getReadName(final String fastqHeader, final boolean paired) {
+ final int idx = fastqHeader.indexOf(" ");
+ String readName = (idx == -1) ? fastqHeader : fastqHeader.substring(0,idx);
+
+ // NOTE: the while loop isn't necessarily the most efficient way to handle this but we don't
+ // expect this to ever happen more than once, just trapping pathological cases
+ while (STRIP_UNPAIRED_MATE_NUMBER && !paired && (readName.endsWith("/1") || readName.endsWith("/2"))) {
+ // If this is an unpaired run we want to make sure that "/1" isn't tacked on the end of the read name,
+ // as this can cause problems down the road in MergeBamAlignment
+ readName = readName.substring(0, readName.length() - 2);
+ }
+
+ return readName;
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (MIN_Q < 0) return new String[]{"MIN_Q must be >= 0"};
+ if (MAX_Q > SAMUtils.MAX_PHRED_SCORE) return new String[]{"MAX_Q must be <= " + SAMUtils.MAX_PHRED_SCORE};
+ return null;
+ }
+}
diff --git a/src/java/picard/sam/FilterSamReads.java b/src/java/picard/sam/FilterSamReads.java
new file mode 100644
index 0000000..6d5a44a
--- /dev/null
+++ b/src/java/picard/sam/FilterSamReads.java
@@ -0,0 +1,232 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * $Id$
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.filter.AlignedFilter;
+import htsjdk.samtools.filter.FilteringIterator;
+import htsjdk.samtools.filter.ReadNameFilter;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+import java.text.DecimalFormat;
+
+/**
+ * From a SAM or BAM file, produce a new SAM or BAM by filtering aligned reads or a list of read
+ * names provided in a file (one readname per line)
+ * <p/>
+ * $Id$
+ */
+ at CommandLineProgramProperties(
+ usage = "Produces a new SAM or BAM file by including or excluding aligned reads " +
+ "or a list of reads names supplied in the READ_LIST_FILE from the INPUT SAM or BAM file.\n",
+ usageShort = "Creates a new SAM or BAM file by including or excluding aligned reads",
+ programGroup = SamOrBam.class
+)
+public class FilterSamReads extends CommandLineProgram {
+
+ private static final Log log = Log.getInstance(FilterSamReads.class);
+
+ private static enum Filter {
+ includeAligned("OUTPUT SAM/BAM will contain aligned reads only. INPUT SAM/BAM must be in queryname SortOrder. (Note that *both* first and second of paired reads must be aligned to be included in the OUTPUT SAM or BAM)"),
+ excludeAligned("OUTPUT SAM/BAM will contain un-mapped reads only. INPUT SAM/BAM must be in queryname SortOrder. (Note that *both* first and second of pair must be aligned to be excluded from the OUTPUT SAM or BAM)"),
+ includeReadList("OUTPUT SAM/BAM will contain reads that are supplied in the READ_LIST_FILE file"),
+ excludeReadList("OUTPUT bam will contain reads that are *not* supplied in the READ_LIST_FILE file");
+
+ private final String description;
+
+ Filter(final String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String toString() {
+ return this.name() + " [" + description + "]";
+ }
+ }
+
+ @Option(doc = "The SAM or BAM file that will be filtered.",
+ optional = false,
+ shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(doc = "Filter.", optional = false)
+ public Filter FILTER = null;
+
+ @Option(doc = "Read List File containing reads that will be included or excluded from the OUTPUT SAM or BAM file.",
+ optional = true,
+ shortName = "RLF")
+ public File READ_LIST_FILE;
+
+ @Option(
+ doc = "SortOrder of the OUTPUT SAM or BAM file, otherwise use the SortOrder of the INPUT file.",
+ optional = true, shortName = "SO")
+ public SAMFileHeader.SortOrder SORT_ORDER;
+
+ @Option(
+ doc = "Create .reads files (for debugging purposes)",
+ optional = true)
+ public boolean WRITE_READS_FILES = true;
+
+ @Option(doc = "SAM or BAM file to write read excluded results to",
+ optional = false, shortName = "O")
+ public File OUTPUT;
+
+ private void filterReads(final FilteringIterator filteringIterator) {
+
+ // get OUTPUT header from INPUT and overwrite it if necessary
+ final SAMFileHeader fileHeader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).getFileHeader(INPUT);
+ final SAMFileHeader.SortOrder inputSortOrder = fileHeader.getSortOrder();
+ if (SORT_ORDER != null) {
+ fileHeader.setSortOrder(SORT_ORDER);
+ }
+ final boolean presorted = inputSortOrder.equals(fileHeader.getSortOrder());
+ log.info("Filtering [presorted=" + presorted + "] " + INPUT.getName() + " -> OUTPUT=" +
+ OUTPUT.getName() + " [sortorder=" + fileHeader.getSortOrder().name() + "]");
+
+ // create OUTPUT file
+ final SAMFileWriter outputWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(fileHeader, presorted, OUTPUT);
+
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Written");
+
+ while (filteringIterator.hasNext()) {
+ final SAMRecord rec = filteringIterator.next();
+ outputWriter.addAlignment(rec);
+ progress.record(rec);
+ }
+
+ filteringIterator.close();
+ outputWriter.close();
+ log.info(new DecimalFormat("#,###").format(progress.getCount()) + " SAMRecords written to " + OUTPUT.getName());
+ }
+
+ /**
+ * Write out a file of read names for debugging purposes.
+ *
+ * @param samOrBamFile The SAM or BAM file for which we are going to write out a file of its
+ * containing read names
+ */
+ private void writeReadsFile(final File samOrBamFile) throws IOException {
+ final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(samOrBamFile);
+ final File readsFile =
+ new File(OUTPUT.getParentFile(), IOUtil.basename(samOrBamFile) + ".reads");
+ IOUtil.assertFileIsWritable(readsFile);
+ final BufferedWriter bw = IOUtil.openFileForBufferedWriting(readsFile, false);
+
+ for (final SAMRecord rec : reader) {
+ bw.write(rec.toString() + "\n");
+ }
+
+ bw.close();
+ reader.close();
+ IOUtil.assertFileIsReadable(readsFile);
+ }
+
+ @Override
+ protected int doWork() {
+
+ try {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ if (WRITE_READS_FILES) writeReadsFile(INPUT);
+
+ switch (FILTER) {
+ case includeAligned:
+ filterReads(new FilteringIterator(SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT).iterator(),
+ new AlignedFilter(true), true));
+ break;
+ case excludeAligned:
+ filterReads(new FilteringIterator(SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT).iterator(),
+ new AlignedFilter(false), true));
+ break;
+ case includeReadList:
+ filterReads(new FilteringIterator(SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT).iterator(),
+ new ReadNameFilter(READ_LIST_FILE, true)));
+ break;
+ case excludeReadList:
+ filterReads(new FilteringIterator(SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT).iterator(),
+ new ReadNameFilter(READ_LIST_FILE, false)));
+ break;
+ default:
+ throw new UnsupportedOperationException(FILTER.name() + " has not been implemented!");
+ }
+
+ IOUtil.assertFileIsReadable(OUTPUT);
+ if (WRITE_READS_FILES) writeReadsFile(OUTPUT);
+ return 0;
+
+ } catch (Exception e) {
+ if (OUTPUT.exists() && !OUTPUT.delete()) {
+ log.warn("Failed to delete " + OUTPUT.getAbsolutePath());
+ }
+
+ log.error(e, "Failed to filter " + INPUT.getName());
+ return 1;
+ }
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (INPUT.equals(OUTPUT)) {
+ return new String[]{"INPUT file and OUTPUT file must differ!"};
+ }
+
+ if ((FILTER.equals(Filter.includeReadList) ||
+ FILTER.equals(Filter.excludeReadList)) &&
+ READ_LIST_FILE == null) {
+ return new String[]{"A READ_LIST_FILE must be specified when using the " + FILTER.name() + " option"};
+
+ }
+
+ return super.customCommandLineValidation();
+ }
+
+ /**
+ * Stock main method.
+ *
+ * @param args main arguments
+ */
+ public static void main(final String[] args) {
+ System.exit(new FilterSamReads().instanceMain(args));
+ }
+
+}
diff --git a/src/java/picard/sam/FixMateInformation.java b/src/java/picard/sam/FixMateInformation.java
new file mode 100644
index 0000000..fe2c605
--- /dev/null
+++ b/src/java/picard/sam/FixMateInformation.java
@@ -0,0 +1,269 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.BAMRecordCodec;
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.MergingSamRecordIterator;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.SamFileHeaderMerger;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.RuntimeIOException;
+import htsjdk.samtools.util.SortingCollection;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Class to fix mate pair information for all reads in a SAM file. Will run in fairly limited
+ * memory unless there are lots of mate pairs that are far apart from each other in the file.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Ensure that all mate-pair information is in sync between each read " +
+ "and its mate pair. If no OUTPUT file is supplied then the output is written to a temporary file " +
+ "and then copied over the INPUT file. Reads marked with the secondary alignment flag are written " +
+ "to the output file unchanged.",
+ usageShort = "Ensure that all mate-pair information is in sync between each read and its mate pair",
+ programGroup = SamOrBam.class
+)
+public class FixMateInformation extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The input file to fix.")
+ public List<File> INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, optional = true,
+ doc = "The output file to write to. If no output file is supplied, the input file is overwritten.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, optional = true,
+ doc = "Optional sort order if the OUTPUT file should be sorted differently than the INPUT file.")
+ public SortOrder SORT_ORDER;
+
+ @Option(doc = "If true, assume that the input file is queryname sorted, even if the header says otherwise.",
+ shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
+ public boolean ASSUME_SORTED = false;
+
+ @Option(shortName = "MC", optional = true, doc = "Adds the mate CIGAR tag (MC) if true, does not if false.")
+ public Boolean ADD_MATE_CIGAR = true;
+
+ private static final Log log = Log.getInstance(FixMateInformation.class);
+
+ protected SAMFileWriter out;
+
+ public static void main(final String[] args) {
+ new FixMateInformation().instanceMainWithExit(args);
+ }
+
+ protected int doWork() {
+ // Open up the input
+ boolean allQueryNameSorted = true;
+ final List<SamReader> readers = new ArrayList<SamReader>();
+ for (final File f : INPUT) {
+ IOUtil.assertFileIsReadable(f);
+ final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(f);
+ readers.add(reader);
+ if (reader.getFileHeader().getSortOrder() != SortOrder.queryname) allQueryNameSorted = false;
+ }
+
+ // Decide where to write the fixed file - into the specified output file
+ // or into a temporary file that will overwrite the INPUT file eventually
+ if (OUTPUT != null) OUTPUT = OUTPUT.getAbsoluteFile();
+ final boolean differentOutputSpecified = OUTPUT != null;
+
+ if (differentOutputSpecified) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+ } else if (INPUT.size() != 1) {
+ throw new PicardException("Must specify either an explicit OUTPUT file or a single INPUT file to be overridden.");
+ } else {
+ final File soleInput = INPUT.get(0).getAbsoluteFile();
+ final File dir = soleInput.getParentFile().getAbsoluteFile();
+ try {
+ IOUtil.assertFileIsWritable(soleInput);
+ IOUtil.assertDirectoryIsWritable(dir);
+ OUTPUT = File.createTempFile(soleInput.getName() + ".being_fixed.", BamFileIoUtils.BAM_FILE_EXTENSION, dir);
+ } catch (final IOException ioe) {
+ throw new RuntimeIOException("Could not create tmp file in " + dir.getAbsolutePath());
+ }
+ }
+
+ // Get the input records merged and sorted by query name as needed
+ final PeekableIterator<SAMRecord> iterator;
+ final SAMFileHeader header;
+
+ {
+ // Deal with merging if necessary
+ final Iterator<SAMRecord> tmp;
+ if (INPUT.size() > 1) {
+ final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(readers.size());
+ for (final SamReader reader : readers) {
+ headers.add(reader.getFileHeader());
+ }
+ final SortOrder sortOrder = (allQueryNameSorted ? SortOrder.queryname : SortOrder.unsorted);
+ final SamFileHeaderMerger merger = new SamFileHeaderMerger(sortOrder, headers, false);
+ tmp = new MergingSamRecordIterator(merger, readers, false);
+ header = merger.getMergedHeader();
+ } else {
+ tmp = readers.get(0).iterator();
+ header = readers.get(0).getFileHeader();
+ }
+
+ // And now deal with re-sorting if necessary
+ if (ASSUME_SORTED || allQueryNameSorted) {
+ iterator = new SamPairUtil.SetMateInfoIterator(new PeekableIterator<SAMRecord>(tmp), ADD_MATE_CIGAR);
+ } else {
+ log.info("Sorting input into queryname order.");
+ final SortingCollection<SAMRecord> sorter = SortingCollection.newInstance(SAMRecord.class,
+ new BAMRecordCodec(header),
+ new SAMRecordQueryNameComparator(),
+ MAX_RECORDS_IN_RAM,
+ TMP_DIR);
+ while (tmp.hasNext()) {
+ sorter.add(tmp.next());
+
+ }
+
+ iterator = new SamPairUtil.SetMateInfoIterator(new PeekableIterator<SAMRecord>(sorter.iterator()) {
+ @Override
+ public void close() {
+ super.close();
+ sorter.cleanup();
+ }
+ }, ADD_MATE_CIGAR);
+ log.info("Sorting by queryname complete.");
+ }
+
+ // Deal with the various sorting complications
+ final SortOrder outputSortOrder = SORT_ORDER == null ? readers.get(0).getFileHeader().getSortOrder() : SORT_ORDER;
+ log.info("Output will be sorted by " + outputSortOrder);
+ header.setSortOrder(outputSortOrder);
+ }
+
+ if (CREATE_INDEX && header.getSortOrder() != SortOrder.coordinate) {
+ throw new PicardException("Can't CREATE_INDEX unless sort order is coordinate");
+ }
+
+ createSamFileWriter(header);
+
+ log.info("Traversing query name sorted records and fixing up mate pair information.");
+ final ProgressLogger progress = new ProgressLogger(log);
+ while (iterator.hasNext()) {
+ final SAMRecord record = iterator.next();
+ out.addAlignment(record);
+ progress.record(record);
+ }
+ iterator.close();
+
+ if (header.getSortOrder() == SortOrder.queryname) {
+ log.info("Closing output file.");
+ } else {
+ log.info("Finished processing reads; re-sorting output file.");
+ }
+ closeWriter();
+
+ // Lastly if we're fixing in place, swap the files
+ if (!differentOutputSpecified) {
+ log.info("Replacing input file with fixed file.");
+
+ final File soleInput = INPUT.get(0).getAbsoluteFile();
+ final File old = new File(soleInput.getParentFile(), soleInput.getName() + ".old");
+ if (!old.exists() && soleInput.renameTo(old)) {
+ if (OUTPUT.renameTo(soleInput)) {
+
+ if (!old.delete()) {
+ log.warn("Could not delete old file: " + old.getAbsolutePath());
+ return 1;
+ }
+
+ if (CREATE_INDEX) {
+ final File newIndex = new File(OUTPUT.getParent(),
+ OUTPUT.getName().substring(0, OUTPUT.getName().length() - 4) + ".bai");
+ final File oldIndex = new File(soleInput.getParent(),
+ soleInput.getName().substring(0, soleInput.getName().length() - 4) + ".bai");
+
+ if (!newIndex.renameTo(oldIndex)) {
+ log.warn("Could not overwrite index file: " + oldIndex.getAbsolutePath());
+ }
+ }
+
+ } else {
+ log.error("Could not move new file to " + soleInput.getAbsolutePath());
+ log.error("Input file preserved as: " + old.getAbsolutePath());
+ log.error("New file preserved as: " + OUTPUT.getAbsolutePath());
+ return 1;
+ }
+ } else {
+ log.error("Could not move input file out of the way: " + soleInput.getAbsolutePath());
+
+ if (!OUTPUT.delete()) {
+ log.error("Could not delete temporary file: " + OUTPUT.getAbsolutePath());
+ }
+
+ return 1;
+ }
+
+ }
+
+ CloserUtil.close(readers);
+ return 0;
+ }
+
+ protected void createSamFileWriter(final SAMFileHeader header) {
+ out = new SAMFileWriterFactory().makeSAMOrBAMWriter(header,
+ header.getSortOrder() == SortOrder.queryname, OUTPUT);
+
+ }
+
+ protected void writeAlignment(final SAMRecord sam) {
+ out.addAlignment(sam);
+ }
+
+ protected void closeWriter() {
+ out.close();
+ }
+
+}
diff --git a/src/java/picard/sam/GatherBamFiles.java b/src/java/picard/sam/GatherBamFiles.java
new file mode 100644
index 0000000..78722ef
--- /dev/null
+++ b/src/java/picard/sam/GatherBamFiles.java
@@ -0,0 +1,104 @@
+package picard.sam;
+
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Program to perform a rapid "gather" operation on BAM files after a scatter operations where
+ * the same process has been performed on different regions of a BAM file creating many smaller
+ * BAM files that now need to be concatenated back together.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Concatenates one or more BAM files together as efficiently as possible. Assumes that the " +
+ "list of BAM files provided as INPUT are in the order that they should be concatenated and simply concatenates the bodies " +
+ "of the BAM files while retaining the header from the first file. Operates via copying of the gzip blocks directly for speed " +
+ "but also supports generation of an MD5 on the output and indexing of the output BAM file. Only support BAM files, does not " +
+ "support SAM files.",
+ usageShort = "Concatenates one or more BAM files together as efficiently as possible",
+ programGroup = SamOrBam.class
+)
+public class GatherBamFiles extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "One or more BAM files or text files containing lists of BAM files one per line.")
+ public List<File> INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output BAM file to write.")
+ public File OUTPUT;
+
+ private static final Log log = Log.getInstance(GatherBamFiles.class);
+
+ // Stock main method.
+ public static void main(final String[] args) {
+ final GatherBamFiles gatherer = new GatherBamFiles();
+ gatherer.CREATE_INDEX = true;
+ gatherer.instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ final List<File> inputs = IOUtil.unrollFiles(INPUT, BamFileIoUtils.BAM_FILE_EXTENSION, ".sam");
+ for (final File f : inputs) IOUtil.assertFileIsReadable(f);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ if (determineBlockCopyingStatus(inputs)) {
+ BamFileIoUtils.gatherWithBlockCopying(inputs, OUTPUT, CREATE_INDEX, CREATE_MD5_FILE);
+ } else {
+ gatherNormally(inputs, OUTPUT, CREATE_INDEX, CREATE_MD5_FILE, REFERENCE_SEQUENCE);
+ }
+
+ return 0;
+ }
+
+ private boolean determineBlockCopyingStatus(final List<File> inputs) {
+ boolean useBlockCopying = true;
+ for (final File f : inputs) {
+ if (!BamFileIoUtils.isBamFile(f)) {
+ useBlockCopying = false;
+ }
+ }
+ return useBlockCopying;
+ }
+
+ /**
+ * Simple implementation of a gather operations that uses SAMFileReaders and Writers in order to concatenate
+ * multiple BAM files.
+ */
+ private static void gatherNormally(final List<File> inputs, final File output, final boolean createIndex, final boolean createMd5,
+ final File referenceFasta) {
+ final SAMFileHeader header;
+ {
+ header = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).getFileHeader(inputs.get(0));
+ }
+
+ final SAMFileWriter out = new SAMFileWriterFactory().setCreateIndex(createIndex).setCreateMd5File(createMd5).makeSAMOrBAMWriter(header, true, output);
+
+ for (final File f : inputs) {
+ log.info("Gathering " + f.getAbsolutePath());
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).open(f);
+ for (final SAMRecord rec : in) out.addAlignment(rec);
+ CloserUtil.close(in);
+ }
+
+ out.close();
+ }
+
+}
diff --git a/src/java/picard/sam/HitsForInsert.java b/src/java/picard/sam/HitsForInsert.java
new file mode 100644
index 0000000..5ee312c
--- /dev/null
+++ b/src/java/picard/sam/HitsForInsert.java
@@ -0,0 +1,283 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMTag;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Holds all the hits (alignments) for a read or read pair. For single-end reads, all the alignments are
+ * stored in firstOfPairOrFragment list. For paired-end, alignments are stored in firstOfPairOrFragment list and
+ * secondOfPair list.
+ *
+ * If there is more than one alignment, the selected PrimaryAlignmentSelectionStrategy is used to decide which
+ * alignment should be marked as primary. The rest are marked as secondary.
+ *
+ * When AbstractAlignmentMerger emits these reads, for paired end reads it assumes that the ith first end alignment
+ * and the ith second end alignment are correlated for the purpose of setting mate information in the SAMRecord.
+ * If it is not appropriate for the ends to be linked like that, then the alignments should be staggered in
+ * the lists so that there is a null in the other end list for each alignment. E.g. for the firstOfPair(5),
+ * secondOfPair(5) should be null in order not to set the mate info. In that case the mate info will indicate that
+ * the other end is unmapped.
+ */
+class HitsForInsert {
+
+ private static final HitIndexComparator comparator = new HitIndexComparator();
+
+ public enum NumPrimaryAlignmentState {
+ NONE, ONE, MORE_THAN_ONE
+ }
+
+
+ // These are package-visible to make life easier for the PrimaryAlignmentSelectionStrategies.
+ final List<SAMRecord> firstOfPairOrFragment = new ArrayList<SAMRecord>();
+ final List<SAMRecord> secondOfPair = new ArrayList<SAMRecord>();
+
+ private final List<SAMRecord> supplementalFirstOfPairOrFragment = new ArrayList<SAMRecord>();
+ private final List<SAMRecord> supplementalSecondOfPair = new ArrayList<SAMRecord>();
+
+ /**
+ * @throws if numHits() == 0
+ */
+ public String getReadName() {
+ return getRepresentativeRead().getReadName();
+ }
+
+ /**
+ * @throws if numHits() == 0
+ */
+ public boolean isPaired() {
+ return getRepresentativeRead().getReadPairedFlag();
+ }
+
+ public SAMRecord getRepresentativeRead() {
+ for (final SAMRecord rec : firstOfPairOrFragment) {
+ if (rec != null) return rec;
+ }
+ for (final SAMRecord rec : secondOfPair) {
+ if (rec != null) return rec;
+ }
+ throw new IllegalStateException("Should not be called if numHits == 0");
+ }
+
+ /**
+ * Note that a single alignment for each end of a read pair is counted as a single hit.
+ */
+ public int numHits() {
+ return Math.max(firstOfPairOrFragment.size(), secondOfPair.size());
+ }
+
+ /** True if either the first or second of pair has supplementary alignments, otherwise false. */
+ public boolean hasSupplementalHits() {
+ return !(this.supplementalFirstOfPairOrFragment.isEmpty() && this.supplementalSecondOfPair.isEmpty());
+ }
+
+ /**
+ * @return Returns the ith hit for the first end, or null if the first end is not aligned.
+ */
+ public SAMRecord getFirstOfPair(final int i) {
+ if (i >= firstOfPairOrFragment.size()) {
+ return null;
+ } else {
+ return firstOfPairOrFragment.get(i);
+ }
+ }
+
+ public void addFirstOfPairOrFragment(final SAMRecord rec) {
+ firstOfPairOrFragment.add(rec);
+ }
+
+ public void addSecondOfPair(final SAMRecord rec) {
+ secondOfPair.add(rec);
+ }
+
+ public void addSupplementalFirstOfPairOrFragment(final SAMRecord rec) {
+ supplementalFirstOfPairOrFragment.add(rec);
+ }
+
+ public void addSupplementalSecondOfPair(final SAMRecord rec) {
+ supplementalSecondOfPair.add(rec);
+ }
+
+ /**
+ * @return The ith hit for a un-paired read. Never returns null.
+ * Do not call if paired read.
+ */
+ public SAMRecord getFragment(final int i) {
+ final SAMRecord samRecord = firstOfPairOrFragment.get(i);
+ if (samRecord.getReadPairedFlag()) throw new UnsupportedOperationException("getFragment called for paired read");
+ return samRecord;
+ }
+
+ /**
+ * @return Returns the ith hit for the second end, or null if the second end is not aligned.
+ */
+ public SAMRecord getSecondOfPair(final int i) {
+ if (i >= secondOfPair.size()) {
+ return null;
+ } else {
+ return secondOfPair.get(i);
+ }
+ }
+
+ /**
+ * Set all alignments to not primary, except for the one specified by the argument. If paired, and set the
+ * alignment for both ends if there is an alignment for both ends, otherwise just for the end for which
+ * there is an alignment at the given index.
+ * @param primaryAlignmentIndex
+ */
+ public void setPrimaryAlignment(final int primaryAlignmentIndex) {
+ if (primaryAlignmentIndex < 0 || primaryAlignmentIndex >= this.numHits()) {
+ throw new IllegalArgumentException("primaryAlignmentIndex(" + primaryAlignmentIndex +
+ ") out of range for numHits(" + numHits() + ")");
+ }
+ // Set all alignment to be not primary except the selected one.
+ for (int i = 0; i < this.numHits(); ++i) {
+ final boolean notPrimary = (i != primaryAlignmentIndex);
+ if (this.getFirstOfPair(i) != null) {
+ this.getFirstOfPair(i).setNotPrimaryAlignmentFlag(notPrimary);
+ }
+ if (this.getSecondOfPair(i) != null) {
+ this.getSecondOfPair(i).setNotPrimaryAlignmentFlag(notPrimary);
+ }
+ }
+
+ }
+
+ /**
+ * Some alignment strategies expect to receive alignments for ends that are coordinated by
+ * hit index (HI) tag. This method lines up alignments for each end by HI tag value, and if there is
+ * no corresponding alignment for an alignment, there is a null in the array at that slot.
+ *
+ * This method then renumbers the HI values so that they start at zero and have no gaps, because some
+ * reads may have been filtered out.
+ */
+ public void coordinateByHitIndex() {
+ // Sort by HI value, with reads with no HI going at the end.
+ Collections.sort(firstOfPairOrFragment, comparator);
+ Collections.sort(secondOfPair, comparator);
+
+ // Insert nulls as necessary in the two lists so that correlated alignments have the same index
+ // and uncorrelated alignments have null in the other list at the corresponding index.
+ for (int i = 0; i < Math.min(firstOfPairOrFragment.size(), secondOfPair.size()); ++i) {
+ final Integer leftHi = firstOfPairOrFragment.get(i).getIntegerAttribute(SAMTag.HI.name());
+ final Integer rightHi = secondOfPair.get(i).getIntegerAttribute(SAMTag.HI.name());
+ if (leftHi != null) {
+ if (rightHi != null) {
+ if (leftHi < rightHi) secondOfPair.add(i, null);
+ else if (rightHi < leftHi) firstOfPairOrFragment.add(i, null);
+ // else the are correlated
+ }
+ } else if (rightHi != null) {
+ firstOfPairOrFragment.add(i, null);
+ } else {
+ // Both alignments do not have HI, so push down the ones on the right.
+ // Right is arbitrarily picked to push down.
+ secondOfPair.add(i, null);
+ }
+ }
+
+ // Now renumber any correlated alignments, and remove hit index if no correlated read.
+ int hi = 0;
+ for (int i = 0; i < numHits(); ++i) {
+ final SAMRecord first = getFirstOfPair(i);
+ final SAMRecord second = getSecondOfPair(i);
+ if (first != null && second != null) {
+ first.setAttribute(SAMTag.HI.name(), i);
+ second.setAttribute(SAMTag.HI.name(), i);
+ ++hi;
+ } else if (first != null) {
+ first.setAttribute(SAMTag.HI.name(), null);
+ } else {
+ second.setAttribute(SAMTag.HI.name(), null);
+ }
+ }
+ }
+
+
+
+ /**
+ * Determine if there is a single primary alignment in a list of alignments.
+ * @param records
+ * @return NONE, ONE or MORE_THAN_ONE.
+ */
+ private NumPrimaryAlignmentState tallyPrimaryAlignments(final List<SAMRecord> records) {
+ boolean seenPrimary = false;
+ for (int i = 0; i < records.size(); ++i) {
+ if (records.get(i) != null && !records.get(i).isSecondaryOrSupplementary()) {
+ if (seenPrimary) return NumPrimaryAlignmentState.MORE_THAN_ONE;
+ else seenPrimary = true;
+ }
+ }
+ if (seenPrimary) return NumPrimaryAlignmentState.ONE;
+ else return NumPrimaryAlignmentState.NONE;
+ }
+
+ public NumPrimaryAlignmentState tallyPrimaryAlignments(final boolean firstEnd) {
+ if (firstEnd) return tallyPrimaryAlignments(firstOfPairOrFragment);
+ else return tallyPrimaryAlignments(secondOfPair);
+ }
+
+ int findPrimaryAlignment(final List<SAMRecord> records) {
+ int indexOfPrimaryAlignment = -1;
+ for (int i = 0; i < records.size(); ++i) {
+ if (records.get(i) != null && !records.get(i).isSecondaryOrSupplementary()) {
+ if (indexOfPrimaryAlignment != -1) {
+ throw new IllegalStateException("Multiple primary alignments found for read " + getReadName());
+ }
+ indexOfPrimaryAlignment = i;
+ }
+ }
+ return indexOfPrimaryAlignment;
+ }
+
+ // null HI tag sorts after any non-null.
+ private static class HitIndexComparator implements Comparator<SAMRecord> {
+ public int compare(final SAMRecord rec1, final SAMRecord rec2) {
+ final Integer hi1 = rec1.getIntegerAttribute(SAMTag.HI.name());
+ final Integer hi2 = rec2.getIntegerAttribute(SAMTag.HI.name());
+ if (hi1 == null) {
+ if (hi2 == null) return 0;
+ else return 1;
+ } else if (hi2 == null) {
+ return -1;
+ } else {
+ return hi1.compareTo(hi2);
+ }
+ }
+ }
+
+ List<SAMRecord> getSupplementalFirstOfPairOrFragment() {
+ return supplementalFirstOfPairOrFragment;
+ }
+
+ List<SAMRecord> getSupplementalSecondOfPair() {
+ return supplementalSecondOfPair;
+ }
+}
diff --git a/src/java/picard/sam/MergeBamAlignment.java b/src/java/picard/sam/MergeBamAlignment.java
new file mode 100644
index 0000000..38e74a8
--- /dev/null
+++ b/src/java/picard/sam/MergeBamAlignment.java
@@ -0,0 +1,290 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.util.Log;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A command-line tool to merge BAM/SAM alignment info from a third-party aligner with the data in an
+ * unmapped BAM file, producing a third BAM file that has alignment data and all the additional data
+ * from the unmapped BAM
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Merges alignment data from a SAM or BAM " +
+ "file with additional data stored in an unmapped BAM file and produces a third SAM " +
+ "or BAM file of aligned and unaligned reads. The purpose is to use information from the " +
+ "unmapped BAM to fix up aligner output, so that the resulting file is valid for use by other " +
+ "Picard programs. For simple BAM file merges, use MergeSamFiles. NOTE that MergeBamAlignment expects to " +
+ "find a sequence dictionary in the same directory as REFERENCE_SEQUENCE and expects it " +
+ "to have the same base name as the reference fasta except with the extension '.dict'",
+ usageShort = "Merges alignment data from a SAM or BAM with data in an unmapped BAM file",
+ programGroup = SamOrBam.class
+)
+public class MergeBamAlignment extends CommandLineProgram {
+
+ @Option(shortName = "UNMAPPED",
+ doc = "Original SAM or BAM file of unmapped reads, which must be in queryname order.")
+ public File UNMAPPED_BAM;
+
+ @Option(shortName = "ALIGNED",
+ doc = "SAM or BAM file(s) with alignment data.",
+ mutex = {"READ1_ALIGNED_BAM", "READ2_ALIGNED_BAM"},
+ optional = true)
+ public List<File> ALIGNED_BAM;
+
+ @Option(shortName = "R1_ALIGNED",
+ doc = "SAM or BAM file(s) with alignment data from the first read of a pair.",
+ mutex = {"ALIGNED_BAM"},
+ optional = true)
+ public List<File> READ1_ALIGNED_BAM;
+
+ @Option(shortName = "R2_ALIGNED",
+ doc = "SAM or BAM file(s) with alignment data from the second read of a pair.",
+ mutex = {"ALIGNED_BAM"},
+ optional = true)
+ public List<File> READ2_ALIGNED_BAM;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "Merged SAM or BAM file to write to.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME,
+ doc = "Path to the fasta file for the reference sequence.")
+ public File REFERENCE_SEQUENCE;
+
+ @Option(shortName = StandardOptionDefinitions.PROGRAM_RECORD_ID_SHORT_NAME,
+ doc = "The program group ID of the aligner (if not supplied by the aligned file).",
+ optional = true)
+ public String PROGRAM_RECORD_ID;
+
+ @Option(shortName = "PG_VERSION",
+ doc = "The version of the program group (if not supplied by the aligned file).",
+ optional = true)
+ public String PROGRAM_GROUP_VERSION;
+
+ @Option(shortName = "PG_COMMAND",
+ doc = "The command line of the program group (if not supplied by the aligned file).",
+ optional = true)
+ public String PROGRAM_GROUP_COMMAND_LINE;
+
+ @Option(shortName = "PG_NAME",
+ doc = "The name of the program group (if not supplied by the aligned file).",
+ optional = true)
+ public String PROGRAM_GROUP_NAME;
+
+ @Deprecated
+ @Option(doc = "This argument is ignored and will be removed.", shortName = "PE", optional=true)
+ public Boolean PAIRED_RUN = true;
+
+ @Option(doc = "The expected jump size (required if this is a jumping library). Deprecated. Use EXPECTED_ORIENTATIONS instead",
+ shortName = "JUMP",
+ mutex = "EXPECTED_ORIENTATIONS",
+ optional = true)
+ public Integer JUMP_SIZE;
+
+ @Option(doc = "Whether to clip adapters where identified.")
+ public boolean CLIP_ADAPTERS = true;
+
+ @Option(doc = "Whether the lane is bisulfite sequence (used when caculating the NM tag).")
+ public boolean IS_BISULFITE_SEQUENCE = false;
+
+ @Option(doc = "Whether to output only aligned reads. ")
+ public boolean ALIGNED_READS_ONLY = false;
+
+ @Option(doc = "The maximum number of insertions or deletions permitted for an alignment to be " +
+ "included. Alignments with more than this many insertions or deletions will be ignored. " +
+ "Set to -1 to allow any number of insertions or deletions.",
+ shortName = "MAX_GAPS")
+ public int MAX_INSERTIONS_OR_DELETIONS = 1;
+
+ @Option(doc = "Reserved alignment attributes (tags starting with X, Y, or Z) that should be " +
+ "brought over from the alignment data when merging.")
+ public List<String> ATTRIBUTES_TO_RETAIN = new ArrayList<String>();
+
+ @Option(doc = "Attributes from the alignment record that should be removed when merging." +
+ " This overrides ATTRIBUTES_TO_RETAIN if they share common tags.")
+ public List<String> ATTRIBUTES_TO_REMOVE = new ArrayList<String>();
+
+ @Option(shortName = "R1_TRIM",
+ doc = "The number of bases trimmed from the beginning of read 1 prior to alignment")
+ public int READ1_TRIM = 0;
+
+ @Option(shortName = "R2_TRIM",
+ doc = "The number of bases trimmed from the beginning of read 2 prior to alignment")
+ public int READ2_TRIM = 0;
+
+ @Option(shortName = "ORIENTATIONS",
+ doc = "The expected orientation of proper read pairs. Replaces JUMP_SIZE",
+ mutex = "JUMP_SIZE",
+ optional = true)
+ public List<SamPairUtil.PairOrientation> EXPECTED_ORIENTATIONS;
+
+ @Option(doc = "Use the aligner's idea of what a proper pair is rather than computing in this program.")
+ public boolean ALIGNER_PROPER_PAIR_FLAGS = false;
+
+ @Option(shortName = StandardOptionDefinitions.SORT_ORDER_SHORT_NAME,
+ doc = "The order in which the merged reads should be output.")
+ public SortOrder SORT_ORDER = SortOrder.coordinate;
+
+ @Option(doc = "Strategy for selecting primary alignment when the aligner has provided more than one alignment " +
+ "for a pair or fragment, and none are marked as primary, more than one is marked as primary, or the primary " +
+ "alignment is filtered out for some reason. " +
+ "BestMapq expects that multiple alignments will be correlated with HI tag, and prefers the pair of " +
+ "alignments with the largest MAPQ, in the absence of a primary selected by the aligner. " +
+ "EarliestFragment prefers the alignment which maps the earliest base in the read. Note that EarliestFragment " +
+ "may not be used for paired reads. " +
+ "BestEndMapq is appropriate for cases in which the aligner is not pair-aware, and does not output the HI tag. " +
+ "It simply picks the alignment for each end with the highest MAPQ, and makes those alignments primary, regardless " +
+ "of whether the two alignments make sense together." +
+ "MostDistant is also for a non-pair-aware aligner, and picks the alignment pair with the largest insert size. " +
+ "If all alignments would be chimeric, it picks the alignments for each end with the best MAPQ. For all algorithms, " +
+ "ties are resolved arbitrarily.")
+ public PrimaryAlignmentStrategy PRIMARY_ALIGNMENT_STRATEGY = PrimaryAlignmentStrategy.BestMapq;
+
+ @Option(doc = "For paired reads, soft clip the 3' end of each read if necessary so that it does not extend past the 5' end of its mate.")
+ public boolean CLIP_OVERLAPPING_READS = true;
+
+ @Option(doc = "If false, do not write secondary alignments to output.")
+ public boolean INCLUDE_SECONDARY_ALIGNMENTS = true;
+
+ @Option(shortName = "MC", optional = true, doc = "Adds the mate CIGAR tag (MC) if true, does not if false.")
+ public Boolean ADD_MATE_CIGAR = true;
+
+ private static final Log log = Log.getInstance(MergeBamAlignment.class);
+
+ /**
+ * Mechanism to bridge between command line option and PrimaryAlignmentSelectionStrategy implementation.
+ */
+ enum PrimaryAlignmentStrategy {
+ BestMapq(BestMapqPrimaryAlignmentSelectionStrategy.class),
+ EarliestFragment(EarliestFragmentPrimaryAlignmentSelectionStrategy.class),
+ BestEndMapq(BestEndMapqPrimaryAlignmentStrategy.class),
+ MostDistant(MostDistantPrimaryAlignmentSelectionStrategy.class);
+
+ private final Class<PrimaryAlignmentSelectionStrategy> clazz;
+
+ PrimaryAlignmentStrategy(final Class<?> clazz) {
+ this.clazz = (Class<PrimaryAlignmentSelectionStrategy>) clazz;
+ }
+
+ PrimaryAlignmentSelectionStrategy newInstance() {
+ try {
+ return clazz.newInstance();
+ } catch (Exception e) {
+ throw new PicardException("Trouble instantiating " + clazz.getName(), e);
+ }
+ }
+ }
+
+ /** Required main method implementation. */
+ public static void main(final String[] argv) {
+ System.exit(new MergeBamAlignment().instanceMain(argv));
+ }
+
+ @Override
+ protected int doWork() {
+ // Check the files are readable/writable
+ SAMProgramRecord prod = null;
+ if (PROGRAM_RECORD_ID != null) {
+ prod = new SAMProgramRecord(PROGRAM_RECORD_ID);
+ prod.setProgramVersion(PROGRAM_GROUP_VERSION);
+ prod.setCommandLine(PROGRAM_GROUP_COMMAND_LINE);
+ prod.setProgramName(PROGRAM_GROUP_NAME);
+ }
+ // TEMPORARY FIX until internal programs all specify EXPECTED_ORIENTATIONS
+ if (JUMP_SIZE != null) {
+ EXPECTED_ORIENTATIONS = Arrays.asList(SamPairUtil.PairOrientation.RF);
+ } else if (EXPECTED_ORIENTATIONS == null || EXPECTED_ORIENTATIONS.isEmpty()) {
+ EXPECTED_ORIENTATIONS = Arrays.asList(SamPairUtil.PairOrientation.FR);
+ }
+
+ final SamAlignmentMerger merger = new SamAlignmentMerger(UNMAPPED_BAM, OUTPUT,
+ REFERENCE_SEQUENCE, prod, CLIP_ADAPTERS, IS_BISULFITE_SEQUENCE,
+ ALIGNED_READS_ONLY, ALIGNED_BAM, MAX_INSERTIONS_OR_DELETIONS,
+ ATTRIBUTES_TO_RETAIN, ATTRIBUTES_TO_REMOVE, READ1_TRIM, READ2_TRIM,
+ READ1_ALIGNED_BAM, READ2_ALIGNED_BAM, EXPECTED_ORIENTATIONS, SORT_ORDER,
+ PRIMARY_ALIGNMENT_STRATEGY.newInstance(), ADD_MATE_CIGAR);
+ merger.setClipOverlappingReads(CLIP_OVERLAPPING_READS);
+ merger.setMaxRecordsInRam(MAX_RECORDS_IN_RAM);
+ merger.setKeepAlignerProperPairFlags(ALIGNER_PROPER_PAIR_FLAGS);
+ merger.setIncludeSecondaryAlignments(INCLUDE_SECONDARY_ALIGNMENTS);
+ merger.mergeAlignment(REFERENCE_SEQUENCE);
+ merger.close();
+
+ return 0;
+ }
+
+ /**
+ * Put any custom command-line validation in an override of this method.
+ * clp is initialized at this point and can be used to print usage and access argv.
+ * Any options set by command-line parser can be validated.
+ *
+ * @return null if command line is valid. If command line is invalid, returns
+ * an array of error messages to be written to the appropriate place.
+ */
+ protected String[] customCommandLineValidation() {
+
+ if ((PROGRAM_RECORD_ID != null || PROGRAM_GROUP_VERSION != null ||
+ PROGRAM_GROUP_COMMAND_LINE != null) &&
+ (PROGRAM_RECORD_ID == null || PROGRAM_GROUP_VERSION == null ||
+ PROGRAM_GROUP_COMMAND_LINE == null)) {
+
+ return new String[]{"PROGRAM_RECORD_ID, PROGRAM_GROUP_VERSION, and " +
+ "PROGRAM_GROUP_COMMAND_LINE must all be supplied or none should " +
+ "be included."};
+ }
+
+ final boolean r1sExist = READ1_ALIGNED_BAM != null && READ1_ALIGNED_BAM.size() > 0;
+ final boolean r2sExist = READ2_ALIGNED_BAM != null && READ2_ALIGNED_BAM.size() > 0;
+ if ((r1sExist && !r2sExist) || (r2sExist && !r1sExist)) {
+ return new String[]{"READ1_ALIGNED_BAM and READ2_ALIGNED_BAM " +
+ "must both be supplied or neither should be included. For " +
+ "single-end read use ALIGNED_BAM."};
+ }
+ if (ALIGNED_BAM == null || ALIGNED_BAM.size() == 0 && !(r1sExist && r2sExist)) {
+ return new String[]{"Either ALIGNED_BAM or the combination of " +
+ "READ1_ALIGNED_BAM and READ2_ALIGNED_BAM must be supplied."};
+
+ }
+
+ return null;
+ }
+
+}
diff --git a/src/java/picard/sam/MergeSamFiles.java b/src/java/picard/sam/MergeSamFiles.java
new file mode 100644
index 0000000..7e95029
--- /dev/null
+++ b/src/java/picard/sam/MergeSamFiles.java
@@ -0,0 +1,176 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.MergingSamRecordIterator;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SamFileHeaderMerger;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Reads a SAM or BAM file and combines the output to one file
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Merges multiple SAM/BAM files into one file.",
+ usageShort = "Merges multiple SAM or BAM files into one file",
+ programGroup = SamOrBam.class
+)
+public class MergeSamFiles extends CommandLineProgram {
+ private static final Log log = Log.getInstance(MergeSamFiles.class);
+
+ @Option(shortName = "I", doc = "SAM or BAM input file", minElements = 1)
+ public List<File> INPUT = new ArrayList<File>();
+
+ @Option(shortName = "O", doc = "SAM or BAM file to write merged result to")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, doc = "Sort order of output file", optional = true)
+ public SAMFileHeader.SortOrder SORT_ORDER = SAMFileHeader.SortOrder.coordinate;
+
+ @Option(doc = "If true, assume that the input files are in the same sort order as the requested output sort order, even if their headers say otherwise.",
+ shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME)
+ public boolean ASSUME_SORTED = false;
+
+ @Option(shortName = "MSD", doc = "Merge the sequence dictionaries", optional = true)
+ public boolean MERGE_SEQUENCE_DICTIONARIES = false;
+
+ @Option(doc = "Option to create a background thread to encode, " +
+ "compress and write to disk the output file. The threaded version uses about 20% more CPU and decreases " +
+ "runtime by ~20% when writing out a compressed BAM file.")
+ public boolean USE_THREADING = false;
+
+ @Option(doc = "Comment(s) to include in the merged output file's header.", optional = true, shortName = "CO")
+ public List<String> COMMENT = new ArrayList<String>();
+
+ private static final int PROGRESS_INTERVAL = 1000000;
+
+ /** Required main method implementation. */
+ public static void main(final String[] argv) {
+ System.exit(new MergeSamFiles().instanceMain(argv));
+ }
+
+ /** Combines multiple SAM/BAM files into one. */
+ @Override
+ protected int doWork() {
+ boolean matchedSortOrders = true;
+
+ // Open the files for reading and writing
+ final List<SamReader> readers = new ArrayList<SamReader>();
+ final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
+ {
+ SAMSequenceDictionary dict = null; // Used to try and reduce redundant SDs in memory
+
+ for (final File inFile : INPUT) {
+ IOUtil.assertFileIsReadable(inFile);
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(inFile);
+ readers.add(in);
+ headers.add(in.getFileHeader());
+
+ // A slightly hackish attempt to keep memory consumption down when merging multiple files with
+ // large sequence dictionaries (10,000s of sequences). If the dictionaries are identical, then
+ // replace the duplicate copies with a single dictionary to reduce the memory footprint.
+ if (dict == null) {
+ dict = in.getFileHeader().getSequenceDictionary();
+ } else if (dict.equals(in.getFileHeader().getSequenceDictionary())) {
+ in.getFileHeader().setSequenceDictionary(dict);
+ }
+
+ matchedSortOrders = matchedSortOrders && in.getFileHeader().getSortOrder() == SORT_ORDER;
+ }
+ }
+
+ // If all the input sort orders match the output sort order then just merge them and
+ // write on the fly, otherwise setup to merge and sort before writing out the final file
+ IOUtil.assertFileIsWritable(OUTPUT);
+ final boolean presorted;
+ final SAMFileHeader.SortOrder headerMergerSortOrder;
+ final boolean mergingSamRecordIteratorAssumeSorted;
+
+ if (matchedSortOrders || SORT_ORDER == SAMFileHeader.SortOrder.unsorted || ASSUME_SORTED) {
+ log.info("Input files are in same order as output so sorting to temp directory is not needed.");
+ headerMergerSortOrder = SORT_ORDER;
+ mergingSamRecordIteratorAssumeSorted = ASSUME_SORTED;
+ presorted = true;
+ } else {
+ log.info("Sorting input files using temp directory " + TMP_DIR);
+ headerMergerSortOrder = SAMFileHeader.SortOrder.unsorted;
+ mergingSamRecordIteratorAssumeSorted = false;
+ presorted = false;
+ }
+ final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(headerMergerSortOrder, headers, MERGE_SEQUENCE_DICTIONARIES);
+ final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, mergingSamRecordIteratorAssumeSorted);
+ final SAMFileHeader header = headerMerger.getMergedHeader();
+ for (final String comment : COMMENT) {
+ header.addComment(comment);
+ }
+ header.setSortOrder(SORT_ORDER);
+ final SAMFileWriterFactory samFileWriterFactory = new SAMFileWriterFactory();
+ if (USE_THREADING) {
+ samFileWriterFactory.setUseAsyncIo(true);
+ }
+ final SAMFileWriter out = samFileWriterFactory.makeSAMOrBAMWriter(header, presorted, OUTPUT);
+
+ // Lastly loop through and write out the records
+ final ProgressLogger progress = new ProgressLogger(log, PROGRESS_INTERVAL);
+ while (iterator.hasNext()) {
+ final SAMRecord record = iterator.next();
+ out.addAlignment(record);
+ progress.record(record);
+ }
+
+ log.info("Finished reading inputs.");
+ CloserUtil.close(readers);
+ out.close();
+ return 0;
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (CREATE_INDEX && SORT_ORDER != SAMFileHeader.SortOrder.coordinate) {
+ return new String[]{"Can't CREATE_INDEX unless SORT_ORDER is coordinate"};
+ }
+ return null;
+ }
+
+}
diff --git a/src/java/picard/sam/MostDistantPrimaryAlignmentSelectionStrategy.java b/src/java/picard/sam/MostDistantPrimaryAlignmentSelectionStrategy.java
new file mode 100644
index 0000000..38d8a21
--- /dev/null
+++ b/src/java/picard/sam/MostDistantPrimaryAlignmentSelectionStrategy.java
@@ -0,0 +1,188 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.CoordMath;
+
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * For a paired-end aligner that aligns each end independently, select the pair of alignments that result
+ * in the largest insert size. If such a pair of alignments cannot be found, either because one end is not aligned,
+ * or because all alignment pairs are chimeric, then select the best MAPQ for each end independently.
+ *
+ * The primary alignments are then correlated so that their mate info points to each
+ * other, but all non-primary alignments are uncorrelated.
+ */
+public class MostDistantPrimaryAlignmentSelectionStrategy implements PrimaryAlignmentSelectionStrategy {
+ // Give random number generator a seed so results are repeatable. Used to pick a primary alignment from
+ // multiple alignments with equal mapping quality.
+ private final Random random = new Random(1);
+
+ @Override
+ public void pickPrimaryAlignment(final HitsForInsert hitsForInsert) {
+ final BestEndAlignmentsAccumulator firstEndBest = new BestEndAlignmentsAccumulator();
+ final BestEndAlignmentsAccumulator secondEndBest = new BestEndAlignmentsAccumulator();
+ final CollectionUtil.MultiMap<Integer, SAMRecord> firstEndBySequence =
+ new CollectionUtil.MultiMap<Integer, SAMRecord>();
+ final BestPairAlignmentsAccumulator pairBest = new BestPairAlignmentsAccumulator();
+
+ for (final SAMRecord rec : hitsForInsert.firstOfPairOrFragment) {
+ if (rec.getReadUnmappedFlag()) throw new IllegalStateException();
+ firstEndBest.considerBest(rec);
+ firstEndBySequence.append(rec.getReferenceIndex(), rec);
+ }
+
+ for (final SAMRecord secondEnd: hitsForInsert.secondOfPair) {
+ if (secondEnd.getReadUnmappedFlag()) throw new IllegalStateException();
+ secondEndBest.considerBest(secondEnd);
+ final Collection<SAMRecord> firstEnds = firstEndBySequence.get(secondEnd.getReferenceIndex());
+ if (firstEnds != null) {
+ for (final SAMRecord firstEnd : firstEnds) {
+ pairBest.considerBest(firstEnd, secondEnd);
+ }
+ }
+ }
+
+ final SAMRecord bestFirstEnd;
+ final SAMRecord bestSecondEnd;
+ if (pairBest.hasBest()) {
+ final Map.Entry<SAMRecord, SAMRecord> pairEntry = pickRandomlyFromList(pairBest.bestAlignmentPairs);
+ bestFirstEnd = pairEntry.getKey();
+ bestSecondEnd = pairEntry.getValue();
+ } else {
+ if (firstEndBest.hasBest()) {
+ bestFirstEnd = pickRandomlyFromList(firstEndBest.bestAlignments);
+ } else {
+ bestFirstEnd = null;
+ }
+ if (secondEndBest.hasBest()) {
+ bestSecondEnd = pickRandomlyFromList(secondEndBest.bestAlignments);
+ } else {
+ bestSecondEnd = null;
+ }
+ }
+
+ if (hitsForInsert.firstOfPairOrFragment.isEmpty() != (bestFirstEnd == null)) {
+ throw new IllegalStateException("Should not happen");
+ }
+ if (hitsForInsert.secondOfPair.isEmpty() != (bestSecondEnd == null)) {
+ throw new IllegalStateException("Should not happen");
+ }
+ if (bestFirstEnd != null) {
+ moveToHead(hitsForInsert.firstOfPairOrFragment, bestFirstEnd);
+ }
+ if (bestSecondEnd != null) {
+ moveToHead(hitsForInsert.secondOfPair, bestSecondEnd);
+ }
+ hitsForInsert.setPrimaryAlignment(0);
+
+ // For non-primary alignments, de-correlate them so that the mate fields don't point at some
+ // arbitrary alignment for the other end.
+
+ // No non-primary alignments for one of the ends so nothing to do.
+ if (hitsForInsert.firstOfPairOrFragment.size() <= 1 || hitsForInsert.secondOfPair.size() <= 1) return;
+ final int amountToSlide = hitsForInsert.firstOfPairOrFragment.size() - 1;
+ for (int i = 0; i < amountToSlide; ++i) {
+ hitsForInsert.secondOfPair.add(1, null);
+ }
+
+
+ }
+
+ private <T> T pickRandomlyFromList(final List<T> list) {
+ return list.get(random.nextInt(list.size()));
+ }
+
+ // Uses reference equality, not .equals()
+ private void moveToHead(final List<SAMRecord> list, final SAMRecord rec) {
+ if (list.get(0) == rec) return;
+ for (int i = 1; i < list.size(); ++i) {
+ if (list.get(i) == rec) {
+ list.remove(i);
+ list.add(0, rec);
+ return;
+ }
+ }
+ throw new IllegalStateException("Should not be reached");
+ }
+
+ private static class BestEndAlignmentsAccumulator {
+ public int bestMapq = -1;
+ public List<SAMRecord> bestAlignments = new ArrayList<SAMRecord>();
+
+ public void considerBest(final SAMRecord rec) {
+ if (bestMapq == -1) {
+ bestMapq = rec.getMappingQuality();
+ bestAlignments.add(rec);
+ } else {
+ final int cmp = SAMUtils.compareMapqs(bestMapq, rec.getMappingQuality());
+ if (cmp < 0) {
+ bestMapq = rec.getMappingQuality();
+ bestAlignments.clear();
+ bestAlignments.add(rec);
+ } else if (cmp == 0) {
+ bestAlignments.add(rec);
+ }
+ }
+ }
+
+ public boolean hasBest() {
+ return bestMapq != -1;
+ }
+ }
+
+ private static class BestPairAlignmentsAccumulator {
+ public int bestDistance = -1;
+ public int bestPairMapq = -1;
+ public List<Map.Entry<SAMRecord, SAMRecord>> bestAlignmentPairs =
+ new ArrayList<Map.Entry<SAMRecord, SAMRecord>>();
+
+ public void considerBest(final SAMRecord firstEnd, final SAMRecord secondEnd) {
+ final int thisPairMapq = SAMUtils.combineMapqs(firstEnd.getMappingQuality(), secondEnd.getMappingQuality());
+ final int thisDistance = CoordMath.getLength(Math.min(firstEnd.getAlignmentStart(), secondEnd.getAlignmentStart()),
+ Math.max(firstEnd.getAlignmentEnd(), secondEnd.getAlignmentEnd()));
+ if (thisDistance > bestDistance || (thisDistance == bestDistance && thisPairMapq > bestPairMapq)) {
+ bestDistance = thisDistance;
+ bestPairMapq = thisPairMapq;
+ bestAlignmentPairs.clear();
+ bestAlignmentPairs.add(new AbstractMap.SimpleEntry<SAMRecord, SAMRecord>(firstEnd, secondEnd));
+ } else if (thisDistance == bestDistance && thisPairMapq == bestPairMapq) {
+ bestAlignmentPairs.add(new AbstractMap.SimpleEntry<SAMRecord, SAMRecord>(firstEnd, secondEnd));
+ }
+ }
+
+ public boolean hasBest() {
+ return bestDistance != -1;
+ }
+ }
+}
diff --git a/src/java/picard/sam/MultiHitAlignedReadIterator.java b/src/java/picard/sam/MultiHitAlignedReadIterator.java
new file mode 100644
index 0000000..e1e10ac
--- /dev/null
+++ b/src/java/picard/sam/MultiHitAlignedReadIterator.java
@@ -0,0 +1,215 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.Cigar;
+import htsjdk.samtools.CigarElement;
+import htsjdk.samtools.CigarOperator;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.filter.FilteringIterator;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.PeekableIterator;
+import picard.PicardException;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+
+/**
+ * Iterate over queryname-sorted SAM, and return each group of reads with the same queryname. Unmapped reads
+ * are filtered out, as are alignments that don't seem to match any part of the reference.
+ * If there are multiple hits for the same read, and the first and second ends need to be correlated,
+ * then they are sorted by hit index. Supplemental alignments are discarded, with a logged message.
+ * A set of hits for a single query may then be filtered with a caller-supplied filter, which will remove any
+ * alignments that do not pass the filter. If the primary alignment is removed, the best-mapping secondary alignment
+ * or alignment pair will be marked as primary.
+ *
+ *
+ * @throws IllegalStateException if the input is not queryname-sorted.
+ */
+class MultiHitAlignedReadIterator implements CloseableIterator<HitsForInsert> {
+ private final PeekableIterator<SAMRecord> peekIterator;
+ private final SAMRecordQueryNameComparator queryNameComparator = new SAMRecordQueryNameComparator();
+ private final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy;
+
+ private HitsForInsert theNext = null;
+
+ /**
+ *
+ * @param querynameOrderIterator
+ * @param primaryAlignmentSelectionStrategy Algorithm for selecting primary alignment when it is not clear from
+ * the input what should be primary.
+ */
+ MultiHitAlignedReadIterator(final CloseableIterator<SAMRecord> querynameOrderIterator,
+ final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy) {
+ this.primaryAlignmentSelectionStrategy = primaryAlignmentSelectionStrategy;
+ peekIterator = new PeekableIterator<SAMRecord>(new FilteringIterator(querynameOrderIterator,
+ new SamRecordFilter() {
+ // Filter unmapped reads.
+ public boolean filterOut(final SAMRecord record) {
+ return record.getReadUnmappedFlag() || SAMUtils.cigarMapsNoBasesToRef(record.getCigar());
+ }
+ public boolean filterOut(final SAMRecord first, final SAMRecord second) {
+ return ((first.getReadUnmappedFlag() || SAMUtils.cigarMapsNoBasesToRef(first.getCigar()))
+ && (second.getReadUnmappedFlag() || SAMUtils.cigarMapsNoBasesToRef(second.getCigar())));
+ }
+ }));
+
+
+ advance();
+ }
+
+ public void close() {
+ peekIterator.close();
+ }
+
+ public boolean hasNext() {
+ return theNext != null;
+ }
+
+ /**
+ * @throws IllegalStateException if the input is not queryname-sorted.
+ */
+ public HitsForInsert next() {
+ if (!hasNext()) throw new NoSuchElementException();
+ final HitsForInsert ret = theNext;
+ advance();
+ return ret;
+ }
+
+ private void advance() {
+ while (peekIterator.hasNext()) {
+ theNext = nextMaybeEmpty();
+ if (theNext.numHits() > 0) return;
+ }
+ theNext = null;
+ }
+
+ private HitsForInsert nextMaybeEmpty() {
+ if (!peekIterator.hasNext()) throw new IllegalStateException();
+ final String readName = peekIterator.peek().getReadName();
+ final HitsForInsert hits = new HitsForInsert();
+
+ Boolean isPaired = null;
+
+ // Accumulate the alignments matching readName.
+ do {
+ final SAMRecord rec = peekIterator.next();
+ replaceHardWithSoftClips(rec);
+ // It is critical to do this here, because SamAlignmentMerger uses this exception to determine
+ // if the aligned input needs to be sorted.
+ if (peekIterator.hasNext() && queryNameComparator.fileOrderCompare(rec, peekIterator.peek()) > 0) {
+ throw new IllegalStateException("Underlying iterator is not queryname sorted: " +
+ rec + " > " + peekIterator.peek());
+ }
+
+ if (isPaired == null) {
+ isPaired = rec.getReadPairedFlag();
+ } else if (isPaired != rec.getReadPairedFlag()) {
+ throw new PicardException("Got a mix of paired and unpaired alignments for read " + readName);
+ }
+
+ // Records w/ a supplemental flag are stashed to the side until the primary alignment has
+ // been determined, and then re-added into the process later
+ if (!rec.getReadPairedFlag() || rec.getFirstOfPairFlag()) {
+ if (rec.getSupplementaryAlignmentFlag()) {
+ hits.addSupplementalFirstOfPairOrFragment(rec);
+ } else {
+ hits.addFirstOfPairOrFragment(rec);
+ }
+ } else if (rec.getSecondOfPairFlag()) {
+ if (rec.getSupplementaryAlignmentFlag()) {
+ hits.addSupplementalSecondOfPair(rec);
+ } else {
+ hits.addSecondOfPair(rec);
+ }
+ } else throw new PicardException("Read is marked as pair but neither first or second: " + readName);
+ } while (peekIterator.hasNext() && peekIterator.peek().getReadName().equals(readName));
+
+ // If there is no more than one alignment for each end, no need to do any coordination.
+ if (hits.numHits() <= 1) {
+ // No HI tags needed if only a single hit
+ if (hits.getFirstOfPair(0) != null) {
+ hits.getFirstOfPair(0).setAttribute(SAMTag.HI.name(), null);
+ hits.getFirstOfPair(0).setNotPrimaryAlignmentFlag(false);
+ }
+ if (hits.getSecondOfPair(0) != null) {
+ hits.getSecondOfPair(0).setAttribute(SAMTag.HI.name(), null);
+ hits.getSecondOfPair(0).setNotPrimaryAlignmentFlag(false);
+ }
+ } else {
+ primaryAlignmentSelectionStrategy.pickPrimaryAlignment(hits);
+ }
+
+ // Used to check that alignments for first and second were correlated, but this is no longer required.
+ return hits;
+ }
+
+ /** Replaces hard clips with soft clips and fills in bases and qualities with dummy values as needed. */
+ private void replaceHardWithSoftClips(final SAMRecord rec) {
+ if (rec.getReadUnmappedFlag()) return;
+ if (rec.getCigar().isEmpty()) return;
+
+ List<CigarElement> elements = rec.getCigar().getCigarElements();
+ final CigarElement first = elements.get(0);
+ final CigarElement last = elements.size() == 1 ? null : elements.get(elements.size()-1);
+ final int startHardClip = first.getOperator() == CigarOperator.H ? first.getLength() : 0;
+ final int endHardClip = (last != null && last.getOperator() == CigarOperator.H) ? last.getLength() : 0;
+
+ if (startHardClip + endHardClip > 0) {
+ final int len = rec.getReadBases().length + startHardClip + endHardClip;
+
+ // Fix the basecalls
+ final byte[] bases = new byte[len];
+ Arrays.fill(bases, (byte) 'N');
+ System.arraycopy(rec.getReadBases(), 0, bases, startHardClip, rec.getReadBases().length);
+
+ // Fix the quality scores
+ final byte[] quals = new byte[len];
+ Arrays.fill(quals, (byte) 2 );
+ System.arraycopy(rec.getBaseQualities(), 0, quals, startHardClip, rec.getBaseQualities().length);
+
+ // Fix the cigar!
+ elements = new ArrayList<CigarElement>(elements); // make it modifiable
+ if (startHardClip > 0) elements.set(0, new CigarElement(first.getLength(), CigarOperator.S));
+ if (endHardClip > 0) elements.set(elements.size()-1, new CigarElement(last.getLength(), CigarOperator.S));
+
+ // Set the update structures on the new record
+ rec.setReadBases(bases);
+ rec.setBaseQualities(quals);
+ rec.setCigar(new Cigar(elements));
+ }
+ }
+
+ /** Unsupported operation. */
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/java/picard/sam/PositionBasedDownsampleSam.java b/src/java/picard/sam/PositionBasedDownsampleSam.java
new file mode 100644
index 0000000..3a596f9
--- /dev/null
+++ b/src/java/picard/sam/PositionBasedDownsampleSam.java
@@ -0,0 +1,380 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+import picard.sam.util.PhysicalLocation;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * Class to downsample a BAM file while respecting that we should either get rid
+ * of both ends of a pair or neither end of the pair. In addition, this program uses the read-name
+ * and extracts the position within the tile whence the read came from. The downsampling is based on this position.
+ * <p/>
+ * Note 1: This is technology and read-name dependent. If your read-names do not have coordinate information, or if your
+ * BAM contains reads from multiple technologies (flowcell versions, sequencing machines) this will not work properly.
+ * This has been designed with Illumina MiSeq/HiSeq in mind.
+ * <p/>
+ * Note 2: The downsampling is _not_ random. It is deterministically dependent on the position of the read within its tile. Specifically,
+ * it draws out an ellipse that covers a FRACTION fraction of the area and each of the edges and uses this to determine whether to keep the
+ * record. Since reads with the same name have the same position (mates, secondary and supplemental alignments), the decision will be the same for all of them.
+ * <p/>
+ * Finally, the code has been designed to simulate sequencing less as accurately as possible, not for getting an exact downsample fraction.
+ * In particular, since the reads may be distributed non-evenly within the lanes/tiles, the resulting downsampling percentage will not be accurately
+ * determined by the input argument FRACTION. One should re-MarkDuplicates after downsampling in order to "expose" the duplicates whose representative has
+ * been downsampled away.
+ *
+ * @author Yossi Farjoun
+ */
+ at CommandLineProgramProperties(
+ usage = "Class to downsample a BAM file while respecting that we should either get rid of both ends of a pair or neither \n" +
+ "end of the pair. In addition, this program uses the read-name and extracts the position within the tile whence \n" +
+ "the read came from. The downsampling is based on this position. Results with the exact same input will produce the \n" +
+ "same results.\n" +
+ "\n" +
+ "Note 1: This is technology and read-name dependent. If your read-names do not have coordinate information, or if your\n" +
+ "BAM contains reads from multiple technologies (flowcell versions, sequencing machines) this will not work properly. \n" +
+ "This has been designed with Illumina MiSeq/HiSeq in mind.\n" +
+ "Note 2: The downsampling is not random. It is deterministically dependent on the position of the read within its tile.\n" +
+ "Note 3: Downsampling twice with this program is not supported.\n" +
+ "Note 4: You should call MarkDuplicates after downsampling.\n" +
+ "\n" +
+ "Finally, the code has been designed to simulate sequencing less as accurately as possible, not for getting an exact downsample \n" +
+ "fraction. In particular, since the reads may be distributed non-evenly within the lanes/tiles, the resulting downsampling \n" +
+ "percentage will not be accurately determined by the input argument FRACTION.",
+ usageShort = "Downsample a SAM or BAM file to retain a subset of the reads based on the reads location in each tile in the flowcell.",
+ programGroup = SamOrBam.class
+)
+public class PositionBasedDownsampleSam extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The input SAM or BAM file to downsample.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output, downsampled, SAM or BAM file to write.")
+ public File OUTPUT;
+
+ @Option(shortName = "F", doc = "The (approximate) fraction of reads to be kept, between 0 and 1.", optional = false)
+ public Double FRACTION = null;
+
+ @Option(doc = "Stop after processing N reads, mainly for debugging.", optional = true)
+ public Long STOP_AFTER = null;
+
+ @Option(doc = "Allow Downsampling again despite this being a bad idea with possibly unexpected results.", optional = true)
+ public boolean ALLOW_MULTIPLE_DOWNSAMPLING_DESPITE_WARNINGS = false;
+
+ @Option(doc = "Determines whether the duplicate tag should be reset since the downsampling requires re-marking duplicates.")
+ public boolean REMOVE_DUPLICATE_INFORMATION = true;
+
+ private final Log log = Log.getInstance(PositionBasedDownsampleSam.class);
+
+ private PhysicalLocation opticalDuplicateFinder;
+ private long total = 0;
+ private long kept = 0;
+ public static String PG_PROGRAM_NAME = "PositionBasedDownsampleSam";
+ private final static double ACCEPTABLE_FUDGE_FACTOR = 0.2;
+
+ /* max-position in tile as a function of tile. We might need to
+ look per-readgroup, but at this point I'm making the assumptions that I need to downsample a
+ sample where all the readgroups came from the same type of flowcell. */
+
+ CollectionUtil.DefaultingMap.Factory<Coord, Short> defaultingMapFactory = new CollectionUtil.DefaultingMap.Factory<Coord, Short>() {
+ @Override
+ public Coord make(final Short aShort) {
+ return new Coord();
+ }
+ };
+
+ final private Map<Short, Coord> tileCoord = new CollectionUtil.DefaultingMap<Short, Coord>(defaultingMapFactory, true);
+
+
+ final Map<Short, Histogram<Short>> xPositions = new HashMap<Short, Histogram<Short>>();
+ final Map<Short, Histogram<Short>> yPositions = new HashMap<Short, Histogram<Short>>();
+
+ public static void main(final String[] args) {
+ new PositionBasedDownsampleSam().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final List<String> errors = new ArrayList<String>();
+
+ if (FRACTION < 0 || FRACTION > 1) {
+ errors.add("FRACTION must be a value between 0 and 1, found: " + FRACTION);
+ }
+
+ if (errors.isEmpty()) {
+ return null;
+ } else {
+ return errors.toArray(new String[errors.size()]);
+ }
+ }
+
+ @Override
+ protected int doWork() {
+
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ log.info("Checking to see if input file has been downsampled with this program before.");
+ checkProgramRecords();
+
+ opticalDuplicateFinder = new PhysicalLocation();
+
+ log.info("Starting first pass. Examining read distribution in tiles.");
+ fillTileMinMaxCoord();
+ log.info("First pass done.");
+
+ log.info("Starting second pass. Outputting reads.");
+ outputSamRecords();
+ log.info("Second pass done.");
+
+ final double finalP = kept / (double) total;
+ if (Math.abs(finalP - FRACTION) / (Math.min(finalP, FRACTION) + 1e-10) > ACCEPTABLE_FUDGE_FACTOR) {
+ log.warn(String.format("You've requested FRACTION=%g, the resulting downsampling resulted in a rate of %f.", FRACTION, finalP));
+ }
+ log.info(String.format("Finished! Kept %d out of %d reads (P=%g).", kept, total, finalP));
+
+ return 0;
+ }
+
+ private void outputSamRecords() {
+
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e7);
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+
+ final SAMFileHeader header = in.getFileHeader().clone();
+ final SAMFileHeader.PgIdGenerator pgIdGenerator = new SAMFileHeader.PgIdGenerator(header);
+ final SAMProgramRecord programRecord = new SAMProgramRecord(pgIdGenerator.getNonCollidingId(PG_PROGRAM_NAME));
+
+ programRecord.setProgramName(PG_PROGRAM_NAME);
+ programRecord.setCommandLine(getCommandLine());
+ programRecord.setProgramVersion(getVersion());
+ header.addProgramRecord(programRecord);
+
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(header, true, OUTPUT);
+
+ final CircleSelector selector = new CircleSelector(FRACTION);
+
+ for (final SAMRecord rec : in) {
+ if (STOP_AFTER != null && total >= STOP_AFTER) break;
+
+ total++;
+
+ final PhysicalLocation pos = getSamRecordLocation(rec);
+
+ if (!xPositions.containsKey(pos.getTile())) {
+ xPositions.put(pos.getTile(), new Histogram<Short>(pos.getTile() + "-xpos", "count"));
+ }
+ if (!yPositions.containsKey(pos.getTile())) {
+ yPositions.put(pos.getTile(), new Histogram<Short>(pos.getTile() + "-ypos", "count"));
+ }
+
+ final boolean keepRecord = selector.select(pos, tileCoord.get(pos.getTile()));
+
+ if (keepRecord) {
+ if (REMOVE_DUPLICATE_INFORMATION) rec.setDuplicateReadFlag(false);
+ out.addAlignment(rec);
+ kept++;
+ }
+ progress.record(rec);
+ }
+
+ out.close();
+
+ CloserUtil.close(in);
+ }
+
+ private void checkProgramRecords() {
+ final SamReader in = SamReaderFactory
+ .makeDefault()
+ .referenceSequence(REFERENCE_SEQUENCE)
+ .open(INPUT);
+
+ for (final SAMProgramRecord pg : in.getFileHeader().getProgramRecords()) {
+ if (pg.getProgramName() != null && pg.getProgramName().equals(PG_PROGRAM_NAME)) {
+
+ final String outText = "Found previous Program Record that indicates that this BAM has been downsampled already with this program. Operation not supported! Previous PG: " + pg.toString();
+
+ if (ALLOW_MULTIPLE_DOWNSAMPLING_DESPITE_WARNINGS) {
+ log.warn(outText);
+ } else {
+ log.error(outText);
+ throw new PicardException(outText);
+ }
+ }
+ }
+ CloserUtil.close(in);
+ }
+
+ // scan all the tiles and find the smallest and largest coordinate (x & y) in that tile.
+ private void fillTileMinMaxCoord() {
+
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e7, "Read");
+
+ int total = 0;
+
+ for (final SAMRecord rec : in) {
+ if (STOP_AFTER != null && total >= STOP_AFTER) break;
+
+ total++;
+ progress.record(rec);
+ final PhysicalLocation location = getSamRecordLocation(rec);
+
+ //Defaulting map will create a new Coord if it's not there.
+
+ final Coord Pos = tileCoord.get(location.getTile());
+
+ Pos.maxX = Math.max(Pos.maxX, location.getX());
+ Pos.minX = Math.min(Pos.minX, location.getX());
+
+ Pos.maxY = Math.max(Pos.maxY, location.getY());
+ Pos.minY = Math.min(Pos.minY, location.getY());
+
+ Pos.count++;
+
+ }
+
+ // now that we know what the maximal/minimal numbers were, we should increase/decrease them a little, to account for sampling error
+ for (final Coord coord : tileCoord.values()) {
+
+ final int diffX = coord.maxX - coord.minX;
+ final int diffY = coord.maxY - coord.minY;
+
+ coord.maxX += diffX / coord.count;
+ coord.minX -= diffX / coord.count;
+
+ coord.maxY += diffY / coord.count;
+ coord.minY -= diffY / coord.count;
+ }
+
+ CloserUtil.close(in);
+ }
+
+ private PhysicalLocation getSamRecordLocation(final SAMRecord rec) {
+ final PhysicalLocation pos = new PhysicalLocation();
+ opticalDuplicateFinder.addLocationInformation(rec.getReadName(), pos);
+ return pos;
+ }
+
+ /*
+ * The reads are selected depending on whether they are in a periodically repeating circle whose representative
+ * overlaps the boundary of the tile. The circle is chosen as to have an area of FRACTION and the also a overlap
+ * of FRACTION with both the bottom and left edges of the unit square ([0,1] x [0,1]), which defines it uniquely.
+ * Finally the repeating pattern is there to make sure that the mask on the flowcell also has minimal boundary.
+ *
+ * The position of the reads is mapped into the unit square using the min/max coordinates of the tile prior to
+ * masking
+ *
+ * This choice of a mask is intended to accomplish several goasl:
+ * - pick out a fraction FRACTION of the reads
+ * - pick out a fraction FRACTION of the reads that are near the boundaries
+ * - keep nearby reads (in a tile) together by minimizing the boundary of the mask itself
+ * - keep nearby reads (in neighboring tiles) together (since they might be optical duplicates) by keeping that the
+ * mask is the same on all tiles, and by having the same mask on the left edge as on the right (same for top/bottom).
+ */
+ private class CircleSelector {
+
+ private final double radiusSquared;
+ private final double offset;
+ private final boolean positiveSelection;
+
+ CircleSelector(final double fraction) {
+
+ final double p;
+ if (fraction > 0.5) {
+ p = 1 - fraction;
+ positiveSelection = false;
+ } else {
+ p = fraction;
+ positiveSelection = true;
+ }
+ radiusSquared = p / Math.PI; //thus the area is \pi r^2 = p, thus a fraction p of the unit square will be captured
+
+ /* if offset is used as the center of the circle (both x and y), this makes the overlap
+ region with each of the boundaries of the unit square have length p (and thus a fraction
+ p of the boundaries of each tile will be removed) */
+
+ if (p < 0) {
+ // at this point a negative p will result in a square-root of a negative number in the next step.
+ throw new PicardException("This shouldn't happen...");
+ }
+ offset = Math.sqrt(radiusSquared - p * p / 4);
+ }
+
+ private double roundedPart(final double x) {return x - Math.round(x);}
+
+ // this function checks to see if the location of the read is within the masking circle
+ private boolean select(final PhysicalLocation coord, final Coord tileCoord) {
+ // r^2 = (x-x_0)^2 + (y-y_0)^2, where both x_0 and y_0 equal offset
+ final double distanceSquared =
+ Math.pow(roundedPart(((coord.getX() - tileCoord.minX) / (double) (tileCoord.maxX - tileCoord.minX)) - offset), 2) +
+ Math.pow(roundedPart(((coord.getY() - tileCoord.minY) / (double) (tileCoord.maxY - tileCoord.minY)) - offset), 2);
+
+ return (distanceSquared > radiusSquared) ^ positiveSelection;
+ }
+ }
+
+ private class Coord {
+ public int minX;
+ public int minY;
+ public int maxX;
+ public int maxY;
+ public int count;
+
+ public Coord() {
+ count = 0;
+ minX = 0;
+ minY = 0;
+ maxX = 0;
+ maxY = 0;
+ }
+ }
+}
diff --git a/src/java/picard/sam/PrimaryAlignmentSelectionStrategy.java b/src/java/picard/sam/PrimaryAlignmentSelectionStrategy.java
new file mode 100644
index 0000000..1e937cd
--- /dev/null
+++ b/src/java/picard/sam/PrimaryAlignmentSelectionStrategy.java
@@ -0,0 +1,37 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+/**
+ * Given a set of alignments for a read or read pair, mark one alignment as primary, according to whatever
+ * strategy is appropriate. Any pre-existing primary designation is ignored, so if the aligner has selected an
+ * appropriate primary alignment, this class should not be called.
+ */
+public interface PrimaryAlignmentSelectionStrategy {
+ /**
+ * When this method returns, one alignment has been marked as primary according to the implementation's strategy.
+ *
+ */
+ void pickPrimaryAlignment(HitsForInsert hitsForInsert);
+}
diff --git a/src/java/picard/sam/ReorderSam.java b/src/java/picard/sam/ReorderSam.java
new file mode 100644
index 0000000..a0714e0
--- /dev/null
+++ b/src/java/picard/sam/ReorderSam.java
@@ -0,0 +1,245 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordIterator;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Reorders a SAM/BAM input file according to the order of contigs in a second reference sequence
+ *
+ * @author mdepristo
+ */
+ at CommandLineProgramProperties(
+ usage = "Not to be confused with SortSam which sorts a SAM or BAM file with a valid sequence dictionary, " +
+ "ReorderSam reorders reads in a SAM/BAM file to match the contig ordering in a provided reference file, " +
+ "as determined by exact name matching of contigs. Reads mapped to contigs absent in the new " +
+ "reference are dropped. Runs substantially faster if the input is an indexed BAM file.",
+ usageShort = "Reorders reads in a SAM or BAM file to match ordering in reference",
+ programGroup = SamOrBam.class
+)
+public class ReorderSam extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input file (bam or sam) to extract reads from.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Output file (bam or sam) to write extracted reads to.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc = "Reference sequence to reorder reads to match. " +
+ "A sequence dictionary corresponding to the reference fasta is required. Create one with CreateSequenceDictionary.jar.")
+ public File REFERENCE;
+
+ @Option(shortName = "S", doc = "If true, then allows only a partial overlap of the BAM contigs with the new reference " +
+ "sequence contigs. By default, this tool requires a corresponding contig in the new " +
+ "reference for each read contig")
+ public boolean ALLOW_INCOMPLETE_DICT_CONCORDANCE = false;
+
+ @Option(shortName = "U", doc = "If true, then permits mapping from a read contig to a new reference contig with the " +
+ "same name but a different length. Highly dangerous, only use if you know what you " +
+ "are doing.")
+ public boolean ALLOW_CONTIG_LENGTH_DISCORDANCE = false;
+
+ private final Log log = Log.getInstance(ReorderSam.class);
+
+ /** Required main method implementation. */
+ public static void main(final String[] argv) {
+ new ReorderSam().instanceMainWithExit(argv);
+ }
+
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsReadable(REFERENCE);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+
+ ReferenceSequenceFile reference = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE);
+ SAMSequenceDictionary refDict = reference.getSequenceDictionary();
+
+ if (refDict == null) {
+ log.error("No reference sequence dictionary found. Aborting. You can create a sequence dictionary for the reference fasta using CreateSequenceDictionary.jar.");
+ CloserUtil.close(in);
+ return 1;
+ }
+
+ printDictionary("SAM/BAM file", in.getFileHeader().getSequenceDictionary());
+ printDictionary("Reference", refDict);
+ Map<Integer, Integer> newOrder = buildSequenceDictionaryMap(refDict, in.getFileHeader().getSequenceDictionary());
+
+ // has to be after we create the newOrder
+ SAMFileHeader outHeader = in.getFileHeader().clone();
+ outHeader.setSequenceDictionary(refDict);
+
+ log.info("Writing reads...");
+ if (in.hasIndex()) {
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, true, OUTPUT);
+
+ // write the reads in contig order
+ for (final SAMSequenceRecord contig : refDict.getSequences()) {
+ final SAMRecordIterator it = in.query(contig.getSequenceName(), 0, 0, false);
+ writeReads(out, it, newOrder, contig.getSequenceName());
+ }
+ // don't forget the unmapped reads
+ writeReads(out, in.queryUnmapped(), newOrder, "unmapped");
+ out.close();
+ } else {
+ SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, false, OUTPUT);
+ writeReads(out, in.iterator(), newOrder, "All reads");
+ out.close();
+ }
+
+ // cleanup
+ CloserUtil.close(in);
+ return 0;
+ }
+
+ /**
+ * Low-level helper function that returns the new reference index for oldIndex according to the
+ * ordering map newOrder. Read is provided in case an error occurs, so that an informative message
+ * can be made.
+ */
+ private int newOrderIndex(SAMRecord read, int oldIndex, Map<Integer, Integer> newOrder) {
+ if (oldIndex == -1)
+ return -1; // unmapped read
+ else {
+ final Integer n = newOrder.get(oldIndex);
+
+ if (n == null) throw new PicardException("BUG: no mapping found for read " + read.format());
+ else return n;
+ }
+ }
+
+ /**
+ * Helper function that writes reads from iterator it into writer out, updating each SAMRecord along the way
+ * according to the newOrder mapping from dictionary index -> index. Name is used for printing only.
+ */
+ private void writeReads(final SAMFileWriter out,
+ final SAMRecordIterator it,
+ final Map<Integer, Integer> newOrder,
+ final String name) {
+ long counter = 0;
+ log.info(" Processing " + name);
+
+ while (it.hasNext()) {
+ counter++;
+ final SAMRecord read = it.next();
+ final int oldRefIndex = read.getReferenceIndex();
+ final int oldMateIndex = read.getMateReferenceIndex();
+ final int newRefIndex = newOrderIndex(read, oldRefIndex, newOrder);
+
+ read.setHeader(out.getFileHeader());
+ read.setReferenceIndex(newRefIndex);
+
+ final int newMateIndex = newOrderIndex(read, oldMateIndex, newOrder);
+ if (oldMateIndex != -1 && newMateIndex == -1) { // becoming unmapped
+ read.setMateAlignmentStart(0);
+ read.setMateUnmappedFlag(true);
+ read.setAttribute(SAMTag.MC.name(), null); // Set the Mate Cigar String to null
+ }
+ read.setMateReferenceIndex(newMateIndex);
+
+ out.addAlignment(read);
+ }
+
+ it.close();
+ log.info("Wrote " + counter + " reads");
+ }
+
+ /**
+ * Constructs a mapping from read sequence records index -> new sequence dictionary index for use in
+ * reordering the reference index and mate reference index in each read. -1 means unmapped.
+ */
+ private Map<Integer, Integer> buildSequenceDictionaryMap(final SAMSequenceDictionary refDict,
+ final SAMSequenceDictionary readsDict) {
+ Map<Integer, Integer> newOrder = new HashMap<Integer, Integer>();
+
+ log.info("Reordering SAM/BAM file:");
+ for (final SAMSequenceRecord refRec : refDict.getSequences()) {
+ final SAMSequenceRecord readsRec = readsDict.getSequence(refRec.getSequenceName());
+
+ if (readsRec != null) {
+ if (refRec.getSequenceLength() != readsRec.getSequenceLength()) {
+ String msg = String.format("Discordant contig lengths: read %s LN=%d, ref %s LN=%d",
+ readsRec.getSequenceName(), readsRec.getSequenceLength(),
+ refRec.getSequenceName(), refRec.getSequenceLength());
+ if (ALLOW_CONTIG_LENGTH_DISCORDANCE) {
+ log.warn(msg);
+ } else {
+ throw new PicardException(msg);
+ }
+ }
+
+ log.info(String.format(" Reordering read contig %s [index=%d] to => ref contig %s [index=%d]%n",
+ readsRec.getSequenceName(), readsRec.getSequenceIndex(),
+ refRec.getSequenceName(), refRec.getSequenceIndex()));
+ newOrder.put(readsRec.getSequenceIndex(), refRec.getSequenceIndex());
+ }
+ }
+
+ for (SAMSequenceRecord readsRec : readsDict.getSequences()) {
+ if (!newOrder.containsKey(readsRec.getSequenceIndex())) {
+ if (ALLOW_INCOMPLETE_DICT_CONCORDANCE)
+ newOrder.put(readsRec.getSequenceIndex(), -1);
+ else
+ throw new PicardException("New reference sequence does not contain a matching contig for " + readsRec.getSequenceName());
+ }
+ }
+
+ return newOrder;
+ }
+
+ /**
+ * Helper function to print out a sequence dictionary
+ */
+ private void printDictionary(String name, SAMSequenceDictionary dict) {
+ log.info(name);
+ for (final SAMSequenceRecord contig : dict.getSequences()) {
+ log.info(" SN=%s LN=%d%n", contig.getSequenceName(), contig.getSequenceLength());
+ }
+ }
+}
diff --git a/src/java/picard/sam/ReplaceSamHeader.java b/src/java/picard/sam/ReplaceSamHeader.java
new file mode 100644
index 0000000..0c05044
--- /dev/null
+++ b/src/java/picard/sam/ReplaceSamHeader.java
@@ -0,0 +1,117 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.ValidationStringency;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+
+/**
+ * @author alecw at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Replace the SAMFileHeader in a SAM file with the given header. " +
+ "Validation is minimal. It is up to the user to ensure that all the elements referred to in the SAMRecords " +
+ "are present in the new header. Sort order of the two input files must be the same.",
+ usageShort = "Replace the SAMFileHeader in a SAM file with the given header",
+ programGroup = SamOrBam.class
+)
+public class ReplaceSamHeader extends CommandLineProgram {
+
+ @Option(doc = "SAM file from which SAMRecords will be read.", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(doc = "SAM file from which SAMFileHeader will be read.")
+ public File HEADER;
+
+ @Option(doc = "SAMFileHeader from HEADER file will be written to this file, followed by SAMRecords from INPUT file",
+ shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public File OUTPUT;
+
+ public static void main(final String[] argv) {
+ new ReplaceSamHeader().instanceMainWithExit(argv);
+ }
+
+ /**
+ * Do the work after command line has been parsed.
+ * RuntimeException may be thrown by this method, and are reported appropriately.
+ *
+ * @return program exit status.
+ */
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsReadable(HEADER);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final SAMFileHeader replacementHeader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).getFileHeader(HEADER);
+
+ if (BamFileIoUtils.isBamFile(INPUT)) {
+ blockCopyReheader(replacementHeader);
+ } else {
+ standardReheader(replacementHeader);
+ }
+
+ return 0;
+ }
+
+ private void standardReheader(final SAMFileHeader replacementHeader) {
+ final SamReader recordReader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).validationStringency(ValidationStringency.SILENT).open(INPUT);
+ if (replacementHeader.getSortOrder() != recordReader.getFileHeader().getSortOrder()) {
+ throw new PicardException("Sort orders of INPUT (" + recordReader.getFileHeader().getSortOrder().name() +
+ ") and HEADER (" + replacementHeader.getSortOrder().name() + ") do not agree.");
+ }
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(replacementHeader, true, OUTPUT);
+
+ final ProgressLogger progress = new ProgressLogger(Log.getInstance(ReplaceSamHeader.class));
+ for (final SAMRecord rec : recordReader) {
+ rec.setHeader(replacementHeader);
+ writer.addAlignment(rec);
+ progress.record(rec);
+ }
+ writer.close();
+ CloserUtil.close(recordReader);
+ }
+
+ private void blockCopyReheader(final SAMFileHeader replacementHeader) {
+ BamFileIoUtils.reheaderBamFile(replacementHeader, INPUT, OUTPUT, CREATE_MD5_FILE, CREATE_INDEX);
+ }
+}
diff --git a/src/java/picard/sam/RevertOriginalBaseQualitiesAndAddMateCigar.java b/src/java/picard/sam/RevertOriginalBaseQualitiesAndAddMateCigar.java
new file mode 100644
index 0000000..3d52c22
--- /dev/null
+++ b/src/java/picard/sam/RevertOriginalBaseQualitiesAndAddMateCigar.java
@@ -0,0 +1,207 @@
+package picard.sam;
+
+import htsjdk.samtools.BAMRecordCodec;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SortingCollection;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.Iterator;
+
+/**
+ * This tool reverts the original base qualities (if specified) and adds the mate cigar tag to mapped BAMs.
+ * If the file does not have OQs and already has mate cigar tags, nothing is done.
+ * New BAM/BAI/MD5 files are created.
+ *
+ * @author Nils Homer
+ */
+ at CommandLineProgramProperties(
+ usage = "Reverts the original base qualities and adds the mate cigar tag to read-group BAMs.",
+ usageShort = "Reverts the original base qualities and adds the mate cigar tag to read-group BAMs",
+ programGroup = SamOrBam.class
+)
+public class RevertOriginalBaseQualitiesAndAddMateCigar extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The input SAM/BAM file to revert the state of.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output SAM/BAM file to create.")
+ public File OUTPUT;
+
+ @Option(shortName = "SO", doc = "The sort order to create the reverted output file with."
+ + "By default, the sort order will be the same as the input.", optional = true)
+ public SAMFileHeader.SortOrder SORT_ORDER = null;
+
+ @Option(shortName = StandardOptionDefinitions.USE_ORIGINAL_QUALITIES_SHORT_NAME, doc = "True to restore original" +
+ " qualities from the OQ field to the QUAL field if available.")
+ public boolean RESTORE_ORIGINAL_QUALITIES = true;
+
+ @Option(doc = "The maximum number of records to examine to determine if we can exit early and not output, given that"
+ + " there are a no original base qualities (if we are to restore) and mate cigars exist."
+ + " Set to 0 to never skip the file.")
+ public int MAX_RECORDS_TO_EXAMINE = 10000;
+
+ private final static Log log = Log.getInstance(RevertOriginalBaseQualitiesAndAddMateCigar.class);
+
+ public RevertOriginalBaseQualitiesAndAddMateCigar() {
+ this.CREATE_INDEX = true;
+ this.CREATE_MD5_FILE = true;
+ }
+
+ /** Default main method impl. */
+ public static void main(final String[] args) {
+ new RevertOriginalBaseQualitiesAndAddMateCigar().instanceMainWithExit(args);
+ }
+
+ public int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ boolean foundPairedMappedReads = false;
+
+ // Check if we can skip this file since it does not have OQ tags and the mate cigar tag is already there.
+ final CanSkipSamFile skipSamFile = RevertOriginalBaseQualitiesAndAddMateCigar.canSkipSAMFile(INPUT, MAX_RECORDS_TO_EXAMINE,
+ RESTORE_ORIGINAL_QUALITIES, REFERENCE_SEQUENCE);
+ log.info(skipSamFile.getMessage(MAX_RECORDS_TO_EXAMINE));
+ if (skipSamFile.canSkip()) return 0;
+
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).enable(SamReaderFactory.Option.EAGERLY_DECODE).open(INPUT);
+ final SAMFileHeader inHeader = in.getFileHeader();
+
+ // Build the output writer based on the correct sort order
+ final SAMFileHeader outHeader = inHeader.clone();
+ if (null == SORT_ORDER) this.SORT_ORDER = inHeader.getSortOrder(); // same as the input
+ outHeader.setSortOrder(SORT_ORDER);
+ SAMFileWriterFactory.setDefaultCreateIndexWhileWriting(CREATE_INDEX);
+ SAMFileWriterFactory.setDefaultCreateMd5File(CREATE_MD5_FILE);
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, false, OUTPUT);
+
+ // Iterate over the records, revert original base qualities, and push them into a SortingCollection by queryname
+ final SortingCollection<SAMRecord> sorter = SortingCollection.newInstance(SAMRecord.class, new BAMRecordCodec(outHeader),
+ new SAMRecordQueryNameComparator(), MAX_RECORDS_IN_RAM);
+ final ProgressLogger revertingProgress = new ProgressLogger(log, 1000000, " reverted OQs");
+ int numOriginalQualitiesRestored = 0;
+ for (final SAMRecord record : in) {
+ // Clean up reads that map off the end of the reference
+ AbstractAlignmentMerger.createNewCigarsIfMapsOffEndOfReference(record);
+
+ if (RESTORE_ORIGINAL_QUALITIES && null != record.getOriginalBaseQualities()) {
+ // revert the original base qualities
+ record.setBaseQualities(record.getOriginalBaseQualities());
+ record.setOriginalBaseQualities(null);
+ numOriginalQualitiesRestored++;
+ }
+ if (!foundPairedMappedReads && record.getReadPairedFlag() && !record.getReadUnmappedFlag()) foundPairedMappedReads = true;
+ revertingProgress.record(record);
+ sorter.add(record);
+ }
+ CloserUtil.close(in);
+ log.info("Reverted the original base qualities for " + numOriginalQualitiesRestored + " records");
+
+ /**
+ * Iterator through sorting collection output
+ * 1. Set mate cigar string and mate information
+ * 2. push record into SAMFileWriter to the output
+ */
+ final SamPairUtil.SetMateInfoIterator sorterIterator = new SamPairUtil.SetMateInfoIterator(sorter.iterator(), true);
+ final ProgressLogger sorterProgress = new ProgressLogger(log, 1000000, " mate cigars added");
+ while (sorterIterator.hasNext()) {
+ final SAMRecord record = sorterIterator.next();
+ out.addAlignment(record);
+ sorterProgress.record(record);
+ }
+ sorterIterator.close();
+ CloserUtil.close(out);
+ log.info("Updated " + sorterIterator.getNumMateCigarsAdded() + " records with mate cigar");
+ if (!foundPairedMappedReads) log.info("Did not find any paired mapped reads.");
+
+ return 0;
+ }
+
+ /**
+ * Used as a return for the canSkipSAMFile function.
+ */
+ public enum CanSkipSamFile {
+ CAN_SKIP("Can skip the BAM file", true),
+ CANNOT_SKIP_FOUND_OQ("Cannot skip the BAM as we found a record with an OQ", false),
+ CANNOT_SKIP_FOUND_NO_MC("Cannot skip the BAM as we found a mate with no mate cigar tag", false),
+ FOUND_NO_EVIDENCE("Found no evidence of OQ or mate with no mate cigar in the first %d records. Will continue...", false);
+ final private String format;
+ final private boolean skip;
+
+ private CanSkipSamFile(final String format, final boolean skip) {
+ this.format = format;
+ this.skip = skip;
+ }
+
+ public String getMessage(final int maxRecordsToExamine) { return String.format(this.format, maxRecordsToExamine); }
+
+ public boolean canSkip() { return this.skip; }
+ }
+
+ /**
+ * Checks if we can skip the SAM/BAM file when reverting origin base qualities and adding mate cigars.
+ *
+ * @param inputFile the SAM/BAM input file
+ * @param maxRecordsToExamine the maximum number of records to examine before quitting
+ * @param revertOriginalBaseQualities true if we are to revert original base qualities, false otherwise
+ * @return whether we can skip or not, and the explanation why.
+ */
+ public static CanSkipSamFile canSkipSAMFile(final File inputFile, final int maxRecordsToExamine, boolean revertOriginalBaseQualities,
+ final File referenceFasta) {
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).enable(SamReaderFactory.Option.EAGERLY_DECODE).open(inputFile);
+ final Iterator<SAMRecord> iterator = in.iterator();
+ int numRecordsExamined = 0;
+ CanSkipSamFile returnType = CanSkipSamFile.FOUND_NO_EVIDENCE;
+
+ while (iterator.hasNext() && numRecordsExamined < maxRecordsToExamine) {
+ final SAMRecord record = iterator.next();
+
+ if (revertOriginalBaseQualities && null != record.getOriginalBaseQualities()) {
+ // has OQ, break and return case #2
+ returnType = CanSkipSamFile.CANNOT_SKIP_FOUND_OQ;
+ break;
+ }
+
+ // check if mate pair and its mate is mapped
+ if (record.getReadPairedFlag() && !record.getMateUnmappedFlag()) {
+ if (null == SAMUtils.getMateCigar(record)) {
+ // has no MC, break and return case #2
+ returnType = CanSkipSamFile.CANNOT_SKIP_FOUND_NO_MC;
+ break;
+ } else {
+ // has MC, previously checked that it does not have OQ, break and return case #1
+ returnType = CanSkipSamFile.CAN_SKIP;
+ break;
+ }
+ }
+
+ numRecordsExamined++;
+ }
+
+ // no more records anyhow, so we can skip
+ if (!iterator.hasNext() && CanSkipSamFile.FOUND_NO_EVIDENCE == returnType) {
+ returnType = CanSkipSamFile.CAN_SKIP;
+ }
+
+ CloserUtil.close(in);
+
+ return returnType;
+ }
+}
diff --git a/src/java/picard/sam/RevertSam.java b/src/java/picard/sam/RevertSam.java
new file mode 100644
index 0000000..b1fc3d7
--- /dev/null
+++ b/src/java/picard/sam/RevertSam.java
@@ -0,0 +1,401 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.BAMRecordCodec;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.SAMRecordUtil;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.filter.FilteringIterator;
+import htsjdk.samtools.filter.SamRecordFilter;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.FastqQualityFormat;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.QualityEncodingDetector;
+import htsjdk.samtools.util.SolexaQualityConverter;
+import htsjdk.samtools.util.SortingCollection;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Reverts a SAM file by optionally restoring original quality scores and by removing
+ * all alignment information.
+ */
+ at CommandLineProgramProperties(
+ usage = "Reverts SAM or BAM files to a previous state by removing certain types of information and/or " +
+ "substituting in the original quality scores when available.",
+ usageShort = "Reverts SAM or BAM files to a previous state",
+ programGroup = SamOrBam.class
+)
+public class RevertSam extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The input SAM/BAM file to revert the state of.")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output SAM/BAM file to create.")
+ public File OUTPUT;
+
+ @Option(shortName = "SO", doc = "The sort order to create the reverted output file with.")
+ public SortOrder SORT_ORDER = SortOrder.queryname;
+
+ @Option(shortName = StandardOptionDefinitions.USE_ORIGINAL_QUALITIES_SHORT_NAME, doc = "True to restore original qualities from the OQ field to the QUAL field if available.")
+ public boolean RESTORE_ORIGINAL_QUALITIES = true;
+
+ @Option(doc = "Remove duplicate read flags from all reads. Note that if this is true and REMOVE_ALIGNMENT_INFORMATION==false, " +
+ " the output may have the unusual but sometimes desirable trait of having unmapped reads that are marked as duplicates.")
+ public boolean REMOVE_DUPLICATE_INFORMATION = true;
+
+ @Option(doc = "Remove all alignment information from the file.")
+ public boolean REMOVE_ALIGNMENT_INFORMATION = true;
+
+ @Option(doc = "When removing alignment information, the set of optional tags to remove.")
+ public List<String> ATTRIBUTE_TO_CLEAR = new ArrayList<String>() {{
+ add(SAMTag.NM.name());
+ add(SAMTag.UQ.name());
+ add(SAMTag.PG.name());
+ add(SAMTag.MD.name());
+ add(SAMTag.MQ.name());
+ add(SAMTag.SA.name()); // Supplementary alignment metadata
+ add(SAMTag.MC.name()); // Mate Cigar
+ }};
+
+ @Option(doc = "WARNING: This option is potentially destructive. If enabled will discard reads in order to produce " +
+ "a consistent output BAM. Reads discarded include (but are not limited to) paired reads with missing " +
+ "mates, duplicated records, records with mismatches in length of bases and qualities. This option can " +
+ "only be enabled if the output sort order is queryname and will always cause sorting to occur.")
+ public boolean SANITIZE = false;
+
+ @Option(doc = "If SANITIZE=true and higher than MAX_DISCARD_FRACTION reads are discarded due to sanitization then" +
+ "the program will exit with an Exception instead of exiting cleanly. Output BAM will still be valid.")
+ public double MAX_DISCARD_FRACTION = 0.01;
+
+ @Option(doc = "The sample alias to use in the reverted output file. This will override the existing " +
+ "sample alias in the file and is used only if all the read groups in the input file have the " +
+ "same sample alias ", shortName = StandardOptionDefinitions.SAMPLE_ALIAS_SHORT_NAME, optional = true)
+ public String SAMPLE_ALIAS;
+
+ @Option(doc = "The library name to use in the reverted output file. This will override the existing " +
+ "sample alias in the file and is used only if all the read groups in the input file have the " +
+ "same sample alias ", shortName = StandardOptionDefinitions.LIBRARY_NAME_SHORT_NAME, optional = true)
+ public String LIBRARY_NAME;
+
+ private final static Log log = Log.getInstance(RevertSam.class);
+
+ /** Default main method impl. */
+ public static void main(final String[] args) {
+ new RevertSam().instanceMainWithExit(args);
+ }
+
+ /**
+ * Enforce that output ordering is queryname when sanitization is turned on since it requires a queryname sort.
+ */
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (SANITIZE && SORT_ORDER != SortOrder.queryname) {
+ return new String[]{"SORT_ORDER must be queryname when sanitization is enabled with SANITIZE=true."};
+ }
+
+ return null;
+ }
+
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final boolean sanitizing = SANITIZE;
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).validationStringency(VALIDATION_STRINGENCY).open(INPUT);
+ final SAMFileHeader inHeader = in.getFileHeader();
+
+ // If we are going to override SAMPLE_ALIAS or LIBRARY_NAME, make sure all the read
+ // groups have the same values.
+ final List<SAMReadGroupRecord> rgs = inHeader.getReadGroups();
+ if (SAMPLE_ALIAS != null || LIBRARY_NAME != null) {
+ boolean allSampleAliasesIdentical = true;
+ boolean allLibraryNamesIdentical = true;
+ for (int i = 1; i < rgs.size(); i++) {
+ if (!rgs.get(0).getSample().equals(rgs.get(i).getSample())) {
+ allSampleAliasesIdentical = false;
+ }
+ if (!rgs.get(0).getLibrary().equals(rgs.get(i).getLibrary())) {
+ allLibraryNamesIdentical = false;
+ }
+ }
+ if (SAMPLE_ALIAS != null && !allSampleAliasesIdentical) {
+ throw new PicardException("Read groups have multiple values for sample. " +
+ "A value for SAMPLE_ALIAS cannot be supplied.");
+ }
+ if (LIBRARY_NAME != null && !allLibraryNamesIdentical) {
+ throw new PicardException("Read groups have multiple values for library name. " +
+ "A value for library name cannot be supplied.");
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Build the output writer with an appropriate header based on the options
+ ////////////////////////////////////////////////////////////////////////////
+ final boolean presorted = (inHeader.getSortOrder() == SORT_ORDER) || (SORT_ORDER == SortOrder.queryname && SANITIZE);
+ final SAMFileHeader outHeader = new SAMFileHeader();
+ for (final SAMReadGroupRecord rg : inHeader.getReadGroups()) {
+ if (SAMPLE_ALIAS != null) {
+ rg.setSample(SAMPLE_ALIAS);
+ }
+ if (LIBRARY_NAME != null) {
+ rg.setLibrary(LIBRARY_NAME);
+ }
+ outHeader.addReadGroup(rg);
+ }
+ outHeader.setSortOrder(SORT_ORDER);
+ if (!REMOVE_ALIGNMENT_INFORMATION) {
+ outHeader.setSequenceDictionary(inHeader.getSequenceDictionary());
+ outHeader.setProgramRecords(inHeader.getProgramRecords());
+ }
+
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outHeader, presorted, OUTPUT);
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Build a sorting collection to use if we are sanitizing
+ ////////////////////////////////////////////////////////////////////////////
+ final SortingCollection<SAMRecord> sorter;
+ if (sanitizing) {
+ sorter = SortingCollection.newInstance(SAMRecord.class, new BAMRecordCodec(outHeader), new SAMRecordQueryNameComparator(), MAX_RECORDS_IN_RAM);
+ } else {
+ sorter = null;
+ }
+
+ final ProgressLogger progress = new ProgressLogger(log, 1000000, "Reverted");
+ for (final SAMRecord rec : in) {
+ // Weed out non-primary and supplemental read as we don't want duplicates in the reverted file!
+ if (rec.isSecondaryOrSupplementary()) continue;
+
+ // Actually to the reverting of the remaining records
+ revertSamRecord(rec);
+
+ if (sanitizing) sorter.add(rec);
+ else out.addAlignment(rec);
+ progress.record(rec);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Now if we're sanitizing, clean up the records and write them to the output
+ ////////////////////////////////////////////////////////////////////////////
+ if (!sanitizing) {
+ out.close();
+ } else {
+
+ long total = 0, discarded = 0;
+ final PeekableIterator<SAMRecord> iterator = new PeekableIterator<SAMRecord>(sorter.iterator());
+ final Map<SAMReadGroupRecord, FastqQualityFormat> readGroupToFormat = new HashMap<SAMReadGroupRecord, FastqQualityFormat>();
+
+ // Figure out the quality score encoding scheme for each read group.
+ for (final SAMReadGroupRecord rg : inHeader.getReadGroups()) {
+ final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).validationStringency(VALIDATION_STRINGENCY).open(INPUT);
+ final SamRecordFilter filter = new SamRecordFilter() {
+ public boolean filterOut(final SAMRecord rec) {
+ return !rec.getReadGroup().getId().equals(rg.getId());
+ }
+
+ public boolean filterOut(final SAMRecord first, final SAMRecord second) {
+ throw new UnsupportedOperationException();
+ }
+ };
+ readGroupToFormat.put(rg, QualityEncodingDetector.detect(QualityEncodingDetector.DEFAULT_MAX_RECORDS_TO_ITERATE, new FilteringIterator(reader.iterator(), filter), RESTORE_ORIGINAL_QUALITIES));
+ CloserUtil.close(reader);
+ }
+ for (final SAMReadGroupRecord r : readGroupToFormat.keySet()) {
+ log.info("Detected quality format for " + r.getReadGroupId() + ": " + readGroupToFormat.get(r));
+ }
+ if (readGroupToFormat.values().contains(FastqQualityFormat.Solexa)) {
+ log.error("No quality score encoding conversion implemented for " + FastqQualityFormat.Solexa);
+ return -1;
+ }
+
+
+ final ProgressLogger sanitizerProgress = new ProgressLogger(log, 1000000, "Sanitized");
+
+ readNameLoop:
+ while (iterator.hasNext()) {
+ final List<SAMRecord> recs = fetchByReadName(iterator);
+ total += recs.size();
+
+ // Check that all the reads have bases and qualities of the same length
+ for (final SAMRecord rec : recs) {
+ if (rec.getReadBases().length != rec.getBaseQualities().length) {
+ log.debug("Discarding " + recs.size() + " reads with name " + rec.getReadName() + " for mismatching bases and quals length.");
+ discarded += recs.size();
+ continue readNameLoop;
+ }
+ }
+
+ // Check that if the first read is marked as unpaired that there is in fact only one read
+ if (!recs.get(0).getReadPairedFlag() && recs.size() > 1) {
+ log.debug("Discarding " + recs.size() + " reads with name " + recs.get(0).getReadName() + " because they claim to be unpaired.");
+ discarded += recs.size();
+ continue readNameLoop;
+ }
+
+ // Check that if we have paired reads there is exactly one first of pair and one second of pair
+ if (recs.get(0).getReadPairedFlag()) {
+ int firsts = 0, seconds = 0, unpaired = 0;
+ for (final SAMRecord rec : recs) {
+ if (!rec.getReadPairedFlag()) ++unpaired;
+ if (rec.getFirstOfPairFlag()) ++firsts;
+ if (rec.getSecondOfPairFlag()) ++seconds;
+ }
+
+ if (unpaired > 0 || firsts != 1 || seconds != 1) {
+ log.debug("Discarding " + recs.size() + " reads with name " + recs.get(0).getReadName() + " because pairing information in corrupt.");
+ discarded += recs.size();
+ continue readNameLoop;
+ }
+ }
+
+ // If we've made it this far spit the records into the output!
+ for (final SAMRecord rec : recs) {
+ // The only valid quality score encoding scheme is standard; if it's not standard, change it.
+ final FastqQualityFormat recordFormat = readGroupToFormat.get(rec.getReadGroup());
+ if (!recordFormat.equals(FastqQualityFormat.Standard)) {
+ final byte quals[] = rec.getBaseQualities();
+ for (int i = 0; i < quals.length; i++) {
+ quals[i] -= SolexaQualityConverter.ILLUMINA_TO_PHRED_SUBTRAHEND;
+ }
+ rec.setBaseQualities(quals);
+ }
+ out.addAlignment(rec);
+ sanitizerProgress.record(rec);
+ }
+ }
+
+ out.close();
+
+ final double discardRate = discarded / (double) total;
+ final NumberFormat fmt = new DecimalFormat("0.000%");
+ log.info("Discarded " + discarded + " out of " + total + " (" + fmt.format(discardRate) + ") reads in order to sanitize output.");
+
+ if (discarded / (double) total > MAX_DISCARD_FRACTION) {
+ throw new PicardException("Discarded " + fmt.format(discardRate) + " which is above MAX_DISCARD_FRACTION of " + fmt.format(MAX_DISCARD_FRACTION));
+ }
+ }
+
+ CloserUtil.close(in);
+ return 0;
+ }
+
+ /**
+ * Generates a list by consuming from the iterator in order starting with the first available
+ * read and continuing while subsequent reads share the same read name. If there are no reads
+ * remaining returns an empty list.
+ */
+ private List<SAMRecord> fetchByReadName(final PeekableIterator<SAMRecord> iterator) {
+ final List<SAMRecord> out = new LinkedList<SAMRecord>();
+
+ if (iterator.hasNext()) {
+ final SAMRecord first = iterator.next();
+ out.add(first);
+
+ while (iterator.hasNext() && iterator.peek().getReadName().equals(first.getReadName())) {
+ out.add(iterator.next());
+ }
+ }
+
+ return out;
+ }
+
+ /**
+ * Takes an individual SAMRecord and applies the set of changes/reversions to it that
+ * have been requested by program level options.
+ */
+ public void revertSamRecord(final SAMRecord rec) {
+ if (RESTORE_ORIGINAL_QUALITIES) {
+ final byte[] oq = rec.getOriginalBaseQualities();
+ if (oq != null) {
+ rec.setBaseQualities(oq);
+ rec.setOriginalBaseQualities(null);
+ }
+ }
+
+ if (REMOVE_DUPLICATE_INFORMATION) {
+ rec.setDuplicateReadFlag(false);
+ }
+
+ if (REMOVE_ALIGNMENT_INFORMATION) {
+ if (rec.getReadNegativeStrandFlag()) {
+ SAMRecordUtil.reverseComplement(rec);
+ rec.setReadNegativeStrandFlag(false);
+ }
+
+ // Remove all alignment based information about the read itself
+ rec.setReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
+ rec.setAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
+ rec.setCigarString(SAMRecord.NO_ALIGNMENT_CIGAR);
+ rec.setMappingQuality(SAMRecord.NO_MAPPING_QUALITY);
+
+ if (!rec.getReadUnmappedFlag()) {
+ rec.setInferredInsertSize(0);
+ rec.setNotPrimaryAlignmentFlag(false);
+ rec.setProperPairFlag(false);
+ rec.setReadUnmappedFlag(true);
+
+ }
+
+ // Then remove any mate flags and info related to alignment
+ if (rec.getReadPairedFlag()) {
+ rec.setMateAlignmentStart(SAMRecord.NO_ALIGNMENT_START);
+ rec.setMateNegativeStrandFlag(false);
+ rec.setMateReferenceIndex(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
+ rec.setMateUnmappedFlag(true);
+ }
+
+ // And then remove any tags that are calculated from the alignment
+ for (final String tag : ATTRIBUTE_TO_CLEAR) {
+ rec.setAttribute(tag, null);
+ }
+ }
+ }
+
+}
diff --git a/src/java/picard/sam/SamAlignmentMerger.java b/src/java/picard/sam/SamAlignmentMerger.java
new file mode 100644
index 0000000..b2936f9
--- /dev/null
+++ b/src/java/picard/sam/SamAlignmentMerger.java
@@ -0,0 +1,338 @@
+package picard.sam;
+
+import htsjdk.samtools.BAMRecordCodec;
+import htsjdk.samtools.CigarElement;
+import htsjdk.samtools.CigarOperator;
+import htsjdk.samtools.MergingSamRecordIterator;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileHeader.SortOrder;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordQueryNameComparator;
+import htsjdk.samtools.SamFileHeaderMerger;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.ValidationStringency;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.DelegatingIterator;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import htsjdk.samtools.util.SortingCollection;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class that takes in a set of alignment information in SAM format and merges it with the set
+ * of all reads for which alignment was attempted, stored in an unmapped SAM file. This
+ * class overrides mergeAlignment in AbstractAlignmentNMerger and proceeds on the assumption that
+ * the underlying alignment records are aleady in query-name sorted order (true for bwa). If
+ * they are not, the mergeAlignment method catches the IllegalStateException, forces a sort
+ * of the underlying alignment records, and tries again.
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+public class SamAlignmentMerger extends AbstractAlignmentMerger {
+
+ private final Log log = Log.getInstance(SamAlignmentMerger.class);
+ private final List<File> alignedSamFile;
+ private final List<File> read1AlignedSamFile;
+ private final List<File> read2AlignedSamFile;
+ private final int maxGaps;
+ private boolean forceSort = false;
+
+ /**
+ * Constructor
+ *
+ * @param unmappedBamFile The BAM file that was used as the input to the aligner, which will
+ * include info on all the reads that did not map. Required.
+ * @param targetBamFile The file to which to write the merged SAM records. Required.
+ * @param referenceFasta The reference sequence for the map files. Required.
+ * @param programRecord Program record for taget file SAMRecords created.
+ * @param clipAdapters Whether adapters marked in unmapped BAM file should be marked as
+ * soft clipped in the merged bam. Required.
+ * @param bisulfiteSequence Whether the reads are bisulfite sequence (used when calculating the
+ * NM and UQ tags). Required.
+ * @param alignedReadsOnly Whether to output only those reads that have alignment data
+ * @param alignedSamFile The SAM file(s) with alignment information. Optional. If this is
+ * not provided, then read1AlignedSamFile and read2AlignedSamFile must be.
+ * @param maxGaps The maximum number of insertions or deletions permitted in an
+ * alignment. Alignments with more than this many gaps will be ignored.
+ * -1 means to allow any number of gaps.
+ * @param attributesToRetain attributes from the alignment record that should be
+ * removed when merging. This overrides attributesToRetain if they share
+ * common tags.
+ * @param read1BasesTrimmed The number of bases trimmed from start of read 1 prior to alignment. Optional.
+ * @param read2BasesTrimmed The number of bases trimmed from start of read 2 prior to alignment. Optional.
+ * @param read1AlignedSamFile The alignment records for read1. Used when the two ends of a read are
+ * aligned separately. This is optional, but must be specified if
+ * alignedSamFile is not.
+ * @param read2AlignedSamFile The alignment records for read1. Used when the two ends of a read are
+ * aligned separately. This is optional, but must be specified if
+ * alignedSamFile is not.
+ * @param expectedOrientations A List of SamPairUtil.PairOrientations that are expected for
+ * aligned pairs. Used to determine the properPair flag.
+ * @param sortOrder The order in which the merged records should be output. If null,
+ * output will be coordinate-sorted
+ * @param primaryAlignmentSelectionStrategy How to handle multiple alignments for a fragment or read pair,
+ * in which none are primary, or more than one is marked primary
+ * @param addMateCigar True if we are to add or maintain the mate CIGAR (MC) tag, false if we are to remove or not include.
+ */
+ public SamAlignmentMerger(final File unmappedBamFile, final File targetBamFile, final File referenceFasta,
+ final SAMProgramRecord programRecord, final boolean clipAdapters, final boolean bisulfiteSequence,
+ final boolean alignedReadsOnly,
+ final List<File> alignedSamFile, final int maxGaps, final List<String> attributesToRetain,
+ final List<String> attributesToRemove,
+ final Integer read1BasesTrimmed, final Integer read2BasesTrimmed,
+ final List<File> read1AlignedSamFile, final List<File> read2AlignedSamFile,
+ final List<SamPairUtil.PairOrientation> expectedOrientations,
+ final SortOrder sortOrder,
+ final PrimaryAlignmentSelectionStrategy primaryAlignmentSelectionStrategy,
+ final boolean addMateCigar) {
+
+ super(unmappedBamFile, targetBamFile, referenceFasta, clipAdapters, bisulfiteSequence,
+ alignedReadsOnly, programRecord, attributesToRetain, attributesToRemove, read1BasesTrimmed,
+ read2BasesTrimmed, expectedOrientations, sortOrder, primaryAlignmentSelectionStrategy, addMateCigar);
+
+ if ((alignedSamFile == null || alignedSamFile.size() == 0) &&
+ (read1AlignedSamFile == null || read1AlignedSamFile.size() == 0 ||
+ read2AlignedSamFile == null || read2AlignedSamFile.size() == 0)) {
+ throw new IllegalArgumentException("Either alignedSamFile or BOTH of read1AlignedSamFile and " +
+ "read2AlignedSamFile must be specified.");
+ }
+
+ if (alignedSamFile != null) {
+ for (final File f : alignedSamFile) {
+ IOUtil.assertFileIsReadable(f);
+ }
+ } else {
+ for (final File f : read1AlignedSamFile) {
+ IOUtil.assertFileIsReadable(f);
+ }
+ for (final File f : read2AlignedSamFile) {
+ IOUtil.assertFileIsReadable(f);
+ }
+ }
+
+ this.alignedSamFile = alignedSamFile;
+ this.read1AlignedSamFile = read1AlignedSamFile;
+ this.read2AlignedSamFile = read2AlignedSamFile;
+ this.maxGaps = maxGaps;
+
+ log.info("Processing SAM file(s): " + alignedSamFile != null ? alignedSamFile : read1AlignedSamFile + "," + read2AlignedSamFile);
+ }
+
+
+ /**
+ * Merges the alignment from the map file with the non-aligned records from the source BAM file.
+ * Overrides mergeAlignment in AbstractAlignmentMerger. Tries first to proceed on the assumption
+ * that the alignment records are pre-sorted. If not, catches the exception, forces a sort, and
+ * tries again.
+ */
+ public void mergeAlignment(final File referenceFasta) {
+ try {
+ super.mergeAlignment(referenceFasta);
+ } catch (final IllegalStateException ise) {
+ log.warn("Exception merging bam alignment - attempting to sort aligned reads and try again: ", ise.getMessage());
+ forceSort = true;
+ resetRefSeqFileWalker();
+ super.mergeAlignment(referenceFasta);
+ }
+ }
+
+ /**
+ * Reads the aligned SAM records into a SortingCollection and returns an iterator over that collection
+ */
+ protected CloseableIterator<SAMRecord> getQuerynameSortedAlignedRecords() {
+
+ final CloseableIterator<SAMRecord> mergingIterator;
+ final SAMFileHeader header;
+
+ // When the alignment records, including both ends of a pair, are in SAM files
+ if (alignedSamFile != null && alignedSamFile.size() > 0) {
+ final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(alignedSamFile.size());
+ final List<SamReader> readers = new ArrayList<SamReader>(alignedSamFile.size());
+ for (final File f : this.alignedSamFile) {
+ final SamReader r = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).open(f);
+ headers.add(r.getFileHeader());
+ readers.add(r);
+
+ // As we're going through and opening the aligned files, if we don't have a @PG yet
+ // and there is only a single one in the input file, use that!
+ if (getProgramRecord() == null && r.getFileHeader().getProgramRecords().size() == 1) {
+ setProgramRecord(r.getFileHeader().getProgramRecords().iterator().next());
+ }
+ }
+
+ final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SortOrder.queryname, headers, false);
+
+ mergingIterator = new MergingSamRecordIterator(headerMerger, readers, true);
+ header = headerMerger.getMergedHeader();
+
+ }
+ // When the ends are aligned separately and don't have firstOfPair information correctly
+ // set we use this branch.
+ else {
+ mergingIterator = new SeparateEndAlignmentIterator(this.read1AlignedSamFile, this.read2AlignedSamFile, referenceFasta);
+ header = ((SeparateEndAlignmentIterator) mergingIterator).getHeader();
+
+ // As we're going through and opening the aligned files, if we don't have a @PG yet
+ // and there is only a single one in the input file, use that!
+ if (getProgramRecord() == null && header.getProgramRecords().size() == 1) {
+ setProgramRecord(header.getProgramRecords().iterator().next());
+ }
+ }
+
+
+ if (!forceSort) {
+ return mergingIterator;
+ }
+
+
+ final SortingCollection<SAMRecord> alignmentSorter = SortingCollection.newInstance(SAMRecord.class,
+ new BAMRecordCodec(header), new SAMRecordQueryNameComparator(), MAX_RECORDS_IN_RAM);
+
+ int count = 0;
+ while (mergingIterator.hasNext()) {
+ alignmentSorter.add(mergingIterator.next());
+ count++;
+ if (count > 0 && count % 1000000 == 0) {
+ log.info("Read " + count + " records from alignment SAM/BAM.");
+ }
+ }
+ log.info("Finished reading " + count + " total records from alignment SAM/BAM.");
+
+ mergingIterator.close();
+ return new DelegatingIterator<SAMRecord>(alignmentSorter.iterator()) {
+ @Override
+ public void close() {
+ super.close();
+ alignmentSorter.cleanup();
+ }
+ };
+ }
+
+ private class SuffixTrimingSamRecordIterator implements CloseableIterator<SAMRecord> {
+ private final CloseableIterator<SAMRecord> underlyingIterator;
+ private final String suffixToTrim;
+
+ private SuffixTrimingSamRecordIterator(final CloseableIterator<SAMRecord> underlyingIterator, final String suffixToTrim) {
+ this.underlyingIterator = underlyingIterator;
+ this.suffixToTrim = suffixToTrim;
+ }
+
+ @Override
+ public void close() {
+ underlyingIterator.close();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return underlyingIterator.hasNext();
+ }
+
+ @Override
+ public SAMRecord next() {
+ final SAMRecord rec = underlyingIterator.next();
+ final String readName = rec.getReadName();
+ if (readName.endsWith(suffixToTrim)) {
+ rec.setReadName(readName.substring(0, readName.length() - suffixToTrim.length()));
+ }
+ return rec;
+ }
+
+ @Override
+ public void remove() {
+ underlyingIterator.remove();
+ }
+ }
+
+ private class SeparateEndAlignmentIterator implements CloseableIterator<SAMRecord> {
+
+ private final PeekableIterator<SAMRecord> read1Iterator;
+ private final PeekableIterator<SAMRecord> read2Iterator;
+ private final SAMFileHeader header;
+
+ public SeparateEndAlignmentIterator(final List<File> read1Alignments, final List<File> read2Alignments, File referenceFasta) {
+ final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
+ final List<SamReader> read1 = new ArrayList<SamReader>(read1Alignments.size());
+ final List<SamReader> read2 = new ArrayList<SamReader>(read2Alignments.size());
+ for (final File f : read1Alignments) {
+ final SamReader r = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).open(f);
+ headers.add(r.getFileHeader());
+ read1.add(r);
+ }
+ for (final File f : read2Alignments) {
+ final SamReader r = SamReaderFactory.makeDefault().referenceSequence(referenceFasta).open(f);
+ headers.add(r.getFileHeader());
+ read2.add(r);
+ }
+
+ final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false);
+ read1Iterator = new PeekableIterator<SAMRecord>(
+ new SuffixTrimingSamRecordIterator(new MergingSamRecordIterator(headerMerger, read1, true), "/1"));
+ read2Iterator = new PeekableIterator<SAMRecord>(
+ new SuffixTrimingSamRecordIterator(new MergingSamRecordIterator(headerMerger, read2, true), "/2"));
+
+ header = headerMerger.getMergedHeader();
+ }
+
+ public void close() {
+ read1Iterator.close();
+ read2Iterator.close();
+ }
+
+ public boolean hasNext() {
+ return read1Iterator.hasNext() || read2Iterator.hasNext();
+ }
+
+ public SAMRecord next() {
+ if (read1Iterator.hasNext()) {
+ if (read2Iterator.hasNext()) {
+ return (read1Iterator.peek().getReadName().compareTo(read2Iterator.peek().getReadName()) <= 0)
+ ? setPairFlags(read1Iterator.next(), true)
+ : setPairFlags(read2Iterator.next(), false);
+ } else {
+ return setPairFlags(read1Iterator.next(), true);
+ }
+ } else {
+ return setPairFlags(read2Iterator.next(), false);
+ }
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("remove() not supported");
+ }
+
+ public SAMFileHeader getHeader() { return this.header; }
+
+ private SAMRecord setPairFlags(final SAMRecord sam, final boolean firstOfPair) {
+ sam.setReadPairedFlag(true);
+ sam.setFirstOfPairFlag(firstOfPair);
+ sam.setSecondOfPairFlag(!firstOfPair);
+ return sam;
+ }
+ }
+
+ /**
+ * For now, we only ignore those alignments that have more than <code>maxGaps</code> insertions
+ * or deletions.
+ */
+ protected boolean ignoreAlignment(final SAMRecord sam) {
+ if (maxGaps == -1) return false;
+ int gaps = 0;
+ for (final CigarElement el : sam.getCigar().getCigarElements()) {
+ if (el.getOperator() == CigarOperator.I || el.getOperator() == CigarOperator.D) {
+ gaps++;
+ }
+ }
+ return gaps > maxGaps;
+ }
+
+ // Accessor for testing
+ public boolean getForceSort() {return this.forceSort; }
+}
diff --git a/src/java/picard/sam/SamFormatConverter.java b/src/java/picard/sam/SamFormatConverter.java
new file mode 100644
index 0000000..7b50364
--- /dev/null
+++ b/src/java/picard/sam/SamFormatConverter.java
@@ -0,0 +1,91 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+
+/**
+ * Converts a BAM file to human-readable SAM output or vice versa
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Convert a BAM file to a SAM file, or SAM to BAM.\n" +
+ "Input and output formats are determined by file extension.",
+ usageShort = "Convert a BAM file to a SAM file, or a SAM to a BAM",
+ programGroup = SamOrBam.class
+)
+public class
+ SamFormatConverter extends CommandLineProgram {
+
+ private static final String PROGRAM_VERSION = "1.0";
+
+ // The following attributes define the command-line arguments
+
+ @Option(doc = "The BAM or SAM file to parse.", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+ @Option(doc = "The BAM or SAM output file. ", shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public File OUTPUT;
+
+ public static void main(final String[] argv) {
+ new SamFormatConverter().instanceMainWithExit(argv);
+ }
+
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeWriter(reader.getFileHeader(), true, OUTPUT, REFERENCE_SEQUENCE);
+
+ if (CREATE_INDEX && writer.getFileHeader().getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
+ throw new PicardException("Can't CREATE_INDEX unless sort order is coordinate");
+ }
+
+ final ProgressLogger progress = new ProgressLogger(Log.getInstance(SamFormatConverter.class));
+ for (final SAMRecord rec : reader) {
+ writer.addAlignment(rec);
+ progress.record(rec);
+ }
+ CloserUtil.close(reader);
+ writer.close();
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/SamToFastq.java b/src/java/picard/sam/SamToFastq.java
new file mode 100755
index 0000000..83172d0
--- /dev/null
+++ b/src/java/picard/sam/SamToFastq.java
@@ -0,0 +1,466 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.SAMValidationError;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.fastq.FastqRecord;
+import htsjdk.samtools.fastq.FastqWriter;
+import htsjdk.samtools.fastq.FastqWriterFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Lazy;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <p/>
+ * Extracts read sequences and qualities from the input SAM/BAM file and writes them into
+ * the output file in Sanger fastq format.
+ * See <a href="http://maq.sourceforge.net/fastq.shtml">MAQ FastQ specification</a> for details.
+ * In the RC mode (default is True), if the read is aligned and the alignment is to the reverse strand on the genome,
+ * the read's sequence from input sam file will be reverse-complemented prior to writing it to fastq in order restore correctly
+ * the original read sequence as it was generated by the sequencer.
+ */
+ at CommandLineProgramProperties(
+ usage = "Extracts read sequences and qualities from the input SAM/BAM file and writes them into " +
+ "the output file in Sanger fastq format. In the RC mode (default is True), if the read is aligned and the alignment is to the reverse strand on the genome, " +
+ "the read's sequence from input SAM file will be reverse-complemented prior to writing it to fastq in order restore correctly" +
+ "the original read sequence as it was generated by the sequencer.",
+ usageShort = "Converts a SAM/BAM into a FASTQ",
+ programGroup = SamOrBam.class
+)
+public class SamToFastq extends CommandLineProgram {
+
+ @Option(doc = "Input SAM/BAM file to extract reads from", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(shortName = "F", doc = "Output fastq file (single-end fastq or, if paired, first end of the pair fastq).",
+ mutex = {"OUTPUT_PER_RG"})
+ public File FASTQ;
+
+ @Option(shortName = "F2", doc = "Output fastq file (if paired, second end of the pair fastq).", optional = true,
+ mutex = {"OUTPUT_PER_RG"})
+ public File SECOND_END_FASTQ;
+
+ @Option(shortName = "FU", doc = "Output fastq file for unpaired reads; may only be provided in paired-fastq mode", optional = true, mutex = {"OUTPUT_PER_RG"})
+ public File UNPAIRED_FASTQ;
+
+ @Option(shortName = "OPRG", doc = "Output a fastq file per read group (two fastq files per read group if the group is paired).",
+ optional = true, mutex = {"FASTQ", "SECOND_END_FASTQ", "UNPAIRED_FASTQ"})
+ public boolean OUTPUT_PER_RG;
+
+ @Option(shortName="RGT", doc = "The read group tag (PU or ID) to be used to output a fastq file per read group.")
+ public String RG_TAG = "PU";
+
+ @Option(shortName = "ODIR", doc = "Directory in which to output the fastq file(s). Used only when OUTPUT_PER_RG is true.",
+ optional = true)
+ public File OUTPUT_DIR;
+
+ @Option(shortName = "RC", doc = "Re-reverse bases and qualities of reads with negative strand flag set before writing them to fastq",
+ optional = true)
+ public boolean RE_REVERSE = true;
+
+ @Option(shortName = "INTER", doc = "Will generate an interleaved fastq if paired, each line will have /1 or /2 to describe which end it came from")
+ public boolean INTERLEAVE = false;
+
+ @Option(shortName = "NON_PF", doc = "Include non-PF reads from the SAM file into the output " +
+ "FASTQ files. PF means 'passes filtering'. Reads whose 'not passing quality controls' " +
+ "flag is set are non-PF reads.")
+ public boolean INCLUDE_NON_PF_READS = false;
+
+ @Option(shortName = "CLIP_ATTR", doc = "The attribute that stores the position at which " +
+ "the SAM record should be clipped", optional = true)
+ public String CLIPPING_ATTRIBUTE;
+
+ @Option(shortName = "CLIP_ACT", doc = "The action that should be taken with clipped reads: " +
+ "'X' means the reads and qualities should be trimmed at the clipped position; " +
+ "'N' means the bases should be changed to Ns in the clipped region; and any " +
+ "integer means that the base qualities should be set to that value in the " +
+ "clipped region.", optional = true)
+ public String CLIPPING_ACTION;
+
+ @Option(shortName = "R1_TRIM", doc = "The number of bases to trim from the beginning of read 1.")
+ public int READ1_TRIM = 0;
+
+ @Option(shortName = "R1_MAX_BASES", doc = "The maximum number of bases to write from read 1 after trimming. " +
+ "If there are fewer than this many bases left after trimming, all will be written. If this " +
+ "value is null then all bases left after trimming will be written.", optional = true)
+ public Integer READ1_MAX_BASES_TO_WRITE;
+
+ @Option(shortName = "R2_TRIM", doc = "The number of bases to trim from the beginning of read 2.")
+ public int READ2_TRIM = 0;
+
+ @Option(shortName = "R2_MAX_BASES", doc = "The maximum number of bases to write from read 2 after trimming. " +
+ "If there are fewer than this many bases left after trimming, all will be written. If this " +
+ "value is null then all bases left after trimming will be written.", optional = true)
+ public Integer READ2_MAX_BASES_TO_WRITE;
+
+ @Option(doc = "If true, include non-primary alignments in the output. Support of non-primary alignments in SamToFastq " +
+ "is not comprehensive, so there may be exceptions if this is set to true and there are paired reads with non-primary alignments.")
+ public boolean INCLUDE_NON_PRIMARY_ALIGNMENTS = false;
+
+ private final Log log = Log.getInstance(SamToFastq.class);
+
+ public static void main(final String[] argv) {
+ System.exit(new SamToFastq().instanceMain(argv));
+ }
+
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+ final Map<String, SAMRecord> firstSeenMates = new HashMap<String, SAMRecord>();
+ final FastqWriterFactory factory = new FastqWriterFactory();
+ factory.setCreateMd5(CREATE_MD5_FILE);
+ final Map<SAMReadGroupRecord, FastqWriters> writers = generateWriters(reader.getFileHeader().getReadGroups(), factory);
+
+ final ProgressLogger progress = new ProgressLogger(log);
+ for (final SAMRecord currentRecord : reader) {
+ if (currentRecord.isSecondaryOrSupplementary() && !INCLUDE_NON_PRIMARY_ALIGNMENTS)
+ continue;
+
+ // Skip non-PF reads as necessary
+ if (currentRecord.getReadFailsVendorQualityCheckFlag() && !INCLUDE_NON_PF_READS)
+ continue;
+
+ final FastqWriters fq = writers.get(currentRecord.getReadGroup());
+ if (currentRecord.getReadPairedFlag()) {
+ final String currentReadName = currentRecord.getReadName();
+ final SAMRecord firstRecord = firstSeenMates.remove(currentReadName);
+ if (firstRecord == null) {
+ firstSeenMates.put(currentReadName, currentRecord);
+ } else {
+ assertPairedMates(firstRecord, currentRecord);
+
+ final SAMRecord read1 =
+ currentRecord.getFirstOfPairFlag() ? currentRecord : firstRecord;
+ final SAMRecord read2 =
+ currentRecord.getFirstOfPairFlag() ? firstRecord : currentRecord;
+ writeRecord(read1, 1, fq.getFirstOfPair(), READ1_TRIM, READ1_MAX_BASES_TO_WRITE);
+ final FastqWriter secondOfPairWriter = fq.getSecondOfPair();
+ if (secondOfPairWriter == null) {
+ throw new PicardException("Input contains paired reads but no SECOND_END_FASTQ specified.");
+ }
+ writeRecord(read2, 2, secondOfPairWriter, READ2_TRIM, READ2_MAX_BASES_TO_WRITE);
+ }
+ } else {
+ writeRecord(currentRecord, null, fq.getUnpaired(), READ1_TRIM, READ1_MAX_BASES_TO_WRITE);
+ }
+
+ progress.record(currentRecord);
+ }
+
+ CloserUtil.close(reader);
+
+ // Close all the fastq writers being careful to close each one only once!
+ for (final FastqWriters writerMapping : new HashSet<FastqWriters>(writers.values())) {
+ writerMapping.closeAll();
+ }
+
+ if (firstSeenMates.size() > 0) {
+ SAMUtils.processValidationError(new SAMValidationError(SAMValidationError.Type.MATE_NOT_FOUND,
+ "Found " + firstSeenMates.size() + " unpaired mates", null), VALIDATION_STRINGENCY);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Generates the writers for the given read groups or, if we are not emitting per-read-group, just returns the single set of writers.
+ */
+ private Map<SAMReadGroupRecord, FastqWriters> generateWriters(final List<SAMReadGroupRecord> samReadGroupRecords,
+ final FastqWriterFactory factory) {
+
+ final Map<SAMReadGroupRecord, FastqWriters> writerMap = new HashMap<SAMReadGroupRecord, FastqWriters>();
+
+ final FastqWriters fastqWriters;
+ if (!OUTPUT_PER_RG) {
+ IOUtil.assertFileIsWritable(FASTQ);
+ final FastqWriter firstOfPairWriter = factory.newWriter(FASTQ);
+
+ final FastqWriter secondOfPairWriter;
+ if (INTERLEAVE) {
+ secondOfPairWriter = firstOfPairWriter;
+ } else if (SECOND_END_FASTQ != null) {
+ IOUtil.assertFileIsWritable(SECOND_END_FASTQ);
+ secondOfPairWriter = factory.newWriter(SECOND_END_FASTQ);
+ } else {
+ secondOfPairWriter = null;
+ }
+
+ /** Prepare the writer that will accept unpaired reads. If we're emitting a single fastq - and assuming single-ended reads -
+ * then this is simply that one fastq writer. Otherwise, if we're doing paired-end, we emit to a third new writer, since
+ * the other two fastqs are accepting only paired end reads. */
+ final FastqWriter unpairedWriter = UNPAIRED_FASTQ == null ? firstOfPairWriter : factory.newWriter(UNPAIRED_FASTQ);
+ fastqWriters = new FastqWriters(firstOfPairWriter, secondOfPairWriter, unpairedWriter);
+
+ // For all read groups we may find in the bam, register this single set of writers for them.
+ writerMap.put(null, fastqWriters);
+ for (final SAMReadGroupRecord rg : samReadGroupRecords) {
+ writerMap.put(rg, fastqWriters);
+ }
+ } else {
+ // When we're creating a fastq-group per readgroup, by convention we do not emit a special fastq for unpaired reads.
+ for (final SAMReadGroupRecord rg : samReadGroupRecords) {
+ final FastqWriter firstOfPairWriter = factory.newWriter(makeReadGroupFile(rg, "_1"));
+ // Create this writer on-the-fly; if we find no second-of-pair reads, don't bother making a writer (or delegating,
+ // if we're interleaving).
+ final Lazy<FastqWriter> lazySecondOfPairWriter = new Lazy<FastqWriter>(new Lazy.LazyInitializer<FastqWriter>() {
+ @Override
+ public FastqWriter make() {
+ return INTERLEAVE ? firstOfPairWriter : factory.newWriter(makeReadGroupFile(rg, "_2"));
+ }
+ });
+ writerMap.put(rg, new FastqWriters(firstOfPairWriter, lazySecondOfPairWriter, firstOfPairWriter));
+ }
+ }
+ return writerMap;
+ }
+
+ private File makeReadGroupFile(final SAMReadGroupRecord readGroup, final String preExtSuffix) {
+ String fileName = null;
+ if (RG_TAG.equalsIgnoreCase("PU")){
+ fileName = readGroup.getPlatformUnit();
+ } else if (RG_TAG.equalsIgnoreCase("ID")){
+ fileName = readGroup.getReadGroupId();
+ }
+ if (fileName == null) {
+ throw new PicardException("The selected RG_TAG: "+RG_TAG+" is not present in the bam header.");
+ }
+ fileName = IOUtil.makeFileNameSafe(fileName);
+ if (preExtSuffix != null) fileName += preExtSuffix;
+ fileName += ".fastq";
+
+ final File result = (OUTPUT_DIR != null)
+ ? new File(OUTPUT_DIR, fileName)
+ : new File(fileName);
+ IOUtil.assertFileIsWritable(result);
+ return result;
+ }
+
+ void writeRecord(final SAMRecord read, final Integer mateNumber, final FastqWriter writer,
+ final int basesToTrim, final Integer maxBasesToWrite) {
+ final String seqHeader = mateNumber == null ? read.getReadName() : read.getReadName() + "/" + mateNumber;
+ String readString = read.getReadString();
+ String baseQualities = read.getBaseQualityString();
+
+ // If we're clipping, do the right thing to the bases or qualities
+ if (CLIPPING_ATTRIBUTE != null) {
+ final Integer clipPoint = (Integer) read.getAttribute(CLIPPING_ATTRIBUTE);
+ if (clipPoint != null) {
+ if (CLIPPING_ACTION.equalsIgnoreCase("X")) {
+ readString = clip(readString, clipPoint, null,
+ !read.getReadNegativeStrandFlag());
+ baseQualities = clip(baseQualities, clipPoint, null,
+ !read.getReadNegativeStrandFlag());
+
+ } else if (CLIPPING_ACTION.equalsIgnoreCase("N")) {
+ readString = clip(readString, clipPoint, 'N',
+ !read.getReadNegativeStrandFlag());
+ } else {
+ final char newQual = SAMUtils.phredToFastq(
+ new byte[]{(byte) Integer.parseInt(CLIPPING_ACTION)}).charAt(0);
+ baseQualities = clip(baseQualities, clipPoint, newQual,
+ !read.getReadNegativeStrandFlag());
+ }
+ }
+ }
+ if (RE_REVERSE && read.getReadNegativeStrandFlag()) {
+ readString = SequenceUtil.reverseComplement(readString);
+ baseQualities = StringUtil.reverseString(baseQualities);
+ }
+ if (basesToTrim > 0) {
+ readString = readString.substring(basesToTrim);
+ baseQualities = baseQualities.substring(basesToTrim);
+ }
+
+ if (maxBasesToWrite != null && maxBasesToWrite < readString.length()) {
+ readString = readString.substring(0, maxBasesToWrite);
+ baseQualities = baseQualities.substring(0, maxBasesToWrite);
+ }
+
+ writer.write(new FastqRecord(seqHeader, readString, "", baseQualities));
+
+ }
+
+ /**
+ * Utility method to handle the changes required to the base/quality strings by the clipping
+ * parameters.
+ *
+ * @param src The string to clip
+ * @param point The 1-based position of the first clipped base in the read
+ * @param replacement If non-null, the character to replace in the clipped positions
+ * in the string (a quality score or 'N'). If null, just trim src
+ * @param posStrand Whether the read is on the positive strand
+ * @return String The clipped read or qualities
+ */
+ private String clip(final String src, final int point, final Character replacement, final boolean posStrand) {
+ final int len = src.length();
+ String result = posStrand ? src.substring(0, point - 1) : src.substring(len - point + 1);
+ if (replacement != null) {
+ if (posStrand) {
+ for (int i = point; i <= len; i++) {
+ result += replacement;
+ }
+ } else {
+ for (int i = 0; i <= len - point; i++) {
+ result = replacement + result;
+ }
+ }
+ }
+ return result;
+ }
+
+ private void assertPairedMates(final SAMRecord record1, final SAMRecord record2) {
+ if (!(record1.getFirstOfPairFlag() && record2.getSecondOfPairFlag() ||
+ record2.getFirstOfPairFlag() && record1.getSecondOfPairFlag())) {
+ throw new PicardException("Illegal mate state: " + record1.getReadName());
+ }
+ }
+
+ /**
+ * Put any custom command-line validation in an override of this method.
+ * clp is initialized at this point and can be used to print usage and access argv.
+ * Any options set by command-line parser can be validated.
+ *
+ * @return null if command line is valid. If command line is invalid, returns an array of error
+ * messages to be written to the appropriate place.
+ */
+ protected String[] customCommandLineValidation() {
+ if (INTERLEAVE && SECOND_END_FASTQ != null) {
+ return new String[]{
+ "Cannot set INTERLEAVE to true and pass in a SECOND_END_FASTQ"
+ };
+ }
+
+ if (UNPAIRED_FASTQ != null && SECOND_END_FASTQ == null) {
+ return new String[]{
+ "UNPAIRED_FASTQ may only be set when also emitting read1 and read2 fastqs (so SECOND_END_FASTQ must also be set)."
+ };
+ }
+
+ if ((CLIPPING_ATTRIBUTE != null && CLIPPING_ACTION == null) ||
+ (CLIPPING_ATTRIBUTE == null && CLIPPING_ACTION != null)) {
+ return new String[]{
+ "Both or neither of CLIPPING_ATTRIBUTE and CLIPPING_ACTION should be set."};
+ }
+
+ if (CLIPPING_ACTION != null) {
+ if (CLIPPING_ACTION.equals("N") || CLIPPING_ACTION.equals("X")) {
+ // Do nothing, this is fine
+ } else {
+ try {
+ Integer.parseInt(CLIPPING_ACTION);
+ } catch (NumberFormatException nfe) {
+ return new String[]{"CLIPPING ACTION must be one of: N, X, or an integer"};
+ }
+ }
+ }
+
+ if ((OUTPUT_PER_RG && OUTPUT_DIR == null) || ((!OUTPUT_PER_RG) && OUTPUT_DIR != null)) {
+ return new String[]{
+ "If OUTPUT_PER_RG is true, then OUTPUT_DIR should be set. " +
+ "If "};
+ }
+
+ if (OUTPUT_PER_RG) {
+ if (RG_TAG == null) {
+ return new String[]{"If OUTPUT_PER_RG is true, then RG_TAG should be set."};
+ } else if (! (RG_TAG.equalsIgnoreCase("PU") || RG_TAG.equalsIgnoreCase("ID")) ){
+ return new String[]{"RG_TAG must be: PU or ID"};
+ }
+ }
+ return null;
+ }
+
+ /**
+ * A collection of {@link htsjdk.samtools.fastq.FastqWriter}s for particular types of reads.
+ * <p/>
+ * Allows for lazy construction of the second-of-pair writer, since when we are in the "output per read group mode", we only wish to
+ * generate a second-of-pair fastq if we encounter a second-of-pair read.
+ */
+ static class FastqWriters {
+ private final FastqWriter firstOfPair, unpaired;
+ private final Lazy<FastqWriter> secondOfPair;
+
+ /** Constructor if the consumer wishes for the second-of-pair writer to be built on-the-fly. */
+ private FastqWriters(final FastqWriter firstOfPair, final Lazy<FastqWriter> secondOfPair, final FastqWriter unpaired) {
+ this.firstOfPair = firstOfPair;
+ this.unpaired = unpaired;
+ this.secondOfPair = secondOfPair;
+ }
+
+ /** Simple constructor; all writers are pre-initialized.. */
+ private FastqWriters(final FastqWriter firstOfPair, final FastqWriter secondOfPair, final FastqWriter unpaired) {
+ this(firstOfPair, new Lazy<FastqWriter>(new Lazy.LazyInitializer<FastqWriter>() {
+ @Override
+ public FastqWriter make() {
+ return secondOfPair;
+ }
+ }), unpaired);
+ }
+
+ public FastqWriter getFirstOfPair() {
+ return firstOfPair;
+ }
+
+ public FastqWriter getSecondOfPair() {
+ return secondOfPair.get();
+ }
+
+ public FastqWriter getUnpaired() {
+ return unpaired;
+ }
+
+ public void closeAll() {
+ final Set<FastqWriter> fastqWriters = new HashSet<FastqWriter>();
+ fastqWriters.add(firstOfPair);
+ fastqWriters.add(unpaired);
+ // Make sure this is a no-op if the second writer was never fetched.
+ if (secondOfPair.isInitialized()) fastqWriters.add(secondOfPair.get());
+ for (final FastqWriter fastqWriter : fastqWriters) {
+ fastqWriter.close();
+ }
+ }
+ }
+}
diff --git a/src/java/picard/sam/SortSam.java b/src/java/picard/sam/SortSam.java
new file mode 100644
index 0000000..25c8745
--- /dev/null
+++ b/src/java/picard/sam/SortSam.java
@@ -0,0 +1,92 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+
+/**
+ * @author alecw at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Sorts the input SAM or BAM.\n" +
+ "Input and output formats are determined by file extension.",
+ usageShort = "Sorts a SAM or BAM file",
+ programGroup = SamOrBam.class
+)
+public class SortSam extends CommandLineProgram {
+
+ @Option(doc = "The BAM or SAM file to sort.", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(doc = "The sorted BAM or SAM output file. ", shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.SORT_ORDER_SHORT_NAME, doc = "Sort order of output file")
+ public SAMFileHeader.SortOrder SORT_ORDER;
+
+ private final Log log = Log.getInstance(SortSam.class);
+
+ public static void main(final String[] argv) {
+ new SortSam().instanceMainWithExit(argv);
+ }
+
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ final SamReader reader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(INPUT);
+ ;
+ reader.getFileHeader().setSortOrder(SORT_ORDER);
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(reader.getFileHeader(), false, OUTPUT);
+ writer.setProgressLogger(
+ new ProgressLogger(log, (int) 1e7, "Wrote", "records from a sorting collection"));
+
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e7, "Read");
+ for (final SAMRecord rec : reader) {
+ writer.addAlignment(rec);
+ progress.record(rec);
+ }
+
+ log.info("Finished reading inputs, merging and writing to output now.");
+
+ CloserUtil.close(reader);
+ writer.close();
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/SplitSamByLibrary.java b/src/java/picard/sam/SplitSamByLibrary.java
new file mode 100755
index 0000000..6de2f1c
--- /dev/null
+++ b/src/java/picard/sam/SplitSamByLibrary.java
@@ -0,0 +1,150 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Command-line program to split a SAM or BAM file into separate files based on
+ * library name.
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Takes a SAM or BAM file and separates all the reads " +
+ "into one SAM or BAM file per library name. Reads that do not have " +
+ "a read group specified or whose read group does not have a library name " +
+ "are written to a file called 'unknown.' The format (SAM or BAM) of the " +
+ "output files matches that of the input file. ",
+ usageShort = "Splits a SAM or BAM file into individual files by library",
+ programGroup = SamOrBam.class
+)
+public class SplitSamByLibrary extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "The SAM or BAM file to be split. ")
+ public File INPUT;
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "The directory where the library SAM or BAM files should be written " +
+ "(defaults to the current directory). ", optional = true)
+ public File OUTPUT = new File(".").getAbsoluteFile();
+
+ private static final Log log = Log.getInstance(SplitSamByLibrary.class);
+
+ public static final int NO_LIBRARIES_SPECIFIED_IN_HEADER = 2;
+
+ public static void main(String[] args) {
+ System.exit(new SplitSamByLibrary().instanceMain(args));
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertDirectoryIsWritable(OUTPUT);
+
+ SamReader reader = SamReaderFactory.makeDefault().open(INPUT);
+ Map<String, SAMFileWriter> libraryToWriter = new HashMap<String, SAMFileWriter>();
+ Map<String, List<SAMReadGroupRecord>> libraryToRg = new HashMap<String, List<SAMReadGroupRecord>>();
+ SAMFileWriterFactory factory = new SAMFileWriterFactory();
+ String extension = reader.type().equals(SamReader.Type.BAM_TYPE) ? ".bam" : ".sam";
+
+ SAMFileHeader unknownHeader = reader.getFileHeader().clone();
+ unknownHeader.setReadGroups(new ArrayList<SAMReadGroupRecord>());
+ SAMFileWriter unknown = null;
+
+ for (SAMReadGroupRecord rg : reader.getFileHeader().getReadGroups()) {
+ String lib = rg.getLibrary();
+ if (lib != null) {
+ if (!libraryToRg.containsKey(lib)) {
+ libraryToRg.put(lib, new ArrayList<SAMReadGroupRecord>());
+ }
+ libraryToRg.get(lib).add(rg);
+ } else {
+ unknownHeader.addReadGroup(rg);
+ }
+ }
+
+ if (libraryToRg.size() == 0) {
+ log.error("No individual libraries are " +
+ "specified in the header of " + INPUT.getAbsolutePath());
+ return NO_LIBRARIES_SPECIFIED_IN_HEADER;
+ }
+
+ for (Map.Entry<String, List<SAMReadGroupRecord>> entry : libraryToRg.entrySet()) {
+ String lib = entry.getKey();
+ SAMFileHeader header = reader.getFileHeader().clone();
+ header.setReadGroups(entry.getValue());
+ libraryToWriter.put(lib, factory.makeSAMOrBAMWriter(header, true,
+ new File(OUTPUT, IOUtil.makeFileNameSafe(lib) + extension)));
+ }
+
+ for (Iterator<SAMRecord> it = reader.iterator(); it.hasNext(); ) {
+ SAMRecord sam = it.next();
+ SAMReadGroupRecord rg = sam.getReadGroup();
+ if (rg != null && rg.getLibrary() != null) {
+ libraryToWriter.get(rg.getLibrary()).addAlignment(sam);
+ } else {
+ if (unknown == null) {
+ unknown = factory.makeSAMOrBAMWriter(unknownHeader, true,
+ new File(OUTPUT, "unknown" + extension));
+ }
+ unknown.addAlignment(sam);
+ }
+ }
+
+ // Close the reader and writers
+ CloserUtil.close(reader);
+
+ if (unknown != null) {
+ unknown.close();
+ }
+
+ for (SAMFileWriter writer : libraryToWriter.values()) {
+ writer.close();
+ }
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/sam/ValidateSamFile.java b/src/java/picard/sam/ValidateSamFile.java
new file mode 100644
index 0000000..7b2b578
--- /dev/null
+++ b/src/java/picard/sam/ValidateSamFile.java
@@ -0,0 +1,173 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.SAMValidationError;
+import htsjdk.samtools.SamFileValidator;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.ValidationStringency;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.IOUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Command line program wrapping SamFileValidator.
+ *
+ * @author Doug Voet
+ */
+ at CommandLineProgramProperties(
+ usage = "Read a SAM or BAM file and report on its validity.",
+ usageShort = "Validates a SAM or BAM file",
+ programGroup = SamOrBam.class
+)
+public class ValidateSamFile extends CommandLineProgram {
+
+ public enum Mode {VERBOSE, SUMMARY}
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "Input SAM/BAM file")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "Output file or standard out if missing",
+ optional = true)
+ public File OUTPUT;
+
+ @Option(shortName = "M",
+ doc = "Mode of output")
+ public Mode MODE = Mode.VERBOSE;
+
+ @Option(doc = "List of validation error types to ignore.")
+ public List<SAMValidationError.Type> IGNORE = new ArrayList<SAMValidationError.Type>();
+
+ @Option(shortName = "MO",
+ doc = "The maximum number of lines output in verbose mode")
+ public Integer MAX_OUTPUT = 100;
+
+ @Option(doc = "If true, only report errors and ignore warnings.")
+ public boolean IGNORE_WARNINGS = false;
+
+ @Option(doc = "If true and input is a BAM file with an index file, also validates the index.")
+ public boolean VALIDATE_INDEX = true;
+
+ @Option(shortName = "BISULFITE",
+ doc = "Whether the SAM or BAM file consists of bisulfite sequenced reads. " +
+ "If so, C->T is not counted as an error in computing the value of the NM tag.")
+ public boolean IS_BISULFITE_SEQUENCED = false;
+
+ @Option(doc = "Relevant for a coordinate-sorted file containing read pairs only. " +
+ "Maximum number of file handles to keep open when spilling mate info to disk. " +
+ "Set this number a little lower than the per-process maximum number of file that may be open. " +
+ "This number can be found by executing the 'ulimit -n' command on a Unix system.")
+ public int MAX_OPEN_TEMP_FILES = 8000;
+
+ public static void main(final String[] args) {
+ System.exit(new ValidateSamFile().instanceMain(args));
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ ReferenceSequenceFile reference = null;
+ if (REFERENCE_SEQUENCE != null) {
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+ reference = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE_SEQUENCE);
+
+ }
+ final PrintWriter out;
+ if (OUTPUT != null) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+ try {
+ out = new PrintWriter(OUTPUT);
+ } catch (FileNotFoundException e) {
+ // we already asserted this so we should not get here
+ throw new PicardException("Unexpected exception", e);
+ }
+ } else {
+ out = new PrintWriter(System.out);
+ }
+
+ boolean result;
+
+ final SamReaderFactory factory = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE)
+ .validationStringency(ValidationStringency.SILENT)
+ .enable(SamReaderFactory.Option.VALIDATE_CRC_CHECKSUMS);
+ final SamReader samReader = factory.open(INPUT);
+
+ if (samReader.type() != SamReader.Type.BAM_TYPE) VALIDATE_INDEX = false;
+
+ factory.setOption(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES, VALIDATE_INDEX);
+ factory.reapplyOptions(samReader);
+
+ final SamFileValidator validator = new SamFileValidator(out, MAX_OPEN_TEMP_FILES);
+ validator.setErrorsToIgnore(IGNORE);
+
+ if (IGNORE_WARNINGS) {
+ validator.setIgnoreWarnings(IGNORE_WARNINGS);
+ }
+ if (MODE == Mode.SUMMARY) {
+ validator.setVerbose(false, 0);
+ } else {
+ validator.setVerbose(true, MAX_OUTPUT);
+ }
+ if (IS_BISULFITE_SEQUENCED) {
+ validator.setBisulfiteSequenced(IS_BISULFITE_SEQUENCED);
+ }
+ if (VALIDATE_INDEX) {
+ validator.setValidateIndex(VALIDATE_INDEX);
+ }
+ if (IOUtil.isRegularPath(INPUT)) {
+ // Do not check termination if reading from a stream
+ validator.validateBamFileTermination(INPUT);
+ }
+
+ result = false;
+
+ switch (MODE) {
+ case SUMMARY:
+ result = validator.validateSamFileSummary(samReader, reference);
+ break;
+ case VERBOSE:
+ result = validator.validateSamFileVerbose(samReader, reference);
+ break;
+ }
+ out.flush();
+
+ return result ? 0 : 1;
+ }
+}
diff --git a/src/java/picard/sam/ViewSam.java b/src/java/picard/sam/ViewSam.java
new file mode 100644
index 0000000..f34ebe8
--- /dev/null
+++ b/src/java/picard/sam/ViewSam.java
@@ -0,0 +1,163 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMTextHeaderCodec;
+import htsjdk.samtools.SamInputResource;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.AsciiWriter;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.SamRecordIntervalIteratorFactory;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.List;
+
+/**
+ * Very simple command that just reads a SAM or BAM file and writes out the header
+ * and each records to standard out. When an (optional) intervals file is specified,
+ * only records overlapping those intervals will be output.
+ *
+ * @author tfennell at broad.mit.edu
+ */
+ at CommandLineProgramProperties(
+ usage = "Prints a SAM or BAM file to the screen.",
+ usageShort = "Prints a SAM or BAM file to the screen",
+ programGroup = SamOrBam.class
+)
+public class ViewSam extends CommandLineProgram {
+ public static enum AlignmentStatus {Aligned, Unaligned, All}
+
+ public static enum PfStatus {PF, NonPF, All}
+
+ public final String USAGE = getStandardUsagePreamble() + "Prints a SAM or BAM file to the screen.";
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The SAM or BAM file or GA4GH url to view.")
+ public String INPUT;
+
+ @Option(doc = "Print out all reads, just the aligned reads or just the unaligned reads.")
+ public AlignmentStatus ALIGNMENT_STATUS = AlignmentStatus.All;
+
+ @Option(doc = "Print out all reads, just the PF reads or just the non-PF reads.")
+ public PfStatus PF_STATUS = PfStatus.All;
+
+ @Option(doc="Print the SAM header only.", optional = true)
+ public boolean HEADER_ONLY = false;
+
+ @Option(doc="Print the alignment records only.", optional = true)
+ public boolean RECORDS_ONLY = false;
+
+ @Option(doc = "An intervals file used to restrict what records are output.", optional = true)
+ public File INTERVAL_LIST;
+
+ public static void main(final String[] args) {
+ new ViewSam().instanceMain(args);
+ }
+
+ @Override
+ protected int doWork() {
+ return writeSamText(System.out);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ if (HEADER_ONLY && RECORDS_ONLY) {
+ return new String[]{"Cannot specify both HEADER_ONLY=true and RECORDS_ONLY=true."};
+ }
+ return super.customCommandLineValidation();
+ }
+
+
+ /**
+ * This is factored out of doWork only for unit testing.
+ */
+ int writeSamText(PrintStream printStream) {
+ try {
+ final CloseableIterator<SAMRecord> samRecordsIterator;
+ final SamReader samReader = SamReaderFactory.makeDefault()
+ .referenceSequence(REFERENCE_SEQUENCE)
+ .open(SamInputResource.of(INPUT));
+
+ // if we are only using the header or we aren't using intervals, then use the reader as the iterator.
+ // otherwise use the SamRecordIntervalIteratorFactory to make an interval-ed iterator
+ if (HEADER_ONLY || INTERVAL_LIST == null) {
+ samRecordsIterator = samReader.iterator();
+ } else {
+ IOUtil.assertFileIsReadable(INTERVAL_LIST);
+
+ final List<Interval> intervals = IntervalList.fromFile(INTERVAL_LIST).uniqued().getIntervals();
+ samRecordsIterator = new SamRecordIntervalIteratorFactory().makeSamRecordIntervalIterator(samReader, intervals, samReader.hasIndex());
+ }
+ final AsciiWriter writer = new AsciiWriter(printStream);
+ final SAMFileHeader header = samReader.getFileHeader();
+ if (!RECORDS_ONLY) {
+ if (header.getTextHeader() != null) {
+ writer.write(header.getTextHeader());
+ } else {
+ // Headers that are too large are not retained as text, so need to regenerate text
+ new SAMTextHeaderCodec().encode(writer, header, true);
+ }
+ }
+ if (!HEADER_ONLY) {
+ while (samRecordsIterator.hasNext()) {
+ final SAMRecord rec = samRecordsIterator.next();
+
+ if (printStream.checkError()) {
+ return 1;
+ }
+
+ if (this.ALIGNMENT_STATUS == AlignmentStatus.Aligned && rec.getReadUnmappedFlag()) continue;
+ if (this.ALIGNMENT_STATUS == AlignmentStatus.Unaligned && !rec.getReadUnmappedFlag()) continue;
+
+ if (this.PF_STATUS == PfStatus.PF && rec.getReadFailsVendorQualityCheckFlag()) continue;
+ if (this.PF_STATUS == PfStatus.NonPF && !rec.getReadFailsVendorQualityCheckFlag()) continue;
+ writer.write(rec.getSAMString());
+ }
+ }
+ writer.flush();
+ if (printStream.checkError()) {
+ return 1;
+ }
+ CloserUtil.close(writer);
+ CloserUtil.close(samRecordsIterator);
+ return 0;
+ } catch (IOException e) {
+ throw new PicardException("Exception writing SAM text", e);
+ }
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/EstimateLibraryComplexity.java b/src/java/picard/sam/markduplicates/EstimateLibraryComplexity.java
new file mode 100644
index 0000000..ac53b40
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/EstimateLibraryComplexity.java
@@ -0,0 +1,537 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.SortingCollection;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Metrics;
+import picard.sam.DuplicationMetrics;
+import picard.sam.markduplicates.util.AbstractOpticalDuplicateFinderCommandLineProgram;
+import picard.sam.markduplicates.util.OpticalDuplicateFinder;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.EOFException;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static java.lang.Math.pow;
+
+/**
+ * <p>Attempts to estimate library complexity from sequence alone. Does so by sorting all reads
+ * by the first N bases (5 by default) of each read and then comparing reads with the first
+ * N bases identical to each other for duplicates. Reads are considered to be duplicates if
+ * they match each other with no gaps and an overall mismatch rate less than or equal to
+ * MAX_DIFF_RATE (0.03 by default).</p>
+ * <p/>
+ * <p>Reads of poor quality are filtered out so as to provide a more accurate estimate. The filtering
+ * removes reads with any no-calls in the first N bases or with a mean base quality lower than
+ * MIN_MEAN_QUALITY across either the first or second read.</p>
+ * <p/>
+ * <p>The algorithm attempts to detect optical duplicates separately from PCR duplicates and excludes
+ * these in the calculation of library size. Also, since there is no alignment to screen out technical
+ * reads one further filter is applied on the data. After examining all reads a Histogram is built of
+ * [#reads in duplicate set -> #of duplicate sets]; all bins that contain exactly one duplicate set are
+ * then removed from the Histogram as outliers before library size is estimated.</p>
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Attempts to estimate library complexity from sequence of read pairs alone. Does so by sorting all reads " +
+ "by the first N bases (5 by default) of each read and then comparing reads with the first " +
+ "N bases identical to each other for duplicates. Reads are considered to be duplicates if " +
+ "they match each other with no gaps and an overall mismatch rate less than or equal to " +
+ "MAX_DIFF_RATE (0.03 by default).\n\n" +
+ "Reads of poor quality are filtered out so as to provide a more accurate estimate. The filtering " +
+ "removes reads with any no-calls in the first N bases or with a mean base quality lower than " +
+ "MIN_MEAN_QUALITY across either the first or second read.\n\n" +
+ "Unpaired reads are ignored in this computation.\n\n" +
+ "The algorithm attempts to detect optical duplicates separately from PCR duplicates and excludes " +
+ "these in the calculation of library size. Also, since there is no alignment to screen out technical " +
+ "reads one further filter is applied on the data. After examining all reads a Histogram is built of " +
+ "[#reads in duplicate set -> #of duplicate sets] all bins that contain exactly one duplicate set are " +
+ "then removed from the Histogram as outliers before library size is estimated.",
+ usageShort = "Estimates library complexity from the sequence of read pairs",
+ programGroup = Metrics.class
+)
+public class EstimateLibraryComplexity extends AbstractOpticalDuplicateFinderCommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "One or more files to combine and " +
+ "estimate library complexity from. Reads can be mapped or unmapped.")
+ public List<File> INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "Output file to writes per-library metrics to.")
+ public File OUTPUT;
+
+ @Option(doc = "The minimum number of bases at the starts of reads that must be identical for reads to " +
+ "be grouped together for duplicate detection. In effect total_reads / 4^max_id_bases reads will " +
+ "be compared at a time, so lower numbers will produce more accurate results but consume " +
+ "exponentially more memory and CPU.")
+ public int MIN_IDENTICAL_BASES = 5;
+
+ @Option(doc = "The maximum rate of differences between two reads to call them identical.")
+ public double MAX_DIFF_RATE = 0.03;
+
+ @Option(doc = "The minimum mean quality of the bases in a read pair for the read to be analyzed. Reads with " +
+ "lower average quality are filtered out and not considered in any calculations.")
+ public int MIN_MEAN_QUALITY = 20;
+
+ @Option(doc = "Do not process self-similar groups that are this many times over the mean expected group size. " +
+ "I.e. if the input contains 10m read pairs and MIN_IDENTICAL_BASES is set to 5, then the mean expected " +
+ "group size would be approximately 10 reads.")
+ public int MAX_GROUP_RATIO = 500;
+
+ private final Log log = Log.getInstance(EstimateLibraryComplexity.class);
+
+ /**
+ * Little class to hold the sequence of a pair of reads and tile location information.
+ */
+ static class PairedReadSequence implements OpticalDuplicateFinder.PhysicalLocation {
+ static int size_in_bytes = 2 + 1 + 4 + 1 + 300; // rough guess at memory footprint
+ short readGroup = -1;
+ short tile = -1;
+ short x = -1, y = -1;
+ boolean qualityOk = true;
+ byte[] read1;
+ byte[] read2;
+ short libraryId;
+
+ public short getReadGroup() { return this.readGroup; }
+
+ public void setReadGroup(final short readGroup) { this.readGroup = readGroup; }
+
+ public short getTile() { return this.tile; }
+
+ public void setTile(final short tile) { this.tile = tile; }
+
+ public short getX() { return this.x; }
+
+ public void setX(final short x) { this.x = x; }
+
+ public short getY() { return this.y; }
+
+ public void setY(final short y) { this.y = y; }
+
+ public short getLibraryId() { return this.libraryId; }
+
+ public void setLibraryId(final short libraryId) { this.libraryId = libraryId; }
+ }
+
+ /**
+ * Codec class for writing and read PairedReadSequence objects.
+ */
+ static class PairedReadCodec implements SortingCollection.Codec<PairedReadSequence> {
+ private DataOutputStream out;
+ private DataInputStream in;
+
+ public void setOutputStream(final OutputStream out) {
+ this.out = new DataOutputStream(out);
+ }
+
+ public void setInputStream(final InputStream in) {
+ this.in = new DataInputStream(in);
+ }
+
+ public void encode(final PairedReadSequence val) {
+ try {
+ this.out.writeShort(val.readGroup);
+ this.out.writeShort(val.tile);
+ this.out.writeShort(val.x);
+ this.out.writeShort(val.y);
+ this.out.writeInt(val.read1.length);
+ this.out.write(val.read1);
+ this.out.writeInt(val.read2.length);
+ this.out.write(val.read2);
+ } catch (IOException ioe) {
+ throw new PicardException("Error write out read pair.", ioe);
+ }
+ }
+
+ public PairedReadSequence decode() {
+ try {
+ final PairedReadSequence val = new PairedReadSequence();
+ try {
+ val.readGroup = this.in.readShort();
+ } catch (EOFException eof) {
+ return null;
+ }
+
+ val.tile = this.in.readShort();
+ val.x = this.in.readShort();
+ val.y = this.in.readShort();
+
+ int length = this.in.readInt();
+ val.read1 = new byte[length];
+ if (this.in.read(val.read1) != length) {
+ throw new PicardException("Could not read " + length + " bytes from temporary file.");
+ }
+
+ length = this.in.readInt();
+ val.read2 = new byte[length];
+ if (this.in.read(val.read2) != length) {
+ throw new PicardException("Could not read " + length + " bytes from temporary file.");
+ }
+
+ return val;
+ } catch (IOException ioe) {
+ throw new PicardException("Exception reading read pair.", ioe);
+ }
+ }
+
+ @Override
+ public SortingCollection.Codec<PairedReadSequence> clone() { return new PairedReadCodec(); }
+ }
+
+ /**
+ * Comparator that orders read pairs on the first N bases of both reads.
+ */
+ class PairedReadComparator implements Comparator<PairedReadSequence> {
+ final int BASES = EstimateLibraryComplexity.this.MIN_IDENTICAL_BASES;
+
+ public int compare(final PairedReadSequence lhs, final PairedReadSequence rhs) {
+ // First compare the first N bases of the first read
+ for (int i = 0; i < BASES; ++i) {
+ final int retval = lhs.read1[i] - rhs.read1[i];
+ if (retval != 0) return retval;
+ }
+
+ // Then compare the first N bases of the second read
+ for (int i = 0; i < BASES; ++i) {
+ final int retval = lhs.read2[i] - rhs.read2[i];
+ if (retval != 0) return retval;
+ }
+
+ return System.identityHashCode(lhs) - System.identityHashCode(rhs);
+ }
+ }
+
+ /** Stock main method. */
+ public static void main(final String[] args) {
+ new EstimateLibraryComplexity().instanceMainWithExit(args);
+ }
+
+ public EstimateLibraryComplexity() {
+ MAX_RECORDS_IN_RAM = (int) (Runtime.getRuntime().maxMemory() / PairedReadSequence.size_in_bytes) / 2;
+ }
+
+ /**
+ * Method that does most of the work. Reads through the input BAM file and extracts the
+ * read sequences of each read pair and sorts them via a SortingCollection. Then traverses
+ * the sorted reads and looks at small groups at a time to find duplicates.
+ */
+ @Override
+ protected int doWork() {
+ for (final File f : INPUT) IOUtil.assertFileIsReadable(f);
+
+ log.info("Will store " + MAX_RECORDS_IN_RAM + " read pairs in memory before sorting.");
+
+ final List<SAMReadGroupRecord> readGroups = new ArrayList<SAMReadGroupRecord>();
+ final int recordsRead = 0;
+ final SortingCollection<PairedReadSequence> sorter = SortingCollection.newInstance(PairedReadSequence.class,
+ new PairedReadCodec(),
+ new PairedReadComparator(),
+ MAX_RECORDS_IN_RAM,
+ TMP_DIR);
+
+ // Loop through the input files and pick out the read sequences etc.
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Read");
+ for (final File f : INPUT) {
+ final Map<String, PairedReadSequence> pendingByName = new HashMap<String, PairedReadSequence>();
+ final SamReader in = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(f);
+ readGroups.addAll(in.getFileHeader().getReadGroups());
+
+ for (final SAMRecord rec : in) {
+ if (!rec.getReadPairedFlag()) continue;
+ if (!rec.getFirstOfPairFlag() && !rec.getSecondOfPairFlag()) {
+ continue;
+ }
+
+ PairedReadSequence prs = pendingByName.remove(rec.getReadName());
+ if (prs == null) {
+ // Make a new paired read object and add RG and physical location information to it
+ prs = new PairedReadSequence();
+ if (opticalDuplicateFinder.addLocationInformation(rec.getReadName(), prs)) {
+ final SAMReadGroupRecord rg = rec.getReadGroup();
+ if (rg != null) prs.setReadGroup((short) readGroups.indexOf(rg));
+ }
+
+ pendingByName.put(rec.getReadName(), prs);
+ }
+
+ // Read passes quality check if both ends meet the mean quality criteria
+ final boolean passesQualityCheck = passesQualityCheck(rec.getReadBases(),
+ rec.getBaseQualities(),
+ MIN_IDENTICAL_BASES,
+ MIN_MEAN_QUALITY);
+ prs.qualityOk = prs.qualityOk && passesQualityCheck;
+
+ // Get the bases and restore them to their original orientation if necessary
+ final byte[] bases = rec.getReadBases();
+ if (rec.getReadNegativeStrandFlag()) SequenceUtil.reverseComplement(bases);
+
+ if (rec.getFirstOfPairFlag()) {
+ prs.read1 = bases;
+ } else {
+ prs.read2 = bases;
+ }
+
+ if (prs.read1 != null && prs.read2 != null && prs.qualityOk) {
+ sorter.add(prs);
+ }
+
+ progress.record(rec);
+ }
+ CloserUtil.close(in);
+ }
+
+ log.info("Finished reading - moving on to scanning for duplicates.");
+
+ // Now go through the sorted reads and attempt to find duplicates
+ final PeekableIterator<PairedReadSequence> iterator = new PeekableIterator<PairedReadSequence>(sorter.iterator());
+
+ final Map<String, Histogram<Integer>> duplicationHistosByLibrary = new HashMap<String, Histogram<Integer>>();
+ final Map<String, Histogram<Integer>> opticalHistosByLibrary = new HashMap<String, Histogram<Integer>>();
+
+ int groupsProcessed = 0;
+ long lastLogTime = System.currentTimeMillis();
+ final int meanGroupSize = Math.max(1, (recordsRead / 2) / (int) pow(4, MIN_IDENTICAL_BASES * 2));
+
+ while (iterator.hasNext()) {
+ // Get the next group and split it apart by library
+ final List<PairedReadSequence> group = getNextGroup(iterator);
+
+ if (group.size() > meanGroupSize * MAX_GROUP_RATIO) {
+ final PairedReadSequence prs = group.get(0);
+ log.warn("Omitting group with over " + MAX_GROUP_RATIO + " times the expected mean number of read pairs. " +
+ "Mean=" + meanGroupSize + ", Actual=" + group.size() + ". Prefixes: " +
+ StringUtil.bytesToString(prs.read1, 0, MIN_IDENTICAL_BASES) +
+ " / " +
+ StringUtil.bytesToString(prs.read1, 0, MIN_IDENTICAL_BASES));
+ } else {
+ final Map<String, List<PairedReadSequence>> sequencesByLibrary = splitByLibrary(group, readGroups);
+
+ // Now process the reads by library
+ for (final Map.Entry<String, List<PairedReadSequence>> entry : sequencesByLibrary.entrySet()) {
+ final String library = entry.getKey();
+ final List<PairedReadSequence> seqs = entry.getValue();
+
+ Histogram<Integer> duplicationHisto = duplicationHistosByLibrary.get(library);
+ Histogram<Integer> opticalHisto = opticalHistosByLibrary.get(library);
+ if (duplicationHisto == null) {
+ duplicationHisto = new Histogram<Integer>("duplication_group_count", library);
+ opticalHisto = new Histogram<Integer>("duplication_group_count", "optical_duplicates");
+ duplicationHistosByLibrary.put(library, duplicationHisto);
+ opticalHistosByLibrary.put(library, opticalHisto);
+ }
+
+ // Figure out if any reads within this group are duplicates of one another
+ for (int i = 0; i < seqs.size(); ++i) {
+ final PairedReadSequence lhs = seqs.get(i);
+ if (lhs == null) continue;
+ final List<PairedReadSequence> dupes = new ArrayList<PairedReadSequence>();
+
+ for (int j = i + 1; j < seqs.size(); ++j) {
+ final PairedReadSequence rhs = seqs.get(j);
+ if (rhs == null) continue;
+
+ if (matches(lhs, rhs, MAX_DIFF_RATE)) {
+ dupes.add(rhs);
+ seqs.set(j, null);
+ }
+ }
+
+ if (dupes.size() > 0) {
+ dupes.add(lhs);
+ final int duplicateCount = dupes.size();
+ duplicationHisto.increment(duplicateCount);
+
+ final boolean[] flags = opticalDuplicateFinder.findOpticalDuplicates(dupes);
+ for (final boolean b : flags) {
+ if (b) opticalHisto.increment(duplicateCount);
+ }
+ } else {
+ duplicationHisto.increment(1);
+ }
+ }
+ }
+
+ ++groupsProcessed;
+ if (lastLogTime < System.currentTimeMillis() - 60000) {
+ log.info("Processed " + groupsProcessed + " groups.");
+ lastLogTime = System.currentTimeMillis();
+ }
+ }
+ }
+
+ iterator.close();
+ sorter.cleanup();
+
+ final MetricsFile<DuplicationMetrics, Integer> file = getMetricsFile();
+ for (final String library : duplicationHistosByLibrary.keySet()) {
+ final Histogram<Integer> duplicationHisto = duplicationHistosByLibrary.get(library);
+ final Histogram<Integer> opticalHisto = opticalHistosByLibrary.get(library);
+ final DuplicationMetrics metrics = new DuplicationMetrics();
+ metrics.LIBRARY = library;
+
+ // Filter out any bins that have only a single entry in them and calcu
+ for (final Integer bin : duplicationHisto.keySet()) {
+ final double duplicateGroups = duplicationHisto.get(bin).getValue();
+ final double opticalDuplicates = opticalHisto.get(bin) == null ? 0 : opticalHisto.get(bin).getValue();
+
+ if (duplicateGroups > 1) {
+ metrics.READ_PAIRS_EXAMINED += (bin * duplicateGroups);
+ metrics.READ_PAIR_DUPLICATES += ((bin - 1) * duplicateGroups);
+ metrics.READ_PAIR_OPTICAL_DUPLICATES += opticalDuplicates;
+ }
+ }
+
+ metrics.calculateDerivedMetrics();
+ file.addMetric(metrics);
+ file.addHistogram(duplicationHisto);
+
+ }
+
+ file.write(OUTPUT);
+
+ return 0;
+ }
+
+ /**
+ * Checks to see if two reads pairs have sequence that are the same, give or take a few
+ * errors/diffs as dictated by the maxDiffRate.
+ */
+ private boolean matches(final PairedReadSequence lhs, final PairedReadSequence rhs, final double maxDiffRate) {
+ final int read1Length = Math.min(lhs.read1.length, rhs.read1.length);
+ final int read2Length = Math.min(lhs.read2.length, rhs.read2.length);
+ final int maxErrors = (int) Math.floor((read1Length + read2Length) * maxDiffRate);
+ int errors = 0;
+
+ // The loop can start from MIN_IDENTICAL_BASES because we've already confirmed that
+ // at least those first few bases are identical when sorting.
+ for (int i = MIN_IDENTICAL_BASES; i < read1Length; ++i) {
+ if (lhs.read1[i] != rhs.read1[i]) {
+ if (++errors > maxErrors) return false;
+ }
+ }
+
+ for (int i = MIN_IDENTICAL_BASES; i < read2Length; ++i) {
+ if (lhs.read2[i] != rhs.read2[i]) {
+ if (++errors > maxErrors) return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Pulls out of the iterator the next group of reads that can be compared to each other to
+ * identify duplicates.
+ */
+ List<PairedReadSequence> getNextGroup(final PeekableIterator<PairedReadSequence> iterator) {
+ final List<PairedReadSequence> group = new ArrayList<PairedReadSequence>();
+ final PairedReadSequence first = iterator.next();
+ group.add(first);
+
+ outer:
+ while (iterator.hasNext()) {
+ final PairedReadSequence next = iterator.peek();
+ for (int i = 0; i < MIN_IDENTICAL_BASES; ++i) {
+ if (first.read1[i] != next.read1[i] || first.read2[i] != next.read2[i]) break outer;
+ }
+
+ group.add(iterator.next());
+
+ }
+
+ return group;
+ }
+
+ /**
+ * Takes a list of PairedReadSequence objects and splits them into lists by library.
+ */
+ Map<String, List<PairedReadSequence>> splitByLibrary(final List<PairedReadSequence> input,
+ final List<SAMReadGroupRecord> rgs) {
+
+ final Map<String, List<PairedReadSequence>> out = new HashMap<String, List<PairedReadSequence>>();
+ for (final PairedReadSequence seq : input) {
+ String library = null;
+ if (seq.getReadGroup() != -1) {
+ library = rgs.get(seq.getReadGroup()).getLibrary();
+ if (library == null) library = "Unknown";
+ } else {
+ library = "Unknown";
+ }
+
+ List<PairedReadSequence> librarySeqs = out.get(library);
+ if (librarySeqs == null) {
+ librarySeqs = new ArrayList<PairedReadSequence>();
+ out.put(library, librarySeqs);
+ }
+ librarySeqs.add(seq);
+ }
+
+ return out;
+ }
+
+ /**
+ * Checks that the average quality over the entire read is >= min, and that the first N bases do
+ * not contain any no-calls.
+ */
+ boolean passesQualityCheck(final byte[] bases, final byte[] quals, final int seedLength, final int minQuality) {
+ if (bases.length < seedLength) return false;
+
+ for (int i = 0; i < seedLength; ++i) {
+ if (SequenceUtil.isNoCall(bases[i])) return false;
+ }
+
+ int total = 0;
+ for (final byte b : quals) total += b;
+ return total / quals.length >= minQuality;
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/MarkDuplicates.java b/src/java/picard/sam/markduplicates/MarkDuplicates.java
new file mode 100644
index 0000000..7e3def8
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/MarkDuplicates.java
@@ -0,0 +1,539 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.SamOrBam;
+import picard.sam.DuplicationMetrics;
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.*;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.SortingCollection;
+import htsjdk.samtools.util.SortingLongCollection;
+import picard.sam.markduplicates.util.AbstractMarkDuplicatesCommandLineProgram;
+import picard.sam.markduplicates.util.DiskBasedReadEndsForMarkDuplicatesMap;
+import picard.sam.markduplicates.util.LibraryIdGenerator;
+import picard.sam.markduplicates.util.ReadEnds;
+import picard.sam.markduplicates.util.ReadEndsForMarkDuplicates;
+import picard.sam.markduplicates.util.ReadEndsForMarkDuplicatesCodec;
+import picard.sam.markduplicates.util.ReadEndsForMarkDuplicatesMap;
+import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * A better duplication marking algorithm that handles all cases including clipped
+ * and gapped alignments.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Examines aligned records in the supplied SAM or BAM file to locate duplicate molecules. " +
+ "All records are then written to the output file with the duplicate records flagged.",
+ usageShort = "Examines aligned records in the supplied SAM or BAM file to locate duplicate molecules.",
+ programGroup = SamOrBam.class
+)
+public class MarkDuplicates extends AbstractMarkDuplicatesCommandLineProgram {
+ private final Log log = Log.getInstance(MarkDuplicates.class);
+
+ /**
+ * If more than this many sequences in SAM file, don't spill to disk because there will not
+ * be enough file handles.
+ */
+
+ @Option(shortName = "MAX_SEQS",
+ doc = "This option is obsolete. ReadEnds will always be spilled to disk.")
+ public int MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP = 50000;
+
+ @Option(shortName = "MAX_FILE_HANDLES",
+ doc = "Maximum number of file handles to keep open when spilling read ends to disk. " +
+ "Set this number a little lower than the per-process maximum number of file that may be open. " +
+ "This number can be found by executing the 'ulimit -n' command on a Unix system.")
+ public int MAX_FILE_HANDLES_FOR_READ_ENDS_MAP = 8000;
+
+ @Option(doc = "This number, plus the maximum RAM available to the JVM, determine the memory footprint used by " +
+ "some of the sorting collections. If you are running out of memory, try reducing this number.")
+ public double SORTING_COLLECTION_SIZE_RATIO = 0.25;
+
+ private SortingCollection<ReadEndsForMarkDuplicates> pairSort;
+ private SortingCollection<ReadEndsForMarkDuplicates> fragSort;
+ private SortingLongCollection duplicateIndexes;
+ private int numDuplicateIndices = 0;
+
+ protected LibraryIdGenerator libraryIdGenerator = null; // this is initialized in buildSortedReadEndLists
+
+ public MarkDuplicates() {
+ DUPLICATE_SCORING_STRATEGY = ScoringStrategy.SUM_OF_BASE_QUALITIES;
+ }
+
+ /** Stock main method. */
+ public static void main(final String[] args) {
+ new MarkDuplicates().instanceMainWithExit(args);
+ }
+
+ /**
+ * Main work method. Reads the BAM file once and collects sorted information about
+ * the 5' ends of both ends of each read (or just one end in the case of pairs).
+ * Then makes a pass through those determining duplicates before re-reading the
+ * input file and writing it out with duplication flags set correctly.
+ */
+ protected int doWork() {
+ IOUtil.assertInputsAreValid(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ IOUtil.assertFileIsWritable(METRICS_FILE);
+
+ reportMemoryStats("Start of doWork");
+ log.info("Reading input file and constructing read end information.");
+ buildSortedReadEndLists();
+ reportMemoryStats("After buildSortedReadEndLists");
+ generateDuplicateIndexes();
+ reportMemoryStats("After generateDuplicateIndexes");
+ log.info("Marking " + this.numDuplicateIndices + " records as duplicates.");
+
+ if (this.READ_NAME_REGEX == null) {
+ log.warn("Skipped optical duplicate cluster discovery; library size estimation may be inaccurate!");
+ } else {
+ log.info("Found " + (this.libraryIdGenerator.getNumberOfOpticalDuplicateClusters()) + " optical duplicate clusters.");
+ }
+
+ final SamHeaderAndIterator headerAndIterator = openInputs();
+ final SAMFileHeader header = headerAndIterator.header;
+
+ final SAMFileHeader outputHeader = header.clone();
+ outputHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
+ for (final String comment : COMMENT) outputHeader.addComment(comment);
+
+ // Key: previous PG ID on a SAM Record (or null). Value: New PG ID to replace it.
+ final Map<String, String> chainedPgIds = getChainedPgIds(outputHeader);
+
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outputHeader,
+ true,
+ OUTPUT);
+
+ // Now copy over the file while marking all the necessary indexes as duplicates
+ long recordInFileIndex = 0;
+ long nextDuplicateIndex = (this.duplicateIndexes.hasNext() ? this.duplicateIndexes.next() : -1);
+
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e7, "Written");
+ final CloseableIterator<SAMRecord> iterator = headerAndIterator.iterator;
+ while (iterator.hasNext()) {
+ final SAMRecord rec = iterator.next();
+ if (!rec.isSecondaryOrSupplementary()) {
+ final String library = libraryIdGenerator.getLibraryName(header, rec);
+ DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library);
+ if (metrics == null) {
+ metrics = new DuplicationMetrics();
+ metrics.LIBRARY = library;
+ libraryIdGenerator.addMetricsByLibrary(library, metrics);
+ }
+
+ // First bring the simple metrics up to date
+ if (rec.getReadUnmappedFlag()) {
+ ++metrics.UNMAPPED_READS;
+ } else if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) {
+ ++metrics.UNPAIRED_READS_EXAMINED;
+ } else {
+ ++metrics.READ_PAIRS_EXAMINED; // will need to be divided by 2 at the end
+ }
+
+
+ if (recordInFileIndex == nextDuplicateIndex) {
+ rec.setDuplicateReadFlag(true);
+
+ // Update the duplication metrics
+ if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) {
+ ++metrics.UNPAIRED_READ_DUPLICATES;
+ } else {
+ ++metrics.READ_PAIR_DUPLICATES;// will need to be divided by 2 at the end
+ }
+
+ // Now try and figure out the next duplicate index
+ if (this.duplicateIndexes.hasNext()) {
+ nextDuplicateIndex = this.duplicateIndexes.next();
+ } else {
+ // Only happens once we've marked all the duplicates
+ nextDuplicateIndex = -1;
+ }
+ } else {
+ rec.setDuplicateReadFlag(false);
+ }
+ }
+ recordInFileIndex++;
+
+ if (!this.REMOVE_DUPLICATES || !rec.getDuplicateReadFlag()) {
+ if (PROGRAM_RECORD_ID != null) {
+ rec.setAttribute(SAMTag.PG.name(), chainedPgIds.get(rec.getStringAttribute(SAMTag.PG.name())));
+ }
+ out.addAlignment(rec);
+ progress.record(rec);
+ }
+ }
+
+ // remember to close the inputs
+ iterator.close();
+
+ this.duplicateIndexes.cleanup();
+
+ reportMemoryStats("Before output close");
+ out.close();
+ reportMemoryStats("After output close");
+
+ // Write out the metrics
+ finalizeAndWriteMetrics(libraryIdGenerator);
+
+ return 0;
+ }
+
+ /**
+ * package-visible for testing
+ */
+ long numOpticalDuplicates() { return ((long) this.libraryIdGenerator.getOpticalDuplicatesByLibraryIdMap().getSumOfValues()); } // cast as long due to returning a double
+
+ /** Print out some quick JVM memory stats. */
+ private void reportMemoryStats(final String stage) {
+ System.gc();
+ final Runtime runtime = Runtime.getRuntime();
+ log.info(stage + " freeMemory: " + runtime.freeMemory() + "; totalMemory: " + runtime.totalMemory() +
+ "; maxMemory: " + runtime.maxMemory());
+ }
+
+ /**
+ * Goes through all the records in a file and generates a set of ReadEndsForMarkDuplicates objects that
+ * hold the necessary information (reference sequence, 5' read coordinate) to do
+ * duplication, caching to disk as necssary to sort them.
+ */
+ private void buildSortedReadEndLists() {
+ final int maxInMemory = (int) ((Runtime.getRuntime().maxMemory() * SORTING_COLLECTION_SIZE_RATIO) / ReadEndsForMarkDuplicates.SIZE_OF);
+ log.info("Will retain up to " + maxInMemory + " data points before spilling to disk.");
+
+ this.pairSort = SortingCollection.newInstance(ReadEndsForMarkDuplicates.class,
+ new ReadEndsForMarkDuplicatesCodec(),
+ new ReadEndsMDComparator(),
+ maxInMemory,
+ TMP_DIR);
+
+ this.fragSort = SortingCollection.newInstance(ReadEndsForMarkDuplicates.class,
+ new ReadEndsForMarkDuplicatesCodec(),
+ new ReadEndsMDComparator(),
+ maxInMemory,
+ TMP_DIR);
+
+ final SamHeaderAndIterator headerAndIterator = openInputs();
+ final SAMFileHeader header = headerAndIterator.header;
+ final ReadEndsForMarkDuplicatesMap tmp = new DiskBasedReadEndsForMarkDuplicatesMap(MAX_FILE_HANDLES_FOR_READ_ENDS_MAP);
+ long index = 0;
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Read");
+ final CloseableIterator<SAMRecord> iterator = headerAndIterator.iterator;
+
+ if (null == this.libraryIdGenerator) {
+ this.libraryIdGenerator = new LibraryIdGenerator(header);
+ }
+
+ while (iterator.hasNext()) {
+ final SAMRecord rec = iterator.next();
+
+ // This doesn't have anything to do with building sorted ReadEnd lists, but it can be done in the same pass
+ // over the input
+ if (PROGRAM_RECORD_ID != null) {
+ // Gather all PG IDs seen in merged input files in first pass. These are gathered for two reasons:
+ // - to know how many different PG records to create to represent this program invocation.
+ // - to know what PG IDs are already used to avoid collisions when creating new ones.
+ // Note that if there are one or more records that do not have a PG tag, then a null value
+ // will be stored in this set.
+ pgIdsSeen.add(rec.getStringAttribute(SAMTag.PG.name()));
+ }
+
+ if (rec.getReadUnmappedFlag()) {
+ if (rec.getReferenceIndex() == -1) {
+ // When we hit the unmapped reads with no coordinate, no reason to continue.
+ break;
+ }
+ // If this read is unmapped but sorted with the mapped reads, just skip it.
+ } else if (!rec.isSecondaryOrSupplementary()) {
+ final ReadEndsForMarkDuplicates fragmentEnd = buildReadEnds(header, index, rec);
+ this.fragSort.add(fragmentEnd);
+
+ if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) {
+ final String key = rec.getAttribute(ReservedTagConstants.READ_GROUP_ID) + ":" + rec.getReadName();
+ ReadEndsForMarkDuplicates pairedEnds = tmp.remove(rec.getReferenceIndex(), key);
+
+ // See if we've already seen the first end or not
+ if (pairedEnds == null) {
+ pairedEnds = buildReadEnds(header, index, rec);
+ tmp.put(pairedEnds.read2ReferenceIndex, key, pairedEnds);
+ } else {
+ final int sequence = fragmentEnd.read1ReferenceIndex;
+ final int coordinate = fragmentEnd.read1Coordinate;
+
+ // Set orientationForOpticalDuplicates, which always goes by the first then the second end for the strands. NB: must do this
+ // before updating the orientation later.
+ if (rec.getFirstOfPairFlag()) {
+ pairedEnds.orientationForOpticalDuplicates = ReadEnds.getOrientationByte(rec.getReadNegativeStrandFlag(), pairedEnds.orientation == ReadEnds.R);
+ } else {
+ pairedEnds.orientationForOpticalDuplicates = ReadEnds.getOrientationByte(pairedEnds.orientation == ReadEnds.R, rec.getReadNegativeStrandFlag());
+ }
+
+ // If the second read is actually later, just add the second read data, else flip the reads
+ if (sequence > pairedEnds.read1ReferenceIndex ||
+ (sequence == pairedEnds.read1ReferenceIndex && coordinate >= pairedEnds.read1Coordinate)) {
+ pairedEnds.read2ReferenceIndex = sequence;
+ pairedEnds.read2Coordinate = coordinate;
+ pairedEnds.read2IndexInFile = index;
+ pairedEnds.orientation = ReadEnds.getOrientationByte(pairedEnds.orientation == ReadEnds.R,
+ rec.getReadNegativeStrandFlag());
+ } else {
+ pairedEnds.read2ReferenceIndex = pairedEnds.read1ReferenceIndex;
+ pairedEnds.read2Coordinate = pairedEnds.read1Coordinate;
+ pairedEnds.read2IndexInFile = pairedEnds.read1IndexInFile;
+ pairedEnds.read1ReferenceIndex = sequence;
+ pairedEnds.read1Coordinate = coordinate;
+ pairedEnds.read1IndexInFile = index;
+ pairedEnds.orientation = ReadEnds.getOrientationByte(rec.getReadNegativeStrandFlag(),
+ pairedEnds.orientation == ReadEnds.R);
+ }
+
+ pairedEnds.score += DuplicateScoringStrategy.computeDuplicateScore(rec, this.DUPLICATE_SCORING_STRATEGY);
+ this.pairSort.add(pairedEnds);
+ }
+ }
+ }
+
+ // Print out some stats every 1m reads
+ ++index;
+ if (progress.record(rec)) {
+ log.info("Tracking " + tmp.size() + " as yet unmatched pairs. " + tmp.sizeInRam() + " records in RAM.");
+ }
+ }
+
+ log.info("Read " + index + " records. " + tmp.size() + " pairs never matched.");
+ iterator.close();
+
+ // Tell these collections to free up memory if possible.
+ this.pairSort.doneAdding();
+ this.fragSort.doneAdding();
+ }
+
+ /** Builds a read ends object that represents a single read. */
+ private ReadEndsForMarkDuplicates buildReadEnds(final SAMFileHeader header, final long index, final SAMRecord rec) {
+ final ReadEndsForMarkDuplicates ends = new ReadEndsForMarkDuplicates();
+ ends.read1ReferenceIndex = rec.getReferenceIndex();
+ ends.read1Coordinate = rec.getReadNegativeStrandFlag() ? rec.getUnclippedEnd() : rec.getUnclippedStart();
+ ends.orientation = rec.getReadNegativeStrandFlag() ? ReadEnds.R : ReadEnds.F;
+ ends.read1IndexInFile = index;
+ ends.score = DuplicateScoringStrategy.computeDuplicateScore(rec, this.DUPLICATE_SCORING_STRATEGY);
+
+ // Doing this lets the ends object know that it's part of a pair
+ if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) {
+ ends.read2ReferenceIndex = rec.getMateReferenceIndex();
+ }
+
+ // Fill in the library ID
+ ends.libraryId = libraryIdGenerator.getLibraryId(rec);
+
+ // Fill in the location information for optical duplicates
+ if (this.opticalDuplicateFinder.addLocationInformation(rec.getReadName(), ends)) {
+ // calculate the RG number (nth in list)
+ ends.readGroup = 0;
+ final String rg = (String) rec.getAttribute("RG");
+ final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
+
+ if (rg != null && readGroups != null) {
+ for (final SAMReadGroupRecord readGroup : readGroups) {
+ if (readGroup.getReadGroupId().equals(rg)) break;
+ else ends.readGroup++;
+ }
+ }
+ }
+
+ return ends;
+ }
+
+ /**
+ * Goes through the accumulated ReadEndsForMarkDuplicates objects and determines which of them are
+ * to be marked as duplicates.
+ *
+ * @return an array with an ordered list of indexes into the source file
+ */
+ private void generateDuplicateIndexes() {
+ // Keep this number from getting too large even if there is a huge heap.
+ final int maxInMemory = (int) Math.min((Runtime.getRuntime().maxMemory() * 0.25) / SortingLongCollection.SIZEOF,
+ (double) (Integer.MAX_VALUE - 5));
+ log.info("Will retain up to " + maxInMemory + " duplicate indices before spilling to disk.");
+ this.duplicateIndexes = new SortingLongCollection(maxInMemory, TMP_DIR.toArray(new File[TMP_DIR.size()]));
+
+ ReadEndsForMarkDuplicates firstOfNextChunk = null;
+ final List<ReadEndsForMarkDuplicates> nextChunk = new ArrayList<ReadEndsForMarkDuplicates>(200);
+
+ // First just do the pairs
+ log.info("Traversing read pair information and detecting duplicates.");
+ for (final ReadEndsForMarkDuplicates next : this.pairSort) {
+ if (firstOfNextChunk == null) {
+ firstOfNextChunk = next;
+ nextChunk.add(firstOfNextChunk);
+ } else if (areComparableForDuplicates(firstOfNextChunk, next, true)) {
+ nextChunk.add(next);
+ } else {
+ if (nextChunk.size() > 1) {
+ markDuplicatePairs(nextChunk);
+ }
+
+ nextChunk.clear();
+ nextChunk.add(next);
+ firstOfNextChunk = next;
+ }
+ }
+ if (nextChunk.size() > 1) markDuplicatePairs(nextChunk);
+ this.pairSort.cleanup();
+ this.pairSort = null;
+
+ // Now deal with the fragments
+ log.info("Traversing fragment information and detecting duplicates.");
+ boolean containsPairs = false;
+ boolean containsFrags = false;
+
+ for (final ReadEndsForMarkDuplicates next : this.fragSort) {
+ if (firstOfNextChunk != null && areComparableForDuplicates(firstOfNextChunk, next, false)) {
+ nextChunk.add(next);
+ containsPairs = containsPairs || next.isPaired();
+ containsFrags = containsFrags || !next.isPaired();
+ } else {
+ if (nextChunk.size() > 1 && containsFrags) {
+ markDuplicateFragments(nextChunk, containsPairs);
+ }
+
+ nextChunk.clear();
+ nextChunk.add(next);
+ firstOfNextChunk = next;
+ containsPairs = next.isPaired();
+ containsFrags = !next.isPaired();
+ }
+ }
+ markDuplicateFragments(nextChunk, containsPairs);
+ this.fragSort.cleanup();
+ this.fragSort = null;
+
+ log.info("Sorting list of duplicate records.");
+ this.duplicateIndexes.doneAddingStartIteration();
+ }
+
+ private boolean areComparableForDuplicates(final ReadEndsForMarkDuplicates lhs, final ReadEndsForMarkDuplicates rhs, final boolean compareRead2) {
+ boolean retval = lhs.libraryId == rhs.libraryId &&
+ lhs.read1ReferenceIndex == rhs.read1ReferenceIndex &&
+ lhs.read1Coordinate == rhs.read1Coordinate &&
+ lhs.orientation == rhs.orientation;
+
+ if (retval && compareRead2) {
+ retval = lhs.read2ReferenceIndex == rhs.read2ReferenceIndex &&
+ lhs.read2Coordinate == rhs.read2Coordinate;
+ }
+
+ return retval;
+ }
+
+ private void addIndexAsDuplicate(final long bamIndex) {
+ this.duplicateIndexes.add(bamIndex);
+ ++this.numDuplicateIndices;
+ }
+
+ /**
+ * Takes a list of ReadEndsForMarkDuplicates objects and removes from it all objects that should
+ * not be marked as duplicates. This assumes that the list contains objects representing pairs.
+ *
+ * @param list
+ */
+ private void markDuplicatePairs(final List<ReadEndsForMarkDuplicates> list) {
+ short maxScore = 0;
+ ReadEndsForMarkDuplicates best = null;
+
+ /** All read ends should have orientation FF, FR, RF, or RR **/
+ for (final ReadEndsForMarkDuplicates end : list) {
+ if (end.score > maxScore || best == null) {
+ maxScore = end.score;
+ best = end;
+ }
+ }
+
+ for (final ReadEndsForMarkDuplicates end : list) {
+ if (end != best) {
+ addIndexAsDuplicate(end.read1IndexInFile);
+ addIndexAsDuplicate(end.read2IndexInFile);
+ }
+ }
+
+ if (this.READ_NAME_REGEX != null) {
+ AbstractMarkDuplicatesCommandLineProgram.trackOpticalDuplicates(list, opticalDuplicateFinder, libraryIdGenerator);
+ }
+ }
+
+ /**
+ * Takes a list of ReadEndsForMarkDuplicates objects and removes from it all objects that should
+ * not be marked as duplicates. This will set the duplicate index for only list items are fragments.
+ *
+ * @param list
+ * @param containsPairs true if the list also contains objects containing pairs, false otherwise.
+ */
+ private void markDuplicateFragments(final List<ReadEndsForMarkDuplicates> list, final boolean containsPairs) {
+ if (containsPairs) {
+ for (final ReadEndsForMarkDuplicates end : list) {
+ if (!end.isPaired()) addIndexAsDuplicate(end.read1IndexInFile);
+ }
+ } else {
+ short maxScore = 0;
+ ReadEndsForMarkDuplicates best = null;
+ for (final ReadEndsForMarkDuplicates end : list) {
+ if (end.score > maxScore || best == null) {
+ maxScore = end.score;
+ best = end;
+ }
+ }
+
+ for (final ReadEndsForMarkDuplicates end : list) {
+ if (end != best) {
+ addIndexAsDuplicate(end.read1IndexInFile);
+ }
+ }
+ }
+ }
+
+ /** Comparator for ReadEndsForMarkDuplicates that orders by read1 position then pair orientation then read2 position. */
+ static class ReadEndsMDComparator implements Comparator<ReadEndsForMarkDuplicates> {
+ public int compare(final ReadEndsForMarkDuplicates lhs, final ReadEndsForMarkDuplicates rhs) {
+ int retval = lhs.libraryId - rhs.libraryId;
+ if (retval == 0) retval = lhs.read1ReferenceIndex - rhs.read1ReferenceIndex;
+ if (retval == 0) retval = lhs.read1Coordinate - rhs.read1Coordinate;
+ if (retval == 0) retval = lhs.orientation - rhs.orientation;
+ if (retval == 0) retval = lhs.read2ReferenceIndex - rhs.read2ReferenceIndex;
+ if (retval == 0) retval = lhs.read2Coordinate - rhs.read2Coordinate;
+ if (retval == 0) retval = (int) (lhs.read1IndexInFile - rhs.read1IndexInFile);
+ if (retval == 0) retval = (int) (lhs.read2IndexInFile - rhs.read2IndexInFile);
+ return retval;
+ }
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigar.java b/src/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigar.java
new file mode 100644
index 0000000..42fd436
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigar.java
@@ -0,0 +1,205 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import htsjdk.samtools.util.Histogram;
+import htsjdk.samtools.util.IterableAdapter;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.*;
+import picard.cmdline.programgroups.SamOrBam;
+import picard.sam.markduplicates.util.AbstractMarkDuplicatesCommandLineProgram;
+
+
+import java.util.*;
+
+/**
+ * An even better duplication marking algorithm that handles all cases including clipped
+ * and gapped alignments.
+ * <p/>
+ * This tool differs with MarkDuplicates as it may break ties differently. Furthermore,
+ * as it is a one-pass algorithm, it cannot know the program records contained in the file
+ * that should be chained in advance. Therefore it will only be able to examine the header
+ * to attempt to infer those program group records that have no associated previous program
+ * group record. If a read is encountered without a program record, or not one as previously
+ * defined, it will not be updated.
+ * <p/>
+ * This tool will also not work with alignments that have large gaps or skips, such as those
+ * from RNA-seq data. This is due to the need to buffer small genomic windows to ensure
+ * integrity of the duplicate marking, while large skips (ex. skipping introns) in the
+ * alignment records would force making that window very large, thus exhausting memory.
+ *
+ * @author Nils Homer
+ */
+ at CommandLineProgramProperties(
+ usage = "Examines aligned records in the supplied SAM or BAM file to locate duplicate molecules. " +
+ "All records are then written to the output file with the duplicate records flagged.",
+ usageShort = "Examines aligned records in the supplied SAM or BAM file to locate duplicate molecules.",
+ programGroup = SamOrBam.class
+)
+public class MarkDuplicatesWithMateCigar extends AbstractMarkDuplicatesCommandLineProgram {
+ private final Log log = Log.getInstance(MarkDuplicatesWithMateCigar.class);
+
+ @Option(doc = "The minimum distance to buffer records to account for clipping on the 5' end of the records." +
+ "Set this number to -1 to use twice the first read's read length (or 100, whichever is smaller).", optional = true)
+ public int MINIMUM_DISTANCE = -1;
+
+ @Option(doc = "Skip record pairs with no mate cigar and include them in the output.")
+ boolean SKIP_PAIRS_WITH_NO_MATE_CIGAR = true;
+
+ @Option(doc = "The block size for use in the coordinate-sorted record buffer.", optional = true)
+ public int BLOCK_SIZE = 100000;
+
+ /** Warnings that will only be emitted once */
+ private boolean warnedNullProgramRecords = false;
+ private boolean warnedMissingProgramRecords = false;
+
+ /** Stock main method. */
+ public static void main(final String[] args) {
+ new MarkDuplicatesWithMateCigar().instanceMainWithExit(args);
+ }
+
+ /**
+ * Main work method.
+ */
+ protected int doWork() {
+ IOUtil.assertInputsAreValid(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ IOUtil.assertFileIsWritable(METRICS_FILE);
+
+ // Open the inputs
+ final SamHeaderAndIterator headerAndIterator = openInputs();
+ final SAMFileHeader header = headerAndIterator.header;
+
+ // Create the output header
+ final SAMFileHeader outputHeader = header.clone();
+ outputHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
+ for (final String comment : COMMENT) outputHeader.addComment(comment);
+
+ // Since this is one-pass, unlike MarkDuplicates, we cannot only chain together program
+ // group records we have seen, we have to assume all of them may be seen. We can perhaps
+ // filter out any program groups which have been referenced previously.
+ setPGIdsSeen(outputHeader);
+ // Key: previous PG ID on a SAM Record (or null). Value: New PG ID to replace it.
+ final Map<String, String> chainedPgIds = getChainedPgIds(outputHeader);
+
+ // Open the output
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outputHeader,
+ true,
+ OUTPUT);
+
+ // Create the mark duplicate iterator. The duplicate marking is handled by the iterator, conveniently.
+ final MarkDuplicatesWithMateCigarIterator iterator = new MarkDuplicatesWithMateCigarIterator(headerAndIterator.header,
+ headerAndIterator.iterator,
+ this.opticalDuplicateFinder,
+ this.DUPLICATE_SCORING_STRATEGY,
+ this.MINIMUM_DISTANCE,
+ this.REMOVE_DUPLICATES,
+ this.SKIP_PAIRS_WITH_NO_MATE_CIGAR,
+ this.MAX_RECORDS_IN_RAM,
+ this.BLOCK_SIZE,
+ this.TMP_DIR);
+
+ // progress logger!
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Read");
+
+ // Go through the records
+ for (final SAMRecord record : new IterableAdapter<SAMRecord>(iterator)) {
+ if (progress.record(record)) {
+ iterator.logMemoryStats(log);
+ }
+
+ // Update the program record if necessary
+ updateProgramRecord(record, chainedPgIds);
+
+ // Write the alignment
+ out.addAlignment(record);
+ }
+
+ // remember to close the inputs
+ iterator.close();
+
+ out.close();
+
+ // For convenience to reference
+ final Histogram<Short> opticalDupesByLibraryId = iterator.getOpticalDupesByLibraryId();
+
+ // Log info
+ log.info("Processed " + progress.getCount() + " records");
+ log.info("Found " + iterator.getNumRecordsWithNoMateCigar() + " records with no mate cigar optional tag.");
+ log.info("Marking " + iterator.getNumDuplicates() + " records as duplicates.");
+ log.info("Found " + ((long) opticalDupesByLibraryId.getSumOfValues()) + " optical duplicate clusters."); // cast as long due to returning a double
+
+ // Write out the metrics
+ finalizeAndWriteMetrics(iterator.getLibraryIdGenerator());
+
+ return 0;
+ }
+
+ /**
+ * Updates the program record if necessary.
+ */
+ private void updateProgramRecord(final SAMRecord record, final Map<String, String> chainedPgIds) {
+ if (PROGRAM_RECORD_ID != null) {
+ final String pgId = record.getStringAttribute(SAMTag.PG.name());
+ if (null == pgId) {
+ if (!warnedNullProgramRecords) {
+ warnedNullProgramRecords = true;
+ log.warn("Encountered a record with no program record, program group chaining will not occur for this read: " + record);
+ } // else already warned!
+ } else if (!chainedPgIds.containsKey(pgId)) {
+ if (!warnedMissingProgramRecords) {
+ warnedMissingProgramRecords = true;
+ log.warn("Encountered a record with an intermediate program record, program group chaining will not occur for this read: " + record);
+ } // else already warned!
+ } else {
+ record.setAttribute(SAMTag.PG.name(), chainedPgIds.get(pgId));
+ }
+ }
+ }
+
+ /**
+ * Generate the list of program records seen in the SAM file, approximating this with those in the header that were not
+ * themselves mentioned elsewhere.
+ */
+ private void setPGIdsSeen(final SAMFileHeader header) {
+ final Set<String> pgIdsSeenAsPrevious = new HashSet<String>();
+
+ // get all program record ids that are mentioned as previously seen
+ for (final SAMProgramRecord samProgramRecord : header.getProgramRecords()) {
+ final String previousProgramGroupID = samProgramRecord.getPreviousProgramGroupId();
+ if (null != previousProgramGroupID) pgIdsSeenAsPrevious.add(previousProgramGroupID);
+ }
+
+ // ignore those that were previously seen
+ for (final SAMProgramRecord samProgramRecord : header.getProgramRecords()) {
+ final String pgId = samProgramRecord.getId();
+ if (!pgIdsSeenAsPrevious.contains(pgId)) this.pgIdsSeen.add(pgId);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarIterator.java b/src/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarIterator.java
new file mode 100644
index 0000000..29860f6
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarIterator.java
@@ -0,0 +1,613 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.util.SamRecordWithOrdinal;
+import htsjdk.samtools.util.SamRecordTrackingBuffer;
+import picard.PicardException;
+import htsjdk.samtools.util.Histogram;
+import picard.sam.DuplicationMetrics;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import htsjdk.samtools.*;
+import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
+import htsjdk.samtools.util.CloseableIterator;
+import picard.sam.markduplicates.util.*;
+
+import java.io.File;
+import java.util.*;
+
+/**
+ * This will iterate through a coordinate sorted SAM file (iterator) and either mark or
+ * remove duplicates as appropriate. This class relies on the coordinate sort order as
+ * well as the mate cigar (MC) optional SAM tag.
+ */
+public class MarkDuplicatesWithMateCigarIterator implements SAMRecordIterator {
+
+ private SAMFileHeader header = null;
+
+ /** The iterator from which records are read. */
+ private PeekableIterator<SAMRecord> backingIterator = null;
+
+ /** The ordinal of the next record to be read from the backing iterator */
+ private int backingIteratorRecordIndex = 0;
+
+ private boolean removeDuplicates = false;
+
+ /** Should we skip pairs with no mate cigars or should be throw an error? */
+ private boolean skipPairsWithNoMateCigar = true;
+ private int numRecordsWithNoMateCigar = 0;
+
+ /** When we hit unmapped reads that are just before the EOF, we can greedily process them as they will not have coordinates */
+ private boolean foundUnmappedEOFReads = false;
+
+ /** We can flush our queues and buffers if we move to a different reference index */
+ private int referenceIndex = 0;
+
+ /**
+ * This buffer contains all the records read from input in the same order. Nonetheless, each record
+ * must be examined for duplicate marking, and so we may need to wait for this process to occur. This
+ * buffer stores the records in coordinate order, whether or not they can be emitted, and their associated
+ * duplicate marking flag. By definition, any record in the toMarkQueue will also be in the outputBuffer,
+ * so we can omit checking the size of the toMarkQueue in some cases.
+ */
+ private SamRecordTrackingBuffer outputBuffer = null;
+
+ /**
+ * The queue that stores the records that currently are not marked as duplicates. These need to be kept until
+ * they cannot proven not to be duplicates, with the latter records having greater coordinate. The queue is stored in 5' unclipped
+ * ordering, along with keeping the record with the best score, defined by the scoring strategies. If any record
+ * is added to this queue and can be identified as a duplicate, the outputBuffer is notified of its
+ * status and it can be emitted. Therefore, we limit the amount of records in this queue to only those that will NOT
+ * be duplicates.
+ */
+ private final MarkQueue toMarkQueue;
+
+ /** The next record to be returned by next * */
+ private SAMRecord nextRecord = null;
+
+ /** This gets various information about the library id for a given record */
+ private final LibraryIdGenerator libraryIdGenerator;
+
+ /** This is used to identify optical duplicates among sets of duplicates */
+ private OpticalDuplicateFinder opticalDuplicateFinder = null;
+
+ /** We use this to check that the input data was in coordinate sort order */
+ private final SAMRecordCoordinateComparator sortComparator = new SAMRecordCoordinateComparator();
+
+ boolean isClosed = false;
+
+ /**
+ * Initializes the mark duplicates iterator.
+ *
+ * @param header the SAM header
+ * @param iterator an iterator over the SAM records to consider
+ * @param opticalDuplicateFinder the algorithm for optical duplicate detection
+ * @param duplicateScoringStrategy the scoring strategy for choosing duplicates. This cannot be SUM_OF_BASE_QUALITIES.
+ * @param toMarkQueueMinimumDistance minimum distance for which to buffer
+ * @param removeDuplicates true to remove duplicates, false to mark duplicates
+ * @param skipPairsWithNoMateCigar true to not return mapped pairs with no mate cigar, false otherwise
+ * @param blockSize the size of the blocks in the underlying buffer/queue
+ * @param tmpDirs the temporary directories to use if we spill records to disk
+ * @throws PicardException if the inputs are not in coordinate sort order
+ */
+ public MarkDuplicatesWithMateCigarIterator(final SAMFileHeader header,
+ final CloseableIterator<SAMRecord> iterator,
+ final OpticalDuplicateFinder opticalDuplicateFinder,
+ final ScoringStrategy duplicateScoringStrategy,
+ final int toMarkQueueMinimumDistance,
+ final boolean removeDuplicates,
+ final boolean skipPairsWithNoMateCigar,
+ final int maxRecordsInRam,
+ final int blockSize,
+ final List<File> tmpDirs) throws PicardException {
+ if (header.getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
+ throw new PicardException(getClass().getName() + " expects the input to be in coordinate sort order.");
+ }
+
+ this.header = header;
+ backingIterator = new PeekableIterator<SAMRecord>(iterator);
+ outputBuffer = new SamRecordTrackingBuffer<SamRecordWithOrdinalAndSetDuplicateReadFlag>(maxRecordsInRam, blockSize, tmpDirs, header, SamRecordWithOrdinalAndSetDuplicateReadFlag.class);
+
+ this.removeDuplicates = removeDuplicates;
+ this.skipPairsWithNoMateCigar = skipPairsWithNoMateCigar;
+ this.opticalDuplicateFinder = opticalDuplicateFinder;
+ toMarkQueue = new MarkQueue(duplicateScoringStrategy);
+ libraryIdGenerator = new LibraryIdGenerator(header);
+
+ // Check for supported scoring strategies
+ if (duplicateScoringStrategy == ScoringStrategy.SUM_OF_BASE_QUALITIES)
+ throw new PicardException("SUM_OF_BASE_QUALITIES not supported as this may cause inconsistencies across ends in a pair. Please use a different scoring strategy.");
+
+ // set up metrics
+ for (final SAMReadGroupRecord readGroup : header.getReadGroups()) {
+ final String library = readGroup.getLibrary();
+ DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library);
+ if (metrics == null) {
+ metrics = new DuplicationMetrics();
+ metrics.LIBRARY = library;
+ libraryIdGenerator.addMetricsByLibrary(library, metrics);
+ }
+ }
+
+ // This sets the window size we need to keep to guarantee we can mark duplicates correctly
+ toMarkQueue.setToMarkQueueMinimumDistance(toMarkQueueMinimumDistance);
+
+ // get the first samRecordWithOrdinal
+ nextRecord = markDuplicatesAndGetTheNextAvailable(); // get one directly, or null
+ }
+
+ public void logMemoryStats(final Log log) {
+ System.gc();
+ final Runtime runtime = Runtime.getRuntime();
+ log.info("freeMemory: " + runtime.freeMemory() +
+ "; totalMemory: " + runtime.totalMemory() +
+ "; maxMemory: " + runtime.maxMemory() +
+ "; output buffer size: " + outputBuffer.size() +
+ "; duplicate queue size: " + toMarkQueue.size()
+ );
+ }
+
+ /**
+ * Establishes that records returned by this iterator are expected to
+ * be in the specified sort order. If this method has been called,
+ * then implementers must throw an IllegalStateException from tmpReadEnds()
+ * when a samRecordWithOrdinal is read that violates the sort order. This method
+ * may be called multiple times over the course of an iteration,
+ * changing the expected sort, if desired -- from the time it is called,
+ * it validates whatever sort is set, or stops validating if it
+ * is set to null or SAMFileHeader.SortOrder.unsorted. If this method
+ * is not called, then no validation of the iterated records is done.
+ *
+ * @param sortOrder The order in which records are expected to be returned
+ * @return This SAMRecordIterator
+ */
+ @Override
+ public SAMRecordIterator assertSorted(final SAMFileHeader.SortOrder sortOrder) {
+ if (sortOrder != SAMFileHeader.SortOrder.coordinate) {
+ throw new IllegalStateException("Cannot assort " + sortOrder + " when expecting coordinate sorted input");
+ }
+ return this;
+ }
+
+ @Override
+ public boolean hasNext() {
+ // fast succeed
+ if (null != nextRecord) return true;
+
+ // We would need to get another record, so check if we can either a record read from the input to the mark queue, or we have more that we should return.
+ // There should be at no time records in the mark queue that are not tracked in the output buffer.
+ return (backingIterator.hasNext() || !outputBuffer.isEmpty());
+ }
+
+ @Override
+ public SAMRecord next() throws PicardException {
+ final SAMRecord toReturn = nextRecord; // save for return
+
+
+ // This should always return an element
+ // NB: it should be the case that nextRecord != null
+ if (null == toReturn) {
+ throw new NoSuchElementException();
+ }
+
+ // Get the next record, if possible
+ // NB: it should be the case that (nextRecord != null), due to the (null == toReturn) above
+ if (hasNext()) {
+ nextRecord = markDuplicatesAndGetTheNextAvailable(); // get one more, if possible
+ } else {
+ nextRecord = null;
+ }
+
+ // Check for sorted order
+ if (null != nextRecord && 0 < sortComparator.fileOrderCompare(toReturn, nextRecord)) {
+ System.err.print("Previous record: " + toReturn.getSAMString());
+ System.err.print("Current record:" + nextRecord.getSAMString());
+ throw new PicardException("Records were not found coordinate sort order");
+ }
+
+ return toReturn;
+ }
+
+ /**
+ * Handles records that are paired with both ends mapped, but lacking a mate cigar. This returns true if we
+ * can ignore this record after calling this method (when reading input), false otherwise.
+ */
+ private boolean ignoreDueToMissingMateCigar(final SamRecordWithOrdinal samRecordWithOrdinal) {
+ final SAMRecord record = samRecordWithOrdinal.getRecord();
+ // ignore/except-on paired records with mapped mate and no mate cigar
+ if (record.getReadPairedFlag() &&
+ !record.getMateUnmappedFlag() && null == SAMUtils.getMateCigar(record)) { // paired with one end unmapped and no mate cigar
+
+ // NB: we are not truly examining these records. Do we want to count them?
+ if (!record.isSecondaryOrSupplementary()) {
+ // update metrics
+ final DuplicationMetrics metrics = getMetrics(record);
+ if (record.getReadUnmappedFlag()) {
+ ++metrics.UNMAPPED_READS;
+ } else if (!record.getReadPairedFlag() || record.getMateUnmappedFlag()) {
+ ++metrics.UNPAIRED_READS_EXAMINED;
+ } else {
+ ++metrics.READ_PAIRS_EXAMINED;
+ }
+ }
+
+ if (skipPairsWithNoMateCigar) { // pseudo-silently ignores them
+ // NB: need to addRecordToTheOutputBuffer/set-flag as chunking/flushing of the toMarkQueue may need to occur
+ addRecordToTheOutputBuffer(samRecordWithOrdinal); // now samRecordWithOrdinal will be stored in outputBuffer for return
+ backingIteratorRecordIndex++;
+ outputBuffer.setResultState(samRecordWithOrdinal, false); // indicate the present wrapped samRecordWithOrdinal is available for return
+ numRecordsWithNoMateCigar++;
+ backingIterator.next(); // remove it, since we called backingIterator.peek()
+ return true;
+ } else {
+ throw new PicardException("Read " + record.getReadName() + " was mapped and had a mapped mate, but no mate cigar (\"MC\") tag.");
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This handles unmapped records at the end of the file. If this is the first time we have found them, then we
+ * can empty the toMarkQueue and call markDuplicatesAndGetTheNextAvailable, otherwise we can just emit them. The
+ * duplication metrics will be updated.
+ */
+ private SAMRecord nextIfRecordIsUnmappedAtEOF(final SAMRecord record) {
+ // when we find unmapped reads with -1 as their reference index, there should be no mapped reads later in the file.
+ if (foundUnmappedEOFReads) { // previously found unmapped reads at the end of the file
+ final SAMRecord unmappedRecord = backingIterator.next(); // since we called backingIterator.peek()
+
+ if (!record.isSecondaryOrSupplementary()) {
+ // update metrics
+ final DuplicationMetrics metrics = getMetrics(record);
+ ++metrics.UNMAPPED_READS;
+ }
+
+ // We should have no more in the queue
+ if (!outputBuffer.isEmpty()) {
+ throw new PicardException("Encountered unmapped reads at the end of the file, but the alignment start buffer was not empty.");
+ }
+ return unmappedRecord; // unmapped end of file records can simply be emitted - no need to duplicate mark them
+ } else {
+ foundUnmappedEOFReads = true;
+ // move past all mapped reads
+ referenceIndex = header.getSequenceDictionary().getSequences().size();
+
+ // do the final round of duplicate marking
+ tryPollingTheToMarkQueue(true, null);
+
+ // NB: we do not call next here since we will recurse and perhaps hit the flush, or re-enter the if with unmapped EOF reads
+ return markDuplicatesAndGetTheNextAvailable(); // this should flush the buffer
+ }
+ }
+
+ /**
+ * Check that we are not incorrectly performing any duplicate marking, by having too few of the records. This
+ * can happen if the alignment start is increasing but 5' soft-clipping is increasing such that we miss reads with
+ * the same 5' unclipped alignment start. This is especially true for RNAseq.
+ */
+ private void checkForMinimumDistanceFailure(final ReadEndsForMateCigar current) {
+ if (!toMarkQueue.isEmpty()) {
+ final ReadEndsForMateCigar other = toMarkQueue.peek();
+ if (other.read1ReferenceIndex == current.read1ReferenceIndex && toMarkQueue.getToMarkQueueMinimumDistance() <= other.read1Coordinate - current.read1Coordinate) {
+ if (checkCigarForSkips(other.getRecord().getCigar())) {
+ throw new PicardException("Found a samRecordWithOrdinal with sufficiently large code length that we may have\n"
+ + " missed including it in an early duplicate marking iteration. Alignment contains skipped"
+ + " reference bases (N's). If this is an\n RNAseq aligned bam, please use MarkDuplicates instead,"
+ + " as this tool does not work well with spliced reads.\n Minimum distance set to "
+ + toMarkQueue.getToMarkQueueMinimumDistance() + " but " + (other.read1Coordinate - current.read1Coordinate - 1)
+ + " would be required.\n" + "Record was: " + other.getRecord().getSAMString());
+ } else {
+ System.err.print("record #1: " + other.getRecord().getSAMString());
+ System.err.print("record #2: " + current.getRecord().getSAMString());
+ throw new PicardException("Found a samRecordWithOrdinal with sufficiently large clipping that we may have\n"
+ + " missed including it in an early duplicate marking iteration. Please increase the"
+ + " minimum distance to at least " + (other.read1Coordinate - current.read1Coordinate - 1)
+ + "bp\nto ensure it is considered (was " + toMarkQueue.getToMarkQueueMinimumDistance() + ").\n"
+ + "Record was: " + other.getRecord().getSAMString());
+ }
+ }
+ }
+ }
+
+ /**
+ * This tries to get a record that has been evaluated for duplicate marking. It does this by first seeing if there
+ * are any records that have been through duplicate marking. If none are available, it will try to get more records
+ * from the input iterator until there are reads available that have been duplicate marked. If there are no more
+ * records available from the input iterator, it will duplicate mark the final chunk of records. Finally, if there
+ * are no more records, it will return null;
+ */
+ private SAMRecord markDuplicatesAndGetTheNextAvailable() {
+
+ // Check if there are any we can flush output buffer
+ { // NB: braces to limit the scope of 'record'
+ final SAMRecord record = flush();
+ if (null != record) return record;
+ }
+
+ // Check if there are any more records to read in
+ if (!backingIterator.hasNext()) { // no more records to read in
+
+ // Check if there are any more to mark
+ if (toMarkQueue.isEmpty()) {
+ // check if there are any that can be outputted
+ if (outputBuffer.isEmpty()) {
+ return null;
+ } // no need to flush; no records in the queue and buffer
+ } else {
+ // force marking duplicates on the remaining records
+ tryPollingTheToMarkQueue(true, null);
+ }
+
+ /** Since we have no more records to read in, and no more records that need duplicate marking run, we
+ * update our coordinate to past the end of the reference
+ */
+ referenceIndex = header.getSequenceDictionary().getSequences().size();
+
+ /** Now we recurse, so that we can flush from the outputBuffer until it is empty, then return null when
+ * all of the input, queue, and buffer are empty */
+ return markDuplicatesAndGetTheNextAvailable();
+ }
+
+ /** We need to retrieve more records from the input iterator and duplicate mark, until we can return one that
+ * has been through duplicate marking.
+ */
+ while (backingIterator.hasNext()) {
+
+ // NB: we could get rid of this if we made nextRecord into a list...
+ // NB: we do not actually remove this record from the backing iterator until much later, to help with processing unmapped reads at the EOF
+ SAMRecord record = backingIterator.peek(); // peek: used for unmapped reads
+ final SamRecordWithOrdinal samRecordWithOrdinal = new SamRecordWithOrdinalAndSetDuplicateReadFlag(record, backingIteratorRecordIndex);
+
+ ReadEndsForMateCigar readEnds = null;
+ boolean performedChunkAndMarkTheDuplicates = false;
+
+ // remove duplicate information
+ record.setDuplicateReadFlag(false);
+
+ /** Check for pairs that have both ends mapped and missing mate cigar. */
+ if (ignoreDueToMissingMateCigar(samRecordWithOrdinal)) {
+ continue;
+ }
+
+ // check for an unmapped read
+ if (record.getReadUnmappedFlag()) {
+ // unmapped reads at the end of the file!
+ if (-1 == record.getReferenceIndex()) {
+ // NB: this may call markDuplicatesAndGetTheNextAvailable if this is the first time a EOF unmapped record has been seen
+ return nextIfRecordIsUnmappedAtEOF(record);
+ } else if (!record.isSecondaryOrSupplementary()) {
+ // update metrics
+ final DuplicationMetrics metrics = getMetrics(record);
+ ++metrics.UNMAPPED_READS;
+ }
+ // we will check for unmapped reads later so as not to add them to mark queue
+ } else {
+ // If not already set, this sets the minimum distance to twice the read length, or 100, whichever is larger
+ if (-1 == toMarkQueue.getToMarkQueueMinimumDistance()) {
+ // use twice the first read's length
+ toMarkQueue.setToMarkQueueMinimumDistance(Math.max(2 * record.getReadBases().length, 100));
+ }
+
+ // build a read end for use in the toMarkQueue
+ readEnds = new ReadEndsForMateCigar(header, samRecordWithOrdinal, opticalDuplicateFinder, libraryIdGenerator.getLibraryId(samRecordWithOrdinal.getRecord()));
+
+ // check that the minimumDistance was not too small
+ checkForMinimumDistanceFailure(readEnds);
+
+ /**
+ * If we can do some duplicate marking, lets do it!
+ * IMPORTANT: this does not flush the to-mark-queue, so the minimum distance needs to be set for us to infer
+ * which records will never be supplemented (i.e. are non-duplicate).
+ */
+ performedChunkAndMarkTheDuplicates = tryPollingTheToMarkQueue(false, readEnds);
+ }
+
+ // We can now remove the record from the input
+ backingIterator.next();
+
+ // Add this to the outputBuffer so it can be tracked. It will not be available to emit until it has been through duplicate marking.
+ addRecordToTheOutputBuffer(samRecordWithOrdinal);
+ backingIteratorRecordIndex++; // Each record is has an index and is emitted in the same order. This helps that.
+
+ // We do not consider secondary, supplementary, or unmapped alignments for duplicate marking. We can thus mark that duplicate marking on them has been completed.
+ if (record.isSecondaryOrSupplementary() || record.getReadUnmappedFlag()) {
+ outputBuffer.setResultState(samRecordWithOrdinal, false);
+ } else {
+ // Bring the simple metrics up to date
+ final DuplicationMetrics metrics = getMetrics(record);
+ if (!record.getReadPairedFlag() || record.getMateUnmappedFlag()) {
+ ++metrics.UNPAIRED_READS_EXAMINED;
+ } else {
+ ++metrics.READ_PAIRS_EXAMINED; // will need to be divided by 2 at the end
+ }
+
+ // Add the record for duplicate marking, which may in fact cause it to be duplicate marked or stored for later
+ toMarkQueue.add(readEnds, outputBuffer, getMetrics(readEnds.getRecord()));
+ }
+
+ // Check if there are any we can flush, which happens if we just performed duplicate marking
+ if (performedChunkAndMarkTheDuplicates) {
+ record = flush();
+ if (null != record) return record;
+ }
+ }
+
+ // try again, as we may have records we can flush, or we want to see if we are at the EOF
+ return markDuplicatesAndGetTheNextAvailable();
+ }
+
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void close() {
+ // close the input and output
+ backingIterator.close();
+ outputBuffer.close();
+ isClosed = true;
+ }
+
+ /**
+ * Checks a Cigar for the presence of N operators. Reads with skipped bases may be spliced RNAseq reads
+ *
+ * @param cigar
+ */
+ private boolean checkCigarForSkips(final Cigar cigar) {
+ final List<CigarElement> elements = cigar.getCigarElements();
+ for (final CigarElement el : elements) {
+ if (el.getOperator() == CigarOperator.N) return true;
+ }
+ return false;
+ }
+
+ private void enforceClosed() {
+ if (!isClosed) throw new PicardException("Calling a method that assumes the iterator is closed");
+ }
+
+ /** Useful for statistics after the iterator has been exhausted and closed. */
+ public int getNumRecordsWithNoMateCigar() {
+ enforceClosed();
+ return numRecordsWithNoMateCigar;
+ }
+
+ public int getNumDuplicates() {
+ enforceClosed();
+ return toMarkQueue.getNumDuplicates();
+ }
+
+ public LibraryIdGenerator getLibraryIdGenerator() {
+ enforceClosed();
+ return libraryIdGenerator;
+ }
+
+ public Histogram<Short> getOpticalDupesByLibraryId() {
+ enforceClosed();
+ return libraryIdGenerator.getOpticalDuplicatesByLibraryIdMap();
+ }
+
+ /**
+ * Gets a SAMRecord if one is available after marking. This enforces that we return records in the original
+ * coordinate sort order in a stable fashion.
+ *
+ * @return record representing the head of the alignment-start sorted buffer, or null if the head record has not yet been duplicate marked
+ */
+ private SAMRecord flush() {
+ // Check that there is at least one record in the coordinate-sorted buffer, and that the head record has been through duplicate-marking
+ while (!outputBuffer.isEmpty() && outputBuffer.canEmit()) {
+ // the buffer contains wrapped SAMRecords, which we want to unwrap
+ final SAMRecord record = outputBuffer.next().getRecord();
+
+ // If this read is a duplicate, do we want to remove it (continue the loop) or return it for emission?
+ if (!removeDuplicates || !record.getDuplicateReadFlag()) {
+ return record;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Adds a samRecordWithOrdinal to the output buffer. This does not mean that it is ready to be emitted, since it may need to be
+ * duplicate marked.
+ *
+ * @param samRecordWithOrdinal the index of the record of which to track.
+ * @throws PicardException if the records are added out of order
+ */
+ private void addRecordToTheOutputBuffer(final SamRecordWithOrdinal samRecordWithOrdinal) throws PicardException {
+ final int recordReferenceIndex = samRecordWithOrdinal.getRecord().getReferenceIndex();
+ if (recordReferenceIndex < referenceIndex) {
+ throw new PicardException("Records out of order: " + recordReferenceIndex + " < " + referenceIndex);
+ } else if (referenceIndex < recordReferenceIndex) {
+ // new reference, so we need to mark duplicates on the current ones
+ // NB: we will not miss inter-chromosomal alignments since presumably one end will have been mapped to this chromosome and processed, and we do not need the other end to do so.
+ tryPollingTheToMarkQueue(true, null);
+ // update genomic coordinate to the next reference index
+ referenceIndex = recordReferenceIndex;
+ }
+
+ // add the samRecordWithOrdinal to the output buffer so that it can be tracked
+ outputBuffer.add(samRecordWithOrdinal);
+ }
+
+ /**
+ * Tries to get a record from the toMarkQueue that has been successfully through duplicate marking. Note, either flush is true or
+ * current must be non-null.
+ *
+ * @param flush true if we should empty the toMarkQueue fully.
+ * @param current the current end to ensure we consider all possible ends for a duplicate
+ * @return true if we did get at least one record, false otherwise
+ */
+ private boolean tryPollingTheToMarkQueue(final boolean flush, final ReadEndsForMateCigar current) {
+ boolean performedChunkAndMarkTheDuplicates = false;
+
+ if (!flush && null == current) throw new PicardException("Flush cannot be false and current be null");
+
+ if (toMarkQueue.isEmpty()) return false;
+
+ if (!toMarkQueue.isEmpty() && outputBuffer.isEmpty()) {
+ throw new PicardException("0 < toMarkQueue && outputBuffer.isEmpty()");
+ }
+
+ /**
+ * Try to poll the toMarkQueue. If we are flushing all the records from it, just do so until empty. Otherwise, we need to
+ * make sure we only poll those a certain distance away from current.
+ */
+ while (!toMarkQueue.isEmpty() &&
+ (flush || referenceIndex != current.read1ReferenceIndex ||
+ toMarkQueue.getToMarkQueueMinimumDistance() < current.read1Coordinate - toMarkQueue.peek().read1Coordinate)) {
+
+ // Poll will track that this samRecordWithOrdinal has been through duplicate marking. It is not marked as a duplicate :)
+ final ReadEndsForMateCigar next = toMarkQueue.poll(outputBuffer, header, opticalDuplicateFinder, libraryIdGenerator); // get the first one!
+ performedChunkAndMarkTheDuplicates = true;
+
+ // track optical duplicates using only those reads that are the first end...
+ if (toMarkQueue.shouldBeInLocations(next) && next.getRecord().getFirstOfPairFlag()) {
+ final Set<ReadEnds> locations = toMarkQueue.getLocations(next);
+
+ if (!locations.isEmpty()) {
+ AbstractMarkDuplicatesCommandLineProgram.trackOpticalDuplicates(new ArrayList<ReadEnds>(locations),
+ opticalDuplicateFinder, libraryIdGenerator);
+ }
+ }
+ // NB: we could try to greedily return a record if one is available here. Instead we continue processing the mark queue */
+ }
+ return performedChunkAndMarkTheDuplicates;
+ }
+
+ /** Get the duplication metrics for the library associated with end. */
+ private DuplicationMetrics getMetrics(final SAMRecord record) {
+ final String library = LibraryIdGenerator.getLibraryName(header, record);
+ DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library);
+ if (metrics == null) {
+ metrics = new DuplicationMetrics();
+ metrics.LIBRARY = library;
+ libraryIdGenerator.addMetricsByLibrary(library, metrics);
+ }
+ return metrics;
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java b/src/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java
new file mode 100644
index 0000000..b46fb18
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java
@@ -0,0 +1,287 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
+import htsjdk.samtools.MergingSamRecordIterator;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamFileHeaderMerger;
+import htsjdk.samtools.SamInputResource;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.Histogram;
+import picard.PicardException;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.sam.DuplicationMetrics;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Abstract class that holds parameters and methods common to classes that perform duplicate
+ * detection and/or marking within SAM/BAM files.
+ *
+ * @author Nils Homer
+ */
+public abstract class AbstractMarkDuplicatesCommandLineProgram extends AbstractOpticalDuplicateFinderCommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "One or more input SAM or BAM files to analyze. Must be coordinate sorted.")
+ public List<String> INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME,
+ doc = "The output file to write marked records to")
+ public File OUTPUT;
+
+ @Option(shortName = "M",
+ doc = "File to write duplication metrics to")
+ public File METRICS_FILE;
+
+ @Option(shortName = StandardOptionDefinitions.PROGRAM_RECORD_ID_SHORT_NAME,
+ doc = "The program record ID for the @PG record(s) created by this program. Set to null to disable " +
+ "PG record creation. This string may have a suffix appended to avoid collision with other " +
+ "program record IDs.",
+ optional = true)
+ public String PROGRAM_RECORD_ID = "MarkDuplicates";
+
+ @Option(shortName = "PG_VERSION",
+ doc = "Value of VN tag of PG record to be created. If not specified, the version will be detected automatically.",
+ optional = true)
+ public String PROGRAM_GROUP_VERSION;
+
+ @Option(shortName = "PG_COMMAND",
+ doc = "Value of CL tag of PG record to be created. If not supplied the command line will be detected automatically.",
+ optional = true)
+ public String PROGRAM_GROUP_COMMAND_LINE;
+
+ @Option(shortName = "PG_NAME",
+ doc = "Value of PN tag of PG record to be created.")
+ public String PROGRAM_GROUP_NAME = getClass().getSimpleName();
+
+ @Option(shortName = "CO",
+ doc = "Comment(s) to include in the output file's header.",
+ optional = true)
+ public List<String> COMMENT = new ArrayList<String>();
+
+ @Option(doc = "If true do not write duplicates to the output file instead of writing them with appropriate flags set.")
+ public boolean REMOVE_DUPLICATES = false;
+
+ @Option(shortName = StandardOptionDefinitions.ASSUME_SORTED_SHORT_NAME,
+ doc = "If true, assume that the input file is coordinate sorted even if the header says otherwise.")
+ public boolean ASSUME_SORTED = false;
+
+ @Option(shortName = "DS", doc = "The scoring strategy for choosing the non-duplicate among candidates.")
+ public ScoringStrategy DUPLICATE_SCORING_STRATEGY = ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH;
+
+ /** The program groups that have been seen during the course of examining the input records. */
+ protected final Set<String> pgIdsSeen = new HashSet<String>();
+
+ /**
+ * We have to re-chain the program groups based on this algorithm. This returns the map from existing program group ID
+ * to new program group ID.
+ */
+ protected Map<String, String> getChainedPgIds(final SAMFileHeader outputHeader) {
+ final Map<String, String> chainedPgIds;
+ // Generate new PG record(s)
+ if (PROGRAM_RECORD_ID != null) {
+ final SAMFileHeader.PgIdGenerator pgIdGenerator = new SAMFileHeader.PgIdGenerator(outputHeader);
+ if (PROGRAM_GROUP_VERSION == null) {
+ PROGRAM_GROUP_VERSION = this.getVersion();
+ }
+ if (PROGRAM_GROUP_COMMAND_LINE == null) {
+ PROGRAM_GROUP_COMMAND_LINE = this.getCommandLine();
+ }
+ chainedPgIds = new HashMap<String, String>();
+ for (final String existingId : this.pgIdsSeen) {
+ final String newPgId = pgIdGenerator.getNonCollidingId(PROGRAM_RECORD_ID);
+ chainedPgIds.put(existingId, newPgId);
+ final SAMProgramRecord programRecord = new SAMProgramRecord(newPgId);
+ programRecord.setProgramVersion(PROGRAM_GROUP_VERSION);
+ programRecord.setCommandLine(PROGRAM_GROUP_COMMAND_LINE);
+ programRecord.setProgramName(PROGRAM_GROUP_NAME);
+ programRecord.setPreviousProgramGroupId(existingId);
+ outputHeader.addProgramRecord(programRecord);
+ }
+ } else {
+ chainedPgIds = null;
+ }
+ return chainedPgIds;
+ }
+
+ /**
+ * Writes the metrics given by the libraryIdGenerator to the METRICS_FILE.
+ *
+ * @param libraryIdGenerator
+ */
+ protected void finalizeAndWriteMetrics(final LibraryIdGenerator libraryIdGenerator) {
+ final Map<String, DuplicationMetrics> metricsByLibrary = libraryIdGenerator.getMetricsByLibraryMap();
+ final Histogram<Short> opticalDuplicatesByLibraryId = libraryIdGenerator.getOpticalDuplicatesByLibraryIdMap();
+ final Map<String, Short> libraryIds = libraryIdGenerator.getLibraryIdsMap();
+
+ // Write out the metrics
+ final MetricsFile<DuplicationMetrics, Double> file = getMetricsFile();
+ for (final Map.Entry<String, DuplicationMetrics> entry : metricsByLibrary.entrySet()) {
+ final String libraryName = entry.getKey();
+ final DuplicationMetrics metrics = entry.getValue();
+
+ metrics.READ_PAIRS_EXAMINED = metrics.READ_PAIRS_EXAMINED / 2;
+ metrics.READ_PAIR_DUPLICATES = metrics.READ_PAIR_DUPLICATES / 2;
+
+ // Add the optical dupes to the metrics
+ final Short libraryId = libraryIds.get(libraryName);
+ if (libraryId != null) {
+ final Histogram<Short>.Bin bin = opticalDuplicatesByLibraryId.get(libraryId);
+ if (bin != null) {
+ metrics.READ_PAIR_OPTICAL_DUPLICATES = (long) bin.getValue();
+ }
+ }
+ metrics.calculateDerivedMetrics();
+ file.addMetric(metrics);
+ }
+
+ if (metricsByLibrary.size() == 1) {
+ file.setHistogram(metricsByLibrary.values().iterator().next().calculateRoiHistogram());
+ }
+
+ file.write(METRICS_FILE);
+ }
+
+ /** Little class used to package up a header and an iterable/iterator. */
+ public static final class SamHeaderAndIterator {
+ public final SAMFileHeader header;
+ public final CloseableIterator<SAMRecord> iterator;
+
+ public SamHeaderAndIterator(final SAMFileHeader header, final CloseableIterator<SAMRecord> iterator) {
+ this.header = header;
+ this.iterator = iterator;
+ }
+ }
+
+ /**
+ * Since this may read it's inputs more than once this method does all the opening
+ * and checking of the inputs.
+ */
+ protected SamHeaderAndIterator openInputs() {
+ final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>(INPUT.size());
+ final List<SamReader> readers = new ArrayList<SamReader>(INPUT.size());
+
+ for (final String input : INPUT) {
+ SamReader reader = SamReaderFactory.makeDefault()
+ .enable(SamReaderFactory.Option.EAGERLY_DECODE)
+ .open(SamInputResource.of(input));
+ final SAMFileHeader header = reader.getFileHeader();
+
+ if (!ASSUME_SORTED && header.getSortOrder() != SAMFileHeader.SortOrder.coordinate) {
+ throw new PicardException("Input file " + input + " is not coordinate sorted.");
+ }
+
+ headers.add(header);
+ readers.add(reader);
+ }
+
+ if (headers.size() == 1) {
+ return new SamHeaderAndIterator(headers.get(0), readers.get(0).iterator());
+ } else {
+ final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false);
+ final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, ASSUME_SORTED);
+ return new SamHeaderAndIterator(headerMerger.getMergedHeader(), iterator);
+ }
+ }
+
+ /**
+ * Looks through the set of reads and identifies how many of the duplicates are
+ * in fact optical duplicates, and stores the data in the instance level histogram.
+ */
+ public static void trackOpticalDuplicates(List<? extends ReadEnds> ends,
+ final OpticalDuplicateFinder opticalDuplicateFinder,
+ final LibraryIdGenerator libraryIdGenerator) {
+ boolean hasFR = false, hasRF = false;
+
+ // Check to see if we have a mixture of FR/RF
+ for (final ReadEnds end : ends) {
+ if (ReadEnds.FR == end.orientationForOpticalDuplicates) {
+ hasFR = true;
+ } else if (ReadEnds.RF == end.orientationForOpticalDuplicates) {
+ hasRF = true;
+ }
+ }
+
+ // Check if we need to partition since the orientations could have changed
+ if (hasFR && hasRF) { // need to track them independently
+ // Variables used for optical duplicate detection and tracking
+ final List<ReadEnds> trackOpticalDuplicatesF = new ArrayList<ReadEnds>();
+ final List<ReadEnds> trackOpticalDuplicatesR = new ArrayList<ReadEnds>();
+
+ // Split into two lists: first of pairs and second of pairs, since they must have orientation and same starting end
+ for (final ReadEnds end : ends) {
+ if (ReadEnds.FR == end.orientationForOpticalDuplicates) {
+ trackOpticalDuplicatesF.add(end);
+ } else if (ReadEnds.RF == end.orientationForOpticalDuplicates) {
+ trackOpticalDuplicatesR.add(end);
+ } else {
+ throw new PicardException("Found an unexpected orientation: " + end.orientation);
+ }
+ }
+
+ // track the duplicates
+ trackOpticalDuplicates(trackOpticalDuplicatesF, opticalDuplicateFinder, libraryIdGenerator.getOpticalDuplicatesByLibraryIdMap());
+ trackOpticalDuplicates(trackOpticalDuplicatesR, opticalDuplicateFinder, libraryIdGenerator.getOpticalDuplicatesByLibraryIdMap());
+ } else { // No need to partition
+ AbstractMarkDuplicatesCommandLineProgram.trackOpticalDuplicates(ends, opticalDuplicateFinder, libraryIdGenerator.getOpticalDuplicatesByLibraryIdMap());
+ }
+ }
+
+ /**
+ * Looks through the set of reads and identifies how many of the duplicates are
+ * in fact optical duplicates, and stores the data in the instance level histogram.
+ *
+ * We expect only reads with FR or RF orientations, not a mixture of both.
+ *
+ * In PCR duplicate detection, a duplicates can be a have FR and RF when fixing the orientation order to the first end of the mate. In
+ * optical duplicate detection, we do not consider them duplicates if one read as FR ann the other RF when we order orientation by the
+ * first mate sequenced (read #1 of the pair).
+ */
+ private static void trackOpticalDuplicates(final List<? extends OpticalDuplicateFinder.PhysicalLocation> list,
+ final OpticalDuplicateFinder opticalDuplicateFinder,
+ final Histogram<Short> opticalDuplicatesByLibraryId) {
+ final boolean[] opticalDuplicateFlags = opticalDuplicateFinder.findOpticalDuplicates(list);
+
+ int opticalDuplicates = 0;
+ for (final boolean b : opticalDuplicateFlags) if (b) ++opticalDuplicates;
+ if (opticalDuplicates > 0) {
+ opticalDuplicatesByLibraryId.increment(list.get(0).getLibraryId(), opticalDuplicates);
+ }
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/AbstractOpticalDuplicateFinderCommandLineProgram.java b/src/java/picard/sam/markduplicates/util/AbstractOpticalDuplicateFinderCommandLineProgram.java
new file mode 100644
index 0000000..c574af3
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/AbstractOpticalDuplicateFinderCommandLineProgram.java
@@ -0,0 +1,71 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import picard.cmdline.*;
+import htsjdk.samtools.util.Log;
+
+/**
+ * Abstract class that holds parameters and methods common to classes that optical duplicate detection. We put them here so that
+ * the explanation about how read names are parsed is in once place
+ *
+ * @author Tim Fennell
+ */
+public abstract class AbstractOpticalDuplicateFinderCommandLineProgram extends CommandLineProgram {
+ protected static Log LOG = Log.getInstance(AbstractOpticalDuplicateFinderCommandLineProgram.class);
+
+
+ @Option(doc = "Regular expression that can be used to parse read names in the incoming SAM file. Read names are " +
+ "parsed to extract three variables: tile/region, x coordinate and y coordinate. These values are used " +
+ "to estimate the rate of optical duplication in order to give a more accurate estimated library size. " +
+ "Set this option to null to disable optical duplicate detection. " +
+ "The regular expression should contain three capture groups for the three variables, in order. " +
+ "It must match the entire read name. " +
+ "Note that if the default regex is specified, a regex match is not actually done, but instead the read name " +
+ " is split on colon character. " +
+ "For 5 element names, the 3rd, 4th and 5th elements are assumed to be tile, x and y values. " +
+ "For 7 element names (CASAVA 1.8), the 5th, 6th, and 7th elements are assumed to be tile, x and y values.",
+ optional = true)
+ public String READ_NAME_REGEX = OpticalDuplicateFinder.DEFAULT_READ_NAME_REGEX;
+
+ @Option(doc = "The maximum offset between two duplicte clusters in order to consider them optical duplicates. This " +
+ "should usually be set to some fairly small number (e.g. 5-10 pixels) unless using later versions of the " +
+ "Illumina pipeline that multiply pixel values by 10, in which case 50-100 is more normal.")
+ public int OPTICAL_DUPLICATE_PIXEL_DISTANCE = OpticalDuplicateFinder.DEFAULT_OPTICAL_DUPLICATE_DISTANCE;
+
+ // The tool with which to find optical duplicates
+ protected OpticalDuplicateFinder opticalDuplicateFinder = null;
+
+ // Needed for testing
+ public void setupOpticalDuplicateFinder() {
+ this.opticalDuplicateFinder = new OpticalDuplicateFinder(READ_NAME_REGEX, OPTICAL_DUPLICATE_PIXEL_DISTANCE, LOG);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ setupOpticalDuplicateFinder();
+ return super.customCommandLineValidation();
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/DiskBasedReadEndsForMarkDuplicatesMap.java b/src/java/picard/sam/markduplicates/util/DiskBasedReadEndsForMarkDuplicatesMap.java
new file mode 100644
index 0000000..0e0fee5
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/DiskBasedReadEndsForMarkDuplicatesMap.java
@@ -0,0 +1,107 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam.markduplicates.util;
+
+import picard.PicardException;
+import htsjdk.samtools.CoordinateSortedPairInfoMap;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Disk-based implementation of ReadEndsForMarkDuplicatesMap. A subdirectory of the system tmpdir is created to store
+ * files, one for each reference sequence. The reference sequence that is currently being queried (i.e. the
+ * sequence for which remove() has been most recently called) is stored in RAM. ReadEnds for all other sequences
+ * are stored on disk.
+ * <p/>
+ * When put() is called for a sequence that is the current one in RAM, the ReadEnds object is merely put into the
+ * in-memory map. If put() is called for a sequence ID that is not the current RAM one, the ReadEnds object is
+ * appended to the file for that sequence, creating the file if necessary.
+ * <p/>
+ * When remove() is called for a sequence that is the current one in RAM, remove() is called on the in-memory map.
+ * If remove() is called for a sequence other than the current RAM sequence, then the current RAM sequence is written
+ * to disk, the new sequence is read from disk into RAM map, and the file for the new sequence is deleted.
+ * <p/>
+ * If things work properly, and reads are processed in genomic order, records will be written for mates that are in
+ * a later sequence. When the mate is reached in the input SAM file, the file that was written will be deleted.
+ * This should result in all temporary files being deleted by the time all the reads are processed. The temp
+ * directory is marked to be deleted on exit so everything should get cleaned up.
+ *
+ * @author alecw at broadinstitute.org
+ */
+public class DiskBasedReadEndsForMarkDuplicatesMap implements ReadEndsForMarkDuplicatesMap {
+ private final CoordinateSortedPairInfoMap<String, ReadEndsForMarkDuplicates> pairInfoMap;
+
+ public DiskBasedReadEndsForMarkDuplicatesMap(int maxOpenFiles) {
+ pairInfoMap = new CoordinateSortedPairInfoMap<String, ReadEndsForMarkDuplicates>(maxOpenFiles, new Codec());
+ }
+
+ public ReadEndsForMarkDuplicates remove(int mateSequenceIndex, String key) {
+ return pairInfoMap.remove(mateSequenceIndex, key);
+ }
+
+ public void put(int mateSequenceIndex, String key, ReadEndsForMarkDuplicates readEnds) {
+ pairInfoMap.put(mateSequenceIndex, key, readEnds);
+ }
+
+ public int size() {
+ return pairInfoMap.size();
+ }
+
+ public int sizeInRam() {
+ return pairInfoMap.sizeInRam();
+ }
+
+ private static class Codec implements CoordinateSortedPairInfoMap.Codec<String, ReadEndsForMarkDuplicates> {
+ private final ReadEndsForMarkDuplicatesCodec readEndsForMarkDuplicatesCodec = new ReadEndsForMarkDuplicatesCodec();
+
+ public void setInputStream(final InputStream is) {
+ readEndsForMarkDuplicatesCodec.setInputStream(is);
+ }
+
+ public void setOutputStream(final OutputStream os) {
+ readEndsForMarkDuplicatesCodec.setOutputStream(os);
+ }
+
+ public Map.Entry<String, ReadEndsForMarkDuplicates> decode() {
+ try {
+ final String key = readEndsForMarkDuplicatesCodec.getInputStream().readUTF();
+ final ReadEndsForMarkDuplicates record = readEndsForMarkDuplicatesCodec.decode();
+ return new AbstractMap.SimpleEntry<java.lang.String, ReadEndsForMarkDuplicates>(key, record);
+ } catch (IOException e) {
+ throw new PicardException("Error loading ReadEndsForMarkDuplicatesMap from disk", e);
+ }
+ }
+
+ public void encode(final String key, final ReadEndsForMarkDuplicates readEnds) {
+ try {
+ readEndsForMarkDuplicatesCodec.getOutputStream().writeUTF(key);
+ readEndsForMarkDuplicatesCodec.encode(readEnds);
+ } catch (IOException e) {
+ throw new PicardException("Error spilling ReadEndsForMarkDuplicatesMap to disk.", e);
+ }
+ }
+ }
+
+}
diff --git a/src/java/picard/sam/markduplicates/util/LibraryIdGenerator.java b/src/java/picard/sam/markduplicates/util/LibraryIdGenerator.java
new file mode 100644
index 0000000..518856c
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/LibraryIdGenerator.java
@@ -0,0 +1,113 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.Histogram;
+import picard.sam.DuplicationMetrics;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A class to generate library Ids and keep duplication metrics by library IDs.
+ *
+ * @author nhomer
+ */
+public class LibraryIdGenerator {
+
+ private final SAMFileHeader header;
+ private final Map<String, Short> libraryIds = new HashMap<String, Short>(); // from library string to library id
+ private short nextLibraryId = 1;
+ private final Map<String, DuplicationMetrics> metricsByLibrary = new HashMap<String, DuplicationMetrics>();
+ private final Histogram<Short> opticalDuplicatesByLibraryId = new Histogram<Short>();
+
+
+ public LibraryIdGenerator(final SAMFileHeader header) {
+ this.header = header;
+
+ for (final SAMReadGroupRecord readGroup : header.getReadGroups()) {
+ final String library = readGroup.getLibrary();
+ DuplicationMetrics metrics = metricsByLibrary.get(library);
+ if (metrics == null) {
+ metrics = new DuplicationMetrics();
+ metrics.LIBRARY = library;
+ metricsByLibrary.put(library, metrics);
+ }
+ }
+ }
+
+ public Map<String, Short> getLibraryIdsMap() { return this.libraryIds; }
+
+ public Map<String, DuplicationMetrics> getMetricsByLibraryMap() { return this.metricsByLibrary; }
+
+ public Histogram<Short> getOpticalDuplicatesByLibraryIdMap() { return this.opticalDuplicatesByLibraryId; }
+
+ /**
+ * Gets the library name from the header for the record. If the RG tag is not present on
+ * the record, or the library isn't denoted on the read group, a constant string is
+ * returned.
+ */
+ public static String getLibraryName(final SAMFileHeader header, final SAMRecord rec) {
+ final String readGroupId = (String) rec.getAttribute("RG");
+
+ if (readGroupId != null) {
+ final SAMReadGroupRecord rg = header.getReadGroup(readGroupId);
+ if (rg != null) {
+ final String libraryName = rg.getLibrary();
+ if (null != libraryName) return libraryName;
+ }
+ }
+
+ return "Unknown Library";
+ }
+
+ /** Get the library ID for the given SAM record. */
+ public short getLibraryId(final SAMRecord rec) {
+ final String library = getLibraryName(this.header, rec);
+ Short libraryId = this.libraryIds.get(library);
+
+ if (libraryId == null) {
+ libraryId = this.nextLibraryId++;
+ this.libraryIds.put(library, libraryId);
+ }
+
+ return libraryId;
+ }
+
+ public DuplicationMetrics getMetricsByLibrary(final String library) {
+ return this.metricsByLibrary.get(library);
+ }
+
+ public void addMetricsByLibrary(final String library, final DuplicationMetrics metrics) {
+ this.metricsByLibrary.put(library, metrics);
+ }
+
+ public long getNumberOfOpticalDuplicateClusters() {
+ return (long) this.opticalDuplicatesByLibraryId.getSumOfValues();
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/MarkQueue.java b/src/java/picard/sam/markduplicates/util/MarkQueue.java
new file mode 100644
index 0000000..228257f
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/MarkQueue.java
@@ -0,0 +1,371 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import htsjdk.samtools.DuplicateScoringStrategy;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.util.SamRecordTrackingBuffer;
+import picard.PicardException;
+import picard.sam.DuplicationMetrics;
+import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
+
+import java.util.Comparator;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * This is the mark queue.
+ * <p/>
+ * This stores a current nonDuplicateReadEndsSet of read ends that need to be duplicate marked. It only stores internally the "best" read end for a given
+ * possible duplicate location, preferring to perform duplicate marking as read ends come in, rather than wait for all "comparable"
+ * read ends to arrive. This reduces the memory footprint of this data structure.
+ */
+public class MarkQueue {
+
+ /**
+ * Comparator to order the mark queue nonDuplicateReadEndsSet. The nonDuplicateReadEndsSet of all the read ends that are compared to be the same should
+ * be used for duplicate marking.
+ */
+ private class MarkQueueComparator implements Comparator<ReadEndsForMateCigar> {
+ public int compare(final ReadEndsForMateCigar lhs, final ReadEndsForMateCigar rhs) {
+ int retval = lhs.libraryId - rhs.libraryId;
+ if (retval == 0) retval = lhs.read1ReferenceIndex - rhs.read1ReferenceIndex;
+ if (retval == 0) retval = lhs.read1Coordinate - rhs.read1Coordinate;
+ if (retval == 0) retval = rhs.orientation - lhs.orientation; // to get pairs first, based on the order defined in ReadEnds
+ if (retval == 0) retval = lhs.read2ReferenceIndex - rhs.read2ReferenceIndex;
+ if (retval == 0) retval = lhs.read2Coordinate - rhs.read2Coordinate;
+ return retval;
+ }
+ }
+
+ /**
+ * Comparator for ReadEndsForMateCigar that orders by read1 position then pair orientation then read2 position.
+ * This is the main comparator to choose the best representative read and end to store as the non-duplicate.
+ */
+ class ReadEndsMCComparator implements Comparator<ReadEndsForMateCigar> {
+ private final ScoringStrategy duplicateScoringStrategy;
+
+ public ReadEndsMCComparator(final ScoringStrategy duplicateScoringStrategy) {
+ this.duplicateScoringStrategy = duplicateScoringStrategy;
+ }
+
+ public int compare(final ReadEndsForMateCigar lhs, final ReadEndsForMateCigar rhs) {
+ int retval = lhs.libraryId - rhs.libraryId;
+ if (retval == 0) retval = lhs.read1ReferenceIndex - rhs.read1ReferenceIndex;
+ if (retval == 0) retval = lhs.read1Coordinate - rhs.read1Coordinate;
+ if (retval == 0) retval = rhs.orientation - lhs.orientation; // IMPORTANT: reverse the order to get pairs first
+ if (retval == 0 && lhs.isPaired() != rhs.isPaired()) return lhs.isPaired() ? -1 : 1; // unpaired goes first, based on the order defined in ReadEnds
+ if (retval == 0) retval = lhs.hasUnmapped - rhs.hasUnmapped;
+ if (retval == 0) retval = lhs.read2ReferenceIndex - rhs.read2ReferenceIndex;
+ if (retval == 0) retval = lhs.read2Coordinate - rhs.read2Coordinate;
+ // TODO: cache the scores?
+ if (retval == 0)
+ retval = DuplicateScoringStrategy.compare(lhs.getRecord(), rhs.getRecord(), this.duplicateScoringStrategy, true);
+ if (retval == 0) retval = lhs.getRecordReadName().compareTo(rhs.getRecordReadName());
+ /**
+ * If both reads are paired and both ends mapped, always prefer the first end over the second end. This is needed to
+ * properly choose the first end for optical duplicate identification when both ends are mapped to the same position etc.
+ */
+ if (retval == 0 && lhs.isPaired() && rhs.isPaired() && null != lhs.getSamRecordIndex()) {
+ if (lhs.getRecord().getFirstOfPairFlag()) retval = -1;
+ else retval = 1;
+ }
+
+ return retval;
+ }
+ }
+
+ /** The genomic distance needed to assure that we have considered all reads for duplicate marking. */
+ private int toMarkQueueMinimumDistance = -1;
+
+ /** The total number of duplicates detected */
+ private int numDuplicates = 0;
+
+ /** The nonDuplicateReadEndsSet of all read ends sorted by 5' start unclipped position. Some read ends in this nonDuplicateReadEndsSet may eventually be duplicates. */
+ private final TreeSet<ReadEndsForMateCigar> nonDuplicateReadEndsSet = new TreeSet<ReadEndsForMateCigar>(new MarkQueueComparator());
+
+ /**
+ * Reads in the main nonDuplicateReadEndsSet may occasionally have mates with the same chromosome, coordinate, and orientation, causing collisions
+ * We store the 'best' end of the mate pair in the main nonDuplicateReadEndsSet, and the other end in this nonDuplicateReadEndsSet. We only remove from this.otherEndOfNonDuplicateReadEndsSet when
+ * we remove something from this.nonDuplicateReadEndsSet.
+ */
+ private final TreeSet<ReadEndsForMateCigar> otherEndOfNonDuplicateReadEndsSet = new TreeSet<ReadEndsForMateCigar>(new MarkQueueComparator());
+
+ /**
+ * If we have two items that are the same with respect to being in the "nonDuplicateReadEndsSet", then we must choose one. The "one" will
+ * eventually be the end that is not marked as a duplicate in most cases (see poll() for the exceptions).
+ */
+ private final Comparator<ReadEndsForMateCigar> comparator;
+
+ /** temporary so we do not need to create many objects */
+ private ReadEndsForMateCigar tmpReadEnds = null;
+
+ public MarkQueue(final ScoringStrategy duplicateScoringStrategy) {
+ comparator = new ReadEndsMCComparator(duplicateScoringStrategy);
+ }
+
+ /** Returns the number of duplicates detected */
+ public int getNumDuplicates() { return this.numDuplicates; }
+
+ /** The number of records currently in this queue. * */
+ public int size() {
+ return this.nonDuplicateReadEndsSet.size() + this.otherEndOfNonDuplicateReadEndsSet.size();
+ }
+
+ public boolean isEmpty() {
+ return this.nonDuplicateReadEndsSet.isEmpty();
+ }
+
+ /** Sets the minimum genomic distance such that we can be assured that all duplicates have been considered. */
+ public void setToMarkQueueMinimumDistance(final int toMarkQueueMinimumDistance) {
+ this.toMarkQueueMinimumDistance = toMarkQueueMinimumDistance;
+ }
+
+ /** Returns the minimum genomic distance such that we can be assured that all duplicates have been considered. */
+ public int getToMarkQueueMinimumDistance() { return this.toMarkQueueMinimumDistance; }
+
+ /** Returns true if we should track this for optical duplicate detection, false otherwise */
+ public boolean shouldBeInLocations(final ReadEndsForMateCigar current) {
+ return (current.isPaired() && 0 == current.hasUnmapped);
+ }
+
+ /** Returns the nonDuplicateReadEndsSet of read ends that should be considered for tracking optical duplicates. */
+ public Set<ReadEnds> getLocations(final ReadEndsForMateCigar current) {
+ // NB: only needed for pairs!!!
+ if (!shouldBeInLocations(current)) throw new PicardException("Not implemented");
+ final Set<ReadEnds> locationSet = current.getReadEndSetForOpticalDuplicates();
+ if (null == locationSet) throw new PicardException("Locations was empty: unexpected error");
+ return locationSet;
+ }
+
+ /** Returns the first element in this queue */
+ public ReadEndsForMateCigar peek() {
+ return this.nonDuplicateReadEndsSet.first();
+ }
+
+ /** Updates the duplication metrics given the provided duplicate */
+ private void updateDuplicationMetrics(final ReadEndsForMateCigar duplicate, final DuplicationMetrics metrics) {
+ // Update the duplication metrics
+ if (!duplicate.getRecord().getReadPairedFlag() || duplicate.getRecord().getMateUnmappedFlag()) {
+ ++metrics.UNPAIRED_READ_DUPLICATES;
+ } else {
+ ++metrics.READ_PAIR_DUPLICATES;// will need to be divided by 2 at the end
+ }
+ this.numDuplicates++;
+ }
+
+ /**
+ * The poll method will return the read end that is *not* the duplicate of all comparable read ends that
+ * have been seen. All comparable read ends and the returned read end will have their seen duplicate flag nonDuplicateReadEndsSet. We use
+ * the minimum genomic distance to determine when all the comparable reads have been examined.
+ */
+ public ReadEndsForMateCigar poll(final SamRecordTrackingBuffer outputBuffer,
+ final SAMFileHeader header,
+ final OpticalDuplicateFinder opticalDuplicateFinder,
+ final LibraryIdGenerator libraryIdGenerator) {
+ /**
+ * NB: we must remove all fragments or unpaired reads if this is a mapped pair.
+ * NB: we must remove all fragments if this is an unpaired read.
+ */
+
+ final ReadEndsForMateCigar current = this.nonDuplicateReadEndsSet.pollFirst();
+
+ // If we are a paired read end, we need to make sure we remove unpaired (if we are not also unpaired), as
+ // well as fragments from the nonDuplicateReadEndsSet, as they should all be duplicates.
+ if (current.isPaired()) {
+
+ // Remove this record's comparable pair, if present.
+ if (this.otherEndOfNonDuplicateReadEndsSet.contains(current)) { // the pair of this end is not a duplicate, if found
+ final ReadEndsForMateCigar pair = this.otherEndOfNonDuplicateReadEndsSet.subSet(current, true, current, true).first();
+ outputBuffer.setResultState(pair.getSamRecordIndex(), false); // you are not a duplicate!
+ this.otherEndOfNonDuplicateReadEndsSet.remove(current);
+ // NB: do not need to update metrics since this record is not a duplicate
+ }
+
+ // NB: only care about read1ReferenceIndex, read1Coordinate, and orientation in the nonDuplicateReadEndsSet
+ if (null == this.tmpReadEnds) { // initialize
+ this.tmpReadEnds = new ReadEndsForMateCigar(header, current.getSamRecordIndex(), opticalDuplicateFinder, current.libraryId);
+ this.tmpReadEnds.read2ReferenceIndex = this.tmpReadEnds.read2Coordinate = -1;
+ this.tmpReadEnds.samRecordWithOrdinal = null; // nullify so we do not hold onto it forever
+ } else {
+ this.tmpReadEnds.read1ReferenceIndex = current.read1ReferenceIndex;
+ this.tmpReadEnds.read1Coordinate = current.read1Coordinate;
+ }
+
+ // We should search for one of F/R
+ if (current.orientation == ReadEnds.FF || current.orientation == ReadEnds.FR || current.orientation == ReadEnds.F) {
+ this.tmpReadEnds.orientation = ReadEnds.F;
+ } else {
+ this.tmpReadEnds.orientation = ReadEnds.R;
+ }
+
+ // remove from the nonDuplicateReadEndsSet fragments and unpaired, which only have two possible orientations
+ //this.tmpReadEnds.orientation = orientation;
+ if (this.nonDuplicateReadEndsSet.contains(this.tmpReadEnds)) { // found in the nonDuplicateReadEndsSet
+ // get the duplicate read end
+ final SortedSet<ReadEndsForMateCigar> sortedSet = this.nonDuplicateReadEndsSet.subSet(this.tmpReadEnds, true, this.tmpReadEnds, true);
+ if (1 != sortedSet.size()) throw new PicardException("SortedSet should have size one (has size " + sortedSet.size() + " )");
+ final ReadEndsForMateCigar duplicate = sortedSet.first();
+
+ /** mark as duplicate and nonDuplicateReadEndsSet that it has been through duplicate marking
+ * duplicate.getRecord().setDuplicateReadFlag(true); HANDLED BY THE METHOD CALL BELOW*/
+ outputBuffer.setResultState(duplicate.getSamRecordIndex(), true);
+
+ // remove from the nonDuplicateReadEndsSet
+ this.nonDuplicateReadEndsSet.remove(this.tmpReadEnds);
+
+ // update the metrics
+ updateDuplicationMetrics(duplicate, libraryIdGenerator.getMetricsByLibrary(libraryIdGenerator.getLibraryName(header, duplicate.getRecord())));
+ }
+ }
+
+ // This read end is now ok to be emitted. Track that it has been through duplicate marking.
+ outputBuffer.setResultState(current.getSamRecordIndex(), false);
+
+ return current;
+ }
+
+ /**
+ * Add a record to the mark queue.
+ */
+ public void add(final ReadEndsForMateCigar other,
+ final SamRecordTrackingBuffer outputBuffer,
+ final DuplicationMetrics metrics) {
+ /**
+ * OK this is the most complicated function in this class. Please pay attention.
+ */
+ PhysicalLocationForMateCigarSet locationSet = null;
+ boolean addToLocationSet = true; // only false if we have mates mapped to the same position
+ ReadEndsForMateCigar duplicate = null;
+
+ // 1. check the queue to see if there exists a comparable record at the location, if so compare and keep the best.
+ // 2. add physical location info if paired
+
+ /**
+ * Check if we have a comparable record in our nonDuplicateReadEndsSet.
+ */
+ if (this.nonDuplicateReadEndsSet.contains(other)) { // a comparable record to "other" record already in the nonDuplicateReadEndsSet
+ /**
+ * Get the subset of records that are comparable, which should be of size one
+ *
+ * Sometimes, the ends that are comparable are in fact from the same pair. In this case, we need to choose the best end
+ * from the pair, and track the sub-optimal end.
+ */
+ final SortedSet<ReadEndsForMateCigar> sortedSet = this.nonDuplicateReadEndsSet.subSet(other, true, other, true);
+ if (1 != sortedSet.size()) throw new PicardException("SortedSet should have size one (has size " + sortedSet.size() + " )");
+ final ReadEndsForMateCigar current = sortedSet.first();
+ final String otherName = SAMUtils.getCanonicalRecordName(other.getRecord());
+ final String currentName = SAMUtils.getCanonicalRecordName(current.getRecord());
+
+ final int comparison = this.comparator.compare(current, other);
+
+ /** Check if the ends to compare are in fact from the same pair */
+ if (currentName.equals(otherName)) {
+ /**
+ * "other" is paired-end mate of "current". We need to choose the best end to store in the main nonDuplicateReadEndsSet. We also have
+ * to maintain the pair nonDuplicateReadEndsSet, as well as update the location nonDuplicateReadEndsSet.
+ * */
+ if (0 < comparison) { // "other" is the best end. Swap for "current".
+ // Swap them in the nonDuplicateReadEndsSet
+ this.nonDuplicateReadEndsSet.remove(current);
+ this.nonDuplicateReadEndsSet.add(other);
+ this.otherEndOfNonDuplicateReadEndsSet.add(current); // add "current" to the pairset
+ // Swap "current" and "other" in the locations
+ if (shouldBeInLocations(other)) {
+ locationSet = current.removeLocationSet();
+ locationSet.replace(current, other); // swap "current" and "other"
+ other.setLocationSet(locationSet);
+ addToLocationSet = false;
+ }
+ } else { // other is less desirable. Store it in the pair nonDuplicateReadEndsSet.
+ this.otherEndOfNonDuplicateReadEndsSet.add(other); // add "other" to the pairset
+ if (shouldBeInLocations(current)) {
+ locationSet = current.getLocationSet();
+ addToLocationSet = false;
+ }
+ }
+ } else {
+ /**
+ * "other" is a not the pair of "current" at the same location and must be compared against "current".
+ */
+ if (0 < comparison) { // remove the current, and add the other in its place
+ if (shouldBeInLocations(current)) { // was this in the location nonDuplicateReadEndsSet?
+ // NB we could also just check if locationSet == null after remove?
+ locationSet = current.removeLocationSet();
+ } else { // make a new one
+ locationSet = new PhysicalLocationForMateCigarSet();
+ }
+ other.setLocationSet(locationSet); // update locations to use "other" as the identifier for the location nonDuplicateReadEndsSet
+ // remove current and add the other
+ this.nonDuplicateReadEndsSet.remove(current);
+ this.nonDuplicateReadEndsSet.add(other);
+
+ // update the pair nonDuplicateReadEndsSet in case current's pair is in that nonDuplicateReadEndsSet
+ if (this.otherEndOfNonDuplicateReadEndsSet.contains(current)) {
+ final ReadEndsForMateCigar pair = this.otherEndOfNonDuplicateReadEndsSet.subSet(current, true, current, true).first();
+ this.otherEndOfNonDuplicateReadEndsSet.remove(current);
+ outputBuffer.setResultState(pair.getSamRecordIndex(), true); // track that this samRecordWithOrdinal has been through duplicate marking
+ updateDuplicationMetrics(pair, metrics);
+ }
+
+ // current is now a duplicate
+ duplicate = current;
+ } else { // keep the current record, and the "other" is now a duplicate
+ if (shouldBeInLocations(current)) { // Get the location nonDuplicateReadEndsSet
+ locationSet = current.getLocationSet();
+ }
+ // NB: else is technically not needed, since if this was not paired and the other one was, we would enter here and add it later
+
+ // other is a duplicate :/
+ duplicate = other;
+ }
+ }
+ } else { // 'other' ReadEndMC is not in the main nonDuplicateReadEndsSet, thus the first record at this location. Store it for now.
+ if (shouldBeInLocations(other)) {
+ locationSet = new PhysicalLocationForMateCigarSet();
+ other.setLocationSet(locationSet);
+ }
+ this.nonDuplicateReadEndsSet.add(other);
+ }
+ //System.err.println("\tSET SIZE=" + this.nonDuplicateReadEndsSet.size());
+
+ // add to the physical locations for optical duplicate tracking
+ final SAMRecord record = other.getRecord();
+ if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag() && addToLocationSet) {
+ if (null == locationSet) throw new PicardException("location nonDuplicateReadEndsSet was null: " + record.getSAMString());
+ locationSet.add(other);
+ }
+
+ // if we have a duplicate, update it for duplicate tracking and update the metrics
+ if (null != duplicate) {
+ outputBuffer.setResultState(duplicate.getSamRecordIndex(), true);
+ // count the duplicate metrics
+ updateDuplicationMetrics(duplicate, metrics);
+ }
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/MemoryBasedReadEndsForMarkDuplicatesMap.java b/src/java/picard/sam/markduplicates/util/MemoryBasedReadEndsForMarkDuplicatesMap.java
new file mode 100644
index 0000000..745a2a8
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/MemoryBasedReadEndsForMarkDuplicatesMap.java
@@ -0,0 +1,72 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam.markduplicates.util;
+
+import java.util.List;
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Map from String to ReadEnds object. Memory-based implementation. Used for MarkDuplicates.
+ *
+ * @author alecw at broadinstitute.org
+ */
+class MemoryBasedReadEndsForMarkDuplicatesMap implements ReadEndsForMarkDuplicatesMap {
+
+ /**
+ * Index of this list is sequence index. Value is map from String {read group id:read name} to ReadEnds.
+ * When a ReadEnds is put into this container, it is stored according to the sequenceIndex of the mate
+ */
+ private List<Map<String, ReadEndsForMarkDuplicates>> mapPerSequence = new ArrayList<Map<String, ReadEndsForMarkDuplicates>>();
+
+ public ReadEndsForMarkDuplicates remove(int mateSequenceIndex, String key) {
+ if (mateSequenceIndex >= mapPerSequence.size()) {
+ return null;
+ }
+ return mapPerSequence.get(mateSequenceIndex).remove(key);
+ }
+
+ public void put(int mateSequenceIndex, String key, ReadEndsForMarkDuplicates readEnds) {
+ while (mateSequenceIndex >= mapPerSequence.size()) {
+ mapPerSequence.add(new HashMap<String, ReadEndsForMarkDuplicates>());
+ }
+ mapPerSequence.get(mateSequenceIndex).put(key, readEnds);
+ }
+
+ public int size() {
+ int total = 0;
+ for (Map<String, ReadEndsForMarkDuplicates> map : mapPerSequence) {
+ total += map.size();
+ }
+ return total;
+ }
+
+ /**
+ * @return number of elements stored in RAM. Always <= size()
+ */
+ public int sizeInRam() {
+ return size();
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/OpticalDuplicateFinder.java b/src/java/picard/sam/markduplicates/util/OpticalDuplicateFinder.java
new file mode 100644
index 0000000..8b3ff6b
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/OpticalDuplicateFinder.java
@@ -0,0 +1,203 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import htsjdk.samtools.util.Log;
+import picard.sam.util.ReadNameParsingUtils;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Contains methods for finding optical duplicates.
+ *
+ * @author Tim Fennell
+ * @author Nils Homer
+ */
+public class OpticalDuplicateFinder {
+
+ public static final String DEFAULT_READ_NAME_REGEX = "[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*".intern();
+
+ public static final int DEFAULT_OPTICAL_DUPLICATE_DISTANCE = 100;
+
+ public String readNameRegex;
+
+ public int opticalDuplicatePixelDistance;
+
+ private Pattern readNamePattern;
+
+ private boolean warnedAboutRegexNotMatching = false;
+
+ private final Log log;
+
+ public OpticalDuplicateFinder() {
+ this(DEFAULT_READ_NAME_REGEX, DEFAULT_OPTICAL_DUPLICATE_DISTANCE);
+ }
+
+ public OpticalDuplicateFinder(final int opticalDuplicatePixelDistance) {
+ this(DEFAULT_READ_NAME_REGEX, opticalDuplicatePixelDistance);
+ }
+
+ public OpticalDuplicateFinder(final String readNameRegex) {
+ this(readNameRegex, DEFAULT_OPTICAL_DUPLICATE_DISTANCE);
+ }
+
+ public OpticalDuplicateFinder(final String readNameRegex, final int opticalDuplicatePixelDistance) {
+ this(readNameRegex, opticalDuplicatePixelDistance, null);
+ }
+
+ public OpticalDuplicateFinder(final String readNameRegex, final int opticalDuplicatePixelDistance, final Log log) {
+ this.readNameRegex = readNameRegex;
+ this.opticalDuplicatePixelDistance = opticalDuplicatePixelDistance;
+ this.log = log;
+ }
+
+ /**
+ * Small interface that provides access to the physical location information about a cluster.
+ * All values should be defaulted to -1 if unavailable. ReadGroup and Tile should only allow
+ * non-zero positive integers, x and y coordinates may be negative.
+ */
+ public static interface PhysicalLocation {
+ public short getReadGroup();
+
+ public void setReadGroup(short rg);
+
+ public short getTile();
+
+ public void setTile(short tile);
+
+ public short getX();
+
+ public void setX(short x);
+
+ public short getY();
+
+ public void setY(short y);
+
+ public short getLibraryId();
+
+ public void setLibraryId(short libraryId);
+ }
+
+ private final int[] tmpLocationFields = new int[10]; // for optimization of addLocationInformation
+ /**
+ * Method used to extract tile/x/y from the read name and add it to the PhysicalLocation so that it
+ * can be used later to determine optical duplication
+ *
+ * @param readName the name of the read/cluster
+ * @param loc the object to add tile/x/y to
+ * @return true if the read name contained the information in parsable form, false otherwise
+ */
+ public boolean addLocationInformation(final String readName, final PhysicalLocation loc) {
+ // Optimized version if using the default read name regex (== used on purpose):
+ if (this.readNameRegex == this.DEFAULT_READ_NAME_REGEX) {
+ final int fields = ReadNameParsingUtils.getRapidDefaultReadNameRegexSplit(readName, ':', tmpLocationFields);
+ if (!(fields == 5 || fields == 7)) {
+ if (null != log && !this.warnedAboutRegexNotMatching) {
+ this.log.warn(String.format("Default READ_NAME_REGEX '%s' did not match read name '%s'. " +
+ "You may need to specify a READ_NAME_REGEX in order to correctly identify optical duplicates. " +
+ "Note that this message will not be emitted again even if other read names do not match the regex.",
+ this.readNameRegex, readName));
+ this.warnedAboutRegexNotMatching = true;
+ }
+ return false;
+ }
+ final int offset = fields == 7 ? 2 : 0;
+ loc.setTile((short) tmpLocationFields[offset + 2]);
+ loc.setX((short) tmpLocationFields[offset + 3]);
+ loc.setY((short) tmpLocationFields[offset + 4]);
+ return true;
+ } else if (this.readNameRegex == null) {
+ return false;
+ } else {
+ // Standard version that will use the regex
+ if (this.readNamePattern == null) this.readNamePattern = Pattern.compile(this.readNameRegex);
+
+ final Matcher m = this.readNamePattern.matcher(readName);
+ if (m.matches()) {
+ loc.setTile((short) Integer.parseInt(m.group(1)));
+ loc.setX((short) Integer.parseInt(m.group(2)));
+ loc.setY((short) Integer.parseInt(m.group(3)));
+ return true;
+ } else {
+ if (null != log && !this.warnedAboutRegexNotMatching) {
+ this.log.warn(String.format("READ_NAME_REGEX '%s' did not match read name '%s'. Your regex may not be correct. " +
+ "Note that this message will not be emitted again even if other read names do not match the regex.",
+ this.readNameRegex, readName));
+ warnedAboutRegexNotMatching = true;
+ }
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Finds which reads within the list of duplicates are likely to be optical duplicates of
+ * one another.
+ * <p/>
+ * Note: this method will perform a sort() of the list; if it is imperative that the list be
+ * unmodified a copy of the list should be passed to this method.
+ *
+ * @param list a list of reads that are determined to be duplicates of one another
+ * @return a boolean[] of the same length as the incoming list marking which reads are optical duplicates
+ */
+ public boolean[] findOpticalDuplicates(final List<? extends PhysicalLocation> list) {
+ final int length = list.size();
+ final boolean[] opticalDuplicateFlags = new boolean[length];
+
+ Collections.sort(list, new Comparator<PhysicalLocation>() {
+ public int compare(final PhysicalLocation lhs, final PhysicalLocation rhs) {
+ int retval = lhs.getReadGroup() - rhs.getReadGroup();
+ if (retval == 0) retval = lhs.getTile() - rhs.getTile();
+ if (retval == 0) retval = lhs.getX() - rhs.getX();
+ if (retval == 0) retval = lhs.getY() - rhs.getY();
+ return retval;
+ }
+ });
+
+ outer:
+ for (int i = 0; i < length; ++i) {
+ final PhysicalLocation lhs = list.get(i);
+ if (lhs.getTile() < 0) continue;
+
+ for (int j = i + 1; j < length; ++j) {
+ final PhysicalLocation rhs = list.get(j);
+
+ if (opticalDuplicateFlags[j]) continue;
+ if (lhs.getReadGroup() != rhs.getReadGroup()) continue outer;
+ if (lhs.getTile() != rhs.getTile()) continue outer;
+ if (rhs.getX() > lhs.getX() + this.opticalDuplicatePixelDistance) continue outer;
+
+ if (Math.abs(lhs.getY() - rhs.getY()) <= this.opticalDuplicatePixelDistance) {
+ opticalDuplicateFlags[j] = true;
+ }
+ }
+ }
+ return opticalDuplicateFlags;
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/PhysicalLocationForMateCigar.java b/src/java/picard/sam/markduplicates/util/PhysicalLocationForMateCigar.java
new file mode 100644
index 0000000..20d3840
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/PhysicalLocationForMateCigar.java
@@ -0,0 +1,102 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+/**
+ * @author nhomer
+ */
+
+/** Stores the minimal information needed for optical duplicate detection. */
+public class PhysicalLocationForMateCigar implements OpticalDuplicateFinder.PhysicalLocation {
+
+ // Information used to detect optical dupes
+ short readGroup = -1;
+ short tile = -1;
+ short x = -1, y = -1;
+ short libraryId;
+
+ public PhysicalLocationForMateCigar(final OpticalDuplicateFinder.PhysicalLocation rec) {
+ this.setReadGroup(rec.getReadGroup());
+ this.setTile(rec.getTile());
+ this.setX(rec.getX());
+ this.setY(rec.getY());
+ this.setLibraryId(rec.getLibraryId());
+ }
+
+ @Override
+ public short getReadGroup() { return this.readGroup; }
+
+ @Override
+ public void setReadGroup(final short rg) { this.readGroup = rg; }
+
+ @Override
+ public short getTile() { return this.tile; }
+
+ @Override
+ public void setTile(final short tile) { this.tile = tile; }
+
+ @Override
+ public short getX() { return this.x; }
+
+ @Override
+ public void setX(final short x) { this.x = x; }
+
+ @Override
+ public short getY() { return this.y; }
+
+ @Override
+ public void setY(final short y) { this.y = y;}
+
+ @Override
+ public short getLibraryId() { return this.libraryId; }
+
+ @Override
+ public void setLibraryId(final short libraryId) { this.libraryId = libraryId; }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof PhysicalLocationForMateCigar) {
+ int cmp;
+ PhysicalLocationForMateCigar loc = (PhysicalLocationForMateCigar) other;
+ cmp = getLibraryId() - loc.getLibraryId();
+ if (0 == cmp) cmp = getReadGroup() - loc.getReadGroup();
+ if (0 == cmp) cmp = getTile() - loc.getTile();
+ if (0 == cmp) cmp = getY() - loc.getY();
+ if (0 == cmp) cmp = getX() - loc.getX();
+ return 0 == cmp;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = getLibraryId();
+ result = 31 * result + getReadGroup();
+ result = 31 * result + getTile();
+ result = 31 * result + getY();
+ result = 31 * result + getX();
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/sam/markduplicates/util/PhysicalLocationForMateCigarSet.java b/src/java/picard/sam/markduplicates/util/PhysicalLocationForMateCigarSet.java
new file mode 100644
index 0000000..e389c2f
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/PhysicalLocationForMateCigarSet.java
@@ -0,0 +1,77 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import picard.PicardException;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * This stores records that are comparable for detecting optical duplicates.
+ */
+public class PhysicalLocationForMateCigarSet {
+ /**
+ * We want to return a set of ReadEnds but want to compare based on physical location, hence we store two sets.
+ */
+ private final Set<ReadEnds> readEnds = new HashSet<ReadEnds>();
+ private final Set<PhysicalLocationForMateCigar> physicalLocations = new HashSet<PhysicalLocationForMateCigar>();
+
+ public PhysicalLocationForMateCigarSet() {}
+
+ /** Adds the end to this set, if not already added based on physical location */
+ public void add(final ReadEndsForMateCigar end) {
+ final PhysicalLocationForMateCigar location = new PhysicalLocationForMateCigar(end);
+ if (!physicalLocations.contains(location)) {
+ readEnds.add(end);
+ physicalLocations.add(new PhysicalLocationForMateCigar(location));
+ }
+ }
+
+ /** The number of records in this set */
+ public int size() { return physicalLocations.size(); }
+
+ /** Removes the end from this set, if present */
+ public void remove(final ReadEndsForMateCigar end) {
+ final PhysicalLocationForMateCigar location = new PhysicalLocationForMateCigar(end);
+ if (physicalLocations.contains(location)) {
+ readEnds.remove(end);
+ physicalLocations.remove(location);
+ }
+ }
+
+ /** Gets the set of read ends */
+ public Set<ReadEnds> getReadEnds() { return this.readEnds; }
+
+ /** Replaces a given end with the other end. This ensures that that current is in this set */
+ public void replace(final ReadEndsForMateCigar current, final ReadEndsForMateCigar other) {
+ final PhysicalLocationForMateCigar location = new PhysicalLocationForMateCigar(current);
+ if (!physicalLocations.contains(location)) {
+ throw new PicardException("Trying to replace something not in the set");
+ }
+ this.remove(current);
+ this.add(other);
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/ReadEnds.java b/src/java/picard/sam/markduplicates/util/ReadEnds.java
new file mode 100644
index 0000000..396df39
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/ReadEnds.java
@@ -0,0 +1,91 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam.markduplicates.util;
+
+/** Little struct-like class to hold read pair (and fragment) end data for duplicate marking. */
+abstract public class ReadEnds implements OpticalDuplicateFinder.PhysicalLocation {
+
+ public static final byte F = 0, R = 1, FF = 2, FR = 3, RR = 4, RF = 5;
+
+ public short libraryId;
+ public byte orientation;
+ public int read1ReferenceIndex = -1;
+ public int read1Coordinate = -1;
+ public int read2ReferenceIndex = -1;
+ public int read2Coordinate = -1;
+
+ // Information used to detect optical dupes
+ public short readGroup = -1;
+ public short tile = -1;
+ public short x = -1, y = -1;
+
+ /** For optical duplicate detection the orientation matters regard to 1st or 2nd end of a mate */
+ public byte orientationForOpticalDuplicates = -1;
+
+
+ public boolean isPaired() { return this.read2ReferenceIndex != -1; }
+
+ @Override
+ public short getReadGroup() { return this.readGroup; }
+
+ @Override
+ public void setReadGroup(final short readGroup) { this.readGroup = readGroup; }
+
+ @Override
+ public short getTile() { return this.tile; }
+
+ @Override
+ public void setTile(final short tile) { this.tile = tile; }
+
+ @Override
+ public short getX() { return this.x; }
+
+ @Override
+ public void setX(final short x) { this.x = x; }
+
+ @Override
+ public short getY() { return this.y; }
+
+ @Override
+ public void setY(final short y) { this.y = y; }
+
+ @Override
+ public short getLibraryId() { return this.libraryId; }
+
+ @Override
+ public void setLibraryId(final short libraryId) { this.libraryId = libraryId; }
+
+ /**
+ * Returns a single byte that encodes the orientation of the two reads in a pair.
+ */
+ public static byte getOrientationByte(final boolean read1NegativeStrand, final boolean read2NegativeStrand) {
+ if (read1NegativeStrand) {
+ if (read2NegativeStrand) return ReadEnds.RR;
+ else return ReadEnds.RF;
+ } else {
+ if (read2NegativeStrand) return ReadEnds.FR;
+ else return ReadEnds.FF;
+ }
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java b/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java
new file mode 100644
index 0000000..14f381c
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java
@@ -0,0 +1,47 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+/**
+ * Little struct-like class to hold read pair (and fragment) end data for MarkDuplicatesWithMateCigar
+ *
+ * @author Nils Homer
+ */
+public class ReadEndsForMarkDuplicates extends ReadEnds {
+ /*
+ What do we need to store you ask? Well, we need to store:
+ - byte: orientation
+ - short: libraryId, readGroup, tile, x, y, score
+ - int: read1ReferenceIndex, read1Coordinate, read2ReferenceIndex, read2Coordinate
+ - long: read1IndexInFile, read2IndexInFile
+ */
+ public static final int SIZE_OF = (1 * 1) + (5 * 2) + (4 * 4) + (8 * 2) + 1
+ + 8 + // last 8 == reference overhead
+ 13; // This is determined experimentally with JProfiler
+
+ public short score = 0;
+ public long read1IndexInFile = -1;
+ public long read2IndexInFile = -1;
+}
\ No newline at end of file
diff --git a/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicatesCodec.java b/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicatesCodec.java
new file mode 100644
index 0000000..09c8377
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicatesCodec.java
@@ -0,0 +1,111 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam.markduplicates.util;
+
+import htsjdk.samtools.util.SortingCollection;
+import picard.PicardException;
+
+import java.io.*;
+
+/** Coded for ReadEnds that just outputs the primitive fields and reads them back. */
+public class ReadEndsForMarkDuplicatesCodec implements SortingCollection.Codec<ReadEndsForMarkDuplicates> {
+ private DataInputStream in;
+ private DataOutputStream out;
+
+ public SortingCollection.Codec<ReadEndsForMarkDuplicates> clone() {
+ return new ReadEndsForMarkDuplicatesCodec();
+ }
+
+ public void setOutputStream(final OutputStream os) { this.out = new DataOutputStream(os); }
+
+ public void setInputStream(final InputStream is) { this.in = new DataInputStream(is); }
+
+ public DataInputStream getInputStream() {
+ return in;
+ }
+
+ public DataOutputStream getOutputStream() {
+ return out;
+ }
+
+ public void encode(final ReadEndsForMarkDuplicates read) {
+ try {
+ this.out.writeShort(read.score);
+ this.out.writeShort(read.libraryId);
+ this.out.writeByte(read.orientation);
+ this.out.writeInt(read.read1ReferenceIndex);
+ this.out.writeInt(read.read1Coordinate);
+ this.out.writeLong(read.read1IndexInFile);
+ this.out.writeInt(read.read2ReferenceIndex);
+
+ if (read.orientation > ReadEnds.R) {
+ this.out.writeInt(read.read2Coordinate);
+ this.out.writeLong(read.read2IndexInFile);
+ }
+
+ this.out.writeShort(read.readGroup);
+ this.out.writeShort(read.tile);
+ this.out.writeShort(read.x);
+ this.out.writeShort(read.y);
+ this.out.writeByte(read.orientationForOpticalDuplicates);
+ } catch (final IOException ioe) {
+ throw new PicardException("Exception writing ReadEnds to file.", ioe);
+ }
+ }
+
+ public ReadEndsForMarkDuplicates decode() {
+ final ReadEndsForMarkDuplicates read = new ReadEndsForMarkDuplicates();
+ try {
+ // If the first read results in an EOF we've exhausted the stream
+ try {
+ read.score = this.in.readShort();
+ } catch (final EOFException eof) {
+ return null;
+ }
+
+ read.libraryId = this.in.readShort();
+ read.orientation = this.in.readByte();
+ read.read1ReferenceIndex = this.in.readInt();
+ read.read1Coordinate = this.in.readInt();
+ read.read1IndexInFile = this.in.readLong();
+ read.read2ReferenceIndex = this.in.readInt();
+
+ if (read.orientation > ReadEnds.R) {
+ read.read2Coordinate = this.in.readInt();
+ read.read2IndexInFile = this.in.readLong();
+ }
+
+ read.readGroup = this.in.readShort();
+ read.tile = this.in.readShort();
+ read.x = this.in.readShort();
+ read.y = this.in.readShort();
+
+ read.orientationForOpticalDuplicates = this.in.readByte();
+
+ return read;
+ } catch (final IOException ioe) {
+ throw new PicardException("Exception writing ReadEnds to file.", ioe);
+ }
+ }
+}
diff --git a/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicatesMap.java b/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicatesMap.java
new file mode 100644
index 0000000..2a40f18
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicatesMap.java
@@ -0,0 +1,61 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam.markduplicates.util;
+
+/**
+ * Interface for storing and retrieving ReadEnds objects. An implementation may be disk-based to
+ * reduce memory footprint.
+ */
+public interface ReadEndsForMarkDuplicatesMap {
+ /**
+ * Remove element with given key from the map. Because an implementation may be disk-based,
+ * the object returned may not be the same object that was put into the map
+ *
+ * @param mateSequenceIndex must agree with the value used when the object was put into the map
+ * @param key typically, concatenation of read group ID and read name
+ * @return null if the key is not found, otherwise the object removed.
+ */
+ ReadEndsForMarkDuplicates remove(int mateSequenceIndex, String key);
+
+ /**
+ * Store the element in the map with the given key. It is assumed that the element
+ * is not already present in the map.
+ *
+ * @param mateSequenceIndex use to optimize storage & retrieval. The same value must be used when trying
+ * to remove this element. It is not valid to store the same key with two different mateSequenceIndexes.
+ * @param key typically, concatenation of read group ID and read name
+ * @param readEnds the object to be stored
+ */
+ void put(int mateSequenceIndex, String key, ReadEndsForMarkDuplicates readEnds);
+
+ /**
+ * @return number of elements stored in map
+ */
+ int size();
+
+ /**
+ * @return number of elements stored in RAM. Always <= size()
+ */
+ int sizeInRam();
+}
diff --git a/src/java/picard/sam/markduplicates/util/ReadEndsForMateCigar.java b/src/java/picard/sam/markduplicates/util/ReadEndsForMateCigar.java
new file mode 100644
index 0000000..03970f8
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/ReadEndsForMateCigar.java
@@ -0,0 +1,167 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.util.SamRecordWithOrdinal;
+import picard.PicardException;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A class to store individual records for MarkDuplicatesWithMateCigar. This aids in comparing records to determine which need to
+ * be compared when we mark duplicates. We also store the original SAMRecord and its ordinal in the input file (in SamRecordWithOrdinal) to
+ * access optional tags (mate cigar) and other information.
+ */
+public class ReadEndsForMateCigar extends ReadEnds {
+ // to see if either end is unmapped
+ byte hasUnmapped = 0;
+
+ // we need this reference so we can access the mate cigar among other things
+ public SamRecordWithOrdinal samRecordWithOrdinal = null;
+
+ /**
+ * Physical locations used for optical duplicate tracking. This is only stored for paired end reads where both ends are mapped,
+ * and when we see the first mate.
+ */
+ private PhysicalLocationForMateCigarSet locationSet = null;
+
+ /** Builds a read ends object that represents a single read. */
+ public ReadEndsForMateCigar(final SAMFileHeader header, final SamRecordWithOrdinal samRecordWithOrdinal,
+ final OpticalDuplicateFinder opticalDuplicateFinder, final short libraryId) {
+
+ this.readGroup = -1;
+ this.tile = -1;
+ this.x = this.y = -1;
+ this.read2ReferenceIndex = this.read2Coordinate = -1;
+ this.hasUnmapped = 0;
+
+ this.samRecordWithOrdinal = samRecordWithOrdinal;
+
+ final SAMRecord record = this.samRecordWithOrdinal.getRecord();
+
+ this.read1ReferenceIndex = record.getReferenceIndex();
+ this.read1Coordinate = record.getReadNegativeStrandFlag() ? record.getUnclippedEnd() : record.getUnclippedStart();
+ if (record.getReadUnmappedFlag()) {
+ throw new PicardException("Found an unexpected unmapped read");
+ }
+
+ if (record.getReadPairedFlag() && !record.getReadUnmappedFlag() && !record.getMateUnmappedFlag()) {
+ this.read2ReferenceIndex = record.getMateReferenceIndex();
+ this.read2Coordinate = record.getMateNegativeStrandFlag() ? SAMUtils.getMateUnclippedEnd(record) : SAMUtils.getMateUnclippedStart(record);
+
+ // set orientation
+ this.orientation = ReadEnds.getOrientationByte(record.getReadNegativeStrandFlag(), record.getMateNegativeStrandFlag());
+
+ // Set orientationForOpticalDuplicates, which always goes by the first then the second end for the strands. NB: must do this
+ // before updating the orientation later.
+ if (record.getReadPairedFlag()) {
+ if (record.getFirstOfPairFlag()) {
+ this.orientationForOpticalDuplicates = ReadEnds.getOrientationByte(record.getReadNegativeStrandFlag(), record.getMateNegativeStrandFlag());
+ } else {
+ this.orientationForOpticalDuplicates = ReadEnds.getOrientationByte(record.getMateNegativeStrandFlag(), record.getReadNegativeStrandFlag());
+ }
+ }
+ } else {
+ this.orientation = record.getReadNegativeStrandFlag() ? ReadEndsForMateCigar.R : ReadEndsForMateCigar.F;
+ }
+
+ // Fill in the library ID
+ this.libraryId = libraryId;
+
+ // Is this unmapped or its mate?
+ if (record.getReadUnmappedFlag() || (record.getReadPairedFlag() && record.getMateUnmappedFlag())) {
+ this.hasUnmapped = 1;
+ }
+
+ // Fill in the location information for optical duplicates
+ if (opticalDuplicateFinder.addLocationInformation(record.getReadName(), this)) {
+ // calculate the RG number (nth in list)
+ // NB: could this be faster if we used a hash?
+ this.readGroup = 0;
+ final String rg = (String) record.getAttribute("RG");
+ final List<SAMReadGroupRecord> readGroups = header.getReadGroups();
+ if (rg != null && readGroups != null) {
+ for (final SAMReadGroupRecord readGroup : readGroups) {
+ if (readGroup.getReadGroupId().equals(rg)) break;
+ else this.readGroup++;
+ }
+ }
+ }
+ }
+
+ /** Creates a shallow copy from the "other" */
+ public ReadEndsForMateCigar(final ReadEndsForMateCigar other, final SamRecordWithOrdinal samRecordWithOrdinal) {
+ this.readGroup = other.readGroup;
+ this.tile = other.tile;
+ this.x = other.x;
+ this.y = other.y;
+ this.read1ReferenceIndex = other.read1ReferenceIndex;
+ this.read1Coordinate = other.read1Coordinate;
+ this.read2ReferenceIndex = other.read2ReferenceIndex;
+ this.read2Coordinate = other.read2Coordinate;
+ this.hasUnmapped = other.hasUnmapped;
+ this.samRecordWithOrdinal = samRecordWithOrdinal;
+ this.orientation = other.orientation;
+ this.libraryId = other.libraryId;
+ }
+
+ /** A number of convenience functions */
+ public SamRecordWithOrdinal getSamRecordIndex() { return this.samRecordWithOrdinal; }
+
+ public SAMRecord getRecord() { return this.samRecordWithOrdinal.getRecord(); }
+
+ public String getRecordReadName() { return this.samRecordWithOrdinal.getRecord().getReadName(); }
+
+ @Override
+ public boolean isPaired() { return this.getRecord().getReadPairedFlag(); }
+
+ /** Gets the read ends for optical duplicate tracking */
+ public Set<ReadEnds> getReadEndSetForOpticalDuplicates() {
+ if (null == this.locationSet) throw new PicardException("Already called getReadEndSetForOpticalDuplicates");
+ final Set<ReadEnds> locationSet = this.locationSet.getReadEnds();
+ this.locationSet = null;
+ return locationSet;
+ }
+
+ public PhysicalLocationForMateCigarSet getLocationSet() {
+ return this.locationSet;
+ }
+
+ public PhysicalLocationForMateCigarSet removeLocationSet() {
+ final PhysicalLocationForMateCigarSet locationSet = this.locationSet;
+ this.locationSet = null;
+ return locationSet;
+ }
+
+ public void setLocationSet(final PhysicalLocationForMateCigarSet locationSet) {
+ this.locationSet = locationSet;
+ }
+
+}
diff --git a/src/java/picard/sam/markduplicates/util/SamRecordWithOrdinalAndSetDuplicateReadFlag.java b/src/java/picard/sam/markduplicates/util/SamRecordWithOrdinalAndSetDuplicateReadFlag.java
new file mode 100644
index 0000000..65531dc
--- /dev/null
+++ b/src/java/picard/sam/markduplicates/util/SamRecordWithOrdinalAndSetDuplicateReadFlag.java
@@ -0,0 +1,49 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates.util;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.SamRecordWithOrdinal;
+
+/**
+ * This class sets the duplicate read flag as the result state when examining sets of records.
+ *
+ * @author nhomer
+ */
+public class SamRecordWithOrdinalAndSetDuplicateReadFlag extends SamRecordWithOrdinal {
+
+ public SamRecordWithOrdinalAndSetDuplicateReadFlag() {
+ super();
+ }
+
+ public SamRecordWithOrdinalAndSetDuplicateReadFlag(final SAMRecord record, final long recordIndex) {
+ super(record, recordIndex);
+ }
+
+ @Override
+ public void setResultState(final boolean resultState) {
+ this.getRecord().setDuplicateReadFlag(resultState);
+ }
+}
diff --git a/src/java/picard/sam/util/PhysicalLocation.java b/src/java/picard/sam/util/PhysicalLocation.java
new file mode 100644
index 0000000..6d79aaf
--- /dev/null
+++ b/src/java/picard/sam/util/PhysicalLocation.java
@@ -0,0 +1,118 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.util;
+
+import picard.PicardException;
+import picard.sam.markduplicates.util.OpticalDuplicateFinder;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Contains class for figuring out the location of reads.
+ *
+ * @author Tim Fennell
+ * @author Nils Homer
+ * @author Yossi Farjoun
+ */
+
+/**
+ * Small interface that provides access to the physical location information about a cluster.
+ * All values should be defaulted to -1 if unavailable. Tile should only allow
+ * non-zero positive integers, x and y coordinates must be non-negative.
+ * This is different from OpticalDuplicateFinder.PhysicalLocation in that the x and y positions are ints, not shorts
+ * thus, they do not overflow within a HiSeqX tile.
+ */
+public class PhysicalLocation {
+ //FLOWCELL----:LANE-:TILE----:X_COORD-:Y_COORD-UNK
+ public static final String DEFAULT_READ_NAME_REGEX = "[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*";
+
+ private final String readNameRegex;
+
+ public PhysicalLocation() {this(DEFAULT_READ_NAME_REGEX);}
+
+ public PhysicalLocation(final String readNameRegExp) {this.readNameRegex = readNameRegExp;}
+
+ private Pattern readNamePattern;
+
+ private short tile = -1;
+ private int x = -1, y = -1;
+
+
+ public short getTile() { return tile; }
+
+ public void setTile(final short tile) { this.tile = tile; }
+
+ public int getX() { return x; }
+
+ public void setX(final int x) { this.x = x; }
+
+ public int getY() { return y; }
+
+ public void setY(final int y) { this.y = y; }
+
+
+ private final int[] tmpLocationFields = new int[10]; // for optimization of addLocationInformation
+
+ /**
+ * Method used to extract tile/x/y from the read name and add it to the PhysicalLocation so that it
+ * can be used later to determine optical duplication
+ *
+ * @param readName the name of the read/cluster
+ * @param loc the object to add tile/x/y to
+ * @return true if the read name contained the information in parsable form, false otherwise
+ */
+ public boolean addLocationInformation(final String readName, final PhysicalLocation loc) {
+ // Optimized version if using the default read name regex (== used on purpose):
+ if (readNameRegex == DEFAULT_READ_NAME_REGEX) {
+ final int fields = ReadNameParsingUtils.getRapidDefaultReadNameRegexSplit(readName, ':', tmpLocationFields);
+ if (!(fields == 5 || fields == 7)) {
+ throw new PicardException(String.format(" READ_NAME_REGEX '%s' did not match read name '%s'. " ,
+ this.readNameRegex, readName));
+ }
+
+ final int offset = fields == 7 ? 2 : 0;
+ loc.setTile((short) tmpLocationFields[offset + 2]);
+ loc.setX(tmpLocationFields[offset + 3]);
+ loc.setY(tmpLocationFields[offset + 4]);
+ return true;
+ } else if (readNameRegex == null) {
+ return false;
+ } else {
+ // Standard version that will use the regex
+ if (readNamePattern == null) readNamePattern = Pattern.compile(readNameRegex);
+
+ final Matcher m = readNamePattern.matcher(readName);
+ if (m.matches()) {
+ loc.setTile((short) Integer.parseInt(m.group(1)));
+ loc.setX(Integer.parseInt(m.group(2)));
+ loc.setY(Integer.parseInt(m.group(3)));
+ return true;
+ } else {
+ throw new PicardException(String.format("READ_NAME_REGEX '%s' did not match read name '%s'. ", readNameRegex, readName));
+ }
+ }
+ }
+}
diff --git a/src/java/picard/sam/util/ReadNameParsingUtils.java b/src/java/picard/sam/util/ReadNameParsingUtils.java
new file mode 100644
index 0000000..ac6e268
--- /dev/null
+++ b/src/java/picard/sam/util/ReadNameParsingUtils.java
@@ -0,0 +1,83 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam.util;
+
+/**
+ * Common functions for quickly parsing strings. Used for parsing the tile and coordinates from the read names
+ */
+public class ReadNameParsingUtils {
+
+ /**
+ * Single pass method to parse the read name for the default regex. This will only insert the 2nd to the 4th
+ * tokens (inclusive). It will also stop after the fifth token has been successfully parsed.
+ */
+ public static int getRapidDefaultReadNameRegexSplit(final String readName, final char delim, final int[] tokens) {
+ int tokensIdx = 0;
+ int prevIdx = 0;
+ for (int i = 0; i < readName.length(); i++) {
+ if (readName.charAt(i) == delim) {
+ if (1 < tokensIdx && tokensIdx < 5)
+ tokens[tokensIdx] = rapidParseInt(readName.substring(prevIdx, i)); // only fill in 2-4 inclusive
+ tokensIdx++;
+ if (4 < tokensIdx) return tokensIdx; // early return, only consider the first five tokens
+ prevIdx = i + 1;
+ }
+ }
+ if (prevIdx < readName.length()) {
+ if (1 < tokensIdx && tokensIdx < 5)
+ tokens[tokensIdx] = rapidParseInt(readName.substring(prevIdx, readName.length())); // only fill in 2-4 inclusive
+ tokensIdx++;
+ }
+ return tokensIdx;
+ }
+
+ /**
+ * Very specialized method to rapidly parse a sequence of digits from a String up until the first
+ * non-digit character.
+ */
+ public static int rapidParseInt(final String input) {
+ final int len = input.length();
+ int val = 0;
+ int i = 0;
+ boolean isNegative = false;
+
+ if (0 < len && '-' == input.charAt(0)) {
+ i = 1;
+ isNegative = true;
+ }
+
+ for (; i < len; ++i) {
+ final char ch = input.charAt(i);
+ if (Character.isDigit(ch)) {
+ val = (val * 10) + (ch - 48);
+ } else {
+ break;
+ }
+ }
+
+ if (isNegative) val = -val;
+
+ return val;
+ }
+}
diff --git a/src/java/picard/util/AbstractInputParser.java b/src/java/picard/util/AbstractInputParser.java
new file mode 100644
index 0000000..d57db37
--- /dev/null
+++ b/src/java/picard/util/AbstractInputParser.java
@@ -0,0 +1,199 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.AbstractIterator;
+import htsjdk.samtools.util.CloseableIterator;
+import picard.PicardException;
+
+import java.util.Iterator;
+
+/**
+ * Class for parsing text files where each line consists of fields separated by whitespace.
+ * Code is abstracted into this class so that we can optimize its performance over time.
+ *
+ * This class assumes that every line will have the same number of whitespace-separated "words"
+ * and that lines that start with "#" are comments and should be ignored.
+ *
+ * Classes that extend this parser can do so simply by implementing their own constructors and the
+ * readNextLine(), close(), and getFileName() methods.
+ *
+ * @author Kathleen Tibbetts
+ */
+public abstract class AbstractInputParser
+extends AbstractIterator<String[]>
+implements Iterable<String[]>, CloseableIterator<String[]> {
+
+ private boolean treatGroupedDelimitersAsOne = true; // Whether multiple delimiters in succession should be treated as one
+ private int wordCount = 0; /* The number of delimiter-separated "words" per line of the file.
+ We can save a little caclulation, or handle files with varying numbers of
+ words per line, by specifying this if known in advance */
+ private boolean skipBlankLines = true;
+
+ /**
+ * Closes this stream and releases any system resources associated with it.
+ */
+ public abstract void close();
+
+ /**
+ * @return the next line of text from the underlying stream(s) or null if there is no next line
+ */
+ protected abstract byte[] readNextLine();
+
+ /**
+ * @return the name(s) of the file(s) being parsed, or null if no name is available
+ */
+ public abstract String getFileName();
+
+ /**
+ * @return an iterator over a set of elements of type String[]
+ */
+ public Iterator<String[]> iterator() {
+ if (isIterating()) {
+ throw new IllegalStateException("iterator() method can only be called once, before the" +
+ "first call to hasNext()");
+ }
+ hasNext();
+ return this;
+ }
+
+ @Override
+ protected String[] advance() {
+ byte[] nextLine;
+ do {
+ nextLine = readNextLine();
+ }
+ while (nextLine != null && ((this.skipBlankLines && isBlank(nextLine)) || isComment(nextLine)));
+ return nextLine == null ? null : parseLine(nextLine);
+ }
+
+ /**
+ * This method represents the most efficient way (so far) to parse a line of whitespace-delimited text
+ *
+ * @param line the line to parse
+ * @return an array of all the "words"
+ */
+ private String[] parseLine(final byte[] line) {
+
+ if (getWordCount() == 0) {
+ calculateWordCount(line);
+ }
+ final String[] parts = new String[getWordCount()];
+ boolean delimiter = true;
+ int index=0;
+ int start = 0;
+
+ try
+ {
+ for (int i = 0; i < line.length; i++) {
+ if (isDelimiter(line[i])) {
+ if (!delimiter) {
+ parts[index++] = new String(line,start,i-start);
+ }
+ else if(!isTreatGroupedDelimitersAsOne()) {
+ parts[index++] = null;
+ }
+ delimiter=true;
+ }
+ else {
+ if (delimiter) start = i;
+ delimiter = false;
+ }
+ }
+ if (!delimiter) {
+ parts[index] = new String(line,start,line.length-start);
+ }
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ throw new PicardException("Unexpected number of elements found when parsing file " +
+ this.getFileName() + ": " + index + ". Expected a maximum of " +
+ this.getWordCount() + " elements per line:" + new String(line,0,line.length), e);
+ }
+ return parts;
+ }
+
+ /**
+ * Calculates the number of delimiter-separated "words" in a line and sets the value of <code>wordCount</code>
+ *
+ * @param line representative line from the file
+ */
+ protected void calculateWordCount(final byte[] line) {
+ int words = 0;
+ boolean delimiter = true;
+ for (final byte b : line) {
+ if (isDelimiter(b)) {
+ if (delimiter && !isTreatGroupedDelimitersAsOne()) words++;
+ delimiter = true;
+ } else {
+ if (delimiter) words++;
+ delimiter = false;
+ }
+ }
+ if (delimiter && !isTreatGroupedDelimitersAsOne()) {
+ words += 1;
+ }
+ setWordCount(words);
+ }
+
+ /**
+ * Determines whether a given line is a comment
+ *
+ * @param line the line to evaluate
+ * @return true if the line is a comment (and should be ignored) otherwise false
+ */
+ protected boolean isComment(final byte[] line) {
+ return line.length > 0 && line[0] == '#';
+ }
+
+ /**
+ * Determines whether a given line is a comment
+ *
+ * @param line the line to evaluate
+ * @return true if the line is a comment (and should be ignored) otherwise false
+ */
+ protected boolean isBlank(final byte[] line) {
+ return line.length == 0;
+ }
+
+ /**
+ * Determines whether a given character is a delimiter
+ *
+ * @param b the character to evaluate
+ * @return true if <code>b</code> is a delimiter; otherwise false
+ */
+ protected boolean isDelimiter(final byte b) {
+ return b == ' ' || b == '\t';
+ }
+
+ protected int getWordCount() { return wordCount; }
+ protected void setWordCount(final int wordCount) { this.wordCount = wordCount; }
+ protected boolean isTreatGroupedDelimitersAsOne() { return treatGroupedDelimitersAsOne; }
+ protected void setTreatGroupedDelimitersAsOne(final boolean treatGroupedDelimitersAsOne) {
+ this.treatGroupedDelimitersAsOne = treatGroupedDelimitersAsOne;
+ }
+ protected boolean isSkipBlankLines() { return this.skipBlankLines; }
+ protected void setSkipBlankLines(final boolean skipBlankLines) {
+ this.skipBlankLines = skipBlankLines;
+ }
+}
diff --git a/src/java/picard/util/AdapterMarker.java b/src/java/picard/util/AdapterMarker.java
new file mode 100644
index 0000000..683f04a
--- /dev/null
+++ b/src/java/picard/util/AdapterMarker.java
@@ -0,0 +1,340 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Store one or more AdapterPairs to use to mark adapter sequence of SAMRecords. This is a very compute-intensive process, so
+ * this class implements two heuristics to reduce computation:
+ * - Adapter sequences are truncated, and then any adapter pairs that become identical after truncation are collapsed into a single pair.
+ * - After a specified number of reads with adapter sequence has been seen, prune the list of adapter pairs to include only the most
+ * frequently seen adapters. For a flowcell, there should only be a single adapter pair found.
+ *
+ * Note that the AdapterPair object returned by all the adapterTrim* methods will not be one of the original AdapterPairs
+ * passed to the ctor, but rather will be one of the truncated copies.
+ */
+public class AdapterMarker {
+ public static final int DEFAULT_ADAPTER_LENGTH = 30;
+ public static final int DEFAULT_PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN = 100;
+ public static final int DEFAULT_NUM_ADAPTERS_TO_KEEP = 1;
+
+ // It is assumed that these are set once during execution, before the class is used to mark any adapters, but this is not enforced.
+ private int thresholdForSelectingAdaptersToKeep = DEFAULT_PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN;
+ private int numAdaptersToKeep = DEFAULT_NUM_ADAPTERS_TO_KEEP;
+ private int minSingleEndMatchBases = ClippingUtility.MIN_MATCH_BASES;
+ private int minPairMatchBases = ClippingUtility.MIN_MATCH_PE_BASES;
+ private double maxSingleEndErrorRate = ClippingUtility.MAX_ERROR_RATE;
+ private double maxPairErrorRate = ClippingUtility.MAX_PE_ERROR_RATE;
+
+ // This is AtomicReference because one thread could be matching adapters while the threshold has been crossed in another
+ // thread and the array is being replaced.
+ private final AtomicReference<AdapterPair[]> adapters = new AtomicReference<AdapterPair[]>();
+
+ // All the members below are only accessed within a synchronized block.
+ private boolean thresholdReached = false;
+ private int numAdaptersSeen = 0;
+ private final CollectionUtil.DefaultingMap<AdapterPair, Integer> seenCounts = new CollectionUtil.DefaultingMap<AdapterPair, Integer>(0);
+
+ /**
+ * Truncates adapters to DEFAULT_ADAPTER_LENGTH
+ * @param originalAdapters These should be in order from longest & most likely to shortest & least likely.
+ */
+ public AdapterMarker(final AdapterPair... originalAdapters) {
+ this(DEFAULT_ADAPTER_LENGTH, originalAdapters);
+ }
+
+ /**
+ * @param adapterLength Truncate adapters to this length.
+ * @param originalAdapters These should be in order from longest & most likely to shortest & least likely.
+ */
+ public AdapterMarker(final int adapterLength, final AdapterPair... originalAdapters) {
+ // Truncate each AdapterPair to the given length, and then combine any that end up the same after truncation.
+ final ArrayList<TruncatedAdapterPair> truncatedAdapters = new ArrayList<TruncatedAdapterPair>();
+ for (final AdapterPair adapter : originalAdapters) {
+ final TruncatedAdapterPair truncatedAdapter = makeTruncatedAdapterPair(adapter, adapterLength);
+ final int matchingIndex = truncatedAdapters.indexOf(truncatedAdapter);
+ if (matchingIndex == -1) {
+ truncatedAdapters.add(truncatedAdapter);
+ } else {
+ final TruncatedAdapterPair matchingAdapter = truncatedAdapters.get(matchingIndex);
+ matchingAdapter.setName(matchingAdapter.getName() + "|" + adapter.getName());
+ }
+ }
+ adapters.set(truncatedAdapters.toArray(new AdapterPair[truncatedAdapters.size()]));
+ }
+
+ public int getNumAdaptersToKeep() {
+ return numAdaptersToKeep;
+ }
+
+ /**
+ * After seeing the thresholdForSelectingAdapters number of adapters, keep up to this many of the original adapters.
+ */
+ public synchronized AdapterMarker setNumAdaptersToKeep(final int numAdaptersToKeep) {
+ if (numAdaptersToKeep <= 0) {
+ throw new IllegalArgumentException(String.format("numAdaptersToKeep should be positive: %d", numAdaptersToKeep));
+ }
+ this.numAdaptersToKeep = numAdaptersToKeep;
+ return this;
+ }
+
+ public int getThresholdForSelectingAdaptersToKeep() {
+ return thresholdForSelectingAdaptersToKeep;
+ }
+
+ /**
+ * When this number of adapters have been matched, discard the least-frequently matching ones.
+ * @param thresholdForSelectingAdaptersToKeep set to -1 to never discard any adapters.
+ */
+ public synchronized AdapterMarker setThresholdForSelectingAdaptersToKeep(final int thresholdForSelectingAdaptersToKeep) {
+ this.thresholdForSelectingAdaptersToKeep = thresholdForSelectingAdaptersToKeep;
+ return this;
+ }
+
+ public int getMinSingleEndMatchBases() {
+ return minSingleEndMatchBases;
+ }
+
+ /**
+ *
+ * @param minSingleEndMatchBases When marking a single-end read, adapter must match at least this many bases.
+ */
+ public synchronized AdapterMarker setMinSingleEndMatchBases(final int minSingleEndMatchBases) {
+ this.minSingleEndMatchBases = minSingleEndMatchBases;
+ return this;
+ }
+
+ public int getMinPairMatchBases() {
+ return minPairMatchBases;
+ }
+
+ /**
+ *
+ * @param minPairMatchBases When marking a paired-end read, adapter must match at least this many bases.
+ */
+ public synchronized AdapterMarker setMinPairMatchBases(final int minPairMatchBases) {
+ this.minPairMatchBases = minPairMatchBases;
+ return this;
+ }
+
+ public double getMaxSingleEndErrorRate() {
+ return maxSingleEndErrorRate;
+ }
+
+ /**
+ * @param maxSingleEndErrorRate For single-end read, no more than this fraction of the bases that align with the adapter can
+ * mismatch the adapter and still be considered an adapter match.
+ */
+ public synchronized AdapterMarker setMaxSingleEndErrorRate(final double maxSingleEndErrorRate) {
+ this.maxSingleEndErrorRate = maxSingleEndErrorRate;
+ return this;
+ }
+
+ public double getMaxPairErrorRate() {
+ return maxPairErrorRate;
+ }
+
+ /**
+ * @param maxPairErrorRate For paired-end read, no more than this fraction of the bases that align with the adapter can
+ * mismatch the adapter and still be considered an adapter match.
+ */
+ public synchronized AdapterMarker setMaxPairErrorRate(final double maxPairErrorRate) {
+ this.maxPairErrorRate = maxPairErrorRate;
+ return this;
+ }
+
+ public AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read) {
+ return adapterTrimIlluminaSingleRead(read, minSingleEndMatchBases, maxSingleEndErrorRate);
+ }
+
+ public AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2) {
+ return adapterTrimIlluminaPairedReads(read1, read2, minPairMatchBases, maxPairErrorRate);
+ }
+
+ /**
+ * Overrides defaults for minMatchBases and maxErrorRate
+ */
+ public AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read, final int minMatchBases, final double maxErrorRate) {
+ final AdapterPair ret = ClippingUtility.adapterTrimIlluminaSingleRead(read, minMatchBases, maxErrorRate, adapters.get());
+ if (ret != null) tallyFoundAdapter(ret);
+ return ret;
+ }
+
+ /**
+ * Overrides defaults for minMatchBases and maxErrorRate
+ */
+ public AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2,
+ final int minMatchBases, final double maxErrorRate) {
+ final AdapterPair ret = ClippingUtility.adapterTrimIlluminaPairedReads(read1, read2, minMatchBases, maxErrorRate, adapters.get());
+ if (ret != null) tallyFoundAdapter(ret);
+ return ret;
+ }
+
+ /** For unit testing only */
+ AdapterPair[] getAdapters() {
+ return adapters.get();
+ }
+
+ private TruncatedAdapterPair makeTruncatedAdapterPair(final AdapterPair adapterPair, final int adapterLength) {
+ return new TruncatedAdapterPair("truncated " + adapterPair.getName(),
+ substringAndRemoveTrailingNs(adapterPair.get3PrimeAdapterInReadOrder(), adapterLength),
+ substringAndRemoveTrailingNs(adapterPair.get5PrimeAdapterInReadOrder(), adapterLength));
+ }
+
+ /**
+ * Truncate to the given length, and in addition truncate any trailing Ns.
+ */
+ private String substringAndRemoveTrailingNs(final String s, int length) {
+ length = Math.min(length, s.length());
+ final byte[] bytes = StringUtil.stringToBytes(s);
+ while (length > 0 && SequenceUtil.isNoCall(bytes[length - 1])) {
+ length--;
+ }
+ return s.substring(0, length);
+ }
+
+ /**
+ * Keep track of every time an adapter is found, until it is time to prune the list of adapters.
+ */
+ private void tallyFoundAdapter(final AdapterPair foundAdapter) {
+ // If caller does not want adapter pruning, do nothing.
+ if (thresholdForSelectingAdaptersToKeep < 1) return;
+ synchronized (this) {
+ // Already pruned adapter list, so nothing more to do.
+ if (thresholdReached) return;
+
+ // Tally this adapter
+ seenCounts.put(foundAdapter, seenCounts.get(foundAdapter) + 1);
+
+ // Keep track of the number of times an adapter has been seen.
+ numAdaptersSeen += 1;
+
+ // Reached the threshold for pruning the list.
+ if (numAdaptersSeen >= thresholdForSelectingAdaptersToKeep) {
+
+ // Sort adapters by number of times each has been seen.
+ final TreeMap<Integer, AdapterPair> sortedAdapters = new TreeMap<Integer, AdapterPair>(new Comparator<Integer>() {
+ @Override
+ public int compare(final Integer integer, final Integer integer2) {
+ // Reverse of natural ordering
+ return integer2.compareTo(integer);
+ }
+ });
+ for (final Map.Entry<AdapterPair, Integer> entry : seenCounts.entrySet()) {
+ sortedAdapters.put(entry.getValue(), entry.getKey());
+ }
+
+ // Keep the #numAdaptersToKeep adapters that have been seen the most, plus any ties.
+ final ArrayList<AdapterPair> bestAdapters = new ArrayList<AdapterPair>(numAdaptersToKeep);
+ int countOfLastAdapter = Integer.MAX_VALUE;
+ for (final Map.Entry<Integer, AdapterPair> entry : sortedAdapters.entrySet()) {
+ if (bestAdapters.size() >= numAdaptersToKeep) {
+ if (entry.getKey() == countOfLastAdapter) {
+ bestAdapters.add(entry.getValue());
+ } else {
+ break;
+ }
+ } else {
+ countOfLastAdapter = entry.getKey();
+ bestAdapters.add(entry.getValue());
+ }
+ }
+ // Replace the existing list with the pruned list.
+ thresholdReached = true;
+ adapters.set(bestAdapters.toArray(new AdapterPair[bestAdapters.size()]));
+ }
+ }
+ }
+
+ private static class TruncatedAdapterPair implements AdapterPair {
+ String name;
+ final String fivePrime, threePrime, fivePrimeReadOrder;
+ final byte[] fivePrimeBytes, threePrimeBytes, fivePrimeReadOrderBytes;
+
+ private TruncatedAdapterPair(final String name, final String threePrimeReadOrder, final String fivePrimeReadOrder) {
+ this.name = name;
+ this.threePrime = threePrimeReadOrder;
+ this.threePrimeBytes = StringUtil.stringToBytes(threePrimeReadOrder);
+ this.fivePrimeReadOrder = fivePrimeReadOrder;
+ this.fivePrimeReadOrderBytes = StringUtil.stringToBytes(fivePrimeReadOrder);
+ this.fivePrime = SequenceUtil.reverseComplement(fivePrimeReadOrder);
+ this.fivePrimeBytes = StringUtil.stringToBytes(this.fivePrime);
+ }
+
+ public String get3PrimeAdapter(){ return threePrime; }
+ public String get5PrimeAdapter(){ return fivePrime; }
+ public String get3PrimeAdapterInReadOrder(){ return threePrime; }
+ public String get5PrimeAdapterInReadOrder() { return fivePrimeReadOrder; }
+ public byte[] get3PrimeAdapterBytes() { return threePrimeBytes; }
+ public byte[] get5PrimeAdapterBytes() { return fivePrimeBytes; }
+ public byte[] get3PrimeAdapterBytesInReadOrder() { return threePrimeBytes; }
+ public byte[] get5PrimeAdapterBytesInReadOrder() { return fivePrimeReadOrderBytes; }
+
+ public String getName() { return this.name; }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+
+ // WARNING: These methods ignore the name member!
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final TruncatedAdapterPair that = (TruncatedAdapterPair) o;
+
+ if (!fivePrime.equals(that.fivePrime)) return false;
+ if (!threePrime.equals(that.threePrime)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = fivePrime.hashCode();
+ result = 31 * result + threePrime.hashCode();
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "TruncatedAdapterPair{" +
+ "fivePrimeReadOrder='" + fivePrimeReadOrder + '\'' +
+ ", threePrime='" + threePrime + '\'' +
+ ", name='" + name + '\'' +
+ '}';
+ }
+ }
+}
diff --git a/src/java/picard/util/AdapterPair.java b/src/java/picard/util/AdapterPair.java
new file mode 100644
index 0000000..7bf2270
--- /dev/null
+++ b/src/java/picard/util/AdapterPair.java
@@ -0,0 +1,16 @@
+package picard.util;
+
+public interface AdapterPair {
+
+ public String get3PrimeAdapter();
+ public String get3PrimeAdapterInReadOrder();
+ public byte[] get3PrimeAdapterBytes();
+ public byte[] get3PrimeAdapterBytesInReadOrder();
+
+ public String get5PrimeAdapter();
+ public String get5PrimeAdapterInReadOrder();
+ public byte[] get5PrimeAdapterBytes();
+ public byte[] get5PrimeAdapterBytesInReadOrder();
+
+ public String getName();
+}
diff --git a/src/java/picard/util/AsyncIterator.java b/src/java/picard/util/AsyncIterator.java
new file mode 100644
index 0000000..4c97e61
--- /dev/null
+++ b/src/java/picard/util/AsyncIterator.java
@@ -0,0 +1,170 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.CloseableIterator;
+
+import java.util.NoSuchElementException;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Wrapper around a CloseableIterator that reads in a separate thread, for cases in which that might be
+ * efficient.
+ */
+public class AsyncIterator<T> implements CloseableIterator<T> {
+ private static volatile int threadsCreated = 0; // Just used for thread naming.
+ public static final int DEFAULT_QUEUE_SIZE = 2000;
+
+ private final AtomicBoolean isClosed = new AtomicBoolean(false);
+ private final BlockingQueue<T> queue;
+ private final Thread reader;
+ private final ReaderRunnable readerRunnable;
+ private final AtomicReference<Throwable> ex = new AtomicReference<Throwable>(null);
+ private T theNext = null;
+ private final CloseableIterator<T> underlyingIterator;
+
+
+ public AsyncIterator(final CloseableIterator<T> underlyingIterator,
+ final int queueSize,
+ final String threadNamePrefix) {
+ this.underlyingIterator = underlyingIterator;
+ this.queue = new ArrayBlockingQueue<T>(queueSize);
+ this.readerRunnable = new ReaderRunnable();
+ this.reader = new Thread(readerRunnable, threadNamePrefix + threadsCreated++);
+ this.reader.setDaemon(true);
+ this.reader.start();
+ getNext();
+ }
+
+
+ /**
+ * Set theNext to the next item to be returned, or null if there are no more items.
+ */
+ private void getNext() {
+ assertOpen();
+
+ checkAndRethrow();
+ try {
+ theNext = null;
+ while (!this.queue.isEmpty() || !this.readerRunnable.isDone()) {
+ theNext = this.queue.poll(5, TimeUnit.SECONDS);
+ checkAndRethrow();
+ if (theNext != null) break;
+ }
+ } catch (InterruptedException ie) { throw new RuntimeException("Interrupted queueing item for writing.", ie); }
+ checkAndRethrow();
+ }
+
+ public boolean hasNext() {
+ assertOpen();
+ return theNext != null;
+ }
+
+ public T next() {
+ assertOpen();
+ if (!hasNext()) throw new NoSuchElementException();
+ final T ret = theNext;
+ getNext();
+ return ret;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Stops the thread and then calls synchronouslyClose() to allow implementation to do any one time clean up.
+ */
+ public void close() {
+ checkAndRethrow();
+
+ assertOpen();
+ this.isClosed.set(true);
+
+ try { this.reader.join(); }
+ catch (InterruptedException ie) { throw new RuntimeException("Interrupted waiting on reader thread.", ie); }
+
+ underlyingIterator.close();
+ checkAndRethrow();
+ this.queue.clear();
+ }
+
+ private void assertOpen() {
+ if (this.isClosed.get()) {
+ throw new RuntimeException("AsyncIterator already closed.");
+ }
+ }
+
+ /**
+ * Checks to see if an exception has been raised in the reader thread and if so rethrows it as an Error
+ * or RuntimeException as appropriate.
+ */
+ private void checkAndRethrow() {
+ final Throwable t = this.ex.get();
+ if (t != null) {
+ if (t instanceof Error) throw (Error) t;
+ if (t instanceof RuntimeException) throw (RuntimeException) t;
+ else throw new RuntimeException(t);
+ }
+ }
+
+ /**
+ * Small Runnable implementation that simply reads from underlying iterator and stores on the blocking queue.
+ */
+ private class ReaderRunnable implements Runnable {
+ private final AtomicBoolean readerDone = new AtomicBoolean(false);
+
+ public boolean isDone() { return readerDone.get(); }
+
+ public void run() {
+ try {
+ boolean isEof = false;
+ while (!isClosed.get() && !isEof) {
+ try {
+ if (!underlyingIterator.hasNext()) {
+ isEof = true;
+ } else {
+ final T item = underlyingIterator.next();
+ // Keep trying to put item on the queue unless close() has been called.
+ while (!isClosed.get() && !queue.offer(item, 2, TimeUnit.SECONDS)) {
+ }
+ }
+ }
+ catch (InterruptedException ie) {
+ /* Do Nothing */
+ }
+ }
+ }
+ catch (Throwable t) {
+ ex.compareAndSet(null, t);
+ } finally {
+ readerDone.set(true);
+ }
+ }
+ }
+}
diff --git a/src/java/picard/util/AtomicIterator.java b/src/java/picard/util/AtomicIterator.java
new file mode 100644
index 0000000..557f1df
--- /dev/null
+++ b/src/java/picard/util/AtomicIterator.java
@@ -0,0 +1,12 @@
+package picard.util;
+
+import com.google.common.base.Optional;
+
+/**
+ * Describes
+ * @author mccowan
+ */
+public interface AtomicIterator<T> {
+ /** Produces the next element from the iterator, if there is one; otherwise, produces {@link com.google.common.base.Optional.Absent} */
+ Optional<T> next();
+}
diff --git a/src/java/picard/util/BaitDesigner.java b/src/java/picard/util/BaitDesigner.java
new file mode 100644
index 0000000..aa5737f
--- /dev/null
+++ b/src/java/picard/util/BaitDesigner.java
@@ -0,0 +1,623 @@
+package picard.util;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CoordMath;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.OverlapDetector;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.None;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.regex.Pattern;
+
+/**
+ * Designs baits for hybrid selection!
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Designs baits or oligos for hybrid selection reactions.",
+ usageShort = "Designs baits or oligos for hybrid selection reactions.",
+ programGroup = None.class
+)
+public class BaitDesigner extends CommandLineProgram {
+ /**
+ * Subclass of Interval for representing Baits, that caches the bait sequence.
+ */
+ static class Bait extends Interval {
+ byte[] bases;
+
+ /** Pass through constructor. */
+ public Bait(final String sequence, final int start, final int end, final boolean negative, final String name) {
+ super(sequence, start, end, negative, name);
+ }
+
+ /** Method that takes in the reference sequence this bait is on and caches the bait's bases. */
+ public void addBases(final ReferenceSequence reference, final boolean useStrandInfo) {
+ final byte[] tmp = new byte[length()];
+ System.arraycopy(reference.getBases(), getStart() - 1, tmp, 0, length());
+
+ if (useStrandInfo && isNegativeStrand()) {
+ SequenceUtil.reverseComplement(tmp);
+ }
+
+ setBases(tmp);
+ }
+
+ public int getMaskedBaseCount() {
+ return BaitDesigner.getMaskedBaseCount(bases, 0, bases.length);
+ }
+
+ @Override
+ public String toString() {
+ return "Bait{" +
+ "name=" + getName() +
+ ", bases=" + StringUtil.bytesToString(bases) +
+ '}';
+ }
+
+ public void setBases(final byte[] bases) { this.bases = bases;}
+
+ public byte[] getBases() { return bases; }
+ }
+
+ /**
+ * Set of possible design strategies for bait design.
+ */
+ public enum DesignStrategy {
+ /** Implementation that "constrains" baits to be within the target region when possible. */
+ CenteredConstrained {
+ List<Bait> design(final BaitDesigner designer, final Interval target, final ReferenceSequence reference) {
+ final List<Bait> baits = new LinkedList<Bait>();
+
+ final int baitSize = designer.BAIT_SIZE;
+ final int baitOffset = designer.BAIT_OFFSET;
+
+ // Treat targets less than a bait length differently
+ if (target.length() <= baitSize) {
+ final int midpoint = target.getStart() + (target.length() / 2);
+ final int baitStart = midpoint - (baitSize / 2);
+ final Bait bait = new Bait(target.getSequence(),
+ baitStart,
+ CoordMath.getEnd(baitStart, baitSize),
+ target.isNegativeStrand(),
+ designer.makeBaitName(target.getName(), 1, 1));
+ bait.addBases(reference, designer.DESIGN_ON_TARGET_STRAND);
+ baits.add(bait);
+ } else {
+ // Work out how many baits we need and how to space them
+ final int baitCount = 1 + (int) Math.ceil((target.length() - baitSize) / (double) baitOffset);
+ final int firstBaitStart = target.getStart();
+ final int lastBaitStart = CoordMath.getStart(target.getEnd(), baitSize);
+ final double actualShift = (lastBaitStart - firstBaitStart) / (double) (baitCount - 1);
+
+ // And then design them
+ int baitIndex = 1;
+ int start = firstBaitStart;
+ while (start <= lastBaitStart) {
+ final int end = CoordMath.getEnd(start, baitSize);
+ final Bait bait = new Bait(target.getSequence(),
+ start,
+ end,
+ target.isNegativeStrand(),
+ designer.makeBaitName(target.getName(), baitIndex, baitCount));
+ bait.addBases(reference, designer.DESIGN_ON_TARGET_STRAND);
+ baits.add(bait);
+
+ // Recalculate from actualShift to avoid compounding rounding errors
+ start = firstBaitStart + (int) Math.round(actualShift * baitIndex);
+ ++baitIndex;
+ }
+ }
+
+ return baits;
+ }
+ },
+
+ /**
+ * Design that places baits at fixed offsets over targets, allowing them to hang off the ends
+ * as dictated by the target size and offset.
+ */
+ FixedOffset {
+ List<Bait> design(final BaitDesigner designer, final Interval target, final ReferenceSequence reference) {
+ final List<Bait> baits = new LinkedList<Bait>();
+
+ final int baitSize = designer.BAIT_SIZE;
+ final int baitOffset = designer.BAIT_OFFSET;
+ final int minTargetSize = baitSize + (baitOffset * (designer.MINIMUM_BAITS_PER_TARGET - 1));
+
+ // Redefine the target to be the size of a bait, or the size that a number of baits
+ // tiled tiles across the target at the fixed offset
+ final Interval t2;
+ if (target.length() < minTargetSize) {
+ final int addon = minTargetSize - target.length();
+ final int left = addon / 2;
+ final int right = addon - left;
+ t2 = new Interval(target.getSequence(),
+ Math.max(target.getStart() - left, 1),
+ Math.min(target.getEnd() + right, reference.length()),
+ target.isNegativeStrand(),
+ target.getName());
+ } else {
+ t2 = target;
+ }
+
+ // Work out how many baits we need and how to space them
+ final int baitCount = 1 + (int) Math.ceil((t2.length() - baitSize) / (double) baitOffset);
+ final int baitedBases = baitSize + (baitOffset * (baitCount - 1));
+ final int firstBaitStart = Math.max(t2.getStart() - ((baitedBases - t2.length()) / 2), 1);
+
+ // And then design them
+ final byte[] bases = reference.getBases();
+ final int MAX_MASKED = designer.REPEAT_TOLERANCE;
+
+ for (int i = 1; i <= baitCount; ++i) {
+ int start = firstBaitStart + (baitOffset * (i - 1));
+ int end = CoordMath.getEnd(start, baitSize);
+
+ if (end > reference.length()) break;
+
+ // If there are too many soft masked bases try shifting it around
+ if (getMaskedBaseCount(bases, start - 1, end) > MAX_MASKED) {
+ final int maxMove = baitOffset * 3 / 4;
+
+ for (int move = 1; move <= maxMove; move++) {
+ // Move it "backwards?"
+ if (start - move >= 1 && getMaskedBaseCount(bases, start - move - 1, end - move) <= MAX_MASKED) {
+ start = start - move;
+ end = end - move;
+ break;
+ }
+ // Move it "forwards"?
+ if (end + move <= reference.length() && getMaskedBaseCount(bases, start + move - 1, end + move) <= MAX_MASKED) {
+ start = start + move;
+ end = end + move;
+ break;
+ }
+ }
+ }
+
+ final Bait bait = new Bait(t2.getSequence(),
+ start,
+ end,
+ t2.isNegativeStrand(),
+ designer.makeBaitName(t2.getName(), i, baitCount));
+ bait.addBases(reference, designer.DESIGN_ON_TARGET_STRAND);
+ baits.add(bait);
+ }
+
+ return baits;
+ }
+ },
+
+ /**
+ * Ultra simple bait design algorithm that just lays down baits starting at the target start position
+ * until either the bait start runs off the end of the target or the bait would run off the sequence
+ */
+ Simple {
+ @Override
+ List<Bait> design(final BaitDesigner designer, final Interval target, final ReferenceSequence reference) {
+ final List<Bait> baits = new LinkedList<Bait>();
+ final int baitSize = designer.BAIT_SIZE;
+ final int baitOffset = designer.BAIT_OFFSET;
+ final int lastPossibleBaitStart = Math.min(target.getEnd(), reference.length() - baitSize);
+ final int baitCount = 1 + (int) Math.floor((lastPossibleBaitStart - target.getStart()) / (double) baitOffset);
+
+ int i = 0;
+ for (int start = target.getStart(); start < lastPossibleBaitStart; start += baitOffset) {
+ final Bait bait = new Bait(target.getSequence(),
+ start,
+ CoordMath.getEnd(start, baitSize),
+ target.isNegativeStrand(),
+ designer.makeBaitName(target.getName(), ++i, baitCount));
+ bait.addBases(reference, designer.DESIGN_ON_TARGET_STRAND);
+ baits.add(bait);
+ }
+ return baits;
+ }
+ };
+
+ /** Design method that each Design Strategy must implement. */
+ abstract List<Bait> design(BaitDesigner designer, Interval target, ReferenceSequence reference);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Options for the Bait Designer
+ ///////////////////////////////////////////////////////////////////////////
+
+ @Option(shortName = "T", doc = "The file with design parameters and targets")
+ public File TARGETS;
+
+ @Option(doc = "The name of the bait design")
+ public String DESIGN_NAME;
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc = "The reference sequence fasta file")
+ public File REFERENCE_SEQUENCE;
+
+ @Option(doc = "The left amplification primer to prepend to all baits for synthesis")
+ public String LEFT_PRIMER = "ATCGCACCAGCGTGT";
+
+ @Option(doc = "The right amplification primer to prepend to all baits for synthesis")
+ public String RIGHT_PRIMER = "CACTGCGGCTCCTCA";
+
+ @Option(doc = "The design strategy to use to layout baits across each target")
+ public DesignStrategy DESIGN_STRATEGY = DesignStrategy.FixedOffset;
+
+ @Option(doc = "The length of each individual bait to design")
+ public int BAIT_SIZE = 120;
+
+ @Option(doc = "The minimum number of baits to design per target.")
+ public int MINIMUM_BAITS_PER_TARGET = 2;
+
+ @Option(doc = "The desired offset between the start of one bait and the start of another bait for the same target.")
+ public int BAIT_OFFSET = 80;
+
+ @Option(doc = "Pad the input targets by this amount when designing baits. Padding is applied on both sides in this amount.")
+ public int PADDING = 0;
+
+ @Option(doc = "Baits that have more than REPEAT_TOLERANCE soft or hard masked bases will not be allowed")
+ public int REPEAT_TOLERANCE = 50;
+
+ @Option(doc = "The size of pools or arrays for synthesis. If no pool files are desired, can be set to 0.")
+ public int POOL_SIZE = 55000;
+
+ @Option(doc = "If true, fill up the pools with alternating fwd and rc copies of all baits. Equal copies of " +
+ "all baits will always be maintained")
+ public boolean FILL_POOLS = true;
+
+ @Option(doc = "If true design baits on the strand of the target feature, if false always design on the + strand of " +
+ "the genome.")
+ public boolean DESIGN_ON_TARGET_STRAND = false;
+
+ @Option(doc = "If true merge targets that are 'close enough' that designing against a merged target would be more efficient.")
+ public boolean MERGE_NEARBY_TARGETS = true;
+
+ @Option(doc = "If true also output .design.txt files per pool with one line per bait sequence")
+ public boolean OUTPUT_AGILENT_FILES = true;
+
+ @Option(shortName = "O", optional = true,
+ doc = "The output directory. If not provided then the DESIGN_NAME will be used as the output directory")
+ public File OUTPUT_DIRECTORY;
+
+ // "Output" members that will also get picked up by writeParametersFile()
+ int TARGET_TERRITORY;
+ int TARGET_COUNT;
+ int BAIT_TERRITORY;
+ int BAIT_COUNT;
+ int BAIT_TARGET_TERRITORY_INTERSECTION;
+ int ZERO_BAIT_TARGETS;
+ double DESIGN_EFFICIENCY;
+
+ // Utility objects
+ private static final Log log = Log.getInstance(BaitDesigner.class);
+ private final NumberFormat fmt = NumberFormat.getIntegerInstance();
+
+ /** Takes a target name and a bait index and creates a uniform bait name. */
+ String makeBaitName(final String targetName, final int baitIndex, final int totalBaits) {
+ final String total = fmt.format(totalBaits);
+ String bait = fmt.format(baitIndex);
+
+ // Pad out the bait number to match the longest one for this target
+ while (bait.length() < total.length()) bait = "0" + bait;
+
+ return targetName + "_bait#" + bait;
+ }
+
+ /** Returns the total of soft or hard masked bases in the interval of bases. */
+ public static int getMaskedBaseCount(final byte[] bases, final int from, final int until) {
+ int count = 0;
+ for (int i = from; i < until; i++) {
+ final byte b = bases[i];
+ if (b != 'A' && b != 'C' && b != 'G' && b != 'T') ++count;
+ }
+
+ return count;
+ }
+
+ /** Stock main method. */
+ public static void main(final String[] args) {
+ new BaitDesigner().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final List<String> errors = new ArrayList<String>();
+
+ final Pattern p = Pattern.compile("^[ACGTacgt]*$");
+ if (LEFT_PRIMER != null && !p.matcher(LEFT_PRIMER).matches()) {
+ errors.add("Left primer " + LEFT_PRIMER + " is not a valid primer sequence.");
+ }
+
+ if (RIGHT_PRIMER != null && !p.matcher(RIGHT_PRIMER).matches()) {
+ errors.add("Right primer " + RIGHT_PRIMER + " is not a valid primer sequence.");
+ }
+
+ if (errors.size() > 0) return errors.toArray(new String[errors.size()]);
+ else return null;
+ }
+
+ int estimateBaits(final int start, final int end) {
+ final int length = end - start + 1;
+ return Math.max(MINIMUM_BAITS_PER_TARGET, (int) (Math.ceil(length - BAIT_SIZE) / (double) BAIT_OFFSET) + 1);
+ }
+
+ /**
+ * Main method that coordinates the checking of inputs, designing of baits and then
+ * the writing out of all necessary files.
+ *
+ * @return
+ */
+ @Override
+ protected int doWork() {
+ // Input parameter munging and checking
+ if (OUTPUT_DIRECTORY == null) OUTPUT_DIRECTORY = new File(DESIGN_NAME);
+
+ IOUtil.assertFileIsReadable(TARGETS);
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+
+ if (!OUTPUT_DIRECTORY.exists()) {
+ OUTPUT_DIRECTORY.mkdirs();
+ }
+ IOUtil.assertDirectoryIsWritable(OUTPUT_DIRECTORY);
+
+ // Load up the targets and the reference
+ final IntervalList targets;
+ final IntervalList originalTargets = IntervalList.fromFile(TARGETS);
+
+ {
+ // Apply padding
+ final IntervalList padded = new IntervalList(originalTargets.getHeader());
+ final SAMSequenceDictionary dict = padded.getHeader().getSequenceDictionary();
+ for (final Interval i : originalTargets.getIntervals()) {
+ padded.add(new Interval(i.getSequence(),
+ Math.max(i.getStart() - PADDING, 1),
+ Math.min(i.getEnd() + PADDING, dict.getSequence(i.getSequence()).getSequenceLength()),
+ i.isNegativeStrand(),
+ i.getName()));
+ }
+
+ log.info("Starting with " + padded.size() + " targets.");
+ padded.uniqued();
+ log.info("After uniquing " + padded.size() + " targets remain.");
+
+ if (MERGE_NEARBY_TARGETS) {
+ final ListIterator<Interval> iterator = padded.getIntervals().listIterator();
+ Interval previous = iterator.next();
+
+ targets = new IntervalList(padded.getHeader());
+
+ while (iterator.hasNext()) {
+ final Interval next = iterator.next();
+ if (previous.getSequence().equals(next.getSequence()) &&
+ estimateBaits(previous.getStart(), previous.getEnd()) + estimateBaits(next.getStart(), next.getEnd()) >=
+ estimateBaits(previous.getStart(), next.getEnd())) {
+ previous = new Interval(previous.getSequence(),
+ previous.getStart(),
+ Math.max(previous.getEnd(), next.getEnd()),
+ previous.isNegativeStrand(),
+ previous.getName());
+ } else {
+ targets.add(previous);
+ previous = next;
+ }
+ }
+
+ if (previous != null) targets.add(previous);
+ log.info("After collapsing nearby targets " + targets.size() + " targets remain.");
+ } else {
+ targets = padded;
+ }
+ }
+
+ final ReferenceSequenceFileWalker referenceWalker = new ReferenceSequenceFileWalker(REFERENCE_SEQUENCE);
+
+ // Check that the reference and the target list have matching headers
+ SequenceUtil.assertSequenceDictionariesEqual(referenceWalker.getSequenceDictionary(),
+ targets.getHeader().getSequenceDictionary());
+
+ // Design the baits!
+ int discardedBaits = 0;
+ final IntervalList baits = new IntervalList(targets.getHeader());
+ for (final Interval target : targets) {
+ final int sequenceIndex = targets.getHeader().getSequenceIndex(target.getSequence());
+ final ReferenceSequence reference = referenceWalker.get(sequenceIndex);
+
+ for (final Bait bait : DESIGN_STRATEGY.design(this, target, reference)) {
+ if (bait.length() != BAIT_SIZE) {
+ throw new PicardException("Bait designed at wrong length: " + bait);
+ }
+
+ if (bait.getMaskedBaseCount() <= REPEAT_TOLERANCE) {
+ baits.add(bait);
+
+ for (final byte b : bait.getBases()) {
+ final byte upper = StringUtil.toUpperCase(b);
+ if (upper != 'A' && upper != 'C' && upper != 'G' && upper != 'T') {
+ log.warn("Bait contains non-synthesizable bases: " + bait);
+ }
+ }
+ } else {
+ log.debug("Discarding bait: " + bait);
+ discardedBaits++;
+ }
+ }
+ }
+
+ calculateStatistics(targets, baits);
+ log.info("Designed and kept " + baits.size() + " baits, discarded " + discardedBaits);
+
+ // Write out some files!
+ originalTargets.write(new File(OUTPUT_DIRECTORY, DESIGN_NAME + ".targets.interval_list"));
+ baits.write(new File(OUTPUT_DIRECTORY, DESIGN_NAME + ".baits.interval_list"));
+ writeParametersFile(new File(OUTPUT_DIRECTORY, DESIGN_NAME + ".design_parameters.txt"));
+ writeDesignFastaFile(new File(OUTPUT_DIRECTORY, DESIGN_NAME + ".design.fasta"), baits);
+ if (POOL_SIZE > 0) writePoolFiles(OUTPUT_DIRECTORY, DESIGN_NAME, baits);
+
+ return 0;
+ }
+
+ /** Calculates a few statistics about the bait design that can then be output. */
+ void calculateStatistics(final IntervalList targets, final IntervalList baits) {
+ this.TARGET_TERRITORY = (int) targets.getUniqueBaseCount();
+ this.TARGET_COUNT = targets.size();
+ this.BAIT_TERRITORY = (int) baits.getUniqueBaseCount();
+ this.BAIT_COUNT = baits.size();
+ this.DESIGN_EFFICIENCY = this.TARGET_TERRITORY / (double) this.BAIT_TERRITORY;
+
+ // Figure out the intersection between all targets and all baits
+ final IntervalList tmp = new IntervalList(targets.getHeader());
+ final OverlapDetector<Interval> detector = new OverlapDetector<Interval>(0, 0);
+ detector.addAll(baits.getIntervals(), baits.getIntervals());
+
+ for (final Interval target : targets) {
+ final Collection<Interval> overlaps = detector.getOverlaps(target);
+
+ if (overlaps.isEmpty()) {
+ this.ZERO_BAIT_TARGETS++;
+ } else {
+ for (final Interval i : overlaps) tmp.add(target.intersect(i));
+ }
+ }
+
+ tmp.uniqued();
+ this.BAIT_TARGET_TERRITORY_INTERSECTION = (int) tmp.getBaseCount();
+ }
+
+ /** Method that writes out all the parameter values that were used in the design using reflection. */
+ void writeParametersFile(final File file) {
+ try {
+ final BufferedWriter out = IOUtil.openFileForBufferedWriting(file);
+ for (final Field field : getClass().getDeclaredFields()) {
+ if (Modifier.isPrivate(field.getModifiers())) continue;
+
+ final String name = field.getName();
+
+ if (name.toUpperCase().equals(name) && !name.equals("USAGE")) {
+ final Object value = field.get(this);
+
+ if (value != null) {
+ out.append(name);
+ out.append("=");
+ out.append(value.toString());
+ out.newLine();
+ }
+ }
+ }
+ out.close();
+ } catch (Exception e) {
+ throw new PicardException("Error writing out parameters file.", e);
+ }
+ }
+
+ void writeDesignFastaFile(final File file, final IntervalList baits) {
+ final BufferedWriter out = IOUtil.openFileForBufferedWriting(file);
+ for (final Interval i : baits) {
+ writeBaitFasta(out, i, false);
+ }
+ CloserUtil.close(out);
+ }
+
+ /** Writes a Bait out in fasta format to an output BufferedWriter. */
+ private void writeBaitFasta(final BufferedWriter out, final Interval i, final boolean rc) {
+ try {
+ final Bait bait = (Bait) i;
+ out.append(">");
+ out.append(bait.getName());
+ out.newLine();
+
+ final String sequence = getBaitSequence(bait, rc);
+ out.append(sequence);
+ out.newLine();
+ } catch (IOException ioe) {
+ throw new PicardException("Error writing out bait information.", ioe);
+ }
+ }
+
+ /** Gets the bait sequence, with primers, as a String, RC'd as appropriate. */
+ private String getBaitSequence(final Bait bait, final boolean rc) {
+ String sequence = (LEFT_PRIMER == null ? "" : LEFT_PRIMER) +
+ StringUtil.bytesToString(bait.getBases()) +
+ (RIGHT_PRIMER == null ? "" : RIGHT_PRIMER);
+
+ if (rc) sequence = SequenceUtil.reverseComplement(sequence);
+ return sequence;
+ }
+
+ /**
+ * Writes out fasta files for each pool and also agilent format files if requested.
+ *
+ * @param dir the directory to output files into
+ * @param basename the basename of each file
+ * @param baits the set of baits to write out
+ */
+ void writePoolFiles(final File dir, final String basename, final IntervalList baits) {
+ final int copies;
+ if (FILL_POOLS && baits.size() < POOL_SIZE) copies = (int) Math.floor(POOL_SIZE / (double) baits.size());
+ else copies = 1;
+
+ int written = 0;
+ int nextPool = 0;
+ BufferedWriter out = null;
+ BufferedWriter agilentOut = null;
+ final String prefix = DESIGN_NAME.substring(0, Math.min(DESIGN_NAME.length(), 8)) + "_"; // prefix for 15 digit bait id
+ final NumberFormat fmt = new DecimalFormat("000000");
+
+ try {
+ for (int i = 0; i < copies; ++i) {
+ final boolean rc = i % 2 == 1;
+
+ int baitId = 1;
+ for (final Interval interval : baits) {
+ final Bait bait = (Bait) interval;
+
+ if (written++ % POOL_SIZE == 0) {
+ if (out != null) out.close();
+ if (agilentOut != null) agilentOut.close();
+
+ final String filename = basename + ".pool" + nextPool++ + ".design.";
+ out = IOUtil.openFileForBufferedWriting(new File(dir, filename + "fasta"));
+ if (OUTPUT_AGILENT_FILES) {
+ agilentOut = IOUtil.openFileForBufferedWriting(new File(dir, filename + "txt"));
+ }
+ }
+
+ writeBaitFasta(out, interval, rc);
+ if (OUTPUT_AGILENT_FILES) {
+ agilentOut.append(prefix).append(fmt.format(baitId++));
+ agilentOut.append("\t");
+ agilentOut.append(getBaitSequence(bait, rc).toUpperCase());
+ agilentOut.newLine();
+ }
+ }
+ }
+
+ CloserUtil.close(out);
+ CloserUtil.close(agilentOut);
+ } catch (Exception e) {
+ throw new PicardException("Error while writing pool files.", e);
+ }
+ }
+}
diff --git a/src/java/picard/util/BasicInputParser.java b/src/java/picard/util/BasicInputParser.java
new file mode 100644
index 0000000..2df0293
--- /dev/null
+++ b/src/java/picard/util/BasicInputParser.java
@@ -0,0 +1,176 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.BufferedLineReader;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.RuntimeIOException;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * TextFileParser which reads a single text file.
+ *
+ * @author Kathleen Tibbetts
+ */
+public class BasicInputParser extends AbstractInputParser
+{
+ private BufferedLineReader reader;
+ private final ArrayList<InputStream> inputs = new ArrayList<InputStream>();
+ private final ArrayList<String> fileNames = new ArrayList<String>();
+ String currentFileName = null;
+ private String currentLine = null;
+ private String nextLine = null;
+ private int currentLineNumber = 0;
+ private int nextLineNumber = 0;
+
+ /**
+ * Constructor. Opens up a buffered reader and reads the first line.
+ *
+ * @param inputStreams the file(s) to parse, in order
+ */
+ public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final InputStream... inputStreams) {
+ if (inputStreams.length == 0) {
+ throw new IllegalArgumentException("At least one input must be specified.");
+ }
+ this.inputs.addAll(Arrays.asList(inputStreams));
+ reader = new BufferedLineReader(this.inputs.remove(0));
+ this.setTreatGroupedDelimitersAsOne(treatGroupedDelimitersAsOne);
+ }
+
+ public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final int wordCount, final InputStream... inputStreams) {
+ this(treatGroupedDelimitersAsOne, inputStreams);
+ setWordCount(wordCount);
+ }
+
+ /**
+ * Constructor. Opens up a buffered reader and reads the first line.
+ *
+ * @param files the file(s) to parse, in order
+ */
+ public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final File... files) {
+ this(treatGroupedDelimitersAsOne, filesToInputStreams(files));
+ for (File f : files) fileNames.add(f.getAbsolutePath());
+ this.currentFileName = fileNames.remove(0);
+ }
+
+ /**
+ * Constructor. In addition to opening and priming the files, it sets the number of
+ * whitespace-separated "words" per line.
+ *
+ * @param files the file(s) to parse
+ * @param wordCount number of whitespace-separated "words" per line
+ */
+ public BasicInputParser(final boolean treatGroupedDelimitersAsOne, final int wordCount, final File... files) {
+ this(treatGroupedDelimitersAsOne, files);
+ setWordCount(wordCount);
+ }
+
+ /**
+ * Workhorse method that reads the next line from the underlying reader
+ *
+ * @return String or null if there is no next line
+ */
+ protected byte[] readNextLine()
+ {
+ try {
+ final String line = reader.readLine();
+ if (nextLine != null && !isComment(nextLine.getBytes())) {
+ currentLineNumber = nextLineNumber;
+ currentLine = nextLine;
+ }
+ if (line != null) {
+ nextLineNumber++;
+ nextLine = line;
+ return line.getBytes();
+ }
+ if (inputs.size() > 0) {
+ advanceFile();
+ return readNextLine();
+ }
+ return null;
+ }
+ catch(RuntimeIOException ioe) {
+ throw new PicardException("Error reading from file " + currentFileName, ioe);
+ }
+ }
+
+ protected void advanceFile() {
+ currentFileName = fileNames.size() > 0 ? fileNames.remove(0) : null;
+ nextLineNumber = 0;
+ nextLine = null;
+ reader = new BufferedLineReader(inputs.remove(0));
+ }
+
+ /**
+ * Closes the underlying stream
+ */
+ public void close() {
+ if (reader != null) {
+ reader.close();
+ }
+ for(final InputStream stream : inputs){
+ CloserUtil.close(stream);
+ }
+ }
+
+ /**
+ * Gets the name of the file being parsed
+ *
+ * @return the name of the file being parsed
+ */
+ public String getFileName() {
+ return this.currentFileName != null ? this.currentFileName : "(file name unavailable)";
+ }
+
+ /**
+ * Provides access to the current (just parsed) line in pre-parsed format.
+ * NOTE: Because AbstractInputParser pre-fetches the next line, this method actually returns the
+ * next line, not the most recent line returned by next().
+ */
+ public String getCurrentLine() {
+ return this.currentLine;
+ }
+
+ /**
+ * NOTE: Because AbstractInputParser pre-fetches the next line, this method actually returns the
+ * next line, not the most recent line returned by next().
+ */
+ public int getCurrentLineNumber() {
+ return currentLineNumber;
+ }
+
+ private static InputStream[] filesToInputStreams(final File files[]) {
+ final InputStream result[] = new InputStream[files.length];
+ for (int i = 0; i < files.length; i++) {
+ result[i] = IOUtil.openFileForReading(files[i]);
+ }
+ return result;
+ }
+}
diff --git a/src/java/picard/util/BedToIntervalList.java b/src/java/picard/util/BedToIntervalList.java
new file mode 100644
index 0000000..113e864
--- /dev/null
+++ b/src/java/picard/util/BedToIntervalList.java
@@ -0,0 +1,138 @@
+package picard.util;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.tribble.AbstractFeatureReader;
+import htsjdk.tribble.CloseableTribbleIterator;
+import htsjdk.tribble.FeatureReader;
+import htsjdk.tribble.annotation.Strand;
+import htsjdk.tribble.bed.BEDCodec;
+import htsjdk.tribble.bed.BEDFeature;
+import htsjdk.variant.utils.SAMSequenceDictionaryExtractor;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Intervals;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author nhomer
+ */
+ at CommandLineProgramProperties(
+ usage = "Converts a BED file to an Picard Interval List.",
+ usageShort = "Converts a BED file to an Picard Interval List.",
+ programGroup = Intervals.class
+)
+public class BedToIntervalList extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "The input BED file")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.SEQUENCE_DICTIONARY_SHORT_NAME, doc = "The sequence dictionary")
+ public File SEQUENCE_DICTIONARY;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output Picard Interval List")
+ public File OUTPUT;
+
+ @Option(doc="If true, sort the output interval list before writing it.")
+ public boolean SORT = true;
+
+ @Option(doc="If true, unique the output interval list by merging overlapping regions, before writing it (implies sort=true).")
+ public boolean UNIQUE = true;
+
+ final Log LOG = Log.getInstance(getClass());
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new BedToIntervalList().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsReadable(SEQUENCE_DICTIONARY);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ try {
+ // create a new header that we will assign the dictionary provided by the SAMSequenceDictionaryExtractor to.
+ final SAMFileHeader header = new SAMFileHeader();
+ final SAMSequenceDictionary samSequenceDictionary = SAMSequenceDictionaryExtractor.extractDictionary(SEQUENCE_DICTIONARY);
+ header.setSequenceDictionary(samSequenceDictionary);
+ // set the sort order to be sorted by coordinate, which is actually done below
+ // by getting the .uniqued() intervals list before we write out the file
+ header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
+ final IntervalList intervalList = new IntervalList(header);
+
+ /**
+ * NB: BED is zero-based, but a BEDCodec by default (since it is returns tribble Features) has an offset of one,
+ * so it returns 1-based starts. Ugh. Set to zero.
+ */
+ final FeatureReader<BEDFeature> bedReader = AbstractFeatureReader.getFeatureReader(INPUT.getAbsolutePath(), new BEDCodec(BEDCodec.StartOffset.ZERO), false);
+ final CloseableTribbleIterator<BEDFeature> iterator = bedReader.iterator();
+ final ProgressLogger progressLogger = new ProgressLogger(LOG, (int) 1e6);
+
+ while (iterator.hasNext()) {
+ final BEDFeature bedFeature = iterator.next();
+ final String sequenceName = bedFeature.getContig();
+ /**
+ * NB: BED is zero-based, so we need to add one here to make it one-based. Please observe we set the start
+ * offset to zero when creating the BEDCodec.
+ */
+ final int start = bedFeature.getStart() + 1;
+ /**
+ * NB: BED is 0-based OPEN (which, for the end is equivalent to 1-based closed).
+ */
+ final int end = bedFeature.getEnd();
+ // NB: do not use an empty name within an interval
+ String name = bedFeature.getName();
+ if (name.isEmpty()) name = null;
+
+ final SAMSequenceRecord sequenceRecord = header.getSequenceDictionary().getSequence(sequenceName);
+
+ // Do some validation
+ if (null == sequenceRecord) {
+ throw new PicardException(String.format("Sequence '%s' was not found in the sequence dictionary", sequenceName));
+ } else if (start < 1) {
+ throw new PicardException(String.format("Start on sequence '%s' was less than one: %d", sequenceName, start));
+ } else if (sequenceRecord.getSequenceLength() < start) {
+ throw new PicardException(String.format("Start on sequence '%s' was past the end: %d < %d", sequenceName, sequenceRecord.getSequenceLength(), start));
+ } else if (end < 1) {
+ throw new PicardException(String.format("End on sequence '%s' was less than one: %d", sequenceName, end));
+ } else if (sequenceRecord.getSequenceLength() < end) {
+ throw new PicardException(String.format("End on sequence '%s' was past the end: %d < %d", sequenceName, sequenceRecord.getSequenceLength(), end));
+ } else if (end < start - 1) {
+ throw new PicardException(String.format("On sequence '%s', end < start-1: %d <= %d", sequenceName, end, start));
+ }
+
+ final boolean isNegativeStrand = bedFeature.getStrand() == Strand.NEGATIVE;
+ final Interval interval = new Interval(sequenceName, start, end, isNegativeStrand, name);
+ intervalList.add(interval);
+
+ progressLogger.record(sequenceName, start);
+ }
+ CloserUtil.close(bedReader);
+
+ // Sort and write the output
+ IntervalList out = intervalList;
+ if (SORT) out = out.sorted();
+ if (UNIQUE) out = out.uniqued();
+ out.write(OUTPUT);
+
+ } catch (final IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/util/CircularByteBuffer.java b/src/java/picard/util/CircularByteBuffer.java
new file mode 100644
index 0000000..d72cb98
--- /dev/null
+++ b/src/java/picard/util/CircularByteBuffer.java
@@ -0,0 +1,94 @@
+package picard.util;
+
+import picard.PicardException;
+
+/**
+ * Implementation of a circular byte buffer that uses a large byte[] internally and supports basic
+ * read/write operations from/to other byte[]s passed as arguments. Uses wait/nofity() to manage
+ * cross-thread coordination when the buffer is either full or empty.
+ */
+public class CircularByteBuffer {
+ private final byte[] bytes;
+ private final int capacity;
+
+ private int nextWritePos = 0;
+ private int bytesAvailableToWrite;
+ private int nextReadPos = 0;
+ private int bytesAvailableToRead = 0;
+
+ private boolean closed = false;
+
+ /** Constructs a buffer capable of holding the given number of bytes. */
+ public CircularByteBuffer(final int size) {
+ this.bytes = new byte[size];
+ this.capacity = this.bytes.length;
+ this.bytesAvailableToWrite = this.capacity;
+ }
+
+ /**
+ * Write bytes into the buffer from the supplied array. Will attempt to read 'size' bytes beginning
+ * at 'start' in the supplied array and copy them into the buffer. If the buffer is near full or
+ * cannot write 'size' bytes contiguously it may write fewer than 'size' bytes.
+ *
+ * @return the number of bytes read from the input array and copied into the buffer
+ */
+ synchronized public int write(final byte[] bytes, final int start, final int size) {
+ if (closed) throw new IllegalStateException("Cannot write to closed buffer.");
+
+ try { if (this.bytesAvailableToWrite == 0) wait(); }
+ catch (final InterruptedException ie) {throw new PicardException("Interrupted while waiting to write to fifo.", ie); }
+
+ final int writePos = this.nextWritePos;
+ final int distanceToEnd = this.capacity - writePos;
+ final int available = distanceToEnd < this.bytesAvailableToWrite ? distanceToEnd : this.bytesAvailableToWrite;
+ final int length = available < size ? available : size;
+
+ System.arraycopy(bytes, start, this.bytes, writePos, length);
+ this.bytesAvailableToWrite -= length;
+ this.bytesAvailableToRead += length;
+ this.nextWritePos = (writePos + length) % this.capacity;
+ notify();
+ return length;
+ }
+
+ /**
+ * Read bytes from the buffer into the supplied array. Will attempt to read 'size' bytes and write
+ * them into the supplied array beginning at index 'start' in the supplied array. If the buffer is
+ * near empty or cannot read 'size' bytes contiguously it may write fewer than 'size' bytes.
+ *
+ * @return the number of bytes read from the buffer and copied into the input array
+ */
+ synchronized public int read(final byte[] bytes, final int start, final int size) {
+ try { if (this.bytesAvailableToRead == 0 && !closed) wait(); }
+ catch (final InterruptedException ie) {throw new PicardException("Interrupted while waiting to read from fifo.", ie); }
+
+ final int readPos = this.nextReadPos;
+ final int distanceToEnd = this.capacity - readPos;
+ final int available = distanceToEnd < this.bytesAvailableToRead ? distanceToEnd : this.bytesAvailableToRead;
+ final int length = available < size ? available : size;
+
+ System.arraycopy(this.bytes, readPos, bytes, start, length);
+ this.bytesAvailableToRead -= length;
+ this.bytesAvailableToWrite += length;
+ this.nextReadPos = (readPos + length) % this.capacity;
+ notify();
+ return length;
+ }
+
+ /** Signals that the buffer is closed and no further writes will occur. */
+ synchronized public void close() {
+ this.closed = true;
+ notify();
+ }
+
+ /** Returns true if the buffer is closed, false otherwise. */
+ synchronized public boolean isClosed() {
+ return this.closed;
+ }
+
+ /** Returns the total capacity of the buffer (empty+filled). */
+ public int getCapacity() { return this.capacity; }
+
+ /** Returns the number of bytes that are in the buffer at the time of the method invocation. */
+ synchronized public int getBytesAvailableToRead() { return this.bytesAvailableToRead; }
+}
\ No newline at end of file
diff --git a/src/java/picard/util/ClippingUtility.java b/src/java/picard/util/ClippingUtility.java
new file mode 100644
index 0000000..c1433d6
--- /dev/null
+++ b/src/java/picard/util/ClippingUtility.java
@@ -0,0 +1,278 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.util;
+
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.SequenceUtil;
+
+/**
+ * Utilities to clip the adapater sequence from a SAMRecord read
+ *
+ * @author Tim Fennell
+ */
+public class ClippingUtility {
+
+ /**
+ * The default value used for the minimum number of contiguous bases to match against.
+ */
+ public static final int MIN_MATCH_BASES = 12;
+ /**
+ * The default value used for the minimum number of contiguous bases to match against in a paired end read
+ */
+ public static final int MIN_MATCH_PE_BASES = 6;
+
+ /**
+ * The default value used for the maximum error rate when matching read bases to clippable sequence.
+ */
+ public static final double MAX_ERROR_RATE = 0.10;
+ /**
+ * The default value used for the maximum error rate when matching paired end read bases to clippable sequence.
+ */
+ public static final double MAX_PE_ERROR_RATE = 0.10;
+
+ /**
+ * The value returned by methods returning int when no match is found.
+ */
+ public static final int NO_MATCH = -1;
+
+ private static final Log log = Log.getInstance(ClippingUtility.class);
+
+ /**
+ * @deprecated Use the varargs version. This no longer returns a warning string..
+ */
+ public static void adapterTrimIlluminaSingleRead(final SAMRecord read, final AdapterPair adapter) {
+ adapterTrimIlluminaSingleRead(read, MIN_MATCH_BASES, MAX_ERROR_RATE, adapter);
+ }
+
+ /**
+ * @deprecated Use the varargs version. This no longer returns a warning string..
+ */
+ public static void adapterTrimIlluminaSingleRead(final SAMRecord read, final AdapterPair adapter,
+ final int minMatchBases, final double maxErrorRate) {
+ adapterTrimIlluminaSingleRead(read, minMatchBases, maxErrorRate, adapter);
+ }
+
+ /**
+ * Invokes adapterTrimIlluminRead with default parameters for a single read.
+ * If the read is a negative strand, its bases will be reverse complemented
+ * Simpler, more common of two overloads. Accepts multiple adapters
+ * and tries them all until it finds the first one that matches.
+ *
+ * @param read SAM/BAM read to trim
+ * @param adapters which adapters to try to use (indexed, paired_end, or single_end)
+ * @return AdapterPair the AdapterPair matched, or null
+ */
+ public static AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read,final AdapterPair ... adapters) {
+ return adapterTrimIlluminaSingleRead(read, MIN_MATCH_BASES, MAX_ERROR_RATE, adapters);
+ }
+
+ /**
+ * Invokes adapterTrimIlluminRead with explicit matching thresholds for a single read.
+ * If the read is a negative strand, a copy of its bases will be reverse complemented.
+ * More general form of the two overloads. Accepts multiple adapters
+ * and tries them all until it finds the first one that matches.
+ *
+ * @param read SAM/BAM read to trim
+ * @param minMatchBases minimum number of contiguous bases to match against in a read
+ * @param maxErrorRate maximum error rate when matching read bases
+ * @param adapters which adapters to try (indexed, paired_end, or single_end)
+ * @return AdapterPair the AdapterPair matched, or null
+ */
+ public static AdapterPair adapterTrimIlluminaSingleRead(final SAMRecord read, final int minMatchBases,
+ final double maxErrorRate, final AdapterPair ... adapters) {
+ for (AdapterPair adapter : adapters) {
+ final int indexOfAdapterSequence = findIndexOfClipSequence(
+ getReadBases(read), adapter.get3PrimeAdapterBytes(), minMatchBases, maxErrorRate);
+ if (indexOfAdapterSequence != NO_MATCH) {
+ // Convert to a one-based index for storage on the record.
+ read.setAttribute(ReservedTagConstants.XT, indexOfAdapterSequence + 1);
+ return adapter;
+ }
+ }
+ return null;
+ }
+ /**
+ * @deprecated Use the varargs version. This no longer returns a warning string..
+ */
+ public static String adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2, final AdapterPair adapters) {
+ adapterTrimIlluminaPairedReads(read1, read2, MIN_MATCH_PE_BASES, MAX_PE_ERROR_RATE, adapters);
+ return null;
+ }
+
+ /**
+ * @deprecated Use the varargs version. This no longer returns a warning string..
+ */
+ public static String adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2,
+ final AdapterPair adapters, final int minMatchBases, final double maxErrorRate) {
+
+ adapterTrimIlluminaPairedReads(read1, read2, minMatchBases, maxErrorRate, adapters);
+ return null;
+ }
+
+ /**
+ * Invokes adapterTrimIlluminaPairedReads with default less stringent parameters for a pair of reads.
+ * If the read is a negative strand, its bases will be reverse complemented
+ * Simpler, more common of two overloads.
+ *
+ * @param read1 first read of the pair
+ * @param read2 second read of the pair
+ * @param adapters which adapters to use (indexed, paired_end, or single_end, nextera), attempted in order
+ * @return int number of bases trimmed
+ */
+ public static AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2, final AdapterPair ... adapters) {
+ return adapterTrimIlluminaPairedReads(read1, read2, MIN_MATCH_PE_BASES, MAX_PE_ERROR_RATE, adapters);
+ }
+
+ /**
+ * Invokes adapterTrimIlluminaRead with explicit parameters for a pair of reads.
+ * More general form of two overloads.
+ * Returns a warning string when the trim positions found differed for each read.
+ *
+ * @param read1 first read of the pair.
+ * If read1 is a negative strand, a copy of its bases will be reverse complemented.
+ * @param read2 second read of the pair.
+ * If read2 is a negative strand, a copy of its bases will be reverse complemented
+ * @param minMatchBases minimum number of contiguous bases to match against in a read
+ * @param maxErrorRate maximum error rate when matching read bases
+ * @param adapters which adapters to use (indexed, paired_end, or single_end, nextera), attempted in order
+ * @return int number of bases trimmed
+ */
+ public static AdapterPair adapterTrimIlluminaPairedReads(final SAMRecord read1, final SAMRecord read2,
+ final int minMatchBases, final double maxErrorRate, final AdapterPair ... adapters) {
+ AdapterPair matched = null;
+
+ for (final AdapterPair adapterPair : adapters) {
+ final int index1 = findIndexOfClipSequence(
+ getReadBases(read1), adapterPair.get3PrimeAdapterBytes(), minMatchBases, maxErrorRate);
+ final int index2 = findIndexOfClipSequence(
+ getReadBases(read2), adapterPair.get5PrimeAdapterBytesInReadOrder(), minMatchBases, maxErrorRate);
+
+ if (index1 == index2) {
+ if (index1 != NO_MATCH) {
+ // This is the best result: both match exactly, we're done
+ read1.setAttribute(ReservedTagConstants.XT, index1 + 1);
+ read2.setAttribute(ReservedTagConstants.XT, index2 + 1);
+ return adapterPair;
+ }
+ else {
+ // Otherwise they were both no match, we just keep trying
+ }
+ } else if (index1 == NO_MATCH || index2 == NO_MATCH) {
+ // One of them matched, but the other didn't.
+ // Try matching the one that did match again with a little tighter
+ // stringency and, if that works, trim both reads at the matching point.
+ // This is only the second-best possibility... keep looking for a perfect match.
+ if(attemptOneSidedMatch(read1, read2, index1, index2, 2 * minMatchBases)) {
+ matched = adapterPair;
+ }
+
+ } else {
+ // Both matched at different positions. Do nothing
+ }
+ }
+
+
+ return matched;
+ }
+
+ /**
+ * When an adapter is matched in only one end of a pair, we check it again with
+ * stricter thresholds. If it still matches, then we trim both ends of the read
+ * at the same location.
+ */
+ private static boolean attemptOneSidedMatch(final SAMRecord read1,
+ final SAMRecord read2,
+ final int index1,
+ final int index2,
+ final int stricterMinMatchBases) {
+
+ // Save all the data about the read where we found the adapter match
+ final int matchedIndex = index1 == NO_MATCH ? index2 : index1;
+ final SAMRecord matchedRead = index1 == NO_MATCH ? read2 : read1;
+
+
+ // If it still matches with a stricter minimum matched bases, then
+ // clip both reads
+ if (matchedRead.getReadLength() - matchedIndex >= stricterMinMatchBases) {
+ if (read1.getReadBases().length > matchedIndex) {
+ read1.setAttribute(ReservedTagConstants.XT, matchedIndex + 1);
+ }
+ if (read2.getReadBases().length > matchedIndex) {
+ read2.setAttribute(ReservedTagConstants.XT, matchedIndex + 1);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns an array of bytes representing the bases in the read,
+ * reverse complementing them if the read is on the negative strand
+ */
+ private static byte[] getReadBases(final SAMRecord read) {
+ if (!read.getReadNegativeStrandFlag()) {
+ return read.getReadBases();
+ }
+ else {
+ final byte[] reverseComplementedBases = new byte[read.getReadBases().length];
+ System.arraycopy(read.getReadBases(), 0, reverseComplementedBases, 0, reverseComplementedBases.length);
+ SequenceUtil.reverseComplement(reverseComplementedBases);
+ return reverseComplementedBases;
+ }
+ }
+
+ /**
+ * Finds the first index of the adapterSequence sequence in the read sequence requiring at least minMatch
+ * bases of pairwise alignment with a maximum number of errors dictated by maxErrorRate.
+ *
+ * @param read
+ */
+ public static int findIndexOfClipSequence(final byte[] read, final byte[] adapterSequence, final int minMatch, final double maxErrorRate) {
+ // If the read's too short we can't possibly match it
+ if (read == null || read.length < minMatch) return NO_MATCH;
+ final int minClipPosition = 0;
+
+ // Walk backwards down the read looking for the sequence
+ READ_LOOP:
+ for (int start = read.length - minMatch; start > minClipPosition -1; --start) {
+ final int length = Math.min(read.length - start, adapterSequence.length);
+ final int mismatchesAllowed = (int) (length * maxErrorRate);
+ int mismatches = 0;
+
+ for (int i = 0; i < length; ++i) {
+ if (!SequenceUtil.isNoCall(adapterSequence[i]) && !SequenceUtil.basesEqual(adapterSequence[i], read[start + i])) {
+ if (++mismatches > mismatchesAllowed) continue READ_LOOP;
+ }
+ }
+
+ // If we got this far without breaking out, then it matches
+ return start;
+ }
+
+ return NO_MATCH;
+ }
+}
diff --git a/src/java/picard/util/CsvInputParser.java b/src/java/picard/util/CsvInputParser.java
new file mode 100644
index 0000000..ca7462a
--- /dev/null
+++ b/src/java/picard/util/CsvInputParser.java
@@ -0,0 +1,36 @@
+package picard.util;
+
+import java.io.File;
+import java.io.InputStream;
+
+public class CsvInputParser extends BasicInputParser {
+ /**
+ * Constructor
+ *
+ * @param stream The input stream(s) to parse
+ */
+ public CsvInputParser(final boolean treatGroupedDelimitersAsOne, final InputStream... stream) {
+ super(treatGroupedDelimitersAsOne, stream);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param file The file(s) to parse
+ */
+ public CsvInputParser(final boolean treatGroupedDelimitersAsOne, final File... file) {
+ super(treatGroupedDelimitersAsOne, file);
+ }
+
+ /**
+ * Determines whether a given character is a delimiter
+ *
+ * @param b the character to evaluate
+ * @return true if <code>b</code> is a delimiter; otherwise false
+ */
+ @Override
+ protected boolean isDelimiter(final byte b) {
+ return b == ',';
+ }
+
+}
diff --git a/src/java/picard/util/DbSnpBitSetUtil.java b/src/java/picard/util/DbSnpBitSetUtil.java
new file mode 100755
index 0000000..355e95c
--- /dev/null
+++ b/src/java/picard/util/DbSnpBitSetUtil.java
@@ -0,0 +1,146 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFileReader;
+
+import java.io.File;
+import java.lang.IllegalArgumentException;import java.lang.String;import java.util.BitSet;import java.util.Collection;import java.util.EnumSet;import java.util.HashMap;import java.util.Map;import java.util.Set;
+
+/**
+ * Utility class to use with DbSnp files to determine is a locus is
+ * a dbSnp site.
+ */
+public class DbSnpBitSetUtil {
+
+ private final Map<String, BitSet> sequenceToBitSet = new HashMap<String,BitSet>();
+
+ /** Little tuple class to contain one bitset for SNPs and another for Indels. */
+ public static class DbSnpBitSets {
+ public DbSnpBitSetUtil snps;
+ public DbSnpBitSetUtil indels;
+ }
+
+ /** Private empty contructor for use by factory methods only. */
+ private DbSnpBitSetUtil() { }
+
+ /** Constructor that creates a bit set with bits set to true for all variant types. */
+ public DbSnpBitSetUtil(final File dbSnpFile, final SAMSequenceDictionary sequenceDictionary) {
+ this(dbSnpFile, sequenceDictionary, EnumSet.noneOf(VariantType.class));
+ }
+
+ /**
+ * Constructor.
+ *
+ * For each sequence, creates a BitSet that denotes whether a dbSNP entry
+ * is present at each base in the reference sequence. The set is
+ * reference.length() + 1 so that it can be indexed by 1-based reference base.
+ * True means dbSNP present, false means no dbSNP present.
+ *
+ * @param dbSnpFile in VCF format.
+ * @param sequenceDictionary Optionally, a sequence dictionary corresponding to the dbSnp file, else null.
+ * If present, BitSets will be allocated more efficiently because the maximum size will be known.
+ * @param variantsToMatch what types of variants to load.
+ */
+ public DbSnpBitSetUtil(final File dbSnpFile,
+ final SAMSequenceDictionary sequenceDictionary,
+ final Collection<VariantType> variantsToMatch) {
+
+ if (dbSnpFile == null) throw new IllegalArgumentException("null dbSnpFile");
+ final Map<DbSnpBitSetUtil, Set<VariantType>> tmp = new HashMap<DbSnpBitSetUtil, Set<VariantType>>();
+ tmp.put(this, EnumSet.copyOf(variantsToMatch));
+ loadVcf(dbSnpFile, sequenceDictionary, tmp);
+ }
+
+ /** Factory method to create both a SNP bitmask and an indel bitmask in a single pass of the VCF. */
+ public static DbSnpBitSets createSnpAndIndelBitSets(final File dbSnpFile,
+ final SAMSequenceDictionary sequenceDictionary) {
+
+ final DbSnpBitSets sets = new DbSnpBitSets();
+ sets.snps = new DbSnpBitSetUtil();
+ sets.indels = new DbSnpBitSetUtil();
+
+ final Map<DbSnpBitSetUtil, Set<VariantType>> map = new HashMap<DbSnpBitSetUtil, Set<VariantType>>();
+ map.put(sets.snps, EnumSet.of(VariantType.SNP));
+ map.put(sets.indels, EnumSet.of(VariantType.insertion, VariantType.deletion));
+ loadVcf(dbSnpFile, sequenceDictionary, map);
+ return sets;
+ }
+
+ /** Private helper method to read through the VCF and create one or more bit sets. */
+ private static void loadVcf(final File dbSnpFile,
+ final SAMSequenceDictionary sequenceDictionary,
+ final Map<DbSnpBitSetUtil, Set<VariantType>> bitSetsToVariantTypes) {
+
+ final VCFFileReader variantReader = new VCFFileReader(dbSnpFile);
+ final CloseableIterator<VariantContext> variantIterator = variantReader.iterator();
+
+ while (variantIterator.hasNext()) {
+ final VariantContext kv = variantIterator.next();
+
+ for (final Map.Entry<DbSnpBitSetUtil, Set<VariantType>> tuple : bitSetsToVariantTypes.entrySet()) {
+ final DbSnpBitSetUtil bitset = tuple.getKey();
+ final Set<VariantType> variantsToMatch = tuple.getValue();
+
+ BitSet bits = bitset.sequenceToBitSet.get(kv.getChr());
+ if (bits == null) {
+ final int nBits;
+ if (sequenceDictionary == null) nBits = kv.getEnd() + 1;
+ else nBits = sequenceDictionary.getSequence(kv.getChr()).getSequenceLength() + 1;
+ bits = new BitSet(nBits);
+ bitset.sequenceToBitSet.put(kv.getChr(), bits);
+ }
+ if (variantsToMatch.isEmpty() ||
+ (kv.isSNP() && variantsToMatch.contains(VariantType.SNP)) ||
+ (kv.isIndel() && variantsToMatch.contains(VariantType.insertion)) ||
+ (kv.isIndel() && variantsToMatch.contains(VariantType.deletion))) {
+
+ for (int i = kv.getStart(); i <= kv.getEnd(); i++) bits.set(i, true);
+ }
+ }
+ }
+
+ CloserUtil.close(variantIterator);
+ CloserUtil.close(variantReader);
+ }
+
+ /**
+ * Returns true if there is a dbSnp entry at pos in sequenceName, otherwise false
+ */
+ public boolean isDbSnpSite(final String sequenceName, final int pos) {
+ // When we have a dbSnpFile with no sequence dictionary, this line will be necessary
+ if (sequenceToBitSet.get(sequenceName) == null) {
+ return false;
+ }
+ if (pos > sequenceToBitSet.get(sequenceName).length()) {
+ return false;
+ }
+ return sequenceToBitSet.get(sequenceName).get(pos);
+ }
+
+}
diff --git a/src/java/picard/util/DelimitedTextFileWithHeaderIterator.java b/src/java/picard/util/DelimitedTextFileWithHeaderIterator.java
new file mode 100644
index 0000000..246767d
--- /dev/null
+++ b/src/java/picard/util/DelimitedTextFileWithHeaderIterator.java
@@ -0,0 +1,115 @@
+package picard.util;
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.PicardException;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Iterate through a delimited text file in which columns are found by looking at a header line rather than by position.
+ *
+ * TODO: This effectively replaces TabbedTextFileWithHeaderParser although the latter hasn't been modified to use this
+ * code instead.
+ *
+ * @author jgentry at broadinstitute.org
+ */
+public class DelimitedTextFileWithHeaderIterator implements CloseableIterator<DelimitedTextFileWithHeaderIterator.Row> {
+ public class Row {
+ private final String[] fields;
+ private final String currentLine;
+
+ Row(final String[] fields, final String source) {
+ this.fields = fields;
+ this.currentLine = source;
+ }
+
+ /**
+ * @return Array of fields in the order they appear in the file.
+ */
+ public String[] getFields() {
+ return fields;
+ }
+
+ public String getField(final String columnLabel) {
+ final Integer key = columnLabelIndices.get(columnLabel);
+ if (key == null) throw new NoSuchElementException(String.format("column %s in %s", columnLabel, parser.getFileName()));
+ return fields[key];
+ }
+
+ public Integer getIntegerField(final String columnLabel) {
+ if (fields[columnLabelIndices.get(columnLabel)] == null) return null;
+ return Integer.parseInt(fields[columnLabelIndices.get(columnLabel)]);
+ }
+
+ public String getCurrentLine() {
+ return this.currentLine;
+ }
+ }
+
+ /**
+ * Map from column label to positional index.
+ */
+ private final Map<String, Integer> columnLabelIndices = new HashMap<String, Integer>();
+ private final BasicInputParser parser;
+
+ public DelimitedTextFileWithHeaderIterator(final BasicInputParser parser) {
+ this.parser = parser;
+ if (!parser.hasNext()) {
+ throw new PicardException("No header line found in file " + parser.getFileName());
+ }
+ final String[] columnLabels = parser.next();
+ for (int i = 0; i < columnLabels.length; ++i) {
+ columnLabelIndices.put(columnLabels[i], i);
+ }
+ }
+
+ /**
+ * @param columnLabel
+ * @return True if the given column label appears in the header.
+ */
+ public boolean hasColumn(final String columnLabel) {
+ return columnLabelIndices.containsKey(columnLabel);
+ }
+
+ /**
+ *
+ * @return The set of column labels for this file in no particular order.
+ */
+ public Set<String> columnLabels() {
+ return columnLabelIndices.keySet();
+ }
+
+ public int getCurrentLineNumber() {
+ return parser.getCurrentLineNumber();
+ }
+
+ public Set<String> getColumnNames() {
+ return Collections.unmodifiableSet(this.columnLabelIndices.keySet());
+ }
+
+ @Override
+ public boolean hasNext() {
+ return parser.hasNext();
+ }
+
+ @Override
+ public Row next() {
+ final String[] fields = parser.next();
+ final String source = parser.getCurrentLine();
+ return new Row(fields, source);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void close() {
+ parser.close();
+ }
+}
diff --git a/src/java/picard/util/FifoBuffer.java b/src/java/picard/util/FifoBuffer.java
new file mode 100644
index 0000000..2055886
--- /dev/null
+++ b/src/java/picard/util/FifoBuffer.java
@@ -0,0 +1,177 @@
+package picard.util;
+
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.RuntimeIOException;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.None;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+
+/**
+ * A program that is designed to act as a large memory buffer between processes that are
+ * connected with unix pipes where one or more processes either produce or consume their
+ * input or output in bursts. By inserting a large memory buffer between such processes
+ * each process can run at full speed and the bursts can be smoothed out.
+ *
+ * For example:
+ * java -jar SamToFastq.jar F=my.fastq INTERLEAVE=true | java -jar FifoBuffer | bwa mem -t 8 ...
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Provides a large, configurable, FIFO buffer that can be used to buffer input and output " +
+ "streams between programs with a buffer size that is larger than that offered by native unix FIFOs (usually 64k).",
+ usageShort = "FIFO buffer used to buffer input and output streams with a customizable buffer size ",
+ programGroup = None.class
+)
+public class FifoBuffer extends CommandLineProgram {
+ @Option(doc="The size of the memory buffer in bytes.")
+ public int BUFFER_SIZE = 512 * 1024 * 1024;
+
+ @Option(doc="The size, in bytes, to read/write atomically to the input and output streams.")
+ public int IO_SIZE = 64 * 1024; // 64k == most common unix pipe buffer size
+
+ @Option(doc="How frequently, in seconds, to report debugging statistics. Set to zero for never.")
+ public int DEBUG_FREQUENCY = 0;
+
+ @Option(doc="Name to use for Fifo in debugging statements.", optional=true)
+ public String NAME;
+
+ // Standard log object
+ private final Log log = Log.getInstance(FifoBuffer.class);
+
+ /** The input stream that bytes will be read from and deposited into the byte buffer. */
+ private final InputStream inputStream;
+
+ /** The output [Print] stream which bytes read from the buffer will be emitted into. */
+ private final PrintStream outputStream;
+
+ /** Small custom exception handler for threads. */
+ class LoggingExceptionHandler implements Thread.UncaughtExceptionHandler {
+ public Throwable throwable;
+
+ @Override public void uncaughtException(final Thread t, final Throwable e) {
+ this.throwable = e;
+ log.error(e, "Exception caught on thread ", t.getName());
+ }
+ }
+
+ /**
+ * Constructor that defaults to QUIET since Fifos don't do anything beyond buffering having their
+ * start/end information logged is often undesirable.
+ */
+ public FifoBuffer(final InputStream in, final PrintStream out) {
+ this.inputStream = in;
+ this.outputStream = out;
+ this.QUIET=true;
+ }
+
+ /**
+ * Constructor that defaults to QUIET since Fifos don't do anything beyond buffering having their
+ * start/end information logged is often undesirable.
+ */
+ public FifoBuffer() {
+ this(System.in, System.out);
+ }
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new FifoBuffer().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ final CircularByteBuffer fifo = new CircularByteBuffer(BUFFER_SIZE);
+
+ // Input thread that reads from inputStream until it is closed and writes the contents
+ // into the circular byte buffer.
+ final Thread input = new Thread(new Runnable() {
+ @Override public void run() {
+ try {
+ final byte[] buffer = new byte[IO_SIZE];
+ int read = 0;
+ while ((read = inputStream.read(buffer)) > -1) {
+ int start = 0;
+ while (start < read) {
+ start += fifo.write(buffer, start, read-start);
+ }
+ }
+ }
+ catch (final IOException ioe) {
+ throw new RuntimeIOException(ioe);
+ }
+ finally {
+ fifo.close();
+ }
+ }
+ });
+
+ // Output thread that reads from the circular byte buffer until it is closed and writes
+ // the results to the outputStream
+ final Thread output = new Thread(new Runnable() {
+ @Override public void run() {
+ final byte[] buffer = new byte[IO_SIZE];
+ int read = 0;
+ while ((read = fifo.read(buffer, 0, buffer.length)) > 0 || !fifo.isClosed()) {
+ outputStream.write(buffer, 0, read);
+ }
+ }
+ });
+
+ try {
+ // If debugging is turned on then start another thread that will report on the utilization of the
+ // circular byte buffer every N seconds.
+ if (DEBUG_FREQUENCY > 0) {
+ final Thread debug = new Thread(new Runnable() {
+ @Override public void run() {
+ final NumberFormat pFmt = NumberFormat.getPercentInstance();
+ final NumberFormat iFmt = new DecimalFormat("#,##0");
+ while (true) {
+ final int capacity = fifo.getCapacity();
+ final int used = fifo.getBytesAvailableToRead();
+ final double pct = used / (double) capacity;
+ final String name = NAME == null ? "" : NAME + " ";
+ log.info("Fifo buffer ", name, "used ", iFmt.format(used), " / ", iFmt.format(capacity), " (", pFmt.format(pct), ").");
+ try { Thread.sleep(DEBUG_FREQUENCY * 1000); } catch (final InterruptedException ie) { /* do nothing */ }
+ }
+ }
+ });
+
+ debug.setName("BufferDebugThread");
+ debug.setDaemon(true);
+ debug.start();
+ }
+
+ // Start the input and output threads.
+ final LoggingExceptionHandler inputExceptionHandler = new LoggingExceptionHandler();
+ input.setUncaughtExceptionHandler(inputExceptionHandler);
+ input.setName("Fifo Input Thread");
+ input.start();
+
+ final LoggingExceptionHandler outputExceptionHandler = new LoggingExceptionHandler();
+ output.setUncaughtExceptionHandler(new LoggingExceptionHandler());
+ output.setName("Fifo Output Thread");
+ output.start();
+
+ // Join on both the input and output threads to make sure that we've fully flushed the buffer
+ input.join();
+ output.join();
+
+ // Double check that neither thread exited with an exception; If so propagate the exception
+ if (inputExceptionHandler.throwable != null) throw new PicardException("Exception on input thread.", inputExceptionHandler.throwable);
+ if (outputExceptionHandler.throwable != null) throw new PicardException("Exception on output thread.", outputExceptionHandler.throwable);
+ }
+ catch (final InterruptedException ie) {
+ throw new PicardException("Interrupted!", ie);
+ }
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/util/FileChannelJDKBugWorkAround.java b/src/java/picard/util/FileChannelJDKBugWorkAround.java
new file mode 100644
index 0000000..0779344
--- /dev/null
+++ b/src/java/picard/util/FileChannelJDKBugWorkAround.java
@@ -0,0 +1,64 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import picard.PicardException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+
+/**
+ * Work-around for the following bug
+ * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6503430
+ *
+ * Call the method in the main thread before launching threads that do memory-mapping.
+ * @author alecw at broadinstitute.org
+ */
+public class FileChannelJDKBugWorkAround {
+ private static boolean alreadyCalled = false;
+
+ public static byte doBugWorkAround() {
+ if (alreadyCalled) return 0;
+ try {
+ File tmpFile = File.createTempFile("ignore-me.", ".bug-work-around");
+ FileWriter writer = new FileWriter(tmpFile);
+ writer.write("Hi, Mom!");
+ writer.close();
+ FileInputStream is = new FileInputStream(tmpFile);
+ ByteBuffer buf = is.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, tmpFile.length());
+ is.close();
+ byte ret = buf.get();
+ tmpFile.delete();
+ alreadyCalled = true;
+ return ret;
+ } catch (IOException e) {
+ throw new PicardException("IOException", e);
+ }
+
+ }
+}
diff --git a/src/java/picard/util/IlluminaUtil.java b/src/java/picard/util/IlluminaUtil.java
new file mode 100644
index 0000000..34a369f
--- /dev/null
+++ b/src/java/picard/util/IlluminaUtil.java
@@ -0,0 +1,224 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.FormatUtil;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.SolexaQualityConverter;
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+
+import java.util.List;
+
+/**
+ * Misc utilities for working with Illumina specific files and data
+ *
+ * @author jburke at broadinstitute.org
+ */
+public class IlluminaUtil {
+
+ public static final String BARCODE_DELIMITER = "-";
+
+ /**
+ * Parse the tile # from the read name.
+ * If we find that there are other elements needed from the read name, it might be a good idea to put
+ * makeReadName() and various get..() methods into a new class.
+ *
+ * @param readName As produced by IlluminaUtil.makeReadName()
+ * @return tile number, or null if read name is not in correct format.
+ */
+ public static Integer getTileFromReadName(final String readName) {
+ final int first = readName.indexOf(':');
+ if (first > 0) {
+ final int second = readName.indexOf(':', first+1);
+ if (second > 0) {
+ final int third = readName.indexOf(':', second+1);
+ if (third > 0) {
+ return Integer.parseInt(readName.substring(second+1, third));
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Convert from Solexa-scaled ASCII qualities to Phred-scaled binary. The only difference is Solexa qualities have
+ * 64 added to the phred binary to make them printable.
+ *
+ * @param solexaQualities Printable ASCII qualities.
+ * @return binary Phred-scaled qualities.
+ */
+ public static byte[] makePhredBinaryFromSolexaQualityAscii_1_3(final String solexaQualities) {
+ return makePhredBinaryFromSolexaQualityAscii_1_3(solexaQualities, 0, solexaQualities.length());
+ }
+
+ /**
+ * Convert from Solexa-scaled ASCII qualities to Phred-scaled binary. The only difference is Solexa qualities have
+ * 64 added to the phred binary to make them printable.
+ *
+ * @param solexaQualities Printable ASCII qualities.
+ * @param offset Character at which to start conversion.
+ * @param length Number of characters to convert.
+ * @return binary Phred-scaled qualities.
+ */
+ public static byte[] makePhredBinaryFromSolexaQualityAscii_1_3(final String solexaQualities, final int offset, final int length) {
+ final byte[] quals = StringUtil.stringToBytes(solexaQualities, offset, length);
+ SolexaQualityConverter.getSingleton().convertSolexa_1_3_QualityCharsToPhredBinary(quals);
+ return quals;
+ }
+
+ /**
+ * Converts from Solexa ASCII to Phred binary in place. These are the older-style qualities
+ * rather than Phred qualities with a different addend to make them printable.
+ */
+ public static void convertSolexaQualityAscii_1_1_ToPhredBinary(final byte[] solexaQualities) {
+ SolexaQualityConverter.getSingleton().convertSolexaQualityCharsToPhredBinary(solexaQualities);
+ }
+
+ /**
+ * Get a Solexa ASCII quality value from an array of strings that are integer qualities in this order:
+ * [cycle-1-A, cycle-1-C, cycle-1-G, cycle-1-T, cycle-2-A, ...]. The best quality from the 4 qualities for
+ * the cycle is found, and then it is ASCII-ized by adding 64.
+ * @param qualities Array of integer quality strings.
+ * @param cycleNumber Which cycle to get quality for.
+ * @param formatter For converting decimal strings to ints.
+ * @return best quality for the given cycle.
+ * @throws picard.PicardException if the best quality ASCII value is > 255.
+ */
+ public static byte getSolexaQualityCharFromFourQualities(final String[] qualities, final int cycleNumber, final FormatUtil formatter) {
+ // It apparently is the case that all 4 qualities might be negative, but this appears to correspond to
+ // an no-called base.
+ int bestQuality = Integer.MIN_VALUE;
+ final int startOffset = (cycleNumber - 1) * 4;
+ for (int i = startOffset; i < startOffset + 4; ++i) {
+ final int quality = formatter.parseInt(qualities[i]);
+ if (quality > bestQuality) {
+ bestQuality = quality;
+ }
+ }
+ final int qualityAsCharacter = bestQuality + SolexaQualityConverter.SOLEXA_ADDEND;
+ if (qualityAsCharacter > 255) {
+ throw new PicardException("Quality too large: " + bestQuality);
+ }
+ return (byte)(qualityAsCharacter & 0xff);
+ }
+
+ // Strings indented below to make these easier to compare visually.
+ /** Describes adapters used on each pair of strands */
+ public static enum IlluminaAdapterPair implements AdapterPair {
+
+ PAIRED_END( "AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT", //58 bases)
+ "AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG"), // 61 bases
+
+ INDEXED ( "AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT",
+ "AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"), // note 8 N's // 67 bases
+
+ SINGLE_END ( "AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT",
+ "AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"),
+
+ NEXTERA_V1( "AATGATACGGCGACCACCGAGATCTACACGCCTCCCTCGCGCCATCAGAGATGTGTATAAGAGACAG",
+ "CTGTCTCTTATACACATCTCTGAGCGGGCTGGCAAGGCAGACCGNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
+
+ NEXTERA_V2( "AATGATACGGCGACCACCGAGATCTACACNNNNNNNNTCGTCGGCAGCGTCAGATGTGTATAAGAGACAG",
+ "CTGTCTCTTATACACATCTCCGAGCCCACGAGACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
+
+ DUAL_INDEXED( "AATGATACGGCGACCACCGAGATCTNNNNNNNNACACTCTTTCCCTACACGACGCTCTTCCGATCT",
+ "AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
+
+ FLUIDIGM( "AATGATACGGCGACCACCGAGATCTACACTGACGACATGGTTCTACA",
+ "AGACCAAGTCTCTGCTACCGTANNNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
+
+ TRUSEQ_SMALLRNA( "AATGATACGGCGACCACCGAGATCTACACGTTCAGAGTTCTACAGTCCGACGATC",
+ "TGGAATTCTCGGGTGCCAAGGAACTCCAGTCACNNNNNNATCTCGTATGCCGTCTTCTGCTTG"),
+
+ // This one is at the end of the list because its 3' is a subset of several of the 3's above.
+ // There are unit tests that try all AdapterPairs, and this one should go at the end os
+ // it is checked last.
+ ALTERNATIVE_SINGLE_END("AATGATACGGCGACCACCGACAGGTTCAGAGTTCTACAGTCCGACGATC",
+ "TCGTATGCCGTCTTCTGCTTG"),
+
+ ;
+
+ final String fivePrime, threePrime, fivePrimeReadOrder;
+ final byte[] fivePrimeBytes, threePrimeBytes, fivePrimeReadOrderBytes;
+
+
+ private IlluminaAdapterPair(final String fivePrime, final String threePrime) {
+ this.threePrime = threePrime;
+ this.threePrimeBytes = StringUtil.stringToBytes(threePrime);
+
+ this.fivePrime = fivePrime;
+ this.fivePrimeReadOrder = SequenceUtil.reverseComplement(fivePrime);
+ this.fivePrimeBytes = StringUtil.stringToBytes(fivePrime);
+ this.fivePrimeReadOrderBytes = StringUtil.stringToBytes(fivePrimeReadOrder);
+ }
+
+ public String get3PrimeAdapter(){ return threePrime; }
+ public String get5PrimeAdapter(){ return fivePrime; }
+ public String get3PrimeAdapterInReadOrder(){ return threePrime; }
+ public String get5PrimeAdapterInReadOrder() { return fivePrimeReadOrder; }
+ public byte[] get3PrimeAdapterBytes() { return threePrimeBytes; }
+ public byte[] get5PrimeAdapterBytes() { return fivePrimeBytes; }
+ public byte[] get3PrimeAdapterBytesInReadOrder() { return threePrimeBytes; }
+ public byte[] get5PrimeAdapterBytesInReadOrder() { return fivePrimeReadOrderBytes; }
+ public String getName() { return this.name(); }
+ }
+
+ /**
+ * Concatenates all the barcode sequences with BARCODE_DELIMITER
+ * @param barcodes
+ * @return A single string representation of all the barcodes
+ */
+ public static String barcodeSeqsToString(final List<String> barcodes) {
+ return barcodeSeqsToString(barcodes.toArray(new String[barcodes.size()]));
+ }
+
+ /**
+ * Concatenates all the barcode sequences with BARCODE_DELIMITER
+ * @param barcodes
+ * @return A single string representation of all the barcodes
+ */
+ public static String barcodeSeqsToString(final String barcodes[]) {
+ final StringBuilder sb = new StringBuilder();
+ for (final String bc : barcodes) {
+ if (sb.length() > 0) sb.append(BARCODE_DELIMITER);
+ sb.append(bc);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Concatenates all the barcode sequences with BARCODE_DELIMITER
+ * @param barcodes
+ * @return A single string representation of all the barcodes
+ */
+ public static String barcodeSeqsToString(final byte barcodes[][]) {
+ final String bcs[] = new String[barcodes.length];
+ for (int i = 0; i < barcodes.length; i++) {
+ bcs[i] = StringUtil.bytesToString(barcodes[i]);
+ }
+ return barcodeSeqsToString(bcs);
+ }
+}
diff --git a/src/java/picard/util/IntervalListScatterer.java b/src/java/picard/util/IntervalListScatterer.java
new file mode 100644
index 0000000..125182b
--- /dev/null
+++ b/src/java/picard/util/IntervalListScatterer.java
@@ -0,0 +1,180 @@
+package picard.util;
+
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import picard.PicardException;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * @author mccowan
+ */
+public class IntervalListScatterer {
+
+ public enum Mode {
+ /**
+ * A simple scatter approach in which all output intervals have size equal to the total base count of the source list divide by the
+ * scatter count (except for possible variance in the final interval list).
+ */
+ INTERVAL_SUBDIVISION,
+ /**
+ * A scatter approach that differs from {@link Mode#INTERVAL_SUBDIVISION} in a few ways.
+ * <ol>
+ * <li>No interval will be subdivided, and consequently, the requested scatter count is an upper bound of scatter count, not a
+ * guarantee as to how many {@link IntervalList}s will be produced (e.g., if scatterCount = 10 but there is only one input interval,
+ * only 1 interval list will be emitted).</li>
+ * <li>When an interval would otherwise be split, it is instead deferred to the next scatter list.</li>
+ * <li>The "target width" of each scatter list may be wider than what is computed for {@link Mode#INTERVAL_SUBDIVISION}.
+ * Specifically, if the widest interval in the source interval list is larger than what would otherwise be the target width, that
+ * interval's width is used.<br/><br/>The reasoning for this is that this approach produces more consistently-sized interval lists,
+ * which is one of the objectives of scattering.</li>
+ * </ol>
+ */
+ BALANCING_WITHOUT_INTERVAL_SUBDIVISION,
+ /**
+ * A scatter approach that differs from {@link Mode#BALANCING_WITHOUT_INTERVAL_SUBDIVISION}.
+ * <ol>
+ * <li>We try to balance the number of unique bases in each interval list by estimating the remaining interval lists sizes. This is
+ * computed from the total number of unique bases and the bases we have consumed. This means that the interval list with the most
+ * number of unique bases is at most the ideal split length larger than the smallest interval list (unique # of bases).</li>
+ * </ol>
+ */
+ BALANCING_WITHOUT_INTERVAL_SUBDIVISION_WITH_OVERFLOW
+ }
+
+ private final Mode mode;
+
+ public IntervalListScatterer(final Mode mode) {this.mode = mode;}
+
+ private int deduceIdealSplitLength(final IntervalList uniquedList, final int scatterCount) {
+ final int splitWidth = Math.max((int) Math.floor(uniquedList.getBaseCount() / (1.0 * scatterCount)), 1);
+ switch (mode) {
+ case INTERVAL_SUBDIVISION:
+ return splitWidth;
+ case BALANCING_WITHOUT_INTERVAL_SUBDIVISION:
+ case BALANCING_WITHOUT_INTERVAL_SUBDIVISION_WITH_OVERFLOW:
+ final int widestIntervalLength = Collections.max(uniquedList.getIntervals(), new Comparator<Interval>() {
+ @Override
+ public int compare(final Interval o1, final Interval o2) {
+ return Integer.valueOf(o1.length()).compareTo(o2.length());
+ }
+ }).length();
+
+ // There is no purpose to splitting more granularly than the widest interval, so do not.
+ return Math.max(widestIntervalLength, splitWidth);
+ default:
+ throw new IllegalStateException();
+ }
+ }
+
+ public List<IntervalList> scatter(final IntervalList uniquedIntervalList, final int scatterCount) {
+ return scatter(uniquedIntervalList, scatterCount, false);
+ }
+
+ /** Helper for the scatter method */
+ private boolean shouldAddToRunningIntervalList(final long idealSplitLength, final long projectedSize, final double projectedSizeOfRemainingDivisions) {
+ switch (mode) {
+ case BALANCING_WITHOUT_INTERVAL_SUBDIVISION_WITH_OVERFLOW:
+ return (projectedSize <= idealSplitLength || idealSplitLength < projectedSizeOfRemainingDivisions);
+ default:
+ return (projectedSize <= idealSplitLength);
+ }
+ }
+
+
+ public List<IntervalList> scatter(final IntervalList sourceIntervalList, final int scatterCount, final boolean isUniqued) {
+ if (scatterCount < 1) throw new IllegalArgumentException("scatterCount < 1");
+
+ final IntervalList uniquedList = isUniqued ? sourceIntervalList : sourceIntervalList.uniqued();
+ final long idealSplitLength = deduceIdealSplitLength(uniquedList, scatterCount);
+ System.err.println("idealSplitLength=" + idealSplitLength);
+
+ final List<IntervalList> accumulatedIntervalLists = new ArrayList<IntervalList>();
+
+ IntervalList runningIntervalList = new IntervalList(uniquedList.getHeader());
+ final ArrayDeque<Interval> intervalQueue = new ArrayDeque<Interval>(uniquedList.getIntervals());
+
+ long numBasesLeft = uniquedList.getBaseCount();
+
+ while (!intervalQueue.isEmpty() && accumulatedIntervalLists.size() < scatterCount - 1) {
+ final Interval interval = intervalQueue.pollFirst();
+ final long projectedSize = runningIntervalList.getBaseCount() + interval.length();
+
+ // The mean expected size of the remaining divisions
+ // NOTE: that this looks like double counting but isn't, we subtract here the bases that are in the _current_ running intervalList,
+ // and when we create a new intervalList (below) we modify numBasesLeft.
+ // Another Note: the -1 in the denominator is for "runningIntervalList" that isn't yet counted in accumulatedIntervalLists.size()
+ final double projectedSizeOfRemainingDivisions = (numBasesLeft - runningIntervalList.getBaseCount()) / ((double)(scatterCount - accumulatedIntervalLists.size() - 1));
+
+ // should we add this interval to the list of running intervals?
+ if (shouldAddToRunningIntervalList(idealSplitLength, projectedSize, projectedSizeOfRemainingDivisions)) {
+ runningIntervalList.add(interval);
+ }
+ else {
+ switch (mode) {
+ case INTERVAL_SUBDIVISION:
+ final int amountToConsume = (int) (idealSplitLength - runningIntervalList.getBaseCount());
+ final Interval left = new Interval(
+ interval.getContig(),
+ interval.getStart(),
+ interval.getStart() + amountToConsume - 1,
+ interval.isNegativeStrand(),
+ interval.getName()
+ );
+ final Interval right = new Interval(
+ interval.getContig(),
+ interval.getStart() + amountToConsume,
+ interval.getEnd(),
+ interval.isNegativeStrand(),
+ interval.getName()
+ );
+ runningIntervalList.add(left);
+
+ // Push back the excess back onto our queue for reconsideration.
+ intervalQueue.addFirst(right);
+ break;
+
+ case BALANCING_WITHOUT_INTERVAL_SUBDIVISION:
+ case BALANCING_WITHOUT_INTERVAL_SUBDIVISION_WITH_OVERFLOW:
+ if (runningIntervalList.getIntervals().isEmpty()) {
+ runningIntervalList.add(interval);
+ } else {
+ // Push this interval into the next scatter; re-inject it into the queue, then advance the scatter.
+ intervalQueue.addFirst(interval);
+ numBasesLeft -= runningIntervalList.getBaseCount();
+ accumulatedIntervalLists.add(runningIntervalList.uniqued());
+ runningIntervalList = new IntervalList(uniquedList.getHeader());
+ }
+ break;
+ }
+ }
+
+ if (runningIntervalList.getBaseCount() >= idealSplitLength) {
+ numBasesLeft -= runningIntervalList.getBaseCount(); // keep track of the number of *unique* bases left
+ accumulatedIntervalLists.add(runningIntervalList.uniqued());
+ runningIntervalList = new IntervalList(uniquedList.getHeader());
+ }
+ }
+
+ // Flush the remaining intervals into the last split.
+ while (!intervalQueue.isEmpty()) {
+ runningIntervalList.add(intervalQueue.pollFirst());
+ }
+ if (!runningIntervalList.getIntervals().isEmpty()) {
+ accumulatedIntervalLists.add(runningIntervalList.uniqued());
+ }
+
+ long maximumIntervalSize = -1, minimumIntervalSize = Integer.MAX_VALUE;
+ for (final IntervalList intervalList : accumulatedIntervalLists) {
+ final long baseCount = intervalList.getBaseCount();
+ if (baseCount < minimumIntervalSize) minimumIntervalSize = baseCount;
+ if (maximumIntervalSize < baseCount) maximumIntervalSize = baseCount;
+ }
+
+ return accumulatedIntervalLists;
+ }
+}
diff --git a/src/java/picard/util/IntervalListTools.java b/src/java/picard/util/IntervalListTools.java
new file mode 100644
index 0000000..759fba7
--- /dev/null
+++ b/src/java/picard/util/IntervalListTools.java
@@ -0,0 +1,364 @@
+package picard.util;
+
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.variant.vcf.VCFFileReader;
+import picard.PicardException;
+import picard.cmdline.CommandLineParser;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.programgroups.Intervals;
+import picard.cmdline.StandardOptionDefinitions;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Little class to aid working with interval lists.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = " General tool for manipulating interval lists, " +
+ "including sorting, merging, padding, uniqueifying, and other set-theoretic operations. Default operation if given one or more inputs is to " +
+ "merge and sort them. Other options are controlled by arguments.",
+ usageShort = "General tool for manipulating interval lists",
+ programGroup = Intervals.class
+)
+public class IntervalListTools extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME,
+ doc = "One or more interval lists. If multiple interval lists are provided the output is the" +
+ "result of merging the inputs. Supported formats are interval_list and VCF.", minElements = 1)
+ public List<File> INPUT;
+
+ @Option(doc = "The output interval list file to write (if SCATTER_COUNT is 1) or the directory into which " +
+ "to write the scattered interval sub-directories (if SCATTER_COUNT > 1)", shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, optional = true)
+ public File OUTPUT;
+
+ @Option(doc = "The amount to pad each end of the intervals by before other operations are undertaken. Negative numbers are allowed " +
+ "and indicate intervals should be shrunk. Resulting intervals < 0 bases long will be removed. Padding is applied to the interval lists <b> before </b> the ACTION is performed.", optional = true)
+ public int PADDING = 0;
+
+ @Option(doc = "If true, merge overlapping and adjacent intervals to create a list of unique intervals. Implies SORT=true")
+ public boolean UNIQUE = false;
+
+ @Option(doc = "If true, sort the resulting interval list by coordinate.")
+ public boolean SORT = true;
+
+ @Option(doc = "Action to take on inputs.")
+ public Action ACTION = Action.CONCAT;
+
+ @Option(shortName = "SI", doc = "Second set of intervals for SUBTRACT and DIFFERENCE operations.", optional = true)
+ public List<File> SECOND_INPUT;
+
+ @Option(doc = "One or more lines of comment to add to the header of the output file.", optional = true)
+ public List<String> COMMENT = null;
+
+ @Option(doc = "The number of files into which to scatter the resulting list by locus; in some situations, fewer intervals may be emitted. " +
+ "Note - if > 1, the resultant scattered intervals will be sorted and uniqued. The sort will be inverted if the INVERT flag is set.")
+ public int SCATTER_COUNT = 1;
+
+ @Option(doc = "Whether to include filtered variants in the vcf when generating an interval list from vcf", optional = true)
+ public boolean INCLUDE_FILTERED=false;
+
+ @Option(shortName = "BRK", doc = "If set to a positive value will create a new interval list with the original intervals broken up at integer multiples of this value. Set to 0 to NOT break up intervals", optional = true)
+ public int BREAK_BANDS_AT_MULTIPLES_OF = 0;
+
+ @Option(shortName = "M", doc = "Do not subdivide ")
+ public IntervalListScatterer.Mode SUBDIVISION_MODE = IntervalListScatterer.Mode.INTERVAL_SUBDIVISION;
+
+ @Option(doc = "Produce the inverse list", optional = true)
+ public boolean INVERT = false;
+
+ private static final Log LOG = Log.getInstance(IntervalListTools.class);
+
+ public enum Action implements CommandLineParser.ClpEnum {
+
+ CONCAT("The concatenation of all the INPUTs, no sorting or merging of overlapping/abutting intervals implied. Will result in an unsorted list unless requested otherwise.") {
+ @Override
+ IntervalList act(final List<IntervalList> list, final List<IntervalList> unused) {
+ if (!unused.isEmpty())
+ throw new IllegalArgumentException(String.format("Second List found when action was %s. Ignoring second list.", this.name()));
+ return IntervalList.concatenate(list);
+ }
+ },
+ UNION("Like CONCATENATE but with UNIQUE and SORT implied, the result being the set-wise union of all INPUTS.") {
+ @Override
+ IntervalList act(final List<IntervalList> list, final List<IntervalList> unused) {
+ if (!unused.isEmpty())
+ throw new IllegalArgumentException(String.format("Second List found when action was %s. Ignoring second list.", this.name()));
+ return IntervalList.union(list);
+ }
+ },
+ INTERSECT("The sorted, uniqued set of all loci that are contained in all of the INPUTs.") {
+ @Override
+ IntervalList act(final List<IntervalList> list, final List<IntervalList> unused) {
+ if (!unused.isEmpty())
+ throw new IllegalArgumentException(String.format("Second List found when action was %s. Ignoring second list.", this.name()));
+ return IntervalList.intersection(list);
+ }
+ },
+ SUBTRACT("Subtracts SECOND_INPUT from INPUT. The resulting loci are there in INPUT that are not in SECOND_INPUT") {
+ @Override
+ IntervalList act(final List<IntervalList> list1, final List<IntervalList> list2) {
+ return IntervalList.subtract(list1, list2);
+
+ }
+ },
+ SYMDIFF("Find loci that are in INPUT or SECOND_INPUT but are not in both.") {
+ @Override
+ IntervalList act(final List<IntervalList> list1, final List<IntervalList> list2) {
+ return IntervalList.difference(list1, list2);
+ }
+ };
+
+ String helpdoc;
+
+ Action(final String helpdoc) {
+ this.helpdoc = helpdoc;
+ }
+
+ @Override
+ public String getHelpDoc() {
+ return helpdoc;
+ }
+
+ abstract IntervalList act(final List<IntervalList> list1, final List<IntervalList> list2);
+
+ }
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new IntervalListTools().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ // Check inputs
+ for (final File f : INPUT) IOUtil.assertFileIsReadable(f);
+ for (final File f : SECOND_INPUT) IOUtil.assertFileIsReadable(f);
+
+ if (OUTPUT != null) {
+ if (SCATTER_COUNT == 1) {
+ IOUtil.assertFileIsWritable(OUTPUT);
+ } else {
+ IOUtil.assertDirectoryIsWritable(OUTPUT);
+ }
+ }
+
+ // Read in the interval lists and apply any padding
+ final List<IntervalList> lists = openIntervalLists(INPUT);
+
+ // same for the second list
+ final List<IntervalList> secondLists = openIntervalLists(SECOND_INPUT);
+
+ if (UNIQUE && !SORT) {
+ LOG.warn("UNIQUE=true requires sorting but SORT=false was specified. Results will be sorted!");
+ }
+
+ final IntervalList result = ACTION.act(lists, secondLists);
+
+ if (SCATTER_COUNT > 1) {
+ // Scattering requires a uniqued, sorted interval list. We want to do this up front (before BREAKING AT BANDS)
+ SORT = true;
+ UNIQUE = true;
+ }
+
+ if (INVERT) {
+ SORT = false; // no need to sort, since return will be sorted by definition.
+ UNIQUE = true;
+ }
+
+ final IntervalList possiblySortedResult = SORT ? result.sorted() : result;
+ final IntervalList possiblyInvertedResult = INVERT ? IntervalList.invert(possiblySortedResult) : possiblySortedResult;
+
+ //only get unique if this has been asked unless inverting (since the invert will return a unique list)
+ List<Interval> finalIntervals = UNIQUE ? possiblyInvertedResult.uniqued().getIntervals() : possiblyInvertedResult.getIntervals();
+
+ if (BREAK_BANDS_AT_MULTIPLES_OF > 0) {
+ finalIntervals = IntervalList.breakIntervalsAtBandMultiples(finalIntervals, BREAK_BANDS_AT_MULTIPLES_OF);
+ }
+
+ // Decide on a PG ID and make a program group
+ final SAMFileHeader header = result.getHeader();
+ final Set<String> pgs = new HashSet<String>();
+ for (final SAMProgramRecord pg : header.getProgramRecords()) pgs.add(pg.getId());
+ for (int i = 1; i < Integer.MAX_VALUE; ++i) {
+ if (!pgs.contains(String.valueOf(i))) {
+ final SAMProgramRecord pg = new SAMProgramRecord(String.valueOf(i));
+ pg.setCommandLine(getCommandLine());
+ pg.setProgramName(getClass().getSimpleName());
+ header.addProgramRecord(pg);
+ break;
+ }
+ }
+
+ // Add any comments
+ if (COMMENT != null) {
+ for (final String comment : COMMENT) {
+ header.addComment(comment);
+ }
+ }
+
+ final IntervalList output = new IntervalList(header);
+ for (final Interval i : finalIntervals) {
+ output.add(i);
+ }
+
+ final List<IntervalList> resultIntervals;
+ if (OUTPUT != null) {
+ if (SCATTER_COUNT == 1) {
+ output.write(OUTPUT);
+ resultIntervals = Arrays.asList(output);
+ } else {
+ final List<IntervalList> scattered = writeScatterIntervals(output);
+ LOG.info(String.format("Wrote %s scatter subdirectories to %s.", scattered.size(), OUTPUT));
+ if (scattered.size() != SCATTER_COUNT) {
+ LOG.warn(String.format(
+ "Requested scatter width of %s, but only emitted %s. (This may be an expected consequence of running in %s mode.)",
+ SCATTER_COUNT,
+ scattered.size(),
+ SUBDIVISION_MODE
+ ));
+ }
+ resultIntervals = scattered;
+ }
+ } else {
+ resultIntervals = Arrays.asList(output);
+ }
+
+ long totalUniqueBaseCount = 0;
+ long intervalCount = 0;
+ for (final IntervalList finalInterval : resultIntervals) {
+ totalUniqueBaseCount = finalInterval.getUniqueBaseCount();
+ intervalCount += finalInterval.size();
+ }
+
+ LOG.info("Produced " + intervalCount + " intervals totalling " + totalUniqueBaseCount + " unique bases.");
+
+ return 0;
+ }
+
+
+ private List<IntervalList> openIntervalLists(final List<File> files){
+ final List<IntervalList> lists = new ArrayList<IntervalList>();
+ for (final File f : files) {
+ lists.add(TYPE.getIntervalList(f, INCLUDE_FILTERED).padded(PADDING));
+ }
+ return lists;
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ final List<String> errorMsgs = new ArrayList<String>();
+ if (SCATTER_COUNT < 1) {
+ errorMsgs.add("SCATTER_COUNT must be greater than 0.");
+ }
+ if (BREAK_BANDS_AT_MULTIPLES_OF < 0) {
+ errorMsgs.add("BREAK_BANDS_AT_MULTIPLES_OF must be greater than or equal to 0.");
+ }
+ return errorMsgs.size() == 0 ? null : errorMsgs.toArray(new String[errorMsgs.size()]);
+ }
+
+ /**
+ * Method to scatter an interval list by locus.
+ *
+ * @param list The list of intervals to scatter
+ * @return The scattered intervals, represented as a {@link List} of {@link IntervalList}
+ */
+ private List<IntervalList> writeScatterIntervals(final IntervalList list) {
+ final IntervalListScatterer scatterer = new IntervalListScatterer(SUBDIVISION_MODE);
+ final List<IntervalList> scattered = scatterer.scatter(list, SCATTER_COUNT, UNIQUE);
+
+ final DecimalFormat fileNameFormatter = new DecimalFormat("0000");
+ int fileIndex = 1;
+ for (final IntervalList intervals : scattered) {
+ intervals.write(createDirectoryAndGetScatterFile(OUTPUT, scattered.size(), fileNameFormatter.format(fileIndex++)));
+ }
+
+ return scattered;
+ }
+
+ public static File getScatteredFileName(final File scatterDirectory, final long scatterTotal, final String formattedIndex) {
+ return new File(scatterDirectory.getAbsolutePath() + "/temp_" + formattedIndex + "_of_" +
+ scatterTotal + "/scattered" + IntervalList.INTERVAL_LIST_FILE_EXTENSION);
+
+ }
+
+ private static File createDirectoryAndGetScatterFile(final File outputDirectory, final long scatterCount, final String formattedIndex) {
+ createDirectoryOrFail(outputDirectory);
+ final File result = getScatteredFileName(outputDirectory, scatterCount, formattedIndex);
+ createDirectoryOrFail(result.getParentFile());
+ return result;
+ }
+
+ private static void createDirectoryOrFail(final File directory) {
+ if (!directory.exists()) {
+ if (!directory.mkdir()) {
+ throw new PicardException("Unable to create directory: " + directory.getAbsolutePath());
+ }
+ }
+ }
+
+ enum TYPE {
+ VCF(IOUtil.VCF_EXTENSIONS) {
+ @Override
+ protected IntervalList getIntervalListInternal(final File vcf, final boolean includeFiltered) {
+ return VCFFileReader.fromVcf(vcf, includeFiltered);
+ }
+ },
+ INTERVAL_LIST(IOUtil.INTERVAL_LIST_FILE_EXTENSION) {
+ @Override
+ protected IntervalList getIntervalListInternal(final File intervalList, final boolean includeFiltered) {
+ return IntervalList.fromFile(intervalList);
+ }
+ };
+
+ final Collection<String> applicableExtensions;
+
+ TYPE(final String... s) {
+ applicableExtensions = CollectionUtil.makeSet(s);
+ }
+
+ TYPE(final Collection<String> extensions) {
+ applicableExtensions = extensions;
+ }
+
+ abstract protected IntervalList getIntervalListInternal(final File file, final boolean includeFiltered);
+
+ static TYPE forFile(final File intervalListExtractable) {
+ for (final TYPE type : TYPE.values()) {
+ for (final String s : type.applicableExtensions) {
+ if (intervalListExtractable.getName().endsWith(s)) {
+ return type;
+ }
+ }
+ }
+ throw new SAMException("Cannot figure out type of file " + intervalListExtractable.getAbsolutePath() + " from extension. Current implementation understands the following types: " + Arrays.toString(TYPE.values()));
+ }
+
+ static public IntervalList getIntervalList(final File file, final boolean includeFiltered){
+ return forFile(file).getIntervalListInternal(file, includeFiltered);
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + ": " + applicableExtensions.toString();
+ }
+ }
+
+}
diff --git a/src/java/picard/util/Iterators.java b/src/java/picard/util/Iterators.java
new file mode 100644
index 0000000..ef161d6
--- /dev/null
+++ b/src/java/picard/util/Iterators.java
@@ -0,0 +1,26 @@
+package picard.util;
+
+import com.google.common.base.Optional;
+
+import java.util.Iterator;
+
+/**
+ * @author mccowan
+ */
+public class Iterators {
+ public static <E> AtomicIterator<E> atomicIteratorOf(final Iterable<E> backingIterable) {
+ return atomicIteratorOf(backingIterable.iterator());
+ }
+
+ public static <E> AtomicIterator<E> atomicIteratorOf(final Iterator<E> backingIterator) {
+ final Object monitor = new Object();
+ return new AtomicIterator<E>() {
+ @Override
+ public Optional<E> next() {
+ synchronized (monitor) {
+ return backingIterator.hasNext() ? Optional.fromNullable(backingIterator.next()) : Optional.<E>absent();
+ }
+ }
+ };
+ }
+}
diff --git a/src/java/picard/util/LiftOverIntervalList.java b/src/java/picard/util/LiftOverIntervalList.java
new file mode 100644
index 0000000..9d1b9f3
--- /dev/null
+++ b/src/java/picard/util/LiftOverIntervalList.java
@@ -0,0 +1,114 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.liftover.LiftOver;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.Intervals;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @author alecw at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Lifts over an interval list from one reference build to another. Based on UCSC liftOver." +
+ " Uses a UCSC chain file to guide the liftOver.",
+ usageShort = "Lifts over an interval list from one reference build to another",
+ programGroup = Intervals.class
+)
+public class LiftOverIntervalList extends CommandLineProgram {
+
+ private static final Log LOG = Log.getInstance(LiftOverIntervalList.class);
+
+ @Option(doc = "Interval list to be lifted over.", shortName = StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(doc = "Where to write lifted-over interval list.", shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public File OUTPUT;
+
+ @Option(doc = "Sequence dictionary to write into the output interval list.",
+ shortName = StandardOptionDefinitions.SEQUENCE_DICTIONARY_SHORT_NAME)
+ public File SEQUENCE_DICTIONARY;
+
+ @Option(doc = "Chain file that guides LiftOver.")
+ public File CHAIN;
+
+ @Option(doc = "Minimum percentage of bases in each input interval that must map to output interval.")
+ public double MIN_LIFTOVER_PCT = LiftOver.DEFAULT_LIFTOVER_MINMATCH;
+
+ public static void main(final String[] argv) {
+ new LiftOverIntervalList().instanceMainWithExit(argv);
+ }
+
+ /**
+ * Do the work after command line has been parsed. RuntimeException may be
+ * thrown by this method, and are reported appropriately.
+ *
+ * @return program exit status.
+ */
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsReadable(SEQUENCE_DICTIONARY);
+ IOUtil.assertFileIsReadable(CHAIN);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final LiftOver liftOver = new LiftOver(CHAIN);
+ liftOver.setLiftOverMinMatch(MIN_LIFTOVER_PCT);
+
+ final IntervalList fromIntervals = IntervalList.fromFile(INPUT);
+ final SAMFileHeader toHeader = SamReaderFactory.makeDefault().getFileHeader(SEQUENCE_DICTIONARY);
+ liftOver.validateToSequences(toHeader.getSequenceDictionary());
+ final IntervalList toIntervals = new IntervalList(toHeader);
+ boolean anyFailed = false;
+ for (final Interval fromInterval : fromIntervals) {
+ final Interval toInterval = liftOver.liftOver(fromInterval);
+ if (toInterval != null) {
+ toIntervals.add(toInterval);
+ } else {
+ anyFailed = true;
+ LOG.warn("Liftover failed for ", fromInterval, "(len ", fromInterval.length(), ")");
+ final List<LiftOver.PartialLiftover> partials = liftOver.diagnosticLiftover(fromInterval);
+ for (final LiftOver.PartialLiftover partial : partials) {
+ LOG.info(partial);
+ }
+ }
+ }
+
+ toIntervals.sorted();
+ toIntervals.write(OUTPUT);
+ return anyFailed ? 1 : 0;
+ }
+}
diff --git a/src/java/picard/util/MathUtil.java b/src/java/picard/util/MathUtil.java
new file mode 100644
index 0000000..92019bc
--- /dev/null
+++ b/src/java/picard/util/MathUtil.java
@@ -0,0 +1,362 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.util;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+
+import static java.lang.Math.log1p;
+import static java.lang.Math.pow;
+
+/**
+ * General math utilities
+ *
+ * @author Tim Fennell
+ */
+final public class MathUtil {
+ private MathUtil(){};
+
+ /** The double value closest to 1 while still being less than 1. */
+ public static final double MAX_PROB_BELOW_ONE = 0.9999999999999999d;
+
+ /**
+ * this function mimics the behavior of log_1p but resulting in log _base 10_ of (1+x) instead of natural log of 1+x
+ */
+ public static double log10_1p(final double x){
+ return log1p(x)/LOG_10_MATH.log_of_base;
+ }
+
+ /** Calculated the mean of an array of doubles. */
+ public static double mean(final double[] in, final int start, final int stop) {
+ double total = 0;
+ for (int i = start; i < stop; ++i) {
+ total += in[i];
+ }
+
+ return total / (stop - start);
+ }
+
+ /** Calculated the standard deviation of an array of doubles. */
+ public static double stddev(final double[] in, final int start, final int length) {
+ return stddev(in, start, length, mean(in, start, length));
+ }
+
+ /** Calculated the standard deviation of an array of doubles. */
+ public static double stddev(final double[] in, final int start, final int stop, final double mean) {
+ double total = 0;
+ for (int i = start; i < stop; ++i) {
+ total += (in[i] * in[i]);
+ }
+
+ return Math.sqrt((total / (stop - start)) - (mean * mean));
+ }
+
+ public static int compare(final int v1, final int v2) {
+ return (v1 < v2 ? -1 : (v1 == v2 ? 0 : 1));
+ }
+
+ /** Calculate the median of an array of doubles. Assumes that the input is sorted */
+ public static double median(final double... in) {
+ if (in.length == 0) {
+ throw new IllegalArgumentException("Attempting to find the median of an empty array");
+ }
+
+ final double[] data = Arrays.copyOf(in, in.length);
+ Arrays.sort(data);
+ final int middle = data.length / 2;
+ return data.length % 2 == 1 ? data[middle] : (data[middle - 1] + data[middle]) / 2.0;
+ }
+
+ /**
+ * Obtains percentage of two Longs
+ * @param numerator dividend
+ * @param denominator divisor
+ * @return numerator/(double)denominator if both are non-null and denominator != 0, else returns null.
+ */
+ public static Double percentageOrNull(final Long numerator, final Long denominator) {
+ if (numerator != null && denominator != null && denominator != 0) {
+ return numerator.doubleValue() / denominator.doubleValue();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Round off the value to the specified precision.
+ */
+ public static double round(final double num, final int precision) {
+ BigDecimal bd = new BigDecimal(num);
+ bd = bd.setScale(precision, BigDecimal.ROUND_HALF_UP);
+ return bd.doubleValue();
+ }
+
+ /** Returns the largest value stored in the array. */
+ public static double max(final double[] nums) {
+ return nums[indexOfMax(nums)];
+ }
+
+ /**
+ * Returns the index of the largest element in the array. If there are multiple equal maxima then
+ * the earliest one in the array is returned.
+ */
+ public static int indexOfMax(final double[] nums) {
+ double max = nums[0];
+ int index = 0;
+ for (int i = 1; i < nums.length; ++i) {
+ if (nums[i] > max) {
+ max = nums[i];
+ index = i;
+ }
+ }
+
+ return index;
+ }
+
+ /** Returns the smallest value stored in the array. */
+ public static double min(final double[] nums) {
+ double min = nums[0];
+ for (int i = 1; i < nums.length; ++i) {
+ if (nums[i] < min) min = nums[i];
+ }
+
+ return min;
+ }
+
+
+ /** Returns the smallest value stored in the array. */
+ public static short min(final short[] nums) {
+ short min = nums[0];
+ for (int i = 1; i < nums.length; ++i) {
+ if (nums[i] < min) min = nums[i];
+ }
+
+ return min;
+ }
+
+ /** Mimic's R's seq() function to produce a sequence of equally spaced numbers. */
+ public static double[] seq(final double from, final double to, final double by) {
+ if (from < to && by <= 0) return new double[0];
+ if (from > to && by >= 0) return new double[0];
+ final int values = 1 + (int) Math.floor((to - from) / by);
+ final double[] results = new double[values];
+
+ BigDecimal value = new BigDecimal(from);
+ BigDecimal increment = new BigDecimal(by);
+
+ for (int i=0; i<values; ++i) {
+ results[i] = value.doubleValue();
+ value = value.add(increment);
+ }
+
+ return results;
+ }
+
+ /** "Promotes" an int[] into a double array with the same values (or as close as precision allows). */
+ public static double[] promote(final int[] is) {
+ final double[] ds = new double[is.length];
+ for (int i = 0; i < is.length; ++i) ds[i] = is[i];
+ return ds;
+ }
+
+ @Deprecated // use pNormalizeLogProbability instead (renamed)
+ public static double[] logLikelihoodsToProbs(final double[] likelihoods) {
+ return pNormalizeLogProbability(likelihoods);
+ }
+
+ /**
+ * Takes a complete set of mutually exclusive logPosteriors and converts them to probabilities
+ * that sum to 1 with as much fidelity as possible. Limits probabilities to be in the space:
+ * 0.9999999999999999 >= p >= (1-0.9999999999999999)/(lPosteriors.length-1)
+ */
+ public static double[] pNormalizeLogProbability(final double[] lPosterior) {
+ // Note: bumping all the LLs so that the biggest is 300 ensures that we have the
+ // widest range possible when unlogging them before one of them underflows. 10^300 is
+ // near the maximum before you hit positive infinity.
+
+ final double maxLikelihood = max(lPosterior);
+ final double bump = 300 - maxLikelihood;
+
+ final double[] tmp = new double[lPosterior.length];
+ double total = 0;
+ for (int i = 0; i < lPosterior.length; ++i) {
+ tmp[i] = pow(10, lPosterior[i] + bump);
+ total += tmp[i];
+ }
+
+ final double maxP = MAX_PROB_BELOW_ONE;
+ final double minP = (1 - MAX_PROB_BELOW_ONE) / (tmp.length - 1);
+
+ for (int i = 0; i < lPosterior.length; ++i) {
+ tmp[i] /= total;
+ if (tmp[i] > maxP) tmp[i] = maxP;
+ else if (tmp[i] < minP) tmp[i] = minP;
+ }
+
+ return tmp;
+ }
+
+ /** Calculates the ratio of two arrays of the same length. */
+ public static double[] divide(final double[] numerators, final double[] denominators) {
+ if (numerators.length != denominators.length) throw new IllegalArgumentException("Arrays must be of same length.");
+
+ final int len = numerators.length;
+ final double[] result = new double[len];
+ for (int i = 0; i < len; ++i) result[i] = numerators[i] / denominators[i];
+ return result;
+ }
+
+ /**
+ * Takes a vector of numbers and converts it to a vector of probabilities
+ * that sum to 1 with as much fidelity as possible. Limits probabilities to be in the space:
+ * 0.9999999999999999 >= p >= (1-0.9999999999999999)/(likelihoods.length-1)
+ */
+ public static double[] pNormalizeVector(final double[] pPosterior) {
+
+ final double[] tmp = new double[pPosterior.length];
+ final double total = sum(pPosterior);
+
+ final double maxP = MAX_PROB_BELOW_ONE;
+ final double minP = (1 - MAX_PROB_BELOW_ONE) / (tmp.length - 1);
+
+ for (int i = 0; i < pPosterior.length; ++i) {
+ tmp[i] = pPosterior[i] / total;
+ if (tmp[i] > maxP) tmp[i] = maxP;
+ else if (tmp[i] < minP) tmp[i] = minP;
+ }
+
+ return tmp;
+ }
+
+ /** Calculates the product of two arrays of the same length. */
+ public static double[] multiply(final double[] lhs, final double[] rhs) {
+ if (lhs.length != rhs.length) throw new IllegalArgumentException("Arrays must be of same length.");
+
+ final int len = lhs.length;
+ final double[] result = new double[len];
+ for (int i = 0; i < len; ++i) result[i] = lhs[i] * rhs[i];
+ return result;
+ }
+
+ /** calculates the sum of the arrays as a third array. */
+ public static double[] sum(final double[] lhs, final double[] rhs) {
+ if (lhs.length != rhs.length) throw new IllegalArgumentException("Arrays must be of same length.");
+
+ final int len = lhs.length;
+ final double [] result = new double[len];
+ for (int i = 0; i < len; ++i) result[i] = lhs[i] + rhs[i];
+ return result;
+ }
+
+ /** Returns the sum of the elements in the array. */
+ public static double sum(final double[] arr) {
+ double result = 0;
+ for (final double next : arr) result += next;
+ return result;
+ }
+
+ /** Returns the sum of the elements in the array starting with start and ending before stop. */
+ public static long sum(final long[] arr, final int start, final int stop) {
+ long result = 0;
+ for (int i=start; i<stop; ++i) {
+ result += arr[i];
+ }
+ return result;
+ }
+
+ public static final LogMath LOG_2_MATH = new LogMath(2);
+ public static final LogMath NATURAL_LOG_MATH = new LogMath(Math.exp(1)) {
+ @Override
+ public double getLogValue(final double nonLogValue) {
+ return Math.log(nonLogValue);
+ }
+ };
+
+ public static final LogMath LOG_10_MATH = new LogMath(10) {
+ @Override
+ public double getLogValue(final double nonLogValue) {
+ return Math.log10(nonLogValue);
+ }
+ };
+
+ /**
+ * A collection of common math operations that work with log values. To use it, pass values from log space, the operation will be
+ * computed in non-log space, and a value in log space will be returned.
+ */
+ public static class LogMath {
+ private final double base;
+ private final double log_of_base;
+
+ public double getLog_of_base() {
+ return log_of_base;
+ }
+
+ private LogMath(final double base) {
+ this.base = base;
+ this.log_of_base=Math.log(base);
+ }
+
+ /** Returns the decimal representation of the provided log values. */
+ public double getNonLogValue(final double logValue) {
+ return Math.pow(base, logValue);
+ }
+
+ /** Returns the log-representation of the provided decimal value. */
+ public double getLogValue(final double nonLogValue) {
+ return Math.log(nonLogValue) / log_of_base;
+ }
+
+ /** Returns the log-representation of the provided decimal array. */
+ public double[] getLogValue(final double[] nonLogArray) {
+ final double logArray[] = new double[nonLogArray.length];
+ for (int i = 0; i < nonLogArray.length; i++) {
+ logArray[i] = getLogValue(nonLogArray[i]);
+ }
+ return logArray;
+ }
+
+ /** Computes the mean of the provided log values. */
+ public double mean(final double... logValues) {
+ return sum(logValues) - getLogValue(logValues.length);
+ }
+
+ /** Computes the sum of the provided log values. */
+ public double sum(final double... logValues) {
+ // Avoid overflow via scaling.
+ final double scalingFactor = max(logValues);
+ double simpleAdditionResult = 0;
+ for (final double v : logValues) {
+ simpleAdditionResult += getNonLogValue(v - scalingFactor);
+ }
+ return getLogValue(simpleAdditionResult) + scalingFactor;
+ }
+
+ /** Computes the sum of the provided log values. */
+ public double product(final double... logValues) {
+ return MathUtil.sum(logValues);
+ }
+
+
+ }
+}
diff --git a/src/java/picard/util/MetricsDoclet.java b/src/java/picard/util/MetricsDoclet.java
new file mode 100644
index 0000000..b423d97
--- /dev/null
+++ b/src/java/picard/util/MetricsDoclet.java
@@ -0,0 +1,178 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.util;
+
+import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.Doc;
+import com.sun.javadoc.FieldDoc;
+import com.sun.javadoc.RootDoc;
+import com.sun.javadoc.Tag;
+import htsjdk.samtools.metrics.MetricBase;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * Doclet for use with JavaDoc that will find all classes extending MetricBase and
+ * output information about the metrics definitions that go along with the classes.
+ *
+ * Takes a single parameter (-f file) to tell it where to output the resulting
+ * documentation file in HTML format.
+ *
+ * @author Tim Fennell
+ */
+public class MetricsDoclet {
+ /**
+ * Entry point called by the javadoc command line tool. Loops over all the
+ * classes identifying metrics classes and then produces some basic information
+ * about each in a single HTML file.
+ *
+ * @param root the root of the javadoc object hierarchy
+ * @return true if completed successfully, false otherwise
+ */
+ public static boolean start(final RootDoc root) {
+ // Build a set of metrics classes sorted by name
+ final SortedMap<String,ClassDoc> metricsClasses = new TreeMap<String,ClassDoc>();
+ for (final ClassDoc doc : root.classes()) {
+ if (isMetricsClass(doc)) {
+ System.out.println("Processing " + doc.qualifiedTypeName());
+ metricsClasses.put(doc.typeName(), doc);
+ }
+ }
+
+ // Get a print stream to write to
+ final PrintStream out = getOutput(root);
+ if (out == null) return false;
+
+ // Write out the TOC
+ out.println("<h2>Picard Metrics Definitions</h2>");
+ out.println("<section>");
+ out.println("<p> Click on a metric to see a description of its fields.</p>");
+ out.println("<ol>");
+ for (final ClassDoc doc : metricsClasses.values()) {
+ out.println("<li><a href=\"#" + doc.name() + "\">" + doc.name() + "</a>: " +
+ firstSentence(doc) + "</li>");
+ }
+ out.println("</ol>");
+ out.println("</section>");
+
+ // Now print out each class
+ for (final ClassDoc doc : metricsClasses.values()) {
+ out.println("<a id=\"" + doc.name() + "\"></a>");
+ out.println("<h2>" + doc.name() + "</h2>");
+ out.println("<section>");
+ out.println("<p>" + doc.commentText() + "</p>");
+ out.println("<table>");
+ out.println("<tr><th>Field</th><th>Description</th></tr>");
+
+ for (final FieldDoc field : doc.fields()) {
+ if (field.isPublic() && !field.isStatic()) {
+ out.append("<tr>");
+ out.append("<td>" + field.name() + "</td>");
+ out.append("<td>" + field.commentText() + "</td>");
+ out.append("</tr>");
+ }
+ }
+
+ out.println("</table>");
+ out.println("</section>");
+ }
+
+ out.close();
+ return true;
+ }
+
+ /**
+ * Checks to see if the class extends MetricBase using only the JavaDoc
+ * metadata provided about the class.
+ *
+ * @param doc the ClassDoc representing the class to be tested
+ * @return true if the class is a metrics class, false otherwise
+ */
+ protected static boolean isMetricsClass(ClassDoc doc) {
+ final String metricBaseFqn = MetricBase.class.getName();
+ if (!doc.isClass()) return false;
+ if (doc.qualifiedTypeName().contains("personal")) return false;
+
+ do {
+ doc = doc.superclass();
+ if (doc != null && metricBaseFqn.equals(doc.qualifiedTypeName())) return true;
+ }
+ while (doc != null);
+
+ return false;
+ }
+
+ /**
+ * Gets the file output parameter from the RootDoc and then opens an
+ * PrintStream to write to the file.
+ */
+ protected static PrintStream getOutput(final RootDoc root) {
+ for (final String[] arg : root.options()) {
+ if (arg[0].equals("-f") && arg.length == 2) {
+ try {
+ return new PrintStream(new File(arg[1]));
+ }
+ catch (FileNotFoundException fnfe) {
+ root.printError("Could not open destination file: " + arg[1]);
+ fnfe.printStackTrace();
+ return null;
+ }
+ }
+ }
+
+ root.printError("Destination file parameter -f not supplied.");
+ return null;
+ }
+
+ /**
+ * Required method by the javadoc caller that returns the expected number of elements
+ * for doclet specific command line arguments.
+ */
+ public static int optionLength(final String option) {
+ if(option.equals("-f")) {
+ return 2;
+ }
+ return 0;
+ }
+
+ /**
+ * Takes a Doc object and uses the firstSentenceTags() to recreate the first sentence
+ * text.
+ */
+ protected static String firstSentence(final Doc doc) {
+ final Tag[] tags = doc.firstSentenceTags();
+ final StringBuilder builder = new StringBuilder(128);
+ for (final Tag tag : tags) {
+ builder.append(tag.text());
+ }
+
+ return builder.toString();
+ }
+
+}
diff --git a/src/java/picard/util/RExecutor.java b/src/java/picard/util/RExecutor.java
new file mode 100644
index 0000000..396e0cf
--- /dev/null
+++ b/src/java/picard/util/RExecutor.java
@@ -0,0 +1,113 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.util;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProcessExecutor;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+
+/**
+ * Util class for executing R scripts.
+ *
+ * @author Doug Voet (dvoet at broadinstitute dot org)
+ */
+public class RExecutor {
+ private static final Log LOG = Log.getInstance(RExecutor.class);
+ private static final String R_EXE = "Rscript";
+
+ /**
+ * Executes the given R script that is stored in a file on the classpath. The script file
+ * is read from the classpath and written to a temp file then executed by a call to Rscript.
+ * Blocks until the R script is complete.
+ *
+ * @param rScriptName the fully qualified name of the classpath resource of the script
+ * @param arguments any arguments required by the script
+ * @return the return code of the R process
+ */
+ public static int executeFromClasspath(final String rScriptName, final String... arguments) {
+ final File scriptFile = writeScriptFile(rScriptName);
+ final int returnCode = executeFromFile(scriptFile, arguments);
+ htsjdk.samtools.util.IOUtil.deleteFiles(scriptFile);
+ return returnCode;
+ }
+
+ /**
+ * Executes the given R script that is stored in a file by a call to Rscript.
+ * Blocks until the R script is complete.
+ *
+ * @param scriptFile the file object for the script
+ * @param arguments any arguments required by the script
+ * @return the return code of the R process
+ */
+ public static int executeFromFile(final File scriptFile, final String... arguments) {
+ final String[] command = new String[arguments.length + 2];
+ command[0] = R_EXE;
+ command[1] = scriptFile.getAbsolutePath();
+ System.arraycopy(arguments, 0, command, 2, arguments.length);
+ LOG.info(String.format("Executing R script via command: %s", CollectionUtil.join(Arrays.asList(command), " ")));
+ return ProcessExecutor.execute(command);
+ }
+
+ /**
+ * Writes the classpath resource named by rScriptName to the temp dir.
+ */
+ private static File writeScriptFile(final String rScriptName) {
+ InputStream scriptStream = null;
+ OutputStream scriptFileStream = null;
+ try {
+ scriptStream = RExecutor.class.getClassLoader().getResourceAsStream(rScriptName);
+ if (scriptStream == null) {
+ throw new IllegalArgumentException("Script [" + rScriptName + "] not found in classpath");
+ }
+ final File scriptFile = File.createTempFile("script", ".R");
+ scriptFileStream = IOUtil.openFileForWriting(scriptFile);
+ IOUtil.copyStream(scriptStream, scriptFileStream);
+ return scriptFile;
+ } catch (IOException e) {
+ throw new PicardException("Unexpected exception creating R script file [" + rScriptName + "]", e);
+ } finally {
+ if (scriptStream != null) {
+ try {
+ scriptStream.close();
+ } catch (IOException ignored) {
+ }
+ }
+ if (scriptFileStream != null) {
+ try {
+ scriptFileStream.close();
+ } catch (IOException ignored) {
+ }
+ }
+ }
+ }
+}
diff --git a/src/java/picard/util/ScatterIntervalsByNs.java b/src/java/picard/util/ScatterIntervalsByNs.java
new file mode 100644
index 0000000..7612105
--- /dev/null
+++ b/src/java/picard/util/ScatterIntervalsByNs.java
@@ -0,0 +1,187 @@
+package picard.util;
+
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.programgroups.Intervals;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.reference.ReferenceSequenceFileFactory;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.util.StringUtil;
+
+import java.io.File;
+import java.lang.Boolean;import java.lang.Override;import java.lang.String;import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+
+/**
+ * A CLP for breaking up a reference into intervals of Ns and ACGTs bases.
+ * Used for creating a broken-up interval list for calling WGS.
+ *
+ * @author Yossi Farjoun
+ */
+
+ at CommandLineProgramProperties(
+ usage = "Writes an interval list based on splitting the reference by Ns.",
+ usageShort = "Writes an interval list based on splitting the reference by Ns",
+ programGroup = Intervals.class
+)
+public class ScatterIntervalsByNs extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME, doc = "Reference sequence to use.")
+ public File REFERENCE;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Output file for interval list.")
+ public File OUTPUT;
+
+ @Option(shortName = "OT", doc = "Type of intervals to output.", optional = true)
+ public OutputType OUTPUT_TYPE = OutputType.BOTH;
+
+ @Option(shortName = "N", doc = "Maximal number of contiguous N bases to tolerate, thereby continuing the current ACGT interval.", optional = true)
+ public int MAX_TO_MERGE = 1;
+
+ //not using an enum since Interval.name is a String, and am using that to define the type of the Interval
+ static final String
+ ACGTmer = "ACGTmer",
+ Nmer = "Nmer";
+
+ //an enum to determine which types of intervals get outputted
+ private enum OutputType {
+ N(Nmer),
+ ACGT(ACGTmer),
+ BOTH(Nmer, ACGTmer);
+
+ private final Set acceptedTypes;
+
+ public Boolean accepts(final String string) {return acceptedTypes.contains(string);}
+
+ OutputType(final String... strings) {
+ acceptedTypes = new HashSet<String>();
+ Collections.addAll(acceptedTypes, strings);
+ }
+ }
+
+ private static final Log log = Log.getInstance(ScatterIntervalsByNs.class);
+ final ProgressLogger locusProgress = new ProgressLogger(log, (int) 1e7, "examined", "loci");
+ final ProgressLogger intervalProgress = new ProgressLogger(log, (int) 10, "found", "intervals");
+
+ public static void main(final String[] args) {
+ new ScatterIntervalsByNs().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(REFERENCE);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final ReferenceSequenceFile refFile = ReferenceSequenceFileFactory.getReferenceSequenceFile(REFERENCE, true);
+
+ // get the intervals
+ final IntervalList intervals = segregateReference(refFile, MAX_TO_MERGE);
+
+ log.info(String.format("Found %d intervals in %d loci during %s seconds", intervalProgress.getCount(), locusProgress.getCount(), locusProgress.getElapsedSeconds()));
+
+ /**********************************
+ * Now output regions for calling *
+ **********************************/
+
+ final IntervalList outputIntervals = new IntervalList(intervals.getHeader().clone());
+ log.info(String.format("Collecting requested type of intervals (%s)", OUTPUT_TYPE));
+
+ for (final Interval i : intervals.getIntervals()) {
+ if (OUTPUT_TYPE.accepts(i.getName())) {
+ outputIntervals.add(i);
+ }
+ }
+
+ log.info("Writing Intervals.");
+ outputIntervals.write(OUTPUT);
+
+ log.info(String.format("Execution ending. Total time %d seconds", locusProgress.getElapsedSeconds()));
+
+ return 0;
+ }
+
+ /**
+ * ****************************************************************
+ * Generate an interval list that alternates between Ns and ACGTs *
+ * ****************************************************************
+ */
+ public static IntervalList segregateReference(final ReferenceSequenceFile refFile, final int maxNmerToMerge) {
+ final List<Interval> preliminaryIntervals = new LinkedList<Interval>();
+ final SAMFileHeader header = new SAMFileHeader();
+ header.setSequenceDictionary(refFile.getSequenceDictionary());
+ header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
+ final IntervalList finalIntervals = new IntervalList(header);
+
+ //iterate over all the sequences in the dictionary
+ for (final SAMSequenceRecord rec : refFile.getSequenceDictionary().getSequences()) {
+ final ReferenceSequence ref = refFile.getSequence(rec.getSequenceName());
+ final byte[] bytes = ref.getBases();
+ StringUtil.toUpperCase(bytes);
+
+ boolean nBlockIsOpen = (bytes[0] == 'N');
+ int start = 0;
+
+ for (int i = 0; i < bytes.length; ++i) {
+ final boolean currentBaseIsN = (bytes[i] == 'N');
+
+ //create intervals when switching, i.e "nBlockIsOpen" disagrees with "currentBaseIsN"
+ if (nBlockIsOpen != currentBaseIsN) {
+ preliminaryIntervals.add(new Interval(rec.getSequenceName(), start + 1, i, false, nBlockIsOpen ? Nmer : ACGTmer));
+ start = i;
+ nBlockIsOpen = !nBlockIsOpen;
+ }
+ }
+ // Catch the last block of chromosome
+ preliminaryIntervals.add(new Interval(rec.getSequenceName(), start + 1, bytes.length, false, nBlockIsOpen ? Nmer : ACGTmer));
+ }
+
+ // now that we have the whole list, we need to remove the short Nmers.
+ // process the list, replacing trios with short Nmers in the middle with longer intervals:
+ while (!preliminaryIntervals.isEmpty()) {
+
+ //if top trio match the bill, replace them with a merged interval,
+ // and push it back the top of the list (we expect alternating Nmers and ACGTmers, but
+ // not assuming it in the logic)
+
+ //(I want this to be fast and the strings are all copies of the static prototypes Nmer and ACGTmer )
+ //noinspection StringEquality
+ if (preliminaryIntervals.size() >= 3 && // three or more intervals
+ preliminaryIntervals.get(0).getName() == ACGTmer && //an N-mer
+ preliminaryIntervals.get(1).getName() == Nmer && //between two
+ preliminaryIntervals.get(2).getName() == ACGTmer && //ACGT-mers
+ preliminaryIntervals.get(0).abuts(preliminaryIntervals.get(1)) && // all abutting
+ preliminaryIntervals.get(1).abuts(preliminaryIntervals.get(2)) && // each other (there are many contigs...)
+ preliminaryIntervals.get(1).length() <= maxNmerToMerge) //and the N-mer is of length N or less
+ {
+ // create the new ACGTmer interval
+ final Interval temp = new Interval(
+ preliminaryIntervals.get(0).getSequence(),
+ preliminaryIntervals.get(0).getStart(),
+ preliminaryIntervals.get(2).getEnd(), false, ACGTmer);
+
+ //remove the first 3 elements of the list
+ for (int i = 0; i < 3; ++i) {
+ preliminaryIntervals.remove(0);
+ }
+ //and replace them with the newly created one
+ preliminaryIntervals.add(0, temp);
+ } else { //if cannot merge top three intervals, transfer the top intervals to finalIntervals
+ finalIntervals.add(preliminaryIntervals.remove(0));
+ }
+ }
+ return finalIntervals;
+ }
+}
diff --git a/src/java/picard/util/TabbedInputParser.java b/src/java/picard/util/TabbedInputParser.java
new file mode 100644
index 0000000..0f31180
--- /dev/null
+++ b/src/java/picard/util/TabbedInputParser.java
@@ -0,0 +1,64 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import java.io.File;
+import java.io.InputStream;
+
+/**
+ * Parser for tab-delimited files
+ *
+ * @author Kathleen Tibbetts
+ */
+public class TabbedInputParser extends BasicInputParser {
+
+ /**
+ * Constructor
+ *
+ * @param stream The input stream(s) to parse
+ */
+ public TabbedInputParser(boolean treatGroupedDelimitersAsOne, InputStream... stream) {
+ super(treatGroupedDelimitersAsOne, stream);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param file The file(s) to parse
+ */
+ public TabbedInputParser(boolean treatGroupedDelimitersAsOne, File... file) {
+ super(treatGroupedDelimitersAsOne, file);
+ }
+
+ /**
+ * Determines whether a given character is a delimiter
+ *
+ * @param b the character to evaluate
+ * @return true if <code>b</code> is a delimiter; otherwise false
+ */
+ @Override
+ protected boolean isDelimiter(final byte b) {
+ return b == '\t';
+ }
+}
diff --git a/src/java/picard/util/TabbedTextFileWithHeaderParser.java b/src/java/picard/util/TabbedTextFileWithHeaderParser.java
new file mode 100644
index 0000000..655077d
--- /dev/null
+++ b/src/java/picard/util/TabbedTextFileWithHeaderParser.java
@@ -0,0 +1,177 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.CloseableIterator;
+import picard.PicardException;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Parse a tabbed text file in which columns are found by looking at a header line rather than by position.
+ *
+ * @author alecw at broadinstitute.org
+ */
+public class TabbedTextFileWithHeaderParser implements Iterable<TabbedTextFileWithHeaderParser.Row> {
+ public class Row {
+ private final String[] fields;
+ private final String currentLine;
+
+ Row(final String[] fields, final String source) {
+ this.fields = fields;
+ this.currentLine = source;
+ }
+
+ /**
+ * @return Array of fields in the order they appear in the file.
+ */
+ public String[] getFields() {
+ return fields;
+ }
+
+ public String getField(final String columnLabel) {
+ final Integer key = columnLabelIndices.get(columnLabel);
+ if (key == null) throw new NoSuchElementException(String.format("column %s in %s", columnLabel, parser.getFileName()));
+ return fields[key];
+ }
+
+ public Integer getIntegerField(final String columnLabel) {
+ if (fields[columnLabelIndices.get(columnLabel)] == null) return null;
+ return Integer.parseInt(fields[columnLabelIndices.get(columnLabel)]);
+ }
+
+ public String getCurrentLine() {
+ return this.currentLine;
+ }
+ }
+
+ class TheIterator implements CloseableIterator<Row> {
+
+ @Override
+ public boolean hasNext() {
+ return parser.hasNext();
+ }
+
+ @Override
+ public Row next() {
+ final String[] fields = parser.next();
+ final String source = parser.getCurrentLine();
+ return new Row(fields, source);
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void close() {
+ extantIterator = null;
+ }
+ }
+
+ /**
+ * Map from column label to positional index.
+ */
+ private final Map<String, Integer> columnLabelIndices = new HashMap<String, Integer>();
+ private final TabbedInputParser parser;
+ private TheIterator extantIterator;
+
+ public TabbedTextFileWithHeaderParser(final TabbedInputParser parser) {
+ this.parser = parser;
+ if (!parser.hasNext()) {
+ throw new PicardException("No header line found in file " + parser.getFileName());
+ }
+ final String[] columnLabels = parser.next();
+ for (int i = 0; i < columnLabels.length; ++i) {
+ columnLabelIndices.put(columnLabels[i], i);
+ }
+ }
+
+ public TabbedTextFileWithHeaderParser(final File file) {
+ this(new TabbedInputParser(false, file));
+ }
+
+ public TabbedTextFileWithHeaderParser(final File file, final String[] columnHeaders) {
+ parser = new TabbedInputParser(false, file);
+ if (!parser.hasNext()) {
+ throw new PicardException("No header line found in file " + file);
+ }
+
+ for (int i = 0; i < columnHeaders.length; ++i) {
+ columnLabelIndices.put(columnHeaders[i], i);
+ }
+ }
+
+ /**
+ * @param columnLabel
+ * @return True if the given column label appears in the header.
+ */
+ public boolean hasColumn(final String columnLabel) {
+ return columnLabelIndices.containsKey(columnLabel);
+ }
+
+ /**
+ *
+ * @return The set of column labels for this file in no particular order.
+ */
+ public Set<String> columnLabels() {
+ return columnLabelIndices.keySet();
+ }
+
+ /**
+ * Creates the iterator object. It is illegal to have more than one iterator extant
+ * on the same parser object.
+ */
+ @Override
+ public CloseableIterator<Row> iterator() {
+ if (extantIterator != null) {
+ throw new ConcurrentModificationException("Only one iterator allowed at a time.");
+ }
+ extantIterator = new TheIterator();
+ return extantIterator;
+ }
+
+ /**
+ * Release all resources associated with the parser. Iteration will not work after this
+ * has been called.
+ */
+ public void close() {
+ parser.close();
+ }
+
+ public int getCurrentLineNumber() {
+ return parser.getCurrentLineNumber();
+ }
+
+ public Set<String> getColumnNames() {
+ return Collections.unmodifiableSet(this.columnLabelIndices.keySet());
+ }
+}
diff --git a/src/java/picard/util/TestNGUtil.java b/src/java/picard/util/TestNGUtil.java
new file mode 100644
index 0000000..f7e8091
--- /dev/null
+++ b/src/java/picard/util/TestNGUtil.java
@@ -0,0 +1,96 @@
+package picard.util;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.testng.Assert;
+
+import static java.lang.Math.abs;
+
+/**
+ * Small class implementing some utility functions that are useful for test and interfacing with the TestNG framework.
+ */
+public class TestNGUtil {
+
+ static final double EPSILON = 1e-300; //a constant near the smallest possible positive value representable in double,
+ // not actually the smallest possible value on purpose, since that would be indistinguishable from 0 and then useless.
+ // This is small enough to be meaningless, but representable.
+
+
+ public static abstract class SingleTestUnitTest<TestClazz extends TestNGParameterizable> {
+ @DataProvider(name = "testcases")
+ Object[][] getParams() {
+ return TestNGUtil.generateDataProvider(getTestcases());
+ }
+
+ @Test(dataProvider = "testcases")
+ public void doMetaTest(final TestClazz testcase) {
+ // Delegate to another method to avoid overwriting of annotations.
+ doTest(testcase);
+ }
+
+ abstract public Iterable<TestClazz> getTestcases();
+
+ abstract public void doTest(TestClazz testcase);
+ }
+
+ /**
+ * Interface for exposing an implementation for converting an object into a Object[] appropriate for positional
+ * parameter-passing as performed by TestNG. Useful for simplifying data sources.
+ */
+ public static class TestNGParameterizable {
+ public Object[] toObjectArray() {
+ return new Object[]{this};
+ }
+ }
+
+ public static Object[][] generateDataProvider(final TestNGParameterizable[] testcases) {
+ return generateDataProvider(Arrays.asList(testcases));
+ }
+
+ public static Object[][] generateDataProvider(final Iterable<? extends TestNGParameterizable> testcases) {
+ final Iterator<? extends TestNGParameterizable> i = testcases.iterator();
+ final List<Object[]> parameterList = new LinkedList<Object[]>();
+ while (i.hasNext()) {
+ parameterList.add(i.next().toObjectArray());
+ }
+ Object[][] parameterArray = new Object[parameterList.size()][];
+ for (int j = 0; j < parameterList.size(); j++) {
+ parameterArray[j] = parameterList.get(j);
+ }
+ return parameterArray;
+ }
+
+
+ //TestNG doesn't have utility functions with these signatures
+
+ /**
+ * Small utility function for determining if two doubles are within a _relative_ accuracy of each other.
+ *
+ * @param lhs first number
+ * @param rhs second number
+ * @param accuracy maximal allowed relative difference between the two numbers
+ * @return true if numbers are within the relative tolerance of each other
+ */
+ public static boolean compareDoubleWithAccuracy(final double lhs, final double rhs, final double accuracy) {
+ if (accuracy <= 0) throw new IllegalArgumentException("Accuracy must be positive.");
+ return abs(lhs - rhs) / (abs(lhs) + abs(rhs) + EPSILON) < accuracy;
+ }
+
+ public static void assertEqualDoubleArrays(final double[] lhs, final double[] rhs, final double accuracy) {
+ Assert.assertNotNull(lhs);
+ Assert.assertNotNull(rhs);
+
+ if (accuracy <= 0) throw new IllegalArgumentException("Accuracy must be positive.");
+ Assert.assertEquals(lhs.length, rhs.length, "Arrays not same length: " + lhs.length + " vs. " + rhs.length);
+
+ for (int i = 0; i < lhs.length; ++i) {
+ Assert.assertTrue(compareDoubleWithAccuracy(lhs[i], rhs[i], accuracy), "Arrays disagree at position " + i + ": " + lhs[i] + " vs. " + rhs[i] + ". ");
+ }
+ }
+}
diff --git a/src/java/picard/util/UnsignedTypeUtil.java b/src/java/picard/util/UnsignedTypeUtil.java
new file mode 100644
index 0000000..be382ad
--- /dev/null
+++ b/src/java/picard/util/UnsignedTypeUtil.java
@@ -0,0 +1,28 @@
+package picard.util;
+
+/**
+ * A utility class for dealing with unsigned types. This class is primarily used for promoting a value in an unsigned type to
+ * the same value in the net larger type of the same form (e.g. Integer to Long)
+ */
+public class UnsignedTypeUtil {
+
+ /** Convert an unsigned byte to a signed int */
+ public static int uByteToInt(final byte unsignedByte) {
+ return unsignedByte & 0xFF;
+ }
+
+ /** Convert an unsigned byte to a signed short */
+ public static int uByteToShort(final byte unsignedByte) {
+ return (short) unsignedByte & 0xFF;
+ }
+
+ /** Convert an unsigned short to an Int */
+ public static int uShortToInt(final short unsignedShort) {
+ return unsignedShort & 0xFFFF;
+ }
+
+ /** Convert an unsigned int to a long */
+ public static long uIntToLong(final int unsignedInt) {
+ return unsignedInt & 0xFFFFFFFFL;
+ }
+}
diff --git a/src/java/picard/util/VariantType.java b/src/java/picard/util/VariantType.java
new file mode 100644
index 0000000..722aa09
--- /dev/null
+++ b/src/java/picard/util/VariantType.java
@@ -0,0 +1,44 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+/**
+ * Enum to hold the possible types of dbSnps. Note that these correspsond to the names used
+ * in the dbSnp database with the exception of indel (which is in-del in dbSnp).
+ */
+public enum VariantType
+{
+ SNP, insertion, deletion;
+
+ /**
+ * Gets the enum for a given ordinal
+ *
+ * @param ordinal
+ * @return VariantType
+ */
+ public static VariantType getVariantTypeFromOrdinal(int ordinal)
+ {
+ return VariantType.class.getEnumConstants()[ordinal];
+ }
+}
diff --git a/src/java/picard/vcf/ByIntervalListVariantContextIterator.java b/src/java/picard/vcf/ByIntervalListVariantContextIterator.java
new file mode 100644
index 0000000..8c60dc2
--- /dev/null
+++ b/src/java/picard/vcf/ByIntervalListVariantContextIterator.java
@@ -0,0 +1,52 @@
+package picard.vcf;
+
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFileReader;
+
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Takes a VCFFileReader and an IntervalList and provides a single iterator over all variants in all the intervals.
+ *
+ * @TODO Currently this uses the VCFFileReader.query method - could be useful to make a version of this iterator that uses the .iterator method
+ *
+ * @author Tim Fennell
+ * @author George Grant
+ */
+public class ByIntervalListVariantContextIterator implements Iterator<VariantContext> {
+ private final VCFFileReader reader;
+ private final Iterator<Interval> intervals;
+ private CloseableIterator<VariantContext> currentIterator;
+
+ public ByIntervalListVariantContextIterator(final VCFFileReader reader, final IntervalList intervals) {
+ this.reader = reader;
+ this.intervals = intervals.uniqued().iterator();
+ }
+
+ /** If the current iterator is null or exhausted, move to the next interval. */
+ private void advance() {
+ while ((currentIterator == null || !currentIterator.hasNext()) && this.intervals.hasNext()) {
+ if (currentIterator != null) currentIterator.close();
+ final Interval i = this.intervals.next();
+ this.currentIterator = this.reader.query(i.getSequence(), i.getStart(), i.getEnd());
+ }
+ }
+
+ @Override public boolean hasNext() {
+ advance();
+ return this.currentIterator.hasNext();
+ }
+
+ @Override public VariantContext next() {
+ advance();
+ return this.currentIterator.next();
+ }
+
+ @Override public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/java/picard/vcf/CallingMetricAccumulator.java b/src/java/picard/vcf/CallingMetricAccumulator.java
new file mode 100644
index 0000000..c0082c3
--- /dev/null
+++ b/src/java/picard/vcf/CallingMetricAccumulator.java
@@ -0,0 +1,300 @@
+package picard.vcf;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.variant.variantcontext.Allele;
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.VariantContext;
+import picard.util.DbSnpBitSetUtil;
+import picard.vcf.processor.VariantProcessor;
+
+import static picard.vcf.CollectVariantCallingMetrics.VariantCallingSummaryMetrics;
+import static picard.vcf.CollectVariantCallingMetrics.VariantCallingDetailMetrics;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Collects variants and generates metrics about them. To use, construct, call
+ * {@link #accumulate(htsjdk.variant.variantcontext.VariantContext)} as desired, then call {@link #result()}.
+ *
+ * @author mccowan
+ */
+public class CallingMetricAccumulator implements VariantProcessor.Accumulator<CallingMetricAccumulator.Result> {
+ public static class Result {
+ final VariantCallingSummaryMetrics summary;
+ final Collection<VariantCallingDetailMetrics> details;
+
+ Result(final VariantCallingSummaryMetrics summary, final Collection<VariantCallingDetailMetrics> details) {
+ this.summary = summary;
+ this.details = details;
+ }
+
+ public static Result merge(final Collection<Result> results) {
+ final Collection<VariantCallingDetailMetrics> details = new ArrayList<VariantCallingDetailMetrics>();
+ final Collection<VariantCallingSummaryMetrics> summaries = new ArrayList<VariantCallingSummaryMetrics>();
+ for (final Result result : results) {
+ summaries.add(result.summary);
+ details.addAll(result.details);
+ }
+
+
+ final Map<String, Collection<CollectVariantCallingMetrics.VariantCallingDetailMetrics>> sampleDetailsMap = CollectionUtil.partition(details,
+ new CollectionUtil.Partitioner<CollectVariantCallingMetrics.VariantCallingDetailMetrics, String>() {
+ @Override
+ public String getPartition(final CollectVariantCallingMetrics.VariantCallingDetailMetrics variantCallingDetailMetrics) {
+ return variantCallingDetailMetrics.SAMPLE_ALIAS;
+ }
+ });
+ final Collection<CollectVariantCallingMetrics.VariantCallingDetailMetrics> collapsedDetails = new ArrayList<VariantCallingDetailMetrics>();
+ for (final Collection<VariantCallingDetailMetrics> sampleDetails : sampleDetailsMap.values()) {
+ final VariantCallingDetailMetrics collapsed = new VariantCallingDetailMetrics();
+ VariantCallingDetailMetrics.foldInto(collapsed, sampleDetails);
+ collapsedDetails.add(collapsed);
+ }
+
+
+ final VariantCallingSummaryMetrics collapsedSummary = new VariantCallingSummaryMetrics();
+ VariantCallingSummaryMetrics.foldInto(collapsedSummary, summaries);
+
+ return new Result(collapsedSummary, collapsedDetails);
+ }
+ }
+
+ private static final Log LOG = Log.getInstance(CallingMetricAccumulator.class);
+ private static final ProgressLogger progress = new ProgressLogger(LOG, 10000);
+
+ private final DbSnpBitSetUtil.DbSnpBitSets dbsnp;
+ private final VariantCallingSummaryMetrics summaryMetric = new VariantCallingSummaryMetrics();
+ /**
+ * A map of sample names to metrics. If .get() for a not-yet-existing sample name, a metric is generated, inserted into the map,
+ * then returned.
+ */
+ private final CollectionUtil.DefaultingMap<String, VariantCallingDetailMetrics> sampleMetricsMap =
+ new CollectionUtil.DefaultingMap<String, VariantCallingDetailMetrics>(
+ new CollectionUtil.DefaultingMap.Factory<VariantCallingDetailMetrics, String>() {
+ @Override
+ public VariantCallingDetailMetrics make(final String sampleName) {
+ final VariantCallingDetailMetrics detail = new VariantCallingDetailMetrics();
+ detail.SAMPLE_ALIAS = sampleName;
+ return detail;
+ }
+ }, true);
+
+ public CallingMetricAccumulator(final DbSnpBitSetUtil.DbSnpBitSets dbsnp) {
+ this.dbsnp = dbsnp;
+ }
+
+ /** Incorporates the provided variant's data into the metric analysis. */
+ @Override
+ public void accumulate(final VariantContext vc) {
+ progress.record(vc.getChr(), vc.getStart());
+ if (!isVariantExcluded(vc)) {
+ final String singletonSample = getSingletonSample(vc);
+ updateSummaryMetric(summaryMetric, null, vc, singletonSample != null); // The summary metric has no genotype.
+ for (final String sampleName : vc.getSampleNames()) {
+ // Skip homozygous reference calls.
+ if (!vc.getGenotype(sampleName).isHomRef()) {
+ updateDetailMetric(sampleMetricsMap.get(sampleName), vc.getGenotype(sampleName), vc,
+ sampleName.equals(singletonSample));
+ }
+ }
+ }
+ }
+
+ /**
+ * @return Sample name if there is only one sample that contains alternate allele(s), else null if either multiple samples that
+ * are not homref, or no samples that are not homref.
+ */
+ private String getSingletonSample(final VariantContext vc) {
+ String singletonSample = null;
+ for (final String sampleName : vc.getSampleNames()) {
+ final Genotype genotype = vc.getGenotype(sampleName);
+ if (genotype.isHomVar()) {
+ return null;
+ } else if (genotype.isHet()) {
+ if (singletonSample != null) {
+ // second sample with non-reference allele, so not a singleton
+ return null;
+ } else {
+ singletonSample = sampleName;
+ }
+ }
+ }
+ return singletonSample;
+ }
+
+ public Result result() {
+ final Collection<VariantCallingDetailMetrics> values = sampleMetricsMap.values();
+ for (final VariantCallingDetailMetrics value : values) {
+ value.updateDerivedValuesInPlace();
+ }
+
+ summaryMetric.updateDerivedValuesInPlace();
+ return new Result(summaryMetric, values);
+ }
+
+ /** Returns true if the variant is --NOT-- interesting enough to be included in metrics calculations. */
+ private boolean isVariantExcluded(final VariantContext vc) {
+
+ // If the entire record is not a variant, exclude it
+ if (!vc.isVariant()) {
+ return true;
+ }
+
+ // Skip calls which are homozygous reference for all samples.
+ for (final String sample : vc.getSampleNames()) {
+ if (!vc.getGenotype(sample).isHomRef()) {
+ return false; // TODO: Is this correct?
+ }
+ }
+
+ return true;
+ }
+
+ private void updateDetailMetric(final VariantCallingDetailMetrics metric,
+ final Genotype genotype,
+ final VariantContext vc,
+ final boolean hasSingletonSample) {
+ updateSummaryMetric(metric, genotype, vc, hasSingletonSample);
+
+ if (genotype != null && !vc.isFiltered()) {
+ if (genotype.isHet()) {
+ ++metric.numHets;
+ } else if (genotype.isHomVar()) {
+ ++metric.numHomVar;
+ }
+ }
+ }
+
+ /** Amends the provided metric with the data in the provided variant. Also amends the summary metric re: reference bias. */
+ private void updateSummaryMetric(final VariantCallingSummaryMetrics metric,
+ final Genotype genotype,
+ final VariantContext vc,
+ final boolean hasSingletonSample) {
+
+ // If this sample's genotype doesn't have any variation, exclude it
+ if (genotype != null && genotype.isNoCall()) return;
+
+ // Tally up the filtered SNPs & indels, then exit. The other metrics shouldn't be
+ // computed on low-confidence calls.
+ if (vc.isFiltered()) {
+ if (vc.isSNP()) metric.FILTERED_SNPS++;
+ else if (vc.isIndel()) metric.FILTERED_INDELS++;
+ return;
+ }
+
+ if (hasSingletonSample) {
+ ++metric.NUM_SINGLETONS;
+ }
+
+ if (vc.isBiallelic() && vc.isSNP()) {
+ // Biallelic SNPs
+ final boolean isInDbSnp = dbsnp.snps.isDbSnpSite(vc.getChr(), vc.getStart());
+ final boolean isTransition = isTransition(vc);
+
+ metric.TOTAL_SNPS++;
+
+ if (isInDbSnp) {
+ metric.NUM_IN_DB_SNP++;
+ if (isTransition) metric.dbSnpTransitions++;
+ else metric.dbSnpTransversions++;
+ } else {
+ if (isTransition) metric.novelTransitions++;
+ else metric.novelTransversions++;
+ }
+
+ // Calculate reference bias numbers. Note: genotype == null for summary metric, so this block won't be called when metric ==
+ // summaryMetric.
+ if (genotype != null && genotype.isHet()) { //
+ final int[] alleleDepths = genotype.getAD();
+ /*
+ * Null check: work around GATK issue in which some biallelic sites are missing allele depth. This should affect only ~1%
+ * of samples and should not have a significant impact on the reference bias calculation.
+ */
+ if (alleleDepths != null) {
+ final int indexOfRef = vc.getAlleleIndex(vc.getReference());
+ final int indexOfAlt = (indexOfRef + 1) % 2;
+
+ metric.refAlleleObs += alleleDepths[indexOfRef];
+ metric.altAlleleObs += alleleDepths[indexOfAlt];
+
+ // Always count these values for summary metrics.
+ summaryMetric.refAlleleObs += alleleDepths[indexOfRef];
+ summaryMetric.altAlleleObs += alleleDepths[indexOfAlt];
+ } else {
+ LOG.debug("Skipping aggregation of genotype due to missing allele depth data: ", genotype, ".");
+ }
+ }
+ } else if (vc.isSNP() && vc.getAlternateAlleles().size() > 1) {
+ // Multiallelic SNPs
+ metric.TOTAL_MULTIALLELIC_SNPS++;
+ if (dbsnp.snps.isDbSnpSite(vc.getChr(), vc.getStart())) metric.NUM_IN_DB_SNP_MULTIALLELIC++;
+ } else if (vc.isIndel() && !vc.isComplexIndel()) {
+ // Simple Indels
+ final boolean isInDbSnp = dbsnp.indels.isDbSnpSite(vc.getChr(), vc.getStart());
+ final boolean isInsertion = vc.isSimpleInsertion();
+
+ metric.TOTAL_INDELS++;
+
+ if (isInDbSnp) {
+ metric.NUM_IN_DB_SNP_INDELS++;
+ if (isInsertion) metric.dbSnpInsertions++;
+ else metric.dbSnpDeletions++;
+ } else {
+ if (isInsertion) metric.novelInsertions++;
+ else {
+ metric.novelDeletions++;
+ }
+ }
+ } else if (vc.isComplexIndel()) {
+ // Complex Indels
+ metric.TOTAL_COMPLEX_INDELS++;
+ if (dbsnp.indels.isDbSnpSite(vc.getChr(), vc.getStart())) metric.NUM_IN_DB_SNP_COMPLEX_INDELS++;
+ }
+
+ }
+
+ /**
+ * Answers if the provided variant is transitional (otherwise, it's transversional).
+ * Transitions:
+ * A->G
+ * G->A
+ * C->T
+ * T->C
+ * <p/>
+ * Transversions:
+ * A->C
+ * A->T
+ * C->A
+ * C->G
+ * G->C
+ * G->T
+ * T->A
+ * T->G
+ */
+ static private boolean isTransition(final VariantContext vc) {
+ final byte refAllele = vc.getReference().getBases()[0];
+ final Collection<Allele> altAlleles = vc.getAlternateAlleles();
+
+ Byte altAllele = null;
+ for (final Allele a : altAlleles) {
+ if (a.getBases()[0] != refAllele) {
+ altAllele = a.getBases()[0];
+ break;
+ }
+ }
+ if (altAllele == null) {
+ // This should never happen
+ throw new IllegalArgumentException("All alternate alleles match the reference base " + (char) refAllele);
+ }
+
+ return (refAllele == 'A' && altAllele == 'G')
+ || (refAllele == 'G' && altAllele == 'A')
+ || (refAllele == 'C' && altAllele == 'T')
+ || (refAllele == 'T' && altAllele == 'C');
+ }
+
+}
diff --git a/src/java/picard/vcf/CollectVariantCallingMetrics.java b/src/java/picard/vcf/CollectVariantCallingMetrics.java
new file mode 100644
index 0000000..a360910
--- /dev/null
+++ b/src/java/picard/vcf/CollectVariantCallingMetrics.java
@@ -0,0 +1,310 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf;
+
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.SAMFileReader;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.variant.vcf.VCFFileReader;
+import picard.cmdline.programgroups.Metrics;
+import picard.util.DbSnpBitSetUtil;
+import picard.vcf.processor.VariantProcessor;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/** Collects summary and per-sample metrics about variant calls in a VCF file. */
+ at CommandLineProgramProperties(
+ usage = "Collects per-sample and aggregate (spanning all samples) metrics from the provided VCF file.",
+ usageShort = "Collects per-sample and aggregate (spanning all samples) metrics from the provided VCF file",
+ programGroup = Metrics.class
+)
+public class CollectVariantCallingMetrics extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input vcf file for analysis")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Path (except for the file extension) of output metrics files " +
+ "to write.")
+ public File OUTPUT;
+
+ @Option(doc = "Reference dbSNP file in dbSNP or VCF format.")
+ public File DBSNP;
+
+ @Option(shortName = "TI", doc = "Target intervals to restrict analysis to.", optional = true)
+ public File TARGET_INTERVALS;
+
+ @Option(shortName = StandardOptionDefinitions.SEQUENCE_DICTIONARY_SHORT_NAME, optional = true,
+ doc = "If present, speeds loading of dbSNP file")
+ public File SEQUENCE_DICTIONARY = null;
+
+ @Option(doc = "Deprecated option will be removed in a future release.")
+ public Boolean REQUIRE_INDEX = false;
+
+ @Option
+ public int THREAD_COUNT = 1;
+
+ private final Log log = Log.getInstance(CollectVariantCallingMetrics.class);
+
+ public static void main(final String[] args) {
+ new CollectVariantCallingMetrics().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+
+ final boolean requiresIndex = this.TARGET_INTERVALS != null || this.THREAD_COUNT > 1;
+ final VCFFileReader variantReader = new VCFFileReader(INPUT, requiresIndex);
+ final SAMSequenceDictionary sequenceDictionary;
+ if (SEQUENCE_DICTIONARY != null) {
+ sequenceDictionary = SAMFileReader.getSequenceDictionary(SEQUENCE_DICTIONARY);
+ } else {
+ sequenceDictionary = variantReader.getFileHeader().getSequenceDictionary();
+ }
+ CloserUtil.close(variantReader);
+
+ log.info("Loading dbSNP file ...");
+ final DbSnpBitSetUtil.DbSnpBitSets dbsnp = DbSnpBitSetUtil.createSnpAndIndelBitSets(DBSNP, sequenceDictionary);
+
+ log.info("Starting iteration of variants.");
+
+ final VariantProcessor.Builder<CallingMetricAccumulator, CallingMetricAccumulator.Result> builder =
+ VariantProcessor.Builder
+ .generatingAccumulatorsBy(
+ new VariantProcessor.AccumulatorGenerator<CallingMetricAccumulator, CallingMetricAccumulator.Result>() {
+ @Override
+ public CallingMetricAccumulator build() {
+ return new CallingMetricAccumulator(dbsnp);
+ }
+ })
+ .combiningResultsBy(
+ new VariantProcessor.ResultMerger<CallingMetricAccumulator.Result>() {
+ @Override
+ public CallingMetricAccumulator.Result merge(final Collection<CallingMetricAccumulator.Result>
+ resultsToReduce) {
+ return CallingMetricAccumulator.Result.merge(resultsToReduce);
+ }
+ })
+ .withInput(INPUT)
+ .multithreadingBy(THREAD_COUNT);
+
+ if (TARGET_INTERVALS != null) {
+ builder.limitingProcessedRegionsTo(IntervalList.fromFile(TARGET_INTERVALS).uniqued());
+ }
+
+ final CallingMetricAccumulator.Result result = builder.build().process();
+
+ // Fetch and write the metrics.
+ final MetricsFile<CollectVariantCallingMetrics.VariantCallingDetailMetrics, Integer> detail = getMetricsFile();
+ final MetricsFile<CollectVariantCallingMetrics.VariantCallingSummaryMetrics, Integer> summary = getMetricsFile();
+ summary.addMetric(result.summary);
+ for (final CollectVariantCallingMetrics.VariantCallingDetailMetrics detailMetric : result.details) {
+ detail.addMetric(detailMetric);
+ }
+ final String outputPrefix = OUTPUT.getAbsolutePath() + ".";
+ detail.write(new File(outputPrefix + CollectVariantCallingMetrics.VariantCallingDetailMetrics.getFileExtension()));
+ summary.write(new File(outputPrefix + CollectVariantCallingMetrics.VariantCallingSummaryMetrics.getFileExtension()));
+
+ return 0;
+ }
+
+ /** A collection of metrics relating to snps and indels within a variant-calling file (VCF). */
+ public static class VariantCallingSummaryMetrics extends MetricBase {
+ /** The number of high confidence SNPs calls (i.e. non-reference genotypes) that were examined */
+ public long TOTAL_SNPS;
+
+ /** The number of high confidence SNPs found in dbSNP */
+ public long NUM_IN_DB_SNP;
+
+ /** The number of high confidence SNPS called that were not found in dbSNP */
+ public long NOVEL_SNPS;
+
+ /** The number of SNPs that are also filtered */
+ public long FILTERED_SNPS;
+
+ /** The percentage of high confidence SNPs in dbSNP */
+ public float PCT_DBSNP;
+
+ /** The Transition/Transversion ratio of the SNP calls made at dbSNP sites */
+ public double DBSNP_TITV;
+
+ /** The Transition/Transversion ratio of the SNP calls made at non-dbSNP sites */
+ public double NOVEL_TITV;
+
+ /** The number of high confidence Indel calls that were examined */
+ public long TOTAL_INDELS;
+
+ /** The number of high confidence Indels called that were not found in dbSNP */
+ public long NOVEL_INDELS;
+
+ /** The number of indels that are also filtered */
+ public long FILTERED_INDELS;
+
+ /** The percentage of high confidence Indels in dbSNP */
+ public float PCT_DBSNP_INDELS;
+
+ /** The number of high confidence Indels found in dbSNP */
+ public long NUM_IN_DB_SNP_INDELS;
+
+ /** The Insertion/Deletion ratio of the Indel calls made at dbSNP sites */
+ public double DBSNP_INS_DEL_RATIO;
+
+ /** The Insertion/Deletion ratio of the Indel calls made at non-dbSNP sites */
+ public double NOVEL_INS_DEL_RATIO;
+
+ /** The number of high confidence multiallelic SNP calls that were examined */
+ public double TOTAL_MULTIALLELIC_SNPS;
+
+ /** The number of high confidence multiallelic SNPs found in dbSNP */
+ public double NUM_IN_DB_SNP_MULTIALLELIC;
+
+ /** The number of high confidence complex Indel calls that were examined */
+ public double TOTAL_COMPLEX_INDELS;
+
+ /** The number of high confidence complex Indels found in dbSNP */
+ public double NUM_IN_DB_SNP_COMPLEX_INDELS;
+
+ /** The rate at which reference bases are observed at ref/alt heterozygous SNP sites. */
+ public double SNP_REFERENCE_BIAS;
+
+ /**
+ * For summary metrics, the number of variants that appear in only one sample.
+ * For detail metrics, the number of variants that appear only in the current sample.
+ */
+ public long NUM_SINGLETONS;
+
+ /** Hidden fields that are not propagated to the metrics file, but are used to house temporary values. */
+ long refAlleleObs, altAlleleObs, novelDeletions, novelInsertions, novelTransitions, novelTransversions, dbSnpDeletions,
+ dbSnpInsertions, dbSnpTransitions, dbSnpTransversions;
+
+ public static String getFileExtension() {
+ return "variant_calling_summary_metrics";
+ }
+
+ public void updateDerivedValuesInPlace() {
+ this.PCT_DBSNP = this.NUM_IN_DB_SNP / (float) this.TOTAL_SNPS;
+ this.NOVEL_SNPS = this.TOTAL_SNPS - this.NUM_IN_DB_SNP;
+ this.SNP_REFERENCE_BIAS = (this.refAlleleObs) / (double) (this.refAlleleObs + this.altAlleleObs);
+
+ if (this.dbSnpTransversions > 0)
+ this.DBSNP_TITV = (double) this.dbSnpTransitions / (double) this.dbSnpTransversions;
+
+ if (this.novelTransversions > 0)
+ this.NOVEL_TITV = this.novelTransitions / (double) this.novelTransversions;
+
+ this.PCT_DBSNP_INDELS = this.NUM_IN_DB_SNP_INDELS / (float) this.TOTAL_INDELS;
+ this.NOVEL_INDELS = this.TOTAL_INDELS - this.NUM_IN_DB_SNP_INDELS;
+
+ if (this.dbSnpDeletions > 0)
+ this.DBSNP_INS_DEL_RATIO = this.dbSnpInsertions / (double) this.dbSnpDeletions;
+
+ if (this.novelDeletions > 0)
+ this.NOVEL_INS_DEL_RATIO = this.novelInsertions / (double) this.novelDeletions;
+ }
+
+ public static <T extends VariantCallingSummaryMetrics> void foldInto(final T target, final Collection<T> metrics) {
+ for (final T metric : metrics) {
+ target.TOTAL_SNPS += metric.TOTAL_SNPS;
+ target.NUM_IN_DB_SNP += metric.NUM_IN_DB_SNP;
+ target.FILTERED_SNPS += metric.FILTERED_SNPS;
+ target.TOTAL_INDELS += metric.TOTAL_INDELS;
+ target.FILTERED_INDELS += metric.FILTERED_INDELS;
+ target.NUM_IN_DB_SNP_INDELS += metric.NUM_IN_DB_SNP_INDELS;
+ target.TOTAL_MULTIALLELIC_SNPS += metric.TOTAL_MULTIALLELIC_SNPS;
+ target.NUM_IN_DB_SNP_MULTIALLELIC += metric.NUM_IN_DB_SNP_MULTIALLELIC;
+ target.TOTAL_COMPLEX_INDELS += metric.TOTAL_COMPLEX_INDELS;
+ target.NUM_IN_DB_SNP_COMPLEX_INDELS += metric.NUM_IN_DB_SNP_COMPLEX_INDELS;
+ target.NUM_SINGLETONS += metric.NUM_SINGLETONS;
+ target.refAlleleObs += metric.refAlleleObs;
+ target.altAlleleObs += metric.altAlleleObs;
+ target.novelDeletions += metric.novelDeletions;
+ target.novelInsertions += metric.novelInsertions;
+ target.novelTransitions += metric.novelTransitions;
+ target.novelTransversions += metric.novelTransversions;
+ target.dbSnpDeletions += metric.dbSnpDeletions;
+ target.dbSnpInsertions += metric.dbSnpInsertions;
+ target.dbSnpTransitions += metric.dbSnpTransitions;
+ target.dbSnpTransversions += metric.dbSnpTransversions;
+ }
+ target.updateDerivedValuesInPlace();
+ }
+
+ }
+
+ /** A collection of metrics relating to snps and indels within a variant-calling file (VCF) for a given sample. */
+ public static class VariantCallingDetailMetrics extends CollectVariantCallingMetrics.VariantCallingSummaryMetrics {
+ /** The name of the sample being assayed */
+ public String SAMPLE_ALIAS;
+
+ /**
+ * (count of hets)/(count of homozygous non-ref) for this sample
+ */
+ public double HET_HOMVAR_RATIO;
+
+ /**
+ * Hidden fields not propagated to the metrics file.
+ */
+ long numHets, numHomVar;
+
+ public static String getFileExtension() {
+ return "variant_calling_detail_metrics";
+ }
+
+ public static void foldInto(final VariantCallingDetailMetrics target,
+ final Collection<VariantCallingDetailMetrics> metrics) {
+ VariantCallingSummaryMetrics.foldInto(target, metrics);
+ final Set<String> sampleAliases = new HashSet<String>();
+ for (final VariantCallingDetailMetrics metric : metrics) {
+ target.numHets += metric.numHets;
+ target.numHomVar += metric.numHomVar;
+ sampleAliases.add(metric.SAMPLE_ALIAS);
+ }
+ target.updateDerivedValuesInPlace();
+ if (sampleAliases.size() != 1) {
+ throw new IllegalArgumentException("Provided metrics do not have the same sample name.");
+ }
+ target.SAMPLE_ALIAS = sampleAliases.iterator().next();
+ }
+
+ @Override
+ public void updateDerivedValuesInPlace() {
+ super.updateDerivedValuesInPlace();
+ // Divide by zero should be OK -- NaN should get propagated to metrics file and to DB.
+ HET_HOMVAR_RATIO = numHets / (double) numHomVar;
+ }
+
+ }
+}
diff --git a/src/java/picard/vcf/GA4GHScheme.java b/src/java/picard/vcf/GA4GHScheme.java
new file mode 100644
index 0000000..3bd2e91
--- /dev/null
+++ b/src/java/picard/vcf/GA4GHScheme.java
@@ -0,0 +1,72 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+import picard.PicardException;
+import picard.vcf.GenotypeConcordanceStates.*;
+
+/**
+ * The scheme is defined in the constructor.
+ *
+ * The default scheme is derived from the GA4GH Benchmarking Work Group's proposed evaluation scheme.
+ *
+ * In general, we are comparing two sets of alleles. Therefore, we can have zero or more contingency table values represented in one comparison. For example, if the truthset is
+ * a heterozygous call with both alleles non-reference (HET_VAR1_VAR2), and the callset is a heterozygous call with both alleles non-reference with one of the alternate alleles
+ * matching an alternate allele in the callset, we would have a true positive, false positive, and false negative. The true positive is from the matching alternate alleles, the
+ * false positive is the alternate allele found in the callset but not found in the truthset, and the false negative is the alternate in the truthset not found in the callset.
+ *
+ * We also include a true negative in cases where the reference allele is found in both the truthset and callset.
+ *
+ * We have no HET_VAR2_VAR3 case, as VAR2/VAR3 are simply symbolic, and so we can change HET_VAR2_VAR3 into the HET_VAR3_VAR4 case.
+ *
+ * In this (the default) scheme
+ *
+ * Finally, we have NA cases, which represent tuples that our code can and should not reach.
+ */
+
+public class GA4GHScheme extends GenotypeConcordanceScheme{
+ @Override
+ protected void initiateScheme() {
+ /** ROW STATE MISSING HOM_REF HET_REF_VAR1 HET_VAR1_VAR2 HOM_VAR1 NO_CALL LOW_GQ LOW_DP VC_FILTERED GT_FILTERED IS_MIXED **/
+ addRow(CallState.MISSING, NA, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HOM_REF, TN_ONLY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HET_REF_VAR1, FP_TN, FP_TN, TP_TN, TP_FN, TP_FN, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HET_REF_VAR2, NA, NA, FP_TN_FN, NA, FP_FN, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HET_REF_VAR3, NA, NA, NA, FP_FN, NA, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HET_VAR1_VAR2, FP_ONLY, FP_ONLY, TP_FP, TP_ONLY, TP_FP_FN, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HET_VAR1_VAR3, NA, NA, NA, TP_FP_FN, NA, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HET_VAR3_VAR4, FP_ONLY, FP_ONLY, FP_FN, FP_FN, FP_FN, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HOM_VAR1, FP_ONLY, FP_ONLY, TP_FP, TP_FN, TP_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HOM_VAR2, NA, NA, FP_FN, TP_FN, FP_FN, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HOM_VAR3, NA, NA, NA, FP_FN, NA, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.NO_CALL, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.VC_FILTERED, EMPTY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.GT_FILTERED, EMPTY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.LOW_GQ, EMPTY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.LOW_DP, EMPTY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.IS_MIXED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ }
+}
+
diff --git a/src/java/picard/vcf/GA4GHSchemeWithMissingAsHomRef.java b/src/java/picard/vcf/GA4GHSchemeWithMissingAsHomRef.java
new file mode 100644
index 0000000..c75d91b
--- /dev/null
+++ b/src/java/picard/vcf/GA4GHSchemeWithMissingAsHomRef.java
@@ -0,0 +1,58 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+import picard.PicardException;
+import picard.vcf.GenotypeConcordanceStates.*;
+
+/**
+ * The default scheme is derived from the GA4GH Benchmarking Work Group's proposed evaluation scheme. This scheme has been edited to count MISSING
+ * sites in the truth set differently for use with truth sets where the HOM_REF sites are not included in the data set. The MISSING truth sites
+ * are called like they are HOM_REF sites.
+ */
+
+public class GA4GHSchemeWithMissingAsHomRef extends GenotypeConcordanceScheme{
+ @Override
+ protected void initiateScheme() {
+ /** ROW STATE MISSING HOM_REF HET_REF_VAR1 HET_VAR1_VAR2 HOM_VAR1 NO_CALL LOW_GQ LOW_DP VC_FILTERED GT_FILTERED IS_MIXED **/
+ addRow(CallState.MISSING, TN_ONLY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HOM_REF, TN_ONLY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HET_REF_VAR1, FP_TN, FP_TN, TP_TN, TP_FN, TP_FN, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HET_REF_VAR2, NA, NA, FP_TN_FN, NA, FP_FN, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HET_REF_VAR3, NA, NA, NA, FP_FN, NA, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HET_VAR1_VAR2, FP_ONLY, FP_ONLY, TP_FP, TP_ONLY, TP_FP_FN, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HET_VAR1_VAR3, NA, NA, NA, TP_FP_FN, NA, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HET_VAR3_VAR4, FP_ONLY, FP_ONLY, FP_FN, FP_FN, FP_FN, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HOM_VAR1, FP_ONLY, FP_ONLY, TP_FP, TP_FN, TP_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.HOM_VAR2, NA, NA, FP_FN, TP_FN, FP_FN, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.HOM_VAR3, NA, NA, NA, FP_FN, NA, NA, NA, NA, NA, NA, NA);
+ addRow(CallState.NO_CALL, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.VC_FILTERED, TN_ONLY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.GT_FILTERED, TN_ONLY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.LOW_GQ, TN_ONLY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.LOW_DP, TN_ONLY, TN_ONLY, TN_FN, FN_ONLY, FN_ONLY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ addRow(CallState.IS_MIXED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY);
+ }
+}
diff --git a/src/java/picard/vcf/GatherVcfs.java b/src/java/picard/vcf/GatherVcfs.java
new file mode 100644
index 0000000..0334a40
--- /dev/null
+++ b/src/java/picard/vcf/GatherVcfs.java
@@ -0,0 +1,270 @@
+package picard.vcf;
+
+import htsjdk.samtools.util.BlockCompressedInputStream;import htsjdk.samtools.util.BlockCompressedOutputStream;import htsjdk.samtools.util.BlockCompressedStreamConstants;import htsjdk.samtools.util.CloseableIterator;import htsjdk.samtools.util.CloserUtil;import htsjdk.samtools.util.CollectionUtil;import htsjdk.samtools.util.RuntimeIOException;import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextComparator;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.IllegalArgumentException;import java.lang.IllegalStateException;import java.lang.Override;import java.lang.String;import java.util.EnumSet;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * Simple little class that combines multiple VCFs that have exactly the same set of samples
+ * and totally discrete sets of loci.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Gathers multiple VCF files from a scatter operation into a single VCF file. Input files " +
+ "must be supplied in genomic order and must not have events at overlapping positions.",
+ usageShort = "Gathers multiple VCF files from a scatter operation into a single VCF file",
+ programGroup = VcfOrBcf.class
+)
+public class GatherVcfs extends CommandLineProgram {
+
+ @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input VCF file(s).")
+ public List<File> INPUT;
+
+ @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output VCF file.")
+ public File OUTPUT;
+
+ private static final Log log = Log.getInstance(GatherVcfs.class);
+
+ public static void main(final String[] args) {
+ new GatherVcfs().instanceMainWithExit(args);
+ }
+
+ public GatherVcfs() {
+ CREATE_INDEX = true;
+ }
+
+ @Override
+ protected int doWork() {
+ log.info("Checking inputs.");
+ INPUT = IOUtil.unrollFiles(INPUT, IOUtil.VCF_EXTENSIONS);
+ for (final File f: INPUT) IOUtil.assertFileIsReadable(f);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final SAMSequenceDictionary sequenceDictionary = VCFFileReader.getSequenceDictionary(INPUT.get(0));
+
+ if (CREATE_INDEX && sequenceDictionary == null) {
+ throw new PicardException("In order to index the resulting VCF input VCFs must contain ##contig lines.");
+ }
+
+ log.info("Checking file headers and first records to ensure compatibility.");
+ assertSameSamplesAndValidOrdering(INPUT);
+
+ if (areAllBlockCompressed(INPUT) && areAllBlockCompressed(CollectionUtil.makeList(OUTPUT))) {
+ log.info("Gathering by copying gzip blocks. Will not be able to validate position non-overlap of files.");
+ if (CREATE_INDEX) log.warn("Index creation not currently supported when gathering block compressed VCFs.");
+ gatherWithBlockCopying(INPUT, OUTPUT);
+ }
+ else {
+ log.info("Gathering by conventional means.");
+ gatherConventionally(sequenceDictionary, CREATE_INDEX, INPUT, OUTPUT);
+ }
+
+ return 0;
+ }
+
+ /** Checks (via filename checking) that all files appear to be block compressed files. */
+ private boolean areAllBlockCompressed(final List<File> input) {
+ for (final File f : input) {
+ if (VariantContextWriterFactory.isBCFOutput(f) || !VariantContextWriterFactory.isCompressedVcf(f)) return false;
+ }
+
+ return true;
+ }
+
+ /** Validates that all headers contain the same set of genotyped samples and that files are in order by position of first record. */
+ private static void assertSameSamplesAndValidOrdering(final List<File> inputFiles) {
+ final VCFHeader header = new VCFFileReader(inputFiles.get(0), false).getFileHeader();
+ final SAMSequenceDictionary dict = header.getSequenceDictionary();
+ final VariantContextComparator comparator = new VariantContextComparator(header.getSequenceDictionary());
+ final List<String> samples = header.getGenotypeSamples();
+
+ File lastFile = null;
+ VariantContext lastContext = null;
+
+ for (final File f : inputFiles) {
+ final VCFFileReader in = new VCFFileReader(f, false);
+ dict.assertSameDictionary(in.getFileHeader().getSequenceDictionary());
+ final List<String> theseSamples = in.getFileHeader().getGenotypeSamples();
+
+ if (!samples.equals(theseSamples)) {
+ final SortedSet<String> s1 = new TreeSet<String>(samples);
+ final SortedSet<String> s2 = new TreeSet<String>(theseSamples);
+ s1.removeAll(theseSamples);
+ s2.removeAll(samples);
+
+ throw new IllegalArgumentException("VCFs do not have identical sample lists." +
+ " Samples unique to first file: " + s1 + ". Samples unique to " + f.getAbsolutePath() + ": " + s2 + ".");
+ }
+
+ final CloseableIterator<VariantContext> variantIterator = in.iterator();
+ if (variantIterator.hasNext()) {
+ final VariantContext currentContext = variantIterator.next();
+ if (lastContext != null) {
+ if (comparator.compare(lastContext, currentContext) >= 0) {
+ throw new IllegalArgumentException("First record in file " + f.getAbsolutePath() + " is not after first record in " +
+ "previous file " + lastFile.getAbsolutePath());
+ }
+ }
+
+ lastContext = currentContext;
+ lastFile = f;
+ }
+
+ CloserUtil.close(in);
+ }
+ }
+
+ /** Code for gathering multiple VCFs that works regardless of input format and output format, but can be slow. */
+ private static void gatherConventionally(final SAMSequenceDictionary sequenceDictionary,
+ final boolean createIndex,
+ final List<File> inputFiles,
+ final File outputFile) {
+ final EnumSet<Options> options = EnumSet.copyOf(VariantContextWriterFactory.DEFAULT_OPTIONS);
+ if (createIndex) options.add(Options.INDEX_ON_THE_FLY); else options.remove(Options.INDEX_ON_THE_FLY);
+ final VariantContextWriter out = VariantContextWriterFactory.create(outputFile, sequenceDictionary, options);
+
+ final ProgressLogger progress = new ProgressLogger(log, 10000);
+ VariantContext lastContext = null;
+ File lastFile = null;
+ VCFHeader firstHeader = null;
+ VariantContextComparator comparator = null;
+
+ for (final File f : inputFiles) {
+ log.debug("Gathering from file: ", f.getAbsolutePath());
+ final VCFFileReader variantReader = new VCFFileReader(f, false);
+ final PeekableIterator<VariantContext> variantIterator = new PeekableIterator<VariantContext>(variantReader.iterator());
+ final VCFHeader header = variantReader.getFileHeader();
+
+ if (firstHeader == null) {
+ firstHeader = header;
+ out.writeHeader(firstHeader);
+ comparator = new VariantContextComparator(firstHeader.getContigLines());
+ }
+
+ if (lastContext != null && variantIterator.hasNext()) {
+ final VariantContext vc = variantIterator.peek();
+ if (comparator.compare(vc, lastContext) <= 0) {
+ throw new IllegalStateException("First variant in file " + f.getAbsolutePath() + " is at " + vc.getSource() +
+ " but last variant in earlier file " + lastFile.getAbsolutePath() + " is at " + lastContext.getSource());
+ }
+ }
+
+ while (variantIterator.hasNext()) {
+ lastContext = variantIterator.next();
+ out.add(lastContext);
+ progress.record(lastContext.getChr(), lastContext.getStart());
+ }
+
+ lastFile = f;
+
+ CloserUtil.close(variantIterator);
+ CloserUtil.close(variantReader);
+ }
+
+ out.close();
+ }
+
+ /**
+ * Assumes that all inputs and outputs are block compressed VCF files and copies them without decompressing and parsing
+ * most of the gzip blocks. Will decompress and parse blocks up to the one containing the end of the header in each file
+ * (often the first block) and re-compress any data remaining in that block into a new block in the output file. Subsequent
+ * blocks (excluding a terminator block if present) are copied directly from input to output.
+ */
+ private static void gatherWithBlockCopying(final List<File> vcfs, final File output) {
+ try {
+ final FileOutputStream out = new FileOutputStream(output);
+ boolean isFirstFile = true;
+
+ for (final File f : vcfs) {
+ log.info("Gathering " + f.getAbsolutePath());
+ final FileInputStream in = new FileInputStream(f);
+
+ // a) It's good to check that the end of the file is valid and b) we need to know if there's a terminator block and not copy it
+ final BlockCompressedInputStream.FileTermination term = BlockCompressedInputStream.checkTermination(f);
+ if (term == BlockCompressedInputStream.FileTermination.DEFECTIVE) throw new PicardException(f.getAbsolutePath() + " does not have a valid GZIP block at the end of the file.");
+
+ if (!isFirstFile) {
+ final BlockCompressedInputStream blockIn = new BlockCompressedInputStream(in, false);
+ boolean lastByteNewline = true;
+
+ while (in.available() > 0) {
+ // Read a block - blockIn.available() is guaranteed to return the bytes remaining in the block that has been
+ // read, and since we haven't consumed any yet, that is the block size.
+ final int blockLength = blockIn.available();
+ final byte[] blockContents = new byte[blockLength];
+ final int read = blockIn.read(blockContents);
+ if (blockLength == 0 || read != blockLength) throw new IllegalStateException("Could not read available bytes from BlockCompressedInputStream.");
+
+ // Scan forward within the block to see if we can find the end of the header within this block
+ int firstNonHeaderByteIndex = -1;
+ for (int i=0; i<read; ++i) {
+ final byte b = blockContents[i];
+ final boolean thisByteNewline = (b == '\n' || b == '\r');
+
+ if (lastByteNewline && !thisByteNewline && b != '#') {
+ // Aha! Found first byte of non-header data in file!
+ firstNonHeaderByteIndex = i;
+ break;
+ }
+
+ lastByteNewline = thisByteNewline;
+ }
+
+ // If we found the end of the header then write the remainder of this block out as a
+ // new gzip block and then break out of the while loop
+ if (firstNonHeaderByteIndex >= 0) {
+ final BlockCompressedOutputStream blockOut = new BlockCompressedOutputStream(out, null);
+ blockOut.write(blockContents, firstNonHeaderByteIndex, blockContents.length - firstNonHeaderByteIndex);
+ blockOut.flush();
+ // Don't close blockOut because closing underlying stream would break everything
+ break;
+ }
+ }
+ }
+
+ // Copy remainder of input stream into output stream
+ final long currentPos = in.getChannel().position();
+ final long length = f.length();
+ final long skipLast = (term == BlockCompressedInputStream.FileTermination.HAS_TERMINATOR_BLOCK) ?
+ BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK.length : 0;
+ final long bytesToWrite = length - skipLast - currentPos;
+
+ IOUtil.transferByStream(in, out, bytesToWrite);
+ in.close();
+ isFirstFile = false;
+ }
+
+ // And lastly add the Terminator block and close up
+ out.write(BlockCompressedStreamConstants.EMPTY_GZIP_BLOCK);
+ out.close();
+ }
+ catch (final IOException ioe) {
+ throw new RuntimeIOException(ioe);
+ }
+ }
+}
diff --git a/src/java/picard/vcf/GenotypeConcordance.java b/src/java/picard/vcf/GenotypeConcordance.java
new file mode 100644
index 0000000..ca15069
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordance.java
@@ -0,0 +1,654 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.PeekableIterator;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.tribble.Tribble;
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextComparator;
+import htsjdk.variant.vcf.VCFFileReader;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+import picard.vcf.GenotypeConcordanceStates.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import static htsjdk.variant.variantcontext.VariantContext.Type.*;
+
+/**
+ * Calculates the concordance between genotype data for two samples in two different VCFs - one being considered the truth (or reference)
+ * the other being the call. The concordance is broken into separate results sections for SNPs and indels. Summary and detailed statistics
+ * are reported
+ *
+ * @author Tim Fennell
+ * @author George Grant
+ */
+ at CommandLineProgramProperties(
+ usage = "Calculates the concordance between genotype data for two samples in two different VCFs - one being considered the truth (or reference) " +
+ "the other being considered the call. The concordance is broken into separate results sections for SNPs and indels. Summary and detailed statistics are reported\n\n" +
+ "Note that for any pair of variants to compare, only the alleles for the samples under interrogation are considered " +
+ "and MNP, Symbolic, and Mixed classes of variants are not included.",
+ usageShort = "Calculates the concordance between genotype data for two samples in two different VCFs",
+ programGroup = VcfOrBcf.class
+)
+public class GenotypeConcordance extends CommandLineProgram {
+ @Option(shortName = "TV", doc="The VCF containing the truth sample")
+ public File TRUTH_VCF;
+
+ @Option(shortName = "CV", doc="The VCF containing the call sample")
+ public File CALL_VCF;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Basename for the two metrics files that are to be written." +
+ " Resulting files will be <OUTPUT>" + SUMMARY_METRICS_FILE_EXTENSION + " and <OUTPUT>" + DETAILED_METRICS_FILE_EXTENSION + ".")
+ public File OUTPUT;
+
+ @Option(shortName = "TS", doc="The name of the truth sample within the truth VCF")
+ public String TRUTH_SAMPLE;
+
+ @Option(shortName = "CS", doc="The name of the call sample within the call VCF")
+ public String CALL_SAMPLE;
+
+ @Option(doc="One or more interval list files that will be used to limit the genotype concordance. Note - if intervals are specified, the VCF files must be indexed.")
+ public List<File> INTERVALS;
+
+ @Option(doc="If true, multiple interval lists will be intersected. If false multiple lists will be unioned.")
+ public boolean INTERSECT_INTERVALS = true;
+
+ @Option(doc="Genotypes below this genotype quality will have genotypes classified as LowGq.")
+ public int MIN_GQ = 0;
+
+ @Option(doc="Genotypes below this depth will have genotypes classified as LowDp.")
+ public int MIN_DP = 0;
+
+ @Option(doc="If true, output all rows in detailed statistics even when count == 0. When false only output rows with non-zero counts.")
+ public boolean OUTPUT_ALL_ROWS = false;
+
+ @Option(doc="If true, use the VCF index, else iterate over the entire VCF.", optional = true)
+ public boolean USE_VCF_INDEX = false;
+
+ @Option(shortName = "MISSING_HOM", doc="Default is false, which follows the GA4GH Scheme. If true, missing sites in the truth set will be " +
+ "treated as HOM_REF sites and sites missing in both the truth and call sets will be true negatives. Useful when hom ref sites are left out of the truth set. " +
+ "This flag can only be used with a high confidence interval list.")
+ public boolean MISSING_SITES_HOM_REF = false;
+
+ private final Log log = Log.getInstance(GenotypeConcordance.class);
+ private final ProgressLogger progress = new ProgressLogger(log, 10000, "checked", "variants");
+
+ public static final String SUMMARY_METRICS_FILE_EXTENSION = ".genotype_concordance_summary_metrics";
+ public static final String DETAILED_METRICS_FILE_EXTENSION = ".genotype_concordance_detail_metrics";
+ public static final String CONTINGENCY_METRICS_FILE_EXTENSION = ".genotype_concordance_contingency_metrics";
+
+ protected GenotypeConcordanceCounts snpCounter;
+ public GenotypeConcordanceCounts getSnpCounter() { return snpCounter; }
+
+ protected GenotypeConcordanceCounts indelCounter;
+ public GenotypeConcordanceCounts getIndelCounter() { return indelCounter; }
+
+ // TODO: add optimization if the samples are in the same file
+ // TODO: add option for auto-detect pairs based on same sample name
+ // TODO: allow multiple sample-pairs in one pass
+
+ public static void main(final String[] args) {
+ new GenotypeConcordance().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected String[] customCommandLineValidation() {
+ // Note - If the user specifies to use INTERVALS, the code will fail if the vcfs are not indexed, so we set USE_VCF_INDEX to true and check that the vcfs are indexed.
+ IOUtil.assertFileIsReadable(TRUTH_VCF);
+ IOUtil.assertFileIsReadable(CALL_VCF);
+ final boolean usingIntervals = this.INTERVALS != null && this.INTERVALS.size() > 0;
+ final List<String> errors = new ArrayList<String>();
+ if (usingIntervals) {
+ USE_VCF_INDEX = true;
+ }
+ if (USE_VCF_INDEX) {
+ // Index file is required either because we are using intervals, or because user-set parameter
+ if (!indexExists(TRUTH_VCF)) {
+ errors.add("The index file was not found for the TRUTH VCF. Note that if intervals are specified, the VCF files must be indexed.");
+ }
+ if (!indexExists(CALL_VCF)) {
+ errors.add("The index file was not found for the CALL VCF. Note that if intervals are specified, the VCF files must be indexed.");
+ }
+ }
+ if (MISSING_SITES_HOM_REF) {
+ //If you are using this flag you must include a high confidence interval list where missing sites are hom_ref.
+ if (!usingIntervals){
+ errors.add("You cannot use the MISSING_HOM option without also supplying an interval list over which missing " +
+ "sites are considered confident homozygous reference calls.");
+ }
+ }
+
+ if (errors.isEmpty()) {
+ return null;
+ } else {
+ return errors.toArray(new String[errors.size()]);
+ }
+ }
+
+ /**
+ * Determines whether an index file exists for the given vcf file using standard extension suffixes
+ *
+ * @param vcf the vcf file to investigate
+ * @return true if an index file exists, false otherwise
+ */
+ private boolean indexExists(final File vcf) {
+ return Tribble.indexFile(vcf).exists() || Tribble.tabixIndexFile(vcf).exists();
+ }
+
+ @Override protected int doWork() {
+ final File summaryMetricsFile = new File(OUTPUT + SUMMARY_METRICS_FILE_EXTENSION);
+ final File detailedMetricsFile = new File(OUTPUT + DETAILED_METRICS_FILE_EXTENSION);
+ final File contingencyMetricsFile = new File(OUTPUT + CONTINGENCY_METRICS_FILE_EXTENSION);
+ IOUtil.assertFileIsWritable(summaryMetricsFile);
+ IOUtil.assertFileIsWritable(detailedMetricsFile);
+ IOUtil.assertFileIsWritable(contingencyMetricsFile);
+
+ final boolean usingIntervals = this.INTERVALS != null && this.INTERVALS.size() > 0;
+ IntervalList intervals = null;
+ SAMSequenceDictionary intervalsSamSequenceDictionary = null;
+ if (usingIntervals) {
+ log.info("Starting to load intervals list(s).");
+ long genomeBaseCount = 0;
+ for (final File f : INTERVALS) {
+ IOUtil.assertFileIsReadable(f);
+ final IntervalList tmpIntervalList = IntervalList.fromFile(f);
+ if (genomeBaseCount == 0) { // Don't count the reference length more than once.
+ intervalsSamSequenceDictionary = tmpIntervalList.getHeader().getSequenceDictionary();
+ genomeBaseCount = intervalsSamSequenceDictionary.getReferenceLength();
+ }
+
+ if (intervals == null) intervals = tmpIntervalList;
+ else if (INTERSECT_INTERVALS) intervals = IntervalList.intersection(intervals, tmpIntervalList);
+ else intervals = IntervalList.union(intervals, tmpIntervalList);
+ }
+ if (intervals != null) {
+ intervals = intervals.uniqued();
+ }
+ log.info("Finished loading up intervals list(s).");
+ }
+ final VCFFileReader truthReader = new VCFFileReader(TRUTH_VCF, USE_VCF_INDEX);
+ final VCFFileReader callReader = new VCFFileReader(CALL_VCF, USE_VCF_INDEX);
+
+ // Check that the samples actually exist in the files!
+ if (!truthReader.getFileHeader().getGenotypeSamples().contains(TRUTH_SAMPLE)) {
+ throw new PicardException("File " + TRUTH_VCF.getAbsolutePath() + " does not contain genotypes for sample " + TRUTH_SAMPLE);
+ }
+ if (!callReader.getFileHeader().getGenotypeSamples().contains(CALL_SAMPLE)) {
+ throw new PicardException("File " + CALL_VCF.getAbsolutePath() + " does not contain genotypes for sample " + CALL_SAMPLE);
+ }
+
+ // Verify that both VCFs have the same Sequence Dictionary
+ SequenceUtil.assertSequenceDictionariesEqual(truthReader.getFileHeader().getSequenceDictionary(), callReader.getFileHeader().getSequenceDictionary());
+
+ if (usingIntervals) {
+ // If using intervals, verify that the sequence dictionaries agree with those of the VCFs
+ SequenceUtil.assertSequenceDictionariesEqual(intervalsSamSequenceDictionary, truthReader.getFileHeader().getSequenceDictionary());
+ }
+
+ // Build the pair of iterators over the regions of interest
+ final Iterator<VariantContext> truthIterator, callIterator;
+ if (usingIntervals) {
+ truthIterator = new ByIntervalListVariantContextIterator(truthReader, intervals);
+ callIterator = new ByIntervalListVariantContextIterator(callReader, intervals);
+ }
+ else {
+ truthIterator = truthReader.iterator();
+ callIterator = callReader.iterator();
+ }
+
+ // Now do the iteration and count things up
+ final PairedVariantSubContextIterator pairedIterator = new PairedVariantSubContextIterator(truthIterator, TRUTH_SAMPLE, callIterator, CALL_SAMPLE, truthReader.getFileHeader().getSequenceDictionary());
+ snpCounter = new GenotypeConcordanceCounts();
+ indelCounter = new GenotypeConcordanceCounts();
+
+ // A map to keep track of the count of Truth/Call States which we could not successfully classify
+ final Map<String, Integer> unClassifiedStatesMap = new HashMap<String, Integer>();
+
+ log.info("Starting iteration over variants.");
+ while (pairedIterator.hasNext()) {
+ final VcTuple tuple = pairedIterator.next();
+
+ final VariantContext.Type truthVariantContextType = tuple.truthVariantContext != null ? tuple.truthVariantContext.getType() : NO_VARIATION;
+ final VariantContext.Type callVariantContextType = tuple.callVariantContext != null ? tuple.callVariantContext.getType() : NO_VARIATION;
+
+ // A flag to keep track of whether we have been able to successfully classify the Truth/Call States.
+ // Unclassified include MIXED/MNP/Symbolic...
+ boolean stateClassified = false;
+ final TruthAndCallStates truthAndCallStates = determineState(tuple.truthVariantContext, TRUTH_SAMPLE, tuple.callVariantContext, CALL_SAMPLE, MIN_GQ, MIN_DP);
+ if (truthVariantContextType == SNP) {
+ if ((callVariantContextType == SNP) || (callVariantContextType == MIXED) || (callVariantContextType == NO_VARIATION)) {
+ // Note. If truth is SNP and call is MIXED, the event will be logged in the indelCounter, with row = MIXED
+ snpCounter.increment(truthAndCallStates);
+ stateClassified = true;
+ }
+ }
+ else if (truthVariantContextType == INDEL) {
+ // Note. If truth is Indel and call is MIXED, the event will be logged in the indelCounter, with row = MIXED
+ if ((callVariantContextType == INDEL) || (callVariantContextType == MIXED) || (callVariantContextType == NO_VARIATION)) {
+ indelCounter.increment(truthAndCallStates);
+ stateClassified = true;
+ }
+ }
+ else if (truthVariantContextType == MIXED) {
+ // Note. If truth is MIXED and call is SNP, the event will be logged in the snpCounter, with column = MIXED
+ if (callVariantContextType == SNP) {
+ snpCounter.increment(truthAndCallStates);
+ stateClassified = true;
+ }
+ // Note. If truth is MIXED and call is INDEL, the event will be logged in the snpCounter, with column = MIXED
+ else if (callVariantContextType == INDEL) {
+ indelCounter.increment(truthAndCallStates);
+ stateClassified = true;
+ }
+ }
+ else if (truthVariantContextType == NO_VARIATION) {
+ if (callVariantContextType == SNP) {
+ snpCounter.increment(truthAndCallStates);
+ stateClassified = true;
+ }
+ else if (callVariantContextType == INDEL) {
+ indelCounter.increment(truthAndCallStates);
+ stateClassified = true;
+ }
+ }
+ if (!stateClassified) {
+ final String condition = truthVariantContextType + " " + callVariantContextType;
+ Integer count = unClassifiedStatesMap.get(condition);
+ if (count == null) count = 0;
+ unClassifiedStatesMap.put(condition, ++count);
+ }
+
+ final VariantContext variantContextForLogging = tuple.truthVariantContext != null ? tuple.truthVariantContext : tuple.callVariantContext;
+ progress.record(variantContextForLogging.getContig(), variantContextForLogging.getStart());
+ }
+
+ //snp counter add in X number of missing-missing hom ref's (truth and call state)
+ //missing missing is total interval size minus number of iterations in while loop
+ if (MISSING_SITES_HOM_REF) {
+ //need to know size of intervals to add missing-missing sites for NIST schema.
+ final long intervalBaseCount = intervals.getBaseCount();
+ addMissingTruthAndMissingCallStates(snpCounter.getCounterSize(), intervalBaseCount, snpCounter);
+ addMissingTruthAndMissingCallStates(indelCounter.getCounterSize(), intervalBaseCount, indelCounter);
+ }
+
+ // Calculate and store the summary-level metrics
+ final MetricsFile<GenotypeConcordanceSummaryMetrics,?> genotypeConcordanceSummaryMetricsFile = getMetricsFile();
+ GenotypeConcordanceSummaryMetrics summaryMetrics = new GenotypeConcordanceSummaryMetrics(SNP, snpCounter, TRUTH_SAMPLE, CALL_SAMPLE, MISSING_SITES_HOM_REF);
+ genotypeConcordanceSummaryMetricsFile.addMetric(summaryMetrics);
+ summaryMetrics = new GenotypeConcordanceSummaryMetrics(INDEL, indelCounter, TRUTH_SAMPLE, CALL_SAMPLE, MISSING_SITES_HOM_REF);
+ genotypeConcordanceSummaryMetricsFile.addMetric(summaryMetrics);
+ genotypeConcordanceSummaryMetricsFile.write(summaryMetricsFile);
+
+ // Calculate and store the detailed metrics for both SNP and indels
+ final MetricsFile<GenotypeConcordanceDetailMetrics,?> genotypeConcordanceDetailMetrics = getMetricsFile();
+ outputDetailMetricsFile(SNP, genotypeConcordanceDetailMetrics, snpCounter, TRUTH_SAMPLE, CALL_SAMPLE);
+ outputDetailMetricsFile(INDEL, genotypeConcordanceDetailMetrics, indelCounter, TRUTH_SAMPLE, CALL_SAMPLE);
+ genotypeConcordanceDetailMetrics.write(detailedMetricsFile);
+
+ // Calculate and score the contingency metrics
+ final MetricsFile<GenotypeConcordanceContingencyMetrics,?> genotypeConcordanceContingencyMetricsFile = getMetricsFile();
+ GenotypeConcordanceContingencyMetrics contingencyMetrics = new GenotypeConcordanceContingencyMetrics(SNP, snpCounter, TRUTH_SAMPLE, CALL_SAMPLE, MISSING_SITES_HOM_REF);
+ genotypeConcordanceContingencyMetricsFile.addMetric(contingencyMetrics);
+ contingencyMetrics = new GenotypeConcordanceContingencyMetrics(INDEL, indelCounter, TRUTH_SAMPLE, CALL_SAMPLE, MISSING_SITES_HOM_REF);
+ genotypeConcordanceContingencyMetricsFile.addMetric(contingencyMetrics);
+ genotypeConcordanceContingencyMetricsFile.write(contingencyMetricsFile);
+
+ for (final String condition : unClassifiedStatesMap.keySet()) {
+ log.info("Uncovered truth/call Variant Context Type Counts: " + condition + " " + unClassifiedStatesMap.get(condition));
+ }
+
+ return 0;
+ }
+
+ /**
+ * Method to add missing sites that are KNOWN to be HOM_REF in the case of the NIST truth data set.
+ */
+ private void addMissingTruthAndMissingCallStates(final double numVariants, final long intervalBaseCount, final GenotypeConcordanceCounts counter){
+ final double countMissingMissing = intervalBaseCount-numVariants;
+ final TruthAndCallStates missingMissing = new TruthAndCallStates(TruthState.MISSING, CallState.MISSING);
+ counter.increment(missingMissing, countMissingMissing);
+ }
+
+ /**
+ * Outputs the detailed statistics tables for SNP and Indel match categories.
+ **/
+ private void outputDetailMetricsFile(final VariantContext.Type variantType, final MetricsFile<GenotypeConcordanceDetailMetrics,?> genotypeConcordanceDetailMetricsFile,
+ final GenotypeConcordanceCounts counter, final String truthSampleName, final String callSampleName) {
+ final GenotypeConcordanceSchemeFactory schemeFactory = new GenotypeConcordanceSchemeFactory();
+ final GenotypeConcordanceScheme scheme = schemeFactory.getScheme(MISSING_SITES_HOM_REF);
+ scheme.validateScheme();
+ for (final TruthState truthState : TruthState.values()) {
+ for (final CallState callState : CallState.values()) {
+ final int count = counter.getCount(truthState, callState);
+ final String contingencyValues = scheme.getContingencyStateString(truthState, callState);
+ if (count > 0 || OUTPUT_ALL_ROWS) {
+ final GenotypeConcordanceDetailMetrics detailMetrics = new GenotypeConcordanceDetailMetrics();
+ detailMetrics.VARIANT_TYPE = variantType;
+ detailMetrics.TRUTH_SAMPLE = truthSampleName;
+ detailMetrics.CALL_SAMPLE = callSampleName;
+ detailMetrics.TRUTH_STATE = truthState;
+ detailMetrics.CALL_STATE = callState;
+ detailMetrics.COUNT = count;
+ detailMetrics.CONTINGENCY_VALUES = contingencyValues;
+ genotypeConcordanceDetailMetricsFile.addMetric(detailMetrics);
+ }
+ }
+ }
+ }
+
+ /**
+ * A method to determine the truth and call states for a pair of variant contexts representing truth and call.
+ * A variety of variant and genotype-level checks are first used to determine if either of the the variant contexts
+ * are filtered and after that a comparison of the called genotype alleles to determine appropriate truth and call state
+ *
+ * Note that this method does NOT check for SNP versus Indel. It is assumed that that check is done by the caller and the results
+ * of this method are stored by SNP/Indel.
+ * Note that if a variant context has BOTH GQ and DP less than the specified threshold, then it will be of Truth/Call State LOW_GQ
+ *
+ * @param truthContext A variant context representing truth
+ * @param truthSample The name of the truth sample
+ * @param callContext A variant context representing the call
+ * @param callSample The name of the call sample
+ * @param minGq Threshold for filtering by genotype attribute GQ
+ * @param minDp Threshold for filtering by genotype attribute DP
+ * @return TruthAndCallStates object containing the TruthState and CallState determined here.
+ */
+ final TruthAndCallStates determineState(final VariantContext truthContext, final String truthSample, final VariantContext callContext, final String callSample, final int minGq, final int minDp) {
+ TruthState truthState = null;
+ CallState callState = null;
+
+ // TODO: what about getPloidy()
+
+ Genotype truthGenotype = null, callGenotype = null;
+
+ // Site level checks
+ // Added potential to include missing sites as hom ref..
+ if (truthContext == null) truthState = TruthState.MISSING;
+ else if (truthContext.isMixed()) truthState = TruthState.IS_MIXED;
+ else if (truthContext.isFiltered()) truthState = TruthState.VC_FILTERED;
+ else {
+ // Genotype level checks
+ truthGenotype = truthContext.getGenotype(truthSample);
+ if (truthGenotype.isNoCall()) truthState = TruthState.NO_CALL;
+ else if (truthGenotype.isFiltered()) truthState = TruthState.GT_FILTERED;
+ else if ((truthGenotype.getGQ() != -1) && (truthGenotype.getGQ() < minGq)) truthState = TruthState.LOW_GQ;
+ else if ((truthGenotype.getDP() != -1) && (truthGenotype.getDP() < minDp)) truthState = TruthState.LOW_DP;
+ // Note. Genotype.isMixed means that it is called on one chromosome and NOT on the other
+ else if ((truthGenotype.isMixed())) truthState = TruthState.NO_CALL;
+ }
+
+ // Site level checks
+ if (callContext == null) callState = CallState.MISSING;
+ else if (callContext.isMixed()) callState = CallState.IS_MIXED;
+ else if (callContext.isFiltered()) callState = CallState.VC_FILTERED;
+ else {
+ // Genotype level checks
+ callGenotype = callContext.getGenotype(callSample);
+ if (callGenotype.isNoCall()) callState = CallState.NO_CALL;
+ else if (callGenotype.isFiltered()) callState = CallState.GT_FILTERED;
+ else if ((callGenotype.getGQ() != -1) && (callGenotype.getGQ() < minGq)) callState = CallState.LOW_GQ;
+ else if ((callGenotype.getDP() != -1) && (callGenotype.getDP() < minDp)) callState = CallState.LOW_DP;
+ // Note. Genotype.isMixed means that it is called on one chromosome and NOT on the other
+ else if ((callGenotype.isMixed())) callState = CallState.NO_CALL;
+ }
+
+ // initialize the reference
+ String truthRef = (truthContext != null) ? truthContext.getReference().getBaseString() : null;
+ String callRef = (callContext != null) ? callContext.getReference().getBaseString() : null;
+
+ String truthAllele1 = null;
+ String truthAllele2 = null;
+ if (null == truthState) {
+ // Truth State not yet determined - will need to use truth genotypes below
+ if (truthGenotype.getAlleles().size() != 2) {
+ throw new IllegalStateException("Genotype for Variant Context: " + truthContext + " does not have exactly 2 alleles");
+ }
+ truthAllele1 = truthGenotype.getAllele(0).getBaseString();
+ truthAllele2 = truthGenotype.getAllele(1).getBaseString();
+ }
+
+ String callAllele1 = null;
+ String callAllele2 = null;
+ if (null == callState) {
+ if (callGenotype.getAlleles().size() != 2) {
+ throw new IllegalStateException("Genotype for Variant Context: " + callContext + " does not have exactly 2 alleles");
+ }
+ callAllele1 = callGenotype.getAllele(0).getBaseString();
+ callAllele2 = callGenotype.getAllele(1).getBaseString();
+ }
+
+ if ((truthRef != null && callRef != null) && (!truthRef.equals(callRef))) {
+ // This is for dealing with indel conditions, where we can have truth being TCAA*/T, call being TCAACAA*/TCAA (*=ref)
+ // So, we want to verify that both refs start with the shorter substring of the two
+ // and then we want to pad the shorter's ref and alleles, so that TCAA*/T becomes TCAACAA*/TCAA (i.e. tacking on the CAA)
+ if (truthRef.length() < callRef.length()) {
+ // Truth reference is shorter than call reference
+ final String suffix = getStringSuffix(callRef, truthRef, "Ref alleles mismatch between: " + truthContext + " and " + callContext);
+ truthRef = truthRef + suffix;
+ if (null == truthState) {
+ truthAllele1 = truthGenotype.getAllele(0).getBaseString() + suffix;
+ truthAllele2 = truthGenotype.getAllele(1).getBaseString() + suffix;
+ }
+ }
+ else if (truthRef.length() > callRef.length()) {
+ // call reference is shorter than truth:
+ final String suffix = getStringSuffix(truthRef, callRef, "Ref alleles mismatch between: " + truthContext + " and " + callContext);
+ callRef = callRef + suffix;
+ if (null == callState) {
+ callAllele1 = callGenotype.getAllele(0).getBaseString() + suffix;
+ callAllele2 = callGenotype.getAllele(1).getBaseString() + suffix;
+ }
+ }
+ else {
+ // Same length - so they must just disagree...
+ throw new IllegalStateException("Ref alleles mismatch between: " + truthContext + " and " + callContext);
+ }
+ }
+
+ final OrderedSet<String> allAlleles = new OrderedSet<String>();
+
+ if (truthContext != null || callContext != null) {
+ // Store the refAllele as the first (0th index) allele in allAlleles (only can do if at least one context is non-null)
+ allAlleles.smartAdd(truthContext == null ? callRef : truthRef); // zeroth allele;
+ }
+
+ if (null == truthState) {
+ // If truthState is not null, it has not yet been determined, and the truthContext has genotypes (i.e. the alleles are valid)
+ allAlleles.smartAdd(truthAllele1);
+ allAlleles.smartAdd(truthAllele2);
+ }
+
+ /**
+ * if either of the call alleles is in allAlleles, with index > 1, we need to make sure that allele has index 1.
+ * this is because of the following situations:
+ *
+ * REF TRUTH CALL-GT TRUTH-STATE CALL-STATE
+ * A C/G C/A HET_VAR1_VAR2 HET_REF_VAR1
+ * A G/C C/A HET_VAR1_VAR2 HET_REF_VAR1
+ * A G/C G/A HET_VAR1_VAR2 HET_REF_VAR1
+ * A G/C G/A HET_VAR1_VAR2 HET_REF_VAR1
+ *
+ * so, in effect, the order of the alleles in the TRUTH doesn't determine the assignment of allele to Var1 and Var2,
+ * only once the call is known can this assignment be made.
+ */
+
+ if (null == callState) {
+ // If callState is not null, it has not yet been determined, and the callContext has genotypes (i.e. the alleles are valid)
+ if (allAlleles.indexOf(callAllele1) > 1 || allAlleles.indexOf(callAllele2) > 1) {
+ allAlleles.remove(2);
+ allAlleles.remove(1);
+ allAlleles.smartAdd(truthAllele2);
+ allAlleles.smartAdd(truthAllele1);
+ }
+
+ allAlleles.smartAdd(callAllele1);
+ allAlleles.smartAdd(callAllele2);
+ }
+
+ // Truth
+ if (null == truthState) {
+ final int allele0idx = allAlleles.indexOf(truthAllele1);
+ final int allele1idx = allAlleles.indexOf(truthAllele2);
+
+ if (allele0idx == allele1idx) { //HOM
+ truthState = TruthState.getHom(allele0idx);
+ } else { //HET
+ truthState = TruthState.getVar(allele0idx, allele1idx);
+ }
+ }
+
+ // Call
+ if (null == callState) {
+ final int allele0idx = allAlleles.indexOf(callAllele1);
+ final int allele1idx = allAlleles.indexOf(callAllele2);
+
+ if (allele0idx == allele1idx) { //HOM
+ callState = CallState.getHom(allele0idx);
+ } else { //HET
+ callState = CallState.getHet(allele0idx, allele1idx);
+ }
+
+ if (null == callState) {
+ throw new IllegalStateException("This should never happen... Could not classify the call variant: " + callGenotype);
+ }
+ }
+
+ return new TruthAndCallStates(truthState, callState);
+ }
+
+ final String getStringSuffix(final String longerString, final String shorterString, final String errorMsg) {
+ // Truth reference is shorter than call reference
+ if (!longerString.startsWith(shorterString)) {
+ throw new IllegalStateException(errorMsg);
+ }
+ return longerString.substring(shorterString.length());
+ }
+}
+
+/** like a list, but if you ask for an index of an item, it will first add that item.
+also, same item cannot be added more than once (like a set)
+ */
+class OrderedSet<T> extends ArrayList<T> {
+
+ public int smartIndexOf(final T o) {
+ smartAdd(o);
+ return super.indexOf(o);
+ }
+
+ public boolean smartAdd(final T o) {
+ if (!this.contains(o)) {
+ return add(o);
+ }
+ return false;
+ }
+}
+
+/** Little class to hold a pair of VariantContexts that are in sync with one another. */
+class VcTuple {
+ public final VariantContext truthVariantContext;
+ public final VariantContext callVariantContext;
+
+ VcTuple(final VariantContext truthVariantContext, final VariantContext callVariantContext) {
+ this.truthVariantContext = truthVariantContext;
+ this.callVariantContext = callVariantContext;
+ }
+}
+
+/** Iterator that takes a pair of iterators over VariantContexts and iterates over them in tandem. */
+class PairedVariantSubContextIterator implements Iterator<VcTuple> {
+ private final PeekableIterator<VariantContext> truthIterator;
+ private final String truthSample;
+ private final PeekableIterator<VariantContext> callIterator;
+ private final String callSample;
+ private final VariantContextComparator comparator;
+
+ PairedVariantSubContextIterator(final Iterator<VariantContext> truthIterator, final String truthSample,
+ final Iterator<VariantContext> callIterator, final String callSample,
+ final SAMSequenceDictionary dict) {
+ this.truthIterator = new PeekableIterator<VariantContext>(truthIterator);
+ this.truthSample = truthSample;
+ this.callIterator = new PeekableIterator<VariantContext>(callIterator);
+ this.callSample = callSample;
+ this.comparator = new VariantContextComparator(dict);
+ }
+
+ @Override
+ public boolean hasNext() {
+ return this.truthIterator.hasNext() || this.callIterator.hasNext();
+ }
+
+ @Override
+ public VcTuple next() {
+ if (!hasNext()) throw new IllegalStateException("next() called while hasNext() is false.");
+
+ final VariantContext truthVariantContext = this.truthIterator.hasNext() ? this.truthIterator.peek() : null;
+ final VariantContext callVariantContext = this.callIterator.hasNext() ? this.callIterator.peek() : null;
+
+ // If one or the other is null because there is no next, just return a one-sided tuple
+ if (truthVariantContext == null) {
+ return new VcTuple(null, this.callIterator.next().subContextFromSample(callSample));
+ }
+ else if (callVariantContext == null) {
+ return new VcTuple(this.truthIterator.next().subContextFromSample(truthSample), null);
+ }
+
+ // Otherwise check the ordering and do the right thing
+ final int ordering = this.comparator.compare(truthVariantContext, callVariantContext);
+ if (ordering == 0) {
+ return new VcTuple(this.truthIterator.next().subContextFromSample(truthSample), this.callIterator.next().subContextFromSample(callSample));
+ }
+ else if (ordering < 0) {
+ return new VcTuple(this.truthIterator.next().subContextFromSample(truthSample), null);
+ }
+ else {
+ return new VcTuple(null, this.callIterator.next().subContextFromSample(callSample));
+ }
+ }
+
+ @Override public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
+
+
+
+
diff --git a/src/java/picard/vcf/GenotypeConcordanceContingencyMetrics.java b/src/java/picard/vcf/GenotypeConcordanceContingencyMetrics.java
new file mode 100644
index 0000000..c9c5901
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceContingencyMetrics.java
@@ -0,0 +1,61 @@
+package picard.vcf;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.variant.variantcontext.VariantContext;
+import picard.vcf.GenotypeConcordanceStates.*;
+
+import java.util.Map;
+
+/**
+ * Class that holds metrics about the Genotype Concordance contingency tables.
+ */
+public class GenotypeConcordanceContingencyMetrics extends MetricBase {
+ /**
+ * Empty constructor - needed for unit tests
+ */
+ public GenotypeConcordanceContingencyMetrics() {
+ }
+
+ GenotypeConcordanceContingencyMetrics(final VariantContext.Type variantType, final GenotypeConcordanceCounts concordanceCounts,
+ final String truthSample, final String callSample, final boolean missingSitesFlag) {
+ this.VARIANT_TYPE = variantType;
+ this.TRUTH_SAMPLE = truthSample;
+ this.CALL_SAMPLE = callSample;
+
+ final GenotypeConcordanceSchemeFactory schemeFactory = new GenotypeConcordanceSchemeFactory();
+ final GenotypeConcordanceScheme scheme = schemeFactory.getScheme(missingSitesFlag);
+ scheme.validateScheme();
+ concordanceCounts.validateCountsAgainstScheme(scheme);
+
+ Map<ContingencyState, Integer> counts = concordanceCounts.getContingencyStateCounts(scheme);
+ this.TP_COUNT = counts.get(ContingencyState.TP);
+ this.TN_COUNT = counts.get(ContingencyState.TN);
+ this.FP_COUNT = counts.get(ContingencyState.FP);
+ this.FN_COUNT = counts.get(ContingencyState.FN);
+ this.EMPTY_COUNT = counts.get(ContingencyState.EMPTY);
+ }
+
+ /** The type of the event (i.e. either SNP or INDEL) */
+ public VariantContext.Type VARIANT_TYPE;
+
+ /** The name of the 'truth' sample */
+ public String TRUTH_SAMPLE;
+
+ /** The name of the 'call' sample */
+ public String CALL_SAMPLE;
+
+ /** The TP (true positive) count across all variants */
+ public int TP_COUNT;
+
+ /** The TN (true negative) count across all variants */
+ public int TN_COUNT;
+
+ /** The FP (false positive) count across all variants */
+ public int FP_COUNT;
+
+ /** The FN (false negative) count across all variants */
+ public int FN_COUNT;
+
+ /** The empty (no contingency info) count across all variants */
+ public int EMPTY_COUNT;
+}
diff --git a/src/java/picard/vcf/GenotypeConcordanceCounts.java b/src/java/picard/vcf/GenotypeConcordanceCounts.java
new file mode 100644
index 0000000..29340ee
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceCounts.java
@@ -0,0 +1,303 @@
+package picard.vcf;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import htsjdk.samtools.util.Histogram;
+import picard.PicardException;
+import picard.vcf.GenotypeConcordanceStates.*;
+
+/**
+ * A class to store the counts for various truth and call state classifications relative to a reference. With these counts and a provided
+ * scheme, summary metrics can be returned.
+ * @author nhomer
+ */
+public class GenotypeConcordanceCounts {
+
+ /**
+ * Pre-defined sets based on if the caller wishes to return the sensitivity given the common homozygous reference, heterozygous, and homozygous variant cases.
+ * Var truth states can also be used to calculate specificity. Hom Ref and Missing can be added to var truth states because they are needed
+ * for specificity and do not contain TP or FN, so they will not effect sensitivity.
+ */
+ static final TruthState[] HOM_REF_TRUTH_STATES = {TruthState.HOM_REF};
+ static final TruthState[] HET_TRUTH_STATES = {TruthState.HET_REF_VAR1, TruthState.HET_VAR1_VAR2};
+ static final TruthState[] HOM_VAR_TRUTH_STATES = {TruthState.HOM_VAR1};
+ static final TruthState[] VAR_TRUTH_STATES = {TruthState.HET_REF_VAR1, TruthState.HET_VAR1_VAR2, TruthState.HOM_VAR1,
+ TruthState.HOM_REF, TruthState.MISSING};
+
+ /**
+ * Pre-defined sets based on if the caller wishes to return the PPV given the common homozygous reference, heterozygous, and homozygous variant cases.
+ */
+ static final CallState[] HOM_REF_CALL_STATES = {CallState.HOM_REF};
+ static final CallState[] HET_CALL_STATES = {CallState.HET_REF_VAR1, CallState.HET_REF_VAR2, CallState.HET_REF_VAR3,
+ CallState.HET_VAR1_VAR2, CallState.HET_VAR1_VAR3, CallState.HET_VAR3_VAR4};
+ static final CallState[] HOM_VAR_CALL_STATES = {CallState.HOM_VAR1, CallState.HOM_VAR2, CallState.HOM_VAR3};
+ static final CallState[] VAR_CALL_STATES = {CallState.HET_REF_VAR1, CallState.HET_REF_VAR2, CallState.HET_REF_VAR3,
+ CallState.HET_VAR1_VAR2, CallState.HET_VAR1_VAR3, CallState.HET_VAR3_VAR4,
+ CallState.HOM_VAR1, CallState.HOM_VAR2, CallState.HOM_VAR3};
+
+ /** The underlying counts table */
+ private final Histogram<TruthAndCallStates> counter = new Histogram<TruthAndCallStates>();
+
+ /**
+ * Increments a count for the truth/call state tuple.
+ * @param truthAndCallStates
+ */
+ public void increment(final TruthAndCallStates truthAndCallStates) {
+ this.counter.increment(truthAndCallStates);
+ }
+
+ public void increment(final TruthAndCallStates truthAndCallStates, final double count){
+ this.counter.increment(truthAndCallStates, count);
+ }
+
+ public double getCounterSize() {
+ return this.counter.getCount();
+ }
+
+ /**
+ * Validates that there are no counts for NA states in the underlying scheme
+ */
+ public void validateCountsAgainstScheme(final GenotypeConcordanceScheme scheme) {
+ final Set<ContingencyState> naContingencyStates = getContingencyStateSet(GenotypeConcordanceScheme.NA);
+ for (final TruthState truthState : TruthState.values()) {
+ for (final CallState callState : CallState.values()) {
+ final TruthAndCallStates truthAndCallStates = new TruthAndCallStates(truthState, callState);
+ if (0 < getCount(truthAndCallStates)) {
+ final Set<ContingencyState> contingencyStates = getContingencyStateSet(scheme.getConcordanceStateArray(truthAndCallStates));
+ if (contingencyStates.containsAll(naContingencyStates)) {
+ throw new PicardException(String.format("Found counts for an illegal set of states: [%s, %s]", truthState.name(), callState.name()));
+ }
+ }
+ }
+ }
+ }
+
+ private Set<ContingencyState> getContingencyStateSet(final ContingencyState[] contingencyStateArray) {
+ final Set<ContingencyState> contingencyStateSet = new HashSet<ContingencyState>();
+ Collections.addAll(contingencyStateSet, contingencyStateArray);
+ return contingencyStateSet;
+ }
+
+ /**
+ * Genotype Concordance Util calculates the Genotype Concordance and the Non-Ref Genotype Concordance, based on the includeHomRef flag.
+ */
+ private double calculateGenotypeConcordanceUtil(final GenotypeConcordanceScheme scheme, final boolean missingSitesFlag, final boolean includeHomRef) {
+ double numerator = 0.0;
+ double denominator = 0.0;
+
+ scheme.validateScheme();
+
+ final TruthState[] allTruthStates = TruthState.values();
+ final CallState[] allCallStates = CallState.values();
+
+ for (final TruthState truthState : allTruthStates) {
+ for (final CallState callState : allCallStates) {
+ if (!missingSitesFlag && isMissing(truthState, callState)) {
+ continue;
+ }
+ else if (includeHomRef || isVar(truthState, callState)) {
+ final TruthAndCallStates truthAndCallStates = new TruthAndCallStates(truthState, callState);
+ final int count = getCount(truthAndCallStates);
+ if (truthState.getCode()==callState.getCode()) {
+ //If we enter this, we are 'on the diagonal'
+ numerator += count;
+ }
+ denominator += count;
+ }
+ }
+ }
+ return (denominator > 0.0 ? (numerator / denominator) : Double.NaN);
+ }
+
+ /**
+ * Genotype Concordance is the number of times the truth and call states match exactly / all truth and call combinations made
+ * If the GA4GH scheme is being used, any MISSING sites in truth OR call will not be included in the discordance calculations.
+ */
+ public double calculateGenotypeConcordance(final GenotypeConcordanceScheme scheme, final boolean missingSitesFlag) {
+ return calculateGenotypeConcordanceUtil(scheme, missingSitesFlag, true);
+ }
+
+ /**
+ * Non Ref Genotype Concordance is the number of times the truth and call states match exactly for *vars only* / all truth and call *var* combinations made
+ * If the GA4GH scheme is being used, any MISSING sites in truth OR call will not be included in the discordance calculations.
+ */
+ public double calculateNonRefGenotypeConcordance(final GenotypeConcordanceScheme scheme, final boolean missingSitesFlag) {
+ return calculateGenotypeConcordanceUtil(scheme, missingSitesFlag, false);
+ }
+
+ /**
+ * Returns the sensitivity defined by the scheme across the subset of truth states.
+ */
+ public double getSensitivity(final GenotypeConcordanceScheme scheme, final TruthState[] truthStateArray) {
+ /**
+ * Sensitivity is the TP / P = TP / (TP + FN)
+ */
+ double numerator = 0.0;
+ double denominator = 0.0;
+
+ scheme.validateScheme();
+
+ for (final TruthState truthState : truthStateArray) {
+ for (final CallState callState : CallState.values()) {
+ final TruthAndCallStates truthAndCallStates = new TruthAndCallStates(truthState, callState);
+ final int count = getCount(truthAndCallStates);
+ for (final ContingencyState contingencyState : scheme.getConcordanceStateArray(truthAndCallStates)) {
+ if (ContingencyState.TP == contingencyState) {
+ numerator += count;
+ denominator += count;
+ } else if (ContingencyState.FN == contingencyState) {
+ denominator += count;
+ }
+ }
+ }
+ }
+
+ return (numerator / denominator);
+ }
+
+ /**
+ * Returns the PPV defined by the scheme across the subset of call states.
+ */
+ public double Ppv(final GenotypeConcordanceScheme scheme, final CallState[] callStateList) {
+ /**
+ * PPV is the TP / (TP + FP)
+ */
+ double numerator = 0.0;
+ double denominator = 0.0;
+
+ scheme.validateScheme();
+
+ for (final CallState callState : callStateList) {
+ for (final TruthState truthState : TruthState.values()) {
+ final TruthAndCallStates truthAndCallStates = new TruthAndCallStates(truthState, callState);
+ final int count = getCount(truthAndCallStates);
+ for (final ContingencyState contingencyState : scheme.getConcordanceStateArray(truthAndCallStates)) {
+ if (ContingencyState.TP == contingencyState) {
+ numerator += count;
+ denominator += count;
+ } else if (ContingencyState.FP == contingencyState) {
+ denominator += count;
+ }
+ }
+ }
+ }
+
+ return (numerator / denominator);
+ }
+
+ /**
+ * Returns the specificity defined by the scheme across the subset of truth states.
+ */
+ public double getSpecificity(final GenotypeConcordanceScheme scheme, final TruthState[] truthStateArray) {
+ /**
+ * Specificity is the TN / N = TN / (FP + TN)
+ */
+ double numerator = 0.0;
+ double denominator = 0.0;
+
+ scheme.validateScheme();
+
+ for (final TruthState truthState : truthStateArray) {
+ for (final CallState callState : CallState.values()) {
+ final TruthAndCallStates truthAndCallStates = new TruthAndCallStates(truthState, callState);
+ final int count = getCount(truthAndCallStates);
+ for (final ContingencyState contingencyState : scheme.getConcordanceStateArray(truthAndCallStates)) {
+ if (ContingencyState.TN == contingencyState) {
+ numerator += count;
+ denominator += count;
+ } else if (ContingencyState.FP == contingencyState) {
+ denominator += count;
+ }
+ }
+ }
+ }
+ return (numerator / denominator);
+ }
+
+ /**
+ * Returns the count defined by the truth state set and call state set.
+ */
+ public int getCount(final TruthState truthState, final CallState callState) {
+ return getCount(new TruthAndCallStates(truthState, callState));
+ }
+
+ /**
+ * Returns the count defined by the truth state set and call state set.
+ */
+ public int getCount(final TruthAndCallStates truthAndCallStates) {
+ final Histogram<TruthAndCallStates>.Bin bin = this.counter.get(truthAndCallStates);
+ return (bin == null ? 0 : (int) bin.getValue());
+ }
+
+ /**
+ * Returns true if EITHER the truth or call state is a VAR.
+ * Used for calculating non ref genotype concordance.
+ */
+ public boolean isVar(final TruthState truthState, final CallState callState) {
+ final List<TruthState> listOfTruthStates = Arrays.asList(TruthState.HOM_VAR1, TruthState.HET_REF_VAR1, TruthState.HET_VAR1_VAR2);
+ final List<CallState> listOfCallStates = Arrays.asList(CallState.HET_REF_VAR1, CallState.HET_REF_VAR2, CallState.HET_REF_VAR3,
+ CallState.HET_VAR1_VAR2, CallState.HET_VAR1_VAR3, CallState.HET_VAR3_VAR4,
+ CallState.HOM_VAR1, CallState.HOM_VAR2, CallState.HOM_VAR3);
+
+ return listOfTruthStates.contains(truthState) || listOfCallStates.contains(callState);
+ }
+
+ /**
+ * Returns true if EITHER the truth or call state is MISSING.
+ * Used for calculating genotype concordance and non-ref genotype concordance when the GA4GH scheme is used.
+ */
+ public boolean isMissing(final TruthState truthState, final CallState callState) {
+ return truthState == TruthState.MISSING || callState == CallState.MISSING;
+ }
+
+ /**
+ * Returns the sum of all pairs of tuples defined by the truth state set and call state set.
+ */
+ public int getSum(final Set<TruthState> truthStateSet, final Set<CallState> callStateSet) {
+ int count = 0;
+ for (final TruthState truthState : truthStateSet) {
+ for (final CallState callState : callStateSet) {
+ count += getCount(truthState, callState);
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Returns the sum of all pairs of tuples defined by the truth state set and call state set.
+ */
+ public int getSum() {
+ return getSum(new HashSet<TruthState>(Arrays.asList(TruthState.values())), new HashSet<CallState>(Arrays.asList(CallState.values())));
+ }
+
+ /**
+ * Returns the total number of times each contingency state is encountered, summed across all truth/call state pairs.
+ */
+ public Map<ContingencyState, Integer> getContingencyStateCounts(final GenotypeConcordanceScheme scheme) {
+ scheme.validateScheme();
+
+ final Map<ContingencyState, Integer> counts = new HashMap<ContingencyState, Integer>();
+ for (final ContingencyState contingencyState : ContingencyState.values()) {
+ counts.put(contingencyState, 0);
+ }
+
+ for (final TruthState truthState : TruthState.values()) {
+ for (final CallState callState : CallState.values()) {
+ final TruthAndCallStates truthAndCallStates = new TruthAndCallStates(truthState, callState);
+ final ContingencyState[] contingencyStateArray = scheme.getConcordanceStateArray(truthAndCallStates);
+ for (final ContingencyState contingencyState : contingencyStateArray) {
+ final int newCount = counts.get(contingencyState) + getCount(truthAndCallStates);
+ counts.put(contingencyState, newCount);
+ }
+ }
+ }
+
+ return counts;
+ }
+}
diff --git a/src/java/picard/vcf/GenotypeConcordanceDetailMetrics.java b/src/java/picard/vcf/GenotypeConcordanceDetailMetrics.java
new file mode 100644
index 0000000..c3fb616
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceDetailMetrics.java
@@ -0,0 +1,40 @@
+package picard.vcf;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.variant.variantcontext.VariantContext;
+
+/**
+ * Class that holds detail metrics about Genotype Concordance
+ *
+ * @author George Grant
+ */
+public class GenotypeConcordanceDetailMetrics extends MetricBase {
+ /** The type of the event (i.e. either SNP or INDEL) */
+ public VariantContext.Type VARIANT_TYPE;
+
+ /** The name of the 'truth' sample */
+ public String TRUTH_SAMPLE;
+
+ /** The name of the 'call' sample */
+ public String CALL_SAMPLE;
+
+ /** The state of the 'truth' sample (i.e. HOM_REF, HET_REF_VAR1, HET_VAR1_VAR2...) */
+ public GenotypeConcordanceStates.TruthState TRUTH_STATE;
+
+ /** The state of the 'call' sample (i.e. HOM_REF, HET_REF_VAR1...) */
+ public GenotypeConcordanceStates.CallState CALL_STATE;
+
+ /** The number of events of type TRUTH_STATE and CALL_STATE for the EVENT_TYPE and SAMPLEs */
+ public long COUNT;
+
+ /** The list of contingency table values (TP, TN, FP, FN) that are deduced from the truth/call state comparison, given the reference.
+ *
+ * In general, we are comparing two sets of alleles. Therefore, we can have zero or more contingency table values represented in one comparison. For example, if the truthset is
+ * a heterozygous call with both alleles non-reference (HET_VAR1_VAR2), and the callset is a heterozygous call with both alleles non-reference with one of the alternate alleles
+ * matching an alternate allele in the callset, we would have a true positive, false positive, and false negative. The true positive is from the matching alternate alleles, the
+ * false positive is the alternate allele found in the callset but not found in the truthset, and the false negative is the alternate in the truthset not found in the callset.
+ *
+ * We also include a true negative in cases where the reference allele is found in both the truthset and callset.
+ */
+ public String CONTINGENCY_VALUES;
+}
diff --git a/src/java/picard/vcf/GenotypeConcordanceScheme.java b/src/java/picard/vcf/GenotypeConcordanceScheme.java
new file mode 100644
index 0000000..334b28c
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceScheme.java
@@ -0,0 +1,137 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+import htsjdk.samtools.util.StringUtil;
+import picard.PicardException;
+import picard.vcf.GenotypeConcordanceStates.*;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This defines for each valid TruthState and CallState tuple, the set of contingency table entries that to which the tuple should contribute.
+ * @author nhomer
+ */
+public abstract class GenotypeConcordanceScheme{
+
+ public GenotypeConcordanceScheme (){
+ initiateScheme();
+ }
+
+ protected abstract void initiateScheme();
+
+ /** The underlying scheme */
+ protected final Map<TruthAndCallStates, ContingencyState[]> scheme = new HashMap<TruthAndCallStates, ContingencyState[]>();
+
+ /** These are convenience variables for defining a scheme. NA means that such a tuple should never be observed. */
+ public static final ContingencyState[] NA = {ContingencyState.NA};
+ protected static final ContingencyState[] EMPTY = {ContingencyState.EMPTY};
+ protected static final ContingencyState[] TP_ONLY = {ContingencyState.TP};
+ protected static final ContingencyState[] FP_ONLY = {ContingencyState.FP};
+ protected static final ContingencyState[] TN_ONLY = {ContingencyState.TN};
+ protected static final ContingencyState[] FN_ONLY = {ContingencyState.FN};
+ protected static final ContingencyState[] TP_FN = {ContingencyState.TP, ContingencyState.FN};
+ protected static final ContingencyState[] TP_FP = {ContingencyState.TP, ContingencyState.FP};
+ protected static final ContingencyState[] TP_TN = {ContingencyState.TP, ContingencyState.TN};
+ protected static final ContingencyState[] FP_FN = {ContingencyState.FP, ContingencyState.FN};
+ protected static final ContingencyState[] FP_TN = {ContingencyState.FP, ContingencyState.TN};
+ protected static final ContingencyState[] FP_TN_FN = {ContingencyState.FP, ContingencyState.TN, ContingencyState.FN};
+ protected static final ContingencyState[] TP_FP_FN = {ContingencyState.TP, ContingencyState.FP, ContingencyState.FN};
+ protected static final ContingencyState[] TN_FN = {ContingencyState.TN, ContingencyState.FN};
+
+ /** Has this scheme been previously validated */
+ private boolean isValidated = false;
+
+ /**
+ * Adds a row to the scheme
+ * @param callState the call state (row)
+ * @param concordanceStateArrays the concordance state arrays for each truth value, in order
+ */
+ protected void addRow(final CallState callState, final ContingencyState[]... concordanceStateArrays) {
+ if (concordanceStateArrays.length != TruthState.values().length) {
+ throw new PicardException("Length mismatch between concordanceStateArrays and TruthState.values()");
+ }
+ for (int i = 0; i < concordanceStateArrays.length; i++) {
+ scheme.put(new TruthAndCallStates(TruthState.values()[i], callState), concordanceStateArrays[i]);
+ }
+ }
+
+ /**
+ * Get the concordance state array associate with the given truth state and call state tuple.
+ */
+ public ContingencyState[] getConcordanceStateArray(final TruthState truthState, final CallState callState) {
+ return this.getConcordanceStateArray(new TruthAndCallStates(truthState, callState));
+ }
+
+ /**
+ * Get the concordance state array associate with the given truth state and call state tuple.
+ */
+ public ContingencyState[] getConcordanceStateArray(final TruthAndCallStates truthAndCallStates) {
+ return this.scheme.get(truthAndCallStates);
+ }
+
+ /**
+ * Get the contingency state array as a parse-able string
+ */
+ public String getContingencyStateString(final TruthState truthState, final CallState callState) {
+ final ContingencyState[] contingencyStateArray = getConcordanceStateArray(truthState, callState);
+ return (contingencyStateArray.length == 0) ? "EMPTY" : StringUtil.join(",", contingencyStateArray);
+ }
+
+ /**
+ * Get the contingency state array as a set
+ * @param contingencyStateArray
+ * @return
+ */
+ public Set<ContingencyState> getContingencyStateSet(final ContingencyState[] contingencyStateArray) {
+ final Set<ContingencyState> contingencyStateSet = new HashSet<ContingencyState>();
+ Collections.addAll(contingencyStateSet, contingencyStateArray);
+ return contingencyStateSet;
+ }
+
+
+ /**
+ * Check that all cells in the scheme exist.
+ * @throws PicardException if a missing tuple was found.
+ */
+ public void validateScheme() throws PicardException {
+ if (!isValidated) {
+ for (final TruthState truthState : TruthState.values()) {
+ for (final CallState callState : CallState.values()) {
+ if (!scheme.containsKey(new TruthAndCallStates(truthState, callState))) {
+ throw new PicardException(String.format("Missing scheme tuple: [%s, %s]", truthState.name(), callState.name()));
+ }
+ }
+ }
+ }
+
+ isValidated = true;
+ }
+}
+
diff --git a/src/java/picard/vcf/GenotypeConcordanceSchemeFactory.java b/src/java/picard/vcf/GenotypeConcordanceSchemeFactory.java
new file mode 100644
index 0000000..9c14997
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceSchemeFactory.java
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+/**
+ * Created by kbergin on 6/19/15.
+ */
+public class GenotypeConcordanceSchemeFactory {
+ public GenotypeConcordanceScheme getScheme(final boolean isMissingHomRef) {
+ if (isMissingHomRef) {
+ return new GA4GHSchemeWithMissingAsHomRef();
+ }
+ else {
+ return new GA4GHScheme();
+ }
+ }
+}
diff --git a/src/java/picard/vcf/GenotypeConcordanceStateCodes.java b/src/java/picard/vcf/GenotypeConcordanceStateCodes.java
new file mode 100644
index 0000000..9dd5569
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceStateCodes.java
@@ -0,0 +1,23 @@
+package picard.vcf;
+
+/**
+ * Created by kbergin on 7/30/15.
+ */
+public enum GenotypeConcordanceStateCodes {
+ /**
+ * These codes allow for constants in the truth state enum and the call state enum to be compared.
+ * The final INCOMPARABLE_CODE is for Call States that are not reflected in the Truth State, so they can never match.
+ */
+ MISSING_CODE,
+ HOM_REF_CODE,
+ HET_REF_VAR1_CODE,
+ HET_VAR1_VAR2_CODE,
+ HOM_VAR1_CODE,
+ NO_CALL_CODE,
+ LOW_GQ_CODE,
+ LOW_DP_CODE,
+ VC_FILTERED_CODE,
+ GT_FILTERED_CODE,
+ IS_MIXED_CODE,
+ INCOMPARABLE_CODE;
+}
diff --git a/src/java/picard/vcf/GenotypeConcordanceStates.java b/src/java/picard/vcf/GenotypeConcordanceStates.java
new file mode 100644
index 0000000..56a212c
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceStates.java
@@ -0,0 +1,186 @@
+package picard.vcf;
+
+import static picard.vcf.GenotypeConcordanceStateCodes.*;
+/**
+ * A class to store the various classifications for:
+ * 1. a truth genotype versus a reference
+ * 2. a call genotype versus a truth, relative to a reference
+ *
+ * An example use of this class is to have one instance per following use case:
+ * - SNPs
+ * - indels
+ * - filtered variant (truth or call)
+ * - filtered genotype (truth or call)
+ * - low GQ (call)
+ * - low DP (call)
+ * - No call (truth or call)
+ * - No variant (truth or call) *
+ *
+ * @author nhomer
+ */
+public class GenotypeConcordanceStates {
+ /**
+ * These states represent the relationship between a truth genotype and the reference sequence.
+ */
+ public enum TruthState {
+ MISSING (MISSING_CODE.ordinal()),
+ HOM_REF (HOM_REF_CODE.ordinal()), // ref/ref
+ HET_REF_VAR1 (HET_REF_VAR1_CODE.ordinal()), // ref/var1 (var1!=ref)
+ HET_VAR1_VAR2 (HET_VAR1_VAR2_CODE.ordinal()), // var1/var2 (var1!=var2, var1!=ref, var2!=ref)
+ HOM_VAR1 (HOM_VAR1_CODE.ordinal()), // var1/var1 (var1!=ref)
+ NO_CALL (NO_CALL_CODE.ordinal()),
+ LOW_GQ (LOW_GQ_CODE.ordinal()),
+ LOW_DP (LOW_DP_CODE.ordinal()),
+ VC_FILTERED (VC_FILTERED_CODE.ordinal()),
+ GT_FILTERED (GT_FILTERED_CODE.ordinal()),
+ IS_MIXED (IS_MIXED_CODE.ordinal());
+
+ public static TruthState getHom(final int alleleIdx) {
+ if (alleleIdx == 0) return HOM_REF;
+ if (alleleIdx == 1) return HOM_VAR1;
+ assert false;
+ return null;
+ }
+
+ public static TruthState getVar(final int allele0idx, final int allele1idx) {
+ if (allele0idx == 0 && allele1idx == 1) return HET_REF_VAR1;
+ if (allele0idx == 1 && allele1idx == 0) return HET_REF_VAR1;
+
+ if (allele0idx == 1 && allele1idx == 2) return HET_VAR1_VAR2;
+ if (allele0idx == 2 && allele1idx == 1) return HET_VAR1_VAR2;
+
+ assert false;
+ return null;
+ }
+
+ private final int code;
+
+ private TruthState(final int code) {
+ this.code = code;
+ }
+
+ public int getCode() { return this.code; }
+ }
+
+ /**
+ * These states represent the relationship between the call genotype and the truth genotype relative to
+ * a reference sequence.
+ * The Enum constants must be in the same order as the truth state to allow for comparison.
+ */
+ enum CallState {
+ MISSING (MISSING_CODE.ordinal()),
+ HOM_REF (HOM_REF_CODE.ordinal()), // ref/ref, valid for all TruthStates
+ HET_REF_VAR1 (HET_REF_VAR1_CODE.ordinal()), // ref/var1, valid for all TruthStates
+ HET_VAR1_VAR2 (HET_VAR1_VAR2_CODE.ordinal()), // var1/var2, valid for all TruthStates
+ HOM_VAR1 (HOM_VAR1_CODE.ordinal()), // var1/var1, valid for all TruthStates
+ HET_REF_VAR2 (INCOMPARABLE_CODE.ordinal()), // ref/var2, valid only for TruthStates: HET_REF_VAR1, HET_VAR1_VAR2, HOM_VAR1
+ HET_REF_VAR3 (INCOMPARABLE_CODE.ordinal()), // ref/var3, valid only for TruthStates: HET_VAR1_VAR2
+ HET_VAR1_VAR3 (INCOMPARABLE_CODE.ordinal()), // var1/var3, valid only for TruthStates: HET_VAR1_VAR2. also encapsulates HET_VAR2_VAR3 (see special case below)
+ HET_VAR3_VAR4 (INCOMPARABLE_CODE.ordinal()), // var3/var4, valid only for TruthStates: HET_REF_VAR1, HET_VAR1_VAR2, HOM_VAR1
+ HOM_VAR2 (INCOMPARABLE_CODE.ordinal()), // var2/var2, valid only for TruthStates: HET_REF_VAR1, HET_VAR1_VAR2, HOM_VAR1
+ HOM_VAR3 (INCOMPARABLE_CODE.ordinal()), // var3/var3, valid only for TruthStates: HET_VAR1_VAR2
+ NO_CALL (NO_CALL_CODE.ordinal()),
+ LOW_GQ (LOW_GQ_CODE.ordinal()),
+ LOW_DP (LOW_DP_CODE.ordinal()),
+ VC_FILTERED (VC_FILTERED_CODE.ordinal()),
+ GT_FILTERED (GT_FILTERED_CODE.ordinal()),
+ IS_MIXED (IS_MIXED_CODE.ordinal());
+
+
+ public static CallState getHom(final int alleleIdx) {
+ if (alleleIdx == 0) return HOM_REF;
+ if (alleleIdx == 1) return HOM_VAR1;
+ if (alleleIdx == 2) return HOM_VAR2;
+ if (alleleIdx == 3) return HOM_VAR3;
+
+ assert false;
+ return null;
+ }
+
+ public static CallState getHet(int allele0idx, int allele1idx) {
+
+ if(allele0idx > allele1idx){
+ final int temp = allele0idx;
+ allele0idx=allele1idx;
+ allele1idx=temp;
+ }
+ if(allele0idx == 0) { //REF CASE
+ if (allele1idx == 1) return HET_REF_VAR1;
+ if (allele1idx == 2) return HET_REF_VAR2;
+ if (allele1idx == 3) return HET_REF_VAR3;
+ assert false;
+ return null;
+ }
+
+ //HET CASES
+ if(allele0idx == 1) {
+ if (allele1idx == 2) return HET_VAR1_VAR2;
+ if (allele1idx == 3) return HET_VAR1_VAR3;
+ assert false;
+ return null;
+ }
+
+ if(allele0idx == 2 && allele1idx == 3) return HET_VAR3_VAR4; //special case not a mistake.
+ if(allele0idx == 3 && allele1idx == 4) return HET_VAR3_VAR4;
+
+ assert false;
+ return null;
+ }
+
+ private final int code;
+
+ private CallState(final int code) {
+ this.code = code;
+ }
+
+ public int getCode() { return this.code; }
+ }
+
+ /**
+ * A specific state for a 2x2 contingency table.
+ * NA denotes an invalid state that should not be reachable by the code.
+ * EMPTY denotes that no conclusion could be drawn from the data.
+ */
+ enum ContingencyState {
+ TP,
+ FP,
+ TN,
+ FN,
+ NA,
+ EMPTY
+ }
+
+ /**
+ * A minute class to store the truth and call state respectively.
+ */
+ static class TruthAndCallStates implements Comparable<TruthAndCallStates>{
+ public final TruthState truthState;
+ public final CallState callState;
+
+ public TruthAndCallStates(final TruthState truthState, final CallState callState) {
+ this.truthState = truthState;
+ this.callState = callState;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ return compareTo((TruthAndCallStates) o) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = truthState.hashCode();
+ result = 31 * result + callState.hashCode();
+ return result;
+ }
+
+ @Override
+ public int compareTo(final TruthAndCallStates that) {
+ int result = this.truthState.compareTo(that.truthState);
+ if (result == 0) result = this.callState.compareTo(that.callState);
+ return result;
+ }
+ }
+}
diff --git a/src/java/picard/vcf/GenotypeConcordanceSummaryMetrics.java b/src/java/picard/vcf/GenotypeConcordanceSummaryMetrics.java
new file mode 100644
index 0000000..f58b2ae
--- /dev/null
+++ b/src/java/picard/vcf/GenotypeConcordanceSummaryMetrics.java
@@ -0,0 +1,90 @@
+package picard.vcf;
+
+import htsjdk.samtools.metrics.MetricBase;
+import htsjdk.variant.variantcontext.VariantContext;
+
+/**
+ * Class that holds summary metrics about Genotype Concordance
+ *
+ * @author George Grant
+ */
+public class GenotypeConcordanceSummaryMetrics extends MetricBase {
+ /**
+ * Empty constructor - needed for unit tests
+ */
+ public GenotypeConcordanceSummaryMetrics() {
+ }
+
+ GenotypeConcordanceSummaryMetrics(final VariantContext.Type variantType, final GenotypeConcordanceCounts concordanceCounts,
+ final String truthSample, final String callSample, final boolean missingSitesFlag) {
+ this.VARIANT_TYPE = variantType;
+ this.TRUTH_SAMPLE = truthSample;
+ this.CALL_SAMPLE = callSample;
+
+ final GenotypeConcordanceSchemeFactory schemeFactory = new GenotypeConcordanceSchemeFactory();
+ final GenotypeConcordanceScheme scheme = schemeFactory.getScheme(missingSitesFlag);
+ scheme.validateScheme();
+ concordanceCounts.validateCountsAgainstScheme(scheme);
+
+ this.HET_SENSITIVITY = concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HET_TRUTH_STATES);
+ this.HET_PPV = concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HET_CALL_STATES);
+ this.HET_SPECIFICITY = Double.NaN;
+
+ this.HOMVAR_SENSITIVITY = concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES);
+ this.HOMVAR_PPV = concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HOM_VAR_CALL_STATES);
+ this.HOMVAR_SPECIFICITY = Double.NaN;
+
+ this.VAR_SENSITIVITY = concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES);
+ this.VAR_PPV = concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.VAR_CALL_STATES);
+ this.VAR_SPECIFICITY = concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES);
+
+ this.GENOTYPE_CONCORDANCE = concordanceCounts.calculateGenotypeConcordance(scheme, missingSitesFlag);
+ this.NON_REF_GENOTYPE_CONCORDANCE = concordanceCounts.calculateNonRefGenotypeConcordance(scheme, missingSitesFlag);
+ }
+
+ /** The type of the event (i.e. either SNP or INDEL) */
+ public VariantContext.Type VARIANT_TYPE;
+
+ /** The name of the 'truth' sample */
+ public String TRUTH_SAMPLE;
+
+ /** The name of the 'call' sample */
+ public String CALL_SAMPLE;
+
+ /** The sensitivity for all heterozygous variants (Sensitivity is TP / (TP + FN)) */
+ public double HET_SENSITIVITY;
+
+ /** The ppv (positive predictive value) for all heterozygous variants (PPV is the TP / (TP + FP)) */
+ public double HET_PPV;
+
+ /** The specificity for all heterozygous variants cannot be calculated */
+ public double HET_SPECIFICITY;
+
+ /** The sensitivity for all homozygous variants (Sensitivity is TP / (TP + FN)) */
+ public double HOMVAR_SENSITIVITY;
+
+ /** The ppv (positive predictive value) for all homozygous variants (PPV is the TP / (TP + FP)) */
+ public double HOMVAR_PPV;
+
+ /** The specificity for all homozygous variants cannot be calculated. */
+ public double HOMVAR_SPECIFICITY;
+
+ /** The sensitivity for all (heterozygous and homozygous) variants (Sensitivity is TP / (TP + FN)) */
+ public double VAR_SENSITIVITY;
+
+ /** The ppv (positive predictive value) for all (heterozygous and homozygous) variants (PPV is the TP / (TP + FP)) */
+ public double VAR_PPV;
+
+ /** The specificity for all (heterozygous and homozygous) variants (Specificity is TN / (FP + TN)) */
+ public double VAR_SPECIFICITY;
+
+ /** The genotype concordance for all possible states.
+ * Genotype Concordance is the number of times the truth and call states match exactly / all truth and call combinations made
+ */
+ public double GENOTYPE_CONCORDANCE;
+
+ /** The non-ref genotype concordance, ie for all var states only.
+ * Non Ref Genotype Concordance is the number of times the truth and call states match exactly for *vars only* / all truth and call *var* combinations made
+ */
+ public double NON_REF_GENOTYPE_CONCORDANCE;
+}
diff --git a/src/java/picard/vcf/LiftoverVcf.java b/src/java/picard/vcf/LiftoverVcf.java
new file mode 100644
index 0000000..0d8cb26
--- /dev/null
+++ b/src/java/picard/vcf/LiftoverVcf.java
@@ -0,0 +1,233 @@
+package picard.vcf;
+
+import htsjdk.samtools.Defaults;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.liftover.LiftOver;
+import htsjdk.samtools.reference.ReferenceSequenceFileWalker;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.SortingCollection;
+import htsjdk.samtools.util.StringUtil;
+import htsjdk.variant.variantcontext.Allele;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextBuilder;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFFilterHeaderLine;
+import htsjdk.variant.vcf.VCFHeader;
+import htsjdk.variant.vcf.VCFRecordCodec;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Tool for lifting over a VCF to another genome build and producing a properly header'd,
+ * sorted and indexed VCF in one go.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Lifts a VCF over from one genome build to another using UCSC liftover. The output file will be sorted " +
+ "and indexed. Records may be rejected because they cannot be lifted over or because post-liftover the " +
+ "reference allele mismatches the target genome build. Rejected records will be emitted with filters " +
+ "to the REJECT file, on the source genome.",
+ usageShort = "Lifts a VCF between genome builds.",
+ programGroup = VcfOrBcf.class
+)
+public class LiftoverVcf extends CommandLineProgram {
+ @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The input VCF/BCF file to be lifted over.")
+ public File INPUT;
+
+ @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output location to write the lifted over VCF/BCF to.")
+ public File OUTPUT;
+
+ @Option(shortName="C", doc="The liftover chain file. See https://genome.ucsc.edu/goldenPath/help/chain.html for a description" +
+ " of chain files. See http://hgdownload.soe.ucsc.edu/downloads.html#terms for where to download chain files.")
+ public File CHAIN;
+
+ @Option(doc="File to which to write rejected records.")
+ public File REJECT;
+
+ @Option(shortName = StandardOptionDefinitions.REFERENCE_SHORT_NAME, common=false,
+ doc = "The reference sequence (fasta) for the TARGET genome build. The fasta file must have an " +
+ "accompanying sqeuence dictionary (.dict file).")
+ public File REFERENCE_SEQUENCE = Defaults.REFERENCE_FASTA;
+
+ /** Filter name to use when a target cannot be lifted over. */
+ public static final String FILTER_CANNOT_LIFTOVER = "FailedLiftover";
+
+ /** Filter name to use when a target is lifted over, but the reference allele doens't match the new reference. */
+ public static final String FILTER_MISMATCHING_REF_ALLELE = "MismatchedRefAllele";
+
+ /** Filters to be added to the REJECT file. */
+ private static final List<VCFFilterHeaderLine> FILTERS = CollectionUtil.makeList(
+ new VCFFilterHeaderLine(FILTER_CANNOT_LIFTOVER, "Variant could not be lifted between genome builds."),
+ new VCFFilterHeaderLine(FILTER_MISMATCHING_REF_ALLELE, "Reference allele does not match reference genome sequence after liftover.")
+ );
+
+ private final Log log = Log.getInstance(LiftoverVcf.class);
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new LiftoverVcf().instanceMainWithExit(args);
+ }
+
+ @Override protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsReadable(REFERENCE_SEQUENCE);
+ IOUtil.assertFileIsReadable(CHAIN);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ IOUtil.assertFileIsWritable(REJECT);
+
+ ////////////////////////////////////////////////////////////////////////
+ // Setup the inputs
+ ////////////////////////////////////////////////////////////////////////
+ final LiftOver liftOver = new LiftOver(CHAIN);
+ final VCFFileReader in = new VCFFileReader(INPUT, false);
+
+ log.info("Loading up the target reference genome.");
+ final ReferenceSequenceFileWalker walker = new ReferenceSequenceFileWalker(REFERENCE_SEQUENCE);
+ final Map<String,byte[]> refSeqs = new HashMap<String,byte[]>();
+ for (final SAMSequenceRecord rec: walker.getSequenceDictionary().getSequences()) {
+ refSeqs.put(rec.getSequenceName(), walker.get(rec.getSequenceIndex()).getBases());
+ }
+ CloserUtil.close(walker);
+
+
+ ////////////////////////////////////////////////////////////////////////
+ // Setup the outputs
+ ////////////////////////////////////////////////////////////////////////
+ final VCFHeader inHeader = in.getFileHeader();
+ final VCFHeader outHeader = new VCFHeader(inHeader);
+ outHeader.setSequenceDictionary(walker.getSequenceDictionary());
+ final VariantContextWriter out = new VariantContextWriterBuilder().setOption(Options.INDEX_ON_THE_FLY)
+ .setOutputFile(OUTPUT).setReferenceDictionary(walker.getSequenceDictionary()).build();
+ out.writeHeader(outHeader);
+
+ final VariantContextWriter rejects = new VariantContextWriterBuilder().setOutputFile(REJECT).unsetOption(Options.INDEX_ON_THE_FLY).build();
+ final VCFHeader rejectHeader = new VCFHeader(in.getFileHeader());
+ for (final VCFFilterHeaderLine line : FILTERS) rejectHeader.addMetaDataLine(line);
+ rejects.writeHeader(rejectHeader);
+
+
+ ////////////////////////////////////////////////////////////////////////
+ // Read the input VCF, lift the records over and write to the sorting
+ // collection.
+ ////////////////////////////////////////////////////////////////////////
+ long failedLiftover = 0, failedAlleleCheck = 0, total = 0;
+ log.info("Lifting variants over and sorting.");
+
+ final SortingCollection<VariantContext> sorter = SortingCollection.newInstance(VariantContext.class,
+ new VCFRecordCodec(outHeader),
+ outHeader.getVCFRecordComparator(),
+ MAX_RECORDS_IN_RAM,
+ TMP_DIR);
+
+ ProgressLogger progress = new ProgressLogger(log, 1000000, "read");
+
+ for (final VariantContext ctx : in) {
+ ++total;
+ final Interval source = new Interval(ctx.getContig(), ctx.getStart(), ctx.getEnd(), false, ctx.getContig() + ":" + ctx.getStart() + "-" + ctx.getEnd());
+ final Interval target = liftOver.liftOver(source, 1.0);
+
+ if (target == null) {
+ rejects.add(new VariantContextBuilder(ctx).filter(FILTER_CANNOT_LIFTOVER).make());
+ failedLiftover++;
+ }
+ else {
+ // Fix the alleles if we went from positive to negative strand
+ final List<Allele> alleles = new ArrayList<Allele>();
+ for (final Allele oldAllele : ctx.getAlleles()) {
+ if (target.isPositiveStrand() || oldAllele.isSymbolic()) {
+ alleles.add(oldAllele);
+ }
+ else {
+ alleles.add(Allele.create(SequenceUtil.reverseComplement(oldAllele.getBaseString()), oldAllele.isReference()));
+ }
+ }
+
+ // Build the new variant context
+ final VariantContextBuilder builder = new VariantContextBuilder(
+ ctx.getSource(),
+ target.getContig(),
+ target.getStart(),
+ target.getEnd(),
+ alleles);
+
+ builder.id(ctx.getID());
+ builder.attributes(ctx.getAttributes());
+ builder.genotypes(ctx.getGenotypes());
+ builder.filters(ctx.getFilters());
+ builder.log10PError(ctx.getLog10PError());
+
+ // Check that the reference allele still agrees with the reference sequence
+ boolean mismatchesReference = false;
+ for (final Allele allele : builder.getAlleles()) {
+ if (allele.isReference()) {
+ final byte[] ref = refSeqs.get(target.getContig());
+ final String refString = StringUtil.bytesToString(ref, target.getStart()-1, target.length());
+
+ if (!refString.equalsIgnoreCase(allele.getBaseString())) {
+ mismatchesReference = true;
+ }
+
+ break;
+ }
+ }
+
+ if (mismatchesReference) {
+ rejects.add(new VariantContextBuilder(ctx).filter(FILTER_MISMATCHING_REF_ALLELE).make());
+ failedAlleleCheck++;
+ }
+ else {
+ sorter.add(builder.make());
+ }
+ }
+
+ progress.record(ctx.getContig(), ctx.getStart());
+ }
+
+ final NumberFormat pfmt = new DecimalFormat("0.0000%");
+ final String pct = pfmt.format((failedLiftover + failedAlleleCheck) / (double) total);
+ log.info("Processed ", total, " variants.");
+ log.info(failedLiftover, " variants failed to liftover.");
+ log.info(failedAlleleCheck, " variants lifted over but had mismatching reference alleles after lift over.");
+ log.info(pct, " of variants were not successfully lifted over and written to the output.");
+
+ rejects.close();
+ in.close();
+
+ ////////////////////////////////////////////////////////////////////////
+ // Write the sorted outputs to the final output file
+ ////////////////////////////////////////////////////////////////////////
+ sorter.doneAdding();
+ progress = new ProgressLogger(log, 1000000, "written");
+ log.info("Writing out sorted records to final VCF.");
+
+ for (final VariantContext ctx : sorter) {
+ out.add(ctx);
+ progress.record(ctx.getContig(), ctx.getStart());
+ }
+ out.close();
+ sorter.cleanup();
+
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/vcf/MakeSitesOnlyVcf.java b/src/java/picard/vcf/MakeSitesOnlyVcf.java
new file mode 100644
index 0000000..879570f
--- /dev/null
+++ b/src/java/picard/vcf/MakeSitesOnlyVcf.java
@@ -0,0 +1,111 @@
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.variant.variantcontext.GenotypesContext;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextBuilder;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Writes out a VCF that contains all the site-level information for all records in the input VCF and no per-sample information.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Reads a VCF/VCF.gz/BCF and removes all genotype information from it while retaining " +
+ "all site level information, including annotations based on genotypes (e.g. AN, AF). Output an be " +
+ "any support variant format including .vcf, .vcf.gz or .bcf.",
+ usageShort = "Creates a VCF bereft of genotype information from an input VCF or BCF",
+ programGroup = VcfOrBcf.class
+)
+public class MakeSitesOnlyVcf extends CommandLineProgram {
+
+ @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input VCF or BCF")
+ public File INPUT;
+
+ @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output VCF or BCF to emit without per-sample info.")
+ public File OUTPUT;
+
+ @Option(shortName="S", doc="Optionally one or more samples to retain when building the 'sites-only' VCF.", optional=true)
+ public Set<String> SAMPLE = new TreeSet<String>();
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new MakeSitesOnlyVcf().instanceMainWithExit(args);
+ }
+
+ public MakeSitesOnlyVcf() {
+ CREATE_INDEX = true;
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final VCFFileReader reader = new VCFFileReader(INPUT, false);
+ final VCFHeader inputVcfHeader = new VCFHeader(reader.getFileHeader().getMetaDataInInputOrder());
+ final SAMSequenceDictionary sequenceDictionary = inputVcfHeader.getSequenceDictionary();
+
+ if (CREATE_INDEX && sequenceDictionary == null) {
+ throw new PicardException("A sequence dictionary must be available (either through the input file or by setting it explicitly) when creating indexed output.");
+ }
+
+ final ProgressLogger progress = new ProgressLogger(Log.getInstance(MakeSitesOnlyVcf.class), 10000);
+
+ // Setup the site-only file writer
+ final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
+ .setOutputFile(OUTPUT)
+ .setReferenceDictionary(sequenceDictionary);
+ if (CREATE_INDEX)
+ builder.setOption(Options.INDEX_ON_THE_FLY);
+ else
+ builder.unsetOption(Options.INDEX_ON_THE_FLY);
+ final VariantContextWriter writer = builder.build();
+
+ final VCFHeader header = new VCFHeader(inputVcfHeader.getMetaDataInInputOrder(), SAMPLE);
+ writer.writeHeader(header);
+
+ // Go through the input, strip the records and write them to the output
+ final CloseableIterator<VariantContext> iterator = reader.iterator();
+ while (iterator.hasNext()) {
+ final VariantContext full = iterator.next();
+ final VariantContext site = subsetToSamplesWithOriginalAnnotations(full, SAMPLE);
+ writer.add(site);
+ progress.record(site.getChr(), site.getStart());
+ }
+
+ CloserUtil.close(iterator);
+ CloserUtil.close(reader);
+ writer.close();
+
+ return 0;
+ }
+
+ /** Makes a new VariantContext with only the desired samples. */
+ private static VariantContext subsetToSamplesWithOriginalAnnotations(final VariantContext ctx, final Set<String> samples) {
+ final VariantContextBuilder builder = new VariantContextBuilder(ctx);
+ final GenotypesContext newGenotypes = ctx.getGenotypes().subsetToSamples(samples);
+ builder.alleles(ctx.getAlleles());
+ return builder.genotypes(newGenotypes).make();
+ }
+}
diff --git a/src/java/picard/vcf/MergeVcfs.java b/src/java/picard/vcf/MergeVcfs.java
new file mode 100644
index 0000000..7e5ec7c
--- /dev/null
+++ b/src/java/picard/vcf/MergeVcfs.java
@@ -0,0 +1,161 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.MergingIterator;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextComparator;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import htsjdk.variant.vcf.VCFUtils;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * Combines multiple VCF files into a single file. Input files must be sorted by their contigs
+ * and, within contigs, by start position. Throws IllegalArgumentException if the contig lists
+ * are not present in the input files, are not identical or if the sample lists are not the
+ * same; this class uses the GATK to merge headers, which may throw exceptions if the headers
+ * cannot be merged. See VCFUtils.smartMergeHeaders for details.
+ * <p/>
+ * An index file is created for the output file by default. Using an output file name with a
+ * ".gz" extension will create gzip-compressed output.
+ */
+ at CommandLineProgramProperties(
+ usage = "Merges multiple VCF or BCF files into one VCF file. Input files must be sorted by their contigs " +
+ "and, within contigs, by start position. The input files must have the same sample and " +
+ "contig lists. An index file is created and a sequence dictionary is required by default.",
+ usageShort = "Merges multiple VCF or BCF files into one VCF file or BCF",
+ programGroup = VcfOrBcf.class
+)
+public class MergeVcfs extends CommandLineProgram {
+
+ @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="VCF or BCF input files File format is determined by file extension.", minElements=1)
+ public List<File> INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The merged VCF or BCF file. File format is determined by file extension.")
+ public File OUTPUT;
+
+ @Option(shortName = "D", doc = "The index sequence dictionary to use instead of the sequence dictionary in the input file", optional = true)
+ public File SEQUENCE_DICTIONARY;
+
+ private final Log log = Log.getInstance(MergeVcfs.class);
+
+ public static void main(final String[] argv) {
+ new MergeVcfs().instanceMainWithExit(argv);
+ }
+
+ public MergeVcfs() {
+ this.CREATE_INDEX = true;
+ }
+
+ @Override
+ protected int doWork() {
+ final ProgressLogger progress = new ProgressLogger(log, 10000);
+ final List<String> sampleList = new ArrayList<String>();
+ final Collection<CloseableIterator<VariantContext>> iteratorCollection = new ArrayList<CloseableIterator<VariantContext>>(INPUT.size());
+ final Collection<VCFHeader> headers = new HashSet<VCFHeader>(INPUT.size());
+
+ VariantContextComparator variantContextComparator = null;
+ SAMSequenceDictionary sequenceDictionary = null;
+
+ if (SEQUENCE_DICTIONARY != null) {
+ sequenceDictionary = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).open(SEQUENCE_DICTIONARY).getFileHeader().getSequenceDictionary();
+ }
+
+ for (final File file : INPUT) {
+ IOUtil.assertFileIsReadable(file);
+ final VCFFileReader fileReader = new VCFFileReader(file, false);
+ final VCFHeader fileHeader = fileReader.getFileHeader();
+
+ if (variantContextComparator == null) {
+ variantContextComparator = fileHeader.getVCFRecordComparator();
+ } else {
+ if (!variantContextComparator.isCompatible(fileHeader.getContigLines())) {
+ throw new IllegalArgumentException(
+ "The contig entries in input file " + file.getAbsolutePath() + " are not compatible with the others.");
+ }
+ }
+
+ if (sequenceDictionary == null) sequenceDictionary = fileHeader.getSequenceDictionary();
+
+ if (sampleList.isEmpty()) {
+ sampleList.addAll(fileHeader.getSampleNamesInOrder());
+ } else {
+ if (!sampleList.equals(fileHeader.getSampleNamesInOrder())) {
+ throw new IllegalArgumentException("Input file " + file.getAbsolutePath() + " has sample entries that don't match the other files.");
+ }
+ }
+
+ headers.add(fileHeader);
+ iteratorCollection.add(fileReader.iterator());
+ }
+
+ if (CREATE_INDEX && sequenceDictionary == null) {
+ throw new PicardException("A sequence dictionary must be available (either through the input file or by setting it explicitly) when creating indexed output.");
+ }
+
+ final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
+ .setOutputFile(OUTPUT)
+ .setReferenceDictionary(sequenceDictionary)
+ .clearOptions();
+ if (CREATE_INDEX) {
+ builder.setOption(Options.INDEX_ON_THE_FLY);
+ }
+ final VariantContextWriter writer = builder.build();
+
+ writer.writeHeader(new VCFHeader(VCFUtils.smartMergeHeaders(headers, false), sampleList));
+
+ final MergingIterator<VariantContext> mergingIterator = new MergingIterator<VariantContext>(variantContextComparator, iteratorCollection);
+ while (mergingIterator.hasNext()) {
+ final VariantContext context = mergingIterator.next();
+ writer.add(context);
+ progress.record(context.getChr(), context.getStart());
+ }
+
+ CloserUtil.close(mergingIterator);
+ writer.close();
+ return 0;
+ }
+}
diff --git a/src/java/picard/vcf/RenameSampleInVcf.java b/src/java/picard/vcf/RenameSampleInVcf.java
new file mode 100644
index 0000000..a5ff626
--- /dev/null
+++ b/src/java/picard/vcf/RenameSampleInVcf.java
@@ -0,0 +1,99 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterFactory;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+import java.util.EnumSet;
+
+ at CommandLineProgramProperties(
+ usage = "Rename a sample within a VCF or BCF.",
+ usageShort = "Rename a sample within a VCF or BCF.",
+ programGroup = VcfOrBcf.class
+)
+public class RenameSampleInVcf extends CommandLineProgram {
+ @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="Input single sample VCF.")
+ public File INPUT;
+
+ @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="Output single sample VCF.")
+ public File OUTPUT;
+
+ @Option(doc="Existing name of sample in VCF; if provided, asserts that that is the name of the extant sample name", optional = true)
+ public String OLD_SAMPLE_NAME = null;
+
+ @Option(doc="New name to give sample in output VCF.")
+ public String NEW_SAMPLE_NAME;
+
+
+ public static void main(final String[] args) {
+ new RenameSampleInVcf().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final VCFFileReader in = new VCFFileReader(INPUT);
+ final VCFHeader header = in.getFileHeader();
+
+ if (header.getGenotypeSamples().size() > 1) {
+ throw new IllegalArgumentException("Input VCF must be single-sample.");
+ }
+
+ if (OLD_SAMPLE_NAME != null && !OLD_SAMPLE_NAME.equals(header.getGenotypeSamples().get(0))) {
+ throw new IllegalArgumentException("Input VCF did not contain expected sample. Contained: " + header.getGenotypeSamples().get(0));
+ }
+
+ final EnumSet<Options> options = EnumSet.copyOf(VariantContextWriterFactory.DEFAULT_OPTIONS);
+ if (CREATE_INDEX) options.add(Options.INDEX_ON_THE_FLY); else options.remove(Options.INDEX_ON_THE_FLY);
+
+ final VCFHeader outHeader = new VCFHeader(header.getMetaDataInInputOrder(), CollectionUtil.makeList(NEW_SAMPLE_NAME));
+ final VariantContextWriter out = VariantContextWriterFactory.create(OUTPUT, outHeader.getSequenceDictionary(), options);
+ out.writeHeader(outHeader);
+
+ for (final VariantContext ctx : in) {
+ out.add(ctx);
+ }
+
+ out.close();
+ in.close();
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/vcf/SortVcf.java b/src/java/picard/vcf/SortVcf.java
new file mode 100644
index 0000000..8af8ed8
--- /dev/null
+++ b/src/java/picard/vcf/SortVcf.java
@@ -0,0 +1,177 @@
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.samtools.util.SortingCollection;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import htsjdk.variant.vcf.VCFRecordCodec;
+import htsjdk.variant.vcf.VCFUtils;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+
+/**
+ * Sorts one or more VCF files according to the order of the contigs in the header/sequence dictionary and then
+ * by coordinate. Can accept an external dictionary. If no external dictionary is supplied, multiple inputs' headers must have
+ * the same sequence dictionaries
+ */
+ at CommandLineProgramProperties(
+ usage = "Sorts one or more VCF files according to the order of the contigs in the header/sequence dictionary and then by coordinate. " +
+ "Can accept an external sequence dictionary. If no external dictionary is supplied, multiple inputs' headers must have " +
+ "the same sequence dictionaries. Multiple inputs must have the same sample names (in order)\n",
+ usageShort = "Sorts one or more VCF files",
+ programGroup = VcfOrBcf.class
+)
+public class SortVcf extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input VCF(s) to be sorted. Multiple inputs must have the same sample names (in order)")
+ public List<File> INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Output VCF to be written.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.SEQUENCE_DICTIONARY_SHORT_NAME, optional = true)
+ public File SEQUENCE_DICTIONARY;
+
+ private final Log log = Log.getInstance(SortVcf.class);
+
+ private final List<VCFFileReader> inputReaders = new ArrayList<VCFFileReader>();
+ private final List<VCFHeader> inputHeaders = new ArrayList<VCFHeader>();
+
+ public static void main(final String[] args) {
+ new SortVcf().instanceMainWithExit(args);
+ }
+
+ // Overrides the option default, including in the help message. Option remains settable on commandline.
+ public SortVcf() {
+ this.CREATE_INDEX = true;
+ }
+
+ @Override
+ protected int doWork() {
+ final List<String> sampleList = new ArrayList<String>();
+
+ for (final File input : INPUT) IOUtil.assertFileIsReadable(input);
+
+ if (SEQUENCE_DICTIONARY != null) IOUtil.assertFileIsReadable(SEQUENCE_DICTIONARY);
+
+ SAMSequenceDictionary samSequenceDictionary = null;
+ if (SEQUENCE_DICTIONARY != null) {
+ samSequenceDictionary = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).getFileHeader(SEQUENCE_DICTIONARY).getSequenceDictionary();
+ CloserUtil.close(SEQUENCE_DICTIONARY);
+ }
+
+ // Gather up a file reader and file header for each input file. Check for sequence dictionary compatibility along the way.
+ collectFileReadersAndHeaders(sampleList, samSequenceDictionary);
+
+ // Create the merged output header from the input headers
+ final VCFHeader outputHeader = new VCFHeader(VCFUtils.smartMergeHeaders(inputHeaders, false), sampleList);
+
+ // Load entries into the sorting collection
+ final SortingCollection<VariantContext> sortedOutput = sortInputs(inputReaders, outputHeader);
+
+ // Output to the final file
+ writeSortedOutput(outputHeader, sortedOutput);
+
+ return 0;
+ }
+
+ private void collectFileReadersAndHeaders(final List<String> sampleList, SAMSequenceDictionary samSequenceDictionary) {
+ for (final File input : INPUT) {
+ final VCFFileReader in = new VCFFileReader(input, false);
+ final VCFHeader header = in.getFileHeader();
+ final SAMSequenceDictionary dict = in.getFileHeader().getSequenceDictionary();
+ if (dict == null || dict.isEmpty()) {
+ if (null == samSequenceDictionary) {
+ throw new IllegalArgumentException("Sequence dictionary was missing or empty for the VCF: " + input.getAbsolutePath() + " Please add a sequence dictionary to this VCF or specify SEQUENCE_DICTIONARY.");
+ }
+ header.setSequenceDictionary(samSequenceDictionary);
+ } else {
+ if (null == samSequenceDictionary) {
+ samSequenceDictionary = dict;
+ } else {
+ try {
+ samSequenceDictionary.assertSameDictionary(dict);
+ } catch (final AssertionError e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+ }
+ if (sampleList.isEmpty()) {
+ sampleList.addAll(header.getSampleNamesInOrder());
+ } else {
+ if (!sampleList.equals(header.getSampleNamesInOrder())) {
+ throw new IllegalArgumentException("Input file " + input.getAbsolutePath() + " has sample names that don't match the other files.");
+ }
+ }
+ inputReaders.add(in);
+ inputHeaders.add(header);
+ }
+ }
+
+ /**
+ * Merge the inputs and sort them by adding each input's content to a single SortingCollection.
+ * <p/>
+ * NB: It would be better to have a merging iterator as in MergeSamFiles, as this would perform better for pre-sorted inputs.
+ * Here, we are assuming inputs are unsorted, and so adding their VariantContexts iteratively is fine for now.
+ * MergeVcfs exists for simple merging of presorted inputs.
+ *
+ * @param readers - a list of VCFFileReaders, one for each input VCF
+ * @param outputHeader - The merged header whose information we intend to use in the final output file
+ */
+ private SortingCollection<VariantContext> sortInputs(final List<VCFFileReader> readers, final VCFHeader outputHeader) {
+ final ProgressLogger readProgress = new ProgressLogger(log, 25000, "read", "records");
+
+ // NB: The default MAX_RECORDS_IN_RAM may not be appropriate here. VariantContexts are smaller than SamRecords
+ // We would have to play around empirically to find an appropriate value. We are not performing this optimization at this time.
+ final SortingCollection<VariantContext> sorter =
+ SortingCollection.newInstance(
+ VariantContext.class,
+ new VCFRecordCodec(outputHeader),
+ outputHeader.getVCFRecordComparator(),
+ MAX_RECORDS_IN_RAM,
+ TMP_DIR);
+ int readerCount = 1;
+ for (final VCFFileReader reader : readers) {
+ log.info("Reading entries from input file " + readerCount);
+ for (final VariantContext variantContext : reader) {
+ sorter.add(variantContext);
+ readProgress.record(variantContext.getChr(), variantContext.getStart());
+ }
+ reader.close();
+ readerCount++;
+ }
+ return sorter;
+ }
+
+ private void writeSortedOutput(final VCFHeader outputHeader, final SortingCollection<VariantContext> sortedOutput) {
+ final ProgressLogger writeProgress = new ProgressLogger(log, 25000, "wrote", "records");
+ final EnumSet<Options> options = CREATE_INDEX ? EnumSet.of(Options.INDEX_ON_THE_FLY) : EnumSet.noneOf(Options.class);
+ final VariantContextWriter out = new VariantContextWriterBuilder().
+ setReferenceDictionary(outputHeader.getSequenceDictionary()).
+ setOptions(options).
+ setOutputFile(OUTPUT).build();
+ out.writeHeader(outputHeader);
+ for (final VariantContext variantContext : sortedOutput) {
+ out.add(variantContext);
+ writeProgress.record(variantContext.getChr(), variantContext.getStart());
+ }
+ out.close();
+ }
+}
diff --git a/src/java/picard/vcf/SplitVcfs.java b/src/java/picard/vcf/SplitVcfs.java
new file mode 100644
index 0000000..b5b3c06
--- /dev/null
+++ b/src/java/picard/vcf/SplitVcfs.java
@@ -0,0 +1,119 @@
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+
+/**
+ * Splits the input VCF file into two, one for indels and one for SNPs. The headers of the two output
+ * files will be identical.
+ * <p/>
+ * An index file is created for the output file by default. Using an output file name with a ".gz"
+ * extension will create gzip-compressed output.
+ */
+ at CommandLineProgramProperties(
+ usage = "Splits an input VCF or BCF file into two VCF files, one for indel records and one for SNPs. The" +
+ "headers of the two output files will be identical. An index file is created and a" +
+ "sequence dictionary is required by default.",
+ usageShort = "Splits an input VCF or BCF file into two VCF or BCF files",
+ programGroup = VcfOrBcf.class
+)
+public class SplitVcfs extends CommandLineProgram {
+
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The VCF or BCF input file")
+ public File INPUT;
+
+ @Option(doc = "The VCF or BCF file to which SNP records should be written. The file format is determined by file extension.")
+ public File SNP_OUTPUT;
+
+ @Option(doc = "The VCF or BCF file to which indel records should be written. The file format is determined by file extension.")
+ public File INDEL_OUTPUT;
+
+ @Option(shortName = "D", doc = "The index sequence dictionary to use instead of the sequence dictionaries in the input files", optional = true)
+ public File SEQUENCE_DICTIONARY;
+
+ @Option(doc = "If true an exception will be thrown if an event type other than SNP or indel is encountered")
+ public Boolean STRICT = true;
+
+ private final Log log = Log.getInstance(SplitVcfs.class);
+
+ public static void main(final String[] argv) {
+ new SplitVcfs().instanceMainWithExit(argv);
+ }
+
+ public SplitVcfs() {
+ this.CREATE_INDEX = true;
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ final ProgressLogger progress = new ProgressLogger(log, 10000);
+
+ final VCFFileReader fileReader = new VCFFileReader(INPUT);
+ final VCFHeader fileHeader = fileReader.getFileHeader();
+
+ final SAMSequenceDictionary sequenceDictionary =
+ SEQUENCE_DICTIONARY != null
+ ? SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).getFileHeader(SEQUENCE_DICTIONARY).getSequenceDictionary()
+ : fileHeader.getSequenceDictionary();
+ if (CREATE_INDEX && sequenceDictionary == null) {
+ throw new PicardException("A sequence dictionary must be available (either through the input file or by setting it explicitly) when creating indexed output.");
+ }
+
+ final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
+ .setReferenceDictionary(sequenceDictionary)
+ .clearOptions();
+ if (CREATE_INDEX)
+ builder.setOption(Options.INDEX_ON_THE_FLY);
+
+ final VariantContextWriter snpWriter = builder.setOutputFile(SNP_OUTPUT).build();
+ final VariantContextWriter indelWriter = builder.setOutputFile(INDEL_OUTPUT).build();
+ snpWriter.writeHeader(fileHeader);
+ indelWriter.writeHeader(fileHeader);
+
+ int incorrectVariantCount = 0;
+
+ final CloseableIterator<VariantContext> iterator = fileReader.iterator();
+ while (iterator.hasNext()) {
+ final VariantContext context = iterator.next();
+ if (context.isIndel()) indelWriter.add(context);
+ else if (context.isSNP()) snpWriter.add(context);
+ else {
+ if (STRICT) throw new IllegalStateException("Found a record with type " + context.getType().name());
+ else incorrectVariantCount++;
+ }
+
+ progress.record(context.getChr(), context.getStart());
+ }
+
+ if (incorrectVariantCount > 0) {
+ log.debug("Found " + incorrectVariantCount + " records that didn't match SNP or INDEL");
+ }
+
+ CloserUtil.close(iterator);
+ CloserUtil.close(fileReader);
+ snpWriter.close();
+ indelWriter.close();
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/vcf/UpdateVcfSequenceDictionary.java b/src/java/picard/vcf/UpdateVcfSequenceDictionary.java
new file mode 100644
index 0000000..71a9ab9
--- /dev/null
+++ b/src/java/picard/vcf/UpdateVcfSequenceDictionary.java
@@ -0,0 +1,110 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.variant.utils.SAMSequenceDictionaryExtractor;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+
+/**
+ * Takes a VCF file and a Sequence Dictionary (from a variety of file types) and updates the Sequence Dictionary in VCF.
+ *
+ * @author George Grant
+ *
+ */
+ at CommandLineProgramProperties(
+ usage = "Takes a VCF and a second file that contains a sequence dictionary and updates the VCF with the new sequence dictionary.",
+ usageShort = "Takes a VCF and a second file that contains a sequence dictionary and updates the VCF with the new sequence dictionary.",
+ programGroup = VcfOrBcf.class
+)
+public class UpdateVcfSequenceDictionary extends CommandLineProgram {
+ @Option(shortName = StandardOptionDefinitions.INPUT_SHORT_NAME, doc = "Input VCF")
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "Output VCF to be written.")
+ public File OUTPUT;
+
+ @Option(shortName = StandardOptionDefinitions.SEQUENCE_DICTIONARY_SHORT_NAME, doc = "A Sequence Dictionary (can be read from one of the " +
+ "following file types (SAM, BAM, VCF, BCF, Interval List, Fasta, or Dict)")
+ public File SEQUENCE_DICTIONARY;
+
+ private final Log log = Log.getInstance(UpdateVcfSequenceDictionary.class);
+
+ public static void main(final String[] args) {
+ new UpdateVcfSequenceDictionary().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsReadable(SEQUENCE_DICTIONARY);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final SAMSequenceDictionary samSequenceDictionary = SAMSequenceDictionaryExtractor.extractDictionary(SEQUENCE_DICTIONARY);
+
+ final VCFFileReader fileReader = new VCFFileReader(INPUT, false);
+ final VCFHeader fileHeader = fileReader.getFileHeader();
+
+ final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
+ .setReferenceDictionary(samSequenceDictionary)
+ .clearOptions();
+ if (CREATE_INDEX)
+ builder.setOption(Options.INDEX_ON_THE_FLY);
+
+ final VariantContextWriter vcfWriter = builder.setOutputFile(OUTPUT).build();
+ fileHeader.setSequenceDictionary(samSequenceDictionary);
+ vcfWriter.writeHeader(fileHeader);
+
+ final ProgressLogger progress = new ProgressLogger(log, 10000);
+ final CloseableIterator<VariantContext> iterator = fileReader.iterator();
+ while (iterator.hasNext()) {
+ final VariantContext context = iterator.next();
+ vcfWriter.add(context);
+ progress.record(context.getChr(), context.getStart());
+ }
+
+ CloserUtil.close(iterator);
+ CloserUtil.close(fileReader);
+ vcfWriter.close();
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/vcf/VcfFormatConverter.java b/src/java/picard/vcf/VcfFormatConverter.java
new file mode 100644
index 0000000..0c62ec2
--- /dev/null
+++ b/src/java/picard/vcf/VcfFormatConverter.java
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2013 The Broad Institute
+*
+* Permission is hereby granted, free of charge, to any person
+* obtaining a copy of this software and associated documentation
+* files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use,
+* copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following
+* conditions:
+*
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.writer.Options;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.SamOrBam;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+
+/**
+ * Converts an ASCII VCF file to a binary BCF or vice versa.
+ *
+ * @author jgentry at broadinstitute.org
+ */
+ at CommandLineProgramProperties(
+ usage = "Convert a VCF file to a BCF file, or BCF to VCF.\n" +
+ "Input and output formats are determined by file extension.",
+ usageShort = "Converts a VCF file to a BCF file, or BCF to VCF",
+ programGroup = VcfOrBcf.class
+)
+public class VcfFormatConverter extends CommandLineProgram {
+ // The following attributes define the command-line arguments
+ public static final Log LOG = Log.getInstance(VcfFormatConverter.class);
+
+ @Option(doc="The BCF or VCF input file. The file format is determined by file extension.", shortName= StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(doc="The BCF or VCF output file. The file format is determined by file extension.", shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME)
+ public File OUTPUT;
+
+ @Option(doc="Fail if an index is not available for the input VCF/BCF")
+ public Boolean REQUIRE_INDEX = true;
+
+ public static void main(final String[] argv) {
+ new VcfFormatConverter().instanceMainWithExit(argv);
+ }
+
+ public VcfFormatConverter() {
+ this.CREATE_INDEX = true;
+ }
+
+ @Override
+ protected int doWork() {
+ final ProgressLogger progress = new ProgressLogger(LOG, 10000);
+
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final VCFFileReader reader = new VCFFileReader(INPUT, REQUIRE_INDEX);
+ final VCFHeader header = new VCFHeader(reader.getFileHeader());
+ final SAMSequenceDictionary sequenceDictionary = header.getSequenceDictionary();
+ if (CREATE_INDEX && sequenceDictionary == null) {
+ throw new PicardException("A sequence dictionary must be available in the input file when creating indexed output.");
+ }
+
+ final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
+ .setOutputFile(OUTPUT)
+ .setReferenceDictionary(sequenceDictionary);
+ if (CREATE_INDEX)
+ builder.setOption(Options.INDEX_ON_THE_FLY);
+ else
+ builder.unsetOption(Options.INDEX_ON_THE_FLY);
+ final VariantContextWriter writer = builder.build();
+ writer.writeHeader(header);
+ final CloseableIterator<VariantContext> iterator = reader.iterator();
+
+ while (iterator.hasNext()) {
+ final VariantContext context = iterator.next();
+ writer.add(context);
+ progress.record(context.getChr(), context.getStart());
+ }
+
+ CloserUtil.close(iterator);
+ CloserUtil.close(reader);
+ writer.close();
+
+ return 0;
+ }
+}
diff --git a/src/java/picard/vcf/VcfToIntervalList.java b/src/java/picard/vcf/VcfToIntervalList.java
new file mode 100644
index 0000000..1b513bf
--- /dev/null
+++ b/src/java/picard/vcf/VcfToIntervalList.java
@@ -0,0 +1,50 @@
+package picard.vcf;
+
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.variant.vcf.VCFFileReader;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+
+/**
+ * Creates an interval list from a VCF
+ *
+ * @author ggrant at broadinstitute.org
+ */
+
+ at CommandLineProgramProperties(
+ usage = "Converts a VCF or BCF file to a Picard Interval List.",
+ usageShort = "Converts a VCF or BCF file to a Picard Interval List.",
+ programGroup = VcfOrBcf.class
+)
+public class VcfToIntervalList extends CommandLineProgram {
+ // The following attributes define the command-line arguments
+ public static final Log LOG = Log.getInstance(VcfToIntervalList.class);
+
+ @Option(doc="The BCF or VCF input file. The file format is determined by file extension.", shortName= StandardOptionDefinitions.INPUT_SHORT_NAME)
+ public File INPUT;
+
+ @Option(shortName = StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc = "The output Picard Interval List")
+ public File OUTPUT;
+
+ public static void main(final String[] argv) {
+ new VcfToIntervalList().instanceMainWithExit(argv);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final IntervalList intervalList = VCFFileReader.fromVcf(INPUT);
+ // Sort and write the output
+ intervalList.uniqued().write(OUTPUT);
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/java/picard/vcf/filter/AlleleBalanceFilter.java b/src/java/picard/vcf/filter/AlleleBalanceFilter.java
new file mode 100644
index 0000000..d33ed5a
--- /dev/null
+++ b/src/java/picard/vcf/filter/AlleleBalanceFilter.java
@@ -0,0 +1,88 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.variant.variantcontext.Allele;
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.GenotypesContext;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextUtils;
+import htsjdk.variant.vcf.VCFFilterHeaderLine;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Filters out a record if the allele balance for heterozygotes is out of a defined range across all samples.
+ * The threshold is set as the minimum fraction of the data drawn from the less-represented allele - e.g. 0.3 would
+ * set that whichever allele has lower representation across all heterozygous individuals must account for at least 30% of the
+ * total observations.
+ */
+public class AlleleBalanceFilter implements VariantFilter {
+ /** The filter string used for sites that fail the allele balance filter. */
+ public static final String AB_FILTER = "AlleleBalance";
+
+ private final double hetAlleleBalance;
+
+ public AlleleBalanceFilter(final double hetAlleleBalance) {
+ this.hetAlleleBalance = hetAlleleBalance;
+ }
+
+ private static class Counts { int samples; int allele1; int allele2; }
+
+ @Override
+ public List<VCFFilterHeaderLine> headerLines() {
+ return CollectionUtil.makeList(new VCFFilterHeaderLine(AB_FILTER, "Heterozygote allele balance below required threshold."));
+ }
+
+ @Override
+ public String filter(final VariantContext ctx) {
+ if (ctx.getHetCount() == 0) return null;
+ final Map<List<Allele>, Counts> countsMap = new HashMap<List<Allele>, Counts>();
+
+ for (final Genotype gt : ctx.getGenotypesOrderedByName()) {
+ if (gt.isNoCall() || !gt.isHet()) continue;
+
+ final List<Allele> alleles = gt.getAlleles();
+ Counts counts = countsMap.get(alleles);
+ if (counts == null) {
+ counts = new Counts();
+ countsMap.put(alleles, counts);
+ }
+
+ counts.allele1 += gt.getAD()[ctx.getAlleleIndex(alleles.get(0))];
+ counts.allele2 += gt.getAD()[ctx.getAlleleIndex(alleles.get(1))];
+ }
+
+ for (final Counts counts : countsMap.values()) {
+ final int total = counts.allele1 + counts.allele2;
+ if (total > 0 && Math.min(counts.allele1, counts.allele2) / (double) total < this.hetAlleleBalance) return AB_FILTER;
+ }
+
+ return null;
+ }
+}
+
diff --git a/src/java/picard/vcf/filter/DepthFilter.java b/src/java/picard/vcf/filter/DepthFilter.java
new file mode 100644
index 0000000..4b3c07d
--- /dev/null
+++ b/src/java/picard/vcf/filter/DepthFilter.java
@@ -0,0 +1,48 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.GenotypesContext;
+import htsjdk.variant.variantcontext.VariantContext;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Filters out a record if all variant samples have depth lower than the given value.
+ */
+public class DepthFilter implements GenotypeFilter {
+ private final int minDepth;
+
+ public DepthFilter(final int minDepth) {
+ this.minDepth = minDepth;
+ }
+
+ @Override
+ public String filter(final VariantContext ctx, final Genotype gt) {
+ if (gt.getDP() < minDepth) return "LowDP";
+ else return null;
+ }
+}
diff --git a/src/java/picard/vcf/filter/FilterApplyingVariantIterator.java b/src/java/picard/vcf/filter/FilterApplyingVariantIterator.java
new file mode 100644
index 0000000..9ca3a67
--- /dev/null
+++ b/src/java/picard/vcf/filter/FilterApplyingVariantIterator.java
@@ -0,0 +1,134 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+
+import htsjdk.samtools.util.ListMap;
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.GenotypeBuilder;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextBuilder;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Iterator that dynamically applies filter strings to VariantContext records supplied by an underlying
+ * iterator. Returns all records from the underlying stream and does not remove any.
+ *
+ * @author tfennell
+ */
+public class FilterApplyingVariantIterator implements CloseableIterator<VariantContext> {
+ /** Filter string that is used to filter a Variant when all variant genotypes are filtered out. */
+ public static final String ALL_GTS_FILTERED = "AllGtsFiltered";
+ /** The "PASS"ing filter String. */
+ public static final String PASS_FILTER = "PASS";
+
+ private final Iterator<VariantContext> iterator;
+ private final VariantFilter[] filters;
+ private final GenotypeFilter[] gtFilters;
+
+ /**
+ * Constructs an iterator from an underlying iterator and the provided (possibly empty)
+ * collections of variant and genotype filters.
+ */
+ public FilterApplyingVariantIterator(final Iterator<VariantContext> iterator,
+ final Collection<VariantFilter> filters,
+ final Collection<GenotypeFilter> gtFilters) {
+ this.iterator = iterator;
+ this.filters = filters.toArray(new VariantFilter[filters.size()]);
+ this.gtFilters = gtFilters.toArray(new GenotypeFilter[gtFilters.size()]);
+ }
+
+ /**
+ * Provides the next record from the underlying iterator after applying filter strings generated
+ * by the set of filters in use by the iterator.
+ */
+ @Override
+ public VariantContext next() {
+ final VariantContext ctx = this.iterator.next();
+ final Set<String> filterStrings = new HashSet<String>();
+
+ // Collect variant level filters
+ for (final VariantFilter filter : this.filters) {
+ final String val = filter.filter(ctx);
+ if (val != null) filterStrings.add(val);
+ }
+
+ // Collect genotype level filters in a Map of Sample -> List<filter string>
+ final ListMap<String,String> gtFilterStrings = new ListMap<String,String>();
+ final Set<String> variantSamples = new HashSet<String>();
+ for (final Genotype gt : ctx.getGenotypes()) {
+ if (gt.isCalled() && !gt.isHomRef()) variantSamples.add(gt.getSampleName());
+
+ for (final GenotypeFilter filter : gtFilters) {
+ final String filterString = filter.filter(ctx,gt);
+ if (filterString != null) gtFilterStrings.add(gt.getSampleName(), filterString);
+ }
+ }
+
+ // If all genotypes are filtered apply a site level filter
+ if (gtFilterStrings.keySet().containsAll(variantSamples)) {
+ filterStrings.add(ALL_GTS_FILTERED);
+ }
+
+ // Make a builder and set the site level filter appropriately
+ final VariantContextBuilder builder = new VariantContextBuilder(ctx);
+ if (filterStrings.isEmpty()) {
+ builder.passFilters();
+ }
+ else {
+ builder.filters(filterStrings);
+ }
+
+ // Apply filters to the necessary genotypes
+ builder.noGenotypes();
+ final List<Genotype> newGenotypes = new ArrayList<Genotype>(ctx.getNSamples());
+ for (final Genotype gt : ctx.getGenotypes()) {
+ final GenotypeBuilder gtBuilder = new GenotypeBuilder(gt);
+ final List<String> filters = gtFilterStrings.get(gt.getSampleName());
+
+ if (filters == null || filters.isEmpty()) {
+ gtBuilder.filter(PASS_FILTER);
+ }
+ else {
+ gtBuilder.filters(filters);
+ }
+ newGenotypes.add(gtBuilder.make());
+ }
+ builder.genotypes(newGenotypes);
+
+ return builder.make();
+ }
+
+ @Override public boolean hasNext() { return this.iterator.hasNext(); }
+ @Override public void close() { CloserUtil.close(this.iterator); }
+ @Override public void remove() { throw new UnsupportedOperationException("remove() not supported by FilterApplyingVariantIterator."); }
+}
diff --git a/src/java/picard/vcf/filter/FilterVcf.java b/src/java/picard/vcf/filter/FilterVcf.java
new file mode 100644
index 0000000..886f16e
--- /dev/null
+++ b/src/java/picard/vcf/filter/FilterVcf.java
@@ -0,0 +1,117 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.variant.variantcontext.writer.VariantContextWriter;
+import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFFilterHeaderLine;
+import htsjdk.variant.vcf.VCFFormatHeaderLine;
+import htsjdk.variant.vcf.VCFHeader;
+import htsjdk.variant.vcf.VCFHeaderLineCount;
+import htsjdk.variant.vcf.VCFHeaderLineType;
+import picard.cmdline.CommandLineProgram;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.Option;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.cmdline.programgroups.VcfOrBcf;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Applies a set of hard filters to Variants and to Genotypes within a VCF.
+ *
+ * @author Tim Fennell
+ */
+ at CommandLineProgramProperties(
+ usage = "Applies one or more hard filters to a VCF file to filter out genotypes and variants.",
+ usageShort = "Hard filters a VCF.",
+ programGroup = VcfOrBcf.class
+)
+public class FilterVcf extends CommandLineProgram {
+ @Option(shortName=StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The INPUT VCF or BCF file.")
+ public File INPUT;
+
+ @Option(shortName=StandardOptionDefinitions.OUTPUT_SHORT_NAME, doc="The output VCF or BCF.")
+ public File OUTPUT;
+
+ @Option(doc="The minimum allele balance acceptable before filtering a site. Allele balance is calculated for heterozygotes as " +
+ "the number of bases supporting the least-represented allele over the total number of base observations. Different heterozygote " +
+ "genotypes at the same locus are measured independently. The locus is filtered if any allele balance is below the limit.")
+ public double MIN_AB = 0.0d;
+
+ @Option(doc="The minimum sequencing depth supporting a genotype before the genotype will be filtered out.")
+ public int MIN_DP = 0;
+
+ @Option(doc="The minimum genotype quality that must be achieved for a sample otherwise the genotype will be filtered out.")
+ public int MIN_GQ = 0;
+
+ @Option(doc="The maximum phred scaled fisher strand value before a site will be filtered out.")
+ public double MAX_FS = Double.MAX_VALUE;
+
+ @Option(doc="The minimum QD value to accept or otherwise filter out the variant.")
+ public double MIN_QD = 0;
+
+ /** Constructor to default to having index creation on. */
+ public FilterVcf() { this.CREATE_INDEX = true; }
+
+ // Stock main method
+ public static void main(final String[] args) {
+ new FilterVcf().instanceMainWithExit(args);
+ }
+
+ @Override
+ protected int doWork() {
+ IOUtil.assertFileIsReadable(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+
+ final List<VariantFilter> variantFilters = CollectionUtil.makeList(new AlleleBalanceFilter(MIN_AB), new FisherStrandFilter(MAX_FS), new QdFilter(MIN_QD));
+ final List<GenotypeFilter> genotypeFilters = CollectionUtil.makeList(new GenotypeQualityFilter(MIN_GQ), new DepthFilter(MIN_DP));
+ final VCFFileReader in = new VCFFileReader(INPUT, false);
+ final FilterApplyingVariantIterator iterator = new FilterApplyingVariantIterator(in.iterator(), variantFilters, genotypeFilters);
+
+ final VariantContextWriter out = new VariantContextWriterBuilder().setOutputFile(OUTPUT).build();
+ final VCFHeader header = in.getFileHeader();
+ header.addMetaDataLine(new VCFFilterHeaderLine("AllGtsFiltered", "Site filtered out because all genotypes are filtered out."));
+ header.addMetaDataLine(new VCFFormatHeaderLine("FT", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "Genotype filters."));
+ for (final VariantFilter filter : variantFilters) {
+ for (final VCFFilterHeaderLine line : filter.headerLines()) {
+ header.addMetaDataLine(line);
+ }
+ }
+
+ out.writeHeader(in.getFileHeader());
+
+ while (iterator.hasNext()) {
+ out.add(iterator.next());
+ }
+
+ out.close();
+ in.close();
+ return 0;
+ }
+}
diff --git a/src/java/picard/vcf/filter/FisherStrandFilter.java b/src/java/picard/vcf/filter/FisherStrandFilter.java
new file mode 100644
index 0000000..633765a
--- /dev/null
+++ b/src/java/picard/vcf/filter/FisherStrandFilter.java
@@ -0,0 +1,55 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFilterHeaderLine;
+
+import java.util.List;
+
+/**
+ * Filters records based on the phred scaled p-value from the Fisher Strand test stored in
+ * the FS attribute.
+ *
+ * @author tfennell
+ */
+public class FisherStrandFilter implements VariantFilter {
+ private final double maxPhredScalePValue;
+
+ public FisherStrandFilter(final double maxPhredScalePValue) {
+ this.maxPhredScalePValue= maxPhredScalePValue;
+ }
+
+ @Override
+ public List<VCFFilterHeaderLine> headerLines() {
+ return CollectionUtil.makeList(new VCFFilterHeaderLine("StrandBias", "Site exhibits excessive allele/strand correlation."));
+ }
+
+ @Override
+ public String filter(final VariantContext ctx) {
+ final double fs = ctx.getAttributeAsDouble("FS", 0);
+ return (fs > maxPhredScalePValue) ? "StrandBias" : null;
+ }
+}
diff --git a/src/java/picard/vcf/filter/GenotypeFilter.java b/src/java/picard/vcf/filter/GenotypeFilter.java
new file mode 100644
index 0000000..03d3f0c
--- /dev/null
+++ b/src/java/picard/vcf/filter/GenotypeFilter.java
@@ -0,0 +1,40 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.VariantContext;
+
+import java.util.Map;
+
+/**
+ * An interface for classes that perform Genotype filtration. Implementations are expected to take in a VariantContext
+ * and a single Genotype and return either null (for no filter) or a specific filter string.
+ *
+ * @author Tim Fennell
+ */
+public interface GenotypeFilter {
+ /** Test whether or not the genotype should be filtered out. If so return a filter string, otherwise return null. */
+ public String filter(final VariantContext ctx, final Genotype gt);
+}
diff --git a/src/java/picard/vcf/filter/GenotypeQualityFilter.java b/src/java/picard/vcf/filter/GenotypeQualityFilter.java
new file mode 100644
index 0000000..a90d068
--- /dev/null
+++ b/src/java/picard/vcf/filter/GenotypeQualityFilter.java
@@ -0,0 +1,46 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.VariantContext;
+
+/**
+ * Genotype filter that filters out genotypes below a given quality threshold.
+ *
+ * @author tfennell
+ */
+public class GenotypeQualityFilter implements GenotypeFilter {
+ private final int minGq;
+
+ public GenotypeQualityFilter(final int minGq) {
+ this.minGq = minGq;
+ }
+
+ @Override
+ public String filter(final VariantContext ctx, final Genotype gt) {
+ if (gt.getGQ() < minGq) return "LowGQ";
+ else return null;
+ }
+}
diff --git a/src/java/picard/vcf/filter/QdFilter.java b/src/java/picard/vcf/filter/QdFilter.java
new file mode 100644
index 0000000..b048d00
--- /dev/null
+++ b/src/java/picard/vcf/filter/QdFilter.java
@@ -0,0 +1,62 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFilterHeaderLine;
+
+import java.util.List;
+
+/**
+ * Filters out sites that have a QD annotation applied to them and where the QD value is lower than a
+ * lower limit.
+ *
+ * @author Tim Fennell
+ */
+public class QdFilter implements VariantFilter {
+ public static final String FILTER_NAME = "LowQD";
+ private final double minimumQd;
+
+ public QdFilter(final double minimumQd) {
+ this.minimumQd = minimumQd;
+ }
+
+ @Override public String filter(final VariantContext ctx) {
+ final double qd = ctx.getAttributeAsDouble("QD", -1d); // If QD is missing, return -1
+
+ // QD should always be positive so a value < 0 indicates a missing value
+ if (qd >= 0 && qd < minimumQd) {
+ return FILTER_NAME;
+ }
+ else {
+ return null;
+ }
+ }
+
+ @Override
+ public List<VCFFilterHeaderLine> headerLines() {
+ return CollectionUtil.makeList(new VCFFilterHeaderLine(FILTER_NAME, "Site exhibits QD value below a hard limit."));
+ }
+}
diff --git a/src/java/picard/vcf/filter/VariantFilter.java b/src/java/picard/vcf/filter/VariantFilter.java
new file mode 100644
index 0000000..6fe0c36
--- /dev/null
+++ b/src/java/picard/vcf/filter/VariantFilter.java
@@ -0,0 +1,44 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFilterHeaderLine;
+
+import java.util.List;
+
+/**
+ * Interface for classes that can generate filters for VariantContexts. The contract is that a
+ * VariantContext is provided, and if the variant should be filtered out then the filter string
+ * should be returned, otherwise null.
+ *
+ * @author tfennell
+ */
+public interface VariantFilter {
+ /** Check to see if the VariantContext should have a filter applied to it. If so return the filter string, otherwise return null. */
+ public String filter(final VariantContext ctx);
+
+ /** Return VCF header lines that define filters that may be applied by the VariantFilter. */
+ public List<VCFFilterHeaderLine> headerLines();
+}
diff --git a/src/java/picard/vcf/processor/VariantAccumulatorExecutor.java b/src/java/picard/vcf/processor/VariantAccumulatorExecutor.java
new file mode 100644
index 0000000..3252920
--- /dev/null
+++ b/src/java/picard/vcf/processor/VariantAccumulatorExecutor.java
@@ -0,0 +1,169 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import com.google.common.collect.FluentIterable;
+import picard.util.AtomicIterator;
+import picard.util.Iterators;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.variant.variantcontext.VariantContext;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Describes the functionality for an executor that manages the delegation of work to {@link VariantProcessor.Accumulator}s.
+ *
+ * @author mccowan
+ */
+public interface VariantAccumulatorExecutor<ACCUMULATOR extends VariantProcessor.Accumulator<RESULT>, RESULT> {
+ /** Starts the work of the executor, returning immediately. */
+ void start();
+
+ /** Blocks until the work is complete. */
+ void awaitCompletion() throws InterruptedException;
+
+ /** Returns the {@link VariantProcessor.Accumulator}s associated with this executor. */
+ Collection<ACCUMULATOR> accumulators();
+
+ /**
+ * A {@link VariantAccumulatorExecutor} that breaks down work into chunks described by the provided {@link VariantIteratorProducer} and
+ * spreads them over the indicated number of threads.
+ *
+ * @author mccowan
+ */
+ class MultiThreadedChunkBased<A extends VariantProcessor.Accumulator<R>, R> implements VariantAccumulatorExecutor<A, R> {
+ private static final Log LOG = Log.getInstance(MultiThreadedChunkBased.class);
+
+ final AtomicIterator<CloseableIterator<VariantContext>> vcIterators;
+ final ExecutorService executor;
+ final Collection<A> accumulators = Collections.synchronizedCollection(new ArrayList<A>());
+
+ /** Signals whether or not this executor is started. */
+ volatile boolean started = false;
+ final int numThreads;
+
+ private final List<Throwable> childrenErrors = Collections.synchronizedList(new ArrayList<Throwable>());
+
+ final VariantProcessor.AccumulatorGenerator<A, R> accumulatorGenerator;
+
+ public MultiThreadedChunkBased(
+ final int numThreads,
+ final VariantIteratorProducer vcIteratorProducer,
+ final VariantProcessor.AccumulatorGenerator<A, R> accumulatorGenerator
+ ) {
+ this.executor = Executors.newFixedThreadPool(numThreads);
+ this.vcIterators = Iterators.atomicIteratorOf(vcIteratorProducer.iterators());
+ this.numThreads = numThreads;
+ this.accumulatorGenerator = accumulatorGenerator;
+ }
+
+
+ @Override
+ public synchronized void start() {
+ started = true;
+ for (int i = 0; i < numThreads; i++) {
+ final A accumulator = accumulatorGenerator.build();
+ accumulators.add(accumulator);
+ executor.submit(new Worker(accumulator));
+ }
+ executor.shutdown();
+ }
+
+ public synchronized Collection<A> accumulators() {
+ return Collections.unmodifiableCollection(accumulators);
+ }
+
+ @Override
+ public void awaitCompletion() throws InterruptedException {
+ if (!started) {
+ throw new IllegalStateException("This method can be called only after the executor has been started.");
+ } else {
+ executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
+ if (!childrenErrors.isEmpty()) {
+ throw new MultiException(childrenErrors);
+ }
+ }
+ }
+
+ static class MultiException extends RuntimeException {
+ final List<Throwable> childrenExceptions;
+
+ public MultiException(final List<Throwable> childrenExceptions) {
+ this.childrenExceptions = childrenExceptions;
+ }
+
+ @Override
+ public String getMessage() {
+ return "Children threads encountered exceptions:\n" + Joiner.on("\n\t").join(FluentIterable.from(childrenExceptions).transform
+ (new Function<Throwable, String>() {
+ @Override
+ public String apply(final Throwable throwable) {
+ return throwable.getMessage();
+ }
+ }));
+ }
+ }
+
+ /** Continually requests and exhausts variant context iterators, delegating each to the child {@link Worker#processor}. */
+ class Worker implements Runnable {
+ final VariantProcessor.Accumulator processor;
+
+ Worker(final VariantProcessor.Accumulator processor) {
+ this.processor = processor;
+ }
+
+ @Override
+ public void run() {
+ try {
+ Optional<CloseableIterator<VariantContext>> readerMaybe;
+ while ((readerMaybe = vcIterators.next()).isPresent()) {
+ final CloseableIterator<VariantContext> reader = readerMaybe.get();
+ while (reader.hasNext()) processor.accumulate(reader.next());
+ reader.close();
+
+ if (!childrenErrors.isEmpty()) {
+ LOG.error(Thread.currentThread() + " aborting: observed error in another child thread.");
+ break;
+ }
+ }
+ } catch (final Throwable e) {
+ childrenErrors.add(e);
+ LOG.error(e, "Unexpected exception encountered in child thread.");
+ } finally {
+ LOG.debug(String.format("Thread %s is finishing.", Thread.currentThread()));
+ }
+ }
+ }
+ }
+}
diff --git a/src/java/picard/vcf/processor/VariantIteratorProducer.java b/src/java/picard/vcf/processor/VariantIteratorProducer.java
new file mode 100644
index 0000000..8ae028f
--- /dev/null
+++ b/src/java/picard/vcf/processor/VariantIteratorProducer.java
@@ -0,0 +1,278 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.OverlapDetector;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFileReader;
+import picard.vcf.processor.util.PredicateFilterDecoratingClosableIterator;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A mechanism for iterating over {@link CloseableIterator} of {@link VariantContext}s in in some fashion, given VCF files and optionally
+ * an interval list.
+ *
+ * The produced iterators may perform on-the-fly filtering of the produced {@link VariantContext}s.
+ *
+ * @author mccowan
+ */
+public abstract class VariantIteratorProducer {
+ final static int ONE_HUNDRED_MILLION = (int) 100e6;
+ /**
+ * Renders the embodied regions of the VCF files in the form of {@link htsjdk.samtools.util.CloseableIterator}s over
+ * {@link VariantContext}s. The iterator may perform on-the-fly filtering of these elements.
+ */
+ public abstract Iterable<CloseableIterator<VariantContext>> iterators();
+
+ /** Closes any latent file handles that may have been opened by calls to {@link #iterators()}. */
+ public abstract void close();
+
+ /**
+ * Produces a chunking with segments of size 100 megabases (or less if a contig boundary is reached), that also performs on-the-fly
+ * filtering of {@link VariantContext}
+ */
+ public static VariantIteratorProducer byHundredMegabaseChunksWithOnTheFlyFilteringByInterval(final List<File> vcfs, final IntervalList intervalList) {
+ return new Threadsafe(VcfFileSegmentGenerator.byWholeContigSubdividingWithWidth(ONE_HUNDRED_MILLION), vcfs, intervalList);
+ }
+
+ /** Produces a chunking with segments of size 100 megabases (or less if a contig boundary is reached). */
+ public static VariantIteratorProducer byHundredMegabaseChunks(final List<File> vcfs) {
+ return new Threadsafe(VcfFileSegmentGenerator.byWholeContigSubdividingWithWidth(ONE_HUNDRED_MILLION), vcfs, null);
+ }
+
+ /**
+ * A {@link VariantIteratorProducer} that is based on a given {@link VcfFileSegmentGenerator} and a list of VCFs. The chunks are ordered by VCF, and
+ * then by whatever ordering of segments are produced by {@link VcfFileSegmentGenerator#forVcf(java.io.File)} for each of those VCFs.
+ * <p/>
+ * The iterators produced by this class are safe to share between multiple threads.
+ * <p/>
+ * If an {@link IntervalList} provided, the produced iterators will perform on-the-fly filtering and calls to {@link Iterator#next()} will
+ * only include {@link VariantContext}s that fall within the regions described by that list.
+ * <p/>
+ * This class maintains a {@link ThreadLocal} of {@link VCFFileReader} to ensure that each thread has its own, and at most one, reader per
+ * VCF. It also guarantees that, so long as a thread closes its "queried into" readers after expiring them, there is only one extant
+ * "queried into" iterator per thread per VCF.
+ *
+ * @author mccowan
+ */
+ static class Threadsafe extends VariantIteratorProducer {
+ final static Log LOG = Log.getInstance(Threadsafe.class);
+
+ /** A list of the segments for which the corresponding {@link VariantContext}s will be produced. */
+ final List<VcfFileSegment> segments;
+ final OverlapDetector<Interval> intervalsOfInterestDetector;
+
+ /** Maps directly to {@link #segments}; useful for determining if a given variant falls into multiple segments (don't double-count!). */
+ final Map<File, OverlapDetector<VcfFileSegment>> multiSegmentDetectorPerFile =
+ new CollectionUtil.DefaultingMap<File,OverlapDetector<VcfFileSegment>>(new CollectionUtil.DefaultingMap.Factory<OverlapDetector<VcfFileSegment>, File>() {
+ @Override
+ public OverlapDetector<VcfFileSegment> make(final File f) {
+ return new OverlapDetector<VcfFileSegment>(0, 0);
+ }
+ }, true);
+
+
+ Threadsafe(final VcfFileSegmentGenerator segmenter, final List<File> vcfs) {
+ this(segmenter, vcfs, null);
+ }
+
+ Threadsafe(final VcfFileSegmentGenerator segmenter, final List<File> vcfs, final IntervalList intervals) {
+ if (intervals != null) {
+ final List<Interval> uniques = intervals.getUniqueIntervals(false);
+ this.intervalsOfInterestDetector = new OverlapDetector<Interval>(0, 0);
+ intervalsOfInterestDetector.addAll(uniques, uniques);
+ } else {
+ intervalsOfInterestDetector = null;
+ }
+
+ /**
+ * Prepare {@link #segments} and {@link multiSegmentDetectorPerFile}. First, we only want to accumulate segments that are
+ * interesting, e.g., only ones that do not lie completely outside of the interval list provided by the consumer (if it was
+ * provided).
+ *
+ * Then, break up our {@link VcfFileSegment}s by file, and build a corresponding {@link OverlapDetector} for those segments. This
+ * will be used downstream to ensure that we don't emit a given VC from a VCF more than once.
+ *
+ * While we're at it, since this class expects the provided {@link VcfFileSegmentGenerator} produces non-overlapping segments,
+ * assert that this is true.
+ */
+ final VcfFileSegmentGenerator interestingSegmentSegmenter =
+ intervalsOfInterestDetector == null ? segmenter : VcfFileSegmentGenerator.excludingNonOverlaps(segmenter, intervalsOfInterestDetector);
+ segments = new ArrayList<VcfFileSegment>();
+ for (final File vcf : vcfs) {
+ for (final VcfFileSegment segment : interestingSegmentSegmenter.forVcf(vcf)) {
+ segments.add(segment);
+ }
+ }
+ for (final VcfFileSegment segment : segments) {
+ final Interval segmentInterval = segment.correspondingInterval();
+ final OverlapDetector<VcfFileSegment> vcfSpecificDetector = multiSegmentDetectorPerFile.get(segment.vcf());
+ if (vcfSpecificDetector.getOverlaps(segmentInterval).isEmpty()) {
+ vcfSpecificDetector.addLhs(segment, new Interval(segment.contig(), segment.start(), segment.stop()));
+ } else {
+ throw new IllegalArgumentException(String.format(
+ "Provided segmenting strategy produced overlapping intervals; %s overlaps with: %s",
+ segment,
+ Joiner.on(", ").join(vcfSpecificDetector.getOverlaps(segmentInterval))
+ ));
+ }
+ }
+ }
+
+ /**
+ * All of the {@link VCFFileReader}s opened by this object, across all threads. (We can't get this
+ * value out of {@link #localVcfFileReaders} because of the way {@link java.lang.ThreadLocal} works.
+ */
+ final Collection<VCFFileReader> allReaders = Collections.synchronizedCollection(new ArrayList<VCFFileReader>());
+
+ /**
+ * A map maintained for each thread that contains the {@link htsjdk.variant.vcf.VCFFileReader}s that it has opened for a
+ * given VCF. (Threads never share {@link htsjdk.variant.vcf.VCFFileReader}s.
+ * <p/>
+ * This is a {@link CollectionUtil.DefaultingMap} to effectively produce readers on-the-fly. Note that it also adds every produced
+ * reader into {@link #allReaders}.
+ */
+ final ThreadLocal<CollectionUtil.DefaultingMap<File, VCFFileReader>> localVcfFileReaders =
+ new ThreadLocal<CollectionUtil.DefaultingMap<File, VCFFileReader>>() {
+ @Override
+ protected CollectionUtil.DefaultingMap<File, VCFFileReader> initialValue() {
+ return new CollectionUtil.DefaultingMap<File, VCFFileReader>(new CollectionUtil.DefaultingMap.Factory<VCFFileReader, File>() {
+ @Override
+ public VCFFileReader make(final File file) {
+ final VCFFileReader reader = new VCFFileReader(file);
+ LOG.debug(String.format("Producing a reader of %s for %s.", file, Thread.currentThread()));
+ allReaders.add(reader);
+ return reader;
+ }
+ }, true);
+ }
+ };
+
+ /**
+ * Converts a {@link VcfFileSegment} into a {@link VariantContext} iterator. Applies filtering via {@link #intervalsOfInterestDetector}
+ * if it is defined.
+ */
+ private CloseableIterator<VariantContext> iteratorForSegment(final VcfFileSegment segment) {
+ final CloseableIterator<VariantContext> query =
+ localVcfFileReaders.get() // Get the collection of VCF file readers local to this thread
+ .get(segment.vcf()) // Get or generate the reader for this segment's VCF file
+ .query(segment.contig(), segment.start(), segment.stop()); // Query the segment
+
+ // Then wrap the iterator in a on-the-fly interval-list based filter, if requested.
+ final Collection<Predicate<VariantContext>> filters = new ArrayList<Predicate<VariantContext>>();
+ if (intervalsOfInterestDetector != null) {
+ filters.add(new OverlapsPredicate());
+ }
+ filters.add(new NonUniqueVariantPredicate(segment));
+ return new PredicateFilterDecoratingClosableIterator<VariantContext>(query, filters);
+ }
+
+ @Override
+ public Iterable<CloseableIterator<VariantContext>> iterators() {
+ return FluentIterable.from(segments).transform(new Function<VcfFileSegment, CloseableIterator<VariantContext>>() {
+ @Override
+ public CloseableIterator<VariantContext> apply(final VcfFileSegment segment) {
+ return iteratorForSegment(segment);
+ }
+ });
+ }
+
+ @Override
+ public void close() {
+ final Iterator<VCFFileReader> i = allReaders.iterator();
+ while (i.hasNext()) {
+ i.next().close();
+ i.remove();
+ }
+ }
+
+ /**
+ * A predicate that I had difficulty naming. The value of this predicate is that it ensures that no single variant is produced multiple
+ * times from a call to {@link Threadsafe#iterators()}. It works by asking each variant "Hey variant, which of the
+ * {@link VcfFileSegment}s that this {@link Threadsafe} is producing variants from do you fall into (and thus,
+ * would be produced by a corresponding call to {@link VCFFileReader#query(String, int, int)}? If it's more than one, we're only going
+ * to emit you from the query for the very first of those {@link VcfFileSegment}s."
+ */
+ final class NonUniqueVariantPredicate implements Predicate<VariantContext> {
+ final VcfFileSegment sourceSegment;
+
+ NonUniqueVariantPredicate(final VcfFileSegment sourceSegment) {
+ this.sourceSegment = sourceSegment;
+ }
+
+ @Override
+ public boolean apply(final VariantContext vc) {
+ if (vc.getStart() == vc.getEnd()) {
+ // This isn't a multi-allelic segment, so it can only be produced by a single segment.
+ return true;
+ }
+ final Collection<VcfFileSegment> intersectingSegments =
+ multiSegmentDetectorPerFile.get(sourceSegment.vcf()).getOverlaps(new Interval(vc.getChr(), vc.getStart(), vc.getEnd()));
+ if (intersectingSegments.size() < 2) {
+ // There's only one segment that produces this variant
+ return true;
+ }
+
+ // The convention is: only emit the VC if it is produced from the first segment that can produce it in the list.
+ final int sourceSegmentIndex = segments.indexOf(sourceSegment);
+ LOG.debug("Found wide variant spanning multiple source segments: ", vc);
+ for (final VcfFileSegment intersectingSegment : intersectingSegments) {
+ if (segments.indexOf(intersectingSegment) < sourceSegmentIndex) {
+ // There is a segment that produces this variant earlier in the segment list, exclude it.
+ return false;
+ }
+ }
+ LOG.debug("Emitting wide variant because it belongs to first segment: ", vc);
+ return true;
+ }
+ }
+
+ /** A predicate answering if the provided {@link VariantContext} overlaps {@link #intervalsOfInterestDetector}. */
+ final class OverlapsPredicate implements Predicate<VariantContext> {
+ @Override
+ public boolean apply(final VariantContext vc) {
+ final boolean include = !intervalsOfInterestDetector.getOverlaps(new Interval(vc.getChr(), vc.getStart(), vc.getEnd())).isEmpty();
+ if (!include) LOG.debug("Filtering variant at ", vc.getChr(), ":", vc.getStart(), "-", vc.getEnd());
+ return include;
+ }
+ }
+ }
+
+}
diff --git a/src/java/picard/vcf/processor/VariantProcessor.java b/src/java/picard/vcf/processor/VariantProcessor.java
new file mode 100644
index 0000000..f40285e
--- /dev/null
+++ b/src/java/picard/vcf/processor/VariantProcessor.java
@@ -0,0 +1,171 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.variant.variantcontext.VariantContext;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Describes an object that processes variants and produces a result.
+ * <p/>
+ * A consumer typically builds an instance of this class via {@link Builder}, providing it the appropriate {@link AccumulatorGenerator} and
+ * {@link ResultMerger}, then calls {@link #process()} to obtain the {@link RESULT} of the processing.
+ * <p/>
+ * Future work...?
+ * - Make more efficient for the single-thread case.
+ * - A {@link VcfFileSegmentGenerator} that is based on an interval list, so that segments' span a constant-size total-base-count overlap with
+ * the interval list (or something in that vein).
+ *
+ * @author mccowan
+ */
+public class VariantProcessor<RESULT, ACCUMULATOR extends VariantProcessor.Accumulator<RESULT>> {
+
+ /**
+ * Handles {@link VariantContext}s, and accumulates their data in some fashion internally.
+ * A call to {@link #result()} produces an embodiment of the results of this processing (which may or may not be the accumulator itself).
+ *
+ * @author mccowan
+ */
+ public static interface Accumulator<RESULT> {
+ void accumulate(final VariantContext vc);
+
+ RESULT result();
+ }
+
+ /**
+ * Generates instances of {@link Accumulator}s.
+ *
+ * @author mccowan
+ */
+ public static interface AccumulatorGenerator<ACCUMULATOR extends Accumulator<RESULT>, RESULT> {
+ ACCUMULATOR build();
+ }
+
+ /**
+ * Takes a collection of results produced by {@link Accumulator#result()} and merges them into a single {@link RESULT}.
+ *
+ * @author mccowan
+ */
+ public static interface ResultMerger<RESULT> {
+ RESULT merge(final Collection<RESULT> resultsToReduce);
+ }
+
+
+ final ResultMerger<RESULT> merger;
+ final VariantAccumulatorExecutor<ACCUMULATOR, RESULT> executor;
+
+ VariantProcessor(
+ final ResultMerger<RESULT> merger,
+ final VariantAccumulatorExecutor<ACCUMULATOR, RESULT> executor) {
+ this.merger = merger;
+ this.executor = executor;
+ }
+
+ public RESULT process() {
+ executor.start();
+ try {
+ executor.awaitCompletion();
+ } catch (final InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+
+ final List<RESULT> results = new ArrayList<RESULT>();
+ for (final ACCUMULATOR a : executor.accumulators()) {
+ results.add(a.result());
+ }
+ return merger.merge(results);
+ }
+
+ /** Simple builder of {@link VariantProcessor}s. */
+ public static class Builder<A extends Accumulator<R>, R> {
+ final AccumulatorGenerator<A, R> accumulatorGenerator;
+ ResultMerger<R> reducer = null;
+ IntervalList intervals = null;
+ final List<File> inputs = new ArrayList<File>();
+ int threadCount = 1;
+
+ Builder(final AccumulatorGenerator<A, R> accumulatorGenerator) {
+ this.accumulatorGenerator = accumulatorGenerator;
+ }
+
+ public Builder<A, R> multithreadingBy(final int threadCount) {
+ if (threadCount < 1) throw new IllegalArgumentException("Multithreading value must exceed 0.");
+ this.threadCount = threadCount;
+ return this;
+ }
+
+ public Builder<A, R> withInput(final File... vcfs) {
+ Collections.addAll(inputs, vcfs);
+ return this;
+ }
+
+ public Builder<A, R> limitingProcessedRegionsTo(final IntervalList intervals) {
+ if (this.intervals != null) throw new IllegalStateException("Already provided an interval list.");
+ this.intervals = IntervalList.copyOf(intervals);
+ return this;
+ }
+
+ public Builder<A, R> combiningResultsBy(final ResultMerger<R> reducer) {
+ if (this.reducer != null) throw new IllegalStateException("Already provided a reducer.");
+ this.reducer = reducer;
+ return this;
+ }
+
+ public static <A extends Accumulator<R>, R> Builder<A, R> generatingAccumulatorsBy(final AccumulatorGenerator<A, R> generator) {
+ return new Builder<A, R>(generator);
+ }
+
+ public VariantProcessor<R, A> build() {
+ if (inputs.isEmpty()) throw new IllegalStateException("You need to provided some inputs before building.");
+ if (reducer == null) throw new IllegalStateException("You must provide a reducer before building.");
+
+ return new VariantProcessor<R, A>(reducer, new VariantAccumulatorExecutor.MultiThreadedChunkBased<A, R>(
+ threadCount,
+ composeVcfIteratorProducerFromBuilderArguments(),
+ accumulatorGenerator
+ ));
+ }
+
+ private VariantIteratorProducer composeVcfIteratorProducerFromBuilderArguments() {
+ /**
+ * Be careful; if we pick chunkings that are highly granular (e.g., a chunking based on each interval in an exome-like
+ * interval list), it will result in a {@link htsjdk.variant.vcf.VCFFileReader#query(String, int, int)} call
+ * per tiny chunk, which is very non-performant due to some implementations of that method.
+ */
+ final VariantIteratorProducer ret;
+ if (intervals == null) {
+ ret = VariantIteratorProducer.byHundredMegabaseChunks(inputs);
+ } else {
+ ret = VariantIteratorProducer.byHundredMegabaseChunksWithOnTheFlyFilteringByInterval(inputs, intervals);
+ }
+ return ret;
+ }
+ }
+}
diff --git a/src/java/picard/vcf/processor/VcfFileSegment.java b/src/java/picard/vcf/processor/VcfFileSegment.java
new file mode 100644
index 0000000..104aabb
--- /dev/null
+++ b/src/java/picard/vcf/processor/VcfFileSegment.java
@@ -0,0 +1,89 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.SAMSequenceRecord;
+
+import java.io.File;
+
+/**
+ * Describes a segment of a particular VCF file.
+ *
+ * @author mccowan
+ */
+public abstract class VcfFileSegment {
+ abstract public int start();
+ abstract public int stop();
+ abstract public String contig();
+ abstract public File vcf();
+
+ public Interval correspondingInterval() {
+ return new Interval(contig(), start(), stop());
+ }
+
+ @Override
+ public String toString() {
+ return vcf().getName() + "::" + contig() + ":" + start() + "-" + stop();
+ }
+
+ static VcfFileSegment ofWholeSequence(final SAMSequenceRecord sequence, final File vcf) {
+ return new SequenceSizedChunk(sequence, vcf);
+ }
+
+ static class SequenceSizedChunk extends VcfFileSegment {
+ final SAMSequenceRecord sequence;
+ final File vcf;
+
+ private SequenceSizedChunk(final SAMSequenceRecord sequence, final File vcf) {
+ this.sequence = sequence;
+ this.vcf = vcf;
+ }
+
+ @Override
+ public String toString() {
+ return vcf().getAbsolutePath() + "::" + sequence.getSequenceName() + ":1-" + sequence.getSequenceLength();
+ }
+
+ @Override
+ public int start() {
+ return 1;
+ }
+
+ @Override
+ public int stop() {
+ return sequence.getSequenceLength();
+ }
+
+ @Override
+ public String contig() {
+ return sequence.getSequenceName();
+ }
+
+ @Override
+ public File vcf() {
+ return vcf;
+ }
+ }
+}
diff --git a/src/java/picard/vcf/processor/VcfFileSegmentGenerator.java b/src/java/picard/vcf/processor/VcfFileSegmentGenerator.java
new file mode 100644
index 0000000..e8a639e
--- /dev/null
+++ b/src/java/picard/vcf/processor/VcfFileSegmentGenerator.java
@@ -0,0 +1,203 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+import com.google.common.primitives.Ints;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.OverlapDetector;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Describes a mechanism for producing {@link VcfFileSegment}s from a VCF file.
+ *
+ * @author mccowan
+ */
+public abstract class VcfFileSegmentGenerator {
+ final static Log LOG = Log.getInstance(VcfFileSegmentGenerator.class);
+
+ public abstract Iterable<VcfFileSegment> forVcf(final File vcf);
+
+ public static VcfFileSegmentGenerator byWholeContigSubdividingWithWidth(final long segmentWidth) {
+ return WidthLimitingDecorator.wrapping(ByWholeContig.getInstance(), segmentWidth);
+ }
+
+ /**
+ * Returns a decorated {@link VcfFileSegmentGenerator} that filters out {@link VcfFileSegment}s that have no overlap with the provided
+ * {@link OverlapDetector}.
+ */
+ public static <T> VcfFileSegmentGenerator excludingNonOverlaps(final VcfFileSegmentGenerator strategy, final OverlapDetector<T> overlaps) {
+ return new VcfFileSegmentGenerator() {
+ @Override
+ public Iterable<VcfFileSegment> forVcf(final File vcf) {
+ return FluentIterable.from(strategy.forVcf(vcf)).filter(new Predicate<VcfFileSegment>() {
+ @Override
+ public boolean apply(final VcfFileSegment segment) {
+ final boolean keep = !overlaps.getOverlaps(new Interval(segment.contig(), segment.start(), segment.stop())).isEmpty();
+ if (!keep) {
+ LOG.debug(String.format("Ignoring segment because it does not overlap with detector, %s::%s:%s-%s",
+ segment.vcf().getName(), segment.contig(), segment.start(), segment.stop())
+ );
+ }
+ return keep;
+ }
+ });
+ }
+ };
+ }
+
+ /**
+ * A very simple {@link VcfFileSegmentGenerator} that breaks up the provided vcfs into contig-sized chunks.
+ *
+ * @author mccowan
+ */
+ static class ByWholeContig extends VcfFileSegmentGenerator {
+ // Singleton!
+ ByWholeContig() {
+ }
+
+ private static final ByWholeContig singleton = new ByWholeContig();
+
+ public static ByWholeContig getInstance() {
+ return singleton;
+ }
+
+ @Override
+ public Iterable<VcfFileSegment> forVcf(final File vcf) {
+ final List<SAMSequenceRecord> samSequenceRecords = readSequences(vcf);
+ return FluentIterable.from(samSequenceRecords).transform(new Function<SAMSequenceRecord, VcfFileSegment>() {
+ @Override
+ public VcfFileSegment apply(final SAMSequenceRecord samSequenceRecord) {
+ return VcfFileSegment.ofWholeSequence(samSequenceRecord, vcf);
+ }
+ });
+ }
+
+ private static List<SAMSequenceRecord> readSequences(final File vcf) {
+ final VCFFileReader reader = new VCFFileReader(vcf);
+ final VCFHeader header = reader.getFileHeader();
+ final SAMSequenceDictionary dict = header.getSequenceDictionary();
+ reader.close();
+ return dict.getSequences();
+ }
+ }
+
+ /**
+ * Decorator to apply to other {@link VcfFileSegmentGenerator} to enforce that no segment is larger than the specified width.
+ *
+ * @author mccowan
+ */
+ static class WidthLimitingDecorator extends VcfFileSegmentGenerator {
+ final VcfFileSegmentGenerator underlyingStrategy;
+ final long width;
+
+ public static WidthLimitingDecorator wrapping(final VcfFileSegmentGenerator basis, final long maximumWidth) {
+ return new WidthLimitingDecorator(basis, maximumWidth);
+ }
+
+ private WidthLimitingDecorator(final VcfFileSegmentGenerator underlyingStrategy, final long maximumWidth) {
+ this.underlyingStrategy = underlyingStrategy;
+ this.width = maximumWidth - 1;
+ }
+
+ /**
+ * The thing that does the work; accepts a {@link VcfFileSegment} (produced by the parent {@link VcfFileSegmentGenerator}) and breaks
+ * it down into subsegments.
+ */
+ private class VcfFileSegmentSubdivider implements Iterable<VcfFileSegment> {
+ final VcfFileSegment basis;
+
+ private VcfFileSegmentSubdivider(final VcfFileSegment basis) {
+ this.basis = basis;
+ }
+
+ @Override
+ public Iterator<VcfFileSegment> iterator() {
+ return new Iterator<VcfFileSegment>() {
+ int nextStart = basis.start();
+
+ @Override
+ public boolean hasNext() {
+ return nextStart <= basis.stop();
+ }
+
+ @Override
+ public VcfFileSegment next() {
+ final int start = nextStart;
+ final VcfFileSegment ret = new VcfFileSegment() {
+ @Override
+ public int start() {
+ return start;
+ }
+
+ @Override
+ public int stop() {
+ return Ints.checkedCast(Math.min(start + width, basis.stop()));
+ }
+
+ @Override
+ public String contig() {
+ return basis.contig();
+ }
+
+ @Override
+ public File vcf() {
+ return basis.vcf();
+ }
+ };
+ nextStart += width + 1;
+ return ret;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+ }
+
+ @Override
+ public Iterable<VcfFileSegment> forVcf(final File vcf) {
+ // Turn the VCF into segments, and then apply our
+ return FluentIterable.from(underlyingStrategy.forVcf(vcf)).transformAndConcat(new Function<VcfFileSegment, Iterable<? extends VcfFileSegment>>() {
+ @Override
+ public Iterable<? extends VcfFileSegment> apply(final VcfFileSegment vcfFileSegment) {
+ return new VcfFileSegmentSubdivider(vcfFileSegment);
+ }
+ });
+ }
+ }
+
+}
diff --git a/src/java/picard/vcf/processor/util/PredicateFilterDecoratingClosableIterator.java b/src/java/picard/vcf/processor/util/PredicateFilterDecoratingClosableIterator.java
new file mode 100644
index 0000000..7a8e6fb
--- /dev/null
+++ b/src/java/picard/vcf/processor/util/PredicateFilterDecoratingClosableIterator.java
@@ -0,0 +1,80 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf.processor.util;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterators;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.variant.variantcontext.VariantContext;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * Performs on-the-fly filtering of the provided {@link VariantContext} {@link java.util.Iterator} such that only variants that satisfy
+ * all predicates are emitted.
+ *
+ * This class only exists because {@link Iterators#filter(Iterator, Predicate)} won't produce a {@link CloseableIterator}, which is
+ * necessary.
+ *
+ * @author mccowan
+ */
+public class PredicateFilterDecoratingClosableIterator<T> implements CloseableIterator<T> {
+ final CloseableIterator<T> underlyingIterator;
+ final Iterator<T> filteredIterator;
+
+ public PredicateFilterDecoratingClosableIterator(final CloseableIterator<T> underlyingIterator, final Collection<Predicate<T>> predicates) {
+ Preconditions.checkArgument(!predicates.isEmpty(), "predicates must not be empty");
+ Iterator<T> nestedPredicateIterator = underlyingIterator;
+ for (final Predicate<T> predicate : predicates) {
+ nestedPredicateIterator = Iterators.filter(nestedPredicateIterator, predicate);
+ }
+ filteredIterator = nestedPredicateIterator;
+
+ this.underlyingIterator = underlyingIterator;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return filteredIterator.hasNext();
+ }
+
+ @Override
+ public T next() {
+ return filteredIterator.next();
+ }
+
+ @Override
+ public void close() {
+ underlyingIterator.close();
+ }
+
+ @Override
+ public void remove() {
+ underlyingIterator.remove();
+ }
+}
diff --git a/src/scripts/build_intel_deflater.sh b/src/scripts/build_intel_deflater.sh
deleted file mode 100644
index 49d018c..0000000
--- a/src/scripts/build_intel_deflater.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#! /bin/bash
-#
-# The MIT License
-#
-# Copyright (c) 2013 The Broad Institute
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-
-# Build libIntelDeflater.so, the JNI library that wraps Intel IPP compression library.
-# Note that this is not built as part of standard release process. Rather, it is built manually and then
-# copied to Picard-public/lib/jni.
-
-# Assumes OpenJDK exists at $OPENJDK. I used openjdk-7-fcs-src-b147-27_jun_2011.zip
-# Assumes that Picard-public java sources have been compiled
-# Assumes IPP8_CODE_SAMPLES_DIR points to Intel IPP sample code built with -fPIC
-set -e
-
-if [ "$OPENJDK" = "" ]
-then echo "ERROR: OPENJDK environment variable not defined." >&2
- exit 1
-fi
-
-if [ "$IPP8_CODE_SAMPLES_DIR" = "" ]
-then echo "ERROR: IPP8_CODE_SAMPLES_DIR environment variable not defined." >&2
- exit 1
-fi
-
-rootdir=$(dirname $(dirname $(dirname $0)))
-
-
-builddir=$rootdir/lib_build
-rm -rf $builddir
-mkdir -p $builddir
-
-# Create JNI C header file
-javah -jni -classpath $rootdir/classes -d $builddir net.sf.samtools.util.zip.IntelDeflater
-
-# Compile source and create library.
-gcc -I$builddir -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -I$OPENJDK/jdk/src/share/native/common/ \
--I$OPENJDK/jdk/src/solaris/native/common/ -c -O3 -fPIC IntelDeflater.c
-gcc -shared -o $builddir/libIntelDeflater.so IntelDeflater.o -L${IPP8_CODE_SAMPLES_DIR}/__cmake/data-compression.intel64.make.static.release/__lib/release \
--lzlib -lstdc++ -Wl,-Bstatic -lbfp754 -ldecimal -liomp5 -liompstubs5 -lipgo -lippac -lippcc -lippch -lippcv \
--lippdc -lippdi -lippgen -lippi -lippj -lippm -lippr -lippsc -lippvc -lippvm -lirng -lmatmul -lpdbx \
--lpdbxinst -lsvml -lipps -limf -lirc -lirc_s -lippcore -Wl,-Bdynamic
-
-
-
diff --git a/src/scripts/explain_sam_flags.py b/src/scripts/explain_sam_flags.py
deleted file mode 100755
index cb6ad02..0000000
--- a/src/scripts/explain_sam_flags.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-
-# The MIT License
-#
-# Copyright (c) $today.year The Broad Institute
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-#
-# $Header$
-
-"""usage %prog decimal-flag [decimal-flag...]
-
-Explain each flag on the command line in plain English
-"""
-
-from __future__ import division
-import sys
-
-lstFlags = [
- ("read paired", 0x1),
- ("read mapped in proper pair", 0x2),
- ("read unmapped", 0x4),
- ("mate unmapped", 0x8),
- ("read reverse strand", 0x10),
- ("mate reverse strand", 0x20),
- ("first in pair", 0x40),
- ("second in pair", 0x80),
- ("not primary alignment", 0x100),
- ("read fails platform/vendor quality checks", 0x200),
- ("read is PCR or optical duplicate", 0x400),
- ("supplementary alignment", 0x800)
- ]
-
-
-def explain_sam_flags(iFlags):
- print iFlags, ":"
- for strFlagName, iMask in lstFlags:
- if iFlags & iMask:
- print "\t" + strFlagName
-
-def main(argv=None):
- if argv is None:
- argv = sys.argv
-
- for strArg in argv[1:]:
- explain_sam_flags(int(strArg))
-
-if __name__ == "__main__":
- sys.exit(main())
-
diff --git a/src/scripts/net/sf/picard/analysis/gcBias.R b/src/scripts/net/sf/picard/analysis/gcBias.R
deleted file mode 100644
index 1563cdf..0000000
--- a/src/scripts/net/sf/picard/analysis/gcBias.R
+++ /dev/null
@@ -1,77 +0,0 @@
-# Script to generate a chart to display GC bias based upon read starts observed
-# in windows along the genome.
-#
-# @author Tim Fennell
-
-# Parse the arguments
-args <- commandArgs(trailing=T)
-metricsFile <- args[1]
-outputFile <- args[2]
-datasetName <- args[3]
-subtitle <- args[4]
-windowSize <- args[5]
-
-# Figure out where the metrics and the histogram are in the file and parse them out
-startFinder <- scan(metricsFile, what="character", sep="\n", quiet=TRUE, blank.lines.skip=FALSE)
-
-firstBlankLine=0
-
-for (i in 1:length(startFinder)) {
- if (startFinder[i] == "") {
- if (firstBlankLine==0) {
- firstBlankLine=i+1
- } else {
- secondBlankLine=i+1
- break
- }
- }
-}
-
-metrics <- read.table(metricsFile, header=T, sep="\t", skip=firstBlankLine)
-pdf(outputFile)
-
-# Some constants that are used below
-Y_AXIS_LIM = 2;
-MAX_QUALITY_SCORE = 40;
-COLORS = c("royalblue", "#FFAAAA", "palegreen3");
-
-# Adjust to give more margin on the right hand side
-par(mar = c(5, 4, 4, 4));
-
-# Do the main plot of the normalized coverage by GC
-plot(type="p", x=metrics$GC, y=metrics$NORMALIZED_COVERAGE,
- xlab=paste(c("GC% of", windowSize, "base windows"), sep=" ", collapse=" "),
- ylab="Fraction of normalized coverage",
- xlim=c(0,100),
- ylim=c(0, Y_AXIS_LIM),
- col=COLORS[1],
- main=paste(datasetName, "GC Bias Plot", "\n", subtitle)
- );
-
-# Add lines at the 50% GC and coverage=1
-abline(h=1, v=50, col="lightgrey");
-
-# Add error bars
-arrows(metrics$GC,
- metrics$NORMALIZED_COVERAGE - metrics$ERROR_BAR_WIDTH,
- metrics$GC,
- metrics$NORMALIZED_COVERAGE + metrics$ERROR_BAR_WIDTH,
- code = 3, angle = 90, length = 0.05, col="grey");
-
-# Plot count of windows as a separate series near the bottom
-window_ratio = 0.5 / max(metrics$WINDOWS);
-scaled_windows = metrics$WINDOWS * window_ratio;
-lines(metrics$GC, scaled_windows, type="h", col=COLORS[2], lwd=3);
-
-# Plot the quality series
-lines(metrics$GC, metrics$MEAN_BASE_QUALITY * Y_AXIS_LIM / MAX_QUALITY_SCORE, type="l", col=COLORS[3]);
-axis(4,
- at=c(0, Y_AXIS_LIM/4, Y_AXIS_LIM/4*2, Y_AXIS_LIM/4*3, Y_AXIS_LIM),
- labels=c(0, MAX_QUALITY_SCORE/4, MAX_QUALITY_SCORE/4*2, MAX_QUALITY_SCORE/4*3, MAX_QUALITY_SCORE)
- );
-mtext("Mean base quality", side=4, line=2.5);
-
-# And finally add a legend
-legend("topleft", pch=c(1,15, 45), legend=c("Normalized Coverage", "Windows at GC%", "Base Quality at GC%"), col=COLORS)
-
-dev.off();
\ No newline at end of file
diff --git a/src/scripts/picard/analysis/baseDistributionByCycle.R b/src/scripts/picard/analysis/baseDistributionByCycle.R
new file mode 100644
index 0000000..e443068
--- /dev/null
+++ b/src/scripts/picard/analysis/baseDistributionByCycle.R
@@ -0,0 +1,52 @@
+# Script to generate a chart of the base distribution by cycle
+# @author Nils Homer
+
+# Parse the arguments
+args <- commandArgs(trailing=T);
+metricsFile <- args[1];
+outputFile <- args[2];
+bamFile <- args[3];
+subtitle <- ifelse(length(args) < 4, "", args[4]);
+
+
+# Figure out where the metrics and the histogram are in the file and parse them out
+startFinder <- scan(metricsFile, what="character", sep="\n", quiet=TRUE, blank.lines.skip=FALSE);
+
+firstBlankLine=0;
+
+for (i in 1:length(startFinder)) {
+ if (startFinder[i] == "") {
+ if (firstBlankLine==0) {
+ firstBlankLine=i+1;
+ } else {
+ secondBlankLine=i+1;
+ break;
+ }
+ }
+}
+
+metrics <- read.table(metricsFile, header=T, sep="\t", skip=firstBlankLine);
+
+# Then plot the histogram as a PDF
+pdf(outputFile);
+
+plot(x=c(1, 20+nrow(metrics)),
+ y=c(0, max(metrics[,3:7])),
+ main=paste("Base Distribution by Cycle\nin file ",bamFile," ",ifelse(subtitle == "","",paste("(",subtitle,")",sep="")),sep=""),
+ xlab="Cycle",
+ ylab="Base Percentage",
+ type="n");
+
+colors = c("red", "orange", "blue", "purple", "black");
+
+for (i in 1:5) {
+ lines(x=1:nrow(metrics),
+ y=metrics[,2+i],
+ col=colors[i],
+ type="l",
+ lty=1);
+}
+
+legend("bottomright", lwd=1, legend=c("PCT_A", "PCT_C", "PCT_G", "PCT_T", "PCT_N"), col=colors);
+
+dev.off();
diff --git a/src/scripts/picard/analysis/gcBias.R b/src/scripts/picard/analysis/gcBias.R
new file mode 100644
index 0000000..503e737
--- /dev/null
+++ b/src/scripts/picard/analysis/gcBias.R
@@ -0,0 +1,109 @@
+# Script to generate a chart to display GC bias based upon read starts observed
+# in windows along the genome.
+#
+# @author Tim Fennell
+# @author Kylee Bergin
+# edited to make multiple charts for multilevel collection
+
+# Parse the arguments
+args <- commandArgs(trailing=T)
+metricsFile <- args[1]
+summaryMetricsFile <- args[2]
+outputFile <- args[3]
+windowSize <- args[4]
+
+# Figure out where the metrics and the histogram are in the file and parse them out
+startFinder <- scan(metricsFile, what="character", sep="\n", quiet=TRUE, blank.lines.skip=FALSE)
+startFinder2 <- scan(summaryMetricsFile, what="character", sep="\n", quiet=TRUE, blank.lines.skip=FALSE)
+firstBlankLine=0
+firstBlankLine2=0
+secondBlankLine2=0
+
+for (i in 1:length(startFinder)) {
+ if (startFinder[i] == "") {
+ if (firstBlankLine==0) {
+ firstBlankLine=i+1
+ } else {
+ secondBlankLine=i+1
+ break
+ }
+ }
+}
+
+for (j in 1:length(startFinder2)) {
+ if (startFinder2[j] == "") {
+ if (firstBlankLine==0) {
+ firstBlankLine2=j+1
+ } else {
+ secondBlankLine2=j+1
+ break
+ }
+ }
+}
+pdf(outputFile, onefile=TRUE);
+
+summaryMetrics <- read.table(summaryMetricsFile, header=T, sep="\t", skip=firstBlankLine2);
+num.plots <- nrow(summaryMetrics);
+my.plots <- vector(num.plots, mode='list');
+
+for (k in 1:(num.plots)){
+ if (k==1){
+ metrics <- read.table(metricsFile, header=T, sep="\t", skip=(firstBlankLine), nrows=101);
+ heads = colnames(metrics);
+ }else{
+ metrics <-read.table(metricsFile, header=F, sep="\t", skip=(firstBlankLine+((k-1)*101+1)), nrows=101);
+ colnames(metrics) <- heads;
+ }
+ heads = colnames(metrics);
+ # Some constants that are used below
+ Y_AXIS_LIM = 2;
+ MAX_QUALITY_SCORE = 40;
+ COLORS = c("royalblue", "#FFAAAA", "palegreen3");
+
+ # Adjust to give more margin on the right hand side
+ par(mar = c(5, 4, 4, 4));
+
+ accLevel = summaryMetrics[k,"ACCUMULATION_LEVEL"];
+ if(accLevel=="All Reads"){datasetName <- "All Reads";}
+ else{
+ if(accLevel == "Sample"){datasetName <- summaryMetrics[k, "SAMPLE"]}
+ if(accLevel == "Library"){datasetName <- summaryMetrics[k, "LIBRARY"]}
+ else(datasetName <- summaryMetrics[k, "READ_GROUP"])}
+ subtitle = cat("Total clusters: ",summaryMetrics[k,"TOTAL_CLUSTERS"],", Aligned reads: ",summaryMetrics[k, "ALIGNED_READS"]);
+ # Do the main plot of the normalized coverage by GC
+ plot(type="p", x=metrics$GC, y=metrics$NORMALIZED_COVERAGE,
+ xlab=paste(c("GC% of", windowSize, "base windows"), sep=" ", collapse=" "),
+ ylab="Fraction of normalized coverage",
+ xlim=c(0,100),
+ ylim=c(0, Y_AXIS_LIM),
+ col=COLORS[1],
+ main=paste(accLevel, "Level:", datasetName, "GC Bias Plot", "\n", subtitle)
+ );
+
+ # Add lines at the 50% GC and coverage=1
+ abline(h=1, v=50, col="lightgrey");
+
+ # Plot count of windows as a separate series near the bottom
+ window_ratio = 0.5 / max(metrics$WINDOWS);
+ scaled_windows = metrics$WINDOWS * window_ratio;
+ lines(metrics$GC, scaled_windows, type="h", col=COLORS[2], lwd=3);
+
+ # Plot the quality series
+ lines(metrics$GC, metrics$MEAN_BASE_QUALITY * Y_AXIS_LIM / MAX_QUALITY_SCORE, type="l", col=COLORS[3]);
+ axis(4,
+ at=c(0, Y_AXIS_LIM/4, Y_AXIS_LIM/4*2, Y_AXIS_LIM/4*3, Y_AXIS_LIM),
+ labels=c(0, MAX_QUALITY_SCORE/4, MAX_QUALITY_SCORE/4*2, MAX_QUALITY_SCORE/4*3, MAX_QUALITY_SCORE)
+ );
+ mtext("Mean base quality", side=4, line=2.5);
+
+ # And finally add a legend
+ legend("topleft", pch=c(1,15, 45), legend=c("Normalized Coverage", "Windows at GC%", "Base Quality at GC%"), col=COLORS)
+ p=recordPlot()
+ my.plots[[k]] <- p
+}
+
+for (my.plot in my.plots){
+ replayPlot(my.plot)
+}
+
+graphics.off();
\ No newline at end of file
diff --git a/src/scripts/net/sf/picard/analysis/insertSizeHistogram.R b/src/scripts/picard/analysis/insertSizeHistogram.R
similarity index 100%
rename from src/scripts/net/sf/picard/analysis/insertSizeHistogram.R
rename to src/scripts/picard/analysis/insertSizeHistogram.R
diff --git a/src/scripts/net/sf/picard/analysis/meanQualityByCycle.R b/src/scripts/picard/analysis/meanQualityByCycle.R
similarity index 100%
rename from src/scripts/net/sf/picard/analysis/meanQualityByCycle.R
rename to src/scripts/picard/analysis/meanQualityByCycle.R
diff --git a/src/scripts/net/sf/picard/analysis/qualityScoreDistribution.R b/src/scripts/picard/analysis/qualityScoreDistribution.R
similarity index 100%
rename from src/scripts/net/sf/picard/analysis/qualityScoreDistribution.R
rename to src/scripts/picard/analysis/qualityScoreDistribution.R
diff --git a/src/scripts/net/sf/picard/analysis/rnaSeqCoverage.R b/src/scripts/picard/analysis/rnaSeqCoverage.R
similarity index 100%
rename from src/scripts/net/sf/picard/analysis/rnaSeqCoverage.R
rename to src/scripts/picard/analysis/rnaSeqCoverage.R
diff --git a/src/scripts/picard/analysis/rrbsQc.R b/src/scripts/picard/analysis/rrbsQc.R
new file mode 100644
index 0000000..c7d7abe
--- /dev/null
+++ b/src/scripts/picard/analysis/rrbsQc.R
@@ -0,0 +1,109 @@
+##
+## The MIT License
+##
+## Copyright (c) 2013 The Broad Institute
+##
+## Permission is hereby granted, free of charge, to any person obtaining a copy
+## of this software and associated documentation files (the "Software"), to deal
+## in the Software without restriction, including without limitation the rights
+## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+## copies of the Software, and to permit persons to whom the Software is
+## furnished to do so, subject to the following conditions:
+##
+## The above copyright notice and this permission notice shall be included in
+## all copies or substantial portions of the Software.
+##
+## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+## THE SOFTWARE.
+##
+
+args = commandArgs(trailingOnly=TRUE)
+opt = list(details.fn=args[1], summary.fn=args[2], output.fn=args[3])
+
+read_metrics_file = function(metrics.fn) {
+ contents = read.delim(metrics.fn, comment.char="#", stringsAsFactors=FALSE)
+ return(contents)
+}
+
+equals_or_is_na = function(x1, x2) {
+ if (is.na(x1)) {
+ return(is.na(x2))
+ } else {
+ return(x1 == x2)
+ }
+}
+
+details = read_metrics_file(opt$details.fn)
+summary = read_metrics_file(opt$summary.fn)
+
+pdf(opt$output.fn)
+par(mfrow=c(2,2), oma=c(0,0,2,0))
+
+for (i in seq_len(nrow(summary))) {
+ cur_summary = summary[i, ]
+ cur_sample = cur_summary[1, "SAMPLE"]
+ cur_library = cur_summary[1, "LIBRARY"]
+ cur_read_group = cur_summary[1, "READ_GROUP"]
+ cur_details = details[which((equals_or_is_na(cur_library, details[, "LIBRARY"]) &
+ (equals_or_is_na(cur_sample, details[, "SAMPLE"])) &
+ (equals_or_is_na(cur_read_group, details[, "READ_GROUP"])))), ]
+
+
+ ## Plot conversion rates
+ cpg.converted = sum(cur_details$CONVERTED_SITES)
+ cpg.seen = sum(cur_details$TOTAL_SITES)
+ cpg.conversion = cpg.converted / cpg.seen
+ total.conversion = (cpg.converted + cur_summary$NON_CPG_CONVERTED_BASES) / (cpg.seen + cur_summary$NON_CPG_BASES)
+
+ barplot(c("non-CpG"=cur_summary$PCT_NON_CPG_BASES_CONVERTED, "Combined"=total.conversion, "CpG"=cpg.conversion),
+ ylim=c(0.95, 1), ylab="% Conversion", xlab="Distribution", main="Bisulfite Conversion Rate",
+ col="blue", xpd=FALSE)
+ abline(h=0.995, col="grey")
+
+ ## Plot histogram of CpG counts by conversion rate
+ hist(cur_details$PCT_CONVERTED, 10, xlab="Conversion Rate Of CpGs", ylab="# CpGs",
+ main="CpG Conversion Rate Distribution", col="blue")
+
+ ## Plot pie chart showing distribution of CpG coverage
+ coverage_breaks = c(0, 1, 5, 10, 25, 50, 100, Inf)
+ coverage_cut = cut(cur_details$TOTAL_SITES, coverage_breaks)
+ cpg_coverage = split(cur_details$TOTAL_SITES, coverage_cut)
+ coverages = sapply(cpg_coverage, length)[2:7]
+ names(coverages) = paste(">=", c(1, 5, 10, 25, 50, 100), sep="")
+ ## If we have 0s all across the pie chart will be effectively meaningless but put in a 100% >= 0 field instead
+ ## to avoid an error on pie(). Normally it'd just be a pain to see these, but ...
+ if (all(coverages == 0)) {
+ coverages = c("No Coverage"=1)
+ }
+ color_ramp = colorRampPalette(c("white", "#538ED5", "blue"), bias=1, space="Lab")
+ colors = color_ramp(length(coverages))[2:length(coverages)]
+ pie(coverages, main="Distribution Of CpGs By Coverage", col=colors, clockwise=TRUE)
+
+ discards = log10(c("Mismatches"=cur_summary$READS_IGNORED_MISMATCHES, "Size"=cur_summary$READS_IGNORED_SHORT))
+ ## Protect against -Inf in the case where we had 0 discards
+ discards = ifelse(is.finite(discards), discards, 0)
+ barplot(discards, ylab="Number Discarded (log10)", xlab="Reason",
+ main="Reads Discarded", col="blue", ylim=c(0, ceiling(max(discards))))
+
+ header_txt = character()
+ if (!is.na(cur_sample) && cur_sample != "") {
+ header_txt = paste(header_txt, " SAMPLE=", cur_sample, sep="")
+ }
+ if (!is.na(cur_library) && cur_library != "") {
+ header_txt = paste(header_txt, " LIBRARY=", cur_library, sep="")
+ }
+ if (!is.na(cur_read_group) && cur_read_group != "") {
+ header_txt = paste(header_txt, " READ GROUP=", cur_read_group, sep="")
+ }
+ if (length(header_txt) > 0) {
+ mtext(header_txt, outer=TRUE, line=1)
+ }
+}
+
+dev.off()
+
diff --git a/src/scripts/picard/docker_helper.sh b/src/scripts/picard/docker_helper.sh
new file mode 100755
index 0000000..405c3f1
--- /dev/null
+++ b/src/scripts/picard/docker_helper.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+# Example Usage: ./docker_helper.sh -j "-XX:GCTimeLimit=50 -XX:GCHeapFreeLimit=10 -Xmx4000m" MarkDuplicates INPUT=fake.bam ...
+usage() {
+ cat << EOF
+Usage: $0 [-j <JVM arguments>] tool_name tool_arguments
+
+Run Picard with JVM args and program args if present. Assumes picard.jar lives in the same directory.
+JVM arguments should be a quoted, space separated list.
+
+Example Usage:
+./docker_helper.sh -j "-XX:GCTimeLimit=50 -XX:GCHeapFreeLimit=10 -Xmx4000m" MarkDuplicates INPUT=fake.bam ...
+
+EOF
+ exit 1
+}
+while getopts "j:h" OPTION; do
+ case $OPTION in
+ j) JVM_ARGS=$OPTARG;;
+ h) usage; exit 0;;
+ [?]) usage; exit 1;;
+ esac
+done
+shift $(expr $OPTIND - 1)
+TOOL_WITH_ARGS=$@
+
+java ${JVM_ARGS} -jar picard.jar ${TOOL_WITH_ARGS}
\ No newline at end of file
diff --git a/src/scripts/release_picard.sh b/src/scripts/release_picard.sh
index 1689299..d237931 100755
--- a/src/scripts/release_picard.sh
+++ b/src/scripts/release_picard.sh
@@ -22,40 +22,138 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
PROGNAME=`basename $0`
-USERNAME=alecw
function usage () {
echo "USAGE: $PROGNAME <release-id>" >&2
- echo "Branches Sourceforge Picard source, checks out and builds sources, uploads build results to Sourceforge.">&2
+ echo "Tags Github Picard source, checks out and builds sources, uploads build results to Sourceforge.">&2
echo "-t <tmpdir> Build in <tmpdir>. Default: $TMPDIR." >&2
- echo "-u <sourceforge-user> Sourceforge username. Default: $USERNAME." >&2
}
-function branch_exists() {
- if svn info $1 2>&1 | egrep -q '(Not a valid URL)|(non-existent in revision)'
+function create_release () {
+ local token="$1";
+ local owner="$2";
+ local repo="$3";
+ local tag_name="$4";
+ local target_commitish="$5";
+ local name="$6";
+ local body="$7";
+ local draft="$8";
+ local prerelease="$9";
+
+ local payload="\"tag_name\":\"$tag_name\"";
+ payload="$payload,\"target_commitish\":\"$target_commitish\"";
+ payload="$payload,\"name\":\"$name\"";
+ payload="$payload,\"body\":\"$body\"";
+ payload="$payload,\"draft\":$draft";
+ payload="$payload,\"prerelease\":$prerelease";
+ payload="{$payload}";
+
+ RELEASE_RESPONSE=$(curl --fail -s -S -X POST \
+ https://api.github.com/repos/$owner/$repo/releases \
+ -A "create-release" \
+ -H "Accept: application/vnd.github.v3+json" \
+ -H "Content-Type: application/json" \
+ -H "Authorization: token $token" \
+ -d "$payload");
+
+ # NB: we must set the RELEASE_GITHUB_ID as the ID in the returned json response
+ export RELEASE_GITHUB_ID=$(echo "$RELEASE_RESPONSE" | sed -e 's_",.*__g' -e 's_.*/__g')
+}
+
+function upload_asset () {
+ local token="$1";
+ local owner="$2";
+ local repo="$3";
+ local name="$4";
+ local content_type="$5";
+ local file="$6";
+ local id="$7";
+
+ curl --fail -s -S -X POST \
+ https://uploads.github.com/repos/$owner/$repo/releases/$id/assets?name=$name \
+ -A "upload-asset" \
+ -H "Accept: application/vnd.github.v3+json" \
+ -H "Content-Type: $content_type" \
+ -H "Authorization: token $token" \
+ --progress-bar \
+ --data-binary @"$file";
+}
+
+function tag_exists() {
+ git tag | grep -q "$1$"
+ if test $? = 0
+ then return 0
+ else return 1
+ fi
+}
+
+function remote_does_not_exist() {
+ git ls-remote $1 2>/dev/null 1>/dev/null
+ if test $? = 0
then return 1
else return 0
fi
}
+function remote_tag_does_not_exist() {
+ git ls-remote --tags $2 | grep -q "$1$";
+ if test $? = 0
+ then return 0
+ else return 1
+ fi
+}
+
+
+# This method called once for picard and once for htsjdk
+function tag_it() {
+
+ # tag must not exist
+ if tag_exists $RELEASE_ID
+ then echo "ERROR: Tag $RELEASE_ID locally already exists"
+ return 1
+ fi
+
+ # remote must exist
+ if remote_does_not_exist $REMOTE
+ then echo "ERROR: Remote $REMOTE does not exist"
+ return 1
+ fi
+
+ # tag at remote must not exist
+ if remote_tag_does_not_exist $RELEASE_ID $REMOTE
+ then echo "ERROR: Tag $RELEASE_ID at remote $REMOTE already exists"
+ return 1
+ fi
+
+ # tag the branch locally then push to remote
+ echo Tagging master as $RELEASE_ID and pushing the tag to $REMOTE
+ # NB: we could use annotated tags in the future to store release notes, etc.
+ git tag $RELEASE_ID
+ git push $REMOTE $RELEASE_ID # TODO: should we check this return value in case someone made a tag since we last checked?
+}
+
set -e
-while getopts "ht:u:" options; do
+while getopts "ht:" options; do
case $options in
- u ) USERNAME=$OPTARG;;
t ) TMPDIR=$OPTARG;;
h ) usage;;
\? ) usage
exit 1;;
* ) usage
exit 1;;
-
esac
done
shift $(($OPTIND - 1))
+if [ -z $GITHUB_USER_TOKEN ]
+then echo "ERROR: environment variable GITHUB_USER_TOKEN must be set." >&2
+ usage
+ exit 1
+fi
+
if (( $# != 1 ))
- then echo "ERROR: Incorrect number of arguments." >&2
+then echo "ERROR: Incorrect number of arguments." >&2
usage
exit 1
fi
@@ -71,56 +169,54 @@ fi
java_version=`java -version 2>&1 | fgrep -i version`
(echo $java_version | fgrep -q 1.6. ) || { echo "java -version: $java_version is not 1.6"; exit 1; }
-SVNROOT=svn+ssh://$USERNAME@svn.code.sf.net/p/picard/code
+PICARDGITROOT=git at github.com:broadinstitute/picard.git
+REMOTE=origin
+GHPAGES_BRANCH="gh-pages"
RELEASE_ID=$1
# Since releases are lexically sorted, need to filter in order to have 1.1xx be at the bottom.
-PREV_RELEASE_ID=`svn --username $USERNAME ls $SVNROOT/tags | egrep '[.]\d\d\d' | tail -1 | sed 's/\/$//'`
-
-if branch_exists $SVNROOT/branches/$RELEASE_ID
-then echo "ERROR: $SVNROOT/branches/$RELEASE_ID already exists.">&2
- exit 1
-fi
+PICARD_PREV_RELEASE_ID=`git ls-remote --tags | grep -v "{}$" | awk '{print $2}' | sed -e "s_.*/__g" | egrep '[.]\d\d\d' | tail -1`
-if branch_exists $SVNROOT/tags/$RELEASE_ID
-then echo "ERROR: $SVNROOT/tags/$RELEASE_ID already exists.">&2
- exit 1
-fi
-
-if [[ -e $TMPDIR/Picard-public ]]
-then echo "$TMPDIR/Picard-public already exists. Please remove or specify a different TMPDIR." >&2
+if [[ -e $TMPDIR/picard ]]
+then echo "$TMPDIR/picard already exists. Please remove or specify a different TMPDIR." >&2
exit 1
fi
-
-# NB: do not copy the trunk to branches, as we already are copying it to tags.
-#svn --username $USERNAME copy -m "Release $RELEASE_ID" $SVNROOT/trunk $SVNROOT/branches/$RELEASE_ID
-svn --username $USERNAME copy -m "Release $RELEASE_ID" $SVNROOT/trunk $SVNROOT/tags/$RELEASE_ID
-
+echo "Using TMPDIR: $TMPDIR";
cd $TMPDIR
-mkdir Picard-public
-cd Picard-public
-svn --username $USERNAME co $SVNROOT/tags/$RELEASE_ID .
+# clone
+git clone $PICARDGITROOT picard
+cd picard
+ant clone-htsjdk
+ant clean # clean shouldn't be necessary, but no harm
-ant -lib lib/ant test
+# Since releases are lexically sorted, need to filter in order to have 1.1xx be at the bottom.
+PICARD_PREV_RELEASE_ID=`git ls-remote --tags | grep -v "{}$" | awk '{print $2}' | sed -e "s_.*/__g" | egrep '[.]\d\d\d' | tail -1`
+HTSJDK_PREV_RELEASE_ID=$(cd htsjdk; git ls-remote --tags | grep -v "{}$" | awk '{print $2}' | sed -e "s_.*/__g" | egrep '[.]\d\d\d' | tail -1)
+
+# Tag in both repos
+for sandbox in . htsjdk
+do pushd $sandbox
+ tag_it || exit 1
+ popd
+done
-ant -lib lib/ant clean all javadoc
+ant -lib lib/ant test-htsjdk test
-REVISION=`svn --username $USERNAME info $SVNROOT/tags/$RELEASE_ID | egrep '^Last Changed Rev: ' | awk '{print $4}'`
-PREV_REVISION=`svn --username $USERNAME info $SVNROOT/tags/$PREV_RELEASE_ID | egrep '^Last Changed Rev: ' | awk '{print $4}'`
+ant -lib lib/ant clean all javadoc
mkdir -p deploy/picard-tools/$RELEASE_ID
-svn --username $USERNAME log -r $PREV_REVISION:$REVISION -v > deploy/picard-tools/$RELEASE_ID/README.txt
+git log --name-status ${PICARD_PREV_RELEASE_ID}..${RELEASE_ID} > deploy/picard-tools/$RELEASE_ID/README.txt
+
+(cd htsjdk; git log --name-status ${HTSJDK_PREV_RELEASE_ID}..${RELEASE_ID}) >> deploy/picard-tools/$RELEASE_ID/README.txt
echo 'Edit release notes and exit editor when finished.'
$EDITOR deploy/picard-tools/$RELEASE_ID/README.txt
cp dist/picard-tools-$RELEASE_ID.zip deploy/picard-tools/$RELEASE_ID/
-mkdir -p deploy/sam-jdk/$RELEASE_ID
-cp dist/sam-$RELEASE_ID.jar deploy/sam-jdk/$RELEASE_ID/
# Make all files to be pushed to Sourceforge writable by group so that another Picard admin can overwrite them.
@@ -128,12 +224,66 @@ chmod -R gu+rw javadoc deploy dist
find javadoc deploy dist -type d -exec chmod g+s '{}' ';'
-scp -p -r javadoc $USERNAME,picard at web.sourceforge.net:htdocs
-
-cd deploy
-scp -p -r picard-tools/$RELEASE_ID $USERNAME,picard at web.sourceforge.net:/home/frs/project/p/pi/picard/picard-tools/
-scp -p -r sam-jdk/$RELEASE_ID $USERNAME,picard at web.sourceforge.net:/home/frs/project/p/pi/picard/sam-jdk/
-
-cd ../dist/html
-scp -p *.shtml program_usage/*.shtml $USERNAME,picard at web.sourceforge.net:htdocs/inc
+# Move the javadoc directory to a temporary location
+mv javadoc tmp_javadoc
+
+# Copy over javadoc for htsjdk since we are in the picard directory
+# NB: need to move javadoc to a tmp directory since the javadoc
+# directory in the gh-pages branch may already exist.
+cd htsjdk
+mkdir tmp_javadoc
+cp -r ../tmp_javadoc/htsjdk tmp_javadoc/.
+cd ../
+
+# Update the javadoc
+for sandbox in . htsjdk
+do pushd $sandbox
+ if [ "." == $sandbox ]; then
+ sandbox="picard";
+ fi
+ echo "Updating the javadoc for $sandbox"
+ # Checkout the gh-pages branch
+ git checkout -b $GHPAGES_BRANCH $REMOTE/$GHPAGES_BRANCH
+ # Copy over from the tmp javadoc directory
+ if [ ! -d javadoc ]; then
+ mkdir javadoc;
+ fi
+ rsync -avP --delete-after tmp_javadoc/* javadoc/.
+ # Remove the tmp directory as we no longer need it
+ rm -r tmp_javadoc
+ # Add the new javadoc files
+ find javadoc/$sandbox | xargs git add
+ # Commit!
+ git commit -m "Updating javadoc for release: $RELEASE_ID"
+ # NB: assumes the push will not fail
+ git push $REMOTE $GHPAGES_BRANCH
+ # Reset the repository to master
+ git checkout master
+ echo "Updated the javadoc for $sandbox"
+ popd
+done
+# Publish a release and upload assets
+echo "Creating a release on github for htsjdk and picard"
+create_release $GITHUB_USER_TOKEN samtools htsjdk $RELEASE_ID "" $RELEASE_ID "Release $RELEASE_ID" "false" "false";
+create_release $GITHUB_USER_TOKEN broadinstitute picard $RELEASE_ID "" $RELEASE_ID "Release $RELEASE_ID" "false" "false";
+echo "Github release id: $RELEASE_GITHUB_ID"
+echo "Updating the release zip and README.txt to github"
+upload_asset $GITHUB_USER_TOKEN broadinstitute picard picard-tools-$RELEASE_ID.zip "application/zip" deploy/picard-tools/$RELEASE_ID/picard-tools-$RELEASE_ID.zip $RELEASE_GITHUB_ID;
+upload_asset $GITHUB_USER_TOKEN broadinstitute picard README.txt "application/zip" deploy/picard-tools/$RELEASE_ID/README.txt $RELEASE_GITHUB_ID;
+
+# Update the website
+echo "Updating the website"
+# Assumes the gh-pages branch is already locally created
+git checkout $GHPAGES_BRANCH;
+cd dist/html
+cp inc/*.html program_usage/*.html picard-metric-definitions.html ../../_includes/.
+cd ../../
+find _includes | xargs git add
+git commit -m "Adding website files for $RELEASE_ID"
+git push $REMOTE $GHPAGES_BRANCH
+
+# Move back to master just in case
+git checkout master
+
+echo "Release was successful!"
diff --git a/src/tests/java/net/sf/picard/analysis/CollectAlignmentSummaryMetricsTest.java b/src/tests/java/net/sf/picard/analysis/CollectAlignmentSummaryMetricsTest.java
deleted file mode 100644
index 511b297..0000000
--- a/src/tests/java/net/sf/picard/analysis/CollectAlignmentSummaryMetricsTest.java
+++ /dev/null
@@ -1,507 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.analysis;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.text.NumberFormat;
-
-import net.sf.picard.analysis.CollectAlignmentSummaryMetrics;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.analysis.AlignmentSummaryMetrics;
-
-/**
- * Tests CollectAlignmentSummaryStatistics
- *
- * @author Doug Voet (dvoet at broadinstitute dot org)
- */
-public class CollectAlignmentSummaryMetricsTest {
- private static File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam");
-
- @Test
- public void test() throws IOException {
- File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test.sam");
- File reference = new File(TEST_DATA_DIR, "summary_alignment_stats_test.fasta");
- File outfile = File.createTempFile("alignmentMetrics", ".txt");
- outfile.deleteOnExit();
- int result = new CollectAlignmentSummaryMetrics().instanceMain(new String[] {
- "INPUT=" + input.getAbsolutePath(),
- "OUTPUT=" + outfile.getAbsolutePath(),
- "REFERENCE_SEQUENCE=" + reference.getAbsolutePath(),
- });
- Assert.assertEquals(result, 0);
-
- MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
- output.read(new FileReader(outfile));
-
- for (AlignmentSummaryMetrics metrics : output.getMetrics()) {
- Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 9);
- Assert.assertEquals(metrics.PF_READS, 7);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 3);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 59);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 19.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 303);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*58D/303D*/0.191419);
- Assert.assertEquals(metrics.BAD_CYCLES, 19);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 9);
- Assert.assertEquals(metrics.PF_READS, 9);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 7);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 239);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 707);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*19D/707D*/0.026874);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 18);
- Assert.assertEquals(metrics.PF_READS, 16);
- Assert.assertEquals(metrics.PF_NOISE_READS, 2);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 10);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 298);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 1010);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*77D/1010D*/0.076238);
- Assert.assertEquals(metrics.BAD_CYCLES, 22);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- }
-
- @Test
- public void testBisulfite() throws IOException {
- File input = new File(TEST_DATA_DIR, "summary_alignment_bisulfite_test.sam");
- File reference = new File(TEST_DATA_DIR, "summary_alignment_stats_test.fasta");
- File outfile = File.createTempFile("alignmentMetrics", ".txt");
- outfile.deleteOnExit();
- int result = new CollectAlignmentSummaryMetrics().instanceMain(new String[] {
- "INPUT=" + input.getAbsolutePath(),
- "OUTPUT=" + outfile.getAbsolutePath(),
- "REFERENCE_SEQUENCE=" + reference.getAbsolutePath(),
- "IS_BISULFITE_SEQUENCED=true"
- });
- Assert.assertEquals(result, 0);
-
- NumberFormat format = NumberFormat.getInstance();
- format.setMaximumFractionDigits(4);
-
- MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
- output.read(new FileReader(outfile));
-
- for (AlignmentSummaryMetrics metrics : output.getMetrics()) {
- Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- // 19 no-calls, one potentially methylated base, one mismatch at a potentially methylated base
- Assert.assertEquals(metrics.TOTAL_READS, 1);
- Assert.assertEquals(metrics.PF_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_BASES, 101);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 20.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 101);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 20D/100D);
- Assert.assertEquals(metrics.BAD_CYCLES, 20);
- Assert.assertEquals(format.format(metrics.PF_HQ_ERROR_RATE), format.format(20/(double)100));
- break;
- case SECOND_OF_PAIR:
- // Three no-calls, two potentially methylated bases
- Assert.assertEquals(metrics.TOTAL_READS, 1);
- Assert.assertEquals(metrics.PF_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_BASES, 101);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 101);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*3D/99D*/0.030303);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- Assert.assertEquals(format.format(metrics.PF_HQ_ERROR_RATE), format.format(3/(double)99));
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 2);
- Assert.assertEquals(metrics.PF_READS, 2);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_BASES, 202);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 11.5);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 202);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*23D/199D*/0.115578);
- Assert.assertEquals(metrics.BAD_CYCLES, 23);
- Assert.assertEquals(format.format(metrics.PF_HQ_ERROR_RATE), format.format(23/(double)199));
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- }
-
-
- @Test
- public void testNoReference() throws IOException {
- File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test.sam");
- File outfile = File.createTempFile("alignmentMetrics", ".txt");
- outfile.deleteOnExit();
- int result = new CollectAlignmentSummaryMetrics().instanceMain(new String[] {
- "INPUT=" + input.getAbsolutePath(),
- "OUTPUT=" + outfile.getAbsolutePath(),
- });
- Assert.assertEquals(result, 0);
-
- MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
- output.read(new FileReader(outfile));
-
- for (AlignmentSummaryMetrics metrics : output.getMetrics()) {
- Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 9);
- Assert.assertEquals(metrics.PF_READS, 7);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 19);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 9);
- Assert.assertEquals(metrics.PF_READS, 9);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 18);
- Assert.assertEquals(metrics.PF_READS, 16);
- Assert.assertEquals(metrics.PF_NOISE_READS, 2);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 22);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- }
-
- @Test
- public void testZeroLengthReads() throws IOException {
- File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test2.sam");
- File outfile = File.createTempFile("alignmentMetrics", ".txt");
- outfile.deleteOnExit();
- int result = new CollectAlignmentSummaryMetrics().instanceMain(new String[] {
- "INPUT=" + input.getAbsolutePath(),
- "OUTPUT=" + outfile.getAbsolutePath(),
- });
- Assert.assertEquals(result, 0);
-
- MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
- output.read(new FileReader(outfile));
- for (AlignmentSummaryMetrics metrics : output.getMetrics()) {
- // test that it doesn't blow up
- }
- }
-
- @Test
- public void testMultipleLevelsOfMetrics() throws IOException {
- File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test_multiple.sam");
- File outfile = File.createTempFile("alignmentMetrics", ".txt");
- outfile.deleteOnExit();
- int result = new CollectAlignmentSummaryMetrics().instanceMain(new String[] {
- "INPUT=" + input.getAbsolutePath(),
- "OUTPUT=" + outfile.getAbsolutePath(),
- "METRIC_ACCUMULATION_LEVEL=ALL_READS",
- "METRIC_ACCUMULATION_LEVEL=SAMPLE",
- "METRIC_ACCUMULATION_LEVEL=LIBRARY",
- "METRIC_ACCUMULATION_LEVEL=READ_GROUP",
- });
- Assert.assertEquals(result, 0);
-
- MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
- output.read(new FileReader(outfile));
-
- for (AlignmentSummaryMetrics metrics : output.getMetrics()) {
- Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
- if (metrics.SAMPLE == null) {
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 9);
- Assert.assertEquals(metrics.PF_READS, 7);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 19);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 9);
- Assert.assertEquals(metrics.PF_READS, 9);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 18);
- Assert.assertEquals(metrics.PF_READS, 16);
- Assert.assertEquals(metrics.PF_NOISE_READS, 2);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 22);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- else if (metrics.SAMPLE.equals("Ma")) {
- // There's only one library and one read group for this sample so the metrics for
- // every level should be identical
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 5);
- Assert.assertEquals(metrics.PF_READS, 3);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 24);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 5);
- Assert.assertEquals(metrics.PF_READS, 5);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 10);
- Assert.assertEquals(metrics.PF_READS, 8);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 27);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- else if (metrics.SAMPLE.equals("Pa")) {
- // Two libraries and three read groups for this sample
- if (metrics.LIBRARY == null) {
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 4);
- Assert.assertEquals(metrics.PF_READS, 4);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 19);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 4);
- Assert.assertEquals(metrics.PF_READS, 4);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 8);
- Assert.assertEquals(metrics.PF_READS, 8);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
- Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
- Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
- Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
- Assert.assertEquals(metrics.BAD_CYCLES, 22);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- else if (metrics.LIBRARY.equals("lib1")) {
- // Only one read group in this library so library and RG metrics should be identical
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 2);
- Assert.assertEquals(metrics.PF_READS, 2);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 19);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 2);
- Assert.assertEquals(metrics.PF_READS, 2);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 4);
- Assert.assertEquals(metrics.PF_READS, 4);
- Assert.assertEquals(metrics.PF_NOISE_READS, 1);
- Assert.assertEquals(metrics.BAD_CYCLES, 22);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
-
- }
- else if (metrics.LIBRARY.equals("lib2")) {
- if (metrics.READ_GROUP == null) {
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 2);
- Assert.assertEquals(metrics.PF_READS, 2);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 19);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 2);
- Assert.assertEquals(metrics.PF_READS, 2);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 4);
- Assert.assertEquals(metrics.PF_READS, 4);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 22);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- else if (metrics.READ_GROUP.equals("i")) {
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 1);
- Assert.assertEquals(metrics.PF_READS, 1);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 19);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 1);
- Assert.assertEquals(metrics.PF_READS, 1);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 2);
- Assert.assertEquals(metrics.PF_READS, 2);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 22);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- else if (metrics.READ_GROUP.equals("i2")) {
- switch (metrics.CATEGORY) {
- case FIRST_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 1);
- Assert.assertEquals(metrics.PF_READS, 1);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 27);
- break;
- case SECOND_OF_PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 1);
- Assert.assertEquals(metrics.PF_READS, 1);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 3);
- break;
- case PAIR:
- Assert.assertEquals(metrics.TOTAL_READS, 2);
- Assert.assertEquals(metrics.PF_READS, 2);
- Assert.assertEquals(metrics.PF_NOISE_READS, 0);
- Assert.assertEquals(metrics.BAD_CYCLES, 30);
- break;
- case UNPAIRED:
- default:
- Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
- }
- }
- else {
- Assert.fail("Data does not contain this read group: " + metrics.READ_GROUP);
- }
-
- }
- else {
- Assert.fail("Data does not contain this library: " + metrics.LIBRARY);
- }
- }
- else {
- Assert.fail("Data does not contain this sample: " + metrics.SAMPLE);
- }
- }
-
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/analysis/CollectInsertSizeMetricsTest.java b/src/tests/java/net/sf/picard/analysis/CollectInsertSizeMetricsTest.java
deleted file mode 100755
index 6336f48..0000000
--- a/src/tests/java/net/sf/picard/analysis/CollectInsertSizeMetricsTest.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.analysis;
-
-import net.sf.picard.metrics.MetricsFile;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-
-/**
- * Tests multi-level CollectInsertSizeMetrics
- */
-public class CollectInsertSizeMetricsTest {
-
- private static File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/");
-
- @Test
- public void test() throws IOException {
- final File input = new File(TEST_DATA_DIR, "insert_size_metrics_test.sam");
- final File outfile = File.createTempFile("test", ".insert_size_metrics");
- final File pdf = File.createTempFile("test", ".pdf");
- outfile.deleteOnExit();
- pdf.deleteOnExit();
- final int result = new CollectInsertSizeMetrics().instanceMain(new String[] {
- "INPUT=" + input.getAbsolutePath(),
- "OUTPUT=" + outfile.getAbsolutePath(),
- "HISTOGRAM_FILE=" + pdf.getAbsolutePath()
- });
- Assert.assertEquals(result, 0);
-
- final MetricsFile<InsertSizeMetrics, Comparable<?>> output = new MetricsFile<InsertSizeMetrics, Comparable<?>>();
- output.read(new FileReader(outfile));
-
- for (final InsertSizeMetrics metrics : output.getMetrics()) {
- Assert.assertEquals(metrics.PAIR_ORIENTATION.name(), "FR");
- if (metrics.LIBRARY==null) { // SAMPLE or ALL_READS level
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
- Assert.assertEquals(metrics.READ_PAIRS, 13);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 7);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 7);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 7);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 9);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
-
- }
- else if (metrics.LIBRARY.equals("Solexa-41753")) { // one LIBRARY and one READ_GROUP
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 44);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 44);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 44);
- Assert.assertEquals(metrics.READ_PAIRS, 2);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
-
- }
- else if (metrics.LIBRARY.equals("Solexa-41748") && metrics.READ_GROUP == null) {
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 40);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
- Assert.assertEquals(metrics.READ_PAIRS, 9);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 3);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 3);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 3);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 5);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 5);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 9);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 9);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
-
- }
- else if (metrics.LIBRARY.equals("Solexa-41734") && metrics.READ_GROUP == null) {
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 26);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
- Assert.assertEquals(metrics.READ_PAIRS, 9);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
- }
- else if (metrics.READ_GROUP.equals("62A79AAXX100907.7")) {
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
- Assert.assertEquals(metrics.READ_PAIRS, 4);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 5);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 5);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
- }
- else if (metrics.READ_GROUP.equals("62A79AAXX100907.6")) {
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 38);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
- Assert.assertEquals(metrics.READ_PAIRS, 5);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 3);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 3);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 7);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 7);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 9);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 9);
- }
- else if (metrics.READ_GROUP.equals("62A79AAXX100907.5")) {
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 41);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
- Assert.assertEquals(metrics.READ_PAIRS, 1);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
- }
- else if (metrics.READ_GROUP.equals("62A79AAXX100907.3")) {
- Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.MAX_INSERT_SIZE, 36);
- Assert.assertEquals(metrics.READ_PAIRS, 1);
- Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
- Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
- }
- else {
- Assert.fail("Unexpected metric: " + metrics);
- }
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/analysis/CollectRnaSeqMetricsTest.java b/src/tests/java/net/sf/picard/analysis/CollectRnaSeqMetricsTest.java
deleted file mode 100644
index da716c6..0000000
--- a/src/tests/java/net/sf/picard/analysis/CollectRnaSeqMetricsTest.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.analysis;
-
-import net.sf.picard.annotation.RefFlatReader.RefFlatColumns;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.samtools.SAMRecordSetBuilder;
-import net.sf.picard.util.Interval;
-import net.sf.picard.util.IntervalList;
-import net.sf.samtools.*;
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.PrintStream;
-
-public class CollectRnaSeqMetricsTest {
- @Test
- public void basic() throws Exception {
- final String sequence = "chr1";
- final String ignoredSequence = "chrM";
-
- // Create some alignments that hit the ribosomal sequence, various parts of the gene, and intergenic.
- final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
- // Set seed so that strandedness is consistent among runs.
- builder.setRandomSeed(0);
- final int sequenceIndex = builder.getHeader().getSequenceIndex(sequence);
- builder.addPair("pair1", sequenceIndex, 45, 475);
- builder.addPair("pair2", sequenceIndex, 90, 225);
- builder.addPair("pair3", sequenceIndex, 120, 600);
- builder.addFrag("frag1", sequenceIndex, 150, true);
- builder.addFrag("frag2", sequenceIndex, 450, true);
- builder.addFrag("frag3", sequenceIndex, 225, false);
- builder.addPair("rrnaPair", sequenceIndex, 400, 500);
-
- builder.addFrag("ignoredFrag", builder.getHeader().getSequenceIndex(ignoredSequence), 1, false);
-
- final File samFile = File.createTempFile("tmp.collectRnaSeqMetrics.", ".sam");
- final SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(builder.getHeader(), false, samFile);
- for (final SAMRecord rec: builder.getRecords()) samWriter.addAlignment(rec);
- samWriter.close();
-
- // Create an interval list with one ribosomal interval.
- final Interval rRnaInterval = new Interval(sequence, 300, 520, true, "rRNA");
- final IntervalList rRnaIntervalList = new IntervalList(builder.getHeader());
- rRnaIntervalList.add(rRnaInterval);
- final File rRnaIntervalsFile = File.createTempFile("tmp.rRna.", ".interval_list");
- rRnaIntervalsFile.deleteOnExit();
- rRnaIntervalList.write(rRnaIntervalsFile);
-
- // Generate the metrics.
- final File metricsFile = File.createTempFile("tmp.", ".rna_metrics");
-
- final int ret = new CollectRnaSeqMetrics().instanceMain(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "OUTPUT=" + metricsFile.getAbsolutePath(),
- "REF_FLAT=" + getRefFlatFile(sequence).getAbsolutePath(),
- "RIBOSOMAL_INTERVALS=" + rRnaIntervalsFile.getAbsolutePath(),
- "STRAND_SPECIFICITY=SECOND_READ_TRANSCRIPTION_STRAND",
- "IGNORE_SEQUENCE=" +ignoredSequence
- });
- Assert.assertEquals(ret, 0);
-
- final MetricsFile<RnaSeqMetrics, Comparable<?>> output = new MetricsFile<RnaSeqMetrics, Comparable<?>>();
- output.read(new FileReader(metricsFile));
-
- final RnaSeqMetrics metrics = output.getMetrics().get(0);
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 396);
- Assert.assertEquals(metrics.PF_BASES, 432);
- Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 108L);
- Assert.assertEquals(metrics.CODING_BASES, 136);
- Assert.assertEquals(metrics.UTR_BASES, 51);
- Assert.assertEquals(metrics.INTRONIC_BASES, 50);
- Assert.assertEquals(metrics.INTERGENIC_BASES, 51);
- Assert.assertEquals(metrics.CORRECT_STRAND_READS, 3);
- Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 4);
- Assert.assertEquals(metrics.IGNORED_READS, 1);
- }
-
- @Test
- public void testMultiLevel() throws Exception {
- final String sequence = "chr1";
- final String ignoredSequence = "chrM";
-
- // Create some alignments that hit the ribosomal sequence, various parts of the gene, and intergenic.
- final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate, false);
- // Set seed so that strandedness is consistent among runs.
- builder.setRandomSeed(0);
- final int sequenceIndex = builder.getHeader().getSequenceIndex(sequence);
- SAMReadGroupRecord rg1 = new SAMReadGroupRecord("2");
- rg1.setSample("Sample");
- rg1.setLibrary("foo");
- builder.setReadGroup(rg1);
- builder.addPair("pair1", sequenceIndex, 45, 475);
- builder.addPair("pair2", sequenceIndex, 90, 225);
- builder.addFrag("frag1", sequenceIndex, 150, true);
- builder.addFrag("frag2", sequenceIndex, 450, true);
-
- SAMReadGroupRecord rg2 = new SAMReadGroupRecord("3");
- rg2.setSample("Sample");
- rg2.setLibrary("bar");
- builder.setReadGroup(rg2);
- builder.addPair("pair3", sequenceIndex, 120, 600);
- builder.addFrag("frag3", sequenceIndex, 225, false);
- builder.addPair("rrnaPair", sequenceIndex, 400, 500);
-
- builder.addFrag("ignoredFrag", builder.getHeader().getSequenceIndex(ignoredSequence), 1, false);
-
- final File samFile = File.createTempFile("tmp.collectRnaSeqMetrics.", ".sam");
- final SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(builder.getHeader(), false, samFile);
- for (final SAMRecord rec: builder.getRecords()) samWriter.addAlignment(rec);
- samWriter.close();
-
- // Create an interval list with one ribosomal interval.
- final Interval rRnaInterval = new Interval(sequence, 300, 520, true, "rRNA");
- final IntervalList rRnaIntervalList = new IntervalList(builder.getHeader());
- rRnaIntervalList.add(rRnaInterval);
- final File rRnaIntervalsFile = File.createTempFile("tmp.rRna.", ".interval_list");
- rRnaIntervalsFile.deleteOnExit();
- rRnaIntervalList.write(rRnaIntervalsFile);
-
- // Generate the metrics.
- final File metricsFile = File.createTempFile("tmp.", ".rna_metrics");
-
- final int ret = new CollectRnaSeqMetrics().instanceMain(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "OUTPUT=" + metricsFile.getAbsolutePath(),
- "REF_FLAT=" + getRefFlatFile(sequence).getAbsolutePath(),
- "RIBOSOMAL_INTERVALS=" + rRnaIntervalsFile.getAbsolutePath(),
- "STRAND_SPECIFICITY=SECOND_READ_TRANSCRIPTION_STRAND",
- "IGNORE_SEQUENCE=" +ignoredSequence,
- "LEVEL=null",
- "LEVEL=SAMPLE",
- "LEVEL=LIBRARY"
- });
- Assert.assertEquals(ret, 0);
-
- final MetricsFile<RnaSeqMetrics, Comparable<?>> output = new MetricsFile<RnaSeqMetrics, Comparable<?>>();
- output.read(new FileReader(metricsFile));
-
- for (final RnaSeqMetrics metrics : output.getMetrics()) {
- if (metrics.LIBRARY == null) {
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 396);
- Assert.assertEquals(metrics.PF_BASES, 432);
- Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 108L);
- Assert.assertEquals(metrics.CODING_BASES, 136);
- Assert.assertEquals(metrics.UTR_BASES, 51);
- Assert.assertEquals(metrics.INTRONIC_BASES, 50);
- Assert.assertEquals(metrics.INTERGENIC_BASES, 51);
- Assert.assertEquals(metrics.CORRECT_STRAND_READS, 3);
- Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 4);
- Assert.assertEquals(metrics.IGNORED_READS, 1);
- }
- else if (metrics.LIBRARY.equals("foo")) {
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 216);
- Assert.assertEquals(metrics.PF_BASES, 216);
- Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 36L);
- Assert.assertEquals(metrics.CODING_BASES, 89);
- Assert.assertEquals(metrics.UTR_BASES, 51);
- Assert.assertEquals(metrics.INTRONIC_BASES, 25);
- Assert.assertEquals(metrics.INTERGENIC_BASES, 15);
- Assert.assertEquals(metrics.CORRECT_STRAND_READS, 3);
- Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 2);
- Assert.assertEquals(metrics.IGNORED_READS, 0);
-
- }
- else if (metrics.LIBRARY.equals("bar")) {
- Assert.assertEquals(metrics.PF_ALIGNED_BASES, 180);
- Assert.assertEquals(metrics.PF_BASES, 216);
- Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 72L);
- Assert.assertEquals(metrics.CODING_BASES, 47);
- Assert.assertEquals(metrics.UTR_BASES, 0);
- Assert.assertEquals(metrics.INTRONIC_BASES, 25);
- Assert.assertEquals(metrics.INTERGENIC_BASES, 36);
- Assert.assertEquals(metrics.CORRECT_STRAND_READS, 0);
- Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 2);
- Assert.assertEquals(metrics.IGNORED_READS, 1);
-
- }
- }
- }
-
-
- public File getRefFlatFile(String sequence) throws Exception {
- // Create a refFlat file with a single gene containing two exons, one of which is overlapped by the
- // ribosomal interval.
- final String[] refFlatFields = new String[RefFlatColumns.values().length];
- refFlatFields[RefFlatColumns.GENE_NAME.ordinal()] = "myGene";
- refFlatFields[RefFlatColumns.TRANSCRIPT_NAME.ordinal()] = "myTranscript";
- refFlatFields[RefFlatColumns.CHROMOSOME.ordinal()] = sequence;
- refFlatFields[RefFlatColumns.STRAND.ordinal()] = "+";
- refFlatFields[RefFlatColumns.TX_START.ordinal()] = "49";
- refFlatFields[RefFlatColumns.TX_END.ordinal()] = "500";
- refFlatFields[RefFlatColumns.CDS_START.ordinal()] = "74";
- refFlatFields[RefFlatColumns.CDS_END.ordinal()] = "400";
- refFlatFields[RefFlatColumns.EXON_COUNT.ordinal()] = "2";
- refFlatFields[RefFlatColumns.EXON_STARTS.ordinal()] = "49,249";
- refFlatFields[RefFlatColumns.EXON_ENDS.ordinal()] = "200,500";
-
- final File refFlatFile = File.createTempFile("tmp.", ".refFlat");
- refFlatFile.deleteOnExit();
- final PrintStream refFlatStream = new PrintStream(refFlatFile);
- refFlatStream.println(StringUtil.join("\t", refFlatFields));
- refFlatStream.close();
-
- return refFlatFile;
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/analysis/MultiLevelCollectorTest.java b/src/tests/java/net/sf/picard/analysis/MultiLevelCollectorTest.java
deleted file mode 100644
index bd616ab..0000000
--- a/src/tests/java/net/sf/picard/analysis/MultiLevelCollectorTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package net.sf.picard.analysis;
-
-
-import net.sf.picard.metrics.*;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-import static net.sf.samtools.util.CollectionUtil.*;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class MultiLevelCollectorTest {
-
- public static File TESTFILE = new File("testdata/net/sf/picard/sam/summary_alignment_stats_test_multiple.sam");
-
- public String noneOrStr(final String str) {
- final String out;
- if(str == null) {
- out = "";
- } else {
- out = str;
- }
- return out;
- }
-
- class TestArg {
- public final SAMRecord samRecord;
- public final ReferenceSequence refSeq;
-
- public TestArg(final SAMRecord samRecord, final ReferenceSequence refSeq) {
- this.samRecord = samRecord;
- this.refSeq = refSeq;
- }
- }
-
- /** We will just Tally up the number of times records were added to this metric and change FINISHED
- * to true when FINISHED is called
- */
- class TotalNumberMetric extends MultilevelMetrics {
- /** The number of these encountered **/
- public Integer TALLY = 0;
- public boolean FINISHED = false;
- }
-
- class RecordCountMultiLevelCollector extends MultiLevelCollector<TotalNumberMetric, Integer, TestArg> {
-
- public RecordCountMultiLevelCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords) {
- setup(accumulationLevels, samRgRecords);
- }
-
- //The number of times records were accepted by a RecordCountPerUnitCollectors (note since the same
- //samRecord might be aggregated by multiple PerUnit collectors, this may be greater than the number of
- //records in the file
- private int numProcessed = 0;
-
- public int getNumProcessed() {
- return numProcessed;
- }
-
- private final Map<String, TotalNumberMetric> unitsToMetrics = new HashMap<String, TotalNumberMetric>();
-
- public Map<String, TotalNumberMetric> getUnitsToMetrics() {
- return unitsToMetrics;
- }
-
- @Override
- protected TestArg makeArg(final SAMRecord samRec, final ReferenceSequence refSeq) {
- return new TestArg(samRec, refSeq);
- }
-
- @Override
- protected PerUnitMetricCollector<TotalNumberMetric, Integer, TestArg> makeChildCollector(final String sample, final String library, final String readGroup) {
- return new RecordCountPerUnitCollector(sample, library, readGroup);
- }
-
- private class RecordCountPerUnitCollector implements PerUnitMetricCollector<TotalNumberMetric, Integer, TestArg>{
- private final TotalNumberMetric metric;
-
- public RecordCountPerUnitCollector(final String sample, final String library, final String readGroup) {
- metric = new TotalNumberMetric();
- metric.SAMPLE = sample;
- metric.LIBRARY = library;
- metric.READ_GROUP = readGroup;
- unitsToMetrics.put(noneOrStr(sample) + "_" + noneOrStr(library) + "_" + noneOrStr(readGroup), metric);
- }
-
- @Override
- public void acceptRecord(final TestArg args) {
- numProcessed += 1;
- metric.TALLY += 1;
- if(metric.SAMPLE != null) {
- Assert.assertEquals(metric.SAMPLE, args.samRecord.getReadGroup().getSample());
- }
- if(metric.LIBRARY != null) {
- Assert.assertEquals(metric.LIBRARY, args.samRecord.getReadGroup().getLibrary());
- }
-
- if(metric.READ_GROUP != null) {
- Assert.assertEquals(metric.READ_GROUP, args.samRecord.getReadGroup().getPlatformUnit());
- }
- }
-
- @Override
- public void finish() {
- metric.FINISHED = true;
- }
-
- @Override
- public void addMetricsToFile(final MetricsFile<TotalNumberMetric, Integer> totalNumberMetricIntegerMetricsFile) {
- totalNumberMetricIntegerMetricsFile.addMetric(metric);
- }
- }
- }
-
- public static final Map<MetricAccumulationLevel, Map<String, Integer>> accumulationLevelToPerUnitReads = new HashMap<MetricAccumulationLevel, Map<String, Integer>>();
- static {
- HashMap<String, Integer> curMap = new HashMap<String, Integer>();
- curMap.put("__", 19);
- accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.ALL_READS, curMap);
-
- curMap = new HashMap<String, Integer>();
- curMap.put("Ma__", 10);
- curMap.put("Pa__", 9);
- accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.SAMPLE, curMap);
-
- curMap = new HashMap<String, Integer>();
- curMap.put("Ma_whatever_", 10);
- curMap.put("Pa_lib1_", 4);
- curMap.put("Pa_lib2_", 5);
- accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.LIBRARY, curMap);
-
-
- curMap = new HashMap<String, Integer>();
- curMap.put("Ma_whatever_me", 10);
- curMap.put("Pa_lib1_myself", 4);
- curMap.put("Pa_lib2_i", 3);
- curMap.put("Pa_lib2_i2", 2);
- accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.READ_GROUP, curMap);
- }
-
- @DataProvider(name = "variedAccumulationLevels")
- public Object [][] variedAccumulationLevels() {
- return new Object[][] {
- {makeSet(MetricAccumulationLevel.ALL_READS)},
- {makeSet(MetricAccumulationLevel.ALL_READS, MetricAccumulationLevel.SAMPLE)},
- {makeSet(MetricAccumulationLevel.SAMPLE, MetricAccumulationLevel.LIBRARY)},
- {makeSet(MetricAccumulationLevel.READ_GROUP, MetricAccumulationLevel.LIBRARY)},
- {makeSet(MetricAccumulationLevel.SAMPLE, MetricAccumulationLevel.LIBRARY, MetricAccumulationLevel.READ_GROUP)},
- {makeSet(MetricAccumulationLevel.SAMPLE, MetricAccumulationLevel.LIBRARY, MetricAccumulationLevel.READ_GROUP, MetricAccumulationLevel.ALL_READS)},
- };
- }
-
- @Test(dataProvider = "variedAccumulationLevels")
- public void multilevelCollectorTest(final Set<MetricAccumulationLevel> accumulationLevels) {
- final SAMFileReader in = new SAMFileReader(TESTFILE);
- final RecordCountMultiLevelCollector collector = new RecordCountMultiLevelCollector(accumulationLevels, in.getFileHeader().getReadGroups());
-
- for (final SAMRecord rec : in) {
- collector.acceptRecord(rec, null);
- }
-
- collector.finish();
-
- int totalProcessed = 0;
- int totalMetrics = 0;
- for(final MetricAccumulationLevel level : accumulationLevels) {
- final Map<String, Integer> keyToMetrics = accumulationLevelToPerUnitReads.get(level);
- for(final Map.Entry<String, Integer> entry : keyToMetrics.entrySet()) {
- final TotalNumberMetric metric = collector.getUnitsToMetrics().get(entry.getKey());
- Assert.assertEquals(entry.getValue(), metric.TALLY);
- Assert.assertTrue(metric.FINISHED);
- totalProcessed += metric.TALLY;
- totalMetrics += 1;
- }
- }
-
- Assert.assertEquals(collector.getUnitsToMetrics().size(), totalMetrics);
- Assert.assertEquals(totalProcessed, collector.getNumProcessed());
- }
-}
diff --git a/src/tests/java/net/sf/picard/cmdline/CommandLineParserTest.java b/src/tests/java/net/sf/picard/cmdline/CommandLineParserTest.java
deleted file mode 100644
index 66dda4e..0000000
--- a/src/tests/java/net/sf/picard/cmdline/CommandLineParserTest.java
+++ /dev/null
@@ -1,906 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.cmdline;
-
-import net.sf.samtools.util.CollectionUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.*;
-
-public class CommandLineParserTest {
- enum FrobnicationFlavor {
- FOO, BAR, BAZ
- }
-
- class FrobnicateOptions {
- @Usage
- public static final String USAGE = "Usage: frobnicate [options] input-file output-file\n\nRead input-file, frobnicate it, and write frobnicated results to output-file\n";
-
- @PositionalArguments(minElements=2, maxElements=2)
- public List<File> positionalArguments = new ArrayList<File>();
-
- @Option(shortName="T", doc="Frobnication threshold setting.")
- public Integer FROBNICATION_THRESHOLD = 20;
-
- @Option
- public FrobnicationFlavor FROBNICATION_FLAVOR;
-
- @Option(doc="Allowed shmiggle types.", minElements=1, maxElements = 3)
- public List<String> SHMIGGLE_TYPE = new ArrayList<String>();
-
- @Option
- public Boolean TRUTHINESS;
- }
-
- class FrobnicateOptionsWithNullList {
- @Usage
- public static final String USAGE = "Usage: frobnicate [options] input-file output-file\n\nRead input-file, frobnicate it, and write frobnicated results to output-file\n";
-
- @PositionalArguments(minElements=2, maxElements=2)
- public List<File> positionalArguments = new ArrayList<File>();
-
- @Option(shortName="T", doc="Frobnication threshold setting.")
- public Integer FROBNICATION_THRESHOLD = 20;
-
- @Option
- public FrobnicationFlavor FROBNICATION_FLAVOR;
-
- @Option(doc="Allowed shmiggle types.", minElements=0, maxElements = 3)
- public List<String> SHMIGGLE_TYPE = new ArrayList<String>();
-
- @Option
- public Boolean TRUTHINESS;
- }
-
- class OptionsWithoutPositional {
- @Usage
- public static final String USAGE = "Usage: framistat [options]\n\nCompute the plebnick of the freebozzle.\n";
- public static final int DEFAULT_FROBNICATION_THRESHOLD = 20;
- @Option(shortName="T", doc="Frobnication threshold setting.")
- public Integer FROBNICATION_THRESHOLD = DEFAULT_FROBNICATION_THRESHOLD;
-
- @Option
- public FrobnicationFlavor FROBNICATION_FLAVOR;
-
- @Option(doc="Allowed shmiggle types.", minElements=1, maxElements = 3)
- public List<String> SHMIGGLE_TYPE = new ArrayList<String>();
-
- @Option
- public Boolean TRUTHINESS;
- }
-
- class OptionsWithCaseClash {
- @Option
- public String FROB;
- @Option
- public String frob;
- }
-
- class MutexOptions {
- @Option(mutex={"M", "N", "Y", "Z"})
- public String A;
- @Option(mutex={"M", "N", "Y", "Z"})
- public String B;
- @Option(mutex={"A", "B", "Y", "Z"})
- public String M;
- @Option(mutex={"A", "B", "Y", "Z"})
- public String N;
- @Option(mutex={"A", "B", "M", "N"})
- public String Y;
- @Option(mutex={"A", "B", "M", "N"})
- public String Z;
-
- }
-
-
- @Test
- public void testUsage() {
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- clp.usage(System.out, false);
- }
-
- @Test
- public void testUsageWithDefault() {
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- clp.usage(System.out, true);
- }
-
- @Test
- public void testUsageWithoutPositional() {
- final OptionsWithoutPositional fo = new OptionsWithoutPositional();
- final CommandLineParser clp = new CommandLineParser(fo);
- clp.usage(System.out, false);
- }
-
- @Test
- public void testUsageWithoutPositionalWithDefault() {
- final OptionsWithoutPositional fo = new OptionsWithoutPositional();
- final CommandLineParser clp = new CommandLineParser(fo);
- clp.usage(System.out, true);
- }
-
- @Test
- public void testPositive() {
- final String[] args = {
- "T=17",
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(fo.positionalArguments.size(), 2);
- final File[] expectedPositionalArguments = { new File("positional1"), new File("positional2")};
- Assert.assertEquals(fo.positionalArguments.toArray(), expectedPositionalArguments);
- Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
- Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
- Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
- final String[] expectedShmiggleTypes = {"shmiggle1", "shmiggle2"};
- Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
- Assert.assertFalse(fo.TRUTHINESS);
- }
-
- /**
- * Allow a whitespace btw equal sign and option value.
- */
- @Test
- public void testPositiveWithSpaces() {
- final String[] args = {
- "T=", "17",
- "FROBNICATION_FLAVOR=", "BAR",
- "TRUTHINESS=", "False",
- "SHMIGGLE_TYPE=", "shmiggle1",
- "SHMIGGLE_TYPE=", "shmiggle2",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(fo.positionalArguments.size(), 2);
- final File[] expectedPositionalArguments = { new File("positional1"), new File("positional2")};
- Assert.assertEquals(fo.positionalArguments.toArray(), expectedPositionalArguments);
- Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
- Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
- Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
- final String[] expectedShmiggleTypes = {"shmiggle1", "shmiggle2"};
- Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
- Assert.assertFalse(fo.TRUTHINESS);
- }
-
- @Test
- public void testPositiveWithoutPositional() {
- final String[] args = {
- "T=17",
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- };
- final OptionsWithoutPositional fo = new OptionsWithoutPositional();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
- Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
- Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
- final String[] expectedShmiggleTypes = {"shmiggle1", "shmiggle2"};
- Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
- Assert.assertFalse(fo.TRUTHINESS);
- }
-
- /**
- * If last character of command line is the equal sign in an option=value pair,
- * make sure no crash, and that the value is empty string.
- */
- @Test
- public void testPositiveTerminalEqualSign() {
- final String[] args = {
- "T=17",
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=",
- };
- final OptionsWithoutPositional fo = new OptionsWithoutPositional();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
- Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
- Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
- final String[] expectedShmiggleTypes = {"shmiggle1", ""};
- Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
- Assert.assertFalse(fo.TRUTHINESS);
- }
-
- @Test
- public void testDefault() {
- final String[] args = {
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 20);
- }
-
- @Test
- public void testMissingRequiredArgument() {
- final String[] args = {
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testBadValue() {
- final String[] args = {
- "FROBNICATION_THRESHOLD=ABC",
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testBadEnumValue() {
- final String[] args = {
- "FROBNICATION_FLAVOR=HiMom",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testNotEnoughOfListOption() {
- final String[] args = {
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testTooManyListOption() {
- final String[] args = {
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "SHMIGGLE_TYPE=shmiggle3",
- "SHMIGGLE_TYPE=shmiggle4",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testTooManyPositional() {
- final String[] args = {
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "positional1",
- "positional2",
- "positional3",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testNotEnoughPositional() {
- final String[] args = {
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testUnexpectedPositional() {
- final String[] args = {
- "T=17",
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "SHMIGGLE_TYPE=shmiggle2",
- "positional"
- };
- final OptionsWithoutPositional fo = new OptionsWithoutPositional();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test(expectedExceptions = CommandLineParserDefinitionException.class)
- public void testOptionDefinitionCaseClash() {
- final OptionsWithCaseClash options = new OptionsWithCaseClash();
- new CommandLineParser(options);
- Assert.fail("Should not be reached.");
- }
-
- @Test
- public void testOptionUseCaseClash() {
- final String[] args = {
- "FROBNICATION_FLAVOR=BAR",
- "FrOBNICATION_fLAVOR=BAR",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @Test
- public void testNullValue() {
- final String[] args = {
- "FROBNICATION_THRESHOLD=null",
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=null",
- "positional1",
- "positional2",
- };
-
- final FrobnicateOptionsWithNullList fownl = new FrobnicateOptionsWithNullList();
- fownl.SHMIGGLE_TYPE.add("shmiggle1"); //providing null value should clear this list
-
- final CommandLineParser clp = new CommandLineParser(fownl);
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(fownl.positionalArguments.size(), 2);
- final File[] expectedPositionalArguments = { new File("positional1"), new File("positional2")};
- Assert.assertEquals(fownl.positionalArguments.toArray(), expectedPositionalArguments);
- Assert.assertEquals(fownl.FROBNICATION_THRESHOLD, null); //test null value
- Assert.assertEquals(fownl.SHMIGGLE_TYPE.size(), 0); //test null value for list
- Assert.assertFalse(fownl.TRUTHINESS);
-
- //verify that required arg can't be set to null
- args[2] = "TRUTHINESS=null";
- final CommandLineParser clp2 = new CommandLineParser(fownl);
- Assert.assertFalse(clp2.parseOptions(System.err, args));
-
- //verify that positional arg can't be set to null
- args[2] = "TRUTHINESS=False";
- args[4] = "null";
- final CommandLineParser clp3 = new CommandLineParser(fownl);
- Assert.assertFalse(clp3.parseOptions(System.err, args));
-
- }
-
-
- @Test
- public void testOptionsFile() throws Exception {
- final File optionsFile = File.createTempFile("clp.", ".options");
- optionsFile.deleteOnExit();
- final PrintWriter writer = new PrintWriter(optionsFile);
- writer.println("T=18");
- writer.println("TRUTHINESS=True");
- writer.println("SHMIGGLE_TYPE=shmiggle0");
- writer.println("STRANGE_OPTION=shmiggle0");
- writer.close();
- final String[] args = {
- "OPTIONS_FILE=" + optionsFile.getPath(),
- // Multiple options files are allowed
- "OPTIONS_FILE=" + optionsFile.getPath(),
- "T=17",
- "FROBNICATION_FLAVOR=BAR",
- "TRUTHINESS=False",
- "SHMIGGLE_TYPE=shmiggle1",
- "positional1",
- "positional2",
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(fo.positionalArguments.size(), 2);
- final File[] expectedPositionalArguments = { new File("positional1"), new File("positional2")};
- Assert.assertEquals(fo.positionalArguments.toArray(), expectedPositionalArguments);
- Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
- Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
- Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 3);
- final String[] expectedShmiggleTypes = {"shmiggle0", "shmiggle0", "shmiggle1"};
- Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
- Assert.assertFalse(fo.TRUTHINESS);
- }
-
-
- /**
- * In an options file, should not be allowed to override an option set on the command line
- * @throws Exception
- */
- @Test
- public void testOptionsFileWithDisallowedOverride() throws Exception {
- final File optionsFile = File.createTempFile("clp.", ".options");
- optionsFile.deleteOnExit();
- final PrintWriter writer = new PrintWriter(optionsFile);
- writer.println("T=18");
- writer.close();
- final String[] args = {
- "T=17",
- "OPTIONS_FILE=" + optionsFile.getPath()
- };
- final FrobnicateOptions fo = new FrobnicateOptions();
- final CommandLineParser clp = new CommandLineParser(fo);
- Assert.assertFalse(clp.parseOptions(System.err, args));
- }
-
- @DataProvider(name="mutexScenarios")
- public Object[][] mutexScenarios() {
- return new Object[][] {
- { "pass", new String[] {"A=1", "B=2"}, true },
- { "no args", new String[0], false },
- { "1 of group required", new String[] {"A=1"}, false },
- { "mutex", new String[] {"A=1", "Y=3"}, false },
- { "mega mutex", new String[] {"A=1", "B=2", "Y=3", "Z=1", "M=2", "N=3"}, false }
- };
- }
-
- @Test(dataProvider="mutexScenarios")
- public void testMutex(final String testName, final String[] args, final boolean expected) {
- final MutexOptions o = new MutexOptions();
- final CommandLineParser clp = new CommandLineParser(o);
- Assert.assertEquals(clp.parseOptions(System.err, args), expected);
- }
-
- class UninitializedCollectionOptions {
- @Option
- public List<String> LIST;
- @Option
- public ArrayList<String> ARRAY_LIST;
- @Option
- public HashSet<String> HASH_SET;
- @PositionalArguments
- public Collection<File> COLLECTION;
-
- }
-
- @Test
- public void testUninitializedCollections() {
- final UninitializedCollectionOptions o = new UninitializedCollectionOptions();
- final CommandLineParser clp = new CommandLineParser(o);
- final String[] args = {"LIST=L1", "LIST=L2", "ARRAY_LIST=S1", "HASH_SET=HS1", "P1", "P2"};
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(o.LIST.size(), 2);
- Assert.assertEquals(o.ARRAY_LIST.size(), 1);
- Assert.assertEquals(o.HASH_SET.size(), 1);
- Assert.assertEquals(o.COLLECTION.size(), 2);
- }
-
- class UninitializedCollectionThatCannotBeAutoInitializedOptions {
- @Option
- public Set<String> SET;
- }
-
- @Test(expectedExceptions = CommandLineParserDefinitionException.class)
- public void testCollectionThatCannotBeAutoInitialized() {
- final UninitializedCollectionThatCannotBeAutoInitializedOptions o = new UninitializedCollectionThatCannotBeAutoInitializedOptions();
- new CommandLineParser(o);
- Assert.fail("Exception should have been thrown");
- }
-
- class CollectionWithDefaultValuesOptions {
- @Option
- public List<String> LIST = CollectionUtil.makeList("foo", "bar");
- }
-
- @Test
- public void testClearDefaultValuesFromListOption() {
- final CollectionWithDefaultValuesOptions o = new CollectionWithDefaultValuesOptions();
- final CommandLineParser clp = new CommandLineParser(o);
- final String[] args = {"LIST=null"};
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(o.LIST.size(), 0);
- }
-
- @Test
- public void testClearDefaultValuesFromListOptionAndAddNew() {
- final CollectionWithDefaultValuesOptions o = new CollectionWithDefaultValuesOptions();
- final CommandLineParser clp = new CommandLineParser(o);
- final String[] args = {"LIST=null", "LIST=baz", "LIST=frob"};
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(o.LIST, CollectionUtil.makeList("baz", "frob"));
- }
-
- @Test
- public void testAddToDefaultValuesListOption() {
- final CollectionWithDefaultValuesOptions o = new CollectionWithDefaultValuesOptions();
- final CommandLineParser clp = new CommandLineParser(o);
- final String[] args = {"LIST=baz", "LIST=frob"};
- Assert.assertTrue(clp.parseOptions(System.err, args));
- Assert.assertEquals(o.LIST, CollectionUtil.makeList("foo", "bar", "baz", "frob"));
- }
-
- class OptionsWithNested {
- @Usage
- public String USAGE = "Class with nested options.";
- @Option
- public Integer AN_INT;
- @NestedOptions(doc="Doc for FROB")
- public OptionsWithoutPositional FROB = new OptionsWithoutPositional();
- @NestedOptions
- public OptionsWithNestedAgain NESTED = new OptionsWithNestedAgain();
- @Option
- public String A_STRING;
- }
-
- class OptionsWithNestedAgain {
- @NestedOptions(doc="Doc for inner FROB")
- public OptionsWithoutPositional FROB = new OptionsWithoutPositional();
- }
-
-
- @Test
- public void testStaticNestedOptions() {
- final OptionsWithNested o = new OptionsWithNested();
- final CommandLineParser clp = new CommandLineParser(o);
- clp.usage(System.out, false);
- clp.htmlUsage(System.out, "testStaticNestedOptions", false);
- final int outerInt = 123;
- final String outerString = "outerString";
- final FrobnicationFlavor outerFlavor = FrobnicationFlavor.BAR;
- final FrobnicationFlavor innerFlavor = FrobnicationFlavor.BAZ;
- final boolean outerTruthiness = true;
- final boolean innerTruthiness = false;
- final int innerThreshold = 10;
- final String[] outerShmiggle = {"shmiggle1", "shmiggle2"};
- final String[] innerShmiggle = {"inner1", "inner2", "inner3"};
-
- final List<String> args = new ArrayList<String>();
- args.add("AN_INT=" + outerInt);
- args.add("A_STRING=" + outerString);
- args.add("frob.truThIness=" + outerTruthiness);
- args.add("FrOb.FROBNICATION_FLAVOR=" + outerFlavor);
- for (final String shmiggle : outerShmiggle) {
- args.add("FROB.SHMIGGLE_TYPE=" + shmiggle);
- }
- args.add("NeStEd.Frob.FROBNICATION_THRESHOLD=" + innerThreshold);
- args.add("NeStEd.Frob.FROBNICATION_FLAVOR=" + innerFlavor);
- args.add("NeStEd.Frob.truthIness=" + innerTruthiness);
- for (final String shmiggle : innerShmiggle) {
- args.add("NESTED.FROB.SHMIGGLE_TYPE=");
- args.add(shmiggle);
- }
- Assert.assertTrue(clp.parseOptions(System.err, args.toArray(new String[args.size()])));
- System.out.println(clp.getCommandLine());
- Assert.assertEquals(o.AN_INT.intValue(), outerInt);
- Assert.assertEquals(o.A_STRING, outerString);
- Assert.assertEquals(o.FROB.FROBNICATION_FLAVOR, outerFlavor);
- Assert.assertEquals(o.FROB.FROBNICATION_THRESHOLD.intValue(), OptionsWithoutPositional.DEFAULT_FROBNICATION_THRESHOLD);
- Assert.assertEquals(o.FROB.SHMIGGLE_TYPE, Arrays.asList(outerShmiggle));
- Assert.assertEquals(o.FROB.TRUTHINESS.booleanValue(), outerTruthiness);
- Assert.assertEquals(o.NESTED.FROB.SHMIGGLE_TYPE, Arrays.asList(innerShmiggle));
- Assert.assertEquals(o.NESTED.FROB.FROBNICATION_THRESHOLD.intValue(), innerThreshold);
- Assert.assertEquals(o.NESTED.FROB.FROBNICATION_FLAVOR, innerFlavor);
- Assert.assertEquals(o.NESTED.FROB.TRUTHINESS.booleanValue(), innerTruthiness);
- }
-
- @Test void testStaticNestedNegative() {
- final OptionsWithNested o = new OptionsWithNested();
- final CommandLineParser clp = new CommandLineParser(o);
- final int outerInt = 123;
- final String outerString = "outerString";
- final FrobnicationFlavor outerFlavor = FrobnicationFlavor.BAR;
- final boolean outerTruthiness = true;
- final String[] outerShmiggle = {"shmiggle1", "shmiggle2"};
-
- final List<String> args = new ArrayList<String>();
- args.add("AN_INT=" + outerInt);
- args.add("A_STRING=" + outerString);
- Assert.assertFalse(clp.parseOptions(System.err, args.toArray(new String[args.size()])));
- System.out.println(clp.getCommandLine());
- }
-
- class ClpOptionsWithNested extends CommandLineProgram {
- @Usage
- public String USAGE = "Class with nested options.";
- @Option
- public Integer AN_INT;
- @NestedOptions(doc="This will be ignored")
- public OptionsWithoutPositional FROB = new OptionsWithoutPositional();
-
- @Option
- public String A_STRING;
-
- private final ClpOptionsWithNestedAgain NESTED = new ClpOptionsWithNestedAgain();
-
- @Override
- public Map<String, Object> getNestedOptions() {
- final Map<String, Object> ret = new LinkedHashMap<String, Object>();
- ret.put("CLP_NESTED", NESTED);
- ret.put("FRAB", FROB);
- return ret;
- }
-
- @Override
- public Map<String, Object> getNestedOptionsForHelp() {
- final Map<String, Object> ret = new LinkedHashMap<String, Object>();
- ret.put("CLP_NESTED", NESTED);
- return ret;
- }
-
- @Override
- protected int doWork() {
- return 0;
- }
- }
-
- class ClpOptionsWithNestedAgain extends CommandLineProgram {
- private final OptionsWithoutPositional FROB = new OptionsWithoutPositional();
-
- @Override
- public Map<String, Object> getNestedOptions() {
- final Map<String, Object> ret = new LinkedHashMap<String, Object>();
- ret.put("FROB_NESTED", FROB);
- return ret;
- }
-
- @Override
- protected int doWork() {
- return 0;
- }
- }
-
-
- @Test
- public void testDynamicNestedOptions() {
- final ClpOptionsWithNested o = new ClpOptionsWithNested();
- final int outerInt = 123;
- final String outerString = "aString";
- final int outerThreshold = 456;
- final FrobnicationFlavor outerFlavor = FrobnicationFlavor.FOO;
- final List<String> outerShmiggleType = Arrays.asList("shmiggle1");
- final boolean outerTruthiness = true;
- final int innerThreshold = -1000;
- final FrobnicationFlavor innerFlavor = FrobnicationFlavor.BAZ;
- final List<String> innerShmiggleType = Arrays.asList("innershmiggle1", "skeezwitz");
- final boolean innerTruthiness = false;
-
- final List<String> args = new ArrayList<String>();
- args.add("AN_INT=" + outerInt);
- args.add("A_STRING=" + outerString);
- args.add("FRAB.FROBNICATION_THRESHOLD=" + outerThreshold);
- args.add("FRAB.FROBNICATION_FLAVOR=" + outerFlavor);
- args.add("FRAB.SHMIGGLE_TYPE=" + outerShmiggleType.get(0));
- args.add("FRAB.TRUTHINESS=" + outerTruthiness);
- args.add("CLP_NESTED.FROB_NESTED.FROBNICATION_THRESHOLD=" + innerThreshold);
- args.add("CLP_NESTED.FROB_NESTED.FROBNICATION_FLAVOR=" + innerFlavor);
- for (final String ist : innerShmiggleType) {
- args.add("CLP_NESTED.FROB_NESTED.SHMIGGLE_TYPE=" + ist);
- }
- args.add("CLP_NESTED.FROB_NESTED.TRUTHINESS=" + innerTruthiness);
-
- Assert.assertTrue(o.parseArgs(args.toArray(new String[args.size()])));
- System.out.println(o.getCommandLine());
- Assert.assertEquals(o.AN_INT.intValue(), outerInt);
- Assert.assertEquals(o.A_STRING, outerString);
- Assert.assertEquals(o.FROB.FROBNICATION_THRESHOLD.intValue(), outerThreshold);
- Assert.assertEquals(o.FROB.FROBNICATION_FLAVOR, outerFlavor);
- Assert.assertEquals(o.FROB.SHMIGGLE_TYPE, outerShmiggleType);
- Assert.assertEquals(o.FROB.TRUTHINESS.booleanValue(), outerTruthiness);
- Assert.assertEquals(o.NESTED.FROB.FROBNICATION_THRESHOLD.intValue(), innerThreshold);
- Assert.assertEquals(o.NESTED.FROB.FROBNICATION_FLAVOR, innerFlavor);
- Assert.assertEquals(o.NESTED.FROB.SHMIGGLE_TYPE, innerShmiggleType);
- Assert.assertEquals(o.NESTED.FROB.TRUTHINESS.booleanValue(), innerTruthiness);
- Assert.assertFalse(new ClpOptionsWithNested().parseArgs(new String[]{"-h"}));
- new CommandLineParser(o).htmlUsage(System.err, o.getClass().getSimpleName(), false);
- }
-
- class StaticPropagationParent {
- @Option
- public String STRING1 = "String1ParentDefault";
-
- @Option
- public String STRING2 = "String2ParentDefault";
-
- @Option
- public String STRING3 = "String3ParentDefault";
-
- @Option
- public String STRING4 = "String4ParentDefault";
-
- @Option
- public String STRING5;
-
- @Option
- public List<String> COLLECTION;
-
- @NestedOptions
- public PropagationChild CHILD = new PropagationChild();
- }
-
- class PropagationChild {
- // Parent has default, child does not, should propagate
- @Option
- public String STRING1;
-
- // Parent and child have default, should not propagate
- @Option
- public String STRING2 = "String2ChildDefault";
-
- // Parent has explicitly set value, child has default, should propagate
- @Option
- public String STRING3 = "String3ChildDefault";
-
- // Parent has default, child has explicitly set value, should not propagate
- @Option
- public String STRING4;
-
- // Parent and child have explicitly set value, should not propagate
- @Option
- public String STRING5;
-
- // Parent has explicitly set value, but collection should not propagate
- @Option
- public List<String> COLLECTION;
- }
-
- @Test
- public void testStaticPropagation() {
- final StaticPropagationParent o = new StaticPropagationParent();
- final CommandLineParser clp = new CommandLineParser(o);
- clp.usage(System.out, false);
- clp.htmlUsage(System.out, "testStaticPropagation", false);
-
- final List<String> args = new ArrayList<String>();
- args.add("STRING3=String3Parent");
- args.add("CHILD.STRING4=String4Child");
- args.add("STRING5=String5Parent");
- args.add("CHILD.STRING5=String5Child");
- args.add("COLLECTION=CollectionParent");
-
- Assert.assertTrue(clp.parseOptions(System.err, args.toArray(new String[args.size()])));
- System.out.println(clp.getCommandLine());
-
- Assert.assertEquals(o.CHILD.STRING1, "String1ParentDefault");
- Assert.assertEquals(o.CHILD.STRING2, "String2ChildDefault");
- Assert.assertEquals(o.CHILD.STRING3, "String3Parent");
- Assert.assertEquals(o.CHILD.STRING4, "String4Child");
- Assert.assertEquals(o.CHILD.STRING5, "String5Child");
- Assert.assertEquals(o.CHILD.COLLECTION, new ArrayList<String>());
- }
-
- class DynamicPropagationParent extends CommandLineProgram {
- @Option
- public String STRING1 = "String1ParentDefault";
-
- @Option
- public String STRING2 = "String2ParentDefault";
-
- @Option
- public String STRING3 = "String3ParentDefault";
-
- @Option
- public String STRING4 = "String4ParentDefault";
-
- @Option
- public String STRING5;
-
- @Option
- public List<String> COLLECTION;
-
- public PropagationChild CHILD = new PropagationChild();
-
- @Override
- protected int doWork() {
- return 0;
- }
-
- @Override
- public Map<String, Object> getNestedOptions() {
- final Map<String, Object> ret = new HashMap<String, Object>();
- ret.put("CHILD", CHILD);
- return ret;
- }
- }
-
- @Test
- public void testDynamicPropagation() {
- final DynamicPropagationParent o = new DynamicPropagationParent();
-
- final List<String> args = new ArrayList<String>();
- args.add("STRING3=String3Parent");
- args.add("CHILD.STRING4=String4Child");
- args.add("STRING5=String5Parent");
- args.add("CHILD.STRING5=String5Child");
- args.add("COLLECTION=CollectionParent");
-
- Assert.assertTrue(o.parseArgs(args.toArray(new String[args.size()])));
- System.out.println(o.getCommandLine());
- Assert.assertFalse(new DynamicPropagationParent().parseArgs(new String[]{"-h"}));
- new CommandLineParser(o).htmlUsage(System.err, o.getClass().getSimpleName(), false);
-
- Assert.assertEquals(o.CHILD.STRING1, "String1ParentDefault");
- Assert.assertEquals(o.CHILD.STRING2, "String2ChildDefault");
- Assert.assertEquals(o.CHILD.STRING3, "String3Parent");
- Assert.assertEquals(o.CHILD.STRING4, "String4Child");
- Assert.assertEquals(o.CHILD.STRING5, "String5Child");
- Assert.assertEquals(o.CHILD.COLLECTION, new ArrayList<String>());
- }
-
- class NegativePropagationParent {
- @Option
- public int STRING1 = 1;
-
-
- @Option
- public List<String> COLLECTION;
-
- @NestedOptions
- public PropagationChild CHILD = new PropagationChild();
- }
-
- /** parent and child option of the same name are not type-compatible. */
- @Test(expectedExceptions = {IllegalArgumentException.class})
- public void testStaticPropagationNegative() {
- final NegativePropagationParent o = new NegativePropagationParent();
- final CommandLineParser clp = new CommandLineParser(o);
- clp.usage(System.out, false);
-
- clp.parseOptions(System.err, new String[0]);
- }
-}
diff --git a/src/tests/java/net/sf/picard/filter/FailsVendorReadQualityFilterTest.java b/src/tests/java/net/sf/picard/filter/FailsVendorReadQualityFilterTest.java
deleted file mode 100644
index 0e991f9..0000000
--- a/src/tests/java/net/sf/picard/filter/FailsVendorReadQualityFilterTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-import net.sf.samtools.SAMRecordSetBuilder;
-import net.sf.samtools.SAMRecord;
-
-public class FailsVendorReadQualityFilterTest {
-
- private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
- private final FailsVendorReadQualityFilter filter = new FailsVendorReadQualityFilter();
-
- /**
- * Basic positive and negative tests for the FailsReadQualityFilter
- *
- * @param readQualityFlag The read quality flag to be tested
- * @param expectedResult The expected result (true is the sequence should match the filter, otherwise false)
- */
- @Test(dataProvider="data")
- public void testFailsReadQualityFilter(final String testName, final boolean readQualityFlag,
- final boolean expectedResult) {
- builder.addUnmappedFragment("testfrag");
- final SAMRecord record = builder.iterator().next();
- record.setReadFailsVendorQualityCheckFlag(readQualityFlag);
- Assert.assertEquals(filter.filterOut(record), expectedResult, testName);
- }
-
-
- /**
- * Data for various sequences which may or may not match the filter.
- */
- @DataProvider(name = "data")
- private Object[][] getFailsReadQualityTestData()
- {
- return new Object[][]{
- {"Failed read, should be filtered out", true, true},
- {"Passing read, should not be filtered out", false, false},
- };
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/filter/SolexaNoiseFilterTest.java b/src/tests/java/net/sf/picard/filter/SolexaNoiseFilterTest.java
deleted file mode 100644
index f0b69e8..0000000
--- a/src/tests/java/net/sf/picard/filter/SolexaNoiseFilterTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-import net.sf.samtools.SAMRecordSetBuilder;
-import net.sf.samtools.SAMRecord;
-
-/**
- * Basic test for the SolexaNoiseFilter
- */
-public class SolexaNoiseFilterTest {
-
- private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
- private final SolexaNoiseFilter filter = new SolexaNoiseFilter();
-
- /**
- * Basic positive and negative tests for the PolyANoiseFilter
- *
- * @param sequence The sequence to be tested
- * @param expectedResult The expected result (true is the sequence should match the filter, otherwise false)
- */
- @Test(dataProvider="data")
- public void testSolexaNoiseFilter(final String testName, final String sequence, final boolean expectedResult) {
- builder.addUnmappedFragment("testfrag");
- final SAMRecord record = builder.iterator().next();
- record.setReadString(sequence);
- Assert.assertEquals(filter.filterOut(record), expectedResult, testName);
- }
-
-
- /**
- * Data for various sequences which may or may not match the filter.
- */
- @DataProvider(name = "data")
- private Object[][] getSolexaNoiseTestData()
- {
- return new Object[][]{
- {"36-base read all a's filter out", "AAAAAaaaaaAAAAAAAAAAAAAAAAAAAAaaaaaa", true},
- {"36-base read with n, filter out", "AAAAAaaaaaAAAAAAAAAAAAAAAAAAAAaaaaan", true},
- {"51-base read, final base mismatch", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT", false},
- {"51-base read, middle base mismatch", "aaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaa", false},
- {"76-base read, a's and n's, filter out",
- "aaaaaaaaaaaaaaaaaNNaaaaaaaaaaaaaaaaaaaaaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", true},
- {"76-base doesn't match",
- "NNNATAAAnnnnnnnnnnTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", false},
- };
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/filter/TagFilterTest.java b/src/tests/java/net/sf/picard/filter/TagFilterTest.java
deleted file mode 100644
index 90a863b..0000000
--- a/src/tests/java/net/sf/picard/filter/TagFilterTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.filter;
-
-import net.sf.picard.sam.ReservedTagConstants;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-import java.util.List;
-import java.util.Arrays;
-
-import net.sf.samtools.SAMRecordSetBuilder;
-import net.sf.samtools.SAMRecord;
-
-/**
- * Tests for the TagFilter class
- */
-public class TagFilterTest {
- private final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
-
-
- /**
- * Basic positive and negative tests for the TagFilter
- *
- * @param tag The tag to be tested
- * @param validValues The values the filter should test for
- * @param testValue The value to test for in the record
- * @param expectedResult The expected result (true is the sequence should match the filter, otherwise false)
- */
- @Test(dataProvider="data")
- public void testTagFilter(final String testName, final String tag, final List<Object> validValues,
- final Object testValue, final boolean expectedResult) {
- final TagFilter filter = new TagFilter(tag, validValues);
- builder.addUnmappedFragment("testfrag");
- final SAMRecord record = builder.iterator().next();
- if (testValue != null) {
- record.setAttribute(tag, testValue);
- }
- Assert.assertEquals(filter.filterOut(record), expectedResult, testName);
- }
-
-
- /**
- * Data for various sequences which may or may not match the filter.
- */
- @DataProvider(name = "data")
- private Object[][] getTagFilterTestData()
- {
- return new Object[][]{
- {"Basic positive test", ReservedTagConstants.XN, Arrays.asList(1), 1, true},
- {"Multi-value positive test", ReservedTagConstants.XN, Arrays.asList(1,2,3), 1, true},
- {"Incorrect value negative test", ReservedTagConstants.XN, Arrays.asList(1), 2, false},
- {"Null value negative test", ReservedTagConstants.XN, Arrays.asList(1), null, false}
- };
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/net/sf/picard/illumina/CheckIlluminaDirectoryTest.java b/src/tests/java/net/sf/picard/illumina/CheckIlluminaDirectoryTest.java
deleted file mode 100644
index bb9cef5..0000000
--- a/src/tests/java/net/sf/picard/illumina/CheckIlluminaDirectoryTest.java
+++ /dev/null
@@ -1,388 +0,0 @@
-package net.sf.picard.illumina;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.cmdline.StandardOptionDefinitions;
-import net.sf.picard.illumina.parser.IlluminaDataType;
-import net.sf.picard.illumina.parser.IlluminaFileUtil;
-import net.sf.picard.illumina.parser.IlluminaFileUtilTest;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.CloserUtil;
-import org.broad.tribble.index.Index;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.ByteOrder;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static net.sf.picard.illumina.parser.IlluminaDataType.*;
-import static net.sf.picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat;
-import static net.sf.picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat.*;
-import static net.sf.samtools.util.CollectionUtil.makeList;
-
-
-public class CheckIlluminaDirectoryTest {
-
- private File illuminaDir;
- private File dataDir;
- private File interopDir;
- private File intensityDir;
- private File basecallDir;
-
- @BeforeMethod
- private void setUp() throws Exception {
- illuminaDir = IoUtil.createTempDir("ift_test", "IlluminaDir");
-
- interopDir = new File(illuminaDir, "InterOp");
- if (!interopDir.mkdir()) {
- throw new RuntimeException("Couldn't make interop dir " + interopDir.getAbsolutePath());
- }
-
- dataDir = new File(illuminaDir, "Data");
- if (!dataDir.mkdir()) {
- throw new RuntimeException("Couldn't make data dir " + dataDir.getAbsolutePath());
- }
-
- intensityDir = new File(dataDir, "Intensities");
- if (!intensityDir.mkdir()) {
- throw new RuntimeException("Couldn't make intensity dir " + intensityDir.getAbsolutePath());
- }
-
- basecallDir = new File(intensityDir, "BaseCalls");
- if (!basecallDir.mkdir()) {
- throw new RuntimeException("Couldn't make basecalls dir " + basecallDir.getAbsolutePath());
- }
- }
-
- @AfterMethod
- private void tearDown() {
- IoUtil.deleteDirectoryTree(intensityDir);
- }
-
- public void makeFiles(final SupportedIlluminaFormat[] formats, final int lane, final List<Integer> tiles,
- final int[] cycles) {
- for (final IlluminaFileUtil.SupportedIlluminaFormat format : formats) {
- IlluminaFileUtilTest.makeFiles(format, intensityDir, lane, tiles, cycles);
- }
- }
-
- public String[] makeCheckerArgs(final File basecallDir, final int lane, final String readStructure,
- final IlluminaDataType[] dataTypes, final List<Integer> filterTiles,
- final boolean makeFakeFiles, final boolean createSymLinks) {
- final String[] dataTypeArgs = new String[dataTypes.length + filterTiles.size() + 5];
-
- dataTypeArgs[0] = "B=" + basecallDir;
- dataTypeArgs[1] = StandardOptionDefinitions.LANE_SHORT_NAME + "=" + lane;
- dataTypeArgs[2] = "RS=" + readStructure;
- dataTypeArgs[3] = "F=" + makeFakeFiles;
- dataTypeArgs[4] = "X=" + createSymLinks;
-
- for (int i = 0; i < dataTypes.length; i++) {
- dataTypeArgs[i + 5] = "DT=" + dataTypes[i];
- }
-
- if (filterTiles.size() > 0) {
- final int start = dataTypes.length + 5;
- for (int i = start; i < dataTypeArgs.length; i++) {
- dataTypeArgs[i] = "T=" + filterTiles.get(i - start);
- }
- }
-
- return dataTypeArgs;
- }
-
- public File writeTileMetricsOutFile(final Map<Integer, List<Integer>> lanesToTiles) {
- return writeTileMetricsOutFile(interopDir, (byte) 2, (byte) 10, lanesToTiles);
- }
-
- public File writeTileMetricsOutFile(final File interopDir, final byte versionNumber, final byte recordSize,
- final Map<Integer, List<Integer>> lanesToTiles) {
- final File tileMetricsOut = new File(interopDir, "TileMetricsOut.bin");
- if (!tileMetricsOut.exists()) {
- try {
- if (!tileMetricsOut.createNewFile()) {
- throw new PicardException(
- "Could not create tileMetricsOut file(" + tileMetricsOut.getAbsolutePath() + ")");
- }
- } catch (final IOException e) {
- throw new PicardException(
- "IOException creating tileMetricsOut file (" + tileMetricsOut + ") for writing!", e);
- }
- }
-
- int totalEntries = 0;
- for (final Map.Entry<Integer, List<Integer>> l2t : lanesToTiles.entrySet()) {
- totalEntries += l2t.getValue().size();
- }
-
- final MappedByteBuffer buf;
- try {
- final RandomAccessFile raf = new RandomAccessFile(tileMetricsOut, "rw");
- final FileChannel channel = raf.getChannel();
- buf = channel.map(FileChannel.MapMode.READ_WRITE, 0, 2 + 10 * totalEntries);
- buf.order(ByteOrder.LITTLE_ENDIAN);
-
- buf.put(versionNumber);
- buf.put(recordSize);
-
- for (final int lane : lanesToTiles.keySet()) {
- for (final int tile : lanesToTiles.get(lane)) {
- buf.putShort((short) lane);
- buf.putShort((short) tile);
- buf.putShort((short) 0);
- buf.putFloat(0F);
- }
- }
-
- buf.force();
- CloserUtil.close(channel);
- CloserUtil.close(raf);
- } catch (final IOException e) {
- throw new PicardException("IOException writing tileMetricsOut file (" + tileMetricsOut + ")", e);
- }
-
- return tileMetricsOut;
- }
-
- public static Map<Integer, List<Integer>> makeMap(final List<Integer> lanes, final List<List<Integer>> tiles) {
- final Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
-
- if (lanes.size() != tiles.size()) {
- throw new IllegalArgumentException("Number of lanes (" + lanes + ") does not equal number of tiles!");
- }
-
- for (int i = 0; i < lanes.size(); i++) {
- map.put(lanes.get(i), tiles.get(i));
- }
-
- return map;
- }
-
- @DataProvider(name = "positiveTestData")
- public Object[][] positiveTestData() {
- return new Object[][]{
- {
- new SupportedIlluminaFormat[]{Bcl, Locs, Pos, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
- IlluminaDataType.PF},
- 3, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
- "25T25T", new ArrayList<Integer>()
- },
- {
- new SupportedIlluminaFormat[]{Bcl, Locs, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
- IlluminaDataType.PF},
- 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
- "8S15T8S", new ArrayList<Integer>()
- },
- {
- new SupportedIlluminaFormat[]{Bcl, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
- 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
- "68T8B68T", new ArrayList<Integer>()
- },
- {
- new SupportedIlluminaFormat[]{Bcl, Pos, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
- IlluminaDataType.PF},
- 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
- "25T25T", new ArrayList<Integer>()
- },
- {
- new SupportedIlluminaFormat[]{Bcl, Pos, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
- IlluminaDataType.PF},
- 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
- "25T25T", makeList(1301, 2101)
- }
- };
- }
-
- //Note: The positiveTest and negativeTests don't actually test Qseqs (the Qseq in the first test case above is there to make sure
- //BCLs are preferred over Qseqs)
-
- @Test(dataProvider = "positiveTestData")
- public void positiveTests(final IlluminaFileUtil.SupportedIlluminaFormat[] formats,
- final IlluminaDataType[] dataTypes,
- final int lane,
- final List<Integer> tiles,
- final int[] cycles,
- final String readStructure,
- final List<Integer> filterTiles) {
- makeFiles(formats, lane, tiles, cycles);
- writeTileMetricsOutFile(makeMap(makeList(lane - 1, lane + 1, lane),
- makeList(makeList(1, 2, 3), tiles, tiles)));
-
- final String[] args = makeCheckerArgs(basecallDir, lane, readStructure, dataTypes, filterTiles, false, false);
- final int result = new CheckIlluminaDirectory().instanceMain(args);
- Assert.assertEquals(result, 0);
- }
-
- @DataProvider(name = "negativeTestData")
- public Object[][] negativeTestData() {
- return new Object[][]{
- { //Completely missing data types
- new SupportedIlluminaFormat[]{Bcl, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF,
- IlluminaDataType.Position, IlluminaDataType.Barcodes},
- new ArrayList<String>(),
- new ArrayList<String>(),
- 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
- "68T8B68T",
- 2, new ArrayList<Integer>(), true
- },
- {
- new SupportedIlluminaFormat[]{Bcl, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
- makeList("BaseCalls/L002/C13.1/s_2_1201.bcl", "BaseCalls/L002/C13.1/s_2_2101.bcl"),
- makeList("BaseCalls/L002/s_2_2101.filter"),
- 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 20), "13T",
- 3, new ArrayList<Integer>(), true
- },
- {
- new SupportedIlluminaFormat[]{Bcl, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
- new ArrayList<String>(),
- new ArrayList<String>(),
- 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
- "250T",
- 98, new ArrayList<Integer>(), true
- },
- {
- new SupportedIlluminaFormat[]{Bcl, Filter},
- new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
- new ArrayList<String>(),
- new ArrayList<String>(),
- 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
- "250T",
- 98, makeList(1301, 2201), true
- }
- };
- }
-
- @Test(dataProvider = "negativeTestData")
- public void negativeTests(final IlluminaFileUtil.SupportedIlluminaFormat[] formats,
- final IlluminaDataType[] dataTypes,
- final List<String> filesToDelete,
- final List<String> filesToEmpty,
- final int lane,
- final List<Integer> tiles,
- final int[] cycles,
- final String readStructure,
- final int expectedNumErrors,
- final List<Integer> filterTiles,
- final boolean makeFakeFiles) {
- makeFiles(formats, lane, tiles, cycles);
- IlluminaFileUtilTest.deleteRelativeFiles(intensityDir, filesToDelete);
- IlluminaFileUtilTest.emptyRelativeFiles(intensityDir, filesToEmpty);
- writeTileMetricsOutFile(makeMap(makeList(lane - 1, lane + 1, lane), makeList(makeList(1, 2, 3), tiles, tiles)));
-
- final String[] args =
- makeCheckerArgs(basecallDir, lane, readStructure, dataTypes, filterTiles, makeFakeFiles, false);
- int result = new CheckIlluminaDirectory().instanceMain(args);
- Assert.assertEquals(expectedNumErrors, result);
- //if we previously faked files make sure CheckIlluminaDirectory returns with no failures
- if (makeFakeFiles) {
- result = new CheckIlluminaDirectory().instanceMain(args);
- Assert.assertEquals(0, result);
- }
- }
-
- public void writeFileOfSize(final File file, final int size) {
- try {
- final BufferedWriter writer = new BufferedWriter(new FileWriter(file));
- for (int i = 0; i < size; i++) {
- final int toWrite = Math.min(1000, size);
- final char[] writeBuffer = new char[toWrite];
- for (int j = 0; j < writeBuffer.length; j++) {
- writeBuffer[j] = (char) (Math.random() * 150);
- }
-
- writer.write(writeBuffer);
- }
- writer.flush();
- writer.close();
- } catch (final Exception exc) {
- throw new RuntimeException(exc);
- }
- }
-
- @Test
- public void differentSizedBclTest() {
- final SupportedIlluminaFormat[] formats = new SupportedIlluminaFormat[]{Bcl, Filter};
- final int lane = 5;
- final List<Integer> tiles = makeList(1, 2, 3, 4);
- final int[] cycles = IlluminaFileUtilTest.cycleRange(1, 50);
- final IlluminaDataType[] dataTypes = new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores};
-
- makeFiles(new SupportedIlluminaFormat[]{Bcl, Filter}, lane, tiles, cycles);
- writeTileMetricsOutFile(makeMap(makeList(lane - 1, lane + 1, lane),
- makeList(makeList(1, 2, 3), tiles, tiles)));
-
- final File cycleDir = new File(basecallDir, "L005/C9.1");
- writeFileOfSize(new File(cycleDir, "s_5_3.bcl"), 222);
-
- final String[] args =
- makeCheckerArgs(basecallDir, lane, "50T", dataTypes, new ArrayList<Integer>(), false, false);
- final int result = new CheckIlluminaDirectory().instanceMain(args);
- Assert.assertEquals(1, result);
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void basedirDoesntExistTest() {
- final String[] args = makeCheckerArgs(new File("a_made_up_file/in_some_weird_location"), 1, "76T76T",
- new IlluminaDataType[]{IlluminaDataType.Position},
- new ArrayList<Integer>(), false, false);
-
- final int result = new CheckIlluminaDirectory().instanceMain(args);
- }
-
- @Test
- public void symlinkLocsTest() {
- final List<Integer> tileList = makeList(1101, 1102, 1103, 2101, 2102, 2103);
- final int lane = 5;
- makeFiles(new SupportedIlluminaFormat[]{Bcl}, lane, tileList, IlluminaFileUtilTest.cycleRange(1, 50));
- String[] args =
- makeCheckerArgs(basecallDir, lane, "50T", new IlluminaDataType[]{Position}, new ArrayList<Integer>(),
- false,
- true);
- writeTileMetricsOutFile(makeMap(makeList(lane), makeList(tileList)));
-
- createSingleLocsFile();
- final File intensityLaneDir = new File(intensityDir, IlluminaFileUtil.longLaneStr(lane));
- intensityLaneDir.mkdirs();
- int result = new CheckIlluminaDirectory().instanceMain(args);
- Assert.assertEquals(result, 0);
- //now that we have created the loc files lets test to make sure they are there
- args = makeCheckerArgs(basecallDir, lane, "50T", new IlluminaDataType[]{IlluminaDataType.Position},
- new ArrayList<Integer>(), false,
- true);
-
- result = new CheckIlluminaDirectory().instanceMain(args);
- Assert.assertEquals(result, 0);
- }
-
- private void createSingleLocsFile() {
- try {
- final File singleLocsFile = new File(intensityDir, "s.locs");
- final FileWriter writer = new FileWriter(singleLocsFile);
- writer.write("This is a test string.");
- writer.close();
- } catch (final IOException e) {
- e.printStackTrace();
- }
-
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/ExtractIlluminaBarcodesTest.java b/src/tests/java/net/sf/picard/illumina/ExtractIlluminaBarcodesTest.java
deleted file mode 100644
index dd71d57..0000000
--- a/src/tests/java/net/sf/picard/illumina/ExtractIlluminaBarcodesTest.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.util.BasicInputParser;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.File;
-import java.io.FileReader;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ArrayList;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.illumina.parser.*;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class ExtractIlluminaBarcodesTest {
- private static final File SINGLE_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
- private static final File DUAL_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls");
- private static final String[] BARCODES = {
- "CAACTCTC",
- "CAACTCTG", // This one is artificial -- one edit away from the first one
- "ACAGGTAT",
- "GACCGTTG",
- "ATTATCAA",
- "TGCTGCTG",
- "AACAATGG",
- "TGTAATCA",
- "GCCGTCGA",
- "GTCCACAG",
- "TTGTCTAT",
- "GTGGAGAC",
- "TTGCAAAT"
- };
-
- private File basecallsDir;
- private File dual;
- private File qual;
-
- @BeforeTest
- private void setUp() throws Exception {
- basecallsDir = File.createTempFile("eib.", ".tmp");
- Assert.assertTrue(basecallsDir.delete());
- Assert.assertTrue(basecallsDir.mkdir());
- IoUtil.copyDirectoryTree(SINGLE_DATA_DIR, basecallsDir);
- dual = File.createTempFile("eib_dual", ".tmp");
- Assert.assertTrue(dual.delete());
- Assert.assertTrue(dual.mkdir());
- IoUtil.copyDirectoryTree(DUAL_DATA_DIR, dual);
- qual = File.createTempFile("eib_qual", ".tmp");
- Assert.assertTrue(qual.delete());
- Assert.assertTrue(qual.mkdir());
- IoUtil.copyDirectoryTree(DUAL_DATA_DIR, qual);
- }
-
- @AfterTest
- private void tearDown() {
- IoUtil.deleteDirectoryTree(basecallsDir);
- IoUtil.deleteDirectoryTree(dual);
- IoUtil.deleteDirectoryTree(qual);
- }
-
- @Test
- public void testSingleEndWithBarcodeAtStart() throws Exception {
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "8B25T");
- Assert.assertEquals(metricsFile.getMetrics().get(11).PERFECT_MATCHES, 1);
- }
-
- @Test
- public void testSingleEndWithBarcodeAtEnd() throws Exception {
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "25T8B");
- Assert.assertEquals(metricsFile.getMetrics().get(0).PERFECT_MATCHES, 5);
- }
-
- @Test
- public void testPairedEndWithBarcodeOnFirstEnd() throws Exception {
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "25T8B25T");
- Assert.assertEquals(metricsFile.getMetrics().get(0).PERFECT_MATCHES, 5);
- }
-
- @Test
- public void testPairedEndWithBarcodeOnSecondEnd() throws Exception {
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "25T25T8B");
- Assert.assertEquals(metricsFile.getMetrics().get(12).PERFECT_MATCHES, 1);
- }
-
- @Test
- public void testNonWritableOutputFile() throws Exception {
- final File existingFile = new File(basecallsDir, "s_1_1101_barcode.txt.gz");
- try {
- existingFile.setReadOnly();
- final String readStructure = "25T8B25T";
- final int lane = 1;
-
- final File metricsFile = File.createTempFile("eib.", ".metrics");
- metricsFile.deleteOnExit();
-
- final List<String> args = new ArrayList<String>(Arrays.asList(
- "BASECALLS_DIR=" + basecallsDir.getPath(),
- "LANE=" + lane,
- "READ_STRUCTURE=" + readStructure,
- "METRICS_FILE=" + metricsFile.getPath(),
- "COMPRESS_OUTPUTS=true"
- ));
- for (final String barcode : BARCODES) {
- args.add("BARCODE=" + barcode);
- }
- Assert.assertEquals(new ExtractIlluminaBarcodes().instanceMain(args.toArray(new String[args.size()])), 4);
- }
- finally {
- existingFile.setWritable(true);
- }
-
- }
-
- /**
- * 4 cases tested:
- * * exact match to ACAGTG
- * * inexact match within threshold to TGACCA
- * * inexact match not within threshold to TGACCA
- * * inexact match where the next match is too close to ACAGTG
- * @throws Exception
- */
- @Test
- public void testBarcodeMatching() throws Exception {
- final int lane = 1;
- final int barcodePosition = 26;
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(lane, "25T8B25T");
-
- ExtractIlluminaBarcodes.BarcodeMetric metricOne = null;
- ExtractIlluminaBarcodes.BarcodeMetric metricTwo = null;
- ExtractIlluminaBarcodes.BarcodeMetric metricNoMatch = null;
- for (final ExtractIlluminaBarcodes.BarcodeMetric metric : metricsFile.getMetrics()) {
- if (metric.BARCODE.equals(BARCODES[0])) {
- metricOne = metric;
- } else if (metric.BARCODE.equals(BARCODES[2])) {
- metricTwo = metric;
- } else if (metric.BARCODE.equals("NNNNNNNN")) {
- metricNoMatch = metric;
- }
- }
- Assert.assertEquals(metricOne.PERFECT_MATCHES, 5);
- Assert.assertEquals(metricOne.ONE_MISMATCH_MATCHES, 0);
- Assert.assertEquals(metricOne.PF_READS, 3);
- Assert.assertEquals(metricOne.READS, 5);
-
- // one inexact match
- Assert.assertEquals(metricTwo.READS, 4);
- Assert.assertEquals(metricTwo.ONE_MISMATCH_MATCHES, 0);
-
- Assert.assertEquals(metricNoMatch.READS, 140);
- Assert.assertEquals(metricNoMatch.PF_READS, 112);
-
- // Check the barcode files themselves
- final File[] barcodeFiles = IoUtil.getFilesMatchingRegexp(basecallsDir, "s_" + lane + "_\\d{4}_barcode.txt");
- Arrays.sort(barcodeFiles);
-
- final BasicInputParser barcodeParser = new BasicInputParser(true, barcodeFiles);
-
- // Exact match
- String[] illuminaFields = barcodeParser.next();
- Assert.assertEquals(illuminaFields[1], "Y");
- Assert.assertEquals(illuminaFields[2], "CAACTCTC");
-
- // Inexact match
- illuminaFields = barcodeParser.next();
- Assert.assertEquals(illuminaFields[1], "Y");
- Assert.assertEquals(illuminaFields[2], "ACAGGTAT");
-
- // Too many mismatches
- illuminaFields = barcodeParser.next();
- Assert.assertEquals(illuminaFields[1], "N");
-
- barcodeParser.close();
-
- // Tack on test of barcode-informed Illumina Basecall parsing
- final ReadStructure rs = new ReadStructure("25T8B25T");
- final IlluminaDataProviderFactory factory = new IlluminaDataProviderFactory(basecallsDir, lane, rs,
- new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY),
- IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Barcodes);
- testParsing(factory, rs, metricOne, barcodePosition);
- }
-
- @Test
- public void testDualBarcodes() throws Exception {
- final File metricsFile = File.createTempFile("dual.", ".metrics");
- metricsFile.deleteOnExit();
-
- final List<String> args = new ArrayList<String>(Arrays.asList(
- "BASECALLS_DIR=" + dual.getAbsolutePath(),
- "LANE=" + 1,
- "METRICS_FILE=" + metricsFile.getPath(),
- "READ_STRUCTURE=" + "25T8B8B25T"
- ));
-
- args.add("BARCODE=" + "CAATAGTCCGACTCTC");
-
- Assert.assertEquals(new ExtractIlluminaBarcodes().instanceMain(args.toArray(new String[args.size()])), 0);
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer> result = new MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer>();
- result.read(new FileReader(metricsFile));
- Assert.assertEquals(result.getMetrics().get(0).PERFECT_MATCHES, 1, "Got wrong number of perfect matches");
- Assert.assertEquals(result.getMetrics().get(0).ONE_MISMATCH_MATCHES, 0, "Got wrong number of one-mismatch matches");
- }
-
- /**
- * Testing the quality thresholding. Looking at a single barcode (ACAGTG) with a min quality of 25 and no mismatches
- */
- @Test(dataProvider = "qualityBarcodeData")
- public void testQualityBarcodes(final int quality,
- final int maxMismatches, final int perfectMatches, final int oneMismatch,
- final String testName) throws Exception {
- final File metricsFile = File.createTempFile("qual.", ".metrics");
- metricsFile.deleteOnExit();
-
- final List<String> args = new ArrayList<String>(Arrays.asList(
- "BASECALLS_DIR=" + qual.getPath(),
- "LANE=" + 1,
- "READ_STRUCTURE=25T8B25T",
- "METRICS_FILE=" + metricsFile.getPath(),
- "MINIMUM_BASE_QUALITY=" + quality,
- "MAX_MISMATCHES=" + maxMismatches,
- "BARCODE=CAATAGTC"
- ));
-
- Assert.assertEquals(new ExtractIlluminaBarcodes().instanceMain(args.toArray(new String[args.size()])), 0);
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer> result = new MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer>();
- result.read(new FileReader(metricsFile));
- Assert.assertEquals(result.getMetrics().get(0).PERFECT_MATCHES, perfectMatches, "Got wrong number of perfect matches for test: '" + testName + "'");
- Assert.assertEquals(result.getMetrics().get(0).ONE_MISMATCH_MATCHES, oneMismatch, "Got wrong number of one-mismatch matches for test: '" + testName + "'");
- }
-
- @DataProvider(name = "qualityBarcodeData")
- public Object[][] getQualityTestData() {
- return new Object[][] {
- {16, 0, 1, 0, "Barcode has good quality, 1 match"},
- {25, 0, 0, 0, "Barcode has quality failures, no matches"}
- };
- }
-
- private void testParsing(final IlluminaDataProviderFactory factory, final ReadStructure readStructure, final ExtractIlluminaBarcodes.BarcodeMetric metricACAGTG, final int barcodePosition) {
-
- int numReads = 0;
-
- final IlluminaDataProvider dataProvider = factory.makeDataProvider();
- while (dataProvider.hasNext()) {
- final ClusterData cluster = dataProvider.next();
-
- if(metricACAGTG.BARCODE.equals(cluster.getMatchedBarcode())) {
- ++numReads;
- }
-
- Assert.assertEquals(cluster.getRead(readStructure.templates.getIndices()[0]).getQualities().length, barcodePosition - 1);
- Assert.assertEquals(cluster.getRead(readStructure.templates.getIndices()[0]).getBases().length, barcodePosition - 1);
- }
- Assert.assertEquals(numReads, metricACAGTG.READS);
- dataProvider.close();
- }
-
- private MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> runIt(final int lane, final String readStructure)
- throws Exception {
- final File metricsFile = File.createTempFile("eib.", ".metrics");
- metricsFile.deleteOnExit();
-
- final List<String> args = new ArrayList<String>(Arrays.asList(
- "BASECALLS_DIR=" + basecallsDir.getPath(),
- "LANE=" + lane,
- "READ_STRUCTURE=" + readStructure,
- "METRICS_FILE=" + metricsFile.getPath()
- ));
- for (final String barcode : BARCODES) {
- args.add("BARCODE=" + barcode);
- }
- return runIt(args, metricsFile);
- }
-
- private MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> runIt(final List<String> args, final File metricsFile) throws Exception {
-
- // Generate _barcode.txt files and metrics file.
- Assert.assertEquals(new ExtractIlluminaBarcodes().instanceMain(args.toArray(new String[args.size()])), 0);
-
- final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer> retval = new MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer>();
- retval.read(new FileReader(metricsFile));
- return retval;
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToFastqTest.java b/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToFastqTest.java
deleted file mode 100644
index 1ffe88c..0000000
--- a/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToFastqTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.picard.illumina.parser.ReadStructure;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.BufferedLineReader;
-import net.sf.samtools.util.LineReader;
-import net.sf.samtools.util.StringUtil;
-import net.sf.samtools.util.TestUtil;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class IlluminaBasecallsToFastqTest {
-
- private static final File BASECALLS_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
- private static final File DUAL_BASECALLS_DIR = new File("testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls");
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/fastq");
- private static final File DUAL_TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B8B25T/fastq");
-
- @Test
- public void testNonBarcoded() throws Exception {
- final String suffix = ".1.fastq";
- final File outputFastq1 = File.createTempFile("nonBarcoded.", suffix);
- outputFastq1.deleteOnExit();
- final String outputPrefix = outputFastq1.getAbsolutePath().substring(0, outputFastq1.getAbsolutePath().length() - suffix.length());
- final File outputFastq2 = new File(outputPrefix + ".2.fastq");
- outputFastq2.deleteOnExit();
- final int lane = 1;
- new IlluminaBasecallsToFastq().instanceMain(new String[]{
- "BASECALLS_DIR=" + BASECALLS_DIR,
- "LANE=" + lane,
- "READ_STRUCTURE=25T8B25T",
- "OUTPUT_PREFIX=" + outputPrefix,
- "RUN_BARCODE=HiMom",
- "MACHINE_NAME=machine1",
- "FLOWCELL_BARCODE=abcdeACXX"
- });
- IoUtil.assertFilesEqual(outputFastq1, new File(TEST_DATA_DIR, "nonBarcoded.1.fastq"));
- IoUtil.assertFilesEqual(outputFastq2, new File(TEST_DATA_DIR, "nonBarcoded.2.fastq"));
- }
-
- @Test
- public void testMultiplexWithIlluminaReadNameHeaders() throws Exception {
- final File outputDir = File.createTempFile("testMultiplexRH.", ".dir");
- try {
- outputDir.delete();
- outputDir.mkdir();
- outputDir.deleteOnExit();
-
- final String filePrefix = "testMultiplexRH";
- final File outputPrefix = new File(outputDir, filePrefix);
-
- new IlluminaBasecallsToFastq().instanceMain(new String[]{
- "BASECALLS_DIR=" + BASECALLS_DIR,
- "LANE=" + 1,
- "RUN_BARCODE=HiMom",
- "READ_STRUCTURE=" + "25T8B25T",
- "OUTPUT_PREFIX=" + outputPrefix.getAbsolutePath(),
- "MACHINE_NAME=machine1",
- "FLOWCELL_BARCODE=abcdeACXX",
- "READ_NAME_FORMAT=" + IlluminaBasecallsToFastq.ReadNameFormat.ILLUMINA
- });
-
- final String[] filenames = new String[]{
- filePrefix + ".1.fastq",
- filePrefix + ".barcode_1.fastq"
- };
- for (String filename : filenames) {
- IoUtil.assertFilesEqual(new File(outputDir, filename), new File(TEST_DATA_DIR, filename));
- }
-
- } finally {
- TestUtil.recursiveDelete(outputDir);
- }
- }
-
- @Test
- public void testDeMultiplexed() throws Exception {
- runStandardTest(1, "multiplexedBarcode.", "mp_barcode.params", 1, "25T8B25T", BASECALLS_DIR, TEST_DATA_DIR);
- }
-
- @Test
- public void testDualBarcodes() throws Exception {
- runStandardTest(1, "dualBarcode.", "barcode_double.params", 2, "25T8B8B25T", DUAL_BASECALLS_DIR, DUAL_TEST_DATA_DIR);
- }
-
- /**
- * This test utility takes a libraryParamsFile and generates output sam files through IlluminaBasecallsToFastq to compare against
- * preloaded test data
- *
- * @param jobName
- * @param libraryParamsFile
- * @param concatNColumnFields
- * @param readStructureString
- * @throws Exception
- */
- private void runStandardTest(final int lane, final String jobName, final String libraryParamsFile,
- final int concatNColumnFields, final String readStructureString, final File baseCallsDir,
- final File testDataDir) throws Exception {
- final File outputDir = File.createTempFile(jobName, ".dir");
- try {
- outputDir.delete();
- outputDir.mkdir();
- outputDir.deleteOnExit();
- // Create barcode.params with output files in the temp directory
- final File libraryParams = new File(outputDir, libraryParamsFile);
- libraryParams.deleteOnExit();
- final List<File> outputPrefixes = new ArrayList<File>();
- final LineReader reader = new BufferedLineReader(new FileInputStream(new File(testDataDir, libraryParamsFile)));
- final PrintWriter writer = new PrintWriter(libraryParams);
- final String header = reader.readLine();
- writer.println(header + "\tOUTPUT_PREFIX");
- while (true) {
- final String line = reader.readLine();
- if (line == null) {
- break;
- }
- final String[] fields = line.split("\t");
- final File outputPrefix = new File(outputDir, StringUtil.join("", Arrays.copyOfRange(fields, 0, concatNColumnFields)));
- outputPrefixes.add(outputPrefix);
- writer.println(line + "\t" + outputPrefix);
- }
- writer.close();
- reader.close();
-
- new IlluminaBasecallsToFastq().instanceMain(new String[]{
- "BASECALLS_DIR=" + baseCallsDir,
- "LANE=" + lane,
- "RUN_BARCODE=HiMom",
- "READ_STRUCTURE=" + readStructureString,
- "MULTIPLEX_PARAMS=" + libraryParams,
- "MACHINE_NAME=machine1",
- "FLOWCELL_BARCODE=abcdeACXX"
- });
-
- final ReadStructure readStructure = new ReadStructure(readStructureString);
- for (final File outputSam : outputPrefixes) {
- for (int i = 1; i <= readStructure.templates.length(); ++i) {
- String filename = outputSam.getName() + "." + i + ".fastq";
- IoUtil.assertFilesEqual(new File(outputSam.getParentFile(), filename), new File(testDataDir, filename));
- }
- for (int i = 1; i <= readStructure.barcodes.length(); ++i) {
- String filename = outputSam.getName() + ".barcode_" + i + ".fastq";
- IoUtil.assertFilesEqual(new File(outputSam.getParentFile(), filename), new File(testDataDir, filename));
- }
- }
- } finally {
- TestUtil.recursiveDelete(outputDir);
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToSamAdapterClippingTest.java b/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToSamAdapterClippingTest.java
deleted file mode 100644
index 4c2a863..0000000
--- a/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToSamAdapterClippingTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.samtools.*;
-import net.sf.picard.sam.ReservedTagConstants;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-
-import java.io.File;
-
-
-/**
- * Run IlluminaBasecallsToSam on a sample tests, then sanity-check the generated SAM file
- */
-public class IlluminaBasecallsToSamAdapterClippingTest {
-
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls");
- private static final String ALIAS = "myalias";
- private static final String RUN_BARCODE = "305PJAAXX080716";
-
- /**
- * Run IlluminaBasecallsToSam on a few test cases, and verify that results agree with hand-checked expectation.
- */
- @Test(dataProvider="data")
- public void testBasic(final String LANE, final String readStructure) throws Exception {
- // Create the SAM file from Gerald output
- final File samFile = File.createTempFile("." + LANE + ".illuminaBasecallsToSam", ".sam");
- samFile.deleteOnExit();
- final String[] illuminaArgv = {
- "BASECALLS_DIR=" + TEST_DATA_DIR,
- "LANE=" + LANE,
- "RUN_BARCODE=" + RUN_BARCODE,
- "READ_STRUCTURE=" + readStructure,
- "OUTPUT=" + samFile,
- "ALIAS=" + ALIAS
- };
- Assert.assertEquals(new IlluminaBasecallsToSam().instanceMain(illuminaArgv), 0);
-
- System.out.println ("Ouput Sam file is in " + samFile.getAbsolutePath());
-
- // Read the file and confirm it contains what is expected
- final SAMFileReader samReader = new SAMFileReader(samFile);
-
- // look for clipped adaptor attribute in lane 3 PE (2) and in lane 6 (1) non-PE
- int count = 0; int matchCount = 0;
- for (final SAMRecord record : samReader) {
- if (record.getIntegerAttribute(ReservedTagConstants.XT) != null) {
- count ++;
- if ((count == 1 || count == 2) && LANE.equals("2")){
- Assert.assertEquals (114, (int)record.getIntegerAttribute(ReservedTagConstants.XT));
- matchCount++;
- } else if (count == 1 || count == 2 && LANE.equals("1")) {
- Assert.assertEquals(68, (int) record.getIntegerAttribute(ReservedTagConstants.XT));
- matchCount++;
- }
- }
- }
- samReader.close();
- }
-
- @DataProvider(name="data")
- private Object[][] getIlluminaBasecallsToSamTestData(){
- return new Object[][] {
- {"1", "125T125T"},
- {"2", "125T125T"},
- };
- }
-
-
-}
\ No newline at end of file
diff --git a/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToSamTest.java b/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToSamTest.java
deleted file mode 100644
index b1d2c0f..0000000
--- a/src/tests/java/net/sf/picard/illumina/IlluminaBasecallsToSamTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.illumina;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.BufferedLineReader;
-import net.sf.samtools.util.LineReader;
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Run IlluminaBasecallsToSam in various barcode & non-barcode modes
- *
- * @author alecw at broadinstitute.org
- */
-public class IlluminaBasecallsToSamTest {
-
- private static final File BASECALLS_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
- private static final File DUAL_BASECALLS_DIR = new File("testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls");
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/sams");
- private static final File DUAL_TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B8B25T/sams");
- @Test
- public void testTileNumberComparator() {
- Assert.assertTrue(IlluminaBasecallsConverter.TILE_NUMBER_COMPARATOR.compare(100, 10) < 0, "");
- Assert.assertTrue(IlluminaBasecallsConverter.TILE_NUMBER_COMPARATOR.compare(20, 200) > 0, "");
- Assert.assertTrue(IlluminaBasecallsConverter.TILE_NUMBER_COMPARATOR.compare(10, 10) == 0, "");
- }
-
-
- @Test
- public void testNonBarcoded() throws Exception {
- final File outputBam = File.createTempFile("nonBarcoded.", ".sam");
- outputBam.deleteOnExit();
- final int lane = 1;
- new IlluminaBasecallsToSam().instanceMain(new String[]{
- "BASECALLS_DIR=" + BASECALLS_DIR,
- "LANE=" + lane,
- "READ_STRUCTURE=25S8S25T",
- "OUTPUT=" + outputBam,
- "RUN_BARCODE=HiMom",
- "SAMPLE_ALIAS=HiDad",
- "LIBRARY_NAME=Hello, World"
- });
- IoUtil.assertFilesEqual(outputBam, new File(TEST_DATA_DIR, "nonBarcoded.sam"));
- }
-
- @Test
- public void testMultiplexed() throws Exception {
- runStandardTest(1, "multiplexedBarcode.", "barcode.params", 1, "25T8B25T", BASECALLS_DIR, TEST_DATA_DIR);
- }
-
- //Same as testMultiplexed except we use BARCODE_1 instead of BARCODE
- @Test
- public void testMultiplexedWithAlternateBarcodeName() throws Exception {
- runStandardTest(1, "singleBarcodeAltName.", "multiplexed_positive_rgtags.params", 1, "25T8B25T", BASECALLS_DIR, TEST_DATA_DIR);
- }
-
- @Test
- public void testDualBarcodes() throws Exception {
- runStandardTest(1, "dualBarcode.", "barcode_double.params", 1, "25T8B8B25T", DUAL_BASECALLS_DIR, DUAL_TEST_DATA_DIR);
- }
-
- /**
- * Ensures that a run missing a barcode from the parameters file throws an error.
- *
- * TODO: This testcase isn't broken, but can spawn an issue with FileChannelJDKBugWorkAround since it expects
- * an exception to be thrown.
- */
- @Test(groups={"broken"})
- public void testCorruptDataReturnCode() throws Exception {
- boolean exceptionThrown = false;
- try {
- runStandardTest(9, "dualBarcode.", "negative_test.params", 2, "30T8B8B", BASECALLS_DIR, TEST_DATA_DIR);
- } catch (Throwable e) {
- exceptionThrown = true;
- } finally {
- Assert.assertTrue(exceptionThrown);
- }
- }
-
- /**
- * This test utility takes a libraryParamsFile and generates output sam files through IlluminaBasecallsToSam to compare against
- * preloaded test data
- *
- * @param jobName
- * @param libraryParamsFile
- * @param concatNColumnFields
- * @param readStructure
- * @throws Exception
- */
- private void runStandardTest(final int lane, final String jobName, final String libraryParamsFile,
- final int concatNColumnFields, final String readStructure,
- final File baseCallsDir, final File testDataDir) throws Exception {
- final File outputDir = File.createTempFile(jobName, ".dir");
- outputDir.delete();
- outputDir.mkdir();
- outputDir.deleteOnExit();
- // Create barcode.params with output files in the temp directory
- final File libraryParams = new File(outputDir, libraryParamsFile);
- libraryParams.deleteOnExit();
- final List<File> samFiles = new ArrayList<File>();
- final LineReader reader = new BufferedLineReader(new FileInputStream(new File(testDataDir, libraryParamsFile)));
- final PrintWriter writer = new PrintWriter(libraryParams);
- final String header = reader.readLine();
- writer.println(header + "\tOUTPUT");
- while (true) {
- final String line = reader.readLine();
- if (line == null) {
- break;
- }
- final String[] fields = line.split("\t");
- final File outputSam = new File(outputDir, StringUtil.join("", Arrays.copyOfRange(fields, 0, concatNColumnFields)) + ".sam");
- outputSam.deleteOnExit();
- samFiles.add(outputSam);
- writer.println(line + "\t" + outputSam);
- }
- writer.close();
- reader.close();
-
- new IlluminaBasecallsToSam().instanceMain(new String[]{
- "BASECALLS_DIR=" + baseCallsDir,
- "LANE=" + lane,
- "RUN_BARCODE=HiMom",
- "READ_STRUCTURE=" + readStructure,
- "LIBRARY_PARAMS=" + libraryParams
- });
-
- for (final File outputSam : samFiles) {
- IoUtil.assertFilesEqual(outputSam, new File(testDataDir, outputSam.getName()));
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/ReadStructureTest.java b/src/tests/java/net/sf/picard/illumina/ReadStructureTest.java
deleted file mode 100644
index 4bd5cb5..0000000
--- a/src/tests/java/net/sf/picard/illumina/ReadStructureTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package net.sf.picard.illumina;
-
-import net.sf.picard.illumina.parser.ReadStructure;
-import net.sf.picard.illumina.parser.ReadDescriptor;
-import net.sf.picard.illumina.parser.ReadType;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-import static net.sf.picard.illumina.parser.ReadType.*;
-import static net.sf.samtools.util.CollectionUtil.*;
-
-public class ReadStructureTest {
-
- //to make construction of lists more intelligible
- public ReadDescriptor rd(final int length, final ReadType rt) {
- return new ReadDescriptor(length, rt);
- }
-
- //Many of these readStructures would be non-sensical but check different test classes/combinations
- @DataProvider(name="validReadStructures")
- public Object[][] validReadStructures() {
- return new Object[][] {
- {"2T", makeList(rd(2, T)), 1, 0, 0},
- {"1234B", makeList(rd(1234, B)), 0, 1, 0},
- {Integer.MAX_VALUE + "S", makeList(rd(Integer.MAX_VALUE, S)), 0, 0, 1},
-
- {"76T76T", makeList(rd(76, T), rd(76, T)), 2, 0, 0},
- {"76T1B", makeList(rd(76, T), rd(1, B)), 1, 1, 0},
- {"76B1T", makeList(rd(76, B), rd(1, T)), 1, 1, 0},
- {"1S1B", makeList(rd(1, S), rd(1, B)), 0, 1, 1},
- {"1T999S", makeList(rd(1, T), rd(999, S)), 1, 0, 1},
-
- {"100T20T100T", makeList(rd(100, T), rd(20, T), rd(100, T)), 3, 0, 0},
- {"2S50S10S", makeList(rd(2, S), rd(50, S), rd(10, S)), 0, 0, 3},
- {"10T1B11T", makeList(rd(10, T), rd(1, B), rd(11, T)), 2, 1, 0},
- {"201T13T111B", makeList(rd(201, T), rd(13, T), rd(111, B)), 2, 1, 0},
- {"15B1T1T", makeList(rd(15, B), rd(1, T), rd(1, T)), 2, 1, 0},
- {"99B7T6B", makeList(rd(99, B), rd(7, T), rd(6, B)), 1, 2, 0},
- {"631B776S638T", makeList(rd(631, B), rd(776, S), rd(638, T)), 1, 1, 1},
-
-
- {"3T7B60S2T", makeList(rd(3, T), rd(7, B), rd(60, S), rd(2, T)), 2, 1, 1},
- {"20B9S100T1T", makeList(rd(20, B), rd(9, S), rd(100, T), rd(1, T)), 2, 1, 1},
- {"33T42B9T81B", makeList(rd(33, T), rd(42, B), rd(9, T), rd(81, B)), 2, 2, 0},
- {"28B56B13T123S", makeList(rd(28, B), rd(56, B), rd(13, T), rd(123,S)), 1, 2, 1},
- {"92S8B8B32B", makeList(rd(92, S), rd(8, B), rd(8, B), rd(32, B)), 0, 3, 1},
-
- {"2S88B7T8S9T9T84B100S2S4B3B", makeList(rd(2,S), rd(88,B), rd(7,T), rd(8,S), rd(9,T), rd(9,T), rd(84,B), rd(100,S), rd(2,S), rd(4,B), rd(3,B)), 3, 4, 4}
- };
- }
-
- @DataProvider(name="invalidReadStructures")
- public Object[][] invalidReadStructures() {
- return new Object[][]{
- {"", new ArrayList<ReadDescriptor>()},
- {"0T", makeList(rd(0, T))},
- {"-1T", makeList(rd(-1, T))},
- {"0S" , makeList(rd(0, S))},
- {"-1B", makeList(rd(-1, B))},
- {"8C", null},
- {"B5", null},
- {"SS", null},
- {"75TS", null},
- {"8*T", null},
- {"-66S1B", makeList(rd(-66, S), rd(1, B))},
- {"-0T5B8C", null},
- {"77T82B0S", makeList(rd(77, T), rd(82, B), rd(0, S))}
- };
- }
-
- @DataProvider(name="invalidReadStructuresFromList")
- public Object[][] invalidReadStructuresFromList() {
- int numTests = 0;
- for(final Object [] args : invalidReadStructures()) {
- if(args[1] != null) ++numTests;
- }
-
- final Object [][] outObjs = new Object[numTests][2];
-
- numTests = 0;
- for(final Object [] args : invalidReadStructures()) {
- if(args[1] != null) {
- outObjs[numTests++] = args;
- }
- }
-
- return outObjs;
- }
-
- @Test(dataProvider = "validReadStructures")
- public void testValidStructuresFromString(final String rsString, final List<ReadDescriptor> descriptors, final int numTemplates, final int numBarcodes, final int numSkips) {
- final ReadStructure readStructure = new ReadStructure(rsString);
- testReadStructure(readStructure, rsString, descriptors, numTemplates, numBarcodes, numSkips);
- }
-
- @Test(dataProvider = "validReadStructures")
- public void testValidStructuresFromList(final String rsString, final List<ReadDescriptor> descriptors, final int numTemplates, final int numBarcodes, final int numSkips) {
- final ReadStructure readStructure = new ReadStructure(descriptors);
- testReadStructure(readStructure, rsString, descriptors, numTemplates, numBarcodes, numSkips);
- }
-
- private void testReadStructure(final ReadStructure readStructure, final String structureString, final List<ReadDescriptor> descriptors, final int numTemplates, final int numBarcodes, final int numSkips) {
- Assert.assertEquals(readStructure.toString(), structureString);
-
- int totalCycles = 0;
-
- int tIndex = 0;
- int bIndex = 0;
- int sIndex = 0;
-
- for(int i = 0; i < descriptors.size(); i++) {
- Assert.assertEquals(readStructure.descriptors.get(i), descriptors.get(i));
- switch(readStructure.descriptors.get(i).type) {
- case T:
- Assert.assertEquals(i, readStructure.templates.getIndices()[tIndex++]);
- break;
- case B:
- Assert.assertEquals(i, readStructure.barcodes.getIndices()[bIndex++]);
- break;
- case S:
- Assert.assertEquals(i, readStructure.skips.getIndices()[sIndex++]);
- break;
- default:
- Assert.fail("Unrecognized read type: " + readStructure.descriptors.get(i).type);
- }
- totalCycles += readStructure.descriptors.get(i).length;
- }
-
- Assert.assertEquals(readStructure.totalCycles, totalCycles);
- Assert.assertEquals(readStructure.barcodes.length(), numBarcodes);
- Assert.assertEquals(readStructure.templates.length(), numTemplates);
- Assert.assertEquals(readStructure.skips.length(), numSkips);
-
- }
-
- @Test(dataProvider = "invalidReadStructures", expectedExceptions = IllegalArgumentException.class)
- public void testInvalidReadStructureFromString(final String rsString, final List<ReadDescriptor> descriptors) {
- final ReadStructure readStructure = new ReadStructure(rsString);
- }
-
- @Test(dataProvider = "invalidReadStructuresFromList", expectedExceptions = IllegalArgumentException.class)
- public void testInvalidReadStructureFromList(final String rsString, final List<ReadDescriptor> descriptors) {
- final ReadStructure readStructure = new ReadStructure(descriptors);
- }
-
- @DataProvider(name="substructuresToReadStructureData")
- public Object [][] substructureToReadStructureData() {
- return new Object[][] {
- {new ReadStructure("10T10T").templates, "10T10T" },
- {new ReadStructure("10T8B10T").nonSkips, "10T8B10T"},
- {new ReadStructure("8S10T8B8S10T").nonSkips, "10T8B10T"},
- {new ReadStructure("10T8S8S10T").skips, "8S8S" },
- {new ReadStructure("8B").barcodes, "8B" }
- };
- }
-
- @Test(dataProvider = "substructuresToReadStructureData")
- public void testSubstructureToReadStructure(final ReadStructure.Substructure substructure, final String outputRs) {
- Assert.assertEquals(substructure.toReadStructure().toString(), outputRs);
- }
-
- @DataProvider(name="substructureToReadStructureNegativeData")
- public Object[][] substructureToReadStructureNegativeData() {
- return new Object[][] {
- {new ReadStructure("10T").barcodes },
- {new ReadStructure("10S").nonSkips },
- {new ReadStructure("10S8B").templates},
- };
- }
-
- @Test(dataProvider = "substructureToReadStructureNegativeData", expectedExceptions = IllegalArgumentException.class)
- public void testSubstructureToReadStructure(final ReadStructure.Substructure substructure) {
- substructure.toReadStructure().toString();
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/BclParserTest.java b/src/tests/java/net/sf/picard/illumina/parser/BclParserTest.java
deleted file mode 100644
index 7894b8e..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/BclParserTest.java
+++ /dev/null
@@ -1,464 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.io.IoUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import static net.sf.picard.illumina.parser.BinTdUtil.*;
-
-public class BclParserTest {
- public static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001");
- public static final File MULTI_TILE_DATA_DIR = new File("/seq/tng/jcarey/testdata/NextSeq/Data/Intensities/BaseCalls/L001");
- public static final String READ_STRUCTURE = "25T8B25T";
- public static final String READ_STRUCTURE_WSKIPS = "25S8B25S";
- public static final String READ_STRUCTURE_WSKIPS_PARTIAL = "10T5S10T8B5T20S";
- public static final String READ_STRUCTURE_WSKIPS_BAD = "10T5S10T2B4S2B5T20S";
- public static final int[] READ_LENGTHS = new int[]{25, 8, 25};
- public static final int LANE = 1;
- public static final IlluminaDataType DATA_TYPES[] = {IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores};
- public static final int TILE_SIZES = 60;
-
-
- public static Integer[] boxArr(final int[] ints) {
- final Integer[] boxArr = new Integer[ints.length];
- for (int i = 0; i < boxArr.length; i++) {
- boxArr[i] = ints[i];
- }
-
- return boxArr;
- }
-
- @DataProvider(name = "tileMaps")
- public Object[][] getTileMaps() {
- return new Object[][]{
- //TILES, NUM_CLUSTER TO BE READ, SEEK AT THIS READ, INDEX TO TILETOSEEK, ORDERED TILE INDEX (FOR OUT OF ORDER TILES)
- {new int[]{1101, 1201, 2101}, 180, -1, -1, -1},
- {new int[]{1101, 2101, 1201}, 180, -1, -1, -1},
- {new int[]{2101, 1201}, 120, -1, -1, -1},
- {new int[]{1101, 2101}, 120, -1, -1, -1},
- {new int[]{1101}, 60, -1, -1, -1},
-
- //Cases with seeking
- {new int[]{1101, 1201, 2101}, 206, 25, 0, 0},
- {new int[]{1101, 2101, 1201}, 206, 25, 0, 0},
- {new int[]{2101, 1201}, 80, 19, 0, 1},
- {new int[]{1101, 2101}, 156, 35, 0, 0},
- {new int[]{1101}, 66, 5, 0, 0}
- };
- }
-
- @DataProvider(name = "multiTileMaps")
- public Object[][] getMultiTileMaps() {
- return new Object[][]{
- //TILES, NUM_CLUSTER TO BE READ, SEEK AT THIS READ, INDEX TO TILETOSEEK, ORDERED TILE INDEX (FOR OUT OF ORDER TILES)
- {new int[]{11101, 11102, 11103}, 341292, -1, -1, -1}
- };
- }
-
-
- public void compareClusterToBclData(final ClusterData cluster, final BclData bclData, final int clusterNum, final int countNum) {
- final byte[][] bases = bclData.getBases();
- final byte[][] qualities = bclData.getQualities();
-
- Assert.assertEquals(bases.length, cluster.getNumReads(), "At cluster num " + clusterNum);
- Assert.assertEquals(qualities.length, cluster.getNumReads(), "At cluster num " + clusterNum);
-
- final StringBuilder baseBuilder = new StringBuilder();
- final StringBuilder qualBuilder = new StringBuilder();
- final StringBuilder barcode = new StringBuilder();
- baseBuilder.append("new byte[]{");
- for (int i = 0; i < bases.length; i++) {
- final byte[] subBase = bases[i];
- final byte[] subQual = qualities[i];
- for (int j = 0; j < subBase.length; j++) {
- if ((char) subBase[j] == '.') {
- baseBuilder.append('P');
- } else {
- baseBuilder.append((char) subBase[j]);
- }
- baseBuilder.append(",");
- qualBuilder.append(subQual[j]);
- qualBuilder.append(",");
- if (i == 1) {
- if ((char) subBase[j] == '.') {
- barcode.append('P');
- } else {
- barcode.append((char) subBase[j]);
- }
- }
- }
- }
- baseBuilder.deleteCharAt(baseBuilder.length() - 1);
- qualBuilder.deleteCharAt(qualBuilder.length() - 1);
- baseBuilder.append("},\n new byte[]{");
- baseBuilder.append(qualBuilder.toString());
- baseBuilder.append("},\n \"");
- baseBuilder.append(barcode.toString());
- baseBuilder.append("\"");
-
- for (int i = 0; i < cluster.getNumReads(); i++) {
- if (!Arrays.equals(bases[i], cluster.getRead(i).getBases())) {
- System.out.println(cluster.getLane() + " : " + cluster.getTile() + " : " + clusterNum);
- System.out.println(baseBuilder.toString());
- }
- Assert.assertEquals(bases[i], cluster.getRead(i).getBases(), " Bases differ for read " + i + " at cluster num " + clusterNum + " at cluster count " + countNum);
- Assert.assertEquals(qualities[i], cluster.getRead(i).getQualities(), " Qualities differ for read " + i + " at cluster num " + clusterNum + " at cluster count " + countNum);
- }
- }
-
- public void fullBclParserTestImpl(final File dir, final String readStructure, final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex,
- final boolean multiTile) {
- final ReadStructure rs = new ReadStructure(readStructure);
- final OutputMapping outputMapping = new OutputMapping(rs);
- final IlluminaFileUtil util = new IlluminaFileUtil(dir.getParentFile(), LANE);
- final PerTilePerCycleFileUtil bclFileUtil = (PerTilePerCycleFileUtil) util.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Bcl);
- final MultiTileBclFileUtil multiTileBclFileUtil = (MultiTileBclFileUtil) util.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.MultiTileBcl);
-
-
- final List<Integer> tileIntegers = new ArrayList<Integer>();
- for (final int tile : tiles) {
- tileIntegers.add(tile);
- }
-
- final BclParser bclParser;
- if(multiTile){
- final File bci = new File(MULTI_TILE_DATA_DIR, "s_" + LANE + ".bci");
- bclParser = new MultiTileBclParser(dir, LANE, multiTileBclFileUtil.getFiles(tileIntegers, outputMapping.getOutputCycles()),
- outputMapping, true, new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY),
- new TileIndex(bci));
- }
- else{
- bclParser = new BclParser(dir, LANE, bclFileUtil.getFiles(tileIntegers, outputMapping.getOutputCycles()),
- outputMapping, new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY));
- }
-
-
- final Map<Integer, ClusterData> testData = BinTdUtil.clusterData(LANE, Arrays.asList(boxArr(tiles)), readStructure, DATA_TYPES);
-
- int count = 0;
- int readNum = 0;
- while (bclParser.hasNext()) {
- final BclData bclData = bclParser.next();
- if (testData.containsKey(readNum)) {
- compareClusterToBclData(testData.get(readNum), bclData, readNum, count);
- }
-
- if (count == seekAfter) {
- bclParser.seekToTile(tiles[newTileIndex]);
- readNum = (orderedTileIndex * TILE_SIZES);
- } else {
- readNum++;
- }
- count++;
- }
- Assert.assertEquals(count, size);
- bclParser.close();
- }
-
- public static void deleteBclFiles(final File laneDirectory, final String readStructure) {
- final ReadStructure rs = new ReadStructure(readStructure);
- int index = 1;
- for (final ReadDescriptor rd : rs.descriptors) {
- if (rd.type == ReadType.S) {
- for (int i = index; i < index + rd.length; i++) {
- final File cycleDir = new File(laneDirectory, "C" + i + ".1");
- final File[] cycleFiles = cycleDir.listFiles();
- for (final File toDelete : cycleFiles) {
- if (!toDelete.delete()) {
- throw new RuntimeException("Couldn't delete file " + toDelete.getAbsolutePath());
- }
- }
- }
- }
-
- index += rd.length;
- }
- }
-
- @Test(dataProvider = "tileMaps")
- public void fullBclParserTest(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
- fullBclParserTestImpl(TEST_DATA_DIR, READ_STRUCTURE, tiles, size, seekAfter, newTileIndex, orderedTileIndex, false);
- }
-
- //@Test(dataProvider = "multiTileMaps")
- public void fullMTBclParserTest(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
- fullBclParserTestImpl(MULTI_TILE_DATA_DIR, READ_STRUCTURE, tiles, size, seekAfter, newTileIndex, orderedTileIndex, true);
- }
-
-
- @Test(dataProvider = "tileMaps")
- public void fullBclParserTestWSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
- fullBclParserTestImpl(TEST_DATA_DIR, READ_STRUCTURE_WSKIPS, tiles, size, seekAfter, newTileIndex, orderedTileIndex, false);
- }
-
- @Test(dataProvider = "tileMaps")
- public void fullBclParserTestWDeletedSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
- fullBclParserTestWDeletedSkipsImpl(tiles, size, seekAfter, newTileIndex, orderedTileIndex, READ_STRUCTURE_WSKIPS);
- }
-
- @Test(dataProvider = "tileMaps")
- public void fullBclParserTestWPartiallyDeletedSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
- fullBclParserTestWDeletedSkipsImpl(tiles, size, seekAfter, newTileIndex, orderedTileIndex, READ_STRUCTURE_WSKIPS_PARTIAL);
- }
-
- @Test(dataProvider = "tileMaps", expectedExceptions = RuntimeException.class)
- public void fullBclParserTestWBadDeletedSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
- fullBclParserTestWDeletedSkipsImpl(tiles, size, seekAfter, newTileIndex, orderedTileIndex, READ_STRUCTURE_WSKIPS_BAD);
- }
-
- public void fullBclParserTestWDeletedSkipsImpl(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex, final String readStructure) {
- final File basecallDir = IoUtil.createTempDir("bclParserTest", "BaseCalls");
-
- Exception exc = null;
- try {
- final File l001 = new File(basecallDir, "L001");
- if (!l001.mkdir()) {
- throw new RuntimeException("Couldn't make lane dir " + l001.getAbsolutePath());
- }
-
- copyBcls(TEST_DATA_DIR, l001);
- deleteBclFiles(l001, readStructure);
- fullBclParserTestImpl(l001, READ_STRUCTURE_WSKIPS, tiles, size, seekAfter, newTileIndex, orderedTileIndex, false);
- } catch (final Exception thrExc) {
- exc = thrExc;
- } finally {
- IoUtil.deleteDirectoryTree(basecallDir);
- }
- if (exc != null) {
- if (exc.getClass() == PicardException.class) {
- throw new PicardException(exc.getMessage());
- }
- throw new RuntimeException(exc);
- }
- }
-
- //Custom copy function to avoid copying .svn files etc...
- public static void copyBcls(final File srcLaneDir, final File dstDir) {
- final File[] listFiles = srcLaneDir.listFiles();
-
- for (final File dir : listFiles) {
- if (dir.isDirectory()) {
- File cycleDir = null;
-
- for (final File file : dir.listFiles()) {
- if (file.getName().endsWith(".bcl")) {
- if (cycleDir == null) {
- cycleDir = new File(dstDir, dir.getName());
- if (!cycleDir.mkdir()) {
- throw new RuntimeException("Couldn't make directory (" + cycleDir.getAbsolutePath() + ")");
- }
- }
-
- IoUtil.copyFile(file, new File(cycleDir, file.getName()));
- }
- }
- }
- }
- }
-
-
- //Helper byte [] tuple for EAMSS testing
- class BasesAndQuals {
- public final byte[] bases;
- public final byte[] quals;
- public final byte[] maskedQuals;
-
- public BasesAndQuals(final byte[] bases, final byte[] quals, final Integer maskStart) {
- this.bases = bases;
- this.quals = quals;
- this.maskedQuals = qualsMaskedFrom(maskStart);
- }
-
- private byte[] qualsMaskedFrom(final Integer maskStart) {
- final byte[] maskedQuals = Arrays.copyOf(quals, quals.length);
- if (maskStart != null) {
- for (int i = maskStart; i < maskedQuals.length; i++) {
- maskedQuals[i] = BclParser.MASKING_QUALITY;
- }
- }
- return maskedQuals;
- }
-
- public String toString() {
- return "BasesAndQuals( " + basesToString() + ", " + qualsToString(quals) + ", " + qualsToString(maskedQuals) + ")";
- }
-
- public String basesToString() {
- final StringBuilder sb = new StringBuilder(bases.length);
- for (final byte base : bases) {
- switch (base) {
- case A:
- sb.append("A ");
- break;
- case C:
- sb.append("C ");
- break;
- case G:
- sb.append("G ");
- break;
- case T:
- sb.append("T ");
- break;
- case P:
- sb.append(". ");
- break;
-
- default:
- throw new RuntimeException("THIS SHOULD NOT HAPPEN! Bad byte in bases!");
- }
- }
-
- return sb.toString();
- }
-
- public String qualsToString(final byte[] qualsToConvert) {
-
- final StringBuilder sb = new StringBuilder(bases.length);
- for (final byte qual : qualsToConvert) {
- sb.append(String.valueOf((int) qual));
- sb.append(",");
- }
-
- return sb.toString();
- }
- }
-
- @DataProvider(name = "eamssDataNo10GSeries")
- public Object[][] eamssDataNo10GSeries() {
-
- return new Object[][]{
- //Non-masking cases
-
- //tally very negative, 9G's
- {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
- new byte[]{13, 7, 35, 32, 31, 33, 31, 26, 29},
- null)},
-
- //tally barely negative
- {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
- new byte[]{13, 7, 35, 26, 18, 19, 35, 8, 33},
- null)},
-
- //Reaches 0, A stretch of more than 10 other types of bases
- {new BasesAndQuals(new byte[]{A, C, C, C, C, C, C, C, C, C, C, C, T, G, G, C, T, A, A},
- new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 19, 7, 6, 5, 35, 2, 33, 22, 18, 16, 25},
- null)},
-
- //Stays at 0, Stretches of G's Separated
- {new BasesAndQuals(new byte[]{T, G, G, G, G, G, G, G, P, P, G, G, G, G, G, G, G, T, A, A, G, G, G},
- new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 2, 2, 6, 5, 35, 2, 33, 22, 18, 16, 25, 33, 32, 16, 18},
- null)},
-
- //shorter
- {new BasesAndQuals(new byte[]{T, A, C},
- new byte[]{25, 16, 16},
- null)},
-
- //Longer
- {new BasesAndQuals(new byte[]{T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A, T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A},
- new byte[]{25, 16, 16, 33, 22, 2, 2, 33, 35, 3, 31, 38, 22, 19, 25, 16, 16, 31, 30, 2, 2, 33, 26, 3, 31, 38, 22, 19, 2, 2, 30, 27, 28, 16, 2, 2, 30, 16, 19, 21, 22, 17, 19, 16, 16, 16},
- null)},
-
-
- //Masking-Cases
-
- //tally very positive, 9Gs X - Mask From here
- {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
- new byte[]{13, 7, 35, 32, 2, 16, 33, 14, 19},
- 7)},
-
- //tally barely negative X - Mask from here
- {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
- new byte[]{13, 7, 35, 33, 18, 2, 6, 8, 33},
- 4)},
- //Reaches 0, A stretch of more than 10 other types of bases X - Mask From here
- {new BasesAndQuals(new byte[]{A, C, C, C, C, C, C, C, C, C, C, C, T, G, G, C, T, A, A},
- new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 19, 32, 33, 5, 8, 2, 2, 2, 33, 16, 25},
- 11)},
- //Stays at 0, Stretches of G's Separated X- Mask from here
- {new BasesAndQuals(new byte[]{T, G, G, G, G, G, G, G, P, P, G, G, G, G, G, G, G, T, A, A, G, G, G},
- new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 2, 2, 6, 5, 35, 2, 33, 30, 13, 16, 7, 2, 2, 16, 18},
- 16)},
- //shorter X - Mask from here
- {new BasesAndQuals(new byte[]{T, A, C},
- new byte[]{2, 11, 13},
- 0)},
- //Longer X- Mask from here
- {new BasesAndQuals(new byte[]{T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A, T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A},
- new byte[]{25, 16, 16, 33, 22, 2, 2, 33, 35, 3, 31, 38, 22, 19, 25, 16, 16, 31, 30, 2, 2, 33, 26, 3, 31, 38, 22, 19, 2, 2, 30, 27, 28, 16, 2, 2, 30, 16, 19, 21, 22, 2, 19, 16, 2, 2},
- 26)}
- };
- }
-
- /** For more information on EAMSS check BclParser and the large comment above runEamssForReadInPlace * */
- @DataProvider(name = "eamssDataWithGSeries")
- public Object[][] eamssTestDat() {
- return new Object[][]{
-
- //9 G's followed by tally max X - Mask from here
- {new BasesAndQuals(new byte[]{A, C, G, G, T, G, G, G, G, G, G, G, G, G, A, C, T},
- new byte[]{7, 8, 33, 7, 12, 33, 16, 17, 2, 2, 32, 35, 35, 35, 2, 15, 9},
- 5)},
- //9 G's surpassed by tally max X - Mask from here
- {new BasesAndQuals(new byte[]{A, C, G, G, T, G, G, G, G, G, G, G, G, G, A, C, T},
- new byte[]{7, 8, 2, 7, 2, 2, 16, 17, 2, 2, 32, 35, 35, 35, 2, 15, 9},
- 0)},
- //10 G's ending before tally max X - Mask from here
- {new BasesAndQuals(new byte[]{A, C, G, G, T, G, G, G, G, G, G, G, G, G, A, C, T},
- new byte[]{7, 8, 2, 7, 2, 2, 16, 17, 2, 2, 32, 35, 35, 35, 33, 15, 9},
- 15)},
- //10 G's ending on tally max X - Mask from here Is this wrong?
- {new BasesAndQuals(new byte[]{A, C, C, G, C, C, G, G, G, G, G, G, G, G, G, G, T, T, A},
- new byte[]{33, 31, 29, 32, 28, 27, 30, 18, 18, 18, 18, 19, 19, 19, 33, 18, 9, 9, 19},
- 6)},
- //10 G's no masking
- {new BasesAndQuals(new byte[]{A, C, C, G, C, C, G, G, G, G, G, G, G, G, G, G, T, T, A},
- new byte[]{33, 31, 29, 32, 28, 27, 30, 18, 18, 18, 18, 19, 19, 19, 33, 18, 33, 32, 34},
- null)},
- //10 G' with an exception X - Mask from here
- {new BasesAndQuals(new byte[]{A, C, C, G, C, C, G, G, G, G, A, G, G, G, G, G, T, T, A},
- new byte[]{33, 31, 29, 32, 28, 27, 30, 18, 18, 18, 18, 19, 19, 19, 33, 18, 9, 9, 19},
- 6)},
- //longer than 10 G's X - Mask from here
- {new BasesAndQuals(new byte[]{A, C, G, G, G, C, G, G, G, G, G, G, G, G, G, G, T, T, A},
- new byte[]{33, 31, 29, 32, 28, 16, 33, 18, 18, 18, 18, 19, 19, 19, 33, 18, 3, 9, 19},
- 2)},
- //longer than 10 G's X - Mask from here
- {new BasesAndQuals(new byte[]{A, C, G, G, C, C, G, G, G, G, G, G, G, G, G, G, G, G, G},
- new byte[]{33, 31, 29, 32, 28, 16, 33, 18, 18, 18, 18, 19, 19, 19, 33, 34, 33, 33, 3},
- 6)},
- //longer than 10 G's
- {new BasesAndQuals(new byte[]{A, C, G, G, C, C, G, G, G, G, G, G, G, G, G, G, G, G, G, T, A, C, T, T, G, G, G, G, G, G, G, G, G, G, G, G, G},
- new byte[]{33, 31, 29, 32, 28, 16, 33, 18, 18, 18, 18, 19, 19, 19, 33, 34, 33, 33, 3, 33, 34, 2, 4, 8, 33, 7, 35, 15, 16, 31, 30, 38, 16, 15, 22, 29, 25},
- null)}
- };
- }
-
- public void testEamss(final BasesAndQuals bq) {
- final byte[] bases = Arrays.copyOf(bq.bases, bq.bases.length);
- final byte[] quals = Arrays.copyOf(bq.quals, bq.quals.length);
-
- BclParser.runEamssForReadInPlace(bases, quals);
- Assert.assertEquals(bases, bq.bases);
- Assert.assertEquals(quals, bq.maskedQuals);
- }
-
- @Test(dataProvider = "eamssDataNo10GSeries")
- public void eamssParsingTestNoGSeries(final BasesAndQuals bq) {
- testEamss(bq);
- }
-
- @Test(dataProvider = "eamssDataWithGSeries")
- public void eamssParsingTestWithGSeries(final BasesAndQuals bq) {
- testEamss(bq);
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/BinTdUtil.java b/src/tests/java/net/sf/picard/illumina/parser/BinTdUtil.java
deleted file mode 100644
index 519b11d..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/BinTdUtil.java
+++ /dev/null
@@ -1,307 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import java.io.File;
-import java.util.*;
-
-import static net.sf.samtools.util.CollectionUtil.makeList;
-
-//Illumina Dir Test Data
-public class BinTdUtil {
- public static final File IntensitiesDir = new File("testdata/net/sf/picard/illumina/CompleteIlluminaDir/Intensities/");
- public static final File basecallDir = new File("testdata/net/sf/picard/illumina/CompleteIlluminaDir/Intensities/BaseCalls");
-
- public static final String ltStr(final int lane, final int tile) {
- return "s_" + lane + "_" + tile;
- }
-
- public static final byte A = (byte) 65;
- public static final byte C = (byte) 67;
- public static final byte G = (byte) 71;
- public static final byte T = (byte) 84;
- public static final byte P = (byte) 46; //dot
- public static final Map<String, List<ClusterData>> goldData = new HashMap<String, List<ClusterData>>();
- public static final Map<String, List<Integer>> goldIndices = new HashMap<String, List<Integer>>();
- public static final Map<String, Integer> goldSizes = new HashMap<String, Integer>();
-
- static {
- int lane = 1;
- int tile = 1101;
- goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
- goldData.put(ltStr(lane, tile), makeList(
- makeCd(lane, tile, 1140, 2120, true,
- new byte[]{P, C, C, C, C, A, A, C, A, T, T, C, T, A, A, T, T, A, T, G, C, C, T, C, A, C, A, A, C, T, C, T, C, T, T, T, T, T, T, T, T, T, T, T, T, T, A, A, C, T, T, T, G, C, A, A, A, T},
- new byte[]{2, 16, 25, 33, 35, 37, 37, 35, 39, 37, 37, 35, 37, 40, 41, 41, 41, 40, 40, 41, 40, 40, 40, 40, 40, 31, 31, 31, 35, 35, 37, 35, 37, 31, 31, 31, 35, 35, 35, 35, 35, 39, 39, 39, 39, 37, 33, 31, 24, 37, 39, 40, 31, 33, 37, 39, 31, 31},
- "CAACTCTC"),
- makeCd(lane, tile, 1047, 2122, false,
- new byte[]{P,C,T,A,A,P,G,P,A,C,T,P,T,G,P,G,T,G,T,G,C,P,P,P,P,P,P,P,A,P,P,P,P,P,P,T,C,A,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,15,26,31,31,2,19,2,18,31,31,2,18,31,2,17,27,31,31,31,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1069, 2159, true,
- new byte[]{T,C,C,C,T,T,A,C,C,A,T,C,A,A,A,T,C,A,A,T,T,G,P,C,C,G,T,C,C,A,C,A,G,G,A,C,G,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{34,34,34,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,2,18,32,31,33,33,37,37,37,37,37,27,27,27,31,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- "GTCCACAG"),
- makeCd(lane, tile, 1175, 2197, true,
- new byte[]{C,C,C,C,T,G,A,G,G,A,C,A,C,C,A,T,C,C,C,A,C,T,C,C,A,C,C,A,A,C,A,T,T,A,A,G,A,G,C,T,G,G,G,G,A,A,C,A,T,C,C,A,G,A,A,A,G,G},
- new byte[]{34,34,34,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,41,41,41,34,34,34,37,37,37,37,37,33,34,31,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,41,41,41},
- "CCAACATT"),
- makeCd(lane, tile, 1048, 2197, false,
- new byte[]{P,C,T,C,C,P,G,P,T,C,A,P,C,A,P,G,T,G,G,A,G,P,P,P,P,P,P,P,C,P,P,P,P,P,P,G,T,G,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,15,26,30,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null)
- )
- );
- goldSizes.put(ltStr(lane, tile), 60);
-
- tile = 1201;
- goldIndices.put(ltStr(lane, tile), makeList(0, 1, 18, 19));
- goldData.put(ltStr(lane, tile), makeList(
- makeCd(lane, tile, 1187, 2100, true,
- new byte[]{P,G,C,G,G,T,A,A,T,T,C,C,A,G,C,T,C,C,A,A,T,A,G,C,G,T,A,T,C,T,G,C,C,A,A,A,A,A,A,G,A,G,C,C,C,G,C,A,T,T,G,C,C,G,A,G,A,C},
- new byte[]{2,16,25,33,33,17,31,35,39,39,37,39,39,40,40,40,40,39,39,40,40,38,39,38,38,34,34,34,37,37,37,37,37,28,27,28,26,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- "TATCTGCC"),
- makeCd(lane, tile, 1045, 2105, false,
- new byte[]{P,T,A,A,A,G,A,G,A,A,A,T,C,A,A,G,A,A,T,A,C,T,A,T,T,C,T,G,T,A,A,T,C,P,T,T,T,T,T,T,T,T,T,T,P,P,T,T,T,T,T,T,T,T,T,T,T,T},
- new byte[]{2,12,19,31,30,7,31,8,31,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,16,16,16,17,31,32,2,2,2,15,26,31,31,31,31,31,31,31,30,2,2,15,25,30,30,30,30,30,30,30,30,28,27},
- "CTGTAATC"),
- makeCd(lane, tile, 1159, 2179, false,
- new byte[]{G,T,T,A,G,C,A,C,A,G,A,T,A,T,T,G,G,A,T,G,A,G,T,G,A,A,A,A,A,A,A,A,A,T,T,T,T,T,T,T,T,T,A,T,T,T,T,T,C,T,A,A,A,T,A,C,T,T},
- new byte[]{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,28,28,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1103, 2184, true,
- new byte[]{G,T,A,A,G,A,A,C,T,A,C,C,C,T,G,G,G,T,C,C,C,C,G,T,G,T,T,G,T,C,T,A,T,A,G,A,A,G,T,T,T,C,A,G,A,A,T,T,G,T,G,G,C,C,C,C,A,T},
- new byte[]{31,31,33,37,37,37,37,37,39,39,39,39,39,41,41,41,41,38,40,41,41,41,41,39,40,31,34,34,37,37,37,37,37,33,31,33,37,37,35,36,37,39,39,39,39,39,41,41,41,38,39,40,41,41,41,41,41,40},
- "TTGTCTAT")
- ));
- goldSizes.put(ltStr(lane, tile), 60);
-
- tile = 2101;
- goldIndices.put(ltStr(lane, tile), makeList(7, 15, 16, 19));
- goldData.put(ltStr(lane, tile), makeList(
- makeCd(lane, tile, 1123, 2095, true,
- new byte[]{P,T,G,G,A,C,A,A,C,A,T,G,T,T,C,G,A,G,A,G,C,T,A,C,A,C,A,G,C,G,G,T,A,T,C,C,G,C,C,T,C,C,A,G,C,T,T,C,A,G,C,T,T,C,T,C,C,T},
- new byte[]{2,16,28,33,33,35,35,35,37,37,37,37,35,38,37,38,40,38,30,37,26,39,39,37,40,31,30,31,35,35,37,31,31,31,31,31,37,35,35,37,37,39,39,39,39,39,41,39,38,38,41,40,41,41,41,36,39,39},
- "CAGCGGTA"),
- makeCd(lane, tile, 1162, 2139, true,
- new byte[]{A,G,A,G,G,T,G,A,A,A,T,T,C,T,T,G,G,A,C,C,G,G,C,G,C,T,G,C,T,G,C,T,G,A,T,C,G,T,T,T,A,T,G,G,T,C,G,G,A,A,C,T,A,C,G,A,C,G},
- new byte[]{31,31,31,35,35,35,35,35,39,37,39,39,39,35,33,25,36,37,39,39,34,32,38,30,35,34,34,34,37,37,37,37,37,33,34,34,37,37,37,37,37,39,39,39,39,39,40,41,41,41,41,41,41,41,40,41,41,40},
- "TGCTGCTG"),
- makeCd(lane, tile, 1013, 2146, true,
- new byte[]{P,A,C,A,C,T,G,C,T,G,C,A,G,A,T,G,A,C,A,A,G,C,A,G,C,C,T,A,T,G,C,G,T,P,P,P,P,C,G,C,T,A,G,A,A,C,C,A,A,C,T,T,A,T,T,C,A,T},
- new byte[]{2,19,33,35,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,41,41,41,34,34,34,37,37,37,37,37,2,2,2,2,17,19,28,30,31,31,30,31,30,31,31,30,31,31,31,31,31,31,30,31,31},
- "CTATGCGT"),
- makeCd(lane, tile, 1245, 2154, true,
- new byte[]{T,C,G,T,T,A,A,G,T,A,T,A,T,T,C,T,T,A,G,G,T,A,T,T,T,C,T,G,T,A,A,T,C,A,C,C,A,A,T,C,A,G,T,A,G,C,A,C,C,A,C,T,A,T,A,C,A,C},
- new byte[]{34,34,34,37,37,35,37,37,37,39,37,39,39,40,40,41,41,41,41,41,37,41,41,41,40,31,34,34,37,37,37,37,37,34,34,34,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,40,41,41,41,41,41},
- "CTGTAATC")
- ));
- goldSizes.put(ltStr(lane, tile), 60);
-
- tile = 11101;
- goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
- goldData.put(ltStr(lane, tile), makeList(
- makeCd(lane, tile, 1140, 2120, true,
- new byte[]{P,A,A,C,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1047, 2122, false,
- new byte[]{P,A,A,G,A,C,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,27,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1069, 2159, true,
- new byte[]{P,C,T,T,G,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1175, 2197, true,
- new byte[]{P,A,A,A,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1048, 2197, false,
- new byte[]{P,A,A,G,A,C,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,27,22,32,32,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null)
- )
- );
- goldSizes.put(ltStr(lane, tile), 341292);
-
- tile = 11102;
- goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
- goldData.put(ltStr(lane, tile), makeList(
- makeCd(lane, tile, 1140, 2120, true,
- new byte[]{P,A,A,G,A,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1047, 2122, false,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1069, 2159, true,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1175, 2197, true,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1048, 2197, false,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null)
- )
- );
- goldSizes.put(ltStr(lane, tile), 366884);
-
- tile = 11103;
- goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
- goldData.put(ltStr(lane, tile), makeList(
- makeCd(lane, tile, 1140, 2120, true,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1047, 2122, false,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1069, 2159, true,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1175, 2197, true,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null),
- makeCd(lane, tile, 1048, 2197, false,
- new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
- new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- null)
- )
- );
- goldSizes.put(ltStr(lane, tile), 336434);
- }
-
- public static Map<Integer, ClusterData> clusterData(final int lane, final List<Integer> tiles, final String readStructure, final IlluminaDataType... dataTypes) {
- final List<Integer> sortedTiles = new ArrayList<Integer>(tiles);
- Collections.sort(sortedTiles);
-
- final Map<Integer, ClusterData> data = new HashMap<Integer, ClusterData>();
- int offset = 0;
- for (final int tile : sortedTiles) {
- final String key = ltStr(lane, tile);
- final List<ClusterData> cds = goldData.get(key);
- final List<Integer> readNos = goldIndices.get(key);
- final int size = goldSizes.get(key);
-
- for (int i = 0; i < cds.size(); i++) {
- data.put(offset + readNos.get(i), selectiveCopyCd(cds.get(i), readStructure, dataTypes));
- }
-
- offset += size;
- }
- return data;
- }
-
- public static ReadData[] copyReadData(final ReadStructure rs, final IlluminaDataType[] dts, final ClusterData toCopy) {
- boolean doBases = false;
- boolean doQuals = false;
-
- for (final IlluminaDataType dt : dts) {
- switch (dt) {
- case BaseCalls:
- doBases = true;
- break;
-
- case QualityScores:
- doQuals = true;
- break;
- }
- }
-
- if (!doBases && !doQuals)
- return null;
-
- final ReadData rdToCopy = toCopy.getRead(0); //Only gonna be one read in this
- final ReadData[] rds = new ReadData[rs.nonSkips.length()];
-
- int index = 0;
- int baseIndex = 0;
- for (int i = 0; i < rs.descriptors.size(); i++) {
- final ReadDescriptor readDesc = rs.descriptors.get(i);
-
- if (readDesc.type != ReadType.S) {
- final ReadData curRead = new ReadData(readDesc.type);
- if (doBases) {
- final byte[] bases = Arrays.copyOfRange(rdToCopy.getBases(), baseIndex, baseIndex + readDesc.length);
- curRead.setBases(bases);
- }
-
- if (doQuals) {
- final byte[] quals = Arrays.copyOfRange(rdToCopy.getQualities(), baseIndex, baseIndex + readDesc.length);
- curRead.setQualities(quals);
- }
-
- rds[index++] = curRead;
- }
-
- baseIndex += readDesc.length;
- }
-
- return rds;
- }
-
- private static FourChannelIntensityData copyIntensities(final FourChannelIntensityData toCopy, final int start, final int length) {
- final FourChannelIntensityData fcid = new FourChannelIntensityData(length);
-
- System.arraycopy(toCopy.getA(), start, fcid.getA(), 0, length);
- System.arraycopy(toCopy.getC(), start, fcid.getC(), 0, length);
- System.arraycopy(toCopy.getG(), start, fcid.getG(), 0, length);
- System.arraycopy(toCopy.getT(), start, fcid.getT(), 0, length);
- return fcid;
- }
-
- public static ClusterData selectiveCopyCd(final ClusterData toCopy, final String readStructure, final IlluminaDataType... dataTypes) {
- final ReadStructure rs = new ReadStructure(readStructure);
- final ReadData[] rd = copyReadData(rs, dataTypes, toCopy);
- final ClusterData cd = new ClusterData(rd);
- cd.setTile(toCopy.getTile());
- cd.setLane(toCopy.getLane());
-
- for (final IlluminaDataType idt : dataTypes) {
- switch (idt) {
- case Position:
- cd.setX(toCopy.getX());
- cd.setY(toCopy.getY());
- break;
-
- case PF:
- cd.setPf(toCopy.isPf());
- break;
-
- case Barcodes:
- cd.setMatchedBarcode(toCopy.getMatchedBarcode());
- break;
-
- default:
- break;
- }
- }
-
- return cd;
- }
-
- public static ClusterData makeCd(final int lane, final int tile, final int xCoord, final int yCoord, final boolean pf, final byte[] bases, final byte[] qualities, final String matchedBarcode) {
- final ReadData rd = new ReadData();
- rd.setBases(Arrays.copyOf(bases, bases.length));
- rd.setQualities(Arrays.copyOf(qualities, bases.length));
- rd.setReadType(ReadType.T); //This will be ignored, as the cluster will be chopped up by ReadStructure
-
- final ClusterData cd = new ClusterData(rd);
- cd.setLane(lane);
- cd.setTile(tile);
- cd.setX(xCoord);
- cd.setY(yCoord);
- cd.setPf(pf);
- cd.setMatchedBarcode(matchedBarcode);
-
- return cd;
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/CycleIlluminaFileMapTest.java b/src/tests/java/net/sf/picard/illumina/parser/CycleIlluminaFileMapTest.java
deleted file mode 100644
index eb775dd..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/CycleIlluminaFileMapTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-* The MIT License
-*
-* Copyright (c) 2011 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to deal
-* in the Software without restriction, including without limitation the rights
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the Software is
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-* THE SOFTWARE.
-*/
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import static net.sf.samtools.util.CollectionUtil.makeList;
-
-/**
-* @author jburke at broadinstitute.org
-*/
-public class CycleIlluminaFileMapTest {
- //TODO: REVAMP THIS
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001");
- private static final File ZERO_LENGTH_TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L002");
- private static final int [] ALL_CYCLES = {1,2,3,4};
-
- private static String laneToDir(int lane) {
- String outStr = String.valueOf(lane);
- while(outStr.length() < 3) {
- outStr = "0" + outStr;
- }
- return "L" + outStr;
- }
-
- private static String constructPathString(int lane, int cycle) {
- return TEST_DATA_DIR + "/" + laneToDir(lane) + "/C" + cycle + ".1";
- }
-
- @DataProvider(name = "iteratorTestData")
- public Object [][] iteratorTestData() {
- return new Object[][] {
- new Object[] {
- TEST_DATA_DIR, 1, 1101, ".bcl",
- makeList(new File(TEST_DATA_DIR + "/C1.1", "s_1_1101.bcl"),
- new File(TEST_DATA_DIR + "/C2.1", "s_1_1101.bcl"),
- new File(TEST_DATA_DIR + "/C3.1", "s_1_1101.bcl"),
- new File(TEST_DATA_DIR + "/C4.1", "s_1_1101.bcl")),
- ALL_CYCLES
- },
- new Object[] {
- ZERO_LENGTH_TEST_DATA_DIR, 1, 1101, ".bcl", new ArrayList<File>(), new int[]{},
-
- },
- new Object[] {
- TEST_DATA_DIR, 1, 1201, ".bcl", new ArrayList<File>(), new int[]{}
- },
-
- new Object[] {
- TEST_DATA_DIR, 2, 1101, ".bcl", new ArrayList<File>(), new int[]{}
- },
- };
- }
-
- /* @Test(dataProvider = "iteratorTestData")
- public void cycledFilesIteratorTest(final File parentDir, final int lane, final int tile, final String fileType, final List<File> expectedFiles, final int [] cycles) {
- final CycleFilesIterator toTest = new CycleFilesIterator(parentDir, lane, tile, cycles, fileType);
- Iterator<File> expectedIter = expectedFiles.iterator();
- while(expectedIter.hasNext()) {
- final File currentExpected = expectedIter.next();
- Assert.assertTrue(toTest.hasNext(), "CycledFileSetIterator is missing file: " + currentExpected.getAbsolutePath());
- Assert.assertEquals(toTest.next().getAbsolutePath(), currentExpected.getAbsolutePath());
- }
-
- Assert.assertTrue(!toTest.hasNext(), "CycledFilesIterator has extra files!");
- }
-
- @Test
- public void passingAssertCycledIlluminaFileMapTest() {
- final CycleIlluminaFileMap fileMap = new CycleIlluminaFileMap();
- fileMap.put(1101, new CycleFilesIterator(TEST_DATA_DIR, 1, 1101, ALL_CYCLES, ".bcl"));
- fileMap.put(1201, new CycleFilesIterator(TEST_DATA_DIR, 1, 1201, ALL_CYCLES, ".bcl"));
- fileMap.assertValid(makeList(1101,1201), ALL_CYCLES);
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void tileFailingAssertCycledIlluminaFileMapTest() {
- final CycleIlluminaFileMap fileMap = new CycleIlluminaFileMap();
- fileMap.put(1, new CycleFilesIterator(TEST_DATA_DIR, 1, 1, ALL_CYCLES, ".bcl"));
- fileMap.put(2, new CycleFilesIterator(TEST_DATA_DIR, 1, 2, ALL_CYCLES, ".bcl"));
- fileMap.assertValid(makeList(1,2,3), ALL_CYCLES);
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void cycleFailingAssertCycledIlluminaFileMapTest() {
- final CycleIlluminaFileMap fileMap = new CycleIlluminaFileMap();
- fileMap.put(1, new CycleFilesIterator(TEST_DATA_DIR, 1, 1, ALL_CYCLES, ".bcl"));
- fileMap.put(2, new CycleFilesIterator(TEST_DATA_DIR, 1, 2, ALL_CYCLES, ".bcl"));
- fileMap.assertValid(makeList(1,2), new int[]{1,2,3,4,5});
- }*/
-
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/FilterParserTest.java b/src/tests/java/net/sf/picard/illumina/parser/FilterParserTest.java
deleted file mode 100644
index 1a256e1..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/FilterParserTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.List;
-
-public class FilterParserTest {
- private static final File TestDataDir = new File("testdata/net/sf/picard/illumina/parserTests");
- private static final File BaseCallsDir = new File(TestDataDir, "filterParser");
-
- private static final boolean F = false;
- private static final boolean T = true;
- public static final Boolean[] s_1_0001_filter = {F, F, T, F, T, T, F, F, T, F, T, T, F, T, T};
- public static final Boolean[] s_1_0002_filter = {F, F, F, F, F, T, T, F, F, F, F, T, F, F, F, T, T, T, T, T};
- public static final Boolean[] s_1_0003_filter = {T, F, F, F, T, T, F, F};
- public static final Boolean[] s_1_0004_filter = {T, F, F, F, F, T, F, F, F, F, T, F, F, F, F, T, T, F, F, T,
- T, F, T, F, T, T, F, F, T, T, F, T, T, T, T, F, T, T, T, T,
- F, T, F, F, F, T, F, T, F, T, T, F, F, T, T, T, F, F, T, T};
-
- public static final Boolean[] tileToValue(int tile) {
- switch (tile) {
- case 1:
- return s_1_0001_filter;
- case 2:
- return s_1_0002_filter;
- case 3:
- return s_1_0003_filter;
- case 4:
- return s_1_0004_filter;
- }
-
- throw new RuntimeException("You shouldn't reach this statement!");
- }
-
- public static final Boolean[] allTilesToValues(Integer[] tiles) {
- Boolean[][] values = new Boolean[tiles.length][];
- for (int i = 0; i < tiles.length; i++) {
- values[i] = tileToValue(tiles[i]);
- }
-
- return arrayFlatten(values);
- }
-
- public static final List<Integer> arrayToList(final Integer[] array) {
- final List<Integer> list = new ArrayList<Integer>();
- for (int item : array) {
- list.add(item);
- }
- return list;
- }
-
- public static final <T> T[] arrayFlatten(final T[][] arrays) {
- int total = 0;
- for (T[] arr : arrays) {
- total += arr.length;
- }
-
- int resultIndex = 0;
- final T[] result = (T[]) Array.newInstance(arrays[0][0].getClass(), total);
- for (int i = 0; i < arrays.length; i++) {
- System.arraycopy(arrays[i], 0, result, resultIndex, arrays[i].length);
- resultIndex += arrays[i].length;
- }
- return result;
- }
-
- @DataProvider(name = "passingTiles")
- public Object[][] passingTiles() {
- return new Object[][]{
- {new Integer[]{1}},
- {new Integer[]{2}},
- {new Integer[]{4}},
- {new Integer[]{1, 4}},
- {new Integer[]{2, 3}},
- {new Integer[]{1, 2, 3, 4}}
- };
- }
-
- @Test(dataProvider = "passingTiles")
- public void passingParserTest(Integer[] tiles) {
- final IlluminaFileUtil fUtil = new IlluminaFileUtil(BaseCallsDir, 1);
-
- final Boolean[] values = allTilesToValues(tiles);
- final List<Integer> tileList = arrayToList(tiles);
-
- final FilterParser fp = new FilterParser(((PerTileFileUtil) fUtil.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Filter)).getFiles(tileList));
- fp.verifyData(tileList, null); //filter parser doesn't care about cycle
-
- for (final boolean expectedValue : values) {
- Assert.assertTrue(fp.hasNext());
- Assert.assertEquals(fp.next().isPf(), expectedValue);
- }
-
- Assert.assertFalse(fp.hasNext());
-
- //seek back to the beginning and do it again!
- fp.seekToTile(tiles[0]);
- for (final boolean expectedValue : values) {
- Assert.assertTrue(fp.hasNext());
- Assert.assertEquals(fp.next().isPf(), expectedValue);
- }
-
- Assert.assertFalse(fp.hasNext());
- fp.close();
- }
-
- @DataProvider(name = "seekToTile")
- public Object[][] seekToTile() {
- return new Object[][]{
- //seek after how many, tiles to load, expected values
- {0, 2, new Integer[]{2}, new Boolean[][]{s_1_0002_filter}},
- {4, 4, new Integer[]{1, 4}, new Boolean[][]{new Boolean[]{F, F, T, F}, s_1_0004_filter}},
- {0, 3, new Integer[]{2, 3}, new Boolean[][]{s_1_0003_filter}},
- {15, 3, new Integer[]{1, 2, 3, 4}, new Boolean[][]{s_1_0001_filter, s_1_0003_filter, s_1_0004_filter}}
- };
- }
-
- @Test(dataProvider = "seekToTile")
- public void passingSeekingParserTest(int skipBefore, int tileToSkipTo, Integer[] tiles, Boolean[][] expectedValues) {
- final IlluminaFileUtil fUtil = new IlluminaFileUtil(BaseCallsDir, 1);
-
- final Boolean[] values = arrayFlatten(expectedValues);
- final List<Integer> tileList = arrayToList(tiles);
-
- final FilterParser fp = new FilterParser(((PerTileFileUtil) fUtil.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Filter)).getFiles(tileList));
-
- int read = 0;
- for (final boolean expectedValue : values) {
- if (read == skipBefore) {
- fp.seekToTile(tileToSkipTo);
- }
-
- Assert.assertTrue(fp.hasNext());
- Assert.assertEquals(fp.next().isPf(), expectedValue, " Failed on read: " + read);
- ++read;
- }
-
- Assert.assertFalse(fp.hasNext());
- fp.close();
- }
-
- @DataProvider(name = "failingVerifyTiles")
- public Object[][] failingVerifyTiles() {
- return new Object[][]{
- {new Integer[]{1}, new Integer[]{2}},
- {new Integer[]{2}, new Integer[]{1}},
- {new Integer[]{4}, new Integer[]{5}},
- {new Integer[]{1, 4}, new Integer[]{1, 3, 4}},
- {new Integer[]{2, 3}, new Integer[]{2, 3, 4}},
- {new Integer[]{1, 2, 3, 4}, new Integer[]{1, 2, 3, 4, 5}},
- {new Integer[]{2, 3, 4}, new Integer[]{1, 2, 3, 4}}
- };
- }
-
- @Test(dataProvider = "failingVerifyTiles", expectedExceptions = PicardException.class)
- public void verifyDataTest(final Integer[] initTiles, final Integer[] verifyTiles) {
- final IlluminaFileUtil fUtil = new IlluminaFileUtil(BaseCallsDir, 1);
- final List<Integer> initTileList = arrayToList(initTiles);
- final List<Integer> verifyTileList = arrayToList(verifyTiles);
-
- final FilterParser fp = new FilterParser(((PerTileFileUtil) fUtil.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Filter)).getFiles(initTileList));
- fp.verifyData(verifyTileList, null); //filter parser doesn't care about cycle values
- fp.close();
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/IlluminaDataProviderFactoryTest.java b/src/tests/java/net/sf/picard/illumina/parser/IlluminaDataProviderFactoryTest.java
deleted file mode 100644
index e317d96..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/IlluminaDataProviderFactoryTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-
-import java.io.File;
-import java.util.List;
-
-public class IlluminaDataProviderFactoryTest {
-
- class TestFactory extends IlluminaDataProviderFactory{
- public TestFactory(final File basecallDirectory, final int lane, final ReadStructure readStructure, final IlluminaDataType... dataTypes) {
- super(basecallDirectory, lane, readStructure, new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY), dataTypes);
- }
-
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/IlluminaDataProviderTest.java b/src/tests/java/net/sf/picard/illumina/parser/IlluminaDataProviderTest.java
deleted file mode 100644
index 5724d91..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/IlluminaDataProviderTest.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
-* The MIT License
-*
-* Copyright (c) 2011 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to deal
-* in the Software without restriction, including without limitation the rights
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the Software is
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-* THE SOFTWARE.
-*/
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import static net.sf.samtools.util.CollectionUtil.makeList;
-//import static net.sf.samtools.util.CollectionUtil.*;
-
-/**
- * @author jburke at broadinstitute.org
- */
-
-public class IlluminaDataProviderTest {
-
- public static final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
- public static final File BINARY_TD_LOCATION = new File("testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
- private static final IlluminaDataType[] DEFAULT_DATA_TYPES = new IlluminaDataType[]{
- IlluminaDataType.Position, IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF
- };
-
- private void runTest(
- final String testName, final int size,
- final Map<Integer, ClusterData> readNoToClusterData,
- final int seekAfterFirstRead, final int seekTestDataReadOffset,
- final IlluminaDataProvider dataProvider)
- throws Exception {
-
- int count = 0;
- int readNum = 0;
- while (dataProvider.hasNext()) {
- final ClusterData cluster = dataProvider.next();
- if (readNoToClusterData.containsKey(readNum)) {
- compareReadData(cluster, readNoToClusterData.get(readNum), testName + " cluster num " + readNum);
- }
-
- if (seekAfterFirstRead != 0 && count == 0) {
- dataProvider.seekToTile(seekAfterFirstRead);
- readNum += seekTestDataReadOffset;
- }
-
- readNum++;
- count++;
- }
- Assert.assertEquals(count, size, testName);
- dataProvider.close();
- }
-
- private IlluminaDataType[] getDataTypes(final IlluminaDataType[] extraDataTypes) {
- final IlluminaDataType[] dts;
-
- if (extraDataTypes == null) {
- dts = DEFAULT_DATA_TYPES;
- } else {
- dts = Arrays.copyOf(DEFAULT_DATA_TYPES, DEFAULT_DATA_TYPES.length + extraDataTypes.length);
- System.arraycopy(extraDataTypes, 0, dts, DEFAULT_DATA_TYPES.length, extraDataTypes.length);
- }
- return dts;
- }
-
-
- private void compareBasesAndQuals(final ReadData rd1, final ReadData rd2, final String testName) {
- Assert.assertEquals(rd1.getBases(), rd2.getBases(), testName);
- Assert.assertEquals(rd1.getQualities(), rd2.getQualities(), testName);
- Assert.assertEquals(rd1.getReadType(), rd2.getReadType());
- }
-
- private void comparePositionalData(final ClusterData cd1, final ClusterData cd2, final String testName) {
- Assert.assertEquals(cd1.getLane(), cd2.getLane(), testName);
- Assert.assertEquals(cd1.getTile(), cd2.getTile(), testName);
- Assert.assertEquals(cd1.getX(), cd2.getX(), testName);
- Assert.assertEquals(cd1.getY(), cd2.getY(), testName);
- }
-
- //Doesn't compare intensities right now -- Do we want too?
- private void compareReadData(final ClusterData cd1, final ClusterData cd2, final String testName) {
- comparePositionalData(cd1, cd2, testName);
- Assert.assertEquals(cd1.getNumReads(), cd2.getNumReads());
- for (int i = 0; i < cd1.getNumReads(); i++) {
- compareBasesAndQuals(cd1.getRead(i), cd2.getRead(i), testName);
- }
-
- Assert.assertEquals(cd1.getMatchedBarcode(), cd2.getMatchedBarcode(), testName);
- Assert.assertEquals(cd1.isPf().booleanValue(), cd2.isPf().booleanValue(), testName);
- }
-
- public void runBarcodeParsingTest(final IlluminaDataProviderFactory factory) {
- int total = 0;
- final IlluminaDataProvider dataProvider = factory.makeDataProvider();
- while (dataProvider.hasNext()) {
- final ClusterData cluster = dataProvider.next();
- final String matchedBarcode = cluster.getMatchedBarcode();
- if (matchedBarcode != null) {
- Assert.assertEquals(matchedBarcode, new String(cluster.getRead(1).getBases()));
- }
- if(total > 10){
- break;
- }
- total++;
- }
- dataProvider.close();
- }
-
- @Test
- public void barcodeParsingTest() {
- runBarcodeParsingTest(new IlluminaDataProviderFactory(BINARY_TD_LOCATION, 1, new ReadStructure("25T8B25T"), bclQualityEvaluationStrategy, IlluminaDataType.BaseCalls,
- IlluminaDataType.Barcodes));
- }
-
- @DataProvider(name = "binaryData")
- public Object[][] binaryData() {
- return new Object[][]{
- {
- "Bustard Parsing Test(25T8B25T) w/Clocs", 1, 180,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.Barcodes},
- "25T8B25T",
- 0, 0,
- BINARY_TD_LOCATION
- },
- {
- "Bustard Parsing Test(25T8S25T) w/Clocs", 1, 180,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.Barcodes},
- "25T8S25T",
- 0, 0,
- BINARY_TD_LOCATION
- },
- {
- "Bustard Parsing Test(25T8S25T) w/Clocs with ending skip", 1, 180,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.Barcodes},
- "25T8B1S",
- 0, 0,
- BINARY_TD_LOCATION
- },
- {
- "Bustard Parsing Test(25S8S25T) w/Clocs", 1, 180,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.Barcodes},
- "25S8S25T",
- 0, 0,
- BINARY_TD_LOCATION
- },
- {
- "Bustard Parsing Test(25T8B25T) w/Clocs And Seeking", 1, 61,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.Barcodes},
- "25T8B25T",
- 2101, 4631,
- BINARY_TD_LOCATION
- }
- };
- }
-
- @Test(dataProvider = "binaryData")
- public void testIlluminaDataProviderBclMethod(
- final String testName, final int lane, final int size,
- final List<Integer> tiles,
- final IlluminaDataType[] extraDataTypes,
- final String illuminaConfigStr,
- final int seekAfterFirstRead, final int seekTestDataReadOffset,
- final File basecallsDirectory)
- throws Exception {
-
- final IlluminaDataType[] dts = getDataTypes(extraDataTypes);
-
- final Map<Integer, ClusterData> readNoToClusterData = BinTdUtil.clusterData(lane, tiles, illuminaConfigStr, dts);
- final IlluminaDataProviderFactory factory = new IlluminaDataProviderFactory(basecallsDirectory, lane, new ReadStructure(illuminaConfigStr), bclQualityEvaluationStrategy, dts);
- final IlluminaDataProvider dataProvider = factory.makeDataProvider();
-
- runTest(testName, size, readNoToClusterData, seekAfterFirstRead, seekTestDataReadOffset, dataProvider);
- }
-
- //Unlike above, the data types here do not have DEFAULT_DATA_TYPES added before creating the dataProvider
- @DataProvider(name = "badData")
- public Object[][] badData() {
- return new Object[][]{
- {
- "Bad Lane(5)", 5, 60,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.Barcodes},
- "25T8B25T",
- BINARY_TD_LOCATION
- },
- {
- "Bad Read Structure(25TB25T)", 4, 60,
- makeList(1101, 1201, 2101),
- DEFAULT_DATA_TYPES,
- "25TB25T",
- BINARY_TD_LOCATION
- },
- {
- "Bad Read Structure(25T0B25T)", 4, 60,
- makeList(1101, 1201, 2101),
- DEFAULT_DATA_TYPES,
- "25T0B25T",
- BINARY_TD_LOCATION
- },
- {
- "Bad Read Structure(-225T0B25T)", 4, 60,
- makeList(1101, 1201, 2101),
- DEFAULT_DATA_TYPES,
- "-25T0B25T",
- BINARY_TD_LOCATION
- },
- {
- "Missing Barcodes File", 9, 60,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.Position, IlluminaDataType.Barcodes},
- "25T8B25T",
- BINARY_TD_LOCATION
- },
- {
- "Missing Cycle File", 9, 60,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.BaseCalls},
- "25T8B25T",
- BINARY_TD_LOCATION
- },
- {
- "Missing Filter File", 9, 60,
- makeList(1101, 1201, 2101),
- new IlluminaDataType[]{IlluminaDataType.PF, IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores},
- "25T8B24T",
- BINARY_TD_LOCATION
- }
- };
- }
-
- @Test(dataProvider = "badData", expectedExceptions = {PicardException.class, IllegalArgumentException.class})
- public void testIlluminaDataProviderMissingDatas(final int lane,
- final IlluminaDataType[] actualDts,
- final String illuminaConfigStr,
- final File basecallsDirectory)
- throws Exception {
- final IlluminaDataProviderFactory factory = new IlluminaDataProviderFactory(basecallsDirectory, lane, new ReadStructure(illuminaConfigStr), bclQualityEvaluationStrategy, actualDts);
- factory.makeDataProvider();
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/IlluminaFileUtilTest.java b/src/tests/java/net/sf/picard/illumina/parser/IlluminaFileUtilTest.java
deleted file mode 100644
index 10ef89b..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/IlluminaFileUtilTest.java
+++ /dev/null
@@ -1,660 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat;
-import net.sf.picard.io.IoUtil;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static net.sf.samtools.util.CollectionUtil.makeList;
-
-public class IlluminaFileUtilTest {
- private static final int DEFAULT_LANE = 7;
- private static final List<Integer> DEFAULT_TILES = makeList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
- private static final List<Integer> DEFAULT_TILE_TEST_SUBSET = makeList(1, 4, 5, 6, 9, 10);
- private static final int[] DEFAULT_CYCLES = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
- private static final int DEFAULT_LAST_CYCLE = 20;
-
- // We have data for these that should agree
- private static final List<SupportedIlluminaFormat> FORMATS_TO_TEST = Arrays.asList(
- SupportedIlluminaFormat.Bcl,
- SupportedIlluminaFormat.Locs,
- SupportedIlluminaFormat.Clocs,
- SupportedIlluminaFormat.Pos,
- SupportedIlluminaFormat.Filter,
- SupportedIlluminaFormat.Barcode);
-
-
- private File intensityDir;
- private File basecallDir;
-
- @BeforeMethod
- private void setUp() throws Exception {
- intensityDir = IoUtil.createTempDir("ift_test", "Intensities");
- basecallDir = new File(intensityDir, "BaseCalls");
- if (!basecallDir.mkdir()) {
- throw new RuntimeException("Couldn't make basecalls dir " + basecallDir.getAbsolutePath());
- }
- }
-
- @AfterMethod
- private void tearDown() {
- IoUtil.deleteDirectoryTree(intensityDir);
- }
-
- @DataProvider(name = "validLanes")
- public Object[][] validLanes() {
- return new Object[][]{
- {0, "s_0_1111.test"},
- {1, "s_1_23.test"},
- {10, "s_10_1.test"}
- };
- }
-
- public void regexMatches(final String regex, final String toMatch) {
- regexMatches(regex, toMatch, true);
- }
-
- public void regexMatches(final String regex, final String toMatch, final boolean expectedResult) {
- final Pattern pt = Pattern.compile(regex);
- final Matcher ma = pt.matcher(toMatch);
- Assert.assertEquals(ma.matches(), expectedResult);
- }
-
- @Test(dataProvider = "validLanes")
- public void regexTests(final int lane, final String ltExample) {
- regexMatches(ParameterizedFileUtil.makeLaneTileRegex(".test", lane), ltExample);
- }
-
- @DataProvider(name = "validLanesInvalidRegexes")
- public Object[][] validLanesInvalidRegexes() {
- return new Object[][]{
- {0, "s_-0_111"},
- {1, "s_1_A3"},
- {10, "s_-100_1"},
- {20, "s_21_1"}
- };
- }
-
- @Test(dataProvider = "validLanesInvalidRegexes")
- public void notMatchingRegexTest(final int lane, final String ltExample) {
- regexMatches(ParameterizedFileUtil.makeLaneTileRegex(".test", lane) , ltExample, false);
- }
-
- @DataProvider(name = "invalidLanes")
- public Object[][] invalidLanes() {
- return new Object[][]{
- {-1000},
- {-10},
- {-1}
- };
- }
-
- @Test(dataProvider = "invalidLanes", expectedExceptions = PicardException.class)
- public void invalidLaneForLTRegex(final int lane) {
- ParameterizedFileUtil.makeLaneTileRegex(".test", lane);
- }
-
- public void assertDefaults(final IlluminaFileUtil fileUtil, final Integer lane, final List<SupportedIlluminaFormat> formatsToTest) {
- if (lane == null) {
- Assert.assertEquals(fileUtil.getLane(), DEFAULT_LANE);
- } else {
- Assert.assertEquals(new Integer(fileUtil.getLane()), lane);
- }
-
- Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Barcode).getTiles(), DEFAULT_TILES);
-
- Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Bcl).getTiles(), DEFAULT_TILES);
-
- Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Pos).getTiles(), DEFAULT_TILES);
-
- Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Locs).getTiles(), DEFAULT_TILES);
-
- Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Clocs).getTiles(), DEFAULT_TILES);
-
- Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Filter).getTiles(), DEFAULT_TILES);
-
- final Set<Integer> detectedCycles = ((PerTilePerCycleFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.Bcl)).getDetectedCycles();
- Assert.assertEquals(detectedCycles.size(), DEFAULT_CYCLES.length);
- int i = 0;
- for(final Integer cycle : detectedCycles){
- Assert.assertEquals(cycle.intValue(), DEFAULT_CYCLES[i++], "Elements differ at index " + i);
- }
-
- Assert.assertEquals(fileUtil.getActualTiles(formatsToTest), DEFAULT_TILES);
- }
-
- @Test
- public void passNewUtilTest() {
- for (final SupportedIlluminaFormat format : SupportedIlluminaFormat.values()) {
- makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, DEFAULT_CYCLES);
- makeFiles(format, intensityDir, DEFAULT_LANE + 1, DEFAULT_TILES, DEFAULT_CYCLES, ".gz");
- makeFiles(format, intensityDir, DEFAULT_LANE + 2, DEFAULT_TILES, DEFAULT_CYCLES, ".bz2");
- }
-
- final Set<SupportedIlluminaFormat> formatsToTest = new HashSet<SupportedIlluminaFormat>();
- // TODO: I can't be bothered to build files for these. AW
- Collections.addAll(formatsToTest, SupportedIlluminaFormat.values());
- formatsToTest.remove(SupportedIlluminaFormat.MultiTileBcl);
- formatsToTest.remove(SupportedIlluminaFormat.MultiTileFilter);
- formatsToTest.remove(SupportedIlluminaFormat.MultiTileLocs);
- final ArrayList<SupportedIlluminaFormat> formatsList = new ArrayList<SupportedIlluminaFormat>(formatsToTest);
-
- for (int i = 0; i < 3; i++) {
- final IlluminaFileUtil fileUtil = new IlluminaFileUtil(new File(intensityDir, "BaseCalls"), DEFAULT_LANE + i);
- Assert.assertEquals(fileUtil.getActualTiles(formatsList), DEFAULT_TILES);
- assertDefaults(fileUtil, DEFAULT_LANE + i, formatsList);
- }
- }
-
- @Test
- public void passingVerifyTest() {
- for (final SupportedIlluminaFormat format : SupportedIlluminaFormat.values()) {
- makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, DEFAULT_CYCLES);
- makeFiles(format, intensityDir, DEFAULT_LANE + 1, DEFAULT_TILES, DEFAULT_CYCLES, ".gz");
- makeFiles(format, intensityDir, DEFAULT_LANE + 2, DEFAULT_TILES, DEFAULT_CYCLES, ".bz2");
- }
-
- for (int i = 0; i < 3; i++) {
- final IlluminaFileUtil fileUtil = new IlluminaFileUtil(new File(intensityDir, "BaseCalls"), DEFAULT_LANE + i);
-
-
- for (final SupportedIlluminaFormat format : FORMATS_TO_TEST) {
- Assert.assertEquals(new ArrayList<String>(), fileUtil.getUtil(format).verify(DEFAULT_TILES, DEFAULT_CYCLES));
- }
- }
- }
-
- @DataProvider(name = "missingTileFormats")
- public Object[][] missingTileFormats() {
- return new Object[][]{
- {
- 1,
- makeList(SupportedIlluminaFormat.Bcl, SupportedIlluminaFormat.Barcode),
- makeList(SupportedIlluminaFormat.Bcl, SupportedIlluminaFormat.Barcode),
- makeList("BaseCalls/s_1_0007_barcode.txt.gz"),
- ".gz"
- },
-
- {
- 2,
- Arrays.asList(SupportedIlluminaFormat.values()),
- Arrays.asList(SupportedIlluminaFormat.values()),
- makeCycleFileList(new File("BaseCalls"), ".bcl", 2, DEFAULT_CYCLES, 2),
- ".gz"
- },
- {
- 3,
- Arrays.asList(SupportedIlluminaFormat.values()),
- Arrays.asList(SupportedIlluminaFormat.values()),
- makeList("BaseCalls/L003/C1.1/s_3_2.bcl"),
- ".bz2"
- },
- {
- 4,
- Arrays.asList(SupportedIlluminaFormat.values()),
- Arrays.asList(SupportedIlluminaFormat.Pos, SupportedIlluminaFormat.Locs),
- makeList("s_4_10_pos.txt", "L004/s_4_2.locs"),
- null
- }
- };
- }
-
- public static void emptyRelativeFiles(final File baseFile, final List<String> relativeFilesToDelete) {
- for (final String relativeFile : relativeFilesToDelete) {
- final File actualFile = new File(baseFile, relativeFile);
-
-
- if (!actualFile.exists()) {
- throw new RuntimeException("Trying to empty a non-existent file" + actualFile.getAbsolutePath());
- }
-
- if (actualFile.isDirectory()) {
- throw new RuntimeException("Trying to empty a directory(" + actualFile.getAbsolutePath() + ")");
- } else {
- if (!actualFile.delete()) {
- throw new RuntimeException("Couldn't remove previous file when emptying(" + actualFile.getAbsolutePath() + ")");
- } else {
- try {
- if (!actualFile.createNewFile()) {
- throw new RuntimeException("Couldn't create empty file: " + actualFile.getAbsolutePath() + ")");
- }
- } catch (final IOException ioe) {
- throw new RuntimeException(ioe);
- }
- }
- }
- if (!actualFile.exists()) {
- throw new PicardException("File should exist: " + actualFile);
- }
- }
- }
-
- public static void deleteRelativeFiles(final File baseFile, final List<String> relativeFilesToDelete) {
- for (final String relativeFile : relativeFilesToDelete) {
- final File actualFile = new File(baseFile, relativeFile);
-
-
- if (!actualFile.exists()) {
- throw new RuntimeException("Trying to delete a non-existent file" + actualFile.getAbsolutePath());
- }
-
- if (actualFile.isDirectory()) {
- IoUtil.deleteDirectoryTree(actualFile);
- } else {
- IoUtil.deleteFiles(actualFile);
- }
- if (actualFile.exists()) {
- throw new RuntimeException("File still exists after calling delete: " + actualFile);
- }
- }
- }
-
- public final void deleteRelativeFiles(final List<String> relativeFilesToDelete) {
- deleteRelativeFiles(intensityDir, relativeFilesToDelete);
- }
-
- @Test(dataProvider = "missingTileFormats")
- public void missingTileTest(final int lane,
- final List<SupportedIlluminaFormat> formats,
- final List<SupportedIlluminaFormat> formatsToGetTiles,
- final List<String> relativeFilesToDelete,
- final String compression) {
- for (final SupportedIlluminaFormat format : formats) {
- makeFiles(format, intensityDir, lane, DEFAULT_TILES, DEFAULT_CYCLES, compression);
- }
-
- deleteRelativeFiles(relativeFilesToDelete);
-
- PicardException pExc = null;
- try {
- final IlluminaFileUtil fUtil = new IlluminaFileUtil(new File(intensityDir, "BaseCalls"), lane);
- fUtil.getActualTiles(formatsToGetTiles);
- } catch (final PicardException exception) {
- pExc = exception;
- }
-
- Assert.assertNotNull(pExc, "Didn't raise a Picard Exception for missing tile!");
- Assert.assertTrue(pExc.getMessage().contains("Formats do not have the same number of tiles! "), "Wrong exception thrown for missing tile!");
- }
-
- @DataProvider(name = "perTileFileFormats")
- public Object[][] perTileFileUtils() {
- return new Object[][]{
- {SupportedIlluminaFormat.Locs, null, false, laneDir(DEFAULT_LANE)},
- {SupportedIlluminaFormat.Clocs, null, false, laneDir(DEFAULT_LANE)},
- {SupportedIlluminaFormat.Pos, ".gz", false, null},
- {SupportedIlluminaFormat.Pos, null, false, null},
- {SupportedIlluminaFormat.Filter, null, true, "BaseCalls/" + laneDir(DEFAULT_LANE)},
- {SupportedIlluminaFormat.Barcode, ".bz2", true, "BaseCalls"}
- };
- }
-
- public File makePerTileFile(final File parentDir, final int lane, final int tile, final String extension, final String compression, final boolean longFormat) {
- return new File(parentDir, "s_" + lane + "_" + longTile(tile, longFormat) + extension + (compression != null ? compression : ""));
- }
-
- public void testDefaultPerTileUtil(final PerTileFileUtil ptfu, final String compression, final boolean longFormat, final File parentDir) {
- final IlluminaFileMap fm = ptfu.getFiles();
- final IlluminaFileMap fmWTiles = ptfu.getFiles(DEFAULT_TILES);
-
- Assert.assertEquals(fm.size(), DEFAULT_TILES.size());
-
- for (final Integer tile : DEFAULT_TILES) {
- final File tFile = fm.get(tile);
- final File tFile2 = fmWTiles.get(tile);
- Assert.assertEquals(tFile.getAbsolutePath(), tFile2.getAbsolutePath());
- Assert.assertEquals(tFile, makePerTileFile(parentDir, DEFAULT_LANE, tile, ptfu.extension, compression, longFormat));
- Assert.assertTrue(tFile.exists());
- Assert.assertTrue(tFile.length() > 0);
- }
-
- final List<Integer> tiles = new ArrayList<Integer>(DEFAULT_TILE_TEST_SUBSET);
- final IlluminaFileMap subsetMap = ptfu.getFiles(DEFAULT_TILE_TEST_SUBSET);
- for (final Integer tile : subsetMap.keySet()) {
- tiles.remove(tile);
- Assert.assertTrue(DEFAULT_TILE_TEST_SUBSET.contains(tile));
- final File tFile = subsetMap.get(tile);
- Assert.assertEquals(tFile, makePerTileFile(parentDir, DEFAULT_LANE, tile, ptfu.extension, compression, longFormat));
- Assert.assertTrue(tFile.exists());
- Assert.assertTrue(tFile.length() > 0);
- }
-
- Assert.assertTrue(tiles.isEmpty());
- }
-
- @Test(dataProvider = "perTileFileFormats")
- public void perTileFileUtilsTest(final SupportedIlluminaFormat format, final String compression, final boolean longFormat, final String parentDir) {
- makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, DEFAULT_CYCLES, compression);
-
- final IlluminaFileUtil fileUtil = new IlluminaFileUtil(basecallDir, DEFAULT_LANE);
- final PerTileFileUtil ptfu = (PerTileFileUtil) fileUtil.getUtil(format);
-
- Assert.assertTrue(ptfu.filesAvailable());
- testDefaultPerTileUtil(ptfu, compression, longFormat, (parentDir == null) ? intensityDir : new File(intensityDir, parentDir));
-
- final IlluminaFileUtil noFilesFu = new IlluminaFileUtil(basecallDir, DEFAULT_LANE + 20);
- final PerTileFileUtil noFilesPtfu = (PerTileFileUtil) noFilesFu.getUtil(format);
- Assert.assertFalse(noFilesPtfu.filesAvailable());
- Assert.assertTrue(noFilesPtfu.getFiles().isEmpty());
- Assert.assertTrue(noFilesPtfu.getFiles(DEFAULT_TILES).isEmpty());
- }
-
- public File makePerTilePerCycleFilePath(final File parentDir, final int lane, final int tile, final int cycle, final String extension) {
- return new File(parentDir, "C" + cycle + ".1/s_" + lane + "_" + tile + extension);
- }
-
- public void testDefaultPerTilePerCycleUtil(final PerTilePerCycleFileUtil pcfu, final File parentDir, final int[] cycles) {
- final CycleIlluminaFileMap cfm = pcfu.getFiles(cycles);
- final CycleIlluminaFileMap cfmWTiles = pcfu.getFiles(DEFAULT_TILES, cycles);
- final CycleIlluminaFileMap cfmNoCycles;
- if (Arrays.equals(cycles, DEFAULT_CYCLES)) {
- cfmNoCycles = pcfu.getFiles();
- } else {
- cfmNoCycles = null;
- }
-
- Assert.assertEquals(cfm.size(), cycles.length);
-
- for (final int cycle : cycles) {
- final IlluminaFileMap tFileIter = cfm.get(cycle);
- final IlluminaFileMap tFileIter2 = cfmWTiles.get(cycle);
- final IlluminaFileMap tFileIter3;
- if (cfmNoCycles != null) {
- tFileIter3 = cfmNoCycles.get(cycle);
- } else {
- tFileIter3 = null;
- }
-
- for (final Integer tile : DEFAULT_TILES) {
- final File tcFile = tFileIter.get(tile);
- final File tcFile2 = tFileIter2.get(tile);
-
- Assert.assertEquals(tcFile.getAbsolutePath(), tcFile2.getAbsolutePath());
- if (tFileIter3 != null) {
- final File tfFile3 = tFileIter3.get(tile);
- Assert.assertEquals(tcFile.getAbsolutePath(), tfFile3.getAbsolutePath());
- }
-
- Assert.assertEquals(tcFile, makePerTilePerCycleFilePath(parentDir, DEFAULT_LANE, tile, cycle, pcfu.extension));
- Assert.assertTrue(tcFile.exists());
- Assert.assertTrue(tcFile.length() > 0);
- }
- }
- }
-
-
- public void testSubsetDefaultPerTilePerCycleUtil(final PerTilePerCycleFileUtil pcfu, final File parentDir, final int[] cycles) {
- final List<Integer> tiles = new ArrayList<Integer>(DEFAULT_TILE_TEST_SUBSET);
- final CycleIlluminaFileMap subsetMap = pcfu.getFiles(DEFAULT_TILE_TEST_SUBSET, cycles);
- final CycleIlluminaFileMap cfmNoCycles;
- if (Arrays.equals(cycles, DEFAULT_CYCLES)) {
- cfmNoCycles = pcfu.getFiles(DEFAULT_TILE_TEST_SUBSET);
- } else {
- cfmNoCycles = null;
- }
-
- for (final int cycle : cycles) {
- final IlluminaFileMap tFileIter = subsetMap.get(cycle);
- final IlluminaFileMap tFileIter2;
- if (cfmNoCycles != null) {
- tFileIter2 = cfmNoCycles.get(cycle);
- } else {
- tFileIter2 = null;
- }
-
-
- for (final Integer tile : subsetMap.get(cycle).keySet()) {
- Assert.assertTrue(DEFAULT_TILE_TEST_SUBSET.contains(tile));
- tiles.remove(tile);
- final File tcFile = tFileIter.get(tile);
- if (tFileIter2 != null) {
- Assert.assertEquals(tcFile, tFileIter2.get(tile));
- }
- Assert.assertEquals(tcFile, makePerTilePerCycleFilePath(parentDir, DEFAULT_LANE, tile, cycle, pcfu.extension));
- Assert.assertTrue(tcFile.exists());
- Assert.assertTrue(tcFile.length() > 0);
- }
- }
-
- Assert.assertTrue(tiles.isEmpty());
- }
-
- public static int[] cycleRange(final Range range) {
- return cycleRange(range.start, range.end);
- }
-
- public static int[] cycleRange(final int start, final int end) {
- final int[] cycles = new int[end - start + 1];
- for (int i = 0; i < cycles.length; i++) {
- cycles[i] = start + i;
- }
-
- return cycles;
- }
-
- public static int[] cycleRange(final int end) {
- return cycleRange(1, end);
- }
-
- @DataProvider(name = "perTilePerCycleFileFormats")
- public Object[][] perTilePerCycleFileFormats() {
- return new Object[][]{
- {SupportedIlluminaFormat.Bcl, "BaseCalls/" + laneDir(DEFAULT_LANE), DEFAULT_CYCLES, false, false},
- {SupportedIlluminaFormat.Bcl, "BaseCalls/" + laneDir(DEFAULT_LANE), cycleRange(4), true, true},
- };
- }
-
- @Test(dataProvider = "perTilePerCycleFileFormats")
- public void perTilePerCycleFileUtilsTest(final SupportedIlluminaFormat format, final String parentDir,
- final int[] cycles, final boolean createEarlySkippedCycles,
- final boolean createLateSkippedCycles) {
- if (createEarlySkippedCycles) {
- makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycleRange(1, cycles[0]), null);
- }
-
- makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycles, null);
-
- if (createLateSkippedCycles) {
- makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycleRange(cycles[cycles.length - 1] + 1, DEFAULT_LAST_CYCLE), null);
- }
-
- final IlluminaFileUtil fileUtil = new IlluminaFileUtil(basecallDir, DEFAULT_LANE);
- final PerTilePerCycleFileUtil pcfu = (PerTilePerCycleFileUtil) fileUtil.getUtil(format);
-
- Assert.assertTrue(pcfu.filesAvailable());
- testDefaultPerTilePerCycleUtil(pcfu, (parentDir == null) ? intensityDir : new File(intensityDir, parentDir), cycles);
- testSubsetDefaultPerTilePerCycleUtil(pcfu, (parentDir == null) ? intensityDir : new File(intensityDir, parentDir), cycles);
-
- final IlluminaFileUtil noFilesFu = new IlluminaFileUtil(basecallDir, DEFAULT_LANE + 20);
- final PerTilePerCycleFileUtil noFilesPcfu = (PerTilePerCycleFileUtil) noFilesFu.getUtil(format);
-
- Assert.assertFalse(noFilesPcfu.filesAvailable());
- Assert.assertTrue(noFilesPcfu.getFiles().isEmpty());
- Assert.assertTrue(noFilesPcfu.getFiles(DEFAULT_TILES).isEmpty());
- }
-
- @DataProvider(name = "missingCycleDataRanges")
- public Object[][] missingCycleDataRanges() {
- return new Object[][]{
- {makeList(new Range(10, 15))},
- {makeList(new Range(9, 12), new Range(14, 15))}
- };
- }
-
- @Test(expectedExceptions = PicardException.class, dataProvider = "missingCycleDataRanges")
- public void perTilePerCycleFileUtilsMissingCycleTest(final List<Range> cycleRangesToMake) {
- final SupportedIlluminaFormat format = SupportedIlluminaFormat.Bcl;
-
- for (final Range range : cycleRangesToMake) {
- makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycleRange(range), null);
- }
-
- final IlluminaFileUtil fileUtil = new IlluminaFileUtil(basecallDir, DEFAULT_LANE);
- final PerTilePerCycleFileUtil pcfu = (PerTilePerCycleFileUtil) fileUtil.getUtil(format);
-
- Assert.assertTrue(pcfu.filesAvailable());
- final int[] cycles = cycleRange(9, 16);
- final CycleIlluminaFileMap cfm = pcfu.getFiles(cycles);
- cfm.assertValid(DEFAULT_TILES, cycles);
- }
-
-
- public static void makeFiles(final SupportedIlluminaFormat format, final File intensityDir, final int lane,
- final List<Integer> tiles, final int[] cycles) {
- makeFiles(format, intensityDir, lane, tiles, cycles, null);
- }
-
- public static void makeFiles(final SupportedIlluminaFormat format, final File intensityDir, final int lane,
- final List<Integer> tiles, final int[] cycles, final String compression) {
- String laneDir = String.valueOf(lane);
- while (laneDir.length() < 3) {
- laneDir = "0" + laneDir;
- }
- laneDir = "L" + laneDir;
-
-
- final File basecallDir = new File(intensityDir, "BaseCalls");
- final File basecallLaneDir = new File(basecallDir, laneDir);
- final File intensityLaneDir = new File(intensityDir, laneDir);
-
- switch (format) {
- //per tile formats
- case Barcode:
- makePerTileFiles(basecallDir, lane, tiles, maybeAddExt("_barcode.txt", compression), true);
- break;
-
- case Pos:
- makePerTileFiles(intensityDir, lane, tiles, maybeAddExt("_pos.txt", compression), false);
- break;
-
- case Locs:
- makePerTileFiles(intensityLaneDir, lane, tiles, maybeAddExt(".locs", null), false);
- break;
-
- case Clocs:
- makePerTileFiles(intensityLaneDir, lane, tiles, maybeAddExt(".clocs", null), false);
- break;
-
- case Filter:
- makePerTileFiles(basecallLaneDir, lane, tiles, maybeAddExt(".filter", null), true);
- break;
-
- //per tile per cycle formats
- case Bcl:
- makePerTilePerCycleFiles(basecallLaneDir, lane, tiles, cycles, ".bcl");
- break;
- }
- }
-
- private static void makePerTileFiles(final File parentDir, final int lane, final List<Integer> tiles, final String ext, final boolean longName) {
- if (!parentDir.exists()) {
- if (!parentDir.mkdir()) {
- throw new RuntimeException("Couldn't create directory " + parentDir.getAbsolutePath());
- }
- }
-
- for (final Integer tile : tiles) {
- writeNonEmptyFile(new File(parentDir, "s_" + lane + "_" + longTile(tile, longName) + ext));
- }
- }
-
- private static void makePerTilePerCycleFiles(final File parentDir, final int lane, final List<Integer> tiles, final int[] cycles, final String ext) {
- if (!parentDir.exists()) {
- if (!parentDir.mkdir()) {
- throw new RuntimeException("Couldn't create directory " + parentDir.getAbsolutePath());
- }
- }
-
- for (final int cycle : cycles) {
- final File cycleDir = new File(parentDir, "C" + cycle + ".1");
- if (!cycleDir.exists()) {
- if (!cycleDir.mkdir()) {
- throw new RuntimeException("Couldn't create directory " + cycleDir.getAbsolutePath());
- }
- }
-
- for (final Integer tile : tiles) {
- writeNonEmptyFile(new File(cycleDir, "s_" + lane + "_" + tile + ext));
- }
- }
- }
-
- private static List<String> makeCycleFileList(final File dir, final String ext, final int lane, final int[] cycles, final int... tiles) {
- return makeCycleFileList(dir, ext, lane, cycles, false, tiles);
- }
-
- private static List<String> makeCycleFileList(final File dir, final String ext, final int lane, final int[] cycles, final boolean longFmt, final int... tiles) {
- final List<String> files = new ArrayList<String>();
- final File laneDir = new File(dir, laneDir(lane));
-
- for (final int cycle : cycles) {
- final File cycleDir = new File(laneDir, "C" + cycle + ".1");
- for (final Integer tile : tiles) {
- files.add(cycleDir + "/s_" + lane + "_" + longTile(tile, longFmt) + ext);
- }
- }
-
- return files;
- }
-
- private static void writeNonEmptyFile(final File file) {
- try {
- final OutputStream outputStream = new DataOutputStream(new FileOutputStream(file));
- final int expectedLength = 10;
- outputStream.write(expectedLength);
- // The negative beginning index is to accommodate the header. Fancy. Ever so fancy.
- for (int i = -3; i < expectedLength; i++) outputStream.write(0x0);
- outputStream.close();
- } catch (final IOException e) {
- throw new RuntimeException("Exception trying to create non-empty file!", e);
- }
- }
-
- private static String laneDir(final int lane) {
- String ldir = String.valueOf(lane);
- while (ldir.length() < 3) {
- ldir = "0" + ldir;
- }
- return "L" + ldir;
- }
-
- private static String longTile(final int tile, final boolean makeLong) {
- if (makeLong) {
- String lt = String.valueOf(tile);
- while (lt.length() < 4) {
- lt = "0" + lt;
- }
- return lt;
- } else {
- return String.valueOf(tile);
- }
- }
-
- private static String maybeAddExt(final String fileExt, final String compressionExt) {
- if (compressionExt != null) {
- return fileExt + compressionExt;
- } else {
- return fileExt;
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/PerTileParserTest.java b/src/tests/java/net/sf/picard/illumina/parser/PerTileParserTest.java
deleted file mode 100644
index b686ef7..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/PerTileParserTest.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import static net.sf.samtools.util.CollectionUtil.makeList;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloseableIterator;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.*;
-
-public class PerTileParserTest {
-
- private static final Map<String, List<Integer>> FILE_TO_VALUE = new HashMap<String, List<Integer>>();
- private static final IlluminaFileMap FILE_MAP = new IlluminaFileMap();
- static {
- FILE_MAP.put(1, new File("s_1_1"));
- FILE_MAP.put(2, new File("s_1_2"));
- FILE_MAP.put(3, new File("s_1_3"));
- FILE_MAP.put(4, new File("s_1_4"));
- FILE_MAP.put(5, new File("s_1_5"));
- FILE_TO_VALUE.put("s_1_1", makeList(1, 2, 3, 4, 5));
- FILE_TO_VALUE.put("s_1_2", makeList(6, 7, 8, 9, 10));
- FILE_TO_VALUE.put("s_1_3", makeList(11, 12, 13, 14, 15));
- FILE_TO_VALUE.put("s_1_4", makeList(16, 17, 18, 19, 20));
- FILE_TO_VALUE.put("s_1_5", makeList(21, 22, 23, 24, 25));
- }
-
- class DummyDt implements IlluminaData {
- public DummyDt(final Integer value) {
- this.value = value;
- }
- public final Integer value;
- }
-
- class MockPerTileParser extends PerTileParser<DummyDt> {
-
- public MockPerTileParser(final IlluminaFileMap tilesToFiles) {
- super(tilesToFiles);
- }
-
- @Override
- protected CloseableIterator<DummyDt> makeTileIterator(final File file) {
- return new CloseableIterator<DummyDt>() {
- private final Iterator<Integer> values = FILE_TO_VALUE.get(file.getName()).iterator();
-
- @Override
- public void close() {
-
- }
-
- @Override
- public boolean hasNext() {
- return values.hasNext();
- }
-
- @Override
- public DummyDt next() {
- return new DummyDt(values.next());
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- };
- }
-
- @Override
- public Set<IlluminaDataType> supportedTypes() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
- }
-
- @Test
- public void basicIterationTest() {
- final IlluminaFileMap fm = new IlluminaFileMap();
- fm.put(1, new File("s_1_1"));
- fm.put(2, new File("s_1_2"));
- fm.put(3, new File("s_1_3"));
- fm.put(4, new File("s_1_4"));
- fm.put(5, new File("s_1_5"));
-
- final PerTileParser<DummyDt> ddts = new MockPerTileParser(fm);
-
- for(int i = 0; i < 25; i++) {
- Assert.assertTrue(ddts.hasNext());
- Assert.assertEquals(ddts.next().value, new Integer(i+1));
- }
-
- Assert.assertFalse(ddts.hasNext());
- }
-
- @DataProvider(name="seekingTests")
- public Object[][] seekingTests() {
- return new Object[][] {
- {1, 4, null, null},
- {15, 1, null, null},
- {25, 3, null, null},
- {24, 5, null, null},
- {1, 3, 10, 1},
- {1, 3, 15, 2},
- {12, 2, 15, 4},
- {6, 3, 12, 5},
- {14, 5, 25, 2}
- };
- }
-
- @Test(dataProvider = "seekingTests")
- public void seekToTileTest(Integer firstSeekPos, Integer firstTile, Integer secondSeekPos, Integer secondTile) {
- final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
-
- for(int i = 1; i <= firstSeekPos; i++) {
- Assert.assertTrue(ddts.hasNext());
- Assert.assertEquals(ddts.next().value, new Integer(i));
- }
-
- ddts.seekToTile(firstTile);
-
- int start = firstTile * 5 - 4;
- if(secondSeekPos != null) {
- for(int i = start; i <= secondSeekPos; i++) {
- Assert.assertTrue(ddts.hasNext());
- Assert.assertEquals(ddts.next().value, new Integer(i));
- }
- ddts.seekToTile(secondTile);
- start = secondTile * 5 - 4;
- }
-
- for(int i = start; i <= 25; i++) {
- Assert.assertTrue(ddts.hasNext());
- Assert.assertEquals(ddts.next().value, new Integer(i));
- }
-
- Assert.assertFalse(ddts.hasNext());
- }
-
- @DataProvider(name="missingTiles")
- public Object [][] missingTiles() {
- return new Object [][] {
- {-1}, {10}, {Integer.MAX_VALUE}, {Integer.MIN_VALUE}
- };
- }
-
- @Test(expectedExceptions = PicardException.class, dataProvider="missingTiles")
- public void missingTileTest(final Integer missingTile) {
- final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
- ddts.seekToTile(missingTile);
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void failVerifyTestTooManyTiles() {
- final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
- ddts.verifyData(makeList(1,2,3,4,5,6), null);
- }
- @Test(expectedExceptions = PicardException.class)
- public void failVerifyTestMissingTile() {
- final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
- ddts.verifyData(makeList(1,2,4,5), null);
- }
-
- @Test
- public void passVerifyTest() {
- final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
- ddts.verifyData(makeList(1,2,3,4,5), null);
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/PerTilePerCycleParserTest.java b/src/tests/java/net/sf/picard/illumina/parser/PerTilePerCycleParserTest.java
deleted file mode 100644
index 0348a2d..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/PerTilePerCycleParserTest.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import static net.sf.samtools.util.CollectionUtil.makeList;
-
-public class PerTilePerCycleParserTest {
- public static final List<Integer> DEFAULT_TILES = makeList(1, 2, 3, 4);
- public static final int[] DEFAULT_OUTPUT_LENGTHS = new int[]{10, 5, 5};
- public static final int[] CYCLES = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
- public static final int MAX_CYCLE = 20;
- public static final OutputMapping OUTPUT_MAPPING = new OutputMapping(new ReadStructure("20T"));
-
- private class MockCycledIlluminaData implements IlluminaData {
- private final List<String> values;
-
- public MockCycledIlluminaData() {
- this.values = new ArrayList<String>();
- }
-
- public void addValue(final String value) {
- values.add(value);
- }
-
- public List<String> getValues() {
- return values;
- }
- }
-
- class MockPerTileCycleParser extends PerTileCycleParser<MockCycledIlluminaData> {
- private final int[] expectedOutputLengths;
-
- public MockPerTileCycleParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles, final OutputMapping outputMapping) {
- super(directory, lane, tilesToCycleFiles, outputMapping);
- expectedOutputLengths = outputMapping.getOutputReadLengths();
- this.initialize();
- }
-
- @Override
- protected CycleFilesParser<MockCycledIlluminaData> makeCycleFileParser(final List<File> files) {
- return new CycleFilesParser<MockCycledIlluminaData>() {
- int currentCycle = 0;
-
- @Override
- public void close() {
-
- }
-
- @Override
- public MockCycledIlluminaData next() {
- final MockCycledIlluminaData ild = new MockCycledIlluminaData();
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
-
- ild.addValue(str_del(files.get(currentCycle++)));
- return ild;
- }
-
- @Override
- public boolean hasNext() {
- return currentCycle < MAX_CYCLE;
- }
- };
- }
-
- @Override
- public void initialize() {
- seekToTile(currentTile);
- }
-
- public Set<IlluminaDataType> supportedTypes() {
- return null;
- }
-
- @Override
- public void close() {
- //no-op
- }
- }
-
- public List<String> getFileNames(final List<Integer> tiles) {
- final List<String> fileNames = new ArrayList<String>();
- for (final Integer tile : tiles) {
- for (int i = 1; i <= MAX_CYCLE; i++) {
- fileNames.add(str_del(tile, i));
- }
- }
- return fileNames;
- }
-
- public CycleIlluminaFileMap getIlluminaFileMaps(final List<Integer> tiles, final int[] cycles) {
- final CycleIlluminaFileMap cycleFileMap = new CycleIlluminaFileMap();
- for (final int cycle : cycles) {
- final IlluminaFileMap fileMap = new IlluminaFileMap();
- for (final Integer tile : tiles) {
- fileMap.put(tile, new File(str_del(tile, cycle)));
- }
- cycleFileMap.put(cycle, fileMap);
- }
- return cycleFileMap;
- }
-
- public static String str_del(final Object... objects) {
- String out = objects[0].toString();
- for (int i = 1; i < objects.length; i++) {
- out += "_" + objects[i];
- }
- return out;
- }
-
- @Test
- public void basicIterationTest() {
- final List<String> expectedValues = getFileNames(DEFAULT_TILES);
- final PerTileCycleParser<MockCycledIlluminaData> parser = makeParser();
-
- int index = 0;
- while (parser.hasNext()) {
- index = compareValues(parser.next().values, expectedValues, index);
- }
-
- Assert.assertEquals(index, expectedValues.size());
- }
-
-
- private int compareValues(final List<String> parserValues, final List<String> expectedValues, int index) {
- for (final String parserValue : parserValues) {
- Assert.assertTrue(index < expectedValues.size());
- Assert.assertEquals(parserValue, expectedValues.get(index), "With index " + index);
- ++index;
- }
-
- return index;
- }
-
- public PerTileCycleParser<MockCycledIlluminaData> makeParser() {
- final CycleIlluminaFileMap fileMap = getIlluminaFileMaps(DEFAULT_TILES, CYCLES);
- return new MockPerTileCycleParser(new File("FakeFile"), 1, fileMap, OUTPUT_MAPPING);
- }
-
- @DataProvider(name = "seekingTests")
- public Object[][] seekingTests() {
- return new Object[][]{
- {1, 3, null, null},
- {22, 1, null, null},
- {38, 2, null, null},
- {75, 4, null, null},
- {1, 3, 70, 1},
- {1, 3, 45, 2},
- {12, 2, 59, 4},
- {45, 3, 70, 3},
- {14, 1, 5, 2}
- };
- }
-
-
- @Test(dataProvider = "seekingTests")
- public void seekingIterationTest(final Integer seekPos1, final Integer newTile1, final Integer seekPos2, final Integer newTile2) {
- final List<String> expectedValues = getFileNames(DEFAULT_TILES);
- final PerTileCycleParser<MockCycledIlluminaData> parser = makeParser();
-
- int index = 0;
- for (int i = 0; i <= seekPos1; i++) {
- Assert.assertTrue(parser.hasNext());
- index = compareValues(parser.next().values, expectedValues, index);
- }
-
- parser.seekToTile(newTile1);
-
- index = (newTile1 - 1) * MAX_CYCLE;
- if (seekPos2 != null) {
- for (int i = index; i <= seekPos2; i++) {
- Assert.assertTrue(parser.hasNext());
- index = compareValues(parser.next().values, expectedValues, index);
- }
-
- parser.seekToTile(newTile2);
- index = (newTile2 - 1) * MAX_CYCLE;
- }
-
- for (int i = index; i < MAX_CYCLE * DEFAULT_TILES.size(); i++) {
- Assert.assertTrue(parser.hasNext());
- index = compareValues(parser.next().values, expectedValues, index);
- }
-
- Assert.assertFalse(parser.hasNext());
-
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/PosParserTest.java b/src/tests/java/net/sf/picard/illumina/parser/PosParserTest.java
deleted file mode 100644
index 005c478..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/PosParserTest.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package net.sf.picard.illumina.parser;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.*;
-import static net.sf.samtools.util.CollectionUtil.makeList;
-
-public class PosParserTest {
-
- public static final File TEST_DIR = new File("testdata/net/sf/picard/illumina/parserTests/posParser");
- public static final File S_1_1_POS = new File(TEST_DIR, "s_1_1_pos.txt");
- public static final File S_1_2_POS = new File(TEST_DIR, "s_1_2_pos.txt");
- public static final File S_1_3_POS = new File(TEST_DIR, "s_1_3_pos.txt");
- public static final File S_9_3201_POS = new File(TEST_DIR, "s_9_3201_pos.txt");
- public static final File S_9_3202_POS = new File(TEST_DIR, "s_9_3202_pos.txt");
-
- static class TestResult {
- public final int lane;
- public final int tile;
- public final float xPos;
- public final float yPos;
- public final int xQSeqCoord;
- public final int yQSeqCoord;
-
- public TestResult(final int lane, final int tile, final float xPos, final float yPos, final int xQseqCoord, final int yQSeqCoord) {
- this.lane = lane;
- this.tile = tile;
- this.xPos = xPos;
- this.yPos = yPos;
- this.xQSeqCoord = xQseqCoord;
- this.yQSeqCoord = yQSeqCoord;
- }
- }
-
- public static List<TestResult> makeTestResults(final int lane, final int tile, final float [] xyPos, final int [] xyQseq) {
- final ArrayList<TestResult> results = new ArrayList<TestResult>();
- for(int i = 0; i < xyPos.length; i+=2) {
- results.add(new TestResult(lane, tile, xyPos[i], xyPos[i+1], xyQseq[i], xyQseq[i+1]));
- }
- return results;
- }
-
- public static Map<String, List<TestResult>> TEST_DATA = new HashMap<String, List<TestResult>>();
- static {
- float[] pos = {
- 101.35f, 207.8f,
- 102.88f, 209.22f,
- 0.35f, 211.99f,
- 10.11f, 2540.55f,
- 11011.81f, 211
- };
-
- int[] qseq = {
- 2014, 3078,
- 2029, 3092,
- 1004, 3120,
- 1101, 26406,
- 111118, 3110
- };
- TEST_DATA.put(S_1_1_POS.getName(), makeTestResults(1,1, pos, qseq));
-
- pos = new float[] {
- 2101.35f, 207.82f,
- 202.88f, 209.222f,
- 2.35f, 211.992f,
- 2.11f, 2540.552f,
- 21011.81f, 2112f
- };
-
- qseq = new int[]{
- 22014, 3078,
- 3029, 3092,
- 1024, 3120,
- 1021, 26406,
- 211118, 22120
- };
- TEST_DATA.put(S_1_2_POS.getName(), makeTestResults(1,2, pos, qseq));
-
- pos = new float[] {
- 301.35f, 207.83f,
- 302.88f, 209.23f,
- 0.35f, 911.993f,
- 30.11f, 2540.553f
- };
-
- qseq = new int[]{
- 4014, 3078,
- 4029, 3092,
- 1004, 10120,
- 1301, 26406
- };
- TEST_DATA.put(S_1_3_POS.getName(), makeTestResults(1,3, pos, qseq));
-
- pos = new float[] {
- 901.00f, 8011.00f,
- 9.05f, 32.00f,
- 3201.11f, 32001.00f
- };
-
- qseq = new int[]{
- 10010, 81110,
- 1091, 1320,
- 33011, 321010
- };
- TEST_DATA.put(S_9_3201_POS.getName(), makeTestResults(9,3201, pos, qseq));
-
- pos = new float[] {
- 3252f, 7785f,
- 97.350f, 0.01f,
- 88.00f, 942.01f,
- 87.85f, 70.01f,
- 32022.000f, 32000.0f
- };
-
- qseq = new int[]{
- 33520, 78850,
- 1974, 1000,
- 1880, 10420,
- 1879, 1700,
- 321220, 321000
- };
- TEST_DATA.put(S_9_3202_POS.getName(), makeTestResults(9,3202, pos, qseq));
- }
-
- public static void compareResults(final TestResult tr, final PositionalData pd, final int index) {
- Assert.assertEquals(tr.xQSeqCoord, pd.getXCoordinate(), " At index " + index);
- Assert.assertEquals(tr.yQSeqCoord, pd.getYCoordinate(), " At index " + index);
- }
-
- @DataProvider(name = "singleTileData")
- public Object [][] singleTileData() {
- return new Object[][]{
- {1, 1, S_1_1_POS},
- {1, null, S_1_1_POS},
- {3202, 3202, S_9_3202_POS},
- {3202, null, S_9_3202_POS}
- };
- }
-
- @Test(dataProvider = "singleTileData")
- public void singleTileDataTest(final int tile, final Integer startingTile, final File file) {
- final IlluminaFileMap fm = new IlluminaFileMap();
- fm.put(tile, file);
-
- final PosParser parser = (startingTile == null) ? new PosParser(fm, IlluminaFileUtil.SupportedIlluminaFormat.Pos) :
- new PosParser(fm, startingTile, IlluminaFileUtil.SupportedIlluminaFormat.Pos);
- final Iterator<TestResult> expected = TEST_DATA.get(file.getName()).iterator();
-
- int index = 0;
- while(expected.hasNext()) {
- Assert.assertTrue(parser.hasNext());
- compareResults(expected.next(), parser.next(), index);
- ++index;
- }
-
- Assert.assertFalse(parser.hasNext());
- parser.close();
- }
-
- @DataProvider(name = "multiTileData")
- public Object [][] multiTileData() {
- return new Object[][]{
- {makeList(1,2,3), null, makeList(S_1_1_POS, S_1_2_POS, S_1_3_POS)},
- {makeList(1,2,3), 1, makeList(S_1_1_POS, S_1_2_POS, S_1_3_POS)},
- {makeList(1,3), 0, makeList(S_1_1_POS, S_1_3_POS)},
- {makeList(3201,3202), null, makeList(S_9_3201_POS, S_9_3202_POS)},
- {makeList(3201,3202), 1, makeList(S_9_3201_POS, S_9_3202_POS)},
- };
- }
-
- @Test(dataProvider = "multiTileData")
- public void multiTileDataTest(final List<Integer> tiles, final Integer startingTileIndex, final List<File> files) {
- final IlluminaFileMap fm = new IlluminaFileMap();
- for(int i = 0; i < tiles.size(); i++) {
- fm.put(tiles.get(i), files.get(i));
- }
-
- final PosParser parser = (startingTileIndex == null) ? new PosParser(fm, IlluminaFileUtil.SupportedIlluminaFormat.Pos) :
- new PosParser(fm, tiles.get(startingTileIndex), IlluminaFileUtil.SupportedIlluminaFormat.Pos);
- final List<TestResult> expectedResultsList = new ArrayList<TestResult>();
- final int t1 = (startingTileIndex != null) ? startingTileIndex : 0;
- for(int i = t1; i < tiles.size(); i++) {
- expectedResultsList.addAll(TEST_DATA.get(files.get(i).getName()));
- }
-
- final Iterator<TestResult> expected = expectedResultsList.iterator();
-
- int index = 0;
- while(expected.hasNext()) {
- Assert.assertTrue(parser.hasNext());
- compareResults(expected.next(), parser.next(), index);
- ++index;
- }
-
- Assert.assertFalse(parser.hasNext());
- parser.close();
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/fakers/BclFileFakerTest.java b/src/tests/java/net/sf/picard/illumina/parser/fakers/BclFileFakerTest.java
deleted file mode 100644
index 445da40..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/fakers/BclFileFakerTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package net.sf.picard.illumina.parser.fakers;
-
-import net.sf.picard.illumina.parser.readers.BclQualityEvaluationStrategy;
-import net.sf.picard.illumina.parser.readers.BclReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * The MIT License
- * <p/>
- * Copyright (c) 2014 The Broad Institute
- * <p/>
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * <p/>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * <p/>
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-public class BclFileFakerTest {
-
- @Test
- public void testFileLengthMatchesHeaderLength() throws Exception {
- final File fakeFile = File.createTempFile("BclFileFakerTest", ".bcl");
- fakeFile.deleteOnExit();
-
- new BclFileFaker().fakeFile(fakeFile, 100000);
- // .make() has a number of checks for the file
- final BclReader bclReader = new BclReader(
- fakeFile,
- new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY), false);
- Assert.assertEquals(100000, BclReader.getNumberOfClusters(fakeFile));
- Assert.assertEquals(BclReader.getNumberOfClusters(fakeFile), fakeFile.length() - 4);
- }
-
- @Test
- public void testGZFileIsActuallyGZipped() throws Exception {
- final File fakeFile = File.createTempFile("BclFileFakerTest", ".bcl.gz");
- fakeFile.deleteOnExit();
-
- new BclFileFaker().fakeFile(fakeFile, 100000);
- new BclReader(
- fakeFile,
- new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY), false);
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/AbstractIlluminaPositionFileReaderTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/AbstractIlluminaPositionFileReaderTest.java
deleted file mode 100644
index f245e2e..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/AbstractIlluminaPositionFileReaderTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-
-import net.sf.picard.PicardException;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class AbstractIlluminaPositionFileReaderTest {
-
- //Pos values should never be negative
- private static final float [] X_COORDS = new float[] {
- 0.00f, 0.012f, 0.09f, 1.44f, 23.45f, 155.893f, 588.921f, 801f, 1201.182f, 101.25f,
- 13201.01f, 0.59f, 0.3540f, 9999999.99f, 7989.88999f, 9298.134f, 12.3f, 109.09f, 54.3f, 17.15f
- };
-
- private static final int [] X_QSEQ_COORDS = new int [] {
- 1000, 1000, 1001, 1014, 1235, 2559, 6889, 9010, 13012, 2013,
- 133010, 1006, 1004, 100001000, 80899, 93981, 1123, 2091, 1543, 1172
- };
-
- private static final float [] Y_COORDS = new float[] {
- //A note on index 2 -> this number causes truncation of the float, presumably that's fine as
- //Illumina describes the value as a floating point number
- 679.99f, 32.0145f, 1878854.89f, 0.00f, 23.45f, 9875.64f, 42.42f, 64.01530f, 103.25f, 102.75f,
- 13201.01f, 0.59f, 0.3540f, 0.02f, 9875.66f, 9298.134f, 12.3f, 67.012f, 0.1254f, 19.54f
- };
-
- private static final int [] Y_QSEQ_COORDS = new int [] {
- 7800, 1320, 18789548, 1000, 1235, 99756, 1424, 1640, 2033, 2028,
- 133010, 1006, 1004, 1000, 99757, 93981, 1123, 1670, 1001, 1195
- };
-
-
- private static class MockPositionFileReader extends AbstractIlluminaPositionFileReader {
- private final float [] xCoords;
- private final float [] yCoords;
- private int currentCluster;
-
- public MockPositionFileReader(final String fileName, final int lane, final int tile, final float [] xCoords, final float [] yCoords) {
- super(new File(fileName));
- this.xCoords = xCoords;
- this.yCoords = yCoords;
- currentCluster = 0;
- }
-
- public MockPositionFileReader(final int lane, final int tile, final float [] xCoords, final float [] yCoords) {
- super(new File("s_" + lane + "_" + tile + "_pos.txt.gz"));
- this.xCoords = xCoords;
- this.yCoords = yCoords;
- currentCluster = 0;
- }
-
- @Override
- protected PositionInfo unsafeNextInfo() {
- PositionInfo pi = new PositionInfo(xCoords[currentCluster], yCoords[currentCluster], getLane(), getTile());
- ++currentCluster;
- return pi;
- }
-
- @Override
- protected String makeExceptionMsg() {
- return "Abstract IlluminaPositionFileReaderTest currentCluster=" + currentCluster;
- }
-
- @Override
- public boolean hasNext() {
- return currentCluster < xCoords.length;
- }
-
- @Override
- public void close() {
- }
- }
-
- @Test
- public void validReaderTest() {
- final int lane = 2;
- final int tile = 8;
- final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader(lane, tile, X_COORDS, Y_COORDS);
-
- int index = 0;
- while(reader.hasNext()) {
- AbstractIlluminaPositionFileReader.PositionInfo pi = reader.next();
- Assert.assertEquals(pi.lane, lane);
- Assert.assertEquals(pi.tile, tile);
- Assert.assertEquals(pi.xPos, X_COORDS[index]);
- Assert.assertEquals(pi.yPos, Y_COORDS[index]);
- Assert.assertEquals(pi.xQseqCoord, X_QSEQ_COORDS[index]);
- Assert.assertEquals(pi.yQseqCoord, Y_QSEQ_COORDS[index]);
- ++index;
- }
-
- if(index < X_COORDS.length) {
- throw new RuntimeException("Elements still remaining in test data!");
- }
- }
-
- @DataProvider(name="invalidPositions")
- public Object [][] invalidPositions() {
- return new Object[][] {
- {new float[]{0f, 5f, -11f}, new float[]{1f, 12f, 13f}},
- {new float[]{-15.05f}, new float[]{19801f}},
- {new float[]{10.05f, 3f, 8f}, new float[]{-120899.723f, 4f, 9f}},
- {new float[]{9.0f, 2.3f, AbstractIlluminaPositionFileReader.MAX_POS + 1}, new float[]{3.2f, 8.1f, 99.1f}},
- {new float[]{0.01f}, new float[]{AbstractIlluminaPositionFileReader.MAX_POS + 1000}}
- };
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class, dataProvider = "invalidPositions")
- public void invalidReaderTest(float [] xCoords, float [] yCoords){
- final int lane = 3;
- final int tile = 4;
-
- final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader(lane, tile, xCoords, yCoords);
- int index = 0;
- while(reader.hasNext()) {
- AbstractIlluminaPositionFileReader.PositionInfo pi = reader.next();
- Assert.assertEquals(pi.lane, lane);
- Assert.assertEquals(pi.tile, tile);
- Assert.assertEquals(pi.xPos, xCoords[index]);
- Assert.assertEquals(pi.yPos, yCoords[index]);
- ++index;
- }
- }
-
- @DataProvider(name = "invalidFileNames")
- public Object [][] invalidFileNames() {
- return new Object[][]{
- {"whatever.locs"},
- {"whatever.clocs"},
- {"whatever.pos"},
- {"s_1.clocs"},
- {"s__2.clocs"},
- {"s_1_4.Notclocs"},
- {"a_1_4.pos"},
- {"a_1_4.pos.txt"}
- };
- }
-
- @Test(expectedExceptions = PicardException.class, dataProvider = "invalidFileNames")
- public void invalidFileNamesTest(final String fileName){
- final int lane = 3;
- final int tile = 4;
-
- final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader(fileName, 0, 0, null, null);
- }
-
- @Test(expectedExceptions = UnsupportedOperationException.class)
- public void iteratorRemoveTest() {
- final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader("s_1_1_pos.txt", 0, 0, null, null);
- reader.remove();
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/BclReaderTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/BclReaderTest.java
deleted file mode 100644
index 1d4bb99..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/BclReaderTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.illumina.parser.BclData;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
-public class BclReaderTest {
-
- public static final File TestDataDir = new File("testdata/net/sf/picard/illumina/readerTests");
- public static final File PASSING_BCL_FILE = new File(TestDataDir, "bcl_passing.bcl");
- public static final File QUAL_0FAILING_BCL_FILE = new File(TestDataDir, "bcl_failing.bcl");
- public static final File QUAL_1FAILING_BCL_FILE = new File(TestDataDir, "bcl_failing2.bcl");
- public static final File FILE_TOO_LONG = new File(TestDataDir, "bcl_tooLong.bcl");
- public static final File FILE_TOO_SHORT = new File(TestDataDir, "bcl_tooShort.bcl");
-
- public static final char[] expectedBases = new char[]{
- 'C', 'A', 'A', 'A', 'T', 'C', 'T', 'G', 'T', 'A', 'A', 'G', 'C', 'C', 'A', 'A',
- 'C', 'A', 'C', 'C', 'A', 'A', 'C', 'G', 'A', 'T', 'A', 'C', 'A', 'A', 'C', 'A',
- 'T', 'G', 'C', 'A', 'C', 'A', 'A', 'C', 'G', 'C', 'A', 'A', 'G', 'T', 'G', 'C',
- 'A', 'C', 'G', 'T', 'A', 'C', 'A', 'A', 'C', 'G', 'C', 'A', 'C', 'A', 'T', 'T',
- 'T', 'A', 'A', 'G', 'C', 'G', 'T', 'C', 'A', 'T', 'G', 'A', 'G', 'C', 'T', 'C',
- 'T', 'A', 'C', 'G', 'A', 'A', 'C', 'C', 'C', 'A', 'T', 'A', 'T', 'G', 'G', 'G',
- 'C', 'T', 'G', 'A', 'A', '.', '.', 'G', 'A', 'C', 'C', 'G', 'T', 'A', 'C', 'A',
- 'G', 'T', 'G', 'T', 'A', '.'
- };
-
- public static final int[] expectedQuals = new int[]{
- 18, 29, 8, 17, 27, 25, 28, 27, 9, 29, 8, 20, 25, 24, 27, 27,
- 30, 8, 19, 24, 29, 29, 25, 28, 8, 29, 26, 24, 29, 8, 18, 8,
- 29, 28, 26, 29, 25, 8, 26, 25, 28, 25, 8, 28, 28, 27, 29, 26,
- 25, 26, 27, 25, 8, 18, 8, 26, 24, 29, 25, 8, 24, 8, 25, 27,
- 27, 25, 8, 28, 24, 27, 25, 25, 8, 27, 25, 8, 16, 24, 28, 25,
- 28, 8, 24, 27, 25, 8, 20, 29, 24, 27, 28, 8, 23, 10, 23, 11,
- 15, 11, 10, 12, 12, 2, 2, 31, 24, 8, 4, 36, 12, 17, 21, 4,
- 8, 12, 18, 23, 27, 2
- };
-
- public byte[] qualsAsBytes() {
- final byte[] byteVals = new byte[expectedQuals.length];
- for (int i = 0; i < byteVals.length; i++) {
- byteVals[i] = (byte) expectedQuals[i];
- }
- return byteVals;
- }
-
- @Test
- public void readValidFile() {
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
- final BclReader reader = new BclReader(PASSING_BCL_FILE, bclQualityEvaluationStrategy, false);
- final byte[] quals = qualsAsBytes();
-
- Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
-
- int readNum = 0;
- while (readNum < reader.numClustersPerCycle[0]) {
- final BclData bv = reader.next();
- Assert.assertEquals(bv.bases[0][0], expectedBases[readNum], " On num cluster: " + readNum);
- Assert.assertEquals(bv.qualities[0][0], quals[readNum], " On num cluster: " + readNum);
- ++readNum;
- }
- bclQualityEvaluationStrategy.assertMinimumQualities();
- reader.close();
- }
-
- @DataProvider(name = "failingFiles")
- public Object[][] failingFiles() {
- return new Object[][]{
- {QUAL_0FAILING_BCL_FILE},
- {QUAL_1FAILING_BCL_FILE},
- {new File(TestDataDir, "SomeNoneExistentFile.bcl")},
- {FILE_TOO_LONG},
- {FILE_TOO_SHORT}
- };
- }
-
- @Test(expectedExceptions = PicardException.class, dataProvider = "failingFiles")
- public void failingFileTest(final File failingFile) {
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
- final BclReader reader = new BclReader(failingFile, bclQualityEvaluationStrategy, false);
- Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
- while (reader.hasNext()) {
- reader.next();
- }
- reader.close();
- bclQualityEvaluationStrategy.assertMinimumQualities();
- }
-
- /**
- * Asserts appropriate functionality of a quality-minimum-customized BLC reader, such that (1) if sub-Q2 qualities are found, the BCL
- * reader does not throw an exception, (2) sub-minimum calls are set to quality 1 and (3) sub-minimum calls are counted up properly.
- */
- @Test
- public void lowQualityButPassingTest() throws ExecutionException, InterruptedException {
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(1);
-
- // Build a list of callables, then submit them and check for errors.
- final Collection<Callable<Void>> callables = new LinkedList<Callable<Void>>();
- for (int i = 0; i < 10; i++) {
- final boolean even_i = i % 2 == 0;
- callables.add(new Callable<Void>() {
- @Override
- public Void call() throws Exception {
- final BclReader reader = new BclReader(even_i ? QUAL_1FAILING_BCL_FILE : QUAL_0FAILING_BCL_FILE,
- bclQualityEvaluationStrategy, false);
- Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
- while (reader.hasNext()) {
- reader.next();
- }
- reader.close();
- return null;
- }
- });
- }
- final ExecutorService executorService = Executors.newFixedThreadPool(callables.size());
- final Collection<Future<Void>> futures = new LinkedList<Future<Void>>();
- for (final Callable<Void> callable : callables) {
- futures.add(executorService.submit(callable));
- }
- for (final Future<Void> future : futures) {
- future.get();
- }
- bclQualityEvaluationStrategy.assertMinimumQualities();
- Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 0), 25);
- Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 1), 25);
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void lowQualityAndFailingTest() throws ExecutionException, InterruptedException {
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
-
- // Build a list of callables, then submit them and check for errors.
- final Collection<Callable<Void>> callables = new LinkedList<Callable<Void>>();
- for (int i = 0; i < 10; i++) {
- final boolean even_i = i % 2 == 0;
- callables.add(new Callable<Void>() {
- @Override
- public Void call() throws Exception {
- final BclReader reader = new BclReader(even_i ? QUAL_1FAILING_BCL_FILE : QUAL_0FAILING_BCL_FILE,
- bclQualityEvaluationStrategy, false);
- Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
- while (reader.hasNext()) {
- reader.next();
- }
- reader.close();
- return null;
- }
- });
- }
- final ExecutorService executorService = Executors.newFixedThreadPool(callables.size());
- final Collection<Future<Void>> futures = new LinkedList<Future<Void>>();
- for (final Callable<Void> callable : callables) {
- futures.add(executorService.submit(callable));
- }
- for (final Future<Void> future : futures) {
- future.get();
- }
- Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 0), 25);
- Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 1), 25);
- bclQualityEvaluationStrategy.assertMinimumQualities();
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/ClocsFileReaderTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/ClocsFileReaderTest.java
deleted file mode 100644
index bcfe270..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/ClocsFileReaderTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class ClocsFileReaderTest {
-
- private static final File TEST_DIR = new File("testdata/net/sf/picard/illumina/readerTests");
- private static final File PASSING_CLOCS_FILE = new File(TEST_DIR, "s_2_1101.clocs");
-
- public static final int blockSize = 25;
- public static final File MULTI_BIN_PASSING_CLOCS_FILE = new File(TEST_DIR, "s_3_2102.clocs");
- public static final File MBCF_W_EMPTY_BINS_AT_START = new File(TEST_DIR, "s_3_2103.clocs");
- public static final File MBCF_W_EMPTY_BINS_AT_END = new File(TEST_DIR, "s_3_2104.clocs");
- public static final File MBCF_W_EMPTY_BINS_THROUGHOUT = new File(TEST_DIR, "s_3_2105.clocs");
- public static final int MULTI_BIN_PASSING_CLOCS_TILE = 2102;
- public static final int MULTI_BIN_PASSING_CLOCS_LANE = 3;
- public static final int MULTI_BIN_EXPECTED_NUM_VALUES = 271;
-
- public static final File MBCF_MULTI_ROW_FILE = new File(TEST_DIR, "s_1_2106.clocs");
-
- public static final float [][] MULTI_BIN_FLOAT_COORD = {
- {9.7f, 1f}, {16.9f, 1.3f}, {18.5f, 22.6f}, {39.1f, 0.5f}, {46.1f, 1f},
- {38.4f, 8.4f}, {59.7f, 1.1f}, {89.9f, 0.30f}, {87.1f, 0.6f}, {83.6f, 0.7f},
- {111.4f, 14.3f}, {109.1f, 15f}, {105.7f, 15f}
- };
- public static final int [][] MULTI_BIN_Q_SEQ_COORD = {
- {1097, 1010}, {1169, 1013}, {1185, 1226}, {1391, 1005}, {1461, 1010},
- {1384, 1084}, {1597, 1011}, {1899, 1003}, {1871, 1006}, {1836, 1007},
- {2114, 1143}, {2091, 1150}, {2057, 1150}
- };
- public static final int [] MULTI_BIN_INDICES = {
- 0, 1, 34, 39, 40,
- 59, 99, 163, 164, 165,
- 268, 269, 270
- };
-
-
- public static final float [][] MULTI_BIN_FLOAT_COORD_MIXED_EMPTY_BINS = {
- {9.7f, 1f}, {16.9f, 1.3f}, {18.5f, 22.6f}, {89.1f, 0.5f}, {96.1f, 1f},
- {88.4f, 8.4f}, {109.7f, 1.1f}, {164.9f, 0.30f}, {162.1f, 0.6f}, {158.6f, 0.7f},
- {186.4f, 14.3f}, {184.1f, 15f}, {180.7f, 15f}
- };
- public static final int [][] MULTI_BIN_Q_SEQ_COORD_MIXED_EMPTY_BINS = {
- {1097, 1010}, {1169, 1013}, {1185, 1226}, {1891, 1005}, {1961, 1010},
- {1884, 1084}, {2097, 1011}, {2649, 1003}, {2621, 1006}, {2586, 1007},
- {2864, 1143}, {2841, 1150}, {2807, 1150}
- };
-
- //These are all essentially the same file but with 0 or more empty bins spread through them
- @DataProvider(name = "multiBinPassingClocsFiles")
- public Object [][] multiBinPassingClocsFiles() {
- return new Object[][] {
- {MULTI_BIN_PASSING_CLOCS_FILE, 0, 2102},
- {MBCF_W_EMPTY_BINS_AT_START, 2, 2103},
- {MBCF_W_EMPTY_BINS_AT_END, 0, 2104}
- };
- }
-
- @Test(dataProvider = "multiBinPassingClocsFiles")
- public void multiBinTest(final File multiBinPassingClocsFile, final int binShift, final int tile) {
- final ClocsFileReader clocsReader = new ClocsFileReader(multiBinPassingClocsFile);
-
- int tdIndex = 0;
- int nextIndex = MULTI_BIN_INDICES[tdIndex];
- for(int i = 0; i < MULTI_BIN_EXPECTED_NUM_VALUES; i++) {
- Assert.assertTrue(clocsReader.hasNext());
- final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
-
- if(i == nextIndex) {
- PosFileReaderTest.comparePositionInfo(piClocs, MULTI_BIN_FLOAT_COORD[tdIndex][0] + binShift * blockSize, MULTI_BIN_FLOAT_COORD[tdIndex][1],
- MULTI_BIN_Q_SEQ_COORD[tdIndex][0] + binShift * blockSize * 10, MULTI_BIN_Q_SEQ_COORD[tdIndex][1],
- MULTI_BIN_PASSING_CLOCS_LANE, tile,
- tdIndex);
- if(tdIndex < MULTI_BIN_INDICES.length-1) {
- nextIndex = MULTI_BIN_INDICES[++tdIndex];
- }
- }
- }
-
- Assert.assertFalse(clocsReader.hasNext());
- }
-
- @Test
- public void multiBinMixedEmptyBinTest() {
- final ClocsFileReader clocsReader = new ClocsFileReader(MBCF_W_EMPTY_BINS_THROUGHOUT);
-
- int tdIndex = 0;
- int nextIndex = MULTI_BIN_INDICES[tdIndex];
- for(int i = 0; i < MULTI_BIN_EXPECTED_NUM_VALUES; i++) {
- Assert.assertTrue(clocsReader.hasNext());
- final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
-
- if(i == nextIndex) {
- PosFileReaderTest.comparePositionInfo(piClocs, MULTI_BIN_FLOAT_COORD_MIXED_EMPTY_BINS[tdIndex][0], MULTI_BIN_FLOAT_COORD_MIXED_EMPTY_BINS[tdIndex][1],
- MULTI_BIN_Q_SEQ_COORD_MIXED_EMPTY_BINS[tdIndex][0], MULTI_BIN_Q_SEQ_COORD_MIXED_EMPTY_BINS[tdIndex][1],
- MULTI_BIN_PASSING_CLOCS_LANE, 2105, tdIndex);
- if(tdIndex < MULTI_BIN_INDICES.length-1) {
- nextIndex = MULTI_BIN_INDICES[++tdIndex];
- }
- }
- }
-
- Assert.assertFalse(clocsReader.hasNext());
- }
-
- public static final int [] MULTI_ROW_INDICES = new int[]{
- 1, 10, 200, 2000, 10000, 30000
- };
- public static final float [][] MULTI_ROW_FLOAT_COORD = new float[][] {
- {23.2f, 0.2f}, {16.7f, 5.7f}, {60.9f, 15.0f},
- {596.2f, 19.6f}, {999.3f, 47.3f}, {1015f, 115.5f}
- };
-
- public static final int [][] MULTI_ROW_Q_SEQ_COORD = new int[][] {
- {1232, 1002}, {1167, 1057 }, {1609, 1150},
- {6962, 1196}, {10993, 1473}, {11150, 2155}
- };
-
- @Test
- public void multiRowFileTest() {
- final ClocsFileReader clocsReader = new ClocsFileReader(MBCF_MULTI_ROW_FILE);
-
- int tdIndex = 0;
- int nextIndex = MULTI_ROW_INDICES[tdIndex];
- for(int i = 1; i <= 39891; i++) {
- Assert.assertTrue(clocsReader.hasNext(), " i == " + i);
- final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
-
- if(i == nextIndex) {
- PosFileReaderTest.comparePositionInfo(piClocs, MULTI_ROW_FLOAT_COORD[tdIndex][0], MULTI_ROW_FLOAT_COORD[tdIndex][1],
- MULTI_ROW_Q_SEQ_COORD[tdIndex][0], MULTI_ROW_Q_SEQ_COORD[tdIndex][1],
- 1, 2106, tdIndex);
-
- if(tdIndex < MULTI_ROW_INDICES.length-1) {
- nextIndex = MULTI_ROW_INDICES[++tdIndex];
- }
- }
- }
-
- Assert.assertFalse(clocsReader.hasNext());
-
- }
-
- @Test
- public void singleBinTest() {
- final ClocsFileReader clocsReader = new ClocsFileReader(PASSING_CLOCS_FILE);
-
- for(int i = 0; i < PosFileReaderTest.PassingPosFloatCoord.length; i++) {
- Assert.assertTrue(clocsReader.hasNext());
- final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
- PosFileReaderTest.comparePositionInfo(piClocs, i);
- }
-
- Assert.assertFalse(clocsReader.hasNext());
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/FilterFileReaderTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/FilterFileReaderTest.java
deleted file mode 100644
index a031224..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/FilterFileReaderTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.NoSuchElementException;
-
-public class FilterFileReaderTest {
- public static File TEST_DATA_DIR = new File("testdata/net/sf/picard/illumina/readerTests");
- public static final File PASSING_FILTER_FILE = new File(TEST_DATA_DIR, "pf_passing.filter");
-
- public static final boolean [] expectedPfs = {
- false, false, false, false, true, false, false, false, true, true, false, false, true, false, true, false,
- true, false, false, true, true, true, true, false, true, true, false, true, true, true, true, false,
- true, true, true, true, false, true, false, false, false, true, true, false, false, true, false, true,
- false, true, true, true, false, false, true, false, false, false, true, true, false, false, false, true
- };
-
- @Test
- public void readValidFile() {
- final FilterFileReader reader = new FilterFileReader(PASSING_FILTER_FILE);
- Assert.assertEquals(reader.numClusters, expectedPfs.length);
- for(int i = 0; i < reader.numClusters; i++) {
- Assert.assertEquals(reader.hasNext(), true);
- Assert.assertEquals(reader.next().booleanValue(), expectedPfs[i]);
- }
-
- Assert.assertEquals(false, reader.hasNext());
- }
-
- @Test(expectedExceptions = NoSuchElementException.class)
- public void readPastEnd() {
- final FilterFileReader reader = new FilterFileReader(PASSING_FILTER_FILE);
- for(int i = 0; i < reader.numClusters; i++) {
- reader.next();
- }
-
- Assert.assertEquals(false, reader.hasNext());
- reader.next();
- }
-
- @DataProvider(name="failingFiles")
- public Object[][] failingFiles() {
- return new Object[][] {
- {"pf_failing1.filter"},
- {"pf_failing2.filter"},
- {"pf_tooLarge.filter"},
- {"pf_tooShort.filter"},
- {"pf_badOpeningBytes.filter"},
- {"pf_badVersionBytes.filter"},
- {"pf_nonExistentFile.filter"}
- };
- }
-
- @Test(dataProvider = "failingFiles", expectedExceptions = PicardException.class)
- public void readInvalidValues(final String failingFile) {
- final FilterFileReader reader = new FilterFileReader(new File(TEST_DATA_DIR, failingFile));
- while(reader.hasNext()) {
- reader.next();
- }
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/IlluminaFileUtilTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/IlluminaFileUtilTest.java
deleted file mode 100644
index e0ea87c..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/IlluminaFileUtilTest.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-/**
- * Created by IntelliJ IDEA.
- * User: jburke
- * Date: 12/29/11
- * Time: 2:42 PM
- * To change this template use File | Settings | File Templates.
- */
-public class IlluminaFileUtilTest {
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/LocsFileReaderTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/LocsFileReaderTest.java
deleted file mode 100644
index 4ff065f..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/LocsFileReaderTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class LocsFileReaderTest {
- private static final File TestDir = new File("testdata/net/sf/picard/illumina/readerTests");
- public static final File LocsFile = new File(TestDir, "s_1_6.locs");
- public static final int ExpectedTile = 6;
- public static final int ExpectedLane = 1;
- public static final int NumValues = 200;
- public static final float [][] FloatCoords = {
- {1703.0117f, 64.01593f}, {1660.3038f, 64.08882f}, {1769.7501f, 65.12467f}, {1726.6725f, 68.367805f}, {1401.213f, 72.07282f},
- {1358.2775f, 72.07892f}, {1370.5197f, 77.699715f}, {1661.5403f, 77.70719f}, {1682.0504f, 78.76725f}, {1563.8765f, 79.08009f}
- };
- public static final int [][] QSeqCoords = {
- {18030, 1640}, {17603, 1641}, {18698, 1651}, {18267, 1684}, {15012, 1721},
- {14583, 1721}, {14705, 1777}, {17615, 1777}, {17821, 1788}, {16639, 1791}
- };
- public static final int [] Indices = {
- 0, 1, 19, 59, 100,
- 101, 179, 180, 198, 199
- };
-
- @Test
- public void passingFileTest() {
- final LocsFileReader reader = new LocsFileReader(LocsFile);
-
- int tdIndex = 0;
- int nextIndex = Indices[tdIndex];
- for(int i = 0; i < NumValues; i++) {
- Assert.assertTrue(reader.hasNext());
-
- final AbstractIlluminaPositionFileReader.PositionInfo piLocs = reader.next();
-
- if(i == nextIndex) {
- PosFileReaderTest.comparePositionInfo(piLocs, FloatCoords[tdIndex][0], FloatCoords[tdIndex][1],
- QSeqCoords[tdIndex][0], QSeqCoords[tdIndex][1],
- ExpectedLane, ExpectedTile, i);
-
- if(tdIndex < Indices.length-1) {
- nextIndex = Indices[++tdIndex];
- }
- }
- }
-
- Assert.assertFalse(reader.hasNext());
- }
-
- @DataProvider(name = "invalidFiles")
- public Object[][]invalidFiles() {
- return new Object[][] {
- {"s_1_7.locs"},
- {"s_1_8.locs"},
- {"s_1_9.locs"},
- {"s_1_10.locs"},
- {"s_f2af.locs"}
- };
- }
-
- @Test(expectedExceptions = PicardException.class, dataProvider = "invalidFiles")
- public void invalidFilesTest(final String fileName) {
- final LocsFileReader reader = new LocsFileReader(new File(TestDir, fileName));
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactoryTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactoryTest.java
deleted file mode 100644
index cf5b82c..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactoryTest.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.nio.*;
-import java.util.Iterator;
-
-public class MMapBackedIteratorFactoryTest {
- public static File TestDataDir = new File("testdata/net/sf/picard/illumina/readerTests");
- public static File BinFile = new File(TestDataDir, "binary_passing.bin");
-
- public static final int FileLength = 51;
- //remember that the MMappedBinaryFileReader assumes little endianness
- public byte[] fileAsBytes(final int start, final int end){
- final int [] bInts = {
- 0x31, 0x22, 0x41, 0x01, 0x45, 0x6E, 0x64, 0x4F,
- 0x66, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42,
- 0x6F, 0x64, 0x79, 0x50, 0x61, 0x72, 0x74, 0x6F,
- 0x66, 0x54, 0x68, 0x65, 0x46, 0x69, 0x6C, 0x65,
- 0x37, 0x37, 0x0A, 0x45, 0x6E, 0x64, 0x43, 0x6F,
- 0x6D, 0x6D, 0x75, 0x6E, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6F, 0x6E
- };
-
- final int total = end - start + 1;
- final byte [] bytes = new byte[total];
- for(int i = 0; i < total; i++) {
- bytes[i] = (byte)bInts[start + i];
- }
- return bytes;
- }
-
- //Note these integers are different from the ones in fileAsBytes->bInts (because we're talking about 4 bytes at a time not one)
- @DataProvider(name="passing_bin_asTdBuffer")
- public ByteBuffer headerAsByteBuffer(final int headerSize) {
- final byte [] bytes = fileAsBytes(0, headerSize-1);
- final ByteBuffer bb = ByteBuffer.allocate(bytes.length);
- bb.put(bytes);
- bb.position(0);
- bb.order(ByteOrder.LITTLE_ENDIAN);
- return bb;
- }
-
- @DataProvider(name="passing_bin_asTdBuffer")
- public ByteBuffer fileAsByteBuffer(final int headerSize) {
- final byte [] bytes = fileAsBytes(headerSize, FileLength-1);
- final ByteBuffer bb = ByteBuffer.allocate(bytes.length);
- bb.put(bytes);
- bb.position(0);
- bb.order(ByteOrder.LITTLE_ENDIAN);
- return bb;
- }
-
- abstract class FileTestDef<T> {
- public final int headerSize;
- public final BinaryFileIterator bbIter;
- public final int numElements;
-
- public FileTestDef(final int headerSize, final BinaryFileIterator<T> bbIter) {
- this.headerSize = headerSize;
- this.bbIter = bbIter;
- this.numElements = fileAsBytes(headerSize, FileLength-1).length / bbIter.getElementSize();
- }
-
- public void test() {
- final ByteBuffer testBuffer = fileAsByteBuffer(headerSize);
-
-
- if(headerSize > 0) {
- final ByteBuffer headerBuffer = headerAsByteBuffer(headerSize);
- testHeaderBytes(headerBuffer, bbIter.getHeaderBytes());
- }
-
- bbIter.assertTotalElementsEqual(numElements);
- final Iterator<T> testIter = getTestIterator(testBuffer);
-
- while(hasNext(testIter, bbIter)) {
- Assert.assertEquals(testIter.next(), bbIter.next());
- }
- }
-
- public abstract Iterator<T> getTestIterator(final ByteBuffer byteBuffer);
-
- public boolean hasNext(final Iterator<T> testIter, final Iterator<T> fileIter) {
- if(testIter.hasNext() && fileIter.hasNext())
- return true;
-
- if(testIter.hasNext()) {
- throw new PicardException("Test data (testIter) has more iterations while fileIter does not!");
- }
-
- if(fileIter.hasNext()) {
- throw new PicardException("File data (fileIter) has more iterations while testIter does not!");
- }
-
- return false;
- }
- }
-
- abstract class NoHeaderTestIter<T> implements Iterator<T> {
- public final Buffer buf;
-
- public NoHeaderTestIter(final Buffer buf) {
- this.buf = buf;
- }
-
- public boolean hasNext() {
- return buf.hasRemaining();
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-
- @DataProvider(name = "validTestDefs")
- public Object[][] validTestDefs() {
- return new Object[][] {
- {
- new FileTestDef<Integer>(15, MMapBackedIteratorFactory.getIntegerIterator(15, BinFile)) {
- @Override
- public Iterator<Integer> getTestIterator(final ByteBuffer byteBuffer) {
- final IntBuffer ib = byteBuffer.asIntBuffer();
- return new NoHeaderTestIter<Integer>(ib) {
- @Override
- public Integer next() {
- return ib.get();
- }
- };
- }
- }
- },
- {
- new FileTestDef<Byte>(2, MMapBackedIteratorFactory.getByteIterator(2, BinFile)) {
- @Override
- public Iterator<Byte> getTestIterator(final ByteBuffer byteBuffer) {
- return new NoHeaderTestIter<Byte>(byteBuffer) {
- @Override
- public Byte next() {
- return byteBuffer.get();
- }
- };
- }
- }
- },
- {
- new FileTestDef<Float>(19, MMapBackedIteratorFactory.getFloatIterator(19, BinFile)) {
- @Override
- public Iterator<Float> getTestIterator(final ByteBuffer byteBuffer) {
- return new NoHeaderTestIter<Float>(byteBuffer) {
- @Override
- public Float next() {
- return byteBuffer.getFloat();
- }
- };
- }
- }
- }
- };
- }
-
- @Test(dataProvider="validTestDefs")
- public void testValidConfigurations(final FileTestDef ftd) {
- ftd.test();
- }
-
- @Test
- public void onlyHeaderTest() {
- final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator((int)BinFile.length(), BinFile);
- Assert.assertEquals(bbIter.getHeaderBytes(), headerAsByteBuffer((int)BinFile.length()));
- Assert.assertFalse(bbIter.hasNext());
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void tooLargeHeaderTest() {
- final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator(FileLength + 10, BinFile);
- bbIter.getHeaderBytes();
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void negativeHeaderTest() {
- final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator(-1, BinFile);
- bbIter.getHeaderBytes();
- }
-
- @DataProvider(name="invalidFileSizes")
- public Object [][] invalidFileSizes() {
- return new Object[][]{
- {1, 12}, //should result in two left over bytes
- {3, 11}, //should result in one left over elements
- };
- }
-
- @Test(expectedExceptions = PicardException.class, dataProvider = "invalidFileSizes")
- public void invalidFileSizeTests(final int headerSize, final int expectedElements) {
- final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator(headerSize, BinFile);
- bbIter.assertTotalElementsEqual(expectedElements);
- }
-
- public void testHeaderBytes(final ByteBuffer bb1, final ByteBuffer bb2) {
- Assert.assertTrue(bb1.equals(bb2), "Header bytes are not equal! " + bb1.toString() + " != " + bb2.toString());
- }
-}
diff --git a/src/tests/java/net/sf/picard/illumina/parser/readers/PosFileReaderTest.java b/src/tests/java/net/sf/picard/illumina/parser/readers/PosFileReaderTest.java
deleted file mode 100644
index a427cef..0000000
--- a/src/tests/java/net/sf/picard/illumina/parser/readers/PosFileReaderTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package net.sf.picard.illumina.parser.readers;
-
-import net.sf.picard.PicardException;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class PosFileReaderTest {
- //need to test for negatives
- public static final File TestDir = new File("testdata/net/sf/picard/illumina/readerTests");
- public static final File InvalidNamePosFile = new File(TestDir, "pos_failing1_pos.txt");
-
- public static final File PassingPosFile = new File(TestDir, "s_2_1101_pos.txt");
- public static final int PassingTile = 1101;
- public static final int PassingLane = 2;
- public static final float[][] PassingPosFloatCoord = {
- {17.80f, 0.30f}, {23.70f, 1.70f}, {18.50f, 3.90f}, {22.80f, 4.00f}, {15.90f, 4.20f},
- {19.10f, 5.60f}, {23.90f, 6.70f}, {16.70f, 7.00f}, {21.50f, 7.10f}, {18.90f, 9.30f},
- {17.10f, 10.30f}, {19.90f, 10.80f}, {15.90f, 11.90f}, {21.60f, 12.00f}, {24.80f, 12.40f},
- {17.90f, 14.20f}, {22.00f, 14.50f}, {23.60f, 15.20f}, {20.00f, 15.50f}, {16.30f, 17.30f}
- };
- public static final int[][] PassingPosQSeqCoord = {
- {1178, 1003}, {1237, 1017}, {1185, 1039}, {1228, 1040}, {1159, 1042},
- {1191, 1056}, {1239, 1067}, {1167, 1070}, {1215, 1071}, {1189, 1093},
- {1171, 1103}, {1199, 1108}, {1159, 1119}, {1216, 1120}, {1248, 1124},
- {1179, 1142}, {1220, 1145}, {1236, 1152}, {1200, 1155}, {1163, 1173}
- };
-
- @Test
- public void validPosFileTest() {
- final PosFileReader pfr = new PosFileReader(PassingPosFile);
- for (int i = 0; i < PassingPosFloatCoord.length; i++) {
- Assert.assertTrue(pfr.hasNext());
- final AbstractIlluminaPositionFileReader.PositionInfo pi = pfr.next();
- comparePositionInfo(pi, i);
- }
- Assert.assertFalse(pfr.hasNext());
- pfr.close();
- }
-
- public static void comparePositionInfo(final AbstractIlluminaPositionFileReader.PositionInfo pi, final int index) {
- comparePositionInfo(pi, PassingPosFloatCoord[index][0], PassingPosFloatCoord[index][1],
- PassingPosQSeqCoord[index][0], PassingPosQSeqCoord[index][1],
- PassingLane, PassingTile, index);
- }
-
- public static void comparePositionInfo(final AbstractIlluminaPositionFileReader.PositionInfo pi, final float xPos, final float yPos,
- final int xQSeqCoord, final int yQSeqCoord, final int lane, final int tile, final int index) {
- Assert.assertEquals(pi.xPos, xPos, "Differs at index: " + index);
- Assert.assertEquals(pi.yPos, yPos, "Differs at index: " + index);
- Assert.assertEquals(pi.xQseqCoord, xQSeqCoord, "Differs at index: " + index);
- Assert.assertEquals(pi.yQseqCoord, yQSeqCoord, "Differs at index: " + index);
- Assert.assertEquals(pi.lane, lane, "Differs at index: " + index);
- Assert.assertEquals(pi.tile, tile, "Differs at index: " + index);
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void failingNamePosFileTest() {
- final PosFileReader pfr = new PosFileReader(InvalidNamePosFile);
- }
-
- @DataProvider(name = "invalidDataFiles")
- public Object[][] invalidDataFiles() {
- return new Object[][]{
- {new File(TestDir, "s_1_1101_pos.txt")},
- {new File(TestDir, "s_1_1102_pos.txt")},
- {new File(TestDir, "s_1_1103_pos.txt")}
- };
- }
-
- @Test(dataProvider = "invalidDataFiles", expectedExceptions = PicardException.class)
- public void failingDataPosFileTest(final File file) {
- final PosFileReader pfr = new PosFileReader(file);
- try {
- while (pfr.hasNext()) {
- pfr.next();
- }
- } finally {
- pfr.close();
- }
- }
-
- @Test
- public void zeroLengthFileTest() {
- final PosFileReader pfr = new PosFileReader(new File(TestDir, "s_1_1104_pos.txt"));
- Assert.assertFalse(pfr.hasNext());
- pfr.close();
- }
-}
diff --git a/src/tests/java/net/sf/picard/io/IoUtilTest.java b/src/tests/java/net/sf/picard/io/IoUtilTest.java
deleted file mode 100644
index 7e8373b..0000000
--- a/src/tests/java/net/sf/picard/io/IoUtilTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.io;
-
-import net.sf.picard.util.ProcessExecutor;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.CollectionUtil;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.*;
-import java.nio.charset.Charset;
-import java.util.Arrays;
-import java.util.List;
-
-public class IoUtilTest {
-
- private static final File SLURP_TEST_FILE = new File("testdata/net/sf/picard/io/slurptest.txt");
- private static final File EMPTY_FILE = new File("testdata/net/sf/picard/io/empty.txt");;
- private static final File FIVE_SPACES_THEN_A_NEWLINE_THEN_FIVE_SPACES_FILE = new File("testdata/net/sf/picard/io/5newline5.txt");
- private static final List<String> SLURP_TEST_LINES = Arrays.asList("bacon and rice ","for breakfast ","wont you join me");
- private static final String SLURP_TEST_LINE_SEPARATOR = "\n";
- private static final String TEST_FILE_PREFIX = "foo";
- private static final String TEST_FILE_EXTENSIONS[] = { ".txt", ".txt.gz", ".txt.bz2" };
- private static final String TEST_STRING = "bar!";
-
- @Test
- public void testFileReadingAndWriting() throws IOException
- {
- String randomizedTestString = TEST_STRING + System.currentTimeMillis();
- for (String ext : TEST_FILE_EXTENSIONS)
- {
- File f = File.createTempFile(TEST_FILE_PREFIX, ext);
-
- OutputStream os = IoUtil.openFileForWriting(f);
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
- writer.write(randomizedTestString);
- writer.close();
-
- InputStream is = IoUtil.openFileForReading(f);
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- String line = reader.readLine();
- Assert.assertEquals(randomizedTestString, line);
- }
- }
-
- @Test(groups={"unix"})
- public void testGetCanonicalPath() throws IOException {
- String tmpPath = System.getProperty("java.io.tmpdir");
- String userName = System.getProperty("user.name");
-
- if(tmpPath.endsWith(userName)) {
- tmpPath = tmpPath.substring(0, tmpPath.length() - userName.length());
- }
-
- File tmpDir = new File(tmpPath, userName);
- File actual = new File(tmpDir, "actual.txt");
- ProcessExecutor.execute(new String[]{"touch", actual.getAbsolutePath()});
- File symlink = new File(tmpDir, "symlink.txt");
- ProcessExecutor.execute(new String[]{"ln", "-s", actual.getAbsolutePath(), symlink.getAbsolutePath()});
- File lnDir = new File(tmpDir, "symLinkDir");
- ProcessExecutor.execute(new String[]{"ln", "-s", tmpDir.getAbsolutePath(), lnDir.getAbsolutePath()});
- File lnToActual = new File(lnDir, "actual.txt");
- File lnToSymlink = new File(lnDir, "symlink.txt");
-
-
- File files [] = { actual, symlink, lnToActual, lnToSymlink };
- for (File f : files) {
- Assert.assertEquals(IoUtil.getFullCanonicalPath(f), actual.getCanonicalPath());
- }
-
- actual.delete();
- symlink.delete();
- lnToActual.delete();
- lnToSymlink.delete();
- lnDir.delete();
- }
-
- @Test
- public void testUtfWriting() throws IOException {
- final String utf8 = new StringWriter().append((char)168).append((char)197).toString();
- for (String ext : TEST_FILE_EXTENSIONS) {
- final File f = File.createTempFile(TEST_FILE_PREFIX, ext);
- f.deleteOnExit();
-
- final BufferedWriter writer = IoUtil.openFileForBufferedUtf8Writing(f);
- writer.write(utf8);
- CloserUtil.close(writer);
-
- final BufferedReader reader = IoUtil.openFileForBufferedUtf8Reading(f);
- final String line = reader.readLine();
- Assert.assertEquals(utf8, line, f.getAbsolutePath());
-
- CloserUtil.close(reader);
-
- }
- }
-
- @Test
- public void slurpLinesTest() throws FileNotFoundException {
- Assert.assertEquals(IoUtil.slurpLines(SLURP_TEST_FILE), SLURP_TEST_LINES);
- }
-
- @Test
- public void slurpWhitespaceOnlyFileTest() throws FileNotFoundException {
- Assert.assertEquals(IoUtil.slurp(FIVE_SPACES_THEN_A_NEWLINE_THEN_FIVE_SPACES_FILE), " \n ");
- }
-
- @Test
- public void slurpEmptyFileTest() throws FileNotFoundException {
- Assert.assertEquals(IoUtil.slurp(EMPTY_FILE), "");
- }
-
- @Test
- public void slurpTest() throws FileNotFoundException {
- Assert.assertEquals(IoUtil.slurp(SLURP_TEST_FILE), CollectionUtil.join(SLURP_TEST_LINES, SLURP_TEST_LINE_SEPARATOR));
- }
-}
diff --git a/src/tests/java/net/sf/picard/liftover/LiftOverTest.java b/src/tests/java/net/sf/picard/liftover/LiftOverTest.java
deleted file mode 100644
index b0712de..0000000
--- a/src/tests/java/net/sf/picard/liftover/LiftOverTest.java
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.liftover;
-
-import net.sf.picard.util.Interval;
-import net.sf.picard.util.OverlapDetector;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class LiftOverTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/liftover");
- private static final File CHAIN_FILE = new File(TEST_DATA_DIR, "hg18ToHg19.over.chain");
-
- private LiftOver liftOver;
-
- @BeforeClass
- public void initLiftOver() {
- liftOver = new LiftOver(CHAIN_FILE);
- }
-
- @Test(dataProvider = "testIntervals")
- public void testBasic(final Interval in, final Interval expected) {
- final Interval out = liftOver.liftOver(in);
- Assert.assertEquals(out, expected);
-
- }
-
- @DataProvider(name = "testIntervals")
- public Object[][] makeTestIntervals() {
- return new Object[][] {
- {new Interval("chr3", 50911035, 50911051), null},
- {new Interval("chr1", 16776377, 16776452), new Interval("chr1", 16903790, 16903865)},
- {new Interval("chr2", 30575990, 30576065), new Interval("chr2", 30722486, 30722561)},
- {new Interval("chr3", 12157217, 12157292), new Interval("chr3", 12182217, 12182292)},
- {new Interval("chr4", 12503121, 12503196), new Interval("chr4", 12894023, 12894098)},
- {new Interval("chr5", 13970930, 13971005), new Interval("chr5", 13917930, 13918005)},
- {new Interval("chr6", 13838774, 13838849), new Interval("chr6", 13730795, 13730870)},
- {new Interval("chr7", 23978336, 23978411), new Interval("chr7", 24011811, 24011886)},
- {new Interval("chr8", 13337368, 13337443), new Interval("chr8", 13292997, 13293072)},
- {new Interval("chr9", 35059282, 35059357), new Interval("chr9", 35069282, 35069357)},
- {new Interval("chr10", 7893794, 7893869), new Interval("chr10", 7853788, 7853863)},
- {new Interval("chr11", 17365784, 17365859), new Interval("chr11", 17409208, 17409283)},
- {new Interval("chr12", 4530193, 4530268), new Interval("chr12", 4659932, 4660007)},
- {new Interval("chr13", 29398707, 29398782), new Interval("chr13", 30500707, 30500782)},
- {new Interval("chr14", 22955252, 22955327), new Interval("chr14", 23885412, 23885487)},
- {new Interval("chr15", 27477379, 27477454), new Interval("chr15", 29690087, 29690162)},
- {new Interval("chr16", 13016380, 13016455), new Interval("chr16", 13108879, 13108954)},
- {new Interval("chr17", 28318218, 28318293), new Interval("chr17", 31294105, 31294180)},
- {new Interval("chr18", 42778225, 42778300), new Interval("chr18", 44524227, 44524302)},
- {new Interval("chr19", 8340119, 8340194), new Interval("chr19", 8434119, 8434194)},
- {new Interval("chr20", 39749226, 39749301), new Interval("chr20", 40315812, 40315887)},
- {new Interval("chr21", 20945136, 20945211), new Interval("chr21", 22023265, 22023340)},
- {new Interval("chr22", 32307031, 32307106), new Interval("chr22", 33977031, 33977106)},
- {new Interval("chrX", 34252958, 34253033) , new Interval("chrX", 34343037, 34343112)},
- // Sampling from /seq/references/HybSelOligos/whole_exome_refseq_coding/whole_exome_refseq_coding.targets.interval_list
- {new Interval("chr1", 58952, 59873), new Interval("chr1", 69089, 70010)},
- {new Interval("chr1", 7733844, 7734041), new Interval("chr1", 7811257, 7811454)},
- {new Interval("chr1", 16261179, 16261276), new Interval("chr1", 16388592, 16388689)},
- {new Interval("chr1", 23634929, 23635110), new Interval("chr1", 23762342, 23762523)},
- {new Interval("chr1", 31910910, 31911030), new Interval("chr1", 32138323, 32138443)},
- {new Interval("chr1", 39686851, 39687024), new Interval("chr1", 39914264, 39914437)},
- {new Interval("chr1", 46434068, 46434185), new Interval("chr1", 46661481, 46661598)},
- {new Interval("chr1", 60102890, 60102928), new Interval("chr1", 60330302, 60330340)},
- {new Interval("chr1", 84734151, 84734336), new Interval("chr1", 84961563, 84961748)},
- {new Interval("chr1", 100529545, 100529650), new Interval("chr1", 100756957, 100757062)},
- {new Interval("chr1", 114771320, 114771441), new Interval("chr1", 114969797, 114969918)},
- {new Interval("chr1", 148564831, 148564965), new Interval("chr1", 150298207, 150298341)},
- {new Interval("chr1", 153293008, 153293090), new Interval("chr1", 155026384, 155026466)},
- {new Interval("chr1", 158167550, 158167677), new Interval("chr1", 159900926, 159901053)},
- {new Interval("chr1", 169444555, 169444718), new Interval("chr1", 171177931, 171178094)},
- {new Interval("chr1", 183535970, 183536100), new Interval("chr1", 185269347, 185269477)},
- {new Interval("chr1", 201411300, 201411508), new Interval("chr1", 203144677, 203144885)},
- {new Interval("chr1", 212862043, 212862249), new Interval("chr1", 214795420, 214795626)},
- {new Interval("chr1", 228992499, 228992560), new Interval("chr1", 230925876, 230925937)},
- {new Interval("chr1", 246268191, 246269133), new Interval("chr1", 248201568, 248202510)},
- {new Interval("chr2", 25027765, 25027929), new Interval("chr2", 25174261, 25174425)},
- {new Interval("chr2", 32572109, 32572240), new Interval("chr2", 32718605, 32718736)},
- {new Interval("chr2", 53988959, 53989061), new Interval("chr2", 54135455, 54135557)},
- {new Interval("chr2", 71749748, 71749847), new Interval("chr2", 71896240, 71896339)},
- {new Interval("chr2", 96059879, 96060011), new Interval("chr2", 96696152, 96696284)},
- {new Interval("chr2", 109923614, 109923763), new Interval("chr2", 110566325, 110566474)},
- {new Interval("chr2", 130655571, 130655646), new Interval("chr2", 130939101, 130939176)},
- {new Interval("chr2", 159228028, 159228205), new Interval("chr2", 159519782, 159519959)},
- {new Interval("chr2", 172639236, 172639282), new Interval("chr2", 172930990, 172931036)},
- {new Interval("chr2", 189558634, 189558751), new Interval("chr2", 189850389, 189850506)},
- {new Interval("chr2", 203547300, 203547466), new Interval("chr2", 203839055, 203839221)},
- {new Interval("chr2", 219578985, 219579191), new Interval("chr2", 219870741, 219870947)},
- {new Interval("chr2", 232982284, 232982404), new Interval("chr2", 233274040, 233274160)},
- {new Interval("chr3", 3114819, 3114976), new Interval("chr3", 3139819, 3139976)},
- {new Interval("chr3", 16333337, 16333745), new Interval("chr3", 16358333, 16358741)},
- {new Interval("chr3", 40183652, 40183736), new Interval("chr3", 40208648, 40208732)},
- {new Interval("chr3", 48601077, 48601227), new Interval("chr3", 48626073, 48626223)},
- {new Interval("chr3", 52287255, 52287419), new Interval("chr3", 52312215, 52312379)},
- {new Interval("chr3", 63979313, 63979425), new Interval("chr3", 64004273, 64004385)},
- {new Interval("chr3", 110234255, 110234364), new Interval("chr3", 108751565, 108751674)},
- {new Interval("chr3", 126088466, 126088539), new Interval("chr3", 124605776, 124605849)},
- {new Interval("chr3", 137600279, 137600363), new Interval("chr3", 136117589, 136117673)},
- {new Interval("chr3", 159845116, 159845200), new Interval("chr3", 158362422, 158362506)},
- {new Interval("chr3", 185387877, 185387927), new Interval("chr3", 183905183, 183905233)},
- {new Interval("chr3", 199065658, 199065715), new Interval("chr3", 197581261, 197581318)},
- {new Interval("chr4", 10152742, 10152765), new Interval("chr4", 10543644, 10543667)},
- {new Interval("chr4", 47243396, 47243638), new Interval("chr4", 47548639, 47548881)},
- {new Interval("chr4", 72632227, 72632303), new Interval("chr4", 72413363, 72413439)},
- {new Interval("chr4", 88942682, 88942736), new Interval("chr4", 88723658, 88723712)},
- {new Interval("chr4", 114381088, 114381190), new Interval("chr4", 114161639, 114161741)},
- {new Interval("chr4", 151338602, 151338707), new Interval("chr4", 151119152, 151119257)},
- {new Interval("chr4", 184429225, 184429390), new Interval("chr4", 184192231, 184192396)},
- {new Interval("chr5", 14804176, 14804350), new Interval("chr5", 14751176, 14751350)},
- {new Interval("chr5", 43687596, 43687745), new Interval("chr5", 43651839, 43651988)},
- {new Interval("chr5", 71651730, 71651806), new Interval("chr5", 71615974, 71616050)},
- {new Interval("chr5", 95017504, 95017771), new Interval("chr5", 94991748, 94992015)},
- {new Interval("chr5", 128984208, 128984352), new Interval("chr5", 128956309, 128956453)},
- {new Interval("chr5", 140033038, 140033159), new Interval("chr5", 140052854, 140052975)},
- {new Interval("chr5", 153045976, 153046084), new Interval("chr5", 153065783, 153065891)},
- {new Interval("chr5", 176255669, 176255768), new Interval("chr5", 176323063, 176323162)},
- {new Interval("chr6", 10810586, 10810710), new Interval("chr6", 10702600, 10702724)},
- {new Interval("chr6", 30666289, 30666459), new Interval("chr6", 30558310, 30558480)},
- {new Interval("chr6", 33082591, 33082598), new Interval("chr6", 32974613, 32974620)},
- {new Interval("chr6", 39940185, 39940263), new Interval("chr6", 39832207, 39832285)},
- {new Interval("chr6", 50789726, 50789768), new Interval("chr6", 50681767, 50681809)},
- {new Interval("chr6", 79721666, 79721720), new Interval("chr6", 79664947, 79665001)},
- {new Interval("chr6", 108336822, 108336934), new Interval("chr6", 108230129, 108230241)},
- {new Interval("chr6", 131240935, 131241085), new Interval("chr6", 131199242, 131199392)},
- {new Interval("chr6", 151799272, 151799384), new Interval("chr6", 151757579, 151757691)},
- {new Interval("chr6", 169897302, 169897445), new Interval("chr6", 170155377, 170155520)},
- {new Interval("chr7", 17341792, 17341937), new Interval("chr7", 17375267, 17375412)},
- {new Interval("chr7", 38875269, 38875380), new Interval("chr7", 38908744, 38908855)},
- {new Interval("chr7", 72563000, 72563120), new Interval("chr7", 72925064, 72925184)},
- {new Interval("chr7", 89839403, 89839480), new Interval("chr7", 90001467, 90001544)},
- {new Interval("chr7", 100063781, 100063867), new Interval("chr7", 100225845, 100225931)},
- {new Interval("chr7", 111889559, 111889671), new Interval("chr7", 112102323, 112102435)},
- {new Interval("chr7", 133900771, 133900840), new Interval("chr7", 134250231, 134250300)},
- {new Interval("chr7", 149124615, 149124769), new Interval("chr7", 149493682, 149493836)},
- {new Interval("chr8", 9647462, 9647548), new Interval("chr8", 9610052, 9610138)},
- {new Interval("chr8", 27203588, 27203614), new Interval("chr8", 27147671, 27147697)},
- {new Interval("chr8", 43171970, 43172044), new Interval("chr8", 43052813, 43052887)},
- {new Interval("chr8", 76088775, 76088894), new Interval("chr8", 75926220, 75926339)},
- {new Interval("chr8", 103641854, 103642290), new Interval("chr8", 103572678, 103573114)},
- {new Interval("chr8", 133913660, 133913828), new Interval("chr8", 133844478, 133844646)},
- {new Interval("chr8", 145697031, 145697164), new Interval("chr8", 145726223, 145726356)},
- {new Interval("chr9", 26985517, 26985849), new Interval("chr9", 26995517, 26995849)},
- {new Interval("chr9", 68496721, 68496793), new Interval("chr9", 69206901, 69206973)},
- {new Interval("chr9", 94051959, 94052046), new Interval("chr9", 95012138, 95012225)},
- {new Interval("chr9", 110750285, 110750337), new Interval("chr9", 111710464, 111710516)},
- {new Interval("chr9", 124416836, 124417782), new Interval("chr9", 125377015, 125377961)},
- {new Interval("chr9", 130939690, 130939794), new Interval("chr9", 131899869, 131899973)},
- {new Interval("chr9", 138395593, 138395667), new Interval("chr9", 139275772, 139275846)},
- {new Interval("chr10", 6048112, 6048310), new Interval("chr10", 6008106, 6008304)},
- {new Interval("chr10", 26599573, 26599693), new Interval("chr10", 26559567, 26559687)},
- {new Interval("chr10", 51507890, 51507920), new Interval("chr10", 51837884, 51837914)},
- {new Interval("chr10", 74343070, 74343234), new Interval("chr10", 74673064, 74673228)},
- {new Interval("chr10", 93604764, 93604865), new Interval("chr10", 93614784, 93614885)},
- {new Interval("chr10", 101985412, 101985513), new Interval("chr10", 101995422, 101995523)},
- {new Interval("chr10", 115325644, 115325755), new Interval("chr10", 115335654, 115335765)},
- {new Interval("chr10", 129062310, 129062470), new Interval("chr10", 129172320, 129172480)},
- {new Interval("chr11", 1904274, 1904289), new Interval("chr11", 1947698, 1947713)},
- {new Interval("chr11", 11928485, 11928607), new Interval("chr11", 11971909, 11972031)},
- {new Interval("chr11", 33326642, 33326942), new Interval("chr11", 33370066, 33370366)},
- {new Interval("chr11", 55554469, 55555445), new Interval("chr11", 55797893, 55798869)},
- {new Interval("chr11", 62505888, 62506060), new Interval("chr11", 62749312, 62749484)},
- {new Interval("chr11", 65488560, 65488619), new Interval("chr11", 65731984, 65732043)},
- {new Interval("chr11", 71618353, 71618446), new Interval("chr11", 71940705, 71940798)},
- {new Interval("chr11", 89174516, 89174750), new Interval("chr11", 89534868, 89535102)},
- {new Interval("chr11", 111349955, 111350190), new Interval("chr11", 111844745, 111844980)},
- {new Interval("chr11", 120195672, 120195841), new Interval("chr11", 120690462, 120690631)},
- {new Interval("chr12", 1089617, 1089776), new Interval("chr12", 1219356, 1219515)},
- {new Interval("chr12", 8894021, 8894139), new Interval("chr12", 9002754, 9002872)},
- {new Interval("chr12", 26455518, 26455614), new Interval("chr12", 26564251, 26564347)},
- {new Interval("chr12", 46663731, 46663788), new Interval("chr12", 48377464, 48377521)},
- {new Interval("chr12", 51502394, 51502432), new Interval("chr12", 53216127, 53216165)},
- {new Interval("chr12", 55603883, 55604103), new Interval("chr12", 57317616, 57317836)},
- {new Interval("chr12", 69218200, 69218280), new Interval("chr12", 70931933, 70932013)},
- {new Interval("chr12", 97543837, 97544677), new Interval("chr12", 99019706, 99020546)},
- {new Interval("chr12", 108438951, 108439074), new Interval("chr12", 109954568, 109954691)},
- {new Interval("chr12", 119021215, 119021343), new Interval("chr12", 120536832, 120536960)},
- {new Interval("chr12", 127849755, 127849917), new Interval("chr12", 129283802, 129283964)},
- {new Interval("chr13", 28900978, 28901035), new Interval("chr13", 30002978, 30003035)},
- {new Interval("chr13", 48646570, 48646698), new Interval("chr13", 49748569, 49748697)},
- {new Interval("chr13", 98989699, 98989814), new Interval("chr13", 100191698, 100191813)},
- {new Interval("chr14", 20929460, 20929643), new Interval("chr14", 21859620, 21859803)},
- {new Interval("chr14", 33338689, 33340068), new Interval("chr14", 34268938, 34270317)},
- {new Interval("chr14", 55217155, 55217163), new Interval("chr14", 56147402, 56147410)},
- {new Interval("chr14", 71260115, 71260358), new Interval("chr14", 72190362, 72190605)},
- {new Interval("chr14", 89806293, 89806451), new Interval("chr14", 90736540, 90736698)},
- {new Interval("chr14", 102548185, 102548280), new Interval("chr14", 103478432, 103478527)},
- {new Interval("chr15", 31917122, 31918453), new Interval("chr15", 34129830, 34131161)},
- {new Interval("chr15", 40481129, 40481302), new Interval("chr15", 42693837, 42694010)},
- {new Interval("chr15", 48649374, 48649484), new Interval("chr15", 50862082, 50862192)},
- {new Interval("chr15", 61768839, 61768953), new Interval("chr15", 63981786, 63981900)},
- {new Interval("chr15", 72115399, 72115456), new Interval("chr15", 74328346, 74328403)},
- {new Interval("chr15", 83031858, 83032011), new Interval("chr15", 85230854, 85231007)},
- {new Interval("chr16", 79709, 79902), new Interval("chr16", 139709, 139902)},
- {new Interval("chr16", 2285590, 2285744), new Interval("chr16", 2345589, 2345743)},
- {new Interval("chr16", 14872977, 14873044), new Interval("chr16", 14965476, 14965543)},
- {new Interval("chr16", 23611004, 23611155), new Interval("chr16", 23703503, 23703654)},
- {new Interval("chr16", 31004784, 31005007), new Interval("chr16", 31097283, 31097506)},
- {new Interval("chr16", 55745701, 55745922), new Interval("chr16", 57188200, 57188421)},
- {new Interval("chr16", 66647766, 66647830), new Interval("chr16", 68090265, 68090329)},
- {new Interval("chr16", 79224415, 79224636), new Interval("chr16", 80666914, 80667135)},
- {new Interval("chr17", 1320663, 1320735), new Interval("chr17", 1373913, 1373985)},
- {new Interval("chr17", 5304981, 5305155), new Interval("chr17", 5364257, 5364431)},
- {new Interval("chr17", 8588568, 8588654), new Interval("chr17", 8647843, 8647929)},
- {new Interval("chr17", 18192362, 18192481), new Interval("chr17", 18251637, 18251756)},
- {new Interval("chr17", 26514328, 26514522), new Interval("chr17", 29490202, 29490396)},
- {new Interval("chr17", 35069238, 35069334), new Interval("chr17", 37815712, 37815808)},
- {new Interval("chr17", 38377148, 38377241), new Interval("chr17", 41123622, 41123715)},
- {new Interval("chr17", 44472316, 44472454), new Interval("chr17", 47117317, 47117455)},
- {new Interval("chr17", 55482984, 55483122), new Interval("chr17", 58128202, 58128340)},
- {new Interval("chr17", 64595087, 64595211), new Interval("chr17", 67083492, 67083616)},
- {new Interval("chr17", 72814816, 72814876), new Interval("chr17", 75303221, 75303281)},
- {new Interval("chr17", 78167687, 78167812), new Interval("chr17", 80574398, 80574523)},
- {new Interval("chr18", 19653801, 19653961), new Interval("chr18", 21399803, 21399963)},
- {new Interval("chr18", 46766985, 46767455), new Interval("chr18", 48512987, 48513457)},
- {new Interval("chr19", 822924, 823120), new Interval("chr19", 871924, 872120)},
- {new Interval("chr19", 4200223, 4200327), new Interval("chr19", 4249223, 4249327)},
- {new Interval("chr19", 8094666, 8094894), new Interval("chr19", 8188666, 8188894)},
- {new Interval("chr19", 11657040, 11657607), new Interval("chr19", 11796040, 11796607)},
- {new Interval("chr19", 16298665, 16298844), new Interval("chr19", 16437665, 16437844)},
- {new Interval("chr19", 19650533, 19650597), new Interval("chr19", 19789533, 19789597)},
- {new Interval("chr19", 42008351, 42008363), new Interval("chr19", 37316511, 37316523)},
- {new Interval("chr19", 46446486, 46446567), new Interval("chr19", 41754646, 41754727)},
- {new Interval("chr19", 51212087, 51212169), new Interval("chr19", 46520247, 46520329)},
- {new Interval("chr19", 55052042, 55052201), new Interval("chr19", 50360230, 50360389)},
- {new Interval("chr19", 60200495, 60200669), new Interval("chr19", 55508683, 55508857)},
- {new Interval("chr20", 3244380, 3244434), new Interval("chr20", 3296380, 3296434)},
- {new Interval("chr20", 25145282, 25145374), new Interval("chr20", 25197282, 25197374)},
- {new Interval("chr20", 35182714, 35182855), new Interval("chr20", 35749300, 35749441)},
- {new Interval("chr20", 46797751, 46797826), new Interval("chr20", 47364344, 47364419)},
- {new Interval("chr20", 61546454, 61546633), new Interval("chr20", 62076010, 62076189)},
- {new Interval("chr21", 36666540, 36666701), new Interval("chr21", 37744670, 37744831)},
- {new Interval("chr21", 46450176, 46450285), new Interval("chr21", 47625748, 47625857)},
- {new Interval("chr22", 22890366, 22890533), new Interval("chr22", 24560366, 24560533)},
- {new Interval("chr22", 32487356, 32487465), new Interval("chr22", 34157356, 34157465)},
- {new Interval("chr22", 40469028, 40469146), new Interval("chr22", 42139082, 42139200)},
- {new Interval("chr22", 49365651, 49365713), new Interval("chr22", 51018785, 51018847)},
- {new Interval("chrX", 24135748, 24135895), new Interval("chrX", 24225827, 24225974)},
- {new Interval("chrX", 48708293, 48708459), new Interval("chrX", 48823349, 48823515)},
- {new Interval("chrX", 69406673, 69406721), new Interval("chrX", 69489948, 69489996)},
- {new Interval("chrX", 101459444, 101459531), new Interval("chrX", 101572788, 101572875)},
- {new Interval("chrX", 128442357, 128442474), new Interval("chrX", 128614676, 128614793)},
- {new Interval("chrX", 152701873, 152701902), new Interval("chrX", 153048679, 153048708)},
- {new Interval("chrY", 2715028, 2715646), new Interval("chrY", 2655028, 2655646)},
- {new Interval("chrY", 26179988, 26180064), new Interval("chrY", 27770600, 27770676)},
- // Some intervals that are flipped in the new genome
- {new Interval("chr1", 2479704, 2479833, false, "target_549"), new Interval("chr1", 2494585, 2494714, true, "target_549")},
- {new Interval("chr1", 2480081, 2480116, false, "target_550"), new Interval("chr1", 2494302, 2494337, true, "target_550")},
- {new Interval("chr1", 2481162, 2481308, false, "target_551"), new Interval("chr1", 2493110, 2493256, true, "target_551")},
- {new Interval("chr1", 2482263, 2482357, false, "target_552"), new Interval("chr1", 2492061, 2492155, true, "target_552")},
- {new Interval("chr1", 2482999, 2483158, false, "target_553"), new Interval("chr1", 2491260, 2491419, true, "target_553")},
- {new Interval("chr1", 2484509, 2484638, false, "target_554"), new Interval("chr1", 2489780, 2489909, true, "target_554")},
- {new Interval("chr1", 2485143, 2485255, false, "target_555"), new Interval("chr1", 2489163, 2489275, true, "target_555")},
- {new Interval("chr1", 2486244, 2486316, false, "target_556"), new Interval("chr1", 2488102, 2488174, true, "target_556")},
- {new Interval("chr2", 110735471, 110735558, false, "target_101982"), new Interval("chr2", 110585640, 110585727, true, "target_101982")},
- {new Interval("chr2", 110735648, 110735831, false, "target_101983"), new Interval("chr2", 110585367, 110585550, true, "target_101983")},
- {new Interval("chr2", 110736772, 110736922, false, "target_101984"), new Interval("chr2", 110584276, 110584426, true, "target_101984")},
- {new Interval("chr2", 110737181, 110737322, false, "target_101985"), new Interval("chr2", 110583876, 110584017, true, "target_101985")},
- {new Interval("chr2", 110737585, 110737747, false, "target_101986"), new Interval("chr2", 110583451, 110583613, true, "target_101986")},
- {new Interval("chr2", 110738666, 110738793, false, "target_101987"), new Interval("chr2", 110582405, 110582532, true, "target_101987")},
- {new Interval("chr2", 110738957, 110739136, false, "target_101988"), new Interval("chr2", 110582062, 110582241, true, "target_101988")},
- {new Interval("chr2", 110739216, 110739401, false, "target_101989"), new Interval("chr2", 110581797, 110581982, true, "target_101989")},
- {new Interval("chr2", 110741555, 110741768, false, "target_101990"), new Interval("chr2", 110579480, 110579693, true, "target_101990")},
- {new Interval("chr2", 110743887, 110743978, false, "target_101991"), new Interval("chr2", 110577271, 110577362, true, "target_101991")},
- {new Interval("chr2", 110750021, 110750220, false, "target_101992"), new Interval("chr2", 110571035, 110571234, true, "target_101992")},
- {new Interval("chr2", 110754786, 110754935, false, "target_101993"), new Interval("chr2", 110566325, 110566474, true, "target_101993")},
- {new Interval("chr2", 110755277, 110755511, false, "target_101994"), new Interval("chr2", 110565749, 110565983, true, "target_101994")},
- {new Interval("chr2", 110759547, 110759703, false, "target_101995"), new Interval("chr2", 110561554, 110561710, true, "target_101995")},
- {new Interval("chr2", 110760135, 110760250, false, "target_101996"), new Interval("chr2", 110561007, 110561122, true, "target_101996")},
- {new Interval("chr2", 110761828, 110761899, false, "target_101997"), new Interval("chr2", 110559358, 110559429, true, "target_101997")},
- {new Interval("chr2", 110769521, 110769596, false, "target_101998"), new Interval("chr2", 110552041, 110552116, true, "target_101998")},
- {new Interval("chr2", 111012182, 111012298, false, "target_101999"), new Interval("chr2", 108484181, 108484297, true, "target_101999")},
- {new Interval("chr13", 113547048, 113547139, false, "target_51005"), new Interval("chr13", 114566804, 114566895, true, "target_51005")},
- {new Interval("chr13", 113547227, 113547397, false, "target_51006"), new Interval("chr13", 114566546, 114566716, true, "target_51006")},
- {new Interval("chr13", 113562918, 113562946, false, "target_51007"), new Interval("chr13", 114550997, 114551025, true, "target_51007")},
- {new Interval("chr13", 113564379, 113564445, false, "target_51008"), new Interval("chr13", 114549498, 114549564, true, "target_51008")},
- {new Interval("chr13", 113571118, 113571244, false, "target_51009"), new Interval("chr13", 114542699, 114542825, true, "target_51009")},
- {new Interval("chr13", 113572777, 113572903, false, "target_51010"), new Interval("chr13", 114541040, 114541166, true, "target_51010")},
- {new Interval("chr13", 113575333, 113575459, false, "target_51011"), new Interval("chr13", 114538484, 114538610, true, "target_51011")},
- {new Interval("chr13", 113576296, 113576421, false, "target_51012"), new Interval("chr13", 114537522, 114537647, true, "target_51012")},
- {new Interval("chr13", 113578216, 113578338, false, "target_51013"), new Interval("chr13", 114535605, 114535727, true, "target_51013")},
- {new Interval("chr13", 113578480, 113578673, false, "target_51014"), new Interval("chr13", 114535270, 114535463, true, "target_51014")},
- {new Interval("chr13", 113582257, 113582425, false, "target_51015"), new Interval("chr13", 114531518, 114531686, true, "target_51015")},
- {new Interval("chr13", 113583804, 113583976, false, "target_51016"), new Interval("chr13", 114529967, 114530139, true, "target_51016")},
- {new Interval("chr13", 113587418, 113587597, false, "target_51017"), new Interval("chr13", 114526346, 114526525, true, "target_51017")},
- {new Interval("chr13", 113588782, 113589014, false, "target_51018"), new Interval("chr13", 114524929, 114525161, true, "target_51018")},
- {new Interval("chr13", 113589950, 113590108, false, "target_51019"), new Interval("chr13", 114523835, 114523993, true, "target_51019")},
- {new Interval("chr13", 113599065, 113599236, false, "target_51020"), new Interval("chr13", 114514707, 114514878, true, "target_51020")},
- {new Interval("chr13", 113605940, 113606087, false, "target_51021"), new Interval("chr13", 114507856, 114508003, true, "target_51021")},
- {new Interval("chr13", 113609156, 113609319, false, "target_51022"), new Interval("chr13", 114504624, 114504787, true, "target_51022")},
- {new Interval("chr13", 113610056, 113610145, false, "target_51023"), new Interval("chr13", 114503798, 114503887, true, "target_51023")},
- {new Interval("chr13", 113611549, 113611633, false, "target_51024"), new Interval("chr13", 114502310, 114502394, true, "target_51024")},
- {new Interval("chr13", 113615731, 113615824, false, "target_51025"), new Interval("chr13", 114498119, 114498212, true, "target_51025")},
- {new Interval("chr13", 113641808, 113641874, false, "target_51026"), new Interval("chr13", 114472069, 114472135, true, "target_51026")},
- {new Interval("chr13", 113644711, 113644857, false, "target_51027"), new Interval("chr13", 114469086, 114469232, true, "target_51027")},
- {new Interval("chr13", 113651799, 113651848, false, "target_51028"), new Interval("chr13", 114462241, 114462290, true, "target_51028")},
- {new Interval("chr17", 33541604, 33542176, false, "target_76102"), new Interval("chr17", 36294030, 36294602, true, "target_76102")},
- {new Interval("chr17", 33543154, 33543310, false, "target_76103"), new Interval("chr17", 36292896, 36293052, true, "target_76103")},
- {new Interval("chr17", 33543677, 33543780, false, "target_76104"), new Interval("chr17", 36292426, 36292529, true, "target_76104")},
- {new Interval("chr17", 33544240, 33544309, false, "target_76105"), new Interval("chr17", 36291897, 36291966, true, "target_76105")},
- {new Interval("chr17", 33544690, 33544788, false, "target_76106"), new Interval("chr17", 36291418, 36291516, true, "target_76106")},
- {new Interval("chr17", 33545498, 33545622, false, "target_76107"), new Interval("chr17", 36290584, 36290708, true, "target_76107")},
- {new Interval("chr17", 33547465, 33547578, false, "target_76109"), new Interval("chr17", 36288629, 36288742, true, "target_76109")},
- {new Interval("chr17", 33547904, 33548015, false, "target_76110"), new Interval("chr17", 36288192, 36288303, true, "target_76110")},
- {new Interval("chr17", 33548455, 33548539, false, "target_76111"), new Interval("chr17", 36287668, 36287752, true, "target_76111")},
- {new Interval("chr17", 33549018, 33549061, false, "target_76112"), new Interval("chr17", 36287146, 36287189, true, "target_76112")},
- {new Interval("chr17", 33550341, 33550430, false, "target_76113"), new Interval("chr17", 36285777, 36285866, true, "target_76113")},
- {new Interval("chr17", 33550589, 33550664, false, "target_76114"), new Interval("chr17", 36285543, 36285618, true, "target_76114")},
- {new Interval("chrX", 148575967, 148576994, false, "target_184692"), new Interval("chrX", 148797411, 148798438, true, "target_184692")},
- {new Interval("chrX", 148577066, 148577143, false, "target_184693"), new Interval("chrX", 148797262, 148797339, true, "target_184693")},
- {new Interval("chrX", 148578167, 148578266, false, "target_184694"), new Interval("chrX", 148796139, 148796238, true, "target_184694")},
- {new Interval("chrX", 148579488, 148579587, false, "target_184695"), new Interval("chrX", 148794818, 148794917, true, "target_184695")},
- {new Interval("chrX", 148603758, 148603770, false, "target_184696"), new Interval("chrX", 148770634, 148770646, true, "target_184696")},
- // Some that don't map in hg19
- {new Interval("chr2", 111013693, 111013832), null},
- {new Interval("chr3", 14174511, 14175398), null},
- {new Interval("chr3", 50911035, 50911051), null},
- {new Interval("chr6", 32071709, 32071869), null},
- {new Interval("chr6", 32072183, 32072358), null},
- {new Interval("chr6", 32104446, 32104606), null},
- {new Interval("chr6", 32104920, 32105095), null},
- {new Interval("chr7", 101995561, 101995739), null},
- {new Interval("chr7", 142178782, 142178825), null},
- {new Interval("chr7", 142179850, 142180013), null},
- {new Interval("chr7", 142181067, 142181324), null},
- {new Interval("chr7", 142181720, 142181860), null},
- {new Interval("chr7", 142182157, 142182313), null},
- {new Interval("chr15", 19335778, 19336302), null},
- {new Interval("chr17", 33364376, 33364428), null},
- {new Interval("chr17", 33546162, 33546214), null},
- {new Interval("chr17", 33706667, 33706736), null},
- {new Interval("chr17", 59772721, 59772781), null},
- {new Interval("chr17", 59779355, 59779421), null},
- {new Interval("chr17", 59781483, 59781540), null},
- {new Interval("chr17", 59783488, 59783565), null},
- {new Interval("chr17", 59784584, 59784615), null},
- {new Interval("chr17", 59786025, 59786136), null},
- {new Interval("chr17", 59787203, 59787494), null},
- {new Interval("chr17", 59791235, 59791514), null},
- {new Interval("chr17", 59794247, 59794502), null},
- {new Interval("chr17", 59801884, 59802193), null},
- {new Interval("chr17", 59804685, 59804982), null},
- {new Interval("chr17", 59817352, 59817382), null},
- {new Interval("chr17", 59817465, 59817532), null},
- {new Interval("chr17", 59875754, 59875812), null},
- {new Interval("chr17", 59875899, 59875944), null},
- {new Interval("chr17", 59879183, 59879456), null},
- {new Interval("chr17", 59883988, 59884276), null},
- {new Interval("chr17", 59887398, 59887512), null},
- {new Interval("chrX", 48774611, 48775058), null},
-
- };
- }
-
- @Test(dataProvider = "failingIntervals")
- public void testDiagnosticLiftover(final Interval fromInterval) {
- final List<LiftOver.PartialLiftover> partials = liftOver.diagnosticLiftover(fromInterval);
- System.out.println("Diagnosing " + fromInterval + " (len " + fromInterval.length() + ")");
- for (final LiftOver.PartialLiftover partial : partials) {
- System.out.println(partial);
- }
- }
-
- @DataProvider(name = "failingIntervals")
- public Object[][] makeFailingIntervals() {
- return new Object[][] {
- {new Interval("chr3", 50911035, 50911051)},
- {new Interval("chr2", 111013693, 111013832)},
- {new Interval("chr3", 14174511, 14175398)},
- {new Interval("chr3", 50911035, 50911051)},
- {new Interval("chr6", 32071709, 32071869)},
- {new Interval("chr6", 32072183, 32072358)},
- {new Interval("chr6", 32104446, 32104606)},
- {new Interval("chr6", 32104920, 32105095)},
- {new Interval("chr7", 101995561, 101995739)},
- {new Interval("chr7", 142178782, 142178825)},
- {new Interval("chr7", 142179850, 142180013)},
- {new Interval("chr7", 142181067, 142181324)},
- {new Interval("chr7", 142181720, 142181860)},
- {new Interval("chr7", 142182157, 142182313)},
- {new Interval("chr15", 19335778, 19336302)},
- {new Interval("chr17", 33364376, 33364428)},
- {new Interval("chr17", 33546162, 33546214)},
- {new Interval("chr17", 33706667, 33706736)},
- {new Interval("chr17", 59772721, 59772781)},
- {new Interval("chr17", 59779355, 59779421)},
- {new Interval("chr17", 59781483, 59781540)},
- {new Interval("chr17", 59783488, 59783565)},
- {new Interval("chr17", 59784584, 59784615)},
- {new Interval("chr17", 59786025, 59786136)},
- {new Interval("chr17", 59787203, 59787494)},
- {new Interval("chr17", 59791235, 59791514)},
- {new Interval("chr17", 59794247, 59794502)},
- {new Interval("chr17", 59801884, 59802193)},
- {new Interval("chr17", 59804685, 59804982)},
- {new Interval("chr17", 59817352, 59817382)},
- {new Interval("chr17", 59817465, 59817532)},
- {new Interval("chr17", 59875754, 59875812)},
- {new Interval("chr17", 59875899, 59875944)},
- {new Interval("chr17", 59879183, 59879456)},
- {new Interval("chr17", 59883988, 59884276)},
- {new Interval("chr17", 59887398, 59887512)},
- {new Interval("chrX", 48774611, 48775058)},
-
- };
- }
-
- @Test
- public void testWriteChain() throws Exception {
- final OverlapDetector<Chain> chains = Chain.loadChains(CHAIN_FILE);
- File outFile = File.createTempFile("test.", ".chain");
- outFile.deleteOnExit();
- PrintWriter pw = new PrintWriter(outFile);
- final Map<Integer, Chain> originalChainMap = new TreeMap<Integer, Chain>();
- for (final Chain chain : chains.getAll()) {
- chain.write(pw);
- originalChainMap.put(chain.id, chain);
- }
- pw.close();
-
- final OverlapDetector<Chain> newChains = Chain.loadChains(outFile);
- final Map<Integer, Chain> newChainMap = new TreeMap<Integer, Chain>();
- for (final Chain chain : newChains.getAll()) {
- newChainMap.put(chain.id, chain);
- }
- Assert.assertEquals(newChainMap, originalChainMap);
- }
-}
diff --git a/src/tests/java/net/sf/picard/metrics/MetricsFileTest.java b/src/tests/java/net/sf/picard/metrics/MetricsFileTest.java
deleted file mode 100644
index c60408d..0000000
--- a/src/tests/java/net/sf/picard/metrics/MetricsFileTest.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.metrics;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.util.Date;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.FileReader;
-
-import net.sf.picard.util.Histogram;
-import net.sf.picard.util.FormatUtil;
-import net.sf.picard.PicardException;
-
-/**
- * Tests for the various classes in the metrics package. Constructs a MetricsFile,
- * populates it with various items and then ensure that it can be written to disk
- * and read back without altering any values.
- *
- * @author Tim Fennell
- */
-public class MetricsFileTest {
- public static enum TestEnum {One, Two, Three}
-
- public static class TestMetric extends MetricBase implements Cloneable {
- public String STRING_PROP;
- public Date DATE_PROP;
- public Short SHORT_PROP;
- public Integer INTEGER_PROP;
- public Long LONG_PROP;
- public Float FLOAT_PROP;
- public Double DOUBLE_PROP;
- public TestEnum ENUM_PROP;
- public Boolean BOOLEAN_PROP;
- public short SHORT_PRIMITIVE;
- public int INT_PRIMITIVE;
- public long LONG_PRIMITIVE;
- public float FLOAT_PRIMITIVE;
- public double DOUBLE_PRIMITIVE;
- public boolean BOOLEAN_PRIMITIVE;
-
- public TestMetric clone() {
- try { return (TestMetric) super.clone(); }
- catch (CloneNotSupportedException cnse) { throw new PicardException("That's Unpossible!"); }
- }
- }
-
- @Test
- public void testWriteMetricsFile() throws Exception {
- MetricsFile<TestMetric,Integer> file = new MetricsFile<TestMetric,Integer>();
- TestMetric metric = new TestMetric();
- metric.STRING_PROP = "Hello World";
- metric.DATE_PROP = new FormatUtil().parseDate("2008-12-31");
- metric.SHORT_PROP = 123;
- metric.INTEGER_PROP = null;
- metric.LONG_PROP = Long.MAX_VALUE;
- metric.FLOAT_PROP = 456.789f;
- metric.DOUBLE_PROP = 0.713487;
- metric.ENUM_PROP = TestEnum.Two;
- metric.BOOLEAN_PROP = false;
- metric.SHORT_PRIMITIVE = 123;
- metric.INT_PRIMITIVE = 919834781;
- metric.LONG_PRIMITIVE = Long.MAX_VALUE - Integer.MAX_VALUE;
- metric.FLOAT_PRIMITIVE = 0.55694f;
- metric.DOUBLE_PRIMITIVE = 0.229233;
- metric.BOOLEAN_PRIMITIVE = true;
- file.addMetric(metric);
-
- MetricsFile<TestMetric,Integer> file2 = writeThenReadBack(file);
- Assert.assertEquals(file, file2);
-
- // Now add some headers and run the test again
- StringHeader stringHeader = new StringHeader();
- stringHeader.setValue("Hello, I'm a String Header!");
- file.addHeader(stringHeader);
-
- VersionHeader version = new VersionHeader();
- version.setVersionedItem("MetricsFileTest");
- version.setVersionString("1.0");
- file.addHeader(version);
-
- version = new VersionHeader();
- version.setVersionedItem("Nada");
- version.setVersionString("0.0alpha1");
- file.addHeader(version);
-
- file2 = writeThenReadBack(file);
- Assert.assertEquals(file, file2);
-
- // Now add a Histogram and make sure it still works
- Histogram<Integer> histo = new Histogram<Integer>();
- histo.setBinLabel("small_number");
- histo.setValueLabel("big_number");
- histo.increment(1, 101);
- histo.increment(2, 202);
- histo.increment(3, 4000);
- histo.increment(5, 123981);
- histo.increment(1000, 10981982);
- file.setHistogram(histo);
-
- file2 = writeThenReadBack(file);
- Assert.assertEquals(file, file2);
-
- // And lastly add some more metrics rows to the file
- TestMetric metric2 = metric.clone();
- metric2.ENUM_PROP = TestEnum.One;
- metric2.FLOAT_PROP = 0.998f;
- metric2.STRING_PROP = "Wheeeee!";
- file.addMetric(metric2);
-
- metric2 = metric.clone();
- metric2.ENUM_PROP = TestEnum.Three;
- metric2.DOUBLE_PRIMITIVE = 1.299d;
- file.addMetric(metric2);
-
- file2 = writeThenReadBack(file);
- Assert.assertEquals(file, file2);
- }
-
- /** Helper method to persist metrics to file and read them back again. */
- private MetricsFile<TestMetric, Integer> writeThenReadBack(MetricsFile<TestMetric,Integer> in) throws Exception {
- File f = File.createTempFile("test", ".metrics");
- f.deleteOnExit();
- FileWriter out = new FileWriter(f);
- in.write(out);
-
- MetricsFile<TestMetric,Integer> retval = new MetricsFile<TestMetric,Integer>();
- retval.read(new FileReader(f));
- return retval;
- }
-}
diff --git a/src/tests/java/net/sf/picard/reference/FastaSequenceFileTest.java b/src/tests/java/net/sf/picard/reference/FastaSequenceFileTest.java
deleted file mode 100644
index dcbac8f..0000000
--- a/src/tests/java/net/sf/picard/reference/FastaSequenceFileTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.reference;
-
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class FastaSequenceFileTest {
- @Test
- public void testTrailingWhitespace() throws Exception {
- final File fasta = File.createTempFile("test", ".fasta");
- fasta.deleteOnExit();
- final PrintWriter writer = new PrintWriter(fasta);
- final String chr1 = "chr1";
- writer.println(">" + chr1);
- final String sequence = "ACGTACGT";
- writer.println(sequence);
- writer.println(sequence + " \t");
- writer.close();
- final FastaSequenceFile fastaReader = new FastaSequenceFile(fasta, true);
- final ReferenceSequence referenceSequence = fastaReader.nextSequence();
- Assert.assertEquals(referenceSequence.getName(), chr1);
- Assert.assertEquals(StringUtil.bytesToString(referenceSequence.getBases()), sequence + sequence);
- }
-
- @Test
- public void testIntermediateWhitespace() throws Exception {
- final File fasta = File.createTempFile("test", ".fasta");
- fasta.deleteOnExit();
- final PrintWriter writer = new PrintWriter(fasta);
- final String chr1 = "chr1";
- writer.println(">" + chr1 + " extra stuff after sequence name");
- final String sequence = "ACGTACGT";
- writer.println(sequence + " ");
- writer.println(sequence + " \t");
- writer.println(sequence);
- writer.close();
- final FastaSequenceFile fastaReader = new FastaSequenceFile(fasta, true);
- final ReferenceSequence referenceSequence = fastaReader.nextSequence();
- Assert.assertEquals(referenceSequence.getName(), chr1);
- Assert.assertEquals(StringUtil.bytesToString(referenceSequence.getBases()), sequence + sequence + sequence);
- }
-}
diff --git a/src/tests/java/net/sf/picard/reference/FastaSequenceIndexTest.java b/src/tests/java/net/sf/picard/reference/FastaSequenceIndexTest.java
deleted file mode 100644
index a72d955..0000000
--- a/src/tests/java/net/sf/picard/reference/FastaSequenceIndexTest.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.Iterator;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-/**
- * Test the fasta sequence index reader.
- */
-public class FastaSequenceIndexTest {
- private static File TEST_DATA_DIR = new File("testdata/net/sf/picard/reference");
-
- @DataProvider(name="homosapiens")
- public Object[][] provideHomoSapiens() throws FileNotFoundException {
- final File sequenceIndexFile = new File(TEST_DATA_DIR,"Homo_sapiens_assembly18.fasta.fai");
- return new Object[][] { new Object[] { new FastaSequenceIndex(sequenceIndexFile) } };
- }
-
- @DataProvider(name="specialcharacters")
- public Object[][] provideSpecialCharacters() throws FileNotFoundException {
- final File sequenceIndexFile = new File(TEST_DATA_DIR,"testing.fai");
- return new Object[][] { new Object[] { new FastaSequenceIndex(sequenceIndexFile) } };
- }
-
- @Test(dataProvider="homosapiens")
- public void testInitialContig(FastaSequenceIndex sequenceIndex) {
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chrM"),"Contig chrM is not present");
- FastaSequenceIndexEntry entry = sequenceIndex.getIndexEntry("chrM");
- Assert.assertEquals(entry.getContig(),"chrM","Contig chrM name is incorrect");
- Assert.assertEquals(entry.getLocation(),6L,"Contig chrM location is incorrect");
- Assert.assertEquals(entry.getSize(),16571L,"Contig chrM size is incorrect");
- Assert.assertEquals(entry.getBasesPerLine(),50,"Contig chrM bases per line is incorrect");
- Assert.assertEquals(entry.getBytesPerLine(),51,"Contig chrM bytes per line is incorrect");
-
- }
-
- @Test(dataProvider="homosapiens")
- public void testMiddleContig(FastaSequenceIndex sequenceIndex) {
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr8"),"Contig chr8 is not present");
- FastaSequenceIndexEntry entry = sequenceIndex.getIndexEntry("chr8");
- Assert.assertEquals(entry.getContig(),"chr8","Contig chr8 name is incorrect");
- Assert.assertEquals(entry.getLocation(),1419403101L,"Contig chr8 location is incorrect");
- Assert.assertEquals(entry.getSize(),146274826L,"Contig chr8 size is incorrect");
- Assert.assertEquals(entry.getBasesPerLine(),50,"Contig chr8 bases per line is incorrect");
- Assert.assertEquals(entry.getBytesPerLine(),51,"Contig chr8 bytes per line is incorrect");
- }
-
- @Test(dataProvider="homosapiens")
- public void testLastContig(FastaSequenceIndex sequenceIndex) {
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chrX_random"),"Contig chrX_random is not present");
- FastaSequenceIndexEntry entry = sequenceIndex.getIndexEntry("chrX_random");
- Assert.assertEquals(entry.getContig(),"chrX_random","Contig chrX_random name is incorrect");
- Assert.assertEquals(entry.getLocation(),3156698441L,"Contig chrX_random location is incorrect");
- Assert.assertEquals(entry.getSize(),1719168L,"Contig chrX_random size is incorrect");
- Assert.assertEquals(entry.getBasesPerLine(),50,"Contig chrX_random bases per line is incorrect");
- Assert.assertEquals(entry.getBytesPerLine(),51,"Contig chrX_random bytes per line is incorrect");
- }
-
- @Test(dataProvider="homosapiens")
- public void testAllContigsPresent(FastaSequenceIndex sequenceIndex) {
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chrM"),"Contig chrM is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr1"),"Contig chr1 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr2"),"Contig chr2 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr3"),"Contig chr3 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr4"),"Contig chr4 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr5"),"Contig chr5 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr6"),"Contig chr6 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr7"),"Contig chr7 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr8"),"Contig chr8 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr9"),"Contig chr9 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr10"),"Contig chr10 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr11"),"Contig chr11 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr12"),"Contig chr12 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr13"),"Contig chr13 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr14"),"Contig chr14 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr15"),"Contig chr15 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr16"),"Contig chr16 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr17"),"Contig chr17 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr18"),"Contig chr18 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr19"),"Contig chr19 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr20"),"Contig chr20 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr21"),"Contig chr21 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr22"),"Contig chr22 is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chrX"),"Contig chrX is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chrY"),"Contig chrY is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr1_random"),"Contig chr1_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr2_random"),"Contig chr2_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr3_random"),"Contig chr3_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr4_random"),"Contig chr4_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr5_random"),"Contig chr5_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr6_random"),"Contig chr6_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr7_random"),"Contig chr7_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr8_random"),"Contig chr8_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr9_random"),"Contig chr9_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr10_random"),"Contig chr10_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr11_random"),"Contig chr11_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr13_random"),"Contig chr13_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr15_random"),"Contig chr15_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr16_random"),"Contig chr16_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr17_random"),"Contig chr17_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr18_random"),"Contig chr18_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr19_random"),"Contig chr19_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr21_random"),"Contig chr21_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chr22_random"),"Contig chr22_random is not present");
- Assert.assertTrue(sequenceIndex.hasIndexEntry("chrX_random"),"Contig chrX_random is not present");
- }
-
- @Test(dataProvider="homosapiens")
- public void testHasInvalidEntry(FastaSequenceIndex sequenceIndex) {
- Assert.assertFalse(sequenceIndex.hasIndexEntry("invalid"),"Found an invalid entry");
- }
-
- @Test(dataProvider="homosapiens",expectedExceptions=PicardException.class)
- public void testGetInvalidEntry(FastaSequenceIndex sequenceIndex) {
- sequenceIndex.getIndexEntry("invalid");
- }
-
- @Test(dataProvider="homosapiens")
- public void testIteration(FastaSequenceIndex sequenceIndex) {
- Iterator<FastaSequenceIndexEntry> sequenceIndexEntries = sequenceIndex.iterator();
-
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrM","Contig chrM is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr1","Contig chr1 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr2","Contig chr2 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr3","Contig chr3 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr4","Contig chr4 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr5","Contig chr5 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr6","Contig chr6 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr7","Contig chr7 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr8","Contig chr8 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr9","Contig chr9 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr10","Contig chr10 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr11","Contig chr11 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr12","Contig chr12 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr13","Contig chr13 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr14","Contig chr14 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr15","Contig chr15 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr16","Contig chr16 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr17","Contig chr17 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr18","Contig chr18 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr19","Contig chr19 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr20","Contig chr20 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr21","Contig chr21 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr22","Contig chr22 is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrX","Contig chrX is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrY","Contig chrY is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr1_random","Contig chr1_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr2_random","Contig chr2_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr3_random","Contig chr3_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr4_random","Contig chr4_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr5_random","Contig chr5_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr6_random","Contig chr6_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr7_random","Contig chr7_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr8_random","Contig chr8_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr9_random","Contig chr9_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr10_random","Contig chr10_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr11_random","Contig chr11_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr13_random","Contig chr13_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr15_random","Contig chr15_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr16_random","Contig chr16_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr17_random","Contig chr17_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr18_random","Contig chr18_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr19_random","Contig chr19_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr21_random","Contig chr21_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chr22_random","Contig chr22_random is not present");
- Assert.assertEquals(sequenceIndexEntries.next().getContig(),"chrX_random","Contig chrX_random is not present");
- Assert.assertFalse(sequenceIndexEntries.hasNext(),"Iterator still has more entries");
- }
-
- @Test(dataProvider="specialcharacters")
- public void testSpecialCharacters(FastaSequenceIndex specialCharactersIndex) {
- /* file contents:
- chrM 16571 6 50 51
- chr1;boat 247249719 16915 50 51
- chr2:money 242951149 252211635 50 51
- chr3::; 199501827 500021813 50 51
- ;;;;;; 1234 1234 1234 1234
- file:gi|17981852|ref|NC_001807.4| 16571 2911876801 70 71
- */
- Iterator<FastaSequenceIndexEntry> sequenceIndexEntries = specialCharactersIndex.iterator();
- FastaSequenceIndexEntry ent = sequenceIndexEntries.next();
- Assert.assertEquals(ent.getContig(),"chrM","Contig chrM is not present");
- Assert.assertEquals(ent.getSize(),16571,"Contig chrM size is not correct");
- Assert.assertEquals(ent.getLocation(),6,"Contig chrM location is not correct");
- Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chrM bases per line is not correct");
- Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chrM bytes per line is not correct");
-
- ent = sequenceIndexEntries.next();
- Assert.assertEquals(ent.getContig(),"chr1;boat","Contig chr1;boat is not present");
- Assert.assertEquals(ent.getSize(),247249719,"Contig chr1;boat size is not correct");
- Assert.assertEquals(ent.getLocation(),16915,"Contig chr1;boat location is not correct");
- Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chr1;boat bases per line is not correct");
- Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chr1;boat bytes per line is not correct");
-
- ent = sequenceIndexEntries.next();
- Assert.assertEquals(ent.getContig(),"chr2:money","Contig chr2:money is not present");
- Assert.assertEquals(ent.getSize(),242951149,"Contig chr2:money size is not correct");
- Assert.assertEquals(ent.getLocation(),252211635,"Contig chr2:money location is not correct");
- Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chr2:money bases per line is not correct");
- Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chr2:money bytes per line is not correct");
-
- ent = sequenceIndexEntries.next();
- Assert.assertEquals(ent.getContig(),"chr3::;","Contig chr3::; is not present");
- Assert.assertEquals(ent.getSize(),199501827,"Contig chr3::; size is not correct");
- Assert.assertEquals(ent.getLocation(),500021813,"Contig chrM location is not correct");
- Assert.assertEquals(ent.getBasesPerLine(),50,"Contig chr3::; bases per line is not correct");
- Assert.assertEquals(ent.getBytesPerLine(),51,"Contig chr3::; bytes per line is not correct");
-
- ent = sequenceIndexEntries.next();
- Assert.assertEquals(ent.getContig(),";;;;;;;;","Contig ;;;;;;;; is not present");
- Assert.assertEquals(ent.getSize(),123,"Contig ;;;;;;;; size is not correct");
- Assert.assertEquals(ent.getLocation(),234,"Contig ;;;;;;;; location is not correct");
- Assert.assertEquals(ent.getBasesPerLine(),456,"Contig ;;;;;;;; bases per line is not correct");
- Assert.assertEquals(ent.getBytesPerLine(),789,"Contig ;;;;;;;; bytes per line is not correct");
-
- ent = sequenceIndexEntries.next();
- Assert.assertEquals(ent.getContig(),"file:gi|17981852|ref|NC_001807.4|","Contig file:gi|17981852|ref|NC_001807.4| is not present");
- Assert.assertEquals(ent.getSize(),16571,"Contig file:gi|17981852|ref|NC_001807.4| size is not correct");
- Assert.assertEquals(ent.getLocation(),2911876801L,"Contig file:gi|17981852|ref|NC_001807.4| location is not correct");
- Assert.assertEquals(ent.getBasesPerLine(),70,"Contig file:gi|17981852|ref|NC_001807.4| bases per line is not correct");
- Assert.assertEquals(ent.getBytesPerLine(),71,"Contig file:gi|17981852|ref|NC_001807.4| bytes per line is not correct");
- }
-}
diff --git a/src/tests/java/net/sf/picard/reference/IndexedFastaSequenceFileTest.java b/src/tests/java/net/sf/picard/reference/IndexedFastaSequenceFileTest.java
deleted file mode 100644
index 12198c9..0000000
--- a/src/tests/java/net/sf/picard/reference/IndexedFastaSequenceFileTest.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.util.CloserUtil;
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-
-/**
- * Test the indexed fasta sequence file reader.
- */
-public class IndexedFastaSequenceFileTest{
- private static File TEST_DATA_DIR = new File("testdata/net/sf/picard/reference");
- private static File SEQUENCE_FILE = new File(TEST_DATA_DIR,"Homo_sapiens_assembly18.trimmed.fasta");
- private static File SEQUENCE_FILE_NODICT = new File(TEST_DATA_DIR,"Homo_sapiens_assembly18.trimmed.nodict.fasta");
-
- private final String firstBasesOfChrM = "GATCACAGGTCTATCACCCT";
- private final String extendedBasesOfChrM = "GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT" +
- "TTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTG" +
- "GAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATT";
- private final String lastBasesOfChr20 = "ttgtctgatgctcatattgt";
- private final int CHR20_LENGTH = 1000000;
-
- @DataProvider(name="homosapiens")
- public Object[][] provideSequenceFile() throws FileNotFoundException {
- return new Object[][] { new Object[]
- { new IndexedFastaSequenceFile(SEQUENCE_FILE) },
- { new IndexedFastaSequenceFile(SEQUENCE_FILE_NODICT) }};
- }
-
- @DataProvider(name="comparative")
- public Object[][] provideOriginalAndNewReaders() throws FileNotFoundException {
- return new Object[][] {
- new Object[] { ReferenceSequenceFileFactory.getReferenceSequenceFile(SEQUENCE_FILE),
- new IndexedFastaSequenceFile(SEQUENCE_FILE) },
- new Object[] { ReferenceSequenceFileFactory.getReferenceSequenceFile(SEQUENCE_FILE, true),
- new IndexedFastaSequenceFile(SEQUENCE_FILE) },};
- }
-
- @Test(dataProvider="homosapiens")
- public void testOpenFile(IndexedFastaSequenceFile sequenceFile) {
- long startTime = System.currentTimeMillis();
- Assert.assertNotNull(sequenceFile);
- long endTime = System.currentTimeMillis();
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testOpenFile runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="homosapiens")
- public void testFirstSequence(IndexedFastaSequenceFile sequenceFile) {
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",1,firstBasesOfChrM.length());
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),firstBasesOfChrM,"First n bases of chrM are incorrect");
-
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testFirstSequence runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="homosapiens")
- public void testFirstSequenceExtended(IndexedFastaSequenceFile sequenceFile) {
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",1,extendedBasesOfChrM.length());
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),extendedBasesOfChrM,"First n bases of chrM are incorrect");
-
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testFirstSequenceExtended runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="homosapiens")
- public void testReadStartingInCenterOfFirstLine(IndexedFastaSequenceFile sequenceFile) {
- final int bytesToChopOff = 5;
- String truncated = extendedBasesOfChrM.substring(bytesToChopOff);
-
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",
- bytesToChopOff + 1,
- bytesToChopOff + truncated.length());
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),truncated,"First n bases of chrM are incorrect");
-
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testReadStartingInCenterOfFirstLine runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="homosapiens")
- public void testReadStartingInCenterOfMiddleLine(IndexedFastaSequenceFile sequenceFile) {
- final int bytesToChopOff = 120;
- String truncated = extendedBasesOfChrM.substring(bytesToChopOff);
-
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chrM",
- bytesToChopOff + 1,
- bytesToChopOff + truncated.length());
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),truncated,"First n bases of chrM are incorrect");
-
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testReadStartingInCenterOfMiddleLine runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="comparative")
- public void testFirstCompleteContigRead(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
- ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.getSequence("chrM");
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrM is incorrect");
-
- CloserUtil.close(originalSequenceFile);
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testFirstCompleteContigRead runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="homosapiens",expectedExceptions=PicardException.class)
- public void testReadThroughEndOfContig(IndexedFastaSequenceFile sequenceFile) {
- long startTime = System.currentTimeMillis();
- try {
- sequenceFile.getSubsequenceAt("chrM",16500,16600);
- }
- finally {
- long endTime = System.currentTimeMillis();
-
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testReadThroughEndOfContig runtime: %dms%n", (endTime - startTime)) ;
- }
- }
-
- @Test(dataProvider="homosapiens",expectedExceptions=PicardException.class)
- public void testReadPastEndOfContig(IndexedFastaSequenceFile sequenceFile) {
- long startTime = System.currentTimeMillis();
- try {
- sequenceFile.getSubsequenceAt("chrM",16800,16900);
- }
- finally {
- long endTime = System.currentTimeMillis();
-
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testReadPastEndOfContig runtime: %dms%n", (endTime - startTime)) ;
- }
- }
-
- @Test(dataProvider="comparative")
- public void testLastCompleteContigRead(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
- ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
- while( !expectedSequence.getName().equals("chr20") )
- expectedSequence = originalSequenceFile.nextSequence();
-
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.getSequence("chr20");
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chr20","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),1,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrX_random is incorrect");
-
- CloserUtil.close(originalSequenceFile);
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testLastCompleteContigRead runtime: %dms%n", (endTime - startTime)) ;
- }
-
-
- @Test(dataProvider="homosapiens")
- public void testLastOfChr20(IndexedFastaSequenceFile sequenceFile) {
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.getSubsequenceAt("chr20",
- CHR20_LENGTH - lastBasesOfChr20.length()+1,
- CHR20_LENGTH);
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chr20","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),1,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),lastBasesOfChr20,"First n bases of chr1 are incorrect");
-
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testFirstOfChr1 runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="comparative")
- public void testFirstElementOfIterator(ReferenceSequenceFile originalSequenceFile,IndexedFastaSequenceFile sequenceFile) {
- ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
- long startTime = System.currentTimeMillis();
- ReferenceSequence sequence = sequenceFile.nextSequence();
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(), "chrM","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(), 0,"Sequence contig index is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrM is incorrect");
-
- CloserUtil.close(originalSequenceFile);
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testFirstElementOfIterator runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="comparative")
- public void testNextElementOfIterator(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
- // Skip past the first one and load the second one.
- originalSequenceFile.nextSequence();
- ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
- long startTime = System.currentTimeMillis();
- sequenceFile.nextSequence();
- ReferenceSequence sequence = sequenceFile.nextSequence();
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chr20","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),1,"Sequence contig index is not correct");
- Assert.assertEquals(sequence.length(),expectedSequence.length(),"Sequence size is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chr1 is incorrect");
-
- CloserUtil.close(originalSequenceFile);
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testNextElementOfIterator runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(dataProvider="comparative")
- public void testReset(ReferenceSequenceFile originalSequenceFile, IndexedFastaSequenceFile sequenceFile) {
- // Skip past the first one and load the second one.
- ReferenceSequence expectedSequence = originalSequenceFile.nextSequence();
-
- long startTime = System.currentTimeMillis();
- sequenceFile.nextSequence();
- sequenceFile.nextSequence();
- sequenceFile.reset();
- ReferenceSequence sequence = sequenceFile.nextSequence();
- long endTime = System.currentTimeMillis();
-
- Assert.assertEquals(sequence.getName(),"chrM","Sequence contig is not correct");
- Assert.assertEquals(sequence.getContigIndex(),0,"Sequence contig index is not correct");
- Assert.assertEquals(sequence.length(),expectedSequence.length(), "Sequence size is not correct");
- Assert.assertEquals(StringUtil.bytesToString(sequence.getBases()),StringUtil.bytesToString(expectedSequence.getBases()),"chrM is incorrect");
-
- CloserUtil.close(originalSequenceFile);
- CloserUtil.close(sequenceFile);
-
- System.err.printf("testReset runtime: %dms%n", (endTime - startTime)) ;
- }
-
- @Test(expectedExceptions = FileNotFoundException.class)
- public void testMissingFile() throws Exception {
- new IndexedFastaSequenceFile(new File(TEST_DATA_DIR, "non-existent.fasta"));
- Assert.fail("FileNotFoundException should have been thrown");
- }
-}
diff --git a/src/tests/java/net/sf/picard/reference/ReferenceSequenceFileWalkerTest.java b/src/tests/java/net/sf/picard/reference/ReferenceSequenceFileWalkerTest.java
deleted file mode 100644
index 71c6df8..0000000
--- a/src/tests/java/net/sf/picard/reference/ReferenceSequenceFileWalkerTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package net.sf.picard.reference;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Created by farjoun on 2/14/14.
- */
-public class ReferenceSequenceFileWalkerTest {
-
-
- @DataProvider(name = "TestReference")
- public Object[][] TestReference() {
- return new Object[][]{
- new Object[]{"testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta", 0, 1},
- new Object[]{"testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta", 1, 1},
- new Object[]{"testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta", 0, 0}
- };
- }
-
-
- @Test(dataProvider = "TestReference")
- public void testGet(final String fileName, final int index1, final int index2) throws PicardException {
- final File refFile = new File(fileName);
- final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(refFile);
-
- ReferenceSequence sequence = refWalker.get(index1);
- Assert.assertEquals(sequence.getContigIndex(), index1);
-
- sequence = refWalker.get(index2);
- Assert.assertEquals(sequence.getContigIndex(), index2);
- CloserUtil.close(refWalker);
- }
-
-
- @DataProvider(name = "TestFailReference")
- public Object[][] TestFailReference() {
- return new Object[][]{
- new Object[]{"testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta", 2,3},
- new Object[]{"testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta", 1,0},
- new Object[]{"testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta", -1,0}
- };
- }
-
-
- @Test(expectedExceptions = {PicardException.class}, dataProvider = "TestFailReference")
- public void testFailGet(final String fileName, final int index1, final int index2) throws PicardException {
- final File refFile = new File(fileName);
- final ReferenceSequenceFileWalker refWalker = new ReferenceSequenceFileWalker(refFile);
-
- try {
- refWalker.get(index1);
-
- refWalker.get(index2);
- }
- finally {
- CloserUtil.close(refWalker);
- }
- }
-
-
-}
diff --git a/src/tests/java/net/sf/picard/reference/ReferenceSequenceTests.java b/src/tests/java/net/sf/picard/reference/ReferenceSequenceTests.java
deleted file mode 100644
index fa2393e..0000000
--- a/src/tests/java/net/sf/picard/reference/ReferenceSequenceTests.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.reference;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-import java.io.File;
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.util.Random;
-
-/**
- * Tests for the reading of reference sequences in various formats.
- *
- * @author Tim Fennell
- */
-public class ReferenceSequenceTests {
- private static final byte[] BASES = "acgtACGTN".getBytes();
- private final Random random = new Random();
-
- @Test(dataProvider="fastaTestParameters")
- public void testSingleShortSequence(int chroms, int basesPerChrom) throws Exception {
- File f = makeRandomReference(chroms, basesPerChrom);
- ReferenceSequenceFile ref = ReferenceSequenceFileFactory.getReferenceSequenceFile(f);
-
- for (int i=1; i<=chroms; ++i) {
- ReferenceSequence seq = ref.nextSequence();
- Assert.assertNotNull(seq);
- Assert.assertEquals(seq.length(), basesPerChrom);
- Assert.assertEquals(seq.getName(), "chr" + i);
- Assert.assertEquals(seq.getContigIndex(), i-1);
- }
-
- Assert.assertNull(ref.nextSequence());
- }
-
- @DataProvider
- Object[][] fastaTestParameters() {
- return new Object[][] {
- new Object[] { 1, 60},
- new Object[] { 2, 60},
- new Object[] {10, 60},
- new Object[] { 1, 1000},
- new Object[] { 2, 1000},
- new Object[] {10, 1000},
- new Object[] { 1, 250000},
- new Object[] { 2, 250000},
- new Object[] {10, 250000}
- };
- }
-
-
- /** Utility method to write a random reference sequence of specified length. */
- private File makeRandomReference(int chroms, int basesPerChrom) throws Exception {
- File file = File.createTempFile("reference.", ".fasta");
- file.deleteOnExit();
- BufferedWriter out = new BufferedWriter(new FileWriter(file));
-
- for (int i=1; i<=chroms; ++i) {
- out.write("> chr" + i);
- out.newLine();
-
- for (int j=1; j<=basesPerChrom; ++j) {
- out.write(BASES[random.nextInt(BASES.length)]);
-
- if (j % 80 == 0 || j == basesPerChrom) out.newLine();
- }
- }
-
- out.flush();
- out.close();
- return file;
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/AddCommentsToBamTest.java b/src/tests/java/net/sf/picard/sam/AddCommentsToBamTest.java
deleted file mode 100644
index 1823997..0000000
--- a/src/tests/java/net/sf/picard/sam/AddCommentsToBamTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.BamFileIoUtils;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMTextHeaderCodec;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-public class AddCommentsToBamTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam");
- private static final File INPUT_FILE = new File(TEST_DATA_DIR, "aligned_queryname_sorted.bam");
- private static final File SAM_FILE = new File(TEST_DATA_DIR, "summary_alignment_stats_test2.sam");
-
- private static final List<String> commentList = new ArrayList(Arrays.asList("test1", "test2", "test3"));
-
- @Test
- public void testAddCommentsToBam() throws Exception {
- final AddCommentsToBam addCommentToBam = new AddCommentsToBam();
- addCommentToBam.INPUT = INPUT_FILE;
- addCommentToBam.OUTPUT = File.createTempFile("addCommentsToBamTest.", BamFileIoUtils.BAM_FILE_EXTENSION);
- addCommentToBam.COMMENT = commentList;
- addCommentToBam.doWork();
- final SAMFileHeader newHeader = new SAMFileReader(addCommentToBam.OUTPUT).getFileHeader();
-
- // The original comments are massaged when they're added to the header. Perform the same massaging here,
- // and then compare the lists
- final List<String> massagedComments = new LinkedList<String>();
- for (final String comment : commentList) {
- massagedComments.add(SAMTextHeaderCodec.COMMENT_PREFIX + comment);
- }
-
- Assert.assertEquals(newHeader.getComments(), massagedComments);
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void testUsingSam() throws Exception {
- final AddCommentsToBam addCommentToBam = new AddCommentsToBam();
- addCommentToBam.INPUT = SAM_FILE;
- addCommentToBam.OUTPUT = File.createTempFile("addCommentsToBamTest.samFile.", BamFileIoUtils.BAM_FILE_EXTENSION);
- addCommentToBam.COMMENT = commentList;
- addCommentToBam.doWork();
- throw new IllegalStateException("We shouldn't be here!");
- }
-
- @Test(expectedExceptions = PicardException.class)
- public void testUsingNewlines() throws Exception {
- final AddCommentsToBam addCommentToBam = new AddCommentsToBam();
- addCommentToBam.INPUT = INPUT_FILE;
- addCommentToBam.OUTPUT = File.createTempFile("addCommentsToBamTest.newLine.", BamFileIoUtils.BAM_FILE_EXTENSION);
- addCommentToBam.COMMENT = new ArrayList(Arrays.asList("this is\n a crazy\n test"));
- addCommentToBam.doWork();
- throw new IllegalStateException("We shouldn't be here!");
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/sam/CleanSamTest.java b/src/tests/java/net/sf/picard/sam/CleanSamTest.java
deleted file mode 100644
index 71ead29..0000000
--- a/src/tests/java/net/sf/picard/sam/CleanSamTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.sam.testers.CleanSamTester;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMValidationError;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Arrays;
-
-public class CleanSamTest {
-
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/CleanSam");
- private static final String qualityScore = "&/,&-.1/6/&&)&).)/,&0768)&/.,/874,&.4137572)&/&&,&1-&.0/&&*,&&&&&&&&&&18775799,&16:8775-56256/69::;0";
-
- @Test(dataProvider = "testCleanSamDataProvider")
- public void testCleanSam(final String samFile, final String expectedCigar) throws IOException {
- final File cleanedFile = File.createTempFile(samFile + ".", ".sam");
- cleanedFile.deleteOnExit();
- final CleanSam cleanSam = new CleanSam();
- cleanSam.INPUT = new File(TEST_DATA_DIR, samFile);
- cleanSam.OUTPUT = cleanedFile;
- Assert.assertEquals(cleanSam.doWork(), 0);
- final SamFileValidator validator = new SamFileValidator(new PrintWriter(System.out), 8000);
- validator.setIgnoreWarnings(true);
- validator.setVerbose(true, 1000);
- validator.setErrorsToIgnore(Arrays.asList(SAMValidationError.Type.MISSING_READ_GROUP));
- SAMFileReader samReader = new SAMFileReader(cleanedFile);
- samReader.setValidationStringency(SAMFileReader.ValidationStringency.LENIENT);
- final SAMRecord rec = samReader.iterator().next();
- samReader.close();
- Assert.assertEquals(rec.getCigarString(), expectedCigar);
- samReader = new SAMFileReader(cleanedFile);
- final boolean validated = validator.validateSamFileVerbose(samReader, null);
- samReader.close();
- Assert.assertTrue(validated, "ValidateSamFile failed");
- }
-
- @DataProvider(name = "testCleanSamDataProvider")
- public Object[][] testCleanSamDataProvider() {
- return new Object[][]{
- {"simple_fits.sam", "100M"},
- {"simple_overhang.sam", "99M1S"},
- {"fits_with_deletion.sam", "91M2D9M"},
- {"overhang_with_deletion.sam", "91M2D8M1S"},
- {"trailing_insertion.sam", "99M1I"},
- {"long_trailing_insertion.sam", "90M10I"},
- };
- }
-
- //identical test case using the SamFileTester to generate that SAM file on the fly
- @Test(dataProvider = "testCleanSamTesterDataProvider")
- public void testCleanSamTester(final String originalCigar, final String expectedCigar, final int defaultChromosomeLength, final int alignStart) throws IOException {
- final CleanSamTester cleanSamTester = new CleanSamTester(expectedCigar, 100, defaultChromosomeLength);
- // NB: this will add in the mate cigar, when enabled in SamPairUtil, for additional validation
- cleanSamTester.addMappedPair(0, alignStart, alignStart, false, false, originalCigar, originalCigar, false, 50);
- cleanSamTester.runTest();
- }
-
- @DataProvider(name = "testCleanSamTesterDataProvider")
- public Object[][] testCleanSamTesterDataProvider() {
- return new Object[][]{
- {"100M", "100M", 101, 2}, // simple_filts.sam
- {"100M", "99M1S", 101, 3}, // simple_overhang.sam
- {"91M2D9M", "91M2D9M", 102, 1}, // fits_with_deletion.sam
- {"91M2D9M", "91M2D8M1S", 101, 1}, // overhang_with_deletion.sam
- {"99M1I", "99M1I", 101, 3}, // trailing_insertion.sam
- {"90M10I", "90M10I", 101, 3} // long_trailing_insertion.sam
- };
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/CompareSAMsTest.java b/src/tests/java/net/sf/picard/sam/CompareSAMsTest.java
deleted file mode 100644
index dafdada..0000000
--- a/src/tests/java/net/sf/picard/sam/CompareSAMsTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.sam.CompareSAMs;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class CompareSAMsTest {
- private static final File TEST_FILES_DIR = new File("testdata/net/sf/picard/sam/CompareSAMs");
-
- private void testHelper(final String f1, final String f2, final int expectedMatch, final int expectedDiffer,
- final int expectedUnmappedBoth,
- final int expectedUnmappedLeft, final int expectedUnmappedRight, final int expectedMissingLeft,
- final int expectedMissingRight, final boolean areEqual) {
- final String[] samFiles = {
- new File(TEST_FILES_DIR, f1).getAbsolutePath(),
- new File(TEST_FILES_DIR, f2).getAbsolutePath()
- };
- CompareSAMs compareSAMs = new CompareSAMs();
- compareSAMs.instanceMain(samFiles);
- Assert.assertEquals(areEqual, compareSAMs.areEqual());
- Assert.assertEquals(expectedMatch, compareSAMs.getMappingsMatch());
- Assert.assertEquals(expectedDiffer, compareSAMs.getMappingsDiffer());
- Assert.assertEquals(expectedUnmappedBoth, compareSAMs.getUnmappedBoth());
- Assert.assertEquals(expectedUnmappedLeft, compareSAMs.getUnmappedLeft());
- Assert.assertEquals(expectedUnmappedRight, compareSAMs.getUnmappedRight());
- Assert.assertEquals(expectedMissingLeft, compareSAMs.getMissingLeft());
- Assert.assertEquals(expectedMissingRight, compareSAMs.getMissingRight());
-
- final String[] samFilesReversed = {
- new File(TEST_FILES_DIR, f2).getAbsolutePath(),
- new File(TEST_FILES_DIR, f1).getAbsolutePath()
- };
- compareSAMs = new CompareSAMs();
- compareSAMs.instanceMain(samFilesReversed);
- Assert.assertEquals(areEqual, compareSAMs.areEqual());
- Assert.assertEquals(expectedMatch, compareSAMs.getMappingsMatch());
- Assert.assertEquals(expectedDiffer, compareSAMs.getMappingsDiffer());
- Assert.assertEquals(expectedUnmappedBoth, compareSAMs.getUnmappedBoth());
- Assert.assertEquals(expectedUnmappedRight, compareSAMs.getUnmappedLeft());
- Assert.assertEquals(expectedUnmappedLeft, compareSAMs.getUnmappedRight());
- Assert.assertEquals(expectedMissingRight, compareSAMs.getMissingLeft());
- Assert.assertEquals(expectedMissingLeft, compareSAMs.getMissingRight());
- }
-
- @Test
- public void testSortsDifferent() {
- testHelper("genomic_sorted.sam", "unsorted.sam", 0, 0, 0, 0, 0, 0, 0, false);
- }
-
- @Test
- public void testSequenceDictionariesDifferent1() {
- testHelper("genomic_sorted.sam", "chr21.sam", 0, 0, 0, 0, 0, 0, 0, false);
- }
-
- @Test
- public void testSequenceDictionariesDifferent2() {
- testHelper("genomic_sorted.sam", "bigger_seq_dict.sam", 0, 0, 0, 0, 0, 0, 0, false);
- }
-
- @Test
- public void testBiggerSequenceDictionaries() {
- testHelper("bigger_seq_dict.sam", "bigger_seq_dict.sam", 2, 0, 0, 0, 0, 0, 0, true);
- }
-
- @Test
- public void testIdentical() {
- testHelper("genomic_sorted.sam", "genomic_sorted.sam", 2, 0, 0, 0, 0, 0, 0, true);
- }
-
- @Test
- public void testHasNonPrimary() {
- testHelper("genomic_sorted.sam", "has_non_primary.sam", 2, 0, 0, 0, 0, 0, 0, true);
- }
-
- @Test
- public void testMoreOnOneSide() {
- testHelper("genomic_sorted_5.sam", "genomic_sorted_5_plus.sam", 3, 2, 0, 0, 0, 3, 0, false);
- }
-
- @Test
- public void testGroupWithSameCoordinate() {
- testHelper("group_same_coord.sam", "group_same_coord_diff_order.sam", 3, 0, 0, 0, 0, 1, 2, false);
- }
-
- @Test
- public void testGroupWithSameCoordinateAndNoMatchInOther() {
- testHelper("group_same_coord.sam", "diff_coords.sam", 0, 5, 0, 0, 0, 0, 0, false);
- }
-
- @Test
- public void testUnmapped1() {
- testHelper("genomic_sorted.sam", "unmapped_first.sam", 1, 0, 0, 0, 1, 0, 0, false);
- }
-
- @Test
- public void testUnmapped2() {
- testHelper("genomic_sorted.sam", "unmapped_second.sam", 1, 0, 0, 0, 1, 0, 0, false);
- }
-
- @Test
- public void testUnmapped3() {
- testHelper("unmapped_first.sam", "unmapped_second.sam", 0, 0, 0, 1, 1, 0, 0, false);
- }
-
- @Test
- public void testUnmapped4() {
- testHelper("unmapped_first.sam", "unmapped_first.sam", 1, 0, 1, 0, 0, 0, 0, true);
- }
-
-
-}
diff --git a/src/tests/java/net/sf/picard/sam/CreateSequenceDictionaryTest.java b/src/tests/java/net/sf/picard/sam/CreateSequenceDictionaryTest.java
deleted file mode 100644
index c9f6ef7..0000000
--- a/src/tests/java/net/sf/picard/sam/CreateSequenceDictionaryTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class CreateSequenceDictionaryTest {
- public static File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam");
- public static File BASIC_FASTA = new File(TEST_DATA_DIR, "basic.fasta");
- public static File DUPLICATE_FASTA = new File(TEST_DATA_DIR, "duplicate_sequence_names.fasta");
-
- @Test
- public void testBasic() throws Exception {
- final File outputDict = File.createTempFile("CreateSequenceDictionaryTest.", ".dict");
- outputDict.delete();
- outputDict.deleteOnExit();
- final String[] argv = {
- "REFERENCE=" + BASIC_FASTA,
- "OUTPUT=" + outputDict,
- "TRUNCATE_NAMES_AT_WHITESPACE=false"
- };
- Assert.assertEquals(new CreateSequenceDictionary().instanceMain(argv), 0);
- }
-
- /**
- * Should throw an exception because with TRUNCATE_NAMES_AT_WHITESPACE, sequence names are not unique.
- */
- @Test(expectedExceptions = PicardException.class)
- public void testNonUniqueSequenceName() throws Exception {
- final File outputDict = File.createTempFile("CreateSequenceDictionaryTest.", ".dict");
- outputDict.deleteOnExit();
- final String[] argv = {
- "REFERENCE=" + DUPLICATE_FASTA,
- "OUTPUT=" + outputDict,
- "TRUNCATE_NAMES_AT_WHITESPACE=true"
- };
- Assert.assertEquals(new CreateSequenceDictionary().instanceMain(argv), 0);
- Assert.fail("Exception should have been thrown.");
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/FastqToSamTest.java b/src/tests/java/net/sf/picard/sam/FastqToSamTest.java
deleted file mode 100644
index fbb679d..0000000
--- a/src/tests/java/net/sf/picard/sam/FastqToSamTest.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.fastq.FastqReader;
-import net.sf.picard.util.FastqQualityFormat;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Tests for FastqToBam
- */
-public class FastqToSamTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/fastq2bam");
-
- // fastq files with legal values for each fastq version
- @DataProvider(name = "okVersionFiles")
- public Object[][] okVersionFiles() {
- return new Object[][] {
- {"fastq-sanger/5k-v1-Rhodobacter_LW1.sam.fastq", FastqQualityFormat.Standard },
- {"fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq", FastqQualityFormat.Standard },
- {"fastq-sanger/sanger_full_range_as_sanger-63.fastq", FastqQualityFormat.Standard }, // all sanger chars
-
- {"fastq-solexa/s_1_sequence.txt", FastqQualityFormat.Solexa},
- {"fastq-solexa/solexa_full_range_as_solexa.fastq", FastqQualityFormat.Solexa}, // all solexa chars
-
- {"fastq-illumina/s_1_2_sequence.txt", FastqQualityFormat.Illumina},
- {"fastq-illumina/s_1_2_sequence.txt", FastqQualityFormat.Illumina},
- {"fastq-illumina/s_1_sequence.txt", FastqQualityFormat.Illumina},
- };
- }
-
- // Illegal values fastq files for each fastq version
- @DataProvider(name = "badVersionFiles")
- public Object[][] badVersionFiles() {
- return new Object[][] {
- {"fastq-sanger/sanger_full_range_as_sanger-63.fastq", FastqQualityFormat.Illumina},
- {"fastq-solexa/s_1_sequence.txt", FastqQualityFormat.Illumina},
- };
- }
-
- // Illegal fastq format, i.e. doesn't contain correct four lines per record
- @DataProvider(name = "badFormatFiles")
- public Object[][] badFormatFiles() {
- return new Object[][] {
- {"bad-format/bad-qual-header.txt"},
- {"bad-format/bad-seq-header.txt"},
- {"bad-format/extra-line.txt"},
- {"bad-format/too-many-quals.txt"},
- {"bad-format/1lines.txt"},
- {"bad-format/2lines.txt"},
- {"bad-format/3lines.txt"},
- };
- }
-
- // permissive fastq format, i.e. contain blank lines at various places
- @DataProvider(name = "permissiveFormatFiles")
- public Object[][] permissiveFormatFiles() {
- return new Object[][] {
- {"permissive-format/pair1.txt", "permissive-format/pair2.txt", FastqQualityFormat.Standard },
- {"permissive-format/s_1_1_sequence.txt", "permissive-format/s_1_2_sequence.txt", FastqQualityFormat.Illumina},
- {"permissive-format/pair1.txt", null, FastqQualityFormat.Standard},
- {"permissive-format/pair2.txt", null, FastqQualityFormat.Standard},
- {"permissive-format/s_1_1_sequence.txt", null, FastqQualityFormat.Illumina},
- {"permissive-format/s_1_2_sequence.txt", null, FastqQualityFormat.Illumina},
- {"permissive-format/s_1_sequence.txt", null, FastqQualityFormat.Illumina},
-
- };
- }
-
-
- // OK paired fastq files
- @DataProvider(name = "okPairedFiles")
- public Object[][] okPairedFiles() {
- return new Object[][] {
- {"ok-paired/pair1.txt", "ok-paired/pair2.txt", FastqQualityFormat.Standard },
- {"fastq-illumina/s_1_1_sequence.txt", "fastq-illumina/s_1_2_sequence.txt", FastqQualityFormat.Illumina}
- };
- }
-
- // Inconsistent paired fastq files
- @DataProvider(name = "badPairedFiles")
- public Object[][] badPairedFiles() {
- return new Object[][] {
- {"ok-paired/pair1.txt", "bad-paired/pair2-one-more-record.txt" },
- {"bad-paired/pair1-one-more-record.txt", "ok-paired/pair2.txt" },
- {"ok-paired/pair1.txt", "bad-paired/pair2-badnum.txt" },
- {"bad-paired/pair1-badnum.txt", "ok-paired/pair2.txt" },
- {"bad-paired/pair1-nonum.txt", "ok-paired/pair2.txt" },
- {"bad-paired/pair1-onetoken.txt", "ok-paired/pair2.txt" },
- };
- }
-
- @Test(dataProvider = "permissiveFormatFiles")
- public void testPermissiveOk(final String filename1, final String filename2, final FastqQualityFormat version) throws IOException {
- convertFile(filename1,filename2,version,true);
- }
-
- @Test(dataProvider = "permissiveFormatFiles",expectedExceptions = PicardException.class)
- public void testPermissiveFail(final String filename1, final String filename2, final FastqQualityFormat version) throws IOException {
- convertFile(filename1,filename2,version,false);
- }
-
- @Test(dataProvider = "okVersionFiles")
- public void testFastqVersionOk(final String fastqVersionFilename, final FastqQualityFormat version) throws IOException {
- convertFile(fastqVersionFilename, version);
- }
-
- @Test(dataProvider = "badVersionFiles", expectedExceptions= PicardException.class)
- public void testFastqVersionBad(final String fastqVersionFilename, final FastqQualityFormat version) throws IOException {
- convertFile(fastqVersionFilename, version);
- }
-
- @Test(dataProvider = "badFormatFiles", expectedExceptions= PicardException.class)
- public void testBadFile(final String filename) throws IOException {
- convertFile(filename, null, FastqQualityFormat.Standard);
- }
-
- @Test(dataProvider = "badPairedFiles", expectedExceptions= PicardException.class)
- public void testPairedBad(final String filename1, final String filename2) throws IOException {
- convertFile(filename1, filename2, FastqQualityFormat.Standard);
- }
-
- @Test(dataProvider = "okPairedFiles")
- public void testPairedOk(final String filename1, final String filename2, final FastqQualityFormat version) throws IOException {
- convertFile(filename1, filename2, version);
- }
-
- private File convertFile(final String filename, final FastqQualityFormat version) throws IOException {
- return convertFile(filename, null, version);
- }
-
- private File convertFile(final String fastqFilename1, final String fastqFilename2, final FastqQualityFormat version) throws IOException{
- return convertFile(fastqFilename1, fastqFilename2, version,false);
- }
-
- private File convertFile(final String fastqFilename1, final String fastqFilename2, final FastqQualityFormat version,final boolean permissiveFormat) throws IOException {
- final File fastq1 = new File(TEST_DATA_DIR, fastqFilename1);
- final File fastq2 = (fastqFilename2 != null) ? new File(TEST_DATA_DIR, fastqFilename2) : null;
- final File samFile = newTempSamFile(fastq1.getName());
-
- final List<String> args =new ArrayList<String>();
-
- args.add("FASTQ=" + fastq1.getAbsolutePath());
- args.add("OUTPUT=" + samFile.getAbsolutePath());
- args.add("QUALITY_FORMAT=" + version);
- args.add("READ_GROUP_NAME=rg");
- args.add("SAMPLE_NAME=s1");
-
- if(fastqFilename2 != null) args.add("FASTQ2=" + fastq2.getAbsolutePath());
- if(permissiveFormat) args.add("ALLOW_AND_IGNORE_EMPTY_LINES=true");
-
- final FastqToSam fqToSam = new FastqToSam();
- Assert.assertEquals(fqToSam.instanceMain(args.toArray(new String[args.size()])), 0);
- return samFile ;
- }
-
- private static File newTempSamFile(final String filename) throws IOException {
- final File file = File.createTempFile(filename,".sam");
- file.deleteOnExit();
- return file;
- }
-
- private static File newTempFile(final String filename) throws IOException {
- final File file = File.createTempFile(filename,".tmp");
- file.deleteOnExit();
- return file;
- }
-
-// Test for legal syntax for pair read names for FastqToSam.getBaseName()
-// We create a dummy file to test the getBaseName() method since it expects
-// an existing file.
-
- private static final FastqToSam fastqToSam = new FastqToSam();
- private static FastqReader freader1 ;
- private static FastqReader freader2 ;
-
- @BeforeClass
- public static void beforeClass() throws IOException {
- final File dummyFile = newTempFile("dummy");
- freader1 = new FastqReader(dummyFile);
- freader2 = new FastqReader(dummyFile);
- }
-
- @DataProvider(name = "okPairNames")
- public Object[][] okPairNames() {
- return new Object[][] {
- {"aa/1", "aa/2" },
- {"aa", "aa" },
- {"aa/bb", "aa/bb" },
- {"aa/bb/", "aa/bb/" },
- {"aa/bb/1", "aa/bb/2" },
- {"aa/bb/cc/dd/ee/ff/1", "aa/bb/cc/dd/ee/ff/2" },
- {"////1", "////2" },
- {"/", "/" },
- {"////", "////" },
- {"/aa", "/aa" },
- {"aa/", "aa/" },
- {"ab/c", "ab/c"}
- };
- }
-
- @DataProvider(name = "badPairNames")
- public Object[][] badPairNames() {
- return new Object[][] {
- {"", "" },
- {"aa/1", "bb/2" },
- {"aa" , "bb" },
- {"aa/1", "aa" },
- {"aa", "aa/2" },
- {"aa/1", "aa/1" },
- {"aa/2", "aa/2" },
- };
- }
-
- @Test(dataProvider = "okPairNames")
- public void readPairNameOk(final String name1, final String name2) throws IOException {
- fastqToSam.getBaseName(name1, name2, freader1, freader2);
- }
-
- @Test(dataProvider = "badPairNames", expectedExceptions= PicardException.class)
- public void readPairNameBad(final String name1, final String name2) throws IOException {
- fastqToSam.getBaseName(name1, name2, freader1, freader2);
- }
-}
-
diff --git a/src/tests/java/net/sf/picard/sam/MarkDuplicatesTest.java b/src/tests/java/net/sf/picard/sam/MarkDuplicatesTest.java
deleted file mode 100644
index a5342cd..0000000
--- a/src/tests/java/net/sf/picard/sam/MarkDuplicatesTest.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.*;
-import net.sf.samtools.util.TestUtil;
-import net.sf.picard.sam.testers.MarkDuplicatesTester;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.*;
-
-public class MarkDuplicatesTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/MarkDuplicates");
-
-
- /**
- * Test that PG header records are created & chained appropriately (or not created), and that the PG record chains
- * are as expected. MarkDuplicates is used both to merge and to mark dupes in this case.
- * @param suppressPg If true, do not create PG header record.
- * @param expectedPnVnByReadName For each read, info about the expect chain of PG records.
- */
- @Test(dataProvider = "pgRecordChainingTest")
- public void pgRecordChainingTest(final boolean suppressPg,
- final Map<String, List<ExpectedPnAndVn>> expectedPnVnByReadName) {
- final File outputDir = IoUtil.createTempDir("MarkDuplicatesTest.", ".tmp");
- outputDir.deleteOnExit();
- try {
- // Run MarkDuplicates, merging the 3 input files, and either enabling or suppressing PG header
- // record creation according to suppressPg.
- final MarkDuplicates markDuplicates = new MarkDuplicates();
- final ArrayList<String> args = new ArrayList<String>();
- for (int i = 1; i <= 3; ++i) {
- args.add("INPUT=" + new File(TEST_DATA_DIR, "merge" + i + ".sam").getAbsolutePath());
- }
- final File outputSam = new File(outputDir, "markDuplicatesTest.sam");
- args.add("OUTPUT=" + outputSam.getAbsolutePath());
- args.add("METRICS_FILE=" + new File(outputDir, "markDuplicatesTest.duplicate_metrics").getAbsolutePath());
- if (suppressPg) args.add("PROGRAM_RECORD_ID=null");
-
- // I generally prefer to call doWork rather than invoking the argument parser, but it is necessary
- // in this case to initialize the command line.
- // Note that for the unit test, version won't come through because it is obtained through jar
- // manifest, and unit test doesn't run code from a jar.
- Assert.assertEquals(markDuplicates.instanceMain(args.toArray(new String[args.size()])), 0);
-
- // Read the MarkDuplicates output file, and get the PG ID for each read. In this particular test,
- // the PG ID should be the same for both ends of a pair.
- final SAMFileReader reader = new SAMFileReader(outputSam);
-
- final Map<String, String> pgIdForReadName = new HashMap<String, String>();
- for (final SAMRecord rec : reader) {
- final String existingPgId = pgIdForReadName.get(rec.getReadName());
- final String thisPgId = rec.getStringAttribute(SAMTag.PG.name());
- if (existingPgId != null) {
- Assert.assertEquals(thisPgId, existingPgId);
- } else {
- pgIdForReadName.put(rec.getReadName(), thisPgId);
- }
- }
- final SAMFileHeader header = reader.getFileHeader();
- reader.close();
-
- // Confirm that for each read name, the chain of PG records contains exactly the number that is expected,
- // and that values in the PG chain are as expected.
- for (final Map.Entry<String, List<ExpectedPnAndVn>> entry : expectedPnVnByReadName.entrySet()) {
- final String readName = entry.getKey();
- final List<ExpectedPnAndVn> expectedList = entry.getValue();
- String pgId = pgIdForReadName.get(readName);
- for (final ExpectedPnAndVn expected : expectedList) {
- final SAMProgramRecord programRecord = header.getProgramRecord(pgId);
- if (expected.expectedPn != null) Assert.assertEquals(programRecord.getProgramName(), expected.expectedPn);
- if (expected.expectedVn != null) Assert.assertEquals(programRecord.getProgramVersion(), expected.expectedVn);
- pgId = programRecord.getPreviousProgramGroupId();
- }
- Assert.assertNull(pgId);
- }
-
- } finally {
- TestUtil.recursiveDelete(outputDir);
- }
- }
-
- /**
- * Represents an expected PN value and VN value for a PG record. If one of thexe is null, any value is allowed
- * in the PG record being tested.
- */
- private static class ExpectedPnAndVn {
- final String expectedPn;
- final String expectedVn;
-
- private ExpectedPnAndVn(final String expectedPn, final String expectedVn) {
- this.expectedPn = expectedPn;
- this.expectedVn = expectedVn;
- }
- }
-
- @DataProvider(name = "pgRecordChainingTest")
- public Object[][] pgRecordChainingTestDataProvider() {
- // Two test cases: One in which PG record generation is enabled, the other in which it is turned off.
- final Map<String, List<ExpectedPnAndVn>> withPgMap = new HashMap<String, List<ExpectedPnAndVn>>();
- withPgMap.put("1AAXX.1.1", Arrays.asList(new ExpectedPnAndVn("MarkDuplicates", null), new ExpectedPnAndVn("MarkDuplicates", "1"), new ExpectedPnAndVn("bwa", "1")));
- withPgMap.put("1AAXX.2.1", Arrays.asList(new ExpectedPnAndVn("MarkDuplicates", null), new ExpectedPnAndVn("bwa", "2")));
- withPgMap.put("1AAXX.3.1", Arrays.asList(new ExpectedPnAndVn("MarkDuplicates", null)));
-
-
- final Map<String, List<ExpectedPnAndVn>> suppressPgMap = new HashMap<String, List<ExpectedPnAndVn>>();
- suppressPgMap .put("1AAXX.1.1", Arrays.asList(new ExpectedPnAndVn("MarkDuplicates", "1"), new ExpectedPnAndVn("bwa", "1")));
- suppressPgMap .put("1AAXX.2.1", Arrays.asList(new ExpectedPnAndVn("bwa", "2")));
- suppressPgMap .put("1AAXX.3.1", new ArrayList<ExpectedPnAndVn>(0));
- return new Object[][] {
- { false, withPgMap},
- { true, suppressPgMap}
- };
- }
-
-
- @Test
- public void testSingleUnmappedFragment() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addUnmappedFragment(-1, 50);
- tester.runTest();
- }
-
- @Test
- public void testSingleUnmappedPair() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addUnmappedPair(-1, 50);
- tester.runTest();
- }
-
-
- @Test
- public void testSingleMappedFragment() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedFragment(1, 1, false, 50);
- tester.runTest();
- }
-
- @Test
- public void testSingleMappedPair() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 1, 100, false, false, 50);
- tester.runTest();
- }
-
- @Test
- public void testSingleMappedFragmentAndSingleMappedPair() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedFragment(1, 1, true, 30); // duplicate!!!
- tester.addMappedPair(1, 1, 100, false, false, 50);
- tester.runTest();
- }
-
- @Test
- public void testTwoMappedPairs() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 1, 100, false, false, 50);
- tester.addMappedPair(1, 1, 100, true, true, 30); // duplicate!!!
- tester.runTest();
- }
-
- @Test
- public void testThreeMappedPairs() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 1, 100, false, false, 50);
- tester.addMappedPair(1, 1, 100, true, true, 30); // duplicate!!!
- tester.addMappedPair(1, 1, 100, true, true, 30); // duplicate!!!
- tester.runTest();
- }
-
- @Test
- public void testSingleMappedFragmentAndTwoMappedPairs() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedFragment(1, 1, true, 30); // duplicate!!!
- tester.addMappedPair(1, 1, 100, false, false, 50);
- tester.addMappedPair(1, 1, 100, true, true, 30); // duplicate!!!
- tester.runTest();
- }
-
- @Test
- public void testTwoMappedPairsMatesSoftClipped() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 10022, 10051, false, false, "76M", "8S68M", false, true, false, 50);
- tester.addMappedPair(1, 10022, 10063, false, false, "76M", "5S71M", false, true, false, 50);
- tester.runTest();
- }
-
- @Test
- public void testTwoMappedPairsWithSoftClipping() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- // NB: no duplicates
- // 5'1: 2, 5'2:46+73M=118
- // 5'1: 2, 5'2:51+68M=118
- tester.addMappedPair(1, 2, 46, false, false, "6S42M28S", "3S73M", false, 50);
- tester.addMappedPair(1, 2, 51, true, true, "6S42M28S", "8S68M", false, 50);
- tester.runTest();
- }
-
- @Test
- public void testTwoMappedPairsWithSoftClippingFirstOfPairOnlyNoMateCigar() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.setNoMateCigars(true);
- // NB: no duplicates
- // 5'1: 2, 5'2:46+73M=118
- // 5'1: 2, 5'2:51+68M=118
- tester.addMappedPair(1, 12, 46, false, false, "6S42M28S", null, true, 50); // only add the first one
- tester.addMappedPair(1, 12, 51, false, false, "6S42M28S", null, true, 50); // only add the first one
- tester.runTest();
- }
-
- @Test
- public void testTwoMappedPairsWithSoftClippingBoth() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 10046, 10002, false, false, "3S73M", "6S42M28S", true, false, false, 50);
- tester.addMappedPair(1, 10051, 10002, true, true, "8S68M", "6S48M22S", true, false, false, 50);
- tester.runTest();
- }
-
- @Test
- public void testMatePairFirstUnmapped() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMatePair(1, 10049, 10049, false, true, false, false, "11M2I63M", null, false, false, false, 50);
- tester.runTest();
- }
-
- @Test
- public void testMatePairSecondUnmapped() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMatePair(1, 10056, 10056, true, false, false, false, null, "54M22S", false, false, false, 50);
- tester.runTest();
- }
-
- @Test
- public void testMappedFragmentAndMatePairOneUnmapped() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMatePair(1, 10049, 10049, false, true, false, false, "11M2I63M", null, false, false, false, 50);
- tester.addMappedFragment(1, 10049, true, 30); // duplicate
- tester.runTest();
- }
-
- @Test
- public void testMappedPairAndMatePairOneUnmapped() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMatePair(1, 10040, 10040, false, true, true, false, "76M", null, false, false, false, 30); // first a duplicate,
- // second end unmapped
- tester.addMappedPair(1, 10189, 10040, false, false, "41S35M", "65M11S", true, false, false, 50); // mapped OK
- tester.runTest();
- }
-
- @Test
- public void testTwoMappedPairsWithOppositeOrientations() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 10182, 10038, false, false, "32S44M", "66M10S", true, false, false, 50); // -/+
- tester.addMappedPair(1, 10038, 10182, true, true, "70M6S", "32S44M", false, true, false, 50); // +/-, both are duplicates
- tester.runTest();
- }
-
- @Test
- public void testTwoMappedPairsWithOppositeOrientationsNumberTwo() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 10038, 10182, false, false, "70M6S", "32S44M", false, true, false, 50); // +/-, both are duplicates
- tester.addMappedPair(1, 10182, 10038, true, true, "32S44M", "66M10S", true, false, false, 50); // -/+
- tester.runTest();
- }
-
- @Test
- public void testThreeMappedPairsWithMatchingSecondMate() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- // Read0 and Read2 are duplicates
- // 10181+35=10216, 10058
- tester.addMappedPair(1, 10181, 10058, false, false, "41S35M", "47M29S", true, false, false, 50); // -/+
- // 10181+37=10218, 10058
- tester.addMappedPair(1, 10181, 10058, false, false, "37S39M", "44M32S", true, false, false, 50); // -/+
- // 10180+36=10216, 10058
- tester.addMappedPair(1, 10180, 10058, true, true, "36S40M", "50M26S", true, false, false, 50); // -/+, both are duplicates
- tester.runTest();
- }
-
- @Test
- public void testMappedPairWithSamePosition() {
- final MarkDuplicatesTester tester = new MarkDuplicatesTester();
- tester.addMappedPair(1, 4914, 4914, false, false, "37M39S", "73M3S", false, false, false, 50); // +/+
- tester.runTest();
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/MergeBamAlignmentTest.java b/src/tests/java/net/sf/picard/sam/MergeBamAlignmentTest.java
deleted file mode 100644
index 2f827a8..0000000
--- a/src/tests/java/net/sf/picard/sam/MergeBamAlignmentTest.java
+++ /dev/null
@@ -1,1720 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.BamFileIoUtils;
-import net.sf.samtools.Cigar;
-import net.sf.samtools.CigarElement;
-import net.sf.samtools.CigarOperator;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriter;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMProgramRecord;
-import net.sf.samtools.SAMReadGroupRecord;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMRecordIterator;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.SAMTag;
-import net.sf.samtools.SamPairUtil;
-import net.sf.samtools.util.CloserUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Test for the MergeBamAlignment class
- *
- * @author ktibbett at broadinstitute.org
- */
-public class MergeBamAlignmentTest {
-
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/MergeBamAlignment");
-
- private static final File unmappedBam = new File("testdata/net/sf/picard/sam/unmapped.sam");
- private static final File alignedBam = new File("testdata/net/sf/picard/sam/aligned.sam");
- private static final File oneHalfAlignedBam = new File("testdata/net/sf/picard/sam/onehalfaligned.sam");
- private static final File otherHalfAlignedBam = new File("testdata/net/sf/picard/sam/otherhalfaligned.sam");
- private static final File mergingUnmappedBam = new File(TEST_DATA_DIR, "unmapped.sam");
- private static final File firstReadAlignedBam = new File(TEST_DATA_DIR, "allread1.trimmed.aligned.sam");
- private static final File secondReadAlignedBam = new File(TEST_DATA_DIR, "allread2.trimmed.aligned.sam");
- private static final File firstReadAlignedBam_firstHalf = new File(TEST_DATA_DIR, "firsthalf.read1.trimmed.aligned.sam");
- private static final File firstReadAlignedBam_secondHalf = new File(TEST_DATA_DIR, "secondhalf.read1.trimmed.aligned.sam");
- private static final File secondReadAlignedBam_firstHalf = new File(TEST_DATA_DIR, "firsthalf.read2.trimmed.aligned.sam");
- private static final File secondReadAlignedBam_secondHalf = new File(TEST_DATA_DIR, "secondhalf.read2.trimmed.aligned.sam");
- private static final File supplementalReadAlignedBam = new File(TEST_DATA_DIR, "aligned.supplement.sam");
- private static final File alignedQuerynameSortedBam =
- new File("testdata/net/sf/picard/sam/aligned_queryname_sorted.sam");
- private static final File fasta = new File("testdata/net/sf/picard/sam/merger.fasta");
- private static final String bigSequenceName = "chr7"; // The longest sequence in merger.fasta
- private static final File sequenceDict = new File("testdata/net/sf/picard/sam/merger.dict");
- private static final File badorderUnmappedBam = new File(TEST_DATA_DIR, "unmapped.badorder.sam");
- private static final File badorderAlignedBam = new File(TEST_DATA_DIR, "aligned.badorder.sam");
-
- // For EarliestFragment tests, tag placed on the alignments which are expected to be marked as primary.
- private static final String ONE_OF_THE_BEST_TAG = "YB";
-
- @Test
- public void testMergerWithSupplemental() throws Exception {
- final File outputWithSupplemental = File.createTempFile("mergeWithSupplementalTest", ".sam");
- System.out.println(outputWithSupplemental.getAbsolutePath());
- // outputWithSupplemental.deleteOnExit();
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedBam;
- merger.ALIGNED_BAM = Arrays.asList(supplementalReadAlignedBam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = outputWithSupplemental;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
-
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed");
- final SAMFileReader result = new SAMFileReader(outputWithSupplemental);
-
- final List<Integer> clipAdapterFlags = new ArrayList<Integer>(Arrays.asList(99, 2147, 147, 2195));
- final List<Integer> foundClipAdapterFlags = new ArrayList<Integer>();
-
- for (final SAMRecord sam : result) {
- if (sam.getReadName().equals("both_reads_align_clip_adapter")) {
- foundClipAdapterFlags.add(sam.getFlags());
- }
-
- // This tests that we clip both (a) when the adapter is marked in the unmapped BAM file and
- // (b) when the insert size is less than the read length
- if (sam.getReadName().equals("both_reads_align_clip_marked")) {
- Assert.assertEquals(sam.getReferenceName(), "chr7");
- if (sam.getReadNegativeStrandFlag()) {
- Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " + sam.getReadName());
- } else {
- Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " + sam.getReadName());
- }
- }
- else if (sam.getReadName().equals("both_reads_align_clip_adapter")) {
- Assert.assertEquals(sam.getReferenceName(), "chr7");
- if (!sam.getSupplementaryAlignmentFlag()) {
- if (sam.getReadNegativeStrandFlag()) Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " + sam.getReadName());
- else Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " + sam.getReadName());
- }
- }
- // This tests that we DON'T clip when we run off the end if there are equal to or more than
- // MIN_ADAPTER_BASES hanging off the end
- else if (sam.getReadName().equals("both_reads_align_min_adapter_bases_exceeded")) {
- Assert.assertEquals(sam.getReferenceName(), "chr7");
- Assert.assertTrue(!sam.getCigarString().contains("S"),
- "Read was clipped when it should not be.");
- } else if (sam.getReadName().equals("neither_read_aligns_or_present")) {
- Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should be unmapped but isn't");
- }
- // Two pairs in which only the first read should align
- else if (sam.getReadName().equals("both_reads_present_only_first_aligns") ||
- sam.getReadName().equals("read_2_too_many_gaps")) {
- if (sam.getFirstOfPairFlag()) {
- Assert.assertEquals(sam.getReferenceName(), "chr7", "Read should be mapped but isn't");
- } else {
- Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should not be mapped but is");
- }
- } else {
- throw new Exception("Unexpected read name: " + sam.getReadName());
- }
- }
-
- // Make sure that we have the appropriate primary and supplementary reads in the new file
- Assert.assertEquals(foundClipAdapterFlags.size(), clipAdapterFlags.size());
- Collections.sort(clipAdapterFlags);
- Collections.sort(foundClipAdapterFlags);
- for (int i = 0; i < clipAdapterFlags.size(); i++) {
- Assert.assertEquals(clipAdapterFlags.get(i), foundClipAdapterFlags.get(i));
- }
-
- }
-
- @Test
- public void testMerger() throws Exception {
- final File output = File.createTempFile("mergeTest", ".sam");
- output.deleteOnExit();
-
- MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedBam;
- merger.ALIGNED_BAM = Arrays.asList(alignedBam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
-
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed");
- SAMFileReader result = new SAMFileReader(output);
- Assert.assertEquals(result.getFileHeader().getSequenceDictionary().getSequences().size(), 8,
- "Number of sequences did not match");
- SAMProgramRecord pg = result.getFileHeader().getProgramRecords().get(0);
- Assert.assertEquals(pg.getProgramGroupId(), merger.PROGRAM_RECORD_ID);
- Assert.assertEquals(pg.getProgramVersion(), merger.PROGRAM_GROUP_VERSION);
- Assert.assertEquals(pg.getCommandLine(), merger.PROGRAM_GROUP_COMMAND_LINE);
- Assert.assertEquals(pg.getProgramName(), merger.PROGRAM_GROUP_NAME);
-
- final SAMReadGroupRecord rg = result.getFileHeader().getReadGroups().get(0);
- Assert.assertEquals(rg.getReadGroupId(), "0");
- Assert.assertEquals(rg.getSample(), "Hi,Mom!");
-
- Assert.assertEquals(result.getFileHeader().getSortOrder(), SAMFileHeader.SortOrder.coordinate);
-
- for (final SAMRecord sam : result) {
- // This tests that we clip both (a) when the adapter is marked in the unmapped BAM file and
- // (b) when the insert size is less than the read length
- if (sam.getReadName().equals("both_reads_align_clip_adapter") ||
- sam.getReadName().equals("both_reads_align_clip_marked")) {
- Assert.assertEquals(sam.getReferenceName(), "chr7");
- if (sam.getReadNegativeStrandFlag()) {
- Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " +
- sam.getReadName());
- } else {
- Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " +
- sam.getReadName());
- }
- }
- // This tests that we DON'T clip when we run off the end if there are equal to or more than
- // MIN_ADAPTER_BASES hanging off the end
- else if (sam.getReadName().equals("both_reads_align_min_adapter_bases_exceeded")) {
- Assert.assertEquals(sam.getReferenceName(), "chr7");
- Assert.assertTrue(sam.getCigarString().indexOf("S") == -1,
- "Read was clipped when it should not be.");
- } else if (sam.getReadName().equals("neither_read_aligns_or_present")) {
- Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should be unmapped but isn't");
- }
- // Two pairs in which only the first read should align
- else if (sam.getReadName().equals("both_reads_present_only_first_aligns") ||
- sam.getReadName().equals("read_2_too_many_gaps")) {
- if (sam.getFirstOfPairFlag()) {
- Assert.assertEquals(sam.getReferenceName(), "chr7", "Read should be mapped but isn't");
- } else {
- Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should not be mapped but is");
- }
- } else {
- throw new Exception("Unexpected read name: " + sam.getReadName());
- }
-
- }
-
- // Quick test to make sure the program record gets picked up from the file if not specified
- // on the command line.
- merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedBam;
- merger.ALIGNED_BAM = Arrays.asList(alignedBam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
-
- Assert.assertEquals(merger.doWork(), 0);
-
- result = new SAMFileReader(output);
- pg = result.getFileHeader().getProgramRecords().get(0);
- Assert.assertEquals(pg.getProgramGroupId(), "1",
- "Program group ID not picked up correctly from aligned BAM");
- Assert.assertEquals(pg.getProgramVersion(), "2.0",
- "Program version not picked up correctly from aligned BAM");
- Assert.assertNull(pg.getCommandLine(),
- "Program command line not picked up correctly from aligned BAM");
- Assert.assertEquals(pg.getProgramName(), "Hey!",
- "Program name not picked up correctly from aligned BAM");
-
- }
-
-
- @Test
- public void testMergerFromMultipleFiles() throws Exception {
- final File output = File.createTempFile("mergeTest", ".sam");
- output.deleteOnExit();
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedBam;
- merger.ALIGNED_BAM = Arrays.asList(oneHalfAlignedBam, otherHalfAlignedBam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
-
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed");
- final SAMFileReader result = new SAMFileReader(output);
-
- for (final SAMRecord sam : result) {
- // This tests that we clip both (a) when the adapter is marked in the unmapped BAM file and
- // (b) when the insert size is less than the read length
- if (sam.getReadName().equals("both_reads_align_clip_adapter") ||
- sam.getReadName().equals("both_reads_align_clip_marked")) {
- Assert.assertEquals(sam.getReferenceName(), "chr7");
- if (sam.getReadNegativeStrandFlag()) {
- Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " +
- sam.getReadName());
- } else {
- Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " +
- sam.getReadName());
- }
- }
- // This tests that we DON'T clip when we run off the end if there are equal to or more than
- // MIN_ADAPTER_BASES hanging off the end
- else if (sam.getReadName().equals("both_reads_align_min_adapter_bases_exceeded")) {
- Assert.assertEquals(sam.getReferenceName(), "chr7");
- Assert.assertTrue(sam.getCigarString().indexOf("S") == -1,
- "Read was clipped when it should not be.");
- } else if (sam.getReadName().equals("neither_read_aligns_or_present")) {
- Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should be unmapped but isn't");
- }
- // Two pairs in which only the first read should align
- else if (sam.getReadName().equals("both_reads_present_only_first_aligns") ||
- sam.getReadName().equals("read_2_too_many_gaps")) {
- if (sam.getFirstOfPairFlag()) {
- Assert.assertEquals(sam.getReferenceName(), "chr7", "Read should be mapped but isn't");
- } else {
- Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should not be mapped but is");
- }
- } else {
- throw new Exception("Unexpected read name: " + sam.getReadName());
- }
-
- }
-
- }
-
- @Test(dataProvider="data")
- public void testSortingOnSamAlignmentMerger(final File unmapped, final File aligned, final boolean sorted, final String testName)
- throws IOException {
-
- final File target = File.createTempFile("target", "bam");
- target.deleteOnExit();
- final SamAlignmentMerger merger = new SamAlignmentMerger(unmapped, target, fasta, null, true, false,
- false, Arrays.asList(aligned), 1, null, null, null, null, null, null,
- Arrays.asList(SamPairUtil.PairOrientation.FR), SAMFileHeader.SortOrder.coordinate,
- new BestMapqPrimaryAlignmentSelectionStrategy(), false);
-
- merger.mergeAlignment();
- Assert.assertEquals(sorted, !merger.getForceSort());
- final SAMRecordIterator it = new SAMFileReader(target).iterator();
- int aln = 0;
- while (it.hasNext()) {
- final SAMRecord rec = it.next();
- if (!rec.getReadUnmappedFlag()) {
- aln++;
- }
- }
- Assert.assertEquals(aln, 6, "Incorrect number of aligned reads in merged BAM file");
- }
-
- @DataProvider(name="data")
- public Object[][] getDataForSortingTest() {
- return new Object[][] {
- {unmappedBam, alignedQuerynameSortedBam, true, "Basic test with pre-sorted alignment"},
- {unmappedBam, alignedBam, false, "Basic test with unsorted alignment"}
-
- };
- }
-
- /**
- * Minimal test of merging data from separate read 1 and read 2 alignments
- */
- @Test(dataProvider="separateTrimmed")
- public void testMergingFromSeparatedReadTrimmedAlignments(final File unmapped, final List<File> r1Align, final List<File> r2Align, final int r1Trim, final int r2Trim, final String testName) throws Exception {
- final File output = File.createTempFile("mergeMultipleAlignmentsTest", ".sam");
- output.deleteOnExit();
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmapped;
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.READ1_ALIGNED_BAM = r1Align;
- merger.READ2_ALIGNED_BAM = r2Align;
- merger.READ1_TRIM = r1Trim;
- merger.READ2_TRIM = r2Trim;
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
-
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed: " + testName);
- final SAMFileReader result = new SAMFileReader(output);
- final SAMProgramRecord pg = result.getFileHeader().getProgramRecords().get(0);
-
- for (final SAMRecord sam : result) {
- // Get the alignment record
- final List<File> rFiles = sam.getFirstOfPairFlag() ? r1Align : r2Align;
- SAMRecord alignment = null;
- for (final File f : rFiles) {
- for (final SAMRecord tmp : new SAMFileReader(f)) {
- if (tmp.getReadName().equals(sam.getReadName())) {
- alignment = tmp;
- break;
- }
- }
- if (alignment != null) break;
- }
-
- final int trim = sam.getFirstOfPairFlag() ? r1Trim : r2Trim;
- final int notWrittenToFastq = sam.getReadLength() - (trim + alignment.getReadLength());
- final int beginning = sam.getReadNegativeStrandFlag() ? notWrittenToFastq : trim;
- final int end = sam.getReadNegativeStrandFlag() ? trim : notWrittenToFastq;
-
- if (!sam.getReadUnmappedFlag()) {
- final CigarElement firstMergedCigarElement = sam.getCigar().getCigarElement(0);
- final CigarElement lastMergedCigarElement = sam.getCigar().getCigarElement(sam.getCigar().getCigarElements().size() - 1);
- final CigarElement firstAlignedCigarElement = alignment.getCigar().getCigarElement(0);
- final CigarElement lastAlignedCigarElement = alignment.getCigar().getCigarElement(alignment.getCigar().getCigarElements().size() - 1);
-
- if (beginning > 0) {
- Assert.assertEquals(firstMergedCigarElement.getOperator(), CigarOperator.S, "First element is not a soft clip");
- Assert.assertEquals(firstMergedCigarElement.getLength(), beginning + ((firstAlignedCigarElement.getOperator() == CigarOperator.S) ? firstAlignedCigarElement.getLength() : 0));
- }
- if (end > 0) {
- Assert.assertEquals(lastMergedCigarElement.getOperator(), CigarOperator.S, "Last element is not a soft clip");
- Assert.assertEquals(lastMergedCigarElement.getLength(), end + ((lastAlignedCigarElement.getOperator() == CigarOperator.S) ? lastAlignedCigarElement.getLength() : 0));
- }
- }
- }
-
- }
-
- @DataProvider(name="separateTrimmed")
- public Object[][] getDataForMergingTest() {
- return new Object[][] {
- // Tests using one file for each read, queryname sorted, trimmed, not all bases written
- {mergingUnmappedBam, Arrays.asList(firstReadAlignedBam), Arrays.asList(secondReadAlignedBam), 17, 20, "one file per read"},
- // Tests using multiple files for each read, coordinate sorted, trimmed, not all bases written
- {mergingUnmappedBam, Arrays.asList(firstReadAlignedBam_firstHalf, firstReadAlignedBam_secondHalf),
- Arrays.asList(secondReadAlignedBam_firstHalf, secondReadAlignedBam_secondHalf), 17, 20, "two files per read"}
- };
- }
-
- @Test(expectedExceptions = {IllegalStateException.class, PicardException.class})
- public void testOldQuerynameSortFails() throws IOException {
-
- final File merged = File.createTempFile("merged", BamFileIoUtils.BAM_FILE_EXTENSION);
- merged.deleteOnExit();
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = badorderUnmappedBam;
- merger.ALIGNED_BAM = Arrays.asList(badorderAlignedBam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = merged;
- merger.PAIRED_RUN = true;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
- merger.doWork();
- Assert.fail("Merger should have failed because unmapped reads are not in queryname order but didn't");
- }
-
- @Test
- public void testMultiHit() throws IOException {
- final File unmappedSam = new File(TEST_DATA_DIR, "multihit.unmapped.sam");
- final File alignedSam = new File(TEST_DATA_DIR, "multihit.aligned.sam");
- final File merged = File.createTempFile("merged", ".sam");
- merged.deleteOnExit();
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedSam;
- merger.ALIGNED_BAM = Arrays.asList(alignedSam);
- merger.REFERENCE_SEQUENCE = fasta;
- merger.ALIGNED_READS_ONLY = false;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = merged;
- merger.PAIRED_RUN = true;
- merger.doWork();
-
- // Iterate over the merged output and gather some statistics
- final Map<String, AlignmentAccumulator> accumulatorMap = new HashMap<String, AlignmentAccumulator>();
-
- final SAMFileReader reader = new SAMFileReader(merged);
- for (final SAMRecord rec : reader) {
- final String readName;
- if (!rec.getReadPairedFlag()) readName = rec.getReadName();
- else if (rec.getFirstOfPairFlag()) readName = rec.getReadName() + "/1";
- else readName = rec.getReadName() + "/2";
- AlignmentAccumulator acc = accumulatorMap.get(readName);
- if (acc == null) {
- acc = new AlignmentAccumulator();
- accumulatorMap.put(readName, acc);
- }
- if (rec.getReadUnmappedFlag()) {
- Assert.assertFalse(acc.seenUnaligned, readName);
- acc.seenUnaligned = true;
- } else {
- ++acc.numAlignments;
- if (!rec.getNotPrimaryAlignmentFlag()) {
- Assert.assertNull(acc.primaryAlignmentSequence, readName);
- acc.primaryAlignmentSequence = rec.getReferenceName();
- }
- }
- }
-
- // Set up expected results
- final Map<String, AlignmentAccumulator> expectedMap = new HashMap<String, AlignmentAccumulator>();
- expectedMap.put("frag_hit", new AlignmentAccumulator(false, 1, "chr1"));
- expectedMap.put("frag_multihit", new AlignmentAccumulator(false, 3, "chr2"));
- expectedMap.put("frag_no_hit", new AlignmentAccumulator(true, 0, null));
- expectedMap.put("pair_both_hit/1", new AlignmentAccumulator(false, 1, "chr7"));
- expectedMap.put("pair_both_hit/2", new AlignmentAccumulator(false, 1, "chr7"));
- expectedMap.put("pair_both_multihit/1", new AlignmentAccumulator(false, 3, "chr8"));
- expectedMap.put("pair_both_multihit/2", new AlignmentAccumulator(false, 3, "chr8"));
- expectedMap.put("pair_first_hit/1", new AlignmentAccumulator(false, 1, "chr1"));
- expectedMap.put("pair_first_hit/2", new AlignmentAccumulator(true, 0, null));
- expectedMap.put("pair_first_multihit/1", new AlignmentAccumulator(false, 3, "chr1"));
- expectedMap.put("pair_first_multihit/2", new AlignmentAccumulator(true, 0, null));
- expectedMap.put("pair_no_hit/1", new AlignmentAccumulator(true, 0, null));
- expectedMap.put("pair_no_hit/2", new AlignmentAccumulator(true, 0, null));
- expectedMap.put("pair_second_hit/1", new AlignmentAccumulator(true, 0, null));
- expectedMap.put("pair_second_hit/2", new AlignmentAccumulator(false, 1, "chr1"));
- expectedMap.put("pair_second_multihit/1", new AlignmentAccumulator(true, 0, null));
- expectedMap.put("pair_second_multihit/2", new AlignmentAccumulator(false, 3, "chr3"));
-
- Assert.assertEquals(accumulatorMap.size(), expectedMap.size());
-
- for (final Map.Entry<String, AlignmentAccumulator> entry : expectedMap.entrySet()) {
- final AlignmentAccumulator actual = accumulatorMap.get(entry.getKey());
- Assert.assertEquals(actual, entry.getValue(), entry.getKey());
- }
-
- assertSamValid(merged);
- }
-
- private void assertSamValid(final File sam) {
- final ValidateSamFile validator = new ValidateSamFile();
- validator.INPUT = sam;
- Assert.assertEquals(validator.doWork(), 0);
- }
-
- private static class AlignmentAccumulator {
- boolean seenUnaligned = false;
- int numAlignments = 0;
- String primaryAlignmentSequence = null;
-
- private AlignmentAccumulator() {}
-
- private AlignmentAccumulator(final boolean seenUnaligned, final int numAlignments, final String primaryAlignmentSequence) {
- this.seenUnaligned = seenUnaligned;
- this.numAlignments = numAlignments;
- this.primaryAlignmentSequence = primaryAlignmentSequence;
- }
-
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- final AlignmentAccumulator that = (AlignmentAccumulator) o;
-
- if (numAlignments != that.numAlignments) return false;
- if (seenUnaligned != that.seenUnaligned) return false;
- if (primaryAlignmentSequence != null ? !primaryAlignmentSequence.equals(that.primaryAlignmentSequence) : that.primaryAlignmentSequence != null)
- return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = (seenUnaligned ? 1 : 0);
- result = 31 * result + numAlignments;
- result = 31 * result + (primaryAlignmentSequence != null ? primaryAlignmentSequence.hashCode() : 0);
- return result;
- }
-
- @Override
- public String toString() {
- return "AlignmentAccumulator{" +
- "seenUnaligned=" + seenUnaligned +
- ", numAlignments=" + numAlignments +
- ", primaryAlignmentSequence='" + primaryAlignmentSequence + '\'' +
- '}';
- }
- }
-
- /**
- * Read a single paired-end read from a file, and create one or more aligned records for the read pair based on
- * the lists, merge with the original paired-end read, and assert expected results.
- * @param description
- * @param firstOfPair List that describes the aligned SAMRecords to create for the first end.
- * @param secondOfPair List that describes the aligned SAMRecords to create for the second end.
- * @param expectedPrimaryHitIndex Expected value for the HI tag in the primary alignment in the merged output.
- * @param expectedNumFirst Expected number of first-of-pair SAMRecords in the merged output.
- * @param expectedNumSecond Expected number of second-of-pair SAMRecords in the merged output.
- * @param expectedPrimaryMapq Sum of mapqs of both ends of primary alignment in the merged output.
- * @throws Exception
- */
- @Test(dataProvider = "testPairedMultiHitWithFilteringTestCases")
- public void testPairedMultiHitWithFiltering(final String description, final List<HitSpec> firstOfPair, final List<HitSpec> secondOfPair,
- final Integer expectedPrimaryHitIndex, final int expectedNumFirst,
- final int expectedNumSecond, final int expectedPrimaryMapq) throws Exception {
-
- // Create the aligned file by copying bases, quals, readname from the unmapped read, and conforming to each HitSpec.
- final File unmappedSam = new File(TEST_DATA_DIR, "multihit.filter.unmapped.sam");
- final SAMRecordIterator unmappedSamFileIterator = new SAMFileReader(unmappedSam).iterator();
- final SAMRecord firstUnmappedRec = unmappedSamFileIterator.next();
- final SAMRecord secondUnmappedRec = unmappedSamFileIterator.next();
- unmappedSamFileIterator.close();
- final File alignedSam = File.createTempFile("aligned.", ".sam");
- alignedSam.deleteOnExit();
- final SAMFileHeader alignedHeader = new SAMFileHeader();
- alignedHeader.setSortOrder(SAMFileHeader.SortOrder.queryname);
- alignedHeader.setSequenceDictionary(new SAMFileReader(sequenceDict).getFileHeader().getSequenceDictionary());
- final SAMFileWriter alignedWriter = new SAMFileWriterFactory().makeSAMWriter(alignedHeader, true, alignedSam);
- for (int i = 0; i < Math.max(firstOfPair.size(), secondOfPair.size()); ++i) {
- final HitSpec firstHitSpec = firstOfPair.isEmpty()? null: firstOfPair.get(i);
- final HitSpec secondHitSpec = secondOfPair.isEmpty()? null: secondOfPair.get(i);
- final SAMRecord first = makeRead(alignedHeader, firstUnmappedRec, firstHitSpec, true, i);
- final SAMRecord second = makeRead(alignedHeader, secondUnmappedRec, secondHitSpec, false, i);
- if (first != null && second != null) SamPairUtil.setMateInfo(first, second, alignedHeader);
- if (first != null) {
- if (second == null) first.setMateUnmappedFlag(true);
- alignedWriter.addAlignment(first);
- }
- if (second != null) {
- if (first == null) second.setMateUnmappedFlag(true);
- alignedWriter.addAlignment(second);
- }
- }
- alignedWriter.close();
-
- // Merge aligned file with original unmapped file.
- final File mergedSam = File.createTempFile("merged.", ".sam");
- mergedSam.deleteOnExit();
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedSam;
- merger.ALIGNED_BAM = Arrays.asList(alignedSam);
- merger.REFERENCE_SEQUENCE = fasta;
- merger.ALIGNED_READS_ONLY = false;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = mergedSam;
- merger.PAIRED_RUN = true;
- merger.doWork();
-
- assertSamValid(mergedSam);
-
- // Tally metrics and check for agreement with expected.
- final SAMFileReader mergedReader = new SAMFileReader(mergedSam);
- int numFirst = 0;
- int numSecond = 0;
- Integer primaryHitIndex = null;
- int primaryMapq = 0;
- for (final SAMRecord rec : mergedReader) {
- if (rec.getFirstOfPairFlag()) ++numFirst;
- if (rec.getSecondOfPairFlag()) ++numSecond;
- if (!rec.getNotPrimaryAlignmentFlag() && !rec.getReadUnmappedFlag()) {
- final Integer hitIndex = rec.getIntegerAttribute(SAMTag.HI.name());
- final int newHitIndex = (hitIndex == null? -1: hitIndex);
- if (primaryHitIndex == null) primaryHitIndex = newHitIndex;
- else Assert.assertEquals(newHitIndex, primaryHitIndex.intValue());
- primaryMapq += rec.getMappingQuality();
- }
- }
- Assert.assertEquals(numFirst, expectedNumFirst);
- Assert.assertEquals(numSecond, expectedNumSecond);
- Assert.assertEquals(primaryHitIndex, expectedPrimaryHitIndex);
- Assert.assertEquals(primaryMapq, expectedPrimaryMapq);
- }
-
- private SAMRecord makeRead(final SAMFileHeader alignedHeader, final SAMRecord unmappedRec, final HitSpec hitSpec,
- final boolean firstOfPair, final int hitIndex) {
- if (hitSpec == null) return null;
- final SAMRecord rec = makeRead(alignedHeader, unmappedRec, hitSpec, hitIndex);
- rec.setReadPairedFlag(true);
- if (firstOfPair) {
- rec.setFirstOfPairFlag(true);
- rec.setAlignmentStart(hitIndex + 1);
- } else {
- rec.setSecondOfPairFlag(true);
- rec.setAlignmentStart(hitIndex + 201);
- }
- return rec;
- }
-
- private SAMRecord makeRead(final SAMFileHeader alignedHeader, final SAMRecord unmappedRec, final HitSpec hitSpec, final int hitIndex) {
- final SAMRecord rec = new SAMRecord(alignedHeader);
- rec.setReadName(unmappedRec.getReadName());
- rec.setReadBases(unmappedRec.getReadBases());
- rec.setBaseQualities(unmappedRec.getBaseQualities());
- rec.setMappingQuality(hitSpec.mapq);
- if (!hitSpec.primary) rec.setNotPrimaryAlignmentFlag(true);
- final Cigar cigar = new Cigar();
- final int readLength = rec.getReadLength();
- if (hitSpec.filtered) {
- // Add two insertions so alignment is filtered.
- cigar.add(new CigarElement(readLength-4, CigarOperator.M));
- cigar.add(new CigarElement(1, CigarOperator.I));
- cigar.add(new CigarElement(1, CigarOperator.M));
- cigar.add(new CigarElement(1, CigarOperator.I));
- cigar.add(new CigarElement(1, CigarOperator.M));
- } else {
- cigar.add(new CigarElement(readLength, CigarOperator.M));
- }
- rec.setCigar(cigar);
-
- rec.setReferenceName(bigSequenceName);
- rec.setAttribute(SAMTag.HI.name(), hitIndex);
- rec.setAlignmentStart(hitIndex + 1);
-
- return rec;
- }
-
- class HitSpec {
- final boolean primary;
- final boolean filtered;
- final int mapq;
-
- HitSpec(final boolean primary, final boolean filtered, final int mapq) {
- this.primary = primary;
- this.filtered = filtered;
- this.mapq = mapq;
- }
- }
-
- @DataProvider(name="testPairedMultiHitWithFilteringTestCases")
- public Object[][] testPairedMultiHitWithFilteringTestCases() {
- final ArrayList<Object[]> ret = new ArrayList<Object[]>();
- List<HitSpec> firstOfPair;
- List<HitSpec> secondOfPair;
-
- // One end aligned test cases...
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = Collections.emptyList();
- firstOfPair.add(new HitSpec(false, true, 10));
- firstOfPair.add(new HitSpec(true, true, 10));
- firstOfPair.add(new HitSpec(false, false, 9));
- ret.add(new Object[]{"Only 1st end has alignments, primary alignment is filtered, one 2ndary is filtered", firstOfPair, secondOfPair, -1, 1, 1, 9});
-
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair = Collections.emptyList();
- secondOfPair.add(new HitSpec(false, false, 11));
- secondOfPair.add(new HitSpec(true, true, 10));
- secondOfPair.add(new HitSpec(false, true, 9));
- ret.add(new Object[]{"Only 2nd end has alignments, primary alignment is filtered, one 2ndary is filtered", firstOfPair, secondOfPair, -1, 1, 1, 11});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = Collections.emptyList();
- firstOfPair.add(new HitSpec(false, true, 10));
- firstOfPair.add(new HitSpec(true, true, 10));
- firstOfPair.add(new HitSpec(false, true, 9));
- ret.add(new Object[]{"Only 1st end has alignments, all are filtered", firstOfPair, secondOfPair, null, 1, 1, 0});
-
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair = Collections.emptyList();
- secondOfPair.add(new HitSpec(false, true, 10));
- secondOfPair.add(new HitSpec(true, true, 10));
- secondOfPair.add(new HitSpec(false, true, 9));
- ret.add(new Object[]{"Only 2nd end has alignments, all are filtered", firstOfPair, secondOfPair, null, 1, 1, 0});
-
- // Both ends aligned test cases...
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, false, 10));
- firstOfPair.add(new HitSpec(true, true, 10));
- firstOfPair.add(new HitSpec(false, false, 9));
- secondOfPair.add(new HitSpec(false, false, 11));
- secondOfPair.add(new HitSpec(true, false, 30));
- secondOfPair.add(new HitSpec(false, false, 9));
- ret.add(new Object[]{"Both ends aligned, one end of primary filtered", firstOfPair, secondOfPair, -1, 3, 3, 30});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, false, 10));
- firstOfPair.add(new HitSpec(true, true, 10));
- firstOfPair.add(new HitSpec(false, true, 9));
- secondOfPair.add(new HitSpec(false, false, 11));
- secondOfPair.add(new HitSpec(true, false, 30));
- secondOfPair.add(new HitSpec(false, false, 9));
- ret.add(new Object[]{"Both ends aligned, one end of primary filtered, one end of secondary filtered", firstOfPair, secondOfPair, -1, 2, 3, 30});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, false, 9));
- firstOfPair.add(new HitSpec(true, true, 10));
- firstOfPair.add(new HitSpec(false, false, 10));
- secondOfPair.add(new HitSpec(false, false, 9));
- secondOfPair.add(new HitSpec(true, true, 30));
- secondOfPair.add(new HitSpec(false, false, 11));
- ret.add(new Object[]{"Both ends aligned, both ends of primary filtered", firstOfPair, secondOfPair, 1, 2, 2, 21});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, false, 9));
- firstOfPair.add(new HitSpec(true, true, 10));
- firstOfPair.add(new HitSpec(false, false, 10));
- secondOfPair.add(new HitSpec(false, false, 12));
- secondOfPair.add(new HitSpec(true, true, 30));
- secondOfPair.add(new HitSpec(false, false, 11));
- ret.add(new Object[]{"Both ends aligned, both ends of primary filtered, two secondary alignments with identical mapq",
- firstOfPair, secondOfPair, 1, 2, 2, 21});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, true, 9));
- firstOfPair.add(new HitSpec(true, true, 10));
- firstOfPair.add(new HitSpec(false, false, 10));
- secondOfPair.add(new HitSpec(false, false, 30));
- secondOfPair.add(new HitSpec(true, true, 30));
- secondOfPair.add(new HitSpec(false, false, 11));
- ret.add(new Object[]{"Both ends aligned, both ends of primary filtered, one end of secondary filtered, but with high mapq",
- firstOfPair, secondOfPair, -1, 2, 2, 30});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, true, 9));
- firstOfPair.add(new HitSpec(false, false, 10));
- firstOfPair.add(new HitSpec(true, false, 10));
- secondOfPair.add(new HitSpec(false, true, 30));
- secondOfPair.add(new HitSpec(false, false, 11));
- secondOfPair.add(new HitSpec(true, false, 30));
- ret.add(new Object[]{"Both ends aligned, secondary filtered on both ends", firstOfPair, secondOfPair, 1, 2, 2, 40});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, false, 9));
- firstOfPair.add(new HitSpec(false, false, 10));
- firstOfPair.add(new HitSpec(true, false, 10));
- secondOfPair.add(new HitSpec(false, true, 30));
- secondOfPair.add(new HitSpec(false, false, 11));
- secondOfPair.add(new HitSpec(true, false, 30));
- ret.add(new Object[]{"Both ends aligned, secondary filtered on second end", firstOfPair, secondOfPair, 2, 3, 2, 40});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, false, 9));
- firstOfPair.add(new HitSpec(false, true, 10));
- firstOfPair.add(new HitSpec(true, false, 10));
- secondOfPair.add(new HitSpec(false, false, 30));
- secondOfPair.add(new HitSpec(false, false, 11));
- secondOfPair.add(new HitSpec(true, false, 30));
- ret.add(new Object[]{"Both ends aligned, secondary filtered on first end", firstOfPair, secondOfPair, 2, 2, 3, 40});
-
- firstOfPair = new ArrayList<HitSpec>();
- secondOfPair = new ArrayList<HitSpec>();
- firstOfPair.add(new HitSpec(false, true, 9));
- firstOfPair.add(new HitSpec(false, true, 10));
- firstOfPair.add(new HitSpec(true, true, 10));
- secondOfPair.add(new HitSpec(false, true, 30));
- secondOfPair.add(new HitSpec(false, true, 11));
- secondOfPair.add(new HitSpec(true, true, 30));
- ret.add(new Object[]{"Both ends aligned, all filtered", firstOfPair, secondOfPair, null, 1, 1, 0});
-
- return ret.toArray(new Object[0][]);
- }
-
-
-
-
- /**
- * Read a single fragment read from a file, and create one or more aligned records for the read pair based on
- * the lists, merge with the original read, and assert expected results.
- * @param description
- * @param hitSpecs List that describes the aligned SAMRecords to create.
- * @param expectedPrimaryHitIndex Expected value for the HI tag in the primary alignment in the merged output.
- * @param expectedNumReads Expected number of SAMRecords in the merged output.
- * @param expectedPrimaryMapq Mapq of both ends of primary alignment in the merged output.
- * @throws Exception
- */
- @Test(dataProvider = "testFragmentMultiHitWithFilteringTestCases")
- public void testFragmentMultiHitWithFiltering(final String description, final List<HitSpec> hitSpecs,
- final Integer expectedPrimaryHitIndex, final int expectedNumReads,
- final int expectedPrimaryMapq) throws Exception {
-
- // Create the aligned file by copying bases, quals, readname from the unmapped read, and conforming to each HitSpec.
- final File unmappedSam = new File(TEST_DATA_DIR, "multihit.filter.fragment.unmapped.sam");
- final SAMRecordIterator unmappedSamFileIterator = new SAMFileReader(unmappedSam).iterator();
- final SAMRecord unmappedRec = unmappedSamFileIterator.next();
- unmappedSamFileIterator.close();
- final File alignedSam = File.createTempFile("aligned.", ".sam");
- alignedSam.deleteOnExit();
- final SAMFileHeader alignedHeader = new SAMFileHeader();
- alignedHeader.setSortOrder(SAMFileHeader.SortOrder.queryname);
- alignedHeader.setSequenceDictionary(new SAMFileReader(sequenceDict).getFileHeader().getSequenceDictionary());
- final SAMFileWriter alignedWriter = new SAMFileWriterFactory().makeSAMWriter(alignedHeader, true, alignedSam);
- for (int i = 0; i < hitSpecs.size(); ++i) {
- final HitSpec hitSpec = hitSpecs.get(i);
- final SAMRecord mappedRec = makeRead(alignedHeader, unmappedRec, hitSpec, i);
- if (mappedRec != null) {
- alignedWriter.addAlignment(mappedRec);
- }
- }
- alignedWriter.close();
-
- // Merge aligned file with original unmapped file.
- final File mergedSam = File.createTempFile("merged.", ".sam");
- mergedSam.deleteOnExit();
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedSam;
- merger.ALIGNED_BAM = Arrays.asList(alignedSam);
- merger.REFERENCE_SEQUENCE = fasta;
- merger.ALIGNED_READS_ONLY = false;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = mergedSam;
- merger.PAIRED_RUN = false;
- merger.doWork();
-
- assertSamValid(mergedSam);
-
- // Tally metrics and check for agreement with expected.
- final SAMFileReader mergedReader = new SAMFileReader(mergedSam);
- int numReads = 0;
- Integer primaryHitIndex = null;
- int primaryMapq = 0;
- for (final SAMRecord rec : mergedReader) {
- ++numReads;
- if (!rec.getNotPrimaryAlignmentFlag() && !rec.getReadUnmappedFlag()) {
- final Integer hitIndex = rec.getIntegerAttribute(SAMTag.HI.name());
- final int newHitIndex = (hitIndex == null? -1: hitIndex);
- Assert.assertNull(primaryHitIndex);
- primaryHitIndex = newHitIndex;
- primaryMapq = rec.getMappingQuality();
- }
- }
- Assert.assertEquals(numReads, expectedNumReads);
- Assert.assertEquals(primaryHitIndex, expectedPrimaryHitIndex);
- Assert.assertEquals(primaryMapq, expectedPrimaryMapq);
- }
-
- @DataProvider(name="testFragmentMultiHitWithFilteringTestCases")
- public Object[][] testFragmentMultiHitWithFilteringTestCases() {
- final ArrayList<Object[]> ret = new ArrayList<Object[]>();
- List<HitSpec> hitSpecs;
-
- hitSpecs = new ArrayList<HitSpec>();
- hitSpecs.add(new HitSpec(false, true, 10));
- hitSpecs.add(new HitSpec(true, false, 8));
- hitSpecs.add(new HitSpec(false, false, 9));
- ret.add(new Object[]{"One secondary filtered", hitSpecs, -1, 2, 8});
-
- hitSpecs = new ArrayList<HitSpec>();
- hitSpecs.add(new HitSpec(false, false, 10));
- hitSpecs.add(new HitSpec(true, true, 8));
- hitSpecs.add(new HitSpec(false, false, 11));
- ret.add(new Object[]{"Primary filtered", hitSpecs, -1, 2, 11});
-
- hitSpecs = new ArrayList<HitSpec>();
- hitSpecs.add(new HitSpec(false, false, 11));
- hitSpecs.add(new HitSpec(true, true, 8));
- hitSpecs.add(new HitSpec(false, false, 11));
- ret.add(new Object[]{"Primary filtered, two secondaries with identical mapq", hitSpecs, -1, 2, 11});
-
- hitSpecs = new ArrayList<HitSpec>();
- hitSpecs.add(new HitSpec(false, true, 10));
- hitSpecs.add(new HitSpec(true, true, 8));
- hitSpecs.add(new HitSpec(false, false, 9));
- ret.add(new Object[]{"Primary and one secondary filtered", hitSpecs, -1, 1, 9});
-
- hitSpecs = new ArrayList<HitSpec>();
- hitSpecs.add(new HitSpec(false, true, 10));
- hitSpecs.add(new HitSpec(true, true, 8));
- hitSpecs.add(new HitSpec(false, true, 9));
- ret.add(new Object[]{"All filtered", hitSpecs, null, 1, 0});
-
- return ret.toArray(new Object[0][]);
- }
-
- /**
- * Confirm that paired reads are rejected by PrimaryAlignmentStrategy.EarliestFragment.
- */
- @Test(expectedExceptions = UnsupportedOperationException.class)
- public void testEarliestFragmentStrategyPaired() throws Exception {
- final File output = File.createTempFile("mergeTest", ".sam");
- output.deleteOnExit();
-
- final File unmappedSam = File.createTempFile("unmapped.", ".sam");
- unmappedSam.deleteOnExit();
- final SAMFileWriterFactory factory = new SAMFileWriterFactory();
- final SAMFileHeader header = new SAMFileHeader();
- header.setSortOrder(SAMFileHeader.SortOrder.queryname);
- final String cigar = "16M";
-
- final SAMRecord firstOfPair = new SAMRecord(header);
- firstOfPair.setReadName("theRead");
- firstOfPair.setReadString("ACGTACGTACGTACGT");
- firstOfPair.setBaseQualityString("5555555555555555");
- firstOfPair.setReadUnmappedFlag(true);
- firstOfPair.setReadPairedFlag(true);
- firstOfPair.setFirstOfPairFlag(true);
-
- final SAMRecord secondOfPair = new SAMRecord(header);
- secondOfPair.setReadName("theRead");
- secondOfPair.setReadString("ACGTACGTACGTACGT");
- secondOfPair.setBaseQualityString("5555555555555555");
- secondOfPair.setReadUnmappedFlag(true);
- secondOfPair.setReadPairedFlag(true);
- secondOfPair.setSecondOfPairFlag(true);
- SamPairUtil.setMateInfo(firstOfPair, secondOfPair, header);
-
- final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
- unmappedWriter.addAlignment(firstOfPair);
- unmappedWriter.addAlignment(secondOfPair);
- unmappedWriter.close();
-
- final File alignedSam = File.createTempFile("aligned.", ".sam");
- alignedSam.deleteOnExit();
-
- // Populate the header with SAMSequenceRecords
- header.getSequenceDictionary().addSequence(new SAMSequenceRecord("chr1", 1000000));
-
- // Create 2 alignments for each end of pair
- final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
- for (int i = 1; i <= 2; ++i) {
- final SAMRecord firstOfPairAligned = new SAMRecord(header);
- firstOfPairAligned.setReadName(firstOfPair.getReadName());
- firstOfPairAligned.setReadBases(firstOfPair.getReadBases());
- firstOfPairAligned.setBaseQualities(firstOfPair.getBaseQualities());
- firstOfPairAligned.setReferenceName("chr1");
- firstOfPairAligned.setAlignmentStart(i);
- firstOfPairAligned.setCigarString(cigar);
- firstOfPairAligned.setMappingQuality(100);
- firstOfPairAligned.setReadPairedFlag(true);
- firstOfPairAligned.setFirstOfPairFlag(true);
- firstOfPairAligned.setAttribute(SAMTag.HI.name(), i);
-
- final SAMRecord secondOfPairAligned = new SAMRecord(header);
- secondOfPairAligned.setReadName(secondOfPair.getReadName());
- secondOfPairAligned.setReadBases(secondOfPair.getReadBases());
- secondOfPairAligned.setBaseQualities(secondOfPair.getBaseQualities());
- secondOfPairAligned.setReferenceName("chr1");
- secondOfPairAligned.setAlignmentStart(i + 10);
- secondOfPairAligned.setCigarString(cigar);
- secondOfPairAligned.setMappingQuality(100);
- secondOfPairAligned.setReadPairedFlag(true);
- secondOfPairAligned.setSecondOfPairFlag(true);
- secondOfPairAligned.setAttribute(SAMTag.HI.name(), i);
-
- SamPairUtil.setMateInfo(firstOfPairAligned, secondOfPairAligned, header);
-
- alignedWriter.addAlignment(firstOfPairAligned);
- alignedWriter.addAlignment(secondOfPairAligned);
- }
- alignedWriter.close();
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedSam;
- merger.ALIGNED_BAM = Arrays.asList(alignedSam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
- merger.PRIMARY_ALIGNMENT_STRATEGY= MergeBamAlignment.PrimaryAlignmentStrategy.EarliestFragment;
- merger.doWork();
- Assert.fail("Exception was not thrown");
- }
-
- /**
- * Various scenarios for EarliestFragmentStrategy. Confirms that one of the expected ones is selected.
- * Note that there may be an arbitrary selection due to a tie.
- */
- @Test(dataProvider = "testEarliestFragmentStrategyDataProvider")
- public void testEarliestFragmentStrategy(final String testName, final MultipleAlignmentSpec[] specs) throws IOException {
-
- final File output = File.createTempFile(testName, ".sam");
- output.deleteOnExit();
- final File[] sams = createSamFilesToBeMerged(specs);
-
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = sams[0];
- merger.ALIGNED_BAM = Arrays.asList(sams[1]);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
- merger.PRIMARY_ALIGNMENT_STRATEGY= MergeBamAlignment.PrimaryAlignmentStrategy.EarliestFragment;
- merger.ATTRIBUTES_TO_RETAIN.add(ONE_OF_THE_BEST_TAG);
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed");
-
- final SAMFileReader mergedReader = new SAMFileReader(output);
- boolean seenPrimary = false;
- for (final SAMRecord rec : mergedReader) {
- if (!rec.getNotPrimaryAlignmentFlag()) {
- seenPrimary = true;
- final Integer oneOfTheBest = rec.getIntegerAttribute(ONE_OF_THE_BEST_TAG);
- Assert.assertEquals(oneOfTheBest, new Integer(1), "Read not marked as one of the best is primary: " + rec);
- }
- }
- CloserUtil.close(mergedReader);
- Assert.assertTrue(seenPrimary, "Never saw primary alignment");
- }
-
- @DataProvider(name = "testEarliestFragmentStrategyDataProvider")
- public Object[][] testEarliestFragmentStrategyDataProvider() {
- return new Object[][] {
- {"simpleForward", new MultipleAlignmentSpec[]{new MultipleAlignmentSpec("16M", false, 200, true)}},
- {"simpleReverse", new MultipleAlignmentSpec[]{new MultipleAlignmentSpec("16M", true, 200, true)}},
- {"2 forward one earlier", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("1S15M", false, 200, false),
- new MultipleAlignmentSpec("16M", false, 195, true)}},
- {"forward earlier than reverse", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("16M", false, 200, true),
- new MultipleAlignmentSpec("15M1S", true, 195, false)}},
- {"reverse earlier than forward", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("2S14M", false, 200, false),
- new MultipleAlignmentSpec("15M1S", true, 200, true)}},
- {"tie resolved via MAPQ", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("1S15M", false, 200, false),
- new MultipleAlignmentSpec("1S13M1S", false, 205, true),
- new MultipleAlignmentSpec("15M1S", true, 200, false),
- new MultipleAlignmentSpec("14M2S", true, 195, false)}},
- {"tie with same MAPQ resolved arbitrarily", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("1S15M", false, 200, false),
- new MultipleAlignmentSpec("1S13M1S", false, 205, true),
- new MultipleAlignmentSpec("15M1S", true, 205, true),
- new MultipleAlignmentSpec("14M2S", true, 195, false)}},
- {"one cigar with deletion and higher MAPQ", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("16M", false, 200, false),
- new MultipleAlignmentSpec("1D16M", false, 205, true)}},
- {"one cigar with deletion and lower MAPQ", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("16M", false, 205, true),
- new MultipleAlignmentSpec("1D16M", false, 200, false)}},
- {"Insertion makes alignment later", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("16M", false, 200, true),
- new MultipleAlignmentSpec("1I15M", false, 205, false)}},
- {"one cigar with deletion and higher MAPQ -- reverse", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("16M", true, 200, false),
- new MultipleAlignmentSpec("16M1D", true, 205, true)}},
- {"one cigar with deletion and lower MAPQ -- reverse", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("16M", true, 205, true),
- new MultipleAlignmentSpec("16M1D", true, 200, false)}},
- {"Insertion makes alignment later -- reverse", new MultipleAlignmentSpec[]{
- new MultipleAlignmentSpec("16M", true, 200, true),
- new MultipleAlignmentSpec("15M1I", true, 205, false)}}
- };
- }
-
- /**
- * @return a 2-element array in which the first element is the unmapped SAM, and the second the mapped SAM.
- */
- private File[] createSamFilesToBeMerged(final MultipleAlignmentSpec[] specs) {
- try {
- final File unmappedSam = File.createTempFile("unmapped.", ".sam");
- unmappedSam.deleteOnExit();
- final SAMFileWriterFactory factory = new SAMFileWriterFactory();
- final SAMFileHeader header = new SAMFileHeader();
- header.setSortOrder(SAMFileHeader.SortOrder.queryname);
- final SAMRecord unmappedRecord = new SAMRecord(header);
-
- unmappedRecord.setReadName("theRead");
- unmappedRecord.setReadString("ACGTACGTACGTACGT");
- unmappedRecord.setBaseQualityString("5555555555555555");
- unmappedRecord.setReadUnmappedFlag(true);
-
- final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
- unmappedWriter.addAlignment(unmappedRecord);
- unmappedWriter.close();
-
- final File alignedSam = File.createTempFile("aligned.", ".sam");
- alignedSam.deleteOnExit();
-
- final String sequence = "chr1";
- // Populate the header with SAMSequenceRecords
- header.getSequenceDictionary().addSequence(new SAMSequenceRecord(sequence, 1000000));
-
- final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
- for (final MultipleAlignmentSpec spec : specs) {
- final SAMRecord alignedRecord = new SAMRecord(header);
- alignedRecord.setReadName(unmappedRecord.getReadName());
- alignedRecord.setReadBases(unmappedRecord.getReadBases());
- alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities());
- alignedRecord.setReferenceName(sequence);
- alignedRecord.setAlignmentStart(1);
- alignedRecord.setReadNegativeStrandFlag(spec.reverseStrand);
- alignedRecord.setCigarString(spec.cigar);
- alignedRecord.setMappingQuality(spec.mapQ);
- if (spec.oneOfTheBest) {
- alignedRecord.setAttribute(ONE_OF_THE_BEST_TAG, 1);
- }
- alignedWriter.addAlignment(alignedRecord);
- }
- alignedWriter.close();
-
- return new File[]{unmappedSam, alignedSam};
- } catch (IOException e) {
- throw new PicardException(e.getMessage(), e);
- }
- }
-
- class MultipleAlignmentSpec {
- final String cigar;
- final boolean reverseStrand;
- final int mapQ;
- final boolean oneOfTheBest;
-
- MultipleAlignmentSpec(final String cigar, final boolean reverseStrand, final int mapQ, final boolean oneOfTheBest) {
- this.cigar = cigar;
- this.reverseStrand = reverseStrand;
- this.mapQ = mapQ;
- this.oneOfTheBest = oneOfTheBest;
- }
- }
-
- /**
- * Test that clipping of FR reads for fragments shorter than read length happens only when it should.
- */
- @Test
- public void testShortFragmentClipping() throws Exception {
- final File output = File.createTempFile("testShortFragmentClipping", ".sam");
- output.deleteOnExit();
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = new File(TEST_DATA_DIR, "cliptest.unmapped.sam");
- merger.ALIGNED_BAM = Arrays.asList(new File(TEST_DATA_DIR, "cliptest.aligned.sam"));
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = new File(TEST_DATA_DIR, "cliptest.fasta");
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
-
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed");
- final SAMFileReader result = new SAMFileReader(output);
- final Map<String, SAMRecord> firstReadEncountered = new HashMap<String, SAMRecord>();
-
- for (final SAMRecord rec : result) {
- final SAMRecord otherEnd = firstReadEncountered.get(rec.getReadName());
- if (otherEnd == null) {
- firstReadEncountered.put(rec.getReadName(), rec);
- } else {
- final int fragmentStart = Math.min(rec.getAlignmentStart(), otherEnd.getAlignmentStart());
- final int fragmentEnd = Math.max(rec.getAlignmentEnd(), otherEnd.getAlignmentEnd());
- final String[] readNameFields = rec.getReadName().split(":");
- // Read name of each pair includes the expected fragment start and fragment end positions.
- final int expectedFragmentStart = Integer.parseInt(readNameFields[1]);
- final int expectedFragmentEnd = Integer.parseInt(readNameFields[2]);
- Assert.assertEquals(fragmentStart, expectedFragmentStart, rec.getReadName());
- Assert.assertEquals(fragmentEnd, expectedFragmentEnd, rec.getReadName());
- }
- }
- result.close();
- }
-
- @Test(dataProvider="testBestFragmentMapqStrategy")
- public void testBestFragmentMapqStrategy(final String testName, final int[] firstMapQs, final int[] secondMapQs,
- final int expectedFirstMapq, final int expectedSecondMapq) throws Exception {
- testBestFragmentMapqStrategy(testName + "includeSecondary", firstMapQs, secondMapQs, true, expectedFirstMapq,
- expectedSecondMapq);
- testBestFragmentMapqStrategy(testName + "excludeSecondary", firstMapQs, secondMapQs, false, expectedFirstMapq,
- expectedSecondMapq);
- }
-
- private void testBestFragmentMapqStrategy(final String testName, final int[] firstMapQs, final int[] secondMapQs,
- final boolean includeSecondary, final int expectedFirstMapq,
- final int expectedSecondMapq) throws Exception {
- final File unmappedSam = File.createTempFile("unmapped.", ".sam");
- unmappedSam.deleteOnExit();
- final SAMFileWriterFactory factory = new SAMFileWriterFactory();
- final SAMFileHeader header = new SAMFileHeader();
- header.setSortOrder(SAMFileHeader.SortOrder.queryname);
-
- final String readName = "theRead";
- final SAMRecord firstUnmappedRead = new SAMRecord(header);
- firstUnmappedRead.setReadName(readName);
- firstUnmappedRead.setReadString("ACGTACGTACGTACGT");
- firstUnmappedRead.setBaseQualityString("5555555555555555");
- firstUnmappedRead.setReadUnmappedFlag(true);
- firstUnmappedRead.setMateUnmappedFlag(true);
- firstUnmappedRead.setReadPairedFlag(true);
- firstUnmappedRead.setFirstOfPairFlag(true);
-
- final SAMRecord secondUnmappedRead = new SAMRecord(header);
- secondUnmappedRead.setReadName(readName);
- secondUnmappedRead.setReadString("TCGAACGTTCGAACTG");
- secondUnmappedRead.setBaseQualityString("6666666666666666");
- secondUnmappedRead.setReadUnmappedFlag(true);
- secondUnmappedRead.setMateUnmappedFlag(true);
- secondUnmappedRead.setReadPairedFlag(true);
- secondUnmappedRead.setSecondOfPairFlag(true);
-
-
-
- final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
- unmappedWriter.addAlignment(firstUnmappedRead);
- unmappedWriter.addAlignment(secondUnmappedRead);
- unmappedWriter.close();
-
- final File alignedSam = File.createTempFile("aligned.", ".sam");
- alignedSam.deleteOnExit();
-
- final String sequence = "chr1";
- // Populate the header with SAMSequenceRecords
- header.getSequenceDictionary().addSequence(new SAMSequenceRecord(sequence, 1000000));
-
- final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
-
- addAlignmentsForBestFragmentMapqStrategy(alignedWriter, firstUnmappedRead, sequence, firstMapQs);
- addAlignmentsForBestFragmentMapqStrategy(alignedWriter, secondUnmappedRead, sequence, secondMapQs);
- alignedWriter.close();
-
-
- final File output = File.createTempFile("testBestFragmentMapqStrategy." + testName, ".sam");
- output.deleteOnExit();
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedSam;
- merger.ALIGNED_BAM = Arrays.asList(alignedSam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = new File(TEST_DATA_DIR, "cliptest.fasta");
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
- merger.PRIMARY_ALIGNMENT_STRATEGY = MergeBamAlignment.PrimaryAlignmentStrategy.BestEndMapq;
- merger.INCLUDE_SECONDARY_ALIGNMENTS = includeSecondary;
-
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed");
- final SAMFileReader reader = new SAMFileReader(output);
-
- int numFirstRecords = 0;
- int numSecondRecords = 0;
- int firstPrimaryMapq = -1;
- int secondPrimaryMapq = -1;
- for (final SAMRecord rec: reader) {
- Assert.assertTrue(rec.getReadPairedFlag());
- if (rec.getFirstOfPairFlag()) ++numFirstRecords;
- else if (rec.getSecondOfPairFlag()) ++ numSecondRecords;
- else Assert.fail("unpossible!");
- if (!rec.getReadUnmappedFlag() && !rec.getNotPrimaryAlignmentFlag()) {
- if (rec.getFirstOfPairFlag()) {
- Assert.assertEquals(firstPrimaryMapq, -1);
- firstPrimaryMapq = rec.getMappingQuality();
- } else {
- Assert.assertEquals(secondPrimaryMapq, -1);
- secondPrimaryMapq = rec.getMappingQuality();
- }
- } else if (rec.getNotPrimaryAlignmentFlag()) {
- Assert.assertTrue(rec.getMateUnmappedFlag());
- }
- }
- reader.close();
- Assert.assertEquals(firstPrimaryMapq, expectedFirstMapq);
- Assert.assertEquals(secondPrimaryMapq, expectedSecondMapq);
- if (!includeSecondary) {
- Assert.assertEquals(numFirstRecords, 1);
- Assert.assertEquals(numSecondRecords, 1);
- } else {
- // If no alignments for an end, there will be a single unmapped record
- Assert.assertEquals(numFirstRecords, Math.max(1, firstMapQs.length));
- Assert.assertEquals(numSecondRecords, Math.max(1, secondMapQs.length));
- }
- }
-
- private void addAlignmentsForBestFragmentMapqStrategy(
- final SAMFileWriter writer, final SAMRecord unmappedRecord, final String sequence, final int[] mapqs) {
- boolean reverse = false;
- int alignmentStart = 1;
- for (final int mapq : mapqs) {
- final SAMRecord alignedRecord = new SAMRecord(writer.getFileHeader());
- alignedRecord.setReadName(unmappedRecord.getReadName());
- alignedRecord.setReadBases(unmappedRecord.getReadBases());
- alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities());
- alignedRecord.setReferenceName(sequence);
- alignedRecord.setAlignmentStart(alignmentStart);
- alignmentStart += 10; // Any old position will do
- alignedRecord.setReadNegativeStrandFlag(reverse);
- reverse = !reverse;
- alignedRecord.setCigarString(unmappedRecord.getReadBases().length + "M");
- alignedRecord.setMappingQuality(mapq);
- alignedRecord.setReadPairedFlag(unmappedRecord.getReadPairedFlag());
- alignedRecord.setFirstOfPairFlag(unmappedRecord.getFirstOfPairFlag());
- alignedRecord.setSecondOfPairFlag(unmappedRecord.getSecondOfPairFlag());
- alignedRecord.setMateUnmappedFlag(true);
- writer.addAlignment(alignedRecord);
- }
- }
-
-
- @DataProvider(name="testBestFragmentMapqStrategy")
- public Object[][] testBestFragmentMapqStrategyDataProvider() {
- /**
- *
- * @param testName
- * @param firstMapQs
- * @param secondMapQs
- * @param expectedFirstMapq
- * @param expectedSecondMapq
- */
- return new Object[][] {
- {"singleAlignmentFirstEnd", new int[]{12}, new int[0], 12, -1},
- {"singleAlignmentSecondEnd", new int[0], new int[]{12}, -1, 12},
- {"singleAlignmentBothEnd", new int[]{13}, new int[]{12}, 13, 12},
- {"multipleBothEnds1", new int[]{10, 10, 11, 11, 255, 0}, new int[]{14, 11, 1, 14}, 11, 14},
- {"multipleBothEnds2", new int[]{255, 0, 255}, new int[]{255, 255}, 255, 255},
- {"multipleFirstEnd", new int[]{10, 10, 11, 11, 12}, new int[0], 12, -1},
- {"multipleSecondEnd", new int[0], new int[]{10, 10, 0, 11, 12}, -1, 12},
- {"multipleFirstEndSingleSecondEnd", new int[]{10, 10, 11, 11, 12}, new int[]{255}, 12, 255},
- {"singleFirstEndMultipleSecondEnd", new int[]{0}, new int[]{10, 10, 11, 11, 12}, 0, 12},
- };
- }
-
- @Test(dataProvider = "testMostDistantStrategy")
- public void testMostDistantStrategy(final String testName,
- final MostDistantStrategyAlignmentSpec[] firstEndSpecs,
- final MostDistantStrategyAlignmentSpec[] secondEndSpecs) throws Exception {
- testMostDistantStrategy(testName +".includeSecondary", true, firstEndSpecs, secondEndSpecs);
- testMostDistantStrategy(testName +".excludeSecondary", false, firstEndSpecs, secondEndSpecs);
- }
-
- public void testMostDistantStrategy(final String testName, final boolean includeSecondary,
- final MostDistantStrategyAlignmentSpec[] firstEndSpecs,
- final MostDistantStrategyAlignmentSpec[] secondEndSpecs) throws Exception {
-
- final File unmappedSam = File.createTempFile("unmapped.", ".sam");
- unmappedSam.deleteOnExit();
- final SAMFileWriterFactory factory = new SAMFileWriterFactory();
- final SAMFileHeader header = new SAMFileHeader();
- header.setSortOrder(SAMFileHeader.SortOrder.queryname);
-
- final String readName = "theRead";
- final SAMRecord firstUnmappedRead = new SAMRecord(header);
- firstUnmappedRead.setReadName(readName);
- firstUnmappedRead.setReadString("ACGT");
- firstUnmappedRead.setBaseQualityString("5555");
- firstUnmappedRead.setReadUnmappedFlag(true);
- firstUnmappedRead.setMateUnmappedFlag(true);
- firstUnmappedRead.setReadPairedFlag(true);
- firstUnmappedRead.setFirstOfPairFlag(true);
-
- final SAMRecord secondUnmappedRead = new SAMRecord(header);
- secondUnmappedRead.setReadName(readName);
- secondUnmappedRead.setReadString("TCGA");
- secondUnmappedRead.setBaseQualityString("6666");
- secondUnmappedRead.setReadUnmappedFlag(true);
- secondUnmappedRead.setMateUnmappedFlag(true);
- secondUnmappedRead.setReadPairedFlag(true);
- secondUnmappedRead.setSecondOfPairFlag(true);
-
-
-
- final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
- unmappedWriter.addAlignment(firstUnmappedRead);
- unmappedWriter.addAlignment(secondUnmappedRead);
- unmappedWriter.close();
-
- final File alignedSam = File.createTempFile("aligned.", ".sam");
- alignedSam.deleteOnExit();
-
- final SAMFileReader dictReader = new SAMFileReader(sequenceDict);
- header.setSequenceDictionary(dictReader.getFileHeader().getSequenceDictionary());
- dictReader.close();
-
- final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
-
- String expectedFirstPrimarySequence = null;
- int expectedFirstPrimaryAlignmentStart = -1;
- String expectedSecondPrimarySequence = null;
- int expectedSecondPrimaryAlignmentStart = -1;
-
- // Semi-randomly make the reads align to forward or reverse strand.
- boolean reverse = false;
- for (final MostDistantStrategyAlignmentSpec spec: firstEndSpecs) {
- addAlignmentForMostStrategy(alignedWriter, firstUnmappedRead, spec, reverse);
- reverse = !reverse;
- if (spec.expectedPrimary) {
- expectedFirstPrimarySequence = spec.sequence;
- expectedFirstPrimaryAlignmentStart = spec.alignmentStart;
- }
- }
- for (final MostDistantStrategyAlignmentSpec spec: secondEndSpecs) {
- addAlignmentForMostStrategy(alignedWriter, secondUnmappedRead, spec, reverse);
- reverse = !reverse;
- if (spec.expectedPrimary) {
- expectedSecondPrimarySequence = spec.sequence;
- expectedSecondPrimaryAlignmentStart = spec.alignmentStart;
- }
- }
- alignedWriter.close();
-
-
- final File output = File.createTempFile("testMostDistantStrategy." + testName, ".sam");
- output.deleteOnExit();
- final MergeBamAlignment merger = new MergeBamAlignment();
- merger.UNMAPPED_BAM = unmappedSam;
- merger.ALIGNED_BAM = Arrays.asList(alignedSam);
- merger.ALIGNED_READS_ONLY = false;
- merger.CLIP_ADAPTERS = true;
- merger.IS_BISULFITE_SEQUENCE = false;
- merger.MAX_INSERTIONS_OR_DELETIONS = 1;
- merger.PROGRAM_RECORD_ID = "0";
- merger.PROGRAM_GROUP_VERSION = "1.0";
- merger.PROGRAM_GROUP_COMMAND_LINE = "align!";
- merger.PROGRAM_GROUP_NAME = "myAligner";
- merger.PAIRED_RUN = true;
- merger.REFERENCE_SEQUENCE = fasta;
- merger.OUTPUT = output;
- merger.EXPECTED_ORIENTATIONS=Arrays.asList(SamPairUtil.PairOrientation.FR);
- merger.PRIMARY_ALIGNMENT_STRATEGY = MergeBamAlignment.PrimaryAlignmentStrategy.MostDistant;
- merger.INCLUDE_SECONDARY_ALIGNMENTS = includeSecondary;
-
- Assert.assertEquals(merger.doWork(), 0, "Merge did not succeed");
- final SAMFileReader reader = new SAMFileReader(output);
- int numFirstRecords = 0;
- int numSecondRecords = 0;
- String firstPrimarySequence = null;
- int firstPrimaryAlignmentStart = -1;
- String secondPrimarySequence = null;
- int secondPrimaryAlignmentStart = -1;
- for (final SAMRecord rec: reader) {
- Assert.assertTrue(rec.getReadPairedFlag());
- if (rec.getFirstOfPairFlag()) ++numFirstRecords;
- else if (rec.getSecondOfPairFlag()) ++ numSecondRecords;
- else Assert.fail("unpossible!");
- if (!rec.getReadUnmappedFlag() && !rec.getNotPrimaryAlignmentFlag()) {
- if (rec.getFirstOfPairFlag()) {
- Assert.assertEquals(firstPrimaryAlignmentStart, -1);
- firstPrimarySequence = rec.getReferenceName();
- firstPrimaryAlignmentStart = rec.getAlignmentStart();
- } else {
- Assert.assertEquals(secondPrimaryAlignmentStart, -1);
- secondPrimarySequence = rec.getReferenceName();
- secondPrimaryAlignmentStart = rec.getAlignmentStart();
- }
- } else if (rec.getNotPrimaryAlignmentFlag()) {
- Assert.assertTrue(rec.getMateUnmappedFlag());
- }
- }
- reader.close();
- Assert.assertEquals(firstPrimarySequence, expectedFirstPrimarySequence);
- Assert.assertEquals(firstPrimaryAlignmentStart, expectedFirstPrimaryAlignmentStart);
- Assert.assertEquals(secondPrimarySequence, expectedSecondPrimarySequence);
- Assert.assertEquals(secondPrimaryAlignmentStart, expectedSecondPrimaryAlignmentStart);
- if (!includeSecondary) {
- Assert.assertEquals(numFirstRecords, 1);
- Assert.assertEquals(numSecondRecords, 1);
- } else {
- // If no alignments for an end, there will be a single unmapped record
- Assert.assertEquals(numFirstRecords, Math.max(1, firstEndSpecs.length));
- Assert.assertEquals(numSecondRecords, Math.max(1, secondEndSpecs.length));
- }
- }
-
- private void addAlignmentForMostStrategy(
- final SAMFileWriter writer, final SAMRecord unmappedRecord, final MostDistantStrategyAlignmentSpec spec,
- final boolean reverse) {
- final SAMRecord alignedRecord = new SAMRecord(writer.getFileHeader());
- alignedRecord.setReadName(unmappedRecord.getReadName());
- alignedRecord.setReadBases(unmappedRecord.getReadBases());
- alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities());
- alignedRecord.setReferenceName(spec.sequence);
- alignedRecord.setAlignmentStart(spec.alignmentStart);
- alignedRecord.setReadNegativeStrandFlag(reverse);
- alignedRecord.setCigarString(unmappedRecord.getReadBases().length + "M");
- alignedRecord.setMappingQuality(spec.mapQ);
- alignedRecord.setReadPairedFlag(unmappedRecord.getReadPairedFlag());
- alignedRecord.setFirstOfPairFlag(unmappedRecord.getFirstOfPairFlag());
- alignedRecord.setSecondOfPairFlag(unmappedRecord.getSecondOfPairFlag());
- alignedRecord.setMateUnmappedFlag(true);
- writer.addAlignment(alignedRecord);
- }
-
- private static class MostDistantStrategyAlignmentSpec {
- public final boolean expectedPrimary;
- public final String sequence;
- public final int alignmentStart;
- public final int mapQ;
-
- private MostDistantStrategyAlignmentSpec(final boolean expectedPrimary, final String sequence,
- final int alignmentStart, final int mapQ) {
- this.expectedPrimary = expectedPrimary;
- this.sequence = sequence;
- this.alignmentStart = alignmentStart;
- this.mapQ = mapQ;
- }
-
- private MostDistantStrategyAlignmentSpec(final boolean expectedPrimary, final String sequence,
- final int alignmentStart) {
- this(expectedPrimary, sequence, alignmentStart, 10);
- }
- }
-
- @DataProvider(name="testMostDistantStrategy")
- public Object[][] testMostDistantStrategyDataProvider() {
- /**
- * @param testName
- * @param firstEndSpecs
- * @param secondEndSpecs
- */
- return new Object[][] {
- {
- // There are two ties: {chr1:1 - chr1:89} and {chr4:2 -chr4:90}
- // That are disambiguated by MAPQ.
- "multipleAlignmentsBothEnds",
- new MostDistantStrategyAlignmentSpec[] {
- new MostDistantStrategyAlignmentSpec(false, "chr1", 1, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 1, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 1, 20),
- new MostDistantStrategyAlignmentSpec(true, "chr4", 2, 25),
- new MostDistantStrategyAlignmentSpec(false, "chr1", 89, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 2, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 3, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr4", 4, 20),
- },
- new MostDistantStrategyAlignmentSpec[] {
- new MostDistantStrategyAlignmentSpec(false, "chr1", 1, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 2, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 3, 20),
- new MostDistantStrategyAlignmentSpec(true, "chr4", 90, 19),
- new MostDistantStrategyAlignmentSpec(false, "chr1", 5, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 6, 20),
- },
- },
- {
- "multipleAlignmentsAllChimeric",
- new MostDistantStrategyAlignmentSpec[] {
- new MostDistantStrategyAlignmentSpec(false, "chr1", 1, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 2, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr1", 3, 20),
- new MostDistantStrategyAlignmentSpec(true, "chr2", 4, 21),
- new MostDistantStrategyAlignmentSpec(false, "chr1", 10, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 50, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr1", 60, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 70, 20),
- },
- new MostDistantStrategyAlignmentSpec[] {
- new MostDistantStrategyAlignmentSpec(false, "chr3", 1, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr4", 2, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 3, 20),
- new MostDistantStrategyAlignmentSpec(true, "chr4", 11, 25),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 50, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr4", 60, 20),
- },
- },
- {
- "multipleAlignmentsFirstEnd",
- new MostDistantStrategyAlignmentSpec[] {
- new MostDistantStrategyAlignmentSpec(false, "chr1", 10, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 10, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 10, 20),
- new MostDistantStrategyAlignmentSpec(true, "chr4", 20, 25),
- new MostDistantStrategyAlignmentSpec(false, "chr1", 80, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 20, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 30, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr4", 40, 20),
- },
- new MostDistantStrategyAlignmentSpec[0]
- },
- {
- "multipleAlignmentsSecondEnd",
- new MostDistantStrategyAlignmentSpec[0],
- new MostDistantStrategyAlignmentSpec[] {
- new MostDistantStrategyAlignmentSpec(false, "chr1", 10, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 10, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 10, 20),
- new MostDistantStrategyAlignmentSpec(true, "chr4", 20, 25),
- new MostDistantStrategyAlignmentSpec(false, "chr1", 80, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr2", 20, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr3", 30, 20),
- new MostDistantStrategyAlignmentSpec(false, "chr4", 40, 20),
- },
- },
- };
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/MergeSamFilesTest.java b/src/tests/java/net/sf/picard/sam/MergeSamFilesTest.java
deleted file mode 100644
index debdb50..0000000
--- a/src/tests/java/net/sf/picard/sam/MergeSamFilesTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.BamFileIoUtils;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class MergeSamFilesTest {
- private static File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/MergeSamFiles");
-
- /**
- * Confirm that unsorted input can result in coordinate sorted output, with index created.
- */
- @Test
- public void unsortedInputSortedOutputTest() throws Exception {
- File unsortedInputTestDataDir = new File(TEST_DATA_DIR, "unsorted_input");
- File mergedOutput = File.createTempFile("unsortedInputSortedOutputTest.", BamFileIoUtils.BAM_FILE_EXTENSION);
- mergedOutput.deleteOnExit();
- String[] args = {
- "I=" + new File(unsortedInputTestDataDir, "1.sam").getAbsolutePath(),
- "I=" + new File(unsortedInputTestDataDir, "2.sam").getAbsolutePath(),
- "O=" + mergedOutput.getAbsolutePath(),
- "SO=coordinate"
- };
- final int mergeExitStatus = new MergeSamFiles().instanceMain(args);
- Assert.assertEquals(mergeExitStatus, 0);
- final SAMFileReader reader = new SAMFileReader(mergedOutput);
- Assert.assertEquals(reader.getFileHeader().getSortOrder(), SAMFileHeader.SortOrder.coordinate);
-
- final int validateExitStatus = new ValidateSamFile().instanceMain(new String[] {"I=" + mergedOutput.getAbsolutePath()});
- Assert.assertEquals(validateExitStatus, 0);
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/MergingSamRecordIteratorGroupCollisionTest.java b/src/tests/java/net/sf/picard/sam/MergingSamRecordIteratorGroupCollisionTest.java
deleted file mode 100644
index daf5f6e..0000000
--- a/src/tests/java/net/sf/picard/sam/MergingSamRecordIteratorGroupCollisionTest.java
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import net.sf.samtools.*;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Tests for MultiIterator relating to group collision.
- *
- * @author Dave Tefft, Andre Mesarovic
- */
-public class MergingSamRecordIteratorGroupCollisionTest {
-
- private GroupAdapter padapter = new ProgramGroupAdapter();
- private GroupAdapter radapter = new ReadGroupAdapter();
-
- @DataProvider(name = "adapters")
- public Object[][] adapters() {
- return new Object[][] {
- { new ProgramGroupAdapter() },
- { new ReadGroupAdapter() }
- };
- }
-
-
- /** Test for groups with same ID and same attributes */
- @Test(dataProvider = "adapters")
- public void testSameIdsSameAttrs(GroupAdapter adapter) {
- boolean addReadGroup = addReadGroup(adapter);
-
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
- adapter.setAttribute(group0,"Hi Mom!");
- adapter.setBuilderGroup(builder1, group0);
- builder1.addFrag("read1", 20, 28833, addReadGroup);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group1 = adapter.newGroup("0");
- adapter.setAttribute(group1,"Hi Mom!");
- adapter.setBuilderGroup(builder2, group1);
- builder2.addFrag("read2", 19, 28833, addReadGroup);
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- readers.add(builder1.getSamReader());
- readers.add(builder2.getSamReader());
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- headers.add(readers.get(0).getFileHeader());
- headers.add(readers.get(1).getFileHeader());
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
- final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
- Assert.assertEquals(outputGroups.size(), 1);
-
- Assert.assertTrue(adapter.equivalent(outputGroups.get(0),group0));
-
- assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "0") ;
- }
-
- /** Test for groups with same ID but different attributes */
- // @Test(dataProvider = "adapters")
- public void testSameIdsDifferentAttrs(GroupAdapter adapter) {
- boolean addReadGroup = addReadGroup(adapter);
-
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
- adapter.setAttribute(group0,"Hi Mom!");
- adapter.setBuilderGroup(builder1, group0);
- builder1.addFrag("read1", 20, 28833, addReadGroup);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group1 = adapter.newGroup("0");
- adapter.setAttribute(group1,"Hi Dad!");
- adapter.setBuilderGroup(builder2, group1);
- builder2.addFrag("read2", 19, 28833, addReadGroup);
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- readers.add(builder1.getSamReader());
- readers.add(builder2.getSamReader());
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- headers.add(readers.get(0).getFileHeader());
- headers.add(readers.get(1).getFileHeader());
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
- final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
- Assert.assertEquals(outputGroups.size(), 2);
- Assert.assertTrue(adapter.equivalent(outputGroups.get(0),group0));
- Assert.assertTrue(adapter.equivalent(outputGroups.get(1),group1));
-
- assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "0.1") ;
- }
-
-
- /** Test for groups with different ID and same attributes */
- // @Test(dataProvider = "adapters")
- public void testDifferentIdsSameAttrs(GroupAdapter adapter) {
- boolean addReadGroup = addReadGroup(adapter);
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
- adapter.setAttribute(group0,"Hi Mom!");
- adapter.setBuilderGroup(builder1, group0);
- builder1.addFrag("read1", 20, 28833, addReadGroup);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group1 = adapter.newGroup("55");
- adapter.setAttribute(group1,"Hi Mom!");
- adapter.setBuilderGroup(builder2, group1);
- builder2.addFrag("read2", 19, 28833, addReadGroup);
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- readers.add(builder1.getSamReader());
- readers.add(builder2.getSamReader());
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- headers.add(readers.get(0).getFileHeader());
- headers.add(readers.get(1).getFileHeader());
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
- final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
- Assert.assertEquals(outputGroups.size(), 2);
- Assert.assertTrue(adapter.equivalent(outputGroups.get(0),group0));
- Assert.assertTrue(adapter.equivalent(outputGroups.get(1),group1));
-
- assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "55") ;
- }
-
-
-
- /** Test for groups with different ID and different attributes */
- @Test(dataProvider = "adapters")
- public void testDifferentIdsDifferentAttrs(GroupAdapter adapter) {
- boolean addReadGroup = addReadGroup(adapter);
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group0 = adapter.newGroup("0");
- adapter.setAttribute(group0,"Hi Mom!");
- adapter.setBuilderGroup(builder1, group0);
- builder1.addFrag("read1", 20, 28833, addReadGroup);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname,addReadGroup);
- final AbstractSAMHeaderRecord group1 = adapter.newGroup("55");
- adapter.setAttribute(group1,"Hi Dad!");
- adapter.setBuilderGroup(builder2, group1);
- builder2.addFrag("read2", 19, 28833, addReadGroup);
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- readers.add(builder1.getSamReader());
- readers.add(builder2.getSamReader());
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- headers.add(readers.get(0).getFileHeader());
- headers.add(readers.get(1).getFileHeader());
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
- final List<? extends AbstractSAMHeaderRecord> outputGroups = adapter.getGroups(headerMerger.getMergedHeader());
- Assert.assertEquals(outputGroups.size(), 2);
- Assert.assertTrue(adapter.equivalent(outputGroups.get(0),group0));
- Assert.assertTrue(adapter.equivalent(outputGroups.get(1),group1));
-
- assertRecords(headerMerger, readers, adapter, addReadGroup, "0", "55") ;
- }
-
- @Test(dataProvider = "adapters")
- public void differentIds(GroupAdapter adapter) throws Exception {
- final String[] groupIds = {"group1", "group2"};
- final List<? extends AbstractSAMHeaderRecord> groups = adapter.createGroups(groupIds);
- Assert.assertEquals(groups.size(),2);
- int i = 0;
- for (final AbstractSAMHeaderRecord g : groups) {
- Assert.assertEquals(groupIds[i], adapter.getGroupId(g));
- i++;
- }
- }
-
- @Test(dataProvider = "adapters")
- public void sameIds(GroupAdapter adapter) throws Exception {
- final String[] groupIds = {"group1", "group1"};
-
- final List<? extends AbstractSAMHeaderRecord> groups = adapter.createGroups(groupIds);
- Assert.assertEquals(groups.size(),1);
- AbstractSAMHeaderRecord group = groups.get(0);
- Assert.assertEquals(adapter.getGroupId(group),"group1");
- }
-
- /**
- * List of program groups from the input files are merged, and renumbered, and SAMRecords
- * with PG tags get assigned the updated PG ID.
- * Original ProgramRecord-specific test.
- */
- @Test
- public void testMergingProgramGroups() {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
- final SAMProgramRecord program1 = new SAMProgramRecord("0");
- program1.setCommandLine("Hi, Mom!");
- builder1.setProgramRecord(program1);
- builder1.addFrag("read1", 20, 28833, false);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
- final SAMProgramRecord program2 = new SAMProgramRecord("0");
- program2.setCommandLine("Hi, Dad!");
- program2.setProgramVersion("123");
- builder2.setProgramRecord(program2);
- builder2.addFrag("read2", 19, 28833, false);
- // No PG tag on this record
- builder2.setProgramRecord(null);
- builder2.addFrag("read3", 19, 28833, false);
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- readers.add(builder1.getSamReader());
- readers.add(builder2.getSamReader());
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- headers.add(readers.get(0).getFileHeader());
- headers.add(readers.get(1).getFileHeader());
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-
- final List<SAMProgramRecord> outputProgramGroups = headerMerger.getMergedHeader().getProgramRecords();
- Assert.assertEquals(outputProgramGroups.size(), 2);
- Assert.assertTrue(outputProgramGroups.get(0).equivalent(program1));
- Assert.assertTrue(outputProgramGroups.get(1).equivalent(program2));
-
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, false);
- SAMRecord samRecord = iterator.next();
- Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0");
- samRecord = iterator.next();
- Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0.1");
- samRecord = iterator.next();
- Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), null);
- Assert.assertFalse(iterator.hasNext());
- }
-
- private void assertRecords(SamFileHeaderMerger headerMerger, Collection<SAMFileReader> readers,
- GroupAdapter adapter, boolean addReadGroup, String... attrs) {
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, addReadGroup);
- for (int j=0 ; j < attrs.length ; j++) {
- SAMRecord samRecord = iterator.next();
- Assert.assertEquals(samRecord.getAttribute(adapter.getTagName()), attrs[j]);
- }
- Assert.assertFalse(iterator.hasNext());
- }
-
- private boolean addReadGroup(GroupAdapter adapter) {
- return adapter instanceof ProgramGroupAdapter ;
- }
-
- /**
- * List of program groups from the input files are merged, and renumbered, and SAMRecords
- * with PG tags get assigned the updated PG ID.
- * Original ProgramRecord-specific test.
- */
- @Test
- public void testMergingProgramGroupsWithThreeReaders() {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
- final SAMProgramRecord program1 = new SAMProgramRecord("0");
- program1.setCommandLine("Hi, Mom!");
- program1.setProgramVersion("123");
- builder1.setProgramRecord(program1);
- builder1.addFrag("read1", 20, 28833, false);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
- final SAMProgramRecord program2 = new SAMProgramRecord("0");
- program2.setCommandLine("Hi, Mom!");
- program2.setProgramVersion("123");
- builder2.setProgramRecord(program2);
- builder2.addFrag("read2", 19, 28833, false);
-
-
- final SAMRecordSetBuilder builder3 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
- final SAMProgramRecord program3 = new SAMProgramRecord("0");
- program3.setCommandLine("Hi, Dad!");
- builder3.setProgramRecord(program3);
- builder3.addFrag("read3", 19, 28833, false);
-
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- readers.add(builder1.getSamReader());
- readers.add(builder2.getSamReader());
- readers.add(builder3.getSamReader());
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- headers.add(readers.get(0).getFileHeader());
- headers.add(readers.get(1).getFileHeader());
- headers.add(readers.get(2).getFileHeader());
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
- final List<SAMProgramRecord> outputProgramGroups = headerMerger.getMergedHeader().getProgramRecords();
- Assert.assertEquals(outputProgramGroups.size(), 2);
- Assert.assertTrue(outputProgramGroups.get(0).equivalent(program1));
- Assert.assertTrue(outputProgramGroups.get(1).equivalent(program3));
-
-
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(headerMerger, readers, false);
- SAMRecord samRecord = iterator.next();
- Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0");
- samRecord = iterator.next();
- Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0");
- samRecord = iterator.next();
- Assert.assertEquals(samRecord.getAttribute(SAMTag.PG.name()), "0.1");
- Assert.assertFalse(iterator.hasNext());
-
- }
-
- /**
- * List of program groups from the input files are merged, and renumbered, and SAMRecords
- * with PG tags get assigned the updated PG ID.
- * Original ProgramRecord-specific test.
- */
- @Test
- public void testMergingMultipleReadGroups() {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, false);
- builder1.setReadGroup(createSAMReadGroupRecord("a0"));
- builder1.setReadGroup(createSAMReadGroupRecord("a1"));
- builder1.setReadGroup(createSAMReadGroupRecord("a2"));
- builder1.addFrag("read1", 20, 28833, false);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname, false);
- builder2.setReadGroup(createSAMReadGroupRecord("0"));
- builder2.setReadGroup(createSAMReadGroupRecord("a1")); //collision 1
- builder2.setReadGroup(createSAMReadGroupRecord("a2")); //collision 2
- builder2.setReadGroup(createSAMReadGroupRecord("a1.1")); //doesn't collide
- builder2.setReadGroup(createSAMReadGroupRecord("a2.1")); //doesn't collide
- builder2.setReadGroup(createSAMReadGroupRecord("a2.4.9")); //doesn't collide
- builder2.setReadGroup(createSAMReadGroupRecord("a2.4")); //collision
- builder2.addFrag("read1", 20, 28833, false);
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- readers.add(builder1.getSamReader());
- readers.add(builder2.getSamReader());
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- headers.add(readers.get(0).getFileHeader());
- headers.add(readers.get(1).getFileHeader());
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headers, false);
-
- final List<? extends AbstractSAMHeaderRecord> outputGroups = headerMerger.getMergedHeader().getReadGroups();
- // "0, a0, a1, a1.1, a1.3, a2, a2.1, a2.6
- //the merged read groups are sorted in order
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(0)).getReadGroupId(), "0"); //0
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(1)).getReadGroupId(), "a0"); //1
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(2)).getReadGroupId(), "a1"); //2
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(3)).getReadGroupId(), "a1.1"); //3
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(4)).getReadGroupId(), "a1.2"); //4
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(5)).getReadGroupId(), "a2"); //5
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(6)).getReadGroupId(), "a2.1");
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(7)).getReadGroupId(), "a2.4");
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(8)).getReadGroupId(), "a2.4.9");
- Assert.assertEquals( ((SAMReadGroupRecord) outputGroups.get(9)).getReadGroupId(), "a2.4.A");
- Assert.assertEquals(outputGroups.size(), 10);
- }
-
- private SAMReadGroupRecord createSAMReadGroupRecord(String id) {
- SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(id);
- readGroupRecord.setAttribute(SAMTag.SM.name(), Double.toString( Math.random() ));
- return readGroupRecord;
- }
-
- /** Captures commonality between ProgramRecord and ReadGroup for having one set of tests */
- abstract class GroupAdapter {
-
- /** Gets the group's group ID */
- abstract String getGroupId(AbstractSAMHeaderRecord group) ;
-
- /** Gets the groups from header */
- abstract List<? extends AbstractSAMHeaderRecord> getGroups(SAMFileHeader header) ;
-
- /** Gets the group's 'name' tag */
- abstract String getTagName();
-
- /** Creates groups for specified IDs */
- abstract List<? extends AbstractSAMHeaderRecord> createGroups(final String[] groupIds) ;
-
- /** Sets a group-specific attribute - for CL for ProgramRecord CL, for PU for ReadGroup */
- abstract void setAttribute(AbstractSAMHeaderRecord group, String value) ;
-
- /** Creates a new group */
- abstract AbstractSAMHeaderRecord newGroup(String groupId) ;
-
- /** Sets the group for the builder */
- abstract void setBuilderGroup(SAMRecordSetBuilder builder, AbstractSAMHeaderRecord group) ;
-
- /** Attributes equivalent */
- abstract boolean equivalent(AbstractSAMHeaderRecord group1, AbstractSAMHeaderRecord group2) ;
-
- SAMFileReader newFileReader() {
- final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
- builder.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
- return builder.getSamReader();
- }
- }
-
- class ProgramGroupAdapter extends GroupAdapter
- {
- String getGroupId(AbstractSAMHeaderRecord group) {
- return ((SAMProgramRecord)group).getProgramGroupId();
- }
-
- List<? extends AbstractSAMHeaderRecord> getGroups(SAMFileHeader header) {
- return header.getProgramRecords() ;
- }
-
- String getTagName() {
- return SAMTag.PG.toString();
- }
-
- List<? extends AbstractSAMHeaderRecord> createGroups(final String[] groupIds) {
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- for (final String groupId : groupIds) {
- final SAMFileReader samReader = newFileReader();
- final List<SAMProgramRecord> records = new ArrayList<SAMProgramRecord>();
- final SAMProgramRecord record = new SAMProgramRecord(groupId);
- records.add(record);
- samReader.getFileHeader().setProgramRecords(records);
- readers.add(samReader);
- }
-
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- for (SAMFileReader reader : readers) {
- headers.add(reader.getFileHeader());
- }
- final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false);
- return fileHeaderMerger.getMergedHeader().getProgramRecords();
- }
-
- void setAttribute(AbstractSAMHeaderRecord group, String value) {
- ((SAMProgramRecord)group).setCommandLine(value);
- }
-
- AbstractSAMHeaderRecord newGroup(String id) {
- return new SAMProgramRecord(id);
- }
-
- void setBuilderGroup(SAMRecordSetBuilder builder, AbstractSAMHeaderRecord group) {
- builder.setProgramRecord((SAMProgramRecord)group);
- }
-
- boolean equivalent(AbstractSAMHeaderRecord group1, AbstractSAMHeaderRecord group2) {
- return ((SAMProgramRecord)group1).equivalent((SAMProgramRecord)group2);
- }
- }
-
- class ReadGroupAdapter extends GroupAdapter
- {
- String getGroupId(AbstractSAMHeaderRecord group) {
- return ((SAMReadGroupRecord)group).getReadGroupId();
- }
-
- List<? extends AbstractSAMHeaderRecord> getGroups(SAMFileHeader header) {
- return header.getReadGroups() ;
- }
-
- String getTagName() {
- return SAMTag.RG.toString();
- }
-
- List<? extends AbstractSAMHeaderRecord> createGroups(final String[] groupIds) {
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
-
- for (final String groupId : groupIds) {
- final SAMFileReader samReader = newFileReader();
- final List<SAMReadGroupRecord> records = new ArrayList<SAMReadGroupRecord>();
- final SAMReadGroupRecord record = new SAMReadGroupRecord(groupId);
- records.add(record);
- samReader.getFileHeader().setReadGroups(records);
- readers.add(samReader);
- }
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- for (SAMFileReader reader : readers) {
- headers.add(reader.getFileHeader());
- }
-
- final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers, false);
- return fileHeaderMerger.getMergedHeader().getReadGroups();
- }
-
- void setAttribute(AbstractSAMHeaderRecord group, String value) {
- ((SAMReadGroupRecord)group).setPlatformUnit(value);
- }
-
- AbstractSAMHeaderRecord newGroup(String id) {
- SAMReadGroupRecord group = new SAMReadGroupRecord(id);
- group.setAttribute(SAMTag.SM.name(), id);
- return group ;
- }
-
- void setBuilderGroup(SAMRecordSetBuilder builder, AbstractSAMHeaderRecord group) {
- builder.setReadGroup((SAMReadGroupRecord)group);
- }
-
- boolean equivalent(AbstractSAMHeaderRecord group1, AbstractSAMHeaderRecord group2) {
- return ((SAMReadGroupRecord)group1).equivalent((SAMReadGroupRecord)group2);
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/MergingSamRecordIteratorTest.java b/src/tests/java/net/sf/picard/sam/MergingSamRecordIteratorTest.java
deleted file mode 100644
index 367921c..0000000
--- a/src/tests/java/net/sf/picard/sam/MergingSamRecordIteratorTest.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.*;
-import net.sf.samtools.util.SequenceUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.*;
-
-/**
- * Tests for MultiIterator
- *
- * @author Dave Tefft
- */
-public class MergingSamRecordIteratorTest {
-
- @Test
- public void testVanillaCoordinateMultiIterator() throws Exception {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder();
- builder1.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
- builder1.addFrag("read_28701_28881_323b", 22, 28834, false); // ok
-
- final SAMFileReader samReader = builder1.getSamReader();
- samReader.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder();
- builder2.addFrag("read_28833_29006_6945", 20, 30000, false); // ok
- builder2.addFrag("read_28701_28881_323b", 22, 28835, false); // ok
- builder2.addFrag("read_28701_28881_323c", 22, 28835, false); // ok
-
- final SAMFileReader samReader2 = builder2.getSamReader();
- samReader2.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
-
- final List<SAMFileReader> readerList = new ArrayList<SAMFileReader>();
- readerList.add(samReader);
- readerList.add(samReader2);
-
- final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
- headerList.add(samReader.getFileHeader());
- headerList.add(samReader2.getFileHeader());
-
- final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headerList, false);
-
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
-
-
- int i = 0;
-
- // This is the correct order for start bases. The first two are on chr20, the next three on chr22
- final int[] startBasesInOrder = {28833, 30000, 28834, 28835, 28835};
-
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- System.out.println(rec.format());
- Assert.assertEquals(rec.getAlignmentStart(), startBasesInOrder[i]);
- i++;
- }
- samReader.close();
- }
-
- @Test
- public void testVanillaReadOrderMultiIterator() throws Exception {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
- builder1.addFrag("a", 20, 28833, false); // ok
- builder1.addFrag("e", 19, 28834, false); // ok
-
- final SAMFileReader samReader = builder1.getSamReader();
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
- builder2.addFrag("b", 20, 30000, false); // ok
- builder2.addFrag("c", 22, 28835, false); // ok
- builder2.addFrag("d", 20, 28835, false); // ok
-
- final SAMFileReader samReader2 = builder2.getSamReader();
-
-
- final List<SAMFileReader> readerList = new ArrayList<SAMFileReader>();
- readerList.add(samReader);
- readerList.add(samReader2);
-
- final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
- headerList.add(samReader.getFileHeader());
- headerList.add(samReader2.getFileHeader());
-
- final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.queryname, headerList, false);
-
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
-
-
- int i = 0;
-
- // This is the correct order for start bases. The first two are on chr20, the next three on chr22
- final String[] orderedReadNames = {"a", "b", "c", "d", "e"};
-
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- System.out.println(rec.getReadName());
- Assert.assertEquals(rec.getReadName(), orderedReadNames[i]);
- i++;
- }
- samReader.close();
- }
-
- @Test
- public void testVanillaUnsortedMultiIterator() throws Exception {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
- builder1.addFrag("b", 20, 28833, false); // ok
- builder1.addFrag("a", 19, 28834, false); // ok
-
- final SAMFileReader samReader = builder1.getSamReader();
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
- builder2.addFrag("d", 20, 30000, false); // ok
- builder2.addFrag("e", 22, 28835, false); // ok
- builder2.addFrag("c", 20, 28835, false); // ok
-
- final SAMFileReader samReader2 = builder2.getSamReader();
-
-
- final List<SAMFileReader> readerList = new ArrayList<SAMFileReader>();
- readerList.add(samReader);
- readerList.add(samReader2);
-
- final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
- headerList.add(samReader.getFileHeader());
- headerList.add(samReader2.getFileHeader());
-
- final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.unsorted, headerList, false);
-
- final MergingSamRecordIterator iterator = new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
-
-
- int i = 0;
-
- // With unsorted option there is no garantee that order of the names to come back from the iterator
- final String[] readNames = {"b", "a", "d", "e", "c"};
-
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- System.out.println(rec.getReadName());
- i++;
- }
- Assert.assertEquals(i, readNames.length);
- samReader.close();
- }
-
- @Test(expectedExceptions = SequenceUtil.SequenceListsDifferException.class)
- public void testConflictingHeaders() throws Exception {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder();
- builder1.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
- builder1.addFrag("read_28701_28881_323b", 22, 28834, false); // ok
-
- final SAMFileReader samReader = builder1.getSamReader();
- samReader.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder();
- builder2.addFrag("read_28833_29006_6945", 20, 30000, false); // ok
- builder2.addFrag("read_28701_28881_323b", 22, 28835, false); // ok
- builder2.addFrag("read_28701_28881_323c", 22, 28835, false); // ok
-
- final SAMFileReader samReader2 = builder2.getSamReader();
- samReader2.getFileHeader().setSortOrder(SAMFileHeader.SortOrder.coordinate);
-
- //Change one of the header so they are no longer compatible
- final SAMSequenceRecord sRec = new SAMSequenceRecord("BADSEQ", 0);
- samReader2.getFileHeader().addSequence(sRec);
-
-
- final List<SAMFileReader> readerList = new ArrayList<SAMFileReader>();
- readerList.add(samReader);
- readerList.add(samReader2);
-
- final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
- headerList.add(samReader.getFileHeader());
- headerList.add(samReader2.getFileHeader());
-
- final SamFileHeaderMerger samFileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headerList, false);
-
- new MergingSamRecordIterator(samFileHeaderMerger, readerList, false);
- Assert.fail("This method should throw exception before getting to this point");
- }
-
-
- @Test(expectedExceptions = PicardException.class)
- public void filesNotSortedCorrectly() throws Exception {
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.coordinate);
- builder1.addFrag("read_28833_29006_6945", 20, 28833, false); // ok
- builder1.addFrag("read_28701_28881_323b", 22, 28834, false); // ok
-
- final SAMFileReader samReader = builder1.getSamReader();
-
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
-
- final SAMFileReader samReader2 = builder2.getSamReader();
-
- builder2.addFrag("read_28701_28881_323b", 22, 28835, false); // ok
- builder2.addFrag("read_28833_29006_6945", 20, 30000, false); // ok
- builder2.addFrag("read_28701_28881_323c", 22, 28835, false); // ok
-
- final List<SAMFileReader> readerList = new ArrayList<SAMFileReader>();
- readerList.add(samReader);
- readerList.add(samReader2);
-
- final List<SAMFileHeader> headerList = new ArrayList<SAMFileHeader>();
- headerList.add(samReader.getFileHeader());
- headerList.add(samReader2.getFileHeader());
-
- final SamFileHeaderMerger fileHeaderMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headerList, false);
-
- new MergingSamRecordIterator(fileHeaderMerger, readerList, false);
- Assert.fail("This method should throw exception before getting to this point");
- }
-
- @Test
- public void testHeaderCommentMerge() throws Exception {
- final String[] comments1 = {"@CO\tHi, Mom!", "@CO\tHi, Dad!"};
- final String[] comments2 = {"@CO\tHello, World!", "@CO\tGoodbye, Cruel World!"};
- final Set<String> bothComments = new HashSet<String>();
- bothComments.addAll(Arrays.asList(comments1));
- bothComments.addAll(Arrays.asList(comments2));
- final SAMRecordSetBuilder builder1 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.coordinate);
- SAMFileHeader header = builder1.getHeader();
- for (final String comment : comments1) {
- header.addComment(comment);
- }
- final SAMRecordSetBuilder builder2 = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.coordinate);
- header = builder2.getHeader();
- for (final String comment : comments2) {
- header.addComment(comment);
- }
- final SamFileHeaderMerger merger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate,
- Arrays.asList(builder1.getSamReader().getFileHeader(), builder2.getSamReader().getFileHeader()), false);
- final List<String> mergedComments = merger.getMergedHeader().getComments();
- Assert.assertEquals(mergedComments.size(), bothComments.size());
- for (final String comment : mergedComments) {
- Assert.assertTrue(bothComments.contains(comment));
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/ProgramRecordChainingTest.java b/src/tests/java/net/sf/picard/sam/ProgramRecordChainingTest.java
deleted file mode 100644
index ab3820f..0000000
--- a/src/tests/java/net/sf/picard/sam/ProgramRecordChainingTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMProgramRecord;
-import net.sf.samtools.SAMUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-/**
- * Test for SequenceUtil.chainProgramRecord
- */
-public class ProgramRecordChainingTest {
-
- @Test
- public void testChainProgramRecord() {
- SAMFileHeader header = new SAMFileHeader();
- SAMProgramRecord first = header.createProgramRecord();
- SAMUtils.chainSAMProgramRecord(header, first);
- Assert.assertEquals(header.getProgramRecords().size(), 1);
- Assert.assertNull(first.getPreviousProgramGroupId());
-
- SAMProgramRecord second = header.createProgramRecord();
- SAMUtils.chainSAMProgramRecord(header, second);
- Assert.assertEquals(header.getProgramRecords().size(), 2);
- Assert.assertNull(first.getPreviousProgramGroupId());
- Assert.assertEquals(second.getPreviousProgramGroupId(), first.getProgramGroupId());
-
- SAMProgramRecord third = new SAMProgramRecord("3");
- SAMUtils.chainSAMProgramRecord(header, third);
- header.addProgramRecord(third);
- Assert.assertEquals(header.getProgramRecords().size(), 3);
- Assert.assertNull(first.getPreviousProgramGroupId());
- Assert.assertEquals(second.getPreviousProgramGroupId(), first.getProgramGroupId());
- Assert.assertEquals(third.getPreviousProgramGroupId(), second.getProgramGroupId());
-
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/RevertSamTest.java b/src/tests/java/net/sf/picard/sam/RevertSamTest.java
deleted file mode 100755
index 6629177..0000000
--- a/src/tests/java/net/sf/picard/sam/RevertSamTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.samtools.*;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by IntelliJ IDEA.
- * User: ktibbett
- * Date: Jul 20, 2010
- * Time: 10:27:58 AM
- * To change this template use File | Settings | File Templates.
- */
-public class RevertSamTest {
-
- public static final String basicSamToRevert = "testdata/net/sf/picard/sam/revert_sam_basic.sam";
- public static final String negativeTestSamToRevert = "testdata/net/sf/picard/sam/revert_sam_negative.sam";
-
- private static final String revertedQualities =
- "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
-
- private static final String unmappedRead = "both_reads_present_only_first_aligns/2";
-
- @Test(dataProvider="positiveTestData")
- public void basicPositiveTests(SAMFileHeader.SortOrder so, boolean removeDuplicates, boolean removeAlignmentInfo,
- boolean restoreOriginalQualities, String sample, String library,
- List<String> attributesToClear) throws Exception {
-
- File output = File.createTempFile("reverted", ".sam");
- RevertSam reverter = new RevertSam();
- String args[] = new String[5 + (so != null ? 1 : 0) + attributesToClear.size() + (sample != null ? 1 : 0) + (library != null ? 1 : 0)];
- int index = 0;
- args[index++] = "INPUT=" + basicSamToRevert;
- args[index++] = "OUTPUT=" + output.getAbsolutePath();
- if (so != null) {
- args[index++] = "SORT_ORDER=" + so.name();
- }
- args[index++] = "REMOVE_DUPLICATE_INFORMATION=" + removeDuplicates;
- args[index++] = "REMOVE_ALIGNMENT_INFORMATION=" + removeAlignmentInfo;
- args[index++] = "RESTORE_ORIGINAL_QUALITIES=" + restoreOriginalQualities;
- if (sample != null) {
- args[index++] = "SAMPLE_ALIAS=" + sample;
- }
- if (library != null) {
- args[index++] = "LIBRARY_NAME=" + library;
- }
- for (String attr : attributesToClear) {
- args[index++] = "ATTRIBUTE_TO_CLEAR=" + attr;
- }
- reverter.instanceMain(args);
-
- SAMFileReader reader = new SAMFileReader(output);
- SAMFileHeader header = reader.getFileHeader();
- Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.queryname);
- Assert.assertEquals(header.getProgramRecords().size(), removeAlignmentInfo ? 0 : 1);
- for (SAMReadGroupRecord rg : header.getReadGroups()) {
- if (sample != null) {
- Assert.assertEquals(rg.getSample(), sample);
- }
- else {
- Assert.assertEquals(rg.getSample(), "Hi,Mom!");
- }
- if (library != null) {
- Assert.assertEquals(rg.getLibrary(), library);
- }
- else {
- Assert.assertEquals(rg.getLibrary(), "my-library");
- }
- }
- SAMRecordIterator it = reader.iterator();
- while (it.hasNext()) {
- SAMRecord rec = it.next();
-
- if (removeDuplicates) {
- Assert.assertFalse(rec.getDuplicateReadFlag(),
- "Duplicates should have been removed: " + rec.getReadName());
- }
-
- if (removeAlignmentInfo) {
- Assert.assertTrue(rec.getReadUnmappedFlag(),
- "Alignment info should have been removed: " + rec.getReadName());
- }
-
- if (restoreOriginalQualities && !unmappedRead.equals(
- rec.getReadName() + "/" + (rec.getFirstOfPairFlag() ? "1" : "2"))) {
-
- Assert.assertEquals(rec.getBaseQualityString(), revertedQualities);
- }
- else {
- Assert.assertNotSame(rec.getBaseQualityString(), revertedQualities);
- }
-
- for (SAMRecord.SAMTagAndValue attr : rec.getAttributes()) {
- if (removeAlignmentInfo || (!attr.tag.equals("PG") && !attr.tag.equals("NM")
- && !attr.tag.equals("MQ"))) {
- Assert.assertFalse(reverter.ATTRIBUTE_TO_CLEAR.contains(attr.tag),
- attr.tag + " should have been cleared.");
- }
- }
- }
- }
-
-
- @DataProvider(name="positiveTestData")
- public Object[][] getPostitiveTestData() {
- return new Object[][] {
- {null, true, true, true, null, null, Collections.EMPTY_LIST},
- {SAMFileHeader.SortOrder.queryname, true, true, true, "Hey,Dad!", null, Arrays.asList("XT")},
- {null, false, true, false, "Hey,Dad!", "NewLibraryName", Arrays.asList("XT")},
- {null, false, false, false, null, null, Collections.EMPTY_LIST}
- };
- }
-
-
- @Test(dataProvider="negativeTestData", expectedExceptions = {PicardException.class})
- public void basicNegativeTest(String sample, String library) throws Exception {
-
- File output = File.createTempFile("bad", ".sam");
- RevertSam reverter = new RevertSam();
- String args[] = new String[2 + (sample != null ? 1 : 0) + (library != null ? 1 : 0)];
- int index = 0;
- args[index++] = "INPUT=" + negativeTestSamToRevert;
- args[index++] = "OUTPUT=" + output.getAbsolutePath();
- if (sample != null) {
- args[index++] = "SAMPLE_ALIAS=" + sample;
- }
- if (library != null) {
- args[index++] = "LIBRARY_NAME=" + library;
- }
- reverter.instanceMain(args);
- Assert.fail("Negative test should have thrown an exception and didn't");
- }
-
- @DataProvider(name="negativeTestData")
- public Object[][] getNegativeTestData() {
- return new Object[][] {
- {"NewSample", null},
- {null, "NewLibrary"},
- {"NewSample", "NewLibrary"}
- };
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/SamFileHeaderMergerTest.java b/src/tests/java/net/sf/picard/sam/SamFileHeaderMergerTest.java
deleted file mode 100644
index 7ce9f7e..0000000
--- a/src/tests/java/net/sf/picard/sam/SamFileHeaderMergerTest.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/**
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- **/
-
-
-package net.sf.picard.sam;
-
-import static org.testng.Assert.assertEquals;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.*;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFileWriter;
-import net.sf.samtools.SAMFileWriterFactory;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-
-/**
- * @author aaron
- * @version 1.0
- * @date May 20, 2009
- * <p/>
- * Class SamFileHeaderMergerTest
- * <p/>
- * Tests the ability of the SamFileHeaderMerger class to merge sequence dictionaries.
- */
-public class SamFileHeaderMergerTest {
-
- private static File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam");
-
- /** tests that if we've set the merging to false, we get a PicardException for bam's with different dictionaries. */
- @Test(expectedExceptions = SequenceUtil.SequenceListsDifferException.class)
- public void testMergedException() {
- File INPUT[] = {new File(TEST_DATA_DIR, "Chromosome1to10.bam"),
- new File(TEST_DATA_DIR, "Chromosome5to9.bam")};
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- for (final File inFile : INPUT) {
- IoUtil.assertFileIsReadable(inFile);
- final SAMFileReader in = new SAMFileReader(inFile);
- headers.add(in.getFileHeader());
- }
- new SamFileHeaderMerger(SAMFileHeader.SortOrder.unsorted, headers, false);
- }
-
- /** Tests that we can successfully merge two files with */
- @Test
- public void testMerging() {
- File INPUT[] = {new File(TEST_DATA_DIR, "Chromosome1to10.bam"),
- new File(TEST_DATA_DIR, "Chromosome5to9.bam")};
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- for (final File inFile : INPUT) {
- IoUtil.assertFileIsReadable(inFile);
- final SAMFileReader in = new SAMFileReader(inFile);
- // We are now checking for zero-length reads, so suppress complaint about that.
- in.setValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- readers.add(in);
- headers.add(in.getFileHeader());
- }
- final MergingSamRecordIterator iterator;
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.unsorted, headers, true);
- iterator = new MergingSamRecordIterator(headerMerger, readers, false);
- headerMerger.getMergedHeader();
-
- // count the total reads, and record read counts for each sequence
- Map<Integer, Integer> seqCounts = new HashMap<Integer, Integer>();
- int totalCount = 0;
-
- while (iterator.hasNext()) {
- SAMRecord r = iterator.next();
- if (seqCounts.containsKey(r.getReferenceIndex())) {
- seqCounts.put(r.getReferenceIndex(), seqCounts.get(r.getReferenceIndex()) + 1);
- } else {
- seqCounts.put(r.getReferenceIndex(), 1);
- }
- ++totalCount;
- }
- assertEquals(totalCount, 1500);
- for (Integer i : seqCounts.keySet()) {
- if (i < 4 || i > 8) {
- // seqeunce 5 - 9 should have 200 reads (indices 4 - 8)
- assertEquals(seqCounts.get(i).intValue(), 100);
- } else {
- // the others should have 100
- assertEquals(seqCounts.get(i).intValue(), 200);
- }
- }
- }
-
- private static final String sq1 = "@SQ\tSN:chr1\tLN:1000\n";
- private static final String sq2 = "@SQ\tSN:chr2\tLN:1000\n";
- private static final String sq3 = "@SQ\tSN:chr3\tLN:1000\n";
- private static final String sq4 = "@SQ\tSN:chr4\tLN:1000\n";
- private static final String sq5 = "@SQ\tSN:chr5\tLN:1000\n";
-
- @Test
- public void testSequenceDictionaryMerge() {
- final String sd1 = sq1 + sq2 + sq5;
- final String sd2 = sq2 + sq3 + sq4;
- SAMFileReader reader1 = new SAMFileReader(new ByteArrayInputStream(StringUtil.stringToBytes(sd1)));
- SAMFileReader reader2 = new SAMFileReader(new ByteArrayInputStream(StringUtil.stringToBytes(sd2)));
- final List<SAMFileHeader> inputHeaders = Arrays.asList(reader1.getFileHeader(), reader2.getFileHeader());
- SamFileHeaderMerger merger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, inputHeaders, true);
- final SAMFileHeader mergedHeader = merger.getMergedHeader();
- for (final SAMFileHeader inputHeader : inputHeaders) {
- int prevTargetIndex = -1;
- for (final SAMSequenceRecord sequenceRecord : inputHeader.getSequenceDictionary().getSequences()) {
- final int targetIndex = mergedHeader.getSequenceIndex(sequenceRecord.getSequenceName());
- Assert.assertNotSame(targetIndex, -1);
- Assert.assertTrue(prevTargetIndex < targetIndex);
- prevTargetIndex = targetIndex;
- }
- }
- }
-
- @Test(dataProvider="data")
- public void testProgramGroupAndReadGroupMerge(File inputFiles[], File expectedOutputFile) throws IOException {
-
- BufferedReader reader = new BufferedReader( new FileReader(expectedOutputFile) );
-
- String line;
- String expected_output = "";
- while((line = reader.readLine()) != null) {
- expected_output += line + "\n";
- }
-
- final List<SAMFileReader> readers = new ArrayList<SAMFileReader>();
- final List<SAMFileHeader> headers = new ArrayList<SAMFileHeader>();
- for (final File inFile : inputFiles) {
- IoUtil.assertFileIsReadable(inFile);
- final SAMFileReader in = new SAMFileReader(inFile);
- // We are now checking for zero-length reads, so suppress complaint about that.
- in.setValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- readers.add(in);
- headers.add(in.getFileHeader());
- }
- final MergingSamRecordIterator iterator;
-
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, headers,true);
- iterator = new MergingSamRecordIterator(headerMerger, readers, false);
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- SAMFileWriter writer = new SAMFileWriterFactory().makeSAMWriter(headerMerger.getMergedHeader(), true, baos);
- while (iterator.hasNext()) {
- writer.addAlignment(iterator.next());
- }
- writer.close();
-
- String actual_output = StringUtil.bytesToString(baos.toByteArray());
-
- List<String> actual = Arrays.asList(actual_output.split("\\n"));
- List<String> expected = Arrays.asList(expected_output.split("\\n"));
- for (int i = 0; i < expected.size(); i++) {
- if (expected.get(i).startsWith("@")) {
- Assert.assertEquals(actual.get(i), expected.get(i));
- }
- else
- {
- List<String> expectedSamParts = Arrays.asList(expected.get(i).split("\\s*"));
- List<String> actualSamParts = Arrays.asList(actual.get(i).split("\\s*"));
- for (String exp : expectedSamParts) {
- Assert.assertTrue(actualSamParts.contains(exp));
- }
- for (String act : actualSamParts) {
- Assert.assertTrue(expectedSamParts.contains(act));
- }
- }
- }
- }
-
- @DataProvider(name="data")
- private Object[][] getProgramGroupAndReadGroupMergeData() {
-
- return new Object[][] {
- {
-
- new File[] {
- new File(TEST_DATA_DIR, "MergeSamFiles/case1/chr11sub_file1.sam"),
- new File(TEST_DATA_DIR, "MergeSamFiles/case1/chr11sub_file2.sam") },
- new File(TEST_DATA_DIR, "MergeSamFiles/case1/expected_output.sam")
- }, {
- new File[] {
- new File(TEST_DATA_DIR, "MergeSamFiles/case2/chr11sub_file1.sam"),
- new File(TEST_DATA_DIR, "MergeSamFiles/case2/chr11sub_file2.sam"),
- new File(TEST_DATA_DIR, "MergeSamFiles/case2/chr11sub_file3.sam"),
- new File(TEST_DATA_DIR, "MergeSamFiles/case2/chr11sub_file4.sam") },
- new File(TEST_DATA_DIR, "MergeSamFiles/case2/expected_output.sam")
- }
- };
- }
-
-
- @Test(expectedExceptions = {PicardException.class})
- public void testUnmergeableSequenceDictionary() {
- final String sd1 = sq1 + sq2 + sq5;
- final String sd2 = sq2 + sq3 + sq4 + sq1;
- SAMFileReader reader1 = new SAMFileReader(new ByteArrayInputStream(StringUtil.stringToBytes(sd1)));
- SAMFileReader reader2 = new SAMFileReader(new ByteArrayInputStream(StringUtil.stringToBytes(sd2)));
- final List<SAMFileHeader> inputHeaders = Arrays.asList(reader1.getFileHeader(), reader2.getFileHeader());
- new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, inputHeaders, true);
- }
-
- @DataProvider(name="fourDigitBase36StrPositiveData")
- public Object[][] positiveFourDigitBase36StrData() {
- return new Object[][] {
- {0, "0"},
- {15, "F"},
- {36, "10"},
- {1200000, "PPXC"},
- {36*36*36*36 - 2, "ZZZY"},
- {36*36*36*36 - 1, "ZZZZ"},
- };
- }
-
- @Test(dataProvider = "fourDigitBase36StrPositiveData")
- public void fourDigitBase36StrPositiveTest(final int toConvert, final String expectedValue) {
- final SamFileHeaderMerger headerMerger = new SamFileHeaderMerger(SAMFileHeader.SortOrder.coordinate, new ArrayList<SAMFileHeader>(),true);
- Assert.assertEquals(expectedValue, headerMerger.positiveFourDigitBase36Str(toConvert));
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/net/sf/picard/sam/SamToFastqTest.java b/src/tests/java/net/sf/picard/sam/SamToFastqTest.java
deleted file mode 100644
index 7f052ed..0000000
--- a/src/tests/java/net/sf/picard/sam/SamToFastqTest.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-
-import net.sf.picard.cmdline.Option;
-import net.sf.picard.fastq.FastqReader;
-import net.sf.picard.fastq.FastqRecord;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMFormatException;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.IOUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Tests for SamToFastq
- */
-public class SamToFastqTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/bam2fastq/paired");
- private static final String CLIPPING_TEST_DATA = "ok/clipping_test.sam";
-
- @DataProvider(name = "okFiles")
- public Object[][] okFiles() {
- return new Object[][] {
- {"ok/sorted-pair.sam"}, // 5 sorted pairs (10 records) - mate1, mate2
- {"ok/sorted-pair-no-rg.sam"}, // 5 sorted pairs (10 records) - mate1, mate2, no read group
- {"ok/last-pair-mates-flipped.sam" }, // 4 pairs, :05 mate2, mate1
- {"ok/first-mate-bof-last-mate-eof.sam"}, // :01 mate1, 4 pairs, :01 mate2
- };
- }
-
-
- @DataProvider(name = "badFiles")
- public Object[][] badFiles() {
- return new Object[][] {
- {"bad/unpaired-mate.sam"} // mate1 without its mate2
- };
- }
-
- private void convertFile(String [] args) {
- SamToFastq samToFq = new SamToFastq();
- Assert.assertEquals(samToFq.instanceMain(args),0);
- }
-
- @Test(dataProvider = "clippingTests")
- public void testClipping(String clippingAction, String bases1_1, String quals1_1, String bases1_2, String quals1_2,
- String bases2_1, String quals2_1, String bases2_2, String quals2_2, String testName) throws IOException {
- final File samFile = new File(TEST_DATA_DIR, CLIPPING_TEST_DATA) ;
- final File f1 = File.createTempFile("clippingtest1", "fastq");
- final File f2 = File.createTempFile("clippingtest2", "fastq");
- f1.deleteOnExit();
- f2.deleteOnExit();
-
- if (clippingAction != null) {
- convertFile(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "FASTQ=" + f1.getAbsolutePath(),
- "SECOND_END_FASTQ=" + f2.getAbsolutePath(),
- "CLIPPING_ACTION=" + clippingAction,
- "CLIPPING_ATTRIBUTE=" + "XT"
- });
- } else {
- convertFile(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "FASTQ=" + f1.getAbsolutePath(),
- "SECOND_END_FASTQ=" + f2.getAbsolutePath(),
- });
- }
-
- Iterator<FastqRecord> it = new FastqReader(f1).iterator();
- FastqRecord first = it.next();
- Assert.assertEquals(first.getReadString(), bases1_1, testName);
- Assert.assertEquals(first.getBaseQualityString(), quals1_1, testName);
- FastqRecord second = it.next();
- Assert.assertEquals(second.getReadString(), bases1_2, testName);
- Assert.assertEquals(second.getBaseQualityString(), quals1_2, testName);
- it = new FastqReader(f2).iterator();
- first = it.next();
- Assert.assertEquals(first.getReadString(), bases2_1, testName);
- Assert.assertEquals(first.getBaseQualityString(), quals2_1, testName);
- second = it.next();
- Assert.assertEquals(second.getReadString(), bases2_2, testName);
- Assert.assertEquals(second.getBaseQualityString(), quals2_2, testName);
- }
-
- @DataProvider(name = "clippingTests")
- public Object[][] clippingTests() {
- return new Object[][] {
- {null, "AAAAAAAAAA", "1111111111", "AAAAAAAAAA", "1111111111", "CCCCCCCCCC", "2222222222", "GGGGGGGGGG", "2222222222", "No clipping test"},
- {"X", "AAAAAAA", "1111111", "AAAAAA", "111111", "CCCCCCCC", "22222222", "GGGGGG", "222222", "Cut clipped bases test"},
- {"N", "AAAAAAANNN", "1111111111", "AAAAAANNNN", "1111111111", "CCCCCCCCNN", "2222222222", "GGGGGGNNNN", "2222222222", "Mask clipped bases test"},
- {"2", "AAAAAAAAAA", "1111111###", "AAAAAAAAAA", "111111####", "CCCCCCCCCC", "22222222##", "GGGGGGGGGG", "222222####", "Change clipped qualities test"}
- };
- }
-
- @Test(dataProvider = "okFiles")
- public void testOkFile(final String samFilename) throws IOException {
- final File samFile = new File(TEST_DATA_DIR,samFilename);
- final File pair1File = newTempFastqFile("pair1");
- final File pair2File = newTempFastqFile("pair2");
-
- convertFile(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "FASTQ=" + pair1File.getAbsolutePath(),
- "SECOND_END_FASTQ=" + pair2File.getAbsolutePath()
- });
-
- // Check that paired fastq files are same size
- final Set<String> outputHeaderSet1 = createFastqReadHeaderSet(pair1File);
- final Set<String> outputHeaderSet2 = createFastqReadHeaderSet(pair2File);
- Assert.assertEquals(outputHeaderSet1.size(), outputHeaderSet2.size());
-
- // Create map of mate pairs from SAM records
- final Map<String,MatePair> map = createSamMatePairsMap(samFile) ;
- Assert.assertEquals(map.size(), outputHeaderSet2.size());
-
- // Ensure that each mate of each pair in SAM file is in the correct fastq pair file
- for (final Map.Entry<String,MatePair> entry : map.entrySet() ) {
- final MatePair mpair = entry.getValue();
- Assert.assertNotNull(mpair.mate1); // ensure we have two mates
- Assert.assertNotNull(mpair.mate2);
- Assert.assertEquals(mpair.mate1.getReadName(),mpair.mate2.getReadName());
- final String readName = mpair.mate1.getReadName() ;
- Assert.assertTrue(outputHeaderSet1.contains(readName+"/1")); // ensure mate is in correct file
- Assert.assertTrue(outputHeaderSet2.contains(readName+"/2"));
- }
- }
-
- @Test(dataProvider = "okFiles")
- public void testOkInterleavedFile(final String samFilename) throws IOException {
- final File samFile = new File(TEST_DATA_DIR,samFilename);
- final File pairFile = newTempFastqFile("pair");
-
- convertFile(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "FASTQ=" + pairFile.getAbsolutePath(),
- "INTERLEAVE=true"
- });
-
- final Set<String> outputHeaderSet = createFastqReadHeaderSet(pairFile);
- // Create map of mate pairs from SAM records
- final Map<String,MatePair> map = createSamMatePairsMap(samFile) ;
- Assert.assertEquals(map.size() * 2, outputHeaderSet.size());
-
- // Ensure that each mate of each pair in SAM file is in the correct fastq pair file
- for (final Map.Entry<String,MatePair> entry : map.entrySet() ) {
- final MatePair mpair = entry.getValue();
- Assert.assertNotNull(mpair.mate1); // ensure we have two mates
- Assert.assertNotNull(mpair.mate2);
- Assert.assertEquals(mpair.mate1.getReadName(),mpair.mate2.getReadName());
- final String readName = mpair.mate1.getReadName() ;
- Assert.assertTrue(outputHeaderSet.contains(readName+"/1")); // ensure mate is in correct file
- Assert.assertTrue(outputHeaderSet.contains(readName+"/2"));
- }
- }
-
-
- @Test (dataProvider = "badFiles", expectedExceptions= SAMFormatException.class)
- public void testBadFile(final String samFilename) throws IOException {
- final File samFile = new File(TEST_DATA_DIR,samFilename);
- final File pair1 = File.createTempFile("tt-pair1.", ".fastq");
- final File pair2 = File.createTempFile("tt-pair2.", ".fastq");
- pair1.deleteOnExit();
- pair2.deleteOnExit();
- convertFile(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "FASTQ=" + pair1.getAbsolutePath(),
- "SECOND_END_FASTQ=" + pair2.getAbsolutePath()
- });
- }
-
- @DataProvider(name = "okGroupedFiles")
- public Object[][] okGroupedFiles() {
- return new Object[][] {
- {"ok/grouped-last-pair-mates-flipped.sam", null, null, new String[]{"rg1","rg2"}},
- };
- }
-
-
- @DataProvider(name = "badGroupedFiles")
- public Object[][] badGroupedFiles() {
- return new Object[][] {
- {"bad/grouped-unpaired-mate.sam", null, null, new String[]{"rg1.fastq","rg2.fastq"}}
- };
- }
-
- @Test(dataProvider = "okGroupedFiles")
- public void testOkGroupedFiles(final String samFilename, final String fastq, final String secondEndFastq,
- final String [] groupFiles) throws IOException {
- final File samFile = new File(TEST_DATA_DIR,samFilename);
- final Map<String, Set<String>> outputSets = new HashMap<String, Set<String>>(groupFiles.length);
-
- SamToFastq samToFq = new SamToFastq();
- String tmpDir = IOUtil.getDefaultTmpDir().getAbsolutePath() + "/";
- String [] args = new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "OUTPUT_PER_RG=true",
- "OUTPUT_DIR=" + tmpDir,
- };
- samToFq.instanceMain(args);
-
- File f1;
- File f2;
- String fname1;
- String fname2;
- String keyName1;
- String keyName2;
- Set<String> outputHeaderSet1;
- Set<String> outputHeaderSet2;
- for(final String groupPUName : groupFiles)
- {
- keyName1 = groupPUName + "_1";
- keyName2 = groupPUName + "_2";
- fname1 = tmpDir + "/" + keyName1 + ".fastq";
- fname2 = tmpDir + "/" + keyName2 + ".fastq";
- f1 = new File(fname1);
- f2 = new File(fname2);
- f1.deleteOnExit();
- f2.deleteOnExit();
- IoUtil.assertFileIsReadable(f1);
- IoUtil.assertFileIsReadable(f2);
-
- // Check that paired fastq files are same size and store them for later comparison
- outputHeaderSet1 = createFastqReadHeaderSet(f1);
- outputHeaderSet2 = createFastqReadHeaderSet(f2);
- outputSets.put(keyName1 , outputHeaderSet1);
- outputSets.put(keyName2, outputHeaderSet2);
- Assert.assertEquals(outputHeaderSet1.size(), outputHeaderSet2.size());
- }
-
- // Create map of read groups and mate pairs from SAM records
- final Map<String, Map<String,MatePair>> map = createPUPairsMap(samFile);
-
- for(final Map.Entry<String, Map<String, MatePair>> groupEntry : map.entrySet()) {
- // Ensure that for each group, each mate of each pair in the SAM file is in the correct fastq pair file
- for (final Map.Entry<String,MatePair> entry : groupEntry.getValue().entrySet() ) {
- final MatePair mpair = entry.getValue();
- outputHeaderSet1 = outputSets.get(groupEntry.getKey() + "_1");
- outputHeaderSet2 = outputSets.get(groupEntry.getKey() + "_2");
-
- Assert.assertNotNull(mpair.mate1); // ensure we have two mates
- Assert.assertNotNull(mpair.mate2);
- Assert.assertEquals(mpair.mate1.getReadName(),mpair.mate2.getReadName());
- final String readName = mpair.mate1.getReadName() ;
- Assert.assertTrue(outputHeaderSet1.contains(readName+"/1")); // ensure mate is in correct file
- Assert.assertTrue(outputHeaderSet2.contains(readName+"/2"));
- }
- }
- }
-
-
- @Test (dataProvider = "badGroupedFiles", expectedExceptions= PicardException.class)
- public void testBadGroupedFile(final String samFilename, final String fastq, final String secondEndFastq,
- final String [] groupFiles) throws IOException {
- final File samFile = new File(TEST_DATA_DIR,samFilename);
- SamToFastq samToFq = new SamToFastq();
- final String tmpDir = samToFq.TMP_DIR + "/";
- final String [] args = new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "OUTPUT_PER_RG=true",
- "OUTPUT_DIR=" + tmpDir,
- };
- samToFq.instanceMain(args);
-
- File f1;
- File f2;
- String fname1;
- String fname2;
- for(final String groupPUName : groupFiles)
- {
- fname1 = tmpDir + groupPUName + "_1.fastq";
- fname2 = tmpDir + groupPUName + "_2.fastq";
- f1 = new File(fname1);
- f2 = new File(fname2);
- f1.deleteOnExit();
- f1.deleteOnExit();
- }
- }
-
- @Test(dataProvider = "trimmedData")
- public void testTrimming(final String samFilename, final int read1Trim,
- final int read1MaxBases, final int expectedRead1Length, final int read2Trim,
- final int read2MaxBases, final int expectedRead2Length) throws IOException {
-
- final File samFile = new File(TEST_DATA_DIR, samFilename);
- final File pair1File = newTempFastqFile("pair1");
- final File pair2File = newTempFastqFile("pair2");
- pair1File.deleteOnExit();
- pair2File.deleteOnExit();
-
- convertFile(new String[]{
- "INPUT=" + samFile.getAbsolutePath(),
- "FASTQ=" + pair1File.getAbsolutePath(),
- "SECOND_END_FASTQ=" + pair2File.getAbsolutePath(),
- "READ1_TRIM=" + read1Trim,
- "READ1_MAX_BASES_TO_WRITE=" + read1MaxBases,
- "READ2_TRIM=" + read2Trim,
- "READ2_MAX_BASES_TO_WRITE=" + read2MaxBases
- });
-
- for (Iterator<FastqRecord> it = new FastqReader(pair1File).iterator(); it.hasNext();) {
- FastqRecord first = it.next();
- Assert.assertEquals(first.getReadString().length(), expectedRead1Length, "Incorrect read length");
- Assert.assertEquals(first.getBaseQualityString().length(), expectedRead1Length, "Incorrect quality string length");
- }
- for (Iterator<FastqRecord> it = new FastqReader(pair2File).iterator(); it.hasNext();) {
- FastqRecord second = it.next();
- Assert.assertEquals(second.getReadString().length(), expectedRead2Length, "Incorrect read length");
- Assert.assertEquals(second.getBaseQualityString().length(), expectedRead2Length, "Incorrect quality string length");
- }
- }
-
- @DataProvider(name = "trimmedData")
- public Object[][] trimmedData() {
- return new Object[][] {
- // There are 13 bases in each of these reads
- {"ok/sorted-pair.sam", 6, 7, 7, 5, 8, 8}, // exact matches for everything
- {"ok/sorted-pair.sam", 7, 7, 6, 3, 8, 8} // fewer or more bases
- };
- }
-
- private Set<String> createFastqReadHeaderSet(final File file) {
- final Set<String> set = new HashSet<String>();
- final FastqReader freader = new FastqReader(file);
- while (freader.hasNext()) {
- final FastqRecord frec = freader.next();
- set.add(frec.getReadHeader());
- }
- return set ;
- }
-
- private Map<String,MatePair> createSamMatePairsMap(final File samFile) throws IOException {
- IoUtil.assertFileIsReadable(samFile);
- final SAMFileReader reader = new SAMFileReader(IoUtil.openFileForReading(samFile));
-
- final Map<String,MatePair> map = new LinkedHashMap<String,MatePair>();
- for (final SAMRecord record : reader ) {
- MatePair mpair = map.get(record.getReadName());
- if (mpair == null) {
- mpair = new MatePair();
- map.put(record.getReadName(), mpair);
- }
- mpair.add(record);
- }
- reader.close();
- return map;
- }
-
-
- private Map<String, Map<String, MatePair>> createPUPairsMap(final File samFile) throws IOException {
- IoUtil.assertFileIsReadable(samFile);
- final SAMFileReader reader = new SAMFileReader(IoUtil.openFileForReading(samFile));
- final Map<String, Map<String, MatePair>> map = new LinkedHashMap<String, Map<String,MatePair>>();
-
- Map<String,MatePair> curFileMap;
- for (final SAMRecord record : reader ) {
- String platformUnit = record.getReadGroup().getPlatformUnit();
- curFileMap = map.get(platformUnit);
- if(curFileMap == null)
- {
- curFileMap = new LinkedHashMap<String, MatePair>();
- map.put(platformUnit, curFileMap);
- }
-
- MatePair mpair = curFileMap.get(record.getReadName());
- if (mpair == null) {
- mpair = new MatePair();
- curFileMap.put(record.getReadName(), mpair);
- }
- mpair.add(record);
- }
- reader.close();
- return map;
- }
-
- class MatePair {
- SAMRecord mate1 ;
- SAMRecord mate2 ;
- void add(final SAMRecord record) {
- if (!record.getReadPairedFlag()) throw new PicardException("Record "+record.getReadName()+" is not paired");
- if (record.getFirstOfPairFlag()) {
- if (mate1 != null) throw new PicardException("Mate 1 already set for record: "+record.getReadName());
- mate1 = record ;
- }
- else if (record.getSecondOfPairFlag()) {
- if (mate2 != null) throw new PicardException("Mate 2 already set for record: "+record.getReadName());
- mate2 = record ;
- }
- else throw new PicardException("Neither FirstOfPairFlag or SecondOfPairFlag is set for a paired record");
- }
- }
-
- private File newTempFastqFile(final String filename) throws IOException {
- if(filename == null) return null;
- final File file = File.createTempFile(filename,".fastq");
- file.deleteOnExit();
- return file;
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/SequenceNameTruncationAndValidationTest.java b/src/tests/java/net/sf/picard/sam/SequenceNameTruncationAndValidationTest.java
deleted file mode 100644
index d4f0a69..0000000
--- a/src/tests/java/net/sf/picard/sam/SequenceNameTruncationAndValidationTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.*;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Test new functionality that truncates sequence names at first whitespace in order to deal
- * with older BAMs that had spaces in sequence names.
- *
- * @author alecw at broadinstitute.org
- */
-public class SequenceNameTruncationAndValidationTest {
- private static File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam");
- @Test(expectedExceptions = {SAMException.class}, dataProvider = "badSequenceNames")
- public void testSequenceRecordThrowsWhenInvalid(final String sequenceName) {
- new SAMSequenceRecord(sequenceName, 123);
- Assert.fail("Should not reach here.");
- }
- @DataProvider(name="badSequenceNames")
- public Object[][] badSequenceNames() {
- return new Object[][] {
- {" "},
- {"\t"},
- {"\n"},
- {"="},
- {"Hi, Mom!"}
- };
- }
-
- @Test(dataProvider = "goodSequenceNames")
- public void testSequenceRecordPositiveTest(final String sequenceName) {
- new SAMSequenceRecord(sequenceName, 123);
- }
- @DataProvider(name="goodSequenceNames")
- public Object[][] goodSequenceNames() {
- return new Object[][] {
- {"Hi, at Mom!"}
- };
- }
-
- @Test(dataProvider = "samFilesWithSpaceInSequenceName")
- public void testSamSequenceTruncation(final String filename) {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, filename));
- for (final SAMSequenceRecord sequence : reader.getFileHeader().getSequenceDictionary().getSequences()) {
- Assert.assertFalse(sequence.getSequenceName().contains(" "), sequence.getSequenceName());
- }
- for (final SAMRecord rec: reader) {
- Assert.assertFalse(rec.getReferenceName().contains(" "));
- }
- }
- @DataProvider(name="samFilesWithSpaceInSequenceName")
- public Object[][] samFilesWithSpaceInSequenceName() {
- return new Object[][] {
- {"sequenceWithSpace.sam"},
- {"sequenceWithSpace.bam"}
- };
- }
-
- @Test(expectedExceptions = {SAMFormatException.class})
- public void testBadRname() {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, "readWithBadRname.sam"));
- for (final SAMRecord rec: reader) {
- }
- Assert.fail("Should not reach here.");
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/ValidateSamFileTest.java b/src/tests/java/net/sf/picard/sam/ValidateSamFileTest.java
deleted file mode 100644
index 0b3fbd2..0000000
--- a/src/tests/java/net/sf/picard/sam/ValidateSamFileTest.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.picard.sam;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.metrics.MetricBase;
-import net.sf.picard.metrics.MetricsFile;
-import net.sf.picard.reference.ReferenceSequence;
-import net.sf.picard.reference.ReferenceSequenceFile;
-import net.sf.picard.util.Histogram;
-import net.sf.samtools.*;
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.util.Arrays;
-import java.util.Iterator;
-
-/**
- * Tests almost all error conditions detected by the sam file validator. The
- * conditions not tested are proactively prevented by sam generation code.
- *
- * @author Doug Voet
- */
-public class ValidateSamFileTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam/ValidateSamFileTest");
-
- @Test
- public void testValidSamFile() throws Exception {
- final SAMFileReader.ValidationStringency saveStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- try {
- final SAMFileReader samReader = new SAMFileReader(new File(TEST_DATA_DIR, "valid.sam"));
- final Histogram<String> results = executeValidation(samReader, null);
- Assert.assertTrue(results.isEmpty());
- } finally {
- SAMFileReader.setDefaultValidationStringency(saveStringency);
- }
- }
-
- @Test
- public void testSortOrder() throws IOException {
- Histogram<String> results = executeValidation(new SAMFileReader(new File(TEST_DATA_DIR, "invalid_coord_sort_order.sam")), null);
- Assert.assertEquals(results.get(SAMValidationError.Type.RECORD_OUT_OF_ORDER.getHistogramString()).getValue(), 1.0);
- results = executeValidation(new SAMFileReader(new File(TEST_DATA_DIR, "invalid_queryname_sort_order.sam")), null);
- Assert.assertEquals(results.get(SAMValidationError.Type.RECORD_OUT_OF_ORDER.getHistogramString()).getValue(), 5.0);
- }
-
- @Test
- public void testVerbose() throws IOException {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
- for (int i=0; i<20; i++) {
- samBuilder.addFrag(String.valueOf(i), 1, i, false);
- }
- for (final SAMRecord record : samBuilder) {
- record.setProperPairFlag(true);
- }
-
- final StringWriter results = new StringWriter();
- final SamFileValidator validator = new SamFileValidator(new PrintWriter(results), 8000);
- validator.setVerbose(true, 10);
- validator.validateSamFileVerbose(samBuilder.getSamReader(), null);
-
- final int lineCount = results.toString().split("\n").length;
- Assert.assertEquals(lineCount, 11);
- }
-
- @Test
- public void testUnpairedRecords() throws IOException {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
- for (int i=0; i<6; i++) {
- samBuilder.addFrag(String.valueOf(i), i, i, false);
- }
- final Iterator<SAMRecord> records = samBuilder.iterator();
- records.next().setProperPairFlag(true);
- records.next().setMateUnmappedFlag(true);
- records.next().setMateNegativeStrandFlag(true);
- records.next().setFirstOfPairFlag(true);
- records.next().setSecondOfPairFlag(true);
- records.next().setMateReferenceIndex(1);
-
- final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null);
-
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_PROPER_PAIR.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_MATE_NEG_STRAND.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_FIRST_OF_PAIR.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_SECOND_OF_PAIR.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_MATE_REF_INDEX.getHistogramString()).getValue(), 1.0);
- }
-
- @Test
- public void testPairedRecords() throws IOException {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
- for (int i=0; i<5; i++) {
- samBuilder.addPair(String.valueOf(i), i, i, i+100);
- }
- final Iterator<SAMRecord> records = samBuilder.iterator();
- records.next().setMateReferenceName("*");
- records.next().setMateAlignmentStart(Integer.MAX_VALUE);
- records.next().setMateAlignmentStart(records.next().getAlignmentStart()+1);
- records.next().setMateNegativeStrandFlag(!records.next().getReadNegativeStrandFlag());
- records.next().setMateReferenceIndex(records.next().getReferenceIndex() + 1);
- records.next().setMateUnmappedFlag(!records.next().getReadUnmappedFlag());
-
-
- final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null);
-
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_ALIGNMENT_START.getHistogramString()).getValue(), 3.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_MATE_UNMAPPED.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_FLAG_MATE_NEG_STRAND.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_FLAG_MATE_UNMAPPED.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_MATE_ALIGNMENT_START.getHistogramString()).getValue(), 2.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.MISMATCH_MATE_REF_INDEX.getHistogramString()).getValue(), 2.0);
- }
-
- @Test(dataProvider = "missingMateTestCases")
- public void testMissingMate(final SAMFileHeader.SortOrder sortOrder) throws IOException {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder(true, sortOrder);
-
- samBuilder.addPair(String.valueOf(1), 1, 1, 101);
- final Iterator<SAMRecord> records = samBuilder.iterator();
- records.next();
- records.remove();
- final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null);
-
- Assert.assertEquals(results.get(SAMValidationError.Type.MATE_NOT_FOUND.getHistogramString()).getValue(), 1.0);
- }
-
- @DataProvider(name = "missingMateTestCases")
- public Object[][] missingMateTestCases() {
- return new Object[][] {
- {SAMFileHeader.SortOrder.coordinate},
- {SAMFileHeader.SortOrder.queryname},
- {SAMFileHeader.SortOrder.unsorted},
- };
- }
-
- @Test
- public void testUnmappedRecords() throws IOException {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
- for (int i=0; i<4; i++) {
- samBuilder.addUnmappedFragment(String.valueOf(i));
- }
- final Iterator<SAMRecord> records = samBuilder.iterator();
- records.next().setReadNegativeStrandFlag(true);
- records.next().setNotPrimaryAlignmentFlag(true);
- records.next().setMappingQuality(10);
- records.next().setCigarString("36M");
-
- final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null);
-
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_NOT_PRIM_ALIGNMENT.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_MAPPING_QUALITY.getHistogramString()).getValue(), 1.0);
- }
-
- @Test
- public void testMappedRecords() throws IOException {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
- for (int i=0; i<2; i++) {
- samBuilder.addFrag(String.valueOf(i), i, i, false);
- }
- final Iterator<SAMRecord> records = samBuilder.iterator();
- records.next().setCigarString("25M3S25M");
- records.next().setReferenceName("*");
-
- final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null);
-
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_CIGAR.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_FLAG_READ_UNMAPPED.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.MISSING_TAG_NM.getHistogramString()).getValue(), 1.0);
- }
-
- @Test
- public void testNmFlagValidation() throws IOException {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
-
- for (int i=0; i<3; i++) {
- samBuilder.addFrag(String.valueOf(i), i, i+1, false);
- }
- final Iterator<SAMRecord> records = samBuilder.iterator();
- records.next().setAttribute(ReservedTagConstants.NM, 4);
-
- // PIC-215: Confirm correct NM value when there is an insertion and a deletion.
- final SAMRecord recordWithInsert = records.next();
- final byte[] sequence = recordWithInsert.getReadBases();
- Arrays.fill(sequence, (byte)'A');
- recordWithInsert.setReadBases(sequence);
- recordWithInsert.setCigarString("1D" + Integer.toString(sequence.length-1) + "M1I");
- recordWithInsert.setAttribute(ReservedTagConstants.NM, 2);
-
- final Histogram<String> results = executeValidation(samBuilder.getSamReader(), new ReferenceSequenceFile() {
- private int index=0;
- public SAMSequenceDictionary getSequenceDictionary() {
- return null;
- }
-
- public ReferenceSequence nextSequence() {
- final byte[] bases = new byte[10000];
- Arrays.fill(bases, (byte) 'A');
- return new ReferenceSequence("foo", index++, bases);
- }
-
- public void reset() {
- this.index = 0;
- }
-
- public boolean isIndexed() { return false; }
-
- public ReferenceSequence getSequence(final String contig) {
- throw new UnsupportedOperationException();
- }
-
- public ReferenceSequence getSubsequenceAt(final String contig, final long start, final long stop) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void close() throws IOException {
- //no-op
- }
- });
-
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_TAG_NM.getHistogramString()).getValue(), 1.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.MISSING_TAG_NM.getHistogramString()).getValue(), 1.0);
- }
-
- @Test(dataProvider = "testMateCigarScenarios")
- public void testMateCigarScenarios(final String scenario, final String inputFile, final SAMValidationError.Type expectedError)
- throws Exception {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, inputFile));
- final Histogram<String> results = executeValidation(reader, null);
- Assert.assertNotNull(results.get(expectedError.getHistogramString()));
- Assert.assertEquals(results.get(expectedError.getHistogramString()).getValue(), 1.0);
- }
-
-
- @DataProvider(name = "testMateCigarScenarios")
- public Object[][] testMateCigarScenarios() {
- return new Object[][] {
- {"invalid mate cigar", "invalid_mate_cigar_string.sam", SAMValidationError.Type.MISMATCH_MATE_CIGAR_STRING},
- {"inappropriate mate cigar", "inappropriate_mate_cigar_string.sam", SAMValidationError.Type.MATE_CIGAR_STRING_INVALID_PRESENCE}
- };
- }
-
- @Test(dataProvider = "testTruncatedScenarios")
- public void testTruncated(final String scenario, final String inputFile, final SAMValidationError.Type expectedError)
- throws Exception {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, inputFile));
- final Histogram<String> results = executeValidation(reader, null);
- Assert.assertNotNull(results.get(expectedError.getHistogramString()));
- Assert.assertEquals(results.get(expectedError.getHistogramString()).getValue(), 1.0);
- }
-
- @DataProvider(name = "testTruncatedScenarios")
- public Object[][] testTruncatedScenarios() {
- return new Object[][] {
- {"truncated bam", "truncated.bam", SAMValidationError.Type.TRUNCATED_FILE},
- {"truncated quals", "truncated_quals.sam", SAMValidationError.Type.MISMATCH_READ_LENGTH_AND_QUALS_LENGTH},
- // TODO: Because validation is turned off when parsing, this error is not detectable currently by validator.
- //{"truncated tag", "truncated_tag.sam", SAMValidationError.Type.TRUNCATED_FILE},
- // TODO: Currently, this is not considered an error. Should it be?
- //{"hanging tab", "hanging_tab.sam", SAMValidationError.Type.TRUNCATED_FILE},
- };
- }
-
- @Test(expectedExceptions = PicardException.class, dataProvider = "testFatalParsingErrors")
- public void testFatalParsingErrors(final String scenario, final String inputFile) throws Exception {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, inputFile));
- executeValidation(reader, null);
- Assert.fail("Exception should have been thrown.");
- }
-
- @DataProvider(name = "testFatalParsingErrors")
- public Object[][] testFatalParsingErrorScenarios() {
- return new Object[][] {
- {"missing fields", "missing_fields.sam"},
- {"zero length read", "zero_length_read.sam"}
- };
- }
-
- @Test
- public void testHeaderVersionValidation() throws Exception {
- final String header = "@HD VN:Hi,Mom! SO:queryname";
- final InputStream strm = new ByteArrayInputStream(StringUtil.stringToBytes(header));
- final SAMFileReader samReader = new SAMFileReader(strm);
- final Histogram<String> results = executeValidation(samReader, null);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()).getValue(), 1.0);
- }
-
- @Test(enabled=false, description="File is actually valid for Standard quality scores so this test fails with an NPE.")
- public void testQualityFormatValidation() throws Exception {
- final SAMFileReader samReader = new SAMFileReader(new File("./testdata/net/sf/picard/util/QualityEncodingDetectorTest/illumina-as-standard.bam"));
- final Histogram<String> results = executeValidation(samReader, null);
- final Histogram<String>.Bin bin = results.get(SAMValidationError.Type.INVALID_QUALITY_FORMAT.getHistogramString());
- final double value = bin.getValue();
- Assert.assertEquals(value, 1.0);
- }
-
- @Test
- public void testCigarOffEndOfReferenceValidation() throws Exception {
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
- samBuilder.addFrag(String.valueOf(0), 0, 1, false);
- final int contigLength = samBuilder.getHeader().getSequence(0).getSequenceLength();
- // Should hang off the end.
- samBuilder.addFrag(String.valueOf(1), 0, contigLength - 1, false);
- final Histogram<String> results = executeValidation(samBuilder.getSamReader(), null);
- Assert.assertNotNull(results.get(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE.getHistogramString()));
- Assert.assertEquals(results.get(SAMValidationError.Type.CIGAR_MAPS_OFF_REFERENCE.getHistogramString()).getValue(), 1.0);
- }
-
- @Test(expectedExceptions = SAMFormatException.class)
- public void testConflictingTags() throws Exception {
- final String header = "@HD VN:1.0 SO:queryname SO:coordinate";
- final InputStream strm = new ByteArrayInputStream(StringUtil.stringToBytes(header));
- final SAMFileReader samReader = new SAMFileReader(strm);
- Assert.fail("Exception should have been thrown.");
- }
-
- @Test
- public void testRedundantTags() throws Exception {
- final String header = "@HD VN:1.0 SO:coordinate SO:coordinate";
- final InputStream strm = new ByteArrayInputStream(StringUtil.stringToBytes(header));
- final SAMFileReader samReader = new SAMFileReader(strm);
- Assert.assertEquals(SAMFileHeader.SortOrder.coordinate, samReader.getFileHeader().getSortOrder());
- }
-
- @Test
- public void testHeaderValidation() throws Exception {
- final SAMFileReader.ValidationStringency saveStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- try {
- final SAMFileReader samReader = new SAMFileReader(new File(TEST_DATA_DIR, "buggyHeader.sam"));
- final Histogram<String> results = executeValidation(samReader, null);
- Assert.assertEquals(results.get(SAMValidationError.Type.UNRECOGNIZED_HEADER_TYPE.getHistogramString()).getValue(), 3.0);
- Assert.assertEquals(results.get(SAMValidationError.Type.HEADER_TAG_MULTIPLY_DEFINED.getHistogramString()).getValue(), 1.0);
- } finally {
- SAMFileReader.setDefaultValidationStringency(saveStringency);
- }
- }
-
- @Test
- public void testPlatformMissing() throws Exception {
- final SAMFileReader.ValidationStringency saveStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- try {
- final SAMFileReader samReader = new SAMFileReader(new File(TEST_DATA_DIR, "missing_platform_unit.sam"));
- final Histogram<String> results = executeValidation(samReader, null);
- Assert.assertEquals(results.get(SAMValidationError.Type.MISSING_PLATFORM_VALUE.getHistogramString()).getValue(), 1.0);
- } finally {
- SAMFileReader.setDefaultValidationStringency(saveStringency);
- }
- }
-
- @Test
- public void testDuplicateRGIDs() throws Exception {
- final SAMFileReader.ValidationStringency saveStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- try {
- final SAMFileReader samReader = new SAMFileReader(new File(TEST_DATA_DIR, "duplicate_rg.sam"));
- final Histogram<String> results = executeValidation(samReader, null);
- Assert.assertEquals(results.get(SAMValidationError.Type.DUPLICATE_READ_GROUP_ID.getHistogramString()).getValue(), 1.0);
- } finally {
- SAMFileReader.setDefaultValidationStringency(saveStringency);
- }
- }
-
- @Test
- public void testIndexFileValidation() throws Exception {
- final SAMFileReader.ValidationStringency saveStringency = SAMFileReader.getDefaultValidationStringency();
- SAMFileReader.setDefaultValidationStringency(SAMFileReader.ValidationStringency.SILENT);
- try {
- final SAMFileReader samReader = new SAMFileReader(new File(TEST_DATA_DIR, "bad_index.bam"));
- samReader.enableIndexCaching(true);
- final Histogram<String> results = executeValidation(samReader, null);
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_INDEX_FILE_POINTER.getHistogramString()).getValue(), 1.0);
- } finally {
- SAMFileReader.setDefaultValidationStringency(saveStringency);
- }
- }
-
- private Histogram<String> executeValidation(final SAMFileReader samReader, final ReferenceSequenceFile reference) throws IOException {
- final File outFile = File.createTempFile("validation", ".txt");
- outFile.deleteOnExit();
- final PrintWriter out = new PrintWriter(outFile);
- new SamFileValidator(out, 8000).setValidateIndex(true).validateSamFileSummary(samReader, reference);
- final LineNumberReader reader = new LineNumberReader(new FileReader(outFile));
- if (reader.readLine().equals("No errors found")) {
- return new Histogram<String>();
- }
- final MetricsFile<MetricBase, String> outputFile = new MetricsFile<MetricBase, String>();
- outputFile.read(new FileReader(outFile));
- Assert.assertNotNull(outputFile.getHistogram());
- return outputFile.getHistogram();
- }
-
- @Test(dataProvider = "headerVersions")
- public void testHeaderVersion(final String version, final boolean expectValid) throws Exception {
- final File samFile = File.createTempFile("validateHeader.", ".sam");
- samFile.deleteOnExit();
- final PrintWriter pw = new PrintWriter(samFile);
- pw.println("@HD\tVN:" + version);
- pw.close();
- final SAMFileReader reader = new SAMFileReader(samFile);
- final Histogram<String> results = executeValidation(reader, null);
- if (expectValid) Assert.assertNull(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()));
- else {
- Assert.assertNotNull(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()));
- Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_VERSION_NUMBER.getHistogramString()).getValue(), 1.0);
- }
- }
-
- @DataProvider(name = "headerVersions")
- public Object[][] testHeaderVersionScenarios() {
- return new Object[][] {
- {"1.0", true},
- {"1.3", true},
- {"1.4", true},
- {"1.5", false},
- };
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/sam/ViewSamTest.java b/src/tests/java/net/sf/picard/sam/ViewSamTest.java
deleted file mode 100644
index 54d05c8..0000000
--- a/src/tests/java/net/sf/picard/sam/ViewSamTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.sam;
-
-import net.sf.samtools.util.AsciiWriter;
-import net.sf.samtools.util.BufferedLineReader;
-import net.sf.samtools.util.LineReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-
-public class ViewSamTest {
- /**
- * Confirm that ViewSam retains whatever version number was in the input header.
- */
- @Test
- public void testHeaderVersion() throws Exception {
- final String oldVersionHeader = "@HD\tVN:1.3\tSO:unsorted";
- final File inputSam = File.createTempFile("ViewSamTest.input.", ".sam");
- inputSam.deleteOnExit();
- final AsciiWriter writer = new AsciiWriter(new FileOutputStream(inputSam));
- writer.write(oldVersionHeader);
- writer.write("\n");
- writer.close();
- final File viewSamOutputFile = File.createTempFile("ViewSamTest.output.", ".sam");
- viewSamOutputFile.deleteOnExit();
- final ViewSam viewSam = new ViewSam();
- viewSam.INPUT = inputSam;
- final PrintStream viewSamPrintStream = new PrintStream(viewSamOutputFile);
- Assert.assertEquals(viewSam.writeSamText(viewSamPrintStream), 0);
- viewSamPrintStream.close();
- final LineReader viewSamInputReader = new BufferedLineReader(new FileInputStream(viewSamOutputFile));
- Assert.assertEquals(viewSamInputReader.readLine(), oldVersionHeader);
- }
-}
diff --git a/src/tests/java/net/sf/picard/sam/testers/CleanSamTester.java b/src/tests/java/net/sf/picard/sam/testers/CleanSamTester.java
deleted file mode 100644
index ee6997a..0000000
--- a/src/tests/java/net/sf/picard/sam/testers/CleanSamTester.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package net.sf.picard.sam.testers;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.sam.CleanSam;
-import net.sf.picard.sam.SamFileValidator;
-import net.sf.picard.sam.testers.SamFileTester;
-import net.sf.samtools.*;
-import net.sf.samtools.util.TestUtil;
-import org.testng.Assert;
-
-import java.io.PrintWriter;
-import java.util.Arrays;
-
-/**
- * This class is the extension of the SamFileTester to test CleanSam with SAM files generated on the fly.
- */
-public class CleanSamTester extends SamFileTester {
- private final String expectedCigar;
- private final CleanSam program = new CleanSam();
-
- public CleanSamTester(final String expectedCigar, final int readLength, final int defaultChromosomeLength) {
- super(readLength, true, defaultChromosomeLength);
- this.expectedCigar = expectedCigar;
- }
-
-
- protected void test() {
- try {
- final SamFileValidator validator = new SamFileValidator(new PrintWriter(System.out), 8000);
-
- // Validate it has the expected cigar
- validator.setIgnoreWarnings(true);
- validator.setVerbose(true, 1000);
- validator.setErrorsToIgnore(Arrays.asList(SAMValidationError.Type.MISSING_READ_GROUP));
- SAMFileReader samReader = new SAMFileReader(getOutput());
- samReader.setValidationStringency(SAMFileReader.ValidationStringency.LENIENT);
- final SAMRecordIterator iterator = samReader.iterator();
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- Assert.assertEquals(rec.getCigarString(), expectedCigar);
- if (SAMUtils.hasMateCigar(rec)) {
- Assert.assertEquals(SAMUtils.getMateCigarString(rec), expectedCigar);
- }
- }
- samReader.close();
-
- // Run validation on the output file
- samReader = new SAMFileReader(getOutput());
- final boolean validated = validator.validateSamFileVerbose(samReader, null);
- samReader.close();
- Assert.assertTrue(validated, "ValidateSamFile failed");
- } finally {
- TestUtil.recursiveDelete(getOutputDir());
- }
- }
-
- @Override
- protected CommandLineProgram getProgram() {
- return program;
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/sam/testers/MarkDuplicatesTester.java b/src/tests/java/net/sf/picard/sam/testers/MarkDuplicatesTester.java
deleted file mode 100644
index f8ad0a9..0000000
--- a/src/tests/java/net/sf/picard/sam/testers/MarkDuplicatesTester.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package net.sf.picard.sam.testers;
-
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.sam.MarkDuplicates;
-import net.sf.picard.sam.testers.SamFileTester;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.TestUtil;
-import org.testng.Assert;
-
-import java.io.File;
-
-/**
- * This class is an extension of SamFileTester used to test MarkDuplicates with SAM files generated on the fly.
- */
-public class MarkDuplicatesTester extends SamFileTester {
-
- private final MarkDuplicates program = new MarkDuplicates();
-
- public MarkDuplicatesTester() {
- super(50, true);
-
- final File metrics = new File(getOutputDir(), "metrics.txt");
- addArg("METRICS_FILE=" + metrics);
- }
-
- @Override
- public void test() {
- try {
- // Read the output and check the duplicate flag
- final SAMFileReader reader = new SAMFileReader(getOutput());
- for (final SAMRecord record : reader) {
- final String key = samRecordToDuplicatesFlagsKey(record);
- Assert.assertTrue(this.duplicateFlags.containsKey(key));
- final boolean value = this.duplicateFlags.get(key);
- this.duplicateFlags.remove(key);
- if (value != record.getDuplicateReadFlag()) {
- System.err.println("Mismatching read:");
- System.err.print(record.getSAMString());
- }
- Assert.assertEquals(record.getDuplicateReadFlag(), value);
- }
- reader.close();
- } finally {
- TestUtil.recursiveDelete(getOutputDir());
- }
- }
-
- @Override
- protected CommandLineProgram getProgram() {
- return program;
- }
-}
-
diff --git a/src/tests/java/net/sf/picard/sam/testers/SamFileTester.java b/src/tests/java/net/sf/picard/sam/testers/SamFileTester.java
deleted file mode 100644
index d92292c..0000000
--- a/src/tests/java/net/sf/picard/sam/testers/SamFileTester.java
+++ /dev/null
@@ -1,224 +0,0 @@
-package net.sf.picard.sam.testers;
-
-import net.sf.picard.cmdline.CommandLineProgram;
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.SAMRecordSetBuilder;
-import net.sf.samtools.*;
-import org.testng.Assert;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Abstract class for doing basic on the fly SAM file testing.
- */
-public abstract class SamFileTester {
-
- public static final String TEST_DATA_BASE_DIR = "testdata/net/sf/picard/sam/";
- private final SAMRecordSetBuilder samRecordSetBuilder;
- protected final Map<String, Boolean> duplicateFlags = new HashMap<String, Boolean>();
- private File outputDir;
- private File output;
- private int readNameCounter = 0;
- private boolean noMateCigars = false;
- private boolean deleteOnExit = true;
- private final ArrayList<String> args = new ArrayList<String>();
-
- public SamFileTester(final int readLength, final boolean deleteOnExit, final int defaultChromosomeLength) {
- this.deleteOnExit = deleteOnExit;
- this.samRecordSetBuilder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate, true, defaultChromosomeLength);
- samRecordSetBuilder.setReadLength(readLength);
- setOutputDir();
- }
-
- public SamFileTester(final int readLength, final boolean deleteOnExit) {
- this.deleteOnExit = deleteOnExit;
- this.samRecordSetBuilder = new SAMRecordSetBuilder();
- samRecordSetBuilder.setReadLength(readLength);
- setOutputDir();
- }
-
- public File getOutput() {
- return output;
- }
-
- public void addArg(final String arg) {
- args.add(arg);
- }
-
- public File getOutputDir() {
- return outputDir;
- }
-
- private void setOutputDir() {
- this.outputDir = IoUtil.createTempDir(this.getClass().getSimpleName() + ".", ".tmp");
- if(deleteOnExit){
- outputDir.deleteOnExit();
- }
- }
-
- public void setNoMateCigars(final boolean value) {
- this.noMateCigars = value;
- }
-
- protected String samRecordToDuplicatesFlagsKey(final SAMRecord record) {
- String readName = record.getReadName()
- + "-"
- + record.getReadPairedFlag()
- + "-";
- if (record.getReadPairedFlag()) {
- readName += record.getFirstOfPairFlag()
- + "-"
- + record.getSecondOfPairFlag();
- } else {
- readName += "false-false";
- }
- return readName;
- }
- // Below are a bunch of utility methods for adding records to the SAMRecordSetBuilder
- public void addUnmappedFragment(final int referenceSequenceIndex,
- final int defaultQualityScore) {
- addFragment(referenceSequenceIndex, -1, true, false, null, null, defaultQualityScore);
- }
-
- public void addUnmappedFragment(final int referenceSequenceIndex,
- final String qualityString){
- addFragment(referenceSequenceIndex, -1, true, false, null, qualityString, -1);
- }
-
- public void addUnmappedPair(final int referenceSequenceIndex,
- final int defaultQualityScore) {
- addMatePair(referenceSequenceIndex, -1, -1, true, true, false, false, null, null, false, false, false, defaultQualityScore);
- }
-
- public void addMappedFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean isDuplicate,
- final int defaultQualityScore) {
- addFragment(referenceSequenceIndex, alignmentStart, false, isDuplicate, null, null, defaultQualityScore);
- }
-
- public void addMappedFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean isDuplicate, final String cigar,
- final int defaultQualityScore) {
- addFragment(referenceSequenceIndex, alignmentStart, false, isDuplicate, cigar, null, defaultQualityScore);
- }
-
- public void addMappedFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean isDuplicate, final String cigar,
- final String qualityString,
- final int defaultQualityScore) {
- addFragment(referenceSequenceIndex, alignmentStart, false, isDuplicate, cigar, qualityString, defaultQualityScore);
- }
-
- public void addMappedPair(final int referenceSequenceIndex,
- final int alignmentStart1,
- final int alignmentStart2,
- final boolean isDuplicate1,
- final boolean isDuplicate2,
- final int defaultQualityScore) {
- addMappedPair(referenceSequenceIndex, alignmentStart1, alignmentStart2, isDuplicate1, isDuplicate2, null, null,
- false, defaultQualityScore);
- }
-
- public void addMappedPair(final int referenceSequenceIndex,
- final int alignmentStart1,
- final int alignmentStart2,
- final boolean isDuplicate1,
- final boolean isDuplicate2,
- final String cigar1,
- final String cigar2,
- final boolean firstOnly,
- final int defaultQualityScore) {
- addMappedPair(referenceSequenceIndex, alignmentStart1, alignmentStart2, isDuplicate1, isDuplicate2, cigar1,
- cigar2, false, true, firstOnly, defaultQualityScore);
- }
-
- public void addMappedPair(final int referenceSequenceIndex,
- final int alignmentStart1,
- final int alignmentStart2,
- final boolean isDuplicate1,
- final boolean isDuplicate2,
- final String cigar1,
- final String cigar2,
- final boolean strand1,
- final boolean strand2,
- final boolean firstOnly,
- final int defaultQualityScore) {
- addMatePair(referenceSequenceIndex, alignmentStart1, alignmentStart2, false, false, isDuplicate1, isDuplicate2, cigar1, cigar2,
- strand1, strand2, firstOnly, defaultQualityScore);
- }
-
- private void addFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean recordUnmapped, final boolean isDuplicate, final String cigar,
- final String qualityString, final int defaultQualityScore) {
- final SAMRecord record = samRecordSetBuilder.addFrag("READ" + readNameCounter++, referenceSequenceIndex, alignmentStart, false,
- recordUnmapped, cigar, qualityString, defaultQualityScore);
-
- this.duplicateFlags.put(samRecordToDuplicatesFlagsKey(record), isDuplicate);
- }
-
- public void addMatePair(final int referenceSequenceIndex,
- final int alignmentStart1,
- final int alignmentStart2,
- final boolean record1Unmapped,
- final boolean record2Unmapped,
- final boolean isDuplicate1,
- final boolean isDuplicate2,
- final String cigar1,
- final String cigar2,
- final boolean strand1,
- final boolean strand2,
- final boolean firstOnly,
- final int defaultQuality) {
- final List<SAMRecord> samRecordList = samRecordSetBuilder.addPair("READ" + readNameCounter++, referenceSequenceIndex, alignmentStart1, alignmentStart2,
- record1Unmapped, record2Unmapped, cigar1, cigar2, strand1, strand2, defaultQuality);
-
- final SAMRecord record1 = samRecordList.get(0);
- final SAMRecord record2 = samRecordList.get(1);
-
- if (this.noMateCigars) {
- record1.setAttribute("MC", null);
- record2.setAttribute("MC", null);
- }
-
- if (firstOnly) {
- samRecordSetBuilder.getRecords().remove(record2);
- }
-
- this.duplicateFlags.put(samRecordToDuplicatesFlagsKey(record1), isDuplicate1);
- this.duplicateFlags.put(samRecordToDuplicatesFlagsKey(record2), isDuplicate2);
- }
-
- protected abstract void test();
-
- protected abstract CommandLineProgram getProgram();
-
- /**
- * Sets up the basic command line arguments for input and output and runs instanceMain.
- */
- public void runTest() {
- if (getProgram() != null) {
- final File input = createInputFile();
-
- output = new File(outputDir, "output.sam");
- args.add("INPUT=" + input.getAbsoluteFile());
- args.add("OUTPUT=" + output.getAbsoluteFile());
- Assert.assertEquals(getProgram().instanceMain(args.toArray(new String[args.size()])), 0);
- }
- test();
- }
-
- private File createInputFile() {
- // Create the input file
- final File input = new File(outputDir, "input.sam");
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(samRecordSetBuilder.getHeader(), true, input);
- for (final SAMRecord record : samRecordSetBuilder.getRecords()) {
- writer.addAlignment(record);
- }
- writer.close();
- return input;
- }
-
- public SAMFileReader getInput(){
- return samRecordSetBuilder.getSamReader();
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/net/sf/picard/util/CigarUtilTest.java b/src/tests/java/net/sf/picard/util/CigarUtilTest.java
deleted file mode 100644
index 42bf2d2..0000000
--- a/src/tests/java/net/sf/picard/util/CigarUtilTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.Cigar;
-import net.sf.samtools.CigarElement;
-import net.sf.samtools.TextCigarCodec;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Basic positive tests for testing cigar string clipping
- *
- * @author Martha Borkan mborkan at broadinstitute.org
- */
-public class CigarUtilTest {
-
- TextCigarCodec codec = TextCigarCodec.getSingleton();
-
- @Test(dataProvider="clipData")
- public void basicTest(final String testName, final int start, final String inputCigar, final boolean negativeStrand,
- final int clipPosition,
- final String expectedCigar, final int expectedAdjustedStart) throws IOException {
- List<CigarElement> cigar = codec.decode(inputCigar).getCigarElements();
- if (negativeStrand){
- List<CigarElement> copiedList = new ArrayList<CigarElement>(cigar);
- Collections.reverse(copiedList);
- cigar = copiedList;
- }
- List<CigarElement> result = CigarUtil.softClipEndOfRead( clipPosition, cigar);
- Cigar newCigar = new Cigar(result);
- Cigar oldCigar = new Cigar(cigar);
- if (negativeStrand){
- Collections.reverse(result);
- newCigar = new Cigar(result);
- int oldLength = oldCigar.getReferenceLength();
- int newLength = newCigar.getReferenceLength();
- int sizeChange = oldLength - newLength;
- //Assert.assertEquals(sizeChange, numClippedBases + adjustment, testName + " sizeChange == numClippedBases");
- Assert.assertEquals(start + sizeChange, expectedAdjustedStart, sizeChange + " " + testName);
- Assert.assertTrue(sizeChange >= 0, "sizeChange >= 0. " + sizeChange);
- }
- Assert.assertEquals (codec.encode(newCigar), expectedCigar, testName);
- Assert.assertEquals(newCigar.getReadLength(), oldCigar.getReadLength());
- Assert.assertNull(newCigar.isValid(testName, -1));
- }
-
- @DataProvider(name = "clipData")
- private Object[][] getCigarClippingTestData() {
- // numClippedBases = (readLength - clipPosition) +1
- return new Object[][]{
- {"Test 1:simple + strand", 100, "50M", false, 43, "42M8S", 100},
- {"Test 1s:+ strand already clipped", 100, "42M8S", false, 43, "42M8S", 100},
- {"Test 2:simple - strand", 100, "50M", true, 41, "10S40M", 110},
- {"Test 3:boundary + strand", 100, "42M3D8M", false, 43, "42M8S", 100},
- {"Test 3s:boundary + strand", 100, "42M3D8S", false, 43, "42M8S", 100},
- {"Test 3x:stutter + strand", 100, "42M2D1D8M", false, 43, "42M8S", 100},
- {"Test 3y:stutter + strand", 100, "42M1D2D8M", false, 43, "42M8S", 100},
- {"Test 3a:boundary + strand", 100, "42M1D8M", false, 43, "42M8S", 100},
- {"Test 4:boundary - strand", 98, "10M2D40M", true, 41, "10S40M", 110},
- {"Test 5:deletion + strand", 100, "44M1D6M", false, 43, "42M8S", 110},
- {"Test 6:deletion - strand", 98, "6M2D44M", true, 41, "10S40M", 110},
-
- {"Test 7:insertion + strand", 100, "42M3I5M", false, 43, "42M8S", 100},
- {"Test 8:insertion - strand", 102, "8M2I40M", true, 41, "10S40M", 110},
- {"Test 9:insertion within + strand", 100, "44M2I4M", false, 43, "42M8S", 100},
- {"Test 9x:insertion stutter within + strand", 100, "44M2I2I2M", false, 43, "42M8S", 100},
- {"Test 10:insertion within - strand", 100, "3M3I44M", true, 41, "10S40M", 107},
- {"Test 11:insertion straddling + strand", 100, "40M4I6M", false, 43, "40M10S", 100},
- {"Test 11s:insertion straddling + strand", 100, "40M4I6S", false, 43, "40M10S", 100},
- {"Test 11a:insertion straddling + strand", 100, "40M2I8M", false, 43, "40M10S", 100},
- {"Test 12:insertion straddling - strand", 104, "4M4I42M", true, 41, "10S40M", 110},
- {"Test 12a:insertion straddling - strand", 102, "8M2I40M", true, 41, "10S40M", 110},
-
- {"Test 13:deletion before clip + strand", 100, "10M5D35M", false, 38, "10M5D27M8S", 100},
- {"Test 14:deletion before clip - strand", 100, "35M5D10M", true, 36, "10S25M5D10M", 110},
- {"Test 15:insertion before clip + strand", 100, "10M5I35M", false, 43, "10M5I27M8S", 100},
- {"Test 16:insertion before clip - strand", 100, "16M5I29M", true, 41, "10S6M5I29M", 110},
-
- {"Test 17:second, earlier clip", 100, "48M2S", false, 43, "42M8S", 100},
- {"Test 17s:second, earlier clip", 100, "2S48M", true, 43, "8S42M", 106},
- {"Test 18:second, later clip", 100, "42M8S", false, 48, "42M8S", 100},
- {"Test 18s:second, later clip", 100, "8S42M", true, 48, "8S42M", 100},
- };
- }
-
- @Test(dataProvider="addData")
- public void addingSoftClippedBasesTest(final String testName, final String cigar, final boolean negativeStrand,
- final int threePrimeEnd, final int fivePrimeEnd, final String expectedCigar) throws IOException {
-
- Assert.assertEquals(CigarUtil.addSoftClippedBasesToEndsOfCigar(codec.decode(cigar), negativeStrand,
- threePrimeEnd, fivePrimeEnd).toString(), expectedCigar, testName);
- }
-
- @DataProvider(name = "addData")
- private Object[][] getCigarAddingTestData() {
- // numClippedBases = (readLength - clipPosition) +1
- return new Object[][]{
- {"Add to 5' end only, +", "36M", false, 0, 5, "5S36M"},
- {"Add to 5' end only, -", "30M1I5M", true, 0, 5, "30M1I5M5S"},
- {"Add to 3' end only, +", "26M", false, 3, 0, "26M3S"},
- {"Add to 3' end only, -", "19M3D7M", true, 3, 0, "3S19M3D7M"},
- {"Add to 5' end already soft-clipped, +", "6S20M", false, 0, 5, "11S20M"},
- {"Add to 5' end already soft-clipped, -", "28M4S", true, 0, 5, "28M9S"},
- {"Add to 3' end already soft-clipped, +", "15M5I10M2S", false, 7, 0, "15M5I10M9S"},
- {"Add to 3' end already soft-clipped, -", "2S34M", true, 6, 0, "8S34M"},
- {"Add to 5' and 3' ends, no merging, +", "36M", false, 15, 30, "30S36M15S"},
- {"Add to 5' and 3' ends, no merging, -", "36M", true, 15, 30, "15S36M30S"},
- {"Add to 5' and 3' ends, merging 5' end, +", "5S31M", false, 15, 30, "35S31M15S"},
- {"Add to 5' and 3' ends, merging 5' end, -", "31M5S", true, 15, 30, "15S31M35S"},
- {"Add to 5' and 3' ends, merging 3' end, +", "20M6S", false, 10, 12, "12S20M16S"},
- {"Add to 5' and 3' ends, merging 3' end, -", "6S25M", true, 10, 12, "16S25M12S"},
- {"Add to 5' and 3' ends, merging both ends, +", "3S31M2S", false, 10, 15, "18S31M12S"},
- {"Add to 5' and 3' ends, merging both ends, -", "2S26M8S", true, 10, 12, "12S26M20S"}
- };
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/util/ClippingUtilityTest.java b/src/tests/java/net/sf/picard/util/ClippingUtilityTest.java
deleted file mode 100644
index 2fe7ff9..0000000
--- a/src/tests/java/net/sf/picard/util/ClippingUtilityTest.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.sam.ReservedTagConstants;
-import net.sf.picard.util.IlluminaUtil.IlluminaAdapterPair;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.util.SequenceUtil;
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- */
-public class ClippingUtilityTest {
-
- @Test(dataProvider="clipTestData")
- public void testBasicClip(final String testName, final String read, final String clip, final int minMatch, final double errRate, final int expected) {
- final byte[] r = (read == null) ? null : StringUtil.stringToBytes(read);
- final byte[] c = (clip == null) ? null : StringUtil.stringToBytes(clip);
-
- final int result = ClippingUtility.findIndexOfClipSequence(r, c, minMatch, errRate);
- Assert.assertEquals(result, expected, testName);
-
- }
-
-
-
- @Test(dataProvider = "clipTestData")
- public void testSingleEndSamRecordClip(final String testName, final String read, final String clip, final int minMatch,
- final double errRate, final int expected) {
- if (read == null) return; // Silly case
-
- final SingleEndAdapter adapter = new SingleEndAdapter(testName, clip);
-
- for (final boolean reverse : new boolean[]{false, true}) {
- final SAMRecord rec = new SAMRecord(null);
- if (reverse) {
- rec.setReadString(SequenceUtil.reverseComplement(read));
- rec.setReadNegativeStrandFlag(true);
- } else {
- rec.setReadString(read);
- }
-
- final AdapterPair matchedAdapter = ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch, errRate, adapter);
- if (expected == -1) {
- Assert.assertNull(matchedAdapter, testName);
- Assert.assertNull(rec.getAttribute(ReservedTagConstants.XT), testName);
- } else {
- Assert.assertEquals(matchedAdapter, adapter, testName);
- Assert.assertEquals(rec.getAttribute(ReservedTagConstants.XT), expected + 1, testName);
-
- // Test that if minMatch is decreased, it still matches
- for (int i = 1; i < minMatch - 3; ++i) {
- Assert.assertEquals(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch - i, errRate, adapter), adapter, testName);
- }
-
- // Skip this test for high error rates, because almost anything will match.
- if (errRate < 0.5) {
- // Test that if minMatch is increased, it now fails to match
- Assert.assertNull(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch + 1, errRate, adapter), testName);
-
- // Test that if errRate is increased, it still matches
- Assert.assertNotNull(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch, errRate + 0.1, adapter), testName);
- }
-
- // Very low error threshold should cause match failure
- Assert.assertNull(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch, 0.01, adapter), testName);
- }
- }
-
- }
-
- @Test(dataProvider="clipPairedTestData")
- public void testPairedEndClip(final String testName, final String read1, final String read2, final AdapterPair expected) {
-
- final SAMRecord rec1 = new SAMRecord(new SAMFileHeader());
- rec1.setReadString(read1);
- rec1.setFirstOfPairFlag(true);
- final SAMRecord rec2 = new SAMRecord(new SAMFileHeader());
- rec2.setReadString(read2);
- rec2.setSecondOfPairFlag(true);
-
- final AdapterPair result = ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2,
- IlluminaAdapterPair.INDEXED, IlluminaAdapterPair.PAIRED_END);
- if (result != null) {
- Assert.assertEquals(result.getName(), expected.getName(), testName);
- }
- else {
- Assert.assertNull(expected, testName);
- }
- }
-
- @Test
- public void testOneSidedMatchSupersededByTwoSidedMatch() {
- final int readLength = 36;
- final int adapterLength = 30;
- final String read1 = patchAdapterSubsequenceIntoRead(makeBogusReadString(readLength), IlluminaAdapterPair.SINGLE_END.get3PrimeAdapterInReadOrder(), adapterLength);
- final String read2 = patchAdapterSubsequenceIntoRead(makeBogusReadString(readLength), IlluminaAdapterPair.SINGLE_END.get5PrimeAdapterInReadOrder(), adapterLength);
- final SAMRecord rec1 = new SAMRecord(null); rec1.setReadString(read1);
- final SAMRecord rec2 = new SAMRecord(null); rec2.setReadString(read2);
- AdapterPair result = ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2, adapterLength - 2, 0.1,
- IlluminaAdapterPair.PAIRED_END, IlluminaAdapterPair.SINGLE_END);
- Assert.assertEquals(result, IlluminaAdapterPair.SINGLE_END);
-
- // Confirm that without SINGLE_END, PAIRED_END would one-sided match, if match length is short enough.
- result = ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2, adapterLength/2, 0.1, IlluminaAdapterPair.PAIRED_END);
- Assert.assertEquals(result, IlluminaAdapterPair.PAIRED_END);
-
- // However, without shorter match length, one-sided match will fail.
- Assert.assertNull(ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2, adapterLength - 2, 0.1, IlluminaAdapterPair.PAIRED_END));
- }
-
- @Test(dataProvider = "testAdapterInAllReadPositionsDataProvider")
- public void testAdapterInAllReadPositions(final int readLength) {
- final int minAdapterLength = 6;
- for (final IlluminaAdapterPair adapterPair : IlluminaAdapterPair.values()) {
- final AdapterMarker marker = new AdapterMarker(adapterPair);
- for (int adapterPosition = 0; adapterPosition < readLength; ++adapterPosition) {
- final SAMRecord rec = createSamRecordWithAdapterSequence(readLength, adapterPair, adapterPosition);
- final AdapterPair matchedAdapter = ClippingUtility.adapterTrimIlluminaSingleRead(rec, minAdapterLength, 0.1, adapterPair);
- final Object xt = rec.getAttribute(ReservedTagConstants.XT);
-
- rec.setAttribute(ReservedTagConstants.XT, null);
- final AdapterPair truncatedAdapter = marker.adapterTrimIlluminaSingleRead(rec, minAdapterLength, 0.1);
- final Object xtFromMarker = rec.getAttribute(ReservedTagConstants.XT);
-
- if (adapterPosition <= readLength - minAdapterLength) {
- Assert.assertEquals(matchedAdapter, adapterPair, "Failed at position " + adapterPosition);
- Assert.assertEquals((Integer)xt, Integer.valueOf(adapterPosition + 1));
- Assert.assertNotNull(truncatedAdapter);
- Assert.assertEquals((Integer)xtFromMarker, Integer.valueOf(adapterPosition + 1));
- } else {
- Assert.assertNull(matchedAdapter);
- Assert.assertNull(xt);
- Assert.assertNull(truncatedAdapter);
- Assert.assertNull(xtFromMarker);
- }
- }
- }
- }
-
- private SAMRecord createSamRecordWithAdapterSequence(final int readLength, final IlluminaAdapterPair adapterPair, final int adapterPosition) {
- final String adapterString = adapterPair.get3PrimeAdapterInReadOrder();
- final int replacementLength = Math.min(adapterString.length(), readLength - adapterPosition);
- final String adapterSubstring = adapterString.substring(0, replacementLength);
- final String readBases = replaceSubstring(makeBogusReadString(readLength), adapterSubstring, adapterPosition, adapterSubstring.length());
- final SAMRecord rec = new SAMRecord(null);
- rec.setReadString(readBases);
- return rec;
- }
-
- @DataProvider(name="testAdapterInAllReadPositionsDataProvider")
- public Object[][] testAdapterInAllReadPositionsDataProvider() {
- return new Object[][]{{100}, {36}};
- }
-
- @DataProvider(name="clipTestData")
- public Object[][] getClipTestData() {
- final String FORWARD = IlluminaAdapterPair.PAIRED_END.get3PrimeAdapter();
- final String SE_FORWARD = IlluminaAdapterPair.SINGLE_END.get3PrimeAdapter();
- final String REVERSE = IlluminaAdapterPair.PAIRED_END.get5PrimeAdapterInReadOrder();
- return new Object[][] {
- {"Simple test 1", "AAAAACCCCCAGATCGGAAGAGCA", "AGATCGGAAGAGCG", 14, 0.15, 10},
- {"Simple test 2", "AAAAACCCCCGGGGGAGATCGGAAGAGCA", "AGATCGGAAGAGCG", 14, 0.15, 15},
- {"No adapter", "AAAAACCCCCGGGGGTTTTT", "AGATCGGAAGAGCG", 6, 0.15, -1},
- {"Partial adapter", "AAAAACCCCCTGATCGGAA", "AGATCGGAAGAGCG", 9, 0.15, 10},
-// no longer support clips in middle of read
-// {"Adapter+Primer", "AAAAACCCCCAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG", "AGATCGGAAGAGCG", 6, 0.15, 10},
- {"No sequence", null, "AGATCGGAAGAGCG", 6, 0.15, -1},
- {"Read too short", "AGATCGGAAG", "AGATCGGAAGAGCG", 11, 0.15, -1},
- {"All No Calls", "AAACCCNNNNNNNNNNNNNNNNNNNN", "AGATCGGAAGAGCG", 6, 0.15, -1},
- {"From Test Data1", "CGGCATTCCTGCTGAACCGAGATCGGAAGAGCGTCGTGTAGGGAAAGGGGGTGGATCTCGGTGGGCGGCGTGTTGT", REVERSE, 57, 0.15, 19},
- {"From Test Data2a", "CGGAAGAGCGGTTCAGCAGGAATGCCGAGATCCGAA", REVERSE, 9, 0.14, 27}, // XT:i:28
- {"From Test Data2b", "CGGAAGAGCGGTTCAGCAGGAATGCCGAGATCGGAA", REVERSE, 10, 0.14, -1}, // only matches 9
- {"From PE Test Data1", "CGGTTCAGCAGGAATGCCGAGATCGGAAGAGCGGGT", FORWARD, 17, 0.14, 19},
- {"From PE Test Data2", "CGGTTCAGCAGGAATGCCGAGATCGGAAGAGCGGGT", REVERSE, 5, 0.14, -1},
- new Object[] {"From Test 8-clipped", "TGGGGTGGTTATTGTTGATTTTTGTTTGTGTGTTAGGTTGTTTGTGTTAGTTTTTTATTTTATTTTCGAGATCGAA", FORWARD, 8, 0.14, 68},
- {"50% can be bad", "AAAAACCCCCAGGTCGGAAGAGCG", "AGATCGGAAGAGCG", 5, 0.5, 18}, // 18?
-
- {"From 30E54AAXX.5.a", "ATATCTGAAGATCTCGTATGCCGTCTTCTGCTTG", "AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG", 34, 0.14, 0}, // 0!? From KT test case
- {"From 30E54AAXX.5.b", "ATATCTGAAGATCTCGTATGCCGTCTTCTGCTTG", SE_FORWARD, 34, 0.14, 0}, // 1?? From KT test case
- };
- }
-
- @DataProvider(name="clipPairedTestData")
- public Object[][] getClipPairedTestData() {
- return new Object[][] {
- {"Basic positive paired test matching", "CTACTGGCGCTGAAACTGAGCAGCCAAGCAGATCGG", "GCTTGGCTGCTCAGTTTCAGCGCCAGTAGAGATCGG", IlluminaAdapterPair.INDEXED},
- // This matches on first end and matches at higher stringency on that one side
- {"Basic positive first end one-sided test matching", "CTACTGGCGCTGAAAAGATCGGAAGAGCGGTTCAGC", "AAAAAATTTTTTCCCCCCGGGGGGAAAAAATTTTTT", IlluminaAdapterPair.PAIRED_END},
- // This matches on second end and matches at higher stringency on that one side
- {"Basic positive second end one-sided test matching", "AAAAAATTTTTTCCCCCCGGGGGGAAAAAATTTTTT", "AAAAAATTTTTTCCCAGATCGGAAGAGCGTCGTGTA", IlluminaAdapterPair.PAIRED_END},
- // This matches on one side and does not match at higher stringency on that one side
- {"Basic negative one-sided test matching", "GGCGCTGAAACTACTGGCGCTGAAAAGATCGGAAGA", "AAAAAATTTTTTCCCCCCGGGGGGAAAAAATTTTTT", null},
- // These match but at different positions. No clip should be done.
- {"Mis-match paired test matching", "CTACTGGCGCTGAAACTGAGCAGCCAAGCAGATCGG", "AGCTTGGCTGCTCAGTTTCAGCGCCAGTAGAGATCG", null},
- };
- }
-
- private static class SingleEndAdapter implements AdapterPair {
- private final String name;
- private final String threePrimeAdapter;
-
- private SingleEndAdapter(final String name, final String threePrimeAdapter) {
- this.name = name;
- this.threePrimeAdapter = threePrimeAdapter;
- }
-
- @Override
- public String get3PrimeAdapter() {
- return threePrimeAdapter;
- }
-
- @Override
- public String get3PrimeAdapterInReadOrder() {
- return threePrimeAdapter;
- }
-
- @Override
- public byte[] get3PrimeAdapterBytes() {
- return StringUtil.stringToBytes(threePrimeAdapter);
- }
-
- @Override
- public byte[] get3PrimeAdapterBytesInReadOrder() {
- return get3PrimeAdapterBytes();
- }
-
- @Override
- public String get5PrimeAdapter() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String get5PrimeAdapterInReadOrder() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public byte[] get5PrimeAdapterBytes() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public byte[] get5PrimeAdapterBytesInReadOrder() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- }
-
- /**
- * @return A String of given length with 6 As, 6 Cs, 6 Gs, etc. until length is reached.
- */
- private static String makeBogusReadString(final int len) {
- final StringBuilder builder = new StringBuilder(len);
- final Map<Character, Character> nextChar = new HashMap<Character, Character>();
- nextChar.put('A', 'C');
- nextChar.put('C', 'G');
- nextChar.put('G', 'T');
- nextChar.put('T', 'A');
- for (char curChar = 'A'; true; curChar = nextChar.get(curChar)) {
- for (int i = 0; i < 6; ++i) {
- if (builder.length() == len) return builder.toString();
- builder.append(curChar);
- }
- }
- }
-
- private static String patchAdapterSubsequenceIntoRead(final String read, final String adapter, final int length) {
- return replaceSubstring(read, adapter.substring(0, length), read.length() - length, read.length());
- }
-
- private static String replaceSubstring(final String s, final String replacement, final int position, final int charsToReplace) {
- final StringBuilder sb = new StringBuilder(s);
- sb.replace(position, position + charsToReplace, replacement);
- return sb.toString();
- }
-
-
- @Test
- public void testAdapterTruncation() {
- final AdapterMarker marker = new AdapterMarker(30,
- IlluminaUtil.IlluminaAdapterPair.INDEXED,
- IlluminaUtil.IlluminaAdapterPair.DUAL_INDEXED,
- IlluminaUtil.IlluminaAdapterPair.NEXTERA_V2,
- IlluminaUtil.IlluminaAdapterPair.FLUIDIGM);
- // INDEXED and DUAL_INDEXED should collapse at length 30
- Assert.assertTrue(marker.getAdapters().length < 4, "Did not collapse: " + marker.getAdapters().length);
- }
-
- /**
- * Confirm that after the requisite number of sightings of adapter, the list is trimmed
- */
- @Test(dataProvider = "testAdapterListTruncationDataProvider")
- public void testAdapterListTruncation(final IlluminaAdapterPair adapterPair) {
- final int thresholdForTruncatingAdapterList = 20;
- final int readLength = 100;
-
- // Throw all the adapter pairs into the marker. There is some danger in doing this because
- // IlluminaAdapterPair.ALTERNATIVE_SINGLE_END has 3' that is a substring of some of the others. In the enum it appears
- // last so it is tested last.
- final AdapterMarker marker =
- new AdapterMarker(IlluminaUtil.IlluminaAdapterPair.values()).
- setThresholdForSelectingAdaptersToKeep(thresholdForTruncatingAdapterList);
- int adapterPosition = 1;
-
- Assert.assertTrue(adapterPosition + thresholdForTruncatingAdapterList < readLength - ClippingUtility.MIN_MATCH_BASES,
- "Test is configured improperly -- eventually will not be enough adapter bases in read.");
-
- int originalNumberOfAdapters = marker.getAdapters().length;
- for (int i = 0; i < thresholdForTruncatingAdapterList; ++i) {
-
- // First, a read with no adapter in it.
- SAMRecord rec = new SAMRecord(null);
- rec.setReadString(makeBogusReadString(readLength));
- AdapterPair matchedPair = marker.adapterTrimIlluminaSingleRead(rec);
- Assert.assertNull(matchedPair);
- Assert.assertNull(rec.getAttribute(ReservedTagConstants.XT));
-
- // Adapter list should not be truncated yet
- Assert.assertEquals(marker.getAdapters().length, originalNumberOfAdapters);
-
- // Then, a record with some adapter sequence in it.
- rec = createSamRecordWithAdapterSequence(readLength, adapterPair, adapterPosition);
- matchedPair = marker.adapterTrimIlluminaSingleRead(rec);
- Assert.assertNotNull(matchedPair);
- Assert.assertEquals(rec.getIntegerAttribute(ReservedTagConstants.XT).intValue(), adapterPosition + 1,
- rec.getReadString() + " matched " + matchedPair);
-
- // Put adapter in different place next time.
- adapterPosition++;
- }
-
- Assert.assertEquals(marker.getAdapters().length, 1, "Did not truncate adapter list to 1 element");
- Assert.assertTrue(marker.getAdapters()[0].getName().contains(adapterPair.getName()),
- String.format("Expected '%s' to contain '%s'", marker.getAdapters()[0].getName(), adapterPair.getName()));
- }
-
- @DataProvider(name="testAdapterListTruncationDataProvider")
- public Object[][] testAdapterListTruncationDataProvider() {
- Object[][] ret = new Object[IlluminaAdapterPair.values().length][];
- for (int i = 0; i < ret.length; ++i) {
- ret[i] = new Object[]{IlluminaAdapterPair.values()[i]};
- }
- return ret;
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/DelimitedTextFileWithHeaderIteratorTest.java b/src/tests/java/net/sf/picard/util/DelimitedTextFileWithHeaderIteratorTest.java
deleted file mode 100644
index 510ef19..0000000
--- a/src/tests/java/net/sf/picard/util/DelimitedTextFileWithHeaderIteratorTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-
-public class DelimitedTextFileWithHeaderIteratorTest {
- @Test
- public void basicParsingTest() throws Exception {
- final String[][] data = new String[][] {
- new String[] {"FOO", "BAR", "SPLAT"},
- new String[] {"1", "2", "3"},
- new String[] {"a", "b", "c"},
- new String[] {"foo", "bar", "splat"},
- };
-
- final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
- tmp.deleteOnExit();
- final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
-
- for (final String[] fields : data) {
- out.write(StringUtil.join("\t", fields));
- out.newLine();
- }
-
- out.close();
-
- final TabbedInputParser parser = new TabbedInputParser(false, tmp);
- final DelimitedTextFileWithHeaderIterator fileIterator = new DelimitedTextFileWithHeaderIterator(parser);
- for (final String col : data[0]) Assert.assertTrue(fileIterator.hasColumn(col));
-
- int i=1;
- for (final DelimitedTextFileWithHeaderIterator.Row row : new IterableAdapter<DelimitedTextFileWithHeaderIterator.Row>(fileIterator)) {
- final String[] expected = data[i++];
- Assert.assertEquals(row.getFields(), expected);
- Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
- }
-
- Assert.assertEquals(i, data.length);
- }
-
- @Test
- public void parsingWithColumnHeadersTest() throws Exception {
- final String[] headers = {"STRING", "STRING2", "NUMBER"};
-
- final String[][] data = new String[][] {
- headers,
- new String[] {"1", "2", "3"},
- new String[] {"a", "b", "2"},
- new String[] {"foo", "bar", ""},
- };
-
-
- final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
- tmp.deleteOnExit();
- final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
-
- for (final String[] fields : data) {
- out.write(StringUtil.join("\t", fields));
- out.newLine();
- }
-
- out.close();
-
- final TabbedInputParser parser = new TabbedInputParser(false, tmp);
- final DelimitedTextFileWithHeaderIterator fileIterator = new DelimitedTextFileWithHeaderIterator(parser);
- for (final String col : headers) Assert.assertTrue(fileIterator.hasColumn(col));
-
- int i=1;
- for (final DelimitedTextFileWithHeaderIterator.Row row : new IterableAdapter<DelimitedTextFileWithHeaderIterator.Row>(fileIterator)) {
- final String[] expected = data[i++];
- final String[] actual = row.getFields();
- for (int j = 0; j < expected.length; j++) {
- Assert.assertTrue((expected[j].equals("") && actual[j] == null) || expected[j].equals(actual[j]));
- }
- Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
- try {
- row.getField(headers[0]);
- row.getField(headers[1]);
- row.getIntegerField(headers[2]);
- }
- catch(Exception e) {
- Assert.fail("Failed to parse one of the fields in " + row.getCurrentLine() + ": " + e.getMessage());
- }
- }
-
- Assert.assertEquals(i, data.length);
- }
-
-
-}
diff --git a/src/tests/java/net/sf/picard/util/FileChannelJDKBugWorkAroundTest.java b/src/tests/java/net/sf/picard/util/FileChannelJDKBugWorkAroundTest.java
deleted file mode 100644
index c2cd971..0000000
--- a/src/tests/java/net/sf/picard/util/FileChannelJDKBugWorkAroundTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import org.testng.annotations.Test;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class FileChannelJDKBugWorkAroundTest {
- @Test
- public void testBasic() {
- FileChannelJDKBugWorkAround.doBugWorkAround();
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/HistogramTest.java b/src/tests/java/net/sf/picard/util/HistogramTest.java
deleted file mode 100644
index 7585643..0000000
--- a/src/tests/java/net/sf/picard/util/HistogramTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package net.sf.picard.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import static java.lang.Math.abs;
-
-/**
- *
- */
-public class HistogramTest {
-
- @Test(dataProvider = "histogramData")
- public void testHistogramFunctions(final int[] values, final double mean, final double stdev, final Integer trimByWidth) {
- final Histogram<Integer> histo = new Histogram<Integer>();
- for (int value : values) {
- histo.increment(value);
- }
-
- if (trimByWidth != null) histo.trimByWidth(trimByWidth);
- final double m = histo.getMean();
- final double sd = histo.getStandardDeviation();
-
- Assert.assertEquals(round(mean), round(m), "Means are not equal");
- Assert.assertEquals(round(stdev), round(sd), "Stdevs are not equal");
- }
-
- @DataProvider(name = "histogramData")
- public Object[][] histogramData() {
- return new Object[][] {
- new Object[] {new int[] {1,2,3,4,5,6,7,8,9,10} , 5.5d, 3.027650d, null },
- new Object[] {new int[] {1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9}, 6.333333d, 2.236068d, null },
- new Object[] {new int[] {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 5d, 6.204837d, null },
- new Object[] {new int[] {1,2,3,4,5,6,7,8,9,10, 11, 11, 12, 100, 1000} , 5.5d, 3.027650d, 10 },
- new Object[] {new int[] {1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9, 20, 20, 21, 25, 25}, 6.333333d, 2.236068d, 11 },
- new Object[] {new int[] {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 101, 102, 103, 200, 2000}, 5d, 6.204837d, 20 }
- };
- }
-
- @Test
- public void testGeometricMean() {
- final int[] is = new int[] {4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8};
- final Histogram<Integer> histo = new Histogram<Integer>();
- for (final int i : is) histo.increment(i);
- Assert.assertTrue(abs(histo.getGeometricMean() - 6.216797) < 0.00001);
- }
-
- @Test(dataProvider = "medianTestData")
- public void testMedian(final int [] values, final double median) {
- final Histogram<Integer> histo = new Histogram<Integer>();
- for (final int i : values) histo.increment(i);
- Assert.assertEquals(histo.getMedian(), median);
- }
-
- @DataProvider(name = "medianTestData")
- public Object[][] medianTestData() {
- return new Object[][] {
- new Object[] {new int[] {} , 0d},
- new Object[] {new int[] {999} , 999d},
- new Object[] {new int[] {1,2,3,4,5,6} , 3.5d},
- new Object[] {new int[] {5,5,5,5,5,6,6} , 5d},
- new Object[] {new int[] {5,5,5,5,5,6,6,6,6,6} , 5.5d},
- };
- }
-
- @Test
- public void testMad() {
- final int[] is = new int[] {4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8};
- final Histogram<Integer> histo = new Histogram<Integer>();
- for (final int i : is) histo.increment(i);
-
- Assert.assertEquals(7d, histo.getMedian());
- Assert.assertEquals(1d, histo.getMedianAbsoluteDeviation());
- Assert.assertTrue(abs(histo.estimateSdViaMad() - 1.4826) < 0.0001);
- }
-
-
- private double round(final double in) {
- long l = (long) (in * 10000);
- return l / 10000d;
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/util/IOUtilTest.java b/src/tests/java/net/sf/picard/util/IOUtilTest.java
deleted file mode 100644
index 46fa5b9..0000000
--- a/src/tests/java/net/sf/picard/util/IOUtilTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.util.IOUtil;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-
-public class IOUtilTest {
- private File existingTempFile;
- private String systemTempDir;
-
- @BeforeClass
- public void setUp() throws IOException {
- existingTempFile = File.createTempFile("FiletypeTest.", ".tmp");
- existingTempFile.deleteOnExit();
- systemTempDir = System.getProperty("java.io.tmpdir");
- final File tmpDir = new File(systemTempDir);
- if (!tmpDir.isDirectory()) tmpDir.mkdir();
- if (!tmpDir.isDirectory())
- throw new RuntimeException("java.io.tmpdir (" + systemTempDir + ") is not a directory");
- }
-
- @Test(dataProvider = "fileTypeTestCases")
- public void testFileType(final String path, boolean expectedIsRegularFile) {
- final File file = new File(path);
- Assert.assertEquals(IOUtil.isRegularPath(file), expectedIsRegularFile);
- }
-
- @Test(dataProvider = "unixFileTypeTestCases", groups={"unix"})
- public void testFileTypeUnix(final String path, boolean expectedIsRegularFile) {
- final File file = new File(path);
- Assert.assertEquals(IOUtil.isRegularPath(file), expectedIsRegularFile);
- }
-
- @DataProvider(name = "fileTypeTestCases")
- private Object[][] fileTypeTestCases() {
- return new Object[][] {
- {existingTempFile.getAbsolutePath(), Boolean.TRUE},
- {systemTempDir, Boolean.FALSE}
-
- };
- }
-
- @DataProvider(name = "unixFileTypeTestCases")
- private Object[][] unixFileTypeTestCases() {
- return new Object[][] {
- {"/dev/null", Boolean.FALSE},
- {"/dev/stdout", Boolean.FALSE},
- {"/non/existent/file", Boolean.TRUE},
- };
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/IlluminaUtilTest.java b/src/tests/java/net/sf/picard/util/IlluminaUtilTest.java
deleted file mode 100644
index 365d696..0000000
--- a/src/tests/java/net/sf/picard/util/IlluminaUtilTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.sf.picard.util;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-/**
- * Just some simple tests for the IlluminaUtil.getTileFromReadName() method for now.
- *
- * @author Tim Fennell
- */
-public class IlluminaUtilTest {
- @Test(dataProvider="readNames") public void testFindTileInReadName(final String readName, final Integer tile) {
- final Integer otherTile = IlluminaUtil.getTileFromReadName(readName);
- Assert.assertEquals(otherTile, tile, "Tile numbers do not match for read name: " + readName);
- }
-
- @Test public void performanceTestGetTileFromReadName() {
- final int ITERATIONS = 5000000;
-
- final long startTime = System.currentTimeMillis();
- for (int i=0; i<ITERATIONS; ++i) {
- final Integer tile = IlluminaUtil.getTileFromReadName("300WFAAXX090909:1:1:1024:978#0/1");
- if (tile == null || tile != 1) throw new RuntimeException("WTF?");
- }
- final long endTime = System.currentTimeMillis();
-
- System.out.println("Time taken: " + (endTime-startTime) + "ms.");
- }
-
- @DataProvider(name="readNames")
- public Object[][] readNames() {
- return new Object[][] {
- new Object[] {"300WFAAXX:1:119:1024:978#0/1", 119},
- new Object[] {"300WFAAXX090909:1:1:1024:978#0/1", 1},
- new Object[] {"FOO", null},
- new Object[] {"FOO:BAR_splat", null}
- };
- }
-
- public static final byte [] iToB(int [] intVals) {
- byte [] byteVals = new byte[intVals.length];
- for(int i = 0; i < byteVals.length; i++) {
- byteVals[i] = (byte) intVals[i];
- }
- return byteVals;
- }
-
- public byte[][] byteBuffersSizeCopy(byte [][] bytes) {
- byte [][] outBytes = new byte[bytes.length][];
- for(int i = 0; i < bytes.length; i++) {
- outBytes[i] = new byte[bytes[i].length];
- }
-
- return outBytes;
- }
-
- @DataProvider(name = "solexaQualStrToPhreds")
- public Object [][] solexaQualStrToPhredsToPhreds() {
- return new Object[][] {
- new Object[] {
- "x at Axy" + ((char)156) + ((char) 157) + ((char) 0) + ((char) 1) + "?",
- new byte[][] {
- new byte[]{}, iToB(new int[]{56}), iToB(new int[]{0, 1, 56, 57, 92, 93}),
- iToB(new int[]{-64, -63, -1}), new byte[]{}
- }
- },
- new Object[] {
- "nNpZo" + ((char)250) + ((char) 255) + ((char) 1) + ((char) 1) + "CCaB",
- new byte[][] {
- iToB(new int[]{46, 14}), iToB(new int[]{48, 26, 47, -70, -65, -63, -63, 3, 3, 33}), iToB(new int[]{2})
- }
- }
- };
- }
-
- /*
- @Test(dataProvider = "solexaQualStrToPhreds")
- public void makePhredBinaryFromSolexaQualityAscii_1_3_toArrays(final String solexaQualities, final int offset, final byte [][] expectedBuffers) {
- byte [][] actualBuffers = byteBuffersSizeCopy(expectedBuffers);
- IlluminaUtil.makePhredBinaryFromSolexaQualityAscii_1_3(solexaQualities, offset, actualBuffers);
-
- for(int i = 0; i < expectedBuffers.length; i++) {
- Assert.assertEquals(expectedBuffers[i], actualBuffers[i]);
- }
- }*/
-}
diff --git a/src/tests/java/net/sf/picard/util/IntervalListTest.java b/src/tests/java/net/sf/picard/util/IntervalListTest.java
deleted file mode 100644
index 39f2b39..0000000
--- a/src/tests/java/net/sf/picard/util/IntervalListTest.java
+++ /dev/null
@@ -1,387 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMSequenceRecord;
-import net.sf.samtools.util.CollectionUtil;
-import org.testng.Assert;
-import org.testng.annotations.*;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Tests the IntervalList class
- */
-public class IntervalListTest {
-
-
- final SAMFileHeader fileHeader;
-
- final IntervalList list1, list2, list3;
-
- public IntervalListTest() {
- fileHeader = IntervalList.fromFile(new File("testdata/net/sf/picard/intervallist/IntervalListchr123_empty.interval_list")).getHeader();
- fileHeader.setSortOrder(SAMFileHeader.SortOrder.unsorted);
-
- list1 = new IntervalList(fileHeader);
- list2 = new IntervalList(fileHeader);
- list3 = new IntervalList(fileHeader);
-
-
- list1.add(new Interval("1", 1, 100)); //de-facto: 1:1-200 1:202-300 2:100-150 2:200-300
- list1.add(new Interval("1", 101, 200));
- list1.add(new Interval("1", 202, 300));
- list1.add(new Interval("2", 200, 300));
- list1.add(new Interval("2", 100, 150));
-
- list2.add(new Interval("1", 50, 150)); //de-facto 1:50-150 1:301-500 2:1-150 2:250-270 2:290-400
- list2.add(new Interval("1", 301, 500));
- list2.add(new Interval("2", 1, 150));
- list2.add(new Interval("2", 250, 270));
- list2.add(new Interval("2", 290, 400));
-
- list3.add(new Interval("1", 25, 400)); //de-facto 1:25-400 2:200-600 3:50-470
- list3.add(new Interval("2", 200, 600));
- list3.add(new Interval("3", 50, 470));
- }
-
-
- @DataProvider(name = "intersectData")
- public Object[][] intersectData() {
- final IntervalList intersect123 = new IntervalList(fileHeader);
- final IntervalList intersect12 = new IntervalList(fileHeader);
- final IntervalList intersect13 = new IntervalList(fileHeader);
- final IntervalList intersect23 = new IntervalList(fileHeader);
-
- intersect123.add(new Interval("1", 50, 150));
- intersect123.add(new Interval("2", 250, 270));
- intersect123.add(new Interval("2", 290, 300));
-
- intersect12.add(new Interval("1", 50, 150));
- intersect12.add(new Interval("2", 100, 150));
- intersect12.add(new Interval("2", 250, 270));
- intersect12.add(new Interval("2", 290, 300));
-
- intersect13.add(new Interval("1", 25, 200));
- intersect13.add(new Interval("1", 202, 300));
- intersect13.add(new Interval("2", 200, 300));
-
- intersect23.add(new Interval("1", 50, 150));
- intersect23.add(new Interval("1", 301, 400));
- intersect23.add(new Interval("2", 250, 270));
- intersect23.add(new Interval("2", 290, 400));
-
-
- return new Object[][]{
- new Object[]{Arrays.asList(list1, list2, list3), intersect123},
- new Object[]{Arrays.asList(list1, list2), intersect12},
- new Object[]{Arrays.asList(list2, list1), intersect12},
- new Object[]{Arrays.asList(list2, list3), intersect23},
- new Object[]{Arrays.asList(list3, list2), intersect23},
- new Object[]{Arrays.asList(list1, list3), intersect13},
- new Object[]{Arrays.asList(list3, list1), intersect13}
- };
- }
-
- @Test(dataProvider = "intersectData")
- public void testIntersectIntervalLists(final List<IntervalList> lists, final IntervalList list) {
- Assert.assertEquals(
- CollectionUtil.makeCollection(IntervalList.intersection(lists).iterator()),
- CollectionUtil.makeCollection(list.iterator()));
- }
-
- @DataProvider(name = "mergeData")
- public Object[][] mergeData() {
- final IntervalList merge123 = new IntervalList(fileHeader);
- final IntervalList merge12 = new IntervalList(fileHeader);
- final IntervalList merge23 = new IntervalList(fileHeader);
- final IntervalList merge13 = new IntervalList(fileHeader);
-
-
- merge123.add(new Interval("1", 1, 100)); //de-facto: 1:1-200 1:202-300 2:100-150 2:200-300
- merge123.add(new Interval("1", 101, 200));
- merge123.add(new Interval("1", 202, 300));
- merge123.add(new Interval("2", 200, 300));
- merge123.add(new Interval("2", 100, 150));
-
- merge123.add(new Interval("1", 50, 150)); //de-facto 1:50-150 1:301-500 2:1-150 2:250-270 2:290-400
- merge123.add(new Interval("1", 301, 500));
- merge123.add(new Interval("2", 1, 150));
- merge123.add(new Interval("2", 250, 270));
- merge123.add(new Interval("2", 290, 400));
-
- merge123.add(new Interval("1", 25, 400)); //de-facto 1:25-400 2:200-600 3:50-470
- merge123.add(new Interval("2", 200, 600));
- merge123.add(new Interval("3", 50, 470));
-
-
- merge12.add(new Interval("1", 1, 100)); //de-facto: 1:1-200 1:202-300 2:100-150 2:200-300
- merge12.add(new Interval("1", 101, 200));
- merge12.add(new Interval("1", 202, 300));
- merge12.add(new Interval("2", 200, 300));
- merge12.add(new Interval("2", 100, 150));
-
- merge12.add(new Interval("1", 50, 150)); //de-facto 1:50-150 1:301-500 2:1-150 2:250-270 2:290-400
- merge12.add(new Interval("1", 301, 500));
- merge12.add(new Interval("2", 1, 150));
- merge12.add(new Interval("2", 250, 270));
- merge12.add(new Interval("2", 290, 400));
-
- merge23.add(new Interval("1", 50, 150)); //de-facto 1:50-150 1:301-500 2:1-150 2:250-270 2:290-400
- merge23.add(new Interval("1", 301, 500));
- merge23.add(new Interval("2", 1, 150));
- merge23.add(new Interval("2", 250, 270));
- merge23.add(new Interval("2", 290, 400));
-
- merge23.add(new Interval("1", 25, 400)); //de-facto 1:25-400 2:200-600 3:50-470
- merge23.add(new Interval("2", 200, 600));
- merge23.add(new Interval("3", 50, 470));
-
-
- merge13.add(new Interval("1", 1, 100)); //de-facto: 1:1-200 1:202-300 2:100-150 2:200-300
- merge13.add(new Interval("1", 101, 200));
- merge13.add(new Interval("1", 202, 300));
- merge13.add(new Interval("2", 200, 300));
- merge13.add(new Interval("2", 100, 150));
-
- merge13.add(new Interval("1", 25, 400)); //de-facto 1:25-400 2:200-600 3:50-470
- merge13.add(new Interval("2", 200, 600));
- merge13.add(new Interval("3", 50, 470));
-
-
- return new Object[][]{
- new Object[]{Arrays.asList(list1, list2, list3), merge123},
- new Object[]{Arrays.asList(list1, list2), merge12},
- new Object[]{Arrays.asList(list2, list3), merge23},
- new Object[]{Arrays.asList(list1, list3), merge13}
-
- };
- }
-
-
- @Test(dataProvider = "mergeData")
- public void testMergeIntervalLists(final List<IntervalList> lists, final IntervalList list) {
- Assert.assertEquals(
- CollectionUtil.makeCollection(IntervalList.concatenate(lists).iterator()),
- CollectionUtil.makeCollection(list.iterator()));
- }
-
-
- @DataProvider(name = "unionData")
- public Object[][] unionData() {
- final IntervalList union123 = new IntervalList(fileHeader);
- final IntervalList union12 = new IntervalList(fileHeader);
- final IntervalList union13 = new IntervalList(fileHeader);
- final IntervalList union23 = new IntervalList(fileHeader);
-
- union123.add(new Interval("1", 1, 500));
- union123.add(new Interval("2", 1, 150));
- union123.add(new Interval("2", 200, 600));
- union123.add(new Interval("3", 50, 470));
-
- union12.add(new Interval("1", 1, 200));
- union12.add(new Interval("1", 202, 500));
- union12.add(new Interval("2", 1, 150));
- union12.add(new Interval("2", 200, 400));
-
-
- union23.add(new Interval("1", 25, 500));
- union23.add(new Interval("2", 1, 150));
- union23.add(new Interval("2", 200, 600));
- union23.add(new Interval("3", 50, 470));
-
- union13.add(new Interval("1", 1, 400));
- union13.add(new Interval("2", 100, 150));
- union13.add(new Interval("2", 200, 600));
- union13.add(new Interval("3", 50, 470));
-
-
- return new Object[][]{
- new Object[]{Arrays.asList(list1, list2, list3), union123},
- new Object[]{Arrays.asList(list1, list2), union12},
- new Object[]{Arrays.asList(list1, list2), union12},
- new Object[]{Arrays.asList(list2, list3), union23},
- new Object[]{Arrays.asList(list2, list3), union23},
- new Object[]{Arrays.asList(list1, list3), union13},
- new Object[]{Arrays.asList(list1, list3), union13}
- };
- }
-
- @Test(dataProvider = "unionData", enabled = true)
- public void testUnionIntervalLists(final List<IntervalList> lists, final IntervalList list) {
- Assert.assertEquals(
- CollectionUtil.makeCollection(IntervalList.union(lists).iterator()),
- CollectionUtil.makeCollection(list.iterator()));
- }
-
- @DataProvider(name = "invertData")
- public Object[][] invertData() {
- final IntervalList invert1 = new IntervalList(fileHeader);
- final IntervalList invert2 = new IntervalList(fileHeader);
- final IntervalList invert3 = new IntervalList(fileHeader);
-
- final IntervalList full = new IntervalList(fileHeader);
- final IntervalList fullChopped = new IntervalList(fileHeader);
- final IntervalList empty = new IntervalList(fileHeader);
-
-
- invert1.add(new Interval("1", 201, 201));
- invert1.add(new Interval("1", 301, fileHeader.getSequence("1").getSequenceLength()));
- invert1.add(new Interval("2", 1, 99));
- invert1.add(new Interval("2", 151, 199));
- invert1.add(new Interval("2", 301, fileHeader.getSequence("2").getSequenceLength()));
- invert1.add(new Interval("3", 1, fileHeader.getSequence("3").getSequenceLength()));
-
- invert2.add(new Interval("1", 1, 49));
- invert2.add(new Interval("1", 151, 300));
- invert2.add(new Interval("1", 501, fileHeader.getSequence("1").getSequenceLength()));
- invert2.add(new Interval("2", 151, 249));
- invert2.add(new Interval("2", 271, 289));
- invert2.add(new Interval("2", 401, fileHeader.getSequence("2").getSequenceLength()));
- invert2.add(new Interval("3", 1, fileHeader.getSequence("3").getSequenceLength()));
-
- invert3.add(new Interval("1", 1, 24));
- invert3.add(new Interval("1", 401, fileHeader.getSequence("1").getSequenceLength()));
- invert3.add(new Interval("2", 1, 199));
- invert3.add(new Interval("2", 601, fileHeader.getSequence("2").getSequenceLength()));
- invert3.add(new Interval("3", 1, 49));
- invert3.add(new Interval("3", 471, fileHeader.getSequence("3").getSequenceLength()));
-
- for (final SAMSequenceRecord samSequenceRecord : fileHeader.getSequenceDictionary().getSequences()) {
- full.add(new Interval(samSequenceRecord.getSequenceName(), 1, samSequenceRecord.getSequenceLength()));
-
- fullChopped.add(new Interval(samSequenceRecord.getSequenceName(), 1, samSequenceRecord.getSequenceLength() / 2));
- fullChopped.add(new Interval(samSequenceRecord.getSequenceName(), samSequenceRecord.getSequenceLength() / 2 + 1, samSequenceRecord.getSequenceLength()));
- }
-
-
- return new Object[][]{
- new Object[]{list1, invert1},
- new Object[]{list2, invert2},
- new Object[]{list3, invert3},
- new Object[]{full, empty},
- new Object[]{empty, full},
- new Object[]{fullChopped, empty}
- };
- }
-
-
- @Test(dataProvider = "invertData")
- public void testInvertSquared(final IntervalList list, @SuppressWarnings("UnusedParameters") final IntervalList ignored) throws Exception {
- final IntervalList inverseSquared = IntervalList.invert(IntervalList.invert(list));
- final IntervalList originalClone = new IntervalList(list.getHeader());
-
- for (final Interval interval : list) {
- originalClone.add(interval);
- }
-
- Assert.assertEquals(
- CollectionUtil.makeCollection(inverseSquared.iterator()),
- CollectionUtil.makeCollection(originalClone.uniqued().iterator()));
- }
-
- @Test(dataProvider = "invertData")
- public void testInvert(final IntervalList list, final IntervalList inverse) throws Exception {
- Assert.assertEquals(
- CollectionUtil.makeCollection(IntervalList.invert(list).iterator()),
- CollectionUtil.makeCollection(inverse.iterator()));
- }
-
-
- @DataProvider(name = "subtractData")
- public Object[][] subtractData() {
- final IntervalList subtract12_from_3 = new IntervalList(fileHeader);
- final IntervalList subtract1_from_2 = new IntervalList(fileHeader);
- final IntervalList subtract2_from_3 = new IntervalList(fileHeader);
- final IntervalList subtract1_from_3 = new IntervalList(fileHeader);
- final IntervalList subtract3_from_1 = new IntervalList(fileHeader);
-
-
- subtract12_from_3.add(new Interval("1", 201, 201));
- subtract12_from_3.add(new Interval("2", 401, 600));
- subtract12_from_3.add(new Interval("3", 50, 470));
-
- subtract1_from_2.add(new Interval("1", 301, 500));
- subtract1_from_2.add(new Interval("2", 1, 99));
- subtract1_from_2.add(new Interval("2", 301, 400));
-
-
- subtract2_from_3.add(new Interval("1", 25, 49));
- subtract2_from_3.add(new Interval("1", 151, 300));
- subtract2_from_3.add(new Interval("2", 200, 249));
- subtract2_from_3.add(new Interval("2", 271, 289));
- subtract2_from_3.add(new Interval("2", 401, 600));
- subtract2_from_3.add(new Interval("3", 50, 470));
-
- subtract1_from_3.add(new Interval("1", 201, 201));
- subtract1_from_3.add(new Interval("1", 301, 400));
- subtract1_from_3.add(new Interval("2", 301, 600));
- subtract1_from_3.add(new Interval("3", 50, 470));
-
- subtract3_from_1.add(new Interval("1", 1, 49)); //de-facto 1:25-400 2:200-600 3:50-470
- subtract3_from_1.add(new Interval("2", 100, 150));
-
-
- return new Object[][]{
- new Object[]{CollectionUtil.makeList(list3), CollectionUtil.makeList(list1, list2), subtract12_from_3},
- new Object[]{CollectionUtil.makeList(list2), CollectionUtil.makeList(list1), subtract1_from_2},
- new Object[]{CollectionUtil.makeList(list3), CollectionUtil.makeList(list2), subtract2_from_3},
- new Object[]{CollectionUtil.makeList(list3), CollectionUtil.makeList(list1), subtract1_from_3},
- };
- }
-
-
- @Test(dataProvider = "subtractData")
- public void testSubtractIntervalLists(final List<IntervalList> fromLists, final List<IntervalList> whatLists, final IntervalList list) {
- Assert.assertEquals(
- CollectionUtil.makeCollection(IntervalList.subtract(fromLists, whatLists).iterator()),
- CollectionUtil.makeCollection(list.iterator()));
- }
-
-
- @DataProvider(name = "VCFCompData")
- public Object[][] VCFCompData() {
- return new Object[][]{
- new Object[]{"testdata/net/sf/picard/intervallist/IntervalListFromVCFTest.vcf", "testdata/net/sf/picard/intervallist/IntervalListFromVCFTestComp.interval_list", false},
- new Object[]{"testdata/net/sf/picard/intervallist/IntervalListFromVCFTest.vcf", "testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverse.interval_list", true},
- new Object[]{"testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManual.vcf", "testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManualComp.interval_list", false},
- new Object[]{"testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManual.vcf", "testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list", true}
- };
- }
-
-
- @Test(dataProvider = "VCFCompData")
- public void testFromVCF(final String vcf, final String compInterval, final boolean invertVCF) {
-
- final File vcfFile = new File(vcf);
- final File compIntervalFile = new File(compInterval);
-
- final IntervalList compList = IntervalList.fromFile(compIntervalFile);
- final IntervalList list = invertVCF ? IntervalList.invert(IntervalList.fromVcf(vcfFile)) : IntervalList.fromVcf(vcfFile);
-
- compList.getHeader().getSequenceDictionary().assertSameDictionary(list.getHeader().getSequenceDictionary());
-
- final Collection<Interval> intervals = CollectionUtil.makeCollection(list.iterator());
- final Collection<Interval> compIntervals = CollectionUtil.makeCollection(compList.iterator());
-
- //assert that the intervals correspond
- Assert.assertEquals(intervals, compIntervals);
-
- final List<String> intervalNames = new LinkedList<String>();
- final List<String> compIntervalNames = new LinkedList<String>();
-
- for (final Interval interval : intervals) {
- intervalNames.add(interval.getName());
- }
- for (final Interval interval : compIntervals) {
- compIntervalNames.add(interval.getName());
- }
- //assert that the names match
- Assert.assertEquals(intervalNames, compIntervalNames);
-
- }
-
-}
\ No newline at end of file
diff --git a/src/tests/java/net/sf/picard/util/IntervalListToolsTest.java b/src/tests/java/net/sf/picard/util/IntervalListToolsTest.java
deleted file mode 100644
index 7b66603..0000000
--- a/src/tests/java/net/sf/picard/util/IntervalListToolsTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.TestUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.text.DecimalFormat;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-/**
- * Very basic test for scatter functionality in IntervalListTools
- */
-public class IntervalListToolsTest {
-
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/util/");
-
- @Test
- public void testScatter() throws IOException {
- final File scatterDir = IoUtil.createTempDir("scatter.", ".tmp");
-
- try {
- final File listToScatter = new File(TEST_DATA_DIR, "scatterable.interval_list");
- final IntervalList gold = IntervalList.fromFile(listToScatter);
- Assert.assertEquals(gold.getUniqueBaseCount(),200, "Wrong unique base count");
-
- // First test the non-scattering option -- the file that compes out
- // should be the same as the one that went in.
- final File singleFileOutput = File.createTempFile("single", "interval_list");
- singleFileOutput.deleteOnExit();
-
- int result = new IntervalListTools().instanceMain(new String[] {
- "INPUT=" + listToScatter.getAbsolutePath(),
- "OUTPUT=" + singleFileOutput.getAbsolutePath() ,
- "SCATTER_COUNT=" + 1
- });
- Assert.assertEquals(result, 0);
-
- final IntervalList single = IntervalList.fromFile(singleFileOutput);
- Assert.assertEquals(gold.size(), single.size());
- Assert.assertEquals(gold.getUniqueBaseCount(), single.getUniqueBaseCount());
-
-
- // Next we test scattering. This should result in the first
- // scattered file having 2 intervals, the second of which is exactly
- // one base long.
- result = new IntervalListTools().instanceMain(new String[] {
- "INPUT=" + listToScatter.getAbsolutePath(),
- "OUTPUT=" + scatterDir.getAbsolutePath() ,
- "SCATTER_COUNT=" + 2
- });
- Assert.assertEquals(result, 0);
- Assert.assertEquals(scatterDir.listFiles(new FilenameFilter() {
- public boolean accept(File file, String s) {
- return s.startsWith("temp_") && s.endsWith("_of_2");
- }
- }).length, 2, "Invalid # of scattered subdirectories found");
- IntervalList lists[] = getIntervalLists(scatterDir, 2);
- Assert.assertEquals(lists[0].size(), 2);
- Assert.assertEquals(lists[0].getIntervals().get(1).length(), 1, "Length of split interval list is wrong");
- Assert.assertEquals(lists[0].getUniqueBaseCount(), 100, "Unique base count in first interval is wrong.");
- final IntervalList second = IntervalList.fromFile(IntervalListTools.getScatteredFileName(scatterDir, 2, "0001"));
- Assert.assertEquals(lists[1].getUniqueBaseCount(), 100, "Unique base count in second interval is wrong.");
-
- // Test for when scattering breaks exactly at the end of an interval
- result = new IntervalListTools().instanceMain(new String[] {
- "INPUT=" + listToScatter.getAbsolutePath(),
- "OUTPUT=" + scatterDir.getAbsolutePath() ,
- "SCATTER_COUNT=" + 4
- });
- Assert.assertEquals(result, 0);
- Assert.assertEquals(scatterDir.listFiles(new FilenameFilter() {
- public boolean accept(File file, String s) {
- return s.startsWith("temp_") && s.endsWith("_of_4");
- }
- }).length, 4, "Invalid # of scattered subdirectories found");
- lists = getIntervalLists(scatterDir, 4);
- Assert.assertEquals(lists[0].size(), 1);
- Assert.assertEquals(lists[1].size(), 2);
- Assert.assertEquals(lists[2].size(), 2);
- Assert.assertEquals(lists[3].size(), 1);
- Assert.assertEquals(lists[3].getIntervals().get(0).getStart(), 30200);
- Assert.assertEquals(lists[0].getUniqueBaseCount() + lists[1].getUniqueBaseCount() +
- lists[2].getUniqueBaseCount() + lists[3].getUniqueBaseCount(), 200);
-
- // Test for when scattering consumes less than a full interval interval
- result = new IntervalListTools().instanceMain(new String[] {
- "INPUT=" + listToScatter.getAbsolutePath(),
- "OUTPUT=" + scatterDir.getAbsolutePath() ,
- "SCATTER_COUNT=" + 5
- });
- Assert.assertEquals(result, 0);
- lists = getIntervalLists(scatterDir, 5);
- Assert.assertEquals(lists[0].size(), 1);
- Assert.assertEquals(lists[1].size(), 1);
- Assert.assertEquals(lists[2].size(), 2);
- Assert.assertEquals(lists[3].size(), 2);
- Assert.assertEquals(lists[4].size(), 1);
- Assert.assertEquals(lists[0].getUniqueBaseCount() + lists[1].getUniqueBaseCount() +
- lists[2].getUniqueBaseCount() + lists[3].getUniqueBaseCount() +
- lists[4].getUniqueBaseCount(), 200);
-
- }
- finally {
- TestUtil.recursiveDelete(scatterDir);
- }
-
-
- }
-
-
- // Gets all the interval lists for a given scatter count in a directory
- final IntervalList[] getIntervalLists(final File scatterDir, final int scatterCount) {
- final IntervalList result[] = new IntervalList[scatterCount];
- final DecimalFormat format = new DecimalFormat("0000");
- for (int i = 0; i < scatterCount; i++) {
- result[i] = IntervalList.fromFile(IntervalListTools.getScatteredFileName(scatterDir, scatterCount, format.format(i+1)));
- }
- return result;
- }
-
- @Test
- public void testMerges() {
- SortedSet<Interval> intervals = new TreeSet<Interval>() {{
- add(new Interval("1", 500, 600, false, "foo"));
- add(new Interval("1", 550, 650, false, "bar"));
- add(new Interval("1", 625, 699, false, "splat"));
- }};
-
- Interval out = IntervalList.merge(intervals, false);
- Assert.assertEquals(out.getStart(), 500);
- Assert.assertEquals(out.getEnd(), 699);
-
- intervals.add(new Interval("1", 626, 629, false, "whee"));
- out = IntervalList.merge(intervals, false);
- Assert.assertEquals(out.getStart(), 500);
- Assert.assertEquals(out.getEnd(), 699);
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/IntervalTreeMapTest.java b/src/tests/java/net/sf/picard/util/IntervalTreeMapTest.java
deleted file mode 100644
index 2f2defa..0000000
--- a/src/tests/java/net/sf/picard/util/IntervalTreeMapTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Iterator;
-import java.util.Set;
-
-public class IntervalTreeMapTest {
- @Test
- public void testBasic() {
- IntervalTreeMap<Interval> m=new IntervalTreeMap<Interval>();
-
- Interval chr1Interval = new Interval("chr1", 1,100);
- m.put(chr1Interval, chr1Interval);
- Interval chr2Interval = new Interval("chr2", 1,200);
- m.put(chr2Interval, chr2Interval);
-
- final Iterator<Interval> iterator = m.keySet().iterator();
- Assert.assertEquals(iterator.next(), chr1Interval);
- Assert.assertEquals(iterator.next(), chr2Interval);
- Assert.assertFalse(iterator.hasNext());
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/IntervalTreeTest.java b/src/tests/java/net/sf/picard/util/IntervalTreeTest.java
deleted file mode 100644
index 2fffe2e..0000000
--- a/src/tests/java/net/sf/picard/util/IntervalTreeTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Iterator;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class IntervalTreeTest {
- @Test
- public void testNoMatches()
- {
- // Test empty tree
- final IntervalTree<String> intervalTree = new IntervalTree<String>();
- Iterator<IntervalTree.Node<String>> results = intervalTree.overlappers(1, 500);
- Assert.assertEquals(countElements(results), 0, "Testing with no left-hand set failed.");
-
- // Test no matches at all
- intervalTree.put(1, 400, "foo");
- intervalTree.put(600, 800, "foo2");
- results = intervalTree.overlappers(450, 599);
- Assert.assertEquals(countElements(results), 0, "Testing with no overlaps at all.");
-
- }
-
- private int countElements(final Iterator<IntervalTree.Node<String>> it) {
- int ret = 0;
- while (it.hasNext()) {
- ++ret;
- it.next();
- }
- return ret;
- }
-
- @Test
- public void testMatches()
- {
- final IntervalTree<String> intervalTree = new IntervalTree<String>();
- intervalTree.put(1, 10, "foo1");
- intervalTree.put(2, 9, "foo2");
- intervalTree.put(3, 8, "foo3");
- intervalTree.put(4, 7, "foo4");
- intervalTree.put(5, 6, "foo5");
- intervalTree.put(1, 9, "foo6");
-
- // Single match
- Assert.assertEquals(countElements(intervalTree.overlappers(10, 10)), 1, "Test single overlap");
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(10, 10), "foo1"), "Test single overlap for correct overlapee");
-
- // Multiple matches
- Assert.assertEquals(countElements(intervalTree.overlappers(7, 8)), 5, "Test multiple overlap");
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo1"), "Test multiple overlap for correct overlapees");
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo2"), "Test multiple overlap for correct overlapees");
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo3"), "Test multiple overlap for correct overlapees");
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo4"), "Test multiple overlap for correct overlapees");
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(7, 8), "foo6"), "Test multiple overlap for correct overlapees");
- Assert.assertTrue(!iteratorContains(intervalTree.overlappers(7, 8), "foo5"), "Test multiple overlap for correct overlapees");
- }
-
- private boolean iteratorContains(final Iterator<IntervalTree.Node<String>> nodeIterator, final String s) {
- while (nodeIterator.hasNext()) {
- if (nodeIterator.next().getValue().equals(s)) {
- return true;
- }
- }
- return false;
- }
-
- @Test
- public void testNearEnds()
- {
- final IntervalTree<String> intervalTree = new IntervalTree<String>();
- intervalTree.put(10, 20, "foo");
- Assert.assertEquals(countElements(intervalTree.overlappers(10, 10)), 1, "Test overlap (no buffers) at near end exactly");
- Assert.assertEquals(countElements(intervalTree.overlappers(9, 10)), 1, "Test overlap (no buffers) at near end exactly");
- Assert.assertEquals(countElements(intervalTree.overlappers(9, 9)), 0, "Test just before overlap (no buffers)");
- Assert.assertEquals(countElements(intervalTree.overlappers(20, 20)), 1, "Test overlap (no buffers) at far end exactly");
- Assert.assertEquals(countElements(intervalTree.overlappers(20, 21)), 1, "Test overlap (no buffers) at far end exactly");
- Assert.assertEquals(countElements(intervalTree.overlappers(21, 21)), 0, "Test just beyond overlap (no buffers)");
- }
-
- @Test
- public void performanceTest()
- {
- final IntervalTree<String> intervalTree = new IntervalTree<String>();
- final long start = System.currentTimeMillis();
- for (int i = 1; i <= 50000; i++) intervalTree.put(i, i, "frob");
- System.out.println("Time to construct a tree with 50000 nodes: " + (System.currentTimeMillis() - start) + " milliseconds" );
-
- final long end = System.currentTimeMillis() + 10000;
- int count = 0;
- while (System.currentTimeMillis() < end) {
- intervalTree.overlappers(17000, 17099);
- ++count;
- }
- System.out.println("Queried for the same 100-length mapping " + count + " times in 10 seconds.");
- }
-
- @Test
- public void testHandlingOfDuplicateMappings()
- {
- final IntervalTree<String> intervalTree = new IntervalTree<String>();
- intervalTree.put(1, 10, "foo1");
- // This call replaces foo1 with foo2
- Assert.assertEquals(intervalTree.put(1, 10, "foo2"), "foo1");
- intervalTree.put(2, 8, "foo3");
-
- Assert.assertEquals(countElements(intervalTree.overlappers(3, 5)), 2);
- Assert.assertFalse(iteratorContains(intervalTree.overlappers(3, 5), "foo1"));
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(3, 5), "foo2"));
- Assert.assertTrue(iteratorContains(intervalTree.overlappers(3, 5), "foo3"));
- }
-
- /**
- * Test of PIC-123
- */
- @Test
- public void testRemove() {
- int[][] adds = {
- {46129744, 46129978},
- {46393843, 46394077},
- {46260491, 46260725},
- {46402360, 46402594},
- {46369255, 46369464},
- {46293772, 46293981},
- {46357687, 46357896},
- {46431752, 46431961},
- {46429997, 46430206},
- {46404026, 46404192},
- {46390511, 46390677},
- {46090593, 46090759},
- {46045352, 46045518},
- {46297633, 46297799},
- {46124297, 46124463},
- {46395291, 46395504},
- {46439072, 46439240},
- {46400792, 46400959},
- {46178616, 46178851},
- {46129747, 46129982},
- {46396546, 46396781},
- {46112353, 46112588},
- {46432996, 46433231},
- {46399109, 46399344},
- {46372058, 46372292},
- {46386826, 46387060},
- {46381795, 46382029},
- {46179789, 46180023},
- {46394409, 46394643},
- {46376176, 46376429},
- {46389943, 46390177},
- {46433654, 46433888},
- {46379440, 46379674},
- {46391117, 46391351},
- };
- IntervalTree<String> intervalTree = new IntervalTree<String>();
- for (int[] add : adds) {
- intervalTree.put(add[0], add[1], "frob");
- }
- Assert.assertEquals(intervalTree.remove(46402360, 46402594), "frob");
- intervalTree.checkMaxEnds();
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/MathUtilTest.java b/src/tests/java/net/sf/picard/util/MathUtilTest.java
deleted file mode 100644
index ea17612..0000000
--- a/src/tests/java/net/sf/picard/util/MathUtilTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package net.sf.picard.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-
-/**
- * @author mccowan
- */
-public class MathUtilTest {
- @Test
- public void logMathTest() {
- Assert.assertEquals(MathUtil.LOG_10_MATH.getLogValue(10), 1d, 0.00001d);
- Assert.assertEquals(MathUtil.LOG_10_MATH.getNonLogValue(1), 10d, 0.00001d);
- Assert.assertEquals(MathUtil.LOG_10_MATH.mean(5, 5, 5), 5d, 0.00001d);
- // http://www.wolframalpha.com/input/?i=log10%2810%5E1.23%2B10%5E4.56%2B10%5E99999%29
- Assert.assertEquals(MathUtil.LOG_10_MATH.sum(1.23, 4.56, 2), 4.5613970317323586660874152202433434022756298235604568d, 0.00001d);
- // http://www.wolframalpha.com/input/?i=log10%2810%5E1.23+*+10%5E4.56+*+10%5E2%29
- Assert.assertEquals(MathUtil.LOG_10_MATH.product(1.23, 4.56, 2), 7.7899999999999999999999999999999999999999999999999999d, 0.00001d);
- }
-
- @DataProvider
- public Object[][] seqMethodTestCases() {
- return new Object[][] {
- new Object[] {0d, 5d, 1d, new double[] {0,1,2,3,4,5}},
- new Object[] {0d, 0.5d, 0.1d, new double[] {0, 0.1, 0.2, 0.3, 0.4, 0.5}},
- new Object[] {0d, 0.5d, 0.11d,new double[] {0, 0.11, 0.22, 0.33, 0.44}},
- new Object[] {50d, 55d, 1.25d,new double[] {50, 51.25, 52.5, 53.75, 55}},
- new Object[] {10d, 0d, 02d, new double[] {}},
- new Object[] {10d, 0d, -2d, new double[] {10, 8, 6, 4, 2, 0}},
- };
- }
-
- @Test(dataProvider="seqMethodTestCases")
- public void testSeqGeneration(final double from, final double to, final double by, final double[] expected) {
- final double[] actual = MathUtil.seq(from, to, by);
- Assert.assertEquals(actual.length, expected.length);
-
- for (int i=0; i<expected.length; ++i) {
- Assert.assertTrue(Math.abs(actual[i] - expected[i]) < 0.0000001);
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/MergingIteratorTest.java b/src/tests/java/net/sf/picard/util/MergingIteratorTest.java
deleted file mode 100644
index 3c33e33..0000000
--- a/src/tests/java/net/sf/picard/util/MergingIteratorTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.util.CloseableIterator;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Queue;
-
-public class MergingIteratorTest {
-
- private static class QueueBackedIterator<T> implements CloseableIterator<T> {
-
- private final Iterator<T> backing;
- QueueBackedIterator(final Queue<T> queue) {
- this.backing = queue.iterator();
- }
-
- @Override
- public void close() {
- // no-op
- }
-
- @Override
- public boolean hasNext() {
- return backing.hasNext();
- }
-
- @Override
- public T next() {
- return backing.next();
- }
-
- @Override
- public void remove() {
- backing.remove();
- }
- }
-
- private static final Comparator<Integer> INTEGER_COMPARATOR = new Comparator<Integer>() {
- @Override
- public int compare(Integer integer, Integer integer2) {
- return integer - integer2;
- }
- };
-
- @Test
- public void testOrderingAndCompleteness() {
- final Queue<Integer> queueOne = new LinkedList<Integer>();
- queueOne.add(1);
- queueOne.add(3);
- queueOne.add(5);
-
- final Queue<Integer> queueTwo = new LinkedList<Integer>();
- queueTwo.add(2);
- queueTwo.add(4);
- queueTwo.add(6);
-
- final Queue<Integer> queueThree = new LinkedList<Integer>();
- queueThree.add(0);
- queueThree.add(1);
-
- final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
- Collections.addAll(
- iterators,
- new QueueBackedIterator<Integer>(queueOne),
- new QueueBackedIterator<Integer>(queueTwo),
- new QueueBackedIterator<Integer>(queueThree));
-
- final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
- INTEGER_COMPARATOR,
- iterators);
-
- int count = 0;
- int last = -1;
- while (mergingIterator.hasNext()) {
- final Integer integer = mergingIterator.next();
- count++;
- if (integer == 1) Assert.assertTrue(integer >= last);
- else Assert.assertTrue(integer > last);
- last = integer;
- }
-
- Assert.assertEquals(queueOne.size() + queueTwo.size() + queueThree.size(), count);
- }
-
- @Test
- public void testIteratorsOfUnevenLength() {
- final Queue<Integer> queueOne = new LinkedList<Integer>();
- queueOne.add(1);
- queueOne.add(3);
- queueOne.add(5);
- queueOne.add(7);
- queueOne.add(9);
- queueOne.add(11);
- queueOne.add(13);
-
- final Queue<Integer> queueTwo = new LinkedList<Integer>();
- queueTwo.add(2);
-
- final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
- Collections.addAll(
- iterators,
- new QueueBackedIterator<Integer>(queueOne),
- new QueueBackedIterator<Integer>(queueTwo));
-
- final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
- INTEGER_COMPARATOR,
- iterators);
-
- int count = 0;
- int last = -1;
- while (mergingIterator.hasNext()) {
- final Integer integer = mergingIterator.next();
- count++;
- Assert.assertTrue(integer > last);
- last = integer;
- }
-
- Assert.assertEquals(queueOne.size() + queueTwo.size(), count);
- }
-
- @Test(expectedExceptions = IllegalStateException.class)
- public void testOutOfOrderIterators() {
- final Queue<Integer> queueOne = new LinkedList<Integer>();
- queueOne.add(1);
- queueOne.add(3);
-
- final Queue<Integer> queueTwo = new LinkedList<Integer>();
- queueTwo.add(4);
- queueTwo.add(2);
-
- final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
- Collections.addAll(
- iterators,
- new QueueBackedIterator<Integer>(queueOne),
- new QueueBackedIterator<Integer>(queueTwo));
-
- final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
- INTEGER_COMPARATOR,
- iterators);
-
- Assert.assertEquals(mergingIterator.next().intValue(), 1);
- Assert.assertEquals(mergingIterator.next().intValue(), 3);
- Assert.assertEquals(mergingIterator.next().intValue(), 4);
- mergingIterator.next(); // fails, because the next element would be "2"
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/QualityEncodingDetectorTest.java b/src/tests/java/net/sf/picard/util/QualityEncodingDetectorTest.java
deleted file mode 100644
index 2092693..0000000
--- a/src/tests/java/net/sf/picard/util/QualityEncodingDetectorTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.fastq.FastqReader;
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.SAMRecordSetBuilder;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-
-public class QualityEncodingDetectorTest {
-
- private static class Testcase {
- private final File f;
- private final FastqQualityFormat q;
-
- Testcase(final File file, final FastqQualityFormat qualityFormat) {
- this.f = file;
- this.q = qualityFormat;
- }
- }
-
- final static List<Testcase> FASTQ_TESTCASES = Arrays.asList(
- // Need to use full-range quality here, as Solexa and Illumina are near indistinguishable
- new Testcase(new File("./testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_solexa.fastq"), FastqQualityFormat.Solexa),
- new Testcase(new File("./testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/s_1_sequence.txt"), FastqQualityFormat.Illumina),
- new Testcase(new File("./testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq"), FastqQualityFormat.Standard)
- );
- final static List<Testcase> BAM_TESTCASES = Arrays.asList(
- new Testcase(new File("./testdata/net/sf/picard/sam/unmapped.sam"), FastqQualityFormat.Standard),
- new Testcase(new File("./testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam"), FastqQualityFormat.Standard),
- new Testcase(new File("./testdata/net/sf/picard/util/QualityEncodingDetectorTest/solexa-as-standard.bam"), FastqQualityFormat.Solexa),
- new Testcase(new File("./testdata/net/sf/picard/util/QualityEncodingDetectorTest/illumina-as-standard.bam"), FastqQualityFormat.Illumina)
-
- );
-
- Object[][] renderObjectArrayArray(final List<Testcase> testcaseList) {
- final Object[][] data = new Object[testcaseList.size()][];
- for (int i = 0; i < data.length; i++) {
- final Testcase testcase = testcaseList.get(i);
- data[i] = new Object[]{testcase.f, testcase.q};
- }
- return data;
- }
-
- @DataProvider(name = "BAM_TESTCASES")
- Object[][] bamTestcases() {
- return renderObjectArrayArray(BAM_TESTCASES);
- }
-
- @DataProvider(name = "FASTQ_TESTCASES")
- Object[][] fastqTestcases() {
- return renderObjectArrayArray(FASTQ_TESTCASES);
- }
-
- @Test(dataProvider = "FASTQ_TESTCASES", groups = {"unix"})
- public void testFastqQualityInference(final File input, final FastqQualityFormat expectedQualityFormat) {
- final FastqReader reader = new FastqReader(input);
- Assert.assertEquals(QualityEncodingDetector.detect(reader), expectedQualityFormat);
- reader.close();
- }
-
- @Test(dataProvider = "BAM_TESTCASES", groups = {"unix"})
- public void testBamQualityInference(final File input, final FastqQualityFormat expectedQualityFormat) {
- final SAMFileReader reader = new SAMFileReader(input);
- Assert.assertEquals(QualityEncodingDetector.detect(reader), expectedQualityFormat);
- reader.close();
- }
-
- @Test
- public void testSmallBamForDetectorFailure() {
- final SAMRecordSetBuilder samRecordSetBuilder = createSmallUnmappedSam();
- Assert.assertNotSame(QualityEncodingDetector.detect(samRecordSetBuilder.getSamReader(),
- null), FastqQualityFormat.Standard);
- }
-
- @Test
- public void testSmallBamWithExpectedQuality() {
- final SAMRecordSetBuilder samRecordSetBuilder = createSmallUnmappedSam();
- Assert.assertEquals(QualityEncodingDetector.detect(samRecordSetBuilder.getSamReader(),
- FastqQualityFormat.Standard), FastqQualityFormat.Standard);
- }
-
- @Test (expectedExceptions = PicardException.class)
- public void testQualitySanity() {
- final SAMRecordSetBuilder samRecordSetBuilder = createSmallUnmappedSam();
- QualityEncodingDetector.detect(samRecordSetBuilder.getSamReader(),
- FastqQualityFormat.Illumina);
- }
-
- private SAMRecordSetBuilder createSmallUnmappedSam() {
- final SAMRecordSetBuilder samRecordSetBuilder = new SAMRecordSetBuilder();
- samRecordSetBuilder.setReadLength(25);
- samRecordSetBuilder.addFrag("READ0", -1, -1, false, true, null, "@@@FFFFFHHHHHJIJIIJIIJJJJ", -1);
- samRecordSetBuilder.addFrag("READ1", -1, -1, false, true, null, "@@@FFFFFHHHHHJIJIIJIIJJJJ", -1);
- samRecordSetBuilder.addFrag("READ2", -1, -1, false, true, null, "@CCFDFEDHHHFFHIIII at GH<FFH", -1);
- samRecordSetBuilder.addFrag("READ3", -1, -1, false, true, null, "@@?DFFDFHFFHDHIIHIIEIIJGG", -1);
- samRecordSetBuilder.addFrag("READ4", -1, -1, false, true, null, "@CCFFDDFHHHHHIIJJHFJJJJJH", -1);
- samRecordSetBuilder.addFrag("READ5", -1, -1, false, true, null, "BCCFFFFFHHHHHJJJJJIJJJJJJ", -1);
- samRecordSetBuilder.addFrag("READ6", -1, -1, false, true, null, "@@CDFFFFHHHFHHIJJJJJJJIJJ", -1);
- samRecordSetBuilder.addFrag("READ7", -1, -1, false, true, null, "CCCFFFFFHHHHHJJJJIJJJJHII", -1);
- samRecordSetBuilder.addFrag("READ8", -1, -1, false, true, null, "CCCFFFFFHHHHHJJJJJJJJJJJJ", -1);
- return samRecordSetBuilder;
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/RExecutorTest.java b/src/tests/java/net/sf/picard/util/RExecutorTest.java
deleted file mode 100755
index 4767a0f..0000000
--- a/src/tests/java/net/sf/picard/util/RExecutorTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-
-
-public class RExecutorTest {
- @Test
- public void testPassingRScript() {
- Assert.assertTrue(
- RExecutor.executeFromClasspath("passing.R") == 0);
- }
-
- @Test
- public void testFailingRScript() {
- Assert.assertTrue(
- RExecutor.executeFromClasspath("failing.R") != 0);
- }
-
- @Test(expectedExceptions=IllegalArgumentException.class)
- public void testRScriptNotFound() {
- RExecutor.executeFromClasspath("asdlfjasl");
- Assert.fail();
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/util/SamLocusIteratorTest.java b/src/tests/java/net/sf/picard/util/SamLocusIteratorTest.java
deleted file mode 100644
index 702aa1e..0000000
--- a/src/tests/java/net/sf/picard/util/SamLocusIteratorTest.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.samtools.SAMFileReader;
-import net.sf.samtools.util.CoordMath;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SamLocusIteratorTest {
- private SAMFileReader createSamFileReader(final String samExample) {
- final ByteArrayInputStream inputStream = new ByteArrayInputStream(samExample.getBytes());
- return new SAMFileReader(inputStream);
- }
-
- private SamLocusIterator createSamLocusIterator(final SAMFileReader samReader) {
- final SamLocusIterator ret = new SamLocusIterator(samReader);
- ret.setEmitUncoveredLoci(false);
- return ret;
- }
-
- @Test
- public void testBasicIterator() {
-
- final String sqHeader = "@HD\tSO:coordinate\tVN:1.0\n at SQ\tSN:chrM\tAS:HG18\tLN:100000\n";
- final String seq1 = "ACCTACGTTCAATATTACAGGCGAACATACTTACTA";
- final String qual1 = "++++++++++++++++++++++++++++++++++++"; // phred 10
- final String s1 = "3851612\t16\tchrM\t165\t255\t36M\t*\t0\t0\t" + seq1 + "\t" + qual1 + "\n";
- final String exampleSam = sqHeader + s1 + s1;
-
- final SAMFileReader samReader = createSamFileReader(exampleSam);
- final SamLocusIterator sli = createSamLocusIterator(samReader);
-
-
-
- // make sure we accumulated depth of 2 for each position
- int pos = 165;
- for (final SamLocusIterator.LocusInfo li : sli) {
- Assert.assertEquals(pos++, li.getPosition());
- Assert.assertEquals(2, li.getRecordAndPositions().size());
- }
-
- }
-
- @Test
- public void testEmitUncoveredLoci() {
-
- final String sqHeader = "@HD\tSO:coordinate\tVN:1.0\n at SQ\tSN:chrM\tAS:HG18\tLN:100000\n";
- final String seq1 = "ACCTACGTTCAATATTACAGGCGAACATACTTACTA";
- final String qual1 = "++++++++++++++++++++++++++++++++++++"; // phred 10
- final String s1 = "3851612\t16\tchrM\t165\t255\t36M\t*\t0\t0\t" + seq1 + "\t" + qual1 + "\n";
- final String exampleSam = sqHeader + s1 + s1;
-
- final SAMFileReader samReader = createSamFileReader(exampleSam);
- final SamLocusIterator sli = new SamLocusIterator(samReader);
-
- // make sure we accumulated depth of 2 for each position
- int pos = 1;
- final int coveredStart = 165;
- final int coveredEnd = CoordMath.getEnd(coveredStart, seq1.length());
- for (final SamLocusIterator.LocusInfo li : sli) {
- Assert.assertEquals(li.getPosition(), pos++);
- final int expectedReads;
- if (li.getPosition() >= coveredStart && li.getPosition() <= coveredEnd) {
- expectedReads = 2;
- } else {
- expectedReads = 0;
- }
- Assert.assertEquals(li.getRecordAndPositions().size(), expectedReads);
- }
- Assert.assertEquals(pos, 100001);
-
- }
-
- @Test
- public void testQualityFilter() {
-
- final String sqHeader = "@HD\tSO:coordinate\tVN:1.0\n at SQ\tSN:chrM\tAS:HG18\tLN:100000\n";
- final String seq1 = "ACCTACGTTCAATATTACAGGCGAACATACTTACTA";
- final String qual1 = "++++++++++++++++++++++++++++++++++++"; // phred 10
- final String qual2 = "+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*"; // phred 10,9...
- final String s1 = "3851612\t16\tchrM\t165\t255\t36M\t*\t0\t0\t" + seq1 + "\t" + qual1 + "\n";
- final String s2 = "3851612\t16\tchrM\t165\t255\t36M\t*\t0\t0\t" + seq1 + "\t" + qual2 + "\n";
- final String exampleSam = sqHeader + s1 + s2;
-
- final SAMFileReader samReader = createSamFileReader(exampleSam);
- final SamLocusIterator sli = createSamLocusIterator(samReader);
- sli.setQualityScoreCutoff(10);
-
-
- // make sure we accumulated depth 2 for even positions, 1 for odd positions
- int pos = 165;
- for (final SamLocusIterator.LocusInfo li : sli) {
- Assert.assertEquals((pos%2==0)?1:2, li.getRecordAndPositions().size());
- Assert.assertEquals(pos++, li.getPosition());
- }
-
- }
-
- /**
- * Try all CIGAR operands (except H and P) and confirm that loci produced by SamLocusIterator are as expected.
- */
- @Test
- public void testSimpleGappedAlignment() {
- final String sqHeader = "@HD\tSO:coordinate\tVN:1.0\n at SQ\tSN:chrM\tAS:HG18\tLN:100000\n";
- final String seq1 = "ACCTACGTTCAATATTACAGGCGAACATACTTACTA";
- final String qual1 = "++++++++++++++++++++++++++++++++++++"; // phred 10
- final String s1 = "3851612\t16\tchrM\t165\t255\t3S3M3N3M3D3M3I18M3S\t*\t0\t0\t" + seq1 + "\t" + qual1 + "\n";
- final String exampleSam = sqHeader + s1 + s1;
-
- final SAMFileReader samReader = createSamFileReader(exampleSam);
- final SamLocusIterator sli = createSamLocusIterator(samReader);
-
-
-
- // make sure we accumulated depth of 2 for each position
- final int[] expectedReferencePositions = new int[] {
- // 3S
- 165, 166, 167, // 3M
- // 3N
- 171, 172, 173, // 3M
- // 3D
- 177, 178, 179, // 3M
- // 3I
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197}; // 18M
-
- final int[] expectedReadOffsets = new int[] {
- // 3S
- 3,4,5, // 3M
- // 3N
- 6, 7, 8, // 3M
- // 3D
- 9, 10, 11, // 3M
- // 3I
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 // 3M
- };
- int i = 0;
- for (final SamLocusIterator.LocusInfo li : sli) {
- Assert.assertEquals(li.getRecordAndPositions().size(), 2);
- Assert.assertEquals(li.getPosition(), expectedReferencePositions[i]);
- Assert.assertEquals(li.getRecordAndPositions().get(0).getOffset(), expectedReadOffsets[i]);
- Assert.assertEquals(li.getRecordAndPositions().get(1).getOffset(), expectedReadOffsets[i]);
- ++i;
- }
- }
-
- /**
- * Test two reads that overlap because one has a deletion in the middle of it.
- */
- @Test
- public void testOverlappingGappedAlignments() {
- final String sqHeader = "@HD\tSO:coordinate\tVN:1.0\n at SQ\tSN:chrM\tAS:HG18\tLN:100000\n";
- final String seq1 = "ACCTACGTTCAATATTACAGGCGAACATACTTACTA";
- final String qual1 = "++++++++++++++++++++++++++++++++++++"; // phred 10
- // Were it not for the gap, these two reads would not overlap
- final String s1 = "3851612\t16\tchrM\t165\t255\t18M10D18M\t*\t0\t0\t" + seq1 + "\t" + qual1 + "\n";
- final String s2 = "3851613\t16\tchrM\t206\t255\t36M\t*\t0\t0\t" + seq1 + "\t" + qual1 + "\n";
- final String exampleSam = sqHeader + s1 + s2;
-
- final SAMFileReader samReader = createSamFileReader(exampleSam);
- final SamLocusIterator sli = createSamLocusIterator(samReader);
- // 5 base overlap btw the two reads
- final int numBasesCovered = 36 + 36 - 5;
- final int[] expectedReferencePositions = new int[numBasesCovered];
- final int[] expectedDepths = new int[numBasesCovered];
- final int[][] expectedReadOffsets = new int[numBasesCovered][];
-
- int i;
- // First 18 bases are from the first read
- for (i = 0; i < 18; ++i) {
- expectedReferencePositions[i] = 165 + i;
- expectedDepths[i] = 1;
- expectedReadOffsets[i] = new int[] {i};
- }
- // Gap of 10, then 13 bases from the first read
- for (; i < 36 - 5; ++i) {
- expectedReferencePositions[i] = 165 + 10 + i;
- expectedDepths[i] = 1;
- expectedReadOffsets[i] = new int[] {i};
- }
- // Last 5 bases of first read overlap first 5 bases of second read
- for (; i < 36; ++i) {
- expectedReferencePositions[i] = 165 + 10 + i;
- expectedDepths[i] = 2;
- expectedReadOffsets[i] = new int[] {i, i - 31};
-
- }
- // Last 31 bases of 2nd read
- for (; i < 36 + 36 - 5; ++i) {
- expectedReferencePositions[i] = 165 + 10 + i;
- expectedDepths[i] = 1;
- expectedReadOffsets[i] = new int[] {i - 31};
- }
-
- i = 0;
- for (final SamLocusIterator.LocusInfo li : sli) {
- Assert.assertEquals(li.getRecordAndPositions().size(), expectedDepths[i]);
- Assert.assertEquals(li.getPosition(), expectedReferencePositions[i]);
- Assert.assertEquals(li.getRecordAndPositions().size(), expectedReadOffsets[i].length);
- for (int j = 0; j < expectedReadOffsets[i].length; ++j) {
- Assert.assertEquals(li.getRecordAndPositions().get(j).getOffset(), expectedReadOffsets[i][j]);
- }
- ++i;
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/SolexaQualityConverterTest.java b/src/tests/java/net/sf/picard/util/SolexaQualityConverterTest.java
deleted file mode 100644
index a13dda6..0000000
--- a/src/tests/java/net/sf/picard/util/SolexaQualityConverterTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package net.sf.picard.util;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-import java.util.Arrays;
-
-public class SolexaQualityConverterTest {
- //declared as a staic variable because we reuse it in IlluminaUtilTest
- public static Object[][] SOLEXA_QUALS_TO_PHRED_SCORE = new Object[][] {
- new Object[]{new byte[]{}, new byte[]{}},
- new Object[]{iToB(new int[]{120}), iToB(new int[]{56})},
- new Object[]{iToB(new int[]{64, 65, 120, 121}), iToB(new int[]{3, 4, 56, 57})},
- new Object[]{iToB(new int[]{0, 1, 63}), iToB(new int[]{0, 0, 0})}
- };
-
- public static Object[][] SOLEXA_QUALS_TO_PHRED_SCORE_1_3 = new Object[][] {
- new Object[]{new byte[]{}, new byte[]{}},
- new Object[]{iToB(new int[]{120}), iToB(new int[]{56})},
- new Object[]{iToB(new int[]{64, 65, 120, 121, 156, 157}), iToB(new int[]{0, 1, 56, 57, 92, 93})},
- new Object[]{iToB(new int[]{0, 1, 63}), iToB(new int[]{-64, -63, -1})}
- };
-
- public static Object[][] INVALID_SOLEXA_QUALS = new Object[][] {
- new Object[]{iToB(new int[]{-1}), iToB(new int[]{-65})},
- new Object[]{iToB(new int[]{-1, -2}), iToB(new int[]{-65, -66})}
- };
-
- private static final byte [] iToB(int [] intVals) {
- byte [] byteVals = new byte[intVals.length];
- for(int i = 0; i < byteVals.length; i++) {
- byteVals[i] = (byte) intVals[i];
- }
- return byteVals;
- }
-
- @DataProvider(name="solexaQualsToPhredScore")
- public Object[][] solexaQualsToPhredScore() {return SOLEXA_QUALS_TO_PHRED_SCORE;}
-
- @DataProvider(name="solexaQualsToPhredScore_1_3")
- public Object[][] solexaQualsToPhredScore_1_3() {return SOLEXA_QUALS_TO_PHRED_SCORE_1_3;}
-
- @DataProvider(name="invalidSolexaQuals")
- public Object[][] invalidSolexaQuals() {return INVALID_SOLEXA_QUALS;}
-
- @Test(dataProvider="solexaQualsToPhredScore")
- public void solexaQualsToPhredScoreTestArray(byte [] solexaQuals, byte [] phredScores) {
- byte [] qualsToPhred = Arrays.copyOf(solexaQuals, solexaQuals.length);
-
- SolexaQualityConverter.getSingleton().convertSolexaQualityCharsToPhredBinary(qualsToPhred);
- Assert.assertEquals(phredScores, qualsToPhred);
- }
-
- @Test(dataProvider="solexaQualsToPhredScore_1_3")
- public void solexaQualsToPhredScoreTestArray_1_3(byte [] solexaQuals, byte [] phredScores) {
- byte [] qualsToPhred = Arrays.copyOf(solexaQuals, solexaQuals.length);
-
- SolexaQualityConverter.getSingleton().convertSolexa_1_3_QualityCharsToPhredBinary(qualsToPhred);
- Assert.assertEquals(phredScores, qualsToPhred);
- }
-
- @Test(dataProvider="invalidSolexaQuals")
- public void invalidSolexaQualsTestArray(byte [] solexaQuals, byte [] phredScores) {
- byte [] qualsToPhred = Arrays.copyOf(solexaQuals, solexaQuals.length);
-
- SolexaQualityConverter.getSingleton().convertSolexa_1_3_QualityCharsToPhredBinary(qualsToPhred);
- Assert.assertEquals(phredScores, qualsToPhred);
- }
-
- @Test(dataProvider="solexaQualsToPhredScore")
- public void solexaCharToPhredBinaryTest(final byte [] solexaQuals, byte [] phredScores) {
- final SolexaQualityConverter solexaConverter = SolexaQualityConverter.getSingleton();
- for(int i = 0; i < solexaQuals.length; i++) {
- Assert.assertEquals(phredScores[i], solexaConverter.solexaCharToPhredBinary(solexaQuals[i]));
- }
- }
-
- @Test(dataProvider="invalidSolexaQuals", expectedExceptions = IndexOutOfBoundsException.class)
- public void invalidSolexaCharToPhredBinaryTest(final byte [] solexaQuals, byte [] phredScores) {
- final SolexaQualityConverter solexaConverter = SolexaQualityConverter.getSingleton();
- for(int i = 0; i < solexaQuals.length; i++) {
- solexaConverter.solexaCharToPhredBinary(solexaQuals[i]);
- }
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/TabbedTextFileWithHeaderParserTest.java b/src/tests/java/net/sf/picard/util/TabbedTextFileWithHeaderParserTest.java
deleted file mode 100644
index 4bc30eb..0000000
--- a/src/tests/java/net/sf/picard/util/TabbedTextFileWithHeaderParserTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package net.sf.picard.util;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.util.TabbedTextFileWithHeaderParser.Row;
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-
-/**
- *
- */
-public class TabbedTextFileWithHeaderParserTest {
- @Test
- public void basicParsingTest() throws Exception {
- final String[][] data = new String[][] {
- new String[] {"FOO", "BAR", "SPLAT"},
- new String[] {"1", "2", "3"},
- new String[] {"a", "b", "c"},
- new String[] {"foo", "bar", "splat"},
- };
-
- final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
- tmp.deleteOnExit();
- final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
-
- for (final String[] fields : data) {
- out.write(StringUtil.join("\t", fields));
- out.newLine();
- }
-
- out.close();
-
- final TabbedTextFileWithHeaderParser parser = new TabbedTextFileWithHeaderParser(tmp);
- for (final String col : data[0]) Assert.assertTrue(parser.hasColumn(col));
-
- int i=1;
- for (final Row row : parser) {
- final String[] expected = data[i++];
- Assert.assertEquals(row.getFields(), expected);
- Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
- }
-
- Assert.assertEquals(i, data.length);
- }
-
- @Test
- public void parsingWithColumnHeadersTest() throws Exception {
- final String[][] data = new String[][] {
- new String[] {"1", "2", "3"},
- new String[] {"a", "b", "2"},
- new String[] {"foo", "bar", ""},
- };
-
- final String[] headers = {"STRING", "STRING2", "NUMBER"};
-
- final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
- tmp.deleteOnExit();
- final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
-
- for (final String[] fields : data) {
- out.write(StringUtil.join("\t", fields));
- out.newLine();
- }
-
- out.close();
-
- final TabbedTextFileWithHeaderParser parser = new TabbedTextFileWithHeaderParser(tmp, headers);
- for (final String col : headers) Assert.assertTrue(parser.hasColumn(col));
-
- int i=0;
- for (final Row row : parser) {
- final String[] expected = data[i++];
- final String[] actual = row.getFields();
- for (int j = 0; j < expected.length; j++) {
- Assert.assertTrue((expected[j].equals("") && actual[j] == null) || expected[j].equals(actual[j]));
- }
- Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
- try {
- row.getField(headers[0]);
- row.getField(headers[1]);
- row.getIntegerField(headers[2]);
- }
- catch(Exception e) {
- Assert.fail("Failed to parse one of the fields in " + row.getCurrentLine() + ": " + e.getMessage());
- }
- }
-
- Assert.assertEquals(i, data.length);
- }
-
-}
diff --git a/src/tests/java/net/sf/picard/util/TextFileParsersTest.java b/src/tests/java/net/sf/picard/util/TextFileParsersTest.java
deleted file mode 100644
index bada9d7..0000000
--- a/src/tests/java/net/sf/picard/util/TextFileParsersTest.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.util;
-
-import net.sf.picard.io.IoUtil;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.picard.PicardException;
-
-public class TextFileParsersTest {
-
- private static final String testFile1 = "testdata/net/sf/picard/util/whitepace_text_file.txt";
- private static final String testFile2 = "testdata/net/sf/picard/util/all_ones_text_file.txt";
- private static final String testFile3 = "testdata/net/sf/picard/util/no_grouping_file.txt";
- private static final String testFile4 = "testdata/net/sf/picard/util/tabbed_text_file.txt";
- // There is a comment in the file data that should be skipped by the parser, so it is not included below
- private static final Object[][] testFile1Data = {
- { "Now", "is", "the", "time" },
- { "for", "all", "good", "men" },
- { "to", "come", "to", "the" },
- { "aid", "of", "their", "country." },
- { 15.0d, 23, 55, 67.88888}
- };
-
- @Test(dataProvider = "basicInputParserData")
- public void testTextFileParser(Object fileOrStream) throws IOException {
- FormatUtil format = new FormatUtil();
-
- List<String> expected = new ArrayList<String>();
- if (fileOrStream instanceof File) {
- BufferedReader reader = new BufferedReader(new FileReader((File)fileOrStream));
- String line = null;
- while ((line = reader.readLine()) != null) {
- if (!line.startsWith("#")) expected.add(line);
- }
- reader.close();
- }
-
- BasicInputParser parser = fileOrStream instanceof File
- ? new BasicInputParser(true, (File)fileOrStream )
- : new BasicInputParser(true, (InputStream)fileOrStream);
- int index = 0;
- while (parser.hasNext())
- {
- String parts[] = parser.next();
- if (fileOrStream instanceof File) {
- // Can't have the parser and the reader workking with an InputStream at the same time
- // so we only do this test with the file
- Assert.assertEquals(parser.getCurrentLine(), expected.get(index));
- }
- // Line 4 is a comment, so there's a gap in the line numbers
- Assert.assertEquals(parser.getCurrentLineNumber(), index <= 2 ? index+1 : index+2);
- Assert.assertEquals(parts.length, 4);
- if (index < 4) {
- for (int i = 0; i < parts.length; i++) {
- Assert.assertEquals(parts, testFile1Data[index]);
- }
- }
- else {
- Assert.assertEquals(testFile1Data[index][0], format.parseDouble(parts[0]));
- Assert.assertEquals(testFile1Data[index][1], format.parseInt(parts[1]));
- Assert.assertEquals(testFile1Data[index][2], format.parseInt(parts[2]));
- Assert.assertEquals(testFile1Data[index][3], format.parseDouble(parts[3]));
- }
- index++;
- }
- }
-
- @DataProvider(name = "basicInputParserData")
- private Object[][] getBasicInputParserData()
- {
- return new Object[][] {
- {new File(testFile1)},
- {IoUtil.openFileForReading(new File(testFile1))}
- };
- }
-
- @Test(dataProvider = "multiFileParsingData")
- public void testMultiFileParsing(Object fileOrStream1, Object fileOrStream2) throws IOException {
- FormatUtil format = new FormatUtil();
-
- List<String> expected = new ArrayList<String>();
- if (fileOrStream1 instanceof File) {
- BufferedReader reader = new BufferedReader(new FileReader((File)fileOrStream1));
- String line = null;
- while ((line = reader.readLine()) != null) {
- if (!line.startsWith("#")) expected.add(line);
- }
- reader.close();
- reader = new BufferedReader(new FileReader((File)fileOrStream2));
- while ((line = reader.readLine()) != null) {
- if (!line.startsWith("#")) expected.add(line);
- }
- reader.close();
- }
-
- BasicInputParser parser = fileOrStream1 instanceof File
- ? new BasicInputParser(true, (File)fileOrStream1, (File)fileOrStream2 )
- : new BasicInputParser(true, (InputStream)fileOrStream1, (InputStream)fileOrStream2);
- int index = 0;
- // Line 4 is a comment, so there's a gap in the line numbers
- int expectedLineNumbers[] = {1,2,3,5,6,1,2,3,5,6};
- while (parser.hasNext())
- {
- String parts[] = parser.next();
- if (fileOrStream1 instanceof File) {
- // Can't have the parser and the reader working with an InputStream at the same time
- // so we only test the files
- Assert.assertEquals(parser.getCurrentLine(), expected.get(index));
- }
- Assert.assertEquals(parser.getCurrentLineNumber(), expectedLineNumbers[index]);
- Assert.assertEquals(parts.length, 4);
- int indexIntoTestData = (index<5) ? index : index-5;
- if (index != 4 && index != 9) {
- for (int i = 0; i < parts.length; i++) {
- Assert.assertEquals(parts, testFile1Data[indexIntoTestData]);
- }
- }
- else {
- Assert.assertEquals(testFile1Data[indexIntoTestData][0], format.parseDouble(parts[0]));
- Assert.assertEquals(testFile1Data[indexIntoTestData][1], format.parseInt(parts[1]));
- Assert.assertEquals(testFile1Data[indexIntoTestData][2], format.parseInt(parts[2]));
- Assert.assertEquals(testFile1Data[indexIntoTestData][3], format.parseDouble(parts[3]));
- }
- index++;
- }
- }
-
- @DataProvider(name = "multiFileParsingData")
- private Object[][] getMultiFileParsingData()
- {
- return new Object[][] {
- {new File(testFile1), new File(testFile1)},
- {IoUtil.openFileForReading(new File(testFile1)), IoUtil.openFileForReading(new File(testFile1))}
- };
- }
-
- @Test(dataProvider = "noGroupingData")
- public void testTextFileParserNoGrouping(Object fileOrStream) {
- BasicInputParser parser = fileOrStream instanceof File
- ? new BasicInputParser(true, (File)fileOrStream)
- : new BasicInputParser(true, (InputStream)fileOrStream);
- parser.setTreatGroupedDelimitersAsOne(false);
- while (parser.hasNext()) {
- String parts[] = parser.next();
- for (int i = 0; i < parts.length; i++) {
- if (parts[i] != null) {
- Assert.assertEquals(Integer.parseInt(parts[i]), i+1);
- }
- }
- }
- }
-
- @DataProvider(name = "noGroupingData")
- private Object[][] getNoGroupingData()
- {
- return new Object[][] {
- {new File(testFile3)},
- {IoUtil.openFileForReading(new File(testFile3))}
- };
- }
-
-
- @Test(dataProvider = "leadingWhiteSpaceData")
- public void testTextFileParserLeadingWhitespace(Object fileOrStream) {
- BasicInputParser parser = fileOrStream instanceof File
- ? new BasicInputParser(true, (File)fileOrStream)
- : new BasicInputParser(true, (InputStream)fileOrStream);
- while (parser.hasNext())
- {
- String parts[] = parser.next();
- Assert.assertEquals(parts.length, 1);
- Assert.assertEquals("1", parts[0]);
- }
- }
-
- @DataProvider(name = "leadingWhiteSpaceData")
- private Object[][] getLeadingWhiteSpaceData()
- {
- return new Object[][] {
- {new File(testFile2)},
- {IoUtil.openFileForReading(new File(testFile2))}
- };
- }
-
-
- @Test(expectedExceptions= PicardException.class, dataProvider = "tooManyWordsData")
- public void testTooManyWords(Object fileOrStream) {
- BasicInputParser parser = fileOrStream instanceof File
- ? new BasicInputParser(true, 3, (File)fileOrStream)
- : new BasicInputParser(true, 3, (InputStream)fileOrStream);
- if (parser.hasNext()) {
- String parts[] = parser.next();
- }
- Assert.fail("Attempt to parse extra-long file should have failed but didn't.");
- }
-
- @DataProvider(name = "tooManyWordsData")
- private Object[][] getTooManyWordsData()
- {
- return new Object[][] {
- {new File(testFile1)},
- {IoUtil.openFileForReading(new File(testFile1))}
- };
- }
-
- @Test(dataProvider = "tabbedData")
- public void testTabbedFileParser(Object fileOrStream) {
- TabbedInputParser parser = fileOrStream instanceof File
- ? new TabbedInputParser(false, (File)fileOrStream)
- : new TabbedInputParser(false, (InputStream)fileOrStream);
- while (parser.hasNext()) {
- String parts[] = parser.next();
- for (int i = 0; i < parts.length; i++) {
- if (parts[i] != null && !parts[i].equals("")) {
- Assert.assertEquals(parts[i].trim(), String.valueOf(i+1));
- }
- }
- }
- }
-
- @DataProvider(name = "tabbedData")
- private Object[][] getTabbedData()
- {
- return new Object[][] {
- {new File(testFile4)},
- {IoUtil.openFileForReading(new File(testFile4))}
- };
- }
-
- @Test(dataProvider="data")
- public void testWordCountCalculation(String line, boolean groupDelimiters, String name) {
-
- WordCountTestParser parser = new WordCountTestParser();
- parser.setDelimiter("\t ");
- parser.setTreatGroupedDelimitersAsOne(groupDelimiters);
- parser.calculateWordCount(line.getBytes());
- Assert.assertEquals(parser.getWordCount(), 3, name);
- }
-
- @DataProvider(name = "data")
- private Object[][] getWordCountCalculationData()
- {
- return new Object[][]{
- {"1\t2\t3", false, "Tabs with all fields filled."},
- {"1\t2\t", false, "Tabs with no final field."},
- {"\t2\t3", false, "Tabs with no first field."},
- {"\t2\t", false, "Tabs with no first or final field."},
- {"1 2 3", true, "Spaces with all fields filled (grouping on)."},
- {"1 2 3 ", true, "Spaces with no final field (grouping on)."},
- {" 2 3 4", true, "Spaces with no first field (grouping on)."},
- {" 2 ", false, "Spaces with no first or final field."}
- };
- }
-
- /**
- * Toy class for testing the word count functionality
- */
- private static class WordCountTestParser extends AbstractInputParser {
-
- private char delimiters[] = null;
-
- public WordCountTestParser() {
- }
-
- public void setDelimiter(String delim) {
- delimiters = delim.toCharArray();
- }
-
- protected boolean isDelimiter(final byte b) {
- for (int i = 0; i < delimiters.length; i++) {
- if (b == delimiters[i]) {
- return true;
- }
- }
- return false;
- }
-
- protected byte[] readNextLine() { return new byte[0]; }
- public String getFileName() { return null; }
- public void close() {}
- }
-}
diff --git a/src/tests/java/net/sf/picard/util/UnsignedTypeUtilTest.java b/src/tests/java/net/sf/picard/util/UnsignedTypeUtilTest.java
deleted file mode 100644
index 97f60e5..0000000
--- a/src/tests/java/net/sf/picard/util/UnsignedTypeUtilTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package net.sf.picard.util;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class UnsignedTypeUtilTest {
-
- @DataProvider(name="uByteData")
- public Object [][] uByteData() {
- return new Object [][]{
- {(byte)0xFF, 255},
- {(byte)0xFE, 254},
- {(byte)0x80, 128},
- {(byte)0x7F, 127},
- {(byte)0x70, 112},
- {(byte)0x02, 2},
- {(byte)0x01, 1},
- {(byte)0x00, 0},
- };
- }
-
- @DataProvider(name="uShortData")
- public Object [][] uShortData() {
- return new Object [][]{
- {(short)0xFFFF, 65535},
- {(short)0xFFFE, 65534},
- {(short)0x8021, 32801},
- {(short)0x7FFF, 32767},
- {(short)0x5545, 21829},
- {(short)0x0002, 2},
- {(short)0x0001, 1},
- {(short)0x0000, 0}
- };
- }
-
- @DataProvider(name="uIntData")
- public Object [][] uIntData() {
- return new Object [][]{
- {0xFFFFFFFF, 4294967295L},
- {0xFFFFFFFE, 4294967294L},
- {0x81014000, 2164342784L},
- {0x7FFFFFFF, 2147483647L},
- {0x10502100, 273686784L},
- {0x00000002, 2L},
- {0x00000001, 1L},
- {0x00000000, 0L}
- };
- }
-
- /** Convert an unsigned byte to a signed int */
- @Test(dataProvider="uByteData")
- public void uByteToIntTest(final byte unsignedByte, final int expectedInt) {
- Assert.assertEquals(UnsignedTypeUtil.uByteToInt(unsignedByte), expectedInt);
- }
-
- /** Convert an unsigned byte to a signed short */
- @Test(dataProvider="uByteData")
- public void uByteToShortTest(final byte unsignedByte, final int expectedInt) {
- final short expectedShort = (short) expectedInt;
- Assert.assertEquals(UnsignedTypeUtil.uByteToShort(unsignedByte), expectedShort);
- }
-
- /** Convert an unsigned short to an Int */
- @Test(dataProvider="uShortData")
- public void uShortToIntTest(final short unsignedShort, final int expectedInt) {
- Assert.assertEquals(UnsignedTypeUtil.uShortToInt(unsignedShort), expectedInt);
- }
-
- /** Convert an unsigned int to a long */
- @Test(dataProvider="uIntData")
- public void uIntToLongTest(final int unsignedInt, final long expectedLong) {
- Assert.assertEquals(UnsignedTypeUtil.uIntToLong(unsignedInt), expectedLong);
- }
-}
diff --git a/src/tests/java/net/sf/picard/vcf/MergeVcfsTest.java b/src/tests/java/net/sf/picard/vcf/MergeVcfsTest.java
deleted file mode 100644
index d4590d0..0000000
--- a/src/tests/java/net/sf/picard/vcf/MergeVcfsTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package net.sf.picard.vcf;
-
-import net.sf.samtools.util.CloseableIterator;
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.VariantContextComparator;
-import org.broadinstitute.variant.vcf.VCFFileReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-
-public class MergeVcfsTest {
-
- private static final String TEST_DATA_PATH = "testdata/net/sf/picard/vcf/";
-
- @Test(enabled = false)
- public void testLong() {
- final MergeVcfs mergeVcfs = new MergeVcfs();
- mergeVcfs.OUTPUT = new File("/Users/jrose/development/long-merge-test.vcf.gz");
- mergeVcfs.CREATE_INDEX = false;
- mergeVcfs.INPUT = Arrays.asList(
- new File("/Volumes/Disko Segundo/mergevcfs/t2d_genes_contam_test4_per_sample_plus_five.snps.recalibrated.vcf"),
- new File("/Volumes/Disko Segundo/mergevcfs/t2d_genes_contam_test4_per_sample_plus_five.indels.filtered.vcf"));
-
- final int returnCode = mergeVcfs.instanceMain(new String[0]);
- Assert.assertEquals(returnCode, 0);
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testFailsOnDissimilarContigLists() {
- final File dissimilarContigs = new File(TEST_DATA_PATH, "CEUTrio-indels-dissimilar-contigs.vcf");
- final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
-
- final MergeVcfs mergeVcfs = new MergeVcfs();
- mergeVcfs.OUTPUT = new File("/dev/null/blah");
- mergeVcfs.CREATE_INDEX = false;
- mergeVcfs.INPUT = Arrays.asList(dissimilarContigs, snpInputFile);
-
- mergeVcfs.instanceMain(new String[0]);
- }
-
- @Test (expectedExceptions = TribbleException.class)
- public void testFailsOnNoContigList() {
- final File contiglessIndelFile = new File(TEST_DATA_PATH + "CEUTrio-indels-no-contigs.vcf");
- final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
-
- final MergeVcfs mergeVcfs = new MergeVcfs();
- mergeVcfs.OUTPUT = new File("/dev/null/blah");
- mergeVcfs.INPUT = Arrays.asList(contiglessIndelFile, snpInputFile);
-
- mergeVcfs.instanceMain(new String[0]);
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testFailsOnDissimilarSampleLists() {
- final File badSampleIndelFile = new File(TEST_DATA_PATH + "CEUTrio-indels-bad-samples.vcf");
- final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
-
- final MergeVcfs mergeVcfs = new MergeVcfs();
- mergeVcfs.OUTPUT = new File("/dev/null/blah");
- mergeVcfs.INPUT = Arrays.asList(badSampleIndelFile, snpInputFile);
-
- mergeVcfs.instanceMain(new String[0]);
- }
-
- @Test
- public void testMergeIndelsSnps() throws IOException {
- final File indelInputFile = new File(TEST_DATA_PATH + "CEUTrio-indels.vcf");
- final File snpInputFile = new File(TEST_DATA_PATH + "CEUTrio-snps.vcf");
- final File output = File.createTempFile("merge-indels-snps-test-output.", ".vcf");
- output.deleteOnExit();
-
- final Queue<String> indelContigPositions = loadContigPositions(indelInputFile);
- final Queue<String> snpContigPositions = loadContigPositions(snpInputFile);
-
- final MergeVcfs mergeVcfs = new MergeVcfs();
- mergeVcfs.OUTPUT = output;
- mergeVcfs.INPUT = Arrays.asList(indelInputFile, snpInputFile);
-
- final int returnCode = mergeVcfs.instanceMain(new String[0]);
- Assert.assertEquals(returnCode, 0);
-
- // Make sure that the order of the output file is identical to the order
- // of the input files by iterating through the output, making sure that,
- // if the context is an indel (snp), the next genomic position in the indel
- // (snp) queue is the same. Also make sure that the context is in the order
- // specified by the input files.
- final VCFFileReader outputReader = new VCFFileReader(output);
- final VariantContextComparator outputComparator = outputReader.getFileHeader().getVCFRecordComparator();
- VariantContext last = null;
- final CloseableIterator<VariantContext> iterator = outputReader.iterator();
- while (iterator.hasNext()) {
- final VariantContext outputContext = iterator.next();
- if (outputContext.isIndel()) Assert.assertEquals(getContigPosition(outputContext), indelContigPositions.poll());
- if (outputContext.isSNP()) Assert.assertEquals(getContigPosition(outputContext), snpContigPositions.poll());
- if (last != null) Assert.assertTrue(outputComparator.compare(last, outputContext) < 0);
- last = outputContext;
- }
- iterator.close();
-
- // We should have polled everything off the indel (snp) queues
- Assert.assertEquals(indelContigPositions.size(), 0);
- Assert.assertEquals(snpContigPositions.size(), 0);
-
- output.deleteOnExit();
- }
-
- @Test
- public void testMergeRandomScatter() throws IOException {
- final File zero = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-0.vcf");
- final File one = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-1.vcf");
- final File two = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-2.vcf");
- final File three = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-3.vcf");
- final File four = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-4.vcf");
- final File five = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-5.vcf");
-
- final List<Queue<String>> positionQueues = new ArrayList<Queue<String>>(6);
- positionQueues.add(0, loadContigPositions(zero));
- positionQueues.add(1, loadContigPositions(one));
- positionQueues.add(2, loadContigPositions(two));
- positionQueues.add(3, loadContigPositions(three));
- positionQueues.add(4, loadContigPositions(four));
- positionQueues.add(5, loadContigPositions(five));
-
- final File output = File.createTempFile("random-scatter-test-output.", ".vcf");
- output.deleteOnExit();
-
- final MergeVcfs mergeVcfs = new MergeVcfs();
- mergeVcfs.OUTPUT = output;
- mergeVcfs.INPUT = Arrays.asList(zero, one, two, three, four, five);
-
- final int returnCode = mergeVcfs.instanceMain(new String[0]);
- Assert.assertEquals(returnCode, 0);
-
- final VCFFileReader outputReader = new VCFFileReader(output);
- final VariantContextComparator outputComparator = outputReader.getFileHeader().getVCFRecordComparator();
- VariantContext last = null;
- final CloseableIterator<VariantContext> iterator = outputReader.iterator();
- while (iterator.hasNext()) {
- final VariantContext outputContext = iterator.next();
- final String position = getContigPosition(outputContext);
- for (final Queue<String> positionQueue : positionQueues) {
- if (position.equals(positionQueue.peek())) {
- positionQueue.poll();
- break;
- }
- }
-
- if (last != null) Assert.assertTrue(outputComparator.compare(last, outputContext) < 0);
- last = outputContext;
- }
- iterator.close();
-
- for (final Queue<String> positionQueue : positionQueues) {
- Assert.assertEquals(positionQueue.size(), 0);
- }
- }
-
- static Queue<String> loadContigPositions(final File inputFile) {
- final VCFFileReader reader = new VCFFileReader(inputFile);
- final Queue<String> contigPositions = new LinkedList<String>();
- final CloseableIterator<VariantContext> iterator = reader.iterator();
- while (iterator.hasNext()) contigPositions.add(getContigPosition(iterator.next()));
- iterator.close();
- reader.close();
- return contigPositions;
- }
-
- static String getContigPosition(final VariantContext context) {
- return context.getChr() + "-" + Integer.toString(context.getStart());
- }
-}
diff --git a/src/tests/java/net/sf/picard/vcf/SplitVcfsTest.java b/src/tests/java/net/sf/picard/vcf/SplitVcfsTest.java
deleted file mode 100644
index c64c743..0000000
--- a/src/tests/java/net/sf/picard/vcf/SplitVcfsTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package net.sf.picard.vcf;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.samtools.util.CloseableIterator;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.VariantContext.Type;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriter;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.broadinstitute.variant.vcf.VCFFileReader;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Queue;
-
-public class SplitVcfsTest {
-
- private static final File OUTPUT_DATA_PATH = IoUtil.createTempDir("SplitVcfsTest", null);
- private static final File TEST_DATA_PATH = new File("testdata/net/sf/picard/vcf/");
-
- @AfterClass
- public void teardown() {
- IoUtil.deleteDirectoryTree(OUTPUT_DATA_PATH);
- }
-
- @Test
- public void testSplit() {
- final File indelOutputFile = new File(OUTPUT_DATA_PATH, "split-vcfs-test-indels-delete-me.vcf");
- final File snpOutputFile = new File(OUTPUT_DATA_PATH, "split-vcfs-test-snps-delete-me.vcf");
- final File input = new File(TEST_DATA_PATH, "CEUTrio-merged-indels-snps.vcf");
-
- indelOutputFile.deleteOnExit();
- snpOutputFile.deleteOnExit();
-
- final SplitVcfs splitVcfs = new SplitVcfs();
- splitVcfs.SNP_OUTPUT = snpOutputFile;
- splitVcfs.INDEL_OUTPUT = indelOutputFile;
- splitVcfs.INPUT = input;
-
- final int returnCode = splitVcfs.instanceMain(new String[0]);
- Assert.assertEquals(returnCode, 0);
-
- final Queue<String> indelContigPositions = MergeVcfsTest.loadContigPositions(indelOutputFile);
- final Queue<String> snpContigPositions = MergeVcfsTest.loadContigPositions(snpOutputFile);
-
- final VCFFileReader reader = new VCFFileReader(input);
- final CloseableIterator<VariantContext> iterator = reader.iterator();
- while (iterator.hasNext()) {
- final VariantContext inputContext = iterator.next();
- if (inputContext.isIndel()) Assert.assertEquals(MergeVcfsTest.getContigPosition(inputContext), indelContigPositions.poll());
- if (inputContext.isSNP()) Assert.assertEquals(MergeVcfsTest.getContigPosition(inputContext), snpContigPositions.poll());
- }
-
- // We should have polled everything off the indel (snp) queues
- Assert.assertEquals(indelContigPositions.size(), 0);
- Assert.assertEquals(snpContigPositions.size(), 0);
- }
-
- @Test (enabled = false)
- public void sampleVCF() {
-
- final int SAMPLE_FREQUENCY = 20000;
-
- int totalIn = 0;
- int totalOut = 0;
- final Map<Type, Integer> inputCounts = new HashMap<Type, Integer>();
- final Map<Type, Integer> outputCounts = new HashMap<Type, Integer>();
- final File INPUT = new File("/Volumes/Disko Segundo/splitvcfs/CEUTrio.HiSeq.WGS.b37.snps_and_indels.recalibrated.filtered.phased.CURRENT.vcf.gz");
- final VCFFileReader reader = new VCFFileReader(INPUT);
-
- final VariantContextWriter OUTPUT = new VariantContextWriterBuilder()
- .setOutputFile("/Volumes/shm/CEUTrio-REDUCED.vcf")
- .clearOptions()
- .build();
- OUTPUT.writeHeader(reader.getFileHeader());
-
- final CloseableIterator<VariantContext> iterator = reader.iterator();
- while (iterator.hasNext()) {
- final VariantContext variantContext = iterator.next();
- totalIn++;
-
- final Integer inputCount = inputCounts.get(variantContext.getType());
- if (inputCount == null) inputCounts.put(variantContext.getType(), 1);
- else inputCounts.put(variantContext.getType(), inputCount + 1);
-
- if ((totalIn % SAMPLE_FREQUENCY) == 0) {
- OUTPUT.add(variantContext);
- totalOut++;
- final Integer outputCount = outputCounts.get(variantContext.getType());
- if (outputCount == null) outputCounts.put(variantContext.getType(), 1);
- else outputCounts.put(variantContext.getType(), outputCount + 1);
- }
- }
-
- reader.close();
- OUTPUT.close();
-
- System.out.println("INPUT: " + totalIn + "; OUTPUT: " + totalOut);
- System.out.println("INPUT: " + inputCounts.toString());
- System.out.println("OUTPUT: " + outputCounts.toString());
- }
-}
diff --git a/src/tests/java/net/sf/picard/vcf/VariantContextComparatorTest.java b/src/tests/java/net/sf/picard/vcf/VariantContextComparatorTest.java
deleted file mode 100644
index 18588d3..0000000
--- a/src/tests/java/net/sf/picard/vcf/VariantContextComparatorTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2012 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.picard.vcf;
-
-import org.broadinstitute.variant.variantcontext.Allele;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.VariantContextBuilder;
-import org.broadinstitute.variant.variantcontext.VariantContextComparator;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.List;
-
-public class VariantContextComparatorTest {
-
- private static VariantContext buildVariantContext(final String source, final String contig, final long start) {
- final Collection<Allele> alleles = new ArrayList<Allele>();
- alleles.add(Allele.create("AAAA", true));
- alleles.add(Allele.create("AAGG", false));
- return new VariantContextBuilder(source, contig, start, start + 3, alleles).make();
- }
-
- private static List<String> getOrderedContigList(final VariantContext... variantContexts) {
- final LinkedHashSet<String> contigs = new LinkedHashSet<String>();
- for (final VariantContext context : variantContexts) {
- contigs.add(context.getChr());
- }
- return new ArrayList<String>(contigs);
- }
-
- @Test
- public void testIdentical() {
- final VariantContext contextOne = buildVariantContext("source", "one", 100);
- final List<String> contigs = getOrderedContigList(contextOne);
- Assert.assertEquals(0, new VariantContextComparator(contigs).compare(contextOne, contextOne));
- }
-
- @Test
- public void testPositions() {
- final VariantContext contextOne = buildVariantContext("source", "one", 100);
- final VariantContext contextTwo = buildVariantContext("source", "one", 150);
- final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
- }
-
- @Test
- public void testContigs() {
- final VariantContext contextOne = buildVariantContext("source", "one", 100);
- final VariantContext contextTwo = buildVariantContext("source", "two", 100);
- final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
- }
-
- @Test
- public void testCombinationOne() {
- final VariantContext contextOne = buildVariantContext("source", "one", 100);
- final VariantContext contextTwo = buildVariantContext("source", "two", 150);
- final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
- }
-
- @Test
- public void testCombinationTwo() {
- final VariantContext contextOne = buildVariantContext("source", "one", 150);
- final VariantContext contextTwo = buildVariantContext("source", "two", 100);
- final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
- Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testThrowsOnDuplicateContig() {
- final List<String> contigs = new ArrayList<String>(3);
- contigs.add("one");
- contigs.add("two");
- contigs.add("one");
-
- new VariantContextComparator(contigs);
- }
-}
diff --git a/src/tests/java/net/sf/picard/vcf/VcfFormatConverterTest.java b/src/tests/java/net/sf/picard/vcf/VcfFormatConverterTest.java
deleted file mode 100644
index dfa7124..0000000
--- a/src/tests/java/net/sf/picard/vcf/VcfFormatConverterTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-* Copyright (c) 2013 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package net.sf.picard.vcf;
-
-import net.sf.picard.PicardException;
-import org.broad.tribble.Tribble;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-
-public class VcfFormatConverterTest {
- private static final String TEST_DATA_PATH = "testdata/net/sf/picard/vcf/";
- private static final String TEST_FILE_BASE = "vcfFormatTest";
-
- private static final String VCF = ".vcf";
- private static final String VCF_GZ = ".vcf.gz";
- private static final String BCF = ".bcf";
-
- private static final File TEST_VCF = new File(TEST_DATA_PATH, TEST_FILE_BASE + VCF);
- private static final File TEST_BCF = new File(TEST_DATA_PATH, TEST_FILE_BASE + BCF);
-
- @Test
- public void testVcfToVcf() {
- runLikeTest(TEST_VCF, VCF);
- }
-
- @Test
- public void testVcfToBcf() {
- runBackAndForthTest(TEST_VCF, BCF, VCF);
- }
-
- @Test
- public void testVcfToVcfGz() {
- runBackAndForthTest(TEST_VCF, VCF_GZ, VCF);
- }
-
- @Test
- public void testBcfToBcf() {
- runLikeTest(TEST_BCF, BCF);
- }
-
- @Test
- public void testBcfToVcf() {
- runBackAndForthTest(TEST_BCF, VCF, BCF);
- }
-
- private void runLikeTest(final File input, final String format) {
- final File outputFile = convertFile(input, "likeTest", format);
- compareFiles(input, outputFile);
- }
-
- private void runBackAndForthTest(final File input, final String format, final String originalFormat) {
- final String tempPrefix = "backAndForth";
-
- final File backAndForth = convertFile(input, tempPrefix, format);
- final File backAndForthSeries2 = convertFile(backAndForth, tempPrefix, originalFormat);
-
- compareFiles(input, backAndForthSeries2);
- }
-
- private File convertFile(final File input, final String prefix, final String format) {
- final File outputFile;
- try {
- outputFile = File.createTempFile(prefix, format);
- } catch (final IOException ioe) {
- throw new PicardException("Unable to create temp file!");
- }
-
- outputFile.deleteOnExit();
- new File(outputFile.getAbsolutePath() + Tribble.STANDARD_INDEX_EXTENSION).deleteOnExit();
- final VcfFormatConverter vcfFormatConverter = new VcfFormatConverter();
- vcfFormatConverter.INPUT = input;
- vcfFormatConverter.OUTPUT = outputFile;
- if (VCF_GZ.equals(format)) {
- vcfFormatConverter.CREATE_INDEX = false;
- }
- if (input.getName().endsWith(VCF_GZ)) {
- vcfFormatConverter.REQUIRE_INDEX = false;
- }
-
- Assert.assertEquals(vcfFormatConverter.doWork(), 0);
- return outputFile;
- }
-
- private void compareFiles(final File file1, final File file2) {
- // Ok, so this isn't exactly comparing md5 checksums or anything, but it should be good enough
- // for our purposes.
- Assert.assertTrue(file1.exists());
- Assert.assertTrue(file2.exists());
- Assert.assertEquals(file1.length(), file2.length());
- }
-
-}
diff --git a/src/tests/java/net/sf/samtools/ArrayTagValueTest.java b/src/tests/java/net/sf/samtools/ArrayTagValueTest.java
deleted file mode 100644
index 5af84f5..0000000
--- a/src/tests/java/net/sf/samtools/ArrayTagValueTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.sam.SamFormatConverter;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Test 'B' array tag type.
- */
-public class ArrayTagValueTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/samtools");
- private static final SortedSet<String> arrayTags = new TreeSet<String>(Arrays.asList(
- "X0:B:c,0",
- "X1:B:c,-128,127,-55,3",
- "X2:B:C,12",
- "X3:B:C,0,255,129,128,127",
- "X4:B:s,-23",
- "X5:B:s,32767,-32768,16384,-16384,0",
- "X6:B:S,65535",
- "X7:B:S,0,65535,13,14,15,22",
- "X8:B:i,0",
- "X9:B:i,2147483647,-2147483648,49,-1345678",
- "Y0:B:I,4000000000",
- "Y1:B:I,0,4294967295,3000000000"
- ));
-
- // Floats must be done separately because of ambiguity in string representation.
- private static final SortedMap<String, String> floatArrayTags = new TreeMap<String, String>();
- static {
- floatArrayTags.put("F0", "B:f,0");
- floatArrayTags.put("F1", "B:f,0,-0,.0,-.0,-0.0,3.4028234663852886E38f,-3.4028234663852886E38f,1.401298464324817E-45f,-1.401298464324817E-45f");
-
- }
-
- /**
- * Convert hand-crafted SAM text to BAM and then back to SAM, in order to test reading and writing of both SAM and BAM.
- */
- @Test
- public void basicTest() throws Exception {
-
- // Write a SAM file not using SAM-JDK
- final String inputSamWithNoTags = IoUtil.readFully(new FileInputStream(new File(TEST_DATA_DIR, "array_tags.sam")));
- final File inputSam = File.createTempFile("arrayTagValueTest.", ".sam");
- inputSam.deleteOnExit();
- final FileWriter os = new FileWriter(inputSam);
- os.write(inputSamWithNoTags);
- for (final String tag: arrayTags) {
- os.write("\t");
- os.write(tag);
- }
- for (final Map.Entry<String, String> floatTag: floatArrayTags.entrySet()) {
- os.write("\t");
- os.write(floatTag.getKey() + ":" + floatTag.getValue());
- }
- os.close();
-
- // Convert the SAM to BAM, in order to test SAM reading and BAM writing.
- final File bam = File.createTempFile("arrayTagValueTest.", ".bam");
- bam.deleteOnExit();
-
- final String[] samToBamArgs = {"INPUT="+inputSam.getAbsolutePath(),
- "OUTPUT="+bam.getAbsolutePath()};
- Assert.assertEquals(new SamFormatConverter().instanceMain(samToBamArgs), 0);
-
- // Convert the BAM to SAM, in order to test BAM reading and SAM writing.
- final File outputSam = File.createTempFile("arrayTagValueTest.convertedFromBam.", ".sam");
- outputSam.deleteOnExit();
- final String[] bamToSamArgs = {"INPUT="+bam.getAbsolutePath(),
- "OUTPUT="+outputSam.getAbsolutePath()};
- Assert.assertEquals(new SamFormatConverter().instanceMain(bamToSamArgs), 0);
-
- // Read the SAM file not using SAM-JDK, in order to validate that the tags are as expected.
- final BufferedReader reader = new BufferedReader(new FileReader(outputSam));
- // Skip header lines.
- reader.readLine(); reader.readLine();
- final String samTextLine = reader.readLine();
-
- // Get the single SAM record, and pull off the tags.
- final String[] fields = samTextLine.split("\t");
- final SortedSet<String> actualTags = new TreeSet<String>();
- final SortedMap<String, String> actualFloatTags = new TreeMap<String, String>();
- for (int i = 11; i < fields.length; ++i) {
- if (fields[i].startsWith("F")) {
- final String[] tagAndValue = fields[i].split(":", 2);
- actualFloatTags.put(tagAndValue[0], tagAndValue[1]);
- } else {
- actualTags.add(fields[i]);
- }
- }
- Assert.assertEquals(actualTags, arrayTags);
-
- // Floats must be done separately because of ambiguity in string representation.
- Assert.assertEquals(actualFloatTags.size(), floatArrayTags.size());
-
- for (final String tag: floatArrayTags.keySet()) {
- assertFloatTagValuesEqual(actualFloatTags.get(tag), floatArrayTags.get(tag));
- }
- }
-
- private void assertFloatTagValuesEqual(final String actualFloatStr, final String expectedFloatStr) {
- final float[] actualFloats = convertFloatStr(actualFloatStr);
- final float[] expectedFloats = convertFloatStr(expectedFloatStr);
- Assert.assertTrue(Arrays.equals(actualFloats, expectedFloats));
- }
-
- private float[] convertFloatStr(final String floatStr) {
- final String[] fields = floatStr.split(":")[1].split(",");
- final float[] ret = new float[fields.length - 1];
- for (int i = 1; i < fields.length; ++i) {
- ret[i-1] = Float.parseFloat(fields[i]);
- }
- return ret;
- }
-
- private static final String HEX_TAG = "X0";
- private static final String HEX_TAG_STRING = ":H:00ff7FF7";
- private static final byte[] EXPECTED_HEX_ARRAY = {0, (byte)0xff, 0x7f, (byte)0xf7};
- /**
- * Old-style hex arrays (type H) are converted to new-style byte arrays when read.
- * @throws Exception
- */
- @Test
- public void hexArrayFromSamTest() throws Exception {
- // Write a SAM file not using SAM-JDK
- final String inputSamWithNoTags = IoUtil.readFully(new FileInputStream(new File(TEST_DATA_DIR, "array_tags.sam")));
- final File inputSam = File.createTempFile("arrayTagValueTest.", ".sam");
- inputSam.deleteOnExit();
- final FileWriter os = new FileWriter(inputSam);
- os.write(inputSamWithNoTags);
- os.write("\t" + HEX_TAG + HEX_TAG_STRING);
- os.close();
- final SAMFileReader samReader = new SAMFileReader(inputSam);
- final SAMRecord samRecord = samReader.iterator().next();
- Assert.assertTrue(Arrays.equals((byte[])samRecord.getAttribute(HEX_TAG), EXPECTED_HEX_ARRAY));
- Assert.assertTrue(Arrays.equals(samRecord.getByteArrayAttribute(HEX_TAG), EXPECTED_HEX_ARRAY));
- Assert.assertTrue(Arrays.equals(samRecord.getSignedByteArrayAttribute(HEX_TAG), EXPECTED_HEX_ARRAY));
- }
-
- /**
- * Old-style hex arrays (type H) are converted to new-style byte arrays when read. Confirm that a BAM containing
- * an old-style hex array is converted properly.
- * @throws Exception
- */
- @Test
- public void hexArrayFromBamTest() throws Exception {
- final SAMFileReader samReader = new SAMFileReader(new File(TEST_DATA_DIR, "recordWithHexArrayAttribute.bam"));
- final SAMRecord samRecord = samReader.iterator().next();
- Assert.assertTrue(Arrays.equals((byte[])samRecord.getAttribute(HEX_TAG), EXPECTED_HEX_ARRAY));
- Assert.assertTrue(Arrays.equals(samRecord.getByteArrayAttribute(HEX_TAG), EXPECTED_HEX_ARRAY));
- Assert.assertTrue(Arrays.equals(samRecord.getSignedByteArrayAttribute(HEX_TAG), EXPECTED_HEX_ARRAY));
- }
-}
diff --git a/src/tests/java/net/sf/samtools/BAMFileIndexTest.java b/src/tests/java/net/sf/samtools/BAMFileIndexTest.java
deleted file mode 100755
index 02741e1..0000000
--- a/src/tests/java/net/sf/samtools/BAMFileIndexTest.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-import net.sf.samtools.util.StopWatch;
-import net.sf.samtools.util.StringUtil;
-import org.testng.Assert;
-import static org.testng.Assert.*;
-
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.util.*;
-
-/**
- * Test BAM file indexing.
- */
-public class BAMFileIndexTest
-{
- private final File BAM_FILE = new File("testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam");
- private final boolean mVerbose = false;
-
- @Test
- public void testGetSearchBins()
- throws Exception {
- final DiskBasedBAMFileIndex bfi = new DiskBasedBAMFileIndex(new File(BAM_FILE.getPath() + ".bai"),
- null); // todo can null be replaced with a Sequence dictionary for the BAM_FILE?
- final long[] bins = bfi.getSpanOverlapping(1, 0, 0).toCoordinateArray();
- /***
- if (bins == null) {
- System.out.println("Search bins: " + bins);
- return;
- }
- System.out.println("Search bins:");
- for (int i = 0; i < bins.length; i++) {
- System.out.println(" " + Long.toHexString(bins[i]));
- }
- ***/
- assertNotNull(bins);
- assertEquals(bins.length, 2);
- }
-
- @Test
- public void testSpecificQueries()
- throws Exception {
- assertEquals(runQueryTest(BAM_FILE, "chrM", 10400, 10600, true), 1);
- assertEquals(runQueryTest(BAM_FILE, "chrM", 10400, 10600, false), 2);
- }
-
- @Test(groups = {"slow"})
- public void testRandomQueries()
- throws Exception {
- runRandomTest(BAM_FILE, 1000, new Random());
- }
-
- @Test
- public void testWholeChromosomes() {
- checkChromosome("chrM", 23);
- checkChromosome("chr1", 885);
- checkChromosome("chr2", 837);
- /***
- checkChromosome("chr3", 683);
- checkChromosome("chr4", 633);
- checkChromosome("chr5", 611);
- checkChromosome("chr6", 585);
- checkChromosome("chr7", 521);
- checkChromosome("chr8", 507);
- checkChromosome("chr9", 388);
- checkChromosome("chr10", 477);
- checkChromosome("chr11", 467);
- checkChromosome("chr12", 459);
- checkChromosome("chr13", 327);
- checkChromosome("chr14", 310);
- checkChromosome("chr15", 280);
- checkChromosome("chr16", 278);
- checkChromosome("chr17", 269);
- checkChromosome("chr18", 265);
- checkChromosome("chr19", 178);
- checkChromosome("chr20", 228);
- checkChromosome("chr21", 123);
- checkChromosome("chr22", 121);
- checkChromosome("chrX", 237);
- checkChromosome("chrY", 29);
- ***/
- }
-
- @Test
- public void testQueryUnmapped() {
- final StopWatch linearScan = new StopWatch();
- final StopWatch queryUnmapped = new StopWatch();
- int unmappedCountFromLinearScan = 0;
- final File bamFile = BAM_FILE;
- final SAMFileReader reader = new SAMFileReader(bamFile);
- linearScan.start();
- CloseableIterator<SAMRecord> it = reader.iterator();
- int mappedCount = 0;
- while (it.hasNext()) {
- final SAMRecord rec = it.next();
- if (rec.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
- unmappedCountFromLinearScan = 1;
- break;
- }
- ++mappedCount;
- }
- linearScan.stop();
- System.out.println("Found start of unmapped reads. Num mapped reads: " + mappedCount);
- System.out.println("Time so far: " + linearScan.getElapsedTimeSecs());
- linearScan.start();
-
- while (it.hasNext()) {
- final SAMRecord rec = it.next();
- Assert.assertEquals(rec.getReferenceIndex().intValue(), SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- ++unmappedCountFromLinearScan;
- }
- it.close();
- linearScan.stop();
- queryUnmapped.start();
- it = reader.queryUnmapped();
- int unmappedCountFromQueryUnmapped = 0;
- while (it.hasNext()) {
- final SAMRecord rec = it.next();
- Assert.assertEquals(rec.getReferenceIndex().intValue(), SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX);
- ++unmappedCountFromQueryUnmapped;
- }
- it.close();
- queryUnmapped.stop();
- System.out.println("Linear scan total time: " + linearScan.getElapsedTimeSecs());
- System.out.println("queryUnmapped time: " + queryUnmapped.getElapsedTimeSecs());
- System.out.println("Number of unmapped reads:" + unmappedCountFromQueryUnmapped);
- Assert.assertEquals(unmappedCountFromQueryUnmapped, unmappedCountFromLinearScan);
- reader.close();
- }
-
- @Test
- public void testQueryAlignmentStart() {
- final SAMFileReader reader = new SAMFileReader(BAM_FILE);
- CloseableIterator<SAMRecord> it = reader.queryAlignmentStart("chr1", 202160268);
- Assert.assertEquals(countElements(it), 2);
- it.close();
- it = reader.queryAlignmentStart("chr1", 201595153);
- Assert.assertEquals(countElements(it), 1);
- it.close();
- // There are records that overlap this position, but none that start here
- it = reader.queryAlignmentStart("chrM", 10400);
- Assert.assertEquals(countElements(it), 0);
- it.close();
- // One past the last chr1 record
- it = reader.queryAlignmentStart("chr1", 246817509);
- Assert.assertEquals(countElements(it), 0);
- it.close();
- }
-
- @Test
- public void testQueryMate() {
- final SAMFileReader reader = new SAMFileReader(BAM_FILE);
-
- // Both ends mapped
- SAMRecord rec = getSingleRecordStartingAt(reader, "chrM", 1687);
- SAMRecord mate = reader.queryMate(rec);
- assertMate(rec, mate);
- SAMRecord originalRec = reader.queryMate(mate);
- Assert.assertEquals(originalRec, rec);
-
- // One end mapped
- rec = getSingleRecordStartingAt(reader, "chr11", 48720338);
- mate = reader.queryMate(rec);
- assertMate(rec, mate);
- originalRec = reader.queryMate(mate);
- Assert.assertEquals(originalRec, rec);
-
- // Both ends mapped
- final CloseableIterator<SAMRecord> it = reader.queryUnmapped();
- rec = null;
- while (it.hasNext()) {
- final SAMRecord next = it.next();
- if (next.getReadName().equals("2615")) {
- rec = next;
- break;
- }
- }
- it.close();
- Assert.assertNotNull(rec);
- mate = reader.queryMate(rec);
- assertMate(rec, mate);
- originalRec = reader.queryMate(mate);
- Assert.assertEquals(originalRec, rec);
- }
-
- private void assertMate(final SAMRecord rec, final SAMRecord mate) {
- Assert.assertNotNull(mate);
- Assert.assertEquals(mate.getReadName(), rec.getReadName());
- Assert.assertEquals(mate.getReferenceIndex(), rec.getMateReferenceIndex());
- if (SAMUtils.getMateCigarString(rec) != null) {
- Assert.assertEquals(mate.getCigarString(), SAMUtils.getMateCigarString(rec));
- }
- Assert.assertEquals(mate.getAlignmentStart(), rec.getMateAlignmentStart());
- Assert.assertFalse(mate.getFirstOfPairFlag() == rec.getFirstOfPairFlag());
- }
-
- /**
- * Compare the results of a multi-interval query versus the union of the results from each interval done
- * separately.
- */
- @Test(dataProvider = "testMultiIntervalQueryDataProvider")
- public void testMultiIntervalQuery(final boolean contained) {
- final List<String> referenceNames = getReferenceNames(BAM_FILE);
-
- final SAMFileReader.QueryInterval[] intervals = generateRandomIntervals(referenceNames.size(), 1000, new Random());
- final Set<SAMRecord> multiIntervalRecords = new HashSet<SAMRecord>();
- final Set<SAMRecord> singleIntervalRecords = new HashSet<SAMRecord>();
- final SAMFileReader reader = new SAMFileReader(BAM_FILE);
- for (final SAMFileReader.QueryInterval interval : intervals) {
- consumeAll(singleIntervalRecords, reader.query(referenceNames.get(interval.referenceIndex), interval.start, interval.end, contained));
- }
-
- final SAMFileReader.QueryInterval[] optimizedIntervals = SAMFileReader.QueryInterval.optimizeIntervals(intervals);
- consumeAll(multiIntervalRecords, reader.query(optimizedIntervals, contained));
- final Iterator<SAMRecord> singleIntervalRecordIterator = singleIntervalRecords.iterator();
- boolean failed = false;
- while (singleIntervalRecordIterator.hasNext()) {
- final SAMRecord record = singleIntervalRecordIterator.next();
- if (!multiIntervalRecords.remove(record)) {
- System.out.println("SingleIntervalQuery found " + record + " but MultiIntervalQuery did not");
- failed = true;
- }
- }
- for (final SAMRecord record : multiIntervalRecords) {
- System.out.println("MultiIntervalQuery found " + record + " but SingleIntervalQuery did not");
- failed = true;
- }
- Assert.assertFalse(failed);
- }
-
- @DataProvider(name = "testMultiIntervalQueryDataProvider")
- private Object[][] testMultiIntervalQueryDataProvider() {
- return new Object[][]{{true}, {false}};
- }
-
- @Test
- public void testUnmappedMateWithCoordinate() throws Exception {
- // TODO: Use SAMRecordSetBuilder when it is able to create a pair with one end unmapped
- final String samText = "@HD\tVN:1.0\tSO:coordinate\n" +
- "@SQ\tSN:chr1\tLN:101\n" +
- "@SQ\tSN:chr2\tLN:101\n" +
- "@SQ\tSN:chr3\tLN:101\n" +
- "@SQ\tSN:chr4\tLN:101\n" +
- "@SQ\tSN:chr5\tLN:101\n" +
- "@SQ\tSN:chr6\tLN:101\n" +
- "@SQ\tSN:chr7\tLN:404\n" +
- "@SQ\tSN:chr8\tLN:202\n" +
- "@RG\tID:0\tSM:Hi,Mom!\n" +
- "@PG\tID:1\tPN:Hey!\tVN:2.0\n" +
- "one_end_mapped\t73\tchr7\t100\t255\t101M\t*\t0\t0\tCAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN\t)'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/&\tRG:Z:0\n" +
- "one_end_mapped\t133\tchr7\t100\t0\t*\t=\t100\t0\tNCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA\t&/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1\tRG:Z:0\n";
- final ByteArrayInputStream bis = new ByteArrayInputStream(StringUtil.stringToBytes(samText));
- final File bamFile = File.createTempFile("BAMFileIndexTest.", BamFileIoUtils.BAM_FILE_EXTENSION);
- bamFile.deleteOnExit();
- final SAMFileReader textReader = new SAMFileReader(bis);
- SAMFileWriterFactory samFileWriterFactory = new SAMFileWriterFactory();
- samFileWriterFactory.setCreateIndex(true);
- final SAMFileWriter writer = samFileWriterFactory.makeBAMWriter(textReader.getFileHeader(), true, bamFile);
- for (final SAMRecord rec : textReader) {
- writer.addAlignment(rec);
- }
- writer.close();
- final SAMFileReader bamReader = new SAMFileReader(bamFile);
- Assert.assertEquals(countElements(bamReader.queryContained("chr7", 100, 100)), 1);
- Assert.assertEquals(countElements(bamReader.queryOverlapping("chr7", 100, 100)), 2);
- }
-
- private <E> void consumeAll(final Collection<E> collection, final CloseableIterator<E> iterator) {
- while (iterator.hasNext()) {
- collection.add(iterator.next());
- }
- iterator.close();
- }
-
- private SAMRecord getSingleRecordStartingAt(final SAMFileReader reader, final String sequence, final int alignmentStart) {
- final CloseableIterator<SAMRecord> it = reader.queryAlignmentStart(sequence, alignmentStart);
- Assert.assertTrue(it.hasNext());
- final SAMRecord rec = it.next();
- Assert.assertNotNull(rec);
- Assert.assertFalse(it.hasNext());
- it.close();
- return rec;
- }
-
- private int countElements(final CloseableIterator<SAMRecord> it) {
- int num;
- for (num = 0; it.hasNext(); ++num, it.next()) {
- }
- it.close();
- return num;
- }
-
- private void checkChromosome(final String name, final int expectedCount) {
- int count = runQueryTest(BAM_FILE, name, 0, 0, true);
- assertEquals(count, expectedCount);
- count = runQueryTest(BAM_FILE, name, 0, 0, false);
- assertEquals(count, expectedCount);
- }
-
- private void runRandomTest(final File bamFile, final int count, final Random generator) {
- final List<String> referenceNames = getReferenceNames(bamFile);
- final SAMFileReader.QueryInterval[] intervals = generateRandomIntervals(referenceNames.size(), count, generator);
- for (final SAMFileReader.QueryInterval interval : intervals) {
- final String refName = referenceNames.get(interval.referenceIndex);
- final int startPos = interval.start;
- final int endPos = interval.end;
- System.out.println("Testing query " + refName + ":" + startPos + "-" + endPos + " ...");
- try {
- runQueryTest(bamFile, refName, startPos, endPos, true);
- runQueryTest(bamFile, refName, startPos, endPos, false);
- } catch (final Throwable exc) {
- String message = "Query test failed: " + refName + ":" + startPos + "-" + endPos;
- message += ": " + exc.getMessage();
- throw new RuntimeException(message, exc);
- }
- }
- }
-
- private SAMFileReader.QueryInterval[] generateRandomIntervals(final int numReferences, final int count, final Random generator) {
- final SAMFileReader.QueryInterval[] intervals = new SAMFileReader.QueryInterval[count];
- final int maxCoordinate = 10000000;
- for (int i = 0; i < count; i++) {
- final int referenceIndex = generator.nextInt(numReferences);
- final int coord1 = generator.nextInt(maxCoordinate+1);
- final int coord2 = generator.nextInt(maxCoordinate+1);
- final int startPos = Math.min(coord1, coord2);
- final int endPos = Math.max(coord1, coord2);
- intervals[i] = new SAMFileReader.QueryInterval(referenceIndex, startPos, endPos);
- }
-
- return intervals;
- }
-
- private List<String> getReferenceNames(final File bamFile) {
- final SAMFileReader reader = new SAMFileReader(bamFile);
- final List<String> result = new ArrayList<String>();
- final List<SAMSequenceRecord> seqRecords = reader.getFileHeader().getSequenceDictionary().getSequences();
- for (final SAMSequenceRecord seqRecord : seqRecords) {
- if (seqRecord.getSequenceName() != null) {
- result.add(seqRecord.getSequenceName());
- }
- }
- reader.close();
- return result;
- }
-
- private int runQueryTest(final File bamFile, final String sequence, final int startPos, final int endPos, final boolean contained) {
- verbose("Testing query " + sequence + ":" + startPos + "-" + endPos + " ...");
- final SAMFileReader reader1 = new SAMFileReader(bamFile);
- final SAMFileReader reader2 = new SAMFileReader(bamFile);
- final Iterator<SAMRecord> iter1 = reader1.query(sequence, startPos, endPos, contained);
- final Iterator<SAMRecord> iter2 = reader2.iterator();
- // Compare ordered iterators.
- // Confirm that iter1 is a subset of iter2 that properly filters.
- SAMRecord record1 = null;
- SAMRecord record2 = null;
- int count1 = 0;
- int count2 = 0;
- int beforeCount = 0;
- int afterCount = 0;
- while (true) {
- if (record1 == null && iter1.hasNext()) {
- record1 = iter1.next();
- count1++;
- }
- if (record2 == null && iter2.hasNext()) {
- record2 = iter2.next();
- count2++;
- }
- // System.out.println("Iteration:");
- // System.out.println(" Record1 = " + ((record1 == null) ? "null" : record1.format()));
- // System.out.println(" Record2 = " + ((record2 == null) ? "null" : record2.format()));
- if (record1 == null && record2 == null) {
- break;
- }
- if (record1 == null) {
- checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
- record2 = null;
- afterCount++;
- continue;
- }
- assertNotNull(record2);
- final int ordering = compareCoordinates(record1, record2);
- if (ordering > 0) {
- checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
- record2 = null;
- beforeCount++;
- continue;
- }
- assertTrue(ordering == 0);
- checkPassesFilter(true, record1, sequence, startPos, endPos, contained);
- checkPassesFilter(true, record2, sequence, startPos, endPos, contained);
- assertEquals(record1.getReadName(), record2.getReadName());
- assertEquals(record1.getReadString(), record2.getReadString());
- record1 = null;
- record2 = null;
- }
- reader1.close();
- reader2.close();
- verbose("Checked " + count1 + " records against " + count2 + " records.");
- verbose("Found " + (count2 - beforeCount - afterCount) + " records matching.");
- verbose("Found " + beforeCount + " records before.");
- verbose("Found " + afterCount + " records after.");
- return count1;
- }
-
- private void checkPassesFilter(final boolean expected, final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
- final boolean passes = passesFilter(record, sequence, startPos, endPos, contained);
- if (passes != expected) {
- System.out.println("Error: Record erroneously " +
- (passes ? "passed" : "failed") +
- " filter.");
- System.out.println(" Record: " + record.format());
- System.out.println(" Filter: " + sequence + ":" +
- startPos + "-" + endPos +
- " (" + (contained ? "contained" : "overlapping") + ")");
- assertEquals(passes, expected);
- }
- }
-
- private boolean passesFilter(final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
- if (record == null) {
- return false;
- }
- if (!safeEquals(record.getReferenceName(), sequence)) {
- return false;
- }
- final int alignmentStart = record.getAlignmentStart();
- int alignmentEnd = record.getAlignmentEnd();
- if (alignmentStart <= 0) {
- assertTrue(record.getReadUnmappedFlag());
- return false;
- }
- if (alignmentEnd <= 0) {
- // For indexing-only records, treat as single base alignment.
- assertTrue(record.getReadUnmappedFlag());
- alignmentEnd = alignmentStart;
- }
- if (contained) {
- if (startPos != 0 && alignmentStart < startPos) {
- return false;
- }
- if (endPos != 0 && alignmentEnd > endPos) {
- return false;
- }
- } else {
- if (startPos != 0 && alignmentEnd < startPos) {
- return false;
- }
- if (endPos != 0 && alignmentStart > endPos) {
- return false;
- }
- }
- return true;
- }
-
- private int compareCoordinates(final SAMRecord record1, final SAMRecord record2) {
- final int seqIndex1 = record1.getReferenceIndex();
- final int seqIndex2 = record2.getReferenceIndex();
- if (seqIndex1 == -1) {
- return ((seqIndex2 == -1) ? 0 : -1);
- } else if (seqIndex2 == -1) {
- return 1;
- }
- int result = seqIndex1 - seqIndex2;
- if (result != 0) {
- return result;
- }
- result = record1.getAlignmentStart() - record2.getAlignmentStart();
- return result;
- }
-
- private boolean safeEquals(final Object o1, final Object o2) {
- if (o1 == o2) {
- return true;
- } else if (o1 == null || o2 == null) {
- return false;
- } else {
- return o1.equals(o2);
- }
- }
-
- private void verbose(final String text) {
- if (mVerbose) {
- System.out.println("# " + text);
- }
- }
-}
diff --git a/src/tests/java/net/sf/samtools/BAMFileWriterTest.java b/src/tests/java/net/sf/samtools/BAMFileWriterTest.java
deleted file mode 100644
index 6458657..0000000
--- a/src/tests/java/net/sf/samtools/BAMFileWriterTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Test that BAM writing doesn't blow up. For presorted writing, the resulting BAM file is read and contents are
- * compared with the original SAM file.
- */
-public class BAMFileWriterTest {
-
- private SAMRecordSetBuilder getSAMReader(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
- final SAMRecordSetBuilder ret = new SAMRecordSetBuilder(sortForMe, sortOrder);
- ret.addPair("readB", 20, 200, 300);
- ret.addPair("readA", 20, 100, 150);
- ret.addFrag("readC", 20, 140, true);
- ret.addFrag("readD", 20, 140, false);
- return ret;
- }
-
- /**
- * Parse some SAM text into a SAM object, then write as BAM. If SAM text was presorted, then the BAM file can
- * be read and compared with the SAM object.
- * @param samRecordSetBuilder source of input SAMFileReader to be written and compared with
- * @param sortOrder How the BAM should be written
- * @param presorted If true, samText is in the order specified by sortOrder
- */
- private void testHelper(final SAMRecordSetBuilder samRecordSetBuilder, final SAMFileHeader.SortOrder sortOrder, final boolean presorted) throws Exception {
- SAMFileReader samReader = samRecordSetBuilder.getSamReader();
- final File bamFile = File.createTempFile("test.", BamFileIoUtils.BAM_FILE_EXTENSION);
- bamFile.deleteOnExit();
- samReader.getFileHeader().setSortOrder(sortOrder);
- final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(samReader.getFileHeader(), presorted, bamFile);
- CloseableIterator<SAMRecord> it = samReader.iterator();
- while (it.hasNext()) {
- bamWriter.addAlignment(it.next());
- }
- bamWriter.close();
- it.close();
- samReader.close();
-
- if (presorted) {
- // If SAM text input was presorted, then we can compare SAM object to BAM object
- final SAMFileReader bamReader = new SAMFileReader(bamFile);
- samReader = samRecordSetBuilder.getSamReader();
- samReader.getFileHeader().setSortOrder(bamReader.getFileHeader().getSortOrder());
- Assert.assertEquals(bamReader.getFileHeader(), samReader.getFileHeader());
- it = samReader.iterator();
- final CloseableIterator<SAMRecord> bamIt = bamReader.iterator();
- while (it.hasNext()) {
- Assert.assertTrue(bamIt.hasNext());
- final SAMRecord samRecord = it.next();
- final SAMRecord bamRecord = bamIt.next();
-
- // SAMRecords don't have this set, so stuff it in there
- samRecord.setIndexingBin(bamRecord.getIndexingBin());
-
- // Force reference index attributes to be populated
- samRecord.getReferenceIndex();
- bamRecord.getReferenceIndex();
- samRecord.getMateReferenceIndex();
- bamRecord.getMateReferenceIndex();
-
- Assert.assertEquals(bamRecord, samRecord);
- }
- Assert.assertFalse(bamIt.hasNext());
- }
- }
-
- @DataProvider(name = "test1")
- public Object[][] createTestData() {
- return new Object[][] {
- {"coordinate sorted", getSAMReader(false, SAMFileHeader.SortOrder.unsorted), SAMFileHeader.SortOrder.coordinate, false},
- {"query sorted", getSAMReader(false, SAMFileHeader.SortOrder.unsorted), SAMFileHeader.SortOrder.queryname, false},
- {"unsorted", getSAMReader(false, SAMFileHeader.SortOrder.unsorted), SAMFileHeader.SortOrder.unsorted, false},
- {"coordinate presorted", getSAMReader(true, SAMFileHeader.SortOrder.coordinate), SAMFileHeader.SortOrder.coordinate, true},
- {"query presorted", getSAMReader(true, SAMFileHeader.SortOrder.queryname), SAMFileHeader.SortOrder.queryname, true},
- };
- }
-
- @Test(dataProvider = "test1")
- public void testPositive(final String testName, final SAMRecordSetBuilder samRecordSetBuilder, final SAMFileHeader.SortOrder order, final boolean presorted) throws Exception {
-
- testHelper(samRecordSetBuilder, order, presorted);
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testNegativePresorted() throws Exception {
-
- testHelper(getSAMReader(true, SAMFileHeader.SortOrder.coordinate), SAMFileHeader.SortOrder.queryname, true);
- Assert.fail("Exception should be thrown");
- }
-}
diff --git a/src/tests/java/net/sf/samtools/BAMIndexWriterTest.java b/src/tests/java/net/sf/samtools/BAMIndexWriterTest.java
deleted file mode 100644
index c5c9cdc..0000000
--- a/src/tests/java/net/sf/samtools/BAMIndexWriterTest.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.picard.io.IoUtil;
-import net.sf.picard.sam.BuildBamIndex;
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Iterator;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-/**
- * Test BAM file index creation
- */
-public class BAMIndexWriterTest {
- // Two input files for basic test
- private final String BAM_FILE_LOCATION = "testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam";
- private final String BAI_FILE_LOCATION = "testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam.bai";
- private final File BAM_FILE = new File(BAM_FILE_LOCATION);
- private final File BAI_FILE = new File(BAI_FILE_LOCATION);
-
- private final boolean mVerbose = true;
-
- @Test(enabled=true)
- public void testWriteText() throws Exception {
- // Compare the text form of the c-generated bai file and a java-generated one
- final File cBaiTxtFile = File.createTempFile("cBai.", ".bai.txt");
- BAMIndexer.createAndWriteIndex(BAI_FILE, cBaiTxtFile, true);
- verbose ("Wrote textual C BAM Index file " + cBaiTxtFile);
-
- final File javaBaiFile = File.createTempFile("javaBai.", "java.bai");
- final File javaBaiTxtFile = new File(javaBaiFile.getAbsolutePath() + ".txt");
- final SAMFileReader bam = new SAMFileReader(BAM_FILE);
- BuildBamIndex.createIndex(bam, javaBaiFile);
- verbose ("Wrote binary Java BAM Index file " + javaBaiFile);
-
- // now, turn the bai file into text
- BAMIndexer.createAndWriteIndex(javaBaiFile, javaBaiTxtFile, true);
- // and compare them
- verbose ("diff " + javaBaiTxtFile + " " + cBaiTxtFile);
- IoUtil.assertFilesEqual(javaBaiTxtFile, cBaiTxtFile);
- cBaiTxtFile.deleteOnExit();
- javaBaiFile.deleteOnExit();
- javaBaiTxtFile.deleteOnExit();
- }
-
- @Test(enabled=true)
- public void testWriteBinary() throws Exception {
- // Compare java-generated bai file with c-generated and sorted bai file
- final File javaBaiFile = File.createTempFile("javaBai.", ".bai");
- final SAMFileReader bam = new SAMFileReader(BAM_FILE);
- BuildBamIndex.createIndex(bam, javaBaiFile);
- verbose ("Wrote binary java BAM Index file " + javaBaiFile);
-
- final File cRegeneratedBaiFile = File.createTempFile("cBai.", ".bai");
- BAMIndexer.createAndWriteIndex(BAI_FILE, cRegeneratedBaiFile, false);
- verbose ("Wrote sorted C binary BAM Index file " + cRegeneratedBaiFile);
-
- // Binary compare of javaBaiFile and cRegeneratedBaiFile should be the same
- verbose ("diff " + javaBaiFile + " " + cRegeneratedBaiFile);
- IoUtil.assertFilesEqual(javaBaiFile, cRegeneratedBaiFile);
- javaBaiFile.deleteOnExit();
- cRegeneratedBaiFile.deleteOnExit();
-
- }
-
- @Test(enabled = false, dataProvider = "linearIndexTestData")
- /** Test linear index at specific references and windows */
- public void testLinearIndex(String testName, String filepath, int problemReference, int problemWindowStart, int problemWindowEnd, int expectedCount) {
- final SAMFileReader sfr = new SAMFileReader(new File(filepath));
- for (int problemWindow = problemWindowStart; problemWindow <= problemWindowEnd; problemWindow++) {
- int count = countAlignmentsInWindow(problemReference, problemWindow, sfr, expectedCount);
- if (expectedCount != -1)
- assertEquals(expectedCount, count);
- }
- }
-
- @DataProvider(name = "linearIndexTestData")
- public Object[][] getLinearIndexTestData() {
- // Add data here for test cases, reference, and windows where linear index needs testing
- return new Object[][]{
- new Object[]{"index_test", BAM_FILE_LOCATION, 1, 29, 66, -1}, // 29-66
- new Object[]{"index_test", BAM_FILE_LOCATION, 1, 68, 118, -1}, // 29-66
-
- };
- }
-
- private int countAlignmentsInWindow(int reference, int window, SAMFileReader reader, int expectedCount) {
- final int SIXTEEN_K = 1 << 14; // 1 << LinearIndex.BAM_LIDX_SHIFT
- final int start = window >> 14; // window * SIXTEEN_K;
- final int stop = ((window + 1) >> 14) - 1; // (window + 1 * SIXTEEN_K) - 1;
-
- final String chr = reader.getFileHeader().getSequence(reference).getSequenceName();
-
- // get records for the entire linear index window
- SAMRecordIterator iter = reader.queryOverlapping(chr, start, stop);
- SAMRecord rec;
- int count = 0;
- while (iter.hasNext()) {
- rec = iter.next();
- count++;
- if (expectedCount == -1)
- System.err.println(rec.getReadName());
- }
- iter.close();
- return count;
- }
-
-
- @Test(enabled=false, dataProvider = "indexComparisonData")
- /** Test linear index at all references and windows, comparing with existing index */
- public void compareLinearIndex(String testName, String bamFile, String bamIndexFile) throws IOException{
- // compare index generated from bamFile with existing bamIndex file
- // by testing all the references' windows and comparing the counts
-
- // 1. generate bai file
- // 2. count its references
- // 3. count bamIndex references comparing counts
-
- // 1. generate bai file
- File bam = new File(bamFile);
- assertTrue(bam.exists(), testName + " input bam file doesn't exist: " + bamFile);
-
- File indexFile1 = createIndexFile(bam);
- assertTrue(indexFile1.exists(), testName + " generated bam file's index doesn't exist: " + indexFile1);
-
- // 2. count its references
- File indexFile2 = new File (bamIndexFile);
- assertTrue(indexFile2.exists(), testName + " input index file doesn't exist: " + indexFile2);
-
- final CachingBAMFileIndex existingIndex1 = new CachingBAMFileIndex(indexFile1, null); // todo null sequence dictionary?
- final CachingBAMFileIndex existingIndex2 = new CachingBAMFileIndex(indexFile2, null);
- final int n_ref = existingIndex1.getNumberOfReferences();
- assertEquals(n_ref, existingIndex2.getNumberOfReferences());
-
- final SAMFileReader reader1 = new SAMFileReader(bam, indexFile1, false);
- final SAMFileReader reader2 = new SAMFileReader(bam, indexFile2, false );
-
- System.out.println("Comparing " + n_ref + " references in " + indexFile1 + " and " + indexFile2);
-
- for (int i = 0; i < n_ref; i++) {
- final BAMIndexContent content1 = existingIndex1.getQueryResults(i);
- final BAMIndexContent content2 = existingIndex2.getQueryResults(i);
- if (content1 == null){
- assertTrue(content2 == null, "No content for 1st bam index, but content for second at reference" + i);
- continue;
- }
- int[] counts1 = new int[LinearIndex.MAX_LINEAR_INDEX_SIZE];
- int[] counts2 = new int[LinearIndex.MAX_LINEAR_INDEX_SIZE];
- LinearIndex li1 = content1.getLinearIndex();
- LinearIndex li2 = content2.getLinearIndex();
- // todo not li1 and li2 sizes may differ. Implies 0's in the smaller index windows
- // 3. count bamIndex references comparing counts
- int baiSize = Math.max(li1.size(), li2.size());
- for (int win = 0; win < baiSize; win++) {
- counts1[win] = countAlignmentsInWindow(i, win, reader1, 0);
- counts2[win] = countAlignmentsInWindow(i, win, reader2, counts1[win]);
- assertEquals(counts2[win], counts1[win], "Counts don't match for reference " + i +
- " window " + win );
- }
- }
-
- indexFile1.deleteOnExit();
-
- }
-
- @DataProvider(name="indexComparisonData")
- public Object[][] getIndexComparisonData() {
- // enter bam file and alternate index file to be tested against generated bam index
- return new Object[][]{
- new Object[]{"index_test", BAM_FILE_LOCATION, BAI_FILE_LOCATION} ,
- };
- }
-
- /** generates the index file using the latest java index generating code */
- private File createIndexFile(File bamFile) throws IOException {
- final File bamIndexFile = File.createTempFile("Bai.", ".bai");
- final SAMFileReader bam = new SAMFileReader(bamFile);
- BuildBamIndex.createIndex(bam, bamIndexFile);
- verbose ("Wrote BAM Index file " + bamIndexFile);
- return bamIndexFile;
- }
-
- private void verbose(final String text) {
- if (mVerbose) {
- System.out.println("#BAMIndexWriterTest " + text);
- }
- }
-}
diff --git a/src/tests/java/net/sf/samtools/BAMIteratorTest.java b/src/tests/java/net/sf/samtools/BAMIteratorTest.java
deleted file mode 100644
index 9203bee..0000000
--- a/src/tests/java/net/sf/samtools/BAMIteratorTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-import java.io.File;
-
-import net.sf.samtools.util.CloseableIterator;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class BAMIteratorTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/samtools");
-
- @Test(dataProvider = "dataProvider")
- public void testIterateEmptyBam(final String bam) throws Exception {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, bam));
- int numRecords = 0;
- for (final SAMRecord rec : reader) {
- ++numRecords;
- }
- Assert.assertEquals(numRecords, 0);
- }
-
- @Test(dataProvider = "dataProvider")
- public void testQueryUnmappedEmptyBam(final String bam) throws Exception {
- SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, bam));
- CloseableIterator<SAMRecord> it = reader.queryUnmapped();
- int numRecords = 0;
- while (it.hasNext()) {
- it.next();
- ++numRecords;
- }
- Assert.assertEquals(numRecords, 0);
- }
-
- @DataProvider(name = "dataProvider")
- public Object[][] bams() {
- return new Object[][] {
- {"empty.bam"},
- {"empty_no_empty_gzip_block.bam"}
- };
- }
-}
diff --git a/src/tests/java/net/sf/samtools/BAMRemoteFileTest.java b/src/tests/java/net/sf/samtools/BAMRemoteFileTest.java
deleted file mode 100644
index 0687c3a..0000000
--- a/src/tests/java/net/sf/samtools/BAMRemoteFileTest.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import static org.testng.Assert.*;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Random;
-
-/**
- * Test BAM file indexing.
- */
-public class BAMRemoteFileTest {
- private final File BAM_INDEX_FILE = new File("testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam.bai");
- private final File BAM_FILE = new File("testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam");
- private final String BAM_URL_STRING = "http://www.broadinstitute.org/~picard/testdata/index_test.bam";
- private final URL bamURL;
-
- private final boolean mVerbose = false;
-
- public BAMRemoteFileTest() throws Exception {
- bamURL = new URL(BAM_URL_STRING);
- }
-
-
- @Test
- void testRemoteLocal()
- throws Exception {
- runLocalRemoteTest(bamURL, BAM_FILE, "chrM", 10400, 10600, false);
- }
-
- @Test
- public void testSpecificQueries()
- throws Exception {
- assertEquals(runQueryTest(bamURL, "chrM", 10400, 10600, true), 1);
- assertEquals(runQueryTest(bamURL, "chrM", 10400, 10600, false), 2);
- }
-
- @Test(enabled = true)
- public void testRandomQueries()
- throws Exception {
- runRandomTest(bamURL, 20, new Random());
- }
-
- @Test
- public void testWholeChromosomes() {
- checkChromosome("chrM", 23);
- checkChromosome("chr1", 885);
- checkChromosome("chr2", 837);
- /***
- checkChromosome("chr3", 683);
- checkChromosome("chr4", 633);
- checkChromosome("chr5", 611);
- checkChromosome("chr6", 585);
- checkChromosome("chr7", 521);
- checkChromosome("chr8", 507);
- checkChromosome("chr9", 388);
- checkChromosome("chr10", 477);
- checkChromosome("chr11", 467);
- checkChromosome("chr12", 459);
- checkChromosome("chr13", 327);
- checkChromosome("chr14", 310);
- checkChromosome("chr15", 280);
- checkChromosome("chr16", 278);
- checkChromosome("chr17", 269);
- checkChromosome("chr18", 265);
- checkChromosome("chr19", 178);
- checkChromosome("chr20", 228);
- checkChromosome("chr21", 123);
- checkChromosome("chr22", 121);
- checkChromosome("chrX", 237);
- checkChromosome("chrY", 29);
- ***/
- }
-
-
- private void checkChromosome(final String name, final int expectedCount) {
- int count = runQueryTest(bamURL, name, 0, 0, true);
- assertEquals(count, expectedCount);
- count = runQueryTest(bamURL, name, 0, 0, false);
- assertEquals(count, expectedCount);
- }
-
- private void runRandomTest(final URL bamFile, final int count, final Random generator) throws IOException {
- final int maxCoordinate = 10000000;
- final List<String> referenceNames = getReferenceNames(bamFile);
- for (int i = 0; i < count; i++) {
- final String refName = referenceNames.get(generator.nextInt(referenceNames.size()));
- final int coord1 = generator.nextInt(maxCoordinate + 1);
- final int coord2 = generator.nextInt(maxCoordinate + 1);
- final int startPos = Math.min(coord1, coord2);
- final int endPos = Math.max(coord1, coord2);
- System.out.println("Testing query " + refName + ":" + startPos + "-" + endPos + " ...");
- try {
- runQueryTest(bamFile, refName, startPos, endPos, true);
- runQueryTest(bamFile, refName, startPos, endPos, false);
- } catch (Throwable exc) {
- String message = "Query test failed: " + refName + ":" + startPos + "-" + endPos;
- message += ": " + exc.getMessage();
- throw new RuntimeException(message, exc);
- }
- }
- }
-
- private List<String> getReferenceNames(final URL bamFile) throws IOException {
-
-
- final SAMFileReader reader = new SAMFileReader(bamFile.openStream());
-
- final List<String> result = new ArrayList<String>();
- final List<SAMSequenceRecord> seqRecords = reader.getFileHeader().getSequenceDictionary().getSequences();
- for (final SAMSequenceRecord seqRecord : seqRecords) {
- if (seqRecord.getSequenceName() != null) {
- result.add(seqRecord.getSequenceName());
- }
- }
- reader.close();
- return result;
- }
-
- private void runLocalRemoteTest(final URL bamURL, final File bamFile, final String sequence, final int startPos, final int endPos, final boolean contained) {
- verbose("Testing query " + sequence + ":" + startPos + "-" + endPos + " ...");
- final SAMFileReader reader1 = new SAMFileReader(bamFile, BAM_INDEX_FILE, false);
- final SAMFileReader reader2 = new SAMFileReader(bamURL, BAM_INDEX_FILE, false);
- final Iterator<SAMRecord> iter1 = reader1.query(sequence, startPos, endPos, contained);
- final Iterator<SAMRecord> iter2 = reader2.query(sequence, startPos, endPos, contained);
-
- final List<SAMRecord> records1 = new ArrayList<SAMRecord>();
- final List<SAMRecord> records2 = new ArrayList<SAMRecord>();
-
- while (iter1.hasNext()) {
- records1.add(iter1.next());
- }
- while (iter2.hasNext()) {
- records2.add(iter2.next());
- }
-
- assertTrue(records1.size() > 0);
- assertEquals(records1.size(), records2.size());
- for (int i = 0; i < records1.size(); i++) {
- //System.out.println(records1.get(i).format());
- assertEquals(records1.get(i).format(), records2.get(i).format());
- }
-
-
- }
-
- private int runQueryTest(final URL bamURL, final String sequence, final int startPos, final int endPos, final boolean contained) {
- verbose("Testing query " + sequence + ":" + startPos + "-" + endPos + " ...");
- final SAMFileReader reader1 = new SAMFileReader(bamURL, BAM_INDEX_FILE, false);
- final SAMFileReader reader2 = new SAMFileReader(bamURL, BAM_INDEX_FILE, false);
- final Iterator<SAMRecord> iter1 = reader1.query(sequence, startPos, endPos, contained);
- final Iterator<SAMRecord> iter2 = reader2.iterator();
- // Compare ordered iterators.
- // Confirm that iter1 is a subset of iter2 that properly filters.
- SAMRecord record1 = null;
- SAMRecord record2 = null;
- int count1 = 0;
- int count2 = 0;
- int beforeCount = 0;
- int afterCount = 0;
- while (true) {
- if (record1 == null && iter1.hasNext()) {
- record1 = iter1.next();
- count1++;
- }
- if (record2 == null && iter2.hasNext()) {
- record2 = iter2.next();
- count2++;
- }
- // System.out.println("Iteration:");
- // System.out.println(" Record1 = " + ((record1 == null) ? "null" : record1.format()));
- // System.out.println(" Record2 = " + ((record2 == null) ? "null" : record2.format()));
- if (record1 == null && record2 == null) {
- break;
- }
- if (record1 == null) {
- checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
- record2 = null;
- afterCount++;
- continue;
- }
- assertNotNull(record2);
- final int ordering = compareCoordinates(record1, record2);
- if (ordering > 0) {
- checkPassesFilter(false, record2, sequence, startPos, endPos, contained);
- record2 = null;
- beforeCount++;
- continue;
- }
- assertTrue(ordering == 0);
- checkPassesFilter(true, record1, sequence, startPos, endPos, contained);
- checkPassesFilter(true, record2, sequence, startPos, endPos, contained);
- assertEquals(record1.getReadName(), record2.getReadName());
- assertEquals(record1.getReadString(), record2.getReadString());
- record1 = null;
- record2 = null;
- }
- reader1.close();
- reader2.close();
- verbose("Checked " + count1 + " records against " + count2 + " records.");
- verbose("Found " + (count2 - beforeCount - afterCount) + " records matching.");
- verbose("Found " + beforeCount + " records before.");
- verbose("Found " + afterCount + " records after.");
- return count1;
- }
-
- private void checkPassesFilter(final boolean expected, final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
- final boolean passes = passesFilter(record, sequence, startPos, endPos, contained);
- if (passes != expected) {
- System.out.println("Error: Record erroneously " +
- (passes ? "passed" : "failed") +
- " filter.");
- System.out.println(" Record: " + record.format());
- System.out.println(" Filter: " + sequence + ":" +
- startPos + "-" + endPos +
- " (" + (contained ? "contained" : "overlapping") + ")");
- assertEquals(passes, expected);
- }
- }
-
- private boolean passesFilter(final SAMRecord record, final String sequence, final int startPos, final int endPos, final boolean contained) {
- if (record == null) {
- return false;
- }
- if (!safeEquals(record.getReferenceName(), sequence)) {
- return false;
- }
- final int alignmentStart = record.getAlignmentStart();
- int alignmentEnd = record.getAlignmentEnd();
- if (alignmentStart <= 0) {
- assertTrue(record.getReadUnmappedFlag());
- return false;
- }
- if (alignmentEnd <= 0) {
- // For indexing-only records, treat as single base alignment.
- assertTrue(record.getReadUnmappedFlag());
- alignmentEnd = alignmentStart;
- }
- if (contained) {
- if (startPos != 0 && alignmentStart < startPos) {
- return false;
- }
- if (endPos != 0 && alignmentEnd > endPos) {
- return false;
- }
- } else {
- if (startPos != 0 && alignmentEnd < startPos) {
- return false;
- }
- if (endPos != 0 && alignmentStart > endPos) {
- return false;
- }
- }
- return true;
- }
-
- private int compareCoordinates(final SAMRecord record1, final SAMRecord record2) {
- final int seqIndex1 = record1.getReferenceIndex();
- final int seqIndex2 = record2.getReferenceIndex();
- if (seqIndex1 == -1) {
- return ((seqIndex2 == -1) ? 0 : -1);
- } else if (seqIndex2 == -1) {
- return 1;
- }
- int result = seqIndex1 - seqIndex2;
- if (result != 0) {
- return result;
- }
- result = record1.getAlignmentStart() - record2.getAlignmentStart();
- return result;
- }
-
- private boolean safeEquals(final Object o1, final Object o2) {
- if (o1 == o2) {
- return true;
- } else if (o1 == null || o2 == null) {
- return false;
- } else {
- return o1.equals(o2);
- }
- }
-
- private void verbose(final String text) {
- if (mVerbose) {
- System.out.println("# " + text);
- }
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/net/sf/samtools/BamFileIoUtilsTest.java b/src/tests/java/net/sf/samtools/BamFileIoUtilsTest.java
deleted file mode 100644
index 124155c..0000000
--- a/src/tests/java/net/sf/samtools/BamFileIoUtilsTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools;
-
-import net.sf.picard.PicardException;
-import net.sf.picard.sam.CompareSAMs;
-import net.sf.samtools.BamFileIoUtils;
-import net.sf.samtools.SAMFileHeader;
-import net.sf.samtools.SAMFileReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-public class BamFileIoUtilsTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/picard/sam");
- private static final File HEADER_PROVIDER = new File(TEST_DATA_DIR, "samHeaderProvider.sam");
- private static final File INPUT_FILE = new File(TEST_DATA_DIR, "aligned_queryname_sorted.bam");
-
- @Test
- public void testReheader() throws Exception {
- final SAMFileHeader samFileHeader = new SAMFileReader(HEADER_PROVIDER).getFileHeader();
- final File outputFile = createOutputFile();
- BamFileIoUtils.reheaderBamFile(samFileHeader, INPUT_FILE, outputFile);
- assertReheader(outputFile, HEADER_PROVIDER);
- }
-
- @Test
- public void testReapplySameHeader() throws Exception {
- final SAMFileHeader samFileHeader = new SAMFileReader(INPUT_FILE).getFileHeader();
- final File outputFile = createOutputFile();
- BamFileIoUtils.reheaderBamFile(samFileHeader, INPUT_FILE, outputFile);
-
- assertReheader(outputFile, INPUT_FILE);
- final CompareSAMs compareSAMs = new CompareSAMs();
- compareSAMs.instanceMain(new String[]{INPUT_FILE.getAbsolutePath(), outputFile.getAbsolutePath()});
- Assert.assertTrue(compareSAMs.areEqual());
- }
-
- @Test(expectedExceptions = SAMException.class)
- public void mismatchSortOrderTest() throws Exception {
- final SAMFileHeader samFileHeader = new SAMFileReader(HEADER_PROVIDER).getFileHeader();
- samFileHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
- BamFileIoUtils.reheaderBamFile(samFileHeader, INPUT_FILE, createOutputFile());
- throw new IllegalStateException("We shouldn't be here");
- }
-
- private void assertReheader(final File outputFile, final File headerProvider) {
- final SAMFileHeader origHeader = new SAMFileReader(headerProvider).getFileHeader();
- final SAMFileHeader newHeader = new SAMFileReader(outputFile).getFileHeader();
- Assert.assertEquals(origHeader, newHeader);
- }
-
- private File createOutputFile() throws IOException {
- return File.createTempFile("reheaderTest.", BamFileIoUtils.BAM_FILE_EXTENSION);
- }
-
-}
diff --git a/src/tests/java/net/sf/samtools/BinTest.java b/src/tests/java/net/sf/samtools/BinTest.java
deleted file mode 100644
index 3566484..0000000
--- a/src/tests/java/net/sf/samtools/BinTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-
-public class BinTest {
- @Test
- public void testEmptyBin() {
- // Construct a new empty bin and ensure that the bin list is empty, not null.
- Bin bin = new Bin(1,4681);
- Assert.assertEquals(bin.getChunkList(),Collections.<Chunk>emptyList(),"getChunkList() in an empty bin should return an empty list.");
- }
-}
diff --git a/src/tests/java/net/sf/samtools/ChunkTest.java b/src/tests/java/net/sf/samtools/ChunkTest.java
deleted file mode 100644
index 060d5b3..0000000
--- a/src/tests/java/net/sf/samtools/ChunkTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class ChunkTest {
- @Test
- public void testOverlaps() {
- // Test completely disjoint offsets.
- Assert.assertFalse(new Chunk(1,5).overlaps(new Chunk(11,15)),"Test found overlap in non-overlapping offsets");
- Assert.assertFalse(new Chunk(11,15).overlaps(new Chunk(1,5)),"Test found overlap in non-overlapping offsets");
-
- // Test adjacent offsets
- Assert.assertFalse(new Chunk(1,5).overlaps(new Chunk(6,10)),"Test found overlap in adjacent offsets");
- Assert.assertFalse(new Chunk(6,10).overlaps(new Chunk(1,5)),"Test found overlap in adjacent offsets");
-
- // Test overlapping offsets
- Assert.assertTrue(new Chunk(1,5).overlaps(new Chunk(2,6)),"Test returned incorrect value for overlapping offsets");
- Assert.assertTrue(new Chunk(2,6).overlaps(new Chunk(1,5)),"Test returned incorrect value for overlapping offsets");
- Assert.assertTrue(new Chunk(1,5).overlaps(new Chunk(2,6)),"Test returned incorrect value for overlapping offsets");
-
- // Completely disjoint and adjacent blocks
- Assert.assertFalse(new Chunk(1<<16,2<<16).overlaps(new Chunk(3<<16,4<<16)),"Test found overlap in non-overlapping blocks");
- Assert.assertFalse(new Chunk(1<<16,2<<16).overlaps(new Chunk(2<<16,3<<16)),"test found overlap in adjacent blocks");
-
- // True overlaps in the same block
- Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16,2<<16)),"Test failed to find overlap in completely overlapping chunks");
- Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16,1<<16|0xFF00)),"Test failed to find overlap in chunks with head overlapping");
- Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16|0xFF00,2<<16)),"Test failed to find overlap in overlapping chunks");
- Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16|0xFEFF,1<<16|0xFF00)),"Test failed to find overlap in contained chunk");
- Assert.assertTrue(new Chunk(1<<16|0xFEFF,1<<16|0xFF00).overlaps(new Chunk(1<<16,2<<16)),"Test failed to find overlap in enclosing chunk");
- Assert.assertTrue(new Chunk(1<<16,1<<16|0xFF00).overlaps(new Chunk(1<<16|0xFEFF,2<<16)),"Test failed to find tail->head overlap");
- Assert.assertTrue(new Chunk(1<<16|0xFEFF,2<<16).overlaps(new Chunk(1<<16,1<<16|0xFF00)),"Test failed to find head->tail overlap");
-
- // Test overlaps spanning blocks
- Assert.assertTrue(new Chunk(1<<16,2<<16).overlaps(new Chunk(1<<16|0xFF00,2<<16|0xFF00)),"Test failed to find overlap spanning blocks");
- }
-
- @Test
- public void testAdjacency() {
- // Test offset adjacency
- Assert.assertTrue(new Chunk(1,5).isAdjacentTo(new Chunk(5,9)),"Offsets which should be adjacent are not");
- Assert.assertTrue(new Chunk(5,9).isAdjacentTo(new Chunk(1,5)),"Offsets which should be adjacent are not");
-
- // Test block adjacency
- Assert.assertTrue(new Chunk(1<<16,2<<16).isAdjacentTo(new Chunk(2<<16,3<<16)),"Blocks which should be adjacent are not");
-
- // Test offset-block adjacency
- Assert.assertTrue(new Chunk(1<<16,2<<16|0xFF00).isAdjacentTo(new Chunk(2<<16|0xFF00,3<<16)),"Block-offsets which should be adjacent are not");
-
- // Discontiguous and overlapping blocks
- Assert.assertFalse(new Chunk(1,5).isAdjacentTo(new Chunk(11,15)),"Disjoint block should not be adjacent");
- Assert.assertFalse(new Chunk(1,5).isAdjacentTo(new Chunk(2,3)),"Contained offset should not be adjacent");
- }
-}
diff --git a/src/tests/java/net/sf/samtools/CigarCodecTest.java b/src/tests/java/net/sf/samtools/CigarCodecTest.java
deleted file mode 100644
index fd635a7..0000000
--- a/src/tests/java/net/sf/samtools/CigarCodecTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.util.Arrays;
-
-import net.sf.samtools.Cigar;
-import net.sf.samtools.TextCigarCodec;
-import net.sf.samtools.SAMRecord;
-import net.sf.samtools.BinaryCigarCodec;
-
-public class CigarCodecTest {
-
- private final BinaryCigarCodec binaryCigarCodec = new BinaryCigarCodec();
- private final TextCigarCodec textCigarCodec = new TextCigarCodec();
-
-
- @Test
- public void testDefault() {
- final Cigar emptyCigar = new Cigar();
- Assert.assertEquals(emptyCigar, binaryCigarCodec.decode(new int[0]));
- final int[] binaryCigar = binaryCigarCodec.encode(emptyCigar);
- Assert.assertEquals(0, binaryCigar.length);
- Assert.assertEquals(emptyCigar, textCigarCodec.decode(SAMRecord.NO_ALIGNMENT_CIGAR));
- Assert.assertEquals(textCigarCodec.encode(emptyCigar), SAMRecord.NO_ALIGNMENT_CIGAR);
- }
-
- private static class Cigarette {
- final int length;
- final char op;
-
- private Cigarette(final int length, final char op) {
- this.length = length;
- this.op = op;
- }
-
- int getBinaryOp() {
- switch (op) {
- case 'M': return 0;
- case 'I': return 1;
- case 'D': return 2;
- case 'N': return 3;
- case 'S': return 4;
- case 'H': return 5;
- case 'P': return 6;
- case '=': return 7;
- case 'X' : return 8;
- default: Assert.assertTrue(false);
- }
- return -1;
- }
- }
-
- private String makeTextCigar(final Cigarette[] cigarettes) {
- final StringBuilder sb = new StringBuilder();
- for (final Cigarette c : cigarettes) {
- sb.append(Integer.toString(c.length));
- sb.append(c.op);
- }
- return sb.toString();
- }
-
- private int[] makeBinaryCigar(final Cigarette[] cigarettes) {
- final int[] ret = new int[cigarettes.length];
- for (int i = 0; i < cigarettes.length; ++i) {
- ret[i] = cigarettes[i].length << 4 | cigarettes[i].getBinaryOp();
- }
- return ret;
- }
-
- @Test
- public void testSimple() {
- final Cigarette[] cigarettes = {
- new Cigarette(100, 'M'),
- new Cigarette(200, 'I'),
- new Cigarette(50, 'D'),
- new Cigarette(21, 'N'),
- new Cigarette(12, 'S'),
- new Cigarette(99, 'H'),
- new Cigarette(20, 'P'),
- new Cigarette(2, '='),
- new Cigarette(2, 'X')
- };
- final String textCigar = makeTextCigar(cigarettes);
- final int[] binaryCigar = makeBinaryCigar(cigarettes);
- final Cigar fromText = textCigarCodec.decode(textCigar);
- final Cigar fromBinary = binaryCigarCodec.decode(binaryCigar);
- Assert.assertEquals(fromText, fromBinary);
- final String anotherTextCigar = textCigarCodec.encode(fromBinary);
- final int[] anotherBinaryCigar = binaryCigarCodec.encode(fromText);
- Assert.assertEquals(anotherTextCigar, textCigar);
- Assert.assertTrue(Arrays.equals(anotherBinaryCigar, binaryCigar));
- }
-}
diff --git a/src/tests/java/net/sf/samtools/CigarTest.java b/src/tests/java/net/sf/samtools/CigarTest.java
deleted file mode 100644
index aad9e8a..0000000
--- a/src/tests/java/net/sf/samtools/CigarTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.List;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class CigarTest {
- private final TextCigarCodec codec = TextCigarCodec.getSingleton();
-
- @Test
- public void testPositive() {
- Assert.assertNotNull(codec);
- Assert.assertNull(codec.decode("").isValid(null, -1));
- Assert.assertNull(codec.decode("2M1P4M1P2D1P6D").isValid(null, -1));
- Assert.assertNull(codec.decode("10M5N1I12M").isValid(null, -1));
- Assert.assertNull(codec.decode("10M1I5N1I12M").isValid(null, -1));
- Assert.assertNull(codec.decode("9M1D5N1I12M").isValid(null, -1));
-
- // I followed by D and vice versa is now allowed.
- Assert.assertNull(codec.decode("1M1I1D1M").isValid(null, -1));
- Assert.assertNull(codec.decode("1M1D1I1M").isValid(null, -1));
-
- // Soft-clip inside of hard-clip now allowed.
- Assert.assertNull(codec.decode("29M1S15H").isValid(null, -1));
- }
-
- @Test
- public void testNegative() {
- // Cannot have two consecutive insertions
- List<SAMValidationError> errors = codec.decode("1M1I1I1M").isValid(null, -1);
- Assert.assertEquals(errors.size(), 1);
- Assert.assertEquals(errors.get(0).getType(), SAMValidationError.Type.ADJACENT_INDEL_IN_CIGAR);
-
- // Cannot have two consecutive deletions
- errors = codec.decode("1M1D1D1M").isValid(null, -1);
- Assert.assertEquals(errors.size(), 1);
- Assert.assertEquals(errors.get(0).getType(), SAMValidationError.Type.ADJACENT_INDEL_IN_CIGAR);
-
- // Soft clip must be at end of read or inside of hard clip
- errors = codec.decode("1M1D1S1M").isValid(null, -1);
- Assert.assertEquals(errors.size(), 1);
- Assert.assertEquals(errors.get(0).getType(), SAMValidationError.Type.INVALID_CIGAR);
-
- // Soft clip must be at end of read or inside of hard clip
- errors = codec.decode("1M1D1S1M1H").isValid(null, -1);
- Assert.assertEquals(errors.size(), 1);
- Assert.assertEquals(errors.get(0).getType(), SAMValidationError.Type.INVALID_CIGAR);
-
-/*
- // Zero length for an element not allowed.
- errors = codec.decode("100M0D10M1D10M").isValid(null, -1);
- Assert.assertEquals(errors.size(), 1);
- Assert.assertEquals(errors.get(0).getType(), SAMValidationError.Type.INVALID_CIGAR);
-*/
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SAMCloneTest.java b/src/tests/java/net/sf/samtools/SAMCloneTest.java
deleted file mode 100644
index 559e2c3..0000000
--- a/src/tests/java/net/sf/samtools/SAMCloneTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SAMCloneTest {
- private SAMRecordSetBuilder getSAMReader(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
- final SAMRecordSetBuilder ret = new SAMRecordSetBuilder(sortForMe, sortOrder);
- ret.addPair("readB", 20, 200, 300);
- ret.addPair("readA", 20, 100, 150);
- ret.addFrag("readC", 20, 140, true);
- ret.addFrag("readD", 20, 140, false);
- return ret;
- }
-
- @Test
- public void testBasic() throws Exception {
- final SAMRecordSetBuilder recordSetBuilder = getSAMReader(true, SAMFileHeader.SortOrder.coordinate);
- SAMFileReader inputSAM = recordSetBuilder.getSamReader();
- for (final SAMRecord samRecord : inputSAM) {
- SAMRecord newRecord = (SAMRecord)samRecord.clone();
- Assert.assertEquals(newRecord, samRecord);
- }
- inputSAM.close();
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SAMFileReaderTest.java b/src/tests/java/net/sf/samtools/SAMFileReaderTest.java
deleted file mode 100644
index b023bcf..0000000
--- a/src/tests/java/net/sf/samtools/SAMFileReaderTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-
-import java.io.File;
-
-public class SAMFileReaderTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/samtools");
-
- @Test(dataProvider = "variousFormatReaderTestCases")
- public void variousFormatReaderTest(final String inputFile) {
- final File input = new File(TEST_DATA_DIR, inputFile);
- final SAMFileReader reader = new SAMFileReader(input);
- for (final SAMRecord rec: reader) {}
- reader.close();
- }
-
- @DataProvider(name = "variousFormatReaderTestCases")
- public Object[][] variousFormatReaderTestCases() {
- final Object[][] scenarios = new Object[][] {
- { "block_compressed.sam.gz"},
- { "uncompressed.sam"},
- { "compressed.sam.gz"},
- { "compressed.bam"},
- };
- return scenarios;
- }
-
- // Tests for the SAMRecordFactory usage
- class SAMRecordFactoryTester extends DefaultSAMRecordFactory {
- int samRecordsCreated;
- int bamRecordsCreated;
-
- public SAMRecord createSAMRecord(final SAMFileHeader header) {
- ++samRecordsCreated;
- return super.createSAMRecord(header);
- }
-
- public BAMRecord createBAMRecord(final SAMFileHeader header, final int referenceSequenceIndex, final int alignmentStart, final short readNameLength, final short mappingQuality, final int indexingBin, final int cigarLen, final int flags, final int readLen, final int mateReferenceSequenceIndex, final int mateAlignmentStart, final int insertSize, final byte[] variableLengthBlock) {
- ++bamRecordsCreated;
- return super.createBAMRecord(header, referenceSequenceIndex, alignmentStart, readNameLength, mappingQuality, indexingBin, cigarLen, flags, readLen, mateReferenceSequenceIndex, mateAlignmentStart, insertSize, variableLengthBlock);
- }
- }
-
- @Test(dataProvider = "variousFormatReaderTestCases")
- public void samRecordFactoryTest(final String inputFile) {
- final File input = new File(TEST_DATA_DIR, inputFile);
- final SAMFileReader reader = new SAMFileReader(input);
- final SAMRecordFactoryTester factory = new SAMRecordFactoryTester();
- reader.setSAMRecordFactory(factory);
-
- int i=0;
- for (final SAMRecord rec: reader) {
- ++i;
- }
- reader.close();
-
- Assert.assertTrue(i > 0);
- if (inputFile.endsWith(".sam") || inputFile.endsWith(".sam.gz")) Assert.assertEquals(factory.samRecordsCreated, i);
- else if (inputFile.endsWith(".bam")) Assert.assertEquals(factory.bamRecordsCreated, i);
- }
-
-}
diff --git a/src/tests/java/net/sf/samtools/SAMFileWriterFactoryTest.java b/src/tests/java/net/sf/samtools/SAMFileWriterFactoryTest.java
deleted file mode 100644
index 2ea1ffe..0000000
--- a/src/tests/java/net/sf/samtools/SAMFileWriterFactoryTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class SAMFileWriterFactoryTest {
-
- /** PIC-442Confirm that writing to a special file does not cause exception when writing additional files. */
- @Test(groups={"unix"})
- public void specialFileWriterTest() {
- createSmallBam(new File("/dev/null"));
- }
-
- @Test
- public void ordinaryFileWriterTest() throws Exception {
- final File outputFile = File.createTempFile("tmp.", BamFileIoUtils.BAM_FILE_EXTENSION);
- outputFile.delete();
- outputFile.deleteOnExit();
- String basename = outputFile.getName();
- basename = basename.substring(0, basename.lastIndexOf("."));
- final File indexFile = new File(outputFile.getParent(), basename + BAMIndex.BAMIndexSuffix);
- indexFile.deleteOnExit();
- final File md5File = new File(outputFile.getParent(), outputFile.getName() + ".md5");
- md5File.deleteOnExit();
- createSmallBam(outputFile);
- Assert.assertTrue(outputFile.length() > 0);
- Assert.assertTrue(indexFile.length() > 0);
- Assert.assertTrue(md5File.length() > 0);
- }
-
- private void createSmallBam(final File outputFile) {
- final SAMFileWriterFactory factory = new SAMFileWriterFactory();
- factory.setCreateIndex(true);
- factory.setCreateMd5File(true);
- final SAMFileHeader header = new SAMFileHeader();
- // index only created if coordinate sorted
- header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
- header.addSequence(new SAMSequenceRecord("chr1", 123));
- final SAMFileWriter writer = factory.makeBAMWriter(header, false, outputFile);
- final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
- builder.addUnmappedFragment("HiMom!");
- for (final SAMRecord rec: builder.getRecords()) writer.addAlignment(rec);
- writer.close();
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SAMIntegerTagTest.java b/src/tests/java/net/sf/samtools/SAMIntegerTagTest.java
deleted file mode 100644
index 3828ccd..0000000
--- a/src/tests/java/net/sf/samtools/SAMIntegerTagTest.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Confirm that integer tag types are stored and retrieved properly.
- *
- * @author alecw at broadinstitute.org
- */
-public class SAMIntegerTagTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/samtools/SAMIntegerTagTest");
-
- private static final String BYTE_TAG = "BY";
- private static final String SHORT_TAG = "SH";
- private static final String INTEGER_TAG = "IN";
- private static final String UNSIGNED_INTEGER_TAG = "UI";
- private static final String STRING_TAG = "ST";
-
- @Test
- public void testBAM() throws Exception {
- final SAMRecord rec = writeAndReadSamRecord("bam");
- Assert.assertTrue(rec.getAttribute(BYTE_TAG) instanceof Integer);
- Assert.assertEquals(((Number)rec.getAttribute(BYTE_TAG)).intValue(), 1);
- Assert.assertTrue(rec.getAttribute(SHORT_TAG) instanceof Integer);
- Assert.assertEquals(((Number)rec.getAttribute(SHORT_TAG)).intValue(), 1);
- Assert.assertTrue(rec.getAttribute(INTEGER_TAG) instanceof Integer);
- Assert.assertEquals(((Number)rec.getAttribute(INTEGER_TAG)).intValue(), 1);
- }
-
- @Test
- public void testSAM() throws Exception {
- final SAMRecord rec = writeAndReadSamRecord("sam");
- Assert.assertTrue(rec.getAttribute(BYTE_TAG) instanceof Integer);
- Assert.assertEquals(((Number)rec.getAttribute(BYTE_TAG)).intValue(), 1);
- Assert.assertTrue(rec.getAttribute(SHORT_TAG) instanceof Integer);
- Assert.assertEquals(((Number)rec.getAttribute(SHORT_TAG)).intValue(), 1);
- Assert.assertTrue(rec.getAttribute(INTEGER_TAG) instanceof Integer);
- Assert.assertEquals(((Number)rec.getAttribute(INTEGER_TAG)).intValue(), 1);
- }
-
- @Test(expectedExceptions = SAMException.class)
- public void testUnsignedIntegerBAM() throws Exception {
- SAMRecord rec = createSamRecord();
- final long val = 1l + Integer.MAX_VALUE;
- rec.setAttribute(UNSIGNED_INTEGER_TAG, val);
- Assert.fail("Exception should have been thrown.");
- }
-
- /**
- * Cannot store unsigned int in SAM text format.
- */
- @Test(expectedExceptions = SAMException.class)
- public void testUnsignedIntegerSAM() throws Exception {
- final SAMRecord rec = createSamRecord();
- final long val = 1l + Integer.MAX_VALUE;
- rec.setAttribute(UNSIGNED_INTEGER_TAG, val);
- }
-
- @Test
- public void testGetTypedAttributeMethods() throws Exception {
- final SAMRecord rec = writeAndReadSamRecord("bam");
- Assert.assertEquals(rec.getByteAttribute(INTEGER_TAG).intValue(), 1);
- Assert.assertEquals(rec.getShortAttribute(INTEGER_TAG).intValue(), 1);
- Assert.assertEquals(rec.getIntegerAttribute(INTEGER_TAG).intValue(), 1);
- }
-
- /**
- * Should be an exception if a typed attribute call is made for the wrong type.
- */
- @Test(expectedExceptions = RuntimeException.class)
- public void testGetTypedAttributeForWrongType() throws Exception {
- final SAMRecord rec = createSamRecord();
- rec.setAttribute(STRING_TAG, "Hello, World!");
- writeAndReadSamRecord("bam", rec);
- rec.getIntegerAttribute(STRING_TAG);
- Assert.fail("Exception should have been thrown.");
- }
-
- /**
- * Should be an exception if a typed attribute call is made for a value that cannot
- * be coerced into the correct type.
- * This test is a little lame because a RuntimeException could be thrown for some other reason.
- */
- @Test(expectedExceptions = RuntimeException.class)
- public void testGetTypedAttributeOverflow() throws Exception {
- final SAMRecord rec = createSamRecord();
- rec.setAttribute(INTEGER_TAG, Integer.MAX_VALUE);
- writeAndReadSamRecord("bam", rec);
- rec.getShortAttribute(INTEGER_TAG);
- Assert.fail("Exception should have been thrown.");
- }
-
- /**
- * Should be an exception if a typed attribute call is made for a value that cannot
- * be coerced into the correct type.
- * This test is a little lame because a RuntimeException could be thrown for some other reason.
- */
- @Test(expectedExceptions = RuntimeException.class)
- public void testGetTypedAttributeUnerflow() throws Exception {
- final SAMRecord rec = createSamRecord();
- rec.setAttribute(INTEGER_TAG, Integer.MIN_VALUE);
- writeAndReadSamRecord("bam", rec);
- rec.getShortAttribute(INTEGER_TAG);
- Assert.fail("Exception should have been thrown.");
- }
-
- /**
- * Create a SAMRecord with integer tags of various sizes, write to a file, and read it back.
- * @param format "sam" or "bam".
- * @return The record after having being read from file.
- */
- private SAMRecord writeAndReadSamRecord(final String format) throws IOException {
- SAMRecord rec = createSamRecord();
- rec.setAttribute(BYTE_TAG, (byte)1);
- rec.setAttribute(SHORT_TAG, (short)1);
- rec.setAttribute(INTEGER_TAG, 1);
- rec = writeAndReadSamRecord(format, rec);
- return rec;
- }
-
- /**
- * Write a SAMRecord to a SAM file in the given format, and read it back.
- * @param format "sam" or "bam".
- * @param rec The record to write.
- * @return The same record, after having being written and read back.
- */
- private SAMRecord writeAndReadSamRecord(final String format, SAMRecord rec) throws IOException {
- final File bamFile = File.createTempFile("test.", "." + format);
- bamFile.deleteOnExit();
- final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(rec.getHeader(), false, bamFile);
- bamWriter.addAlignment(rec);
- bamWriter.close();
- final SAMFileReader reader = new SAMFileReader(bamFile);
- rec = reader.iterator().next();
- reader.close();
- return rec;
- }
-
- private SAMRecord createSamRecord() {
- final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.unsorted);
- builder.addFrag("readA", 20, 140, false);
- return builder.iterator().next();
- }
-
- @Test(expectedExceptions = {SAMFormatException.class})
- public void testBadSamStrict() {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, "variousAttributes.sam"));
- reader.iterator().next();
- Assert.fail("Should not reach.");
- }
-
- @Test(expectedExceptions = {RuntimeException.class})
- public void testBadBamStrict() {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, "variousAttributes.bam"), true);
- reader.iterator().next();
- Assert.fail("Should not reach.");
-
- }
-
- @Test
- public void testBadBamLenient() {
- final SAMFileReader reader = new SAMFileReader(new File(TEST_DATA_DIR, "variousAttributes.bam"), true);
- reader.setValidationStringency(SAMFileReader.ValidationStringency.LENIENT);
- final SAMRecord rec = reader.iterator().next();
- final Map<String, Number> expectedTags = new HashMap<String, Number>();
- expectedTags.put("SB", -128);
- expectedTags.put("UB", 129);
- expectedTags.put("SS", 32767);
- expectedTags.put("US", 65535);
- expectedTags.put("SI", 2147483647);
- expectedTags.put("I2", -2147483647);
- expectedTags.put("UI", 4294967295L);
- for (final Map.Entry<String, Number> entry : expectedTags.entrySet()) {
- final Object value = rec.getAttribute(entry.getKey());
- Assert.assertEquals(value, entry.getValue());
- }
- reader.close();
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SAMTextReaderTest.java b/src/tests/java/net/sf/samtools/SAMTextReaderTest.java
deleted file mode 100644
index d709dff..0000000
--- a/src/tests/java/net/sf/samtools/SAMTextReaderTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import net.sf.samtools.util.CloseableIterator;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-public class SAMTextReaderTest {
- // Simple input, spot check that parsed correctly, and make sure nothing blows up.
- @Test
- public void testBasic() throws Exception {
- final String seq1 = "AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG";
- final String seq2 = "ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA";
- final String qual1 = "<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<";
- final String qual2 = "<<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<<";
- final String fileFormatVersion = "1.0";
- final String sequence = "chr20";
- final int sequenceLength = 62435964;
- final String charTag = "XC";
- final char charValue = 'q';
- final String intTag = "XI";
- final int intValue = 12345;
- final String floatTag = "XF";
- final float floatValue = 1.2345f;
- final String stringTag = "XS";
- final String stringValue = "Hi,Mom!";
- final String samExample = "@HD\tVN:" + fileFormatVersion + "\t" + charTag + ":" + charValue + "\n" +
- "@SQ\tSN:" + sequence + "\tAS:HG18\tLN:" + sequenceLength + "\t" + intTag + ":" + intValue + "\n" +
- "@RG\tID:L1\tPU:SC_1_10\tLB:SC_1\tSM:NA12891" + "\t" + floatTag + ":" + floatValue + "\n" +
- "@RG\tID:L2\tPU:SC_2_12\tLB:SC_2\tSM:NA12891\n" +
- "@PG\tID:0\tVN:1.0\tCL:yo baby\t" + stringTag + ":" + stringValue + "\n" +
- "@PG\tID:2\tVN:1.1\tCL:whassup? ? ? ?\n" +
- "read_28833_29006_6945\t99\tchr20\t28833\t20\t10M1D25M\t=\t28993\t195\t" +
- seq1.toLowerCase() + "\t" + qual1 + "\t" +
- "MF:i:130\tNm:i:1\tH0:i:0\tH1:i:0\tRG:Z:L1\n" +
- "read_28701_28881_323b\t147\tchr20\t28834\t30\t35M\t=\t28701\t-168\t" +
- seq2 + "\t" + qual2 + "\t" +
- "MF:i:18\tNm:i:0\tH0:i:1\tH1:i:0\tRG:Z:L2\n";
-
- final String[] samResults =
- {"read_28833_29006_6945\t99\tchr20\t28833\t20\t10M1D25M\tchr20\t28993\t195\t" + seq1 + "\t" + qual1 +
- "\tH0:i:0\tH1:i:0\tMF:i:130\tRG:Z:L1\tNm:i:1",
- "read_28701_28881_323b\t147\tchr20\t28834\t30\t35M\tchr20\t28701\t-168\t" + seq2 + "\t" + qual2 +
- "\tH0:i:1\tH1:i:0\tMF:i:18\tRG:Z:L2\tNm:i:0"
- };
-
- final SAMFileReader samReader = createSamFileReader(samExample);
- final SAMFileHeader fileHeader = samReader.getFileHeader();
-
- Assert.assertEquals(fileHeader.getVersion(), fileFormatVersion);
- Assert.assertEquals(fileHeader.getAttribute(charTag), Character.toString(charValue));
- final SAMSequenceRecord sequenceRecord = fileHeader.getSequence(sequence);
- Assert.assertNotNull(sequenceRecord);
- Assert.assertEquals(sequenceRecord.getSequenceLength(), sequenceLength);
- Assert.assertEquals(sequenceRecord.getAttribute(intTag), Integer.toString(intValue));
- Assert.assertEquals(fileHeader.getReadGroup("L1").getAttribute(floatTag), Float.toString(floatValue));
- Assert.assertEquals(fileHeader.getProgramRecord("0").getAttribute(stringTag), stringValue);
-
- final CloseableIterator<SAMRecord> iterator = samReader.iterator();
- int i = 0;
- while (iterator.hasNext()) {
- final SAMRecord rec = iterator.next();
- Assert.assertEquals(rec.format(), samResults[i++]);
- }
- iterator.close();
- iterator.close();
- samReader.close();
- }
-
- private SAMFileReader createSamFileReader(final String samExample) {
- final ByteArrayInputStream inputStream = new ByteArrayInputStream(samExample.getBytes());
- return new SAMFileReader(inputStream);
- }
-
- @Test
- public void testUnmapped() {
- final String alignmentFromKris =
- "0\t4\t*\t0\t0\t*\t*\t0\t0\tGCCTCGTAGTGCGCCATCAGTCTATCGATGTCGTTG\t44\"44===;;;;;;;;;::::88844\"4\"\"\"\"\"\"\"\"\n";
- final SAMFileReader samReader = createSamFileReader(alignmentFromKris);
- final CloseableIterator<SAMRecord> iterator = samReader.iterator();
- while (iterator.hasNext()) {
- iterator.next();
- }
- iterator.close();
-
- }
-
- /**
- * Colon separates fields of a text tag, but colon is also valid in a tag value, so assert that works properly.
- */
- @Test
- public void testTagWithColon() {
- // Create a SAMRecord with a String tag containing a colon
- final SAMRecordSetBuilder samBuilder = new SAMRecordSetBuilder();
- samBuilder.addUnmappedFragment("Hi,Mom!");
- final SAMRecord rec = samBuilder.iterator().next();
- final String valueWithColons = "A:B::C:::";
- rec.setAttribute(SAMTag.CQ.name(), valueWithColons);
- // Write the record as SAM Text
- final ByteArrayOutputStream os = new ByteArrayOutputStream();
- final SAMFileWriter textWriter = new SAMFileWriterFactory().makeSAMWriter(samBuilder.getHeader(),
- true, os);
- textWriter.addAlignment(rec);
- textWriter.close();
-
- final SAMFileReader reader = new SAMFileReader(new ByteArrayInputStream(os.toByteArray()));
- final SAMRecord recFromText = reader.iterator().next();
- Assert.assertEquals(recFromText.getAttribute(SAMTag.CQ.name()), valueWithColons);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SAMTextWriterTest.java b/src/tests/java/net/sf/samtools/SAMTextWriterTest.java
deleted file mode 100644
index 23c4564..0000000
--- a/src/tests/java/net/sf/samtools/SAMTextWriterTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.HashMap;
-
-public class SAMTextWriterTest {
-
- private SAMRecordSetBuilder getSAMReader(final boolean sortForMe, final SAMFileHeader.SortOrder sortOrder) {
- final SAMRecordSetBuilder ret = new SAMRecordSetBuilder(sortForMe, sortOrder);
- ret.addPair("readB", 20, 200, 300);
- ret.addPair("readA", 20, 100, 150);
- ret.addFrag("readC", 20, 140, true);
- ret.addFrag("readD", 20, 140, false);
- return ret;
- }
-
- @Test
- public void testBasic() throws Exception {
- final SAMRecordSetBuilder recordSetBuilder = getSAMReader(true, SAMFileHeader.SortOrder.coordinate);
- SAMFileReader inputSAM = recordSetBuilder.getSamReader();
- final File samFile = File.createTempFile("tmp.", ".sam");
- samFile.deleteOnExit();
- final Map<String, Object> tagMap = new HashMap<String, Object>();
- tagMap.put("XC", new Character('q'));
- tagMap.put("XI", 12345);
- tagMap.put("XF", 1.2345f);
- tagMap.put("XS", "Hi,Mom!");
- for (final Map.Entry<String, Object> entry : tagMap.entrySet()) {
- inputSAM.getFileHeader().setAttribute(entry.getKey(), entry.getValue().toString());
- }
- final SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(inputSAM.getFileHeader(), false, samFile);
- for (final SAMRecord samRecord : inputSAM) {
- samWriter.addAlignment(samRecord);
- }
- samWriter.close();
-
- // Read it back in and confirm that it matches the input
- inputSAM = recordSetBuilder.getSamReader();
- // Stuff in the attributes again since this has been created again.
- for (final Map.Entry<String, Object> entry : tagMap.entrySet()) {
- inputSAM.getFileHeader().setAttribute(entry.getKey(), entry.getValue().toString());
- }
-
- final SAMFileReader newSAM = new SAMFileReader(samFile);
- Assert.assertEquals(newSAM.getFileHeader(), inputSAM.getFileHeader());
- final Iterator<SAMRecord> inputIt = inputSAM.iterator();
- final Iterator<SAMRecord> newSAMIt = newSAM.iterator();
- while (inputIt.hasNext()) {
- Assert.assertTrue(newSAMIt.hasNext());
- final SAMRecord inputSAMRecord = inputIt.next();
- final SAMRecord newSAMRecord = newSAMIt.next();
-
- // Force reference index attributes to be populated
- inputSAMRecord.getReferenceIndex();
- newSAMRecord.getReferenceIndex();
- inputSAMRecord.getMateReferenceIndex();
- newSAMRecord.getMateReferenceIndex();
-
- // Force these to be equal
- newSAMRecord.setIndexingBin(inputSAMRecord.getIndexingBin());
-
- Assert.assertEquals(newSAMRecord, inputSAMRecord);
- }
- Assert.assertFalse(newSAMIt.hasNext());
- }
-
-}
diff --git a/src/tests/java/net/sf/samtools/SAMUtilsTest.java b/src/tests/java/net/sf/samtools/SAMUtilsTest.java
deleted file mode 100644
index d6fbb6f..0000000
--- a/src/tests/java/net/sf/samtools/SAMUtilsTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class SAMUtilsTest {
- @Test
- public void testCompareMapqs() {
- Assert.assertEquals(SAMUtils.compareMapqs(0, 0), 0);
- Assert.assertEquals(SAMUtils.compareMapqs(255, 255), 0);
- Assert.assertEquals(SAMUtils.compareMapqs(1, 1), 0);
- Assert.assertTrue(SAMUtils.compareMapqs(0, 255) < 0);
- Assert.assertTrue(SAMUtils.compareMapqs(0, 1) < 0);
- Assert.assertTrue(SAMUtils.compareMapqs(255, 1) < 0);
- Assert.assertTrue(SAMUtils.compareMapqs(1, 2) < 0);
-
- Assert.assertTrue(SAMUtils.compareMapqs(255, 0) > 0);
- Assert.assertTrue(SAMUtils.compareMapqs(1, 0) > 0);
- Assert.assertTrue(SAMUtils.compareMapqs(1, 255) > 0);
- Assert.assertTrue(SAMUtils.compareMapqs(2, 1) > 0);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SamHeaderRecordComparatorTest.java b/src/tests/java/net/sf/samtools/SamHeaderRecordComparatorTest.java
deleted file mode 100644
index 6cb89b8..0000000
--- a/src/tests/java/net/sf/samtools/SamHeaderRecordComparatorTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package net.sf.samtools;
-
-/**
- * The MIT License
- * <p/>
- * Copyright (c) 2014 The Broad Institute
- * <p/>
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * <p/>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * <p/>
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class SamHeaderRecordComparatorTest {
-
- @DataProvider(name="UsualSuspects")
- public Object[][] createData() {
- final SAMReadGroupRecord left = new SAMReadGroupRecord("left");
- left.setPlatformUnit("left.1");
- left.setLibrary("library");
-
- final SAMReadGroupRecord right = new SAMReadGroupRecord("right");
- right.setPlatformUnit("right.1");
- right.setLibrary("library");
- right.setDescription("description");
-
- return new Object[][] {{ left, right }};
- }
-
- @Test(dataProvider="UsualSuspects")
- public void testEqualRecords(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
- final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.PLATFORM_UNIT_TAG);
- Assert.assertEquals(0, comparator.compare(left, left)); // see what I did there?
- }
-
- @Test(dataProvider="UsualSuspects")
- public void testUnequalRecords(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
- final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.PLATFORM_UNIT_TAG);
- Assert.assertTrue(comparator.compare(left, right) < 0);
- Assert.assertTrue(comparator.compare(right, left) > 0);
- }
-
- @Test(dataProvider="UsualSuspects")
- public void testNullAttributes(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
- final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.FLOW_ORDER_TAG);
- Assert.assertEquals(0, comparator.compare(left, right)); // neither record has this attribute
- }
-
- @Test(dataProvider="UsualSuspects")
- public void testOneNullAttribute(final SAMReadGroupRecord left, final SAMReadGroupRecord right) {
- final SAMHeaderRecordComparator<SAMReadGroupRecord> comparator = new SAMHeaderRecordComparator<SAMReadGroupRecord>(SAMReadGroupRecord.DESCRIPTION_TAG);
- Assert.assertTrue(comparator.compare(left, right) < 0);
- Assert.assertTrue(comparator.compare(right, left) > 0);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SamPairUtilTest.java b/src/tests/java/net/sf/samtools/SamPairUtilTest.java
deleted file mode 100644
index 36b1530..0000000
--- a/src/tests/java/net/sf/samtools/SamPairUtilTest.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-public class SamPairUtilTest {
-
- @Test(dataProvider = "testGetPairOrientation")
- public void testGetPairOrientation(final String testName,
- final int read1Start, final int read1Length, final boolean read1Reverse,
- final int read2Start, final int read2Length, final boolean read2Reverse,
- final SamPairUtil.PairOrientation expectedOrientation) {
- final SAMFileHeader header = new SAMFileHeader();
- header.addSequence(new SAMSequenceRecord("chr1", 100000000));
- final SAMRecord rec1 = makeSamRecord(header, read1Start, read1Length, read1Reverse, true);
- final SAMRecord rec2 = makeSamRecord(header, read2Start, read2Length, read2Reverse, false);
- SamPairUtil.setMateInfo(rec1, rec2, header, true);
- Assert.assertEquals(SamPairUtil.getPairOrientation(rec1), expectedOrientation, testName + " first end");
- Assert.assertEquals(SamPairUtil.getPairOrientation(rec2), expectedOrientation, testName + " second end");
- }
-
- @Test(dataProvider = "testSetMateInfoMateCigar")
- public void testSetMateInfoMateCigar(final String testName,
- final int read1Start, final boolean read1Reverse, final String read1Cigar,
- final int read2Start, final boolean read2Reverse, final String read2Cigar) {
- final SAMFileHeader header = new SAMFileHeader();
- header.addSequence(new SAMSequenceRecord("chr1", 100000000));
- final SAMRecord rec1 = makeSamRecord2(header, read1Start, read1Reverse, read1Cigar, true);
- final SAMRecord rec2 = makeSamRecord2(header, read2Start, read2Reverse, read2Cigar, false);
- SamPairUtil.setMateInfo(rec1, rec2, header, true);
- Assert.assertEquals(SAMUtils.getMateCigarString(rec1), rec2.getCigarString(), testName + " first end");
- Assert.assertEquals(SAMUtils.getMateCigarString(rec2), rec1.getCigarString(), testName + " second end");
- }
-
- private SAMRecord makeSamRecord(final SAMFileHeader header, final int alignmentStart, final int readLength,
- final boolean reverse, final boolean firstOfPair) {
- final SAMRecord rec = new SAMRecord(header);
- rec.setReferenceIndex(0);
- final StringBuilder sb = new StringBuilder();
- final byte[] quals = new byte[readLength];
- for (int i = 0; i < readLength; ++i) {
- sb.append("A");
- quals[i] = 20;
- }
- rec.setReadString(sb.toString());
- rec.setBaseQualities(quals);
- rec.setAlignmentStart(alignmentStart);
- rec.setCigarString(readLength + "M");
- rec.setReadPairedFlag(true);
- rec.setReadNegativeStrandFlag(reverse);
- if (firstOfPair) rec.setFirstOfPairFlag(true);
- else rec.setSecondOfPairFlag(true);
- return rec;
- }
-
- private SAMRecord makeSamRecord2(final SAMFileHeader header, final int alignmentStart, boolean reverse,
- String cigarString, final boolean firstOfPair) {
- final SAMRecord rec = new SAMRecord(header);
- final StringBuilder sb = new StringBuilder();
- final Cigar cigar = TextCigarCodec.getSingleton().decode(cigarString);
- final int readLength = cigar.getReadLength();
- rec.setReferenceIndex(0);
- final byte[] quals = new byte[readLength];
- for (int i = 0; i < readLength; ++i) {
- sb.append("A");
- quals[i] = 20;
- }
- rec.setReadString(sb.toString());
- rec.setBaseQualities(quals);
- rec.setAlignmentStart(alignmentStart);
- rec.setCigar(cigar);
- rec.setReadPairedFlag(true);
- rec.setReadNegativeStrandFlag(reverse);
- if (firstOfPair) rec.setFirstOfPairFlag(true);
- else rec.setSecondOfPairFlag(true);
- return rec;
- }
-
- @DataProvider(name = "testGetPairOrientation")
- public Object[][] testGetPairOrientationDataProvider() {
- /**
- * @param testName
- * @param read1Start
- * @param read1Length
- * @param read1Reverse
- * @param read2Start
- * @param read2Length
- * @param read2Reverse
- * @param expectedOrientation
- */
- return new Object[][] {
- {"normal innie", 1, 100, false, 500, 100, true, SamPairUtil.PairOrientation.FR},
- {"overlapping innie", 1, 100, false, 50, 100, true, SamPairUtil.PairOrientation.FR},
- {"second end enclosed innie", 1, 100, false, 50, 50, true, SamPairUtil.PairOrientation.FR},
- {"first end enclosed innie", 1, 50, false, 1, 100, true, SamPairUtil.PairOrientation.FR},
- {"completely overlapping innie", 1, 100, false, 1, 100, true, SamPairUtil.PairOrientation.FR},
-
- {"normal outie", 1, 100, true, 500, 100, false, SamPairUtil.PairOrientation.RF},
- {"nojump outie", 1, 100, true, 101, 100, false, SamPairUtil.PairOrientation.RF},
-
- {"forward tandem", 1, 100, true, 500, 100, true, SamPairUtil.PairOrientation.TANDEM},
- {"reverse tandem", 1, 100, false, 500, 100, false, SamPairUtil.PairOrientation.TANDEM},
- {"overlapping forward tandem", 1, 100, true, 50, 100, true, SamPairUtil.PairOrientation.TANDEM},
- {"overlapping reverse tandem", 1, 100, false, 50, 100, false, SamPairUtil.PairOrientation.TANDEM},
- {"second end enclosed forward tandem", 1, 100, true, 50, 50, true, SamPairUtil.PairOrientation.TANDEM},
- {"second end enclosed reverse tandem", 1, 100, false, 50, 50, false, SamPairUtil.PairOrientation.TANDEM},
- {"first end enclosed forward tandem", 1, 50, true, 1, 100, true, SamPairUtil.PairOrientation.TANDEM},
- {"first end enclosed reverse tandem", 1, 50, false, 1, 100, false, SamPairUtil.PairOrientation.TANDEM},
- };
- }
-
- @DataProvider(name = "testSetMateInfoMateCigar")
- public Object[][] testSetMateInfoMateCigarDataProvider() {
- /**
- * @param testName
- * @param read1Start
- * @param read1Reverse
- * @param read1Cigar
- * @param read2Start
- * @param read2Reverse
- * @param read2Cigar
- */
- return new Object[][] {
- {"50M/50M", 1, false, "50M", 500, true, "50M"},
- {"50M/25M5I20M", 1, false, "50M", 500, true, "25M5I20M"},
- {"25M5I20M/50M", 1, false, "25M5I20M", 500, true, "50M"},
- {"50M/25M5D20M", 1, false, "50M", 500, true, "25M5D20M"},
- {"25M5D20M/50M", 1, false, "25M5D20M", 500, true, "50M"},
- };
- }
-}
diff --git a/src/tests/java/net/sf/samtools/SamReaderSortTest.java b/src/tests/java/net/sf/samtools/SamReaderSortTest.java
deleted file mode 100755
index 6766272..0000000
--- a/src/tests/java/net/sf/samtools/SamReaderSortTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package net.sf.samtools;
-
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Tests for the implementation of SAMRecordIterator in SAMFileReader
- *
- * @author ktibbett at broadinstitute.org
- */
-public class SamReaderSortTest {
-
- public static final String COORDINATE_SORTED_FILE = "testdata/net/sf/samtools/coordinate_sorted.sam";
- public static final String QUERYNAME_SORTED_FILE = "testdata/net/sf/samtools/queryname_sorted.sam";
- public static final String QUERYNAME_SORTED_NO_HEADER_SORT = "testdata/net/sf/samtools/unsorted.sam";
-
- @Test(expectedExceptions = IllegalStateException.class)
- public void testSortsDisagree() throws Exception {
- SAMRecordIterator it = new SAMFileReader(new File(COORDINATE_SORTED_FILE)).iterator();
- try {
- it.assertSorted(SAMFileHeader.SortOrder.queryname);
- while(it.hasNext()) {
- it.next();
- }
- Assert.fail("Queryname assertion should have failed on coordinate sorted file but didn't");
- }
- finally {
- it.close();
- }
- }
-
- @Test(dataProvider="validSorts")
- public void testSortAssertionValid(String file, SAMFileHeader.SortOrder order) {
- SAMRecordIterator it = new SAMFileReader(new File(file)).iterator();
- try {
- it.assertSorted(order);
- while (it.hasNext()) {
- it.next();
- }
- }
- finally {
- it.close();
- }
- }
-
- @DataProvider(name="validSorts")
- public Object[][] getValidSorts() {
- return new Object[][] {
- {COORDINATE_SORTED_FILE, SAMFileHeader.SortOrder.coordinate},
- {QUERYNAME_SORTED_FILE, SAMFileHeader.SortOrder.queryname},
- {QUERYNAME_SORTED_NO_HEADER_SORT, SAMFileHeader.SortOrder.queryname},
- {COORDINATE_SORTED_FILE, SAMFileHeader.SortOrder.unsorted}
- };
- }
-
-
- @Test(dataProvider="invalidSorts", expectedExceptions = IllegalStateException.class)
- public void testSortAssertionFails(String file, SAMFileHeader.SortOrder order) throws Exception {
- SAMRecordIterator it = new SAMFileReader(new File(file)).iterator();
- try {
- it.assertSorted(order);
- while (it.hasNext()) {
- it.next();
- }
- Assert.fail("Iterated successfully over " + file + " with invalid sort assertion: " + order.name());
- }
- finally {
- it.close();
- }
- }
-
- @DataProvider(name="invalidSorts")
- public Object[][] getInvalidSorts() {
- return new Object[][] {
- {QUERYNAME_SORTED_NO_HEADER_SORT, SAMFileHeader.SortOrder.coordinate}
- };
- }
-}
diff --git a/src/tests/java/net/sf/samtools/seekablestream/SeekableBufferedStreamTest.java b/src/tests/java/net/sf/samtools/seekablestream/SeekableBufferedStreamTest.java
deleted file mode 100644
index 6d6c7f1..0000000
--- a/src/tests/java/net/sf/samtools/seekablestream/SeekableBufferedStreamTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package net.sf.samtools.seekablestream;
-
-import static org.testng.Assert.assertEquals;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-public class SeekableBufferedStreamTest {
-
-// private final File BAM_INDEX_FILE = new File("testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam.bai");
- private final File BAM_FILE = new File("testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam");
- private final String BAM_URL_STRING = "http://picard.sourceforge.net/testdata/index_test.bam";
- private static File TestFile = new File("testdata/net/sf/samtools/seekablestream/megabyteZeros.dat");
-
- /**
- * Test reading across a buffer boundary (buffer size is 512000). The test first reads a range of
- * bytes using an unbuffered stream file stream, then compares this to results from a buffered http stream.
- *
- * @throws IOException
- */
- @Test
- public void testRandomRead() throws IOException {
-
- int startPosition = 500000;
- int length = 50000;
-
- byte[] buffer1 = new byte[length];
- SeekableStream unBufferedStream = new SeekableFileStream(BAM_FILE);
- unBufferedStream.seek(startPosition);
- int bytesRead = unBufferedStream.read(buffer1, 0, length);
- assertEquals(length, bytesRead);
-
- byte[] buffer2 = new byte[length];
- SeekableStream bufferedStream = new SeekableBufferedStream(new SeekableHTTPStream(new URL(BAM_URL_STRING)));
- bufferedStream.seek(startPosition);
- bytesRead = bufferedStream.read(buffer2, 0, length);
- assertEquals(length, bytesRead);
-
- assertEquals(buffer1, buffer2);
- }
-
- /**
- * Test an attempt to read past the end of the file. The test file is 594,149 bytes in length. The test
- * attempts to read a 1000 byte block starting at position 594000. A correct result would return 149 bytes.
- *
- * @throws IOException
- */
- @Test
- public void testEOF() throws IOException {
-
- int remainder = 149;
- long fileLength = BAM_FILE.length();
- long startPosition = fileLength - remainder;
- int length = 1000;
-
-
- byte[] buffer = new byte[length];
- SeekableStream bufferedStream = new SeekableBufferedStream(new SeekableHTTPStream(new URL(BAM_URL_STRING)));
- bufferedStream.seek(startPosition);
- int bytesRead = bufferedStream.read(buffer, 0, length);
- assertEquals(remainder, bytesRead);
-
- // Subsequent reads should return -1
- bytesRead = bufferedStream.read(buffer, 0, length);
- assertEquals(-1, bytesRead);
- }
-
- @Test
- public void testSkip() throws IOException {
- final int[] BUFFER_SIZES = new int[]{8, 96, 1024, 8*1024, 16*1024, 96*1024, 48*1024};
-
- for (final int bufferSize : BUFFER_SIZES) {
- final SeekableBufferedStream in1 = new SeekableBufferedStream(new SeekableFileStream(BAM_FILE), bufferSize);
- final SeekableBufferedStream in2 = new SeekableBufferedStream(new SeekableFileStream(BAM_FILE), bufferSize);
-
- final int SIZE = 10000;
- final byte[] bytes1 = new byte[SIZE];
- final byte[] bytes2 = new byte[SIZE];
-
- reallyRead(bytes1, in1);
- reallyRead(bytes1, in1);
- in1.skip(bytes1.length);
- reallyRead(bytes1, in1);
-
- reallyRead(bytes2, in2);
- reallyRead(bytes2, in2);
- in2.seek(bytes2.length * 3);
- reallyRead(bytes2, in2);
-
- in1.close();
- in2.close();
-
- Assert.assertEquals(bytes1, bytes2, "Error at buffer size " + bufferSize);
- }
- }
-
- private int reallyRead(final byte[] bytes, final SeekableBufferedStream in) throws IOException {
- int read = 0, total = 0;
- do {
- read = in.read(bytes, total, bytes.length-total);
- total += read;
- } while (total != bytes.length && read > 0);
-
- return total;
- }
-
-
- @Test
- public void testDivisableReads()throws IOException{
-
- testReadsLength(1);
- testReadsLength(2);
- testReadsLength(4);
- testReadsLength(5);
- testReadsLength(10);
- testReadsLength(20);
- testReadsLength(50);
- testReadsLength(100);
-
- }
-
- private void testReadsLength(final int length) throws IOException {
-
- final int BUFFERED_STREAM_BUFFER_SIZE = 100;
- final byte buffer[]=new byte[BUFFERED_STREAM_BUFFER_SIZE*10];
- final SeekableFileStream fileStream = new SeekableFileStream(TestFile);
- final SeekableBufferedStream bufferedStream = new SeekableBufferedStream(fileStream,BUFFERED_STREAM_BUFFER_SIZE);
-
- for( int i=0; i<10*BUFFERED_STREAM_BUFFER_SIZE/length ; ++i ){
- assertEquals(bufferedStream.read(buffer, 0, length), length);
- }
- }
-
-}
diff --git a/src/tests/java/net/sf/samtools/seekablestream/SeekableFTPStreamTest.java b/src/tests/java/net/sf/samtools/seekablestream/SeekableFTPStreamTest.java
deleted file mode 100644
index dd75033..0000000
--- a/src/tests/java/net/sf/samtools/seekablestream/SeekableFTPStreamTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.seekablestream;
-
-import net.sf.samtools.seekablestream.SeekableFTPStream;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * @author Jim Robinson
- * @since 10/3/11
- */
-public class SeekableFTPStreamTest {
-
-
- static String urlString = "ftp://ftp.broadinstitute.org/pub/igv/TEST/test.txt";
- static long fileSize = 27;
- static byte[] expectedBytes = "abcdefghijklmnopqrstuvwxyz\n".getBytes();
- SeekableFTPStream stream;
-
- @BeforeMethod
- public void setUp() throws IOException {
- stream = new SeekableFTPStream(new URL(urlString));
-
- }
-
- @AfterMethod
- public void tearDown() throws IOException {
- stream.close();
- }
-
- @Test
- public void testLength() throws Exception {
- long length = stream.length();
- Assert.assertEquals(fileSize, length);
- }
-
-
- /**
- * Test a buffered read. The buffer is much large than the file size, assert that the desired # of bytes are read
- *
- * @throws Exception
- */
- @Test
- public void testBufferedRead() throws Exception {
-
- byte[] buffer = new byte[64000];
- int nRead = stream.read(buffer);
- Assert.assertEquals(fileSize, nRead);
-
- }
-
- /**
- * Test requesting a range that extends beyond the end of the file
- */
-
- @Test
- public void testRange() throws Exception {
- stream.seek(20);
- byte[] buffer = new byte[64000];
- int nRead = stream.read(buffer);
- Assert.assertEquals(fileSize - 20, nRead);
-
- }
-
- /**
- * Test requesting a range that begins beyond the end of the file
- */
-
- @Test
- public void testBadRange() throws Exception {
- stream.seek(30);
- byte[] buffer = new byte[64000];
- int nRead = stream.read(buffer);
- Assert.assertEquals(-1, nRead);
- }
-
-
-}
-
-
diff --git a/src/tests/java/net/sf/samtools/seekablestream/SeekableFileStreamTest.java b/src/tests/java/net/sf/samtools/seekablestream/SeekableFileStreamTest.java
deleted file mode 100644
index 4fdef02..0000000
--- a/src/tests/java/net/sf/samtools/seekablestream/SeekableFileStreamTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.seekablestream;
-
-import net.sf.samtools.util.BufferedLineReader;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-/**
- * Created by IntelliJ IDEA.
- * User: jrobinso
- * Date: Dec 20, 2009
- * Time: 11:13:19 AM
- * To change this template use File | Settings | File Templates.
- */
-public class SeekableFileStreamTest {
-
- @Test
- public void testSeek() throws Exception {
- String expectedLine = "ccccccccc";
- File testFile = new File("testdata/tribble/seekTest.txt");
- SeekableFileStream is = new SeekableFileStream(testFile);
- is.seek(20);
- BufferedLineReader reader = new BufferedLineReader(is);
- String nextLine = reader.readLine();
- Assert.assertEquals(expectedLine, nextLine);
- reader.close();
- }
-}
diff --git a/src/tests/java/net/sf/samtools/seekablestream/SeekableStreamFactoryTest.java b/src/tests/java/net/sf/samtools/seekablestream/SeekableStreamFactoryTest.java
deleted file mode 100644
index 66aeacc..0000000
--- a/src/tests/java/net/sf/samtools/seekablestream/SeekableStreamFactoryTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package net.sf.samtools.seekablestream;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class SeekableStreamFactoryTest {
- @Test
- public void testIsFilePath() throws Exception {
- Assert.assertEquals(SeekableStreamFactory.isFilePath("x"), true);
- Assert.assertEquals(SeekableStreamFactory.isFilePath(""), true);
- Assert.assertEquals(SeekableStreamFactory.isFilePath("http://broadinstitute.org"), false);
- Assert.assertEquals(SeekableStreamFactory.isFilePath("https://broadinstitute.org"), false);
- Assert.assertEquals(SeekableStreamFactory.isFilePath("ftp://broadinstitute.org"), false);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/BinaryCodecTest.java b/src/tests/java/net/sf/samtools/util/BinaryCodecTest.java
deleted file mode 100644
index 031e20b..0000000
--- a/src/tests/java/net/sf/samtools/util/BinaryCodecTest.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.*;
-
-
-/*
- * The Broad Institute
- * SOFTWARE COPYRIGHT NOTICE AGREEMENT
- * This software and its documentation are copyright Jan 9, 2009 by the
- * Broad Institute/Massachusetts Institute of Technology. All rights are reserved.
- *
- * This software is supplied without any warranty or guaranteed support whatsoever. Neither
- * the Broad Institute nor MIT can be responsible for its use, misuse, or functionality.
- */
-
-public class BinaryCodecTest {
-
- @Test
- public void testReadAndWrite() throws IOException {
- final byte[] value = new byte[2];
- value[0] = 1;
- value[1] = 2;
- //Writing to file
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeBytes(value);
- codec.close();
-
- //Reading from file
- final byte[] valuesTwo = new byte[2];
- valuesTwo[0] = 1;
- valuesTwo[1] = 2;
-
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- final byte[] bytesFromBinaryFile = new byte[2];
- readCodec.readBytes(bytesFromBinaryFile);
- Assert.assertEquals(valuesTwo, bytesFromBinaryFile);
- readCodec.close();
- }
-
- @Test
- public void testReadAndWriteString() throws IOException {
- final String value = "Test String to Write";
-
- //Writing to file
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeString(value, true, false);
- codec.close();
-
- //Reading from file
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- final int stringLength = readCodec.readInt();
- Assert.assertEquals(value.length(), stringLength);
- final String s = readCodec.readString(stringLength);
- Assert.assertEquals(value, s);
- readCodec.close();
- }
-
- @Test
- public void testReadAndWriteInt() throws IOException {
- final int value = 42;
-
- //Writing to file
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeInt(value);
- codec.close();
-
- //Reading from file
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- Assert.assertEquals(value, readCodec.readInt());
- readCodec.close();
- }
-
- @Test
- public void testReadAndWriteDouble() throws IOException {
- final double value = 54.4;
-
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeDouble(value);
- codec.close();
-
- //Reading from file
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- Assert.assertEquals(value, readCodec.readDouble());
- readCodec.close();
- }
-
- @Test
- public void testReadAndWriteLong() throws IOException {
- final long value = 42;
-
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeLong(value);
- codec.close();
-
- //Reading from file
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- Assert.assertEquals(value, readCodec.readLong());
- readCodec.close();
-
- }
-
- @Test
- public void testReadAndWriteFloat() throws IOException{
- final float value = 42.5F;
-
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeFloat(value);
- codec.close();
-
- //Reading from file
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- Assert.assertEquals(value, readCodec.readFloat());
- readCodec.close();
- }
-
- @Test
- public void testReadAndWriteBoolean() throws IOException{
-
- boolean values[] = {true, false};
-
- for (boolean value : values) {
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeBoolean(value);
- codec.close();
-
- //Reading from file
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- Assert.assertEquals(value, readCodec.readBoolean());
- readCodec.close();
- }
- }
-
- @Test
- public void testReadAndWriteMutlitpleData() throws IOException{
- final float fValue = 42.5F;
- final String sValue = "TestString";
-
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- codec.writeFloat(fValue);
- codec.writeString(sValue, true, false);
- codec.close();
-
- //Reading from file
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
- Assert.assertEquals(fValue, readCodec.readFloat());
- final int stringLength = readCodec.readInt();
- Assert.assertEquals(sValue, readCodec.readString(stringLength));
- readCodec.close();
- }
-
- @Test
- public void readPastEndOfFile() throws IOException{
- final long startTime = System.currentTimeMillis();
- int i = 0;
-
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- while (i<100){
- codec.writeInt(i);
- i++;
- }
- codec.close();
-
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
-
- System.out.println((System.currentTimeMillis() - startTime) + "ms to write");
- int z = 0;
- boolean reachedStatement = false;
- while (z<1000) {
- try {
- Assert.assertEquals(z, readCodec.readInt());
- } catch (Exception e) {
- Assert.assertEquals(RuntimeEOFException.class, e.getClass());
- reachedStatement = true;
- }
- z++;
- }
-
- Assert.assertTrue(reachedStatement);
- readCodec.close();
- }
-
- @Test
- public void timeTest() throws IOException{
- final long startTime = System.currentTimeMillis();
- int i = 0;
-
- final File outputFile = File.createTempFile("temp", ".bin");
- final DataOutputStream stream = new DataOutputStream(new FileOutputStream(outputFile));
- final BinaryCodec codec = new BinaryCodec(stream);
- while (i<100){
- codec.writeInt(i);
- i++;
- }
- codec.close();
-
- final DataInputStream instream = new DataInputStream(new FileInputStream(outputFile));
- final BinaryCodec readCodec = new BinaryCodec(instream);
-
- System.out.println((System.currentTimeMillis() - startTime) + "ms to write");
- int z = 0;
- boolean reachedStatement = false;
- while (z<1000) {
- try {
- Assert.assertEquals(z, readCodec.readInt());
- } catch (Exception e) {
- Assert.assertEquals(RuntimeEOFException.class, e.getClass());
- reachedStatement = true;
- }
- z++;
- }
-
- Assert.assertTrue(reachedStatement);
- readCodec.close();
- }
-
-
-}
diff --git a/src/tests/java/net/sf/samtools/util/BlockCompressedFilePointerUtilTest.java b/src/tests/java/net/sf/samtools/util/BlockCompressedFilePointerUtilTest.java
deleted file mode 100644
index 027722e..0000000
--- a/src/tests/java/net/sf/samtools/util/BlockCompressedFilePointerUtilTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2010 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class BlockCompressedFilePointerUtilTest
-{
- @Test
- public void basicTest()
- {
- List<Long> pointers = new ArrayList<Long>();
- pointers.add(makeFilePointer(0, 0));
- pointers.add(makeFilePointer(0, BlockCompressedFilePointerUtil.MAX_OFFSET));
- final long BIG_BLOCK_ADDRESS = 1L << 46;
- pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS-1, 0));
- pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS-1, BlockCompressedFilePointerUtil.MAX_OFFSET));
- pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS, 0));
- pointers.add(makeFilePointer(BIG_BLOCK_ADDRESS, BlockCompressedFilePointerUtil.MAX_OFFSET));
- pointers.add(makeFilePointer(BlockCompressedFilePointerUtil.MAX_BLOCK_ADDRESS, 0));
- pointers.add(makeFilePointer(BlockCompressedFilePointerUtil.MAX_BLOCK_ADDRESS, BlockCompressedFilePointerUtil.MAX_OFFSET));
- for (int i = 0; i < pointers.size() - 1; ++i) {
- for (int j = i+1; j < pointers.size(); ++j) {
- Assert.assertTrue(BlockCompressedFilePointerUtil.compare(pointers.get(i), pointers.get(j)) < 0,
- BlockCompressedFilePointerUtil.asString(pointers.get(i)) + " should be < " +
- BlockCompressedFilePointerUtil.asString(pointers.get(j)));
- Assert.assertTrue(BlockCompressedFilePointerUtil.compare(pointers.get(j), pointers.get(i)) > 0,
- BlockCompressedFilePointerUtil.asString(pointers.get(j)) + " should be > " +
- BlockCompressedFilePointerUtil.asString(pointers.get(i)));
- }
- }
-
- }
-
- /**
- * Create the virtual file pointer, and also assert that is can be converted back into the input parameters.
- * @param blockAddress
- * @param blockOffset
- * @return block compressed file pointer
- */
- private long makeFilePointer(long blockAddress, int blockOffset)
- {
- final long ret = BlockCompressedFilePointerUtil.makeFilePointer(blockAddress, blockOffset);
- Assert.assertEquals(BlockCompressedFilePointerUtil.getBlockAddress(ret), blockAddress);
- Assert.assertEquals(BlockCompressedFilePointerUtil.getBlockOffset(ret), blockOffset);
- Assert.assertEquals(BlockCompressedFilePointerUtil.compare(ret, ret), 0);
- return ret;
- }
-
- @Test(dataProvider = "badInputs", expectedExceptions = IllegalArgumentException.class)
- public void negativeTests(long blockAddress, int blockOffset) {
- BlockCompressedFilePointerUtil.makeFilePointer(blockAddress, blockOffset);
- Assert.assertFalse(true, "Should not get here.");
- }
-
- @DataProvider(name="badInputs")
- public Object[][] badInputs() {
- return new Object[][]{
- {-1L, 0},
- {0L, -1},
- {BlockCompressedFilePointerUtil.MAX_BLOCK_ADDRESS+1, 0},
- {0L, BlockCompressedFilePointerUtil.MAX_OFFSET+1}
- };
- }
-}
-
-/******************************************************************/
-/**************************[END OF BlockCompressedFilePointerUtilTest.java]*************************/
-/******************************************************************/
diff --git a/src/tests/java/net/sf/samtools/util/BlockCompressedOutputStreamTest.java b/src/tests/java/net/sf/samtools/util/BlockCompressedOutputStreamTest.java
deleted file mode 100644
index f4baa14..0000000
--- a/src/tests/java/net/sf/samtools/util/BlockCompressedOutputStreamTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.File;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-public class BlockCompressedOutputStreamTest {
-
- @Test
- public void testBasic() throws Exception {
- final File f = File.createTempFile("BCOST.", ".gz");
- f.deleteOnExit();
- final List<String> linesWritten = new ArrayList<String>();
- System.out.println("Creating file " + f);
- final BlockCompressedOutputStream bcos = new BlockCompressedOutputStream(f);
- String s = "Hi, Mom!\n";
- bcos.write(s.getBytes());
- linesWritten.add(s);
- s = "Hi, Dad!\n";
- bcos.write(s.getBytes());
- linesWritten.add(s);
- bcos.flush();
- final StringBuilder sb = new StringBuilder(BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE * 2);
- s = "1234567890123456789012345678901234567890123456789012345678901234567890\n";
- while (sb.length() <= BlockCompressedStreamConstants.DEFAULT_UNCOMPRESSED_BLOCK_SIZE) {
- sb.append(s);
- linesWritten.add(s);
- }
- bcos.write(sb.toString().getBytes());
- bcos.close();
- final BlockCompressedInputStream bcis = new BlockCompressedInputStream(f);
- final BufferedReader reader = new BufferedReader(new InputStreamReader(bcis));
- String line;
- for(int i = 0; (line = reader.readLine()) != null; ++i) {
- Assert.assertEquals(line + "\n", linesWritten.get(i));
- }
- }
-
- @Test
- public void testOverflow() throws Exception {
- final File f = File.createTempFile("BCOST.", ".gz");
- f.deleteOnExit();
- final List<String> linesWritten = new ArrayList<String>();
- System.out.println("Creating file " + f);
- final BlockCompressedOutputStream bcos = new BlockCompressedOutputStream(f);
- Random r = new Random(15555);
- final int INPUT_SIZE = 64 * 1024;
- byte[] input = new byte[INPUT_SIZE];
- r.nextBytes(input);
- bcos.write(input);
- bcos.close();
-
- final BlockCompressedInputStream bcis = new BlockCompressedInputStream(f);
- byte[] output = new byte[INPUT_SIZE];
- int len;
- int i = 0;
- while ((len = bcis.read(output, 0, output.length)) != -1) {
- for (int j = 0; j < len; j++) {
- Assert.assertEquals(output[j], input[i++]);
- }
- }
- Assert.assertEquals(i, INPUT_SIZE);
- }
-
- // PIC-393 exception closing BGZF stream opened to /dev/null
- // I don't think this will work on Windows, because /dev/null doesn't work
- @Test(groups = "broken")
- public void testDevNull() throws Exception {
- final BlockCompressedOutputStream bcos = new BlockCompressedOutputStream("/dev/null");
- bcos.write("Hi, Mom!".getBytes());
- bcos.close();
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/BlockCompressedTerminatorTest.java b/src/tests/java/net/sf/samtools/util/BlockCompressedTerminatorTest.java
deleted file mode 100644
index a1c8b15..0000000
--- a/src/tests/java/net/sf/samtools/util/BlockCompressedTerminatorTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.File;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class BlockCompressedTerminatorTest {
- private static final File TEST_DATA_DIR = new File("testdata/net/sf/samtools/util");
-
- @Test
- public void testFileWithTerminator() throws Exception {
- final File tmpCompressedFile = File.createTempFile("test.", ".bgzf");
- tmpCompressedFile.deleteOnExit();
- final BlockCompressedOutputStream os = new BlockCompressedOutputStream(tmpCompressedFile);
- os.write("Hi, Mom!\n".getBytes());
- os.close();
- Assert.assertEquals(BlockCompressedInputStream.checkTermination(tmpCompressedFile),
- BlockCompressedInputStream.FileTermination.HAS_TERMINATOR_BLOCK);
- }
-
- @Test
- public void testValidFileWithoutTerminator() throws Exception {
- Assert.assertEquals(BlockCompressedInputStream.checkTermination(new File(TEST_DATA_DIR, "no_bgzf_terminator.bam")),
- BlockCompressedInputStream.FileTermination.HAS_HEALTHY_LAST_BLOCK);
- }
-
- @Test
- public void testDefectiveFile() throws Exception {
- Assert.assertEquals(BlockCompressedInputStream.checkTermination(new File(TEST_DATA_DIR, "defective_bgzf.bam")),
- BlockCompressedInputStream.FileTermination.DEFECTIVE);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/Iso8601DateTest.java b/src/tests/java/net/sf/samtools/util/Iso8601DateTest.java
deleted file mode 100644
index 1768e70..0000000
--- a/src/tests/java/net/sf/samtools/util/Iso8601DateTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.util.Date;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class Iso8601DateTest {
- @Test
- public void testBasic() {
- final String dateStr = "2008-12-15";
- Iso8601Date first = new Iso8601Date(dateStr);
- String firstFormatted = first.toString();
- Iso8601Date second = new Iso8601Date(firstFormatted);
- Assert.assertEquals(first, second);
- String secondFormatted = second.toString();
- Assert.assertEquals(firstFormatted, secondFormatted);
- }
-
- @Test
- public void testMillisecondTruncation() {
- // Create a Date with milliseconds
- final Date now = new Date();
- if (now.getTime() % 1000 == 0) {
- now.setTime(now.getTime() + 3);
- }
- Iso8601Date isoDate = new Iso8601Date(now);
- Assert.assertEquals(isoDate.getTime() % 1000, 0);
- Assert.assertEquals(isoDate.getTime() / 1000, now.getTime() / 1000);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/IupacTest.java b/src/tests/java/net/sf/samtools/util/IupacTest.java
deleted file mode 100644
index 6f55560..0000000
--- a/src/tests/java/net/sf/samtools/util/IupacTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2011 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.*;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.Arrays;
-
-public class IupacTest {
- @Test(dataProvider = "basicDataProvider")
- public void basic(final String tempFileExtension) throws Exception {
- final File outputFile = File.createTempFile("iupacTest.", tempFileExtension);
- outputFile.deleteOnExit();
- final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(new SAMFileHeader(), false, outputFile);
- final String bases1 = "=ACMGRSVTWYHKDBNA";
- final String bases2 = "A=ACMGRSVTWYHKDBN"; // Test both high-order and low-order base encoding.
- final byte[] quals = new byte[bases1.length()];
- Arrays.fill(quals, (byte)20);
- final String[] reads = {bases1, bases1.toLowerCase(), bases2, bases2.toLowerCase()};
- for (int i = 0; i < reads.length; ++i) {
- final SAMRecord rec = new SAMRecord(writer.getFileHeader());
- rec.setReadName("read" + i);
- rec.setReadUnmappedFlag(true);
- rec.setReadString(reads[i]);
- rec.setBaseQualities(quals);
- writer.addAlignment(rec);
- }
- writer.close();
- final SAMFileReader reader = new SAMFileReader(outputFile);
- final SAMRecordIterator it = reader.iterator();
- for (int i = 0; i < reads.length; ++i) {
- final SAMRecord rec = it.next();
- Assert.assertEquals(rec.getReadString(), reads[i].toUpperCase());
- }
- reader.close();
- }
-
- @DataProvider(name = "basidDataProvider")
- public Object[][] basicDataProvider() {
- return new Object[][] {
- {BamFileIoUtils.BAM_FILE_EXTENSION},
- {".sam"}
- };
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/RelativeIso8601DateTest.java b/src/tests/java/net/sf/samtools/util/RelativeIso8601DateTest.java
deleted file mode 100644
index f4a91f0..0000000
--- a/src/tests/java/net/sf/samtools/util/RelativeIso8601DateTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.sf.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-/** @author mccowan */
-
-public class RelativeIso8601DateTest {
- @Test
- public void testLazyInstance() {
- final RelativeIso8601Date lazy = RelativeIso8601Date.generateLazyNowInstance();
- Assert.assertEquals(lazy.toString(), RelativeIso8601Date.LAZY_NOW_LABEL);
- Assert.assertEquals(lazy.toString(), RelativeIso8601Date.LAZY_NOW_LABEL);
- Assert.assertEquals(lazy.toString(), RelativeIso8601Date.LAZY_NOW_LABEL);
- Assert.assertEquals((double) lazy.getTime(), (double) System.currentTimeMillis(), 2000d); // Up to 2 seconds off; iso truncates milliseconds.
- // Assert no exception thrown; this should be valid, because toString should now return an iso-looking date.
- new RelativeIso8601Date(lazy.toString());
- }
-
- @Test
- public void testNonLazyInstance() {
- // Test both constructor methods
- final List<RelativeIso8601Date> testDates = Arrays.<RelativeIso8601Date>asList(
- new RelativeIso8601Date(new Date()),
- new RelativeIso8601Date(new Iso8601Date(new Date()).toString())
- );
-
- for (final RelativeIso8601Date nonLazy : testDates) {
- Assert.assertFalse(nonLazy.toString().equals(RelativeIso8601Date.LAZY_NOW_LABEL));
- Assert.assertEquals((double) nonLazy.getTime(), (double) System.currentTimeMillis(), 1d);
- // Assert no exception thrown; this should be valid, because toString return an iso-looking date.
- new RelativeIso8601Date(nonLazy.toString());
- }
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/SequenceUtilTest.java b/src/tests/java/net/sf/samtools/util/SequenceUtilTest.java
deleted file mode 100644
index d0c40f8..0000000
--- a/src/tests/java/net/sf/samtools/util/SequenceUtilTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import net.sf.samtools.*;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SequenceUtilTest {
- private static final String HEADER = "@HD\tVN:1.0\tSO:unsorted\n";
- private static final String SEQUENCE_NAME=
- "@SQ\tSN:phix174.seq\tLN:5386\tUR:/seq/references/PhiX174/v0/PhiX174.fasta\tAS:PhiX174\tM5:3332ed720ac7eaa9b3655c06f6b9e196";
-
- @Test
- public void testExactMatch() {
- final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
- "3332ed720ac7eaa9b3655c06f6b9e196");
- final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
- "3332ed720ac7eaa9b3655c06f6b9e196");
- SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
- }
-
- @Test(expectedExceptions = SequenceUtil.SequenceListsDifferException.class)
- public void testMismatch() {
- final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
- "3332ed720ac7eaa9b3655c06f6b9e196");
- final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
- "deadbeef");
- SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
- Assert.fail();
- }
-
- @Test
- public void testFileColonDifference() {
- final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
- "3332ed720ac7eaa9b3655c06f6b9e196");
- final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "file:/seq/references/PhiX174/v0/PhiX174.fasta",
- "3332ed720ac7eaa9b3655c06f6b9e196");
- SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
- }
-
- @Test
- public void testURDifferent() {
- final SAMSequenceDictionary sd1 = makeSequenceDictionary(5386, "/seq/references/PhiX174/v0/PhiX174.fasta",
- "3332ed720ac7eaa9b3655c06f6b9e196");
- final SAMSequenceDictionary sd2 = makeSequenceDictionary(5386, "file:/seq/references/PhiX174/v1/PhiX174.fasta",
- "3332ed720ac7eaa9b3655c06f6b9e196");
- SequenceUtil.assertSequenceDictionariesEqual(sd1, sd2);
- }
-
- private SAMSequenceDictionary makeSequenceDictionary(final int length, final String ur, final String m5) {
- final String s = HEADER +
- String.format("@SQ\tSN:phix174.seq\tLN:%d\tUR:%s\tAS:PhiX174\tM5:%s\n", length, ur, m5);
- return new SAMTextHeaderCodec().decode(new StringLineReader(s), null).getSequenceDictionary();
- }
-
- @Test(dataProvider = "makeReferenceFromAlignment")
- public void testMakeReferenceFromAlignment(final String seq, final String cigar, final String md,
- boolean includeReferenceBasesForDeletions,
- final String expectedReference) {
- final SAMRecord rec = new SAMRecord(null);
- rec.setReadName("test");
- rec.setReadString(seq);
- rec.setCigarString(cigar);
- rec.setAttribute(SAMTag.MD.name(), md);
- final byte[] refBases = SequenceUtil.makeReferenceFromAlignment(rec, includeReferenceBasesForDeletions);
- Assert.assertEquals(StringUtil.bytesToString(refBases), expectedReference);
- }
-
- @DataProvider(name = "makeReferenceFromAlignment")
- public Object[][] testMakeReferenceFromAlignmentDataProvider() {
- return new Object[][] {
- {"ACGTACGTACGT", "12M2H", "4GAAA4", true, "ACGTGAAAACGT"},
- {"ACGTACGTACGT", "2H12M", "12", false, "ACGTACGTACGT"},
- {"ACGTACGTACGT", "4M4I4M2H", "8", false, "ACGT----ACGT"},
- {"ACGTACGTACGT", "2S4M2I4M2S", "8", false, "00GTAC--ACGT00"},
- {"ACGTACGTACGT", "6M2D6M2H", "4GA^TT0TG4", true, "ACGTGATTTGACGT"},
- {"ACGTACGTACGT", "6M2D6M2H", "4GA^TT0TG4", false, "ACGTGATGACGT"},
- // When CIGAR has N, MD will not have skipped bases.
- {"ACGTACGTACGT", "6M2N6M2H", "4GA0TG4", true, "ACGTGANNTGACGT"},
- {"ACGTACGTACGT", "6M2N6M2H", "4GA0TG4", false, "ACGTGATGACGT"},
- {"ACGTACGTACGT", "6M2N6M2H", "4GATG4", true, "ACGTGANNTGACGT"},
- {"ACGTACGTACGT", "6M2N6M2H", "4GATG4", false, "ACGTGATGACGT"},
- };
- }
-
- @Test(dataProvider = "countInsertedAndDeletedBasesTestCases")
- public void testCountInsertedAndDeletedBases(final String cigarString, final int insertedBases, final int deletedBases) {
- final TextCigarCodec codec = new TextCigarCodec();
- final Cigar cigar = codec.decode(cigarString);
- Assert.assertEquals(SequenceUtil.countInsertedBases(cigar), insertedBases);
- Assert.assertEquals(SequenceUtil.countDeletedBases(cigar), deletedBases);
- }
-
- @DataProvider(name = "countInsertedAndDeletedBasesTestCases")
- public Object[][] countInsertedAndDeletedBasesTestCases() {
- return new Object[][] {
- {"2H2S32M", 0, 0},
- {"2H2S32M12I2M2I3M", 14, 0},
- {"32M2D10M", 0, 2},
- {"32M2D10M3D1M", 0, 5},
- {"2H2S32M12I2M3D1M2I3M2D1M", 14, 5}
- };
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/SortingCollectionTest.java b/src/tests/java/net/sf/samtools/util/SortingCollectionTest.java
deleted file mode 100644
index 64ae3d1..0000000
--- a/src/tests/java/net/sf/samtools/util/SortingCollectionTest.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Random;
-
-public class SortingCollectionTest {
- // Create a separate directory for files so it is possible to confirm that the directory is emptied
- private final File tmpDir = new File(System.getProperty("java.io.tmpdir") + "/" + System.getProperty("user.name"),
- "SortingCollectionTest");
- @BeforeTest void setup() {
- // Clear out any existing files if the directory exists
- if (tmpDir.exists()) {
- for (final File f : tmpDir.listFiles()) {
- f.delete();
- }
- }
- tmpDir.mkdirs();
- }
-
- @AfterTest void tearDown() {
- System.err.println("In SortingCollectionTest.tearDown. tmpDir: " + tmpDir);
- for (final File f : tmpDir.listFiles()) {
- f.delete();
- }
- tmpDir.delete();
- }
-
- private boolean tmpDirIsEmpty() {
- System.err.println("In SortingCollectionTest.tmpDirIsEmpty. tmpDir: " + tmpDir);
- return tmpDir.listFiles().length == 0;
- }
-
- @DataProvider(name = "test1")
- public Object[][] createTestData() {
- return new Object[][] {
- {"empty", 0, 100},
- {"less than threshold", 100, 200},
- {"greater than threshold", 550, 100},
- {"threshold multiple", 600, 100},
- {"threshold multiple plus one", 101, 100},
- {"exactly threshold", 100, 100},
- };
- }
-
- /**
- * Generate some strings, put into SortingCollection, confirm that the right number of
- * Strings come out, and in the right order.
- * @param numStringsToGenerate
- * @param maxRecordsInRam
- */
- @Test(dataProvider = "test1")
- public void testPositive(final String testName, final int numStringsToGenerate, final int maxRecordsInRam) {
- final String[] strings = new String[numStringsToGenerate];
- int numStringsGenerated = 0;
- final SortingCollection<String> sortingCollection = makeSortingCollection(maxRecordsInRam);
- for (final String s : new RandomStringGenerator(numStringsToGenerate)) {
- sortingCollection.add(s);
- strings[numStringsGenerated++] = s;
- }
- Arrays.sort(strings, new StringComparator());
-
- Assert.assertEquals(tmpDirIsEmpty(), numStringsToGenerate <= maxRecordsInRam);
- sortingCollection.setDestructiveIteration(false);
- assertIteratorEqualsList(strings, sortingCollection);
- assertIteratorEqualsList(strings, sortingCollection);
-
- sortingCollection.cleanup();
- Assert.assertEquals(tmpDir.list().length, 0);
- }
-
- private void assertIteratorEqualsList(final String[] strings, final SortingCollection<String> sortingCollection) {
- int i = 0;
- for (final String s : sortingCollection) {
- Assert.assertEquals(s, strings[i++]);
- }
- Assert.assertEquals(i, strings.length);
- }
-
- private SortingCollection<String> makeSortingCollection(final int maxRecordsInRam) {
- return SortingCollection.newInstance(String.class, new StringCodec(), new StringComparator(),
- maxRecordsInRam, tmpDir);
- }
-
- /**
- * Generate pseudo-random Strings for testing
- */
- static class RandomStringGenerator implements Iterable<String>, Iterator<String> {
- Random random = new Random(0);
- int numElementsToGenerate;
- int numElementsGenerated = 0;
-
- /**
- * @param numElementsToGenerate Iteration ends after this many have been generated.
- */
- RandomStringGenerator(final int numElementsToGenerate) {
- this.numElementsToGenerate = numElementsToGenerate;
- }
-
- public Iterator<String> iterator() {
- return this;
- }
-
- public boolean hasNext() {
- return numElementsGenerated < numElementsToGenerate;
- }
-
- public String next() {
- ++numElementsGenerated;
- return Integer.toString(random.nextInt());
- }
-
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
-
- static class StringComparator implements Comparator<String> {
-
- public int compare(final String s, final String s1) {
- return s.compareTo(s1);
- }
- }
-
- static class StringCodec implements SortingCollection.Codec<String> {
- ByteBuffer byteBuffer = ByteBuffer.allocate(4);
- OutputStream os;
- InputStream is;
-
- public SortingCollection.Codec<String> clone() {
- return new StringCodec();
- }
-
- /**
- * Where to write encoded output
- *
- * @param os
- */
- public void setOutputStream(final OutputStream os) {
- this.os = os;
- }
-
- /**
- * Where to read encoded input from
- *
- * @param is
- */
- public void setInputStream(final InputStream is) {
- this.is = is;
- }
-
- /**
- * Write object to file
- *
- * @param val what to write
- */
- public void encode(final String val) {
- try {
- byteBuffer.clear();
- byteBuffer.putInt(val.length());
- os.write(byteBuffer.array());
- os.write(val.getBytes());
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
-
- /**
- * Read the next record from the input stream and convert into a java object.
- *
- * @return null if no more records. Should throw exception if EOF is encountered in the middle of
- * a record.
- */
- public String decode() {
- try {
- byteBuffer.clear();
- int bytesRead = is.read(byteBuffer.array());
- if (bytesRead == -1) {
- return null;
- }
- if (bytesRead != 4) {
- throw new RuntimeException("Unexpected EOF in middle of record");
- }
- byteBuffer.limit(4);
- final int length = byteBuffer.getInt();
- final byte[] buf = new byte[length];
- bytesRead = is.read(buf);
- if (bytesRead != length) {
- throw new RuntimeException("Unexpected EOF in middle of record");
- }
- return new String(buf);
- } catch (IOException e) {
- throw new RuntimeIOException(e);
- }
- }
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/SortingLongCollectionTest.java b/src/tests/java/net/sf/samtools/util/SortingLongCollectionTest.java
deleted file mode 100644
index 7ccaa5c..0000000
--- a/src/tests/java/net/sf/samtools/util/SortingLongCollectionTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Random;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class SortingLongCollectionTest {
- // Create a separate directory for files so it is possible to confirm that the directory is emptied
- private final File tmpDir = new File(System.getProperty("java.io.tmpdir") + "/" + System.getProperty("user.name"),
- "SortingCollectionTest");
-
- @BeforeTest
- void setup() {
- // Clear out any existing files if the directory exists
- if (tmpDir.exists()) {
- for (final File f : tmpDir.listFiles()) {
- f.delete();
- }
- }
- tmpDir.mkdir();
- }
-
- @AfterTest
- void tearDown() {
- if (!tmpDir.exists()) {
- // I don't know why it wouldn't exist, but sometimes it doesn't, and it causes the unit test
- // to fail. AW 20-May-2009
- return;
- }
- for (final File f : tmpDir.listFiles()) {
- f.delete();
- }
- tmpDir.delete();
- }
-
- private boolean tmpDirIsEmpty() {
- return tmpDir.listFiles().length == 0;
- }
-
- @DataProvider(name = "test1")
- public Object[][] createTestData() {
- return new Object[][] {
- {"empty", 0, 100},
- {"less than threshold", 100, 200},
- {"greater than threshold", 550, 100},
- {"threshold multiple", 600, 100},
- {"threshold multiple plus one", 101, 100},
- {"exactly threshold", 100, 100},
- };
- }
-
- /**
- * Generate some values, put into SortingLongCollection, confirm that the right number of
- * values come out, and in the right order.
- * @param numValuesToGenerate
- * @param maxValuesInRam
- */
- @Test(dataProvider = "test1")
- public void testPositive(final String testName, final int numValuesToGenerate, final int maxValuesInRam) {
- final long[] values = new long[numValuesToGenerate];
- int numStringsGenerated = 0;
- final SortingLongCollection sortingCollection = new SortingLongCollection(maxValuesInRam, tmpDir);
- final Random valueGenerator = new Random(123);
- for (int i = 0; i < numValuesToGenerate; ++i) {
- final long value = valueGenerator.nextLong();
- sortingCollection.add(value);
- values[numStringsGenerated++] = value;
- }
- Arrays.sort(values);
-
- Assert.assertEquals(tmpDirIsEmpty(), numValuesToGenerate <= maxValuesInRam);
- assertIteratorEqualsList(values, sortingCollection);
-
- sortingCollection.cleanup();
- Assert.assertTrue(tmpDirIsEmpty());
- }
-
- private void assertIteratorEqualsList(final long[] values, final SortingLongCollection sortingCollection) {
- int i = 0;
- sortingCollection.doneAddingStartIteration();
- while (sortingCollection.hasNext()) {
- Assert.assertEquals(sortingCollection.next(), values[i++], "values failed. i: " + (i-1) + "; values[i]" + values[i-1]);
- }
- Assert.assertEquals(i, values.length);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/StringLineReaderTest.java b/src/tests/java/net/sf/samtools/util/StringLineReaderTest.java
deleted file mode 100644
index f4db1d6..0000000
--- a/src/tests/java/net/sf/samtools/util/StringLineReaderTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-public class StringLineReaderTest {
-
- private static final String[] TERMINATORS = {"\r", "\n", "\r\n"};
- private static final boolean[] LAST_LINE_TERMINATED = {false, true};
-
- enum EmptyLineState {
- FIRST_LINE, LAST_LINE, MIDDLE_LINE, COMPLETELY_EMPTY
- }
-
- /**
- * Test a bunch of combinations instead of writing a method for each.
- */
- @Test
- public void testBasic() {
- for (final String terminator : TERMINATORS) {
- for (final boolean lastLineTerminated : LAST_LINE_TERMINATED) {
- for (final EmptyLineState emptyLineState : EmptyLineState.values()) {
- if (emptyLineState == EmptyLineState.COMPLETELY_EMPTY) {
- emptyTestHelper(terminator, lastLineTerminated);
- } else {
- testHelper(terminator, lastLineTerminated, emptyLineState);
- }
- }
- }
- }
- }
-
- /**
- * various test cases where there is no input, except perhaps a line terminator
- * @param terminator what the terminator should be in the input
- * @param lastLineTerminated does the input have a terminator
- */
- private void emptyTestHelper(final String terminator, final boolean lastLineTerminated) {
- final String input;
- if (lastLineTerminated) {
- input = terminator;
- } else {
- input = "";
- }
- final StringLineReader slr = new StringLineReader(input);
- final String output = slr.readLine();
- if (lastLineTerminated) {
- Assert.assertEquals(output, "");
- }
- Assert.assertNull(slr.readLine());
- }
-
- /**
- * Test a variety of test cases in which there is more than one line.
- * @param terminator to use in the input
- * @param lastLineTerminated should the input end with a terminator
- * @param emptyLineState where in the input should an empty line be.
- */
- private void testHelper(final String terminator, final boolean lastLineTerminated, final EmptyLineState emptyLineState) {
- final String[] lines = new String[3];
- if (emptyLineState == EmptyLineState.FIRST_LINE) {
- lines[0] = "";
- lines[1] = "Hi, Mom!";
- lines[2] = "Hi, Dad?";
- } else if (emptyLineState == EmptyLineState.LAST_LINE) {
- lines[0] = "Hi, Dad?";
- lines[1] = "Hi, Mom!";
- lines[2] = "";
- } else if (emptyLineState == EmptyLineState.MIDDLE_LINE) {
- lines[0] = "Hi, Dad?";
- lines[1] = "";
- lines[2] = "Hi, Mom!";
- }
- String input = StringUtil.join(terminator, lines);
- if (lastLineTerminated) {
- input = input.concat(terminator);
- }
- final StringLineReader slr = new StringLineReader(input);
- for (int i = 0; i < lines.length - 1; ++i) {
- final String s = slr.readLine();
- String expected = lines[i];
- Assert.assertEquals(s, expected);
- }
-
- // Last line may need to be handled specially
- String s = slr.readLine();
- if (!lastLineTerminated && emptyLineState == EmptyLineState.LAST_LINE) {
- Assert.assertNull(s);
- } else {
- String expected = lines[lines.length - 1];
- Assert.assertEquals(s, expected);
- }
- s = slr.readLine();
- Assert.assertNull(s);
- }
-}
diff --git a/src/tests/java/net/sf/samtools/util/StringUtilTest.java b/src/tests/java/net/sf/samtools/util/StringUtilTest.java
deleted file mode 100644
index dc37f6f..0000000
--- a/src/tests/java/net/sf/samtools/util/StringUtilTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2009 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package net.sf.samtools.util;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.DataProvider;
-import org.testng.Assert;
-
-/**
- * @author alecw at broadinstitute.org
- */
-public class StringUtilTest {
- @Test(dataProvider = "provider")
- public void testSplit(final String input, final String[] expectedResult, final boolean concatenateExcess) {
- String[] ret = new String[expectedResult.length];
- int tokensExpected;
- for (tokensExpected = 0; tokensExpected < expectedResult.length && expectedResult[tokensExpected] != null;
- ++tokensExpected) {
- }
- final int tokensFound;
- if (concatenateExcess) {
- tokensFound = StringUtil.splitConcatenateExcessTokens(input, ret, ':');
- } else {
- tokensFound = StringUtil.split(input, ret, ':');
- }
- Assert.assertEquals(tokensFound, tokensExpected);
- Assert.assertEquals(ret, expectedResult);
- }
-
- @DataProvider(name="provider")
- public Object[][] splitScenarios() {
- return new Object[][] {
- {"A:BB:C", new String[]{"A", "BB", "C"}, false},
- {"A:BB:C", new String[]{"A", "BB", "C"}, true},
- {"A:BB", new String[]{"A", "BB", null}, false},
- {"A:BB", new String[]{"A", "BB", null}, true},
- {"A:BB:", new String[]{"A", "BB", null}, false},
- {"A:BB:", new String[]{"A", "BB", null}, true},
- {"A:BB:C:DDD", new String[]{"A", "BB", "C"}, false},
- {"A:BB:C:DDD", new String[]{"A", "BB", "C:DDD"}, true},
- {"A:", new String[]{"A", null, null}, false},
- {"A:", new String[]{"A", null, null}, true},
- {"A", new String[]{"A", null, null}, false},
- {"A", new String[]{"A", null, null}, true},
- {"A:BB:C", new String[]{"A", "BB", "C"}, false},
- {"A:BB:C:", new String[]{"A", "BB", "C:"}, true},
- };
- }
-}
diff --git a/src/tests/java/org/broad/tribble/AbstractFeatureReaderTest.java b/src/tests/java/org/broad/tribble/AbstractFeatureReaderTest.java
deleted file mode 100644
index 0f409f6..0000000
--- a/src/tests/java/org/broad/tribble/AbstractFeatureReaderTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.broad.tribble;
-
-import org.broad.tribble.bed.BEDCodec;
-import org.broad.tribble.bed.BEDFeature;
-import org.broad.tribble.readers.LineIterator;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.vcf.VCFCodec;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-
-import static org.testng.Assert.*;
-
-/**
- * @author jacob
- * @date 2013-Apr-10
- */
-public class AbstractFeatureReaderTest {
-
- final static String HTTP_INDEXED_VCF_PATH = "http://www.broadinstitute.org/~picard/testdata/ex2.vcf";
- final static String LOCAL_MIRROR_HTTP_INDEXED_VCF_PATH = VariantBaseTest.variantTestDataRoot + "ex2.vcf";
-
- /**
- * Asserts readability and correctness of VCF over HTTP. The VCF is indexed and requires and index.
- */
- @Test
- public void testVcfOverHTTP() throws IOException {
- final VCFCodec codec = new VCFCodec();
- final AbstractFeatureReader<VariantContext, LineIterator> featureReaderHttp =
- AbstractFeatureReader.getFeatureReader(HTTP_INDEXED_VCF_PATH, codec, true); // Require an index to
- final AbstractFeatureReader<VariantContext, LineIterator> featureReaderLocal =
- AbstractFeatureReader.getFeatureReader(LOCAL_MIRROR_HTTP_INDEXED_VCF_PATH, codec, false);
- final CloseableTribbleIterator<VariantContext> localIterator = featureReaderLocal.iterator();
- for (final Feature feat : featureReaderHttp.iterator()) {
- assertEquals(feat.toString(), localIterator.next().toString());
- }
- assertFalse(localIterator.hasNext());
- }
-
- @Test
- public void testLoadBEDFTP() throws Exception {
- final String path = "ftp://ftp.broadinstitute.org/distribution/igv/TEST/cpgIslands with spaces.hg18.bed";
- final BEDCodec codec = new BEDCodec();
- final AbstractFeatureReader<BEDFeature, LineIterator> bfs = AbstractFeatureReader.getFeatureReader(path, codec, false);
- for (final Feature feat : bfs.iterator()) {
- assertNotNull(feat);
- }
- }
-}
diff --git a/src/tests/java/org/broad/tribble/BinaryFeaturesTest.java b/src/tests/java/org/broad/tribble/BinaryFeaturesTest.java
deleted file mode 100644
index a0235f7..0000000
--- a/src/tests/java/org/broad/tribble/BinaryFeaturesTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.broad.tribble;
-
-import org.broad.tribble.bed.BEDCodec;
-import org.broad.tribble.example.ExampleBinaryCodec;
-import org.broad.tribble.readers.LineIterator;
-import org.broad.tribble.readers.LineReader;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-
-
-public class BinaryFeaturesTest {
- @DataProvider(name = "BinaryFeatureSources")
- public Object[][] createData1() {
- return new Object[][] {
- { new File(TestUtils.DATA_DIR + "test.bed"), new BEDCodec() },
- { new File(TestUtils.DATA_DIR + "bed/Unigene.sample.bed"), new BEDCodec() },
- { new File(TestUtils.DATA_DIR + "bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed"), new BEDCodec() },
- };
- }
-
- @Test(enabled = true, dataProvider = "BinaryFeatureSources")
- public void testBinaryCodec(final File source, final FeatureCodec<Feature, LineIterator> codec) throws IOException {
- final File tmpFile = File.createTempFile("testBinaryCodec", ".binary.bed");
- ExampleBinaryCodec.convertToBinaryTest(source, tmpFile, codec);
- tmpFile.deleteOnExit();
-
- final FeatureReader<Feature> originalReader = AbstractFeatureReader.getFeatureReader(source.getAbsolutePath(), codec, false);
- final FeatureReader<Feature> binaryReader = AbstractFeatureReader.getFeatureReader(tmpFile.getAbsolutePath(), new ExampleBinaryCodec(), false);
-
- // make sure the header is what we expect
- final List<String> header = (List<String>) binaryReader.getHeader();
- Assert.assertEquals(header.size(), 1, "We expect exactly one header line");
- Assert.assertEquals(header.get(0), ExampleBinaryCodec.HEADER_LINE, "Failed to read binary header line");
-
- final Iterator<Feature> oit = originalReader.iterator();
- final Iterator<Feature> bit = binaryReader.iterator();
- while ( oit.hasNext() ) {
- final Feature of = oit.next();
-
- Assert.assertTrue(bit.hasNext(), "Original iterator has items, but there's no items left in binary iterator");
- final Feature bf = bit.next();
-
- Assert.assertEquals(bf.getChr(), of.getChr(), "Chr not equal between original and binary encoding");
- Assert.assertEquals(bf.getStart(), of.getStart(), "Start not equal between original and binary encoding");
- Assert.assertEquals(bf.getEnd(), of.getEnd(), "End not equal between original and binary encoding");
- }
- Assert.assertTrue(! bit.hasNext(), "Original iterator is done, but there's still some data in binary iterator");
-
- originalReader.close();
- binaryReader.close();
- }
-}
diff --git a/src/tests/java/org/broad/tribble/FeatureReaderTest.java b/src/tests/java/org/broad/tribble/FeatureReaderTest.java
deleted file mode 100644
index 44b5964..0000000
--- a/src/tests/java/org/broad/tribble/FeatureReaderTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.broad.tribble;
-
-import net.sf.samtools.seekablestream.SeekableFileStream;
-import net.sf.samtools.util.CloserUtil;
-import org.broad.tribble.bed.BEDCodec;
-import org.broad.tribble.example.ExampleBinaryCodec;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import net.sf.samtools.util.LocationAware;
-import org.broad.tribble.util.ParsingUtils;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-
-public class FeatureReaderTest {
- private final static File asciiBedFile = new File(TestUtils.DATA_DIR + "test.bed");
- private final static File binaryBedFile = new File(TestUtils.OUTPUT_DIR + "test.binary.bed");
- private final static File tabixBedFile = new File(TestUtils.DATA_DIR + "test.tabix.bed.gz");
-
- @BeforeClass
- public void setup() throws IOException {
- ExampleBinaryCodec.convertToBinaryTest(asciiBedFile, binaryBedFile, new BEDCodec());
- binaryBedFile.deleteOnExit();
- }
-
- @AfterClass
- public void tearDown() throws Exception {
- binaryBedFile.delete();
- }
-
- @DataProvider(name = "indexProvider")
- public Object[][] createData1() {
- return new Object[][]{
- {asciiBedFile, IndexFactory.IndexType.LINEAR, new BEDCodec()},
- {asciiBedFile, IndexFactory.IndexType.INTERVAL_TREE, new BEDCodec()},
- {tabixBedFile, IndexFactory.IndexType.TABIX, new BEDCodec()},
- {binaryBedFile, IndexFactory.IndexType.LINEAR, new ExampleBinaryCodec()},
- {binaryBedFile, IndexFactory.IndexType.INTERVAL_TREE, new ExampleBinaryCodec()},
- };
- }
-
- @Test(dataProvider = "indexProvider")
- public void testBedQuery(final File featureFile, final IndexFactory.IndexType indexType, final FeatureCodec<Feature, LocationAware> codec) throws IOException {
- final AbstractFeatureReader<Feature, ?> reader = getReader(featureFile, indexType, codec);
-
- // Query
- testQuery(reader, "chr1", 1, 500, 3);
- testQuery(reader, "chr1", 1, 200, 1);
- testQuery(reader, "chr1", 1, 201, 2);
- testQuery(reader, "chr1", 500, 600, 0);
- testQuery(reader, "chr1", 100000, 100010, 1);
- testQuery(reader, "chr1", 100000, 100000, 0);
- testQuery(reader, "chr1", 100001, 100001, 1);
- testQuery(reader, "chr1", 100005, 100006, 1);
- testQuery(reader, "chr1", 100009, 100011, 1);
- testQuery(reader, "chr1", 100010, 100010, 1);
- testQuery(reader, "chr1", 100011, 100011, 0);
- testQuery(reader, "chr2", 1, 100, 2);
- testQuery(reader, "chr2", 1, 10, 1);
- testQuery(reader, "chr2", 15, 16, 0);
- testQuery(reader, "chr3", 1, 201, 0);
-
- // Close reader
- reader.close();
- }
-
- @Test(dataProvider = "indexProvider")
- public void testLargeNumberOfQueries(final File featureFile, final IndexFactory.IndexType indexType, final FeatureCodec<Feature, LocationAware> codec) throws IOException {
- final AbstractFeatureReader<Feature, LocationAware> reader = getReader(featureFile, indexType, codec);
- for (int i = 0; i < 2000; i++) {
- for (final int start : Arrays.asList(500, 200, 201, 600, 100000)) {
- for (final String chr : Arrays.asList("chr1", "chr2", "chr3")) {
- CloseableTribbleIterator<Feature> iter = null;
- try {
- iter = reader.query(chr, start, start + 1);
- Assert.assertNotNull(iter, "Failed to create non-null iterator");
- } finally {
- CloserUtil.close(iter);
- }
- }
- }
- }
-
- // Close reader
- reader.close();
- }
-
- private void testQuery(final AbstractFeatureReader<Feature, ?> reader, final String chr, final int start, final int stop, final int expectedNumRecords) throws IOException {
- final Iterator<Feature> iter = reader.query(chr, start, stop);
- int count = 0;
- while (iter.hasNext()) {
- final Feature f = iter.next();
- Assert.assertTrue(f.getEnd() >= start && f.getStart() <= stop);
- count++;
- }
- Assert.assertEquals(count, expectedNumRecords);
- }
-
- @Test(dataProvider = "indexProvider")
- public void testBedNames(final File featureFile, final IndexFactory.IndexType indexType, final FeatureCodec<Feature, LocationAware> codec) throws IOException {
- final AbstractFeatureReader<Feature, ?> reader = getReader(featureFile, indexType, codec);
- final String[] expectedSequences = {"chr1", "chr2"};
-
- final List<String> seqNames = reader.getSequenceNames();
- Assert.assertEquals(seqNames.size(), expectedSequences.length,
- "Expected sequences " + ParsingUtils.join(",", expectedSequences) + " but saw " + ParsingUtils.join(",", seqNames));
-
- for (final String s : expectedSequences) {
- Assert.assertTrue(seqNames.contains(s));
- }
- }
-
- private static <FEATURE extends Feature, SOURCE extends LocationAware> AbstractFeatureReader<FEATURE, SOURCE> getReader(final File featureFile,
- final IndexFactory.IndexType indexType,
- final FeatureCodec<FEATURE, SOURCE> codec)
- throws IOException {
- if (indexType.canCreate()) {
- // for types we can create make a new index each time
- final File idxFile = Tribble.indexFile(featureFile);
-
- // delete an already existing index
- if (idxFile.exists()) {
- idxFile.delete();
- }
- final Index idx = IndexFactory.createIndex(featureFile, codec, indexType);
- IndexFactory.writeIndex(idx, idxFile);
-
- idxFile.deleteOnExit();
- } // else let's just hope the index exists, and if so use it
-
- return AbstractFeatureReader.getFeatureReader(featureFile.getAbsolutePath(), codec);
- }
-
- @Test
- public void testReadingBeyondIntSizedBlock() throws IOException {
- final Block block = new Block(0, ((long) Integer.MAX_VALUE) * 2);
- final SeekableFileStream stream = new SeekableFileStream(new File("/dev/zero"));
- final TribbleIndexedFeatureReader.BlockStreamWrapper blockStreamWrapper = new TribbleIndexedFeatureReader.BlockStreamWrapper(stream, block);
- final int chunkSize = 100000; // 10 Mb
- final int chunksToRead = (int) Math.ceil(block.getSize() / (chunkSize * 1.0));
-
- final byte[] bytes = new byte[chunkSize];
- long totalRead = 0;
- for (int chunk = 0; chunk < chunksToRead; chunk++) {
- //System.out.println("Reading chunk " + chunk + " of " + chunkSize + " total read " + totalRead);
- final int nRead = blockStreamWrapper.read(bytes);
- Assert.assertTrue(nRead != -1, "Prematurely got EOF after " + totalRead + " bytes");
- totalRead += nRead;
- }
-
- // /dev/zero doesn't advance file stream on Linux, so reading never terminates
- // Therefore, we only require a minimum number of bytes
- Assert.assertTrue(totalRead >= block.getSize(), "Failed to read all bytes from a block with size > 2B = " + block.getSize());
-
- }
-}
-
diff --git a/src/tests/java/org/broad/tribble/TestUtils.java b/src/tests/java/org/broad/tribble/TestUtils.java
deleted file mode 100644
index ba7b49c..0000000
--- a/src/tests/java/org/broad/tribble/TestUtils.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/** This software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.broad.tribble;
-
-
-/**
- * User: jacob
- * Date: 2012-Dec-13
- */
-public class TestUtils {
- public static String DATA_DIR = "testdata/tribble/";
- public static String OUTPUT_DIR = DATA_DIR + "tmp/";
-}
diff --git a/src/tests/java/org/broad/tribble/bed/BEDCodecTest.java b/src/tests/java/org/broad/tribble/bed/BEDCodecTest.java
deleted file mode 100644
index 9043b91..0000000
--- a/src/tests/java/org/broad/tribble/bed/BEDCodecTest.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2010, The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-package org.broad.tribble.bed;
-
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.Feature;
-import org.broad.tribble.TestUtils;
-import org.broad.tribble.annotation.Strand;
-import org.broad.tribble.bed.FullBEDFeature.Exon;
-import org.broad.tribble.index.IndexFactory;
-import org.broad.tribble.index.linear.LinearIndex;
-import org.broad.tribble.util.LittleEndianOutputStream;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.awt.*;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.List;
-
-public class BEDCodecTest {
-
- @Test
- public void testSimpleDecode() {
- BEDCodec codec = new BEDCodec();
-
- BEDFeature feature;
-
- feature = codec.decode("chr1 1");
- Assert.assertEquals(feature.getChr(), "chr1");
- Assert.assertEquals(feature.getStart(), 2);
- Assert.assertEquals(feature.getEnd(), 2);
-
- feature = codec.decode("chr1 1 2");
- Assert.assertEquals(feature.getChr(), "chr1");
- Assert.assertEquals(feature.getStart(), 2);
- Assert.assertEquals(feature.getEnd(), 2);
-
- feature = codec.decode("chr1 1 3");
- Assert.assertEquals(feature.getChr(), "chr1");
- Assert.assertEquals(feature.getStart(), 2);
- Assert.assertEquals(feature.getEnd(), 3);
- }
-
- @Test
- public void testFullDecode() {
- BEDCodec codec = new BEDCodec();
-
- FullBEDFeature feature;
- List<Exon> exons;
-
- // Borrowed samples from Example: on http://genome.ucsc.edu/FAQ/FAQformat#format1
-
- feature = (FullBEDFeature) codec.decode("chr22 1000 5000 cloneA 960 + 1000 5000 0 2 567,488, 0,3512");
- Assert.assertEquals(feature.getChr(), "chr22");
- Assert.assertEquals(feature.getStart(), 1001);
- Assert.assertEquals(feature.getEnd(), 5000);
- Assert.assertEquals(feature.getName(), "cloneA");
- Assert.assertEquals(feature.getScore(), 960f);
- Assert.assertEquals(feature.getStrand(), Strand.POSITIVE);
- Assert.assertEquals(feature.getColor(), new Color(0));
-
- exons = feature.getExons();
- Assert.assertEquals(exons.size(), 2);
-
- Assert.assertEquals(exons.get(0).getNumber(), 1);
- Assert.assertEquals(exons.get(0).start, 1001);
- Assert.assertEquals(exons.get(0).end, 1567);
- Assert.assertEquals(exons.get(0).getCdStart(), 1001);
- Assert.assertEquals(exons.get(0).getCdEnd(), 1567);
- Assert.assertEquals(exons.get(0).getCodingLength(), 567);
-
- Assert.assertEquals(exons.get(1).getNumber(), 2);
- Assert.assertEquals(exons.get(1).start, 4513);
- Assert.assertEquals(exons.get(1).end, 5000);
- Assert.assertEquals(exons.get(1).getCdStart(), 4513);
- Assert.assertEquals(exons.get(1).getCdEnd(), 5000);
- Assert.assertEquals(exons.get(1).getCodingLength(), 488);
-
- feature = (FullBEDFeature) codec.decode("chr22 2000 6000 cloneB 900 - 2000 6000 0 2 433,399, 0,3601");
- Assert.assertEquals(feature.getChr(), "chr22");
- Assert.assertEquals(feature.getStart(), 2001);
- Assert.assertEquals(feature.getEnd(), 6000);
- Assert.assertEquals(feature.getName(), "cloneB");
- Assert.assertEquals(feature.getScore(), 900f);
- Assert.assertEquals(feature.getStrand(), Strand.NEGATIVE);
- Assert.assertEquals(feature.getColor(), new Color(0));
-
- exons = feature.getExons();
- Assert.assertEquals(exons.size(), 2);
-
- Assert.assertEquals(exons.get(0).getNumber(), 2);
- Assert.assertEquals(exons.get(0).start, 2001);
- Assert.assertEquals(exons.get(0).end, 2433);
- Assert.assertEquals(exons.get(0).getCdStart(), 2001);
- Assert.assertEquals(exons.get(0).getCdEnd(), 2433);
- Assert.assertEquals(exons.get(0).getCodingLength(), 433);
-
- Assert.assertEquals(exons.get(1).getNumber(), 1);
- Assert.assertEquals(exons.get(1).start, 5602);
- Assert.assertEquals(exons.get(1).end, 6000);
- Assert.assertEquals(exons.get(1).getCdStart(), 5602);
- Assert.assertEquals(exons.get(1).getCdEnd(), 6000);
- Assert.assertEquals(exons.get(1).getCodingLength(), 399);
- }
-
- @Test
- public void testDecodeBEDFile_good() throws Exception {
- String filepath = TestUtils.DATA_DIR + "bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed";
- int expected_lines = 34;
- /*
- Line 0:
- 1 25592413 25657872
- Line 3:
- 1 152555536 152587611
- Line 28:
- 14 73996607 74025282
- Remember tribble increments numbers by 1
- */
-
- BEDCodec codec = new BEDCodec();
-
- AbstractFeatureReader reader = AbstractFeatureReader.getFeatureReader(filepath, codec, false);
-
- Iterable<Feature> iter = reader.iterator();
- int count = 0;
- for (Feature feat : iter) {
- Assert.assertTrue(feat.getChr().length() > 0);
- Assert.assertTrue(feat.getEnd() >= feat.getStart());
-
- if (count == 0) {
- Assert.assertEquals("1", feat.getChr());
- Assert.assertEquals(25592413 + 1, feat.getStart());
- Assert.assertEquals(25657872, feat.getEnd());
- }
-
- if (count == 3) {
- Assert.assertEquals("1", feat.getChr());
- Assert.assertEquals(152555536 + 1, feat.getStart());
- Assert.assertEquals(152587611, feat.getEnd());
- }
-
- if (count == 28) {
- Assert.assertEquals("14", feat.getChr());
- Assert.assertEquals(73996607 + 1, feat.getStart());
- Assert.assertEquals(74025282, feat.getEnd());
- }
-
- count += 1;
- }
-
- Assert.assertEquals(expected_lines, count);
-
- reader.close();
-
- }
-
- /**
- * Test reading a BED file which is malformed.
- *
- * @throws Exception
- */
- @Test(expectedExceptions = RuntimeException.class)
- public void testDecodeBEDFile_bad() throws Exception {
- //This file has an extra tab in the second to last line
- String filepath = TestUtils.DATA_DIR + "bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed";
- //The iterator implementation next() actually performs a get / read_next. The bad line is number 32,
- //so we actually will only get 31 lines before reading that line.
- int expected_count = 31;
- BEDCodec codec = new BEDCodec();
-
- AbstractFeatureReader reader = AbstractFeatureReader.getFeatureReader(filepath, codec, false);
-
- Iterable<Feature> iter = reader.iterator();
- int count = 0;
- for (Feature feat : iter) {
- count += 1;
- }
- reader.close();
- }
-
- private void createIndex(File testFile, File idxFile) throws IOException {
- // Create an index if missing
- if (idxFile.exists()) {
- idxFile.delete();
- }
- LinearIndex idx = (LinearIndex) IndexFactory.createLinearIndex(testFile, new BEDCodec());
-
- LittleEndianOutputStream stream = null;
- try {
- stream = new LittleEndianOutputStream(new BufferedOutputStream(new FileOutputStream(idxFile)));
- idx.write(stream);
- } finally {
- if (stream != null) {
- stream.close();
- }
- }
-
- }
-}
diff --git a/src/tests/java/org/broad/tribble/dbsnp/OldDbSNPCodecTest.java b/src/tests/java/org/broad/tribble/dbsnp/OldDbSNPCodecTest.java
deleted file mode 100644
index a2d189e..0000000
--- a/src/tests/java/org/broad/tribble/dbsnp/OldDbSNPCodecTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.broad.tribble.dbsnp;
-
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.FeatureReader;
-import org.broad.tribble.TestUtils;
-import org.broad.tribble.annotation.Strand;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-
-/**
- * @author aaron
- * <p/>
- * Class OldDbSNPCodecTest
- * <p/>
- * tests out the basics of a dbsnp feature
- */
-public class OldDbSNPCodecTest {
-
- public static final File testFile = new File(TestUtils.DATA_DIR + "basicDbSNP.dbsnp");
- public static Index index;
- private FeatureReader<OldDbSNPFeature> reader;
-
- // setup a new source before each class
- @BeforeTest
- public void beforeTest() {
- index = IndexFactory.createLinearIndex(testFile, new OldDbSNPCodec());
- reader = AbstractFeatureReader.getFeatureReader(testFile.getAbsolutePath(), new OldDbSNPCodec(), index);
-
- }
-
- @Test
- public void testReadAllLines() {
- // Query
- try {
- Iterator<OldDbSNPFeature> iter = reader.query("1", 0, 35000000);
- int count = 0;
- while (iter.hasNext()) {
- OldDbSNPFeature feat = iter.next();
- count++;
- }
- Assert.assertEquals(count, 42);
- } catch (IOException e) {
- Assert.fail("failed to generate iterator from feature source");
- }
- }
-
- @Test
- public void testReadAllLinesAlternateQueryString1() {
- // Query
- try {
- Iterator<OldDbSNPFeature> iter = reader.query("1", 433, 1937);
- int count = 0;
- while (iter.hasNext()) {
- OldDbSNPFeature feat = iter.next();
- count++;
- }
- Assert.assertEquals(count, 41);
- } catch (IOException e) {
- Assert.fail("failed to generate iterator from feature source");
- }
- }
-
- @Test
- public void testReadAllLinesAlternateQueryString2() {
- // Query
- try {
- Iterator<OldDbSNPFeature> iter = reader.query("1", 1936, 1937);
- int count = 0;
- while (iter.hasNext()) {
- OldDbSNPFeature feat = iter.next();
- count++;
- }
- Assert.assertEquals(count, 1);
- } catch (IOException e) {
- Assert.fail("failed to generate iterator from feature source");
- }
- }
-
- @Test
- public void testReturnedDBSNPEntry() {
- // Query
- try {
- Iterator<OldDbSNPFeature> iter = reader.query("1", 492, 492);
- if (!iter.hasNext()) Assert.fail("expected at least one entry");
-
- // check all the fields from the file
- OldDbSNPFeature feat = iter.next();
- Assert.assertTrue(feat.getChr().equals("1"));
- Assert.assertEquals(feat.getStart(), 492);
- Assert.assertEquals(feat.getEnd(), 492);
- Assert.assertTrue(feat.getRsID().equals("rs55998931"));
- Assert.assertEquals(feat.getScore(), 0);
- Assert.assertEquals(feat.getStrand(), Strand.POSITIVE);
- Assert.assertEquals(feat.getNCBIRefBase(), "C");
- Assert.assertEquals(feat.getUCSCRefBase(), "C");
- Assert.assertEquals(2, feat.getObserved().length);
- Assert.assertTrue("C".equals(feat.getObserved()[0]));
- Assert.assertTrue("T".equals(feat.getObserved()[1]));
- Assert.assertTrue("genomic".equals(feat.getMolType()));
- Assert.assertTrue("single".equals(feat.getVariantType()));
- Assert.assertTrue("unknown".equals(feat.getValidationStatus()));
- Assert.assertEquals(feat.getAvHet(), 0.0, 0.0001);
- Assert.assertEquals(feat.getAvHetSE(), 0.0, 0.0001);
- Assert.assertTrue("unknown".equals(feat.getFunction()));
- Assert.assertTrue("exact".equals(feat.getLocationType()));
- Assert.assertEquals(feat.getWeight(), 1);
-
-
- } catch (IOException e) {
- Assert.fail("failed to generate iterator from feature source");
- }
- }
-}
diff --git a/src/tests/java/org/broad/tribble/gelitext/GeliTextTest.java b/src/tests/java/org/broad/tribble/gelitext/GeliTextTest.java
deleted file mode 100644
index 57effe5..0000000
--- a/src/tests/java/org/broad/tribble/gelitext/GeliTextTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.broad.tribble.gelitext;
-
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.FeatureReader;
-import org.broad.tribble.TestUtils;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-
-/**
- * @author aaron
- * <p/>
- * Class GeliTextTest
- * <p/>
- * test out the geli text source codec and feature
- */
-public class GeliTextTest {
- public static final File testFile = new File(TestUtils.DATA_DIR + "testGeliText.txt");
- public static Index index;
- private FeatureReader<GeliTextFeature> source;
-
- // setup a new source before each class
-
- @BeforeSuite
- public void beforeTest() {
- index = IndexFactory.createLinearIndex(testFile, new GeliTextCodec());
- source = AbstractFeatureReader.getFeatureReader(testFile.getAbsolutePath(), new GeliTextCodec(), index);
- }
-
- @Test
- public void testReadAllLines() {
- // Query
- try {
- Iterator<GeliTextFeature> iter = source.query("22", 14438070, 14592250);
- int count = 0;
- while (iter.hasNext()) {
- GeliTextFeature feat = iter.next();
- count++;
- }
- Assert.assertEquals(count, 50);
- } catch (IOException e) {
- Assert.fail("failed to generate iterator from feature source");
- }
- }
-
- @Test
- public void testGetSubRegion() {
- // Query
- try {
- Iterator<GeliTextFeature> iter = source.query("22", 14438070, 14539060); // should be the first 41 records
- int count = 0;
- while (iter.hasNext()) {
- GeliTextFeature feat = iter.next();
- count++;
- }
- Assert.assertEquals(count, 41);
- } catch (IOException e) {
- Assert.fail("failed to generate iterator from feature source");
- }
- }
-
- @Test
- public void testFirstRecord() {
- // Query
- try {
- Iterator<GeliTextFeature> iter = source.query("22", 14438070, 14592250);
- int count = 0;
-
- GeliTextFeature feat = iter.next();
- // check the first records contents
- // 22 14438070 A 0 0 GG 33.2618 33.2618 0 0 0 0 0 0 0 33.2618 0 0
- Assert.assertTrue("22".equals(feat.getChr()));
- Assert.assertEquals(feat.getStart(), 14438070);
- Assert.assertEquals('A', feat.getRefBase());
- Assert.assertEquals(feat.getDepthOfCoverage(), 0.0, 0.0001);
- Assert.assertEquals(feat.getMaximumMappingQual(), 0.0, 0.0001);
- Assert.assertTrue(DiploidGenotype.GG.equals(feat.getGenotype()));
- Assert.assertEquals(feat.getDepthOfCoverage(), 0.0, 0.0001);
- Assert.assertEquals(feat.getLODBestToReference(), 33.2618, 0.0001);
- Assert.assertEquals(feat.getLODBestToNext(), 33.2618, 0.0001);
- for (int x = 0; x < feat.getLikelihoods().length; x++) {
- if (x == DiploidGenotype.GG.ordinal())
- Assert.assertEquals(feat.getLikelihoods()[x], 33.2618, 0.0001);
- else
- Assert.assertEquals(feat.getLikelihoods()[x], 0, 0.0001);
- }
-
- } catch (IOException e) {
- Assert.fail("failed to generate iterator from feature source");
- }
- }
-}
diff --git a/src/tests/java/org/broad/tribble/index/IndexFactoryTest.java b/src/tests/java/org/broad/tribble/index/IndexFactoryTest.java
deleted file mode 100644
index 5e81282..0000000
--- a/src/tests/java/org/broad/tribble/index/IndexFactoryTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2013 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index;
-
-import org.broad.tribble.TestUtils;
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.bed.BEDCodec;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * User: jacob
- * Date: 2012-Aug-23
- */
-public class IndexFactoryTest {
-
- final File sortedBedFile = new File(TestUtils.DATA_DIR + "bed/Unigene.sample.bed");
- final File unsortedBedFile = new File(TestUtils.DATA_DIR + "bed/unsorted.bed");
- final File discontinuousFile = new File(TestUtils.DATA_DIR + "bed/disconcontigs.bed");
- final BEDCodec bedCodec = new BEDCodec();
-
- @Test
- public void testCreateLinearIndex() throws Exception {
- Index index = IndexFactory.createLinearIndex(sortedBedFile, bedCodec);
- String chr = "chr2";
-
- Assert.assertTrue(index.getSequenceNames().contains(chr));
- Assert.assertTrue(index.containsChromosome(chr));
- Assert.assertEquals(1, index.getSequenceNames().size());
- List<Block> blocks = index.getBlocks(chr, 1, 50);
- Assert.assertEquals(1, blocks.size());
-
- Block block = blocks.get(0);
- Assert.assertEquals(78, block.getSize());
- }
-
- @Test(expectedExceptions = TribbleException.MalformedFeatureFile.class, dataProvider = "indexFactoryProvider")
- public void testCreateIndexUnsorted(IndexFactory.IndexType type) throws Exception{
- Index index = IndexFactory.createIndex(unsortedBedFile, bedCodec, type);
- }
-
- @Test(expectedExceptions = TribbleException.MalformedFeatureFile.class, dataProvider = "indexFactoryProvider")
- public void testCreateIndexDiscontinuousContigs(IndexFactory.IndexType type) throws Exception{
- Index index = IndexFactory.createIndex(discontinuousFile, bedCodec, type);
- }
-
- @DataProvider(name = "indexFactoryProvider")
- public Object[][] getIndexFactoryTypes(){
- return new Object[][] {
- new Object[] { IndexFactory.IndexType.LINEAR },
- new Object[] { IndexFactory.IndexType.INTERVAL_TREE }
- };
- }
-
-}
diff --git a/src/tests/java/org/broad/tribble/index/IndexTest.java b/src/tests/java/org/broad/tribble/index/IndexTest.java
deleted file mode 100644
index 3ebf232..0000000
--- a/src/tests/java/org/broad/tribble/index/IndexTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.broad.tribble.index;
-
-import org.broad.tribble.TestUtils;
-import org.broad.tribble.index.linear.LinearIndex;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class IndexTest {
- private final static String CHR = "1";
- private final static File MassiveIndexFile = new File(TestUtils.DATA_DIR + "Tb.vcf.idx");
-
- @DataProvider(name = "StartProvider")
- public Object[][] makeStartProvider() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
-// for ( int mid = 0; mid <= end; mid += 1000000 ) {
-// tests.add(new Object[]{0, mid, mid+1000000, end});
-// }
-
- tests.add(new Object[]{1226943, 1226943, 1226943, 2000000});
-
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "StartProvider")
- public void testMassiveQuery(final int start, final int mid, final int mid2, final int end) throws IOException {
- LinearIndex index = (LinearIndex)IndexFactory.loadIndex(MassiveIndexFile.getAbsolutePath());
-
- final List<Block> leftBlocks = index.getBlocks(CHR, start, mid);
- final List<Block> rightBlocks = index.getBlocks(CHR, mid2, end); // gap must be big to avoid overlaps
- final List<Block> allBlocks = index.getBlocks(CHR, start, end);
-
- final long leftSize = leftBlocks.isEmpty() ? 0 : leftBlocks.get(0).getSize();
- final long rightSize = rightBlocks.isEmpty() ? 0 : rightBlocks.get(0).getSize();
- final long allSize = allBlocks.isEmpty() ? 0 : allBlocks.get(0).getSize();
-
- Assert.assertTrue(leftSize >= 0, "Expected leftSize to be positive " + leftSize);
- Assert.assertTrue(rightSize >= 0, "Expected rightSize to be positive " + rightSize);
- Assert.assertTrue(allSize >= 0, "Expected allSize to be positive " + allSize);
-
- Assert.assertTrue(allSize >= Math.max(leftSize,rightSize), "Expected size of joint query " + allSize + " to be at least >= max of left " + leftSize + " and right queries " + rightSize);
- }
-}
diff --git a/src/tests/java/org/broad/tribble/index/interval/IntervalTreeTest.java b/src/tests/java/org/broad/tribble/index/interval/IntervalTreeTest.java
deleted file mode 100644
index e15ac18..0000000
--- a/src/tests/java/org/broad/tribble/index/interval/IntervalTreeTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index.interval;
-
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.CloseableTribbleIterator;
-import org.broad.tribble.FeatureReader;
-import org.broad.tribble.TestUtils;
-import org.broad.tribble.bed.BEDCodec;
-import org.broad.tribble.bed.BEDFeature;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * User: jrobinso
- * Date: Mar 24, 2010
- */
-public class IntervalTreeTest {
-
- static IntervalTree tree;
-
- @BeforeClass
- public static void setupTree() {
- tree = new IntervalTree();
- tree.insert(new Interval(0, 3, null));
- tree.insert(new Interval(5, 8, null));
- tree.insert(new Interval(6, 10, null));
- tree.insert(new Interval(8, 9, null));
- tree.insert(new Interval(15, 23, null));
- tree.insert(new Interval(16, 21, null));
- tree.insert(new Interval(17, 19, null));
- tree.insert(new Interval(19, 20, null));
- tree.insert(new Interval(25, 30, null));
- tree.insert(new Interval(26, 27, null));
- }
-
- @Test
- public void testSearch() {
-
- final Interval queryInterval = new Interval(1, 2);
- List<Interval> intervals = tree.findOverlapping(queryInterval);
- Assert.assertNotNull(intervals);
-
- for (Interval iv : intervals) {
- Assert.assertTrue(queryInterval.overlaps(iv));
- }
- }
-
- @Test
- public void testBed() throws Exception {
- String bedFile = TestUtils.DATA_DIR + "/index/chrY_Y4_small.bed";
- tree = new IntervalTree();
- Assert.assertTrue(tree.isValid());
-
- BufferedReader br = new BufferedReader(new FileReader(bedFile));
- String nextLine = "";
- while ((nextLine = br.readLine()) != null) {
- if (!(nextLine.startsWith("#") || nextLine.startsWith("track"))) {
- String[] tokens = nextLine.split("\t");
- if (tokens.length > 2) {
- int start = Integer.parseInt(tokens[1]);
- int end = Integer.parseInt(tokens[2]);
- tree.insert(new Interval(start, end));
- }
-
- }
- }
-
-// List iv = (List) tree.findOverlapping(new Interval(2770226, 2770300));
- Interval searchInterval = new Interval(2782632, 2782732);
- List<Interval> iv = tree.findOverlapping(searchInterval);
- for (Interval i : iv) {
- Assert.assertTrue(i.overlaps(searchInterval));
- }
-
- br.close();
-
- }
-
- @Test
- /**
- *
- * chr2 1 200000000 LONG_FEATURE
- * ...
- * chr2 179098961 179380395 Hs.134602
- * chr2 179209546 179287210 Hs.620337
- * chr2 179266309 179266748 Hs.609465
- * chr2 179296428 179300012 Hs.623987
- * chr2 179302952 179303488 Hs.594545
-
- */
- public void testOverlappingFeatures() throws Exception {
- //chr2:179,222,066-179,262,059<- CONTAINS TTN
-
- Set<String> names = new HashSet<String>(Arrays.asList("Hs.134602", "Hs.620337", "Hs.609465", "Hs.623987",
- "Hs.594545", "LONG_FEATURE"));
-
- String bedFile = TestUtils.DATA_DIR + "/bed/Unigene.sample.bed";
- String chr = "chr2";
- int start = 179266309;
- int end = 179303488 ;
- int expectedCount = 6;
-
-
- // Interval tree index
- int batchSize = 1;
- Index idx = IndexFactory.createIntervalIndex(new File(bedFile), new BEDCodec(), batchSize);
-
- FeatureReader<BEDFeature> bfr = AbstractFeatureReader.getFeatureReader(bedFile, new BEDCodec(), idx);
- CloseableTribbleIterator<BEDFeature>iter = bfr.query(chr, start, end);
- int countInterval = 0;
- while (iter.hasNext()) {
- BEDFeature feature = iter.next();
- Assert.assertTrue(feature.getEnd() >= start && feature.getStart() <= end);
- Assert.assertTrue(names.contains(feature.getName()));
- countInterval++;
- }
-
- Assert.assertEquals(countInterval, expectedCount);
-
-
- }
-
-
-}
-
diff --git a/src/tests/java/org/broad/tribble/index/linear/LinearIndexTest.java b/src/tests/java/org/broad/tribble/index/linear/LinearIndexTest.java
deleted file mode 100644
index 38bdfc0..0000000
--- a/src/tests/java/org/broad/tribble/index/linear/LinearIndexTest.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (c) 2009-2010 by The Broad Institute, Inc.
- * All Rights Reserved.
- *
- * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
- * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
- *
- * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
- * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
- * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
- * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
- * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
- * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
- * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
- * FOREGOING.
- */
-
-package org.broad.tribble.index.linear;
-
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.CloseableTribbleIterator;
-import org.broad.tribble.FeatureReader;
-import org.broad.tribble.TestUtils;
-import org.broad.tribble.bed.BEDCodec;
-import org.broad.tribble.bed.BEDFeature;
-import org.broad.tribble.index.Block;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class LinearIndexTest {
- private static final File RANDOM_FILE = new File("notMeaningful");
-
- private final static Block CHR1_B1 = new Block(1, 10);
- private final static Block CHR1_B2 = new Block(10, 20);
- private final static Block CHR1_B3 = new Block(20, 30);
- private final static Block CHR2_B1 = new Block(1, 100);
- private final static Block CHR2_B2 = new Block(100, 200);
-
- private LinearIndex idx;
-
- @BeforeTest
- public void setup() {
- idx = createTestIndex();
- }
-
- // chr1 (0, 10]
- // chr1 (10, 20]
- // chr1 (20, 30]
- // chr2 (0, 100]
- // chr2 (100, 200]
- private static LinearIndex createTestIndex() {
- final LinearIndex.ChrIndex chr1 = new LinearIndex.ChrIndex("chr1", 10);
- chr1.addBlock(CHR1_B1);
- chr1.addBlock(CHR1_B2);
- chr1.addBlock(CHR1_B3);
- chr1.updateLongestFeature(1);
-
- final LinearIndex.ChrIndex chr2 = new LinearIndex.ChrIndex("chr2", 100);
- chr2.addBlock(CHR2_B1);
- chr2.addBlock(CHR2_B2);
- chr2.updateLongestFeature(50);
-
- final List<LinearIndex.ChrIndex> indices = Arrays.asList(chr1, chr2);
- return new LinearIndex(indices, RANDOM_FILE);
- }
-
- @Test()
- public void testBasicFeatures() {
- Assert.assertEquals(idx.getChrIndexClass(), LinearIndex.ChrIndex.class);
- Assert.assertEquals(idx.getType(), LinearIndex.INDEX_TYPE);
- Assert.assertFalse(idx.hasFileSize());
- Assert.assertFalse(idx.hasTimestamp());
- Assert.assertFalse(idx.hasMD5());
- Assert.assertTrue(idx.isCurrentVersion());
-
- Assert.assertNotNull(idx.getSequenceNames());
- Assert.assertEquals(idx.getSequenceNames().size(), 2);
- Assert.assertTrue(idx.getSequenceNames().contains("chr1"));
- Assert.assertTrue(idx.getSequenceNames().contains("chr2"));
- Assert.assertTrue(idx.containsChromosome("chr1"));
- Assert.assertTrue(idx.containsChromosome("chr2"));
- Assert.assertFalse(idx.containsChromosome("chr3"));
-
- Assert.assertEquals(idx.getIndexedFile(), new File(RANDOM_FILE.getAbsolutePath()));
-
- Assert.assertNotNull(idx.getBlocks("chr1"));
- Assert.assertEquals(idx.getBlocks("chr1").size(), 3);
-
- Assert.assertNotNull(idx.getBlocks("chr2"));
- Assert.assertEquals(idx.getBlocks("chr2").size(), 2);
- }
-
- @Test()
- public void testEquals() {
- final LinearIndex idx2 = createTestIndex();
-
- Assert.assertEquals(idx, idx, "Identical indices are equal");
- Assert.assertTrue(idx.equalsIgnoreProperties(idx), "Identical indices are equalIgnoreTimeStamp");
- Assert.assertTrue(idx.equalsIgnoreProperties(idx2), "Indices constructed the same are equalIgnoreTimeStamp");
-
- idx2.setTS(123456789);
- Assert.assertNotSame(idx, idx2, "Indices with different timestamps are not the same");
- Assert.assertTrue(idx.equalsIgnoreProperties(idx2), "Indices with different timestamps are equalIgnoreTimeStamp");
- }
-
-
- // chr1 (0, 10]
- // chr1 (10, 20]
- // chr1 (20, 30]
- // chr2 (0, 100]
- // chr2 (100, 200]
- //@Test()
- // TODO -- this is not a useful test as written -- the linear index always returns a single block since by
- // TODO -- definition they are contiguous and can be collapsed to a single block.
- public void testBasicQuery() {
- testQuery("chr1", 1, 1, CHR1_B1);
- testQuery("chr1", 1, 2, CHR1_B1);
- testQuery("chr1", 1, 9, CHR1_B1);
- testQuery("chr1", 10, 10, CHR1_B1);
-
- testQuery("chr1", 10, 11, CHR1_B1, CHR1_B2);
- testQuery("chr1", 11, 11, CHR1_B2);
- testQuery("chr1", 11, 12, CHR1_B2);
- testQuery("chr1", 11, 19, CHR1_B2);
-
- testQuery("chr1", 10, 19, CHR1_B1, CHR1_B2);
- testQuery("chr1", 10, 21, CHR1_B1, CHR1_B2, CHR1_B3);
- testQuery("chr1", 25, 30, CHR1_B3);
- testQuery("chr1", 35, 40);
-
- testQuery("chr2", 1, 1, CHR2_B1);
- testQuery("chr2", 100, 100, CHR2_B1);
- testQuery("chr2", 125, 125, CHR2_B1, CHR2_B2); // because of the 50 bp events
- testQuery("chr2", 151, 151, CHR2_B2); // because of the 50 bp events
- testQuery("chr2", 249, 249, CHR2_B2); // because of the 50 bp events
- testQuery("chr2", 251, 251); // just escaping the 50 bp longest event
- }
-
- private final void testQuery(final String chr, final int start, final int stop, final Block... expectedBlocksArray) {
- final List<Block> qBlocks = idx.getBlocks(chr, start, stop);
- final List<Block> eBlocks = Arrays.asList(expectedBlocksArray);
-
- Assert.assertEquals(qBlocks.size(), eBlocks.size(),
- String.format("Query %s:%d-%d returned %d blocks but we only expected %d.", chr, start, stop, qBlocks.size(), eBlocks.size()));
- for (int i = 0; i < qBlocks.size(); i++)
- Assert.assertEquals(qBlocks.get(i), eBlocks.get(i));
- }
-
- File fakeBed = new File(TestUtils.DATA_DIR + "fakeBed.bed");
-
- @Test
- public void oneEntryFirstChr() {
- final BEDCodec code = new BEDCodec();
- final Index index = IndexFactory.createLinearIndex(fakeBed, code);
- final AbstractFeatureReader reader = AbstractFeatureReader.getFeatureReader(fakeBed.getAbsolutePath(), code, index);
-
- try {
- final CloseableTribbleIterator it = reader.iterator();
- int count = 0;
- while (it.hasNext()) {
- it.next();
- count++;
- }
- Assert.assertEquals(51, count);
- } catch (final IOException e) {
- Assert.fail("Unable to get iterator due to " + e.getMessage());
- }
- }
-
-
- @Test
- /**
- *
- * chr2 1 200000000 LONG_FEATURE
- * ...
- * chr2 179098961 179380395 Hs.134602
- * chr2 179209546 179287210 Hs.620337
- * chr2 179266309 179266748 Hs.609465
- * chr2 179296428 179300012 Hs.623987
- * chr2 179302952 179303488 Hs.594545
-
- */
- public void testOverlappingFeatures() throws Exception {
- //chr2:179,222,066-179,262,059<- CONTAINS TTN
-
- final Set<String> names = new HashSet<String>(Arrays.asList("Hs.134602", "Hs.620337", "Hs.609465", "Hs.623987",
- "Hs.594545", "LONG_FEATURE"));
-
- final String bedFile = TestUtils.DATA_DIR + "bed/Unigene.sample.bed";
- final String chr = "chr2";
- final int start = 179266309;
- final int end = 179303488;
- final int expectedCount = 6;
-
-
- // Linear binned index
- LinearIndex.enableAdaptiveIndexing = false;
- final int binSize = 1000;
- Index idx = IndexFactory.createLinearIndex(new File(bedFile), new BEDCodec(), binSize);
-
- FeatureReader<BEDFeature> bfr = AbstractFeatureReader.getFeatureReader(bedFile, new BEDCodec(), idx);
- CloseableTribbleIterator<BEDFeature> iter = bfr.query(chr, start, end);
- int countInterval = 0;
- while (iter.hasNext()) {
- final BEDFeature feature = iter.next();
- Assert.assertTrue(feature.getEnd() >= start && feature.getStart() <= end);
- Assert.assertTrue(names.contains(feature.getName()));
- countInterval++;
- }
-
- Assert.assertEquals(countInterval, expectedCount);
-
- //Repeat with adaptive indexing
- LinearIndex.enableAdaptiveIndexing = true;
- idx = IndexFactory.createLinearIndex(new File(bedFile), new BEDCodec(), binSize);
-
- bfr = AbstractFeatureReader.getFeatureReader(bedFile, new BEDCodec(), idx);
- iter = bfr.query(chr, start, end);
- countInterval = 0;
- while (iter.hasNext()) {
- final BEDFeature feature = iter.next();
- Assert.assertTrue(feature.getEnd() >= start && feature.getStart() <= end);
- Assert.assertTrue(names.contains(feature.getName()));
- countInterval++;
- }
-
- Assert.assertEquals(countInterval, expectedCount);
-
-
- }
-
-}
diff --git a/src/tests/java/org/broad/tribble/index/tabix/TabixIndexTest.java b/src/tests/java/org/broad/tribble/index/tabix/TabixIndexTest.java
deleted file mode 100644
index b316aed..0000000
--- a/src/tests/java/org/broad/tribble/index/tabix/TabixIndexTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broad.tribble.index.tabix;
-
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import org.broad.tribble.util.LittleEndianOutputStream;
-import org.broad.tribble.util.TabixUtils;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-
-public class TabixIndexTest {
- private static final File SMALL_TABIX_FILE = new File("testdata/tribble/tabix/trioDup.vcf.gz.tbi");
- private static final File BIGGER_TABIX_FILE = new File("testdata/tribble/tabix/bigger.vcf.gz.tbi");
-
- /**
- * Read an existing index from disk, write it to a temp file, read that in, and assert that both in-memory
- * representations are identical. Disk representations may not be identical due to arbitrary bin order and
- * compression differences.
- */
- @Test(dataProvider = "readWriteTestDataProvider")
- public void readWriteTest(final File tabixFile) throws Exception {
- final TabixIndex index = new TabixIndex(tabixFile);
- final File indexFile = File.createTempFile("TabixIndexTest.", TabixUtils.STANDARD_INDEX_EXTENSION);
- final LittleEndianOutputStream los = new LittleEndianOutputStream(new BlockCompressedOutputStream(indexFile));
- index.write(los);
- los.close();
- final TabixIndex index2 = new TabixIndex(indexFile);
- Assert.assertEquals(index, index2);
- // Unfortunately, can't do byte comparison of original file and temp file, because 1) different compression
- // levels; and more importantly, arbitrary order of bins in bin list.
- }
-
- @DataProvider(name = "readWriteTestDataProvider")
- public Object[][] readWriteTestDataProvider() {
- return new Object[][] {
- {SMALL_TABIX_FILE},
- {BIGGER_TABIX_FILE}
- };
- }
-
-}
diff --git a/src/tests/java/org/broad/tribble/readers/AsciiLineReaderTest.java b/src/tests/java/org/broad/tribble/readers/AsciiLineReaderTest.java
deleted file mode 100644
index 52f4543..0000000
--- a/src/tests/java/org/broad/tribble/readers/AsciiLineReaderTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.broad.tribble.readers;
-
-import org.broad.tribble.TestUtils;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.io.FileInputStream;
-import java.io.InputStream;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-/**
- * User: jacob
- * Date: 2012/05/09
- */
-public class AsciiLineReaderTest {
- @BeforeMethod
- public void setUp() throws Exception {
-
- }
-
- @AfterMethod
- public void tearDown() throws Exception {
-
- }
-
- /**
- * Test that we read the correct number of lines
- * from a file
- * @throws Exception
- */
- @Test
- public void testReadLines() throws Exception {
- String filePath = TestUtils.DATA_DIR + "gwas/smallp.gwas";
- InputStream is = new FileInputStream(filePath);
- AsciiLineReader reader = new AsciiLineReader(is);
- int actualLines = 0;
- int expectedNumber = 20;
- String nextLine = "";
-
- while((nextLine = reader.readLine()) != null && actualLines < (expectedNumber + 5)){
- actualLines++;
- //This particular test file has no empty lines
- assertTrue(nextLine.length() > 0);
- }
-
- assertEquals(expectedNumber, actualLines);
-
- }
-}
diff --git a/src/tests/java/org/broad/tribble/readers/AsynchronousLineReaderTest.java b/src/tests/java/org/broad/tribble/readers/AsynchronousLineReaderTest.java
deleted file mode 100644
index f388aba..0000000
--- a/src/tests/java/org/broad/tribble/readers/AsynchronousLineReaderTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.broad.tribble.readers;
-
-import org.broad.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.*;
-
-/**
- * @author mccowan
- */
-public class AsynchronousLineReaderTest {
-
- /**
- * Test that we read the correct number of lines
- * from a file
- * @throws Exception
- */
- @Test
- public void testReadLines() throws Exception {
- final File filePath = new File(TestUtils.DATA_DIR + "large.txt");
- final AsynchronousLineReader reader = new AsynchronousLineReader(new InputStreamReader( new FileInputStream(filePath)));
- final BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(filePath)));
-
- String nextLine;
- while((nextLine = br.readLine()) != null){
- Assert.assertEquals(nextLine, reader.readLine());
- }
- Assert.assertNull(reader.readLine());
- }
-}
diff --git a/src/tests/java/org/broad/tribble/readers/LineReaderUtilTest.java b/src/tests/java/org/broad/tribble/readers/LineReaderUtilTest.java
deleted file mode 100644
index 539cfa9..0000000
--- a/src/tests/java/org/broad/tribble/readers/LineReaderUtilTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.broad.tribble.readers;
-
-import org.broad.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-
-/**
- * @author mccowan
- */
-public class LineReaderUtilTest {
- @Test
- public void testLineReaderIterator() throws Exception {
- final File filePath = new File(TestUtils.DATA_DIR + "gwas/smallp.gwas");
- final LineIterator lineIterator = new LineIteratorImpl(LineReaderUtil.fromBufferedStream(new PositionalBufferedStream(new FileInputStream(filePath))));
- final BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
-
- while (lineIterator.hasNext()) {
- Assert.assertEquals(lineIterator.next(), br.readLine());
- }
- Assert.assertNull(br.readLine());
- }
-}
diff --git a/src/tests/java/org/broad/tribble/readers/LongLineBufferedReaderTest.java b/src/tests/java/org/broad/tribble/readers/LongLineBufferedReaderTest.java
deleted file mode 100644
index eaed097..0000000
--- a/src/tests/java/org/broad/tribble/readers/LongLineBufferedReaderTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.broad.tribble.readers;
-
-import org.broad.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-/**
- * @author mccowan
- */
-public class LongLineBufferedReaderTest {
-
- /**
- * Test that we read the correct number of lines
- * from a file
- * @throws Exception
- */
- @Test
- public void testReadLines() throws Exception {
- String filePath = TestUtils.DATA_DIR + "large.txt";
- BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
- LongLineBufferedReader testReader = new LongLineBufferedReader(new InputStreamReader(new FileInputStream(filePath)));
- String line;
- while((line = reader.readLine()) != null){
- Assert.assertEquals(testReader.readLine(), line);
- }
- Assert.assertNull(testReader.readLine());
- }
-}
diff --git a/src/tests/java/org/broad/tribble/readers/PositionalBufferedStreamTest.java b/src/tests/java/org/broad/tribble/readers/PositionalBufferedStreamTest.java
deleted file mode 100644
index 7982932..0000000
--- a/src/tests/java/org/broad/tribble/readers/PositionalBufferedStreamTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.broad.tribble.readers;
-
-import org.broad.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * User: jacob
- * Date: 2012/05/09
- */
-public class PositionalBufferedStreamTest {
-
- InputStream FileIs;
- long expectedBytes;
-
-
- @BeforeMethod
- public void setUp() throws Exception {
- File fi = new File(TestUtils.DATA_DIR + "test.bed");
- FileIs = new FileInputStream(fi);
- expectedBytes = fi.length();
- }
-
- @AfterMethod
- public void tearDown() throws Exception {
- if(FileIs != null){
- FileIs.close();
- FileIs = null;
- }
- }
-
- @Test
- public void testPeek() throws Exception{
- int trials = 10;
- PositionalBufferedStream is = new PositionalBufferedStream(FileIs);
- int bb = is.peek();
- for(int ii=0; ii < trials; ii++){
- Assert.assertEquals(is.peek(), bb);
- Assert.assertEquals(is.getPosition(), 0);
- }
-
- while((bb = is.peek()) >= 0){
- Assert.assertEquals(is.read(), bb);
- }
- }
-
- @Test
- public void testIsDone() throws Exception{
- PositionalBufferedStream is = new PositionalBufferedStream(FileIs);
- while(!is.isDone()){
- is.read();
- }
- Assert.assertTrue(is.isDone());
- Assert.assertEquals(is.getPosition(), expectedBytes);
- }
-
- @Test
- public void testReadCorrectNumberBytes() throws Exception{
- int[] bufSizes= new int[]{5, 20, 60, 120, 131, 150, 200, 1000, 10000, 20000, 512000, 2 << 20};
- for(Integer bufSize: bufSizes){
- setUp();
- tstReadCorrectNumberBytes(bufSize);
- tearDown();
- }
- }
-
- public void tstReadCorrectNumberBytes(int bufferSize) throws Exception{
- InputStream is = new PositionalBufferedStream(FileIs, bufferSize);
- long count = 0;
- while(is.read() >= 0){
- count++;
- }
-
- Assert.assertEquals(count, expectedBytes);
- }
-
- @DataProvider(name = "ReadBytesTestData")
- public Object[][] createReadBytesTestData() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
- for ( int byteReadSize : Arrays.asList(5, 10, 100, 255) )
- for ( int bufSize : Arrays.asList(1, 10, 100, 1000) )
- tests.add( new Object[]{ (Integer)byteReadSize, (Integer)bufSize });
-
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "ReadBytesTestData")
- public void testReadBytes(final int byteReadSize, final int bufsize) throws Exception {
- final byte[] bytes = new byte[255];
- for ( int i = 0; i < bytes.length; i++ ) bytes[i] = (byte)i;
- final ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
-
- final byte[] readBytes = new byte[byteReadSize];
- final PositionalBufferedStream pbs = new PositionalBufferedStream(bais, bufsize);
-
- int i = 0;
- while ( i < 255 ) {
- final int expectedBytesToRead = Math.min(255 - i, readBytes.length);
- final int nBytesRead = pbs.read(readBytes);
- Assert.assertEquals(nBytesRead, expectedBytesToRead, "Didn't read as many bytes as expected from PBS");
-
- for ( int j = 0; j < nBytesRead; j++ )
- Assert.assertEquals(readBytes[j], bytes[i+j], "Bytes read not those expected");
-
- i += nBytesRead;
- }
- }
-}
diff --git a/src/tests/java/org/broad/tribble/readers/ReaderTest.java b/src/tests/java/org/broad/tribble/readers/ReaderTest.java
deleted file mode 100644
index 6746698..0000000
--- a/src/tests/java/org/broad/tribble/readers/ReaderTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.broad.tribble.readers;
-
-
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Tests for streams and readers
- */
-public class ReaderTest {
- @BeforeClass
- public void setup() throws IOException {
- }
-
- @AfterClass
- public void teardown() throws Exception {
-
- }
-
- @Test
- public void testMultipleLines() throws IOException {
- testStream("line 1\nline2\n");
- }
-
- @Test
- public void testSingleLine() throws IOException {
- testStream("line 1\n");
- }
-
- @Test
- public void testEmpty() throws IOException {
- testStream("");
- }
-
-
- @Test
- public void testLotsOfLines() throws IOException {
- final StringBuilder b = new StringBuilder();
- for ( int i = 0; i < 10000; i++ ) {
- b.append("line " + i + "\n");
- }
- testStream(b.toString());
- }
-
- @Test
- public void testMassiveLines() throws IOException {
- final StringBuilder b = new StringBuilder();
- for ( int i = 0; i < 10; i++ ) {
- for ( int j = 0; j < 1000000; j++) {
- b.append(i + "." + j);
- }
- b.append("\n");
- }
- testStream(b.toString());
- }
-
- @Test
- public void testSkip() throws IOException {
- for ( int skipSizeBase : Arrays.asList(0, 10, 100, 1000, 10000, 1000000)) {
- for ( int skipSizeAdd = 0; skipSizeAdd < 10; skipSizeAdd ++ ) {
- final int skipSize = skipSizeBase + skipSizeAdd;
- final byte[] bytes = new byte[skipSize+2];
- Arrays.fill(bytes, 0, skipSize, (byte)0);
- bytes[skipSize] = 1;
- bytes[skipSize+1] = 2;
-
- final InputStream is = new ByteArrayInputStream(bytes);
- final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
- pbs.skip(skipSize);
-
- // first value is 1
- Assert.assertTrue(! pbs.isDone());
- Assert.assertEquals(pbs.getPosition(), skipSize);
- Assert.assertEquals(pbs.peek(), 1);
- Assert.assertEquals(pbs.read(), 1);
-
- Assert.assertTrue(! pbs.isDone());
- Assert.assertEquals(pbs.getPosition(), skipSize + 1);
- Assert.assertEquals(pbs.peek(), 2);
- Assert.assertEquals(pbs.read(), 2);
-
- Assert.assertTrue(pbs.isDone());
- }
- }
- }
-
- private void testStream(final String s) throws IOException {
- testStream(s.getBytes());
- testLineReader(s);
- }
-
- private void testStream(final byte[] bytes) throws IOException {
- final InputStream is = new ByteArrayInputStream(bytes);
- final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
-
- int bytePos = 0;
- while ( ! pbs.isDone() ) {
- Assert.assertTrue(bytePos < bytes.length);
-
- // test position
- Assert.assertEquals(pbs.getPosition(), bytePos);
-
- // test peek
- final byte atPos = bytes[bytePos];
- Assert.assertEquals(toByte(pbs.peek()), atPos);
- // test position
- Assert.assertEquals(pbs.getPosition(), bytePos);
-
- // test read
- Assert.assertEquals(toByte(pbs.read()), atPos);
- bytePos++;
- // test position
- Assert.assertEquals(pbs.getPosition(), bytePos);
-
- // test repeek
- if ( bytePos < bytes.length ) {
- Assert.assertEquals(toByte(pbs.peek()), bytes[bytePos]);
- // test position
- Assert.assertEquals(pbs.getPosition(), bytePos);
- }
- }
-
- Assert.assertEquals(bytePos, bytes.length);
- pbs.close();
- }
-
- private void testLineReader(final String lines) throws IOException {
- // read all of the lines into the
- final BufferedReader br = new BufferedReader(new StringReader(lines));
- final List<String> eachLine = new ArrayList<String>();
- while (true) {
- final String line = br.readLine();
- if ( line == null ) break;
- eachLine.add(line);
- }
-
- final byte[] bytes = lines.getBytes();
- final InputStream is = new ByteArrayInputStream(bytes);
- final PositionalBufferedStream pbs = new PositionalBufferedStream(is);
- final LineReader alr = new AsciiLineReader(pbs); // AsciiLineReader must be used here because it does not read ahead.
-
- int bytePos = 0, linePos = 0;
- /**
- * TODO: Requires revision: we're calling readLine() here, but making assumptions about how the underlying input stream operates.
- * Specifically, these tests assume the underlying stream only advances exactly the required number of characters to find the
- * newline, which is not true for most buffered readers.
- */
- while ( ! pbs.isDone() ) {
- Assert.assertTrue(bytePos < bytes.length);
-
- // test position
- Assert.assertEquals(pbs.getPosition(), bytePos);
-
- // test read
- final String readLine = alr.readLine();
- Assert.assertEquals(readLine, eachLine.get(linePos));
- linePos++;
-
- bytePos += readLine.length() + 1; // 1 for the terminator
- // test position
- Assert.assertEquals(pbs.getPosition(), bytePos);
- }
-
- Assert.assertEquals(linePos, eachLine.size());
- Assert.assertEquals(bytePos, bytes.length);
- pbs.close();
- }
-
- private final byte toByte(int i) {
- return (byte)(i & 0xFF);
- }
-}
diff --git a/src/tests/java/org/broad/tribble/readers/TabixReaderTest.java b/src/tests/java/org/broad/tribble/readers/TabixReaderTest.java
deleted file mode 100644
index d3d78d6..0000000
--- a/src/tests/java/org/broad/tribble/readers/TabixReaderTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.broad.tribble.readers;
-
-
-import org.broad.tribble.TestUtils;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.testng.AssertJUnit.assertTrue;
-
-
-/**
- * Created by IntelliJ IDEA.
- * User: jrobinso
- * Date: Jul 6, 2010
- * Time: 8:57:40 PM
- * To change this template use File | Settings | File Templates.
- */
-public class TabixReaderTest {
-
- static String tabixFile = TestUtils.DATA_DIR + "tabix/trioDup.vcf.gz";
- static TabixReader tabixReader;
- static List<String> sequenceNames;
-
- @BeforeClass
- public void setup() throws IOException {
- tabixReader = new TabixReader(tabixFile);
- sequenceNames = new ArrayList<String>(tabixReader.mChr2tid.keySet());
- }
-
- @AfterClass
- public void teardown() throws Exception {
- // close? TabixReader doesn't have a close method!
- }
-
- @Test
- public void testSequenceNames() {
-
-
- String[] expectedSeqNames = new String[24];
- for (int i = 1; i < 24; i++) {
- expectedSeqNames[i - 1] = String.valueOf(i);
- }
- expectedSeqNames[22] = "X";
- expectedSeqNames[23] = "Y";
- Assert.assertEquals(expectedSeqNames.length, sequenceNames.size());
-
- for (String s : expectedSeqNames) {
- Assert.assertTrue(sequenceNames.contains(s));
- }
-
-
- }
-
- /**
- * Test reading a local tabix file
- *
- * @throws java.io.IOException
- */
- @Test
- public void testLocalQuery() throws IOException {
-
- TabixIteratorLineReader lineReader = new TabixIteratorLineReader(
- tabixReader.query(tabixReader.mChr2tid.get("4"), 320, 330));
-
- int nRecords = 0;
- String nextLine;
- while ((nextLine = lineReader.readLine()) != null) {
- assertTrue(nextLine.startsWith("4"));
- nRecords++;
- }
- assertTrue(nRecords > 0);
-
-
- }
-
- /**
- * Test reading a tabix file over http
- *
- * @throws java.io.IOException
- */
- @Test
- public void testRemoteQuery() throws IOException {
-
- String tabixFile = "http://www.broadinstitute.org/igvdata/test/tabix/trioDup.vcf.gz";
-
- TabixReader tabixReader = new TabixReader(tabixFile);
-
- TabixIteratorLineReader lineReader = new TabixIteratorLineReader(
- tabixReader.query(tabixReader.mChr2tid.get("4"), 320, 330));
-
- int nRecords = 0;
- String nextLine;
- while ((nextLine = lineReader.readLine()) != null) {
- assertTrue(nextLine.startsWith("4"));
- nRecords++;
- }
- assertTrue(nRecords > 0);
-
-
- }
-}
diff --git a/src/tests/java/org/broad/tribble/util/ParsingUtilsTest.java b/src/tests/java/org/broad/tribble/util/ParsingUtilsTest.java
deleted file mode 100644
index 2948fa0..0000000
--- a/src/tests/java/org/broad/tribble/util/ParsingUtilsTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.broad.tribble.util;
-
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-
-/**
- * Parsing utils tests
- */
-public class ParsingUtilsTest {
-
- static final String AVAILABLE_FTP_URL = "ftp://ftp.broadinstitute.org/pub/igv/TEST/test.txt";
- static final String UNAVAILABLE_FTP_URL = "ftp://www.example.com/file.txt";
-
- static final String AVAILABLE_HTTP_URL = "http://www.google.com";
- static final String UNAVAILABLE_HTTP_URL = "http://www.unknownhostwhichshouldntexist.com";
-
- @Test
- public void testSplit1() {
- String[] tokens = new String[10];
- String blankColumnLine = "a\tb\t\td";
- int nTokens = ParsingUtils.split(blankColumnLine, tokens, '\t');
- Assert.assertEquals(nTokens,4);
- Assert.assertEquals(tokens[0],"a");
- Assert.assertEquals(tokens[1],"b");
- Assert.assertEquals(tokens[2],"");
- Assert.assertEquals(tokens[3],"d");
- }
-
- @Test
- public void testSplit2() {
- String[] tokens = new String[10];
- String blankColumnLine = "a\tb\t\td\t";
- int nTokens = ParsingUtils.split(blankColumnLine, tokens, '\t');
- Assert.assertEquals(nTokens,5);
- Assert.assertEquals(tokens[0],"a");
- Assert.assertEquals(tokens[1],"b");
- Assert.assertEquals(tokens[2],"");
- Assert.assertEquals(tokens[3],"d");
- Assert.assertEquals(tokens[4],"");
- }
-
- @Test
- public void testSplitWhitespace1() {
- String[] tokens = new String[10];
- String blankColumnLine = "a b\t\td";
- int nTokens = ParsingUtils.splitWhitespace(blankColumnLine, tokens);
- Assert.assertEquals(nTokens,4);
- Assert.assertEquals(tokens[0],"a");
- Assert.assertEquals(tokens[1],"b");
- Assert.assertEquals(tokens[2],"");
- Assert.assertEquals(tokens[3],"d");
- }
-
- @Test
- public void testSplitWhitespace2() {
- String[] tokens = new String[10];
- String blankColumnLine = "a b\t\td\t";
- int nTokens = ParsingUtils.splitWhitespace(blankColumnLine, tokens);
- Assert.assertEquals(nTokens,5);
- Assert.assertEquals(tokens[0],"a");
- Assert.assertEquals(tokens[1],"b");
- Assert.assertEquals(tokens[2],"");
- Assert.assertEquals(tokens[3],"d");
- }
-
- @Test
- public void testFTPDoesExist() throws IOException{
- tstExists(AVAILABLE_FTP_URL, true);
- }
-
- @Test
- public void testFTPNotExist() throws IOException{
- tstExists(UNAVAILABLE_FTP_URL, false);
- }
-
- @Test
- public void testHTTPDoesExist() throws IOException{
- tstExists(AVAILABLE_HTTP_URL, true);
- }
-
- @Test
- public void testHTTPNotExist() throws IOException{
- tstExists(UNAVAILABLE_HTTP_URL, false);
- }
-
- private void tstExists(String path, boolean expectExists) throws IOException{
- boolean exists = ParsingUtils.resourceExists(path);
- Assert.assertEquals(exists, expectExists);
- }
-
- @Test
- public void testFTPOpenInputStream() throws IOException{
- tstStream(AVAILABLE_FTP_URL);
- }
-
- @Test
- public void testHTTPOpenInputStream() throws IOException{
- tstStream(AVAILABLE_HTTP_URL);
- }
-
- private void tstStream(String path) throws IOException{
- InputStream is = ParsingUtils.openInputStream(path);
- Assert.assertNotNull(is, "InputStream is null for " + path);
- int b = is.read();
- Assert.assertNotSame(b, -1);
- }
-
-
-}
diff --git a/src/tests/java/org/broad/tribble/util/ftp/FTPClientTest.java b/src/tests/java/org/broad/tribble/util/ftp/FTPClientTest.java
deleted file mode 100644
index 3157112..0000000
--- a/src/tests/java/org/broad/tribble/util/ftp/FTPClientTest.java
+++ /dev/null
@@ -1,266 +0,0 @@
-package org.broad.tribble.util.ftp;
-
-import net.sf.samtools.util.ftp.FTPClient;
-import net.sf.samtools.util.ftp.FTPReply;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.UnknownHostException;
-
-
-
-
-/**
-* @author Jim Robinson
-* @since 10/3/11
-*/
-public class FTPClientTest {
-
- static String host = "ftp.broadinstitute.org";
- static String file = "/pub/igv/TEST/test.txt";
- static int fileSize = 27;
- static byte[] expectedBytes = "abcdefghijklmnopqrstuvwxyz\n".getBytes();
- FTPClient client;
-
- @BeforeMethod
- public void setUp() throws IOException {
- client = new FTPClient();
- FTPReply reply = client.connect(host);
- Assert.assertTrue(reply.isSuccess());
- }
-
- @AfterMethod
- public void tearDown() {
- System.out.println("Disconnecting");
- client.disconnect();
- }
-
- @Test
- public void testLogin() throws Exception {
-
- }
-
- @Test
- public void testPasv() throws Exception {
- try {
- FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.pasv();
- Assert.assertTrue(reply.isSuccess());
- } finally {
- client.closeDataStream();
- }
- }
-
- @Test
- public void testSize() throws Exception {
-
- FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.binary();
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.size(file);
- String val = reply.getReplyString();
- int size = Integer.parseInt(val);
- Assert.assertEquals(fileSize, size);
- }
-
-
- @Test
- public void testDownload() throws Exception {
- try {
- FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.binary();
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.pasv();
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.retr(file);
- Assert.assertTrue(reply.getCode() == 150);
-
- InputStream is = client.getDataStream();
- int idx = 0;
- int b;
- while ((b = is.read()) >= 0) {
- Assert.assertEquals(expectedBytes[idx], (byte) b);
- idx++;
- }
-
- } finally {
- client.closeDataStream();
- FTPReply reply = client.retr(file);
- System.out.println(reply.getCode());
- Assert.assertTrue(reply.isSuccess());
-
- }
- }
-
-
- @Test
- public void testRest() throws Exception {
- try {
- FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.binary();
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.pasv();
- Assert.assertTrue(reply.isSuccess());
-
- final int restPosition = 5;
- client.setRestPosition(restPosition);
-
- reply = client.retr(file);
- Assert.assertTrue(reply.getCode() == 150);
-
- InputStream is = client.getDataStream();
- int idx = restPosition;
- int b;
- while ((b = is.read()) >= 0) {
- Assert.assertEquals(expectedBytes[idx], (byte) b);
- idx++;
- }
-
- } finally {
- client.closeDataStream();
- FTPReply reply = client.retr(file);
- System.out.println(reply.getCode());
- Assert.assertTrue(reply.isSuccess());
-
- }
- }
-
- /**
- * Test accessing a non-existent file
- */
- @Test
- public void testNonExistentFile() throws Exception {
-
- String host = "ftp.broadinstitute.org";
- String file = "/pub/igv/TEST/fileDoesntExist.txt";
- FTPClient client = new FTPClient();
-
- FTPReply reply = client.connect(host);
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.login("anonymous", "igv at broadinstitute.org");
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.binary();
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.executeCommand("size " + file);
- Assert.assertEquals(550, reply.getCode());
-
- client.disconnect();
-
- }
-
- /**
- * Test accessing a non-existent server
- */
- @Test
- public void testNonExistentServer() throws Exception {
-
- String host = "ftp.noSuchServer.org";
- String file = "/pub/igv/TEST/fileDoesntExist.txt";
- FTPClient client = new FTPClient();
-
- FTPReply reply = null;
- try {
- reply = client.connect(host);
- } catch (UnknownHostException e) {
- // This is expected
- }
-
-
- client.disconnect();
-
- }
-
-
- @Test
- public void testMultiplePasv() throws Exception {
-
- try {
- FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.pasv();
- Assert.assertTrue(reply.isSuccess());
- client.closeDataStream();
-
- reply = client.pasv();
- Assert.assertTrue(reply.isSuccess());
- client.closeDataStream();
-
-
- }
-
- finally {
-
- }
- }
-
-
- @Test
- public void testMultipleRest() throws Exception {
- FTPReply reply = client.login("anonymous", "igv at broadinstitute.org");
- Assert.assertTrue(reply.isSuccess());
-
- reply = client.binary();
- Assert.assertTrue(reply.isSuccess());
-
- restRetr(5, 10);
- restRetr(2, 10);
- restRetr(15, 10);
-
- }
-
- private void restRetr(int restPosition, int length) throws IOException {
-
- try {
-
- if (client.getDataStream() == null) {
- FTPReply reply = client.pasv();
- Assert.assertTrue(reply.isSuccess());
- }
-
- client.setRestPosition(restPosition);
-
- FTPReply reply = client.retr(file);
- //assertTrue(reply.getCode() == 150);
-
- InputStream is = client.getDataStream();
-
- byte[] buffer = new byte[length];
- is.read(buffer);
-
-
- for (int i = 0; i < length; i++) {
- System.out.print((char) buffer[i]);
- Assert.assertEquals(expectedBytes[i + restPosition], buffer[i]);
- }
- System.out.println();
- }
-
- finally {
- client.closeDataStream();
- FTPReply reply = client.getReply(); // <== MUST READ THE REPLY
- System.out.println(reply.getReplyString());
-
-
- }
- }
-}
diff --git a/src/tests/java/org/broad/tribble/util/ftp/FTPUtilsTest.java b/src/tests/java/org/broad/tribble/util/ftp/FTPUtilsTest.java
deleted file mode 100644
index 2dad357..0000000
--- a/src/tests/java/org/broad/tribble/util/ftp/FTPUtilsTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.broad.tribble.util.ftp;
-
-import net.sf.samtools.util.ftp.FTPUtils;
-import org.testng.annotations.Test;
-
-import java.net.URL;
-
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-
-/**
-* @author Jim Robinson
-* @since 10/4/11
-*/
-public class FTPUtilsTest {
-
- @Test
- public void testResourceAvailable() throws Exception {
-
- URL goodUrl = new URL("ftp://ftp.broadinstitute.org/pub/igv/TEST/test.txt");
- assertTrue(FTPUtils.resourceAvailable(goodUrl));
-
- URL nonExistentURL = new URL("ftp://ftp.broadinstitute.org/pub/igv/TEST/doesntExist");
- assertFalse(FTPUtils.resourceAvailable(nonExistentURL));
-
- URL nonExistentServer = new URL("ftp://noSuchServer/pub/igv/TEST/doesntExist");
- assertFalse(FTPUtils.resourceAvailable(nonExistentServer));
-
-
- }
-}
diff --git a/src/tests/java/org/broadinstitute/variant/VariantBaseTest.java b/src/tests/java/org/broadinstitute/variant/VariantBaseTest.java
deleted file mode 100644
index 87b4b7d..0000000
--- a/src/tests/java/org/broadinstitute/variant/VariantBaseTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.SAMSequenceRecord;
-import org.testng.Assert;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Base class for test classes within org.broadinstitute.variant
- */
-public class VariantBaseTest {
-
- public static final String variantTestDataRoot = new File("testdata/variant/").getAbsolutePath() + "/";
-
- /**
- * Creates a temp file that will be deleted on exit after tests are complete.
- * @param name Prefix of the file.
- * @param extension Extension to concat to the end of the file.
- * @return A file in the temporary directory starting with name, ending with extension, which will be deleted after the program exits.
- */
- public static File createTempFile(String name, String extension) {
- try {
- File file = File.createTempFile(name, extension);
- file.deleteOnExit();
- return file;
- } catch (IOException ex) {
- throw new RuntimeException("Cannot create temp file: " + ex.getMessage(), ex);
- }
- }
-
- private static final double DEFAULT_FLOAT_TOLERANCE = 1e-1;
-
- public static final void assertEqualsDoubleSmart(final Object actual, final Double expected) {
- Assert.assertTrue(actual instanceof Double, "Not a double");
- assertEqualsDoubleSmart((double)(Double)actual, (double)expected);
- }
-
- public static final void assertEqualsDoubleSmart(final Object actual, final Double expected, final double tolerance) {
- Assert.assertTrue(actual instanceof Double, "Not a double");
- assertEqualsDoubleSmart((double)(Double)actual, (double)expected, tolerance);
- }
-
- public static final void assertEqualsDoubleSmart(final double actual, final double expected) {
- assertEqualsDoubleSmart(actual, expected, DEFAULT_FLOAT_TOLERANCE);
- }
-
- public static final <T> void assertEqualsSet(final Set<T> actual, final Set<T> expected, final String info) {
- final Set<T> actualSet = new HashSet<T>(actual);
- final Set<T> expectedSet = new HashSet<T>(expected);
- Assert.assertTrue(actualSet.equals(expectedSet), info); // note this is necessary due to testng bug for set comps
- }
-
- public static void assertEqualsDoubleSmart(final double actual, final double expected, final double tolerance) {
- assertEqualsDoubleSmart(actual, expected, tolerance, null);
- }
-
- public static void assertEqualsDoubleSmart(final double actual, final double expected, final double tolerance, final String message) {
- if ( Double.isNaN(expected) ) // NaN == NaN => false unfortunately
- Assert.assertTrue(Double.isNaN(actual), "expected is nan, actual is not");
- else if ( Double.isInfinite(expected) ) // NaN == NaN => false unfortunately
- Assert.assertTrue(Double.isInfinite(actual), "expected is infinite, actual is not");
- else {
- final double delta = Math.abs(actual - expected);
- final double ratio = Math.abs(actual / expected - 1.0);
- Assert.assertTrue(delta < tolerance || ratio < tolerance, "expected = " + expected + " actual = " + actual
- + " not within tolerance " + tolerance
- + (message == null ? "" : "message: " + message));
- }
- }
-
- public static SAMSequenceDictionary createArtificialSequenceDictionary() {
- final int[] contigLengths = { 249250621, 243199373, 198022430, 191154276, 180915260, 171115067, 159138663, 146364022,
- 141213431, 135534747, 135006516, 133851895, 115169878, 107349540, 102531392, 90354753,
- 81195210, 78077248, 59128983, 63025520, 48129895, 51304566, 155270560, 59373566, 16569 };
- List<SAMSequenceRecord> contigs = new ArrayList<SAMSequenceRecord>();
-
- for ( int contig = 1; contig <= 22; contig++ ) {
- contigs.add(new SAMSequenceRecord(Integer.toString(contig), contigLengths[contig - 1]));
- }
-
- int position = 22;
- for ( String contigName : Arrays.asList("X", "Y", "MT") ) {
- contigs.add(new SAMSequenceRecord(contigName, contigLengths[position]));
- position++;
- }
-
- return new SAMSequenceDictionary(contigs);
- }
-
-}
diff --git a/src/tests/java/org/broadinstitute/variant/bcf2/BCF2EncoderDecoderUnitTest.java b/src/tests/java/org/broadinstitute/variant/bcf2/BCF2EncoderDecoderUnitTest.java
deleted file mode 100644
index 76b4f07..0000000
--- a/src/tests/java/org/broadinstitute/variant/bcf2/BCF2EncoderDecoderUnitTest.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-// the imports for unit testing.
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.variantcontext.writer.BCF2Encoder;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-
-public class BCF2EncoderDecoderUnitTest extends VariantBaseTest {
- private final double FLOAT_TOLERANCE = 1e-6;
- final List<BCF2TypedValue> primitives = new ArrayList<BCF2TypedValue>();
- final List<BCF2TypedValue> basicTypes = new ArrayList<BCF2TypedValue>();
- final List<BCF2TypedValue> forCombinations = new ArrayList<BCF2TypedValue>();
-
- @BeforeSuite
- public void before() {
- basicTypes.add(new BCF2TypedValue(1, BCF2Type.INT8));
- basicTypes.add(new BCF2TypedValue(1000, BCF2Type.INT16));
- basicTypes.add(new BCF2TypedValue(1000000, BCF2Type.INT32));
- basicTypes.add(new BCF2TypedValue(1.2345e6, BCF2Type.FLOAT));
- basicTypes.add(new BCF2TypedValue("A", BCF2Type.CHAR));
-
- // small ints
- primitives.add(new BCF2TypedValue(0, BCF2Type.INT8));
- primitives.add(new BCF2TypedValue(10, BCF2Type.INT8));
- primitives.add(new BCF2TypedValue(-1, BCF2Type.INT8));
- primitives.add(new BCF2TypedValue(100, BCF2Type.INT8));
- primitives.add(new BCF2TypedValue(-100, BCF2Type.INT8));
- primitives.add(new BCF2TypedValue(-127, BCF2Type.INT8)); // last value in range
- primitives.add(new BCF2TypedValue( 127, BCF2Type.INT8)); // last value in range
-
- // medium ints
- primitives.add(new BCF2TypedValue(-1000, BCF2Type.INT16));
- primitives.add(new BCF2TypedValue(1000, BCF2Type.INT16));
- primitives.add(new BCF2TypedValue(-128, BCF2Type.INT16)); // first value in range
- primitives.add(new BCF2TypedValue( 128, BCF2Type.INT16)); // first value in range
- primitives.add(new BCF2TypedValue(-32767, BCF2Type.INT16)); // last value in range
- primitives.add(new BCF2TypedValue( 32767, BCF2Type.INT16)); // last value in range
-
- // larger ints
- primitives.add(new BCF2TypedValue(-32768, BCF2Type.INT32)); // first value in range
- primitives.add(new BCF2TypedValue( 32768, BCF2Type.INT32)); // first value in range
- primitives.add(new BCF2TypedValue(-100000, BCF2Type.INT32));
- primitives.add(new BCF2TypedValue(100000, BCF2Type.INT32));
- primitives.add(new BCF2TypedValue(-2147483647, BCF2Type.INT32));
- primitives.add(new BCF2TypedValue(2147483647, BCF2Type.INT32));
-
- // floats
- primitives.add(new BCF2TypedValue(0.0, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-0.0, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(1.0, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-1.0, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(1.1, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-1.1, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(5.0 / 3.0, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-5.0 / 3.0, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(1.23e3, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(1.23e6, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(1.23e9, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(1.23e12, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(1.23e15, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-1.23e3, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-1.23e6, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-1.23e9, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-1.23e12, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(-1.23e15, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(Float.MIN_VALUE, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(Float.MAX_VALUE, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(Double.NEGATIVE_INFINITY, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(Double.POSITIVE_INFINITY, BCF2Type.FLOAT));
- primitives.add(new BCF2TypedValue(Double.NaN, BCF2Type.FLOAT));
-
- // strings
- //primitives.add(new BCF2TypedValue("", BCFType.CHAR)); <- will be null (which is right)
- primitives.add(new BCF2TypedValue("S", BCF2Type.CHAR));
- primitives.add(new BCF2TypedValue("S2", BCF2Type.CHAR));
- primitives.add(new BCF2TypedValue("12345678910", BCF2Type.CHAR));
- primitives.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
- primitives.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
-
- // missing values
- for ( BCF2Type type : BCF2Type.values() ) {
- primitives.add(new BCF2TypedValue(null, type));
- }
-
- forCombinations.add(new BCF2TypedValue(10, BCF2Type.INT8));
- forCombinations.add(new BCF2TypedValue(100, BCF2Type.INT8));
- forCombinations.add(new BCF2TypedValue(-100, BCF2Type.INT8));
- forCombinations.add(new BCF2TypedValue(-128, BCF2Type.INT16)); // first value in range
- forCombinations.add(new BCF2TypedValue( 128, BCF2Type.INT16)); // first value in range
- forCombinations.add(new BCF2TypedValue(-100000, BCF2Type.INT32));
- forCombinations.add(new BCF2TypedValue(100000, BCF2Type.INT32));
- forCombinations.add(new BCF2TypedValue(0.0, BCF2Type.FLOAT));
- forCombinations.add(new BCF2TypedValue(1.23e6, BCF2Type.FLOAT));
- forCombinations.add(new BCF2TypedValue(-1.23e6, BCF2Type.FLOAT));
- forCombinations.add(new BCF2TypedValue("S", BCF2Type.CHAR));
- forCombinations.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
- forCombinations.add(new BCF2TypedValue("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", BCF2Type.CHAR));
-
- // missing values
- for ( BCF2Type type : BCF2Type.values() ) {
- forCombinations.add(new BCF2TypedValue(null, type));
- }
- }
-
- // --------------------------------------------------------------------------------
- //
- // merge case Provider
- //
- // --------------------------------------------------------------------------------
-
- private class BCF2TypedValue {
- final BCF2Type type;
- final Object value;
-
- private BCF2TypedValue(final int value, final BCF2Type type) {
- this(new Integer(value), type);
- }
-
- private BCF2TypedValue(final double value, final BCF2Type type) {
- this(new Double(value), type);
- }
-
- private BCF2TypedValue(final Object value, final BCF2Type type) {
- this.type = type;
- this.value = value;
- }
-
- public boolean isMissing() { return value == null; }
-
- @Override
- public String toString() {
- return String.format("%s of %s", value, type);
- }
- }
-
- // -----------------------------------------------------------------
- //
- // Test encoding of basic types
- //
- // -----------------------------------------------------------------
-
- @DataProvider(name = "BCF2EncodingTestProviderBasicTypes")
- public Object[][] BCF2EncodingTestProviderBasicTypes() {
- List<Object[]> tests = new ArrayList<Object[]>();
- for ( BCF2TypedValue tv : basicTypes )
- tests.add(new Object[]{Arrays.asList(tv)});
- return tests.toArray(new Object[][]{});
- }
-
- private interface EncodeMe {
- public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException;
- }
-
-
- @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
- public void testBCF2BasicTypesWithStaticCalls(final List<BCF2TypedValue> toEncode) throws IOException {
- testBCF2BasicTypesWithEncodeMe(toEncode,
- new EncodeMe() {
- @Override
- public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException {
- switch ( tv.type ) {
- case INT8:
- case INT16:
- case INT32:
- encoder.encodeTypedInt((Integer)tv.value, tv.type);
- break;
- case FLOAT:
- encoder.encodeTypedFloat((Double)tv.value);
- break;
- case CHAR:
- encoder.encodeTypedString((String)tv.value);
- break;
- }
- }
- });
- }
-
- @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
- public void testBCF2BasicTypesWithObjectType(final List<BCF2TypedValue> toEncode) throws IOException {
- testBCF2BasicTypesWithEncodeMe(toEncode,
- new EncodeMe() {
- @Override
- public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException {
- encoder.encodeTyped(tv.value, tv.type);
- }
- });
- }
-
- @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
- public void testBCF2BasicTypesWithObjectNoType(final List<BCF2TypedValue> toEncode) throws IOException {
- testBCF2BasicTypesWithEncodeMe(toEncode,
- new EncodeMe() {
- @Override
- public void encode(final BCF2Encoder encoder, final BCF2TypedValue tv) throws IOException {
- encoder.encode(tv.value);
- }
- });
- }
-
- public void testBCF2BasicTypesWithEncodeMe(final List<BCF2TypedValue> toEncode, final EncodeMe func) throws IOException {
- for ( final BCF2TypedValue tv : toEncode ) {
- BCF2Encoder encoder = new BCF2Encoder();
- func.encode(encoder, tv);
-
- BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
- final Object decoded = decoder.decodeTypedValue();
-
- Assert.assertNotNull(decoded);
- Assert.assertFalse(decoded instanceof List);
- myAssertEquals(tv, decoded);
- }
- }
-
- @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
- public void testBCF2EncodingVectors(final List<BCF2TypedValue> toEncode) throws IOException {
- for ( final BCF2TypedValue tv : toEncode ) {
- for ( final int length : Arrays.asList(2, 5, 10, 15, 20, 25) ) {
- BCF2Encoder encoder = new BCF2Encoder();
- List<Object> expected = Collections.nCopies(length, tv.value);
- encoder.encodeTyped(expected, tv.type);
-
- BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
- final Object decoded = decoder.decodeTypedValue();
-
- Assert.assertTrue(decoded instanceof List);
- final List<Object> decodedList = (List<Object>)decoded;
- Assert.assertEquals(decodedList.size(), expected.size());
- for ( Object decodedValue : decodedList )
- myAssertEquals(tv, decodedValue);
- }
- }
- }
-
- @DataProvider(name = "BCF2EncodingTestProviderSingletons")
- public Object[][] BCF2EncodingTestProviderSingletons() {
- List<Object[]> tests = new ArrayList<Object[]>();
- for ( BCF2TypedValue tv : primitives )
- tests.add(new Object[]{Arrays.asList(tv)});
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "BCF2EncodingTestProviderSingletons")
- public void testBCF2EncodingSingletons(final List<BCF2TypedValue> toEncode) throws IOException {
- final byte[] record = encodeRecord(toEncode);
- decodeRecord(toEncode, record);
- }
-
- // -----------------------------------------------------------------
- //
- // Test encoding of vectors
- //
- // -----------------------------------------------------------------
-
- @DataProvider(name = "BCF2EncodingTestProviderSequences")
- public Object[][] BCF2EncodingTestProviderSequences() {
- List<Object[]> tests = new ArrayList<Object[]>();
- for ( BCF2TypedValue tv1 : forCombinations )
- for ( BCF2TypedValue tv2 : forCombinations )
- for ( BCF2TypedValue tv3 : forCombinations )
- tests.add(new Object[]{Arrays.asList(tv1, tv2, tv3)});
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "BCF2EncodingTestProviderBasicTypes")
- public void testBCF2EncodingVectorsWithMissing(final List<BCF2TypedValue> toEncode) throws IOException {
- for ( final BCF2TypedValue tv : toEncode ) {
- if ( tv.type != BCF2Type.CHAR ) {
- for ( final int length : Arrays.asList(2, 5, 10, 15, 20, 25) ) {
- final byte td = BCF2Utils.encodeTypeDescriptor(1, tv.type);
-
- final BCF2Encoder encoder = new BCF2Encoder();
- for ( int i = 0; i < length; i++ ) {
- encoder.encodeRawValue(i % 2 == 0 ? null : tv.value, tv.type);
- }
-
- final BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
-
- for ( int i = 0; i < length; i++ ) {
- final Object decoded = decoder.decodeTypedValue(td);
- myAssertEquals(i % 2 == 0 ? new BCF2TypedValue(null, tv.type) : tv, decoded);
- }
- }
- }
- }
- }
-
- @Test(dataProvider = "BCF2EncodingTestProviderSequences", dependsOnMethods = "testBCF2EncodingSingletons")
- public void testBCF2EncodingTestProviderSequences(final List<BCF2TypedValue> toEncode) throws IOException {
- final byte[] record = encodeRecord(toEncode);
- decodeRecord(toEncode, record);
- }
-
- // -----------------------------------------------------------------
- //
- // Test strings and lists of strings
- //
- // -----------------------------------------------------------------
-
- @DataProvider(name = "ListOfStrings")
- public Object[][] listOfStringsProvider() {
- List<Object[]> tests = new ArrayList<Object[]>();
- tests.add(new Object[]{Arrays.asList("s1", "s2"), ",s1,s2"});
- tests.add(new Object[]{Arrays.asList("s1", "s2", "s3"), ",s1,s2,s3"});
- tests.add(new Object[]{Arrays.asList("s1", "s2", "s3", "s4"), ",s1,s2,s3,s4"});
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "ListOfStrings")
- public void testEncodingListOfString(List<String> strings, String expected) throws IOException {
- final String collapsed = BCF2Utils.collapseStringList(strings);
- Assert.assertEquals(collapsed, expected);
- Assert.assertEquals(BCF2Utils.explodeStringList(collapsed), strings);
- }
-
- // -----------------------------------------------------------------
- //
- // Tests to determine the best type of arrays of integers
- //
- // -----------------------------------------------------------------
-
- @DataProvider(name = "BestIntTypeTests")
- public Object[][] BestIntTypeTests() {
- List<Object[]> tests = new ArrayList<Object[]>();
- tests.add(new Object[]{Arrays.asList(1), BCF2Type.INT8});
- tests.add(new Object[]{Arrays.asList(1, 10), BCF2Type.INT8});
- tests.add(new Object[]{Arrays.asList(1, 10, 100), BCF2Type.INT8});
- tests.add(new Object[]{Arrays.asList(1, -1), BCF2Type.INT8});
- tests.add(new Object[]{Arrays.asList(1, 1000), BCF2Type.INT16});
- tests.add(new Object[]{Arrays.asList(1, 1000, 10), BCF2Type.INT16});
- tests.add(new Object[]{Arrays.asList(1, 1000, 100), BCF2Type.INT16});
- tests.add(new Object[]{Arrays.asList(1000), BCF2Type.INT16});
- tests.add(new Object[]{Arrays.asList(100000), BCF2Type.INT32});
- tests.add(new Object[]{Arrays.asList(100000, 10), BCF2Type.INT32});
- tests.add(new Object[]{Arrays.asList(100000, 100), BCF2Type.INT32});
- tests.add(new Object[]{Arrays.asList(100000, 1, -10), BCF2Type.INT32});
- tests.add(new Object[]{Arrays.asList(-100000, 1, -10), BCF2Type.INT32});
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "BestIntTypeTests")
- public void determineBestEncoding(final List<Integer> ints, final BCF2Type expectedType) throws IOException {
- BCF2Encoder encoder = new BCF2Encoder();
- Assert.assertEquals(BCF2Utils.determineIntegerType(ints), expectedType);
- Assert.assertEquals(BCF2Utils.determineIntegerType(toPrimitive(ints.toArray(new Integer[0]))), expectedType);
- }
-
- private static int[] toPrimitive ( final Integer[] array ) {
- if ( array == null ) {
- return null;
- }
- else if ( array.length == 0 ) {
- return new int[0];
- }
-
- final int[] result = new int[array.length];
- for (int i = 0; i < array.length; i++) {
- result[i] = array[i].intValue();
- }
- return result;
- }
-
- // -----------------------------------------------------------------
- //
- // Tests managing and skipping multiple blocks
- //
- // -----------------------------------------------------------------
-
- @Test(dataProvider = "BCF2EncodingTestProviderSequences", dependsOnMethods = "testBCF2EncodingTestProviderSequences")
- public void testReadAndSkipWithMultipleBlocks(final List<BCF2TypedValue> block) throws IOException {
- testReadAndSkipWithMultipleBlocks(block, forCombinations);
- testReadAndSkipWithMultipleBlocks(forCombinations, block);
- }
-
- public void testReadAndSkipWithMultipleBlocks(final List<BCF2TypedValue> block1, final List<BCF2TypedValue> block2) throws IOException {
- final byte[] record1 = encodeRecord(block1);
- final byte[] record2 = encodeRecord(block2);
-
- // each record is individually good
- decodeRecord(block1, record1);
- decodeRecord(block2, record2);
-
- BCF2Decoder decoder = new BCF2Decoder();
-
- // test setting
- decoder.setRecordBytes(record1);
- decodeRecord(block1, decoder);
- decoder.setRecordBytes(record2);
- decodeRecord(block2, decoder);
-
- // test combining the streams
- final byte[] combined = combineRecords(record1, record2);
- final List<BCF2TypedValue> combinedObjects = new ArrayList<BCF2TypedValue>(block1);
- combinedObjects.addAll(block2);
-
- // the combined bytes is the same as the combined objects
- InputStream stream = new ByteArrayInputStream(combined);
- decoder.readNextBlock(record1.length, stream);
- decodeRecord(block1, decoder);
- decoder.readNextBlock(record2.length, stream);
- decodeRecord(block2, decoder);
-
- // skipping the first block allows us to read the second block directly
- stream = new ByteArrayInputStream(combined);
- decoder.skipNextBlock(record1.length, stream);
- decoder.readNextBlock(record2.length, stream);
- decodeRecord(block2, decoder);
- }
-
- // -----------------------------------------------------------------
- //
- // Test encoding / decoding arrays of ints
- //
- // This checks that we can encode and decode correctly with the
- // low-level decodeIntArray function arrays of values. This
- // has to be pretty comprehensive as decodeIntArray is a highly optimized
- // piece of code with lots of edge cases. The values we are encoding
- // don't really matter -- just that the values come back as expected.
- //
- // -----------------------------------------------------------------
-
- @DataProvider(name = "IntArrays")
- public Object[][] makeIntArrays() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
- for ( int nValues : Arrays.asList(0, 1, 2, 5, 10, 100) ) {
- for ( int nPad : Arrays.asList(0, 1, 2, 5, 10, 100) ) {
- int nElements = nValues + nPad;
-
- List<Integer> values = new ArrayList<Integer>(nElements);
-
- // add nValues from 0 to nValues - 1
- for ( int i = 0; i < nValues; i++ )
- values.add(i);
-
- // add nPad nulls
- for ( int i = 0; i < nPad; i++ )
- values.add(null);
-
- tests.add(new Object[]{values});
- }
- }
-
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "IntArrays")
- public void testIntArrays(final List<Integer> ints) throws IOException {
- final BCF2Encoder encoder = new BCF2Encoder();
- encoder.encodeTyped(ints, BCF2Type.INT16);
-
- final BCF2Decoder decoder = new BCF2Decoder(encoder.getRecordBytes());
-
- final byte typeDescriptor = decoder.readTypeDescriptor();
-
- // read the int[] with the low-level version
- final int size = decoder.decodeNumberOfElements(typeDescriptor);
- final int[] decoded = decoder.decodeIntArray(typeDescriptor, size);
-
- if ( isMissing(ints) ) {
- // we expect that the result is null in this case
- Assert.assertNull(decoded, "Encoded all missing values -- expected null");
- } else {
- // we expect at least some values to come back
- Assert.assertTrue(decoded.length > 0, "Must have at least 1 element for non-null encoded data");
-
- // check corresponding values
- for ( int i = 0; i < ints.size(); i++ ) {
- final Integer expected = ints.get(i);
-
- if ( expected == null ) {
- Assert.assertTrue(decoded.length <= i, "we expect decoded to be truncated for missing values");
- } else {
- Assert.assertTrue(decoded.length > i, "we expected at least " + i + " values in decoded array");
- Assert.assertEquals(decoded[i], (int)expected);
- }
- }
- }
- }
-
- // -----------------------------------------------------------------
- //
- // Helper routines
- //
- // -----------------------------------------------------------------
-
- private final byte[] combineRecords(final byte[] record1, final byte[] record2) throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- baos.write(record1);
- baos.write(record2);
- return baos.toByteArray();
- }
-
- private final byte[] encodeRecord(final List<BCF2TypedValue> toEncode) throws IOException {
- BCF2Encoder encoder = new BCF2Encoder();
-
- for ( final BCF2TypedValue tv : toEncode ) {
- if ( tv.isMissing() )
- encoder.encodeTypedMissing(tv.type);
- else {
- final BCF2Type encodedType = encoder.encode(tv.value);
- if ( tv.type != null ) // only if we have an expectation
- Assert.assertEquals(encodedType, tv.type);
- }
- }
-
- // check output
- final byte[] record = encoder.getRecordBytes();
- Assert.assertNotNull(record);
- Assert.assertTrue(record.length > 0);
- return record;
- }
-
- private final void decodeRecord(final List<BCF2TypedValue> toEncode, final byte[] record) throws IOException {
- decodeRecord(toEncode, new BCF2Decoder(record));
- }
-
- private final void decodeRecord(final List<BCF2TypedValue> toEncode, final BCF2Decoder decoder) throws IOException {
- for ( final BCF2TypedValue tv : toEncode ) {
- Assert.assertFalse(decoder.blockIsFullyDecoded());
- final Object decoded = decoder.decodeTypedValue();
-
- myAssertEquals(tv, decoded);
- }
-
- Assert.assertTrue(decoder.blockIsFullyDecoded());
- }
-
- private final void myAssertEquals(final BCF2TypedValue tv, final Object decoded) {
- if ( tv.value == null ) { // special needs for instanceof double
- Assert.assertEquals(decoded, tv.value);
- } else if ( tv.type == BCF2Type.FLOAT ) { // need tolerance for floats, and they aren't null
- Assert.assertTrue(decoded instanceof Double);
-
- final double valueFloat = (Double)tv.value;
- final double decodedFloat = (Double)decoded;
-
- VariantBaseTest.assertEqualsDoubleSmart(decodedFloat, valueFloat, FLOAT_TOLERANCE);
- } else
- Assert.assertEquals(decoded, tv.value);
- }
-
- private final boolean isMissing(final List<Integer> values) {
- if ( values != null )
- for ( Integer value : values )
- if ( value != null )
- return false;
- return true;
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/org/broadinstitute/variant/bcf2/BCF2UtilsUnitTest.java b/src/tests/java/org/broadinstitute/variant/bcf2/BCF2UtilsUnitTest.java
deleted file mode 100644
index 1e0cf97..0000000
--- a/src/tests/java/org/broadinstitute/variant/bcf2/BCF2UtilsUnitTest.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.bcf2;
-
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.bcf2.BCF2Utils;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.vcf.*;
-
-import java.util.*;
-
-import org.broadinstitute.variant.vcf.VCFSimpleHeaderLine;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-/**
- * Tests for BCF2Utils
- */
-public final class BCF2UtilsUnitTest extends VariantBaseTest {
- @DataProvider(name = "CollapseExpandTest")
- public Object[][] makeCollapseExpandTest() {
- List<Object[]> tests = new ArrayList<Object[]>();
- tests.add(new Object[]{Arrays.asList("A"), "A", false});
- tests.add(new Object[]{Arrays.asList("A", "B"), ",A,B", true});
- tests.add(new Object[]{Arrays.asList("AB"), "AB", false});
- tests.add(new Object[]{Arrays.asList("AB", "C"), ",AB,C", true});
- tests.add(new Object[]{Arrays.asList(), "", false});
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "CollapseExpandTest")
- public void testCollapseExpandTest(final List<String> in, final String expectedCollapsed, final boolean isCollapsed) {
- final String actualCollapsed = BCF2Utils.collapseStringList(in);
- Assert.assertEquals(actualCollapsed, expectedCollapsed);
- Assert.assertEquals(BCF2Utils.isCollapsedString(actualCollapsed), isCollapsed);
- if ( isCollapsed )
- Assert.assertEquals(BCF2Utils.explodeStringList(actualCollapsed), in);
- }
-
- @Test
- public void testCreateDictionary() {
- final List<VCFHeaderLine> inputLines = new ArrayList<VCFHeaderLine>();
- int counter = 0;
- inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
- inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
- inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
- inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
- inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- inputLines.add(new VCFHeaderLine("x", "misc"));
- inputLines.add(new VCFHeaderLine("y", "misc"));
- inputLines.add(new VCFSimpleHeaderLine("GATKCommandLine","z","misc"));
- inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- final int inputLineCounter = counter;
- final VCFHeader inputHeader = new VCFHeader(new LinkedHashSet<VCFHeaderLine>(inputLines));
- final ArrayList<String> dict = BCF2Utils.makeDictionary(inputHeader);
- final int dict_size = dict.size();
- Assert.assertEquals(7,dict_size);
- }
-
-
- @DataProvider(name = "HeaderOrderTestProvider")
- public Object[][] makeHeaderOrderTestProvider() {
- final List<VCFHeaderLine> inputLines = new ArrayList<VCFHeaderLine>();
- final List<VCFHeaderLine> extraLines = new ArrayList<VCFHeaderLine>();
-
- int counter = 0;
- inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
- inputLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
- inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
- inputLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
- inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- inputLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- inputLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- final int inputLineCounter = counter;
- final VCFHeader inputHeader = new VCFHeader(new LinkedHashSet<VCFHeaderLine>(inputLines));
-
- extraLines.add(new VCFFilterHeaderLine(String.valueOf(counter++)));
- extraLines.add(new VCFContigHeaderLine(Collections.singletonMap("ID", String.valueOf(counter++)), counter));
- extraLines.add(new VCFInfoHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- extraLines.add(new VCFFormatHeaderLine(String.valueOf(counter++), VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"));
- extraLines.add(new VCFHeaderLine("x", "misc"));
- extraLines.add(new VCFHeaderLine("y", "misc"));
-
- List<Object[]> tests = new ArrayList<Object[]>();
- for ( final int extrasToTake : Arrays.asList(0, 1, 2, 3) ) {
- final List<VCFHeaderLine> empty = Collections.emptyList();
- final List<List<VCFHeaderLine>> permutations = extrasToTake == 0
- ? Collections.singletonList(empty)
- : GeneralUtils.makePermutations(extraLines, extrasToTake, false);
- for ( final List<VCFHeaderLine> permutation : permutations ) {
- for ( int i = -1; i < inputLines.size(); i++ ) {
- final List<VCFHeaderLine> allLines = new ArrayList<VCFHeaderLine>(inputLines);
- if ( i >= 0 )
- allLines.remove(i);
- allLines.addAll(permutation);
- final VCFHeader testHeader = new VCFHeader(new LinkedHashSet<VCFHeaderLine>(allLines));
- final boolean expectedConsistent = expectedConsistent(testHeader, inputLineCounter);
- tests.add(new Object[]{inputHeader, testHeader, expectedConsistent});
- }
- }
- }
-
- // sample name tests
- final List<List<String>> sampleNameTests = Arrays.asList(
- new ArrayList<String>(),
- Arrays.asList("A"),
- Arrays.asList("A", "B"),
- Arrays.asList("A", "B", "C"));
- for ( final List<String> inSamples : sampleNameTests ) {
- for ( final List<String> testSamples : sampleNameTests ) {
- final VCFHeader inputHeaderWithSamples = new VCFHeader(inputHeader.getMetaDataInInputOrder(), inSamples);
-
- final List<List<String>> permutations = testSamples.isEmpty()
- ? Collections.singletonList(testSamples)
- : GeneralUtils.makePermutations(testSamples, testSamples.size(), false);
- for ( final List<String> testSamplesPermutation : permutations ) {
- final VCFHeader testHeaderWithSamples = new VCFHeader(inputHeader.getMetaDataInInputOrder(), testSamplesPermutation);
- final boolean expectedConsistent = testSamples.equals(inSamples);
- tests.add(new Object[]{inputHeaderWithSamples, testHeaderWithSamples, expectedConsistent});
- }
- }
- }
-
- return tests.toArray(new Object[][]{});
- }
-
- private static boolean expectedConsistent(final VCFHeader combinationHeader, final int minCounterForInputLines) {
- final List<Integer> ids = new ArrayList<Integer>();
- for ( final VCFHeaderLine line : combinationHeader.getMetaDataInInputOrder() ) {
- if ( line instanceof VCFIDHeaderLine ) {
- ids.add(Integer.valueOf(((VCFIDHeaderLine) line).getID()));
- }
- }
-
- // as long as the start contains all of the ids up to minCounterForInputLines in order
- for ( int i = 0; i < minCounterForInputLines; i++ )
- if ( i >= ids.size() || ids.get(i) != i )
- return false;
-
- return true;
- }
-
- //
- // Test to make sure that we detect correctly the case where we can preserve the genotypes data in a BCF2
- // even when the header file is slightly different
- //
- @Test(dataProvider = "HeaderOrderTestProvider")
- public void testHeaderOrder(final VCFHeader inputHeader, final VCFHeader testHeader, final boolean expectedConsistent) {
- final boolean actualOrderConsistency = BCF2Utils.headerLinesAreOrderedConsistently(testHeader, inputHeader);
- Assert.assertEquals(actualOrderConsistency, expectedConsistent);
- }
-
-
-
-
-}
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/AlleleUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/AlleleUnitTest.java
deleted file mode 100644
index 7fa652f..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/AlleleUnitTest.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-import org.broadinstitute.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-// public Allele(byte[] bases, boolean isRef) {
-// public Allele(boolean isRef) {
-// public Allele(String bases, boolean isRef) {
-// public boolean isReference() { return isRef; }
-// public boolean isNonReference() { return ! isReference(); }
-// public byte[] getBases() { return bases; }
-// public boolean equals(Allele other) {
-// public int length() {
-
-/**
- * Basic unit test for RecalData
- */
-public class AlleleUnitTest extends VariantBaseTest {
- Allele ARef, A, T, ATIns, ATCIns, NoCall;
-
- @BeforeSuite
- public void before() {
- A = Allele.create("A");
- ARef = Allele.create("A", true);
- T = Allele.create("T");
-
- ATIns = Allele.create("AT");
- ATCIns = Allele.create("ATC");
-
- NoCall = Allele.create(".");
- }
-
- @Test
- public void testCreatingSNPAlleles() {
- Assert.assertTrue(A.isNonReference());
- Assert.assertFalse(A.isReference());
- Assert.assertTrue(A.basesMatch("A"));
- Assert.assertEquals(A.length(), 1);
-
- Assert.assertTrue(ARef.isReference());
- Assert.assertFalse(ARef.isNonReference());
- Assert.assertTrue(ARef.basesMatch("A"));
- Assert.assertFalse(ARef.basesMatch("T"));
-
- Assert.assertTrue(T.isNonReference());
- Assert.assertFalse(T.isReference());
- Assert.assertTrue(T.basesMatch("T"));
- Assert.assertFalse(T.basesMatch("A"));
- }
-
- @Test
- public void testCreatingNoCallAlleles() {
- Assert.assertTrue(NoCall.isNonReference());
- Assert.assertFalse(NoCall.isReference());
- Assert.assertFalse(NoCall.basesMatch("."));
- Assert.assertEquals(NoCall.length(), 0);
- Assert.assertTrue(NoCall.isNoCall());
- Assert.assertFalse(NoCall.isCalled());
- }
-
-
- @Test
- public void testCreatingIndelAlleles() {
- Assert.assertEquals(ATIns.length(), 2);
- Assert.assertEquals(ATCIns.length(), 3);
- Assert.assertEquals(ATIns.getBases(), "AT".getBytes());
- Assert.assertEquals(ATCIns.getBases(), "ATC".getBytes());
- }
-
-
- @Test
- public void testConstructors1() {
- Allele a1 = Allele.create("A");
- Allele a2 = Allele.create("A".getBytes());
- Allele a3 = Allele.create("A");
- Allele a4 = Allele.create("A", true);
-
- Assert.assertTrue(a1.equals(a2));
- Assert.assertTrue(a1.equals(a3));
- Assert.assertFalse(a1.equals(a4));
- }
-
- @Test
- public void testInsConstructors() {
- Allele a1 = Allele.create("AC");
- Allele a2 = Allele.create("AC".getBytes());
- Allele a3 = Allele.create("AC");
- Allele a4 = Allele.create("AC", true);
-
- Assert.assertTrue(a1.equals(a2));
- Assert.assertTrue(a1.equals(a3));
- Assert.assertFalse(a1.equals(a4));
- }
-
- @Test
- public void testEquals() {
- Assert.assertTrue(ARef.basesMatch(A));
- Assert.assertFalse(ARef.equals(A));
- Assert.assertFalse(ARef.equals(ATIns));
- Assert.assertFalse(ARef.equals(ATCIns));
-
- Assert.assertTrue(T.basesMatch(T));
- Assert.assertFalse(T.basesMatch(A));
- Assert.assertFalse(T.equals(A));
-
- Assert.assertTrue(ATIns.equals(ATIns));
- Assert.assertFalse(ATIns.equals(ATCIns));
- Assert.assertTrue(ATIns.basesMatch("AT"));
- Assert.assertFalse(ATIns.basesMatch("A"));
- Assert.assertFalse(ATIns.basesMatch("ATC"));
-
- Assert.assertTrue(ATIns.basesMatch("AT"));
- Assert.assertFalse(ATIns.basesMatch("ATC"));
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testBadConstructorArgs1() {
- byte[] foo = null;
- Allele.create(foo);
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testBadConstructorArgs2() {
- Allele.create("x");
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testBadConstructorArgs3() {
- Allele.create("--");
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testBadConstructorArgs4() {
- Allele.create("-A");
- }
-
- @Test (expectedExceptions = IllegalArgumentException.class)
- public void testBadConstructorArgs5() {
- Allele.create("A A");
- }
-
- @Test
- public void testExtend() {
- Assert.assertEquals("AT", Allele.extend(Allele.create("A"), "T".getBytes()).toString());
- Assert.assertEquals("ATA", Allele.extend(Allele.create("A"), "TA".getBytes()).toString());
- Assert.assertEquals("A", Allele.extend(Allele.NO_CALL, "A".getBytes()).toString());
- Assert.assertEquals("ATCGA", Allele.extend(Allele.create("AT"), "CGA".getBytes()).toString());
- Assert.assertEquals("ATCGA", Allele.extend(Allele.create("ATC"), "GA".getBytes()).toString());
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypeLikelihoodsUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypeLikelihoodsUnitTest.java
deleted file mode 100644
index 5621301..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypeLikelihoodsUnitTest.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-
-import org.broad.tribble.TribbleException;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.List;
-
-
-/**
- * Basic unit test for Genotype likelihoods objects
- */
-public class GenotypeLikelihoodsUnitTest extends VariantBaseTest {
- double [] v = new double[]{-10.5, -1.25, -5.11};
- final static String vGLString = "-10.50,-1.25,-5.11";
- final static String vPLString = "93,0,39";
- double[] triAllelic = new double[]{-4.2,-2.0,-3.0,-1.6,0.0,-4.0}; //AA,AB,AC,BB,BC,CC
-
- @Test
- public void testFromVector2() {
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(v);
- assertDoubleArraysAreEqual(gl.getAsVector(), v);
- Assert.assertEquals(gl.getAsString(), vPLString);
- }
-
- @Test
- public void testFromString1() {
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField(vPLString);
- assertDoubleArraysAreEqual(gl.getAsVector(), new double[]{-9.3, 0, -3.9});
- Assert.assertEquals(gl.getAsString(), vPLString);
- }
-
- @Test
- public void testFromString2() {
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromGLField(vGLString);
- assertDoubleArraysAreEqual(gl.getAsVector(), v);
- Assert.assertEquals(gl.getAsString(), vPLString);
- }
-
- @Test (expectedExceptions = TribbleException.class)
- public void testErrorBadFormat() {
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField("adf,b,c");
- gl.getAsVector();
- }
-
- @Test
- public void testGetAsMap(){
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(v);
- //Log scale
- EnumMap<GenotypeType,Double> glMap = gl.getAsMap(false);
- Assert.assertEquals(v[GenotypeType.HOM_REF.ordinal()-1],glMap.get(GenotypeType.HOM_REF));
- Assert.assertEquals(v[GenotypeType.HET.ordinal()-1],glMap.get(GenotypeType.HET));
- Assert.assertEquals(v[GenotypeType.HOM_VAR.ordinal()-1],glMap.get(GenotypeType.HOM_VAR));
-
- //Linear scale
- glMap = gl.getAsMap(true);
- double [] vl = GeneralUtils.normalizeFromLog10(v);
- Assert.assertEquals(vl[GenotypeType.HOM_REF.ordinal()-1],glMap.get(GenotypeType.HOM_REF));
- Assert.assertEquals(vl[GenotypeType.HET.ordinal()-1],glMap.get(GenotypeType.HET));
- Assert.assertEquals(vl[GenotypeType.HOM_VAR.ordinal()-1],glMap.get(GenotypeType.HOM_VAR));
-
- //Test missing likelihoods
- gl = GenotypeLikelihoods.fromPLField(".");
- glMap = gl.getAsMap(false);
- Assert.assertNull(glMap);
-
- }
-
- @Test
- public void testCalculateNumLikelihoods() {
-
- for (int nAlleles=2; nAlleles<=5; nAlleles++)
- // simplest case: diploid
- Assert.assertEquals(GenotypeLikelihoods.numLikelihoods(nAlleles, 2), nAlleles*(nAlleles+1)/2);
-
- // some special cases: ploidy = 20, #alleles = 4
- Assert.assertEquals(GenotypeLikelihoods.numLikelihoods(4, 20), 1771);
- }
-
- @Test
- public void testGetLog10GQ(){
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField(vPLString);
-
- //GQ for the best guess genotype
- Assert.assertEquals(gl.getLog10GQ(GenotypeType.HET),-3.9);
-
- double[] test = GeneralUtils.normalizeFromLog10(gl.getAsVector());
-
- //GQ for the other genotypes
- Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_REF), Math.log10(1.0 - test[GenotypeType.HOM_REF.ordinal()-1]));
- Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_VAR), Math.log10(1.0 - test[GenotypeType.HOM_VAR.ordinal()-1]));
-
- //Test missing likelihoods
- gl = GenotypeLikelihoods.fromPLField(".");
- Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_REF),Double.NEGATIVE_INFINITY);
- Assert.assertEquals(gl.getLog10GQ(GenotypeType.HET),Double.NEGATIVE_INFINITY);
- Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_VAR),Double.NEGATIVE_INFINITY);
-
- }
-
- @Test
- public void testgetQualFromLikelihoods() {
- double[] likelihoods = new double[]{-1, 0, -2};
- // qual values we expect for each possible "best" genotype
- double[] expectedQuals = new double[]{-0.04100161, -1, -0.003930294};
-
- for ( int i = 0; i < likelihoods.length; i++ ) {
- Assert.assertEquals(GenotypeLikelihoods.getGQLog10FromLikelihoods(i, likelihoods), expectedQuals[i], 1e-6,
- "GQ value for genotype " + i + " was not calculated correctly");
- }
- }
-
- // this test is completely broken, the method is wrong.
- public void testGetQualFromLikelihoodsMultiAllelicBroken() {
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(triAllelic);
- double actualGQ = gl.getLog10GQ(GenotypeType.HET);
- double expectedGQ = 1.6;
- Assert.assertEquals(actualGQ,expectedGQ);
- }
-
- public void testGetQualFromLikelihoodsMultiAllelic() {
- GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(triAllelic);
- Allele ref = Allele.create((byte)'A',true);
- Allele alt1 = Allele.create((byte)'C');
- Allele alt2 = Allele.create((byte)'T');
- List<Allele> allAlleles = Arrays.asList(ref,alt1,alt2);
- List<Allele> gtAlleles = Arrays.asList(alt1,alt2);
- GenotypeBuilder gtBuilder = new GenotypeBuilder();
- gtBuilder.alleles(gtAlleles);
- double actualGQ = gl.getLog10GQ(gtBuilder.make(),allAlleles);
- double expectedGQ = 1.6;
- Assert.assertEquals(actualGQ,expectedGQ);
- }
-
- private void assertDoubleArraysAreEqual(double[] v1, double[] v2) {
- Assert.assertEquals(v1.length, v2.length);
- for ( int i = 0; i < v1.length; i++ ) {
- Assert.assertEquals(v1[i], v2[i], 1e-6);
- }
- }
-
- @Test
- public void testCalculatePLindex(){
- int counter = 0;
- for ( int i = 0; i <= 3; i++ ) {
- for ( int j = i; j <= 3; j++ ) {
- Assert.assertEquals(GenotypeLikelihoods.calculatePLindex(i, j), GenotypeLikelihoods.PLindexConversion[counter++], "PL index of alleles " + i + "," + j + " was not calculated correctly");
- }
- }
- }
-
- @Test
- public void testGetAllelePair(){
- allelePairTest(0, 0, 0);
- allelePairTest(1, 0, 1);
- allelePairTest(2, 1, 1);
- allelePairTest(3, 0, 2);
- allelePairTest(4, 1, 2);
- allelePairTest(5, 2, 2);
- allelePairTest(6, 0, 3);
- allelePairTest(7, 1, 3);
- allelePairTest(8, 2, 3);
- allelePairTest(9, 3, 3);
- }
-
- private void allelePairTest(int PLindex, int allele1, int allele2) {
- Assert.assertEquals(GenotypeLikelihoods.getAllelePair(PLindex).alleleIndex1, allele1, "allele index " + allele1 + " from PL index " + PLindex + " was not calculated correctly");
- Assert.assertEquals(GenotypeLikelihoods.getAllelePair(PLindex).alleleIndex2, allele2, "allele index " + allele2 + " from PL index " + PLindex + " was not calculated correctly");
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypeUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypeUnitTest.java
deleted file mode 100644
index 8d0d2af..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypeUnitTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-
-import org.broadinstitute.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-
-public class GenotypeUnitTest extends VariantBaseTest {
- Allele A, Aref, T;
-
- @BeforeSuite
- public void before() {
- A = Allele.create("A");
- Aref = Allele.create("A", true);
- T = Allele.create("T");
- }
-
- private static final GenotypeBuilder makeGB() {
- return new GenotypeBuilder("misc");
- }
-
- @Test
- public void testFilters() {
- Assert.assertFalse(makeGB().make().isFiltered(), "by default Genotypes must be PASS");
- Assert.assertNull(makeGB().make().getFilters(), "by default Genotypes must be PASS => getFilters() == null");
- Assert.assertFalse(makeGB().filter(null).make().isFiltered(), "setting filter == null => Genotypes must be PASS");
- Assert.assertNull(makeGB().filter(null).make().getFilters(), "Genotypes PASS => getFilters == null");
- Assert.assertFalse(makeGB().filter("PASS").make().isFiltered(), "setting filter == PASS => Genotypes must be PASS");
- Assert.assertNull(makeGB().filter("PASS").make().getFilters(), "Genotypes PASS => getFilters == null");
- Assert.assertTrue(makeGB().filter("x").make().isFiltered(), "setting filter != null => Genotypes must be PASS");
- Assert.assertEquals(makeGB().filter("x").make().getFilters(), "x", "Should get back the expected filter string");
- Assert.assertEquals(makeGB().filters("x", "y").make().getFilters(), "x;y", "Multiple filter field values should be joined with ;");
- Assert.assertEquals(makeGB().filters("x", "y", "z").make().getFilters(), "x;y;z", "Multiple filter field values should be joined with ;");
- Assert.assertTrue(makeGB().filters("x", "y", "z").make().isFiltered(), "Multiple filter values should be filtered");
- Assert.assertEquals(makeGB().filter("x;y;z").make().getFilters(), "x;y;z", "Multiple filter field values should be joined with ;");
- }
-
-// public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, Set<String> filters, Map<String, ?> attributes, boolean isPhased) {
-// public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, Set<String> filters, Map<String, ?> attributes, boolean isPhased, double[] log10Likelihoods) {
-// public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, double[] log10Likelihoods)
-// public Genotype(String sampleName, List<Allele> alleles, double negLog10PError)
-// public Genotype(String sampleName, List<Allele> alleles)
-// public List<Allele> getAlleles()
-// public List<Allele> getAlleles(Allele allele)
-// public Allele getAllele(int i)
-// public boolean isPhased()
-// public int getPloidy()
-// public Type getType()
-// public boolean isHom()
-// public boolean isHomRef()
-// public boolean isHomVar()
-// public boolean isHet()
-// public boolean isNoCall()
-// public boolean isCalled()
-// public boolean isAvailable()
-// public boolean hasLikelihoods()
-// public GenotypeLikelihoods getLikelihoods()
-// public boolean sameGenotype(Genotype other)
-// public boolean sameGenotype(Genotype other, boolean ignorePhase)
-// public String getSampleName()
-// public boolean hasLog10PError()
-// public double getLog10PError()
-// public double getPhredScaledQual()
-// public boolean hasExtendedAttribute(String key)
-// public Object getExtendedAttribute(String key)
-// public Object getExtendedAttribute(String key, Object defaultValue)
-// public String getAttributeAsString(String key, String defaultValue)
-// public int getAttributeAsInt(String key, int defaultValue)
-// public double getAttributeAsDouble(String key, double defaultValue)
-// public boolean getAttributeAsBoolean(String key, boolean defaultValue)
-}
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypesContextUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypesContextUnitTest.java
deleted file mode 100644
index 180bc76..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/GenotypesContextUnitTest.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-
-import org.broad.tribble.util.ParsingUtils;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.*;
-
-
-public class GenotypesContextUnitTest extends VariantBaseTest {
- Allele Aref, C, T;
- Genotype AA, AT, TT, AC, CT, CC, MISSING;
- List<Genotype> allGenotypes;
-
- @BeforeSuite
- public void before() {
- C = Allele.create("C");
- Aref = Allele.create("A", true);
- T = Allele.create("T");
- AA = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- AT = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- TT = GenotypeBuilder.create("TT", Arrays.asList(T, T));
- AC = GenotypeBuilder.create("AC", Arrays.asList(Aref, C));
- CT = GenotypeBuilder.create("CT", Arrays.asList(C, T));
- CC = GenotypeBuilder.create("CC", Arrays.asList(C, C));
- MISSING = GenotypeBuilder.create("MISSING", Arrays.asList(C, C));
-
- allGenotypes = Arrays.asList(AA, AT, TT, AC, CT, CC);
- }
-
- // --------------------------------------------------------------------------------
- //
- // Provider
- //
- // --------------------------------------------------------------------------------
-
- private interface ContextMaker {
- public GenotypesContext make(List<Genotype> initialSamples);
- }
-
- private ContextMaker baseMaker = new ContextMaker() {
- @Override
- public GenotypesContext make(final List<Genotype> initialSamples) {
- return GenotypesContext.copy(initialSamples);
- }
-
- @Override
- public String toString() {
- return "GenotypesContext";
- }
- };
-
- private final class lazyMaker implements LazyGenotypesContext.LazyParser, ContextMaker {
- @Override
- public LazyGenotypesContext.LazyData parse(final Object data) {
- GenotypesContext gc = GenotypesContext.copy((List<Genotype>)data);
- gc.ensureSampleNameMap();
- gc.ensureSampleOrdering();
- return new LazyGenotypesContext.LazyData(gc.notToBeDirectlyAccessedGenotypes, gc.sampleNamesInOrder, gc.sampleNameToOffset);
- }
-
- @Override
- public GenotypesContext make(final List<Genotype> initialSamples) {
- return new LazyGenotypesContext(this, initialSamples, initialSamples.size());
- }
-
- @Override
- public String toString() {
- return "LazyGenotypesContext";
- }
- }
-
- private Collection<ContextMaker> allMakers = Arrays.asList(baseMaker, new lazyMaker());
-
- private class GenotypesContextProvider {
- String name;
- ContextMaker maker;
- final List<Genotype> initialSamples;
-
- private GenotypesContextProvider(ContextMaker maker, List<Genotype> initialSamples) {
- this.name = String.format("%s with %d samples", maker.toString(), initialSamples.size());
- this.maker = maker;
- this.initialSamples = initialSamples;
- }
-
- public GenotypesContext makeContext() {
- return maker.make(initialSamples);
- }
- }
-
- @DataProvider(name = "GenotypesContextProvider")
- public Object[][] MakeSampleNamesTest() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
- for ( ContextMaker maker : allMakers ) {
- for ( int i = 0; i < allGenotypes.size(); i++ ) {
- List<Genotype> samples = allGenotypes.subList(0, i);
- // sorted
- tests.add(new Object[]{new GenotypesContextProvider(maker, samples)});
- // unsorted
- tests.add(new Object[]{new GenotypesContextProvider(maker, GeneralUtils.reverse(samples))});
- }
- }
-
- return tests.toArray(new Object[][]{});
- }
-
- private final static void testIterable(Iterable<Genotype> genotypeIterable, Set<String> expectedNames) {
- int count = 0;
- for ( final Genotype g : genotypeIterable ) {
- Assert.assertTrue(expectedNames.contains(g.getSampleName()));
- count++;
- }
- Assert.assertEquals(count, expectedNames.size(), "Iterable returned unexpected number of genotypes");
- }
-
- @Test(dataProvider = "GenotypesContextProvider")
- public void testInitialSamplesAreAsExpected(GenotypesContextProvider cfg) {
- testGenotypesContextContainsExpectedSamples(cfg.makeContext(), cfg.initialSamples);
- }
-
- private final void testGenotypesContextContainsExpectedSamples(GenotypesContext gc, List<Genotype> expectedSamples) {
- Assert.assertEquals(gc.isEmpty(), expectedSamples.isEmpty());
- Assert.assertEquals(gc.size(), expectedSamples.size());
-
- // get(index) is doing the right thing
- for ( int i = 0; i < expectedSamples.size(); i++ ) {
- Assert.assertEquals(gc.get(i), expectedSamples.get(i));
- }
- Assert.assertFalse(gc.containsSample(MISSING.getSampleName()));
-
- // we can fetch samples by name
- final Set<String> genotypeNames = VariantContextUtils.genotypeNames(expectedSamples);
- for ( final String name : genotypeNames ) {
- Assert.assertTrue(gc.containsSample(name));
- }
- Assert.assertFalse(gc.containsSample(MISSING.getSampleName()));
-
- // all of the iterators are working
- testIterable(gc.iterateInSampleNameOrder(), genotypeNames);
- testIterable(gc, genotypeNames);
- testIterable(gc.iterateInSampleNameOrder(genotypeNames), genotypeNames);
- if ( ! genotypeNames.isEmpty() ) {
- Set<String> first = Collections.singleton(genotypeNames.iterator().next());
- testIterable(gc.iterateInSampleNameOrder(first), first);
- }
-
- // misc. utils are working as expected
- assertEqualsSet(gc.getSampleNames(), genotypeNames, "gc sample names vs. expected sample names");
- Assert.assertTrue(ParsingUtils.isSorted(gc.getSampleNamesOrderedByName()));
- Assert.assertTrue(ParsingUtils.isSorted(gc.iterateInSampleNameOrder()));
- Assert.assertTrue(gc.containsSamples(genotypeNames));
-
- final Set<String> withMissing = new HashSet<String>(Arrays.asList(MISSING.getSampleName()));
- withMissing.addAll(genotypeNames);
- Assert.assertFalse(gc.containsSamples(withMissing));
- }
-
- @Test(enabled = true, dataProvider = "GenotypesContextProvider")
- public void testImmutable(GenotypesContextProvider cfg) {
- GenotypesContext gc = cfg.makeContext();
- Assert.assertEquals(gc.isMutable(), true);
- gc.immutable();
- Assert.assertEquals(gc.isMutable(), false);
- }
-
- @Test(enabled = true, dataProvider = "GenotypesContextProvider", expectedExceptions = Throwable.class )
- public void testImmutableCall1(GenotypesContextProvider cfg) {
- GenotypesContext gc = cfg.makeContext();
- gc.immutable();
- gc.add(MISSING);
- }
-
- @Test(enabled = true, dataProvider = "GenotypesContextProvider")
- public void testClear(GenotypesContextProvider cfg) {
- GenotypesContext gc = cfg.makeContext();
- gc.clear();
- testGenotypesContextContainsExpectedSamples(gc, Collections.<Genotype>emptyList());
- }
-
- private static final List<Genotype> with(List<Genotype> genotypes, Genotype ... add) {
- List<Genotype> l = new ArrayList<Genotype>(genotypes);
- l.addAll(Arrays.asList(add));
- return l;
- }
-
- private static final List<Genotype> without(List<Genotype> genotypes, Genotype ... remove) {
- List<Genotype> l = new ArrayList<Genotype>(genotypes);
- l.removeAll(Arrays.asList(remove));
- return l;
- }
-
- @Test(enabled = true, dataProvider = "GenotypesContextProvider")
- public void testAdds(GenotypesContextProvider cfg) {
- Genotype add1 = GenotypeBuilder.create("add1", Arrays.asList(Aref, Aref));
- Genotype add2 = GenotypeBuilder.create("add2", Arrays.asList(Aref, Aref));
-
- GenotypesContext gc = cfg.makeContext();
- gc.add(add1);
- testGenotypesContextContainsExpectedSamples(gc, with(cfg.initialSamples, add1));
-
- gc = cfg.makeContext();
- gc.add(add1);
- gc.add(add2);
- testGenotypesContextContainsExpectedSamples(gc, with(cfg.initialSamples, add1, add2));
-
- gc = cfg.makeContext();
- gc.addAll(Arrays.asList(add1, add2));
- testGenotypesContextContainsExpectedSamples(gc, with(cfg.initialSamples, add1, add2));
- }
-
- @Test(enabled = true, dataProvider = "GenotypesContextProvider")
- public void testRemoves(GenotypesContextProvider cfg) {
- Genotype rm1 = AA;
- Genotype rm2 = AC;
-
- GenotypesContext gc = cfg.makeContext();
- if (gc.size() > 1) {
- Genotype rm = gc.get(0);
- gc.remove(rm);
- testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm));
- }
-
- gc = cfg.makeContext();
- gc.remove(rm1);
- testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm1));
-
- gc = cfg.makeContext();
- gc.remove(rm1);
- gc.remove(rm2);
- testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm1, rm2));
-
- gc = cfg.makeContext();
- gc.removeAll(Arrays.asList(rm1, rm2));
- testGenotypesContextContainsExpectedSamples(gc, without(cfg.initialSamples, rm1, rm2));
-
- gc = cfg.makeContext();
- HashSet<Genotype> expected = new HashSet<Genotype>();
- if ( gc.contains(rm1) ) expected.add(rm1);
- if ( gc.contains(rm2) ) expected.add(rm2);
- gc.retainAll(Arrays.asList(rm1, rm2));
-
- // ensure that the two lists are the same
- assertEqualsSet(new HashSet<Genotype>(gc.getGenotypes()), expected, "gc genotypes vs. expected");
- // because the list order can change, we use the gc's list itself
- testGenotypesContextContainsExpectedSamples(gc, gc.getGenotypes());
- }
-
- @Test(enabled = true, dataProvider = "GenotypesContextProvider")
- public void testSet(GenotypesContextProvider cfg) {
- Genotype set = GenotypeBuilder.create("replace", Arrays.asList(Aref, Aref));
- int n = cfg.makeContext().size();
- for ( int i = 0; i < n; i++ ) {
- GenotypesContext gc = cfg.makeContext();
- Genotype setted = gc.set(i, set);
- Assert.assertNotNull(setted);
- ArrayList<Genotype> l = new ArrayList<Genotype>(cfg.initialSamples);
- l.set(i, set);
- testGenotypesContextContainsExpectedSamples(gc, l);
- }
- }
-
- @Test(enabled = true, dataProvider = "GenotypesContextProvider")
- public void testReplace(GenotypesContextProvider cfg) {
- int n = cfg.makeContext().size();
- for ( int i = 0; i < n; i++ ) {
- GenotypesContext gc = cfg.makeContext();
- Genotype toReplace = gc.get(i);
- Genotype replacement = GenotypeBuilder.create(toReplace.getSampleName(), Arrays.asList(Aref, Aref));
- gc.replace(replacement);
- ArrayList<Genotype> l = new ArrayList<Genotype>(cfg.initialSamples);
- l.set(i, replacement);
- Assert.assertEquals(replacement, gc.get(i));
- testGenotypesContextContainsExpectedSamples(gc, l);
- }
- }
-
- // subset to samples tested in VariantContextUnitTest
-}
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/VariantContextTestProvider.java b/src/tests/java/org/broadinstitute/variant/variantcontext/VariantContextTestProvider.java
deleted file mode 100644
index 2ea0bed..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/VariantContextTestProvider.java
+++ /dev/null
@@ -1,990 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import org.broad.tribble.FeatureCodec;
-import org.broad.tribble.FeatureCodecHeader;
-import org.broad.tribble.readers.LineIterator;
-import org.broad.tribble.readers.LineIteratorImpl;
-import org.broad.tribble.readers.LineReaderUtil;
-import org.broad.tribble.readers.PositionalBufferedStream;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.bcf2.BCF2Codec;
-import org.broadinstitute.variant.utils.GeneralUtils;
-import org.broadinstitute.variant.variantcontext.writer.Options;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriter;
-import org.broadinstitute.variant.vcf.*;
-import org.testng.Assert;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Routines for generating all sorts of VCs for testing
- *
- * @author Your Name
- * @since Date created
- */
-public class VariantContextTestProvider {
- final private static boolean ENABLE_GENOTYPE_TESTS = true;
- final private static boolean ENABLE_A_AND_G_TESTS = true;
- final private static boolean ENABLE_VARARRAY_TESTS = true;
- final private static boolean ENABLE_PLOIDY_TESTS = true;
- final private static boolean ENABLE_PL_TESTS = true;
- final private static boolean ENABLE_SYMBOLIC_ALLELE_TESTS = true;
- final private static boolean ENABLE_SOURCE_VCF_TESTS = true;
- final private static boolean ENABLE_VARIABLE_LENGTH_GENOTYPE_STRING_TESTS = true;
- final private static List<Integer> TWENTY_INTS = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
-
- private static VCFHeader syntheticHeader;
- final static List<VariantContextTestData> TEST_DATAs = new ArrayList<VariantContextTestData>();
- private static VariantContext ROOT;
-
- private final static List<File> testSourceVCFs = new ArrayList<File>();
- static {
- testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf"));
- testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "ex2.vcf"));
- testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "dbsnp_135.b37.1000.vcf"));
- if ( ENABLE_SYMBOLIC_ALLELE_TESTS ) {
- testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "diagnosis_targets_testfile.vcf"));
- testSourceVCFs.add(new File(VariantBaseTest.variantTestDataRoot + "VQSR.mixedTest.recal"));
- }
- }
-
- public static class VariantContextContainer {
- private VCFHeader header;
- private Iterable<VariantContext> vcs;
-
- public VariantContextContainer( VCFHeader header, Iterable<VariantContext> vcs ) {
- this.header = header;
- this.vcs = vcs;
- }
-
- public VCFHeader getHeader() {
- return header;
- }
-
- public Iterable<VariantContext> getVCs() {
- return vcs;
- }
- }
-
- public abstract static class VariantContextIOTest<CODECTYPE> {
- public String toString() {
- return "VariantContextIOTest:" + getExtension();
- }
- public abstract String getExtension();
- public abstract CODECTYPE makeCodec();
- public abstract VariantContextWriter makeWriter(final File outputFile, final EnumSet<Options> baseOptions);
-
- public abstract VariantContextContainer readAllVCs(final File input) throws IOException;
-
- public List<VariantContext> preprocess(final VCFHeader header, List<VariantContext> vcsBeforeIO) {
- return vcsBeforeIO;
- }
-
- public List<VariantContext> postprocess(final VCFHeader header, List<VariantContext> vcsAfterIO) {
- return vcsAfterIO;
- }
- }
-
- public static class VariantContextTestData {
- public final VCFHeader header;
- public List<VariantContext> vcs;
-
- public VariantContextTestData(final VCFHeader header, final VariantContextBuilder builder) {
- this(header, Collections.singletonList(builder.fullyDecoded(true).make()));
- }
-
- public VariantContextTestData(final VCFHeader header, final List<VariantContext> vcs) {
- final Set<String> samples = new HashSet<String>();
- for ( final VariantContext vc : vcs )
- if ( vc.hasGenotypes() )
- samples.addAll(vc.getSampleNames());
- this.header = samples.isEmpty() ? header : new VCFHeader(header.getMetaDataInSortedOrder(), samples);
- this.vcs = vcs;
- }
-
- public boolean hasGenotypes() {
- return vcs.get(0).hasGenotypes();
- }
-
- public String toString() {
- StringBuilder b = new StringBuilder();
- b.append("VariantContextTestData: [");
- final VariantContext vc = vcs.get(0);
- final VariantContextBuilder builder = new VariantContextBuilder(vc);
- builder.noGenotypes();
- b.append(builder.make().toString());
- if ( vc.getNSamples() < 5 ) {
- for ( final Genotype g : vc.getGenotypes() )
- b.append(g.toString());
- } else {
- b.append(" nGenotypes = ").append(vc.getNSamples());
- }
-
- if ( vcs.size() > 1 ) b.append(" ----- with another ").append(vcs.size() - 1).append(" VariantContext records");
- b.append("]");
- return b.toString();
- }
- }
-
- private final static VariantContextBuilder builder() {
- return new VariantContextBuilder(ROOT);
- }
-
- private final static void add(VariantContextBuilder builder) {
- TEST_DATAs.add(new VariantContextTestData(syntheticHeader, builder));
- }
-
- public static void initializeTests() throws IOException {
- createSyntheticHeader();
- makeSyntheticTests();
- makeEmpiricalTests();
- }
-
- private static void makeEmpiricalTests() throws IOException {
- if ( ENABLE_SOURCE_VCF_TESTS ) {
- for ( final File file : testSourceVCFs ) {
- VCFCodec codec = new VCFCodec();
- VariantContextContainer x = readAllVCs( file, codec );
- List<VariantContext> fullyDecoded = new ArrayList<VariantContext>();
-
- for ( final VariantContext raw : x.getVCs() ) {
- if ( raw != null )
- fullyDecoded.add(raw.fullyDecode(x.getHeader(), false));
- }
-
- TEST_DATAs.add(new VariantContextTestData(x.getHeader(), fullyDecoded));
- }
- }
- }
-
- private final static void addHeaderLine(final Set<VCFHeaderLine> metaData, final String id, final int count, final VCFHeaderLineType type) {
- metaData.add(new VCFInfoHeaderLine(id, count, type, "x"));
- if ( type != VCFHeaderLineType.Flag )
- metaData.add(new VCFFormatHeaderLine(id, count, type, "x"));
- }
-
- private final static void addHeaderLine(final Set<VCFHeaderLine> metaData, final String id, final VCFHeaderLineCount count, final VCFHeaderLineType type) {
- metaData.add(new VCFInfoHeaderLine(id, count, type, "x"));
- if ( type != VCFHeaderLineType.Flag )
- metaData.add(new VCFFormatHeaderLine(id, count, type, "x"));
- }
-
- private static void createSyntheticHeader() {
- Set<VCFHeaderLine> metaData = new TreeSet<VCFHeaderLine>();
-
- addHeaderLine(metaData, "STRING1", 1, VCFHeaderLineType.String);
- addHeaderLine(metaData, "END", 1, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "STRING3", 3, VCFHeaderLineType.String);
- addHeaderLine(metaData, "STRING20", 20, VCFHeaderLineType.String);
- addHeaderLine(metaData, "VAR.INFO.STRING", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String);
-
- addHeaderLine(metaData, "GT", 1, VCFHeaderLineType.String);
- addHeaderLine(metaData, "GQ", 1, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "ADA", VCFHeaderLineCount.A, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "PL", VCFHeaderLineCount.G, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "GS", 2, VCFHeaderLineType.String);
- addHeaderLine(metaData, "GV", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String);
- addHeaderLine(metaData, "FT", 1, VCFHeaderLineType.String);
-
- // prep the header
- metaData.add(new VCFContigHeaderLine(Collections.singletonMap("ID", "1"), 0));
-
- metaData.add(new VCFFilterHeaderLine("FILTER1"));
- metaData.add(new VCFFilterHeaderLine("FILTER2"));
-
- addHeaderLine(metaData, "INT1", 1, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "INT3", 3, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "INT20", 20, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "INT.VAR", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer);
- addHeaderLine(metaData, "FLOAT1", 1, VCFHeaderLineType.Float);
- addHeaderLine(metaData, "FLOAT3", 3, VCFHeaderLineType.Float);
- addHeaderLine(metaData, "FLAG", 0, VCFHeaderLineType.Flag);
-
- syntheticHeader = new VCFHeader(metaData);
- }
-
-
- private static void makeSyntheticTests() {
- VariantContextBuilder rootBuilder = new VariantContextBuilder();
- rootBuilder.source("test");
- rootBuilder.loc("1", 10, 10);
- rootBuilder.alleles("A", "C");
- rootBuilder.unfiltered();
- ROOT = rootBuilder.make();
-
- add(builder());
- add(builder().alleles("A"));
- add(builder().alleles("A", "C", "T"));
- add(builder().alleles("A", "AC"));
- add(builder().alleles("A", "ACAGT"));
- add(builder().loc("1", 10, 11).alleles("AC", "A"));
- add(builder().loc("1", 10, 13).alleles("ACGT", "A"));
-
- // make sure filters work
- add(builder().unfiltered());
- add(builder().passFilters());
- add(builder().filters("FILTER1"));
- add(builder().filters("FILTER1", "FILTER2"));
-
- add(builder().log10PError(VariantContext.NO_LOG10_PERROR));
- add(builder().log10PError(-1));
- add(builder().log10PError(-1.234e6));
-
- add(builder().noID());
- add(builder().id("rsID12345"));
-
-
- add(builder().attribute("INT1", 1));
- add(builder().attribute("INT1", 100));
- add(builder().attribute("INT1", 1000));
- add(builder().attribute("INT1", 100000));
- add(builder().attribute("INT1", null));
- add(builder().attribute("INT3", Arrays.asList(1, 2, 3)));
- add(builder().attribute("INT3", Arrays.asList(1000, 2000, 3000)));
- add(builder().attribute("INT3", Arrays.asList(100000, 200000, 300000)));
- add(builder().attribute("INT3", null));
- add(builder().attribute("INT20", TWENTY_INTS));
-
- add(builder().attribute("FLOAT1", 1.0));
- add(builder().attribute("FLOAT1", 100.0));
- add(builder().attribute("FLOAT1", 1000.0));
- add(builder().attribute("FLOAT1", 100000.0));
- add(builder().attribute("FLOAT1", null));
- add(builder().attribute("FLOAT3", Arrays.asList(1.0, 2.0, 3.0)));
- add(builder().attribute("FLOAT3", Arrays.asList(1000.0, 2000.0, 3000.0)));
- add(builder().attribute("FLOAT3", Arrays.asList(100000.0, 200000.0, 300000.0)));
- add(builder().attribute("FLOAT3", null));
-
- add(builder().attribute("FLAG", true));
- //add(builder().attribute("FLAG", false)); // NOTE -- VCF doesn't allow false flags
-
- add(builder().attribute("STRING1", "s1"));
- add(builder().attribute("STRING1", null));
- add(builder().attribute("STRING3", Arrays.asList("s1", "s2", "s3")));
- add(builder().attribute("STRING3", null));
- add(builder().attribute("STRING20", Arrays.asList("s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15", "s16", "s17", "s18", "s19", "s20")));
-
- add(builder().attribute("VAR.INFO.STRING", "s1"));
- add(builder().attribute("VAR.INFO.STRING", Arrays.asList("s1", "s2")));
- add(builder().attribute("VAR.INFO.STRING", Arrays.asList("s1", "s2", "s3")));
- add(builder().attribute("VAR.INFO.STRING", null));
-
- if ( ENABLE_GENOTYPE_TESTS ) {
- addGenotypesToTestData();
- addComplexGenotypesTest();
- }
-
- if ( ENABLE_A_AND_G_TESTS )
- addGenotypesAndGTests();
-
- if ( ENABLE_SYMBOLIC_ALLELE_TESTS )
- addSymbolicAlleleTests();
- }
-
- private static void addSymbolicAlleleTests() {
- // two tests to ensure that the end is computed correctly when there's (and not) an END field present
- add(builder().alleles("N", "<VQSR>").start(10).stop(11).attribute("END", 11));
- add(builder().alleles("N", "<VQSR>").start(10).stop(10));
- }
-
- private static void addGenotypesToTestData() {
- final ArrayList<VariantContext> sites = new ArrayList<VariantContext>();
-
- sites.add(builder().alleles("A").make());
- sites.add(builder().alleles("A", "C", "T").make());
- sites.add(builder().alleles("A", "AC").make());
- sites.add(builder().alleles("A", "ACAGT").make());
-
- for ( VariantContext site : sites ) {
- addGenotypes(site);
- }
- }
-
- private static void addGenotypeTests( final VariantContext site, Genotype ... genotypes ) {
- // for each sites VC, we are going to add create two root genotypes.
- // The first is the primary, and will be added to each new test
- // The second is variable. In some tests it's absent (testing 1 genotype), in others it is duplicated
- // 1 once, 10, 100, or 1000 times to test scaling
-
- final VariantContextBuilder builder = new VariantContextBuilder(site);
-
- // add a single context
- builder.genotypes(genotypes[0]);
- add(builder);
-
- if ( genotypes.length > 1 ) {
- // add all
- add(builder.genotypes(Arrays.asList(genotypes)));
-
- // add all with the last replicated 10x and 100x times
- for ( int nCopiesOfLast : Arrays.asList(10, 100, 1000) ) {
- final GenotypesContext gc = new GenotypesContext();
- final Genotype last = genotypes[genotypes.length-1];
- for ( int i = 0; i < genotypes.length - 1; i++ )
- gc.add(genotypes[i]);
- for ( int i = 0; i < nCopiesOfLast; i++ )
- gc.add(new GenotypeBuilder(last).name("copy" + i).make());
- add(builder.genotypes(gc));
- }
- }
- }
-
- private static void addGenotypes( final VariantContext site) {
- // test ref/ref
- final Allele ref = site.getReference();
- final Allele alt1 = site.getNAlleles() > 1 ? site.getAlternateAllele(0) : null;
- final Genotype homRef = GenotypeBuilder.create("homRef", Arrays.asList(ref, ref));
- addGenotypeTests(site, homRef);
-
- if ( alt1 != null ) {
- final Genotype het = GenotypeBuilder.create("het", Arrays.asList(ref, alt1));
- final Genotype homVar = GenotypeBuilder.create("homVar", Arrays.asList(alt1, alt1));
- addGenotypeTests(site, homRef, het);
- addGenotypeTests(site, homRef, het, homVar);
-
- // test no GT at all
- addGenotypeTests(site, new GenotypeBuilder("noGT", new ArrayList<Allele>(0)).attribute("INT1", 10).make());
-
- final List<Allele> noCall = Arrays.asList(Allele.NO_CALL, Allele.NO_CALL);
-
- // ploidy
- if ( ENABLE_PLOIDY_TESTS ) {
- addGenotypeTests(site,
- GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
- GenotypeBuilder.create("hap", Arrays.asList(ref)));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("noCall", noCall),
- GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
- GenotypeBuilder.create("hap", Arrays.asList(ref)));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("noCall", noCall),
- GenotypeBuilder.create("noCall2", noCall),
- GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
- GenotypeBuilder.create("hap", Arrays.asList(ref)));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
- GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("noCall", noCall),
- GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
- GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("noCall", noCall),
- GenotypeBuilder.create("noCall2", noCall),
- GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
- GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("nocall", noCall),
- GenotypeBuilder.create("dip", Arrays.asList(ref, alt1)),
- GenotypeBuilder.create("tet", Arrays.asList(ref, alt1, alt1)));
- }
-
-
- //
- //
- // TESTING PHASE
- //
- //
- final Genotype gUnphased = new GenotypeBuilder("gUnphased", Arrays.asList(ref, alt1)).make();
- final Genotype gPhased = new GenotypeBuilder("gPhased", Arrays.asList(ref, alt1)).phased(true).make();
- final Genotype gPhased2 = new GenotypeBuilder("gPhased2", Arrays.asList(alt1, alt1)).phased(true).make();
- final Genotype gPhased3 = new GenotypeBuilder("gPhased3", Arrays.asList(ref, ref)).phased(true).make();
- final Genotype haploidNoPhase = new GenotypeBuilder("haploidNoPhase", Arrays.asList(ref)).make();
- addGenotypeTests(site, gUnphased, gPhased);
- addGenotypeTests(site, gUnphased, gPhased2);
- addGenotypeTests(site, gUnphased, gPhased3);
- addGenotypeTests(site, gPhased, gPhased2);
- addGenotypeTests(site, gPhased, gPhased3);
- addGenotypeTests(site, gPhased2, gPhased3);
- addGenotypeTests(site, haploidNoPhase, gPhased);
- addGenotypeTests(site, haploidNoPhase, gPhased2);
- addGenotypeTests(site, haploidNoPhase, gPhased3);
- addGenotypeTests(site, haploidNoPhase, gPhased, gPhased2);
- addGenotypeTests(site, haploidNoPhase, gPhased, gPhased3);
- addGenotypeTests(site, haploidNoPhase, gPhased2, gPhased3);
- addGenotypeTests(site, haploidNoPhase, gPhased, gPhased2, gPhased3);
-
- final Genotype gUnphasedTet = new GenotypeBuilder("gUnphasedTet", Arrays.asList(ref, alt1, ref, alt1)).make();
- final Genotype gPhasedTet = new GenotypeBuilder("gPhasedTet", Arrays.asList(ref, alt1, alt1, alt1)).phased(true).make();
- addGenotypeTests(site, gUnphasedTet, gPhasedTet);
- }
-
- if ( ENABLE_PL_TESTS ) {
- if ( site.getNAlleles() == 2 ) {
- // testing PLs
- addGenotypeTests(site,
- GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{0, -1, -2}),
- GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2, -3}));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{-1, 0, -2}),
- GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2, -3}));
-
- addGenotypeTests(site,
- GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{-1, 0, -2}),
- GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2000, -1000}));
-
- addGenotypeTests(site, // missing PLs
- GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{-1, 0, -2}),
- GenotypeBuilder.create("g2", Arrays.asList(ref, ref)));
- }
- else if ( site.getNAlleles() == 3 ) {
- // testing PLs
- addGenotypeTests(site,
- GenotypeBuilder.create("g1", Arrays.asList(ref, ref), new double[]{0, -1, -2, -3, -4, -5}),
- GenotypeBuilder.create("g2", Arrays.asList(ref, ref), new double[]{0, -2, -3, -4, -5, -6}));
- }
- }
-
- // test attributes
- addGenotypeTests(site,
- attr("g1", ref, "INT1", 1),
- attr("g2", ref, "INT1", 2));
- addGenotypeTests(site,
- attr("g1", ref, "INT1", 1),
- attr("g2", ref, "INT1"));
- addGenotypeTests(site,
- attr("g1", ref, "INT3", 1, 2, 3),
- attr("g2", ref, "INT3", 4, 5, 6));
- addGenotypeTests(site,
- attr("g1", ref, "INT3", 1, 2, 3),
- attr("g2", ref, "INT3"));
-
- addGenotypeTests(site,
- attr("g1", ref, "INT20", TWENTY_INTS),
- attr("g2", ref, "INT20", TWENTY_INTS));
-
-
- if (ENABLE_VARARRAY_TESTS) {
- addGenotypeTests(site,
- attr("g1", ref, "INT.VAR", 1, 2, 3),
- attr("g2", ref, "INT.VAR", 4, 5),
- attr("g3", ref, "INT.VAR", 6));
- addGenotypeTests(site,
- attr("g1", ref, "INT.VAR", 1, 2, 3),
- attr("g2", ref, "INT.VAR"),
- attr("g3", ref, "INT.VAR", 5));
- }
-
- addGenotypeTests(site,
- attr("g1", ref, "FLOAT1", 1.0),
- attr("g2", ref, "FLOAT1", 2.0));
- addGenotypeTests(site,
- attr("g1", ref, "FLOAT1", 1.0),
- attr("g2", ref, "FLOAT1"));
- addGenotypeTests(site,
- attr("g1", ref, "FLOAT3", 1.0, 2.0, 3.0),
- attr("g2", ref, "FLOAT3", 4.0, 5.0, 6.0));
- addGenotypeTests(site,
- attr("g1", ref, "FLOAT3", 1.0, 2.0, 3.0),
- attr("g2", ref, "FLOAT3"));
-
- if (ENABLE_VARIABLE_LENGTH_GENOTYPE_STRING_TESTS) {
- //
- //
- // TESTING MULTIPLE SIZED LISTS IN THE GENOTYPE FIELD
- //
- //
- addGenotypeTests(site,
- attr("g1", ref, "GS", Arrays.asList("S1", "S2")),
- attr("g2", ref, "GS", Arrays.asList("S3", "S4")));
-
- addGenotypeTests(site, // g1 is missing the string, and g2 is missing FLOAT1
- attr("g1", ref, "FLOAT1", 1.0),
- attr("g2", ref, "GS", Arrays.asList("S3", "S4")));
-
- // variable sized lists
- addGenotypeTests(site,
- attr("g1", ref, "GV", "S1"),
- attr("g2", ref, "GV", Arrays.asList("S3", "S4")));
-
- addGenotypeTests(site,
- attr("g1", ref, "GV", Arrays.asList("S1", "S2")),
- attr("g2", ref, "GV", Arrays.asList("S3", "S4", "S5")));
-
- addGenotypeTests(site, // missing value in varlist of string
- attr("g1", ref, "FLOAT1", 1.0),
- attr("g2", ref, "GV", Arrays.asList("S3", "S4", "S5")));
- }
-
- //
- //
- // TESTING GENOTYPE FILTERS
- //
- //
- addGenotypeTests(site,
- new GenotypeBuilder("g1-x", Arrays.asList(ref, ref)).filters("X").make(),
- new GenotypeBuilder("g2-x", Arrays.asList(ref, ref)).filters("X").make());
- addGenotypeTests(site,
- new GenotypeBuilder("g1-unft", Arrays.asList(ref, ref)).unfiltered().make(),
- new GenotypeBuilder("g2-x", Arrays.asList(ref, ref)).filters("X").make());
- addGenotypeTests(site,
- new GenotypeBuilder("g1-unft", Arrays.asList(ref, ref)).unfiltered().make(),
- new GenotypeBuilder("g2-xy", Arrays.asList(ref, ref)).filters("X", "Y").make());
- addGenotypeTests(site,
- new GenotypeBuilder("g1-unft", Arrays.asList(ref, ref)).unfiltered().make(),
- new GenotypeBuilder("g2-x", Arrays.asList(ref, ref)).filters("X").make(),
- new GenotypeBuilder("g3-xy", Arrays.asList(ref, ref)).filters("X", "Y").make());
- }
-
- private static void addGenotypesAndGTests() {
-// for ( final int ploidy : Arrays.asList(2)) {
- for ( final int ploidy : Arrays.asList(1, 2, 3, 4, 5)) {
- final List<List<String>> alleleCombinations =
- Arrays.asList(
- Arrays.asList("A"),
- Arrays.asList("A", "C"),
- Arrays.asList("A", "C", "G"),
- Arrays.asList("A", "C", "G", "T"));
-
- for ( final List<String> alleles : alleleCombinations ) {
- final VariantContextBuilder vcb = builder().alleles(alleles);
- final VariantContext site = vcb.make();
- final int nAlleles = site.getNAlleles();
- final Allele ref = site.getReference();
-
- // base genotype is ref/.../ref up to ploidy
- final List<Allele> baseGenotype = new ArrayList<Allele>(ploidy);
- for ( int i = 0; i < ploidy; i++) baseGenotype.add(ref);
- final int nPLs = GenotypeLikelihoods.numLikelihoods(nAlleles, ploidy);
-
- // ada is 0, 1, ..., nAlleles - 1
- final List<Integer> ada = new ArrayList<Integer>(nAlleles);
- for ( int i = 0; i < nAlleles - 1; i++ ) ada.add(i);
-
- // pl is 0, 1, ..., up to nPLs (complex calc of nAlleles and ploidy)
- final int[] pl = new int[nPLs];
- for ( int i = 0; i < pl.length; i++ ) pl[i] = i;
-
- final GenotypeBuilder gb = new GenotypeBuilder("ADA_PL_SAMPLE");
- gb.alleles(baseGenotype);
- gb.PL(pl);
- gb.attribute("ADA", nAlleles == 2 ? ada.get(0) : ada);
- vcb.genotypes(gb.make());
-
- add(vcb);
- }
- }
- }
-
- private static Genotype attr(final String name, final Allele ref, final String key, final Object ... value) {
- if ( value.length == 0 )
- return GenotypeBuilder.create(name, Arrays.asList(ref, ref));
- else {
- final Object toAdd = value.length == 1 ? value[0] : Arrays.asList(value);
- return new GenotypeBuilder(name, Arrays.asList(ref, ref)).attribute(key, toAdd).make();
- }
- }
-
- public static List<VariantContextTestData> generateSiteTests() {
- return TEST_DATAs;
- }
-
- public static void testReaderWriterWithMissingGenotypes(final VariantContextIOTest tester, final VariantContextTestData data) throws IOException {
- final int nSamples = data.header.getNGenotypeSamples();
- if ( nSamples > 2 ) {
- for ( final VariantContext vc : data.vcs )
- if ( vc.isSymbolic() )
- // cannot handle symbolic alleles because they may be weird non-call VCFs
- return;
-
- final File tmpFile = File.createTempFile("testReaderWriter", tester.getExtension());
- tmpFile.deleteOnExit();
-
- // write expected to disk
- final EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY);
- final VariantContextWriter writer = tester.makeWriter(tmpFile, options);
-
- final Set<String> samplesInVCF = new HashSet<String>(data.header.getGenotypeSamples());
- final List<String> missingSamples = Arrays.asList("MISSING1", "MISSING2");
- final List<String> allSamples = new ArrayList<String>(missingSamples);
- allSamples.addAll(samplesInVCF);
-
- final VCFHeader header = new VCFHeader(data.header.getMetaDataInInputOrder(), allSamples);
- writeVCsToFile(writer, header, data.vcs);
-
- // ensure writing of expected == actual
- final VariantContextContainer p = tester.readAllVCs(tmpFile);
- final Iterable<VariantContext> actual = p.getVCs();
-
- int i = 0;
- for ( final VariantContext readVC : actual ) {
- if ( readVC == null ) continue; // sometimes we read null records...
- final VariantContext expected = data.vcs.get(i++);
- for ( final Genotype g : readVC.getGenotypes() ) {
- Assert.assertTrue(allSamples.contains(g.getSampleName()));
- if ( samplesInVCF.contains(g.getSampleName()) ) {
- assertEquals(g, expected.getGenotype(g.getSampleName()));
- } else {
- // missing
- Assert.assertTrue(g.isNoCall());
- }
- }
- }
-
- }
- }
-
- public static void testReaderWriter(final VariantContextIOTest tester, final VariantContextTestData data) throws IOException {
- testReaderWriter(tester, data.header, data.vcs, data.vcs, true);
- }
-
- public static void testReaderWriter(final VariantContextIOTest tester,
- final VCFHeader header,
- final List<VariantContext> expected,
- final Iterable<VariantContext> vcs,
- final boolean recurse) throws IOException {
- final File tmpFile = File.createTempFile("testReaderWriter", tester.getExtension());
- tmpFile.deleteOnExit();
-
- // write expected to disk
- final EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY);
- final VariantContextWriter writer = tester.makeWriter(tmpFile, options);
- writeVCsToFile(writer, header, vcs);
-
- // ensure writing of expected == actual
- final VariantContextContainer p = tester.readAllVCs(tmpFile);
- final Iterable<VariantContext> actual = p.getVCs();
- assertEquals(actual, expected);
-
- if ( recurse ) {
- // if we are doing a recursive test, grab a fresh iterator over the written values
- final Iterable<VariantContext> read = tester.readAllVCs(tmpFile).getVCs();
- testReaderWriter(tester, p.getHeader(), expected, read, false);
- }
- }
-
- private static void writeVCsToFile(final VariantContextWriter writer, final VCFHeader header, final Iterable<VariantContext> vcs) {
- // write
- writer.writeHeader(header);
- for ( VariantContext vc : vcs )
- if (vc != null)
- writer.add(vc);
- writer.close();
- }
-
- public static abstract class VCIterable<SOURCE> implements Iterable<VariantContext>, Iterator<VariantContext> {
- final FeatureCodec<VariantContext, SOURCE> codec;
- final VCFHeader header;
-
- public VCIterable(final FeatureCodec<VariantContext, SOURCE> codec, final VCFHeader header) {
- this.codec = codec;
- this.header = header;
- }
-
- @Override
- public Iterator<VariantContext> iterator() {
- return this;
- }
-
- @Override
- public abstract boolean hasNext();
-
- public abstract SOURCE nextSource();
-
- @Override
- public VariantContext next() {
- try {
- final VariantContext vc = codec.decode(nextSource());
- return vc == null ? null : vc.fullyDecode(header, false);
- } catch ( IOException e ) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void remove() { }
- }
-
- public static VariantContextContainer readAllVCs(final File input, final BCF2Codec codec) throws IOException {
- PositionalBufferedStream headerPbs = new PositionalBufferedStream(new FileInputStream(input));
- FeatureCodecHeader header = codec.readHeader(headerPbs);
- headerPbs.close();
-
- final PositionalBufferedStream pbs = new PositionalBufferedStream(new FileInputStream(input));
- pbs.skip(header.getHeaderEnd());
-
- final VCFHeader vcfHeader = (VCFHeader)header.getHeaderValue();
- return new VariantContextTestProvider.VariantContextContainer(vcfHeader, new VariantContextTestProvider.VCIterable(codec, vcfHeader) {
- @Override
- public boolean hasNext() {
- try {
- return !pbs.isDone();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Object nextSource() {
- return pbs;
- }
- });
- }
-
- public static VariantContextContainer readAllVCs(final File input, final VCFCodec codec) throws FileNotFoundException {
- final LineIterator lineIterator = new LineIteratorImpl(LineReaderUtil.fromBufferedStream(new BufferedInputStream(new FileInputStream(input))));
- final VCFHeader vcfHeader = (VCFHeader) codec.readActualHeader(lineIterator);
- return new VariantContextTestProvider.VariantContextContainer(vcfHeader, new VariantContextTestProvider.VCIterable<LineIterator>(codec, vcfHeader) {
- @Override
- public boolean hasNext() {
- return lineIterator.hasNext();
- }
-
- @Override
- public LineIterator nextSource() {
- return lineIterator;
- }
- });
- }
-
- public static void assertVCFandBCFFilesAreTheSame(final File vcfFile, final File bcfFile) throws IOException {
- final VariantContextContainer vcfData = readAllVCs(vcfFile, new VCFCodec());
- final VariantContextContainer bcfData = readAllVCs(bcfFile, new BCF2Codec());
- assertEquals(bcfData.getHeader(), vcfData.getHeader());
- assertEquals(bcfData.getVCs(), vcfData.getVCs());
- }
-
- public static void assertEquals(final Iterable<VariantContext> actual, final Iterable<VariantContext> expected) {
- final Iterator<VariantContext> actualIT = actual.iterator();
- final Iterator<VariantContext> expectedIT = expected.iterator();
-
- while ( expectedIT.hasNext() ) {
- final VariantContext expectedVC = expectedIT.next();
- if ( expectedVC == null )
- continue;
-
- VariantContext actualVC;
- do {
- Assert.assertTrue(actualIT.hasNext(), "Too few records found in actual");
- actualVC = actualIT.next();
- } while ( actualIT.hasNext() && actualVC == null );
-
- if ( actualVC == null )
- Assert.fail("Too few records in actual");
-
- assertEquals(actualVC, expectedVC);
- }
- Assert.assertTrue(! actualIT.hasNext(), "Too many records found in actual");
- }
-
- /**
- * Assert that two variant contexts are actually equal
- * @param actual
- * @param expected
- */
- public static void assertEquals( final VariantContext actual, final VariantContext expected ) {
- Assert.assertNotNull(actual, "VariantContext expected not null");
- Assert.assertEquals(actual.getChr(), expected.getChr(), "chr");
- Assert.assertEquals(actual.getStart(), expected.getStart(), "start");
- Assert.assertEquals(actual.getEnd(), expected.getEnd(), "end");
- Assert.assertEquals(actual.getID(), expected.getID(), "id");
- Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "alleles for " + expected + " vs " + actual);
-
- assertAttributesEquals(actual.getAttributes(), expected.getAttributes());
- Assert.assertEquals(actual.filtersWereApplied(), expected.filtersWereApplied(), "filtersWereApplied");
- Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "isFiltered");
- VariantBaseTest.assertEqualsSet(actual.getFilters(), expected.getFilters(), "filters");
- VariantBaseTest.assertEqualsDoubleSmart(actual.getPhredScaledQual(), expected.getPhredScaledQual());
-
- Assert.assertEquals(actual.hasGenotypes(), expected.hasGenotypes(), "hasGenotypes");
- if ( expected.hasGenotypes() ) {
- VariantBaseTest.assertEqualsSet(actual.getSampleNames(), expected.getSampleNames(), "sample names set");
- Assert.assertEquals(actual.getSampleNamesOrderedByName(), expected.getSampleNamesOrderedByName(), "sample names");
- final Set<String> samples = expected.getSampleNames();
- for ( final String sample : samples ) {
- assertEquals(actual.getGenotype(sample), expected.getGenotype(sample));
- }
- }
- }
-
- public static void assertEquals(final Genotype actual, final Genotype expected) {
- Assert.assertEquals(actual.getSampleName(), expected.getSampleName(), "Genotype names");
- Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "Genotype alleles");
- Assert.assertEquals(actual.getGenotypeString(), expected.getGenotypeString(), "Genotype string");
- Assert.assertEquals(actual.getType(), expected.getType(), "Genotype type");
-
- // filters are the same
- Assert.assertEquals(actual.getFilters(), expected.getFilters(), "Genotype fields");
- Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "Genotype isFiltered");
-
- // inline attributes
- Assert.assertEquals(actual.getDP(), expected.getDP(), "Genotype dp");
- Assert.assertTrue(Arrays.equals(actual.getAD(), expected.getAD()));
- Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype gq");
- Assert.assertEquals(actual.hasPL(), expected.hasPL(), "Genotype hasPL");
- Assert.assertEquals(actual.hasAD(), expected.hasAD(), "Genotype hasAD");
- Assert.assertEquals(actual.hasGQ(), expected.hasGQ(), "Genotype hasGQ");
- Assert.assertEquals(actual.hasDP(), expected.hasDP(), "Genotype hasDP");
-
- Assert.assertEquals(actual.hasLikelihoods(), expected.hasLikelihoods(), "Genotype haslikelihoods");
- Assert.assertEquals(actual.getLikelihoodsString(), expected.getLikelihoodsString(), "Genotype getlikelihoodsString");
- Assert.assertEquals(actual.getLikelihoods(), expected.getLikelihoods(), "Genotype getLikelihoods");
- Assert.assertTrue(Arrays.equals(actual.getPL(), expected.getPL()));
-
- Assert.assertEquals(actual.getPhredScaledQual(), expected.getPhredScaledQual(), "Genotype phredScaledQual");
- assertAttributesEquals(actual.getExtendedAttributes(), expected.getExtendedAttributes());
- Assert.assertEquals(actual.isPhased(), expected.isPhased(), "Genotype isPhased");
- Assert.assertEquals(actual.getPloidy(), expected.getPloidy(), "Genotype getPloidy");
- }
-
- private static void assertAttributesEquals(final Map<String, Object> actual, Map<String, Object> expected) {
- final Set<String> expectedKeys = new HashSet<String>(expected.keySet());
-
- for ( final Map.Entry<String, Object> act : actual.entrySet() ) {
- final Object actualValue = act.getValue();
- if ( expected.containsKey(act.getKey()) && expected.get(act.getKey()) != null ) {
- final Object expectedValue = expected.get(act.getKey());
- if ( expectedValue instanceof List ) {
- final List<Object> expectedList = (List<Object>)expectedValue;
- Assert.assertTrue(actualValue instanceof List, act.getKey() + " should be a list but isn't");
- final List<Object> actualList = (List<Object>)actualValue;
- Assert.assertEquals(actualList.size(), expectedList.size(), act.getKey() + " size");
- for ( int i = 0; i < expectedList.size(); i++ )
- assertAttributeEquals(act.getKey(), actualList.get(i), expectedList.get(i));
- } else
- assertAttributeEquals(act.getKey(), actualValue, expectedValue);
- } else {
- // it's ok to have a binding in x -> null that's absent in y
- Assert.assertNull(actualValue, act.getKey() + " present in one but not in the other");
- }
- expectedKeys.remove(act.getKey());
- }
-
- // now expectedKeys contains only the keys found in expected but not in actual,
- // and they must all be null
- for ( final String missingExpected : expectedKeys ) {
- final Object value = expected.get(missingExpected);
- Assert.assertTrue(isMissing(value), "Attribute " + missingExpected + " missing in one but not in other" );
- }
- }
-
- private static final boolean isMissing(final Object value) {
- if ( value == null ) return true;
- else if ( value.equals(VCFConstants.MISSING_VALUE_v4) ) return true;
- else if ( value instanceof List ) {
- // handles the case where all elements are null or the list is empty
- for ( final Object elt : (List)value)
- if ( elt != null )
- return false;
- return true;
- } else
- return false;
- }
-
- private static void assertAttributeEquals(final String key, final Object actual, final Object expected) {
- if ( expected instanceof Double ) {
- // must be very tolerant because doubles are being rounded to 2 sig figs
- VariantBaseTest.assertEqualsDoubleSmart(actual, (Double)expected, 1e-2);
- } else
- Assert.assertEquals(actual, expected, "Attribute " + key);
- }
-
- public static void addComplexGenotypesTest() {
- final List<Allele> allAlleles = Arrays.asList(
- Allele.create("A", true),
- Allele.create("C", false),
- Allele.create("G", false));
-
- for ( int nAlleles : Arrays.asList(2, 3) ) {
- for ( int highestPloidy : Arrays.asList(1, 2, 3) ) {
- // site alleles
- final List<Allele> siteAlleles = allAlleles.subList(0, nAlleles);
-
- // possible alleles for genotypes
- final List<Allele> possibleGenotypeAlleles = new ArrayList<Allele>(siteAlleles);
- possibleGenotypeAlleles.add(Allele.NO_CALL);
-
- // there are n^ploidy possible genotypes
- final List<List<Allele>> possibleGenotypes = makeAllGenotypes(possibleGenotypeAlleles, highestPloidy);
- final int nPossibleGenotypes = possibleGenotypes.size();
-
- VariantContextBuilder vb = new VariantContextBuilder("unittest", "1", 1, 1, siteAlleles);
-
- // first test -- create n copies of each genotype
- for ( int i = 0; i < nPossibleGenotypes; i++ ) {
- final List<Genotype> samples = new ArrayList<Genotype>(3);
- samples.add(GenotypeBuilder.create("sample" + i, possibleGenotypes.get(i)));
- add(vb.genotypes(samples));
- }
-
- // second test -- create one sample with each genotype
- {
- final List<Genotype> samples = new ArrayList<Genotype>(nPossibleGenotypes);
- for ( int i = 0; i < nPossibleGenotypes; i++ ) {
- samples.add(GenotypeBuilder.create("sample" + i, possibleGenotypes.get(i)));
- }
- add(vb.genotypes(samples));
- }
-
- // test mixed ploidy
- for ( int i = 0; i < nPossibleGenotypes; i++ ) {
- for ( int ploidy = 1; ploidy < highestPloidy; ploidy++ ) {
- final List<Genotype> samples = new ArrayList<Genotype>(highestPloidy);
- final List<Allele> genotype = possibleGenotypes.get(i).subList(0, ploidy);
- samples.add(GenotypeBuilder.create("sample" + i, genotype));
- add(vb.genotypes(samples));
- }
- }
- }
- }
- }
-
- private static List<List<Allele>> makeAllGenotypes(final List<Allele> alleles, final int highestPloidy) {
- return GeneralUtils.makePermutations(alleles, highestPloidy, true);
- }
-
- public static void assertEquals(final VCFHeader actual, final VCFHeader expected) {
- Assert.assertEquals(actual.getMetaDataInSortedOrder().size(), expected.getMetaDataInSortedOrder().size(), "No VCF header lines");
-
- // for some reason set.equals() is returning false but all paired elements are .equals(). Perhaps compare to is busted?
- //Assert.assertEquals(actual.getMetaDataInInputOrder(), expected.getMetaDataInInputOrder());
- final List<VCFHeaderLine> actualLines = new ArrayList<VCFHeaderLine>(actual.getMetaDataInSortedOrder());
- final List<VCFHeaderLine> expectedLines = new ArrayList<VCFHeaderLine>(expected.getMetaDataInSortedOrder());
- for ( int i = 0; i < actualLines.size(); i++ ) {
- Assert.assertEquals(actualLines.get(i), expectedLines.get(i), "VCF header lines");
- }
- }
-
- public static void main( String argv[] ) {
- final File variants1 = new File(argv[0]);
- final File variants2 = new File(argv[1]);
- try {
- VariantContextTestProvider.assertVCFandBCFFilesAreTheSame(variants1, variants2);
- } catch ( IOException e ) {
- throw new RuntimeException(e);
- }
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/VariantContextUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/VariantContextUnitTest.java
deleted file mode 100644
index e7c4a93..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/VariantContextUnitTest.java
+++ /dev/null
@@ -1,980 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-
-// the imports for unit testing.
-
-import org.broadinstitute.variant.VariantBaseTest;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.util.*;
-
-
-public class VariantContextUnitTest extends VariantBaseTest {
- Allele A, Aref, C, T, Tref;
- Allele del, delRef, ATC, ATCref;
-
- // A [ref] / T at 10
- String snpLoc = "chr1";
- int snpLocStart = 10;
- int snpLocStop = 10;
-
- // - / ATC [ref] from 20-22
- String delLoc = "chr1";
- int delLocStart = 20;
- int delLocStop = 22;
-
- // - [ref] / ATC from 20-20
- String insLoc = "chr1";
- int insLocStart = 20;
- int insLocStop = 20;
-
- VariantContextBuilder basicBuilder, snpBuilder, insBuilder;
-
- @BeforeSuite
- public void before() {
- del = Allele.create("A");
- delRef = Allele.create("A", true);
-
- A = Allele.create("A");
- C = Allele.create("C");
- Aref = Allele.create("A", true);
- T = Allele.create("T");
- Tref = Allele.create("T", true);
-
- ATC = Allele.create("ATC");
- ATCref = Allele.create("ATC", true);
- }
-
- @BeforeMethod
- public void beforeTest() {
- basicBuilder = new VariantContextBuilder("test", snpLoc,snpLocStart, snpLocStop, Arrays.asList(Aref, T));
- snpBuilder = new VariantContextBuilder("test", snpLoc,snpLocStart, snpLocStop, Arrays.asList(Aref, T));
- insBuilder = new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, ATC));
- }
-
- @Test
- public void testDetermineTypes() {
- Allele ACref = Allele.create("AC", true);
- Allele AC = Allele.create("AC");
- Allele AT = Allele.create("AT");
- Allele C = Allele.create("C");
- Allele CAT = Allele.create("CAT");
- Allele TAref = Allele.create("TA", true);
- Allele TA = Allele.create("TA");
- Allele TC = Allele.create("TC");
- Allele symbolic = Allele.create("<FOO>");
-
- // test REF
- List<Allele> alleles = Arrays.asList(Tref);
- VariantContext vc = snpBuilder.alleles(alleles).stop(snpLocStop).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.NO_VARIATION);
-
- // test SNPs
- alleles = Arrays.asList(Tref, A);
- vc = snpBuilder.alleles(alleles).stop(snpLocStop).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.SNP);
-
- alleles = Arrays.asList(Tref, A, C);
- vc = snpBuilder.alleles(alleles).stop(snpLocStop).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.SNP);
-
- // test MNPs
- alleles = Arrays.asList(ACref, TA);
- vc = snpBuilder.alleles(alleles).stop(snpLocStop+1).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.MNP);
-
- alleles = Arrays.asList(ATCref, CAT, Allele.create("GGG"));
- vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.MNP);
-
- // test INDELs
- alleles = Arrays.asList(Aref, ATC);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
- alleles = Arrays.asList(ATCref, A);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
- alleles = Arrays.asList(Tref, TA, TC);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
- alleles = Arrays.asList(ATCref, A, AC);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
- alleles = Arrays.asList(ATCref, A, Allele.create("ATCTC"));
- vc = basicBuilder.alleles(alleles).stop(snpLocStop+2).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
-
- // test MIXED
- alleles = Arrays.asList(TAref, T, TC);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop+1).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
- alleles = Arrays.asList(TAref, T, AC);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop+1).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
- alleles = Arrays.asList(ACref, ATC, AT);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop+1).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
- alleles = Arrays.asList(Aref, T, symbolic);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.MIXED);
-
- // test SYMBOLIC
- alleles = Arrays.asList(Tref, symbolic);
- vc = basicBuilder.alleles(alleles).stop(snpLocStop).make();
- Assert.assertEquals(vc.getType(), VariantContext.Type.SYMBOLIC);
- }
-
- @Test
- public void testMultipleSNPAlleleOrdering() {
- final List<Allele> allelesNaturalOrder = Arrays.asList(Aref, C, T);
- final List<Allele> allelesUnnaturalOrder = Arrays.asList(Aref, T, C);
- VariantContext naturalVC = snpBuilder.alleles(allelesNaturalOrder).make();
- VariantContext unnaturalVC = snpBuilder.alleles(allelesUnnaturalOrder).make();
- Assert.assertEquals(new ArrayList<Allele>(naturalVC.getAlleles()), allelesNaturalOrder);
- Assert.assertEquals(new ArrayList<Allele>(unnaturalVC.getAlleles()), allelesUnnaturalOrder);
- }
-
- @Test
- public void testCreatingSNPVariantContext() {
-
- List<Allele> alleles = Arrays.asList(Aref, T);
- VariantContext vc = snpBuilder.alleles(alleles).make();
-
- Assert.assertEquals(vc.getChr(), snpLoc);
- Assert.assertEquals(vc.getStart(), snpLocStart);
- Assert.assertEquals(vc.getEnd(), snpLocStop);
- Assert.assertEquals(vc.getType(), VariantContext.Type.SNP);
- Assert.assertTrue(vc.isSNP());
- Assert.assertFalse(vc.isIndel());
- Assert.assertFalse(vc.isSimpleInsertion());
- Assert.assertFalse(vc.isSimpleDeletion());
- Assert.assertFalse(vc.isSimpleIndel());
- Assert.assertFalse(vc.isMixed());
- Assert.assertTrue(vc.isBiallelic());
- Assert.assertEquals(vc.getNAlleles(), 2);
-
- Assert.assertEquals(vc.getReference(), Aref);
- Assert.assertEquals(vc.getAlleles().size(), 2);
- Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
- Assert.assertEquals(vc.getAlternateAllele(0), T);
-
- Assert.assertFalse(vc.hasGenotypes());
-
- Assert.assertEquals(vc.getSampleNames().size(), 0);
- }
-
- @Test
- public void testCreatingRefVariantContext() {
- List<Allele> alleles = Arrays.asList(Aref);
- VariantContext vc = snpBuilder.alleles(alleles).make();
-
- Assert.assertEquals(vc.getChr(), snpLoc);
- Assert.assertEquals(vc.getStart(), snpLocStart);
- Assert.assertEquals(vc.getEnd(), snpLocStop);
- Assert.assertEquals(VariantContext.Type.NO_VARIATION, vc.getType());
- Assert.assertFalse(vc.isSNP());
- Assert.assertFalse(vc.isIndel());
- Assert.assertFalse(vc.isSimpleInsertion());
- Assert.assertFalse(vc.isSimpleDeletion());
- Assert.assertFalse(vc.isSimpleIndel());
- Assert.assertFalse(vc.isMixed());
- Assert.assertFalse(vc.isBiallelic());
- Assert.assertEquals(vc.getNAlleles(), 1);
-
- Assert.assertEquals(vc.getReference(), Aref);
- Assert.assertEquals(vc.getAlleles().size(), 1);
- Assert.assertEquals(vc.getAlternateAlleles().size(), 0);
- //Assert.assertEquals(vc.getAlternateAllele(0), T);
-
- Assert.assertFalse(vc.hasGenotypes());
- Assert.assertEquals(vc.getSampleNames().size(), 0);
- }
-
- @Test
- public void testCreatingDeletionVariantContext() {
- List<Allele> alleles = Arrays.asList(ATCref, del);
- VariantContext vc = new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, alleles).make();
-
- Assert.assertEquals(vc.getChr(), delLoc);
- Assert.assertEquals(vc.getStart(), delLocStart);
- Assert.assertEquals(vc.getEnd(), delLocStop);
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
- Assert.assertFalse(vc.isSNP());
- Assert.assertTrue(vc.isIndel());
- Assert.assertFalse(vc.isSimpleInsertion());
- Assert.assertTrue(vc.isSimpleDeletion());
- Assert.assertTrue(vc.isSimpleIndel());
- Assert.assertFalse(vc.isMixed());
- Assert.assertTrue(vc.isBiallelic());
- Assert.assertEquals(vc.getNAlleles(), 2);
-
- Assert.assertEquals(vc.getReference(), ATCref);
- Assert.assertEquals(vc.getAlleles().size(), 2);
- Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
- Assert.assertEquals(vc.getAlternateAllele(0), del);
-
- Assert.assertFalse(vc.hasGenotypes());
-
- Assert.assertEquals(vc.getSampleNames().size(), 0);
- }
-
- @Test
- public void testCreatingComplexSubstitutionVariantContext() {
- List<Allele> alleles = Arrays.asList(Tref, ATC);
- VariantContext vc = new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, alleles).make();
-
- Assert.assertEquals(vc.getChr(), insLoc);
- Assert.assertEquals(vc.getStart(), insLocStart);
- Assert.assertEquals(vc.getEnd(), insLocStop);
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
- Assert.assertFalse(vc.isSNP());
- Assert.assertTrue(vc.isIndel());
- Assert.assertFalse(vc.isSimpleInsertion());
- Assert.assertFalse(vc.isSimpleDeletion());
- Assert.assertFalse(vc.isSimpleIndel());
- Assert.assertFalse(vc.isMixed());
- Assert.assertTrue(vc.isBiallelic());
- Assert.assertEquals(vc.getNAlleles(), 2);
-
- Assert.assertEquals(vc.getReference(), Tref);
- Assert.assertEquals(vc.getAlleles().size(), 2);
- Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
- Assert.assertEquals(vc.getAlternateAllele(0), ATC);
-
- Assert.assertFalse(vc.hasGenotypes());
-
- Assert.assertEquals(vc.getSampleNames().size(), 0);
- }
-
- @Test
- public void testMatchingAlleles() {
- List<Allele> alleles = Arrays.asList(ATCref, del);
- VariantContext vc = new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, alleles).make();
- VariantContext vc2 = new VariantContextBuilder("test2", delLoc, delLocStart+12, delLocStop+12, alleles).make();
-
- Assert.assertTrue(vc.hasSameAllelesAs(vc2));
- Assert.assertTrue(vc.hasSameAlternateAllelesAs(vc2));
- }
-
- @Test
- public void testCreatingInsertionVariantContext() {
- List<Allele> alleles = Arrays.asList(delRef, ATC);
- VariantContext vc = insBuilder.alleles(alleles).make();
-
- Assert.assertEquals(vc.getChr(), insLoc);
- Assert.assertEquals(vc.getStart(), insLocStart);
- Assert.assertEquals(vc.getEnd(), insLocStop);
- Assert.assertEquals(vc.getType(), VariantContext.Type.INDEL);
- Assert.assertFalse(vc.isSNP());
- Assert.assertTrue(vc.isIndel());
- Assert.assertTrue(vc.isSimpleInsertion());
- Assert.assertFalse(vc.isSimpleDeletion());
- Assert.assertTrue(vc.isSimpleIndel());
- Assert.assertFalse(vc.isMixed());
- Assert.assertTrue(vc.isBiallelic());
- Assert.assertEquals(vc.getNAlleles(), 2);
-
- Assert.assertEquals(vc.getReference(), delRef);
- Assert.assertEquals(vc.getAlleles().size(), 2);
- Assert.assertEquals(vc.getAlternateAlleles().size(), 1);
- Assert.assertEquals(vc.getAlternateAllele(0), ATC);
- Assert.assertFalse(vc.hasGenotypes());
-
- Assert.assertEquals(vc.getSampleNames().size(), 0);
- }
-
- @Test
- public void testCreatingPartiallyCalledGenotype() {
- List<Allele> alleles = Arrays.asList(Aref, C);
- Genotype g = GenotypeBuilder.create("foo", Arrays.asList(C, Allele.NO_CALL));
- VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g).make();
-
- Assert.assertTrue(vc.isSNP());
- Assert.assertEquals(vc.getNAlleles(), 2);
- Assert.assertTrue(vc.hasGenotypes());
- Assert.assertFalse(vc.isMonomorphicInSamples());
- Assert.assertTrue(vc.isPolymorphicInSamples());
- Assert.assertEquals(vc.getGenotype("foo"), g);
- Assert.assertEquals(vc.getCalledChrCount(), 1); // we only have 1 called chromosomes, we exclude the NO_CALL one isn't called
- Assert.assertEquals(vc.getCalledChrCount(Aref), 0);
- Assert.assertEquals(vc.getCalledChrCount(C), 1);
- Assert.assertFalse(vc.getGenotype("foo").isHet());
- Assert.assertFalse(vc.getGenotype("foo").isHom());
- Assert.assertFalse(vc.getGenotype("foo").isNoCall());
- Assert.assertFalse(vc.getGenotype("foo").isHom());
- Assert.assertTrue(vc.getGenotype("foo").isMixed());
- Assert.assertEquals(vc.getGenotype("foo").getType(), GenotypeType.MIXED);
- }
-
- @Test (expectedExceptions = Exception.class)
- public void testBadConstructorArgs1() {
- new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, ATCref)).make();
- }
-
- @Test (expectedExceptions = Exception.class)
- public void testBadConstructorArgs2() {
- new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, del)).make();
- }
-
- @Test (expectedExceptions = Exception.class)
- public void testBadConstructorArgs3() {
- new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(del)).make();
- }
-
- @Test (expectedExceptions = Throwable.class)
- public void testBadConstructorArgs4() {
- new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Collections.<Allele>emptyList()).make();
- }
-
- @Test (expectedExceptions = Exception.class)
- public void testBadConstructorArgsDuplicateAlleles1() {
- new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(Aref, T, T)).make();
- }
-
- @Test (expectedExceptions = Exception.class)
- public void testBadConstructorArgsDuplicateAlleles2() {
- new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(Aref, A)).make();
- }
-
- @Test (expectedExceptions = Throwable.class)
- public void testBadLoc1() {
- List<Allele> alleles = Arrays.asList(Aref, T, del);
- new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, alleles).make();
- }
-
- @Test (expectedExceptions = Throwable.class)
- public void testBadID1() {
- new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, Arrays.asList(Aref, T)).id(null).make();
- }
-
- @Test (expectedExceptions = Exception.class)
- public void testBadID2() {
- new VariantContextBuilder("test", delLoc, delLocStart, delLocStop, Arrays.asList(Aref, T)).id("").make();
- }
-
- @Test (expectedExceptions = Throwable.class)
- public void testBadPError() {
- new VariantContextBuilder("test", insLoc, insLocStart, insLocStop, Arrays.asList(delRef, ATCref)).log10PError(0.5).make();
- }
-
- @Test
- public void testAccessingSimpleSNPGenotypes() {
- List<Allele> alleles = Arrays.asList(Aref, T);
-
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-
- VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles)
- .genotypes(g1, g2, g3).make();
-
- Assert.assertTrue(vc.hasGenotypes());
- Assert.assertFalse(vc.isMonomorphicInSamples());
- Assert.assertTrue(vc.isPolymorphicInSamples());
- Assert.assertEquals(vc.getSampleNames().size(), 3);
-
- Assert.assertEquals(vc.getGenotypes().size(), 3);
- Assert.assertEquals(vc.getGenotypes().get("AA"), g1);
- Assert.assertEquals(vc.getGenotype("AA"), g1);
- Assert.assertEquals(vc.getGenotypes().get("AT"), g2);
- Assert.assertEquals(vc.getGenotype("AT"), g2);
- Assert.assertEquals(vc.getGenotypes().get("TT"), g3);
- Assert.assertEquals(vc.getGenotype("TT"), g3);
-
- Assert.assertTrue(vc.hasGenotype("AA"));
- Assert.assertTrue(vc.hasGenotype("AT"));
- Assert.assertTrue(vc.hasGenotype("TT"));
- Assert.assertFalse(vc.hasGenotype("foo"));
- Assert.assertFalse(vc.hasGenotype("TTT"));
- Assert.assertFalse(vc.hasGenotype("at"));
- Assert.assertFalse(vc.hasGenotype("tt"));
-
- Assert.assertEquals(vc.getCalledChrCount(), 6);
- Assert.assertEquals(vc.getCalledChrCount(Aref), 3);
- Assert.assertEquals(vc.getCalledChrCount(T), 3);
- }
-
- @Test
- public void testAccessingCompleteGenotypes() {
- List<Allele> alleles = Arrays.asList(Aref, T, ATC);
-
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
- Genotype g4 = GenotypeBuilder.create("Td", Arrays.asList(T, ATC));
- Genotype g5 = GenotypeBuilder.create("dd", Arrays.asList(ATC, ATC));
- Genotype g6 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
-
- VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles)
- .genotypes(g1, g2, g3, g4, g5, g6).make();
-
- Assert.assertTrue(vc.hasGenotypes());
- Assert.assertFalse(vc.isMonomorphicInSamples());
- Assert.assertTrue(vc.isPolymorphicInSamples());
- Assert.assertEquals(vc.getGenotypes().size(), 6);
-
- Assert.assertEquals(3, vc.getGenotypes(Arrays.asList("AA", "Td", "dd")).size());
-
- Assert.assertEquals(10, vc.getCalledChrCount());
- Assert.assertEquals(3, vc.getCalledChrCount(Aref));
- Assert.assertEquals(4, vc.getCalledChrCount(T));
- Assert.assertEquals(3, vc.getCalledChrCount(ATC));
- Assert.assertEquals(2, vc.getCalledChrCount(Allele.NO_CALL));
- }
-
- @Test
- public void testAccessingRefGenotypes() {
- List<Allele> alleles1 = Arrays.asList(Aref, T);
- List<Allele> alleles2 = Arrays.asList(Aref);
- List<Allele> alleles3 = Arrays.asList(Aref, T);
- for ( List<Allele> alleles : Arrays.asList(alleles1, alleles2, alleles3)) {
- Genotype g1 = GenotypeBuilder.create("AA1", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AA2", Arrays.asList(Aref, Aref));
- Genotype g3 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
- VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles)
- .genotypes(g1, g2, g3).make();
-
- Assert.assertTrue(vc.hasGenotypes());
- Assert.assertTrue(vc.isMonomorphicInSamples());
- Assert.assertFalse(vc.isPolymorphicInSamples());
- Assert.assertEquals(vc.getGenotypes().size(), 3);
-
- Assert.assertEquals(4, vc.getCalledChrCount());
- Assert.assertEquals(4, vc.getCalledChrCount(Aref));
- Assert.assertEquals(0, vc.getCalledChrCount(T));
- Assert.assertEquals(2, vc.getCalledChrCount(Allele.NO_CALL));
- }
- }
-
- @Test
- public void testFilters() {
- List<Allele> alleles = Arrays.asList(Aref, T);
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
-
- VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1, g2).make();
-
- Assert.assertTrue(vc.isNotFiltered());
- Assert.assertFalse(vc.isFiltered());
- Assert.assertEquals(0, vc.getFilters().size());
- Assert.assertFalse(vc.filtersWereApplied());
- Assert.assertNull(vc.getFiltersMaybeNull());
-
- vc = new VariantContextBuilder(vc).filters("BAD_SNP_BAD!").make();
-
- Assert.assertFalse(vc.isNotFiltered());
- Assert.assertTrue(vc.isFiltered());
- Assert.assertEquals(1, vc.getFilters().size());
- Assert.assertTrue(vc.filtersWereApplied());
- Assert.assertNotNull(vc.getFiltersMaybeNull());
-
- Set<String> filters = new HashSet<String>(Arrays.asList("BAD_SNP_BAD!", "REALLY_BAD_SNP", "CHRIST_THIS_IS_TERRIBLE"));
- vc = new VariantContextBuilder(vc).filters(filters).make();
-
- Assert.assertFalse(vc.isNotFiltered());
- Assert.assertTrue(vc.isFiltered());
- Assert.assertEquals(3, vc.getFilters().size());
- Assert.assertTrue(vc.filtersWereApplied());
- Assert.assertNotNull(vc.getFiltersMaybeNull());
- }
-
- @Test
- public void testGetGenotypeCounts() {
- List<Allele> alleles = Arrays.asList(Aref, T);
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
- Genotype g4 = GenotypeBuilder.create("A.", Arrays.asList(Aref, Allele.NO_CALL));
- Genotype g5 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
-
- // we need to create a new VariantContext each time
- VariantContext vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
- Assert.assertEquals(1, vc.getHetCount());
- vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
- Assert.assertEquals(1, vc.getHomRefCount());
- vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
- Assert.assertEquals(1, vc.getHomVarCount());
- vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
- Assert.assertEquals(1, vc.getMixedCount());
- vc = new VariantContextBuilder("foo", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
- Assert.assertEquals(1, vc.getNoCallCount());
- }
-
- @Test
- public void testVCFfromGenotypes() {
- List<Allele> alleles = Arrays.asList(Aref, C, T);
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
- Genotype g4 = GenotypeBuilder.create("..", Arrays.asList(Allele.NO_CALL, Allele.NO_CALL));
- Genotype g5 = GenotypeBuilder.create("AC", Arrays.asList(Aref, C));
- VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(g1,g2,g3,g4,g5).make();
-
- VariantContext vc12 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName(), g2.getSampleName())), true);
- VariantContext vc1 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName())), true);
- VariantContext vc23 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g2.getSampleName(), g3.getSampleName())), true);
- VariantContext vc4 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g4.getSampleName())), true);
- VariantContext vc14 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName(), g4.getSampleName())), true);
- VariantContext vc125 = vc.subContextFromSamples(new HashSet<String>(Arrays.asList(g1.getSampleName(), g2.getSampleName(), g5.getSampleName())), true);
-
- Assert.assertTrue(vc12.isPolymorphicInSamples());
- Assert.assertTrue(vc23.isPolymorphicInSamples());
- Assert.assertTrue(vc1.isMonomorphicInSamples());
- Assert.assertTrue(vc4.isMonomorphicInSamples());
- Assert.assertTrue(vc14.isMonomorphicInSamples());
- Assert.assertTrue(vc125.isPolymorphicInSamples());
-
- Assert.assertTrue(vc12.isSNP());
- Assert.assertTrue(vc12.isVariant());
- Assert.assertTrue(vc12.isBiallelic());
-
- Assert.assertFalse(vc1.isSNP());
- Assert.assertFalse(vc1.isVariant());
- Assert.assertFalse(vc1.isBiallelic());
-
- Assert.assertTrue(vc23.isSNP());
- Assert.assertTrue(vc23.isVariant());
- Assert.assertTrue(vc23.isBiallelic());
-
- Assert.assertFalse(vc4.isSNP());
- Assert.assertFalse(vc4.isVariant());
- Assert.assertFalse(vc4.isBiallelic());
-
- Assert.assertFalse(vc14.isSNP());
- Assert.assertFalse(vc14.isVariant());
- Assert.assertFalse(vc14.isBiallelic());
-
- Assert.assertTrue(vc125.isSNP());
- Assert.assertTrue(vc125.isVariant());
- Assert.assertFalse(vc125.isBiallelic());
-
- Assert.assertEquals(3, vc12.getCalledChrCount(Aref));
- Assert.assertEquals(1, vc23.getCalledChrCount(Aref));
- Assert.assertEquals(2, vc1.getCalledChrCount(Aref));
- Assert.assertEquals(0, vc4.getCalledChrCount(Aref));
- Assert.assertEquals(2, vc14.getCalledChrCount(Aref));
- Assert.assertEquals(4, vc125.getCalledChrCount(Aref));
- }
-
- public void testGetGenotypeMethods() {
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
- GenotypesContext gc = GenotypesContext.create(g1, g2, g3);
- VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).genotypes(gc).make();
-
- Assert.assertEquals(vc.getGenotype("AA"), g1);
- Assert.assertEquals(vc.getGenotype("AT"), g2);
- Assert.assertEquals(vc.getGenotype("TT"), g3);
- Assert.assertEquals(vc.getGenotype("CC"), null);
-
- Assert.assertEquals(vc.getGenotypes(), gc);
- Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "AT")), Arrays.asList(g1, g2));
- Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "TT")), Arrays.asList(g1, g3));
- Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "AT", "TT")), Arrays.asList(g1, g2, g3));
- Assert.assertEquals(vc.getGenotypes(Arrays.asList("AA", "AT", "CC")), Arrays.asList(g1, g2));
-
- Assert.assertEquals(vc.getGenotype(0), g1);
- Assert.assertEquals(vc.getGenotype(1), g2);
- Assert.assertEquals(vc.getGenotype(2), g3);
- }
-
- // --------------------------------------------------------------------------------
- //
- // Test allele merging
- //
- // --------------------------------------------------------------------------------
-
- private class GetAllelesTest {
- List<Allele> alleles;
- String name;
-
- private GetAllelesTest(String name, Allele... arg) {
- this.name = name;
- this.alleles = Arrays.asList(arg);
- }
-
- public String toString() {
- return String.format("%s input=%s", name, alleles);
- }
- }
-
- @DataProvider(name = "getAlleles")
- public Object[][] mergeAllelesData() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
- tests.add(new Object[]{new GetAllelesTest("A*", Aref)});
- tests.add(new Object[]{new GetAllelesTest("A*/C", Aref, C)});
- tests.add(new Object[]{new GetAllelesTest("A*/C/T", Aref, C, T)});
- tests.add(new Object[]{new GetAllelesTest("A*/T/C", Aref, T, C)});
- tests.add(new Object[]{new GetAllelesTest("A*/C/T/ATC", Aref, C, T, ATC)});
- tests.add(new Object[]{new GetAllelesTest("A*/T/C/ATC", Aref, T, C, ATC)});
- tests.add(new Object[]{new GetAllelesTest("A*/ATC/T/C", Aref, ATC, T, C)});
-
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "getAlleles")
- public void testMergeAlleles(GetAllelesTest cfg) {
- final List<Allele> altAlleles = cfg.alleles.subList(1, cfg.alleles.size());
- final VariantContext vc = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, cfg.alleles).make();
-
- Assert.assertEquals(vc.getAlleles(), cfg.alleles, "VC alleles not the same as input alleles");
- Assert.assertEquals(vc.getNAlleles(), cfg.alleles.size(), "VC getNAlleles not the same as input alleles size");
- Assert.assertEquals(vc.getAlternateAlleles(), altAlleles, "VC alt alleles not the same as input alt alleles");
-
-
- for ( int i = 0; i < cfg.alleles.size(); i++ ) {
- final Allele inputAllele = cfg.alleles.get(i);
-
- Assert.assertTrue(vc.hasAllele(inputAllele));
- if ( inputAllele.isReference() ) {
- final Allele nonRefVersion = Allele.create(inputAllele.getBases(), false);
- Assert.assertTrue(vc.hasAllele(nonRefVersion, true));
- Assert.assertFalse(vc.hasAllele(nonRefVersion, false));
- }
-
- Assert.assertEquals(inputAllele, vc.getAllele(inputAllele.getBaseString()));
- Assert.assertEquals(inputAllele, vc.getAllele(inputAllele.getBases()));
-
- if ( i > 0 ) { // it's an alt allele
- Assert.assertEquals(inputAllele, vc.getAlternateAllele(i-1));
- }
- }
-
- final Allele missingAllele = Allele.create("AACCGGTT"); // does not exist
- Assert.assertNull(vc.getAllele(missingAllele.getBases()));
- Assert.assertFalse(vc.hasAllele(missingAllele));
- Assert.assertFalse(vc.hasAllele(missingAllele, true));
- }
-
- private class SitesAndGenotypesVC {
- VariantContext vc, copy;
- String name;
-
- private SitesAndGenotypesVC(String name, VariantContext original) {
- this.name = name;
- this.vc = original;
- this.copy = new VariantContextBuilder(original).make();
- }
-
- public String toString() {
- return String.format("%s input=%s", name, vc);
- }
- }
-
- @DataProvider(name = "SitesAndGenotypesVC")
- public Object[][] MakeSitesAndGenotypesVCs() {
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
-
- VariantContext sites = new VariantContextBuilder("sites", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).make();
- VariantContext genotypes = new VariantContextBuilder(sites).source("genotypes").genotypes(g1, g2, g3).make();
-
- List<Object[]> tests = new ArrayList<Object[]>();
-
- tests.add(new Object[]{new SitesAndGenotypesVC("sites", sites)});
- tests.add(new Object[]{new SitesAndGenotypesVC("genotypes", genotypes)});
-
- return tests.toArray(new Object[][]{});
- }
-
- // --------------------------------------------------------------------------------
- //
- // Test modifying routines
- //
- // --------------------------------------------------------------------------------
- @Test(dataProvider = "SitesAndGenotypesVC")
- public void runModifyVCTests(SitesAndGenotypesVC cfg) {
- VariantContext modified = new VariantContextBuilder(cfg.vc).loc("chr2", 123, 123).make();
- Assert.assertEquals(modified.getChr(), "chr2");
- Assert.assertEquals(modified.getStart(), 123);
- Assert.assertEquals(modified.getEnd(), 123);
-
- modified = new VariantContextBuilder(cfg.vc).id("newID").make();
- Assert.assertEquals(modified.getID(), "newID");
-
- Set<String> newFilters = Collections.singleton("newFilter");
- modified = new VariantContextBuilder(cfg.vc).filters(newFilters).make();
- Assert.assertEquals(modified.getFilters(), newFilters);
-
- // test the behavior when the builder's attribute object is null
- modified = new VariantContextBuilder(modified).attributes(null).make();
- Assert.assertTrue(modified.getAttributes().isEmpty());
- modified = new VariantContextBuilder(modified).attributes(null).rmAttribute("AC").make();
- Assert.assertTrue(modified.getAttributes().isEmpty());
- modified = new VariantContextBuilder(modified).attributes(null).attribute("AC", 1).make();
- Assert.assertEquals(modified.getAttribute("AC"), 1);
-
- // test the behavior when the builder's attribute object is not initialized
- modified = new VariantContextBuilder(modified.getSource(), modified.getChr(), modified.getStart(), modified.getEnd(), modified.getAlleles()).attribute("AC", 1).make();
-
- // test normal attribute modification
- modified = new VariantContextBuilder(cfg.vc).attribute("AC", 1).make();
- Assert.assertEquals(modified.getAttribute("AC"), 1);
- modified = new VariantContextBuilder(modified).attribute("AC", 2).make();
- Assert.assertEquals(modified.getAttribute("AC"), 2);
-
- Genotype g1 = GenotypeBuilder.create("AA2", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT2", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT2", Arrays.asList(T, T));
- GenotypesContext gc = GenotypesContext.create(g1,g2,g3);
- modified = new VariantContextBuilder(cfg.vc).genotypes(gc).make();
- Assert.assertEquals(modified.getGenotypes(), gc);
- modified = new VariantContextBuilder(cfg.vc).noGenotypes().make();
- Assert.assertTrue(modified.getGenotypes().isEmpty());
-
- // test that original hasn't changed
- Assert.assertEquals(cfg.vc.getChr(), cfg.copy.getChr());
- Assert.assertEquals(cfg.vc.getStart(), cfg.copy.getStart());
- Assert.assertEquals(cfg.vc.getEnd(), cfg.copy.getEnd());
- Assert.assertEquals(cfg.vc.getAlleles(), cfg.copy.getAlleles());
- Assert.assertEquals(cfg.vc.getAttributes(), cfg.copy.getAttributes());
- Assert.assertEquals(cfg.vc.getID(), cfg.copy.getID());
- Assert.assertEquals(cfg.vc.getGenotypes(), cfg.copy.getGenotypes());
- Assert.assertEquals(cfg.vc.getLog10PError(), cfg.copy.getLog10PError());
- Assert.assertEquals(cfg.vc.getFilters(), cfg.copy.getFilters());
- }
-
- // --------------------------------------------------------------------------------
- //
- // Test subcontext
- //
- // --------------------------------------------------------------------------------
- private class SubContextTest {
- Set<String> samples;
- boolean updateAlleles;
-
- private SubContextTest(Collection<String> samples, boolean updateAlleles) {
- this.samples = new HashSet<String>(samples);
- this.updateAlleles = updateAlleles;
- }
-
- public String toString() {
- return String.format("%s samples=%s updateAlleles=%b", "SubContextTest", samples, updateAlleles);
- }
- }
-
- @DataProvider(name = "SubContextTest")
- public Object[][] MakeSubContextTest() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
- for ( boolean updateAlleles : Arrays.asList(true, false)) {
- tests.add(new Object[]{new SubContextTest(Collections.<String>emptySet(), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Collections.singleton("MISSING"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Collections.singleton("AA"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Collections.singleton("AT"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Collections.singleton("TT"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "TT"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "MISSING"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "TT", "MISSING"), updateAlleles)});
- tests.add(new Object[]{new SubContextTest(Arrays.asList("AA", "AT", "AC"), updateAlleles)});
- }
-
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "SubContextTest")
- public void runSubContextTest(SubContextTest cfg) {
- Genotype g1 = GenotypeBuilder.create("AA", Arrays.asList(Aref, Aref));
- Genotype g2 = GenotypeBuilder.create("AT", Arrays.asList(Aref, T));
- Genotype g3 = GenotypeBuilder.create("TT", Arrays.asList(T, T));
- Genotype g4 = GenotypeBuilder.create("AC", Arrays.asList(Aref, C));
-
- GenotypesContext gc = GenotypesContext.create(g1, g2, g3, g4);
- VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, C, T)).genotypes(gc).make();
- VariantContext sub = vc.subContextFromSamples(cfg.samples, cfg.updateAlleles);
-
- // unchanged attributes should be the same
- Assert.assertEquals(sub.getChr(), vc.getChr());
- Assert.assertEquals(sub.getStart(), vc.getStart());
- Assert.assertEquals(sub.getEnd(), vc.getEnd());
- Assert.assertEquals(sub.getLog10PError(), vc.getLog10PError());
- Assert.assertEquals(sub.getFilters(), vc.getFilters());
- Assert.assertEquals(sub.getID(), vc.getID());
- Assert.assertEquals(sub.getAttributes(), vc.getAttributes());
-
- Set<Genotype> expectedGenotypes = new HashSet<Genotype>();
- if ( cfg.samples.contains(g1.getSampleName()) ) expectedGenotypes.add(g1);
- if ( cfg.samples.contains(g2.getSampleName()) ) expectedGenotypes.add(g2);
- if ( cfg.samples.contains(g3.getSampleName()) ) expectedGenotypes.add(g3);
- if ( cfg.samples.contains(g4.getSampleName()) ) expectedGenotypes.add(g4);
- GenotypesContext expectedGC = GenotypesContext.copy(expectedGenotypes);
-
- // these values depend on the results of sub
- if ( cfg.updateAlleles ) {
- // do the work to see what alleles should be here, and which not
- List<Allele> expectedAlleles = new ArrayList<Allele>();
- expectedAlleles.add(Aref);
-
- Set<Allele> genotypeAlleles = new HashSet<Allele>();
- for ( final Genotype g : expectedGC )
- genotypeAlleles.addAll(g.getAlleles());
- genotypeAlleles.remove(Aref);
-
- // ensure original allele order
- for (Allele allele: vc.getAlleles())
- if (genotypeAlleles.contains(allele))
- expectedAlleles.add(allele);
-
- Assert.assertEquals(sub.getAlleles(), expectedAlleles);
- } else {
- // not updating alleles -- should be the same
- Assert.assertEquals(sub.getAlleles(), vc.getAlleles());
- }
-
- // same sample names => success
- Assert.assertTrue(sub.getGenotypes().getSampleNames().equals(expectedGC.getSampleNames()));
- }
-
- // --------------------------------------------------------------------------------
- //
- // Test sample name functions
- //
- // --------------------------------------------------------------------------------
- private class SampleNamesTest {
- List<String> sampleNames;
- List<String> sampleNamesInOrder;
-
- private SampleNamesTest(List<String> sampleNames, List<String> sampleNamesInOrder) {
- this.sampleNamesInOrder = sampleNamesInOrder;
- this.sampleNames = sampleNames;
- }
-
- public String toString() {
- return String.format("%s samples=%s order=%s", "SampleNamesTest", sampleNames, sampleNamesInOrder);
- }
- }
-
- @DataProvider(name = "SampleNamesTest")
- public Object[][] MakeSampleNamesTest() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("1"), Arrays.asList("1"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("2", "1"), Arrays.asList("1", "2"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("1", "2"), Arrays.asList("1", "2"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("1", "2", "3"), Arrays.asList("1", "2", "3"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("2", "1", "3"), Arrays.asList("1", "2", "3"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("2", "3", "1"), Arrays.asList("1", "2", "3"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("3", "1", "2"), Arrays.asList("1", "2", "3"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("3", "2", "1"), Arrays.asList("1", "2", "3"))});
- tests.add(new Object[]{new SampleNamesTest(Arrays.asList("NA2", "NA1"), Arrays.asList("NA1", "NA2"))});
-
- return tests.toArray(new Object[][]{});
- }
-
- private final static void assertGenotypesAreInOrder(Iterable<Genotype> gIt, List<String> names) {
- int i = 0;
- for ( final Genotype g : gIt ) {
- Assert.assertEquals(g.getSampleName(), names.get(i), "Unexpected genotype ordering");
- i++;
- }
- }
-
-
- @Test(dataProvider = "SampleNamesTest")
- public void runSampleNamesTest(SampleNamesTest cfg) {
- GenotypesContext gc = GenotypesContext.create(cfg.sampleNames.size());
- for ( final String name : cfg.sampleNames ) {
- gc.add(GenotypeBuilder.create(name, Arrays.asList(Aref, T)));
- }
-
- VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).genotypes(gc).make();
-
- // same sample names => success
- Assert.assertTrue(vc.getSampleNames().equals(new HashSet<String>(cfg.sampleNames)), "vc.getSampleNames() = " + vc.getSampleNames());
- Assert.assertEquals(vc.getSampleNamesOrderedByName(), cfg.sampleNamesInOrder, "vc.getSampleNamesOrderedByName() = " + vc.getSampleNamesOrderedByName());
-
- assertGenotypesAreInOrder(vc.getGenotypesOrderedByName(), cfg.sampleNamesInOrder);
- assertGenotypesAreInOrder(vc.getGenotypesOrderedBy(cfg.sampleNames), cfg.sampleNames);
- }
-
- @Test
- public void testGenotypeCounting() {
- Genotype noCall = GenotypeBuilder.create("nocall", Arrays.asList(Allele.NO_CALL));
- Genotype mixed = GenotypeBuilder.create("mixed", Arrays.asList(Aref, Allele.NO_CALL));
- Genotype homRef = GenotypeBuilder.create("homRef", Arrays.asList(Aref, Aref));
- Genotype het = GenotypeBuilder.create("het", Arrays.asList(Aref, T));
- Genotype homVar = GenotypeBuilder.create("homVar", Arrays.asList(T, T));
-
- List<Genotype> allGenotypes = Arrays.asList(noCall, mixed, homRef, het, homVar);
- final int nCycles = allGenotypes.size() * 10;
-
- for ( int i = 0; i < nCycles; i++ ) {
- int nNoCall = 0, nNoCallAlleles = 0, nA = 0, nT = 0, nMixed = 0, nHomRef = 0, nHet = 0, nHomVar = 0;
- int nSamples = 0;
- GenotypesContext gc = GenotypesContext.create();
- for ( int j = 0; j < i; j++ ) {
- nSamples++;
- Genotype g = allGenotypes.get(j % allGenotypes.size());
- final String name = String.format("%s_%d%d", g.getSampleName(), i, j);
- gc.add(GenotypeBuilder.create(name, g.getAlleles()));
- switch ( g.getType() ) {
- case NO_CALL: nNoCall++; nNoCallAlleles++; break;
- case HOM_REF: nA += 2; nHomRef++; break;
- case HET: nA++; nT++; nHet++; break;
- case HOM_VAR: nT += 2; nHomVar++; break;
- case MIXED: nA++; nNoCallAlleles++; nMixed++; break;
- default: throw new RuntimeException("Unexpected genotype type " + g.getType());
- }
-
- }
-
- VariantContext vc = new VariantContextBuilder("genotypes", snpLoc, snpLocStart, snpLocStop, Arrays.asList(Aref, T)).genotypes(gc).make();
- Assert.assertEquals(vc.getNSamples(), nSamples);
- if ( nSamples > 0 ) {
- Assert.assertEquals(vc.isPolymorphicInSamples(), nT > 0);
- Assert.assertEquals(vc.isMonomorphicInSamples(), nT == 0);
- }
- Assert.assertEquals(vc.getCalledChrCount(), nA + nT);
-
- Assert.assertEquals(vc.getCalledChrCount(Allele.NO_CALL), nNoCallAlleles);
- Assert.assertEquals(vc.getCalledChrCount(Aref), nA);
- Assert.assertEquals(vc.getCalledChrCount(T), nT);
-
- Assert.assertEquals(vc.getNoCallCount(), nNoCall);
- Assert.assertEquals(vc.getHomRefCount(), nHomRef);
- Assert.assertEquals(vc.getHetCount(), nHet);
- Assert.assertEquals(vc.getHomVarCount(), nHomVar);
- Assert.assertEquals(vc.getMixedCount(), nMixed);
- }
- }
-}
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/VariantJEXLContextUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/VariantJEXLContextUnitTest.java
deleted file mode 100644
index e92df8a..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/VariantJEXLContextUnitTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext;
-
-import org.broadinstitute.variant.VariantBaseTest;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- *
- * @author aaron
- *
- * Class VariantJEXLContextUnitTest
- *
- * Test out parts of the VariantJEXLContext
- */
-public class VariantJEXLContextUnitTest extends VariantBaseTest {
-
- private static String expression = "QUAL > 500.0";
- private static VariantContextUtils.JexlVCMatchExp exp;
-
- Allele A, Aref, T, Tref;
-
- Allele ATC, ATCref;
- // A [ref] / T at 10
-
- // - / ATC [ref] from 20-23
-
- @BeforeClass
- public void beforeClass() {
- try {
- exp = new VariantContextUtils.JexlVCMatchExp("name", VariantContextUtils.engine.get().createExpression(expression));
- } catch (Exception e) {
- Assert.fail("Unable to create expression" + e.getMessage());
- }
- }
-
- @BeforeMethod
- public void before() {
- A = Allele.create("A");
- Aref = Allele.create("A", true);
- T = Allele.create("T");
- Tref = Allele.create("T", true);
-
- ATC = Allele.create("ATC");
- ATCref = Allele.create("ATC", true);
- }
-
-
- @Test
- public void testGetValue() {
- Map<VariantContextUtils.JexlVCMatchExp, Boolean> map = getVarContext();
-
- // make sure the context has a value
- Assert.assertTrue(!map.isEmpty());
- Assert.assertEquals(map.size(), 1);
-
- // eval our known expression
- Assert.assertTrue(!map.get(exp));
- }
-
- @Test(expectedExceptions=UnsupportedOperationException.class)
- public void testContainsValue() {
- Map<VariantContextUtils.JexlVCMatchExp, Boolean> map = getVarContext();
-
- map.containsValue(exp);
- }
-
- @Test(expectedExceptions=UnsupportedOperationException.class)
- public void testRemove() {
- Map<VariantContextUtils.JexlVCMatchExp, Boolean> map = getVarContext();
-
- map.remove(exp);
- }
-
- @Test(expectedExceptions=UnsupportedOperationException.class)
- public void testEntrySet() {
- Map<VariantContextUtils.JexlVCMatchExp, Boolean> map = getVarContext();
-
- map.entrySet();
- }
-
- @Test(expectedExceptions=UnsupportedOperationException.class)
- public void testClear() {
- Map<VariantContextUtils.JexlVCMatchExp, Boolean> map = getVarContext();
-
- map.clear();
- }
-
- /**
- * helper method
- * @return a VariantJEXLContext
- */
- private JEXLMap getVarContext() {
- List<Allele> alleles = Arrays.asList(Aref, T);
-
- VariantContext vc = new VariantContextBuilder("test", "chr1", 10, 10, alleles).make();
- return new JEXLMap(Arrays.asList(exp),vc);
- }
-}
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/TabixOnTheFlyIndexCreationTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/writer/TabixOnTheFlyIndexCreationTest.java
deleted file mode 100644
index d51e74f..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/TabixOnTheFlyIndexCreationTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The MIT License
- *
- * Copyright (c) 2014 The Broad Institute
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-package org.broadinstitute.variant.variantcontext.writer;
-
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.CloseableTribbleIterator;
-import org.broad.tribble.FeatureReader;
-import org.broad.tribble.index.tabix.TabixIndex;
-import org.broad.tribble.util.TabixUtils;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.vcf.VCF3Codec;
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.util.EnumSet;
-
-public class TabixOnTheFlyIndexCreationTest {
- private static final File SMALL_VCF = new File("testdata/tribble/tabix/trioDup.vcf.gz");
- @Test
- public void simpleTest() throws Exception {
- final VCF3Codec codec = new VCF3Codec();
- final FeatureReader<VariantContext> reader = AbstractFeatureReader.getFeatureReader(SMALL_VCF.getAbsolutePath(), codec, false);
- final VCFHeader headerFromFile = (VCFHeader)reader.getHeader();
- final File vcf = File.createTempFile("TabixOnTheFlyIndexCreationTest.", ".vcf.gz");
- final File tabix = new File(vcf.getAbsolutePath() + TabixUtils.STANDARD_INDEX_EXTENSION);
- vcf.deleteOnExit();
- tabix.deleteOnExit();
- final VariantContextWriter vcfWriter = new VariantContextWriterBuilder()
- .setOutputFile(vcf)
- .setReferenceDictionary(headerFromFile.getSequenceDictionary())
- .setOptions(EnumSet.of(Options.INDEX_ON_THE_FLY, Options.ALLOW_MISSING_FIELDS_IN_HEADER))
- .build();
- vcfWriter.writeHeader(headerFromFile);
- final CloseableTribbleIterator<VariantContext> it = reader.iterator();
- while (it.hasNext()) {
- vcfWriter.add(it.next());
- }
- it.close();
- vcfWriter.close();
-
- // Hard to validate, so just confirm that index can be read.
- new TabixIndex(tabix);
- }
-}
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VCFWriterUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VCFWriterUnitTest.java
deleted file mode 100644
index 86bb738..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VCFWriterUnitTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.TestUtil;
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.FeatureReader;
-import org.broad.tribble.Tribble;
-import org.broad.tribble.util.TabixUtils;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.variantcontext.*;
-import org.broadinstitute.variant.vcf.*;
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * @author aaron
- * <p/>
- * Class VCFWriterUnitTest
- * <p/>
- * This class tests out the ability of the VCF writer to correctly write VCF files
- */
-public class VCFWriterUnitTest extends VariantBaseTest {
- private Set<VCFHeaderLine> metaData;
- private Set<String> additionalColumns;
-
- /** test, using the writer and reader, that we can output and input a VCF file without problems */
- @Test(dataProvider = "vcfExtensionsDataProvider")
- public void testBasicWriteAndRead(final String extension) throws IOException {
- final File fakeVCFFile = File.createTempFile("testBasicWriteAndRead.", extension);
- fakeVCFFile.deleteOnExit();
- Tribble.indexFile(fakeVCFFile).deleteOnExit();
- metaData = new HashSet<VCFHeaderLine>();
- additionalColumns = new HashSet<String>();
- final SAMSequenceDictionary sequenceDict = createArtificialSequenceDictionary();
- final VCFHeader header = createFakeHeader(metaData, additionalColumns, sequenceDict);
- final VariantContextWriter writer = new VariantContextWriterBuilder()
- .setOutputFile(fakeVCFFile)
- .setReferenceDictionary(sequenceDict)
- .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER, Options.INDEX_ON_THE_FLY))
- .build();
- writer.writeHeader(header);
- writer.add(createVC(header));
- writer.add(createVC(header));
- writer.close();
- final VCFCodec codec = new VCFCodec();
- final FeatureReader<VariantContext> reader = AbstractFeatureReader.getFeatureReader(fakeVCFFile.getAbsolutePath(), codec, false);
- final VCFHeader headerFromFile = (VCFHeader)reader.getHeader();
-
- int counter = 0;
-
- // validate what we're reading in
- validateHeader(headerFromFile, sequenceDict);
-
- try {
- final Iterator<VariantContext> it = reader.iterator();
- while(it.hasNext()) {
- it.next();
- counter++;
- }
- Assert.assertEquals(counter, 2);
- }
- catch (final IOException e ) {
- throw new RuntimeException(e.getMessage());
- }
-
- }
-
- /**
- * create a fake header of known quantity
- * @param metaData the header lines
- * @param additionalColumns the additional column names
- * @return a fake VCF header
- */
- public static VCFHeader createFakeHeader(final Set<VCFHeaderLine> metaData, final Set<String> additionalColumns,
- final SAMSequenceDictionary sequenceDict) {
- metaData.add(new VCFHeaderLine(VCFHeaderVersion.VCF4_0.getFormatString(), VCFHeaderVersion.VCF4_0.getVersionString()));
- metaData.add(new VCFHeaderLine("two", "2"));
- additionalColumns.add("extra1");
- additionalColumns.add("extra2");
- final VCFHeader ret = new VCFHeader(metaData, additionalColumns);
- ret.setSequenceDictionary(sequenceDict);
- return ret;
- }
-
- /**
- * create a fake VCF record
- * @param header the VCF header
- * @return a VCFRecord
- */
- private VariantContext createVC(final VCFHeader header) {
-
- return createVCGeneral(header,"1",1);
- }
-
- private VariantContext createVCGeneral(final VCFHeader header, final String chrom, final int position) {
- final List<Allele> alleles = new ArrayList<Allele>();
- final Map<String, Object> attributes = new HashMap<String,Object>();
- final GenotypesContext genotypes = GenotypesContext.create(header.getGenotypeSamples().size());
-
- alleles.add(Allele.create("A",true));
- alleles.add(Allele.create("ACC",false));
-
- attributes.put("DP","50");
- for (final String name : header.getGenotypeSamples()) {
- final Genotype gt = new GenotypeBuilder(name,alleles.subList(1,2)).GQ(0).attribute("BB", "1").phased(true).make();
- genotypes.add(gt);
- }
- return new VariantContextBuilder("RANDOM", chrom, position, position, alleles)
- .genotypes(genotypes).attributes(attributes).make();
- }
-
-
- /**
- * validate a VCF header
- * @param header the header to validate
- */
- public void validateHeader(final VCFHeader header, final SAMSequenceDictionary sequenceDictionary) {
- // check the fields
- int index = 0;
- for (final VCFHeader.HEADER_FIELDS field : header.getHeaderFields()) {
- Assert.assertEquals(VCFHeader.HEADER_FIELDS.values()[index], field);
- index++;
- }
- Assert.assertEquals(header.getMetaDataInSortedOrder().size(), metaData.size() + sequenceDictionary.size());
- index = 0;
- for (final String key : header.getGenotypeSamples()) {
- Assert.assertTrue(additionalColumns.contains(key));
- index++;
- }
- Assert.assertEquals(index, additionalColumns.size());
- }
-
- @Test(dataProvider = "vcfExtensionsDataProvider")
- public void TestWritingLargeVCF(final String extension) throws FileNotFoundException, InterruptedException {
-
- final Set<VCFHeaderLine> metaData = new HashSet<VCFHeaderLine>();
- final Set<String> Columns = new HashSet<String>();
- for (int i = 0; i < 123; i++) {
-
- Columns.add(String.format("SAMPLE_%d", i));
- }
-
- final SAMSequenceDictionary dict = createArtificialSequenceDictionary();
- final VCFHeader header = createFakeHeader(metaData,Columns, dict);
-
- final File tempDir = TestUtil.getTempDirectory("VCFWriter", "StaleIndex");
-
- tempDir.deleteOnExit();
-
- final File vcf = new File(tempDir, "test" + extension);
- final String indexExtension;
- if (extension.equals(".vcf.gz")) {
- indexExtension = TabixUtils.STANDARD_INDEX_EXTENSION;
- } else {
- indexExtension = Tribble.STANDARD_INDEX_EXTENSION;
- }
- final File vcfIndex = new File(vcf.getAbsolutePath() + indexExtension);
-
- for(int count=1;count<2; count++){
- final VariantContextWriter writer = new VariantContextWriterBuilder()
- .setOutputFile(vcf)
- .setReferenceDictionary(dict)
- .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER, Options.INDEX_ON_THE_FLY))
- .build();
- writer.writeHeader(header);
-
- for (int i = 1; i < 17 ; i++) { // write 17 chromosomes
- for (int j = 1; j < 10; j++) { //10 records each
- writer.add(createVCGeneral(header, String.format("%d", i), j * 100));
- }
- }
- writer.close();
-
- Assert.assertTrue(vcf.lastModified() <= vcfIndex.lastModified());
- }
- }
-
- @DataProvider(name = "vcfExtensionsDataProvider")
- public Object[][]vcfExtensionsDataProvider() {
- return new Object[][] {
- // TODO: BCF doesn't work because header is not properly constructed.
- // {".bcf"},
- {".vcf"},
- {".vcf.gz"}
- };
- }
-}
-
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterBuilderUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterBuilderUnitTest.java
deleted file mode 100644
index b5e7f1a..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWriterBuilderUnitTest.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
-* Copyright (c) 2014 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.broad.tribble.Tribble;
-import org.broad.tribble.index.tabix.TabixIndex;
-import org.broad.tribble.util.TabixUtils;
-import org.testng.Assert;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Test;
-
-import net.sf.samtools.Defaults;
-import net.sf.samtools.SAMSequenceDictionary;
-import net.sf.samtools.util.BlockCompressedOutputStream;
-import org.broad.tribble.AbstractFeatureReader;
-import org.broadinstitute.variant.VariantBaseTest;
-
-public class VariantContextWriterBuilderUnitTest extends VariantBaseTest {
- private SAMSequenceDictionary dictionary;
-
- private final File vcf = new File("test.vcf");
- private final File vcfIdx = new File("test.vcf" + Tribble.STANDARD_INDEX_EXTENSION);
- private final File vcfMD5 = new File("test.vcf.md5");
- private final File bcf = new File("test.bcf");
- private final File bcfIdx = new File("test.bcf" + Tribble.STANDARD_INDEX_EXTENSION);
- private final File unknown = new File("test.unknown");
-
- private List<File> blockCompressedVCFs;
- private List<File> blockCompressedIndices;
-
- @BeforeSuite
- public void before() throws IOException {
- dictionary = createArtificialSequenceDictionary();
- vcf.deleteOnExit();
- vcfIdx.deleteOnExit();
- vcfMD5.deleteOnExit();
- bcf.deleteOnExit();
- bcfIdx.deleteOnExit();
- unknown.deleteOnExit();
-
- blockCompressedVCFs = new ArrayList<File>();
- blockCompressedIndices = new ArrayList<File>();
- for (final String extension : AbstractFeatureReader.BLOCK_COMPRESSED_EXTENSIONS) {
- final File blockCompressed = new File("test.vcf" + extension);
- blockCompressed.deleteOnExit();
- blockCompressedVCFs.add(blockCompressed);
-
- final File index = new File("test.vcf" + extension + TabixUtils.STANDARD_INDEX_EXTENSION);
- index.deleteOnExit();
- blockCompressedIndices.add(index);
- }
- }
-
- @Test
- public void testSetOutputFile() {
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary);
-
- VariantContextWriter writer = builder.setOutputFile(vcf.getAbsolutePath()).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile VCF String");
- Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile VCF String was compressed");
-
- writer = builder.setOutputFile(vcf).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile VCF File");
- Assert.assertFalse(((VCFWriter)writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile VCF File was compressed");
-
- for (final String extension : AbstractFeatureReader.BLOCK_COMPRESSED_EXTENSIONS) {
- final String filename = "test.vcf" + extension;
- final File file = new File(filename);
- file.deleteOnExit();
-
- writer = builder.setOutputFile(filename).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile " + extension + " String");
- Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile " + extension + " String was not compressed");
-
- writer = builder.setOutputFile(file).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile " + extension + " File");
- Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFile " + extension + " File was not compressed");
- }
-
- writer = builder.setOutputFile(bcf).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFile BCF String");
-
- writer = builder.setOutputFile(bcf.getAbsolutePath()).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFile BCF File");
- }
-
- @Test
- public void testSetOutputFileType() {
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputFile(unknown);
-
- VariantContextWriter writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.VCF).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFileType VCF");
- Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType VCF was compressed");
-
- writer = builder.setOption(Options.FORCE_BCF).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType FORCE_BCF set -> expected BCF, was VCF");
-
- // test that FORCE_BCF remains in effect, overriding the explicit setting of VCF
- writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.VCF).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType FORCE_BCF set 2 -> expected BCF, was VCF");
-
- writer = builder.unsetOption(Options.FORCE_BCF).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFileType FORCE_BCF unset -> expected VCF, was BCF");
- Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType FORCE_BCF unset was compressed");
-
- writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.BLOCK_COMPRESSED_VCF).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputFile BLOCK_COMPRESSED_VCF");
- Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BlockCompressedOutputStream, "testSetOutputFileType BLOCK_COMPRESSED_VCF was not compressed");
-
- writer = builder.setOutputFileType(VariantContextWriterBuilder.OutputType.BCF).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputFileType BCF");
- }
-
- @Test
- public void testSetOutputStream() {
- final OutputStream stream = new ByteArrayOutputStream();
-
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .unsetOption(Options.INDEX_ON_THE_FLY)
- .setOutputStream(stream);
-
- VariantContextWriter writer = builder.build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream default");
-
- writer = builder.setOption(Options.FORCE_BCF).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream FORCE_BCF set -> expected BCF stream, was VCF stream");
-
- // test that FORCE_BCF remains in effect, overriding the explicit setting of VCF
- writer = builder.setOutputVCFStream(stream).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream FORCE_BCF set 2 -> expected BCF stream, was VCF stream");
-
- writer = builder.unsetOption(Options.FORCE_BCF).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream FORCE_BCF unset -> expected VCF stream, was BCF stream");
-
- writer = builder.setOutputBCFStream(stream).build();
- Assert.assertTrue(writer instanceof BCF2Writer, "testSetOutputStream BCF");
-
- writer = builder.setOutputVCFStream(stream).build();
- Assert.assertTrue(writer instanceof VCFWriter, "testSetOutputStream VCF");
- }
-
- @Test
- public void testAsync() {
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputFile(vcf);
-
- VariantContextWriter writer = builder.build();
- Assert.assertEquals(writer instanceof AsyncVariantContextWriter, Defaults.USE_ASYNC_IO, "testAsync default");
-
- writer = builder.setOption(Options.USE_ASYNC_IO).build();
- Assert.assertTrue(writer instanceof AsyncVariantContextWriter, "testAsync option=set");
-
- writer = builder.unsetOption(Options.USE_ASYNC_IO).build();
- Assert.assertFalse(writer instanceof AsyncVariantContextWriter, "testAsync option=unset");
- }
-
- @Test
- public void testBuffering() {
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputFile(vcf)
- .unsetOption(Options.INDEX_ON_THE_FLY); // so the potential BufferedOutputStream is not wrapped in a PositionalOutputStream
-
- VariantContextWriter writer = builder.build();
- Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BufferedOutputStream, "testBuffering was not buffered by default");
-
- writer = builder.unsetBuffering().build();
- Assert.assertFalse(((VCFWriter) writer).getOutputStream() instanceof BufferedOutputStream, "testBuffering was buffered when unset");
-
- writer = builder.setBuffer(8192).build();
- Assert.assertTrue(((VCFWriter) writer).getOutputStream() instanceof BufferedOutputStream, "testBuffering was not buffered when set");
- }
-
- @Test
- public void testMD5() {
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputFile(vcf);
-
- VariantContextWriter writer = builder.build();
- writer.close();
- Assert.assertEquals(vcfMD5.exists(), Defaults.CREATE_MD5, "MD5 default setting not respected");
-
- if (vcfMD5.exists())
- vcfMD5.delete();
-
- writer = builder.setCreateMD5().build();
- writer.close();
- Assert.assertTrue(vcfMD5.exists(), "MD5 not created when requested");
- vcfMD5.delete();
-
- writer = builder.unsetCreateMD5().build();
- writer.close();
- Assert.assertFalse(vcfMD5.exists(), "MD5 created when not requested");
-
- writer = builder.setCreateMD5(false).build();
- writer.close();
- Assert.assertFalse(vcfMD5.exists(), "MD5 created when not requested via boolean parameter");
-
- writer = builder.setCreateMD5(true).build();
- writer.close();
- Assert.assertTrue(vcfMD5.exists(), "MD5 not created when requested via boolean parameter");
- vcfMD5.delete();
-
- for (final File blockCompressed : blockCompressedVCFs) {
- final File md5 = new File(blockCompressed + ".md5");
- if (md5.exists())
- md5.delete();
- md5.deleteOnExit();
- writer = builder.setOutputFile(blockCompressed).build();
- writer.close();
- Assert.assertTrue(md5.exists(), "MD5 digest not created for " + blockCompressed);
- }
- }
-
- @Test
- public void testIndexingOnTheFly() {
- final VariantContextWriterBuilder builder = new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOption(Options.INDEX_ON_THE_FLY);
-
- if (vcfIdx.exists())
- vcfIdx.delete();
- VariantContextWriter writer = builder.setOutputFile(vcf).build();
- writer.close();
- Assert.assertTrue(vcfIdx.exists(), String.format("VCF index not created for %s / %s", vcf, vcfIdx));
-
- if (bcfIdx.exists())
- bcfIdx.delete();
- writer = builder.setOutputFile(bcf).build();
- writer.close();
- Assert.assertTrue(bcfIdx.exists(), String.format("BCF index not created for %s / %s", bcf, bcfIdx));
-
- for (int i = 0; i < blockCompressedVCFs.size(); i++) {
- final File blockCompressed = blockCompressedVCFs.get(i);
- final File index = blockCompressedIndices.get(i);
- if (index.exists())
- index.delete();
- writer = builder.setOutputFile(blockCompressed).setReferenceDictionary(dictionary).build();
- writer.close();
- Assert.assertTrue(index.exists(), String.format("Block-compressed index not created for %s / %s", blockCompressed, index));
-
- // Tabix does not require a reference dictionary.
- // Tribble does: see tests testRefDictRequiredForVCFIndexOnTheFly / testRefDictRequiredForBCFIndexOnTheFly
-
- index.delete();
- writer = builder.setReferenceDictionary(null).build();
- writer.close();
- Assert.assertTrue(index.exists(), String.format("Block-compressed index not created for %s / %s", blockCompressed, index));
- }
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testInvalidImplicitFileType() {
- new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputFile("test.bam")
- .build();
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testSetInvalidFileType() {
- new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputFile("test.bam")
- .setOutputFileType(VariantContextWriterBuilder.OutputType.VCF_STREAM)
- .build();
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testInvalidSetFileTypeForStream() {
- new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputStream(new ByteArrayOutputStream())
- .setOutputFileType(VariantContextWriterBuilder.OutputType.VCF)
- .build();
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testUnsupportedIndexOnTheFlyForStreaming() {
- new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputStream(new ByteArrayOutputStream())
- .setOption(Options.INDEX_ON_THE_FLY)
- .build();
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testUnsupportedDefaultIndexOnTheFlyForStreaming() {
- new VariantContextWriterBuilder()
- .setReferenceDictionary(dictionary)
- .setOutputStream(new ByteArrayOutputStream())
- .build();
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testRefDictRequiredForVCFIndexOnTheFly() {
- new VariantContextWriterBuilder()
- .setOutputFile(vcf)
- .setOption(Options.INDEX_ON_THE_FLY)
- .build();
- }
-
- @Test(expectedExceptions = IllegalArgumentException.class)
- public void testRefDictRequiredForBCFIndexOnTheFly() {
- new VariantContextWriterBuilder()
- .setOutputFile(bcf)
- .setOption(Options.INDEX_ON_THE_FLY)
- .build();
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWritersUnitTest.java b/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWritersUnitTest.java
deleted file mode 100644
index 7ee9f9b..0000000
--- a/src/tests/java/org/broadinstitute/variant/variantcontext/writer/VariantContextWritersUnitTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.variantcontext.writer;
-
-
-// the imports for unit testing.
-
-
-import net.sf.samtools.SAMSequenceDictionary;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.bcf2.BCF2Codec;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.VariantContextTestProvider;
-import org.broadinstitute.variant.vcf.VCFCodec;
-import org.broadinstitute.variant.vcf.VCFHeader;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.List;
-
-
-public class VariantContextWritersUnitTest extends VariantBaseTest {
- private SAMSequenceDictionary dictionary;
-
- @BeforeSuite
- public void before() throws IOException {
- dictionary = createArtificialSequenceDictionary();
- VariantContextTestProvider.initializeTests();
- }
-
- @DataProvider(name = "VariantContextTest_SingleContexts")
- public Object[][] SiteVCsTest() {
- List<Object[]> tests = new ArrayList<Object[]>();
- for ( VariantContextTestProvider.VariantContextTestData testData : VariantContextTestProvider.generateSiteTests() )
- tests.add(new Object[]{testData});
- return tests.toArray(new Object[][]{});
- }
-
- // --------------------------------------------------------------------------------
- //
- // Test BCF2 reader / writer
- //
- // --------------------------------------------------------------------------------
-
- @Test(dataProvider = "VariantContextTest_SingleContexts")
- public void testBCF2WriterReader(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
- VariantContextTestProvider.testReaderWriter(new BCFIOTester(), testData);
- }
-
- @Test(dataProvider = "VariantContextTest_SingleContexts")
- public void testBCF2WriterReaderMissingGenotypes(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
- VariantContextTestProvider.testReaderWriterWithMissingGenotypes(new BCFIOTester(), testData);
- }
-
- private class BCFIOTester extends VariantContextTestProvider.VariantContextIOTest<BCF2Codec> {
- @Override
- public String getExtension() {
- return ".bcf";
- }
-
- @Override
- public BCF2Codec makeCodec() {
- return new BCF2Codec();
- }
-
- @Override
- public VariantContextWriter makeWriter(final File file, final EnumSet<Options> baseOptions) {
- return new VariantContextWriterBuilder()
- .setOutputFile(file)
- .setReferenceDictionary(dictionary)
- .setOptions(baseOptions)
- .build();
- }
-
- @Override
- public VariantContextTestProvider.VariantContextContainer readAllVCs(File input) throws IOException {
- final BCF2Codec codec = this.makeCodec();
- return VariantContextTestProvider.readAllVCs(input, codec);
- }
- }
-
- // --------------------------------------------------------------------------------
- //
- // Test VCF reader / writer
- //
- // --------------------------------------------------------------------------------
-
- @Test(enabled = true, dataProvider = "VariantContextTest_SingleContexts")
- public void testVCF4WriterReader(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
- VariantContextTestProvider.testReaderWriter(new VCFIOTester(), testData);
- }
-
- @Test(enabled = true, dataProvider = "VariantContextTest_SingleContexts")
- public void testVCF4WriterReaderMissingGenotypes(final VariantContextTestProvider.VariantContextTestData testData) throws IOException {
- VariantContextTestProvider.testReaderWriterWithMissingGenotypes(new VCFIOTester(), testData);
- }
-
- private class VCFIOTester extends VariantContextTestProvider.VariantContextIOTest<VCFCodec> {
- @Override
- public String getExtension() {
- return ".vcf";
- }
-
- @Override
- public List<VariantContext> postprocess(final VCFHeader header, final List<VariantContext> vcsAfterIO) {
- final List<VariantContext> fullyDecoded = new ArrayList<VariantContext>(vcsAfterIO.size());
-
- for ( final VariantContext withStrings : vcsAfterIO )
- fullyDecoded.add(withStrings.fullyDecode(header, false));
-
- return fullyDecoded;
- }
-
- @Override
- public VCFCodec makeCodec() {
- return new VCFCodec();
- }
-
- @Override
- public VariantContextWriter makeWriter(final File file, final EnumSet<Options> baseOptions) {
- return new VariantContextWriterBuilder()
- .setOutputFile(file)
- .setReferenceDictionary(dictionary)
- .setOptions(baseOptions)
- .build();
- }
-
- @Override
- public VariantContextTestProvider.VariantContextContainer readAllVCs(File input) throws FileNotFoundException {
- final VCFCodec codec = this.makeCodec();
- return VariantContextTestProvider.readAllVCs(input, codec);
- }
- }
-}
\ No newline at end of file
diff --git a/src/tests/java/org/broadinstitute/variant/vcf/IndexFactoryUnitTest.java b/src/tests/java/org/broadinstitute/variant/vcf/IndexFactoryUnitTest.java
deleted file mode 100644
index fcf8382..0000000
--- a/src/tests/java/org/broadinstitute/variant/vcf/IndexFactoryUnitTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import net.sf.samtools.SAMSequenceDictionary;
-import org.broad.tribble.AbstractFeatureReader;
-import org.broad.tribble.CloseableTribbleIterator;
-import org.broad.tribble.Tribble;
-import org.broad.tribble.index.Index;
-import org.broad.tribble.index.IndexFactory;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.broadinstitute.variant.variantcontext.writer.Options;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriter;
-import org.broadinstitute.variant.variantcontext.writer.VariantContextWriterBuilder;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.EnumSet;
-
-/**
- * tests out the various functions in the index factory class
- */
-public class IndexFactoryUnitTest extends VariantBaseTest {
-
- File inputFile = new File(variantTestDataRoot + "HiSeq.10000.vcf");
- File outputFile = createTempFile("onTheFlyOutputTest", ".vcf");
- File outputFileIndex = Tribble.indexFile(outputFile);
-
- private SAMSequenceDictionary dict;
-
- @BeforeTest
- public void setup() {
- dict = createArtificialSequenceDictionary();
- }
-
- //
- // test out scoring the indexes
- //
- @Test
- public void testOnTheFlyIndexing1() throws IOException {
- final Index indexFromInputFile = IndexFactory.createDynamicIndex(inputFile, new VCFCodec());
- if ( outputFileIndex.exists() ) {
- System.err.println("Deleting " + outputFileIndex);
- outputFileIndex.delete();
- }
-
- for ( int maxRecords : Arrays.asList(0, 1, 10, 100, 1000, -1)) {
- final AbstractFeatureReader source = AbstractFeatureReader.getFeatureReader(inputFile.getAbsolutePath(), new VCFCodec(), indexFromInputFile);
-
- int counter = 0;
- VariantContextWriter writer = new VariantContextWriterBuilder()
- .setOutputFile(outputFile)
- .setReferenceDictionary(dict)
- .setOptions(EnumSet.of(Options.ALLOW_MISSING_FIELDS_IN_HEADER))
- .build();
- writer.writeHeader((VCFHeader)source.getHeader());
- CloseableTribbleIterator<VariantContext> it = source.iterator();
- while (it.hasNext() && (counter++ < maxRecords || maxRecords == -1) ) {
- VariantContext vc = it.next();
- writer.add(vc);
- }
- writer.close();
-
- // test that the input index is the same as the one created from the identical input file
- // test that the dynamic index is the same as the output index, which is equal to the input index
- //WalkerTest.assertOnDiskIndexEqualToNewlyCreatedIndex(outputFileIndex, "unittest", outputFile);
- }
- }
-}
diff --git a/src/tests/java/org/broadinstitute/variant/vcf/VCFCompoundHeaderLineUnitTest.java b/src/tests/java/org/broadinstitute/variant/vcf/VCFCompoundHeaderLineUnitTest.java
deleted file mode 100644
index ef8b960..0000000
--- a/src/tests/java/org/broadinstitute/variant/vcf/VCFCompoundHeaderLineUnitTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broadinstitute.variant.VariantBaseTest;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-
-/**
- * User: ebanks
- * Date: Apr 2, 2014
- */
-public class VCFCompoundHeaderLineUnitTest extends VariantBaseTest {
-
- @Test
- public void supportsVersionFields() {
- final String line = "<ID=FOO,Number=1,Type=Float,Description=\"foo\",Version=3>";
- final VCFCompoundHeaderLine headerline = new VCFInfoHeaderLine(line, VCFHeaderVersion.VCF4_2);
- // if we don't support version fields then we should fail before we ever get here
- Assert.assertTrue(true);
- }
-}
diff --git a/src/tests/java/org/broadinstitute/variant/vcf/VCFEncoderTest.java b/src/tests/java/org/broadinstitute/variant/vcf/VCFEncoderTest.java
deleted file mode 100644
index d9fa13e..0000000
--- a/src/tests/java/org/broadinstitute/variant/vcf/VCFEncoderTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.broadinstitute.variant.vcf;
-
-import org.testng.Assert;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class VCFEncoderTest {
-
- @DataProvider(name = "VCFWriterDoubleFormatTestData")
- public Object[][] makeVCFWriterDoubleFormatTestData() {
- List<Object[]> tests = new ArrayList<Object[]>();
- tests.add(new Object[]{1.0, "1.00"});
- tests.add(new Object[]{10.1, "10.10"});
- tests.add(new Object[]{10.01, "10.01"});
- tests.add(new Object[]{10.012, "10.01"});
- tests.add(new Object[]{10.015, "10.02"});
- tests.add(new Object[]{0.0, "0.00"});
- tests.add(new Object[]{0.5, "0.500"});
- tests.add(new Object[]{0.55, "0.550"});
- tests.add(new Object[]{0.555, "0.555"});
- tests.add(new Object[]{0.5555, "0.556"});
- tests.add(new Object[]{0.1, "0.100"});
- tests.add(new Object[]{0.050, "0.050"});
- tests.add(new Object[]{0.010, "0.010"});
- tests.add(new Object[]{0.012, "0.012"});
- tests.add(new Object[]{0.0012, "1.200e-03"});
- tests.add(new Object[]{1.2e-4, "1.200e-04"});
- tests.add(new Object[]{1.21e-4, "1.210e-04"});
- tests.add(new Object[]{1.212e-5, "1.212e-05"});
- tests.add(new Object[]{1.2123e-6, "1.212e-06"});
- tests.add(new Object[]{Double.POSITIVE_INFINITY, "Infinity"});
- tests.add(new Object[]{Double.NEGATIVE_INFINITY, "-Infinity"});
- tests.add(new Object[]{Double.NaN, "NaN"});
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "VCFWriterDoubleFormatTestData")
- public void testVCFWriterDoubleFormatTestData(final double d, final String expected) {
- Assert.assertEquals(VCFEncoder.formatVCFDouble(d), expected, "Failed to pretty print double in VCFWriter");
- }
-
-}
diff --git a/src/tests/java/org/broadinstitute/variant/vcf/VCFHeaderUnitTest.java b/src/tests/java/org/broadinstitute/variant/vcf/VCFHeaderUnitTest.java
deleted file mode 100644
index 9417809..0000000
--- a/src/tests/java/org/broadinstitute/variant/vcf/VCFHeaderUnitTest.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broad.tribble.TribbleException;
-import org.broad.tribble.readers.AsciiLineReader;
-import org.broad.tribble.readers.AsciiLineReaderIterator;
-import org.broad.tribble.readers.LineIteratorImpl;
-import org.broad.tribble.readers.LineReaderUtil;
-import org.broad.tribble.readers.PositionalBufferedStream;
-import org.broadinstitute.variant.VariantBaseTest;
-import org.broadinstitute.variant.variantcontext.VariantContext;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import java.io.*;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * Created by IntelliJ IDEA.
- * User: aaron
- * Date: Jun 30, 2010
- * Time: 3:32:08 PM
- * To change this template use File | Settings | File Templates.
- */
-public class VCFHeaderUnitTest extends VariantBaseTest {
-
- private VCFHeader createHeader(String headerStr) {
- VCFCodec codec = new VCFCodec();
- VCFHeader header = (VCFHeader) codec.readActualHeader(new LineIteratorImpl(LineReaderUtil.fromBufferedStream(new PositionalBufferedStream(new StringBufferInputStream(headerStr)), LineReaderUtil.LineReaderOption.SYNCHRONOUS)));
- Assert.assertEquals(header.getMetaDataInInputOrder().size(), VCF4headerStringCount);
- return header;
- }
-
- @Test
- public void testVCF4ToVCF4() {
- VCFHeader header = createHeader(VCF4headerStrings);
- checkMD5ofHeaderFile(header, "f05a57053a0c6a5bac15dba566f7f7ff");
- }
-
- @Test
- public void testVCF4ToVCF4_alternate() {
- VCFHeader header = createHeader(VCF4headerStrings_with_negativeOne);
- checkMD5ofHeaderFile(header, "b1d71cc94261053131f8d239d65a8c9f");
- }
-
- @Test
- public void testVCFHeaderSampleRenamingSingleSampleVCF() throws Exception {
- final VCFCodec codec = new VCFCodec();
- codec.setRemappedSampleName("FOOSAMPLE");
- final AsciiLineReaderIterator vcfIterator = new AsciiLineReaderIterator(new AsciiLineReader(new FileInputStream(variantTestDataRoot + "HiSeq.10000.vcf")));
- final VCFHeader header = (VCFHeader)codec.readHeader(vcfIterator).getHeaderValue();
-
- Assert.assertEquals(header.getNGenotypeSamples(), 1, "Wrong number of samples in remapped header");
- Assert.assertEquals(header.getGenotypeSamples().get(0), "FOOSAMPLE", "Sample name in remapped header has incorrect value");
-
- int recordCount = 0;
- while ( vcfIterator.hasNext() && recordCount < 10) {
- recordCount++;
- final VariantContext vcfRecord = codec.decode(vcfIterator.next());
-
- Assert.assertEquals(vcfRecord.getSampleNames().size(), 1, "Wrong number of samples in vcf record after remapping");
- Assert.assertEquals(vcfRecord.getSampleNames().iterator().next(), "FOOSAMPLE", "Wrong sample in vcf record after remapping");
- }
- }
-
- @Test(expectedExceptions = TribbleException.class)
- public void testVCFHeaderSampleRenamingMultiSampleVCF() throws Exception {
- final VCFCodec codec = new VCFCodec();
- codec.setRemappedSampleName("FOOSAMPLE");
- final AsciiLineReaderIterator vcfIterator = new AsciiLineReaderIterator(new AsciiLineReader(new FileInputStream(variantTestDataRoot + "ex2.vcf")));
- final VCFHeader header = (VCFHeader)codec.readHeader(vcfIterator).getHeaderValue();
- }
-
- @Test(expectedExceptions = TribbleException.class)
- public void testVCFHeaderSampleRenamingSitesOnlyVCF() throws Exception {
- final VCFCodec codec = new VCFCodec();
- codec.setRemappedSampleName("FOOSAMPLE");
- final AsciiLineReaderIterator vcfIterator = new AsciiLineReaderIterator(new AsciiLineReader(new FileInputStream(variantTestDataRoot + "dbsnp_135.b37.1000.vcf")));
- final VCFHeader header = (VCFHeader)codec.readHeader(vcfIterator).getHeaderValue();
- }
-
- /**
- * a little utility function for all tests to md5sum a file
- * Shameless taken from:
- *
- * http://www.javalobby.org/java/forums/t84420.html
- *
- * @param file the file
- * @return a string
- */
- private static String md5SumFile(File file) {
- MessageDigest digest;
- try {
- digest = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException e) {
- throw new RuntimeException("Unable to find MD5 digest");
- }
- InputStream is;
- try {
- is = new FileInputStream(file);
- } catch (FileNotFoundException e) {
- throw new RuntimeException("Unable to open file " + file);
- }
- byte[] buffer = new byte[8192];
- int read;
- try {
- while ((read = is.read(buffer)) > 0) {
- digest.update(buffer, 0, read);
- }
- byte[] md5sum = digest.digest();
- BigInteger bigInt = new BigInteger(1, md5sum);
- return bigInt.toString(16);
-
- }
- catch (IOException e) {
- throw new RuntimeException("Unable to process file for MD5", e);
- }
- finally {
- try {
- is.close();
- }
- catch (IOException e) {
- throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
- }
- }
- }
-
- private void checkMD5ofHeaderFile(VCFHeader header, String md5sum) {
- File myTempFile = null;
- PrintWriter pw = null;
- try {
- myTempFile = File.createTempFile("VCFHeader","vcf");
- myTempFile.deleteOnExit();
- pw = new PrintWriter(myTempFile);
- } catch (IOException e) {
- Assert.fail("Unable to make a temp file!");
- }
- for (VCFHeaderLine line : header.getMetaDataInSortedOrder())
- pw.println(line);
- pw.close();
- Assert.assertEquals(md5SumFile(myTempFile), md5sum);
- }
-
- public static int VCF4headerStringCount = 16;
-
- public static String VCF4headerStrings =
- "##fileformat=VCFv4.0\n"+
- "##filedate=2010-06-21\n"+
- "##reference=NCBI36\n"+
- "##INFO=<ID=GC, Number=0, Type=Flag, Description=\"Overlap with Gencode CCDS coding sequence\">\n"+
- "##INFO=<ID=DP, Number=1, Type=Integer, Description=\"Total number of reads in haplotype window\">\n"+
- "##INFO=<ID=AF, Number=A, Type=Float, Description=\"Dindel estimated population allele frequency\">\n"+
- "##INFO=<ID=CA, Number=1, Type=String, Description=\"Pilot 1 callability mask\">\n"+
- "##INFO=<ID=HP, Number=1, Type=Integer, Description=\"Reference homopolymer tract length\">\n"+
- "##INFO=<ID=NS, Number=1, Type=Integer, Description=\"Number of samples with data\">\n"+
- "##INFO=<ID=DB, Number=0, Type=Flag, Description=\"dbSNP membership build 129 - type match and indel sequence length match within 25 bp\">\n"+
- "##INFO=<ID=NR, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on reverse strand\">\n"+
- "##INFO=<ID=NF, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on forward strand\">\n"+
- "##FILTER=<ID=NoQCALL, Description=\"Variant called by Dindel but not confirmed by QCALL\">\n"+
- "##FORMAT=<ID=GT, Number=1, Type=String, Description=\"Genotype\">\n"+
- "##FORMAT=<ID=HQ, Number=2, Type=Integer, Description=\"Haplotype quality\">\n"+
- "##FORMAT=<ID=GQ, Number=1, Type=Integer, Description=\"Genotype quality\">\n"+
- "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n";
-
-
- public static String VCF4headerStrings_with_negativeOne =
- "##fileformat=VCFv4.0\n"+
- "##filedate=2010-06-21\n"+
- "##reference=NCBI36\n"+
- "##INFO=<ID=GC, Number=0, Type=Flag, Description=\"Overlap with Gencode CCDS coding sequence\">\n"+
- "##INFO=<ID=YY, Number=., Type=Integer, Description=\"Some weird value that has lots of parameters\">\n"+
- "##INFO=<ID=AF, Number=A, Type=Float, Description=\"Dindel estimated population allele frequency\">\n"+
- "##INFO=<ID=CA, Number=1, Type=String, Description=\"Pilot 1 callability mask\">\n"+
- "##INFO=<ID=HP, Number=1, Type=Integer, Description=\"Reference homopolymer tract length\">\n"+
- "##INFO=<ID=NS, Number=1, Type=Integer, Description=\"Number of samples with data\">\n"+
- "##INFO=<ID=DB, Number=0, Type=Flag, Description=\"dbSNP membership build 129 - type match and indel sequence length match within 25 bp\">\n"+
- "##INFO=<ID=NR, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on reverse strand\">\n"+
- "##INFO=<ID=NF, Number=1, Type=Integer, Description=\"Number of reads covering non-ref variant on forward strand\">\n"+
- "##FILTER=<ID=NoQCALL, Description=\"Variant called by Dindel but not confirmed by QCALL\">\n"+
- "##FORMAT=<ID=GT, Number=1, Type=String, Description=\"Genotype\">\n"+
- "##FORMAT=<ID=HQ, Number=2, Type=Integer, Description=\"Haplotype quality\">\n"+
- "##FORMAT=<ID=TT, Number=., Type=Integer, Description=\"Lots of TTs\">\n"+
- "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n";
-
-}
diff --git a/src/tests/java/org/broadinstitute/variant/vcf/VCFStandardHeaderLinesUnitTest.java b/src/tests/java/org/broadinstitute/variant/vcf/VCFStandardHeaderLinesUnitTest.java
deleted file mode 100644
index 8dcf896..0000000
--- a/src/tests/java/org/broadinstitute/variant/vcf/VCFStandardHeaderLinesUnitTest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-* Copyright (c) 2012 The Broad Institute
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-package org.broadinstitute.variant.vcf;
-
-import org.broadinstitute.variant.VariantBaseTest;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by IntelliJ IDEA.
- * User: aaron
- * Date: Jun 30, 2010
- * Time: 3:32:08 PM
- * To change this template use File | Settings | File Templates.
- */
-public class VCFStandardHeaderLinesUnitTest extends VariantBaseTest {
- @DataProvider(name = "getStandardLines")
- public Object[][] makeGetStandardLines() {
- List<Object[]> tests = new ArrayList<Object[]>();
-
- // info
- tests.add(new Object[]{"AC", "info", true});
- tests.add(new Object[]{"AN", "info", true});
- tests.add(new Object[]{"AF", "info", true});
- tests.add(new Object[]{"DP", "info", true});
- tests.add(new Object[]{"DB", "info", true});
- tests.add(new Object[]{"END", "info", true});
-
- // format
- tests.add(new Object[]{"GT", "format", true});
- tests.add(new Object[]{"GQ", "format", true});
- tests.add(new Object[]{"DP", "format", true});
- tests.add(new Object[]{"AD", "format", true});
- tests.add(new Object[]{"PL", "format", true});
-
- tests.add(new Object[]{"NOT_STANDARD", "info", false});
- tests.add(new Object[]{"NOT_STANDARD", "format", false});
-
- return tests.toArray(new Object[][]{});
- }
-
-
- @Test(dataProvider = "getStandardLines")
- public void getStandardLines(final String key, final String type, final boolean expectedToBeStandard) {
- VCFCompoundHeaderLine line = null;
- if ( type.equals("info") )
- line = VCFStandardHeaderLines.getInfoLine(key, false);
- else if ( type.equals("format") )
- line = VCFStandardHeaderLines.getFormatLine(key, false);
- else
- throw new IllegalArgumentException("Unexpected type in getStandardLines " + type);
-
- if ( expectedToBeStandard ) {
- Assert.assertNotNull(line);
- Assert.assertEquals(line.getID(), key);
- } else
- Assert.assertNull(line);
- }
-
- private class RepairHeaderTest {
- final VCFCompoundHeaderLine original, expectedResult;
-
- private RepairHeaderTest(final VCFCompoundHeaderLine original) {
- this(original, original);
- }
-
- private RepairHeaderTest(final VCFCompoundHeaderLine original, final VCFCompoundHeaderLine expectedResult) {
- this.original = original;
- this.expectedResult = expectedResult;
- }
-
- public String toString() {
- return "RepairHeaderTest: Original: " + original.toStringEncoding() + " Expected: " + expectedResult.toStringEncoding();
- }
- }
-
- @DataProvider(name = "RepairHeaderTest")
- public Object[][] makeRepairHeaderTest() {
- final VCFInfoHeaderLine standardAC = VCFStandardHeaderLines.getInfoLine("AC");
- final VCFInfoHeaderLine goodAC = new VCFInfoHeaderLine("AC", VCFHeaderLineCount.A, VCFHeaderLineType.Integer, "x");
-
- final VCFFormatHeaderLine standardGT = VCFStandardHeaderLines.getFormatLine("GT");
- final VCFFormatHeaderLine goodGT = new VCFFormatHeaderLine("GT", 1, VCFHeaderLineType.String, "x");
-
- List<Object[]> tests = new ArrayList<Object[]>();
-
- tests.add(new Object[]{new RepairHeaderTest( standardGT, standardGT)});
- tests.add(new Object[]{new RepairHeaderTest( goodGT, goodGT )});
- tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", 2, VCFHeaderLineType.String, "x"), standardGT)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", 1, VCFHeaderLineType.Integer, "x"), standardGT)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", 1, VCFHeaderLineType.Float, "x"), standardGT)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Float, "x"), standardGT)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", VCFHeaderLineCount.G, VCFHeaderLineType.String, "x"), standardGT)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("GT", VCFHeaderLineCount.A, VCFHeaderLineType.String, "x"), standardGT)});
-
- tests.add(new Object[]{new RepairHeaderTest( standardAC, standardAC)});
- tests.add(new Object[]{new RepairHeaderTest( goodAC, goodAC )});
- tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 1, VCFHeaderLineType.Integer, "x"), standardAC)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", VCFHeaderLineCount.G, VCFHeaderLineType.Integer, "x"), standardAC)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.Integer, "x"), standardAC)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 1, VCFHeaderLineType.Float, "x"), standardAC)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 1, VCFHeaderLineType.String, "x"), standardAC)});
- tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("AC", 0, VCFHeaderLineType.Flag, "x"), standardAC)});
-
- tests.add(new Object[]{new RepairHeaderTest( new VCFInfoHeaderLine("NON_STANDARD_INFO", 1, VCFHeaderLineType.String, "x"))});
- tests.add(new Object[]{new RepairHeaderTest( new VCFFormatHeaderLine("NON_STANDARD_FORMAT", 1, VCFHeaderLineType.String, "x"))});
-
- return tests.toArray(new Object[][]{});
- }
-
- @Test(dataProvider = "RepairHeaderTest")
- public void testRepairHeaderTest(RepairHeaderTest cfg) {
- final VCFHeader toRepair = new VCFHeader(Collections.singleton((VCFHeaderLine)cfg.original));
- final VCFHeader repaired = VCFStandardHeaderLines.repairStandardHeaderLines(toRepair);
-
- VCFCompoundHeaderLine repairedLine = (VCFCompoundHeaderLine)repaired.getFormatHeaderLine(cfg.original.getID());
- if ( repairedLine == null ) repairedLine = (VCFCompoundHeaderLine)repaired.getInfoHeaderLine(cfg.original.getID());
-
- Assert.assertNotNull(repairedLine, "Repaired header didn't contain the expected line");
- Assert.assertEquals(repairedLine.getID(), cfg.expectedResult.getID());
- Assert.assertEquals(repairedLine.getType(), cfg.expectedResult.getType());
- Assert.assertEquals(repairedLine.getCountType(), cfg.expectedResult.getCountType());
- if ( repairedLine.getCountType() == VCFHeaderLineCount.INTEGER )
- Assert.assertEquals(repairedLine.getCount(), cfg.expectedResult.getCount());
- }
-}
diff --git a/src/tests/java/picard/analysis/CollectAlignmentSummaryMetricsTest.java b/src/tests/java/picard/analysis/CollectAlignmentSummaryMetricsTest.java
new file mode 100644
index 0000000..c0610d9
--- /dev/null
+++ b/src/tests/java/picard/analysis/CollectAlignmentSummaryMetricsTest.java
@@ -0,0 +1,509 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.analysis;
+
+import htsjdk.samtools.metrics.MetricsFile;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.text.NumberFormat;
+
+/**
+ * Tests CollectAlignmentSummaryStatistics
+ *
+ * @author Doug Voet (dvoet at broadinstitute dot org)
+ */
+public class CollectAlignmentSummaryMetricsTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam");
+
+ public String getCommandLineProgramName() {
+ return CollectAlignmentSummaryMetrics.class.getSimpleName();
+ }
+
+ @Test
+ public void test() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test.sam");
+ final File reference = new File(TEST_DATA_DIR, "summary_alignment_stats_test.fasta");
+ final File outfile = File.createTempFile("alignmentMetrics", ".txt");
+ outfile.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "REFERENCE_SEQUENCE=" + reference.getAbsolutePath(),
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final AlignmentSummaryMetrics metrics : output.getMetrics()) {
+ Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 7);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 3);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 59);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 19.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 303);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*58D/303D*/0.191419);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 9);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 7);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 239);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 707);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*19D/707D*/0.026874);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 18);
+ Assert.assertEquals(metrics.PF_READS, 16);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 2);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 10);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 298);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 1010);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*77D/1010D*/0.076238);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ }
+
+ @Test
+ public void testBisulfite() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "summary_alignment_bisulfite_test.sam");
+ final File reference = new File(TEST_DATA_DIR, "summary_alignment_stats_test.fasta");
+ final File outfile = File.createTempFile("alignmentMetrics", ".txt");
+ outfile.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "REFERENCE_SEQUENCE=" + reference.getAbsolutePath(),
+ "IS_BISULFITE_SEQUENCED=true"
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final NumberFormat format = NumberFormat.getInstance();
+ format.setMaximumFractionDigits(4);
+
+ final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final AlignmentSummaryMetrics metrics : output.getMetrics()) {
+ Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ // 19 no-calls, one potentially methylated base, one mismatch at a potentially methylated base
+ Assert.assertEquals(metrics.TOTAL_READS, 1);
+ Assert.assertEquals(metrics.PF_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_BASES, 101);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 20.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 101);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 20D/100D);
+ Assert.assertEquals(metrics.BAD_CYCLES, 20);
+ Assert.assertEquals(format.format(metrics.PF_HQ_ERROR_RATE), format.format(20/(double)100));
+ break;
+ case SECOND_OF_PAIR:
+ // Three no-calls, two potentially methylated bases
+ Assert.assertEquals(metrics.TOTAL_READS, 1);
+ Assert.assertEquals(metrics.PF_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_BASES, 101);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 101);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*3D/99D*/0.030303);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ Assert.assertEquals(format.format(metrics.PF_HQ_ERROR_RATE), format.format(3/(double)99));
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 2);
+ Assert.assertEquals(metrics.PF_READS, 2);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_BASES, 202);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 11.5);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 202);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*23D/199D*/0.115578);
+ Assert.assertEquals(metrics.BAD_CYCLES, 23);
+ Assert.assertEquals(format.format(metrics.PF_HQ_ERROR_RATE), format.format(23/(double)199));
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ }
+
+
+ @Test
+ public void testNoReference() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test.sam");
+ final File outfile = File.createTempFile("alignmentMetrics", ".txt");
+ outfile.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final AlignmentSummaryMetrics metrics : output.getMetrics()) {
+ Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 7);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 9);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 18);
+ Assert.assertEquals(metrics.PF_READS, 16);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 2);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ }
+
+ @Test
+ public void testZeroLengthReads() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test2.sam");
+ final File outfile = File.createTempFile("alignmentMetrics", ".txt");
+ outfile.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+ for (final AlignmentSummaryMetrics metrics : output.getMetrics()) {
+ // test that it doesn't blow up
+ }
+ }
+
+ @Test
+ public void testMultipleLevelsOfMetrics() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test_multiple.sam");
+ final File outfile = File.createTempFile("alignmentMetrics", ".txt");
+ outfile.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "METRIC_ACCUMULATION_LEVEL=ALL_READS",
+ "METRIC_ACCUMULATION_LEVEL=SAMPLE",
+ "METRIC_ACCUMULATION_LEVEL=LIBRARY",
+ "METRIC_ACCUMULATION_LEVEL=READ_GROUP",
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final AlignmentSummaryMetrics metrics : output.getMetrics()) {
+ Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
+ if (metrics.SAMPLE == null) {
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 7);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 9);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 18);
+ Assert.assertEquals(metrics.PF_READS, 16);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 2);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ else if (metrics.SAMPLE.equals("Ma")) {
+ // There's only one library and one read group for this sample so the metrics for
+ // every level should be identical
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 5);
+ Assert.assertEquals(metrics.PF_READS, 3);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 24);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 5);
+ Assert.assertEquals(metrics.PF_READS, 5);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 10);
+ Assert.assertEquals(metrics.PF_READS, 8);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 27);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ else if (metrics.SAMPLE.equals("Pa")) {
+ // Two libraries and three read groups for this sample
+ if (metrics.LIBRARY == null) {
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 4);
+ Assert.assertEquals(metrics.PF_READS, 4);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 4);
+ Assert.assertEquals(metrics.PF_READS, 4);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 8);
+ Assert.assertEquals(metrics.PF_READS, 8);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 0);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 0);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 0.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 0);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, 0.0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ else if (metrics.LIBRARY.equals("lib1")) {
+ // Only one read group in this library so library and RG metrics should be identical
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 2);
+ Assert.assertEquals(metrics.PF_READS, 2);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 2);
+ Assert.assertEquals(metrics.PF_READS, 2);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 4);
+ Assert.assertEquals(metrics.PF_READS, 4);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+
+ }
+ else if (metrics.LIBRARY.equals("lib2")) {
+ if (metrics.READ_GROUP == null) {
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 2);
+ Assert.assertEquals(metrics.PF_READS, 2);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 2);
+ Assert.assertEquals(metrics.PF_READS, 2);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 4);
+ Assert.assertEquals(metrics.PF_READS, 4);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ else if (metrics.READ_GROUP.equals("i")) {
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 1);
+ Assert.assertEquals(metrics.PF_READS, 1);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 1);
+ Assert.assertEquals(metrics.PF_READS, 1);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 2);
+ Assert.assertEquals(metrics.PF_READS, 2);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ else if (metrics.READ_GROUP.equals("i2")) {
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 1);
+ Assert.assertEquals(metrics.PF_READS, 1);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 27);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 1);
+ Assert.assertEquals(metrics.PF_READS, 1);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 2);
+ Assert.assertEquals(metrics.PF_READS, 2);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 0);
+ Assert.assertEquals(metrics.BAD_CYCLES, 30);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ else {
+ Assert.fail("Data does not contain this read group: " + metrics.READ_GROUP);
+ }
+
+ }
+ else {
+ Assert.fail("Data does not contain this library: " + metrics.LIBRARY);
+ }
+ }
+ else {
+ Assert.fail("Data does not contain this sample: " + metrics.SAMPLE);
+ }
+ }
+
+ }
+
+}
diff --git a/src/tests/java/picard/analysis/CollectGcBiasMetricsTest.java b/src/tests/java/picard/analysis/CollectGcBiasMetricsTest.java
new file mode 100644
index 0000000..33c27a3
--- /dev/null
+++ b/src/tests/java/picard/analysis/CollectGcBiasMetricsTest.java
@@ -0,0 +1,211 @@
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordSetBuilder;
+import htsjdk.samtools.SAMTextHeaderCodec;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.BufferedLineReader;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.sam.SortSam;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Random;
+import static org.testng.Assert.assertEquals;
+
+/**
+ * Created by kbergin on 3/26/15 to test GcBias MultiLevel Collector.
+ */
+public class CollectGcBiasMetricsTest extends CommandLineProgramTest {
+ private final static String sample1 = "TestSample1";
+ private final static String sample2 = "TestSample2";
+ private final static String readGroupId1 = "TestReadGroup1";
+ private final static String readGroupId2 = "TestReadGroup2";
+ private final static String readGroupId3 = "TestReadGroup3";
+ private final static String platform = "ILLUMINA";
+ private final static String library1 = "TestLibrary1";
+ private final static String library2 = "TestLibrary2";
+ private final static String library3 = "TestLibrary3";
+
+ private final static File TEST_DIR = new File("testdata/picard/sam/CollectGcBiasMetrics/");
+ private final File dict = new File(TEST_DIR, "Mheader.dict");
+
+ File tempSamFile;
+
+ SAMRecordSetBuilder setBuilder1 = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ SAMRecordSetBuilder setBuilder2 = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ SAMRecordSetBuilder setBuilder3 = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ SAMReadGroupRecord readGroupRecord1 = new SAMReadGroupRecord(readGroupId1);
+ SAMReadGroupRecord readGroupRecord2 = new SAMReadGroupRecord(readGroupId2);
+ SAMReadGroupRecord readGroupRecord3 = new SAMReadGroupRecord(readGroupId3);
+
+ //create a samfile with different samples, read groups and libraries that overlap for testing.
+ @BeforeTest
+ void setupBuilder() throws IOException {
+ final int numReads = 100;
+ final String flowCellBarcode = "TESTBARCODE";
+ final String readName = flowCellBarcode;
+
+ tempSamFile = File.createTempFile("CollectGcBias", ".bam", TEST_DIR);
+ File tempSamFileUnsorted = File.createTempFile("CollectGcBias", ".bam", TEST_DIR);
+ tempSamFileUnsorted.deleteOnExit();
+ tempSamFile.deleteOnExit();
+
+ BufferedLineReader bufferedLineReader = null;
+ try {
+ bufferedLineReader = new BufferedLineReader(new FileInputStream(dict));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
+ final SAMFileHeader header = codec.decode(bufferedLineReader, dict.toString());
+ header.setSortOrder(SAMFileHeader.SortOrder.unsorted);
+
+ //build different levels to put into the same bam file for testing multi level collection
+ setup(numReads, readName, 1, readGroupId1, readGroupRecord1, sample1, library1, header, setBuilder1); //Sample 1, Library 1, RG 1
+ setup(numReads, readName, 2, readGroupId2, readGroupRecord2, sample1, library2, header, setBuilder2); //Sample 1, Library 2, RG 2
+ setup(numReads, readName, 3, readGroupId3, readGroupRecord3, sample2, library3, header, setBuilder3); //Sample 2, Library 3, RG 3
+
+ final SAMFileWriter writer = new SAMFileWriterFactory()
+ .setCreateIndex(true).makeBAMWriter(header, false, tempSamFileUnsorted);
+
+ for (final SAMRecord record : setBuilder1) {
+ writer.addAlignment(record);
+ }
+ for (final SAMRecord record : setBuilder2) {
+ writer.addAlignment(record);
+ }
+ for (final SAMRecord record : setBuilder3) {
+ writer.addAlignment(record);
+ }
+ writer.close();
+
+ //sort the temp file
+ final SortSam sorter = new SortSam();
+ final String[] args = new String[]{"INPUT=" + tempSamFileUnsorted.getAbsolutePath(), "OUTPUT=" + tempSamFile.getAbsolutePath(), "SORT_ORDER=coordinate"};
+
+ sorter.instanceMain(args);
+ }
+
+ void setup(final int numReads,
+ final String readName,
+ final int ID,
+ final String readGroupId,
+ final SAMReadGroupRecord readGroupRecord,
+ final String sample,
+ final String library,
+ final SAMFileHeader header,
+ final SAMRecordSetBuilder setBuilder) throws IOException {
+
+ final String separator = ":";
+ readGroupRecord.setSample(sample);
+ readGroupRecord.setPlatform(platform);
+ readGroupRecord.setLibrary(library);
+ readGroupRecord.setPlatformUnit(readGroupId);
+ header.addReadGroup(readGroupRecord);
+ setBuilder.setReadGroup(readGroupRecord);
+ setBuilder.setUseNmFlag(true);
+
+ setBuilder.setHeader(header);
+
+ final int max = 15000;
+ final int min = 1;
+ final Random rg = new Random(5);
+
+ for (int i = 0; i < numReads; i++) {
+ final int start = rg.nextInt(max) + min;
+ final String newReadName = readName + separator + ID + separator + i;
+ setBuilder.addPair(newReadName, 0, start+ID, start+ID+99);
+ }
+ }
+
+ public String getCommandLineProgramName() {
+ return CollectGcBiasMetrics.class.getSimpleName();
+ }
+
+ @Test //test all collection levels
+ public void test() throws IOException{
+ runTest(tempSamFile);
+ }
+
+ public void runTest(final File input) throws IOException {
+ final File outfile = File.createTempFile("test", ".gc_bias_summary_metrics");
+ final File detailsOutfile = File.createTempFile("test", ".gc_bias_detail_metrics");
+ final File pdf = File.createTempFile("test", ".pdf");
+ final String referenceFile = "testdata/picard/quality/chrM.reference.fasta";
+ final int windowSize = 100;
+ final double minGenFraction = 1.0E-5;
+ final boolean biSulfiteSeq = false;
+ final boolean assumeSorted = false;
+ outfile.deleteOnExit();
+ detailsOutfile.deleteOnExit();
+ pdf.deleteOnExit();
+ final String[] args = new String[]{
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + detailsOutfile.getAbsolutePath(),
+ "REFERENCE_SEQUENCE=" + referenceFile,
+ "SUMMARY_OUTPUT=" + outfile.getAbsolutePath(),
+ "CHART_OUTPUT=" + pdf.getAbsolutePath(),
+ "WINDOW_SIZE=" + windowSize,
+ "MINIMUM_GENOME_FRACTION=" + minGenFraction,
+ "IS_BISULFITE_SEQUENCED=" + biSulfiteSeq,
+ "LEVEL=ALL_READS",
+ "LEVEL=SAMPLE",
+ "LEVEL=READ_GROUP",
+ "ASSUME_SORTED=" + assumeSorted
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<GcBiasSummaryMetrics, Comparable<?>> output = new MetricsFile<GcBiasSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final GcBiasSummaryMetrics metrics : output.getMetrics()) {
+ if (metrics.ACCUMULATION_LEVEL.equals("All Reads")) { //ALL_READS level
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 300);
+ Assert.assertEquals(metrics.ALIGNED_READS, 600);
+ Assert.assertEquals(metrics.AT_DROPOUT, 7.234062);
+ Assert.assertEquals(metrics.GC_DROPOUT, 4.086217);
+ } else if (metrics.READ_GROUP != null && metrics.READ_GROUP.equals("TestReadGroup1")) { //Library 1
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 100);
+ Assert.assertEquals(metrics.ALIGNED_READS, 200);
+ Assert.assertEquals(metrics.AT_DROPOUT, 9.20674);
+ Assert.assertEquals(metrics.GC_DROPOUT, 3.834244);
+ } else if (metrics.READ_GROUP != null && metrics.READ_GROUP.equals("TestReadGroup2")) {//Library 2
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 100);
+ Assert.assertEquals(metrics.ALIGNED_READS, 200);
+ Assert.assertEquals(metrics.AT_DROPOUT, 10.144505);
+ Assert.assertEquals(metrics.GC_DROPOUT, 4.08986);
+ } else if (metrics.READ_GROUP != null && metrics.READ_GROUP.equals("TestReadGroup3")) {//Library 3
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 100);
+ Assert.assertEquals(metrics.ALIGNED_READS, 200);
+ Assert.assertEquals(metrics.AT_DROPOUT, 9.229205);
+ Assert.assertEquals(metrics.GC_DROPOUT, 4.977838);
+ } else if (metrics.SAMPLE != null && metrics.SAMPLE.equals("TestSample1")) {//Library 1 and 2
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 200);
+ Assert.assertEquals(metrics.ALIGNED_READS, 400);
+ Assert.assertEquals(metrics.AT_DROPOUT, 7.410747);
+ Assert.assertEquals(metrics.GC_DROPOUT, 3.83986);
+ } else if (metrics.SAMPLE != null && metrics.SAMPLE.equals("TestSample2")) {//Library 3
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 100);
+ Assert.assertEquals(metrics.ALIGNED_READS, 200);
+ Assert.assertEquals(metrics.AT_DROPOUT, 9.229205);
+ Assert.assertEquals(metrics.GC_DROPOUT, 4.977838);
+ } else {
+ Assert.fail("Unexpected metric: " + metrics);
+ }
+ }
+ }
+}
diff --git a/src/tests/java/picard/analysis/CollectInsertSizeMetricsTest.java b/src/tests/java/picard/analysis/CollectInsertSizeMetricsTest.java
new file mode 100755
index 0000000..37c2d51
--- /dev/null
+++ b/src/tests/java/picard/analysis/CollectInsertSizeMetricsTest.java
@@ -0,0 +1,226 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.analysis;
+
+import htsjdk.samtools.metrics.MetricsFile;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+/**
+ * Tests multi-level CollectInsertSizeMetrics
+ */
+public class CollectInsertSizeMetricsTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/");
+
+ public String getCommandLineProgramName() {
+ return CollectInsertSizeMetrics.class.getSimpleName();
+ }
+
+ @Test
+ public void test() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "insert_size_metrics_test.sam");
+ final File outfile = File.createTempFile("test", ".insert_size_metrics");
+ final File pdf = File.createTempFile("test", ".pdf");
+ outfile.deleteOnExit();
+ pdf.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "HISTOGRAM_FILE=" + pdf.getAbsolutePath()
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<InsertSizeMetrics, Comparable<?>> output = new MetricsFile<InsertSizeMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final InsertSizeMetrics metrics : output.getMetrics()) {
+ Assert.assertEquals(metrics.PAIR_ORIENTATION.name(), "FR");
+ if (metrics.LIBRARY==null) { // SAMPLE or ALL_READS level
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
+ Assert.assertEquals(metrics.READ_PAIRS, 13);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+
+ }
+ else if (metrics.LIBRARY.equals("Solexa-41753")) { // one LIBRARY and one READ_GROUP
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 44);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 44);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 44);
+ Assert.assertEquals(metrics.READ_PAIRS, 2);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
+
+ }
+ else if (metrics.LIBRARY.equals("Solexa-41748") && metrics.READ_GROUP == null) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 40);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
+ Assert.assertEquals(metrics.READ_PAIRS, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+
+ }
+ else if (metrics.LIBRARY.equals("Solexa-41734") && metrics.READ_GROUP == null) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 26);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.READ_PAIRS, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.7")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.READ_PAIRS, 4);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.6")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 38);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
+ Assert.assertEquals(metrics.READ_PAIRS, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 9);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.5")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.READ_PAIRS, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.3")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.READ_PAIRS, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
+ }
+ else {
+ Assert.fail("Unexpected metric: " + metrics);
+ }
+ }
+ }
+
+ /**
+ * Histogram Width was being incorrectly set causing histograms to be trimmed an removed inappropriately.
+ * See https://github.com/broadinstitute/picard/issues/253
+ * Test to be sure that the right number of histograms are being output.
+ */
+ @Test
+ public void testHistogramWidthIsSetProperly() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "insert_size_metrics_test.sam");
+ final File outfile = File.createTempFile("test", ".insert_size_metrics");
+ final File pdf = File.createTempFile("test", ".pdf");
+ outfile.deleteOnExit();
+ pdf.deleteOnExit();
+ final String[] args = new String[]{
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "HISTOGRAM_FILE=" + pdf.getAbsolutePath(),
+ "LEVEL=null",
+ "LEVEL=READ_GROUP"
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ final MetricsFile<InsertSizeMetrics, Comparable<?>> output = new MetricsFile<InsertSizeMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ Assert.assertEquals(output.getAllHistograms().size(), 5);
+ }
+}
diff --git a/src/tests/java/picard/analysis/CollectMultipleMetricsTest.java b/src/tests/java/picard/analysis/CollectMultipleMetricsTest.java
new file mode 100644
index 0000000..8e8c077
--- /dev/null
+++ b/src/tests/java/picard/analysis/CollectMultipleMetricsTest.java
@@ -0,0 +1,415 @@
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordSetBuilder;
+import htsjdk.samtools.SAMTextHeaderCodec;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.BufferedLineReader;
+import org.testng.Assert;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.sam.SortSam;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Random;
+
+/**
+ * Tests the two default "programs" that have tests in CollectMultipleMetrics
+ *
+ *
+ * @author Yossi farjoun
+ */
+
+public class CollectMultipleMetricsTest extends CommandLineProgramTest {
+
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam");
+
+ public String getCommandLineProgramName() {
+ return CollectMultipleMetrics.class.getSimpleName();
+ }
+
+
+ @Test
+ public void testAlignmentSummaryViaMultipleMetrics() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "summary_alignment_stats_test.sam");
+ final File reference = new File(TEST_DATA_DIR, "summary_alignment_stats_test.fasta");
+ final File outfile = File.createTempFile("alignmentMetrics", ".txt");
+ outfile.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "REFERENCE_SEQUENCE=" + reference.getAbsolutePath(),
+ "PROGRAM=null",
+ "PROGRAM="+CollectMultipleMetrics.Program.CollectAlignmentSummaryMetrics.name(),
+ "PROGRAM="+CollectMultipleMetrics.Program.CollectInsertSizeMetrics.name()
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<AlignmentSummaryMetrics, Comparable<?>> output = new MetricsFile<AlignmentSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final AlignmentSummaryMetrics metrics : output.getMetrics()) {
+ Assert.assertEquals(metrics.MEAN_READ_LENGTH, 101.0);
+ switch (metrics.CATEGORY) {
+ case FIRST_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 7);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 3);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 59);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 19.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 303);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*58D/303D*/0.191419);
+ Assert.assertEquals(metrics.BAD_CYCLES, 19);
+ break;
+ case SECOND_OF_PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 9);
+ Assert.assertEquals(metrics.PF_READS, 9);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 1);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 7);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 239);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 707);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*19D/707D*/0.026874);
+ Assert.assertEquals(metrics.BAD_CYCLES, 3);
+ break;
+ case PAIR:
+ Assert.assertEquals(metrics.TOTAL_READS, 18);
+ Assert.assertEquals(metrics.PF_READS, 16);
+ Assert.assertEquals(metrics.PF_NOISE_READS, 2);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_READS, 10);
+ Assert.assertEquals(metrics.PF_HQ_ALIGNED_Q20_BASES, 298);
+ Assert.assertEquals(metrics.PF_HQ_MEDIAN_MISMATCHES, 3.0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 1010);
+ Assert.assertEquals(metrics.PF_MISMATCH_RATE, /*77D/1010D*/0.076238);
+ Assert.assertEquals(metrics.BAD_CYCLES, 22);
+ break;
+ case UNPAIRED:
+ default:
+ Assert.fail("Data does not contain this category: " + metrics.CATEGORY);
+ }
+ }
+ }
+
+ @Test
+ public void testInsertSize() throws IOException {
+ final File input = new File(TEST_DATA_DIR, "insert_size_metrics_test.sam");
+ final File outfile = File.createTempFile("test", ".insert_size_metrics");
+ final File reference = new File(TEST_DATA_DIR, "summary_alignment_stats_test.fasta");
+ final File pdf = File.createTempFile("test", ".pdf");
+ outfile.deleteOnExit();
+ pdf.deleteOnExit();
+ final String[] args = new String[] {
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "REFERENCE_SEQUENCE=" + reference.getAbsolutePath(),
+ "PROGRAM=null",
+ "PROGRAM="+CollectMultipleMetrics.Program.CollectAlignmentSummaryMetrics.name(),
+ "PROGRAM="+CollectMultipleMetrics.Program.CollectInsertSizeMetrics.name()
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<InsertSizeMetrics, Comparable<?>> output = new MetricsFile<InsertSizeMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final InsertSizeMetrics metrics : output.getMetrics()) {
+ Assert.assertEquals(metrics.PAIR_ORIENTATION.name(), "FR");
+ if (metrics.LIBRARY==null) { // SAMPLE or ALL_READS level
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
+ Assert.assertEquals(metrics.READ_PAIRS, 13);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+
+ }
+ else if (metrics.LIBRARY.equals("Solexa-41753")) { // one LIBRARY and one READ_GROUP
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 44);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 44);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 44);
+ Assert.assertEquals(metrics.READ_PAIRS, 2);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
+
+ }
+ else if (metrics.LIBRARY.equals("Solexa-41748") && metrics.READ_GROUP == null) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 40);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
+ Assert.assertEquals(metrics.READ_PAIRS, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+
+ }
+ else if (metrics.LIBRARY.equals("Solexa-41734") && metrics.READ_GROUP == null) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 26);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.READ_PAIRS, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.7")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.READ_PAIRS, 4);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 11);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 11);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.6")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 38);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 45);
+ Assert.assertEquals(metrics.READ_PAIRS, 5);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 3);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 7);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 9);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 9);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.5")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 41);
+ Assert.assertEquals(metrics.READ_PAIRS, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
+ }
+ else if (metrics.READ_GROUP.equals("62A79AAXX100907.3")) {
+ Assert.assertEquals((int)metrics.MEDIAN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MIN_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.MAX_INSERT_SIZE, 36);
+ Assert.assertEquals(metrics.READ_PAIRS, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_10_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_20_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_30_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_40_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_50_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_60_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_70_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_80_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_90_PERCENT, 1);
+ Assert.assertEquals(metrics.WIDTH_OF_99_PERCENT, 1);
+ }
+ else {
+ Assert.fail("Unexpected metric: " + metrics);
+ }
+ }
+ }
+ @Test //test all gcBias collection levels
+ public void testGcBiasMetrics() throws IOException{
+ runGcTest(tempSamFile);
+ }
+
+ public void runGcTest(final File input) throws IOException {
+ final File outfile = File.createTempFile("test", ".gc_bias_summary_metrics");
+ final String referenceFile = "testdata/picard/quality/chrM.reference.fasta";
+ outfile.deleteOnExit();
+ final String[] args = new String[]{
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outfile.getAbsolutePath(),
+ "REFERENCE_SEQUENCE=" + referenceFile,
+ "PROGRAM=null",
+ "PROGRAM="+CollectMultipleMetrics.Program.CollectAlignmentSummaryMetrics.name(),
+ "PROGRAM="+CollectMultipleMetrics.Program.CollectInsertSizeMetrics.name(),
+ "PROGRAM="+CollectMultipleMetrics.Program.CollectGcBiasMetrics.name()
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<GcBiasSummaryMetrics, Comparable<?>> output = new MetricsFile<GcBiasSummaryMetrics, Comparable<?>>();
+ output.read(new FileReader(outfile));
+
+ for (final GcBiasSummaryMetrics metrics : output.getMetrics()) {
+ if (metrics.ACCUMULATION_LEVEL.equals("All Reads")) { //ALL_READS level
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 300);
+ Assert.assertEquals(metrics.ALIGNED_READS, 600);
+ Assert.assertEquals(metrics.AT_DROPOUT, 7.234062);
+ Assert.assertEquals(metrics.GC_DROPOUT, 4.086217);
+ } else if (metrics.READ_GROUP != null && metrics.READ_GROUP.equals("TestReadGroup1")) { //Library 1
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 100);
+ Assert.assertEquals(metrics.ALIGNED_READS, 200);
+ Assert.assertEquals(metrics.AT_DROPOUT, 9.20674);
+ Assert.assertEquals(metrics.GC_DROPOUT, 3.834244);
+ } else if (metrics.READ_GROUP != null && metrics.READ_GROUP.equals("TestReadGroup2")) {//Library 2
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 100);
+ Assert.assertEquals(metrics.ALIGNED_READS, 200);
+ Assert.assertEquals(metrics.AT_DROPOUT, 10.144505);
+ Assert.assertEquals(metrics.GC_DROPOUT, 4.08986);
+ } else if (metrics.READ_GROUP != null && metrics.READ_GROUP.equals("TestReadGroup3")) {//Library 3
+ Assert.assertEquals(metrics.TOTAL_CLUSTERS, 100);
+ Assert.assertEquals(metrics.ALIGNED_READS, 200);
+ Assert.assertEquals(metrics.AT_DROPOUT, 9.229205);
+ Assert.assertEquals(metrics.GC_DROPOUT, 4.977838);
+ } else {
+ Assert.fail("Unexpected metric: " + metrics);
+ }
+ }
+ }
+
+ //gcBias multi level collector test creates a sam file from chrM for testing purposes
+ //more variables needed for gcbias test to create temp sam file
+ private final static String sample1 = "TestSample1";
+ private final static String sample2 = "TestSample2";
+ private final static String readGroupId1 = "TestReadGroup1";
+ private final static String readGroupId2 = "TestReadGroup2";
+ private final static String readGroupId3 = "TestReadGroup3";
+ private final static String platform = "ILLUMINA";
+ private final static String library1 = "TestLibrary1";
+ private final static String library2 = "TestLibrary2";
+ private final static String library3 = "TestLibrary3";
+
+ private final static File TEST_DIR = new File("testdata/picard/sam/CollectGcBiasMetrics/");
+ private final File dict = new File(TEST_DIR, "Mheader.dict");
+
+ private File tempSamFile;
+
+ private final SAMRecordSetBuilder setBuilder1 = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ private final SAMRecordSetBuilder setBuilder2 = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ private final SAMRecordSetBuilder setBuilder3 = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ private final SAMReadGroupRecord readGroupRecord1 = new SAMReadGroupRecord(readGroupId1);
+ private final SAMReadGroupRecord readGroupRecord2 = new SAMReadGroupRecord(readGroupId2);
+ private final SAMReadGroupRecord readGroupRecord3 = new SAMReadGroupRecord(readGroupId3);
+
+ //create a samfile with different samples, read groups and libraries that overlap for testing.
+ @BeforeTest
+ void setupBuilder() throws IOException {
+ final int numReads = 100;
+ final String flowCellBarcode = "TESTBARCODE";
+
+ tempSamFile = File.createTempFile("CollectGcBias", ".bam", TEST_DIR);
+ final File tempSamFileUnsorted = File.createTempFile("CollectGcBias", ".bam", TEST_DIR);
+ tempSamFileUnsorted.deleteOnExit();
+ tempSamFile.deleteOnExit();
+
+ BufferedLineReader bufferedLineReader = null;
+ try {
+ bufferedLineReader = new BufferedLineReader(new FileInputStream(dict));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
+ final SAMFileHeader header = codec.decode(bufferedLineReader, dict.toString());
+ header.setSortOrder(SAMFileHeader.SortOrder.unsorted);
+
+ //build different levels to put into the same bam file for testing multi level collection
+ setup(numReads, flowCellBarcode, 1, readGroupId1, readGroupRecord1, sample1, library1, header, setBuilder1); //Sample 1, Library 1, RG 1
+ setup(numReads, flowCellBarcode, 2, readGroupId2, readGroupRecord2, sample1, library2, header, setBuilder2); //Sample 1, Library 2, RG 2
+ setup(numReads, flowCellBarcode, 3, readGroupId3, readGroupRecord3, sample2, library3, header, setBuilder3); //Sample 2, Library 3, RG 3
+
+ final SAMFileWriter writer = new SAMFileWriterFactory()
+ .setCreateIndex(true).makeBAMWriter(header, false, tempSamFileUnsorted);
+
+ for (final SAMRecord record : setBuilder1) {
+ writer.addAlignment(record);
+ }
+ for (final SAMRecord record : setBuilder2) {
+ writer.addAlignment(record);
+ }
+ for (final SAMRecord record : setBuilder3) {
+ writer.addAlignment(record);
+ }
+ writer.close();
+
+ //sort the temp file
+ final SortSam sorter = new SortSam();
+ final String[] args = new String[]{"INPUT=" + tempSamFileUnsorted.getAbsolutePath(), "OUTPUT=" + tempSamFile.getAbsolutePath(), "SORT_ORDER=coordinate"};
+
+ sorter.instanceMain(args);
+ }
+ void setup(final int numReads,
+ final String readName,
+ final int ID,
+ final String readGroupId,
+ final SAMReadGroupRecord readGroupRecord,
+ final String sample,
+ final String library,
+ final SAMFileHeader header,
+ final SAMRecordSetBuilder setBuilder) throws IOException {
+
+ final String separator = ":";
+ readGroupRecord.setSample(sample);
+ readGroupRecord.setPlatform(platform);
+ readGroupRecord.setLibrary(library);
+ readGroupRecord.setPlatformUnit(readGroupId);
+ header.addReadGroup(readGroupRecord);
+ setBuilder.setReadGroup(readGroupRecord);
+ setBuilder.setUseNmFlag(true);
+
+ setBuilder.setHeader(header);
+
+ final int max = 15000;
+ final int min = 1;
+ final Random rg = new Random(5);
+
+ for (int i = 0; i < numReads; i++) {
+ final int start = rg.nextInt(max) + min;
+ final String newReadName = readName + separator + ID + separator + i;
+ setBuilder.addPair(newReadName, 0, start+ID, start+ID+99);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/tests/java/picard/analysis/CollectRnaSeqMetricsTest.java b/src/tests/java/picard/analysis/CollectRnaSeqMetricsTest.java
new file mode 100644
index 0000000..72dba84
--- /dev/null
+++ b/src/tests/java/picard/analysis/CollectRnaSeqMetricsTest.java
@@ -0,0 +1,241 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.analysis;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordSetBuilder;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.StringUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.annotation.RefFlatReader.RefFlatColumns;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.PrintStream;
+
+public class CollectRnaSeqMetricsTest extends CommandLineProgramTest {
+ public String getCommandLineProgramName() {
+ return CollectRnaSeqMetrics.class.getSimpleName();
+ }
+
+ @Test
+ public void basic() throws Exception {
+ final String sequence = "chr1";
+ final String ignoredSequence = "chrM";
+
+ // Create some alignments that hit the ribosomal sequence, various parts of the gene, and intergenic.
+ final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ // Set seed so that strandedness is consistent among runs.
+ builder.setRandomSeed(0);
+ final int sequenceIndex = builder.getHeader().getSequenceIndex(sequence);
+ builder.addPair("pair1", sequenceIndex, 45, 475);
+ builder.addPair("pair2", sequenceIndex, 90, 225);
+ builder.addPair("pair3", sequenceIndex, 120, 600);
+ builder.addFrag("frag1", sequenceIndex, 150, true);
+ builder.addFrag("frag2", sequenceIndex, 450, true);
+ builder.addFrag("frag3", sequenceIndex, 225, false);
+ builder.addPair("rrnaPair", sequenceIndex, 400, 500);
+
+ builder.addFrag("ignoredFrag", builder.getHeader().getSequenceIndex(ignoredSequence), 1, false);
+
+ final File samFile = File.createTempFile("tmp.collectRnaSeqMetrics.", ".sam");
+ final SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(builder.getHeader(), false, samFile);
+ for (final SAMRecord rec: builder.getRecords()) samWriter.addAlignment(rec);
+ samWriter.close();
+
+ // Create an interval list with one ribosomal interval.
+ final Interval rRnaInterval = new Interval(sequence, 300, 520, true, "rRNA");
+ final IntervalList rRnaIntervalList = new IntervalList(builder.getHeader());
+ rRnaIntervalList.add(rRnaInterval);
+ final File rRnaIntervalsFile = File.createTempFile("tmp.rRna.", ".interval_list");
+ rRnaIntervalsFile.deleteOnExit();
+ rRnaIntervalList.write(rRnaIntervalsFile);
+
+ // Generate the metrics.
+ final File metricsFile = File.createTempFile("tmp.", ".rna_metrics");
+
+ final String[] args = new String[] {
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT=" + metricsFile.getAbsolutePath(),
+ "REF_FLAT=" + getRefFlatFile(sequence).getAbsolutePath(),
+ "RIBOSOMAL_INTERVALS=" + rRnaIntervalsFile.getAbsolutePath(),
+ "STRAND_SPECIFICITY=SECOND_READ_TRANSCRIPTION_STRAND",
+ "IGNORE_SEQUENCE=" +ignoredSequence
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<RnaSeqMetrics, Comparable<?>> output = new MetricsFile<RnaSeqMetrics, Comparable<?>>();
+ output.read(new FileReader(metricsFile));
+
+ final RnaSeqMetrics metrics = output.getMetrics().get(0);
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 396);
+ Assert.assertEquals(metrics.PF_BASES, 432);
+ Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 108L);
+ Assert.assertEquals(metrics.CODING_BASES, 136);
+ Assert.assertEquals(metrics.UTR_BASES, 51);
+ Assert.assertEquals(metrics.INTRONIC_BASES, 50);
+ Assert.assertEquals(metrics.INTERGENIC_BASES, 51);
+ Assert.assertEquals(metrics.CORRECT_STRAND_READS, 3);
+ Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 4);
+ Assert.assertEquals(metrics.IGNORED_READS, 1);
+ }
+
+ @Test
+ public void testMultiLevel() throws Exception {
+ final String sequence = "chr1";
+ final String ignoredSequence = "chrM";
+
+ // Create some alignments that hit the ribosomal sequence, various parts of the gene, and intergenic.
+ final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate, false);
+ // Set seed so that strandedness is consistent among runs.
+ builder.setRandomSeed(0);
+ final int sequenceIndex = builder.getHeader().getSequenceIndex(sequence);
+ final SAMReadGroupRecord rg1 = new SAMReadGroupRecord("2");
+ rg1.setSample("Sample");
+ rg1.setLibrary("foo");
+ builder.setReadGroup(rg1);
+ builder.addPair("pair1", sequenceIndex, 45, 475);
+ builder.addPair("pair2", sequenceIndex, 90, 225);
+ builder.addFrag("frag1", sequenceIndex, 150, true);
+ builder.addFrag("frag2", sequenceIndex, 450, true);
+
+ final SAMReadGroupRecord rg2 = new SAMReadGroupRecord("3");
+ rg2.setSample("Sample");
+ rg2.setLibrary("bar");
+ builder.setReadGroup(rg2);
+ builder.addPair("pair3", sequenceIndex, 120, 600);
+ builder.addFrag("frag3", sequenceIndex, 225, false);
+ builder.addPair("rrnaPair", sequenceIndex, 400, 500);
+
+ builder.addFrag("ignoredFrag", builder.getHeader().getSequenceIndex(ignoredSequence), 1, false);
+
+ final File samFile = File.createTempFile("tmp.collectRnaSeqMetrics.", ".sam");
+ final SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(builder.getHeader(), false, samFile);
+ for (final SAMRecord rec: builder.getRecords()) samWriter.addAlignment(rec);
+ samWriter.close();
+
+ // Create an interval list with one ribosomal interval.
+ final Interval rRnaInterval = new Interval(sequence, 300, 520, true, "rRNA");
+ final IntervalList rRnaIntervalList = new IntervalList(builder.getHeader());
+ rRnaIntervalList.add(rRnaInterval);
+ final File rRnaIntervalsFile = File.createTempFile("tmp.rRna.", ".interval_list");
+ rRnaIntervalsFile.deleteOnExit();
+ rRnaIntervalList.write(rRnaIntervalsFile);
+
+ // Generate the metrics.
+ final File metricsFile = File.createTempFile("tmp.", ".rna_metrics");
+
+ final String[] args = new String[] {
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT=" + metricsFile.getAbsolutePath(),
+ "REF_FLAT=" + getRefFlatFile(sequence).getAbsolutePath(),
+ "RIBOSOMAL_INTERVALS=" + rRnaIntervalsFile.getAbsolutePath(),
+ "STRAND_SPECIFICITY=SECOND_READ_TRANSCRIPTION_STRAND",
+ "IGNORE_SEQUENCE=" +ignoredSequence,
+ "LEVEL=null",
+ "LEVEL=SAMPLE",
+ "LEVEL=LIBRARY"
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<RnaSeqMetrics, Comparable<?>> output = new MetricsFile<RnaSeqMetrics, Comparable<?>>();
+ output.read(new FileReader(metricsFile));
+
+ for (final RnaSeqMetrics metrics : output.getMetrics()) {
+ if (metrics.LIBRARY == null) {
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 396);
+ Assert.assertEquals(metrics.PF_BASES, 432);
+ Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 108L);
+ Assert.assertEquals(metrics.CODING_BASES, 136);
+ Assert.assertEquals(metrics.UTR_BASES, 51);
+ Assert.assertEquals(metrics.INTRONIC_BASES, 50);
+ Assert.assertEquals(metrics.INTERGENIC_BASES, 51);
+ Assert.assertEquals(metrics.CORRECT_STRAND_READS, 3);
+ Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 4);
+ Assert.assertEquals(metrics.IGNORED_READS, 1);
+ }
+ else if (metrics.LIBRARY.equals("foo")) {
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 216);
+ Assert.assertEquals(metrics.PF_BASES, 216);
+ Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 36L);
+ Assert.assertEquals(metrics.CODING_BASES, 89);
+ Assert.assertEquals(metrics.UTR_BASES, 51);
+ Assert.assertEquals(metrics.INTRONIC_BASES, 25);
+ Assert.assertEquals(metrics.INTERGENIC_BASES, 15);
+ Assert.assertEquals(metrics.CORRECT_STRAND_READS, 3);
+ Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 2);
+ Assert.assertEquals(metrics.IGNORED_READS, 0);
+
+ }
+ else if (metrics.LIBRARY.equals("bar")) {
+ Assert.assertEquals(metrics.PF_ALIGNED_BASES, 180);
+ Assert.assertEquals(metrics.PF_BASES, 216);
+ Assert.assertEquals(metrics.RIBOSOMAL_BASES.longValue(), 72L);
+ Assert.assertEquals(metrics.CODING_BASES, 47);
+ Assert.assertEquals(metrics.UTR_BASES, 0);
+ Assert.assertEquals(metrics.INTRONIC_BASES, 25);
+ Assert.assertEquals(metrics.INTERGENIC_BASES, 36);
+ Assert.assertEquals(metrics.CORRECT_STRAND_READS, 0);
+ Assert.assertEquals(metrics.INCORRECT_STRAND_READS, 2);
+ Assert.assertEquals(metrics.IGNORED_READS, 1);
+
+ }
+ }
+ }
+
+
+ public File getRefFlatFile(String sequence) throws Exception {
+ // Create a refFlat file with a single gene containing two exons, one of which is overlapped by the
+ // ribosomal interval.
+ final String[] refFlatFields = new String[RefFlatColumns.values().length];
+ refFlatFields[RefFlatColumns.GENE_NAME.ordinal()] = "myGene";
+ refFlatFields[RefFlatColumns.TRANSCRIPT_NAME.ordinal()] = "myTranscript";
+ refFlatFields[RefFlatColumns.CHROMOSOME.ordinal()] = sequence;
+ refFlatFields[RefFlatColumns.STRAND.ordinal()] = "+";
+ refFlatFields[RefFlatColumns.TX_START.ordinal()] = "49";
+ refFlatFields[RefFlatColumns.TX_END.ordinal()] = "500";
+ refFlatFields[RefFlatColumns.CDS_START.ordinal()] = "74";
+ refFlatFields[RefFlatColumns.CDS_END.ordinal()] = "400";
+ refFlatFields[RefFlatColumns.EXON_COUNT.ordinal()] = "2";
+ refFlatFields[RefFlatColumns.EXON_STARTS.ordinal()] = "49,249";
+ refFlatFields[RefFlatColumns.EXON_ENDS.ordinal()] = "200,500";
+
+ final File refFlatFile = File.createTempFile("tmp.", ".refFlat");
+ refFlatFile.deleteOnExit();
+ final PrintStream refFlatStream = new PrintStream(refFlatFile);
+ refFlatStream.println(StringUtil.join("\t", refFlatFields));
+ refFlatStream.close();
+
+ return refFlatFile;
+ }
+
+}
diff --git a/src/tests/java/picard/analysis/MultiLevelCollectorTest.java b/src/tests/java/picard/analysis/MultiLevelCollectorTest.java
new file mode 100644
index 0000000..5a3fc3f
--- /dev/null
+++ b/src/tests/java/picard/analysis/MultiLevelCollectorTest.java
@@ -0,0 +1,195 @@
+package picard.analysis;
+
+
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.util.CloserUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.metrics.MultiLevelCollector;
+import picard.metrics.MultilevelMetrics;
+import picard.metrics.PerUnitMetricCollector;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CollectionUtil.makeSet;
+
+public class MultiLevelCollectorTest {
+
+ public static File TESTFILE = new File("testdata/picard/sam/summary_alignment_stats_test_multiple.sam");
+
+ public String noneOrStr(final String str) {
+ final String out;
+ if(str == null) {
+ out = "";
+ } else {
+ out = str;
+ }
+ return out;
+ }
+
+ class TestArg {
+ public final SAMRecord samRecord;
+ public final ReferenceSequence refSeq;
+
+ public TestArg(final SAMRecord samRecord, final ReferenceSequence refSeq) {
+ this.samRecord = samRecord;
+ this.refSeq = refSeq;
+ }
+ }
+
+ /** We will just Tally up the number of times records were added to this metric and change FINISHED
+ * to true when FINISHED is called
+ */
+ class TotalNumberMetric extends MultilevelMetrics {
+ /** The number of these encountered **/
+ public Integer TALLY = 0;
+ public boolean FINISHED = false;
+ }
+
+ class RecordCountMultiLevelCollector extends MultiLevelCollector<TotalNumberMetric, Integer, TestArg> {
+
+ public RecordCountMultiLevelCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords) {
+ setup(accumulationLevels, samRgRecords);
+ }
+
+ //The number of times records were accepted by a RecordCountPerUnitCollectors (note since the same
+ //samRecord might be aggregated by multiple PerUnit collectors, this may be greater than the number of
+ //records in the file
+ private int numProcessed = 0;
+
+ public int getNumProcessed() {
+ return numProcessed;
+ }
+
+ private final Map<String, TotalNumberMetric> unitsToMetrics = new HashMap<String, TotalNumberMetric>();
+
+ public Map<String, TotalNumberMetric> getUnitsToMetrics() {
+ return unitsToMetrics;
+ }
+
+ @Override
+ protected TestArg makeArg(final SAMRecord samRec, final ReferenceSequence refSeq) {
+ return new TestArg(samRec, refSeq);
+ }
+
+ @Override
+ protected PerUnitMetricCollector<TotalNumberMetric, Integer, TestArg> makeChildCollector(final String sample, final String library, final String readGroup) {
+ return new RecordCountPerUnitCollector(sample, library, readGroup);
+ }
+
+ private class RecordCountPerUnitCollector implements PerUnitMetricCollector<TotalNumberMetric, Integer, TestArg>{
+ private final TotalNumberMetric metric;
+
+ public RecordCountPerUnitCollector(final String sample, final String library, final String readGroup) {
+ metric = new TotalNumberMetric();
+ metric.SAMPLE = sample;
+ metric.LIBRARY = library;
+ metric.READ_GROUP = readGroup;
+ unitsToMetrics.put(noneOrStr(sample) + "_" + noneOrStr(library) + "_" + noneOrStr(readGroup), metric);
+ }
+
+ @Override
+ public void acceptRecord(final TestArg args) {
+ numProcessed += 1;
+ metric.TALLY += 1;
+ if(metric.SAMPLE != null) {
+ Assert.assertEquals(metric.SAMPLE, args.samRecord.getReadGroup().getSample());
+ }
+ if(metric.LIBRARY != null) {
+ Assert.assertEquals(metric.LIBRARY, args.samRecord.getReadGroup().getLibrary());
+ }
+
+ if(metric.READ_GROUP != null) {
+ Assert.assertEquals(metric.READ_GROUP, args.samRecord.getReadGroup().getPlatformUnit());
+ }
+ }
+
+ @Override
+ public void finish() {
+ metric.FINISHED = true;
+ }
+
+ @Override
+ public void addMetricsToFile(final MetricsFile<TotalNumberMetric, Integer> totalNumberMetricIntegerMetricsFile) {
+ totalNumberMetricIntegerMetricsFile.addMetric(metric);
+ }
+ }
+ }
+
+ public static final Map<MetricAccumulationLevel, Map<String, Integer>> accumulationLevelToPerUnitReads = new HashMap<MetricAccumulationLevel, Map<String, Integer>>();
+ static {
+ HashMap<String, Integer> curMap = new HashMap<String, Integer>();
+ curMap.put("__", 19);
+ accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.ALL_READS, curMap);
+
+ curMap = new HashMap<String, Integer>();
+ curMap.put("Ma__", 10);
+ curMap.put("Pa__", 9);
+ accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.SAMPLE, curMap);
+
+ curMap = new HashMap<String, Integer>();
+ curMap.put("Ma_whatever_", 10);
+ curMap.put("Pa_lib1_", 4);
+ curMap.put("Pa_lib2_", 5);
+ accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.LIBRARY, curMap);
+
+
+ curMap = new HashMap<String, Integer>();
+ curMap.put("Ma_whatever_me", 10);
+ curMap.put("Pa_lib1_myself", 4);
+ curMap.put("Pa_lib2_i", 3);
+ curMap.put("Pa_lib2_i2", 2);
+ accumulationLevelToPerUnitReads.put(MetricAccumulationLevel.READ_GROUP, curMap);
+ }
+
+ @DataProvider(name = "variedAccumulationLevels")
+ public Object [][] variedAccumulationLevels() {
+ return new Object[][] {
+ {makeSet(MetricAccumulationLevel.ALL_READS)},
+ {makeSet(MetricAccumulationLevel.ALL_READS, MetricAccumulationLevel.SAMPLE)},
+ {makeSet(MetricAccumulationLevel.SAMPLE, MetricAccumulationLevel.LIBRARY)},
+ {makeSet(MetricAccumulationLevel.READ_GROUP, MetricAccumulationLevel.LIBRARY)},
+ {makeSet(MetricAccumulationLevel.SAMPLE, MetricAccumulationLevel.LIBRARY, MetricAccumulationLevel.READ_GROUP)},
+ {makeSet(MetricAccumulationLevel.SAMPLE, MetricAccumulationLevel.LIBRARY, MetricAccumulationLevel.READ_GROUP, MetricAccumulationLevel.ALL_READS)},
+ };
+ }
+
+ @Test(dataProvider = "variedAccumulationLevels")
+ public void multilevelCollectorTest(final Set<MetricAccumulationLevel> accumulationLevels) {
+ final SamReader in = SamReaderFactory.makeDefault().open(TESTFILE);
+ final RecordCountMultiLevelCollector collector = new RecordCountMultiLevelCollector(accumulationLevels, in.getFileHeader().getReadGroups());
+
+ for (final SAMRecord rec : in) {
+ collector.acceptRecord(rec, null);
+ }
+
+ collector.finish();
+
+ int totalProcessed = 0;
+ int totalMetrics = 0;
+ for(final MetricAccumulationLevel level : accumulationLevels) {
+ final Map<String, Integer> keyToMetrics = accumulationLevelToPerUnitReads.get(level);
+ for(final Map.Entry<String, Integer> entry : keyToMetrics.entrySet()) {
+ final TotalNumberMetric metric = collector.getUnitsToMetrics().get(entry.getKey());
+ Assert.assertEquals(entry.getValue(), metric.TALLY);
+ Assert.assertTrue(metric.FINISHED);
+ totalProcessed += metric.TALLY;
+ totalMetrics += 1;
+ }
+ }
+
+ Assert.assertEquals(collector.getUnitsToMetrics().size(), totalMetrics);
+ Assert.assertEquals(totalProcessed, collector.getNumProcessed());
+ CloserUtil.close(in);
+ }
+}
diff --git a/src/tests/java/picard/analysis/artifacts/CollectSequencingArtifactMetricsTest.java b/src/tests/java/picard/analysis/artifacts/CollectSequencingArtifactMetricsTest.java
new file mode 100644
index 0000000..7e10d71
--- /dev/null
+++ b/src/tests/java/picard/analysis/artifacts/CollectSequencingArtifactMetricsTest.java
@@ -0,0 +1,112 @@
+package picard.analysis.artifacts;
+
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class CollectSequencingArtifactMetricsTest extends CommandLineProgramTest {
+
+ private static final File TEST_DIR = new File("testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics");
+ private static final File REFERENCE = new File(TEST_DIR, "test.fasta");
+ private static final File TEST_SAM = new File(TEST_DIR, "test.sam");
+ private static final File DB_SNP = new File(TEST_DIR, "test.dbsnp.vcf");
+ private static final File INTERVALS = new File(TEST_DIR, "test.interval_list");
+ private static final File TEST_CASES = new File(TEST_DIR, "ExpectedMetricsOutput");
+
+ private File globalTempOutputDir;
+
+ @Override
+ public String getCommandLineProgramName() {
+ return CollectSequencingArtifactMetrics.class.getSimpleName();
+ }
+
+ @BeforeTest
+ public void setUp() throws IOException {
+ globalTempOutputDir = IOUtil.createTempDir("artifactMetrics.", ".tmp");
+ }
+
+ @AfterTest
+ public void tearDown() throws IOException {
+ IOUtil.deleteDirectoryTree(globalTempOutputDir);
+ }
+
+ /**
+ * Run the CLP using standard arguments and maybe some additional ones, then compare to the expected results.
+ *
+ * @param testCase name of test case (should match one of the file sets in {@code TEST_CASES}
+ * @param extraArgs extra arguments of the form {@code "KEY1=VALUE1", "KEY2=VALUE2"}, etc. These can override standard args.
+ * @return the base path of the output metrics
+ */
+ private void runAnalysis(final String testCase, final String ... extraArgs) throws IOException {
+ final File actual = new File(globalTempOutputDir, testCase);
+ final File expected = new File(TEST_CASES, testCase);
+
+ final Map<String, String> args = new HashMap<String, String>();
+ args.put("INPUT", TEST_SAM.getAbsolutePath());
+ args.put("OUTPUT", actual.getAbsolutePath());
+ args.put("REFERENCE_SEQUENCE", REFERENCE.getAbsolutePath());
+ args.put("MINIMUM_INSERT_SIZE", "30"); // test data has this insert size
+ args.put("MAXIMUM_INSERT_SIZE", "30"); // test data has this insert size
+ args.put("CONTEXT_SIZE", "0"); // ignore context by default, to cut down on file size
+
+ for (final String extraArg : extraArgs) {
+ final String[] kv = extraArg.split("=");
+ args.put(kv[0], kv[1]);
+ }
+
+ runPicardCommandLine(args);
+ assertAllFilesEqual(expected, actual);
+ }
+
+ private void assertAllFilesEqual(final File expectedBase, final File actualBase) {
+ boolean equal = areMetricsEqual(expectedBase, actualBase, SequencingArtifactMetrics.PRE_ADAPTER_SUMMARY_EXT);
+ equal = equal && areMetricsEqual(expectedBase, actualBase, SequencingArtifactMetrics.PRE_ADAPTER_DETAILS_EXT);
+ equal = equal && areMetricsEqual(expectedBase, actualBase, SequencingArtifactMetrics.BAIT_BIAS_SUMMARY_EXT);
+ equal = equal && areMetricsEqual(expectedBase, actualBase, SequencingArtifactMetrics.BAIT_BIAS_DETAILS_EXT);
+ Assert.assertTrue(equal);
+ }
+
+ private boolean areMetricsEqual(final File expectedBase, final File actualBase, final String extension) {
+ return MetricsFile.areMetricsEqual(new File(expectedBase + extension), new File(actualBase + extension));
+ }
+
+ @Test
+ public void testContext() throws IOException {
+ runAnalysis("with_context", "CONTEXT_SIZE=1");
+ }
+
+ @Test
+ public void testDbSnp() throws IOException {
+ runAnalysis("with_dbsnp", "DB_SNP=" + DB_SNP);
+ }
+
+ @Test
+ public void testIntervalList() throws IOException {
+ runAnalysis("with_intervals", "INTERVALS=" + INTERVALS);
+ }
+
+ @Test
+ public void testNoBqCutoff() throws IOException {
+ runAnalysis("no_bq_cutoff", "MINIMUM_QUALITY_SCORE=0");
+ }
+
+ @Test
+ public void testNoMqCutoff() throws IOException {
+ runAnalysis("no_mq_cutoff", "MINIMUM_MAPPING_QUALITY=0");
+ }
+
+ @Test
+ public void testUnmappedMate() throws IOException {
+ runAnalysis("unmapped_mate", "MINIMUM_INSERT_SIZE=0", "MAXIMUM_INSERT_SIZE=0");
+ }
+
+}
diff --git a/src/tests/java/picard/cmdline/CommandLineParserTest.java b/src/tests/java/picard/cmdline/CommandLineParserTest.java
new file mode 100644
index 0000000..f136d08
--- /dev/null
+++ b/src/tests/java/picard/cmdline/CommandLineParserTest.java
@@ -0,0 +1,980 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.cmdline;
+
+import htsjdk.samtools.util.CollectionUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.cmdline.programgroups.Testing;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class CommandLineParserTest {
+
+ enum FrobnicationFlavor {
+ FOO, BAR, BAZ
+ }
+
+ @CommandLineProgramProperties(
+ usage = "Usage: frobnicate [options] input-file output-file\n\nRead input-file, frobnicate it, and write frobnicated results to output-file\n",
+ usageShort = "Read input-file, frobnicate it, and write frobnicated results to output-file"
+ )
+ class FrobnicateOptions {
+
+ @PositionalArguments(minElements = 2, maxElements = 2)
+ public List<File> positionalArguments = new ArrayList<File>();
+
+ @Option(shortName = "T", doc = "Frobnication threshold setting.")
+ public Integer FROBNICATION_THRESHOLD = 20;
+
+ @Option
+ public FrobnicationFlavor FROBNICATION_FLAVOR;
+
+ @Option(doc = "Allowed shmiggle types.", minElements = 1, maxElements = 3)
+ public List<String> SHMIGGLE_TYPE = new ArrayList<String>();
+
+ @Option
+ public Boolean TRUTHINESS;
+ }
+
+ @CommandLineProgramProperties(
+ usage = "Usage: frobnicate [options] input-file output-file\n\nRead input-file, frobnicate it, and write frobnicated results to output-file\n",
+ usageShort = "Read input-file, frobnicate it, and write frobnicated results to output-file"
+ )
+ class FrobnicateOptionsWithNullList {
+
+ @PositionalArguments(minElements = 2, maxElements = 2)
+ public List<File> positionalArguments = new ArrayList<File>();
+
+ @Option(shortName = "T", doc = "Frobnication threshold setting.")
+ public Integer FROBNICATION_THRESHOLD = 20;
+
+ @Option
+ public FrobnicationFlavor FROBNICATION_FLAVOR;
+
+ @Option(doc = "Allowed shmiggle types.", minElements = 0, maxElements = 3)
+ public List<String> SHMIGGLE_TYPE = new ArrayList<String>();
+
+ @Option
+ public Boolean TRUTHINESS;
+ }
+
+ @CommandLineProgramProperties(
+ usage = "Usage: framistat [options]\n\nCompute the plebnick of the freebozzle.\n",
+ usageShort = "ompute the plebnick of the freebozzle"
+ )
+ class OptionsWithoutPositional {
+ public static final int DEFAULT_FROBNICATION_THRESHOLD = 20;
+ @Option(shortName = "T", doc = "Frobnication threshold setting.")
+ public Integer FROBNICATION_THRESHOLD = DEFAULT_FROBNICATION_THRESHOLD;
+
+ @Option
+ public FrobnicationFlavor FROBNICATION_FLAVOR;
+
+ @Option(doc = "Allowed shmiggle types.", minElements = 1, maxElements = 3)
+ public List<String> SHMIGGLE_TYPE = new ArrayList<String>();
+
+ @Option
+ public Boolean TRUTHINESS;
+ }
+
+ class OptionsWithCaseClash {
+ @Option
+ public String FROB;
+ @Option
+ public String frob;
+ }
+
+ class MutexOptions {
+ @Option(mutex = {"M", "N", "Y", "Z"})
+ public String A;
+ @Option(mutex = {"M", "N", "Y", "Z"})
+ public String B;
+ @Option(mutex = {"A", "B", "Y", "Z"})
+ public String M;
+ @Option(mutex = {"A", "B", "Y", "Z"})
+ public String N;
+ @Option(mutex = {"A", "B", "M", "N"})
+ public String Y;
+ @Option(mutex = {"A", "B", "M", "N"})
+ public String Z;
+
+ }
+
+
+ @Test
+ public void testUsage() {
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ clp.usage(System.out, false);
+ }
+
+ @Test
+ public void testUsageWithDefault() {
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ clp.usage(System.out, true);
+ }
+
+ @Test
+ public void testUsageWithoutPositional() {
+ final OptionsWithoutPositional fo = new OptionsWithoutPositional();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ clp.usage(System.out, false);
+ }
+
+ @Test
+ public void testUsageWithoutPositionalWithDefault() {
+ final OptionsWithoutPositional fo = new OptionsWithoutPositional();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ clp.usage(System.out, true);
+ }
+
+ @Test
+ public void testPositive() {
+ final String[] args = {
+ "T=17",
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(fo.positionalArguments.size(), 2);
+ final File[] expectedPositionalArguments = {new File("positional1"), new File("positional2")};
+ Assert.assertEquals(fo.positionalArguments.toArray(), expectedPositionalArguments);
+ Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
+ Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
+ final String[] expectedShmiggleTypes = {"shmiggle1", "shmiggle2"};
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
+ Assert.assertFalse(fo.TRUTHINESS);
+ }
+
+ /**
+ * Allow a whitespace btw equal sign and option value.
+ */
+ @Test
+ public void testPositiveWithSpaces() {
+ final String[] args = {
+ "T=", "17",
+ "FROBNICATION_FLAVOR=", "BAR",
+ "TRUTHINESS=", "False",
+ "SHMIGGLE_TYPE=", "shmiggle1",
+ "SHMIGGLE_TYPE=", "shmiggle2",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(fo.positionalArguments.size(), 2);
+ final File[] expectedPositionalArguments = {new File("positional1"), new File("positional2")};
+ Assert.assertEquals(fo.positionalArguments.toArray(), expectedPositionalArguments);
+ Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
+ Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
+ final String[] expectedShmiggleTypes = {"shmiggle1", "shmiggle2"};
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
+ Assert.assertFalse(fo.TRUTHINESS);
+ }
+
+ @Test
+ public void testPositiveWithoutPositional() {
+ final String[] args = {
+ "T=17",
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ };
+ final OptionsWithoutPositional fo = new OptionsWithoutPositional();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
+ Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
+ final String[] expectedShmiggleTypes = {"shmiggle1", "shmiggle2"};
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
+ Assert.assertFalse(fo.TRUTHINESS);
+ }
+
+ /**
+ * If last character of command line is the equal sign in an option=value pair,
+ * make sure no crash, and that the value is empty string.
+ */
+ @Test
+ public void testPositiveTerminalEqualSign() {
+ final String[] args = {
+ "T=17",
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=",
+ };
+ final OptionsWithoutPositional fo = new OptionsWithoutPositional();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
+ Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 2);
+ final String[] expectedShmiggleTypes = {"shmiggle1", ""};
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
+ Assert.assertFalse(fo.TRUTHINESS);
+ }
+
+ @Test
+ public void testDefault() {
+ final String[] args = {
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 20);
+ }
+
+ @Test
+ public void testMissingRequiredArgument() {
+ final String[] args = {
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testBadValue() {
+ final String[] args = {
+ "FROBNICATION_THRESHOLD=ABC",
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testBadEnumValue() {
+ final String[] args = {
+ "FROBNICATION_FLAVOR=HiMom",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testNotEnoughOfListOption() {
+ final String[] args = {
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testTooManyListOption() {
+ final String[] args = {
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "SHMIGGLE_TYPE=shmiggle3",
+ "SHMIGGLE_TYPE=shmiggle4",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testTooManyPositional() {
+ final String[] args = {
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "positional1",
+ "positional2",
+ "positional3",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testNotEnoughPositional() {
+ final String[] args = {
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testUnexpectedPositional() {
+ final String[] args = {
+ "T=17",
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "SHMIGGLE_TYPE=shmiggle2",
+ "positional"
+ };
+ final OptionsWithoutPositional fo = new OptionsWithoutPositional();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test(expectedExceptions = CommandLineParserDefinitionException.class)
+ public void testOptionDefinitionCaseClash() {
+ final OptionsWithCaseClash options = new OptionsWithCaseClash();
+ new CommandLineParser(options);
+ Assert.fail("Should not be reached.");
+ }
+
+ @Test
+ public void testOptionUseCaseClash() {
+ final String[] args = {
+ "FROBNICATION_FLAVOR=BAR",
+ "FrOBNICATION_fLAVOR=BAR",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @Test
+ public void testNullValue() {
+ final String[] args = {
+ "FROBNICATION_THRESHOLD=null",
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=null",
+ "positional1",
+ "positional2",
+ };
+
+ final FrobnicateOptionsWithNullList fownl = new FrobnicateOptionsWithNullList();
+ fownl.SHMIGGLE_TYPE.add("shmiggle1"); //providing null value should clear this list
+
+ final CommandLineParser clp = new CommandLineParser(fownl);
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(fownl.positionalArguments.size(), 2);
+ final File[] expectedPositionalArguments = {new File("positional1"), new File("positional2")};
+ Assert.assertEquals(fownl.positionalArguments.toArray(), expectedPositionalArguments);
+ Assert.assertEquals(fownl.FROBNICATION_THRESHOLD, null); //test null value
+ Assert.assertEquals(fownl.SHMIGGLE_TYPE.size(), 0); //test null value for list
+ Assert.assertFalse(fownl.TRUTHINESS);
+
+ //verify that required arg can't be set to null
+ args[2] = "TRUTHINESS=null";
+ final CommandLineParser clp2 = new CommandLineParser(fownl);
+ Assert.assertFalse(clp2.parseOptions(System.err, args));
+
+ //verify that positional arg can't be set to null
+ args[2] = "TRUTHINESS=False";
+ args[4] = "null";
+ final CommandLineParser clp3 = new CommandLineParser(fownl);
+ Assert.assertFalse(clp3.parseOptions(System.err, args));
+
+ }
+
+
+ @Test
+ public void testOptionsFile() throws Exception {
+ final File optionsFile = File.createTempFile("clp.", ".options");
+ optionsFile.deleteOnExit();
+ final PrintWriter writer = new PrintWriter(optionsFile);
+ writer.println("T=18");
+ writer.println("TRUTHINESS=True");
+ writer.println("SHMIGGLE_TYPE=shmiggle0");
+ writer.println("STRANGE_OPTION=shmiggle0");
+ writer.close();
+ final String[] args = {
+ "OPTIONS_FILE=" + optionsFile.getPath(),
+ // Multiple options files are allowed
+ "OPTIONS_FILE=" + optionsFile.getPath(),
+ "T=17",
+ "FROBNICATION_FLAVOR=BAR",
+ "TRUTHINESS=False",
+ "SHMIGGLE_TYPE=shmiggle1",
+ "positional1",
+ "positional2",
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(fo.positionalArguments.size(), 2);
+ final File[] expectedPositionalArguments = {new File("positional1"), new File("positional2")};
+ Assert.assertEquals(fo.positionalArguments.toArray(), expectedPositionalArguments);
+ Assert.assertEquals(fo.FROBNICATION_THRESHOLD.intValue(), 17);
+ Assert.assertEquals(fo.FROBNICATION_FLAVOR, FrobnicationFlavor.BAR);
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.size(), 3);
+ final String[] expectedShmiggleTypes = {"shmiggle0", "shmiggle0", "shmiggle1"};
+ Assert.assertEquals(fo.SHMIGGLE_TYPE.toArray(), expectedShmiggleTypes);
+ Assert.assertFalse(fo.TRUTHINESS);
+ }
+
+
+ /**
+ * In an options file, should not be allowed to override an option set on the command line
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testOptionsFileWithDisallowedOverride() throws Exception {
+ final File optionsFile = File.createTempFile("clp.", ".options");
+ optionsFile.deleteOnExit();
+ final PrintWriter writer = new PrintWriter(optionsFile);
+ writer.println("T=18");
+ writer.close();
+ final String[] args = {
+ "T=17",
+ "OPTIONS_FILE=" + optionsFile.getPath()
+ };
+ final FrobnicateOptions fo = new FrobnicateOptions();
+ final CommandLineParser clp = new CommandLineParser(fo);
+ Assert.assertFalse(clp.parseOptions(System.err, args));
+ }
+
+ @DataProvider(name = "mutexScenarios")
+ public Object[][] mutexScenarios() {
+ return new Object[][]{
+ {"pass", new String[]{"A=1", "B=2"}, true},
+ {"no args", new String[0], false},
+ {"1 of group required", new String[]{"A=1"}, false},
+ {"mutex", new String[]{"A=1", "Y=3"}, false},
+ {"mega mutex", new String[]{"A=1", "B=2", "Y=3", "Z=1", "M=2", "N=3"}, false}
+ };
+ }
+
+ @Test(dataProvider = "mutexScenarios")
+ public void testMutex(final String testName, final String[] args, final boolean expected) {
+ final MutexOptions o = new MutexOptions();
+ final CommandLineParser clp = new CommandLineParser(o);
+ Assert.assertEquals(clp.parseOptions(System.err, args), expected);
+ }
+
+ class UninitializedCollectionOptions {
+ @Option
+ public List<String> LIST;
+ @Option
+ public ArrayList<String> ARRAY_LIST;
+ @Option
+ public HashSet<String> HASH_SET;
+ @PositionalArguments
+ public Collection<File> COLLECTION;
+
+ }
+
+ @Test
+ public void testUninitializedCollections() {
+ final UninitializedCollectionOptions o = new UninitializedCollectionOptions();
+ final CommandLineParser clp = new CommandLineParser(o);
+ final String[] args = {"LIST=L1", "LIST=L2", "ARRAY_LIST=S1", "HASH_SET=HS1", "P1", "P2"};
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(o.LIST.size(), 2);
+ Assert.assertEquals(o.ARRAY_LIST.size(), 1);
+ Assert.assertEquals(o.HASH_SET.size(), 1);
+ Assert.assertEquals(o.COLLECTION.size(), 2);
+ }
+
+ class UninitializedCollectionThatCannotBeAutoInitializedOptions {
+ @Option
+ public Set<String> SET;
+ }
+
+ @Test(expectedExceptions = CommandLineParserDefinitionException.class)
+ public void testCollectionThatCannotBeAutoInitialized() {
+ final UninitializedCollectionThatCannotBeAutoInitializedOptions o = new UninitializedCollectionThatCannotBeAutoInitializedOptions();
+ new CommandLineParser(o);
+ Assert.fail("Exception should have been thrown");
+ }
+
+ class CollectionWithDefaultValuesOptions {
+ @Option
+ public List<String> LIST = CollectionUtil.makeList("foo", "bar");
+ }
+
+ @Test
+ public void testClearDefaultValuesFromListOption() {
+ final CollectionWithDefaultValuesOptions o = new CollectionWithDefaultValuesOptions();
+ final CommandLineParser clp = new CommandLineParser(o);
+ final String[] args = {"LIST=null"};
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(o.LIST.size(), 0);
+ }
+
+ @Test
+ public void testClearDefaultValuesFromListOptionAndAddNew() {
+ final CollectionWithDefaultValuesOptions o = new CollectionWithDefaultValuesOptions();
+ final CommandLineParser clp = new CommandLineParser(o);
+ final String[] args = {"LIST=null", "LIST=baz", "LIST=frob"};
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(o.LIST, CollectionUtil.makeList("baz", "frob"));
+ }
+
+ @Test
+ public void testAddToDefaultValuesListOption() {
+ final CollectionWithDefaultValuesOptions o = new CollectionWithDefaultValuesOptions();
+ final CommandLineParser clp = new CommandLineParser(o);
+ final String[] args = {"LIST=baz", "LIST=frob"};
+ Assert.assertTrue(clp.parseOptions(System.err, args));
+ Assert.assertEquals(o.LIST, CollectionUtil.makeList("foo", "bar", "baz", "frob"));
+ }
+
+ @CommandLineProgramProperties(
+ usage = "Class with nested option",
+ usageShort = "Class with nested option"
+ )
+ class OptionsWithNested {
+ @Option
+ public Integer AN_INT;
+ @NestedOptions(doc = "Doc for FROB")
+ public OptionsWithoutPositional FROB = new OptionsWithoutPositional();
+ @NestedOptions
+ public OptionsWithNestedAgain NESTED = new OptionsWithNestedAgain();
+ @Option
+ public String A_STRING;
+ }
+
+ class OptionsWithNestedAgain {
+ @NestedOptions(doc = "Doc for inner FROB")
+ public OptionsWithoutPositional FROB = new OptionsWithoutPositional();
+ }
+
+
+ @Test
+ public void testStaticNestedOptions() {
+ final OptionsWithNested o = new OptionsWithNested();
+ final CommandLineParser clp = new CommandLineParser(o);
+ clp.usage(System.out, false);
+ clp.htmlUsage(System.out, "testStaticNestedOptions", false);
+ final int outerInt = 123;
+ final String outerString = "outerString";
+ final FrobnicationFlavor outerFlavor = FrobnicationFlavor.BAR;
+ final FrobnicationFlavor innerFlavor = FrobnicationFlavor.BAZ;
+ final boolean outerTruthiness = true;
+ final boolean innerTruthiness = false;
+ final int innerThreshold = 10;
+ final String[] outerShmiggle = {"shmiggle1", "shmiggle2"};
+ final String[] innerShmiggle = {"inner1", "inner2", "inner3"};
+
+ final List<String> args = new ArrayList<String>();
+ args.add("AN_INT=" + outerInt);
+ args.add("A_STRING=" + outerString);
+ args.add("frob.truThIness=" + outerTruthiness);
+ args.add("FrOb.FROBNICATION_FLAVOR=" + outerFlavor);
+ for (final String shmiggle : outerShmiggle) {
+ args.add("FROB.SHMIGGLE_TYPE=" + shmiggle);
+ }
+ args.add("NeStEd.Frob.FROBNICATION_THRESHOLD=" + innerThreshold);
+ args.add("NeStEd.Frob.FROBNICATION_FLAVOR=" + innerFlavor);
+ args.add("NeStEd.Frob.truthIness=" + innerTruthiness);
+ for (final String shmiggle : innerShmiggle) {
+ args.add("NESTED.FROB.SHMIGGLE_TYPE=");
+ args.add(shmiggle);
+ }
+ Assert.assertTrue(clp.parseOptions(System.err, args.toArray(new String[args.size()])));
+ System.out.println(clp.getCommandLine());
+ Assert.assertEquals(o.AN_INT.intValue(), outerInt);
+ Assert.assertEquals(o.A_STRING, outerString);
+ Assert.assertEquals(o.FROB.FROBNICATION_FLAVOR, outerFlavor);
+ Assert.assertEquals(o.FROB.FROBNICATION_THRESHOLD.intValue(), OptionsWithoutPositional.DEFAULT_FROBNICATION_THRESHOLD);
+ Assert.assertEquals(o.FROB.SHMIGGLE_TYPE, Arrays.asList(outerShmiggle));
+ Assert.assertEquals(o.FROB.TRUTHINESS.booleanValue(), outerTruthiness);
+ Assert.assertEquals(o.NESTED.FROB.SHMIGGLE_TYPE, Arrays.asList(innerShmiggle));
+ Assert.assertEquals(o.NESTED.FROB.FROBNICATION_THRESHOLD.intValue(), innerThreshold);
+ Assert.assertEquals(o.NESTED.FROB.FROBNICATION_FLAVOR, innerFlavor);
+ Assert.assertEquals(o.NESTED.FROB.TRUTHINESS.booleanValue(), innerTruthiness);
+ }
+
+ @Test
+ void testStaticNestedNegative() {
+ final OptionsWithNested o = new OptionsWithNested();
+ final CommandLineParser clp = new CommandLineParser(o);
+ final int outerInt = 123;
+ final String outerString = "outerString";
+ final FrobnicationFlavor outerFlavor = FrobnicationFlavor.BAR;
+ final boolean outerTruthiness = true;
+ final String[] outerShmiggle = {"shmiggle1", "shmiggle2"};
+
+ final List<String> args = new ArrayList<String>();
+ args.add("AN_INT=" + outerInt);
+ args.add("A_STRING=" + outerString);
+ Assert.assertFalse(clp.parseOptions(System.err, args.toArray(new String[args.size()])));
+ System.out.println(clp.getCommandLine());
+ }
+
+ @CommandLineProgramProperties(
+ usage = "Class with nested options.",
+ usageShort = "Class with nested options",
+ programGroup = Testing.class,
+ omitFromCommandLine = true
+ )
+ class ClpOptionsWithNested extends CommandLineProgram {
+ @Option
+ public Integer AN_INT;
+ @NestedOptions(doc = "This will be ignored")
+ public OptionsWithoutPositional FROB = new OptionsWithoutPositional();
+
+ @Option
+ public String A_STRING;
+
+ private final ClpOptionsWithNestedAgain NESTED = new ClpOptionsWithNestedAgain();
+
+ @Override
+ public Map<String, Object> getNestedOptions() {
+ final Map<String, Object> ret = new LinkedHashMap<String, Object>();
+ ret.put("CLP_NESTED", NESTED);
+ ret.put("FRAB", FROB);
+ return ret;
+ }
+
+ @Override
+ public Map<String, Object> getNestedOptionsForHelp() {
+ final Map<String, Object> ret = new LinkedHashMap<String, Object>();
+ ret.put("CLP_NESTED", NESTED);
+ return ret;
+ }
+
+ @Override
+ protected int doWork() {
+ return 0;
+ }
+ }
+
+ @CommandLineProgramProperties(
+ usage = "Class with nested options again.",
+ usageShort = "Class with nested options again",
+ programGroup = Testing.class,
+ omitFromCommandLine = true
+ )
+ class ClpOptionsWithNestedAgain extends CommandLineProgram {
+ private final OptionsWithoutPositional FROB = new OptionsWithoutPositional();
+
+ @Override
+ public Map<String, Object> getNestedOptions() {
+ final Map<String, Object> ret = new LinkedHashMap<String, Object>();
+ ret.put("FROB_NESTED", FROB);
+ return ret;
+ }
+
+ @Override
+ protected int doWork() {
+ return 0;
+ }
+ }
+
+ @Test
+ public void testDynamicNestedOptions() {
+ final ClpOptionsWithNested o = new ClpOptionsWithNested();
+ final int outerInt = 123;
+ final String outerString = "aString";
+ final int outerThreshold = 456;
+ final FrobnicationFlavor outerFlavor = FrobnicationFlavor.FOO;
+ final List<String> outerShmiggleType = Arrays.asList("shmiggle1");
+ final boolean outerTruthiness = true;
+ final int innerThreshold = -1000;
+ final FrobnicationFlavor innerFlavor = FrobnicationFlavor.BAZ;
+ final List<String> innerShmiggleType = Arrays.asList("innershmiggle1", "skeezwitz");
+ final boolean innerTruthiness = false;
+
+ final List<String> args = new ArrayList<String>();
+ args.add("AN_INT=" + outerInt);
+ args.add("A_STRING=" + outerString);
+ args.add("FRAB.FROBNICATION_THRESHOLD=" + outerThreshold);
+ args.add("FRAB.FROBNICATION_FLAVOR=" + outerFlavor);
+ args.add("FRAB.SHMIGGLE_TYPE=" + outerShmiggleType.get(0));
+ args.add("FRAB.TRUTHINESS=" + outerTruthiness);
+ args.add("CLP_NESTED.FROB_NESTED.FROBNICATION_THRESHOLD=" + innerThreshold);
+ args.add("CLP_NESTED.FROB_NESTED.FROBNICATION_FLAVOR=" + innerFlavor);
+ for (final String ist : innerShmiggleType) {
+ args.add("CLP_NESTED.FROB_NESTED.SHMIGGLE_TYPE=" + ist);
+ }
+ args.add("CLP_NESTED.FROB_NESTED.TRUTHINESS=" + innerTruthiness);
+
+ Assert.assertTrue(o.parseArgs(args.toArray(new String[args.size()])));
+ System.out.println(o.getCommandLine());
+ Assert.assertEquals(o.AN_INT.intValue(), outerInt);
+ Assert.assertEquals(o.A_STRING, outerString);
+ Assert.assertEquals(o.FROB.FROBNICATION_THRESHOLD.intValue(), outerThreshold);
+ Assert.assertEquals(o.FROB.FROBNICATION_FLAVOR, outerFlavor);
+ Assert.assertEquals(o.FROB.SHMIGGLE_TYPE, outerShmiggleType);
+ Assert.assertEquals(o.FROB.TRUTHINESS.booleanValue(), outerTruthiness);
+ Assert.assertEquals(o.NESTED.FROB.FROBNICATION_THRESHOLD.intValue(), innerThreshold);
+ Assert.assertEquals(o.NESTED.FROB.FROBNICATION_FLAVOR, innerFlavor);
+ Assert.assertEquals(o.NESTED.FROB.SHMIGGLE_TYPE, innerShmiggleType);
+ Assert.assertEquals(o.NESTED.FROB.TRUTHINESS.booleanValue(), innerTruthiness);
+ Assert.assertFalse(new ClpOptionsWithNested().parseArgs(new String[]{"-h"}));
+ new CommandLineParser(o).htmlUsage(System.err, o.getClass().getSimpleName(), false);
+ }
+
+ class StaticPropagationParent {
+ @Option
+ public String STRING1 = "String1ParentDefault";
+
+ @Option
+ public String STRING2 = "String2ParentDefault";
+
+ @Option(overridable = true)
+ public String STRING3 = "String3ParentDefault";
+
+ @Option
+ public String STRING4 = "String4ParentDefault";
+
+ @Option
+ public String STRING5;
+
+ @Option
+ public List<String> COLLECTION;
+
+ @NestedOptions
+ public PropagationChild CHILD = new PropagationChild();
+ }
+
+ class PropagationChild {
+ // Parent has default, child does not, should propagate
+ @Option
+ public String STRING1;
+
+ // Parent and child have default, should not propagate
+ @Option
+ public String STRING2 = "String2ChildDefault";
+
+ // Parent has explicitly set value, child has default, should propagate
+ @Option
+ public String STRING3 = "String3ChildDefault";
+
+ // Parent has default, child has explicitly set value, should not propagate
+ @Option
+ public String STRING4;
+
+ // Parent and child have explicitly set value, should not propagate
+ @Option
+ public String STRING5;
+
+ // Parent has explicitly set value, but collection should not propagate
+ @Option
+ public List<String> COLLECTION;
+ }
+
+ @Test
+ public void testStaticPropagation() {
+ final StaticPropagationParent o = new StaticPropagationParent();
+ final CommandLineParser clp = new CommandLineParser(o);
+ clp.usage(System.out, false);
+ clp.htmlUsage(System.out, "testStaticPropagation", false);
+
+ final List<String> args = new ArrayList<String>();
+ args.add("STRING3=String3Parent");
+ args.add("CHILD.STRING4=String4Child");
+ args.add("STRING5=String5Parent");
+ args.add("CHILD.STRING5=String5Child");
+ args.add("COLLECTION=CollectionParent");
+
+ Assert.assertTrue(clp.parseOptions(System.err, args.toArray(new String[args.size()])));
+ System.out.println(clp.getCommandLine());
+
+ Assert.assertEquals(o.CHILD.STRING1, "String1ParentDefault");
+ Assert.assertEquals(o.CHILD.STRING2, "String2ChildDefault");
+ Assert.assertEquals(o.CHILD.STRING3, "String3Parent");
+ Assert.assertEquals(o.CHILD.STRING4, "String4Child");
+ Assert.assertEquals(o.CHILD.STRING5, "String5Child");
+ Assert.assertEquals(o.CHILD.COLLECTION, new ArrayList<String>());
+ }
+
+ @CommandLineProgramProperties(
+ usage = "",
+ usageShort = "",
+ programGroup = Testing.class,
+ omitFromCommandLine = true
+ )
+ class DynamicPropagationParent extends CommandLineProgram {
+ @Option
+ public String STRING1 = "String1ParentDefault";
+
+ @Option
+ public String STRING2 = "String2ParentDefault";
+
+ @Option
+ public String STRING3 = "String3ParentDefault";
+
+ @Option
+ public String STRING4 = "String4ParentDefault";
+
+ @Option
+ public String STRING5;
+
+ @Option
+ public List<String> COLLECTION;
+
+ public PropagationChild CHILD = new PropagationChild();
+
+ @Override
+ protected int doWork() {
+ return 0;
+ }
+
+ @Override
+ public Map<String, Object> getNestedOptions() {
+ final Map<String, Object> ret = new HashMap<String, Object>();
+ ret.put("CHILD", CHILD);
+ return ret;
+ }
+ }
+
+ @Test
+ public void testDynamicPropagation() {
+ final DynamicPropagationParent o = new DynamicPropagationParent();
+
+ final List<String> args = new ArrayList<String>();
+ args.add("STRING3=String3Parent");
+ args.add("CHILD.STRING4=String4Child");
+ args.add("STRING5=String5Parent");
+ args.add("CHILD.STRING5=String5Child");
+ args.add("COLLECTION=CollectionParent");
+
+ Assert.assertTrue(o.parseArgs(args.toArray(new String[args.size()])));
+ System.out.println(o.getCommandLine());
+ Assert.assertFalse(new DynamicPropagationParent().parseArgs(new String[]{"-h"}));
+ new CommandLineParser(o).htmlUsage(System.err, o.getClass().getSimpleName(), false);
+
+ Assert.assertEquals(o.CHILD.STRING1, "String1ParentDefault");
+ Assert.assertEquals(o.CHILD.STRING2, "String2ChildDefault");
+ Assert.assertEquals(o.CHILD.STRING3, "String3Parent");
+ Assert.assertEquals(o.CHILD.STRING4, "String4Child");
+ Assert.assertEquals(o.CHILD.STRING5, "String5Child");
+ Assert.assertEquals(o.CHILD.COLLECTION, new ArrayList<String>());
+ }
+
+ class NegativePropagationParent {
+ @Option
+ public int STRING1 = 1;
+
+ @Option
+ public List<String> COLLECTION;
+
+ @NestedOptions
+ public PropagationChild CHILD = new PropagationChild();
+ }
+
+ /** parent and child option of the same name are not type-compatible. */
+ @Test(expectedExceptions = {IllegalArgumentException.class})
+ public void testStaticPropagationNegative() {
+ final NegativePropagationParent o = new NegativePropagationParent();
+ final CommandLineParser clp = new CommandLineParser(o);
+ clp.usage(System.out, false);
+
+ clp.parseOptions(System.err, new String[0]);
+ }
+
+ class StaticParent {
+
+ @Option
+ public String STRING1 = "String1ParentDefault";
+
+ @Option
+ public String STRING2 = "String2ParentDefault";
+
+ @Option(overridable = true)
+ public String STRING3 = "String3ParentDefault";
+
+ public void doSomething() {
+ System.out.println(STRING3);
+ }
+
+ }
+
+ class OverridePropagation extends StaticParent {
+ @Option
+ public String STRING3 = "String3Overriden";
+ }
+
+ @Test
+ public void testOveriddenOptions() {
+ final OverridePropagation overridden = new OverridePropagation();
+ final CommandLineParser overrideClp = new CommandLineParser(overridden);
+
+ overrideClp.parseOptions(System.err, new String[0]);
+
+ final OverridePropagation props = (OverridePropagation) overrideClp.getCallerOptions();
+ Assert.assertTrue(props.STRING3.equals("String3Overriden"));
+ Assert.assertTrue(((StaticParent) props).STRING3.equals("String3Overriden"));
+
+ overrideClp.parseOptions(System.err, new String[]{"STRING3=String3Supplied"});
+
+ final OverridePropagation propsSet = (OverridePropagation) overrideClp.getCallerOptions();
+ Assert.assertTrue(propsSet.STRING3.equals("String3Supplied"));
+ Assert.assertTrue(((StaticParent) propsSet).STRING3.equals("String3Supplied"));
+ }
+}
diff --git a/src/tests/java/picard/cmdline/CommandLineProgramTest.java b/src/tests/java/picard/cmdline/CommandLineProgramTest.java
new file mode 100644
index 0000000..26dd3f5
--- /dev/null
+++ b/src/tests/java/picard/cmdline/CommandLineProgramTest.java
@@ -0,0 +1,54 @@
+package picard.cmdline;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Utility class for CommandLine Program testing.
+ */
+public abstract class CommandLineProgramTest {
+ public abstract String getCommandLineProgramName();
+
+ /**
+ * For testing support. Given a name of a Picard CommandLineProgram and it's arguments, builds the arguments appropriate for calling the
+ * program through PicardCommandLine
+ *
+ * @param args
+ * @return String[] of command line arguments
+ */
+ public String[] makePicardCommandLineArgs(final List<String> args) {
+ final String[] picardCommandLineArgs = new String[args.size() + 1];
+ picardCommandLineArgs[0] = getCommandLineProgramName();
+ int i = 1;
+ for (final String arg : args) {
+ picardCommandLineArgs[i++] = arg;
+ }
+ return picardCommandLineArgs;
+ }
+
+ public String[] makePicardCommandLineArgs(final Map<String, String> kwargs) {
+ final List<String> args = new ArrayList<String>();
+ for (final String key : kwargs.keySet()) {
+ args.add(key + "=" + kwargs.get(key));
+ }
+ return makePicardCommandLineArgs(args);
+ }
+
+ public String[] makePicardCommandLineArgs(final String[] args) {
+ return makePicardCommandLineArgs(Arrays.asList(args));
+ }
+
+ public int runPicardCommandLine(final List<String> args) {
+ return new PicardCommandLine().instanceMain(makePicardCommandLineArgs(args));
+ }
+
+ public int runPicardCommandLine(final String[] args) {
+ return new PicardCommandLine().instanceMain(makePicardCommandLineArgs(args));
+ }
+
+ public int runPicardCommandLine(final Map<String, String> kwargs) {
+ return new PicardCommandLine().instanceMain(makePicardCommandLineArgs(kwargs));
+ }
+}
diff --git a/src/tests/java/picard/illumina/CheckIlluminaDirectoryTest.java b/src/tests/java/picard/illumina/CheckIlluminaDirectoryTest.java
new file mode 100644
index 0000000..30f55e9
--- /dev/null
+++ b/src/tests/java/picard/illumina/CheckIlluminaDirectoryTest.java
@@ -0,0 +1,384 @@
+package picard.illumina;
+
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.PicardException;
+import picard.cmdline.StandardOptionDefinitions;
+import picard.illumina.parser.IlluminaDataType;
+import picard.illumina.parser.IlluminaFileUtil;
+import picard.illumina.parser.IlluminaFileUtilTest;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteOrder;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+import static picard.illumina.parser.IlluminaDataType.BaseCalls;
+import static picard.illumina.parser.IlluminaDataType.Position;
+import static picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat;
+import static picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat.*;
+
+public class CheckIlluminaDirectoryTest extends CommandLineProgramTest {
+
+ private File illuminaDir;
+ private File dataDir;
+ private File interopDir;
+ private File intensityDir;
+ private File basecallDir;
+
+ public String getCommandLineProgramName() {
+ return CheckIlluminaDirectory.class.getSimpleName();
+ }
+
+ @BeforeMethod
+ private void setUp() throws Exception {
+ illuminaDir = IOUtil.createTempDir("ift_test", "IlluminaDir");
+
+ interopDir = new File(illuminaDir, "InterOp");
+ if (!interopDir.exists() && !interopDir.mkdir()) {
+ throw new RuntimeException("Couldn't make interop dir " + interopDir.getAbsolutePath());
+ }
+
+ dataDir = new File(illuminaDir, "Data");
+ if (!dataDir.exists() && !dataDir.mkdir()) {
+ throw new RuntimeException("Couldn't make data dir " + dataDir.getAbsolutePath());
+ }
+
+ intensityDir = new File(dataDir, "Intensities");
+ if (!intensityDir.exists() && !intensityDir.mkdir()) {
+ throw new RuntimeException("Couldn't make intensity dir " + intensityDir.getAbsolutePath());
+ }
+
+ basecallDir = new File(intensityDir, "BaseCalls");
+ if (!basecallDir.exists() && !basecallDir.mkdir()) {
+ throw new RuntimeException("Couldn't make basecalls dir " + basecallDir.getAbsolutePath());
+ }
+ }
+
+ @AfterMethod
+ private void tearDown() {
+ IOUtil.deleteDirectoryTree(dataDir);
+ IOUtil.deleteDirectoryTree(basecallDir);
+ IOUtil.deleteDirectoryTree(intensityDir);
+ }
+
+ public void makeFiles(final SupportedIlluminaFormat[] formats, final int lane, final List<Integer> tiles,
+ final int[] cycles) {
+ for (final IlluminaFileUtil.SupportedIlluminaFormat format : formats) {
+ IlluminaFileUtilTest.makeFiles(format, intensityDir, lane, tiles, cycles);
+ }
+ }
+
+ public String[] makeCheckerArgs(final File basecallDir, final int lane, final String readStructure,
+ final IlluminaDataType[] dataTypes, final List<Integer> filterTiles,
+ final boolean makeFakeFiles, final boolean createSymLinks) {
+ final String[] dataTypeArgs = new String[dataTypes.length + filterTiles.size() + 5];
+ dataTypeArgs[0] = "B=" + basecallDir;
+ dataTypeArgs[1] = StandardOptionDefinitions.LANE_SHORT_NAME + "=" + lane;
+ dataTypeArgs[2] = "RS=" + readStructure;
+ dataTypeArgs[3] = "F=" + makeFakeFiles;
+ dataTypeArgs[4] = "X=" + createSymLinks;
+
+ for (int i = 0; i < dataTypes.length; i++) {
+ dataTypeArgs[i + 5] = "DT=" + dataTypes[i];
+ }
+
+ if (filterTiles.size() > 0) {
+ final int start = dataTypes.length + 5;
+ for (int i = start; i < dataTypeArgs.length; i++) {
+ dataTypeArgs[i] = "T=" + filterTiles.get(i - start);
+ }
+ }
+ return dataTypeArgs;
+ }
+
+ public File writeTileMetricsOutFile(final Map<Integer, List<Integer>> lanesToTiles) {
+ return writeTileMetricsOutFile(interopDir, (byte) 2, (byte) 10, lanesToTiles);
+ }
+
+ public File writeTileMetricsOutFile(final File interopDir, final byte versionNumber, final byte recordSize,
+ final Map<Integer, List<Integer>> lanesToTiles) {
+ final File tileMetricsOut = new File(interopDir, "TileMetricsOut.bin");
+ if (!tileMetricsOut.exists()) {
+ try {
+ if (!tileMetricsOut.createNewFile()) {
+ throw new PicardException(
+ "Could not create tileMetricsOut file(" + tileMetricsOut.getAbsolutePath() + ")");
+ }
+ } catch (final IOException e) {
+ throw new PicardException(
+ "IOException creating tileMetricsOut file (" + tileMetricsOut + ") for writing!", e);
+ }
+ }
+
+ int totalEntries = 0;
+ for (final Map.Entry<Integer, List<Integer>> l2t : lanesToTiles.entrySet()) {
+ totalEntries += l2t.getValue().size();
+ }
+
+ final MappedByteBuffer buf;
+ try {
+ final RandomAccessFile raf = new RandomAccessFile(tileMetricsOut, "rw");
+ final FileChannel channel = raf.getChannel();
+ buf = channel.map(FileChannel.MapMode.READ_WRITE, 0, 2 + 10 * totalEntries);
+ buf.order(ByteOrder.LITTLE_ENDIAN);
+
+ buf.put(versionNumber);
+ buf.put(recordSize);
+
+ for (final int lane : lanesToTiles.keySet()) {
+ for (final int tile : lanesToTiles.get(lane)) {
+ buf.putShort((short) lane);
+ buf.putShort((short) tile);
+ buf.putShort((short) 0);
+ buf.putFloat(0F);
+ }
+ }
+
+ buf.force();
+ CloserUtil.close(channel);
+ CloserUtil.close(raf);
+ } catch (final IOException e) {
+ throw new PicardException("IOException writing tileMetricsOut file (" + tileMetricsOut + ")", e);
+ }
+
+ return tileMetricsOut;
+ }
+
+ public static Map<Integer, List<Integer>> makeMap(final List<Integer> lanes, final List<List<Integer>> tiles) {
+ final Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
+
+ if (lanes.size() != tiles.size()) {
+ throw new IllegalArgumentException("Number of lanes (" + lanes + ") does not equal number of tiles!");
+ }
+
+ for (int i = 0; i < lanes.size(); i++) {
+ map.put(lanes.get(i), tiles.get(i));
+ }
+
+ return map;
+ }
+
+ @DataProvider(name = "positiveTestData")
+ public Object[][] positiveTestData() {
+ return new Object[][]{
+ {
+ new SupportedIlluminaFormat[]{Bcl, Locs, Pos, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
+ IlluminaDataType.PF},
+ 3, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
+ "25T25T", new ArrayList<Integer>()
+ },
+ {
+ new SupportedIlluminaFormat[]{Bcl, Locs, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
+ IlluminaDataType.PF},
+ 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
+ "8S15T8S", new ArrayList<Integer>()
+ },
+ {
+ new SupportedIlluminaFormat[]{Bcl, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
+ 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
+ "68T8B68T", new ArrayList<Integer>()
+ },
+ {
+ new SupportedIlluminaFormat[]{Bcl, Pos, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
+ IlluminaDataType.PF},
+ 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
+ "25T25T", new ArrayList<Integer>()
+ },
+ {
+ new SupportedIlluminaFormat[]{Bcl, Pos, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Position,
+ IlluminaDataType.PF},
+ 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 50),
+ "25T25T", makeList(1301, 2101)
+ }
+ };
+ }
+
+ //Note: The positiveTest and negativeTests don't actually test Qseqs (the Qseq in the first test case above is there to make sure
+ //BCLs are preferred over Qseqs)
+
+ @Test(dataProvider = "positiveTestData")
+ public void positiveTests(final IlluminaFileUtil.SupportedIlluminaFormat[] formats,
+ final IlluminaDataType[] dataTypes,
+ final int lane,
+ final List<Integer> tiles,
+ final int[] cycles,
+ final String readStructure,
+ final List<Integer> filterTiles) {
+ makeFiles(formats, lane, tiles, cycles);
+ writeTileMetricsOutFile(makeMap(makeList(lane - 1, lane + 1, lane),
+ makeList(makeList(1, 2, 3), tiles, tiles)));
+
+ final String[] args = makeCheckerArgs(basecallDir, lane, readStructure, dataTypes, filterTiles, false, false);
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ }
+
+ @DataProvider(name = "negativeTestData")
+ public Object[][] negativeTestData() {
+ return new Object[][]{
+ { //Completely missing data types
+ new SupportedIlluminaFormat[]{Bcl, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF,
+ IlluminaDataType.Position, IlluminaDataType.Barcodes},
+ new ArrayList<String>(),
+ new ArrayList<String>(),
+ 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
+ "68T8B68T",
+ 2, new ArrayList<Integer>(), true
+ },
+ {
+ new SupportedIlluminaFormat[]{Bcl, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
+ makeList("BaseCalls/L002/C13.1/s_2_1201.bcl", "BaseCalls/L002/C13.1/s_2_2101.bcl"),
+ makeList("BaseCalls/L002/s_2_2101.filter"),
+ 2, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 20), "13T",
+ 3, new ArrayList<Integer>(), true
+ },
+ {
+ new SupportedIlluminaFormat[]{Bcl, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
+ new ArrayList<String>(),
+ new ArrayList<String>(),
+ 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
+ "250T",
+ 98, new ArrayList<Integer>(), true
+ },
+ {
+ new SupportedIlluminaFormat[]{Bcl, Filter},
+ new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF},
+ new ArrayList<String>(),
+ new ArrayList<String>(),
+ 5, makeList(1101, 1201, 1301, 2101, 2201, 2301), IlluminaFileUtilTest.cycleRange(1, 152),
+ "250T",
+ 98, makeList(1301, 2201), true
+ }
+ };
+ }
+
+ @Test(dataProvider = "negativeTestData")
+ public void negativeTests(final IlluminaFileUtil.SupportedIlluminaFormat[] formats,
+ final IlluminaDataType[] dataTypes,
+ final List<String> filesToDelete,
+ final List<String> filesToEmpty,
+ final int lane,
+ final List<Integer> tiles,
+ final int[] cycles,
+ final String readStructure,
+ final int expectedNumErrors,
+ final List<Integer> filterTiles,
+ final boolean makeFakeFiles) {
+ makeFiles(formats, lane, tiles, cycles);
+ IlluminaFileUtilTest.deleteRelativeFiles(intensityDir, filesToDelete);
+ IlluminaFileUtilTest.emptyRelativeFiles(intensityDir, filesToEmpty);
+ writeTileMetricsOutFile(makeMap(makeList(lane - 1, lane + 1, lane), makeList(makeList(1, 2, 3), tiles, tiles)));
+
+ final String[] args = makeCheckerArgs(basecallDir, lane, readStructure, dataTypes, filterTiles, makeFakeFiles, false);
+ Assert.assertEquals(runPicardCommandLine(args), expectedNumErrors);
+ //if we previously faked files make sure CheckIlluminaDirectory returns with no failures
+ if (makeFakeFiles) {
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ }
+ }
+
+ public void writeFileOfSize(final File file, final int size) {
+ try {
+ final BufferedWriter writer = new BufferedWriter(new FileWriter(file));
+ for (int i = 0; i < size; i++) {
+ final int toWrite = Math.min(1000, size);
+ final char[] writeBuffer = new char[toWrite];
+ for (int j = 0; j < writeBuffer.length; j++) {
+ writeBuffer[j] = (char) (Math.random() * 150);
+ }
+
+ writer.write(writeBuffer);
+ }
+ writer.flush();
+ writer.close();
+ } catch (final Exception exc) {
+ throw new RuntimeException(exc);
+ }
+ }
+
+ @Test
+ public void differentSizedBclTest() {
+ final int lane = 5;
+ final List<Integer> tiles = makeList(1, 2, 3, 4);
+ final int[] cycles = IlluminaFileUtilTest.cycleRange(1, 50);
+ final IlluminaDataType[] dataTypes = new IlluminaDataType[]{BaseCalls, IlluminaDataType.QualityScores};
+
+ makeFiles(new SupportedIlluminaFormat[]{Bcl, Filter}, lane, tiles, cycles);
+ writeTileMetricsOutFile(makeMap(makeList(lane - 1, lane + 1, lane),
+ makeList(makeList(1, 2, 3), tiles, tiles)));
+
+ final File cycleDir = new File(basecallDir, "L005/C9.1");
+ writeFileOfSize(new File(cycleDir, "s_5_3.bcl"), 222);
+
+ final String[] args =
+ makeCheckerArgs(basecallDir, lane, "50T", dataTypes, new ArrayList<Integer>(), false, false);
+ Assert.assertEquals(runPicardCommandLine(args), 1);
+ }
+
+ @Test(expectedExceptions = SAMException.class)
+ public void basedirDoesntExistTest() {
+ final String[] args = makeCheckerArgs(new File("a_made_up_file/in_some_weird_location"), 1, "76T76T",
+ new IlluminaDataType[]{IlluminaDataType.Position},
+ new ArrayList<Integer>(), false, false);
+ runPicardCommandLine(args);
+ }
+
+ @Test
+ public void symlinkLocsTest() {
+ final List<Integer> tileList = makeList(1101, 1102, 1103, 2101, 2102, 2103);
+ final int lane = 5;
+ makeFiles(new SupportedIlluminaFormat[]{Bcl}, lane, tileList, IlluminaFileUtilTest.cycleRange(1, 50));
+ String[] args =
+ makeCheckerArgs(basecallDir, lane, "50T", new IlluminaDataType[]{Position}, new ArrayList<Integer>(),
+ false,
+ true);
+ writeTileMetricsOutFile(makeMap(makeList(lane), makeList(tileList)));
+
+ createSingleLocsFile();
+ final File intensityLaneDir = new File(intensityDir, IlluminaFileUtil.longLaneStr(lane));
+ intensityLaneDir.mkdirs();
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ //now that we have created the loc files lets test to make sure they are there
+ args = makeCheckerArgs(basecallDir, lane, "50T", new IlluminaDataType[]{IlluminaDataType.Position},
+ new ArrayList<Integer>(), false,
+ true);
+
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ }
+
+ private void createSingleLocsFile() {
+ try {
+ final File singleLocsFile = new File(intensityDir, "s.locs");
+ final FileWriter writer = new FileWriter(singleLocsFile);
+ writer.write("This is a test string.");
+ writer.close();
+ } catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+}
diff --git a/src/tests/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java b/src/tests/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java
new file mode 100644
index 0000000..3f3fc9b
--- /dev/null
+++ b/src/tests/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java
@@ -0,0 +1,171 @@
+package picard.illumina;
+
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.metrics.MetricsFile;
+import org.testng.Assert;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+
+public class CollectIlluminaBasecallingMetricsTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/illumina/CollectIlluminaBasecallingMetrics");
+
+ private File rootTestDir;
+
+ @BeforeTest
+ private void setUp() throws Exception {
+ rootTestDir = File.createTempFile("cibm.", ".tmp");
+ Assert.assertTrue(rootTestDir.delete());
+ Assert.assertTrue(rootTestDir.mkdir());
+ for (final File source : TEST_DATA_DIR.listFiles()) {
+ if (source.isDirectory() && !source.isHidden()) {
+ IOUtil.copyDirectoryTree(source, new File(rootTestDir.getPath(),source.getName()));
+ }
+ }
+ }
+
+ @AfterTest
+ private void tearDown() {
+ IOUtil.deleteDirectoryTree(rootTestDir);
+ }
+
+ @Test
+ public void testIndexedRunLane1() throws Exception {
+ final MetricsFile<IlluminaBasecallingMetrics, Integer> metricsFile = runIt(1, "25T8B25T","25T8B25T/Data/Intensities/BaseCalls", true);
+ final IlluminaBasecallingMetrics metric1 = metricsFile.getMetrics().get(0);
+ Assert.assertEquals(metric1.LANE, "1");
+ Assert.assertEquals(metric1.MOLECULAR_BARCODE_SEQUENCE_1, "AACAATGG");
+ Assert.assertEquals(metric1.MOLECULAR_BARCODE_NAME, "tagged_117");
+ Assert.assertEquals(metric1.MEAN_CLUSTERS_PER_TILE, 2.0);
+ Assert.assertEquals(metric1.SD_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric1.MEAN_PF_CLUSTERS_PER_TILE, 2.0);
+ Assert.assertEquals(metric1.SD_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric1.MEAN_PCT_PF_CLUSTERS_PER_TILE, 100.0);
+ Assert.assertEquals(metric1.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric1.TOTAL_CLUSTERS, 2);
+ Assert.assertEquals(metric1.TOTAL_CLUSTERS * 50, metric1.TOTAL_BASES);
+ Assert.assertEquals(metric1.PF_BASES, metric1.TOTAL_BASES * metric1.PF_CLUSTERS / metric1.TOTAL_CLUSTERS);
+
+ final IlluminaBasecallingMetrics metric2 = metricsFile.getMetrics().get(1);
+ Assert.assertEquals(metric2.LANE, "1");
+ Assert.assertEquals(metric2.MOLECULAR_BARCODE_SEQUENCE_1, "AACGCATT");
+ Assert.assertEquals(metric2.MOLECULAR_BARCODE_NAME, "tagged_741");
+ Assert.assertEquals(metric2.MEAN_CLUSTERS_PER_TILE, 3.0);
+ Assert.assertEquals(metric2.SD_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric2.MEAN_PF_CLUSTERS_PER_TILE, 2.0);
+ Assert.assertEquals(metric2.SD_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric2.MEAN_PCT_PF_CLUSTERS_PER_TILE, 66.67);
+ Assert.assertEquals(metric2.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric2.TOTAL_CLUSTERS, 3);
+ Assert.assertEquals(metric2.TOTAL_CLUSTERS * 50, metric2.TOTAL_BASES);
+ Assert.assertEquals(metric2.PF_BASES, metric2.TOTAL_BASES * metric2.PF_CLUSTERS / metric2.TOTAL_CLUSTERS);
+
+ final IlluminaBasecallingMetrics metric3 = metricsFile.getMetrics().get(2);
+ Assert.assertEquals(metric3.LANE, "1");
+ Assert.assertEquals(metric3.MOLECULAR_BARCODE_SEQUENCE_1, "ACAGGTAT");
+ Assert.assertEquals(metric3.MOLECULAR_BARCODE_NAME, "tagged_375");
+ Assert.assertEquals(metric3.MEAN_CLUSTERS_PER_TILE, 1.0);
+ Assert.assertEquals(metric3.SD_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric3.MEAN_PF_CLUSTERS_PER_TILE, 1.0);
+ Assert.assertEquals(metric3.SD_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric3.MEAN_PCT_PF_CLUSTERS_PER_TILE, 100.0);
+ Assert.assertEquals(metric3.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric3.TOTAL_CLUSTERS, 1);
+ Assert.assertEquals(metric3.TOTAL_CLUSTERS * 50, metric3.TOTAL_BASES);
+ Assert.assertEquals(metric3.PF_BASES, metric3.TOTAL_BASES * metric3.PF_CLUSTERS / metric3.TOTAL_CLUSTERS);
+
+ final IlluminaBasecallingMetrics metric4 = metricsFile.getMetrics().get(3);
+ Assert.assertEquals(metric4.LANE, "1");
+ Assert.assertEquals(metric4.MOLECULAR_BARCODE_SEQUENCE_1, "ACTAAGAC");
+ Assert.assertEquals(metric4.MOLECULAR_BARCODE_NAME, "tagged_630");
+ Assert.assertEquals(metric4.MEAN_CLUSTERS_PER_TILE, 2.0);
+ Assert.assertEquals(metric4.SD_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric4.MEAN_PF_CLUSTERS_PER_TILE, 1.0);
+ Assert.assertEquals(metric4.SD_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric4.MEAN_PCT_PF_CLUSTERS_PER_TILE, 50.00);
+ Assert.assertEquals(metric4.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric4.TOTAL_CLUSTERS, 2);
+ Assert.assertEquals(metric4.TOTAL_CLUSTERS * 50, metric4.TOTAL_BASES);
+ Assert.assertEquals(metric4.PF_BASES, metric4.TOTAL_BASES * metric4.PF_CLUSTERS / metric4.TOTAL_CLUSTERS);
+
+ final IlluminaBasecallingMetrics metric5 = metricsFile.getMetrics().get(4);
+ Assert.assertEquals(metric5.LANE, "1");
+ Assert.assertEquals(metric5.MOLECULAR_BARCODE_SEQUENCE_1, "AGCATGGA");
+ Assert.assertEquals(metric5.MOLECULAR_BARCODE_NAME, "tagged_908");
+ Assert.assertEquals(metric5.MEAN_CLUSTERS_PER_TILE, 1.0);
+ Assert.assertEquals(metric5.SD_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric5.MEAN_PF_CLUSTERS_PER_TILE, 1.0);
+ Assert.assertEquals(metric5.SD_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric5.MEAN_PCT_PF_CLUSTERS_PER_TILE, 100.0);
+ Assert.assertEquals(metric5.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(metric5.TOTAL_CLUSTERS, 1);
+ Assert.assertEquals(metric5.TOTAL_CLUSTERS * 50, metric5.TOTAL_BASES);
+ Assert.assertEquals(metric5.PF_BASES, metric5.TOTAL_BASES * metric5.PF_CLUSTERS / metric5.TOTAL_CLUSTERS);
+
+ final IlluminaBasecallingMetrics laneMetric = metricsFile.getMetrics().get(34);
+ Assert.assertEquals(laneMetric.LANE, "1");
+ Assert.assertEquals(laneMetric.MOLECULAR_BARCODE_SEQUENCE_1, null);
+ Assert.assertEquals(laneMetric.MOLECULAR_BARCODE_NAME, null);
+ Assert.assertEquals(laneMetric.MEAN_CLUSTERS_PER_TILE, 60.0);
+ Assert.assertEquals(laneMetric.SD_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(laneMetric.MEAN_PF_CLUSTERS_PER_TILE, 50.0);
+ Assert.assertEquals(laneMetric.SD_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(laneMetric.MEAN_PCT_PF_CLUSTERS_PER_TILE, 83.33);
+ Assert.assertEquals(laneMetric.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(laneMetric.TOTAL_CLUSTERS, 60);
+ Assert.assertEquals(laneMetric.TOTAL_CLUSTERS * 50, laneMetric.TOTAL_BASES);
+ Assert.assertEquals(laneMetric.PF_BASES, laneMetric.TOTAL_BASES * laneMetric.PF_CLUSTERS / laneMetric.TOTAL_CLUSTERS);
+ }
+
+ @Test
+ public void testNonIndexedRunLane1() throws Exception {
+ final MetricsFile<IlluminaBasecallingMetrics, Integer> metricsFile = runIt(1, "125T125T","125T125T/Data/Intensities/BaseCalls",false);
+ final IlluminaBasecallingMetrics laneMetric = metricsFile.getMetrics().get(0);
+
+ Assert.assertEquals(laneMetric.LANE, "1");
+ Assert.assertEquals(laneMetric.MOLECULAR_BARCODE_SEQUENCE_1, null);
+ Assert.assertEquals(laneMetric.MOLECULAR_BARCODE_NAME, null);
+ Assert.assertEquals(laneMetric.MEAN_CLUSTERS_PER_TILE, 2000.0);
+ Assert.assertEquals(laneMetric.SD_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(laneMetric.MEAN_PF_CLUSTERS_PER_TILE,1863.0);
+ Assert.assertEquals(laneMetric.SD_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(laneMetric.MEAN_PCT_PF_CLUSTERS_PER_TILE, 93.15);
+ Assert.assertEquals(laneMetric.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
+ Assert.assertEquals(laneMetric.TOTAL_BASES, 500000);
+ Assert.assertEquals(laneMetric.TOTAL_READS, 4000);
+ Assert.assertEquals(laneMetric.PF_BASES, 465750);
+ Assert.assertEquals(laneMetric.PF_READS, 3726);
+
+
+ Assert.assertEquals(metricsFile.getMetrics().size(),1);
+ }
+
+ private MetricsFile<IlluminaBasecallingMetrics, Integer> runIt(final int lane, final String readStructure, final String basecallsDirName, final boolean isIndexed) throws Exception {
+ final File metricsFile = File.createTempFile("cibm.", ".metrics");
+ metricsFile.deleteOnExit();
+
+ File basecallsDir = new File(rootTestDir.getPath(),basecallsDirName);
+
+ ArrayList<String> argsList = new ArrayList<String>();
+ argsList.add("BASECALLS_DIR=" + basecallsDir.getPath());
+ argsList.add("LANE=" + lane);
+ argsList.add("OUTPUT=" + metricsFile.getPath());
+
+ if (readStructure != null) argsList.add("READ_STRUCTURE=" + readStructure);
+ if (isIndexed) argsList.add("INPUT=" + new File(basecallsDir.getPath(),"barcodeData." + lane).getPath());
+
+ final String[] args = new String[argsList.size()];
+ argsList.toArray(args);
+
+ Assert.assertEquals(new CollectIlluminaBasecallingMetrics().instanceMain(args),0);
+
+ final MetricsFile<IlluminaBasecallingMetrics,Integer> retval =
+ new MetricsFile<IlluminaBasecallingMetrics,Integer>();
+ retval.read(new FileReader(metricsFile));
+ return retval;
+ }
+}
diff --git a/src/tests/java/picard/illumina/ExtractIlluminaBarcodesTest.java b/src/tests/java/picard/illumina/ExtractIlluminaBarcodesTest.java
new file mode 100644
index 0000000..76ef594
--- /dev/null
+++ b/src/tests/java/picard/illumina/ExtractIlluminaBarcodesTest.java
@@ -0,0 +1,321 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.illumina.parser.ClusterData;
+import picard.illumina.parser.IlluminaDataProvider;
+import picard.illumina.parser.IlluminaDataProviderFactory;
+import picard.illumina.parser.IlluminaDataType;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.util.BasicInputParser;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author alecw at broadinstitute.org
+ */
+public class ExtractIlluminaBarcodesTest extends CommandLineProgramTest {
+ private static final File SINGLE_DATA_DIR = new File("testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
+ private static final File DUAL_DATA_DIR = new File("testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls");
+ private static final String[] BARCODES = {
+ "CAACTCTC",
+ "CAACTCTG", // This one is artificial -- one edit away from the first one
+ "ACAGGTAT",
+ "GACCGTTG",
+ "ATTATCAA",
+ "TGCTGCTG",
+ "AACAATGG",
+ "TGTAATCA",
+ "GCCGTCGA",
+ "GTCCACAG",
+ "TTGTCTAT",
+ "GTGGAGAC",
+ "TTGCAAAT"
+ };
+
+ private File basecallsDir;
+ private File dual;
+ private File qual;
+
+ public String getCommandLineProgramName() {
+ return ExtractIlluminaBarcodes.class.getSimpleName();
+ }
+
+ @BeforeTest
+ private void setUp() throws Exception {
+ basecallsDir = File.createTempFile("eib.", ".tmp");
+ Assert.assertTrue(basecallsDir.delete());
+ Assert.assertTrue(basecallsDir.mkdir());
+ IOUtil.copyDirectoryTree(SINGLE_DATA_DIR, basecallsDir);
+ dual = File.createTempFile("eib_dual", ".tmp");
+ Assert.assertTrue(dual.delete());
+ Assert.assertTrue(dual.mkdir());
+ IOUtil.copyDirectoryTree(DUAL_DATA_DIR, dual);
+ qual = File.createTempFile("eib_qual", ".tmp");
+ Assert.assertTrue(qual.delete());
+ Assert.assertTrue(qual.mkdir());
+ IOUtil.copyDirectoryTree(DUAL_DATA_DIR, qual);
+ }
+
+ @AfterTest
+ private void tearDown() {
+ IOUtil.deleteDirectoryTree(basecallsDir);
+ IOUtil.deleteDirectoryTree(dual);
+ IOUtil.deleteDirectoryTree(qual);
+ }
+
+ @Test
+ public void testSingleEndWithBarcodeAtStart() throws Exception {
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "8B25T");
+ Assert.assertEquals(metricsFile.getMetrics().get(11).PERFECT_MATCHES, 1);
+ }
+
+ @Test
+ public void testSingleEndWithBarcodeAtEnd() throws Exception {
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "25T8B");
+ Assert.assertEquals(metricsFile.getMetrics().get(0).PERFECT_MATCHES, 5);
+ }
+
+ @Test
+ public void testPairedEndWithBarcodeOnFirstEnd() throws Exception {
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "25T8B25T");
+ Assert.assertEquals(metricsFile.getMetrics().get(0).PERFECT_MATCHES, 5);
+ }
+
+ @Test
+ public void testPairedEndWithBarcodeOnSecondEnd() throws Exception {
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(1, "25T25T8B");
+ Assert.assertEquals(metricsFile.getMetrics().get(12).PERFECT_MATCHES, 1);
+ }
+
+ @Test
+ public void testNonWritableOutputFile() throws Exception {
+ final File existingFile = new File(basecallsDir, "s_1_1101_barcode.txt.gz");
+ try {
+ existingFile.setReadOnly();
+ final String readStructure = "25T8B25T";
+ final int lane = 1;
+
+ final File metricsFile = File.createTempFile("eib.", ".metrics");
+ metricsFile.deleteOnExit();
+
+ final List<String> args = new ArrayList<String>(Arrays.asList(
+ "BASECALLS_DIR=" + basecallsDir.getPath(),
+ "LANE=" + lane,
+ "READ_STRUCTURE=" + readStructure,
+ "METRICS_FILE=" + metricsFile.getPath(),
+ "COMPRESS_OUTPUTS=true"
+ ));
+ for (final String barcode : BARCODES) {
+ args.add("BARCODE=" + barcode);
+ }
+ Assert.assertEquals(runPicardCommandLine(args), 4);
+ }
+ finally {
+ existingFile.setWritable(true);
+ }
+
+ }
+
+ /**
+ * 4 cases tested:
+ * * exact match to ACAGTG
+ * * inexact match within threshold to TGACCA
+ * * inexact match not within threshold to TGACCA
+ * * inexact match where the next match is too close to ACAGTG
+ * @throws Exception
+ */
+ @Test
+ public void testBarcodeMatching() throws Exception {
+ final int lane = 1;
+ final int barcodePosition = 26;
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> metricsFile = runIt(lane, "25T8B25T");
+
+ ExtractIlluminaBarcodes.BarcodeMetric metricOne = null;
+ ExtractIlluminaBarcodes.BarcodeMetric metricTwo = null;
+ ExtractIlluminaBarcodes.BarcodeMetric metricNoMatch = null;
+ for (final ExtractIlluminaBarcodes.BarcodeMetric metric : metricsFile.getMetrics()) {
+ if (metric.BARCODE.equals(BARCODES[0])) {
+ metricOne = metric;
+ } else if (metric.BARCODE.equals(BARCODES[2])) {
+ metricTwo = metric;
+ } else if (metric.BARCODE.equals("NNNNNNNN")) {
+ metricNoMatch = metric;
+ }
+ }
+ Assert.assertEquals(metricOne.PERFECT_MATCHES, 5);
+ Assert.assertEquals(metricOne.ONE_MISMATCH_MATCHES, 0);
+ Assert.assertEquals(metricOne.PF_READS, 3);
+ Assert.assertEquals(metricOne.READS, 5);
+
+ // one inexact match
+ Assert.assertEquals(metricTwo.READS, 4);
+ Assert.assertEquals(metricTwo.ONE_MISMATCH_MATCHES, 0);
+
+ Assert.assertEquals(metricNoMatch.READS, 140);
+ Assert.assertEquals(metricNoMatch.PF_READS, 112);
+
+ // Check the barcode files themselves
+ final File[] barcodeFiles = IOUtil.getFilesMatchingRegexp(basecallsDir, "s_" + lane + "_\\d{4}_barcode.txt");
+ Arrays.sort(barcodeFiles);
+
+ final BasicInputParser barcodeParser = new BasicInputParser(true, barcodeFiles);
+
+ // Exact match
+ String[] illuminaFields = barcodeParser.next();
+ Assert.assertEquals(illuminaFields[1], "Y");
+ Assert.assertEquals(illuminaFields[2], "CAACTCTC");
+
+ // Inexact match
+ illuminaFields = barcodeParser.next();
+ Assert.assertEquals(illuminaFields[1], "Y");
+ Assert.assertEquals(illuminaFields[2], "ACAGGTAT");
+
+ // Too many mismatches
+ illuminaFields = barcodeParser.next();
+ Assert.assertEquals(illuminaFields[1], "N");
+
+ barcodeParser.close();
+
+ // Tack on test of barcode-informed Illumina Basecall parsing
+ final ReadStructure rs = new ReadStructure("25T8B25T");
+ final IlluminaDataProviderFactory factory = new IlluminaDataProviderFactory(basecallsDir, lane, rs,
+ new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY),
+ IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.Barcodes);
+ testParsing(factory, rs, metricOne, barcodePosition);
+ }
+
+ @Test
+ public void testDualBarcodes() throws Exception {
+ final File metricsFile = File.createTempFile("dual.", ".metrics");
+ metricsFile.deleteOnExit();
+
+ final String[] args = new String[] {
+ "BASECALLS_DIR=" + dual.getAbsolutePath(),
+ "LANE=" + 1,
+ "METRICS_FILE=" + metricsFile.getPath(),
+ "READ_STRUCTURE=" + "25T8B8B25T",
+ "BARCODE=" + "CAATAGTCCGACTCTC"
+ };
+
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer> result = new MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer>();
+ result.read(new FileReader(metricsFile));
+ Assert.assertEquals(result.getMetrics().get(0).PERFECT_MATCHES, 1, "Got wrong number of perfect matches");
+ Assert.assertEquals(result.getMetrics().get(0).ONE_MISMATCH_MATCHES, 0, "Got wrong number of one-mismatch matches");
+ }
+
+ /**
+ * Testing the quality thresholding. Looking at a single barcode (ACAGTG) with a min quality of 25 and no mismatches
+ */
+ @Test(dataProvider = "qualityBarcodeData")
+ public void testQualityBarcodes(final int quality,
+ final int maxMismatches, final int perfectMatches, final int oneMismatch,
+ final String testName) throws Exception {
+ final File metricsFile = File.createTempFile("qual.", ".metrics");
+ metricsFile.deleteOnExit();
+
+ final String[] args = new String[] {
+ "BASECALLS_DIR=" + qual.getPath(),
+ "LANE=" + 1,
+ "READ_STRUCTURE=25T8B25T",
+ "METRICS_FILE=" + metricsFile.getPath(),
+ "MINIMUM_BASE_QUALITY=" + quality,
+ "MAX_MISMATCHES=" + maxMismatches,
+ "BARCODE=CAATAGTC"
+ };
+
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer> result = new MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer>();
+ result.read(new FileReader(metricsFile));
+ Assert.assertEquals(result.getMetrics().get(0).PERFECT_MATCHES, perfectMatches, "Got wrong number of perfect matches for test: '" + testName + "'");
+ Assert.assertEquals(result.getMetrics().get(0).ONE_MISMATCH_MATCHES, oneMismatch, "Got wrong number of one-mismatch matches for test: '" + testName + "'");
+ }
+
+ @DataProvider(name = "qualityBarcodeData")
+ public Object[][] getQualityTestData() {
+ return new Object[][] {
+ {16, 0, 1, 0, "Barcode has good quality, 1 match"},
+ {25, 0, 0, 0, "Barcode has quality failures, no matches"}
+ };
+ }
+
+ private void testParsing(final IlluminaDataProviderFactory factory, final ReadStructure readStructure, final ExtractIlluminaBarcodes.BarcodeMetric metricACAGTG, final int barcodePosition) {
+
+ int numReads = 0;
+
+ final IlluminaDataProvider dataProvider = factory.makeDataProvider();
+ while (dataProvider.hasNext()) {
+ final ClusterData cluster = dataProvider.next();
+
+ if(metricACAGTG.BARCODE.equals(cluster.getMatchedBarcode())) {
+ ++numReads;
+ }
+
+ Assert.assertEquals(cluster.getRead(readStructure.templates.getIndices()[0]).getQualities().length, barcodePosition - 1);
+ Assert.assertEquals(cluster.getRead(readStructure.templates.getIndices()[0]).getBases().length, barcodePosition - 1);
+ }
+ Assert.assertEquals(numReads, metricACAGTG.READS);
+ dataProvider.close();
+ }
+
+ private MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> runIt(final int lane, final String readStructure)
+ throws Exception {
+ final File metricsFile = File.createTempFile("eib.", ".metrics");
+ metricsFile.deleteOnExit();
+
+ final List<String> args = new ArrayList<String>(Arrays.asList(
+ "BASECALLS_DIR=" + basecallsDir.getPath(),
+ "LANE=" + lane,
+ "READ_STRUCTURE=" + readStructure,
+ "METRICS_FILE=" + metricsFile.getPath()
+ ));
+ for (final String barcode : BARCODES) {
+ args.add("BARCODE=" + barcode);
+ }
+ return runIt(args, metricsFile);
+ }
+
+ private MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> runIt(final List<String> args, final File metricsFile) throws Exception {
+ // Generate _barcode.txt files and metrics file.
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer> retval = new MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric,Integer>();
+ retval.read(new FileReader(metricsFile));
+ return retval;
+ }
+}
diff --git a/src/tests/java/picard/illumina/IlluminaBasecallsToFastqTest.java b/src/tests/java/picard/illumina/IlluminaBasecallsToFastqTest.java
new file mode 100644
index 0000000..953665d
--- /dev/null
+++ b/src/tests/java/picard/illumina/IlluminaBasecallsToFastqTest.java
@@ -0,0 +1,184 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.util.BufferedLineReader;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.LineReader;
+import htsjdk.samtools.util.StringUtil;
+import htsjdk.samtools.util.TestUtil;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.illumina.parser.ReadStructure;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class IlluminaBasecallsToFastqTest extends CommandLineProgramTest {
+
+ private static final File BASECALLS_DIR = new File("testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
+ private static final File DUAL_BASECALLS_DIR = new File("testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls");
+ private static final File TEST_DATA_DIR = new File("testdata/picard/illumina/25T8B25T/fastq");
+ private static final File DUAL_TEST_DATA_DIR = new File("testdata/picard/illumina/25T8B8B25T/fastq");
+
+ public String getCommandLineProgramName() {
+ return IlluminaBasecallsToFastq.class.getSimpleName();
+ }
+
+ @Test
+ public void testNonBarcoded() throws Exception {
+ final String suffix = ".1.fastq";
+ final File outputFastq1 = File.createTempFile("nonBarcoded.", suffix);
+ outputFastq1.deleteOnExit();
+ final String outputPrefix = outputFastq1.getAbsolutePath().substring(0, outputFastq1.getAbsolutePath().length() - suffix.length());
+ final File outputFastq2 = new File(outputPrefix + ".2.fastq");
+ outputFastq2.deleteOnExit();
+ final int lane = 1;
+ runPicardCommandLine(new String[]{
+ "BASECALLS_DIR=" + BASECALLS_DIR,
+ "LANE=" + lane,
+ "READ_STRUCTURE=25T8B25T",
+ "OUTPUT_PREFIX=" + outputPrefix,
+ "RUN_BARCODE=HiMom",
+ "MACHINE_NAME=machine1",
+ "FLOWCELL_BARCODE=abcdeACXX"
+ });
+ IOUtil.assertFilesEqual(outputFastq1, new File(TEST_DATA_DIR, "nonBarcoded.1.fastq"));
+ IOUtil.assertFilesEqual(outputFastq2, new File(TEST_DATA_DIR, "nonBarcoded.2.fastq"));
+ }
+
+ @Test
+ public void testMultiplexWithIlluminaReadNameHeaders() throws Exception {
+ final File outputDir = File.createTempFile("testMultiplexRH.", ".dir");
+ try {
+ outputDir.delete();
+ outputDir.mkdir();
+ outputDir.deleteOnExit();
+
+ final String filePrefix = "testMultiplexRH";
+ final File outputPrefix = new File(outputDir, filePrefix);
+
+ runPicardCommandLine(new String[]{
+ "BASECALLS_DIR=" + BASECALLS_DIR,
+ "LANE=" + 1,
+ "RUN_BARCODE=HiMom",
+ "READ_STRUCTURE=" + "25T8B25T",
+ "OUTPUT_PREFIX=" + outputPrefix.getAbsolutePath(),
+ "MACHINE_NAME=machine1",
+ "FLOWCELL_BARCODE=abcdeACXX",
+ "READ_NAME_FORMAT=" + IlluminaBasecallsToFastq.ReadNameFormat.ILLUMINA
+ });
+
+ final String[] filenames = new String[]{
+ filePrefix + ".1.fastq",
+ filePrefix + ".barcode_1.fastq"
+ };
+ for (final String filename : filenames) {
+ IOUtil.assertFilesEqual(new File(outputDir, filename), new File(TEST_DATA_DIR, filename));
+ }
+
+ } finally {
+ TestUtil.recursiveDelete(outputDir);
+ }
+ }
+
+ @Test
+ public void testDeMultiplexed() throws Exception {
+ runStandardTest(1, "multiplexedBarcode.", "mp_barcode.params", 1, "25T8B25T", BASECALLS_DIR, TEST_DATA_DIR);
+ }
+
+ @Test
+ public void testDualBarcodes() throws Exception {
+ runStandardTest(1, "dualBarcode.", "barcode_double.params", 2, "25T8B8B25T", DUAL_BASECALLS_DIR, DUAL_TEST_DATA_DIR);
+ }
+
+ /**
+ * This test utility takes a libraryParamsFile and generates output sam files through IlluminaBasecallsToFastq to compare against
+ * preloaded test data
+ *
+ * @param jobName
+ * @param libraryParamsFile
+ * @param concatNColumnFields
+ * @param readStructureString
+ * @throws Exception
+ */
+ private void runStandardTest(final int lane, final String jobName, final String libraryParamsFile,
+ final int concatNColumnFields, final String readStructureString, final File baseCallsDir,
+ final File testDataDir) throws Exception {
+ final File outputDir = File.createTempFile(jobName, ".dir");
+ try {
+ outputDir.delete();
+ outputDir.mkdir();
+ outputDir.deleteOnExit();
+ // Create barcode.params with output files in the temp directory
+ final File libraryParams = new File(outputDir, libraryParamsFile);
+ libraryParams.deleteOnExit();
+ final List<File> outputPrefixes = new ArrayList<File>();
+ final LineReader reader = new BufferedLineReader(new FileInputStream(new File(testDataDir, libraryParamsFile)));
+ final PrintWriter writer = new PrintWriter(libraryParams);
+ final String header = reader.readLine();
+ writer.println(header + "\tOUTPUT_PREFIX");
+ while (true) {
+ final String line = reader.readLine();
+ if (line == null) {
+ break;
+ }
+ final String[] fields = line.split("\t");
+ final File outputPrefix = new File(outputDir, StringUtil.join("", Arrays.copyOfRange(fields, 0, concatNColumnFields)));
+ outputPrefixes.add(outputPrefix);
+ writer.println(line + "\t" + outputPrefix);
+ }
+ writer.close();
+ reader.close();
+
+ runPicardCommandLine(new String[]{
+ "BASECALLS_DIR=" + baseCallsDir,
+ "LANE=" + lane,
+ "RUN_BARCODE=HiMom",
+ "READ_STRUCTURE=" + readStructureString,
+ "MULTIPLEX_PARAMS=" + libraryParams,
+ "MACHINE_NAME=machine1",
+ "FLOWCELL_BARCODE=abcdeACXX"
+ });
+
+ final ReadStructure readStructure = new ReadStructure(readStructureString);
+ for (final File outputSam : outputPrefixes) {
+ for (int i = 1; i <= readStructure.templates.length(); ++i) {
+ final String filename = outputSam.getName() + "." + i + ".fastq";
+ IOUtil.assertFilesEqual(new File(outputSam.getParentFile(), filename), new File(testDataDir, filename));
+ }
+ for (int i = 1; i <= readStructure.barcodes.length(); ++i) {
+ final String filename = outputSam.getName() + ".barcode_" + i + ".fastq";
+ IOUtil.assertFilesEqual(new File(outputSam.getParentFile(), filename), new File(testDataDir, filename));
+ }
+ }
+ } finally {
+ TestUtil.recursiveDelete(outputDir);
+ }
+ }
+}
diff --git a/src/tests/java/picard/illumina/IlluminaBasecallsToSamAdapterClippingTest.java b/src/tests/java/picard/illumina/IlluminaBasecallsToSamAdapterClippingTest.java
new file mode 100644
index 0000000..ac4f64f
--- /dev/null
+++ b/src/tests/java/picard/illumina/IlluminaBasecallsToSamAdapterClippingTest.java
@@ -0,0 +1,98 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+
+
+/**
+ * Run IlluminaBasecallsToSam on a sample tests, then sanity-check the generated SAM file
+ */
+public class IlluminaBasecallsToSamAdapterClippingTest extends CommandLineProgramTest {
+
+ private static final File TEST_DATA_DIR = new File("testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls");
+ private static final String ALIAS = "myalias";
+ private static final String RUN_BARCODE = "305PJAAXX080716";
+
+ public String getCommandLineProgramName() {
+ return IlluminaBasecallsToSam.class.getSimpleName();
+ }
+
+ /**
+ * Run IlluminaBasecallsToSam on a few test cases, and verify that results agree with hand-checked expectation.
+ */
+ @Test(dataProvider="data")
+ public void testBasic(final String LANE, final String readStructure) throws Exception {
+ // Create the SAM file from Gerald output
+ final File samFile = File.createTempFile("." + LANE + ".illuminaBasecallsToSam", ".sam");
+ samFile.deleteOnExit();
+ final String[] illuminaArgv = {
+ "BASECALLS_DIR=" + TEST_DATA_DIR,
+ "LANE=" + LANE,
+ "RUN_BARCODE=" + RUN_BARCODE,
+ "READ_STRUCTURE=" + readStructure,
+ "OUTPUT=" + samFile,
+ "ALIAS=" + ALIAS
+ };
+ Assert.assertEquals(runPicardCommandLine(illuminaArgv), 0);
+
+ System.out.println ("Ouput Sam file is in " + samFile.getAbsolutePath());
+
+ // Read the file and confirm it contains what is expected
+ final SamReader samReader = SamReaderFactory.makeDefault().open(samFile);
+
+ // look for clipped adaptor attribute in lane 3 PE (2) and in lane 6 (1) non-PE
+ int count = 0;
+ for (final SAMRecord record : samReader) {
+ if (record.getIntegerAttribute(ReservedTagConstants.XT) != null) {
+ count++;
+ if ((count == 1 || count == 2) && LANE.equals("2")){
+ Assert.assertEquals (114, (int)record.getIntegerAttribute(ReservedTagConstants.XT));
+ } else if (count == 1 || count == 2 && LANE.equals("1")) {
+ Assert.assertEquals(68, (int) record.getIntegerAttribute(ReservedTagConstants.XT));
+ }
+ }
+ }
+ samReader.close();
+ }
+
+ @DataProvider(name="data")
+ private Object[][] getIlluminaBasecallsToSamTestData(){
+ return new Object[][] {
+ {"1", "125T125T"},
+ {"2", "125T125T"},
+ };
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/tests/java/picard/illumina/IlluminaBasecallsToSamTest.java b/src/tests/java/picard/illumina/IlluminaBasecallsToSamTest.java
new file mode 100644
index 0000000..c9cc60e
--- /dev/null
+++ b/src/tests/java/picard/illumina/IlluminaBasecallsToSamTest.java
@@ -0,0 +1,168 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.illumina;
+
+import htsjdk.samtools.util.BufferedLineReader;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.LineReader;
+import htsjdk.samtools.util.StringUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Run IlluminaBasecallsToSam in various barcode & non-barcode modes
+ *
+ * @author alecw at broadinstitute.org
+ */
+public class IlluminaBasecallsToSamTest extends CommandLineProgramTest {
+
+ private static final File BASECALLS_DIR = new File("testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
+ private static final File DUAL_BASECALLS_DIR = new File("testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls");
+ private static final File TEST_DATA_DIR = new File("testdata/picard/illumina/25T8B25T/sams");
+ private static final File DUAL_TEST_DATA_DIR = new File("testdata/picard/illumina/25T8B8B25T/sams");
+
+ public String getCommandLineProgramName() {
+ return IlluminaBasecallsToSam.class.getSimpleName();
+ }
+
+ @Test
+ public void testTileNumberComparator() {
+ Assert.assertTrue(IlluminaBasecallsConverter.TILE_NUMBER_COMPARATOR.compare(100, 10) < 0, "");
+ Assert.assertTrue(IlluminaBasecallsConverter.TILE_NUMBER_COMPARATOR.compare(20, 200) > 0, "");
+ Assert.assertTrue(IlluminaBasecallsConverter.TILE_NUMBER_COMPARATOR.compare(10, 10) == 0, "");
+ }
+
+
+ @Test
+ public void testNonBarcoded() throws Exception {
+ final File outputBam = File.createTempFile("nonBarcoded.", ".sam");
+ outputBam.deleteOnExit();
+ final int lane = 1;
+
+ runPicardCommandLine(new String[]{
+ "BASECALLS_DIR=" + BASECALLS_DIR,
+ "LANE=" + lane,
+ "READ_STRUCTURE=25S8S25T",
+ "OUTPUT=" + outputBam,
+ "RUN_BARCODE=HiMom",
+ "SAMPLE_ALIAS=HiDad",
+ "LIBRARY_NAME=Hello, World"
+ });
+ IOUtil.assertFilesEqual(outputBam, new File(TEST_DATA_DIR, "nonBarcoded.sam"));
+ }
+
+ @Test
+ public void testMultiplexed() throws Exception {
+ runStandardTest(1, "multiplexedBarcode.", "barcode.params", 1, "25T8B25T", BASECALLS_DIR, TEST_DATA_DIR);
+ }
+
+ //Same as testMultiplexed except we use BARCODE_1 instead of BARCODE
+ @Test
+ public void testMultiplexedWithAlternateBarcodeName() throws Exception {
+ runStandardTest(1, "singleBarcodeAltName.", "multiplexed_positive_rgtags.params", 1, "25T8B25T", BASECALLS_DIR, TEST_DATA_DIR);
+ }
+
+ @Test
+ public void testDualBarcodes() throws Exception {
+ runStandardTest(1, "dualBarcode.", "barcode_double.params", 1, "25T8B8B25T", DUAL_BASECALLS_DIR, DUAL_TEST_DATA_DIR);
+ }
+
+ /**
+ * Ensures that a run missing a barcode from the parameters file throws an error.
+ *
+ * TODO: This testcase isn't broken, but can spawn an issue with FileChannelJDKBugWorkAround since it expects
+ * an exception to be thrown.
+ */
+ @Test(groups={"broken"})
+ public void testCorruptDataReturnCode() throws Exception {
+ boolean exceptionThrown = false;
+ try {
+ runStandardTest(9, "dualBarcode.", "negative_test.params", 2, "30T8B8B", BASECALLS_DIR, TEST_DATA_DIR);
+ } catch (Throwable e) {
+ exceptionThrown = true;
+ } finally {
+ Assert.assertTrue(exceptionThrown);
+ }
+ }
+
+ /**
+ * This test utility takes a libraryParamsFile and generates output sam files through IlluminaBasecallsToSam to compare against
+ * preloaded test data
+ *
+ * @param jobName
+ * @param libraryParamsFile
+ * @param concatNColumnFields
+ * @param readStructure
+ * @throws Exception
+ */
+ private void runStandardTest(final int lane, final String jobName, final String libraryParamsFile,
+ final int concatNColumnFields, final String readStructure,
+ final File baseCallsDir, final File testDataDir) throws Exception {
+ final File outputDir = File.createTempFile(jobName, ".dir");
+ outputDir.delete();
+ outputDir.mkdir();
+ outputDir.deleteOnExit();
+ // Create barcode.params with output files in the temp directory
+ final File libraryParams = new File(outputDir, libraryParamsFile);
+ libraryParams.deleteOnExit();
+ final List<File> samFiles = new ArrayList<File>();
+ final LineReader reader = new BufferedLineReader(new FileInputStream(new File(testDataDir, libraryParamsFile)));
+ final PrintWriter writer = new PrintWriter(libraryParams);
+ final String header = reader.readLine();
+ writer.println(header + "\tOUTPUT");
+ while (true) {
+ final String line = reader.readLine();
+ if (line == null) {
+ break;
+ }
+ final String[] fields = line.split("\t");
+ final File outputSam = new File(outputDir, StringUtil.join("", Arrays.copyOfRange(fields, 0, concatNColumnFields)) + ".sam");
+ outputSam.deleteOnExit();
+ samFiles.add(outputSam);
+ writer.println(line + "\t" + outputSam);
+ }
+ writer.close();
+ reader.close();
+
+ runPicardCommandLine(new String[]{
+ "BASECALLS_DIR=" + baseCallsDir,
+ "LANE=" + lane,
+ "RUN_BARCODE=HiMom",
+ "READ_STRUCTURE=" + readStructure,
+ "LIBRARY_PARAMS=" + libraryParams
+ });
+
+ for (final File outputSam : samFiles) {
+ IOUtil.assertFilesEqual(outputSam, new File(testDataDir, outputSam.getName()));
+ }
+ }
+}
diff --git a/src/tests/java/picard/illumina/IlluminaLaneMetricsCollectorTest.java b/src/tests/java/picard/illumina/IlluminaLaneMetricsCollectorTest.java
new file mode 100644
index 0000000..a986279
--- /dev/null
+++ b/src/tests/java/picard/illumina/IlluminaLaneMetricsCollectorTest.java
@@ -0,0 +1,76 @@
+package picard.illumina;
+
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.util.IOUtil;
+import picard.illumina.parser.ReadStructure;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;import java.lang.Exception;import java.lang.Object;import java.lang.String;
+
+/** @author mccowan */
+public class IlluminaLaneMetricsCollectorTest {
+ final static File TEST_DIRECTORY = new File("testdata/picard/illumina/IlluminaLaneMetricsCollectorTest");
+ final static File TILE_RUN_DIRECTORY = new File(TEST_DIRECTORY, "tileRuns");
+
+ private static File buildOutputFile(final File directory, final String prefix, final String extension) {
+ return new File(directory, String.format("%s.%s", prefix, extension));
+ }
+
+ @Test(dataProvider = "testLaneMetrics")
+ public void testWriteLaneMetrics(final String testRun) throws Exception {
+ final CollectIlluminaLaneMetrics clp = new CollectIlluminaLaneMetrics();
+ clp.OUTPUT_DIRECTORY = IOUtil.createTempDir("illuminaLaneMetricsCollectorTest", null);
+ clp.RUN_DIRECTORY = new File(TEST_DIRECTORY, testRun);
+ clp.OUTPUT_PREFIX = "test";
+ clp.READ_STRUCTURE = new ReadStructure("101T8B101T");
+ clp.doWork();
+
+ final File laneMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaLaneMetrics.getExtension());
+ final File canonicalOutputFile = buildOutputFile(TEST_DIRECTORY, testRun, IlluminaLaneMetrics.getExtension());
+
+ IOUtil.assertFilesEqual(canonicalOutputFile, laneMetricsFile);
+
+ IOUtil.deleteDirectoryTree(clp.OUTPUT_DIRECTORY);
+ }
+
+ @DataProvider(name = "testLaneMetrics")
+ public Object[][] testLaneMetricsDataProvider() {
+ return new Object[][] {
+ {"130321_SL-MAK_0035_FC000000000-A306B"},
+ {"130318_SL-HBB_0226_BFCC1WYMACXX"},
+ {"130401_SL-HAC_0022_BH07PBADXX"}
+ };
+ }
+
+ @Test(dataProvider = "testCollectIlluminaLaneMetrics")
+ public void testCollectIlluminaLaneMetrics(final String testRun, final ReadStructure readStructure) throws Exception {
+ final File runDirectory = new File(TILE_RUN_DIRECTORY, testRun);
+ final CollectIlluminaLaneMetrics clp = new CollectIlluminaLaneMetrics();
+ clp.OUTPUT_DIRECTORY = IOUtil.createTempDir("illuminaLaneMetricsCollectorTest", null);
+ clp.RUN_DIRECTORY = runDirectory;
+ clp.OUTPUT_PREFIX = "test";
+ clp.READ_STRUCTURE = readStructure;
+ clp.doWork();
+
+ final File phasingMetricsPhile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaPhasingMetrics.getExtension());
+ final File canonicalPhasingPhile = buildOutputFile(runDirectory, testRun, IlluminaPhasingMetrics.getExtension());
+ IOUtil.assertFilesEqual(canonicalPhasingPhile, phasingMetricsPhile);
+
+ final File laneMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaLaneMetrics.getExtension());
+ final File canonicalLaneFile = buildOutputFile(runDirectory, testRun, IlluminaLaneMetrics.getExtension());
+ IOUtil.assertFilesEqual(canonicalLaneFile, laneMetricsFile);
+ IOUtil.deleteDirectoryTree(clp.OUTPUT_DIRECTORY); }
+
+ @DataProvider(name = "testCollectIlluminaLaneMetrics")
+ public Object[][] testCollectIlluminaLaneMetricsDataProvider() {
+ return new Object[][] {
+ {"A7LE0", new ReadStructure("25T8B8B25T")},
+ {"C2MFAACXX", new ReadStructure("95T101T")},
+ {"H7BATADXX", new ReadStructure("76T8B76T")},
+ {"H7H7RADXX", new ReadStructure("101T8B8B101T")},
+ {"A67HY", new ReadStructure("8B8B")}
+ };
+ }
+}
diff --git a/src/tests/java/picard/illumina/ReadStructureTest.java b/src/tests/java/picard/illumina/ReadStructureTest.java
new file mode 100644
index 0000000..2081a4a
--- /dev/null
+++ b/src/tests/java/picard/illumina/ReadStructureTest.java
@@ -0,0 +1,179 @@
+package picard.illumina;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.illumina.parser.ReadDescriptor;
+import picard.illumina.parser.ReadStructure;
+import picard.illumina.parser.ReadType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+import static picard.illumina.parser.ReadType.*;
+
+public class ReadStructureTest {
+
+ //to make construction of lists more intelligible
+ public ReadDescriptor rd(final int length, final ReadType rt) {
+ return new ReadDescriptor(length, rt);
+ }
+
+ //Many of these readStructures would be non-sensical but check different test classes/combinations
+ @DataProvider(name="validReadStructures")
+ public Object[][] validReadStructures() {
+ return new Object[][] {
+ {"2T", makeList(rd(2, T)), 1, 0, 0},
+ {"1234B", makeList(rd(1234, B)), 0, 1, 0},
+ {Integer.MAX_VALUE + "S", makeList(rd(Integer.MAX_VALUE, S)), 0, 0, 1},
+
+ {"76T76T", makeList(rd(76, T), rd(76, T)), 2, 0, 0},
+ {"76T1B", makeList(rd(76, T), rd(1, B)), 1, 1, 0},
+ {"76B1T", makeList(rd(76, B), rd(1, T)), 1, 1, 0},
+ {"1S1B", makeList(rd(1, S), rd(1, B)), 0, 1, 1},
+ {"1T999S", makeList(rd(1, T), rd(999, S)), 1, 0, 1},
+
+ {"100T20T100T", makeList(rd(100, T), rd(20, T), rd(100, T)), 3, 0, 0},
+ {"2S50S10S", makeList(rd(2, S), rd(50, S), rd(10, S)), 0, 0, 3},
+ {"10T1B11T", makeList(rd(10, T), rd(1, B), rd(11, T)), 2, 1, 0},
+ {"201T13T111B", makeList(rd(201, T), rd(13, T), rd(111, B)), 2, 1, 0},
+ {"15B1T1T", makeList(rd(15, B), rd(1, T), rd(1, T)), 2, 1, 0},
+ {"99B7T6B", makeList(rd(99, B), rd(7, T), rd(6, B)), 1, 2, 0},
+ {"631B776S638T", makeList(rd(631, B), rd(776, S), rd(638, T)), 1, 1, 1},
+
+
+ {"3T7B60S2T", makeList(rd(3, T), rd(7, B), rd(60, S), rd(2, T)), 2, 1, 1},
+ {"20B9S100T1T", makeList(rd(20, B), rd(9, S), rd(100, T), rd(1, T)), 2, 1, 1},
+ {"33T42B9T81B", makeList(rd(33, T), rd(42, B), rd(9, T), rd(81, B)), 2, 2, 0},
+ {"28B56B13T123S", makeList(rd(28, B), rd(56, B), rd(13, T), rd(123,S)), 1, 2, 1},
+ {"92S8B8B32B", makeList(rd(92, S), rd(8, B), rd(8, B), rd(32, B)), 0, 3, 1},
+
+ {"2S88B7T8S9T9T84B100S2S4B3B", makeList(rd(2,S), rd(88,B), rd(7,T), rd(8,S), rd(9,T), rd(9,T), rd(84,B), rd(100,S), rd(2,S), rd(4,B), rd(3,B)), 3, 4, 4}
+ };
+ }
+
+ @DataProvider(name="invalidReadStructures")
+ public Object[][] invalidReadStructures() {
+ return new Object[][]{
+ {"", new ArrayList<ReadDescriptor>()},
+ {"0T", makeList(rd(0, T))},
+ {"-1T", makeList(rd(-1, T))},
+ {"0S" , makeList(rd(0, S))},
+ {"-1B", makeList(rd(-1, B))},
+ {"8C", null},
+ {"B5", null},
+ {"SS", null},
+ {"75TS", null},
+ {"8*T", null},
+ {"-66S1B", makeList(rd(-66, S), rd(1, B))},
+ {"-0T5B8C", null},
+ {"77T82B0S", makeList(rd(77, T), rd(82, B), rd(0, S))}
+ };
+ }
+
+ @DataProvider(name="invalidReadStructuresFromList")
+ public Object[][] invalidReadStructuresFromList() {
+ int numTests = 0;
+ for(final Object [] args : invalidReadStructures()) {
+ if(args[1] != null) ++numTests;
+ }
+
+ final Object [][] outObjs = new Object[numTests][2];
+
+ numTests = 0;
+ for(final Object [] args : invalidReadStructures()) {
+ if(args[1] != null) {
+ outObjs[numTests++] = args;
+ }
+ }
+
+ return outObjs;
+ }
+
+ @Test(dataProvider = "validReadStructures")
+ public void testValidStructuresFromString(final String rsString, final List<ReadDescriptor> descriptors, final int numTemplates, final int numBarcodes, final int numSkips) {
+ final ReadStructure readStructure = new ReadStructure(rsString);
+ testReadStructure(readStructure, rsString, descriptors, numTemplates, numBarcodes, numSkips);
+ }
+
+ @Test(dataProvider = "validReadStructures")
+ public void testValidStructuresFromList(final String rsString, final List<ReadDescriptor> descriptors, final int numTemplates, final int numBarcodes, final int numSkips) {
+ final ReadStructure readStructure = new ReadStructure(descriptors);
+ testReadStructure(readStructure, rsString, descriptors, numTemplates, numBarcodes, numSkips);
+ }
+
+ private void testReadStructure(final ReadStructure readStructure, final String structureString, final List<ReadDescriptor> descriptors, final int numTemplates, final int numBarcodes, final int numSkips) {
+ Assert.assertEquals(readStructure.toString(), structureString);
+
+ int totalCycles = 0;
+
+ int tIndex = 0;
+ int bIndex = 0;
+ int sIndex = 0;
+
+ for(int i = 0; i < descriptors.size(); i++) {
+ Assert.assertEquals(readStructure.descriptors.get(i), descriptors.get(i));
+ switch(readStructure.descriptors.get(i).type) {
+ case T:
+ Assert.assertEquals(i, readStructure.templates.getIndices()[tIndex++]);
+ break;
+ case B:
+ Assert.assertEquals(i, readStructure.barcodes.getIndices()[bIndex++]);
+ break;
+ case S:
+ Assert.assertEquals(i, readStructure.skips.getIndices()[sIndex++]);
+ break;
+ default:
+ Assert.fail("Unrecognized read type: " + readStructure.descriptors.get(i).type);
+ }
+ totalCycles += readStructure.descriptors.get(i).length;
+ }
+
+ Assert.assertEquals(readStructure.totalCycles, totalCycles);
+ Assert.assertEquals(readStructure.barcodes.length(), numBarcodes);
+ Assert.assertEquals(readStructure.templates.length(), numTemplates);
+ Assert.assertEquals(readStructure.skips.length(), numSkips);
+
+ }
+
+ @Test(dataProvider = "invalidReadStructures", expectedExceptions = IllegalArgumentException.class)
+ public void testInvalidReadStructureFromString(final String rsString, final List<ReadDescriptor> descriptors) {
+ final ReadStructure readStructure = new ReadStructure(rsString);
+ }
+
+ @Test(dataProvider = "invalidReadStructuresFromList", expectedExceptions = IllegalArgumentException.class)
+ public void testInvalidReadStructureFromList(final String rsString, final List<ReadDescriptor> descriptors) {
+ final ReadStructure readStructure = new ReadStructure(descriptors);
+ }
+
+ @DataProvider(name="substructuresToReadStructureData")
+ public Object [][] substructureToReadStructureData() {
+ return new Object[][] {
+ {new ReadStructure("10T10T").templates, "10T10T" },
+ {new ReadStructure("10T8B10T").nonSkips, "10T8B10T"},
+ {new ReadStructure("8S10T8B8S10T").nonSkips, "10T8B10T"},
+ {new ReadStructure("10T8S8S10T").skips, "8S8S" },
+ {new ReadStructure("8B").barcodes, "8B" }
+ };
+ }
+
+ @Test(dataProvider = "substructuresToReadStructureData")
+ public void testSubstructureToReadStructure(final ReadStructure.Substructure substructure, final String outputRs) {
+ Assert.assertEquals(substructure.toReadStructure().toString(), outputRs);
+ }
+
+ @DataProvider(name="substructureToReadStructureNegativeData")
+ public Object[][] substructureToReadStructureNegativeData() {
+ return new Object[][] {
+ {new ReadStructure("10T").barcodes },
+ {new ReadStructure("10S").nonSkips },
+ {new ReadStructure("10S8B").templates},
+ };
+ }
+
+ @Test(dataProvider = "substructureToReadStructureNegativeData", expectedExceptions = IllegalArgumentException.class)
+ public void testSubstructureToReadStructure(final ReadStructure.Substructure substructure) {
+ substructure.toReadStructure().toString();
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/BclParserTest.java b/src/tests/java/picard/illumina/parser/BclParserTest.java
new file mode 100644
index 0000000..cb631ad
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/BclParserTest.java
@@ -0,0 +1,464 @@
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import static picard.illumina.parser.BinTdUtil.*;
+
+public class BclParserTest {
+ public static final File TEST_DATA_DIR = new File("testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001");
+ public static final File MULTI_TILE_DATA_DIR = new File("/seq/tng/jcarey/testdata/NextSeq/Data/Intensities/BaseCalls/L001");
+ public static final String READ_STRUCTURE = "25T8B25T";
+ public static final String READ_STRUCTURE_WSKIPS = "25S8B25S";
+ public static final String READ_STRUCTURE_WSKIPS_PARTIAL = "10T5S10T8B5T20S";
+ public static final String READ_STRUCTURE_WSKIPS_BAD = "10T5S10T2B4S2B5T20S";
+ public static final int[] READ_LENGTHS = new int[]{25, 8, 25};
+ public static final int LANE = 1;
+ public static final IlluminaDataType DATA_TYPES[] = {IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores};
+ public static final int TILE_SIZES = 60;
+
+
+ public static Integer[] boxArr(final int[] ints) {
+ final Integer[] boxArr = new Integer[ints.length];
+ for (int i = 0; i < boxArr.length; i++) {
+ boxArr[i] = ints[i];
+ }
+
+ return boxArr;
+ }
+
+ @DataProvider(name = "tileMaps")
+ public Object[][] getTileMaps() {
+ return new Object[][]{
+ //TILES, NUM_CLUSTER TO BE READ, SEEK AT THIS READ, INDEX TO TILETOSEEK, ORDERED TILE INDEX (FOR OUT OF ORDER TILES)
+ {new int[]{1101, 1201, 2101}, 180, -1, -1, -1},
+ {new int[]{1101, 2101, 1201}, 180, -1, -1, -1},
+ {new int[]{2101, 1201}, 120, -1, -1, -1},
+ {new int[]{1101, 2101}, 120, -1, -1, -1},
+ {new int[]{1101}, 60, -1, -1, -1},
+
+ //Cases with seeking
+ {new int[]{1101, 1201, 2101}, 206, 25, 0, 0},
+ {new int[]{1101, 2101, 1201}, 206, 25, 0, 0},
+ {new int[]{2101, 1201}, 80, 19, 0, 1},
+ {new int[]{1101, 2101}, 156, 35, 0, 0},
+ {new int[]{1101}, 66, 5, 0, 0}
+ };
+ }
+
+ @DataProvider(name = "multiTileMaps")
+ public Object[][] getMultiTileMaps() {
+ return new Object[][]{
+ //TILES, NUM_CLUSTER TO BE READ, SEEK AT THIS READ, INDEX TO TILETOSEEK, ORDERED TILE INDEX (FOR OUT OF ORDER TILES)
+ {new int[]{11101, 11102, 11103}, 341292, -1, -1, -1}
+ };
+ }
+
+
+ public void compareClusterToBclData(final ClusterData cluster, final BclData bclData, final int clusterNum, final int countNum) {
+ final byte[][] bases = bclData.getBases();
+ final byte[][] qualities = bclData.getQualities();
+
+ Assert.assertEquals(bases.length, cluster.getNumReads(), "At cluster num " + clusterNum);
+ Assert.assertEquals(qualities.length, cluster.getNumReads(), "At cluster num " + clusterNum);
+
+ final StringBuilder baseBuilder = new StringBuilder();
+ final StringBuilder qualBuilder = new StringBuilder();
+ final StringBuilder barcode = new StringBuilder();
+ baseBuilder.append("new byte[]{");
+ for (int i = 0; i < bases.length; i++) {
+ final byte[] subBase = bases[i];
+ final byte[] subQual = qualities[i];
+ for (int j = 0; j < subBase.length; j++) {
+ if ((char) subBase[j] == '.') {
+ baseBuilder.append('P');
+ } else {
+ baseBuilder.append((char) subBase[j]);
+ }
+ baseBuilder.append(",");
+ qualBuilder.append(subQual[j]);
+ qualBuilder.append(",");
+ if (i == 1) {
+ if ((char) subBase[j] == '.') {
+ barcode.append('P');
+ } else {
+ barcode.append((char) subBase[j]);
+ }
+ }
+ }
+ }
+ baseBuilder.deleteCharAt(baseBuilder.length() - 1);
+ qualBuilder.deleteCharAt(qualBuilder.length() - 1);
+ baseBuilder.append("},\n new byte[]{");
+ baseBuilder.append(qualBuilder.toString());
+ baseBuilder.append("},\n \"");
+ baseBuilder.append(barcode.toString());
+ baseBuilder.append("\"");
+
+ for (int i = 0; i < cluster.getNumReads(); i++) {
+ if (!Arrays.equals(bases[i], cluster.getRead(i).getBases())) {
+ System.out.println(cluster.getLane() + " : " + cluster.getTile() + " : " + clusterNum);
+ System.out.println(baseBuilder.toString());
+ }
+ Assert.assertEquals(bases[i], cluster.getRead(i).getBases(), " Bases differ for read " + i + " at cluster num " + clusterNum + " at cluster count " + countNum);
+ Assert.assertEquals(qualities[i], cluster.getRead(i).getQualities(), " Qualities differ for read " + i + " at cluster num " + clusterNum + " at cluster count " + countNum);
+ }
+ }
+
+ public void fullBclParserTestImpl(final File dir, final String readStructure, final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex,
+ final boolean multiTile) {
+ final ReadStructure rs = new ReadStructure(readStructure);
+ final OutputMapping outputMapping = new OutputMapping(rs);
+ final IlluminaFileUtil util = new IlluminaFileUtil(dir.getParentFile(), LANE);
+ final PerTilePerCycleFileUtil bclFileUtil = (PerTilePerCycleFileUtil) util.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Bcl);
+ final MultiTileBclFileUtil multiTileBclFileUtil = (MultiTileBclFileUtil) util.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.MultiTileBcl);
+
+
+ final List<Integer> tileIntegers = new ArrayList<Integer>();
+ for (final int tile : tiles) {
+ tileIntegers.add(tile);
+ }
+
+ final BclParser bclParser;
+ if(multiTile){
+ final File bci = new File(MULTI_TILE_DATA_DIR, "s_" + LANE + ".bci");
+ bclParser = new MultiTileBclParser(dir, LANE, multiTileBclFileUtil.getFiles(tileIntegers, outputMapping.getOutputCycles()),
+ outputMapping, true, new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY),
+ new TileIndex(bci));
+ }
+ else{
+ bclParser = new BclParser(dir, LANE, bclFileUtil.getFiles(tileIntegers, outputMapping.getOutputCycles()),
+ outputMapping, new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY));
+ }
+
+
+ final Map<Integer, ClusterData> testData = BinTdUtil.clusterData(LANE, Arrays.asList(boxArr(tiles)), readStructure, DATA_TYPES);
+
+ int count = 0;
+ int readNum = 0;
+ while (bclParser.hasNext()) {
+ final BclData bclData = bclParser.next();
+ if (testData.containsKey(readNum)) {
+ compareClusterToBclData(testData.get(readNum), bclData, readNum, count);
+ }
+
+ if (count == seekAfter) {
+ bclParser.seekToTile(tiles[newTileIndex]);
+ readNum = (orderedTileIndex * TILE_SIZES);
+ } else {
+ readNum++;
+ }
+ count++;
+ }
+ Assert.assertEquals(count, size);
+ bclParser.close();
+ }
+
+ public static void deleteBclFiles(final File laneDirectory, final String readStructure) {
+ final ReadStructure rs = new ReadStructure(readStructure);
+ int index = 1;
+ for (final ReadDescriptor rd : rs.descriptors) {
+ if (rd.type == ReadType.S) {
+ for (int i = index; i < index + rd.length; i++) {
+ final File cycleDir = new File(laneDirectory, "C" + i + ".1");
+ final File[] cycleFiles = cycleDir.listFiles();
+ for (final File toDelete : cycleFiles) {
+ if (!toDelete.delete()) {
+ throw new RuntimeException("Couldn't delete file " + toDelete.getAbsolutePath());
+ }
+ }
+ }
+ }
+
+ index += rd.length;
+ }
+ }
+
+ @Test(dataProvider = "tileMaps")
+ public void fullBclParserTest(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
+ fullBclParserTestImpl(TEST_DATA_DIR, READ_STRUCTURE, tiles, size, seekAfter, newTileIndex, orderedTileIndex, false);
+ }
+
+ //@Test(dataProvider = "multiTileMaps")
+ public void fullMTBclParserTest(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
+ fullBclParserTestImpl(MULTI_TILE_DATA_DIR, READ_STRUCTURE, tiles, size, seekAfter, newTileIndex, orderedTileIndex, true);
+ }
+
+
+ @Test(dataProvider = "tileMaps")
+ public void fullBclParserTestWSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
+ fullBclParserTestImpl(TEST_DATA_DIR, READ_STRUCTURE_WSKIPS, tiles, size, seekAfter, newTileIndex, orderedTileIndex, false);
+ }
+
+ @Test(dataProvider = "tileMaps")
+ public void fullBclParserTestWDeletedSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
+ fullBclParserTestWDeletedSkipsImpl(tiles, size, seekAfter, newTileIndex, orderedTileIndex, READ_STRUCTURE_WSKIPS);
+ }
+
+ @Test(dataProvider = "tileMaps")
+ public void fullBclParserTestWPartiallyDeletedSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
+ fullBclParserTestWDeletedSkipsImpl(tiles, size, seekAfter, newTileIndex, orderedTileIndex, READ_STRUCTURE_WSKIPS_PARTIAL);
+ }
+
+ @Test(dataProvider = "tileMaps", expectedExceptions = RuntimeException.class)
+ public void fullBclParserTestWBadDeletedSkips(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex) {
+ fullBclParserTestWDeletedSkipsImpl(tiles, size, seekAfter, newTileIndex, orderedTileIndex, READ_STRUCTURE_WSKIPS_BAD);
+ }
+
+ public void fullBclParserTestWDeletedSkipsImpl(final int[] tiles, final int size, final int seekAfter, final int newTileIndex, final int orderedTileIndex, final String readStructure) {
+ final File basecallDir = IOUtil.createTempDir("bclParserTest", "BaseCalls");
+
+ Exception exc = null;
+ try {
+ final File l001 = new File(basecallDir, "L001");
+ if (!l001.mkdir()) {
+ throw new RuntimeException("Couldn't make lane dir " + l001.getAbsolutePath());
+ }
+
+ copyBcls(TEST_DATA_DIR, l001);
+ deleteBclFiles(l001, readStructure);
+ fullBclParserTestImpl(l001, READ_STRUCTURE_WSKIPS, tiles, size, seekAfter, newTileIndex, orderedTileIndex, false);
+ } catch (final Exception thrExc) {
+ exc = thrExc;
+ } finally {
+ IOUtil.deleteDirectoryTree(basecallDir);
+ }
+ if (exc != null) {
+ if (exc.getClass() == PicardException.class) {
+ throw new PicardException(exc.getMessage());
+ }
+ throw new RuntimeException(exc);
+ }
+ }
+
+ //Custom copy function to avoid copying .svn files etc...
+ public static void copyBcls(final File srcLaneDir, final File dstDir) {
+ final File[] listFiles = srcLaneDir.listFiles();
+
+ for (final File dir : listFiles) {
+ if (dir.isDirectory()) {
+ File cycleDir = null;
+
+ for (final File file : dir.listFiles()) {
+ if (file.getName().endsWith(".bcl")) {
+ if (cycleDir == null) {
+ cycleDir = new File(dstDir, dir.getName());
+ if (!cycleDir.mkdir()) {
+ throw new RuntimeException("Couldn't make directory (" + cycleDir.getAbsolutePath() + ")");
+ }
+ }
+
+ IOUtil.copyFile(file, new File(cycleDir, file.getName()));
+ }
+ }
+ }
+ }
+ }
+
+
+ //Helper byte [] tuple for EAMSS testing
+ class BasesAndQuals {
+ public final byte[] bases;
+ public final byte[] quals;
+ public final byte[] maskedQuals;
+
+ public BasesAndQuals(final byte[] bases, final byte[] quals, final Integer maskStart) {
+ this.bases = bases;
+ this.quals = quals;
+ this.maskedQuals = qualsMaskedFrom(maskStart);
+ }
+
+ private byte[] qualsMaskedFrom(final Integer maskStart) {
+ final byte[] maskedQuals = Arrays.copyOf(quals, quals.length);
+ if (maskStart != null) {
+ for (int i = maskStart; i < maskedQuals.length; i++) {
+ maskedQuals[i] = BclParser.MASKING_QUALITY;
+ }
+ }
+ return maskedQuals;
+ }
+
+ public String toString() {
+ return "BasesAndQuals( " + basesToString() + ", " + qualsToString(quals) + ", " + qualsToString(maskedQuals) + ")";
+ }
+
+ public String basesToString() {
+ final StringBuilder sb = new StringBuilder(bases.length);
+ for (final byte base : bases) {
+ switch (base) {
+ case A:
+ sb.append("A ");
+ break;
+ case C:
+ sb.append("C ");
+ break;
+ case G:
+ sb.append("G ");
+ break;
+ case T:
+ sb.append("T ");
+ break;
+ case P:
+ sb.append(". ");
+ break;
+
+ default:
+ throw new RuntimeException("THIS SHOULD NOT HAPPEN! Bad byte in bases!");
+ }
+ }
+
+ return sb.toString();
+ }
+
+ public String qualsToString(final byte[] qualsToConvert) {
+
+ final StringBuilder sb = new StringBuilder(bases.length);
+ for (final byte qual : qualsToConvert) {
+ sb.append(String.valueOf((int) qual));
+ sb.append(",");
+ }
+
+ return sb.toString();
+ }
+ }
+
+ @DataProvider(name = "eamssDataNo10GSeries")
+ public Object[][] eamssDataNo10GSeries() {
+
+ return new Object[][]{
+ //Non-masking cases
+
+ //tally very negative, 9G's
+ {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
+ new byte[]{13, 7, 35, 32, 31, 33, 31, 26, 29},
+ null)},
+
+ //tally barely negative
+ {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
+ new byte[]{13, 7, 35, 26, 18, 19, 35, 8, 33},
+ null)},
+
+ //Reaches 0, A stretch of more than 10 other types of bases
+ {new BasesAndQuals(new byte[]{A, C, C, C, C, C, C, C, C, C, C, C, T, G, G, C, T, A, A},
+ new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 19, 7, 6, 5, 35, 2, 33, 22, 18, 16, 25},
+ null)},
+
+ //Stays at 0, Stretches of G's Separated
+ {new BasesAndQuals(new byte[]{T, G, G, G, G, G, G, G, P, P, G, G, G, G, G, G, G, T, A, A, G, G, G},
+ new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 2, 2, 6, 5, 35, 2, 33, 22, 18, 16, 25, 33, 32, 16, 18},
+ null)},
+
+ //shorter
+ {new BasesAndQuals(new byte[]{T, A, C},
+ new byte[]{25, 16, 16},
+ null)},
+
+ //Longer
+ {new BasesAndQuals(new byte[]{T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A, T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A},
+ new byte[]{25, 16, 16, 33, 22, 2, 2, 33, 35, 3, 31, 38, 22, 19, 25, 16, 16, 31, 30, 2, 2, 33, 26, 3, 31, 38, 22, 19, 2, 2, 30, 27, 28, 16, 2, 2, 30, 16, 19, 21, 22, 17, 19, 16, 16, 16},
+ null)},
+
+
+ //Masking-Cases
+
+ //tally very positive, 9Gs X - Mask From here
+ {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
+ new byte[]{13, 7, 35, 32, 2, 16, 33, 14, 19},
+ 7)},
+
+ //tally barely negative X - Mask from here
+ {new BasesAndQuals(new byte[]{G, G, G, G, G, G, G, G, G},
+ new byte[]{13, 7, 35, 33, 18, 2, 6, 8, 33},
+ 4)},
+ //Reaches 0, A stretch of more than 10 other types of bases X - Mask From here
+ {new BasesAndQuals(new byte[]{A, C, C, C, C, C, C, C, C, C, C, C, T, G, G, C, T, A, A},
+ new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 19, 32, 33, 5, 8, 2, 2, 2, 33, 16, 25},
+ 11)},
+ //Stays at 0, Stretches of G's Separated X- Mask from here
+ {new BasesAndQuals(new byte[]{T, G, G, G, G, G, G, G, P, P, G, G, G, G, G, G, G, T, A, A, G, G, G},
+ new byte[]{7, 8, 33, 7, 2, 33, 16, 17, 2, 2, 6, 5, 35, 2, 33, 30, 13, 16, 7, 2, 2, 16, 18},
+ 16)},
+ //shorter X - Mask from here
+ {new BasesAndQuals(new byte[]{T, A, C},
+ new byte[]{2, 11, 13},
+ 0)},
+ //Longer X- Mask from here
+ {new BasesAndQuals(new byte[]{T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A, T, A, C, G, G, P, P, T, C, C, C, C, T, T, T, G, G, G, A, T, G, C, A},
+ new byte[]{25, 16, 16, 33, 22, 2, 2, 33, 35, 3, 31, 38, 22, 19, 25, 16, 16, 31, 30, 2, 2, 33, 26, 3, 31, 38, 22, 19, 2, 2, 30, 27, 28, 16, 2, 2, 30, 16, 19, 21, 22, 2, 19, 16, 2, 2},
+ 26)}
+ };
+ }
+
+ /** For more information on EAMSS check BclParser and the large comment above runEamssForReadInPlace * */
+ @DataProvider(name = "eamssDataWithGSeries")
+ public Object[][] eamssTestDat() {
+ return new Object[][]{
+
+ //9 G's followed by tally max X - Mask from here
+ {new BasesAndQuals(new byte[]{A, C, G, G, T, G, G, G, G, G, G, G, G, G, A, C, T},
+ new byte[]{7, 8, 33, 7, 12, 33, 16, 17, 2, 2, 32, 35, 35, 35, 2, 15, 9},
+ 5)},
+ //9 G's surpassed by tally max X - Mask from here
+ {new BasesAndQuals(new byte[]{A, C, G, G, T, G, G, G, G, G, G, G, G, G, A, C, T},
+ new byte[]{7, 8, 2, 7, 2, 2, 16, 17, 2, 2, 32, 35, 35, 35, 2, 15, 9},
+ 0)},
+ //10 G's ending before tally max X - Mask from here
+ {new BasesAndQuals(new byte[]{A, C, G, G, T, G, G, G, G, G, G, G, G, G, A, C, T},
+ new byte[]{7, 8, 2, 7, 2, 2, 16, 17, 2, 2, 32, 35, 35, 35, 33, 15, 9},
+ 15)},
+ //10 G's ending on tally max X - Mask from here Is this wrong?
+ {new BasesAndQuals(new byte[]{A, C, C, G, C, C, G, G, G, G, G, G, G, G, G, G, T, T, A},
+ new byte[]{33, 31, 29, 32, 28, 27, 30, 18, 18, 18, 18, 19, 19, 19, 33, 18, 9, 9, 19},
+ 6)},
+ //10 G's no masking
+ {new BasesAndQuals(new byte[]{A, C, C, G, C, C, G, G, G, G, G, G, G, G, G, G, T, T, A},
+ new byte[]{33, 31, 29, 32, 28, 27, 30, 18, 18, 18, 18, 19, 19, 19, 33, 18, 33, 32, 34},
+ null)},
+ //10 G' with an exception X - Mask from here
+ {new BasesAndQuals(new byte[]{A, C, C, G, C, C, G, G, G, G, A, G, G, G, G, G, T, T, A},
+ new byte[]{33, 31, 29, 32, 28, 27, 30, 18, 18, 18, 18, 19, 19, 19, 33, 18, 9, 9, 19},
+ 6)},
+ //longer than 10 G's X - Mask from here
+ {new BasesAndQuals(new byte[]{A, C, G, G, G, C, G, G, G, G, G, G, G, G, G, G, T, T, A},
+ new byte[]{33, 31, 29, 32, 28, 16, 33, 18, 18, 18, 18, 19, 19, 19, 33, 18, 3, 9, 19},
+ 2)},
+ //longer than 10 G's X - Mask from here
+ {new BasesAndQuals(new byte[]{A, C, G, G, C, C, G, G, G, G, G, G, G, G, G, G, G, G, G},
+ new byte[]{33, 31, 29, 32, 28, 16, 33, 18, 18, 18, 18, 19, 19, 19, 33, 34, 33, 33, 3},
+ 6)},
+ //longer than 10 G's
+ {new BasesAndQuals(new byte[]{A, C, G, G, C, C, G, G, G, G, G, G, G, G, G, G, G, G, G, T, A, C, T, T, G, G, G, G, G, G, G, G, G, G, G, G, G},
+ new byte[]{33, 31, 29, 32, 28, 16, 33, 18, 18, 18, 18, 19, 19, 19, 33, 34, 33, 33, 3, 33, 34, 2, 4, 8, 33, 7, 35, 15, 16, 31, 30, 38, 16, 15, 22, 29, 25},
+ null)}
+ };
+ }
+
+ public void testEamss(final BasesAndQuals bq) {
+ final byte[] bases = Arrays.copyOf(bq.bases, bq.bases.length);
+ final byte[] quals = Arrays.copyOf(bq.quals, bq.quals.length);
+
+ BclParser.runEamssForReadInPlace(bases, quals);
+ Assert.assertEquals(bases, bq.bases);
+ Assert.assertEquals(quals, bq.maskedQuals);
+ }
+
+ @Test(dataProvider = "eamssDataNo10GSeries")
+ public void eamssParsingTestNoGSeries(final BasesAndQuals bq) {
+ testEamss(bq);
+ }
+
+ @Test(dataProvider = "eamssDataWithGSeries")
+ public void eamssParsingTestWithGSeries(final BasesAndQuals bq) {
+ testEamss(bq);
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/BinTdUtil.java b/src/tests/java/picard/illumina/parser/BinTdUtil.java
new file mode 100644
index 0000000..b2ed224
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/BinTdUtil.java
@@ -0,0 +1,312 @@
+package picard.illumina.parser;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+
+//Illumina Dir Test Data
+public class BinTdUtil {
+ public static final File IntensitiesDir = new File("testdata/picard/illumina/CompleteIlluminaDir/Intensities/");
+ public static final File basecallDir = new File("testdata/picard/illumina/CompleteIlluminaDir/Intensities/BaseCalls");
+
+ public static final String ltStr(final int lane, final int tile) {
+ return "s_" + lane + "_" + tile;
+ }
+
+ public static final byte A = (byte) 65;
+ public static final byte C = (byte) 67;
+ public static final byte G = (byte) 71;
+ public static final byte T = (byte) 84;
+ public static final byte P = (byte) 46; //dot
+ public static final Map<String, List<ClusterData>> goldData = new HashMap<String, List<ClusterData>>();
+ public static final Map<String, List<Integer>> goldIndices = new HashMap<String, List<Integer>>();
+ public static final Map<String, Integer> goldSizes = new HashMap<String, Integer>();
+
+ static {
+ int lane = 1;
+ int tile = 1101;
+ goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
+ goldData.put(ltStr(lane, tile), makeList(
+ makeCd(lane, tile, 1140, 2120, true,
+ new byte[]{P, C, C, C, C, A, A, C, A, T, T, C, T, A, A, T, T, A, T, G, C, C, T, C, A, C, A, A, C, T, C, T, C, T, T, T, T, T, T, T, T, T, T, T, T, T, A, A, C, T, T, T, G, C, A, A, A, T},
+ new byte[]{2, 16, 25, 33, 35, 37, 37, 35, 39, 37, 37, 35, 37, 40, 41, 41, 41, 40, 40, 41, 40, 40, 40, 40, 40, 31, 31, 31, 35, 35, 37, 35, 37, 31, 31, 31, 35, 35, 35, 35, 35, 39, 39, 39, 39, 37, 33, 31, 24, 37, 39, 40, 31, 33, 37, 39, 31, 31},
+ "CAACTCTC"),
+ makeCd(lane, tile, 1047, 2122, false,
+ new byte[]{P,C,T,A,A,P,G,P,A,C,T,P,T,G,P,G,T,G,T,G,C,P,P,P,P,P,P,P,A,P,P,P,P,P,P,T,C,A,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,15,26,31,31,2,19,2,18,31,31,2,18,31,2,17,27,31,31,31,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1069, 2159, true,
+ new byte[]{T,C,C,C,T,T,A,C,C,A,T,C,A,A,A,T,C,A,A,T,T,G,P,C,C,G,T,C,C,A,C,A,G,G,A,C,G,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{34,34,34,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,2,18,32,31,33,33,37,37,37,37,37,27,27,27,31,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ "GTCCACAG"),
+ makeCd(lane, tile, 1175, 2197, true,
+ new byte[]{C,C,C,C,T,G,A,G,G,A,C,A,C,C,A,T,C,C,C,A,C,T,C,C,A,C,C,A,A,C,A,T,T,A,A,G,A,G,C,T,G,G,G,G,A,A,C,A,T,C,C,A,G,A,A,A,G,G},
+ new byte[]{34,34,34,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,41,41,41,34,34,34,37,37,37,37,37,33,34,31,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,41,41,41},
+ "CCAACATT"),
+ makeCd(lane, tile, 1048, 2197, false,
+ new byte[]{P,C,T,C,C,P,G,P,T,C,A,P,C,A,P,G,T,G,G,A,G,P,P,P,P,P,P,P,C,P,P,P,P,P,P,G,T,G,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,15,26,30,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null)
+ )
+ );
+ goldSizes.put(ltStr(lane, tile), 60);
+
+ tile = 1201;
+ goldIndices.put(ltStr(lane, tile), makeList(0, 1, 18, 19));
+ goldData.put(ltStr(lane, tile), makeList(
+ makeCd(lane, tile, 1187, 2100, true,
+ new byte[]{P,G,C,G,G,T,A,A,T,T,C,C,A,G,C,T,C,C,A,A,T,A,G,C,G,T,A,T,C,T,G,C,C,A,A,A,A,A,A,G,A,G,C,C,C,G,C,A,T,T,G,C,C,G,A,G,A,C},
+ new byte[]{2,16,25,33,33,17,31,35,39,39,37,39,39,40,40,40,40,39,39,40,40,38,39,38,38,34,34,34,37,37,37,37,37,28,27,28,26,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ "TATCTGCC"),
+ makeCd(lane, tile, 1045, 2105, false,
+ new byte[]{P,T,A,A,A,G,A,G,A,A,A,T,C,A,A,G,A,A,T,A,C,T,A,T,T,C,T,G,T,A,A,T,C,P,T,T,T,T,T,T,T,T,T,T,P,P,T,T,T,T,T,T,T,T,T,T,T,T},
+ new byte[]{2,12,19,31,30,7,31,8,31,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,16,16,16,17,31,32,2,2,2,15,26,31,31,31,31,31,31,31,30,2,2,15,25,30,30,30,30,30,30,30,30,28,27},
+ "CTGTAATC"),
+ makeCd(lane, tile, 1159, 2179, false,
+ new byte[]{G,T,T,A,G,C,A,C,A,G,A,T,A,T,T,G,G,A,T,G,A,G,T,G,A,A,A,A,A,A,A,A,A,T,T,T,T,T,T,T,T,T,A,T,T,T,T,T,C,T,A,A,A,T,A,C,T,T},
+ new byte[]{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,28,28,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1103, 2184, true,
+ new byte[]{G,T,A,A,G,A,A,C,T,A,C,C,C,T,G,G,G,T,C,C,C,C,G,T,G,T,T,G,T,C,T,A,T,A,G,A,A,G,T,T,T,C,A,G,A,A,T,T,G,T,G,G,C,C,C,C,A,T},
+ new byte[]{31,31,33,37,37,37,37,37,39,39,39,39,39,41,41,41,41,38,40,41,41,41,41,39,40,31,34,34,37,37,37,37,37,33,31,33,37,37,35,36,37,39,39,39,39,39,41,41,41,38,39,40,41,41,41,41,41,40},
+ "TTGTCTAT")
+ ));
+ goldSizes.put(ltStr(lane, tile), 60);
+
+ tile = 2101;
+ goldIndices.put(ltStr(lane, tile), makeList(7, 15, 16, 19));
+ goldData.put(ltStr(lane, tile), makeList(
+ makeCd(lane, tile, 1123, 2095, true,
+ new byte[]{P,T,G,G,A,C,A,A,C,A,T,G,T,T,C,G,A,G,A,G,C,T,A,C,A,C,A,G,C,G,G,T,A,T,C,C,G,C,C,T,C,C,A,G,C,T,T,C,A,G,C,T,T,C,T,C,C,T},
+ new byte[]{2,16,28,33,33,35,35,35,37,37,37,37,35,38,37,38,40,38,30,37,26,39,39,37,40,31,30,31,35,35,37,31,31,31,31,31,37,35,35,37,37,39,39,39,39,39,41,39,38,38,41,40,41,41,41,36,39,39},
+ "CAGCGGTA"),
+ makeCd(lane, tile, 1162, 2139, true,
+ new byte[]{A,G,A,G,G,T,G,A,A,A,T,T,C,T,T,G,G,A,C,C,G,G,C,G,C,T,G,C,T,G,C,T,G,A,T,C,G,T,T,T,A,T,G,G,T,C,G,G,A,A,C,T,A,C,G,A,C,G},
+ new byte[]{31,31,31,35,35,35,35,35,39,37,39,39,39,35,33,25,36,37,39,39,34,32,38,30,35,34,34,34,37,37,37,37,37,33,34,34,37,37,37,37,37,39,39,39,39,39,40,41,41,41,41,41,41,41,40,41,41,40},
+ "TGCTGCTG"),
+ makeCd(lane, tile, 1013, 2146, true,
+ new byte[]{P,A,C,A,C,T,G,C,T,G,C,A,G,A,T,G,A,C,A,A,G,C,A,G,C,C,T,A,T,G,C,G,T,P,P,P,P,C,G,C,T,A,G,A,A,C,C,A,A,C,T,T,A,T,T,C,A,T},
+ new byte[]{2,19,33,35,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,41,41,41,41,41,41,34,34,34,37,37,37,37,37,2,2,2,2,17,19,28,30,31,31,30,31,30,31,31,30,31,31,31,31,31,31,30,31,31},
+ "CTATGCGT"),
+ makeCd(lane, tile, 1245, 2154, true,
+ new byte[]{T,C,G,T,T,A,A,G,T,A,T,A,T,T,C,T,T,A,G,G,T,A,T,T,T,C,T,G,T,A,A,T,C,A,C,C,A,A,T,C,A,G,T,A,G,C,A,C,C,A,C,T,A,T,A,C,A,C},
+ new byte[]{34,34,34,37,37,35,37,37,37,39,37,39,39,40,40,41,41,41,41,41,37,41,41,41,40,31,34,34,37,37,37,37,37,34,34,34,37,37,37,37,37,39,39,39,39,39,41,41,41,41,41,41,40,41,41,41,41,41},
+ "CTGTAATC")
+ ));
+ goldSizes.put(ltStr(lane, tile), 60);
+
+ tile = 11101;
+ goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
+ goldData.put(ltStr(lane, tile), makeList(
+ makeCd(lane, tile, 1140, 2120, true,
+ new byte[]{P,A,A,C,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1047, 2122, false,
+ new byte[]{P,A,A,G,A,C,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,27,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1069, 2159, true,
+ new byte[]{P,C,T,T,G,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1175, 2197, true,
+ new byte[]{P,A,A,A,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1048, 2197, false,
+ new byte[]{P,A,A,G,A,C,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,27,22,32,32,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null)
+ )
+ );
+ goldSizes.put(ltStr(lane, tile), 341292);
+
+ tile = 11102;
+ goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
+ goldData.put(ltStr(lane, tile), makeList(
+ makeCd(lane, tile, 1140, 2120, true,
+ new byte[]{P,A,A,G,A,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1047, 2122, false,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1069, 2159, true,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1175, 2197, true,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1048, 2197, false,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null)
+ )
+ );
+ goldSizes.put(ltStr(lane, tile), 366884);
+
+ tile = 11103;
+ goldIndices.put(ltStr(lane, tile), makeList(0, 2, 10, 18, 19));
+ goldData.put(ltStr(lane, tile), makeList(
+ makeCd(lane, tile, 1140, 2120, true,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1047, 2122, false,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1069, 2159, true,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1175, 2197, true,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null),
+ makeCd(lane, tile, 1048, 2197, false,
+ new byte[]{P,G,C,T,T,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P},
+ new byte[]{2,32,32,32,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
+ null)
+ )
+ );
+ goldSizes.put(ltStr(lane, tile), 336434);
+ }
+
+ public static Map<Integer, ClusterData> clusterData(final int lane, final List<Integer> tiles, final String readStructure, final IlluminaDataType... dataTypes) {
+ final List<Integer> sortedTiles = new ArrayList<Integer>(tiles);
+ Collections.sort(sortedTiles);
+
+ final Map<Integer, ClusterData> data = new HashMap<Integer, ClusterData>();
+ int offset = 0;
+ for (final int tile : sortedTiles) {
+ final String key = ltStr(lane, tile);
+ final List<ClusterData> cds = goldData.get(key);
+ final List<Integer> readNos = goldIndices.get(key);
+ final int size = goldSizes.get(key);
+
+ for (int i = 0; i < cds.size(); i++) {
+ data.put(offset + readNos.get(i), selectiveCopyCd(cds.get(i), readStructure, dataTypes));
+ }
+
+ offset += size;
+ }
+ return data;
+ }
+
+ public static ReadData[] copyReadData(final ReadStructure rs, final IlluminaDataType[] dts, final ClusterData toCopy) {
+ boolean doBases = false;
+ boolean doQuals = false;
+
+ for (final IlluminaDataType dt : dts) {
+ switch (dt) {
+ case BaseCalls:
+ doBases = true;
+ break;
+
+ case QualityScores:
+ doQuals = true;
+ break;
+ }
+ }
+
+ if (!doBases && !doQuals)
+ return null;
+
+ final ReadData rdToCopy = toCopy.getRead(0); //Only gonna be one read in this
+ final ReadData[] rds = new ReadData[rs.nonSkips.length()];
+
+ int index = 0;
+ int baseIndex = 0;
+ for (int i = 0; i < rs.descriptors.size(); i++) {
+ final ReadDescriptor readDesc = rs.descriptors.get(i);
+
+ if (readDesc.type != ReadType.S) {
+ final ReadData curRead = new ReadData(readDesc.type);
+ if (doBases) {
+ final byte[] bases = Arrays.copyOfRange(rdToCopy.getBases(), baseIndex, baseIndex + readDesc.length);
+ curRead.setBases(bases);
+ }
+
+ if (doQuals) {
+ final byte[] quals = Arrays.copyOfRange(rdToCopy.getQualities(), baseIndex, baseIndex + readDesc.length);
+ curRead.setQualities(quals);
+ }
+
+ rds[index++] = curRead;
+ }
+
+ baseIndex += readDesc.length;
+ }
+
+ return rds;
+ }
+
+ private static FourChannelIntensityData copyIntensities(final FourChannelIntensityData toCopy, final int start, final int length) {
+ final FourChannelIntensityData fcid = new FourChannelIntensityData(length);
+
+ System.arraycopy(toCopy.getA(), start, fcid.getA(), 0, length);
+ System.arraycopy(toCopy.getC(), start, fcid.getC(), 0, length);
+ System.arraycopy(toCopy.getG(), start, fcid.getG(), 0, length);
+ System.arraycopy(toCopy.getT(), start, fcid.getT(), 0, length);
+ return fcid;
+ }
+
+ public static ClusterData selectiveCopyCd(final ClusterData toCopy, final String readStructure, final IlluminaDataType... dataTypes) {
+ final ReadStructure rs = new ReadStructure(readStructure);
+ final ReadData[] rd = copyReadData(rs, dataTypes, toCopy);
+ final ClusterData cd = new ClusterData(rd);
+ cd.setTile(toCopy.getTile());
+ cd.setLane(toCopy.getLane());
+
+ for (final IlluminaDataType idt : dataTypes) {
+ switch (idt) {
+ case Position:
+ cd.setX(toCopy.getX());
+ cd.setY(toCopy.getY());
+ break;
+
+ case PF:
+ cd.setPf(toCopy.isPf());
+ break;
+
+ case Barcodes:
+ cd.setMatchedBarcode(toCopy.getMatchedBarcode());
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return cd;
+ }
+
+ public static ClusterData makeCd(final int lane, final int tile, final int xCoord, final int yCoord, final boolean pf, final byte[] bases, final byte[] qualities, final String matchedBarcode) {
+ final ReadData rd = new ReadData();
+ rd.setBases(Arrays.copyOf(bases, bases.length));
+ rd.setQualities(Arrays.copyOf(qualities, bases.length));
+ rd.setReadType(ReadType.T); //This will be ignored, as the cluster will be chopped up by ReadStructure
+
+ final ClusterData cd = new ClusterData(rd);
+ cd.setLane(lane);
+ cd.setTile(tile);
+ cd.setX(xCoord);
+ cd.setY(yCoord);
+ cd.setPf(pf);
+ cd.setMatchedBarcode(matchedBarcode);
+
+ return cd;
+ }
+
+}
diff --git a/src/tests/java/picard/illumina/parser/CycleIlluminaFileMapTest.java b/src/tests/java/picard/illumina/parser/CycleIlluminaFileMapTest.java
new file mode 100644
index 0000000..0d82a52
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/CycleIlluminaFileMapTest.java
@@ -0,0 +1,116 @@
+/*
+* The MIT License
+*
+* Copyright (c) 2011 The Broad Institute
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+* THE SOFTWARE.
+*/
+package picard.illumina.parser;
+
+import org.testng.annotations.DataProvider;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+
+/**
+* @author jburke at broadinstitute.org
+*/
+public class CycleIlluminaFileMapTest {
+ //TODO: REVAMP THIS
+ private static final File TEST_DATA_DIR = new File("testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001");
+ private static final File ZERO_LENGTH_TEST_DATA_DIR = new File("testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L002");
+ private static final int [] ALL_CYCLES = {1,2,3,4};
+
+ private static String laneToDir(int lane) {
+ String outStr = String.valueOf(lane);
+ while(outStr.length() < 3) {
+ outStr = "0" + outStr;
+ }
+ return "L" + outStr;
+ }
+
+ private static String constructPathString(int lane, int cycle) {
+ return TEST_DATA_DIR + "/" + laneToDir(lane) + "/C" + cycle + ".1";
+ }
+
+ @DataProvider(name = "iteratorTestData")
+ public Object [][] iteratorTestData() {
+ return new Object[][] {
+ new Object[] {
+ TEST_DATA_DIR, 1, 1101, ".bcl",
+ makeList(new File(TEST_DATA_DIR + "/C1.1", "s_1_1101.bcl"),
+ new File(TEST_DATA_DIR + "/C2.1", "s_1_1101.bcl"),
+ new File(TEST_DATA_DIR + "/C3.1", "s_1_1101.bcl"),
+ new File(TEST_DATA_DIR + "/C4.1", "s_1_1101.bcl")),
+ ALL_CYCLES
+ },
+ new Object[] {
+ ZERO_LENGTH_TEST_DATA_DIR, 1, 1101, ".bcl", new ArrayList<File>(), new int[]{},
+
+ },
+ new Object[] {
+ TEST_DATA_DIR, 1, 1201, ".bcl", new ArrayList<File>(), new int[]{}
+ },
+
+ new Object[] {
+ TEST_DATA_DIR, 2, 1101, ".bcl", new ArrayList<File>(), new int[]{}
+ },
+ };
+ }
+
+ /* @Test(dataProvider = "iteratorTestData")
+ public void cycledFilesIteratorTest(final File parentDir, final int lane, final int tile, final String fileType, final List<File> expectedFiles, final int [] cycles) {
+ final CycleFilesIterator toTest = new CycleFilesIterator(parentDir, lane, tile, cycles, fileType);
+ Iterator<File> expectedIter = expectedFiles.iterator();
+ while(expectedIter.hasNext()) {
+ final File currentExpected = expectedIter.next();
+ Assert.assertTrue(toTest.hasNext(), "CycledFileSetIterator is missing file: " + currentExpected.getAbsolutePath());
+ Assert.assertEquals(toTest.next().getAbsolutePath(), currentExpected.getAbsolutePath());
+ }
+
+ Assert.assertTrue(!toTest.hasNext(), "CycledFilesIterator has extra files!");
+ }
+
+ @Test
+ public void passingAssertCycledIlluminaFileMapTest() {
+ final CycleIlluminaFileMap fileMap = new CycleIlluminaFileMap();
+ fileMap.put(1101, new CycleFilesIterator(TEST_DATA_DIR, 1, 1101, ALL_CYCLES, ".bcl"));
+ fileMap.put(1201, new CycleFilesIterator(TEST_DATA_DIR, 1, 1201, ALL_CYCLES, ".bcl"));
+ fileMap.assertValid(makeList(1101,1201), ALL_CYCLES);
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void tileFailingAssertCycledIlluminaFileMapTest() {
+ final CycleIlluminaFileMap fileMap = new CycleIlluminaFileMap();
+ fileMap.put(1, new CycleFilesIterator(TEST_DATA_DIR, 1, 1, ALL_CYCLES, ".bcl"));
+ fileMap.put(2, new CycleFilesIterator(TEST_DATA_DIR, 1, 2, ALL_CYCLES, ".bcl"));
+ fileMap.assertValid(makeList(1,2,3), ALL_CYCLES);
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void cycleFailingAssertCycledIlluminaFileMapTest() {
+ final CycleIlluminaFileMap fileMap = new CycleIlluminaFileMap();
+ fileMap.put(1, new CycleFilesIterator(TEST_DATA_DIR, 1, 1, ALL_CYCLES, ".bcl"));
+ fileMap.put(2, new CycleFilesIterator(TEST_DATA_DIR, 1, 2, ALL_CYCLES, ".bcl"));
+ fileMap.assertValid(makeList(1,2), new int[]{1,2,3,4,5});
+ }*/
+
+}
diff --git a/src/tests/java/picard/illumina/parser/FilterParserTest.java b/src/tests/java/picard/illumina/parser/FilterParserTest.java
new file mode 100644
index 0000000..79c44f1
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/FilterParserTest.java
@@ -0,0 +1,171 @@
+package picard.illumina.parser;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.List;
+
+public class FilterParserTest {
+ private static final File TestDataDir = new File("testdata/picard/illumina/parserTests");
+ private static final File BaseCallsDir = new File(TestDataDir, "filterParser");
+
+ private static final boolean F = false;
+ private static final boolean T = true;
+ public static final Boolean[] s_1_0001_filter = {F, F, T, F, T, T, F, F, T, F, T, T, F, T, T};
+ public static final Boolean[] s_1_0002_filter = {F, F, F, F, F, T, T, F, F, F, F, T, F, F, F, T, T, T, T, T};
+ public static final Boolean[] s_1_0003_filter = {T, F, F, F, T, T, F, F};
+ public static final Boolean[] s_1_0004_filter = {T, F, F, F, F, T, F, F, F, F, T, F, F, F, F, T, T, F, F, T,
+ T, F, T, F, T, T, F, F, T, T, F, T, T, T, T, F, T, T, T, T,
+ F, T, F, F, F, T, F, T, F, T, T, F, F, T, T, T, F, F, T, T};
+
+ public static final Boolean[] tileToValue(int tile) {
+ switch (tile) {
+ case 1:
+ return s_1_0001_filter;
+ case 2:
+ return s_1_0002_filter;
+ case 3:
+ return s_1_0003_filter;
+ case 4:
+ return s_1_0004_filter;
+ }
+
+ throw new RuntimeException("You shouldn't reach this statement!");
+ }
+
+ public static final Boolean[] allTilesToValues(Integer[] tiles) {
+ Boolean[][] values = new Boolean[tiles.length][];
+ for (int i = 0; i < tiles.length; i++) {
+ values[i] = tileToValue(tiles[i]);
+ }
+
+ return arrayFlatten(values);
+ }
+
+ public static final List<Integer> arrayToList(final Integer[] array) {
+ final List<Integer> list = new ArrayList<Integer>();
+ for (int item : array) {
+ list.add(item);
+ }
+ return list;
+ }
+
+ public static final <T> T[] arrayFlatten(final T[][] arrays) {
+ int total = 0;
+ for (T[] arr : arrays) {
+ total += arr.length;
+ }
+
+ int resultIndex = 0;
+ final T[] result = (T[]) Array.newInstance(arrays[0][0].getClass(), total);
+ for (int i = 0; i < arrays.length; i++) {
+ System.arraycopy(arrays[i], 0, result, resultIndex, arrays[i].length);
+ resultIndex += arrays[i].length;
+ }
+ return result;
+ }
+
+ @DataProvider(name = "passingTiles")
+ public Object[][] passingTiles() {
+ return new Object[][]{
+ {new Integer[]{1}},
+ {new Integer[]{2}},
+ {new Integer[]{4}},
+ {new Integer[]{1, 4}},
+ {new Integer[]{2, 3}},
+ {new Integer[]{1, 2, 3, 4}}
+ };
+ }
+
+ @Test(dataProvider = "passingTiles")
+ public void passingParserTest(Integer[] tiles) {
+ final IlluminaFileUtil fUtil = new IlluminaFileUtil(BaseCallsDir, 1);
+
+ final Boolean[] values = allTilesToValues(tiles);
+ final List<Integer> tileList = arrayToList(tiles);
+
+ final FilterParser fp = new FilterParser(((PerTileFileUtil) fUtil.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Filter)).getFiles(tileList));
+ fp.verifyData(tileList, null); //filter parser doesn't care about cycle
+
+ for (final boolean expectedValue : values) {
+ Assert.assertTrue(fp.hasNext());
+ Assert.assertEquals(fp.next().isPf(), expectedValue);
+ }
+
+ Assert.assertFalse(fp.hasNext());
+
+ //seek back to the beginning and do it again!
+ fp.seekToTile(tiles[0]);
+ for (final boolean expectedValue : values) {
+ Assert.assertTrue(fp.hasNext());
+ Assert.assertEquals(fp.next().isPf(), expectedValue);
+ }
+
+ Assert.assertFalse(fp.hasNext());
+ fp.close();
+ }
+
+ @DataProvider(name = "seekToTile")
+ public Object[][] seekToTile() {
+ return new Object[][]{
+ //seek after how many, tiles to load, expected values
+ {0, 2, new Integer[]{2}, new Boolean[][]{s_1_0002_filter}},
+ {4, 4, new Integer[]{1, 4}, new Boolean[][]{new Boolean[]{F, F, T, F}, s_1_0004_filter}},
+ {0, 3, new Integer[]{2, 3}, new Boolean[][]{s_1_0003_filter}},
+ {15, 3, new Integer[]{1, 2, 3, 4}, new Boolean[][]{s_1_0001_filter, s_1_0003_filter, s_1_0004_filter}}
+ };
+ }
+
+ @Test(dataProvider = "seekToTile")
+ public void passingSeekingParserTest(int skipBefore, int tileToSkipTo, Integer[] tiles, Boolean[][] expectedValues) {
+ final IlluminaFileUtil fUtil = new IlluminaFileUtil(BaseCallsDir, 1);
+
+ final Boolean[] values = arrayFlatten(expectedValues);
+ final List<Integer> tileList = arrayToList(tiles);
+
+ final FilterParser fp = new FilterParser(((PerTileFileUtil) fUtil.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Filter)).getFiles(tileList));
+
+ int read = 0;
+ for (final boolean expectedValue : values) {
+ if (read == skipBefore) {
+ fp.seekToTile(tileToSkipTo);
+ }
+
+ Assert.assertTrue(fp.hasNext());
+ Assert.assertEquals(fp.next().isPf(), expectedValue, " Failed on read: " + read);
+ ++read;
+ }
+
+ Assert.assertFalse(fp.hasNext());
+ fp.close();
+ }
+
+ @DataProvider(name = "failingVerifyTiles")
+ public Object[][] failingVerifyTiles() {
+ return new Object[][]{
+ {new Integer[]{1}, new Integer[]{2}},
+ {new Integer[]{2}, new Integer[]{1}},
+ {new Integer[]{4}, new Integer[]{5}},
+ {new Integer[]{1, 4}, new Integer[]{1, 3, 4}},
+ {new Integer[]{2, 3}, new Integer[]{2, 3, 4}},
+ {new Integer[]{1, 2, 3, 4}, new Integer[]{1, 2, 3, 4, 5}},
+ {new Integer[]{2, 3, 4}, new Integer[]{1, 2, 3, 4}}
+ };
+ }
+
+ @Test(dataProvider = "failingVerifyTiles", expectedExceptions = PicardException.class)
+ public void verifyDataTest(final Integer[] initTiles, final Integer[] verifyTiles) {
+ final IlluminaFileUtil fUtil = new IlluminaFileUtil(BaseCallsDir, 1);
+ final List<Integer> initTileList = arrayToList(initTiles);
+ final List<Integer> verifyTileList = arrayToList(verifyTiles);
+
+ final FilterParser fp = new FilterParser(((PerTileFileUtil) fUtil.getUtil(IlluminaFileUtil.SupportedIlluminaFormat.Filter)).getFiles(initTileList));
+ fp.verifyData(verifyTileList, null); //filter parser doesn't care about cycle values
+ fp.close();
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/IlluminaDataProviderFactoryTest.java b/src/tests/java/picard/illumina/parser/IlluminaDataProviderFactoryTest.java
new file mode 100644
index 0000000..fdf3c8b
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/IlluminaDataProviderFactoryTest.java
@@ -0,0 +1,16 @@
+package picard.illumina.parser;
+
+
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+
+import java.io.File;
+
+public class IlluminaDataProviderFactoryTest {
+
+ class TestFactory extends IlluminaDataProviderFactory{
+ public TestFactory(final File basecallDirectory, final int lane, final ReadStructure readStructure, final IlluminaDataType... dataTypes) {
+ super(basecallDirectory, lane, readStructure, new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY), dataTypes);
+ }
+
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/IlluminaDataProviderTest.java b/src/tests/java/picard/illumina/parser/IlluminaDataProviderTest.java
new file mode 100644
index 0000000..4cbbccb
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/IlluminaDataProviderTest.java
@@ -0,0 +1,270 @@
+/*
+* The MIT License
+*
+* Copyright (c) 2011 The Broad Institute
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+* THE SOFTWARE.
+*/
+package picard.illumina.parser;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+//import static htsjdk.samtools.util.CollectionUtil.*;
+
+/**
+ * @author jburke at broadinstitute.org
+ */
+
+public class IlluminaDataProviderTest {
+
+ public static final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
+ public static final File BINARY_TD_LOCATION = new File("testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls");
+ private static final IlluminaDataType[] DEFAULT_DATA_TYPES = new IlluminaDataType[]{
+ IlluminaDataType.Position, IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores, IlluminaDataType.PF
+ };
+
+ private void runTest(
+ final String testName, final int size,
+ final Map<Integer, ClusterData> readNoToClusterData,
+ final int seekAfterFirstRead, final int seekTestDataReadOffset,
+ final IlluminaDataProvider dataProvider)
+ throws Exception {
+
+ int count = 0;
+ int readNum = 0;
+ while (dataProvider.hasNext()) {
+ final ClusterData cluster = dataProvider.next();
+ if (readNoToClusterData.containsKey(readNum)) {
+ compareReadData(cluster, readNoToClusterData.get(readNum), testName + " cluster num " + readNum);
+ }
+
+ if (seekAfterFirstRead != 0 && count == 0) {
+ dataProvider.seekToTile(seekAfterFirstRead);
+ readNum += seekTestDataReadOffset;
+ }
+
+ readNum++;
+ count++;
+ }
+ Assert.assertEquals(count, size, testName);
+ dataProvider.close();
+ }
+
+ private IlluminaDataType[] getDataTypes(final IlluminaDataType[] extraDataTypes) {
+ final IlluminaDataType[] dts;
+
+ if (extraDataTypes == null) {
+ dts = DEFAULT_DATA_TYPES;
+ } else {
+ dts = Arrays.copyOf(DEFAULT_DATA_TYPES, DEFAULT_DATA_TYPES.length + extraDataTypes.length);
+ System.arraycopy(extraDataTypes, 0, dts, DEFAULT_DATA_TYPES.length, extraDataTypes.length);
+ }
+ return dts;
+ }
+
+
+ private void compareBasesAndQuals(final ReadData rd1, final ReadData rd2, final String testName) {
+ Assert.assertEquals(rd1.getBases(), rd2.getBases(), testName);
+ Assert.assertEquals(rd1.getQualities(), rd2.getQualities(), testName);
+ Assert.assertEquals(rd1.getReadType(), rd2.getReadType());
+ }
+
+ private void comparePositionalData(final ClusterData cd1, final ClusterData cd2, final String testName) {
+ Assert.assertEquals(cd1.getLane(), cd2.getLane(), testName);
+ Assert.assertEquals(cd1.getTile(), cd2.getTile(), testName);
+ Assert.assertEquals(cd1.getX(), cd2.getX(), testName);
+ Assert.assertEquals(cd1.getY(), cd2.getY(), testName);
+ }
+
+ //Doesn't compare intensities right now -- Do we want too?
+ private void compareReadData(final ClusterData cd1, final ClusterData cd2, final String testName) {
+ comparePositionalData(cd1, cd2, testName);
+ Assert.assertEquals(cd1.getNumReads(), cd2.getNumReads());
+ for (int i = 0; i < cd1.getNumReads(); i++) {
+ compareBasesAndQuals(cd1.getRead(i), cd2.getRead(i), testName);
+ }
+
+ Assert.assertEquals(cd1.getMatchedBarcode(), cd2.getMatchedBarcode(), testName);
+ Assert.assertEquals(cd1.isPf().booleanValue(), cd2.isPf().booleanValue(), testName);
+ }
+
+ public void runBarcodeParsingTest(final IlluminaDataProviderFactory factory) {
+ int total = 0;
+ final IlluminaDataProvider dataProvider = factory.makeDataProvider();
+ while (dataProvider.hasNext()) {
+ final ClusterData cluster = dataProvider.next();
+ final String matchedBarcode = cluster.getMatchedBarcode();
+ if (matchedBarcode != null) {
+ Assert.assertEquals(matchedBarcode, new String(cluster.getRead(1).getBases()));
+ }
+ if(total > 10){
+ break;
+ }
+ total++;
+ }
+ dataProvider.close();
+ }
+
+ @Test
+ public void barcodeParsingTest() {
+ runBarcodeParsingTest(new IlluminaDataProviderFactory(BINARY_TD_LOCATION, 1, new ReadStructure("25T8B25T"), bclQualityEvaluationStrategy, IlluminaDataType.BaseCalls,
+ IlluminaDataType.Barcodes));
+ }
+
+ @DataProvider(name = "binaryData")
+ public Object[][] binaryData() {
+ return new Object[][]{
+ {
+ "Bustard Parsing Test(25T8B25T) w/Clocs", 1, 180,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.Barcodes},
+ "25T8B25T",
+ 0, 0,
+ BINARY_TD_LOCATION
+ },
+ {
+ "Bustard Parsing Test(25T8S25T) w/Clocs", 1, 180,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.Barcodes},
+ "25T8S25T",
+ 0, 0,
+ BINARY_TD_LOCATION
+ },
+ {
+ "Bustard Parsing Test(25T8S25T) w/Clocs with ending skip", 1, 180,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.Barcodes},
+ "25T8B1S",
+ 0, 0,
+ BINARY_TD_LOCATION
+ },
+ {
+ "Bustard Parsing Test(25S8S25T) w/Clocs", 1, 180,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.Barcodes},
+ "25S8S25T",
+ 0, 0,
+ BINARY_TD_LOCATION
+ },
+ {
+ "Bustard Parsing Test(25T8B25T) w/Clocs And Seeking", 1, 61,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.Barcodes},
+ "25T8B25T",
+ 2101, 4631,
+ BINARY_TD_LOCATION
+ }
+ };
+ }
+
+ @Test(dataProvider = "binaryData")
+ public void testIlluminaDataProviderBclMethod(
+ final String testName, final int lane, final int size,
+ final List<Integer> tiles,
+ final IlluminaDataType[] extraDataTypes,
+ final String illuminaConfigStr,
+ final int seekAfterFirstRead, final int seekTestDataReadOffset,
+ final File basecallsDirectory)
+ throws Exception {
+
+ final IlluminaDataType[] dts = getDataTypes(extraDataTypes);
+
+ final Map<Integer, ClusterData> readNoToClusterData = BinTdUtil.clusterData(lane, tiles, illuminaConfigStr, dts);
+ final IlluminaDataProviderFactory factory = new IlluminaDataProviderFactory(basecallsDirectory, lane, new ReadStructure(illuminaConfigStr), bclQualityEvaluationStrategy, dts);
+ final IlluminaDataProvider dataProvider = factory.makeDataProvider();
+
+ runTest(testName, size, readNoToClusterData, seekAfterFirstRead, seekTestDataReadOffset, dataProvider);
+ }
+
+ //Unlike above, the data types here do not have DEFAULT_DATA_TYPES added before creating the dataProvider
+ @DataProvider(name = "badData")
+ public Object[][] badData() {
+ return new Object[][]{
+ {
+ "Bad Lane(5)", 5, 60,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.Barcodes},
+ "25T8B25T",
+ BINARY_TD_LOCATION
+ },
+ {
+ "Bad Read Structure(25TB25T)", 4, 60,
+ makeList(1101, 1201, 2101),
+ DEFAULT_DATA_TYPES,
+ "25TB25T",
+ BINARY_TD_LOCATION
+ },
+ {
+ "Bad Read Structure(25T0B25T)", 4, 60,
+ makeList(1101, 1201, 2101),
+ DEFAULT_DATA_TYPES,
+ "25T0B25T",
+ BINARY_TD_LOCATION
+ },
+ {
+ "Bad Read Structure(-225T0B25T)", 4, 60,
+ makeList(1101, 1201, 2101),
+ DEFAULT_DATA_TYPES,
+ "-25T0B25T",
+ BINARY_TD_LOCATION
+ },
+ {
+ "Missing Barcodes File", 9, 60,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.Position, IlluminaDataType.Barcodes},
+ "25T8B25T",
+ BINARY_TD_LOCATION
+ },
+ {
+ "Missing Cycle File", 9, 60,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.BaseCalls},
+ "25T8B25T",
+ BINARY_TD_LOCATION
+ },
+ {
+ "Missing Filter File", 9, 60,
+ makeList(1101, 1201, 2101),
+ new IlluminaDataType[]{IlluminaDataType.PF, IlluminaDataType.BaseCalls, IlluminaDataType.QualityScores},
+ "25T8B24T",
+ BINARY_TD_LOCATION
+ }
+ };
+ }
+
+ @Test(dataProvider = "badData", expectedExceptions = {PicardException.class, IllegalArgumentException.class})
+ public void testIlluminaDataProviderMissingDatas(final int lane,
+ final IlluminaDataType[] actualDts,
+ final String illuminaConfigStr,
+ final File basecallsDirectory)
+ throws Exception {
+ final IlluminaDataProviderFactory factory = new IlluminaDataProviderFactory(basecallsDirectory, lane, new ReadStructure(illuminaConfigStr), bclQualityEvaluationStrategy, actualDts);
+ factory.makeDataProvider();
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/IlluminaFileUtilTest.java b/src/tests/java/picard/illumina/parser/IlluminaFileUtilTest.java
new file mode 100644
index 0000000..9cf24ff
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/IlluminaFileUtilTest.java
@@ -0,0 +1,658 @@
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.illumina.parser.IlluminaFileUtil.SupportedIlluminaFormat;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+
+public class IlluminaFileUtilTest {
+ private static final int DEFAULT_LANE = 7;
+ private static final List<Integer> DEFAULT_TILES = makeList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+ private static final List<Integer> DEFAULT_TILE_TEST_SUBSET = makeList(1, 4, 5, 6, 9, 10);
+ private static final int[] DEFAULT_CYCLES = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
+ private static final int DEFAULT_LAST_CYCLE = 20;
+
+ // We have data for these that should agree
+ private static final List<SupportedIlluminaFormat> FORMATS_TO_TEST = Arrays.asList(
+ SupportedIlluminaFormat.Bcl,
+ SupportedIlluminaFormat.Locs,
+ SupportedIlluminaFormat.Clocs,
+ SupportedIlluminaFormat.Pos,
+ SupportedIlluminaFormat.Filter,
+ SupportedIlluminaFormat.Barcode);
+
+
+ private File intensityDir;
+ private File basecallDir;
+
+ @BeforeMethod
+ private void setUp() throws Exception {
+ intensityDir = IOUtil.createTempDir("ift_test", "Intensities");
+ basecallDir = new File(intensityDir, "BaseCalls");
+ if (!basecallDir.mkdir()) {
+ throw new RuntimeException("Couldn't make basecalls dir " + basecallDir.getAbsolutePath());
+ }
+ }
+
+ @AfterMethod
+ private void tearDown() {
+ IOUtil.deleteDirectoryTree(intensityDir);
+ }
+
+ @DataProvider(name = "validLanes")
+ public Object[][] validLanes() {
+ return new Object[][]{
+ {0, "s_0_1111.test"},
+ {1, "s_1_23.test"},
+ {10, "s_10_1.test"}
+ };
+ }
+
+ public void regexMatches(final String regex, final String toMatch) {
+ regexMatches(regex, toMatch, true);
+ }
+
+ public void regexMatches(final String regex, final String toMatch, final boolean expectedResult) {
+ final Pattern pt = Pattern.compile(regex);
+ final Matcher ma = pt.matcher(toMatch);
+ Assert.assertEquals(ma.matches(), expectedResult);
+ }
+
+ @Test(dataProvider = "validLanes")
+ public void regexTests(final int lane, final String ltExample) {
+ regexMatches(ParameterizedFileUtil.makeLaneTileRegex(".test", lane), ltExample);
+ }
+
+ @DataProvider(name = "validLanesInvalidRegexes")
+ public Object[][] validLanesInvalidRegexes() {
+ return new Object[][]{
+ {0, "s_-0_111"},
+ {1, "s_1_A3"},
+ {10, "s_-100_1"},
+ {20, "s_21_1"}
+ };
+ }
+
+ @Test(dataProvider = "validLanesInvalidRegexes")
+ public void notMatchingRegexTest(final int lane, final String ltExample) {
+ regexMatches(ParameterizedFileUtil.makeLaneTileRegex(".test", lane) , ltExample, false);
+ }
+
+ @DataProvider(name = "invalidLanes")
+ public Object[][] invalidLanes() {
+ return new Object[][]{
+ {-1000},
+ {-10},
+ {-1}
+ };
+ }
+
+ @Test(dataProvider = "invalidLanes", expectedExceptions = PicardException.class)
+ public void invalidLaneForLTRegex(final int lane) {
+ ParameterizedFileUtil.makeLaneTileRegex(".test", lane);
+ }
+
+ public void assertDefaults(final IlluminaFileUtil fileUtil, final Integer lane, final List<SupportedIlluminaFormat> formatsToTest) {
+ if (lane == null) {
+ Assert.assertEquals(fileUtil.getLane(), DEFAULT_LANE);
+ } else {
+ Assert.assertEquals(new Integer(fileUtil.getLane()), lane);
+ }
+
+ Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Barcode).getTiles(), DEFAULT_TILES);
+
+ Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Bcl).getTiles(), DEFAULT_TILES);
+
+ Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Pos).getTiles(), DEFAULT_TILES);
+
+ Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Locs).getTiles(), DEFAULT_TILES);
+
+ Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Clocs).getTiles(), DEFAULT_TILES);
+
+ Assert.assertEquals(fileUtil.getUtil(SupportedIlluminaFormat.Filter).getTiles(), DEFAULT_TILES);
+
+ final Set<Integer> detectedCycles = ((PerTilePerCycleFileUtil) fileUtil.getUtil(SupportedIlluminaFormat.Bcl)).getDetectedCycles();
+ Assert.assertEquals(detectedCycles.size(), DEFAULT_CYCLES.length);
+ int i = 0;
+ for(final Integer cycle : detectedCycles){
+ Assert.assertEquals(cycle.intValue(), DEFAULT_CYCLES[i++], "Elements differ at index " + i);
+ }
+
+ Assert.assertEquals(fileUtil.getActualTiles(formatsToTest), DEFAULT_TILES);
+ }
+
+ @Test
+ public void passNewUtilTest() {
+ for (final SupportedIlluminaFormat format : SupportedIlluminaFormat.values()) {
+ makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, DEFAULT_CYCLES);
+ makeFiles(format, intensityDir, DEFAULT_LANE + 1, DEFAULT_TILES, DEFAULT_CYCLES, ".gz");
+ makeFiles(format, intensityDir, DEFAULT_LANE + 2, DEFAULT_TILES, DEFAULT_CYCLES, ".bz2");
+ }
+
+ final Set<SupportedIlluminaFormat> formatsToTest = new HashSet<SupportedIlluminaFormat>();
+ // TODO: I can't be bothered to build files for these. AW
+ Collections.addAll(formatsToTest, SupportedIlluminaFormat.values());
+ formatsToTest.remove(SupportedIlluminaFormat.MultiTileBcl);
+ formatsToTest.remove(SupportedIlluminaFormat.MultiTileFilter);
+ formatsToTest.remove(SupportedIlluminaFormat.MultiTileLocs);
+ final ArrayList<SupportedIlluminaFormat> formatsList = new ArrayList<SupportedIlluminaFormat>(formatsToTest);
+
+ for (int i = 0; i < 3; i++) {
+ final IlluminaFileUtil fileUtil = new IlluminaFileUtil(new File(intensityDir, "BaseCalls"), DEFAULT_LANE + i);
+ Assert.assertEquals(fileUtil.getActualTiles(formatsList), DEFAULT_TILES);
+ assertDefaults(fileUtil, DEFAULT_LANE + i, formatsList);
+ }
+ }
+
+ @Test
+ public void passingVerifyTest() {
+ for (final SupportedIlluminaFormat format : SupportedIlluminaFormat.values()) {
+ makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, DEFAULT_CYCLES);
+ makeFiles(format, intensityDir, DEFAULT_LANE + 1, DEFAULT_TILES, DEFAULT_CYCLES, ".gz");
+ makeFiles(format, intensityDir, DEFAULT_LANE + 2, DEFAULT_TILES, DEFAULT_CYCLES, ".bz2");
+ }
+
+ for (int i = 0; i < 3; i++) {
+ final IlluminaFileUtil fileUtil = new IlluminaFileUtil(new File(intensityDir, "BaseCalls"), DEFAULT_LANE + i);
+
+
+ for (final SupportedIlluminaFormat format : FORMATS_TO_TEST) {
+ Assert.assertEquals(new ArrayList<String>(), fileUtil.getUtil(format).verify(DEFAULT_TILES, DEFAULT_CYCLES));
+ }
+ }
+ }
+
+ @DataProvider(name = "missingTileFormats")
+ public Object[][] missingTileFormats() {
+ return new Object[][]{
+ {
+ 1,
+ makeList(SupportedIlluminaFormat.Bcl, SupportedIlluminaFormat.Barcode),
+ makeList(SupportedIlluminaFormat.Bcl, SupportedIlluminaFormat.Barcode),
+ makeList("BaseCalls/s_1_0007_barcode.txt.gz"),
+ ".gz"
+ },
+
+ {
+ 2,
+ Arrays.asList(SupportedIlluminaFormat.values()),
+ Arrays.asList(SupportedIlluminaFormat.values()),
+ makeCycleFileList(new File("BaseCalls"), ".bcl", 2, DEFAULT_CYCLES, 2),
+ ".gz"
+ },
+ {
+ 3,
+ Arrays.asList(SupportedIlluminaFormat.values()),
+ Arrays.asList(SupportedIlluminaFormat.values()),
+ makeList("BaseCalls/L003/C1.1/s_3_2.bcl"),
+ ".bz2"
+ },
+ {
+ 4,
+ Arrays.asList(SupportedIlluminaFormat.values()),
+ Arrays.asList(SupportedIlluminaFormat.Pos, SupportedIlluminaFormat.Locs),
+ makeList("s_4_10_pos.txt", "L004/s_4_2.locs"),
+ null
+ }
+ };
+ }
+
+ public static void emptyRelativeFiles(final File baseFile, final List<String> relativeFilesToDelete) {
+ for (final String relativeFile : relativeFilesToDelete) {
+ final File actualFile = new File(baseFile, relativeFile);
+
+
+ if (!actualFile.exists()) {
+ throw new RuntimeException("Trying to empty a non-existent file" + actualFile.getAbsolutePath());
+ }
+
+ if (actualFile.isDirectory()) {
+ throw new RuntimeException("Trying to empty a directory(" + actualFile.getAbsolutePath() + ")");
+ } else {
+ if (!actualFile.delete()) {
+ throw new RuntimeException("Couldn't remove previous file when emptying(" + actualFile.getAbsolutePath() + ")");
+ } else {
+ try {
+ if (!actualFile.createNewFile()) {
+ throw new RuntimeException("Couldn't create empty file: " + actualFile.getAbsolutePath() + ")");
+ }
+ } catch (final IOException ioe) {
+ throw new RuntimeException(ioe);
+ }
+ }
+ }
+ if (!actualFile.exists()) {
+ throw new PicardException("File should exist: " + actualFile);
+ }
+ }
+ }
+
+ public static void deleteRelativeFiles(final File baseFile, final List<String> relativeFilesToDelete) {
+ for (final String relativeFile : relativeFilesToDelete) {
+ final File actualFile = new File(baseFile, relativeFile);
+
+
+ if (!actualFile.exists()) {
+ throw new RuntimeException("Trying to delete a non-existent file" + actualFile.getAbsolutePath());
+ }
+
+ if (actualFile.isDirectory()) {
+ IOUtil.deleteDirectoryTree(actualFile);
+ } else {
+ IOUtil.deleteFiles(actualFile);
+ }
+ if (actualFile.exists()) {
+ throw new RuntimeException("File still exists after calling delete: " + actualFile);
+ }
+ }
+ }
+
+ public final void deleteRelativeFiles(final List<String> relativeFilesToDelete) {
+ deleteRelativeFiles(intensityDir, relativeFilesToDelete);
+ }
+
+ @Test(dataProvider = "missingTileFormats")
+ public void missingTileTest(final int lane,
+ final List<SupportedIlluminaFormat> formats,
+ final List<SupportedIlluminaFormat> formatsToGetTiles,
+ final List<String> relativeFilesToDelete,
+ final String compression) {
+ for (final SupportedIlluminaFormat format : formats) {
+ makeFiles(format, intensityDir, lane, DEFAULT_TILES, DEFAULT_CYCLES, compression);
+ }
+
+ deleteRelativeFiles(relativeFilesToDelete);
+
+ PicardException pExc = null;
+ try {
+ final IlluminaFileUtil fUtil = new IlluminaFileUtil(new File(intensityDir, "BaseCalls"), lane);
+ fUtil.getActualTiles(formatsToGetTiles);
+ } catch (final PicardException exception) {
+ pExc = exception;
+ }
+
+ Assert.assertNotNull(pExc, "Didn't raise a Picard Exception for missing tile!");
+ Assert.assertTrue(pExc.getMessage().contains("Formats do not have the same number of tiles! "), "Wrong exception thrown for missing tile!");
+ }
+
+ @DataProvider(name = "perTileFileFormats")
+ public Object[][] perTileFileUtils() {
+ return new Object[][]{
+ {SupportedIlluminaFormat.Locs, null, false, laneDir(DEFAULT_LANE)},
+ {SupportedIlluminaFormat.Clocs, null, false, laneDir(DEFAULT_LANE)},
+ {SupportedIlluminaFormat.Pos, ".gz", false, null},
+ {SupportedIlluminaFormat.Pos, null, false, null},
+ {SupportedIlluminaFormat.Filter, null, true, "BaseCalls/" + laneDir(DEFAULT_LANE)},
+ {SupportedIlluminaFormat.Barcode, ".bz2", true, "BaseCalls"}
+ };
+ }
+
+ public File makePerTileFile(final File parentDir, final int lane, final int tile, final String extension, final String compression, final boolean longFormat) {
+ return new File(parentDir, "s_" + lane + "_" + longTile(tile, longFormat) + extension + (compression != null ? compression : ""));
+ }
+
+ public void testDefaultPerTileUtil(final PerTileFileUtil ptfu, final String compression, final boolean longFormat, final File parentDir) {
+ final IlluminaFileMap fm = ptfu.getFiles();
+ final IlluminaFileMap fmWTiles = ptfu.getFiles(DEFAULT_TILES);
+
+ Assert.assertEquals(fm.size(), DEFAULT_TILES.size());
+
+ for (final Integer tile : DEFAULT_TILES) {
+ final File tFile = fm.get(tile);
+ final File tFile2 = fmWTiles.get(tile);
+ Assert.assertEquals(tFile.getAbsolutePath(), tFile2.getAbsolutePath());
+ Assert.assertEquals(tFile, makePerTileFile(parentDir, DEFAULT_LANE, tile, ptfu.extension, compression, longFormat));
+ Assert.assertTrue(tFile.exists());
+ Assert.assertTrue(tFile.length() > 0);
+ }
+
+ final List<Integer> tiles = new ArrayList<Integer>(DEFAULT_TILE_TEST_SUBSET);
+ final IlluminaFileMap subsetMap = ptfu.getFiles(DEFAULT_TILE_TEST_SUBSET);
+ for (final Integer tile : subsetMap.keySet()) {
+ tiles.remove(tile);
+ Assert.assertTrue(DEFAULT_TILE_TEST_SUBSET.contains(tile));
+ final File tFile = subsetMap.get(tile);
+ Assert.assertEquals(tFile, makePerTileFile(parentDir, DEFAULT_LANE, tile, ptfu.extension, compression, longFormat));
+ Assert.assertTrue(tFile.exists());
+ Assert.assertTrue(tFile.length() > 0);
+ }
+
+ Assert.assertTrue(tiles.isEmpty());
+ }
+
+ @Test(dataProvider = "perTileFileFormats")
+ public void perTileFileUtilsTest(final SupportedIlluminaFormat format, final String compression, final boolean longFormat, final String parentDir) {
+ makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, DEFAULT_CYCLES, compression);
+
+ final IlluminaFileUtil fileUtil = new IlluminaFileUtil(basecallDir, DEFAULT_LANE);
+ final PerTileFileUtil ptfu = (PerTileFileUtil) fileUtil.getUtil(format);
+
+ Assert.assertTrue(ptfu.filesAvailable());
+ testDefaultPerTileUtil(ptfu, compression, longFormat, (parentDir == null) ? intensityDir : new File(intensityDir, parentDir));
+
+ final IlluminaFileUtil noFilesFu = new IlluminaFileUtil(basecallDir, DEFAULT_LANE + 20);
+ final PerTileFileUtil noFilesPtfu = (PerTileFileUtil) noFilesFu.getUtil(format);
+ Assert.assertFalse(noFilesPtfu.filesAvailable());
+ Assert.assertTrue(noFilesPtfu.getFiles().isEmpty());
+ Assert.assertTrue(noFilesPtfu.getFiles(DEFAULT_TILES).isEmpty());
+ }
+
+ public File makePerTilePerCycleFilePath(final File parentDir, final int lane, final int tile, final int cycle, final String extension) {
+ return new File(parentDir, "C" + cycle + ".1/s_" + lane + "_" + tile + extension);
+ }
+
+ public void testDefaultPerTilePerCycleUtil(final PerTilePerCycleFileUtil pcfu, final File parentDir, final int[] cycles) {
+ final CycleIlluminaFileMap cfm = pcfu.getFiles(cycles);
+ final CycleIlluminaFileMap cfmWTiles = pcfu.getFiles(DEFAULT_TILES, cycles);
+ final CycleIlluminaFileMap cfmNoCycles;
+ if (Arrays.equals(cycles, DEFAULT_CYCLES)) {
+ cfmNoCycles = pcfu.getFiles();
+ } else {
+ cfmNoCycles = null;
+ }
+
+ Assert.assertEquals(cfm.size(), cycles.length);
+
+ for (final int cycle : cycles) {
+ final IlluminaFileMap tFileIter = cfm.get(cycle);
+ final IlluminaFileMap tFileIter2 = cfmWTiles.get(cycle);
+ final IlluminaFileMap tFileIter3;
+ if (cfmNoCycles != null) {
+ tFileIter3 = cfmNoCycles.get(cycle);
+ } else {
+ tFileIter3 = null;
+ }
+
+ for (final Integer tile : DEFAULT_TILES) {
+ final File tcFile = tFileIter.get(tile);
+ final File tcFile2 = tFileIter2.get(tile);
+
+ Assert.assertEquals(tcFile.getAbsolutePath(), tcFile2.getAbsolutePath());
+ if (tFileIter3 != null) {
+ final File tfFile3 = tFileIter3.get(tile);
+ Assert.assertEquals(tcFile.getAbsolutePath(), tfFile3.getAbsolutePath());
+ }
+
+ Assert.assertEquals(tcFile, makePerTilePerCycleFilePath(parentDir, DEFAULT_LANE, tile, cycle, pcfu.extension));
+ Assert.assertTrue(tcFile.exists());
+ Assert.assertTrue(tcFile.length() > 0);
+ }
+ }
+ }
+
+
+ public void testSubsetDefaultPerTilePerCycleUtil(final PerTilePerCycleFileUtil pcfu, final File parentDir, final int[] cycles) {
+ final List<Integer> tiles = new ArrayList<Integer>(DEFAULT_TILE_TEST_SUBSET);
+ final CycleIlluminaFileMap subsetMap = pcfu.getFiles(DEFAULT_TILE_TEST_SUBSET, cycles);
+ final CycleIlluminaFileMap cfmNoCycles;
+ if (Arrays.equals(cycles, DEFAULT_CYCLES)) {
+ cfmNoCycles = pcfu.getFiles(DEFAULT_TILE_TEST_SUBSET);
+ } else {
+ cfmNoCycles = null;
+ }
+
+ for (final int cycle : cycles) {
+ final IlluminaFileMap tFileIter = subsetMap.get(cycle);
+ final IlluminaFileMap tFileIter2;
+ if (cfmNoCycles != null) {
+ tFileIter2 = cfmNoCycles.get(cycle);
+ } else {
+ tFileIter2 = null;
+ }
+
+
+ for (final Integer tile : subsetMap.get(cycle).keySet()) {
+ Assert.assertTrue(DEFAULT_TILE_TEST_SUBSET.contains(tile));
+ tiles.remove(tile);
+ final File tcFile = tFileIter.get(tile);
+ if (tFileIter2 != null) {
+ Assert.assertEquals(tcFile, tFileIter2.get(tile));
+ }
+ Assert.assertEquals(tcFile, makePerTilePerCycleFilePath(parentDir, DEFAULT_LANE, tile, cycle, pcfu.extension));
+ Assert.assertTrue(tcFile.exists());
+ Assert.assertTrue(tcFile.length() > 0);
+ }
+ }
+
+ Assert.assertTrue(tiles.isEmpty());
+ }
+
+ public static int[] cycleRange(final Range range) {
+ return cycleRange(range.start, range.end);
+ }
+
+ public static int[] cycleRange(final int start, final int end) {
+ final int[] cycles = new int[end - start + 1];
+ for (int i = 0; i < cycles.length; i++) {
+ cycles[i] = start + i;
+ }
+
+ return cycles;
+ }
+
+ public static int[] cycleRange(final int end) {
+ return cycleRange(1, end);
+ }
+
+ @DataProvider(name = "perTilePerCycleFileFormats")
+ public Object[][] perTilePerCycleFileFormats() {
+ return new Object[][]{
+ {SupportedIlluminaFormat.Bcl, "BaseCalls/" + laneDir(DEFAULT_LANE), DEFAULT_CYCLES, false, false},
+ {SupportedIlluminaFormat.Bcl, "BaseCalls/" + laneDir(DEFAULT_LANE), cycleRange(4), true, true},
+ };
+ }
+
+ @Test(dataProvider = "perTilePerCycleFileFormats")
+ public void perTilePerCycleFileUtilsTest(final SupportedIlluminaFormat format, final String parentDir,
+ final int[] cycles, final boolean createEarlySkippedCycles,
+ final boolean createLateSkippedCycles) {
+ if (createEarlySkippedCycles) {
+ makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycleRange(1, cycles[0]), null);
+ }
+
+ makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycles, null);
+
+ if (createLateSkippedCycles) {
+ makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycleRange(cycles[cycles.length - 1] + 1, DEFAULT_LAST_CYCLE), null);
+ }
+
+ final IlluminaFileUtil fileUtil = new IlluminaFileUtil(basecallDir, DEFAULT_LANE);
+ final PerTilePerCycleFileUtil pcfu = (PerTilePerCycleFileUtil) fileUtil.getUtil(format);
+
+ Assert.assertTrue(pcfu.filesAvailable());
+ testDefaultPerTilePerCycleUtil(pcfu, (parentDir == null) ? intensityDir : new File(intensityDir, parentDir), cycles);
+ testSubsetDefaultPerTilePerCycleUtil(pcfu, (parentDir == null) ? intensityDir : new File(intensityDir, parentDir), cycles);
+
+ final IlluminaFileUtil noFilesFu = new IlluminaFileUtil(basecallDir, DEFAULT_LANE + 20);
+ final PerTilePerCycleFileUtil noFilesPcfu = (PerTilePerCycleFileUtil) noFilesFu.getUtil(format);
+
+ Assert.assertFalse(noFilesPcfu.filesAvailable());
+ Assert.assertTrue(noFilesPcfu.getFiles().isEmpty());
+ Assert.assertTrue(noFilesPcfu.getFiles(DEFAULT_TILES).isEmpty());
+ }
+
+ @DataProvider(name = "missingCycleDataRanges")
+ public Object[][] missingCycleDataRanges() {
+ return new Object[][]{
+ {makeList(new Range(10, 15))},
+ {makeList(new Range(9, 12), new Range(14, 15))}
+ };
+ }
+
+ @Test(expectedExceptions = PicardException.class, dataProvider = "missingCycleDataRanges")
+ public void perTilePerCycleFileUtilsMissingCycleTest(final List<Range> cycleRangesToMake) {
+ final SupportedIlluminaFormat format = SupportedIlluminaFormat.Bcl;
+
+ for (final Range range : cycleRangesToMake) {
+ makeFiles(format, intensityDir, DEFAULT_LANE, DEFAULT_TILES, cycleRange(range), null);
+ }
+
+ final IlluminaFileUtil fileUtil = new IlluminaFileUtil(basecallDir, DEFAULT_LANE);
+ final PerTilePerCycleFileUtil pcfu = (PerTilePerCycleFileUtil) fileUtil.getUtil(format);
+
+ Assert.assertTrue(pcfu.filesAvailable());
+ final int[] cycles = cycleRange(9, 16);
+ final CycleIlluminaFileMap cfm = pcfu.getFiles(cycles);
+ cfm.assertValid(DEFAULT_TILES, cycles);
+ }
+
+
+ public static void makeFiles(final SupportedIlluminaFormat format, final File intensityDir, final int lane,
+ final List<Integer> tiles, final int[] cycles) {
+ makeFiles(format, intensityDir, lane, tiles, cycles, null);
+ }
+
+ public static void makeFiles(final SupportedIlluminaFormat format, final File intensityDir, final int lane,
+ final List<Integer> tiles, final int[] cycles, final String compression) {
+ String laneDir = String.valueOf(lane);
+ while (laneDir.length() < 3) {
+ laneDir = "0" + laneDir;
+ }
+ laneDir = "L" + laneDir;
+
+
+ final File basecallDir = new File(intensityDir, "BaseCalls");
+ final File basecallLaneDir = new File(basecallDir, laneDir);
+ final File intensityLaneDir = new File(intensityDir, laneDir);
+
+ switch (format) {
+ //per tile formats
+ case Barcode:
+ makePerTileFiles(basecallDir, lane, tiles, maybeAddExt("_barcode.txt", compression), true);
+ break;
+
+ case Pos:
+ makePerTileFiles(intensityDir, lane, tiles, maybeAddExt("_pos.txt", compression), false);
+ break;
+
+ case Locs:
+ makePerTileFiles(intensityLaneDir, lane, tiles, maybeAddExt(".locs", null), false);
+ break;
+
+ case Clocs:
+ makePerTileFiles(intensityLaneDir, lane, tiles, maybeAddExt(".clocs", null), false);
+ break;
+
+ case Filter:
+ makePerTileFiles(basecallLaneDir, lane, tiles, maybeAddExt(".filter", null), true);
+ break;
+
+ //per tile per cycle formats
+ case Bcl:
+ makePerTilePerCycleFiles(basecallLaneDir, lane, tiles, cycles, ".bcl");
+ break;
+ }
+ }
+
+ private static void makePerTileFiles(final File parentDir, final int lane, final List<Integer> tiles, final String ext, final boolean longName) {
+ if (!parentDir.exists()) {
+ if (!parentDir.mkdir()) {
+ throw new RuntimeException("Couldn't create directory " + parentDir.getAbsolutePath());
+ }
+ }
+
+ for (final Integer tile : tiles) {
+ writeNonEmptyFile(new File(parentDir, "s_" + lane + "_" + longTile(tile, longName) + ext));
+ }
+ }
+
+ private static void makePerTilePerCycleFiles(final File parentDir, final int lane, final List<Integer> tiles, final int[] cycles, final String ext) {
+ if (!parentDir.exists()) {
+ if (!parentDir.mkdir()) {
+ throw new RuntimeException("Couldn't create directory " + parentDir.getAbsolutePath());
+ }
+ }
+
+ for (final int cycle : cycles) {
+ final File cycleDir = new File(parentDir, "C" + cycle + ".1");
+ if (!cycleDir.exists()) {
+ if (!cycleDir.mkdir()) {
+ throw new RuntimeException("Couldn't create directory " + cycleDir.getAbsolutePath());
+ }
+ }
+
+ for (final Integer tile : tiles) {
+ writeNonEmptyFile(new File(cycleDir, "s_" + lane + "_" + tile + ext));
+ }
+ }
+ }
+
+ private static List<String> makeCycleFileList(final File dir, final String ext, final int lane, final int[] cycles, final int... tiles) {
+ return makeCycleFileList(dir, ext, lane, cycles, false, tiles);
+ }
+
+ private static List<String> makeCycleFileList(final File dir, final String ext, final int lane, final int[] cycles, final boolean longFmt, final int... tiles) {
+ final List<String> files = new ArrayList<String>();
+ final File laneDir = new File(dir, laneDir(lane));
+
+ for (final int cycle : cycles) {
+ final File cycleDir = new File(laneDir, "C" + cycle + ".1");
+ for (final Integer tile : tiles) {
+ files.add(cycleDir + "/s_" + lane + "_" + longTile(tile, longFmt) + ext);
+ }
+ }
+
+ return files;
+ }
+
+ private static void writeNonEmptyFile(final File file) {
+ try {
+ final OutputStream outputStream = new DataOutputStream(new FileOutputStream(file));
+ final int expectedLength = 10;
+ outputStream.write(expectedLength);
+ // The negative beginning index is to accommodate the header. Fancy. Ever so fancy.
+ for (int i = -3; i < expectedLength; i++) outputStream.write(0x0);
+ outputStream.close();
+ } catch (final IOException e) {
+ throw new RuntimeException("Exception trying to create non-empty file!", e);
+ }
+ }
+
+ private static String laneDir(final int lane) {
+ String ldir = String.valueOf(lane);
+ while (ldir.length() < 3) {
+ ldir = "0" + ldir;
+ }
+ return "L" + ldir;
+ }
+
+ private static String longTile(final int tile, final boolean makeLong) {
+ if (makeLong) {
+ String lt = String.valueOf(tile);
+ while (lt.length() < 4) {
+ lt = "0" + lt;
+ }
+ return lt;
+ } else {
+ return String.valueOf(tile);
+ }
+ }
+
+ private static String maybeAddExt(final String fileExt, final String compressionExt) {
+ if (compressionExt != null) {
+ return fileExt + compressionExt;
+ } else {
+ return fileExt;
+ }
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/PerTileParserTest.java b/src/tests/java/picard/illumina/parser/PerTileParserTest.java
new file mode 100644
index 0000000..4f69334
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/PerTileParserTest.java
@@ -0,0 +1,173 @@
+package picard.illumina.parser;
+
+import htsjdk.samtools.util.CloseableIterator;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+
+public class PerTileParserTest {
+
+ private static final Map<String, List<Integer>> FILE_TO_VALUE = new HashMap<String, List<Integer>>();
+ private static final IlluminaFileMap FILE_MAP = new IlluminaFileMap();
+ static {
+ FILE_MAP.put(1, new File("s_1_1"));
+ FILE_MAP.put(2, new File("s_1_2"));
+ FILE_MAP.put(3, new File("s_1_3"));
+ FILE_MAP.put(4, new File("s_1_4"));
+ FILE_MAP.put(5, new File("s_1_5"));
+ FILE_TO_VALUE.put("s_1_1", makeList(1, 2, 3, 4, 5));
+ FILE_TO_VALUE.put("s_1_2", makeList(6, 7, 8, 9, 10));
+ FILE_TO_VALUE.put("s_1_3", makeList(11, 12, 13, 14, 15));
+ FILE_TO_VALUE.put("s_1_4", makeList(16, 17, 18, 19, 20));
+ FILE_TO_VALUE.put("s_1_5", makeList(21, 22, 23, 24, 25));
+ }
+
+ class DummyDt implements IlluminaData {
+ public DummyDt(final Integer value) {
+ this.value = value;
+ }
+ public final Integer value;
+ }
+
+ class MockPerTileParser extends PerTileParser<DummyDt> {
+
+ public MockPerTileParser(final IlluminaFileMap tilesToFiles) {
+ super(tilesToFiles);
+ }
+
+ @Override
+ protected CloseableIterator<DummyDt> makeTileIterator(final File file) {
+ return new CloseableIterator<DummyDt>() {
+ private final Iterator<Integer> values = FILE_TO_VALUE.get(file.getName()).iterator();
+
+ @Override
+ public void close() {
+
+ }
+
+ @Override
+ public boolean hasNext() {
+ return values.hasNext();
+ }
+
+ @Override
+ public DummyDt next() {
+ return new DummyDt(values.next());
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ @Override
+ public Set<IlluminaDataType> supportedTypes() {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+ }
+
+ @Test
+ public void basicIterationTest() {
+ final IlluminaFileMap fm = new IlluminaFileMap();
+ fm.put(1, new File("s_1_1"));
+ fm.put(2, new File("s_1_2"));
+ fm.put(3, new File("s_1_3"));
+ fm.put(4, new File("s_1_4"));
+ fm.put(5, new File("s_1_5"));
+
+ final PerTileParser<DummyDt> ddts = new MockPerTileParser(fm);
+
+ for(int i = 0; i < 25; i++) {
+ Assert.assertTrue(ddts.hasNext());
+ Assert.assertEquals(ddts.next().value, new Integer(i+1));
+ }
+
+ Assert.assertFalse(ddts.hasNext());
+ }
+
+ @DataProvider(name="seekingTests")
+ public Object[][] seekingTests() {
+ return new Object[][] {
+ {1, 4, null, null},
+ {15, 1, null, null},
+ {25, 3, null, null},
+ {24, 5, null, null},
+ {1, 3, 10, 1},
+ {1, 3, 15, 2},
+ {12, 2, 15, 4},
+ {6, 3, 12, 5},
+ {14, 5, 25, 2}
+ };
+ }
+
+ @Test(dataProvider = "seekingTests")
+ public void seekToTileTest(Integer firstSeekPos, Integer firstTile, Integer secondSeekPos, Integer secondTile) {
+ final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
+
+ for(int i = 1; i <= firstSeekPos; i++) {
+ Assert.assertTrue(ddts.hasNext());
+ Assert.assertEquals(ddts.next().value, new Integer(i));
+ }
+
+ ddts.seekToTile(firstTile);
+
+ int start = firstTile * 5 - 4;
+ if(secondSeekPos != null) {
+ for(int i = start; i <= secondSeekPos; i++) {
+ Assert.assertTrue(ddts.hasNext());
+ Assert.assertEquals(ddts.next().value, new Integer(i));
+ }
+ ddts.seekToTile(secondTile);
+ start = secondTile * 5 - 4;
+ }
+
+ for(int i = start; i <= 25; i++) {
+ Assert.assertTrue(ddts.hasNext());
+ Assert.assertEquals(ddts.next().value, new Integer(i));
+ }
+
+ Assert.assertFalse(ddts.hasNext());
+ }
+
+ @DataProvider(name="missingTiles")
+ public Object [][] missingTiles() {
+ return new Object [][] {
+ {-1}, {10}, {Integer.MAX_VALUE}, {Integer.MIN_VALUE}
+ };
+ }
+
+ @Test(expectedExceptions = PicardException.class, dataProvider="missingTiles")
+ public void missingTileTest(final Integer missingTile) {
+ final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
+ ddts.seekToTile(missingTile);
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void failVerifyTestTooManyTiles() {
+ final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
+ ddts.verifyData(makeList(1,2,3,4,5,6), null);
+ }
+ @Test(expectedExceptions = PicardException.class)
+ public void failVerifyTestMissingTile() {
+ final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
+ ddts.verifyData(makeList(1,2,4,5), null);
+ }
+
+ @Test
+ public void passVerifyTest() {
+ final PerTileParser<DummyDt> ddts = new MockPerTileParser(FILE_MAP);
+ ddts.verifyData(makeList(1,2,3,4,5), null);
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/PerTilePerCycleParserTest.java b/src/tests/java/picard/illumina/parser/PerTilePerCycleParserTest.java
new file mode 100644
index 0000000..25332af
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/PerTilePerCycleParserTest.java
@@ -0,0 +1,197 @@
+package picard.illumina.parser;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+
+public class PerTilePerCycleParserTest {
+ public static final List<Integer> DEFAULT_TILES = makeList(1, 2, 3, 4);
+ public static final int[] DEFAULT_OUTPUT_LENGTHS = new int[]{10, 5, 5};
+ public static final int[] CYCLES = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
+ public static final int MAX_CYCLE = 20;
+ public static final OutputMapping OUTPUT_MAPPING = new OutputMapping(new ReadStructure("20T"));
+
+ private class MockCycledIlluminaData implements IlluminaData {
+ private final List<String> values;
+
+ public MockCycledIlluminaData() {
+ this.values = new ArrayList<String>();
+ }
+
+ public void addValue(final String value) {
+ values.add(value);
+ }
+
+ public List<String> getValues() {
+ return values;
+ }
+ }
+
+ class MockPerTileCycleParser extends PerTileCycleParser<MockCycledIlluminaData> {
+ private final int[] expectedOutputLengths;
+
+ public MockPerTileCycleParser(final File directory, final int lane, final CycleIlluminaFileMap tilesToCycleFiles, final OutputMapping outputMapping) {
+ super(directory, lane, tilesToCycleFiles, outputMapping);
+ expectedOutputLengths = outputMapping.getOutputReadLengths();
+ this.initialize();
+ }
+
+ @Override
+ protected CycleFilesParser<MockCycledIlluminaData> makeCycleFileParser(final List<File> files) {
+ return new CycleFilesParser<MockCycledIlluminaData>() {
+ int currentCycle = 0;
+
+ @Override
+ public void close() {
+
+ }
+
+ @Override
+ public MockCycledIlluminaData next() {
+ final MockCycledIlluminaData ild = new MockCycledIlluminaData();
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+
+ ild.addValue(str_del(files.get(currentCycle++)));
+ return ild;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return currentCycle < MAX_CYCLE;
+ }
+ };
+ }
+
+ @Override
+ public void initialize() {
+ seekToTile(currentTile);
+ }
+
+ public Set<IlluminaDataType> supportedTypes() {
+ return null;
+ }
+
+ @Override
+ public void close() {
+ //no-op
+ }
+ }
+
+ public List<String> getFileNames(final List<Integer> tiles) {
+ final List<String> fileNames = new ArrayList<String>();
+ for (final Integer tile : tiles) {
+ for (int i = 1; i <= MAX_CYCLE; i++) {
+ fileNames.add(str_del(tile, i));
+ }
+ }
+ return fileNames;
+ }
+
+ public CycleIlluminaFileMap getIlluminaFileMaps(final List<Integer> tiles, final int[] cycles) {
+ final CycleIlluminaFileMap cycleFileMap = new CycleIlluminaFileMap();
+ for (final int cycle : cycles) {
+ final IlluminaFileMap fileMap = new IlluminaFileMap();
+ for (final Integer tile : tiles) {
+ fileMap.put(tile, new File(str_del(tile, cycle)));
+ }
+ cycleFileMap.put(cycle, fileMap);
+ }
+ return cycleFileMap;
+ }
+
+ public static String str_del(final Object... objects) {
+ String out = objects[0].toString();
+ for (int i = 1; i < objects.length; i++) {
+ out += "_" + objects[i];
+ }
+ return out;
+ }
+
+ @Test
+ public void basicIterationTest() {
+ final List<String> expectedValues = getFileNames(DEFAULT_TILES);
+ final PerTileCycleParser<MockCycledIlluminaData> parser = makeParser();
+
+ int index = 0;
+ while (parser.hasNext()) {
+ index = compareValues(parser.next().values, expectedValues, index);
+ }
+
+ Assert.assertEquals(index, expectedValues.size());
+ }
+
+
+ private int compareValues(final List<String> parserValues, final List<String> expectedValues, int index) {
+ for (final String parserValue : parserValues) {
+ Assert.assertTrue(index < expectedValues.size());
+ Assert.assertEquals(parserValue, expectedValues.get(index), "With index " + index);
+ ++index;
+ }
+
+ return index;
+ }
+
+ public PerTileCycleParser<MockCycledIlluminaData> makeParser() {
+ final CycleIlluminaFileMap fileMap = getIlluminaFileMaps(DEFAULT_TILES, CYCLES);
+ return new MockPerTileCycleParser(new File("FakeFile"), 1, fileMap, OUTPUT_MAPPING);
+ }
+
+ @DataProvider(name = "seekingTests")
+ public Object[][] seekingTests() {
+ return new Object[][]{
+ {1, 3, null, null},
+ {22, 1, null, null},
+ {38, 2, null, null},
+ {75, 4, null, null},
+ {1, 3, 70, 1},
+ {1, 3, 45, 2},
+ {12, 2, 59, 4},
+ {45, 3, 70, 3},
+ {14, 1, 5, 2}
+ };
+ }
+
+
+ @Test(dataProvider = "seekingTests")
+ public void seekingIterationTest(final Integer seekPos1, final Integer newTile1, final Integer seekPos2, final Integer newTile2) {
+ final List<String> expectedValues = getFileNames(DEFAULT_TILES);
+ final PerTileCycleParser<MockCycledIlluminaData> parser = makeParser();
+
+ int index = 0;
+ for (int i = 0; i <= seekPos1; i++) {
+ Assert.assertTrue(parser.hasNext());
+ index = compareValues(parser.next().values, expectedValues, index);
+ }
+
+ parser.seekToTile(newTile1);
+
+ index = (newTile1 - 1) * MAX_CYCLE;
+ if (seekPos2 != null) {
+ for (int i = index; i <= seekPos2; i++) {
+ Assert.assertTrue(parser.hasNext());
+ index = compareValues(parser.next().values, expectedValues, index);
+ }
+
+ parser.seekToTile(newTile2);
+ index = (newTile2 - 1) * MAX_CYCLE;
+ }
+
+ for (int i = index; i < MAX_CYCLE * DEFAULT_TILES.size(); i++) {
+ Assert.assertTrue(parser.hasNext());
+ index = compareValues(parser.next().values, expectedValues, index);
+ }
+
+ Assert.assertFalse(parser.hasNext());
+
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/PosParserTest.java b/src/tests/java/picard/illumina/parser/PosParserTest.java
new file mode 100644
index 0000000..062437e
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/PosParserTest.java
@@ -0,0 +1,206 @@
+package picard.illumina.parser;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import static htsjdk.samtools.util.CollectionUtil.makeList;
+
+public class PosParserTest {
+
+ public static final File TEST_DIR = new File("testdata/picard/illumina/parserTests/posParser");
+ public static final File S_1_1_POS = new File(TEST_DIR, "s_1_1_pos.txt");
+ public static final File S_1_2_POS = new File(TEST_DIR, "s_1_2_pos.txt");
+ public static final File S_1_3_POS = new File(TEST_DIR, "s_1_3_pos.txt");
+ public static final File S_9_3201_POS = new File(TEST_DIR, "s_9_3201_pos.txt");
+ public static final File S_9_3202_POS = new File(TEST_DIR, "s_9_3202_pos.txt");
+
+ static class TestResult {
+ public final int lane;
+ public final int tile;
+ public final float xPos;
+ public final float yPos;
+ public final int xQSeqCoord;
+ public final int yQSeqCoord;
+
+ public TestResult(final int lane, final int tile, final float xPos, final float yPos, final int xQseqCoord, final int yQSeqCoord) {
+ this.lane = lane;
+ this.tile = tile;
+ this.xPos = xPos;
+ this.yPos = yPos;
+ this.xQSeqCoord = xQseqCoord;
+ this.yQSeqCoord = yQSeqCoord;
+ }
+ }
+
+ public static List<TestResult> makeTestResults(final int lane, final int tile, final float [] xyPos, final int [] xyQseq) {
+ final ArrayList<TestResult> results = new ArrayList<TestResult>();
+ for(int i = 0; i < xyPos.length; i+=2) {
+ results.add(new TestResult(lane, tile, xyPos[i], xyPos[i+1], xyQseq[i], xyQseq[i+1]));
+ }
+ return results;
+ }
+
+ public static Map<String, List<TestResult>> TEST_DATA = new HashMap<String, List<TestResult>>();
+ static {
+ float[] pos = {
+ 101.35f, 207.8f,
+ 102.88f, 209.22f,
+ 0.35f, 211.99f,
+ 10.11f, 2540.55f,
+ 11011.81f, 211
+ };
+
+ int[] qseq = {
+ 2014, 3078,
+ 2029, 3092,
+ 1004, 3120,
+ 1101, 26406,
+ 111118, 3110
+ };
+ TEST_DATA.put(S_1_1_POS.getName(), makeTestResults(1,1, pos, qseq));
+
+ pos = new float[] {
+ 2101.35f, 207.82f,
+ 202.88f, 209.222f,
+ 2.35f, 211.992f,
+ 2.11f, 2540.552f,
+ 21011.81f, 2112f
+ };
+
+ qseq = new int[]{
+ 22014, 3078,
+ 3029, 3092,
+ 1024, 3120,
+ 1021, 26406,
+ 211118, 22120
+ };
+ TEST_DATA.put(S_1_2_POS.getName(), makeTestResults(1,2, pos, qseq));
+
+ pos = new float[] {
+ 301.35f, 207.83f,
+ 302.88f, 209.23f,
+ 0.35f, 911.993f,
+ 30.11f, 2540.553f
+ };
+
+ qseq = new int[]{
+ 4014, 3078,
+ 4029, 3092,
+ 1004, 10120,
+ 1301, 26406
+ };
+ TEST_DATA.put(S_1_3_POS.getName(), makeTestResults(1,3, pos, qseq));
+
+ pos = new float[] {
+ 901.00f, 8011.00f,
+ 9.05f, 32.00f,
+ 3201.11f, 32001.00f
+ };
+
+ qseq = new int[]{
+ 10010, 81110,
+ 1091, 1320,
+ 33011, 321010
+ };
+ TEST_DATA.put(S_9_3201_POS.getName(), makeTestResults(9,3201, pos, qseq));
+
+ pos = new float[] {
+ 3252f, 7785f,
+ 97.350f, 0.01f,
+ 88.00f, 942.01f,
+ 87.85f, 70.01f,
+ 32022.000f, 32000.0f
+ };
+
+ qseq = new int[]{
+ 33520, 78850,
+ 1974, 1000,
+ 1880, 10420,
+ 1879, 1700,
+ 321220, 321000
+ };
+ TEST_DATA.put(S_9_3202_POS.getName(), makeTestResults(9,3202, pos, qseq));
+ }
+
+ public static void compareResults(final TestResult tr, final PositionalData pd, final int index) {
+ Assert.assertEquals(tr.xQSeqCoord, pd.getXCoordinate(), " At index " + index);
+ Assert.assertEquals(tr.yQSeqCoord, pd.getYCoordinate(), " At index " + index);
+ }
+
+ @DataProvider(name = "singleTileData")
+ public Object [][] singleTileData() {
+ return new Object[][]{
+ {1, 1, S_1_1_POS},
+ {1, null, S_1_1_POS},
+ {3202, 3202, S_9_3202_POS},
+ {3202, null, S_9_3202_POS}
+ };
+ }
+
+ @Test(dataProvider = "singleTileData")
+ public void singleTileDataTest(final int tile, final Integer startingTile, final File file) {
+ final IlluminaFileMap fm = new IlluminaFileMap();
+ fm.put(tile, file);
+
+ final PosParser parser = (startingTile == null) ? new PosParser(fm, IlluminaFileUtil.SupportedIlluminaFormat.Pos) :
+ new PosParser(fm, startingTile, IlluminaFileUtil.SupportedIlluminaFormat.Pos);
+ final Iterator<TestResult> expected = TEST_DATA.get(file.getName()).iterator();
+
+ int index = 0;
+ while(expected.hasNext()) {
+ Assert.assertTrue(parser.hasNext());
+ compareResults(expected.next(), parser.next(), index);
+ ++index;
+ }
+
+ Assert.assertFalse(parser.hasNext());
+ parser.close();
+ }
+
+ @DataProvider(name = "multiTileData")
+ public Object [][] multiTileData() {
+ return new Object[][]{
+ {makeList(1,2,3), null, makeList(S_1_1_POS, S_1_2_POS, S_1_3_POS)},
+ {makeList(1,2,3), 1, makeList(S_1_1_POS, S_1_2_POS, S_1_3_POS)},
+ {makeList(1,3), 0, makeList(S_1_1_POS, S_1_3_POS)},
+ {makeList(3201,3202), null, makeList(S_9_3201_POS, S_9_3202_POS)},
+ {makeList(3201,3202), 1, makeList(S_9_3201_POS, S_9_3202_POS)},
+ };
+ }
+
+ @Test(dataProvider = "multiTileData")
+ public void multiTileDataTest(final List<Integer> tiles, final Integer startingTileIndex, final List<File> files) {
+ final IlluminaFileMap fm = new IlluminaFileMap();
+ for(int i = 0; i < tiles.size(); i++) {
+ fm.put(tiles.get(i), files.get(i));
+ }
+
+ final PosParser parser = (startingTileIndex == null) ? new PosParser(fm, IlluminaFileUtil.SupportedIlluminaFormat.Pos) :
+ new PosParser(fm, tiles.get(startingTileIndex), IlluminaFileUtil.SupportedIlluminaFormat.Pos);
+ final List<TestResult> expectedResultsList = new ArrayList<TestResult>();
+ final int t1 = (startingTileIndex != null) ? startingTileIndex : 0;
+ for(int i = t1; i < tiles.size(); i++) {
+ expectedResultsList.addAll(TEST_DATA.get(files.get(i).getName()));
+ }
+
+ final Iterator<TestResult> expected = expectedResultsList.iterator();
+
+ int index = 0;
+ while(expected.hasNext()) {
+ Assert.assertTrue(parser.hasNext());
+ compareResults(expected.next(), parser.next(), index);
+ ++index;
+ }
+
+ Assert.assertFalse(parser.hasNext());
+ parser.close();
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/fakers/BclFileFakerTest.java b/src/tests/java/picard/illumina/parser/fakers/BclFileFakerTest.java
new file mode 100644
index 0000000..6db620c
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/fakers/BclFileFakerTest.java
@@ -0,0 +1,59 @@
+package picard.illumina.parser.fakers;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
+import picard.illumina.parser.readers.BclReader;
+
+import java.io.File;
+
+/**
+ * The MIT License
+ * <p/>
+ * Copyright (c) 2014 The Broad Institute
+ * <p/>
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * <p/>
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * <p/>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+public class BclFileFakerTest {
+
+ @Test
+ public void testFileLengthMatchesHeaderLength() throws Exception {
+ final File fakeFile = File.createTempFile("BclFileFakerTest", ".bcl");
+ fakeFile.deleteOnExit();
+
+ new BclFileFaker().fakeFile(fakeFile, 100000);
+ // .make() has a number of checks for the file
+ final BclReader bclReader = new BclReader(
+ fakeFile,
+ new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY), false);
+ Assert.assertEquals(100000, BclReader.getNumberOfClusters(fakeFile));
+ Assert.assertEquals(BclReader.getNumberOfClusters(fakeFile), fakeFile.length() - 4);
+ }
+
+ @Test
+ public void testGZFileIsActuallyGZipped() throws Exception {
+ final File fakeFile = File.createTempFile("BclFileFakerTest", ".bcl.gz");
+ fakeFile.deleteOnExit();
+
+ new BclFileFaker().fakeFile(fakeFile, 100000);
+ new BclReader(
+ fakeFile,
+ new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY), false);
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/readers/AbstractIlluminaPositionFileReaderTest.java b/src/tests/java/picard/illumina/parser/readers/AbstractIlluminaPositionFileReaderTest.java
new file mode 100644
index 0000000..417036d
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/AbstractIlluminaPositionFileReaderTest.java
@@ -0,0 +1,156 @@
+package picard.illumina.parser.readers;
+
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+
+public class AbstractIlluminaPositionFileReaderTest {
+
+ //Pos values should never be negative
+ private static final float [] X_COORDS = new float[] {
+ 0.00f, 0.012f, 0.09f, 1.44f, 23.45f, 155.893f, 588.921f, 801f, 1201.182f, 101.25f,
+ 13201.01f, 0.59f, 0.3540f, 9999999.99f, 7989.88999f, 9298.134f, 12.3f, 109.09f, 54.3f, 17.15f
+ };
+
+ private static final int [] X_QSEQ_COORDS = new int [] {
+ 1000, 1000, 1001, 1014, 1235, 2559, 6889, 9010, 13012, 2013,
+ 133010, 1006, 1004, 100001000, 80899, 93981, 1123, 2091, 1543, 1172
+ };
+
+ private static final float [] Y_COORDS = new float[] {
+ //A note on index 2 -> this number causes truncation of the float, presumably that's fine as
+ //Illumina describes the value as a floating point number
+ 679.99f, 32.0145f, 1878854.89f, 0.00f, 23.45f, 9875.64f, 42.42f, 64.01530f, 103.25f, 102.75f,
+ 13201.01f, 0.59f, 0.3540f, 0.02f, 9875.66f, 9298.134f, 12.3f, 67.012f, 0.1254f, 19.54f
+ };
+
+ private static final int [] Y_QSEQ_COORDS = new int [] {
+ 7800, 1320, 18789548, 1000, 1235, 99756, 1424, 1640, 2033, 2028,
+ 133010, 1006, 1004, 1000, 99757, 93981, 1123, 1670, 1001, 1195
+ };
+
+
+ private static class MockPositionFileReader extends AbstractIlluminaPositionFileReader {
+ private final float [] xCoords;
+ private final float [] yCoords;
+ private int currentCluster;
+
+ public MockPositionFileReader(final String fileName, final int lane, final int tile, final float [] xCoords, final float [] yCoords) {
+ super(new File(fileName));
+ this.xCoords = xCoords;
+ this.yCoords = yCoords;
+ currentCluster = 0;
+ }
+
+ public MockPositionFileReader(final int lane, final int tile, final float [] xCoords, final float [] yCoords) {
+ super(new File("s_" + lane + "_" + tile + "_pos.txt.gz"));
+ this.xCoords = xCoords;
+ this.yCoords = yCoords;
+ currentCluster = 0;
+ }
+
+ @Override
+ protected PositionInfo unsafeNextInfo() {
+ PositionInfo pi = new PositionInfo(xCoords[currentCluster], yCoords[currentCluster], getLane(), getTile());
+ ++currentCluster;
+ return pi;
+ }
+
+ @Override
+ protected String makeExceptionMsg() {
+ return "Abstract IlluminaPositionFileReaderTest currentCluster=" + currentCluster;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return currentCluster < xCoords.length;
+ }
+
+ @Override
+ public void close() {
+ }
+ }
+
+ @Test
+ public void validReaderTest() {
+ final int lane = 2;
+ final int tile = 8;
+ final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader(lane, tile, X_COORDS, Y_COORDS);
+
+ int index = 0;
+ while(reader.hasNext()) {
+ AbstractIlluminaPositionFileReader.PositionInfo pi = reader.next();
+ Assert.assertEquals(pi.lane, lane);
+ Assert.assertEquals(pi.tile, tile);
+ Assert.assertEquals(pi.xPos, X_COORDS[index]);
+ Assert.assertEquals(pi.yPos, Y_COORDS[index]);
+ Assert.assertEquals(pi.xQseqCoord, X_QSEQ_COORDS[index]);
+ Assert.assertEquals(pi.yQseqCoord, Y_QSEQ_COORDS[index]);
+ ++index;
+ }
+
+ if(index < X_COORDS.length) {
+ throw new RuntimeException("Elements still remaining in test data!");
+ }
+ }
+
+ @DataProvider(name="invalidPositions")
+ public Object [][] invalidPositions() {
+ return new Object[][] {
+ {new float[]{0f, 5f, -11f}, new float[]{1f, 12f, 13f}},
+ {new float[]{-15.05f}, new float[]{19801f}},
+ {new float[]{10.05f, 3f, 8f}, new float[]{-120899.723f, 4f, 9f}},
+ {new float[]{9.0f, 2.3f, AbstractIlluminaPositionFileReader.MAX_POS + 1}, new float[]{3.2f, 8.1f, 99.1f}},
+ {new float[]{0.01f}, new float[]{AbstractIlluminaPositionFileReader.MAX_POS + 1000}}
+ };
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class, dataProvider = "invalidPositions")
+ public void invalidReaderTest(float [] xCoords, float [] yCoords){
+ final int lane = 3;
+ final int tile = 4;
+
+ final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader(lane, tile, xCoords, yCoords);
+ int index = 0;
+ while(reader.hasNext()) {
+ AbstractIlluminaPositionFileReader.PositionInfo pi = reader.next();
+ Assert.assertEquals(pi.lane, lane);
+ Assert.assertEquals(pi.tile, tile);
+ Assert.assertEquals(pi.xPos, xCoords[index]);
+ Assert.assertEquals(pi.yPos, yCoords[index]);
+ ++index;
+ }
+ }
+
+ @DataProvider(name = "invalidFileNames")
+ public Object [][] invalidFileNames() {
+ return new Object[][]{
+ {"whatever.locs"},
+ {"whatever.clocs"},
+ {"whatever.pos"},
+ {"s_1.clocs"},
+ {"s__2.clocs"},
+ {"s_1_4.Notclocs"},
+ {"a_1_4.pos"},
+ {"a_1_4.pos.txt"}
+ };
+ }
+
+ @Test(expectedExceptions = PicardException.class, dataProvider = "invalidFileNames")
+ public void invalidFileNamesTest(final String fileName){
+ final int lane = 3;
+ final int tile = 4;
+
+ final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader(fileName, 0, 0, null, null);
+ }
+
+ @Test(expectedExceptions = UnsupportedOperationException.class)
+ public void iteratorRemoveTest() {
+ final AbstractIlluminaPositionFileReader reader = new MockPositionFileReader("s_1_1_pos.txt", 0, 0, null, null);
+ reader.remove();
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/readers/BclReaderTest.java b/src/tests/java/picard/illumina/parser/readers/BclReaderTest.java
new file mode 100644
index 0000000..659785e
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/BclReaderTest.java
@@ -0,0 +1,172 @@
+package picard.illumina.parser.readers;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.illumina.parser.BclData;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+public class BclReaderTest {
+
+ public static final File TestDataDir = new File("testdata/picard/illumina/readerTests");
+ public static final File PASSING_BCL_FILE = new File(TestDataDir, "bcl_passing.bcl");
+ public static final File QUAL_0FAILING_BCL_FILE = new File(TestDataDir, "bcl_failing.bcl");
+ public static final File QUAL_1FAILING_BCL_FILE = new File(TestDataDir, "bcl_failing2.bcl");
+ public static final File FILE_TOO_LONG = new File(TestDataDir, "bcl_tooLong.bcl");
+ public static final File FILE_TOO_SHORT = new File(TestDataDir, "bcl_tooShort.bcl");
+
+ public static final char[] expectedBases = new char[]{
+ 'C', 'A', 'A', 'A', 'T', 'C', 'T', 'G', 'T', 'A', 'A', 'G', 'C', 'C', 'A', 'A',
+ 'C', 'A', 'C', 'C', 'A', 'A', 'C', 'G', 'A', 'T', 'A', 'C', 'A', 'A', 'C', 'A',
+ 'T', 'G', 'C', 'A', 'C', 'A', 'A', 'C', 'G', 'C', 'A', 'A', 'G', 'T', 'G', 'C',
+ 'A', 'C', 'G', 'T', 'A', 'C', 'A', 'A', 'C', 'G', 'C', 'A', 'C', 'A', 'T', 'T',
+ 'T', 'A', 'A', 'G', 'C', 'G', 'T', 'C', 'A', 'T', 'G', 'A', 'G', 'C', 'T', 'C',
+ 'T', 'A', 'C', 'G', 'A', 'A', 'C', 'C', 'C', 'A', 'T', 'A', 'T', 'G', 'G', 'G',
+ 'C', 'T', 'G', 'A', 'A', '.', '.', 'G', 'A', 'C', 'C', 'G', 'T', 'A', 'C', 'A',
+ 'G', 'T', 'G', 'T', 'A', '.'
+ };
+
+ public static final int[] expectedQuals = new int[]{
+ 18, 29, 8, 17, 27, 25, 28, 27, 9, 29, 8, 20, 25, 24, 27, 27,
+ 30, 8, 19, 24, 29, 29, 25, 28, 8, 29, 26, 24, 29, 8, 18, 8,
+ 29, 28, 26, 29, 25, 8, 26, 25, 28, 25, 8, 28, 28, 27, 29, 26,
+ 25, 26, 27, 25, 8, 18, 8, 26, 24, 29, 25, 8, 24, 8, 25, 27,
+ 27, 25, 8, 28, 24, 27, 25, 25, 8, 27, 25, 8, 16, 24, 28, 25,
+ 28, 8, 24, 27, 25, 8, 20, 29, 24, 27, 28, 8, 23, 10, 23, 11,
+ 15, 11, 10, 12, 12, 2, 2, 31, 24, 8, 4, 36, 12, 17, 21, 4,
+ 8, 12, 18, 23, 27, 2
+ };
+
+ public byte[] qualsAsBytes() {
+ final byte[] byteVals = new byte[expectedQuals.length];
+ for (int i = 0; i < byteVals.length; i++) {
+ byteVals[i] = (byte) expectedQuals[i];
+ }
+ return byteVals;
+ }
+
+ @Test
+ public void readValidFile() {
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
+ final BclReader reader = new BclReader(PASSING_BCL_FILE, bclQualityEvaluationStrategy, false);
+ final byte[] quals = qualsAsBytes();
+
+ Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
+
+ int readNum = 0;
+ while (readNum < reader.numClustersPerCycle[0]) {
+ final BclData bv = reader.next();
+ Assert.assertEquals(bv.bases[0][0], expectedBases[readNum], " On num cluster: " + readNum);
+ Assert.assertEquals(bv.qualities[0][0], quals[readNum], " On num cluster: " + readNum);
+ ++readNum;
+ }
+ bclQualityEvaluationStrategy.assertMinimumQualities();
+ reader.close();
+ }
+
+ @DataProvider(name = "failingFiles")
+ public Object[][] failingFiles() {
+ return new Object[][]{
+ {QUAL_0FAILING_BCL_FILE},
+ {QUAL_1FAILING_BCL_FILE},
+ {new File(TestDataDir, "SomeNoneExistentFile.bcl")},
+ {FILE_TOO_LONG},
+ {FILE_TOO_SHORT}
+ };
+ }
+
+ @Test(expectedExceptions = PicardException.class, dataProvider = "failingFiles")
+ public void failingFileTest(final File failingFile) {
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
+ final BclReader reader = new BclReader(failingFile, bclQualityEvaluationStrategy, false);
+ Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
+ while (reader.hasNext()) {
+ reader.next();
+ }
+ reader.close();
+ bclQualityEvaluationStrategy.assertMinimumQualities();
+ }
+
+ /**
+ * Asserts appropriate functionality of a quality-minimum-customized BLC reader, such that (1) if sub-Q2 qualities are found, the BCL
+ * reader does not throw an exception, (2) sub-minimum calls are set to quality 1 and (3) sub-minimum calls are counted up properly.
+ */
+ @Test
+ public void lowQualityButPassingTest() throws ExecutionException, InterruptedException {
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(1);
+
+ // Build a list of callables, then submit them and check for errors.
+ final Collection<Callable<Void>> callables = new LinkedList<Callable<Void>>();
+ for (int i = 0; i < 10; i++) {
+ final boolean even_i = i % 2 == 0;
+ callables.add(new Callable<Void>() {
+ @Override
+ public Void call() throws Exception {
+ final BclReader reader = new BclReader(even_i ? QUAL_1FAILING_BCL_FILE : QUAL_0FAILING_BCL_FILE,
+ bclQualityEvaluationStrategy, false);
+ Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
+ while (reader.hasNext()) {
+ reader.next();
+ }
+ reader.close();
+ return null;
+ }
+ });
+ }
+ final ExecutorService executorService = Executors.newFixedThreadPool(callables.size());
+ final Collection<Future<Void>> futures = new LinkedList<Future<Void>>();
+ for (final Callable<Void> callable : callables) {
+ futures.add(executorService.submit(callable));
+ }
+ for (final Future<Void> future : futures) {
+ future.get();
+ }
+ bclQualityEvaluationStrategy.assertMinimumQualities();
+ Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 0), 25);
+ Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 1), 25);
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void lowQualityAndFailingTest() throws ExecutionException, InterruptedException {
+ final BclQualityEvaluationStrategy bclQualityEvaluationStrategy = new BclQualityEvaluationStrategy(BclQualityEvaluationStrategy.ILLUMINA_ALLEGED_MINIMUM_QUALITY);
+
+ // Build a list of callables, then submit them and check for errors.
+ final Collection<Callable<Void>> callables = new LinkedList<Callable<Void>>();
+ for (int i = 0; i < 10; i++) {
+ final boolean even_i = i % 2 == 0;
+ callables.add(new Callable<Void>() {
+ @Override
+ public Void call() throws Exception {
+ final BclReader reader = new BclReader(even_i ? QUAL_1FAILING_BCL_FILE : QUAL_0FAILING_BCL_FILE,
+ bclQualityEvaluationStrategy, false);
+ Assert.assertEquals(reader.numClustersPerCycle[0], expectedBases.length);
+ while (reader.hasNext()) {
+ reader.next();
+ }
+ reader.close();
+ return null;
+ }
+ });
+ }
+ final ExecutorService executorService = Executors.newFixedThreadPool(callables.size());
+ final Collection<Future<Void>> futures = new LinkedList<Future<Void>>();
+ for (final Callable<Void> callable : callables) {
+ futures.add(executorService.submit(callable));
+ }
+ for (final Future<Void> future : futures) {
+ future.get();
+ }
+ Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 0), 25);
+ Assert.assertEquals((int) bclQualityEvaluationStrategy.getPoorQualityFrequencies().get((byte) 1), 25);
+ bclQualityEvaluationStrategy.assertMinimumQualities();
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/readers/ClocsFileReaderTest.java b/src/tests/java/picard/illumina/parser/readers/ClocsFileReaderTest.java
new file mode 100644
index 0000000..1a13c49
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/ClocsFileReaderTest.java
@@ -0,0 +1,160 @@
+package picard.illumina.parser.readers;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+
+public class ClocsFileReaderTest {
+
+ private static final File TEST_DIR = new File("testdata/picard/illumina/readerTests");
+ private static final File PASSING_CLOCS_FILE = new File(TEST_DIR, "s_2_1101.clocs");
+
+ public static final int blockSize = 25;
+ public static final File MULTI_BIN_PASSING_CLOCS_FILE = new File(TEST_DIR, "s_3_2102.clocs");
+ public static final File MBCF_W_EMPTY_BINS_AT_START = new File(TEST_DIR, "s_3_2103.clocs");
+ public static final File MBCF_W_EMPTY_BINS_AT_END = new File(TEST_DIR, "s_3_2104.clocs");
+ public static final File MBCF_W_EMPTY_BINS_THROUGHOUT = new File(TEST_DIR, "s_3_2105.clocs");
+ public static final int MULTI_BIN_PASSING_CLOCS_TILE = 2102;
+ public static final int MULTI_BIN_PASSING_CLOCS_LANE = 3;
+ public static final int MULTI_BIN_EXPECTED_NUM_VALUES = 271;
+
+ public static final File MBCF_MULTI_ROW_FILE = new File(TEST_DIR, "s_1_2106.clocs");
+
+ public static final float [][] MULTI_BIN_FLOAT_COORD = {
+ {9.7f, 1f}, {16.9f, 1.3f}, {18.5f, 22.6f}, {39.1f, 0.5f}, {46.1f, 1f},
+ {38.4f, 8.4f}, {59.7f, 1.1f}, {89.9f, 0.30f}, {87.1f, 0.6f}, {83.6f, 0.7f},
+ {111.4f, 14.3f}, {109.1f, 15f}, {105.7f, 15f}
+ };
+ public static final int [][] MULTI_BIN_Q_SEQ_COORD = {
+ {1097, 1010}, {1169, 1013}, {1185, 1226}, {1391, 1005}, {1461, 1010},
+ {1384, 1084}, {1597, 1011}, {1899, 1003}, {1871, 1006}, {1836, 1007},
+ {2114, 1143}, {2091, 1150}, {2057, 1150}
+ };
+ public static final int [] MULTI_BIN_INDICES = {
+ 0, 1, 34, 39, 40,
+ 59, 99, 163, 164, 165,
+ 268, 269, 270
+ };
+
+
+ public static final float [][] MULTI_BIN_FLOAT_COORD_MIXED_EMPTY_BINS = {
+ {9.7f, 1f}, {16.9f, 1.3f}, {18.5f, 22.6f}, {89.1f, 0.5f}, {96.1f, 1f},
+ {88.4f, 8.4f}, {109.7f, 1.1f}, {164.9f, 0.30f}, {162.1f, 0.6f}, {158.6f, 0.7f},
+ {186.4f, 14.3f}, {184.1f, 15f}, {180.7f, 15f}
+ };
+ public static final int [][] MULTI_BIN_Q_SEQ_COORD_MIXED_EMPTY_BINS = {
+ {1097, 1010}, {1169, 1013}, {1185, 1226}, {1891, 1005}, {1961, 1010},
+ {1884, 1084}, {2097, 1011}, {2649, 1003}, {2621, 1006}, {2586, 1007},
+ {2864, 1143}, {2841, 1150}, {2807, 1150}
+ };
+
+ //These are all essentially the same file but with 0 or more empty bins spread through them
+ @DataProvider(name = "multiBinPassingClocsFiles")
+ public Object [][] multiBinPassingClocsFiles() {
+ return new Object[][] {
+ {MULTI_BIN_PASSING_CLOCS_FILE, 0, 2102},
+ {MBCF_W_EMPTY_BINS_AT_START, 2, 2103},
+ {MBCF_W_EMPTY_BINS_AT_END, 0, 2104}
+ };
+ }
+
+ @Test(dataProvider = "multiBinPassingClocsFiles")
+ public void multiBinTest(final File multiBinPassingClocsFile, final int binShift, final int tile) {
+ final ClocsFileReader clocsReader = new ClocsFileReader(multiBinPassingClocsFile);
+
+ int tdIndex = 0;
+ int nextIndex = MULTI_BIN_INDICES[tdIndex];
+ for(int i = 0; i < MULTI_BIN_EXPECTED_NUM_VALUES; i++) {
+ Assert.assertTrue(clocsReader.hasNext());
+ final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
+
+ if(i == nextIndex) {
+ PosFileReaderTest.comparePositionInfo(piClocs, MULTI_BIN_FLOAT_COORD[tdIndex][0] + binShift * blockSize, MULTI_BIN_FLOAT_COORD[tdIndex][1],
+ MULTI_BIN_Q_SEQ_COORD[tdIndex][0] + binShift * blockSize * 10, MULTI_BIN_Q_SEQ_COORD[tdIndex][1],
+ MULTI_BIN_PASSING_CLOCS_LANE, tile,
+ tdIndex);
+ if(tdIndex < MULTI_BIN_INDICES.length-1) {
+ nextIndex = MULTI_BIN_INDICES[++tdIndex];
+ }
+ }
+ }
+
+ Assert.assertFalse(clocsReader.hasNext());
+ }
+
+ @Test
+ public void multiBinMixedEmptyBinTest() {
+ final ClocsFileReader clocsReader = new ClocsFileReader(MBCF_W_EMPTY_BINS_THROUGHOUT);
+
+ int tdIndex = 0;
+ int nextIndex = MULTI_BIN_INDICES[tdIndex];
+ for(int i = 0; i < MULTI_BIN_EXPECTED_NUM_VALUES; i++) {
+ Assert.assertTrue(clocsReader.hasNext());
+ final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
+
+ if(i == nextIndex) {
+ PosFileReaderTest.comparePositionInfo(piClocs, MULTI_BIN_FLOAT_COORD_MIXED_EMPTY_BINS[tdIndex][0], MULTI_BIN_FLOAT_COORD_MIXED_EMPTY_BINS[tdIndex][1],
+ MULTI_BIN_Q_SEQ_COORD_MIXED_EMPTY_BINS[tdIndex][0], MULTI_BIN_Q_SEQ_COORD_MIXED_EMPTY_BINS[tdIndex][1],
+ MULTI_BIN_PASSING_CLOCS_LANE, 2105, tdIndex);
+ if(tdIndex < MULTI_BIN_INDICES.length-1) {
+ nextIndex = MULTI_BIN_INDICES[++tdIndex];
+ }
+ }
+ }
+
+ Assert.assertFalse(clocsReader.hasNext());
+ }
+
+ public static final int [] MULTI_ROW_INDICES = new int[]{
+ 1, 10, 200, 2000, 10000, 30000
+ };
+ public static final float [][] MULTI_ROW_FLOAT_COORD = new float[][] {
+ {23.2f, 0.2f}, {16.7f, 5.7f}, {60.9f, 15.0f},
+ {596.2f, 19.6f}, {999.3f, 47.3f}, {1015f, 115.5f}
+ };
+
+ public static final int [][] MULTI_ROW_Q_SEQ_COORD = new int[][] {
+ {1232, 1002}, {1167, 1057 }, {1609, 1150},
+ {6962, 1196}, {10993, 1473}, {11150, 2155}
+ };
+
+ @Test
+ public void multiRowFileTest() {
+ final ClocsFileReader clocsReader = new ClocsFileReader(MBCF_MULTI_ROW_FILE);
+
+ int tdIndex = 0;
+ int nextIndex = MULTI_ROW_INDICES[tdIndex];
+ for(int i = 1; i <= 39891; i++) {
+ Assert.assertTrue(clocsReader.hasNext(), " i == " + i);
+ final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
+
+ if(i == nextIndex) {
+ PosFileReaderTest.comparePositionInfo(piClocs, MULTI_ROW_FLOAT_COORD[tdIndex][0], MULTI_ROW_FLOAT_COORD[tdIndex][1],
+ MULTI_ROW_Q_SEQ_COORD[tdIndex][0], MULTI_ROW_Q_SEQ_COORD[tdIndex][1],
+ 1, 2106, tdIndex);
+
+ if(tdIndex < MULTI_ROW_INDICES.length-1) {
+ nextIndex = MULTI_ROW_INDICES[++tdIndex];
+ }
+ }
+ }
+
+ Assert.assertFalse(clocsReader.hasNext());
+
+ }
+
+ @Test
+ public void singleBinTest() {
+ final ClocsFileReader clocsReader = new ClocsFileReader(PASSING_CLOCS_FILE);
+
+ for(int i = 0; i < PosFileReaderTest.PassingPosFloatCoord.length; i++) {
+ Assert.assertTrue(clocsReader.hasNext());
+ final AbstractIlluminaPositionFileReader.PositionInfo piClocs = clocsReader.next();
+ PosFileReaderTest.comparePositionInfo(piClocs, i);
+ }
+
+ Assert.assertFalse(clocsReader.hasNext());
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/readers/FilterFileReaderTest.java b/src/tests/java/picard/illumina/parser/readers/FilterFileReaderTest.java
new file mode 100644
index 0000000..97c63c3
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/FilterFileReaderTest.java
@@ -0,0 +1,93 @@
+package picard.illumina.parser.readers;
+
+import htsjdk.samtools.SAMException;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.illumina.parser.fakers.FilterFileFaker;
+
+import java.io.File;
+import java.util.NoSuchElementException;
+
+public class FilterFileReaderTest {
+ public static File TEST_DATA_DIR = new File("testdata/picard/illumina/readerTests");
+ public static final File PASSING_FILTER_FILE = new File(TEST_DATA_DIR, "pf_passing.filter");
+
+ public static final boolean [] expectedPfs = {
+ false, false, false, false, true, false, false, false, true, true, false, false, true, false, true, false,
+ true, false, false, true, true, true, true, false, true, true, false, true, true, true, true, false,
+ true, true, true, true, false, true, false, false, false, true, true, false, false, true, false, true,
+ false, true, true, true, false, false, true, false, false, false, true, true, false, false, false, true
+ };
+
+ @Test
+ public void readValidFile() {
+ final FilterFileReader reader = new FilterFileReader(PASSING_FILTER_FILE);
+ Assert.assertEquals(reader.numClusters, expectedPfs.length);
+ for(int i = 0; i < reader.numClusters; i++) {
+ Assert.assertEquals(reader.hasNext(), true);
+ Assert.assertEquals(reader.next().booleanValue(), expectedPfs[i]);
+ }
+
+ Assert.assertEquals(false, reader.hasNext());
+ }
+
+ @Test void readFakedFile() throws Exception {
+ final File fakeFile = File.createTempFile("FilterFileFakerTest", ".filter");
+ fakeFile.deleteOnExit();
+
+ new FilterFileFaker().fakeFile(fakeFile, 100);
+ final FilterFileReader reader = new FilterFileReader(fakeFile);
+ Assert.assertEquals(reader.numClusters, 1); // A faked file has one cluster - with PF = false.
+ Assert.assertTrue(reader.hasNext());
+ Assert.assertFalse(reader.next());
+ Assert.assertFalse(reader.hasNext());
+ }
+
+ @Test(expectedExceptions = NoSuchElementException.class)
+ public void readPastEnd() {
+ final FilterFileReader reader = new FilterFileReader(PASSING_FILTER_FILE);
+ for(int i = 0; i < reader.numClusters; i++) {
+ reader.next();
+ }
+
+ Assert.assertEquals(false, reader.hasNext());
+ reader.next();
+ }
+
+ @DataProvider(name="failingFilesForSAMException")
+ public Object[][] failingFilesForSAMException() {
+ return new Object[][] {
+ {"pf_nonExistentFile.filter"}
+ };
+ }
+
+ @DataProvider(name="failingFilesForPicardException")
+ public Object[][] failingFilesForPicardException() {
+ return new Object[][] {
+ {"pf_failing1.filter"},
+ {"pf_failing2.filter"},
+ {"pf_tooLarge.filter"},
+ {"pf_tooShort.filter"},
+ {"pf_badOpeningBytes.filter"},
+ {"pf_badVersionBytes.filter"}
+ };
+ }
+
+ @Test(dataProvider = "failingFilesForSAMException", expectedExceptions = SAMException.class)
+ public void readInvalidValuesForSAMException(final String failingFile) {
+ final FilterFileReader reader = new FilterFileReader(new File(TEST_DATA_DIR, failingFile));
+ while(reader.hasNext()) {
+ reader.next();
+ }
+ }
+
+ @Test(dataProvider = "failingFilesForPicardException", expectedExceptions = PicardException.class)
+ public void readInvalidValuesForPicardException(final String failingFile) {
+ final FilterFileReader reader = new FilterFileReader(new File(TEST_DATA_DIR, failingFile));
+ while(reader.hasNext()) {
+ reader.next();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/tests/java/picard/illumina/parser/readers/IlluminaFileUtilTest.java b/src/tests/java/picard/illumina/parser/readers/IlluminaFileUtilTest.java
new file mode 100644
index 0000000..38bacb3
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/IlluminaFileUtilTest.java
@@ -0,0 +1,11 @@
+package picard.illumina.parser.readers;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: jburke
+ * Date: 12/29/11
+ * Time: 2:42 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class IlluminaFileUtilTest {
+}
diff --git a/src/tests/java/picard/illumina/parser/readers/LocsFileReaderTest.java b/src/tests/java/picard/illumina/parser/readers/LocsFileReaderTest.java
new file mode 100644
index 0000000..24dfb27
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/LocsFileReaderTest.java
@@ -0,0 +1,69 @@
+package picard.illumina.parser.readers;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+
+public class LocsFileReaderTest {
+ private static final File TestDir = new File("testdata/picard/illumina/readerTests");
+ public static final File LocsFile = new File(TestDir, "s_1_6.locs");
+ public static final int ExpectedTile = 6;
+ public static final int ExpectedLane = 1;
+ public static final int NumValues = 200;
+ public static final float [][] FloatCoords = {
+ {1703.0117f, 64.01593f}, {1660.3038f, 64.08882f}, {1769.7501f, 65.12467f}, {1726.6725f, 68.367805f}, {1401.213f, 72.07282f},
+ {1358.2775f, 72.07892f}, {1370.5197f, 77.699715f}, {1661.5403f, 77.70719f}, {1682.0504f, 78.76725f}, {1563.8765f, 79.08009f}
+ };
+ public static final int [][] QSeqCoords = {
+ {18030, 1640}, {17603, 1641}, {18698, 1651}, {18267, 1684}, {15012, 1721},
+ {14583, 1721}, {14705, 1777}, {17615, 1777}, {17821, 1788}, {16639, 1791}
+ };
+ public static final int [] Indices = {
+ 0, 1, 19, 59, 100,
+ 101, 179, 180, 198, 199
+ };
+
+ @Test
+ public void passingFileTest() {
+ final LocsFileReader reader = new LocsFileReader(LocsFile);
+
+ int tdIndex = 0;
+ int nextIndex = Indices[tdIndex];
+ for(int i = 0; i < NumValues; i++) {
+ Assert.assertTrue(reader.hasNext());
+
+ final AbstractIlluminaPositionFileReader.PositionInfo piLocs = reader.next();
+
+ if(i == nextIndex) {
+ PosFileReaderTest.comparePositionInfo(piLocs, FloatCoords[tdIndex][0], FloatCoords[tdIndex][1],
+ QSeqCoords[tdIndex][0], QSeqCoords[tdIndex][1],
+ ExpectedLane, ExpectedTile, i);
+
+ if(tdIndex < Indices.length-1) {
+ nextIndex = Indices[++tdIndex];
+ }
+ }
+ }
+
+ Assert.assertFalse(reader.hasNext());
+ }
+
+ @DataProvider(name = "invalidFiles")
+ public Object[][]invalidFiles() {
+ return new Object[][] {
+ {"s_1_7.locs"},
+ {"s_1_8.locs"},
+ {"s_1_9.locs"},
+ {"s_1_10.locs"},
+ {"s_f2af.locs"}
+ };
+ }
+
+ @Test(expectedExceptions = PicardException.class, dataProvider = "invalidFiles")
+ public void invalidFilesTest(final String fileName) {
+ final LocsFileReader reader = new LocsFileReader(new File(TestDir, fileName));
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/readers/MMapBackedIteratorFactoryTest.java b/src/tests/java/picard/illumina/parser/readers/MMapBackedIteratorFactoryTest.java
new file mode 100644
index 0000000..b930597
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/MMapBackedIteratorFactoryTest.java
@@ -0,0 +1,210 @@
+package picard.illumina.parser.readers;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.IntBuffer;
+import java.util.Iterator;
+
+public class MMapBackedIteratorFactoryTest {
+ public static File TestDataDir = new File("testdata/picard/illumina/readerTests");
+ public static File BinFile = new File(TestDataDir, "binary_passing.bin");
+
+ public static final int FileLength = 51;
+ //remember that the MMappedBinaryFileReader assumes little endianness
+ public byte[] fileAsBytes(final int start, final int end){
+ final int [] bInts = {
+ 0x31, 0x22, 0x41, 0x01, 0x45, 0x6E, 0x64, 0x4F,
+ 0x66, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42,
+ 0x6F, 0x64, 0x79, 0x50, 0x61, 0x72, 0x74, 0x6F,
+ 0x66, 0x54, 0x68, 0x65, 0x46, 0x69, 0x6C, 0x65,
+ 0x37, 0x37, 0x0A, 0x45, 0x6E, 0x64, 0x43, 0x6F,
+ 0x6D, 0x6D, 0x75, 0x6E, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6F, 0x6E
+ };
+
+ final int total = end - start + 1;
+ final byte [] bytes = new byte[total];
+ for(int i = 0; i < total; i++) {
+ bytes[i] = (byte)bInts[start + i];
+ }
+ return bytes;
+ }
+
+ //Note these integers are different from the ones in fileAsBytes->bInts (because we're talking about 4 bytes at a time not one)
+ @DataProvider(name="passing_bin_asTdBuffer")
+ public ByteBuffer headerAsByteBuffer(final int headerSize) {
+ final byte [] bytes = fileAsBytes(0, headerSize-1);
+ final ByteBuffer bb = ByteBuffer.allocate(bytes.length);
+ bb.put(bytes);
+ bb.position(0);
+ bb.order(ByteOrder.LITTLE_ENDIAN);
+ return bb;
+ }
+
+ @DataProvider(name="passing_bin_asTdBuffer")
+ public ByteBuffer fileAsByteBuffer(final int headerSize) {
+ final byte [] bytes = fileAsBytes(headerSize, FileLength-1);
+ final ByteBuffer bb = ByteBuffer.allocate(bytes.length);
+ bb.put(bytes);
+ bb.position(0);
+ bb.order(ByteOrder.LITTLE_ENDIAN);
+ return bb;
+ }
+
+ abstract class FileTestDef<T> {
+ public final int headerSize;
+ public final BinaryFileIterator bbIter;
+ public final int numElements;
+
+ public FileTestDef(final int headerSize, final BinaryFileIterator<T> bbIter) {
+ this.headerSize = headerSize;
+ this.bbIter = bbIter;
+ this.numElements = fileAsBytes(headerSize, FileLength-1).length / bbIter.getElementSize();
+ }
+
+ public void test() {
+ final ByteBuffer testBuffer = fileAsByteBuffer(headerSize);
+
+
+ if(headerSize > 0) {
+ final ByteBuffer headerBuffer = headerAsByteBuffer(headerSize);
+ testHeaderBytes(headerBuffer, bbIter.getHeaderBytes());
+ }
+
+ bbIter.assertTotalElementsEqual(numElements);
+ final Iterator<T> testIter = getTestIterator(testBuffer);
+
+ while(hasNext(testIter, bbIter)) {
+ Assert.assertEquals(testIter.next(), bbIter.next());
+ }
+ }
+
+ public abstract Iterator<T> getTestIterator(final ByteBuffer byteBuffer);
+
+ public boolean hasNext(final Iterator<T> testIter, final Iterator<T> fileIter) {
+ if(testIter.hasNext() && fileIter.hasNext())
+ return true;
+
+ if(testIter.hasNext()) {
+ throw new PicardException("Test data (testIter) has more iterations while fileIter does not!");
+ }
+
+ if(fileIter.hasNext()) {
+ throw new PicardException("File data (fileIter) has more iterations while testIter does not!");
+ }
+
+ return false;
+ }
+ }
+
+ abstract class NoHeaderTestIter<T> implements Iterator<T> {
+ public final Buffer buf;
+
+ public NoHeaderTestIter(final Buffer buf) {
+ this.buf = buf;
+ }
+
+ public boolean hasNext() {
+ return buf.hasRemaining();
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ @DataProvider(name = "validTestDefs")
+ public Object[][] validTestDefs() {
+ return new Object[][] {
+ {
+ new FileTestDef<Integer>(15, MMapBackedIteratorFactory.getIntegerIterator(15, BinFile)) {
+ @Override
+ public Iterator<Integer> getTestIterator(final ByteBuffer byteBuffer) {
+ final IntBuffer ib = byteBuffer.asIntBuffer();
+ return new NoHeaderTestIter<Integer>(ib) {
+ @Override
+ public Integer next() {
+ return ib.get();
+ }
+ };
+ }
+ }
+ },
+ {
+ new FileTestDef<Byte>(2, MMapBackedIteratorFactory.getByteIterator(2, BinFile)) {
+ @Override
+ public Iterator<Byte> getTestIterator(final ByteBuffer byteBuffer) {
+ return new NoHeaderTestIter<Byte>(byteBuffer) {
+ @Override
+ public Byte next() {
+ return byteBuffer.get();
+ }
+ };
+ }
+ }
+ },
+ {
+ new FileTestDef<Float>(19, MMapBackedIteratorFactory.getFloatIterator(19, BinFile)) {
+ @Override
+ public Iterator<Float> getTestIterator(final ByteBuffer byteBuffer) {
+ return new NoHeaderTestIter<Float>(byteBuffer) {
+ @Override
+ public Float next() {
+ return byteBuffer.getFloat();
+ }
+ };
+ }
+ }
+ }
+ };
+ }
+
+ @Test(dataProvider="validTestDefs")
+ public void testValidConfigurations(final FileTestDef ftd) {
+ ftd.test();
+ }
+
+ @Test
+ public void onlyHeaderTest() {
+ final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator((int)BinFile.length(), BinFile);
+ Assert.assertEquals(bbIter.getHeaderBytes(), headerAsByteBuffer((int)BinFile.length()));
+ Assert.assertFalse(bbIter.hasNext());
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void tooLargeHeaderTest() {
+ final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator(FileLength + 10, BinFile);
+ bbIter.getHeaderBytes();
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void negativeHeaderTest() {
+ final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator(-1, BinFile);
+ bbIter.getHeaderBytes();
+ }
+
+ @DataProvider(name="invalidFileSizes")
+ public Object [][] invalidFileSizes() {
+ return new Object[][]{
+ {1, 12}, //should result in two left over bytes
+ {3, 11}, //should result in one left over elements
+ };
+ }
+
+ @Test(expectedExceptions = PicardException.class, dataProvider = "invalidFileSizes")
+ public void invalidFileSizeTests(final int headerSize, final int expectedElements) {
+ final BinaryFileIterator<Integer> bbIter = MMapBackedIteratorFactory.getIntegerIterator(headerSize, BinFile);
+ bbIter.assertTotalElementsEqual(expectedElements);
+ }
+
+ public void testHeaderBytes(final ByteBuffer bb1, final ByteBuffer bb2) {
+ Assert.assertTrue(bb1.equals(bb2), "Header bytes are not equal! " + bb1.toString() + " != " + bb2.toString());
+ }
+}
diff --git a/src/tests/java/picard/illumina/parser/readers/PosFileReaderTest.java b/src/tests/java/picard/illumina/parser/readers/PosFileReaderTest.java
new file mode 100644
index 0000000..68c6311
--- /dev/null
+++ b/src/tests/java/picard/illumina/parser/readers/PosFileReaderTest.java
@@ -0,0 +1,91 @@
+package picard.illumina.parser.readers;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+
+public class PosFileReaderTest {
+ //need to test for negatives
+ public static final File TestDir = new File("testdata/picard/illumina/readerTests");
+ public static final File InvalidNamePosFile = new File(TestDir, "pos_failing1_pos.txt");
+
+ public static final File PassingPosFile = new File(TestDir, "s_2_1101_pos.txt");
+ public static final int PassingTile = 1101;
+ public static final int PassingLane = 2;
+ public static final float[][] PassingPosFloatCoord = {
+ {17.80f, 0.30f}, {23.70f, 1.70f}, {18.50f, 3.90f}, {22.80f, 4.00f}, {15.90f, 4.20f},
+ {19.10f, 5.60f}, {23.90f, 6.70f}, {16.70f, 7.00f}, {21.50f, 7.10f}, {18.90f, 9.30f},
+ {17.10f, 10.30f}, {19.90f, 10.80f}, {15.90f, 11.90f}, {21.60f, 12.00f}, {24.80f, 12.40f},
+ {17.90f, 14.20f}, {22.00f, 14.50f}, {23.60f, 15.20f}, {20.00f, 15.50f}, {16.30f, 17.30f}
+ };
+ public static final int[][] PassingPosQSeqCoord = {
+ {1178, 1003}, {1237, 1017}, {1185, 1039}, {1228, 1040}, {1159, 1042},
+ {1191, 1056}, {1239, 1067}, {1167, 1070}, {1215, 1071}, {1189, 1093},
+ {1171, 1103}, {1199, 1108}, {1159, 1119}, {1216, 1120}, {1248, 1124},
+ {1179, 1142}, {1220, 1145}, {1236, 1152}, {1200, 1155}, {1163, 1173}
+ };
+
+ @Test
+ public void validPosFileTest() {
+ final PosFileReader pfr = new PosFileReader(PassingPosFile);
+ for (int i = 0; i < PassingPosFloatCoord.length; i++) {
+ Assert.assertTrue(pfr.hasNext());
+ final AbstractIlluminaPositionFileReader.PositionInfo pi = pfr.next();
+ comparePositionInfo(pi, i);
+ }
+ Assert.assertFalse(pfr.hasNext());
+ pfr.close();
+ }
+
+ public static void comparePositionInfo(final AbstractIlluminaPositionFileReader.PositionInfo pi, final int index) {
+ comparePositionInfo(pi, PassingPosFloatCoord[index][0], PassingPosFloatCoord[index][1],
+ PassingPosQSeqCoord[index][0], PassingPosQSeqCoord[index][1],
+ PassingLane, PassingTile, index);
+ }
+
+ public static void comparePositionInfo(final AbstractIlluminaPositionFileReader.PositionInfo pi, final float xPos, final float yPos,
+ final int xQSeqCoord, final int yQSeqCoord, final int lane, final int tile, final int index) {
+ Assert.assertEquals(pi.xPos, xPos, "Differs at index: " + index);
+ Assert.assertEquals(pi.yPos, yPos, "Differs at index: " + index);
+ Assert.assertEquals(pi.xQseqCoord, xQSeqCoord, "Differs at index: " + index);
+ Assert.assertEquals(pi.yQseqCoord, yQSeqCoord, "Differs at index: " + index);
+ Assert.assertEquals(pi.lane, lane, "Differs at index: " + index);
+ Assert.assertEquals(pi.tile, tile, "Differs at index: " + index);
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void failingNamePosFileTest() {
+ final PosFileReader pfr = new PosFileReader(InvalidNamePosFile);
+ }
+
+ @DataProvider(name = "invalidDataFiles")
+ public Object[][] invalidDataFiles() {
+ return new Object[][]{
+ {new File(TestDir, "s_1_1101_pos.txt")},
+ {new File(TestDir, "s_1_1102_pos.txt")},
+ {new File(TestDir, "s_1_1103_pos.txt")}
+ };
+ }
+
+ @Test(dataProvider = "invalidDataFiles", expectedExceptions = PicardException.class)
+ public void failingDataPosFileTest(final File file) {
+ final PosFileReader pfr = new PosFileReader(file);
+ try {
+ while (pfr.hasNext()) {
+ pfr.next();
+ }
+ } finally {
+ pfr.close();
+ }
+ }
+
+ @Test
+ public void zeroLengthFileTest() {
+ final PosFileReader pfr = new PosFileReader(new File(TestDir, "s_1_1104_pos.txt"));
+ Assert.assertFalse(pfr.hasNext());
+ pfr.close();
+ }
+}
diff --git a/src/tests/java/picard/metrics/CollectRrbsMetricsTest.java b/src/tests/java/picard/metrics/CollectRrbsMetricsTest.java
new file mode 100644
index 0000000..0f254d1
--- /dev/null
+++ b/src/tests/java/picard/metrics/CollectRrbsMetricsTest.java
@@ -0,0 +1,102 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2013 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.metrics;
+
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.metrics.MetricsFile;
+import org.testng.Assert;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import picard.analysis.CollectRrbsMetrics;
+import picard.analysis.RrbsSummaryMetrics;
+
+import java.io.File;
+import java.io.FileReader;
+import java.lang.Exception;import java.lang.Integer;import java.lang.String;import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author jgentry at broadinstitute.org
+ */
+
+public class CollectRrbsMetricsTest {
+ public static final String CHR_M_SAM = "testdata/picard/metrics/chrMReads.sam";
+ public static final String CHR_M_REFERENCE ="testdata/picard/metrics/chrM.reference.fasta";
+
+ private File rootTestDir;
+
+ @BeforeTest
+ private void setUp() throws Exception {
+ rootTestDir = File.createTempFile("crmt.", ".tmp");
+ Assert.assertTrue(rootTestDir.delete());
+ Assert.assertTrue(rootTestDir.mkdir());
+ }
+
+ @AfterTest
+ private void tearDown() {
+ IOUtil.deleteDirectoryTree(rootTestDir);
+ }
+
+ @Test
+ public void chrMReads() throws Exception {
+ final MetricsFile<RrbsSummaryMetrics, ?> metricsFile = getSummaryFile(CHR_M_SAM, CHR_M_REFERENCE, rootTestDir + "/READ_TEST", new ArrayList<String>());
+ final RrbsSummaryMetrics metrics = metricsFile.getMetrics().get(0);
+ Assert.assertEquals(metrics.READS_ALIGNED.intValue(), 5);
+ Assert.assertEquals(metrics.NON_CPG_BASES.intValue(), 15);
+ Assert.assertEquals(metrics.NON_CPG_CONVERTED_BASES.intValue(), 11);
+ Assert.assertEquals(metrics.PCT_NON_CPG_BASES_CONVERTED, 0.733333);
+ Assert.assertEquals(metrics.CPG_BASES_SEEN.intValue(), 5);
+ Assert.assertEquals(metrics.CPG_BASES_CONVERTED.intValue(), 1);
+ Assert.assertEquals(metrics.PCT_CPG_BASES_CONVERTED, 0.2);
+ Assert.assertEquals(metrics.MEAN_CPG_COVERAGE, 1.666667);
+ Assert.assertEquals(metrics.MEDIAN_CPG_COVERAGE.intValue(), 2);
+ Assert.assertEquals(metrics.READS_WITH_NO_CPG.intValue(), 1);
+ Assert.assertEquals(metrics.READS_IGNORED_SHORT.intValue(), 1);
+ Assert.assertEquals(metrics.READS_IGNORED_MISMATCHES.intValue(), 1);
+ }
+
+ private MetricsFile<RrbsSummaryMetrics, ?> getSummaryFile(final String input, final String reference, final String prefix,
+ final List<String> sequences) throws Exception {
+ final List<String> argList = new ArrayList<String>();
+ argList.add("INPUT=" + input);
+ argList.add("METRICS_FILE_PREFIX=" + prefix);
+ argList.add("REFERENCE=" + reference);
+ for (final String sequence : sequences) {
+ argList.add("SEQUENCE_NAMES=" + sequence);
+ }
+
+ final String[] args = new String[argList.size()];
+ argList.toArray(args);
+
+ Assert.assertEquals(new CollectRrbsMetrics().instanceMain(args), 0);
+
+ final MetricsFile<RrbsSummaryMetrics, ?> retVal = new MetricsFile<RrbsSummaryMetrics, Integer>();
+ retVal.read(new FileReader(prefix + ".rrbs_summary_metrics"));
+ return retVal;
+ }
+
+
+}
diff --git a/src/tests/java/picard/pedigree/PedFileTest.java b/src/tests/java/picard/pedigree/PedFileTest.java
new file mode 100644
index 0000000..b1b1b86
--- /dev/null
+++ b/src/tests/java/picard/pedigree/PedFileTest.java
@@ -0,0 +1,58 @@
+package picard.pedigree;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by farjoun on 9/19/14.
+ */
+public class PedFileTest {
+
+ @DataProvider()
+ public Object[][] testFromSexMapDataProvider() {
+ return new Object[][]{
+ new Object[]{Arrays.asList(), Arrays.asList()},
+ new Object[]{Arrays.asList("female1", "female2", "female3"), Arrays.asList("male1", "male2", "male3")},
+ new Object[]{Arrays.asList("female1", "female2", "female3"), Arrays.asList()},
+ new Object[]{Arrays.asList("female1"), Arrays.asList("male1", "male2", "male3")},
+ };
+ }
+
+ @Test(dataProvider = "testFromSexMapDataProvider")
+ public void testFromSexMap(final Collection<String> females, final Collection<String> males) throws Exception {
+ final Map<String, Sex> data = new HashMap<String, Sex>();
+ for (final String sample : females) {
+ data.put(sample, Sex.Female);
+ }
+ for (final String sample : males) {
+ data.put(sample, Sex.Male);
+ }
+
+ final PedFile pedFile = PedFile.fromSexMap(data);
+
+ // Check that sizes agree
+ Assert.assertEquals(pedFile.size(), females.size() + males.size());
+
+ // Check that every entry in the PedFile came from one of the two collections
+ for (final Map.Entry<String, PedFile.PedTrio> pedTrioEntry : pedFile.entrySet()) {
+ Assert.assertTrue(females.contains(pedTrioEntry.getValue().getIndividualId()) |
+ males.contains(pedTrioEntry.getValue().getIndividualId()));
+ }
+ // Check that all the females are there and are listed as female
+ for (final String female : females) {
+ Assert.assertEquals(pedFile.get(female).getSex(), Sex.Female);
+ }
+
+ // Check that all the males are there and are listed as male
+ for (final String male : males) {
+ Assert.assertEquals(pedFile.get(male).getSex(), Sex.Male);
+ }
+
+ }
+}
diff --git a/src/tests/java/picard/sam/AddCommentsToBamTest.java b/src/tests/java/picard/sam/AddCommentsToBamTest.java
new file mode 100644
index 0000000..ca542af
--- /dev/null
+++ b/src/tests/java/picard/sam/AddCommentsToBamTest.java
@@ -0,0 +1,70 @@
+package picard.sam;
+
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMTextHeaderCodec;
+import htsjdk.samtools.SamReaderFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+public class AddCommentsToBamTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam");
+ private static final File INPUT_FILE = new File(TEST_DATA_DIR, "aligned_queryname_sorted.bam");
+ private static final File SAM_FILE = new File(TEST_DATA_DIR, "summary_alignment_stats_test2.sam");
+
+ private static final String[] commentList = new String[]{"test1", "test2", "test3"};
+
+ public String getCommandLineProgramName() {
+ return AddCommentsToBam.class.getSimpleName();
+ }
+
+ @Test
+ public void testAddCommentsToBam() throws Exception {
+ final File outputFile = File.createTempFile("addCommentsToBamTest.", BamFileIoUtils.BAM_FILE_EXTENSION);
+ runIt(INPUT_FILE, outputFile, commentList);
+
+ final SAMFileHeader newHeader = SamReaderFactory.makeDefault().getFileHeader(outputFile);
+
+ // The original comments are massaged when they're added to the header. Perform the same massaging here,
+ // and then compare the lists
+ final List<String> massagedComments = new LinkedList<String>();
+ for (final String comment : commentList) {
+ massagedComments.add(SAMTextHeaderCodec.COMMENT_PREFIX + comment);
+ }
+
+ Assert.assertEquals(newHeader.getComments(), massagedComments);
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void testUsingSam() throws Exception {
+ final File outputFile = File.createTempFile("addCommentsToBamTest.samFile", BamFileIoUtils.BAM_FILE_EXTENSION);
+ runIt(SAM_FILE, outputFile, commentList);
+ throw new IllegalStateException("We shouldn't be here!");
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ public void testUsingNewlines() throws Exception {
+ final File outputFile = File.createTempFile("addCommentsToBamTest.mewLine", BamFileIoUtils.BAM_FILE_EXTENSION);
+ runIt(SAM_FILE, outputFile, new String[]{"this is\n a crazy\n test"});
+ throw new IllegalStateException("We shouldn't be here!");
+ }
+
+ private void runIt(final File inputFile, final File outputFile, final String[] commentList) {
+ final List<String> args = new ArrayList<String>(Arrays.asList(
+ "INPUT=" + inputFile.getAbsolutePath(),
+ "OUTPUT=" + outputFile.getAbsolutePath()));
+ for (final String comment : commentList) {
+ args.add("COMMENT=" + comment);
+ }
+ runPicardCommandLine(args);
+ }
+
+}
diff --git a/src/tests/java/picard/sam/CleanSamTest.java b/src/tests/java/picard/sam/CleanSamTest.java
new file mode 100644
index 0000000..dfe3f8b
--- /dev/null
+++ b/src/tests/java/picard/sam/CleanSamTest.java
@@ -0,0 +1,107 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMValidationError;
+import htsjdk.samtools.SamFileValidator;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.ValidationStringency;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.sam.testers.CleanSamTester;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Arrays;
+
+public class CleanSamTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/CleanSam");
+ private static final String qualityScore = "&/,&-.1/6/&&)&).)/,&0768)&/.,/874,&.4137572)&/&&,&1-&.0/&&*,&&&&&&&&&&18775799,&16:8775-56256/69::;0";
+
+ public String getCommandLineProgramName() {
+ return CleanSam.class.getSimpleName();
+ }
+
+ @Test(dataProvider = "testCleanSamDataProvider")
+ public void testCleanSam(final String samFile, final String expectedCigar) throws IOException {
+ final File cleanedFile = File.createTempFile(samFile + ".", ".sam");
+ cleanedFile.deleteOnExit();
+ final String[] args = new String[]{
+ "INPUT=" + new File(TEST_DATA_DIR, samFile).getAbsolutePath(),
+ "OUTPUT=" + cleanedFile.getAbsolutePath()
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final SamFileValidator validator = new SamFileValidator(new PrintWriter(System.out), 8000);
+ validator.setIgnoreWarnings(true);
+ validator.setVerbose(true, 1000);
+ validator.setErrorsToIgnore(Arrays.asList(SAMValidationError.Type.MISSING_READ_GROUP));
+ SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.LENIENT).open(cleanedFile);
+ final SAMRecord rec = samReader.iterator().next();
+ samReader.close();
+ Assert.assertEquals(rec.getCigarString(), expectedCigar);
+ samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.LENIENT).open(cleanedFile);
+ final boolean validated = validator.validateSamFileVerbose(samReader, null);
+ samReader.close();
+ Assert.assertTrue(validated, "ValidateSamFile failed");
+ }
+
+ @DataProvider(name = "testCleanSamDataProvider")
+ public Object[][] testCleanSamDataProvider() {
+ return new Object[][]{
+ {"simple_fits.sam", "100M"},
+ {"simple_overhang.sam", "99M1S"},
+ {"fits_with_deletion.sam", "91M2D9M"},
+ {"overhang_with_deletion.sam", "91M2D8M1S"},
+ {"trailing_insertion.sam", "99M1I"},
+ {"long_trailing_insertion.sam", "90M10I"},
+ };
+ }
+
+ //identical test case using the SamFileTester to generate that SAM file on the fly
+ @Test(dataProvider = "testCleanSamTesterDataProvider")
+ public void testCleanSamTester(final String originalCigar, final String expectedCigar, final int defaultChromosomeLength, final int alignStart) throws IOException {
+ final CleanSamTester cleanSamTester = new CleanSamTester(expectedCigar, 100, defaultChromosomeLength);
+ // NB: this will add in the mate cigar, when enabled in SamPairUtil, for additional validation
+ cleanSamTester.addMappedPair(0, alignStart, alignStart, false, false, originalCigar, originalCigar, false, 50);
+ cleanSamTester.runTest();
+ }
+
+ @DataProvider(name = "testCleanSamTesterDataProvider")
+ public Object[][] testCleanSamTesterDataProvider() {
+ return new Object[][]{
+ {"100M", "100M", 101, 2}, // simple_filts.sam
+ {"100M", "99M1S", 101, 3}, // simple_overhang.sam
+ {"91M2D9M", "91M2D9M", 102, 1}, // fits_with_deletion.sam
+ {"91M2D9M", "91M2D8M1S", 101, 1}, // overhang_with_deletion.sam
+ {"99M1I", "99M1I", 101, 3}, // trailing_insertion.sam
+ {"90M10I", "90M10I", 101, 3} // long_trailing_insertion.sam
+ };
+ }
+}
diff --git a/src/tests/java/picard/sam/CompareSAMsTest.java b/src/tests/java/picard/sam/CompareSAMsTest.java
new file mode 100644
index 0000000..4a51ae0
--- /dev/null
+++ b/src/tests/java/picard/sam/CompareSAMsTest.java
@@ -0,0 +1,141 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+
+public class CompareSAMsTest extends CommandLineProgramTest {
+ private static final File TEST_FILES_DIR = new File("testdata/picard/sam/CompareSAMs");
+
+ public String getCommandLineProgramName() {
+ return CompareSAMs.class.getSimpleName();
+ }
+
+ private void testHelper(final String f1, final String f2, final int expectedMatch, final int expectedDiffer,
+ final int expectedUnmappedBoth,
+ final int expectedUnmappedLeft, final int expectedUnmappedRight, final int expectedMissingLeft,
+ final int expectedMissingRight, final boolean areEqual) {
+ final String[] samFiles = {
+ new File(TEST_FILES_DIR, f1).getAbsolutePath(),
+ new File(TEST_FILES_DIR, f2).getAbsolutePath()
+ };
+
+ // TODO - Should switch over to using invocation via new PicardCommandLine() - BUT the test here is accessing class members directly.
+ CompareSAMs compareSAMs = new CompareSAMs();
+ compareSAMs.instanceMain(samFiles);
+ Assert.assertEquals(areEqual, compareSAMs.areEqual());
+ Assert.assertEquals(expectedMatch, compareSAMs.getMappingsMatch());
+ Assert.assertEquals(expectedDiffer, compareSAMs.getMappingsDiffer());
+ Assert.assertEquals(expectedUnmappedBoth, compareSAMs.getUnmappedBoth());
+ Assert.assertEquals(expectedUnmappedLeft, compareSAMs.getUnmappedLeft());
+ Assert.assertEquals(expectedUnmappedRight, compareSAMs.getUnmappedRight());
+ Assert.assertEquals(expectedMissingLeft, compareSAMs.getMissingLeft());
+ Assert.assertEquals(expectedMissingRight, compareSAMs.getMissingRight());
+
+ final String[] samFilesReversed = {
+ new File(TEST_FILES_DIR, f2).getAbsolutePath(),
+ new File(TEST_FILES_DIR, f1).getAbsolutePath()
+ };
+ compareSAMs = new CompareSAMs();
+ compareSAMs.instanceMain(samFilesReversed);
+ Assert.assertEquals(areEqual, compareSAMs.areEqual());
+ Assert.assertEquals(expectedMatch, compareSAMs.getMappingsMatch());
+ Assert.assertEquals(expectedDiffer, compareSAMs.getMappingsDiffer());
+ Assert.assertEquals(expectedUnmappedBoth, compareSAMs.getUnmappedBoth());
+ Assert.assertEquals(expectedUnmappedRight, compareSAMs.getUnmappedLeft());
+ Assert.assertEquals(expectedUnmappedLeft, compareSAMs.getUnmappedRight());
+ Assert.assertEquals(expectedMissingRight, compareSAMs.getMissingLeft());
+ Assert.assertEquals(expectedMissingLeft, compareSAMs.getMissingRight());
+ }
+
+ @Test
+ public void testSortsDifferent() {
+ testHelper("genomic_sorted.sam", "unsorted.sam", 0, 0, 0, 0, 0, 0, 0, false);
+ }
+
+ @Test
+ public void testSequenceDictionariesDifferent1() {
+ testHelper("genomic_sorted.sam", "chr21.sam", 0, 0, 0, 0, 0, 0, 0, false);
+ }
+
+ @Test
+ public void testSequenceDictionariesDifferent2() {
+ testHelper("genomic_sorted.sam", "bigger_seq_dict.sam", 0, 0, 0, 0, 0, 0, 0, false);
+ }
+
+ @Test
+ public void testBiggerSequenceDictionaries() {
+ testHelper("bigger_seq_dict.sam", "bigger_seq_dict.sam", 2, 0, 0, 0, 0, 0, 0, true);
+ }
+
+ @Test
+ public void testIdentical() {
+ testHelper("genomic_sorted.sam", "genomic_sorted.sam", 2, 0, 0, 0, 0, 0, 0, true);
+ }
+
+ @Test
+ public void testHasNonPrimary() {
+ testHelper("genomic_sorted.sam", "has_non_primary.sam", 2, 0, 0, 0, 0, 0, 0, true);
+ }
+
+ @Test
+ public void testMoreOnOneSide() {
+ testHelper("genomic_sorted_5.sam", "genomic_sorted_5_plus.sam", 3, 2, 0, 0, 0, 3, 0, false);
+ }
+
+ @Test
+ public void testGroupWithSameCoordinate() {
+ testHelper("group_same_coord.sam", "group_same_coord_diff_order.sam", 3, 0, 0, 0, 0, 1, 2, false);
+ }
+
+ @Test
+ public void testGroupWithSameCoordinateAndNoMatchInOther() {
+ testHelper("group_same_coord.sam", "diff_coords.sam", 0, 5, 0, 0, 0, 0, 0, false);
+ }
+
+ @Test
+ public void testUnmapped1() {
+ testHelper("genomic_sorted.sam", "unmapped_first.sam", 1, 0, 0, 0, 1, 0, 0, false);
+ }
+
+ @Test
+ public void testUnmapped2() {
+ testHelper("genomic_sorted.sam", "unmapped_second.sam", 1, 0, 0, 0, 1, 0, 0, false);
+ }
+
+ @Test
+ public void testUnmapped3() {
+ testHelper("unmapped_first.sam", "unmapped_second.sam", 0, 0, 0, 1, 1, 0, 0, false);
+ }
+
+ @Test
+ public void testUnmapped4() {
+ testHelper("unmapped_first.sam", "unmapped_first.sam", 1, 0, 1, 0, 0, 0, 0, true);
+ }
+
+}
diff --git a/src/tests/java/picard/sam/CreateSequenceDictionaryTest.java b/src/tests/java/picard/sam/CreateSequenceDictionaryTest.java
new file mode 100644
index 0000000..9b041cc
--- /dev/null
+++ b/src/tests/java/picard/sam/CreateSequenceDictionaryTest.java
@@ -0,0 +1,73 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.PicardException;
+
+import java.io.File;
+
+/**
+ * @author alecw at broadinstitute.org
+ */
+public class CreateSequenceDictionaryTest extends CommandLineProgramTest {
+ public static File TEST_DATA_DIR = new File("testdata/picard/sam");
+ public static File BASIC_FASTA = new File(TEST_DATA_DIR, "basic.fasta");
+ public static File DUPLICATE_FASTA = new File(TEST_DATA_DIR, "duplicate_sequence_names.fasta");
+
+ public String getCommandLineProgramName() {
+ return CreateSequenceDictionary.class.getSimpleName();
+ }
+
+ @Test
+ public void testBasic() throws Exception {
+ final File outputDict = File.createTempFile("CreateSequenceDictionaryTest.", ".dict");
+ outputDict.delete();
+ outputDict.deleteOnExit();
+ final String[] argv = {
+ "REFERENCE=" + BASIC_FASTA,
+ "OUTPUT=" + outputDict,
+ "TRUNCATE_NAMES_AT_WHITESPACE=false"
+ };
+ Assert.assertEquals(runPicardCommandLine(argv), 0);
+ }
+
+ /**
+ * Should throw an exception because with TRUNCATE_NAMES_AT_WHITESPACE, sequence names are not unique.
+ */
+ @Test(expectedExceptions = PicardException.class)
+ public void testNonUniqueSequenceName() throws Exception {
+ final File outputDict = File.createTempFile("CreateSequenceDictionaryTest.", ".dict");
+ outputDict.deleteOnExit();
+ final String[] argv = {
+ "REFERENCE=" + DUPLICATE_FASTA,
+ "OUTPUT=" + outputDict,
+ "TRUNCATE_NAMES_AT_WHITESPACE=true"
+ };
+ Assert.assertEquals(runPicardCommandLine(argv), 0);
+ Assert.fail("Exception should have been thrown.");
+ }
+}
diff --git a/src/tests/java/picard/sam/FastqToSamTest.java b/src/tests/java/picard/sam/FastqToSamTest.java
new file mode 100644
index 0000000..5a387b4
--- /dev/null
+++ b/src/tests/java/picard/sam/FastqToSamTest.java
@@ -0,0 +1,309 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.SAMRecordIterator;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.fastq.FastqReader;
+import htsjdk.samtools.util.FastqQualityFormat;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tests for FastqToBam
+ */
+public class FastqToSamTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/fastq2bam");
+
+ public String getCommandLineProgramName() {
+ return FastqToSam.class.getSimpleName();
+ }
+
+ // fastq files with legal values for each fastq version
+ @DataProvider(name = "okVersionFiles")
+ public Object[][] okVersionFiles() {
+ return new Object[][] {
+ {"fastq-sanger/5k-v1-Rhodobacter_LW1.sam.fastq", FastqQualityFormat.Standard },
+ {"fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq", FastqQualityFormat.Standard },
+ {"fastq-sanger/sanger_full_range_as_sanger-63.fastq", FastqQualityFormat.Standard }, // all sanger chars
+
+ {"fastq-solexa/s_1_sequence.txt", FastqQualityFormat.Solexa},
+ {"fastq-solexa/solexa_full_range_as_solexa.fastq", FastqQualityFormat.Solexa}, // all solexa chars
+
+ {"fastq-illumina/s_1_2_sequence.txt", FastqQualityFormat.Illumina},
+ {"fastq-illumina/s_1_2_sequence.txt", FastqQualityFormat.Illumina},
+ {"fastq-illumina/s_1_sequence.txt", FastqQualityFormat.Illumina},
+ };
+ }
+
+ // Illegal values fastq files for each fastq version
+ @DataProvider(name = "badVersionFiles")
+ public Object[][] badVersionFiles() {
+ return new Object[][] {
+ {"fastq-sanger/sanger_full_range_as_sanger-63.fastq", FastqQualityFormat.Illumina},
+ {"fastq-solexa/s_1_sequence.txt", FastqQualityFormat.Illumina},
+ };
+ }
+
+ // Illegal fastq format, i.e. doesn't contain correct four lines per record
+ @DataProvider(name = "badFormatFiles")
+ public Object[][] badFormatFiles() {
+ return new Object[][] {
+ {"bad-format/bad-qual-header.txt"},
+ {"bad-format/bad-seq-header.txt"},
+ {"bad-format/extra-line.txt"},
+ {"bad-format/too-many-quals.txt"},
+ {"bad-format/1lines.txt"},
+ {"bad-format/2lines.txt"},
+ {"bad-format/3lines.txt"},
+ };
+ }
+
+ // permissive fastq format, i.e. contain blank lines at various places
+ @DataProvider(name = "permissiveFormatFiles")
+ public Object[][] permissiveFormatFiles() {
+ return new Object[][] {
+ {"permissive-format/pair1.txt", "permissive-format/pair2.txt", FastqQualityFormat.Standard },
+ {"permissive-format/s_1_1_sequence.txt", "permissive-format/s_1_2_sequence.txt", FastqQualityFormat.Illumina},
+ {"permissive-format/pair1.txt", null, FastqQualityFormat.Standard},
+ {"permissive-format/pair2.txt", null, FastqQualityFormat.Standard},
+ {"permissive-format/s_1_1_sequence.txt", null, FastqQualityFormat.Illumina},
+ {"permissive-format/s_1_2_sequence.txt", null, FastqQualityFormat.Illumina},
+ {"permissive-format/s_1_sequence.txt", null, FastqQualityFormat.Illumina},
+
+ };
+ }
+
+
+ // OK paired fastq files
+ @DataProvider(name = "okPairedFiles")
+ public Object[][] okPairedFiles() {
+ return new Object[][] {
+ {"ok-paired/pair1.txt", "ok-paired/pair2.txt", FastqQualityFormat.Standard },
+ {"fastq-illumina/s_1_1_sequence.txt", "fastq-illumina/s_1_2_sequence.txt", FastqQualityFormat.Illumina}
+ };
+ }
+
+ // Inconsistent paired fastq files
+ @DataProvider(name = "badPairedFiles")
+ public Object[][] badPairedFiles() {
+ return new Object[][] {
+ {"ok-paired/pair1.txt", "bad-paired/pair2-one-more-record.txt" },
+ {"bad-paired/pair1-one-more-record.txt", "ok-paired/pair2.txt" },
+ {"ok-paired/pair1.txt", "bad-paired/pair2-badnum.txt" },
+ {"bad-paired/pair1-badnum.txt", "ok-paired/pair2.txt" },
+ {"bad-paired/pair1-nonum.txt", "ok-paired/pair2.txt" },
+ {"bad-paired/pair1-onetoken.txt", "ok-paired/pair2.txt" },
+ };
+ }
+
+ @Test(dataProvider = "permissiveFormatFiles")
+ public void testPermissiveOk(final String filename1, final String filename2, final FastqQualityFormat version) throws IOException {
+ convertFile(filename1, filename2, version, true);
+ }
+
+ @Test(dataProvider = "permissiveFormatFiles",expectedExceptions = SAMException.class)
+ public void testPermissiveFail(final String filename1, final String filename2, final FastqQualityFormat version) throws IOException {
+ convertFile(filename1,filename2,version,false);
+ }
+
+ @Test(dataProvider = "okVersionFiles")
+ public void testFastqVersionOk(final String fastqVersionFilename, final FastqQualityFormat version) throws IOException {
+ convertFile(fastqVersionFilename, version);
+ }
+
+ @Test(dataProvider = "badVersionFiles", expectedExceptions= SAMException.class)
+ public void testFastqVersionBad(final String fastqVersionFilename, final FastqQualityFormat version) throws IOException {
+ convertFile(fastqVersionFilename, version);
+ }
+
+ @Test(dataProvider = "badFormatFiles", expectedExceptions= SAMException.class)
+ public void testBadFile(final String filename) throws IOException {
+ convertFile(filename, null, FastqQualityFormat.Standard);
+ }
+
+ @Test(dataProvider = "badPairedFiles", expectedExceptions= PicardException.class)
+ public void testPairedBad(final String filename1, final String filename2) throws IOException {
+ convertFile(filename1, filename2, FastqQualityFormat.Standard);
+ }
+
+ @Test(dataProvider = "okPairedFiles")
+ public void testPairedOk(final String filename1, final String filename2, final FastqQualityFormat version) throws IOException {
+ convertFile(filename1, filename2, version);
+ }
+
+ private File convertFile(final String filename, final FastqQualityFormat version) throws IOException {
+ return convertFile(filename, null, version);
+ }
+
+ private File convertFile(final String fastqFilename1, final String fastqFilename2, final FastqQualityFormat version) throws IOException{
+ return convertFile(fastqFilename1, fastqFilename2, version,false);
+ }
+
+ private File convertFile(final String fastqFilename1, final String fastqFilename2, final FastqQualityFormat version,final boolean permissiveFormat) throws IOException {
+ return convertFile(fastqFilename1, fastqFilename2, version, permissiveFormat, false);
+ }
+
+ private File convertFile(final String fastqFilename1,
+ final String fastqFilename2,
+ final FastqQualityFormat version,
+ final boolean permissiveFormat,
+ final boolean useSequentialFastqs) throws IOException {
+ final File fastq1 = new File(TEST_DATA_DIR, fastqFilename1);
+ final File fastq2 = (fastqFilename2 != null) ? new File(TEST_DATA_DIR, fastqFilename2) : null;
+ final File samFile = newTempSamFile(fastq1.getName());
+
+ final List<String> args =new ArrayList<String>();
+
+ args.add("FASTQ=" + fastq1.getAbsolutePath());
+ args.add("OUTPUT=" + samFile.getAbsolutePath());
+ args.add("QUALITY_FORMAT=" + version);
+ args.add("READ_GROUP_NAME=rg");
+ args.add("SAMPLE_NAME=s1");
+
+ if (fastqFilename2 != null) args.add("FASTQ2=" + fastq2.getAbsolutePath());
+ if (permissiveFormat) args.add("ALLOW_AND_IGNORE_EMPTY_LINES=true");
+ if (useSequentialFastqs) args.add("USE_SEQUENTIAL_FASTQS=true");
+
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ return samFile ;
+
+ }
+
+ private static File newTempSamFile(final String filename) throws IOException {
+ final File file = File.createTempFile(filename,".sam");
+ file.deleteOnExit();
+ return file;
+ }
+
+ private static File newTempFile(final String filename) throws IOException {
+ final File file = File.createTempFile(filename,".tmp");
+ file.deleteOnExit();
+ return file;
+ }
+
+// Test for legal syntax for pair read names for FastqToSam.getBaseName()
+// We create a dummy file to test the getBaseName() method since it expects
+// an existing file.
+
+ // TODO - Should switch over to using invocation via new PicardCommandLine() - BUT the tests using this are accessing class members directly.
+ private static final FastqToSam fastqToSam = new FastqToSam();
+ private static FastqReader freader1 ;
+ private static FastqReader freader2 ;
+
+ @BeforeClass
+ public static void beforeClass() throws IOException {
+ final File dummyFile = newTempFile("dummy");
+ freader1 = new FastqReader(dummyFile);
+ freader2 = new FastqReader(dummyFile);
+ }
+
+ @DataProvider(name = "okPairNames")
+ public Object[][] okPairNames() {
+ return new Object[][] {
+ {"aa/1", "aa/2" },
+ {"aa", "aa" },
+ {"aa/bb", "aa/bb" },
+ {"aa/bb/", "aa/bb/" },
+ {"aa/bb/1", "aa/bb/2" },
+ {"aa/bb/cc/dd/ee/ff/1", "aa/bb/cc/dd/ee/ff/2" },
+ {"////1", "////2" },
+ {"/", "/" },
+ {"////", "////" },
+ {"/aa", "/aa" },
+ {"aa/", "aa/" },
+ {"ab/c", "ab/c"}
+ };
+ }
+
+ @DataProvider(name = "badPairNames")
+ public Object[][] badPairNames() {
+ return new Object[][] {
+ {"", "" },
+ {"aa/1", "bb/2" },
+ {"aa" , "bb" },
+ {"aa/1", "aa" },
+ {"aa", "aa/2" },
+ {"aa/1", "aa/1" },
+ {"aa/2", "aa/2" },
+ };
+ }
+
+ @Test(dataProvider = "okPairNames")
+ public void readPairNameOk(final String name1, final String name2) throws IOException {
+ fastqToSam.getBaseName(name1, name2, freader1, freader2);
+ }
+
+ @Test(dataProvider = "badPairNames", expectedExceptions= PicardException.class)
+ public void readPairNameBad(final String name1, final String name2) throws IOException {
+ fastqToSam.getBaseName(name1, name2, freader1, freader2);
+ }
+
+ // TODO: convert other tests to use this too
+ private void convertFileAndVerifyRecordCount(final int expectedCount,
+ final String fastqFilename1,
+ final String fastqFilename2,
+ final FastqQualityFormat version,
+ final boolean permissiveFormat,
+ final boolean useSequentialFastqs) throws IOException {
+ final File samFile = convertFile(fastqFilename1, fastqFilename2, version, permissiveFormat, useSequentialFastqs);
+ final SamReader samReader = SamReaderFactory.makeDefault().open(samFile);
+ final SAMRecordIterator iterator = samReader.iterator();
+ int actualCount = 0;
+ while (iterator.hasNext()) {
+ iterator.next();
+ actualCount++;
+ }
+ samReader.close();
+ Assert.assertEquals(actualCount, expectedCount);
+ }
+
+ @Test
+ public void testSequentialFiles() throws IOException {
+ final String singleEnd = "sequential-files/single_end_R1_001.fastq";
+ final String pairedEnd1 = "sequential-files/paired_end_R1_001.fastq";
+ final String pairedEnd2 = "sequential-files/paired_end_R2_001.fastq";
+
+ Assert.assertEquals(FastqToSam.getSequentialFileList(new File(TEST_DATA_DIR, "/" + singleEnd)).size(), 2);
+ Assert.assertEquals(FastqToSam.getSequentialFileList(new File(TEST_DATA_DIR, "/" + pairedEnd1)).size(), 2);
+ Assert.assertEquals(FastqToSam.getSequentialFileList(new File(TEST_DATA_DIR, "/" + pairedEnd2)).size(), 2);
+
+ convertFileAndVerifyRecordCount(1, singleEnd, null, FastqQualityFormat.Illumina, true, false);
+ convertFileAndVerifyRecordCount(2, singleEnd, null, FastqQualityFormat.Illumina, true, true);
+ convertFileAndVerifyRecordCount(2, pairedEnd1, pairedEnd2, FastqQualityFormat.Illumina, true, false);
+ convertFileAndVerifyRecordCount(4, pairedEnd1, pairedEnd2, FastqQualityFormat.Illumina, true, true);
+ }
+}
+
diff --git a/src/tests/java/picard/sam/GatherBamFilesTest.java b/src/tests/java/picard/sam/GatherBamFilesTest.java
new file mode 100644
index 0000000..865c74e
--- /dev/null
+++ b/src/tests/java/picard/sam/GatherBamFilesTest.java
@@ -0,0 +1,65 @@
+package picard.sam;
+
+import htsjdk.samtools.BamFileIoUtils;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class GatherBamFilesTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/GatherBamFiles");
+ private static final File ORIG_BAM = new File(TEST_DATA_DIR, "orig.bam");
+ private static final List<File> SPLIT_BAMS = Arrays.asList(
+ new File(TEST_DATA_DIR, "indUnknownChrom.bam"),
+ new File(TEST_DATA_DIR, "indchr1.bam"),
+ new File(TEST_DATA_DIR, "indchr2.bam"),
+ new File(TEST_DATA_DIR, "indchr3.bam"),
+ new File(TEST_DATA_DIR, "indchr4.bam"),
+ new File(TEST_DATA_DIR, "indchr5.bam"),
+ new File(TEST_DATA_DIR, "indchr6.bam"),
+ new File(TEST_DATA_DIR, "indchr7.bam"),
+ new File(TEST_DATA_DIR, "indchr8.bam")
+ );
+
+ public String getCommandLineProgramName() {
+ return GatherBamFiles.class.getSimpleName();
+ }
+
+ @Test
+ public void testTheGathering() throws Exception {
+ final File outputFile = File.createTempFile("gatherBamFilesTest.samFile.", BamFileIoUtils.BAM_FILE_EXTENSION);
+ final List<String> args = new ArrayList<String>();
+ for (final File splitBam : SPLIT_BAMS) {
+ args.add("INPUT=" + splitBam.getAbsolutePath());
+ }
+ args.add("OUTPUT=" + outputFile);
+ runPicardCommandLine(args);
+
+ // TODO - Should switch over to using invocation via new PicardCommandLine() - BUT the test here is accessing class members directly.
+ final CompareSAMs compareSAMs = new CompareSAMs();
+ compareSAMs.samFiles = Arrays.asList(ORIG_BAM, outputFile);
+ compareSAMs.doWork();
+ Assert.assertTrue(compareSAMs.areEqual());
+ }
+
+ @Test
+ public void sanityCheckTheGathering() throws Exception {
+ final File outputFile = File.createTempFile("gatherBamFilesTest.samFile.", BamFileIoUtils.BAM_FILE_EXTENSION);
+ final List<String> args = new ArrayList<String>();
+ for (final File splitBam : SPLIT_BAMS) {
+ args.add("INPUT=" + splitBam.getAbsolutePath());
+ }
+ args.add("OUTPUT=" + outputFile);
+ runPicardCommandLine(args);
+
+ // TODO - Should switch over to using invocation via new PicardCommandLine() - BUT the test here is accessing class members directly.
+ final CompareSAMs compareSAMs = new CompareSAMs();
+ compareSAMs.samFiles = Arrays.asList(ORIG_BAM, SPLIT_BAMS.get(0));
+ compareSAMs.doWork();
+ Assert.assertFalse(compareSAMs.areEqual());
+ }
+}
diff --git a/src/tests/java/picard/sam/MergeBamAlignmentTest.java b/src/tests/java/picard/sam/MergeBamAlignmentTest.java
new file mode 100644
index 0000000..8dd4bf3
--- /dev/null
+++ b/src/tests/java/picard/sam/MergeBamAlignmentTest.java
@@ -0,0 +1,1676 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.Cigar;
+import htsjdk.samtools.CigarElement;
+import htsjdk.samtools.CigarOperator;
+import htsjdk.samtools.Defaults;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordIterator;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SamPairUtil;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramTest;
+import picard.sam.testers.ValidateSamTester;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Test for the MergeBamAlignment class
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+public class MergeBamAlignmentTest extends CommandLineProgramTest {
+
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/MergeBamAlignment");
+
+ private static final File unmappedBam = new File("testdata/picard/sam/unmapped.sam");
+ private static final File alignedBam = new File("testdata/picard/sam/aligned.sam");
+ private static final File oneHalfAlignedBam = new File("testdata/picard/sam/onehalfaligned.sam");
+ private static final File otherHalfAlignedBam = new File("testdata/picard/sam/otherhalfaligned.sam");
+ private static final File mergingUnmappedBam = new File(TEST_DATA_DIR, "unmapped.sam");
+ private static final File firstReadAlignedBam = new File(TEST_DATA_DIR, "allread1.trimmed.aligned.sam");
+ private static final File secondReadAlignedBam = new File(TEST_DATA_DIR, "allread2.trimmed.aligned.sam");
+ private static final File firstReadAlignedBam_firstHalf = new File(TEST_DATA_DIR, "firsthalf.read1.trimmed.aligned.sam");
+ private static final File firstReadAlignedBam_secondHalf = new File(TEST_DATA_DIR, "secondhalf.read1.trimmed.aligned.sam");
+ private static final File secondReadAlignedBam_firstHalf = new File(TEST_DATA_DIR, "firsthalf.read2.trimmed.aligned.sam");
+ private static final File secondReadAlignedBam_secondHalf = new File(TEST_DATA_DIR, "secondhalf.read2.trimmed.aligned.sam");
+ private static final File supplementalReadAlignedBam = new File(TEST_DATA_DIR, "aligned.supplement.sam");
+ private static final File alignedQuerynameSortedBam =
+ new File("testdata/picard/sam/aligned_queryname_sorted.sam");
+ private static final File fasta = new File("testdata/picard/sam/merger.fasta");
+ private static final String bigSequenceName = "chr7"; // The longest sequence in merger.fasta
+ private static final File sequenceDict = new File("testdata/picard/sam/merger.dict");
+ private static final File badorderUnmappedBam = new File(TEST_DATA_DIR, "unmapped.badorder.sam");
+ private static final File badorderAlignedBam = new File(TEST_DATA_DIR, "aligned.badorder.sam");
+
+ // For EarliestFragment tests, tag placed on the alignments which are expected to be marked as primary.
+ private static final String ONE_OF_THE_BEST_TAG = "YB";
+
+ public String getCommandLineProgramName() {
+ return MergeBamAlignment.class.getSimpleName();
+ }
+
+ @Test
+ public void testMergerWithSupplemental() throws Exception {
+ final File outputWithSupplemental = File.createTempFile("mergeWithSupplementalTest", ".sam");
+ System.out.println(outputWithSupplemental.getAbsolutePath());
+ // outputWithSupplemental.deleteOnExit();
+
+ doMergeAlignment(unmappedBam,
+ Collections.singletonList(supplementalReadAlignedBam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, outputWithSupplemental,
+ SamPairUtil.PairOrientation.FR, null, null, null
+ );
+
+ final SamReader result = SamReaderFactory.makeDefault().open(outputWithSupplemental);
+
+ final List<Integer> clipAdapterFlags = new ArrayList<Integer>(Arrays.asList(99, 2147, 147, 2195));
+ final List<Integer> foundClipAdapterFlags = new ArrayList<Integer>();
+
+ for (final SAMRecord sam : result) {
+ if (sam.getReadName().equals("both_reads_align_clip_adapter")) {
+ foundClipAdapterFlags.add(sam.getFlags());
+ }
+
+ // This tests that we clip both (a) when the adapter is marked in the unmapped BAM file and
+ // (b) when the insert size is less than the read length
+ if (sam.getReadName().equals("both_reads_align_clip_marked")) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7");
+ if (sam.getReadNegativeStrandFlag()) {
+ Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " + sam.getReadName());
+ } else {
+ Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " + sam.getReadName());
+ }
+ }
+ else if (sam.getReadName().equals("both_reads_align_clip_adapter")) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7");
+ if (!sam.getSupplementaryAlignmentFlag()) {
+ if (sam.getReadNegativeStrandFlag()) Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " + sam.getReadName());
+ else Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " + sam.getReadName());
+ }
+ }
+ // This tests that we DON'T clip when we run off the end if there are equal to or more than
+ // MIN_ADAPTER_BASES hanging off the end
+ else if (sam.getReadName().equals("both_reads_align_min_adapter_bases_exceeded")) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7");
+ Assert.assertTrue(!sam.getCigarString().contains("S"),
+ "Read was clipped when it should not be.");
+ } else if (sam.getReadName().equals("neither_read_aligns_or_present")) {
+ Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should be unmapped but isn't");
+ }
+ // Two pairs in which only the first read should align
+ else if (sam.getReadName().equals("both_reads_present_only_first_aligns") ||
+ sam.getReadName().equals("read_2_too_many_gaps")) {
+ if (sam.getFirstOfPairFlag()) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7", "Read should be mapped but isn't");
+ } else {
+ Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should not be mapped but is");
+ }
+ } else {
+ throw new Exception("Unexpected read name: " + sam.getReadName());
+ }
+ }
+
+ // Make sure that we have the appropriate primary and supplementary reads in the new file
+ Assert.assertEquals(foundClipAdapterFlags.size(), clipAdapterFlags.size());
+ Collections.sort(clipAdapterFlags);
+ Collections.sort(foundClipAdapterFlags);
+ for (int i = 0; i < clipAdapterFlags.size(); i++) {
+ Assert.assertEquals(clipAdapterFlags.get(i), foundClipAdapterFlags.get(i));
+ }
+
+ }
+
+ @Test
+ public void testMerger() throws Exception {
+ final File output = File.createTempFile("mergeTest", ".sam");
+ output.deleteOnExit();
+
+ doMergeAlignment(unmappedBam, Collections.singletonList(alignedBam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, output,
+ SamPairUtil.PairOrientation.FR, null, null, null
+ );
+
+ SamReader result = SamReaderFactory.makeDefault().open(output);
+ Assert.assertEquals(result.getFileHeader().getSequenceDictionary().getSequences().size(), 8,
+ "Number of sequences did not match");
+ SAMProgramRecord pg = result.getFileHeader().getProgramRecords().get(0);
+ Assert.assertEquals(pg.getProgramGroupId(), "0");
+ Assert.assertEquals(pg.getProgramVersion(), "1.0");
+ Assert.assertEquals(pg.getCommandLine(), "align!");
+ Assert.assertEquals(pg.getProgramName(), "myAligner");
+
+ final SAMReadGroupRecord rg = result.getFileHeader().getReadGroups().get(0);
+ Assert.assertEquals(rg.getReadGroupId(), "0");
+ Assert.assertEquals(rg.getSample(), "Hi,Mom!");
+
+ Assert.assertEquals(result.getFileHeader().getSortOrder(), SAMFileHeader.SortOrder.coordinate);
+
+ for (final SAMRecord sam : result) {
+ // This tests that we clip both (a) when the adapter is marked in the unmapped BAM file and
+ // (b) when the insert size is less than the read length
+ if (sam.getReadName().equals("both_reads_align_clip_adapter") ||
+ sam.getReadName().equals("both_reads_align_clip_marked")) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7");
+ if (sam.getReadNegativeStrandFlag()) {
+ Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " +
+ sam.getReadName());
+ } else {
+ Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " +
+ sam.getReadName());
+ }
+ }
+ // This tests that we DON'T clip when we run off the end if there are equal to or more than
+ // MIN_ADAPTER_BASES hanging off the end
+ else if (sam.getReadName().equals("both_reads_align_min_adapter_bases_exceeded")) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7");
+ Assert.assertTrue(sam.getCigarString().indexOf("S") == -1,
+ "Read was clipped when it should not be.");
+ } else if (sam.getReadName().equals("neither_read_aligns_or_present")) {
+ Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should be unmapped but isn't");
+ }
+ // Two pairs in which only the first read should align
+ else if (sam.getReadName().equals("both_reads_present_only_first_aligns") ||
+ sam.getReadName().equals("read_2_too_many_gaps")) {
+ if (sam.getFirstOfPairFlag()) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7", "Read should be mapped but isn't");
+ } else {
+ Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should not be mapped but is");
+ }
+ } else {
+ throw new Exception("Unexpected read name: " + sam.getReadName());
+ }
+
+ }
+
+ // Quick test to make sure the program record gets picked up from the file if not specified
+ // on the command line.
+ doMergeAlignment(unmappedBam, Collections.singletonList(alignedBam),
+ null, null, null, null,
+ false, true, false, 1,
+ null, null, null, null,
+ true, fasta, output,
+ SamPairUtil.PairOrientation.FR, null, null, null
+ );
+
+ CloserUtil.close(result);
+
+ result = SamReaderFactory.makeDefault().open(output);
+ pg = result.getFileHeader().getProgramRecords().get(0);
+ Assert.assertEquals(pg.getProgramGroupId(), "1",
+ "Program group ID not picked up correctly from aligned BAM");
+ Assert.assertEquals(pg.getProgramVersion(), "2.0",
+ "Program version not picked up correctly from aligned BAM");
+ Assert.assertNull(pg.getCommandLine(),
+ "Program command line not picked up correctly from aligned BAM");
+ Assert.assertEquals(pg.getProgramName(), "Hey!",
+ "Program name not picked up correctly from aligned BAM");
+
+ CloserUtil.close(result);
+ }
+
+
+ @Test
+ public void testMergerFromMultipleFiles() throws Exception {
+ final File output = File.createTempFile("mergeTest", ".sam");
+ output.deleteOnExit();
+
+ doMergeAlignment(unmappedBam, Arrays.asList(oneHalfAlignedBam, otherHalfAlignedBam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, output,
+ SamPairUtil.PairOrientation.FR, null, null, null
+ );
+
+ final SamReader result = SamReaderFactory.makeDefault().open(output);
+
+ for (final SAMRecord sam : result) {
+ // This tests that we clip both (a) when the adapter is marked in the unmapped BAM file and
+ // (b) when the insert size is less than the read length
+ if (sam.getReadName().equals("both_reads_align_clip_adapter") ||
+ sam.getReadName().equals("both_reads_align_clip_marked")) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7");
+ if (sam.getReadNegativeStrandFlag()) {
+ Assert.assertEquals(sam.getCigarString(), "5S96M", "Incorrect CIGAR string for " +
+ sam.getReadName());
+ } else {
+ Assert.assertEquals(sam.getCigarString(), "96M5S", "Incorrect CIGAR string for " +
+ sam.getReadName());
+ }
+ }
+ // This tests that we DON'T clip when we run off the end if there are equal to or more than
+ // MIN_ADAPTER_BASES hanging off the end
+ else if (sam.getReadName().equals("both_reads_align_min_adapter_bases_exceeded")) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7");
+ Assert.assertTrue(sam.getCigarString().indexOf("S") == -1,
+ "Read was clipped when it should not be.");
+ } else if (sam.getReadName().equals("neither_read_aligns_or_present")) {
+ Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should be unmapped but isn't");
+ }
+ // Two pairs in which only the first read should align
+ else if (sam.getReadName().equals("both_reads_present_only_first_aligns") ||
+ sam.getReadName().equals("read_2_too_many_gaps")) {
+ if (sam.getFirstOfPairFlag()) {
+ Assert.assertEquals(sam.getReferenceName(), "chr7", "Read should be mapped but isn't");
+ } else {
+ Assert.assertTrue(sam.getReadUnmappedFlag(), "Read should not be mapped but is");
+ }
+ } else {
+ throw new Exception("Unexpected read name: " + sam.getReadName());
+ }
+
+ }
+
+ }
+
+ @Test(dataProvider="data")
+ public void testSortingOnSamAlignmentMerger(final File unmapped, final File aligned, final boolean sorted, final String testName)
+ throws IOException {
+
+ final File target = File.createTempFile("target", "bam");
+ target.deleteOnExit();
+ final SamAlignmentMerger merger = new SamAlignmentMerger(unmapped, target, fasta, null, true, false,
+ false, Arrays.asList(aligned), 1, null, null, null, null, null, null,
+ Arrays.asList(SamPairUtil.PairOrientation.FR), SAMFileHeader.SortOrder.coordinate,
+ new BestMapqPrimaryAlignmentSelectionStrategy(), false);
+
+ merger.mergeAlignment(Defaults.REFERENCE_FASTA);
+ Assert.assertEquals(sorted, !merger.getForceSort());
+ final SAMRecordIterator it = SamReaderFactory.makeDefault().open(target).iterator();
+ int aln = 0;
+ while (it.hasNext()) {
+ final SAMRecord rec = it.next();
+ if (!rec.getReadUnmappedFlag()) {
+ aln++;
+ }
+ }
+ Assert.assertEquals(aln, 6, "Incorrect number of aligned reads in merged BAM file");
+ }
+
+ @DataProvider(name="data")
+ public Object[][] getDataForSortingTest() {
+ return new Object[][] {
+ {unmappedBam, alignedQuerynameSortedBam, true, "Basic test with pre-sorted alignment"},
+ {unmappedBam, alignedBam, false, "Basic test with unsorted alignment"}
+
+ };
+ }
+
+ /**
+ * Minimal test of merging data from separate read 1 and read 2 alignments
+ */
+ @Test(dataProvider="separateTrimmed")
+ public void testMergingFromSeparatedReadTrimmedAlignments(final File unmapped, final List<File> r1Align, final List<File> r2Align, final int r1Trim, final int r2Trim, final String testName) throws Exception {
+ final File output = File.createTempFile("mergeMultipleAlignmentsTest", ".sam");
+ output.deleteOnExit();
+
+ doMergeAlignment(unmapped, null, r1Align, r2Align, r1Trim, r2Trim,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, output,
+ SamPairUtil.PairOrientation.FR, null, null, null
+ );
+
+ SamReaderFactory factory = SamReaderFactory.makeDefault();
+ final SamReader result = factory.open(output);
+ for (final SAMRecord sam : result) {
+ // Get the alignment record
+ final List<File> rFiles = sam.getFirstOfPairFlag() ? r1Align : r2Align;
+ SAMRecord alignment = null;
+ for (final File f : rFiles) {
+ for (final SAMRecord tmp : factory.open(f)) {
+ if (tmp.getReadName().equals(sam.getReadName())) {
+ alignment = tmp;
+ break;
+ }
+ }
+ if (alignment != null) break;
+ }
+
+ final int trim = sam.getFirstOfPairFlag() ? r1Trim : r2Trim;
+ final int notWrittenToFastq = sam.getReadLength() - (trim + alignment.getReadLength());
+ final int beginning = sam.getReadNegativeStrandFlag() ? notWrittenToFastq : trim;
+ final int end = sam.getReadNegativeStrandFlag() ? trim : notWrittenToFastq;
+
+ if (!sam.getReadUnmappedFlag()) {
+ final CigarElement firstMergedCigarElement = sam.getCigar().getCigarElement(0);
+ final CigarElement lastMergedCigarElement = sam.getCigar().getCigarElement(sam.getCigar().getCigarElements().size() - 1);
+ final CigarElement firstAlignedCigarElement = alignment.getCigar().getCigarElement(0);
+ final CigarElement lastAlignedCigarElement = alignment.getCigar().getCigarElement(alignment.getCigar().getCigarElements().size() - 1);
+
+ if (beginning > 0) {
+ Assert.assertEquals(firstMergedCigarElement.getOperator(), CigarOperator.S, "First element is not a soft clip");
+ Assert.assertEquals(firstMergedCigarElement.getLength(), beginning + ((firstAlignedCigarElement.getOperator() == CigarOperator.S) ? firstAlignedCigarElement.getLength() : 0));
+ }
+ if (end > 0) {
+ Assert.assertEquals(lastMergedCigarElement.getOperator(), CigarOperator.S, "Last element is not a soft clip");
+ Assert.assertEquals(lastMergedCigarElement.getLength(), end + ((lastAlignedCigarElement.getOperator() == CigarOperator.S) ? lastAlignedCigarElement.getLength() : 0));
+ }
+ }
+ }
+
+ }
+
+ @DataProvider(name="separateTrimmed")
+ public Object[][] getDataForMergingTest() {
+ return new Object[][] {
+ // Tests using one file for each read, queryname sorted, trimmed, not all bases written
+ {mergingUnmappedBam, Arrays.asList(firstReadAlignedBam), Arrays.asList(secondReadAlignedBam), 17, 20, "one file per read"},
+ // Tests using multiple files for each read, coordinate sorted, trimmed, not all bases written
+ {mergingUnmappedBam, Arrays.asList(firstReadAlignedBam_firstHalf, firstReadAlignedBam_secondHalf),
+ Arrays.asList(secondReadAlignedBam_firstHalf, secondReadAlignedBam_secondHalf), 17, 20, "two files per read"}
+ };
+ }
+
+ @Test(expectedExceptions = {IllegalStateException.class, PicardException.class})
+ public void testOldQuerynameSortFails() throws IOException {
+
+ final File merged = File.createTempFile("merged", BamFileIoUtils.BAM_FILE_EXTENSION);
+ merged.deleteOnExit();
+
+ doMergeAlignment(badorderUnmappedBam, Collections.singletonList(badorderAlignedBam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, merged,
+ SamPairUtil.PairOrientation.FR, null,
+ null, null
+ );
+ Assert.fail("Merger should have failed because unmapped reads are not in queryname order but didn't");
+ }
+
+ @Test
+ public void testMultiHit() throws IOException {
+ final File unmappedSam = new File(TEST_DATA_DIR, "multihit.unmapped.sam");
+ final File alignedSam = new File(TEST_DATA_DIR, "multihit.aligned.sam");
+ final File merged = File.createTempFile("merged", ".sam");
+ merged.deleteOnExit();
+
+ doMergeAlignment(unmappedSam, Collections.singletonList(alignedSam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, merged,
+ null, null, null, null
+ );
+
+ // Iterate over the merged output and gather some statistics
+ final Map<String, AlignmentAccumulator> accumulatorMap = new HashMap<String, AlignmentAccumulator>();
+
+ final SamReader reader = SamReaderFactory.makeDefault().open(merged);
+ for (final SAMRecord rec : reader) {
+ final String readName;
+ if (!rec.getReadPairedFlag()) readName = rec.getReadName();
+ else if (rec.getFirstOfPairFlag()) readName = rec.getReadName() + "/1";
+ else readName = rec.getReadName() + "/2";
+ AlignmentAccumulator acc = accumulatorMap.get(readName);
+ if (acc == null) {
+ acc = new AlignmentAccumulator();
+ accumulatorMap.put(readName, acc);
+ }
+ if (rec.getReadUnmappedFlag()) {
+ Assert.assertFalse(acc.seenUnaligned, readName);
+ acc.seenUnaligned = true;
+ } else {
+ ++acc.numAlignments;
+ if (!rec.getNotPrimaryAlignmentFlag()) {
+ Assert.assertNull(acc.primaryAlignmentSequence, readName);
+ acc.primaryAlignmentSequence = rec.getReferenceName();
+ }
+ }
+ }
+
+ // Set up expected results
+ final Map<String, AlignmentAccumulator> expectedMap = new HashMap<String, AlignmentAccumulator>();
+ expectedMap.put("frag_hit", new AlignmentAccumulator(false, 1, "chr1"));
+ expectedMap.put("frag_multihit", new AlignmentAccumulator(false, 3, "chr2"));
+ expectedMap.put("frag_no_hit", new AlignmentAccumulator(true, 0, null));
+ expectedMap.put("pair_both_hit/1", new AlignmentAccumulator(false, 1, "chr7"));
+ expectedMap.put("pair_both_hit/2", new AlignmentAccumulator(false, 1, "chr7"));
+ expectedMap.put("pair_both_multihit/1", new AlignmentAccumulator(false, 3, "chr8"));
+ expectedMap.put("pair_both_multihit/2", new AlignmentAccumulator(false, 3, "chr8"));
+ expectedMap.put("pair_first_hit/1", new AlignmentAccumulator(false, 1, "chr1"));
+ expectedMap.put("pair_first_hit/2", new AlignmentAccumulator(true, 0, null));
+ expectedMap.put("pair_first_multihit/1", new AlignmentAccumulator(false, 3, "chr1"));
+ expectedMap.put("pair_first_multihit/2", new AlignmentAccumulator(true, 0, null));
+ expectedMap.put("pair_no_hit/1", new AlignmentAccumulator(true, 0, null));
+ expectedMap.put("pair_no_hit/2", new AlignmentAccumulator(true, 0, null));
+ expectedMap.put("pair_second_hit/1", new AlignmentAccumulator(true, 0, null));
+ expectedMap.put("pair_second_hit/2", new AlignmentAccumulator(false, 1, "chr1"));
+ expectedMap.put("pair_second_multihit/1", new AlignmentAccumulator(true, 0, null));
+ expectedMap.put("pair_second_multihit/2", new AlignmentAccumulator(false, 3, "chr3"));
+
+ Assert.assertEquals(accumulatorMap.size(), expectedMap.size());
+
+ for (final Map.Entry<String, AlignmentAccumulator> entry : expectedMap.entrySet()) {
+ final AlignmentAccumulator actual = accumulatorMap.get(entry.getKey());
+ Assert.assertEquals(actual, entry.getValue(), entry.getKey());
+ }
+
+ assertSamValid(merged);
+ }
+
+ private void assertSamValid(final File sam) {
+ new ValidateSamTester().assertSamValid(sam);
+ }
+
+ private static class AlignmentAccumulator {
+ boolean seenUnaligned = false;
+ int numAlignments = 0;
+ String primaryAlignmentSequence = null;
+
+ private AlignmentAccumulator() {}
+
+ private AlignmentAccumulator(final boolean seenUnaligned, final int numAlignments, final String primaryAlignmentSequence) {
+ this.seenUnaligned = seenUnaligned;
+ this.numAlignments = numAlignments;
+ this.primaryAlignmentSequence = primaryAlignmentSequence;
+ }
+
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final AlignmentAccumulator that = (AlignmentAccumulator) o;
+
+ if (numAlignments != that.numAlignments) return false;
+ if (seenUnaligned != that.seenUnaligned) return false;
+ if (primaryAlignmentSequence != null ? !primaryAlignmentSequence.equals(that.primaryAlignmentSequence) : that.primaryAlignmentSequence != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (seenUnaligned ? 1 : 0);
+ result = 31 * result + numAlignments;
+ result = 31 * result + (primaryAlignmentSequence != null ? primaryAlignmentSequence.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "AlignmentAccumulator{" +
+ "seenUnaligned=" + seenUnaligned +
+ ", numAlignments=" + numAlignments +
+ ", primaryAlignmentSequence='" + primaryAlignmentSequence + '\'' +
+ '}';
+ }
+ }
+
+ /**
+ * Read a single paired-end read from a file, and create one or more aligned records for the read pair based on
+ * the lists, merge with the original paired-end read, and assert expected results.
+ * @param description
+ * @param firstOfPair List that describes the aligned SAMRecords to create for the first end.
+ * @param secondOfPair List that describes the aligned SAMRecords to create for the second end.
+ * @param expectedPrimaryHitIndex Expected value for the HI tag in the primary alignment in the merged output.
+ * @param expectedNumFirst Expected number of first-of-pair SAMRecords in the merged output.
+ * @param expectedNumSecond Expected number of second-of-pair SAMRecords in the merged output.
+ * @param expectedPrimaryMapq Sum of mapqs of both ends of primary alignment in the merged output.
+ * @throws Exception
+ */
+ @Test(dataProvider = "testPairedMultiHitWithFilteringTestCases")
+ public void testPairedMultiHitWithFiltering(final String description, final List<HitSpec> firstOfPair, final List<HitSpec> secondOfPair,
+ final Integer expectedPrimaryHitIndex, final int expectedNumFirst,
+ final int expectedNumSecond, final int expectedPrimaryMapq) throws Exception {
+
+ // Create the aligned file by copying bases, quals, readname from the unmapped read, and conforming to each HitSpec.
+ final File unmappedSam = new File(TEST_DATA_DIR, "multihit.filter.unmapped.sam");
+ final SAMRecordIterator unmappedSamFileIterator = SamReaderFactory.makeDefault().open(unmappedSam).iterator();
+ final SAMRecord firstUnmappedRec = unmappedSamFileIterator.next();
+ final SAMRecord secondUnmappedRec = unmappedSamFileIterator.next();
+ unmappedSamFileIterator.close();
+ final File alignedSam = File.createTempFile("aligned.", ".sam");
+ alignedSam.deleteOnExit();
+ final SAMFileHeader alignedHeader = new SAMFileHeader();
+ alignedHeader.setSortOrder(SAMFileHeader.SortOrder.queryname);
+ alignedHeader.setSequenceDictionary(SamReaderFactory.makeDefault().getFileHeader(sequenceDict).getSequenceDictionary());
+ final SAMFileWriter alignedWriter = new SAMFileWriterFactory().makeSAMWriter(alignedHeader, true, alignedSam);
+ for (int i = 0; i < Math.max(firstOfPair.size(), secondOfPair.size()); ++i) {
+ final HitSpec firstHitSpec = firstOfPair.isEmpty()? null: firstOfPair.get(i);
+ final HitSpec secondHitSpec = secondOfPair.isEmpty()? null: secondOfPair.get(i);
+ final SAMRecord first = makeRead(alignedHeader, firstUnmappedRec, firstHitSpec, true, i);
+ final SAMRecord second = makeRead(alignedHeader, secondUnmappedRec, secondHitSpec, false, i);
+ if (first != null && second != null) SamPairUtil.setMateInfo(first, second, alignedHeader);
+ if (first != null) {
+ if (second == null) first.setMateUnmappedFlag(true);
+ alignedWriter.addAlignment(first);
+ }
+ if (second != null) {
+ if (first == null) second.setMateUnmappedFlag(true);
+ alignedWriter.addAlignment(second);
+ }
+ }
+ alignedWriter.close();
+
+ // Merge aligned file with original unmapped file.
+ final File mergedSam = File.createTempFile("merged.", ".sam");
+ mergedSam.deleteOnExit();
+
+ doMergeAlignment(unmappedSam, Collections.singletonList(alignedSam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, mergedSam,
+ null, null, null, null
+ );
+
+ assertSamValid(mergedSam);
+
+ // Tally metrics and check for agreement with expected.
+ final SamReader mergedReader = SamReaderFactory.makeDefault().open(mergedSam);
+ int numFirst = 0;
+ int numSecond = 0;
+ Integer primaryHitIndex = null;
+ int primaryMapq = 0;
+ for (final SAMRecord rec : mergedReader) {
+ if (rec.getFirstOfPairFlag()) ++numFirst;
+ if (rec.getSecondOfPairFlag()) ++numSecond;
+ if (!rec.getNotPrimaryAlignmentFlag() && !rec.getReadUnmappedFlag()) {
+ final Integer hitIndex = rec.getIntegerAttribute(SAMTag.HI.name());
+ final int newHitIndex = (hitIndex == null? -1: hitIndex);
+ if (primaryHitIndex == null) primaryHitIndex = newHitIndex;
+ else Assert.assertEquals(newHitIndex, primaryHitIndex.intValue());
+ primaryMapq += rec.getMappingQuality();
+ }
+ }
+ Assert.assertEquals(numFirst, expectedNumFirst);
+ Assert.assertEquals(numSecond, expectedNumSecond);
+ Assert.assertEquals(primaryHitIndex, expectedPrimaryHitIndex);
+ Assert.assertEquals(primaryMapq, expectedPrimaryMapq);
+ }
+
+ private SAMRecord makeRead(final SAMFileHeader alignedHeader, final SAMRecord unmappedRec, final HitSpec hitSpec,
+ final boolean firstOfPair, final int hitIndex) {
+ if (hitSpec == null) return null;
+ final SAMRecord rec = makeRead(alignedHeader, unmappedRec, hitSpec, hitIndex);
+ rec.setReadPairedFlag(true);
+ if (firstOfPair) {
+ rec.setFirstOfPairFlag(true);
+ rec.setAlignmentStart(hitIndex + 1);
+ } else {
+ rec.setSecondOfPairFlag(true);
+ rec.setAlignmentStart(hitIndex + 201);
+ }
+ return rec;
+ }
+
+ private SAMRecord makeRead(final SAMFileHeader alignedHeader, final SAMRecord unmappedRec, final HitSpec hitSpec, final int hitIndex) {
+ final SAMRecord rec = new SAMRecord(alignedHeader);
+ rec.setReadName(unmappedRec.getReadName());
+ rec.setReadBases(unmappedRec.getReadBases());
+ rec.setBaseQualities(unmappedRec.getBaseQualities());
+ rec.setMappingQuality(hitSpec.mapq);
+ if (!hitSpec.primary) rec.setNotPrimaryAlignmentFlag(true);
+ final Cigar cigar = new Cigar();
+ final int readLength = rec.getReadLength();
+ if (hitSpec.filtered) {
+ // Add two insertions so alignment is filtered.
+ cigar.add(new CigarElement(readLength-4, CigarOperator.M));
+ cigar.add(new CigarElement(1, CigarOperator.I));
+ cigar.add(new CigarElement(1, CigarOperator.M));
+ cigar.add(new CigarElement(1, CigarOperator.I));
+ cigar.add(new CigarElement(1, CigarOperator.M));
+ } else {
+ cigar.add(new CigarElement(readLength, CigarOperator.M));
+ }
+ rec.setCigar(cigar);
+
+ rec.setReferenceName(bigSequenceName);
+ rec.setAttribute(SAMTag.HI.name(), hitIndex);
+ rec.setAlignmentStart(hitIndex + 1);
+
+ return rec;
+ }
+
+ class HitSpec {
+ final boolean primary;
+ final boolean filtered;
+ final int mapq;
+
+ HitSpec(final boolean primary, final boolean filtered, final int mapq) {
+ this.primary = primary;
+ this.filtered = filtered;
+ this.mapq = mapq;
+ }
+ }
+
+ @DataProvider(name="testPairedMultiHitWithFilteringTestCases")
+ public Object[][] testPairedMultiHitWithFilteringTestCases() {
+ final ArrayList<Object[]> ret = new ArrayList<Object[]>();
+ List<HitSpec> firstOfPair;
+ List<HitSpec> secondOfPair;
+
+ // One end aligned test cases...
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = Collections.emptyList();
+ firstOfPair.add(new HitSpec(false, true, 10));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ firstOfPair.add(new HitSpec(false, false, 9));
+ ret.add(new Object[]{"Only 1st end has alignments, primary alignment is filtered, one 2ndary is filtered", firstOfPair, secondOfPair, -1, 1, 1, 9});
+
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair = Collections.emptyList();
+ secondOfPair.add(new HitSpec(false, false, 11));
+ secondOfPair.add(new HitSpec(true, true, 10));
+ secondOfPair.add(new HitSpec(false, true, 9));
+ ret.add(new Object[]{"Only 2nd end has alignments, primary alignment is filtered, one 2ndary is filtered", firstOfPair, secondOfPair, -1, 1, 1, 11});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = Collections.emptyList();
+ firstOfPair.add(new HitSpec(false, true, 10));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ firstOfPair.add(new HitSpec(false, true, 9));
+ ret.add(new Object[]{"Only 1st end has alignments, all are filtered", firstOfPair, secondOfPair, null, 1, 1, 0});
+
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair = Collections.emptyList();
+ secondOfPair.add(new HitSpec(false, true, 10));
+ secondOfPair.add(new HitSpec(true, true, 10));
+ secondOfPair.add(new HitSpec(false, true, 9));
+ ret.add(new Object[]{"Only 2nd end has alignments, all are filtered", firstOfPair, secondOfPair, null, 1, 1, 0});
+
+ // Both ends aligned test cases...
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, false, 10));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ firstOfPair.add(new HitSpec(false, false, 9));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ secondOfPair.add(new HitSpec(true, false, 30));
+ secondOfPair.add(new HitSpec(false, false, 9));
+ ret.add(new Object[]{"Both ends aligned, one end of primary filtered", firstOfPair, secondOfPair, -1, 3, 3, 30});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, false, 10));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ firstOfPair.add(new HitSpec(false, true, 9));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ secondOfPair.add(new HitSpec(true, false, 30));
+ secondOfPair.add(new HitSpec(false, false, 9));
+ ret.add(new Object[]{"Both ends aligned, one end of primary filtered, one end of secondary filtered", firstOfPair, secondOfPair, -1, 2, 3, 30});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, false, 9));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ firstOfPair.add(new HitSpec(false, false, 10));
+ secondOfPair.add(new HitSpec(false, false, 9));
+ secondOfPair.add(new HitSpec(true, true, 30));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ ret.add(new Object[]{"Both ends aligned, both ends of primary filtered", firstOfPair, secondOfPair, 1, 2, 2, 21});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, false, 9));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ firstOfPair.add(new HitSpec(false, false, 10));
+ secondOfPair.add(new HitSpec(false, false, 12));
+ secondOfPair.add(new HitSpec(true, true, 30));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ ret.add(new Object[]{"Both ends aligned, both ends of primary filtered, two secondary alignments with identical mapq",
+ firstOfPair, secondOfPair, 1, 2, 2, 21});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, true, 9));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ firstOfPair.add(new HitSpec(false, false, 10));
+ secondOfPair.add(new HitSpec(false, false, 30));
+ secondOfPair.add(new HitSpec(true, true, 30));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ ret.add(new Object[]{"Both ends aligned, both ends of primary filtered, one end of secondary filtered, but with high mapq",
+ firstOfPair, secondOfPair, -1, 2, 2, 30});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, true, 9));
+ firstOfPair.add(new HitSpec(false, false, 10));
+ firstOfPair.add(new HitSpec(true, false, 10));
+ secondOfPair.add(new HitSpec(false, true, 30));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ secondOfPair.add(new HitSpec(true, false, 30));
+ ret.add(new Object[]{"Both ends aligned, secondary filtered on both ends", firstOfPair, secondOfPair, 1, 2, 2, 40});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, false, 9));
+ firstOfPair.add(new HitSpec(false, false, 10));
+ firstOfPair.add(new HitSpec(true, false, 10));
+ secondOfPair.add(new HitSpec(false, true, 30));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ secondOfPair.add(new HitSpec(true, false, 30));
+ ret.add(new Object[]{"Both ends aligned, secondary filtered on second end", firstOfPair, secondOfPair, 2, 3, 2, 40});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, false, 9));
+ firstOfPair.add(new HitSpec(false, true, 10));
+ firstOfPair.add(new HitSpec(true, false, 10));
+ secondOfPair.add(new HitSpec(false, false, 30));
+ secondOfPair.add(new HitSpec(false, false, 11));
+ secondOfPair.add(new HitSpec(true, false, 30));
+ ret.add(new Object[]{"Both ends aligned, secondary filtered on first end", firstOfPair, secondOfPair, 2, 2, 3, 40});
+
+ firstOfPair = new ArrayList<HitSpec>();
+ secondOfPair = new ArrayList<HitSpec>();
+ firstOfPair.add(new HitSpec(false, true, 9));
+ firstOfPair.add(new HitSpec(false, true, 10));
+ firstOfPair.add(new HitSpec(true, true, 10));
+ secondOfPair.add(new HitSpec(false, true, 30));
+ secondOfPair.add(new HitSpec(false, true, 11));
+ secondOfPair.add(new HitSpec(true, true, 30));
+ ret.add(new Object[]{"Both ends aligned, all filtered", firstOfPair, secondOfPair, null, 1, 1, 0});
+
+ return ret.toArray(new Object[0][]);
+ }
+
+
+
+
+ /**
+ * Read a single fragment read from a file, and create one or more aligned records for the read pair based on
+ * the lists, merge with the original read, and assert expected results.
+ * @param description
+ * @param hitSpecs List that describes the aligned SAMRecords to create.
+ * @param expectedPrimaryHitIndex Expected value for the HI tag in the primary alignment in the merged output.
+ * @param expectedNumReads Expected number of SAMRecords in the merged output.
+ * @param expectedPrimaryMapq Mapq of both ends of primary alignment in the merged output.
+ * @throws Exception
+ */
+ @Test(dataProvider = "testFragmentMultiHitWithFilteringTestCases")
+ public void testFragmentMultiHitWithFiltering(final String description, final List<HitSpec> hitSpecs,
+ final Integer expectedPrimaryHitIndex, final int expectedNumReads,
+ final int expectedPrimaryMapq) throws Exception {
+
+ // Create the aligned file by copying bases, quals, readname from the unmapped read, and conforming to each HitSpec.
+ final File unmappedSam = new File(TEST_DATA_DIR, "multihit.filter.fragment.unmapped.sam");
+ final SAMRecordIterator unmappedSamFileIterator = SamReaderFactory.makeDefault().open(unmappedSam).iterator();
+ final SAMRecord unmappedRec = unmappedSamFileIterator.next();
+ unmappedSamFileIterator.close();
+ final File alignedSam = File.createTempFile("aligned.", ".sam");
+ alignedSam.deleteOnExit();
+ final SAMFileHeader alignedHeader = new SAMFileHeader();
+ alignedHeader.setSortOrder(SAMFileHeader.SortOrder.queryname);
+ alignedHeader.setSequenceDictionary(SamReaderFactory.makeDefault().getFileHeader(sequenceDict).getSequenceDictionary());
+ final SAMFileWriter alignedWriter = new SAMFileWriterFactory().makeSAMWriter(alignedHeader, true, alignedSam);
+ for (int i = 0; i < hitSpecs.size(); ++i) {
+ final HitSpec hitSpec = hitSpecs.get(i);
+ final SAMRecord mappedRec = makeRead(alignedHeader, unmappedRec, hitSpec, i);
+ if (mappedRec != null) {
+ alignedWriter.addAlignment(mappedRec);
+ }
+ }
+ alignedWriter.close();
+
+ // Merge aligned file with original unmapped file.
+ final File mergedSam = File.createTempFile("merged.", ".sam");
+ mergedSam.deleteOnExit();
+
+ doMergeAlignment(unmappedSam, Collections.singletonList(alignedSam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ false, fasta, mergedSam,
+ null, null, null, null);
+
+ assertSamValid(mergedSam);
+
+ // Tally metrics and check for agreement with expected.
+ final SamReader mergedReader = SamReaderFactory.makeDefault().open(mergedSam);
+ int numReads = 0;
+ Integer primaryHitIndex = null;
+ int primaryMapq = 0;
+ for (final SAMRecord rec : mergedReader) {
+ ++numReads;
+ if (!rec.getNotPrimaryAlignmentFlag() && !rec.getReadUnmappedFlag()) {
+ final Integer hitIndex = rec.getIntegerAttribute(SAMTag.HI.name());
+ final int newHitIndex = (hitIndex == null? -1: hitIndex);
+ Assert.assertNull(primaryHitIndex);
+ primaryHitIndex = newHitIndex;
+ primaryMapq = rec.getMappingQuality();
+ }
+ }
+ Assert.assertEquals(numReads, expectedNumReads);
+ Assert.assertEquals(primaryHitIndex, expectedPrimaryHitIndex);
+ Assert.assertEquals(primaryMapq, expectedPrimaryMapq);
+ }
+
+ @DataProvider(name="testFragmentMultiHitWithFilteringTestCases")
+ public Object[][] testFragmentMultiHitWithFilteringTestCases() {
+ final ArrayList<Object[]> ret = new ArrayList<Object[]>();
+ List<HitSpec> hitSpecs;
+
+ hitSpecs = new ArrayList<HitSpec>();
+ hitSpecs.add(new HitSpec(false, true, 10));
+ hitSpecs.add(new HitSpec(true, false, 8));
+ hitSpecs.add(new HitSpec(false, false, 9));
+ ret.add(new Object[]{"One secondary filtered", hitSpecs, -1, 2, 8});
+
+ hitSpecs = new ArrayList<HitSpec>();
+ hitSpecs.add(new HitSpec(false, false, 10));
+ hitSpecs.add(new HitSpec(true, true, 8));
+ hitSpecs.add(new HitSpec(false, false, 11));
+ ret.add(new Object[]{"Primary filtered", hitSpecs, -1, 2, 11});
+
+ hitSpecs = new ArrayList<HitSpec>();
+ hitSpecs.add(new HitSpec(false, false, 11));
+ hitSpecs.add(new HitSpec(true, true, 8));
+ hitSpecs.add(new HitSpec(false, false, 11));
+ ret.add(new Object[]{"Primary filtered, two secondaries with identical mapq", hitSpecs, -1, 2, 11});
+
+ hitSpecs = new ArrayList<HitSpec>();
+ hitSpecs.add(new HitSpec(false, true, 10));
+ hitSpecs.add(new HitSpec(true, true, 8));
+ hitSpecs.add(new HitSpec(false, false, 9));
+ ret.add(new Object[]{"Primary and one secondary filtered", hitSpecs, -1, 1, 9});
+
+ hitSpecs = new ArrayList<HitSpec>();
+ hitSpecs.add(new HitSpec(false, true, 10));
+ hitSpecs.add(new HitSpec(true, true, 8));
+ hitSpecs.add(new HitSpec(false, true, 9));
+ ret.add(new Object[]{"All filtered", hitSpecs, null, 1, 0});
+
+ return ret.toArray(new Object[0][]);
+ }
+
+ /**
+ * Confirm that paired reads are rejected by PrimaryAlignmentStrategy.EarliestFragment.
+ */
+ @Test(expectedExceptions = UnsupportedOperationException.class)
+ public void testEarliestFragmentStrategyPaired() throws Exception {
+ final File output = File.createTempFile("mergeTest", ".sam");
+ output.deleteOnExit();
+
+ final File unmappedSam = File.createTempFile("unmapped.", ".sam");
+ unmappedSam.deleteOnExit();
+ final SAMFileWriterFactory factory = new SAMFileWriterFactory();
+ final SAMFileHeader header = new SAMFileHeader();
+ header.setSortOrder(SAMFileHeader.SortOrder.queryname);
+ final String cigar = "16M";
+
+ final SAMRecord firstOfPair = new SAMRecord(header);
+ firstOfPair.setReadName("theRead");
+ firstOfPair.setReadString("ACGTACGTACGTACGT");
+ firstOfPair.setBaseQualityString("5555555555555555");
+ firstOfPair.setReadUnmappedFlag(true);
+ firstOfPair.setReadPairedFlag(true);
+ firstOfPair.setFirstOfPairFlag(true);
+
+ final SAMRecord secondOfPair = new SAMRecord(header);
+ secondOfPair.setReadName("theRead");
+ secondOfPair.setReadString("ACGTACGTACGTACGT");
+ secondOfPair.setBaseQualityString("5555555555555555");
+ secondOfPair.setReadUnmappedFlag(true);
+ secondOfPair.setReadPairedFlag(true);
+ secondOfPair.setSecondOfPairFlag(true);
+ SamPairUtil.setMateInfo(firstOfPair, secondOfPair, header);
+
+ final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
+ unmappedWriter.addAlignment(firstOfPair);
+ unmappedWriter.addAlignment(secondOfPair);
+ unmappedWriter.close();
+
+ final File alignedSam = File.createTempFile("aligned.", ".sam");
+ alignedSam.deleteOnExit();
+
+ // Populate the header with SAMSequenceRecords
+ header.getSequenceDictionary().addSequence(new SAMSequenceRecord("chr1", 1000000));
+
+ // Create 2 alignments for each end of pair
+ final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
+ for (int i = 1; i <= 2; ++i) {
+ final SAMRecord firstOfPairAligned = new SAMRecord(header);
+ firstOfPairAligned.setReadName(firstOfPair.getReadName());
+ firstOfPairAligned.setReadBases(firstOfPair.getReadBases());
+ firstOfPairAligned.setBaseQualities(firstOfPair.getBaseQualities());
+ firstOfPairAligned.setReferenceName("chr1");
+ firstOfPairAligned.setAlignmentStart(i);
+ firstOfPairAligned.setCigarString(cigar);
+ firstOfPairAligned.setMappingQuality(100);
+ firstOfPairAligned.setReadPairedFlag(true);
+ firstOfPairAligned.setFirstOfPairFlag(true);
+ firstOfPairAligned.setAttribute(SAMTag.HI.name(), i);
+
+ final SAMRecord secondOfPairAligned = new SAMRecord(header);
+ secondOfPairAligned.setReadName(secondOfPair.getReadName());
+ secondOfPairAligned.setReadBases(secondOfPair.getReadBases());
+ secondOfPairAligned.setBaseQualities(secondOfPair.getBaseQualities());
+ secondOfPairAligned.setReferenceName("chr1");
+ secondOfPairAligned.setAlignmentStart(i + 10);
+ secondOfPairAligned.setCigarString(cigar);
+ secondOfPairAligned.setMappingQuality(100);
+ secondOfPairAligned.setReadPairedFlag(true);
+ secondOfPairAligned.setSecondOfPairFlag(true);
+ secondOfPairAligned.setAttribute(SAMTag.HI.name(), i);
+
+ SamPairUtil.setMateInfo(firstOfPairAligned, secondOfPairAligned, header);
+
+ alignedWriter.addAlignment(firstOfPairAligned);
+ alignedWriter.addAlignment(secondOfPairAligned);
+ }
+ alignedWriter.close();
+
+ doMergeAlignment(unmappedSam, Collections.singletonList(alignedSam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true,
+ fasta, output,
+ SamPairUtil.PairOrientation.FR,
+ MergeBamAlignment.PrimaryAlignmentStrategy.EarliestFragment,
+ null, null);
+
+ Assert.fail("Exception was not thrown");
+ }
+
+ /**
+ * Various scenarios for EarliestFragmentStrategy. Confirms that one of the expected ones is selected.
+ * Note that there may be an arbitrary selection due to a tie.
+ */
+ @Test(dataProvider = "testEarliestFragmentStrategyDataProvider")
+ public void testEarliestFragmentStrategy(final String testName, final MultipleAlignmentSpec[] specs) throws IOException {
+
+ final File output = File.createTempFile(testName, ".sam");
+ output.deleteOnExit();
+ final File[] sams = createSamFilesToBeMerged(specs);
+
+ doMergeAlignment(sams[0], Collections.singletonList(sams[1]),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, output,
+ SamPairUtil.PairOrientation.FR, MergeBamAlignment.PrimaryAlignmentStrategy.EarliestFragment,
+ ONE_OF_THE_BEST_TAG,
+ null
+ );
+
+
+ final SamReader mergedReader = SamReaderFactory.makeDefault().open(output);
+ boolean seenPrimary = false;
+ for (final SAMRecord rec : mergedReader) {
+ if (!rec.getNotPrimaryAlignmentFlag()) {
+ seenPrimary = true;
+ final Integer oneOfTheBest = rec.getIntegerAttribute(ONE_OF_THE_BEST_TAG);
+ Assert.assertEquals(oneOfTheBest, new Integer(1), "Read not marked as one of the best is primary: " + rec);
+ }
+ }
+ CloserUtil.close(mergedReader);
+ Assert.assertTrue(seenPrimary, "Never saw primary alignment");
+ }
+
+ @DataProvider(name = "testEarliestFragmentStrategyDataProvider")
+ public Object[][] testEarliestFragmentStrategyDataProvider() {
+ return new Object[][] {
+ {"simpleForward", new MultipleAlignmentSpec[]{new MultipleAlignmentSpec("16M", false, 200, true)}},
+ {"simpleReverse", new MultipleAlignmentSpec[]{new MultipleAlignmentSpec("16M", true, 200, true)}},
+ {"2 forward one earlier", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("1S15M", false, 200, false),
+ new MultipleAlignmentSpec("16M", false, 195, true)}},
+ {"forward earlier than reverse", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("16M", false, 200, true),
+ new MultipleAlignmentSpec("15M1S", true, 195, false)}},
+ {"reverse earlier than forward", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("2S14M", false, 200, false),
+ new MultipleAlignmentSpec("15M1S", true, 200, true)}},
+ {"tie resolved via MAPQ", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("1S15M", false, 200, false),
+ new MultipleAlignmentSpec("1S13M1S", false, 205, true),
+ new MultipleAlignmentSpec("15M1S", true, 200, false),
+ new MultipleAlignmentSpec("14M2S", true, 195, false)}},
+ {"tie with same MAPQ resolved arbitrarily", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("1S15M", false, 200, false),
+ new MultipleAlignmentSpec("1S13M1S", false, 205, true),
+ new MultipleAlignmentSpec("15M1S", true, 205, true),
+ new MultipleAlignmentSpec("14M2S", true, 195, false)}},
+ {"one cigar with deletion and higher MAPQ", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("16M", false, 200, false),
+ new MultipleAlignmentSpec("1D16M", false, 205, true)}},
+ {"one cigar with deletion and lower MAPQ", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("16M", false, 205, true),
+ new MultipleAlignmentSpec("1D16M", false, 200, false)}},
+ {"Insertion makes alignment later", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("16M", false, 200, true),
+ new MultipleAlignmentSpec("1I15M", false, 205, false)}},
+ {"one cigar with deletion and higher MAPQ -- reverse", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("16M", true, 200, false),
+ new MultipleAlignmentSpec("16M1D", true, 205, true)}},
+ {"one cigar with deletion and lower MAPQ -- reverse", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("16M", true, 205, true),
+ new MultipleAlignmentSpec("16M1D", true, 200, false)}},
+ {"Insertion makes alignment later -- reverse", new MultipleAlignmentSpec[]{
+ new MultipleAlignmentSpec("16M", true, 200, true),
+ new MultipleAlignmentSpec("15M1I", true, 205, false)}}
+ };
+ }
+
+ /**
+ * @return a 2-element array in which the first element is the unmapped SAM, and the second the mapped SAM.
+ */
+ private File[] createSamFilesToBeMerged(final MultipleAlignmentSpec[] specs) {
+ try {
+ final File unmappedSam = File.createTempFile("unmapped.", ".sam");
+ unmappedSam.deleteOnExit();
+ final SAMFileWriterFactory factory = new SAMFileWriterFactory();
+ final SAMFileHeader header = new SAMFileHeader();
+ header.setSortOrder(SAMFileHeader.SortOrder.queryname);
+ final SAMRecord unmappedRecord = new SAMRecord(header);
+
+ unmappedRecord.setReadName("theRead");
+ unmappedRecord.setReadString("ACGTACGTACGTACGT");
+ unmappedRecord.setBaseQualityString("5555555555555555");
+ unmappedRecord.setReadUnmappedFlag(true);
+
+ final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
+ unmappedWriter.addAlignment(unmappedRecord);
+ unmappedWriter.close();
+
+ final File alignedSam = File.createTempFile("aligned.", ".sam");
+ alignedSam.deleteOnExit();
+
+ final String sequence = "chr1";
+ // Populate the header with SAMSequenceRecords
+ header.getSequenceDictionary().addSequence(new SAMSequenceRecord(sequence, 1000000));
+
+ final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
+ for (final MultipleAlignmentSpec spec : specs) {
+ final SAMRecord alignedRecord = new SAMRecord(header);
+ alignedRecord.setReadName(unmappedRecord.getReadName());
+ alignedRecord.setReadBases(unmappedRecord.getReadBases());
+ alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities());
+ alignedRecord.setReferenceName(sequence);
+ alignedRecord.setAlignmentStart(1);
+ alignedRecord.setReadNegativeStrandFlag(spec.reverseStrand);
+ alignedRecord.setCigarString(spec.cigar);
+ alignedRecord.setMappingQuality(spec.mapQ);
+ if (spec.oneOfTheBest) {
+ alignedRecord.setAttribute(ONE_OF_THE_BEST_TAG, 1);
+ }
+ alignedWriter.addAlignment(alignedRecord);
+ }
+ alignedWriter.close();
+
+ return new File[]{unmappedSam, alignedSam};
+ } catch (IOException e) {
+ throw new PicardException(e.getMessage(), e);
+ }
+ }
+
+ class MultipleAlignmentSpec {
+ final String cigar;
+ final boolean reverseStrand;
+ final int mapQ;
+ final boolean oneOfTheBest;
+
+ MultipleAlignmentSpec(final String cigar, final boolean reverseStrand, final int mapQ, final boolean oneOfTheBest) {
+ this.cigar = cigar;
+ this.reverseStrand = reverseStrand;
+ this.mapQ = mapQ;
+ this.oneOfTheBest = oneOfTheBest;
+ }
+ }
+
+ /**
+ * Test that clipping of FR reads for fragments shorter than read length happens only when it should.
+ */
+ @Test
+ public void testShortFragmentClipping() throws Exception {
+ final File output = File.createTempFile("testShortFragmentClipping", ".sam");
+ output.deleteOnExit();
+ doMergeAlignment(new File(TEST_DATA_DIR, "cliptest.unmapped.sam"),
+ Collections.singletonList(new File(TEST_DATA_DIR, "cliptest.aligned.sam")),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true,
+ new File(TEST_DATA_DIR, "cliptest.fasta"), output,
+ SamPairUtil.PairOrientation.FR, null,
+ null, null);
+
+ final SamReader result = SamReaderFactory.makeDefault().open(output);
+ final Map<String, SAMRecord> firstReadEncountered = new HashMap<String, SAMRecord>();
+
+ for (final SAMRecord rec : result) {
+ final SAMRecord otherEnd = firstReadEncountered.get(rec.getReadName());
+ if (otherEnd == null) {
+ firstReadEncountered.put(rec.getReadName(), rec);
+ } else {
+ final int fragmentStart = Math.min(rec.getAlignmentStart(), otherEnd.getAlignmentStart());
+ final int fragmentEnd = Math.max(rec.getAlignmentEnd(), otherEnd.getAlignmentEnd());
+ final String[] readNameFields = rec.getReadName().split(":");
+ // Read name of each pair includes the expected fragment start and fragment end positions.
+ final int expectedFragmentStart = Integer.parseInt(readNameFields[1]);
+ final int expectedFragmentEnd = Integer.parseInt(readNameFields[2]);
+ Assert.assertEquals(fragmentStart, expectedFragmentStart, rec.getReadName());
+ Assert.assertEquals(fragmentEnd, expectedFragmentEnd, rec.getReadName());
+ }
+ }
+ result.close();
+ }
+
+ @Test(dataProvider="testBestFragmentMapqStrategy")
+ public void testBestFragmentMapqStrategy(final String testName, final int[] firstMapQs, final int[] secondMapQs,
+ final int expectedFirstMapq, final int expectedSecondMapq) throws Exception {
+ testBestFragmentMapqStrategy(testName + "includeSecondary", firstMapQs, secondMapQs, true, expectedFirstMapq,
+ expectedSecondMapq);
+ testBestFragmentMapqStrategy(testName + "excludeSecondary", firstMapQs, secondMapQs, false, expectedFirstMapq,
+ expectedSecondMapq);
+ }
+
+ private void testBestFragmentMapqStrategy(final String testName, final int[] firstMapQs, final int[] secondMapQs,
+ final boolean includeSecondary, final int expectedFirstMapq,
+ final int expectedSecondMapq) throws Exception {
+ final File unmappedSam = File.createTempFile("unmapped.", ".sam");
+ unmappedSam.deleteOnExit();
+ final SAMFileWriterFactory factory = new SAMFileWriterFactory();
+ final SAMFileHeader header = new SAMFileHeader();
+ header.setSortOrder(SAMFileHeader.SortOrder.queryname);
+
+ final String readName = "theRead";
+ final SAMRecord firstUnmappedRead = new SAMRecord(header);
+ firstUnmappedRead.setReadName(readName);
+ firstUnmappedRead.setReadString("ACGTACGTACGTACGT");
+ firstUnmappedRead.setBaseQualityString("5555555555555555");
+ firstUnmappedRead.setReadUnmappedFlag(true);
+ firstUnmappedRead.setMateUnmappedFlag(true);
+ firstUnmappedRead.setReadPairedFlag(true);
+ firstUnmappedRead.setFirstOfPairFlag(true);
+
+ final SAMRecord secondUnmappedRead = new SAMRecord(header);
+ secondUnmappedRead.setReadName(readName);
+ secondUnmappedRead.setReadString("TCGAACGTTCGAACTG");
+ secondUnmappedRead.setBaseQualityString("6666666666666666");
+ secondUnmappedRead.setReadUnmappedFlag(true);
+ secondUnmappedRead.setMateUnmappedFlag(true);
+ secondUnmappedRead.setReadPairedFlag(true);
+ secondUnmappedRead.setSecondOfPairFlag(true);
+
+
+
+ final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
+ unmappedWriter.addAlignment(firstUnmappedRead);
+ unmappedWriter.addAlignment(secondUnmappedRead);
+ unmappedWriter.close();
+
+ final File alignedSam = File.createTempFile("aligned.", ".sam");
+ alignedSam.deleteOnExit();
+
+ final String sequence = "chr1";
+ // Populate the header with SAMSequenceRecords
+ header.getSequenceDictionary().addSequence(new SAMSequenceRecord(sequence, 1000000));
+
+ final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
+
+ addAlignmentsForBestFragmentMapqStrategy(alignedWriter, firstUnmappedRead, sequence, firstMapQs);
+ addAlignmentsForBestFragmentMapqStrategy(alignedWriter, secondUnmappedRead, sequence, secondMapQs);
+ alignedWriter.close();
+
+ final File output = File.createTempFile("testBestFragmentMapqStrategy." + testName, ".sam");
+ output.deleteOnExit();
+ doMergeAlignment(unmappedSam, Collections.singletonList(alignedSam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true,
+ new File(TEST_DATA_DIR, "cliptest.fasta"), output,
+ SamPairUtil.PairOrientation.FR,
+ MergeBamAlignment.PrimaryAlignmentStrategy.BestEndMapq,
+ null, includeSecondary
+ );
+ final SamReader reader = SamReaderFactory.makeDefault().open(output);
+
+ int numFirstRecords = 0;
+ int numSecondRecords = 0;
+ int firstPrimaryMapq = -1;
+ int secondPrimaryMapq = -1;
+ for (final SAMRecord rec: reader) {
+ Assert.assertTrue(rec.getReadPairedFlag());
+ if (rec.getFirstOfPairFlag()) ++numFirstRecords;
+ else if (rec.getSecondOfPairFlag()) ++ numSecondRecords;
+ else Assert.fail("unpossible!");
+ if (!rec.getReadUnmappedFlag() && !rec.getNotPrimaryAlignmentFlag()) {
+ if (rec.getFirstOfPairFlag()) {
+ Assert.assertEquals(firstPrimaryMapq, -1);
+ firstPrimaryMapq = rec.getMappingQuality();
+ } else {
+ Assert.assertEquals(secondPrimaryMapq, -1);
+ secondPrimaryMapq = rec.getMappingQuality();
+ }
+ } else if (rec.getNotPrimaryAlignmentFlag()) {
+ Assert.assertTrue(rec.getMateUnmappedFlag());
+ }
+ }
+ reader.close();
+ Assert.assertEquals(firstPrimaryMapq, expectedFirstMapq);
+ Assert.assertEquals(secondPrimaryMapq, expectedSecondMapq);
+ if (!includeSecondary) {
+ Assert.assertEquals(numFirstRecords, 1);
+ Assert.assertEquals(numSecondRecords, 1);
+ } else {
+ // If no alignments for an end, there will be a single unmapped record
+ Assert.assertEquals(numFirstRecords, Math.max(1, firstMapQs.length));
+ Assert.assertEquals(numSecondRecords, Math.max(1, secondMapQs.length));
+ }
+ }
+
+ private void doMergeAlignment(final File unmappedBam, final List<File> alignedBams,
+ final List<File> read1AlignedBams, final List<File> read2AlignedBams, final Integer read1Trim, final Integer read2Trim,
+ final boolean alignReadsOnly, final boolean clipAdapters, final boolean isBisulfiteSequence, final int maxInsOrDels,
+ final String progRecordId, final String progGroupVersion, final String progGroupCommandLine, final String progGroupName,
+ final boolean pairedRun, final File refSeq, final File output,
+ final SamPairUtil.PairOrientation expectedOrientation, final MergeBamAlignment.PrimaryAlignmentStrategy primaryAlignmentStrategy,
+ final String attributesToRetain,
+ final Boolean includeSecondary) {
+
+ final List<String> args = new ArrayList<String>(Arrays.asList(
+ "UNMAPPED_BAM=" + unmappedBam.getAbsolutePath(),
+ "ALIGNED_READS_ONLY=" + alignReadsOnly,
+ "CLIP_ADAPTERS=" + clipAdapters,
+ "IS_BISULFITE_SEQUENCE=" + isBisulfiteSequence,
+ "MAX_INSERTIONS_OR_DELETIONS=" + maxInsOrDels));
+ if (alignedBams != null) {
+ for (final File alignedBam : alignedBams) {
+ args.add("ALIGNED_BAM=" + alignedBam.getAbsolutePath());
+ }
+ }
+ if (read1AlignedBams != null) {
+ for (final File alignedBam : read1AlignedBams) {
+ args.add("READ1_ALIGNED_BAM=" + alignedBam.getAbsolutePath());
+ }
+ }
+ if (read2AlignedBams != null) {
+ for (final File alignedBam : read2AlignedBams) {
+ args.add("READ2_ALIGNED_BAM=" + alignedBam.getAbsolutePath());
+ }
+ }
+ if (read1Trim != null) {
+ args.add("READ1_TRIM=" + read1Trim);
+ }
+ if (read2Trim != null) {
+ args.add("READ2_TRIM=" + read2Trim);
+ }
+ if (progRecordId != null) {
+ args.add("PROGRAM_RECORD_ID=" + progRecordId);
+ }
+ if (progGroupVersion != null) {
+ args.add("PROGRAM_GROUP_VERSION=" + progGroupVersion);
+ }
+ if (progGroupCommandLine != null) {
+ args.add("PROGRAM_GROUP_COMMAND_LINE=" + progGroupCommandLine);
+ }
+ if (progGroupName != null) {
+ args.add("PROGRAM_GROUP_NAME=" + progGroupName);
+ }
+ args.add("PAIRED_RUN=" + pairedRun);
+ args.add("REFERENCE_SEQUENCE=" + refSeq.getAbsolutePath());
+ args.add("OUTPUT=" + output.getAbsolutePath());
+
+ if (expectedOrientation != null) {
+ args.add("EXPECTED_ORIENTATIONS=" + expectedOrientation);
+ }
+ if (primaryAlignmentStrategy != null) {
+ args.add("PRIMARY_ALIGNMENT_STRATEGY=" + primaryAlignmentStrategy);
+ }
+ if (attributesToRetain != null) {
+ args.add("ATTRIBUTES_TO_RETAIN=" + attributesToRetain);
+ }
+ if (includeSecondary != null) {
+ args.add("INCLUDE_SECONDARY_ALIGNMENTS=" + includeSecondary);
+ }
+ Assert.assertEquals(runPicardCommandLine(args), 0, "Merge did not succeed");
+ }
+
+ private void addAlignmentsForBestFragmentMapqStrategy(
+ final SAMFileWriter writer, final SAMRecord unmappedRecord, final String sequence, final int[] mapqs) {
+ boolean reverse = false;
+ int alignmentStart = 1;
+ for (final int mapq : mapqs) {
+ final SAMRecord alignedRecord = new SAMRecord(writer.getFileHeader());
+ alignedRecord.setReadName(unmappedRecord.getReadName());
+ alignedRecord.setReadBases(unmappedRecord.getReadBases());
+ alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities());
+ alignedRecord.setReferenceName(sequence);
+ alignedRecord.setAlignmentStart(alignmentStart);
+ alignmentStart += 10; // Any old position will do
+ alignedRecord.setReadNegativeStrandFlag(reverse);
+ reverse = !reverse;
+ alignedRecord.setCigarString(unmappedRecord.getReadBases().length + "M");
+ alignedRecord.setMappingQuality(mapq);
+ alignedRecord.setReadPairedFlag(unmappedRecord.getReadPairedFlag());
+ alignedRecord.setFirstOfPairFlag(unmappedRecord.getFirstOfPairFlag());
+ alignedRecord.setSecondOfPairFlag(unmappedRecord.getSecondOfPairFlag());
+ alignedRecord.setMateUnmappedFlag(true);
+ writer.addAlignment(alignedRecord);
+ }
+ }
+
+
+ @DataProvider(name="testBestFragmentMapqStrategy")
+ public Object[][] testBestFragmentMapqStrategyDataProvider() {
+ /**
+ *
+ * @param testName
+ * @param firstMapQs
+ * @param secondMapQs
+ * @param expectedFirstMapq
+ * @param expectedSecondMapq
+ */
+ return new Object[][] {
+ {"singleAlignmentFirstEnd", new int[]{12}, new int[0], 12, -1},
+ {"singleAlignmentSecondEnd", new int[0], new int[]{12}, -1, 12},
+ {"singleAlignmentBothEnd", new int[]{13}, new int[]{12}, 13, 12},
+ {"multipleBothEnds1", new int[]{10, 10, 11, 11, 255, 0}, new int[]{14, 11, 1, 14}, 11, 14},
+ {"multipleBothEnds2", new int[]{255, 0, 255}, new int[]{255, 255}, 255, 255},
+ {"multipleFirstEnd", new int[]{10, 10, 11, 11, 12}, new int[0], 12, -1},
+ {"multipleSecondEnd", new int[0], new int[]{10, 10, 0, 11, 12}, -1, 12},
+ {"multipleFirstEndSingleSecondEnd", new int[]{10, 10, 11, 11, 12}, new int[]{255}, 12, 255},
+ {"singleFirstEndMultipleSecondEnd", new int[]{0}, new int[]{10, 10, 11, 11, 12}, 0, 12},
+ };
+ }
+
+ @Test(dataProvider = "testMostDistantStrategy")
+ public void testMostDistantStrategy(final String testName,
+ final MostDistantStrategyAlignmentSpec[] firstEndSpecs,
+ final MostDistantStrategyAlignmentSpec[] secondEndSpecs) throws Exception {
+ testMostDistantStrategy(testName +".includeSecondary", true, firstEndSpecs, secondEndSpecs);
+ testMostDistantStrategy(testName +".excludeSecondary", false, firstEndSpecs, secondEndSpecs);
+ }
+
+ public void testMostDistantStrategy(final String testName, final boolean includeSecondary,
+ final MostDistantStrategyAlignmentSpec[] firstEndSpecs,
+ final MostDistantStrategyAlignmentSpec[] secondEndSpecs) throws Exception {
+
+ final File unmappedSam = File.createTempFile("unmapped.", ".sam");
+ unmappedSam.deleteOnExit();
+ final SAMFileWriterFactory factory = new SAMFileWriterFactory();
+ final SAMFileHeader header = new SAMFileHeader();
+ header.setSortOrder(SAMFileHeader.SortOrder.queryname);
+
+ final String readName = "theRead";
+ final SAMRecord firstUnmappedRead = new SAMRecord(header);
+ firstUnmappedRead.setReadName(readName);
+ firstUnmappedRead.setReadString("ACGT");
+ firstUnmappedRead.setBaseQualityString("5555");
+ firstUnmappedRead.setReadUnmappedFlag(true);
+ firstUnmappedRead.setMateUnmappedFlag(true);
+ firstUnmappedRead.setReadPairedFlag(true);
+ firstUnmappedRead.setFirstOfPairFlag(true);
+
+ final SAMRecord secondUnmappedRead = new SAMRecord(header);
+ secondUnmappedRead.setReadName(readName);
+ secondUnmappedRead.setReadString("TCGA");
+ secondUnmappedRead.setBaseQualityString("6666");
+ secondUnmappedRead.setReadUnmappedFlag(true);
+ secondUnmappedRead.setMateUnmappedFlag(true);
+ secondUnmappedRead.setReadPairedFlag(true);
+ secondUnmappedRead.setSecondOfPairFlag(true);
+
+
+
+ final SAMFileWriter unmappedWriter = factory.makeSAMWriter(header, false, unmappedSam);
+ unmappedWriter.addAlignment(firstUnmappedRead);
+ unmappedWriter.addAlignment(secondUnmappedRead);
+ unmappedWriter.close();
+
+ final File alignedSam = File.createTempFile("aligned.", ".sam");
+ alignedSam.deleteOnExit();
+
+ header.setSequenceDictionary(SamReaderFactory.makeDefault().getFileHeader(sequenceDict).getSequenceDictionary());
+
+
+ final SAMFileWriter alignedWriter = factory.makeSAMWriter(header, false, alignedSam);
+
+ String expectedFirstPrimarySequence = null;
+ int expectedFirstPrimaryAlignmentStart = -1;
+ String expectedSecondPrimarySequence = null;
+ int expectedSecondPrimaryAlignmentStart = -1;
+
+ // Semi-randomly make the reads align to forward or reverse strand.
+ boolean reverse = false;
+ for (final MostDistantStrategyAlignmentSpec spec: firstEndSpecs) {
+ addAlignmentForMostStrategy(alignedWriter, firstUnmappedRead, spec, reverse);
+ reverse = !reverse;
+ if (spec.expectedPrimary) {
+ expectedFirstPrimarySequence = spec.sequence;
+ expectedFirstPrimaryAlignmentStart = spec.alignmentStart;
+ }
+ }
+ for (final MostDistantStrategyAlignmentSpec spec: secondEndSpecs) {
+ addAlignmentForMostStrategy(alignedWriter, secondUnmappedRead, spec, reverse);
+ reverse = !reverse;
+ if (spec.expectedPrimary) {
+ expectedSecondPrimarySequence = spec.sequence;
+ expectedSecondPrimaryAlignmentStart = spec.alignmentStart;
+ }
+ }
+ alignedWriter.close();
+
+
+ final File output = File.createTempFile("testMostDistantStrategy." + testName, ".sam");
+ output.deleteOnExit();
+ doMergeAlignment(unmappedSam, Collections.singletonList(alignedSam),
+ null, null, null, null,
+ false, true, false, 1,
+ "0", "1.0", "align!", "myAligner",
+ true, fasta, output,
+ SamPairUtil.PairOrientation.FR, MergeBamAlignment.PrimaryAlignmentStrategy.MostDistant,
+ null, includeSecondary);
+
+ final SamReader reader = SamReaderFactory.makeDefault().open(output);
+ int numFirstRecords = 0;
+ int numSecondRecords = 0;
+ String firstPrimarySequence = null;
+ int firstPrimaryAlignmentStart = -1;
+ String secondPrimarySequence = null;
+ int secondPrimaryAlignmentStart = -1;
+ for (final SAMRecord rec: reader) {
+ Assert.assertTrue(rec.getReadPairedFlag());
+ if (rec.getFirstOfPairFlag()) ++numFirstRecords;
+ else if (rec.getSecondOfPairFlag()) ++ numSecondRecords;
+ else Assert.fail("unpossible!");
+ if (!rec.getReadUnmappedFlag() && !rec.getNotPrimaryAlignmentFlag()) {
+ if (rec.getFirstOfPairFlag()) {
+ Assert.assertEquals(firstPrimaryAlignmentStart, -1);
+ firstPrimarySequence = rec.getReferenceName();
+ firstPrimaryAlignmentStart = rec.getAlignmentStart();
+ } else {
+ Assert.assertEquals(secondPrimaryAlignmentStart, -1);
+ secondPrimarySequence = rec.getReferenceName();
+ secondPrimaryAlignmentStart = rec.getAlignmentStart();
+ }
+ } else if (rec.getNotPrimaryAlignmentFlag()) {
+ Assert.assertTrue(rec.getMateUnmappedFlag());
+ }
+ }
+ CloserUtil.close(reader);
+ Assert.assertEquals(firstPrimarySequence, expectedFirstPrimarySequence);
+ Assert.assertEquals(firstPrimaryAlignmentStart, expectedFirstPrimaryAlignmentStart);
+ Assert.assertEquals(secondPrimarySequence, expectedSecondPrimarySequence);
+ Assert.assertEquals(secondPrimaryAlignmentStart, expectedSecondPrimaryAlignmentStart);
+ if (!includeSecondary) {
+ Assert.assertEquals(numFirstRecords, 1);
+ Assert.assertEquals(numSecondRecords, 1);
+ } else {
+ // If no alignments for an end, there will be a single unmapped record
+ Assert.assertEquals(numFirstRecords, Math.max(1, firstEndSpecs.length));
+ Assert.assertEquals(numSecondRecords, Math.max(1, secondEndSpecs.length));
+ }
+ }
+
+ private void addAlignmentForMostStrategy(
+ final SAMFileWriter writer, final SAMRecord unmappedRecord, final MostDistantStrategyAlignmentSpec spec,
+ final boolean reverse) {
+ final SAMRecord alignedRecord = new SAMRecord(writer.getFileHeader());
+ alignedRecord.setReadName(unmappedRecord.getReadName());
+ alignedRecord.setReadBases(unmappedRecord.getReadBases());
+ alignedRecord.setBaseQualities(unmappedRecord.getBaseQualities());
+ alignedRecord.setReferenceName(spec.sequence);
+ alignedRecord.setAlignmentStart(spec.alignmentStart);
+ alignedRecord.setReadNegativeStrandFlag(reverse);
+ alignedRecord.setCigarString(unmappedRecord.getReadBases().length + "M");
+ alignedRecord.setMappingQuality(spec.mapQ);
+ alignedRecord.setReadPairedFlag(unmappedRecord.getReadPairedFlag());
+ alignedRecord.setFirstOfPairFlag(unmappedRecord.getFirstOfPairFlag());
+ alignedRecord.setSecondOfPairFlag(unmappedRecord.getSecondOfPairFlag());
+ alignedRecord.setMateUnmappedFlag(true);
+ writer.addAlignment(alignedRecord);
+ }
+
+ private static class MostDistantStrategyAlignmentSpec {
+ public final boolean expectedPrimary;
+ public final String sequence;
+ public final int alignmentStart;
+ public final int mapQ;
+
+ private MostDistantStrategyAlignmentSpec(final boolean expectedPrimary, final String sequence,
+ final int alignmentStart, final int mapQ) {
+ this.expectedPrimary = expectedPrimary;
+ this.sequence = sequence;
+ this.alignmentStart = alignmentStart;
+ this.mapQ = mapQ;
+ }
+
+ private MostDistantStrategyAlignmentSpec(final boolean expectedPrimary, final String sequence,
+ final int alignmentStart) {
+ this(expectedPrimary, sequence, alignmentStart, 10);
+ }
+ }
+
+ @DataProvider(name="testMostDistantStrategy")
+ public Object[][] testMostDistantStrategyDataProvider() {
+ /**
+ * @param testName
+ * @param firstEndSpecs
+ * @param secondEndSpecs
+ */
+ return new Object[][] {
+ {
+ // There are two ties: {chr1:1 - chr1:89} and {chr4:2 -chr4:90}
+ // That are disambiguated by MAPQ.
+ "multipleAlignmentsBothEnds",
+ new MostDistantStrategyAlignmentSpec[] {
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 1, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 1, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 1, 20),
+ new MostDistantStrategyAlignmentSpec(true, "chr4", 2, 25),
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 89, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 2, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 3, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr4", 4, 20),
+ },
+ new MostDistantStrategyAlignmentSpec[] {
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 1, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 2, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 3, 20),
+ new MostDistantStrategyAlignmentSpec(true, "chr4", 90, 19),
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 5, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 6, 20),
+ },
+ },
+ {
+ "multipleAlignmentsAllChimeric",
+ new MostDistantStrategyAlignmentSpec[] {
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 1, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 2, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 3, 20),
+ new MostDistantStrategyAlignmentSpec(true, "chr2", 4, 21),
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 10, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 50, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 60, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 70, 20),
+ },
+ new MostDistantStrategyAlignmentSpec[] {
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 1, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr4", 2, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 3, 20),
+ new MostDistantStrategyAlignmentSpec(true, "chr4", 11, 25),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 50, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr4", 60, 20),
+ },
+ },
+ {
+ "multipleAlignmentsFirstEnd",
+ new MostDistantStrategyAlignmentSpec[] {
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 10, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 10, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 10, 20),
+ new MostDistantStrategyAlignmentSpec(true, "chr4", 20, 25),
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 80, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 20, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 30, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr4", 40, 20),
+ },
+ new MostDistantStrategyAlignmentSpec[0]
+ },
+ {
+ "multipleAlignmentsSecondEnd",
+ new MostDistantStrategyAlignmentSpec[0],
+ new MostDistantStrategyAlignmentSpec[] {
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 10, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 10, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 10, 20),
+ new MostDistantStrategyAlignmentSpec(true, "chr4", 20, 25),
+ new MostDistantStrategyAlignmentSpec(false, "chr1", 80, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr2", 20, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr3", 30, 20),
+ new MostDistantStrategyAlignmentSpec(false, "chr4", 40, 20),
+ },
+ },
+ };
+ }
+}
diff --git a/src/tests/java/picard/sam/MergeSamFilesTest.java b/src/tests/java/picard/sam/MergeSamFilesTest.java
new file mode 100644
index 0000000..1e2c0e4
--- /dev/null
+++ b/src/tests/java/picard/sam/MergeSamFilesTest.java
@@ -0,0 +1,66 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.BamFileIoUtils;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.sam.testers.ValidateSamTester;
+
+import java.io.File;
+
+public class MergeSamFilesTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/MergeSamFiles");
+
+ public String getCommandLineProgramName() {
+ return MergeSamFiles.class.getSimpleName();
+ }
+ /**
+ * Confirm that unsorted input can result in coordinate sorted output, with index created.
+ */
+ @Test
+ public void unsortedInputSortedOutputTest() throws Exception {
+ final File unsortedInputTestDataDir = new File(TEST_DATA_DIR, "unsorted_input");
+ final File mergedOutput = File.createTempFile("unsortedInputSortedOutputTest.", BamFileIoUtils.BAM_FILE_EXTENSION);
+ mergedOutput.deleteOnExit();
+ final String[] args = {
+ "I=" + new File(unsortedInputTestDataDir, "1.sam").getAbsolutePath(),
+ "I=" + new File(unsortedInputTestDataDir, "2.sam").getAbsolutePath(),
+ "O=" + mergedOutput.getAbsolutePath(),
+ "SO=coordinate"
+ };
+ final int mergeExitStatus = runPicardCommandLine(args);
+ Assert.assertEquals(mergeExitStatus, 0);
+ final SamReader reader = SamReaderFactory.makeDefault().open(mergedOutput);
+ Assert.assertEquals(reader.getFileHeader().getSortOrder(), SAMFileHeader.SortOrder.coordinate);
+
+ new ValidateSamTester().assertSamValid(mergedOutput);
+ CloserUtil.close(reader);
+ }
+}
diff --git a/src/tests/java/picard/sam/PositionBasedDownsampleSamTest.java b/src/tests/java/picard/sam/PositionBasedDownsampleSamTest.java
new file mode 100644
index 0000000..d8f9594
--- /dev/null
+++ b/src/tests/java/picard/sam/PositionBasedDownsampleSamTest.java
@@ -0,0 +1,248 @@
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordSetBuilder;
+import htsjdk.samtools.SAMTextHeaderCodec;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.BufferedLineReader;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import static org.testng.Assert.assertEquals;
+
+public class PositionBasedDownsampleSamTest extends CommandLineProgramTest {
+ final static String sample = "TestSample";
+ final static String readGroupId = "TestReadGroup";
+ final static String platform = "ILLUMINA";
+ final static String library = "TestLibrary";
+
+ final static File TEST_DIR = new File("testdata/picard/sam/PositionalDownsampleSam/");
+ final File dict = new File(TEST_DIR, "header.dict");
+
+ File tempDir;
+ File tempSamFile;
+
+ SAMRecordSetBuilder setBuilder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ SAMReadGroupRecord readGroupRecord = new SAMReadGroupRecord(readGroupId);
+
+ @Override
+ public String getCommandLineProgramName() {
+ return PositionBasedDownsampleSam.class.getSimpleName();
+ }
+
+ //create a samfile with one tile and randomly placed reads within it.
+ @BeforeTest
+ void setupBuilder() throws IOException {
+ final int numReads = 10000;
+ final String flowCellBarcode = "TESTBARCODE";
+ final int maxX = 10000;
+ final int maxY = 20000;
+ final int minX = 1000;
+ final int minY = 2000;
+
+ final String separator = ":";
+ final int lane = 1;
+ final int tile = 2203;
+
+ //use fixed random seed to eliminate possibility of intermittent failures
+ final Random rg = new Random(31);
+ setBuilder.setReadGroup(readGroupRecord);
+ setBuilder.setUseNmFlag(true);
+
+ for (int i = 0; i < numReads; i++) {
+ final int x = rg.nextInt(maxX) + minX;
+ final int y = rg.nextInt(maxY) + minY;
+
+ final String readName = flowCellBarcode + separator + lane + separator + tile + separator + x + separator + y;
+ setBuilder.addPair(readName, 1, 1, 100);
+ }
+
+ tempDir = IOUtil.createTempDir("pds_test", "PositionalDownsampling");
+ tempSamFile = File.createTempFile("PositionalDownsampleSam", ".bam", tempDir);
+
+ BufferedLineReader bufferedLineReader = null;
+ try {
+ bufferedLineReader = new BufferedLineReader(new FileInputStream(dict));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ final SAMTextHeaderCodec codec = new SAMTextHeaderCodec();
+ final SAMFileHeader header = codec.decode(bufferedLineReader, dict.toString());
+
+ readGroupRecord.setSample(sample);
+ readGroupRecord.setPlatform(platform);
+ readGroupRecord.setLibrary(library);
+
+ header.setSortOrder(SAMFileHeader.SortOrder.coordinate);
+ header.addReadGroup(readGroupRecord);
+
+ setBuilder.setHeader(header);
+
+ final SAMFileWriter writer = new SAMFileWriterFactory()
+ .setCreateIndex(true).makeBAMWriter(header, false, tempSamFile);
+
+ for (final SAMRecord record : setBuilder) {
+ writer.addAlignment(record);
+ }
+ writer.close();
+ }
+
+ @AfterTest
+ private void tearDown() {
+ IOUtil.deleteDirectoryTree(tempDir);
+ }
+
+ @Test //this is actually a test of SAMRecordSetBuilder
+ public void TestBuilder() {
+ final ValidateSamFile validateSamFile = new ValidateSamFile();
+
+ validateSamFile.INPUT = tempSamFile;
+ assertEquals(validateSamFile.doWork(), 0);
+ }
+
+ @DataProvider(name = "ValidArgumentsTestProvider")
+ public Object[][] ValidArgumentsTestProvider() {
+ final List<Object[]> objects = new ArrayList<Object[]>();
+ for (double i = 0.3; i <= 1; i += .1) {
+ final Object[] array = {i};
+ objects.add(array);
+ }
+ return objects.toArray(new Object[1][]);
+ }
+
+ // test removing some reads from a sparse, single tile bam
+ @Test(dataProvider = "ValidArgumentsTestProvider")
+ public void testDownsampleSingleTile(final double fraction) throws IOException {
+ testDownsampleWorker(tempSamFile, fraction);
+ }
+
+ public void testDownsampleWorker(final File samFile, final double fraction) throws IOException {
+
+ final File downsampled = File.createTempFile("PositionalDownsampleSam", ".bam", tempDir);
+ final String[] args = new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT=" + downsampled.getAbsolutePath(),
+ "FRACTION=" + fraction,
+ "CREATE_INDEX=true"
+ };
+
+ // make sure results is successful
+ assertEquals(runPicardCommandLine(args), 0);
+
+ // make sure that the resulting BAM is valid.
+ final ValidateSamFile validateSamFile = new ValidateSamFile();
+
+ validateSamFile.INPUT = downsampled;
+ assertEquals(validateSamFile.doWork(), 0);
+
+ //make sure that the total number of record in the resulting file in in the ballpark:
+ assertGreaterThan(countSamTotalRecord(downsampled), fraction * .8 * countSamTotalRecord(samFile));
+ assertLessThan(countSamTotalRecord(downsampled), fraction * 1.2 * countSamTotalRecord(samFile));
+ }
+
+ private long countSamTotalRecord(final File samFile) {
+ final SamReader reader = SamReaderFactory.make().open(samFile);
+ assert reader.hasIndex();
+ long total = 0;
+
+ for (int i = 0; i < reader.getFileHeader().getSequenceDictionary().size(); i++) {
+ total += reader.indexing().getIndex().getMetaData(i).getAlignedRecordCount();
+ total += reader.indexing().getIndex().getMetaData(i).getUnalignedRecordCount();
+ }
+ return total;
+ }
+
+ @DataProvider(name="allowTwiceData")
+ public Object[][] allowTwiceData(){
+ return new Object[][]{{true},{false}};
+ }
+
+ // test that downsampling twice yields an error.
+ @Test(dataProvider = "allowTwiceData")
+ public void TestInvalidTwice(final boolean allowMultiple) throws IOException {
+ final File samFile = tempSamFile;
+ final File downsampled = File.createTempFile("PositionalDownsampleSam", ".bam", tempDir);
+ downsampled.deleteOnExit();
+ final double fraction = .1;
+ downsampled.deleteOnExit();
+ final String[] args1 = new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT=" + downsampled.getAbsolutePath(),
+ "FRACTION=" + fraction
+ };
+ runPicardCommandLine(args1);
+
+ final File downsampledTwice = File.createTempFile("PositionalDownsampleSam", ".bam", tempDir);
+ downsampledTwice.deleteOnExit();
+
+ final List<String> args2 = new ArrayList<String>();
+
+ args2.add("INPUT=" + downsampled.getAbsolutePath());
+ args2.add("OUTPUT=" + downsampledTwice.getAbsolutePath());
+ args2.add("FRACTION=" + fraction);
+
+ if(allowMultiple) args2.add("ALLOW_MULTIPLE_DOWNSAMPLING_DESPITE_WARNINGS=true");
+
+ //should blow up due to bad inputs
+ if(allowMultiple)
+ runPicardCommandLine(args2);
+ else
+ try {
+ runPicardCommandLine(args2);
+ throw new PicardException("Should have thrown an error!!");
+ } catch (final PicardException ignored){
+
+ }
+ }
+
+ // test that program fails on p<0 or p>1
+ @DataProvider(name = "InvalidArgumentsTestProvider")
+ public Object[][] InvalidArgumentsTestProvider() {
+ return new Object[][]{{-1.0}, {-.00001}, {-5.0}, {1.00001}, {5.0}, {50.0}, {Double.MAX_VALUE}, {Double.POSITIVE_INFINITY}, {Double.NEGATIVE_INFINITY}};
+ }
+
+ @Test(dataProvider = "InvalidArgumentsTestProvider")
+ public void TestInvalidArguments(final double fraction) throws IOException {
+ final File samFile = tempSamFile;
+
+ final File downsampled = File.createTempFile("PositionalDownsampleSam", ".bam", tempDir);
+ downsampled.deleteOnExit();
+ final String[] args = new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT=" + downsampled.getAbsolutePath(),
+ "FRACTION=" + fraction
+ };
+ //should blow up due to bad inputs
+ assert runPicardCommandLine(args) != 0;
+ }
+
+ // these fit in a TestNG.Utils class, but there isn't one in picard-public...
+ static public void assertGreaterThan(final double lhs, final double rhs) {
+ Assert.assertTrue(lhs > rhs, String.format("Expected inequality is not true: %g > %g", lhs, rhs));
+ }
+
+ static public void assertLessThan(final double lhs, final double rhs) {
+ Assert.assertTrue(lhs < rhs, String.format("Expected inequality is not true: %g < %g", lhs, rhs));
+ }
+
+}
\ No newline at end of file
diff --git a/src/tests/java/picard/sam/RevertSamTest.java b/src/tests/java/picard/sam/RevertSamTest.java
new file mode 100755
index 0000000..e6493fd
--- /dev/null
+++ b/src/tests/java/picard/sam/RevertSamTest.java
@@ -0,0 +1,178 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMReadGroupRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: ktibbett
+ * Date: Jul 20, 2010
+ * Time: 10:27:58 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class RevertSamTest extends CommandLineProgramTest {
+ public static final String basicSamToRevert = "testdata/picard/sam/revert_sam_basic.sam";
+ public static final String negativeTestSamToRevert = "testdata/picard/sam/revert_sam_negative.sam";
+
+ private static final String revertedQualities =
+ "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
+
+ private static final String unmappedRead = "both_reads_present_only_first_aligns/2";
+
+ public String getCommandLineProgramName() {
+ return RevertSam.class.getSimpleName();
+ }
+
+ @Test(dataProvider="positiveTestData")
+ public void basicPositiveTests(final SAMFileHeader.SortOrder so, final boolean removeDuplicates, final boolean removeAlignmentInfo,
+ final boolean restoreOriginalQualities, final String sample, final String library,
+ final List<String> attributesToClear) throws Exception {
+
+ final File output = File.createTempFile("reverted", ".sam");
+ final RevertSam reverter = new RevertSam();
+ final String args[] = new String[5 + (so != null ? 1 : 0) + attributesToClear.size() + (sample != null ? 1 : 0) + (library != null ? 1 : 0)];
+ int index = 0;
+ args[index++] = "INPUT=" + basicSamToRevert;
+ args[index++] = "OUTPUT=" + output.getAbsolutePath();
+ if (so != null) {
+ args[index++] = "SORT_ORDER=" + so.name();
+ }
+ args[index++] = "REMOVE_DUPLICATE_INFORMATION=" + removeDuplicates;
+ args[index++] = "REMOVE_ALIGNMENT_INFORMATION=" + removeAlignmentInfo;
+ args[index++] = "RESTORE_ORIGINAL_QUALITIES=" + restoreOriginalQualities;
+ if (sample != null) {
+ args[index++] = "SAMPLE_ALIAS=" + sample;
+ }
+ if (library != null) {
+ args[index++] = "LIBRARY_NAME=" + library;
+ }
+ for (final String attr : attributesToClear) {
+ args[index++] = "ATTRIBUTE_TO_CLEAR=" + attr;
+ }
+ runPicardCommandLine(args);
+
+ final SamReader reader = SamReaderFactory.makeDefault().open(output);
+ final SAMFileHeader header = reader.getFileHeader();
+ Assert.assertEquals(header.getSortOrder(), SAMFileHeader.SortOrder.queryname);
+ Assert.assertEquals(header.getProgramRecords().size(), removeAlignmentInfo ? 0 : 1);
+ for (final SAMReadGroupRecord rg : header.getReadGroups()) {
+ if (sample != null) {
+ Assert.assertEquals(rg.getSample(), sample);
+ }
+ else {
+ Assert.assertEquals(rg.getSample(), "Hi,Mom!");
+ }
+ if (library != null) {
+ Assert.assertEquals(rg.getLibrary(), library);
+ }
+ else {
+ Assert.assertEquals(rg.getLibrary(), "my-library");
+ }
+ }
+ for (final SAMRecord rec : reader) {
+ if (removeDuplicates) {
+ Assert.assertFalse(rec.getDuplicateReadFlag(),
+ "Duplicates should have been removed: " + rec.getReadName());
+ }
+
+ if (removeAlignmentInfo) {
+ Assert.assertTrue(rec.getReadUnmappedFlag(),
+ "Alignment info should have been removed: " + rec.getReadName());
+ }
+
+ if (restoreOriginalQualities && !unmappedRead.equals(
+ rec.getReadName() + "/" + (rec.getFirstOfPairFlag() ? "1" : "2"))) {
+
+ Assert.assertEquals(rec.getBaseQualityString(), revertedQualities);
+ } else {
+ Assert.assertNotSame(rec.getBaseQualityString(), revertedQualities);
+ }
+
+ for (final SAMRecord.SAMTagAndValue attr : rec.getAttributes()) {
+ if (removeAlignmentInfo || (!attr.tag.equals("PG") && !attr.tag.equals("NM")
+ && !attr.tag.equals("MQ"))) {
+ Assert.assertFalse(reverter.ATTRIBUTE_TO_CLEAR.contains(attr.tag),
+ attr.tag + " should have been cleared.");
+ }
+ }
+ }
+ CloserUtil.close(reader);
+ }
+
+
+ @DataProvider(name="positiveTestData")
+ public Object[][] getPostitiveTestData() {
+ return new Object[][] {
+ {null, true, true, true, null, null, Collections.EMPTY_LIST},
+ {SAMFileHeader.SortOrder.queryname, true, true, true, "Hey,Dad!", null, Arrays.asList("XT")},
+ {null, false, true, false, "Hey,Dad!", "NewLibraryName", Arrays.asList("XT")},
+ {null, false, false, false, null, null, Collections.EMPTY_LIST}
+ };
+ }
+
+
+ @Test(dataProvider="negativeTestData", expectedExceptions = {PicardException.class})
+ public void basicNegativeTest(final String sample, final String library) throws Exception {
+
+ final File output = File.createTempFile("bad", ".sam");
+ final RevertSam reverter = new RevertSam();
+ final String args[] = new String[2 + (sample != null ? 1 : 0) + (library != null ? 1 : 0)];
+ int index = 0;
+ args[index++] = "INPUT=" + negativeTestSamToRevert;
+ args[index++] = "OUTPUT=" + output.getAbsolutePath();
+ if (sample != null) {
+ args[index++] = "SAMPLE_ALIAS=" + sample;
+ }
+ if (library != null) {
+ args[index++] = "LIBRARY_NAME=" + library;
+ }
+ runPicardCommandLine(args);
+ Assert.fail("Negative test should have thrown an exception and didn't");
+ }
+
+ @DataProvider(name="negativeTestData")
+ public Object[][] getNegativeTestData() {
+ return new Object[][] {
+ {"NewSample", null},
+ {null, "NewLibrary"},
+ {"NewSample", "NewLibrary"}
+ };
+ }
+}
diff --git a/src/tests/java/picard/sam/SamFileConverterTest.java b/src/tests/java/picard/sam/SamFileConverterTest.java
new file mode 100644
index 0000000..3628047
--- /dev/null
+++ b/src/tests/java/picard/sam/SamFileConverterTest.java
@@ -0,0 +1,100 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam;
+
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+public class SamFileConverterTest {
+
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/SamFileConverterTest");
+ private static final File unmappedSam = new File(TEST_DATA_DIR, "unmapped.sam");
+ private static final File unmappedBam = new File(TEST_DATA_DIR, "unmapped.bam");
+ private static final File unmappedCram = new File(TEST_DATA_DIR, "unmapped.cram");
+
+ @Test
+ public void testSAMToBAM() {
+ convertFile(unmappedSam, unmappedBam, ".bam");
+ }
+
+ @Test
+ public void testSAMToCRAM() {
+ convertFile(unmappedSam, unmappedCram, ".cram");
+ }
+
+ @Test
+ public void testBAMToCRAM() {
+ convertFile(unmappedBam, unmappedCram, ".cram");
+ }
+
+ @Test
+ public void testBAMToSAM() {
+ convertFile(unmappedBam, unmappedSam, ".sam");
+ }
+
+ @Test
+ public void testCRAMToBAM() {
+ convertFile(unmappedCram, unmappedBam, ".bam");
+ }
+
+ @Test
+ public void testCRAMToSAM() {
+ convertFile(unmappedCram, unmappedSam, ".sam");
+ }
+
+
+ private void convertFile(final File inputFile, final File fileToCompare, final String extension) {
+ final SamFormatConverter samFormatConverter = new SamFormatConverter();
+ final List<File> samFiles = new ArrayList<File>();
+ final ValidateSamFile validateSamFile = new ValidateSamFile();
+ final CompareSAMs compareSAMs = new CompareSAMs();
+
+ samFormatConverter.INPUT = inputFile;
+ try {
+ samFormatConverter.OUTPUT = File.createTempFile("SamFileConverterTest." + inputFile.getName(), extension);
+ } catch (final IOException e) {
+ e.printStackTrace();
+ }
+ samFormatConverter.doWork();
+
+ validateSamFile.INPUT = samFormatConverter.OUTPUT;
+ assertEquals(validateSamFile.doWork(), 0);
+
+ samFiles.add(samFormatConverter.OUTPUT);
+ samFiles.add(fileToCompare);
+
+ compareSAMs.samFiles = samFiles;
+ compareSAMs.doWork();
+
+ assertTrue(compareSAMs.areEqual());
+ }
+}
diff --git a/src/tests/java/picard/sam/SamToFastqTest.java b/src/tests/java/picard/sam/SamToFastqTest.java
new file mode 100644
index 0000000..ade6447
--- /dev/null
+++ b/src/tests/java/picard/sam/SamToFastqTest.java
@@ -0,0 +1,432 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.SAMFormatException;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.fastq.FastqReader;
+import htsjdk.samtools.fastq.FastqRecord;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests for SamToFastq
+ */
+public class SamToFastqTest extends CommandLineProgramTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/sam/bam2fastq/paired");
+ private static final String CLIPPING_TEST_DATA = "ok/clipping_test.sam";
+
+ public String getCommandLineProgramName() {
+ return SamToFastq.class.getSimpleName();
+ }
+
+ @DataProvider(name = "okFiles")
+ public Object[][] okFiles() {
+ return new Object[][] {
+ {"ok/sorted-pair.sam"}, // 5 sorted pairs (10 records) - mate1, mate2
+ {"ok/sorted-pair-no-rg.sam"}, // 5 sorted pairs (10 records) - mate1, mate2, no read group
+ {"ok/last-pair-mates-flipped.sam" }, // 4 pairs, :05 mate2, mate1
+ {"ok/first-mate-bof-last-mate-eof.sam"}, // :01 mate1, 4 pairs, :01 mate2
+ };
+ }
+
+
+ @DataProvider(name = "badFiles")
+ public Object[][] badFiles() {
+ return new Object[][] {
+ {"bad/unpaired-mate.sam"} // mate1 without its mate2
+ };
+ }
+
+ private void convertFile(final String [] args) {
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ }
+
+ @Test(dataProvider = "clippingTests")
+ public void testClipping(final String clippingAction, final String bases1_1, final String quals1_1, final String bases1_2, final String quals1_2,
+ final String bases2_1, final String quals2_1, final String bases2_2, final String quals2_2, final String testName) throws IOException {
+ final File samFile = new File(TEST_DATA_DIR, CLIPPING_TEST_DATA) ;
+ final File f1 = File.createTempFile("clippingtest1", "fastq");
+ final File f2 = File.createTempFile("clippingtest2", "fastq");
+ f1.deleteOnExit();
+ f2.deleteOnExit();
+
+ if (clippingAction != null) {
+ convertFile(new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "FASTQ=" + f1.getAbsolutePath(),
+ "SECOND_END_FASTQ=" + f2.getAbsolutePath(),
+ "CLIPPING_ACTION=" + clippingAction,
+ "CLIPPING_ATTRIBUTE=" + "XT"
+ });
+ } else {
+ convertFile(new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "FASTQ=" + f1.getAbsolutePath(),
+ "SECOND_END_FASTQ=" + f2.getAbsolutePath(),
+ });
+ }
+
+ Iterator<FastqRecord> it = new FastqReader(f1).iterator();
+ FastqRecord first = it.next();
+ Assert.assertEquals(first.getReadString(), bases1_1, testName);
+ Assert.assertEquals(first.getBaseQualityString(), quals1_1, testName);
+ FastqRecord second = it.next();
+ Assert.assertEquals(second.getReadString(), bases1_2, testName);
+ Assert.assertEquals(second.getBaseQualityString(), quals1_2, testName);
+ it = new FastqReader(f2).iterator();
+ first = it.next();
+ Assert.assertEquals(first.getReadString(), bases2_1, testName);
+ Assert.assertEquals(first.getBaseQualityString(), quals2_1, testName);
+ second = it.next();
+ Assert.assertEquals(second.getReadString(), bases2_2, testName);
+ Assert.assertEquals(second.getBaseQualityString(), quals2_2, testName);
+ }
+
+ @DataProvider(name = "clippingTests")
+ public Object[][] clippingTests() {
+ return new Object[][] {
+ {null, "AAAAAAAAAA", "1111111111", "AAAAAAAAAA", "1111111111", "CCCCCCCCCC", "2222222222", "GGGGGGGGGG", "2222222222", "No clipping test"},
+ {"X", "AAAAAAA", "1111111", "AAAAAA", "111111", "CCCCCCCC", "22222222", "GGGGGG", "222222", "Cut clipped bases test"},
+ {"N", "AAAAAAANNN", "1111111111", "AAAAAANNNN", "1111111111", "CCCCCCCCNN", "2222222222", "GGGGGGNNNN", "2222222222", "Mask clipped bases test"},
+ {"2", "AAAAAAAAAA", "1111111###", "AAAAAAAAAA", "111111####", "CCCCCCCCCC", "22222222##", "GGGGGGGGGG", "222222####", "Change clipped qualities test"}
+ };
+ }
+
+ @Test(dataProvider = "okFiles")
+ public void testOkFile(final String samFilename) throws IOException {
+ final File samFile = new File(TEST_DATA_DIR,samFilename);
+ final File pair1File = newTempFastqFile("pair1");
+ final File pair2File = newTempFastqFile("pair2");
+
+ convertFile(new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "FASTQ=" + pair1File.getAbsolutePath(),
+ "SECOND_END_FASTQ=" + pair2File.getAbsolutePath()
+ });
+
+ // Check that paired fastq files are same size
+ final Set<String> outputHeaderSet1 = createFastqReadHeaderSet(pair1File);
+ final Set<String> outputHeaderSet2 = createFastqReadHeaderSet(pair2File);
+ Assert.assertEquals(outputHeaderSet1.size(), outputHeaderSet2.size());
+
+ // Create map of mate pairs from SAM records
+ final Map<String,MatePair> map = createSamMatePairsMap(samFile) ;
+ Assert.assertEquals(map.size(), outputHeaderSet2.size());
+
+ // Ensure that each mate of each pair in SAM file is in the correct fastq pair file
+ for (final Map.Entry<String,MatePair> entry : map.entrySet() ) {
+ final MatePair mpair = entry.getValue();
+ Assert.assertNotNull(mpair.mate1); // ensure we have two mates
+ Assert.assertNotNull(mpair.mate2);
+ Assert.assertEquals(mpair.mate1.getReadName(),mpair.mate2.getReadName());
+ final String readName = mpair.mate1.getReadName() ;
+ Assert.assertTrue(outputHeaderSet1.contains(readName+"/1")); // ensure mate is in correct file
+ Assert.assertTrue(outputHeaderSet2.contains(readName+"/2"));
+ }
+ }
+
+ @Test(dataProvider = "okFiles")
+ public void testOkInterleavedFile(final String samFilename) throws IOException {
+ final File samFile = new File(TEST_DATA_DIR,samFilename);
+ final File pairFile = newTempFastqFile("pair");
+
+ convertFile(new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "FASTQ=" + pairFile.getAbsolutePath(),
+ "INTERLEAVE=true"
+ });
+
+ final Set<String> outputHeaderSet = createFastqReadHeaderSet(pairFile);
+ // Create map of mate pairs from SAM records
+ final Map<String,MatePair> map = createSamMatePairsMap(samFile) ;
+ Assert.assertEquals(map.size() * 2, outputHeaderSet.size());
+
+ // Ensure that each mate of each pair in SAM file is in the correct fastq pair file
+ for (final Map.Entry<String,MatePair> entry : map.entrySet() ) {
+ final MatePair mpair = entry.getValue();
+ Assert.assertNotNull(mpair.mate1); // ensure we have two mates
+ Assert.assertNotNull(mpair.mate2);
+ Assert.assertEquals(mpair.mate1.getReadName(),mpair.mate2.getReadName());
+ final String readName = mpair.mate1.getReadName() ;
+ Assert.assertTrue(outputHeaderSet.contains(readName+"/1")); // ensure mate is in correct file
+ Assert.assertTrue(outputHeaderSet.contains(readName+"/2"));
+ }
+ }
+
+
+ @Test (dataProvider = "badFiles", expectedExceptions= SAMFormatException.class)
+ public void testBadFile(final String samFilename) throws IOException {
+ final File samFile = new File(TEST_DATA_DIR,samFilename);
+ final File pair1 = File.createTempFile("tt-pair1.", ".fastq");
+ final File pair2 = File.createTempFile("tt-pair2.", ".fastq");
+ pair1.deleteOnExit();
+ pair2.deleteOnExit();
+ convertFile(new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "FASTQ=" + pair1.getAbsolutePath(),
+ "SECOND_END_FASTQ=" + pair2.getAbsolutePath()
+ });
+ }
+
+ @DataProvider(name = "okGroupedFiles")
+ public Object[][] okGroupedFiles() {
+ return new Object[][] {
+ {"ok/grouped-last-pair-mates-flipped.sam", null, null, new String[]{"rg1","rg2"}},
+ };
+ }
+
+
+ @DataProvider(name = "badGroupedFiles")
+ public Object[][] badGroupedFiles() {
+ return new Object[][] {
+ {"bad/grouped-unpaired-mate.sam", null, null, new String[]{"rg1.fastq","rg2.fastq"}}
+ };
+ }
+
+ @Test(dataProvider = "okGroupedFiles")
+ public void testOkGroupedFiles(final String samFilename, final String fastq, final String secondEndFastq,
+ final String [] groupFiles) throws IOException {
+ final File samFile = new File(TEST_DATA_DIR,samFilename);
+ final Map<String, Set<String>> outputSets = new HashMap<String, Set<String>>(groupFiles.length);
+
+ final String tmpDir = IOUtil.getDefaultTmpDir().getAbsolutePath() + "/";
+ final String [] args = new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT_PER_RG=true",
+ "OUTPUT_DIR=" + tmpDir,
+ };
+ runPicardCommandLine(args);
+
+ File f1;
+ File f2;
+ String fname1;
+ String fname2;
+ String keyName1;
+ String keyName2;
+ Set<String> outputHeaderSet1;
+ Set<String> outputHeaderSet2;
+ for(final String groupPUName : groupFiles)
+ {
+ keyName1 = groupPUName + "_1";
+ keyName2 = groupPUName + "_2";
+ fname1 = tmpDir + "/" + keyName1 + ".fastq";
+ fname2 = tmpDir + "/" + keyName2 + ".fastq";
+ f1 = new File(fname1);
+ f2 = new File(fname2);
+ f1.deleteOnExit();
+ f2.deleteOnExit();
+ IOUtil.assertFileIsReadable(f1);
+ IOUtil.assertFileIsReadable(f2);
+
+ // Check that paired fastq files are same size and store them for later comparison
+ outputHeaderSet1 = createFastqReadHeaderSet(f1);
+ outputHeaderSet2 = createFastqReadHeaderSet(f2);
+ outputSets.put(keyName1 , outputHeaderSet1);
+ outputSets.put(keyName2, outputHeaderSet2);
+ Assert.assertEquals(outputHeaderSet1.size(), outputHeaderSet2.size());
+ }
+
+ // Create map of read groups and mate pairs from SAM records
+ final Map<String, Map<String,MatePair>> map = createPUPairsMap(samFile);
+
+ for(final Map.Entry<String, Map<String, MatePair>> groupEntry : map.entrySet()) {
+ // Ensure that for each group, each mate of each pair in the SAM file is in the correct fastq pair file
+ for (final Map.Entry<String,MatePair> entry : groupEntry.getValue().entrySet() ) {
+ final MatePair mpair = entry.getValue();
+ outputHeaderSet1 = outputSets.get(groupEntry.getKey() + "_1");
+ outputHeaderSet2 = outputSets.get(groupEntry.getKey() + "_2");
+
+ Assert.assertNotNull(mpair.mate1); // ensure we have two mates
+ Assert.assertNotNull(mpair.mate2);
+ Assert.assertEquals(mpair.mate1.getReadName(),mpair.mate2.getReadName());
+ final String readName = mpair.mate1.getReadName() ;
+ Assert.assertTrue(outputHeaderSet1.contains(readName+"/1")); // ensure mate is in correct file
+ Assert.assertTrue(outputHeaderSet2.contains(readName+"/2"));
+ }
+ }
+ }
+
+
+ @Test (dataProvider = "badGroupedFiles", expectedExceptions= SAMException.class)
+ public void testBadGroupedFile(final String samFilename, final String fastq, final String secondEndFastq,
+ final String [] groupFiles) throws IOException {
+ final File samFile = new File(TEST_DATA_DIR,samFilename);
+ final String tmpDir = IOUtil.getDefaultTmpDir().getAbsolutePath() + "/";
+ final String [] args = new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT_PER_RG=true",
+ "OUTPUT_DIR=" + tmpDir,
+ };
+ runPicardCommandLine(args);
+
+ File f1;
+ File f2;
+ String fname1;
+ String fname2;
+ for(final String groupPUName : groupFiles)
+ {
+ fname1 = tmpDir + groupPUName + "_1.fastq";
+ fname2 = tmpDir + groupPUName + "_2.fastq";
+ f1 = new File(fname1);
+ f2 = new File(fname2);
+ f1.deleteOnExit();
+ f1.deleteOnExit();
+ }
+ }
+
+ @Test(dataProvider = "trimmedData")
+ public void testTrimming(final String samFilename, final int read1Trim,
+ final int read1MaxBases, final int expectedRead1Length, final int read2Trim,
+ final int read2MaxBases, final int expectedRead2Length) throws IOException {
+
+ final File samFile = new File(TEST_DATA_DIR, samFilename);
+ final File pair1File = newTempFastqFile("pair1");
+ final File pair2File = newTempFastqFile("pair2");
+ pair1File.deleteOnExit();
+ pair2File.deleteOnExit();
+
+ convertFile(new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "FASTQ=" + pair1File.getAbsolutePath(),
+ "SECOND_END_FASTQ=" + pair2File.getAbsolutePath(),
+ "READ1_TRIM=" + read1Trim,
+ "READ1_MAX_BASES_TO_WRITE=" + read1MaxBases,
+ "READ2_TRIM=" + read2Trim,
+ "READ2_MAX_BASES_TO_WRITE=" + read2MaxBases
+ });
+
+ for (final FastqRecord first : new FastqReader(pair1File)) {
+ Assert.assertEquals(first.getReadString().length(), expectedRead1Length, "Incorrect read length");
+ Assert.assertEquals(first.getBaseQualityString().length(), expectedRead1Length, "Incorrect quality string length");
+ }
+ for (final FastqRecord second : new FastqReader(pair2File)) {
+ Assert.assertEquals(second.getReadString().length(), expectedRead2Length, "Incorrect read length");
+ Assert.assertEquals(second.getBaseQualityString().length(), expectedRead2Length, "Incorrect quality string length");
+ }
+ }
+
+ @DataProvider(name = "trimmedData")
+ public Object[][] trimmedData() {
+ return new Object[][] {
+ // There are 13 bases in each of these reads
+ {"ok/sorted-pair.sam", 6, 7, 7, 5, 8, 8}, // exact matches for everything
+ {"ok/sorted-pair.sam", 7, 7, 6, 3, 8, 8} // fewer or more bases
+ };
+ }
+
+ private Set<String> createFastqReadHeaderSet(final File file) {
+ final Set<String> set = new HashSet<String>();
+ final FastqReader freader = new FastqReader(file);
+ while (freader.hasNext()) {
+ final FastqRecord frec = freader.next();
+ set.add(frec.getReadHeader());
+ }
+ return set ;
+ }
+
+ private Map<String,MatePair> createSamMatePairsMap(final File samFile) throws IOException {
+ IOUtil.assertFileIsReadable(samFile);
+ final SamReader reader = SamReaderFactory.makeDefault().open(samFile);
+
+ final Map<String,MatePair> map = new LinkedHashMap<String,MatePair>();
+ for (final SAMRecord record : reader ) {
+ MatePair mpair = map.get(record.getReadName());
+ if (mpair == null) {
+ mpair = new MatePair();
+ map.put(record.getReadName(), mpair);
+ }
+ mpair.add(record);
+ }
+ reader.close();
+ return map;
+ }
+
+
+ private Map<String, Map<String, MatePair>> createPUPairsMap(final File samFile) throws IOException {
+ IOUtil.assertFileIsReadable(samFile);
+ final SamReader reader = SamReaderFactory.makeDefault().open(samFile);
+ final Map<String, Map<String, MatePair>> map = new LinkedHashMap<String, Map<String,MatePair>>();
+
+ Map<String,MatePair> curFileMap;
+ for (final SAMRecord record : reader ) {
+ final String platformUnit = record.getReadGroup().getPlatformUnit();
+ curFileMap = map.get(platformUnit);
+ if(curFileMap == null)
+ {
+ curFileMap = new LinkedHashMap<String, MatePair>();
+ map.put(platformUnit, curFileMap);
+ }
+
+ MatePair mpair = curFileMap.get(record.getReadName());
+ if (mpair == null) {
+ mpair = new MatePair();
+ curFileMap.put(record.getReadName(), mpair);
+ }
+ mpair.add(record);
+ }
+ reader.close();
+ return map;
+ }
+
+ class MatePair {
+ SAMRecord mate1 ;
+ SAMRecord mate2 ;
+ void add(final SAMRecord record) {
+ if (!record.getReadPairedFlag()) throw new PicardException("Record "+record.getReadName()+" is not paired");
+ if (record.getFirstOfPairFlag()) {
+ if (mate1 != null) throw new PicardException("Mate 1 already set for record: "+record.getReadName());
+ mate1 = record ;
+ }
+ else if (record.getSecondOfPairFlag()) {
+ if (mate2 != null) throw new PicardException("Mate 2 already set for record: "+record.getReadName());
+ mate2 = record ;
+ }
+ else throw new PicardException("Neither FirstOfPairFlag or SecondOfPairFlag is set for a paired record");
+ }
+ }
+
+ private File newTempFastqFile(final String filename) throws IOException {
+ if(filename == null) return null;
+ final File file = File.createTempFile(filename,".fastq");
+ file.deleteOnExit();
+ return file;
+ }
+}
diff --git a/src/tests/java/picard/sam/SplitSamByLibraryTest.java b/src/tests/java/picard/sam/SplitSamByLibraryTest.java
new file mode 100755
index 0000000..67ec32b
--- /dev/null
+++ b/src/tests/java/picard/sam/SplitSamByLibraryTest.java
@@ -0,0 +1,112 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.Iterator;
+
+/**
+ * Basic positive and negative tests for SplitSamByLibrary command-line program
+ *
+ * @author ktibbett at broadinstitute.org
+ */
+public class SplitSamByLibraryTest {
+
+ @Test
+ public void testNoLibrarySpecified() {
+ SplitSamByLibrary splitter = new SplitSamByLibrary();
+ splitter.INPUT = new File("testdata/picard/sam/invalid_coord_sort_order.sam");
+ Assert.assertEquals(splitter.doWork(), SplitSamByLibrary.NO_LIBRARIES_SPECIFIED_IN_HEADER,
+ "SAM file with no libraries should failed but didn't.");
+
+ }
+
+ @Test
+ public void basicPositiveTest() {
+ SplitSamByLibrary splitter = new SplitSamByLibrary();
+ splitter.INPUT = new File("testdata/picard/sam/split_test.sam");
+ Assert.assertEquals(splitter.doWork(), 0, "SAM file split should have succeeded but didn't.");
+
+ File f = new File("unknown.sam");
+ Assert.assertTrue(f.exists(), "uknown.sam should exist but doesn't");
+ Assert.assertEquals(countReads(f), 2, "unknown.sam has the wrong number of reads");
+ f.delete();
+
+ f = new File("lib-1.sam");
+ Assert.assertTrue(f.exists(), "lib-1.sam should exist but doesn't");
+ Assert.assertEquals(countReads(f), 6, "lib-1.sam has the wrong number of reads");
+ f.delete();
+
+ f = new File("lib-2.sam");
+ Assert.assertFalse(f.exists(), "lib-2.sam should not exist but does");
+ if (f.exists()) f.delete();
+
+ f = new File("lib-3.sam");
+ Assert.assertTrue(f.exists(), "lib-3.sam should exist but doesn't");
+ Assert.assertEquals(countReads(f), 2, "lib-3.sam has the wrong number of reads");
+ f.delete();
+
+ }
+
+ @Test
+ public void testNoUnknownFile() {
+ SplitSamByLibrary splitter = new SplitSamByLibrary();
+ splitter.INPUT = new File("testdata/picard/sam/split_test2.sam");
+ Assert.assertEquals(splitter.doWork(), 0, "SAM file split should have succeeded but didn't.");
+
+ // The unknown file should exist and have two reads
+ File f = new File("unknown.sam");
+ Assert.assertFalse(f.exists(), "uknown.sam should not exist but does");
+ if (f.exists()) f.delete();
+
+ f = new File("lib-1.sam");
+ Assert.assertTrue(f.exists(), "lib-1.sam should exist but doesn't");
+ Assert.assertEquals(countReads(f), 4, "lib-1.sam has the wrong number of reads");
+ f.delete();
+
+ f = new File("lib-3.sam");
+ Assert.assertTrue(f.exists(), "lib-3.sam should exist but doesn't");
+ Assert.assertEquals(countReads(f), 2, "lib-3.sam has the wrong number of reads");
+ f.delete();
+
+ }
+
+ private int countReads(File samFile) {
+ SamReader reader = SamReaderFactory.makeDefault().open(samFile);
+ int count = 0;
+ for (Iterator it = reader.iterator(); it.hasNext(); ) {
+ it.next();
+ count++;
+ }
+ CloserUtil.close(reader);
+ return count;
+
+ }
+}
diff --git a/src/tests/java/picard/sam/ViewSamTest.java b/src/tests/java/picard/sam/ViewSamTest.java
new file mode 100644
index 0000000..5712f4c
--- /dev/null
+++ b/src/tests/java/picard/sam/ViewSamTest.java
@@ -0,0 +1,136 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.AsciiWriter;
+import htsjdk.samtools.util.BufferedLineReader;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import htsjdk.samtools.util.LineReader;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.util.List;
+
+public class ViewSamTest extends CommandLineProgramTest {
+ @Override
+ public String getCommandLineProgramName() {
+ return ViewSam.class.getSimpleName();
+ }
+
+ /**
+ * Confirm that ViewSam retains whatever version number was in the input header.
+ */
+ @Test
+ public void testHeaderVersion() throws Exception {
+ final String oldVersionHeader = "@HD\tVN:1.3\tSO:unsorted";
+ final File inputSam = File.createTempFile("ViewSamTest.input.", ".sam");
+ inputSam.deleteOnExit();
+ final AsciiWriter writer = new AsciiWriter(new FileOutputStream(inputSam));
+ writer.write(oldVersionHeader);
+ writer.write("\n");
+ writer.close();
+ final File viewSamOutputFile = File.createTempFile("ViewSamTest.output.", ".sam");
+ viewSamOutputFile.deleteOnExit();
+
+ final ViewSam viewSam = new ViewSam();
+ viewSam.INPUT = inputSam.getAbsolutePath();
+
+ // create a print stream to this file
+ final PrintStream viewSamPrintStream = new PrintStream(viewSamOutputFile);
+ // make sure the command line call exited successfully
+ Assert.assertEquals(viewSam.writeSamText(viewSamPrintStream), 0);
+ viewSamPrintStream.close();
+
+ final LineReader viewSamInputReader = new BufferedLineReader(new FileInputStream(viewSamOutputFile));
+ Assert.assertEquals(viewSamInputReader.readLine(), oldVersionHeader);
+ }
+
+ /**
+ * Confirm that ViewSam only outputs records that overlap intervals in a provided interval file.
+ */
+ @Test
+ public void testIntervals() throws Exception {
+ // a SAM file designed to test intervals against
+ final File inputSam = new File("testdata/picard/sam/viewsam_intervals_test.sam");
+ // an interval file containing the intervals to run against the SAM
+ final File inputIntervalsFile = new File("testdata/picard/sam/viewsam_intervals_test.interval_list");
+
+ // create temp output file that ViewSam call get written to
+ final File viewSamOutputFile = File.createTempFile("ViewSamTest.output.", ".sam");
+ viewSamOutputFile.deleteOnExit();
+
+ final ViewSam viewSam = new ViewSam();
+ viewSam.INPUT = inputSam.getAbsolutePath();
+ viewSam.INTERVAL_LIST = inputIntervalsFile;
+
+ // create a print stream to this file
+ final PrintStream viewSamPrintStream = new PrintStream(viewSamOutputFile);
+ // make sure the command line call exited successfully
+ Assert.assertEquals(viewSam.writeSamText(viewSamPrintStream), 0);
+ viewSamPrintStream.close();
+
+ // load the interval file
+ final IntervalList inputIntervalsList = IntervalList.fromFile(inputIntervalsFile);
+ // ViewSam internally utilizes uniqued intervals, so we will compare to the same
+ final List<Interval> intervals = inputIntervalsList.uniqued().getIntervals();
+
+ // make a reader that is not using intervals to load the output file we wrote that
+ // was written by the call to ViewSam with the given interval file. This will give us
+ // the "filtered" file that we can compare to the intervals and ensure that only
+ // overlapped records were written
+ final SamReader samReader = SamReaderFactory.makeDefault().open(viewSamOutputFile);
+
+ // make sure the intervals file caused at least one match to be found
+ boolean foundMatches = false;
+
+ for (final SAMRecord samRecord : samReader) {
+ // make an interval representing this SAM record
+ final Interval samRecordInterval = new Interval(samRecord.getContig(), samRecord.getStart(), samRecord.getEnd());
+ // go through and look to see whether this SAM interval overlaps a filtering interval
+ boolean samRecordIntervalOverlaps = false;
+ for (final Interval interval : intervals) {
+ if (interval.intersects(samRecordInterval)) {
+ samRecordIntervalOverlaps = true;
+ // mark that we have found at least one SAM record that overlaps an interval
+ foundMatches = true;
+ break;
+ }
+ }
+ // if this SAM record does not overlap an interval, it should not have been written
+ Assert.assertTrue(samRecordIntervalOverlaps, "SAM record written out was not overlapped by an interval.");
+ }
+
+ // we should have at least one SAM record written to ensure interval filtering worked correctly
+ Assert.assertTrue(foundMatches, "No SAM records overlapped the given intervals.");
+ }
+}
diff --git a/src/tests/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTest.java b/src/tests/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTest.java
new file mode 100644
index 0000000..9b5d65d
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTest.java
@@ -0,0 +1,543 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import org.testng.annotations.Test;
+
+import java.io.File;
+
+/**
+ * This class defines the individual test cases to run. The actual running of the test is done
+ * by AbstractMarkDuplicatesCommandLineProgramTester or children thereof (see getTester).
+ */
+public abstract class AbstractMarkDuplicatesCommandLineProgramTest {
+
+ protected abstract AbstractMarkDuplicatesCommandLineProgramTester getTester();
+
+ protected final static int DEFAULT_BASE_QUALITY = 10;
+
+ @Test
+ public void testSingleUnmappedFragment() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addUnmappedFragment(-1, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoUnmappedFragments() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addUnmappedFragment(-1, DEFAULT_BASE_QUALITY);
+ tester.addUnmappedFragment(-1, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testSingleUnmappedPair() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addUnmappedPair(-1, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testSingleMappedFragment() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(1, 1, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedFragments() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(0, 1, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 1, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testSingleMappedPair() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testSingleMappedFragmentAndSingleMappedPair() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(1, 1, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairs() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testThreeMappedPairs() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testSingleMappedFragmentAndTwoMappedPairs() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(1, 1, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsAndTerminalUnmappedFragment() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addUnmappedFragment(-1, DEFAULT_BASE_QUALITY); // unmapped fragment at end of file
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsAndTerminalUnmappedPair() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addUnmappedPair(-1, DEFAULT_BASE_QUALITY); // unmapped pair at end of file
+ tester.runTest();
+ }
+
+ @Test
+ public void testOpticalDuplicateFinding() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+
+ // explicitly creating 1 expected optical duplicate pair
+ tester.setExpectedOpticalDuplicate(1);
+
+ // pass in the read names manually, in order to control duplicates vs optical duplicates
+ tester.addMatePair("READ0:1:1:1:1", 1, 1, 100, false, false, false, false, "50M", "50M", false, true, false,
+ false, false, DEFAULT_BASE_QUALITY); // non-duplicate mapped pair to start
+ tester.addMatePair("READ1:1:1:1:300", 1, 1, 100, false, false, true, true, "50M", "50M", false, true, false,
+ false, false, DEFAULT_BASE_QUALITY); // duplicate pair, NOT optical duplicate (delta-Y > 100)
+ tester.addMatePair("READ2:1:1:1:50", 1, 1, 100, false, false, true, true, "50M", "50M", false, true, false,
+ false, false, DEFAULT_BASE_QUALITY); // duplicate pair, expected optical duplicate (delta-X and delta-Y < 100)
+ tester.runTest();
+ }
+
+ @Test
+ public void testOpticalDuplicateClusterSamePositionNoOpticalDuplicates() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.setExpectedOpticalDuplicate(0);
+ tester.addMatePair("RUNID:7:1203:2886:82292", 1, 485253, 485253, false, false, true, true, "42M59S", "59S42M", false, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:7:1203:2884:16834", 1, 485253, 485253, false, false, false, false, "59S42M", "42M59S", true, false, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testOpticalDuplicateClusterSamePositionNoOpticalDuplicatesWithinPixelDistance() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.setExpectedOpticalDuplicate(0);
+ tester.addMatePair("RUNID:7:1203:2886:16834", 1, 485253, 485253, false, false, true, true, "42M59S", "59S42M", false, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:7:1203:2884:16835", 1, 485253, 485253, false, false, false, false, "59S42M", "42M59S", true, false, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testOpticalDuplicateClusterSamePositionOneOpticalDuplicatesWithinPixelDistance() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.setExpectedOpticalDuplicate(1);
+ tester.addMatePair("RUNID:7:1203:2886:16834", 1, 485253, 485253, false, false, true, true, "45M", "45M", false, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:7:1203:2884:16835", 1, 485253, 485253, false, false, false, false, "45M", "45M", false, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testOpticalDuplicateClusterOneEndSamePositionOneCluster() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.setExpectedOpticalDuplicate(1);
+ tester.addMatePair("RUNID:7:2205:17939:39728", 1, 485328, 485312, false, false, false, false, "55M46S", "30S71M", false, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:7:2205:17949:39745", 1, 485328, 485328, false, false, true, true, "55M46S", "46S55M", false, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsAndMappedSecondaryFragment() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedFragment(1, 200, false, DEFAULT_BASE_QUALITY, true); // mapped non-primary fragment
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedFragmentAndMappedPairFirstOfPairNonPrimary() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(1, 1, false,DEFAULT_BASE_QUALITY);
+ tester.addMatePair(1, 200, 0, false, true, false, false, "54M22S", null, false, false, true, true, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsMatesSoftClipped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 10022, 10051, false, false, "76M", "8S68M", false, true, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 10022, 10063, false, false, "76M", "5S71M", false, true, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsWithSoftClipping() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ // NB: no duplicates
+ // 5'1: 2, 5'2:46+73M=118
+ // 5'1: 2, 5'2:51+68M=118
+ tester.addMappedPair(1, 2, 46, false, false, "6S42M28S", "3S73M", false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 2, 51, true, true, "6S42M28S", "8S68M", false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsWithSoftClippingFirstOfPairOnlyNoMateCigar() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.setNoMateCigars(true);
+ // NB: no duplicates
+ // 5'1: 2, 5'2:46+73M=118
+ // 5'1: 2, 5'2:51+68M=118
+ tester.addMappedPair(1, 12, 46, false, false, "6S42M28S", null, true, DEFAULT_BASE_QUALITY); // only add the first one
+ tester.addMappedPair(1, 12, 51, false, false, "6S42M28S", null, true, DEFAULT_BASE_QUALITY); // only add the first one
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsWithSoftClippingBoth() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ // mapped reference length: 73 + 42 = 115
+ tester.addMappedPair(1, 10046, 10002, true, true, "3S73M", "6S42M28S", true, false, false, DEFAULT_BASE_QUALITY);
+ // mapped reference length: 68 + 48 = 116
+ tester.addMappedPair(1, 10051, 10002, false, false, "8S68M", "6S48M22S", true, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testMatePairSecondUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10049, 10049, false, true, false, false, "11M2I63M", null, false, false, false, false, false, DEFAULT_BASE_QUALITY); // neither are duplicates
+ tester.runTest();
+ }
+
+ @Test
+ public void testMatePairFirstUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10056, 10056, true, false, false, false, null, "54M22S", false, false, false, false, false, DEFAULT_BASE_QUALITY); // neither are duplicates
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedFragmentAndMatePairSecondUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10049, 10049, false, true, false, false, "11M2I63M", null, false, false, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(1, 10049, true, DEFAULT_BASE_QUALITY); // duplicate
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedFragmentAndMatePairFirstUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10049, 10049, true, false, false, false, null, "11M2I63M", false, false, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(1, 10049, true, DEFAULT_BASE_QUALITY); // duplicate
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedPairAndMatePairSecondUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10040, 10040, false, true, true, false, "76M", null, false, false, false, false, false, DEFAULT_BASE_QUALITY); // second a duplicate,
+ // second end unmapped
+ tester.addMappedPair(1, 10189, 10040, false, false, "41S35M", "65M11S", true, false, false, DEFAULT_BASE_QUALITY); // mapped OK
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedPairAndMatePairFirstUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10040, 10040, true, false, false, true, null, "76M", false, false, false, false, false, DEFAULT_BASE_QUALITY); // first a duplicate,
+ // first end unmapped
+ tester.addMappedPair(1, 10189, 10040, false, false, "41S35M", "65M11S", true, false, false, DEFAULT_BASE_QUALITY); // mapped OK
+ tester.runTest();
+ }
+
+ // TODO: fails on MarkDuplicatesWithMateCigar
+ @Test
+ public void testMappedPairAndMatePairFirstOppositeStrandSecondUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ // first end mapped OK -, second end unmapped
+ tester.addMatePair(1, 484071, 484071, false, true, false, false, "66S35M", null, true, false, false, false, false, DEFAULT_BASE_QUALITY);
+ // mapped OK +/-
+ tester.addMappedPair(1, 484105, 484075, false, false, "35M66S", "30S71M", false, true, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+
+ @Test
+ public void testMappedPairAndMappedFragmentAndMatePairSecondUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10040, 10040, false, true, true, false, "76M", null, false, false, false, false, false, DEFAULT_BASE_QUALITY); // first a duplicate,
+ // second end unmapped
+ tester.addMappedPair(1, 10189, 10040, false, false, "41S35M", "65M11S", true, false, false, DEFAULT_BASE_QUALITY); // mapped OK
+ tester.addMappedFragment(1, 10040, true, DEFAULT_BASE_QUALITY); // duplicate
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedPairAndMappedFragmentAndMatePairFirstUnmapped() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMatePair(1, 10040, 10040, true, false, false, true, null, "76M", false, false, false, false, false, DEFAULT_BASE_QUALITY); // first a duplicate,
+ // first end unmapped
+ tester.addMappedPair(1, 10189, 10040, false, false, "41S35M", "65M11S", true, false, false, DEFAULT_BASE_QUALITY); // mapped OK
+ tester.addMappedFragment(1, 10040, true, DEFAULT_BASE_QUALITY); // duplicate
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsWithOppositeOrientations() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 10182, 10038, true, true, "32S44M", "66M10S", true, false, false, DEFAULT_BASE_QUALITY); // -/+
+ tester.addMappedPair(1, 10038, 10182, false, false, "70M6S", "32S44M", false, true, false, DEFAULT_BASE_QUALITY); // +/-, both are duplicates
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairsWithOppositeOrientationsNumberTwo() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 10038, 10182, false, false, "70M6S", "32S44M", false, true, false, DEFAULT_BASE_QUALITY); // +/-, both are duplicates
+ tester.addMappedPair(1, 10182, 10038, true, true, "32S44M", "66M10S", true, false, false, DEFAULT_BASE_QUALITY); // -/+
+ tester.runTest();
+ }
+
+ @Test
+ public void testThreeMappedPairsWithMatchingSecondMate() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ // Read0 and Read2 are duplicates
+ // 10181+41=10220, 10058
+ tester.addMappedPair(1, 10181, 10058, false, false, "41S35M", "47M29S", true, false, false, DEFAULT_BASE_QUALITY); // -/+
+ // 10181+37=10216, 10058
+ tester.addMappedPair(1, 10181, 10058, true, true, "37S39M", "44M32S", true, false, false, DEFAULT_BASE_QUALITY); // -/+
+ // 10180+36=10216, 10058
+ tester.addMappedPair(1, 10180, 10058, false, false, "36S40M", "50M26S", true, false, false, DEFAULT_BASE_QUALITY); // -/+, both are duplicates
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedPairWithSamePosition() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 4914, 4914, false, false, "37M39S", "73M3S", false, false, false, DEFAULT_BASE_QUALITY); // +/+
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedPairWithSamePositionSameCigar() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(1, 4914, 4914, false, false, "37M39S", "37M39S", false, false, false, DEFAULT_BASE_QUALITY); // +/+
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairWithSamePosition() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 5604914, 5604914, false, false, "37M39S", "73M3S", false, false, false, DEFAULT_BASE_QUALITY); // +/+
+ tester.addMappedPair(0, 5604914, 5604914, true, true, "37M39S", "73M3S", false, false, false, DEFAULT_BASE_QUALITY); // +/+
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairWithSamePositionDifferentStrands() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 5604914, 5604914, false, false, "50M", "50M", true, false, false, DEFAULT_BASE_QUALITY); // +/-
+ tester.addMappedPair(0, 5604914, 5604914, true, true, "50M", "50M", false, true, false, DEFAULT_BASE_QUALITY); // -/+
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoMappedPairWithSamePositionDifferentStrands2() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 5604914, 5604915, false, false, "50M", "50M", true, false, false, DEFAULT_BASE_QUALITY); // +/-
+ tester.addMappedPair(0, 5604915, 5604914, true, true, "50M", "50M", false, true, false, DEFAULT_BASE_QUALITY); // -/+
+ tester.runTest();
+ }
+
+ @Test
+ public void testMappedPairWithFirstEndSamePositionAndOther() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 5604914, 5605914, false, false, "37M39S", "73M3S", false, false, false, DEFAULT_BASE_QUALITY); // +/+
+ tester.addMappedPair(0, 5604914, 5604914, false, false, "37M39S", "73M3S", false, false, false, DEFAULT_BASE_QUALITY); // +/+
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoGroupsOnDifferentChromosomesOfTwoFragments() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(0, 1, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 1, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedFragment(1, 1, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(1, 1, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoGroupsOnDifferentChromosomesOfTwoMappedPairs() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(0, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoGroupsOnDifferentChromosomesOfThreeMappedPairs() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(0, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(0, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testThreeGroupsOnDifferentChromosomesOfThreeMappedPairs() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(0, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(0, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(1, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(2, 1, 100, false, false , DEFAULT_BASE_QUALITY);
+ tester.addMappedPair(2, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.addMappedPair(2, 1, 100, true, true, DEFAULT_BASE_QUALITY); // duplicate!!!
+ tester.runTest();
+ }
+
+ @Test
+ public void testBulkFragmentsNoDuplicates() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ for(int position = 1; position <= 10000; position += 1) {
+ tester.addMappedFragment(0, position, false, "100M", DEFAULT_BASE_QUALITY);
+ }
+ tester.runTest();
+ }
+
+ @Test
+ public void testBulkFragmentsWithDuplicates() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ for(int position = 1; position <= 10000; position += 1) {
+ tester.addMappedFragment(0, position, false, "100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, position, true, "100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, position, true, "100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, position, true, "100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, position, true, "100M", DEFAULT_BASE_QUALITY);
+ }
+ tester.runTest();
+ }
+
+ @Test
+ public void testStackOverFlowPairSetSwap() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+
+ final File input = new File("testdata/picard/sam/MarkDuplicates/markDuplicatesWithMateCigar.pairSet.swap.sam");
+ final SamReader reader = SamReaderFactory.makeDefault().open(input);
+ tester.setHeader(reader.getFileHeader());
+ for (final SAMRecord record : reader) {
+ tester.addRecord(record);
+ }
+ CloserUtil.close(reader);
+ tester.setExpectedOpticalDuplicate(1);
+ tester.runTest();
+ }
+
+ @Test
+ public void testSecondEndIsBeforeFirstInCoordinate() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedPair(0, 108855339, 108855323, false, false, "33S35M", "17S51M", true, true, false, DEFAULT_BASE_QUALITY); // +/-
+ tester.runTest();
+ }
+
+ @Test
+ public void testPathologicalOrderingAtTheSamePosition() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+
+ tester.setExpectedOpticalDuplicate(1);
+
+ tester.addMatePair("RUNID:3:1:15013:113051", 0, 129384554, 129384554, false, false, false, false, "68M", "68M", false, false, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:3:1:15029:113060", 0, 129384554, 129384554, false, false, true, true, "68M", "68M", false, false, false, false, false, DEFAULT_BASE_QUALITY);
+
+ // Create the pathology
+ final CloseableIterator<SAMRecord> iterator = tester.getRecordIterator();
+ final int[] qualityOffset = {20, 30, 10, 40}; // creates an interesting pathological ordering
+ int index = 0;
+ while (iterator.hasNext()) {
+ final SAMRecord record = iterator.next();
+ final byte[] quals = new byte[record.getReadLength()];
+ for (int i = 0; i < record.getReadLength(); i++) {
+ quals[i] = (byte)(qualityOffset[index] + 10);
+ }
+ record.setBaseQualities(quals);
+ index++;
+ }
+ iterator.close();
+
+ // Run the test
+ tester.runTest();
+ }
+
+ @Test
+ public void testDifferentChromosomesInOppositeOrder() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.setExpectedOpticalDuplicate(1);
+ tester.addMatePair("RUNID:6:101:17642:6835", 0, 1, 123989, 18281, false, false, true, true, "37S64M", "52M49S", false, false, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:6:101:17616:6888", 1, 0, 18281, 123989, false, false, false, false, "52M49S", "37S64M", false, false, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testOpticalDuplicateClustersAddingSecondEndFirstSameCoordinate() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.setExpectedOpticalDuplicate(1);
+ tester.addMatePair("RUNID:1:1:15993:13361", 2, 41212324, 41212310, false, false, false, false, "33S35M", "19S49M", true, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:1:1:16020:13352", 2, 41212324, 41212319, false, false, true, true, "33S35M", "28S40M", true, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+}
diff --git a/src/tests/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTester.java b/src/tests/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTester.java
new file mode 100644
index 0000000..cea6fcf
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTester.java
@@ -0,0 +1,170 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordSetBuilder;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.FormatUtil;
+import htsjdk.samtools.util.TestUtil;
+import org.testng.Assert;
+import picard.cmdline.CommandLineProgram;
+import picard.sam.DuplicationMetrics;
+import picard.sam.testers.SamFileTester;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+
+/**
+ * This class is an extension of SamFileTester used to test AbstractMarkDuplicatesCommandLineProgram's with SAM files generated on the fly.
+ * This performs the underlying tests defined by classes such as AbstractMarkDuplicatesCommandLineProgramTest.
+ */
+abstract public class AbstractMarkDuplicatesCommandLineProgramTester extends SamFileTester {
+
+ final private File metricsFile;
+ final DuplicationMetrics expectedMetrics;
+
+ public AbstractMarkDuplicatesCommandLineProgramTester(final ScoringStrategy duplicateScoringStrategy) {
+ super(50, true, SAMRecordSetBuilder.DEFAULT_CHROMOSOME_LENGTH, duplicateScoringStrategy);
+
+ expectedMetrics = new DuplicationMetrics();
+ expectedMetrics.READ_PAIR_OPTICAL_DUPLICATES = 0;
+
+ metricsFile = new File(getOutputDir(), "metrics.txt");
+ addArg("METRICS_FILE=" + metricsFile);
+ addArg("DUPLICATE_SCORING_STRATEGY=" + duplicateScoringStrategy.name());
+ }
+
+
+ public AbstractMarkDuplicatesCommandLineProgramTester() {
+ this(SAMRecordSetBuilder.DEFAULT_DUPLICATE_SCORING_STRATEGY);
+ }
+
+ @Override
+ public String getCommandLineProgramName() { return getProgram().getClass().getSimpleName(); }
+
+ /**
+ * Fill in expected duplication metrics directly from the input records given to this tester
+ */
+ private void updateExpectedDuplicationMetrics() {
+
+ final FormatUtil formatter = new FormatUtil();
+
+ final CloseableIterator<SAMRecord> inputRecordIterator = this.getRecordIterator();
+ while (inputRecordIterator.hasNext()) {
+ final SAMRecord record = inputRecordIterator.next();
+ if (!record.isSecondaryOrSupplementary()) {
+ final String key = samRecordToDuplicatesFlagsKey(record);
+ if (!this.duplicateFlags.containsKey(key)) {
+ System.err.println("DOES NOT CONTAIN KEY: " + key);
+ }
+ final boolean isDuplicate = this.duplicateFlags.get(key);
+
+ // First bring the simple metricsFile up to date
+ if (record.getReadUnmappedFlag()) {
+ ++expectedMetrics.UNMAPPED_READS;
+ }
+ else if (!record.getReadPairedFlag() || record.getMateUnmappedFlag()) {
+ ++expectedMetrics.UNPAIRED_READS_EXAMINED;
+ if (isDuplicate) ++expectedMetrics.UNPAIRED_READ_DUPLICATES;
+ }
+ else {
+ ++expectedMetrics.READ_PAIRS_EXAMINED; // will need to be divided by 2 at the end
+ if (isDuplicate) ++expectedMetrics.READ_PAIR_DUPLICATES; // will need to be divided by 2 at the end
+ }
+ }
+ }
+ expectedMetrics.READ_PAIR_DUPLICATES = expectedMetrics.READ_PAIR_DUPLICATES / 2;
+ expectedMetrics.READ_PAIRS_EXAMINED = expectedMetrics.READ_PAIRS_EXAMINED / 2;
+ expectedMetrics.calculateDerivedMetrics();
+
+ // Have to run this Double value through the same format/parsing operations as during a file write/read
+ expectedMetrics.PERCENT_DUPLICATION = formatter.parseDouble(formatter.format(expectedMetrics.PERCENT_DUPLICATION));
+ }
+
+ public void setExpectedOpticalDuplicate(final int expectedOpticalDuplicatePairs) {
+ expectedMetrics.READ_PAIR_OPTICAL_DUPLICATES = expectedOpticalDuplicatePairs;
+ }
+
+ @Override
+ public void test() {
+ try {
+ updateExpectedDuplicationMetrics();
+
+ // Read the output and check the duplicate flag
+ int outputRecords = 0;
+ final SamReader reader = SamReaderFactory.makeDefault().open(getOutput());
+ for (final SAMRecord record : reader) {
+ outputRecords++;
+ final String key = samRecordToDuplicatesFlagsKey(record);
+ if (!this.duplicateFlags.containsKey(key)) {
+ System.err.println("DOES NOT CONTAIN KEY: " + key);
+ }
+ Assert.assertTrue(this.duplicateFlags.containsKey(key));
+ final boolean value = this.duplicateFlags.get(key);
+ this.duplicateFlags.remove(key);
+ if (value != record.getDuplicateReadFlag()) {
+ System.err.println("Mismatching read:");
+ System.err.print(record.getSAMString());
+ }
+ Assert.assertEquals(record.getDuplicateReadFlag(), value);
+ }
+ CloserUtil.close(reader);
+
+ // Ensure the program output the same number of records as were read in
+ Assert.assertEquals(outputRecords, this.getNumberOfRecords(), ("saw " + outputRecords + " output records, vs. " + this.getNumberOfRecords() + " input records"));
+
+ // Check the values written to metrics.txt against our input expectations
+ final MetricsFile<DuplicationMetrics, Comparable<?>> metricsOutput = new MetricsFile<DuplicationMetrics, Comparable<?>>();
+ try{
+ metricsOutput.read(new FileReader(metricsFile));
+ }
+ catch (final FileNotFoundException ex) {
+ System.err.println("Metrics file not found: " + ex);
+ }
+ // NB: Test writes an initial metrics line with a null entry for LIBRARY and 0 values for all metrics. Why?
+ final DuplicationMetrics observedMetrics = metricsOutput.getMetrics().get(metricsOutput.getMetrics().size() - 1);
+ Assert.assertEquals(observedMetrics.UNPAIRED_READS_EXAMINED, expectedMetrics.UNPAIRED_READS_EXAMINED, "UNPAIRED_READS_EXAMINED does not match expected");
+ Assert.assertEquals(observedMetrics.READ_PAIRS_EXAMINED, expectedMetrics.READ_PAIRS_EXAMINED, "READ_PAIRS_EXAMINED does not match expected");
+ Assert.assertEquals(observedMetrics.UNMAPPED_READS, expectedMetrics.UNMAPPED_READS, "UNMAPPED_READS does not match expected");
+ Assert.assertEquals(observedMetrics.UNPAIRED_READ_DUPLICATES, expectedMetrics.UNPAIRED_READ_DUPLICATES, "UNPAIRED_READ_DUPLICATES does not match expected");
+ Assert.assertEquals(observedMetrics.READ_PAIR_DUPLICATES, expectedMetrics.READ_PAIR_DUPLICATES, "READ_PAIR_DUPLICATES does not match expected");
+ Assert.assertEquals(observedMetrics.READ_PAIR_OPTICAL_DUPLICATES, expectedMetrics.READ_PAIR_OPTICAL_DUPLICATES, "READ_PAIR_OPTICAL_DUPLICATES does not match expected");
+ Assert.assertEquals(observedMetrics.PERCENT_DUPLICATION, expectedMetrics.PERCENT_DUPLICATION, "PERCENT_DUPLICATION does not match expected");
+ Assert.assertEquals(observedMetrics.ESTIMATED_LIBRARY_SIZE, expectedMetrics.ESTIMATED_LIBRARY_SIZE, "ESTIMATED_LIBRARY_SIZE does not match expected");
+ } finally {
+ TestUtil.recursiveDelete(getOutputDir());
+ }
+ }
+
+ abstract protected CommandLineProgram getProgram();
+}
+
diff --git a/src/tests/java/picard/sam/markduplicates/MarkDuplicatesTest.java b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesTest.java
new file mode 100644
index 0000000..351ae1f
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesTest.java
@@ -0,0 +1,208 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMProgramRecord;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.TestUtil;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This class defines the individual test cases to run. The actual running of the test is done
+ * by MarkDuplicatesTester (see getTester).
+ */
+public class MarkDuplicatesTest extends AbstractMarkDuplicatesCommandLineProgramTest {
+ protected static String TEST_BASE_NAME = null;
+ protected static File TEST_DATA_DIR = null;
+
+ @BeforeClass
+ public void setUp() {
+ TEST_BASE_NAME = "MarkDuplicates";
+ TEST_DATA_DIR = new File("testdata/picard/sam/MarkDuplicates");
+ }
+
+ protected AbstractMarkDuplicatesCommandLineProgramTester getTester() {
+ return new MarkDuplicatesTester();
+ }
+
+ // NB: this test should return different results than MarkDuplicatesWithMateCigar
+ @Test
+ public void testTwoMappedPairsWithSoftClippingFirstOfPairOnly() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ // NB: no duplicates
+ // 5'1: 2, 5'2:46+73M=118
+ // 5'1: 2, 5'2:51+68M=118
+ tester.addMappedPair(0, 12, 46, false, false, "6S42M28S", "3S73M", true, 50); // only add the first one
+ // NB: this next record should not be a duplicate in MarkDuplicates
+ tester.addMappedPair(0, 12, 51, false, false, "6S42M28S", "8S68M", true, 50); // only add the first one
+ tester.runTest();
+ }
+
+ /**
+ * Test that PG header records are created & chained appropriately (or not created), and that the PG record chains
+ * are as expected. MarkDuplicates is used both to merge and to mark dupes in this case.
+ * @param suppressPg If true, do not create PG header record.
+ * @param expectedPnVnByReadName For each read, info about the expect chain of PG records.
+ */
+ @Test(dataProvider = "pgRecordChainingTest")
+ public void pgRecordChainingTest(final boolean suppressPg,
+ final Map<String, List<ExpectedPnAndVn>> expectedPnVnByReadName) {
+ final File outputDir = IOUtil.createTempDir(TEST_BASE_NAME + ".", ".tmp");
+ outputDir.deleteOnExit();
+ try {
+ // Run MarkDuplicates, merging the 3 input files, and either enabling or suppressing PG header
+ // record creation according to suppressPg.
+ final MarkDuplicates markDuplicates = new MarkDuplicates();
+ final ArrayList<String> args = new ArrayList<String>();
+ for (int i = 1; i <= 3; ++i) {
+ args.add("INPUT=" + new File(TEST_DATA_DIR, "merge" + i + ".sam").getAbsolutePath());
+ }
+ final File outputSam = new File(outputDir, TEST_BASE_NAME + ".sam");
+ args.add("OUTPUT=" + outputSam.getAbsolutePath());
+ args.add("METRICS_FILE=" + new File(outputDir, TEST_BASE_NAME + ".duplicate_metrics").getAbsolutePath());
+ if (suppressPg) args.add("PROGRAM_RECORD_ID=null");
+
+ // I generally prefer to call doWork rather than invoking the argument parser, but it is necessary
+ // in this case to initialize the command line.
+ // Note that for the unit test, version won't come through because it is obtained through jar
+ // manifest, and unit test doesn't run code from a jar.
+ Assert.assertEquals(markDuplicates.instanceMain(args.toArray(new String[args.size()])), 0);
+
+ // Read the MarkDuplicates output file, and get the PG ID for each read. In this particular test,
+ // the PG ID should be the same for both ends of a pair.
+ final SamReader reader = SamReaderFactory.makeDefault().open(outputSam);
+
+ final Map<String, String> pgIdForReadName = new HashMap<String, String>();
+ for (final SAMRecord rec : reader) {
+ final String existingPgId = pgIdForReadName.get(rec.getReadName());
+ final String thisPgId = rec.getStringAttribute(SAMTag.PG.name());
+ if (existingPgId != null) {
+ Assert.assertEquals(thisPgId, existingPgId);
+ } else {
+ pgIdForReadName.put(rec.getReadName(), thisPgId);
+ }
+ }
+ final SAMFileHeader header = reader.getFileHeader();
+ CloserUtil.close(reader);
+
+ // Confirm that for each read name, the chain of PG records contains exactly the number that is expected,
+ // and that values in the PG chain are as expected.
+ for (final Map.Entry<String, List<ExpectedPnAndVn>> entry : expectedPnVnByReadName.entrySet()) {
+ final String readName = entry.getKey();
+ final List<ExpectedPnAndVn> expectedList = entry.getValue();
+ String pgId = pgIdForReadName.get(readName);
+ for (final ExpectedPnAndVn expected : expectedList) {
+ final SAMProgramRecord programRecord = header.getProgramRecord(pgId);
+ if (expected.expectedPn != null) Assert.assertEquals(programRecord.getProgramName(), expected.expectedPn);
+ if (expected.expectedVn != null) Assert.assertEquals(programRecord.getProgramVersion(), expected.expectedVn);
+ pgId = programRecord.getPreviousProgramGroupId();
+ }
+ Assert.assertNull(pgId);
+ }
+
+ } finally {
+ TestUtil.recursiveDelete(outputDir);
+ }
+ }
+
+ /**
+ * Represents an expected PN value and VN value for a PG record. If one of thexe is null, any value is allowed
+ * in the PG record being tested.
+ */
+ private static class ExpectedPnAndVn {
+ final String expectedPn;
+ final String expectedVn;
+
+ private ExpectedPnAndVn(final String expectedPn, final String expectedVn) {
+ this.expectedPn = expectedPn;
+ this.expectedVn = expectedVn;
+ }
+ }
+
+ @DataProvider(name = "pgRecordChainingTest")
+ public Object[][] pgRecordChainingTestDataProvider() {
+ // Two test cases: One in which PG record generation is enabled, the other in which it is turned off.
+ final Map<String, List<ExpectedPnAndVn>> withPgMap = new HashMap<String, List<ExpectedPnAndVn>>();
+ withPgMap.put("1AAXX.1.1", Arrays.asList(new ExpectedPnAndVn(TEST_BASE_NAME, null), new ExpectedPnAndVn(TEST_BASE_NAME, "1"), new ExpectedPnAndVn("bwa", "1")));
+ withPgMap.put("1AAXX.2.1", Arrays.asList(new ExpectedPnAndVn(TEST_BASE_NAME, null), new ExpectedPnAndVn("bwa", "2")));
+ withPgMap.put("1AAXX.3.1", Arrays.asList(new ExpectedPnAndVn(TEST_BASE_NAME, null)));
+
+ final Map<String, List<ExpectedPnAndVn>> suppressPgMap = new HashMap<String, List<ExpectedPnAndVn>>();
+ suppressPgMap .put("1AAXX.1.1", Arrays.asList(new ExpectedPnAndVn(TEST_BASE_NAME, "1"), new ExpectedPnAndVn("bwa", "1")));
+ suppressPgMap .put("1AAXX.2.1", Arrays.asList(new ExpectedPnAndVn("bwa", "2")));
+ suppressPgMap .put("1AAXX.3.1", new ArrayList<ExpectedPnAndVn>(0));
+ return new Object[][] {
+ { false, withPgMap},
+ { true, suppressPgMap}
+ };
+ }
+
+ @Test(dataProvider = "testOpticalDuplicateDetectionDataProvider")
+ public void testOpticalDuplicateDetection(final File sam, final long expectedNumOpticalDuplicates) {
+ final File outputDir = IOUtil.createTempDir(TEST_BASE_NAME + ".", ".tmp");
+ outputDir.deleteOnExit();
+ final File outputSam = new File(outputDir, TEST_BASE_NAME + ".sam");
+ outputSam.deleteOnExit();
+ final File metricsFile = new File(outputDir, TEST_BASE_NAME + ".duplicate_metrics");
+ metricsFile.deleteOnExit();
+ // Run MarkDuplicates, merging the 3 input files, and either enabling or suppressing PG header
+ // record creation according to suppressPg.
+ final MarkDuplicates markDuplicates = new MarkDuplicates();
+ markDuplicates.setupOpticalDuplicateFinder();
+ markDuplicates.INPUT = CollectionUtil.makeList(sam.getAbsolutePath());
+ markDuplicates.OUTPUT = outputSam;
+ markDuplicates.METRICS_FILE = metricsFile;
+ markDuplicates.TMP_DIR = CollectionUtil.makeList(outputDir);
+ // Needed to suppress calling CommandLineProgram.getVersion(), which doesn't work for code not in a jar
+ markDuplicates.PROGRAM_RECORD_ID = null;
+ Assert.assertEquals(markDuplicates.doWork(), 0);
+ Assert.assertEquals(markDuplicates.numOpticalDuplicates(), expectedNumOpticalDuplicates);
+ }
+
+ @DataProvider(name="testOpticalDuplicateDetectionDataProvider")
+ public Object[][] testOpticalDuplicateDetectionDataProvider() {
+ return new Object[][] {
+ {new File(TEST_DATA_DIR, "optical_dupes.sam"), 1L},
+ {new File(TEST_DATA_DIR, "optical_dupes_casava.sam"), 1L},
+ };
+ }
+}
diff --git a/src/tests/java/picard/sam/markduplicates/MarkDuplicatesTester.java b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesTester.java
new file mode 100644
index 0000000..67cfc82
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesTester.java
@@ -0,0 +1,42 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.DuplicateScoringStrategy;
+import picard.cmdline.CommandLineProgram;
+
+/**
+ * This class is an extension of AbstractMarkDuplicatesCommandLineProgramTester used to test MarkDuplicates with SAM files generated on the fly.
+ * This performs the underlying tests defined by classes such as see AbstractMarkDuplicatesCommandLineProgramTest and MarkDuplicatesTest.
+ */
+public class MarkDuplicatesTester extends AbstractMarkDuplicatesCommandLineProgramTester {
+
+ public MarkDuplicatesTester() {
+ super(DuplicateScoringStrategy.ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH);
+ }
+
+ @Override
+ protected CommandLineProgram getProgram() { return new MarkDuplicates(); }
+}
diff --git a/src/tests/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarTest.java b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarTest.java
new file mode 100644
index 0000000..036a274
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarTest.java
@@ -0,0 +1,107 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import picard.PicardException;
+import org.testng.annotations.Test;
+
+/**
+ * This class defines the individual test cases to run. The actual running of the test is done
+ * by MarkDuplicatesWithMateCigarTester (see getTester).
+ * @author nhomer at broadinstitute.org
+ */
+public class MarkDuplicatesWithMateCigarTest extends AbstractMarkDuplicatesCommandLineProgramTest {
+ protected AbstractMarkDuplicatesCommandLineProgramTester getTester() {
+ return new MarkDuplicatesWithMateCigarTester();
+ }
+
+ // TODO: test program record chaining, including failures. Use MarkDuplicate's facility.
+ // TODO: check if one mate is dup, the other is as well, only if both are mapped
+
+ // NB: this test should return different results than MarkDuplicatesWithMateCigar, as we have the mate cigar
+ @Test
+ public void testTwoMappedPairsWithSoftClippingFirstOfPairOnly() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ // NB: no duplicates
+ // 5'1: 2, 5'2:46+73M=118
+ // 5'1: 2, 5'2:51+68M=118
+ tester.addMappedPair(0, 12, 46, false, false, "6S42M28S", "3S73M", true, 50); // only add the first one
+ // NB: this next record should not be a duplicate in MarkDuplicates, but is here, because have the mate cigar
+ tester.addMappedPair(0, 12, 51, true, true, "6S42M28S", "8S68M", true, 50); // only add the first one
+ tester.runTest();
+ }
+
+ @Test
+ public void testTwoFragmentsLargeSoftClipWithMinimumDistanceOK() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addArg("MINIMUM_DISTANCE=990");
+ tester.addMappedFragment(0, 1000, false, "100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 2000, false, "10S100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 3000, true, "2000S100M", DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void testTwoFragmentsLargeSoftClipWithMinimumDistanceFailure() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addArg("MINIMUM_DISTANCE=989");
+ tester.addMappedFragment(0, 1000, false, "100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 2000, false, "10S100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 3000, true, "2000S100M", DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test(expectedExceptions = PicardException.class)
+ public void testTwoFragmentsLargeSoftClip() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(0, 1000, false, "100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 2000, false, "10S100M", DEFAULT_BASE_QUALITY);
+ tester.addMappedFragment(0, 3000, true, "2000S100M", DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testScoringStrategyForReadNameComparison() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.addMappedFragment(0, 1, false, DEFAULT_BASE_QUALITY); // Ref lengths, MapQs equal. First read name in lex order called dup.
+ tester.addMappedFragment(0, 1, true, DEFAULT_BASE_QUALITY);
+ tester.runTest();
+ }
+
+ @Test
+ public void testScoringStrategyForMateReferenceLengthComparison() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+
+ // READY pair are both duplicates because (sum of reference length) for both reads is less than for READX
+ // MarkDuplicates and SUM_OF_BASE_QUALITIES scoring strategy would mark READX pair a duplicate, as all reads have equal quals
+ // If this scoring strategy did not account for mate reference length, READX pair would be marked a duplicate
+ tester.addMatePair("READY", 1, 1, 105, false, false, true, true, "50M", "5I45M", false, true, false,
+ false, false, DEFAULT_BASE_QUALITY); // duplicate pair. Both reads should be duplicates!!!
+ tester.addMatePair("READX", 1, 1, 100, false, false, false, false, "50M", "50M", false, true, false,
+ false, false, DEFAULT_BASE_QUALITY);
+
+ tester.runTest();
+ }
+}
diff --git a/src/tests/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarTester.java b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarTester.java
new file mode 100644
index 0000000..3e0d992
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarTester.java
@@ -0,0 +1,46 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
+import picard.cmdline.CommandLineProgram;
+
+/**
+ * This class is an extension of AbstractMarkDuplicatesCommandLineProgramTester used to test MarkDuplicatesWithMateCigar with SAM files generated on the fly.
+ * This performs the underlying tests defined by classes such as see AbstractMarkDuplicatesCommandLineProgramTest and MarkDuplicatesWithMateCigarTest.
+ */
+public class MarkDuplicatesWithMateCigarTester extends AbstractMarkDuplicatesCommandLineProgramTester {
+
+ public MarkDuplicatesWithMateCigarTester() {
+ // NB: to be equivalent to MarkDuplicates we need to use SUM_OF_BASE_QUALITIES
+ super(ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH);
+
+ addArg("MAX_RECORDS_IN_RAM=1000");
+ addArg("BLOCK_SIZE=250");
+ }
+
+ @Override
+ protected CommandLineProgram getProgram() { return new MarkDuplicatesWithMateCigar(); }
+}
diff --git a/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigar.java b/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigar.java
new file mode 100644
index 0000000..32de1d6
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigar.java
@@ -0,0 +1,222 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.DuplicateSet;
+import htsjdk.samtools.DuplicateSetIterator;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMTag;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.IterableAdapter;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.ProgressLogger;
+import picard.cmdline.CommandLineProgramProperties;
+import picard.cmdline.programgroups.Testing;
+import picard.sam.DuplicationMetrics;
+import picard.sam.markduplicates.util.AbstractMarkDuplicatesCommandLineProgram;
+import picard.sam.markduplicates.util.LibraryIdGenerator;
+import picard.sam.markduplicates.util.ReadEnds;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This is a simple tool to mark duplicates using the DuplicateSetIterator, DuplicateSet, and SAMRecordDuplicateComparator.
+ *
+ * Users should continue to use MarkDuplicates in general. The main motivation of this tool was the fact that
+ * MarkDuplicates has many, many, many useful test cases, but few unit tests for validating individual duplicate sets. To
+ * test the DuplicateSetIterator, DuplicateSet, and SAMRecordDuplicateComparator, the most expedient method was to write
+ * this tool and make sure it behaves similarly to MarkDuplicates. Not the best, I know, but good enough. NH 06/25/2015.
+ *
+ *
+ * See MarkDuplicates for more details.
+ *
+ * @author nhomer
+ */
+ at CommandLineProgramProperties(
+ usage = "Examines aligned records in the supplied SAM or BAM file to locate duplicate molecules. " +
+ "All records are then written to the output file with the duplicate records flagged.",
+ usageShort = "Examines aligned records in the supplied SAM or BAM file to locate duplicate molecules.",
+ programGroup = Testing.class
+)
+public class SimpleMarkDuplicatesWithMateCigar extends MarkDuplicates {
+ private final Log log = Log.getInstance(MarkDuplicatesWithMateCigar.class);
+
+ /** Stock main method. */
+ public static void main(final String[] args) {
+ new MarkDuplicatesWithMateCigar().instanceMainWithExit(args);
+ }
+
+ private class ReadEndsForSimpleMarkDuplicatesWithMateCigar extends ReadEnds {
+ }
+
+ private static boolean isPairedAndBothMapped(final SAMRecord record) {
+ return record.getReadPairedFlag() &&
+ !record.getReadUnmappedFlag() &&
+ !record.getMateUnmappedFlag();
+
+ }
+
+ /**
+ * Main work method.
+ */
+ protected int doWork() {
+ IOUtil.assertInputsAreValid(INPUT);
+ IOUtil.assertFileIsWritable(OUTPUT);
+ IOUtil.assertFileIsWritable(METRICS_FILE);
+
+ // Open the inputs
+ final SamHeaderAndIterator headerAndIterator = openInputs();
+ final SAMFileHeader header = headerAndIterator.header;
+
+ // Create the output header
+ final SAMFileHeader outputHeader = header.clone();
+ outputHeader.setSortOrder(SAMFileHeader.SortOrder.coordinate);
+ for (final String comment : COMMENT) outputHeader.addComment(comment);
+
+ // Key: previous PG ID on a SAM Record (or null). Value: New PG ID to replace it.
+ final Map<String, String> chainedPgIds = getChainedPgIds(outputHeader);
+
+ // Open the output
+ final SAMFileWriter out = new SAMFileWriterFactory().makeSAMOrBAMWriter(outputHeader,
+ false,
+ OUTPUT);
+
+ final DuplicateSetIterator iterator = new DuplicateSetIterator(headerAndIterator.iterator,
+ headerAndIterator.header);
+
+ iterator.setScoringStrategy(this.DUPLICATE_SCORING_STRATEGY);
+
+ // progress logger!
+ final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Read");
+
+ int numDuplicates = 0;
+
+ libraryIdGenerator = new LibraryIdGenerator(headerAndIterator.header);
+
+ for (final DuplicateSet duplicateSet : new IterableAdapter<DuplicateSet>(iterator)) {
+ final SAMRecord representative = duplicateSet.getRepresentative();
+ final boolean doOpticalDuplicateTracking = (this.READ_NAME_REGEX != null) &&
+ isPairedAndBothMapped(representative) &&
+ representative.getFirstOfPairFlag();
+ final Set<String> duplicateReadEndsSeen = new HashSet<String>();
+
+ final List<ReadEnds> duplicateReadEnds = new ArrayList<ReadEnds>();
+ for (final SAMRecord record : duplicateSet.getRecords()) {
+
+ if (!record.isSecondaryOrSupplementary()) {
+ final String library = LibraryIdGenerator.getLibraryName(header, record);
+ DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library);
+ if (metrics == null) {
+ metrics = new DuplicationMetrics();
+ metrics.LIBRARY = library;
+ libraryIdGenerator.addMetricsByLibrary(library, metrics);
+ }
+
+ // First bring the simple metrics up to date
+ if (record.getReadUnmappedFlag()) {
+ ++metrics.UNMAPPED_READS;
+ } else if (!record.getReadPairedFlag() || record.getMateUnmappedFlag()) {
+ ++metrics.UNPAIRED_READS_EXAMINED;
+ } else {
+ ++metrics.READ_PAIRS_EXAMINED; // will need to be divided by 2 at the end
+ }
+
+ if (record.getDuplicateReadFlag()) {
+ // Update the duplication metrics
+ if (!record.getReadPairedFlag() || record.getMateUnmappedFlag()) {
+ ++metrics.UNPAIRED_READ_DUPLICATES;
+ } else {
+ ++metrics.READ_PAIR_DUPLICATES;// will need to be divided by 2 at the end
+ }
+ numDuplicates++;
+ }
+
+ // To track optical duplicates, store a set of locations for mapped pairs, first end only. We care about orientation relative
+ // to the first end of the pair for optical duplicate tracking, which is more stringent than PCR duplicate tracking.
+ if (doOpticalDuplicateTracking &&
+ isPairedAndBothMapped(record) &&
+ !duplicateReadEndsSeen.contains(record.getReadName())) {
+
+ final ReadEndsForSimpleMarkDuplicatesWithMateCigar readEnd = new ReadEndsForSimpleMarkDuplicatesWithMateCigar();
+ // set orientation for optical duplicates
+ if (record.getFirstOfPairFlag()) {
+ readEnd.orientationForOpticalDuplicates = ReadEnds.getOrientationByte(record.getReadNegativeStrandFlag(), record.getMateNegativeStrandFlag());
+ } else {
+ readEnd.orientationForOpticalDuplicates = ReadEnds.getOrientationByte(record.getMateNegativeStrandFlag(), record.getReadNegativeStrandFlag());
+ }
+ if (opticalDuplicateFinder.addLocationInformation(record.getReadName(), readEnd)) {
+ if (null != record.getReadGroup()) {
+ final short index = libraryIdGenerator.getLibraryId(record);
+ readEnd.setLibraryId(index);
+ }
+ }
+ duplicateReadEnds.add(readEnd);
+ duplicateReadEndsSeen.add(record.getReadName());
+ }
+ }
+
+ if (!this.REMOVE_DUPLICATES || !record.getDuplicateReadFlag()) {
+ if (PROGRAM_RECORD_ID != null) {
+ record.setAttribute(SAMTag.PG.name(), chainedPgIds.get(record.getStringAttribute(SAMTag.PG.name())));
+ }
+ out.addAlignment(record);
+ progress.record(record);
+ }
+ }
+
+ // Track the optical duplicates
+ if (this.READ_NAME_REGEX != null && 1 < duplicateReadEnds.size()) {
+ AbstractMarkDuplicatesCommandLineProgram.trackOpticalDuplicates(duplicateReadEnds, opticalDuplicateFinder, libraryIdGenerator);
+ }
+ }
+
+ // remember to close the inputs
+ iterator.close();
+
+ out.close();
+
+ if (this.READ_NAME_REGEX == null) {
+ log.warn("Skipped optical duplicate cluster discovery; library size estimation may be inaccurate!");
+ } else {
+ log.info("Found " + (this.libraryIdGenerator.getNumberOfOpticalDuplicateClusters()) + " optical duplicate clusters.");
+ }
+
+ // Log info
+ log.info("Processed " + progress.getCount() + " records");
+ log.info("Marking " + numDuplicates + " records as duplicates.");
+
+ // Write out the metrics
+ finalizeAndWriteMetrics(libraryIdGenerator);
+
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigarTest.java b/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigarTest.java
new file mode 100644
index 0000000..7a58dca
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigarTest.java
@@ -0,0 +1,44 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.SAMException;
+import org.testng.annotations.Test;
+
+/**
+ * @author nhomer
+ */
+public class SimpleMarkDuplicatesWithMateCigarTest extends AbstractMarkDuplicatesCommandLineProgramTest {
+ protected AbstractMarkDuplicatesCommandLineProgramTester getTester() {
+ return new SimpleMarkDuplicatesWithMateCigarTester();
+ }
+
+ /** We require mate cigars for this tool */
+ @Test(expectedExceptions = SAMException.class)
+ @Override
+ public void testTwoMappedPairsWithSoftClippingFirstOfPairOnlyNoMateCigar() {
+ super.testTwoMappedPairsWithSoftClippingFirstOfPairOnlyNoMateCigar();
+ }
+}
diff --git a/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigarTester.java b/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigarTester.java
new file mode 100644
index 0000000..53ef71f
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigarTester.java
@@ -0,0 +1,45 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.sam.markduplicates;
+
+import htsjdk.samtools.DuplicateScoringStrategy;
+import picard.cmdline.CommandLineProgram;
+
+/**
+ * @author nhomer
+ */
+public class SimpleMarkDuplicatesWithMateCigarTester extends AbstractMarkDuplicatesCommandLineProgramTester {
+
+ public SimpleMarkDuplicatesWithMateCigarTester() {
+ // NB: to be equivalent to MarkDuplicates we need to use SUM_OF_BASE_QUALITIES
+ super(DuplicateScoringStrategy.ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH);
+
+ addArg("MAX_RECORDS_IN_RAM=1000");
+ }
+
+ @Override
+ protected CommandLineProgram getProgram() { return new SimpleMarkDuplicatesWithMateCigar(); }
+}
+
diff --git a/src/tests/java/picard/sam/markduplicates/util/OpticalDuplicateFinderTest.java b/src/tests/java/picard/sam/markduplicates/util/OpticalDuplicateFinderTest.java
new file mode 100644
index 0000000..4ca3cd9
--- /dev/null
+++ b/src/tests/java/picard/sam/markduplicates/util/OpticalDuplicateFinderTest.java
@@ -0,0 +1,76 @@
+package picard.sam.markduplicates.util;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import org.testng.Assert;
+import picard.sam.util.ReadNameParsingUtils;
+
+/**
+ * Tests for OpticalDuplicateFinder
+ *
+ * @author Nils Homer
+ */
+public class OpticalDuplicateFinderTest {
+
+ /** Tests rapidParseInt for positive and negative numbers, as well as non-digit suffixes */
+ @Test
+ public void testRapidParseInt() {
+ final OpticalDuplicateFinder opticalDuplicateFinder = new OpticalDuplicateFinder();
+ for (int i = -100; i < 100; i++) {
+ Assert.assertEquals(ReadNameParsingUtils.rapidParseInt(Integer.toString(i)), i);
+
+ // trailing characters
+ Assert.assertEquals(ReadNameParsingUtils.rapidParseInt(Integer.toString(i)+"A"), i);
+ Assert.assertEquals(ReadNameParsingUtils.rapidParseInt(Integer.toString(i)+"ACGT"), i);
+ Assert.assertEquals(ReadNameParsingUtils.rapidParseInt(Integer.toString(i)+".1"), i);
+ }
+ }
+
+ /** Helper for testGetRapidDefaultReadNameRegexSplit */
+ private void doTestGetRapidDefaultReadNameRegexSplit(int numFields, final OpticalDuplicateFinder opticalDuplicateFinder) {
+ final int[] inputFields = new int[numFields];
+ final int[] expectedFields = new int[numFields];
+ String readName = "";
+ for (int i = 0; i < inputFields.length; i++) {
+ inputFields[i] = -1;
+ expectedFields[i] = -1;
+ if (0 < i) readName += ":";
+ readName += Integer.toString(i);
+ }
+ if (2 < numFields) expectedFields[2] = 2;
+ if (3 < numFields) expectedFields[3] = 3;
+ if (4 < numFields) expectedFields[4] = 4;
+ Assert.assertEquals(ReadNameParsingUtils.getRapidDefaultReadNameRegexSplit(readName, ':', inputFields), numFields);
+ for (int i = 0; i < inputFields.length; i++) {
+ Assert.assertEquals(inputFields[i], expectedFields[i]);
+ }
+ }
+
+ /** Tests that we split the string early, with the correct # of fields, and modified values */
+ @Test
+ public void testGetRapidDefaultReadNameRegexSplit() {
+ final OpticalDuplicateFinder opticalDuplicateFinder = new OpticalDuplicateFinder();
+ for (int i = 1; i < 10; i++) {
+ doTestGetRapidDefaultReadNameRegexSplit((i <= 5) ? i : 5, opticalDuplicateFinder);
+ }
+ }
+
+ // NB: these tests fails due to overflow in the duplicate finder test. This has been the behavior previously, so keep it for now.
+ @Test(dataProvider = "testParseReadNameDataProvider", enabled = false)
+ public void testParseReadName(final String readName, final int tile, final int x, final int y) {
+ OpticalDuplicateFinder opticalDuplicateFinder = new OpticalDuplicateFinder();
+ OpticalDuplicateFinder.PhysicalLocation loc = new ReadEndsForMarkDuplicates();
+ Assert.assertTrue(opticalDuplicateFinder.addLocationInformation(readName, loc));
+ Assert.assertEquals(loc.getTile(), tile);
+ Assert.assertEquals(loc.getX(), x);
+ Assert.assertEquals(loc.getY(), y);
+ }
+
+ @DataProvider(name = "testParseReadNameDataProvider")
+ public Object[][] testParseReadNameDataProvider() {
+ return new Object[][]{
+ {"RUNID:7:1203:2886:82292", 1203, 2886, 82292},
+ {"RUNID:7:1203:2884:16834", 1203, 2884, 16834}
+ };
+ }
+}
diff --git a/src/tests/java/picard/sam/testers/CleanSamTester.java b/src/tests/java/picard/sam/testers/CleanSamTester.java
new file mode 100644
index 0000000..4b9e637
--- /dev/null
+++ b/src/tests/java/picard/sam/testers/CleanSamTester.java
@@ -0,0 +1,65 @@
+package picard.sam.testers;
+
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordIterator;
+import htsjdk.samtools.SAMUtils;
+import htsjdk.samtools.SAMValidationError;
+import htsjdk.samtools.SamFileValidator;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.SamReaderFactory;
+import htsjdk.samtools.ValidationStringency;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.TestUtil;
+import org.testng.Assert;
+import picard.cmdline.CommandLineProgram;
+import picard.sam.CleanSam;
+
+import java.io.PrintWriter;
+import java.util.Arrays;
+
+/**
+ * This class is the extension of the SamFileTester to test CleanSam with SAM files generated on the fly.
+ */
+public class CleanSamTester extends SamFileTester {
+ private final String expectedCigar;
+
+ @Override
+ public String getCommandLineProgramName() { return CleanSam.class.getSimpleName(); }
+
+ public CleanSamTester(final String expectedCigar, final int readLength, final int defaultChromosomeLength) {
+ super(readLength, true, defaultChromosomeLength);
+ this.expectedCigar = expectedCigar;
+ }
+
+
+ protected void test() {
+ try {
+ final SamFileValidator validator = new SamFileValidator(new PrintWriter(System.out), 8000);
+
+ // Validate it has the expected cigar
+ validator.setIgnoreWarnings(true);
+ validator.setVerbose(true, 1000);
+ validator.setErrorsToIgnore(Arrays.asList(SAMValidationError.Type.MISSING_READ_GROUP));
+ SamReaderFactory factory = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.LENIENT);
+ SamReader samReader = factory.open(getOutput());
+ final SAMRecordIterator iterator = samReader.iterator();
+ while (iterator.hasNext()) {
+ final SAMRecord rec = iterator.next();
+ Assert.assertEquals(rec.getCigarString(), expectedCigar);
+ if (SAMUtils.hasMateCigar(rec)) {
+ Assert.assertEquals(SAMUtils.getMateCigarString(rec), expectedCigar);
+ }
+ }
+ CloserUtil.close(samReader);
+
+ // Run validation on the output file
+ samReader = factory.open(getOutput());
+ final boolean validated = validator.validateSamFileVerbose(samReader, null);
+ CloserUtil.close(samReader);
+
+ Assert.assertTrue(validated, "ValidateSamFile failed");
+ } finally {
+ TestUtil.recursiveDelete(getOutputDir());
+ }
+ }
+}
diff --git a/src/tests/java/picard/sam/testers/SamFileTester.java b/src/tests/java/picard/sam/testers/SamFileTester.java
new file mode 100644
index 0000000..5a2b1d4
--- /dev/null
+++ b/src/tests/java/picard/sam/testers/SamFileTester.java
@@ -0,0 +1,307 @@
+package picard.sam.testers;
+
+import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMFileWriter;
+import htsjdk.samtools.SAMFileWriterFactory;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMRecordSetBuilder;
+import htsjdk.samtools.SamReader;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.samtools.util.CloseableIterator;
+import org.testng.Assert;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Abstract class for doing basic on the fly SAM file testing.
+ */
+public abstract class SamFileTester extends CommandLineProgramTest {
+
+ public static final String TEST_DATA_BASE_DIR = "testdata/picard/sam/";
+ private final SAMRecordSetBuilder samRecordSetBuilder;
+ protected final Map<String, Boolean> duplicateFlags = new HashMap<String, Boolean>();
+ private File outputDir;
+ private File output;
+ private int readNameCounter = 0;
+ private boolean noMateCigars = false;
+ private boolean deleteOnExit = true;
+ private final ArrayList<String> args = new ArrayList<String>();
+
+ public SamFileTester(final int readLength, final boolean deleteOnExit, final int defaultChromosomeLength, final ScoringStrategy duplicateScoringStrategy) {
+ this.deleteOnExit = deleteOnExit;
+ this.samRecordSetBuilder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate, true, defaultChromosomeLength, duplicateScoringStrategy);
+ samRecordSetBuilder.setReadLength(readLength);
+ setOutputDir();
+ }
+
+ public SamFileTester(final int readLength, final boolean deleteOnExit, final int defaultChromosomeLength) {
+ this(readLength, deleteOnExit, defaultChromosomeLength, SAMRecordSetBuilder.DEFAULT_DUPLICATE_SCORING_STRATEGY);
+ }
+
+ public SamFileTester(final int readLength, final boolean deleteOnExit) {
+ this(readLength, deleteOnExit, SAMRecordSetBuilder.DEFAULT_CHROMOSOME_LENGTH);
+ }
+
+ public void setHeader(final SAMFileHeader header) {
+ this.samRecordSetBuilder.setHeader(header);
+ }
+
+ public void addRecord(final SAMRecord record) {
+ this.duplicateFlags.put(samRecordToDuplicatesFlagsKey(record), record.getDuplicateReadFlag());
+ this.samRecordSetBuilder.addRecord(record);
+ }
+
+ public int getNumberOfRecords() {
+ return this.samRecordSetBuilder.size();
+ }
+
+ public CloseableIterator<SAMRecord> getRecordIterator() {
+ return this.samRecordSetBuilder.iterator();
+ }
+
+ public File getOutput() {
+ return output;
+ }
+
+ public void setOutput(final File output) {
+ this.output = output;
+ }
+
+
+ public void addArg(final String arg) {
+ args.add(arg);
+ }
+
+ public ArrayList<String> getArgs() {
+ return args;
+ }
+
+ public File getOutputDir() {
+ return outputDir;
+ }
+
+ private void setOutputDir() {
+ this.outputDir = IOUtil.createTempDir(this.getClass().getSimpleName() + ".", ".tmp");
+ if (deleteOnExit) {
+ outputDir.deleteOnExit();
+ }
+ }
+
+ public void setNoMateCigars(final boolean value) {
+ this.noMateCigars = value;
+ }
+
+ public boolean getDeleteOnExit() {
+ return deleteOnExit;
+ }
+
+ protected String samRecordToDuplicatesFlagsKey(final SAMRecord record) {
+ String readName = record.getReadName()
+ + "-"
+ + record.getReadPairedFlag()
+ + "-";
+ if (record.getReadPairedFlag()) {
+ readName += record.getFirstOfPairFlag()
+ + "-"
+ + record.getSecondOfPairFlag();
+ } else {
+ readName += "false-false";
+ }
+ return readName;
+ }
+
+ // Below are a bunch of utility methods for adding records to the SAMRecordSetBuilder
+ public void addUnmappedFragment(final int referenceSequenceIndex,
+ final int defaultQualityScore) {
+ addFragment(referenceSequenceIndex, -1, true, false, null, null, defaultQualityScore, false);
+ }
+
+ public void addUnmappedFragment(final int referenceSequenceIndex,
+ final String qualityString) {
+ addFragment(referenceSequenceIndex, -1, true, false, null, qualityString, -1, false);
+ }
+
+ public void addUnmappedPair(final int referenceSequenceIndex,
+ final int defaultQualityScore) {
+ addMatePair(referenceSequenceIndex, -1, -1, true, true, false, false, null, null, false, false, false, false, false, defaultQualityScore);
+ }
+
+ public void addMappedFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean isDuplicate,
+ final int defaultQualityScore) {
+ addFragment(referenceSequenceIndex, alignmentStart, false, isDuplicate, null, null, defaultQualityScore, false);
+ }
+
+ public void addMappedFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean isDuplicate,
+ final int defaultQualityScore, final boolean isSecondary) {
+ addFragment(referenceSequenceIndex, alignmentStart, false, isDuplicate, null, null, defaultQualityScore, isSecondary);
+ }
+
+ public void addMappedFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean isDuplicate, final String cigar,
+ final int defaultQualityScore) {
+ addFragment(referenceSequenceIndex, alignmentStart, false, isDuplicate, cigar, null, defaultQualityScore, false);
+ }
+
+ public void addMappedFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean isDuplicate, final String cigar,
+ final String qualityString,
+ final int defaultQualityScore) {
+ addFragment(referenceSequenceIndex, alignmentStart, false, isDuplicate, cigar, qualityString, defaultQualityScore, false);
+ }
+
+ public void addMappedPair(final int referenceSequenceIndex,
+ final int alignmentStart1,
+ final int alignmentStart2,
+ final boolean isDuplicate1,
+ final boolean isDuplicate2,
+ final int defaultQualityScore) {
+ addMappedPair(referenceSequenceIndex, alignmentStart1, alignmentStart2, isDuplicate1, isDuplicate2, null, null,
+ false, defaultQualityScore);
+ }
+
+ public void addMappedPair(final int referenceSequenceIndex,
+ final int alignmentStart1,
+ final int alignmentStart2,
+ final boolean isDuplicate1,
+ final boolean isDuplicate2,
+ final String cigar1,
+ final String cigar2,
+ final boolean firstOnly,
+ final int defaultQualityScore) {
+ addMappedPair(referenceSequenceIndex, alignmentStart1, alignmentStart2, isDuplicate1, isDuplicate2, cigar1,
+ cigar2, false, true, firstOnly, defaultQualityScore);
+ }
+
+ public void addMappedPair(final int referenceSequenceIndex,
+ final int alignmentStart1,
+ final int alignmentStart2,
+ final boolean isDuplicate1,
+ final boolean isDuplicate2,
+ final String cigar1,
+ final String cigar2,
+ final boolean strand1,
+ final boolean strand2,
+ final boolean firstOnly,
+ final int defaultQualityScore) {
+ addMatePair(referenceSequenceIndex, alignmentStart1, alignmentStart2, false, false, isDuplicate1, isDuplicate2, cigar1, cigar2,
+ strand1, strand2, firstOnly, false, false, defaultQualityScore);
+ }
+
+ public void addMatePair(final int referenceSequenceIndex,
+ final int alignmentStart1,
+ final int alignmentStart2,
+ final boolean record1Unmapped,
+ final boolean record2Unmapped,
+ final boolean isDuplicate1,
+ final boolean isDuplicate2,
+ final String cigar1,
+ final String cigar2,
+ final boolean strand1,
+ final boolean strand2,
+ final boolean firstOnly,
+ final boolean record1NonPrimary,
+ final boolean record2NonPrimary,
+ final int defaultQualityScore) {
+ addMatePair("READ" + readNameCounter++, referenceSequenceIndex, alignmentStart1, alignmentStart2, record1Unmapped, record2Unmapped,
+ isDuplicate1, isDuplicate2, cigar1, cigar2, strand1, strand2, firstOnly, record1NonPrimary, record2NonPrimary,
+ defaultQualityScore);
+ }
+
+ private void addFragment(final int referenceSequenceIndex, final int alignmentStart, final boolean recordUnmapped, final boolean isDuplicate, final String cigar,
+ final String qualityString, final int defaultQualityScore, final boolean isSecondary) {
+ final SAMRecord record = samRecordSetBuilder.addFrag("READ" + readNameCounter++, referenceSequenceIndex, alignmentStart, false,
+ recordUnmapped, cigar, qualityString, defaultQualityScore, isSecondary);
+
+ this.duplicateFlags.put(samRecordToDuplicatesFlagsKey(record), isDuplicate);
+ }
+
+ public void addMatePair(final String readName,
+ final int referenceSequenceIndex1,
+ final int referenceSequenceIndex2,
+ final int alignmentStart1,
+ final int alignmentStart2,
+ final boolean record1Unmapped,
+ final boolean record2Unmapped,
+ final boolean isDuplicate1,
+ final boolean isDuplicate2,
+ final String cigar1,
+ final String cigar2,
+ final boolean strand1,
+ final boolean strand2,
+ final boolean firstOnly,
+ final boolean record1NonPrimary,
+ final boolean record2NonPrimary,
+ final int defaultQuality) {
+ final List<SAMRecord> samRecordList = samRecordSetBuilder.addPair(readName, referenceSequenceIndex1, referenceSequenceIndex2, alignmentStart1, alignmentStart2,
+ record1Unmapped, record2Unmapped, cigar1, cigar2, strand1, strand2, record1NonPrimary, record2NonPrimary, defaultQuality);
+
+ final SAMRecord record1 = samRecordList.get(0);
+ final SAMRecord record2 = samRecordList.get(1);
+
+ if (this.noMateCigars) {
+ record1.setAttribute("MC", null);
+ record2.setAttribute("MC", null);
+ }
+
+ if (firstOnly) {
+ samRecordSetBuilder.getRecords().remove(record2);
+ }
+
+ this.duplicateFlags.put(samRecordToDuplicatesFlagsKey(record1), isDuplicate1);
+ this.duplicateFlags.put(samRecordToDuplicatesFlagsKey(record2), isDuplicate2);
+ }
+
+ public void addMatePair(final String readName,
+ final int referenceSequenceIndex,
+ final int alignmentStart1,
+ final int alignmentStart2,
+ final boolean record1Unmapped,
+ final boolean record2Unmapped,
+ final boolean isDuplicate1,
+ final boolean isDuplicate2,
+ final String cigar1,
+ final String cigar2,
+ final boolean strand1,
+ final boolean strand2,
+ final boolean firstOnly,
+ final boolean record1NonPrimary,
+ final boolean record2NonPrimary,
+ final int defaultQuality) {
+ addMatePair(readName, referenceSequenceIndex,referenceSequenceIndex, alignmentStart1, alignmentStart2, record1Unmapped, record2Unmapped,
+ isDuplicate1, isDuplicate2, cigar1, cigar2, strand1, strand2, firstOnly, record1NonPrimary, record2NonPrimary, defaultQuality);
+ }
+
+ protected abstract void test();
+
+ /**
+ * Sets up the basic command line arguments for input and output and runs instanceMain.
+ */
+ public void runTest() {
+ final File input = createInputFile();
+
+ output = new File(outputDir, "output.sam");
+ args.add("INPUT=" + input.getAbsoluteFile());
+ args.add("OUTPUT=" + output.getAbsoluteFile());
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ test();
+ }
+
+ private File createInputFile() {
+ // Create the input file
+ final File input = new File(outputDir, "input.sam");
+ final SAMFileWriter writer = new SAMFileWriterFactory().makeSAMOrBAMWriter(samRecordSetBuilder.getHeader(), true, input);
+ for (final SAMRecord record : samRecordSetBuilder.getRecords()) {
+ writer.addAlignment(record);
+ }
+ writer.close();
+ return input;
+ }
+
+ public SamReader getInput() {
+ return samRecordSetBuilder.getSamReader();
+ }
+}
\ No newline at end of file
diff --git a/src/tests/java/picard/sam/testers/ValidateSamTester.java b/src/tests/java/picard/sam/testers/ValidateSamTester.java
new file mode 100644
index 0000000..abb4369
--- /dev/null
+++ b/src/tests/java/picard/sam/testers/ValidateSamTester.java
@@ -0,0 +1,22 @@
+package picard.sam.testers;
+
+import org.testng.Assert;
+import picard.cmdline.CommandLineProgramTest;
+import picard.sam.ValidateSamFile;
+
+import java.io.File;
+
+/**
+ * Created by ggrant on 6/12/14.
+ */
+public class ValidateSamTester extends CommandLineProgramTest {
+ public String getCommandLineProgramName() {
+ return ValidateSamFile.class.getSimpleName();
+ }
+
+ public void assertSamValid(final File samFile) {
+ final int validateExitStatus = runPicardCommandLine(new String[]{"I=" + samFile.getAbsolutePath()});
+ Assert.assertEquals(validateExitStatus, 0);
+ }
+
+}
diff --git a/src/tests/java/picard/util/BedToIntervalListTest.java b/src/tests/java/picard/util/BedToIntervalListTest.java
new file mode 100644
index 0000000..7a825bf
--- /dev/null
+++ b/src/tests/java/picard/util/BedToIntervalListTest.java
@@ -0,0 +1,103 @@
+package picard.util;
+
+import htsjdk.samtools.SAMException;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author nhomer
+ */
+public class BedToIntervalListTest {
+
+ private final String TEST_DATA_DIR = "testdata/picard/util/BedToIntervalListTest";
+
+ private void doTest(final String inputBed, final String header) throws IOException, SAMException {
+ final File outputFile = File.createTempFile("bed_to_interval_list_test.", ".interval_list");
+ outputFile.deleteOnExit();
+ final BedToIntervalList program = new BedToIntervalList();
+ final File inputBedFile = new File(TEST_DATA_DIR, inputBed);
+ program.INPUT = inputBedFile;
+ program.SEQUENCE_DICTIONARY = new File(TEST_DATA_DIR, header);
+ program.OUTPUT = outputFile;
+ program.doWork();
+
+ // Assert they are equal
+ IOUtil.assertFilesEqual(new File(inputBedFile.getAbsolutePath() + ".interval_list"), outputFile);
+ }
+
+
+ @Test(dataProvider = "testBedToIntervalListDataProvider")
+ public void testBedToIntervalList(final String inputBed) throws IOException {
+ doTest(inputBed, "header.sam");
+ }
+
+ // test a fixed bed file using different dictionaries
+ @Test(dataProvider = "testBedToIntervalListSequenceDictionaryDataProvider")
+ public void testBedToIntervalListSequenceDictionary(final String dictionary) throws IOException {
+ doTest("seq_dict_test.bed", dictionary);
+ }
+
+ // test for back dictionaries - we expect these to throw exceptions
+ @Test(dataProvider = "testBedToIntervalListSequenceDictionaryBadDataProvider",
+ expectedExceptions = {SAMException.class, PicardException.class})
+ public void testBedToIntervalListBadSequenceDictionary(final String dictionary) throws IOException {
+ doTest("seq_dict_test.bed", dictionary);
+ }
+
+ @Test(dataProvider = "testBedToIntervalListOutOfBoundsDataProvider", expectedExceptions = PicardException.class)
+ public void testBedToIntervalListOutOfBounds(final String inputBed) throws IOException {
+ doTest(inputBed, "header.sam");
+ }
+
+ @DataProvider
+ public Object[][] testBedToIntervalListDataProvider() {
+ return new Object[][]{
+ {"simple.bed"},
+ {"overlapping.bed"},
+ {"extended.bed"},
+ {"one_base_interval.bed"},
+ {"zero_base_interval.bed"}
+ };
+ }
+
+ // test for each of the file categories supported by SAMSequenceDictionaryExtractor
+ @DataProvider
+ public Object[][] testBedToIntervalListSequenceDictionaryDataProvider() {
+ return new Object[][]{
+ {"seq_dict_test.dictionary.interval_list"},
+ {"seq_dict_test.dictionary.fasta"},
+ {"seq_dict_test.dictionary.dict"},
+ {"seq_dict_test.dictionary.sam"},
+ {"seq_dict_test.dictionary.vcf"}
+ };
+ }
+
+ @DataProvider
+ public Object[][] testBedToIntervalListSequenceDictionaryBadDataProvider() {
+ return new Object[][]{
+ // a file that does not represent a dictionary
+ {"seq_dict_test.dictionary.bad"},
+ // a file that is a valid dictionary, but missing contigs in the dictionary
+ {"seq_dict_test.dictionary.bad.vcf"}
+ };
+ }
+
+ @DataProvider
+ public Object[][] testBedToIntervalListOutOfBoundsDataProvider() {
+ return new Object[][]{
+ {"end_after_chr.bed"},
+ {"end_before_chr.bed"},
+ {"missing_chr.bed"},
+ {"start_after_chr.bed"},
+ {"start_before_chr.bed"},
+ {"off_by_one_interval.bed"}
+ };
+ }
+}
diff --git a/src/tests/java/picard/util/ClippingUtilityTest.java b/src/tests/java/picard/util/ClippingUtilityTest.java
new file mode 100644
index 0000000..293303d
--- /dev/null
+++ b/src/tests/java/picard/util/ClippingUtilityTest.java
@@ -0,0 +1,380 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.ReservedTagConstants;
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.StringUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.util.IlluminaUtil.IlluminaAdapterPair;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ */
+public class ClippingUtilityTest {
+
+ @Test(dataProvider="clipTestData")
+ public void testBasicClip(final String testName, final String read, final String clip, final int minMatch, final double errRate, final int expected) {
+ final byte[] r = (read == null) ? null : StringUtil.stringToBytes(read);
+ final byte[] c = (clip == null) ? null : StringUtil.stringToBytes(clip);
+
+ final int result = ClippingUtility.findIndexOfClipSequence(r, c, minMatch, errRate);
+ Assert.assertEquals(result, expected, testName);
+
+ }
+
+
+
+ @Test(dataProvider = "clipTestData")
+ public void testSingleEndSamRecordClip(final String testName, final String read, final String clip, final int minMatch,
+ final double errRate, final int expected) {
+ if (read == null) return; // Silly case
+
+ final SingleEndAdapter adapter = new SingleEndAdapter(testName, clip);
+
+ for (final boolean reverse : new boolean[]{false, true}) {
+ final SAMRecord rec = new SAMRecord(null);
+ if (reverse) {
+ rec.setReadString(SequenceUtil.reverseComplement(read));
+ rec.setReadNegativeStrandFlag(true);
+ } else {
+ rec.setReadString(read);
+ }
+
+ final AdapterPair matchedAdapter = ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch, errRate, adapter);
+ if (expected == -1) {
+ Assert.assertNull(matchedAdapter, testName);
+ Assert.assertNull(rec.getAttribute(ReservedTagConstants.XT), testName);
+ } else {
+ Assert.assertEquals(matchedAdapter, adapter, testName);
+ Assert.assertEquals(rec.getAttribute(ReservedTagConstants.XT), expected + 1, testName);
+
+ // Test that if minMatch is decreased, it still matches
+ for (int i = 1; i < minMatch - 3; ++i) {
+ Assert.assertEquals(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch - i, errRate, adapter), adapter, testName);
+ }
+
+ // Skip this test for high error rates, because almost anything will match.
+ if (errRate < 0.5) {
+ // Test that if minMatch is increased, it now fails to match
+ Assert.assertNull(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch + 1, errRate, adapter), testName);
+
+ // Test that if errRate is increased, it still matches
+ Assert.assertNotNull(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch, errRate + 0.1, adapter), testName);
+ }
+
+ // Very low error threshold should cause match failure
+ Assert.assertNull(ClippingUtility.adapterTrimIlluminaSingleRead(rec, minMatch, 0.01, adapter), testName);
+ }
+ }
+
+ }
+
+ @Test(dataProvider="clipPairedTestData")
+ public void testPairedEndClip(final String testName, final String read1, final String read2, final AdapterPair expected) {
+
+ final SAMRecord rec1 = new SAMRecord(new SAMFileHeader());
+ rec1.setReadString(read1);
+ rec1.setFirstOfPairFlag(true);
+ final SAMRecord rec2 = new SAMRecord(new SAMFileHeader());
+ rec2.setReadString(read2);
+ rec2.setSecondOfPairFlag(true);
+
+ final AdapterPair result = ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2,
+ IlluminaAdapterPair.INDEXED, IlluminaAdapterPair.PAIRED_END);
+ if (result != null) {
+ Assert.assertEquals(result.getName(), expected.getName(), testName);
+ }
+ else {
+ Assert.assertNull(expected, testName);
+ }
+ }
+
+ @Test
+ public void testOneSidedMatchSupersededByTwoSidedMatch() {
+ final int readLength = 36;
+ final int adapterLength = 30;
+ final String read1 = patchAdapterSubsequenceIntoRead(makeBogusReadString(readLength), IlluminaAdapterPair.SINGLE_END.get3PrimeAdapterInReadOrder(), adapterLength);
+ final String read2 = patchAdapterSubsequenceIntoRead(makeBogusReadString(readLength), IlluminaAdapterPair.SINGLE_END.get5PrimeAdapterInReadOrder(), adapterLength);
+ final SAMRecord rec1 = new SAMRecord(null); rec1.setReadString(read1);
+ final SAMRecord rec2 = new SAMRecord(null); rec2.setReadString(read2);
+ AdapterPair result = ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2, adapterLength - 2, 0.1,
+ IlluminaAdapterPair.PAIRED_END, IlluminaAdapterPair.SINGLE_END);
+ Assert.assertEquals(result, IlluminaAdapterPair.SINGLE_END);
+
+ // Confirm that without SINGLE_END, PAIRED_END would one-sided match, if match length is short enough.
+ result = ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2, adapterLength/2, 0.1, IlluminaAdapterPair.PAIRED_END);
+ Assert.assertEquals(result, IlluminaAdapterPair.PAIRED_END);
+
+ // However, without shorter match length, one-sided match will fail.
+ Assert.assertNull(ClippingUtility.adapterTrimIlluminaPairedReads(rec1, rec2, adapterLength - 2, 0.1, IlluminaAdapterPair.PAIRED_END));
+ }
+
+ @Test(dataProvider = "testAdapterInAllReadPositionsDataProvider")
+ public void testAdapterInAllReadPositions(final int readLength) {
+ final int minAdapterLength = 6;
+ for (final IlluminaAdapterPair adapterPair : IlluminaAdapterPair.values()) {
+ final AdapterMarker marker = new AdapterMarker(adapterPair);
+ for (int adapterPosition = 0; adapterPosition < readLength; ++adapterPosition) {
+ final SAMRecord rec = createSamRecordWithAdapterSequence(readLength, adapterPair, adapterPosition);
+ final AdapterPair matchedAdapter = ClippingUtility.adapterTrimIlluminaSingleRead(rec, minAdapterLength, 0.1, adapterPair);
+ final Object xt = rec.getAttribute(ReservedTagConstants.XT);
+
+ rec.setAttribute(ReservedTagConstants.XT, null);
+ final AdapterPair truncatedAdapter = marker.adapterTrimIlluminaSingleRead(rec, minAdapterLength, 0.1);
+ final Object xtFromMarker = rec.getAttribute(ReservedTagConstants.XT);
+
+ if (adapterPosition <= readLength - minAdapterLength) {
+ Assert.assertEquals(matchedAdapter, adapterPair, "Failed at position " + adapterPosition);
+ Assert.assertEquals((Integer)xt, Integer.valueOf(adapterPosition + 1));
+ Assert.assertNotNull(truncatedAdapter);
+ Assert.assertEquals((Integer)xtFromMarker, Integer.valueOf(adapterPosition + 1));
+ } else {
+ Assert.assertNull(matchedAdapter);
+ Assert.assertNull(xt);
+ Assert.assertNull(truncatedAdapter);
+ Assert.assertNull(xtFromMarker);
+ }
+ }
+ }
+ }
+
+ private SAMRecord createSamRecordWithAdapterSequence(final int readLength, final IlluminaAdapterPair adapterPair, final int adapterPosition) {
+ final String adapterString = adapterPair.get3PrimeAdapterInReadOrder();
+ final int replacementLength = Math.min(adapterString.length(), readLength - adapterPosition);
+ final String adapterSubstring = adapterString.substring(0, replacementLength);
+ final String readBases = replaceSubstring(makeBogusReadString(readLength), adapterSubstring, adapterPosition, adapterSubstring.length());
+ final SAMRecord rec = new SAMRecord(null);
+ rec.setReadString(readBases);
+ return rec;
+ }
+
+ @DataProvider(name="testAdapterInAllReadPositionsDataProvider")
+ public Object[][] testAdapterInAllReadPositionsDataProvider() {
+ return new Object[][]{{100}, {36}};
+ }
+
+ @DataProvider(name="clipTestData")
+ public Object[][] getClipTestData() {
+ final String FORWARD = IlluminaAdapterPair.PAIRED_END.get3PrimeAdapter();
+ final String SE_FORWARD = IlluminaAdapterPair.SINGLE_END.get3PrimeAdapter();
+ final String REVERSE = IlluminaAdapterPair.PAIRED_END.get5PrimeAdapterInReadOrder();
+ return new Object[][] {
+ {"Simple test 1", "AAAAACCCCCAGATCGGAAGAGCA", "AGATCGGAAGAGCG", 14, 0.15, 10},
+ {"Simple test 2", "AAAAACCCCCGGGGGAGATCGGAAGAGCA", "AGATCGGAAGAGCG", 14, 0.15, 15},
+ {"No adapter", "AAAAACCCCCGGGGGTTTTT", "AGATCGGAAGAGCG", 6, 0.15, -1},
+ {"Partial adapter", "AAAAACCCCCTGATCGGAA", "AGATCGGAAGAGCG", 9, 0.15, 10},
+// no longer support clips in middle of read
+// {"Adapter+Primer", "AAAAACCCCCAGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG", "AGATCGGAAGAGCG", 6, 0.15, 10},
+ {"No sequence", null, "AGATCGGAAGAGCG", 6, 0.15, -1},
+ {"Read too short", "AGATCGGAAG", "AGATCGGAAGAGCG", 11, 0.15, -1},
+ {"All No Calls", "AAACCCNNNNNNNNNNNNNNNNNNNN", "AGATCGGAAGAGCG", 6, 0.15, -1},
+ {"From Test Data1", "CGGCATTCCTGCTGAACCGAGATCGGAAGAGCGTCGTGTAGGGAAAGGGGGTGGATCTCGGTGGGCGGCGTGTTGT", REVERSE, 57, 0.15, 19},
+ {"From Test Data2a", "CGGAAGAGCGGTTCAGCAGGAATGCCGAGATCCGAA", REVERSE, 9, 0.14, 27}, // XT:i:28
+ {"From Test Data2b", "CGGAAGAGCGGTTCAGCAGGAATGCCGAGATCGGAA", REVERSE, 10, 0.14, -1}, // only matches 9
+ {"From PE Test Data1", "CGGTTCAGCAGGAATGCCGAGATCGGAAGAGCGGGT", FORWARD, 17, 0.14, 19},
+ {"From PE Test Data2", "CGGTTCAGCAGGAATGCCGAGATCGGAAGAGCGGGT", REVERSE, 5, 0.14, -1},
+ new Object[] {"From Test 8-clipped", "TGGGGTGGTTATTGTTGATTTTTGTTTGTGTGTTAGGTTGTTTGTGTTAGTTTTTTATTTTATTTTCGAGATCGAA", FORWARD, 8, 0.14, 68},
+ {"50% can be bad", "AAAAACCCCCAGGTCGGAAGAGCG", "AGATCGGAAGAGCG", 5, 0.5, 18}, // 18?
+
+ {"From 30E54AAXX.5.a", "ATATCTGAAGATCTCGTATGCCGTCTTCTGCTTG", "AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG", 34, 0.14, 0}, // 0!? From KT test case
+ {"From 30E54AAXX.5.b", "ATATCTGAAGATCTCGTATGCCGTCTTCTGCTTG", SE_FORWARD, 34, 0.14, 0}, // 1?? From KT test case
+ };
+ }
+
+ @DataProvider(name="clipPairedTestData")
+ public Object[][] getClipPairedTestData() {
+ return new Object[][] {
+ {"Basic positive paired test matching", "CTACTGGCGCTGAAACTGAGCAGCCAAGCAGATCGG", "GCTTGGCTGCTCAGTTTCAGCGCCAGTAGAGATCGG", IlluminaAdapterPair.INDEXED},
+ // This matches on first end and matches at higher stringency on that one side
+ {"Basic positive first end one-sided test matching", "CTACTGGCGCTGAAAAGATCGGAAGAGCGGTTCAGC", "AAAAAATTTTTTCCCCCCGGGGGGAAAAAATTTTTT", IlluminaAdapterPair.PAIRED_END},
+ // This matches on second end and matches at higher stringency on that one side
+ {"Basic positive second end one-sided test matching", "AAAAAATTTTTTCCCCCCGGGGGGAAAAAATTTTTT", "AAAAAATTTTTTCCCAGATCGGAAGAGCGTCGTGTA", IlluminaAdapterPair.PAIRED_END},
+ // This matches on one side and does not match at higher stringency on that one side
+ {"Basic negative one-sided test matching", "GGCGCTGAAACTACTGGCGCTGAAAAGATCGGAAGA", "AAAAAATTTTTTCCCCCCGGGGGGAAAAAATTTTTT", null},
+ // These match but at different positions. No clip should be done.
+ {"Mis-match paired test matching", "CTACTGGCGCTGAAACTGAGCAGCCAAGCAGATCGG", "AGCTTGGCTGCTCAGTTTCAGCGCCAGTAGAGATCG", null},
+ };
+ }
+
+ private static class SingleEndAdapter implements AdapterPair {
+ private final String name;
+ private final String threePrimeAdapter;
+
+ private SingleEndAdapter(final String name, final String threePrimeAdapter) {
+ this.name = name;
+ this.threePrimeAdapter = threePrimeAdapter;
+ }
+
+ @Override
+ public String get3PrimeAdapter() {
+ return threePrimeAdapter;
+ }
+
+ @Override
+ public String get3PrimeAdapterInReadOrder() {
+ return threePrimeAdapter;
+ }
+
+ @Override
+ public byte[] get3PrimeAdapterBytes() {
+ return StringUtil.stringToBytes(threePrimeAdapter);
+ }
+
+ @Override
+ public byte[] get3PrimeAdapterBytesInReadOrder() {
+ return get3PrimeAdapterBytes();
+ }
+
+ @Override
+ public String get5PrimeAdapter() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String get5PrimeAdapterInReadOrder() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public byte[] get5PrimeAdapterBytes() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public byte[] get5PrimeAdapterBytesInReadOrder() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ }
+
+ /**
+ * @return A String of given length with 6 As, 6 Cs, 6 Gs, etc. until length is reached.
+ */
+ private static String makeBogusReadString(final int len) {
+ final StringBuilder builder = new StringBuilder(len);
+ final Map<Character, Character> nextChar = new HashMap<Character, Character>();
+ nextChar.put('A', 'C');
+ nextChar.put('C', 'G');
+ nextChar.put('G', 'T');
+ nextChar.put('T', 'A');
+ for (char curChar = 'A'; true; curChar = nextChar.get(curChar)) {
+ for (int i = 0; i < 6; ++i) {
+ if (builder.length() == len) return builder.toString();
+ builder.append(curChar);
+ }
+ }
+ }
+
+ private static String patchAdapterSubsequenceIntoRead(final String read, final String adapter, final int length) {
+ return replaceSubstring(read, adapter.substring(0, length), read.length() - length, read.length());
+ }
+
+ private static String replaceSubstring(final String s, final String replacement, final int position, final int charsToReplace) {
+ final StringBuilder sb = new StringBuilder(s);
+ sb.replace(position, position + charsToReplace, replacement);
+ return sb.toString();
+ }
+
+
+ @Test
+ public void testAdapterTruncation() {
+ final AdapterMarker marker = new AdapterMarker(30,
+ IlluminaUtil.IlluminaAdapterPair.INDEXED,
+ IlluminaUtil.IlluminaAdapterPair.DUAL_INDEXED,
+ IlluminaUtil.IlluminaAdapterPair.NEXTERA_V2,
+ IlluminaUtil.IlluminaAdapterPair.FLUIDIGM);
+ // INDEXED and DUAL_INDEXED should collapse at length 30
+ Assert.assertTrue(marker.getAdapters().length < 4, "Did not collapse: " + marker.getAdapters().length);
+ }
+
+ /**
+ * Confirm that after the requisite number of sightings of adapter, the list is trimmed
+ */
+ @Test(dataProvider = "testAdapterListTruncationDataProvider")
+ public void testAdapterListTruncation(final IlluminaAdapterPair adapterPair) {
+ final int thresholdForTruncatingAdapterList = 20;
+ final int readLength = 100;
+
+ // Throw all the adapter pairs into the marker. There is some danger in doing this because
+ // IlluminaAdapterPair.ALTERNATIVE_SINGLE_END has 3' that is a substring of some of the others. In the enum it appears
+ // last so it is tested last.
+ final AdapterMarker marker =
+ new AdapterMarker(IlluminaUtil.IlluminaAdapterPair.values()).
+ setThresholdForSelectingAdaptersToKeep(thresholdForTruncatingAdapterList);
+ int adapterPosition = 1;
+
+ Assert.assertTrue(adapterPosition + thresholdForTruncatingAdapterList < readLength - ClippingUtility.MIN_MATCH_BASES,
+ "Test is configured improperly -- eventually will not be enough adapter bases in read.");
+
+ int originalNumberOfAdapters = marker.getAdapters().length;
+ for (int i = 0; i < thresholdForTruncatingAdapterList; ++i) {
+
+ // First, a read with no adapter in it.
+ SAMRecord rec = new SAMRecord(null);
+ rec.setReadString(makeBogusReadString(readLength));
+ AdapterPair matchedPair = marker.adapterTrimIlluminaSingleRead(rec);
+ Assert.assertNull(matchedPair);
+ Assert.assertNull(rec.getAttribute(ReservedTagConstants.XT));
+
+ // Adapter list should not be truncated yet
+ Assert.assertEquals(marker.getAdapters().length, originalNumberOfAdapters);
+
+ // Then, a record with some adapter sequence in it.
+ rec = createSamRecordWithAdapterSequence(readLength, adapterPair, adapterPosition);
+ matchedPair = marker.adapterTrimIlluminaSingleRead(rec);
+ Assert.assertNotNull(matchedPair);
+ Assert.assertEquals(rec.getIntegerAttribute(ReservedTagConstants.XT).intValue(), adapterPosition + 1,
+ rec.getReadString() + " matched " + matchedPair);
+
+ // Put adapter in different place next time.
+ adapterPosition++;
+ }
+
+ Assert.assertEquals(marker.getAdapters().length, 1, "Did not truncate adapter list to 1 element");
+ Assert.assertTrue(marker.getAdapters()[0].getName().contains(adapterPair.getName()),
+ String.format("Expected '%s' to contain '%s'", marker.getAdapters()[0].getName(), adapterPair.getName()));
+ }
+
+ @DataProvider(name="testAdapterListTruncationDataProvider")
+ public Object[][] testAdapterListTruncationDataProvider() {
+ Object[][] ret = new Object[IlluminaAdapterPair.values().length][];
+ for (int i = 0; i < ret.length; ++i) {
+ ret[i] = new Object[]{IlluminaAdapterPair.values()[i]};
+ }
+ return ret;
+ }
+}
diff --git a/src/tests/java/picard/util/DelimitedTextFileWithHeaderIteratorTest.java b/src/tests/java/picard/util/DelimitedTextFileWithHeaderIteratorTest.java
new file mode 100644
index 0000000..21803e2
--- /dev/null
+++ b/src/tests/java/picard/util/DelimitedTextFileWithHeaderIteratorTest.java
@@ -0,0 +1,96 @@
+package picard.util;
+
+import htsjdk.samtools.util.IterableAdapter;
+import htsjdk.samtools.util.StringUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+
+public class DelimitedTextFileWithHeaderIteratorTest {
+ @Test
+ public void basicParsingTest() throws Exception {
+ final String[][] data = new String[][] {
+ new String[] {"FOO", "BAR", "SPLAT"},
+ new String[] {"1", "2", "3"},
+ new String[] {"a", "b", "c"},
+ new String[] {"foo", "bar", "splat"},
+ };
+
+ final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
+ tmp.deleteOnExit();
+ final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
+
+ for (final String[] fields : data) {
+ out.write(StringUtil.join("\t", fields));
+ out.newLine();
+ }
+
+ out.close();
+
+ final TabbedInputParser parser = new TabbedInputParser(false, tmp);
+ final DelimitedTextFileWithHeaderIterator fileIterator = new DelimitedTextFileWithHeaderIterator(parser);
+ for (final String col : data[0]) Assert.assertTrue(fileIterator.hasColumn(col));
+
+ int i=1;
+ for (final DelimitedTextFileWithHeaderIterator.Row row : new IterableAdapter<DelimitedTextFileWithHeaderIterator.Row>(fileIterator)) {
+ final String[] expected = data[i++];
+ Assert.assertEquals(row.getFields(), expected);
+ Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
+ }
+
+ Assert.assertEquals(i, data.length);
+ }
+
+ @Test
+ public void parsingWithColumnHeadersTest() throws Exception {
+ final String[] headers = {"STRING", "STRING2", "NUMBER"};
+
+ final String[][] data = new String[][] {
+ headers,
+ new String[] {"1", "2", "3"},
+ new String[] {"a", "b", "2"},
+ new String[] {"foo", "bar", ""},
+ };
+
+
+ final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
+ tmp.deleteOnExit();
+ final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
+
+ for (final String[] fields : data) {
+ out.write(StringUtil.join("\t", fields));
+ out.newLine();
+ }
+
+ out.close();
+
+ final TabbedInputParser parser = new TabbedInputParser(false, tmp);
+ final DelimitedTextFileWithHeaderIterator fileIterator = new DelimitedTextFileWithHeaderIterator(parser);
+ for (final String col : headers) Assert.assertTrue(fileIterator.hasColumn(col));
+
+ int i=1;
+ for (final DelimitedTextFileWithHeaderIterator.Row row : new IterableAdapter<DelimitedTextFileWithHeaderIterator.Row>(fileIterator)) {
+ final String[] expected = data[i++];
+ final String[] actual = row.getFields();
+ for (int j = 0; j < expected.length; j++) {
+ Assert.assertTrue((expected[j].equals("") && actual[j] == null) || expected[j].equals(actual[j]));
+ }
+ Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
+ try {
+ row.getField(headers[0]);
+ row.getField(headers[1]);
+ row.getIntegerField(headers[2]);
+ }
+ catch(Exception e) {
+ Assert.fail("Failed to parse one of the fields in " + row.getCurrentLine() + ": " + e.getMessage());
+ }
+ }
+
+ Assert.assertEquals(i, data.length);
+ }
+
+
+}
diff --git a/src/tests/java/picard/util/FifoBufferTest.java b/src/tests/java/picard/util/FifoBufferTest.java
new file mode 100644
index 0000000..76adab1
--- /dev/null
+++ b/src/tests/java/picard/util/FifoBufferTest.java
@@ -0,0 +1,74 @@
+package picard.util;
+
+import htsjdk.samtools.util.Md5CalculatingInputStream;
+import htsjdk.samtools.util.Md5CalculatingOutputStream;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Random;
+
+/**
+ * Tests for the FifoBuffer class. Generates (deterministically!) random files of certain sizes
+ * and then pipes them through the FifoBuffer class and checks that input and output MD5s match.
+ */
+public class FifoBufferTest {
+
+ /* Simply invokes the real test method many times with different inputs. */
+ @Test public void testFifoBuffer() throws IOException {
+ test(1);
+ test(2);
+ test(3);
+ test(4);
+ test(5);
+ test(6);
+ test(7);
+ test(8);
+ test(9);
+ test(10);
+ test(10.1345);
+ test(150);
+ }
+
+ /**
+ * Writes a file of the given size in megabytes fill with random bytes, initialized using (int) megabytes as the
+ * seed to the random number generator. Then pipes through FifoBuffer and confirms that output == input via md5.
+ */
+ public void test(final double megabytes) throws IOException {
+ final File inputFile = File.createTempFile("fifo_input.", ".foo");
+
+ // Generate a file with a set number of megabytes of random data
+ final int nBytes = (int) (megabytes * 1024 * 1024);
+ {
+ final Random random = new Random(nBytes);
+ final BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(inputFile));
+ final int bytesPerWrite = 127;
+ final byte[] bytes = new byte[bytesPerWrite];
+ for (int i=0; i<nBytes; i+=bytesPerWrite) {
+ random.nextBytes(bytes);
+ out.write(bytes);
+ }
+ out.close();
+ }
+
+ // Run the input file through the FifoBuffer and back into another file
+ final Md5CalculatingInputStream in = new Md5CalculatingInputStream(new FileInputStream(inputFile), null);
+ final Md5CalculatingOutputStream out = new Md5CalculatingOutputStream(new FileOutputStream("/dev/null"), null);
+ final PrintStream outStream = new PrintStream(out);
+ final FifoBuffer buffer = new FifoBuffer(in, outStream);
+ buffer.BUFFER_SIZE = 128 * 1024 * 1024;
+ buffer.doWork();
+
+ in.close();
+ out.close();
+ final String inputMd5 = in.md5();
+ final String outputMd5 = out.md5();
+ Assert.assertEquals(outputMd5, inputMd5, "MD5s do not match between input and output.");
+ inputFile.delete();
+ }
+}
diff --git a/src/tests/java/picard/util/FileChannelJDKBugWorkAroundTest.java b/src/tests/java/picard/util/FileChannelJDKBugWorkAroundTest.java
new file mode 100644
index 0000000..b5e1c8d
--- /dev/null
+++ b/src/tests/java/picard/util/FileChannelJDKBugWorkAroundTest.java
@@ -0,0 +1,36 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import org.testng.annotations.Test;
+
+/**
+ * @author alecw at broadinstitute.org
+ */
+public class FileChannelJDKBugWorkAroundTest {
+ @Test
+ public void testBasic() {
+ FileChannelJDKBugWorkAround.doBugWorkAround();
+ }
+}
diff --git a/src/tests/java/picard/util/IlluminaUtilTest.java b/src/tests/java/picard/util/IlluminaUtilTest.java
new file mode 100644
index 0000000..a369c67
--- /dev/null
+++ b/src/tests/java/picard/util/IlluminaUtilTest.java
@@ -0,0 +1,87 @@
+package picard.util;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Just some simple tests for the IlluminaUtil.getTileFromReadName() method for now.
+ *
+ * @author Tim Fennell
+ */
+public class IlluminaUtilTest {
+ @Test(dataProvider="readNames") public void testFindTileInReadName(final String readName, final Integer tile) {
+ final Integer otherTile = IlluminaUtil.getTileFromReadName(readName);
+ Assert.assertEquals(otherTile, tile, "Tile numbers do not match for read name: " + readName);
+ }
+
+ @Test public void performanceTestGetTileFromReadName() {
+ final int ITERATIONS = 5000000;
+
+ final long startTime = System.currentTimeMillis();
+ for (int i=0; i<ITERATIONS; ++i) {
+ final Integer tile = IlluminaUtil.getTileFromReadName("300WFAAXX090909:1:1:1024:978#0/1");
+ if (tile == null || tile != 1) throw new RuntimeException("WTF?");
+ }
+ final long endTime = System.currentTimeMillis();
+
+ System.out.println("Time taken: " + (endTime-startTime) + "ms.");
+ }
+
+ @DataProvider(name="readNames")
+ public Object[][] readNames() {
+ return new Object[][] {
+ new Object[] {"300WFAAXX:1:119:1024:978#0/1", 119},
+ new Object[] {"300WFAAXX090909:1:1:1024:978#0/1", 1},
+ new Object[] {"FOO", null},
+ new Object[] {"FOO:BAR_splat", null}
+ };
+ }
+
+ public static final byte [] iToB(int [] intVals) {
+ byte [] byteVals = new byte[intVals.length];
+ for(int i = 0; i < byteVals.length; i++) {
+ byteVals[i] = (byte) intVals[i];
+ }
+ return byteVals;
+ }
+
+ public byte[][] byteBuffersSizeCopy(byte [][] bytes) {
+ byte [][] outBytes = new byte[bytes.length][];
+ for(int i = 0; i < bytes.length; i++) {
+ outBytes[i] = new byte[bytes[i].length];
+ }
+
+ return outBytes;
+ }
+
+ @DataProvider(name = "solexaQualStrToPhreds")
+ public Object [][] solexaQualStrToPhredsToPhreds() {
+ return new Object[][] {
+ new Object[] {
+ "x at Axy" + ((char)156) + ((char) 157) + ((char) 0) + ((char) 1) + "?",
+ new byte[][] {
+ new byte[]{}, iToB(new int[]{56}), iToB(new int[]{0, 1, 56, 57, 92, 93}),
+ iToB(new int[]{-64, -63, -1}), new byte[]{}
+ }
+ },
+ new Object[] {
+ "nNpZo" + ((char)250) + ((char) 255) + ((char) 1) + ((char) 1) + "CCaB",
+ new byte[][] {
+ iToB(new int[]{46, 14}), iToB(new int[]{48, 26, 47, -70, -65, -63, -63, 3, 3, 33}), iToB(new int[]{2})
+ }
+ }
+ };
+ }
+
+ /*
+ @Test(dataProvider = "solexaQualStrToPhreds")
+ public void makePhredBinaryFromSolexaQualityAscii_1_3_toArrays(final String solexaQualities, final int offset, final byte [][] expectedBuffers) {
+ byte [][] actualBuffers = byteBuffersSizeCopy(expectedBuffers);
+ IlluminaUtil.makePhredBinaryFromSolexaQualityAscii_1_3(solexaQualities, offset, actualBuffers);
+
+ for(int i = 0; i < expectedBuffers.length; i++) {
+ Assert.assertEquals(expectedBuffers[i], actualBuffers[i]);
+ }
+ }*/
+}
diff --git a/src/tests/java/picard/util/IntervalListScattererTest.java b/src/tests/java/picard/util/IntervalListScattererTest.java
new file mode 100644
index 0000000..ae106b8
--- /dev/null
+++ b/src/tests/java/picard/util/IntervalListScattererTest.java
@@ -0,0 +1,203 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2010 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.IntervalList;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * Very basic test for scatter functionality in IntervalListTools
+ */
+public class IntervalListScattererTest {
+ private static final IntervalList LIST_TO_SCATTER;
+
+ static {
+ LIST_TO_SCATTER = IntervalList.fromFile(new File("testdata/picard/util/scatterable.interval_list"));
+ Assert.assertEquals(LIST_TO_SCATTER.getUniqueBaseCount(), 200, "Wrong unique base count");
+ }
+
+ private static class Testcase {
+ final IntervalList source;
+ final List<IntervalList> expectedScatter;
+ final int scatterWidth;
+ final IntervalListScatterer.Mode mode;
+
+ @Override
+ public String toString() {
+ return "Testcase{" +
+ "scatterWidth=" + scatterWidth +
+ ", mode=" + mode +
+ '}';
+ }
+
+ private Testcase(final IntervalList source, final int scatterWidth, final IntervalListScatterer.Mode mode, final List<IntervalList> expectedScatter) {
+ this.source = source;
+ this.expectedScatter = expectedScatter;
+ this.scatterWidth = scatterWidth;
+ this.mode = mode;
+ }
+ }
+
+ private static final List<Testcase> testcases = new ArrayList<Testcase>();
+
+ static {
+ testcases.add(new Testcase(
+ LIST_TO_SCATTER, 2, IntervalListScatterer.Mode.INTERVAL_SUBDIVISION,
+ Arrays.asList(
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30000, 30098,
+ 30100, 30100
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30101, 30150,
+ 30200, 30249
+ )
+ )
+ ));
+
+ testcases.add(new Testcase(
+ LIST_TO_SCATTER, 4, IntervalListScatterer.Mode.INTERVAL_SUBDIVISION,
+ Arrays.asList(
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30000, 30049
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30050, 30098,
+ 30100, 30100
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30101, 30150
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30200, 30249
+ )
+ )
+ ));
+
+ testcases.add(new Testcase(
+ LIST_TO_SCATTER, 5, IntervalListScatterer.Mode.INTERVAL_SUBDIVISION,
+ Arrays.asList(
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30000, 30039
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30040, 30079
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30080, 30098,
+ 30100, 30120
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30121, 30150,
+ 30200, 30209
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30210, 30249
+ )
+ )
+ ));
+
+ testcases.add(new Testcase(
+ LIST_TO_SCATTER, 6, IntervalListScatterer.Mode.BALANCING_WITHOUT_INTERVAL_SUBDIVISION,
+ Arrays.asList(
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30000, 30098
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30100, 30150
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30200, 30249
+ )
+ )
+ ));
+
+ testcases.add(new Testcase(
+ LIST_TO_SCATTER, 2, IntervalListScatterer.Mode.BALANCING_WITHOUT_INTERVAL_SUBDIVISION,
+ Arrays.asList(
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30000, 30098
+ ),
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30100, 30150,
+ 30200, 30249
+ )
+ )
+ ));
+
+ testcases.add(new Testcase(
+ LIST_TO_SCATTER, 1, IntervalListScatterer.Mode.BALANCING_WITHOUT_INTERVAL_SUBDIVISION,
+ Arrays.asList(
+ composeIntervalList(LIST_TO_SCATTER, "1",
+ 30000, 30098,
+ 30100, 30150,
+ 30200, 30249
+ )
+ )
+ ));
+ }
+
+ @DataProvider
+ public Object[][] testScatterTestcases() {
+ final Object[][] objects = new Object[testcases.size()][];
+ for (int i = 0; i < objects.length; i++) {
+ objects[i] = new Object[]{testcases.get(i)};
+ }
+ return objects;
+ }
+
+ @Test(dataProvider = "testScatterTestcases")
+ public void testScatter(final Testcase tc) {
+ final IntervalListScatterer scatterer = new IntervalListScatterer(tc.mode);
+ final List<IntervalList> scatter = scatterer.scatter(tc.source, tc.scatterWidth);
+ Assert.assertEquals(scatter, tc.expectedScatter);
+ }
+
+ private static IntervalList composeIntervalList(final IntervalList source, final String chromosome, final int... segmentsByPair) {
+ final IntervalList intervals = new IntervalList(source.getHeader());
+ for (int i = 0; i < segmentsByPair.length; i += 2) {
+ final Interval parentInterval = lookupIntervalContainingLocus(source, chromosome, segmentsByPair[i]);
+ intervals.add(new Interval("1", segmentsByPair[i], segmentsByPair[i + 1], parentInterval.isNegativeStrand(), parentInterval.getName()));
+ }
+ return intervals;
+ }
+
+ private static Interval lookupIntervalContainingLocus(final IntervalList source, final String chromosome, final int startIndex) {
+ for (final Interval interval : source) {
+ if (interval.getSequence().equals(chromosome) && startIndex >= interval.getStart() && startIndex <= interval.getEnd()) {
+ return interval;
+ }
+ }
+ throw new NoSuchElementException();
+ }
+}
diff --git a/src/tests/java/picard/util/MathUtilTest.java b/src/tests/java/picard/util/MathUtilTest.java
new file mode 100644
index 0000000..f5b2969
--- /dev/null
+++ b/src/tests/java/picard/util/MathUtilTest.java
@@ -0,0 +1,86 @@
+package picard.util;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import static picard.util.MathUtil.divide;
+
+/**
+ * @author mccowan
+ */
+public class MathUtilTest {
+ @Test
+ public void logMathTest() {
+ Assert.assertEquals(MathUtil.LOG_10_MATH.getLogValue(10), 1d, 0.00001d);
+ Assert.assertEquals(MathUtil.LOG_10_MATH.getNonLogValue(1), 10d, 0.00001d);
+ Assert.assertEquals(MathUtil.LOG_10_MATH.mean(5, 5, 5), 5d, 0.00001d);
+ // http://www.wolframalpha.com/input/?i=log10%2810%5E1.23%2B10%5E4.56%2B10%5E99999%29
+ Assert.assertEquals(MathUtil.LOG_10_MATH.sum(1.23, 4.56, 2), 4.5613970317323586660874152202433434022756298235604568d, 0.00001d);
+ // http://www.wolframalpha.com/input/?i=log10%2810%5E1.23+*+10%5E4.56+*+10%5E2%29
+ Assert.assertEquals(MathUtil.LOG_10_MATH.product(1.23, 4.56, 2), 7.7899999999999999999999999999999999999999999999999999d, 0.00001d);
+
+ TestNGUtil.assertEqualDoubleArrays(MathUtil.LOG_10_MATH.getLogValue(new double[]{0.1, 1.0, 10.0}), new double[]{-1.0, 0.0, 1.0}, 0.00001d);
+ TestNGUtil.assertEqualDoubleArrays(MathUtil.LOG_2_MATH.getLogValue(new double[]{0.5, 1.0, 2.0}), new double[]{-1.0, 0.0, 1.0}, 0.00001d);
+ }
+
+ @DataProvider
+ public Object[][] seqMethodTestCases() {
+ return new Object[][] {
+ new Object[] {0d, 5d, 1d, new double[] {0,1,2,3,4,5}},
+ new Object[] {0d, 0.5d, 0.1d, new double[] {0, 0.1, 0.2, 0.3, 0.4, 0.5}},
+ new Object[] {0d, 0.5d, 0.11d,new double[] {0, 0.11, 0.22, 0.33, 0.44}},
+ new Object[] {50d, 55d, 1.25d,new double[] {50, 51.25, 52.5, 53.75, 55}},
+ new Object[] {10d, 0d, 02d, new double[] {}},
+ new Object[] {10d, 0d, -2d, new double[] {10, 8, 6, 4, 2, 0}},
+ };
+ }
+
+ @Test(dataProvider="seqMethodTestCases")
+ public void testSeqGeneration(final double from, final double to, final double by, final double[] expected) {
+ final double[] actual = MathUtil.seq(from, to, by);
+ Assert.assertEquals(actual.length, expected.length);
+
+ for (int i=0; i<expected.length; ++i) {
+ Assert.assertTrue(Math.abs(actual[i] - expected[i]) < 0.0000001);
+ }
+ }
+
+ @DataProvider
+ public Object[][] divideMethodTestCases() {
+ return new Object[][] {
+ new Object[] {new double [] {1, 2, 3, 4}, new double [] {2, 3, 4, -5}, new double[] {.5, 2.0/3, 3.0/4, -4.0/5}},
+ new Object[] {new double [] {100}, new double [] {200}, new double[] {.5}},
+ new Object[] {new double [] {0, 4, -3, 2}, new double [] {200, 30, 32, 12}, new double[] {0, 4.0/30, -3.0/32, 2.0/12}},
+ new Object[] {new double [] {}, new double [] {}, new double[] {}},
+
+ };
+ }
+
+ @Test(dataProvider = "divideMethodTestCases")
+ public void testDivide(final double [] numerators, final double [] denominators, final double [] expected) {
+ assertEquals(divide(numerators, denominators), expected);
+ }
+
+ @DataProvider
+ public Object[][] divideMethodFailTestCases() {
+ return new Object[][] {
+ new Object[] {new double [] { 1, 2, 3, 4}, new double [] {2, 3, 4}},
+ new Object[] {new double [] {100}, new double [] {}},
+ };
+ }
+
+ @Test(dataProvider = "divideMethodFailTestCases",expectedExceptions = RuntimeException.class)
+ public void testDivideFail(final double [] lhs, final double [] rhs){
+ divide(lhs, rhs);
+ }
+
+ //TestNG doesn't have a utility function with this signature....
+ private void assertEquals(final double [] actual, final double [] expected) {
+ Assert.assertEquals(actual.length,expected.length,"Arrays do not have equal lengths");
+
+ for(int i=0;i<actual.length;++i){
+ Assert.assertEquals(actual[i], expected[i],"Array differ at position " +i);
+ }
+ }
+}
diff --git a/src/tests/java/picard/util/MergingIteratorTest.java b/src/tests/java/picard/util/MergingIteratorTest.java
new file mode 100644
index 0000000..9d44dbe
--- /dev/null
+++ b/src/tests/java/picard/util/MergingIteratorTest.java
@@ -0,0 +1,177 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.samtools.util.MergingIterator;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Queue;
+
+public class MergingIteratorTest {
+
+ private static class QueueBackedIterator<T> implements CloseableIterator<T> {
+
+ private final Iterator<T> backing;
+ QueueBackedIterator(final Queue<T> queue) {
+ this.backing = queue.iterator();
+ }
+
+ @Override
+ public void close() {
+ // no-op
+ }
+
+ @Override
+ public boolean hasNext() {
+ return backing.hasNext();
+ }
+
+ @Override
+ public T next() {
+ return backing.next();
+ }
+
+ @Override
+ public void remove() {
+ backing.remove();
+ }
+ }
+
+ private static final Comparator<Integer> INTEGER_COMPARATOR = new Comparator<Integer>() {
+ @Override
+ public int compare(Integer integer, Integer integer2) {
+ return integer - integer2;
+ }
+ };
+
+ @Test
+ public void testOrderingAndCompleteness() {
+ final Queue<Integer> queueOne = new LinkedList<Integer>();
+ queueOne.add(1);
+ queueOne.add(3);
+ queueOne.add(5);
+
+ final Queue<Integer> queueTwo = new LinkedList<Integer>();
+ queueTwo.add(2);
+ queueTwo.add(4);
+ queueTwo.add(6);
+
+ final Queue<Integer> queueThree = new LinkedList<Integer>();
+ queueThree.add(0);
+ queueThree.add(1);
+
+ final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
+ Collections.addAll(
+ iterators,
+ new QueueBackedIterator<Integer>(queueOne),
+ new QueueBackedIterator<Integer>(queueTwo),
+ new QueueBackedIterator<Integer>(queueThree));
+
+ final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
+ INTEGER_COMPARATOR,
+ iterators);
+
+ int count = 0;
+ int last = -1;
+ while (mergingIterator.hasNext()) {
+ final Integer integer = mergingIterator.next();
+ count++;
+ if (integer == 1) Assert.assertTrue(integer >= last);
+ else Assert.assertTrue(integer > last);
+ last = integer;
+ }
+
+ Assert.assertEquals(queueOne.size() + queueTwo.size() + queueThree.size(), count);
+ }
+
+ @Test
+ public void testIteratorsOfUnevenLength() {
+ final Queue<Integer> queueOne = new LinkedList<Integer>();
+ queueOne.add(1);
+ queueOne.add(3);
+ queueOne.add(5);
+ queueOne.add(7);
+ queueOne.add(9);
+ queueOne.add(11);
+ queueOne.add(13);
+
+ final Queue<Integer> queueTwo = new LinkedList<Integer>();
+ queueTwo.add(2);
+
+ final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
+ Collections.addAll(
+ iterators,
+ new QueueBackedIterator<Integer>(queueOne),
+ new QueueBackedIterator<Integer>(queueTwo));
+
+ final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
+ INTEGER_COMPARATOR,
+ iterators);
+
+ int count = 0;
+ int last = -1;
+ while (mergingIterator.hasNext()) {
+ final Integer integer = mergingIterator.next();
+ count++;
+ Assert.assertTrue(integer > last);
+ last = integer;
+ }
+
+ Assert.assertEquals(queueOne.size() + queueTwo.size(), count);
+ }
+
+ @Test(expectedExceptions = IllegalStateException.class)
+ public void testOutOfOrderIterators() {
+ final Queue<Integer> queueOne = new LinkedList<Integer>();
+ queueOne.add(1);
+ queueOne.add(3);
+
+ final Queue<Integer> queueTwo = new LinkedList<Integer>();
+ queueTwo.add(4);
+ queueTwo.add(2);
+
+ final Collection<CloseableIterator<Integer>> iterators = new ArrayList<CloseableIterator<Integer>>(3);
+ Collections.addAll(
+ iterators,
+ new QueueBackedIterator<Integer>(queueOne),
+ new QueueBackedIterator<Integer>(queueTwo));
+
+ final MergingIterator<Integer> mergingIterator = new MergingIterator<Integer>(
+ INTEGER_COMPARATOR,
+ iterators);
+
+ Assert.assertEquals(mergingIterator.next().intValue(), 1);
+ Assert.assertEquals(mergingIterator.next().intValue(), 3);
+ Assert.assertEquals(mergingIterator.next().intValue(), 4);
+ mergingIterator.next(); // fails, because the next element would be "2"
+ }
+}
diff --git a/src/tests/java/picard/util/RExecutorTest.java b/src/tests/java/picard/util/RExecutorTest.java
new file mode 100755
index 0000000..d51c9d5
--- /dev/null
+++ b/src/tests/java/picard/util/RExecutorTest.java
@@ -0,0 +1,50 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2009 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+
+
+public class RExecutorTest {
+ @Test
+ public void testPassingRScript() {
+ Assert.assertTrue(
+ RExecutor.executeFromClasspath("passing.R") == 0);
+ }
+
+ @Test
+ public void testFailingRScript() {
+ Assert.assertTrue(
+ RExecutor.executeFromClasspath("failing.R") != 0);
+ }
+
+ @Test(expectedExceptions=IllegalArgumentException.class)
+ public void testRScriptNotFound() {
+ RExecutor.executeFromClasspath("asdlfjasl");
+ Assert.fail();
+ }
+
+}
diff --git a/src/tests/java/picard/util/ScatterIntervalsByNsTest.java b/src/tests/java/picard/util/ScatterIntervalsByNsTest.java
new file mode 100644
index 0000000..39f4201
--- /dev/null
+++ b/src/tests/java/picard/util/ScatterIntervalsByNsTest.java
@@ -0,0 +1,165 @@
+package picard.util;
+
+import htsjdk.samtools.reference.ReferenceSequence;
+import htsjdk.samtools.reference.ReferenceSequenceFile;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.SAMSequenceRecord;
+import htsjdk.samtools.util.CollectionUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.lang.Exception;import java.lang.Object;import java.lang.Override;import java.lang.String;import java.util.List;
+
+/**
+ * Created by farjoun on 3/26/14.
+ */
+public class ScatterIntervalsByNsTest {
+
+ @DataProvider(name = "testSegregate")
+ public Object[][] testSegregate() {
+
+ return new Object[][]{
+ new Object[]{"NNNNNAAAAANNNNNN", 1, CollectionUtil.makeList(
+ new Interval("fake1", 1, 5),
+ new Interval("fake1", 6, 10),
+ new Interval("fake1", 11, 16))},
+
+ new Object[]{"NNNNNAAAAANNNNNN", 5, CollectionUtil.makeList(
+ new Interval("fake1", 1, 5),
+ new Interval("fake1", 6, 10),
+ new Interval("fake1", 11, 16))},
+
+ new Object[]{"NNNNNAAAnANNNNNN", 6, CollectionUtil.makeList(
+ new Interval("fake1", 1, 5),
+ new Interval("fake1", 6, 10),
+ new Interval("fake1", 11, 16))},
+
+ new Object[]{"AnTGCNNNNNACGTCG", 1, CollectionUtil.makeList(
+ new Interval("fake1", 1, 5),
+ new Interval("fake1", 6, 10),
+ new Interval("fake1", 11, 16))},
+
+ new Object[]{"ACTGCNNNNNACGTCG", 4, CollectionUtil.makeList(
+ new Interval("fake1", 1, 5),
+ new Interval("fake1", 6, 10),
+ new Interval("fake1", 11, 16))},
+
+ new Object[]{"ACTGCNNNNNACgctG", 5, CollectionUtil.makeList(
+ new Interval("fake1", 1, 16))},
+
+ new Object[]{"ACNGCNNNNNACnTNG", 5, CollectionUtil.makeList(
+ new Interval("fake1", 1, 16))},
+
+ new Object[]{"ACNGCNNNNNACnTNG", 0, CollectionUtil.makeList(
+ new Interval("fake1", 1, 2), //acgt
+ new Interval("fake1", 3, 3), //N
+ new Interval("fake1", 4, 5),
+ new Interval("fake1", 6, 10), //N
+ new Interval("fake1", 11, 12),
+ new Interval("fake1", 13, 13), //N
+ new Interval("fake1", 14, 14),
+ new Interval("fake1", 15, 15), //N
+ new Interval("fake1", 16, 16))},
+
+ new Object[]{"AAAAAAAAAAACnTNG", 0, CollectionUtil.makeList(
+ new Interval("fake1", 1, 12),
+ new Interval("fake1", 13, 13), //N
+ new Interval("fake1", 14, 14),
+ new Interval("fake1", 15, 15), //N
+ new Interval("fake1", 16, 16))},
+
+ new Object[]{"AAAAAAAAAAACATNG", 0, CollectionUtil.makeList(
+ new Interval("fake1", 1, 14),
+ new Interval("fake1", 15, 15), //N
+ new Interval("fake1", 16, 16))},
+
+ new Object[]{"ANCNNGCNNNNNACNTNGN", 1, CollectionUtil.makeList(
+ new Interval("fake1", 1, 3),
+ new Interval("fake1", 4, 5),
+ new Interval("fake1", 6, 7),
+ new Interval("fake1", 8, 12),
+ new Interval("fake1", 13, 18),
+ new Interval("fake1", 19, 19)
+
+ )},
+ new Object[]{"ANCNNGCNNNNNACNTNGN", 0, CollectionUtil.makeList(
+ new Interval("fake1", 1, 1),
+ new Interval("fake1", 2, 2),
+ new Interval("fake1", 3, 3),
+ new Interval("fake1", 4, 5),
+ new Interval("fake1", 6, 7),
+ new Interval("fake1", 8, 12),
+ new Interval("fake1", 13, 14),
+ new Interval("fake1", 15, 15),
+ new Interval("fake1", 16, 16),
+ new Interval("fake1", 17, 17),
+ new Interval("fake1", 18, 18),
+ new Interval("fake1", 19, 19)
+ )}
+
+
+ };
+ }
+
+ @Test(dataProvider = "testSegregate")
+ public void testSegregateReference(final String referenceString, final int maxNmerToMerge, final List<Interval> result) throws Exception {
+
+ final SAMSequenceRecord record = new SAMSequenceRecord("fake1", referenceString.length());
+ final SAMSequenceDictionary dictionary = new SAMSequenceDictionary();
+ dictionary.addSequence(record);
+
+ final ReferenceSequenceFile reference = new ReferenceSequenceFile() {
+
+ boolean done = false;
+
+ @Override
+ public SAMSequenceDictionary getSequenceDictionary() {
+ return dictionary;
+ }
+
+ @Override
+ public ReferenceSequence nextSequence() {
+ if (!done) {
+ done = true;
+ return getSequence(record.getSequenceName());
+ }
+ return null;
+ }
+
+ @Override
+ public void reset() {
+ done = false;
+ }
+
+ @Override
+ public boolean isIndexed() {
+ return false;
+ }
+
+ @Override
+ public ReferenceSequence getSequence(final String contig) {
+ if (contig.equals(record.getSequenceName())) {
+ return new ReferenceSequence(record.getSequenceName(), 0, referenceString.getBytes());
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public ReferenceSequence getSubsequenceAt(final String contig, final long start, final long stop) {
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return null;
+ }
+
+ @Override
+ public void close() {}
+ };
+ Assert.assertEquals(ScatterIntervalsByNs.segregateReference(reference, maxNmerToMerge).getIntervals(), result);
+ }
+}
diff --git a/src/tests/java/picard/util/TabbedTextFileWithHeaderParserTest.java b/src/tests/java/picard/util/TabbedTextFileWithHeaderParserTest.java
new file mode 100644
index 0000000..cff611a
--- /dev/null
+++ b/src/tests/java/picard/util/TabbedTextFileWithHeaderParserTest.java
@@ -0,0 +1,94 @@
+package picard.util;
+
+import htsjdk.samtools.util.StringUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.util.TabbedTextFileWithHeaderParser.Row;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+
+/**
+ *
+ */
+public class TabbedTextFileWithHeaderParserTest {
+ @Test
+ public void basicParsingTest() throws Exception {
+ final String[][] data = new String[][] {
+ new String[] {"FOO", "BAR", "SPLAT"},
+ new String[] {"1", "2", "3"},
+ new String[] {"a", "b", "c"},
+ new String[] {"foo", "bar", "splat"},
+ };
+
+ final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
+ tmp.deleteOnExit();
+ final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
+
+ for (final String[] fields : data) {
+ out.write(StringUtil.join("\t", fields));
+ out.newLine();
+ }
+
+ out.close();
+
+ final TabbedTextFileWithHeaderParser parser = new TabbedTextFileWithHeaderParser(tmp);
+ for (final String col : data[0]) Assert.assertTrue(parser.hasColumn(col));
+
+ int i=1;
+ for (final Row row : parser) {
+ final String[] expected = data[i++];
+ Assert.assertEquals(row.getFields(), expected);
+ Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
+ }
+
+ Assert.assertEquals(i, data.length);
+ }
+
+ @Test
+ public void parsingWithColumnHeadersTest() throws Exception {
+ final String[][] data = new String[][] {
+ new String[] {"1", "2", "3"},
+ new String[] {"a", "b", "2"},
+ new String[] {"foo", "bar", ""},
+ };
+
+ final String[] headers = {"STRING", "STRING2", "NUMBER"};
+
+ final File tmp = File.createTempFile("tabbedTextTest.", ".txt");
+ tmp.deleteOnExit();
+ final BufferedWriter out = new BufferedWriter(new FileWriter(tmp));
+
+ for (final String[] fields : data) {
+ out.write(StringUtil.join("\t", fields));
+ out.newLine();
+ }
+
+ out.close();
+
+ final TabbedTextFileWithHeaderParser parser = new TabbedTextFileWithHeaderParser(tmp, headers);
+ for (final String col : headers) Assert.assertTrue(parser.hasColumn(col));
+
+ int i=0;
+ for (final Row row : parser) {
+ final String[] expected = data[i++];
+ final String[] actual = row.getFields();
+ for (int j = 0; j < expected.length; j++) {
+ Assert.assertTrue((expected[j].equals("") && actual[j] == null) || expected[j].equals(actual[j]));
+ }
+ Assert.assertEquals(row.getCurrentLine(), StringUtil.join("\t", expected));
+ try {
+ row.getField(headers[0]);
+ row.getField(headers[1]);
+ row.getIntegerField(headers[2]);
+ }
+ catch(Exception e) {
+ Assert.fail("Failed to parse one of the fields in " + row.getCurrentLine() + ": " + e.getMessage());
+ }
+ }
+
+ Assert.assertEquals(i, data.length);
+ }
+
+}
diff --git a/src/tests/java/picard/util/TextFileParsersTest.java b/src/tests/java/picard/util/TextFileParsersTest.java
new file mode 100644
index 0000000..8da5e6a
--- /dev/null
+++ b/src/tests/java/picard/util/TextFileParsersTest.java
@@ -0,0 +1,314 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.util;
+
+import htsjdk.samtools.util.FormatUtil;
+import htsjdk.samtools.util.IOUtil;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+public class TextFileParsersTest {
+
+ private static final String testFile1 = "testdata/picard/util/whitespace_text_file.txt";
+ private static final String testFile2 = "testdata/picard/util/all_ones_text_file.txt";
+ private static final String testFile3 = "testdata/picard/util/no_grouping_file.txt";
+ private static final String testFile4 = "testdata/picard/util/tabbed_text_file.txt";
+ // There is a comment in the file data that should be skipped by the parser, so it is not included below
+ private static final Object[][] testFile1Data = {
+ { "Now", "is", "the", "time" },
+ { "for", "all", "good", "men" },
+ { "to", "come", "to", "the" },
+ { "aid", "of", "their", "country." },
+ { 15.0d, 23, 55, 67.88888}
+ };
+
+ @Test(dataProvider = "basicInputParserData")
+ public void testTextFileParser(Object fileOrStream) throws IOException {
+ FormatUtil format = new FormatUtil();
+
+ List<String> expected = new ArrayList<String>();
+ if (fileOrStream instanceof File) {
+ BufferedReader reader = new BufferedReader(new FileReader((File)fileOrStream));
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ if (!line.startsWith("#")) expected.add(line);
+ }
+ reader.close();
+ }
+
+ BasicInputParser parser = fileOrStream instanceof File
+ ? new BasicInputParser(true, (File)fileOrStream )
+ : new BasicInputParser(true, (InputStream)fileOrStream);
+ int index = 0;
+ while (parser.hasNext())
+ {
+ String parts[] = parser.next();
+ if (fileOrStream instanceof File) {
+ // Can't have the parser and the reader workking with an InputStream at the same time
+ // so we only do this test with the file
+ Assert.assertEquals(parser.getCurrentLine(), expected.get(index));
+ }
+ // Line 4 is a comment, so there's a gap in the line numbers
+ Assert.assertEquals(parser.getCurrentLineNumber(), index <= 2 ? index+1 : index+2);
+ Assert.assertEquals(parts.length, 4);
+ if (index < 4) {
+ for (int i = 0; i < parts.length; i++) {
+ Assert.assertEquals(parts, testFile1Data[index]);
+ }
+ }
+ else {
+ Assert.assertEquals(testFile1Data[index][0], format.parseDouble(parts[0]));
+ Assert.assertEquals(testFile1Data[index][1], format.parseInt(parts[1]));
+ Assert.assertEquals(testFile1Data[index][2], format.parseInt(parts[2]));
+ Assert.assertEquals(testFile1Data[index][3], format.parseDouble(parts[3]));
+ }
+ index++;
+ }
+ }
+
+ @DataProvider(name = "basicInputParserData")
+ private Object[][] getBasicInputParserData()
+ {
+ return new Object[][] {
+ {new File(testFile1)},
+ {IOUtil.openFileForReading(new File(testFile1))}
+ };
+ }
+
+ @Test(dataProvider = "multiFileParsingData")
+ public void testMultiFileParsing(Object fileOrStream1, Object fileOrStream2) throws IOException {
+ FormatUtil format = new FormatUtil();
+
+ List<String> expected = new ArrayList<String>();
+ if (fileOrStream1 instanceof File) {
+ BufferedReader reader = new BufferedReader(new FileReader((File)fileOrStream1));
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ if (!line.startsWith("#")) expected.add(line);
+ }
+ reader.close();
+ reader = new BufferedReader(new FileReader((File)fileOrStream2));
+ while ((line = reader.readLine()) != null) {
+ if (!line.startsWith("#")) expected.add(line);
+ }
+ reader.close();
+ }
+
+ BasicInputParser parser = fileOrStream1 instanceof File
+ ? new BasicInputParser(true, (File)fileOrStream1, (File)fileOrStream2 )
+ : new BasicInputParser(true, (InputStream)fileOrStream1, (InputStream)fileOrStream2);
+ int index = 0;
+ // Line 4 is a comment, so there's a gap in the line numbers
+ int expectedLineNumbers[] = {1,2,3,5,6,1,2,3,5,6};
+ while (parser.hasNext())
+ {
+ String parts[] = parser.next();
+ if (fileOrStream1 instanceof File) {
+ // Can't have the parser and the reader working with an InputStream at the same time
+ // so we only test the files
+ Assert.assertEquals(parser.getCurrentLine(), expected.get(index));
+ }
+ Assert.assertEquals(parser.getCurrentLineNumber(), expectedLineNumbers[index]);
+ Assert.assertEquals(parts.length, 4);
+ int indexIntoTestData = (index<5) ? index : index-5;
+ if (index != 4 && index != 9) {
+ for (int i = 0; i < parts.length; i++) {
+ Assert.assertEquals(parts, testFile1Data[indexIntoTestData]);
+ }
+ }
+ else {
+ Assert.assertEquals(testFile1Data[indexIntoTestData][0], format.parseDouble(parts[0]));
+ Assert.assertEquals(testFile1Data[indexIntoTestData][1], format.parseInt(parts[1]));
+ Assert.assertEquals(testFile1Data[indexIntoTestData][2], format.parseInt(parts[2]));
+ Assert.assertEquals(testFile1Data[indexIntoTestData][3], format.parseDouble(parts[3]));
+ }
+ index++;
+ }
+ }
+
+ @DataProvider(name = "multiFileParsingData")
+ private Object[][] getMultiFileParsingData()
+ {
+ return new Object[][] {
+ {new File(testFile1), new File(testFile1)},
+ {IOUtil.openFileForReading(new File(testFile1)), IOUtil.openFileForReading(new File(testFile1))}
+ };
+ }
+
+ @Test(dataProvider = "noGroupingData")
+ public void testTextFileParserNoGrouping(Object fileOrStream) {
+ BasicInputParser parser = fileOrStream instanceof File
+ ? new BasicInputParser(true, (File)fileOrStream)
+ : new BasicInputParser(true, (InputStream)fileOrStream);
+ parser.setTreatGroupedDelimitersAsOne(false);
+ while (parser.hasNext()) {
+ String parts[] = parser.next();
+ for (int i = 0; i < parts.length; i++) {
+ if (parts[i] != null) {
+ Assert.assertEquals(Integer.parseInt(parts[i]), i+1);
+ }
+ }
+ }
+ }
+
+ @DataProvider(name = "noGroupingData")
+ private Object[][] getNoGroupingData()
+ {
+ return new Object[][] {
+ {new File(testFile3)},
+ {IOUtil.openFileForReading(new File(testFile3))}
+ };
+ }
+
+
+ @Test(dataProvider = "leadingWhiteSpaceData")
+ public void testTextFileParserLeadingWhitespace(Object fileOrStream) {
+ BasicInputParser parser = fileOrStream instanceof File
+ ? new BasicInputParser(true, (File)fileOrStream)
+ : new BasicInputParser(true, (InputStream)fileOrStream);
+ while (parser.hasNext())
+ {
+ String parts[] = parser.next();
+ Assert.assertEquals(parts.length, 1);
+ Assert.assertEquals("1", parts[0]);
+ }
+ }
+
+ @DataProvider(name = "leadingWhiteSpaceData")
+ private Object[][] getLeadingWhiteSpaceData()
+ {
+ return new Object[][] {
+ {new File(testFile2)},
+ {IOUtil.openFileForReading(new File(testFile2))}
+ };
+ }
+
+
+ @Test(expectedExceptions= PicardException.class, dataProvider = "tooManyWordsData")
+ public void testTooManyWords(Object fileOrStream) {
+ BasicInputParser parser = fileOrStream instanceof File
+ ? new BasicInputParser(true, 3, (File)fileOrStream)
+ : new BasicInputParser(true, 3, (InputStream)fileOrStream);
+ if (parser.hasNext()) {
+ String parts[] = parser.next();
+ }
+ Assert.fail("Attempt to parse extra-long file should have failed but didn't.");
+ }
+
+ @DataProvider(name = "tooManyWordsData")
+ private Object[][] getTooManyWordsData()
+ {
+ return new Object[][] {
+ {new File(testFile1)},
+ {IOUtil.openFileForReading(new File(testFile1))}
+ };
+ }
+
+ @Test(dataProvider = "tabbedData")
+ public void testTabbedFileParser(Object fileOrStream) {
+ TabbedInputParser parser = fileOrStream instanceof File
+ ? new TabbedInputParser(false, (File)fileOrStream)
+ : new TabbedInputParser(false, (InputStream)fileOrStream);
+ while (parser.hasNext()) {
+ String parts[] = parser.next();
+ for (int i = 0; i < parts.length; i++) {
+ if (parts[i] != null && !parts[i].equals("")) {
+ Assert.assertEquals(parts[i].trim(), String.valueOf(i+1));
+ }
+ }
+ }
+ }
+
+ @DataProvider(name = "tabbedData")
+ private Object[][] getTabbedData()
+ {
+ return new Object[][] {
+ {new File(testFile4)},
+ {IOUtil.openFileForReading(new File(testFile4))}
+ };
+ }
+
+ @Test(dataProvider="data")
+ public void testWordCountCalculation(String line, boolean groupDelimiters, String name) {
+
+ WordCountTestParser parser = new WordCountTestParser();
+ parser.setDelimiter("\t ");
+ parser.setTreatGroupedDelimitersAsOne(groupDelimiters);
+ parser.calculateWordCount(line.getBytes());
+ Assert.assertEquals(parser.getWordCount(), 3, name);
+ }
+
+ @DataProvider(name = "data")
+ private Object[][] getWordCountCalculationData()
+ {
+ return new Object[][]{
+ {"1\t2\t3", false, "Tabs with all fields filled."},
+ {"1\t2\t", false, "Tabs with no final field."},
+ {"\t2\t3", false, "Tabs with no first field."},
+ {"\t2\t", false, "Tabs with no first or final field."},
+ {"1 2 3", true, "Spaces with all fields filled (grouping on)."},
+ {"1 2 3 ", true, "Spaces with no final field (grouping on)."},
+ {" 2 3 4", true, "Spaces with no first field (grouping on)."},
+ {" 2 ", false, "Spaces with no first or final field."}
+ };
+ }
+
+ /**
+ * Toy class for testing the word count functionality
+ */
+ private static class WordCountTestParser extends AbstractInputParser {
+
+ private char delimiters[] = null;
+
+ public WordCountTestParser() {
+ }
+
+ public void setDelimiter(String delim) {
+ delimiters = delim.toCharArray();
+ }
+
+ protected boolean isDelimiter(final byte b) {
+ for (int i = 0; i < delimiters.length; i++) {
+ if (b == delimiters[i]) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected byte[] readNextLine() { return new byte[0]; }
+ public String getFileName() { return null; }
+ public void close() {}
+ }
+}
diff --git a/src/tests/java/picard/util/UnsignedTypeUtilTest.java b/src/tests/java/picard/util/UnsignedTypeUtilTest.java
new file mode 100644
index 0000000..6ec16cc
--- /dev/null
+++ b/src/tests/java/picard/util/UnsignedTypeUtilTest.java
@@ -0,0 +1,75 @@
+package picard.util;
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+public class UnsignedTypeUtilTest {
+
+ @DataProvider(name="uByteData")
+ public Object [][] uByteData() {
+ return new Object [][]{
+ {(byte)0xFF, 255},
+ {(byte)0xFE, 254},
+ {(byte)0x80, 128},
+ {(byte)0x7F, 127},
+ {(byte)0x70, 112},
+ {(byte)0x02, 2},
+ {(byte)0x01, 1},
+ {(byte)0x00, 0},
+ };
+ }
+
+ @DataProvider(name="uShortData")
+ public Object [][] uShortData() {
+ return new Object [][]{
+ {(short)0xFFFF, 65535},
+ {(short)0xFFFE, 65534},
+ {(short)0x8021, 32801},
+ {(short)0x7FFF, 32767},
+ {(short)0x5545, 21829},
+ {(short)0x0002, 2},
+ {(short)0x0001, 1},
+ {(short)0x0000, 0}
+ };
+ }
+
+ @DataProvider(name="uIntData")
+ public Object [][] uIntData() {
+ return new Object [][]{
+ {0xFFFFFFFF, 4294967295L},
+ {0xFFFFFFFE, 4294967294L},
+ {0x81014000, 2164342784L},
+ {0x7FFFFFFF, 2147483647L},
+ {0x10502100, 273686784L},
+ {0x00000002, 2L},
+ {0x00000001, 1L},
+ {0x00000000, 0L}
+ };
+ }
+
+ /** Convert an unsigned byte to a signed int */
+ @Test(dataProvider="uByteData")
+ public void uByteToIntTest(final byte unsignedByte, final int expectedInt) {
+ Assert.assertEquals(UnsignedTypeUtil.uByteToInt(unsignedByte), expectedInt);
+ }
+
+ /** Convert an unsigned byte to a signed short */
+ @Test(dataProvider="uByteData")
+ public void uByteToShortTest(final byte unsignedByte, final int expectedInt) {
+ final short expectedShort = (short) expectedInt;
+ Assert.assertEquals(UnsignedTypeUtil.uByteToShort(unsignedByte), expectedShort);
+ }
+
+ /** Convert an unsigned short to an Int */
+ @Test(dataProvider="uShortData")
+ public void uShortToIntTest(final short unsignedShort, final int expectedInt) {
+ Assert.assertEquals(UnsignedTypeUtil.uShortToInt(unsignedShort), expectedInt);
+ }
+
+ /** Convert an unsigned int to a long */
+ @Test(dataProvider="uIntData")
+ public void uIntToLongTest(final int unsignedInt, final long expectedLong) {
+ Assert.assertEquals(UnsignedTypeUtil.uIntToLong(unsignedInt), expectedLong);
+ }
+}
diff --git a/src/tests/java/picard/vcf/AbstractVcfMergingClpTester.java b/src/tests/java/picard/vcf/AbstractVcfMergingClpTester.java
new file mode 100644
index 0000000..b7a5c71
--- /dev/null
+++ b/src/tests/java/picard/vcf/AbstractVcfMergingClpTester.java
@@ -0,0 +1,174 @@
+package picard.vcf;
+
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextComparator;
+import htsjdk.variant.vcf.VCFFileReader;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgram;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+public abstract class AbstractVcfMergingClpTester {
+
+ protected static final String TEST_DATA_PATH = "testdata/picard/vcf/";
+
+ protected abstract CommandLineProgram getProgram();
+
+ protected void runClp(final List<File> inputs, final File output, final int expectedReturnCode) {
+ runClp(inputs, output, Collections.<String>emptyList(), expectedReturnCode);
+ }
+
+ protected void runClp(final List<File> inputs, final File output, final List<String> otherArguments, final int expectedReturnCode) {
+ final ArrayList<String> arguments = new ArrayList<String>();
+ for (final File input : inputs) {
+ arguments.add("INPUT=" + input);
+ }
+ arguments.add("OUTPUT=" + output);
+ for (final String argument : otherArguments) {
+ arguments.add(argument);
+ }
+ Assert.assertEquals(getProgram().instanceMain(arguments.toArray(new String[arguments.size()])), expectedReturnCode);
+ }
+
+ @Test (expectedExceptions = IllegalArgumentException.class)
+ public void testFailsOnDissimilarContigLists() {
+ final File dissimilarContigs = new File(TEST_DATA_PATH, "CEUTrio-indels-dissimilar-contigs.vcf");
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ final File output = new File("/dev/null/blah");
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+
+ runClp(Arrays.asList(dissimilarContigs, snpInputFile), output, indexing, 0);
+ }
+
+ @Test (expectedExceptions = IllegalArgumentException.class)
+ public void testFailsOnNoContigList() {
+ final File contiglessIndelFile = new File(TEST_DATA_PATH, "CEUTrio-indels-no-contigs.vcf");
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ final File output = new File("/dev/null");
+
+ runClp(Arrays.asList(contiglessIndelFile, snpInputFile), output, 1);
+ }
+
+ @Test (expectedExceptions = IllegalArgumentException.class)
+ public void testFailsOnDissimilarSampleLists() {
+ final File badSampleIndelFile = new File(TEST_DATA_PATH, "CEUTrio-indels-bad-samples.vcf");
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ final File output = new File("/dev/null");
+
+ runClp(Arrays.asList(badSampleIndelFile, snpInputFile), output, 1);
+ }
+
+ @Test
+ public void testMergeIndelsSnps() throws IOException {
+ final File indelInputFile = new File(TEST_DATA_PATH, "CEUTrio-indels.vcf");
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ final File output = File.createTempFile("merge-indels-snps-test-output.", ".vcf");
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+ output.deleteOnExit();
+
+ final Queue<String> indelContigPositions = loadContigPositions(indelInputFile);
+ final Queue<String> snpContigPositions = loadContigPositions(snpInputFile);
+
+ runClp(Arrays.asList(indelInputFile, snpInputFile), output, indexing, 0);
+ validateSnpAndIndelResults(output, indelContigPositions, snpContigPositions);
+ }
+
+ /**
+ * Make sure that the order of the output file is identical to the order
+ * of the input files by iterating through the output, making sure that,
+ * if the context is an indel (snp), the next genomic position in the indel
+ * (snp) queue is the same. Also make sure that the context is in the order
+ * specified by the input files.
+ */
+ private void validateSnpAndIndelResults(final File output, final Queue<String> indelContigPositions, final Queue<String> snpContigPositions) {
+ final VCFFileReader outputReader = new VCFFileReader(output, false);
+ final VariantContextComparator outputComparator = outputReader.getFileHeader().getVCFRecordComparator();
+ VariantContext last = null;
+ final CloseableIterator<VariantContext> iterator = outputReader.iterator();
+ while (iterator.hasNext()) {
+ final VariantContext outputContext = iterator.next();
+ if (outputContext.isIndel()) Assert.assertEquals(getContigPosition(outputContext), indelContigPositions.poll());
+ if (outputContext.isSNP()) Assert.assertEquals(getContigPosition(outputContext), snpContigPositions.poll());
+ if (last != null) Assert.assertTrue(outputComparator.compare(last, outputContext) <= 0);
+ last = outputContext;
+ }
+ iterator.close();
+
+ // We should have polled everything off the indel (snp) queues
+ Assert.assertEquals(indelContigPositions.size(), 0);
+ Assert.assertEquals(snpContigPositions.size(), 0);
+ }
+
+ @Test
+ public void testMergeRandomScatter() throws IOException {
+ final File zero = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-0.vcf");
+ final File one = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-1.vcf");
+ final File two = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-2.vcf");
+ final File three = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-3.vcf");
+ final File four = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-4.vcf");
+ final File five = new File(TEST_DATA_PATH, "CEUTrio-random-scatter-5.vcf");
+ final List<File> inputs = Arrays.asList(zero, one, two, three, four, five);
+
+ final List<Queue<String>> positionQueues = new ArrayList<Queue<String>>(6);
+ positionQueues.add(0, loadContigPositions(zero));
+ positionQueues.add(1, loadContigPositions(one));
+ positionQueues.add(2, loadContigPositions(two));
+ positionQueues.add(3, loadContigPositions(three));
+ positionQueues.add(4, loadContigPositions(four));
+ positionQueues.add(5, loadContigPositions(five));
+
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+ final File output = File.createTempFile("random-scatter-test-output.", ".vcf");
+ output.deleteOnExit();
+
+ runClp(inputs, output, indexing, 0);
+ validateResultsForMultipleInputs(output, positionQueues);
+ }
+
+ private void validateResultsForMultipleInputs(final File output, final List<Queue<String>> positionQueues) {
+ final VCFFileReader outputReader = new VCFFileReader(output, false);
+ final VariantContextComparator outputComparator = outputReader.getFileHeader().getVCFRecordComparator();
+ VariantContext last = null;
+ final CloseableIterator<VariantContext> iterator = outputReader.iterator();
+ while (iterator.hasNext()) {
+ final VariantContext outputContext = iterator.next();
+ final String position = getContigPosition(outputContext);
+ for (final Queue<String> positionQueue : positionQueues) {
+ if (position.equals(positionQueue.peek())) {
+ positionQueue.poll();
+ break;
+ }
+ }
+ if (last != null) Assert.assertTrue(outputComparator.compare(last, outputContext) <= 0);
+ last = outputContext;
+ }
+ iterator.close();
+
+ for (final Queue<String> positionQueue : positionQueues) {
+ Assert.assertEquals(positionQueue.size(), 0);
+ }
+ }
+
+ static Queue<String> loadContigPositions(final File inputFile) {
+ final VCFFileReader reader = new VCFFileReader(inputFile, false);
+ final Queue<String> contigPositions = new LinkedList<String>();
+ final CloseableIterator<VariantContext> iterator = reader.iterator();
+ while (iterator.hasNext()) contigPositions.add(getContigPosition(iterator.next()));
+ iterator.close();
+ reader.close();
+ return contigPositions;
+ }
+
+ static String getContigPosition(final VariantContext context) {
+ return context.getChr() + "-" + Integer.toString(context.getStart());
+ }
+}
diff --git a/src/tests/java/picard/vcf/CollectVariantCallingMetricsTest.java b/src/tests/java/picard/vcf/CollectVariantCallingMetricsTest.java
new file mode 100644
index 0000000..80feaa8
--- /dev/null
+++ b/src/tests/java/picard/vcf/CollectVariantCallingMetricsTest.java
@@ -0,0 +1,119 @@
+package picard.vcf;
+
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import htsjdk.samtools.metrics.MetricsFile;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Test for CollectVariantCallingMetrics
+ *
+ * @author Joel Thibault (thibault at broadinstitute dot org)
+ */
+public class CollectVariantCallingMetricsTest {
+ private static final File TEST_DATA_DIR = new File("testdata/picard/vcf");
+
+ @Test
+ public void testMetricsTiny() throws IOException {
+ final File dbSnpFile = new File(TEST_DATA_DIR, "mini.dbsnp.vcf");
+ final File vcfFile = new File(TEST_DATA_DIR, "mini.vcf");
+
+ final File outFile = new File(TEST_DATA_DIR, "vcmetrics_tiny");
+ final File summaryFile = new File(TEST_DATA_DIR, "vcmetrics_tiny.variant_calling_summary_metrics");
+ final File detailFile = new File(TEST_DATA_DIR, "vcmetrics_tiny.variant_calling_detail_metrics");
+
+ summaryFile.deleteOnExit();
+ detailFile.deleteOnExit();
+
+ final CollectVariantCallingMetrics program = new CollectVariantCallingMetrics();
+ program.INPUT = vcfFile;
+ program.DBSNP = dbSnpFile;
+ program.OUTPUT = outFile;
+
+ Assert.assertEquals(program.doWork(), 0);
+
+ final MetricsFile<CollectVariantCallingMetrics.VariantCallingSummaryMetrics, Comparable<?>> summary = new MetricsFile<CollectVariantCallingMetrics.VariantCallingSummaryMetrics, Comparable<?>>();
+ summary.read(new FileReader(summaryFile));
+
+ boolean parsedSummary = false;
+ for (final CollectVariantCallingMetrics.VariantCallingSummaryMetrics metrics : summary.getMetrics()) {
+ Assert.assertEquals(metrics.TOTAL_SNPS, 597);
+ Assert.assertEquals(metrics.NOVEL_SNPS, 265);
+ Assert.assertEquals(metrics.NUM_IN_DB_SNP, 332);
+
+ Assert.assertEquals(metrics.PCT_DBSNP, 0.5561140179634094, 0.01);
+ Assert.assertEquals(metrics.DBSNP_TITV, 3.955224, 0.01);
+ Assert.assertEquals(metrics.NOVEL_TITV, 3.206349, 0.01);
+
+ Assert.assertEquals(metrics.TOTAL_INDELS, 29);
+ Assert.assertEquals(metrics.NOVEL_INDELS, 11);
+ Assert.assertEquals(metrics.NUM_IN_DB_SNP_INDELS, 18);
+
+ Assert.assertEquals(metrics.PCT_DBSNP_INDELS, 0.62069, 0.01);
+ Assert.assertEquals(metrics.DBSNP_INS_DEL_RATIO, 0.125, 0.01);
+ Assert.assertEquals(metrics.NOVEL_INS_DEL_RATIO, 0.375, 0.01);
+ Assert.assertEquals(metrics.NUM_SINGLETONS, 245);
+
+ parsedSummary = true;
+ }
+
+ Assert.assertTrue(parsedSummary, "Did not parse summary metrics.");
+
+ final MetricsFile<CollectVariantCallingMetrics.VariantCallingDetailMetrics, Comparable<?>> detail = new MetricsFile<CollectVariantCallingMetrics.VariantCallingDetailMetrics, Comparable<?>>();
+ detail.read(new FileReader(detailFile));
+ final List<CollectVariantCallingMetrics.VariantCallingDetailMetrics> detailMetrics = detail.getMetrics();
+ for (final CollectVariantCallingMetrics.VariantCallingDetailMetrics metrics : detail.getMetrics()) {
+ if (metrics.SAMPLE_ALIAS.equals("HG00160")) {
+ Assert.assertEquals(metrics.HET_HOMVAR_RATIO, 0.72549, 0.0001);
+ Assert.assertEquals(metrics.TOTAL_SNPS, 81);
+ Assert.assertEquals(metrics.NUM_IN_DB_SNP, 44);
+ Assert.assertEquals(metrics.NOVEL_SNPS, 37);
+ Assert.assertEquals(metrics.PCT_DBSNP, 0.543210, 0.01);
+ Assert.assertEquals(metrics.DBSNP_TITV, 6.333333, 0.01);
+ Assert.assertEquals(metrics.NOVEL_TITV, 2.7, 0.01);
+ Assert.assertEquals(metrics.TOTAL_INDELS, 6);
+ Assert.assertEquals(metrics.NOVEL_INDELS, 3);
+ Assert.assertEquals(metrics.NUM_IN_DB_SNP_INDELS, 3);
+ Assert.assertEquals(metrics.PCT_DBSNP_INDELS, 0.5, 0.01);
+ Assert.assertEquals(metrics.DBSNP_INS_DEL_RATIO, 0.0, 0.01);
+ Assert.assertEquals(metrics.NOVEL_INS_DEL_RATIO, 0.0, 0.01);
+ Assert.assertEquals(metrics.TOTAL_MULTIALLELIC_SNPS, 0.0, 0.01);
+ Assert.assertEquals(metrics.NUM_IN_DB_SNP_MULTIALLELIC, 0, 0.01);
+ Assert.assertEquals(metrics.TOTAL_COMPLEX_INDELS, 1.0, 0.01);
+ Assert.assertEquals(metrics.NUM_IN_DB_SNP_COMPLEX_INDELS, 0, 0.01);
+ Assert.assertEquals(metrics.SNP_REFERENCE_BIAS, 0.510204, 0.01);
+ Assert.assertEquals(metrics.NUM_SINGLETONS, 3);
+ }
+ }
+
+ Assert.assertEquals(detailMetrics.size(), 50, "Did not parse the desired number of detail metrics.");
+ }
+}
diff --git a/src/tests/java/picard/vcf/GenotypeConcordanceGA4GHSchemeTest.java b/src/tests/java/picard/vcf/GenotypeConcordanceGA4GHSchemeTest.java
new file mode 100644
index 0000000..fc636de
--- /dev/null
+++ b/src/tests/java/picard/vcf/GenotypeConcordanceGA4GHSchemeTest.java
@@ -0,0 +1,157 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+import htsjdk.samtools.util.FormatUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.vcf.GenotypeConcordanceStates.TruthAndCallStates;
+import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+/**
+ * Created by kbergin on 6/24/15.
+ */
+public class GenotypeConcordanceGA4GHSchemeTest{
+ private static final File TEST_DATA_PATH = new File("testdata/picard/vcf/");
+ final File ceuTrioSnpsVcf = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ private final GenotypeConcordanceSchemeFactory schemeFactory = new GenotypeConcordanceSchemeFactory();
+ final GenotypeConcordanceScheme scheme = schemeFactory.getScheme(false);
+ final List<File> intervalList = Collections.singletonList(new File(TEST_DATA_PATH, "IntervalListChr1Small.interval_list"));
+
+ @Test
+ public void testGA4GHScheme() throws Exception {
+
+ final GenotypeConcordanceCounts concordanceCounts = GenotypeConcordanceTest.getGenotypeConcordanceCounts(ceuTrioSnpsVcf, ceuTrioSnpsVcf, "NA12878", false, null);
+ concordanceCounts.validateCountsAgainstScheme(scheme);
+
+ final Map<GenotypeConcordanceStates.TruthAndCallStates, Integer> nonZeroCounts = new HashMap<GenotypeConcordanceStates.TruthAndCallStates, Integer>();
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 104);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HOM_VAR1, GenotypeConcordanceStates.CallState.HOM_VAR1), 59);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.VC_FILTERED, GenotypeConcordanceStates.CallState.VC_FILTERED), 40);
+
+ GenotypeConcordanceTest.assertNonZeroCountsAgree(concordanceCounts, nonZeroCounts);
+
+ final FormatUtil fmt = new FormatUtil();
+
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HET_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HET_CALL_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HOM_VAR_CALL_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.VAR_CALL_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateGenotypeConcordance(scheme, true)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateNonRefGenotypeConcordance(scheme, true)), "1");
+ }
+
+ @Test
+ public void testGA4GHSchemeDiffSamples() throws Exception {
+
+ final GenotypeConcordanceCounts concordanceCounts = GenotypeConcordanceTest.getGenotypeConcordanceCounts(ceuTrioSnpsVcf, ceuTrioSnpsVcf, "NA12891", false, null);
+ concordanceCounts.validateCountsAgainstScheme(scheme);
+
+ final Map<GenotypeConcordanceStates.TruthAndCallStates, Integer> nonZeroCounts = new HashMap<GenotypeConcordanceStates.TruthAndCallStates, Integer>();
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HOM_REF, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 31);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.HOM_REF), 30);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 50);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.HOM_VAR1), 24);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HOM_VAR1, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 18);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HOM_VAR1, GenotypeConcordanceStates.CallState.HOM_VAR1), 41);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.VC_FILTERED, GenotypeConcordanceStates.CallState.VC_FILTERED), 49);
+
+ GenotypeConcordanceTest.assertNonZeroCountsAgree(concordanceCounts, nonZeroCounts);
+
+ final FormatUtil fmt = new FormatUtil();
+
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HET_TRUTH_STATES)), "0.711538");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HET_CALL_STATES)), "0.686869");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "0.766234");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HOM_VAR_CALL_STATES)), "0.730337");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "0.734807");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.VAR_CALL_STATES)), "0.707447");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "0.668675");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateGenotypeConcordance(scheme, true)), "0.576132");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateNonRefGenotypeConcordance(scheme, true)), "0.469072");
+ }
+
+ @Test
+ public void testGA4GHSchemeWithIntervals() throws Exception {
+
+ final GenotypeConcordanceCounts concordanceCounts = GenotypeConcordanceTest.getGenotypeConcordanceCounts(ceuTrioSnpsVcf, ceuTrioSnpsVcf, "NA12878", false, intervalList);
+ concordanceCounts.validateCountsAgainstScheme(scheme);
+
+ final Map<GenotypeConcordanceStates.TruthAndCallStates, Integer> nonZeroCounts = new HashMap<GenotypeConcordanceStates.TruthAndCallStates, Integer>();
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 1);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.VC_FILTERED, GenotypeConcordanceStates.CallState.VC_FILTERED), 2);
+
+ GenotypeConcordanceTest.assertNonZeroCountsAgree(concordanceCounts, nonZeroCounts);
+
+ final FormatUtil fmt = new FormatUtil();
+
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HET_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HET_CALL_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HOM_VAR_CALL_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.VAR_CALL_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateGenotypeConcordance(scheme, true)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateNonRefGenotypeConcordance(scheme, true)), "1");
+ }
+
+ @Test
+ public void testGA4GHSchemeDiffSamplesWithIntervals() throws Exception {
+
+ final GenotypeConcordanceCounts concordanceCounts = GenotypeConcordanceTest.getGenotypeConcordanceCounts(ceuTrioSnpsVcf, ceuTrioSnpsVcf, "NA12891", false, intervalList);
+ concordanceCounts.validateCountsAgainstScheme(scheme);
+
+ final Map<GenotypeConcordanceStates.TruthAndCallStates, Integer> nonZeroCounts = new HashMap<GenotypeConcordanceStates.TruthAndCallStates, Integer>();
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HOM_REF, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 1);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 1);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.VC_FILTERED, GenotypeConcordanceStates.CallState.VC_FILTERED), 2);
+
+ GenotypeConcordanceTest.assertNonZeroCountsAgree(concordanceCounts, nonZeroCounts);
+
+ final FormatUtil fmt = new FormatUtil();
+
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HET_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HET_CALL_STATES)), "0.5");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HOM_VAR_CALL_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.VAR_CALL_STATES)), "0.5");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "0.666667");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateGenotypeConcordance(scheme, true)), "0.75");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateNonRefGenotypeConcordance(scheme, true)), "0.5");
+ }
+}
\ No newline at end of file
diff --git a/src/tests/java/picard/vcf/GenotypeConcordanceGA4GHSchemeWithMissingTest.java b/src/tests/java/picard/vcf/GenotypeConcordanceGA4GHSchemeWithMissingTest.java
new file mode 100644
index 0000000..d97f4fd
--- /dev/null
+++ b/src/tests/java/picard/vcf/GenotypeConcordanceGA4GHSchemeWithMissingTest.java
@@ -0,0 +1,79 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+import htsjdk.samtools.util.FormatUtil;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.vcf.GenotypeConcordanceStates.TruthAndCallStates;
+import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+/**
+ * Created by kbergin on 6/24/15.
+ */
+public class GenotypeConcordanceGA4GHSchemeWithMissingTest{
+ private static final File TEST_DATA_PATH = new File("testdata/picard/vcf/");
+ final File ceuTrioSNPSVCF = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ final File nistTruthVCF = new File(TEST_DATA_PATH, "NIST.selected.vcf");
+ private final GenotypeConcordanceSchemeFactory schemeFactory = new GenotypeConcordanceSchemeFactory();
+ final GenotypeConcordanceScheme scheme = schemeFactory.getScheme(true);
+ final List<File> intervalList = Collections.singletonList(new File(TEST_DATA_PATH, "IntervalList1PerChrom.interval_list"));
+
+ @Test
+ public void testMissingHomRefSchemeWithIntervals() {
+ final GenotypeConcordanceCounts concordanceCounts = GenotypeConcordanceTest.getGenotypeConcordanceCounts(nistTruthVCF, ceuTrioSNPSVCF, "NA12878", true, intervalList);
+ concordanceCounts.validateCountsAgainstScheme(scheme);
+
+ final Map<GenotypeConcordanceStates.TruthAndCallStates, Integer> nonZeroCounts = new HashMap<GenotypeConcordanceStates.TruthAndCallStates, Integer>();
+
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.MISSING, GenotypeConcordanceStates.CallState.MISSING), 63001594);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.MISSING, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 1);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.MISSING, GenotypeConcordanceStates.CallState.VC_FILTERED), 2);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.MISSING), 1);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HET_REF_VAR1, GenotypeConcordanceStates.CallState.HET_REF_VAR1), 11);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HOM_VAR1, GenotypeConcordanceStates.CallState.MISSING), 4);
+ nonZeroCounts.put(new TruthAndCallStates(GenotypeConcordanceStates.TruthState.HOM_VAR1, GenotypeConcordanceStates.CallState.HOM_VAR1), 5);
+
+ GenotypeConcordanceTest.assertNonZeroCountsAgree(concordanceCounts, nonZeroCounts);
+
+ final FormatUtil fmt = new FormatUtil();
+
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HET_TRUTH_STATES)), "0.916667");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HET_CALL_STATES)), "0.916667");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "0.555556");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.HOM_VAR_CALL_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.HOM_VAR_TRUTH_STATES)), "?");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSensitivity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "0.761905");
+ Assert.assertEquals(fmt.format(concordanceCounts.Ppv(scheme, GenotypeConcordanceCounts.VAR_CALL_STATES)), "0.941176");
+ Assert.assertEquals(fmt.format(concordanceCounts.getSpecificity(scheme, GenotypeConcordanceCounts.VAR_TRUTH_STATES)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateGenotypeConcordance(scheme, true)), "1");
+ Assert.assertEquals(fmt.format(concordanceCounts.calculateNonRefGenotypeConcordance(scheme, true)), "0.727273");
+ }
+
+}
diff --git a/src/tests/java/picard/vcf/GenotypeConcordanceTest.java b/src/tests/java/picard/vcf/GenotypeConcordanceTest.java
new file mode 100644
index 0000000..608f0a9
--- /dev/null
+++ b/src/tests/java/picard/vcf/GenotypeConcordanceTest.java
@@ -0,0 +1,495 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package picard.vcf;
+
+import htsjdk.samtools.metrics.MetricsFile;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.variant.variantcontext.Allele;
+import htsjdk.variant.variantcontext.Genotype;
+import htsjdk.variant.variantcontext.GenotypeBuilder;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextBuilder;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import picard.vcf.GenotypeConcordanceStates.CallState;
+import picard.vcf.GenotypeConcordanceStates.TruthAndCallStates;
+import picard.vcf.GenotypeConcordanceStates.TruthState;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class GenotypeConcordanceTest {
+
+ private static final File OUTPUT_DATA_PATH = IOUtil.createTempDir("GenotypeConcordanceTest", null);
+ private static final File TEST_DATA_PATH = new File("testdata/picard/vcf/");
+
+ // Test VCFs
+ private final File CEU_TRIOS_SNPS_VCF = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ private static final File CEU_TRIOS_INDELS_VCF = new File(TEST_DATA_PATH, "CEUTrio-indels.vcf");
+
+ // Test that missing sites flag for new scheme works for NIST data sets
+ private static final File NIST_MISSING_SITES_TRUTH_VCF = new File(TEST_DATA_PATH, "NIST.selected.vcf");
+
+ // Test that we notice a difference on the first line
+ private static final File CEU_TRIOS_SNPS_FIRST_LINE_DIFF_VCF = new File(TEST_DATA_PATH, "CEUTrio-snps_first_line_diff.vcf");
+
+ // Test that we notice a difference on the last line
+ private static final File CEU_TRIOS_SNPS_LAST_LINE_DIFF_VCF = new File(TEST_DATA_PATH, "CEUTrio-snps_last_line_diff.vcf");
+
+ // Test that we notice a deleted line
+ private static final File CEU_TRIOS_SNPS_DEL_LINE_VCF = new File(TEST_DATA_PATH, "CEUTrio-snps_del_line.vcf");
+
+ // Existing/expected base metrics file names
+ private static final String CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC = "CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff";
+ private static final String CEU_TRIOS_INDELS_VS_CEU_TRIOS_INDELS_GC = "CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff";
+ private static final String CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_FIRST_LINE_DIFF_GC = "CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff";
+ private static final String CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_LAST_LINE_DIFF_GC = "CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff";
+ private static final String CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_DEL_LINE_GC = "CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff";
+ private static final String CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC_ALL_ROWS = "CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows";
+ private static final String CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC_MIN_GQ = "CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq";
+ private static final String CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC_MIN_DP = "CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp";
+ private static final String NIST_TRUTH_SNPS_VS_CEU_TRIOS_SNPS_GC = "NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff";
+
+ private static final String TRUTH_SAMPLE_NAME = "Foo";
+ private static final String CALL_SAMPLE_NAME = "Foo";
+
+ // A [ref] / T at 10
+ private static final String snpLoc = "chr1";
+ private static final int snpLocStart = 10;
+ private static final int snpLocStop = 10;
+
+ private static final Allele Aref = Allele.create("A", true);
+ private static final Allele C = Allele.create("C");
+ private static final Allele G = Allele.create("G");
+ private static final Allele T = Allele.create("T");
+
+ private static final Allele AA = Allele.create("AA");
+ private static final Allele AAA = Allele.create("AAA");
+ private static final Allele AAAA = Allele.create("AAAA");
+ private static final Allele AAAAA = Allele.create("AAAAA");
+
+ @AfterClass
+ public void tearDown() {
+ IOUtil.deleteDirectoryTree(OUTPUT_DATA_PATH);
+ }
+
+ @DataProvider(name = "genotypeConcordanceTestFileData")
+ public Object[][] getGenotypeConcordanceTestFileData() {
+ return new Object[][]{
+ {CEU_TRIOS_SNPS_VCF, "NA12878", CEU_TRIOS_SNPS_VCF, "NA12878", null, null, false, false, CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC},
+ {CEU_TRIOS_INDELS_VCF, "NA12878", CEU_TRIOS_INDELS_VCF, "NA12878", null, null, false, false, CEU_TRIOS_INDELS_VS_CEU_TRIOS_INDELS_GC},
+ {CEU_TRIOS_SNPS_VCF, "NA12878", CEU_TRIOS_SNPS_FIRST_LINE_DIFF_VCF, "NA12878", null, null, false, false, CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_FIRST_LINE_DIFF_GC},
+ {CEU_TRIOS_SNPS_VCF, "NA12878", CEU_TRIOS_SNPS_LAST_LINE_DIFF_VCF, "NA12878", null, null, false, false, CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_LAST_LINE_DIFF_GC},
+ {CEU_TRIOS_SNPS_VCF, "NA12878", CEU_TRIOS_SNPS_DEL_LINE_VCF, "NA12878", null, null, false, false, CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_DEL_LINE_GC},
+ {CEU_TRIOS_SNPS_VCF, "NA12878", CEU_TRIOS_SNPS_VCF, "NA12878", null, null, true, false, CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC_ALL_ROWS},
+ {CEU_TRIOS_SNPS_VCF, "NA12878", CEU_TRIOS_SNPS_VCF, "NA12891", 40, null, false, false, CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC_MIN_GQ},
+ {CEU_TRIOS_SNPS_VCF, "NA12878", CEU_TRIOS_SNPS_VCF, "NA12891", null, 40, false, false, CEU_TRIOS_SNPS_VS_CEU_TRIOS_SNPS_GC_MIN_DP},
+ {NIST_MISSING_SITES_TRUTH_VCF, "NA12878", CEU_TRIOS_SNPS_VCF, "NA12878", null, null, false, true, NIST_TRUTH_SNPS_VS_CEU_TRIOS_SNPS_GC}
+ };
+ }
+
+ @Test(dataProvider = "genotypeConcordanceTestFileData")
+ public void testGenotypeConcordance(final File vcf1, final String sample1, final File vcf2, final String sample2,
+ final Integer minGq, final Integer minDp, final boolean outputAllRows, final boolean missingSitesFlag,
+ final String expectedOutputFileBaseName) throws Exception {
+ final File outputBaseFileName = new File(OUTPUT_DATA_PATH, "actualGtConc");
+ final File outputSummaryFile = new File(outputBaseFileName.getAbsolutePath() + GenotypeConcordance.SUMMARY_METRICS_FILE_EXTENSION);
+ final File outputDetailsFile = new File(outputBaseFileName.getAbsolutePath() + GenotypeConcordance.DETAILED_METRICS_FILE_EXTENSION);
+ final File outputContingencyFile = new File(outputBaseFileName.getAbsolutePath() + GenotypeConcordance.CONTINGENCY_METRICS_FILE_EXTENSION);
+ outputSummaryFile.deleteOnExit();
+ outputDetailsFile.deleteOnExit();
+ outputContingencyFile.deleteOnExit();
+
+ final GenotypeConcordance genotypeConcordance = new GenotypeConcordance();
+ genotypeConcordance.TRUTH_VCF = vcf1;
+ genotypeConcordance.TRUTH_SAMPLE = sample1;
+ genotypeConcordance.CALL_VCF = vcf2;
+ genotypeConcordance.CALL_SAMPLE = sample2;
+ if (minGq != null) genotypeConcordance.MIN_GQ = minGq;
+ if (minDp != null) genotypeConcordance.MIN_DP = minDp;
+ genotypeConcordance.OUTPUT_ALL_ROWS = outputAllRows;
+ genotypeConcordance.OUTPUT = outputBaseFileName;
+ genotypeConcordance.MISSING_SITES_HOM_REF = missingSitesFlag;
+ if (missingSitesFlag) genotypeConcordance.INTERVALS = Collections.singletonList(new File(TEST_DATA_PATH, "IntervalList1PerChrom.interval_list"));
+
+ Assert.assertEquals(genotypeConcordance.instanceMain(new String[0]), 0);
+ assertMetricsFileEqual(outputSummaryFile, new File(TEST_DATA_PATH, expectedOutputFileBaseName + GenotypeConcordance.SUMMARY_METRICS_FILE_EXTENSION));
+ assertMetricsFileEqual(outputDetailsFile, new File(TEST_DATA_PATH, expectedOutputFileBaseName + GenotypeConcordance.DETAILED_METRICS_FILE_EXTENSION));
+ assertMetricsFileEqual(outputContingencyFile, new File(TEST_DATA_PATH, expectedOutputFileBaseName + GenotypeConcordance.CONTINGENCY_METRICS_FILE_EXTENSION));
+ }
+
+ private void assertMetricsFileEqual(final File actualMetricsFile, final File expectedMetricsFile) throws FileNotFoundException {
+ // Actual metrics file
+ final MetricsFile<GenotypeConcordanceSummaryMetrics, Comparable<?>> actual = new MetricsFile<GenotypeConcordanceSummaryMetrics, Comparable<?>>();
+ actual.read(new FileReader(actualMetricsFile));
+
+ // Expected metrics file
+ final MetricsFile<GenotypeConcordanceSummaryMetrics, Comparable<?>> expected = new MetricsFile<GenotypeConcordanceSummaryMetrics, Comparable<?>>();
+ expected.read(new FileReader(expectedMetricsFile));
+
+ // Note - cannot use .equals as it calls .areHeadersEqual and they are not since the timestamp (at a minimum is different)
+ Assert.assertTrue(expected.areMetricsEqual(actual));
+ Assert.assertTrue(expected.areHistogramsEqual(actual));
+ }
+
+ public static GenotypeConcordanceCounts getGenotypeConcordanceCounts(final File truthVCF, final File callVCF, final String callSample, final boolean missingSitesFlag, List<File> intervalFiles){
+ //gets the Genotype Concordance Counts for the detail tests for each scheme
+ final File outputBaseFileName = new File(OUTPUT_DATA_PATH, "actualGtConc");
+ final File outputSummaryFile = new File(outputBaseFileName.getAbsolutePath() + GenotypeConcordance.SUMMARY_METRICS_FILE_EXTENSION);
+ final File outputDetailsFile = new File(outputBaseFileName.getAbsolutePath() + GenotypeConcordance.DETAILED_METRICS_FILE_EXTENSION);
+ outputSummaryFile.deleteOnExit();
+ outputDetailsFile.deleteOnExit();
+
+ final GenotypeConcordance genotypeConcordance = new GenotypeConcordance();
+ genotypeConcordance.TRUTH_VCF = truthVCF;
+ genotypeConcordance.TRUTH_SAMPLE = "NA12878";
+ genotypeConcordance.CALL_VCF = callVCF;
+ genotypeConcordance.CALL_SAMPLE = callSample;
+ genotypeConcordance.MISSING_SITES_HOM_REF = missingSitesFlag;
+ genotypeConcordance.INTERVALS = intervalFiles;
+ genotypeConcordance.OUTPUT = outputBaseFileName;
+
+ Assert.assertEquals(genotypeConcordance.instanceMain(new String[0]), 0);
+
+ return genotypeConcordance.getSnpCounter();
+ }
+
+ public static void assertNonZeroCountsAgree(final GenotypeConcordanceCounts counter, final Map<TruthAndCallStates, Integer> expectedCountMap) {
+ for (final TruthState truthState : TruthState.values()) {
+ for (final CallState callState : CallState.values()) {
+ Integer expectedCount = expectedCountMap.get(new TruthAndCallStates(truthState, callState));
+ if (expectedCount == null) expectedCount = 0;
+ Assert.assertEquals(counter.getCount(truthState, callState), expectedCount.intValue());
+ }
+ }
+ }
+
+ @DataProvider(name = "genotypeConcordanceDetermineStateDataProvider")
+ public Object[][] genotypeConcordanceDetermineStateDataProvider() {
+ final Object[][] originalUnitTestData = new Object[][]{
+ {Aref, Aref, TruthState.HOM_REF, Aref, Aref, CallState.HOM_REF},
+
+ {Aref, Aref, TruthState.HOM_REF, Aref, C, CallState.HET_REF_VAR1},
+ {Aref, Aref, TruthState.HOM_REF, Aref, G, CallState.HET_REF_VAR1},
+ {Aref, Aref, TruthState.HOM_REF, Aref, T, CallState.HET_REF_VAR1},
+
+ {Aref, Aref, TruthState.HOM_REF, C, G, CallState.HET_VAR1_VAR2},
+ {Aref, Aref, TruthState.HOM_REF, C, T, CallState.HET_VAR1_VAR2},
+ {Aref, Aref, TruthState.HOM_REF, G, T, CallState.HET_VAR1_VAR2},
+
+ {Aref, Aref, TruthState.HOM_REF, C, C, CallState.HOM_VAR1},
+ {Aref, Aref, TruthState.HOM_REF, G, G, CallState.HOM_VAR1},
+ {Aref, Aref, TruthState.HOM_REF, T, T, CallState.HOM_VAR1},
+
+ //---
+ {Aref, C, TruthState.HET_REF_VAR1, Aref, Aref, CallState.HOM_REF},
+ {Aref, G, TruthState.HET_REF_VAR1, Aref, Aref, CallState.HOM_REF},
+ {Aref, T, TruthState.HET_REF_VAR1, Aref, Aref, CallState.HOM_REF},
+
+ {Aref, C, TruthState.HET_REF_VAR1, Aref, C, CallState.HET_REF_VAR1},
+ {Aref, C, TruthState.HET_REF_VAR1, Aref, G, CallState.HET_REF_VAR2},
+ {Aref, C, TruthState.HET_REF_VAR1, Aref, T, CallState.HET_REF_VAR2},
+ {Aref, G, TruthState.HET_REF_VAR1, Aref, C, CallState.HET_REF_VAR2},
+ {Aref, G, TruthState.HET_REF_VAR1, Aref, G, CallState.HET_REF_VAR1},
+ {Aref, G, TruthState.HET_REF_VAR1, Aref, T, CallState.HET_REF_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, Aref, C, CallState.HET_REF_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, Aref, G, CallState.HET_REF_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, Aref, T, CallState.HET_REF_VAR1},
+
+ {Aref, C, TruthState.HET_REF_VAR1, C, G, CallState.HET_VAR1_VAR2},
+ {Aref, C, TruthState.HET_REF_VAR1, C, T, CallState.HET_VAR1_VAR2},
+ {Aref, C, TruthState.HET_REF_VAR1, G, T, CallState.HET_VAR3_VAR4}, // Why isn't this called HET_VAR2_VAR3???
+ {Aref, G, TruthState.HET_REF_VAR1, C, G, CallState.HET_VAR1_VAR2},
+ {Aref, G, TruthState.HET_REF_VAR1, C, T, CallState.HET_VAR3_VAR4},
+ {Aref, G, TruthState.HET_REF_VAR1, G, T, CallState.HET_VAR1_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, C, G, CallState.HET_VAR3_VAR4},
+ {Aref, T, TruthState.HET_REF_VAR1, C, T, CallState.HET_VAR1_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, G, T, CallState.HET_VAR1_VAR2},
+
+ {Aref, C, TruthState.HET_REF_VAR1, C, C, CallState.HOM_VAR1},
+ {Aref, C, TruthState.HET_REF_VAR1, G, G, CallState.HOM_VAR2},
+ {Aref, C, TruthState.HET_REF_VAR1, T, T, CallState.HOM_VAR2},
+ {Aref, G, TruthState.HET_REF_VAR1, C, C, CallState.HOM_VAR2},
+ {Aref, G, TruthState.HET_REF_VAR1, G, G, CallState.HOM_VAR1},
+ {Aref, G, TruthState.HET_REF_VAR1, T, T, CallState.HOM_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, C, C, CallState.HOM_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, G, G, CallState.HOM_VAR2},
+ {Aref, T, TruthState.HET_REF_VAR1, T, T, CallState.HOM_VAR1},
+
+ //---
+ {C, G, TruthState.HET_VAR1_VAR2, Aref, Aref, CallState.HOM_REF},
+ {C, T, TruthState.HET_VAR1_VAR2, Aref, Aref, CallState.HOM_REF},
+ {G, T, TruthState.HET_VAR1_VAR2, Aref, Aref, CallState.HOM_REF},
+
+ {C, G, TruthState.HET_VAR1_VAR2, Aref, C, CallState.HET_REF_VAR1},
+ {C, G, TruthState.HET_VAR1_VAR2, Aref, G, CallState.HET_REF_VAR1},
+ {C, G, TruthState.HET_VAR1_VAR2, Aref, T, CallState.HET_REF_VAR3},
+ {C, T, TruthState.HET_VAR1_VAR2, Aref, C, CallState.HET_REF_VAR1},
+ {C, T, TruthState.HET_VAR1_VAR2, Aref, G, CallState.HET_REF_VAR3},
+ {C, T, TruthState.HET_VAR1_VAR2, Aref, T, CallState.HET_REF_VAR1},
+ {G, T, TruthState.HET_VAR1_VAR2, Aref, C, CallState.HET_REF_VAR3},
+ {G, T, TruthState.HET_VAR1_VAR2, Aref, G, CallState.HET_REF_VAR1},
+ {G, T, TruthState.HET_VAR1_VAR2, Aref, T, CallState.HET_REF_VAR1},
+
+ {C, G, TruthState.HET_VAR1_VAR2, C, C, CallState.HOM_VAR1},
+ {C, G, TruthState.HET_VAR1_VAR2, G, G, CallState.HOM_VAR1},
+ {C, G, TruthState.HET_VAR1_VAR2, T, T, CallState.HOM_VAR3},
+ {C, T, TruthState.HET_VAR1_VAR2, C, C, CallState.HOM_VAR1},
+ {C, T, TruthState.HET_VAR1_VAR2, G, G, CallState.HOM_VAR3},
+ {C, T, TruthState.HET_VAR1_VAR2, T, T, CallState.HOM_VAR1},
+ {G, T, TruthState.HET_VAR1_VAR2, C, C, CallState.HOM_VAR3},
+ {G, T, TruthState.HET_VAR1_VAR2, G, G, CallState.HOM_VAR1},
+ {G, T, TruthState.HET_VAR1_VAR2, T, T, CallState.HOM_VAR1},
+
+ {C, G, TruthState.HET_VAR1_VAR2, C, G, CallState.HET_VAR1_VAR2},
+ {C, G, TruthState.HET_VAR1_VAR2, C, T, CallState.HET_VAR1_VAR3},
+ {C, G, TruthState.HET_VAR1_VAR2, G, T, CallState.HET_VAR1_VAR3},
+ {C, T, TruthState.HET_VAR1_VAR2, C, G, CallState.HET_VAR1_VAR3},
+ {C, T, TruthState.HET_VAR1_VAR2, C, T, CallState.HET_VAR1_VAR2},
+ {C, T, TruthState.HET_VAR1_VAR2, G, T, CallState.HET_VAR1_VAR3},
+ {G, T, TruthState.HET_VAR1_VAR2, C, G, CallState.HET_VAR1_VAR3},
+ {G, T, TruthState.HET_VAR1_VAR2, C, T, CallState.HET_VAR1_VAR3},
+ {G, T, TruthState.HET_VAR1_VAR2, G, T, CallState.HET_VAR1_VAR2},
+
+ //---
+ {C, C, TruthState.HOM_VAR1, Aref, Aref, CallState.HOM_REF},
+ {G, G, TruthState.HOM_VAR1, Aref, Aref, CallState.HOM_REF},
+ {T, T, TruthState.HOM_VAR1, Aref, Aref, CallState.HOM_REF},
+
+ {C, C, TruthState.HOM_VAR1, Aref, C, CallState.HET_REF_VAR1},
+ {C, C, TruthState.HOM_VAR1, Aref, G, CallState.HET_REF_VAR2},
+ {C, C, TruthState.HOM_VAR1, Aref, T, CallState.HET_REF_VAR2},
+ {G, G, TruthState.HOM_VAR1, Aref, C, CallState.HET_REF_VAR2},
+ {G, G, TruthState.HOM_VAR1, Aref, G, CallState.HET_REF_VAR1},
+ {G, G, TruthState.HOM_VAR1, Aref, T, CallState.HET_REF_VAR2},
+ {T, T, TruthState.HOM_VAR1, Aref, C, CallState.HET_REF_VAR2},
+ {T, T, TruthState.HOM_VAR1, Aref, G, CallState.HET_REF_VAR2},
+ {T, T, TruthState.HOM_VAR1, Aref, T, CallState.HET_REF_VAR1},
+
+ {C, C, TruthState.HOM_VAR1, C, C, CallState.HOM_VAR1},
+ {C, C, TruthState.HOM_VAR1, G, G, CallState.HOM_VAR2},
+ {C, C, TruthState.HOM_VAR1, T, T, CallState.HOM_VAR2},
+ {G, G, TruthState.HOM_VAR1, C, C, CallState.HOM_VAR2},
+ {G, G, TruthState.HOM_VAR1, G, G, CallState.HOM_VAR1},
+ {G, G, TruthState.HOM_VAR1, T, T, CallState.HOM_VAR2},
+ {T, T, TruthState.HOM_VAR1, C, C, CallState.HOM_VAR2},
+ {T, T, TruthState.HOM_VAR1, G, G, CallState.HOM_VAR2},
+ {T, T, TruthState.HOM_VAR1, T, T, CallState.HOM_VAR1},
+
+ {C, C, TruthState.HOM_VAR1, C, G, CallState.HET_VAR1_VAR2},
+ {C, C, TruthState.HOM_VAR1, C, T, CallState.HET_VAR1_VAR2},
+ {C, C, TruthState.HOM_VAR1, G, T, CallState.HET_VAR3_VAR4},
+ {G, G, TruthState.HOM_VAR1, C, G, CallState.HET_VAR1_VAR2},
+ {G, G, TruthState.HOM_VAR1, C, T, CallState.HET_VAR3_VAR4},
+ {G, G, TruthState.HOM_VAR1, G, T, CallState.HET_VAR1_VAR2},
+ {T, T, TruthState.HOM_VAR1, C, G, CallState.HET_VAR3_VAR4},
+ {T, T, TruthState.HOM_VAR1, C, T, CallState.HET_VAR1_VAR2},
+ {T, T, TruthState.HOM_VAR1, G, T, CallState.HET_VAR1_VAR2},
+ // Some Indel Cases
+ {AA, AA, TruthState.HOM_VAR1, AAAA, AAAAA, CallState.HET_VAR3_VAR4},
+ {AA, AAA, TruthState.HET_VAR1_VAR2, AAAA, AAAAA, CallState.HET_VAR3_VAR4},
+
+ // Mixed Cases
+ {C, AA, TruthState.IS_MIXED, AAAA, AAAAA, CallState.HET_VAR1_VAR2},
+ {AA, C, TruthState.IS_MIXED, AAAA, AAAAA, CallState.HET_VAR1_VAR2},
+
+ {AA, AA, TruthState.HOM_VAR1, C, AAAAA, CallState.IS_MIXED},
+ {AA, AAA, TruthState.HET_VAR1_VAR2, AAAA, C, CallState.IS_MIXED},
+
+ // No Call cases
+ {Allele.NO_CALL, Aref, TruthState.NO_CALL, Aref, Aref, CallState.HOM_REF},
+ {Aref, Allele.NO_CALL, TruthState.NO_CALL, Aref, Aref, CallState.HOM_REF},
+ {Allele.NO_CALL, Allele.NO_CALL, TruthState.NO_CALL, Aref, Aref, CallState.HOM_REF},
+
+ {Aref, Aref, TruthState.HOM_REF, Allele.NO_CALL, Aref, CallState.NO_CALL},
+ {Aref, Aref, TruthState.HOM_REF, Aref, Allele.NO_CALL, CallState.NO_CALL},
+ {Aref, Aref, TruthState.HOM_REF, Allele.NO_CALL, Allele.NO_CALL, CallState.NO_CALL}
+ };
+ // Rebuild a new set of unit test data with all permutations of alleles.
+ final List<Object[]> allPermutationUnitTestDataList = new ArrayList<Object[]>();
+ for (final Object[] unitTestData : originalUnitTestData) {
+ allPermutationUnitTestDataList.add(unitTestData);
+ final Allele truthAllele1 = (Allele) unitTestData[0];
+ final Allele truthAllele2 = (Allele) unitTestData[1];
+ final TruthState expectedTruthState = (TruthState) unitTestData[2];
+ final Allele callAllele1 = (Allele) unitTestData[3];
+ final Allele callAllele2 = (Allele) unitTestData[4];
+ final CallState expectedCallState = (CallState) unitTestData[5];
+ if (!callAllele1.equals(callAllele2)) {
+ allPermutationUnitTestDataList.add(new Object[]{truthAllele1, truthAllele2, expectedTruthState, callAllele2, callAllele1, expectedCallState});
+ }
+ if (!truthAllele1.equals(truthAllele2)) {
+ allPermutationUnitTestDataList.add(new Object[]{truthAllele2, truthAllele1, expectedTruthState, callAllele1, callAllele2, expectedCallState});
+ if (!callAllele1.equals(callAllele2)) {
+ allPermutationUnitTestDataList.add(new Object[]{truthAllele2, truthAllele1, expectedTruthState, callAllele2, callAllele1, expectedCallState});
+ }
+ }
+ }
+ Object[][] allPermutationUnitTestData = new Object[allPermutationUnitTestDataList.size()][];
+ allPermutationUnitTestData = allPermutationUnitTestDataList.toArray(allPermutationUnitTestData);
+ return allPermutationUnitTestData;
+ }
+
+
+ @Test(dataProvider = "genotypeConcordanceDetermineStateDataProvider")
+ public void testGenotypeConcordanceDetermineState(final Allele truthAllele1, final Allele truthAllele2, final TruthState expectedTruthState,
+ final Allele callAllele1, final Allele callAllele2, final CallState expectedCallState) throws Exception {
+ final List<Allele> truthAlleles = makeUniqueListOfAlleles(truthAllele1, truthAllele2);
+ final Genotype truthGt = GenotypeBuilder.create(TRUTH_SAMPLE_NAME, Arrays.asList(truthAllele1, truthAllele2));
+
+ final VariantContext truthVariantContext = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, truthAlleles).genotypes(truthGt).make();
+
+ final List<Allele> callAlleles = makeUniqueListOfAlleles(callAllele1, callAllele2);
+ final Genotype callGt = GenotypeBuilder.create(CALL_SAMPLE_NAME, Arrays.asList(callAllele1, callAllele2));
+ final VariantContext callVariantContext = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, callAlleles).genotypes(callGt).make();
+
+ testGenotypeConcordanceDetermineState(truthVariantContext, expectedTruthState, callVariantContext, expectedCallState, 0, 0);
+ }
+
+ @Test
+ public void testGenotypeConcordanceDetermineStateNull() throws Exception {
+ final List<Allele> alleles = makeUniqueListOfAlleles(Aref, C);
+ final Genotype gt1 = GenotypeBuilder.create(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, C));
+ final VariantContext vc1 = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles).genotypes(gt1).make();
+
+ testGenotypeConcordanceDetermineState(null, TruthState.MISSING, null, CallState.MISSING, 0, 0);
+ testGenotypeConcordanceDetermineState(vc1, TruthState.HET_REF_VAR1, null, CallState.MISSING, 0, 0);
+ testGenotypeConcordanceDetermineState(null, TruthState.MISSING, vc1, CallState.HET_REF_VAR1, 0, 0);
+ }
+
+ @Test
+ public void testGenotypeConcordanceDetermineStateFilter() throws Exception {
+ final Set<String> filters = new HashSet<String>(Arrays.asList("BAD!"));
+
+ // Filtering on the variant context
+ final List<Allele> alleles1 = makeUniqueListOfAlleles(Aref, C);
+ final Genotype gt1 = GenotypeBuilder.create(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, C));
+ final VariantContext vcFiltered = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles1).genotypes(gt1).filters(filters).make();
+
+ final List<Allele> alleles2 = makeUniqueListOfAlleles(Aref, T);
+ final Genotype gt2 = GenotypeBuilder.create(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, T));
+ final VariantContext vcNotFiltered = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles2).genotypes(gt2).make();
+
+ testGenotypeConcordanceDetermineState(vcFiltered, TruthState.VC_FILTERED, vcNotFiltered, CallState.HET_REF_VAR1, 0, 0);
+ testGenotypeConcordanceDetermineState(vcNotFiltered, TruthState.HET_REF_VAR1, vcFiltered, CallState.VC_FILTERED, 0, 0);
+ testGenotypeConcordanceDetermineState(vcFiltered, TruthState.VC_FILTERED, vcFiltered, CallState.VC_FILTERED, 0, 0);
+
+ // Filtering on the genotype
+ final List<String> gtFilters = new ArrayList<String>(Arrays.asList("WICKED"));
+ final List<Allele> alleles3 = makeUniqueListOfAlleles(Aref, C);
+ final Genotype gt3 = new GenotypeBuilder(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, C)).filters(gtFilters).make();
+ final VariantContext vcGtFiltered = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, alleles3).genotypes(gt3).make();
+
+ testGenotypeConcordanceDetermineState(vcGtFiltered, TruthState.GT_FILTERED, vcNotFiltered, CallState.HET_REF_VAR1, 0, 0);
+ testGenotypeConcordanceDetermineState(vcNotFiltered, TruthState.HET_REF_VAR1, vcGtFiltered, CallState.GT_FILTERED, 0, 0);
+ testGenotypeConcordanceDetermineState(vcGtFiltered, TruthState.GT_FILTERED, vcGtFiltered, CallState.GT_FILTERED, 0, 0);
+ }
+
+ @Test
+ public void testGenotypeConcordanceDetermineStateDp() throws Exception {
+ final List<Allele> allelesNormal = makeUniqueListOfAlleles(Aref, C);
+ final Genotype gtNormal = GenotypeBuilder.create(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, C));
+ final VariantContext vcNormal = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, allelesNormal).genotypes(gtNormal).make();
+
+ final List<Allele> allelesLowDp = makeUniqueListOfAlleles(Aref, C);
+ final Genotype gtLowDp = new GenotypeBuilder(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, C)).DP(4).make();
+ final VariantContext vcLowDp = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, allelesLowDp).genotypes(gtLowDp).make();
+
+ testGenotypeConcordanceDetermineState(vcLowDp, TruthState.LOW_DP, vcNormal, CallState.HET_REF_VAR1, 0, 20);
+ testGenotypeConcordanceDetermineState(vcLowDp, TruthState.HET_REF_VAR1, vcLowDp, CallState.HET_REF_VAR1, 0, 2);
+
+ testGenotypeConcordanceDetermineState(vcNormal, TruthState.HET_REF_VAR1, vcLowDp, CallState.LOW_DP, 0, 20);
+ testGenotypeConcordanceDetermineState(vcNormal, TruthState.HET_REF_VAR1, vcLowDp, CallState.HET_REF_VAR1, 0, 2);
+
+ testGenotypeConcordanceDetermineState(vcLowDp, TruthState.LOW_DP, vcLowDp, CallState.LOW_DP, 0, 20);
+ testGenotypeConcordanceDetermineState(vcLowDp, TruthState.HET_REF_VAR1, vcLowDp, CallState.HET_REF_VAR1, 0, 2);
+ }
+
+ @Test
+ public void testGenotypeConcordanceDetermineStateGq() throws Exception {
+ final List<Allele> allelesNormal = makeUniqueListOfAlleles(Aref, C);
+ final Genotype gtNormal = GenotypeBuilder.create(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, C));
+ final VariantContext vcNormal = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, allelesNormal).genotypes(gtNormal).make();
+
+ final List<Allele> allelesLowGq = makeUniqueListOfAlleles(Aref, C);
+ final Genotype gtLowGq = new GenotypeBuilder(TRUTH_SAMPLE_NAME, Arrays.asList(Aref, C)).GQ(4).make();
+ final VariantContext vcLowGq = new VariantContextBuilder("test", snpLoc, snpLocStart, snpLocStop, allelesLowGq).genotypes(gtLowGq).make();
+
+ testGenotypeConcordanceDetermineState(vcLowGq, TruthState.LOW_GQ, vcNormal, CallState.HET_REF_VAR1, 20, 0);
+ testGenotypeConcordanceDetermineState(vcLowGq, TruthState.HET_REF_VAR1, vcLowGq, CallState.HET_REF_VAR1, 2, 0);
+
+ testGenotypeConcordanceDetermineState(vcNormal, TruthState.HET_REF_VAR1, vcLowGq, CallState.LOW_GQ, 20, 0);
+ testGenotypeConcordanceDetermineState(vcNormal, TruthState.HET_REF_VAR1, vcLowGq, CallState.HET_REF_VAR1, 2, 0);
+
+ testGenotypeConcordanceDetermineState(vcLowGq, TruthState.LOW_GQ, vcLowGq, CallState.LOW_GQ, 20, 0);
+ testGenotypeConcordanceDetermineState(vcLowGq, TruthState.HET_REF_VAR1, vcLowGq, CallState.HET_REF_VAR1, 2, 0);
+ }
+
+ /**
+ * Test method to determine that the expected truth and call states are returned for a pair of truth and call variant contexts.
+ * @param truthVariantContext
+ * @param expectedTruthState
+ * @param callVariantContext
+ * @param expectedCallState
+ * @param minGq
+ * @param minDp
+ */
+ private void testGenotypeConcordanceDetermineState(final VariantContext truthVariantContext, final TruthState expectedTruthState,
+ final VariantContext callVariantContext, final CallState expectedCallState,
+ final int minGq, final int minDp) {
+ final GenotypeConcordance genotypeConcordance = new GenotypeConcordance();
+ genotypeConcordance.TRUTH_SAMPLE = TRUTH_SAMPLE_NAME;
+ genotypeConcordance.CALL_SAMPLE = CALL_SAMPLE_NAME;
+
+ final TruthAndCallStates truthAndCallStates = genotypeConcordance.determineState(truthVariantContext, TRUTH_SAMPLE_NAME,
+ callVariantContext, CALL_SAMPLE_NAME, minGq, minDp);
+ Assert.assertEquals(truthAndCallStates.truthState, expectedTruthState);
+ Assert.assertEquals(truthAndCallStates.callState, expectedCallState);
+ }
+
+ /**
+ * Simple method to return a list of unique alleles.
+ */
+ private List<Allele> makeUniqueListOfAlleles(final Allele... alleles) {
+ final Set<Allele> uniqueAlleles = new HashSet<Allele>();
+ for (final Allele allele : alleles) {
+ if (!allele.equals(Allele.NO_CALL)) {
+ uniqueAlleles.add(allele);
+ }
+ }
+ if (!uniqueAlleles.contains(Aref)) uniqueAlleles.add(Aref);
+ return new ArrayList<Allele>(uniqueAlleles);
+ }
+}
diff --git a/src/tests/java/picard/vcf/MergeVcfsTest.java b/src/tests/java/picard/vcf/MergeVcfsTest.java
new file mode 100644
index 0000000..f53461a
--- /dev/null
+++ b/src/tests/java/picard/vcf/MergeVcfsTest.java
@@ -0,0 +1,14 @@
+package picard.vcf;
+
+import picard.cmdline.CommandLineProgram;
+
+/**
+ * Created by bradt on 9/3/14.
+ */
+public class MergeVcfsTest extends AbstractVcfMergingClpTester {
+
+ @Override
+ protected CommandLineProgram getProgram() {
+ return new MergeVcfs();
+ }
+}
diff --git a/src/tests/java/picard/vcf/SortVcfsTest.java b/src/tests/java/picard/vcf/SortVcfsTest.java
new file mode 100644
index 0000000..c2836e1
--- /dev/null
+++ b/src/tests/java/picard/vcf/SortVcfsTest.java
@@ -0,0 +1,120 @@
+package picard.vcf;
+
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextComparator;
+import htsjdk.variant.vcf.VCFFileReader;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgram;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Test class for SortVCF. Several tests also conducted by AbstractVcfMergingClpTester
+ *
+ * Created by bradt on 9/3/14.
+ */
+public class SortVcfsTest extends AbstractVcfMergingClpTester {
+
+ @Override
+ protected CommandLineProgram getProgram() {
+ return new SortVcf();
+ }
+
+ @Test
+ public void testPresortedFile() throws IOException {
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps.vcf");
+ final File output = File.createTempFile("sort-presorted-test-output.", ".vcf");
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+ output.deleteOnExit();
+
+ final int numberOfVariantContexts = loadContigPositions(snpInputFile).size();
+
+ runClp(Arrays.asList(snpInputFile), output, indexing, 0);
+ validateSortingResults(output, numberOfVariantContexts);
+ }
+
+ @Test
+ public void testSingleScrambledFile() throws IOException {
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps-scrambled.1.vcf");
+ final File output = File.createTempFile("sort-single-scrambled-test-output.", ".vcf");
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+ output.deleteOnExit();
+
+ final int numberOfVariantContexts = loadContigPositions(snpInputFile).size();
+
+ runClp(Arrays.asList(snpInputFile), output, indexing, 0);
+ validateSortingResults(output, numberOfVariantContexts);
+ }
+
+ @Test
+ public void testTwoScrambledSnpFiles() throws IOException {
+ final File inputFile1 = new File(TEST_DATA_PATH, "CEUTrio-snps-scrambled.1.vcf");
+ final File inputFile2 = new File(TEST_DATA_PATH, "vcfFormatTest.scrambled.vcf");
+ final File output = File.createTempFile("sort-multiple-scrambled-test-output.", ".vcf");
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+ output.deleteOnExit();
+
+ final int numberOfVariantContexts = loadContigPositions(inputFile1).size() + loadContigPositions(inputFile2).size();
+
+ runClp(Arrays.asList(inputFile1, inputFile2), output, indexing, 0);
+ validateSortingResults(output, numberOfVariantContexts);
+ }
+
+ @Test
+ public void testScrambledSnpsAndOrderedIndels() throws IOException {
+ final File indelInputFile = new File(TEST_DATA_PATH, "CEUTrio-indels.vcf");
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps-scrambled.1.vcf");
+ final File output = File.createTempFile("sort-scrambled-indels-snps-test-output.", ".vcf");
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+ output.deleteOnExit();
+
+ final int numberOfVariantContexts = loadContigPositions(indelInputFile).size() + loadContigPositions(snpInputFile).size();
+
+ runClp(Arrays.asList(indelInputFile, snpInputFile), output, indexing, 0);
+ validateSortingResults(output, numberOfVariantContexts);
+ }
+
+ @Test
+ public void testScrambledSnpsAndScrambledIndels() throws IOException {
+ final File indelInputFile = new File(TEST_DATA_PATH, "CEUTrio-indels-scrambled.1.vcf");
+ final File snpInputFile = new File(TEST_DATA_PATH, "CEUTrio-snps-scrambled.1.vcf");
+ final File output = File.createTempFile("merge-indels-snps-test-output.", ".vcf");
+ final List<String> indexing = Arrays.asList("CREATE_INDEX=false");
+ output.deleteOnExit();
+
+ final int numberOfVariantContexts = loadContigPositions(indelInputFile).size() + loadContigPositions(snpInputFile).size();
+
+ runClp(Arrays.asList(indelInputFile, snpInputFile), output, indexing, 0);
+ validateSortingResults(output, numberOfVariantContexts);
+ }
+
+
+ /**
+ * Checks the ordering and total number of variant context entries in the specified output VCF file.
+ * Does NOT check explicitly that the VC genomic positions match exactly those from the inputs. We assume this behavior from other tests.
+ *
+ * @param output VCF file representing the output of SortVCF
+ * @param expectedVariantContextCount the total number of variant context entries from all input files that were merged/sorted
+ */
+ private void validateSortingResults(final File output, final int expectedVariantContextCount) {
+ final VCFFileReader outputReader = new VCFFileReader(output, false);
+ final VariantContextComparator outputComparator = outputReader.getFileHeader().getVCFRecordComparator();
+ VariantContext last = null;
+ int variantContextCount = 0;
+ final CloseableIterator<VariantContext> iterator = outputReader.iterator();
+ while (iterator.hasNext()) {
+ final VariantContext outputContext = iterator.next();
+ if (last != null) Assert.assertTrue(outputComparator.compare(last, outputContext) <= 0);
+ last = outputContext;
+ variantContextCount++;
+ }
+ iterator.close();
+ Assert.assertEquals(variantContextCount, expectedVariantContextCount);
+ }
+}
diff --git a/src/tests/java/picard/vcf/SplitVcfsTest.java b/src/tests/java/picard/vcf/SplitVcfsTest.java
new file mode 100644
index 0000000..61eaaa4
--- /dev/null
+++ b/src/tests/java/picard/vcf/SplitVcfsTest.java
@@ -0,0 +1,59 @@
+package picard.vcf;
+
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFileReader;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+
+import java.io.File;
+import java.util.Queue;
+
+public class SplitVcfsTest extends CommandLineProgramTest {
+
+ private static final File OUTPUT_DATA_PATH = IOUtil.createTempDir("SplitVcfsTest", null);
+ private static final File TEST_DATA_PATH = new File("testdata/picard/vcf/");
+
+ public String getCommandLineProgramName() {
+ return SplitVcfs.class.getSimpleName();
+ }
+
+ @AfterClass
+ public void teardown() {
+ IOUtil.deleteDirectoryTree(OUTPUT_DATA_PATH);
+ }
+
+ @Test
+ public void testSplit() {
+ final File indelOutputFile = new File(OUTPUT_DATA_PATH, "split-vcfs-test-indels-delete-me.vcf");
+ final File snpOutputFile = new File(OUTPUT_DATA_PATH, "split-vcfs-test-snps-delete-me.vcf");
+ final File input = new File(TEST_DATA_PATH, "CEUTrio-merged-indels-snps.vcf");
+
+ indelOutputFile.deleteOnExit();
+ snpOutputFile.deleteOnExit();
+
+ final String[] args = new String[]{
+ "INPUT=" + input.getAbsolutePath(),
+ "SNP_OUTPUT=" + snpOutputFile.getAbsolutePath(),
+ "INDEL_OUTPUT=" + indelOutputFile.getAbsolutePath()
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final Queue<String> indelContigPositions = AbstractVcfMergingClpTester.loadContigPositions(indelOutputFile);
+ final Queue<String> snpContigPositions = AbstractVcfMergingClpTester.loadContigPositions(snpOutputFile);
+
+ final VCFFileReader reader = new VCFFileReader(input);
+ for (final VariantContext inputContext : reader) {
+ if (inputContext.isIndel())
+ Assert.assertEquals(AbstractVcfMergingClpTester.getContigPosition(inputContext), indelContigPositions.poll());
+ if (inputContext.isSNP())
+ Assert.assertEquals(AbstractVcfMergingClpTester.getContigPosition(inputContext), snpContigPositions.poll());
+ }
+
+ // We should have polled everything off the indel (snp) queues
+ Assert.assertEquals(indelContigPositions.size(), 0);
+ Assert.assertEquals(snpContigPositions.size(), 0);
+ }
+}
diff --git a/src/tests/java/picard/vcf/TestFilterVcf.java b/src/tests/java/picard/vcf/TestFilterVcf.java
new file mode 100644
index 0000000..0909807
--- /dev/null
+++ b/src/tests/java/picard/vcf/TestFilterVcf.java
@@ -0,0 +1,142 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.filter;
+
+import htsjdk.samtools.util.CollectionUtil;
+import htsjdk.samtools.util.ListMap;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFileReader;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Tests for VCF filtration
+ */
+public class TestFilterVcf {
+ private final File INPUT = new File("testdata/picard/vcf/filter/testFiltering.vcf");
+
+ /** Tests that all records get PASS set as their filter when extreme values are used for filtering. */
+ @Test public void testNoFiltering() throws Exception {
+ final File out = testFiltering(INPUT, 0, 0, 0, Double.MAX_VALUE);
+ final VCFFileReader in = new VCFFileReader(out, false);
+ for (final VariantContext ctx : in) {
+ if (!ctx.filtersWereApplied() || ctx.isFiltered()) {
+ Assert.fail("Context should not have been filtered: " + ctx.toString());
+ }
+ }
+ }
+
+ /** Tests that sites with a het allele balance < 0.4 are marked as filtered out. */
+ @Test public void testAbFiltering() throws Exception {
+ final Set<String> fails = CollectionUtil.makeSet("tf2", "rs28566954", "rs28548431");
+ final File out = testFiltering(INPUT, 0.4, 0, 0, Double.MAX_VALUE);
+ final ListMap<String,String> filters = slurpFilters(out);
+ Assert.assertEquals(filters.keySet(), fails, "Failed sites did not match expected set of failed sites.");
+ }
+
+ /** Tests that genotypes with DP < 18 are marked as failed, but not >= 18. */
+ @Test public void testDpFiltering() throws Exception {
+ final Set<String> fails = CollectionUtil.makeSet("rs71509448", "rs71628926", "rs13302979", "rs2710876");
+ final File out = testFiltering(INPUT, 0, 18, 0, Double.MAX_VALUE);
+ final ListMap<String,String> filters = slurpFilters(out);
+ Assert.assertEquals(filters.keySet(), fails, "Failed sites did not match expected set of failed sites.");
+ }
+
+ /** Tests that genotypes with low GQ are filtered appropriately. */
+ @Test public void testGqFiltering() throws Exception {
+ final Set<String> fails = CollectionUtil.makeSet("rs71509448"); // SNP with GQ=21; lowest GQ in file
+
+ {
+ final File out = testFiltering(INPUT, 0, 0, 20, Double.MAX_VALUE);
+ final ListMap<String, String> filters = slurpFilters(out);
+ Assert.assertEquals(filters.size(), 0, "Should not have filtered sites: " + filters);
+ }
+ {
+ final File out = testFiltering(INPUT, 0, 0, 21, Double.MAX_VALUE);
+ final ListMap<String, String> filters = slurpFilters(out);
+ Assert.assertEquals(filters.size(), 0, "Should not have filtered sites: " + filters);
+ }
+ {
+ final File out = testFiltering(INPUT, 0, 0, 22, Double.MAX_VALUE);
+ final ListMap<String, String> filters = slurpFilters(out);
+ Assert.assertEquals(filters.keySet(), fails, "Failed sites did not match expected set of failed sites.");
+ }
+ }
+
+ /** Tests that genotypes with DP < 18 are marked as failed, but not >= 18. */
+ @Test public void testFsFiltering() throws Exception {
+ final Set<String> fails = CollectionUtil.makeSet("rs13303033", "rs28548431", "rs2799066");
+ final File out = testFiltering(INPUT, 0, 0, 0, 5.0d);
+ final ListMap<String,String> filters = slurpFilters(out);
+ Assert.assertEquals(filters.keySet(), fails, "Failed sites did not match expected set of failed sites.");
+ }
+
+ @Test public void testCombinedFiltering() throws Exception {
+ final TreeSet<String> fails = new TreeSet<String>(CollectionUtil.makeSet("rs13302979", "rs13303033", "rs2710876" , "rs2799066" , "rs28548431", "rs28566954", "rs71509448", "rs71628926", "tf2"));
+ final File out = testFiltering(INPUT, 0.4, 18, 22, 5.0d);
+ final ListMap<String,String> filters = slurpFilters(out);
+ Assert.assertEquals(new TreeSet<String>(filters.keySet()), fails, "Failed sites did not match expected set of failed sites.");
+ }
+
+ /** Utility method that takes a a VCF and a set of parameters and filters the VCF. */
+ File testFiltering(final File vcf, final double minAb, final int minDp, final int minGq, final double maxFs) throws Exception {
+ final File out = File.createTempFile("filterVcfTest.", ".vcf.gz");
+ out.deleteOnExit();
+
+ final FilterVcf filterer = new FilterVcf();
+ filterer.CREATE_INDEX = true;
+ filterer.INPUT = vcf;
+ filterer.OUTPUT = out;
+ filterer.MIN_AB = minAb;
+ filterer.MIN_DP = minDp;
+ filterer.MIN_GQ = minGq;
+ filterer.MAX_FS = maxFs;
+
+ final int retval = filterer.doWork();
+ if (retval != 0) {
+ throw new PicardException("Return value non-zero: " + retval);
+ }
+
+ return out;
+ }
+
+ /** Consumes a VCF and returns a ListMap where each they keys are the IDs of filtered out sites and the values are the set of filters. */
+ ListMap<String,String> slurpFilters(final File vcf) {
+ final ListMap<String,String> map = new ListMap<String, String>();
+ final VCFFileReader in = new VCFFileReader(vcf, false);
+ for (final VariantContext ctx : in) {
+ if (ctx.isNotFiltered()) continue;
+ for (final String filter : ctx.getFilters()) {
+ map.add(ctx.getID(), filter);
+ }
+ }
+ in.close();
+ return map;
+ }
+}
diff --git a/src/tests/java/picard/vcf/UpdateVcfSequenceDictionaryTest.java b/src/tests/java/picard/vcf/UpdateVcfSequenceDictionaryTest.java
new file mode 100644
index 0000000..e0c8bed
--- /dev/null
+++ b/src/tests/java/picard/vcf/UpdateVcfSequenceDictionaryTest.java
@@ -0,0 +1,74 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2014 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf;
+
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.util.CloserUtil;
+import htsjdk.samtools.util.IOUtil;
+import htsjdk.variant.utils.SAMSequenceDictionaryExtractor;
+import htsjdk.variant.vcf.VCFFileReader;
+import htsjdk.variant.vcf.VCFHeader;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.Test;
+import picard.PicardException;
+
+import java.io.File;
+
+/**
+ * @author George Grant
+ */
+public class UpdateVcfSequenceDictionaryTest {
+ private static final File TEST_DATA_PATH = new File("testdata/picard/vcf/");
+ private static final File OUTPUT_DATA_PATH = IOUtil.createTempDir("UpdateVcfSequenceDictionaryTest", null);
+
+ @AfterClass
+ public void teardown() {
+ IOUtil.deleteDirectoryTree(OUTPUT_DATA_PATH);
+ }
+
+ @Test
+ public void testUpdateVcfSequenceDictionary() {
+ final File input = new File(TEST_DATA_PATH, "vcfFormatTest.vcf");
+ // vcfFormatTest.bad_dict.vcf is a vcf with two (2) ##contig lines deleted
+ final File samSequenceDictionaryVcf = new File(TEST_DATA_PATH, "vcfFormatTest.bad_dict.vcf");
+ final File outputFile = new File(OUTPUT_DATA_PATH, "updateVcfSequenceDictionaryTest-delete-me.vcf");
+
+ outputFile.deleteOnExit();
+
+ final UpdateVcfSequenceDictionary updateVcfSequenceDictionary = new UpdateVcfSequenceDictionary();
+ updateVcfSequenceDictionary.INPUT = input;
+ updateVcfSequenceDictionary.SEQUENCE_DICTIONARY = samSequenceDictionaryVcf;
+ updateVcfSequenceDictionary.OUTPUT = outputFile;
+
+ Assert.assertEquals(updateVcfSequenceDictionary.instanceMain(new String[0]), 0);
+
+ IOUtil.assertFilesEqual(samSequenceDictionaryVcf, outputFile);
+
+ // A little extra checking.
+ Assert.assertEquals(SAMSequenceDictionaryExtractor.extractDictionary(input).size(), 84);
+ Assert.assertEquals(SAMSequenceDictionaryExtractor.extractDictionary(samSequenceDictionaryVcf).size(), 82);
+ Assert.assertEquals(SAMSequenceDictionaryExtractor.extractDictionary(outputFile).size(), 82);
+ }
+}
diff --git a/src/tests/java/picard/vcf/VariantContextComparatorTest.java b/src/tests/java/picard/vcf/VariantContextComparatorTest.java
new file mode 100644
index 0000000..49cbc5f
--- /dev/null
+++ b/src/tests/java/picard/vcf/VariantContextComparatorTest.java
@@ -0,0 +1,107 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2012 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf;
+
+import htsjdk.variant.variantcontext.Allele;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.variantcontext.VariantContextBuilder;
+import htsjdk.variant.variantcontext.VariantContextComparator;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.List;
+
+public class VariantContextComparatorTest {
+
+ private static VariantContext buildVariantContext(final String source, final String contig, final long start) {
+ final Collection<Allele> alleles = new ArrayList<Allele>();
+ alleles.add(Allele.create("AAAA", true));
+ alleles.add(Allele.create("AAGG", false));
+ return new VariantContextBuilder(source, contig, start, start + 3, alleles).make();
+ }
+
+ private static List<String> getOrderedContigList(final VariantContext... variantContexts) {
+ final LinkedHashSet<String> contigs = new LinkedHashSet<String>();
+ for (final VariantContext context : variantContexts) {
+ contigs.add(context.getChr());
+ }
+ return new ArrayList<String>(contigs);
+ }
+
+ @Test
+ public void testIdentical() {
+ final VariantContext contextOne = buildVariantContext("source", "one", 100);
+ final List<String> contigs = getOrderedContigList(contextOne);
+ Assert.assertEquals(0, new VariantContextComparator(contigs).compare(contextOne, contextOne));
+ }
+
+ @Test
+ public void testPositions() {
+ final VariantContext contextOne = buildVariantContext("source", "one", 100);
+ final VariantContext contextTwo = buildVariantContext("source", "one", 150);
+ final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
+ }
+
+ @Test
+ public void testContigs() {
+ final VariantContext contextOne = buildVariantContext("source", "one", 100);
+ final VariantContext contextTwo = buildVariantContext("source", "two", 100);
+ final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
+ }
+
+ @Test
+ public void testCombinationOne() {
+ final VariantContext contextOne = buildVariantContext("source", "one", 100);
+ final VariantContext contextTwo = buildVariantContext("source", "two", 150);
+ final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
+ }
+
+ @Test
+ public void testCombinationTwo() {
+ final VariantContext contextOne = buildVariantContext("source", "one", 150);
+ final VariantContext contextTwo = buildVariantContext("source", "two", 100);
+ final List<String> contigs = getOrderedContigList(contextOne, contextTwo);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextOne, contextTwo) < 0);
+ Assert.assertTrue(new VariantContextComparator(contigs).compare(contextTwo, contextOne) > 0);
+ }
+
+ @Test (expectedExceptions = IllegalArgumentException.class)
+ public void testThrowsOnDuplicateContig() {
+ final List<String> contigs = new ArrayList<String>(3);
+ contigs.add("one");
+ contigs.add("two");
+ contigs.add("one");
+
+ new VariantContextComparator(contigs);
+ }
+}
diff --git a/src/tests/java/picard/vcf/VcfFormatConverterTest.java b/src/tests/java/picard/vcf/VcfFormatConverterTest.java
new file mode 100644
index 0000000..e6b4544
--- /dev/null
+++ b/src/tests/java/picard/vcf/VcfFormatConverterTest.java
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2013 The Broad Institute
+*
+* Permission is hereby granted, free of charge, to any person
+* obtaining a copy of this software and associated documentation
+* files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use,
+* copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following
+* conditions:
+*
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+package picard.vcf;
+
+import htsjdk.tribble.Tribble;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import picard.cmdline.CommandLineProgramTest;
+import picard.PicardException;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class VcfFormatConverterTest extends CommandLineProgramTest {
+ private static final String TEST_DATA_PATH = "testdata/picard/vcf/";
+ private static final String TEST_FILE_BASE = "vcfFormatTest";
+
+ private static final String VCF = ".vcf";
+ private static final String VCF_GZ = ".vcf.gz";
+ private static final String BCF = ".bcf";
+
+ private static final File TEST_VCF = new File(TEST_DATA_PATH, TEST_FILE_BASE + VCF);
+ private static final File TEST_BCF = new File(TEST_DATA_PATH, TEST_FILE_BASE + BCF);
+
+ public String getCommandLineProgramName() {
+ return VcfFormatConverter.class.getSimpleName();
+ }
+
+ @Test
+ public void testVcfToVcf() {
+ runLikeTest(TEST_VCF, VCF);
+ }
+
+ @Test
+ public void testVcfToBcf() {
+ runBackAndForthTest(TEST_VCF, BCF, VCF);
+ }
+
+ @Test
+ public void testVcfToVcfGz() {
+ runBackAndForthTest(TEST_VCF, VCF_GZ, VCF);
+ }
+
+ @Test
+ public void testBcfToBcf() {
+ runLikeTest(TEST_BCF, BCF);
+ }
+
+ @Test
+ public void testBcfToVcf() {
+ runBackAndForthTest(TEST_BCF, VCF, BCF);
+ }
+
+ private void runLikeTest(final File input, final String format) {
+ final File outputFile = convertFile(input, "likeTest", format);
+ compareFiles(input, outputFile);
+ }
+
+ private void runBackAndForthTest(final File input, final String format, final String originalFormat) {
+ final String tempPrefix = "backAndForth";
+
+ final File backAndForth = convertFile(input, tempPrefix, format);
+ final File backAndForthSeries2 = convertFile(backAndForth, tempPrefix, originalFormat);
+
+ compareFiles(input, backAndForthSeries2);
+ }
+
+ private File convertFile(final File input, final String prefix, final String format) {
+ final File outputFile;
+ try {
+ outputFile = File.createTempFile(prefix, format);
+ } catch (final IOException ioe) {
+ throw new PicardException("Unable to create temp file!");
+ }
+
+ outputFile.deleteOnExit();
+ new File(outputFile.getAbsolutePath() + Tribble.STANDARD_INDEX_EXTENSION).deleteOnExit();
+
+ final List<String> args = new ArrayList<String>(Arrays.asList(
+ "INPUT=" + input.getAbsolutePath(),
+ "OUTPUT=" + outputFile.getAbsolutePath()
+ ));
+ if (VCF_GZ.equals(format)) {
+ args.add("CREATE_INDEX=false");
+ }
+ if (input.getName().endsWith(VCF_GZ)) {
+ args.add("REQUIRE_INDEX=false");
+ }
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+ return outputFile;
+ }
+
+ private void compareFiles(final File file1, final File file2) {
+ // Ok, so this isn't exactly comparing md5 checksums or anything, but it should be good enough
+ // for our purposes.
+ Assert.assertTrue(file1.exists());
+ Assert.assertTrue(file2.exists());
+ Assert.assertEquals(file1.length(), file2.length());
+ }
+
+}
diff --git a/src/tests/java/picard/vcf/processor/AccumulatorExecutorTest.java b/src/tests/java/picard/vcf/processor/AccumulatorExecutorTest.java
new file mode 100644
index 0000000..3bc0a6a
--- /dev/null
+++ b/src/tests/java/picard/vcf/processor/AccumulatorExecutorTest.java
@@ -0,0 +1,86 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFileReader;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author mccowan
+ */
+public class AccumulatorExecutorTest {
+ final static List<File> TEST_VCFS = Arrays.asList(
+ new File("testdata/picard/vcf/CEUTrio-indels-bad-samples.vcf"),
+ new File("testdata/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf"),
+ new File("testdata/picard/vcf/CEUTrio-merged-indels-snps.vcf")
+ );
+
+ @Test
+ public void test() throws Exception {
+ // Fist, read variants via a known, functional mechanism
+ final Set<String> actualVariantContextStrings = Collections.synchronizedSet(new HashSet<String>());
+ for (final File testVcf : TEST_VCFS) {
+ for (final VariantContext variantContext : new VCFFileReader(testVcf)) {
+ actualVariantContextStrings.add(variantContext.toString());
+ }
+ }
+
+ // Then ensure for a variety of thread counts that we observe the same variants
+ for (int i = 1; i <= 24; i++) {
+ final Set<String> observedVariantContextStrings = Collections.synchronizedSet(new HashSet<String>());
+ final VariantAccumulatorExecutor executor = new VariantAccumulatorExecutor.MultiThreadedChunkBased(
+ i,
+ VariantIteratorProducer.byHundredMegabaseChunks(TEST_VCFS),
+ new VariantProcessor.AccumulatorGenerator() {
+ @Override
+ public VariantProcessor.Accumulator build() {
+ return new VariantProcessor.Accumulator() {
+ @Override
+ public void accumulate(final VariantContext vc) {
+ observedVariantContextStrings.add(vc.toString());
+ }
+
+ @Override
+ public Object result() {
+ return null;
+ }
+ };
+ }
+ }
+ );
+ executor.start();
+ executor.awaitCompletion();
+ Assert.assertTrue(actualVariantContextStrings.equals(observedVariantContextStrings));
+ }
+ }
+}
diff --git a/src/tests/java/picard/vcf/processor/ByWholeContigTest.java b/src/tests/java/picard/vcf/processor/ByWholeContigTest.java
new file mode 100644
index 0000000..df10c18
--- /dev/null
+++ b/src/tests/java/picard/vcf/processor/ByWholeContigTest.java
@@ -0,0 +1,46 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+
+/**
+ * @author mccowan
+ */
+public class ByWholeContigTest {
+ public final static File TEST_VCF = new File("testdata/picard/vcf/CEUTrio-indels-bad-samples.vcf");
+
+ @Test
+ public void test() throws Exception {
+ final VcfFileSegmentGenerator.ByWholeContig segmenter = VcfFileSegmentGenerator.ByWholeContig.getInstance();
+ int chunkCount = 0;
+ for (final VcfFileSegment variantContextCloseableIterator : segmenter.forVcf(TEST_VCF)) {
+ chunkCount++;
+ }
+ Assert.assertEquals(chunkCount, 84);
+ }
+}
diff --git a/src/tests/java/picard/vcf/processor/ThreadsafeTest.java b/src/tests/java/picard/vcf/processor/ThreadsafeTest.java
new file mode 100644
index 0000000..b6a6cb2
--- /dev/null
+++ b/src/tests/java/picard/vcf/processor/ThreadsafeTest.java
@@ -0,0 +1,96 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import com.google.common.base.Joiner;
+import htsjdk.samtools.util.CloseableIterator;
+import htsjdk.variant.variantcontext.VariantContext;
+import htsjdk.variant.vcf.VCFFileReader;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author mccowan
+ */
+public class ThreadsafeTest {
+ static final int TEN_MILLION = (int) 10e6;
+ static final File VCF_WITH_MULTI_ALLELIC_VARIANT_AT_POSITION_10MILLION = new File("testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf");
+
+ @Test
+ public void ensureUniqueVariantObservationsEspeciallyMultiAllelicOnesThatAppearAtChunkingBoundaries() {
+ final VariantIteratorProducer.Threadsafe iteratorFactory =
+ new VariantIteratorProducer.Threadsafe(
+ VcfFileSegmentGenerator.byWholeContigSubdividingWithWidth(TEN_MILLION),
+ Arrays.asList(VCF_WITH_MULTI_ALLELIC_VARIANT_AT_POSITION_10MILLION)
+ );
+ final Set<String> observed = new HashSet<String>();
+ for (final CloseableIterator<VariantContext> i : iteratorFactory.iterators()) {
+ while (i.hasNext()) {
+ final VariantContext next = i.next();
+ Assert.assertTrue(observed.add(next.toString()), "Second observation for " + next.toString());
+ }
+ }
+ }
+
+ /** This test doesn't even test the class, it just makes sure the cornercase test data is really a cornercase */
+ @Test
+ public void ensureTestDataActuallyHasWideVariantAtTenMillion() {
+ final Joiner joiner = Joiner.on(":"); // Cheat: do a string compare
+ final VCFFileReader r = new VCFFileReader(VCF_WITH_MULTI_ALLELIC_VARIANT_AT_POSITION_10MILLION);
+ Assert.assertEquals(
+ joiner.join(r.query("1", TEN_MILLION, TEN_MILLION)),
+ joiner.join(r.query("1", TEN_MILLION + 5, TEN_MILLION + 5))
+ );
+ r.close();
+ }
+
+ @Test
+ public void ensureSameVariantsReadAsSimpleVcfFileIterator() {
+ final VariantIteratorProducer.Threadsafe iteratorFactory =
+ new VariantIteratorProducer.Threadsafe(
+ VcfFileSegmentGenerator.byWholeContigSubdividingWithWidth(TEN_MILLION),
+ Arrays.asList(VCF_WITH_MULTI_ALLELIC_VARIANT_AT_POSITION_10MILLION)
+ );
+ final Set<String> observedVcs = new HashSet<String>();
+ final Set<String> actual = new HashSet<String>();
+ final VCFFileReader actualVcs = new VCFFileReader(VCF_WITH_MULTI_ALLELIC_VARIANT_AT_POSITION_10MILLION);
+ for (final VariantContext actualVc : actualVcs) {
+ actual.add(actualVc.toString());
+ }
+
+ for (final CloseableIterator<VariantContext> i : iteratorFactory.iterators()) {
+ while (i.hasNext()) {
+ observedVcs.add(i.next().toString());
+ }
+ }
+
+ Assert.assertEquals(actual, observedVcs);
+ }
+
+}
diff --git a/src/tests/java/picard/vcf/processor/VcfFileSegmentGeneratorTest.java b/src/tests/java/picard/vcf/processor/VcfFileSegmentGeneratorTest.java
new file mode 100644
index 0000000..c41eb83
--- /dev/null
+++ b/src/tests/java/picard/vcf/processor/VcfFileSegmentGeneratorTest.java
@@ -0,0 +1,55 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import com.google.common.collect.Iterables;
+import htsjdk.samtools.util.Interval;
+import htsjdk.samtools.util.Log;
+import htsjdk.samtools.util.OverlapDetector;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+
+/**
+ * @author mccowan
+ */
+public class VcfFileSegmentGeneratorTest {
+ final static Log LOG = Log.getInstance(VcfFileSegmentGeneratorTest.class);
+
+ final File VCF_WITH_LOGS_OF_GAPS = new File("testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf");
+ final int TEN_MILLION = (int) 10e6;
+
+ @Test
+ public void ensureOverlapExclusionTest() {
+ final OverlapDetector<Interval> oneTinyIntervalDetector = new OverlapDetector<Interval>(0, 0);
+ final Interval theInterval = new Interval("1", 5, 10);
+ oneTinyIntervalDetector.addLhs(theInterval, theInterval);
+ final VcfFileSegmentGenerator noFilter = VcfFileSegmentGenerator.byWholeContigSubdividingWithWidth(TEN_MILLION);
+ Assert.assertEquals(Iterables.size(noFilter.forVcf(VCF_WITH_LOGS_OF_GAPS)), 382); // The number of subdivisions of 10 million of this vcf
+
+ final VcfFileSegmentGenerator allFiltered = VcfFileSegmentGenerator.excludingNonOverlaps(noFilter, oneTinyIntervalDetector);
+ Assert.assertEquals(Iterables.size(allFiltered.forVcf(VCF_WITH_LOGS_OF_GAPS)), 1);
+ }
+}
diff --git a/src/tests/java/picard/vcf/processor/WidthLimitingDecoratorTest.java b/src/tests/java/picard/vcf/processor/WidthLimitingDecoratorTest.java
new file mode 100644
index 0000000..ff11fac
--- /dev/null
+++ b/src/tests/java/picard/vcf/processor/WidthLimitingDecoratorTest.java
@@ -0,0 +1,122 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015 The Broad Institute
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package picard.vcf.processor;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterators;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author mccowan
+ */
+public class WidthLimitingDecoratorTest {
+
+ class Segment extends VcfFileSegment {
+ final int start, stop;
+
+ Segment(final int start, final int stop) {
+ this.start = start;
+ this.stop = stop;
+ }
+
+ @Override
+ public int start() {
+ return start;
+ }
+
+ @Override
+ public int stop() {
+ return stop;
+ }
+
+ @Override
+ public String contig() {
+ return "A";
+ }
+
+ @Override
+ public File vcf() {
+ return new File("B");
+ }
+
+ @Override
+ public String toString() {
+ return "Segment{" +
+ "start=" + start +
+ ", stop=" + stop +
+ ", vcf=" + vcf() +
+ ", contig=" + contig() +
+ '}';
+ }
+ }
+
+
+ @Test
+ public void testForVcf() throws Exception {
+
+ final Segment entireThing = new Segment(1, 9942);
+ final ImmutableList<Segment> expectedSubThings = ImmutableList.of(
+ new Segment(1, 1000),
+ new Segment(1001, 2000),
+ new Segment(2001, 3000),
+ new Segment(3001, 4000),
+ new Segment(4001, 5000),
+ new Segment(5001, 6000),
+ new Segment(6001, 7000),
+ new Segment(7001, 8000),
+ new Segment(8001, 9000),
+ new Segment(9001, 9942)
+ );
+
+ final VcfFileSegmentGenerator.WidthLimitingDecorator strategy = VcfFileSegmentGenerator.WidthLimitingDecorator.wrapping(new VcfFileSegmentGenerator() {
+ @Override
+ public Iterable<VcfFileSegment> forVcf(final File vcf) {
+ return Collections.singleton((VcfFileSegment) entireThing);
+ }
+ }, 1000);
+
+ final List<VcfFileSegment> observed = new ArrayList<VcfFileSegment>();
+ Iterators.addAll(observed, strategy.forVcf(new File("B")).iterator());
+ final Iterator<VcfFileSegment> observedIterator = observed.iterator();
+ for (final VcfFileSegment e : expectedSubThings) {
+ Assert.assertTrue(observedIterator.hasNext());
+ final VcfFileSegment o = observedIterator.next();
+ Assert.assertEquals(ComparisonChain.start()
+ .compare(o.contig(), e.contig())
+ .compare(o.start(), e.start())
+ .compare(o.stop(), e.stop())
+ .compare(o.vcf(), e.vcf())
+ .result(), 0, String.format(String.format("observed=%s@%s:%s-%s expected=%s", o.vcf(), o.contig(), o.start(),
+ o.stop(), e.toString())));
+ }
+ }
+}
diff --git a/src/tests/resources/testng.xml b/src/tests/resources/testng.xml
new file mode 100644
index 0000000..469ff0e
--- /dev/null
+++ b/src/tests/resources/testng.xml
@@ -0,0 +1,39 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+
+<suite name="Picard" verbose="2" parallel="methods" thread-count="1" data-provider-thread-count="8">
+ <test name="analysis">
+ <packages>
+ <package name="picard.analysis"/>
+ </packages>
+ </test>
+ <test name="cmdline">
+ <packages>
+ <package name="picard.cmdline"/>
+ </packages>
+ </test>
+ <test name="illumina">
+ <packages>
+ <package name="picard.illumina"/>
+ </packages>
+ </test>
+ <test name="metrics">
+ <packages>
+ <package name="picard.metrics"/>
+ </packages>
+ </test>
+ <test name="pedigree">
+ <packages>
+ <package name="picard.pedigree"/>
+ </packages>
+ </test>
+ <test name="sam">
+ <packages>
+ <package name="picard.sam"/>
+ </packages>
+ </test>
+ <test name="util">
+ <packages>
+ <package name="picard.util"/>
+ </packages>
+ </test>
+</suite>
\ No newline at end of file
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.1.fastq
deleted file mode 100644
index 79606c3..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1138:2141 1:Y:0:AACAATGG
-NTTACCAAGGTTTTCTGTTTAGTGA
-+
-#1=DDFFFHHFHHJJJIHJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1206:2126 1:Y:0:AACAATGG
-NATTCTGCCATATTGGTCCGACAGT
-+
-#1=DDFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1077:2139 1:Y:0:AACAATGG
-CACAGGCTTCCACGGACTTAACGTC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1112:2245 1:Y:0:AACAATGG
-TGCCATCTGCTCTGGGAAGCACCAG
-+
-1:=DDDDDFBC:DEFIFFFIEF at BE
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.2.fastq
deleted file mode 100644
index db34739..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1138:2141 2:Y:0:AACAATGG
-TCCGATCTGCTTCAGGTCGATCAGA
-+
-CCCFFFFFHGHHHJJIGHIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1206:2126 2:Y:0:AACAATGG
-ATCTGTCCAGTGGTGCACTGAATGT
-+
-CCCFFFFFHHHHHHIIJJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1077:2139 2:Y:0:AACAATGG
-NATTAGTTGGCGGATGAAGCAGATA
-+
-#4=DFFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1112:2245 2:Y:0:AACAATGG
-TCGTAGTGTTGTAATTTCGTCTTCT
-+
-?8?DBDDDCCFCAACGGFFCBFFAE
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.barcode_1.fastq
deleted file mode 100644
index fa6ebcd..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACAATGG.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1138:2141 :Y:0:AACAATGG
-AACAATGG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1206:2126 :Y:0:AACAATGG
-AACAATGG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1077:2139 :Y:0:AACAATGG
-AACAATGG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1112:2245 :Y:0:AACAATGG
-AACAATGG
-+
-@@?BBDDD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.1.fastq
deleted file mode 100644
index fb4eb91..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1197:2200 1:Y:0:AACGCATT
-GGGCGCCCCGTGAGGACCCAGTCCT
-+
- at C@FFADDFFCFCEHIIJIJJIEFC
- at machine1:HiMom:abcdeACXX:1:1101:1308:2153 1:N:0:AACGCATT
-TTTTGGAAGAGACCTCAATTACTGT
-+
-???DDDDD?:22AE:A2<3,AF?3A
- at machine1:HiMom:abcdeACXX:1:1101:1452:2132 1:Y:0:AACGCATT
-NCGTCCTGGAAAACGGGGCGCGGCT
-+
-#1=BDBDDFHHHHF at FHDHIGIIII
- at machine1:HiMom:abcdeACXX:1:1201:1150:2161 1:Y:0:AACGCATT
-AAGTCACCTAATATCTTTTTTTTTT
-+
-@@<??;?D?CFD,A4CDDHFBIIID
- at machine1:HiMom:abcdeACXX:1:2101:1240:2197 1:N:0:AACGCATT
-ATAAAACATAGCAATATTTTCCTAT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1336:2109 1:Y:0:AACGCATT
-NACTATCAGGATCGTGGCTATTTTG
-+
-#1BDDFFFHHHHHJIJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1427:2081 1:Y:0:AACGCATT
-NCGAGTGCCTAGTGGGCCACTTTTG
-+
-#4=DDBDFHHHHFHIJJJJIJJJJI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.2.fastq
deleted file mode 100644
index fccce0a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.2.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1197:2200 2:Y:0:AACGCATT
-ATATTCCACTGGAACCACAGAACCC
-+
-@@@FFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1308:2153 2:N:0:AACGCATT
-TCTGTAAGGTAATCCCCGCATGTGT
-+
-1?1=4===AFFDFFGFDGFB at CFB:
- at machine1:HiMom:abcdeACXX:1:1101:1452:2132 2:Y:0:AACGCATT
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHHHHJJJJJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1150:2161 2:Y:0:AACGCATT
-TTCTCACTACTGTGATTGTGCCACT
-+
- at C@FFFFFGHHHHGIIIICEHCFGH
- at machine1:HiMom:abcdeACXX:1:2101:1240:2197 2:N:0:AACGCATT
-ACTGGAGATCCTTGTTACATGCCCA
-+
-??+++A:DD?:ADEE@::C4:C<E:
- at machine1:HiMom:abcdeACXX:1:2101:1336:2109 2:Y:0:AACGCATT
-AGACCAGAACAGCTCCAGGTGCTCC
-+
-CCCFFFFFHHHHHJJJJJJCGHIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1427:2081 2:Y:0:AACGCATT
-CCGACTTCCATGGCCACCGTCCTGC
-+
-CCCFFFFFHHHHHJJJIIGFIIJJI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.barcode_1.fastq
deleted file mode 100644
index ae7cce7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AACGCATT.barcode_1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1197:2200 :Y:0:AACGCATT
-AACGCATT
-+
- at CCFDFFF
- at machine1:HiMom:abcdeACXX:1:1101:1308:2153 :N:0:AACGCATT
-AACGCATT
-+
-:?@B?@DD
- at machine1:HiMom:abcdeACXX:1:1101:1452:2132 :Y:0:AACGCATT
-AACGCATT
-+
- at CCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1150:2161 :Y:0:AACGCATT
-AACGCATT
-+
-@@@FDDDD
- at machine1:HiMom:abcdeACXX:1:2101:1240:2197 :N:0:AACGCATT
-AACGCATT
-+
-88+AD@?8
- at machine1:HiMom:abcdeACXX:1:2101:1336:2109 :Y:0:AACGCATT
-AACGCATT
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1427:2081 :Y:0:AACGCATT
-AACGCATT
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.1.fastq
deleted file mode 100644
index 6326fe4..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1236:2121 1:Y:0:ACAGGTAT
-NGGTGCTTCATATCCCTCTAGAGGA
-+
-#1=BDDFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1341:2116 1:Y:0:ACAGGTAT
-NAGAAGCCCCAGGAGGAAGACAGTC
-+
-#1=DDFFFHHHHHHHJIIJJJJJGI
- at machine1:HiMom:abcdeACXX:1:2101:1063:2206 1:Y:0:ACAGGTAT
-TCCTATTCGCCTACACAATTCTCCG
-+
-CCCFFFFFHHHHHJJJJJJJHJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1325:2083 1:Y:0:ACAGGTAT
-NCAGAAGAAAGGGCCTTGTCGGAGG
-+
-#1=DDDDDHHFHDGI at EEHG:?FA8
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.2.fastq
deleted file mode 100644
index e3fc8e5..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1236:2121 2:Y:0:ACAGGTAT
-TTGCGCTTACTTTGTAGCCTTCATC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1341:2116 2:Y:0:ACAGGTAT
-ATAACAGCGAGACTGGCAACTTAAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1063:2206 2:Y:0:ACAGGTAT
-NTGCTAGGATGAGGATGGATAGTAA
-+
-#1=DDDFFHHHHHJHIIJHIIIHHJ
- at machine1:HiMom:abcdeACXX:1:2101:1325:2083 2:Y:0:ACAGGTAT
-TGTGCTCTTCCGATCTGGAGAAAAA
-+
-#########################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.barcode_1.fastq
deleted file mode 100644
index e99ec81..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGGTAT.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1236:2121 :Y:0:ACAGGTAT
-ACAGGTAT
-+
-CCCFFDDF
- at machine1:HiMom:abcdeACXX:1:1201:1341:2116 :Y:0:ACAGGTAT
-ACAGGTAT
-+
-CCCFFBDD
- at machine1:HiMom:abcdeACXX:1:2101:1063:2206 :Y:0:ACAGGTAT
-ACAGGTAT
-+
-CCCFFDFF
- at machine1:HiMom:abcdeACXX:1:2101:1325:2083 :Y:0:ACAGGTAT
-ACAGGTAT
-+
-@@@BD=DD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.1.fastq
deleted file mode 100644
index 0bf30ad..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:2101:1048:2238 1:Y:0:ACAGTTGA
-NCTGCCGTGTCCTGACTTCTGGAAT
-+
-#1:B?ADDACF<DCG;EG<FHH at CE
- at machine1:HiMom:abcdeACXX:1:2101:1216:2193 1:Y:0:ACAGTTGA
-TTTTCTTGGCCTCTGTTTTTTTTTT
-+
-BCCFDFFFHHFFHJIGIJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.2.fastq
deleted file mode 100644
index 06756b0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:2101:1048:2238 2:Y:0:ACAGTTGA
-NGTCACATCGTTGAAGCACTGGATC
-+
-#11ADDDB<CFFHCHGDBHGIIIII
- at machine1:HiMom:abcdeACXX:1:2101:1216:2193 2:Y:0:ACAGTTGA
-AGGCATGACACTGCATTTTAAATAC
-+
-@@@DDDDDHFFHHGGDFHFHIIHGG
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.barcode_1.fastq
deleted file mode 100644
index 494500e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAGTTGA.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:2101:1048:2238 :Y:0:ACAGTTGA
-ACAGTTGA
-+
-?@7DDDDA
- at machine1:HiMom:abcdeACXX:1:2101:1216:2193 :Y:0:ACAGTTGA
-ACAGTTGA
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.1.fastq
deleted file mode 100644
index b707973..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1259:2152 1:Y:0:ACTAAGAC
-CACCTATAATCCCAGCTACTCCAGA
-+
-CCCFFFFFHHHHHJJJJJJIJJJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1261:2127 1:N:0:ACTAAGAC
-NTGAAATCTGGATAGGCTGGAGTTA
-+
-#0-@@@###################
- at machine1:HiMom:abcdeACXX:1:2101:1021:2209 1:Y:0:ACTAAGAC
-NGGCCCCACCCTCCTCCAGCACGTC
-+
-#1=DDFFFHHHHHJJJJJJHIIHFH
- at machine1:HiMom:abcdeACXX:1:2101:1262:2128 1:N:0:ACTAAGAC
-AGCAGAAGGGCAAAAGCTGGCTTGA
-+
-9;<@:@###################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.2.fastq
deleted file mode 100644
index c5caacf..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1259:2152 2:Y:0:ACTAAGAC
-ATTTTTATATTTTTTTAGACATAGG
-+
-CCCFFFFFGHHHHJJJJIGIIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1261:2127 2:N:0:ACTAAGAC
-TTTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFHGHHHJJIFDDDDDDDD
- at machine1:HiMom:abcdeACXX:1:2101:1021:2209 2:Y:0:ACTAAGAC
-NNGGAAGGCTGCTAGCTGGCCAGAG
-+
-##08@>??@@??@?????????>?@
- at machine1:HiMom:abcdeACXX:1:2101:1262:2128 2:N:0:ACTAAGAC
-TCTTGTGGTAACTTTTCTGACACCT
-+
--(---9@;@?:8>?4:>?@######
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.barcode_1.fastq
deleted file mode 100644
index 4e1fb6b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTAAGAC.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1259:2152 :Y:0:ACTAAGAC
-ACTAAGAC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1261:2127 :N:0:ACTAAGAC
-ACTAAGAC
-+
->7+ at A7A7
- at machine1:HiMom:abcdeACXX:1:2101:1021:2209 :Y:0:ACTAAGAC
-ACTAAGAC
-+
- at CCDFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1262:2128 :N:0:ACTAAGAC
-ACTAAGAC
-+
-1+8?ADD8
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.1.fastq
deleted file mode 100644
index 97623fe..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1458:2109 1:Y:0:ACTGTATC
-NGAGACCATAGAGCGGATGCTTTCA
-+
-#1=DDDFFHHGHGIJJIGIIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1105:2131 1:Y:0:ACTGTATC
-TTGGAACACAGCGGGAATCACAGCA
-+
-CCCFFFFFHHHHHJIJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1349:2084 1:Y:0:ACTGTATC
-NCAAGTAGCAGTGTCACGCCTTAGC
-+
-#1=DDBDDADFDDBEH at HC=CEGG@
- at machine1:HiMom:abcdeACXX:1:2101:1365:2094 1:Y:0:ACTGTATC
-NAAGGTGAAGGCCGGCGCGCTCGCC
-+
-#1=BDDDFFHHHHJGGGIGFIHIIJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.2.fastq
deleted file mode 100644
index 1605b41..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1458:2109 2:Y:0:ACTGTATC
-GATACGAACACACAAGAACTTTTTT
-+
-CCCFFFFFHHHHHJJJJJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1105:2131 2:Y:0:ACTGTATC
-CAGCAGCAGCAACAGCAGAAACATG
-+
-CCCFFFFFHHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1349:2084 2:Y:0:ACTGTATC
-AGTCTGAATCATTGGTGTCTGAAGA
-+
-<5;??=>=>>?##############
- at machine1:HiMom:abcdeACXX:1:2101:1365:2094 2:Y:0:ACTGTATC
-GCTCTTCCGATCTTGTGCTCTTCCG
-+
-CCCFFFFDHFHHGJJIIJIJJIHII
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.barcode_1.fastq
deleted file mode 100644
index a5cae5c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTATC.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1458:2109 :Y:0:ACTGTATC
-ACTGTATC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1105:2131 :Y:0:ACTGTATC
-ACTGTATC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1349:2084 :Y:0:ACTGTATC
-ACTGTATC
-+
-=;7+22<A
- at machine1:HiMom:abcdeACXX:1:2101:1365:2094 :Y:0:ACTGTATC
-ACTGTACC
-+
-########
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.1.fastq
deleted file mode 100644
index 27ac39f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1406:2222 1:Y:0:AGCATGGA
-CTCCCCCCGGGCTGAACCAGGGTAC
-+
-CCCFFDDDDHDFHIIIIIIIII9DG
- at machine1:HiMom:abcdeACXX:1:1201:1291:2158 1:Y:0:AGCATGGA
-AGAAGGGGAAAGCCTTCATCTTGGC
-+
-BCBFFFFFHHHHHJJJJJIIFIJIJ
- at machine1:HiMom:abcdeACXX:1:2101:1370:2116 1:Y:0:AGCATGGA
-NTGGTGGTCCATAGAGATTTGAAAC
-+
-#1:4BD7DACF?FCA:4+<ACHIIH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.2.fastq
deleted file mode 100644
index 308b145..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.2.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1406:2222 2:Y:0:AGCATGGA
-GGCTGGACTCCCCTGGTTCTGGGCA
-+
-;?@DDDBD?FHDFGIIIGIGHHIII
- at machine1:HiMom:abcdeACXX:1:1201:1291:2158 2:Y:0:AGCATGGA
-CGTGTGCTCTTCCGATCTGATGGGC
-+
- at CCFFFDD?FHHFGEHHIIDHIIII
- at machine1:HiMom:abcdeACXX:1:2101:1370:2116 2:Y:0:AGCATGGA
-CACCATCTGACATCATGTTTGAAAG
-+
-@@@DFFFDFFHDHIGBHHII<HEDB
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.barcode_1.fastq
deleted file mode 100644
index 83c6cb0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGCATGGA.barcode_1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1406:2222 :Y:0:AGCATGGA
-AGCATGGA
-+
-C@@DBFEF
- at machine1:HiMom:abcdeACXX:1:1201:1291:2158 :Y:0:AGCATGGA
-AGCATGGA
-+
- at CCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1370:2116 :Y:0:AGCATGGA
-AGCATGGA
-+
-?:8A?3:B
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.1.fastq
deleted file mode 100644
index 0c29862..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1263:2236 1:N:0:AGGTAAGG
-CTTTGAAGACATTGTGAGATCTGTA
-+
-<==A<42 at C+A4A?,2A@=4 at 7A??
- at machine1:HiMom:abcdeACXX:1:2101:1054:2162 1:Y:0:AGGTAAGG
-NCCAGGTGTCTTCCCGGGCCCTGCC
-+
-#1=DDFBDFHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1163:2203 1:Y:0:AGGTAAGG
-TCTCCATGTGAAACAAGCAAAAAGA
-+
-CCCFFFFFHHHHGJJJIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1249:2231 1:Y:0:AGGTAAGG
-GTTATTGATAGGATACTGTACAAAC
-+
- at BCFFFFDHHHHFIJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.2.fastq
deleted file mode 100644
index e6ec62a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1263:2236 2:N:0:AGGTAAGG
-AGTTCTTCAGTAATTTTAGTACTGC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1054:2162 2:Y:0:AGGTAAGG
-NGGACAGGGAAGGGAAGGAAGGGTG
-+
-#4=DDFDFHHHHHJIJIIDHHGICG
- at machine1:HiMom:abcdeACXX:1:2101:1163:2203 2:Y:0:AGGTAAGG
-TTGGTTCACTTATGTATTTATGAAT
-+
- at CCFDFFFHHHHHJHIIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1249:2231 2:Y:0:AGGTAAGG
-TCTCTCGGCCTTCCACTCTAGCATA
-+
-@@@FFFFFFHHGHIJJJGJIIJHIJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.barcode_1.fastq
deleted file mode 100644
index a8d8a51..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTAAGG.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1263:2236 :N:0:AGGTAAGG
-AGGTAAGG
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1054:2162 :Y:0:AGGTAAGG
-AGGTAAGG
-+
-B at BDDFFF
- at machine1:HiMom:abcdeACXX:1:2101:1163:2203 :Y:0:AGGTAAGG
-AGGTAAGG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1249:2231 :Y:0:AGGTAAGG
-AGGTAAGG
-+
-@@CBDFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.1.fastq
deleted file mode 100644
index b8fd6ca..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1150:2228 1:Y:0:AGGTCGCA
-GCTACTCAGTAGACAGTCCCACCCT
-+
-@@CADDDDFCFHHIIIIGGIIGGGI
- at machine1:HiMom:abcdeACXX:1:1101:1491:2120 1:Y:0:AGGTCGCA
-NGGCAGGTGCCCCCACTTGACTCTC
-+
-#1?DFFFFGHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1190:2194 1:Y:0:AGGTCGCA
-AACCTGGCGCTAAACCATTCGTAGA
-+
-CCCFFFFFHHHHHJJJJJJJJIJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1188:2195 1:Y:0:AGGTCGCA
-TTAGACCGTCGTGAGACAGGTTAGT
-+
- at CCFFFFFHHHHHJJJJJIIEHIJH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.2.fastq
deleted file mode 100644
index b8537f5..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1150:2228 2:Y:0:AGGTCGCA
-ATGGGAGGCGATTCCTAGGGGGTTG
-+
-8?=DD8;@BH6DHD<FGGGEIGHIG
- at machine1:HiMom:abcdeACXX:1:1101:1491:2120 2:Y:0:AGGTCGCA
-GGCCAGGCTGAACTTCTGAGCTGCT
-+
-CCCFFFFFHHHGHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1190:2194 2:Y:0:AGGTCGCA
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1188:2195 2:Y:0:AGGTCGCA
-GCACATACACCAAATGTCTGAACCT
-+
-CCCFFFFFHHHHHJJJHIJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.barcode_1.fastq
deleted file mode 100644
index 3c18d15..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGGTCGCA.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1150:2228 :Y:0:AGGTCGCA
-AGGTCGCA
-+
-@@@DDFFF
- at machine1:HiMom:abcdeACXX:1:1101:1491:2120 :Y:0:AGGTCGCA
-AGGTCGCA
-+
-BCCDFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1190:2194 :Y:0:AGGTCGCA
-AGGTCGCA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1188:2195 :Y:0:AGGTCGCA
-AGGTCGCA
-+
-BCCDFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.1.fastq
deleted file mode 100644
index cccbe53..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1100:2207 1:Y:0:ATTATCAA
-ACGACAGACGTTCTTTCTTTGCTGC
-+
-CCCFFFFFHHFHHJIJJJJJHIJJH
- at machine1:HiMom:abcdeACXX:1:1101:1157:2135 1:Y:0:ATTATCAA
-NGGACATTGTAATCATTTCTTACAA
-+
-#1=DD?DDHHHHHGGHIIIIIIIII
- at machine1:HiMom:abcdeACXX:1:1101:1269:2170 1:Y:0:ATTATCAA
-ACAGTGTGGGAGGCAGACGAAGAGA
-+
-@@@DDDDDFA:C at EGA?FD<FFHII
- at machine1:HiMom:abcdeACXX:1:1201:1018:2217 1:N:0:ATTATCAA
-NTTTCTCTGGGCGCAAAGATGTTCA
-+
-#07;8=8<<99(:=@@/@7>>6=?>
- at machine1:HiMom:abcdeACXX:1:1201:1118:2198 1:Y:0:ATTATCAA
-CAAGTGTACAGGATTAGACTGGGTT
-+
-BCCFDEBDHHHHHIJJJGIIIJJGH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.2.fastq
deleted file mode 100644
index b725e93..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.2.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1100:2207 2:Y:0:ATTATCAA
-AGGCTNNNNNNNNNNNNGNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1157:2135 2:Y:0:ATTATCAA
-TTTAAAGTCTTAATCAAAGATGATA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1269:2170 2:Y:0:ATTATCAA
-TTCCAAGCCTGTGCTTTAAGGAAAA
-+
-@@<ADBDBDF8DDCFH at GIE@@GGH
- at machine1:HiMom:abcdeACXX:1:1201:1018:2217 2:N:0:ATTATCAA
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1118:2198 2:Y:0:ATTATCAA
-AATAAACTTTATTAAAGCAGTTAAA
-+
-C at CFFFFFHDHHHGIIIJJJIJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.barcode_1.fastq
deleted file mode 100644
index 9d77783..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTATCAA.barcode_1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1100:2207 :Y:0:ATTATCAA
-ATTATCAA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1157:2135 :Y:0:ATTATCAA
-ATTATCAA
-+
-C at CFFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1269:2170 :Y:0:ATTATCAA
-ATTATCAA
-+
-@@@DDDF?
- at machine1:HiMom:abcdeACXX:1:1201:1018:2217 :N:0:ATTATCAA
-ATTATCAA
-+
-;<;:BBDD
- at machine1:HiMom:abcdeACXX:1:1201:1118:2198 :Y:0:ATTATCAA
-ATTATCAA
-+
-@@@DDBDD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.1.fastq
deleted file mode 100644
index 3ed772b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1309:2210 1:Y:0:ATTCCTCT
-ACACCAACCACCCAACTATCTATAA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1018:2133 1:Y:0:ATTCCTCT
-NAAAACTTGAGGATGCTATGCAAGC
-+
-#1:B:ADDDDDDDEEAEBF9FFEBF
- at machine1:HiMom:abcdeACXX:1:1201:1073:2225 1:Y:0:ATTCCTCT
-GGGGCTGAGACCTTTGCTGATGGTG
-+
-@@@FFFFFHHHGHJJJJJIIIGICH
- at machine1:HiMom:abcdeACXX:1:1201:1242:2207 1:Y:0:ATTCCTCT
-ATGGCAAAGTGGTGTCTGAGACCAA
-+
-BCCFFFFFGHHHHHIIIJFHIJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.2.fastq
deleted file mode 100644
index 31f3e57..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1309:2210 2:Y:0:ATTCCTCT
-AGTGGGCTAGGGCATTTTTAATCTT
-+
-@@?DFFDFHHHDFHJIJJIJGIIIJ
- at machine1:HiMom:abcdeACXX:1:1201:1018:2133 2:Y:0:ATTCCTCT
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1073:2225 2:Y:0:ATTCCTCT
-CGTGTGCTCTTCCGATCTGGAGGGT
-+
- at BBDFFFFHHHHHJJJJJJJJJJJ:
- at machine1:HiMom:abcdeACXX:1:1201:1242:2207 2:Y:0:ATTCCTCT
-ATCTTTTATTGGCCTCCTGCTCCCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.barcode_1.fastq
deleted file mode 100644
index bb2bfeb..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ATTCCTCT.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1309:2210 :Y:0:ATTCCTCT
-ATTCCTCT
-+
-?@@ADEEF
- at machine1:HiMom:abcdeACXX:1:1201:1018:2133 :Y:0:ATTCCTCT
-ATTCCTCT
-+
-8??=BBBA
- at machine1:HiMom:abcdeACXX:1:1201:1073:2225 :Y:0:ATTCCTCT
-ATTCCTCT
-+
-B@@BDEFF
- at machine1:HiMom:abcdeACXX:1:1201:1242:2207 :Y:0:ATTCCTCT
-ATTCCTCT
-+
-?BBDDDFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.1.fastq
deleted file mode 100644
index 3d04499..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1140:2120 1:Y:0:CAACTCTC
-NCCCCAACATTCTAATTATGCCTCA
-+
-#1:BDFFDHFFDFIJJJIIJIIIII
- at machine1:HiMom:abcdeACXX:1:1101:1328:2225 1:Y:0:CAACTCTC
-GAAATGCATCTGTCTTAGAAACTGG
-+
-??@=BDDDFDD<<,<2:C<F:FFEA
- at machine1:HiMom:abcdeACXX:1:1201:1127:2112 1:N:0:CAACTCTC
-NGTCAAGGATGTTCGTCGTGGCAAC
-+
-#1=BDDDDDDDDDID<AE?@<CEEE
- at machine1:HiMom:abcdeACXX:1:1201:1452:2143 1:Y:0:CAACTCTC
-TATCCCCTCTAAGACGGACCTGGGT
-+
-CCCFFFFFHHHHHJJIIIJJJJJJG
- at machine1:HiMom:abcdeACXX:1:1201:1486:2146 1:N:0:CAACTCTC
-GTTCTCTGTCCCCAGGTCCTGTCTC
-+
-===A7<7222<<=C=?+<7>@?ACB
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.2.fastq
deleted file mode 100644
index 86e9f33..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.2.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1140:2120 2:Y:0:CAACTCTC
-TTTTTTTTTTTTTAACTTTGCAAAT
-+
-@@@DDDDDHHHHFB at 9FHI@BFH@@
- at machine1:HiMom:abcdeACXX:1:1101:1328:2225 2:Y:0:CAACTCTC
-AGGAAATTAGGACTTACCTGACATA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1127:2112 2:N:0:CAACTCTC
-TAATCACCTGAGCAGTGAAGCCAGC
-+
-@<@?BDDDHD?FDBHI?AHGGGDFH
- at machine1:HiMom:abcdeACXX:1:1201:1452:2143 2:Y:0:CAACTCTC
-TTTTAGTCTTAGCATTTACTTTCCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1486:2146 2:N:0:CAACTCTC
-TTTTTTTTTTTTTTTTTTTTTGGGC
-+
-<<<@??@??@???????########
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.barcode_1.fastq
deleted file mode 100644
index e0a8164..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAACTCTC.barcode_1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1140:2120 :Y:0:CAACTCTC
-CAACTCTC
-+
-@@@DDFDF
- at machine1:HiMom:abcdeACXX:1:1101:1328:2225 :Y:0:CAACTCTC
-CAACTCTC
-+
-??;=A:B=
- at machine1:HiMom:abcdeACXX:1:1201:1127:2112 :N:0:CAACTCTC
-CAACTCTC
-+
-=??BA?BD
- at machine1:HiMom:abcdeACXX:1:1201:1452:2143 :Y:0:CAACTCTC
-CAACTCTC
-+
-BC at DDFFF
- at machine1:HiMom:abcdeACXX:1:1201:1486:2146 :N:0:CAACTCTC
-CAACTCTC
-+
-?@@1:DBD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.1.fastq
deleted file mode 100644
index bdf2139..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1316:2126 1:Y:0:CAATAGTC
-NAAAAAAAAAAAAAAAAAAAAAAAA
-+
-#1BDFFFFHHHHHJJJJFDDDDDDD
- at machine1:HiMom:abcdeACXX:1:1101:1399:2128 1:Y:0:CAATAGTC
-NTGCCCTTCGTCCTGGGAAACGGGG
-+
-#1BDFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1054:2151 1:Y:0:CAATAGTC
-NTAGTGCTGGGCACTAAGTAATACC
-+
-#4=DDDFFHHHHHJJJJJHIJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1345:2181 1:Y:0:CAATAGTC
-GGATAATCCTATTTATTACCTCAGA
-+
-BBBDDFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1392:2184 1:Y:0:CAATAGTC
-TTTCAGATTGGTCATTGTTAGTGTA
-+
-??@BDDDEHBHADHHIIEHDHFHFF
- at machine1:HiMom:abcdeACXX:1:2101:1172:2152 1:N:0:CAATAGTC
-AACACGGACAAAGGAGTCTAACACG
-+
-<<<??8@@#################
- at machine1:HiMom:abcdeACXX:1:2101:1491:2093 1:Y:0:CAATAGTC
-NCTATGCCGATCGGGTGTCCGCACT
-+
-#1=DDDDDHHFHHIIEHHHBGHGII
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.2.fastq
deleted file mode 100644
index 5029765..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.2.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1316:2126 2:Y:0:CAATAGTC
-TCTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFHHHHHJJJJHFDDDDDD
- at machine1:HiMom:abcdeACXX:1:1101:1399:2128 2:Y:0:CAATAGTC
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHHHHIJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1054:2151 2:Y:0:CAATAGTC
-GTCAGGCACTGAGAATATATGGGTG
-+
-CBCFFFFFHHHHHJJJJJJJJJJEG
- at machine1:HiMom:abcdeACXX:1:1201:1345:2181 2:Y:0:CAATAGTC
-ATACGGATGTGTTTAGGAGTGGGAC
-+
-CCCFFFFFHHHHHIIJJHJFHIJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1392:2184 2:Y:0:CAATAGTC
-ATCTTTATTCATTTGTATGATCTTA
-+
-@@BFFFFFHFFHFHIHIIJIJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1172:2152 2:N:0:CAATAGTC
-ATCGTTTCTGGGGACTAGTGAGGCG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1491:2093 2:Y:0:CAATAGTC
-AGAGACGGGGTCTCGCTATGTTGCC
-+
-BCCDFFFFHHHHHJIIJJJJIJIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.barcode_1.fastq
deleted file mode 100644
index 1d92fa2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGTC.barcode_1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1316:2126 :Y:0:CAATAGTC
-CAATAGAC
-+
-1>>7A###
- at machine1:HiMom:abcdeACXX:1:1101:1399:2128 :Y:0:CAATAGTC
-CAATAGTC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1054:2151 :Y:0:CAATAGTC
-CAATAGTC
-+
-CCCFFFDF
- at machine1:HiMom:abcdeACXX:1:1201:1345:2181 :Y:0:CAATAGTC
-CAATAGTC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1392:2184 :Y:0:CAATAGTC
-CAATAGTC
-+
- at CCFFDDE
- at machine1:HiMom:abcdeACXX:1:2101:1172:2152 :N:0:CAATAGTC
-CAATAGTC
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1491:2093 :Y:0:CAATAGTC
-CAATAGTC
-+
-@@@FDEBD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.1.fastq
deleted file mode 100644
index 39cb19f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1420:2213 1:Y:0:CAGCGGTA
-TACCTGGTTGATCCTGCCAGTAGCA
-+
-@@CFFFFDDHHGHJGGHIJJIHGBH
- at machine1:HiMom:abcdeACXX:1:1201:1364:2113 1:Y:0:CAGCGGTA
-NCACTCATTTTCTTATGTGGGATAT
-+
-#1=DDFDFHHHHHIJJIFHIIHHHI
- at machine1:HiMom:abcdeACXX:1:2101:1072:2170 1:Y:0:CAGCGGTA
-ATCACCGCACTCATTTCCCGCTTCC
-+
-CCCFFFFFHHHACEEGHIIBHIIII
- at machine1:HiMom:abcdeACXX:1:2101:1123:2095 1:Y:0:CAGCGGTA
-NTGGACAACATGTTCGAGAGCTACA
-+
-#1=BBDDDFFFFDGFGIG?F;HHFI
- at machine1:HiMom:abcdeACXX:1:2101:1151:2236 1:N:0:CAGCGGTA
-TTAAAGAGGTTCAGGGATGCAGAGT
-+
-#########################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.2.fastq
deleted file mode 100644
index 3f02733..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.2.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1420:2213 2:Y:0:CAGCGGTA
-TTCACTGTACCGGCCGTGCGTACTT
-+
- at CCFFFFDHHHFGIJJJJJJGHIGG
- at machine1:HiMom:abcdeACXX:1:1201:1364:2113 2:Y:0:CAGCGGTA
-TAAAGAGAGCCAGTGGAGTTACGAC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1072:2170 2:Y:0:CAGCGGTA
-NGGGGAGACAGAGAGGATCAGAAGT
-+
-#4=BDDFDHHDFHEGFEGGIJIIIG
- at machine1:HiMom:abcdeACXX:1:2101:1123:2095 2:Y:0:CAGCGGTA
-TCCGCCTCCAGCTTCAGCTTCTCCT
-+
-@@@FDDFFHHHHHJHGGJIJJJEHH
- at machine1:HiMom:abcdeACXX:1:2101:1151:2236 2:N:0:CAGCGGTA
-TTTGAAGCCTCTTTATCCTTGGCAT
-+
-#########################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.barcode_1.fastq
deleted file mode 100644
index 7d6da72..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGTA.barcode_1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1420:2213 :Y:0:CAGCGGTA
-CAGCGGTA
-+
- at C@FFFDF
- at machine1:HiMom:abcdeACXX:1:1201:1364:2113 :Y:0:CAGCGGTA
-CAGCGGTA
-+
-C at CFFF@D
- at machine1:HiMom:abcdeACXX:1:2101:1072:2170 :Y:0:CAGCGGTA
-CAGCGGTA
-+
-B@@DFDDF
- at machine1:HiMom:abcdeACXX:1:2101:1123:2095 :Y:0:CAGCGGTA
-CAGCGGTA
-+
-@?@DDF@@
- at machine1:HiMom:abcdeACXX:1:2101:1151:2236 :N:0:CAGCGGTA
-TAGCGGTA
-+
-########
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.1.fastq
deleted file mode 100644
index 8305d35..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1083:2193 1:Y:0:CCAACATT
-TTCTACCTCACCTTAGGGAGAAGAC
-+
-@@@DDBDDD>F><C<4CG?EHGHIG
- at machine1:HiMom:abcdeACXX:1:1101:1175:2197 1:Y:0:CCAACATT
-CCCCTGAGGACACCATCCCACTCCA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1138:2227 1:N:0:CCAACATT
-GCTGACACAATCTCTTCCGCCTGGT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1260:2165 1:Y:0:CCAACATT
-GGACACGGACAGGATTGACAGATTG
-+
-BCBFFFFFHHHHHHIIJHIIIFHIJ
- at machine1:HiMom:abcdeACXX:1:1201:1281:2133 1:Y:0:CCAACATT
-NGGAAATCCAGAAAACATAGAAGAT
-+
-#1=DDFFFHHHHHIJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1331:2162 1:Y:0:CCAACATT
-ACGCTCGGCTAATTTTTGTATTTTT
-+
- at CCFFFDFHHHHHIJJJJHIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1186:2093 1:Y:0:CCAACATT
-NCGACCATAAACGATGCCGACCGGC
-+
-#4=DFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.2.fastq
deleted file mode 100644
index ab8867f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.2.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1083:2193 2:Y:0:CCAACATT
-AGGCTNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1175:2197 2:Y:0:CCAACATT
-AAGAGCTGGGGAACATCCAGAAAGG
-+
-BC at FFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1138:2227 2:N:0:CCAACATT
-GACAAATATAGGAAATAGAAGCTAT
-+
-=1=A=AAA,2?4>7C<<4<A+3<AB
- at machine1:HiMom:abcdeACXX:1:1201:1260:2165 2:Y:0:CCAACATT
-ATCTGATCTAAGTTGGGGGACGCCG
-+
-@@@FFDFFHHHHHJJJIJIIIGIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1281:2133 2:Y:0:CCAACATT
-GCAACAAAATTTCATATGACTTAGC
-+
-CCCFFFFFHHHHHJJIIIHICHIIJ
- at machine1:HiMom:abcdeACXX:1:1201:1331:2162 2:Y:0:CCAACATT
-TAATCCCAGTACTTTGGGAGGCCAA
-+
-CCCFFFFFHHHHHJJJJIJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1186:2093 2:Y:0:CCAACATT
-AATGTTGGGAGGACAATGATGGAAA
-+
-#########################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.barcode_1.fastq
deleted file mode 100644
index 576b369..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAACATT.barcode_1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1083:2193 :Y:0:CCAACATT
-CCAACATT
-+
-?@;DD?BD
- at machine1:HiMom:abcdeACXX:1:1101:1175:2197 :Y:0:CCAACATT
-CCAACATT
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1138:2227 :N:0:CCAACATT
-CCAACATT
-+
-########
- at machine1:HiMom:abcdeACXX:1:1201:1260:2165 :Y:0:CCAACATT
-CCAACATT
-+
-C at CFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1281:2133 :Y:0:CCAACATT
-CCAACATT
-+
-C at CFFFDF
- at machine1:HiMom:abcdeACXX:1:1201:1331:2162 :Y:0:CCAACATT
-CCAACATT
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1186:2093 :Y:0:CCAACATT
-CCAACATT
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.1.fastq
deleted file mode 100644
index 1f95caa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1212:2230 1:Y:0:CCAGCACC
-TTTCTATTAGCTCTTAGTAAGATTA
-+
-CCCFFFFFHHHHHJJJIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1204:2228 1:Y:0:CCAGCACC
-CCGATACGCTGAGTGTGGTTTGCGG
-+
-CCCFFFFFHHHFHEGGHIHIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1100:2085 1:Y:0:CCAGCACC
-NCACATGGATGAGGAGAATGAGGAT
-+
-#1=DDFFFFHHHHJHIGIHHHIJEH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.2.fastq
deleted file mode 100644
index d5b31ba..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.2.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1212:2230 2:Y:0:CCAGCACC
-TTTTAGCTTTATTGGGGAGGGGGTG
-+
-CCCFFFFFHHGHHJJJJGJJJJJDF
- at machine1:HiMom:abcdeACXX:1:1201:1204:2228 2:Y:0:CCAGCACC
-TCTTCTTGTCGATGAGGAACTTGGT
-+
-@?@FFFFFDHHGHJIJJGHIIJJJH
- at machine1:HiMom:abcdeACXX:1:2101:1100:2085 2:Y:0:CCAGCACC
-ATCTTGATCTCCTCCTTCTTGGCCT
-+
-@@@DDDDDHHFHFEIIIIHHBAHBG
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.barcode_1.fastq
deleted file mode 100644
index 05832a8..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCAGCACC.barcode_1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1212:2230 :Y:0:CCAGCACC
-CCAGCACC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1204:2228 :Y:0:CCAGCACC
-CCAGCACC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1100:2085 :Y:0:CCAGCACC
-CCAGCACC
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.1.fastq
deleted file mode 100644
index 96daf32..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1122:2227 1:Y:0:CGCCTTCC
-AGAAGACGAGGCTGAGAGTGACATC
-+
-@@@FFFFFHHHDHJGHGHCHHJJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1160:2109 1:Y:0:CGCCTTCC
-NAGAAGCCTTTGCACCCTGGGAGGA
-+
-#1=DDDFFHHHHHJJJJJJJJIIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.2.fastq
deleted file mode 100644
index 3c26563..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1122:2227 2:Y:0:CGCCTTCC
-GTCATATAAGGCCCAGTCCAAGGAA
-+
-@@@FFFFFHHHGGIJIGGIJFIJII
- at machine1:HiMom:abcdeACXX:1:1201:1160:2109 2:Y:0:CGCCTTCC
-ACATCCTTCCCATGCCACCAACTCG
-+
-CCCFFFFFGHHHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.barcode_1.fastq
deleted file mode 100644
index a14ab0c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCCTTCC.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1122:2227 :Y:0:CGCCTTCC
-CGCCTTCC
-+
-@@@DDFFF
- at machine1:HiMom:abcdeACXX:1:1201:1160:2109 :Y:0:CGCCTTCC
-CGCCTTCC
-+
-C at BFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.1.fastq
deleted file mode 100644
index 3542f21..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1291:2150 1:Y:0:CGCTATGT
-CGTGGGGAACCTGGCGCTAAACCAT
-+
- at BBFFFFFHHHHHJJJJIJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1314:2233 1:Y:0:CGCTATGT
-GTTTATTGGGGCATTCCTTATCCCA
-+
-@??DDDDBDHF>FCHGGGBFAAED9
- at machine1:HiMom:abcdeACXX:1:1101:1441:2148 1:Y:0:CGCTATGT
-ACTTTCACCGCTACACGACCGGGGG
-+
-CCCFFFFFHGFFHIIFIHJIGGII>
- at machine1:HiMom:abcdeACXX:1:1201:1043:2246 1:Y:0:CGCTATGT
-NTTCTCGGCTGTCATGTGCAACATT
-+
-#1=DDBDFHHHDFFBHGHGHIIJEH
- at machine1:HiMom:abcdeACXX:1:1201:1134:2144 1:Y:0:CGCTATGT
-TGCCAGGAAGTGTTTTTTCTGGGTC
-+
- at CCFFEFFHHFFFGIJJJJJJJJGH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.2.fastq
deleted file mode 100644
index 74bd04e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.2.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1291:2150 2:Y:0:CGCTATGT
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHFHHIJJJIIIGIJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1314:2233 2:Y:0:CGCTATGT
-AGGAAAGTTGGGCTGACCTGACAGA
-+
-@@<DDD;=FBFADBCGDEH?F;FCG
- at machine1:HiMom:abcdeACXX:1:1101:1441:2148 2:Y:0:CGCTATGT
-TTTTGGCTCTAGAGGGGGTAGAGGG
-+
-CCCFFFFFHHDFBHIIJJ1?FGHIJ
- at machine1:HiMom:abcdeACXX:1:1201:1043:2246 2:Y:0:CGCTATGT
-NGCATCATTTCNNGCTTCTCTCTGT
-+
-#0;@@??@=@>##22=;@??><@??
- at machine1:HiMom:abcdeACXX:1:1201:1134:2144 2:Y:0:CGCTATGT
-AGTGTGAGTAATGGTTGAGAGGTGG
-+
-B@?DDDFFFHHGHJHHGFIHHIFGI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.barcode_1.fastq
deleted file mode 100644
index 0a09fe6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CGCTATGT.barcode_1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1291:2150 :Y:0:CGCTATGT
-CGCTATGT
-+
-@@@FFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1314:2233 :Y:0:CGCTATGT
-CGCTATGT
-+
-@<@?B@;A
- at machine1:HiMom:abcdeACXX:1:1101:1441:2148 :Y:0:CGCTATGT
-CGCTATGT
-+
-@@BFFDDD
- at machine1:HiMom:abcdeACXX:1:1201:1043:2246 :Y:0:CGCTATGT
-CGCTATGT
-+
-@<?DD:B=
- at machine1:HiMom:abcdeACXX:1:1201:1134:2144 :Y:0:CGCTATGT
-CGCTATGT
-+
-CCCFFFFD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.1.fastq
deleted file mode 100644
index 75df3c2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1363:2138 1:Y:0:CTAACTCG
-NGTCTGGCCTGCACAGACATCCTAC
-+
-#1=DDFFFHHHHHJJJIJJIJJJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1393:2143 1:Y:0:CTAACTCG
-TGGTTGATCCTGCCAGTAGCATATG
-+
-@@@ADADDFHFFDBHE?G at HIIIEE
- at machine1:HiMom:abcdeACXX:1:2101:1273:2119 1:N:0:CTAACTCG
-NAGATAAGAGTCCACACAGTTGAGT
-+
-#11AAAAA<A?4=C=7?733<ACA3
- at machine1:HiMom:abcdeACXX:1:2101:1414:2098 1:Y:0:CTAACTCG
-NAGGACATCGATAAAGGCGAGGTGT
-+
-#1=DDFFFHHHHHJJJJJJJJJHHG
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.2.fastq
deleted file mode 100644
index edb09e6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1363:2138 2:Y:0:CTAACTCG
-GTTCTTAAACCTGTTAGAACTTCTG
-+
-C@@FFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1393:2143 2:Y:0:CTAACTCG
-GATAAATGCACGCATCCCCCCCGCG
-+
-C at CFFFFFGGHHHHJJJJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1273:2119 2:N:0:CTAACTCG
-ATGATGGATCTTCTCTAACTTGTCA
-+
->=><AAAAA+2AA?CB4@@ABB3?A
- at machine1:HiMom:abcdeACXX:1:2101:1414:2098 2:Y:0:CTAACTCG
-TTGGGGCCGGTGCCGTCGGGCCCAA
-+
-CCCFFFFFHHHHGJJIJJJJJJJIJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.barcode_1.fastq
deleted file mode 100644
index 038b4dc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTAACTCG.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1363:2138 :Y:0:CTAACTCG
-CTAACTCG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1393:2143 :Y:0:CTAACTCG
-CTAACTCG
-+
-@@CFDDFD
- at machine1:HiMom:abcdeACXX:1:2101:1273:2119 :N:0:CTAACTCG
-CTAACTCG
-+
-=++==ADB
- at machine1:HiMom:abcdeACXX:1:2101:1414:2098 :Y:0:CTAACTCG
-CTAACTCG
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.1.fastq
deleted file mode 100644
index 8f1cd46..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1083:2121 1:Y:0:CTATGCGT
-NAGAACTGGCGCTGCGGGATGAACC
-+
-#1=BDFFFHHHHHJJJJJHIJIJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1185:2143 1:Y:0:CTATGCGT
-ATCTGCCTGGTTCGGCCCGCCTGCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1219:2115 1:Y:0:CTATGCGT
-NTATAGTGGAGGCCGGAGCAGGAAC
-+
-#1:DABADHHHFHIIIGGHGIIIII
- at machine1:HiMom:abcdeACXX:1:1201:1472:2121 1:N:0:CTATGCGT
-NTAAAGTGTGAACAAGGAAGGTCAT
-+
-#07>@<9=@################
- at machine1:HiMom:abcdeACXX:1:2101:1013:2146 1:Y:0:CTATGCGT
-NACACTGCTGCAGATGACAAGCAGC
-+
-#4BDFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1231:2208 1:Y:0:CTATGCGT
-ACGCCGCAAGTCAGAGCCCCCCAGA
-+
-@@@DDDFFFFB:DBBEBEFDHBDDB
- at machine1:HiMom:abcdeACXX:1:2101:1233:2133 1:N:0:CTATGCGT
-GAGAGAAGCACTCTTGAGCGGGATA
-+
-0;(@((@)2@###############
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.2.fastq
deleted file mode 100644
index e9bc995..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.2.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1083:2121 2:Y:0:CTATGCGT
-ACACACAACACCACCGCCCTCCCCC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1185:2143 2:Y:0:CTATGCGT
-GCTGAAGGCCCGTGGGCCAGAGGTG
-+
- at CCFFFFFHHHHHJJJJJJJJJJHI
- at machine1:HiMom:abcdeACXX:1:1201:1219:2115 2:Y:0:CTATGCGT
-TGGGAGTAGTTCCCTGCTAAGGGAG
-+
-???DBDBDADDDDIEID:AFFD:?8
- at machine1:HiMom:abcdeACXX:1:1201:1472:2121 2:N:0:CTATGCGT
-GTGTGCTCTTCCGATCTGGAGGATG
-+
-=+=??A4A==A at 7A<?#########
- at machine1:HiMom:abcdeACXX:1:2101:1013:2146 2:Y:0:CTATGCGT
-NNNNCGCTAGAACCAACTTATTCAT
-+
-####24=?@@?@?@@?@@@@@@?@@
- at machine1:HiMom:abcdeACXX:1:2101:1231:2208 2:Y:0:CTATGCGT
-AGCCAGTGTTGGTGTGTTGACTGTT
-+
-@@;1ADABCF;BF<AACGCHEBHC<
- at machine1:HiMom:abcdeACXX:1:2101:1233:2133 2:N:0:CTATGCGT
-TTTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFGHHHHJJJFDDDDDDDD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.barcode_1.fastq
deleted file mode 100644
index a776107..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGT.barcode_1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1083:2121 :Y:0:CTATGCGT
-CTATGCGT
-+
-CCCFFFFD
- at machine1:HiMom:abcdeACXX:1:1201:1185:2143 :Y:0:CTATGCGT
-CTATGCGT
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1219:2115 :Y:0:CTATGCGT
-CCATGCGT
-+
-??<DDA?D
- at machine1:HiMom:abcdeACXX:1:1201:1472:2121 :N:0:CTATGCGT
-CTATGCGC
-+
-;?=D####
- at machine1:HiMom:abcdeACXX:1:2101:1013:2146 :Y:0:CTATGCGT
-CTATGCGT
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1231:2208 :Y:0:CTATGCGT
-CTATGCGT
-+
-@<@?D8 at D
- at machine1:HiMom:abcdeACXX:1:2101:1233:2133 :N:0:CTATGCGT
-CTATGCGT
-+
-=??B####
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.1.fastq
deleted file mode 100644
index b5fa044..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:2101:1102:2221 1:Y:0:CTGCGGAT
-TTTCATCTTATTTCATTGGTTTATA
-+
-CCCFFFFFHHHHHJIJJJJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1126:2082 1:Y:0:CTGCGGAT
-NGTTTTAGGGGTGCGCAGGAGTCAA
-+
-#11=A=DD?DF at D@CCGHIEFH at BG
- at machine1:HiMom:abcdeACXX:1:2101:1216:2172 1:Y:0:CTGCGGAT
-TTTCTTCGCAGGATTTTTCTGAGCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.2.fastq
deleted file mode 100644
index 1d02e67..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.2.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:2101:1102:2221 2:Y:0:CTGCGGAT
-ATAACTGACTCTACTCAGTAGATTA
-+
-CCCFFFFFHHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1126:2082 2:Y:0:CTGCGGAT
-TCTCTTTCCACCTTGGTCACCTTCC
-+
- at C@DDDFFHHHHHJEGGIHHIJGIH
- at machine1:HiMom:abcdeACXX:1:2101:1216:2172 2:Y:0:CTGCGGAT
-GGACTTCTAGGGGATTTAGCGGGGT
-+
-CCCFFFFFHHHHHJJJJJJJJJJJD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.barcode_1.fastq
deleted file mode 100644
index 6e8722b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGCGGAT.barcode_1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:2101:1102:2221 :Y:0:CTGCGGAT
-CTGCGGAT
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1126:2082 :Y:0:CTGCGGAT
-CTGCGGAT
-+
-@@@FFFDA
- at machine1:HiMom:abcdeACXX:1:2101:1216:2172 :Y:0:CTGCGGAT
-CAGCGGAT
-+
-C at CFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.1.fastq
deleted file mode 100644
index 3e478fc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.1.fastq
+++ /dev/null
@@ -1,24 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1403:2194 1:Y:0:CTGTAATC
-CTAAACAGAGAGAAGGTTTCTCTTT
-+
-CCCFFFFFHHHHHJJJFHIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1045:2105 1:N:0:CTGTAATC
-NTAAAGAGAAATCAAGAATACTATT
-+
-#-4@?(@)@@###############
- at machine1:HiMom:abcdeACXX:1:1201:1483:2126 1:N:0:CTGTAATC
-NTGATAAGGTGTTGCTATGTTACCC
-+
-#1:D?DDDDA??2:<CC4:AEDF>?
- at machine1:HiMom:abcdeACXX:1:2101:1011:2102 1:Y:0:CTGTAATC
-NAAACAAAACTGTAGAACTGTGTAT
-+
-#1=DDFFFHHHHHJJIJJJIHHHJJ
- at machine1:HiMom:abcdeACXX:1:2101:1245:2154 1:Y:0:CTGTAATC
-TCGTTAAGTATATTCTTAGGTATTT
-+
-CCCFFDFFFHFHHIIJJJJJFJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1386:2105 1:Y:0:CTGTAATC
-NTACTAAAGAAAAAGTTGAAGAACT
-+
-#1=DDDFFHHHHHJJGHIJJJJIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.2.fastq
deleted file mode 100644
index 8398b40..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.2.fastq
+++ /dev/null
@@ -1,24 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1403:2194 2:Y:0:CTGTAATC
-ACATGGTGAAACCCTGTCTCTACTA
-+
-CCCFFFDDHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1045:2105 2:N:0:CTGTAATC
-NTTTTTTTTTTNNTTTTTTTTTTTT
-+
-#0;@@@@@@@?##0:????????=<
- at machine1:HiMom:abcdeACXX:1:1201:1483:2126 2:N:0:CTGTAATC
-GCATGCAGCTGGGTGCTGTGATGCA
-+
-@@@DDDBB<DD8F<<CGG?AA?A<F
- at machine1:HiMom:abcdeACXX:1:2101:1011:2102 2:Y:0:CTGTAATC
-NNNNNTCACACATAATTTTAAAATT
-+
-#####22@?@@??@@@@@??@@@@@
- at machine1:HiMom:abcdeACXX:1:2101:1245:2154 2:Y:0:CTGTAATC
-ACCAATCAGTAGCACCACTATACAC
-+
-CCCFFFFFHHHHHJJJJJJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1386:2105 2:Y:0:CTGTAATC
-AGGAATTATTCTTCTGCCATAAGGT
-+
-B@@DDFFFHGFHHIJJJJJGIGIJH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.barcode_1.fastq
deleted file mode 100644
index 8163888..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTGTAATC.barcode_1.fastq
+++ /dev/null
@@ -1,24 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1403:2194 :Y:0:CTGTAATC
-CTGTAATC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1045:2105 :N:0:CTGTAATC
-CTGTAATC
-+
-1112 at A##
- at machine1:HiMom:abcdeACXX:1:1201:1483:2126 :N:0:CTGTAATC
-CTGTAATC
-+
- at C<DD:B?
- at machine1:HiMom:abcdeACXX:1:2101:1011:2102 :Y:0:CTGTAATC
-CTGTAATC
-+
-C at CFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1245:2154 :Y:0:CTGTAATC
-CTGTAATC
-+
- at CCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1386:2105 :Y:0:CTGTAATC
-CTGTAATC
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.1.fastq
deleted file mode 100644
index cb24187..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1338:2175 1:Y:0:GAAGGAAG
-CCCACCTTCCGGCGGCCGAAGACAC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1028:2202 1:Y:0:GAAGGAAG
-NTCCTGGGAAACGGGGCGCGGCTGG
-+
-#4BDDDFFHHHHHIJIIJJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:2101:1084:2188 1:Y:0:GAAGGAAG
-TTGCTGCATGGGTTAATTGAGAATA
-+
-CCCFFFFFHHHHFHHIIJJIJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.2.fastq
deleted file mode 100644
index 604d638..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.2.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1338:2175 2:Y:0:GAAGGAAG
-GCTTGTTGGCTTTAACATCCACAAT
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1028:2202 2:Y:0:GAAGGAAG
-NNAAACNCNTNNNNNNNGGNNTGNN
-+
-##42@?###################
- at machine1:HiMom:abcdeACXX:1:2101:1084:2188 2:Y:0:GAAGGAAG
-TACAAGGTCAAAATCAGCAACAAGT
-+
-CCCFFFFDHHHHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.barcode_1.fastq
deleted file mode 100644
index 7aad7f6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAGGAAG.barcode_1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1338:2175 :Y:0:GAAGGAAG
-GAAGGAAG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1028:2202 :Y:0:GAAGGAAG
-GAAGGAAG
-+
-CCCFFDFF
- at machine1:HiMom:abcdeACXX:1:2101:1084:2188 :Y:0:GAAGGAAG
-GAAGGAAG
-+
- at B@FFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.1.fastq
deleted file mode 100644
index 2f3cd2a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1089:2172 1:Y:0:GACCAGGA
-TTCCAGCATGCGGTTTAAGTAGGAT
-+
- at CCFDFDBDFBF:<CEBHAFHHICH
- at machine1:HiMom:abcdeACXX:1:1101:1347:2149 1:Y:0:GACCAGGA
-GAGCAGATCGGAAGAGCACAGATCG
-+
-@@@FFDDDHHHHHIJJBGGHJIHEG
- at machine1:HiMom:abcdeACXX:1:1201:1095:2146 1:Y:0:GACCAGGA
-GCTGAGTCATGTAGTAAGCCTGTGC
-+
-BB at FDDDFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1123:2161 1:N:0:GACCAGGA
-CACTAACTCCTGACCTCAAATAATC
-+
-?7?=DD?DD+CDBE>E at EEF@+<CF
- at machine1:HiMom:abcdeACXX:1:1201:1439:2156 1:Y:0:GACCAGGA
-AGCCGCGAGGTGCTGGCGGACTTCC
-+
-:;1BDDDAA88A<?<E1C:D#####
- at machine1:HiMom:abcdeACXX:1:2101:1207:2084 1:N:0:GACCAGGA
-NTAGATGACCAAAACTTGCAGGGCA
-+
-#1:A<?@A+7A=?CBCCBCCBAAAA
- at machine1:HiMom:abcdeACXX:1:2101:1312:2105 1:Y:0:GACCAGGA
-NTTCCCTCAGGATAGCTGGCGCTCT
-+
-#1=DDFFFGHGHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.2.fastq
deleted file mode 100644
index 759b346..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.2.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1089:2172 2:Y:0:GACCAGGA
-TCCGGNNNNNNNNNNNNNNNNNNNN
-+
-:<<??####################
- at machine1:HiMom:abcdeACXX:1:1101:1347:2149 2:Y:0:GACCAGGA
-GCTCTTCCGATCTGTGCTCTTCCGA
-+
-CCCFFFFFDFHHFIJDGIGGHGIGH
- at machine1:HiMom:abcdeACXX:1:1201:1095:2146 2:Y:0:GACCAGGA
-ACTGACAACACCAAATGCTGCTAAG
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1123:2161 2:N:0:GACCAGGA
-CGTGTGCTCTTCCGATCTGCATACA
-+
-===AAAA8AAAA<AAA)@CBA9>A#
- at machine1:HiMom:abcdeACXX:1:1201:1439:2156 2:Y:0:GACCAGGA
-GGAGATTATTTGCCTTGAAGTAAGC
-+
--;(22<>>@>8@>8;@#########
- at machine1:HiMom:abcdeACXX:1:2101:1207:2084 2:N:0:GACCAGGA
-TCACCACTCTTCTGGGCATCCCCTG
-+
-@@@DDEDFHHHHHIJIHHGHGGJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1312:2105 2:Y:0:GACCAGGA
-GTTGAGAATAGGTTGAGATCGTTTC
-+
- at CCFFFDFHHFHDHIJJJJJJJIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.barcode_1.fastq
deleted file mode 100644
index 5036139..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGA.barcode_1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1089:2172 :Y:0:GACCAGGA
-GACCAGGA
-+
-?@@FF;=B
- at machine1:HiMom:abcdeACXX:1:1101:1347:2149 :Y:0:GACCAGGA
-GACCAGGA
-+
-CC at DFFFD
- at machine1:HiMom:abcdeACXX:1:1201:1095:2146 :Y:0:GACCAGGA
-GACCAGGA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1123:2161 :N:0:GACCAGGA
-GACCAGGA
-+
-?;@DFDFF
- at machine1:HiMom:abcdeACXX:1:1201:1439:2156 :Y:0:GACCAGGA
-GACCAGGC
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1207:2084 :N:0:GACCAGGA
-GACCAGGA
-+
-@@CDFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1312:2105 :Y:0:GACCAGGA
-GACCAGGA
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.1.fastq
deleted file mode 100644
index 52b1c2e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1218:2200 1:Y:0:GACCGTTG
-GCACCGGAAGAGCACACAGATCGGA
-+
-CCCFFFFDFHGHHJJIJIJJJJJJI
- at machine1:HiMom:abcdeACXX:1:1101:1257:2223 1:Y:0:GACCGTTG
-TGTATTCGAGAGATCAAAGAGAGAG
-+
-@@=DDBDD?FFHHEIDBDFCEDBAF
- at machine1:HiMom:abcdeACXX:1:1201:1180:2119 1:Y:0:GACCGTTG
-NTGAAAGATTTAGAGAGCTTACAAA
-+
-#1=DDDDDHHHGHJJIIJJJJIJJI
- at machine1:HiMom:abcdeACXX:1:2101:1036:2087 1:Y:0:GACCGTTG
-NTGTAGTTTCTTTAGGCAAATTTGT
-+
-#4=BDDDFHHHHHJJJJJJIIJJJI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.2.fastq
deleted file mode 100644
index a634b3b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1218:2200 2:Y:0:GACCGTTG
-GCTCTTCCGATCTATCTGCTCGTCC
-+
-(-(=34???3;@#############
- at machine1:HiMom:abcdeACXX:1:1101:1257:2223 2:Y:0:GACCGTTG
-TGCTCTTCCGATCTTTTAGCAAAGC
-+
-:?@DDBDDHFFHDGIGIIJJJGGGI
- at machine1:HiMom:abcdeACXX:1:1201:1180:2119 2:Y:0:GACCGTTG
-GCTCTAAATTTTGCTTTTCTACAGC
-+
-CCCFFFFFHHHHHJJJJIJIJJIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1036:2087 2:Y:0:GACCGTTG
-NGTCCACTTACGAAGCAAATACTTT
-+
-#4=DDFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.barcode_1.fastq
deleted file mode 100644
index 67cede4..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCGTTG.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1218:2200 :Y:0:GACCGTTG
-GACCGTTG
-+
- at CCFFDDF
- at machine1:HiMom:abcdeACXX:1:1101:1257:2223 :Y:0:GACCGTTG
-GACCGTTG
-+
-;@@DD=DD
- at machine1:HiMom:abcdeACXX:1:1201:1180:2119 :Y:0:GACCGTTG
-GACCGTTG
-+
-CCCFFDFF
- at machine1:HiMom:abcdeACXX:1:2101:1036:2087 :Y:0:GACCGTTG
-GACCGTTG
-+
-B at CFFDFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.1.fastq
deleted file mode 100644
index d7bbf4d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1302:2244 1:Y:0:GACCTAAC
-GGAAAAGACGGAAAGGTTCTATCTC
-+
- at C@DFFFDFHHHHJIJHHIJJJJJI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.2.fastq
deleted file mode 100644
index 8d08e7e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1302:2244 2:Y:0:GACCTAAC
-TGAATACATATAACAAATGCAAAAA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.barcode_1.fastq
deleted file mode 100644
index 0a1d60f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCTAAC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1302:2244 :Y:0:GACCTAAC
-GACCTAAC
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.1.fastq
deleted file mode 100644
index 64c2f2e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1460:2176 1:Y:0:GATATCCA
-AGTCCAGGCTGAGCCCAGGGAAGAA
-+
-CCCFFFFFHHHHGJIJJIJJHIJJI
- at machine1:HiMom:abcdeACXX:1:2101:1031:2163 1:Y:0:GATATCCA
-NTTTCCATGGCCGTCACCTTTGGGT
-+
-#4=DDFFFHHHHHJJJJJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1226:2088 1:Y:0:GATATCCA
-NGATCGGAAGAGCACACGTTTGACT
-+
-#4=DAA=DDFHFHIIBFGHHIG>EG
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.2.fastq
deleted file mode 100644
index 32b29ec..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.2.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1460:2176 2:Y:0:GATATCCA
-AGGAAAAAGACACAACAAGTCCAAC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1031:2163 2:Y:0:GATATCCA
-NNACATTTGTCACCACTAGCCACCA
-+
-##0<@?@@@@@@@@@@?@@@@@@@?
- at machine1:HiMom:abcdeACXX:1:2101:1226:2088 2:Y:0:GATATCCA
-GCTCTTCCGATCTAGGTAATAGCTA
-+
-==?BDFFFDCDDHFFFAFHDHIJGJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.barcode_1.fastq
deleted file mode 100644
index 9ddb963..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GATATCCA.barcode_1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1460:2176 :Y:0:GATATCCA
-GATATCCA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1031:2163 :Y:0:GATATCCA
-GATATCCA
-+
-B at BFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1226:2088 :Y:0:GATATCCA
-GATATCCA
-+
-@@@:DDDD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.1.fastq
deleted file mode 100644
index bc84fb1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1111:2148 1:Y:0:GCCGTCGA
-GTGGAGACCACCTCCGAGGCCTTGT
-+
-BBCFFFFFHHHHHJJJIJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:1101:1221:2143 1:Y:0:GCCGTCGA
-TTTGGTGGAAATTTTTTGTTATGAT
-+
-CCCFFBDBHFD?FBFHIIGGIC at EF
- at machine1:HiMom:abcdeACXX:1:1101:1327:2200 1:N:0:GCCGTCGA
-AGGGGGATCCGCCGGGGGACCACAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1122:2136 1:Y:0:GCCGTCGA
-GTAGGCGCTCAGCAAATACTTGTCG
-+
-@@@DDDD8?<CACEHHBBHDAAFH@
- at machine1:HiMom:abcdeACXX:1:2101:1459:2083 1:Y:0:GCCGTCGA
-NCACACGCCACACGGAGCACACTTT
-+
-#4=DDFFFHHHHHJJJJJJJJIIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.2.fastq
deleted file mode 100644
index 37e8e60..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.2.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1111:2148 2:Y:0:GCCGTCGA
-GCGAANANNNNNNNNNNGGACGACN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1221:2143 2:Y:0:GCCGTCGA
-CAATTGAATGTCTGCACAGCCGCTT
-+
-@@@FFFFDHHHHHJJJIIIJGHIJJ
- at machine1:HiMom:abcdeACXX:1:1101:1327:2200 2:N:0:GCCGTCGA
-GTCATCTGGGCTGTCGACAGGTGTC
-+
- at B@FFFFFHHHHGIJJJJJJIFHHI
- at machine1:HiMom:abcdeACXX:1:2101:1122:2136 2:Y:0:GCCGTCGA
-CTTGCCAGCCTGCAGGCCCCGCGGC
-+
-???BBAABDD?DDIID)A:3<EADD
- at machine1:HiMom:abcdeACXX:1:2101:1459:2083 2:Y:0:GCCGTCGA
-ATTTCACCAAAATAATCAGAAGGCC
-+
-CCCFFFFDBHGHHIGGIJFJJGGFH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.barcode_1.fastq
deleted file mode 100644
index 4bed826..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCGTCGA.barcode_1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1111:2148 :Y:0:GCCGTCGA
-GCCGTCGA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1221:2143 :Y:0:GCCGTCGA
-GCCGTCGA
-+
-@@CDDDDF
- at machine1:HiMom:abcdeACXX:1:1101:1327:2200 :N:0:GCCGTCGA
-GCCGTCGA
-+
-BCCFDFFD
- at machine1:HiMom:abcdeACXX:1:2101:1122:2136 :Y:0:GCCGTCGA
-GCCGTCGA
-+
-?@<DDDD?
- at machine1:HiMom:abcdeACXX:1:2101:1459:2083 :Y:0:GCCGTCGA
-GCCGTCGA
-+
-@@CFDDFD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.1.fastq
deleted file mode 100644
index db6ed91..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1165:2239 1:Y:0:GCCTAGCC
-GGCGGAGGCAGCATTTCAGCTGTGA
-+
-CCCFFDFFHHHHHIJJIGHHHJHHF
- at machine1:HiMom:abcdeACXX:1:1101:1290:2225 1:Y:0:GCCTAGCC
-CTTGGGCGCATGGTGAGGGAGGGAG
-+
-@@@FFDDFHDFH??CBEBHHIGDCD
- at machine1:HiMom:abcdeACXX:1:1201:1280:2179 1:Y:0:GCCTAGCC
-TTCAAGGAATCGTCCTGCCTCAGCC
-+
-BCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1300:2137 1:Y:0:GCCTAGCC
-NTGTAATCCCAGCTCTCAGGGAGGC
-+
-#1=ADDDDDDDBBA?@AE?E at FE8;
- at machine1:HiMom:abcdeACXX:1:2101:1023:2237 1:N:0:GCCTAGCC
-NTAAACAGCTTCTGCACAGCCAAAG
-+
-#00@@?>=39>9;<412@?######
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.2.fastq
deleted file mode 100644
index 1fbef6a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.2.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1165:2239 2:Y:0:GCCTAGCC
-ATGGAAGTCGAGACAGAAGTGAGAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1290:2225 2:Y:0:GCCTAGCC
-TCAGTTCACTGGCAAAGACAGTCAC
-+
-C@@FBEDDFHFHGIIICEHGDHBHE
- at machine1:HiMom:abcdeACXX:1:1201:1280:2179 2:Y:0:GCCTAGCC
-GAGGACTGCTTGAGTCCAGGAGTTC
-+
-@@BFFDEFGHHHHIFGCHIJJJGGI
- at machine1:HiMom:abcdeACXX:1:1201:1300:2137 2:Y:0:GCCTAGCC
-GCTCTTCCGATCTTTTTTTTAATTT
-+
-@@?DDDDDFDHADEHGIGGED3?FD
- at machine1:HiMom:abcdeACXX:1:2101:1023:2237 2:N:0:GCCTAGCC
-NNTTTGTTTGAGTTCCTTGTAGATT
-+
-##0:=@?>?@???@:>?@??>?;?<
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.barcode_1.fastq
deleted file mode 100644
index ea0f08d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GCCTAGCC.barcode_1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1165:2239 :Y:0:GCCTAGCC
-GCCTAGCC
-+
-B@@DFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1290:2225 :Y:0:GCCTAGCC
-GCCTAGCC
-+
-?<@DFBBD
- at machine1:HiMom:abcdeACXX:1:1201:1280:2179 :Y:0:GCCTAGCC
-GCCTAGCC
-+
-BCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1300:2137 :Y:0:GCCTAGCC
-GCCTAGCC
-+
-8?84B23?
- at machine1:HiMom:abcdeACXX:1:2101:1023:2237 :N:0:GCCTAGCC
-GCCTAGCC
-+
-########
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.1.fastq
deleted file mode 100644
index 6fed4dd..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1188:2237 1:Y:0:GTAACATC
-TCCCCCTCCCTTTTGCGCACACACC
-+
-@?@DDADDHDHBDH<EFHIIHG?HF
- at machine1:HiMom:abcdeACXX:1:2101:1208:2231 1:N:0:GTAACATC
-TCACTAAACATCCAAACATCACTTT
-+
-#########################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.2.fastq
deleted file mode 100644
index a082c08..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1188:2237 2:Y:0:GTAACATC
-GCTTCCTTCAAGACAGAAGTGAGAA
-+
-CCCFFDDEFHHFFE at FDHHAIAFHG
- at machine1:HiMom:abcdeACXX:1:2101:1208:2231 2:N:0:GTAACATC
-CTTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFHHHHHJJJHFDDDDDDD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.barcode_1.fastq
deleted file mode 100644
index ae2eaa6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTAACATC.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1188:2237 :Y:0:GTAACATC
-GTAACATC
-+
-@@?DFFDF
- at machine1:HiMom:abcdeACXX:1:2101:1208:2231 :N:0:GTAACATC
-GTAACATC
-+
-1+:A1A22
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.1.fastq
deleted file mode 100644
index fa99998..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1069:2159 1:Y:0:GTCCACAG
-TCCCTTACCATCAAATCAATTGNCC
-+
-CCCFFFFFHHHHHJJJJJJJJJ#3A
- at machine1:HiMom:abcdeACXX:1:1201:1486:2109 1:Y:0:GTCCACAG
-NCACCTCCTAGCCCCTCACTTCTGT
-+
-#1=B;BDDHHHGFIIIIIIIIIGGG
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.2.fastq
deleted file mode 100644
index 7d3a59e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1069:2159 2:Y:0:GTCCACAG
-GACGTNNNNNNNNNNNNNNNNNNNN
-+
-<<<@?####################
- at machine1:HiMom:abcdeACXX:1:1201:1486:2109 2:Y:0:GTCCACAG
-ACGTGTGCTCTTCCCGATCTGTATA
-+
-CCCFF?DDFBHHHJJIIDHJIJJJH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.barcode_1.fastq
deleted file mode 100644
index 6b60259..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GTCCACAG.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1069:2159 :Y:0:GTCCACAG
-GTCCACAG
-+
- at BBFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1486:2109 :Y:0:GTCCACAG
-GTCCACAG
-+
-CCCFFFFD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.1.fastq
deleted file mode 100644
index dea46f1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.1.fastq
+++ /dev/null
@@ -1,64 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1031:2224 1:N:0:
-NAATANNNNNNNNNNNNTNNNNNNN
-+
-#0;@@####################
- at machine1:HiMom:abcdeACXX:1:1101:1039:2147 1:N:0:
-NCCAANGNNGGNNNNATGTAANNNN
-+
-#4;@@#4##2<####43@@@@####
- at machine1:HiMom:abcdeACXX:1:1101:1046:2175 1:N:0:
-NTGCCNGNGTTNCGNGGTCTTNNNN
-+
-#4;@@####################
- at machine1:HiMom:abcdeACXX:1:1101:1047:2122 1:N:0:
-NCTAANGNACTNTGNGTGTGCNNNN
-+
-#0;@@#4#3@@#3@#2<@@@@####
- at machine1:HiMom:abcdeACXX:1:1101:1048:2197 1:N:0:
-NCTCCNGNTCANCANGTGGAGNNNN
-+
-#0;?@####################
- at machine1:HiMom:abcdeACXX:1:1101:1065:2193 1:Y:0:
-GAAGTACGCCCTGCCCCTGGTTNGC
-+
-?@@DAADAHHFHBEBEGGHG?####
- at machine1:HiMom:abcdeACXX:1:1101:1162:2207 1:N:0:
-ACCTTGAGGAGAACATAAGAGCAAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1159:2179 1:N:0:
-GTTAGCACAGATATTGGATGAGTGA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1414:2174 1:N:0:
-GCCAAAAAAAAGAACCAGCCCAAGG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1040:2208 1:N:0:
-NATGCCCACCTCCCTCCTACGCACC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1059:2083 1:Y:0:
-NAAGAGGGGTCAAGAGTTAAACTTA
-+
-#1=DDFFFHFHHGIGHGHJJJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1143:2137 1:Y:0:
-ATGCAGCAGCTGCCACGGAGCACCA
-+
-CC at FFDFDFHFHHGIDHEHIGJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1151:2182 1:N:0:
-TTGTTTTGGCTTATAATGACAAGAA
-+
-;;8-2).2())(<6=@8;?4??>>?
- at machine1:HiMom:abcdeACXX:1:2101:1215:2110 1:Y:0:
-NAATATAATTTGGAGACCCTTTGTT
-+
-#1=DDDDDEDDDDIDDBB3ABAB##
- at machine1:HiMom:abcdeACXX:1:2101:1285:2105 1:N:0:
-NGCGGGGAGCCGGGCGTGGAATGCG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1450:2134 1:Y:0:
-AGCACGCTGCCGCGGGACCTGCCCA
-+
-?@@AD at DDHFH?DGIIIIG at FGFBF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.2.fastq
deleted file mode 100644
index 27efd74..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.2.fastq
+++ /dev/null
@@ -1,64 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1031:2224 2:N:0:
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1039:2147 2:N:0:
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1046:2175 2:N:0:
-NNGGANNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1047:2122 2:N:0:
-NNTCANNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1048:2197 2:N:0:
-NNGTGNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1065:2193 2:Y:0:
-NCTTGNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1162:2207 2:N:0:
-TAAAACTGGGGAAGTTAGAGGAATG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1159:2179 2:N:0:
-TTTTTTTTTATTTTTCTAAATACTT
-+
-===AA####################
- at machine1:HiMom:abcdeACXX:1:1201:1414:2174 2:N:0:
-TTTTTTTTTTTTTTTTTTTTTTTTT
-+
-@;@1BDADF????FFEB>B6=BBBB
- at machine1:HiMom:abcdeACXX:1:2101:1040:2208 2:N:0:
-NCTGATAGTCACTGAAATGAATTCA
-+
-#-0=>(2 at .22@@############
- at machine1:HiMom:abcdeACXX:1:2101:1059:2083 2:Y:0:
-NGAATGTCTTAGAAGGATGCTTCTC
-+
-#1=BDDDEHHGHHJJJJJIJJIIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1143:2137 2:Y:0:
-GCTCTTCAGATCTAGGGGGAACAGC
-+
-@@@DD?=DCAFFFHIIDG:EFHIII
- at machine1:HiMom:abcdeACXX:1:2101:1151:2182 2:N:0:
-TTTTTTTTTTTTTTTTTTTTTTTTA
-+
-9<<?@?@;5=?##############
- at machine1:HiMom:abcdeACXX:1:2101:1215:2110 2:Y:0:
-ATCTTTCCCCCATTAAGAACAGCAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1285:2105 2:N:0:
-TGTCTATATCAACCAACACCTCTTC
-+
--(0(():94:9:???##########
- at machine1:HiMom:abcdeACXX:1:2101:1450:2134 2:Y:0:
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CC at FDFDFFDFHFGIIE1CGGHBGE
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.barcode_1.fastq
deleted file mode 100644
index d58da4a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/N.barcode_1.fastq
+++ /dev/null
@@ -1,64 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1031:2224 :N:0:
-NNNNNNNN
-+
-########
- at machine1:HiMom:abcdeACXX:1:1101:1039:2147 :N:0:
-NNNNNNNN
-+
-########
- at machine1:HiMom:abcdeACXX:1:1101:1046:2175 :N:0:
-NNNNNNNN
-+
-########
- at machine1:HiMom:abcdeACXX:1:1101:1047:2122 :N:0:
-NNNANNNN
-+
-########
- at machine1:HiMom:abcdeACXX:1:1101:1048:2197 :N:0:
-NNNCNNNN
-+
-########
- at machine1:HiMom:abcdeACXX:1:1101:1065:2193 :Y:0:
-GAACGATN
-+
-########
- at machine1:HiMom:abcdeACXX:1:1101:1162:2207 :N:0:
-ACAAAATT
-+
-########
- at machine1:HiMom:abcdeACXX:1:1201:1159:2179 :N:0:
-AAAAAAAA
-+
-########
- at machine1:HiMom:abcdeACXX:1:1201:1414:2174 :N:0:
-AGAAAAGA
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1040:2208 :N:0:
-ACGAAATC
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1059:2083 :Y:0:
-TACCGTCT
-+
-1:?D####
- at machine1:HiMom:abcdeACXX:1:2101:1143:2137 :Y:0:
-TCCGTCTA
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1151:2182 :N:0:
-GAAAAAAA
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1215:2110 :Y:0:
-AAAAGAAG
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1285:2105 :N:0:
-TATCTCGG
-+
-########
- at machine1:HiMom:abcdeACXX:1:2101:1450:2134 :Y:0:
-ACCAGTTG
-+
- at C@DDDB?
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.1.fastq
deleted file mode 100644
index 1a5e44a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1064:2239 1:Y:0:TAAGCACA
-CATGCAGCGCAAGTAGGTCTACAAG
-+
-@@;DFAFFHHHHAHEGHFDGGFABG
- at machine1:HiMom:abcdeACXX:1:2101:1258:2092 1:Y:0:TAAGCACA
-NCACACACACACTCATTCACAGCTT
-+
-#1=DDDFFHHHFHJJIJGGGIIGIJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.2.fastq
deleted file mode 100644
index 74cfba7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1064:2239 2:Y:0:TAAGCACA
-GGGATGGGAGGGCGATGAGGACTAG
-+
-8?@:DDDACC:FHHGIH<EGDDDFH
- at machine1:HiMom:abcdeACXX:1:2101:1258:2092 2:Y:0:TAAGCACA
-TTAGACAAAACACCAAAATAAAATA
-+
-#########################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.barcode_1.fastq
deleted file mode 100644
index 05f34f1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAAGCACA.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1064:2239 :Y:0:TAAGCACA
-TAAGCACA
-+
-@@@FFADB
- at machine1:HiMom:abcdeACXX:1:2101:1258:2092 :Y:0:TAAGCACA
-TAAGCACA
-+
-@@CDDFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.1.fastq
deleted file mode 100644
index 71e3a4a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1071:2233 1:Y:0:TATCCAGG
-TTTGACAGTCTCTGAATGAGAANGG
-+
-CCCFFFFFHHHHHJIIIJJJIJ#4A
- at machine1:HiMom:abcdeACXX:1:1201:1140:2125 1:Y:0:TATCCAGG
-NTTTCAGTTCAGAGAACTGCAGAAT
-+
-#1=DBDFDHHHHGJIJJJJJIIIJI
- at machine1:HiMom:abcdeACXX:1:1201:1236:2187 1:Y:0:TATCCAGG
-TTTAAATGGGTAAGAAGCCCGGCTC
-+
- at BCDDFEFHHDHHJJJJJIJJIJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1133:2239 1:Y:0:TATCCAGG
-AGACAGAAGTACGGGAAGGCGAAGA
-+
-@@@FFFFEHFHHHJJCGDHIIECD@
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.2.fastq
deleted file mode 100644
index 3751abf..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1071:2233 2:Y:0:TATCCAGG
-GTTTGNNNNNNNNNNNNNNNNNNNN
-+
-<<<@@####################
- at machine1:HiMom:abcdeACXX:1:1201:1140:2125 2:Y:0:TATCCAGG
-TTCATAAATTGGTCTTAGATGTTGC
-+
-CC at FFFFFHHHHFGIJIIIJIJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1236:2187 2:Y:0:TATCCAGG
-CTCCTTAGCGGATTCCGACTTCCAT
-+
-CCCFFFFDHHHHGIJJIGIGIJJGG
- at machine1:HiMom:abcdeACXX:1:2101:1133:2239 2:Y:0:TATCCAGG
-AGCTTTTTGTTTCCTAGCTTGTCTT
-+
-?@?DDFFFHHHHF4ACFHIJHHHGH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.barcode_1.fastq
deleted file mode 100644
index 177b1dd..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCAGG.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1071:2233 :Y:0:TATCCAGG
-TATCCAGG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1140:2125 :Y:0:TATCCAGG
-TATCCAGG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1236:2187 :Y:0:TATCCAGG
-TATCCAGG
-+
-@@BFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1133:2239 :Y:0:TATCCAGG
-TATCCATG
-+
-@@@BDDDF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.1.fastq
deleted file mode 100644
index 7b209b1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1267:2209 1:Y:0:TATCTGCC
-GAGACGGAGGCCAACGGGGGCCTGG
-+
-@@CFFFFD8FDHFHIGIBG?@BCDG
- at machine1:HiMom:abcdeACXX:1:1101:1353:2226 1:Y:0:TATCTGCC
-TTGCTTGTCTGTAAAGTATTTTATT
-+
- at C@DDFFDHHFHFHHIBGG>IHHII
- at machine1:HiMom:abcdeACXX:1:1101:1435:2194 1:Y:0:TATCTGCC
-GAGAAAGAACATGACTACAGAGATG
-+
-CCCFFFFFHHHHHJJJJJJJJJHJJ
- at machine1:HiMom:abcdeACXX:1:1201:1084:2204 1:Y:0:TATCTGCC
-GGCCCGTGGACGCCGCCGAAGAAGC
-+
-CCCFFFFFHHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1142:2242 1:Y:0:TATCTGCC
-TGTTGATAGTCCTTCTTATCTTAGT
-+
-???DB?==CC2<AC:CC<CFEF<FF
- at machine1:HiMom:abcdeACXX:1:1201:1187:2100 1:Y:0:TATCTGCC
-NGCGGTAATTCCAGCTCCAATAGCG
-+
-#1:BB2 at DHHFHHIIIIHHIIGHGG
- at machine1:HiMom:abcdeACXX:1:1201:1392:2109 1:Y:0:TATCTGCC
-NCTGAAGAGGCCAAAGCGCCCTCCA
-+
-#1=DDFFFHHHHHJJJJJJJJJJJI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.2.fastq
deleted file mode 100644
index 3e6c54a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.2.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1267:2209 2:Y:0:TATCTGCC
-GGCAGAGTCTCCAACAGCCCCGTAC
-+
-=;?DDDD?CCFHAIIIGGIIGE at EG
- at machine1:HiMom:abcdeACXX:1:1101:1353:2226 2:Y:0:TATCTGCC
-GTGCTCTTCCGATCTTCAGGTTACC
-+
-BBBFFFFFHHHHHJJJJJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1435:2194 2:Y:0:TATCTGCC
-TTTTGTTTTCTTTTACTGAAGTGTA
-+
-CCCFFDFFHHHHHJJJJIHIJHHHJ
- at machine1:HiMom:abcdeACXX:1:1201:1084:2204 2:Y:0:TATCTGCC
-TGGCTCCTCAGGCTCTCATCAGTTG
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1142:2242 2:Y:0:TATCTGCC
-GTAAAATGTAAAATAATAAAAAATG
-+
-?=?DDDD;AF<DF<FFFFIIIFF@<
- at machine1:HiMom:abcdeACXX:1:1201:1187:2100 2:Y:0:TATCTGCC
-AAAAAAGAGCCCGCATTGCCGAGAC
-+
-=<=;AA###################
- at machine1:HiMom:abcdeACXX:1:1201:1392:2109 2:Y:0:TATCTGCC
-GTCAGACAGGGGGATTTGGGCTGTG
-+
-BBCFFFFFHHHHHHJJJHIJIJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.barcode_1.fastq
deleted file mode 100644
index 4d597f4..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTGCC.barcode_1.fastq
+++ /dev/null
@@ -1,28 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1267:2209 :Y:0:TATCTGCC
-TATCAGCC
-+
-?@@D;ADD
- at machine1:HiMom:abcdeACXX:1:1101:1353:2226 :Y:0:TATCTGCC
-TATCTGCC
-+
- at B@FFEFF
- at machine1:HiMom:abcdeACXX:1:1101:1435:2194 :Y:0:TATCTGCC
-TATCTGCC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1084:2204 :Y:0:TATCTGCC
-TATCTGCC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1142:2242 :Y:0:TATCTGCC
-TATCTGCC
-+
-??<D?D83
- at machine1:HiMom:abcdeACXX:1:1201:1187:2100 :Y:0:TATCTGCC
-TATCTGCC
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1392:2109 :Y:0:TATCTGCC
-TATCTGCC
-+
-CCCDF?DD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.1.fastq
deleted file mode 100644
index 4613164..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1143:2192 1:Y:0:TCGCTAGA
-GGAGCGAGTCTGGGTCTCAGCCCCG
-+
-CCCFFFFFHHHHHJGHIIIHJJJJI
- at machine1:HiMom:abcdeACXX:1:1101:1479:2221 1:Y:0:TCGCTAGA
-TGTAAAGTATGCTGGCTCAGTGTAT
-+
-BBBFDFFEHHHHHJJJJJJJIJHJJ
- at machine1:HiMom:abcdeACXX:1:1201:1312:2112 1:Y:0:TCGCTAGA
-NTCCCAGCGAACCCGCGTGCAACCT
-+
-#1=DFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1416:2128 1:Y:0:TCGCTAGA
-NACAGGCGTGGAGGAGGCGGCGGCC
-+
-#4=DDDFFHHHHHJIGJHFHHFFED
- at machine1:HiMom:abcdeACXX:1:2101:1064:2242 1:Y:0:TCGCTAGA
-ATGAACAAAGGAAGAATTATGCACG
-+
-?;?D;DDDF?;:+<<CFFCHE433A
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.2.fastq
deleted file mode 100644
index 9f0f4fc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.2.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1143:2192 2:Y:0:TCGCTAGA
-CGACAAGTCTGGCTTATCACTCATC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1479:2221 2:Y:0:TCGCTAGA
-GGGGAAATCTATTTTTATGTAAAAA
-+
- at CCFFFFFHHHHHJIGIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1312:2112 2:Y:0:TCGCTAGA
-ATTTGCAGGAGCCGGCGCAGGTGCA
-+
-CCCFFFFFHHHHHJJJIJJJJGHIJ
- at machine1:HiMom:abcdeACXX:1:1201:1416:2128 2:Y:0:TCGCTAGA
-TTGGTGTGGAGGCGGTGGCGGGATC
-+
-@@@DDDDDHHFHHII:?GGHIIB6?
- at machine1:HiMom:abcdeACXX:1:2101:1064:2242 2:Y:0:TCGCTAGA
-NGGAAAAAGGTTGTCAAGCGTTAAA
-+
-#########################
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.barcode_1.fastq
deleted file mode 100644
index e148256..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCGCTAGA.barcode_1.fastq
+++ /dev/null
@@ -1,20 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1143:2192 :Y:0:TCGCTAGA
-TCGCTAGA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1101:1479:2221 :Y:0:TCGCTAGA
-TCGCTAGA
-+
- at BCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1312:2112 :Y:0:TCGCTAGA
-TCGCTAGA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1416:2128 :Y:0:TCGCTAGA
-TCGCTAGA
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1064:2242 :Y:0:TCGCTAGA
-TCGCTAGA
-+
-;@<:AA at A
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.1.fastq
deleted file mode 100644
index a34f51d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1042:2174 1:Y:0:TCTGCAAG
-NGTTGGTGTCTTCATTTTATGTATA
-+
-#1=DDFDFHHHHHJIJJJHIJHIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.2.fastq
deleted file mode 100644
index 4fda3b0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1042:2174 2:Y:0:TCTGCAAG
-NTCAGGAAGGCNNCAAAAAAAGAAA
-+
-#0;@@@?@?<@##3<@@?@@?????
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.barcode_1.fastq
deleted file mode 100644
index 5237cc1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCTGCAAG.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1042:2174 :Y:0:TCTGCAAG
-TCTGCAAG
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.1.fastq
deleted file mode 100644
index 105fefa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1242:2170 1:Y:0:TGCAAGTA
-ATGGCAGGGCAGAGTTCTGATGAGT
-+
-CCCFFFFFHHGGGIFHEIIGIIII?
- at machine1:HiMom:abcdeACXX:1:2101:1163:2222 1:Y:0:TGCAAGTA
-GAGCAGGCAAGGAGGACTTCTTGTT
-+
-CCCFFFFFGHHHHJJHHIJJJJJIJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.2.fastq
deleted file mode 100644
index 4e7ea3b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1242:2170 2:Y:0:TGCAAGTA
-GGAAGGAAAAGAAGCACAAGTACAT
-+
-@@@DFDFFHHHGHHGIIGJJEHHIG
- at machine1:HiMom:abcdeACXX:1:2101:1163:2222 2:Y:0:TGCAAGTA
-GAGCGATAATGGTTCTTTTCCTCAC
-+
-@@@DFFFFHHHHHJJJJJJJIJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.barcode_1.fastq
deleted file mode 100644
index ffe1705..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCAAGTA.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1242:2170 :Y:0:TGCAAGTA
-TGCAAGTA
-+
-@@CFFF?D
- at machine1:HiMom:abcdeACXX:1:2101:1163:2222 :Y:0:TGCAAGTA
-TGCAAGTA
-+
-CCCFFFEF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.1.fastq
deleted file mode 100644
index 8210bc4..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1084:2136 1:Y:0:TGCTGCTG
-NTCTCACTGTGAATTTGTGGTGGGC
-+
-#1=DDFFFHHHHHJJJJGIJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1285:2100 1:Y:0:TGCTGCTG
-NAATGACATGTTTAAAGATGGACTC
-+
-#1:BDDFFHHFHHGIJIJIIIIGII
- at machine1:HiMom:abcdeACXX:1:2101:1162:2139 1:Y:0:TGCTGCTG
-AGAGGTGAAATTCTTGGACCGGCGC
-+
-@@@DDDDDHFHHHDB:EFHHCAG?D
- at machine1:HiMom:abcdeACXX:1:2101:1195:2150 1:Y:0:TGCTGCTG
-CCGAGAGAGTGAGAGCGCTCCTGGG
-+
-CCCFFFFFHFHHHJJJJIJJJJIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.2.fastq
deleted file mode 100644
index 33f1fbc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1084:2136 2:Y:0:TGCTGCTG
-TTTCTNNNNNNNNNNNNNNNNNNNN
-+
-<<<@@####################
- at machine1:HiMom:abcdeACXX:1:1201:1285:2100 2:Y:0:TGCTGCTG
-GATCTTTTTTGCTTTGTAGTTATAG
-+
-@@@DFFFFHHHHHIIGIABCFFHBF
- at machine1:HiMom:abcdeACXX:1:2101:1162:2139 2:Y:0:TGCTGCTG
-ATCGTTTATGGTCGGAACTACGACG
-+
-BCCFFFFFHHHHHIJJJJJJJIJJI
- at machine1:HiMom:abcdeACXX:1:2101:1195:2150 2:Y:0:TGCTGCTG
-AATTGAACTTCACCACCCAGAGGAA
-+
-CCCFFFFFHHHHHJJJJJJIJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.barcode_1.fastq
deleted file mode 100644
index af4fe61..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGCTGCTG.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1084:2136 :Y:0:TGCTGCTG
-TGCTGCTG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1285:2100 :Y:0:TGCTGCTG
-TGCTGCTG
-+
-@@@FFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1162:2139 :Y:0:TGCTGCTG
-TGCTGCTG
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:2101:1195:2150 :Y:0:TGCTGCTG
-TGCTGCTG
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.1.fastq
deleted file mode 100644
index 4b08426..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1421:2154 1:Y:0:TGTAACTC
-TGTGTGTGTGGGTGTGTGTATATAT
-+
-?@?DDFFFFFHH at GEFCCCHGIGJI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.2.fastq
deleted file mode 100644
index af29dc5..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1421:2154 2:Y:0:TGTAACTC
-TGTGCTCTTCCGATCTTGTGCTCTT
-+
-BC at DFFFFHHHHHJJJJFHIHHIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.barcode_1.fastq
deleted file mode 100644
index c1a6dc0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAACTC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1201:1421:2154 :Y:0:TGTAACTC
-TGTAACTC
-+
-@@@FFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.1.fastq
deleted file mode 100644
index b22ab5d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1419:2119 1:Y:0:TGTAATCA
-NATGACTATGGTAACTGAAAGAAAA
-+
-#1:A1BDADBFFDFIIIEEHECACF
- at machine1:HiMom:abcdeACXX:1:1201:1208:2132 1:Y:0:TGTAATCA
-NCCTCAATGAGCGGCACTATGGGGG
-+
-#1=DDFFFHHHHGJJIJJGHIJGIJ
- at machine1:HiMom:abcdeACXX:1:1201:1344:2147 1:Y:0:TGTAATCA
-TATCCTCCCTACTATGCCTAGAAGG
-+
-=?@DADEFHBHDFG>EFGDHGFGHD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.2.fastq
deleted file mode 100644
index 4332332..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.2.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1419:2119 2:Y:0:TGTAATCA
-ACTTTCCTTTTTTGTTTTACTTTAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1208:2132 2:Y:0:TGTAATCA
-CTGTAGAAAGGATGGTCGGGCTCCA
-+
-@@CDFFFFGHFHHJIJJGJIBHJJG
- at machine1:HiMom:abcdeACXX:1:1201:1344:2147 2:Y:0:TGTAATCA
-ACGATTAGTTTTAGCATTGGAGTAG
-+
-@<??DDDDFHHHFGGHHIIIGGAGH
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.barcode_1.fastq
deleted file mode 100644
index aba2eaa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TGTAATCA.barcode_1.fastq
+++ /dev/null
@@ -1,12 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1419:2119 :Y:0:TGTAATCA
-TGTAATCA
-+
-@@@DFDFD
- at machine1:HiMom:abcdeACXX:1:1201:1208:2132 :Y:0:TGTAATCA
-TGTAATCA
-+
-CC at FFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1344:2147 :Y:0:TGTAATCA
-TGTAATCA
-+
-=?1AA:=D
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.1.fastq
deleted file mode 100644
index 9c4229b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1219:2164 1:Y:0:TTGTCTAT
-TCAAGCAGGAGCAGCTAAGTCCTAA
-+
-CCCFFFFFHHHHHJJJJJJHIJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1103:2184 1:Y:0:TTGTCTAT
-GTAAGAACTACCCTGGGTCCCCGTG
-+
-@@BFFFFFHHHHHJJJJGIJJJJHI
- at machine1:HiMom:abcdeACXX:1:1201:1107:2109 1:Y:0:TTGTCTAT
-NGGGAACCTGGCGCTAAACCATTCG
-+
-#1=DFFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1252:2141 1:Y:0:TTGTCTAT
-NTTCCCCCCATGTAATTATTGTGAA
-+
-#1=DDFFFHHHHHJJJJJJJJIJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.2.fastq
deleted file mode 100644
index 1507d9d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.2.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1219:2164 2:Y:0:TTGTCTAT
-ATCTTATCCACTCCTTCCACTTTGG
-+
-CCCFFFFFHHHHHJJIJJJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1103:2184 2:Y:0:TTGTCTAT
-AGAAGTTTCAGAATTGTGGCCCCAT
-+
-B at BFFDEFHHHHHJJJGHIJJJJJI
- at machine1:HiMom:abcdeACXX:1:1201:1107:2109 2:Y:0:TTGTCTAT
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHGHHJJJJIIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1252:2141 2:Y:0:TTGTCTAT
-AGTTATTTTGCCTATGTCCAACAAG
-+
-BCBFFFFFGHHHHJIJJJJJJJJJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.barcode_1.fastq
deleted file mode 100644
index f81053d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TTGTCTAT.barcode_1.fastq
+++ /dev/null
@@ -1,16 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1219:2164 :Y:0:TTGTCTAT
-TTGTCTAT
-+
-CCCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1103:2184 :Y:0:TTGTCTAT
-TTGTCTAT
-+
- at CCFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1107:2109 :Y:0:TTGTCTAT
-TTGTCTAT
-+
-B at CFFFFF
- at machine1:HiMom:abcdeACXX:1:1201:1252:2141 :Y:0:TTGTCTAT
-TTGTCTAT
-+
-CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/nonBarcoded.1.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/nonBarcoded.1.fastq
deleted file mode 100644
index 9588f4b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/nonBarcoded.1.fastq
+++ /dev/null
@@ -1,720 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1031:2224 1:N:0:
-NAATANNNNNNNNNNNNTNNNNNNN
-+
-#0;@@####################
- at machine1:HiMom:abcdeACXX:1:1101:1039:2147 1:N:0:
-NCCAANGNNGGNNNNATGTAANNNN
-+
-#4;@@#4##2<####43@@@@####
- at machine1:HiMom:abcdeACXX:1:1101:1046:2175 1:N:0:
-NTGCCNGNGTTNCGNGGTCTTNNNN
-+
-#4;@@####################
- at machine1:HiMom:abcdeACXX:1:1101:1047:2122 1:N:0:
-NCTAANGNACTNTGNGTGTGCNNNN
-+
-#0;@@#4#3@@#3@#2<@@@@####
- at machine1:HiMom:abcdeACXX:1:1101:1048:2197 1:N:0:
-NCTCCNGNTCANCANGTGGAGNNNN
-+
-#0;?@####################
- at machine1:HiMom:abcdeACXX:1:1101:1065:2193 1:Y:0:
-GAAGTACGCCCTGCCCCTGGTTNGC
-+
-?@@DAADAHHFHBEBEGGHG?####
- at machine1:HiMom:abcdeACXX:1:1101:1069:2159 1:Y:0:
-TCCCTTACCATCAAATCAATTGNCC
-+
-CCCFFFFFHHHHHJJJJJJJJJ#3A
- at machine1:HiMom:abcdeACXX:1:1101:1071:2233 1:Y:0:
-TTTGACAGTCTCTGAATGAGAANGG
-+
-CCCFFFFFHHHHHJIIIJJJIJ#4A
- at machine1:HiMom:abcdeACXX:1:1101:1083:2193 1:Y:0:
-TTCTACCTCACCTTAGGGAGAAGAC
-+
-@@@DDBDDD>F><C<4CG?EHGHIG
- at machine1:HiMom:abcdeACXX:1:1101:1084:2136 1:Y:0:
-NTCTCACTGTGAATTTGTGGTGGGC
-+
-#1=DDFFFHHHHHJJJJGIJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1089:2172 1:Y:0:
-TTCCAGCATGCGGTTTAAGTAGGAT
-+
- at CCFDFDBDFBF:<CEBHAFHHICH
- at machine1:HiMom:abcdeACXX:1:1101:1100:2207 1:Y:0:
-ACGACAGACGTTCTTTCTTTGCTGC
-+
-CCCFFFFFHHFHHJIJJJJJHIJJH
- at machine1:HiMom:abcdeACXX:1:1101:1111:2148 1:Y:0:
-GTGGAGACCACCTCCGAGGCCTTGT
-+
-BBCFFFFFHHHHHJJJIJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:1101:1138:2141 1:Y:0:
-NTTACCAAGGTTTTCTGTTTAGTGA
-+
-#1=DDFFFHHFHHJJJIHJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1140:2120 1:Y:0:
-NCCCCAACATTCTAATTATGCCTCA
-+
-#1:BDFFDHFFDFIJJJIIJIIIII
- at machine1:HiMom:abcdeACXX:1:1101:1143:2192 1:Y:0:
-GGAGCGAGTCTGGGTCTCAGCCCCG
-+
-CCCFFFFFHHHHHJGHIIIHJJJJI
- at machine1:HiMom:abcdeACXX:1:1101:1150:2228 1:Y:0:
-GCTACTCAGTAGACAGTCCCACCCT
-+
-@@CADDDDFCFHHIIIIGGIIGGGI
- at machine1:HiMom:abcdeACXX:1:1101:1157:2135 1:Y:0:
-NGGACATTGTAATCATTTCTTACAA
-+
-#1=DD?DDHHHHHGGHIIIIIIIII
- at machine1:HiMom:abcdeACXX:1:1101:1162:2207 1:N:0:
-ACCTTGAGGAGAACATAAGAGCAAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1165:2239 1:Y:0:
-GGCGGAGGCAGCATTTCAGCTGTGA
-+
-CCCFFDFFHHHHHIJJIGHHHJHHF
- at machine1:HiMom:abcdeACXX:1:1101:1175:2197 1:Y:0:
-CCCCTGAGGACACCATCCCACTCCA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1188:2237 1:Y:0:
-TCCCCCTCCCTTTTGCGCACACACC
-+
-@?@DDADDHDHBDH<EFHIIHG?HF
- at machine1:HiMom:abcdeACXX:1:1101:1197:2200 1:Y:0:
-GGGCGCCCCGTGAGGACCCAGTCCT
-+
- at C@FFADDFFCFCEHIIJIJJIEFC
- at machine1:HiMom:abcdeACXX:1:1101:1206:2126 1:Y:0:
-NATTCTGCCATATTGGTCCGACAGT
-+
-#1=DDFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:1101:1212:2230 1:Y:0:
-TTTCTATTAGCTCTTAGTAAGATTA
-+
-CCCFFFFFHHHHHJJJIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1218:2200 1:Y:0:
-GCACCGGAAGAGCACACAGATCGGA
-+
-CCCFFFFDFHGHHJJIJIJJJJJJI
- at machine1:HiMom:abcdeACXX:1:1101:1219:2164 1:Y:0:
-TCAAGCAGGAGCAGCTAAGTCCTAA
-+
-CCCFFFFFHHHHHJJJJJJHIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1221:2143 1:Y:0:
-TTTGGTGGAAATTTTTTGTTATGAT
-+
-CCCFFBDBHFD?FBFHIIGGIC at EF
- at machine1:HiMom:abcdeACXX:1:1101:1236:2121 1:Y:0:
-NGGTGCTTCATATCCCTCTAGAGGA
-+
-#1=BDDFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1242:2170 1:Y:0:
-ATGGCAGGGCAGAGTTCTGATGAGT
-+
-CCCFFFFFHHGGGIFHEIIGIIII?
- at machine1:HiMom:abcdeACXX:1:1101:1257:2223 1:Y:0:
-TGTATTCGAGAGATCAAAGAGAGAG
-+
-@@=DDBDD?FFHHEIDBDFCEDBAF
- at machine1:HiMom:abcdeACXX:1:1101:1259:2152 1:Y:0:
-CACCTATAATCCCAGCTACTCCAGA
-+
-CCCFFFFFHHHHHJJJJJJIJJJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1261:2127 1:N:0:
-NTGAAATCTGGATAGGCTGGAGTTA
-+
-#0-@@@###################
- at machine1:HiMom:abcdeACXX:1:1101:1263:2236 1:N:0:
-CTTTGAAGACATTGTGAGATCTGTA
-+
-<==A<42 at C+A4A?,2A@=4 at 7A??
- at machine1:HiMom:abcdeACXX:1:1101:1267:2209 1:Y:0:
-GAGACGGAGGCCAACGGGGGCCTGG
-+
-@@CFFFFD8FDHFHIGIBG?@BCDG
- at machine1:HiMom:abcdeACXX:1:1101:1269:2170 1:Y:0:
-ACAGTGTGGGAGGCAGACGAAGAGA
-+
-@@@DDDDDFA:C at EGA?FD<FFHII
- at machine1:HiMom:abcdeACXX:1:1101:1290:2225 1:Y:0:
-CTTGGGCGCATGGTGAGGGAGGGAG
-+
-@@@FFDDFHDFH??CBEBHHIGDCD
- at machine1:HiMom:abcdeACXX:1:1101:1291:2150 1:Y:0:
-CGTGGGGAACCTGGCGCTAAACCAT
-+
- at BBFFFFFHHHHHJJJJIJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1302:2244 1:Y:0:
-GGAAAAGACGGAAAGGTTCTATCTC
-+
- at C@DFFFDFHHHHJIJHHIJJJJJI
- at machine1:HiMom:abcdeACXX:1:1101:1308:2153 1:N:0:
-TTTTGGAAGAGACCTCAATTACTGT
-+
-???DDDDD?:22AE:A2<3,AF?3A
- at machine1:HiMom:abcdeACXX:1:1101:1309:2210 1:Y:0:
-ACACCAACCACCCAACTATCTATAA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1314:2233 1:Y:0:
-GTTTATTGGGGCATTCCTTATCCCA
-+
-@??DDDDBDHF>FCHGGGBFAAED9
- at machine1:HiMom:abcdeACXX:1:1101:1316:2126 1:Y:0:
-NAAAAAAAAAAAAAAAAAAAAAAAA
-+
-#1BDFFFFHHHHHJJJJFDDDDDDD
- at machine1:HiMom:abcdeACXX:1:1101:1327:2200 1:N:0:
-AGGGGGATCCGCCGGGGGACCACAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1328:2225 1:Y:0:
-GAAATGCATCTGTCTTAGAAACTGG
-+
-??@=BDDDFDD<<,<2:C<F:FFEA
- at machine1:HiMom:abcdeACXX:1:1101:1338:2175 1:Y:0:
-CCCACCTTCCGGCGGCCGAAGACAC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1347:2149 1:Y:0:
-GAGCAGATCGGAAGAGCACAGATCG
-+
-@@@FFDDDHHHHHIJJBGGHJIHEG
- at machine1:HiMom:abcdeACXX:1:1101:1353:2226 1:Y:0:
-TTGCTTGTCTGTAAAGTATTTTATT
-+
- at C@DDFFDHHFHFHHIBGG>IHHII
- at machine1:HiMom:abcdeACXX:1:1101:1363:2138 1:Y:0:
-NGTCTGGCCTGCACAGACATCCTAC
-+
-#1=DDFFFHHHHHJJJIJJIJJJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1399:2128 1:Y:0:
-NTGCCCTTCGTCCTGGGAAACGGGG
-+
-#1BDFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1403:2194 1:Y:0:
-CTAAACAGAGAGAAGGTTTCTCTTT
-+
-CCCFFFFFHHHHHJJJFHIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1406:2222 1:Y:0:
-CTCCCCCCGGGCTGAACCAGGGTAC
-+
-CCCFFDDDDHDFHIIIIIIIII9DG
- at machine1:HiMom:abcdeACXX:1:1101:1419:2119 1:Y:0:
-NATGACTATGGTAACTGAAAGAAAA
-+
-#1:A1BDADBFFDFIIIEEHECACF
- at machine1:HiMom:abcdeACXX:1:1101:1420:2213 1:Y:0:
-TACCTGGTTGATCCTGCCAGTAGCA
-+
-@@CFFFFDDHHGHJGGHIJJIHGBH
- at machine1:HiMom:abcdeACXX:1:1101:1435:2194 1:Y:0:
-GAGAAAGAACATGACTACAGAGATG
-+
-CCCFFFFFHHHHHJJJJJJJJJHJJ
- at machine1:HiMom:abcdeACXX:1:1101:1441:2148 1:Y:0:
-ACTTTCACCGCTACACGACCGGGGG
-+
-CCCFFFFFHGFFHIIFIHJIGGII>
- at machine1:HiMom:abcdeACXX:1:1101:1452:2132 1:Y:0:
-NCGTCCTGGAAAACGGGGCGCGGCT
-+
-#1=BDBDDFHHHHF at FHDHIGIIII
- at machine1:HiMom:abcdeACXX:1:1101:1460:2176 1:Y:0:
-AGTCCAGGCTGAGCCCAGGGAAGAA
-+
-CCCFFFFFHHHHGJIJJIJJHIJJI
- at machine1:HiMom:abcdeACXX:1:1101:1479:2221 1:Y:0:
-TGTAAAGTATGCTGGCTCAGTGTAT
-+
-BBBFDFFEHHHHHJJJJJJJIJHJJ
- at machine1:HiMom:abcdeACXX:1:1101:1491:2120 1:Y:0:
-NGGCAGGTGCCCCCACTTGACTCTC
-+
-#1?DFFFFGHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1018:2133 1:Y:0:
-NAAAACTTGAGGATGCTATGCAAGC
-+
-#1:B:ADDDDDDDEEAEBF9FFEBF
- at machine1:HiMom:abcdeACXX:1:1201:1018:2217 1:N:0:
-NTTTCTCTGGGCGCAAAGATGTTCA
-+
-#07;8=8<<99(:=@@/@7>>6=?>
- at machine1:HiMom:abcdeACXX:1:1201:1028:2202 1:Y:0:
-NTCCTGGGAAACGGGGCGCGGCTGG
-+
-#4BDDDFFHHHHHIJIIJJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1042:2174 1:Y:0:
-NGTTGGTGTCTTCATTTTATGTATA
-+
-#1=DDFDFHHHHHJIJJJHIJHIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1043:2246 1:Y:0:
-NTTCTCGGCTGTCATGTGCAACATT
-+
-#1=DDBDFHHHDFFBHGHGHIIJEH
- at machine1:HiMom:abcdeACXX:1:1201:1045:2105 1:N:0:
-NTAAAGAGAAATCAAGAATACTATT
-+
-#-4@?(@)@@###############
- at machine1:HiMom:abcdeACXX:1:1201:1054:2151 1:Y:0:
-NTAGTGCTGGGCACTAAGTAATACC
-+
-#4=DDDFFHHHHHJJJJJHIJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1064:2239 1:Y:0:
-CATGCAGCGCAAGTAGGTCTACAAG
-+
-@@;DFAFFHHHHAHEGHFDGGFABG
- at machine1:HiMom:abcdeACXX:1:1201:1073:2225 1:Y:0:
-GGGGCTGAGACCTTTGCTGATGGTG
-+
-@@@FFFFFHHHGHJJJJJIIIGICH
- at machine1:HiMom:abcdeACXX:1:1201:1083:2121 1:Y:0:
-NAGAACTGGCGCTGCGGGATGAACC
-+
-#1=BDFFFHHHHHJJJJJHIJIJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1084:2204 1:Y:0:
-GGCCCGTGGACGCCGCCGAAGAAGC
-+
-CCCFFFFFHHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1095:2146 1:Y:0:
-GCTGAGTCATGTAGTAAGCCTGTGC
-+
-BB at FDDDFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1103:2184 1:Y:0:
-GTAAGAACTACCCTGGGTCCCCGTG
-+
-@@BFFFFFHHHHHJJJJGIJJJJHI
- at machine1:HiMom:abcdeACXX:1:1201:1107:2109 1:Y:0:
-NGGGAACCTGGCGCTAAACCATTCG
-+
-#1=DFFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1118:2198 1:Y:0:
-CAAGTGTACAGGATTAGACTGGGTT
-+
-BCCFDEBDHHHHHIJJJGIIIJJGH
- at machine1:HiMom:abcdeACXX:1:1201:1122:2227 1:Y:0:
-AGAAGACGAGGCTGAGAGTGACATC
-+
-@@@FFFFFHHHDHJGHGHCHHJJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1123:2161 1:N:0:
-CACTAACTCCTGACCTCAAATAATC
-+
-?7?=DD?DD+CDBE>E at EEF@+<CF
- at machine1:HiMom:abcdeACXX:1:1201:1127:2112 1:N:0:
-NGTCAAGGATGTTCGTCGTGGCAAC
-+
-#1=BDDDDDDDDDID<AE?@<CEEE
- at machine1:HiMom:abcdeACXX:1:1201:1134:2144 1:Y:0:
-TGCCAGGAAGTGTTTTTTCTGGGTC
-+
- at CCFFEFFHHFFFGIJJJJJJJJGH
- at machine1:HiMom:abcdeACXX:1:1201:1138:2227 1:N:0:
-GCTGACACAATCTCTTCCGCCTGGT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1140:2125 1:Y:0:
-NTTTCAGTTCAGAGAACTGCAGAAT
-+
-#1=DBDFDHHHHGJIJJJJJIIIJI
- at machine1:HiMom:abcdeACXX:1:1201:1142:2242 1:Y:0:
-TGTTGATAGTCCTTCTTATCTTAGT
-+
-???DB?==CC2<AC:CC<CFEF<FF
- at machine1:HiMom:abcdeACXX:1:1201:1150:2161 1:Y:0:
-AAGTCACCTAATATCTTTTTTTTTT
-+
-@@<??;?D?CFD,A4CDDHFBIIID
- at machine1:HiMom:abcdeACXX:1:1201:1159:2179 1:N:0:
-GTTAGCACAGATATTGGATGAGTGA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1160:2109 1:Y:0:
-NAGAAGCCTTTGCACCCTGGGAGGA
-+
-#1=DDDFFHHHHHJJJJJJJJIIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1180:2119 1:Y:0:
-NTGAAAGATTTAGAGAGCTTACAAA
-+
-#1=DDDDDHHHGHJJIIJJJJIJJI
- at machine1:HiMom:abcdeACXX:1:1201:1185:2143 1:Y:0:
-ATCTGCCTGGTTCGGCCCGCCTGCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1187:2100 1:Y:0:
-NGCGGTAATTCCAGCTCCAATAGCG
-+
-#1:BB2 at DHHFHHIIIIHHIIGHGG
- at machine1:HiMom:abcdeACXX:1:1201:1190:2194 1:Y:0:
-AACCTGGCGCTAAACCATTCGTAGA
-+
-CCCFFFFFHHHHHJJJJJJJJIJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1204:2228 1:Y:0:
-CCGATACGCTGAGTGTGGTTTGCGG
-+
-CCCFFFFFHHHFHEGGHIHIJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1208:2132 1:Y:0:
-NCCTCAATGAGCGGCACTATGGGGG
-+
-#1=DDFFFHHHHGJJIJJGHIJGIJ
- at machine1:HiMom:abcdeACXX:1:1201:1219:2115 1:Y:0:
-NTATAGTGGAGGCCGGAGCAGGAAC
-+
-#1:DABADHHHFHIIIGGHGIIIII
- at machine1:HiMom:abcdeACXX:1:1201:1236:2187 1:Y:0:
-TTTAAATGGGTAAGAAGCCCGGCTC
-+
- at BCDDFEFHHDHHJJJJJIJJIJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1242:2207 1:Y:0:
-ATGGCAAAGTGGTGTCTGAGACCAA
-+
-BCCFFFFFGHHHHHIIIJFHIJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1252:2141 1:Y:0:
-NTTCCCCCCATGTAATTATTGTGAA
-+
-#1=DDFFFHHHHHJJJJJJJJIJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1260:2165 1:Y:0:
-GGACACGGACAGGATTGACAGATTG
-+
-BCBFFFFFHHHHHHIIJHIIIFHIJ
- at machine1:HiMom:abcdeACXX:1:1201:1280:2179 1:Y:0:
-TTCAAGGAATCGTCCTGCCTCAGCC
-+
-BCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1281:2133 1:Y:0:
-NGGAAATCCAGAAAACATAGAAGAT
-+
-#1=DDFFFHHHHHIJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1285:2100 1:Y:0:
-NAATGACATGTTTAAAGATGGACTC
-+
-#1:BDDFFHHFHHGIJIJIIIIGII
- at machine1:HiMom:abcdeACXX:1:1201:1291:2158 1:Y:0:
-AGAAGGGGAAAGCCTTCATCTTGGC
-+
-BCBFFFFFHHHHHJJJJJIIFIJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1300:2137 1:Y:0:
-NTGTAATCCCAGCTCTCAGGGAGGC
-+
-#1=ADDDDDDDBBA?@AE?E at FE8;
- at machine1:HiMom:abcdeACXX:1:1201:1312:2112 1:Y:0:
-NTCCCAGCGAACCCGCGTGCAACCT
-+
-#1=DFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1331:2162 1:Y:0:
-ACGCTCGGCTAATTTTTGTATTTTT
-+
- at CCFFFDFHHHHHIJJJJHIJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1341:2116 1:Y:0:
-NAGAAGCCCCAGGAGGAAGACAGTC
-+
-#1=DDFFFHHHHHHHJIIJJJJJGI
- at machine1:HiMom:abcdeACXX:1:1201:1344:2147 1:Y:0:
-TATCCTCCCTACTATGCCTAGAAGG
-+
-=?@DADEFHBHDFG>EFGDHGFGHD
- at machine1:HiMom:abcdeACXX:1:1201:1345:2181 1:Y:0:
-GGATAATCCTATTTATTACCTCAGA
-+
-BBBDDFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1364:2113 1:Y:0:
-NCACTCATTTTCTTATGTGGGATAT
-+
-#1=DDFDFHHHHHIJJIFHIIHHHI
- at machine1:HiMom:abcdeACXX:1:1201:1392:2109 1:Y:0:
-NCTGAAGAGGCCAAAGCGCCCTCCA
-+
-#1=DDFFFHHHHHJJJJJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:1201:1392:2184 1:Y:0:
-TTTCAGATTGGTCATTGTTAGTGTA
-+
-??@BDDDEHBHADHHIIEHDHFHFF
- at machine1:HiMom:abcdeACXX:1:1201:1393:2143 1:Y:0:
-TGGTTGATCCTGCCAGTAGCATATG
-+
-@@@ADADDFHFFDBHE?G at HIIIEE
- at machine1:HiMom:abcdeACXX:1:1201:1414:2174 1:N:0:
-GCCAAAAAAAAGAACCAGCCCAAGG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1416:2128 1:Y:0:
-NACAGGCGTGGAGGAGGCGGCGGCC
-+
-#4=DDDFFHHHHHJIGJHFHHFFED
- at machine1:HiMom:abcdeACXX:1:1201:1421:2154 1:Y:0:
-TGTGTGTGTGGGTGTGTGTATATAT
-+
-?@?DDFFFFFHH at GEFCCCHGIGJI
- at machine1:HiMom:abcdeACXX:1:1201:1439:2156 1:Y:0:
-AGCCGCGAGGTGCTGGCGGACTTCC
-+
-:;1BDDDAA88A<?<E1C:D#####
- at machine1:HiMom:abcdeACXX:1:1201:1452:2143 1:Y:0:
-TATCCCCTCTAAGACGGACCTGGGT
-+
-CCCFFFFFHHHHHJJIIIJJJJJJG
- at machine1:HiMom:abcdeACXX:1:1201:1458:2109 1:Y:0:
-NGAGACCATAGAGCGGATGCTTTCA
-+
-#1=DDDFFHHGHGIJJIGIIJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1472:2121 1:N:0:
-NTAAAGTGTGAACAAGGAAGGTCAT
-+
-#07>@<9=@################
- at machine1:HiMom:abcdeACXX:1:1201:1483:2126 1:N:0:
-NTGATAAGGTGTTGCTATGTTACCC
-+
-#1:D?DDDDA??2:<CC4:AEDF>?
- at machine1:HiMom:abcdeACXX:1:1201:1486:2109 1:Y:0:
-NCACCTCCTAGCCCCTCACTTCTGT
-+
-#1=B;BDDHHHGFIIIIIIIIIGGG
- at machine1:HiMom:abcdeACXX:1:1201:1486:2146 1:N:0:
-GTTCTCTGTCCCCAGGTCCTGTCTC
-+
-===A7<7222<<=C=?+<7>@?ACB
- at machine1:HiMom:abcdeACXX:1:2101:1011:2102 1:Y:0:
-NAAACAAAACTGTAGAACTGTGTAT
-+
-#1=DDFFFHHHHHJJIJJJIHHHJJ
- at machine1:HiMom:abcdeACXX:1:2101:1013:2146 1:Y:0:
-NACACTGCTGCAGATGACAAGCAGC
-+
-#4BDFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1021:2209 1:Y:0:
-NGGCCCCACCCTCCTCCAGCACGTC
-+
-#1=DDFFFHHHHHJJJJJJHIIHFH
- at machine1:HiMom:abcdeACXX:1:2101:1023:2237 1:N:0:
-NTAAACAGCTTCTGCACAGCCAAAG
-+
-#00@@?>=39>9;<412@?######
- at machine1:HiMom:abcdeACXX:1:2101:1031:2163 1:Y:0:
-NTTTCCATGGCCGTCACCTTTGGGT
-+
-#4=DDFFFHHHHHJJJJJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1036:2087 1:Y:0:
-NTGTAGTTTCTTTAGGCAAATTTGT
-+
-#4=BDDDFHHHHHJJJJJJIIJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1040:2208 1:N:0:
-NATGCCCACCTCCCTCCTACGCACC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1048:2238 1:Y:0:
-NCTGCCGTGTCCTGACTTCTGGAAT
-+
-#1:B?ADDACF<DCG;EG<FHH at CE
- at machine1:HiMom:abcdeACXX:1:2101:1054:2162 1:Y:0:
-NCCAGGTGTCTTCCCGGGCCCTGCC
-+
-#1=DDFBDFHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1059:2083 1:Y:0:
-NAAGAGGGGTCAAGAGTTAAACTTA
-+
-#1=DDFFFHFHHGIGHGHJJJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1063:2206 1:Y:0:
-TCCTATTCGCCTACACAATTCTCCG
-+
-CCCFFFFFHHHHHJJJJJJJHJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1064:2242 1:Y:0:
-ATGAACAAAGGAAGAATTATGCACG
-+
-?;?D;DDDF?;:+<<CFFCHE433A
- at machine1:HiMom:abcdeACXX:1:2101:1072:2170 1:Y:0:
-ATCACCGCACTCATTTCCCGCTTCC
-+
-CCCFFFFFHHHACEEGHIIBHIIII
- at machine1:HiMom:abcdeACXX:1:2101:1077:2139 1:Y:0:
-CACAGGCTTCCACGGACTTAACGTC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1084:2188 1:Y:0:
-TTGCTGCATGGGTTAATTGAGAATA
-+
-CCCFFFFFHHHHFHHIIJJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1100:2085 1:Y:0:
-NCACATGGATGAGGAGAATGAGGAT
-+
-#1=DDFFFFHHHHJHIGIHHHIJEH
- at machine1:HiMom:abcdeACXX:1:2101:1102:2221 1:Y:0:
-TTTCATCTTATTTCATTGGTTTATA
-+
-CCCFFFFFHHHHHJIJJJJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1105:2131 1:Y:0:
-TTGGAACACAGCGGGAATCACAGCA
-+
-CCCFFFFFHHHHHJIJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1112:2245 1:Y:0:
-TGCCATCTGCTCTGGGAAGCACCAG
-+
-1:=DDDDDFBC:DEFIFFFIEF at BE
- at machine1:HiMom:abcdeACXX:1:2101:1122:2136 1:Y:0:
-GTAGGCGCTCAGCAAATACTTGTCG
-+
-@@@DDDD8?<CACEHHBBHDAAFH@
- at machine1:HiMom:abcdeACXX:1:2101:1123:2095 1:Y:0:
-NTGGACAACATGTTCGAGAGCTACA
-+
-#1=BBDDDFFFFDGFGIG?F;HHFI
- at machine1:HiMom:abcdeACXX:1:2101:1126:2082 1:Y:0:
-NGTTTTAGGGGTGCGCAGGAGTCAA
-+
-#11=A=DD?DF at D@CCGHIEFH at BG
- at machine1:HiMom:abcdeACXX:1:2101:1133:2239 1:Y:0:
-AGACAGAAGTACGGGAAGGCGAAGA
-+
-@@@FFFFEHFHHHJJCGDHIIECD@
- at machine1:HiMom:abcdeACXX:1:2101:1143:2137 1:Y:0:
-ATGCAGCAGCTGCCACGGAGCACCA
-+
-CC at FFDFDFHFHHGIDHEHIGJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1151:2182 1:N:0:
-TTGTTTTGGCTTATAATGACAAGAA
-+
-;;8-2).2())(<6=@8;?4??>>?
- at machine1:HiMom:abcdeACXX:1:2101:1151:2236 1:N:0:
-TTAAAGAGGTTCAGGGATGCAGAGT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1162:2139 1:Y:0:
-AGAGGTGAAATTCTTGGACCGGCGC
-+
-@@@DDDDDHFHHHDB:EFHHCAG?D
- at machine1:HiMom:abcdeACXX:1:2101:1163:2203 1:Y:0:
-TCTCCATGTGAAACAAGCAAAAAGA
-+
-CCCFFFFFHHHHGJJJIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1163:2222 1:Y:0:
-GAGCAGGCAAGGAGGACTTCTTGTT
-+
-CCCFFFFFGHHHHJJHHIJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:2101:1172:2152 1:N:0:
-AACACGGACAAAGGAGTCTAACACG
-+
-<<<??8@@#################
- at machine1:HiMom:abcdeACXX:1:2101:1186:2093 1:Y:0:
-NCGACCATAAACGATGCCGACCGGC
-+
-#4=DFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1188:2195 1:Y:0:
-TTAGACCGTCGTGAGACAGGTTAGT
-+
- at CCFFFFFHHHHHJJJJJIIEHIJH
- at machine1:HiMom:abcdeACXX:1:2101:1195:2150 1:Y:0:
-CCGAGAGAGTGAGAGCGCTCCTGGG
-+
-CCCFFFFFHFHHHJJJJIJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1207:2084 1:N:0:
-NTAGATGACCAAAACTTGCAGGGCA
-+
-#1:A<?@A+7A=?CBCCBCCBAAAA
- at machine1:HiMom:abcdeACXX:1:2101:1208:2231 1:N:0:
-TCACTAAACATCCAAACATCACTTT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1215:2110 1:Y:0:
-NAATATAATTTGGAGACCCTTTGTT
-+
-#1=DDDDDEDDDDIDDBB3ABAB##
- at machine1:HiMom:abcdeACXX:1:2101:1216:2172 1:Y:0:
-TTTCTTCGCAGGATTTTTCTGAGCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1216:2193 1:Y:0:
-TTTTCTTGGCCTCTGTTTTTTTTTT
-+
-BCCFDFFFHHFFHJIGIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1226:2088 1:Y:0:
-NGATCGGAAGAGCACACGTTTGACT
-+
-#4=DAA=DDFHFHIIBFGHHIG>EG
- at machine1:HiMom:abcdeACXX:1:2101:1231:2208 1:Y:0:
-ACGCCGCAAGTCAGAGCCCCCCAGA
-+
-@@@DDDFFFFB:DBBEBEFDHBDDB
- at machine1:HiMom:abcdeACXX:1:2101:1233:2133 1:N:0:
-GAGAGAAGCACTCTTGAGCGGGATA
-+
-0;(@((@)2@###############
- at machine1:HiMom:abcdeACXX:1:2101:1240:2197 1:N:0:
-ATAAAACATAGCAATATTTTCCTAT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1245:2154 1:Y:0:
-TCGTTAAGTATATTCTTAGGTATTT
-+
-CCCFFDFFFHFHHIIJJJJJFJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1249:2231 1:Y:0:
-GTTATTGATAGGATACTGTACAAAC
-+
- at BCFFFFDHHHHFIJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1258:2092 1:Y:0:
-NCACACACACACTCATTCACAGCTT
-+
-#1=DDDFFHHHFHJJIJGGGIIGIJ
- at machine1:HiMom:abcdeACXX:1:2101:1262:2128 1:N:0:
-AGCAGAAGGGCAAAAGCTGGCTTGA
-+
-9;<@:@###################
- at machine1:HiMom:abcdeACXX:1:2101:1273:2119 1:N:0:
-NAGATAAGAGTCCACACAGTTGAGT
-+
-#11AAAAA<A?4=C=7?733<ACA3
- at machine1:HiMom:abcdeACXX:1:2101:1285:2105 1:N:0:
-NGCGGGGAGCCGGGCGTGGAATGCG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1312:2105 1:Y:0:
-NTTCCCTCAGGATAGCTGGCGCTCT
-+
-#1=DDFFFGHGHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1325:2083 1:Y:0:
-NCAGAAGAAAGGGCCTTGTCGGAGG
-+
-#1=DDDDDHHFHDGI at EEHG:?FA8
- at machine1:HiMom:abcdeACXX:1:2101:1336:2109 1:Y:0:
-NACTATCAGGATCGTGGCTATTTTG
-+
-#1BDDFFFHHHHHJIJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1349:2084 1:Y:0:
-NCAAGTAGCAGTGTCACGCCTTAGC
-+
-#1=DDBDDADFDDBEH at HC=CEGG@
- at machine1:HiMom:abcdeACXX:1:2101:1365:2094 1:Y:0:
-NAAGGTGAAGGCCGGCGCGCTCGCC
-+
-#1=BDDDFFHHHHJGGGIGFIHIIJ
- at machine1:HiMom:abcdeACXX:1:2101:1370:2116 1:Y:0:
-NTGGTGGTCCATAGAGATTTGAAAC
-+
-#1:4BD7DACF?FCA:4+<ACHIIH
- at machine1:HiMom:abcdeACXX:1:2101:1386:2105 1:Y:0:
-NTACTAAAGAAAAAGTTGAAGAACT
-+
-#1=DDDFFHHHHHJJGHIJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1414:2098 1:Y:0:
-NAGGACATCGATAAAGGCGAGGTGT
-+
-#1=DDFFFHHHHHJJJJJJJJJHHG
- at machine1:HiMom:abcdeACXX:1:2101:1427:2081 1:Y:0:
-NCGAGTGCCTAGTGGGCCACTTTTG
-+
-#4=DDBDFHHHHFHIJJJJIJJJJI
- at machine1:HiMom:abcdeACXX:1:2101:1450:2134 1:Y:0:
-AGCACGCTGCCGCGGGACCTGCCCA
-+
-?@@AD at DDHFH?DGIIIIG at FGFBF
- at machine1:HiMom:abcdeACXX:1:2101:1459:2083 1:Y:0:
-NCACACGCCACACGGAGCACACTTT
-+
-#4=DDFFFHHHHHJJJJJJJJIIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1491:2093 1:Y:0:
-NCTATGCCGATCGGGTGTCCGCACT
-+
-#1=DDDDDHHFHHIIEHHHBGHGII
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/nonBarcoded.2.fastq b/testdata/net/sf/picard/illumina/25T8B25T/fastq/nonBarcoded.2.fastq
deleted file mode 100644
index 3bb2e7f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/fastq/nonBarcoded.2.fastq
+++ /dev/null
@@ -1,720 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:1031:2224 2:N:0:
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1039:2147 2:N:0:
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1046:2175 2:N:0:
-NNGGANNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1047:2122 2:N:0:
-NNTCANNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1048:2197 2:N:0:
-NNGTGNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1065:2193 2:Y:0:
-NCTTGNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1069:2159 2:Y:0:
-GACGTNNNNNNNNNNNNNNNNNNNN
-+
-<<<@?####################
- at machine1:HiMom:abcdeACXX:1:1101:1071:2233 2:Y:0:
-GTTTGNNNNNNNNNNNNNNNNNNNN
-+
-<<<@@####################
- at machine1:HiMom:abcdeACXX:1:1101:1083:2193 2:Y:0:
-AGGCTNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1084:2136 2:Y:0:
-TTTCTNNNNNNNNNNNNNNNNNNNN
-+
-<<<@@####################
- at machine1:HiMom:abcdeACXX:1:1101:1089:2172 2:Y:0:
-TCCGGNNNNNNNNNNNNNNNNNNNN
-+
-:<<??####################
- at machine1:HiMom:abcdeACXX:1:1101:1100:2207 2:Y:0:
-AGGCTNNNNNNNNNNNNGNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1111:2148 2:Y:0:
-GCGAANANNNNNNNNNNGGACGACN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1138:2141 2:Y:0:
-TCCGATCTGCTTCAGGTCGATCAGA
-+
-CCCFFFFFHGHHHJJIGHIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1140:2120 2:Y:0:
-TTTTTTTTTTTTTAACTTTGCAAAT
-+
-@@@DDDDDHHHHFB at 9FHI@BFH@@
- at machine1:HiMom:abcdeACXX:1:1101:1143:2192 2:Y:0:
-CGACAAGTCTGGCTTATCACTCATC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1150:2228 2:Y:0:
-ATGGGAGGCGATTCCTAGGGGGTTG
-+
-8?=DD8;@BH6DHD<FGGGEIGHIG
- at machine1:HiMom:abcdeACXX:1:1101:1157:2135 2:Y:0:
-TTTAAAGTCTTAATCAAAGATGATA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1162:2207 2:N:0:
-TAAAACTGGGGAAGTTAGAGGAATG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1165:2239 2:Y:0:
-ATGGAAGTCGAGACAGAAGTGAGAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1175:2197 2:Y:0:
-AAGAGCTGGGGAACATCCAGAAAGG
-+
-BC at FFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1188:2237 2:Y:0:
-GCTTCCTTCAAGACAGAAGTGAGAA
-+
-CCCFFDDEFHHFFE at FDHHAIAFHG
- at machine1:HiMom:abcdeACXX:1:1101:1197:2200 2:Y:0:
-ATATTCCACTGGAACCACAGAACCC
-+
-@@@FFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1206:2126 2:Y:0:
-ATCTGTCCAGTGGTGCACTGAATGT
-+
-CCCFFFFFHHHHHHIIJJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1212:2230 2:Y:0:
-TTTTAGCTTTATTGGGGAGGGGGTG
-+
-CCCFFFFFHHGHHJJJJGJJJJJDF
- at machine1:HiMom:abcdeACXX:1:1101:1218:2200 2:Y:0:
-GCTCTTCCGATCTATCTGCTCGTCC
-+
-(-(=34???3;@#############
- at machine1:HiMom:abcdeACXX:1:1101:1219:2164 2:Y:0:
-ATCTTATCCACTCCTTCCACTTTGG
-+
-CCCFFFFFHHHHHJJIJJJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1221:2143 2:Y:0:
-CAATTGAATGTCTGCACAGCCGCTT
-+
-@@@FFFFDHHHHHJJJIIIJGHIJJ
- at machine1:HiMom:abcdeACXX:1:1101:1236:2121 2:Y:0:
-TTGCGCTTACTTTGTAGCCTTCATC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1242:2170 2:Y:0:
-GGAAGGAAAAGAAGCACAAGTACAT
-+
-@@@DFDFFHHHGHHGIIGJJEHHIG
- at machine1:HiMom:abcdeACXX:1:1101:1257:2223 2:Y:0:
-TGCTCTTCCGATCTTTTAGCAAAGC
-+
-:?@DDBDDHFFHDGIGIIJJJGGGI
- at machine1:HiMom:abcdeACXX:1:1101:1259:2152 2:Y:0:
-ATTTTTATATTTTTTTAGACATAGG
-+
-CCCFFFFFGHHHHJJJJIGIIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1261:2127 2:N:0:
-TTTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFHGHHHJJIFDDDDDDDD
- at machine1:HiMom:abcdeACXX:1:1101:1263:2236 2:N:0:
-AGTTCTTCAGTAATTTTAGTACTGC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1267:2209 2:Y:0:
-GGCAGAGTCTCCAACAGCCCCGTAC
-+
-=;?DDDD?CCFHAIIIGGIIGE at EG
- at machine1:HiMom:abcdeACXX:1:1101:1269:2170 2:Y:0:
-TTCCAAGCCTGTGCTTTAAGGAAAA
-+
-@@<ADBDBDF8DDCFH at GIE@@GGH
- at machine1:HiMom:abcdeACXX:1:1101:1290:2225 2:Y:0:
-TCAGTTCACTGGCAAAGACAGTCAC
-+
-C@@FBEDDFHFHGIIICEHGDHBHE
- at machine1:HiMom:abcdeACXX:1:1101:1291:2150 2:Y:0:
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHFHHIJJJIIIGIJIJ
- at machine1:HiMom:abcdeACXX:1:1101:1302:2244 2:Y:0:
-TGAATACATATAACAAATGCAAAAA
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1308:2153 2:N:0:
-TCTGTAAGGTAATCCCCGCATGTGT
-+
-1?1=4===AFFDFFGFDGFB at CFB:
- at machine1:HiMom:abcdeACXX:1:1101:1309:2210 2:Y:0:
-AGTGGGCTAGGGCATTTTTAATCTT
-+
-@@?DFFDFHHHDFHJIJJIJGIIIJ
- at machine1:HiMom:abcdeACXX:1:1101:1314:2233 2:Y:0:
-AGGAAAGTTGGGCTGACCTGACAGA
-+
-@@<DDD;=FBFADBCGDEH?F;FCG
- at machine1:HiMom:abcdeACXX:1:1101:1316:2126 2:Y:0:
-TCTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFHHHHHJJJJHFDDDDDD
- at machine1:HiMom:abcdeACXX:1:1101:1327:2200 2:N:0:
-GTCATCTGGGCTGTCGACAGGTGTC
-+
- at B@FFFFFHHHHGIJJJJJJIFHHI
- at machine1:HiMom:abcdeACXX:1:1101:1328:2225 2:Y:0:
-AGGAAATTAGGACTTACCTGACATA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1338:2175 2:Y:0:
-GCTTGTTGGCTTTAACATCCACAAT
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1347:2149 2:Y:0:
-GCTCTTCCGATCTGTGCTCTTCCGA
-+
-CCCFFFFFDFHHFIJDGIGGHGIGH
- at machine1:HiMom:abcdeACXX:1:1101:1353:2226 2:Y:0:
-GTGCTCTTCCGATCTTCAGGTTACC
-+
-BBBFFFFFHHHHHJJJJJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1363:2138 2:Y:0:
-GTTCTTAAACCTGTTAGAACTTCTG
-+
-C@@FFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1399:2128 2:Y:0:
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHHHHIJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1403:2194 2:Y:0:
-ACATGGTGAAACCCTGTCTCTACTA
-+
-CCCFFFDDHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1406:2222 2:Y:0:
-GGCTGGACTCCCCTGGTTCTGGGCA
-+
-;?@DDDBD?FHDFGIIIGIGHHIII
- at machine1:HiMom:abcdeACXX:1:1101:1419:2119 2:Y:0:
-ACTTTCCTTTTTTGTTTTACTTTAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1420:2213 2:Y:0:
-TTCACTGTACCGGCCGTGCGTACTT
-+
- at CCFFFFDHHHFGIJJJJJJGHIGG
- at machine1:HiMom:abcdeACXX:1:1101:1435:2194 2:Y:0:
-TTTTGTTTTCTTTTACTGAAGTGTA
-+
-CCCFFDFFHHHHHJJJJIHIJHHHJ
- at machine1:HiMom:abcdeACXX:1:1101:1441:2148 2:Y:0:
-TTTTGGCTCTAGAGGGGGTAGAGGG
-+
-CCCFFFFFHHDFBHIIJJ1?FGHIJ
- at machine1:HiMom:abcdeACXX:1:1101:1452:2132 2:Y:0:
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHHHHJJJJJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1460:2176 2:Y:0:
-AGGAAAAAGACACAACAAGTCCAAC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:1479:2221 2:Y:0:
-GGGGAAATCTATTTTTATGTAAAAA
-+
- at CCFFFFFHHHHHJIGIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1101:1491:2120 2:Y:0:
-GGCCAGGCTGAACTTCTGAGCTGCT
-+
-CCCFFFFFHHHGHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1018:2133 2:Y:0:
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1018:2217 2:N:0:
-NNNNNNNNNNNNNNNNNNNNNNNNN
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1028:2202 2:Y:0:
-NNAAACNCNTNNNNNNNGGNNTGNN
-+
-##42@?###################
- at machine1:HiMom:abcdeACXX:1:1201:1042:2174 2:Y:0:
-NTCAGGAAGGCNNCAAAAAAAGAAA
-+
-#0;@@@?@?<@##3<@@?@@?????
- at machine1:HiMom:abcdeACXX:1:1201:1043:2246 2:Y:0:
-NGCATCATTTCNNGCTTCTCTCTGT
-+
-#0;@@??@=@>##22=;@??><@??
- at machine1:HiMom:abcdeACXX:1:1201:1045:2105 2:N:0:
-NTTTTTTTTTTNNTTTTTTTTTTTT
-+
-#0;@@@@@@@?##0:????????=<
- at machine1:HiMom:abcdeACXX:1:1201:1054:2151 2:Y:0:
-GTCAGGCACTGAGAATATATGGGTG
-+
-CBCFFFFFHHHHHJJJJJJJJJJEG
- at machine1:HiMom:abcdeACXX:1:1201:1064:2239 2:Y:0:
-GGGATGGGAGGGCGATGAGGACTAG
-+
-8?@:DDDACC:FHHGIH<EGDDDFH
- at machine1:HiMom:abcdeACXX:1:1201:1073:2225 2:Y:0:
-CGTGTGCTCTTCCGATCTGGAGGGT
-+
- at BBDFFFFHHHHHJJJJJJJJJJJ:
- at machine1:HiMom:abcdeACXX:1:1201:1083:2121 2:Y:0:
-ACACACAACACCACCGCCCTCCCCC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1084:2204 2:Y:0:
-TGGCTCCTCAGGCTCTCATCAGTTG
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1095:2146 2:Y:0:
-ACTGACAACACCAAATGCTGCTAAG
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1103:2184 2:Y:0:
-AGAAGTTTCAGAATTGTGGCCCCAT
-+
-B at BFFDEFHHHHHJJJGHIJJJJJI
- at machine1:HiMom:abcdeACXX:1:1201:1107:2109 2:Y:0:
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHGHHJJJJIIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1118:2198 2:Y:0:
-AATAAACTTTATTAAAGCAGTTAAA
-+
-C at CFFFFFHDHHHGIIIJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1122:2227 2:Y:0:
-GTCATATAAGGCCCAGTCCAAGGAA
-+
-@@@FFFFFHHHGGIJIGGIJFIJII
- at machine1:HiMom:abcdeACXX:1:1201:1123:2161 2:N:0:
-CGTGTGCTCTTCCGATCTGCATACA
-+
-===AAAA8AAAA<AAA)@CBA9>A#
- at machine1:HiMom:abcdeACXX:1:1201:1127:2112 2:N:0:
-TAATCACCTGAGCAGTGAAGCCAGC
-+
-@<@?BDDDHD?FDBHI?AHGGGDFH
- at machine1:HiMom:abcdeACXX:1:1201:1134:2144 2:Y:0:
-AGTGTGAGTAATGGTTGAGAGGTGG
-+
-B@?DDDFFFHHGHJHHGFIHHIFGI
- at machine1:HiMom:abcdeACXX:1:1201:1138:2227 2:N:0:
-GACAAATATAGGAAATAGAAGCTAT
-+
-=1=A=AAA,2?4>7C<<4<A+3<AB
- at machine1:HiMom:abcdeACXX:1:1201:1140:2125 2:Y:0:
-TTCATAAATTGGTCTTAGATGTTGC
-+
-CC at FFFFFHHHHFGIJIIIJIJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1142:2242 2:Y:0:
-GTAAAATGTAAAATAATAAAAAATG
-+
-?=?DDDD;AF<DF<FFFFIIIFF@<
- at machine1:HiMom:abcdeACXX:1:1201:1150:2161 2:Y:0:
-TTCTCACTACTGTGATTGTGCCACT
-+
- at C@FFFFFGHHHHGIIIICEHCFGH
- at machine1:HiMom:abcdeACXX:1:1201:1159:2179 2:N:0:
-TTTTTTTTTATTTTTCTAAATACTT
-+
-===AA####################
- at machine1:HiMom:abcdeACXX:1:1201:1160:2109 2:Y:0:
-ACATCCTTCCCATGCCACCAACTCG
-+
-CCCFFFFFGHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1180:2119 2:Y:0:
-GCTCTAAATTTTGCTTTTCTACAGC
-+
-CCCFFFFFHHHHHJJJJIJIJJIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1185:2143 2:Y:0:
-GCTGAAGGCCCGTGGGCCAGAGGTG
-+
- at CCFFFFFHHHHHJJJJJJJJJJHI
- at machine1:HiMom:abcdeACXX:1:1201:1187:2100 2:Y:0:
-AAAAAAGAGCCCGCATTGCCGAGAC
-+
-=<=;AA###################
- at machine1:HiMom:abcdeACXX:1:1201:1190:2194 2:Y:0:
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1204:2228 2:Y:0:
-TCTTCTTGTCGATGAGGAACTTGGT
-+
-@?@FFFFFDHHGHJIJJGHIIJJJH
- at machine1:HiMom:abcdeACXX:1:1201:1208:2132 2:Y:0:
-CTGTAGAAAGGATGGTCGGGCTCCA
-+
-@@CDFFFFGHFHHJIJJGJIBHJJG
- at machine1:HiMom:abcdeACXX:1:1201:1219:2115 2:Y:0:
-TGGGAGTAGTTCCCTGCTAAGGGAG
-+
-???DBDBDADDDDIEID:AFFD:?8
- at machine1:HiMom:abcdeACXX:1:1201:1236:2187 2:Y:0:
-CTCCTTAGCGGATTCCGACTTCCAT
-+
-CCCFFFFDHHHHGIJJIGIGIJJGG
- at machine1:HiMom:abcdeACXX:1:1201:1242:2207 2:Y:0:
-ATCTTTTATTGGCCTCCTGCTCCCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1252:2141 2:Y:0:
-AGTTATTTTGCCTATGTCCAACAAG
-+
-BCBFFFFFGHHHHJIJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1260:2165 2:Y:0:
-ATCTGATCTAAGTTGGGGGACGCCG
-+
-@@@FFDFFHHHHHJJJIJIIIGIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1280:2179 2:Y:0:
-GAGGACTGCTTGAGTCCAGGAGTTC
-+
-@@BFFDEFGHHHHIFGCHIJJJGGI
- at machine1:HiMom:abcdeACXX:1:1201:1281:2133 2:Y:0:
-GCAACAAAATTTCATATGACTTAGC
-+
-CCCFFFFFHHHHHJJIIIHICHIIJ
- at machine1:HiMom:abcdeACXX:1:1201:1285:2100 2:Y:0:
-GATCTTTTTTGCTTTGTAGTTATAG
-+
-@@@DFFFFHHHHHIIGIABCFFHBF
- at machine1:HiMom:abcdeACXX:1:1201:1291:2158 2:Y:0:
-CGTGTGCTCTTCCGATCTGATGGGC
-+
- at CCFFFDD?FHHFGEHHIIDHIIII
- at machine1:HiMom:abcdeACXX:1:1201:1300:2137 2:Y:0:
-GCTCTTCCGATCTTTTTTTTAATTT
-+
-@@?DDDDDFDHADEHGIGGED3?FD
- at machine1:HiMom:abcdeACXX:1:1201:1312:2112 2:Y:0:
-ATTTGCAGGAGCCGGCGCAGGTGCA
-+
-CCCFFFFFHHHHHJJJIJJJJGHIJ
- at machine1:HiMom:abcdeACXX:1:1201:1331:2162 2:Y:0:
-TAATCCCAGTACTTTGGGAGGCCAA
-+
-CCCFFFFFHHHHHJJJJIJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1341:2116 2:Y:0:
-ATAACAGCGAGACTGGCAACTTAAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1344:2147 2:Y:0:
-ACGATTAGTTTTAGCATTGGAGTAG
-+
-@<??DDDDFHHHFGGHHIIIGGAGH
- at machine1:HiMom:abcdeACXX:1:1201:1345:2181 2:Y:0:
-ATACGGATGTGTTTAGGAGTGGGAC
-+
-CCCFFFFFHHHHHIIJJHJFHIJIJ
- at machine1:HiMom:abcdeACXX:1:1201:1364:2113 2:Y:0:
-TAAAGAGAGCCAGTGGAGTTACGAC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1201:1392:2109 2:Y:0:
-GTCAGACAGGGGGATTTGGGCTGTG
-+
-BBCFFFFFHHHHHHJJJHIJIJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1392:2184 2:Y:0:
-ATCTTTATTCATTTGTATGATCTTA
-+
-@@BFFFFFHFFHFHIHIIJIJJJJI
- at machine1:HiMom:abcdeACXX:1:1201:1393:2143 2:Y:0:
-GATAAATGCACGCATCCCCCCCGCG
-+
-C at CFFFFFGGHHHHJJJJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:1201:1414:2174 2:N:0:
-TTTTTTTTTTTTTTTTTTTTTTTTT
-+
-@;@1BDADF????FFEB>B6=BBBB
- at machine1:HiMom:abcdeACXX:1:1201:1416:2128 2:Y:0:
-TTGGTGTGGAGGCGGTGGCGGGATC
-+
-@@@DDDDDHHFHHII:?GGHIIB6?
- at machine1:HiMom:abcdeACXX:1:1201:1421:2154 2:Y:0:
-TGTGCTCTTCCGATCTTGTGCTCTT
-+
-BC at DFFFFHHHHHJJJJFHIHHIJJ
- at machine1:HiMom:abcdeACXX:1:1201:1439:2156 2:Y:0:
-GGAGATTATTTGCCTTGAAGTAAGC
-+
--;(22<>>@>8@>8;@#########
- at machine1:HiMom:abcdeACXX:1:1201:1452:2143 2:Y:0:
-TTTTAGTCTTAGCATTTACTTTCCC
-+
-CCCFFFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:1201:1458:2109 2:Y:0:
-GATACGAACACACAAGAACTTTTTT
-+
-CCCFFFFFHHHHHJJJJJJJJJJJI
- at machine1:HiMom:abcdeACXX:1:1201:1472:2121 2:N:0:
-GTGTGCTCTTCCGATCTGGAGGATG
-+
-=+=??A4A==A at 7A<?#########
- at machine1:HiMom:abcdeACXX:1:1201:1483:2126 2:N:0:
-GCATGCAGCTGGGTGCTGTGATGCA
-+
-@@@DDDBB<DD8F<<CGG?AA?A<F
- at machine1:HiMom:abcdeACXX:1:1201:1486:2109 2:Y:0:
-ACGTGTGCTCTTCCCGATCTGTATA
-+
-CCCFF?DDFBHHHJJIIDHJIJJJH
- at machine1:HiMom:abcdeACXX:1:1201:1486:2146 2:N:0:
-TTTTTTTTTTTTTTTTTTTTTGGGC
-+
-<<<@??@??@???????########
- at machine1:HiMom:abcdeACXX:1:2101:1011:2102 2:Y:0:
-NNNNNTCACACATAATTTTAAAATT
-+
-#####22@?@@??@@@@@??@@@@@
- at machine1:HiMom:abcdeACXX:1:2101:1013:2146 2:Y:0:
-NNNNCGCTAGAACCAACTTATTCAT
-+
-####24=?@@?@?@@?@@@@@@?@@
- at machine1:HiMom:abcdeACXX:1:2101:1021:2209 2:Y:0:
-NNGGAAGGCTGCTAGCTGGCCAGAG
-+
-##08@>??@@??@?????????>?@
- at machine1:HiMom:abcdeACXX:1:2101:1023:2237 2:N:0:
-NNTTTGTTTGAGTTCCTTGTAGATT
-+
-##0:=@?>?@???@:>?@??>?;?<
- at machine1:HiMom:abcdeACXX:1:2101:1031:2163 2:Y:0:
-NNACATTTGTCACCACTAGCCACCA
-+
-##0<@?@@@@@@@@@@?@@@@@@@?
- at machine1:HiMom:abcdeACXX:1:2101:1036:2087 2:Y:0:
-NGTCCACTTACGAAGCAAATACTTT
-+
-#4=DDFFFHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1040:2208 2:N:0:
-NCTGATAGTCACTGAAATGAATTCA
-+
-#-0=>(2 at .22@@############
- at machine1:HiMom:abcdeACXX:1:2101:1048:2238 2:Y:0:
-NGTCACATCGTTGAAGCACTGGATC
-+
-#11ADDDB<CFFHCHGDBHGIIIII
- at machine1:HiMom:abcdeACXX:1:2101:1054:2162 2:Y:0:
-NGGACAGGGAAGGGAAGGAAGGGTG
-+
-#4=DDFDFHHHHHJIJIIDHHGICG
- at machine1:HiMom:abcdeACXX:1:2101:1059:2083 2:Y:0:
-NGAATGTCTTAGAAGGATGCTTCTC
-+
-#1=BDDDEHHGHHJJJJJIJJIIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1063:2206 2:Y:0:
-NTGCTAGGATGAGGATGGATAGTAA
-+
-#1=DDDFFHHHHHJHIIJHIIIHHJ
- at machine1:HiMom:abcdeACXX:1:2101:1064:2242 2:Y:0:
-NGGAAAAAGGTTGTCAAGCGTTAAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1072:2170 2:Y:0:
-NGGGGAGACAGAGAGGATCAGAAGT
-+
-#4=BDDFDHHDFHEGFEGGIJIIIG
- at machine1:HiMom:abcdeACXX:1:2101:1077:2139 2:Y:0:
-NATTAGTTGGCGGATGAAGCAGATA
-+
-#4=DFFFFHHHHHJJJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1084:2188 2:Y:0:
-TACAAGGTCAAAATCAGCAACAAGT
-+
-CCCFFFFDHHHHHJJJJJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1100:2085 2:Y:0:
-ATCTTGATCTCCTCCTTCTTGGCCT
-+
-@@@DDDDDHHFHFEIIIIHHBAHBG
- at machine1:HiMom:abcdeACXX:1:2101:1102:2221 2:Y:0:
-ATAACTGACTCTACTCAGTAGATTA
-+
-CCCFFFFFHHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1105:2131 2:Y:0:
-CAGCAGCAGCAACAGCAGAAACATG
-+
-CCCFFFFFHHHHHJJJJJIJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1112:2245 2:Y:0:
-TCGTAGTGTTGTAATTTCGTCTTCT
-+
-?8?DBDDDCCFCAACGGFFCBFFAE
- at machine1:HiMom:abcdeACXX:1:2101:1122:2136 2:Y:0:
-CTTGCCAGCCTGCAGGCCCCGCGGC
-+
-???BBAABDD?DDIID)A:3<EADD
- at machine1:HiMom:abcdeACXX:1:2101:1123:2095 2:Y:0:
-TCCGCCTCCAGCTTCAGCTTCTCCT
-+
-@@@FDDFFHHHHHJHGGJIJJJEHH
- at machine1:HiMom:abcdeACXX:1:2101:1126:2082 2:Y:0:
-TCTCTTTCCACCTTGGTCACCTTCC
-+
- at C@DDDFFHHHHHJEGGIHHIJGIH
- at machine1:HiMom:abcdeACXX:1:2101:1133:2239 2:Y:0:
-AGCTTTTTGTTTCCTAGCTTGTCTT
-+
-?@?DDFFFHHHHF4ACFHIJHHHGH
- at machine1:HiMom:abcdeACXX:1:2101:1143:2137 2:Y:0:
-GCTCTTCAGATCTAGGGGGAACAGC
-+
-@@@DD?=DCAFFFHIIDG:EFHIII
- at machine1:HiMom:abcdeACXX:1:2101:1151:2182 2:N:0:
-TTTTTTTTTTTTTTTTTTTTTTTTA
-+
-9<<?@?@;5=?##############
- at machine1:HiMom:abcdeACXX:1:2101:1151:2236 2:N:0:
-TTTGAAGCCTCTTTATCCTTGGCAT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1162:2139 2:Y:0:
-ATCGTTTATGGTCGGAACTACGACG
-+
-BCCFFFFFHHHHHIJJJJJJJIJJI
- at machine1:HiMom:abcdeACXX:1:2101:1163:2203 2:Y:0:
-TTGGTTCACTTATGTATTTATGAAT
-+
- at CCFDFFFHHHHHJHIIJJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1163:2222 2:Y:0:
-GAGCGATAATGGTTCTTTTCCTCAC
-+
-@@@DFFFFHHHHHJJJJJJJIJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1172:2152 2:N:0:
-ATCGTTTCTGGGGACTAGTGAGGCG
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1186:2093 2:Y:0:
-AATGTTGGGAGGACAATGATGGAAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1188:2195 2:Y:0:
-GCACATACACCAAATGTCTGAACCT
-+
-CCCFFFFFHHHHHJJJHIJJJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1195:2150 2:Y:0:
-AATTGAACTTCACCACCCAGAGGAA
-+
-CCCFFFFFHHHHHJJJJJJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1207:2084 2:N:0:
-TCACCACTCTTCTGGGCATCCCCTG
-+
-@@@DDEDFHHHHHIJIHHGHGGJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1208:2231 2:N:0:
-CTTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFHHHHHJJJHFDDDDDDD
- at machine1:HiMom:abcdeACXX:1:2101:1215:2110 2:Y:0:
-ATCTTTCCCCCATTAAGAACAGCAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1216:2172 2:Y:0:
-GGACTTCTAGGGGATTTAGCGGGGT
-+
-CCCFFFFFHHHHHJJJJJJJJJJJD
- at machine1:HiMom:abcdeACXX:1:2101:1216:2193 2:Y:0:
-AGGCATGACACTGCATTTTAAATAC
-+
-@@@DDDDDHFFHHGGDFHFHIIHGG
- at machine1:HiMom:abcdeACXX:1:2101:1226:2088 2:Y:0:
-GCTCTTCCGATCTAGGTAATAGCTA
-+
-==?BDFFFDCDDHFFFAFHDHIJGJ
- at machine1:HiMom:abcdeACXX:1:2101:1231:2208 2:Y:0:
-AGCCAGTGTTGGTGTGTTGACTGTT
-+
-@@;1ADABCF;BF<AACGCHEBHC<
- at machine1:HiMom:abcdeACXX:1:2101:1233:2133 2:N:0:
-TTTTTTTTTTTTTTTTTTTTTTTTT
-+
-CCCFFFFFGHHHHJJJFDDDDDDDD
- at machine1:HiMom:abcdeACXX:1:2101:1240:2197 2:N:0:
-ACTGGAGATCCTTGTTACATGCCCA
-+
-??+++A:DD?:ADEE@::C4:C<E:
- at machine1:HiMom:abcdeACXX:1:2101:1245:2154 2:Y:0:
-ACCAATCAGTAGCACCACTATACAC
-+
-CCCFFFFFHHHHHJJJJJJIJJJJJ
- at machine1:HiMom:abcdeACXX:1:2101:1249:2231 2:Y:0:
-TCTCTCGGCCTTCCACTCTAGCATA
-+
-@@@FFFFFFHHGHIJJJGJIIJHIJ
- at machine1:HiMom:abcdeACXX:1:2101:1258:2092 2:Y:0:
-TTAGACAAAACACCAAAATAAAATA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1262:2128 2:N:0:
-TCTTGTGGTAACTTTTCTGACACCT
-+
--(---9@;@?:8>?4:>?@######
- at machine1:HiMom:abcdeACXX:1:2101:1273:2119 2:N:0:
-ATGATGGATCTTCTCTAACTTGTCA
-+
->=><AAAAA+2AA?CB4@@ABB3?A
- at machine1:HiMom:abcdeACXX:1:2101:1285:2105 2:N:0:
-TGTCTATATCAACCAACACCTCTTC
-+
--(0(():94:9:???##########
- at machine1:HiMom:abcdeACXX:1:2101:1312:2105 2:Y:0:
-GTTGAGAATAGGTTGAGATCGTTTC
-+
- at CCFFFDFHHFHDHIJJJJJJJIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1325:2083 2:Y:0:
-TGTGCTCTTCCGATCTGGAGAAAAA
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:2101:1336:2109 2:Y:0:
-AGACCAGAACAGCTCCAGGTGCTCC
-+
-CCCFFFFFHHHHHJJJJJJCGHIJJ
- at machine1:HiMom:abcdeACXX:1:2101:1349:2084 2:Y:0:
-AGTCTGAATCATTGGTGTCTGAAGA
-+
-<5;??=>=>>?##############
- at machine1:HiMom:abcdeACXX:1:2101:1365:2094 2:Y:0:
-GCTCTTCCGATCTTGTGCTCTTCCG
-+
-CCCFFFFDHFHHGJJIIJIJJIHII
- at machine1:HiMom:abcdeACXX:1:2101:1370:2116 2:Y:0:
-CACCATCTGACATCATGTTTGAAAG
-+
-@@@DFFFDFFHDHIGBHHII<HEDB
- at machine1:HiMom:abcdeACXX:1:2101:1386:2105 2:Y:0:
-AGGAATTATTCTTCTGCCATAAGGT
-+
-B@@DDFFFHGFHHIJJJJJGIGIJH
- at machine1:HiMom:abcdeACXX:1:2101:1414:2098 2:Y:0:
-TTGGGGCCGGTGCCGTCGGGCCCAA
-+
-CCCFFFFFHHHHGJJIJJJJJJJIJ
- at machine1:HiMom:abcdeACXX:1:2101:1427:2081 2:Y:0:
-CCGACTTCCATGGCCACCGTCCTGC
-+
-CCCFFFFFHHHHHJJJIIGFIIJJI
- at machine1:HiMom:abcdeACXX:1:2101:1450:2134 2:Y:0:
-ACAAACCCTTGTGTCGAGGGCTGAC
-+
-CC at FDFDFFDFHFGIIE1CGGHBGE
- at machine1:HiMom:abcdeACXX:1:2101:1459:2083 2:Y:0:
-ATTTCACCAAAATAATCAGAAGGCC
-+
-CCCFFFFDBHGHHIGGIJFJJGGFH
- at machine1:HiMom:abcdeACXX:1:2101:1491:2093 2:Y:0:
-AGAGACGGGGTCTCGCTATGTTGCC
-+
-BCCDFFFFHHHHHJIIJJJJIJIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AAAAAAAA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AAAAAAAA.sam
deleted file mode 100644
index 15e09bc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AAAAAAAA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AAAAAAAA LB:LN_AAAAAAAA SM:SA_AAAAAAAA CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AAAAGAAG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AAAAGAAG.sam
deleted file mode 100644
index fd8b3c0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AAAAGAAG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AAAAGAAG LB:LN_AAAAGAAG SM:SA_AAAAGAAG CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AACAATGG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AACAATGG.sam
deleted file mode 100644
index d92fa14..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AACAATGG.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AACAATGG LB:LN_AACAATGG SM:SA_AACAATGG CN:BI
-HiMom:1:1101:1138:2141 77 * 0 0 * * 0 0 .TTACCAAGGTTTTCTGTTTAGTGA #1=DDFFFHHFHHJJJIHJIJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1138:2141 141 * 0 0 * * 0 0 TCCGATCTGCTTCAGGTCGATCAGA CCCFFFFFHGHHHJJIGHIJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1206:2126 77 * 0 0 * * 0 0 .ATTCTGCCATATTGGTCCGACAGT #1=DDFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
-HiMom:1:1101:1206:2126 141 * 0 0 * * 0 0 ATCTGTCCAGTGGTGCACTGAATGT CCCFFFFFHHHHHHIIJJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1077:2139 77 * 0 0 * * 0 0 CACAGGCTTCCACGGACTTAACGTC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1077:2139 141 * 0 0 * * 0 0 .ATTAGTTGGCGGATGAAGCAGATA #4=DFFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
-HiMom:1:2101:1112:2245 77 * 0 0 * * 0 0 TGCCATCTGCTCTGGGAAGCACCAG 1:=DDDDDFBC:DEFIFFFIEF at BE RG:Z:HiMom.1
-HiMom:1:2101:1112:2245 141 * 0 0 * * 0 0 TCGTAGTGTTGTAATTTCGTCTTCT ?8?DBDDDCCFCAACGGFFCBFFAE RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AACGCATT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AACGCATT.sam
deleted file mode 100644
index ed00daa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AACGCATT.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AACGCATT LB:LN_AACGCATT SM:SA_AACGCATT CN:BI
-HiMom:1:1101:1197:2200 77 * 0 0 * * 0 0 GGGCGCCCCGTGAGGACCCAGTCCT @C at FFADDFFCFCEHIIJIJJIEFC RG:Z:HiMom.1
-HiMom:1:1101:1197:2200 141 * 0 0 * * 0 0 ATATTCCACTGGAACCACAGAACCC @@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1308:2153 589 * 0 0 * * 0 0 TTTTGGAAGAGACCTCAATTACTGT ???DDDDD?:22AE:A2<3,AF?3A RG:Z:HiMom.1
-HiMom:1:1101:1308:2153 653 * 0 0 * * 0 0 TCTGTAAGGTAATCCCCGCATGTGT 1?1=4===AFFDFFGFDGFB at CFB: RG:Z:HiMom.1
-HiMom:1:1101:1452:2132 77 * 0 0 * * 0 0 .CGTCCTGGAAAACGGGGCGCGGCT #1=BDBDDFHHHHF at FHDHIGIIII RG:Z:HiMom.1
-HiMom:1:1101:1452:2132 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1150:2161 77 * 0 0 * * 0 0 AAGTCACCTAATATCTTTTTTTTTT @@<??;?D?CFD,A4CDDHFBIIID RG:Z:HiMom.1
-HiMom:1:1201:1150:2161 141 * 0 0 * * 0 0 TTCTCACTACTGTGATTGTGCCACT @C at FFFFFGHHHHGIIIICEHCFGH RG:Z:HiMom.1
-HiMom:1:2101:1240:2197 589 * 0 0 * * 0 0 ATAAAACATAGCAATATTTTCCTAT ######################### RG:Z:HiMom.1
-HiMom:1:2101:1240:2197 653 * 0 0 * * 0 0 ACTGGAGATCCTTGTTACATGCCCA ??+++A:DD?:ADEE@::C4:C<E: RG:Z:HiMom.1
-HiMom:1:2101:1336:2109 77 * 0 0 * * 0 0 .ACTATCAGGATCGTGGCTATTTTG #1BDDFFFHHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1336:2109 141 * 0 0 * * 0 0 AGACCAGAACAGCTCCAGGTGCTCC CCCFFFFFHHHHHJJJJJJCGHIJJ RG:Z:HiMom.1
-HiMom:1:2101:1427:2081 77 * 0 0 * * 0 0 .CGAGTGCCTAGTGGGCCACTTTTG #4=DDBDFHHHHFHIJJJJIJJJJI RG:Z:HiMom.1
-HiMom:1:2101:1427:2081 141 * 0 0 * * 0 0 CCGACTTCCATGGCCACCGTCCTGC CCCFFFFFHHHHHJJJIIGFIIJJI RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAAAATT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAAAATT.sam
deleted file mode 100644
index 042986f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAAAATT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACAAAATT LB:LN_ACAAAATT SM:SA_ACAAAATT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam
deleted file mode 100644
index 8d8481d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAGGTAT.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACAGGTAT LB:LN_ACAGGTAT SM:SA_ACAGGTAT CN:BI
-HiMom:1:1101:1236:2121 77 * 0 0 * * 0 0 .GGTGCTTCATATCCCTCTAGAGGA #1=BDDFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1236:2121 141 * 0 0 * * 0 0 TTGCGCTTACTTTGTAGCCTTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1341:2116 77 * 0 0 * * 0 0 .AGAAGCCCCAGGAGGAAGACAGTC #1=DDFFFHHHHHHHJIIJJJJJGI RG:Z:HiMom.1
-HiMom:1:1201:1341:2116 141 * 0 0 * * 0 0 ATAACAGCGAGACTGGCAACTTAAA ######################### RG:Z:HiMom.1
-HiMom:1:2101:1063:2206 77 * 0 0 * * 0 0 TCCTATTCGCCTACACAATTCTCCG CCCFFFFFHHHHHJJJJJJJHJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1063:2206 141 * 0 0 * * 0 0 .TGCTAGGATGAGGATGGATAGTAA #1=DDDFFHHHHHJHIIJHIIIHHJ RG:Z:HiMom.1
-HiMom:1:2101:1325:2083 77 * 0 0 * * 0 0 .CAGAAGAAAGGGCCTTGTCGGAGG #1=DDDDDHHFHDGI at EEHG:?FA8 RG:Z:HiMom.1
-HiMom:1:2101:1325:2083 141 * 0 0 * * 0 0 TGTGCTCTTCCGATCTGGAGAAAAA ######################### RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam
deleted file mode 100644
index 805405f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACAGTTGA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACAGTTGA LB:LN_ACAGTTGA SM:SA_ACAGTTGA CN:BI
-HiMom:1:2101:1048:2238 77 * 0 0 * * 0 0 .CTGCCGTGTCCTGACTTCTGGAAT #1:B?ADDACF<DCG;EG<FHH at CE RG:Z:HiMom.1
-HiMom:1:2101:1048:2238 141 * 0 0 * * 0 0 .GTCACATCGTTGAAGCACTGGATC #11ADDDB<CFFHCHGDBHGIIIII RG:Z:HiMom.1
-HiMom:1:2101:1216:2193 77 * 0 0 * * 0 0 TTTTCTTGGCCTCTGTTTTTTTTTT BCCFDFFFHHFFHJIGIJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1216:2193 141 * 0 0 * * 0 0 AGGCATGACACTGCATTTTAAATAC @@@DDDDDHFFHHGGDFHFHIIHGG RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACCAGTTG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACCAGTTG.sam
deleted file mode 100644
index ff3130b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACCAGTTG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACCAGTTG LB:LN_ACCAGTTG SM:SA_ACCAGTTG CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACGAAATC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACGAAATC.sam
deleted file mode 100644
index a525086..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACGAAATC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACGAAATC LB:LN_ACGAAATC SM:SA_ACGAAATC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam
deleted file mode 100644
index 9d4aada..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTAAGAC.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACTAAGAC LB:LN_ACTAAGAC SM:SA_ACTAAGAC CN:BI
-HiMom:1:1101:1259:2152 77 * 0 0 * * 0 0 CACCTATAATCCCAGCTACTCCAGA CCCFFFFFHHHHHJJJJJJIJJJIJ RG:Z:HiMom.1
-HiMom:1:1101:1259:2152 141 * 0 0 * * 0 0 ATTTTTATATTTTTTTAGACATAGG CCCFFFFFGHHHHJJJJIGIIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1261:2127 589 * 0 0 * * 0 0 .TGAAATCTGGATAGGCTGGAGTTA #0-@@@################### RG:Z:HiMom.1
-HiMom:1:1101:1261:2127 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHGHHHJJIFDDDDDDDD RG:Z:HiMom.1
-HiMom:1:2101:1021:2209 77 * 0 0 * * 0 0 .GGCCCCACCCTCCTCCAGCACGTC #1=DDFFFHHHHHJJJJJJHIIHFH RG:Z:HiMom.1
-HiMom:1:2101:1021:2209 141 * 0 0 * * 0 0 ..GGAAGGCTGCTAGCTGGCCAGAG ##08@>??@@??@?????????>?@ RG:Z:HiMom.1
-HiMom:1:2101:1262:2128 589 * 0 0 * * 0 0 AGCAGAAGGGCAAAAGCTGGCTTGA 9;<@:@################### RG:Z:HiMom.1
-HiMom:1:2101:1262:2128 653 * 0 0 * * 0 0 TCTTGTGGTAACTTTTCTGACACCT -(---9@;@?:8>?4:>?@###### RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTGTACC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTGTACC.sam
deleted file mode 100644
index 97f5e52..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTGTACC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACTGTACC LB:LN_ACTGTACC SM:SA_ACTGTACC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTGTATC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTGTATC.sam
deleted file mode 100644
index a65e0b6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ACTGTATC.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACTGTATC LB:LN_ACTGTATC SM:SA_ACTGTATC CN:BI
-HiMom:1:1201:1458:2109 77 * 0 0 * * 0 0 .GAGACCATAGAGCGGATGCTTTCA #1=DDDFFHHGHGIJJIGIIJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1458:2109 141 * 0 0 * * 0 0 GATACGAACACACAAGAACTTTTTT CCCFFFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
-HiMom:1:2101:1105:2131 77 * 0 0 * * 0 0 TTGGAACACAGCGGGAATCACAGCA CCCFFFFFHHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1105:2131 141 * 0 0 * * 0 0 CAGCAGCAGCAACAGCAGAAACATG CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1349:2084 77 * 0 0 * * 0 0 .CAAGTAGCAGTGTCACGCCTTAGC #1=DDBDDADFDDBEH at HC=CEGG@ RG:Z:HiMom.1
-HiMom:1:2101:1349:2084 141 * 0 0 * * 0 0 AGTCTGAATCATTGGTGTCTGAAGA <5;??=>=>>?############## RG:Z:HiMom.1
-HiMom:1:2101:1365:2094 77 * 0 0 * * 0 0 .AAGGTGAAGGCCGGCGCGCTCGCC #1=BDDDFFHHHHJGGGIGFIHIIJ RG:Z:HiMom.1
-HiMom:1:2101:1365:2094 141 * 0 0 * * 0 0 GCTCTTCCGATCTTGTGCTCTTCCG CCCFFFFDHFHHGJJIIJIJJIHII RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGAAAAGA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AGAAAAGA.sam
deleted file mode 100644
index 2c9984e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGAAAAGA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGAAAAGA LB:LN_AGAAAAGA SM:SA_AGAAAAGA CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGCATGGA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AGCATGGA.sam
deleted file mode 100644
index 3eee1bc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGCATGGA.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGCATGGA LB:LN_AGCATGGA SM:SA_AGCATGGA CN:BI
-HiMom:1:1101:1406:2222 77 * 0 0 * * 0 0 CTCCCCCCGGGCTGAACCAGGGTAC CCCFFDDDDHDFHIIIIIIIII9DG RG:Z:HiMom.1
-HiMom:1:1101:1406:2222 141 * 0 0 * * 0 0 GGCTGGACTCCCCTGGTTCTGGGCA ;?@DDDBD?FHDFGIIIGIGHHIII RG:Z:HiMom.1
-HiMom:1:1201:1291:2158 77 * 0 0 * * 0 0 AGAAGGGGAAAGCCTTCATCTTGGC BCBFFFFFHHHHHJJJJJIIFIJIJ RG:Z:HiMom.1
-HiMom:1:1201:1291:2158 141 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGATGGGC @CCFFFDD?FHHFGEHHIIDHIIII RG:Z:HiMom.1
-HiMom:1:2101:1370:2116 77 * 0 0 * * 0 0 .TGGTGGTCCATAGAGATTTGAAAC #1:4BD7DACF?FCA:4+<ACHIIH RG:Z:HiMom.1
-HiMom:1:2101:1370:2116 141 * 0 0 * * 0 0 CACCATCTGACATCATGTTTGAAAG @@@DFFFDFFHDHIGBHHII<HEDB RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGGTAAGG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AGGTAAGG.sam
deleted file mode 100644
index f9c4fae..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGGTAAGG.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGGTAAGG LB:LN_AGGTAAGG SM:SA_AGGTAAGG CN:BI
-HiMom:1:1101:1263:2236 589 * 0 0 * * 0 0 CTTTGAAGACATTGTGAGATCTGTA <==A<42 at C+A4A?,2A@=4 at 7A?? RG:Z:HiMom.1
-HiMom:1:1101:1263:2236 653 * 0 0 * * 0 0 AGTTCTTCAGTAATTTTAGTACTGC ######################### RG:Z:HiMom.1
-HiMom:1:2101:1054:2162 77 * 0 0 * * 0 0 .CCAGGTGTCTTCCCGGGCCCTGCC #1=DDFBDFHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1054:2162 141 * 0 0 * * 0 0 .GGACAGGGAAGGGAAGGAAGGGTG #4=DDFDFHHHHHJIJIIDHHGICG RG:Z:HiMom.1
-HiMom:1:2101:1163:2203 77 * 0 0 * * 0 0 TCTCCATGTGAAACAAGCAAAAAGA CCCFFFFFHHHHGJJJIJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1163:2203 141 * 0 0 * * 0 0 TTGGTTCACTTATGTATTTATGAAT @CCFDFFFHHHHHJHIIJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1249:2231 77 * 0 0 * * 0 0 GTTATTGATAGGATACTGTACAAAC @BCFFFFDHHHHFIJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1249:2231 141 * 0 0 * * 0 0 TCTCTCGGCCTTCCACTCTAGCATA @@@FFFFFFHHGHIJJJGJIIJHIJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam
deleted file mode 100644
index d722d26..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/AGGTCGCA.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGGTCGCA LB:LN_AGGTCGCA SM:SA_AGGTCGCA CN:BI
-HiMom:1:1101:1150:2228 77 * 0 0 * * 0 0 GCTACTCAGTAGACAGTCCCACCCT @@CADDDDFCFHHIIIIGGIIGGGI RG:Z:HiMom.1
-HiMom:1:1101:1150:2228 141 * 0 0 * * 0 0 ATGGGAGGCGATTCCTAGGGGGTTG 8?=DD8;@BH6DHD<FGGGEIGHIG RG:Z:HiMom.1
-HiMom:1:1101:1491:2120 77 * 0 0 * * 0 0 .GGCAGGTGCCCCCACTTGACTCTC #1?DFFFFGHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1491:2120 141 * 0 0 * * 0 0 GGCCAGGCTGAACTTCTGAGCTGCT CCCFFFFFHHHGHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1190:2194 77 * 0 0 * * 0 0 AACCTGGCGCTAAACCATTCGTAGA CCCFFFFFHHHHHJJJJJJJJIJJJ RG:Z:HiMom.1
-HiMom:1:1201:1190:2194 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1188:2195 77 * 0 0 * * 0 0 TTAGACCGTCGTGAGACAGGTTAGT @CCFFFFFHHHHHJJJJJIIEHIJH RG:Z:HiMom.1
-HiMom:1:2101:1188:2195 141 * 0 0 * * 0 0 GCACATACACCAAATGTCTGAACCT CCCFFFFFHHHHHJJJHIJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam
deleted file mode 100644
index 5dc56b9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ATTATCAA.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ATTATCAA LB:LN_ATTATCAA SM:SA_ATTATCAA CN:BI
-HiMom:1:1101:1100:2207 77 * 0 0 * * 0 0 ACGACAGACGTTCTTTCTTTGCTGC CCCFFFFFHHFHHJIJJJJJHIJJH RG:Z:HiMom.1
-HiMom:1:1101:1100:2207 141 * 0 0 * * 0 0 AGGCT............G....... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1157:2135 77 * 0 0 * * 0 0 .GGACATTGTAATCATTTCTTACAA #1=DD?DDHHHHHGGHIIIIIIIII RG:Z:HiMom.1
-HiMom:1:1101:1157:2135 141 * 0 0 * * 0 0 TTTAAAGTCTTAATCAAAGATGATA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1269:2170 77 * 0 0 * * 0 0 ACAGTGTGGGAGGCAGACGAAGAGA @@@DDDDDFA:C at EGA?FD<FFHII RG:Z:HiMom.1
-HiMom:1:1101:1269:2170 141 * 0 0 * * 0 0 TTCCAAGCCTGTGCTTTAAGGAAAA @@<ADBDBDF8DDCFH at GIE@@GGH RG:Z:HiMom.1
-HiMom:1:1201:1018:2217 589 * 0 0 * * 0 0 .TTTCTCTGGGCGCAAAGATGTTCA #07;8=8<<99(:=@@/@7>>6=?> RG:Z:HiMom.1
-HiMom:1:1201:1018:2217 653 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
-HiMom:1:1201:1118:2198 77 * 0 0 * * 0 0 CAAGTGTACAGGATTAGACTGGGTT BCCFDEBDHHHHHIJJJGIIIJJGH RG:Z:HiMom.1
-HiMom:1:1201:1118:2198 141 * 0 0 * * 0 0 AATAAACTTTATTAAAGCAGTTAAA C at CFFFFFHDHHHGIIIJJJIJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/ATTCCTCT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/ATTCCTCT.sam
deleted file mode 100644
index 95b97b9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/ATTCCTCT.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ATTCCTCT LB:LN_ATTCCTCT SM:SA_ATTCCTCT CN:BI
-HiMom:1:1101:1309:2210 77 * 0 0 * * 0 0 ACACCAACCACCCAACTATCTATAA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1309:2210 141 * 0 0 * * 0 0 AGTGGGCTAGGGCATTTTTAATCTT @@?DFFDFHHHDFHJIJJIJGIIIJ RG:Z:HiMom.1
-HiMom:1:1201:1018:2133 77 * 0 0 * * 0 0 .AAAACTTGAGGATGCTATGCAAGC #1:B:ADDDDDDDEEAEBF9FFEBF RG:Z:HiMom.1
-HiMom:1:1201:1018:2133 141 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
-HiMom:1:1201:1073:2225 77 * 0 0 * * 0 0 GGGGCTGAGACCTTTGCTGATGGTG @@@FFFFFHHHGHJJJJJIIIGICH RG:Z:HiMom.1
-HiMom:1:1201:1073:2225 141 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGGAGGGT @BBDFFFFHHHHHJJJJJJJJJJJ: RG:Z:HiMom.1
-HiMom:1:1201:1242:2207 77 * 0 0 * * 0 0 ATGGCAAAGTGGTGTCTGAGACCAA BCCFFFFFGHHHHHIIIJFHIJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1242:2207 141 * 0 0 * * 0 0 ATCTTTTATTGGCCTCCTGCTCCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAACTCTC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CAACTCTC.sam
deleted file mode 100644
index c2a8308..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAACTCTC.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAACTCTC LB:LN_CAACTCTC SM:SA_CAACTCTC CN:BI
-HiMom:1:1101:1140:2120 77 * 0 0 * * 0 0 .CCCCAACATTCTAATTATGCCTCA #1:BDFFDHFFDFIJJJIIJIIIII RG:Z:HiMom.1
-HiMom:1:1101:1140:2120 141 * 0 0 * * 0 0 TTTTTTTTTTTTTAACTTTGCAAAT @@@DDDDDHHHHFB at 9FHI@BFH@@ RG:Z:HiMom.1
-HiMom:1:1101:1328:2225 77 * 0 0 * * 0 0 GAAATGCATCTGTCTTAGAAACTGG ??@=BDDDFDD<<,<2:C<F:FFEA RG:Z:HiMom.1
-HiMom:1:1101:1328:2225 141 * 0 0 * * 0 0 AGGAAATTAGGACTTACCTGACATA ######################### RG:Z:HiMom.1
-HiMom:1:1201:1127:2112 589 * 0 0 * * 0 0 .GTCAAGGATGTTCGTCGTGGCAAC #1=BDDDDDDDDDID<AE?@<CEEE RG:Z:HiMom.1
-HiMom:1:1201:1127:2112 653 * 0 0 * * 0 0 TAATCACCTGAGCAGTGAAGCCAGC @<@?BDDDHD?FDBHI?AHGGGDFH RG:Z:HiMom.1
-HiMom:1:1201:1452:2143 77 * 0 0 * * 0 0 TATCCCCTCTAAGACGGACCTGGGT CCCFFFFFHHHHHJJIIIJJJJJJG RG:Z:HiMom.1
-HiMom:1:1201:1452:2143 141 * 0 0 * * 0 0 TTTTAGTCTTAGCATTTACTTTCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1486:2146 589 * 0 0 * * 0 0 GTTCTCTGTCCCCAGGTCCTGTCTC ===A7<7222<<=C=?+<7>@?ACB RG:Z:HiMom.1
-HiMom:1:1201:1486:2146 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTGGGC <<<@??@??@???????######## RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAATAGAC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CAATAGAC.sam
deleted file mode 100644
index a69b8ed..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAATAGAC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAATAGAC LB:LN_CAATAGAC SM:SA_CAATAGAC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam
deleted file mode 100644
index 31a220d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAATAGTC.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAATAGTC LB:LN_CAATAGTC SM:SA_CAATAGTC CN:BI
-HiMom:1:1101:1316:2126 77 * 0 0 * * 0 0 .AAAAAAAAAAAAAAAAAAAAAAAA #1BDFFFFHHHHHJJJJFDDDDDDD RG:Z:HiMom.1 XN:i:1
-HiMom:1:1101:1316:2126 141 * 0 0 * * 0 0 TCTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJJHFDDDDDD RG:Z:HiMom.1
-HiMom:1:1101:1399:2128 77 * 0 0 * * 0 0 .TGCCCTTCGTCCTGGGAAACGGGG #1BDFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1399:2128 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHIJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1054:2151 77 * 0 0 * * 0 0 .TAGTGCTGGGCACTAAGTAATACC #4=DDDFFHHHHHJJJJJHIJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1054:2151 141 * 0 0 * * 0 0 GTCAGGCACTGAGAATATATGGGTG CBCFFFFFHHHHHJJJJJJJJJJEG RG:Z:HiMom.1
-HiMom:1:1201:1345:2181 77 * 0 0 * * 0 0 GGATAATCCTATTTATTACCTCAGA BBBDDFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
-HiMom:1:1201:1345:2181 141 * 0 0 * * 0 0 ATACGGATGTGTTTAGGAGTGGGAC CCCFFFFFHHHHHIIJJHJFHIJIJ RG:Z:HiMom.1
-HiMom:1:1201:1392:2184 77 * 0 0 * * 0 0 TTTCAGATTGGTCATTGTTAGTGTA ??@BDDDEHBHADHHIIEHDHFHFF RG:Z:HiMom.1
-HiMom:1:1201:1392:2184 141 * 0 0 * * 0 0 ATCTTTATTCATTTGTATGATCTTA @@BFFFFFHFFHFHIHIIJIJJJJI RG:Z:HiMom.1
-HiMom:1:2101:1172:2152 589 * 0 0 * * 0 0 AACACGGACAAAGGAGTCTAACACG <<<??8@@################# RG:Z:HiMom.1
-HiMom:1:2101:1172:2152 653 * 0 0 * * 0 0 ATCGTTTCTGGGGACTAGTGAGGCG ######################### RG:Z:HiMom.1
-HiMom:1:2101:1491:2093 77 * 0 0 * * 0 0 .CTATGCCGATCGGGTGTCCGCACT #1=DDDDDHHFHHIIEHHHBGHGII RG:Z:HiMom.1
-HiMom:1:2101:1491:2093 141 * 0 0 * * 0 0 AGAGACGGGGTCTCGCTATGTTGCC BCCDFFFFHHHHHJIIJJJJIJIJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAGCGGAT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CAGCGGAT.sam
deleted file mode 100644
index 0065e69..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAGCGGAT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAGCGGAT LB:LN_CAGCGGAT SM:SA_CAGCGGAT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam
deleted file mode 100644
index 01b4315..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CAGCGGTA.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAGCGGTA LB:LN_CAGCGGTA SM:SA_CAGCGGTA CN:BI
-HiMom:1:1101:1420:2213 77 * 0 0 * * 0 0 TACCTGGTTGATCCTGCCAGTAGCA @@CFFFFDDHHGHJGGHIJJIHGBH RG:Z:HiMom.1
-HiMom:1:1101:1420:2213 141 * 0 0 * * 0 0 TTCACTGTACCGGCCGTGCGTACTT @CCFFFFDHHHFGIJJJJJJGHIGG RG:Z:HiMom.1
-HiMom:1:1201:1364:2113 77 * 0 0 * * 0 0 .CACTCATTTTCTTATGTGGGATAT #1=DDFDFHHHHHIJJIFHIIHHHI RG:Z:HiMom.1
-HiMom:1:1201:1364:2113 141 * 0 0 * * 0 0 TAAAGAGAGCCAGTGGAGTTACGAC ######################### RG:Z:HiMom.1
-HiMom:1:2101:1072:2170 77 * 0 0 * * 0 0 ATCACCGCACTCATTTCCCGCTTCC CCCFFFFFHHHACEEGHIIBHIIII RG:Z:HiMom.1
-HiMom:1:2101:1072:2170 141 * 0 0 * * 0 0 .GGGGAGACAGAGAGGATCAGAAGT #4=BDDFDHHDFHEGFEGGIJIIIG RG:Z:HiMom.1
-HiMom:1:2101:1123:2095 77 * 0 0 * * 0 0 .TGGACAACATGTTCGAGAGCTACA #1=BBDDDFFFFDGFGIG?F;HHFI RG:Z:HiMom.1
-HiMom:1:2101:1123:2095 141 * 0 0 * * 0 0 TCCGCCTCCAGCTTCAGCTTCTCCT @@@FDDFFHHHHHJHGGJIJJJEHH RG:Z:HiMom.1
-HiMom:1:2101:1151:2236 589 * 0 0 * * 0 0 TTAAAGAGGTTCAGGGATGCAGAGT ######################### RG:Z:HiMom.1
-HiMom:1:2101:1151:2236 653 * 0 0 * * 0 0 TTTGAAGCCTCTTTATCCTTGGCAT ######################### RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CCAACATT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CCAACATT.sam
deleted file mode 100644
index 5e5edad..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CCAACATT.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCAACATT LB:LN_CCAACATT SM:SA_CCAACATT CN:BI
-HiMom:1:1101:1083:2193 77 * 0 0 * * 0 0 TTCTACCTCACCTTAGGGAGAAGAC @@@DDBDDD>F><C<4CG?EHGHIG RG:Z:HiMom.1
-HiMom:1:1101:1083:2193 141 * 0 0 * * 0 0 AGGCT.................... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1175:2197 77 * 0 0 * * 0 0 CCCCTGAGGACACCATCCCACTCCA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1175:2197 141 * 0 0 * * 0 0 AAGAGCTGGGGAACATCCAGAAAGG BC at FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1138:2227 589 * 0 0 * * 0 0 GCTGACACAATCTCTTCCGCCTGGT ######################### RG:Z:HiMom.1
-HiMom:1:1201:1138:2227 653 * 0 0 * * 0 0 GACAAATATAGGAAATAGAAGCTAT =1=A=AAA,2?4>7C<<4<A+3<AB RG:Z:HiMom.1
-HiMom:1:1201:1260:2165 77 * 0 0 * * 0 0 GGACACGGACAGGATTGACAGATTG BCBFFFFFHHHHHHIIJHIIIFHIJ RG:Z:HiMom.1
-HiMom:1:1201:1260:2165 141 * 0 0 * * 0 0 ATCTGATCTAAGTTGGGGGACGCCG @@@FFDFFHHHHHJJJIJIIIGIJJ RG:Z:HiMom.1
-HiMom:1:1201:1281:2133 77 * 0 0 * * 0 0 .GGAAATCCAGAAAACATAGAAGAT #1=DDFFFHHHHHIJJJJJJJJIJJ RG:Z:HiMom.1
-HiMom:1:1201:1281:2133 141 * 0 0 * * 0 0 GCAACAAAATTTCATATGACTTAGC CCCFFFFFHHHHHJJIIIHICHIIJ RG:Z:HiMom.1
-HiMom:1:1201:1331:2162 77 * 0 0 * * 0 0 ACGCTCGGCTAATTTTTGTATTTTT @CCFFFDFHHHHHIJJJJHIJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1331:2162 141 * 0 0 * * 0 0 TAATCCCAGTACTTTGGGAGGCCAA CCCFFFFFHHHHHJJJJIJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1186:2093 77 * 0 0 * * 0 0 .CGACCATAAACGATGCCGACCGGC #4=DFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1186:2093 141 * 0 0 * * 0 0 AATGTTGGGAGGACAATGATGGAAA ######################### RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CCAGCACC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CCAGCACC.sam
deleted file mode 100644
index f3100fa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CCAGCACC.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCAGCACC LB:LN_CCAGCACC SM:SA_CCAGCACC CN:BI
-HiMom:1:1101:1212:2230 77 * 0 0 * * 0 0 TTTCTATTAGCTCTTAGTAAGATTA CCCFFFFFHHHHHJJJIJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1212:2230 141 * 0 0 * * 0 0 TTTTAGCTTTATTGGGGAGGGGGTG CCCFFFFFHHGHHJJJJGJJJJJDF RG:Z:HiMom.1
-HiMom:1:1201:1204:2228 77 * 0 0 * * 0 0 CCGATACGCTGAGTGTGGTTTGCGG CCCFFFFFHHHFHEGGHIHIJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1204:2228 141 * 0 0 * * 0 0 TCTTCTTGTCGATGAGGAACTTGGT @?@FFFFFDHHGHJIJJGHIIJJJH RG:Z:HiMom.1
-HiMom:1:2101:1100:2085 77 * 0 0 * * 0 0 .CACATGGATGAGGAGAATGAGGAT #1=DDFFFFHHHHJHIGIHHHIJEH RG:Z:HiMom.1
-HiMom:1:2101:1100:2085 141 * 0 0 * * 0 0 ATCTTGATCTCCTCCTTCTTGGCCT @@@DDDDDHHFHFEIIIIHHBAHBG RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CCATGCGT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CCATGCGT.sam
deleted file mode 100644
index 2f1cf36..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CCATGCGT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCATGCGT LB:LN_CCATGCGT SM:SA_CCATGCGT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CGCCTTCC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CGCCTTCC.sam
deleted file mode 100644
index 3c3b08b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CGCCTTCC.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CGCCTTCC LB:LN_CGCCTTCC SM:SA_CGCCTTCC CN:BI
-HiMom:1:1201:1122:2227 77 * 0 0 * * 0 0 AGAAGACGAGGCTGAGAGTGACATC @@@FFFFFHHHDHJGHGHCHHJJIJ RG:Z:HiMom.1
-HiMom:1:1201:1122:2227 141 * 0 0 * * 0 0 GTCATATAAGGCCCAGTCCAAGGAA @@@FFFFFHHHGGIJIGGIJFIJII RG:Z:HiMom.1
-HiMom:1:1201:1160:2109 77 * 0 0 * * 0 0 .AGAAGCCTTTGCACCCTGGGAGGA #1=DDDFFHHHHHJJJJJJJJIIJJ RG:Z:HiMom.1
-HiMom:1:1201:1160:2109 141 * 0 0 * * 0 0 ACATCCTTCCCATGCCACCAACTCG CCCFFFFFGHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam
deleted file mode 100644
index 8191da9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CGCTATGT.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CGCTATGT LB:LN_CGCTATGT SM:SA_CGCTATGT CN:BI
-HiMom:1:1101:1291:2150 77 * 0 0 * * 0 0 CGTGGGGAACCTGGCGCTAAACCAT @BBFFFFFHHHHHJJJJIJJJJJIJ RG:Z:HiMom.1
-HiMom:1:1101:1291:2150 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHFHHIJJJIIIGIJIJ RG:Z:HiMom.1
-HiMom:1:1101:1314:2233 77 * 0 0 * * 0 0 GTTTATTGGGGCATTCCTTATCCCA @??DDDDBDHF>FCHGGGBFAAED9 RG:Z:HiMom.1
-HiMom:1:1101:1314:2233 141 * 0 0 * * 0 0 AGGAAAGTTGGGCTGACCTGACAGA @@<DDD;=FBFADBCGDEH?F;FCG RG:Z:HiMom.1
-HiMom:1:1101:1441:2148 77 * 0 0 * * 0 0 ACTTTCACCGCTACACGACCGGGGG CCCFFFFFHGFFHIIFIHJIGGII> RG:Z:HiMom.1
-HiMom:1:1101:1441:2148 141 * 0 0 * * 0 0 TTTTGGCTCTAGAGGGGGTAGAGGG CCCFFFFFHHDFBHIIJJ1?FGHIJ RG:Z:HiMom.1
-HiMom:1:1201:1043:2246 77 * 0 0 * * 0 0 .TTCTCGGCTGTCATGTGCAACATT #1=DDBDFHHHDFFBHGHGHIIJEH RG:Z:HiMom.1
-HiMom:1:1201:1043:2246 141 * 0 0 * * 0 0 .GCATCATTTC..GCTTCTCTCTGT #0;@@??@=@>##22=;@??><@?? RG:Z:HiMom.1
-HiMom:1:1201:1134:2144 77 * 0 0 * * 0 0 TGCCAGGAAGTGTTTTTTCTGGGTC @CCFFEFFHHFFFGIJJJJJJJJGH RG:Z:HiMom.1
-HiMom:1:1201:1134:2144 141 * 0 0 * * 0 0 AGTGTGAGTAATGGTTGAGAGGTGG B@?DDDFFFHHGHJHHGFIHHIFGI RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTAACTCG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CTAACTCG.sam
deleted file mode 100644
index 1f8de56..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTAACTCG.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTAACTCG LB:LN_CTAACTCG SM:SA_CTAACTCG CN:BI
-HiMom:1:1101:1363:2138 77 * 0 0 * * 0 0 .GTCTGGCCTGCACAGACATCCTAC #1=DDFFFHHHHHJJJIJJIJJJIJ RG:Z:HiMom.1
-HiMom:1:1101:1363:2138 141 * 0 0 * * 0 0 GTTCTTAAACCTGTTAGAACTTCTG C@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1393:2143 77 * 0 0 * * 0 0 TGGTTGATCCTGCCAGTAGCATATG @@@ADADDFHFFDBHE?G at HIIIEE RG:Z:HiMom.1
-HiMom:1:1201:1393:2143 141 * 0 0 * * 0 0 GATAAATGCACGCATCCCCCCCGCG C at CFFFFFGGHHHHJJJJJJJJJJI RG:Z:HiMom.1
-HiMom:1:2101:1273:2119 589 * 0 0 * * 0 0 .AGATAAGAGTCCACACAGTTGAGT #11AAAAA<A?4=C=7?733<ACA3 RG:Z:HiMom.1
-HiMom:1:2101:1273:2119 653 * 0 0 * * 0 0 ATGATGGATCTTCTCTAACTTGTCA >=><AAAAA+2AA?CB4@@ABB3?A RG:Z:HiMom.1
-HiMom:1:2101:1414:2098 77 * 0 0 * * 0 0 .AGGACATCGATAAAGGCGAGGTGT #1=DDFFFHHHHHJJJJJJJJJHHG RG:Z:HiMom.1
-HiMom:1:2101:1414:2098 141 * 0 0 * * 0 0 TTGGGGCCGGTGCCGTCGGGCCCAA CCCFFFFFHHHHGJJIJJJJJJJIJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTATGCGC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CTATGCGC.sam
deleted file mode 100644
index ee4c13b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTATGCGC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTATGCGC LB:LN_CTATGCGC SM:SA_CTATGCGC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTATGCGT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CTATGCGT.sam
deleted file mode 100644
index cc86630..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTATGCGT.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTATGCGT LB:LN_CTATGCGT SM:SA_CTATGCGT CN:BI
-HiMom:1:1201:1083:2121 77 * 0 0 * * 0 0 .AGAACTGGCGCTGCGGGATGAACC #1=BDFFFHHHHHJJJJJHIJIJJJ RG:Z:HiMom.1
-HiMom:1:1201:1083:2121 141 * 0 0 * * 0 0 ACACACAACACCACCGCCCTCCCCC ######################### RG:Z:HiMom.1
-HiMom:1:1201:1185:2143 77 * 0 0 * * 0 0 ATCTGCCTGGTTCGGCCCGCCTGCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1185:2143 141 * 0 0 * * 0 0 GCTGAAGGCCCGTGGGCCAGAGGTG @CCFFFFFHHHHHJJJJJJJJJJHI RG:Z:HiMom.1
-HiMom:1:1201:1219:2115 77 * 0 0 * * 0 0 .TATAGTGGAGGCCGGAGCAGGAAC #1:DABADHHHFHIIIGGHGIIIII RG:Z:HiMom.1
-HiMom:1:1201:1219:2115 141 * 0 0 * * 0 0 TGGGAGTAGTTCCCTGCTAAGGGAG ???DBDBDADDDDIEID:AFFD:?8 RG:Z:HiMom.1
-HiMom:1:1201:1472:2121 589 * 0 0 * * 0 0 .TAAAGTGTGAACAAGGAAGGTCAT #07>@<9=@################ RG:Z:HiMom.1
-HiMom:1:1201:1472:2121 653 * 0 0 * * 0 0 GTGTGCTCTTCCGATCTGGAGGATG =+=??A4A==A at 7A<?######### RG:Z:HiMom.1
-HiMom:1:2101:1013:2146 77 * 0 0 * * 0 0 .ACACTGCTGCAGATGACAAGCAGC #4BDFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1013:2146 141 * 0 0 * * 0 0 ....CGCTAGAACCAACTTATTCAT ####24=?@@?@?@@?@@@@@@?@@ RG:Z:HiMom.1
-HiMom:1:2101:1231:2208 77 * 0 0 * * 0 0 ACGCCGCAAGTCAGAGCCCCCCAGA @@@DDDFFFFB:DBBEBEFDHBDDB RG:Z:HiMom.1
-HiMom:1:2101:1231:2208 141 * 0 0 * * 0 0 AGCCAGTGTTGGTGTGTTGACTGTT @@;1ADABCF;BF<AACGCHEBHC< RG:Z:HiMom.1
-HiMom:1:2101:1233:2133 589 * 0 0 * * 0 0 GAGAGAAGCACTCTTGAGCGGGATA 0;(@((@)2@############### RG:Z:HiMom.1
-HiMom:1:2101:1233:2133 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFGHHHHJJJFDDDDDDDD RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTGCGGAT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CTGCGGAT.sam
deleted file mode 100644
index d518e57..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTGCGGAT.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTGCGGAT LB:LN_CTGCGGAT SM:SA_CTGCGGAT CN:BI
-HiMom:1:2101:1102:2221 77 * 0 0 * * 0 0 TTTCATCTTATTTCATTGGTTTATA CCCFFFFFHHHHHJIJJJJIJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1102:2221 141 * 0 0 * * 0 0 ATAACTGACTCTACTCAGTAGATTA CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1126:2082 77 * 0 0 * * 0 0 .GTTTTAGGGGTGCGCAGGAGTCAA #11=A=DD?DF at D@CCGHIEFH at BG RG:Z:HiMom.1
-HiMom:1:2101:1126:2082 141 * 0 0 * * 0 0 TCTCTTTCCACCTTGGTCACCTTCC @C at DDDFFHHHHHJEGGIHHIJGIH RG:Z:HiMom.1
-HiMom:1:2101:1216:2172 77 * 0 0 * * 0 0 TTTCTTCGCAGGATTTTTCTGAGCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1216:2172 141 * 0 0 * * 0 0 GGACTTCTAGGGGATTTAGCGGGGT CCCFFFFFHHHHHJJJJJJJJJJJD RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam
deleted file mode 100644
index d24cc80..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/CTGTAATC.sam
+++ /dev/null
@@ -1,14 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTGTAATC LB:LN_CTGTAATC SM:SA_CTGTAATC CN:BI
-HiMom:1:1101:1403:2194 77 * 0 0 * * 0 0 CTAAACAGAGAGAAGGTTTCTCTTT CCCFFFFFHHHHHJJJFHIJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1403:2194 141 * 0 0 * * 0 0 ACATGGTGAAACCCTGTCTCTACTA CCCFFFDDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1045:2105 589 * 0 0 * * 0 0 .TAAAGAGAAATCAAGAATACTATT #-4@?(@)@@############### RG:Z:HiMom.1
-HiMom:1:1201:1045:2105 653 * 0 0 * * 0 0 .TTTTTTTTTT..TTTTTTTTTTTT #0;@@@@@@@?##0:????????=< RG:Z:HiMom.1
-HiMom:1:1201:1483:2126 589 * 0 0 * * 0 0 .TGATAAGGTGTTGCTATGTTACCC #1:D?DDDDA??2:<CC4:AEDF>? RG:Z:HiMom.1
-HiMom:1:1201:1483:2126 653 * 0 0 * * 0 0 GCATGCAGCTGGGTGCTGTGATGCA @@@DDDBB<DD8F<<CGG?AA?A<F RG:Z:HiMom.1
-HiMom:1:2101:1011:2102 77 * 0 0 * * 0 0 .AAACAAAACTGTAGAACTGTGTAT #1=DDFFFHHHHHJJIJJJIHHHJJ RG:Z:HiMom.1
-HiMom:1:2101:1011:2102 141 * 0 0 * * 0 0 .....TCACACATAATTTTAAAATT #####22@?@@??@@@@@??@@@@@ RG:Z:HiMom.1
-HiMom:1:2101:1245:2154 77 * 0 0 * * 0 0 TCGTTAAGTATATTCTTAGGTATTT CCCFFDFFFHFHHIIJJJJJFJJJI RG:Z:HiMom.1
-HiMom:1:2101:1245:2154 141 * 0 0 * * 0 0 ACCAATCAGTAGCACCACTATACAC CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1386:2105 77 * 0 0 * * 0 0 .TACTAAAGAAAAAGTTGAAGAACT #1=DDDFFHHHHHJJGHIJJJJIJJ RG:Z:HiMom.1
-HiMom:1:2101:1386:2105 141 * 0 0 * * 0 0 AGGAATTATTCTTCTGCCATAAGGT B@@DDFFFHGFHHIJJJJJGIGIJH RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GAAAAAAA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GAAAAAAA.sam
deleted file mode 100644
index a05c01a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GAAAAAAA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GAAAAAAA LB:LN_GAAAAAAA SM:SA_GAAAAAAA CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GAACGAT..sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GAACGAT..sam
deleted file mode 100644
index 8142ba9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GAACGAT..sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GAACGAT. LB:LN_GAACGAT. SM:SA_GAACGAT. CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GAAGGAAG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GAAGGAAG.sam
deleted file mode 100644
index 5fa6e1f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GAAGGAAG.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GAAGGAAG LB:LN_GAAGGAAG SM:SA_GAAGGAAG CN:BI
-HiMom:1:1101:1338:2175 77 * 0 0 * * 0 0 CCCACCTTCCGGCGGCCGAAGACAC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1338:2175 141 * 0 0 * * 0 0 GCTTGTTGGCTTTAACATCCACAAT CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1028:2202 77 * 0 0 * * 0 0 .TCCTGGGAAACGGGGCGCGGCTGG #4BDDDFFHHHHHIJIIJJJJJJIJ RG:Z:HiMom.1
-HiMom:1:1201:1028:2202 141 * 0 0 * * 0 0 ..AAAC.C.T.......GG..TG.. ##42@?################### RG:Z:HiMom.1
-HiMom:1:2101:1084:2188 77 * 0 0 * * 0 0 TTGCTGCATGGGTTAATTGAGAATA CCCFFFFFHHHHFHHIIJJIJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1084:2188 141 * 0 0 * * 0 0 TACAAGGTCAAAATCAGCAACAAGT CCCFFFFDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam
deleted file mode 100644
index 9affca8..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCAGGA.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GACCAGGA LB:LN_GACCAGGA SM:SA_GACCAGGA CN:BI
-HiMom:1:1101:1089:2172 77 * 0 0 * * 0 0 TTCCAGCATGCGGTTTAAGTAGGAT @CCFDFDBDFBF:<CEBHAFHHICH RG:Z:HiMom.1
-HiMom:1:1101:1089:2172 141 * 0 0 * * 0 0 TCCGG.................... :<<??#################### RG:Z:HiMom.1
-HiMom:1:1101:1347:2149 77 * 0 0 * * 0 0 GAGCAGATCGGAAGAGCACAGATCG @@@FFDDDHHHHHIJJBGGHJIHEG RG:Z:HiMom.1
-HiMom:1:1101:1347:2149 141 * 0 0 * * 0 0 GCTCTTCCGATCTGTGCTCTTCCGA CCCFFFFFDFHHFIJDGIGGHGIGH RG:Z:HiMom.1
-HiMom:1:1201:1095:2146 77 * 0 0 * * 0 0 GCTGAGTCATGTAGTAAGCCTGTGC BB at FDDDFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1095:2146 141 * 0 0 * * 0 0 ACTGACAACACCAAATGCTGCTAAG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1123:2161 589 * 0 0 * * 0 0 CACTAACTCCTGACCTCAAATAATC ?7?=DD?DD+CDBE>E at EEF@+<CF RG:Z:HiMom.1
-HiMom:1:1201:1123:2161 653 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGCATACA ===AAAA8AAAA<AAA)@CBA9>A# RG:Z:HiMom.1
-HiMom:1:1201:1439:2156 77 * 0 0 * * 0 0 AGCCGCGAGGTGCTGGCGGACTTCC :;1BDDDAA88A<?<E1C:D##### RG:Z:HiMom.1
-HiMom:1:1201:1439:2156 141 * 0 0 * * 0 0 GGAGATTATTTGCCTTGAAGTAAGC -;(22<>>@>8@>8;@######### RG:Z:HiMom.1
-HiMom:1:2101:1207:2084 589 * 0 0 * * 0 0 .TAGATGACCAAAACTTGCAGGGCA #1:A<?@A+7A=?CBCCBCCBAAAA RG:Z:HiMom.1
-HiMom:1:2101:1207:2084 653 * 0 0 * * 0 0 TCACCACTCTTCTGGGCATCCCCTG @@@DDEDFHHHHHIJIHHGHGGJJJ RG:Z:HiMom.1
-HiMom:1:2101:1312:2105 77 * 0 0 * * 0 0 .TTCCCTCAGGATAGCTGGCGCTCT #1=DDFFFGHGHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1312:2105 141 * 0 0 * * 0 0 GTTGAGAATAGGTTGAGATCGTTTC @CCFFFDFHHFHDHIJJJJJJJIJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCAGGC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCAGGC.sam
deleted file mode 100644
index d18d0dc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCAGGC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GACCAGGC LB:LN_GACCAGGC SM:SA_GACCAGGC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCGTTG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCGTTG.sam
deleted file mode 100644
index 126546f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCGTTG.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GACCGTTG LB:LN_GACCGTTG SM:SA_GACCGTTG CN:BI
-HiMom:1:1101:1218:2200 77 * 0 0 * * 0 0 GCACCGGAAGAGCACACAGATCGGA CCCFFFFDFHGHHJJIJIJJJJJJI RG:Z:HiMom.1
-HiMom:1:1101:1218:2200 141 * 0 0 * * 0 0 GCTCTTCCGATCTATCTGCTCGTCC (-(=34???3;@############# RG:Z:HiMom.1
-HiMom:1:1101:1257:2223 77 * 0 0 * * 0 0 TGTATTCGAGAGATCAAAGAGAGAG @@=DDBDD?FFHHEIDBDFCEDBAF RG:Z:HiMom.1
-HiMom:1:1101:1257:2223 141 * 0 0 * * 0 0 TGCTCTTCCGATCTTTTAGCAAAGC :?@DDBDDHFFHDGIGIIJJJGGGI RG:Z:HiMom.1
-HiMom:1:1201:1180:2119 77 * 0 0 * * 0 0 .TGAAAGATTTAGAGAGCTTACAAA #1=DDDDDHHHGHJJIIJJJJIJJI RG:Z:HiMom.1
-HiMom:1:1201:1180:2119 141 * 0 0 * * 0 0 GCTCTAAATTTTGCTTTTCTACAGC CCCFFFFFHHHHHJJJJIJIJJIJJ RG:Z:HiMom.1
-HiMom:1:2101:1036:2087 77 * 0 0 * * 0 0 .TGTAGTTTCTTTAGGCAAATTTGT #4=BDDDFHHHHHJJJJJJIIJJJI RG:Z:HiMom.1
-HiMom:1:2101:1036:2087 141 * 0 0 * * 0 0 .GTCCACTTACGAAGCAAATACTTT #4=DDFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCTAAC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCTAAC.sam
deleted file mode 100644
index 92d814b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GACCTAAC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GACCTAAC LB:LN_GACCTAAC SM:SA_GACCTAAC CN:BI
-HiMom:1:1101:1302:2244 77 * 0 0 * * 0 0 GGAAAAGACGGAAAGGTTCTATCTC @C at DFFFDFHHHHJIJHHIJJJJJI RG:Z:HiMom.1
-HiMom:1:1101:1302:2244 141 * 0 0 * * 0 0 TGAATACATATAACAAATGCAAAAA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GATATCCA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GATATCCA.sam
deleted file mode 100644
index 6c13539..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GATATCCA.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GATATCCA LB:LN_GATATCCA SM:SA_GATATCCA CN:BI
-HiMom:1:1101:1460:2176 77 * 0 0 * * 0 0 AGTCCAGGCTGAGCCCAGGGAAGAA CCCFFFFFHHHHGJIJJIJJHIJJI RG:Z:HiMom.1
-HiMom:1:1101:1460:2176 141 * 0 0 * * 0 0 AGGAAAAAGACACAACAAGTCCAAC ######################### RG:Z:HiMom.1
-HiMom:1:2101:1031:2163 77 * 0 0 * * 0 0 .TTTCCATGGCCGTCACCTTTGGGT #4=DDFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
-HiMom:1:2101:1031:2163 141 * 0 0 * * 0 0 ..ACATTTGTCACCACTAGCCACCA ##0<@?@@@@@@@@@@?@@@@@@@? RG:Z:HiMom.1
-HiMom:1:2101:1226:2088 77 * 0 0 * * 0 0 .GATCGGAAGAGCACACGTTTGACT #4=DAA=DDFHFHIIBFGHHIG>EG RG:Z:HiMom.1
-HiMom:1:2101:1226:2088 141 * 0 0 * * 0 0 GCTCTTCCGATCTAGGTAATAGCTA ==?BDFFFDCDDHFFFAFHDHIJGJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam
deleted file mode 100644
index 353c9f2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GCCGTCGA.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GCCGTCGA LB:LN_GCCGTCGA SM:SA_GCCGTCGA CN:BI
-HiMom:1:1101:1111:2148 77 * 0 0 * * 0 0 GTGGAGACCACCTCCGAGGCCTTGT BBCFFFFFHHHHHJJJIJJJJJJJI RG:Z:HiMom.1
-HiMom:1:1101:1111:2148 141 * 0 0 * * 0 0 GCGAA.A..........GGACGAC. ######################### RG:Z:HiMom.1
-HiMom:1:1101:1221:2143 77 * 0 0 * * 0 0 TTTGGTGGAAATTTTTTGTTATGAT CCCFFBDBHFD?FBFHIIGGIC at EF RG:Z:HiMom.1
-HiMom:1:1101:1221:2143 141 * 0 0 * * 0 0 CAATTGAATGTCTGCACAGCCGCTT @@@FFFFDHHHHHJJJIIIJGHIJJ RG:Z:HiMom.1
-HiMom:1:1101:1327:2200 589 * 0 0 * * 0 0 AGGGGGATCCGCCGGGGGACCACAA ######################### RG:Z:HiMom.1
-HiMom:1:1101:1327:2200 653 * 0 0 * * 0 0 GTCATCTGGGCTGTCGACAGGTGTC @B at FFFFFHHHHGIJJJJJJIFHHI RG:Z:HiMom.1
-HiMom:1:2101:1122:2136 77 * 0 0 * * 0 0 GTAGGCGCTCAGCAAATACTTGTCG @@@DDDD8?<CACEHHBBHDAAFH@ RG:Z:HiMom.1
-HiMom:1:2101:1122:2136 141 * 0 0 * * 0 0 CTTGCCAGCCTGCAGGCCCCGCGGC ???BBAABDD?DDIID)A:3<EADD RG:Z:HiMom.1
-HiMom:1:2101:1459:2083 77 * 0 0 * * 0 0 .CACACGCCACACGGAGCACACTTT #4=DDFFFHHHHHJJJJJJJJIIJJ RG:Z:HiMom.1
-HiMom:1:2101:1459:2083 141 * 0 0 * * 0 0 ATTTCACCAAAATAATCAGAAGGCC CCCFFFFDBHGHHIGGIJFJJGGFH RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam
deleted file mode 100644
index 2f7fbb6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GCCTAGCC.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GCCTAGCC LB:LN_GCCTAGCC SM:SA_GCCTAGCC CN:BI
-HiMom:1:1101:1165:2239 77 * 0 0 * * 0 0 GGCGGAGGCAGCATTTCAGCTGTGA CCCFFDFFHHHHHIJJIGHHHJHHF RG:Z:HiMom.1
-HiMom:1:1101:1165:2239 141 * 0 0 * * 0 0 ATGGAAGTCGAGACAGAAGTGAGAA ######################### RG:Z:HiMom.1
-HiMom:1:1101:1290:2225 77 * 0 0 * * 0 0 CTTGGGCGCATGGTGAGGGAGGGAG @@@FFDDFHDFH??CBEBHHIGDCD RG:Z:HiMom.1
-HiMom:1:1101:1290:2225 141 * 0 0 * * 0 0 TCAGTTCACTGGCAAAGACAGTCAC C@@FBEDDFHFHGIIICEHGDHBHE RG:Z:HiMom.1
-HiMom:1:1201:1280:2179 77 * 0 0 * * 0 0 TTCAAGGAATCGTCCTGCCTCAGCC BCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1280:2179 141 * 0 0 * * 0 0 GAGGACTGCTTGAGTCCAGGAGTTC @@BFFDEFGHHHHIFGCHIJJJGGI RG:Z:HiMom.1
-HiMom:1:1201:1300:2137 77 * 0 0 * * 0 0 .TGTAATCCCAGCTCTCAGGGAGGC #1=ADDDDDDDBBA?@AE?E at FE8; RG:Z:HiMom.1
-HiMom:1:1201:1300:2137 141 * 0 0 * * 0 0 GCTCTTCCGATCTTTTTTTTAATTT @@?DDDDDFDHADEHGIGGED3?FD RG:Z:HiMom.1
-HiMom:1:2101:1023:2237 589 * 0 0 * * 0 0 .TAAACAGCTTCTGCACAGCCAAAG #00@@?>=39>9;<412@?###### RG:Z:HiMom.1
-HiMom:1:2101:1023:2237 653 * 0 0 * * 0 0 ..TTTGTTTGAGTTCCTTGTAGATT ##0:=@?>?@???@:>?@??>?;?< RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GTAACATC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GTAACATC.sam
deleted file mode 100644
index 9f8e2fa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GTAACATC.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GTAACATC LB:LN_GTAACATC SM:SA_GTAACATC CN:BI
-HiMom:1:1101:1188:2237 77 * 0 0 * * 0 0 TCCCCCTCCCTTTTGCGCACACACC @?@DDADDHDHBDH<EFHIIHG?HF RG:Z:HiMom.1
-HiMom:1:1101:1188:2237 141 * 0 0 * * 0 0 GCTTCCTTCAAGACAGAAGTGAGAA CCCFFDDEFHHFFE at FDHHAIAFHG RG:Z:HiMom.1
-HiMom:1:2101:1208:2231 589 * 0 0 * * 0 0 TCACTAAACATCCAAACATCACTTT ######################### RG:Z:HiMom.1
-HiMom:1:2101:1208:2231 653 * 0 0 * * 0 0 CTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJHFDDDDDDD RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/GTCCACAG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/GTCCACAG.sam
deleted file mode 100644
index 8e0d773..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/GTCCACAG.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GTCCACAG LB:LN_GTCCACAG SM:SA_GTCCACAG CN:BI
-HiMom:1:1101:1069:2159 77 * 0 0 * * 0 0 TCCCTTACCATCAAATCAATTG.CC CCCFFFFFHHHHHJJJJJJJJJ#3A RG:Z:HiMom.1
-HiMom:1:1101:1069:2159 141 * 0 0 * * 0 0 GACGT.................... <<<@?#################### RG:Z:HiMom.1
-HiMom:1:1201:1486:2109 77 * 0 0 * * 0 0 .CACCTCCTAGCCCCTCACTTCTGT #1=B;BDDHHHGFIIIIIIIIIGGG RG:Z:HiMom.1
-HiMom:1:1201:1486:2109 141 * 0 0 * * 0 0 ACGTGTGCTCTTCCCGATCTGTATA CCCFF?DDFBHHHJJIIDHJIJJJH RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/N.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/N.sam
deleted file mode 100644
index c8b3cee..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/N.sam
+++ /dev/null
@@ -1,34 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.N LB:LN_N SM:SA_N CN:BI
-HiMom:1:1101:1031:2224 589 * 0 0 * * 0 0 .AATA............T....... #0;@@#################### BC:Z:NNNNNNNN RG:Z:HiMom.1
-HiMom:1:1101:1031:2224 653 * 0 0 * * 0 0 ......................... ######################### BC:Z:NNNNNNNN RG:Z:HiMom.1 XN:i:1
-HiMom:1:1101:1039:2147 589 * 0 0 * * 0 0 .CCAA.G..GG....ATGTAA.... #4;@@#4##2<####43@@@@#### BC:Z:NNNNNNNN RG:Z:HiMom.1
-HiMom:1:1101:1039:2147 653 * 0 0 * * 0 0 ......................... ######################### BC:Z:NNNNNNNN RG:Z:HiMom.1 XN:i:1
-HiMom:1:1101:1046:2175 589 * 0 0 * * 0 0 .TGCC.G.GTT.CG.GGTCTT.... #4;@@#################### BC:Z:NNNNNNNN RG:Z:HiMom.1
-HiMom:1:1101:1046:2175 653 * 0 0 * * 0 0 ..GGA.................... ######################### BC:Z:NNNNNNNN RG:Z:HiMom.1
-HiMom:1:1101:1047:2122 589 * 0 0 * * 0 0 .CTAA.G.ACT.TG.GTGTGC.... #0;@@#4#3@@#3@#2<@@@@#### BC:Z:NNNANNNN RG:Z:HiMom.1
-HiMom:1:1101:1047:2122 653 * 0 0 * * 0 0 ..TCA.................... ######################### BC:Z:NNNANNNN RG:Z:HiMom.1
-HiMom:1:1101:1048:2197 589 * 0 0 * * 0 0 .CTCC.G.TCA.CA.GTGGAG.... #0;?@#################### BC:Z:NNNCNNNN RG:Z:HiMom.1
-HiMom:1:1101:1048:2197 653 * 0 0 * * 0 0 ..GTG.................... ######################### BC:Z:NNNCNNNN RG:Z:HiMom.1
-HiMom:1:1101:1065:2193 77 * 0 0 * * 0 0 GAAGTACGCCCTGCCCCTGGTT.GC ?@@DAADAHHFHBEBEGGHG?#### BC:Z:GAACGATN RG:Z:HiMom.1
-HiMom:1:1101:1065:2193 141 * 0 0 * * 0 0 .CTTG.................... ######################### BC:Z:GAACGATN RG:Z:HiMom.1
-HiMom:1:1101:1162:2207 589 * 0 0 * * 0 0 ACCTTGAGGAGAACATAAGAGCAAA ######################### BC:Z:ACAAAATT RG:Z:HiMom.1
-HiMom:1:1101:1162:2207 653 * 0 0 * * 0 0 TAAAACTGGGGAAGTTAGAGGAATG ######################### BC:Z:ACAAAATT RG:Z:HiMom.1
-HiMom:1:1201:1159:2179 589 * 0 0 * * 0 0 GTTAGCACAGATATTGGATGAGTGA ######################### BC:Z:AAAAAAAA RG:Z:HiMom.1
-HiMom:1:1201:1159:2179 653 * 0 0 * * 0 0 TTTTTTTTTATTTTTCTAAATACTT ===AA#################### BC:Z:AAAAAAAA RG:Z:HiMom.1
-HiMom:1:1201:1414:2174 589 * 0 0 * * 0 0 GCCAAAAAAAAGAACCAGCCCAAGG ######################### BC:Z:AGAAAAGA RG:Z:HiMom.1
-HiMom:1:1201:1414:2174 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT @;@1BDADF????FFEB>B6=BBBB BC:Z:AGAAAAGA RG:Z:HiMom.1
-HiMom:1:2101:1040:2208 589 * 0 0 * * 0 0 .ATGCCCACCTCCCTCCTACGCACC ######################### BC:Z:ACGAAATC RG:Z:HiMom.1
-HiMom:1:2101:1040:2208 653 * 0 0 * * 0 0 .CTGATAGTCACTGAAATGAATTCA #-0=>(2 at .22@@############ BC:Z:ACGAAATC RG:Z:HiMom.1
-HiMom:1:2101:1059:2083 77 * 0 0 * * 0 0 .AAGAGGGGTCAAGAGTTAAACTTA #1=DDFFFHFHHGIGHGHJJJJJJI BC:Z:TACCGTCT RG:Z:HiMom.1
-HiMom:1:2101:1059:2083 141 * 0 0 * * 0 0 .GAATGTCTTAGAAGGATGCTTCTC #1=BDDDEHHGHHJJJJJIJJIIJJ BC:Z:TACCGTCT RG:Z:HiMom.1
-HiMom:1:2101:1143:2137 77 * 0 0 * * 0 0 ATGCAGCAGCTGCCACGGAGCACCA CC at FFDFDFHFHHGIDHEHIGJJJJ BC:Z:TCCGTCTA RG:Z:HiMom.1
-HiMom:1:2101:1143:2137 141 * 0 0 * * 0 0 GCTCTTCAGATCTAGGGGGAACAGC @@@DD?=DCAFFFHIIDG:EFHIII BC:Z:TCCGTCTA RG:Z:HiMom.1
-HiMom:1:2101:1151:2182 589 * 0 0 * * 0 0 TTGTTTTGGCTTATAATGACAAGAA ;;8-2).2())(<6=@8;?4??>>? BC:Z:GAAAAAAA RG:Z:HiMom.1
-HiMom:1:2101:1151:2182 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTA 9<<?@?@;5=?############## BC:Z:GAAAAAAA RG:Z:HiMom.1
-HiMom:1:2101:1215:2110 77 * 0 0 * * 0 0 .AATATAATTTGGAGACCCTTTGTT #1=DDDDDEDDDDIDDBB3ABAB## BC:Z:AAAAGAAG RG:Z:HiMom.1
-HiMom:1:2101:1215:2110 141 * 0 0 * * 0 0 ATCTTTCCCCCATTAAGAACAGCAA ######################### BC:Z:AAAAGAAG RG:Z:HiMom.1
-HiMom:1:2101:1285:2105 589 * 0 0 * * 0 0 .GCGGGGAGCCGGGCGTGGAATGCG ######################### BC:Z:TATCTCGG RG:Z:HiMom.1
-HiMom:1:2101:1285:2105 653 * 0 0 * * 0 0 TGTCTATATCAACCAACACCTCTTC -(0(():94:9:???########## BC:Z:TATCTCGG RG:Z:HiMom.1
-HiMom:1:2101:1450:2134 77 * 0 0 * * 0 0 AGCACGCTGCCGCGGGACCTGCCCA ?@@AD at DDHFH?DGIIIIG at FGFBF BC:Z:ACCAGTTG RG:Z:HiMom.1
-HiMom:1:2101:1450:2134 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CC at FDFDFFDFHFGIIE1CGGHBGE BC:Z:ACCAGTTG RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TAAGCACA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TAAGCACA.sam
deleted file mode 100644
index 51b342d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TAAGCACA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TAAGCACA LB:LN_TAAGCACA SM:SA_TAAGCACA CN:BI
-HiMom:1:1201:1064:2239 77 * 0 0 * * 0 0 CATGCAGCGCAAGTAGGTCTACAAG @@;DFAFFHHHHAHEGHFDGGFABG RG:Z:HiMom.1
-HiMom:1:1201:1064:2239 141 * 0 0 * * 0 0 GGGATGGGAGGGCGATGAGGACTAG 8?@:DDDACC:FHHGIH<EGDDDFH RG:Z:HiMom.1
-HiMom:1:2101:1258:2092 77 * 0 0 * * 0 0 .CACACACACACTCATTCACAGCTT #1=DDDFFHHHFHJJIJGGGIIGIJ RG:Z:HiMom.1
-HiMom:1:2101:1258:2092 141 * 0 0 * * 0 0 TTAGACAAAACACCAAAATAAAATA ######################### RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TACCGTCT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TACCGTCT.sam
deleted file mode 100644
index ebcf32d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TACCGTCT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TACCGTCT LB:LN_TACCGTCT SM:SA_TACCGTCT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TAGCGGTA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TAGCGGTA.sam
deleted file mode 100644
index 48afb69..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TAGCGGTA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TAGCGGTA LB:LN_TAGCGGTA SM:SA_TAGCGGTA CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCAGCC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCAGCC.sam
deleted file mode 100644
index f3eca6c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCAGCC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TATCAGCC LB:LN_TATCAGCC SM:SA_TATCAGCC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCCAGG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCCAGG.sam
deleted file mode 100644
index 958797b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCCAGG.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TATCCAGG LB:LN_TATCCAGG SM:SA_TATCCAGG CN:BI
-HiMom:1:1101:1071:2233 77 * 0 0 * * 0 0 TTTGACAGTCTCTGAATGAGAA.GG CCCFFFFFHHHHHJIIIJJJIJ#4A RG:Z:HiMom.1
-HiMom:1:1101:1071:2233 141 * 0 0 * * 0 0 GTTTG.................... <<<@@#################### RG:Z:HiMom.1
-HiMom:1:1201:1140:2125 77 * 0 0 * * 0 0 .TTTCAGTTCAGAGAACTGCAGAAT #1=DBDFDHHHHGJIJJJJJIIIJI RG:Z:HiMom.1
-HiMom:1:1201:1140:2125 141 * 0 0 * * 0 0 TTCATAAATTGGTCTTAGATGTTGC CC at FFFFFHHHHFGIJIIIJIJIJJ RG:Z:HiMom.1
-HiMom:1:1201:1236:2187 77 * 0 0 * * 0 0 TTTAAATGGGTAAGAAGCCCGGCTC @BCDDFEFHHDHHJJJJJIJJIJJJ RG:Z:HiMom.1
-HiMom:1:1201:1236:2187 141 * 0 0 * * 0 0 CTCCTTAGCGGATTCCGACTTCCAT CCCFFFFDHHHHGIJJIGIGIJJGG RG:Z:HiMom.1
-HiMom:1:2101:1133:2239 77 * 0 0 * * 0 0 AGACAGAAGTACGGGAAGGCGAAGA @@@FFFFEHFHHHJJCGDHIIECD@ RG:Z:HiMom.1
-HiMom:1:2101:1133:2239 141 * 0 0 * * 0 0 AGCTTTTTGTTTCCTAGCTTGTCTT ?@?DDFFFHHHHF4ACFHIJHHHGH RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCCATG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCCATG.sam
deleted file mode 100644
index a005522..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCCATG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TATCCATG LB:LN_TATCCATG SM:SA_TATCCATG CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCTCGG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCTCGG.sam
deleted file mode 100644
index 7ea4674..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCTCGG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TATCTCGG LB:LN_TATCTCGG SM:SA_TATCTCGG CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCTGCC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCTGCC.sam
deleted file mode 100644
index 36bd80e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TATCTGCC.sam
+++ /dev/null
@@ -1,16 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TATCTGCC LB:LN_TATCTGCC SM:SA_TATCTGCC CN:BI
-HiMom:1:1101:1267:2209 77 * 0 0 * * 0 0 GAGACGGAGGCCAACGGGGGCCTGG @@CFFFFD8FDHFHIGIBG?@BCDG RG:Z:HiMom.1
-HiMom:1:1101:1267:2209 141 * 0 0 * * 0 0 GGCAGAGTCTCCAACAGCCCCGTAC =;?DDDD?CCFHAIIIGGIIGE at EG RG:Z:HiMom.1
-HiMom:1:1101:1353:2226 77 * 0 0 * * 0 0 TTGCTTGTCTGTAAAGTATTTTATT @C at DDFFDHHFHFHHIBGG>IHHII RG:Z:HiMom.1
-HiMom:1:1101:1353:2226 141 * 0 0 * * 0 0 GTGCTCTTCCGATCTTCAGGTTACC BBBFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1435:2194 77 * 0 0 * * 0 0 GAGAAAGAACATGACTACAGAGATG CCCFFFFFHHHHHJJJJJJJJJHJJ RG:Z:HiMom.1
-HiMom:1:1101:1435:2194 141 * 0 0 * * 0 0 TTTTGTTTTCTTTTACTGAAGTGTA CCCFFDFFHHHHHJJJJIHIJHHHJ RG:Z:HiMom.1
-HiMom:1:1201:1084:2204 77 * 0 0 * * 0 0 GGCCCGTGGACGCCGCCGAAGAAGC CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1084:2204 141 * 0 0 * * 0 0 TGGCTCCTCAGGCTCTCATCAGTTG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1142:2242 77 * 0 0 * * 0 0 TGTTGATAGTCCTTCTTATCTTAGT ???DB?==CC2<AC:CC<CFEF<FF RG:Z:HiMom.1
-HiMom:1:1201:1142:2242 141 * 0 0 * * 0 0 GTAAAATGTAAAATAATAAAAAATG ?=?DDDD;AF<DF<FFFFIIIFF@< RG:Z:HiMom.1
-HiMom:1:1201:1187:2100 77 * 0 0 * * 0 0 .GCGGTAATTCCAGCTCCAATAGCG #1:BB2 at DHHFHHIIIIHHIIGHGG RG:Z:HiMom.1
-HiMom:1:1201:1187:2100 141 * 0 0 * * 0 0 AAAAAAGAGCCCGCATTGCCGAGAC =<=;AA################### RG:Z:HiMom.1
-HiMom:1:1201:1392:2109 77 * 0 0 * * 0 0 .CTGAAGAGGCCAAAGCGCCCTCCA #1=DDFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
-HiMom:1:1201:1392:2109 141 * 0 0 * * 0 0 GTCAGACAGGGGGATTTGGGCTGTG BBCFFFFFHHHHHHJJJHIJIJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TCCGTCTA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TCCGTCTA.sam
deleted file mode 100644
index 39a9ebc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TCCGTCTA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TCCGTCTA LB:LN_TCCGTCTA SM:SA_TCCGTCTA CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TCGCTAGA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TCGCTAGA.sam
deleted file mode 100644
index 6eaddd9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TCGCTAGA.sam
+++ /dev/null
@@ -1,12 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TCGCTAGA LB:LN_TCGCTAGA SM:SA_TCGCTAGA CN:BI
-HiMom:1:1101:1143:2192 77 * 0 0 * * 0 0 GGAGCGAGTCTGGGTCTCAGCCCCG CCCFFFFFHHHHHJGHIIIHJJJJI RG:Z:HiMom.1
-HiMom:1:1101:1143:2192 141 * 0 0 * * 0 0 CGACAAGTCTGGCTTATCACTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1479:2221 77 * 0 0 * * 0 0 TGTAAAGTATGCTGGCTCAGTGTAT BBBFDFFEHHHHHJJJJJJJIJHJJ RG:Z:HiMom.1
-HiMom:1:1101:1479:2221 141 * 0 0 * * 0 0 GGGGAAATCTATTTTTATGTAAAAA @CCFFFFFHHHHHJIGIJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1312:2112 77 * 0 0 * * 0 0 .TCCCAGCGAACCCGCGTGCAACCT #1=DFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1312:2112 141 * 0 0 * * 0 0 ATTTGCAGGAGCCGGCGCAGGTGCA CCCFFFFFHHHHHJJJIJJJJGHIJ RG:Z:HiMom.1
-HiMom:1:1201:1416:2128 77 * 0 0 * * 0 0 .ACAGGCGTGGAGGAGGCGGCGGCC #4=DDDFFHHHHHJIGJHFHHFFED RG:Z:HiMom.1
-HiMom:1:1201:1416:2128 141 * 0 0 * * 0 0 TTGGTGTGGAGGCGGTGGCGGGATC @@@DDDDDHHFHHII:?GGHIIB6? RG:Z:HiMom.1
-HiMom:1:2101:1064:2242 77 * 0 0 * * 0 0 ATGAACAAAGGAAGAATTATGCACG ?;?D;DDDF?;:+<<CFFCHE433A RG:Z:HiMom.1
-HiMom:1:2101:1064:2242 141 * 0 0 * * 0 0 .GGAAAAAGGTTGTCAAGCGTTAAA ######################### RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TCTGCAAG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TCTGCAAG.sam
deleted file mode 100644
index b1a4fda..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TCTGCAAG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TCTGCAAG LB:LN_TCTGCAAG SM:SA_TCTGCAAG CN:BI
-HiMom:1:1201:1042:2174 77 * 0 0 * * 0 0 .GTTGGTGTCTTCATTTTATGTATA #1=DDFDFHHHHHJIJJJHIJHIJJ RG:Z:HiMom.1
-HiMom:1:1201:1042:2174 141 * 0 0 * * 0 0 .TCAGGAAGGC..CAAAAAAAGAAA #0;@@@?@?<@##3<@@?@@????? RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam
deleted file mode 100644
index 1e37171..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGCAAGTA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGCAAGTA LB:LN_TGCAAGTA SM:SA_TGCAAGTA CN:BI
-HiMom:1:1101:1242:2170 77 * 0 0 * * 0 0 ATGGCAGGGCAGAGTTCTGATGAGT CCCFFFFFHHGGGIFHEIIGIIII? RG:Z:HiMom.1
-HiMom:1:1101:1242:2170 141 * 0 0 * * 0 0 GGAAGGAAAAGAAGCACAAGTACAT @@@DFDFFHHHGHHGIIGJJEHHIG RG:Z:HiMom.1
-HiMom:1:2101:1163:2222 77 * 0 0 * * 0 0 GAGCAGGCAAGGAGGACTTCTTGTT CCCFFFFFGHHHHJJHHIJJJJJIJ RG:Z:HiMom.1
-HiMom:1:2101:1163:2222 141 * 0 0 * * 0 0 GAGCGATAATGGTTCTTTTCCTCAC @@@DFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGCTGCTG.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TGCTGCTG.sam
deleted file mode 100644
index 1eb5afe..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGCTGCTG.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGCTGCTG LB:LN_TGCTGCTG SM:SA_TGCTGCTG CN:BI
-HiMom:1:1101:1084:2136 77 * 0 0 * * 0 0 .TCTCACTGTGAATTTGTGGTGGGC #1=DDFFFHHHHHJJJJGIJIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1084:2136 141 * 0 0 * * 0 0 TTTCT.................... <<<@@#################### RG:Z:HiMom.1
-HiMom:1:1201:1285:2100 77 * 0 0 * * 0 0 .AATGACATGTTTAAAGATGGACTC #1:BDDFFHHFHHGIJIJIIIIGII RG:Z:HiMom.1
-HiMom:1:1201:1285:2100 141 * 0 0 * * 0 0 GATCTTTTTTGCTTTGTAGTTATAG @@@DFFFFHHHHHIIGIABCFFHBF RG:Z:HiMom.1
-HiMom:1:2101:1162:2139 77 * 0 0 * * 0 0 AGAGGTGAAATTCTTGGACCGGCGC @@@DDDDDHFHHHDB:EFHHCAG?D RG:Z:HiMom.1
-HiMom:1:2101:1162:2139 141 * 0 0 * * 0 0 ATCGTTTATGGTCGGAACTACGACG BCCFFFFFHHHHHIJJJJJJJIJJI RG:Z:HiMom.1
-HiMom:1:2101:1195:2150 77 * 0 0 * * 0 0 CCGAGAGAGTGAGAGCGCTCCTGGG CCCFFFFFHFHHHJJJJIJJJJIJJ RG:Z:HiMom.1
-HiMom:1:2101:1195:2150 141 * 0 0 * * 0 0 AATTGAACTTCACCACCCAGAGGAA CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGTAACTC.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TGTAACTC.sam
deleted file mode 100644
index 6e11486..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGTAACTC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGTAACTC LB:LN_TGTAACTC SM:SA_TGTAACTC CN:BI
-HiMom:1:1201:1421:2154 77 * 0 0 * * 0 0 TGTGTGTGTGGGTGTGTGTATATAT ?@?DDFFFFFHH at GEFCCCHGIGJI RG:Z:HiMom.1
-HiMom:1:1201:1421:2154 141 * 0 0 * * 0 0 TGTGCTCTTCCGATCTTGTGCTCTT BC at DFFFFHHHHHJJJJFHIHHIJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam
deleted file mode 100644
index 525a3f0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TGTAATCA.sam
+++ /dev/null
@@ -1,8 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGTAATCA LB:LN_TGTAATCA SM:SA_TGTAATCA CN:BI
-HiMom:1:1101:1419:2119 77 * 0 0 * * 0 0 .ATGACTATGGTAACTGAAAGAAAA #1:A1BDADBFFDFIIIEEHECACF RG:Z:HiMom.1
-HiMom:1:1101:1419:2119 141 * 0 0 * * 0 0 ACTTTCCTTTTTTGTTTTACTTTAA ######################### RG:Z:HiMom.1
-HiMom:1:1201:1208:2132 77 * 0 0 * * 0 0 .CCTCAATGAGCGGCACTATGGGGG #1=DDFFFHHHHGJJIJJGHIJGIJ RG:Z:HiMom.1
-HiMom:1:1201:1208:2132 141 * 0 0 * * 0 0 CTGTAGAAAGGATGGTCGGGCTCCA @@CDFFFFGHFHHJIJJGJIBHJJG RG:Z:HiMom.1
-HiMom:1:1201:1344:2147 77 * 0 0 * * 0 0 TATCCTCCCTACTATGCCTAGAAGG =?@DADEFHBHDFG>EFGDHGFGHD RG:Z:HiMom.1
-HiMom:1:1201:1344:2147 141 * 0 0 * * 0 0 ACGATTAGTTTTAGCATTGGAGTAG @<??DDDDFHHHFGGHHIIIGGAGH RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/TTGTCTAT.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/TTGTCTAT.sam
deleted file mode 100644
index 69ec784..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/TTGTCTAT.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TTGTCTAT LB:LN_TTGTCTAT SM:SA_TTGTCTAT CN:BI
-HiMom:1:1101:1219:2164 77 * 0 0 * * 0 0 TCAAGCAGGAGCAGCTAAGTCCTAA CCCFFFFFHHHHHJJJJJJHIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1219:2164 141 * 0 0 * * 0 0 ATCTTATCCACTCCTTCCACTTTGG CCCFFFFFHHHHHJJIJJJJJJJIJ RG:Z:HiMom.1
-HiMom:1:1201:1103:2184 77 * 0 0 * * 0 0 GTAAGAACTACCCTGGGTCCCCGTG @@BFFFFFHHHHHJJJJGIJJJJHI RG:Z:HiMom.1
-HiMom:1:1201:1103:2184 141 * 0 0 * * 0 0 AGAAGTTTCAGAATTGTGGCCCCAT B at BFFDEFHHHHHJJJGHIJJJJJI RG:Z:HiMom.1
-HiMom:1:1201:1107:2109 77 * 0 0 * * 0 0 .GGGAACCTGGCGCTAAACCATTCG #1=DFFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
-HiMom:1:1201:1107:2109 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHGHHJJJJIIJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1252:2141 77 * 0 0 * * 0 0 .TTCCCCCCATGTAATTATTGTGAA #1=DDFFFHHHHHJJJJJJJJIJJJ RG:Z:HiMom.1
-HiMom:1:1201:1252:2141 141 * 0 0 * * 0 0 AGTTATTTTGCCTATGTCCAACAAG BCBFFFFFGHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/nonBarcoded.sam b/testdata/net/sf/picard/illumina/25T8B25T/sams/nonBarcoded.sam
deleted file mode 100644
index ab6d41f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B25T/sams/nonBarcoded.sam
+++ /dev/null
@@ -1,182 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1 LB:Hello, World SM:HiDad CN:BI
-HiMom:1:1101:1031:2224 516 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
-HiMom:1:1101:1039:2147 516 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
-HiMom:1:1101:1046:2175 516 * 0 0 * * 0 0 ..GGA.................... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1047:2122 516 * 0 0 * * 0 0 ..TCA.................... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1048:2197 516 * 0 0 * * 0 0 ..GTG.................... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1065:2193 4 * 0 0 * * 0 0 .CTTG.................... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1069:2159 4 * 0 0 * * 0 0 GACGT.................... <<<@?#################### RG:Z:HiMom.1
-HiMom:1:1101:1071:2233 4 * 0 0 * * 0 0 GTTTG.................... <<<@@#################### RG:Z:HiMom.1
-HiMom:1:1101:1083:2193 4 * 0 0 * * 0 0 AGGCT.................... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1084:2136 4 * 0 0 * * 0 0 TTTCT.................... <<<@@#################### RG:Z:HiMom.1
-HiMom:1:1101:1089:2172 4 * 0 0 * * 0 0 TCCGG.................... :<<??#################### RG:Z:HiMom.1
-HiMom:1:1101:1100:2207 4 * 0 0 * * 0 0 AGGCT............G....... ######################### RG:Z:HiMom.1
-HiMom:1:1101:1111:2148 4 * 0 0 * * 0 0 GCGAA.A..........GGACGAC. ######################### RG:Z:HiMom.1
-HiMom:1:1101:1138:2141 4 * 0 0 * * 0 0 TCCGATCTGCTTCAGGTCGATCAGA CCCFFFFFHGHHHJJIGHIJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1140:2120 4 * 0 0 * * 0 0 TTTTTTTTTTTTTAACTTTGCAAAT @@@DDDDDHHHHFB at 9FHI@BFH@@ RG:Z:HiMom.1
-HiMom:1:1101:1143:2192 4 * 0 0 * * 0 0 CGACAAGTCTGGCTTATCACTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1150:2228 4 * 0 0 * * 0 0 ATGGGAGGCGATTCCTAGGGGGTTG 8?=DD8;@BH6DHD<FGGGEIGHIG RG:Z:HiMom.1
-HiMom:1:1101:1157:2135 4 * 0 0 * * 0 0 TTTAAAGTCTTAATCAAAGATGATA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1162:2207 516 * 0 0 * * 0 0 TAAAACTGGGGAAGTTAGAGGAATG ######################### RG:Z:HiMom.1
-HiMom:1:1101:1165:2239 4 * 0 0 * * 0 0 ATGGAAGTCGAGACAGAAGTGAGAA ######################### RG:Z:HiMom.1
-HiMom:1:1101:1175:2197 4 * 0 0 * * 0 0 AAGAGCTGGGGAACATCCAGAAAGG BC at FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1188:2237 4 * 0 0 * * 0 0 GCTTCCTTCAAGACAGAAGTGAGAA CCCFFDDEFHHFFE at FDHHAIAFHG RG:Z:HiMom.1
-HiMom:1:1101:1197:2200 4 * 0 0 * * 0 0 ATATTCCACTGGAACCACAGAACCC @@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1206:2126 4 * 0 0 * * 0 0 ATCTGTCCAGTGGTGCACTGAATGT CCCFFFFFHHHHHHIIJJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1212:2230 4 * 0 0 * * 0 0 TTTTAGCTTTATTGGGGAGGGGGTG CCCFFFFFHHGHHJJJJGJJJJJDF RG:Z:HiMom.1
-HiMom:1:1101:1218:2200 4 * 0 0 * * 0 0 GCTCTTCCGATCTATCTGCTCGTCC (-(=34???3;@############# RG:Z:HiMom.1
-HiMom:1:1101:1219:2164 4 * 0 0 * * 0 0 ATCTTATCCACTCCTTCCACTTTGG CCCFFFFFHHHHHJJIJJJJJJJIJ RG:Z:HiMom.1
-HiMom:1:1101:1221:2143 4 * 0 0 * * 0 0 CAATTGAATGTCTGCACAGCCGCTT @@@FFFFDHHHHHJJJIIIJGHIJJ RG:Z:HiMom.1
-HiMom:1:1101:1236:2121 4 * 0 0 * * 0 0 TTGCGCTTACTTTGTAGCCTTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1242:2170 4 * 0 0 * * 0 0 GGAAGGAAAAGAAGCACAAGTACAT @@@DFDFFHHHGHHGIIGJJEHHIG RG:Z:HiMom.1
-HiMom:1:1101:1257:2223 4 * 0 0 * * 0 0 TGCTCTTCCGATCTTTTAGCAAAGC :?@DDBDDHFFHDGIGIIJJJGGGI RG:Z:HiMom.1
-HiMom:1:1101:1259:2152 4 * 0 0 * * 0 0 ATTTTTATATTTTTTTAGACATAGG CCCFFFFFGHHHHJJJJIGIIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1261:2127 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHGHHHJJIFDDDDDDDD RG:Z:HiMom.1
-HiMom:1:1101:1263:2236 516 * 0 0 * * 0 0 AGTTCTTCAGTAATTTTAGTACTGC ######################### RG:Z:HiMom.1
-HiMom:1:1101:1267:2209 4 * 0 0 * * 0 0 GGCAGAGTCTCCAACAGCCCCGTAC =;?DDDD?CCFHAIIIGGIIGE at EG RG:Z:HiMom.1
-HiMom:1:1101:1269:2170 4 * 0 0 * * 0 0 TTCCAAGCCTGTGCTTTAAGGAAAA @@<ADBDBDF8DDCFH at GIE@@GGH RG:Z:HiMom.1
-HiMom:1:1101:1290:2225 4 * 0 0 * * 0 0 TCAGTTCACTGGCAAAGACAGTCAC C@@FBEDDFHFHGIIICEHGDHBHE RG:Z:HiMom.1
-HiMom:1:1101:1291:2150 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHFHHIJJJIIIGIJIJ RG:Z:HiMom.1
-HiMom:1:1101:1302:2244 4 * 0 0 * * 0 0 TGAATACATATAACAAATGCAAAAA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1308:2153 516 * 0 0 * * 0 0 TCTGTAAGGTAATCCCCGCATGTGT 1?1=4===AFFDFFGFDGFB at CFB: RG:Z:HiMom.1
-HiMom:1:1101:1309:2210 4 * 0 0 * * 0 0 AGTGGGCTAGGGCATTTTTAATCTT @@?DFFDFHHHDFHJIJJIJGIIIJ RG:Z:HiMom.1
-HiMom:1:1101:1314:2233 4 * 0 0 * * 0 0 AGGAAAGTTGGGCTGACCTGACAGA @@<DDD;=FBFADBCGDEH?F;FCG RG:Z:HiMom.1
-HiMom:1:1101:1316:2126 4 * 0 0 * * 0 0 TCTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJJHFDDDDDD RG:Z:HiMom.1
-HiMom:1:1101:1327:2200 516 * 0 0 * * 0 0 GTCATCTGGGCTGTCGACAGGTGTC @B at FFFFFHHHHGIJJJJJJIFHHI RG:Z:HiMom.1
-HiMom:1:1101:1328:2225 4 * 0 0 * * 0 0 AGGAAATTAGGACTTACCTGACATA ######################### RG:Z:HiMom.1
-HiMom:1:1101:1338:2175 4 * 0 0 * * 0 0 GCTTGTTGGCTTTAACATCCACAAT CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1347:2149 4 * 0 0 * * 0 0 GCTCTTCCGATCTGTGCTCTTCCGA CCCFFFFFDFHHFIJDGIGGHGIGH RG:Z:HiMom.1
-HiMom:1:1101:1353:2226 4 * 0 0 * * 0 0 GTGCTCTTCCGATCTTCAGGTTACC BBBFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1363:2138 4 * 0 0 * * 0 0 GTTCTTAAACCTGTTAGAACTTCTG C@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1399:2128 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHIJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1403:2194 4 * 0 0 * * 0 0 ACATGGTGAAACCCTGTCTCTACTA CCCFFFDDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1406:2222 4 * 0 0 * * 0 0 GGCTGGACTCCCCTGGTTCTGGGCA ;?@DDDBD?FHDFGIIIGIGHHIII RG:Z:HiMom.1
-HiMom:1:1101:1419:2119 4 * 0 0 * * 0 0 ACTTTCCTTTTTTGTTTTACTTTAA ######################### RG:Z:HiMom.1
-HiMom:1:1101:1420:2213 4 * 0 0 * * 0 0 TTCACTGTACCGGCCGTGCGTACTT @CCFFFFDHHHFGIJJJJJJGHIGG RG:Z:HiMom.1
-HiMom:1:1101:1435:2194 4 * 0 0 * * 0 0 TTTTGTTTTCTTTTACTGAAGTGTA CCCFFDFFHHHHHJJJJIHIJHHHJ RG:Z:HiMom.1
-HiMom:1:1101:1441:2148 4 * 0 0 * * 0 0 TTTTGGCTCTAGAGGGGGTAGAGGG CCCFFFFFHHDFBHIIJJ1?FGHIJ RG:Z:HiMom.1
-HiMom:1:1101:1452:2132 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1460:2176 4 * 0 0 * * 0 0 AGGAAAAAGACACAACAAGTCCAAC ######################### RG:Z:HiMom.1
-HiMom:1:1101:1479:2221 4 * 0 0 * * 0 0 GGGGAAATCTATTTTTATGTAAAAA @CCFFFFFHHHHHJIGIJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1101:1491:2120 4 * 0 0 * * 0 0 GGCCAGGCTGAACTTCTGAGCTGCT CCCFFFFFHHHGHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1018:2133 4 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
-HiMom:1:1201:1018:2217 516 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
-HiMom:1:1201:1028:2202 4 * 0 0 * * 0 0 ..AAAC.C.T.......GG..TG.. ##42@?################### RG:Z:HiMom.1
-HiMom:1:1201:1042:2174 4 * 0 0 * * 0 0 .TCAGGAAGGC..CAAAAAAAGAAA #0;@@@?@?<@##3<@@?@@????? RG:Z:HiMom.1
-HiMom:1:1201:1043:2246 4 * 0 0 * * 0 0 .GCATCATTTC..GCTTCTCTCTGT #0;@@??@=@>##22=;@??><@?? RG:Z:HiMom.1
-HiMom:1:1201:1045:2105 516 * 0 0 * * 0 0 .TTTTTTTTTT..TTTTTTTTTTTT #0;@@@@@@@?##0:????????=< RG:Z:HiMom.1
-HiMom:1:1201:1054:2151 4 * 0 0 * * 0 0 GTCAGGCACTGAGAATATATGGGTG CBCFFFFFHHHHHJJJJJJJJJJEG RG:Z:HiMom.1
-HiMom:1:1201:1064:2239 4 * 0 0 * * 0 0 GGGATGGGAGGGCGATGAGGACTAG 8?@:DDDACC:FHHGIH<EGDDDFH RG:Z:HiMom.1
-HiMom:1:1201:1073:2225 4 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGGAGGGT @BBDFFFFHHHHHJJJJJJJJJJJ: RG:Z:HiMom.1
-HiMom:1:1201:1083:2121 4 * 0 0 * * 0 0 ACACACAACACCACCGCCCTCCCCC ######################### RG:Z:HiMom.1
-HiMom:1:1201:1084:2204 4 * 0 0 * * 0 0 TGGCTCCTCAGGCTCTCATCAGTTG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1095:2146 4 * 0 0 * * 0 0 ACTGACAACACCAAATGCTGCTAAG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1103:2184 4 * 0 0 * * 0 0 AGAAGTTTCAGAATTGTGGCCCCAT B at BFFDEFHHHHHJJJGHIJJJJJI RG:Z:HiMom.1
-HiMom:1:1201:1107:2109 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHGHHJJJJIIJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1118:2198 4 * 0 0 * * 0 0 AATAAACTTTATTAAAGCAGTTAAA C at CFFFFFHDHHHGIIIJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1122:2227 4 * 0 0 * * 0 0 GTCATATAAGGCCCAGTCCAAGGAA @@@FFFFFHHHGGIJIGGIJFIJII RG:Z:HiMom.1
-HiMom:1:1201:1123:2161 516 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGCATACA ===AAAA8AAAA<AAA)@CBA9>A# RG:Z:HiMom.1
-HiMom:1:1201:1127:2112 516 * 0 0 * * 0 0 TAATCACCTGAGCAGTGAAGCCAGC @<@?BDDDHD?FDBHI?AHGGGDFH RG:Z:HiMom.1
-HiMom:1:1201:1134:2144 4 * 0 0 * * 0 0 AGTGTGAGTAATGGTTGAGAGGTGG B@?DDDFFFHHGHJHHGFIHHIFGI RG:Z:HiMom.1
-HiMom:1:1201:1138:2227 516 * 0 0 * * 0 0 GACAAATATAGGAAATAGAAGCTAT =1=A=AAA,2?4>7C<<4<A+3<AB RG:Z:HiMom.1
-HiMom:1:1201:1140:2125 4 * 0 0 * * 0 0 TTCATAAATTGGTCTTAGATGTTGC CC at FFFFFHHHHFGIJIIIJIJIJJ RG:Z:HiMom.1
-HiMom:1:1201:1142:2242 4 * 0 0 * * 0 0 GTAAAATGTAAAATAATAAAAAATG ?=?DDDD;AF<DF<FFFFIIIFF@< RG:Z:HiMom.1
-HiMom:1:1201:1150:2161 4 * 0 0 * * 0 0 TTCTCACTACTGTGATTGTGCCACT @C at FFFFFGHHHHGIIIICEHCFGH RG:Z:HiMom.1
-HiMom:1:1201:1159:2179 516 * 0 0 * * 0 0 TTTTTTTTTATTTTTCTAAATACTT ===AA#################### RG:Z:HiMom.1
-HiMom:1:1201:1160:2109 4 * 0 0 * * 0 0 ACATCCTTCCCATGCCACCAACTCG CCCFFFFFGHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1180:2119 4 * 0 0 * * 0 0 GCTCTAAATTTTGCTTTTCTACAGC CCCFFFFFHHHHHJJJJIJIJJIJJ RG:Z:HiMom.1
-HiMom:1:1201:1185:2143 4 * 0 0 * * 0 0 GCTGAAGGCCCGTGGGCCAGAGGTG @CCFFFFFHHHHHJJJJJJJJJJHI RG:Z:HiMom.1
-HiMom:1:1201:1187:2100 4 * 0 0 * * 0 0 AAAAAAGAGCCCGCATTGCCGAGAC =<=;AA################### RG:Z:HiMom.1
-HiMom:1:1201:1190:2194 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1204:2228 4 * 0 0 * * 0 0 TCTTCTTGTCGATGAGGAACTTGGT @?@FFFFFDHHGHJIJJGHIIJJJH RG:Z:HiMom.1
-HiMom:1:1201:1208:2132 4 * 0 0 * * 0 0 CTGTAGAAAGGATGGTCGGGCTCCA @@CDFFFFGHFHHJIJJGJIBHJJG RG:Z:HiMom.1
-HiMom:1:1201:1219:2115 4 * 0 0 * * 0 0 TGGGAGTAGTTCCCTGCTAAGGGAG ???DBDBDADDDDIEID:AFFD:?8 RG:Z:HiMom.1
-HiMom:1:1201:1236:2187 4 * 0 0 * * 0 0 CTCCTTAGCGGATTCCGACTTCCAT CCCFFFFDHHHHGIJJIGIGIJJGG RG:Z:HiMom.1
-HiMom:1:1201:1242:2207 4 * 0 0 * * 0 0 ATCTTTTATTGGCCTCCTGCTCCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1252:2141 4 * 0 0 * * 0 0 AGTTATTTTGCCTATGTCCAACAAG BCBFFFFFGHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1260:2165 4 * 0 0 * * 0 0 ATCTGATCTAAGTTGGGGGACGCCG @@@FFDFFHHHHHJJJIJIIIGIJJ RG:Z:HiMom.1
-HiMom:1:1201:1280:2179 4 * 0 0 * * 0 0 GAGGACTGCTTGAGTCCAGGAGTTC @@BFFDEFGHHHHIFGCHIJJJGGI RG:Z:HiMom.1
-HiMom:1:1201:1281:2133 4 * 0 0 * * 0 0 GCAACAAAATTTCATATGACTTAGC CCCFFFFFHHHHHJJIIIHICHIIJ RG:Z:HiMom.1
-HiMom:1:1201:1285:2100 4 * 0 0 * * 0 0 GATCTTTTTTGCTTTGTAGTTATAG @@@DFFFFHHHHHIIGIABCFFHBF RG:Z:HiMom.1
-HiMom:1:1201:1291:2158 4 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGATGGGC @CCFFFDD?FHHFGEHHIIDHIIII RG:Z:HiMom.1
-HiMom:1:1201:1300:2137 4 * 0 0 * * 0 0 GCTCTTCCGATCTTTTTTTTAATTT @@?DDDDDFDHADEHGIGGED3?FD RG:Z:HiMom.1
-HiMom:1:1201:1312:2112 4 * 0 0 * * 0 0 ATTTGCAGGAGCCGGCGCAGGTGCA CCCFFFFFHHHHHJJJIJJJJGHIJ RG:Z:HiMom.1
-HiMom:1:1201:1331:2162 4 * 0 0 * * 0 0 TAATCCCAGTACTTTGGGAGGCCAA CCCFFFFFHHHHHJJJJIJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1341:2116 4 * 0 0 * * 0 0 ATAACAGCGAGACTGGCAACTTAAA ######################### RG:Z:HiMom.1
-HiMom:1:1201:1344:2147 4 * 0 0 * * 0 0 ACGATTAGTTTTAGCATTGGAGTAG @<??DDDDFHHHFGGHHIIIGGAGH RG:Z:HiMom.1
-HiMom:1:1201:1345:2181 4 * 0 0 * * 0 0 ATACGGATGTGTTTAGGAGTGGGAC CCCFFFFFHHHHHIIJJHJFHIJIJ RG:Z:HiMom.1
-HiMom:1:1201:1364:2113 4 * 0 0 * * 0 0 TAAAGAGAGCCAGTGGAGTTACGAC ######################### RG:Z:HiMom.1
-HiMom:1:1201:1392:2109 4 * 0 0 * * 0 0 GTCAGACAGGGGGATTTGGGCTGTG BBCFFFFFHHHHHHJJJHIJIJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1392:2184 4 * 0 0 * * 0 0 ATCTTTATTCATTTGTATGATCTTA @@BFFFFFHFFHFHIHIIJIJJJJI RG:Z:HiMom.1
-HiMom:1:1201:1393:2143 4 * 0 0 * * 0 0 GATAAATGCACGCATCCCCCCCGCG C at CFFFFFGGHHHHJJJJJJJJJJI RG:Z:HiMom.1
-HiMom:1:1201:1414:2174 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT @;@1BDADF????FFEB>B6=BBBB RG:Z:HiMom.1
-HiMom:1:1201:1416:2128 4 * 0 0 * * 0 0 TTGGTGTGGAGGCGGTGGCGGGATC @@@DDDDDHHFHHII:?GGHIIB6? RG:Z:HiMom.1
-HiMom:1:1201:1421:2154 4 * 0 0 * * 0 0 TGTGCTCTTCCGATCTTGTGCTCTT BC at DFFFFHHHHHJJJJFHIHHIJJ RG:Z:HiMom.1
-HiMom:1:1201:1439:2156 4 * 0 0 * * 0 0 GGAGATTATTTGCCTTGAAGTAAGC -;(22<>>@>8@>8;@######### RG:Z:HiMom.1
-HiMom:1:1201:1452:2143 4 * 0 0 * * 0 0 TTTTAGTCTTAGCATTTACTTTCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:1201:1458:2109 4 * 0 0 * * 0 0 GATACGAACACACAAGAACTTTTTT CCCFFFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
-HiMom:1:1201:1472:2121 516 * 0 0 * * 0 0 GTGTGCTCTTCCGATCTGGAGGATG =+=??A4A==A at 7A<?######### RG:Z:HiMom.1
-HiMom:1:1201:1483:2126 516 * 0 0 * * 0 0 GCATGCAGCTGGGTGCTGTGATGCA @@@DDDBB<DD8F<<CGG?AA?A<F RG:Z:HiMom.1
-HiMom:1:1201:1486:2109 4 * 0 0 * * 0 0 ACGTGTGCTCTTCCCGATCTGTATA CCCFF?DDFBHHHJJIIDHJIJJJH RG:Z:HiMom.1
-HiMom:1:1201:1486:2146 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTGGGC <<<@??@??@???????######## RG:Z:HiMom.1
-HiMom:1:2101:1011:2102 4 * 0 0 * * 0 0 .....TCACACATAATTTTAAAATT #####22@?@@??@@@@@??@@@@@ RG:Z:HiMom.1
-HiMom:1:2101:1013:2146 4 * 0 0 * * 0 0 ....CGCTAGAACCAACTTATTCAT ####24=?@@?@?@@?@@@@@@?@@ RG:Z:HiMom.1
-HiMom:1:2101:1021:2209 4 * 0 0 * * 0 0 ..GGAAGGCTGCTAGCTGGCCAGAG ##08@>??@@??@?????????>?@ RG:Z:HiMom.1
-HiMom:1:2101:1023:2237 516 * 0 0 * * 0 0 ..TTTGTTTGAGTTCCTTGTAGATT ##0:=@?>?@???@:>?@??>?;?< RG:Z:HiMom.1
-HiMom:1:2101:1031:2163 4 * 0 0 * * 0 0 ..ACATTTGTCACCACTAGCCACCA ##0<@?@@@@@@@@@@?@@@@@@@? RG:Z:HiMom.1
-HiMom:1:2101:1036:2087 4 * 0 0 * * 0 0 .GTCCACTTACGAAGCAAATACTTT #4=DDFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1040:2208 516 * 0 0 * * 0 0 .CTGATAGTCACTGAAATGAATTCA #-0=>(2 at .22@@############ RG:Z:HiMom.1
-HiMom:1:2101:1048:2238 4 * 0 0 * * 0 0 .GTCACATCGTTGAAGCACTGGATC #11ADDDB<CFFHCHGDBHGIIIII RG:Z:HiMom.1
-HiMom:1:2101:1054:2162 4 * 0 0 * * 0 0 .GGACAGGGAAGGGAAGGAAGGGTG #4=DDFDFHHHHHJIJIIDHHGICG RG:Z:HiMom.1
-HiMom:1:2101:1059:2083 4 * 0 0 * * 0 0 .GAATGTCTTAGAAGGATGCTTCTC #1=BDDDEHHGHHJJJJJIJJIIJJ RG:Z:HiMom.1
-HiMom:1:2101:1063:2206 4 * 0 0 * * 0 0 .TGCTAGGATGAGGATGGATAGTAA #1=DDDFFHHHHHJHIIJHIIIHHJ RG:Z:HiMom.1
-HiMom:1:2101:1064:2242 4 * 0 0 * * 0 0 .GGAAAAAGGTTGTCAAGCGTTAAA ######################### RG:Z:HiMom.1
-HiMom:1:2101:1072:2170 4 * 0 0 * * 0 0 .GGGGAGACAGAGAGGATCAGAAGT #4=BDDFDHHDFHEGFEGGIJIIIG RG:Z:HiMom.1
-HiMom:1:2101:1077:2139 4 * 0 0 * * 0 0 .ATTAGTTGGCGGATGAAGCAGATA #4=DFFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
-HiMom:1:2101:1084:2188 4 * 0 0 * * 0 0 TACAAGGTCAAAATCAGCAACAAGT CCCFFFFDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1100:2085 4 * 0 0 * * 0 0 ATCTTGATCTCCTCCTTCTTGGCCT @@@DDDDDHHFHFEIIIIHHBAHBG RG:Z:HiMom.1
-HiMom:1:2101:1102:2221 4 * 0 0 * * 0 0 ATAACTGACTCTACTCAGTAGATTA CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1105:2131 4 * 0 0 * * 0 0 CAGCAGCAGCAACAGCAGAAACATG CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1112:2245 4 * 0 0 * * 0 0 TCGTAGTGTTGTAATTTCGTCTTCT ?8?DBDDDCCFCAACGGFFCBFFAE RG:Z:HiMom.1
-HiMom:1:2101:1122:2136 4 * 0 0 * * 0 0 CTTGCCAGCCTGCAGGCCCCGCGGC ???BBAABDD?DDIID)A:3<EADD RG:Z:HiMom.1
-HiMom:1:2101:1123:2095 4 * 0 0 * * 0 0 TCCGCCTCCAGCTTCAGCTTCTCCT @@@FDDFFHHHHHJHGGJIJJJEHH RG:Z:HiMom.1
-HiMom:1:2101:1126:2082 4 * 0 0 * * 0 0 TCTCTTTCCACCTTGGTCACCTTCC @C at DDDFFHHHHHJEGGIHHIJGIH RG:Z:HiMom.1
-HiMom:1:2101:1133:2239 4 * 0 0 * * 0 0 AGCTTTTTGTTTCCTAGCTTGTCTT ?@?DDFFFHHHHF4ACFHIJHHHGH RG:Z:HiMom.1
-HiMom:1:2101:1143:2137 4 * 0 0 * * 0 0 GCTCTTCAGATCTAGGGGGAACAGC @@@DD?=DCAFFFHIIDG:EFHIII RG:Z:HiMom.1
-HiMom:1:2101:1151:2182 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTA 9<<?@?@;5=?############## RG:Z:HiMom.1
-HiMom:1:2101:1151:2236 516 * 0 0 * * 0 0 TTTGAAGCCTCTTTATCCTTGGCAT ######################### RG:Z:HiMom.1
-HiMom:1:2101:1162:2139 4 * 0 0 * * 0 0 ATCGTTTATGGTCGGAACTACGACG BCCFFFFFHHHHHIJJJJJJJIJJI RG:Z:HiMom.1
-HiMom:1:2101:1163:2203 4 * 0 0 * * 0 0 TTGGTTCACTTATGTATTTATGAAT @CCFDFFFHHHHHJHIIJJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1163:2222 4 * 0 0 * * 0 0 GAGCGATAATGGTTCTTTTCCTCAC @@@DFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1172:2152 516 * 0 0 * * 0 0 ATCGTTTCTGGGGACTAGTGAGGCG ######################### RG:Z:HiMom.1
-HiMom:1:2101:1186:2093 4 * 0 0 * * 0 0 AATGTTGGGAGGACAATGATGGAAA ######################### RG:Z:HiMom.1
-HiMom:1:2101:1188:2195 4 * 0 0 * * 0 0 GCACATACACCAAATGTCTGAACCT CCCFFFFFHHHHHJJJHIJJJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1195:2150 4 * 0 0 * * 0 0 AATTGAACTTCACCACCCAGAGGAA CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1207:2084 516 * 0 0 * * 0 0 TCACCACTCTTCTGGGCATCCCCTG @@@DDEDFHHHHHIJIHHGHGGJJJ RG:Z:HiMom.1
-HiMom:1:2101:1208:2231 516 * 0 0 * * 0 0 CTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJHFDDDDDDD RG:Z:HiMom.1
-HiMom:1:2101:1215:2110 4 * 0 0 * * 0 0 ATCTTTCCCCCATTAAGAACAGCAA ######################### RG:Z:HiMom.1
-HiMom:1:2101:1216:2172 4 * 0 0 * * 0 0 GGACTTCTAGGGGATTTAGCGGGGT CCCFFFFFHHHHHJJJJJJJJJJJD RG:Z:HiMom.1
-HiMom:1:2101:1216:2193 4 * 0 0 * * 0 0 AGGCATGACACTGCATTTTAAATAC @@@DDDDDHFFHHGGDFHFHIIHGG RG:Z:HiMom.1
-HiMom:1:2101:1226:2088 4 * 0 0 * * 0 0 GCTCTTCCGATCTAGGTAATAGCTA ==?BDFFFDCDDHFFFAFHDHIJGJ RG:Z:HiMom.1
-HiMom:1:2101:1231:2208 4 * 0 0 * * 0 0 AGCCAGTGTTGGTGTGTTGACTGTT @@;1ADABCF;BF<AACGCHEBHC< RG:Z:HiMom.1
-HiMom:1:2101:1233:2133 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFGHHHHJJJFDDDDDDDD RG:Z:HiMom.1
-HiMom:1:2101:1240:2197 516 * 0 0 * * 0 0 ACTGGAGATCCTTGTTACATGCCCA ??+++A:DD?:ADEE@::C4:C<E: RG:Z:HiMom.1
-HiMom:1:2101:1245:2154 4 * 0 0 * * 0 0 ACCAATCAGTAGCACCACTATACAC CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
-HiMom:1:2101:1249:2231 4 * 0 0 * * 0 0 TCTCTCGGCCTTCCACTCTAGCATA @@@FFFFFFHHGHIJJJGJIIJHIJ RG:Z:HiMom.1
-HiMom:1:2101:1258:2092 4 * 0 0 * * 0 0 TTAGACAAAACACCAAAATAAAATA ######################### RG:Z:HiMom.1
-HiMom:1:2101:1262:2128 516 * 0 0 * * 0 0 TCTTGTGGTAACTTTTCTGACACCT -(---9@;@?:8>?4:>?@###### RG:Z:HiMom.1
-HiMom:1:2101:1273:2119 516 * 0 0 * * 0 0 ATGATGGATCTTCTCTAACTTGTCA >=><AAAAA+2AA?CB4@@ABB3?A RG:Z:HiMom.1
-HiMom:1:2101:1285:2105 516 * 0 0 * * 0 0 TGTCTATATCAACCAACACCTCTTC -(0(():94:9:???########## RG:Z:HiMom.1
-HiMom:1:2101:1312:2105 4 * 0 0 * * 0 0 GTTGAGAATAGGTTGAGATCGTTTC @CCFFFDFHHFHDHIJJJJJJJIJJ RG:Z:HiMom.1
-HiMom:1:2101:1325:2083 4 * 0 0 * * 0 0 TGTGCTCTTCCGATCTGGAGAAAAA ######################### RG:Z:HiMom.1
-HiMom:1:2101:1336:2109 4 * 0 0 * * 0 0 AGACCAGAACAGCTCCAGGTGCTCC CCCFFFFFHHHHHJJJJJJCGHIJJ RG:Z:HiMom.1
-HiMom:1:2101:1349:2084 4 * 0 0 * * 0 0 AGTCTGAATCATTGGTGTCTGAAGA <5;??=>=>>?############## RG:Z:HiMom.1
-HiMom:1:2101:1365:2094 4 * 0 0 * * 0 0 GCTCTTCCGATCTTGTGCTCTTCCG CCCFFFFDHFHHGJJIIJIJJIHII RG:Z:HiMom.1
-HiMom:1:2101:1370:2116 4 * 0 0 * * 0 0 CACCATCTGACATCATGTTTGAAAG @@@DFFFDFFHDHIGBHHII<HEDB RG:Z:HiMom.1
-HiMom:1:2101:1386:2105 4 * 0 0 * * 0 0 AGGAATTATTCTTCTGCCATAAGGT B@@DDFFFHGFHHIJJJJJGIGIJH RG:Z:HiMom.1
-HiMom:1:2101:1414:2098 4 * 0 0 * * 0 0 TTGGGGCCGGTGCCGTCGGGCCCAA CCCFFFFFHHHHGJJIJJJJJJJIJ RG:Z:HiMom.1
-HiMom:1:2101:1427:2081 4 * 0 0 * * 0 0 CCGACTTCCATGGCCACCGTCCTGC CCCFFFFFHHHHHJJJIIGFIIJJI RG:Z:HiMom.1
-HiMom:1:2101:1450:2134 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CC at FDFDFFDFHFGIIE1CGGHBGE RG:Z:HiMom.1
-HiMom:1:2101:1459:2083 4 * 0 0 * * 0 0 ATTTCACCAAAATAATCAGAAGGCC CCCFFFFDBHGHHIGGIJFJJGGFH RG:Z:HiMom.1
-HiMom:1:2101:1491:2093 4 * 0 0 * * 0 0 AGAGACGGGGTCTCGCTATGTTGCC BCCDFFFFHHHHHJIIJJJJIJIJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq
deleted file mode 100644
index 5493d14..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14221:1451 1:N:0:AACTTGACGCTCTCTT
-TTTTTTTTTCTTTTACTTTTTTTTT
-+
->1>1>111>0@@31311B21AAA##
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq
deleted file mode 100644
index 4aaf72e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14221:1451 2:N:0:AACTTGACGCTCTCTT
-TTTTTTTTTCTTTTTTTTCCTTTTT
-+
-1111111>>0 at 331B00/011221A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_1.fastq
deleted file mode 100644
index 958d0d0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14221:1451 :N:0:AACTTGACGCTCTCTT
-AACTTGAC
-+
-11>AA11B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_2.fastq
deleted file mode 100644
index 3dc1787..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14221:1451 :N:0:AACTTGACGCTCTCTT
-GCTCTCTT
-+
-3>>>>DDD
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq
deleted file mode 100644
index 4f2c0e6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15405:1531 1:N:0:AAGACACTAGTCACCT
-TTTCCTTCTTTTTTTTTTTTTTTAT
-+
-11>11331 at 13111000A#######
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq
deleted file mode 100644
index fab9892..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15405:1531 2:N:0:AAGACACTAGTCACCT
-TTCTTTTTTCTTTTTCTTTGTTCTT
-+
-11111@@11>1331B11333B03A3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_1.fastq
deleted file mode 100644
index a4d53ff..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15405:1531 :N:0:AAGACACTAGTCACCT
-AAGACACT
-+
-111111>B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_2.fastq
deleted file mode 100644
index 79a9355..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15405:1531 :N:0:AAGACACTAGTCACCT
-AGTCTCCT
-+
-11>11B11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq
deleted file mode 100644
index aee1f21..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14342:1520 1:N:0:ACAGGTATCACTTCAT
-CTTTCTTTTCTCCTTTTTTTCTTTC
-+
-11>>1@@@1313111311AA0BAAA
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq
deleted file mode 100644
index 830665f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14342:1520 2:N:0:ACAGGTATCACTTCAT
-TCGTGTTTTTTCTTTTTGCTTTCCC
-+
-111>1>>>11111331A013A3111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_1.fastq
deleted file mode 100644
index 7910411..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14342:1520 :N:0:ACAGGTATCACTTCAT
-ACAGGTAT
-+
-1>111B1B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_2.fastq
deleted file mode 100644
index 1b9e646..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14342:1520 :N:0:ACAGGTATCACTTCAT
-CACTTCAT
-+
->1>>>B3@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq
deleted file mode 100644
index 67a5f80..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14133:1507 1:N:0:ACAGTTGAATCTTCTC
-TCCTCTTTGCTTTTTGCTATCACTC
-+
-111>1B1 at 313131111A33A33D1
- at machine1:HiMom:abcdeACXX:1:1101:14753:1450 1:N:0:ACAGTTGAATCTTCTC
-CTTTTTCCTCTTTTTTTCTTTTGTT
-+
-1>>>>@1131B1311100BA31100
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq
deleted file mode 100644
index 77ff2e4..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14133:1507 2:N:0:ACAGTTGAATCTTCTC
-TCCTTTATTATCTTTGTTCCTTTTT
-+
-111>>313 at 333AAA3A1333331A
- at machine1:HiMom:abcdeACXX:1:1101:14753:1450 2:N:0:ACAGTTGAATCTTCTC
-TCCCTTTTTTTTCTTTTCTCTTTTT
-+
-1111>@11@>1001331313331AA
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_1.fastq
deleted file mode 100644
index ae43ed5..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14133:1507 :N:0:ACAGTTGAATCTTCTC
-ACAGTTGA
-+
-1>11>D13
- at machine1:HiMom:abcdeACXX:1:1101:14753:1450 :N:0:ACAGTTGAATCTTCTC
-ACAGTTGA
-+
-1>11>B13
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_2.fastq
deleted file mode 100644
index 012c966..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14133:1507 :N:0:ACAGTTGAATCTTCTC
-ATCTTCTC
-+
-3>AAADDD
- at machine1:HiMom:abcdeACXX:1:1101:14753:1450 :N:0:ACAGTTGAATCTTCTC
-ATCTTCTC
-+
-3>>AAD@@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq
deleted file mode 100644
index 99ab52d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15221:1507 1:N:0:ACCAACTGCATCACTT
-CTTTTTTCTTTCTTTGTTTTTGTAT
-+
-1>1>1111@@33A3B3311000033
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq
deleted file mode 100644
index 56e7e51..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15221:1507 2:N:0:ACCAACTGCATCACTT
-CTCTTTTTTTTCTCTCTTCTTTCCT
-+
-111>13111>0013A11313B321A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_1.fastq
deleted file mode 100644
index 8ceb5f1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15221:1507 :N:0:ACCAACTGCATCACTT
-ACCAACTG
-+
-3>>33>C4
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_2.fastq
deleted file mode 100644
index 4687cc7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15221:1507 :N:0:ACCAACTGCATCACTT
-CATCACTT
-+
->1>A1BB@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq
deleted file mode 100644
index 0a726e3..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17324:1480 1:N:0:ACTAAGACGTCCTCAT
-TCTCTGTGTTTTTTTTTTTTTTACT
-+
->111>333 at 11111A000///A/1A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq
deleted file mode 100644
index 8e10143..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17324:1480 2:N:0:ACTAAGACGTCCTCAT
-CTTTTTTTTCTTCTCTTTCCTTCCT
-+
-1>>1111>00 at 333133331AA101
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_1.fastq
deleted file mode 100644
index 941ec7d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17324:1480 :N:0:ACTAAGACGTCCTCAT
-ACTAAGAC
-+
-1>>1111B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_2.fastq
deleted file mode 100644
index 86ff79a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17324:1480 :N:0:ACTAAGACGTCCTCAT
-GTCCTCAT
-+
-1>>>>D1B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq
deleted file mode 100644
index f0e0379..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15634:1526 1:N:0:AGGTGCGAGACATTAA
-TTTTTTTTTTCTTTGGTTATTTTAT
-+
-1>>>>>AA00>11B100A1BBAB2A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq
deleted file mode 100644
index 54133d1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15634:1526 2:N:0:AGGTGCGAGACATTAA
-CCTCTCTTCTTTTTTTCTCCTTTTT
-+
-111>1>131 at 131110A1B1ABBA1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_1.fastq
deleted file mode 100644
index 2271790..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15634:1526 :N:0:AGGTGCGAGACATTAA
-AGGTGCGA
-+
-111>1B11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_2.fastq
deleted file mode 100644
index 4212464..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15634:1526 :N:0:AGGTGCGAGACATTAA
-GACATTAA
-+
-11>1>B13
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq
deleted file mode 100644
index ca71c9b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17862:1503 1:N:0:AGGTTATCTTAGCCAG
-TTTTTTTCCTACTTTGCTTTAGTTT
-+
->1>1>1>1133113A11A1A1133A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq
deleted file mode 100644
index 8a2e6b6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17862:1503 2:N:0:AGGTTATCTTAGCCAG
-TCTTCCCCTTCTTTATTTATTTGCT
-+
-1>1111111>1 at AA3A3B33AA333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_1.fastq
deleted file mode 100644
index 5ac27fb..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17862:1503 :N:0:AGGTTATCTTAGCCAG
-AGGTTATC
-+
-111>>1DD
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_2.fastq
deleted file mode 100644
index c62a121..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17862:1503 :N:0:AGGTTATCTTAGCCAG
-TTAGCCAG
-+
->>11>B11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq
deleted file mode 100644
index 370c768..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14369:1492 1:N:0:AGTTGCTTTGACTTGG
-TTTCTTCTTTCTTTTTGTAAAGTTT
-+
-1>>11333 at B3BB31111333333B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq
deleted file mode 100644
index 0ee84dd..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14369:1492 2:N:0:AGTTGCTTTGACTTGG
-TCCTTCTTTTTCTCTTTTTTTTCTT
-+
-1>11>@1131111AAAAA1100011
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_1.fastq
deleted file mode 100644
index 84ab91b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14369:1492 :N:0:AGTTGCTTTGACTTGG
-AGTTGCTT
-+
-11>>1 at DF
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_2.fastq
deleted file mode 100644
index 3f2aa6e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14369:1492 :N:0:AGTTGCTTTGACTTGG
-TGACTTGG
-+
->33>>B at 4
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq
deleted file mode 100644
index 30ea53a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17049:1423 1:N:0:ATAGCGTCTTGGTCTG
-CTCTTTTCTTTCTTTCTCTTCCTCT
-+
-1>111 at 13@3333A33A3331111A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq
deleted file mode 100644
index 6bd92e7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17049:1423 2:N:0:ATAGCGTCTTGGTCTG
-TTTTCTCCTCCTCTTCCTCTTTTTT
-+
-1111113111111111111113110
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq
deleted file mode 100644
index ae3a57f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17049:1423 :N:0:ATAGCGTCTTGGTCTG
-ATAGCGTC
-+
-1>1111>>
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq
deleted file mode 100644
index 60138f2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17049:1423 :N:0:ATAGCGTCTTGGTCTG
-TTGGTCTG
-+
->>11>BB1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq
deleted file mode 100644
index 46a43c6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15479:1337 1:N:0:CAATAGTCCGACTCTC
-CTCTCTTTTTTTTCTTTTTTATTCT
-+
-1111113311110013311001222
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq
deleted file mode 100644
index afaf667..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15479:1337 2:N:0:CAATAGTCCGACTCTC
-TTTTCCTTCCTTTCTCTTCCCTCCT
-+
-111111 at 311133133331111111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_1.fastq
deleted file mode 100644
index 6784a4f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15479:1337 :N:0:CAATAGTCCGACTCTC
-CAATAGTC
-+
->11>11B@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_2.fastq
deleted file mode 100644
index c091895..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15479:1337 :N:0:CAATAGTCCGACTCTC
-CGACTCTC
-+
->111>>@@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq
deleted file mode 100644
index b4b7b25..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17475:1506 1:N:0:CAGCAAGGGCGATATT
-TCTTTTTTTTTCTCTCGTGTGTTGG
-+
->111>B11>0>013310A0A0BB##
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq
deleted file mode 100644
index 32b5754..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17475:1506 2:N:0:CAGCAAGGGCGATATT
-CCTTTTTCTTTTCTCTCCTCTTTCC
-+
-11111111 at 33131331111A1331
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_1.fastq
deleted file mode 100644
index 5d54f92..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17475:1506 :N:0:CAGCAAGGGCGATATT
-CAGCAAGG
-+
->11>1111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_2.fastq
deleted file mode 100644
index 85e8e4b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17475:1506 :N:0:CAGCAAGGGCGATATT
-GCGATATT
-+
-1>11>1>B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq
deleted file mode 100644
index bd849a7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13678:1483 1:N:0:CAGCGGTAAGTACTGC
-TCTTTTCTTTTTTTTTTTCTTTTTT
-+
->1>>>131331111000A01AB###
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq
deleted file mode 100644
index 6d2e7f1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13678:1483 2:N:0:CAGCGGTAAGTACTGC
-TTTTTTTTCTTTCCTCTCTTTTTTT
-+
-11111111013331A##########
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_1.fastq
deleted file mode 100644
index 37ac86f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13678:1483 :N:0:CAGCGGTAAGTACTGC
-CAGCGGTA
-+
->11111>1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_2.fastq
deleted file mode 100644
index d3894f2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13678:1483 :N:0:CAGCGGTAAGTACTGC
-TGTACTGC
-+
-11>11 at 31
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq
deleted file mode 100644
index 364e991..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13947:1464 1:N:0:CATGCTTATAGCATTG
-CTCCTTTTCTTCTTCTTCTCTTTTT
-+
-1>11113 at 313331331331A3311
- at machine1:HiMom:abcdeACXX:1:1101:17987:1524 1:N:0:CATGCTTATAGCATTG
-CCTCTTTTTCTGTTTTTTTTGCTGG
-+
-111>11 at 111133331110001B11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq
deleted file mode 100644
index b8e9574..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13947:1464 2:N:0:CATGCTTATAGCATTG
-TTTTTTTTTCCCTCCCCTTTCCCTT
-+
-1111111100111000000111111
- at machine1:HiMom:abcdeACXX:1:1101:17987:1524 2:N:0:CATGCTTATAGCATTG
-TCTTCTTTTCTTTCTTCTTTATTTG
-+
-111>13131313A3A33A1A33A33
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_1.fastq
deleted file mode 100644
index 5ded8ed..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13947:1464 :N:0:CATGCTTATAGCATTG
-CATGCTTT
-+
-11>1>B at 3
- at machine1:HiMom:abcdeACXX:1:1101:17987:1524 :N:0:CATGCTTATAGCATTG
-CATGCTTA
-+
-A3>3>DF5
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_2.fastq
deleted file mode 100644
index dc13b1d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13947:1464 :N:0:CATGCTTATAGCATTG
-TAGCATTG
-+
->11>1 at 31
- at machine1:HiMom:abcdeACXX:1:1101:17987:1524 :N:0:CATGCTTATAGCATTG
-TAGCATTT
-+
->11>13B3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq
deleted file mode 100644
index dcd4ce2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16357:1518 1:N:0:CCAGAGCTCAACTGAT
-GTCTTCTGCTTCGCTCACGCTGGGT
-+
-1>>>>3 at 113B311AA1111A0000
- at machine1:HiMom:abcdeACXX:1:1101:17387:1497 1:N:0:CCAGAGCTCAACTGAT
-CCCCTTTTTTGTTGTGCTTTAGCCT
-+
-111>>111111111A01B3311111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq
deleted file mode 100644
index 2e61400..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16357:1518 2:N:0:CCAGAGCTCAACTGAT
-TCCTTCTCTCTTTTTTTTTAATTCT
-+
->1111111B at BB311AA0001ABAB
- at machine1:HiMom:abcdeACXX:1:1101:17387:1497 2:N:0:CCAGAGCTCAACTGAT
-CTTTTTGTCTTTCTTCCCCCTGCTT
-+
-111>11113@@@3333111AA0011
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_1.fastq
deleted file mode 100644
index 7336722..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16357:1518 :N:0:CCAGAGCTCAACTGAT
-CCAGAGCT
-+
->A3334>D
- at machine1:HiMom:abcdeACXX:1:1101:17387:1497 :N:0:CCAGAGCTCAACTGAT
-CCAGAGCT
-+
->>1111BD
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_2.fastq
deleted file mode 100644
index b4a32a4..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16357:1518 :N:0:CCAGAGCTCAACTGAT
-CAACTGAT
-+
->33AAB4B
- at machine1:HiMom:abcdeACXX:1:1101:17387:1497 :N:0:CCAGAGCTCAACTGAT
-CAACTGAT
-+
->11>>11@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq
deleted file mode 100644
index 61981c1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17516:1540 1:N:0:CCTATGCCAATTGGCC
-CTTTCGTTTTTCTTTCCTATACATC
-+
-1>>1111B>1>1B3331B3A11333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq
deleted file mode 100644
index 2f76d89..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17516:1540 2:N:0:CCTATGCCAATTGGCC
-TTCTTTTTTTTCCCTTTCCCTTTTC
-+
-1>111 at B@11>0111B11AA1A112
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_1.fastq
deleted file mode 100644
index 267a06e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17516:1540 :N:0:CCTATGCCAATTGGCC
-CCTATGCC
-+
-AAA3>4 at B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_2.fastq
deleted file mode 100644
index 683c65a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17516:1540 :N:0:CCTATGCCAATTGGCC
-AATTGGCC
-+
-11>>11>1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq
deleted file mode 100644
index db6d5c0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15248:1531 1:N:0:CCTTCGCAGAATCGAC
-CCCTACCTGTCTGCTATCCATCCCC
-+
-111>11111B1311313A13B111A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq
deleted file mode 100644
index a021705..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15248:1531 2:N:0:CCTTCGCAGAATCGAC
-TTCTCCTTCTATTTCTCTTGTCTTC
-+
-11111@@B@@3333333331A1333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_1.fastq
deleted file mode 100644
index 533b5f3..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15248:1531 :N:0:CCTTCGCAGAATCGAC
-CCTTCGCA
-+
-AAAAA?A3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_2.fastq
deleted file mode 100644
index 5d65d47..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15248:1531 :N:0:CCTTCGCAGAATCGAC
-GAATCGAC
-+
-111>>11>
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq
deleted file mode 100644
index e1d88fa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17615:1538 1:N:0:CGCTATGTTTCACCTT
-CTTTTTTTTTTTTCCTTTTTTTCTT
-+
->>>>11110000A011AA1A//0A1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq
deleted file mode 100644
index feb4ac9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17615:1538 2:N:0:CGCTATGTTTCACCTT
-TTCTTTCCTTTTCTTTTTTCTGTTT
-+
-11>1133133 at 131331111A3333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_1.fastq
deleted file mode 100644
index 8153796..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17615:1538 :N:0:CGCTATGTTTCACCTT
-CGCTATGT
-+
->11>1>1B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_2.fastq
deleted file mode 100644
index 82ee466..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17615:1538 :N:0:CGCTATGTTTCACCTT
-TTCTCCTT
-+
-1>>11B at 1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq
deleted file mode 100644
index d951b85..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14790:1540 1:N:0:CTACCAGGTTCTTGGC
-TTCTCTCTTTTCTCTTTCTTGTTGT
-+
-A>1>13113313A3AAAAAB11B1B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq
deleted file mode 100644
index ecd158b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14790:1540 2:N:0:CTACCAGGTTCTTGGC
-CTCTGTATTTTCCTTTTTCTTCTTT
-+
-11111 at 33@@33133A1BB1A3A1B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_1.fastq
deleted file mode 100644
index 16c71bb..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14790:1540 :N:0:CTACCAGGTTCTTGGC
-CTACCAGG
-+
-A>3AAB43
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_2.fastq
deleted file mode 100644
index c1eaa7c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14790:1540 :N:0:CTACCAGGTTCTTGGC
-TTCTTGGC
-+
-AAAAA5 at 4
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq
deleted file mode 100644
index 2c85fd8..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15029:1349 1:N:0:CTGTAATCCTATTAGC
-CTTCTCCTTTTCTTTTTTTTTTTTT
-+
-1>11111113 at 313A##########
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq
deleted file mode 100644
index b08b11e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15029:1349 2:N:0:CTGTAATCCTATTAGC
-TTTCTTTTTCTTTTTTCTTTCTTTT
-+
-1111>3 at 111133111113333331
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_1.fastq
deleted file mode 100644
index 8f8ea09..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15029:1349 :N:0:CTGTAATCCTATTAGC
-CTGTAATC
-+
->>1>13B@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_2.fastq
deleted file mode 100644
index bd1085d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15029:1349 :N:0:CTGTAATCCTATTAGC
-CTATTAGC
-+
-111>>331
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq
deleted file mode 100644
index 87fbffe..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16241:1505 1:N:0:GACCAGGACCATCACA
-CTTCTTTTTTTTCTTCCCTTTGCTC
-+
-11>1113 at 11100A331011A1111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq
deleted file mode 100644
index 0d4b943..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16241:1505 2:N:0:GACCAGGACCATCACA
-CTGTGGTTTTTTTCTTGTCTTTTCC
-+
-111>11111111001A111333AA1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_1.fastq
deleted file mode 100644
index d3688bf..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16241:1505 :N:0:GACCAGGACCATCACA
-GACCAGGA
-+
-11>>1111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_2.fastq
deleted file mode 100644
index e7e1b08..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16241:1505 :N:0:GACCAGGACCATCACA
-CCATCACA
-+
-1>1>>1B1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq
deleted file mode 100644
index 9f9d53c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13789:1486 1:N:0:GCCGTCGAAGGTACCA
-CTTTTTTCTTCCTCTTTCTTTTTCT
-+
-1111111113311AAB33333A10A
- at machine1:HiMom:abcdeACXX:1:1101:14791:1400 1:N:0:GCCGTCGAAGGTACCA
-TTTTTTTCTTTTTCTTTTTTTCTTT
-+
->>1>>111 at 3@@11A3B1BA001A1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq
deleted file mode 100644
index 9965eed..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13789:1486 2:N:0:GCCGTCGAAGGTACCA
-TTTTTCTCTCCTTCTCTTCTCCTTC
-+
-1111111331111111331311111
- at machine1:HiMom:abcdeACXX:1:1101:14791:1400 2:N:0:GCCGTCGAAGGTACCA
-TCCTTTTTCTTTCCTTTTCTTTTTT
-+
-111>131 at 1133313331313311A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_1.fastq
deleted file mode 100644
index 0121ed3..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13789:1486 :N:0:GCCGTCGAAGGTACCA
-GCCGTCGA
-+
-11>1>>11
- at machine1:HiMom:abcdeACXX:1:1101:14791:1400 :N:0:GCCGTCGAAGGTACCA
-GCCGTCGA
-+
-1>>1>>11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_2.fastq
deleted file mode 100644
index c99048d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13789:1486 :N:0:GCCGTCGAAGGTACCA
-TGGTACCC
-+
-111>1B at 1
- at machine1:HiMom:abcdeACXX:1:1101:14791:1400 :N:0:GCCGTCGAAGGTACCA
-AGGTACCC
-+
-111>1 at B1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq
deleted file mode 100644
index ac36e67..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14517:1469 1:N:0:GCCTAGCCCTTGAATC
-TTTCTTTTTTTTCCCTTTCCTCTTT
-+
->111133111>001111111B1111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq
deleted file mode 100644
index 6f4224a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14517:1469 2:N:0:GCCTAGCCCTTGAATC
-CCTCCTTTTTCTTCTTTTCCTTTTT
-+
-11111113111133AA3A313331A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_1.fastq
deleted file mode 100644
index 2dbb4aa..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14517:1469 :N:0:GCCTAGCCCTTGAATC
-GCCTAGCC
-+
-11>>11 at B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_2.fastq
deleted file mode 100644
index 905f5f1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14517:1469 :N:0:GCCTAGCCCTTGAATC
-CTTGAATC
-+
-11>111 at 3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq
deleted file mode 100644
index 2bcbb35..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14857:1542 1:N:0:GTATAACAAATTCAAC
-TTTTCTCTTTTTGTTTTTTTCTTCT
-+
-1>>>1 at 33B3111ABB11AA01333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq
deleted file mode 100644
index b99a457..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14857:1542 2:N:0:GTATAACAAATTCAAC
-TCTTCCTTTTTTTTTTTTCTTTCTT
-+
-111111133@@110000/AB1122A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_1.fastq
deleted file mode 100644
index a78dd3a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14857:1542 :N:0:GTATAACAAATTCAAC
-GTATAACA
-+
-1>1>1311
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_2.fastq
deleted file mode 100644
index e6580a2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:14857:1542 :N:0:GTATAACAAATTCAAC
-TATTCAAC
-+
-11>>>33@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq
deleted file mode 100644
index 2a4f95b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16578:1461 1:N:0:GTCTGATGGAACTTCG
-TTTTTTCTCTTTTTTTTGTTTCTGC
-+
->1>111113@@31A0A0000B2B21
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq
deleted file mode 100644
index dfea9e0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16578:1461 2:N:0:GTCTGATGGAACTTCG
-CTTTTTCTTTCTTTTTCTCTCTTCT
-+
-111111>133333311113A11313
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_1.fastq
deleted file mode 100644
index 5ba3fed..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16578:1461 :N:0:GTCTGATGGAACTTCG
-GTCTGATG
-+
-11>>11B1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_2.fastq
deleted file mode 100644
index 1bc3bc6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16578:1461 :N:0:GTCTGATGGAACTTCG
-GAACTTCG
-+
-111>>3B1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.1.fastq
deleted file mode 100644
index f2b882a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.1.fastq
+++ /dev/null
@@ -1,76 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13743:1511 1:N:0:
-TCCTTCTTTTCCCTCCCCTTTCCTT
-+
->11>111@@@3111A111ABA1133
- at machine1:HiMom:abcdeACXX:1:1101:13844:1536 1:N:0:
-TTTCTTTTTTCTTTTCCCTTTATTT
-+
-1111>3311111331311B111333
- at machine1:HiMom:abcdeACXX:1:1101:14281:1532 1:N:0:
-CTTTTTTCCTTTTTTTCTTTTTTCT
-+
-1>>11111133 at 1A00013311A01
- at machine1:HiMom:abcdeACXX:1:1101:14340:1451 1:N:0:
-TTTTTTCCTTCTCCCCTTTTTCCTT
-+
->11111113311111111111013A
- at machine1:HiMom:abcdeACXX:1:1101:14809:1476 1:N:0:
-TTTTTCCCTTTCTCTTTTCTTTTCT
-+
->1>>111111113333313AAA131
- at machine1:HiMom:abcdeACXX:1:1101:14852:1366 1:N:0:
-TTCTCTCCCTCTTTTTTTCTTCTTT
-+
-111>1311111113A1AA0133313
- at machine1:HiMom:abcdeACXX:1:1101:14927:1516 1:N:0:
-CTCCTTTTCTCTTTTCCCCCTGTGC
-+
-11111 at 3131333313111111111
- at machine1:HiMom:abcdeACXX:1:1101:14943:1353 1:N:0:
-TTTTTTTTTCTTTTTTTTTTTTTTT
-+
-1>1>111100 at 33A###########
- at machine1:HiMom:abcdeACXX:1:1101:15334:1365 1:N:0:
-TTTTTTTCTTCTCTTTCTTTTCTTT
-+
-111>111113331333333B13133
- at machine1:HiMom:abcdeACXX:1:1101:15424:1475 1:N:0:
-CTTTTTTCTTTTTCTTTTTTTTTCT
-+
-1>>11 at 1113311113311000001
- at machine1:HiMom:abcdeACXX:1:1101:15736:1478 1:N:0:
-CCTCTCTTTTTTCCTTTCCCTGCCT
-+
-1111111 at 3B1111A33111A1001
- at machine1:HiMom:abcdeACXX:1:1101:15785:1528 1:N:0:
-CTTTTTTTTTTCTCTCTTTTTTTTT
-+
-11>111>100001221B########
- at machine1:HiMom:abcdeACXX:1:1101:15865:1540 1:N:0:
-GCTTTCCTTGTTTTCTGTCCCCTTC
-+
-11111113311BB13A33A111B10
- at machine1:HiMom:abcdeACXX:1:1101:15987:1510 1:N:0:
-CTTTTTTTTTTTCCCTTTTTACCTT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:15998:1432 1:N:0:
-TTCTTCCTCTTCTTCTTCTTCCTTT
-+
-111>131111113133133A31133
- at machine1:HiMom:abcdeACXX:1:1101:16070:1386 1:N:0:
-TTTTTTTTTTTTTTTTCCTTCCTTT
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:16085:1467 1:N:0:
-TTTTTTCCTTTTCTTTTCCTCTTCT
-+
-1>>11>113B31313A13131111A
- at machine1:HiMom:abcdeACXX:1:1101:16098:1529 1:N:0:
-TTTTTTTTTTCTCTCCCTTTCTCTT
-+
-1>1>>11100012210001112222
- at machine1:HiMom:abcdeACXX:1:1101:16530:1425 1:N:0:
-TTTTTTTTTTTTTTCTTTTTTTTTT
-+
-1111>>110000A############
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.2.fastq
deleted file mode 100644
index 1f892c7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.2.fastq
+++ /dev/null
@@ -1,76 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13743:1511 2:N:0:
-CCCCCTTCCCTCTTTTTTCCTTCCC
-+
-1111111111 at 11131100133100
- at machine1:HiMom:abcdeACXX:1:1101:13844:1536 2:N:0:
-TCTTCTTTTTTTTTTTTCTTTTCCT
-+
-111113131111A############
- at machine1:HiMom:abcdeACXX:1:1101:14281:1532 2:N:0:
-TTTCTCTTTTTTTTTCTCCCTTCCT
-+
->111133331111000121001001
- at machine1:HiMom:abcdeACXX:1:1101:14340:1451 2:N:0:
-TCCCTTCCTCCCCTCCTTCTTTTTC
-+
-1111111111111111111113110
- at machine1:HiMom:abcdeACXX:1:1101:14809:1476 2:N:0:
-TCTCTTTTTCTTTTTTCTCCTTTCT
-+
->111133111133111113111313
- at machine1:HiMom:abcdeACXX:1:1101:14852:1366 2:N:0:
-TCCTTTTTCTTTTCTTTTCTTTTCC
-+
-1111131111331313313133131
- at machine1:HiMom:abcdeACXX:1:1101:14927:1516 2:N:0:
-TTCCTCCCCCTCCTCCCCCTCCCTC
-+
-11111111>1111111100000A00
- at machine1:HiMom:abcdeACXX:1:1101:14943:1353 2:N:0:
-CTCCCTTTTTTTTTTCTTCCTCTCT
-+
-1111111111110000112111101
- at machine1:HiMom:abcdeACXX:1:1101:15334:1365 2:N:0:
-TCTCTCTTTCTTCTCTTTTTTTTTT
-+
-1111111333333313331110000
- at machine1:HiMom:abcdeACXX:1:1101:15424:1475 2:N:0:
-TTCCTTCTTTCCTTCTCTCTTTCTT
-+
-1111131113313311131133333
- at machine1:HiMom:abcdeACXX:1:1101:15736:1478 2:N:0:
-CTCTTCCCTTTCCCCCTCTTCTTCT
-+
-111>111111111111A11113A33
- at machine1:HiMom:abcdeACXX:1:1101:15785:1528 2:N:0:
-TCTTCTCTTTCTCTTTTTCTTTTCT
-+
-1111131 at 3@3333331A1133131
- at machine1:HiMom:abcdeACXX:1:1101:15865:1540 2:N:0:
-CTTTTTTATTTTCCTTTTGCATCCT
-+
-11111111333 at 31333B1133301
- at machine1:HiMom:abcdeACXX:1:1101:15987:1510 2:N:0:
-TTCCCCTTCCCTTCTCTTTTCTTCT
-+
-111111>1111 at 1111333131333
- at machine1:HiMom:abcdeACXX:1:1101:15998:1432 2:N:0:
-CTTTTTTTCTTTTCTCCTCCTTTTT
-+
-11111 at 111@3313A31A000131A
- at machine1:HiMom:abcdeACXX:1:1101:16070:1386 2:N:0:
-TTTTTTTTCTCTCTTTTTTTTTTTT
-+
-11111111013311331A#######
- at machine1:HiMom:abcdeACXX:1:1101:16085:1467 2:N:0:
-TTTTTTTTTTTTCCTCTTTTTTTCC
-+
-#########################
- at machine1:HiMom:abcdeACXX:1:1101:16098:1529 2:N:0:
-CCCTCTCCACTTTTCTTTCCTCCCT
-+
-11111>1111111331333131110
- at machine1:HiMom:abcdeACXX:1:1101:16530:1425 2:N:0:
-TTCTTTCCCTTTTCTTTTCCTTCTC
-+
-1111133111111313313133111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.barcode_1.fastq
deleted file mode 100644
index e53e969..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.barcode_1.fastq
+++ /dev/null
@@ -1,76 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13743:1511 :N:0:
-ATTATCAA
-+
-1>>1>B33
- at machine1:HiMom:abcdeACXX:1:1101:13844:1536 :N:0:
-TCCCCGTT
-+
->1111111
- at machine1:HiMom:abcdeACXX:1:1101:14281:1532 :N:0:
-CCTTCTTT
-+
-111111B3
- at machine1:HiMom:abcdeACXX:1:1101:14340:1451 :N:0:
-TTCCTCCT
-+
-11111111
- at machine1:HiMom:abcdeACXX:1:1101:14809:1476 :N:0:
-GCTATCCA
-+
-1111>>13
- at machine1:HiMom:abcdeACXX:1:1101:14852:1366 :N:0:
-AGGTCGCA
-+
-111>>1>1
- at machine1:HiMom:abcdeACXX:1:1101:14927:1516 :N:0:
-GTCTGATG
-+
-1>>111 at 1
- at machine1:HiMom:abcdeACXX:1:1101:14943:1353 :N:0:
-CTCCCTCT
-+
-11111>11
- at machine1:HiMom:abcdeACXX:1:1101:15334:1365 :N:0:
-TGTATCTC
-+
-11111333
- at machine1:HiMom:abcdeACXX:1:1101:15424:1475 :N:0:
-CCTCTTCT
-+
-11111 at 1B
- at machine1:HiMom:abcdeACXX:1:1101:15736:1478 :N:0:
-ATTGTCTG
-+
-1>>1>BD1
- at machine1:HiMom:abcdeACXX:1:1101:15785:1528 :N:0:
-CCCGATTT
-+
-11111111
- at machine1:HiMom:abcdeACXX:1:1101:15865:1540 :N:0:
-TTCCCCAG
-+
-111>11>1
- at machine1:HiMom:abcdeACXX:1:1101:15987:1510 :N:0:
-CCTCTTTC
-+
-1111>13B
- at machine1:HiMom:abcdeACXX:1:1101:15998:1432 :N:0:
-CATGTTCG
-+
->1>11 at 31
- at machine1:HiMom:abcdeACXX:1:1101:16070:1386 :N:0:
-TGTCGGTT
-+
->1>1111>
- at machine1:HiMom:abcdeACXX:1:1101:16085:1467 :N:0:
-ACCTACTG
-+
-1>>111 at 1
- at machine1:HiMom:abcdeACXX:1:1101:16098:1529 :N:0:
-TTCTCATC
-+
-11>>1331
- at machine1:HiMom:abcdeACXX:1:1101:16530:1425 :N:0:
-CCTATTCT
-+
->1111333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.barcode_2.fastq
deleted file mode 100644
index 73d7126..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/NN.barcode_2.fastq
+++ /dev/null
@@ -1,76 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13743:1511 :N:0:
-CACCATAC
-+
-11>>111>
- at machine1:HiMom:abcdeACXX:1:1101:13844:1536 :N:0:
-CCAACTTC
-+
->111>B13
- at machine1:HiMom:abcdeACXX:1:1101:14281:1532 :N:0:
-TATCATTT
-+
-111>13B3
- at machine1:HiMom:abcdeACXX:1:1101:14340:1451 :N:0:
-CACCATCC
-+
-11>111B1
- at machine1:HiMom:abcdeACXX:1:1101:14809:1476 :N:0:
-CCTCCCCC
-+
-11>11>11
- at machine1:HiMom:abcdeACXX:1:1101:14852:1366 :N:0:
-TTCCTTTC
-+
-1>>>>B31
- at machine1:HiMom:abcdeACXX:1:1101:14927:1516 :N:0:
-TCACTTCC
-+
-111>>1B1
- at machine1:HiMom:abcdeACXX:1:1101:14943:1353 :N:0:
-TCCTTCTT
-+
-1111>111
- at machine1:HiMom:abcdeACXX:1:1101:15334:1365 :N:0:
-TTACTCTT
-+
-11111131
- at machine1:HiMom:abcdeACXX:1:1101:15424:1475 :N:0:
-CTCGCTTT
-+
-11111111
- at machine1:HiMom:abcdeACXX:1:1101:15736:1478 :N:0:
-GATTCACA
-+
-11>>>313
- at machine1:HiMom:abcdeACXX:1:1101:15785:1528 :N:0:
-TCTCTCCC
-+
-11>11111
- at machine1:HiMom:abcdeACXX:1:1101:15865:1540 :N:0:
-TGCTTTTA
-+
-1>111 at 13
- at machine1:HiMom:abcdeACXX:1:1101:15987:1510 :N:0:
-TTCTGCTC
-+
-11111131
- at machine1:HiMom:abcdeACXX:1:1101:15998:1432 :N:0:
-CGCCTTTT
-+
-111111 at B
- at machine1:HiMom:abcdeACXX:1:1101:16070:1386 :N:0:
-TTTTGCTT
-+
-11>>11 at 1
- at machine1:HiMom:abcdeACXX:1:1101:16085:1467 :N:0:
-CTTCCCTT
-+
-111>1B@@
- at machine1:HiMom:abcdeACXX:1:1101:16098:1529 :N:0:
-TTCCTTCC
-+
-11111311
- at machine1:HiMom:abcdeACXX:1:1101:16530:1425 :N:0:
-TCGTTTTC
-+
-1111>1>@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq
deleted file mode 100644
index 77adb41..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13898:1519 1:N:0:TACTTAGCGTCTGCAC
-CCTTCTCTACTTTTTTTTCTATTTT
-+
-111>111B31 at 33311A0A1333BA
- at machine1:HiMom:abcdeACXX:1:1101:14983:1536 1:N:0:TACTTAGCGTCTGCAC
-CCTTCTTCTTGTTCCCTCGCCAGGC
-+
-11>>1113 at B11133AA111A0000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq
deleted file mode 100644
index 5cac4d9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13898:1519 2:N:0:TACTTAGCGTCTGCAC
-TTTTTTCTTTTCTCTTCCTCTTTTC
-+
-11>11111 at 3131A3A111A11313
- at machine1:HiMom:abcdeACXX:1:1101:14983:1536 2:N:0:TACTTAGCGTCTGCAC
-TCCTTATCCTTTTTACTGCCCTGTA
-+
-1111>331@@331A11A311111B3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_1.fastq
deleted file mode 100644
index bde2930..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13898:1519 :N:0:TACTTAGCGTCTGCAC
-TACTTAGC
-+
-A3>AA55B
- at machine1:HiMom:abcdeACXX:1:1101:14983:1536 :N:0:TACTTAGCGTCTGCAC
-TACTTAGC
-+
-A3AAAB5@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_2.fastq
deleted file mode 100644
index ae3d55a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13898:1519 :N:0:TACTTAGCGTCTGCAC
-GTCTGCAC
-+
-1>>>113B
- at machine1:HiMom:abcdeACXX:1:1101:14983:1536 :N:0:TACTTAGCGTCTGCAC
-GTCTGCAC
-+
-1>>>1 at 3C
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq
deleted file mode 100644
index 60a3c0c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17106:1463 1:N:0:TCCTTGGTGCTGCACT
-TTTCTTTTTTTTCTTTTCTCTTCCT
-+
-11>113 at 1111>0A3A131333111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq
deleted file mode 100644
index 1c953fe..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17106:1463 2:N:0:TCCTTGGTGCTGCACT
-TTCATTTTCTTCTTTTTCTTCCTCT
-+
-1111133331333131111331111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_1.fastq
deleted file mode 100644
index 0519c0e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17106:1463 :N:0:TCCTTGGTGCTGCACT
-TCCTTGGT
-+
-1>>>A111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_2.fastq
deleted file mode 100644
index a127011..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17106:1463 :N:0:TCCTTGGTGCTGCACT
-GCTGCACT
-+
-11>111 at 1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq
deleted file mode 100644
index 1258713..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15287:1512 1:N:0:TCGCCTTGCCAACGCT
-CCTCCTCCTTTTATTTCTTTTCCCT
-+
-111111>1B131333333331A111
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq
deleted file mode 100644
index 42bddd1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15287:1512 2:N:0:TCGCCTTGCCAACGCT
-CTTTTTTCTTTTTTTCGTCTTTCTT
-+
-1111111113 at 111000000A2221
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_1.fastq
deleted file mode 100644
index 4a06f22..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15287:1512 :N:0:TCGCCTTGCCAACGCT
-TCGCCTTG
-+
->A11>>A1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_2.fastq
deleted file mode 100644
index cbe5481..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15287:1512 :N:0:TCGCCTTGCCAACGCT
-CCAACGCT
-+
-1>11>1>1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq
deleted file mode 100644
index f4d00bc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13416:1538 1:N:0:TGCAAGTACGAACTTC
-TTTTGTCTATCACTTTGTTTATTCA
-+
->11>11333333311A13113BBA3
- at machine1:HiMom:abcdeACXX:1:1101:16315:1534 1:N:0:TGCAAGTACGAACTTC
-TTTCTGTTTTATTCTTTTCTTATGT
-+
->1>113333B333333AB31A331D
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq
deleted file mode 100644
index 15e3d34..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13416:1538 2:N:0:TGCAAGTACGAACTTC
-TTTTCTTCCCTTTCTTTCTCTGTTT
-+
-111111331111B133A33333D33
- at machine1:HiMom:abcdeACXX:1:1101:16315:1534 2:N:0:TGCAAGTACGAACTTC
-TTTTTCTCCTCCTTTTTTTGTTCCT
-+
-111111131 at 11A1A111000B333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_1.fastq
deleted file mode 100644
index eb3cc6c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_1.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13416:1538 :N:0:TGCAAGTACGAACTTC
-TGCAAGTA
-+
->1>111B3
- at machine1:HiMom:abcdeACXX:1:1101:16315:1534 :N:0:TGCAAGTACGAACTTC
-TGCAAGTA
-+
->1>111B3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_2.fastq
deleted file mode 100644
index 3226f6e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_2.fastq
+++ /dev/null
@@ -1,8 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:13416:1538 :N:0:TGCAAGTACGAACTTC
-CGAACTTC
-+
->111>1 at B
- at machine1:HiMom:abcdeACXX:1:1101:16315:1534 :N:0:TGCAAGTACGAACTTC
-CGAACTTC
-+
-1111>>@@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq
deleted file mode 100644
index 934a92d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15028:1491 1:N:0:TGCTCGACTTCACAGA
-TTTTTTTTTTTTTTTTTTTTTTTTT
-+
->1>>111>>000/A###########
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq
deleted file mode 100644
index 179bc18..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15028:1491 2:N:0:TGCTCGACTTCACAGA
-TTCTTTTTTTTCTTTTTTTTTCTCT
-+
-1111131111001331100//0A22
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_1.fastq
deleted file mode 100644
index 980ce72..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15028:1491 :N:0:TGCTCGACTTCACAGA
-TGCTCGAC
-+
->11>>11>
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_2.fastq
deleted file mode 100644
index 4a925c7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15028:1491 :N:0:TGCTCGACTTCACAGA
-TTCACAGT
-+
-1>111311
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq
deleted file mode 100644
index 307c316..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15439:1540 1:N:0:TGTAATCACCTCTAAC
-CTTCTTTCATATTCTTAAATTTGCA
-+
-1>>11B333B333ABA331ABA333
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq
deleted file mode 100644
index 788beb6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15439:1540 2:N:0:TGTAATCACCTCTAAC
-TTTTGTTTGAGTGTTATAGAAACAG
-+
-111>11BB111113B3333313110
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_1.fastq
deleted file mode 100644
index d1d82fd..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15439:1540 :N:0:TGTAATCACCTCTAAC
-TGTAATCA
-+
-A?A3?FF5
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_2.fastq
deleted file mode 100644
index 96c6c7a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:15439:1540 :N:0:TGTAATCACCTCTAAC
-CCTCTAAC
-+
-AAAAA45D
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq
deleted file mode 100644
index 721c088..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16256:1385 1:N:0:TGTTCCGAAACCTCTT
-TTTCTCTTTTTTTTTCCTTTTTTTT
-+
->>11>3 at 3@@11AAA01A22AA0/A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq
deleted file mode 100644
index df55ba2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16256:1385 2:N:0:TGTTCCGAAACCTCTT
-TCTTTTTCTTTTTTCTTTTCTCTTT
-+
-11111111 at 33111113A13A3A33
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_1.fastq
deleted file mode 100644
index 6e3bf8b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16256:1385 :N:0:TGTTCCGAAACCTCTT
-TGTTCCGA
-+
->1>>>B11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_2.fastq
deleted file mode 100644
index 455640c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16256:1385 :N:0:TGTTCCGAAACCTCTT
-AACCTCTT
-+
-11>>>>B1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq
deleted file mode 100644
index 1ff4d1e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17703:1479 1:N:0:TTAATCAGCTGGTATT
-TTTTTTTTTTCCTCCTTTTTTTCCT
-+
-111111110001110012A1//01A
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq
deleted file mode 100644
index 5f97d3b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17703:1479 2:N:0:TTAATCAGCTGGTATT
-TCTTTTTTCCTTCTCTTTTTTCTTT
-+
-11111 at 1111331113331100133
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_1.fastq
deleted file mode 100644
index 0ab8920..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17703:1479 :N:0:TTAATCAGCTGGTATT
-TTAATCAG
-+
-1>11>D31
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_2.fastq
deleted file mode 100644
index 97df4c8..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:17703:1479 :N:0:TTAATCAGCTGGTATT
-CTGGTATT
-+
-1111>1B@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq
deleted file mode 100644
index 2d8f858..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16819:1536 1:N:0:TTATATCTTCATGTCT
-TTTTTTTGTTTTGTCCTTTCTTCCT
-+
->1>111>1111>0A3AA33AAB31B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq
deleted file mode 100644
index f31ded3..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16819:1536 2:N:0:TTATATCTTCATGTCT
-TTTTTTTTTCATCCCTCTCTTCCCT
-+
-1>1>>>>>>0333A010A0A2A101
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_1.fastq
deleted file mode 100644
index 1dc9e36..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16819:1536 :N:0:TTATATCTTCATGTCT
-TTATATCT
-+
->A1>1BDD
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_2.fastq
deleted file mode 100644
index 29a141d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16819:1536 :N:0:TTATATCTTCATGTCT
-TCATGTCT
-+
->>1>1BB3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_1.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_2.fastq
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq
deleted file mode 100644
index 704a027..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16891:1545 1:N:0:TTGAATAGATATCCGA
-CTTTTGCCTGTGTTTTTTCTCTCAT
-+
-1>1>>11111B1BABA11AAA3A13
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq
deleted file mode 100644
index 73d7067..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16891:1545 2:N:0:TTGAATAGATATCCGA
-CTTTTTTCTGACTTTCTTCTAGACT
-+
-11>1>1>>13311A3AB3AB33313
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_1.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_1.fastq
deleted file mode 100644
index 01ad3c2..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_1.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16891:1545 :N:0:TTGAATAGATATCCGA
-TTGAATAG
-+
->A333B54
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_2.fastq b/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_2.fastq
deleted file mode 100644
index b94b113..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_2.fastq
+++ /dev/null
@@ -1,4 +0,0 @@
- at machine1:HiMom:abcdeACXX:1:1101:16891:1545 :N:0:TTGAATAGATATCCGA
-ATATCCGA
-+
-1>>AAD11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AACTTGAC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AACTTGAC.sam
deleted file mode 100644
index 57e8020..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AACTTGAC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AACTTGAC-GCTCTCTT LB:LN_AACTTGACGCTCTCTT SM:SA_AACTTGACGCTCTCTT CN:BI
-HiMom:1:1101:14221:1451 589 * 0 0 * * 0 0 TTTTTTTTTCTTTTACTTTTTTTTT >1>1>111>0@@31311B21AAA## RG:Z:HiMom.1
-HiMom:1:1101:14221:1451 653 * 0 0 * * 0 0 TTTTTTTTTCTTTTTTTTCCTTTTT 1111111>>0 at 331B00/011221A RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AAGACACT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AAGACACT.sam
deleted file mode 100644
index 75fa9b3..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AAGACACT.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AAGACACT-AGTCTCCT LB:LN_AAGACACTAGTCTCCT SM:SA_AAGACACTAGTCTCCT CN:BI
-HiMom:1:1101:15405:1531 589 * 0 0 * * 0 0 TTTCCTTCTTTTTTTTTTTTTTTAT 11>11331 at 13111000A####### RG:Z:HiMom.1
-HiMom:1:1101:15405:1531 653 * 0 0 * * 0 0 TTCTTTTTTCTTTTTCTTTGTTCTT 11111@@11>1331B11333B03A3 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam
deleted file mode 100644
index 80f7080..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACAGGTAT-CACTTCAT LB:LN_ACAGGTATCACTTCAT SM:SA_ACAGGTATCACTTCAT CN:BI
-HiMom:1:1101:14342:1520 589 * 0 0 * * 0 0 CTTTCTTTTCTCCTTTTTTTCTTTC 11>>1@@@1313111311AA0BAAA RG:Z:HiMom.1
-HiMom:1:1101:14342:1520 653 * 0 0 * * 0 0 TCGTGTTTTTTCTTTTTGCTTTCCC 111>1>>>11111331A013A3111 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam
deleted file mode 100644
index 11cfedc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACAGTTGA-ATCTTCTC LB:LN_ACAGTTGAATCTTCTC SM:SA_ACAGTTGAATCTTCTC CN:BI
-HiMom:1:1101:14133:1507 589 * 0 0 * * 0 0 TCCTCTTTGCTTTTTGCTATCACTC 111>1B1 at 313131111A33A33D1 RG:Z:HiMom.1
-HiMom:1:1101:14133:1507 653 * 0 0 * * 0 0 TCCTTTATTATCTTTGTTCCTTTTT 111>>313 at 333AAA3A1333331A RG:Z:HiMom.1
-HiMom:1:1101:14753:1450 589 * 0 0 * * 0 0 CTTTTTCCTCTTTTTTTCTTTTGTT 1>>>>@1131B1311100BA31100 RG:Z:HiMom.1
-HiMom:1:1101:14753:1450 653 * 0 0 * * 0 0 TCCCTTTTTTTTCTTTTCTCTTTTT 1111>@11@>1001331313331AA RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACCAACTG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACCAACTG.sam
deleted file mode 100644
index f3e7c05..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACCAACTG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACCAACTG-CATCACTT LB:LN_ACCAACTGCATCACTT SM:SA_ACCAACTGCATCACTT CN:BI
-HiMom:1:1101:15221:1507 589 * 0 0 * * 0 0 CTTTTTTCTTTCTTTGTTTTTGTAT 1>1>1111@@33A3B3311000033 RG:Z:HiMom.1
-HiMom:1:1101:15221:1507 653 * 0 0 * * 0 0 CTCTTTTTTTTCTCTCTTCTTTCCT 111>13111>0013A11313B321A RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACCTACTG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACCTACTG.sam
deleted file mode 100644
index 8ad7c10..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACCTACTG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACCTACTG-CTTCCCTT LB:LN_ACCTACTGCTTCCCTT SM:SA_ACCTACTGCTTCCCTT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam
deleted file mode 100644
index 8aa38c5..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ACTAAGAC-GTCCTCAT LB:LN_ACTAAGACGTCCTCAT SM:SA_ACTAAGACGTCCTCAT CN:BI
-HiMom:1:1101:17324:1480 589 * 0 0 * * 0 0 TCTCTGTGTTTTTTTTTTTTTTACT >111>333 at 11111A000///A/1A RG:Z:HiMom.1
-HiMom:1:1101:17324:1480 653 * 0 0 * * 0 0 CTTTTTTTTCTTCTCTTTCCTTCCT 1>>1111>00 at 333133331AA101 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam
deleted file mode 100644
index 03219df..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGGTCGCA-TTCCTTTC LB:LN_AGGTCGCATTCCTTTC SM:SA_AGGTCGCATTCCTTTC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam
deleted file mode 100644
index bae890f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGGTGCGA-GACATTAA LB:LN_AGGTGCGAGACATTAA SM:SA_AGGTGCGAGACATTAA CN:BI
-HiMom:1:1101:15634:1526 589 * 0 0 * * 0 0 TTTTTTTTTTCTTTGGTTATTTTAT 1>>>>>AA00>11B100A1BBAB2A RG:Z:HiMom.1
-HiMom:1:1101:15634:1526 653 * 0 0 * * 0 0 CCTCTCTTCTTTTTTTCTCCTTTTT 111>1>131 at 131110A1B1ABBA1 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTTATC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTTATC.sam
deleted file mode 100644
index cb41e6a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGGTTATC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGGTTATC-TTAGCCAG LB:LN_AGGTTATCTTAGCCAG SM:SA_AGGTTATCTTAGCCAG CN:BI
-HiMom:1:1101:17862:1503 589 * 0 0 * * 0 0 TTTTTTTCCTACTTTGCTTTAGTTT >1>1>1>1133113A11A1A1133A RG:Z:HiMom.1
-HiMom:1:1101:17862:1503 653 * 0 0 * * 0 0 TCTTCCCCTTCTTTATTTATTTGCT 1>1111111>1 at AA3A3B33AA333 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam
deleted file mode 100644
index 2948939..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.AGTTGCTT-TGACTTGG LB:LN_AGTTGCTTTGACTTGG SM:SA_AGTTGCTTTGACTTGG CN:BI
-HiMom:1:1101:14369:1492 589 * 0 0 * * 0 0 TTTCTTCTTTCTTTTTGTAAAGTTT 1>>11333 at B3BB31111333333B RG:Z:HiMom.1
-HiMom:1:1101:14369:1492 653 * 0 0 * * 0 0 TCCTTCTTTTTCTCTTTTTTTTCTT 1>11>@1131111AAAAA1100011 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam
deleted file mode 100644
index efd072d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ATAGCGTC-TTGGTCTG LB:LN_ATAGCGTCTTGGTCTG SM:SA_ATAGCGTCTTGGTCTG CN:BI
-HiMom:1:1101:17049:1423 589 * 0 0 * * 0 0 CTCTTTTCTTTCTTTCTCTTCCTCT 1>111 at 13@3333A33A3331111A RG:Z:HiMom.1
-HiMom:1:1101:17049:1423 653 * 0 0 * * 0 0 TTTTCTCCTCCTCTTCCTCTTTTTT 1111113111111111111113110 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATTATCAA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATTATCAA.sam
deleted file mode 100644
index 422b7c7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATTATCAA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ATTATCAA-CACCATAC LB:LN_ATTATCAACACCATAC SM:SA_ATTATCAACACCATAC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam
deleted file mode 100644
index fec0fd0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.ATTGTCTG-GATTCACA LB:LN_ATTGTCTGGATTCACA SM:SA_ATTGTCTGGATTCACA CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAATAGTC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAATAGTC.sam
deleted file mode 100644
index 6fa6e2d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAATAGTC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAATAGTC-CGACTCTC LB:LN_CAATAGTCCGACTCTC SM:SA_CAATAGTCCGACTCTC CN:BI
-HiMom:1:1101:15479:1337 589 * 0 0 * * 0 0 CTCTCTTTTTTTTCTTTTTTATTCT 1111113311110013311001222 RG:Z:HiMom.1
-HiMom:1:1101:15479:1337 653 * 0 0 * * 0 0 TTTTCCTTCCTTTCTCTTCCCTCCT 111111 at 311133133331111111 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam
deleted file mode 100644
index 04b4be8..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAGCAAGG-GCGATATT LB:LN_CAGCAAGGGCGATATT SM:SA_CAGCAAGGGCGATATT CN:BI
-HiMom:1:1101:17475:1506 589 * 0 0 * * 0 0 TCTTTTTTTTTCTCTCGTGTGTTGG >111>B11>0>013310A0A0BB## RG:Z:HiMom.1
-HiMom:1:1101:17475:1506 653 * 0 0 * * 0 0 CCTTTTTCTTTTCTCTCCTCTTTCC 11111111 at 33131331111A1331 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam
deleted file mode 100644
index 3b2ed89..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CAGCGGTA-AGTACTGC LB:LN_CAGCGGTAAGTACTGC SM:SA_CAGCGGTAAGTACTGC CN:BI
-HiMom:1:1101:13678:1483 589 * 0 0 * * 0 0 TCTTTTCTTTTTTTTTTTCTTTTTT >1>>>131331111000A01AB### RG:Z:HiMom.1
-HiMom:1:1101:13678:1483 653 * 0 0 * * 0 0 TTTTTTTTCTTTCCTCTCTTTTTTT 11111111013331A########## RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGCTTA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGCTTA.sam
deleted file mode 100644
index e53745f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGCTTA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CATGCTTA-TAGCATTT LB:LN_CATGCTTATAGCATTT SM:SA_CATGCTTATAGCATTT CN:BI
-HiMom:1:1101:13947:1464 589 * 0 0 * * 0 0 CTCCTTTTCTTCTTCTTCTCTTTTT 1>11113 at 313331331331A3311 RG:Z:HiMom.1
-HiMom:1:1101:13947:1464 653 * 0 0 * * 0 0 TTTTTTTTTCCCTCCCCTTTCCCTT 1111111100111000000111111 RG:Z:HiMom.1
-HiMom:1:1101:17987:1524 589 * 0 0 * * 0 0 CCTCTTTTTCTGTTTTTTTTGCTGG 111>11 at 111133331110001B11 RG:Z:HiMom.1
-HiMom:1:1101:17987:1524 653 * 0 0 * * 0 0 TCTTCTTTTCTTTCTTCTTTATTTG 111>13131313A3A33A1A33A33 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGCTTT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGCTTT.sam
deleted file mode 100644
index bf025ee..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGCTTT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CATGCTTT-TAGCATTG LB:LN_CATGCTTTTAGCATTG SM:SA_CATGCTTTTAGCATTG CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGTTCG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGTTCG.sam
deleted file mode 100644
index ecd136d..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CATGTTCG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CATGTTCG-CGCCTTTT LB:LN_CATGTTCGCGCCTTTT SM:SA_CATGTTCGCGCCTTTT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam
deleted file mode 100644
index ab66e3a..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCAGAGCT-CAACTGAT LB:LN_CCAGAGCTCAACTGAT SM:SA_CCAGAGCTCAACTGAT CN:BI
-HiMom:1:1101:16357:1518 589 * 0 0 * * 0 0 GTCTTCTGCTTCGCTCACGCTGGGT 1>>>>3 at 113B311AA1111A0000 RG:Z:HiMom.1
-HiMom:1:1101:16357:1518 653 * 0 0 * * 0 0 TCCTTCTCTCTTTTTTTTTAATTCT >1111111B at BB311AA0001ABAB RG:Z:HiMom.1
-HiMom:1:1101:17387:1497 589 * 0 0 * * 0 0 CCCCTTTTTTGTTGTGCTTTAGCCT 111>>111111111A01B3311111 RG:Z:HiMom.1
-HiMom:1:1101:17387:1497 653 * 0 0 * * 0 0 CTTTTTGTCTTTCTTCCCCCTGCTT 111>11113@@@3333111AA0011 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCCGATTT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCCGATTT.sam
deleted file mode 100644
index 6245307..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCCGATTT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCCGATTT-TCTCTCCC LB:LN_CCCGATTTTCTCTCCC SM:SA_CCCGATTTTCTCTCCC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTATGCC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTATGCC.sam
deleted file mode 100644
index 79bf0d7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTATGCC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCTATGCC-AATTGGCC LB:LN_CCTATGCCAATTGGCC SM:SA_CCTATGCCAATTGGCC CN:BI
-HiMom:1:1101:17516:1540 589 * 0 0 * * 0 0 CTTTCGTTTTTCTTTCCTATACATC 1>>1111B>1>1B3331B3A11333 RG:Z:HiMom.1
-HiMom:1:1101:17516:1540 653 * 0 0 * * 0 0 TTCTTTTTTTTCCCTTTCCCTTTTC 1>111 at B@11>0111B11AA1A112 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTATTCT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTATTCT.sam
deleted file mode 100644
index 0d02f5f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTATTCT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCTATTCT-TCGTTTTC LB:LN_CCTATTCTTCGTTTTC SM:SA_CCTATTCTTCGTTTTC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam
deleted file mode 100644
index bdf0d9e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCTCTTCT-CTCGCTTT LB:LN_CCTCTTCTCTCGCTTT SM:SA_CCTCTTCTCTCGCTTT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam
deleted file mode 100644
index 8024be1..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCTCTTTC-TTCTGCTC LB:LN_CCTCTTTCTTCTGCTC SM:SA_CCTCTTTCTTCTGCTC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam
deleted file mode 100644
index 95ea56b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCTTCGCA-GAATCGAC LB:LN_CCTTCGCAGAATCGAC SM:SA_CCTTCGCAGAATCGAC CN:BI
-HiMom:1:1101:15248:1531 589 * 0 0 * * 0 0 CCCTACCTGTCTGCTATCCATCCCC 111>11111B1311313A13B111A RG:Z:HiMom.1
-HiMom:1:1101:15248:1531 653 * 0 0 * * 0 0 TTCTCCTTCTATTTCTCTTGTCTTC 11111@@B@@3333333331A1333 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam
deleted file mode 100644
index b2904b4..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CCTTCTTT-TATCATTT LB:LN_CCTTCTTTTATCATTT SM:SA_CCTTCTTTTATCATTT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CGCTATGT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CGCTATGT.sam
deleted file mode 100644
index af2e6f7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CGCTATGT.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CGCTATGT-TTCACCTT LB:LN_CGCTATGTTTCACCTT SM:SA_CGCTATGTTTCACCTT CN:BI
-HiMom:1:1101:17615:1538 589 * 0 0 * * 0 0 CTTTTTTTTTTTTCCTTTTTTTCTT >>>>11110000A011AA1A//0A1 RG:Z:HiMom.1
-HiMom:1:1101:17615:1538 653 * 0 0 * * 0 0 TTCTTTCCTTTTCTTTTTTCTGTTT 11>1133133 at 131331111A3333 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTACCAGG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTACCAGG.sam
deleted file mode 100644
index 6297e7e..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTACCAGG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTACCAGG-TTCTTGGC LB:LN_CTACCAGGTTCTTGGC SM:SA_CTACCAGGTTCTTGGC CN:BI
-HiMom:1:1101:14790:1540 589 * 0 0 * * 0 0 TTCTCTCTTTTCTCTTTCTTGTTGT A>1>13113313A3AAAAAB11B1B RG:Z:HiMom.1
-HiMom:1:1101:14790:1540 653 * 0 0 * * 0 0 CTCTGTATTTTCCTTTTTCTTCTTT 11111 at 33@@33133A1BB1A3A1B RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam
deleted file mode 100644
index 26105ec..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTCCCTCT-TCCTTCTT LB:LN_CTCCCTCTTCCTTCTT SM:SA_CTCCCTCTTCCTTCTT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTGTAATC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTGTAATC.sam
deleted file mode 100644
index 235ef32..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/CTGTAATC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.CTGTAATC-CTATTAGC LB:LN_CTGTAATCCTATTAGC SM:SA_CTGTAATCCTATTAGC CN:BI
-HiMom:1:1101:15029:1349 589 * 0 0 * * 0 0 CTTCTCCTTTTCTTTTTTTTTTTTT 1>11111113 at 313A########## RG:Z:HiMom.1
-HiMom:1:1101:15029:1349 653 * 0 0 * * 0 0 TTTCTTTTTCTTTTTTCTTTCTTTT 1111>3 at 111133111113333331 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GACCAGGA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GACCAGGA.sam
deleted file mode 100644
index f333f4f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GACCAGGA.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GACCAGGA-CCATCACA LB:LN_GACCAGGACCATCACA SM:SA_GACCAGGACCATCACA CN:BI
-HiMom:1:1101:16241:1505 589 * 0 0 * * 0 0 CTTCTTTTTTTTCTTCCCTTTGCTC 11>1113 at 11100A331011A1111 RG:Z:HiMom.1
-HiMom:1:1101:16241:1505 653 * 0 0 * * 0 0 CTGTGGTTTTTTTCTTGTCTTTTCC 111>11111111001A111333AA1 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam
deleted file mode 100644
index 4b1178c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GCCGTCGA-TGGTACCC LB:LN_GCCGTCGATGGTACCC SM:SA_GCCGTCGATGGTACCC CN:BI
-HiMom:1:1101:13789:1486 589 * 0 0 * * 0 0 CTTTTTTCTTCCTCTTTCTTTTTCT 1111111113311AAB33333A10A RG:Z:HiMom.1
-HiMom:1:1101:13789:1486 653 * 0 0 * * 0 0 TTTTTCTCTCCTTCTCTTCTCCTTC 1111111331111111331311111 RG:Z:HiMom.1
-HiMom:1:1101:14791:1400 589 * 0 0 * * 0 0 TTTTTTTCTTTTTCTTTTTTTCTTT >>1>>111 at 3@@11A3B1BA001A1 RG:Z:HiMom.1
-HiMom:1:1101:14791:1400 653 * 0 0 * * 0 0 TCCTTTTTCTTTCCTTTTCTTTTTT 111>131 at 1133313331313311A RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam
deleted file mode 100644
index 58acb3b..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GCCTAGCC-CTTGAATC LB:LN_GCCTAGCCCTTGAATC SM:SA_GCCTAGCCCTTGAATC CN:BI
-HiMom:1:1101:14517:1469 589 * 0 0 * * 0 0 TTTCTTTTTTTTCCCTTTCCTCTTT >111133111>001111111B1111 RG:Z:HiMom.1
-HiMom:1:1101:14517:1469 653 * 0 0 * * 0 0 CCTCCTTTTTCTTCTTTTCCTTTTT 11111113111133AA3A313331A RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCTATCCA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCTATCCA.sam
deleted file mode 100644
index efa1bfc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GCTATCCA.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GCTATCCA-CCTCCCCC LB:LN_GCTATCCACCTCCCCC SM:SA_GCTATCCACCTCCCCC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GTATAACA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GTATAACA.sam
deleted file mode 100644
index 9b3ff62..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GTATAACA.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GTATAACA-TATTCAAC LB:LN_GTATAACATATTCAAC SM:SA_GTATAACATATTCAAC CN:BI
-HiMom:1:1101:14857:1542 589 * 0 0 * * 0 0 TTTTCTCTTTTTGTTTTTTTCTTCT 1>>>1 at 33B3111ABB11AA01333 RG:Z:HiMom.1
-HiMom:1:1101:14857:1542 653 * 0 0 * * 0 0 TCTTCCTTTTTTTTTTTTCTTTCTT 111111133@@110000/AB1122A RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GTCTGATG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GTCTGATG.sam
deleted file mode 100644
index f45a307..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/GTCTGATG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.GTCTGATG-TCACTTCC LB:LN_GTCTGATGTCACTTCC SM:SA_GTCTGATGTCACTTCC CN:BI
-HiMom:1:1101:16578:1461 589 * 0 0 * * 0 0 TTTTTTCTCTTTTTTTTGTTTCTGC >1>111113@@31A0A0000B2B21 RG:Z:HiMom.1
-HiMom:1:1101:16578:1461 653 * 0 0 * * 0 0 CTTTTTCTTTCTTTTTCTCTCTTCT 111111>133333311113A11313 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/N.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/N.sam
deleted file mode 100644
index 473afc5..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/N.sam
+++ /dev/null
@@ -1,40 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.N-N LB:LN_N SM:SA_N CN:BI
-HiMom:1:1101:13743:1511 589 * 0 0 * * 0 0 TCCTTCTTTTCCCTCCCCTTTCCTT >11>111@@@3111A111ABA1133 BC:Z:ATTATCAA-CACCATAC RG:Z:HiMom.1
-HiMom:1:1101:13743:1511 653 * 0 0 * * 0 0 CCCCCTTCCCTCTTTTTTCCTTCCC 1111111111 at 11131100133100 BC:Z:ATTATCAA-CACCATAC RG:Z:HiMom.1
-HiMom:1:1101:13844:1536 589 * 0 0 * * 0 0 TTTCTTTTTTCTTTTCCCTTTATTT 1111>3311111331311B111333 BC:Z:TCCCCGTT-CCAACTTC RG:Z:HiMom.1
-HiMom:1:1101:13844:1536 653 * 0 0 * * 0 0 TCTTCTTTTTTTTTTTTCTTTTCCT 111113131111A############ BC:Z:TCCCCGTT-CCAACTTC RG:Z:HiMom.1
-HiMom:1:1101:14281:1532 589 * 0 0 * * 0 0 CTTTTTTCCTTTTTTTCTTTTTTCT 1>>11111133 at 1A00013311A01 BC:Z:CCTTCTTT-TATCATTT RG:Z:HiMom.1
-HiMom:1:1101:14281:1532 653 * 0 0 * * 0 0 TTTCTCTTTTTTTTTCTCCCTTCCT >111133331111000121001001 BC:Z:CCTTCTTT-TATCATTT RG:Z:HiMom.1
-HiMom:1:1101:14340:1451 589 * 0 0 * * 0 0 TTTTTTCCTTCTCCCCTTTTTCCTT >11111113311111111111013A BC:Z:TTCCTCCT-CACCATCC RG:Z:HiMom.1
-HiMom:1:1101:14340:1451 653 * 0 0 * * 0 0 TCCCTTCCTCCCCTCCTTCTTTTTC 1111111111111111111113110 BC:Z:TTCCTCCT-CACCATCC RG:Z:HiMom.1
-HiMom:1:1101:14809:1476 589 * 0 0 * * 0 0 TTTTTCCCTTTCTCTTTTCTTTTCT >1>>111111113333313AAA131 BC:Z:GCTATCCA-CCTCCCCC RG:Z:HiMom.1
-HiMom:1:1101:14809:1476 653 * 0 0 * * 0 0 TCTCTTTTTCTTTTTTCTCCTTTCT >111133111133111113111313 BC:Z:GCTATCCA-CCTCCCCC RG:Z:HiMom.1
-HiMom:1:1101:14852:1366 589 * 0 0 * * 0 0 TTCTCTCCCTCTTTTTTTCTTCTTT 111>1311111113A1AA0133313 BC:Z:AGGTCGCA-TTCCTTTC RG:Z:HiMom.1
-HiMom:1:1101:14852:1366 653 * 0 0 * * 0 0 TCCTTTTTCTTTTCTTTTCTTTTCC 1111131111331313313133131 BC:Z:AGGTCGCA-TTCCTTTC RG:Z:HiMom.1
-HiMom:1:1101:14927:1516 589 * 0 0 * * 0 0 CTCCTTTTCTCTTTTCCCCCTGTGC 11111 at 3131333313111111111 BC:Z:GTCTGATG-TCACTTCC RG:Z:HiMom.1
-HiMom:1:1101:14927:1516 653 * 0 0 * * 0 0 TTCCTCCCCCTCCTCCCCCTCCCTC 11111111>1111111100000A00 BC:Z:GTCTGATG-TCACTTCC RG:Z:HiMom.1
-HiMom:1:1101:14943:1353 589 * 0 0 * * 0 0 TTTTTTTTTCTTTTTTTTTTTTTTT 1>1>111100 at 33A########### BC:Z:CTCCCTCT-TCCTTCTT RG:Z:HiMom.1
-HiMom:1:1101:14943:1353 653 * 0 0 * * 0 0 CTCCCTTTTTTTTTTCTTCCTCTCT 1111111111110000112111101 BC:Z:CTCCCTCT-TCCTTCTT RG:Z:HiMom.1
-HiMom:1:1101:15334:1365 589 * 0 0 * * 0 0 TTTTTTTCTTCTCTTTCTTTTCTTT 111>111113331333333B13133 BC:Z:TGTATCTC-TTACTCTT RG:Z:HiMom.1
-HiMom:1:1101:15334:1365 653 * 0 0 * * 0 0 TCTCTCTTTCTTCTCTTTTTTTTTT 1111111333333313331110000 BC:Z:TGTATCTC-TTACTCTT RG:Z:HiMom.1
-HiMom:1:1101:15424:1475 589 * 0 0 * * 0 0 CTTTTTTCTTTTTCTTTTTTTTTCT 1>>11 at 1113311113311000001 BC:Z:CCTCTTCT-CTCGCTTT RG:Z:HiMom.1
-HiMom:1:1101:15424:1475 653 * 0 0 * * 0 0 TTCCTTCTTTCCTTCTCTCTTTCTT 1111131113313311131133333 BC:Z:CCTCTTCT-CTCGCTTT RG:Z:HiMom.1
-HiMom:1:1101:15736:1478 589 * 0 0 * * 0 0 CCTCTCTTTTTTCCTTTCCCTGCCT 1111111 at 3B1111A33111A1001 BC:Z:ATTGTCTG-GATTCACA RG:Z:HiMom.1
-HiMom:1:1101:15736:1478 653 * 0 0 * * 0 0 CTCTTCCCTTTCCCCCTCTTCTTCT 111>111111111111A11113A33 BC:Z:ATTGTCTG-GATTCACA RG:Z:HiMom.1
-HiMom:1:1101:15785:1528 589 * 0 0 * * 0 0 CTTTTTTTTTTCTCTCTTTTTTTTT 11>111>100001221B######## BC:Z:CCCGATTT-TCTCTCCC RG:Z:HiMom.1
-HiMom:1:1101:15785:1528 653 * 0 0 * * 0 0 TCTTCTCTTTCTCTTTTTCTTTTCT 1111131 at 3@3333331A1133131 BC:Z:CCCGATTT-TCTCTCCC RG:Z:HiMom.1
-HiMom:1:1101:15865:1540 589 * 0 0 * * 0 0 GCTTTCCTTGTTTTCTGTCCCCTTC 11111113311BB13A33A111B10 BC:Z:TTCCCCAG-TGCTTTTA RG:Z:HiMom.1
-HiMom:1:1101:15865:1540 653 * 0 0 * * 0 0 CTTTTTTATTTTCCTTTTGCATCCT 11111111333 at 31333B1133301 BC:Z:TTCCCCAG-TGCTTTTA RG:Z:HiMom.1
-HiMom:1:1101:15987:1510 589 * 0 0 * * 0 0 CTTTTTTTTTTTCCCTTTTTACCTT ######################### BC:Z:CCTCTTTC-TTCTGCTC RG:Z:HiMom.1
-HiMom:1:1101:15987:1510 653 * 0 0 * * 0 0 TTCCCCTTCCCTTCTCTTTTCTTCT 111111>1111 at 1111333131333 BC:Z:CCTCTTTC-TTCTGCTC RG:Z:HiMom.1
-HiMom:1:1101:15998:1432 589 * 0 0 * * 0 0 TTCTTCCTCTTCTTCTTCTTCCTTT 111>131111113133133A31133 BC:Z:CATGTTCG-CGCCTTTT RG:Z:HiMom.1
-HiMom:1:1101:15998:1432 653 * 0 0 * * 0 0 CTTTTTTTCTTTTCTCCTCCTTTTT 11111 at 111@3313A31A000131A BC:Z:CATGTTCG-CGCCTTTT RG:Z:HiMom.1
-HiMom:1:1101:16070:1386 589 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTCCTTCCTTT ######################### BC:Z:TGTCGGTT-TTTTGCTT RG:Z:HiMom.1
-HiMom:1:1101:16070:1386 653 * 0 0 * * 0 0 TTTTTTTTCTCTCTTTTTTTTTTTT 11111111013311331A####### BC:Z:TGTCGGTT-TTTTGCTT RG:Z:HiMom.1
-HiMom:1:1101:16085:1467 589 * 0 0 * * 0 0 TTTTTTCCTTTTCTTTTCCTCTTCT 1>>11>113B31313A13131111A BC:Z:ACCTACTG-CTTCCCTT RG:Z:HiMom.1
-HiMom:1:1101:16085:1467 653 * 0 0 * * 0 0 TTTTTTTTTTTTCCTCTTTTTTTCC ######################### BC:Z:ACCTACTG-CTTCCCTT RG:Z:HiMom.1
-HiMom:1:1101:16098:1529 589 * 0 0 * * 0 0 TTTTTTTTTTCTCTCCCTTTCTCTT 1>1>>11100012210001112222 BC:Z:TTCTCATC-TTCCTTCC RG:Z:HiMom.1
-HiMom:1:1101:16098:1529 653 * 0 0 * * 0 0 CCCTCTCCACTTTTCTTTCCTCCCT 11111>1111111331333131110 BC:Z:TTCTCATC-TTCCTTCC RG:Z:HiMom.1
-HiMom:1:1101:16530:1425 589 * 0 0 * * 0 0 TTTTTTTTTTTTTTCTTTTTTTTTT 1111>>110000A############ BC:Z:CCTATTCT-TCGTTTTC RG:Z:HiMom.1
-HiMom:1:1101:16530:1425 653 * 0 0 * * 0 0 TTCTTTCCCTTTTCTTTTCCTTCTC 1111133111111313313133111 BC:Z:CCTATTCT-TCGTTTTC RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TACTTAGC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TACTTAGC.sam
deleted file mode 100644
index 20b89bb..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TACTTAGC.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TACTTAGC-GTCTGCAC LB:LN_TACTTAGCGTCTGCAC SM:SA_TACTTAGCGTCTGCAC CN:BI
-HiMom:1:1101:13898:1519 589 * 0 0 * * 0 0 CCTTCTCTACTTTTTTTTCTATTTT 111>111B31 at 33311A0A1333BA RG:Z:HiMom.1
-HiMom:1:1101:13898:1519 653 * 0 0 * * 0 0 TTTTTTCTTTTCTCTTCCTCTTTTC 11>11111 at 3131A3A111A11313 RG:Z:HiMom.1
-HiMom:1:1101:14983:1536 589 * 0 0 * * 0 0 CCTTCTTCTTGTTCCCTCGCCAGGC 11>>1113 at B11133AA111A0000 RG:Z:HiMom.1
-HiMom:1:1101:14983:1536 653 * 0 0 * * 0 0 TCCTTATCCTTTTTACTGCCCTGTA 1111>331@@331A11A311111B3 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam
deleted file mode 100644
index 44a3c3c..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TCCCCGTT-CCAACTTC LB:LN_TCCCCGTTCCAACTTC SM:SA_TCCCCGTTCCAACTTC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam
deleted file mode 100644
index 84531c8..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TCCTTGGT-GCTGCACT LB:LN_TCCTTGGTGCTGCACT SM:SA_TCCTTGGTGCTGCACT CN:BI
-HiMom:1:1101:17106:1463 589 * 0 0 * * 0 0 TTTCTTTTTTTTCTTTTCTCTTCCT 11>113 at 1111>0A3A131333111 RG:Z:HiMom.1
-HiMom:1:1101:17106:1463 653 * 0 0 * * 0 0 TTCATTTTCTTCTTTTTCTTCCTCT 1111133331333131111331111 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam
deleted file mode 100644
index 070cfe7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TCGCCTTG-CCAACGCT LB:LN_TCGCCTTGCCAACGCT SM:SA_TCGCCTTGCCAACGCT CN:BI
-HiMom:1:1101:15287:1512 589 * 0 0 * * 0 0 CCTCCTCCTTTTATTTCTTTTCCCT 111111>1B131333333331A111 RG:Z:HiMom.1
-HiMom:1:1101:15287:1512 653 * 0 0 * * 0 0 CTTTTTTCTTTTTTTCGTCTTTCTT 1111111113 at 111000000A2221 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam
deleted file mode 100644
index 149c745..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGCAAGTA-CGAACTTC LB:LN_TGCAAGTACGAACTTC SM:SA_TGCAAGTACGAACTTC CN:BI
-HiMom:1:1101:13416:1538 589 * 0 0 * * 0 0 TTTTGTCTATCACTTTGTTTATTCA >11>11333333311A13113BBA3 RG:Z:HiMom.1
-HiMom:1:1101:13416:1538 653 * 0 0 * * 0 0 TTTTCTTCCCTTTCTTTCTCTGTTT 111111331111B133A33333D33 RG:Z:HiMom.1
-HiMom:1:1101:16315:1534 589 * 0 0 * * 0 0 TTTCTGTTTTATTCTTTTCTTATGT >1>113333B333333AB31A331D RG:Z:HiMom.1
-HiMom:1:1101:16315:1534 653 * 0 0 * * 0 0 TTTTTCTCCTCCTTTTTTTGTTCCT 111111131 at 11A1A111000B333 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam
deleted file mode 100644
index 966ff62..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGCTCGAC-TTCACAGT LB:LN_TGCTCGACTTCACAGT SM:SA_TGCTCGACTTCACAGT CN:BI
-HiMom:1:1101:15028:1491 589 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT >1>>111>>000/A########### RG:Z:HiMom.1
-HiMom:1:1101:15028:1491 653 * 0 0 * * 0 0 TTCTTTTTTTTCTTTTTTTTTCTCT 1111131111001331100//0A22 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTAATCA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTAATCA.sam
deleted file mode 100644
index a3ec1f7..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTAATCA.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGTAATCA-CCTCTAAC LB:LN_TGTAATCACCTCTAAC SM:SA_TGTAATCACCTCTAAC CN:BI
-HiMom:1:1101:15439:1540 589 * 0 0 * * 0 0 CTTCTTTCATATTCTTAAATTTGCA 1>>11B333B333ABA331ABA333 RG:Z:HiMom.1
-HiMom:1:1101:15439:1540 653 * 0 0 * * 0 0 TTTTGTTTGAGTGTTATAGAAACAG 111>11BB111113B3333313110 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTATCTC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTATCTC.sam
deleted file mode 100644
index 696634f..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTATCTC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGTATCTC-TTACTCTT LB:LN_TGTATCTCTTACTCTT SM:SA_TGTATCTCTTACTCTT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam
deleted file mode 100644
index b7b00bc..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGTCGGTT-TTTTGCTT LB:LN_TGTCGGTTTTTTGCTT SM:SA_TGTCGGTTTTTTGCTT CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam
deleted file mode 100644
index fc9e0d9..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TGTTCCGA-AACCTCTT LB:LN_TGTTCCGAAACCTCTT SM:SA_TGTTCCGAAACCTCTT CN:BI
-HiMom:1:1101:16256:1385 589 * 0 0 * * 0 0 TTTCTCTTTTTTTTTCCTTTTTTTT >>11>3 at 3@@11AAA01A22AA0/A RG:Z:HiMom.1
-HiMom:1:1101:16256:1385 653 * 0 0 * * 0 0 TCTTTTTCTTTTTTCTTTTCTCTTT 11111111 at 33111113A13A3A33 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTAATCAG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTAATCAG.sam
deleted file mode 100644
index 1d4b2b6..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTAATCAG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TTAATCAG-CTGGTATT LB:LN_TTAATCAGCTGGTATT SM:SA_TTAATCAGCTGGTATT CN:BI
-HiMom:1:1101:17703:1479 589 * 0 0 * * 0 0 TTTTTTTTTTCCTCCTTTTTTTCCT 111111110001110012A1//01A RG:Z:HiMom.1
-HiMom:1:1101:17703:1479 653 * 0 0 * * 0 0 TCTTTTTTCCTTCTCTTTTTTCTTT 11111 at 1111331113331100133 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTATATCT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTATATCT.sam
deleted file mode 100644
index 8629fa0..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTATATCT.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TTATATCT-TCATGTCT LB:LN_TTATATCTTCATGTCT SM:SA_TTATATCTTCATGTCT CN:BI
-HiMom:1:1101:16819:1536 589 * 0 0 * * 0 0 TTTTTTTGTTTTGTCCTTTCTTCCT >1>111>1111>0A3AA33AAB31B RG:Z:HiMom.1
-HiMom:1:1101:16819:1536 653 * 0 0 * * 0 0 TTTTTTTTTCATCCCTCTCTTCCCT 1>1>>>>>>0333A010A0A2A101 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam
deleted file mode 100644
index a651187..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TTCCCCAG-TGCTTTTA LB:LN_TTCCCCAGTGCTTTTA SM:SA_TTCCCCAGTGCTTTTA CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam
deleted file mode 100644
index 67c6e54..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TTCCTCCT-CACCATCC LB:LN_TTCCTCCTCACCATCC SM:SA_TTCCTCCTCACCATCC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCTCATC.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCTCATC.sam
deleted file mode 100644
index 9294d00..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTCTCATC.sam
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TTCTCATC-TTCCTTCC LB:LN_TTCTCATCTTCCTTCC SM:SA_TTCTCATCTTCCTTCC CN:BI
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTGAATAG.sam b/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTGAATAG.sam
deleted file mode 100644
index ce84c28..0000000
--- a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/TTGAATAG.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.4 SO:queryname
- at RG ID:HiMom.1 PL:illumina PU:HiMom.1.TTGAATAG-ATATCCGA LB:LN_TTGAATAGATATCCGA SM:SA_TTGAATAGATATCCGA CN:BI
-HiMom:1:1101:16891:1545 589 * 0 0 * * 0 0 CTTTTGCCTGTGTTTTTTCTCTCAT 1>1>>11111B1BABA11AAA3A13 RG:Z:HiMom.1
-HiMom:1:1101:16891:1545 653 * 0 0 * * 0 0 CTTTTTTCTGACTTTCTTCTAGACT 11>1>1>>13311A3AB3AB33313 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_1104_pos.txt b/testdata/net/sf/picard/illumina/readerTests/s_1_1104_pos.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTest.vcf b/testdata/net/sf/picard/intervallist/IntervalListFromVCFTest.vcf
deleted file mode 100644
index 39bed22..0000000
--- a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTest.vcf
+++ /dev/null
@@ -1,53 +0,0 @@
-##fileformat=VCFv4.1
-##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
-##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
-##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
-##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=Integer,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">
-##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
-##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
-##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
-##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
-##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
-1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
-1 17032814 rs2773183 T C 2828.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
-1 17032818 rs2773183 T C 2828.26 FILTER AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
-2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
-2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.70;DB;DP=213;Dels=0.00;FS=7.83;HaplotypeScore=1.19;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-9.700e-02;SB=-1.991e+03;VQSLOD=9.14;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,42:75:99:1400,0,1031:127 0|0:67,0:67:99:0,178,2277:127 1|1:0,71:71:99:2578,199,0:127
diff --git a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestComp.interval_list b/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestComp.interval_list
deleted file mode 100644
index aad2820..0000000
--- a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestComp.interval_list
+++ /dev/null
@@ -1,7 +0,0 @@
- at SQ SN:1 LN:249250621
- at SQ SN:2 LN:243199373
- at SQ SN:3 LN:198022430
-1 8216712 8216712 + rs11121115
-1 17032814 17032814 + rs2773183
-2 1143476 1143476 + rs4998209
-2 9240279 9240279 + rs56249990
diff --git a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverse.interval_list b/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverse.interval_list
deleted file mode 100644
index 9bcca99..0000000
--- a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverse.interval_list
+++ /dev/null
@@ -1,10 +0,0 @@
- at SQ SN:1 LN:249250621
- at SQ SN:2 LN:243199373
- at SQ SN:3 LN:198022430
-1 1 8216711 + interval-1
-1 8216713 17032813 + interval-2
-1 17032815 249250621 + interval-3
-2 1 1143475 + interval-4
-2 1143477 9240278 + interval-5
-2 9240280 243199373 + interval-6
-3 1 198022430 + interval-7
diff --git a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list b/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list
deleted file mode 100644
index de85ca5..0000000
--- a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestCompInverseManual.interval_list
+++ /dev/null
@@ -1,10 +0,0 @@
- at SQ SN:1 LN:249250621
- at SQ SN:2 LN:243199373
- at SQ SN:3 LN:198022430
-1 1 8216711 + interval-1
-1 8216715 17032813 + interval-2
-1 17032815 249250620 + interval-3
-2 3 1143475 + interval-4
-2 1143477 9240278 + interval-5
-2 9240280 243199373 + interval-6
-3 1 198022430 + interval-7
diff --git a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManual.vcf b/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManual.vcf
deleted file mode 100644
index f9ec538..0000000
--- a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManual.vcf
+++ /dev/null
@@ -1,57 +0,0 @@
-##fileformat=VCFv4.1
-##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
-##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
-##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
-##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
-##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=Integer,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">
-##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
-##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
-##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
-##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
-##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
-1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
-1 8216713 yossi-1 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
-1 8216714 yossi-2 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
-1 17032814 rs2773183 T C 2828.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
-1 249250621 yossi-4 T C 2828.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
-2 1 yossi-5 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
-2 2 . C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
-2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
-2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.70;DB;DP=213;Dels=0.00;FS=7.83;HaplotypeScore=1.19;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-9.700e-02;SB=-1.991e+03;VQSLOD=9.14;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,42:75:99:1400,0,1031:127 0|0:67,0:67:99:0,178,2277:127 1|1:0,71:71:99:2578,199,0:127
diff --git a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManualComp.interval_list b/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManualComp.interval_list
deleted file mode 100644
index 6c6b5e0..0000000
--- a/testdata/net/sf/picard/intervallist/IntervalListFromVCFTestManualComp.interval_list
+++ /dev/null
@@ -1,12 +0,0 @@
- at SQ SN:1 LN:249250621
- at SQ SN:2 LN:243199373
- at SQ SN:3 LN:198022430
-1 8216712 8216712 + rs11121115
-1 8216713 8216713 + yossi-1
-1 8216714 8216714 + yossi-2
-1 17032814 17032814 + rs2773183
-1 249250621 249250621 + yossi-4
-2 1 1 + yossi-5
-2 2 2 + interval-1
-2 1143476 1143476 + rs4998209
-2 9240279 9240279 + rs56249990
diff --git a/testdata/net/sf/picard/intervallist/IntervalListchr123_empty.interval_list b/testdata/net/sf/picard/intervallist/IntervalListchr123_empty.interval_list
deleted file mode 100644
index f8fd99b..0000000
--- a/testdata/net/sf/picard/intervallist/IntervalListchr123_empty.interval_list
+++ /dev/null
@@ -1,4 +0,0 @@
- at SQ SN:1 LN:249250621
- at SQ SN:2 LN:243199373
- at SQ SN:3 LN:198022430
-1 1 1 + test
\ No newline at end of file
diff --git a/testdata/net/sf/picard/io/5newline5.txt b/testdata/net/sf/picard/io/5newline5.txt
deleted file mode 100644
index 53ff652..0000000
--- a/testdata/net/sf/picard/io/5newline5.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/testdata/net/sf/picard/io/empty.txt b/testdata/net/sf/picard/io/empty.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/io/slurptest.txt b/testdata/net/sf/picard/io/slurptest.txt
deleted file mode 100644
index 44718c3..0000000
--- a/testdata/net/sf/picard/io/slurptest.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-bacon and rice
-for breakfast
-wont you join me
\ No newline at end of file
diff --git a/testdata/net/sf/picard/liftover/hg18ToHg19.over.chain b/testdata/net/sf/picard/liftover/hg18ToHg19.over.chain
deleted file mode 100644
index 9f7a0cf..0000000
--- a/testdata/net/sf/picard/liftover/hg18ToHg19.over.chain
+++ /dev/null
@@ -1,30850 +0,0 @@
-chain 21270159960 chr1 247249719 + 0 247199719 chr1 249250621 + 10000 249233096 2
-616 0 137
-166664 50000 50000
-40302 50000 50000
-153649 50000 50000
-1098446 269 272
-773 1 1
-43 1 1
-864369 2 2
-51 0 3
-104 13694 13694
-104 3 0
-51 2 2
-134936 50000 50000
-1161048 60000 150000
-1440092 50000 27273
-7590365 50000 50000
-116914 50088 100088
-237162 50000 50000
-3518496 50000 50000
-12702424 50000 150000
-16145012 1 0
-7772 0 1
-4705841 1 0
-52977198 50000 50000
-157344 50000 21065
-16604841 50000 50000
-189539 50000 150000
-398739 20290000 21050000
-195588 50000 50000
-186739 50000 150000
-175055 50000 50000
-201709 50000 100000
-126477 50000 130183
-381 3 0
-315 2 0
-62 1 1
-73 1 1
-1158 0 1
-314 1 0
-11 1 1
-2849 0 3
-5615 1 1
-37 1 1
-3172 4 6
-190 1 1
-34 1 1
-380 1 0
-2099 0 3
-1135 4 0
-970 5 5
-209 0 1
-460 1 0
-1242 28 28
-574 1 1
-21 1 1
-2268 0 3
-239 1 0
-970 11 11
-2365 1 1
-21 1 1
-384 8 8
-996 0 2
-10383 0 2
-713 1 0
-5188 1 1
-30 1 1
-1233 0 1
-132 1 1
-44 1 1
-2955 0 1
-512 1 1
-39 1 1
-1096 16 0
-743 0 1
-9028 1 0
-2506 6 0
-8446 0 2
-5505 3 0
-7541 0 1
-109864 50000 50000
-78698 50000 50000
-127263 50000 50000
-170669 50000 50000
-38311 100000 100000
-1022394 50000 50000
-281532 50000 294733
-1687 1 1
-39 0 1
-1018 1 1
-26 1 1
-1722 0 2
-158 0 4
-1602 6 0
-1384 0 1
-2066 1 1
-32 3 1
-1556908 50000 150000
-185320 50000 150000
-172789 50000 50000
-220313 50000 50000
-455185 50000 50000
-22047237 0 1
-34365824 50000 150000
-259514 50000 150000
-17265625 50000 50000
-11394365 50000 50000
-13665999 50000 150000
-174886
-
-chain 989083 chr1 247249719 + 2475290 2488984 chr1 249250621 - 246751494 246765188 1383
-13694
-
-chain 5421 chr1 247249719 + 1609759 1609849 chr1 249250621 + 1672838 1672928 2227793
-90
-
-chain 3303 chr1 247249719 + 13192499 13192587 chr1 249250621 - 236203315 236203403 109
-88
-
-chain 467 chr1 247249719 + 142633259 142633287 chr1 249250621 - 128420441 128420469 123
-28
-
-chain 12431961244 chr10 135374737 + 50000 135374737 chr10 135534747 + 60000 135524747 10
-5577107 50006 0
-12337568 50000 50000
-20794160 50000 50000
-286100 2480000 3200000
-191752 50000 50000
-3830277 150000 50000
-952205 150000 100000
-263307 150000 100000
-163231 150000 50000
-989829 150000 100000
-1941874 50000 50000
-211435 50000 50000
-30112515 319974 0
-13249156 10 0
-31058956 50000 50000
-2696597 50000 150000
-4615335 10000 50000
-246123 50000 50000
-1327328 1 1
-47 1 1
-1312 1 0
-56 1 1
-190 1 1
-31 1 1
-20182 0 1
-448068
-
-chain 8134587 chr10 135374737 + 81444609 81551340 chr10 135534747 + 88976631 89083503 218
-369 41 41
-149 6 6
-83 71 71
-548 9 9
-391 9 9
-334 42 42
-81 1 2
-954 1 0
-441 0 4
-922 37 37
-343 253 253
-278 59 58
-404 13 13
-90 39 37
-70 132 123
-145 4 4
-392 9 9
-58 29 29
-166 51 50
-78 14 14
-455 61 65
-243 41 41
-1183 17 17
-163 57 57
-169 51 51
-912 5 5
-667 12 12
-250 20 20
-506 8 8
-292 8 8
-266 17 17
-69 27 27
-131 22 22
-668 46 47
-270 13 13
-128 7 7
-300 48 48
-818 32 32
-667 67 67
-402 24 36
-293 18 18
-423 68 68
-113 9 9
-630 42 42
-269 51 51
-165 0 1
-645 52 52
-76 91 90
-505 13 13
-143 31 31
-319 68 70
-245 126 126
-145 35 37
-90 57 57
-378 41 38
-193 13 13
-333 51 30
-51 6 6
-821 56 56
-547 18 18
-343 9 9
-270 47 47
-706 1 0
-120 21 22
-371 35 35
-530 13 13
-51 36 36
-611 48 48
-587 18 18
-499 9 9
-183 26 26
-847 7 7
-134 5 4
-64 34 34
-120 66 66
-173 147 147
-126 19 16
-53 44 49
-69 1 0
-153 89 90
-81 16 16
-52 32 36
-72 28 28
-86 68 68
-56 51 51
-120 17 17
-181 5 5
-86 17 18
-68 36 36
-356 101 101
-90 3 11
-226 26 28
-70 19 19
-95 9 9
-88 16 16
-272 33 33
-216 71 71
-394 83 83
-853 14 15
-90 23 23
-130 0 3
-52 11 11
-192 49 49
-407 13 13
-122 71 34
-179 28 28
-102 10 10
-299 36 36
-268 4 4
-123 36 36
-112 41 41
-233 77 75
-73 88 92
-519 43 43
-118 101 101
-78 33 43
-117 31 31
-83 37 37
-86 3 0
-468 0 2
-791 55 55
-268 97 97
-111 55 59
-164 38 38
-176 0 3
-116 67 74
-269 0 3
-92 66 67
-205 50 55
-1339 33 34
-86 9 9
-310 34 34
-217 42 42
-194 18 17
-191 4 4
-250 0 3
-148 79 79
-77 3 0
-199 57 57
-200 53 53
-331 52 53
-136 32 42
-69 60 60
-169 0 1
-594 88 88
-174 70 70
-135 48 48
-53 9 9
-862 25 25
-1106 33 33
-974 76 76
-368 17 17
-369 43 43
-263 49 49
-143 8 8
-228 57 57
-74 3 0
-914 2 0
-137 77 74
-243 32 32
-166 53 53
-646 87 87
-71 0 1
-661 45 45
-142 76 76
-851 17 17
-56 60 60
-52 59 58
-80 60 60
-602 13 13
-617 76 78
-51 152 152
-77 38 38
-150 0 4
-386 45 45
-585 40 33
-108 12 12
-219 99 99
-1376 58 58
-517 27 27
-124 20 20
-566 58 58
-235 47 47
-72 26 26
-157 43 43
-208 31 31
-578 122 84
-259 15 15
-1141 119 119
-141 13 13
-817 14 14
-188 0 5
-323 62 75
-447 0 5
-64 161 161
-945 23 23
-66 35 35
-104 125 125
-613 186 184
-102 205 203
-767 27 27
-111 13 13
-107 80 83
-272 0 1
-438 4 4
-127 68 68
-564 44 44
-141 14 14
-137 13 17
-167 18 0
-241 25 25
-586 30 30
-178 44 44
-310 90 87
-1277 35 35
-646 32 32
-704 56 56
-367 93 101
-241 15 14
-340 64 64
-1000 23 26
-163 81 81
-895 12 12
-345 2 0
-117 48 49
-491 32 32
-206 17 17
-439 109 109
-202 6 7
-756 24 24
-380 63 62
-144 48 48
-608 80 80
-154 71 71
-232 16 16
-1809 40 40
-346 53 52
-117 10 0
-383 10 10
-1973 19 19
-879 42 42
-91 50 50
-1147 2 1
-210 68 88
-189 7 7
-595 50 49
-248 104 126
-265 106 106
-167 0 7
-141 93 62
-825 1 0
-348 47 46
-211 3 0
-114 52 56
-66 7 7
-759 48 48
-269 0 1
-106 109 114
-114 38 39
-282 20 20
-504 0 1
-174 14 7
-123 45 46
-82 58 58
-203 12 13
-153 44 44
-121 74 74
-805 43 43
-120 67 68
-171 6 6
-329 20 20
-151 33 33
-71 46 46
-195 25 21
-65 23 42
-96 78 78
-58 0 4
-389 0 3
-214 137 138
-111 2 3
-116 10 10
-128 0 3
-52 8 8
-62 43 43
-142 6 6
-214 0 112
-179 0 1
-234 4 0
-75 116 117
-119 63 67
-286 72 42
-73 150 150
-206 214 220
-73 2 0
-82 48 48
-135 40 67
-115 109 114
-185 49 49
-99 63 63
-52 204 205
-121
-
-chain 2724232 chr10 135374737 + 81309951 81339951 chr10 135534747 + 81320000 81350000 983
-22137 957 957
-46 77 77
-38 83 83
-51 54 54
-984 53 53
-5520
-
-chain 1898345 chr10 135374737 + 81349952 81369946 chr10 135534747 + 81360000 81380000 1327
-15902 21 27
-4071
-
-chain 946327 chr10 135374737 + 81339951 81349952 chr10 135534747 + 81350000 81360000 2894
-6692 1 0
-3308
-
-chain 939763 chr10 135374737 + 81430217 81440202 chr10 135534747 + 81440000 81450000 3159
-163 3 0
-518 0 16
-972 42 43
-5149 0 1
-3138
-
-chain 928169 chr10 135374737 + 81379935 81389948 chr10 135534747 + 81390000 81400000 3587
-1970 7 8
-141 10 0
-413 39 39
-622 4 0
-574 42 42
-2153 0 2
-1520 5 3
-2513
-
-chain 922636 chr10 135374737 + 81300280 81309951 chr10 135534747 + 81310330 81320000 2721
-2989 1 0
-6681
-
-chain 885793 chr10 135374737 + 81369946 81379851 chr10 135534747 + 81380000 81389916 4570
-507 30 32
-880 91 91
-1155 82 82
-784 10 10
-907 16 28
-1265 50 50
-859 0 3
-1375 1 2
-165 27 27
-124 29 29
-275 8 8
-308 6 0
-79 1 0
-871
-
-chain 839370 chr10 135374737 + 81389948 81399836 chr10 135534747 + 81400000 81409799 4960
-446 1 0
-639 0 1
-112 140 59
-198 24 22
-98 162 137
-63 10 10
-97 180 192
-71 31 33
-322 38 38
-431 0 1
-741 45 46
-229 1 3
-186 1 4
-3019 14 14
-131 1 0
-722 16 16
-1530 92 92
-32 2 1
-63
-
-chain 788625 chr10 135374737 + 81241464 81249852 chr10 135534747 + 81251575 81259959 6147
-783 1 0
-883 23 33
-3247 1 0
-143 31 31
-957 15 3
-2304
-
-chain 781678 chr10 135374737 + 81280054 81289770 chr10 135534747 + 81290109 81299824 3334
-65 841 841
-84 228 228
-27 240 240
-1767 0 10
-186 66 54
-976 0 3
-1495 0 7
-899 0 1
-376 7 7
-2156 10 0
-196 50 50
-47
-
-chain 778944 chr10 135374737 + 81250813 81551219 chr10 135534747 - 53516479 54101824 544
-53 63 72
-96 209 213
-193 44 44
-202 331 335
-149 28 28
-100 125 123
-56 238 272
-60 91 93
-123 9 11
-66 147 144
-82 210 211
-77 17 17
-196 31 31
-379 27 27
-954 71 71
-69 4431 3721
-746 66 66
-502 12 12
-282 28 28
-224 59 59
-52 35 35
-448 12 0
-474 42 42
-260 11 11
-83 38 44
-160 152 149
-284 76 76
-110 73 73
-284 9 9
-478 110 110
-95 5 5
-583 122 122
-116 1 1
-67 1 1
-118 1 1
-38 1 1
-566 1 1
-35 1 1
-287 1 0
-481 1 1
-42 1 1
-198 1 1
-22 1 1
-54 1 1
-25 1 1
-50 1 1
-50 1 1
-294 4 0
-158 1 1
-31 1 1
-255 8 8
-291 12 12
-171 2 2
-21 1 1
-685 77 77
-817 20 20
-312 39 39
-181 1 0
-249 50 47
-75 7 7
-86 4 4
-54 8 8
-518 134 134
-376 24 26
-189 17 27
-143 13 13
-93 16 16
-192 24 24
-992 140 132
-828 1 1
-40 1 1
-410 1 1
-25 0 2
-13 1 1
-83 8 8
-143 1 1
-20 1 1
-421 1 1
-49 1 1
-107 1 1
-28 1 1
-77 1 1
-32 0 2
-44 2 2
-348 1 1
-53 0 4
-58 1 1
-97 1 1
-125 56 53
-526 1 1
-46 1 1
-209 9 9
-76 1 1
-37 1 1
-53 1 1
-24 1 1
-141 1 1
-26 1 1
-304 1 1
-60 1 1
-199 1 1
-47 1 1
-92 6 0
-138 64 64
-299 65 65
-186 24 24
-631 84 84
-100 20 20
-108 27 27
-240 8134 8243
-50 47 45
-107 11 11
-750 5 5
-230 25 25
-221 62 62
-106 32 32
-106 52 52
-270 56 56
-166 31 31
-89 77 77
-127 666 662
-56 22 22
-55 95 83
-51 30 30
-77 35 35
-189 16 16
-130 53 53
-131 5 5
-158 140 131
-170 21 21
-55 79 79
-207 200 199
-152 11 11
-105 50 50
-104 34 34
-56 402 402
-69 0 1
-61 150 150
-181 10 10
-130 22 22
-180 5 0
-73 161 161
-77 151 151
-68 128 128
-330 138 126
-116 1211 328
-252 4 4
-102 8 8
-72 23 23
-51 51 51
-608 31808 287592
-56 14 14
-161 9 9
-717 46 50
-77 38 30
-83 51 51
-54 984 987
-53 65700 95386
-47 559 556
-99 119 119
-193 38 38
-164 12 7
-59 38 38
-58 9 5
-57 34 34
-68 30 30
-59 28 28
-51 82 87
-142 7 7
-67 162 152
-248 1 2
-114 34 34
-140 22 22
-58 119 118
-143 50 50
-255 69 65
-53 18 18
-127 11 13
-446 39 39
-134 24 24
-143 42 42
-123 65 65
-57 0 3
-199 73 73
-271 17 17
-113 24 24
-203 40 40
-51 38 38
-119 50 50
-81 60 60
-239 85 70
-79 219 219
-64 149 150
-29 211 211
-91 319 310
-76 40 40
-59 596 591
-34 579 579
-51 90 90
-169 336 329
-146 226 226
-50 480 479
-23 66 66
-95 447 447
-49 298 298
-29 180 180
-45 1186 1169
-53 2222 2217
-11 116 116
-33 313 313
-63 75 75
-14 257 258
-31 122 122
-73 311 316
-238 46 46
-130 81 78
-103 262 266
-56 168 163
-29 861 857
-61 655 666
-18 40 40
-436 1 1
-8 4 0
-35 1 1
-417 21 18
-51 2 0
-54 1 1
-126 10 9
-72 5 5
-377 1 1
-18 2 0
-35 2 2
-78 1 2
-18 2 2
-82 1 0
-99 1 1
-82 0 4
-99 1 1
-50 0 4
-50 7 7
-225 11 11
-135 2 0
-326 26 989
-2646 0 1
-560 10 0
-347 114 114
-284 118541 118621
-43 120 120
-65 1 0
-1 677 677
-33 71 71
-46 404 404
-78 661 663
-137 489 492
-43 854 846
-116 119 119
-63 286 286
-72 73 73
-150 206 206
-17 1 1
-85 1 1
-110 157 157
-48 135 135
-36 0 4
-4 115 115
-73 2 0
-19 1 1
-14 185 185
-49 99 99
-22 1 1
-40 79 80
-177
-
-chain 662550 chr10 135374737 + 81399647 81430169 chr10 135534747 - 46431029 46458544 512
-92 103 101
-125 0 2222
-53 53 50
-58 48 48
-298 191 189
-69 6167 5
-118 101 101
-128 111 111
-207 48 43
-55 175 169
-212 93 89
-159 23 23
-109 34 34
-150 21 20
-258 30 30
-120 51 54
-90 171 171
-268 224 219
-202 62 62
-480 237 237
-394 49 49
-100 28 28
-93 25 25
-52 29 29
-180 45 45
-141 47 47
-56 49 49
-169 39 42
-60 102 113
-53 1 13
-151 105 105
-58 33 30
-88 246 246
-334 116 116
-63 83 84
-268 115 113
-70 43 43
-252 2 1
-62 97 97
-88 6 0
-61 23 23
-84 75 75
-75 2 3
-83 8 8
-53 160 162
-312 153 152
-192 96 98
-122 95 100
-94 793 791
-61 1 5
-154 140 135
-130 32 33
-121 21 21
-82 6 6
-171 34 34
-110 52 49
-129 193 194
-64 26 29
-72 18 18
-286 75 58
-114 6596 7638
-114 284 172
-558 8 9
-111 5 5
-55 2 2
-80 0 1
-27 1 1
-72 1 1
-45 1 1
-516 1 1
-66 1 1
-106 23 42
-64 4 0
-21 1 1
-312 2 2
-30 1 1
-151 20 20
-193 1 1
-38 1 1
-96 6 6
-171 0 3
-27 0 2
-34 2 2
-120 3 3
-39 1 1
-752
-
-chain 650336 chr10 135374737 + 81249915 81259740 chr10 135534747 + 81260018 81269841 3195
-898 53 53
-63 96 96
-209 193 193
-44 202 202
-331 149 149
-28 100 100
-125 56 56
-238 60 60
-91 198 198
-147 82 82
-210 290 290
-31 1360 1360
-71 69 69
-196 1 0
-454 16 15
-3764
-
-chain 462746 chr10 135374737 + 81440202 81450008 chr10 135534747 + 81450000 81459803 2861
-1116 4 4
-801 3 0
-2483 369 369
-41 238 238
-71 1291 1291
-42 2400 2400
-37 343 343
-253 278 278
-36
-
-chain 389885 chr10 135374737 + 81290873 81299672 chr10 135534747 + 81300927 81309722 2802
-25 221 221
-62 106 106
-32 106 106
-52 270 270
-56 166 166
-31 89 89
-77 127 127
-666 133 133
-95 51 51
-30 77 77
-35 335 335
-53 294 294
-103 4 0
-33 246 246
-79 207 207
-200 268 268
-50 104 104
-34 56 56
-402 130 130
-150 601 601
-161 77 77
-151 68 68
-128 330 330
-138 116 116
-1211 512 512
-51
-
-chain 178315 chr10 135374737 + 81400041 81409702 chr10 135534747 + 81410003 81419664 4252
-32 404 404
-191 168 168
-119 193 193
-38 235 235
-38 124 124
-34 68 68
-30 59 59
-28 51 51
-82 216 216
-162 363 363
-34 220 220
-21 9 9
-89 143 143
-50 255 255
-69 995 995
-42 123 123
-65 256 256
-73 628 628
-40 208 208
-50 94 94
-47 239 239
-85 79 79
-219 64 64
-31 147 147
-72 625 625
-40 271 271
-93 754 754
-30 700 700
-66
-
-chain 157388 chr10 135374737 + 81410627 81419292 chr10 135534747 + 81420589 81429247 5183
-66 95 95
-53 1136 1136
-46 81 81
-25 268 268
-38 269 263
-105 58 58
-6 0 1
-27 88 88
-34 53 53
-81 32 32
-46 334 334
-116 63 63
-83 268 266
-115 429 428
-97 262 262
-75 757 757
-75 230 232
-41 343 343
-69 47 47
-78 238 238
-46 130 131
-17 36 34
-28 319 319
-46 56 56
-38 707 707
-52 129 129
-132 125 125
-26 376 376
-75
-
-chain 142913 chr10 135374737 + 81466547 81535718 chr10 135534747 - 46275769 46344990 569
-44 2128 2133
-24 2535 2533
-31 2379 2381
-34 143 143
-43 270 270
-50 1045 1058
-51 494 498
-36 2085 2105
-60 1979 1981
-71 1197 1197
-41 1594 1601
-37 2856 2871
-66 205 205
-50 1339 1339
-33 656 663
-42 805 805
-79 280 275
-56 200 200
-22 18 18
-13 1443 1450
-44 2526 2526
-33 974 974
-75 1489 1489
-47 1658 1653
-53 1652 1653
-41 1071 1071
-59 10705 10669
-57 6434 6441
-25 586 586
-30 178 178
-44 310 310
-74 7 1
-9 1277 1277
-35 5735 5751
-32 2139 2139
-63 3162 3162
-40 346 345
-53 3391 3390
-41 92 92
-50
-
-chain 97392 chr10 135374737 + 81500632 81510012 chr10 135534747 + 81510451 81519840 3573
-60 191 191
-60 1232 1232
-76 51 51
-152 77 77
-38 536 540
-45 585 586
-39 340 340
-99 1376 1373
-58 517 517
-27 710 710
-58 235 235
-47 72 72
-26 157 157
-43 208 208
-31 630 637
-70 1415 1415
-119
-
-chain 87386 chr10 135374737 + 81512081 81517268 chr10 135534747 + 81521923 81527111 3288
-161 1034 1034
-35 104 104
-125 613 613
-186 102 102
-205 767 767
-27 231 232
-80 841 841
-68 564 564
-44
-
-chain 81916 chr10 135374737 + 81260486 81269831 chr10 135534747 + 81270587 81279924 3410
-66 796 796
-28 224 224
-59 52 52
-35 934 925
-42 354 354
-1 0 2
-37 160 160
-121 19 18
-12 284 284
-76 110 110
-73 771 771
-110 683 683
-8 36 35
-78 4099 4100
-77
-
-chain 75208 chr10 135374737 + 81450008 81464865 chr10 135534747 + 81597933 81612795 1746
-23 1356 1354
-29 166 166
-51 547 547
-30 274 278
-40 1364 1363
-57 169 169
-51 3032 3032
-27 1585 1586
-48 818 818
-32 667 667
-67 1160 1160
-68 752 752
-42 269 269
-51 810 813
-52 76 76
-91 661 661
-31 319 319
-42
-
-chain 71596 chr10 135374737 + 81480667 81490183 chr10 135534747 + 81490477 81500000 3725
-36 395 395
-36 536 535
-88 519 519
-43 139 139
-80 78 78
-33 117 134
-31 1468 1468
-55 268 268
-97 111 111
-30 6 0
-19 164 164
-38 292 292
-67 2459 2459
-34 2063 2060
-52 136 136
-26
-
-chain 65913 chr10 135374737 + 81470614 81479436 chr10 135534747 + 81480422 81489246 3085
-36 1955 1955
-26 1450 1450
-97 248 248
-44 223 223
-89 149 149
-32 72 72
-28 86 86
-68 993 993
-49 0 1
-52 319 320
-26 569 569
-33 216 216
-71 1842 1842
-49
-
-chain 63808 chr10 135374737 + 81521220 81529648 chr10 135534747 + 81531068 81539504 3362
-32 704 704
-56 367 367
-93 596 601
-64 1186 1189
-81 1371 1371
-48 1185 1185
-109 1575 1575
-48 608 608
-80 154 154
-71
-
-chain 58084 chr10 135374737 + 81490258 81499708 chr10 135534747 + 81500075 81509527 2957
-60 807 808
-44 174 174
-70 135 135
-48 924 924
-25 2943 2943
-43 263 263
-49 1566 1566
-77 243 243
-32 865 865
-87 732 733
-45 183 183
-35
-
-chain 41373 chr10 135374737 + 81540284 81544136 chr10 135534747 + 81550136 81553982 6087
-47 328 324
-52 832 831
-48 375 375
-79 0 1
-30 114 114
-38 1117 1115
-45 82 82
-58 368 368
-44 121 121
-74
-
-chain 34777 chr10 135374737 + 81464865 81470020 chr10 135534747 + 81474671 81479828 3724
-26 245 245
-34 44 44
-48 145 145
-12 0 2
-23 90 90
-57 378 378
-41 1468 1468
-56 2453 2453
-35
-
-chain 34249 chr10 135374737 + 81270980 81279755 chr10 135534747 + 81281073 81289810 4510
-39 431 431
-50 752 752
-134 2175 2167
-44 3025 2995
-35 14 9
-7 2005 2010
-64
-
-chain 29298 chr10 135374737 + 81537077 81539110 chr10 135534747 + 81546931 81548963 3702
-68 791 797
-50 617 605
-33 0 2
-73 308 311
-93
-
-chain 18939 chr10 135374737 + 81450538 81452241 chr10 135534747 + 81460333 81462036 3255
-39 70 70
-132 1431 1431
-31
-
-chain 6030 chr10 135374737 + 81422413 81430217 chr10 135534747 + 81432363 81440000 5582
-26 7730 7563
-48
-
-chain 5154 chr10 135374737 + 81371363 81371422 chr10 135534747 - 72572913 72572972 4033525
-2 1 1
-56
-
-chain 1569 chr10 135374737 + 81371422 81371454 chrX 155270560 + 63278348 63278380 8657459
-32
-
-chain 1063 chr10 135374737 + 81231366 81231464 chr10 135534747 - 54101945 54102043 901
-98
-
-chain 4275918 chr10_random 113275 + 18676 65432 chr5 180915260 + 138864813 138909803 707
-204 2 0
-4653 4 0
-2427 0 1
-5957 0 1
-1558 1 0
-780 1794 33
-29376
-
-chain 870863 chr10_random 113275 + 9144 18556 chr10 135534747 - 46779061 46789268 4835
-301 2 0
-564 3 0
-802 1 0
-2624 0 112
-142 0 2
-128 100 787
-4745
-
-chain 637317 chr10_random 113275 + 102183 113228 chr10 135534747 + 88758795 88768050 8258
-1205 22 22
-793 0 1
-914 1 1
-9 0 1
-45 0 1
-9 2477 1631
-132 1562 615
-2006 1 1
-36 1 1
-557 24 23
-885 0 2
-194 1 0
-171
-
-chain 383436 chr10_random 113275 + 97894 101991 chr10 135534747 + 88848068 88852165 132306
-2932 0 1
-697 4 3
-464
-
-chain 312568 chr10_random 113275 + 0 3305 chr10 135534747 + 88861095 88864401 225266
-2905 0 1
-400
-
-chain 263395 chr10_random 113275 + 91858 94672 chr10 135534747 + 88776474 88779288 339622
-1683 3 3
-130 11 11
-987
-
-chain 254817 chr10_random 113275 + 83066 85798 chr10 135534747 - 46749813 46752549 368581
-201 0 6
-798 0 1
-403 4 0
-841 14 15
-471
-
-chain 244215 chr10_random 113275 + 5995 97779 chr10 135534747 + 88818267 88897264 4711
-966 0 1
-2072 66256 15486
-2428 10567 42513
-197 0 1
-820 6 6
-18 1 0
-21 0 1
-20 2 1
-1685 0 2
-703 3020 9053
-1156 0 1
-1846
-
-chain 216530 chr10_random 113275 + 72868 75170 chr10 135534747 - 93082016 93084318 524441
-2302
-
-chain 211663 chr10_random 113275 + 85898 88144 chr10 135534747 + 88832831 88835078 546276
-536 0 1
-1710
-
-chain 171789 chr10_random 113275 + 70706 72761 chr10 135534747 - 93140436 93143121 737133
-50 1 1
-68 85 4
-15 15 34
-17 7 53
-13 1 647
-81 1 1
-50 21 21
-1630
-
-chain 129924 chr10_random 113275 + 67807 109229 chr10 135534747 - 46627912 46728083 8515
-467 0 1
-256 0 1
-42 1 1
-1352 0 2
-308 10219 43352
-227 1 1
-22 1 1
-2232 22395 48006
-1581 0 2
-518 1 1
-30 1 0
-197 132 132
-1439
-
-chain 125160 chr10_random 113275 + 4561 5895 chr10 135534747 - 46655374 46656707 1028939
-94 1 0
-1239
-
-chain 104003 chr10_random 113275 + 65554 66651 chr10 135534747 - 93176760 93177857 1232247
-1097
-
-chain 92361 chr10_random 113275 + 66732 67707 chr10 135534747 - 93158718 93159693 1382147
-975
-
-chain 89191 chr10_random 113275 + 3509 4486 chr10 135534747 - 129898314 129899289 1428933
-69 1 1
-35 1 0
-336 1 0
-401 1 1
-44 1 1
-87
-
-chain 29685 chr10_random 113275 + 34270 80352 chr10 135534747 - 46758431 46763489 186939
-210 0 6
-1251 4 4
-73 42015 985
-1249 1 1
-46 1 1
-1232
-
-chain 4572 chr10_random 113275 + 70436 70610 chr10 135534747 - 93144449 93144623 2904410
-51 50 50
-73
-
-chain 3114 chr10_random 113275 + 70610 70643 chr10 135534747 - 93147281 93147314 29780913
-33
-
-chain 12415599352 chr11 134452384 + 50000 134451920 chr11 135006516 + 60000 134946516 11
-1102759 16576 50000
-49571094 207000 307000
-503352 3000000 3100000
-14395596 2605 50000
-488471 34 102
-26 0 176
-30213 141 350
-27914 1 0
-20009 1 0
-19 1 0
-39 1 0
-17 3 1
-10 1 0
-1008 1 0
-95 1 0
-5127 15 0
-302 1 0
-975 0 4
-1548 0 1
-190 20 0
-41 1 0
-29 1 1
-44 0 1
-101 1 0
-25 0 1
-6178 0 1
-1875 21437 52561
-468 1 1
-81 1 1
-2620 1 0
-1640 4 0
-3305 0 1
-3342 1 0
-17899663 12000 50000
-8549206 15562 150000
-38507165 2 0
-1327 174 0
-392 18 0
-48
-
-chain 188276 chr11 134452384 + 69433462 69437111 chr11_gl000202_random 40103 + 7212 10860 1247
-1868 1 0
-1780
-
-chain 38178 chr11 134452384 + 134451288 134452384 chr5 180915260 - 180902450 180903869 1901368
-174 458 926
-1 8 0
-63 136 1
-64 2 0
-190
-
-chain 6040 chr11 134452384 + 134451996 134452128 chr1 249250621 - 249240179 249240388 3449013
-89 36 113
-7
-
-chain 2221 chr11 134452384 + 134452085 134452111 chrY 59373566 + 59362903 59362929 5436109
-26
-
-chain 4284950 chr11_random 215294 + 0 215294 chr11 135006516 - 65191297 65289033 706
-40524 167558 50000
-7212
-
-chain 3340892 chr11_random 215294 + 90524 125679 chr11 135006516 + 69689619 69724695 863
-1003 62 0
-3019 1 0
-695 1 1
-26 1 1
-1133 0 1
-1374 2 2
-20 1 1
-729 11 11
-269 0 1
-1091 14 14
-969 21 21
-532 5 5
-2677 18 0
-21481
-
-chain 3051979 chr11_random 215294 + 175679 208082 chr11_gl000202_random 40103 - 0 32891 790
-17546 11 51
-27 523 35
-32 6 6
-6712 100 1036
-7446
-
-chain 10612 chr11_random 215294 + 193466 193615 chr11_gl000202_random 40103 - 18116 18265 21504297
-59 27 27
-63
-
-chain 5102 chr11_random 215294 + 91527 91580 chr11 135006516 + 69690684 69690737 20979070
-53
-
-chain 12330181372 chr12 132349534 + 16000 132289534 chr12 133851895 + 145739 133779461 12
-7035083 0 4
-544 0 1
-3777 0 1
-3889 73000 52114
-6014 1 0
-6524 168 34
-20974 0 2
-3965 3 0
-444 0 11
-464 1 0
-27577110 1395000 3000000
-38631945 0 1
-14541 0 4
-1703 1 0
-789 250000 12128
-1783 1 0
-1075 0 2
-1042 1 0
-1526 1 1
-27 1 1
-2320 0 1
-166 1 0
-564 0 1
-2856 0 2
-900 0 1
-1387 1 1
-33 1 1
-2139 1 1
-48 1 1
-1305 0 2
-1533 1 2
-879 0 1
-744 26 26
-855 0 4
-1092 6 0
-1114 12 0
-817 1 1
-18 1 0
-217 1 1
-36 1 1
-2002 1 0
-1025 0 1
-450 1 1
-43 1 1
-919 1 0
-18 1 1
-3207 42 42
-1440 0 8
-148 4 0
-3655 2 0
-3403 1 1
-47 1 1
-1524 1 1
-28 1 1
-5561 0 2
-44 0 1
-676 8 8
-810 16 16
-536 2 0
-236 4 0
-167 0 4
-1419 49 53
-4688 1 1
-38 1 1
-18577 5 0
-5284 0 2
-1577 34 34
-4875 1 1
-25 1 1
-4340 0 14
-2663 5 0
-1170 1 0
-4268 0 4
-1036 0 1
-2117 0 8
-5917 1 0
-3239 0 4
-2619 1 1
-21 1 1
-937 1 1
-38 1 1
-2412 0 2
-38 17 0
-2732 0 2
-9314 2 0
-1986 2 2
-16 1 1
-229 1 1
-93 1 1
-895 12 0
-415 1 5
-27 1 1
-78 14 14
-185 8 9
-458 0 2
-89 1 1
-42 1 1
-2034 0 1
-1545 0 2
-280 0 4
-97 14 14
-231 0 2
-2816 5 0
-537 50 50
-1090 1 1
-27 1 1
-25758689 0 1
-6536665 0 1
-377270 57000 96749
-668 1 1
-20 1 0
-3348 1 1
-33 1 1
-648 1 1
-29 1 1
-3732 4 0
-977 46 46
-785 4 0
-34 1 0
-1688 0 10
-4248 1 0
-1167 1 0
-985 9 9
-2897 1 0
-1630 9 0
-1096 0 1
-1356 0 8
-13065723 150011 68363
-799 2 0
-343 0 1
-1771 0 1
-2702 7 6
-1900 1 0
-705 6 0
-303 1 0
-727 1 1
-43 1 0
-3 2 0
-490 1 1
-59 1 1
-226 1 1
-52 3 0
-465 0 8
-194 1 1
-25 1 0
-139 1 1
-15 1 1
-1833 1 0
-81 1 1
-39 1 1
-453 1 0
-719 1 1
-47 1 1
-558 1 0
-838 8 1
-288 10 9
-741 5 2
-465 1 1
-48 1 1
-268 1 1
-26 1 0
-1337 30 48
-84 2 85
-917 1 0
-110 31 31
-1580 1 1
-40 1 1
-683 1 1
-24 1 1
-247 1 1
-36 1 1
-1574 0 1
-10091386 0 3
-296 0 5
-220 45000 100872
-972469
-
-chain 2523 chr12 132349534 + 107924339 107924385 chr20 63025520 - 54448952 54448998 196257
-46
-
-chain 9007877316 chr13 114142980 + 17918000 114127980 chr13 115169878 + 19020000 115109878 14
-26987167 1 0
-40753157 50000 150000
-25443670 400000 150000
-1821999 384108 414007
-369878
-
-chain 17589560 chr13 114142980 + 113473994 113658050 chr13 115169878 - 529930 713796 162
-174857 2 0
-1328 144 0
-1156 1 1
-27 1 1
-2159 2 0
-49 1 1
-175 2 0
-20 4 0
-590 30 0
-163 8 4
-2905 2 0
-430
-
-chain 8677 chr13 114142980 + 113650223 113650314 chr13 115169878 - 706193 706284 25436870
-91
-
-chain 17750502 chr13_random 186858 + 0 186858 chrUn_gl000212 186858 + 0 186858 156
-186858
-
-chain 8359013040 chr14 106368585 + 18070000 106360585 chr14 107349540 + 19000000 107289540 15
-1081285 1 1
-43 1 1
-76 2 0
-437 1 1
-19 1 1
-440 12 13
-59 15 15
-63 12 12
-70 0 1
-734 1 1
-165 1 4
-96 1 1
-46 1 0
-83 1 1
-149 4 4
-164 1 1
-18 1 1
-63 15 16
-359 1 1
-39 1 1
-103 1 1
-76 1 1
-139 1 1
-38 1 1
-344 1 1
-65 0 1
-166 5 5
-88 1 1
-66 0 287
-50 1 1
-317 0 1
-52 1 1
-92 4 0
-651 4 4
-82 1 1
-93 1 1
-64 1 1
-24 1 1
-856 1 1
-35 1 1
-258 1 1
-17 1 1
-478 1 0
-1048 70 70
-1279 1 1
-37 1 1
-1115 3 4
-72 1 1
-126 1 1
-102 1 1
-413 10 10
-132 6 6
-89 0 2
-209 15 4
-77 5 5
-427 1 1
-41 1 1
-949 1 1
-16 1 1
-732 1 1
-44 2 0
-128 0 1
-91 1 1
-180 6 6
-388 6 6
-50 13 12
-275 1 1
-33 1 1
-142 1 1
-61 1 1
-560 1 1
-20 1 1
-1327 6 13
-729 37 37
-284 1 1
-44 1 1
-205 0 4
-40 1 1
-352 10 10
-261 1 1
-39 1 1
-940 12 0
-1677 36 0
-159 1 1
-32 8 1
-818 0 6
-580 1 0
-931 1 0
-276 2 0
-3298 45 45
-169 14 0
-46 1 1
-882 2 0
-94 1 1
-49 1 1
-859 4 0
-45 1 1
-807 16 15
-416 0 3
-3345 15 15
-92 30 29
-80 1 1
-48 1 1
-2459 0 1
-646 1 1
-31 1 1
-392 1 1
-29 54 0
-1875 3 0
-141696 1 1
-32 1 1
-8201115 1 0
-107 1 0
-2137 1 1
-39 1 1
-8848 0 1
-4806 1 0
-2075 1 0
-16619 41 40
-2338 3 0
-11507 8 0
-1352 0 1
-4596 0 1
-2073 2 1
-28 1 1
-2311 1 1
-44 1 1
-10440 0 4
-894 0 1
-1641 0 96
-38 9 0
-20 1 1
-2706 6 0
-351 1 1
-25 1 1
-742 0 1
-1048 2 18
-12085977 0 1
-14871228 3 0
-29067652 1 1
-47 1 1
-20174307 1292 0
-2548043
-
-chain 14855 chr14 106368585 + 19159713 19190443 chr14 107349540 - 87865807 87904514 64
-20 0 6
-50 9933 9915
-37 16916 24930
-30 3690 3692
-25 27 0
-2
-
-chain 6432 chr14 106368585 + 19179765 19190441 chr22 51304566 + 16377620 16388301 97
-45 10604 10609
-27
-
-chain 7700812247 chr15 100338915 + 18260008 100338915 chr15 102531392 + 20000000 102521392 16
-8448 6 2
-4086 1 0
-9569 1 1
-40 0 5
-56 7 1
-872419 40441 40448
-553 4 4
-876 0 1
-38 1 1
-139 1 1
-23 1 1
-1881 1 1
-17 1 0
-499 8 8
-310 2 2
-25 11 5
-46 1 1
-78 1 1
-22 0 3
-181 5 6
-569 11 11
-539 1 1
-23 0 4
-261 1 1
-19 0 2
-776 13 15
-62 13 13
-860 1 0
-719 26 0
-1346 1 1
-134 0 1
-30 1 1
-1070 1 1
-21 1 1
-398 0 1
-177 5 21
-534 4 0
-770 0 6
-17 1 1
-606 1 1
-31 1 1
-1861 1 1
-53 1 1
-2169 3 0
-558 1 0
-18 1 1
-227 2 0
-13 1 1
-329 5 5
-430 1 1
-17 2 0
-620 0 1
-1112 2 0
-641 0 4
-476 1 1
-45 1 1
-1285 0 1
-1139 1 1
-47 1 1
-183 4 0
-1435 20 0
-176 0 1
-219 0 1
-607 1 1
-42 1 1
-371 2 8
-507 2 0
-66 1 0
-41 1 1
-999 4 4
-318 15 15
-1092 1 1
-72 1 1
-808 5 5
-54 2 2
-52 1 1
-40 1 1
-109 3 3
-47 1 1
-1535 14 0
-14012 4 0
-7954 4 1
-1350 1 0
-318 1 1
-25 1 1
-600 0 4
-442 0 1
-1396 1 1
-36 1 1
-1107 0 3
-1441 0 5
-360 1 1
-47 1 1
-228 10 0
-37 1 1
-497 1 1
-37 1 1
-2129 4 0
-1242 2 0
-478 4 0
-708 1 1
-90 1 1
-154 10 10
-1583 1 1
-31 1 1
-1302 0 37
-101 14 14
-1138 1 1
-83 10 0
-11 7 0
-111 1 1
-29 1 1
-2917 1 1
-32 1 1
-1762 1 1
-46 1 1
-449 1 0
-2458 9 1
-869 1 0
-534 1 1
-47 1 1
-309 1 0
-6358 22 0
-564 0 1
-1845 1 0
-660 1 1
-25 1 1
-68 1 0
-182 0 9
-54 3 18
-1519 1 1
-32 1 1
-559 1 1
-30 1 1
-3851 1 0
-265 8 7
-240 4474 0
-428 1 0
-1651 11 10
-297 1 0
-665 21 0
-48 1 1
-1763 2 0
-245 1 1
-39 1 1
-519 1 1
-31 1 1
-2398 0 6
-749 49 1
-2074 4 0
-701 5 5
-337 1 0
-470 1 1
-43 1 1
-1163 3 0
-1342 1 1
-43 1 1
-140 0 1
-83 1 1
-24 1 2
-37 1 1
-723 1 1
-36 1 1
-99 3 0
-27 1 1
-92 1 0
-80 43 43
-1095 0 13
-384 0 2
-292 1 1
-39 1 1
-101 12 12
-576 0 2
-1907 1 1
-19 1 1
-318 1 0
-1973 1 1
-32 1 1
-689 1 1
-49 1 1
-357 8 8
-2081 13 13
-260 15 15
-2295 1 1
-24 1 1
-2558 1 1
-26 1 1
-571 16 23
-323 0 1
-36 0 1
-5353 111 0
-1711 38 70
-272 13 13
-1284 0 1
-1128 4 4
-2189 1 0
-474 2 0
-1284 61 67
-643 1 1
-37 1 1
-381 0 2
-56 1 0
-2591 1 1
-55 1 1
-160 4 4
-116 1 1
-89 2 0
-316 0 1
-785 20 0
-152 1 1
-21 1 1
-600 0 6
-568 1 0
-278 1 1
-29 1 1
-89 0 4
-1737 1 1
-58 1 1
-368 24 24
-2113 20 24
-218 0 2
-18 1 1
-684 4 4
-3200 1 1
-31 1 1
-58 18 18
-164 1 1
-37 1 1
-296 6 6
-431 1 1
-35 1 1
-431 1 1
-45 1 1
-93 1 1
-24 1 1
-216 1 1
-46 1 1
-2773 0 17
-751 2 1
-104 1 1
-59 1 1
-445 1 1
-26 1 1
-356 1 0
-1484 1 2
-436 25 25
-306 1 1
-55 1 1
-230 4 4
-892 1 0
-364 7 7
-796 1 1
-26 1 1
-663 0 2
-80 0 15
-4391 1 0
-133 1 1
-25 0 4
-41 0 2
-164 1 1
-61 4 4
-925 3 0
-1882 13 13
-4513 1 0
-111 1 1
-76 1 1
-202 6 0
-680 0 1
-200 3 0
-429 0 2
-736 1 1
-18 1 1
-1573 0 1
-119 1 1
-245 0 9
-11 1 1
-1656 54 22
-616 2 1
-158 0 1
-587 1 1
-39 4 1
-1053 6 6
-1116 1 1
-34 1 1
-152 10 7
-448 0 1
-269024 100000 863295
-334079 100000 50000
-180553 0 74
-66 73 3
-40 1 0
-28 156 73
-202 1 1
-17 0 1
-156 1 1
-55 1 1
-111 0 1
-144 1 1
-57 0 1
-687074 50000 50000
-120647 0 348
-45586 0 1
-6994 1 0
-3398063 44008 12354
-7672 0 2
-1809 1 0
-428524 101014 10165
-43170 4 4
-1064959 128966 5086
-1021 0 1
-1710 1 0
-931 0 2
-4505 0 1
-686 525 2
-432 33 0
-58 20 20
-12369 1014 0
-6233 0 1
-359485 100000 111749
-33855821 0 239
-2852113 1 0
-7040367 0 1
-2815738 3 1
-7055922 60000 50000
-363827 32 32
-104991 0 1
-203136 0 6050
-2271 47 47
-1424473 60000 50000
-13510190 22012 5553
-9194 0 3
-109 0 4
-40 0 1
-43 0 7
-2352 0 13
-5027 0 2
-534 1 0
-794 0 2
-4233 0 2
-5769 1 0
-381 1 0
-2524 0 2
-547 0 5
-1967 0 1
-1207 105 0
-1027 0 6
-3935380
-
-chain 4143271 chr15 100338915 + 19154641 19368514 chr15 102531392 + 21901264 22115049 110
-40441 8593 8593
-26 89965 89965
-4257 1 1
-30 1 1
-185 16464 16391
-43 29947 29883
-25 1 1
-34 23835 23884
-25
-
-chain 390135 chr15 100338915 + 26478746 26483022 chr15 102531392 + 28681030 28685306 6048
-1039 22 22
-3215
-
-chain 187810 chr15 100338915 + 26483022 26517556 chr15 102531392 - 73809068 73843318 79
-41 12 0
-36 1 1
-490 5 5
-285 1 1
-71 1 1
-215 1 1
-53 0 12
-8114 1 0
-10796 15 15
-2483 0 1
-20 1 1
-2048 8856 8847
-163 792 517
-33
-
-chain 51529 chr15 100338915 + 26530390 26530949 chr15 102531392 + 28731348 28731907 2473877
-450 8 8
-101
-
-chain 17522 chr15 100338915 + 26516748 26516957 chr15 102531392 + 22658399 22658608 1968
-209
-
-chain 14035 chr15 100338915 + 20378176 20378474 chr15 102531392 + 22829101 22829399 772378
-73 69 69
-156
-
-chain 12347 chr15 100338915 + 26530060 26530390 chr15 102531392 + 22671289 22671619 3189077
-244 4 4
-82
-
-chain 5537 chr15 100338915 + 96402403 96402461 chr15 102531392 + 98585049 98585107 22350382
-58
-
-chain 4486 chr15 100338915 + 96402461 96402508 chr15 102531392 + 98585002 98585049 16761199
-47
-
-chain 2874 chr15 100338915 + 26517060 26517091 chr15 102531392 + 28719096 28719127 6634083
-31
-
-chain 2874 chr15 100338915 + 26517029 26517060 chr15 102531392 + 28719096 28719127 6634084
-31
-
-chain 2874 chr15 100338915 + 26516998 26517029 chr15 102531392 + 28719096 28719127 6634085
-31
-
-chain 2874 chr15 100338915 + 26516967 26516998 chr15 102531392 + 28719096 28719127 6634086
-31
-
-chain 2314 chr15 100338915 + 26530003 26530033 chr15 102531392 + 22671232 22671262 5236
-30
-
-chain 12940492 chr15_random 784346 + 189260 358080 chr15 102531392 + 28561246 28726591 233
-2522 0 1
-3762 1 1
-40 1 1
-2427 6472 2
-1744 0 1
-263 0 7
-2963 4 4
-1889 1 0
-2501 0 1
-3377 6 6
-5238 0 1
-1277 5 5
-38 1 1
-8232 12 8
-5507 0 18
-155 1 0
-379 14 14
-363 7 13
-336 1 1
-46 1 1
-218 8 8
-1074 0 4
-101 12 13
-178 1 1
-93 1 1
-156 10 11
-398 0 20
-45 1 1
-255 9 10
-2661 0 1
-17 1 1
-82 1 1
-14 1 1
-227 64 64
-1154 1 0
-493 1 1
-39 1 1
-369 1 0
-21 1 1
-322 2 7
-222 0 2
-171 15 0
-81 1 1
-47 1 1
-159 9 9
-154 1 0
-272 4 4
-26 1 1
-121 8 7
-659 1 0
-440 1 1
-35 1 0
-1419 15 0
-181 0 2
-292 0 15
-1767 1 1
-44 1 1
-59 0 1
-910 0 1
-290 1 0
-288 1 0
-567 2 0
-1088 0 1
-1758 1 0
-72 1 1
-21 1 1
-5748 17 17
-800 0 1
-2037 13 13
-113 5 5
-2832 1 1
-44 1 1
-3581 2 0
-33 1 1
-812 5 5
-33 0 1
-257 17 17
-1932 0 14
-168 0 1
-424 5 0
-24 1 1
-67 14 14
-90 1 5
-124 1 1
-34 1 1
-48 0 9
-460 0 8
-294 7 0
-813 1 3
-240 1 0
-511 0 9
-190 1 0
-267 1 1
-38 1 1
-1082 7 57
-21 15 0
-28 0 1
-5 1 1
-123 0 5
-781 1 1
-21 1 1
-390 1 1
-36 1 1
-287 1 1
-90 0 3
-6 2 2
-189 9 9
-263 2 1
-724 13 14
-308 2 0
-1752 1 1
-114 1 1
-236 4 0
-46 1 1
-72 5 0
-1039 1 1
-25 1 1
-403 1 1
-22 1 1
-231 6 6
-834 15 15
-617 1 1
-53 1 1
-243 1 1
-154 3 5
-571 11 16
-231 1 1
-47 1 1
-910 1 1
-45 1 1
-1510 1 1
-79 1 1
-2053 1 1
-48 1 1
-768 8 8
-546 1 1
-19 1 5702
-784 6 0
-275 20 13
-131 114 114
-363 1 1
-46 1 1
-396 1 1
-39 1 1
-75 15 15
-1875 1 0
-332 1 1
-49 1 1
-265 3 2
-55 1 1
-96 1 1
-136 1 0
-305 8 8
-297 0 2
-255 2 2
-23 1 1
-181 19 6
-151 0 1
-707 667 9324
-284 5 3
-73 1 1
-208 26 25
-34 0 773
-80 20 0
-2003 400 125
-163 2 0
-2630 9 1
-19 1 1
-100 12 0
-2421 0 2
-47 21227 0
-853 1 0
-1238 0 12
-3571 1 1
-20 0 1
-2483 15 15
-8803 287 9594
-5992
-
-chain 8627768 chr15_random 784346 + 422939 629603 chr15 102531392 - 19338638 19927596 385
-168 56 59
-73 4 4
-378 23 23
-868 29 29
-85 1 0
-528 119 5106
-152 31 31
-184 8 7
-322 0 1
-62 46 45
-77 37 46
-80 22 22
-201 45 47
-175 31 33
-1923 82 77
-546 7051 32690
-7810 209 153340
-1308 1 0
-9826 1 0
-1486 1 1
-148 1 0
-76 6 6
-53 36 34
-178 5447 565
-14 14505 121
-72 13 16
-57 1 1
-157 0 2
-11 1 1
-74 1 1
-24 3 3
-220 1 1
-54 1 1
-142 1 1
-82 2 0
-60 4 0
-99 1 1
-106 1 1
-98 1 1
-402 1 1
-79 4 7
-78 1 9
-5 0 1
-31 7 7
-65 1 1
-105 0 1
-22 6 8
-76 10 8
-47 0 1
-39 3 0
-5 1 3
-108 2 2
-61 16307 40121
-676 26 26
-7087 25 25
-20818 7 7
-2750 60358 90388
-69 54 53
-165 166 516
-42 0 42
-81 4 151
-18 0 42
-148 111 112
-73 4 4
-378 23 23
-868 29 29
-85 1 0
-528 8 8
-280 32 34
-426 78 79
-81 648 334
-181 8 7
-485 0 2
-1404 24 24
-101 36 38
-240 8 8
-77 53 54
-347 18 18
-72 9 9
-94 82 82
-384 8 8
-250 108 151474
-1152 0 1
-633 226 12498
-3255 4 0
-58 32 32
-6209 1 1
-30 1 0
-1060 2 0
-3747 4 4
-173 5 5
-2548 0 22
-2275 0 20
-606 41 41
-4653 12 12
-6138 0 1
-148 5 0
-244
-
-chain 3986761 chr15_random 784346 + 0 334816 chr15 102531392 - 78891064 79878228 248
-30328 8040 15984
-3015 1 0
-70 44499 160931
-52 0 5
-1038 1 1
-29 1 1
-1001 0 18
-680 0 329
-181 1 1
-32 1 1
-839 2 0
-440 0 3
-547 1 0
-278 1 0
-410 1 1
-26 3 0
-101 1 1
-24 1 1
-149 0 9
-179 2 1
-29 1 1
-226 3 0
-21 1 1
-473 10 0
-717 2 0
-1044 1 1
-23 1 1
-625 1 1
-41 1 0
-150 1 1
-62 1 1
-145 59 59
-242 12 12
-179 1 1
-64 1 1
-1405 1 1
-35 0 2
-469 5 0
-401 0 1
-25 0 10
-17 1 1
-55 1 1
-165 1 1
-1966 15 23
-839 0 18
-969 1 1
-44 1 1
-1905 1 1
-47 1 1
-1037 128 128
-486 5 0
-1086 2 1
-199 4 4
-59 2 0
-243 84 0
-410 1 1
-39 1 1
-70 0 324
-77 1 187
-42 4 151
-897 135051 676116
-64 54092 52483
-25 1 1
-88 9286 18277
-201 26614 5202
-33 1 0
-1
-
-chain 2185345 chr15_random 784346 + 423107 689458 chr15 102531392 + 82637661 83186296 482
-30 0 5
-26 1346 1346
-29 885 5865
-31 576 577
-46 77 77
-5 0 1
-32 303 304
-45 175 176
-31 1923 1923
-66 1943 144683
-715 0 1
-548 13 13
-1907 1 1
-16 1 1
-66 3 0
-1219 5 1
-1066 34012 198199
-7204 2446 2446
-2762 100 7680
-5162 1 0
-2782 1 1
-26 7 4
-49 1 1
-3627 3 0
-1686 133598 65296
-3109 1 1
-21 1 1
-1430 63 63
-335 3 3
-14 4 0
-203 1 1
-23 5 5
-1262 4 4
-323 1 1
-47 1 1
-417 0 1
-537 19 1
-1913 2 0
-1685 6 0
-1740 1 1
-49 1 1
-120 1 1
-30 0 3
-920 4 0
-479 30 30
-1207 1 1
-182 4 0
-72 3 1
-78 1 1
-150 1 1
-46 1 1
-222 1 1
-24 1 1
-74 1 1
-44 1 1
-391 1 1
-33 1 1
-149 9 8
-56 1 1
-30 1 0
-52 1 1
-298 6 0
-22 1 0
-29 1 1
-393 35 0
-145 36 36
-226 15 15
-185 7 7
-692 1 1
-34 1 1
-1291 0 2
-1824 5 5
-1119 1 1
-49 1 2
-1025 25013 44930
-835 88 11347
-692 0 2
-2551 3 0
-1144 82 77
-1939 26 28
-164 1 1
-44 0 2
-201 1 1
-133 5 14
-77 1 1
-44 1 0
-92 1 0
-293 8 7
-184 31 31
-381 8 8
-384 1 1
-80 1 1
-94 9 9
-57
-
-chain 1845967 chr15_random 784346 + 61569 84889 chr15 102531392 - 73695594 73766494 782
-153 33 33
-49 1 0
-197 15 15
-67 62 62
-241 12 9
-185 41 44
-64 23 23
-559 50 50
-333 46 46
-397 6 6
-141 4 0
-660 50 50
-315 38 38
-282 309 47864
-57 7 7
-85 39 39
-340 62 62
-43 0 1
-77 0 1
-768 0 12
-71 70 69
-102 17 17
-58 45 50
-676 2 0
-430 21 22
-112 0 1
-401 4 0
-617 95 95
-168 50 50
-442 4 0
-91 114 114
-463 0 1
-94 28 28
-1577 16 16
-572 0 1
-1451 55 55
-2327 51 51
-394 1 0
-109 21 24
-660 50 54
-703 1 0
-93 22 22
-94 48 48
-219 46 46
-352 22 22
-150 155 161
-173 19 19
-162 6 12
-1201 48 49
-119 17 17
-435 4 4
-146 38 38
-946 10 10
-98 37 37
-60 47 47
-579
-
-chain 1297748 chr15_random 784346 + 203918 328028 chr15 102531392 - 73698913 73856126 264
-567 109104 118059
-369 106 23997
-700 2 0
-40 0 248
-320 0 33
-130 1 1
-18 1 1
-138 20 20
-1341 8 0
-863 1 1
-48 1 1
-240 1 1
-34 20 0
-3218 1 1
-20 1 1
-2062 46 46
-285 14 14
-937 1 1
-25 3 3
-305 1 1
-42 1 1
-706 2 0
-232 1 1
-67 1 1
-88 4 5
-844 1 1
-82 1 1
-430 0 7
-78 1 1
-458 27 27
-52
-
-chain 898399 chr15_random 784346 + 457589 504019 chr15 102531392 - 19636589 19905366 626
-5344 14 14
-7167 26767 249114
-26 7087 7087
-25
-
-chain 844102 chr15_random 784346 + 95554 784338 chr15 102531392 + 22730405 27183335 411
-59 9906 9932
-128 2128 2090
-42 1792 637909
-89 10 10
-71 198 198
-122 137 141
-341 29 29
-104 103 103
-395 11 14
-667 6 7
-74 7 0
-178 1 5
-203 9 4
-172 55 55
-791 25 25
-714 19 22
-597 133 133
-142 2 0
-252 0 4
-260 67 67
-41 6 0
-860 29 30
-258 93 95
-1793 11 11
-358 71 70
-242 1 1
-20 1 1
-1308 0 3
-468 0 2
-755 1 1
-81 2 2
-72 3 0
-597 4 4
-492 25 7
-1459 10 9
-674 16 16
-711 1 1
-49 1 1
-1525 1 1
-45 1 1
-2919 1 1
-36 1 1
-493 1 1
-21 1 1
-830 16 0
-3 7 0
-644 17 17
-479 0 1
-2343 0 315
-307 8 311
-87 0 3
-330 42 0
-520 7 6
-72 2 1
-745 6 6
-324 6 0
-398 22 22
-118 27 27
-68 600887 3728395
-44872
-
-chain 555121 chr15_random 784346 + 634265 679702 chr15 102531392 + 82723475 82991213 602
-20 1 1
-41 24204 246463
-2085 6 6
-667 14 14
-596 0 24
-1743 415 422
-870 1 0
-3572 1 1
-1152 8 0
-498 0 1
-3239 1 1
-34 1 1
-1283 1 1
-41 1 0
-676 0 2
-2078 0 1
-1283 0 18
-681 1 0
-223
-
-chain 530253 chr15_random 784346 + 409131 430676 chr15 102531392 - 19567939 19581201 1716
-786 8 0
-171 8918 159
-2113 8268 8752
-1281
-
-chain 417534 chr15_random 784346 + 35735 80744 chr15 102531392 + 23413134 23608954 1095
-840 0 54
-916 0 2
-777 3337 13583
-637 50 57
-858 0 4
-779 0 14
-171 1 2
-927 4 0
-1753 2 0
-814 35 35
-1073 14 14
-81 99 101
-66 42 42
-1291 66 66
-240 45 48
-68 36 36
-98 38 38
-1141 5 5
-70 14 15
-150 46 46
-650 13461 153954
-62 1206 1201
-45 3148 3138
-46 6617 6616
-50 2415 2415
-46 615 621
-64
-
-chain 169648 chr15_random 784346 + 417136 418914 chr5 180915260 + 131590649 131592427 748288
-1778
-
-chain 152639 chr15_random 784346 + 200201 201828 chr15 102531392 + 28662778 28664407 841936
-970 0 1
-468 5 6
-184
-
-chain 151945 chr15_random 784346 + 110737 203590 chr15 102531392 - 73700255 73867708 1083
-74 87238 121334
-88 426 14673
-942 2 0
-567 1880 28137
-86 1 1
-62 1 1
-716 14 14
-212 0 1
-468 0 1
-76
-
-chain 142059 chr15_random 784346 + 583198 664057 chr15 102531392 - 16763491 17663089 651
-176 7 7
-242 7 7
-1002 1 1
-61 1 1
-286 10 10
-1697 57790 716388
-17 1 1
-12 3589 70884
-35 145 145
-36 6576 99374
-431 11 1
-19 0 4
-96 2 0
-98 1 1
-62 1 1
-1047 10 15
-223 1 0
-575 2 0
-465 1 0
-8 1 1
-140 1 4
-65 1 1
-381 5111 5164
-145 1 1
-29 1 6
-32 8 2
-199
-
-chain 140486 chr15_random 784346 + 414032 415531 chr5 180915260 + 131627050 131628561 916856
-486 0 13
-290 2 1
-721
-
-chain 136843 chr15_random 784346 + 411466 412886 chr5 180915260 - 49283520 49284940 941594
-1420
-
-chain 113176 chr15_random 784346 + 577887 601700 chr15 102531392 + 85729223 85793813 754
-51 12 12
-630 1 1
-27 5 5
-51 41 41
-249 505 29710
-148 24 24
-110 0 2
-145 12 11
-646 54 53
-291 404 700
-590 7 0
-154 1 1
-36 5 3
-106 1 1
-42 1 1
-517 181 27
-164 18572 30011
-30
-
-chain 110898 chr15_random 784346 + 410214 411366 chr5 180915260 - 49350156 49351308 1158024
-1152
-
-chain 90718 chr15_random 784346 + 415631 422839 chr5 180915260 - 49281425 49321173 523505
-1405 4191 36723
-57 0 4
-785 0 4
-770
-
-chain 87628 chr15_random 784346 + 412986 413908 chr15 102531392 + 82958289 82959211 1453275
-922
-
-chain 78489 chr15_random 784346 + 408080 408895 chr5 180915260 + 131628738 131629553 1616335
-815
-
-chain 75848 chr15_random 784346 + 328894 334289 chr15 102531392 + 28663807 28669202 22165
-415 0 1
-219 14 14
-716 1 1
-62 1 1
-1820 1 0
-432 1 1
-21 1 1
-549 1 1
-42 1 1
-1098
-
-chain 55946 chr15_random 784346 + 579203 582900 chr15 102531392 - 19568187 19572180 874
-256 1085 1091
-54 291 291
-49 100 396
-255 1464 1453
-62 1 6
-80
-
-chain 50039 chr15_random 784346 + 328288 328894 chr15 102531392 - 73792653 73793260 1678654
-449 99 100
-58
-
-chain 41737 chr15_random 784346 + 53223 55079 chr15 102531392 - 79138743 79140590 1899
-987 5 0
-378 4 0
-30 1 1
-324 1 1
-36 1 1
-89
-
-chain 40184 chr15_random 784346 + 35650 52319 chr15 102531392 + 23578289 23604839 1865
-85 6507 16388
-50 5309 5309
-35 1168 1168
-99 66 66
-42 1291 1291
-66 240 240
-45 68 68
-36 98 98
-38 1380 1380
-46
-
-chain 36402 chr15_random 784346 + 63654 139260 chr15 102531392 + 20712328 20743651 996
-46 46877 2371
-29 5894 5886
-28 261 261
-55 0 3
-35 2163 2163
-70 17110 17298
-32 0 42
-10 2220 2218
-27 68 68
-335 31 31
-315
-
-chain 33407 chr15_random 784346 + 63271 84310 chr15 102531392 + 28567817 28636450 784
-50 2730 50298
-39 1361 1355
-70 2485 2497
-95 168 168
-50 618 618
-33 8782 8789
-48 4472 4485
-38
-
-chain 26884 chr15_random 784346 + 71527 84203 chr15 102531392 + 23434933 23447596 1313
-28 3628 3632
-43 3563 3545
-38 1762 1762
-91 1625 1625
-17 1 1
-30 721 722
-38 1054 1054
-37
-
-chain 17994 chr15_random 784346 + 577754 595591 chr15 102531392 + 82746005 82941680 2345
-133 777 777
-41 8083 152910
-1120 114 33023
-47 1 1
-5 265 681
-66 293 293
-111 2277 2277
-32 585 587
-5 0 1
-25 0 1
-6 1 0
-11 3164 2847
-53 540 540
-82
-
-chain 17584 chr15_random 784346 + 334305 334490 chr15 102531392 - 73868107 73868292 12488910
-185
-
-chain 16638 chr15_random 784346 + 334590 334767 chr15 102531392 + 28693782 28693959 13398527
-177
-
-chain 15574 chr15_random 784346 + 203754 203918 chr15 102531392 + 20713399 20713563 2884965
-164
-
-chain 11941 chr15_random 784346 + 112567 138945 chr15 102531392 + 28572611 28599524 1070
-24 791 791
-25 2119 2124
-57 23331 23861
-31
-
-chain 10106 chr15_random 784346 + 307857 307966 chr15 102531392 - 73812018 73812127 6634519
-109
-
-chain 9879 chr15_random 784346 + 198177 198415 chr15 102531392 + 28709863 28710101 596395
-238
-
-chain 5493 chr15_random 784346 + 34234 34291 chrY 59373566 + 27644447 27644504 32044688
-57
-
-chain 4133 chr15_random 784346 + 323293 323339 chr15 102531392 + 22666870 22666916 2166
-46
-
-chain 4016 chr15_random 784346 + 328237 328288 chr15 102531392 + 28668851 28668902 1790991
-51
-
-chain 3958 chr15_random 784346 + 107733 107775 chr15 102531392 - 78958306 78958348 1193
-42
-
-chain 3427 chr15_random 784346 + 198013 198049 chr15 102531392 + 20714128 20714164 4212128
-36
-
-chain 3014 chr15_random 784346 + 591545 685196 chr15 102531392 - 19431434 19585695 819
-47 89045 149655
-87 4422 4422
-50
-
-chain 2874 chr15_random 784346 + 307826 307857 chr15 102531392 - 73812018 73812049 6634520
-31
-
-chain 2855 chr15_random 784346 + 198147 198177 chr15 102531392 + 28831982 28832012 6776371
-30
-
-chain 2097 chr15_random 784346 + 200178 200201 chr15 102531392 - 79852957 79852980 911500
-23
-
-chain 1855 chr15_random 784346 + 307785 307816 chr15 102531392 + 28688468 28688499 5960032
-31
-
-chain 1291 chr15_random 784346 + 110710 110736 chr15 102531392 - 73822377 73822403 1552683
-26
-
-chain 1093 chr15_random 784346 + 687136 688443 chr15 102531392 - 19508634 19509938 742
-25 1251 1248
-31
-
-chain 7474990131 chr16 88827254 + 0 88822254 chr16 90354753 + 60000 90294753 17
-172342 0 1
-112 1 0
-5627 2 1
-8398838 17500 50000
-25336229 100000 150000
-1112651 9800000 11100000
-42003582 20000 50000
-1855370
-
-chain 9963354 chr16_random 105485 + 0 105485 chr16 90354753 + 29712462 29819360 326
-5589 7 8
-6783 0 218
-41 1 3
-38 1 1
-234 9 9
-219 46 0
-15 0 50
-3818 0 1
-1090 1 1
-45 1 1
-308 1 0
-524 0 4
-984 1 1
-24 1 0
-970 0 2
-106 1 1
-25 2 1
-436 0 5
-296 1 1
-23 2 0
-813 0 1
-1173 1 0
-5500 1 0
-1193 16 16
-1329 0 1
-2727 0 1
-3622 0 13
-3844 3 0
-5076 0 1
-4157 2 0
-178 0 2
-126 1 1
-344 5 6
-497 1 0
-620 7 7
-378 0 1
-669 24 25
-211 1 5
-453 0 11
-176 0 1
-486 0 8
-326 1 0
-2143 40 9
-2337 0 1
-866 1 0
-10 2 2
-1366 1 1
-44 1 1
-831 1 1
-45 1 1
-1612 6 5
-3801 0 1
-910 0 2
-486 0 1
-2775 1 0
-1083 1 0
-1793 1 1
-50 0 1
-1339 0 2
-145 17 17
-651 10 10
-1140 0 1
-724 1 1
-39 1 1
-3261 1 0
-1513 0 9
-606 22 0
-2027 27 19
-3470 11 0
-4100 3 0
-2045 0 4
-1047 0 1
-6647 78 1279
-748
-
-chain 7369813928 chr17 78774742 + 0 78653129 chr17 81195210 + 0 81060000 18
-252627 1 1
-24 1 1
-33 0 29
-566 87 0
-116 58 0
-92 29 0
-79 8 37
-485 1 59
-28 1 1
-76 233 1
-27 29 0
-2764 17 20
-2220 18 18
-837 1 1
-39 1 1
-564 1 1
-14 1 1
-2523 39 9
-1824 0 56
-76 29 0
-1681 0 1
-414 0 3
-256 0 68
-119 10 10
-290 0 4
-3193 1 0
-2562 0 4
-1809 3 0
-84 1 1
-62 1 1
-3703 0 27
-2041 16 0
-911 0 2
-696 4 4
-1428 15 15
-290 1 0
-1779 0 1
-60 1 1
-216 0 1
-375 1 1
-41 0 1
-9221 46522 100000
-3080543 0 1
-1208216 0 2
-1370 2 0
-1279 0 4
-322 0 5
-5661 210 0
-307 21 22
-973 8 0
-2901 1 0
-8479 0 1
-4122 7 0
-3187 4 0
-571 0 1
-167 0 1
-10174 7 7
-856 2 1
-1630 1 0
-4258 3 1
-1688 1 0
-264 0 304
-796 1 0
-8494 0 10
-2273 1 0
-8297 1 0
-1500 1 4
-733 2 2
-40 1 0
-4 0 1
-15 19 1
-64 1 253
-22 0 34
-18 1 205
-2070 2 0
-2981 14 13
-1309 0 1
-3991 3 0
-1939 0 3
-887 0 2
-463 18 0
-64 0 3
-2104 0 20
-556 0 4
-121 0 1
-3670 2 0
-4345 0 5394
-5334 0 1
-2505 4 10
-6776 14 11
-9573 0 1
-1136 0 2
-3754 1 0
-4588 1 0
-637 17 17
-1285 8 0
-369 0 1
-2084 1 0
-492 2 0
-517 0 4
-954 0 2
-1517 1 0
-958 9 0
-807 14 14
-357 0 10
-3611 0 2
-3191 0 39
-742 1 0
-646 2 0
-2211 1 0
-14829 1 0
-3465 11 0
-31 0 33
-833 16 16
-1345 0 1
-6443 5 4
-2627353 1 0
-11581979 0 43
-25 0 89
-238783 0 1
-1830653 1 0
-419873 100008 116477
-5587 6 0
-11056 0 2
-3240 1 0
-1237 0 2
-373 1 1
-43 1 1
-558379 100000 3000000
-1823446 0 1
-2728383 0 1
-29 0 1
-138 1 0
-144 6 8
-38 0 2
-7 0 1
-18 1 1
-70935 10 13
-52 28 31
-189 0 1
-41 2 2
-750363 44 44
-4038953 100000 50000
-1524006 1 1
-47 1 1
-231 2 0
-1175 1 0
-555 1 1
-49 1 1
-568 7 0
-605 2 0
-4954 1 1
-18 6 7
-567 0 1
-421 2 0
-943 75 67
-777 0 3
-925 3 0
-5 4 0
-318 1 0
-230 20 13
-244 1 1
-13 0 1
-42 1 1
-220 1 1
-56 1 1
-101 225 0
-1113 1 0
-17 1 1
-2614 4 0
-3186 50 50
-3872 0 2
-617 14 0
-5674 0 2
-1852 1 1
-63 1 1
-56 1 1
-25 1 1
-332 0 6
-423 5 5
-61 4 0
-108 1 1
-46 1 1
-160 2 2
-72 1 1
-162 1 1
-20 1 1
-53 1 1
-63 1 1
-112 1 1
-59 1 1
-5885 2 0
-255 36 36
-6246 1 1
-114 1 1
-255 1 1
-49 1 1
-210 1 1
-138 157793 28603
-927 5 0
-212 7 7
-641 17 17
-1296 46 46
-2513 71 69
-76 1 2
-61 50226 0
-1959 18 18
-2727 22 22
-6616 1 0
-5109 68 86
-2450 7 7
-50 10 0
-3439 0 4
-4179 0 4
-2749 0 1
-1124 8 0
-56 1 1
-1840 14 14
-624 8 0
-1743 4 0
-3689 0 4
-2051 0 1
-751 0 1
-2111 10 11
-3110 1 0
-682 1 0
-2795 5 2
-241 0 1
-165 1 3
-1258 0 1
-1602 5 0
-3715 0 1
-1308 0 1
-2058 1 0
-1624 0 1
-478 4 0
-9 6 0
-35 3 1
-47 0 1
-2425 1 0
-1178 0 4
-33 1 1
-415 5 5
-887 1 3
-946 29 29
-630 15 0
-259 2 0
-78 0 1
-4570 0 1
-322 1 0
-1801 2 0
-836 3 0
-1509 0 1
-1732 0 1
-935 0 6
-1372 1 0
-625 2 12
-5009 1 1
-75 0 1
-20 1 0
-153 20 21
-489 4 326
-1375 1 0
-774 1 1
-16 1 1
-3642 5 0
-497 4 0
-174 9 0
-1317 0 3
-508 0 1
-1126 1 0
-1952 0 2
-565 2 0
-871 0 1
-1460 6 0
-55 0 1
-420 6 0
-57 1 1
-119 1 1
-427 1 0
-459 14 11
-448 0 1
-1275 7 7
-360 1 0
-73 1 1
-48 1 1
-4920 3 0
-713 41 34
-691 1 1
-44 1 1
-1642 9 10
-566 0 1
-173 0 4
-798 0 10
-810 1 0
-78 18 17
-1531 0 2
-1274 1 1
-39 1 1
-53 3 1
-202 0 1
-707 17 17
-1733 0 1
-14053 3 0
-286 3 1
-5600 4 0
-6458 0 1
-4866371 102000 0
-1870113 257 0
-590050 6 18
-2095 12 12
-24846 1 0
-5154 22 22
-1561 0 4
-5946 1 0
-2317 0 4
-1643 1 1
-27 1 1
-1237 1 0
-2698 1 1
-140 1 1
-1689 0 2
-836 29 30
-5333 1 0
-509 1 0
-5216 6 0
-10782 47 47
-1095 13 3
-1039 0 1
-11605 1 0
-22064 0 1
-16612 8 0
-902 1 0
-757 1 0
-619 0 1
-10979 1 1
-18 1 1
-1517 1 0
-4576 1 0
-12559 4 0
-2725 0 1
-5291 2 0
-8706 0 1
-83 1 0
-424 0 7
-72 38 0
-5528 1 0
-23971 1 0
-7855 54 22
-4095 0 1
-803 5 5
-6382 6 0
-3545 0 28
-4265 0 2
-13194 6 6
-6463 1 0
-26075 1 1
-59 1 1
-10791 17 7
-707 0 1
-210 1 0
-1655 0 2
-5301 1 0
-1930 1 0
-14632 2 0
-1043 1 0
-3607 3 0
-312 0 1
-5953 2 0
-170 0 17
-489 0 1
-5260 0 28
-888 10 0
-2461 10 10
-237 2 0
-1716 3 1
-10691 0 4
-3757 1 0
-6173 0 1
-8017 1 2
-3594 0 4
-5439 0 1
-4138 28 57
-6418 0 1
-1267 1 0
-720 0 6
-1083 2 0
-3878 0 1
-3310 23 23
-4349 1 1
-44 1 1
-3135 0 1
-174853 1 2
-2008 7 7
-5657 0 1
-6496 0 3
-89 0 5
-665 0 1
-954 46 46
-375 7 8
-1248 28 28
-2041 0 2
-2753 1 0
-1863 0 3
-3228 1 0
-3575 0 4
-40 1 1
-6488 0 2
-8612 11 11
-3795 0 16
-2105 0 1
-268 1 1
-22 3 0
-7889 4 0
-701 4 0
-2411 28 34
-2943 2 3
-8420 1 0
-926 0 324
-6732 1 0
-543 4 3
-4028 2 0
-51 52 40
-3000 1 0
-530 1 0
-2083 0 2
-1173 0 17
-119 16 16
-2727 1 0
-543 0 1
-783 1 0
-1372 0 4
-8624 20 0
-278 44 44
-4364 51 50
-2856 0 1
-5399 0 1
-1506 1 0
-919 0 6
-7229 10 0
-3225 1 0
-435 1 0
-2814 47 47
-1577 0 132
-9785 0 1
-2035 6 0
-7655 1 0
-198207 0 132
-11704 0 5
-7648 1 0
-9062 4 0
-8778 0 2
-7014 1 0
-1613 0 2
-790 7 5
-7433 1 0
-6482 12 12
-6798 0 1
-1422 1 0
-3454 1 1
-43 1 1
-3097 0 2
-334 0 18
-1444 1 0
-2400 3 0
-3272 0 1
-9106 1 0
-1573 0 1
-4742 1 0
-3366 1 0
-5484 0 1
-2444 0 5
-5448 8 8
-2539 0 1
-1471 0 1
-238 1 1
-16 1 1
-288 5 5
-2995 0 2
-951 1 1
-35 1 1
-279 16 15
-3534 6 0
-3513 0 1
-163 0 1
-6173 0 1
-1074 1 0
-2818 1 0
-2868 0 1
-3796 1 0
-1118 1 167
-1278267 25 25
-10747172 0 217
-3504877 0 1053
-10844 13 11
-18805 1 0
-1960834 126729 50000
-3065 1 0
-3601036 90008 8833
-34292 1 0
-1834 0 44
-3083 1 1
-43 1 1
-789 1 0
-11432680 153000 50000
-1902015 0 4098
-99 0 21
-3183 6 6
-877 1 1
-49 1 1
-296 0 1
-1375 1 1
-21 1 1
-607 5 5
-98 0 22
-6811 1 1
-17 0 11
-3804 1 0
-1356 1 1
-29 1 1
-297 1 0
-9543 0 2
-3130 0 4
-861 0 1
-27346 1 0
-7547 8 6
-2834 0 2
-394 4 0
-6524 1 0
-405 11 8
-1128 7 0
-271 1 1
-21 0 28
-507 6 0
-1211 44 31
-384 0 3
-521 18 18
-395 11 0
-799 1 1
-25 3 2
-51 1 49
-49 1 1
-558 0 1
-351 1 0
-2779 13 13
-114398 65008 82124
-7795 0 1
-18 1 1
-4140 1 0
-28048 1 1
-32 1 1
-4630 1 0
-4573 3 0
-357 2 0
-4812 1 0
-14372 0 3
-203 0 1
-26257 1 0
-2734 0 2
-19262 5 5
-5022 0 1
-25471 0 1
-1114538 0 53
-82 126 0
-1416 16 16
-629 57 0
-463 1 0
-148 1 1
-24 1 1
-2322 1 1
-23 1 0
-725 0 16
-24 16 0
-95 9 9
-1277 0 1
-2498 0 1
-354 49 0
-41 0 50
-17 0 49
-37 0 49
-65 8 152
-906 0 47
-234
-
-chain 3352932 chr17 78774742 + 33364384 33585329 chr17 81195210 - 44852585 44945131 363
-36 7017 7017
-2072 1 1
-16 1 1
-2167 2 0
-2513 1 1
-44 1 1
-1296 17 17
-860 5 0
-1482 0 11
-3433 1 1
-18 1 1
-393 0 3
-198 19 18
-1850 4 5
-267 1 0
-1125 6 7
-1255 1 0
-1502 0 1
-37 0 1
-26 0 1
-302 0 1
-1164 4 2
-1145 8 8
-1170 0 1
-298 1 2
-330 1 0
-2433 13 13
-79 0 2
-5343 1 1
-26 1 1
-994 1 3
-943 0 3
-2485 1 1
-22 1 1
-1574 129212 0
-265 54 54
-5225 26 26
-995 36 36
-240 1 0
-5900 61 61
-112 65 65
-53 14 14
-150 95 95
-160 48 48
-108 70 66
-401 0 6
-354 27 27
-56 65 65
-716 5 3
-1097 4 0
-518 27 27
-944 11 11
-579 37 37
-614 1 0
-2967 12 0
-601 1 10
-1307 35 35
-1719 0 889
-1973 0 3
-709 2 0
-496 5 1
-185 11 11
-98 1 0
-724 3 0
-2103 0 5
-1038 0 1
-257 7 0
-231 1 0
-312 0 2
-423 6 6
-520 10 13
-294 1 0
-17 1 1
-413 4 0
-1698 1 1
-46 1 1
-597 1 1
-21 1 1
-1182 0 2
-50 1 1
-44 0 2
-34 66 3
-3318 3 0
-624 7 0
-507 0 1
-60 1 1
-49 1 1
-332 1 1
-38 1 1
-77 1 1
-19 1 1
-65 1 0
-1174 5 0
-76
-
-chain 1309281 chr17 78774742 + 33410392 33424757 chr17 81195210 + 36336024 36350387 1779
-203 116 116
-6522 2 0
-5195 584 584
-1743
-
-chain 421642 chr17 78774742 + 33424760 33429230 chr17 81195210 - 44789041 44793512 103557
-258 1 0
-320 0 1
-3477 0 1
-414
-
-chain 288364 chr17 78774742 + 33534894 33553104 chr17 81195210 + 60335980 60353933 1564
-39 403 82
-124 31 31
-264 17 18
-283 79 89
-146 36 36
-392 27 27
-75 32 32
-295 106 106
-170 1 0
-69 35 35
-148 57 57
-152 23 23
-96 16 16
-594 57 58
-172 87 87
-108 39 39
-156 68 68
-148 63 63
-54 9 9
-39 289 289
-30 13136 13189
-45
-
-chain 141893 chr17 78774742 + 38701721 38703214 chr17 81195210 + 41346194 41347687 907641
-1493
-
-chain 138910 chr17 78774742 + 59795041 59797994 chr3 198022430 + 46191235 46194190 927459
-65 140 139
-77 32 32
-50 53 53
-51 108 111
-72 86 86
-65 76 76
-109 74 74
-120 2 0
-121 111 111
-69 23 23
-101 39 39
-56 40 40
-294 20 20
-65 100 100
-105 124 124
-147 116 116
-64 108 110
-70
-
-chain 73899 chr17 78774742 + 33536708 33552896 chr17 81195210 + 36333128 36349315 1571
-27 75 75
-32 306 306
-95 240 240
-35 148 148
-57 881 881
-57 172 172
-87 108 108
-39 156 156
-68 148 148
-63 6667 6667
-36 6153 6152
-49 112 112
-64 239 239
-74
-
-chain 29385 chr17 78774742 + 33422514 33422962 chr17 81195210 + 60352539 60352987 2653
-73 72 72
-133 53 53
-117
-
-chain 28843 chr17 78774742 + 33535172 33536316 chr17 81195210 + 34740000 34741144 3516
-164 124 124
-31 564 564
-79 146 146
-36
-
-chain 23419 chr17 78774742 + 40573363 40573608 chr17 81195210 - 37977034 37977279 7093437
-245
-
-chain 22267 chr17 78774742 + 59795106 59797450 chr15 102531392 + 100960318 100962666 927477
-74 509 513
-86 250 250
-74 1061 1061
-100 108 108
-82
-
-chain 19110 chr17 78774742 + 33422430 33422845 chr17 81195210 + 34807497 34807912 5737
-84 73 73
-72 133 133
-53
-
-chain 15302 chr17 78774742 + 59872221 59872543 chrX 155270560 + 133327972 133328295 14745200
-91 145 146
-86
-
-chain 15089 chr17 78774742 + 33553212 33554185 chr17 81195210 + 34758015 34758988 3454
-70 755 755
-27 56 56
-65
-
-chain 12559 chr17 78774742 + 41846587 41875489 chr17 81195210 + 44708735 44737620 783
-44 4372 4365
-43 24396 24386
-47
-
-chain 12028 chr17 78774742 + 253252 253513 chr17 81195210 + 253455 253745 1186280
-87 116 116
-26 30 59
-2
-
-chain 9840 chr17 78774742 + 59850421 59850563 chr12 133851895 - 30785452 30785594 23191844
-56 27 27
-59
-
-chain 8117 chr17 78774742 + 33410595 33410681 chr17 81195210 + 34744635 34744721 10477
-86
-
-chain 7470 chr17 78774742 + 59872141 59872220 chr8 146364022 - 25940938 25941017 21166303
-79
-
-chain 6548 chr17 78774742 + 59823421 59823489 chr9 141213431 + 108396482 108396550 29214974
-68
-
-chain 6212 chr17 78774742 + 33601781 33601849 chr17 81195210 + 34807429 34807497 5781
-68
-
-chain 6147 chr17 78774742 + 33578902 33578968 chr17 81195210 + 34784578 34784649 3380
-29 0 5
-37
-
-chain 5883 chr17 78774742 + 33556525 33558123 chr17 81195210 + 34761324 34762919 3874
-27 1534 1531
-37
-
-chain 5739 chr17 78774742 + 59862459 59862519 chr13 115169878 + 43436593 43436653 31343618
-60
-
-chain 5729 chr17 78774742 + 59852430 59852489 chr7 159138663 - 42785228 42785287 31366016
-59
-
-chain 5493 chr17 78774742 + 254397 254454 chr17 81195210 + 254136 254193 32044913
-57
-
-chain 5493 chr17 78774742 + 254339 254396 chr17 81195210 + 254136 254193 32044914
-57
-
-chain 4633 chr17 78774742 + 59795405 59797489 chr7 159138663 + 22571262 22573349 985966
-53 1992 1995
-39
-
-chain 3684 chr17 78774742 + 59871978 59872017 chr5 180915260 + 67132991 67133030 32368210
-39
-
-chain 3604 chr17 78774742 + 59872312 59872350 chr6 171115067 + 73766967 73767005 18649321
-38
-
-chain 3578 chr17 78774742 + 59797823 59797921 chr9 141213431 - 46000791 46000889 1219359
-98
-
-chain 3496 chr17 78774742 + 59872079 59872141 chrX 155270560 - 52661918 52661980 17303862
-62
-
-chain 3063 chr17 78774742 + 59796390 59796453 chr18 78077248 + 3738092 3738155 1007405
-63
-
-chain 2832 chr17 78774742 + 78651772 78651801 chr17 81195210 + 81058451 81058480 35013371
-29
-
-chain 2507 chr17 78774742 + 254312 254338 chr17 81195210 + 254167 254193 28153285
-26
-
-chain 2327 chr17 78774742 + 253481 253511 chr17 81195210 + 253858 253888 2965414
-30
-
-chain 2229 chr17 78774742 + 59795509 59795562 chr9 141213431 + 99971007 99971060 1163412
-53
-
-chain 2158 chr17 78774742 + 59871912 59871978 chr10 135534747 - 7120285 7120351 17475521
-66
-
-chain 2116 chr17 78774742 + 41755737 41755765 chr17 81195210 - 18330211 18330239 723
-28
-
-chain 2038 chr17 78774742 + 59872018 59872072 chr12 133851895 - 60047857 60047911 21673207
-54
-
-chain 1971 chr17 78774742 + 33410681 33410711 chr17 81195210 + 58084086 58084116 2335
-30
-
-chain 1910 chr17 78774742 + 59797697 59797752 chr7 159138663 - 95523915 95523970 1276958
-55
-
-chain 1797 chr17 78774742 + 59795569 59795617 chr8 146364022 - 39560190 39560238 1234503
-48
-
-chain 1764 chr17 78774742 + 59795840 59795881 chr17 81195210 - 78142303 78142344 1077161
-41
-
-chain 1713 chr17 78774742 + 59797636 59797671 chr10 135534747 - 112842234 112842269 1000659
-35
-
-chain 1680 chr17 78774742 + 59795180 59795214 chr3 198022430 + 108471362 108471396 1315432
-34
-
-chain 1591 chr17 78774742 + 59795881 59795916 chrX 155270560 - 139019545 139019580 1025236
-35
-
-chain 1456 chr17 78774742 + 59796656 59796685 chr6 171115067 + 121488440 121488469 989186
-29
-
-chain 1332 chr17 78774742 + 33532356 33535172 chr17 81195210 + 34572150 34574966 5130
-25 2722 2722
-69
-
-chain 1250 chr17 78774742 + 59795215 59795246 chr11 135006516 - 104930893 104930924 1222490
-31
-
-chain 1089 chr17 78774742 + 59795324 59795355 chrX 155270560 - 141145732 141145763 1311664
-31
-
-chain 1006 chr17 78774742 + 59797671 59797695 chrX 155270560 + 72606434 72606458 1154867
-24
-
-chain 622 chr17 78774742 + 33334125 33344374 chr17 81195210 - 46414201 46424210 397
-69 10130 9890
-50
-
-chain 20335446 chr17_random 2617613 + 224588 1377183 chr17 81195210 - 41910550 46712950 133
-1433 3 0
-976 0 1
-281 0 1
-1231 0 14
-2584 0 15
-2816 1 0
-3815 1 0
-122 1 1
-25 1 1
-335 0 1
-4687 29 0
-68 0 1
-1769 32 0
-616 3 0
-1017 1 1
-35 1 1
-864 17 17
-321 4 4
-47 1 1
-6467 8 10
-746 1 0
-188 30 0
-179 14 14
-120 1 1
-19 1 1
-477 1 1
-25 1 1
-300 5 5
-33 4 4
-968 6 6
-1546 1 1
-39 1 1
-66 1 1
-92 1 1
-349 12 12
-839 3 3
-36 1 1
-654 1 1
-88 1 1
-647 3 0
-993 10 8
-296 0 12
-183 4 4
-385 1 1
-25 1 1
-405 1 1
-29 1 1
-108 1 1
-36 1 1
-57 1 1
-88 2 1
-78 4 4
-39 1 1
-133 1 1
-133 1 1
-162 1 8
-398 14 14
-52 16 16
-122 1 1
-56 1 1
-98 1 1
-25 1 1
-332 1 1
-48 1 1
-83 0 1
-25 1 1
-71 1 1
-71 1 1
-79 4 0
-87 1 1
-207 1 1
-70 1 1
-263 16 16
-143 1 1
-72 1 1
-198 0 1
-1062 104 0
-6 61 0
-278 8 8
-454 49 49
-297 0 1
-1271 1 1
-48 1 1
-85 1 1
-66 1 1
-89 1 0
-327 1 1
-61 1 1
-51 1 1
-25 2 2
-72 1 1
-80 1 1
-132 1 1
-136 4 4
-63 1 1
-47 1 1
-134 1 1
-28 1 1
-1004 1 1
-45 1 1
-2017 1 1
-22 1 1
-778 8 0
-3805 0 4
-3884 1 0
-1082 1 1
-39 1 1
-926 1 0
-12182 105 0
-19079 4 0
-108 0 6
-81968 13 12
-5894 126 0
-5069 696334 2698100
-65 1 1
-31 0 1
-165 15 0
-2504 0 2
-1155 0 10
-463 1 0
-2422 0 1
-90 10 0
-75 0 1
-397 0 1
-64 31 32
-1531 4 0
-2064 0 1
-1305 1 0
-1045 0 1
-1972 0 1
-3554 0 2
-428 1 0
-1541 10 12
-1808 1 0
-1758 0 1
-500 1 0
-737 1 0
-218 0 1
-2132 0 1
-744 0 1
-7456 2 0
-45 0 2
-2311 23 23
-727 0 2
-916 1 0
-360 5 5
-2956 0 1
-3263 3 0
-1460 1 1
-34 1 1
-117 1 0
-1852 10 0
-50 7 7
-3949 42 42
-528 40 40
-736 100 17954
-680 119199 29667
-516 22 22
-2397 100 1694896
-1291 0 4
-232 1 1
-32 1 1
-1529 0 4
-20 2 0
-42 0 2
-94 0 10
-402 1 1
-16 1 1
-1099 1 1
-49 1 1
-2223 32 32
-1530 36 36
-1563 57608 84063
-160 94 94
-164 108 108
-123 61 61
-136 449 449
-3509 28 28
-1092 1 0
-611 1 1
-28 1 1
-2932 1 1
-52 49 45
-64 1 1
-27 1 1
-1320 1074 0
-6819 0 1
-4716
-
-chain 16836081 chr17_random 2617613 + 2022361 2536424 chr17 81195210 + 77630507 81150656 169
-143 0 4
-116 4 4
-74 12 10
-298 1 0
-533 1 0
-340 27 27
-130 16 16
-184 15 14
-699 1 0
-68 1 0
-153 1 0
-1835 1 0
-5 2 0
-95 1 0
-105 6 4
-14 1 0
-10 1 0
-88 1 0
-63 1 0
-27 1 0
-37 1 0
-18 1 0
-75 1 0
-49 2 0
-366 1 0
-206 1 0
-114 1 0
-237 1 0
-265 16 12
-223 1 0
-182 1 0
-26 1 0
-34 1 0
-138 1 0
-170 1 0
-26 1 0
-16 1 0
-53 4 2
-85 1 0
-188 1 0
-107 1 0
-31 1 0
-180 1 0
-4 2 1
-4 1 0
-16 1 0
-21 1 0
-324 1 0
-106 2 0
-46 1 0
-74 1 0
-12 1 0
-557 2 0
-194 5 2
-23 1 0
-67 6 3
-7 1 0
-50 1 0
-143 1 0
-190 1 0
-24 1 0
-310 1 0
-204 1 0
-108 1 0
-15 1 0
-212 1 0
-3 1 0
-57 4 2
-44 1 0
-298 1 0
-38 1 0
-54 1 0
-112 1 0
-20 2 0
-79 1 0
-10 6 3
-12 1 0
-59 1 0
-51 1 0
-234 2 0
-43 1 0
-194 1 0
-5 1 0
-96 9 4
-67 2 0
-270 1 0
-13 1 0
-59 1 0
-54 1 0
-57 1 0
-375 1 0
-50 1 0
-87 1 0
-83 4 2
-234 4 2
-44 1 0
-24 7 4
-25 1 0
-44 1 0
-139 1 0
-201 12 9
-215 1 0
-5 1 0
-30 1 0
-43 1 1
-54 16 13
-210 1 0
-109 2 0
-55 1 0
-14 1 0
-126 1 0
-79 1 0
-326 1 0
-18 1 0
-150 1 0
-13 1 0
-85 1 0
-47 1 0
-16 1 0
-41 1 0
-43 5 3
-56 1 0
-62 1 0
-164 1 0
-108 1 0
-20 2 0
-137 1 0
-214 1 0
-14 1 0
-5 2 0
-60 5 3
-24 1 0
-72 2 0
-25 1 0
-23 1 0
-60 1 0
-53 1 0
-15 1 0
-145 1 0
-337 1 0
-112 1 0
-39 1 0
-234 1 0
-7 2 0
-108 1 0
-19 1 0
-150 1 0
-22 5 3
-221 1 0
-30 1 0
-195 1 0
-126 1 0
-116 1 0
-189 1 0
-231 1 0
-87 2 0
-136 2 0
-69 1 0
-350 1 1
-29 1 0
-76 1 0
-42 1 0
-10 3 1
-63 1 0
-168 1 0
-97 1 0
-11 1 0
-291 1 0
-150 1 0
-10 1 0
-141 15 12
-9 1 0
-35 1 1
-57 1 0
-9 2 0
-211 1 0
-193 1 0
-51 1 0
-337 1 0
-94 1 0
-9 1 0
-58 1 0
-152 1 0
-58 1 0
-127 1 0
-6 1 0
-65 1 0
-379 1 0
-93 1 0
-11 1 0
-106 1 0
-545 1 0
-11 1 0
-66 2 0
-28 1 0
-242 4 2
-32 8 5
-373 10 9
-242 1 0
-207 1 0
-51 1 0
-132 1 0
-118 1 0
-19 2 0
-116 1 0
-16 1 0
-23 1 0
-54 1 0
-67 1 0
-62 1 0
-52 10 7
-15 2 0
-33 1 0
-248 1 1
-27 1 0
-122 1 0
-25 1 0
-55 1 0
-141 1 0
-57 1 0
-45 1 0
-21 1 0
-66 4 2
-23 1 1
-234 1 1
-25 2 2
-56 1 0
-34 1 0
-12 1 0
-11 1 0
-5 1 0
-54 1 0
-16 1 0
-64 1 0
-361 1 1
-24 1 0
-111 1 0
-12 1 0
-74 1 0
-56 1 0
-43 1 0
-21 1 0
-8 1 0
-13 2 0
-34 1 0
-59 1 0
-79 1 0
-159 1 0
-69 2 0
-15 2 0
-8 1 0
-142 19 17
-302 1 0
-49 1 0
-114 1 0
-72 1 0
-38 1 0
-16 1 0
-39 1 0
-106 1 0
-16 3 1
-31 1 0
-5 1 0
-43 1 0
-120 1 0
-16 1 0
-82 1 0
-47 4 1
-10 6 3
-59 1 0
-10 1 0
-258 1 0
-97 14 13
-72 1 0
-126 1 0
-14 1 0
-92 1 0
-406 1 0
-194 1 0
-43 1 0
-30 1 0
-50 1 0
-8 1 0
-161 6 4
-39 1 0
-12 1 1
-60 1 0
-61 1 0
-23 1 0
-13 1 0
-41 2 0
-260 1 0
-144 1 0
-38 1 0
-45 1 0
-17 1 0
-73 1 0
-64 20 13
-25 1 0
-84 1 0
-42 11 6
-180 1 0
-32 2 0
-172 0 1
-65 1 0
-53 1 0
-39 3 1
-203 1 0
-16 3 1
-42 3 2
-27 6 4
-13 1 0
-99 1 0
-34 4 2
-511 1 0
-182 1 0
-230 8 3
-42 1 0
-16 1 1
-270 5 4
-13 1 0
-141 1 0
-100 1 0
-144 1 0
-146 1 0
-356 1 0
-99 1 0
-69 2 0
-146 1 0
-55 18 14
-54 7 4
-18 1 0
-170 2 0
-45 1 0
-13 1 0
-628 1 0
-93 1 0
-46 1 0
-131 1 0
-20 1 0
-98 1 0
-20 1 1
-355 0 2
-88 1 0
-121 1 0
-31 1 0
-27 1 0
-132 1 0
-64 1 0
-43 1 0
-30 1 0
-95 1 0
-22 1 0
-44 6 3
-20 1 0
-138 1 0
-198 1 0
-100 1 0
-163 1 0
-6 1 0
-155 1 0
-79 1 0
-34 1 0
-193 1 0
-159 1 0
-50 5 3
-30 1 0
-9 1 0
-115 1 0
-93 1 0
-54 1 0
-91 1 0
-336 1 0
-134 18 13
-126 1 0
-61 1 0
-133 1 0
-613 4 2
-244 1 0
-586 1 0
-5 1 0
-93 19 16
-148 6 3
-12 2 1
-20 1 1
-138 102 11399
-572 8 6
-529 1 0
-659 1 1
-35 1 0
-191 2 0
-56 1 0
-105 1 0
-18 1 0
-226 1 0
-59 15 16
-275 1 0
-87 1 0
-5 1 0
-85 1 0
-21 1 0
-71 1 0
-507 1 0
-21 3 1
-82 1 0
-32 1 0
-39 1 1
-312 1 0
-263 1 0
-196 5 3
-23 5 3
-275 1 0
-46 2 0
-154 0 6
-229 1 0
-27 1 0
-87 1 0
-5 2 0
-502 1 0
-97 105 101
-162 1 0
-114 1 0
-65 1 1
-43 1 0
-217 1 0
-14 1 0
-172 1 0
-326 1 0
-9 1 0
-446 1 0
-73 1 0
-245 2 0
-114 1 0
-237 1 0
-35 22 13
-318 1 0
-320 1 0
-76 1 1
-54 1 0
-44 1 1
-100 1 0
-30 0 1
-462 1 0
-22 1 1
-72 1 1
-121 1 0
-37 1 0
-22 5 0
-23 1 1
-154 1 0
-63 1 1
-87 1 0
-278 1 0
-36 1 1
-230 1 0
-182 3 1
-51 1 0
-7 1 0
-101 1 0
-39 1 0
-17 1 0
-55 1 0
-13 1 0
-114 1 0
-13 1 0
-24 1 1
-69 10 9
-171 1 0
-60 1 1
-77 1 1
-8 2 1
-25 1 0
-51 1 0
-327 1 0
-105 2 0
-133 0 1
-28 1 0
-67 1 0
-119 4 2
-334 1 0
-37 2 1
-47 1 0
-165 1 0
-29 1 0
-35 1 0
-46 1 0
-9 1 0
-657 1 0
-62 1 0
-171 1 0
-17 1 0
-113 1 0
-15 1 1
-123 1 1
-62 1 0
-4 1 1
-288 21 0
-809 0 1
-22 1 0
-61 1 0
-52 1 0
-25 2 0
-263 3 1
-35 1 0
-192 238701 2061422
-87 1 0
-6 1 0
-1080 1 0
-76 1 0
-1007 1 0
-98 1 0
-35 1 0
-134 1 0
-285 1 0
-33 0 1
-225 1 0
-281 1 0
-108 1 0
-55 1 0
-107 1 0
-202 15 12
-111 1 0
-36 2 0
-25 1 0
-202 1 0
-97 1 0
-143 1 1
-21 1 0
-222 1 0
-41 1 0
-492 0 4
-594 1 0
-181 1 0
-410 1 0
-37 1 0
-13 1 0
-34 1 0
-76 38 37
-204 27 27
-204 40 32
-432 1 0
-143 1 0
-271 1 0
-224 96 91
-385 1 0
-337 1 0
-375 1 0
-139 22 17
-297 1 0
-72 1 0
-5 2 0
-193 1 0
-8 1 0
-28 1 0
-17 1 0
-17 1 0
-445 1 0
-169 1 36
-35 3 1
-425 1 0
-41 1 0
-37 1 0
-79 1 0
-100 1 0
-130 1 0
-419 1 0
-17 1 1
-284 3 1
-56 1 0
-9 2 1
-655 1 0
-158 2 0
-8 1 0
-34 1 1
-519 1 0
-39 1 0
-78 1 0
-216 1 0
-3 1 0
-68 1 0
-56 1 0
-70 1 0
-290 0 4
-46 0 2
-108 0 2
-23 0 114
-830 1 0
-136 76 98
-63 65 64
-380 1 0
-106 1 1
-358 1 0
-64 1 1
-17 1 0
-171 5 3
-27 1 1
-130 13 10
-131 1 0
-415 1 0
-5 1 0
-37 1 0
-29 1 0
-27 1 0
-750 1 0
-249 1 0
-221 1 0
-109 1 0
-50 1 0
-323 1 0
-296 1 0
-383 1 0
-67 1 0
-239 2 0
-248 1 0
-9 1 0
-180 1 0
-241 1 0
-40 3 1
-6 1 0
-19 1 0
-27 1 0
-166 1 0
-80 1 0
-163 1 0
-33 1 0
-9 1 0
-172 1 0
-261 1 0
-200 1 0
-14 6 2
-121 1 0
-37 4 2
-74 1 0
-97 5 3
-10 2 1
-51 1 0
-642 1 0
-317 14 11
-163 3 1
-25 2 0
-875 1 0
-128 1 0
-211 8 4
-409 1 0
-233 1 0
-263 1 0
-12 1 0
-73 1 0
-188 1 0
-96 1 0
-183 1 0
-126 1 0
-235 1 1
-68 0 1
-618 1 0
-13 1 0
-73 1 0
-1315 883 57
-78 2 2
-774 1 0
-21 1 0
-13 1 0
-9 2 0
-168 1 0
-214 1 0
-84 3 1
-645 1 0
-150 1 0
-72 1 0
-8 1 0
-108 1 0
-120 1 0
-1469 1 0
-38 1 0
-697 1 0
-44 1 0
-345 1 0
-126 1 0
-46 1 0
-110 1 0
-972 1 0
-104 23 22
-93 2 2
-38 1 0
-34 3 1
-730 1 0
-151 1 0
-124 1 0
-210 1 0
-60 1 0
-227 1 0
-122 1 0
-225 2 0
-26 1 0
-85 1 0
-84 6 3
-408 1 0
-5 3 1
-18 1 0
-69 1 0
-76 1 0
-122 1 0
-288 1 0
-10 1 0
-55 1 0
-22 2 0
-455 1 0
-246 1 0
-37 1 0
-153 1 0
-27 1 0
-101 1 0
-158 1 0
-107 1 0
-437 1 0
-31 1 0
-149 1 0
-121 1 0
-5 1 0
-175 1 0
-76 1 0
-75 1 0
-26 2 0
-98 1 0
-169 1 0
-82 1 0
-20 1 0
-326 1 0
-274 1 0
-78 1 0
-42 1 0
-64 1 0
-11 7 4
-39 1 0
-91 1 0
-140 1 0
-397 14 12
-500 7 4
-879 5 2
-448 1 0
-42 1 0
-522 1 0
-247 1 0
-484 1 0
-689 1 0
-66 1 0
-198 1 0
-441 1 0
-143 1 0
-35 1 0
-84 1 0
-9 1 0
-445 1 0
-110 1 0
-204 1 0
-31 1 0
-77 1 0
-54 1 0
-213 1 0
-601 1 0
-25 1 0
-239 2 2
-42 1 0
-29 2 0
-15 1 0
-175 1 0
-611 1 0
-418 1 0
-191 1 0
-295 1 0
-30 8 5
-609 1 0
-372 1 0
-154 2 0
-117 1 0
-282 1 0
-360 1 0
-750 1 0
-402 1 0
-45 1 0
-678 1 0
-17 1 0
-117 1 0
-148 1 0
-164 3 1
-51 1 0
-65 1 0
-452 1 0
-1443 1 0
-142 1 0
-509 1 0
-92 10 6
-264 1 0
-69 1 0
-78 1 0
-43 1 0
-164 1 0
-349 1 0
-117 1 0
-373 1 0
-235 1 0
-160 1 0
-8 1 0
-263 1 0
-15 1 0
-23 1 0
-151 1 0
-100 1 0
-204 1 0
-250 1 0
-33 3 1
-272 1 0
-262 1 0
-55 1 0
-519 1 0
-251 1 0
-189 1 0
-459 1 0
-183 1 0
-295 1 0
-552 1 0
-94 16 12
-259 1 0
-30 1 0
-396 1 0
-17 1 0
-72 1 0
-56 1 0
-90 1 0
-106 1 0
-19 2 0
-271 1 0
-448 1 0
-628 497 497
-254 26 26
-391 1 0
-32 1 0
-171 1 0
-126 20 17
-94 1 0
-446 1 0
-30 1 0
-96 1 0
-17 1 0
-159 1 0
-390 1 0
-105 1 0
-94 1 0
-5 2 0
-21 1 0
-22 1 0
-380 1 0
-12 1 0
-211 1 0
-377 1 0
-3 1 0
-63 1 0
-37 2 2
-1596 1 0
-638 1 0
-30 1 0
-665 13 10
-32 1 0
-102 1 0
-361 1 0
-609 1 0
-590 1 0
-1189 29 29
-345 1 0
-732 1 0
-544 1 0
-272 1 0
-725 1 0
-198 1 0
-8 1 0
-275 1 0
-95 1 0
-101 1 0
-626 1 0
-154 1 0
-242 1 0
-937 1 0
-142 1 0
-236 1 0
-456 12 9
-77 1 0
-189 1 0
-172 1 0
-201 1 0
-417 1 0
-179 1 0
-141 1 0
-219 1 0
-164 1 0
-138 1 0
-500 2 0
-263 1 0
-48 1 0
-17 1 0
-91 1 0
-169 1 0
-8 1 0
-185 1 0
-48 1 0
-345 1 0
-546 2 2
-229 2 2
-614 1 0
-73 2 2
-129 1 0
-91 1 0
-287 3 1
-504 2 0
-264 22 22
-508 1 0
-1324 1 0
-1313 1 0
-36 1 0
-346 1 0
-285 5 2
-31 1 0
-6 1 0
-133 1 0
-27 1 0
-101 1 0
-249 1 0
-68 5 3
-34 1 0
-31 1 0
-140 1 0
-350 1 0
-312 1 0
-139 1 0
-66 1 0
-24 1 0
-37 1 0
-16 1 0
-32 1 0
-204 1 0
-21 1 0
-11 1 0
-120 2 0
-161 1 0
-13 1 0
-143 1 0
-46 1 0
-136 3 1
-75 1 0
-176 1 0
-23 1 0
-30 1 0
-34 1 0
-307 1 0
-27 1 0
-261 1 0
-39 1 0
-995 1 0
-556 1 0
-211 1 0
-278 1 0
-850 1 0
-285 1 0
-207 1 0
-154 1 0
-51 1 0
-237 1 0
-204 1 0
-11 1 0
-348 2 0
-41 1 0
-75 2 0
-47 1 0
-49 1 0
-253 1 0
-171 10 6
-106 1 0
-83 1 0
-86 1 0
-30 1 0
-166 1 0
-297 1 0
-480 1 0
-285 1 0
-339 1 0
-30 1 0
-74 1 0
-15 1 0
-310 1 0
-88 1 0
-111 1 0
-104 1 0
-644 1 0
-29 1 0
-413 2 0
-33 3 1
-19 1 0
-321 1 0
-318 1 0
-131 1 0
-111 1 0
-89 1 0
-751 120 120
-314 1 0
-613 2 0
-991 3 1
-44 1 0
-42 1 0
-57 1 0
-102 1 0
-318 1 0
-47 2 0
-186 1 0
-550 1 0
-504 1 0
-76 1 0
-336 1 0
-505 1 0
-34 2 0
-61 1 0
-257 1 0
-439 1 0
-94 1 0
-18 1 0
-6 1 0
-86 1 0
-18 1 0
-179 1 0
-52 1 0
-635 1 0
-535 1 0
-90 1 0
-531 2 0
-59 1 0
-132 1 0
-122 1 0
-17 1 0
-96 1 0
-281 1 0
-145 1 0
-342 1 0
-132 1 0
-95 16 12
-417 1 0
-143 1 0
-135 1 0
-11 1 0
-486 1 0
-224 1 0
-277 1 0
-449 1 0
-321 34 30
-96 1 0
-20 1 0
-358 1 0
-146 1 0
-176 1 0
-37 1 0
-92 1 0
-115 1 0
-245 1 0
-72 1 0
-65 1 0
-108 1 0
-41 13 10
-121 65 54
-54 1 0
-359 1 0
-53 1 0
-55 1 0
-10 1 0
-5 1 0
-6 2 1
-43 1 0
-9 1 0
-223 1 0
-90 1 0
-157 1 0
-686 1 0
-250 1 0
-160 1 0
-264 50363 1224780
-4948 0 1
-1850 60 67
-3859 0 1
-456 4 5
-1605 21 21
-1281 7 13
-5090 456 0
-1543 1 1
-37 1 1
-2825 1 1
-64 1 1
-1075 0 1
-721 0 1
-5566 22 5
-1136 1 0
-2390 0 3
-1347 0 2
-4617
-
-chain 16543266 chr17_random 2617613 + 0 174588 chr17_gl000205_random 174588 + 0 174588 172
-174588
-
-chain 10747371 chr17_random 2617613 + 1609852 1757206 chr17 81195210 - 15050606 15196423 297
-3573 1 0
-1031 1 0
-4890 10 7
-318 0 1
-667 1 0
-168 0 2
-974 2 0
-143 2 0
-208 4 0
-2621 10 10
-634 2 0
-1898 0 2
-99 21 21
-6731 1 1
-49 1 1
-345 2 0
-210 1 1
-1621 1 0
-1077 0 2
-371 6 0
-4548 5769 26131
-1148 0 1
-1283 1 1
-24 1 0
-2931 0 6
-38 22 0
-682 0 1
-1267 0 2
-470 9 19
-2335 0 9
-720 8 0
-2859 26315 4346
-4414 0 1
-777 1 4
-894 4 0
-3207 0 3
-3071 0 1
-1338 1 0
-869 1 0
-2072 0 1
-395 1 0
-1060 8 8
-1138 1 1
-6 2 0
-40 1 1
-473 0 1
-748 2 0
-306 8 0
-81 6 0
-748 4 0
-158 0 22
-6454 0 2
-145 1 1
-49 1 1
-619 0 1
-1579 14 14
-455 1 0
-5224 1 1
-31 1 0
-31 0 57
-3855 0 2
-2164 11 21
-1491 0 4
-213 16 4
-4589 6 6
-1564 0 6
-325 0 1
-2241 0 1
-149 0 1
-4150 0 4
-4768 0 12
-411 0 6
-804 2 0
-124 19 19
-937 2 0
-997 27 29
-685 37 37
-5 2 0
-35 37 48
-29 1 1
-237 2 0
-333 0 1
-1296 31 23
-472 4 0
-34 1 1
-683
-
-chain 7797784 chr17_random 2617613 + 2131554 2212864 chr17_gl000204_random 81310 + 0 81310 420
-81310
-
-chain 5191141 chr17_random 2617613 + 986480 1282720 chr17 81195210 + 34482891 34744119 309
-118 29 29
-73 435 3450
-113 9 9
-74 44 43
-109 53 55
-147 361 38
-603 128 128
-69 8 8
-278 22 22
-1262 20 20
-83 37 44
-478 1 1
-32 1 1
-54 1 1
-81 1 1
-57 0 1
-71 4 4
-83 1 1
-103 1 1
-80 1 1
-15 1 1
-312 15 15
-185 1 1
-24 1 1
-720 1 1
-19 1 1
-185 1 1
-35 1 1
-144 7 7
-238 1 1
-62 3 3
-196 10 10
-123 1 1
-99 1 1
-1997 1 1
-27 1 1
-64 49 45
-19 1 1
-547 1 1
-16 1 1
-796 0 2
-213 0 1
-1353 0 5
-59 1 1
-604 1 0
-1099 28 28
-2219 0 1
-1732 6 6
-115 1 1
-80 1 1
-123 1 1
-106 1 1
-164 1 1
-92 1 1
-160 34984 45270
-79 5 5
-348 149 150
-73 23 23
-322 46 46
-284 35 28
-1307 16 16
-515 89 89
-62 9 9
-203 3 0
-65 10 9
-188 33 32
-342 1 0
-100 0 1
-67 48 52
-69 1 0
-2330 39 42
-356 2 0
-767 5 9
-69 4 0
-373 29 30
-138 1 0
-571 0 1
-273 13 13
-140 25 24
-457 39 39
-204 19 19
-137 49 49
-178 59 59
-220 38 38
-66 23 22
-315 1 0
-399 30 30
-345 62 62
-200 36 36
-1097 33 35
-255 5 0
-61 4 0
-371 48 33
-119 30 30
-52 0 2
-236 0 2
-81 13 13
-168 12 12
-174 0 1
-250 81 81
-185 35 35
-343 27 35
-271 232 235
-79 116 119
-288 61 61
-869 9 8
-282 7 0
-6366 1 0
-2033 112 1128
-417 0 1
-64 145492 5631
-587 0 2
-184 392 14227
-792 0 4
-408 2 1
-1608 0 1
-1287 0 2
-676 1 1
-31 1 1
-112 1 1
-91 1 1
-173 1 0
-42 1 14
-784 11 11
-3219 0 13521
-8127 24 23
-7132 0 12
-9450 0 4
-3351 28 28
-5832 3 0
-100 0 1
-67 0 5
-31 6 5
-10 1 1
-69 2 0
-2314 1 0
-11507 0 1
-742 0 63471
-5695 0 1
-731 1 0
-3536
-
-chain 4342758 chr17_random 2617613 + 615163 663282 chr17 81195210 - 81146986 81195210 699
-117 89 88
-430 1 1
-8 7 3
-19 1 1
-521 14 7
-577 1 0
-4 1 0
-284 1 1
-19 12 6
-55 3 0
-193 1 0
-383 16 13
-508 5 0
-404 6 1
-1326 31 25
-723 84 3
-41 75 0
-21 1 0
-303 27 0
-65 81 27
-94 1 1
-40 1 1
-118 746 87
-30 2 1
-37 1 1
-179 2 0
-43 1 1
-46 27 0
-35 32 0
-278 1 0
-353 8 10
-363 13 1
-106 4 0
-188 34 34
-206 1 0
-3 1 0
-1339 1 0
-632 1 1
-21 0 4
-248 1 0
-655 1 0
-258 1 0
-777 1 0
-1440 16 16
-124 1 1
-36 1 0
-33 1 1
-89 1 0
-165 1 0
-86 1 1
-47 1 1
-319 8 4
-506 4 2
-537 16 12
-2310 1 0
-7 2 0
-922 9 0
-294 1 0
-145 1 0
-1890 2 0
-15 1 0
-38 1 0
-2030 12 6
-1208 2 0
-107 1 0
-438 2 0
-492 2 0
-184 1 0
-42 1 1
-646 1 35
-28 4 4
-62 4 36
-43 0 32
-54 1 1
-8 2 0
-23 1 1
-77 0 32
-34 0 32
-52 1 167
-69 70 6
-61 0 36
-99 0 64
-605 22 22
-133 1 0
-296 1 1
-42 1 0
-361 10 6
-225 14 14
-387 1 97
-405 0 480
-101 1 0
-24 2 2
-339 0 336
-1176 1 0
-192 1 0
-553 1 0
-114 4 1
-544 18 12
-575 3 0
-85 1 0
-934 1 0
-667 13 7
-28 18 12
-770 10 6
-149 1 0
-884 22 20
-214 0 1
-607 1 0
-129 1 0
-14 6 4
-27 6 3
-10 1 0
-4 2 0
-155 39 28
-214 2 0
-43 1 1
-1236 44 27
-1759 2 0
-472 6 2
-342 8 5
-970 6 0
-227 1 0
-691 1 0
-359 2 0
-141 1 0
-5 1 0
-2008 1 0
-302
-
-chain 3923033 chr17_random 2617613 + 864624 922266 chr17 81195210 + 81075742 81117538 762
-924 1 0
-428 1 0
-763 1 0
-19745 32 32
-637 15873 36
-186 1 0
-2389 1 0
-616 1 0
-1932 12 12
-10081 18 18
-2216 1 0
-92 1 0
-271 4 4
-67 5 5
-698 83 82
-473 27 27
-62
-
-chain 3905383 chr17_random 2617613 + 460666 565054 chr17 81195210 + 41343520 41406910 763
-9362 3 1
-1313 0 1
-344 1 0
-2289 0 2
-14919 0 1
-1393 6 4
-1047 1 0
-21 0 1
-31 5511 0
-28 783 8
-978 3 4
-213 0 2
-2198 0 702
-75 4479 3549
-723 0 13
-165 1 1
-19 3 3
-113 0 4
-88 1 1
-41 1 0
-38 7 7
-98 17 17
-152 50743 16221
-115 169 185
-169 0 4
-278 1 1
-48 1 1
-6399
-
-chain 3524656 chr17_random 2617613 + 1876393 1913891 chr17_gl000203_random 37498 + 0 37498 830
-37498
-
-chain 3296870 chr17_random 2617613 + 1963891 2002673 chr17_gl000204_random 81310 + 42877 81310 872
-560 1 0
-101 2 0
-296 42 39
-438 2 0
-256 1 0
-136 1 0
-109 1 0
-101 2 0
-234 64 62
-405 37 35
-61 1 0
-366 5 3
-501 39 37
-142 1 0
-191 27 24
-59 6 4
-53 67 62
-91 1 0
-159 1 0
-74 40 38
-164 1 0
-57 28 26
-75 1 0
-46 1 0
-61 45 43
-117 1 0
-360 45 43
-204 1 0
-180 61 58
-589 1 0
-212 1 0
-88 1 0
-53 1 0
-492 1 0
-75 26 24
-273 1 0
-701 1 0
-444 1 0
-75 1 0
-393 11 9
-105 59 56
-72 42 40
-79 1 0
-79 1 0
-95 153 144
-127 1 0
-85 4 2
-175 3 0
-222 1 0
-121 1 0
-48 1 0
-50 1 0
-61 1 0
-213 1 0
-73 1 0
-180 2 0
-83 1 0
-58 1 0
-192 11 5
-57 140 125
-101 1 0
-91 38 34
-190 1 0
-73 1 0
-116 6 4
-275 16 14
-200 1 0
-201 3 1
-632 1 0
-60 1 0
-198 9 1
-254 2 0
-89 1 0
-60 38 36
-326 32 28
-306 1 0
-55 1 0
-100 18 16
-127 36 32
-67 1 0
-78 1 0
-90 1 0
-63 35 31
-120 150 141
-103 9 7
-406 88 85
-54 15 13
-142 9 7
-112 32 30
-237 1 0
-114 27 18
-157 40 38
-145 1 0
-380 20 18
-73 109 104
-57 1 0
-83 68 65
-567 1 0
-378 0 4
-282 29 27
-725 1 0
-204 1 0
-246 1 0
-295 17 15
-243 1 0
-187 46 44
-56 1 0
-244 1 0
-303 1 0
-121 16 15
-253 1 0
-273 44 44
-427 10 0
-403 2 0
-219 1 0
-151 1 0
-115 14 13
-193 1 0
-63 1 0
-63 38 36
-609 1 0
-81 42 40
-297 1 0
-455 17 14
-278 3 1
-691 1 0
-417 104 101
-57 1 0
-93 5 3
-309 48 47
-303 1 0
-324 1 0
-126 41 37
-138 2 0
-233 1 0
-100 50 47
-86 9 7
-256 1 0
-208 1 0
-486 3 1
-118 1 0
-70 69 64
-455 8 6
-149 1 0
-175 5 2
-115 1 0
-159 1 0
-109 12 9
-135 33 31
-53 1 0
-256 5 3
-82 41 38
-268 70 67
-600 1 0
-128 18 16
-114 1 0
-149 62 58
-99 57 54
-158 42 38
-88 1 0
-75 46 43
-300 50 47
-71 13 11
-118 1 0
-177 1 0
-120 1 0
-275 1 0
-74 13 11
-230 1 0
-117 6 4
-113 39 37
-71 1 0
-597 9 8
-82 10 6
-195 10 8
-361 1 0
-53 1 0
-291 0 1
-149 1 0
-164
-
-chain 2935078 chr17_random 2617613 + 1427191 1457644 chr17 81195210 + 81045288 81075743 955
-1667 2 0
-1156 0 2
-25 0 2
-27603
-
-chain 2199778 chr17_random 2617613 + 671651 748529 chr11 135006516 - 134809692 134880676 533
-53 3 0
-176 68 0
-22 38 1
-38 43 16
-122 41 249
-34 4 16
-5 1 0
-6 1 0
-68 0 37
-1042 1 1
-35 1 1
-27 326 0
-359 1 0
-3 2 0
-176 16 5
-44 5 1
-224 1 0
-432 1 1
-35 1 1
-266 21 16
-109 14 10
-806 0 34
-465 56 0
-57 4 0
-787 1 0
-283 1 1
-27 1 1
-1090 1 1
-81 1 0
-1354 1 0
-40 1 1
-305 1 0
-89 1 1
-63 1 1
-48 1 1
-167 11 11
-83 8 4
-45 5 3
-343 1 1
-47 49 0
-56 0 294
-17 49 0
-79 5 103
-162 49 0
-442 10 10
-438 3 0
-50 1 1
-676 1 1
-39 1 1
-66 1 1
-7 1 0
-35 1 1
-547 7 2
-549 2393 0
-3 2913 0
-65 1 0
-60 1 1
-69 1 1
-42 0 1
-175 5 4
-100 1 0
-402 1 0
-39 1 0
-10 1 0
-10 1 0
-14 1 1
-95 4 2
-120 0 5
-126 1 1
-32 2 1
-72 1 1
-335 1 1
-45 1 0
-403 4 1
-54 1 0
-108 1 0
-289 1 1
-40 1 0
-164 12 12
-169 1 1
-76 1 1
-71 3 3
-34 1 1
-65 72 72
-84 64 1
-55 190 1
-52 1 1
-42 5 5
-138 1 1
-39 1 1
-311 6 7
-300 1 0
-597 17 17
-187 1 1
-32 100 2817
-24 203 202
-36 1 1
-115 4 0
-139 25 24
-1050 1 0
-56 1 0
-90 1 0
-33 1 0
-35 3 0
-114 1 1
-19 1 1
-215 1 0
-431 1 1
-23 1 0
-421 14 11
-292 1 1
-22 1 1
-49 2741 2490
-33 4095 4075
-9 0 3
-18 1474 1474
-3 6 1
-11 3 0
-38 14404 14348
-27 15613 15513
-5 5 5
-21 1 2
-13 19 20
-34 104 104
-44 214 216
-8 3 0
-27 2800 929
-60 1 1
-29 4270 3383
-30 49 0
-26 1 1
-40 2712 2960
-33 1 1
-7
-
-chain 2173268 chr17_random 2617613 + 699498 748919 chr1 249250621 - 248538148 248591008 468
-685 3 3
-36 4 4
-73 9 5
-59 70 63
-42 285 48
-44 1 1
-96 74 80
-321 1 1
-49 1 1
-107 1 1
-47 11 2
-85 3 0
-67 1 0
-179 19 16
-220 9 0
-138 33 33
-136 1 1
-26 1 1
-545 1 0
-8 14 10
-42 1 1
-64 1 1
-28 1 1
-119 1 1
-49 1 1
-54 1 1
-32 1 1
-960 1 1
-41 1 1
-731 16 16
-57 1 1
-19 1 1
-118 1 0
-196 1 1
-50 1 1
-263 1 1
-52 1 1
-171 1 1
-26 1 1
-181 25 16
-51 27 0
-56 1 1
-139 0 4
-33 1 1
-236 1 1
-17 1 1
-192 15 13
-186 1 1
-30 7 7
-280 1 1
-80 1 0
-196 62 54
-290 1 1
-38 1 1
-772 10 10
-123 1 1
-28 1 0
-20 34 22
-81 0 4
-45 1 1
-806 1 1
-31 1 0
-35 1 1
-101 17 15
-89 1 1
-34 1 0
-8 1 1
-290 13 9
-284 1 0
-53 7 0
-26 6 0
-605 4 0
-531 35 35
-704 1 1
-66 1 1
-168 1 1
-34 1 1
-527 1 1
-30 1 1
-249 16 7
-414 1 1
-27 1 1
-344 1 1
-43 1 1
-117 1 1
-30 1 1
-862 0 1
-229 1 1
-48 1 1
-197 14 14
-972 19 31
-924 1 1
-42 1 1
-123 1 1
-56 1 1
-77 1 1
-23 1 1
-119 1 1
-53 18 11
-382 1 1
-17 1 1
-116 5 2
-37 1 1
-38 2 0
-223 1 1
-21 6 1
-583 1 0
-400 0 4
-1574 27 27
-54 4 1
-158 10 7
-336 6 7
-492 1 0
-14 1 1
-843 1 2
-247 1 1
-41 1 1
-50 6 6
-513 17 13
-615 12 12
-585 32 23
-161 6 6
-515 9 5
-43 5 3
-460 5 5
-158 11 11
-252 1 1
-22 3 0
-135 12 12
-556 0 1
-542 3 0
-298 4 1
-24 4 0
-117 9 5
-151 0 1
-291 0 1
-360 15 15
-962 20 17
-231 1 0
-293 1 0
-33 32 0
-40 15 10
-213 23 23
-458 1 1
-51 1 1
-437 1 0
-394 1 1
-25 2 0
-117 10 4
-50 1 1
-40 1 1
-626 8 5
-492 1 0
-383 1 0
-672 1 1
-136 1 1
-203 2 2
-88 1 1
-261 1 1
-45 1 1
-189 15 15
-78 1 1
-49 1 1
-93 1 0
-35 13 10
-21 1 1
-527 99 94
-103 44 44
-79 24 26
-111 39 36
-235 24 27
-117 7 7
-127 222 1777
-58 167 165
-59 75 75
-203 12 12
-55 56 44
-269 34 32
-87 24 24
-250 35 29
-682 91 91
-312 4 3
-583 124 2653
-132 399 398
-134 1 1
-33 1 1
-179 1 1
-27 1 1
-245 4 4
-93 1 1
-940 1 1
-20 1 1
-271 1 1
-16 0 1
-353 24 17
-369 146 0
-83 1 1
-34 1 1
-1103 1 1
-26 1 1
-112 1 0
-3 1 0
-370 32 27
-410 170 174
-51 1 1
-310 42 41
-66 5 2
-319
-
-chain 2047886 chr17_random 2617613 + 532224 554093 chr17 81195210 - 39794017 39815907 1262
-682 50 50
-270 0 4
-316 0 1
-691 1 0
-678 1 2
-601 1 0
-383 1 0
-20 1 1
-1048 2 0
-1884 0 6
-690 0 5
-1205 1 1
-43 0 2
-891 19 19
-1916 7 6
-2354 0 3
-2253 10 0
-2406 0 13
-1972 6 6
-595 0 4
-148 100 100
-356 20 20
-109 4 4
-73 2 0
-59
-
-chain 1863993 chr17_random 2617613 + 1011919 1106715 chr17 81195210 + 34578530 36287451 432
-1027 148 148
-295 18 18
-204 37 37
-144 7 7
-238 38 38
-357 101 101
-125 64 64
-712 21 22
-181 126 1729
-702 0 2
-184 29 30
-236 37 37
-1080 60 65
-606 1 0
-328 63 63
-556 20 20
-94 37 37
-172 0 1
-1430 0 1
-151 53 53
-605 36 36
-292 1 0
-84 17921 60667
-87 11034 74480
-38 804 804
-30 345 345
-62 200 200
-36 1097 1097
-33 696 696
-48 119 119
-30 986 986
-81 185 185
-35 641 641
-232 79 79
-116 288 288
-61 11306 1517682
-155 7 0
-427 5 5
-742 2 0
-85 1 1
-401 1 1
-97 1 1
-566 1 0
-607 1 0
-1318 0 24
-1995 71 3
-34 0 2
-44 1 1
-39 0 1
-3518 0 4
-469 1 0
-294 10 13
-520 6 6
-403 0 3
-331 1 0
-231 7 0
-255 0 1
-3122 0 1
-729 0 1
-117 11 11
-186 4 0
-84 1 0
-412 2 0
-19 1 1
-1642 6 0
-628 1 1
-21 1 1
-377 50 50
-151 0 9
-2370 1 1
-35 1 1
-1328 1 10
-586 14 0
-789 12 13
-1397 0 1
-1521 0 2
-382 0 1
-866 1 1
-20 1 1
-710 2 0
-1259 161 161
-387 28 28
-53 24 24
-3626 1 0
-1718
-
-chain 1732426 chr17_random 2617613 + 2586433 2605017 chr17 81195210 - 39776940 39795500 1439
-1157 1 1
-31 0 5
-2053 8 8
-691 1 1
-30 1 1
-1212 3 0
-3864 1 0
-3 1 0
-56 15 0
-860 1 1
-30 1 1
-6532 4 4
-147 13 13
-1042 17 17
-319 7 0
-181 10 10
-68 42 42
-51 16 14
-115
-
-chain 1719393 chr17_random 2617613 + 1323861 1343929 chr17 81195210 + 45650033 45670000 1446
-76 1 1
-94 1 1
-84 9 9
-70 1 1
-43 1 0
-40 0 2
-126 1 1
-38 1 1
-391 1 1
-43 1 1
-100 0 1
-66 12 12
-65 1 1
-39 2 0
-9 4 0
-25 1 1
-99 1 1
-27 0 4
-362 22 4
-659 2 0
-433 0 20
-16 1 1
-117 1 1
-248 1 1
-200 1 1
-23 1 1
-248 6 0
-120 1 1
-930 1 1
-14 1 1
-76 1 1
-11 1 0
-23 2 0
-23 1 1
-236 1 1
-48 1 1
-108 1 1
-141 7 5
-50 1 1
-27 1 1
-306 0 3
-290 1 1
-20 0 1
-31 1 1
-618 5 6
-350 14 6
-55 0 2
-112 4 0
-50 1 1
-263 1 0
-51 1 1
-527 1 1
-47 1 1
-247 1 1
-34 3 3
-169 0 2
-33 3 0
-165 12 0
-163 1 1
-77 1 0
-56 26 26
-54 6 6
-338 2 0
-185 73 73
-336 0 3
-89 1 1
-19 1 1
-65 18 18
-89 0 1
-178 1 1
-45 1 1
-67 8 0
-347 0 1
-22 1 1
-192 1 1
-73 1 4
-38 0 1
-61 1 1
-164 1 1
-74 3 3
-260 5 0
-89 9 9
-142 1 1
-49 1 1
-71 0 1
-62 1 1
-391 1 1
-78 1 1
-100 1 1
-32 1 1
-155 11 12
-304 8 0
-79 1 1
-115 1 1
-29 1 1
-97 19 0
-168 1 1
-19 4 4
-359 2 0
-18 1 1
-358 1 1
-38 1 1
-83 1 1
-31 1 1
-389 1 1
-32 1 1
-128 1 1
-39 1 1
-54 1 1
-11 2 0
-165 4 0
-34 1 1
-58 1 1
-68 3 0
-230 1 1
-44 1 1
-276 16 16
-170 6 6
-104 1 1
-61 1 1
-107 6 6
-177 1 1
-66 5 0
-60 1 1
-14 1 1
-50 4 4
-15 1 1
-62 1 1
-194 1 1
-72 22 1
-39 1 1
-70 1 1
-42 1 1
-58 1 1
-36 1 1
-329 1 0
-136 1 1
-192 9 10
-682 24 21
-81 0 1
-367 12 12
-81
-
-chain 1570588 chr17_random 2617613 + 1644335 1687876 chr17 81195210 + 66068832 66112387 1087
-1168 16352 16361
-2197 2 0
-1554 1 0
-6339 0 4
-1936 0 7
-2357 2 0
-7231 1 0
-4401
-
-chain 1476469 chr17_random 2617613 + 2303443 2319476 chr17 81195210 + 79885696 79901628 1655
-880 1 0
-298 1 0
-60 43 40
-227 40 38
-326 1 0
-77 1 0
-148 1 0
-199 21 19
-60 1 0
-224 1 0
-173 1 0
-317 88 84
-84 1 0
-96 48 45
-432 1 0
-107 1 0
-505 1 0
-88 1 0
-551 1 0
-107 1 0
-176 1 0
-79 2 0
-127 1 0
-56 1 0
-239 1 0
-218 1 0
-11 1 0
-27 1 0
-256 1 0
-130 1 0
-60 1 0
-586 1 0
-96 1 0
-58 1 0
-80 1 0
-135 1 0
-55 1 0
-219 5 2
-11 4 2
-30 4 1
-368 1 0
-106 1 0
-119 18 13
-146 1 0
-636 1 0
-156 1 0
-541 1 0
-107 1 0
-97 1 0
-61 1 0
-66 1 0
-7 1 0
-238 1 0
-105 1 0
-13 1 0
-667 1 0
-85 1 0
-70 1 0
-642 1 0
-635 1 0
-57 1 0
-249 1 0
-237 1 0
-162 1 0
-166 1 0
-380 1 0
-271 1 0
-215 2 0
-260 1 0
-160 1 0
-62 1 0
-6 1 0
-185 1 0
-48 1 0
-265 5 2
-87 1 0
-186 1 0
-62 1 0
-20 1 0
-135
-
-chain 1260177 chr17_random 2617613 + 853052 928106 chr17 81195210 - 43628 125104 962
-949 1 0
-3976 1 0
-155 1 0
-1382 1 0
-174 1 0
-249 1 0
-3481 16 14
-138 196 313
-72 88 86
-491 22816 3210
-803 32 32
-116 1 0
-346 10 9
-779 1 0
-620 1 0
-336 1 0
-2035 1 0
-1010 1 0
-1029 22 20
-97 39 114
-77 79 0
-5135 26 26
-535 1 0
-2026 21 19
-206 2 0
-254 19578 45525
-174 1 1
-34 1 1
-97 25 25
-137 6 5
-2443 14 9
-445 1 0
-116 1 0
-2150
-
-chain 1227372 chr17_random 2617613 + 986700 1051441 chr17 81195210 + 34570816 36317431 617
-294 0 3023
-141 196 196
-44 109 109
-53 147 147
-19 33 32
-101 42 42
-166 603 602
-128 1742 1742
-37 15134 15157
-88 7169 151654
-89 3878 5468
-37 1080 1080
-60 1668 1668
-37 1753 1753
-53 605 605
-36 506 39138
-695 47 47
-375 59 59
-312 20 20
-185 37 37
-144 7 7
-238 38 38
-357 101 101
-125 64 64
-712 185 184
-2677 120 1494235
-1055 15 15
-700 4 4
-1174 24 24
-888 9 3
-1590 0 3
-913 18 20
-1011 1 1
-26 1 1
-2545 1 1
-35 1 1
-1283 87 87
-45 432 432
-149 418 418
-46 284 284
-2 3 3
-30 1838 1839
-89 540 540
-32 511 512
-48 2400 2403
-39 3223 3228
-39 360 360
-49 178 178
-59
-
-chain 1028733 chr17_random 2617613 + 2262901 2274699 chr17 81195210 - 1281214 1293541 2373
-276 161 161
-1171 1 0
-181 1 0
-943 1 0
-423 1 0
-384 47 47
-111 466 1042
-106 31 31
-75 4 4
-63 20 16
-142 1 0
-59 1 0
-607 1 0
-135 1 0
-31 1 0
-82 1 0
-266 1 0
-76 1 0
-5 4 2
-41 1 0
-52 1 0
-985 1 0
-87 1 0
-4 1 0
-114 1 0
-175 1 0
-30 1 0
-140 2 0
-22 1 0
-130 1 0
-239 1 0
-766 1 0
-203 1 0
-68 2 0
-252 1 0
-300 4 2
-377 1 0
-735 1 0
-279 5 2
-91 1 0
-66 1 0
-159 1 0
-7 1 0
-562
-
-chain 931587 chr17_random 2617613 + 978106 1010959 chr17 81195210 + 36277154 36406169 991
-1048 10 12
-382 0 1
-199 22 22
-381 8 8
-56 66 66
-80 176 176
-73 27 27
-90 32 32
-166 31 209
-634 0 4
-1199 65 65
-56 27 27
-255 27 27
-50 1 7
-422 5 5
-61 4 0
-80 311 311
-40 144 144
-53 3450 47979
-41 18030 69497
-201 21 0
-219 1 0
-310 0 1
-3136 0 1
-510 50 52
-321 3 0
-279
-
-chain 813092 chr17_random 2617613 + 1807252 1826317 chr17 81195210 + 22246129 22262163 2589
-338 20 20
-223 15 15
-164 162 162
-54 59 60
-73 230 230
-52 48 48
-50 66 66
-54 49 49
-257 14 14
-103 22 22
-96 5 5
-357 121 121
-100 88 88
-108 94 94
-490 34 34
-81 27 27
-54 82 82
-80 138 138
-128 12 12
-262 24 21
-199 35 35
-263 80 80
-84 52 52
-185 16 16
-75 113 113
-160 99 99
-70 27 27
-84 49 49
-59 25 25
-133 30 30
-64 45 45
-304 25 25
-986 74 74
-160 13 13
-209 22 22
-54 43 43
-61 156 156
-54 6 6
-77 5 5
-86 85 85
-117 48 165
-381 74 74
-262 32 32
-165 71 71
-57 95 95
-89 31 31
-114 140 140
-117 216 216
-77 5 5
-52 442 441
-185 60 60
-363 22 22
-179 11 11
-259 197 197
-118 35 35
-108 60 60
-61 61 61
-137 50 50
-53 56 56
-269 161 161
-106 103 105
-56 8 8
-368 41 41
-47 3145 0
-401 42 42
-90 23 23
-151 73 73
-81 148 146
-351
-
-chain 788653 chr17_random 2617613 + 1298766 1307227 chr17 81195210 - 44798207 44806654 6145
-463 1 0
-2422 0 1
-90 14 0
-75 0 1
-397 0 1
-64 1 1
-30 0 1
-202 1 0
-1329 2 0
-1396 1 0
-668 0 1
-280 45 45
-980
-
-chain 597412 chr17_random 2617613 + 807879 2303216 chr17 81195210 - 0 1281216 430
-180 1676 138
-25553 1 0
-149 14 14
-1938 1 0
-350 32 32
-1230 1 0
-3 1 0
-6237 1 0
-45 2 2
-6514 1 0
-228 662945 0
-7897 0 1
-2396 1 0
-1101 17 0
-41 1 1
-355 0 52
-50 18 1
-41 0 68
-84 34 0
-4918 0 1
-717 0 1
-313 1 1
-42 1 1
-73 29 31
-205 58 0
-414 1 1
-64 1 1
-959 1 1
-17 1 1
-2276 1 0
-739 0 1
-418 11 49
-1541 0 1
-3494 7 13
-1281 21 21
-1738 1 191
-26 0 38
-40 0 77
-67 5 5
-11 1 75
-55 2266 0
-112 47 9
-78 38 0
-24 1 1
-80 5 5
-551 0 5
-87 1 1
-35 1 1
-54 119 195
-74 1 1
-957 15 15
-64 1277 306
-91 1 1
-35 1 1
-820 48 67
-330 0 1
-2794 1 0
-1127 1 1
-19 0 5
-1483 715858 1169096
-78 1 0
-529 1 0
-25 1 0
-200 1 0
-643 2 0
-450 2 0
-211 1 0
-380 2 2
-180 2 1
-32 1 0
-246 1 0
-61 1 0
-5 1 0
-351 1 0
-37 1 0
-304 1 0
-18 1 0
-109 1 0
-16 1 0
-200 1 0
-105 1 0
-37 1 0
-376 1 0
-108 1 0
-91 1 0
-394 1 0
-20 1 0
-1014 32 30
-21 2 1
-34 1 0
-230 26 26
-941 1 0
-188 1 0
-610 1 0
-555 1 0
-303 1 0
-509 157 157
-169 22 22
-101 1 0
-501 1 0
-140 1 0
-78 2 1
-22 1 0
-39 6 5
-62 94 94
-593 114 111
-260 120 120
-362 1 0
-697 0 1
-123 28 28
-402 36 36
-904 1 0
-50 1 0
-379 1 0
-256 25 25
-23 17 17
-53 27 27
-556 1 0
-409 1 0
-106 1 0
-276 24 24
-35 2 0
-252 32 32
-213 4 4
-70 2 0
-27 4 2
-82 1 0
-17 1 0
-639 1 0
-172 11 7
-10 1 0
-76 1 0
-1582 1 0
-275 1 0
-21 1 0
-17 4 2
-66 1 0
-1653 1 0
-19 3 3
-139 179 179
-76 2 2
-60 1 0
-226 1 0
-538 1 0
-346 4 4
-42 25 25
-1319 1 0
-261 1 0
-512 1 0
-69 1 0
-480 2 0
-388 8 7
-305 5 5
-64 2 2
-846
-
-chain 590397 chr17_random 2617613 + 1317586 1323861 chr17 81195210 - 44817018 44823295 6400
-2259 1 0
-955 0 1
-2132 0 1
-744 0 1
-184
-
-chain 365975 chr17_random 2617613 + 1296053 1313819 chr17 81195210 + 45621804 45639993 6832
-81 12 44
-148 0 6
-401 61 62
-589 32 30
-259 39 57
-53 103 103
-231 127 131
-59 7954 7632
-45 980 978
-16 142 143
-82 46 46
-363 247 934
-159 50 48
-341 33 34
-57 16 16
-304 65 65
-69 9 9
-136 66 66
-138 57 57
-70 10 10
-70 123 120
-143 52 52
-152 15 19
-320 53 52
-121 0 1
-161 98 108
-97 59 59
-205 127 125
-55 11 11
-56 30 30
-88 43 43
-512 45 43
-125 143 136
-165 48 48
-56 24 24
-161 114 115
-364 40 40
-240
-
-chain 323854 chr17_random 2617613 + 753664 757726 chr11 135006516 + 51394886 51398944 206195
-84 571 570
-807 3 1
-2082 1 0
-514
-
-chain 193433 chr17_random 2617613 + 495545 497612 chr17 81195210 + 41377728 41379794 617459
-55 1 0
-1306 28 28
-677
-
-chain 170984 chr17_random 2617613 + 1315777 1317585 chr17 81195210 - 44815210 44817018 741311
-1808
-
-chain 158566 chr17_random 2617613 + 1808012 1818883 chr17 81195210 + 22251644 22262630 5258
-162 209 210
-87 88 88
-32 270 270
-48 855 855
-36 185 185
-88 888 888
-37 888 888
-35 263 263
-80 85 85
-51 276 276
-47 20 20
-46 329 329
-27 350 350
-4 5 5
-21 413 412
-25 986 986
-74 458 458
-43 137 137
-80 228 228
-85 546 663
-9 10 10
-55 262 262
-32 293 293
-68 116 116
-25 120 120
-109 148 148
-60 1 1
-67 6 4
-74 1 1
-7 134 134
-220 1 1
-65 1 1
-91 1 1
-62 186 186
-60
-
-chain 150869 chr17_random 2617613 + 749022 751008 chr11 135006516 + 51475668 51477652 852441
-306 379 377
-1301
-
-chain 148651 chr17_random 2617613 + 808184 809735 chr17 81195210 + 81137722 81139272 865111
-940 1 0
-610
-
-chain 145464 chr17_random 2617613 + 1314230 1315767 chr17 81195210 - 44813661 44815198 885049
-1537
-
-chain 120518 chr17_random 2617613 + 1343929 1345208 chr17 81195210 - 44843364 44844643 723183
-1279
-
-chain 116919 chr17_random 2617613 + 1353036 1364922 chr17 81195210 - 44845210 44857111 1380
-449 299 299
-31 164 164
-55 373 373
-449 9718 9733
-348
-
-chain 115845 chr17_random 2617613 + 508518 509981 chr17 81195210 - 39794017 39795500 1110103
-682 50 50
-270 0 4
-177 169 185
-115
-
-chain 114042 chr17_random 2617613 + 516500 517961 chr17 81195210 - 39794017 39795500 1127130
-682 50 50
-210 5 6
-54 0 6
-175 170 185
-115
-
-chain 113591 chr17_random 2617613 + 521388 522849 chr17 81195210 - 39794017 39795500 1131524
-58 0 1
-623 50 50
-210 5 6
-54 0 6
-175 171 185
-115
-
-chain 112548 chr17_random 2617613 + 503499 505329 chr17 81195210 - 39794017 39795500 1141710
-27 370 0
-655 50 50
-210 5 6
-54 0 7
-174 170 185
-115
-
-chain 92910 chr17_random 2617613 + 1642194 1643169 chr17 81195210 - 1314977 1315952 1374174
-975
-
-chain 86438 chr17_random 2617613 + 1345275 1346182 chr17 81195210 - 44844700 44845607 1472746
-907
-
-chain 80313 chr17_random 2617613 + 2609695 2610598 chr17 81195210 - 39794017 39794920 1580802
-682 50 50
-171
-
-chain 78741 chr17_random 2617613 + 1643269 1644095 chr17 81195210 + 79874782 79875608 1611354
-826
-
-chain 75472 chr17_random 2617613 + 1310578 1313579 chr17 81195210 - 44810007 44813007 188419
-53 282 282
-98 97 97
-59 205 205
-127 122 122
-30 88 88
-43 512 512
-45 125 125
-72 1 0
-70 165 165
-48 241 241
-114 364 364
-40
-
-chain 74354 chr17_random 2617613 + 1547620 1548395 chr8 146364022 - 2302524 2303299 1703290
-775
-
-chain 61189 chr17_random 2617613 + 1546707 1547351 chr8 146364022 + 144057273 144057917 2067192
-644
-
-chain 59362 chr17_random 2617613 + 751149 753548 chr1 249250621 - 248579195 248581575 182656
-35 2 1
-152 1 0
-15 1 0
-107 3 2
-74 1 0
-10 1 0
-19 1 0
-57 1 1
-48 3 1
-6 1 0
-107 12 330
-61 1 1
-51 357 35
-388 110 110
-84 38 38
-62 227 223
-116 106 105
-141
-
-chain 56858 chr17_random 2617613 + 1298104 1298766 chr17 81195210 - 44797535 44798197 1968612
-85 59 59
-518
-
-chain 56536 chr17_random 2617613 + 501286 502149 chr17 81195210 - 39794614 39795500 2243684
-85 50 50
-210 5 6
-54 0 7
-174 170 185
-115
-
-chain 55411 chr17_random 2617613 + 688273 689806 chr7 159138663 - 159114165 159114723 7844
-88 175 0
-148 458 0
-103 231 3
-111 117 3
-102
-
-chain 52941 chr17_random 2617613 + 1822234 1824166 chr17 81195210 - 58941545 58943477 1155
-887 1 1
-77 1 1
-300 1 1
-20 9 9
-133 1 1
-23 1 1
-59 1 1
-158 1 1
-91 1 1
-54 1 1
-112
-
-chain 52559 chr17_random 2617613 + 983839 1162005 chr17 81195210 - 44845659 46605886 726
-299 65 65
-117 68 68
-1986 9723 54270
-49 72036 1500609
-1027 6412 6412
-71 13528 13528
-50 11447 11447
-132 60546 169487
-42 528 528
-40
-
-chain 51097 chr17_random 2617613 + 1023443 1026449 chr17 81195210 + 34744258 34747264 8774
-47 375 375
-59 517 517
-37 389 389
-38 357 357
-101 125 125
-64 712 712
-185
-
-chain 49537 chr17_random 2617613 + 686221 687340 chr7 159138663 - 159114165 159114714 2581538
-393 570 0
-156
-
-chain 49422 chr17_random 2617613 + 2502237 2515076 chr17_gl000206_random 41001 + 6806 19645 760
-60 12323 12323
-456
-
-chain 46461 chr17_random 2617613 + 530697 531391 chr17 81195210 + 41399710 41400427 2769983
-115 170 185
-151 0 7
-77 5 6
-176
-
-chain 44819 chr17_random 2617613 + 1346282 1352646 chr17 81195210 + 36399842 36406169 117269
-158 113 113
-546 19 0
-337 0 1
-343 21 0
-219 1 0
-310 0 1
-3136 0 1
-510 1 1
-49 0 2
-321 1 0
-279
-
-chain 42351 chr17_random 2617613 + 1308282 1310091 chr17 81195210 - 44807710 44809519 659295
-50 341 341
-33 377 377
-65 214 214
-66 138 138
-57 150 150
-123 143 143
-52
-
-chain 41114 chr17_random 2617613 + 1307243 1308123 chr17 81195210 - 44806671 44807550 1295496
-142 82 82
-46 363 362
-247
-
-chain 38415 chr17_random 2617613 + 980212 983216 chr17 81195210 - 46382593 46436652 7347
-66 80 80
-176 73 73
-27 90 90
-32 166 166
-31 1833 52888
-65 56 56
-27 255 255
-27
-
-chain 37708 chr17_random 2617613 + 1313819 1314225 chr17 81195210 - 44813251 44813657 3332998
-406
-
-chain 34385 chr17_random 2617613 + 689365 745709 chr16 90354753 + 90179685 90235100 655
-111 4456 3661
-64 55 55
-25 28 28
-47 0 945
-90 45591 45393
-56 269 269
-34 5469 4540
-13 2 2
-32 0 48
-2
-
-chain 29758 chr17_random 2617613 + 1820296 1826385 chr17 81195210 + 22249775 22252718 80336
-37 643 643
-77 136 133
-51 3143 0
-44 74 74
-224 80 80
-64 79 79
-9 741 741
-39 82 82
-59 25 25
-56 358 358
-68
-
-chain 29219 chr17_random 2617613 + 1551349 1551651 chr17 81195210 + 81144397 81144699 5017519
-302
-
-chain 28762 chr17_random 2617613 + 686677 687796 chr7 159138663 - 159114165 159114714 2625478
-282 456 0
-111 3 3
-57 114 0
-96
-
-chain 26027 chr17_random 2617613 + 1296695 1298103 chr17 81195210 - 44796117 44797535 630440
-61 589 589
-32 259 269
-39 53 53
-103 231 231
-41
-
-chain 25589 chr17_random 2617613 + 1810180 1822057 chr17 81195210 + 22246679 22258671 5893
-31 6949 7063
-28 2666 2666
-60 580 580
-49 73 73
-37 1172 1173
-232
-
-chain 22463 chr17_random 2617613 + 503557 503790 chr17 81195210 - 39794076 39794309 8690008
-233
-
-chain 21299 chr17_random 2617613 + 1013035 1014722 chr17 81195210 + 34795732 34797419 1064
-59 517 517
-37 389 389
-38 357 357
-101 125 125
-64
-
-chain 20434 chr17_random 2617613 + 685587 686087 chr7 159138663 - 159114215 159114487 2822651
-209 248 20
-43
-
-chain 19692 chr17_random 2617613 + 2611651 2612116 chr17 81195210 - 39813091 39813524 10717347
-67 163 137
-78 68 62
-89
-
-chain 19589 chr17_random 2617613 + 2616810 2617276 chr17 81195210 + 41381686 41382119 10803726
-89 68 62
-77 165 138
-67
-
-chain 17762 chr17_random 2617613 + 852036 852257 chr5 180915260 - 51646 51969 938
-13 1 1
-60 1 1
-29 1 1
-13 0 102
-103
-
-chain 17600 chr17_random 2617613 + 1364922 1365125 chr17 81195210 - 46397651 46397854 1833
-172 1 1
-30
-
-chain 17149 chr17_random 2617613 + 1514626 1514877 chr1 249250621 + 547399 547650 3354419
-131 1 3
-101 2 0
-16
-
-chain 16567 chr17_random 2617613 + 2610699 2610873 chr17 81195210 - 39795026 39795200 13468304
-174
-
-chain 16365 chr17_random 2617613 + 1812948 1813633 chr17 81195210 + 22258959 22259644 44227
-99 181 181
-49 59 59
-25 227 227
-45
-
-chain 16348 chr17_random 2617613 + 525487 525673 chr11 135006516 + 62609095 62609281 13688187
-75 4 4
-107
-
-chain 14733 chr17_random 2617613 + 2605728 2605963 chr17 81195210 - 39813295 39813524 15353144
-78 68 62
-89
-
-chain 14711 chr17_random 2617613 + 556093 556262 chr11 135006516 - 72397235 72397404 15378622
-107 4 4
-58
-
-chain 14711 chr17_random 2617613 + 527846 528015 chr11 135006516 - 72397235 72397404 15378623
-107 4 4
-58
-
-chain 14711 chr17_random 2617613 + 512402 512571 chr11 135006516 - 72397235 72397404 15378624
-107 4 4
-58
-
-chain 14711 chr17_random 2617613 + 510910 511079 chr11 135006516 - 72397235 72397404 15378625
-107 4 4
-58
-
-chain 14711 chr17_random 2617613 + 494247 494416 chr11 135006516 - 72397235 72397404 15378626
-107 4 4
-58
-
-chain 14711 chr17_random 2617613 + 492878 493047 chr11 135006516 - 72397235 72397404 15378627
-107 4 4
-58
-
-chain 14711 chr17_random 2617613 + 519356 519525 chr11 135006516 + 62609112 62609281 15378630
-58 4 4
-107
-
-chain 14711 chr17_random 2617613 + 514467 514636 chr11 135006516 + 62609112 62609281 15378631
-58 4 4
-107
-
-chain 14711 chr17_random 2617613 + 492408 492577 chr11 135006516 + 62609112 62609281 15378632
-58 4 4
-107
-
-chain 13395 chr17_random 2617613 + 685879 686024 chr7 159138663 - 159114165 159114310 16961745
-145
-
-chain 12350 chr17_random 2617613 + 554102 554230 chr17 81195210 + 41401065 41401193 18472361
-128
-
-chain 11140 chr17_random 2617613 + 2611055 2611170 chr17 81195210 - 39795385 39795500 20498301
-115
-
-chain 11115 chr17_random 2617613 + 1365516 1365648 chr17 81195210 - 46613257 46613389 1914
-132
-
-chain 10814 chr17_random 2617613 + 689806 689963 chr7 159138663 - 159114495 159114652 3160720
-43 20 20
-94
-
-chain 10716 chr17_random 2617613 + 690046 690160 chr11 135006516 - 134823089 134823203 21297817
-114
-
-chain 10594 chr17_random 2617613 + 686107 686221 chr11 135006516 - 134823089 134823203 21541329
-114
-
-chain 10432 chr17_random 2617613 + 752965 753084 chr3 198022430 + 197944313 197944432 1419040
-26 27 27
-66
-
-chain 10233 chr17_random 2617613 + 751962 752152 chr1 249250621 - 25108929 25109119 2449036
-190
-
-chain 10215 chr17_random 2617613 + 298300 298405 chr17 81195210 - 41991981 41992086 2272776
-105
-
-chain 10088 chr17_random 2617613 + 2614941 2615048 chr11 135006516 - 72397235 72397342 22628945
-107
-
-chain 9967 chr17_random 2617613 + 687027 687133 chr7 159138663 - 159114173 159114279 19905170
-106
-
-chain 9953 chr17_random 2617613 + 1352829 1353036 chr17 81195210 - 44845003 44845210 3604154
-38 53 53
-37 50 50
-29
-
-chain 9937 chr17_random 2617613 + 2607755 2608553 chr17 81195210 + 41464708 41466209 22969163
-59 661 1364
-78
-
-chain 9782 chr17_random 2617613 + 685310 686656 chr7 159138663 - 159114165 159114714 2594423
-225 1079 282
-42
-
-chain 9490 chr17_random 2617613 + 268561 268666 chr17 81195210 + 39296306 39296411 8067183
-50 6 6
-49
-
-chain 9384 chr17_random 2617613 + 1808529 1810797 chr17 81195210 + 22256920 22261566 263516
-29 104 104
-28 50 50
-48 1976 4354
-33
-
-chain 9278 chr17_random 2617613 + 1333217 1333901 chr17 81195210 - 44832655 44833339 2515
-26 585 585
-73
-
-chain 9162 chr17_random 2617613 + 1819790 1824781 chr17 81195210 + 22261160 22263006 131478
-64 322 322
-59 818 816
-30 3642 499
-56
-
-chain 8930 chr17_random 2617613 + 507298 507390 chr17 81195210 + 41466131 41466223 25058540
-92
-
-chain 8739 chr17_random 2617613 + 1294354 1363161 chr17 81195210 - 46388680 46446941 1280
-36 59095 48559
-76 160 160
-63 250 250
-52 124 124
-61 4094 4092
-28 4719 4711
-49
-
-chain 7495 chr17_random 2617613 + 1514877 1514981 chr17 81195210 - 42613 42717 4053350
-104
-
-chain 7310 chr17_random 2617613 + 1352662 1353007 chr17 81195210 - 20840434 20840778 292042
-167 38 37
-53 37 37
-50
-
-chain 6706 chr17_random 2617613 + 687825 687939 chr7 159138663 - 159114173 159114287 10506562
-114
-
-chain 6456 chr17_random 2617613 + 673480 673547 chr11 135006516 - 134811854 134811921 22781013
-67
-
-chain 5049 chr17_random 2617613 + 752664 753185 chr1 249250621 - 248584104 248584621 921258
-110 84 84
-38 62 62
-7 119 119
-72 7 3
-22
-
-chain 5012 chr17_random 2617613 + 557502 557555 chr17 81195210 + 41382227 41382280 33565948
-53
-
-chain 4802 chr17_random 2617613 + 1345218 1345268 chr17 81195210 - 44844643 44844693 34312672
-50
-
-chain 4547 chr17_random 2617613 + 688053 688156 chr7 159138663 - 159114401 159114504 10358404
-103
-
-chain 4503 chr17_random 2617613 + 690214 690262 chr7 159138663 - 159114675 159114723 34814023
-48
-
-chain 4408 chr17_random 2617613 + 1808470 1808528 chr17 81195210 + 22261618 22261676 11976838
-58
-
-chain 4236 chr17_random 2617613 + 269418 269467 chr17 81195210 - 41933979 41934028 1349427
-49
-
-chain 3906 chr17_random 2617613 + 1365126 1365187 chr17 81195210 - 23109543 23109604 10221956
-61
-
-chain 3852 chr17_random 2617613 + 685196 685310 chr7 159138663 - 159114165 159114279 3139829
-114
-
-chain 3804 chr17_random 2617613 + 676798 676843 chr11 135006516 - 134814627 134814666 26257176
-33 6 0
-6
-
-chain 3734 chr17_random 2617613 + 1819749 1824493 chr17 81195210 + 22251604 22253205 550639
-41 1133 1133
-53 3451 308
-4 6 6
-56
-
-chain 3666 chr17_random 2617613 + 689649 689704 chr3 198022430 + 197891166 197891221 670
-55
-
-chain 3459 chr17_random 2617613 + 687133 687184 chr7 159138663 - 159114165 159114216 4526522
-51
-
-chain 3336 chr17_random 2617613 + 1365188 1365250 chr17 81195210 - 20853025 20853087 9938797
-62
-
-chain 3079 chr17_random 2617613 + 681792 681827 chr11 135006516 - 134820249 134820284 24010224
-35
-
-chain 2916 chr17_random 2617613 + 690160 690191 chr7 159138663 - 159114621 159114652 25187800
-31
-
-chain 2901 chr17_random 2617613 + 1010962 1011819 chr17 81195210 - 44844823 44845680 205824
-857
-
-chain 2668 chr17_random 2617613 + 837741 837773 chr8 146364022 + 31195 31227 1221
-32
-
-chain 2659 chr17_random 2617613 + 747955 747987 chr5 180915260 + 180755757 180755789 880
-32
-
-chain 2649 chr17_random 2617613 + 622962 622989 chr17 81195210 - 81153206 81153233 29165068
-27
-
-chain 2631 chr17_random 2617613 + 1252044 1252072 chr17 81195210 + 34548405 34548433 469
-28
-
-chain 2530 chr17_random 2617613 + 1100849 1100878 chr17 81195210 - 46384734 46384763 4689
-29
-
-chain 2422 chr17_random 2617613 + 621448 621568 chr17 81195210 - 81152835 81152952 7235512
-27 65 62
-28
-
-chain 2158 chr17_random 2617613 + 688361 688384 chr16 90354753 + 90179770 90179793 21906636
-23
-
-chain 2073 chr17_random 2617613 + 690420 690442 chr7 159138663 - 159114653 159114675 31315602
-22
-
-chain 1877 chr17_random 2617613 + 1533316 1533338 chr17_gl000206_random 41001 - 16469 16491 815
-22
-
-chain 1804 chr17_random 2617613 + 687361 687825 chr7 159138663 - 159114165 159114515 2659234
-54 381 267
-29
-
-chain 1771 chr17_random 2617613 + 742259 742283 chr1 249250621 - 248585388 248585412 123201
-24
-
-chain 1698 chr17_random 2617613 + 268509 268561 chr17 81195210 - 41933055 41933107 4387515
-52
-
-chain 1694 chr17_random 2617613 + 747513 747535 chr1 249250621 - 249115973 249115995 773
-22
-
-chain 1343 chr17_random 2617613 + 555358 555450 chr17 81195210 - 39728987 39729079 19263806
-92
-
-chain 1343 chr17_random 2617613 + 511667 511759 chr17 81195210 - 39728987 39729079 19263807
-92
-
-chain 1343 chr17_random 2617613 + 526316 526408 chr17 81195210 + 41466131 41466223 19263808
-92
-
-chain 1343 chr17_random 2617613 + 520168 520260 chr17 81195210 + 41466131 41466223 19263809
-92
-
-chain 1129 chr17_random 2617613 + 1019025 1019068 chr17 81195210 + 60348267 60348310 2834
-43
-
-chain 1082 chr17_random 2617613 + 686959 687027 chr7 159138663 - 159114561 159114629 2979122
-68
-
-chain 594 chr17_random 2617613 + 1548943 1548990 chr17_gl000206_random 41001 - 30268 30353 3713456
-4 9 47
-34
-
-chain 7055976638 chr18 76117153 + 0 76117153 chr18 78077248 + 10000 78016181 19
-15400898 1363998 3100000
-28218587 15 15
-5329636 47000 150000
-3667309 0 18
-16406890 28008 50000
-3388467 22000 50000
-2103304 3 0
-136125 7 9
-647 0 1
-1543 0 1
-25 0 1
-6 2 7
-19 0 2
-10 4 7
-9 2 4
-656 0 1
-358 0 1
-1625
-
-chain 404699 chr18_random 4262 + 0 4262 chr18_gl000207_random 4262 + 0 4262 116011
-4262
-
-chain 5307789368 chr19 63811651 + 11000 63806651 chr19 59128983 + 60000 59114839 21
-7286004 5000 50000
-1291194 5000 50000
-11767057 0 69160
-4058367 8000000 3100000
-20129228 0 2
-701 3 0
-347 1 1
-31 1 1
-1833 3 0
-1984 1 1
-47 1 1
-190 1 1
-34 1 1
-889 0 2
-1413 0 7
-2680 0 4
-375 0 1
-328 0 4
-15 0 1
-69 1 0
-3881 1 1
-36 0 12
-296 0 14
-1480 0 1
-233 1 1
-45 1 1
-1049 0 1
-1766 44 7
-220 3 0
-536 0 7
-352 8 8
-3603 1 1
-17 3 0
-697 1 0
-269 3 0
-974 6 5
-96 0 10
-1096 10 10
-1177 14 12
-110 3 3
-1028 12 9
-1090 1 0
-173 0 16
-1066 4 0
-4779 1 1
-42 1 1
-722 1 0
-548 2 2
-44 1 1
-424 54 54
-61 1 1
-59 1 1
-2086 0 15
-1500 1 0
-1754 2 0
-11209362
-
-chain 15150451 chr19_random 301858 + 142689 301858 chr19_gl000209_random 159169 + 0 159169 196
-159169
-
-chain 8748871 chr19_random 301858 + 0 92689 chr19_gl000208_random 92689 + 0 92689 377
-92689
-
-chain 14432273 chr1_random 1663265 + 444114 915337 chr1 249250621 - 104328377 105379619 206
-1802 63331 510
-7296 6958 14784
-7961 0 2
-631 19782 48350
-2466 1 1
-72 1 1
-281 2 2
-18 1 1
-2234 1 1
-23 2 1
-1869 0 2
-890 0 1
-2816 0 3
-59 12 12
-1298 1 1
-11 1 1
-294 214294 820733
-136815
-
-chain 10693564 chr1_random 1663265 + 965337 1079393 chr1 249250621 + 199645090 199759149 300
-3537 0 2
-1755 1 1
-38 1 1
-15918 1 0
-2372 0 1
-1251 34 34
-7007 1 6
-3552 1 1
-44 1 1
-799 1 1
-42 1 1
-3907 2 0
-1780 1 1
-49 1 1
-1586 2 0
-197 1 1
-37 1 1
-292 1 1
-47 1 1
-927 0 2
-549 1 1
-27 1 1
-595 1 1
-18 1 1
-291 0 2
-6685 1 0
-2369 1 0
-6503 13 13
-639 1 1
-70 1 1
-477 1 0
-1001 0 2
-1967 2 0
-3454 1 1
-26 1 1
-3144 0 4
-89 1 0
-6546 14 15
-6194 1 0
-5390 13 13
-196 1 0
-7401 1 9
-1242 1 0
-1702 1 0
-477 1 1
-61 0 1
-1487 1 0
-1276 1 0
-1950 9 0
-4681 0 2
-1332 1 0
-956
-
-chain 10110185 chr1_random 1663265 + 1464329 1570762 chr1_gl000191_random 106433 + 0 106433 317
-106433
-
-chain 6680210 chr1_random 1663265 + 198768 359123 chr1 249250621 + 1257620 1436018 467
-467 0 1
-41 0 1
-10 4 4
-930 2 3
-122 3 4
-138 66071 6986
-47 0 1
-945 0 1
-279 1 2
-508 0 1
-482 0 1
-1285 1 1
-40 1 1
-199 0 1
-207 1 1
-29 1 1
-1021 0 1
-1168 0 2
-388 0 1
-69 15 17
-195 4 4
-52 1 1
-9 1 3
-23 0 1
-284 0 1
-1485 15 16
-138 9 9
-27 44 5
-35 46 46
-97 0 1
-5 0 1
-734 0 3
-257 1 1
-18 1 1
-442 0 2
-51 4 0
-424 0 1
-134 1 1
-39 0 1
-22 1 1
-564 15 17
-469 0 3
-39 0 1
-22 2 2
-1076 0 1
-210 14 14
-166 0 1
-3264 1 0
-111 0 1
-309 19898 50666
-91 0 1
-116 0 1
-56 0 1
-152 0 1
-46 0 1
-51 0 1
-63 0 2
-420 4 5
-697 0 1
-2269 7 0
-48 1 1
-4086 0 2
-317 0 1
-49 0 1
-1795 0 1
-1147 1 1
-39 1 1
-1378 0 17
-477 2 0
-4457 1 1
-105 0 1
-1003 0 1
-232 1 2
-147 277 46717
-169 0 1
-37 1 1
-227 0 2
-651 1 0
-1805 1 1
-45 1 1
-498 1 0
-233 1 1
-29 1 1
-231 12 20
-2015 0 1
-20 1 1
-653 0 1
-12 0 1
-17 1 1
-139 0 1
-10 0 1
-22 0 1
-37 16 19
-38 0 5
-54 0 1
-437 0 1
-539 2 0
-1067 0 1
-1042 1 0
-2434 10 0
-256 133 0
-839 0 1
-267 0 1
-640 1 1
-35 1 1
-1351 15 15
-1316 1 1
-31 0 1
-1986 5 5
-1179 0 1
-3153 1 0
-1165 0 1
-22 0 1
-56 1 1
-27 1 1
-77 0 1
-81 15 17
-111 1 1
-44 0 1
-2254 1 0
-320 1 0
-2368 0 1
-26 0 1
-407 5 6
-2982 0 4
-852 0 5
-703 1 0
-191 2 3
-73 5 5
-72
-
-chain 4901563 chr1_random 1663265 + 676697 728522 chr1 249250621 - 205721991 205773795 637
-1664 1 0
-299 1 0
-1113 4 0
-100 1 0
-1522 1 1
-46 1 1
-83 1 1
-30 1 1
-62 1 1
-46 1 1
-1990 1 1
-41 1 1
-1403 0 4
-1148 0 5
-10134 1 1
-21 1 1
-1479 1 0
-1499 9 9
-3057 0 2
-137 6 0
-1251 2 0
-21 1 1
-897 5 4
-2851 1 0
-399 0 2
-624 6 5
-440 1 0
-5 1 0
-2953 1 0
-480 9 0
-2793 36 35
-6791 1 0
-4870 1 0
-1478
-
-chain 4504833 chr1_random 1663265 + 1205412 1353281 chr1 249250621 - 133273039 133340206 679
-3980 0 1
-79 1 1
-34 1 1
-916 4 6
-1818 34 28
-51 21 16
-5 1 0
-5 1 0
-4 1 0
-11 1 0
-28 1 0
-8 1 0
-8 1 0
-1366 1 1
-38 0 1
-7507 0 1
-3084 2 0
-2569 1 0
-20 1 0
-8 1 0
-10 21 16
-51 10 10
-3979 6 5
-2086 1 0
-5466 0 1
-27 1 1
-1117 1 0
-66 1 0
-23 1 0
-2070 0 1
-67 1 0
-2611 1 0
-9 1 0
-23 23 18
-577 97925 17254
-5929 0 1
-1948 1 0
-72 0 1
-1365 60 62
-706
-
-chain 3984524 chr1_random 1663265 + 1620762 1663230 chrX 155270560 - 27920664 27963158 751
-107 0 1
-696 27 12
-658 0 12
-1440 0 2
-671 0 2
-506 0 3
-806 0 1
-4759 0 12
-131 1 0
-848 1 0
-213 0 8
-2046 1 0
-4979 0 1
-2482 1 0
-1502 1 0
-3474 0 4
-782 0 1
-12366 1 0
-3969
-
-chain 2698055 chr1_random 1663265 + 6164 122978 chr1 249250621 - 139553697 139584554 1020
-486 1 1
-19 9 9
-297 1 1
-73 1 1
-341 1 0
-105 1 0
-286 47997 0
-689 1 1
-48 1 1
-53 0 2
-1870 1 1
-39 1 1
-1682 0 39
-470 8 9
-691 1 0
-370 1 1
-24 1 1
-356 0 1
-1496 9599 84
-28 0 1
-7 4 0
-131 0 1
-66 932 181
-88 9 11
-10 7 0
-10 8 5
-5 0 3
-76 27759 26
-44 3 0
-26 0 2
-6 1 1
-59 3 1
-121 2 4
-4990 1 0
-672 0 1
-1487 1 1
-39 1 1
-1691 0 1
-36 10 10
-3503 1 1
-46 1 1
-4128 0 1
-1818 0 5
-1107 16 16
-841
-
-chain 2474973 chr1_random 1663265 + 1129393 1155387 chr1 249250621 + 229232478 229258468 1104
-3505 1 1
-44 1 1
-5232 4 0
-17207
-
-chain 2468882 chr1_random 1663265 + 1280682 1387454 chr1 249250621 - 133163307 133238928 735
-149 0 1
-7073 122 124
-1799 1 1
-43 1 1
-5594 24 23
-60 12182 28596
-3279 1 0
-571 21 21
-1080 1 0
-10 0 2
-1138 1 0
-3484 1 0
-1689 0 8
-810 42350 1
-1088 1 1
-21 1 0
-78 30 29
-746 0 2
-2729 1 0
-2088 0 3
-1949 966 174
-31 9 0
-12 16 16
-29 0 4
-13 100 98
-53 1884 0
-16 1 0
-5 0 1
-18 3916 1388
-1729 0 1
-1373 1 0
-102 1 0
-21 1 0
-4 1 0
-7 1 0
-38 2 0
-48 1 0
-525 5 4
-645 5 5
-1189 1 0
-1911 4 0
-69 8 8
-24 5 4
-284 1 0
-1481
-
-chain 2064841 chr1_random 1663265 + 247141 392880 chr1 249250621 - 247850669 247948213 608
-351 1 0
-965 0 1
-35 0 1
-248 0 1
-122 0 1
-1194 11 11
-580 3 5
-969 0 1
-425 5 5
-25 1 1
-586 1 1
-77 1 1
-1895 1 1
-37 1 2
-253 0 1
-560 1 1
-62 1 1
-74 1 1
-27 1 1
-90 31631 11346
-887 0 40
-759 32 0
-2596 0 1
-308 1 0
-37 0 1
-40 0 1
-346 17 19
-89 2 2
-34 1 2
-44 0 2
-35 0 1
-20 0 1
-260 0 1
-3009 1 1
-30 0 1
-5 10 12
-104 1 1
-48 0 1
-67 13 15
-1226 0 1
-111 7 7
-31 0 1
-47 1 3
-13 3 5
-38 7 10
-7 0 2
-48 0 1
-110 1 0
-623 0 2
-241 1 1
-47 1 1
-1601 0 1
-582 13 21
-1128 2 0
-348 4 4
-28 22 23
-481 0 2
-30 1 1
-628 0 1
-96 0 1
-30 0 1
-78 17 173
-64 55865 28961
-69 13 14
-498 0 1
-1593 0 4
-183 26 27
-337 1 0
-1433 0 1
-6191 0 2
-2435 0 1
-3451 540 0
-83 695 0
-1318 5 5
-21 1 1
-526 0 1
-833 0 1
-144 0 1
-427 8 8
-235 1 2
-297 1 1
-34 0 1
-250 0 3
-1007 0 1
-1403 1 1
-37 1 1
-355 1 1
-6 0 2
-94 1 1
-278 2 2
-5 0 1
-20 1 1
-667 24 24
-1858 10 12
-146 8 7
-2002 0 1
-284 0 1
-1233 0 1
-840 11 0
-914 2 0
-122 1 1
-26 0 2
-118
-
-chain 1850028 chr1_random 1663265 + 76914 101906 chr1 249250621 - 139621990 139717568 1363
-3916 0 1
-77 20 20
-26 0 856
-764 17 16
-12 1 0
-295 1 0
-2648 2870 23264
-250 997 50331
-2203 0 5
-797 1 0
-2197 1 1
-117 7 8
-429 1 0
-7345
-
-chain 1707631 chr1_random 1663265 + 501749 626697 chr1 249250621 + 144188000 145316961 852
-223 42 42
-236 22 22
-242 91 103
-199 8 8
-102 112 112
-50 126 126
-290 32 32
-213 45 45
-125 1 1
-56 1 1
-82 1 1
-27 13 13
-71 5 5
-493 3 3
-15 1 1
-248 1 1
-44 1 1
-65 1 1
-52 1 1
-169 1 1
-82 1 1
-292 1 1
-83 0 1580
-458 1 1
-16 1 1
-478 5 5
-568 23 17
-634 1 1
-46 1 1
-50 14 14
-864 31 61
-55 23320 364967
-85 1 1
-107 1 1
-376 1 1
-20 0 1
-195 10 10
-150 1 1
-35 1 1
-274 5 5
-143 1 0
-862 7 0
-20 1 0
-504 1 1
-25 1 1
-238 1 1
-36 1 1
-139 0 1
-25 1 1
-157 8 8
-60 16 16
-59 17 17
-285 0 1
-120 1 1
-69 1 1
-509 1 1
-59 1 1
-162 0 322
-70 5 5
-2169 1 1
-31 1 1
-224 1 1
-36 1 1
-76 1 0
-5 5 0
-109 6 6
-139 5 3
-65 0 20
-360 47 48
-86 18 17
-149 44 44
-76 54 55
-196 38 38
-139 139 6280
-107 1 1
-95 0 1
-46 1 1
-91 1 1
-18 1 1
-62 11 11
-511 0 1
-106 1 0
-505 0 2
-443 9 9
-519 112 112
-396 1 1
-26 1 1
-225 1 1
-57 1 1
-502 1 0
-485 1 1
-105 0 2
-146 1 1
-41 1 1
-203 1 1
-45 1 1
-62 5 5
-850 1 1
-55 2 2
-215 1 1
-45 1 1
-474 0 3
-19 1 1
-2337 1 1
-34 1 1
-148 1 0
-159 1 1
-32 1 1
-64 0 4
-849 1 1
-34 1 1
-126 38816 272842
-32 0 140
-3176 18 17
-6689 1 0
-274 0 1
-1449 0 1
-1312 1 0
-1861 8888 417910
-92 172 6531
-148 0 2
-213 1 1
-30 1 1
-227 1 1
-62 6 0
-276 1 1
-35 1 1
-94 14 14
-325 5 5
-118 1 1
-81 1 1
-234 4 0
-15 1 1
-243 1 1
-39 1 1
-117 1 1
-35 1 1
-83 1 1
-64 5 5
-55 13 13
-61 11 11
-175 1 1
-27 1 1
-134 1 1
-60 1 1
-64 1 1
-87 1 1
-615 1 1
-22 1 1
-201 5 5
-48 1 1
-117 1 1
-23 3 3
-319 6 6
-156 0 1
-25 1 1
-215 13 13
-97 14 14
-113 0 3
-35 1 1
-65 15 15
-480 0 1
-636 1 1
-107 1 1
-753 1 1
-43 1 1
-861 17 16
-470 1 1
-38 1 1
-579 1 1
-25 1 1
-224 1 1
-71 1 1
-266 36 36
-167 88 88
-400 53 53
-131 6 5
-220 22 19
-317 23 23
-109 95 101
-73 0 4726
-208 28 28
-293
-
-chain 1680348 chr1_random 1663265 + 1245440 1263421 chr1 249250621 + 116101959 116120000 1475
-441 0 14
-728 0 2
-1146 2 0
-1829 6 6
-93 3 2
-2916 0 6
-2013 0 47
-369 1 1
-27 9 0
-37 1 1
-200 1 0
-2285 0 2
-3527 1 1
-24 0 1
-1001 0 1
-1195 1 1
-39 1 1
-85
-
-chain 1335863 chr1_random 1663265 + 231796 246037 chr4 191154276 - 30408128 30422371 1784
-3391 6 6
-562 7 7
-5976 2 3
-4144 10 11
-143
-
-chain 1170727 chr1_random 1663265 + 577933 590476 chr1 249250621 + 144898104 144910646 2036
-1896 48 48
-2779 1 0
-7128 45 45
-646
-
-chain 1143882 chr1_random 1663265 + 1330802 1343100 chr1 249250621 - 133251270 133263558 2093
-1050 1 1
-51 1 1
-237 1 1
-35 1 1
-514 16 12
-76 9 1
-1642 12 12
-53 0 1
-3766 0 1
-40 1 1
-1513 0 1
-195 11 11
-135 26 26
-2627 1 0
-284
-
-chain 988809 chr1_random 1663265 + 564355 574807 chr1 249250621 - 104390169 104400621 2516
-59 1 2
-5994 1 1
-45 1 1
-3985 3 3
-42 1 0
-320
-
-chain 957971 chr1_random 1663265 + 256162 266426 chr1 249250621 + 1291904 1302191 2686
-83 0 1
-585 0 1
-1018 0 1
-18 1 1
-59 16 16
-1569 0 1
-69 1 0
-35 0 1
-36 1 1
-176 0 1
-48 0 1
-56 2 3
-41 0 1
-160 17 1
-461 13 21
-174 0 4
-517 7 7
-141 4 4
-89 0 1
-1155 1 0
-370 7 7
-143 1 0
-1019 22 22
-1177 0 1
-607 0 16
-86 0 3
-279
-
-chain 895962 chr1_random 1663265 + 196343 223209 chr1 249250621 - 247894293 247990621 2587
-108 25 24
-131 0 1
-299 0 1
-137 44 45
-51 0 1
-572 0 1
-406 36 37
-508 2162 63455
-80 5 8
-86 0 1
-61 0 1
-31 1 0
-165 14 15
-78 75 78
-234 0 1
-152 13 15
-849 0 1
-1798 12505 20653
-3495 0 1
-43 0 1
-1944 1 1
-26 1 1
-169 0 1
-365 0 1
-196
-
-chain 884318 chr1_random 1663265 + 4444 145186 chr1 249250621 + 109546538 109651856 1047
-123 47 1183
-818 1 1
-75 1 0
-22 1 1
-455 18927 20784
-855 1 0
-74 12001 11300
-2581 2 2
-31 0 1
-81 1 0
-24 1 1
-123 1 0
-147 0 1
-45 0 1
-26 0 1
-9 1 0
-12 2330 786
-22 41 53
-127 1706 714
-3729 74524 39329
-68 5 7
-3088 2 2
-15 5 6
-14 0 2
-657 1 1
-37 1 1
-2140 1 0
-3034 1 0
-42 1 1
-446 0 1
-55 2 2
-30 1 1
-391 1 1
-35 1 1
-982 3 0
-123 1 1
-28 0 4
-1503 1 0
-1159 0 3
-1464 0 1
-838 1 1
-47 1 3
-162 1 0
-139 1 1
-10 0 1
-2424 6 6
-448 1 0
-846 5 0
-1509
-
-chain 739113 chr1_random 1663265 + 68329 76740 chr1 249250621 + 109654512 109662863 6250
-254 1 0
-27 1 1
-746 1 0
-315 19 19
-163 42 2
-51 3 1
-44 1 1
-592 0 1
-216 1 1
-34 1 1
-2323 10 0
-10 236 236
-125 1 0
-806 213 213
-828 6 0
-82 6 6
-1253
-
-chain 688441 chr1_random 1663265 + 605533 614556 chr1 249250621 + 144612760 144812114 1498
-76 1 1
-70 1 1
-73 4 2
-40 0 2
-159 1 1
-56 2 0
-911 1 1
-63 1 1
-84 9 1
-149 1 1
-21 1 0
-606 1 1
-21 3 3
-132 12 10
-368 1 1
-26 1 1
-50 1 1
-65 1 1
-57 1 1
-44 1 1
-279 0 1
-34 0 4
-7 1 1
-308 0 32
-331 1 1
-84 1 1
-286 1 1
-35 1 1
-59 8 8
-146 1 1
-237 1 1
-52 1 1
-35 2 0
-40 1 1
-53 3 3
-103 1 1
-397 1 1
-59 1 0
-33 1 1
-587 11 11
-219 10 10
-71 5 5
-62 1 1
-38 1 1
-240 1 1
-70 1 1
-85 12 12
-86 413 190724
-207 1 0
-825 186 186
-172
-
-chain 590572 chr1_random 1663265 + 516651 523401 chr1 249250621 - 104651805 104658532 8996
-157 1 1
-17 1 1
-395 1 1
-65 1 1
-187 0 9
-21 1 1
-62 16 16
-110 2 0
-205 1 0
-43 1 1
-248 1 1
-59 4 2
-725 1 1
-49 1 1
-455 1 1
-106 1 1
-450 1 1
-133 0 2
-383 1 1
-37 1 1
-178 4 4
-70 1 1
-85 2 2
-43 1 1
-56 1 1
-22 24 0
-30 1 1
-64 1 1
-21 1 1
-198 1 1
-67 1 1
-58 1 0
-79 7 6
-74 1 1
-79 1 0
-26 1 1
-202 15 15
-352 2 2
-16 1 1
-51 22 19
-574 0 1
-87 1 1
-46 1 1
-88 1 1
-27 1 1
-120
-
-chain 526301 chr1_random 1663265 + 1264935 1361969 chr1 249250621 + 116056429 116101915 1232
-69 0 1
-30 1 1
-2663 2 0
-4185 1 0
-229 1 0
-25 1 1
-1104 1 0
-604 4 0
-1264 1 0
-2613 1 1
-21 1 0
-12 1 13
-2785 72844 21309
-397 19 2
-2203 1 1
-31 1 1
-658 1 1
-27 1 1
-923 9 9
-168 1 1
-46 0 2
-2502 43 43
-879 17 17
-644
-
-chain 506365 chr1_random 1663265 + 1399143 1404500 chr1 249250621 - 133194419 133199775 28136
-3175 1 0
-1447 0 1
-512 1 0
-221
-
-chain 482769 chr1_random 1663265 + 211415 216543 chr1 249250621 - 247889067 247894197 45886
-70 2 3
-905 2 3
-1091 1 1
-23 1 1
-302 15 14
-393 1 1
-24 1 1
-1961 0 1
-336
-
-chain 474976 chr1_random 1663265 + 1295676 1399043 chr1 249250621 + 115999419 116093083 1267
-571 10 10
-627 7 6
-46 1 1
-3095 0 1
-960 0 1
-608 11 10
-426 39 35
-2035 1 1
-23 1 1
-1866 17 18
-79 1 1
-1530 63368 32589
-866 110 110
-100 53 53
-1884 40 40
-3775 15606 36683
-2322 14 14
-145 49 49
-296 96 96
-297 0 2
-465 58 58
-262 22 22
-182 0 1
-638 1 0
-764
-
-chain 456897 chr1_random 1663265 + 1317 37745 chr1 249250621 + 109592282 109609521 6704
-1178 0 1
-16 1 0
-10 0 1
-4 1 1
-245 7763 188
-27 1 1
-1155 1 1
-91 4156 3450
-1810 51 51
-50 9 10
-567 3839 4491
-37 6346 0
-128 0 2
-29 50 48
-45 1519 155
-6 2 0
-9 10 6
-246 1806 0
-18 1 0
-5 2068 31
-2018 2 2
-20 3 3
-833 1 0
-101 1 0
-149
-
-chain 426748 chr1_random 1663265 + 63710 68210 chr1 249250621 - 139547929 139552428 99412
-1542 1 0
-2957
-
-chain 353264 chr1_random 1663265 + 462791 467071 chr1 249250621 + 144608404 144612698 156569
-71 50 50
-33 29 29
-226 10 10
-526 66 67
-55 50 50
-414 5 5
-57 46 58
-57 12 12
-254 1 1
-25 1 1
-52 13 13
-638 16 16
-579 1 1
-60 1 1
-178 1 1
-79 1 0
-35 0 3
-111 1 1
-43 1 1
-264 1 0
-119 1 1
-15 0 1
-76 1 0
-5
-
-chain 327229 chr1_random 1663265 + 1409275 1412904 chr1 249250621 + 115977641 115981270 200837
-2640 156 155
-473 0 1
-360
-
-chain 312923 chr1_random 1663265 + 1319916 1393318 chr1 249250621 + 115926067 115986980 1722
-1418 1 0
-1389 1 0
-1620 0 1
-374 1 0
-1361 0 1
-1994 1 0
-827 0 6
-1784 56909 44431
-253 1 0
-12 2 0
-8 24 14
-5344 2 0
-76
-
-chain 244562 chr1_random 1663265 + 478502 503782 chr1 249250621 - 100680024 100953393 1328
-106 13 13
-478 55 55
-310 1 1
-23 1 1
-376 1 1
-61 1 1
-1100 10 10
-810 5 0
-53 1 1
-119 1 1
-44 1 0
-94 100 32051
-60 5 5
-744 1 1
-87 1 1
-44 2 0
-53 11 5
-584 2 2
-30 0 17
-73 1 1
-49 1 1
-456 8 8
-796 19 19
-166 1 1
-42 1 1
-105 1 1
-38 1 1
-55 1 1
-80 1 1
-293 2 2
-19 1 1
-550 5637 9366
-68 24 22
-103 1 1
-35 0 1
-102 1 1
-39 6 0
-388 9 9
-21 1 1
-338 27 27
-500 4 0
-117 5 5
-271 1 1
-38 1 1
-273 3 3
-16 3 3
-80 1 1
-63 1 1
-130 1 1
-18 1 1
-204 1 1
-45 1 1
-141 1 1
-112 1 1
-75 1 0
-75 4 4
-83 2 0
-854 5 5
-104 0 4
-12 1 1
-351 1 1
-40 1 1
-102 4779 217183
-40 502 502
-31 0 12
-58 311 311
-110 52 52
-78 1 1
-46 535 535
-45
-
-chain 239113 chr1_random 1663265 + 455713 471283 chr1 249250621 + 144877306 144889304 5703
-73 1 0
-944 0 1
-2741 1 1
-77 1770 1206
-12 1449 338
-10 71 1301
-14 10 145
-26 4281 1018
-2672 0 1
-1418
-
-chain 228041 chr1_random 1663265 + 450807 453388 chr1_gl000192_random 547496 + 525635 528523 474030
-521 25 26
-256 4 316
-195 1 0
-183 4 0
-249 48 48
-915 19 18
-161
-
-chain 219405 chr1_random 1663265 + 8071 23476 chr1 249250621 + 109602419 109665881 23204
-1669 2217 48069
-1950 5 1
-213 6609 8813
-681 1 0
-580 0 1
-296 37 38
-248 0 4
-301 31 31
-143 38 38
-386
-
-chain 219231 chr1_random 1663265 + 32127 34517 chr1 249250621 - 139682423 139684814 491274
-85 27 27
-14 0 1
-204 5 5
-63 24 24
-1968
-
-chain 210320 chr1_random 1663265 + 459650 474308 chr1_gl000192_random 547496 + 522489 531711 22108
-267 0 10
-1175 5 1
-48 0 2
-16 3 3
-119 0 12
-37 12 12
-1340 8711 3256
-34 0 2
-58 1 0
-38 1 0
-351 5 5
-486 17 15
-158 81 81
-76 1 1
-36 1 1
-69 12 13
-1500
-
-chain 207966 chr1_random 1663265 + 29704 55292 chr1 249250621 + 109529352 109557857 7568
-742 273 273
-560 0 1
-232 17541 20458
-729 2 2
-97 3 3
-89 1 1
-68 0 1
-28 1 1
-2575 2 0
-59 1 1
-2585
-
-chain 202325 chr1_random 1663265 + 27243 45056 chr1 249250621 - 139669260 139678536 8944
-1432 157 157
-50 45 45
-677 2608 49
-27 8791 867
-266 9 9
-169 1 1
-62 1 1
-67 7 5
-28 1 1
-1619 22 22
-41 127 127
-21 1 1
-40 2 1
-32 1 1
-362 0 1949
-1147
-
-chain 199687 chr1_random 1663265 + 18553 20627 chr1 249250621 + 109595202 109597276 600797
-2074
-
-chain 171508 chr1_random 1663265 + 447628 491985 chr1 249250621 + 148535207 148566609 6481
-121 14 14
-517 0 4
-507 1 0
-74 1 1
-41 0 1
-61 4541 11291
-1073 1 0
-718 70 44
-66 31371 11607
-690 1 1
-115 1 1
-61 1 1
-70 1 1
-57 0 4
-54 1 1
-41 2 6
-28 5 77
-73 1 1
-34 5 5
-887 1 0
-427 1 1
-7 0 5
-40 1 1
-59 1 1
-47 1 1
-121 9 9
-57 2 0
-362 1 1
-48 4 4
-429 1 1
-28 1 1
-160 1 1
-92 5 0
-15 0 5
-15 1 1
-139 5 5
-37 1 1
-87 1 1
-40 1 1
-253 1 1
-35 1 1
-197 1 1
-69 1 1
-114 1 1
-79 1 1
-51
-
-chain 170629 chr1_random 1663265 + 474420 479154 chr1 249250621 - 104365477 104643040 2652
-3982 697 273526
-55
-
-chain 143194 chr1_random 1663265 + 449166 450695 chr1 249250621 - 104373413 104374943 899312
-167 0 1
-362 11 11
-989
-
-chain 141808 chr1_random 1663265 + 195186 230464 chr1 249250621 + 1361949 1390000 8100
-66 0 1
-865 27548 20313
-75 1 1
-163 2 2
-2267 0 2
-1549 0 2
-37 1 1
-597 1 1
-28 1 1
-269 14 19
-59 1 1
-20 1 1
-734 2 0
-977
-
-chain 137395 chr1_random 1663265 + 446016 447466 chr1 249250621 + 144922370 144923820 937713
-1450
-
-chain 120082 chr1_random 1663265 + 1413004 1414278 chr1 249250621 + 115908963 115910237 1071399
-1274
-
-chain 110577 chr1_random 1663265 + 0 1193 chr5 180915260 + 33390295 33391489 1161255
-153 0 1
-942 4 4
-94
-
-chain 101176 chr1_random 1663265 + 442945 444014 chr1 249250621 - 104338746 104339815 1265508
-1069
-
-chain 61431 chr1_random 1663265 + 9891 10535 chr1 249250621 + 109697165 109697809 2020878
-644
-
-chain 48091 chr1_random 1663265 + 497444 501649 chr1 249250621 + 144842054 144846259 8551
-4205
-
-chain 31572 chr1_random 1663265 + 576223 577747 chr4 191154276 + 100714665 100716180 4375428
-114 20 20
-105 460 462
-56 375 378
-65 263 249
-66
-
-chain 28915 chr1_random 1663265 + 230464 231387 chr1 249250621 + 1420670 1421247 4712368
-191 574 228
-67 38 38
-53
-
-chain 27385 chr1_random 1663265 + 205390 205833 chr1 249250621 - 247799065 247799507 5896168
-141 86 86
-106 47 46
-63
-
-chain 25670 chr1_random 1663265 + 87811 88395 chr7 159138663 - 51241913 51242744 3648322
-121 405 652
-58
-
-chain 21035 chr1_random 1663265 + 376636 377171 chr1 249250621 - 247932544 247932844 3872256
-107 118 0
-61 93 15
-49 39 0
-68
-
-chain 18694 chr1_random 1663265 + 540390 626404 chr1 249250621 + 148529505 148589817 1111
-44 254 254
-43 76 73
-54 196 196
-37 240 6477
-31 4 4
-4 2528 2531
-8 1 1
-42 1 1
-60 70185 38258
-94 10137 10136
-31 1 1
-3 167 167
-88 400 400
-52 829 828
-33 10 0
-52 281 281
-28
-
-chain 18305 chr1_random 1663265 + 612752 613165 chr1 249250621 + 146400208 146400621 434456
-18 31 31
-215 97 97
-52
-
-chain 18205 chr1_random 1663265 + 210123 210768 chr1 249250621 + 1400633 1401273 11939617
-55 410 403
-82 10 12
-88
-
-chain 16211 chr1_random 1663265 + 84691 84862 chr5 180915260 + 68593902 68594073 10696361
-171
-
-chain 14543 chr1_random 1663265 + 375983 376437 chr1 249250621 - 247932585 247932921 12601411
-13 231 153
-56 101 61
-53
-
-chain 11766 chr1_random 1663265 + 209234 209374 chr6 171115067 + 48765751 48765891 19406706
-84 4 4
-52
-
-chain 10899 chr1_random 1663265 + 1264583 1264729 chr4 191154276 - 96228610 96228756 20935897
-69 19 19
-58
-
-chain 9779 chr1_random 1663265 + 575439 575892 chr5 180915260 - 127861600 127862049 19918678
-60 389 385
-4
-
-chain 9449 chr1_random 1663265 + 206282 206576 chr1 249250621 - 247814999 247815293 24134146
-64 179 179
-51
-
-chain 9080 chr1_random 1663265 + 376922 377270 chr1 249250621 - 247932789 247932982 12922008
-42 39 0
-12 156 79
-8 39 0
-52
-
-chain 7488 chr1_random 1663265 + 375996 376227 chr1 249250621 - 247932827 247932944 24096271
-39 178 64
-14
-
-chain 7272 chr1_random 1663265 + 492183 493450 chr1_gl000192_random 547496 + 517200 518462 5534
-104 1136 1131
-27
-
-chain 7258 chr1_random 1663265 + 576783 577499 chr14 107349540 - 76512188 76512903 4928952
-56 262 262
-101 216 215
-81
-
-chain 7167 chr1_random 1663265 + 376446 376521 chr1 249250621 - 247932507 247932582 27908410
-75
-
-chain 6857 chr1_random 1663265 + 87342 87413 chr4 191154276 - 48731804 48731875 28524152
-71
-
-chain 6426 chr1_random 1663265 + 508964 509092 chr1 249250621 + 144828390 144828518 146082
-13 51 51
-64
-
-chain 6204 chr1_random 1663265 + 211009 211075 chr1 249250621 + 1467491 1467557 30075428
-66
-
-chain 6008 chr1_random 1663265 + 376783 376999 chr1 249250621 - 247932727 247932982 14593768
-49 132 171
-35
-
-chain 5855 chr1_random 1663265 + 576112 576191 chr20 63025520 + 560198 560277 14627950
-79
-
-chain 5539 chr1_random 1663265 + 247082 247140 chr16 90354753 - 36623787 36623845 31913042
-58
-
-chain 5517 chr1_random 1663265 + 575499 575571 chr1 249250621 - 135388947 135389019 22575370
-19 14 14
-39
-
-chain 5153 chr1_random 1663265 + 463736 463802 chr1 249250621 - 100897669 100897735 496173
-66
-
-chain 4331 chr1_random 1663265 + 576997 577043 chr4 191154276 + 125192159 125192205 31588172
-46
-
-chain 4269 chr1_random 1663265 + 508977 509028 chr1 249250621 - 101245694 101245744 11082093
-11 1 0
-24 1 1
-14
-
-chain 3392 chr1_random 1663265 + 1264741 1264777 chr1 249250621 + 103601716 103601752 22855599
-36
-
-chain 2584 chr1_random 1663265 + 472532 472613 chr1 249250621 - 104701386 104701467 60543
-81
-
-chain 2530 chr1_random 1663265 + 576576 576677 chr2 243199373 + 18874674 18874775 4960893
-101
-
-chain 2443 chr1_random 1663265 + 508878 508906 chr1 249250621 + 145358788 145358816 8460
-28
-
-chain 2298 chr1_random 1663265 + 376035 376059 chr1 249250621 - 247932520 247932544 25650669
-24
-
-chain 2200 chr1_random 1663265 + 377179 377218 chr1 249250621 - 247932814 247932853 18046603
-39
-
-chain 2078 chr1_random 1663265 + 576191 576213 chr2 243199373 - 87184513 87184535 19810119
-22
-
-chain 1902 chr1_random 1663265 + 462945 462974 chr1 249250621 + 146388727 146388756 1440299
-29
-
-chain 1597 chr1_random 1663265 + 87932 87955 chr1 249250621 + 203810737 203810760 8954286
-23
-
-chain 1582 chr1_random 1663265 + 576728 576783 chr12 133851895 + 80469819 80469874 8882774
-55
-
-chain 1575 chr1_random 1663265 + 377270 377295 chr1 249250621 - 247932789 247932814 25950613
-25
-
-chain 1557 chr1_random 1663265 + 376743 376767 chr1 249250621 - 247932958 247932982 25686497
-24
-
-chain 1423 chr1_random 1663265 + 577528 577578 chr3 198022430 + 24122600 24122650 5633229
-50
-
-chain 1401 chr1_random 1663265 + 208964 209027 chr19 59128983 + 53692979 53693042 24768107
-63
-
-chain 1269 chr1_random 1663265 + 577058 577101 chrX 155270560 - 54470903 54470946 5438939
-43
-
-chain 1137 chr1_random 1663265 + 88481 88531 chrX 155270560 - 107394638 107394688 10193603
-50
-
-chain 1096 chr1_random 1663265 + 88429 88481 chr1 249250621 - 213837318 213837370 14790649
-52
-
-chain 963 chr1_random 1663265 + 575892 575970 chr1 249250621 - 198864223 198864301 11419759
-78
-
-chain 917 chr1_random 1663265 + 455298 455327 chr1_gl000192_random 547496 - 58673 58702 411262
-29
-
-chain 870 chr1_random 1663265 + 577218 577269 chr6 171115067 - 89553434 89553485 24911812
-51
-
-chain 794 chr1_random 1663265 + 88312 88337 chr4 191154276 + 171087862 171087887 6635553
-25
-
-chain 649 chr1_random 1663265 + 576545 576576 chr15 102531392 - 5321440 5321471 7251364
-31
-
-chain 622 chr1_random 1663265 + 576462 576495 chr11 135006516 + 114505284 114505317 6564387
-33
-
-chain 546 chr1_random 1663265 + 88531 88556 chr6 171115067 + 144792007 144792032 10415340
-25
-
-chain 398 chr1_random 1663265 + 575763 575814 chr14 107349540 + 34662629 34662680 24063646
-51
-
-chain 22466167312 chr2 242951149 + 0 242751149 chr2 243199373 + 10000 243102476 1
-1201236 1 0
-2057 1 1
-26 1 1
-4043 0 22
-82 101 7
-33 0 74
-36 13 1
-67 0 48
-152 0 418
-50 2 0
-6 6 0
-76 74 0
-20 6 0
-22 118 0
-374 0 2446
-836 0 2310
-21 0 2444
-21507 1 1
-50 0 4
-2041 4 0
-9052 0 2
-81 8 0
-10 42 0
-1078 1 0
-4122 0 1
-1608 1 28
-4029 9 0
-967 1000 4547
-414 0 27
-2237132 1 0
-2458 17 17
-3915 47 47
-633 0 4
-3531 14 14
-3954 50000 51129
-1426129 100025 160449
-11087286 3 0
-773 50000 103977
-1576 1 0
-240 1 0
-318 0 2
-258 16 0
-2848 10 10
-1404 1 1
-27 1 1
-703 0 13
-375 1 0
-4783388 25000 35000
-848 2 0
-1225 2 0
-391 0 1
-3445 24 24
-184 1 1
-28 1 1
-49 4 0
-4514 9 0
-9628 9 1
-1483 7 7
-1990 1 0
-1949 0 1
-2716230 0 1
-46732767 9 5
-9477928 3 0
-7520813 0 72396
-1900436 150000 294073
-17672 0 1
-5792 0 1
-9019 266 0
-2942 1 0
-9388 0 2
-37826 0 4
-23440 4 0
-290929 1000000 1273578
-731068 3000000 3000000
-2558421 1 0
-1196 0 10
-686 1 0
-26 3 0
-15 1 1
-2309 1 0
-1332 23 22
-344 1 0
-1645 4 4
-6564 0 1
-6329 0 1
-769 1 0
-873 0 7
-1299 1 0
-8250 15 15
-4291 12548 10626
-1054 0 103
-84 218 0
-5897 1 1
-33 1 1
-9905 37 51
-1645 113 113
-1597 4 4
-61 1 1
-866 0 13
-2830 0 3
-2819 2 0
-156 436 88
-100 54 0
-4753 8 0
-4903 6 6
-3847 2 0
-108126 145 0
-3542 0 1
-10276 1 0
-402 1 1
-47 1 1
-63 0 2
-583 1 1
-34 1 1
-8975 46 0
-378 1 1
-70 1 1
-2476 102 0
-1754 1 0
-8426 1 0
-11986570 142000 151150
-14207 1 1
-49 1 1
-1784 12 0
-406 0 1
-1874 1 1
-33 1 1
-4795 0 2
-3686 1 1
-15 1 1
-164 0 2
-7287 5 5
-702023 150000 72796
-69 0 1
-1598 1 0
-1340 1 0
-1030 4 0
-1166 10 10
-629 27 27
-5750 1 1
-34 1 1
-3283 4 2
-496 21 1
-25 1 9
-41 1 1
-329 4 4
-9955 41 41
-10953 1 2
-1417 44 0
-911 0 17
-18270 0 1
-178429 281526 0
-34455 406 0
-58863 2 1
-1843 2 0
-14994 1 0
-12992 0 2
-2571146 0 1
-35688061 100000 108224
-29671719 0 1
-39665349 0 1
-14876089 20000 64197
-401 3 0
-1831 1 1
-61 1 1
-654 1 11
-138 28 0
-105 1 1
-25 4 0
-73 9 9
-3247 0 2
-1355 0 1
-816 21 25
-526 1 1
-60 1 1
-773 0 1
-1494 0 1
-448 44 44
-1191 0 1
-21 1 1
-596 0 1
-1582 0 1
-425 3 0
-1141 8 0
-136 744 80
-18 1 0
-4 1 0
-8 4 2
-32 1 0
-71 0 1
-385747 1 1
-110 1 1
-51 7 7
-54 15205 15205
-54 7 7
-51 1 1
-110 1 1
-5198249 1 0
-108 0 40
-65 0 80
-100 2 82
-442 1 1
-35 1 1
-119 129 9
-33 40 0
-42 1 1
-86 40 0
-1330 1 0
-1194 2 0
-11 1 1
-1773 5 0
-1623 1 1
-25 1 1
-2422 1 1
-20 1 0
-2315 1 0
-31 1 1
-1508 3 0
-50 4 0
-970 6 6
-7234 0 4
-1228 0 1
-1233 1 8
-744 16 16
-3447 1 1
-41 1 1
-3297 2 0
-1714 0 2
-2299 0 2
-2143 1 1
-18 1 1
-917 0 1
-1082 1 1
-49 1 1
-9098 4 0
-5529 1 0
-3266 8 0
-894 0 6
-3536 0 2
-4179 13 18
-1785 1 0
-1675 6 0
-1216 33000 32348
-287 109 573
-12548 30000 30000
-952154 25000 41011
-1914 0 1
-225 1 1
-57 1 1
-2910 1 0
-471 0 1
-1956 1 1
-43 1 1
-1000 92 0
-2854 0 3
-1837 0 306
-1007 0 30
-206 35 32
-217 17 17
-1525 0 8
-413 1 1
-32 2 2
-1573 12 12
-2258676
-
-chain 1437141 chr2 242951149 + 234136066 234151271 chr2 243199373 - 8712841 8728046 1459
-15205
-
-chain 1229376 chr2 242951149 + 110524471 111016063 chr2 243199373 - 132402743 134718956 53
-41 12371 12350
-33 0 23
-11 197610 197512
-5295 5 5
-190 69 19
-2195 1 0
-285 34 34
-1682 1 0
-182 11 6
-291 0 1
-1506 15 16
-146 5 5
-2050 51 51
-186 8 7
-68 7 6
-41 1 0
-306 0 1
-1545 1 0
-1334 25 24
-543 0 2
-224 17 21
-615 1 0
-208 2 0
-158 27 21
-3320 0 1
-576 0 2
-4562 0 6
-1023 0 1
-977 0 1
-3904 1 0
-827 415 28
-1508 14 13
-9571 36 36
-1393 1 1
-42 1 1
-2205 0 2
-5258 36 0
-42 2 0
-4437 2 0
-3357 1 0
-6289 0 9
-1996 1 0
-3228 0 1
-202 0 1
-2743 7 0
-24 0 5
-549 3 1
-942 0 6
-1815 8 0
-874 0 3
-4737 0 2
-852 14 18
-518 14 14
-4377 1 1
-49 1 1
-3270 1 0
-753 0 4
-240 1 0
-2391 0 1
-4745 4 0
-5752 0 2
-880 0 1
-397 1 0
-1407 0 3
-120 1 1
-89 1 1
-7011 3 0
-188 8 8
-834 5 0
-94 18 18
-3711 150112 1975291
-345 52 52
-100 8 8
-52 6 6
-650 6 6
-273 91 95
-88 90 90
-331 116 116
-66 35 35
-145 13 15
-95 6 6
-301 43 47
-444 12 12
-645 116 119
-215 31 31
-748 58 57
-212 71 71
-420 38 38
-190 4 4
-51 32 32
-65 32 32
-182 69 69
-161 17 17
-74 36 36
-170 25 25
-124 19 15
-230
-
-chain 33206 chr2 242951149 + 111008548 111015495 chr2 243199373 + 113147044 113153995 310
-112 345 345
-52 1095 1095
-15 0 4
-76 88 88
-90 331 331
-116 66 66
-35 560 560
-43 1101 1101
-116 215 215
-31 748 748
-58 212 212
-71 420 420
-38 245 245
-32 65 65
-32 182 182
-69 252 252
-36
-
-chain 15095 chr2 242951149 + 97284299 97473552 chr2 243199373 - 145080546 145267103 122
-48 13638 11732
-218 15837 15837
-37 1645 1645
-113 8336 8336
-436 100 100
-54 121645 121635
-3 25 0
-101 26915 26159
-9 0 1
-93
-
-chain 10366 chr2 242951149 + 110742577 110753868 chr2 243199373 + 113162562 113173850 1257
-34 5889 5884
-51 5290 5292
-27
-
-chain 3994 chr2 242951149 + 111050518 111050561 chr2 243199373 - 132647167 132647210 483
-43
-
-chain 3626 chr2 242951149 + 1208025 1208063 chr2 243199373 + 1217618 1217656 30090800
-38
-
-chain 3098 chr2 242951149 + 110780566 110780602 chr2 243199373 + 100698198 100698234 394442
-36
-
-chain 2548 chr2 242951149 + 89594034 89594300 chr2 243199373 - 153635204 153635700 103
-90 9 107
-22 9 0
-32 3 0
-5 0 125
-21 15 30
-5 1 0
-25 0 5
-29
-
-chain 2507 chr2 242951149 + 1207989 1208025 chr2 243199373 + 1217656 1217692 7254147
-36
-
-chain 2306 chr2 242951149 + 97446409 97446434 chr2 243199373 + 98080299 98080324 1844703
-25
-
-chain 5644665978 chr20 62435964 + 8000 62435964 chr20 63025520 + 60000 62965520 20
-26259569 1765661 3100000
-234339 1000000 150000
-4004088 0 1
-6459 0 244
-37810 0 2
-1044573 20000 50000
-9411883 2 8
-362 0 1
-11607353 0 1
-1301304 1 0
-31033 0 9
-1154 0 2
-1088 1 1
-29 1 1
-2509 0 2
-407 1 0
-40 1 1
-3787164 27050 50000
-71932 110000 50000
-694117 0 1
-1008033
-
-chain 3228730713 chr21 46944323 + 9719767 46944323 chr21 48129895 + 10697896 48119895 23
-490233 3050000 3150000
-19828060 0 1
-8789369 1199 50000
-243783 1500 1500
-1381822 1359 50000
-3437231
-
-chain 42537850 chr21_random 1679693 + 281005 1255172 chr21 48129895 + 9411193 10647896 88
-184355 50000 489372
-131056 458754 281918
-150002
-
-chain 21600281 chr21_random 1679693 + 876305 1679693 chr21 48129895 - 37585054 38304458 99
-178865 280890 346005
-315 2 2
-38 1 1
-261 1 1
-24 1 1
-157 0 325
-16 1 1
-85 1 1
-66 1 1
-330 11 11
-235 1 1
-51 1 1
-405 1 1
-26 1 1
-130 5 5
-80 1 1
-91 1 1
-20 1 1
-244 0 1
-478 1 1
-5 1 0
-13 0 1
-49 1 1
-197 10 10
-158 1 1
-57 0 1
-829 1 1
-60 1 1
-51 0 1
-584 1 0
-21 2 0
-151 20 20
-316 1 1
-16 1 1
-100 7 7
-102 1 1
-49 1 1
-125 1 0
-102 13 13
-153 20 20
-199 1 0
-35 1 1
-367 1 1
-51 1 1
-344 1 1
-101 1 1
-243 1 1
-27 1 1
-338 0 4
-166 15 15
-73 1 1
-44 1 1
-282 4 4
-67 1 1
-54 1 1
-216 1 1
-48 1 1
-76 1 1
-70 1 1
-392 1 1
-44 1 1
-65 8 9
-362 0 4
-34 1 1
-68 1 1
-57 1 0
-120 1 1
-374 1 1
-21 1 1
-121 1 1
-34 1 1
-80 1 0
-64 2 0
-162 8 8
-184 1 1
-34 1 1
-658 2 2
-52 0 4
-297 1 0
-136 1 1
-20 1 1
-905 0 1
-250 7 8
-138 0 3
-104 1 0
-42 1 1
-539 0 1
-43 4 0
-633 0 20
-353 17 17
-969 4 0
-39 3 3
-210 3 1
-188 7 7
-459 2 2
-25 1 1
-207 1 1
-55 1 1
-375 1 1
-66 1 1
-599 0 2
-395 1 1
-33 1 1
-73 1 1
-35 2 0
-275 9999 10000
-353 1 1
-26 1 1
-423 1 1
-32 1 1
-86 7 7
-197 1 1
-44 1 1
-96 1 1
-77 7 0
-247 0 2
-77 1 1
-425 13 1
-32 1 1
-65 1 1
-217 3 2
-115 1 1
-33 1 1
-268 1 0
-959 1 1
-63 1 1
-93 5 5
-185 1 1
-31 1 1
-944 12 12
-413 1 1
-92 1 1
-276 1 1
-35 1 1
-500 1 1
-31 149436 9
-158069
-
-chain 14432948 chr21_random 1679693 + 78709 231005 chr21 48129895 + 9882623 10034920 205
-77296 0 1
-75000
-
-chain 7807601 chr21_random 1679693 + 1362161 1471624 chr1 249250621 - 105758025 105867745 293
-77 11427 11419
-174 5 5
-857 64 64
-2170 0 2
-621 1 1
-26 1 1
-4365 0 1
-155 0 1
-452 0 4
-941 0 4
-403 1 1
-45 1 1
-534 86 86
-2198 0 1
-303 2 0
-5470 6 6
-845 1 1
-45 1 1
-221 6 0
-321 1 1
-44 1 1
-354 1 0
-374 131 130
-577 6 5
-263 17 16
-207 0 2
-1746 14 14
-3223 1 1
-46 4 4
-1479 1 1
-46 1 1
-383 0 3
-44 1 1
-2724 67 67
-47 145 145
-350 116 116
-138 0 1
-1 65 65
-796 17 17
-645 1 0
-24 1 1
-1318 1 0
-687 1 1
-41 1 1
-2292 1 1
-37 1 1
-589 1 1
-37 1 0
-670 13 13
-357 4 0
-2667 3 0
-1941 1 1
-31 1 1
-1538 54 54
-64 166 166
-120 226 226
-46 14 0
-14 155 155
-92 54 54
-26 55 55
-98 131 131
-36 1 1
-76 391 391
-44 294 294
-37 813 813
-35 219 219
-898 1 1
-19 1 1
-213 12 12
-1926 1 1
-21 1 1
-4561 1 1
-28 1 1
-8361 1 1
-43 1 1
-429 211 492
-3095 0 1
-3873 1 1
-43 5 5
-3785 171 171
-65 122 122
-70 116 116
-29 459 459
-36 352 352
-39 93 93
-39 190 190
-41 1783 1784
-35 509 509
-27 394 394
-57 834 834
-58 10 10
-17 758 760
-41 0 4
-82 194 194
-60 543 543
-31 58 58
-46 607 607
-34 98 98
-31 1 1
-38 563 562
-135 1980 1976
-48 370 370
-42 515 515
-49 456 456
-3137 0 1
-2483 1 0
-357 1 1
-49 1 1
-1181 1 0
-885 1 0
-86
-
-chain 3630496 chr21_random 1679693 + 696416 1463441 chr21 48129895 + 9645548 10215976 235
-129889 481231 310631
-225 46 51
-383 6 6
-73 18 18
-200 18 39
-236 63 68
-123 340 365
-57 300 259
-51 138 138
-71 55 55
-60 152 152
-51 100 103
-61 358 357
-85 1906 236
-88 157 153
-56 39 39
-73 20146 20047
-67 1 0
-57 154 154
-59 940 953
-61 205 205
-60 46 46
-122 149 149
-53 64 56
-210 16 16
-209 1 0
-214 29 29
-71 69616 76139
-67 47 47
-145 350 354
-116 139 135
-65 13718 10425
-54 64 64
-166 120 120
-225 75 75
-74 14 13
-67 92 92
-54 26 26
-55 98 98
-127 117 117
-173 16 15
-202 44 44
-198 21 17
-75 37 37
-442 18 18
-353 35 35
-219 27532 0
-105 0 3
-66 65 65
-122 70 70
-116 29 29
-459 36 36
-278 17 17
-57 39 40
-93 39 39
-190 41 41
-285 16 20
-859 22 37
-176 4 4
-183 32 32
-206 35 36
-509 27 27
-394 57 56
-116 5 5
-596 1 0
-116 85 85
-54 0 1
-119 0 2
-585 124 127
-74 10 11
-109 60 60
-82 22 22
-439 31 31
-58 46 46
-106 21 22
-186 15 14
-279 34 34
-98 70 67
-166 1 0
-396 135 135
-1551 12 12
-90 0 3
-69 4 4
-48 3 0
-203 48 48
-370 42 42
-139 14 53
-362 49 49
-456
-
-chain 2630212 chr21_random 1679693 + 936 28709 chr21 48129895 + 44682664 44710462 1048
-3985 6 7
-8941 0 30
-3327 1 1
-74 1 1
-859 22 22
-89 70 70
-489 14 3
-11 2 1
-10 10 0
-10 0 1
-31 1 27
-556 3 0
-128 0 1
-358 1 1
-45 1 1
-1712 8 0
-6545 32 31
-431
-
-chain 517534 chr21_random 1679693 + 1332563 1373665 chr4_gl000194_random 191469 - 21469 62943 261
-130 2 2
-53 1 1
-139 1 1
-60 1 1
-321 125 125
-72 1 1
-81 59 59
-248 22 23
-250 13 13
-407 61 61
-205 60 60
-46 122 122
-149 53 53
-14 0 8
-50 650 650
-29 19697 20073
-100 1 4
-106 2 2
-158 1 1
-89 1 1
-10 1 1
-65 1 1
-48 1 1
-156 1 1
-61 1 1
-156 1 1
-81 1 1
-522 16 16
-377 22 22
-358 1 1
-17 1 1
-141 1 0
-29 0 1
-16 1 1
-105 1 1
-49 2 1
-63 1 1
-32 1 0
-7 1 1
-349 1 2
-102 1 1
-146 1 0
-93 3 0
-149 1 1
-86 1 1
-220 1 1
-111 1 1
-195 19 19
-108 1 1
-79 6 1
-98 0 1
-29 2 2
-98 1 1
-125 1 1
-196 1 1
-52 1 1
-767 1 1
-68 3 3
-70 1 1
-66 1 1
-331 1 1
-22 1 1
-60 77 77
-437 1 1
-61 1 1
-134 1 1
-48 4 2
-26 0 2
-79 1 1
-16 1 1
-77 1 1
-24 1 1
-176 1 1
-33 1 1
-61 0 4
-141 1 1
-17 1 1
-232 1 1
-42 1 1
-439 2 1
-31 1 1
-55 1 0
-181 1 1
-77 4 4
-145 4 5
-22 1 1
-159 1 6
-53 1 1
-63 1 1
-67 6 6
-71 1 1
-25 1 1
-103 6 6
-303 6513 6492
-211 1 1
-87 1 1
-170 2 2
-36 0 6
-361 1 1
-58 1 1
-292 10 10
-201 1 1
-35
-
-chain 353583 chr21_random 1679693 + 1323386 1332563 chrUn_gl000218 161147 - 0 9198 304
-693 1 1
-28 4 0
-425 51 51
-874 2 4
-421 1 1
-23 1 1
-299 2 1
-20 3 3
-88 1 1
-35 1 1
-283 4 4
-42 4 4
-719 14 14
-181 1 1
-41 1 1
-1010 1 1
-59 1 1
-478 1 1
-45 1 0
-78 1 1
-315 1 1
-22 1 1
-342 1 1
-27 1 1
-716 0 25
-83 1 1
-44 1 1
-218 6 6
-142 1 1
-178 1 1
-220 1 1
-35 1 1
-55 1 1
-44 1 1
-143 1 1
-80 1 1
-85 1 1
-46 1 1
-169 1 1
-56 1 1
-94 1 1
-51 1 1
-48
-
-chain 153763 chr21_random 1679693 + 1307498 1317523 chr1 249250621 + 142541121 142549427 248494
-38 225 225
-46 934 934
-63 240 230
-50 653 627
-57 559 562
-4 186 183
-51 101 101
-16 235 235
-70 1848 174
-58 193 194
-3 255 257
-97 40 40
-164 35 35
-167 27 27
-82 213 218
-106 172 171
-55 274 274
-125 214 209
-158 123 124
-94 169 169
-69 430 425
-66 871 864
-95 213 213
-81
-
-chain 88175 chr21_random 1679693 + 0 28278 chr21_gl000210_random 27682 - 0 27251 1050
-107 675 0
-154 27310 26958
-32
-
-chain 46308 chr21_random 1679693 + 1305249 1307368 chr21 48129895 - 38147885 38150014 728191
-46 171 171
-69 165 166
-32 292 292
-34 184 184
-26 73 73
-23 117 117
-57 54 54
-7 16 25
-68 78 78
-23 242 242
-53 230 230
-59
-
-chain 40072 chr21_random 1679693 + 1311066 1311528 chr3 198022430 + 38430454 38430916 3283349
-95 1 1
-47 1 1
-177 1 1
-41 1 1
-98
-
-chain 25551 chr21_random 1679693 + 1316263 1317134 chr21 48129895 + 10022171 10023044 3443865
-97 94 94
-87 148 147
-94 340 343
-11
-
-chain 20886 chr21_random 1679693 + 1305172 1307309 chrY 59373566 - 45989384 45991522 2022
-77 46 46
-64 50 50
-57 69 70
-165 32 32
-86 11 11
-195 34 34
-184 122 122
-117 57 57
-54 91 91
-50 51 51
-242 61 61
-68 9 9
-145
-
-chain 10360 chr21_random 1679693 + 1384481 1394861 chr21 48129895 - 38158677 38169079 831
-56 10224 10246
-100
-
-chain 9106 chr21_random 1679693 + 1316541 1317639 chr2 243199373 + 56015784 56016880 4408555
-45 37 37
-66 97 95
-66 672 672
-115
-
-chain 7814 chr21_random 1679693 + 1312477 1312593 chr8 146364022 + 34952530 34952621 21041862
-26 37 12
-53
-
-chain 6987 chr21_random 1679693 + 1305359 1306761 chr1 249250621 - 105769657 105771059 738748
-38 5 5
-7 1324 1324
-28
-
-chain 3478 chr21_random 1679693 + 1309705 1309742 chrX 155270560 - 92499801 92499838 30075241
-37
-
-chain 2939 chr21_random 1679693 + 1312274 1312311 chr1 249250621 - 217601682 217601719 16037052
-37
-
-chain 2906 chr21_random 1679693 + 1394861 1394892 chrUn_gl000247 36422 - 2105 2136 848
-31
-
-chain 2805 chr21_random 1679693 + 1309675 1309705 chr4 191154276 - 16268024 16268054 28769751
-30
-
-chain 2788 chr21_random 1679693 + 1374701 1374765 chr4_gl000194_random 191469 - 63980 64044 1175
-9 36 36
-19
-
-chain 2571 chr21_random 1679693 + 1317411 1317442 chr20 63025520 - 39738360 39738391 24462467
-31
-
-chain 2324 chr21_random 1679693 + 1311588 1311646 chr2 243199373 + 3637936 3637994 8156424
-58
-
-chain 1980 chr21_random 1679693 + 1440240 1440313 chr1 249250621 + 142677559 142677632 922
-73
-
-chain 1679 chr21_random 1679693 + 1316387 1316422 chr13 115169878 + 41439086 41439121 11997585
-35
-
-chain 1437 chr21_random 1679693 + 1316422 1316454 chr3 198022430 + 119282439 119282471 8460363
-32
-
-chain 1151 chr21_random 1679693 + 1312216 1312274 chr13 115169878 + 46060123 46060181 10002138
-58
-
-chain 1007 chr21_random 1679693 + 1312144 1312195 chr17 81195210 + 33522637 33522688 8813060
-51
-
-chain 810 chr21_random 1679693 + 1306268 1306301 chr4 191154276 - 63157613 63157646 21715000
-33
-
-chain 762 chr21_random 1679693 + 1312422 1312477 chr7 159138663 + 153013126 153013181 10840208
-55
-
-chain 732 chr21_random 1679693 + 1312000 1312066 chr7 159138663 - 102920653 102920719 25474729
-66
-
-chain 561 chr21_random 1679693 + 18264 18311 chr21 48129895 + 44700101 44700148 25859698
-47
-
-chain 3320960322 chr22 49691432 + 14430000 49591432 chr22 51304566 + 16050000 51244566 22
-647850 150000 150000
-3661581 50000 100000
-15278435 0 18
-293 0 36
-1410 1 1
-46 1 1
-6626947 2 4
-1759 1 1
-43 1 1
-1367363 12000 10615
-7856 4 0
-809336 0 20
-6307 20 0
-6702 50000 2669
-4247727 10618 0
-1558 0 2719
-35231 0 131
-12647 4 0
-45594 85 9
-19562 0 506
-165501 5 7
-1103946 16700 60575
-644 0 2
-319796 1600 1155
-17927 19763 15469
-464566
-
-chain 6025887 chr22_h2_hap1 63661 + 0 63661 chr22 51304566 + 42594964 42658568 527
-748 1 0
-260 4 0
-675 1 0
-4844 0 2
-10592 8 0
-3276 29 0
-2384 10 0
-2795 0 2
-464 1 0
-3865 1 0
-1777 1 0
-1286 0 2
-875 1 0
-2336 1 0
-4337 1 0
-2724 0 3
-1087 6 0
-7154 0 1
-1045 2 0
-11070
-
-chain 15737781 chr22_random 257318 + 90752 257318 chrUn_gl000211 166566 + 0 166566 187
-166566
-
-chain 3641362 chr22_random 257318 + 7 38789 chr11 135006516 - 18284691 18323344 804
-2900 3 1
-66 1 1
-55 1 1
-3449 0 1
-1785 1 1
-37 1 1
-178 1 0
-852 0 1
-2329 2 0
-4939 1 0
-1557 1 1
-30 1 1
-1005 1 0
-622 16 0
-39 0 1
-42 0 22
-755 1 1
-30 1 1
-952 1 1
-26 1 1
-141 18 17
-1110 2 0
-1529 1 1
-22 1 1
-399 1 1
-33 1 1
-1369 20 30
-3959 0 4
-1144 1 0
-1032 27 25
-8 23 0
-56 24 0
-51 0 9
-11 1 57
-34 4 4
-7 134 0
-296 26 0
-25 1 1
-2452 0 5
-19 1 1
-231 1 0
-327 1 0
-962 1 1
-22 1 1
-1571
-
-chain 109494 chr22_random 257318 + 39517 40750 chr22 51304566 - 30977735 30979001 1172425
-166 5 5
-133 3 3
-48 1 1
-297 0 33
-234 1 1
-58 4 4
-283
-
-chain 19094 chr22_random 257318 + 39007 39213 chr22 51304566 - 29625864 29626070 11204980
-206
-
-chain 8587 chr22_random 257318 + 39415 39517 chr22 51304566 - 29782769 29782871 2027258
-50 48 48
-4
-
-chain 3763 chr22_random 257318 + 39465 39513 chr22 51304566 - 30978529 30978577 2726523
-48
-
-chain 17719073 chr2_random 185571 + 0 185498 chr2 243199373 + 242522204 242710000 158
-43034 21 22
-16724 1 0
-52199 0 669
-3059 0 4
-14500 1 0
-409 1 1
-22 1 1
-2039 1 0
-809 0 1
-2041 0 4
-2258 6 6
-4179 12 13
-1973 1 1
-21 1 1
-1855 1 1
-37 2 2
-4315 0 1
-1584 14 0
-281 0 2
-78 1 1
-1497 9 0
-237 2 1
-826 4 0
-21273 4 0
-6716 0 1650
-3449
-
-chain 18404389309 chr3 199501827 + 35000 199446827 chr3 198022430 + 60000 197962430 3
-13552792 1 0
-585083 1 0
-2092 74 72
-31067262 1 0
-90 0 1
-5628461 15 0
-788 0 1
-3676 2 0
-35 1 1
-4682 0 1
-1295 5 0
-437 42 53
-326 2 0
-3309 1 1
-40 1 1
-998 3 0
-3584 0 5
-930 7 5
-845 1 1
-28 1 2
-303 1 0
-509 5 0
-2291 6 6
-2789 0 1
-2541 9692 9690
-949 4 4
-35 1 1
-2874 1 0
-6717 1 0
-2823 0 1
-704 4 0
-5142 0 1
-2490 10 10
-162 7 7
-6308 15 0
-15177535 260003 152352
-2532 0 1
-24209179 4400000 3000000
-60453438 4 0
-40076811 20000 20999
-8195 1 1
-44 1 1
-1408 1 1
-33 1 1
-172 4 3
-25 1 1
-538 13 13
-173 1 1
-27 1 1
-636 1 1
-28 1 1
-470 3 3
-112 1 1
-375 1 1
-26 0 26
-106 0 78
-72 9 6
-12 3 29
-79 5 262
-56 1 1
-20 1 1
-815 43 43
-457 1 1
-49 0 18
-509 3 4
-23 1 1
-391 1 1
-44 1 1
-1270 4 0
-40 1 1
-264 27 31
-2416 2 0
-4377 13 13
-736 1 1
-47 1 1
-1416 1 1
-20 1 1
-1020 1 1
-25 1 1
-482 0 5
-716 0 1
-1697 1 1
-29 1 1
-1270261 27000 23108
-40930 0 1
-17455 1 1
-28 4 4
-45 491 0
-1669 58 0
-18 3 61
-54863 16 53
-7653 6 0
-3 99 0
-170 30 0
-25 0 30
-210 0 45
-359 0 915
-5980 256 640
-1363 1 1
-37 1 1
-7958 1 0
-372 1 0
-2442058
-
-chain 572461 chr3 199501827 + 50900356 50910048 chr3 198022430 - 147087402 147097092 2111
-52 1 6
-5886 1 0
-2586 6 0
-1160
-
-chain 14997 chr3 199501827 + 196923229 196923617 chr3 198022430 + 195437554 195437811 3659243
-77 131 0
-180
-
-chain 6146 chr3 199501827 + 196987930 196988205 chr3 198022430 + 195502296 195502751 2529960
-74 171 141
-23 2 212
-5
-
-chain 4201 chr3 199501827 + 196923126 196923228 chr3 198022430 + 195438036 195438138 6236935
-102
-
-chain 2082 chr3 199501827 + 196994845 196994975 chr3 198022430 + 195509346 195509572 2249717
-55 18 114
-57
-
-chain 20970321 chr3_random 749256 + 196010 556188 chr3 198022430 - 121623404 130096441 129
-131258 0 1
-41217 50000 8162858
-137703
-
-chain 13779918 chr3_random 749256 + 0 146010 chr3 198022430 - 77602115 77748060 219
-64144 1 0
-1191 0 1
-633 0 1
-4651 29 21
-5147 0 1
-947 14 0
-64 56 0
-55 0 2
-2421 0 15
-741 9 0
-371 6 4
-554 1 0
-5424 0 1
-4074 1 1
-44 1 1
-3065 0 1
-2772 1 1
-36 1 1
-15950 1 0
-2351 0 2
-5999 1 0
-17825 0 13
-74 1 1
-367 1 1
-47 1 1
-2084 2 0
-288 0 3
-744 1 0
-131 0 1
-465 1 1
-29 1 1
-659 10 0
-830 0 3
-262 3 0
-1428
-
-chain 13528802 chr3_random 749256 + 606188 749256 chr3 198022430 + 46352896 46495976 221
-8517 0 10
-20860 0 6
-16120 0 1
-4148 7 6
-745 7 6
-517 6 0
-907 5 5
-1382 4 0
-2730 0 1
-1143 36 36
-457 13 17
-1748 1 1
-48 1 1
-954 0 2
-767 1 4
-7353 0 8
-4950 0 12
-13338 0 1
-4685 1 1
-21 1 1
-1414 3 0
-4158 23 23
-5081 0 1
-14097 1 1
-49 1 1
-770 16 16
-424 1 1
-17 1 1
-244 1 1
-23 1 1
-1462 12 0
-2048 14 0
-4573 1 0
-3856 2 0
-754 0 8
-7304 1 0
-5243
-
-chain 17653370240 chr4 191273063 + 0 191263063 chr4 191154276 + 10000 191029082 4
-1413146 51000 71672
-5369 5 6
-65 1 1
-67 1 1
-425 1 1
-32 1 1
-175 1 1
-34 1 1
-5092 1 1
-46 1 1
-1396 15 15
-1446 0 1
-5135 1 0
-586 1 1
-38 1 1
-10 0 21
-1587 0 6
-205 0 3
-97 6 0
-177 0 9
-4059 1 1
-71 1 1
-1413 83 1
-51 7 7
-105 7 7
-67 41 0
-67 42 1
-55 41 0
-25 41 0
-3244 558 0
-64 93 0
-93 558 0
-907 0 2
-1101 55 0
-3473 15 15
-1167 3 0
-25 0 29
-135 29 0
-5074 1 1
-42 1 1
-1825 14 14
-1992 0 3
-23 1 1
-4171 6 6
-796 0 165
-196 0 99
-87 0 33
-190 6 8
-107 2 2
-21 0 2
-62 1 68
-32 14 15
-81 18 18
-55 0 100
-17 1 1
-222 2 169
-51 0 35
-3289 18 18
-298 0 1
-373 0 1
-2965 1 1
-28 0 23
-1704 0 38
-114 0 38
-53 7 44
-119 77 0
-269 1 1
-70 1 1
-2000 23 33
-2400 1 1
-94 1 1
-6002 18 18
-776 1 0
-369 16 16
-418 51 0
-53 1 27
-2181 1 4
-57 1 1
-1973 10 0
-4184 11 11
-1594 0 18
-2038 0 109
-4332 0 7
-49 0 4
-1465 3 1
-4156 2 0
-5455 3 2
-129 4 4
-9082 0 1
-786 20 20
-1506 0 1
-252 8 7
-17512 50 1
-56 1 0
-2474 69 52
-69 0 30
-60 16 0
-19 15 0
-40 1 1
-138 16 0
-74 5 51
-3386 0 1
-968 0 4
-1624 11 11
-1065 0 3
-2935 8 0
-2312 0 181
-2300 1 0
-1641 6 1
-1955 0 1
-68 1 1
-347 1 1
-40 1 1
-1553 6 0
-678 16 16
-92 0 33
-390 4 0
-1147 0 1
-1948 4 4
-4296 18 18
-955 1 1
-47 1 1
-1555 1 0
-2251535 81122 0
-145 1 1
-48 1 1
-718 1 0
-2789 1 1
-27 1 1
-1601 4 0
-1048 39 39
-820 0 2
-20 6 0
-28 2 0
-76 12 18
-28 1 0
-11 9 3
-1772 0 6
-22 1 1
-946 1 1
-24 1 1
-1245 1 0
-3231 1 1
-41 1 1
-1652 20 20
-11270 3 0
-2704 1 1
-41 1 1
-1812 5 6
-1477 0 11
-3790 4 0
-2187 1 1
-48 1 1
-1704 1 1
-73 1 1
-2265 1 1
-10 1 1
-553 1 1
-49 1 1
-67 1 1
-33 1 1
-3932 5 0
-18 1 0
-780 0 1
-1260 0 1
-4203 0 25
-863 14 14
-7114 1 1
-70 1 1
-169 0 1
-43 1 1
-145 1 1
-39 0 3
-8 1 1
-753 0 1
-2255 1 1
-21 1 1
-1605 1 1
-19 2 1
-392 1 1
-29 1 0
-3673 1 0
-145 14 14
-39 0 1
-1246 0 1
-2302 1 0
-1554 9 9
-4537 0 1
-1064 2 0
-2051 1 0
-1130 0 2
-164 1 0
-1972 0 1
-18 3 3
-2597 1 1
-46 3 3
-196 1 1
-17 1 1
-60 4 4
-187 4 4
-46 1 1
-692 1 0
-3920 3 3
-15 1 1
-486 14 14
-1709 8 0
-169 1 0
-597 1 1
-18 0 7
-3423937 0 1
-1295496 1 1
-26 1 1
-760 150000 591802
-22468468 1 1
-27 1 1
-2592 0 2
-33 1 1
-2065 3 0
-1050 11 11
-1046 3 9
-52 11 11
-3200 1 0
-906 1 0
-1644 6 0
-1180 0 1
-475 0 5
-2556 26 22
-351 0 1
-1716 71000 36200
-976586 59000 26528
-7701 0 4
-9296 0 1
-1862 1 0
-3316 7 3
-1131 0 1
-1795 1 0
-569 1 0
-2895 44 44
-458 3 0
-5371 1 0
-6774 0 2
-2504 0 2
-1247 1 1
-45 1 1
-2415 17 17
-8215 1 1
-18 1 1
-272 10 10
-420 1 1
-34 1 1
-7961 4 0
-1973 1 1
-45 1 0
-529 1 0
-603 0 1
-18 1 1
-621 4 12
-67 2 0
-18 34 0
-516 0 1
-1400 38 41
-3786 0 1
-228 3 0
-1026 1 1
-49 1 1
-3336 0 3
-951 1 1
-77 2 1
-441 1 2
-1833 9 9
-301 5 5
-2787 17 17
-1747 1 0
-3040 2 9
-81 10 10
-86 2 0
-7354949 20000 1606
-1681 16 30
-13957 0 8
-1947 0 3
-1255 1 1
-38 0 1
-1788 12 17
-1045 6 0
-1327 0 1
-5775 1 1
-18 1 1
-1933 1 0
-1716 13 13
-255 1 0
-124 0 3
-792 0 5
-1521 1 1
-64 1 1
-9005617 150000 150000
-171176 3000000 3000000
-7074452 53320 65431
-1937 0 1
-2845 2 0
-1387 0 1
-114 1 0
-2382 0 4
-68 6 6
-60 4 0
-20 0 1
-93 0 51
-9781584 351994 0
-1909446 184275 0
-3919546 13 13
-435 23 23
-838 0 1
-807 6 6
-74 1 1
-43 1 1
-652 30000 29839
-13847966 0 1
-14069801 2 0
-8504 0 1
-32266 8 0
-12729 0 2
-35327 12 14
-1503 1 0
-1334 1 0
-759 0 1
-7479 34 34
-2523 7 1
-9912 18 17
-2523 1 0
-1321 0 1
-3684 18 18
-5282 2 0
-5505 20 20
-9694 6 6
-22003 9 0
-578 0 1
-5166 2 0
-92208 2 5
-8 1 0
-5 0 2
-113 4 0
-845 6 7
-2247 3 1
-3770 0 1
-5719 0 2
-2511 0 1
-1557 0 1
-5812 0 1
-3607 0 1
-7405 1 0
-11075 0 1
-2794 1 0
-2340 1 0
-429 0 1
-522 2 0
-2397 5 0
-371 11 0
-1376 1 0
-2416 8 0
-210 1 1
-20 1 1
-5104 1 1
-20 1 1
-525 2 0
-836 0 1
-2094 1 0
-2213 3 0
-327 9 6
-2593 1 1
-57 1 1
-1618 0 1
-1400 4 0
-254 0 2
-93 10 0
-754 0 6
-193 0 1
-2378 0 1
-1753 3 0
-1903 0 4
-29 1 1
-1136 14 14
-2452 4 0
-3622 31 3
-456 14 14
-1076 7 8
-68 1 1
-20 1 1
-145 1 1
-68 1 0
-12 0 1
-10 0 1
-11 1 0
-35 1 0
-5 0 1
-11 1 2
-32 6 7
-35 1 0
-8722 1 0
-888 0 4
-456 3 0
-45 0 1
-151 13 13
-756 0 1
-203 8 7
-140 1 1
-20 1 1
-308 5 0
-1020 0 1
-1258 0 1
-160 0 2
-1411 1 1
-22 1 1
-1180 12 12
-4521 0 2
-1155 27 0
-4954 3 0
-1392 1 1
-47 1 1
-3854 2 1
-130 1 0
-2633 2 0
-3053 12 13
-2308 0 1
-1747 0 45
-732 2 0
-1336 9 11
-3898 0 6
-437 1 0
-981 0 1
-1326 0 1
-382 4 0
-1081 10 0
-81 1 1
-142 0 2
-5452 29 29
-495 1 1
-26 1 1
-485 0 1
-525 0 4
-36 0 6
-3945 347 0
-1034 1 1
-27 1 1
-60 2 0
-2581 3 0
-3880 0 4
-1792 0 1
-20 1 1
-356 1 0
-4244 5 5
-36 1 1
-2232 2 2
-42 1 1
-4462 0 2
-1611 1 0
-1290 0 2
-110 1 0
-1466 0 1
-357 3 0
-850 12 0
-13547766 0 1
-3724943 2 0
-46473408 0 1
-1696 1 1
-28 1 1
-1629 0 4
-666 4 0
-13464 30000 12874
-8520008 2 0
-1107 1 1
-15 1 1
-1892 0 4
-6798 0 2
-1793 1 1
-25 0 3
-422 389 0
-786 2 0
-545 0 2
-54 1 0
-143 1 1
-39 1 1
-89 1 1
-29 1 0
-171 1 1
-46 1 0
-192 1 1
-33 1 1
-2580 0 1
-107 1 1
-29 1 1
-218 1 0
-175 6 5
-1407 1 1
-52 1 1
-8851 1 0
-14427 4 0
-1737 22 0
-5806 1 0
-1115 1 1
-29 0 2
-3395 0 1
-3164 0 2
-522 1 0
-24 1 1
-658 4 0
-5724 9 9
-1209 0 1
-5380 1 0
-97 1 0
-854 4 0
-78 5 11
-2728 6 7
-3754 17 13
-1363 1 0
-1025 1 0
-1811 0 1
-7507 0 4
-1184 3 0
-763 1 0
-797 3 0
-293 2 0
-2488 0 1
-335 0 1
-9959 1 0
-3255 1 0
-1322 0 1
-8118 2 0
-2908 49 49
-369 2 0
-632 1 0
-63 0 5
-3008 0 1
-9582 0 1
-14742673 0 3013
-39686
-
-chain 945825 chr4 191273063 + 69381892 69391896 chr4 191154276 + 69230000 69240000 2911
-2225 1 0
-4917 1 0
-2807 2 0
-51
-
-chain 941684 chr4 191273063 + 69471941 69481941 chr4 191154276 + 69320000 69330000 3076
-3521 0 1
-4784 1 0
-1694
-
-chain 941274 chr4 191273063 + 69614595 69624595 chr4 191154276 + 69580000 69590000 3093
-10000
-
-chain 940419 chr4 191273063 + 69564606 69574607 chr4 191154276 + 69530000 69540000 3129
-3216 5 5
-134 0 1
-5676 2 0
-968
-
-chain 939146 chr4 191273063 + 69534617 69544617 chr4 191154276 + 69500000 69510000 3182
-387 6 6
-9607
-
-chain 939091 chr4 191273063 + 69481941 69491934 chr4 191154276 + 69330000 69340000 3184
-8138 0 4
-1546 0 3
-309
-
-chain 938726 chr4 191273063 + 69461942 69471941 chr4 191154276 + 69310000 69320000 3193
-130 0 1
-9869
-
-chain 936769 chr4 191273063 + 69604595 69614595 chr4 191154276 + 69570000 69580000 3285
-2900 25 25
-7075
-
-chain 936653 chr4 191273063 + 69421914 69431904 chr4 191154276 + 69270000 69280000 3293
-6388 14 14
-338 29 29
-266 0 1
-2309 1 3
-55 1 0
-83 0 8
-506
-
-chain 936357 chr4 191273063 + 69391896 69401898 chr4 191154276 + 69240000 69250000 3304
-2367 1 0
-2329 0 1
-795 23 23
-2819 2 0
-1666
-
-chain 935200 chr4 191273063 + 69441943 69451948 chr4 191154276 + 69290000 69300000 3343
-1203 4 0
-488 57 57
-7133 2 1
-310 1 0
-551 0 1
-256
-
-chain 934799 chr4 191273063 + 69544617 69554606 chr4 191154276 + 69510000 69520000 3366
-1296 39 39
-1112 1 0
-204 1 0
-2340 0 12
-1710 0 1
-3286
-
-chain 933839 chr4 191273063 + 69584607 69594595 chr4 191154276 + 69550000 69560000 3402
-417 3 0
-966 1 0
-2053 0 1
-1784 5 8
-284 0 12
-4475
-
-chain 932655 chr4 191273063 + 69594595 69604545 chr4 191154276 + 69560000 69569950 3440
-8695 26 26
-1229
-
-chain 930772 chr4 191273063 + 69451948 69461942 chr4 191154276 + 69300000 69310000 3507
-1068 0 1
-1437 25 27
-806 0 4
-5337 50 50
-300 1 0
-970
-
-chain 928519 chr4 191273063 + 69411919 69421914 chr4 191154276 + 69260000 69270000 3571
-62 32 32
-801 11 11
-3595 38 38
-941 54 59
-4461
-
-chain 928371 chr4 191273063 + 69511937 69521941 chr4 191154276 + 69360000 69370000 3579
-6433 60 60
-335 10 6
-239 10 10
-2917
-
-chain 925594 chr4 191273063 + 69554606 69564602 chr4 191154276 + 69520000 69529997 3671
-2109 0 1
-4421 81 81
-1599 22 22
-1764
-
-chain 922960 chr4 191273063 + 69501928 69511937 chr4 191154276 + 69350000 69360000 3756
-714 8 8
-423 18 18
-882 33 33
-952 22 22
-607 1 0
-196 64 64
-495 3 0
-2055 2 0
-548 3 0
-2983
-
-chain 915200 chr4 191273063 + 69491934 69501928 chr4 191154276 + 69340000 69350000 3933
-1036 10 10
-2821 5 0
-53 40 40
-209 3 0
-3718 11 0
-421 0 23
-332 11 11
-292 0 2
-432 23 23
-159 20 20
-115 20 20
-263
-
-chain 911203 chr4 191273063 + 69431904 69441943 chr4 191154276 + 69280000 69290000 4026
-364 6 5
-212 4 0
-2445 40 15
-377 30 30
-1126 60 60
-262 8 6
-3222 145 138
-1738
-
-chain 903419 chr4 191273063 + 69401898 69411919 chr4 191154276 + 69250000 69260000 4208
-1051 52 52
-1007 0 1
-319 27 26
-154 98 97
-145 40 40
-512 23 0
-355 5 5
-126 19 19
-128 49 49
-67 0 1
-3337 0 2
-1729 5 5
-773
-
-chain 895926 chr4 191273063 + 69574644 69584607 chr4 191154276 + 69540037 69550000 4357
-3368 220 220
-1524 84 84
-1558 19 19
-889 41 41
-1592 43 43
-625
-
-chain 866339 chr4 191273063 + 69524748 69534617 chr4 191154276 + 69490119 69500000 4930
-190 50 50
-59 111 111
-51 7 7
-78 59 59
-58 121 121
-57 39 39
-70 0 1
-1558 108 108
-737 24 24
-3582 0 1
-84 0 10
-2826
-
-chain 659008 chr4 191273063 + 71711854 71718864 chr4 191154276 + 71492990 71500000 7936
-7010
-
-chain 608986 chr4 191273063 + 69375441 69381892 chr4 191154276 + 69223549 69230000 8701
-135 1 0
-2166 0 1
-4149
-
-chain 248590 chr4 191273063 + 69521941 69527313 chr4 191154276 + 69370000 69375377 111030
-2807 190 190
-50 59 59
-111 136 136
-59 58 58
-121 57 57
-39 1628 1633
-57
-
-chain 214386 chr4 191273063 + 71534589 71536854 chr4 191154276 + 71500000 71502265 534073
-2265
-
-chain 96900 chr4 191273063 + 3963456 3964475 chr4 191154276 + 3912520 3913539 1319679
-1019
-
-chain 52181 chr4 191273063 + 69624595 69625143 chr4 191154276 + 69590000 69590548 2441389
-548
-
-chain 20814 chr4 191273063 + 1495708 1495926 chr4 191154276 + 1526075 1526293 9826122
-218
-
-chain 8858 chr4 191273063 + 1496845 1496937 chr4 191154276 + 1526189 1526281 25171661
-92
-
-chain 8858 chr4 191273063 + 1496752 1496844 chr4 191154276 + 1526189 1526281 25171662
-92
-
-chain 8858 chr4 191273063 + 1496566 1496658 chr4 191154276 + 1526189 1526281 25171663
-92
-
-chain 7802 chr4 191273063 + 1492030 1492276 chr4 191154276 + 1522531 1522736 2805154
-25 83 42
-23 15 15
-4 55 55
-41
-
-chain 7606 chr4 191273063 + 69578098 69578232 chr12 133851895 + 88986938 88987072 9526361
-134
-
-chain 7510 chr4 191273063 + 1496208 1496286 chr4 191154276 + 1526203 1526281 25171660
-78
-
-chain 7439 chr4 191273063 + 1527942 1528019 chr4 191154276 + 1557568 1557645 18158883
-77
-
-chain 7376 chr4 191273063 + 1496452 1496529 chr4 191154276 + 1526075 1526152 27495831
-77
-
-chain 6986 chr4 191273063 + 59479326 59479400 chr7 159138663 + 119297971 119298045 28268313
-74
-
-chain 6131 chr4 191273063 + 1496080 1496144 chr4 191154276 + 1526075 1526139 27495827
-64
-
-chain 5599 chr4 191273063 + 1495650 1495708 chr4 191154276 + 1526203 1526261 27226300
-58
-
-chain 5460 chr4 191273063 + 1496658 1496715 chr4 191154276 + 1526095 1526152 27495830
-57
-
-chain 4356 chr4 191273063 + 1498960 1499009 chr4 191154276 + 1528103 1528152 18458745
-49
-
-chain 4121 chr4 191273063 + 69578012 69578069 chr3 198022430 - 95182224 95182281 17792812
-57
-
-chain 3000 chr4 191273063 + 1495929 1496022 chr4 191154276 + 1526110 1526203 11256589
-93
-
-chain 2961 chr4 191273063 + 69443663 69443695 chr4 191154276 - 68628109 68628141 14494983
-32
-
-chain 2485 chr4 191273063 + 1503833 1503862 chr4 191154276 + 1532970 1532999 23156792
-29
-
-chain 2401 chr4 191273063 + 1492301 1492331 chr4 191154276 + 1522679 1522709 5335388
-30
-
-chain 2012 chr4 191273063 + 1496731 1496752 chr4 191154276 + 1526075 1526096 27495829
-21
-
-chain 1744 chr4 191273063 + 1597414 1597448 chr4 191154276 + 1627062 1627096 3575887
-34
-
-chain 1461 chr4 191273063 + 69579763 69579840 chr5 180915260 + 121968423 121968500 3935628
-77
-
-chain 1332 chr4 191273063 + 69545913 69545943 chr11 135006516 - 130984886 130984916 21069914
-30
-
-chain 909 chr4 191273063 + 69582306 69582346 chr3 198022430 - 10790236 10790276 7796945
-40
-
-chain 18169122 chr4_random 842648 + 440032 631501 chr4_gl000194_random 191469 + 0 191469 150
-191469
-
-chain 18001815 chr4_random 842648 + 0 189789 chr4_gl000193_random 189789 + 0 189789 151
-189789
-
-chain 15268007 chr4_random 842648 + 681501 842648 chrUn_gl000218 161147 + 0 161147 194
-161147
-
-chain 9245037 chr4_random 842648 + 239789 336038 chr4 191154276 + 8829368 8925617 353
-96249
-
-chain 137712 chr4_random 842648 + 388580 390032 chr4 191154276 + 9620000 9621452 935614
-1452
-
-chain 10386 chr4_random 842648 + 388312 388420 chr11 135006516 - 91778086 91778194 21974850
-108
-
-chain 3377 chr4_random 842648 + 388277 388312 chr11 135006516 - 84847900 84847935 23649965
-35
-
-chain 2456 chr4_random 842648 + 388184 388235 chrX 155270560 - 93144339 93144390 24160146
-51
-
-chain 16791974256 chr5 180857866 + 63000 180837866 chr5 180915260 + 10000 180905260 5
-17520657 24032 50000
-1688 3435 1
-37 1399 0
-27 2 1
-8 1 1
-3983 3434 0
-103 1 1
-32 1 1
-67 1 1
-35 1 1
-752 1669 0
-43 1 1
-1207 0 1
-46 0 1
-5 0 1
-19 1 1
-70 3434 0
-962 16 16
-1905 44 44
-85 41 41
-332 49 49
-1675 23 23
-1185 11 11
-124 35 35
-713 105 105
-408 4 4
-113 16 16
-1835 1 2
-26 7 8
-18 2730 25
-3103 1 0
-7858 718 10488
-307 1 636
-7461 0 1
-23772 51 0
-4031 0 1
-20571 0 1
-9135 0 2
-6885 2 3
-110 3 0
-816 2 3
-2295 0 34
-3936 28 28
-3536 0 2
-2917 0 1
-652 1 1
-37 1 1
-657 1 1
-22 1 1
-419 3 4
-3580 1 1
-29 1 1
-274 11 35
-835 3036 0
-1907 1 0
-10504 30 28
-784 0 6
-127 10 0
-668 1 1
-28 1 1
-2467 4 0
-179 0 2
-1650 1 1
-39 1 1
-2433 1 0
-720 1 1
-40 1 1
-772 1 1
-32 1 1
-353 1 1
-17 1 1
-1776 0 1
-6082 3 0
-2669 12 10
-2857 1 1
-35 1 1
-722 60 60
-200 1 1
-240 1 1
-4048 1 1
-49 1 1
-702 1 1
-33 1 1
-2927 1 2
-1487 17 0
-276 16 16
-1039 1 1
-35 1 1
-2068 1 1
-40 1 1
-828 1 1
-36 2 0
-317 8 0
-893 1 1
-33 1 0
-8143 0 4
-28632199 3000000 3000000
-12470071 0 1
-29760415 40000 50000
-5878002 23000 20845
-4521 1 0
-676 6 6
-5928 0 1
-372 1 1
-47 1 1
-6801 3 2
-639 0 1
-871 3 4
-11530 0 4
-22966 0 1
-15447 0 1
-53856 0 2
-15988 0 2
-906887 10 11
-40152817 5000 52715
-3521239 0 1
-1604 10 0
-12778810 4100 51715
-15152692 27 0
-1852096 1 0
-8710030
-
-chain 924655 chr5 180857866 + 17585088 17611949 chr5 180915260 - 163333152 163394435 1227
-14 409 52001
-494 3435 1
-24 1 1
-1487 10 10
-682 13 13
-132 3449 15
-306 1 1
-74 1 1
-967 3434 0
-1285 3434 0
-68 4569 1135
-2087 50 50
-435
-
-chain 315813 chr5 180857866 + 17584685 17618655 chr5 180915260 + 17581691 17599590 1580
-403 14 14
-237 1475 75
-628 25 25
-51 89 89
-304 24 24
-70 33 33
-37 698 698
-667 3506 72
-1354 96 96
-75 4 4
-752 1710 41
-450 382 382
-51 14129 7264
-237 12 12
-614 37 37
-134 16 16
-422 31 31
-796 4345 1642
-62
-
-chain 312488 chr5 180857866 + 17597387 17639380 chr5 180915260 + 17580657 17599710 1454
-373 70 70
-1245 2263 863
-1184 3434 0
-1733 3775 2106
-50 9111 2246
-1078 993 993
-1363 8015 1147
-44 85 85
-41 332 332
-49 6299 3596
-341 45 44
-70
-
-chain 265075 chr5 180857866 + 17745718 17748537 chr5 180915260 + 17713035 17715853 333767
-1906 1 0
-912
-
-chain 207388 chr5 180857866 + 17584033 17596937 chr5 180915260 + 17583073 17597745 2201
-51 557 557
-14 17 17
-13 654 654
-172 494 494
-219 23 23
-567 4975 6743
-176 6 6
-865 14 14
-96 1354 1354
-26 2261 2261
-350
-
-chain 193008 chr5 180857866 + 17583668 17629078 chr5 180915260 + 17580674 17599710 1465
-356 84 84
-533 3434 0
-698 5562 728
-51 4689 1255
-946 4787 1353
-543 8 8
-167 12743 7643
-324 5466 2032
-306 3553 850
-1045 45 44
-70
-
-chain 130263 chr5 180857866 + 17639380 17641654 chr5 180915260 + 17592112 17594386 19200
-936 23 23
-116 16 16
-1183
-
-chain 123401 chr5 180857866 + 17602522 17620625 chr5 180915260 + 17589594 17593961 2306
-159 16 16
-1763 19 19
-54 14448 712
-1644
-
-chain 53192 chr5 180857866 + 17626966 17629142 chr5 180915260 + 17590000 17592176 2614
-952 1045 1045
-45 70 70
-64
-
-chain 42492 chr5 180857866 + 17625757 17626966 chr5 180915260 - 163394507 163395716 9006
-1209
-
-chain 23743 chr5 180857866 + 17605548 17605956 chr5 180915260 + 17596054 17596462 38000
-290 9 9
-109
-
-chain 20601 chr5 180857866 + 17748538 17748754 chr5 180915260 + 17712817 17713033 9842237
-216
-
-chain 11635 chr5 180857866 + 17618762 17618981 chr5 180915260 + 17595532 17595751 149283
-219
-
-chain 9108 chr5 180857866 + 17618655 17618762 chr5 180915260 + 17583355 17583462 1340460
-107
-
-chain 7916 chr5 180857866 + 17587442 17604673 chr5 180915260 - 163387098 163397461 2244
-25 61 61
-79 398 398
-33 16608 9740
-27
-
-chain 7204 chr5 180857866 + 17604533 17604646 chr5 180915260 + 17599204 17599317 3499
-113
-
-chain 4292 chr5 180857866 + 17639265 17639310 chr5 180915260 + 17595431 17595476 67944
-45
-
-chain 2558 chr5 180857866 + 17604673 17604706 chr5 180915260 + 17591745 17591778 3790746
-33
-
-chain 2511 chr5 180857866 + 170275712 170275739 chr5 180915260 + 170343161 170343188 11152528
-27
-
-chain 2447 chr5 180857866 + 17635643 17636496 chr5 180915260 - 163394091 163394944 8841
-35 713 713
-105
-
-chain 2252 chr5 180857866 + 17601306 17601338 chr5 180915260 + 17595246 17595278 11344
-32
-
-chain 2027 chr5 180857866 + 17785693 17785748 chr18 78077248 - 45596607 45596662 524022
-55
-
-chain 1518 chr5 180857866 + 17629142 17629191 chr5 180915260 - 163394458 163394507 205933
-49
-
-chain 1109 chr5 180857866 + 17613421 17613452 chr5 180915260 - 163395907 163395938 8647
-31
-
-chain 143977943 chr5_h2_hap1 1794870 + 0 1794870 chr5 180915260 + 68505249 71134051 52
-5440 1 0
-1785 0 1
-12373 0 2
-7216 0 1
-714 2 0
-4360 0 1
-11179 1 0
-2027 1 0
-6969 0 2
-3779 1 0
-634 4 3
-1384 0 9
-378 0 2
-1153 3 0
-1246 0 6
-1427 0 2
-608 1 1
-23 1 1
-1981 44 44
-3998 1 1
-33 5 0
-148 1 1
-18 1 0
-331 2 0
-162 1 0
-333 0 1
-644 1 0
-2053 1 0
-1896 0 1
-2096 1 1
-32 1 1
-265 0 14
-1061 0 1
-7303 6 6
-1313 1 0
-3225 0 2
-65 1 1
-220 1 1
-1422 0 1
-248 1 1
-21 2 0
-641 0 1
-163 3 0
-522 1 0
-1685 0 1
-299 1 1
-16 1 0
-3259 1 0
-6492 9 9
-700 0 2
-379 1 0
-186 0 16
-21 0 27
-242 21 19
-156 0 3
-2040 1 0
-7852 0 2
-1267 0 4
-8016 0 1
-2057 85 0
-449 0 1
-2797 0 1
-3858 0 1
-2129 1 0
-234 1 1
-28 1 1
-2923 0 3
-4346 1 0
-2467 1 0
-11093 1 0
-3932 0 3
-2223 1 1
-22 0 1
-25 0 6
-1909 2 0
-1136 1 0
-658 2 0
-32 8 0
-9 2 0
-14 15 11
-22 14 0
-20 51 1
-34 2 0
-43 0 2
-38 127 19
-15 14 0
-41 0 5
-9200 1 0
-2655 1 0
-38 1 1
-237 1 1
-28 1 1
-1065 1 0
-2979 3 0
-13 1 1
-653 4 0
-1950 1 0
-2320 2 0
-817 3 0
-524 8 0
-417 1 0
-873 1 0
-352 1 0
-152 2 0
-651 1 0
-285 1 0
-1830 0 1
-1271 0 1
-957 0 1
-1506 2 0
-2454 4 0
-6 4 0
-300 1 1
-68 1 1
-1648 0 1
-10725 10 10
-1308 2 1
-48 1 1
-1242 15 0
-1869 1 0
-26 0 452
-1178 0 3
-43 0 4
-3567 0 1
-2289 0 1
-695 0 6
-721 13 14
-192 0 2
-1190 1 1
-36 1 1
-451 0 1
-4137 1 0
-809 23 0
-1624 0 4
-453 4 0
-983 0 1
-188 0 5
-489 0 1
-299 11 11
-1923 1 0
-168 0 1
-891 1 1
-54 0 1
-908 0 28
-1224 2 0
-175 0 1
-459 2 0
-119 133 153
-50 13 13
-4001 0 1
-4764 3 0
-90 1 1
-117 92 0
-325 0 27
-19 1 1
-92 1 67
-21 1 28
-15 1 28
-9013 0 1
-1376 0 1
-674 10 0
-87 0 1
-1317 43 35
-260 1 0
-1518 11 12
-232 0 1
-1093 0 1
-737 0 2
-176 10 10
-664 1 1
-33 1 1
-2816 3 0
-4679 0 2
-3212 0 2
-2383 14 16
-3049 0 1
-146 1 0
-721 1 1
-35 1 1
-2260 2 0
-1228 0 1
-682 1 0
-8927 1 0
-795 2 0
-5278 0 2
-5578 13 0
-3665 20 0
-1852 9 0
-4564 1 1
-20 4 0
-111 1 1
-1065 37 37
-2979 1 0
-820 0 1
-9147 0 1
-411 0 1
-745 2 0
-144 3 3
-27 2 0
-734 1 1
-38 1 1
-105 0 4
-554 1 0
-35 1 1
-226 2 0
-254 1 1
-39 1 1
-3302 0 2
-16 1 1
-1276 1 1
-57 1 1
-122 5 0
-178 0 1
-29 1 1
-89 1 1
-32 1 1
-1743 1 0
-294 1 1
-27 1 1
-1925 1 1
-48 1 1
-116 1 1
-20 1 1
-163 4 4
-821 4 3
-46 1 1
-247 1 1
-27 2 2
-613 1 1
-44 1 1
-181 9 7
-1220 1 1
-53 0 3
-596 1 0
-1052 12 12
-130 1 0
-1524 0 1
-1878 1 4
-76 0 1
-6 0 5
-895 0 1
-290 9 5
-783 1 1
-45 1 1
-1910 1 1
-48 1 1
-409 1 1
-30 1 1
-158 2 0
-69 6 0
-428 1 1
-136 1 1
-418 44 44
-767 35 27
-711 1 1
-28 1 1
-1137 1 0
-585 1 0
-433 13 0
-3034 1 0
-961 0 3
-950 1 1
-15 1 1
-948 0 5
-153 21 20
-181 38 38
-765 8 10
-207 13 15
-3092 4 0
-202 5 5
-1406 0 5
-205 1 1
-44 1 1
-2719 1 1
-36 1 1
-1050 0 9
-108 0 2
-1177 4 0
-115 1 1
-2051 15 0
-520 8 8
-1072 0 1
-595 2 0
-4576 73 73
-6176 1 0
-1299 1 1
-29 1 0
-496 0 4
-379 2024 0
-7 3663 0
-82 4 0
-79 6 1
-556 11 0
-598 9 9
-138 77 73
-1651 3 9
-3302 0 8
-429 1 0
-163 0 3
-60 3 0
-132 1 1
-23 1 0
-1660 1 16
-2124 0 1
-1601 9 0
-35 525 6
-38 1 1
-235 1 30
-497 1 1
-37 1 0
-79 0 1
-1239 1 1
-31 1 1
-135 1 0
-5 2 0
-669 0 1
-1158 1595 0
-21 3 0
-5 126998 500121
-730 31 27
-278 0 2
-352 0 12
-363 13 21
-366 1 0
-378 3 0
-61 1 0
-105 17 68
-1480 32 32
-640 1 1
-52 1 1
-482 1 0
-638 1 1
-20 1 0
-21 1 1
-326 1 1
-37 1 1
-995 0 7
-1685 0 1
-1607 9 8
-633 1 1
-37 1 1
-697 6 6
-1363 8 8
-234 1 1
-44 1 1
-3022 5 6
-96 12 11
-674 4 0
-768 0 1
-169 3 0
-2083 0 1
-1098 20 20
-5586 1 0
-174 28 13
-366 2 0
-202 1 1
-69 1 1
-682 5 5
-3457 1 0
-232 1 0
-305 10 0
-1770 40 40
-349 38 38
-401 0 1
-441 7 3
-547 11 10
-210 4 0
-779 4 0
-193 4 0
-576 0 4
-514 48 48
-789 23 16
-2496 25 25
-874 25 11
-2776 19 19
-2824 4 0
-440 0 2
-876 14 14
-1198 39 39
-521 6 0
-126 40 40
-315 29 29
-616 94 99
-285 35 35
-175 12 12
-320 17 1
-3339 0 1
-260 49 49
-109 11 11
-586 0 1
-133 19 13
-8202 0 1
-307 0 1
-1366 1 0
-1073 9 12
-1385 0 1
-321 106 108
-1101 28 28
-483 42 42
-1752 58 58
-166 37 36
-748 16 16
-52 1 0
-1679 0 2
-455 9 17
-484 1 10
-74 33 33
-155 0 1
-62 0 8
-424 23 23
-491 8 9
-450 0 2
-63 1 0
-410 5 0
-1131 165 170
-254 39 39
-1162 0 272664
-1919 1 1
-82 1 1
-740 4 4
-261 1 1
-83 1 1
-52 1 1
-49 1 1
-231 6 6
-244 1 1
-21 1 1
-52 44 44
-114 20 20
-87 32 32
-149 0 6
-202 50 50
-115 44 44
-114 65 65
-50 111 111
-61 52 52
-101 42 45
-250 15 15
-208 1 0
-2259 3 0
-239 64 66
-168 10 10
-2393 1 1
-38 1 1
-674 1 1
-29 1 1
-469 22 25
-827 1 0
-1679 0 1
-463 9 13
-232 1 0
-248 1 5
-325 0 7
-1389 0 4
-63 1 0
-410 6 0
-685 3 0
-35 1 1
-407 166 168
-253 39 39
-71 0 4
-1288 35 35
-1697 32 32
-243 22 22
-395 51 51
-259 49 49
-108 6 6
-54 168 168
-464 45 45
-81 20 20
-84 21 21
-240 25 25
-584 0 810
-126 4 4
-42 6 6
-101 0 3
-41 1 1
-473 1 0
-373 1 1
-41 1 1
-614 1 1
-41 1 18042
-857 50 50
-279 2 0
-246 67 69
-160 10 10
-199 0 1
-154 1 0
-276 28 28
-124 29 28
-105 7 7
-355 1 1
-45 1 1
-299 1 1
-25 1 1
-283 30 35
-594 2 0
-1401 1 1
-46 1 1
-123 4 0
-830 1 0
-100 1 1
-61 1 1
-737 2 7
-285 1 1
-58 1 1
-143 18 0
-19 1 1
-575 1 1
-91 1 1
-318 2 0
-4090 4 0
-702 0 1
-2007 0 2
-901 0 1
-79 9 9
-31 3 3
-1203 1 0
-16 1 1
-574 1 1
-28 1 1
-346 6 0
-25 1 3
-22 2 0
-34 4 0
-7 1 0
-20 18 22
-511 0 5
-5088 0 1
-1065 0 4
-51 2 0
-2714 25 25
-81 8 8
-56 788 18
-22 1 1
-4702 0 1
-536 6 6
-3900 1 0
-1063 0 8
-4095 1 0
-1841 1 3
-1015 0 1
-2808 1 1
-17 1 1
-340 1 1
-39 1 1
-1548 1 1
-73 1 1
-291 1 0
-236 72 43
-104 0 1
-1843 4 0
-80 15 15
-1140 29 1
-45 1 1
-1245 3 0
-194 1 0
-816 11 1
-25 1 11
-47 1 1
-508 0 1
-255 1 1
-24 1 0
-319 13 13
-1846 397 398
-803 0 37
-509 0 12
-130 0 4
-609 0 3
-6495 1251 1253
-1091 11 11
-384 2 0
-1657 31 30
-109 31 31
-2815 63 63
-85 0 13
-589 48 48
-194 25 25
-1068 16 16
-209 2 0
-215 47 47
-1775 127 77
-533 188 0
-1164 1 0
-1863 1 1
-29 1 1
-1993 1 1
-19 1 1
-782 2 0
-3224 2 0
-22 1 11
-473 332 0
-604 1 1
-28 1 1
-223 1 1
-28 1 1
-2870 0 1
-38 1 1
-313 1 0
-768 0 1
-1039 9 9
-886 0 4
-243 0 1
-172 17 17
-2721 1 1
-71 0 1
-607 105 117
-54 46 44
-2057 1 1
-32 1 1
-452 1 1
-49 1 1
-169 322 6
-26 1 0
-567 3 0
-2324 1 0
-825 4 0
-1251 4 4
-2651 0 4
-703 14 19
-10731 13 0
-741 2 0
-1659 0 12
-7683 0 6
-838 1 0
-2905 12 326
-1714 1 0
-1172 90 100
-619 2 0
-263 0 59
-730 1 0
-56 4 0
-1746 17 17
-377 1 1
-27 4 0
-836 1 1
-67 1 1
-1022 0 1
-1096 1 1
-40 0 1
-8 1 1
-1864 1 0
-56 5 1
-6 0 10
-114 1 1
-34 1 1
-631 19 19
-139 13 13
-1330 1 11
-22 2 0
-2846 1 0
-358 0 2
-798 11 11
-3004 1 1
-30 1 1
-2032 1 16
-752 16 0
-40 0 6
-3211 0 1
-965 0 14
-2978 1 1
-29 1 1
-138 0 2
-1646 2 0
-375 1 1
-31 1 1
-6235 0 2
-2598 0 3
-592 0 4
-135 0 12
-3892 1 0
-840 0 12
-5528 9 5
-5400 0 1
-181 0 1
-836 0 3
-3087 1 1
-46 1 1
-2796 11 9
-6282 1 1
-25 1 1
-2009 1 1
-56 0 2
-209 15 15
-2433 1 1
-50 1 1
-366 1 0
-3233 0 1
-5144 0 2
-811 53 22
-23 1 0
-6 1 3
-43 0 2
-13 2 0
-5 0 14
-634 8 8
-1663 10 12
-433 1 1
-43 1 1
-397 2 0
-638 1 1
-42 1 1
-285 1 1
-28 1 1
-516 1288 2
-424 4 0
-660 1 1
-49 1 1
-816 0 12
-1015 1 1
-47 1 1
-988 0 3
-1000 14 32
-330 1 1
-38 1 1
-124 7 2
-43 1 1
-693 1 1
-61 1 1
-94 0 1
-963 1 1
-46 1 1
-1393 0 2
-139 2 0
-113 1 1
-20 1 1
-323 6 0
-34 0 1
-978 1 1
-38 1 1
-105 1 1
-18 1 2
-43 1 1
-381 0 1
-811 15 8
-2537 0 2436
-2642 1 1
-42 4 0
-92 10 10
-1363 1 1
-37 1 1
-252 5 0
-165 1 1
-329 1 1
-77 1 1
-705 0 6
-258 6 6
-155 0 1
-57 2 0
-1380 5 0
-348 2 0
-489 9 5
-448 1 0
-1681 0 1
-835 29 25
-1359 36 36
-223 0 1
-399 15 15
-466 4 4
-75 10559 200741
-1150 1 0
-682 12 15
-802 53 53
-535 1 0
-65 62 63
-497 30 1
-1458 1 0
-683 0 1
-1449 1 0
-977 15 0
-1636 0 4
-216 3 0
-587 0 10
-4302 1 1
-28 1 1
-733 0 4
-138 9 9
-595 0 11
-249 1 1
-65 1 1
-242 1 6
-74 0 4
-87 6 5694
-363 4 0
-513 0 1
-29 1 1
-1297 0 1
-415 1 3
-1947 0 2
-978 0 1
-3121 1 1
-17 1 1
-872 1 1
-31 1 1
-602 8 8
-238 1 1
-36 1 1
-930 1 1
-36 1 1
-1073 22 0
-494 0 1
-66 1 5
-60 1 1
-15 1 1
-452 1 0
-1587 0 7
-1465 1 1
-27 1 1
-76 1 1
-44 1 1
-143 16 14
-323 23 23
-685 1 1
-15 1 1
-136 6 0
-400 0 2
-109 3 0
-50 1 1
-18 1 1
-985 1 1
-38 1 1
-1034 12 12
-247 1 1
-91 2 1
-1383 1 1
-44 1 1
-164 15 16
-292 1 1
-47 1 1
-73 1 1
-43 1 1
-203 1 0
-420 1 1
-37 1 1
-449 0 2
-25 0 4
-415 4 6
-155 1 1
-26 1 1
-199 1 1
-41 0 32
-20 1 1
-68 1 1
-28 1 1
-2097 13 15
-207 8 10
-984 21 20
-134 5 0
-967 10 10
-956 3 0
-4424 5 6
-595 0 1
-1140 1 1
-28 1 1
-733 7 16
-1218 149 149
-429 0 4
-59 0 2
-2568 1 1
-45 1 1
-784 5 8
-289 1 0
-877 5 0
-34 1 0
-68 4 1
-735 1 1
-35 1 1
-1094 4 4
-1519 5 6
-138 12 12
-1044 0 1
-91 80 80
-369 1 1
-53 2 0
-63 1 1
-1220 7 9
-181 1 1
-44 1 1
-134 0 3
-476 2 2
-27 1 1
-205 1 1
-88 2 2
-822 4 4
-163 22 22
-116 1 1
-48 1 1
-3849 1 1
-21 1 1
-120 1 1
-32 1 1
-89 1 1
-29 1 0
-178 3 6
-1452 19 17
-5455 1 0
-10333 1 0
-784 0 1
-55 8 0
-468 0 1
-539 12 0
-98 1 1
-24 1 1
-77 1 1
-81 1 1
-4604 17 19
-7803 7 7
-807 0 1
-2260 7 5
-980 0 1
-2105 0 1
-4083 0 1
-836 0 2
-5612 1 0
-519 0 1
-1334 0 1
-2401 0 9
-1823 1 0
-159 0 2
-484 2 0
-14815 1 1
-36 1 1
-2512 4 0
-58 3 0
-3277 1 0
-559 0 1
-4024 1 0
-4383 22 13
-4131 1 1
-35 1 1
-290 1 1
-29 3 0
-533 1 0
-305 0 1
-2608 0 1
-443 3 1
-2322 0 20
-514 1 1
-46 1 1
-791 19 30
-3206 3 0
-6272 0 2
-1789 8 0
-291 39 39
-521 6 0
-126 40 40
-315 29 29
-616 94 99
-206 114 109
-506 0 14
-2370 0 2
-4709 1 1
-36 1 1
-5588 0 11
-299 1 0
-1366 1 0
-1644 1 1
-28 1 0
-4859 16 21
-1992 0 10
-505 0 1
-448 8 12
-721 40973 60417
-3484 1 1
-40 1 1
-2152 0 2
-5298 39 40
-141 25 25
-427 0 11
-1543 1 0
-3707 0 1
-1056 292 8656
-1768 2 0
-717 1 0
-14041 0 1
-4167 0 2
-7403 5 0
-7673 0 1
-3630 67 67
-74 129 129
-226 1 0
-1720 138 136
-1185 1 0
-878 46874 0
-862 1 1
-31 1 1
-9409 1 1
-37 1 1
-2231 0 2
-1682 0 1
-13767 0 1
-9473 0 1
-7168 2 0
-12384 1 0
-1188 0 4
-2044 1 0
-3076 1 0
-796 0 1
-5477 0 2
-5780 1 0
-6338 1 0
-2680 0 4
-2033 0 1
-9452 0 12
-402983
-
-chain 13752336 chr5_h2_hap1 1794870 + 324513 1282806 chr5 180915260 - 110525721 111977366 61
-37 39926 39909
-44 767 767
-34 9178 9179
-38 20004 20004
-27 1 1
-44 8383 8384
-1071 3 3
-511 0 1
-439 7 7
-3663 1483 1482
-77 11199 11214
-525 4132 4132
-704 1 0
-729 3 0
-158 29 29
-653 0 3
-154 0 2
-7041 8 0
-2068 0 7
-166 1 0
-812 6 7
-25 1 1
-1423 0 8
-438 0 1
-4783 0 1
-31 1 1
-1269 1 0
-926 3 0
-2542 2 0
-112 1 1
-2183 1 1
-59 1 1
-1605 2 2
-4515 0 1
-4368 1 0
-382 0 34
-60 1 1
-86 0 1
-552 6 6
-892 1 1
-33 1 1
-6705 0 1
-934 0 2
-8985 2 1
-445 6 0
-6283 0 1
-456 0 1
-1101 0 5
-696 0 1
-2973 6 0
-158 0 3
-449 0 3
-657 12 12
-151 0 1
-406 1 1
-55 1 1
-163 1 1
-72 1 1
-1955 1 0
-713 0 1
-3050 1 1
-35 1 1
-3127 1 0
-233 1 0
-1343 17 7
-1250 3 0
-322 1 0
-2081 0 1
-2413 5 0
-818 0 1
-18 1 1
-268 0 1
-271 1 1
-35 1 0
-586 2 0
-1192 0 1
-494 2 0
-4657 1 1
-30 5 0
-2172 0 334
-1981 5 0
-33 321 0
-2633 2 0
-142 1 0
-1597 7 0
-248 1 0
-317 1 1
-21 1 1
-441 0 1
-600 6 4
-35 1 1
-1593 2 6
-9303 1 0
-2781 0 2
-6052 0 4
-771 1 0
-1500 14 0
-1544 730 730
-31 3419 3419
-30 30394 30395
-40 349 349
-38 3691 3690
-48 3308 3306
-25 874 880
-25 8151 8151
-39 653 653
-40 315 315
-29 616 616
-94 285 285
-35 4123 4120
-49 13570 13573
-58 30899 10440
-165 1652 1655
-35 1697 1697
-32 660 660
-51 259 259
-49 168 168
-168 464 464
-45 446 446
-25 3886 3879
-67 800 800
-28 124 124
-29 1123 1123
-30 24987 23723
-2 1 1
-21 146 146
-2 1 1
-785 22543 22552
-67 3192 3170
-28 5357 5348
-397 8546 8565
-1251 3145 3145
-31 110 110
-29 2816 2816
-63 674 688
-48 195 195
-23 1511 1509
-47 1810 1786
-37 14 0
-41 533 533
-182 1 16
-5 20555 20281
-49 1 21
-55 54 52
-46 2763 2762
-37 5 2
-280 124045 123118
-495 0 1
-703 3 0
-87 27183 48462
-36 1182 1182
-389 16 16
-257 1 0
-118 3 3
-547 1 1
-25 1 1
-126 0 2
-3598 810 0
-148 0 6
-483 1 1
-34 1 1
-266 6 6
-350 2 2
-30 1 1
-297 4 4
-666 1 1
-89 1 1
-52 15 15
-2220 2647 2651
-53 53651 53634
-149 9850 9843
-39 1 1
-39 116984 481498
-39 653 653
-40 315 315
-29 616 616
-94 206 206
-114 65101 68610
-358 27 27
-588 11156 11155
-25 56460 137674
-105 1 0
-2251 13 13
-319 25 26
-826 25 25
-370 7 7
-439 0 1
-192 7 1
-250 0 13
-1302 1 8
-866 91 94
-91 14 14
-501 1 0
-1238 1 0
-113 475 60006
-212 8 10
-907 0 4
-350 1 0
-486 9 17
-448 0 2
-515 0 10
-788 13213 230
-199 16 16
-645 0 2
-112 37 25
-634
-
-chain 283844 chr5_h2_hap1 1794870 + 1261701 1280951 chr5 180915260 + 69698102 69815360 1487
-91 6326 96869
-318 0 10
-505 0 1
-204 64 64
-440 1 0
-235 0 1
-1269 0 1
-945 1 0
-670 242 551
-75 3 0
-1233 50 50
-199 4900 12045
-409 59 59
-310 37 40
-664
-
-chain 206667 chr5_h2_hap1 1794870 + 1287039 1295912 chr17 81195210 + 76583705 76597262 568754
-558 4 0
-365 2 2
-40 0 1
-253 1 1
-31 1 1
-522 6316 11003
-780
-
-chain 184822 chr5_h2_hap1 1794870 + 1284679 1286632 chr17 81195210 - 4506444 4508397 671275
-1953
-
-chain 128717 chr5_h2_hap1 1794870 + 1283006 1284382 chr5 180915260 + 70517839 70519212 1000883
-791 20 17
-565
-
-chain 128621 chr5_h2_hap1 1794870 + 1291852 1293214 chr17 81195210 + 76573863 76575225 1001637
-1362
-
-chain 122147 chr5_h2_hap1 1794870 + 627399 939358 chr5 180915260 - 110828619 111993762 93
-42 1752 1753
-58 6978 6974
-165 255 254
-37 4915 4915
-44 4384 4378
-64 19819 875253
-39 1 1
-9 264030 261784
-58 0 6
-56 6 6
-105 3 3
-98 1 1
-483 7968 7968
-62 497 497
-30
-
-chain 118081 chr5_h2_hap1 1794870 + 1290357 1291631 chr4 191154276 - 20442500 20443774 1089300
-230 18 18
-1026
-
-chain 112391 chr5_h2_hap1 1794870 + 1288972 1290160 chr17 81195210 - 4580707 4581894 1143267
-1134 1 0
-53
-
-chain 92982 chr5_h2_hap1 1794870 + 1293593 1294614 chr4 191154276 + 170627590 170628611 1373141
-72 1 1
-129 1 1
-818
-
-chain 75482 chr5_h2_hap1 1794870 + 1274745 1276419 chr5 180915260 - 111410923 111412615 820
-271 0 10
-350 0 6
-499 9 9
-444 0 2
-101
-
-chain 68300 chr5_h2_hap1 1794870 + 1276804 1279228 chr5 180915260 - 110416917 110419341 216
-2424
-
-chain 29652 chr5_h2_hap1 1794870 + 524804 525112 chr3 198022430 + 8519605 8519913 4781887
-308
-
-chain 29428 chr5_h2_hap1 1794870 + 756919 757240 chr2 243199373 + 16251117 16251431 4913030
-177 7 0
-137
-
-chain 27649 chr5_h2_hap1 1794870 + 641866 1186473 chr5 180915260 + 68929706 69564604 89
-32 351 351
-50 115 115
-44 114 114
-65 50 50
-111 61 61
-52 101 101
-42 14056 14883
-33 529303 618767
-27
-
-chain 20581 chr5_h2_hap1 1794870 + 1249367 1254462 chr5 180915260 - 111122604 111127700 1762
-2153 24 24
-85 8 8
-1086 0 1
-1739
-
-chain 5516 chr5_h2_hap1 1794870 + 253548 253608 chr5 180915260 + 68759177 68759237 7759123
-60
-
-chain 5218 chr5_h2_hap1 1794870 + 1244675 1244945 chr5 180915260 - 159621198 159621468 493
-30 1 1
-36 122 122
-81
-
-chain 4702 chr5_h2_hap1 1794870 + 1279881 1280287 chr5 180915260 + 70518261 70518663 9283
-59 311 307
-36
-
-chain 4436 chr5_h2_hap1 1794870 + 1274323 1274373 chr5 180915260 + 70526833 70526883 9273
-50
-
-chain 4277 chr5_h2_hap1 1794870 + 625682 625728 chr5 180915260 - 111701952 111701998 814
-46
-
-chain 3978 chr5_h2_hap1 1794870 + 1276419 1276466 chr5 180915260 + 70082181 70082228 137301
-47
-
-chain 3805 chr5_h2_hap1 1794870 + 1244816 1244863 chr5 180915260 + 69926901 69926948 475
-47
-
-chain 2924 chr5_h2_hap1 1794870 + 253608 253640 chr5 180915260 + 68759034 68759066 4803455
-32
-
-chain 943 chr5_h2_hap1 1794870 + 1282135 1282172 chr5 180915260 - 111121871 111121900 54522
-21 8 0
-8
-
-chain 692 chr5_h2_hap1 1794870 + 1276691 1276804 chr5 180915260 + 21496928 21497041 821
-113
-
-chain 13519395 chr5_random 143687 + 0 143687 chr5 180915260 + 180261930 180405660 222
-5859 0 4
-460 1 1
-23 0 2
-42 1 3
-42 1 1
-1633 55 55
-2271 0 10
-1279 2 0
-761 2 0
-25 1 1
-150 13 13
-4989 0 1
-1174 1 1
-23 1 1
-495 16 16
-2709 1 4
-349 0 4
-466 0 1
-292 2 0
-184 0 5
-621 13 13
-1788 2 0
-21 1 1
-731 12 12
-149 0 3
-5100 1 0
-1059 0 3
-1724 2 0
-4111 1 0
-890 4 4
-47 1 1
-1137 0 1
-147 17 19
-72 1 1
-22 1 1
-365 1 1
-19 2 2
-1360 0 1
-1476 1 1
-43 1 1
-1141 1 0
-2615 18 18
-4308 0 4
-135 0 2
-1484 8 6
-7384 0 11
-284 1 1
-69 1 1
-232 6 0
-1064 0 2
-4530 0 1
-4542 6 6
-10543 1 0
-4051 2 0
-11340 5 6
-4936 1 0
-12029 3 3
-43 1 1
-2955 27 27
-775 0 10
-822 1 0
-2057 1 0
-733 0 1
-4016 0 1
-4514 1 1
-49 1 1
-4484 1 0
-784 1 1
-25 1 1
-5707 2 0
-1274 1 0
-289 1 1
-34 1 0
-80
-
-chain 15799018021 chr6 170899992 + 5000 170896992 chr6 171115067 + 60000 171055067 6
-1297281 0 1
-7806978 162987 0
-4013144 0 9
-261 15 13
-18786172 17 17
-439 16 16
-59 4 5
-32202 17 17
-439 16 16
-59 5 4
-15403 0 1
-13914166 0 4
-115 1 1
-17 1 1
-415 0 12
-105 3 6
-12160281 50000 50000
-642507 3050000 3100000
-248423 50000 50000
-2918791 0 1238
-9427508 4 4
-162 12 12
-2193 22 22
-293 1 1
-30 1 1
-845 0 1
-45 1 1
-9769 0 2
-6058 1 1
-24 1 1
-2223 1 1
-24 1 1
-182 12 12
-284 1 1
-20 1 1
-970 1 1
-64 36 7
-575 43 43
-389 1 1
-27 1 1
-3279 1 1
-44 1 0
-3012 0 1
-545 17 17
-2562 1 0
-251 1 0
-943 0 8
-29 1 1
-566 0 6
-1483 0 2
-1960 0 1
-4564 1 1
-25 1 1
-832 1 0
-801 8 8
-1131 1 1
-58 1 5
-6177 1 0
-3712 0 1
-2185 1 1
-35 1 1
-710 2 2
-78 1 1
-2201 1 1
-30 1 1
-283 1 1
-30 1 1
-448 0 1
-75012 0 8
-2508457 0 1
-4641788 5 5
-37 1 1
-8503609 2 0
-5363169 200000 150000
-6040303 1 1
-36 0 1
-2020 1 1
-46 1 1
-1559 1 1
-72 1 1
-1098 1 1
-29 1 1
-264 7 7
-580 1 0
-30 1 1
-536 1 1
-41 1 1
-5663 0 1
-423 0 2
-372 1 1
-18 1 1
-9612 0 1
-1414 0 1
-176 2 0
-2742 0 1
-1968 1 0
-754 0 1
-4237 1 0
-2388 1 1
-31 0 1
-3385 1 0
-2004 0 8
-3395 3 0
-32 1 1
-4109 1 0
-1055 0 20
-1611 0 1
-17198424 26 17
-7835 1 0
-11119 1 1
-5197 0 11
-4791 1486 66479
-6787989 1 0
-149 0 4
-947 0 4
-244 1 0
-28418215 1 1
-21 0 1
-3116903 50000 171704
-1939305 1 1
-19 2 0
-8192274 4 4
-122 2 0
-1127 0 1
-1104 1 102
-18 0 29
-40 0 3
-22 1 4
-50 0 26
-56 18125 195105
-950946 1 157
-51 1 1
-104 0 255
-610 0 408
-104 0 105
-1285158 150028 50028
-725067
-
-chain 8374990 chr6 170899992 + 9109557 9199728 chr6 171115067 + 9164559 9254607 394
-3887 2 0
-1509 45 45
-888 7 8
-372 0 1
-4746 3 0
-1114 31 31
-140 35 35
-2111 13 13
-445 248 137
-1437 38 38
-55 25 25
-739 19 19
-2479 70 58
-1297 0 4
-7065 24 24
-542 31 31
-531 22 22
-824 0 1
-2286 40 39
-1209 48 48
-1435 6 0
-4096 4 0
-495 41 42
-6884 0 1
-3177 0 1
-2843 0 1
-904 5 5
-830 18 18
-1997 0 1
-942 4 0
-122 33 33
-1012 0 10
-3751 0 1
-5959 49 49
-4503 0 20
-7514 8 8
-4012 15 15
-673 16 0
-83 4 0
-424 3 0
-3932
-
-chain 892181 chr6 170899992 + 9258019 9267980 chr6 171115067 + 9150000 9160000 4430
-970 53 55
-802 16 17
-389 27 27
-73 5 4
-118 9 5
-615 0 2
-69 17 15
-578 0 1
-114 22 22
-888 130 130
-252 3 9
-564 0 1
-211 5 0
-90 4 0
-1846 21 21
-1832 0 42
-238
-
-chain 763150 chr6 170899992 + 9249728 9258019 chr6 171115067 + 9141295 9150000 6494
-566 0 1
-140 8 0
-205 47 47
-145 18 12
-46 1 0
-3841 0 56
-172 0 372
-444 18 18
-2447 20 20
-173
-
-chain 369937 chr6 170899992 + 9267980 9272102 chr6 171115067 + 9160000 9164126 144773
-1134 49 45
-1420 38 38
-203 0 4
-144 0 3
-115 54 55
-965
-
-chain 4624 chr6 170899992 + 9129966 9130015 chr6 171115067 + 165872977 165873026 28640892
-49
-
-chain 1407 chr6 170899992 + 74606704 74606747 chrX 155270560 + 149588561 149588604 701656
-6 11 11
-26
-
-chain 414456960 chr6_cox_hap1 4731698 + 0 4731698 chr6 171115067 + 28541283 33351542 27
-3409 1 0
-3526 0 1
-2940 0 4
-981 0 1
-4053 0 2
-1433 0 1
-3153 2 0
-369 0 1
-1090 0 1
-884 1 4
-363 1 0
-1969 0 1
-994 5 0
-58 1 1
-131 1 0
-4080 1 0
-680 0 1
-978 0 1
-1062 1 0
-2669 19 19
-7247 1 2
-1704 0 4
-1513 0 2
-49 2 0
-2160 0 5
-672 1 1
-38 1 1
-1384 1 0
-1685 1 1
-30 1 1
-2421 1 1
-42 1 1
-830 1 1
-41 1 1
-1630 0 1
-7458 1 0
-691 0 1
-525 0 1
-79 1 1
-29 1 1
-2055 1 1
-16 0 24
-1867 5 7
-786 0 2
-280 0 1
-227 2 0
-6678 1 0
-4401 1 0
-210 1 0
-3193 2 0
-3619 0 1
-2414 0 2
-5387 0 3
-2927 0 1
-3304 0 1
-440 0 5
-415 0 9
-3597 1 1
-48 1 1
-3412 1 1
-46 1 1
-3604 4 4
-1063 1 1
-36 1 1
-3511 6 6
-2797 32 41
-393 0 1
-477 1 1
-37 1 1
-2459 2 0
-517 0 12
-318 0 1
-1010 7 6
-2103 0 1
-5171 0 8
-1483 1 0
-3813 888 0
-4675 0 2
-5620 1 0
-2017 1 0
-3363 0 5
-1197 0 3
-3208 1 0
-1928 1 0
-174 6 0
-780 1 3
-443 14 0
-3079 0 5
-1993 0 3
-1089 1 1
-58 1 1
-80 0 8
-256 2 0
-2473 37 43
-752 0 2
-33 0 2
-825 0 1
-787 1 1
-37 1 1
-1168 16 0
-377 5 1
-27 1 1
-2161 2 0
-636 25 25
-1663 1 0
-1757 6 6
-205 4 0
-203 7 7
-107 1 1
-28 1 1
-100 4 4
-258 5 0
-659 1 0
-3805 5 8
-1486 4 4
-213 39 43
-4429 0 2
-1199 13 13
-5803 12 0
-2987 0 1
-813 0 17
-920 2 0
-3820 1 3
-130 21 9
-1913 0 14
-1800 0 1
-1255 2 0
-1466 4 0
-747 0 1
-124 2 0
-2108 1 0
-169 0 26
-593 1 0
-632 5 0
-2711 0 4
-1042 0 1
-34 1 1
-1025 2 0
-27 4 18
-81 1 33
-33 0 1
-6 0 76
-3950 1 0
-86 1 1
-12 1 1
-2947 0 1
-1160 1 0
-2046 3 0
-720 1 0
-1341 1 0
-10205 0 5
-1265 1 0
-10 1 1
-1278 5 6
-399 0 32
-96 16 18
-605 4 0
-1072 12 12
-950 11 7
-5128 9 10
-2711 1 0
-676 0 1
-2904 1 1
-30 1 1
-851 0 1
-1410 0 1
-394 1 1
-57 1 1
-1561 0 2
-11062 1 1
-58 1 1
-3238 1 1
-42 1 1
-269 1 0
-284 3 3
-24 1 0
-2796 0 5
-2451 28 0
-2251 1 1
-32 1 0
-10 0 4
-24 1 1
-694 0 2
-3475 0 1
-2008 1 1
-49 1 1
-475 1 1
-28 1 1
-259 160 0
-1858 1 0
-1621 3 0
-1791 1 0
-316 0 2
-1169 0 1
-2549 1 0
-2941 1 1
-34 1 1
-243 9 0
-5157 0 2
-1748 0 8
-472 4 0
-2470 0 4
-402 1 0
-643 2 0
-748 0 2
-859 1 0
-409 2 0
-267 0 2
-322 0 4
-155 1 0
-9957 0 4
-1440 4 4
-127 1 0
-1085 1 0
-131 1 0
-767 1 0
-1160 21 21
-1294 1 0
-712 1 0
-1819 2 1
-464 1 0
-6944 0 4261
-55 0 7
-1235 0 3
-702 0 24
-2847 0 1
-2428 3 0
-7517 0 1
-3204 1 0
-611 1 0
-7104 1 0
-4959 14 14
-2827 1 0
-9421 82 25
-4428 8 0
-5987 41 41
-2108 0 2
-344 1 0
-4216 1 0
-810 0 5
-4443 1 0
-10291 10 0
-7265 5 0
-7041 1 0
-6007 1 0
-8185 4 0
-4961 0 3
-13564 0 1
-1475 0 2
-105 0 10
-10104 2 0
-3073 1 0
-3715 8 0
-2246 24 24
-11461 0 2
-837 61 1
-7660 39 39
-1705 0 1
-6068 7 0
-916 0 4
-569 1 1
-72 1 1
-2260 0 2
-7036 4 0
-3591 0 3
-713 4 0
-7058 11 11
-3319 0 2
-8475 0 1
-1324 0 2
-5438 5 0
-156 1 1
-44 0 1
-21501 7 7
-3359 16 16
-2138 0 5
-4406 11 11
-1525 1 1
-28 1 1
-2159 16 0
-48 4 0
-3030 0 1
-5717 10 0
-6594 2 0
-648 31 31
-1275 1 0
-4 1 0
-3599 1 0
-7515 4 0
-979 0 2
-1990 0 10
-123 1 1
-27 1 1
-1255 0 2
-2769 5 5
-727 1 1
-26 3 3
-785 0 1
-8871 29 29
-15459 1 0
-5978 5 5
-66 1 1
-46 1 1
-18539 1 0
-7732 2 0
-652 0 1
-861 0 1
-10658 17 17
-1313 0 1
-3515 3 0
-19 18 0
-539 0 1
-655 2 0
-10586 2 0
-2385 0 1
-7589 1 0
-29834 1 1
-27 1 1
-1216 1 0
-1323 1 0
-673 0 3
-20031 0 3
-2841 13 0
-1841 4 0
-6446 1 0
-11727 0 1
-8427 17 17
-2864 0 143
-4107 0 8
-748 0 2
-3417 1 1
-32 1 1
-18799 0 2
-21810 1 1
-34 1 1
-2784 2 0
-7864 2 0
-4498 0 1
-49089 1 1
-32 1 1
-509 1 1
-37 1 1
-5371 22 16
-389 1 1
-21 1 1
-806 1 0
-1638 6 6
-228 1 1
-45 1 1
-2068 6 3
-441 1 0
-2338 1 0
-1948 1 1
-26 1 1
-214 0 1
-6118 1 1
-31 1 1
-2382 5 5
-4335 1 1
-39 1 1
-4561 1 1
-38 1 1
-2199 1 1
-49 1 1
-243 19 6
-2779 1 1
-37 2 0
-24 1 1
-1966 3 0
-233 1 1
-29 1 1
-13756 0 4
-3956 4 1
-33765 46 46
-12758 1 0
-18985 0 8
-1384 3 1
-85 1 0
-3539 1 1
-32 1 1
-145 1 0
-1245 2 0
-1736 80 80
-1607 1 5
-712 10 11
-502 0 1
-3670 1 0
-740 0 1
-1693 0 1
-6497 0 2
-2898 1 3
-141 0 1
-1108 0 2
-1448 1 0
-1340 0 1
-7616 74 66
-2882 1 2
-30 8 0
-896 21 3
-395 1 1
-37 3 0
-23 1 2
-1210 18 0
-65 1 1
-20 1 1
-791 0 4
-389 1 0
-809 1 1
-55 0 7
-428 1 1
-17 1 1
-239 1 1
-20 1 1
-69 1 1
-37 1 1
-955 1 0
-839 0 1
-165 1 0
-3867 0 5
-70 1 1
-27 1 1
-899 1 2
-107 1 0
-1457 1 0
-763 12 5
-35 1 1
-1417 10 10
-121 1 1
-38 0 3
-377 1 0
-325 2 2
-178 1 0
-11 4 0
-297 0 24
-337 11 0
-134 1 1
-694 3 0
-72 1 1
-144 1 1
-96 1 1
-199 2 0
-1011 1 0
-107 1 1
-1280 1 1
-73 1 1
-84 25 25
-287 1 1
-26 1 1
-139 1 1
-41 1 1
-440 4 0
-130 12 12
-435 21 0
-85 1 1
-28 1 1
-73 1 1
-61 1 1
-53 5 1
-70 1 2
-52 2 0
-157 30 30
-554 2 2
-128 1 5
-68 1 1
-44 1 1
-125 0 1
-57 1 1
-308 0 7
-15 1 1
-725 9 0
-60 1 1
-180 1 1
-55 1 1
-61 1 1
-23 1 0
-5 1 2
-88 1 1
-56 1 1
-433 2 0
-84 68 68
-182 12 12
-216 1 1
-94 1 1
-561 1 1
-16 1 1
-113 1 1
-86 1 1
-148 2 0
-75 2 0
-77 1 21
-209 3 8
-374 1 0
-173 4 3
-201 1 1
-42 1 1
-56 1 1
-115 1 0
-327 1 1
-54 5 5
-929 1 1
-21 1 1
-97 1 1
-28 0 3
-830 0 2
-68 1 1
-525 0 1
-2081 1 1
-41 1 1
-165 3 3
-46 1 0
-378 1 1
-49 1 1
-352 0 1
-142 1 1
-30 1 1
-95 1 1
-45 1 1
-227 1 1
-53 1 1
-130 1 1
-18 1 1
-138 1 1
-90 1 1
-129 41 41
-50 1 1
-79 1 1
-117 1 1
-31 1 1
-240 5 5
-57 1 1
-152 1 1
-30 1 1
-177 5 5
-321 1 1
-63 1 1
-504 18 18
-662 1 1
-74 1 1
-248 1 1
-34 1 1
-1507 0 10
-1051 0 2611
-560 3 3
-23 1 1
-1631 0 15
-78 4 0
-160 0 21
-3764 0 4
-1358 0 1
-1773 1 1
-43 1 1
-1263 1 1
-39 1 1
-183 0 16
-4097 10 0
-1261 1 1
-20 1 1
-137 1 0
-2351 1 1
-43 1 1
-1010 0 4
-536 1 1
-38 1 1
-381 0 1
-888 19 19
-1521 1 1
-27 1 1
-161 1 1
-46 1 1
-2659 2 0
-533 10 0
-441 1 12
-1684 1 1
-26 3 4
-879 16 16
-514 0 2
-58 1 1
-117 1 1
-24 1 1
-207 1 0
-38 1 1
-730 1 1
-39 1 1
-429 10 10
-134 0 4
-37 1 1
-144 8 8
-1036 2 0
-262 2 2
-38 0 1
-70 18 18
-84 11 13
-317 0 3
-1256 0 2
-332 1 1
-21 1 1
-193 8 28
-30 1 1
-79 1 1
-29 1 1
-536 1 0
-611 1 1
-25 1 1
-399 4 4
-118 0 32
-23 1 1
-116 1 1
-30 1 1
-503 1 1
-22 0 3
-136 1 1
-48 1 1
-330 9 9
-1108 1 1
-98 1 1
-582 0 4
-711 7 7
-89 1 0
-293 7 6
-159 1 1
-24 1 1
-167 6 6
-171 17 17
-681 1 1
-43 1 1
-538 1 1
-44 1 1
-537 16 16
-180 6 6
-778 2 2
-44 1 1
-168 0 7
-211 1 1
-42 1 1
-1253 1 1
-29 1 1
-320 1 1
-36 2 2
-55 1 2
-460 1 1
-35 1 1
-553 8 8
-386 1 1
-26 1 1
-540 1 1
-31 1 1
-65 0 1
-625 12 12
-313 0 1
-52 1 1
-22 1 1
-583 1 1
-49 1 1
-678 37 37
-784 3 0
-770 1 1
-87 11 0
-1129 1 1
-36 1 1
-553 8 8
-997 16 15
-157 1 1
-31 2 2
-204 18 19
-487 1 1
-29 1 1
-374 1 1
-67 1 1
-720 13 13
-266 10 10
-330 16 14
-413 1 1
-44 1 1
-78 6 6
-181 2 2
-36 1 1
-397 1 1
-20 1 1
-311 1 1
-48 2 2
-1298 11 11
-437 4 4
-35 1 1
-194 10 10
-310 1 1
-51 1 1
-136 1 1
-49 1 1
-521 1 1
-23 1 1
-220 1 1
-71 1 1
-1046 15 15
-216 1 1
-21 1 1
-51 1 1
-49 1 1
-527 17 17
-340 12 11
-1025 1 0
-2572 1 1
-29 1 1
-397 2 5
-668 13 13
-541 1 1
-59 0 2
-6 1 1
-122 14 14
-51 1 1
-46 1 1
-72 5 5
-352 0 21
-136 1 1
-12 1 1
-66 16 16
-456 37 34
-371 7 7
-48 1 1
-194 10 10
-108 1 1
-60 1 1
-122 0 1
-48 1 1
-238 1 1
-32 0 1
-100 1 0
-72 1 0
-390 1 1
-38 1 1
-144 1 1
-27 0 4
-184 21 228
-49 1 1
-608 0 1
-152 1 1
-31 1 1
-281 8 8
-337 1 1
-45 1 1
-222 1 1
-20 1 1
-380 1 0
-44 1 1
-368 1 1
-72 1 1
-502 36 18
-63 1 1
-43 0 4
-136 1 1
-42 1 1
-80 4 4
-35 1 0
-89 1 1
-24 0 5
-829 13 13
-102 14 0
-233 1 1
-42 0 3
-85 0 1
-400 1 1
-40 1 1
-538 25 25
-174 1 1
-20 1 1
-705 1 1
-26 2 2
-614 1 1
-44 1 1
-509 1 1
-32 1 1
-224 1 1
-42 1 1
-747 5 5
-804 1 1
-29 1 1
-166 1 1
-43 1 1
-233 1 1
-44 1 1
-620 8 8
-133 1 1
-31 1 1
-165 1 1
-29 1 1
-1249 1 1
-26 4 0
-56 1 1
-67 1 1
-716 1 1
-46 0 1
-16 1 1
-174 1 1
-96 1 1
-141 1 1
-39 0 4
-263 1 1
-18 1 1
-259 4 4
-38 1 1
-104 1 1
-40 1 0
-248 1 1
-18 1 1
-238 1 1
-32 1 1
-70 0 2
-16 1 1
-818 1 1
-22 4 4
-1641 1 1
-46 1 1
-53 1 0
-38 1 1
-373 1 1
-60 1 1
-1149 0 2
-19 1 1
-1653 4 4
-42 1 1
-218 12 12
-363 1 1
-24 1 1
-457 10 10
-414 13 13
-825 1 1
-41 1 1
-492 0 8
-1370 1 1
-18 1 1
-808 2 2
-335 6 4
-880 1 1
-35 1 1
-236 1 1
-67 1 1
-298 0 1
-147 4 4
-322 11 11
-613 1 1
-62 1 1
-340 1 1
-22 1 1
-1057 1 1
-57 1 1
-358 1 1
-128 1 1
-146 10 10
-490 1 1
-20 1 1
-62 1 1
-88 1 1
-293 1 1
-28 1 0
-20 1 1
-83 0 1
-90 1 1
-312 1 1
-44 1 1
-1213 1 1
-51 1 1
-467 1 1
-39 1 1
-122 14 0
-35 1 1
-485 14 14
-110 13 0
-127 1 1
-7150 9 13
-3278 0 2
-28 1 1
-2211 1 0
-1325 18 18
-1304 3727 0
-299 0 248
-2603 2 0
-160 1 1
-34 1 1
-631 1 1
-40 1 3
-38 1 1
-332 17 17
-231 14 14
-202 1 1
-199 1 1
-71 1 1
-42 1 0
-53 11 10
-82 34 34
-135 1 1
-50 3 0
-32 1 1
-194 1 1
-45 1 1
-143 1 1
-78 1 1
-193 6 0
-40 1 1
-432 1 1
-17 1 1
-429 3 6
-58 1 1
-85 1 1
-62 1 1
-85 1 1
-57 1 1
-51 2 2
-278 1 1
-49 1 1
-77 11 11
-120 0 4
-139 1 1
-30 2 2
-205 4 4
-131 1 1
-22 1 1
-251 1 1
-34 1 1
-175 1 1
-36 1 1
-239 1 1
-32 5 5
-63 1 1
-27 1 1
-78 1 1
-19 1 1
-209 1 1
-143 1 13
-176 0 1
-7 0 8
-375 0 1
-62 1 1
-129 2 2
-135 1 1
-88 8 0
-90 6 8
-796 2 0
-1219 1 1
-34 1 1
-833 1 1
-46 1 1
-74 1 1
-45 1 1
-95 1 1
-29 1 1
-298 0 3
-47 1 1
-311 1 1
-58 1 1
-349 15 15
-208 1 1
-37 3 0
-413 11 11
-54 1 1
-97 1 1
-137 0 2
-95 1 1
-257 3 0
-35 1 1
-66 1 1
-47 1 1
-104 7 7
-220 17 17
-228 4 4
-432 1 1
-34 3 3
-175 4 4
-26 1 2
-116 7 7
-60 13 13
-137 1 1
-44 1 1
-744 1 1
-29 1 1
-148 0 5
-30 1 1
-387 1 1
-22 1 1
-309 1 1
-82 1 1
-52 1 1
-32 1 1
-121 1 1
-37 1 1
-396 3 2
-324 1 1
-92 1 1
-51 9 9
-71 7 7
-24 1 1
-115 1 1
-101 1 1
-799 12 12
-197 1 1
-146 1 1
-103 1 1
-134 1 1
-16 1 1
-378 1 1
-85 1 1
-134 1 1
-25 1 1
-54 3 3
-55 1 1
-67 1 1
-22 1 1
-54 13 13
-55 11 11
-120 1 1
-23 1 1
-51 1 1
-22 1 1
-369 1 1
-273 1 1
-119 6 6
-229 34511 40178
-78 1 1
-22 1 1
-180 1 1
-33 1 2
-26 6 6
-474 1 1
-36 1 1
-151 1 1
-29 1 1
-120 1 1
-23 1 1
-865 1 1
-39 1 1
-330 1 1
-24 1 1
-197 1 1
-69 1 1
-116 3 0
-161 1 1
-38 1 1
-753 1 1
-57 3 3
-145 1 1
-121 1 1
-300 1 1
-147 1 1
-379 1 1
-55 2 2
-65 1 1
-32 1 1
-1008 1 1
-24 1 1
-159 18 18
-659 1 1
-76 0 2
-77 1 3
-65 1 1
-84 1 0
-119 1 1
-15 1 1
-247 4 0
-372 1 0
-1633 1 1
-16 1 1
-221 9772 11561
-315 1 1
-53 1 1
-67 1 1
-91 1 0
-23 1 0
-27 2 2
-66 2 2
-80 0 41
-12 1 1
-158 1 0
-92 2 0
-254 1 1
-43 1 1
-846 6 149
-84 1 1
-29 3 3
-315 17 17
-482 1 1
-29 3 3
-278 1 1
-73 1 1
-2767 1 1
-34 1 1
-192 1 1
-33 1 0
-168 6 0
-276 10 10
-344 1 1
-49 1 1
-109 1 1
-35 3 3
-561 24 27
-923 1 1
-102 1 1
-75 14 14
-266 1 1
-80 2 2
-185 1 0
-1035 1 1
-23 1 1
-417 10 10
-97 1 1
-94 1 1
-492 1 1
-37 5 5
-1429 1 1
-19 1 1
-839 1 1
-96 1 1
-1279 4 0
-683 1 1
-49 1 1
-514 1 1
-28 4 4
-2302 1 1
-42 1 1
-537 2 21
-1555 1 1
-42 0 1
-14 4 4
-86 1 1
-62 1 1
-515 5 1
-330 0 1
-159 0 22
-3841 1 0
-5065 12 12
-97 0 3
-772 1 1
-21 2 1
-1058 0 2
-349 2 0
-1080 6 0
-11 1 3
-53 0 2
-14 1 1
-1035 1 1
-85 1 1
-69 1 1
-27 1 1
-547 7 7
-195 1 1
-41 1 1
-395 1 1
-35 1 1
-73 0 1
-71 1 1
-557 3 3
-30 1 1
-66 49 49
-1310 0 2
-26 2 0
-10 1 15
-36 1 1
-196 1 1
-40 1 1
-141 1 1
-76 1 1
-1480 1 3
-347 1 1
-26 1 1
-231 1 1
-82 3 3
-69 3 0
-441 16 16
-147 1 1
-21 1 1
-3565 0 3
-877 2 0
-1036 1 1
-47 2 1
-3761 12 0
-5345 1 0
-11541 1 0
-1843 0 4
-1157 16 16
-7354 19 0
-736 0 1
-8058 1 0
-4449 21 21
-649 1 0
-2913 0 1
-381 331 0
-6066 0 1
-1968 7 0
-3198 1 0
-667 1 0
-3870 0 1
-36 13 0
-1894 1 1
-40 0 4
-1137 6 0
-211 2 0
-345 1 0
-592 4 4
-1043 4 0
-686 14 0
-1032 0 1
-9035 0 4
-167 0 2
-19472 35 35
-4457 0 3
-1470 0 1
-289 3 0
-3780 41 41
-522 1 0
-2026 8 0
-430 0 1
-631 1 1
-21 1 1
-479 0 1
-697 4 0
-1779 1 1
-27 1 1
-196 4 0
-58 8 0
-2881 1 1
-39 1 1
-120 44 45
-538 1 0
-393 6 6
-3090 1 1
-43 1 1
-1246 1 0
-294 1 1
-27 1 1
-374 3 3
-144 1 1
-190 1 6
-750 1 0
-695 2 0
-1003 11 0
-1185 8 8
-763 0 4
-2737 11 11
-453 1 0
-536 1 1
-43 1 1
-57 1 0
-21 7 0
-3892 0 1
-3177 0 1
-8990 0 2
-2303 1 0
-2850 4 0
-1273 0 2
-5863 1 0
-9593 1 1
-81 1 1
-2777 0 2
-4564 34 34
-674 0 8
-11548 2 0
-6086 0 1
-109 1 1
-2286 0 1
-997 0 18
-3344 1 1
-40 1 1
-842 28 24
-1584 1 0
-1582 0 1
-1670 3 25
-17 0 4
-16 2 0
-6 12 0
-49 1 1
-538 1 1
-26 1 1
-5879 2 4
-2513 0 1
-346 8 8
-222 16 16
-103 1 0
-198 1 3
-539 1 1
-47 1 1
-1154 0 1
-3737 1 2
-370 2 0
-1178 1 1
-78 1 1
-47 0 1
-518 6 0
-646 13 13
-469 1 0
-1072 1 4
-858 1 0
-3674 1 0
-282 1 0
-597 0 6
-505 4 4
-183 1 1
-43 1 1
-1294 1 1
-40 1 1
-572 0 4
-464 0 4
-757 40 40
-1089 2 0
-548 1 0
-1300 0 3
-1839 2 0
-189 1 1
-49 1 1
-1253 1 1
-43 1 0
-498 1 1
-45 4 0
-3538 0 1
-1989 14 14
-1332 2 0
-3586 1 0
-989 1 2
-447 0 4
-40 1 1
-2445 16 17
-291 1 3
-7 1 0
-11 0 1
-41 1 1
-94 1 1
-49 1 1
-1515 6 0
-603 13 13
-163 1 1
-45 1 1
-2050 11 11
-1126 1 1
-16 1 1
-391 1 1
-19 0 1
-932 1 0
-42 1 1
-751 1 0
-287 1 1
-42 1 1
-464 0 4
-4069 5 5
-153 1 0
-514 2 0
-1093 1 1
-41 1 1
-1746 4 4
-1351 1 1
-38 1 1
-682 12 12
-519 0 72
-168 18 18
-146 7 7
-293 1 1
-61 0 1
-43 1 1
-236 1 0
-35 1 1
-152 14 14
-776 0 4
-809 4 0
-155 1 1
-44 1 1
-1068 1 1
-93 1 1
-209 15 15
-1331 0 3
-3912 0 1
-6624 0 4
-375 0 1
-7255 5 0
-419 2 0
-293 1 0
-10397 5 24
-11095 0 1
-1770 4 0
-374 0 4
-7714 1 0
-1229 7 6
-3055 1 0
-5818 1 0
-2415 11 9
-2056 0 1
-955 4 0
-3907 0 2
-16936 0 1
-1044 1 0
-2392 0 1
-158 2 1
-199 0 1
-75 6 6
-2094 8 0
-649 2 0
-373 75 75
-2253 1 0
-15 1 0
-1995 0 2
-818 4 0
-676 0 1
-3171 8 0
-170 0 3
-459 1 1
-37 1 1
-336 1 0
-206 1 1
-26 1 1
-224 15 15
-308 2 1
-82 1 1
-23 1 1
-562 1 1
-80 1 1
-241 0 8
-1530 1 1
-20 1 1
-1372 1 1
-44 1 1
-427 1 1
-20 1 1
-651 105 81
-221 1 1
-45 1 1
-1747 1 1
-27 1 1
-179 1 1
-70 1 1
-173 1 1
-84 0 36
-1864 1 1
-41 1 1
-44 9 0
-1028 1 0
-85 1 1
-21 1 1
-475 0 2
-256 1 1
-31 1 1
-653 1 1
-18 1 1
-62 1 1
-19 1 1
-997 1 1
-22 1 1
-326 1 0
-505 5 4
-386 0 7
-466 13 13
-870 11 12
-134 15 15
-248 0 2
-2281 1 1
-79 1 1
-56 9 6
-498 100 100
-802 1 0
-290 1 1
-38 1 1
-185 1 1
-61 1 1
-944 1 1
-22 1 1
-835 1 1
-66 1 1
-890 0 1
-3503 6 6
-231 0 1
-2136 1 0
-999 1 0
-5220 3 4
-830 1 1
-24 1 1
-1209 1 1
-38 1 1
-7077 1 0
-2939 1 0
-3959 0 2
-3746 0 2
-1011 1 1
-34 1 1
-7443 0 1
-688 2 0
-574 1 1
-29 1 1
-1785 2 0
-16 20 0
-4073 2 0
-136 1 1
-77 1 1
-528 27 0
-253 0 1
-204 1 0
-129 2 0
-811 1 1
-38 1 1
-2347 52 0
-4634 1 0
-856 14 14
-1052 1 1
-28 1 1
-1255 1 1
-36 1 1
-97 0 1
-58 1 1
-1708 1 1
-48 1 1
-958 13 0
-3371 1 1
-37 1 1
-4267 0 15
-1059 0 1
-272 0 20
-168 2 0
-26 4 32
-4090 0 2
-3269 1 1
-17 1 2
-1378 1 0
-1443 0 1
-6206 1 0
-2318 0 1
-7695 2 0
-396 22 12
-918 0 1
-1818 0 1
-28 1 1
-492 1 1
-33 1 1
-326 1 1
-80 1 1
-288 8 17
-2671 0 1
-1099 0 1
-144 1 1
-29 0 1
-2098 0 2
-24 4 0
-1207 4 4
-45 1 1
-757 0 5
-1926 1 1
-40 1 1
-2657 0 1
-414 1 0
-61 0 1
-235 0 2
-2087 0 1
-713 0 4
-58 1 0
-1041 3 0
-36 1 1
-377 1 1
-17 1 1
-948 1 1
-41 1 1
-458 1 1
-21 1 1
-1055 0 1
-8189 4 5
-36 1 1
-102 2 0
-14 1 1
-682 0 6
-147 0 1
-750 0 3
-40 1 1
-2428 0 1
-750 2 0
-473 0 2
-2032 1 0
-3841 1 0
-560 1 0
-1108 1 0
-8087 1 0
-11881 1 1
-30 1 1
-4383 2 0
-6883 49 49
-3146 0 1
-906 2 0
-887 1 1
-80 1 1
-2210 1 0
-905 0 1
-1037 1 0
-5866 0 2
-18 1 1
-582 0 5
-2828 1 0
-847 1 0
-1996 4 0
-3170 1 0
-1751 0 1
-910 2 0
-691 0 1
-32873 0 1
-1722 0 1
-17559 16 24
-1369 29 0
-494 2 0
-4432 0 1
-23680 26 26
-10911 0 1
-920 0 1
-4586 0 2
-2232 1 0
-5718 0 1
-12415 1 1
-51 0 1
-7997 0 2
-1700 1 0
-2697 1 0
-2561 2 0
-1544 0 6
-1613 3 7
-37 9 1
-2113 1 0
-7174 0 34
-7914 1 1
-35 1 1
-5308 1 0
-2303 2 1
-423 7 7
-590 1 0
-24 1 1
-165 6 0
-2848 13 13
-64 0 1
-28 1 1
-723 0 4
-2868 0 1
-731 1 1
-60 1 1
-1012 3 0
-490 29 29
-1225 1 1
-78 1 1
-61 1 0
-2362 11 11
-399 1 0
-1494 16 16
-128 24 24
-530 1 1
-35 1 1
-5276 1 0
-415 0 1
-580 1 2
-1450 22 23
-816 1 0
-1953 1 0
-881 10 1
-885 8 14
-183 14 14
-1139 25 25
-155 1 1
-94 1 1
-419 3 3
-26 1 1
-56 1 0
-69 1 0
-117 1 1
-120 1 1
-42 1 1
-825 0 2
-108 1 1
-24 1 1
-956 3 0
-664 1 1
-41 1 1
-716 4 0
-1731 8 8
-4228 0 1
-5694 3 0
-4493 0 1
-2656 1 0
-3029 4 0
-5688 1 0
-170 2 0
-5972 0 2
-840 0 2
-55 1 1
-28 1 1
-2954 0 1
-4343 6 0
-1663 4 0
-150 1 0
-3128 1 0
-1449 3 0
-1534 1 0
-489 1 0
-431 0 4
-299 2 0
-5082 9 0
-413 0 1
-989 0 2
-4941 0 1
-6655 1 0
-349 8 7
-762 1 1
-29 0 3
-1434 0 1
-1267 0 1
-587 1 1
-22 0 1
-894 28 0
-1343 2 0
-2256 0 1
-4332 0 4
-22 1 1
-12415 12 10
-10485 0 1
-1429 0 12
-625 1 7
-1224 0 10
-1680 4 0
-5169 14 14
-3878 0 8
-2544 0 140
-9238 0 1
-1575 0 3
-1775 1 1
-31 1 1
-1200 1 0
-32 0 3
-797 0 8
-35 0 2
-599 1 1
-22 1 1
-5338 2 0
-1998 0 5
-146 0 4
-12031 0 1
-1993 0 1
-706 2 0
-2735 0 1
-3859 0 4
-4845 0 2
-268 2 0
-827 4 4
-1063 6 6
-7834 2 0
-3195 0 1
-4012 10 0
-6429 0 2
-308 0 1
-808 1 0
-17 8 0
-5472 19 2
-2436 0 14
-820 9 9
-2643 1 1
-32 1 1
-1189 1 0
-5710 0 3
-308 1 0
-4930 0 1
-4308 1 0
-946 82 0
-1790 0 2
-1218 25 0
-52 0 1
-1271 1 1
-33 1 1
-4760 1 0
-4924 0 1
-4817 4 4
-39 1 0
-1116 3715 901
-205 1 0
-1591 5 2
-138 2 2
-16 1 1
-802 0 89
-1600 0 6
-2175 0 5
-606 14 14
-519 1 0
-540 1 1
-40 1 1
-568 2 0
-458 1 1
-41 1 1
-1106 24 62
-818 1 1
-42 1 1
-2266 1 0
-14059 0 4
-5030 1 0
-12630 0 3
-84 9 9
-129 13 18
-564 10 15
-154 1 0
-438 10 10
-38 0 5
-98 11 9
-2034 1 1
-25 1 1
-73 10 10
-70 5 5
-132 1 1
-52 1 1
-599 1 1
-46 1 1
-279 1 1
-18 1 1
-239 3 0
-383 6 0
-224 0 1
-321 15 0
-1783 1 1
-18 3 0
-108 1 1
-60 1 1
-405 16 16
-60 1 1
-16 1 1
-970 1 1
-24 1 1
-424 3 0
-41 1 1
-57 8 8
-285 2 0
-672 1 1
-44 1 4
-103 0 1
-148 1 1
-49 3 0
-146 5 11
-91 1 1
-79 1 1
-94 1 1
-101 1 1
-88 16 16
-117 1 1
-15 1 1
-58 1 1
-93 1 1
-466 1 1
-44 1 1
-160 1 1
-23 1 1
-481 14 14
-181 4 4
-72 1 1
-25 1 1
-82 7 12
-4 0 1
-11 1 4
-20 0 5
-92 1 1
-56 10 0
-80 1 1
-141 2 0
-60 1 1
-372 0 2
-784 1 1
-85 1 1
-109 1 1
-16 1 1
-57 1 1
-92 3 1
-23 1 0
-26 1 1
-74 1 1
-33 1 1
-176 1 1
-25 2 2
-193 1 1
-35 0 1
-383 0 5
-249 1 1
-69 1 1
-98 1 1
-70 1 1
-55 1 1
-143 1 1
-438 1 1
-64 1 1
-53 4 0
-127 3 0
-75 5 5
-45 1 1
-197 1 1
-27 1 1
-116 13 13
-218 15 20
-1107 16 19
-73 1 1
-101 1 1
-123 1 1
-60 1 1
-994 1 1
-43 0 1
-18 1 1
-1215 18 18
-340 1 1
-34 1 1
-1350 16 16
-1417 1 1
-29 1 1
-475 1 1
-48 1 1
-198 10 10
-87 1 1
-18 1 1
-171 7 7
-427 1 1
-21 1 1
-2011 0 3
-17 1 1
-1412 1 1
-24 1 1
-214 8 4
-228 1 1
-34 1 1
-410 16 16
-185 1 1
-24 1 0
-164 0 1
-222 1 1
-25 1 1
-297 10 10
-1171 1 0
-569 19 19
-2755 1 0
-11 1 1
-2502 1 1
-23 1 1
-44 12 0
-2856 0 1
-148 1 1
-36 1 1
-993 2 0
-1251 2 0
-6619 14 14
-1014 4 0
-134 2 9
-818 1 0
-61 1 7
-563 46 0
-78 5 5
-1677 1 1
-49 1 1
-399 1 1
-32 1 1
-790 27 27
-104 1 1
-75 1 1
-1638 1 1
-16 1 1
-92 1 1
-44 1 1
-276 0 13
-1020 1 1
-35 1 1
-389 14 14
-256 1 0
-38 1 3
-631 1 1
-40 1 1
-2356 85 83
-1300 0 5
-511 0 2
-605 1 1
-17 1 1
-880 12 0
-1689 4 0
-2492 1 1
-39 1 1
-641 16 16
-682 0 5
-669 1 1
-25 1 1
-1926 1 1
-39 4 3
-1037 1 1
-40 2 0
-890 6 0
-41 2 0
-498 3 0
-321 0 1
-281 3 0
-450 1 1
-34 1 1
-498 1 1
-28 2 1
-280 0 2
-648 1 1
-47 1 1
-1002 4 0
-120 1 1
-1538 0 1
-75 1 1
-37 1 1
-510 91 91
-60 18 18
-2075 1 1
-19 1 1
-2429 1 1
-21 1 1
-107 1 0
-2786 0 2
-31 5 5
-1973 12 0
-3118 1 0
-246 0 1
-33 1 1
-6752 1 0
-822 2 9
-606 1 1
-18 1 1
-3920 1 1
-37 0 2
-4497 10 13
-301 20 20
-2130 1 1
-16 3 0
-1843 0 4
-3780 3 0
-850 0 1
-2774 0 3
-2065 0 1
-20 1 1
-1400 1 0
-3243 0 15
-1336 5 0
-448 49 49
-121 7 7
-1507 8 7
-422 1 0
-2184 0 1
-304 0 2
-19 0 1
-101 1 1
-417 3 3
-22 1 1
-672 4 4
-31 1 1
-150 1 1
-38 1 1
-161 5 0
-17 1 1
-72 1 0
-106 1 1
-463 1 1
-94 1 1
-138 3 4
-185 1 1
-29 1 1
-220 15 15
-167 1 1
-32 1 1
-93 1 3
-217 1 1
-23 1 1
-137 9 9
-62 0 3
-353 1 1
-27 1 1
-117 9 9
-421 1 1
-47 1 1
-124 0 1
-997 6 0
-54 5 5
-764 1 1
-45 1 1
-1431 7 7
-387 6 6
-1103 0 36
-767 1 1
-31 1 3
-208 5 5
-1610 1 1
-23 1 1
-779 0 8
-324 0 2
-45 1 1
-264 0 3
-45 1 1
-250 1 1
-18 1 1
-517 33 0
-117 1 1
-42 1 1
-550 1 1
-20 1 1
-671 1 1
-68 1 1
-89 1 1
-104 1 1
-172 0 1
-124 0 1
-522 0 1500
-466 5 5
-32 1 0
-171 1 1
-19 1 1
-67 1 1
-22 1 1
-654 1 1
-25 1 1
-68 1 1
-21 4 0
-1588 1 1
-66 1 1
-401 0 1
-186 1 1
-21 1 1
-168 0 1
-686 3 0
-19 1 1
-127 1 1
-29 1 1
-234 1 1
-30 1 1
-141 0 2
-33 1 1
-673 1 1
-89 1 1
-161 16 16
-504 20149 20139
-1269 1 1
-40 1 1
-327 1 1
-24 1 1
-172 2 2
-27 11 15
-381 10 11
-376 1 1
-45 1 1
-121 1 1
-62 1 1
-289 1 1
-26 1 1
-191 1 1
-20 11 11
-425 1 1
-37 1 1
-296 1 1
-149 1 1
-284 1 1
-37 1 1
-705 1 12
-106 12 12
-306 1 1
-24 1 1
-1299 1 1
-47 1 1
-2026 1 1
-20 1 1
-133 1 0
-9803 0 4
-15871 3 0
-2464 1 1
-24 1 1
-879 1 1
-73 1 1
-89 1 1
-42 1 1
-108 1 1
-43 0 1
-26 1 1
-511 5 6
-605 19531 20105
-55 1 1
-37 0 2
-89 1 1
-51 1 1
-85 1 1
-78 1 1
-173 1 1
-51 1 1
-90 3 3
-95 1 1
-32 1 1
-53 1 1
-231 1 0
-82 2 0
-27 0 1
-44 1 0
-96 10 7
-132 1 1
-233 1 1
-257 1 1
-56 5 5
-237 1 1
-141 1 1
-92 1 1
-154 7 7
-3208 1 1
-33 1 1
-671 1 1
-21 1 1
-955 0 3
-130 1 1
-26 1 1
-288 8 8
-218 0 3
-1076 8 0
-609 10041 10021
-240 2 2
-66 1 1
-228 1 1
-23 1 1
-1612 1 1
-21 1 1
-261 1 1
-99 1 1
-128 1 1
-15 1 1
-77 9 9
-618 8 8
-84 4 6
-438 1 1
-140 1 1
-158 4 3
-277 12 12
-165 4 4
-36 1 1
-253 1 1
-59 1 1
-910 0 1
-915 4 5
-276 15 15
-682 1 1
-28 1 1
-1483 13 13
-203 1 0
-52 1 1
-48 1 1
-229 12 12
-68 15 15
-83 1 1
-39 1 1
-194 1 1
-24 1 1
-251 8 8
-619 0 4
-15 1 1
-690 1 1
-28 1 1
-54 0 1
-463 1 1
-30 1 1
-449 1 1
-54 1 1
-58 5 5
-979 1 0
-318 1 1
-28 1 1
-898 10 10
-100 1 1
-22 1 1
-446 1 1
-74 1 1
-273 1 1
-19 1 1
-333 1 1
-44 1 1
-220 1 1
-56 2 0
-209 1 1
-70 1 1
-223 0 20
-220 1 1
-31 1 1
-56 1 1
-111 1 1
-220 1 1
-89 1 1
-119 1 1
-113 2 0
-195 1 1
-46 1 1
-184 1 1
-60 0 4
-76 0 4
-53 3 1
-43 1 1
-153 1 1
-53 1 1
-195 6 0
-60 1 1
-278 1 0
-42 1 1
-124 10014 10005
-302 1 1
-24 1 1
-135 20 19
-55 1 1
-40 1 1
-175 1 1
-46 1 1
-52 1 1
-19 1 1
-277 1 1
-88 1 1
-172 1 1
-26 1 1
-129 1 1
-35 1 1
-55 9 9
-318 3 3
-46 1 1
-101 8 8
-4653 1 1
-38 1 1
-817 2 0
-256 1 1
-27 1 1
-339 1 1
-48 1 1
-54 10 10
-1393 3 0
-1491 2 0
-1983 16 0
-167 0 4
-3886 7 8
-535 1 1
-16 1 1
-1555 3 0
-3131 1 1
-17 1 1
-4196 1 0
-14974 0 1
-3514 0 4
-29 1 1
-123 0 2
-51 33 0
-121 0 133
-80 1 10
-26 60 4
-52 13 0
-20 0 2
-19 2 0
-22 4 156
-57 156 3
-61 0 2
-29 20 0
-42 11 0
-21 2 0
-50 4 6
-31 1 3
-23 1 53
-25 0 32
-66 1 55
-11 0 2
-13 0 41
-68 1 42
-23 1 3
-12 2 0
-17 1 29
-51 17 13
-18 2 0
-28 2 0
-26 2 0
-158 1 25
-102 0 82
-99 280 0
-53 21 0
-5064 0 2
-7569 2 0
-2189 0 1
-85 1 1
-31 0 4
-399 14 14
-408 0 1
-681 0 5
-184 1 1
-20 1 1
-64 1 1
-29 1 0
-9 2 0
-442 4 0
-342 1 1
-24 1 1
-131 1 1
-198 1 1
-370 0 1
-34 1 1
-447 21 20
-259 1 1
-23 0 1
-121 2 0
-2257 1 1
-22 1 1
-811 1 1
-27 1 1
-95 18 18
-631 0 5
-843 0 2889
-55 0 88
-1189 0 2
-2274 1 0
-752 4 0
-164 1 1
-55 1 1
-1033 10 10
-683 1 1
-57 1 1
-3578 1 1
-34 1 1
-1446 1 0
-460 1 1
-31 0 1
-6 1 1
-163 1 1
-22 1 1
-81 1 1
-27 1 1
-548 1 1
-61 1 1
-1169 1 1
-41 1 1
-1568 14 14
-4889 1 1
-62 1 1
-530 17 17
-394 1 1
-40 7 0
-57 12 12
-69 2 2
-39 1 1
-70 1 1
-22 0 3
-2307 1 1
-30 1 1
-411 1 1
-104 1 1
-375 26 27
-1218 1 1
-35 1 1
-85 1 1
-20 6 0
-687 1 1
-34 1 1
-268 13 13
-74 1 1
-47 2 0
-69 1 1
-49 1 1
-73 1 1
-48 1 1
-218 1 1
-42 1 1
-197 1 1
-41 1 1
-313 1 1
-40 1 1
-476 1 1
-29 1 1
-185 1 1
-35 1 1
-594 1 1
-24 1 1
-220 26 0
-245 0 1
-261 13 13
-89 1 1
-90 1 1
-224 1 1
-201 1 1
-306 1 1
-29 5 5
-121 1 1
-31 1 1
-109 1 1
-25 1 1
-168 1 1
-19 1 1
-93 12 11
-132 1 0
-113 1 1
-30 1 1
-56 9 9
-300 1 1
-50 2 2
-96 1 1
-43 1 1
-76 1 1
-44 1 1
-197 1 1
-91 7 1
-119 0 9
-392 5 5
-89 1 1
-428 11 11
-260 1 1
-23 1 0
-10 1 1
-70 1 1
-65 2 0
-16 0 19
-28 1 1
-208 1 1
-70 1 1
-149 0 3
-51 29 29
-163 1 1
-55 1 1
-63 17 17
-1208 1 1
-98 1 1
-162 1 1
-45 1 1
-148 14 14
-51 5 5
-209 4 4
-1242 1 1
-42 5 0
-87 1 1
-522 0 3
-305 0 1
-1379 0 2
-390 0 15
-72 1 1
-16 1 1
-270 1 0
-280 7 7
-2763 20 20
-674 10 10
-1375 14 0
-327 2 0
-107 1 1
-629 16 16
-54 4 4
-680 16 16
-395 1 1
-42 1 1
-1763 1 1
-46 1 1
-282 1 1
-39 1 1
-860 1 1
-26 1 1
-745 0 2
-2081 2 0
-817 4 4
-202 1 1
-48 1 1
-168 1 1
-53 1 1
-379 10 10
-1178 14 14
-132 5 0
-555 1 1
-65 1 1
-550 1 1
-21 1 1
-462 1 1
-43 1 1
-121 1 1
-48 0 3
-15 1 5
-1404 0 1
-450 4 0
-626 1 0
-304 1 1
-39 1 1
-564 1 1
-45 1 1
-303 2 0
-409 1 1
-18 1 0
-858 2 0
-2168 0 1
-54 1 1
-20 1 1
-524 0 1
-410 10 10
-106 1 14
-2419 18 14
-64 1 1
-31 1 1
-185 0 5
-1646 1 1
-20 1 1
-227 1 1
-37 1 1
-500 1 0
-136 3 4
-8239 1 1
-23 1 1
-1114 0 2
-688 0 1
-901 18 18
-4781 0 4
-815 0 1
-5069 0 5
-415 0 2
-352 0 1
-1085 11 11
-1099 0 1
-991 0 1
-845 1 1
-32 0 2
-5751 0 3
-1553 1 1
-60 1 1
-278 0 1
-30 1 1
-1855 0 2
-958 0 1
-66 0 16
-2109 0 2
-1265 0 1
-17312 0 4
-1875 0 1
-2157 1 0
-915 0 6
-4940 1 0
-2649 0 1
-3331 2 0
-2276 14 0
-3128 0 4
-3496 1 0
-966 0 1
-3597 1 0
-1647 0 3
-1182 1 0
-654 0 3
-2049 1 0
-6838 1 1
-39 1 1
-186 1 0
-2718 1 1
-30 1 1
-160 11 11
-4954 0 1
-420 1 1
-123 1 1
-156 0 4
-219 4 0
-195 1 0
-4402 2 0
-4295 1 0
-4207 20 20
-468 0 1
-30 1 1
-6025 1 0
-4179 1 0
-19834 0 1
-11605 0 1
-4121 2 0
-2863 0 2
-4890 1 0
-5576 0 6
-4104 4 0
-19858 4 0
-1616 0 3
-1647 4 1
-36 0 12
-2213 0 14
-414 0 1
-458 20 20
-2860 0 3
-678 3 4
-292 2 0
-1922 0 1
-913 0 1
-2720 1 0
-1111 3 0
-2589 0 8
-9425 1 0
-1403 0 2
-1964 0 12
-4433 0 1
-1569 0 1
-7209 1 1
-41 1 1
-2257 1 0
-3001 0 1
-1845 1 0
-1593 0 1
-497 0 2
-6109 0 1
-2019 2 0
-921 0 1
-241 1 0
-5473 1 0
-2213 2 0
-1974 8 0
-4952 0 1
-6146 2 0
-953 1 0
-4141 0 1
-4244 5 0
-152 0 2
-209 0 1
-2400 0 10
-785 2 0
-1733 0 1
-554 1 0
-128 0 2
-3051 0 1
-8577 0 1
-1503 0 1
-1705 0 3
-2052 17 17
-998 177 0
-2804 1 0
-1925 1 0
-9215 0 1
-971 8 0
-36021 1 0
-8016 29 27
-3890 0 1
-67913 1 1
-18 1 6368
-73 1 32739
-14676 1 1
-19 1 1
-22867 1 1
-20 1 1
-5638 5 0
-47 12 0
-11313 0 1
-1769 0 1
-8355 0 3
-4114 0 2
-1403 1 0
-5140 0 1
-490 0 1
-219 1 0
-3483 1 0
-8939 1 1
-44 1 1
-10813 0 2
-7480 2 0
-617 1 0
-1464 0 1
-500 0 2
-1466 1 0
-527 5 0
-3593 0 1
-374 0 1
-2946 22 22
-698 0 1
-2149 1 0
-311 2 0
-6570 1 0
-962 1 0
-23 1 1
-2647 4 0
-588 1 1
-21 1 1
-3256 28 20
-870 0 1
-644 1 0
-602 2 1
-3730 1 1
-45 1 1
-12848 7 7
-7306 0 3
-6647 45 45
-1365 1 1
-63 1 1
-4166 1 0
-1887 10 0
-2949 1 1
-31 0 1
-669 1 0
-2190 2 0
-2081 0 2
-373 0 6
-421 4 4
-1460 0 1
-1699 0 8
-2882 2 0
-147 0 1
-1656 1 1
-27 1 1
-1828 0 2
-4066 35 38
-361 17 17
-1254 6 0
-1643 0 2
-2542 0 1
-848 2 1
-2117 0 2
-119 1 1
-44 1 1
-1104 0 1
-415 0 12
-634 18 1
-377 6 7
-227 6 0
-449 13 13
-895 0 17
-457 18 18
-663 0 3
-382 1 1
-26 1 1
-135 0 1
-105 1 1
-25 1 1
-620 2 0
-290 5 5
-375 1 1
-30 0 4
-98 1 0
-20 17 4
-3824 28 0
-39 4 0
-28 4 0
-44 4 0
-1898 9 9
-221 0 2
-10522 30 0
-783 1 1
-59 1 1
-94 1 1
-21 1 1
-491 1 1
-49 1 1
-289 2 0
-120 0 1
-37 1 1
-112 1 1
-21 1 1
-183 16 16
-73 2 0
-1007 1 1
-38 0 1
-79 1 1
-48 1 1
-561 1 1
-29 1 1
-145 5 5
-576 12 12
-834 1 0
-846 5 7
-34 1 1
-417 10 11
-55 1 1
-40 1 1
-110 1 1
-47 1 1
-351 1 1
-69 1 1
-53 1 1
-91 1 1
-260 1 1
-36 0 1
-604 1 0
-169 0 1
-2118 1 1
-34 1 1
-147 1 1
-213 1 1
-67 1 1
-31 1 1
-566 1 0
-17 1 1
-763 1 1
-34 1 1
-671 5 0
-41 2 2
-98 0 1
-449 0 2
-61 1 1
-38 1 1
-202 1 1
-44 1 1
-190 1 0
-46 4 4
-51 0 4
-476 1 1
-17 1 1
-212 1 1
-26 1 1
-485 1 1
-25 1 1
-263 1 1
-26 1 1
-1327 4 0
-44 1 0
-2397 1 1
-44 1 1
-4146 14 14
-901 0 1
-1769 14 14
-1721 1 0
-1125 1 0
-254 1 0
-427 0 1
-30 1 1
-111 0 2
-52 0 8
-528 44 0
-969 1 1
-10 1 0
-28 1 1
-140 1 1
-43 1 1
-1989 2 1
-598 1 1
-87 0 4
-124 1 0
-4840 1 1
-28 7 4
-505 0 2
-24 1 1
-5134 4 0
-543 1 0
-18 1 1
-97 1 1
-29 1 3
-101 6 0
-148 13 7
-1346 0 1
-128 7 0
-49 0 1
-876 2 0
-286 5 5
-184 0 1
-84 5 5
-365 9 9
-981 1 1
-11 1 1
-734 4 0
-563 4 0
-244 9 9
-379 1 1
-17 1 1
-49 2 0
-95 1 1
-30 1 1
-147 1 1
-37 0 6
-340 1 2
-58 1 1
-332 0 2
-233 6 9
-156 0 1
-26 1 1
-439 4 0
-34 0 2
-508 5 0
-96 1 1
-34 1 1
-1267 63 63
-590 1 1
-24 4 5
-1055 13 13
-135 0 1
-194 1 1
-61 1 1
-384 6 6
-2756 1 1
-19 1 1
-99 15 15
-1754 2 3
-2238 1 1
-31 1 1
-3002 4 0
-2156 15 15
-855 14 13
-442 5 5
-2022 6 6
-506 0 2
-1110 0 1
-2578 0 2
-4864 1 1
-36 1 0
-3187 1 1
-16 1 1
-184 1 1
-18 1 1
-1636 0 7
-23 1 1
-527 1 1
-39 1 1
-653 3 0
-227 1 1
-18 1 1
-102 7 7
-109 0 323
-91 1 0
-124 0 15
-621 0 4
-553 12 12
-463 1 1
-40 1 1
-372 1 1
-25 1 1
-188 12 12
-357 0 1
-250 0 5
-4193 0 4
-967 1 1
-76 1 1
-3236 4 4
-529 7 7
-246 4 0
-160 1 1
-34 0 3
-1469 0 2
-499 1 0
-937 1 1
-45 1 1
-356 71 65
-2127 0 1
-491 1 0
-80 1 1
-72 2 0
-255 6 6
-728 14 11
-702 3 0
-290 0 2
-210 19 1
-473 1 1
-42 4 0
-219 0 1
-348 1 1
-83 1 1
-851 0 16
-72 13 0
-246 1 1
-47 4 0
-410 1 0
-93 0 12
-225 0 16
-428 1 0
-4 6 0
-324 0 1
-3060 0 16
-1305 1 1
-29 1 1
-3094 0 7
-600 0 2
-5495 1 1
-47 1 1
-1247 49 55
-4351 1 1
-15 1 1
-2011 6 14
-8378 2 0
-295 0 17
-4583 1 0
-4132 0 4
-924 4 3
-1751 0 2
-1060 12 12
-380 0 2
-425 8 0
-84 0 1
-244 1 1
-28 1 1
-221 4 0
-348 1 1
-37 11 11
-50 1 1
-180 1 1
-348 1 1
-20 1 1
-1714 1 1
-79 1 1
-729 1 1
-44 1 0
-78 1 1
-112 1 1
-23 1 1
-55 9 9
-1044 1 1
-27 1 1
-494 1 1
-32 1 1
-237 1 1
-27 1 1
-1422 4 4
-413 7 1
-710 8 0
-185 0 2
-966 1 0
-13 15 1
-251 1 1
-47 1 1
-285 1 1
-103 1 1
-977 1 1
-41 1 0
-97 1 1
-131 1 0
-307 1 1
-47 1 1
-1070 1 1
-69 1 1
-382 0 1
-167 1 1
-35 1 1
-161 1 1
-30 1 1
-1068 18 0
-1173 1 1
-32 1 1
-59 1 1
-12 1 0
-18 1 1
-55 0 22
-72 1 1
-2806 1 1
-15 1 1
-1395 1 0
-157 13 0
-536 8 8
-101 1 1
-21 1 1
-147 8 8
-638 1 1
-18 1 1
-183 15 15
-990 0 12
-21 1 1
-145 0 1
-332 1 1
-31 1 1
-231 22 5
-39 1 1
-414 9 9
-93 1 1
-63 1 1
-739 0 2
-632 1 1
-74 1 1
-138 5 5
-128 0 1
-294 1 1
-45 1 1
-679 6 6
-1756 0 34
-560 27 27
-1608 5 0
-219 1 1
-134 0 3
-81 1 1
-82 0 1
-357 1 1
-28 1 1
-670 7 9
-270 0 1
-891 13 33
-257 4 0
-80 0 4
-130 2 0
-2504 42 42
-1226 1 1
-44 1 1
-2256 0 1
-80 12 0
-5544 1 0
-428 13 13
-77 4 4
-63 1 1
-64 13 19
-178 10023 10000
-157 3 3
-109 1 1
-180 1 1
-56 1 1
-169 1 0
-93 1 1
-33 2 2
-72 1 1
-30 1 1
-267 25 25
-65 1 1
-19 2 0
-108 27 27
-218 1 1
-37 1 1
-477 11 11
-93 1 1
-30 7 5
-242 0 1
-171 1 1
-29 1 1
-218 0 9
-241 1 1
-55 4 4
-88 1 1
-99 1 1
-57 0 1
-523 12 16
-399 1 1
-50 1 1
-389 1 1
-71 4 4
-173 12 12
-92 1 1
-20 1 1
-132 0 5
-15 1 1
-75 1 1
-26 5 5
-119 11 11
-542 1 1
-23 2 2
-254 1 1
-34 1 1
-172 1 1
-45 1 1
-95 11 11
-127 23 23
-64 1 1
-95 1 1
-390 1 1
-52 1 1
-170 1 1
-16 5 0
-30 1 1
-599 1 1
-119 1 1
-85 1 1
-75 1 1
-286 4 4
-61 1 1
-286 9 9
-429 1 1
-21 1 1
-53 1 1
-44 1 1
-77 165084 190027
-5156 0 1
-1680 1 1
-88 1 1
-4502 0 1
-46 1 1
-800 4 4
-23 1 1
-1305 2 0
-136 0 1
-4941 0 1
-547 0 1
-70 8 8
-293 1 1
-35 1 1
-1165 4 0
-6662 1 1
-121 1 1
-92 0 8
-214 1 1
-35 1 1
-108 1 0
-1063 0 1
-1017 1 1
-20 0 6
-1725 0 1
-150 5 5
-33 1 0
-12 1 1
-349 1 1
-24 0 1
-1562 1 1
-31 1 1
-2513 0 1
-73 36 36
-305 1 1
-27 1 1
-543 1 1
-47 4 28
-4874 0 3
-599 10 10
-137 1 0
-7 0 4
-54 1 1
-2497 1 1
-166 1 1
-637 3 3
-46 1 1
-74 4 4
-414 1 1
-48 1 1
-75 4 4
-153 0 26
-93 1 1
-39 1 0
-58 1 1
-51 1 1
-145 9 9
-29 1 1
-55 1 1
-427 1 0
-141 1 1
-87 1 1
-20 1 1
-89 3 3
-141 18 5
-48 1 1
-87 14 14
-173 1 1
-68 1 1
-54 1 1
-51 4 0
-22 1 0
-52 1 1
-171 1 1
-109 3 1
-6 0 2
-205 1 1
-54 10064 10083
-76 3 1
-197 15 15
-77 1 1
-70 1 1
-178 1 1
-60 1 1
-210 1 1
-28 1 1
-62 1 1
-33 1 1
-70 0 1
-202 1 1
-60 1 1
-106 2 0
-176 1 1
-79 0 1
-50 1 1
-50 3 3
-207 1 1
-272 5 5
-243 1 1
-84 1 1
-98 1 1
-50 5 5
-77 1 1
-74 1 1
-20 0 1
-143 1 1
-45 0 1
-4 1 1
-1088 1 1
-35 1 1
-320 1 1
-22 1 1
-275 1 1
-47 1 1
-370 19 19
-119 1 6
-51 1 1
-21 1 1
-244 0 1
-345 1 1
-24 1 1
-181 1 1
-61 3 3
-542 1 1
-16 1 1
-312 1 0
-353 4 3
-279 323 0
-86 1 1
-49 1 1
-342 1 1
-44 0 2
-222 1 1
-37 1 1
-588 8 8
-593 47 47
-359 1 1
-25 1 1
-2054 1 0
-2510 1 0
-5040 11 12
-1489 9 9
-3292 1 0
-1449 1 1
-21 1 1
-6768 1 0
-706 2 0
-7107 1 1
-38 1 1
-1163 1 1
-35 1 1
-435 1 1
-60 1 1
-325 0 1
-254 1 1
-43 1 1
-210 1 1
-7 1 0
-47 1 1
-130 4 4
-34 1 1
-208 1 1
-39 2 2
-526 1 1
-36 1 1
-99 9 7
-20 1 1
-73 1 1
-62 1 1
-425 1 1
-43 1 1
-811 1 1
-38 1 1
-362 1 1
-49 1 1
-109 1 1
-19 1 1
-79 1 1
-29 0 1
-26 1 1
-252 1 1
-75 1 1
-441 1 1
-66 1 1
-389 13 13
-67 7 7
-1185 0 311
-64 6 6
-389 31 31
-247 1 1
-38 1 1
-79 1 0
-553 1 1
-30 1 1
-433 1 1
-16 3 0
-1133 12 12
-262 5 5
-276 1 0
-960 14 14
-272 1 1
-41 1 1
-196 1 0
-1424 18 19
-314 1 1
-22 1 1
-345 1 1
-23 3 0
-245 1 1
-78 1 1
-77 1 1
-779 1 1
-32 1 1
-247 1 1
-48 1 1
-778 2 0
-226 1 1
-61 1 1
-867 0 1
-53 1 1
-397 1 1
-12 4 0
-46 1 1
-602 1 1
-35 1 1
-422 1 1
-49 1 1
-789 1 1
-37 1 1
-268 0 2
-589 8 8
-366 12 20
-1651 2 7
-19 1 1
-417 1 1
-37 1 1
-812 1 1
-33 3 0
-1351 18 18
-2186 1 1
-86 1 1
-1433 1 1
-39 1 1
-83 0 1
-238 0 1
-171 1 1
-7 2 1
-67 1 1
-596 1 1
-29 1 1
-144 4 6
-417 1 0
-88 1 1
-24 1 1
-390 18 18
-496 14 21
-145 1 1
-46 1 1
-310 1 1
-35 1 1
-214 1 1
-38 1 1
-206 1 1
-37 1 0
-240 1 1
-32 1 1
-469 1 1
-32 1 1
-208 1 1
-21 1 1
-343 1 1
-17 1 1
-88 1 1
-58 6 0
-169 1 1
-22 1 1
-162 0 1
-196 0 2
-500 6 5
-108 1 1
-40 2 0
-50 1 1
-111 1 0
-21 0 1066
-175 5 5
-155 1 1
-44 1 1
-11005 0 1
-6280 1 1
-48 1 1
-1173 1 1
-19 1 1
-2664 0 1
-351 1 0
-1059 14 14
-593 0 1
-869 16 16
-23065 2 0
-2197 0 1
-949 0 1
-15048 0 1
-606 1 0
-7820 0 4
-14669 1 0
-14708 0 1
-16326 0 1
-304 18 18
-388 2 0
-194 1 1
-49 1 1
-262 0 1
-92 1 1
-10677 2 0
-4856 3 0
-7447 6 6
-421 1 0
-884 6 0
-17 1 0
-3075 1 0
-1610 12 12
-13049 3 1
-3762 2 0
-601 2 0
-2461 0 2
-5154 1 0
-1604 0 16
-3338 26 26
-225 0 1
-1488 1 0
-1196 0 2
-683 0 1
-1218 1 0
-221 1 1
-22 1 1
-296 4 4
-1456 23 41
-880 1 12
-2490 1 0
-151 1 1
-33 1 1
-2809 4 4
-3645 1 1
-17 1 1
-3496 2 0
-154 1 1
-29 1 1
-158 0 1
-5981 1 1
-32 1 1
-1041 0 2
-174 9 0
-1383 0 1
-389 1 2
-1570 2 0
-3993 4 0
-4576 87 87
-142 8 8
-2203 20 24
-2009 1 1
-39 1 1
-489 1 1
-17 1 1
-628 1 1
-124 1 1
-1607 1 1
-23 1 1
-1021 0 8
-1249 0 20
-46 0 32
-46 6 0
-24 0 10
-7679 1 1
-44 1 1
-580 1 1
-28 1 1
-264 1 1
-65 0 1
-15 1 1
-1513 28 28
-830 19 19
-57 1 1
-21 1 1
-231 1 1
-94 1 1
-105 1 1
-208 5 5
-124 1 1
-112 3 3
-207 1 1
-38 1 1
-244 1 1
-60 1 1
-98 1 1
-50 1 1
-256 29 29
-157 1 1
-33 1 1
-143 1 1
-59 1 1
-51 1 1
-45 1 0
-73 1 1
-81 1 1
-270 1 1
-272 1 1
-232 1 1
-94 1 1
-3189 0 176
-834 0 35
-303 0 51
-321 1 0
-17170 0 1
-321 1 1
-25 1 1
-679 1 1
-33 1 1
-990 11 11
-131 8 8
-79 9 9
-1284 9945 10022
-2039 8 23
-491 1 1
-32 1 1
-85 1 1
-41 1 1
-480 1 1
-74 2 2
-1108 59 0
-70 10 10
-325 11 11
-879 1 1
-34 1 1
-524 1 1
-25 1 1
-202 17 17
-1154 1 1
-26 1 1
-89 17 17
-87 1 1
-39 1 1
-950 1 1
-15 2 2
-51 1 1
-81 1 1
-180 1 0
-187 1 1
-37 1 1
-467 1 1
-19 1 1
-755 0 2
-81 3 1
-16 1 1
-67 6 6
-84 1 1
-37 2 0
-31 0 28
-15 0 37
-266 14 14
-372 1 1
-68 1 1
-462 1 1
-46 1 1
-563 19 0
-217 9 9
-363 1 1
-22 1 1
-884 1 1
-40 1 1
-179 1 1
-42 1 1
-94 6 6
-922 1 1
-30 1 1
-481 0 3
-7925 15 11
-333 5 0
-1235 6 6
-355 1 1
-27 1 1
-515 1 0
-1077 11 0
-1521 1 0
-38 1 1
-119 1 1
-58 1 1
-63 4 3
-385 1 1
-49 1 1
-77 44 46
-87 11 11
-190 2 2
-45 1 1
-373 1 1
-47 1 1
-77 10 10
-186 1 1
-24 1 1
-1140 1 0
-214 1 1
-34 1 1
-89 1 1
-36 1 1
-288 0 1
-544 0 331
-320 1 0
-199 1 1
-16 1 1
-112 1 1
-29 1 1
-783 0 3
-311 1 1
-38 1 1
-59 1 1
-68 1 1
-52 1 1
-98 1 1
-166 7 7
-698 1 1
-68 1 1
-165 0 1
-114 1 1
-92 0 1
-14 1 1
-215 1 1
-81 1 1
-792 1 1
-31 1 1
-54 1 1
-44 1 1
-179 1 1
-26 1 1
-200 1 1
-30 1 1
-639 7 7
-505 40 42
-549 12 0
-19 1 1
-2184 1 0
-840 1 1
-69 1 1
-966 21 21
-33 12 0
-56 1 1
-94 1 1
-237 11 9
-189 1 1
-47 1 1
-318 3 0
-80 1 1
-94 5 1
-32 1 1
-126 16 16
-83 1 1
-47 1 1
-104 6 5
-56 1 1
-68 1 1
-417 12 13
-636 0 2
-30 1 1
-694 0 4
-95 1 1
-28 1 1
-1358 1 1
-19 1 1
-68 1 1
-97 1 1
-155 15 15
-323 1 7
-158 2 0
-42 6 0
-59 1 1
-314 14 14
-94 1 1
-64 1 1
-637 1 1
-21 1 1
-144 2 1
-229 11 5
-410 1 1
-96 1 1
-272 1 1
-22 1 1
-118 1 1
-44 1 1
-96 1 1
-48 1 1
-414 22 22
-373 13 13
-554 1 1
-87 10 0
-313 1 1
-37 1 1
-122 17 18
-179 1 1
-40 1 1
-591 8 8
-129 1 0
-70 1 1
-71 1 0
-73 10 6
-12 1 1
-203 0 6
-24 2 0
-45 4 0
-46 1 1
-186 9 9
-87 1 1
-28 1 1
-3625 0 1
-71 1 1
-126 1 1
-34 1 1
-532 0 2
-696 2 0
-555 1 7
-287 1 1
-30 0 3
-946 0 1
-88 1 1
-60 12 0
-12546 1 1
-37 1 0
-2071 0 1
-1253 9 9
-2003 0 1
-24677 0 2
-6212 1 1
-26 1 1
-816 0 4
-13602 18 15
-2375 2 0
-1957 2 0
-2394 6 0
-1561 0 1
-2805 4 0
-12333 8 0
-835 0 1
-426 0 27
-12156 0 18
-6903 2 0
-21807 3 0
-1588 1 0
-2605 1 1
-23 1 1
-11252 8 0
-298 6 7
-946 2 0
-232 0 1
-501 1 0
-4748 0 4
-770 0 7
-914 0 1
-295 1 0
-214 3 0
-121 0 1
-784 0 1
-2512 0 1
-4476 3 0
-926 0 1
-189 2 0
-3543 2 0
-893 1 1
-46 1 1
-1296 0 1
-153 0 1
-336 5 0
-228 1 1
-45 1 1
-207 3 0
-322 0 1
-658 1 0
-1516 3 0
-1025 0 13
-1518 0 1
-591 10 10
-3384 0 2
-182 12 0
-328 1 0
-301 0 1
-994 1 1
-18 0 6
-1743 0 1
-2350 22 23
-1548 0 7
-1976 1 0
-199 0 1
-5922 12 12
-873 0 3
-3080 12 8
-322 1 0
-490 1 0
-3602 1 0
-482 1 0
-3178 1 0
-5157 0 10
-753 0 1
-885 20 0
-1746 10 0
-4045 6 1
-3520 5 13
-2048 0 1
-3529
-
-chain 323865 chr6_cox_hap1 4731698 + 1267152 1270823 chr12 133851895 - 763369 785145 206180
-2772 0 815
-201 0 17291
-643 1 0
-54
-
-chain 65284 chr6_cox_hap1 4731698 + 2460102 2460796 chr6 171115067 - 140105134 140105832 1936071
-178 0 4
-516
-
-chain 59092 chr6_cox_hap1 4731698 + 4004481 4005101 chr4 191154276 + 48364786 48365406 2142970
-620
-
-chain 52987 chr6_cox_hap1 4731698 + 2674042 2675969 chr3 198022430 - 151830192 151832103 2402006
-102 557 556
-77 395 393
-169 221 221
-81 15 15
-81 35 35
-55 44 31
-95
-
-chain 40067 chr6_cox_hap1 4731698 + 3843208 3843655 chr1 249250621 - 189436883 189437330 3283815
-379 3 3
-65
-
-chain 34258 chr6_cox_hap1 4731698 + 2746095 2746514 chrX 155270560 - 17905933 17906346 3956727
-73 15 15
-155 1 1
-20 6 0
-17 1 1
-131
-
-chain 30865 chr6_cox_hap1 4731698 + 3996373 3996892 chr6 171115067 + 32713281 32713770 4500603
-73 89 59
-184 77 77
-96
-
-chain 30808 chr6_cox_hap1 4731698 + 1446736 1447059 chr11 135006516 - 73898390 73898713 4511271
-323
-
-chain 29563 chr6_cox_hap1 4731698 + 4089902 4090211 chr1 249250621 - 75305559 75305868 4853755
-309
-
-chain 29490 chr6_cox_hap1 4731698 + 3888227 3888535 chr20 63025520 - 21266962 21267270 4884719
-308
-
-chain 23990 chr6_cox_hap1 4731698 + 1313393 1314169 chr7 159138663 - 51241795 51242737 7706852
-178 101 101
-72 385 551
-40
-
-chain 19279 chr6_cox_hap1 4731698 + 2759716 2759948 chr5 180915260 + 25289600 25289832 11061062
-91 17 17
-124
-
-chain 18106 chr6_cox_hap1 4731698 + 3844292 3845362 chr7 159138663 + 50640514 50641583 3599691
-33 446 444
-74 250 251
-5 55 55
-48 69 69
-90
-
-chain 17763 chr6_cox_hap1 4731698 + 3840247 3840451 chr6 171115067 - 2083149 2083361 12325354
-52 0 8
-26 2 2
-124
-
-chain 17263 chr6_cox_hap1 4731698 + 3890221 3890428 chr4 191154276 + 3927369 3927573 12785973
-50 3 0
-26 4 4
-124
-
-chain 16283 chr6_cox_hap1 4731698 + 3267732 3267909 chr2 243199373 + 128545205 128545381 580296
-28 2 1
-147
-
-chain 16000 chr6_cox_hap1 4731698 + 3842640 3845155 chr5 180915260 - 144997615 145000132 3598025
-127 1430 1431
-95 205 207
-98 29 29
-57 419 418
-55
-
-chain 15874 chr6_cox_hap1 4731698 + 2744265 2744697 chr6 171115067 + 31304784 31305225 14156555
-58 158 158
-72 76 85
-68
-
-chain 15671 chr6_cox_hap1 4731698 + 1306242 1307477 chr6 171115067 - 139875690 139876935 14366990
-56 408 416
-54 620 622
-97
-
-chain 15351 chr6_cox_hap1 4731698 + 2791400 2791601 chr11 135006516 + 74748600 74748801 14697621
-99 26 26
-76
-
-chain 14920 chr6_cox_hap1 4731698 + 2791114 2791352 chr12 133851895 + 56894984 56895263 15150280
-65 69 110
-104
-
-chain 14203 chr6_cox_hap1 4731698 + 4000567 4000717 chr6 171115067 - 148948255 148948405 15963295
-150
-
-chain 14065 chr6_cox_hap1 4731698 + 3901987 3902139 chr6 171115067 - 138602057 138602209 16122340
-152
-
-chain 13939 chr6_cox_hap1 4731698 + 2790912 2791061 chr15 102531392 - 60147333 60147482 16276423
-149
-
-chain 13590 chr6_cox_hap1 4731698 + 4000399 4000543 chr2 243199373 + 178345068 178345212 16711221
-144
-
-chain 13240 chr6_cox_hap1 4731698 + 3909742 3911000 chr6 171115067 + 32548108 32549235 17164167
-52 422 421
-78 652 522
-54
-
-chain 12556 chr6_cox_hap1 4731698 + 1348680 1348819 chr2 243199373 - 184149574 184149713 18162971
-139
-
-chain 12225 chr6_cox_hap1 4731698 + 3890501 3890631 chr13 115169878 - 44980182 44980312 18662730
-130
-
-chain 12178 chr6_cox_hap1 4731698 + 3972449 3972615 chr14 107349540 - 58393926 58394091 18734378
-55 26 25
-85
-
-chain 12008 chr6_cox_hap1 4731698 + 3896810 3896939 chr8 146364022 + 49154427 49154556 18990652
-129
-
-chain 11746 chr6_cox_hap1 4731698 + 1299553 1299701 chr7 159138663 - 7702899 7703047 19437477
-54 14 14
-80
-
-chain 11718 chr6_cox_hap1 4731698 + 299537 299697 chr13 115169878 + 54026210 54026329 7331663
-62 41 0
-40 13 13
-4
-
-chain 11503 chr6_cox_hap1 4731698 + 3894886 3895312 chr11 135006516 - 111045874 111046295 19852909
-57 287 282
-82
-
-chain 11377 chr6_cox_hap1 4731698 + 3840583 3840825 chr11 135006516 + 57049649 57049891 20071170
-62 107 107
-73
-
-chain 10960 chr6_cox_hap1 4731698 + 3841022 3841165 chr12 133851895 - 49356794 49356937 20822626
-50 15 15
-78
-
-chain 10867 chr6_cox_hap1 4731698 + 2681465 2681622 chr6 171115067 - 132617434 132617597 20998653
-55 29 35
-73
-
-chain 10738 chr6_cox_hap1 4731698 + 3896518 3896639 chr10 135534747 + 59600699 59600817 21255898
-61 3 0
-57
-
-chain 10496 chr6_cox_hap1 4731698 + 3892569 3892679 chr1 249250621 - 174039531 174039641 21744607
-110
-
-chain 10328 chr6_cox_hap1 4731698 + 3840451 3840892 chr4 191154276 - 114078209 114078650 18698120
-15 372 372
-54
-
-chain 9881 chr6_cox_hap1 4731698 + 2734004 2734554 chr6 171115067 + 31205448 31206008 23100546
-72 423 433
-55
-
-chain 9755 chr6_cox_hap1 4731698 + 4021493 4021793 chr6 171115067 + 162490109 162490409 23390927
-65 181 181
-54
-
-chain 9560 chr6_cox_hap1 4731698 + 1301303 1301404 chr6 171115067 - 141323187 141323288 23857061
-101
-
-chain 9455 chr6_cox_hap1 4731698 + 3891953 3892158 chr6 171115067 + 32468923 32469135 24116909
-54 91 98
-60
-
-chain 9090 chr6_cox_hap1 4731698 + 2680711 2680821 chr3 198022430 - 94212956 94213066 24807216
-53 4 4
-53
-
-chain 7297 chr6_cox_hap1 4731698 + 3844000 3844124 chr8 146364022 + 96809146 96809270 3974525
-124
-
-chain 7162 chr6_cox_hap1 4731698 + 2675969 2676329 chr17 81195210 - 22005566 22005927 2836104
-7 302 303
-51
-
-chain 7031 chr6_cox_hap1 4731698 + 2673410 2673921 chr5 180915260 + 106108094 106108601 3265511
-58 376 372
-77
-
-chain 6840 chr6_cox_hap1 4731698 + 3971466 3971538 chr11 135006516 + 40011829 40011901 28544257
-72
-
-chain 6473 chr6_cox_hap1 4731698 + 3890669 3890742 chr1 249250621 - 102907635 102907704 21815173
-11 4 0
-58
-
-chain 6422 chr6_cox_hap1 4731698 + 4013834 4013902 chr6 171115067 + 32728707 32728775 29535230
-68
-
-chain 5921 chr6_cox_hap1 4731698 + 2681183 2681245 chr4 191154276 - 94306644 94306706 30842389
-62
-
-chain 5676 chr6_cox_hap1 4731698 + 2671999 2672059 chr3 198022430 + 95260601 95260661 31509897
-60
-
-chain 5595 chr6_cox_hap1 4731698 + 3972615 3972674 chr14 107349540 - 80191032 80191091 27115653
-59
-
-chain 5576 chr6_cox_hap1 4731698 + 1302171 1302230 chr18 78077248 - 3698437 3698496 31796878
-59
-
-chain 5517 chr6_cox_hap1 4731698 + 3842389 3842453 chr20 63025520 - 5368566 5368630 20848663
-64
-
-chain 5458 chr6_cox_hap1 4731698 + 3985007 3985065 chr2 243199373 + 112827415 112827473 32167738
-58
-
-chain 5421 chr6_cox_hap1 4731698 + 2677334 2677391 chr19 59128983 - 38462903 38462960 32247802
-57
-
-chain 5403 chr6_cox_hap1 4731698 + 3897499 3897556 chr12 133851895 + 59864980 59865037 32286341
-57
-
-chain 5339 chr6_cox_hap1 4731698 + 4081817 4081873 chr17 81195210 + 16805661 16805717 32499905
-56
-
-chain 5266 chr6_cox_hap1 4731698 + 4021149 4021204 chr3 198022430 + 6923000 6923055 32744278
-55
-
-chain 5103 chr6_cox_hap1 4731698 + 2743431 2743485 chr3 198022430 + 27241143 27241197 33231446
-54
-
-chain 5094 chr6_cox_hap1 4731698 + 3984745 3984799 chr6 171115067 + 67966752 67966806 33279729
-54
-
-chain 5089 chr6_cox_hap1 4731698 + 2674314 2675775 chr1 249250621 + 7474130 7475590 2473669
-98 975 974
-58 295 295
-35
-
-chain 5076 chr6_cox_hap1 4731698 + 1300901 1300955 chr11 135006516 + 101518151 101518205 33343005
-54
-
-chain 5067 chr6_cox_hap1 4731698 + 2741303 2741357 chr19 59128983 - 37393851 37393905 33368570
-54
-
-chain 5058 chr6_cox_hap1 4731698 + 3967166 3967220 chr1 249250621 - 172942963 172943017 33379585
-54
-
-chain 5020 chr6_cox_hap1 4731698 + 1345886 1345938 chr6 171115067 + 29692684 29692736 33527644
-52
-
-chain 4959 chr6_cox_hap1 4731698 + 3892516 3892569 chr18 78077248 + 5090594 5090647 22176918
-53
-
-chain 4957 chr6_cox_hap1 4731698 + 2678048 2678100 chr9 141213431 - 31846047 31846099 33735026
-52
-
-chain 4957 chr6_cox_hap1 4731698 + 3946024 3946076 chr6 171115067 + 32439356 32439408 33735182
-52
-
-chain 4930 chr6_cox_hap1 4731698 + 3894496 3894548 chrX 155270560 - 4541772 4541824 33815607
-52
-
-chain 4914 chr6_cox_hap1 4731698 + 2673741 2673793 chrX 155270560 + 7935883 7935935 17711968
-52
-
-chain 4885 chr6_cox_hap1 4731698 + 2740950 2741002 chr5 180915260 - 163072859 163072911 33995114
-52
-
-chain 4884 chr6_cox_hap1 4731698 + 2760326 2760379 chr7 159138663 + 8699184 8699237 23141527
-53
-
-chain 4821 chr6_cox_hap1 4731698 + 3935381 3935432 chr6 171115067 - 11031703 11031754 34213824
-51
-
-chain 4685 chr6_cox_hap1 4731698 + 3915703 3915753 chr12 133851895 + 112261417 112261467 34690968
-50
-
-chain 4613 chr6_cox_hap1 4731698 + 2844682 2846505 chr13 115169878 - 41386504 41386960 3856143
-33 479 279
-7 46 0
-24 11 0
-33 1097 0
-24 13 0
-56
-
-chain 4221 chr6_cox_hap1 4731698 + 2437589 2437671 chr14 107349540 + 75461679 75461839 4623812
-28 0 78
-54
-
-chain 4202 chr6_cox_hap1 4731698 + 2673968 2674023 chr3 198022430 + 156309398 156309453 19139889
-55
-
-chain 4186 chr6_cox_hap1 4731698 + 3955813 3955860 chr5 180915260 - 113986983 113987030 34971958
-47
-
-chain 4136 chr6_cox_hap1 4731698 + 2672610 2672662 chr13 115169878 + 42049101 42049153 23521137
-52
-
-chain 3978 chr6_cox_hap1 4731698 + 2673481 2673609 chrX 155270560 - 130914483 130914611 4485241
-128
-
-chain 3891 chr6_cox_hap1 4731698 + 2760039 2760115 chr16 90354753 - 58442153 58442229 17002345
-76
-
-chain 3877 chr6_cox_hap1 4731698 + 2672485 2672526 chr15 102531392 + 40275232 40275273 21164310
-41
-
-chain 3776 chr6_cox_hap1 4731698 + 2759549 2759589 chr1 249250621 - 143888892 143888932 33598889
-40
-
-chain 3639 chr6_cox_hap1 4731698 + 3890631 3890669 chr3 198022430 + 101411146 101411184 20382394
-38
-
-chain 3574 chr6_cox_hap1 4731698 + 2673146 2673184 chr3 198022430 - 173409162 173409200 29596627
-38
-
-chain 3573 chr6_cox_hap1 4731698 + 2790788 2791088 chr16 90354753 + 31183111 31183406 18086604
-58 215 210
-27
-
-chain 3489 chr6_cox_hap1 4731698 + 3842885 3842952 chrX 155270560 - 48144545 48144612 19043441
-67
-
-chain 3394 chr6_cox_hap1 4731698 + 3896482 3896518 chrX 155270560 - 4545757 4545793 28280414
-36
-
-chain 3393 chr6_cox_hap1 4731698 + 3840688 3840752 chr8 146364022 + 7016797 7016861 21522443
-64
-
-chain 3345 chr6_cox_hap1 4731698 + 1313572 1313633 chrX 155270560 - 101738888 101738949 11083842
-61
-
-chain 3209 chr6_cox_hap1 4731698 + 3842526 3842560 chr4 191154276 + 80147803 80147837 32673071
-34
-
-chain 3189 chr6_cox_hap1 4731698 + 2790872 2790912 chr11 135006516 - 131957088 131957128 22905486
-40
-
-chain 3053 chr6_cox_hap1 4731698 + 4021558 4021590 chr2 243199373 + 38182694 38182726 24706669
-32
-
-chain 3045 chr6_cox_hap1 4731698 + 2677533 2677565 chr11 135006516 - 20509488 20509520 33762261
-32
-
-chain 3033 chr6_cox_hap1 4731698 + 3842991 3843062 chr1 249250621 - 90164672 90164743 11203780
-71
-
-chain 2997 chr6_cox_hap1 4731698 + 2759644 2759694 chr16 90354753 + 47212776 47212826 11278440
-50
-
-chain 2984 chr6_cox_hap1 4731698 + 3842575 3842625 chrX 155270560 + 76422698 76422748 20248077
-50
-
-chain 2960 chr6_cox_hap1 4731698 + 3896779 3896810 chr21 48129895 + 18677639 18677670 32477029
-31
-
-chain 2845 chr6_cox_hap1 4731698 + 2673184 2673214 chr3 198022430 - 156603737 156603767 26791325
-30
-
-chain 2761 chr6_cox_hap1 4731698 + 3844406 3844465 chr6 171115067 + 18547856 18547915 4276868
-59
-
-chain 2745 chr6_cox_hap1 4731698 + 3842326 3844197 chr11 135006516 - 48638733 48640605 3968835
-61 675 676
-53 1015 1015
-67
-
-chain 2739 chr6_cox_hap1 4731698 + 2673924 2673968 chr8 146364022 + 90457478 90457522 20607564
-44
-
-chain 2729 chr6_cox_hap1 4731698 + 1302230 1302259 chr14 107349540 + 79349511 79349540 33029767
-29
-
-chain 2723 chr6_cox_hap1 4731698 + 2673793 2673825 chr5 180915260 - 70673106 70673138 18877917
-32
-
-chain 2561 chr6_cox_hap1 4731698 + 299599 299640 chr6 171115067 + 20244702 20244743 12574490
-41
-
-chain 2518 chr6_cox_hap1 4731698 + 4021649 4021704 chr16 90354753 - 20685134 20685189 24272036
-55
-
-chain 2470 chr6_cox_hap1 4731698 + 2745980 2746030 chr1 249250621 + 111776293 111776343 7607561
-50
-
-chain 2373 chr6_cox_hap1 4731698 + 2760156 2760181 chr17 81195210 - 66761411 66761436 17362234
-25
-
-chain 2319 chr6_cox_hap1 4731698 + 2900811 2900837 chr6 171115067 + 31357660 31357686 3303778
-26
-
-chain 2312 chr6_cox_hap1 4731698 + 2759490 2759549 chr4 191154276 + 98204882 98204941 18366184
-59
-
-chain 2209 chr6_cox_hap1 4731698 + 3843799 3843896 chr12 133851895 + 60159606 60159703 5400255
-97
-
-chain 2146 chr6_cox_hap1 4731698 + 1299766 1299827 chr12 133851895 + 105697047 105697108 23835468
-61
-
-chain 2140 chr6_cox_hap1 4731698 + 3840491 3840558 chr6 171115067 - 96829007 96829074 20827044
-67
-
-chain 2000 chr6_cox_hap1 4731698 + 1313744 1313777 chr4 191154276 + 153686345 153686378 8134925
-33
-
-chain 1995 chr6_cox_hap1 4731698 + 3842817 3842864 chr4 191154276 - 47817470 47817517 17212566
-47
-
-chain 1991 chr6_cox_hap1 4731698 + 2845315 2845345 chr4 191154276 - 30046978 30047008 15284842
-30
-
-chain 1990 chr6_cox_hap1 4731698 + 4008195 4011710 chr6 171115067 + 32722816 32726965 28700009
-61 2506 2690
-85 515 965
-52 103 103
-193
-
-chain 1943 chr6_cox_hap1 4731698 + 3844851 3845272 chr11 135006516 + 83226111 83226530 3906185
-58 323 321
-40
-
-chain 1927 chr6_cox_hap1 4731698 + 2759609 2759644 chr7 159138663 - 110094552 110094587 24531071
-35
-
-chain 1727 chr6_cox_hap1 4731698 + 2674522 2674583 chr20 63025520 - 53185733 53185794 4777998
-61
-
-chain 1671 chr6_cox_hap1 4731698 + 3843897 3843947 chr9 141213431 + 78317603 78317653 4355881
-50
-
-chain 1637 chr6_cox_hap1 4731698 + 2760272 2760326 chr2 243199373 + 119859185 119859239 11695157
-54
-
-chain 1632 chr6_cox_hap1 4731698 + 2673214 2673313 chr4 191154276 - 69486891 69486990 2834158
-99
-
-chain 1628 chr6_cox_hap1 4731698 + 3842952 3842991 chr2 243199373 - 116273698 116273737 14990340
-39
-
-chain 1584 chr6_cox_hap1 4731698 + 1313851 1313915 chr1 249250621 - 24961912 24961976 17607390
-64
-
-chain 1548 chr6_cox_hap1 4731698 + 2672923 2673038 chr2 243199373 - 193655574 193655689 3516324
-115
-
-chain 1509 chr6_cox_hap1 4731698 + 2674838 2674895 chr5 180915260 + 165569524 165569581 2491813
-57
-
-chain 1508 chr6_cox_hap1 4731698 + 2675985 2676708 chr6 171115067 - 141365359 141366083 3289535
-50 615 616
-58
-
-chain 1507 chr6_cox_hap1 4731698 + 2673661 2673741 chr4 191154276 + 138835824 138835904 16168846
-80
-
-chain 1489 chr6_cox_hap1 4731698 + 2845209 2846585 chrX 155270560 - 102215688 102216455 6549884
-27 1297 452
-2 0 236
-50
-
-chain 1467 chr6_cox_hap1 4731698 + 2760221 2760272 chr7 159138663 + 122232756 122232807 13147168
-51
-
-chain 1456 chr6_cox_hap1 4731698 + 3844931 3844983 chr14 107349540 + 48881293 48881345 9320615
-52
-
-chain 1452 chr6_cox_hap1 4731698 + 2673321 2674838 chrX 155270560 - 1098426 1099942 3000529
-51 1428 1427
-38
-
-chain 1354 chr6_cox_hap1 4731698 + 1313967 1314021 chr4 191154276 + 544307 544361 14282164
-54
-
-chain 1310 chr6_cox_hap1 4731698 + 3843714 3843782 chrX 155270560 + 17249549 17249617 3972308
-68
-
-chain 1307 chr6_cox_hap1 4731698 + 1498573 1498607 chr5 180915260 - 156542608 156542642 2089959
-34
-
-chain 1294 chr6_cox_hap1 4731698 + 2760418 2760473 chr4 191154276 + 147516497 147516552 12285122
-55
-
-chain 1278 chr6_cox_hap1 4731698 + 3845015 3845082 chr15 102531392 + 92125438 92125505 4023305
-67
-
-chain 1247 chr6_cox_hap1 4731698 + 3844702 3844748 chr2 243199373 - 7511493 7511539 13743690
-46
-
-chain 1194 chr6_cox_hap1 4731698 + 2676043 2676103 chr1 249250621 + 94380187 94380247 20995710
-60
-
-chain 1160 chr6_cox_hap1 4731698 + 2676209 2676237 chrX 155270560 + 56836392 56836420 21177535
-28
-
-chain 1125 chr6_cox_hap1 4731698 + 3890818 3890886 chr8 146364022 - 86779351 86779419 20749389
-68
-
-chain 1106 chr6_cox_hap1 4731698 + 2760181 2760221 chr9 141213431 + 74027839 74027879 13331514
-40
-
-chain 1039 chr6_cox_hap1 4731698 + 2674441 2674507 chr3 198022430 - 71498815 71498881 4421669
-66
-
-chain 1033 chr6_cox_hap1 4731698 + 2676372 2676431 chr5 180915260 - 20894072 20894131 3124143
-59
-
-chain 1014 chr6_cox_hap1 4731698 + 2759961 2759990 chr10 135534747 + 69125589 69125618 23828230
-29
-
-chain 1005 chr6_cox_hap1 4731698 + 2760005 2760039 chr10 135534747 + 5299750 5299784 23898321
-34
-
-chain 982 chr6_cox_hap1 4731698 + 2759426 2759479 chr13 115169878 + 111326976 111327029 14386536
-53
-
-chain 977 chr6_cox_hap1 4731698 + 3845410 3845467 chrX 155270560 - 144584413 144584470 4043690
-57
-
-chain 963 chr6_cox_hap1 4731698 + 2674253 2676589 chr9 141213431 - 119032541 119034846 4479982
-47 2231 2200
-58
-
-chain 919 chr6_cox_hap1 4731698 + 2677255 2677315 chr4 191154276 + 45112377 45112437 22402156
-60
-
-chain 883 chr6_cox_hap1 4731698 + 3843656 3843714 chr18 78077248 + 28929278 28929336 6530663
-58
-
-chain 881 chr6_cox_hap1 4731698 + 2675038 2675098 chr5 180915260 - 79225133 79225193 14536118
-60
-
-chain 858 chr6_cox_hap1 4731698 + 2676338 2676372 chr7 159138663 - 148564023 148564057 6699557
-34
-
-chain 857 chr6_cox_hap1 4731698 + 2676103 2677646 chr4 191154276 + 171430336 171431860 18546235
-50 1412 1393
-81
-
-chain 838 chr6_cox_hap1 4731698 + 3843947 3843980 chr18 78077248 - 28720814 28720847 7914761
-33
-
-chain 819 chr6_cox_hap1 4731698 + 2673062 2673118 chr2 243199373 + 149156283 149156339 14209631
-56
-
-chain 796 chr6_cox_hap1 4731698 + 1314021 1314060 chrX 155270560 - 10752795 10752834 16687246
-39
-
-chain 747 chr6_cox_hap1 4731698 + 1314275 1314339 chr12 133851895 + 57178267 57178331 20664563
-64
-
-chain 731 chr6_cox_hap1 4731698 + 1638596 1638636 chr15 102531392 + 55738847 55738887 18753864
-40
-
-chain 704 chr6_cox_hap1 4731698 + 3842767 3842817 chr9 141213431 + 32212289 32212339 4117535
-50
-
-chain 701 chr6_cox_hap1 4731698 + 2674653 2674701 chr16 90354753 - 23821388 23821436 3556080
-48
-
-chain 679 chr6_cox_hap1 4731698 + 1313640 1313672 chr21 48129895 - 2887431 2887463 13569070
-32
-
-chain 672 chr6_cox_hap1 4731698 + 3844325 3844357 chr10 135534747 - 103351577 103351609 5595826
-32
-
-chain 661 chr6_cox_hap1 4731698 + 2676159 2676209 chr9 141213431 + 85388422 85388472 5334226
-50
-
-chain 661 chr6_cox_hap1 4731698 + 3844987 3845015 chr2 243199373 + 98215178 98215206 5611311
-28
-
-chain 650 chr6_cox_hap1 4731698 + 2672375 2672435 chr7 159138663 - 140047518 140047578 22707410
-60
-
-chain 643 chr6_cox_hap1 4731698 + 2677085 2677144 chr6 171115067 + 74793831 74793890 5895430
-59
-
-chain 604 chr6_cox_hap1 4731698 + 1314169 1314195 chrX 155270560 - 101522169 101522195 11588450
-26
-
-chain 595 chr6_cox_hap1 4731698 + 2675343 2675387 chr12 133851895 - 110550302 110550346 3606052
-44
-
-chain 571 chr6_cox_hap1 4731698 + 2672827 2672901 chr3 198022430 + 50956018 50956092 15278850
-74
-
-chain 525 chr6_cox_hap1 4731698 + 3902955 3903021 chr6 171115067 + 32474022 32474088 26162225
-66
-
-chain 485 chr6_cox_hap1 4731698 + 2671938 2671998 chr1 249250621 - 193322919 193322979 8312425
-60
-
-chain 412 chr6_cox_hap1 4731698 + 2672740 2672827 chr8 146364022 - 113140827 113140914 13566503
-87
-
-chain 395 chr6_cox_hap1 4731698 + 2846505 2846533 chrX 155270560 - 102216470 102216498 6380381
-28
-
-chain 395 chr6_cox_hap1 4731698 + 2675098 2675125 chr12 133851895 + 9999203 9999230 23891782
-27
-
-chain 347 chr6_cox_hap1 4731698 + 2671704 2671754 chr15 102531392 - 65978487 65978537 12839282
-50
-
-chain 251 chr6_cox_hap1 4731698 + 2671761 2671812 chr9 141213431 + 17677697 17677748 27279073
-51
-
-chain 184 chr6_cox_hap1 4731698 + 2672526 2672587 chrX 155270560 - 91681431 91681492 16167874
-61
-
-chain 369716150 chr6_qbl_hap2 4565931 + 0 4565931 chr6 171115067 + 28742641 33379750 32
-2350 0 1
-1750 0 2
-3815 1 0
-9743 0 2
-3960 0 4
-2109 0 2
-33 2 0
-9000 0 2
-16647 0 2
-38786 1 0
-80529 0 1
-14475 0 1
-6819 1 0
-6845 1 3
-6188 0 1
-6397 0 1
-345 1 0
-68374 2 0
-39133 39 39
-7774 7 0
-1489 1 1
-72 1 1
-2260 0 2
-10629 0 1
-1249 1 1
-195 1 1
-18132 0 1
-1324 0 2
-5438 5 0
-2061 1 0
-3982 6 6
-1725 0 1
-3153 1 0
-18 1 0
-18 1 0
-2026 1 0
-4175 10 10
-4235 18 18
-493 9 9
-4767 7 7
-1225 1 0
-8 1 1
-151 1 2
-5079 1 1
-28 1 1
-281 11 11
-1178 0 4
-685 8 0
-48 4 0
-1701 1 1
-43 5 5
-862 18 18
-58 1 1
-66 1 1
-420 1 1
-44 1 1
-680 4 4
-1675 1 1
-83 1 1
-3082 4 0
-5467 1 1
-27 0 1
-1099 16 0
-627 51 51
-1278 6 1
-129 1 1
-25 1 1
-1397 15 15
-810 1 1
-27 1 1
-1192 2 0
-7515 4 0
-979 0 3
-3406 0 2
-2340 1 1
-20 1 1
-1139 1 1
-26 1 1
-787 0 1
-1416 3 1
-22815 4 4
-126 1 0
-38 1 1
-140 1 0
-999 0 17
-56 0 15
-11759 161391 161513
-11155 0 2
-5376 0 1
-19253 1 0
-4212 1 1
-3671 1 0
-21 0 6
-4451 1 0
-27910 1 0
-9946 0 1
-11233 1 1
-32 1 1
-2238 1 1
-20 1 1
-3659 22 16
-1218 1 0
-1638 6 6
-228 1 1
-45 1 1
-2048 0 3
-461 1 0
-20759 1 0
-3778 2 1
-1268 1 0
-1511 1 1
-42 2 0
-24 1 1
-4119 22 0
-1757 1 0
-1527 1 1
-29 1 1
-1886 1 0
-10628 12 0
-46568 1 0
-18985 0 10
-1825 3 4
-5288 0 9
-1071 50 50
-1607 1 5
-722 0 1
-502 0 1
-1025 0 1
-134 14 0
-4944 0 1
-319 1 0
-6178 0 1
-2898 0 2
-143 0 1
-1775 1 0
-2123 0 1
-2715 1 0
-4901 70 66
-2884 1 0
-1362 1 0
-1233 0 8
-2134 0 1
-1042 0 1
-163 1 1
-45 1 1
-50 2 0
-64 1 1
-48 1 1
-380 0 1
-30 1 0
-30 1 1
-61 1 1
-22 1 1
-368 4 4
-319 5 7
-310 1 1
-37 3 1
-162 1 1
-194 2 0
-36 1 1
-242 9 9
-1932 1 1
-16 1 1
-528 1 1
-20 1 1
-509 0 5
-76 1 1
-21 1 1
-439 15 15
-2779 1 0
-1597 24 28
-59 12 12
-307 1 0
-516 1 0
-286 11 33
-339 5 0
-570 1 1
-37 1 1
-220 1 0
-72 1 1
-144 1 1
-48 1 1
-247 2 0
-174 9 10
-816 1 0
-940 1 1
-45 1 1
-91 3 3
-71 1 1
-291 14 14
-100 1 1
-23 1 1
-452 3 3
-85 1 1
-65 1 1
-77 1 1
-252 0 1
-129 15 15
-432 10 0
-85 1 1
-28 1 1
-189 2 1
-71 1 1
-52 8 0
-810 2 2
-63 1 1
-378 1 1
-26 1 1
-187 31 36
-966 1 1
-25 1 1
-91 12 12
-125 1 1
-38 1 1
-433 2 0
-596 1 1
-48 1 1
-465 4 4
-64 1 1
-20 1 1
-525 5 5
-237 3 8
-183 11 0
-364 4 3
-201 1 1
-42 1 1
-56 1 1
-115 1 0
-67 16 16
-244 1 1
-54 5 5
-929 1 1
-21 1 1
-126 0 3
-830 1 11
-59 1 1
-537 0 2
-24 1 1
-745 15 15
-810 1 0
-425 1 1
-89 1 1
-592 1 1
-49 1 1
-352 0 1
-142 1 1
-30 1 1
-95 1 1
-45 1 1
-227 1 1
-53 1 1
-130 1 1
-18 1 1
-138 1 1
-90 1 1
-129 41 41
-50 1 1
-79 1 1
-117 1 1
-31 1 1
-155 155 0
-34 1 1
-50 5 5
-57 1 1
-152 1 1
-30 1 1
-177 5 5
-345 1 1
-39 1 1
-504 18 18
-596 12 12
-54 1 1
-158 1 1
-164 1 1
-34 1 1
-626 15 15
-866 0 10
-1051 0 2611
-680 0 1
-1537 0 18
-75 1 0
-147 52 1
-119 0 12
-23 1 1
-1927 13 13
-1702 2 0
-3694 1 1
-18 1 1
-958 43 47
-246 2 0
-146 1 1
-49 1 1
-410 1 0
-667 1 1
-38 1 1
-362 7 1
-159 2 0
-515 2 0
-1026 1 1
-29 1 1
-249 0 6
-129 1 1
-33 4 0
-10 1 5
-1236 1 1
-20 1 1
-138 10 9
-448 0 3
-660 1 1
-28 1 1
-83 1 1
-51 1 1
-2659 1 1
-38 1 1
-424 0 1
-70 1 1
-820 1 1
-26 1 1
-1472 1 1
-21 1 1
-491 5 5
-2372 2 0
-533 6 0
-441 1 7
-1689 1 1
-26 3 4
-879 16 16
-514 0 2
-58 1 1
-350 1 0
-769 1 1
-39 1 1
-429 10 10
-134 0 4
-37 1 1
-144 8 8
-668 1 1
-22 1 1
-344 2 0
-262 2 2
-38 0 1
-70 18 18
-84 11 13
-198 0 1
-32 1 1
-74 11 15
-1255 0 2
-332 1 1
-21 1 1
-193 8 24
-34 1 1
-79 1 1
-29 1 1
-536 1 0
-308 0 1
-850 0 32
-23 1 1
-651 1 1
-22 0 3
-136 1 1
-48 1 1
-330 9 9
-1108 1 1
-98 1 1
-582 0 2
-713 7 7
-89 1 0
-293 9 8
-125 1 1
-31 1 1
-192 6 6
-171 17 17
-681 1 1
-43 1 1
-514 1 1
-68 1 1
-537 1 1
-35 1 1
-159 6 6
-778 2 2
-44 1 1
-168 0 7
-211 1 1
-42 1 1
-1253 1 1
-29 1 1
-320 1 1
-36 2 2
-55 1 2
-108 1 1
-33 1 1
-317 1 1
-35 1 1
-553 8 8
-386 1 1
-26 1 1
-540 1 1
-31 1 1
-65 0 1
-625 12 12
-313 0 1
-52 1 1
-22 1 1
-583 1 1
-49 1 1
-678 37 37
-784 3 0
-838 1 1
-19 12 0
-1129 1 1
-36 1 1
-553 8 8
-109 1 1
-45 1 1
-841 16 15
-157 1 1
-31 2 2
-204 18 19
-487 1 1
-29 1 1
-374 1 1
-67 1 1
-720 13 13
-266 10 10
-330 16 14
-413 1 1
-44 1 1
-78 6 6
-181 2 2
-36 1 1
-397 1 1
-20 1 1
-311 1 1
-48 2 2
-1298 11 11
-186 1 1
-33 1 1
-216 4 4
-35 1 1
-194 10 10
-310 1 1
-51 1 1
-136 1 1
-49 1 1
-521 1 1
-23 1 1
-242 1 1
-49 1 1
-600 1 1
-31 1 1
-413 15 15
-290 1 1
-49 1 1
-527 17 17
-340 12 11
-1025 1 0
-2572 1 1
-29 1 1
-397 2 5
-668 13 13
-541 1 1
-59 0 2
-6 1 1
-122 14 14
-51 1 1
-46 1 1
-72 5 5
-110 1 1
-76 1 1
-164 0 21
-136 1 1
-12 1 1
-66 16 16
-456 37 34
-371 7 7
-48 1 1
-194 10 10
-108 1 1
-60 1 1
-122 0 1
-48 1 1
-238 1 1
-32 0 1
-100 1 0
-72 1 0
-390 1 1
-38 1 1
-144 1 1
-27 0 4
-184 21 228
-49 1 1
-608 0 1
-152 1 1
-31 1 1
-281 8 8
-337 1 1
-45 1 1
-222 1 1
-54 1 1
-346 1 0
-44 1 1
-368 1 1
-72 1 1
-502 36 18
-63 1 1
-43 0 4
-136 1 1
-42 1 1
-80 4 4
-35 1 0
-89 1 1
-24 0 5
-829 13 13
-73 1 1
-28 14 0
-233 1 1
-42 0 3
-85 0 1
-400 1 1
-40 1 1
-538 25 25
-174 1 1
-20 1 1
-705 1 1
-26 2 2
-614 1 1
-44 1 1
-793 1 1
-16 1 1
-747 5 5
-804 1 1
-29 1 1
-166 1 1
-43 1 1
-233 1 1
-44 1 1
-507 0 3
-110 8 8
-133 1 1
-31 1 1
-165 1 1
-29 1 1
-1249 1 1
-26 4 0
-56 1 1
-67 1 1
-716 1 1
-46 0 1
-16 1 1
-174 1 1
-96 1 1
-141 1 1
-39 0 4
-263 1 1
-18 1 1
-259 4 4
-38 1 1
-104 1 1
-40 1 0
-248 1 1
-18 1 1
-238 1 1
-32 1 1
-70 0 2
-16 1 1
-818 1 1
-22 4 4
-492 4 4
-1145 1 1
-46 1 1
-53 1 0
-38 1 1
-373 1 1
-60 1 1
-1149 0 1
-20 1 1
-1294 1 1
-41 1 1
-316 4 4
-42 1 1
-218 12 12
-363 1 1
-24 1 1
-457 10 10
-414 13 13
-825 1 1
-41 1 1
-492 0 4
-1374 1 1
-18 1 1
-808 2 2
-335 6 4
-880 1 1
-35 1 1
-236 1 1
-67 1 1
-298 0 1
-147 4 4
-322 11 11
-613 1 1
-62 1 1
-340 1 1
-22 1 1
-1057 1 1
-57 1 1
-358 1 1
-128 1 1
-146 10 10
-490 1 1
-20 1 1
-62 1 1
-88 1 1
-293 1 1
-28 1 0
-20 1 1
-83 0 1
-90 1 1
-312 1 1
-44 1 1
-1213 1 1
-51 1 1
-467 1 1
-39 1 1
-122 14 0
-35 1 1
-485 14 14
-110 12 0
-127 1 1
-5450 0 5
-1699 9 9
-3278 0 2
-28 1 1
-2211 2 0
-521 1 1
-18 1 1
-784 18 18
-1603 0 248
-4769 47 47
-4486 4 4
-103 0 2
-88 1 1
-95 1 1
-2174 1 1
-22 0 1
-1244 7 7
-922 2 0
-1507 1 1
-44 1 1
-208 6 1
-1946 2 2
-85 0 1
-133 1 1
-666 1 0
-52 1 1
-29 1 1
-148 0 5
-30 1 1
-790 14 14
-52 1 1
-32 1 1
-121 1 1
-37 1 1
-396 3 2
-324 1 1
-152 1 1
-71 4 4
-27 1 1
-115 1 1
-101 1 1
-423 10 10
-294 1 1
-101 1 0
-4 0 1
-174 1 1
-146 1 1
-103 1 1
-134 1 1
-16 1 1
-378 1 1
-85 1 1
-134 1 1
-25 1 1
-54 3 3
-55 1 1
-67 1 1
-22 1 1
-54 13 13
-55 11 11
-120 1 1
-23 1 1
-51 1 1
-22 1 1
-364 1 1
-278 1 1
-354 34448 40149
-311 1 1
-33 1 2
-26 6 6
-474 1 1
-36 1 1
-151 1 1
-29 1 1
-120 1 1
-23 1 1
-865 1 1
-39 1 1
-553 1 1
-69 1 1
-116 1 0
-1618 9 9
-820 11 11
-173 0 8
-405 9 9
-196 1 1
-26 1 1
-173 1 1
-27 5 1
-42 1 1
-676 17 19
-77 1 3
-65 16 16
-69 1 0
-277 1 1
-44 1 1
-72 0 3
-70 1 1
-54 1 1
-240 1 0
-31 1 1
-1192 18 19
-454 28 28
-373 1 1
-46 1 1
-1565 1 1
-53 2 2
-543 1 1
-38 1 1
-985 1 1
-27 0 1
-8 1 1
-158 0 38
-656 1 1
-104 1 1
-771 1 1
-21 1 1
-398 1 1
-16 1 2
-163 4 3
-94 1 1
-44 1 1
-172 1 0
-122 5 5
-193 16 16
-535 2 2
-17 1 0
-93 1 1
-580 1 1
-91 1 1
-141 1 1
-79 1 1
-80 13 13
-165 1 1
-129 1 1
-114 1 1
-30 1 1
-83 1 1
-35 1 1
-126 16 16
-270 0 1
-111 9 9
-151 1 1
-118 1 1
-253 1 1
-45 18468 20220
-102 1 1
-20 1 1
-111 1 1
-97 1 0
-86 1 1
-70 0 4
-69 1 1
-52 0 1
-219 3 3
-76 1 5
-209 4 4
-22 1 1
-61 1 1
-91 1 1
-194 0 21
-15 0 1
-229 1 1
-185 0 1
-113 5 5
-45 1 1
-53 1 1
-37 1 1
-157 1 1
-279 1 1
-233 1 1
-19 0 8
-67 2 0
-41 1 1
-102 12 12
-275 14 14
-70 1 1
-82 2 2
-224 5 1
-490 0 22
-3841 1 0
-3216 1 1
-42 1 1
-1914 0 3
-616 11 12
-144 1 1
-21 2 1
-775 1 1
-50 1 1
-50 2 2
-96 2 2
-1522 4 0
-58 0 2
-1099 1 1
-42 1 1
-3502 0 6
-255 1 1
-40 1 1
-150 0 4
-18 1 1
-589 1 1
-37 1 1
-539 5 5
-354 1 3
-128 1 1
-58 1 1
-159 1 1
-5 2 0
-21 1 1
-231 1 1
-82 3 3
-69 3 0
-549 1 1
-69 1 1
-74 9 9
-126 1 1
-47 1 1
-614 9 9
-138 1 1
-29 1 1
-681 1 1
-49 1 1
-67 1 1
-19 4 9
-234 1 1
-93 1 1
-60 4 4
-96 4 4
-76 1 1
-169 1 1
-418 1 1
-130 1 1
-44 1 1
-69 1 1
-80 1 1
-76 1 1
-41 1 1
-129 6 11
-363 1 1
-42 1 1
-295 1 1
-43 1 1
-83 6 0
-52 0 2
-1228 1 1
-34 1 1
-3527 20 0
-1768 2 1
-2467 0 2
-101 10 0
-129 1 1
-37 1 1
-121 1 1
-25 1 1
-161 1 0
-97 1 1
-124 1 0
-178 1 1
-34 1 1
-54 1 1
-38 1 2
-634 83 83
-874 1 1
-40 1 1
-59 0 1
-59 4 4
-316 1 1
-178 1 1
-103 1 1
-61 1 1
-220 1 1
-61 1 1
-296 1 1
-33 1 1
-185 12 12
-269 1 1
-84 1 1
-864 15 15
-241 1 0
-79 3 3
-161 1 1
-48 1 1
-539 1 1
-44 1 1
-357 1 1
-37 1 1
-436 1 1
-59 1 1
-71 1 1
-261 1 1
-289 1 1
-47 1 1
-95 12 12
-97 4 4
-27 1 1
-100 1 1
-16 1 1
-101 1 1
-33 1 2
-481 1 1
-42 1 1
-206 7 7
-56 12 12
-179 10 10
-80 1 1
-41 1 1
-251 1 1
-306 1 1
-80 2 0
-4 94 0
-433 1 1
-23 1 1
-107 1 0
-265 1 1
-49 1 1
-282 72 72
-838 7 7
-60 1 0
-108 1 1
-24 1 1
-134 1 1
-32 1 0
-158 0 2
-1040 1 1
-42 1 1
-737 1 0
-790 1 1
-9 2 1
-11 1 1
-129 1 1
-23 1 1
-894 1 1
-43 3 3
-854 1 1
-23 0 1
-23 2 0
-26 1 1
-395 0 15
-403 5 5
-14 1 1
-2454 1 1
-76 1 1
-170 1 1
-18 1 1
-574 4 0
-291 1 1
-47 1 1
-786 19 0
-88 10 11
-48 1 1
-58 1 1
-28 1 1
-500 0 2
-1280 1 1
-28 1 1
-975 1 0
-3231 1 0
-865 1 1
-39 1 1
-1561 109 100
-1037 0 1
-510 1 1
-49 1 1
-1253 1 1
-19 1 1
-1078 3 0
-221 1 1
-21 1 0
-899 0 4
-466 1 1
-38 1 1
-297 0 3
-730 19 6
-1043 1 1
-49 1 1
-273 0 1
-708 1 0
-364 14 13
-58 1 1
-74 1 1
-614 60 60
-1889 4 0
-531 1 1
-19 1 1
-1944 5 0
-163 6 7
-1206 0 2
-718 1 1
-41 7 0
-1795 13 13
-1390 1 0
-2933 0 16
-540 1 1
-14 1 1
-167 1 0
-897 17 4
-1208 1 0
-1307 1 1
-20 1 1
-540 0 10
-203 2 0
-44 1 1
-298 1 0
-87 11 10
-491 14 8
-991 1 1
-74 6 0
-179 1 1
-34 1 1
-448 10 0
-1688 1 1
-38 21 0
-173 1 1
-49 2 1
-2161 30 30
-203 1 0
-89 1 0
-492 1 1
-30 1 1
-1212 3 0
-990 1 1
-38 1 1
-780 1 0
-191 1 1
-47 6 6
-393 1 1
-41 1 1
-259 1 0
-941 1 1
-20 1 1
-185 0 6
-165 0 16
-420 3 1
-130 1 1
-31 1 1
-253 18 18
-720 16 18
-1257 3 0
-986 0 4
-3311 1 1
-26 1 1
-556 0 4
-120 0 1
-1273 1 1
-20 1 1
-338 8 8
-3965 0 3
-15 1 1
-2531 17 17
-3334 5 5
-121 13 13
-161 1 1
-45 1 1
-94 14 14
-63 9 10
-2108 1 1
-34 1 1
-1436 1 1
-47 1 1
-273 7 0
-153 0 5
-283 12 12
-619 1 1
-36 0 4
-225 1 1
-23 1 1
-553 5 0
-2334 1 1
-49 1 1
-350 1 1
-31 1 1
-1012 2 2
-422 1 1
-46 1 1
-91 4 19
-468 0 1
-46 1 1
-1491 0 4
-426 0 1
-1144 1 2
-1131 1 1
-20 1 1
-1533 16 0
-3103 44 45
-4016 12 12
-346 0 1
-943 1 0
-524 1 1
-20 1 1
-151 3 3
-144 1 1
-189 1 7
-750 1 0
-695 1 0
-1003 0 2
-7819 1 1
-78 1 1
-1811 0 1
-3177 0 1
-8990 0 1
-2268 1 1
-35 0 10
-8205 1 0
-3193 1 1
-76 1 1
-10955 0 1
-22875 0 20
-2417 1 0
-998 0 13
-4236 8 0
-4845 0 2
-64 40 34
-10941 1 1
-40 1 1
-4759 0 6
-12084 0 3
-3052 0 4
-2989 1 0
-13523 1 3
-16170 1 0
-11761 0 3
-3912 3 0
-6620 0 7
-7633 3 0
-419 2 0
-10690 5 24
-10798 0 1
-296 0 1
-1770 4 0
-374 0 4
-230 16 16
-7468 1 0
-1229 1 0
-3061 1 0
-5818 1 0
-2415 12 9
-2056 0 1
-955 4 0
-20022 0 1
-4418 2 1
-2375 0 4
-2086 1 1
-32 1 1
-1225 1 0
-857 2 0
-1154 0 1
-4667 1 0
-170 0 3
-2376 0 1
-2799 10 10
-1512 4 0
-68 9 1
-2170 1 1
-47 1 1
-318 2 0
-19 0 6
-14527 1 1
-33 1 1
-3080 1 1
-23 1 1
-1645 6 6
-231 0 1
-2136 2 0
-6222 0 1
-830 1 1
-24 1 1
-8326 1 0
-2939 1 0
-3959 0 2
-3746 0 2
-1011 1 1
-34 1 1
-7443 0 1
-688 2 0
-574 1 1
-29 1 1
-1799 13 1
-4074 2 0
-136 1 1
-77 1 1
-528 19 0
-253 0 1
-204 1 0
-129 2 0
-811 1 1
-38 1 1
-2347 52 0
-4634 1 0
-856 14 14
-193 0 4
-855 1 1
-28 1 1
-1255 1 1
-36 1 1
-97 0 1
-58 1 1
-1708 1 1
-48 1 1
-958 15 0
-3371 1 1
-37 1 1
-4267 0 13
-1061 0 1
-272 0 26
-8 1 15
-25 0 2
-112 2 0
-26 4 32
-4090 0 1
-3270 1 1
-17 1 1
-2822 0 1
-6206 1 0
-2318 0 2
-1504 0 1
-6189 3 0
-396 22 12
-918 0 1
-2340 1 1
-33 1 1
-326 1 1
-80 1 1
-205 3 2
-81 8 17
-2671 0 1
-1099 0 1
-144 1 1
-29 0 1
-2097 0 3
-24 3 0
-1207 4 4
-45 1 1
-757 0 5
-1926 1 1
-40 1 1
-2657 0 1
-414 1 0
-61 0 1
-235 0 2
-2087 0 1
-713 0 4
-58 3 0
-1027 3 0
-428 1 1
-17 1 1
-948 1 1
-41 1 1
-458 1 1
-21 1 1
-1055 0 1
-6611 0 3
-1575 4 5
-36 1 1
-99 2 0
-700 0 2
-151 0 1
-467 11 11
-272 0 3
-40 1 1
-2428 0 1
-750 2 0
-473 0 2
-421 1 1
-34 1 1
-1575 1 0
-3841 1 0
-560 1 0
-1108 1 0
-8087 1 0
-11881 1 1
-30 1 1
-4383 2 0
-6883 49 49
-3146 0 1
-906 3 0
-887 1 1
-80 1 1
-3115 0 1
-1037 1 0
-5866 0 2
-18 1 1
-582 0 5
-2828 1 0
-847 1 0
-1996 3 0
-3170 1 0
-1751 0 1
-910 3 0
-691 0 1
-5793 0 1
-26407 1 0
-672 0 1
-19269 29 35
-1371 29 0
-494 2 0
-20417 1 0
-18633 0 1
-601 1 0
-319 0 1
-6820 1 0
-5718 0 2
-17894 1 0
-4272 1 0
-4967 3 1
-290 1 0
-2447 1 0
-740 1 9
-9299 0 18
-7427 1 0
-8151 2 1
-673 1 0
-3453 0 1
-149 0 1
-611 0 4
-4662 0 4
-1752 1 1
-78 1 1
-1581 0 1
-1092 2 0
-159 1 0
-4480 0 2
-4019 0 1
-1451 22 23
-816 1 0
-8701 1 1
-23 1 1
-1796 2 0
-5015 6 1
-1383 8 0
-2368 1 1
-31 1 0
-1883 3 0
-335 0 1
-4157 0 1
-561 4 0
-1538 1 1
-61 0 1
-159 0 2
-3362 4 0
-3333 1 1
-46 1 1
-2307 1 0
-170 1 0
-5972 0 2
-840 0 2
-55 1 1
-28 1 1
-1154 0 2
-650 0 4
-30 0 4
-1100 10 11
-4343 6 0
-1663 4 0
-150 1 0
-3128 1 0
-1449 1 0
-2023 0 1
-428 3 6
-299 2 0
-427 7 7
-1914 14 14
-1273 7 7
-1444 72 0
-423 0 4
-954 1 0
-2467 1 0
-190 8 8
-2034 3 1
-6396 1 1
-34 1 1
-485 1 0
-348 7 0
-770 1 1
-29 0 13
-65 1 1
-1358 0 1
-302 0 1
-659 12 12
-293 0 1
-610 0 1
-906 12 0
-1331 0 6
-1786 0 1
-463 0 1
-4305 0 4
-1041 1 0
-11424 3 1
-13797 0 8
-166 0 1
-1510 5 0
-9069 0 8
-25 1 1
-332 5 3
-76 0 1
-1306 1 1
-46 1 1
-134 19 23
-1467 1 1
-32 1 1
-449 17 0
-367 9 9
-3525 12 10
-91 3 0
-1430 1 1
-24 1 1
-1156 9 13
-843 1 1
-28 1 1
-515 0 17
-1559 0 4
-1045 9 9
-1953 1 0
-31 1 1
-843 0 1
-2174 1 0
-3788 1 0
-2001 0 1
-2400 0 1
-1614 1 0
-8167 0 1
-2700 2 0
-2735 0 1
-8508 1 1
-57 1 1
-141 0 3
-448 1 1
-22 1 1
-2215 1 1
-32 1 1
-1714 32 32
-667 14 14
-142 1 0
-789 1 1
-45 1 1
-84 1 1
-95 1 1
-465 1 1
-45 6 4
-541 1 1
-42 1 1
-1339 5 6
-391 1 1
-20 0 1
-251 1 1
-22 1 1
-561 0 2
-78 3 0
-1718 1 1
-12 1 1
-1042 1 1
-38 1 1
-301 14 0
-222 10 10
-436 10 10
-556 55 55
-953 1 1
-17 1 1
-1752 20 0
-1561 135 0
-58 0 45
-245 101 11
-46 90 0
-150 0 270
-54 180 0
-2130 12 12
-1630 1 1
-26 1 1
-189 0 14
-296 2 0
-809 2 0
-17 20 0
-665 0 40
-236 1 1
-44 1 1
-352 1 1
-25 1 1
-554 6 6
-850 1 1
-33 1 1
-809 3 13
-1832 7 9
-468 1 1
-21 1 1
-951 1 1
-22 1 1
-219 17 18
-733 0 14
-215 2 2
-36 1 1
-301 1 1
-22 1 1
-241 1 1
-52 0 1
-47 1 1
-72 1 1
-109 1 1
-129 1 1
-28 1 1
-174 8 8
-683 3 0
-1190 285 0
-48 1 1
-1330 12 0
-557 17 17
-932 3 1
-27 1 1
-166 1 1
-19 1 1
-406 1 1
-48 3 3
-137 1 0
-161 6 6
-884 2 0
-58 1 1
-107 1 1
-150 14 14
-522 1 1
-28 1 1
-945 4 4
-34 1 1
-472 0 2
-203 0 1
-281 1 1
-46 1 1
-1130 1 0
-232 17 17
-510 1 1
-33 1 1
-62 10 10
-1501 1 1
-20 1 1
-573 1 1
-29 1 1
-928 0 3
-304 1 1
-41 1 1
-160 1 1
-58 1 1
-656 1 1
-40 4 0
-108 6 6
-321 1 1
-14 0 16
-91 1 1
-184 1 1
-43 8 3
-180 1 1
-68 1 1
-144 1 1
-27 1 0
-17 1 1
-212 0 1
-212 1 1
-34 1 1
-115 1 1
-41 1 1
-407 10 10
-200 1 1
-44 2 0
-187 2 0
-146 1 1
-17 1 1
-122 4 4
-73 1 0
-56 1 1
-155 1 17
-80 15 15
-458 1 1
-16 3 3
-343 1 1
-111 1 1
-160 55 55
-157 12 12
-346 0 2
-382 4 0
-35 1 1
-937 0 1
-246 25 0
-52 0 1
-419 0 1
-165 1 0
-75 24 3
-297 1 1
-38 1 1
-5066 1 0
-4922 7 9
-2488 14 14
-2241 1 1
-67 4 4
-39 1 0
-547 1 1
-43 1 1
-524 3715 901
-1796 4 2
-138 2 2
-16 1 1
-415 1 1
-18 1 1
-367 0 89
-1600 0 6
-2175 0 5
-606 14 14
-519 1 0
-540 1 1
-40 1 1
-568 2 0
-165 1 2
-31 1 1
-259 1 1
-41 1 1
-452 31 31
-623 40 62
-818 1 1
-42 1 1
-565 1 1
-44 1 1
-571 10 8
-61 1 1
-28 1 1
-233 2 0
-33 28 0
-53 1 1
-37 1 1
-75 0 396
-156 1 0
-473 0 4
-421 1 1
-35 1 1
-2132 1 1
-80 0 2
-544 9 9
-152 2 1
-33 1 1
-2932 1 1
-44 0 1
-164 22 0
-149 1 0
-534 1 1
-36 1 1
-113 1 1
-15 1 1
-661 1 1
-48 1 1
-1987 1 0
-34 1 1
-444 1 1
-45 1 1
-65 1 1
-67 1 1
-210 1 1
-68 1 1
-55 1 1
-47 1 1
-169 1 1
-64 1 1
-109 0 6
-77 2 32
-6 0 5
-67 0 1
-7 16 0
-51 12 0
-36 0 12
-700 1 1
-33 1 0
-49 0 2
-450 0 1
-98 4 0
-489 32 0
-63 5 1
-78 7 7
-538 17 17
-1269 1 0
-841 1 1
-43 1 1
-2004 1 1
-41 1 1
-86 0 4
-5 1 0
-36 1 1
-573 2 1
-297 1 0
-85 1 1
-30 1 1
-1041 1 0
-12 1 1
-392 33 12
-515 5 6
-583 1 1
-33 1 1
-616 16 16
-1052 0 11
-39 1 1
-184 1 1
-67 1 1
-102 7 7
-58 0 1
-307 1 1
-56 0 3
-930 21 19
-1264 0 1
-832 1 1
-28 1 1
-272 1 1
-82 1 1
-56 1 0
-976 6 6
-2015 0 3
-84 9 9
-130 13 17
-564 10 15
-154 1 0
-438 10 10
-38 0 5
-2141 1 1
-25 1 1
-73 10 10
-70 5 5
-132 1 1
-52 1 1
-599 1 1
-46 1 1
-279 1 1
-18 1 1
-239 2 0
-383 6 0
-224 0 1
-321 3 0
-8 16 0
-1775 1 1
-18 2 0
-575 16 16
-60 1 1
-16 1 1
-1247 2 0
-173 3 0
-41 1 1
-57 8 8
-285 2 0
-672 1 1
-44 1 1
-106 0 1
-148 1 1
-49 3 0
-146 5 11
-91 1 1
-79 1 1
-94 1 1
-101 1 1
-88 16 16
-117 1 1
-15 1 1
-58 1 1
-93 1 1
-140 1 0
-326 1 1
-44 1 1
-160 1 1
-23 1 1
-481 14 14
-181 4 4
-72 1 1
-25 1 1
-88 1 3
-36 0 12
-92 1 1
-56 10 0
-13 0 1
-66 1 1
-141 2 0
-65 1 1
-367 0 2
-610 1 1
-22 1 1
-150 1 1
-85 1 1
-109 1 1
-167 3 1
-23 1 0
-26 1 1
-74 1 1
-33 1 1
-176 1 1
-25 2 2
-193 1 1
-35 0 1
-383 0 5
-249 1 1
-69 1 1
-98 1 1
-62 1 1
-62 1 2
-74 0 1
-68 1 1
-438 1 1
-64 1 1
-47 0 8
-125 3 0
-75 5 5
-45 1 1
-197 1 1
-27 1 1
-116 13 13
-218 15 20
-1107 16 19
-73 1 1
-25 1 1
-199 1 1
-60 1 1
-994 1 1
-43 0 1
-18 1 1
-1215 18 18
-340 1 1
-34 1 1
-1350 16 16
-1726 4 4
-193 1 1
-48 1 1
-295 1 1
-18 1 1
-411 19 19
-175 1 1
-49 1 1
-146 1 1
-61 1 1
-116 1 1
-41 1 1
-137 1 1
-30 1 1
-158 9 9
-136 10 13
-349 8 8
-468 1 1
-44 1 1
-862 17 17
-813 1 1
-24 1 1
-214 10 4
-228 1 1
-34 1 1
-101 12 12
-242 1 1
-69 1 1
-185 1 1
-24 1 0
-164 0 1
-222 1 1
-25 1 1
-297 10 10
-1171 1 0
-182 1 1
-35 1 1
-350 19 19
-1966 1 1
-24 1 1
-548 7 7
-208 13 12
-298 1 1
-65 1 1
-193 2 2
-28 1 1
-125 4 4
-95 7 7
-566 1 1
-40 1 1
-118 0 1
-318 1 0
-374 1 1
-58 1 1
-143 1 1
-74 1 1
-53 21 0
-81 1 1
-45 1 1
-138 15 16
-180 1 1
-62 1 1
-661 1 1
-48 1 1
-1463 1 0
-156 0 1
-148 1 1
-19 1 0
-17 1 1
-1927 4 0
-1469 14 14
-466 0 1
-3098 0 1
-1141 2 3
-743 14 14
-79 1 1
-22 1 1
-362 0 1
-682 16 9
-275 0 4
-539 1 0
-61 0 7
-331 0 4
-130 1 1
-31 0 3
-1554 1 1
-43 1 1
-224 1 1
-49 1 1
-159 3 0
-1064 27 27
-104 1 1
-21 1 1
-222 2 2
-49 1 1
-1397 1 1
-37 1 1
-414 0 2
-695 1 1
-31 1 1
-742 1 1
-21 1 1
-230 3 2
-42 1 1
-68 1 1
-37 1 1
-703 0 3
-2216 84 83
-1430 1 1
-23 1 1
-1867 13 0
-35 1 1
-137 16 16
-1500 4 0
-4546 1 1
-25 1 1
-358 19 19
-1549 1 1
-39 4 3
-1037 1 1
-40 2 0
-890 6 0
-41 2 0
-498 3 0
-321 0 1
-281 3 0
-414 1 1
-70 1 1
-284 1 0
-214 1 1
-28 1 1
-280 1 0
-650 1 1
-47 1 1
-1030 1 1
-91 1 1
-6520 5 5
-462 1 0
-2864 0 3
-1930 0 4
-2915 1 1
-20 1 1
-413 1 0
-1844 11 11
-133 0 6
-569 10 10
-110 12 12
-184 0 3
-228 1 1
-43 2 2
-51 14 13
-1499 1 0
-12 1 1
-378 1 1
-49 1 1
-424 1 0
-1069 1 1
-142 0 1
-821 2 9
-311 1 6
-247 1 1
-86 1 1
-1850 1 1
-26 1 1
-498 1 1
-34 1 1
-688 5 9
-44 1 1
-369 1 1
-69 1 1
-156 2 0
-83 1 1
-128 1 1
-50 9 9
-249 1 1
-70 0 1
-624 2 0
-74 2 1
-300 1 1
-26 1 1
-240 4 0
-1705 1 1
-52 1 1
-231 29 24
-378 2 0
-236 1 1
-76 1 1
-116 9 12
-301 20 20
-59 0 6
-43 1 1
-384 15 15
-1414 5 0
-225 0 2
-1234 1 0
-29 1 1
-235 10 10
-227 1 1
-77 4 0
-43 5 9
-485 7 7
-380 10 0
-46 1 0
-90 1 1
-161 1 1
-401 1 1
-58 1 1
-2127 3 0
-186 20 20
-323 5 5
-47 1 1
-236 1 1
-31 0 2
-1568 1 1
-136 0 1
-202 0 3
-77 1 1
-44 1 1
-411 12 11
-317 0 2
-599 1 1
-37 1 1
-391 1 0
-273 1 0
-744 0 4
-703 1 1
-20 1 1
-198 3 0
-158 19 15
-27 12 0
-282 1 1
-32 4 0
-740 1 0
-327 1 1
-105 1 1
-146 16 16
-101 1 0
-21 1 1
-232 1 1
-33 2 0
-12 1 1
-189 1 1
-30 2 2
-544 1 1
-153 1 1
-586 5 0
-1351 21 0
-446 49 49
-121 7 7
-1147 12 12
-777 1 0
-701 1 1
-29 2 2
-154 12 12
-191 1 1
-55 1 1
-113 0 1142
-87 0 2
-15 0 1
-525 1 1
-22 1 1
-355 10 10
-50 0 8
-252 1 1
-31 1 1
-354 6 5
-148 15 15
-407 1 1
-42 1 1
-275 0 1
-737 5 9
-1432 1 1
-39 1 1
-84 0 2
-77 7 7
-514 20 20
-385 7 1
-815 1 1
-45 1 1
-487 1 1
-66 1 1
-2379 0 24
-779 1 1
-18 1 0
-2653 4 0
-34 1 1
-191 1 1
-35 1 1
-1174 12 0
-2497 1 1
-24 0 1500
-447 8 0
-3268 1 0
-946 1 0
-2223 20044 20060
-119 1 1
-71 0 3
-53 0 5
-40 1 1
-309 1 1
-57 1 1
-101 1 1
-47 2 2
-67 1 1
-47 1 1
-74 0 1
-28 1 1
-167 1 1
-33 1 1
-543 1 1
-27 11 34
-33 1 1
-149 7 7
-61 1 1
-120 1 1
-366 1 1
-55 1 1
-121 1 1
-62 1 1
-78 1 1
-48 1 1
-161 1 1
-26 1 1
-191 1 1
-20 11 11
-550 1 1
-76 1 0
-20 1 1
-112 1 1
-149 1 1
-284 1 1
-37 1 1
-705 1 12
-106 12 12
-83 1 1
-46 1 1
-1500 1 1
-81 1 1
-210 1 1
-26 1 1
-713 1 1
-48 1 1
-723 0 3
-196 6 6
-62 2 2
-32 1 1
-606 1 2
-357 1 1
-38 292 0
-589 1 1
-30 1 1
-714 8 8
-639 1 1
-20 1 1
-1068 0 1
-571 1 1
-49 1 1
-436 0 1
-609 0 2
-30 1 1
-66 0 1
-349 11 11
-65 1 1
-40 1 1
-717 0 3
-299 1 1
-29 1 1
-724 1 0
-275 1 1
-33 1 1
-318 0 3
-279 1 1
-28 1 1
-389 1 0
-548 0 8
-330 1 1
-47 1 1
-170 1 1
-47 1 1
-519 14 14
-841 24 24
-732 1 1
-29 3 3
-688 2 2
-23 0 1
-94 14 14
-726 13 13
-508 0 12
-21 6 0
-69 1 1
-37 1 1
-590 1 1
-59 1 1
-89 11 11
-164 1 1
-58 1 1
-1709 18 18
-520 1 1
-27 1 1
-683 10 10
-814 1 1
-26 1 1
-350 1 1
-39 1 1
-132 6 6
-439 10092 10075
-78 15 15
-3352 1 1
-23 1 1
-873 4 4
-887 1 0
-1827 1 0
-216 6 6
-805 2 0
-874 0 8
-2266 1 1
-47 1 1
-761 0 4
-86 1 1
-19 1 1
-1794 9 9
-271 0 1
-2266 1 1
-34 1 1
-916 0 1
-21 1 1
-108 21 21
-141 1 1
-27 1 1
-406 3 0
-3950 1 1
-38 1 1
-128 2 2
-56 1 1
-72 0 1
-96 1 1
-22 1 1
-169 7 7
-511 1 1
-38 1 1
-1070 1 1
-90 1 1
-50 1 1
-41 1 0
-30 1 1
-659 12 12
-701 1 1
-33 1 1
-569 15 15
-70 1 1
-38 1 1
-955 0 3
-130 1 1
-63 1 1
-251 8 8
-191 1 1
-26 0 3
-187 1 0
-916 5 1
-70 13 13
-498 20061 20021
-160 1 1
-76 1 1
-95 1 1
-76 1 1
-275 1 0
-101 1 1
-79 1 1
-100 7 7
-159 1 1
-75 0 8
-87 1 1
-76 1 1
-44 1 1
-71 32 32
-89 11 12
-196 1 1
-55 0 2
-61 1 1
-83 0 1
-944 1 1
-126 1 1
-81 6 6
-41 3 0
-641 1 1
-92 1 0
-113 1 1
-39 1 1
-671 1 1
-28 1 1
-123 1 1
-59 1 1
-210 1 1
-17 1 1
-168 15 14
-494 1 0
-22 1 1
-484 18 18
-376 1 1
-114 2 0
-67 1 1
-10 1 1
-109 1 1
-165 1 1
-149 6 6
-234 1 1
-19 5 5
-64 1 1
-111 1 1
-220 1 1
-89 1 1
-119 1 1
-113 2 0
-168 1 1
-73 1 1
-194 1 1
-50 0 4
-37 1 1
-95 3 1
-43 1 1
-153 1 1
-83 1 1
-55 1 1
-39 1 1
-70 7 0
-59 7 7
-75 1 1
-84 2 2
-110 1 0
-42 1 1
-129 9978 10000
-438 1 1
-43 1 0
-55 1 1
-40 1 1
-175 1 1
-46 1 1
-52 1 1
-19 1 1
-277 1 1
-60 1 1
-98 1 1
-24 1 1
-333 4 4
-1047 2 0
-4080 1 1
-38 1 1
-837 0 64
-172 1 1
-55 1 1
-1818 2 0
-1143 13 13
-335 1 0
-1944 5 0
-39 6 0
-4057 3 8
-9465 5 4
-301 19 1
-191 84 0
-427 1 1
-29 0 4
-157 4 5
-296 21 18
-158 2 2
-36 1 1
-539 13 13
-399 1 1
-46 1 1
-348 1 1
-49 1 1
-268 1 0
-66 0 4
-178 2 2
-107 1 1
-133 5 5
-355 1 1
-30 1 1
-346 1 1
-29 1 1
-161 1 1
-38 1 1
-121 4 4
-55 8 8
-67 7 7
-318 17 17
-259 1 1
-94 1 1
-80 1 1
-35 1 1
-260 1 1
-81 1 1
-106 1 1
-58 1 2
-301 3 0
-2052 1 1
-40 1 1
-174 20 22
-574 0 2
-414 1 0
-234 0 1
-425 51224 51060
-1568 14 14
-11956 0 1
-2667 0 2
-884 1 1
-19 1 1
-676 1 1
-63 1 1
-3138 0 3
-3038 5 2
-132 10 6
-136 18 13
-363 1 1
-89 1 1
-382 1 1
-29 1 1
-58 8 7
-297 4 0
-66 1 1
-93 2 0
-145 1 1
-31 5 5
-576 1 1
-89 1 1
-1256 0 12
-67 1 1
-193 2 2
-23 1 1
-51 1 0
-727 1 0
-1148 12 12
-837 1 1
-77 1 1
-941 10 10
-776 19 19
-300 1 1
-24 1 1
-256 1 7
-93 1 1
-224 2 0
-138 1 1
-563 1 1
-104 4 4
-2898 1 1
-46 1 1
-282 1 1
-39 1 1
-204 2 2
-22 1 1
-469 1 1
-20 1 1
-140 1 1
-26 1 1
-745 0 2
-539 0 6
-1536 1 0
-817 4 4
-202 1 1
-48 1 1
-168 1 1
-53 1 1
-379 10 10
-1178 14 14
-132 5 0
-555 1 1
-42 1 1
-573 1 1
-21 1 1
-462 1 1
-43 1 1
-121 1 1
-48 0 3
-15 1 5
-1404 0 1
-934 1 1
-49 1 1
-1350 1 0
-384 1 1
-24 1 1
-4169 0 15
-244 10 10
-2167 18 14
-64 1 1
-31 1 1
-185 0 4
-1647 1 1
-20 1 1
-227 1 1
-37 1 1
-636 3 4
-5590 1 1
-39 1 1
-461 0 2
-2145 1 1
-23 1 1
-1114 0 2
-688 0 1
-901 18 18
-4781 0 4
-815 0 1
-5027 42 47
-415 0 1
-2743 1 1
-78 1 1
-390 1 0
-328 0 1
-878 0 1
-5752 0 2
-1554 1 1
-60 1 1
-278 0 1
-19 1 1
-1164 11 11
-691 0 2
-960 1 0
-62 0 20
-2108 0 2
-1265 0 1
-1642 2 0
-3584 2 0
-12086 2 0
-3766 0 2
-1209 1 7
-3466 1 0
-1448 1 0
-1943 0 1
-698 0 8
-1166 135 135
-2030 2 0
-540 1 0
-1736 14 0
-3128 0 2
-4464 0 1
-3597 1 0
-378 1 0
-1269 0 3
-1182 1 0
-654 0 3
-2049 1 0
-6838 1 1
-69 0 3
-154 1 0
-2718 1 1
-30 1 1
-160 11 11
-4954 0 1
-420 1 1
-123 1 1
-156 0 4
-219 4 0
-195 1 0
-4402 3 0
-3045 0 1
-1249 1 0
-3522 0 10
-675 20 20
-117 8 0
-346 0 1
-8538 5 0
-455 1 0
-119 0 1
-355 48 48
-724 1 0
-9254 22 22
-1672 1 0
-833 0 1
-4251 1 0
-8 1 1
-2079 0 1
-1735 8 12
-1612 0 1
-1373 5 0
-8585 7 0
-64 1 1
-3799 1 0
-258 2 0
-899 1 0
-1362 8 9
-593 0 2
-3351 2 0
-618 0 4
-905 2 15
-2797 1 0
-2776 2 0
-4110 0 6
-4466 18 18
-1783 9 9
-475 0 4
-134 1 0
-12963 8 0
-1616 0 2
-1685 2 0
-2225 2 0
-428 0 1
-458 20 20
-2860 0 3
-677 4 6
-325 11 1
-1887 0 1
-913 0 1
-997 5 5
-2814 17 15
-1389 1 0
-1200 0 4
-2495 1 0
-3921 26431 26426
-2419 0 1
-6110 0 1
-1370 0 1
-3085 1 0
-3568 1 1
-24 0 9
-597 1 0
-2642 1 0
-1545 10 0
-4952 0 1
-6146 2 0
-1452 1 0
-2967 1 0
-4920 5 0
-147 4 5
-850 1 0
-1875 1 0
-695 3 1
-1719 0 1
-259 0 1
-294 1 0
-128 0 2
-3051 0 1
-908 0 4
-3399 0 1
-4673 1 0
-3179 1 0
-411 1 1
-44 1 1
-174 1 0
-1047 17 17
-998 178 0
-671 0 40
-2093 1 0
-313 0 1
-7581 1 0
-3245 1 0
-972 0 4
-4085 2 0
-346 1 1
-45 1 1
-368 1 0
-26 1 1
-8444 0 1
-17044 1 0
-2795 2 0
-2860 1 0
-622 0 1
-167 0 5
-1968 0 2
-259 2 0
-4992 29 27
-170 1 0
-3528 0 1
-191 1 2
-117 2 0
-2275 1 0
-12676 1 1
-20 1 1
-9972 1 0
-13955 0 5
-19867 1 0
-9612 1 0
-14233 0 32737
-6316 1 1
-19 1 1
-970 8 8
-2685 16 16
-18093 0 1
-6799 0 16
-3350 0 1
-7574 0 12
-2132 0 1
-7228 52793 52800
-1955 22 22
-698 0 1
-2149 1 0
-6880 0 2
-960 0 1
-23 1 1
-2646 2 0
-3867 5 0
-26077 0 3
-3174 1 0
-8183 0 1
-2817 10 0
-5841 1 0
-2081 0 1
-374 0 2
-3589 0 4
-10625 28 28
-3275 3 0
-773 7 7
-175 1 1
-79 1 1
-400 12 12
-1096 0 4
-717 7 7
-52 1 1
-68 5 1
-2117 0 3
-130 14 14
-1124 0 3
-413 0 4
-643 3 0
-58 1 1
-127 1 1
-196 0 2
-226 3 0
-136 3 4
-293 1 1
-25 0 3
-63 1 1
-417 0 2
-412 0 16
-737 4 0
-402 2 0
-654 1 1
-42 1 1
-75 1 1
-64 1 1
-2980 4 0
-576 0 1
-29 2 2
-715 1 1
-36 1 1
-511 38 38
-218 4 40
-44 1 5
-43 49 5
-709 21 21
-1147 9 9
-22 1 1
-195 7 4
-659 3 0
-27 1 1
-637 1 1
-42 1 1
-531 1 1
-67 1 1
-39 1 0
-717 11 11
-53 1 1
-61 1 1
-1535 1 1
-89 0 1
-49 1 0
-102 1 1
-67 1 1
-76 1 1
-129 1 1
-85 1 1
-607 10 0
-12 137 1
-41 1 1
-1043 1 1
-22 1 1
-203 3 0
-480 14 21
-91 23 23
-1345 2 1
-435 15 17
-1188 30 0
-1778 1 0
-120 0 3
-3797 1 0
-3211 0 1
-2456 4 0
-954 0 4
-1847 0 1
-5929 20 20
-984 14 0
-2112 1 0
-2013 1 0
-1770 14 14
-3100 1 0
-1160 16 0
-733 7 7
-238 3 2
-2203 2 1
-5654 1 1
-28 5 10
-482 0 1
-2970 0 4
-2892 0 1
-251 1 7
-1346 1 0
-877 0 4
-3583 0 1
-1178 0 1
-1293 0 2
-491 2 0
-6803 1 1
-22 1 1
-2218 1 1
-44 1 1
-4780 4 0
-3026 14 13
-442 5 5
-2022 6 6
-506 2 0
-8557 1 1
-36 1 0
-1575 1 0
-1329 1 1
-35 1 0
-247 1 1
-16 1 1
-184 1 1
-18 1 1
-1636 0 7
-23 1 1
-527 1 1
-39 1 1
-653 3 0
-227 1 1
-18 1 1
-218 0 323
-91 1 0
-124 0 15
-621 0 2
-555 8 8
-467 1 1
-40 1 1
-372 1 1
-25 1 1
-188 12 12
-357 0 2
-2389 1 1
-22 1 1
-2579 0 5
-461 1 1
-36 1 1
-1584 1 1
-26 1 0
-429 1 0
-33 1 1
-1071 0 4
-1068 9 0
-1472 0 2
-1839 94 92
-337 1 1
-46 1 1
-416 1 1
-42 1 1
-1255 0 2
-628 17 15
-587 15 15
-398 3 0
-623 1 1
-78 0 3
-287 10 0
-191 0 2
-493 1 1
-42 4 0
-219 0 1
-408 1 1
-23 1 1
-283 1 1
-21 1 1
-633 2 0
-241 6 6
-457 1 0
-330 0 16
-428 1 0
-4 6 0
-324 0 1
-3060 0 2
-9953 0 1
-1899 0 6
-6431 0 1
-8674 0 4
-4595 11 0
-5064 2 0
-2813 12 12
-1391 5 0
-3690 1 1
-64 1 1
-2635 1 1
-49 1 1
-69 1 1
-15 1 1
-605 4 4
-400 8 0
-735 0 20
-3074 2 0
-1879 0 1
-572 0 8
-576 1 1
-42 1 1
-265 24 0
-209 11 11
-953 1 1
-42 0 5
-58 1 0
-95 1 0
-1121 1 1
-17 1 1
-751 0 1
-24 1 1
-351 1 1
-43 3 3
-565 1 1
-15 1 1
-271 1 0
-323 1 1
-23 1 1
-221 7 7
-705 9 0
-631 2 0
-64 1 1
-1577 1 1
-21 0 1
-371 7 21
-160 0 1
-283 1 1
-48 1 1
-227 1 1
-40 0 1
-1359 0 2
-836 13 13
-722 7 7
-1153 1 1
-93 1 1
-797 14 14
-433 8 0
-108 11 11
-140 1 1
-40 1 1
-470 1 1
-42 1 1
-1106 0 1
-85 4 4
-129 1 1
-123 1 0
-95 1 1
-104 6 1
-641 1 1
-77 1 1
-57 1 1
-62 1 1
-473 2 0
-262 6 0
-45 1 1
-63 2 0
-39 1 1
-267 0 1
-197 2 104
-189 107 3
-112 0 4
-108 5 0
-563 14 14
-324 1 0
-205 1 1
-17 1 1
-495 0 1
-201 4 0
-14 1 1
-667 42 42
-178 1 1
-58 1 1
-133 1 1
-24 1 1
-91 24 24
-342 1 1
-32 1 1
-121 1 1
-62 1 1
-2371 2 0
-164 8 1
-655 1 1
-30 1 1
-271 1 1
-47 1 1
-609 1 0
-1780 2 0
-742 1 1
-40 1 1
-2014 1 0
-1741 3 0
-3833 0 1
-14622 161198 190000
-5156 0 1
-1680 1 1
-88 1 1
-4502 0 1
-46 1 1
-800 4 4
-23 1 1
-1305 2 0
-136 0 1
-4941 0 1
-547 0 1
-70 8 8
-293 1 1
-35 1 1
-1165 4 0
-6662 1 1
-46 1 1
-167 0 8
-214 1 1
-35 1 1
-108 1 0
-1063 0 1
-1017 1 1
-20 0 6
-1725 0 1
-150 5 5
-33 1 0
-12 1 1
-349 1 1
-24 0 1
-1562 1 1
-31 1 1
-2513 0 1
-73 36 36
-305 1 1
-27 1 1
-543 1 1
-47 4 28
-5476 10 10
-531 1 1
-37 1 1
-776 1 1
-44 2 2
-115 22 20
-181 1 1
-125 3 3
-466 1 1
-76 1 1
-144 5 5
-32 1 1
-225 1 1
-41 1 1
-707 24 24
-66 4 4
-414 1 1
-42 1 1
-81 1 1
-63 1 1
-76 28 46
-187 1 1
-97 1 1
-99 9 9
-85 14 14
-81 6 6
-62 1 1
-109 4 5
-150 1 0
-44 4 4
-93 11 11
-188 3 3
-73 1 1
-52 1 1
-19 13 0
-48 1 1
-62 0 7
-205 1 1
-68 9 9
-99 4 0
-21 1 0
-52 1 1
-171 1 1
-109 3 1
-6 0 2
-190 1 1
-69 10078 10069
-90 3 1
-197 1 1
-157 0 6
-137 1 1
-101 2 2
-233 6 6
-62 1 1
-104 0 1
-143 1 1
-119 1 1
-106 2 0
-176 1 1
-79 0 1
-50 1 1
-50 3 3
-179 1 1
-159 1 1
-36 1 1
-107 1 1
-176 1 1
-154 0 5
-91 1 1
-54 1 1
-77 1 1
-238 2 2
-50 1 1
-1421 1 1
-23 1 1
-216 1 1
-122 1 1
-86 1 1
-41 3 1
-336 7 7
-41 9 0
-107 1 1
-90 1 3
-6 1 0
-84 1 1
-213 1 1
-26 1 1
-138 1 1
-25 1 1
-206 1 1
-36 3 3
-37 7 0
-500 1 1
-52 1 1
-52 1 1
-48 1 1
-395 1 1
-66 6 6
-72 1 0
-69 1 1
-100 10 10
-160 1 0
-64 7 7
-89 1 1
-123 1 1
-128 1 1
-36 1 1
-231 1 1
-61 1 1
-564 8 8
-593 47 47
-163 1 0
-196 8 8
-174 5 5
-37 1 1
-67 0 1
-192 1 1
-60 3 0
-19 1 1
-1149 1 1
-18 1 1
-77 1 1
-32 2 0
-32 1 1
-136 1 1
-78 2 0
-162 4 0
-41 1 1
-351 13 13
-1634 2 0
-229 8 8
-57 13 2
-410 1 1
-76 1 1
-180 1 1
-92 1 1
-270 1 1
-40 1 1
-92 1 1
-53 1 1
-227 1 1
-42 1 1
-357 4 4
-23 1 1
-94 1 0
-200 6 0
-201 7 7
-70 5 13
-57 4 0
-35 1 1
-206 1 1
-76 2 2
-651 1 1
-68 4 0
-73 1 1
-49 4 0
-37 1 1
-145 2 2
-78 2 2
-108 12 12
-52 1 1
-35 1 1
-242 1 3
-76 2 2
-50 12 12
-70 1 1
-33 0 2
-57 1 1
-64 15 15
-168 1 1
-22 1 1
-63 36 37
-73 0 2
-64 1 1
-177 2 0
-19 4 0
-55 1 0
-33 1 1
-51 1 1
-122 1 1
-296 1 1
-85 1 1
-109 1 1
-64 1 1
-155 1 1
-58 0 2
-72 1 1
-25 1 1
-128 1 1
-45 2 0
-444 1 1
-25 1 1
-64 1 1
-21 1 1
-368 15 15
-734 2 0
-701 15 15
-71 1 1
-41 1 1
-77 1 1
-56 1 1
-478 2 0
-714 8 7
-95 2 2
-50 4 3
-1129 1 1
-34 1 1
-1715 1 1
-87 1 1
-692 1 1
-47 0 1
-75 1 1
-541 12 12
-1602 10 10
-1265 1 1
-46 1 1
-298 1 1
-22 1 1
-186 1 1
-34 1 1
-202 1 1
-61 1 0
-185 1 1
-24 1 0
-98 0 2
-258 8 14
-967 1 1
-15 1 1
-625 1 0
-1362 0 4
-23365 4 0
-246 26975 26986
-3307 0 1
-13671 3 3
-52 1 1
-1308 2 0
-942 0 1
-17790 1 0
-4586 0 1
-949 0 2
-15047 0 1
-606 2 0
-7820 0 4
-22313 16 0
-10539 8 0
-4836 0 1
-8320 18 18
-388 2 0
-194 1 1
-49 1 1
-320 1 1
-34 1 1
-6813 0 1
-8719 3 0
-7037 1 0
-721 0 1
-999 6 0
-17 1 0
-3075 5 0
-593 13 11
-1006 12 12
-3487 1 0
-9535 0 4
-23 0 2
-23 2 0
-513 0 3
-377 1 0
-2627 0 2
-16 0 1
-211 18 18
-571 2 0
-7617 0 1
-1607 1 0
-69 1 1
-66 1 1
-275 1 1
-67 7 0
-25 1 1
-1206 1 0
-136 8 7
-612 1 1
-61 1 1
-740 0 2
-78 26 26
-129 15 15
-69 12 16
-1483 13 28
-1062 1 0
-108 4 0
-685 0 2
-1566 1 0
-192 4 4
-1452 9 45
-1514 1 1
-46 1 1
-1969 0 1
-35 1 1
-1094 1 0
-618 1 1
-43 1 1
-6580 1 0
-1636 5 0
-6325 1 1
-32 1 1
-1041 0 2
-174 9 0
-11983 18 18
-142 8 8
-2203 10 8
-2025 1 1
-39 1 1
-907 4 4
-225 1 1
-124 1 1
-3928 0 22
-38 2 0
-44 18 0
-46 0 6
-61 0 1
-3653 6 0
-34 1 1
-4559 1 1
-28 1 1
-283 5 5
-1572 28 28
-351 1 1
-34 1 1
-443 19 19
-57 1 1
-21 1 1
-231 1 1
-94 1 1
-105 1 1
-208 5 5
-124 1 1
-112 3 3
-207 1 1
-38 1 1
-244 1 1
-60 1 1
-98 1 1
-50 1 1
-256 5 5
-23 1 1
-157 1 1
-33 1 1
-143 1 1
-59 1 1
-51 1 1
-45 1 0
-73 1 1
-81 1 1
-339 1 1
-56 0 5
-142 1 1
-232 1 1
-43 1 1
-332 1 1
-47 1 1
-479 1 0
-137 0 3
-1456 10 13
-63 1 1
-37 1 1
-261 0 2
-109 1 1
-50 1 1
-56 129 1
-88 1 0
-44 1 1
-54 1 1
-56 1 50
-58 50 1
-54 277 1
-44 1 1
-297 0 39
-142 1 1
-85 1 1
-124 16 16
-58 3 15
-677 1 0
-1333 2 0
-13591 6 0
-989 1 1
-107 1 1
-678 1 1
-31 1 1
-2571 5 5
-56 2 2
-39 1 1
-3986 0 4
-18351 32 30
-10811 1 1
-25 0 1
-417 1 1
-40 1 1
-159 4 4
-37 4 4
-179 1 1
-51 1 1
-103 2 0
-108 1 1
-79 1 1
-25 1 1
-58 1 1
-12 1 1
-275 14 0
-80 1 1
-83 1 1
-24 1 1
-59 1 0
-91 1 1
-65 1 1
-67 1 1
-136 4 0
-68 8 0
-331 5 0
-40 1 1
-110 10 6
-64 1 1
-368 1 1
-22 1 1
-509 1 1
-89 1 1
-926 1 0
-959 1 1
-44 1 1
-72 11 0
-47 1 1
-361 1 1
-37 1 1
-2204 2 2
-45 1 1
-1117 18 18
-141 1 1
-47 1 1
-148 1 1
-75 1 1
-104 1 0
-205 3 2
-249 1 1
-146 1 1
-94 1 1
-34 1 1
-700 0 331
-21 1 1
-73 1 1
-49 1 1
-356 1 1
-16 1 1
-112 1 1
-36 9 0
-515 1 1
-27 2 2
-192 1 1
-53 0 14
-82 1 1
-302 1 1
-68 1 1
-52 12 12
-52 1 1
-34 1 1
-166 7 7
-384 1 1
-31 1 1
-281 1 1
-57 1 1
-176 0 1
-1625 1 1
-26 1 1
-369 1 1
-21 1 1
-86 1 1
-134 1 1
-215 1 1
-214 15 1
-50 2 2
-26 1 1
-78 0 19
-64 1 1
-118 53 53
-433 1 1
-76 0 1
-6 12 0
-52 1 1
-108 1 1
-87 1 1
-62 1 1
-26 1 1
-291 2 1
-143 1 1
-29 1 1
-56 12 12
-230 1 1
-153 4 4
-87 32 32
-584 12 12
-227 1 0
-1931 4 0
-836 1 1
-68 1 1
-205 24 19
-816 1 2
-1932 0 7
-1732 13 0
-257 4 0
-1423 1 0
-129 6 0
-1505 1 1
-42 0 1
-373 13 13
-565 1 1
-76 1 0
-1881 0 4
-68 4 0
-43 0 4
-2201 8 8
-3726 3 0
-339 15 11
-249 1 1
-35 1 1
-250 1 1
-38 1 1
-359 11 12
-109 1 1
-43 18 0
-822 1 1
-53 1 1
-325 15 15
-123 1 1
-42 6 6
-240 1 1
-44 1 1
-438 7 7
-142 2 0
-1004 0 1
-9275 1 1
-37 1 0
-2071 0 1
-1253 9 9
-9137 0 1
-12513 2 1
-11243 1 1
-26 1 1
-816 4 0
-15996 2 0
-1594 1 0
-363 5 0
-6757 47 41
-2700 1 0
-841 0 1
-1807 0 2
-2565 11 0
-2089 0 2
-477 1 0
-657 0 1
-776 0 20
-365 82 49
-779 0 1
-401 25 63
-441 0 2
-1152 0 2
-1315 1 0
-5352 6 8
-902 0 1
-2154 1 1
-36 1 1
-109 0 1
-668 6 0
-1923 0 1
-91 3 2
-3560 1 0
-1235 1 0
-139 26 0
-7381 1 0
-155 0 14
-2393 1 1
-33 1 1
-507 4 0
-1337 0 1
-9954 3 0
-1588 1 0
-2605 1 1
-23 1 1
-3000 0 3
-8249 8 0
-912 0 1
-338 2 0
-734 1 0
-4332 1 0
-416 0 4
-1691 0 1
-295 1 0
-214 2 0
-121 0 1
-784 0 1
-2512 0 1
-4465 12 11
-926 1 0
-190 1 0
-5780 0 1
-490 5 0
-228 1 1
-45 1 1
-207 3 0
-322 0 1
-633 1 1
-24 1 0
-1516 5 0
-1025 0 13
-1518 0 1
-591 10 10
-1061 1 0
-1371 1 1
-22 1 1
-928 0 2
-182 8 0
-328 1 0
-301 0 1
-994 1 1
-18 0 6
-1743 0 1
-2350 22 23
-1548 0 2
-1498 8 6
-7484 0 3
-2988 7 7
-93 2 0
-322 1 0
-280 1 1
-49 1 1
-2114 16 17
-617 0 1
-1012 0 1
-495 1 0
-29 1 1
-3134 1 0
-1837 0 4
-4079 0 1
-905 8 0
-5764 0 1
-3493 0 20
-1174 0 1
-900 0 1
-1006 1 0
-1699 0 1
-1682 1 0
-688 1 1
-21 1 1
-3349 0 1
-384 3 1
-3616 3 0
-748 0 1
-3001 0 10
-541 1 0
-286 1 1
-22 0 1
-250 1 1
-27 1 1
-898 1 0
-1161 0 2
-2067 0 1
-8000 0 12
-857 29 0
-1399
-
-chain 72788 chr6_qbl_hap2 4565931 + 3808375 3809175 chr11 135006516 + 118201008 118201901 1739030
-615 13 107
-119 2 1
-51
-
-chain 65509 chr6_qbl_hap2 4565931 + 2258974 2259668 chr6 171115067 - 140105134 140105832 1929446
-178 0 4
-516
-
-chain 50097 chr6_qbl_hap2 4565931 + 2471491 2473781 chr6 171115067 + 44553942 44556234 2550079
-125 147 147
-81 297 298
-77 380 378
-160 345 343
-82 181 182
-60 299 303
-56
-
-chain 30865 chr6_qbl_hap2 4565931 + 3800272 3800791 chr6 171115067 + 32713281 32713770 4500604
-73 89 59
-184 77 77
-96
-
-chain 26769 chr6_qbl_hap2 4565931 + 2218659 2218944 chr1 249250621 - 83463584 83463869 6084938
-285
-
-chain 25453 chr6_qbl_hap2 4565931 + 1111775 1112573 chr8 146364022 + 94982474 94983353 6804147
-181 108 108
-72 385 466
-52
-
-chain 18586 chr6_qbl_hap2 4565931 + 2472758 2473366 chr3 198022430 - 151831455 151832050 2830221
-34 221 221
-81 91 91
-5 35 35
-55 44 31
-42
-
-chain 18520 chr6_qbl_hap2 4565931 + 2558133 2558568 chr13 115169878 - 5075411 5075846 11677159
-71 220 220
-144
-
-chain 17263 chr6_qbl_hap2 4565931 + 3694162 3694369 chr4 191154276 + 3927369 3927573 12785974
-50 3 0
-26 4 4
-124
-
-chain 16745 chr6_qbl_hap2 4565931 + 2589692 2589893 chr11 135006516 + 74748600 74748801 13289219
-113 12 12
-76
-
-chain 15761 chr6_qbl_hap2 4565931 + 3069257 3069435 chr19 59128983 - 18504215 18504393 607285
-59 1 1
-45 1 1
-72
-
-chain 15688 chr6_qbl_hap2 4565931 + 3804298 3804527 chr11 135006516 - 109492289 109492518 14350697
-129 50 50
-50
-
-chain 14458 chr6_qbl_hap2 4565931 + 3751685 3752808 chr6 171115067 + 32441118 32442245 15662572
-59 270 268
-88 656 662
-50
-
-chain 14065 chr6_qbl_hap2 4565931 + 3705931 3706083 chr6 171115067 - 138602057 138602209 16122341
-152
-
-chain 13955 chr6_qbl_hap2 4565931 + 2589304 2589471 chr9 141213431 - 10269188 10269355 16251226
-93 11 11
-63
-
-chain 13115 chr6_qbl_hap2 4565931 + 937718 937855 chr7 159138663 + 102343613 102343750 17340123
-137
-
-chain 12452 chr6_qbl_hap2 4565931 + 4213437 4214179 chr12 133851895 + 124586233 124586652 1913233
-57 408 105
-14 32 63
-45 0 78
-44 129 0
-13
-
-chain 12361 chr6_qbl_hap2 4565931 + 1150685 1150815 chr1 249250621 + 48985442 48985572 18455294
-130
-
-chain 12272 chr6_qbl_hap2 4565931 + 2479004 2479160 chrX 155270560 + 155194421 155194569 18587559
-71 1 1
-25 8 0
-51
-
-chain 12201 chr6_qbl_hap2 4565931 + 1105096 1105867 chr6 171115067 - 139876162 139876935 18699321
-54 620 622
-97
-
-chain 12178 chr6_qbl_hap2 4565931 + 3776349 3776515 chr14 107349540 - 58393926 58394091 18734379
-55 26 25
-85
-
-chain 12008 chr6_qbl_hap2 4565931 + 3700751 3700880 chr8 146364022 + 49154427 49154556 18990653
-129
-
-chain 11752 chr6_qbl_hap2 4565931 + 3745259 3747655 chr6 171115067 + 32491461 32493852 19428924
-56 676 682
-61 1516 1505
-87
-
-chain 11746 chr6_qbl_hap2 4565931 + 1097944 1098092 chr7 159138663 - 7702899 7703047 19437479
-54 14 14
-80
-
-chain 11503 chr6_qbl_hap2 4565931 + 3698827 3699253 chr11 135006516 - 111045874 111046295 19852910
-57 287 282
-82
-
-chain 10738 chr6_qbl_hap2 4565931 + 3700459 3700580 chr10 135534747 + 59600699 59600817 21255899
-61 3 0
-57
-
-chain 10686 chr6_qbl_hap2 4565931 + 2478152 2478673 chr18 78077248 + 11342173 11342695 21355061
-80 388 389
-53
-
-chain 10496 chr6_qbl_hap2 4565931 + 3696510 3696620 chr1 249250621 - 174039531 174039641 21744609
-110
-
-chain 10342 chr6_qbl_hap2 4565931 + 3714159 3714889 chr6 171115067 + 32548581 32549235 22073729
-78 598 522
-54
-
-chain 9560 chr6_qbl_hap2 4565931 + 1152614 1152715 chr6 171115067 - 141323187 141323288 23857063
-101
-
-chain 9560 chr6_qbl_hap2 4565931 + 1099695 1099796 chr6 171115067 - 141323187 141323288 23857064
-101
-
-chain 9385 chr6_qbl_hap2 4565931 + 3825573 3825778 chr16 90354753 - 20685009 20685189 24272037
-58 92 67
-55
-
-chain 9214 chr6_qbl_hap2 4565931 + 1102327 1102424 chr6 171115067 + 29758158 29758255 24607529
-97
-
-chain 9048 chr6_qbl_hap2 4565931 + 3694493 3695083 chr16 90354753 - 14504923 14505798 16016601
-79 460 745
-51
-
-chain 8993 chr6_qbl_hap2 4565931 + 2558568 2558745 chr2 243199373 + 116390976 116391155 17783325
-1 102 104
-74
-
-chain 8702 chr6_qbl_hap2 4565931 + 3686082 3686238 chr6 171115067 + 32439449 32439606 25393693
-54 51 52
-51
-
-chain 8427 chr6_qbl_hap2 4565931 + 3804527 3804616 chr6 171115067 - 148948316 148948405 15963296
-89
-
-chain 7704 chr6_qbl_hap2 4565931 + 3688237 3688318 chr6 171115067 + 32557831 32557912 26927503
-81
-
-chain 6794 chr6_qbl_hap2 4565931 + 3775350 3775421 chr3 198022430 - 94748615 94748686 28659148
-71
-
-chain 6473 chr6_qbl_hap2 4565931 + 3694610 3694683 chr1 249250621 - 102907635 102907704 21815174
-11 4 0
-58
-
-chain 6457 chr6_qbl_hap2 4565931 + 1158502 1158569 chr6 171115067 + 30228837 30228904 29438118
-67
-
-chain 6422 chr6_qbl_hap2 4565931 + 3817908 3817976 chr6 171115067 + 32728707 32728775 29535243
-68
-
-chain 6368 chr6_qbl_hap2 4565931 + 2478912 2479004 chr6 171115067 - 132617434 132617532 20998654
-55 29 35
-8
-
-chain 5830 chr6_qbl_hap2 4565931 + 1098157 1098218 chr7 159138663 - 104622057 104622118 31091038
-61
-
-chain 5757 chr6_qbl_hap2 4565931 + 3825218 3825278 chr14 107349540 - 70017731 70017791 31292281
-60
-
-chain 5558 chr6_qbl_hap2 4565931 + 2472407 2472466 chr15 102531392 + 37673660 37673719 31870719
-59
-
-chain 5479 chr6_qbl_hap2 4565931 + 1111956 1112025 chr9 141213431 - 103321949 103322018 11235972
-69
-
-chain 5339 chr6_qbl_hap2 4565931 + 3885926 3885982 chrX 155270560 + 55718242 55718298 32499987
-56
-
-chain 5185 chr6_qbl_hap2 4565931 + 3788909 3788964 chr14 107349540 + 22827226 22827281 32987373
-55
-
-chain 5179 chr6_qbl_hap2 4565931 + 1150896 1150960 chr19 59128983 - 37357346 37357410 20742827
-53 10 10
-1
-
-chain 5176 chr6_qbl_hap2 4565931 + 1100596 1100651 chr14 107349540 + 79349485 79349540 33029769
-55
-
-chain 5058 chr6_qbl_hap2 4565931 + 3771065 3771119 chr1 249250621 - 172942963 172943017 33379587
-54
-
-chain 5039 chr6_qbl_hap2 4565931 + 2475495 2475548 chr7 159138663 - 94193358 94193411 33438564
-53
-
-chain 5038 chr6_qbl_hap2 4565931 + 1148806 1148858 chr6 171115067 + 29856463 29856515 33456716
-52
-
-chain 4959 chr6_qbl_hap2 4565931 + 3696457 3696510 chr18 78077248 + 5090594 5090647 22176919
-53
-
-chain 4949 chr6_qbl_hap2 4565931 + 3825516 3825569 chrX 155270560 - 91231208 91231261 33742123
-53
-
-chain 4829 chr6_qbl_hap2 4565931 + 1159026 1159076 chr6 171115067 + 30459319 30459369 34177698
-50
-
-chain 4685 chr6_qbl_hap2 4565931 + 3719592 3719642 chr12 133851895 + 112261417 112261467 34690970
-50
-
-chain 4391 chr6_qbl_hap2 4565931 + 4214058 4214103 chrX 155270560 - 99494613 99494658 30227326
-45
-
-chain 4348 chr6_qbl_hap2 4565931 + 3739277 3739323 chr7 159138663 - 76863668 76863714 34891433
-46
-
-chain 4338 chr6_qbl_hap2 4565931 + 2201356 2201401 chr6 171115067 + 30954494 30954539 34909104
-45
-
-chain 4061 chr6_qbl_hap2 4565931 + 2201872 2201914 chr6 171115067 + 30955145 30955187 31149648
-42
-
-chain 4003 chr6_qbl_hap2 4565931 + 2470663 2474155 chr12 133851895 + 104783555 104787047 2981748
-99 961 960
-40 481 480
-76 473 472
-44 1256 1259
-62
-
-chain 3775 chr6_qbl_hap2 4565931 + 2471376 2471416 chr10 135534747 - 90944157 90944197 25967017
-40
-
-chain 3639 chr6_qbl_hap2 4565931 + 3694572 3694610 chr3 198022430 + 101411146 101411184 20382400
-38
-
-chain 3574 chr6_qbl_hap2 4565931 + 2470595 2470633 chr3 198022430 - 173409162 173409200 29596632
-38
-
-chain 3494 chr6_qbl_hap2 4565931 + 3700422 3700459 chrX 155270560 + 104134375 104134412 29536090
-37
-
-chain 3491 chr6_qbl_hap2 4565931 + 2471293 2472133 chr8 146364022 - 12751685 12752521 3617865
-79 701 697
-60
-
-chain 3436 chr6_qbl_hap2 4565931 + 2471844 2473225 chr1 249250621 + 7474211 7475590 2872741
-34 959 957
-58 295 295
-35
-
-chain 3220 chr6_qbl_hap2 4565931 + 3776529 3776563 chr12 133851895 + 85826623 85826657 35349035
-34
-
-chain 3148 chr6_qbl_hap2 4565931 + 3825631 3825664 chr2 243199373 + 38182693 38182726 24706670
-33
-
-chain 2975 chr6_qbl_hap2 4565931 + 2478232 2478268 chr3 198022430 - 94213030 94213066 24807218
-36
-
-chain 2972 chr6_qbl_hap2 4565931 + 1105868 1105908 chr6 171115067 + 30459045 30459085 20759384
-40
-
-chain 2845 chr6_qbl_hap2 4565931 + 2470633 2470663 chr3 198022430 - 156603737 156603767 26791326
-30
-
-chain 2838 chr6_qbl_hap2 4565931 + 2474990 2475020 chr4 191154276 + 92075174 92075204 21730347
-30
-
-chain 2761 chr6_qbl_hap2 4565931 + 3804625 3804685 chr4 191154276 + 37278694 37278754 22658556
-60
-
-chain 2671 chr6_qbl_hap2 4565931 + 2478852 2478911 chr9 141213431 - 60456470 60456529 21094091
-59
-
-chain 2604 chr6_qbl_hap2 4565931 + 1151032 1151059 chr17 81195210 + 6784720 6784747 30920849
-27
-
-chain 2579 chr6_qbl_hap2 4565931 + 3700720 3700751 chr21 48129895 + 18677639 18677670 26190064
-31
-
-chain 2574 chr6_qbl_hap2 4565931 + 1150960 1151032 chrX 155270560 + 72544773 72544845 18935818
-72
-
-chain 2481 chr6_qbl_hap2 4565931 + 3804442 3804477 chr3 198022430 - 58737971 58738006 17138123
-35
-
-chain 2394 chr6_qbl_hap2 4565931 + 2478673 2478698 chr11 135006516 - 67345781 67345806 29321362
-25
-
-chain 2363 chr6_qbl_hap2 4565931 + 2473435 2473485 chr3 198022430 - 59783725 59783775 3613581
-50
-
-chain 2322 chr6_qbl_hap2 4565931 + 2470859 2470989 chr15 102531392 - 72822940 72823070 3150079
-130
-
-chain 2266 chr6_qbl_hap2 4565931 + 2470989 2471957 chr9 141213431 - 114376815 114377769 4168715
-45 845 831
-78
-
-chain 2263 chr6_qbl_hap2 4565931 + 2471123 2471268 chr12 133851895 + 84401354 84401499 4041581
-145
-
-chain 2209 chr6_qbl_hap2 4565931 + 2470765 2470818 chr3 198022430 + 182918728 182918781 9563966
-53
-
-chain 2087 chr6_qbl_hap2 4565931 + 2558317 2558369 chrX 155270560 - 89201309 89201361 22578016
-52
-
-chain 2078 chr6_qbl_hap2 4565931 + 1112026 1112064 chr3 198022430 + 120909358 120909396 13027265
-38
-
-chain 2035 chr6_qbl_hap2 4565931 + 2557888 2557938 chr16 90354753 + 47212776 47212826 17692575
-50
-
-chain 1978 chr6_qbl_hap2 4565931 + 4213820 4213948 chr15 102531392 - 61555806 61555934 2051418
-28 68 68
-32
-
-chain 1899 chr6_qbl_hap2 4565931 + 2558399 2558424 chrX 155270560 + 94068150 94068175 17734181
-25
-
-chain 1860 chr6_qbl_hap2 4565931 + 1112180 1112230 chr8 146364022 + 68079613 68079663 13479327
-50
-
-chain 1860 chr6_qbl_hap2 4565931 + 3812269 3815784 chr6 171115067 + 32722816 32726965 29521084
-61 2506 2690
-85 515 965
-52 103 103
-193
-
-chain 1828 chr6_qbl_hap2 4565931 + 2473656 2473684 chr14 107349540 - 54723100 54723128 20222699
-28
-
-chain 1658 chr6_qbl_hap2 4565931 + 1112136 1112169 chr4 191154276 + 153686345 153686378 11053932
-33
-
-chain 1514 chr6_qbl_hap2 4565931 + 1112233 1112291 chr13 115169878 - 5205835 5205893 10260311
-58
-
-chain 1396 chr6_qbl_hap2 4565931 + 2473606 2473656 chr1 249250621 + 83820278 83820328 4577579
-50
-
-chain 1388 chr6_qbl_hap2 4565931 + 4214123 4214166 chr19 59128983 - 43654778 43654821 2801865
-43
-
-chain 1329 chr6_qbl_hap2 4565931 + 2557727 2557778 chr7 159138663 - 55106997 55107048 20610784
-51
-
-chain 1304 chr6_qbl_hap2 4565931 + 4213365 4213389 chr1 249250621 + 182710286 182710310 2078906
-24
-
-chain 1296 chr6_qbl_hap2 4565931 + 4213389 4213424 chr8 146364022 + 99694 99728 9829550
-12 1 0
-22
-
-chain 1233 chr6_qbl_hap2 4565931 + 2558102 2558133 chr5 180915260 + 67992831 67992862 12309329
-31
-
-chain 1171 chr6_qbl_hap2 4565931 + 2473569 2473606 chrX 155270560 - 90928252 90928289 23413190
-37
-
-chain 1170 chr6_qbl_hap2 4565931 + 2471983 2472043 chr9 141213431 + 232427 232487 4190853
-60
-
-chain 1144 chr6_qbl_hap2 4565931 + 2469449 2469508 chr2 243199373 + 81796678 81796737 21594602
-59
-
-chain 1125 chr6_qbl_hap2 4565931 + 3694759 3694827 chr8 146364022 - 86779351 86779419 20749390
-68
-
-chain 1106 chr6_qbl_hap2 4565931 + 1112362 1112413 chr1 249250621 - 17660691 17660742 13643228
-51
-
-chain 1071 chr6_qbl_hap2 4565931 + 2470508 2470575 chr12 133851895 + 78891507 78891574 9444392
-67
-
-chain 1040 chr6_qbl_hap2 4565931 + 2470400 2470457 chr5 180915260 - 146134722 146134779 6672758
-57
-
-chain 1023 chr6_qbl_hap2 4565931 + 2471416 2471471 chr2 243199373 + 162554783 162554838 24613681
-55
-
-chain 935 chr6_qbl_hap2 4565931 + 2558067 2558102 chr4 191154276 + 31205 31240 16972854
-35
-
-chain 919 chr6_qbl_hap2 4565931 + 2474702 2474762 chr4 191154276 + 45112377 45112437 22402157
-60
-
-chain 902 chr6_qbl_hap2 4565931 + 2474552 2474612 chr5 180915260 - 23766246 23766306 4704228
-60
-
-chain 884 chr6_qbl_hap2 4565931 + 2473696 2473725 chr1 249250621 - 199045131 199045160 12500824
-29
-
-chain 825 chr6_qbl_hap2 4565931 + 1112413 1112452 chr1 249250621 - 184583816 184583855 16072417
-39
-
-chain 801 chr6_qbl_hap2 4565931 + 2470111 2470156 chr1 249250621 - 71436588 71436633 19248116
-45
-
-chain 789 chr6_qbl_hap2 4565931 + 3698600 3699777 chr19 59128983 + 8446620 8447803 26630175
-58 1059 1065
-60
-
-chain 788 chr6_qbl_hap2 4565931 + 2470239 2470322 chr6 171115067 + 137168270 137168353 4512040
-83
-
-chain 740 chr6_qbl_hap2 4565931 + 1112667 1112731 chr12 133851895 + 57178267 57178331 20850792
-64
-
-chain 718 chr6_qbl_hap2 4565931 + 2474782 2474837 chr9 141213431 - 49469911 49469966 23568604
-55
-
-chain 694 chr6_qbl_hap2 4565931 + 2469923 2469992 chrX 155270560 - 140437581 140437650 5405913
-69
-
-chain 584 chr6_qbl_hap2 4565931 + 2474349 2474405 chr15 102531392 + 67105223 67105279 15249534
-56
-
-chain 562 chr6_qbl_hap2 4565931 + 2557778 2557819 chrX 155270560 + 91975692 91975733 21019876
-41
-
-chain 562 chr6_qbl_hap2 4565931 + 2469824 2469884 chr2 243199373 - 169790362 169790422 25410177
-60
-
-chain 552 chr6_qbl_hap2 4565931 + 2237356 2237383 chr17 81195210 - 14890828 14890855 11066346
-27
-
-chain 523 chr6_qbl_hap2 4565931 + 2470057 2470111 chr13 115169878 + 42049099 42049153 16964924
-54
-
-chain 489 chr6_qbl_hap2 4565931 + 2469992 2470048 chr14 107349540 + 79003493 79003549 5260265
-56
-
-chain 481 chr6_qbl_hap2 4565931 + 2470189 2470239 chr8 146364022 + 50441810 50441860 5267091
-50
-
-chain 481 chr6_qbl_hap2 4565931 + 2469386 2469447 chr1 249250621 - 193322918 193322979 8728434
-61
-
-chain 455 chr6_qbl_hap2 4565931 + 2472488 2472547 chr6 171115067 - 85200236 85200295 17778688
-59
-
-chain 445 chr6_qbl_hap2 4565931 + 2469210 2469265 chrX 155270560 - 127487766 127487821 16318369
-55
-
-chain 358 chr6_qbl_hap2 4565931 + 2475020 2475084 chr4 191154276 + 74158363 74158427 16300933
-64
-
-chain 347 chr6_qbl_hap2 4565931 + 2469153 2469203 chr15 102531392 - 65978487 65978537 12839283
-50
-
-chain 246 chr6_qbl_hap2 4565931 + 3697415 3697467 chr12 133851895 - 104314075 104314127 28162397
-52
-
-chain 47340388 chr6_random 1875562 + 1357431 1875562 chr6 171115067 + 157393490 158069469 78
-906 2 2
-193 1 0
-29 1 0
-8 10 8
-11 2 1
-842 41 40
-754 2304 72101
-91082 5628 50000
-31833 338 50000
-42477 272 0
-39 168 66
-53 1 1
-15 1 103
-64 2 172
-23 1 103
-14474 4 0
-30198 0 8
-1391 2 0
-1319 4 0
-142 0 3
-3412 9 7
-372 1 1
-22 1 1
-5871 0 1
-237 26 25
-3020 1 1
-83 1 1
-141 7 7
-201 2 1
-403 1 0
-3638 1 0
-20 1 0
-552 32 32
-1386 0 1
-4174 1 1
-37 1 1
-3912 5 5
-4160 2 0
-6561 0 1
-3879 0 1
-8665 0 1
-2170 0 3
-895 1 0
-1812 0 1
-36 0 4
-133 1 0
-165 0 9
-427 0 1
-917 1 0
-3166 0 1
-16647 1 0
-6161 10 10
-833 4 0
-1934 1 1
-56 1 1
-2622 9 9
-749 1 0
-482 0 2
-344 1 1
-32 1 1
-868 2 0
-444 0 3
-1096 12 0
-709 0 1
-113 1 1
-35 1 1
-2349 20 0
-175 0 1
-1675 0 2
-1206 0 3
-345 0 5
-4695 1 0
-6715 1 1
-35 1 1
-2131 0 1
-4220 8 0
-2065 1 0
-1986 0 1
-484 0 1
-1543 4 4
-52 22 0
-5090 0 1
-2768 9 2
-12577 0 5
-13727 9 9
-51 4 4
-26 2 3
-11 0 1
-735 1 1
-35 0 1
-12 1 1
-2616 1 0
-327 1 1
-35 1 1
-345 0 20
-50 98 187
-975 1 0
-7329 0 1
-3241 0 35
-583 5 5
-278 1 1
-40 1 1
-123 12 12
-1208 17 0
-477 0 1
-163 1 1
-28 1 1
-3307 1 0
-66 1 1
-25 4 0
-2459 0 1
-1326 1 0
-700 1 0
-2316 6067 13
-725 3 0
-42 1 1
-8162 0 2
-2147 0 2
-79 1 1
-25 1 1
-313 1 0
-2194 1 0
-709 1 1
-33 1 1
-934 4 4
-543 1 1
-37 1 1
-2581 1 0
-606 1 0
-666 1 1
-34 2 2
-250 9 8
-652 1 0
-2306 22 0
-38 0 24
-946 1 0
-3766 1 1
-57 1 1
-3591 2 0
-128 1 1
-1414 7 1
-435 1 1
-29 1 0
-529 0 1
-3649 1 1
-32 0 1
-9760 0 18
-6470 1 1
-49 1 1
-488 0 1
-304 2 0
-1780 0 5
-2759 1 0
-48 1 1
-380 1 1
-33 1 1
-5102 1 1
-33 1 1
-192 0 1
-1103 1 1
-29 1 1
-12912 0 1
-9445 2 0
-2949 1 1
-28 1 1
-826 1 1
-19 1 1
-404 1 1
-49 1 1
-1408 8 0
-1625 10 0
-2962 0 1
-1824
-
-chain 37689909 chr6_random 1875562 + 884671 1286589 chr5 180915260 - 167715260 168127349 92
-6889 0 1
-34829 1 0
-4156 0 2
-4477 0 8
-7827 0 415
-37 9 9
-207 0 1
-272 7 7
-7925 1 0
-75982 0 1
-11336 0 1
-4233 14 14
-362 10 10
-4607 4 0
-1310 0 3
-1741 4 0
-499 1 1
-69 1 1
-509 15 15
-166 12 8
-145 0 2
-66 1 1
-16 1 1
-325 1 1
-31 1 1
-804 1 1
-109 1 1
-1071 0 106
-73 38 121
-1998 1 1
-37 1 1
-500 0 5
-625 3 0
-2354 1 1
-42 1 1
-1652 0 1
-92 1 1
-68 1 1
-1023 1 1
-16 1 1
-849 2 1
-28 1 1
-1793 4 2
-850 26 26
-251 0 2
-794 1 1
-26 1 1
-798 1 1
-80 1 1
-211 20 12
-153 1 3
-373 6 6
-231 0 4
-302 1 1
-26 1 1
-305 0 4
-3735 1 0
-342 0 2
-2211 0 1
-1969 2 0
-2834 0 10
-1054 0 14
-2176 0 2
-10517 0 2
-3071 6 0
-5697 21 21
-2458 0 5
-1335 3 0
-411 1 5
-2718 10 11
-3652 1 0
-785 1 0
-777 1 0
-2088 0 1
-24 1 1
-1005 16 16
-5426 18 0
-378 1 0
-19 1 1
-5303 0 14
-19 18 0
-2125 1 0
-936 0 5
-29 1 1
-893 19 19
-312 0 2
-32151 1 0
-14548 1 0
-109 0 1
-1481 1 0
-6537 0 2
-3390 1 0
-7479 6 0
-29963 4 0
-3972 9 5
-1637 0 9
-7977 1 0
-1973 0 3
-1212 0 5
-372 29 19
-1216 0 50
-628 0 4
-8388 0 1
-1429 1 0
-3029 2 4
-785 1 0
-291 10 9516
-1642 0 1
-5042 1 0
-1117 1 0
-1558 8 7
-1475 4 0
-1859 0 1
-9528 0 1
-877
-
-chain 31999718 chr6_random 1875562 + 165017 507468 chr6 171115067 - 55532370 55875067 101
-42954 0 1
-24905 1 0
-579 0 6
-612 0 1
-1128 0 2
-5541 1 1
-30 1 1
-2064 1 0
-505 0 1
-1974 0 1
-5299 1 1
-16 1 1
-368 1 1
-28 1 1
-7024 1 0
-19574 8 9
-6646 4 0
-6060 0 1
-2290 0 1
-22638 6 58
-1402 0 1
-502 0 1
-218 0 1
-5768 0 1
-178 0 3
-659 1 1
-33 0 8
-92 4 0
-693 0 2
-1190 0 3
-375 5 0
-422 3 0
-2215 1 0
-7271 1 1
-33 1 1
-817 1 1
-67 1 1
-2442 1 1
-62 16 0
-165 1 0
-1535 1 1
-32 1 1
-596 4 4
-627 1 1
-22 1 2
-201 5 5
-35 1 1
-232 5 0
-651 4 4
-26 1 1
-105 1 1
-45 1 1
-325 1 1
-34 1 1
-265 1 1
-91 2 0
-1383 1 1
-35 1 1
-1469 19 19
-295 0 1
-644 0 1
-3324 1 1
-44 1 1
-1797 1 5
-21 2 0
-10 11 1
-58 2 0
-61 1 9
-715 0 1
-388 1 1
-47 1 1
-774 1 0
-571 0 3
-2308 0 1
-103 15 15
-1339 1 1
-19 1 1
-348 0 1
-372 1 1
-31 0 1
-4 4 0
-14 1 5
-14 1 25
-4634 1 1
-16 2 2
-305 27 24
-2252 10 217
-1695 0 2
-2541 0 7
-741 2 0
-1401 0 2
-202 2 13
-3853 1 0
-3037 36 0
-18 2 0
-25 94 0
-14 0 4
-487 0 1
-5889 0 1
-572 1 1
-17 1 1
-806 1 1
-24 1 1
-723 0 2
-1640 1 0
-2023 1 1
-21 1 1
-192 15 1
-994 0 106
-1362 2 0
-324 1 1
-19 1 1
-683 1 1
-39 1 0
-771 1 0
-1211 13 0
-1728 1 1
-23 1 1
-911 0 2
-1042 6 6
-206 5 0
-17 1 1
-3351 14 19
-783 1 1
-48 1 1
-673 0 4
-137 1 1
-23 1 0
-1357 4 0
-254 0 1
-1408 0 7
-564 1 1
-49 1 1
-319 13 13
-721 12 12
-821 2 0
-912 4 4
-47 1 1
-148 1 1
-61 1 1
-267 1 1
-46 1 1
-421 1 1
-36 1 1
-577 1 1
-35 1 1
-122 1 1
-95 1 1
-241 1 1
-40 1 1
-585 10 1
-1286 0 1
-97 2 0
-22 1 1
-969 0 1
-1448 14 20
-2000 1 0
-1448 0 1
-2390 1 1
-18 5 5
-1421 1 0
-412 0 1
-1867 2 1
-179 3 0
-852 1 0
-1426 20 18
-151 1 1
-26 1 1
-581 1 1
-86 2 1
-2659 1 0
-12163 2 0
-1149 13 13
-818 16 16
-113 1 1
-51 1 1
-343 1 1
-91 0 4
-7 2 0
-8 0 2
-914 1 1
-28 1 1
-670 1 0
-151 7 7
-1887 18 18
-119 0 5
-2395 2 0
-4395 0 6
-380 6 1
-423 17 17
-531 1 0
-23 0 6
-592 1 1
-23 1 0
-844 4 0
-1497 6 0
-407 17 17
-341 19 17
-1020 0 6
-178 1 0
-1233 0 1
-1861 0 1
-2007 2 0
-6480 1 1
-36 1 1
-6817 17 20
-3356 7 5
-1788 1 1
-83 0 1
-7678 18 18
-2095 1 1
-19 1 1
-4934
-
-chain 25195472 chr6_random 1875562 + 615192 884135 chr6 171115067 + 167833423 168297434 120
-2006 1 0
-2654 1 1
-28 1 1
-3139 1 1
-85 1 1
-690 0 1
-639 0 2
-1589 4 4
-122 2 0
-1127 0 1
-1104 1 102
-18 0 29
-40 0 3
-22 1 4
-50 0 26
-56 124 195105
-10440 18 25
-3042 0 24
-72 0 8
-206 4 0
-146 4 0
-2483 0 4
-702 0 1
-1035 0 8
-85 3 1
-2710 1 1
-84 1 1
-3774 1 1
-58 1 1
-20613 15 53
-14 32 0
-52 0 4
-1883 4 0
-52 3 0
-44036 171 0
-2224 2 2
-57 1 1
-7263 0 64
-5311 0 2
-24677 8 8
-1972 1 0
-3543 2 2
-46 1 0
-11768 1 0
-494 47 19
-36447 1 1
-67 1 1
-11347 8 0
-4230 1 3
-591 5 5
-1020 0 8
-680 1 1
-60 1 1
-4536 0 1
-1417 0 2
-2471 1 1
-22 1 1
-6781 0 5
-4943 5 0
-1067 2 0
-2588 2 0
-523 34 35
-9266 0 2
-3897 0 2
-1404 0 1
-3120 0 1
-2566 1 0
-1825 0 8
-5342
-
-chain 9830417 chr6_random 1875562 + 510011 615192 chr5 180915260 - 108917398 109022458 335
-331 57 57
-1247 1 0
-4094 15 15
-6775 12 0
-6148 1 0
-30 1 1
-251 0 1
-26 26 1
-238 1 1
-29 1 1
-148 1 1
-41 1 1
-5831 6 7
-2439 1 0
-4247 12 42
-2333 1 9
-3039 5 0
-476 2 2
-4359 0 1
-1237 11 11
-1223 12 0
-2800 2 0
-2660 0 1
-4531 1 1
-24 1 1
-7407 0 1
-395 2 0
-1841 391 0
-410 50 26
-321 1 1
-27 1 1
-226 9 9
-157 6 6
-80 1 1
-70 1 1
-5158 10 10
-1385 4 0
-991 0 2
-48 1 1
-1083 0 2
-751 0 1
-4266 1 1
-48 1 1
-1557 0 304
-1552 1 1
-21 1 1
-2652 1 0
-598 0 8
-115 15 16
-1277 1 1
-38 1 1
-898 1 1
-27 1 1
-699 0 1
-34 1 1
-279 4 0
-12 1 1
-2863 1 1
-25 1 1
-2484 12 15
-1447 1 0
-8689
-
-chain 8736931 chr6_random 1875562 + 25094 155092 chr6 171115067 - 3172994 3267843 378
-3079 5 5
-1125 2 0
-1270 7 14
-1955 1 1
-47 1 1
-4538 38 38
-1300 25 26
-67 7 8
-176 3 0
-1132 3 0
-906 103 48
-5311 0 16
-133 1 0
-94 153 987
-142 13 13
-2453 2 0
-238 2 0
-960 13 13
-4697 1 1
-26 1 1
-3575 36650 734
-4434 0 1
-5190 138 107
-33 1 1
-5998 4 0
-1660 1 0
-4740 1 1
-29 1 1
-7196 0 12
-17519 30 29
-12768
-
-chain 553807 chr6_random 1875562 + 1768811 1774813 chr4 191154276 - 111879139 111885141 10762
-1294 2 2
-109 1 1
-242 1 1
-106 1 1
-2122 1 1
-17 1 1
-200 1 1
-40 1 1
-1071 1 1
-24 1 1
-284 1 1
-77 1 1
-403
-
-chain 255982 chr6_random 1875562 + 1456339 1459136 chr6 171115067 + 157377507 157380303 364419
-1101 4 4
-21 1 0
-70 43 44
-1490 1 0
-66
-
-chain 238316 chr6_random 1875562 + 1453720 1456237 chr6 171115067 - 13762873 13765390 431401
-2517
-
-chain 190390 chr6_random 1875562 + 1355230 1357270 chr6 171115067 - 13765611 13767650 644275
-875 0 1
-30 1 0
-7 0 1
-32 2 0
-1093
-
-chain 147846 chr6_random 1875562 + 163259 164828 chr10 135534747 - 86648034 86649603 870502
-1569
-
-chain 66179 chr6_random 1875562 + 509035 509994 chr6 171115067 - 55868072 55869030 1909901
-52 241 240
-666
-
-chain 39557 chr6_random 1875562 + 507468 508471 chr14 107349540 - 76514262 76515265 2447482
-67 13 13
-252 48 48
-70 43 43
-73 340 340
-97
-
-chain 15445 chr6_random 1875562 + 574580 574743 chr6 171115067 + 168277787 168277950 14597733
-163
-
-chain 11899 chr6_random 1875562 + 508034 508258 chr7 159138663 - 61729371 61729595 2527246
-50 119 119
-55
-
-chain 6795 chr6_random 1875562 + 508264 508336 chr5 180915260 + 74550099 74550171 28643390
-72
-
-chain 5830 chr6_random 1875562 + 884328 884389 chr6 171115067 - 37135398 37135459 31091070
-61
-
-chain 5767 chr6_random 1875562 + 508601 508846 chr8 146364022 + 54253304 54253548 3655159
-50 103 102
-92
-
-chain 4821 chr6_random 1875562 + 16131 16182 chr10 135534747 - 59552661 59552712 34213212
-51
-
-chain 3598 chr6_random 1875562 + 720272 720329 chr6 171115067 + 168133749 168133806 2857460
-57
-
-chain 3185 chr6_random 1875562 + 1768774 1768810 chr2 243199373 + 130168617 130168653 16948
-36
-
-chain 2982 chr6_random 1875562 + 508896 508970 chr12 133851895 - 4327021 4327095 12758815
-74
-
-chain 2685 chr6_random 1875562 + 509240 510388 chr3 198022430 - 97729559 97730704 3388749
-33 1069 1066
-46
-
-chain 2530 chr6_random 1875562 + 720329 720365 chr6 171115067 + 168133920 168133956 3810246
-36
-
-chain 2208 chr6_random 1875562 + 720386 720422 chr6 171115067 + 168133692 168133728 3917950
-36
-
-chain 1957 chr6_random 1875562 + 507800 507848 chr1 249250621 - 36684504 36684552 2679811
-48
-
-chain 1423 chr6_random 1875562 + 508846 508894 chr2 243199373 - 143356177 143356225 7803118
-48
-
-chain 1172 chr6_random 1875562 + 508537 508601 chrX 155270560 + 123719418 123719482 4007841
-64
-
-chain 1047 chr6_random 1875562 + 509273 509328 chr20 63025520 + 3479096 3479151 2808508
-55
-
-chain 560 chr6_random 1875562 + 508669 508719 chr5 180915260 - 128392227 128392277 20287927
-50
-
-chain 14618906734 chr7 158821424 + 102995 158821424 chr7 159138663 + 10238 159128663 7
-973 5 0
-3912 0 2
-1234 4 0
-51 0 6
-70 1 1
-24 1 0
-143 8 0
-16 170 1
-47 1 1
-243 0 6
-913 3 0
-2538 980 0
-63 1610 0
-1362 0 1
-2104 0 456
-1158 0 1
-791 1 1
-49 0 1
-4175 8 0
-17 1 1
-4845 12 0
-2509 0 1
-1697 6 6
-192827 150000 278557
-5682472 0 1
-42007910 40000 35970
-4371 7 16
-17699 0 4
-5249 4 0
-2088410 1 1
-47 1 1
-4565 0 1
-7116 0 1
-2706 40000 43050
-6577293 50000 13552
-1052855 3000000 3000000
-256182 50000 416507
-190137 50000 50000
-5722629 24 25
-239 1 1
-59 2 2
-138 1 1
-34 1 1
-206 1 3
-18 1 0
-410 1 1
-72 1 1
-199 1 1
-62 5 5
-120 1 0
-468 1 1
-32 1 1
-264 1 1
-23 1 1
-1459 4 4
-107 1 1
-42 1 0
-14 1 1
-201 1 1
-46 1 1
-268 20 20
-303 2 1
-866 0 4
-76 3 3
-63 1 1
-74 1 0
-25 1 1
-66 1 1
-34 0 2
-180 35 36
-93 1 1
-41 1 1
-70 1 1
-49 1 1
-63 1 1
-57 1 1
-383 1 1
-133 1 1
-87 1 1
-38 4 4
-50 0 1
-46 5 6
-136 11 11
-200 1 1
-63 4 0
-6 9 0
-263 1 1
-32 3 3
-152 16 16
-567 1 0
-322 3 0
-1258 0 1
-505 4 0
-1141 11 10
-537 12 12
-1418 1 1
-47 0 1
-164 7 7
-90 5 0
-156 1 1
-20 1 1
-380 3 3
-41 3 0
-5 2 2
-921 1 1
-34 1 1
-1607 2 2
-73 66 0
-46 14 0
-168 1 1
-53 1 1
-3195 1 1
-23 1 1
-2115 0 14
-9872 1 0
-1204 13 13
-416 1 0
-2311 319 0
-6906 0 10
-184 24 0
-2933 4 0
-1392 0 12
-1856 5 0
-3439 0 1
-469 3 0
-771 15 12
-497 1 1
-65 1 1
-1210 0 2
-4131 10 10
-1198 1 0
-718 1 1
-21 1 1
-3668 1 0
-874 1 1
-25 1 1
-2444 0 1
-1867 1 1
-29 1 1
-1660 0 1
-1232 0 6
-784 1 0
-705 0 3
-3577 1 0
-365 1 0
-3389 8 4
-2652 0 3
-664 0 1
-169 1 0
-8 1 1
-138 0 1
-8037 0 56
-112 196 0
-495 0 35
-3028 1 1
-40 1 1
-1068 4 0
-631 0 33
-29 2 0
-86 9 1
-3081 2 0
-806 0 1
-21 1 1
-3901 26 27
-843 0 1
-6916420 250000 50000
-25789103 0 51216
-1399994 1 0
-3623 0 212
-38 1 1
-210 1 0
-5 1 0
-6 1 0
-18 1 0
-1321 16 0
-2187 1 0
-145 0 1
-1388 7 7
-2240 14 14
-771 1 1
-34 1 1
-92 1 1
-39 1 1
-505 1 0
-66 1 1
-49 1 1
-159 1 0
-78 3 0
-15 2 0
-7 1 0
-28 1 0
-27 468 5
-2022 1 0
-1796 7 7
-61 1 1
-20 1 1
-4560 3 0
-157730 1 0
-194 14 14
-650 0 12
-717 26 26
-819 0 5
-278 60 32
-69 0 5
-1345 8 0
-652 84 0
-118 0 4
-498 0 1
-3187 1 1
-43 1 1
-1476 0 3
-2101 5 0
-788 6 6
-872 0 6
-893 3 0
-155 33 33
-4610 5 7
-521 10 0
-2773 40 40
-627 43 43
-1424 0 1
-2554 8 8
-44 0 7
-615 1 1
-32 3 0
-2693 0 1
-1029 0 2
-151 0 1
-1753 0 21
-370 2 3
-969 0 1
-452 1 0
-3035 1 1
-40 1 1
-704 0 2
-2472 0 6
-238 1 0
-1442 1 1
-37 5 5
-126 0 1
-795 0 1
-1191 1 0
-171 17 16
-724 6 5
-2988 40 42
-359 2 0
-199 19 19
-1969 1 0
-251 0 1
-729 0 1
-992 27 27
-205 4 0
-3209 0 2
-1006 8 10
-1571 10 10
-756 0 1
-36 1 1
-433 0 1
-672 0 3
-4430 157 0
-5606 5 1
-17 1 1
-942 10 9
-3433 2 1
-24 1 1
-4262 13 0
-661 2 0
-167 8 0
-3474 6 11
-217 0 2
-778 34 34
-158 0 1
-1167 0 1
-684 0 1
-878 39 39
-2012 0 1
-345 52 52
-640 0 2
-27874045 0 136705
-2519 0 2
-1000 8 0
-14695 1 0
-4456 1 0
-2977 1 0
-9065130 25000 29055
-2369 1 0
-12174 18 20
-877 0 4
-5247 0 12
-3483 2 0
-6766 0 1
-2469878 0 1
-734 2 2
-99 0 1
-2471 1 1
-11 1 1
-758 8 0
-2234 13 14
-8394 1 0
-47 1 1
-903 0 1
-5537 0 1
-269 1 0
-7114 1 1
-30 1 1
-2412 0 1
-2442 21 21
-91 1 1
-37 1 1
-96 1 1
-22 1 1
-246 1 1
-23 1 1
-254 12 12
-569 1 1
-27 1 1
-1624 1 0
-112 3 3
-45 1 1
-384 13 13
-70 1 0
-658 1 1
-20 1 1
-176 1 0
-307 19 19
-428 1 1
-19 1 1
-87 1 1
-30 1 1
-140 1 0
-292 2 0
-1492 1 0
-302 0 2
-364 1 1
-35 1 1
-1956 0 1
-728 12 12
-6522 2 2
-1531 1 0
-488 1 0
-2056 18 8
-1286 1 1
-27 1 1
-731 1 0
-1423 0 7
-2010 1 1
-19 1 1
-6423 0 4
-57 1 1
-4505 13 0
-933 0 12
-1250 0 1
-1313 1 0
-2610 0 1
-2398 0 1
-453 1 0
-346 1 1
-12 1 1
-83 25 25
-83 12 12
-277 0 1
-45 1 0
-811 2 0
-164 0 1
-104 0 1
-32 1 1
-1386 0 14
-306 1 1
-43 1 1
-2765 0 1
-1819 0 1
-1480 1 1
-24 1 1
-276 0 1
-21 0 1
-119 2 0
-12 26 0
-541 1 1
-63 1 1
-180 0 1
-2456 1 0
-1055 1 0
-1166 2 0
-784 0 4
-170 1 0
-939 6 0
-5597 15 15
-1253 0 1
-3336 0 18
-1851 9 0
-45 1 1
-657 38 38
-4099 0 1
-1387 2 0
-1460 1 0
-204 0 5
-1506 0 1
-2621 1 0
-6620 0 1
-34 1 1
-249 1 0
-1440 0 10
-245 0 1
-368 1 9
-257 4 0
-1589 6 0
-1543 0 1
-4189 120 0
-354 312446 278046
-3734 24 25
-3097 1 0
-8 1 1
-4861 0 4
-5649 1 0
-2011 0 1
-4344 24 24
-10546 42 1467
-20955 0 1
-2075 2 1
-5546 1 0
-2168 4 0
-1266 1 0
-4124 1 1
-46 1 1
-54 1 1
-43 15 0
-780 1 1
-25 1 1
-497 0 1
-46 1 1
-810 0 1
-5701 0 1
-6998 0 1
-2002 0 3
-7160 1 1
-24 1 1
-479 2 0
-1872 0 1
-1192 1 0
-371 2 0
-31 1 1
-572 16 16
-1725 16 16
-588 1 1
-90 1 1
-2483 3 19
-187 0 1
-20 1 1
-3673 1 1
-27 4 0
-3021 1 0
-1323 19 6
-498 13 13
-1618 2 0
-5282 0 1
-719 0 8
-2994 1 0
-2822 0 2
-1396 1 1
-48 1 1
-8723 5 0
-291 1 1
-25 1 1
-116 0 1
-2809 1 1
-27 1 1
-224 1 1
-48 1 1
-292 0 2
-400 0 1
-754 1 1
-19 1 1
-4225 1 1
-28 1 1
-801 1 0
-671 1 1
-17 1 1
-390 1 1
-28 1 1
-84 7 7
-568 1 1
-56 1 1
-499 7 8
-266 1 1
-31 1 1
-518 18 18
-164 1 1
-50 1 1
-162 1 1
-60 1 1
-702 1 1
-28 1 1
-146 18 17
-517 1 1
-24 1 1
-686 12 12
-101 1 1
-22 5 5
-107 5 5
-277 9 9
-272 1 1
-48 1 1
-77 1 1
-67 1 1
-1548 1 1
-40 1 1
-763 1 1
-42 1 1
-541 8 8
-88 1 1
-77 1 1
-233 11 11
-311 1 1
-22 1 1
-147 1 8
-504 1 1
-26 1 1
-987 20433 0
-3090 1 0
-405 5 5
-1811 1 0
-1174 0 1
-70 1 1
-1100 10143 18
-2722 0 1
-2957 1 1
-32 1 1
-9585 0 1
-1350 0 1
-473 0 1
-675 0 1
-1435 0 1
-805423 0 79189
-10872737 100000 100000
-721570 1 1
-19 1 1
-816 1 1
-44 1 1
-572 8 6
-2021 0 4
-1001 2 0
-3757 1 0
-5942 2 2
-70 1 1
-100 7 7
-395 80000 17188
-1010 1 1
-45 1 1
-1486 18 18
-173 1 17
-15 1 17
-158 0 192
-33 0 368
-50 50 2
-40 1 1
-95 4 52
-60 39 8
-15 16 0
-92 16 0
-1589 0 1
-897 13 13
-28 3 3
-2454 1 1
-44 1 1
-301 0 468
-2030 1 1
-45 1 1
-1277 8 0
-1716 1 0
-1579 11 15
-2439 36 0
-39 37 1
-349 21 92
-2096 13 11
-192 1 1
-48 1 1
-130 1 1
-22 1 1
-970 1 1
-23 4 0
-64 0 14
-129 17 11
-154 13 14
-53 15 5
-48 1 1
-47 0 2
-114 18 16
-363 1 1
-43 1 1
-559 1 1
-32 1 1
-3980007
-
-chain 16701236 chr7 158821424 + 141723881 141902219 chr7 159138663 - 16862466 17040468 171
-1662 1 1
-69 1 1
-887 1 1
-16 1 1
-115 339 1
-1512 0 1
-3597 0 1
-309 2 0
-34 1 1
-623 0 2
-1746 2 0
-816 4 0
-7868 1 0
-22 0 4
-593 0 1
-2757 0 1
-1147 7 7
-134 1 1
-42 1 1
-669 1 1
-25 1 1
-539 1 1
-49 1 1
-1387 1 1
-53 0 1
-19 1 1
-878 1 1
-27 1 1
-9739 1 1
-15 1 1
-2064 0 1
-1069 1 1
-31 1 1
-612 0 1
-21 1 1
-821 2 0
-1002 2 0
-3478 4 0
-1394 1 1
-25 1 0
-60 1 0
-4 1 0
-10 1 0
-23 0 1
-12 0 1
-2396 1 1
-25 1 1
-401 0 2
-1918 0 2
-43 1 1
-806 1 1
-36 1 1
-126 1 1
-53 1 1
-411 5 5
-524 13 13
-2896 1 1
-62 1 1
-4194 2 0
-8269 2 0
-368 11 10
-546 1 0
-1040 2 0
-45 1 1
-234 1 1
-29 1 1
-1218 16 16
-206 11 11
-584 13 13
-334 4 4
-167 3 3
-31 1 1
-973 9 9
-142 81 81
-58 1 0
-74 1 0
-1707 19 19
-2413 1 1
-57 1 1
-160 1 1
-23 1 1
-2380 0 1
-5561 0 4
-2790 14 14
-76 3 0
-1823 1 1
-11 0 9
-6 2 0
-5 3 0
-9 5 0
-28 1 1
-727 1 1
-37 1 1
-2678 0 3
-1497 1 0
-3414 1 0
-1171 6 6
-4018 7 7
-269 1 1
-36 1 1
-366 1 1
-22 1 1
-916 0 9
-2431 1 1
-68 1 1
-855 4 4
-1052 2 2
-81 0 2
-45 7 7
-648 1 1
-27 1 1
-402 1 0
-791 1 1
-41 1 1
-1041 20 20
-1094 1 1
-29 4 0
-364 1 1
-40 0 1
-22 0 1
-124 0 1
-205 0 1
-720 0 1
-59 1 1
-1063 2 0
-112 2 0
-3106 15 15
-2542 1 1
-64 1 1
-3052 1 1
-73 1 1
-3722 1 1
-31 1 1
-3476 1 0
-229 1 1
-40 1 1
-1321 0 5
-1845 1 0
-558 5 5
-3811 19 19
-125 1 1
-25 1 1
-3387 1 0
-1781 4 4
-2191 0 1
-1201 0 1
-260 1 1
-17 7 7
-137 0 1
-38 1 1
-732 0 1
-1626 1 0
-1987 2 0
-45 1 1
-763 0 1
-1978 0 1
-135 1 0
-6209 1 0
-24 1 1
-4867 0 1
-171 0 1
-6299
-
-chain 6490016 chr7 158821424 + 34000 116005 chr16 90354753 - 90001 171511 354
-591 11 11
-383 0 4
-1364 1 0
-430 12 13
-1431 1 1
-21 1 1
-490 12 12
-509 1 1
-97 1 1
-604 2 0
-1188 1 3
-665 1 1
-22 6 0
-499 1 1
-19 1 1
-402 1 1
-51 1 1
-1193 0 4
-245 1 0
-688 0 1
-975 2 0
-463 0 23
-73 24 0
-32 7 0
-165 1 0
-1593 1 1
-20 1 1
-1203 1 1
-31 1 1
-740 2 0
-47 1 1
-485 1 1
-63 1 1
-381 5 0
-28 1 1
-254 1 1
-22 1 1
-306 0 1
-34 1 1
-283 0 2
-627 10 10
-74 1 1
-50 1 1
-1053 0 1
-54 1 1
-77 1 1
-210 1 1
-70 0 3
-1957 0 4
-2154 1 1
-69 1 1
-147 67 67
-69 1 1
-74 1 1
-242 1 1
-41 1 1
-63 5 5
-155 3 1
-101 1 1
-53 1 1
-877 1 1
-21 1 1
-60 1 1
-49 1 1
-167 1 1
-21 1 1
-623 15 15
-202 0 97
-86 0 49
-9 2 2
-84 5 248
-56 1 98
-40 0 1
-48 1 0
-87 1 1
-55 99 1
-50 50 0
-23 1 1
-81 0 194
-78 1 1
-55 3 3
-53 6 344
-15 1 1
-262 1 1
-80 1 1
-455 1 1
-108 3 3
-431 1 1
-101 1 1
-158 1 0
-9 1 1
-323 3 0
-85 1 1
-19 1 1
-345 32 0
-24 1 1
-342 1 1
-65 1 1
-90 8 8
-545 1 1
-130 2 2
-87 4 3
-62 3 3
-34 2 2
-77 1 1
-47 1 1
-61 1 1
-27 1 1
-224 7 7
-117 2 0
-17 1 1
-242 1 1
-34 1 1
-107 1 1
-36 1 1
-100 15 15
-154 0 8
-13 1 0
-34 5 5
-100 27 27
-263 11 11
-116 1 1
-41 1 1
-117 1 1
-49 1 1
-116 2 0
-70 1 1
-174 1 1
-125 1 1
-70 1 1
-30 1 1
-74 1 1
-32 1 1
-337 1 1
-49 1 1
-2127 1 1
-35 1 1
-538 1 1
-32 1 1
-744 10 10
-471 53 17
-2001 7 7
-453 1 0
-2656 0 1
-1785 1 0
-1454 1 1
-33 1 1
-419 1 1
-49 1 1
-4610 1 1
-36 1 1
-905 1 1
-13 0 2
-5128 17 17
-519 0 3
-613 7 0
-660 0 4
-2632 1 2
-278 21 21
-969 1 0
-2852 14 14
-149 1 1
-21 1 1
-198 1 1
-29 1 1
-801 6442 6416
-125 6 0
-39 3745 3755
-814 162 1
-4 63 63
-74 63 0
-47 1056 13
-370
-
-chain 227647 chr7 158821424 + 141707499 141716076 chr7 159138663 + 142043811 142047809 475649
-53 484 465
-55 51 51
-78 242 220
-60 274 271
-51 13 13
-51 37 37
-229 4 4
-228 16 16
-108 47 47
-50 4583 49
-498 131 130
-945 36 36
-253
-
-chain 87685 chr7 158821424 + 58756 115635 chr3 198022430 - 71488 126874 406
-67 3328 3375
-28 1 1
-29 2 2
-39 50 50
-7 2 2
-41 2708 1663
-32 2831 2828
-27 46647 46820
-96 378 0
-152 47 12
-72 252 0
-43
-
-chain 48969 chr7 158821424 + 142175391 142175904 chr7 159138663 + 142475439 142475952 2613549
-513
-
-chain 47803 chr7 158821424 + 141911444 141913842 chr7 159138663 - 17029555 17031946 2683091
-78 139 139
-57 226 225
-124 92 92
-56 135 135
-72 193 193
-53 23 23
-133 958 952
-59
-
-chain 43189 chr7 158821424 + 142199519 142199970 chr7 159138663 + 142498738 142499189 3009311
-451
-
-chain 30396 chr7 158821424 + 67364377 67364696 chr15 102531392 - 56463077 56463396 4465114
-319
-
-chain 30094 chr7 158821424 + 141700053 141707301 chr7 159138663 + 142042846 142043613 4669748
-89 15 15
-68 6585 104
-66 129 129
-62 35 35
-199
-
-chain 30060 chr7 158821424 + 141963578 141964737 chr11 135006516 + 33264685 33266127 4680203
-91 398 397
-87 228 512
-77 163 163
-115
-
-chain 28591 chr7 158821424 + 141910578 141910878 chr7 159138663 - 17028690 17028990 5361712
-300
-
-chain 21822 chr7 158821424 + 141716123 141716468 chr7 159138663 + 142047850 142048195 9124304
-170 99 99
-76
-
-chain 20144 chr7 158821424 + 142166403 142167075 chr9 141213431 + 33792981 33793662 10344618
-82 380 389
-66 18 18
-51 19 19
-56
-
-chain 16654 chr7 158821424 + 101805867 101806156 chr7 159138663 - 92369277 92369565 11127744
-33 12 11
-63 91 91
-90
-
-chain 14923 chr7 158821424 + 102039289 102039446 chr7 159138663 + 102153090 102153247 2823
-157
-
-chain 10542 chr7 158821424 + 115456 115592 chr16 90354753 - 170836 170972 2672410
-136
-
-chain 10012 chr7 158821424 + 114469 115025 chr9 141213431 - 90660 90901 550
-63 395 80
-98
-
-chain 9195 chr7 158821424 + 141943788 141943884 chr7 159138663 - 16914722 16914818 24637833
-96
-
-chain 8667 chr7 158821424 + 142177809 142178136 chr7 159138663 + 142477851 142478180 25450135
-54 219 221
-54
-
-chain 7349 chr7 158821424 + 142180607 142180684 chr7 159138663 + 142480664 142480741 27551182
-77
-
-chain 7340 chr7 158821424 + 142180197 142180274 chr7 159138663 + 142480253 142480330 27565643
-77
-
-chain 6886 chr7 158821424 + 141960844 141960917 chr8 146364022 - 77913390 77913463 28463282
-73
-
-chain 6730 chr7 158821424 + 102059075 102062034 chr7 159138663 + 102172727 102175692 3338
-34 2887 2893
-38
-
-chain 6431 chr7 158821424 + 142166514 142166582 chr7 159138663 + 142454997 142455065 29498865
-68
-
-chain 6414 chr7 158821424 + 114166 115456 chr9 141213431 - 90644 91234 1816570
-68 791 378
-44 328 41
-59
-
-chain 6276 chr7 158821424 + 142176939 142177005 chr7 159138663 + 142476982 142477048 29891950
-66
-
-chain 6166 chr7 158821424 + 142179945 142180009 chr7 159138663 + 142480002 142480066 30171758
-64
-
-chain 5761 chr7 158821424 + 141963726 141963989 chr14 107349540 - 25420241 25420503 6848073
-68 130 129
-65
-
-chain 5666 chr7 158821424 + 142179798 142179857 chr7 159138663 + 142479855 142479914 31548103
-59
-
-chain 5608 chr7 158821424 + 101977370 101977454 chr7 159138663 + 44036096 44036185 7960
-10 0 5
-74
-
-chain 5430 chr7 158821424 + 142178562 142178619 chr7 159138663 + 142478613 142478670 32231795
-57
-
-chain 5139 chr7 158821424 + 142176520 142176574 chr7 159138663 + 142476565 142476619 33117712
-54
-
-chain 5020 chr7 158821424 + 141966623 141966675 chr12 133851895 + 53762512 53762564 33527602
-52
-
-chain 4939 chr7 158821424 + 142176195 142176247 chr7 159138663 + 142476241 142476293 33775264
-52
-
-chain 4778 chr7 158821424 + 73598 73651 chr5 180915260 - 172444 172497 587
-53
-
-chain 4039 chr7 158821424 + 101996220 101996263 chr7 159138663 + 102308194 102308237 1871
-43
-
-chain 3908 chr7 158821424 + 142167123 142167183 chr7 159138663 + 142455620 142455680 17639294
-60
-
-chain 3217 chr7 158821424 + 141963833 141963883 chr6 171115067 - 41704900 41704950 22743877
-50
-
-chain 2759 chr7 158821424 + 67423135 67423165 chr7 159138663 + 67785172 67785202 11329361
-30
-
-chain 2575 chr7 158821424 + 67423107 67423135 chr7 159138663 + 67785172 67785200 11329362
-28
-
-chain 2575 chr7 158821424 + 67423079 67423107 chr7 159138663 + 67785172 67785200 11329363
-28
-
-chain 2575 chr7 158821424 + 67423051 67423079 chr7 159138663 + 67785172 67785200 11329364
-28
-
-chain 2575 chr7 158821424 + 67423023 67423051 chr7 159138663 + 67785172 67785200 11329365
-28
-
-chain 2575 chr7 158821424 + 67422995 67423023 chr7 159138663 + 67785172 67785200 11329366
-28
-
-chain 2457 chr7 158821424 + 114257 114311 chr16 90354753 - 170806 170860 17475755
-54
-
-chain 2391 chr7 158821424 + 67422969 67422995 chr7 159138663 + 67785202 67785228 13667102
-26
-
-chain 2359 chr7 158821424 + 101974113 101974139 chr7 159138663 + 102286210 102286236 158723
-26
-
-chain 1502 chr7 158821424 + 141709533 141709580 chr7 159138663 + 142013474 142013521 12917072
-47
-
-chain 721 chr7 158821424 + 141963699 141963726 chr17 81195210 + 19853796 19853823 7983736
-27
-
-chain 615 chr7 158821424 + 141964154 141964190 chr19 59128983 - 28688778 28688814 21921932
-36
-
-chain 362 chr7 158821424 + 101987601 101987634 chr7 159138663 - 57149003 57149036 1101
-33
-
-chain 17312866 chr7_random 549659 + 162804 345700 chr7_gl000195_random 182896 + 0 182896 164
-182896
-
-chain 10142542 chr7_random 549659 + 0 112804 chr7 159138663 + 158928464 159038297 315
-4073 0 1
-5056 1 0
-1766 1 1
-63 5 5
-2422 1 0
-1297 1 0
-1967 196 0
-230 28 0
-2331 5 0
-47 1 1
-345 1 0
-41 1 1
-807 1 1
-31 1 1
-238 3 0
-100 1 0
-281 1 1
-43 1 1
-359 27 26
-59 1 1
-43 1 1
-1385 1 0
-161 1 0
-45 1 1
-1693 1 0
-93 1 0
-5 1 0
-805 0 3
-649 0 49
-1400 1 1
-4 1 0
-28 0 1
-7 0 1
-157 1 1
-117 0 31
-166 13 12
-138 1 0
-556 1 1
-46 1 1
-204 1 1
-21 1 1
-511 2 0
-390 1 1
-29 1 1
-60 1 1
-68 0 3
-27 1 1
-71 0 1
-37 5 0
-18 0 6
-56 3 3
-89 2 0
-103 6 15
-43 5 0
-7 0 11
-55 0 4
-456 46 45
-1286 1 1
-46 1 0
-36 2 0
-57 1 0
-396 1 1
-38 1 1
-298 1 1
-16 1 1
-602 224 0
-82 1 56
-1115 1 74
-17 3 3
-88 1 74
-98 158 12
-90 3 3
-70 3 3
-117 1 1
-43 1 1
-53 1 1
-21 1 1
-53 229 10
-120 81 8
-59 8 10
-411 1 0
-47 1 1
-723 0 9
-8142 6 6
-1297 1 1
-22 0 1
-7799 12 11
-1878 1 0
-70 5 5
-592 1 1
-28 1 1
-2251 1 0
-1474 1 0
-1975 0 1
-2577 0 1
-612 15 15
-93 1 0
-3 1 0
-149 1 0
-61 3 3
-34 1 0
-11 2101 0
-63 73 3
-67 106 1
-57 83 13
-60 70 0
-79 561 1
-321 70 0
-262 0 35
-83 183 8
-2406 0 549
-85 32 0
-27 0 26
-72 0 35
-22 3 0
-24 0 93
-74 2 0
-17 28 0
-63 1 0
-6 1 0
-1451 44 4
-23 1 1
-38 0 40
-80 1 121
-34 1 1
-58 0 82
-839 1 0
-31 1 1
-2861 0 4
-1376 1 1
-20 0 1
-78 2 0
-24 2 2
-2760 3 1
-585 8 0
-761 1 0
-6449 4 1
-259 1 1
-22 1 1
-717 0 1
-887 7 8
-2174 3 0
-970 1 0
-1768 12 0
-4378 0 1
-5 0 1
-13 1 0
-1637 5 10
-312 0 1
-2167 11 0
-164 10 10
-1517 1 1
-42 0 3
-698 0 4
-90 1 1
-20 1 1
-167 1 1
-16 1 1
-860 0 1
-1719
-
-chain 9633059 chr7_random 549659 + 402818 549659 chr7 159138663 + 514489 666751 345
-3766 22099 5004
-26 4 4
-11014 7 5
-17 1 0
-8 21 0
-3389 1 1
-54 1 1
-55 1 1
-66 1 1
-165 1 1
-38 1 1
-52 22350 21842
-816 4 4
-10432 15 15
-20532 1 1
-29 9 9
-13871 157 23205
-37837
-
-chain 2073422 chr7_random 549659 + 444161 465736 chr7 159138663 - 158510053 158531628 1246
-21575
-
-chain 1225579 chr7_random 549659 + 415456 428202 chr7 159138663 + 537499 550245 1943
-12746
-
-chain 745495 chr7_random 549659 + 406711 414469 chr7 159138663 - 158580384 158588142 6708
-215 11 11
-2423 4 4
-5105
-
-chain 224185 chr7_random 549659 + 399770 402202 chr7 159138663 + 518876 521308 490490
-367 50 50
-1609 1 1
-53 3 3
-304 1 1
-44
-
-chain 25943 chr7_random 549659 + 67571 70764 chr7 159138663 + 158995434 158996421 1881723
-67 73 3
-55 13 153
-17 71 0
-159 183 8
-119 21 21
-154 1960 0
-64 35 0
-105 35 0
-62
-
-chain 21070 chr7_random 549659 + 68795 70055 chr7 159138663 + 158995572 158996097 2684005
-86 98 63
-43 35 0
-76 455 0
-18 248 38
-61 57 57
-83
-
-chain 19298 chr7_random 549659 + 67796 68209 chr7 159138663 + 158995799 158996246 2040899
-35 195 229
-183
-
-chain 8295 chr7_random 549659 + 70341 70449 chr7 159138663 + 158996348 158996421 13908836
-11 35 0
-62
-
-chain 8007 chr7_random 549659 + 70264 70825 chr7 159138663 + 158995746 158996237 2373081
-77 186 46
-35 218 288
-45
-
-chain 7010 chr7_random 549659 + 69669 69742 chr7 159138663 + 158996026 158996099 13809421
-73
-
-chain 6757 chr7_random 549659 + 71674 71744 chr7 159138663 + 158996246 158996316 26425870
-70
-
-chain 6582 chr7_random 549659 + 16740 16849 chr7 159138663 + 158945342 158945395 9902405
-48 56 0
-5
-
-chain 5793 chr7_random 549659 + 36845 36905 chr7 159138663 + 158964922 158964982 31172491
-60
-
-chain 5504 chr7_random 549659 + 68645 69446 chr7 159138663 + 158995947 158996153 2767372
-68 176 1
-63 420 0
-74
-
-chain 5075 chr7_random 549659 + 34499 34552 chr7 159138663 + 158962931 158962984 33354772
-53
-
-chain 4386 chr7_random 549659 + 36139 36193 chr7 159138663 + 158964435 158964489 9901820
-54
-
-chain 4359 chr7_random 549659 + 69809 69854 chr7 159138663 + 158996061 158996106 24027999
-45
-
-chain 3345 chr7_random 549659 + 71561 71653 chr7 159138663 + 158995923 158996015 5823696
-92
-
-chain 3242 chr7_random 549659 + 36212 36249 chr7 159138663 + 158964435 158964472 7647561
-37
-
-chain 3169 chr7_random 549659 + 68713 69336 chr7 159138663 + 158995385 158995658 13517397
-46 500 150
-77
-
-chain 2856 chr7_random 549659 + 36091 36138 chr7 159138663 + 158964168 158964215 3415068
-47
-
-chain 2508 chr7_random 549659 + 74235 74267 chr7 159138663 + 158999705 158999737 11181217
-32
-
-chain 2422 chr7_random 549659 + 16701 16740 chr7 159138663 + 158944995 158945034 20425801
-39
-
-chain 2296 chr7_random 549659 + 76078 76102 chr7 159138663 + 159001472 159001496 26237556
-24
-
-chain 1888 chr7_random 549659 + 68772 68795 chr7 159138663 + 158995829 158995852 23967691
-23
-
-chain 1646 chr7_random 549659 + 16653 16684 chr7 159138663 + 158945171 158945202 6593972
-31
-
-chain 1510 chr7_random 549659 + 34573 34664 chr7 159138663 + 158962893 158962984 9181320
-91
-
-chain 1319 chr7_random 549659 + 70142 70185 chr7 159138663 + 158996289 158996332 23051286
-43
-
-chain 1065 chr7_random 549659 + 69520 69582 chr7 159138663 + 158996297 158996359 18766264
-62
-
-chain 13483752813 chr8 146274826 + 0 146274826 chr8 146364022 + 10000 146304022 9
-930417 1 1243
-52 10 10
-44 0 972
-100 0 54
-162 0 324
-409 0 1
-2323216 1 0
-3352649 2 0
-854996 100000 50000
-3399023 1 1
-46 1 1
-13965 1 1
-30 1 1
-121189 1 1
-35 1 1
-283700 0 1
-719291 100016 93054
-1155 0 2
-755 26 26
-980 21 21
-1479 54 54
-3597 1 0
-1937 19 19
-322 1 0
-1758 2 0
-1141 0 1
-956 48 48
-739 21 21
-1005 0 1
-543 1734 1734
-5338 15 15
-1029 1 1
-28 1 1
-305 57 57
-164 27 27
-5130707 0 1
-1288 0 1
-446 1 1
-80 1 1
-2123 4 4
-2514 3 0
-545 9 0
-527 1 1
-18 1 1
-256 9 9
-79 1 1
-40 1 1
-148 0 2
-2231 0 27
-958 1 1
-20 1 1
-2487 1 1
-113 1 1
-73 13 13
-365 10 10
-151 1 1
-32 3 0
-26 1 1
-1480 1 1
-29 1 1
-621 1 1
-28 1 1
-701 9 9
-362 1 1
-19 1 1
-691 1 1
-44 6 0
-47 1 1
-513 12 11
-382 1 1
-22 1 1
-111 1 1
-36 1 1
-337 1 1
-42 1 1
-602 2 0
-36 1 1
-475 1 1
-23 0 1
-32 4 3
-65 1 1
-59 1 1
-688 1 1
-22 1 1
-1473 1 1
-36 1 1
-372 1 1
-16 6 6
-1605 1 1
-38 1 1
-816 1 1
-17 1 0
-374 1 1
-17 1 1
-48 1 0
-82 1 1
-45 1 1
-263 1 1
-23 1 1
-204 1 1
-39 1 1
-2341 0 1
-2989 9 11
-811 8 8
-741 0 2
-337 1 1
-25 4 4
-763 1 1
-19 1 1
-343 1 1
-31 1 1
-1953 1 1
-74 1 1
-67 1 1
-18 4 4
-73 1 1
-31 1 1
-114 11 1
-87 1 1
-65 1 1
-125 9 9
-378 49 48
-90 1 1
-99 1 0
-173 13 7
-696 0 1
-6184 13 13
-830 13 13
-128 1 1
-37 1 1
-136 1 0
-66 5 6
-870 1 0
-4877 0 1
-585 3 7
-1728 1 0
-33 1 1
-465 1 1
-68 1 1
-581 6 0
-2088 1 0
-304 0 1
-2674 1 1
-28 1 0
-54 8 8
-846 0 1
-1409 16 16
-559 0 1
-407 0 5
-11 5 1
-29 1 1
-4051 1 1
-10 0 1
-43 1 1
-385 1 1
-35 1 1
-101 11 11
-602 1 0
-491 14 16
-1366 19 19
-321 1 1
-49 1 1
-546 1 1
-25 1 1
-2568 1 1
-51 4 0
-119 1 1
-39 0 1
-1040 0 1
-1682 0 4
-39 8 0
-862 1 1
-17 1 1
-587 1 1
-21 1 1
-904 0 1
-261 0 1
-1151 0 2
-2325 5 5
-5415 0 3
-1545 1 0
-428 4 4
-1950 2 0
-1073 0 1
-3653 0 86
-1283 1 1
-79 1 1
-6656 12 12
-1550 0 18
-5832 1 0
-4835 10 10
-1719 1 1
-84 1 1
-848 0 2
-236 1 1
-42 1 1
-1272 12 0
-49 1 1
-820 1 1
-22 1 0
-58 0 22
-510 8 8
-983 6 0
-539 14 14
-863 0 2
-27 1 1
-204 14 14
-163 4 4
-290 1 1
-59 1 1
-842 0 2
-2044 1 1
-90 0 1
-3434 0 3
-356 0 1
-873 0 1
-864 25 1
-630 12 7
-62 10 10
-156 11 11
-1364 19 19
-156 4 4
-244 4 18
-505 1 0
-109 1 1
-230 1 1
-107 4 3
-150 1 1
-83 5 5
-70 1 1
-33 1 0
-142 1 1
-626 5 6
-274 10 10
-128 1 1
-35 1 1
-216 1 1
-44 1 1
-312 1 1
-16 1 1
-1496 8 7
-451 0 1
-855 1 1
-20 1 1
-350 1 1
-62 1 1
-617 10 10
-845 1 1
-58 1 1
-2189 1 1
-147 1 1
-475 1 1
-27 1 1
-278 1 1
-17 1 1
-994 1 1
-40 1 1
-219 5 5
-26 1 1
-900 1 1
-29 1 0
-26 1 1
-484 15 16
-61 9 9
-114 21 26
-801 1 1
-33 1 1
-560 1 1
-37 1 1
-80 14 14
-211 1 1
-43 1 1
-156 1 1
-20 1 1
-685 1 1
-18 1 1
-48 4 0
-711 1 1
-38 1 1
-402 7 7
-1045 1 1
-37 1 1
-4035 9 9
-247 4 0
-4146274 17400 5734
-330366 0 1
-2346742 0 55
-413177 3 0
-450 1 0
-9436 3 1
-7044 4 0
-2886 1 0
-635 1 0
-16567 1 0
-6926 29 28
-9249 1 0
-14916 8 0
-12872 2 0
-3330 2 0
-2673376 2 0
-2603 1 1
-78 1 1
-2170491 7 7
-29817 66108 2485
-6473782 5 5
-39 1 1
-9574 0 2
-5879 1 1
-29 1 1
-6139 1 0
-2354 1 1
-28 1 1
-91 88 87
-142 16 15
-54 1 1
-22 3 3
-1479 4 4
-221 4 4
-132 1 0
-574 11 11
-23 1 0
-604 1 1
-44 1 1
-899 1 0
-70 1 0
-10 1 0
-13561 1 1
-44 1 1
-4476 4 4
-799 26 25
-1466 18 18
-17897 4 0
-1667 1 0
-4250 1 1
-44 1 3
-14 1 1
-4956 1 1
-18 1 0
-39 3 2
-4990 1 1
-47 13 13
-69 4 0
-9729 1 0
-355 0 1
-2186 1 1
-37 1 1
-6111 3 3
-100 4 4
-68 1 1
-43 1 1
-1126 5 7
-5520 8 8
-2316 1 1
-181 6 6
-50 1 1
-29 1 0
-83 1 1
-1073 245 639
-150 1 1
-25272 0 1
-2132 0 4
-2522 1 1
-48 1 1
-1498528 0 1
-6044582 3000008 3000000
-1291113 60074 16691
-3837 3 0
-811 1 0
-2567 1 0
-7375465 11 11
-42062 1 0
-19604621 1 0
-10692667 1 0
-110 0 1
-3577 0 3
-907 1 1
-18 1 1
-897 1 1
-64 535 251
-21 0 1
-140 0 1
-70 1 0
-77 9 10
-149 4 0
-5 1 5
-68 1 0
-142 5 5
-57 14 14
-43 1 1
-31034 124100 99683
-2301 0 2
-44 2 0
-568015 87325 183549
-330 5 5
-114 0 3088
-1776 0 3085
-949 0 4
-514 37 37
-963 15 14
-1351 71 71
-56 15 15
-405 713 713
-651 1 1
-41 1 1
-837 1 0
-658 0 1
-794 0 1
-73 1 1
-30 1 1
-817 51 51
-566 72 72
-195 0 12193
-1599 0 3085
-217 43 43
-247 29 29
-4148 1 0
-158 266 266
-696 20 20
-58 69 69
-100 13 13
-326 137 137
-151 35 35
-1804 151 151
-1341 289 289
-154 23 23
-1932 17 17
-111 47 47
-128 16 16
-78 30 30
-1022 6 10
-78 1 0
-342 31 31
-86 23 23
-1601 41 41
-144 49 49
-170 10 10
-398 23 23
-419 20 20
-955 55 55
-1139 11 11
-1925 0 276
-223 58 58
-702 25 25
-1030 23 23
-363 164 164
-653 16 16
-78 13 13
-1035 0 4
-514 37 37
-1069 10 10
-321 15 15
-603 68 68
-789 20 20
-56 25 25
-1007 5 5
-1198 24 24
-689 3 0
-743 32 32
-817 43 43
-574 11 11
-123 19 19
-618 28 28
-1270 15 15
-289 29 29
-106 11 11
-1395 46 46
-850 4 4
-777 62 62
-86 36 36
-374 97 97
-2072 31 31
-195 56 56
-379 80 80
-64 11 11
-191 18 18
-1051 13 13
-52 163 169
-1297 1 1
-25 1 1
-3451 0 188
-3097 0 9
-2715 1 0
-11829 0 3
-6001 28 0
-10728 0 1
-3770769 1 0
-62 1 0
-22 1 0
-827 1 0
-1485 1 0
-242 0 1
-7142 1 0
-4029 3 3
-69 1 1
-15865 1 0
-83463 4 0
-5976 9 0
-2661 1 0
-1483 1 0
-15868 4 0
-17798 1 0
-2649 1 0
-3627 1 0
-4789 1 0
-9541 1 0
-6844 1 0
-3187 2 0
-411 14 0
-3056 4 0
-19776 3 0
-29085 0 1
-745 2 0
-11453 2 0
-16739 1 0
-14697 1 0
-8539 1 0
-25514443 1 0
-17680 0 1
-55359 0 1
-58 57 59
-1515 1 0
-1111 1 0
-5736 6 6
-66213 1 0
-68 1 1
-24 6 7
-43 1 1
-33414 7 7
-22 1 1
-19312 0 1
-8588 1 1
-31 1 1
-15969 1 1
-32 1 1
-27034 1 1
-42 1 1
-3352 0 1
-15009 1 0
-20433 18 18
-32141 9 8
-116 41 41
-4920 1 0
-33364 1 0
-11160 15 17
-28423 1 0
-43835 1 1
-24 4 2
-269244 4 4
-37 1 1
-17193 4 3
-53 12 11
-23 2 1
-7 1 1
-37978 9 9
-37743 1 1
-35 3 3
-26636 1 1
-17 1 1
-8728292 1 0
-16734742 0 71275
-27 1 1
-657033 0 2
-2911 0 2
-1941 1 1
-35 1 1
-835 1 1
-116 1 1
-399 1 1
-101 1 0
-194 1 2
-450 1 0
-825 1 1
-73 1 1
-156 1 1
-58 1 1
-50 5 5
-153 11 11
-189 5 5
-233 1 1
-83 1 1
-642 0 1
-1380 1 1
-17 1 1
-315 1 1
-26 1 1
-786 0 901
-76 1 1
-45 1 1
-535 1 1
-34 1 1
-2007 7 7
-159 1 1
-26 1 1
-6362 13 13
-504325 100008 25635
-420771 0 232
-287680 0 104
-73 0 364
-181 0 55
-95 1 1
-46 1 1
-4002 1 1
-24 1 1
-183 49 0
-72 1 2
-8 1 0
-39 688 1
-306 0 50
-1939 0 1
-615 684 0
-254 0 1
-572035 7362 108542
-480202 1 0
-11866 6 6
-26917 0 1
-6097 15 15
-3074 0 1
-12292 0 1
-2209 0 1
-7358 0 1
-321393
-
-chain 161719 chr8 146274826 + 12213564 12217654 chr8 146364022 + 11922619 11926713 3890
-48 2333 2337
-1544 26 26
-139
-
-chain 94297 chr8 146274826 + 86864948 86909782 chr8 146364022 + 86767902 86816113 712
-43 4583 4586
-51 23 23
-69 22 22
-81 3466 3466
-114 1460 1461
-170 2237 2237
-47 3442 3445
-24 161 161
-49 1995 1995
-32 5554 5830
-116 4 4
-12 2309 5394
-37 2018 2018
-68 865 865
-25 3669 3669
-32 817 817
-42 1346 1346
-28 1574 1574
-29 1512 1515
-46 1652 1652
-41 2665 2665
-30 2224 2230
-50
-
-chain 49697 chr8 146274826 + 86036864 86037399 chr8 146364022 + 85964814 85965349 932809
-535
-
-chain 26725 chr8 146274826 + 86857851 86907733 chr8 146364022 + 86754632 86786590 1026
-491 49362 31438
-29
-
-chain 24621 chr8 146274826 + 145396034 145396288 chr8 146364022 + 145493131 145493385 2960834
-254
-
-chain 18039 chr8 146274826 + 144819613 144819801 chr8 146364022 + 144748845 144749033 12082915
-188
-
-chain 14890 chr8 146274826 + 86857082 86862299 chr8 146364022 - 59611598 59616815 1124
-71 476 476
-222 4397 4397
-51
-
-chain 13243 chr8 146274826 + 144819801 144819938 chr8 146364022 + 144748593 144748730 12136518
-137
-
-chain 9530 chr8 146274826 + 144823061 144823289 chr8 146364022 + 144751680 144751756 18947814
-3 152 0
-73
-
-chain 9463 chr8 146274826 + 144819938 144820036 chr8 146364022 + 144748632 144748730 13619337
-98
-
-chain 8087 chr8 146274826 + 86874741 86874834 chr8 146364022 + 86817360 86817453 1088
-93
-
-chain 7965 chr8 146274826 + 86865238 86879045 chr8 146364022 + 86780387 86797281 766
-29 7982 7984
-37 5729 8814
-30
-
-chain 7439 chr8 146274826 + 12201270 12203830 chr8 146364022 + 11910337 11912897 3584
-26 2480 2480
-54
-
-chain 6315 chr8 146274826 + 86909619 86909690 chr8 146364022 + 86556151 86556222 765064
-71
-
-chain 6303 chr8 146274826 + 144823559 144823625 chr8 146364022 + 144751722 144751788 29838951
-66
-
-chain 5756 chr8 146274826 + 86854716 86862896 chr8 146364022 + 86782059 86817706 1940
-37 8112 35579
-31
-
-chain 5521 chr8 146274826 + 144823643 144823701 chr8 146364022 + 144751730 144751788 31959915
-58
-
-chain 5339 chr8 146274826 + 144823077 144823133 chr8 146364022 + 144751620 144751676 32492605
-56
-
-chain 4702 chr8 146274826 + 144819343 144819392 chr8 146364022 + 144748967 144749016 12082914
-49
-
-chain 4684 chr8 146274826 + 144823154 144823323 chr8 146364022 + 144751621 144751752 19314390
-33 102 64
-34
-
-chain 4385 chr8 146274826 + 144820066 144820134 chr8 146364022 + 144748613 144748681 20813384
-68
-
-chain 3959 chr8 146274826 + 144820160 144820201 chr8 146364022 + 144748560 144748601 13619336
-41
-
-chain 3959 chr8 146274826 + 144819572 144819613 chr8 146364022 + 144748560 144748601 13619338
-41
-
-chain 3270 chr8 146274826 + 86905368 86905406 chr8 146364022 - 59611399 59611437 120315
-38
-
-chain 3190 chr8 146274826 + 144819513 144819546 chr8 146364022 + 144748697 144748730 12136519
-33
-
-chain 2525 chr8 146274826 + 144823339 144823377 chr8 146364022 + 144751692 144751730 23202086
-38
-
-chain 2511 chr8 146274826 + 144819546 144819572 chr8 146364022 + 144748632 144748658 13619339
-26
-
-chain 2509 chr8 146274826 + 144820134 144820160 chr8 146364022 + 144748632 144748658 22535050
-26
-
-chain 2395 chr8 146274826 + 144820036 144820061 chr8 146364022 + 144748974 144748999 15328526
-25
-
-chain 2146 chr8 146274826 + 86862896 86862937 chr8 146364022 - 59626667 59626708 2042
-38 1 1
-2
-
-chain 2013 chr8 146274826 + 12224371 12224395 chr8 146364022 + 11933433 11933457 5802
-24
-
-chain 928 chr8 146274826 + 86871422 86871445 chr8 146364022 + 86566156 86566179 4371
-23
-
-chain 19961283 chr8_random 943810 + 732172 943810 chr5 180915260 + 69954173 70165811 138
-211638
-
-chain 4772201 chr8_random 943810 + 62854 113804 chr8 146364022 + 16274686 16325603 650
-4146 9 9
-1642 5 9
-541 4 0
-1197 1 1
-27 1 1
-2498 0 1
-20171 4 0
-2761 3 0
-1978 0 1
-628 10 0
-5533 3 0
-2428 24 0
-47 5 9
-197 11 11
-687 0 2
-642 1 1
-17 1 1
-2228 0 4
-1978 1 0
-1521
-
-chain 4401722 chr8_random 943810 + 396973 443039 chr8 146364022 - 801667 847519 685
-2079 1 0
-22818 62 9
-50 57 0
-25 0 8
-40 91 0
-5953 32 0
-1937 0 2
-803 13 14
-786 0 5
-3908 2 0
-783 0 1
-854 1 0
-142 1 0
-1521 1 0
-114 0 1
-498 4 4
-591 2 0
-2750 0 9
-147
-
-chain 3680035 chr8_random 943810 + 643258 682172 chr8_gl000196_random 38914 + 0 38914 797
-38914
-
-chain 3554032 chr8_random 943810 + 493047 530222 chr8_gl000197_random 37175 + 0 37175 825
-37175
-
-chain 1222443 chr8_random 943810 + 0 12854 chr8 146364022 - 108556772 108569616 1946
-5765 0 1
-2843 2 0
-279 0 1
-299 1 0
-1113 9 0
-2543
-
-chain 995258 chr8_random 943810 + 250482 297042 chr8 146364022 + 46838897 46856230 2491
-52 5 5
-72 1882 0
-246 1888 0
-158 79 78
-59 82 81
-53 46 46
-76 18 18
-100 1942 59
-231 1 0
-84 1 0
-49 23 22
-65 25 25
-312 49 47
-118 1 0
-169 645 640
-71 18 18
-202 15 15
-74 114 112
-65 1444 30
-86 2249 34
-216 9 8
-173 33 30
-63 81 79
-265 87 84
-103 11 10
-122 1 1
-47 1 1
-165 858 0
-14 1027 0
-88 1879 0
-148 7 6
-166 1 0
-288 1888 1
-62 1 1
-90 1 0
-35 1890 1
-280 3 3
-23 1 0
-109 1 1
-283 4 4
-88 1 1
-67 1 1
-23 1 1
-109 680 0
-89 1876 0
-41 1 0
-45 1898 0
-107 18 18
-18 1 0
-28 1 1
-50 1 0
-35 1 1
-50 7 4
-54 1 0
-37 1 1
-298 11 10
-94 1 0
-17 1 0
-36 1 0
-55 1 0
-12 1 1
-148 1 1
-79 11 9
-78 1 1
-140 5 4
-54 3 0
-97 1 0
-138 6 4
-73 1 0
-59 19 19
-207 1 1
-45 1 1
-76 1 0
-8 3 1
-60 2 2
-56 1 1
-70 1 0
-45 1 1
-136 131 128
-86 17 16
-75 7 7
-53 483 144
-75 26 26
-230 135 132
-110 15 15
-61 25 23
-76 43 42
-120 1 0
-78 1735 1728
-192 42 41
-61 82 82
-190 37 37
-90 1911 30
-168 56 56
-56 10 10
-83 26 26
-230 1927 49
-224 1937 52
-244 41 41
-125 36 36
-96 26 26
-83 81 78
-272 2019 139
-59 236 231
-103 71 70
-183 31 31
-58 119 117
-131 1 0
-167 25 25
-72 97 96
-91 6 6
-75 10 9
-219
-
-chain 895028 chr8_random 943810 + 298039 346176 chr8 146364022 - 99507152 99525054 4376
-63 126 463
-229 1883 1
-104 25 25
-58 6 6
-155 36 35
-84 10 10
-88 23 23
-53 1 0
-164 5 5
-68 56 55
-231 24 24
-149 409 408
-53 1 0
-69 1 0
-134 6 6
-201 318 315
-27 1885 0
-105 1 0
-82 82 82
-144 27 27
-56 238 235
-130 24 23
-109 1 0
-77 2 1
-100 31 30
-102 14 14
-63 11 10
-108 91 91
-72 94 93
-169 149 148
-198 238 234
-86 2 0
-169 3 1
-72 11 11
-66 1 0
-247 18 17
-392 540 533
-186 7 7
-121 1 0
-254 1977 89
-53 7 7
-193 483 475
-93 50 47
-198 28 28
-76 1883 8
-61 130 129
-123 29 29
-112 201 199
-138 12 11
-21 1873 0
-107 33 33
-53 1880 1
-118 40 38
-141 1943 53
-168 137 134
-81 16 16
-115 2216 0
-103 32 29
-71 128 127
-104 54 53
-121 128 127
-66 99 96
-80 75 74
-128 1924 40
-53 2 1
-288 1910 24
-53 1907 23
-56 40 40
-72 111 111
-62 127 127
-122 65 65
-80 210 206
-115 0 1
-146 5663 0
-183 40 40
-53 34 33
-229 28 28
-92 83 83
-234 1983 101
-57 1885 0
-44 11 11
-62 1 0
-69 28 28
-126 1 0
-148 147 144
-58 14 12
-53 1 0
-66 1 0
-105 34 33
-71 39 38
-69 17 17
-56 6 5
-79 48 46
-53 6 6
-57 38 35
-77 78 75
-111 649 644
-110 45 43
-235
-
-chain 604051 chr8_random 943810 + 178170 281976 chr8 146364022 + 46838954 46856867 5476
-212 1875 0
-272 566 562
-114 1 0
-143 1 0
-55 74 74
-65 25 25
-63 62 62
-61 31 31
-102 23 23
-215 1 0
-63 67 68
-68 373 34
-158 64 63
-53 46 46
-105 67 67
-55 2294 38
-202 15 15
-63 51 51
-246 23 23
-71 1 0
-271 103 102
-427 6 5
-51 25 22
-54 1878 0
-36 10 10
-122 26 26
-134 1886 0
-121 93 92
-51 1 2
-246 54742 0
-134 1884 0
-129 33 31
-147 39 38
-116 65 61
-66 43 41
-62 1982 95
-213 196 193
-339 260 254
-187 89 88
-10 2292 403
-57 5123 1343
-293 24 22
-61 1 0
-73 7 7
-53 1877 144
-91 4270 499
-59 2463 581
-37 339 671
-59 342 0
-110 266 261
-150 6 6
-92 244 241
-51 62 62
-51 3119 1229
-91 761 80
-60 48 47
-137 1876 0
-136 12 10
-131 12 11
-290 1 0
-45 4005 2083
-59 88 424
-59
-
-chain 496223 chr8_random 943810 + 580222 593236 chr8 146364022 - 59615387 59795086 34662
-2144 4634 17818
-237 1 1
-31 1 1
-194 35 40
-1575 162 153603
-534 0 55
-995 64 64
-1343 58 58
-112 1 1
-38 1 1
-70 1 1
-41 1 1
-81 1 1
-34 1 1
-624
-
-chain 279595 chr8_random 943810 + 199376 329223 chr8 146364022 - 99506514 99525054 6095
-67 50 47
-55 631 967
-63 1082 0
-177 61 58
-147 6 6
-143 1 0
-42 1882 0
-74 31 30
-83 23 23
-13 1879 0
-204 5 5
-58 69 69
-227 1933 51
-152 123 122
-83 1 0
-118 72 72
-159 17 17
-119 34 34
-230 36 36
-134 1929 32
-189 3017 0
-24 83 83
-121 1 0
-49 5680 1
-325 136 129
-277 30 30
-335 1436 53
-51 63 62
-99 867 859
-154 860 855
-269 32 31
-112 1 0
-50 1877 0
-99 58 58
-108 1 0
-96 2221 0
-37 1546 0
-136 2648 89
-52 7 8
-278 1 0
-202 139 136
-145 65 63
-51 44 42
-62 143 139
-61 156 155
-243 214 215
-20 1872 0
-194 74 75
-337 25 25
-145 15 15
-71 65 65
-84 1878 0
-60 1 0
-244 227 225
-226 53 53
-62 42 41
-66 63 61
-120 35 34
-64 56110 1
-98 41 40
-53 2795 914
-65 10 10
-57 8290 755
-67 63 61
-66 17 16
-53 1 0
-58 36 36
-92 3924 162
-40 61 61
-58 4119 368
-133 2082 185
-58 42 42
-167 2235 21
-50 4401 627
-71 40 39
-147 360 353
-60 174 173
-446
-
-chain 208078 chr8_random 943810 + 170910 242131 chr8 146364022 - 99506628 99524507 6380
-55 632 967
-69 73 73
-115 28 28
-146 4836 20
-75 1 0
-54 58 58
-87 10 10
-294 22105 209
-184 59 59
-53 209 208
-64 1388 305
-56 340 338
-60 50 50
-134 32 32
-108 2 0
-106 83 82
-108 1884 0
-62 68 68
-216 1 0
-55 20 20
-107 3862 104
-61 311 311
-29 2182 2154
-53 1 0
-93 1388 251
-108 3 2
-129 159 158
-109 1 0
-31 114 113
-51 60 60
-78 14 14
-99 14 13
-152 64 62
-60 13 12
-120 98 98
-138 115 114
-56 6 4
-26 438 436
-213 183 182
-53 1 0
-81 2318 428
-71 25 25
-145 15 15
-71 65 65
-109 1956 43
-69 112 108
-33 397 392
-58 1466 80
-62 46 46
-401 64 64
-45 51 51
-56 1 0
-6 99 99
-54 146 144
-187 67 67
-166 52 49
-51 9 8
-63 11 10
-61 186 186
-68 38 38
-168 105 102
-125 3 2
-113 17 17
-186 2 0
-3 6394 747
-113 762 83
-102 4015 254
-238 102 101
-91 6 6
-85 1999 129
-12 9 9
-44 2322 442
-90 319 318
-42
-
-chain 110041 chr8_random 943810 + 584910 586860 chr8 146364022 - 59525621 59532924 58275
-151 1 1
-64 1 1
-158 1 1
-137 0 5353
-14 3 3
-73 8 8
-52 11 11
-57 9 9
-54 15 15
-289 15 15
-837
-
-chain 81230 chr8_random 943810 + 228410 243660 chr8 146364022 - 99515272 99524158 121868
-53 818 813
-113 55 55
-76 1036 1025
-78 1 0
-115 1280 591
-98 36 34
-79 25 25
-73 189 188
-120 2622 738
-79 145 145
-8 21 19
-36 157 155
-27 18 14
-98 82 81
-130 280 280
-78 83 83
-21 20 20
-27 51 51
-134 238 238
-10 39 39
-53 216 215
-252 5175 1418
-73 6 6
-146 231 228
-111 1 0
-201 35 35
-101
-
-chain 78595 chr8_random 943810 + 271315 287023 chr8 146364022 + 46844767 46855610 13381
-177 7 6
-61 49 46
-54 86 84
-62 24 23
-151 92 91
-73 109 107
-108 1 0
-51 8 6
-97 2409 1723
-29 1995 118
-92 64 63
-24 701 695
-42 7 7
-53 90 89
-54 403 392
-25 6360 4099
-70 192 192
-26 77 76
-63 336 336
-129 125 126
-143 878 869
-27 23 23
-61
-
-chain 70241 chr8_random 943810 + 583972 584708 chr8 146364022 - 2327498 2328234 1800744
-736
-
-chain 67060 chr8_random 943810 + 583131 583834 chr8 146364022 + 144032710 144033413 1885205
-703
-
-chain 60161 chr8_random 943810 + 163863 193392 chr8 146364022 + 46840361 46854926 51951
-69 30 30
-79 155 153
-22 224 224
-36 635 633
-54 78 77
-53 1660 61
-55 408 405
-36 32 32
-40 163 161
-29 96 89
-5 85 85
-4 108 106
-193 10362 0
-211 23 23
-164 214 212
-108 41 40
-217 35 35
-85 25 25
-266 2366 490
-48 600 260
-32 3507 4987
-74 590 587
-105 2319 2307
-66 2880 990
-102 1 0
-89 507 168
-143
-
-chain 59106 chr8_random 943810 + 169718 174718 chr8 146364022 - 99507650 99524666 884317
-69 73 73
-53 107 105
-145 323 5927
-57 45 43
-58 51 49
-65 130 129
-16 74 74
-175 49 49
-53 423 422
-53 2360 8782
-34 55 55
-95 1 0
-28 1 0
-2 113 113
-292
-
-chain 53138 chr8_random 943810 + 171392 346403 chr8 146364022 - 102525263 102570806 8603
-57 57 57
-79 626 627
-64 1139 91
-72 32 32
-61 1 0
-192 55 53
-253 233 231
-113 1894 10
-151 18218 118
-161 39 39
-89 168 167
-68 174 168
-68 7236 473
-76 2229 347
-40 124 120
-50 21 21
-55 1906 29
-98 2 0
-51 3928 158
-113 3230 214
-58 5760 82
-62 113 112
-39 7442 4152
-122 13 12
-149 90 90
-56 48 47
-71 400 397
-133 1910 21
-97 23 23
-92 2561 0
-54 15 13
-67 70 69
-90 95 94
-59 72 72
-139 45 45
-101 71659 2394
-62 72 72
-84 1 0
-9 2000 117
-95 39 39
-65 70 68
-87 2031 150
-103 1949 61
-106 17 17
-136 75 74
-53 5662 38
-58 1936 41
-42 168 168
-108 95 95
-66 243 241
-50 5018 908
-53 4282 513
-74 1906 30
-83 2078 26035
-107 1947 59
-57 500 483
-160 1936 53
-185 1897 12
-119 3972 202
-29 14 14
-79 61 61
-44
-
-chain 52733 chr8_random 943810 + 164218 295513 chr8 146364022 + 43821028 43838759 7574
-63 20 20
-141 36 36
-153 32 31
-103 40 40
-53 86 85
-99 1658 59
-83 265 263
-110 21 21
-51 29 27
-160 108 108
-51 1 0
-49 1 0
-61 130 123
-85 12281 44
-69 272 272
-118 62 62
-75 7995 1645
-102 45 45
-59 32 32
-14 328 328
-126 2372 483
-86 58668 153
-40 4323 551
-31 1938 56
-58 2392 511
-58 234 222
-51 1403 0
-51 91 91
-50 218 218
-83 67 66
-75 77 77
-110 391 53
-2 2678 792
-147 104 101
-59 1917 33
-92 1958 75
-54 5899 1442
-11 105 104
-132 1 0
-50 2212 332
-66 5506 1369
-60 189 189
-173 223 221
-222 1874 0
-87 23 23
-54 108 108
-109 29 28
-94 64 63
-70 91 86
-97 164 161
-112 123 123
-78 1942 66
-145 118 118
-69 1917 31
-51 10 10
-113 235 231
-193 327 327
-41 392 391
-51 363 361
-123 1977 94
-57
-
-chain 48120 chr8_random 943810 + 172087 205615 chr8 146364022 - 99508140 99525054 275640
-50 1136 89
-81 56 55
-4 1876 5603
-199 577 570
-71 144 141
-39 17920 1690
-56 276 276
-117 289 289
-64 172 170
-10 18 18
-76 284 279
-308 237 229
-64 1904 0
-33 2094 204
-40 43 43
-63 3 2
-59 12 12
-306 15 15
-33 1146 61
-49 757 4487
-37 62 62
-83 46 46
-112 178 174
-95 1 0
-29 1956 73
-248
-
-chain 37837 chr8_random 943810 + 253130 272078 chr8 146364022 + 46839659 46847391 87472
-42 44 44
-61 2771 880
-109 37 36
-171 1 0
-120 209 204
-98 56 55
-61 10 9
-23 187 186
-75 18 18
-17 5316 1682
-9 145 143
-53 1 0
-29 137 137
-73 132 128
-65 14 14
-79 6214 2430
-95 70 70
-83 2232 342
-91
-
-chain 33662 chr8_random 943810 + 209837 215530 chr8 146364022 - 99514311 99520696 710844
-71 67 65
-87 1 0
-118 10 8
-19 543 533
-53 11 11
-89 4 2
-68 143 138
-148 1307 167
-110 627 624
-30 2103 3960
-84
-
-chain 32940 chr8_random 943810 + 226035 229035 chr8 146364022 - 102534454 102537445 203694
-68 23 23
-49 847 842
-50 91 91
-134 57 57
-61 1290 1287
-37 113 113
-86 41 40
-53
-
-chain 31024 chr8_random 943810 + 206449 211988 chr8 146364022 - 99514678 99520173 701886
-8 43 43
-64 6 5
-58 14 12
-82 340 0
-49 416 749
-81 59 59
-117 75 75
-207 1422 3285
-36 2428 531
-34
-
-chain 29825 chr8_random 943810 + 245532 246838 chr8 146364022 + 46839602 46840894 3893579
-57 560 553
-119 226 222
-5 184 184
-21 75 72
-59
-
-chain 28513 chr8_random 943810 + 169082 170209 chr8 146364022 - 99514495 99515614 2995290
-72 337 330
-70 17 17
-84 143 144
-53 81 80
-64 162 161
-44
-
-chain 28403 chr8_random 943810 + 244271 247583 chr8 146364022 + 46840215 46841632 1514192
-150 21 21
-65 247 246
-61 60 60
-144 37 36
-68 1 0
-56 146 144
-158 1945 55
-153
-
-chain 27366 chr8_random 943810 + 305024 329400 chr8 146364022 - 99508828 99514021 185326
-30 144 144
-27 1950 69
-57 1 0
-69 4733 954
-80 7 7
-60 2015 139
-144 51 51
-17 50 48
-20 2199 324
-179 83 83
-149 1 0
-45 50 50
-29 198 197
-38 56 56
-36 163 162
-27 2035 153
-71 157 157
-56 6099 109
-62 47 47
-93 104 100
-75 1 0
-39 342 0
-49 1641 94
-81 539 539
-177
-
-chain 25161 chr8_random 943810 + 165410 166073 chr8 146364022 + 46840031 46840686 5084847
-51 107 104
-69 107 106
-77 51 48
-53 79 78
-69
-
-chain 23498 chr8_random 943810 + 275598 276538 chr8 146364022 + 46848347 46849285 1106774
-150 39 39
-58 1 0
-156 159 160
-43 237 235
-97
-
-chain 22556 chr8_random 943810 + 221873 233787 chr8 146364022 - 102535430 102541485 264178
-56 92 91
-134 1524 140
-26 9348 4879
-77 298 294
-159 126 126
-55 8 7
-11
-
-chain 21554 chr8_random 943810 + 211856 229563 chr8 146364022 - 102534119 102541711 230838
-98 1283 144
-76 1760 1749
-25 1 0
-80 1889 12
-87 80 79
-50 14 14
-51 55 50
-59 207 201
-52 31 30
-212 2303 390
-120 3503 2102
-43 5590 1830
-38
-
-chain 21378 chr8_random 943810 + 315539 346866 chr8 146364022 - 99515536 99522005 182294
-65 7 7
-59 1872 0
-52 1 0
-110 59 59
-145 1929 47
-157 4107 0
-50 19 19
-76 11 11
-9 218 215
-20 69 68
-27 104 104
-38 3941 169
-93 9868 446
-40 53 53
-33 350 349
-83 1915 34
-228 2 1
-71 4993 3080
-80 103 101
-58 162 162
-50
-
-chain 20133 chr8_random 943810 + 187153 190961 chr8 146364022 + 46839718 46841635 711123
-27 2490 610
-70 193 186
-75 6 6
-22 81 81
-48 1 0
-41 200 200
-10 13 12
-78 103 101
-193 10 10
-147
-
-chain 19851 chr8_random 943810 + 184692 274845 chr8 146364022 + 46839508 46849467 34309
-59 20 20
-103 2903 645
-204 29 27
-122 5 4
-251 1 1
-19 1 1
-370 102 102
-45 59 59
-32 2407 520
-35 53082 226
-207 6009 346
-163 6 4
-101 79 79
-50 419 416
-33 1900 15
-227 6 6
-48 1 0
-53 22 21
-65 58 57
-59 43 42
-133 81 80
-20 44 42
-50 14 12
-53 37 36
-104 2375 490
-62 1340 1334
-14 1 0
-183 3854 228
-49 6055 405
-35 6036 1578
-80 25 25
-89 8 7
-13
-
-chain 19146 chr8_random 943810 + 175023 175290 chr8 146364022 - 99508150 99508416 4025470
-88 58 57
-65 25 25
-31
-
-chain 17870 chr8_random 943810 + 167013 193249 chr8 146364022 + 46840039 46851047 112211
-37 407 404
-31 233 231
-41 10382 13
-26 802 800
-40 282 279
-41 6132 1660
-77 3954 2070
-28 510 4239
-81 90 89
-50 30 30
-120 2083 201
-60 192 191
-51 338 0
-118
-
-chain 17758 chr8_random 943810 + 265412 266607 chr8 146364022 + 43830436 43831619 676151
-58 100 98
-16 14 14
-59 946 936
-2
-
-chain 17102 chr8_random 943810 + 196211 212812 chr8 146364022 - 102534634 102539542 315778
-4 176 169
-110 677 661
-101 229 222
-63 12 11
-71 2311 416
-66 5 5
-3 2545 1456
-25 7 5
-52 21 20
-3 9994 1320
-61 8 7
-57
-
-chain 16958 chr8_random 943810 + 303736 319647 chr8 146364022 - 99509421 99514022 288375
-62 1 0
-115 55 55
-12 6716 1059
-173 60 58
-5 238 238
-27 142 138
-80 1 0
-32 1181 1170
-56 95 93
-15 6818 1186
-27
-
-chain 16519 chr8_random 943810 + 191041 191237 chr8 146364022 + 46841712 46841907 5194781
-138 7 6
-51
-
-chain 16395 chr8_random 943810 + 250196 250458 chr8 146364022 + 46842349 46842610 5706058
-109 63 63
-38 1 0
-51
-
-chain 16284 chr8_random 943810 + 248826 295566 chr8 146364022 + 43821313 43835075 8983
-38 3114 1217
-58 3878 108
-134 2320 436
-35 2074 180
-90 6230 729
-53 51 51
-165 2138 257
-18 1 0
-14 9087 4604
-68 26 23
-70 26 25
-165 4726 2469
-31 113 113
-45 6358 726
-53 323 321
-29 3160 1272
-53 1943 60
-1 1 0
-51
-
-chain 16072 chr8_random 943810 + 313809 340982 chr8 146364022 - 102527896 102533983 267291
-28 5309 1547
-73 15383 1858
-110 23 22
-51 120 119
-75 171 167
-144 2405 509
-56 2087 199
-104 240 238
-93 367 364
-59 113 109
-162
-
-chain 15849 chr8_random 943810 + 261982 295288 chr8 146364022 + 43821759 43829198 76114
-110 412 75
-52 237 234
-137 1904 21
-61 17 17
-88 8048 505
-97 1212 533
-118 1 0
-62 80 80
-12 643 644
-105 9123 1231
-153 113 112
-50 1019 1018
-55 3899 142
-89 478 475
-43 4836 1068
-52
-
-chain 15670 chr8_random 943810 + 194296 345941 chr8 146364022 - 102525263 102540770 8834
-113 3789 1
-79 5134 279
-81 25039 3655
-36 72 71
-66 2073 189
-82 66 62
-87 280 277
-20 23 23
-59 87 84
-72 49 48
-51 7 7
-82 1014 334
-62 79983 3178
-76 18 17
-68 2382 504
-43 42 41
-108 10477 733
-134 2033 147
-59 5650 11
-88 3846 65
-64 297 293
-50 3779 12
-69 123 122
-120 121 120
-68 15 15
-57 136 135
-139 239 237
-72 1 0
-63 4 3
-53 59 59
-8 490 488
-28 84 81
-35 298 293
-34 805 799
-67 1 0
-53 69 67
-100 14 14
-81 134 132
-53 38 38
-39 110 109
-45
-
-chain 14986 chr8_random 943810 + 225882 226349 chr8 146364022 - 99518359 99518822 2174986
-18 53 51
-56 166 164
-73 33 33
-68
-
-chain 14834 chr8_random 943810 + 243014 243551 chr8 146364022 - 99519780 99520313 2299338
-16 162 159
-19 313 312
-27
-
-chain 14491 chr8_random 943810 + 298927 299279 chr8 146364022 - 102541139 102541484 3650546
-95 253 246
-4
-
-chain 13927 chr8_random 943810 + 330425 330634 chr8 146364022 - 99513165 99513373 16289681
-108 47 46
-54
-
-chain 13708 chr8_random 943810 + 204114 204446 chr8 146364022 - 99514221 99514551 7956244
-38 2 1
-51 137 136
-104
-
-chain 13201 chr8_random 943810 + 267894 296641 chr8 146364022 + 46841376 46846486 149880
-47 8325 118
-153 12619 975
-124 10 10
-59 1933 45
-415 178 178
-62 103 99
-67 193 193
-45 34 34
-4 542 542
-26 2853 963
-60 194 194
-31 632 628
-38
-
-chain 12234 chr8_random 943810 + 261803 269960 chr8 146364022 + 46841266 46843423 172872
-35 2890 667
-1 24 24
-60 15 15
-6 166 166
-32 2034 149
-193 134 132
-81 69 68
-116 2096 211
-21 87 83
-97
-
-chain 10617 chr8_random 943810 + 337138 337293 chr8 146364022 - 99523571 99523724 21494273
-69 29 27
-57
-
-chain 10554 chr8_random 943810 + 261774 276161 chr8 146364022 + 46850579 46856384 287750
-26 3379 1156
-30 20 20
-51 4844 1067
-12 16 15
-65 51 50
-53 361 357
-85 102 101
-13 51 51
-26 87 87
-46 4988 2413
-81
-
-chain 10039 chr8_random 943810 + 325665 325968 chr8 146364022 - 99512180 99512483 3203386
-32 146 146
-51 12 12
-62
-
-chain 9889 chr8_random 943810 + 299929 343052 chr8 146364022 - 99507161 99512618 194143
-54 125 463
-172 6011 368
-29 4240 471
-68 8003 490
-69 47 47
-10 133 133
-55 45 44
-46 4488 379
-66 1908 22
-82 7833 307
-63 2043 161
-90 115 115
-101 1 0
-97 2144 241
-32 4543 773
-83 294 293
-33
-
-chain 9887 chr8_random 943810 + 315022 315154 chr8 146364022 - 99513153 99513284 7544872
-79 1 0
-52
-
-chain 9860 chr8_random 943810 + 311200 311307 chr8 146364022 - 99513093 99513199 8991129
-52 1 0
-54
-
-chain 9817 chr8_random 943810 + 331048 331155 chr8 146364022 - 99513786 99513892 13428201
-64 1 0
-42
-
-chain 9446 chr8_random 943810 + 266857 296082 chr8 146364022 + 43794817 43828117 103381
-44 9743 27369
-146 121 120
-47 983 976
-79 10221 2331
-165 112 112
-51 81 80
-39 1877 0
-66 2043 157
-36 3318 1429
-53
-
-chain 9082 chr8_random 943810 + 283227 283503 chr8 146364022 + 46855567 46855841 3572014
-72 39 38
-7 101 100
-57
-
-chain 9078 chr8_random 943810 + 266179 266275 chr8 146364022 + 46841541 46841637 24832874
-96
-
-chain 9056 chr8_random 943810 + 234327 343102 chr8 146364022 - 102532678 102541696 177988
-49 2060 180
-83 4311 566
-60 72559 3258
-278 110 111
-124 380 378
-51 246 244
-21 14 13
-37 2147 273
-83 195 193
-50 29 28
-5 2000 121
-73 4435 328
-132 3864 97
-47 5706 63
-45 54 54
-151 1883 5
-99 3796 15
-99 63 61
-64 1 0
-58 1881 0
-137 76 74
-53 53 48
-27 312 310
-85 17 16
-19 140 140
-52 244 244
-62 105 104
-50
-
-chain 8907 chr8_random 943810 + 174718 174972 chr8 146364022 - 99514987 99515577 3222521
-12 195 531
-47
-
-chain 8843 chr8_random 943810 + 329461 329557 chr8 146364022 - 99512211 99512306 12312646
-78 1 0
-17
-
-chain 8728 chr8_random 943810 + 244822 248433 chr8 146364022 + 46838897 46840609 1548241
-52 2949 1051
-100 1 0
-231 55 55
-65 34 34
-124
-
-chain 8619 chr8_random 943810 + 294534 295111 chr8 146364022 + 46855606 46856180 1696895
-31 25 25
-71 52 51
-46 97 97
-58 132 130
-65
-
-chain 8428 chr8_random 943810 + 281982 282213 chr8 146364022 + 46854328 46854560 448042
-60 97 98
-56 17 17
-1
-
-chain 8419 chr8_random 943810 + 261190 261281 chr8 146364022 + 43820969 43821060 10860311
-91
-
-chain 8395 chr8_random 943810 + 294914 295046 chr8 146364022 + 46848509 46848640 12873675
-58 69 68
-5
-
-chain 8358 chr8_random 943810 + 183391 183662 chr8 146364022 + 46851295 46851565 1204104
-177 39 38
-55
-
-chain 8235 chr8_random 943810 + 303417 303563 chr8 146364022 - 99516580 99516725 5721277
-92 1 0
-53
-
-chain 8187 chr8_random 943810 + 330253 330340 chr8 146364022 - 99512994 99513081 26147162
-87
-
-chain 7754 chr8_random 943810 + 175981 176066 chr8 146364022 - 99524049 99524133 15930227
-61 1 0
-23
-
-chain 7677 chr8_random 943810 + 237294 312035 chr8 146364022 - 99517817 99525125 210590
-33 254 254
-156 1 0
-142 25 25
-70 127 127
-226 1925 53
-62 55 55
-112 29 28
-91 36 36
-139 46 43
-7 796 791
-54 65384 1748
-45 3060 1165
-46 839 833
-119 535 529
-77 214 206
-36
-
-chain 7632 chr8_random 943810 + 192816 192897 chr8 146364022 + 46850614 46850695 27043702
-81
-
-chain 7605 chr8_random 943810 + 285785 290878 chr8 146364022 + 46850643 46851974 486318
-50 2571 689
-13 4 4
-73 73 73
-25 2038 160
-132 56 54
-58
-
-chain 7406 chr8_random 943810 + 221929 222203 chr8 146364022 - 99519540 99519813 598559
-62 1 0
-29 134 134
-48
-
-chain 7383 chr8_random 943810 + 294257 294361 chr8 146364022 + 43837510 43837614 4128881
-70 9 9
-25
-
-chain 7298 chr8_random 943810 + 168270 168367 chr8 146364022 + 46839414 46839508 6543284
-4 56 53
-37
-
-chain 7295 chr8_random 943810 + 336620 336697 chr8 146364022 - 99513722 99513799 27625946
-77
-
-chain 7211 chr8_random 943810 + 261472 261549 chr8 146364022 + 46839068 46839145 24666501
-77
-
-chain 7186 chr8_random 943810 + 330047 330123 chr8 146364022 - 99512791 99512867 27853996
-76
-
-chain 7178 chr8_random 943810 + 316571 316677 chr8 146364022 - 102541857 102541963 5712191
-106
-
-chain 7102 chr8_random 943810 + 318170 320971 chr8 146364022 - 99520028 99520932 765669
-72 19 19
-135 121 121
-72 13 12
-29 2280 384
-60
-
-chain 7077 chr8_random 943810 + 192950 193025 chr8 146364022 + 46850748 46850823 28082919
-75
-
-chain 7057 chr8_random 943810 + 203108 206189 chr8 146364022 - 99515093 99516287 1156085
-30 91 89
-53 2333 448
-35 503 503
-36
-
-chain 6980 chr8_random 943810 + 332337 335152 chr8 146364022 - 99522544 99523471 1124480
-50 412 409
-6 79 79
-50 126 126
-65 1978 93
-49
-
-chain 6922 chr8_random 943810 + 183305 183378 chr8 146364022 + 46840000 46840073 28376594
-73
-
-chain 6904 chr8_random 943810 + 266355 266429 chr8 146364022 + 46841714 46841788 28413782
-74
-
-chain 6731 chr8_random 943810 + 303313 303384 chr8 146364022 - 99509001 99509072 28774708
-71
-
-chain 6664 chr8_random 943810 + 303981 314057 chr8 146364022 - 99517140 99519668 641395
-51 3 2
-55 1 0
-72 170 168
-30 7422 1761
-7 12 11
-54 1882 0
-68 153 153
-96
-
-chain 6603 chr8_random 943810 + 322619 327380 chr8 146364022 - 99513231 99513884 1344743
-127 337 0
-120 9 8
-78 1963 78
-31 1885 0
-211
-
-chain 6584 chr8_random 943810 + 197737 202982 chr8 146364022 - 102536127 102540259 775939
-91 1155 1137
-22 12 11
-57 3876 2782
-32
-
-chain 6449 chr8_random 943810 + 218412 233428 chr8 146364022 - 99516080 99519573 697985
-27 8506 1438
-73 54 54
-91 295 295
-235 28 28
-6 100 100
-56 5516 1061
-29
-
-chain 6331 chr8_random 943810 + 327023 327090 chr8 146364022 - 99511661 99511728 29751334
-67
-
-chain 6250 chr8_random 943810 + 208146 208242 chr8 146364022 - 99508890 99508983 12204367
-15 70 67
-11
-
-chain 6212 chr8_random 943810 + 207786 207861 chr8 146364022 - 99514136 99514211 3829743
-75
-
-chain 6150 chr8_random 943810 + 203513 205795 chr8 146364022 - 102537045 102537445 1909663
-16 3 2
-125 118 117
-8 1955 75
-57
-
-chain 6094 chr8_random 943810 + 299279 299402 chr8 146364022 - 99508718 99508841 2977078
-68 21 21
-34
-
-chain 6085 chr8_random 943810 + 250101 250166 chr8 146364022 + 46842254 46842319 30387783
-65
-
-chain 6067 chr8_random 943810 + 293889 294038 chr8 146364022 + 46845620 46845767 4301892
-66 21 19
-62
-
-chain 6049 chr8_random 943810 + 230044 230135 chr8 146364022 - 102569888 102569979 10345810
-91
-
-chain 5962 chr8_random 943810 + 207380 207446 chr8 146364022 - 99509995 99510061 8394857
-66
-
-chain 5949 chr8_random 943810 + 272784 272847 chr8 146364022 + 46853694 46853757 30762472
-63
-
-chain 5823 chr8_random 943810 + 299452 300023 chr8 146364022 - 99514497 99515068 1422380
-470 61 61
-40
-
-chain 5814 chr8_random 943810 + 289476 289952 chr8 146364022 + 46839369 46839842 2257769
-77 110 110
-124 92 90
-42 1 0
-30
-
-chain 5753 chr8_random 943810 + 192024 192086 chr8 146364022 + 46838954 46839016 21955899
-62
-
-chain 5749 chr8_random 943810 + 233271 233333 chr8 146364022 - 102570546 102570608 31315232
-62
-
-chain 5681 chr8_random 943810 + 341821 341883 chr8 146364022 - 99511396 99511458 7040566
-62
-
-chain 5649 chr8_random 943810 + 174777 174837 chr8 146364022 - 99507908 99507968 31588023
-60
-
-chain 5623 chr8_random 943810 + 175706 175950 chr8 146364022 - 102534119 102534360 3287579
-59 23 22
-63 22 20
-77
-
-chain 5394 chr8_random 943810 + 322313 322370 chr8 146364022 - 99511057 99511114 32316179
-57
-
-chain 5303 chr8_random 943810 + 187437 187493 chr8 146364022 + 46840000 46840056 32583273
-56
-
-chain 5285 chr8_random 943810 + 290446 290502 chr8 146364022 + 43794807 43794863 32673339
-56
-
-chain 5276 chr8_random 943810 + 336755 336811 chr8 146364022 - 99513853 99513909 32693850
-56
-
-chain 5265 chr8_random 943810 + 208344 208568 chr8 146364022 - 99514691 99514915 3842595
-38 152 152
-34
-
-chain 5263 chr8_random 943810 + 587464 592229 chr8 146364022 + 86573610 86746488 37343
-35 3283 168311
-47 1343 1343
-20 1 3086
-36
-
-chain 5194 chr8_random 943810 + 184072 184128 chr8 146364022 + 46838897 46838953 32965865
-56
-
-chain 5184 chr8_random 943810 + 329855 329911 chr8 146364022 - 99512600 99512656 19420929
-56
-
-chain 5176 chr8_random 943810 + 177599 177656 chr8 146364022 - 99506628 99506685 33029925
-57
-
-chain 5155 chr8_random 943810 + 281730 289038 chr8 146364022 + 46843205 46844537 960143
-32 6927 953
-200 103 101
-46
-
-chain 5093 chr8_random 943810 + 184617 184671 chr8 146364022 + 43793908 43793962 23494272
-54
-
-chain 5050 chr8_random 943810 + 326962 327016 chr8 146364022 - 102542496 102542550 23236949
-54
-
-chain 5030 chr8_random 943810 + 212164 212217 chr8 146364022 - 99524079 99524132 33461083
-53
-
-chain 5021 chr8_random 943810 + 265903 265956 chr8 146364022 + 46841267 46841320 33516233
-53
-
-chain 5010 chr8_random 943810 + 325697 333370 chr8 146364022 - 99519686 99521704 323579
-146 5416 1638
-176 1905 28
-30
-
-chain 4963 chr8_random 943810 + 195042 195095 chr8 146364022 - 99525006 99525059 2910708
-53
-
-chain 4923 chr8_random 943810 + 294759 294811 chr8 146364022 + 46846486 46846538 24481170
-52
-
-chain 4775 chr8_random 943810 + 300049 300108 chr8 146364022 - 99511357 99511416 2287019
-59
-
-chain 4729 chr8_random 943810 + 323590 341586 chr8 146364022 - 99508256 99511164 508733
-81 188 186
-45 5653 0
-76 6291 651
-50 2125 222
-31 36 36
-21 50 50
-1 57 52
-62 3121 1237
-18 5 4
-85
-
-chain 4516 chr8_random 943810 + 291820 291870 chr8 146364022 + 46839826 46839876 19135311
-50
-
-chain 4460 chr8_random 943810 + 340307 340812 chr8 146364022 - 99522970 99523472 2799007
-59 396 393
-50
-
-chain 4363 chr8_random 943810 + 169662 169718 chr8 146364022 - 99524410 99524466 15024078
-25 20 20
-11
-
-chain 4245 chr8_random 943810 + 323934 340633 chr8 146364022 - 102539490 102542980 824111
-57 5415 1637
-55 4265 507
-46 6509 840
-13 129 125
-132 10 10
-68
-
-chain 4191 chr8_random 943810 + 346770 346816 chr8 146364022 - 99523777 99523823 32415009
-46
-
-chain 4157 chr8_random 943810 + 182640 182685 chr8 146364022 + 46841541 46841586 34989719
-45
-
-chain 4075 chr8_random 943810 + 287206 294116 chr8 146364022 + 46853923 46857394 507901
-58 44 43
-3 6754 3316
-51
-
-chain 4035 chr8_random 943810 + 210210 231774 chr8 146364022 - 99509073 99511132 504053
-68 1 0
-87 1 0
-47 151 148
-33 3084 58
-60 3981 215
-31 2075 179
-62 11852 1040
-31
-
-chain 3902 chr8_random 943810 + 322746 322788 chr8 146364022 - 99511490 99511532 25070576
-42
-
-chain 3842 chr8_random 943810 + 326212 339029 chr8 146364022 - 99518333 99519833 259270
-47 312 308
-17 60 57
-117 12236 926
-28
-
-chain 3793 chr8_random 943810 + 191943 191984 chr8 146364022 + 43793349 43793390 19585042
-41
-
-chain 3728 chr8_random 943810 + 267941 270995 chr8 146364022 + 46845159 46846318 991534
-57 2323 433
-41 406 402
-51 140 139
-36
-
-chain 3715 chr8_random 943810 + 252408 255104 chr8 146364022 + 46840810 46841615 879027
-44 1 0
-30 2575 685
-46
-
-chain 3689 chr8_random 943810 + 281829 281916 chr8 146364022 + 46850779 46850864 2001274
-26 3 1
-58
-
-chain 3667 chr8_random 943810 + 254324 254368 chr8 146364022 + 46840842 46840884 6647423
-30 11 9
-3
-
-chain 3646 chr8_random 943810 + 267998 268037 chr8 146364022 + 46850823 46850862 21797624
-39
-
-chain 3562 chr8_random 943810 + 168212 168270 chr8 146364022 + 43793831 43793889 3070871
-58
-
-chain 3504 chr8_random 943810 + 293480 293517 chr8 146364022 + 46839611 46839648 25642059
-37
-
-chain 3471 chr8_random 943810 + 337522 337596 chr8 146364022 - 99523948 99524022 18137430
-74
-
-chain 3448 chr8_random 943810 + 276204 276644 chr8 146364022 + 46854559 46854996 1897606
-49 365 362
-26
-
-chain 3411 chr8_random 943810 + 253189 255402 chr8 146364022 + 46850929 46853124 621337
-27 1269 1253
-37 776 774
-2 49 49
-53
-
-chain 3373 chr8_random 943810 + 338130 338166 chr8 146364022 - 99513335 99513371 20995505
-36
-
-chain 3359 chr8_random 943810 + 165298 184945 chr8 146364022 + 43823972 43836890 282023
-56 2595 8459
-64 12771 2404
-3 8 8
-69 4024 1798
-57
-
-chain 3297 chr8_random 943810 + 194502 225687 chr8 146364022 - 102525468 102530377 366001
-70 4347 545
-64 92 91
-87 8182 1452
-36 9798 1128
-56 8421 1348
-32
-
-chain 3286 chr8_random 943810 + 278118 290566 chr8 146364022 + 43833036 43837583 504233
-53 11 9
-65 12260 4361
-59
-
-chain 3257 chr8_random 943810 + 218922 219219 chr8 146364022 - 99516581 99516875 4722847
-56 32 30
-58 32 31
-119
-
-chain 3241 chr8_random 943810 + 233589 233706 chr8 146364022 - 102539417 102539534 832166
-52 16 16
-49
-
-chain 3212 chr8_random 943810 + 266430 268559 chr8 146364022 + 46841788 46842035 1348744
-53 1890 10
-128 11 9
-47
-
-chain 3157 chr8_random 943810 + 327996 328036 chr8 146364022 - 99512626 99512665 16621225
-16 15 14
-9
-
-chain 3082 chr8_random 943810 + 310645 310683 chr8 146364022 - 99512541 99512579 16551162
-38
-
-chain 3062 chr8_random 943810 + 163933 165245 chr8 146364022 + 46851641 46852949 942341
-29 1223 1219
-60
-
-chain 3030 chr8_random 943810 + 262108 262298 chr8 146364022 + 43831228 43834818 1405601
-67 13 3413
-110
-
-chain 2982 chr8_random 943810 + 183568 183600 chr8 146364022 + 46840262 46840294 9991965
-32
-
-chain 2745 chr8_random 943810 + 335974 336003 chr8 146364022 - 99513082 99513111 33185960
-29
-
-chain 2672 chr8_random 943810 + 298503 298547 chr8 146364022 - 99522900 99522944 24221385
-44
-
-chain 2671 chr8_random 943810 + 332183 346560 chr8 146364022 - 102528996 102533910 187401
-51 6123 457
-105 6796 3008
-38 249 246
-57 891 885
-67
-
-chain 2639 chr8_random 943810 + 219413 219441 chr8 146364022 - 99507721 99507749 35294427
-28
-
-chain 2612 chr8_random 943810 + 200816 200846 chr8 146364022 - 99525102 99525132 4075609
-30
-
-chain 2604 chr8_random 943810 + 240329 240369 chr8 146364022 - 99522715 99522755 8959532
-40
-
-chain 2556 chr8_random 943810 + 216929 216957 chr8 146364022 - 99514612 99514640 10325210
-28
-
-chain 2552 chr8_random 943810 + 191384 191411 chr8 146364022 + 46840185 46840212 15340406
-27
-
-chain 2552 chr8_random 943810 + 304972 304999 chr8 146364022 - 99516251 99516278 22571486
-27
-
-chain 2523 chr8_random 943810 + 327142 327169 chr8 146364022 - 99524856 99524883 11689776
-27
-
-chain 2451 chr8_random 943810 + 317909 318170 chr8 146364022 - 99521638 99521896 1452880
-31 226 223
-4
-
-chain 2447 chr8_random 943810 + 313295 313321 chr8 146364022 - 99513300 99513326 34910154
-26
-
-chain 2433 chr8_random 943810 + 230135 233158 chr8 146364022 - 99507638 99508095 1270471
-81 73 73
-21 37 37
-40 18 18
-82 2643 77
-28
-
-chain 2394 chr8_random 943810 + 309803 310102 chr8 146364022 - 102570308 102570605 11245020
-97 185 183
-17
-
-chain 2370 chr8_random 943810 + 237880 237905 chr8 146364022 - 99520270 99520295 11943708
-25
-
-chain 2370 chr8_random 943810 + 302899 302924 chr8 146364022 - 99512327 99512352 35222469
-25
-
-chain 2330 chr8_random 943810 + 274710 274735 chr8 146364022 + 46843727 46843752 26272760
-25
-
-chain 2188 chr8_random 943810 + 303139 303300 chr8 146364022 - 99512566 99512727 1325340
-161
-
-chain 2164 chr8_random 943810 + 254246 254269 chr8 146364022 + 46840765 46840788 24904248
-23
-
-chain 2146 chr8_random 943810 + 166073 166100 chr8 146364022 + 43793293 43793320 16498497
-27
-
-chain 2129 chr8_random 943810 + 171463 171506 chr8 146364022 - 99524332 99524375 3948851
-43
-
-chain 2094 chr8_random 943810 + 256486 256530 chr8 146364022 + 46856070 46856114 4878843
-44
-
-chain 2067 chr8_random 943810 + 182380 182437 chr8 146364022 + 46850625 46850682 3805032
-57
-
-chain 2054 chr8_random 943810 + 318711 318733 chr8 146364022 - 99511225 99511247 10715405
-22
-
-chain 1964 chr8_random 943810 + 202805 202867 chr8 146364022 - 99509184 99509246 3143072
-62
-
-chain 1962 chr8_random 943810 + 187357 187601 chr8 146364022 + 46841788 46842031 9057308
-62 87 86
-95
-
-chain 1941 chr8_random 943810 + 278085 278118 chr8 146364022 + 46854559 46854592 1239137
-33
-
-chain 1922 chr8_random 943810 + 294361 294534 chr8 146364022 + 46849827 46850000 1057760
-173
-
-chain 1907 chr8_random 943810 + 166115 166177 chr8 146364022 + 46850070 46850132 2756260
-62
-
-chain 1904 chr8_random 943810 + 294565 294590 chr8 146364022 + 46846293 46846318 7797359
-25
-
-chain 1899 chr8_random 943810 + 239038 239062 chr8 146364022 - 99519559 99519583 3632092
-24
-
-chain 1874 chr8_random 943810 + 311858 316542 chr8 146364022 - 99523087 99524010 1127459
-40 4555 794
-89
-
-chain 1842 chr8_random 943810 + 208242 208344 chr8 146364022 - 99510852 99510954 1122309
-102
-
-chain 1826 chr8_random 943810 + 333370 333404 chr8 146364022 - 102528310 102528344 12860155
-34
-
-chain 1699 chr8_random 943810 + 189740 189801 chr8 146364022 + 43830083 43830143 11700756
-13 1 0
-47
-
-chain 1671 chr8_random 943810 + 586860 586891 chr8 146364022 - 59596972 59597003 79385
-31
-
-chain 1671 chr8_random 943810 + 582366 582405 chr8 146364022 + 86778164 86778203 135745
-39
-
-chain 1614 chr8_random 943810 + 174855 174917 chr8 146364022 - 102535142 102535204 7562660
-62
-
-chain 1604 chr8_random 943810 + 210485 210541 chr8 146364022 - 99516819 99516875 24689779
-56
-
-chain 1577 chr8_random 943810 + 165529 165568 chr8 146364022 + 43833540 43833579 5487018
-39
-
-chain 1529 chr8_random 943810 + 199844 199893 chr8 146364022 - 99524132 99524181 16599934
-49
-
-chain 1430 chr8_random 943810 + 204007 204051 chr8 146364022 - 102535667 102535711 2444362
-44
-
-chain 1384 chr8_random 943810 + 331973 334317 chr8 146364022 - 99510969 99511436 2459541
-88 2124 247
-132
-
-chain 1361 chr8_random 943810 + 178432 178456 chr8 146364022 + 43821398 43821422 13532386
-24
-
-chain 1349 chr8_random 943810 + 282101 282136 chr8 146364022 + 43834762 43834797 3301014
-35
-
-chain 1325 chr8_random 943810 + 330748 334904 chr8 146364022 - 99513486 99513886 3761248
-39 3999 243
-118
-
-chain 1299 chr8_random 943810 + 216700 216875 chr8 146364022 - 99512515 99512690 2121346
-175
-
-chain 1278 chr8_random 943810 + 275077 288204 chr8 146364022 + 46842223 46845574 199410
-48 13052 3276
-27
-
-chain 1258 chr8_random 943810 + 272883 272996 chr8 146364022 + 43835974 43836087 2232086
-113
-
-chain 1256 chr8_random 943810 + 324880 325008 chr8 146364022 - 99513272 99513400 5381670
-128
-
-chain 1237 chr8_random 943810 + 196535 196612 chr8 146364022 - 99507792 99507869 15310375
-77
-
-chain 1235 chr8_random 943810 + 284286 284429 chr8 146364022 + 46839806 46839949 2930992
-143
-
-chain 1191 chr8_random 943810 + 293574 293786 chr8 146364022 + 46839704 46839915 1788603
-62 1 0
-149
-
-chain 1161 chr8_random 943810 + 294116 294212 chr8 146364022 + 43829899 43829995 1318655
-4 39 39
-53
-
-chain 1160 chr8_random 943810 + 183897 184027 chr8 146364022 + 43793197 43793327 2884372
-130
-
-chain 1130 chr8_random 943810 + 241032 308421 chr8 146364022 - 102539359 102541234 585349
-125 60736 871
-57 75 74
-53 2150 266
-105 4036 272
-52
-
-chain 1119 chr8_random 943810 + 229190 229281 chr8 146364022 - 99508572 99508663 1537143
-73 17 17
-1
-
-chain 1018 chr8_random 943810 + 315759 315867 chr8 146364022 - 102570622 102570730 1907772
-108
-
-chain 1013 chr8_random 943810 + 274298 274330 chr8 146364022 + 46839580 46839612 3252033
-32
-
-chain 968 chr8_random 943810 + 209695 209807 chr8 146364022 - 102537590 102537702 976902
-112
-
-chain 955 chr8_random 943810 + 319692 319755 chr8 146364022 - 102541225 102541288 3356813
-63
-
-chain 920 chr8_random 943810 + 258623 258775 chr8 146364022 + 46839508 46839659 980562
-59 25 24
-68
-
-chain 912 chr8_random 943810 + 192332 192490 chr8 146364022 + 46839260 46839417 3759652
-73 1 0
-84
-
-chain 891 chr8_random 943810 + 282553 282623 chr8 146364022 + 46843688 46843758 5243973
-70
-
-chain 873 chr8_random 943810 + 329911 329999 chr8 146364022 - 99523866 99523954 8492095
-88
-
-chain 847 chr8_random 943810 + 202393 202429 chr8 146364022 - 99516251 99516287 1768031
-36
-
-chain 808 chr8_random 943810 + 208103 208146 chr8 146364022 - 99506642 99506685 12166401
-43
-
-chain 772 chr8_random 943810 + 215530 215581 chr8 146364022 - 102536642 102536693 4621463
-51
-
-chain 770 chr8_random 943810 + 298794 298927 chr8 146364022 - 102529795 102529928 1833110
-38 53 53
-42
-
-chain 762 chr8_random 943810 + 250305 250368 chr8 146364022 + 43793197 43793260 2202736
-63
-
-chain 756 chr8_random 943810 + 175550 175595 chr8 146364022 - 102569149 102569194 15473865
-45
-
-chain 725 chr8_random 943810 + 227416 227458 chr8 146364022 - 102569147 102569189 2128584
-42
-
-chain 715 chr8_random 943810 + 237975 238010 chr8 146364022 - 99524101 99524136 9984625
-35
-
-chain 713 chr8_random 943810 + 336818 336983 chr8 146364022 - 102542943 102543107 12287033
-51 32 31
-82
-
-chain 659 chr8_random 943810 + 178382 178432 chr8 146364022 + 43825088 43825138 1126561
-50
-
-chain 630 chr8_random 943810 + 343296 343350 chr8 146364022 - 102532544 102532598 1087222
-54
-
-chain 622 chr8_random 943810 + 284683 284767 chr8 146364022 + 46845804 46845888 4299331
-84
-
-chain 618 chr8_random 943810 + 240201 240253 chr8 146364022 - 99520719 99520771 5790991
-52
-
-chain 609 chr8_random 943810 + 323290 333340 chr8 146364022 - 99511696 99512332 2037608
-32 1962 77
-33 7985 456
-38
-
-chain 511 chr8_random 943810 + 216312 216456 chr8 146364022 - 99508390 99508534 2116227
-83 23 23
-38
-
-chain 484 chr8_random 943810 + 208068 208103 chr8 146364022 - 102535970 102536005 2214348
-35
-
-chain 473 chr8_random 943810 + 323389 323449 chr8 146364022 - 102540821 102540881 1734527
-60
-
-chain 468 chr8_random 943810 + 200282 202177 chr8 146364022 - 99515228 99517906 493558
-37 1827 2610
-31
-
-chain 468 chr8_random 943810 + 309496 309560 chr8 146364022 - 99509535 99509598 902510
-13 1 0
-50
-
-chain 464 chr8_random 943810 + 238361 238411 chr8 146364022 - 102570011 102570061 2549299
-50
-
-chain 406 chr8_random 943810 + 336390 336452 chr8 146364022 - 99513496 99513558 3227798
-62
-
-chain 400 chr8_random 943810 + 198171 198198 chr8 146364022 - 99524348 99524375 19170252
-27
-
-chain 389 chr8_random 943810 + 239467 298039 chr8 146364022 - 99516251 99516834 914933
-36 19 19
-76 58363 374
-78
-
-chain 383 chr8_random 943810 + 268230 268298 chr8 146364022 + 43829500 43829568 7647204
-68
-
-chain 371 chr8_random 943810 + 289553 289594 chr8 146364022 + 43829105 43829146 1419836
-41
-
-chain 325 chr8_random 943810 + 171359 194889 chr8 146364022 - 102534570 102537063 1177879
-33 23458 2421
-39
-
-chain 321 chr8_random 943810 + 245198 245253 chr8 146364022 + 46850481 46850536 16403329
-55
-
-chain 316 chr8_random 943810 + 336558 336619 chr8 146364022 - 99513661 99513722 9588463
-61
-
-chain 316 chr8_random 943810 + 215939 215982 chr8 146364022 - 102570362 102570405 11794790
-43
-
-chain 307 chr8_random 943810 + 268331 268373 chr8 146364022 + 46843677 46843719 14936951
-42
-
-chain 302 chr8_random 943810 + 246654 246683 chr8 146364022 + 46846317 46846346 2597963
-29
-
-chain 277 chr8_random 943810 + 330681 336249 chr8 146364022 - 99513081 99513355 13257215
-37 5476 182
-55
-
-chain 224 chr8_random 943810 + 233016 233053 chr8 146364022 - 102535110 102535147 5909193
-37
-
-chain 219 chr8_random 943810 + 216875 216929 chr8 146364022 - 99508952 99509006 1250703
-54
-
-chain 217 chr8_random 943810 + 192086 192136 chr8 146364022 + 43793491 43793541 12267504
-50
-
-chain 176 chr8_random 943810 + 230251 230289 chr8 146364022 - 99522702 99522740 26486914
-38
-
-chain 171 chr8_random 943810 + 301863 301893 chr8 146364022 - 99524375 99524405 2607431
-30
-
-chain 128 chr8_random 943810 + 303580 303689 chr8 146364022 - 102542031 102542140 1606173
-109
-
-chain 117 chr8_random 943810 + 213542 213590 chr8 146364022 - 102569848 102569896 24793283
-48
-
-chain 107 chr8_random 943810 + 265719 265758 chr8 146364022 + 43793691 43793730 32387625
-39
-
-chain 103 chr8_random 943810 + 302985 303114 chr8 146364022 - 99516149 99516278 2070053
-129
-
-chain 102 chr8_random 943810 + 266041 266087 chr8 146364022 + 43794012 43794058 15664471
-46
-
-chain 87 chr8_random 943810 + 266314 266347 chr8 146364022 + 46839806 46839839 33038660
-33
-
-chain 11336435868 chr9 140273252 + 0 140273252 chr9 141213431 + 10000 141153431 13
-189075 1 1
-14 2 2
-39464594 50000 50000
-261110 50000 50000
-208233 50000 50000
-142805 50000 50000
-464507 50000 50000
-152873 50000 50000
-172579 50000 50000
-799200 0 4
-398958 50000 50000
-549743 50000 100000
-632871 50000 50000
-680077 50000 50000
-181647 50000 50000
-291910 50000 100000
-465318 50000 50000
-350909 50000 50000
-194609 50000 100000
-370335 0 176
-128583 50000 100000
-157546 18100000 18150000
-450681 50000 50000
-223855 50000 50000
-162441 50000 50000
-159539 50000 50000
-199148 50000 50000
-194491 50000 100000
-158462 50000 150000
-471702 50000 150000
-376183 50000 150000
-174765 50000 150000
-289439 50000 50000
-682157 50000 50000
-158187 50000 100000
-187806 50000 50000
-178933 50000 100000
-21507948 50000 100000
-85380 50000 150000
-834971 1 0
-39559293 100000 150000
-3818133 200000 50000
-2075804 30000 50000
-1936434
-
-chain 19053295 chr9_random 1146434 + 140076 853151 chr9 141213431 + 43822338 44639038 145
-1110 1 1
-47 1 0
-215 1 0
-468 9 9
-1934 0 1
-953 14319 26012
-970 11 11
-117 1 1
-57 1 1
-127 0 1
-1035 1 1
-123 1 1
-1418 29455 36221
-965 1 1
-33 5 5
-816 1 1
-38 1 1
-87 8 8
-588 6 6
-286 13 13
-967 6 6
-911 125 14857
-67 1 1
-18 1 1
-472 11 11
-269 7 0
-869 1 1
-23 1 1
-240 1 0
-456 1 1
-96 1 1
-247 22 22
-225 1 1
-13 0 4
-40 1 1
-211 13 29
-582 1 1
-22 4 0
-453 1 1
-37 1 1
-251 11 11
-87 1 1
-49 1 1
-95 11 11
-149 1 1
-31 1 1
-205 5 0
-1090 5 5
-89 1 1
-74 14 14
-83 1 1
-51 1 1
-594 1 3
-462 85 85
-635 50621 3293
-88 0 1
-148 18 18
-428 2 0
-5 2 0
-19 0 1
-43 1 1
-529 1 6
-77 1 1
-31 1 1
-39 0 5
-124 15 15
-51 1 1
-80 1 1
-103 1 1
-77 1 1
-147 1 1
-72 1 1
-95 10 10
-657 1 1
-57 1 1
-69 1 1
-32 1 1
-587 4 4
-298 14 14
-1505 10 8
-560 0 4
-171 1 1
-44 1 1
-211 1 1
-22 1 1
-649 1 1
-42 0 2
-96 8 8
-45 1 0
-195 402195 519766
-38949 0 176
-45847 1 0
-46124 1 0
-3889 0 1
-52224
-
-chain 10363290 chr9_random 1146434 + 903151 1075657 chr9_gl000199_random 169874 + 0 130000 308
-35955 882 0
-20 1020 0
-32 3062 0
-106 14 15
-100 9 7
-334 16 18
-121 1 0
-84 3469 73
-179 1193 0
-255 3064 0
-235 844 167
-325 2720 0
-211 25 25
-216 3639 67
-100 681 1
-58 5271 0
-71 36 36
-155 11817 855
-1017 1 0
-10599 1 1
-42 0 1
-8519 112 112
-9882 0 680
-263 8 8
-56 30 30
-206 865 183
-1131 1 0
-12309 16295 0
-37 2637 0
-463 15 15
-739 1 1
-64 1 1
-2323 1 0
-743 202 202
-245 2 0
-10307 33 32
-8496 15 15
-1065 3 3
-49 1 1
-67 1 1
-24 1 1
-150 15 15
-81 1112 7412
-104 5 5
-160 48 48
-156 31 31
-109 29 29
-32 0 337
-118 36 36
-108 21 21
-69 163 165
-105 29 29
-255 32 32
-176 46 46
-97 54 54
-158 110 5213
-54 5 5
-61 1 0
-12 66 578
-49 0 1
-256 0 1
-5 1 0
-110 0 507
-39 59 227
-44 1 0
-5 1 2
-13 268 611
-32 340 0
-2169 5 5
-109
-
-chain 8496666 chr9_random 1146434 + 526031 616031 chr9_gl000198_random 90085 + 0 90000 391
-90000
-
-chain 3482851 chr9_random 1146434 + 0 36148 chr9_gl000201_random 36148 + 0 36148 837
-36148
-
-chain 3114479 chr9_random 1146434 + 350153 383343 chr7 159138663 + 58020084 58054331 923
-5741 0 1
-5176 1 1
-36 1 1
-8401 0 3
-180 1 0
-1283 1 371
-2015 11 695
-10343
-
-chain 2652717 chr9_random 1146434 + 939453 971857 chr9_gl000199_random 169874 + 50544 169869 966
-78 104 103
-57 43 43
-41 0 1193
-212 20 20
-112 51 51
-93 1 0
-763 32 32
-929 0 85729
-2133 785 785
-1551 1 1
-38 0 1
-29 1 1
-1849 179 179
-1081 14 14
-98 255 255
-3064 235 235
-844 325 325
-2000 1 1
-55 1 1
-663 211 211
-25 216 216
-3639 100 100
-681 58 58
-5271 71 71
-36 155 155
-4203
-
-chain 864673 chr9_random 1146434 + 1126594 1146123 chr9 141213431 - 1097613 1113419 4959
-1953 6 5
-978 2409 6373
-1991 1 1
-30 1 1
-1102 7741 55
-57 1 1
-3259
-
-chain 850211 chr9_random 1146434 + 1025598 1042157 chr9_gl000199_random 169874 + 85137 125159 1202
-223 15 15
-69 106 782
-56 4 4
-103 0 1190
-57 51 51
-154 11 11
-103 0 1190
-303 94 5704
-122 20 700
-283 11 11
-564 0 6798
-68 31 31
-85 0 1
-80 48 48
-422 49 50
-604 27 3091
-147 0 4594
-563 468 470
-104 1 1
-65 1 1
-786 1 1
-26 4 4
-3436 346 0
-2356 158 158
-2985 37 37
-170 167 170
-910 11 11
-54
-
-chain 769263 chr9_random 1146434 + 86461 232520 chr9 141213431 + 40031497 40507253 306
-1287 1 1
-39 9090 8469
-1482 3 0
-72 22972 39210
-845 1 5
-1628 100 33581
-19 1 1
-708 1 1
-40 1 1
-1672 2596 163229
-3012 1 1
-27 1 0
-759 0 1
-98 72164 49914
-85 17764 159979
-3474 1 1
-50 1 1
-6064
-
-chain 759449 chr9_random 1146434 + 205961 214049 chr9 141213431 + 40301888 40309971 6546
-2149 0 1
-2715 38 32
-3186
-
-chain 584316 chr9_random 1146434 + 1135427 1141773 chr9 141213431 + 140095418 140108346 9081
-578 0 1
-958 0 1
-3002 120 6700
-1688
-
-chain 406492 chr9_random 1146434 + 174973 187473 chr9 141213431 - 97329171 97382324 1352
-1045 1 0
-610 3 3
-25 1 1
-707 0 1
-949 1 0
-476 1 1
-37 0 2
-115 22 0
-99 2 0
-19 0 1
-85 84 84
-391 0 2
-2020 102 40820
-178 0 5
-70 1 1
-108 1 0
-1683 56 22
-203 4 0
-53 0 3
-1920 1 0
-25 15 0
-171 0 4
-991 1 0
-102 1 1
-39 1 0
-81
-
-chain 392431 chr9_random 1146434 + 102229 150933 chr9 141213431 - 100800050 101111299 1649
-1200 31 31
-61 100 87
-1550 13066 115954
-174 1 7
-2845 28138 189099
-40 1462 165
-36
-
-chain 384690 chr9_random 1146434 + 98535 256322 chr9 141213431 - 100787713 101169878 613
-1160 1 0
-743 100 2055
-1590 33793 2374
-3943 1 0
-110 10986 2654
-28 3892 11
-65 38 37
-101 8010 603
-1627 0 1
-4154 127 18597
-1903 17 17
-1098 1 0
-907 16 6
-635 1 0
-110 11 10
-1170 39276 55950
-254 1 1
-16 1 1
-222 1 1
-23 0 3
-11 1 1
-963 0 1
-1311 1 1
-22 1 1
-1083 0 2
-4770 9790 219711
-142 1 1
-35 1 1
-191 1 1
-48 1 1
-4295 1 0
-1323 1 1
-26 1 0
-2991 1 0
-1653 100 28511
-184 1 1
-25 1 1
-2332 2 0
-2424 1 1
-18 1 1
-1612 0 2
-1973 2 0
-4314
-
-chain 222862 chr9_random 1146434 + 974475 976909 chr9_gl000199_random 169874 - 29206 35723 496317
-103 0 512
-103 0 2379
-1951 0 1192
-277
-
-chain 216950 chr9_random 1146434 + 179171 191499 chr9 141213431 - 75591738 75613431 4354
-84 8327 17685
-315 1 1
-43 1 1
-565 1 1
-45 1 1
-144 1 1
-47 3 3
-216 4 8
-856 15 15
-173 1 1
-23 0 1
-306 1 1
-34 1 2
-855 1 1
-41 1 1
-59 0 1
-60 1 1
-46 1 1
-55
-
-chain 213582 chr9_random 1146434 + 1129631 1131840 chr9 141213431 - 1091833 1094042 537694
-2209
-
-chain 165378 chr9_random 1146434 + 971957 973731 chrX 155270560 + 21244335 21246110 770883
-1088 0 1
-111 1 1
-46 3 3
-525
-
-chain 132596 chr9_random 1146434 + 92033 271291 chr9 141213431 - 75460140 75627580 890
-687 15 5
-714 42447 12782
-26 11947 6649
-27 11 12
-38 1490 2
-104 2 0
-98 117515 142147
-548 14 14
-760 1 1
-15 5 5
-244 0 8
-225 1 1
-25 1 1
-184 1 1
-24 1 1
-112 1 1
-49 1 1
-657 0 4
-26 1 1
-142 1 1
-117 1 1
-521 1 1
-30 1 1
-427
-
-chain 126182 chr9_random 1146434 + 264182 265594 chr9 141213431 + 41417376 41418784 8289
-408 11 11
-453 3 0
-470 1 0
-66
-
-chain 121265 chr9_random 1146434 + 153981 183865 chr9 141213431 + 40369543 40485128 5651
-820 1 0
-80 65 65
-38 101 101
-1814 1 1
-19 1 1
-2113 24775 110477
-56
-
-chain 112452 chr9_random 1146434 + 977951 979143 chr9 141213431 + 41554070 41555262 1142654
-1192
-
-chain 111666 chr9_random 1146434 + 115028 116206 chr9 141213431 + 38976673 38977851 1144814
-1178
-
-chain 91839 chr9_random 1146434 + 95026 96000 chr9 141213431 - 97340505 97341479 1389514
-974
-
-chain 86695 chr9_random 1146434 + 89274 94894 chr9 141213431 + 40421854 40482922 755289
-656 0 1
-294 1 0
-357 1 1
-58 1 1
-181 2726 58174
-1345
-
-chain 85848 chr9_random 1146434 + 116324 118085 chr9 141213431 + 40126032 40127795 187229
-1300 0 2
-247 1 1
-31 1 1
-181
-
-chain 83527 chr9_random 1146434 + 105271 111078 chr9 141213431 + 43838264 43842306 8535
-1025 1 1
-44 1 1
-374 2077 318
-609 3 0
-643 18 19
-121 15 16
-135 5 0
-736
-
-chain 82351 chr9_random 1146434 + 265594 267154 chr9 141213431 - 97363431 97364991 1727
-341 2 2
-20 1 1
-738 1 1
-34 1 1
-206 1 1
-40 1 1
-174
-
-chain 74906 chr9_random 1146434 + 107880 108681 chr9 141213431 + 40288016 40288817 1344818
-46 1 0
-553 0 1
-201
-
-chain 73427 chr9_random 1146434 + 106816 115028 chr9 141213431 - 93902441 93905998 1707
-229 0 1
-500 19 19
-145 5760 1098
-49 0 1
-9 0 1
-188 1 1
-43 1 1
-243 1 1
-41 1 1
-206 1 1
-25 1 1
-443 0 1
-171 0 3
-135
-
-chain 72594 chr9_random 1146434 + 977068 977842 chr9 141213431 - 99740263 99741035 1743552
-651 1 0
-45 1 0
-76
-
-chain 68316 chr9_random 1146434 + 87923 91873 chr9 141213431 - 101134923 101183249 1049825
-372 0 1
-115 1 1
-37 1 1
-725 1749 46124
-950
-
-chain 61838 chr9_random 1146434 + 1042331 1042988 chr9_gl000199_random 169874 - 40496 41153 2045151
-657
-
-chain 55013 chr9_random 1146434 + 1075993 1076574 chr2 243199373 - 242829160 242829741 2308873
-581
-
-chain 54512 chr9_random 1146434 + 144930 149178 chr9 141213431 - 75605255 75609502 8620
-250 1 1
-26 1 1
-262 14 19
-1397 10 9
-876 1 0
-98 79 75
-65 1 1
-772 1 1
-31 1 1
-235 1 1
-74 1 1
-51
-
-chain 52053 chr9_random 1146434 + 149316 153855 chr9 141213431 + 40375457 40380000 99648
-79 244 244
-76 2437 2440
-75 10 10
-247 0 1
-19 1304 1304
-48
-
-chain 51431 chr9_random 1146434 + 126523 128919 chr9 141213431 - 101152632 101155028 6098
-2396
-
-chain 48062 chr9_random 1146434 + 390785 391322 chr5 180915260 - 163073999 163074536 2667488
-241 1 1
-201 3 3
-91
-
-chain 43629 chr9_random 1146434 + 1073062 1075987 chr9_gl000199_random 169874 + 35053 37976 298767
-312 2456 2456
-1 2 0
-78 21 21
-55
-
-chain 37453 chr9_random 1146434 + 1024767 1030521 chr9_gl000199_random 169874 + 88172 123905 8301
-52 0 3738
-40 1994 12406
-94 1068 11110
-31 165 2038
-48 1933 5847
-329
-
-chain 33524 chr9_random 1146434 + 133017 135796 chr9 141213431 + 39163384 39166153 115831
-53 1 1
-307 5 4
-44 1 1
-406 1 1
-21 5 0
-43 1 1
-177 1 1
-25 1 0
-31 1 1
-137 5 5
-20 1 1
-52 1 1
-27 1 1
-233 1 1
-20 1 1
-394 3 0
-363 1 1
-24 1 1
-370
-
-chain 29196 chr9_random 1146434 + 343146 344485 chr3 198022430 + 156000638 156001989 5034584
-50 1 0
-56 1 1
-104 128 140
-64 838 839
-97
-
-chain 28265 chr9_random 1146434 + 96095 96747 chr9 141213431 - 93903474 93904131 1828707
-74 0 10
-511 4 0
-47 1 0
-15
-
-chain 26156 chr9_random 1146434 + 111189 113362 chr9 141213431 - 102220148 102222323 47568
-1400 0 1
-94 5 6
-674
-
-chain 25868 chr9_random 1146434 + 149715 153807 chr9 141213431 - 93950637 93954729 91748
-181 1 1
-57 1 1
-353 15 15
-330 1 0
-22 1 1
-220 93 93
-114 0 17
-104 9 9
-290 2 0
-293 1 1
-20 1 1
-328 351 343
-127 1 1
-76 1 1
-331 4 0
-52 1 1
-17 1 1
-106 5 0
-146 1 1
-38 0 3
-7 1 0
-116 3 3
-16 1 1
-168 0 1
-85
-
-chain 25003 chr9_random 1146434 + 1069304 1075830 chr9_gl000199_random 169874 + 56286 59580 21268
-305 7 7
-77 487 487
-25 288 288
-36 198 198
-163 105 105
-29 463 463
-46 1256 67
-82 36 36
-95 32 32
-28 2595 552
-103 9 9
-61
-
-chain 23281 chr9_random 1146434 + 1028681 1035309 chr9_gl000199_random 169874 + 97567 114227 7110
-30 1360 6799
-121 342 0
-5 4424 9363
-103 237 233
-6
-
-chain 21805 chr9_random 1146434 + 1135081 1135321 chr9 141213431 + 140101239 140101479 9135145
-197 1 1
-42
-
-chain 21533 chr9_random 1146434 + 1010735 1043373 chr9_gl000199_random 169874 + 61213 69988 6310
-337 14018 4703
-439 42 42
-27 307 307
-106 220 220
-51 16938 2390
-153
-
-chain 19014 chr9_random 1146434 + 335566 335883 chr16 90354753 - 56512811 56513131 11268597
-170 97 100
-50
-
-chain 18803 chr9_random 1146434 + 86148 86348 chr9 141213431 - 100705477 100705677 11441237
-200
-
-chain 13349 chr9_random 1146434 + 1068589 1070018 chr9_gl000199_random 169874 + 79052 79803 7749
-23 14 14
-253 37 37
-60 717 39
-8 269 269
-48
-
-chain 13149 chr9_random 1146434 + 410938 411078 chr8 146364022 + 38639711 38639851 17290853
-140
-
-chain 12972 chr9_random 1146434 + 332343 332481 chr7 159138663 + 61759398 61759536 17535033
-138
-
-chain 12821 chr9_random 1146434 + 388858 389014 chr15 102531392 + 80798356 80798512 17757829
-81 12 12
-63
-
-chain 11442 chr9_random 1146434 + 388166 388417 chr12 133851895 + 34836761 34837526 19956621
-81 109 623
-61
-
-chain 11149 chr9_random 1146434 + 343358 343713 chr3 198022430 - 62479553 62479920 5356830
-1 103 115
-24 134 134
-93
-
-chain 11085 chr9_random 1146434 + 468603 468722 chr9 141213431 + 42720405 42720524 20596057
-119
-
-chain 9550 chr9_random 1146434 + 389696 390760 chrX 155270560 + 61752907 61753125 23891795
-65 939 93
-60
-
-chain 9178 chr9_random 1146434 + 345818 345932 chr16 90354753 + 32819577 32819691 24666411
-52 7 7
-55
-
-chain 9128 chr9_random 1146434 + 321692 322933 chr7 159138663 + 61799163 61799701 24755828
-61 1115 412
-65
-
-chain 9086 chr9_random 1146434 + 338884 339289 chr16 90354753 + 32789437 32789842 24819157
-53 289 289
-63
-
-chain 9023 chr9_random 1146434 + 387021 388166 chr7 159138663 + 61404533 61405164 23790101
-52 1085 571
-8
-
-chain 7872 chr9_random 1146434 + 1069035 1072121 chr9_gl000199_random 169874 + 119465 157584 536281
-72 46 46
-97 2835 37868
-36
-
-chain 7579 chr9_random 1146434 + 402601 403961 chr3 198022430 - 107545066 107546932 27123369
-31 1026 0
-52 201 1733
-50
-
-chain 7458 chr9_random 1146434 + 343360 343449 chr6 171115067 + 69499143 69499232 6836024
-89
-
-chain 6713 chr9_random 1146434 + 425056 425127 chr16 90354753 + 46455806 46455877 28826250
-71
-
-chain 6541 chr9_random 1146434 + 468921 468991 chr7 159138663 + 61361207 61361277 29216706
-70
-
-chain 6486 chr9_random 1146434 + 330636 330705 chr10 135534747 + 42383267 42383336 29375264
-69
-
-chain 6456 chr9_random 1146434 + 411427 412083 chr11 135006516 + 48877623 48879132 29439180
-48 554 1407
-54
-
-chain 6295 chr9_random 1146434 + 404771 404838 chr8 146364022 + 43770407 43770474 29850106
-67
-
-chain 6049 chr9_random 1146434 + 414120 414184 chr7 159138663 - 101095351 101095415 30492982
-64
-
-chain 6040 chr9_random 1146434 + 465963 466027 chr6 171115067 + 83274875 83274939 30512451
-64
-
-chain 5969 chr9_random 1146434 + 389015 389089 chrY 59373566 - 43064540 43064609 20514560
-61 5 0
-8
-
-chain 5636 chr9_random 1146434 + 406636 407740 chr8 146364022 + 43770397 43770476 31630565
-28 1025 0
-51
-
-chain 5631 chr9_random 1146434 + 426803 426863 chr10 135534747 + 42387748 42387808 31636152
-60
-
-chain 5540 chr9_random 1146434 + 419067 419126 chr7 159138663 + 61079182 61079241 31906304
-59
-
-chain 5476 chr9_random 1146434 + 398987 399045 chr12 133851895 + 34839855 34839913 32105830
-58
-
-chain 5376 chr9_random 1146434 + 415322 415379 chr11 135006516 - 86268315 86268372 32415872
-57
-
-chain 5358 chr9_random 1146434 + 413960 414017 chrY 59373566 - 49305277 49305334 32458256
-57
-
-chain 5349 chr9_random 1146434 + 411179 411236 chr7 159138663 + 91218545 91218602 32466470
-57
-
-chain 5349 chr9_random 1146434 + 417041 417098 chr11 135006516 - 84295010 84295067 32466776
-57
-
-chain 5305 chr9_random 1146434 + 979284 979471 chr9_gl000199_random 169874 + 100510 100697 1541
-187
-
-chain 5294 chr9_random 1146434 + 393589 393645 chr19_gl000208_random 92689 - 78786 78842 32648958
-56
-
-chain 5285 chr9_random 1146434 + 407829 407885 chr16 90354753 + 34022252 34022308 32672407
-56
-
-chain 5248 chr9_random 1146434 + 345095 345150 chr3 198022430 + 72765342 72765397 32777800
-55
-
-chain 5194 chr9_random 1146434 + 325928 325983 chr16 90354753 + 46454212 46454267 32965981
-55
-
-chain 5076 chr9_random 1146434 + 385523 385577 chr9 141213431 - 74211269 74211323 33342253
-54
-
-chain 5012 chr9_random 1146434 + 398477 398530 chr3 198022430 - 107545544 107545597 33565319
-53
-
-chain 4985 chr9_random 1146434 + 417987 418040 chr8 146364022 + 43776134 43776187 33649135
-53
-
-chain 4821 chr9_random 1146434 + 397137 397188 chrX 155270560 + 61817502 61817553 34214385
-51
-
-chain 4794 chr9_random 1146434 + 414576 414627 chr11 135006516 + 50778923 50778974 34325073
-51
-
-chain 4794 chr9_random 1146434 + 397714 397765 chr19_gl000208_random 92689 - 71810 71861 34325191
-51
-
-chain 4730 chr9_random 1146434 + 411917 411967 chr21 48129895 - 33764186 33764236 34527656
-50
-
-chain 4709 chr9_random 1146434 + 107713 107880 chr9 141213431 + 40326898 40327067 460940
-64 0 2
-103
-
-chain 4703 chr9_random 1146434 + 396620 396670 chr11 135006516 + 50701175 50701225 34648839
-50
-
-chain 4594 chr9_random 1146434 + 460317 460366 chr1 249250621 + 72586197 72586246 34758860
-49
-
-chain 4154 chr9_random 1146434 + 389765 389825 chrX 155270560 + 61859291 61859351 24051909
-60
-
-chain 4125 chr9_random 1146434 + 1047887 1048034 chr9_gl000199_random 169874 + 145761 145908 266403
-21 18 18
-108
-
-chain 4032 chr9_random 1146434 + 1010207 1010501 chr9_gl000199_random 169874 + 46738 47032 105345
-133 51 51
-110
-
-chain 3744 chr9_random 1146434 + 974418 974475 chr9_gl000199_random 169874 - 111819 111876 792102
-57
-
-chain 3426 chr9_random 1146434 + 939387 939437 chr9_gl000199_random 169874 + 161370 161420 23133078
-50
-
-chain 3397 chr9_random 1146434 + 1069115 1069304 chr9_gl000199_random 169874 + 57287 57476 721888
-38 97 97
-54
-
-chain 3297 chr9_random 1146434 + 1037665 1037723 chr9_gl000199_random 169874 + 108413 108471 1099981
-5 32 32
-21
-
-chain 2900 chr9_random 1146434 + 210827 210859 chr9 141213431 + 43889710 43889742 6957
-32
-
-chain 2688 chr9_random 1146434 + 1042157 1042279 chr9_gl000199_random 169874 + 112227 112349 8300
-65 9 9
-48
-
-chain 2652 chr9_random 1146434 + 999650 1043482 chr9_gl000199_random 169874 + 41812 46278 8409
-112 43376 4009
-54 0 1
-28 153 153
-109
-
-chain 2438 chr9_random 1146434 + 1025529 1025571 chr9_gl000199_random 169874 + 134052 134094 269933
-42
-
-chain 2404 chr9_random 1146434 + 153855 153881 chr9 141213431 + 40071265 40071291 103174
-26
-
-chain 2298 chr9_random 1146434 + 1010672 1010735 chr9_gl000199_random 169874 + 66766 66829 8935
-63
-
-chain 2164 chr9_random 1146434 + 1010368 1010391 chr9 141213431 - 71502272 71502295 32168220
-23
-
-chain 2160 chr9_random 1146434 + 388789 388840 chr7 159138663 - 101569537 101569588 23945255
-51
-
-chain 2026 chr9_random 1146434 + 343746 343819 chr10 135534747 + 18324071 18324144 14357746
-73
-
-chain 1834 chr9_random 1146434 + 1010501 1010672 chr9_gl000199_random 169874 + 60299 60470 7461
-171
-
-chain 1808 chr9_random 1146434 + 391322 391360 chr7 159138663 - 47529927 47529965 6263864
-38
-
-chain 1777 chr9_random 1146434 + 343550 344817 chr22 51304566 + 35077657 35078810 5733588
-48 1167 1053
-52
-
-chain 1529 chr9_random 1146434 + 263922 264091 chr9 141213431 + 65673675 65673833 515
-62 10 0
-17 1 0
-14 2 2
-63
-
-chain 1325 chr9_random 1146434 + 1037723 1037780 chr9_gl000199_random 169874 + 96057 96114 245438
-57
-
-chain 1237 chr9_random 1146434 + 1024624 1024767 chr9_gl000199_random 169874 + 49580 49723 8604
-143
-
-chain 1217 chr9_random 1146434 + 1071842 1072151 chr9_gl000199_random 169874 + 48108 48417 165690
-30 6 6
-74 169 169
-30
-
-chain 897 chr9_random 1146434 + 1035274 1035303 chr9_gl000199_random 169874 + 108574 108603 711169
-29
-
-chain 881 chr9_random 1146434 + 345308 345393 chrX 155270560 - 77826120 77826205 8910963
-85
-
-chain 812 chr9_random 1146434 + 344331 344387 chr9 141213431 + 18649465 18649521 20542621
-56
-
-chain 538 chr9_random 1146434 + 1029334 1029359 chr9_gl000199_random 169874 + 75943 75968 9317
-25
-
-chain 480 chr9_random 1146434 + 344828 344880 chr4 191154276 - 62643619 62643671 15050009
-52
-
-chain 461 chr9_random 1146434 + 96747 96777 chr9 141213431 + 38980922 38980952 1279
-30
-
-chain 364 chr9_random 1146434 + 1025018 1025062 chr9_gl000199_random 169874 + 64308 64352 115390
-44
-
-chain 296 chr9_random 1146434 + 1009971 1010001 chr9_gl000199_random 169874 + 44634 44664 18919
-30
-
-chain 288 chr9_random 1146434 + 974120 974172 chr9_gl000199_random 169874 + 44920 44972 1936043
-52
-
-chain 260 chr9_random 1146434 + 394227 394279 chr11 135006516 + 50701175 50701227 28339537
-52
-
-chain 210 chr9_random 1146434 + 1025062 1025090 chr9_gl000199_random 169874 + 71670 71699 216729
-6 0 1
-22
-
-chain 209 chr9_random 1146434 + 388033 388083 chr11 135006516 - 84294197 84294247 27927923
-50
-
-chain 152 chr9_random 1146434 + 393023 393074 chr20 63025520 + 26259164 26259215 28112557
-51
-
-chain 86 chr9_random 1146434 + 405210 405252 chr3 198022430 - 107550280 107550322 32195393
-42
-
-chain 79 chr9_random 1146434 + 392892 392941 chr11 135006516 + 50661000 50661049 27948217
-49
-
-chain 1574309 chrM 16571 + 0 16571 chrM 16571 + 0 16571 1567
-16571
-
-chain 14267288654 chrX 154913754 + 0 154913754 chrX 155270560 + 60000 155260560 8
-34821 50000 50000
-86563 30000 50000
-766173 50000 50000
-36556 50000 50000
-80121 90000 50000
-754004 100000 50000
-5505644 0 50000
-3064785 0 50079
-26309510 25000 50000
-201175 0 8
-7417 2 0
-53136 0 8
-3076 12 0
-21092 2 0
-60831 0 2
-57728 20 0
-54336 1 0
-31676 4 0
-9986 0 4
-12109 4 0
-11227342 2000 0
-354815 50000 50000
-77401 1 1
-17 1 1
-94 3 0
-266 10 10
-113 1 1
-21 1 1
-5401 5 0
-4970 2 0
-33 6 0
-3221 1 5
-6456 0 1
-1476 5 5
-2100 1 1
-40 1 1
-1316 1 0
-2446 0 1
-1589 17 15
-11171 0 1
-2639 0 1
-5190 4 0
-78 0 8
-5087 1 0
-2663 0 1
-9149 8 7
-1851 1 0
-9081 1 0
-7249 0 25
-199 2 0
-12 2 0
-16 0 209
-37 0 20
-2536 1 0
-1394 6 0
-12550 42 0
-821 0 4
-30579 0 1
-3710 0 4
-3638 0 1
-11945 1 0
-20204 1 0
-4171 0 8
-5680 0 1
-23827 2 0
-54817 1 0
-657 1 0
-342931 180000 50000
-2052068 1 27
-5375 0 2
-46 2 0
-6489 1 0
-7175 0 2
-1239 0 2
-4302 4 0
-27253 1 0
-4244 2 0
-717 2 0
-261 6 0
-26074 0 1
-236464 50000 50000
-6136098 3000000 3100000
-13518993 0 1
-449 0 1
-4533 0 4
-757 0 1
-1102 25 26
-107 0 2
-3470 1 0
-1108 0 1
-4775 0 1
-8628 1 1
-46 1 1
-1072 1 1
-44 1 1
-292 5 4
-9091 4 4
-2218 4 4
-705 1 5
-452 1 0
-88 32 32
-212 1 0
-1801 1 7
-3960 0 1
-2007 0 1
-1979 38 38
-1320 0 1
-2093 0 1
-403 0 310
-6134 1 1
-36 1 1
-1697 0 1
-97 0 13
-7624 1 1
-19 1 1
-6933 0 1
-779 7 7
-721 1 1
-43 1 1
-1626 1 0
-6146 2 0
-150 1 1
-47 1 1
-2172 2 0
-398 1 1
-31 1 1
-1149 2 2
-183 16 16
-1663 1 1
-18 1 1
-2105 10 11
-1409 1 1
-33 1 1
-1753 0 1
-408 1 0
-1916 0 1
-477 37 37
-1415 12 0
-3799 17 17
-2921 1 0
-1811 33 33
-2753 2 0
-486 0 6
-1388 1 1
-44 1 1
-186 1 1
-46 1 1
-3037 1 0
-2301 3 0
-3876 1 1
-22 1 1
-1724 0 1
-3733 0 1
-627 0 1
-250 1 0
-194 1 1
-26 1 1
-20797 10 10
-2445 1 0
-1733 0 2
-1001 12 0
-4394 9 9
-4052 10 9
-670 1 1
-97 6 0
-25 1486 1188
-10 3 2
-28 41 41
-28 2 3
-10 126 1058
-11 1051 417
-25 0 6
-18 1 1
-62 17 17
-77 0 1
-1009 41 41
-3899 10 10
-4690 0 1
-7343 1 0
-1248 1 0
-1259 1 0
-1345 0 4
-1534 1 0
-3797 16 16
-807 1 0
-2427 1 0
-48 0 1
-287 1 0
-611353 0 1
-1041 6 0
-371 0 1
-227 0 1
-2806 1 0
-36 1 1
-234 1 1
-23 1 1
-584 1 0
-22241 1 1
-65 1 1
-4605 0 1
-2326 0 20
-2130 0 1
-6170 9 13
-10665 0 1
-14631 1 0
-5359 4 0
-4004 1 0
-3182 11 0
-3897 14 16
-2551 1 0
-1824 1 0
-5274 1 1
-41 1 1
-4309 0 1
-3827 0 1
-4594 0 1
-65 1 1
-1170 1 1
-42 4 4
-214 0 1
-5228 0 1
-553 1 0
-5528 7 7
-735 14 14
-2861 1 0
-156 0 2
-6183 42 42
-2595 1 1
-41 1 1
-472 1 1
-65 0 1
-8 1 1
-1162 1 0
-565 1 1
-48 1 1
-536 2 1
-766 0 2
-4520 0 1
-1574 1 0
-503 0 1
-2558 0 1
-250061 7 7
-9650 18 18
-3208 1 1
-25 0 1
-744 2 0
-2994 1 1
-33 1 1
-1331 1 0
-2042 6 17
-1292 1 1
-35 1 1
-2485 1 1
-35 1 1
-17284 1 0
-7 7 1
-670 0 4
-429 0 1
-4736 1 0
-3849 0 1
-6745 16 16
-2344 1 1
-41 1 1
-4459 9 9
-3449 0 1
-3876 1 1
-75 1 1
-1429 7 7
-11126 26 26
-781 1 1
-28 1 1
-409 12 13
-1223 12 12
-5354 0 1
-1255 0 6
-851 65 65
-126 1 1
-47 5 5
-5931 4 0
-420 0 1
-2949 0 6
-193 324 324
-6740 1 3
-1074 1 0
-2465 1 1
-40 1 1
-640 2 0
-550 1 1
-32 1 1
-4096 1 1
-29 1 1
-949 6 6
-6258 1 0
-3957 1 0
-19608 1 1
-48 1 1
-234 0 1
-13246 13 13
-4651 321 0
-2617 1 0
-4553 0 3
-491 0 6
-7496 1 1
-9 0 10
-77 0 4
-3314 1 1
-32 1 1
-5217 1 0
-1500 17 17
-2023 1 0
-2425 0 18
-3110 8 8
-3248 1 0
-1946 1 1
-48 1 1
-9620 0 2
-31242 20000 50000
-36075685 3 0
-36004 1 1
-27 1 1
-5196 0 1
-293 0 2
-13307 0 3
-2420 6 0
-1863 0 2
-2911 0 1
-3233 2 0
-66 1 0
-2376 10 0
-4893 1 0
-745 1 0
-3897 0 13
-3835 1 1
-55 1 1
-538 1 1
-48 4 1
-20 0 2
-279 0 2
-33 1 1
-48 1 0
-387 8 8
-692 0 1
-375 3 0
-383 1 1
-18 1 1
-1289 1 1
-29 1 1
-12332 0 331
-856 4 0
-48 0 4
-8716 0 5
-130 2 0
-3001 0 1
-1332 8 5
-23273 0 1
-30174 27 39
-337 0 3
-2838 1 0
-1614 0 9
-313 0 1
-83 4 0
-172 1 1
-25 1 1
-4912 0 39
-1863 0 1
-2931 1 0
-3134 0 3
-390880 0 1
-7199 1 0
-305 2 0
-1811 2 0
-5449 0 3
-7443 0 2
-2171 1 1
-27 1 1
-2668 0 2
-2180 0 1
-1170 0 9
-1450 16 16
-3080 1 0
-920 18 18
-10219 1 0
-678 1 1
-28 1 1
-698 1 0
-112 1 0
-1831 3 0
-14327 2 0
-2087 10 10
-150 0 3
-380 1 1
-28 1 1
-1265 19 21
-7184 3 2
-4225 9 14
-1002 0 1
-3855 4 0
-2534 1 1
-30 1 1
-794 1 0
-25 1 1
-76140 70000 50000
-1432750 4799 0
-8 2973 0
-681864 20000 50000
-4278742 0 56347
-12021233 9 9
-1775 1 0
-1468 1 1
-51 16 14
-6 0 1
-6 0 1
-11 4 5
-7 0 1
-4 0 1
-75 1 2
-26 1 0
-16 0 1
-9 0 1
-19 0 2
-22 1 0
-9 0 1
-5 1 3
-14 6 7
-38 1 0
-26 1 1
-62 0 1
-38 1 1
-1687 0 1
-54 0 1
-8528 0 1
-2722 0 1
-6240 0 1
-33 0 1
-121285 1 0
-6 0 1
-35 1 0
-1381 0 1
-5368 1 0
-3079 0 1
-10863441 0 4
-1799 1 1
-24 1 1
-334 1 0
-4960 17 0
-1160 1 1
-34 1 1
-6153 3 0
-1346 4 0
-103 4 0
-2835 12 12
-304 0 16
-719 0 1
-3286 1 0
-10182 0 9
-804 1 1
-28 1 1
-749 0 1
-3387 1 1
-47 1 1
-482 0 1
-455 15 15
-719 1 1
-18 1 1
-2074 0 1
-1348 0 4
-3928 1 1
-18 1 1
-907 0 1
-2972 2 0
-115 1 1
-37 1 1
-4428 1 0
-1120 1 0
-4055 5 0
-2753 18 18
-158 3 0
-3590 1 1
-47 1 1
-62 1 0
-947 1 1
-45 1 1
-1639 1 1
-32 1 1
-1076 0 1
-3996 4 0
-7965 1 0
-1733 1 0
-1451 0 2
-617 1 0
-4375 0 1
-2194 64 63
-301 1 1
-27 1 1
-6661 1 1
-79 1 1
-1495 1 0
-499 1 1
-37 2 2
-968 1 0
-34 1 1
-6337 1 1
-18 1 1
-8162 1 1
-22 5 0
-9274 1 0
-6017 5 5
-3872 8 0
-5421 1 0
-532 6 7
-5673 0 4
-1542 4 0
-890 3 1
-2561 1 0
-1692 1 0
-1142 1 1
-32 1 1
-503 2 1
-123 1 1
-75 1 1
-2322 1 0
-201 1 0
-40 3 3
-149 3 0
-1441 1 1
-40 1 1
-159 2 0
-1278 1 1
-33 1 1
-221 0 1
-31 1 1
-161 9 10
-1890 0 1
-132 1 1
-37 1 1
-514 17 23
-1373 4 0
-907 1 1
-15 1 1
-714 1 1
-18 0 1
-10 1 1
-55 1 1
-24 1 1
-1038 2 0
-95 1 5
-1094 1 1
-170 1 1
-844 0 3
-369 1 1
-39 1 1
-650 1 1
-41 1 1
-176 12 12
-688 1 0
-7640 4 0
-2650 1 1
-28 0 4
-44 1 1
-728 8 0
-2196 0 1
-13466 0 1
-3510 0 2
-2147 1 1
-44 0 3
-1320 11 11
-210 0 4
-105 1 0
-3239 0 1
-1496 142 153
-2391 1 1
-39 0 2
-438 4 0
-2272 8 0
-6865 0 3
-7183 0 1
-5104 0 3
-182 1 0
-3131 1 1
-31 1 0
-14 1 1
-59 1 0
-373 1 1
-42 1 1
-235 13 13
-1608 0 5
-152 1 1
-106 1 1
-783 34 34
-1633 1 1
-29 3 0
-821 1 1
-24 1 1
-1178 1 1
-33 1 1
-328 1 1
-27 1 1
-5682 16 13
-146398 30000 50000
-59809 0 2
-3389 1 1
-37 1 1
-11606 0 1
-1597 0 1
-618 1 1
-47 1 1
-2698 0 1
-826 5 5
-33 0 2
-2560 0 14
-98 0 3
-1287 0 1
-7600 0 1
-9894 0 8
-7160 0 1
-32 1 1
-1698 0 1
-754 2 0
-6787 0 1
-584 0 2
-1107 1 1
-40 1 1
-365 1 1
-35 1 1
-399 0 8
-11444 0 1
-1973 0 1
-1200 0 1
-716 1 1
-25 1 1
-1570 0 2
-433 2 0
-905 0 2
-94 1 1
-28 1 1
-2490 18 18
-5054 9 1
-2184 0 2
-2955 23 21
-431 49 49
-314 1 0
-1563 1 1
-20 1 1
-1632 11 0
-1671 2 0
-1527 0 1
-676 1 1
-29 1 1
-1245 1 1
-34 0 1
-1203 22 30
-1934 1 0
-3421 0 2
-17 1 1
-774 0 30
-97 6 6
-59 12 26
-840 1 1
-19 1 1
-2036 27 53
-683 30 30
-401 0 1
-25 1 1
-381 16 0
-159 1 1
-17 1 1
-1150 0 4
-700 1 0
-29 0 2
-409 1 1
-49 1 1
-1240 1 1
-37 3 3
-2248 0 1
-1828 0 1
-1997 1 5
-4640 4 4
-4555 2 0
-150 52 0
-618 2 2
-16 1 1
-83 0 22
-56 1 57
-2531 8 0
-4250 17 17
-2203 4 0
-1665 10 0
-415 0 2
-393 0 1
-15728 1 0
-158 0 4
-82 0 14
-543 1 1
-42 1 1
-3261 18 18
-139 1 1
-37 1 1
-410 1 1
-18 1 1
-5405 0 1
-1104 1 1
-53 1 1
-392 1 1
-55 3 3
-3352 0 9
-692 106 52
-27 4 0
-13 1 3
-14 88 0
-61 2 0
-8931 0 1
-6692 2 1
-253 19 19
-869 2 0
-196 0 2
-389 1 1
-30 1 1
-949 1 0
-6057 3 0
-4741 0 1
-7689 0 2
-2046 18 18
-215 1 0
-46885 0 2
-24138 0 2
-4037 0 1
-4047693 0 1
-9545 2 0
-11590 0 4
-1698 3 1
-18923 0 4
-1806 1 1
-44 1 1
-2581 2 0
-10620 1 0
-3804 1 0
-339 2 0
-476 1 0
-5861 5 8
-109 14 0
-901 1 1
-19 1 1
-45 0 2
-1736 0 1
-6625 0 2
-7812 0 4
-7678 0 2
-5086 3 8
-4170 1 0
-1671 0 6
-6333 16 0
-902 1 1
-44 1 1
-384 6 0
-23181 4 4
-214 0 2
-8958 4 0
-220 1 1
-49 1 1
-2783 1 0
-2641 1 0
-136 20 20
-1279 1 0
-3924 6 6
-13054 0 6
-8954 13 0
-4128 0 2
-2269 0 1
-16258 2 0
-30076 1 1
-49 1 1
-102 0 1
-8824 27 27
-1730 1 1
-47 1 1
-3339 1 0
-132 16 0
-81 0 16
-89 0 6
-6369 0 1
-541 0 1
-6288 4 0
-3814 0 2
-7260 1 0
-802 0 68
-1166 1 0
-2230 0 1
-1109 1 0
-1106 0 2
-12396 1 0
-26207 1 1
-21 1 1
-4087 16 0
-1323 7 7
-525 1 0
-4198 1 0
-4682 13 13
-890 2 0
-816 2 0
-1961 4 0
-24586 1 1
-19 1 1
-4403 0 1
-1342 0 1
-57 11 12
-2229 30 31
-1979 35 0
-10541 1 0
-9725 6 0
-2536 1 2
-20 1 1
-1541 12 0
-1130 1 1
-34 1 1
-927 1 0
-4003 1 0
-966 0 1
-149 1 0
-842 0 8
-4326 1 1
-25 1 1
-569 6 7
-664 2 2
-5695 0 1
-3074 1 0
-1539 9 3
-634 1 1
-39 1 1
-8610 1 1
-11 0 1
-345 43 43
-372 0 2
-4311 6 0
-3122 2 0
-369 0 1
-9963 10 10
-2191 1 1
-23 1 1
-1060 1 1
-19 1 1
-240 12 12
-1748 1 1
-45 1 1
-1040 1 1
-31 1 1
-7446 1 1
-25 1 1
-8379 7 7
-7325 0 3
-357 1 0
-1313 1 0
-11624 0 4
-5865 0 1
-9750 0 1
-3540 16 0
-5671 13 13
-2885 4 0
-8179 0 1
-753 1 0
-2289 49 49
-1979 2 0
-1318 0 1
-957 1 0
-825 12 12
-1110 16 0
-3735 17 17
-9997 223 53
-149 22 24
-636 1 1
-22 0 1
-42 1 1
-1634 4 4
-3380 3 0
-979 0 2
-3429 1 0
-7138 14 0
-1727 1 1
-38 1 0
-88 0 1
-630 20 20
-476 0 5
-21 0 1
-94 0 1
-42 1 0
-17 0 1
-27 0 1
-172 1 1
-37 1 1
-191 1 1
-66 1 1
-630 0 1
-261 1 1
-28 1 1
-1282 17 18
-429 0 1
-1588 1 1
-20 1 1
-1416 1 1
-33 1 1
-529 0 1
-25 0 1
-1863 0 4
-1651 1 1
-28 1 1
-11815 0 1
-26 0 1
-19 1 1
-3105 0 1
-700 0 1
-150 0 1
-68 0 1
-1420 0 6
-568 14 16
-2415 0 1
-41 1 1
-415 1 1
-33 1 1
-4521 1 1
-33 1 1
-307 1 0
-176 1 0
-3790 1 1
-86 1 1
-67 1 1
-65 0 1
-7439 1 1
-18 1 1
-16805 0 1
-1764 1 0
-3104 35 35
-3845 0 1
-3384 0 2
-17 0 18
-156 1 1
-30 1 1
-165 0 2
-1087 1 0
-953 1 0
-483 0 1
-632 1 0
-652 1 0
-8563 9 7
-1860 1 0
-398 1 0
-2219 1 1
-53 1 1
-756 1 1
-66 1 1
-69 1 1
-48 1 1
-63 1 1
-28 3 0
-1057 3 0
-63 0 3
-55 1 1
-74 3 2
-159 0 3
-92 1 1
-29 1 1
-58 3 0
-1210 9 9
-54 1 1
-27 1 1
-1374 0 2
-1775 17 2
-764 14 14
-331 16 16
-2291 3 4
-1687 1 1
-26 1 1
-2469 1 0
-3243 0 1
-3636 1 1
-24 1 1
-615 1 0
-2566 0 1
-275 5 0
-695 7 0
-9686 32 32
-3416 0 1
-1452 4 0
-214 13 13
-49 0 124
-1393 9 9
-5812 1 1
-24 1 1
-5703 0 1
-4006 1 0
-1462 3 0
-5199 2 0
-1554 0 2
-715 10 12
-1966 0 2
-2801 0 16
-618 0 1
-413 18 0
-730 1 1
-31 1 1
-4372 5 0
-10789 1 0
-2399 1 0
-6750 0 2
-1363 6 0
-6736 2 0
-4457 0 4
-7867 1 0
-3495 2 1
-7584 0 1
-2652 1 0
-1771 0 1
-14808 41015 41008
-19235 0 1
-9638 0 1
-2994 0 1
-469 3 1
-499 0 1
-12074 13 13
-2807 10 11
-715 0 2
-1627 6 6
-5099 1 0
-488 1 5
-975 0 2
-1761 0 1
-1794 5 0
-8254 3 3
-18 1 1
-3737 9 9
-1442 13 13
-212 0 10
-7712 1 1
-44 1 1
-4480 40 40
-1751 1 0
-1316 1 1
-49 1 1
-9050 4 0
-143 0 2
-2813 13 13
-1286 2857 49999
-75638 40000 50000
-1583473 0 2
-1564099 1 97463
-2933461
-
-chain 1621142 chrX 154913754 + 148570601 148611616 chrX 155270560 - 6466757 6507765 175
-13140 0 1
-20345 6 0
-3704 1 0
-1517 1 0
-2301
-
-chain 259772 chrX 154913754 + 75282398 75286444 chrX 155270560 - 79901776 79905823 6183
-1486 41 41
-41 40 40
-126 11 11
-1051 1209 1210
-41
-
-chain 192506 chrX 154913754 + 114908114 114911060 chrX 155270560 + 114997023 115000000 3054
-63 528 528
-60 0 16
-630 28 44
-689 16 16
-436 1 0
-495
-
-chain 188216 chrX 154913754 + 114908656 114914454 chrX 155270560 + 115000574 115005488 36116
-49 2721 1850
-47 8 8
-197 704 696
-2 16 0
-1155 42 43
-455 2 12
-400
-
-chain 119665 chrX 154913754 + 114906873 114908114 chrX 155270560 + 115003848 115005094 1024208
-1216 0 5
-25
-
-chain 29390 chrX 154913754 + 76491035 76491342 chr1 249250621 - 136684922 136685229 4932608
-307
-
-chain 25643 chrX 154913754 + 114911150 114911426 chrX 155270560 + 115005157 115005433 246321
-276
-
-chain 19821 chrX 154913754 + 114908177 114911739 chrX 155270560 + 114982173 114982762 1997
-479 3022 49
-61
-
-chain 15998 chrX 154913754 + 114911743 114912382 chrX 155270560 + 114967843 114968482 6239
-639
-
-chain 9708 chrX 154913754 + 148714470 148714905 chr5 180915260 - 8837105 8837560 23506322
-56 313 333
-66
-
-chain 9294 chrX 154913754 + 114906712 114906808 chrX 155270560 + 115005518 115005614 24447825
-96
-
-chain 6266 chrX 154913754 + 114906808 114906873 chrX 155270560 + 114962882 114962947 1027613
-65
-
-chain 6215 chrX 154913754 + 76426104 76426191 chrX 155270560 + 29934095 29934182 9535161
-87
-
-chain 5894 chrX 154913754 + 143027611 143027675 chr2 243199373 - 154977524 154977591 249
-15 0 3
-49
-
-chain 3277 chrX 154913754 + 76426069 76426104 chr1 249250621 - 60612464 60612499 19993171
-35
-
-chain 2407 chrX 154913754 + 148714814 148714839 chr2 243199373 + 100113459 100113484 27784968
-25
-
-chain 1984 chrX 154913754 + 76426191 76426234 chr8 146364022 - 27059036 27059079 21505033
-43
-
-chain 1549 chrX 154913754 + 114911087 114911150 chrX 155270560 + 114976136 114976199 336010
-63
-
-chain 1443 chrX 154913754 + 114913555 114913597 chrX 155270560 + 114984570 114984612 98822
-42
-
-chain 1245 chrX 154913754 + 148714288 148714366 chr4 191154276 - 133575330 133575408 22672116
-78
-
-chain 1030 chrX 154913754 + 114911060 114911082 chrX 155270560 + 114988042 114988064 7002
-22
-
-chain 733 chrX 154913754 + 148715982 148716070 chrX 155270560 - 110405878 110405966 21525610
-88
-
-chain 469 chrX 154913754 + 76426248 76426375 chr8 146364022 - 18567958 18568085 6841016
-127
-
-chain 293 chrX 154913754 + 148716634 148716684 chr2 243199373 - 107635751 107635801 26436223
-50
-
-chain 50554324 chrX_random 1719168 + 610279 1452044 chrX 155270560 + 76412035 77367385 75
-7124 5 6
-4742 1 1
-31 1 1
-1606 21 28
-3800 1 1
-23 1 1
-6209 1 1
-4 1 0
-22 1 0
-13 1 0
-1193 1 1
-32 1 1
-2218 0 1
-7608 6 1
-670 0 2
-1396 0 2
-1207 20 20
-5098 1 0
-1294 1 0
-119 0 1
-6626 16 16
-8221 1 0
-3722 4 0
-169 0 4
-1754 11 13
-58 0 1
-239 1 1
-75 1 1
-910 0 1
-518 7 7
-6771 0 1
-4354 26 26
-781 1 1
-28 1 1
-406 16 16
-4353 1 0
-22 100 24
-930 1 0
-33 1 1
-1226 0 1
-1278 660 1078
-3884 2 2
-22 1 1
-2022 4 0
-2593 1 0
-777 0 3
-4596 153 64
-2593 1 10
-1074 1 0
-3147 1 0
-2227 1 0
-9697 1 0
-3957 1 0
-3098 0 186786
-22519 1 0
-204 1 0
-22 1 0
-63 17 18
-9565 0 6
-6660 129 0
-58 1 0
-17671 100 83
-39 1 1
-9798 2 1
-5 0 1
-19 100 237
-1127 0 1
-4928 133 164
-8370 115 394
-3028 259 91
-9555 100 1670
-18018 6 0
-3818 1 0
-72 1 0
-15 1 0
-11 1 0
-4 1 0
-10 100 30
-18171 0 1
-18316 0 28
-22590 0 1
-2592 2 0
-8265 0 2
-4335 4 3
-14218 100 218
-8896 0 2
-5422 18 17
-1347 4 4
-83 166 0
-5120 101 153
-3114 126 148
-4567 1 0
-2511 0 1
-1289 2 0
-3129 124 175
-5332 1 0
-20 1 0
-15993 0 4
-9940 115 1562
-10856 1 1
-18 0 1
-2379 1 1
-32 74 72
-41 1 1
-3148 155 3622
-2876 621 0
-31 1 1
-2212 81729 108028
-557 0 1
-4283 1 0
-148 0 457
-722 1 1
-49 113 176
-33 2 2
-2654 1 0
-25 188 415
-1394 12 0
-5398 0 1
-28 100 19
-5509 151745 28754
-87 102 102
-66 5 5
-53 70 72
-56 201 601
-7819 256 150
-16 0 1
-6 0 1
-8001 4 0
-8135 0 1
-528 12 0
-797 100 193
-2857 496 0
-5822 153 0
-8578 1 0
-10594 1 0
-6352 3 3
-35 6 7
-50 55655 72028
-890 0 1
-72 0 1
-2125 1 1
-64 1 0
-15 1 0
-5 22 19
-12 129 67
-11 1 0
-8 0 1
-4 1 0
-16 2 2
-3637 1 1
-36 1 0
-28 1 0
-942 0 1
-231 1 1
-109 101 336
-18 11 294
-14959 0 2
-22656 3 1
-1280
-
-chain 6857177 chrX_random 1719168 + 1212241 1285856 chrX 155270560 + 76337041 76411192 460
-53 4 4
-3247 0 6
-51 2 0
-2014 2 0
-45 4 0
-20 4 0
-48 1 0
-5158 1 1
-29 1 1
-394 16 13
-1410 1 0
-12 1 0
-14 1 0
-7 1 0
-5 1 0
-13 1 0
-36 106 188
-1195 0 31
-133 0 4
-28 1 1
-1388 1 1
-18 1 1
-2790 0 1
-767 4 4
-49 0 1
-10 110 385
-52 0 1
-56 0 1
-4004 182 11
-23 1 1
-767 1 1
-66 1 1
-3217 2 0
-25 1 1
-4309 1 0
-26 0 1
-820 2 2
-4450 0 1
-1391 1 1
-33 0 1
-31 0 8
-3634 1 0
-1669 111 432
-10524 1 2
-8620 1 0
-2158 1 0
-1513 7 7
-4600 4 4
-2111
-
-chain 5479158 chrX_random 1719168 + 19684 169644 chrX 155270560 + 3753512 3953553 578
-1162 21228 9243
-742 1 0
-2200 7659 14347
-948 1 0
-4152 211 33421
-819 48 49
-92 22 22
-544 44 42
-175 0 1
-63 102 104
-246 37 37
-203 6 5
-279 27 27
-206 54 54
-394 39 40
-260 2 0
-311 16 16
-208 57 57
-349 6 6
-262 134 134
-481 0 6
-56 1 1
-868 0 5
-1387 18095 3193
-790 8 6
-1718 0 2
-3436 13 13
-241 40033 77157
-63 10 10
-425 63 0
-38963
-
-chain 5155611 chrX_random 1719168 + 1349115 1404263 chrX 155270560 - 77841540 77897663 609
-4514 1 1
-4 1 0
-15 0 1
-1714 142 0
-26953 1 1
-31 100 192
-4795 129 41
-2612 4 0
-3389 4 0
-5037 1 1
-22 101 1223
-13 9 8
-34 2 2
-5520
-
-chain 4548442 chrX_random 1719168 + 595876 1601165 chrX 155270560 - 77827311 79038577 141
-3039 114 45
-9150 2 0
-1995 422998 109473
-19795 1 0
-23 1 0
-12 111 343
-20 5 4
-13 1 1
-2240 1980 60
-2381 1 3
-44 1 0
-37 0 1
-24 100 79
-2445 100 136
-5050 0 1
-8804 4 0
-4444 704 262
-34 2 2
-12610 100 395
-4803 1 1
-22 1 1
-4171 128 46
-569 0 1
-2902 29308 112180
-236 1 0
-659 1 0
-711 1 0
-104 0 6764
-3212 4 2485
-1198 1 0
-8224 110 1
-4 0 1
-8 0 1
-21 0 1
-23 4 4
-5939 0 1
-182 101 1162
-2127 1 0
-28 100 77
-5048 2 0
-2345 1 0
-3616 100 211
-11 10 11
-1378 0 44
-1405 0 1
-1238 0 1
-575 0 20
-9423 100 122
-20 1 1
-7723 0 1
-431 0 1
-181 2 0
-5386 16 0
-866 105 61
-1365 0 1
-11613 318206 1966
-13 1 2
-40 1 1
-781 0 2
-5976 121 213
-3371 0 1
-693 1 0
-169 2337 746790
-586 1 0
-2072 1 1
-34 1 1
-58 13 13
-211 1 1
-28 1 1
-332 1 1
-31 1 1
-179 11 0
-2785 0 5
-1418 1 0
-12774 0 1
-3561 1 0
-4305 1 1
-120 1 1
-377 1 1
-68 1 1
-208 9 9
-998 15 15
-2146 0 1
-693 101 90
-36 1 1
-1743 1 1
-18 1 1
-2412 15 15
-1943 29 30
-3136 0 3
-12327 3 4
-2517
-
-chain 4126434 chrX_random 1719168 + 1485975 1530227 chrX 155270560 + 76291305 76335950 725
-1188 0 2
-717 1 1
-34 1 1
-1032 1 1
-42 1 1
-974 1 0
-5479 16 16
-2476 1 1
-35 1 1
-1212 3 0
-152 1 1
-46 1 1
-77 7 6
-912 1 1
-38 1 1
-4230 17 17
-617 146 545
-27 3 3
-374 1 1
-18 1 1
-3639 1 1
-122 1 1
-435 4 4
-1916 16 16
-2739 1 0
-622 16 16
-6383 2 0
-2520 35 35
-5915
-
-chain 3853214 chrX_random 1719168 + 170863 1715347 chrX 155270560 - 151357158 154150181 220
-101 0 61
-11 0 2
-38 0 155
-54 0 1
-34100 0 1
-12001 158233 27287
-105 0 1
-847 4191 3311
-101 25049 633
-4294 18781 8391
-120 26 27
-1173 0 1
-2374 87 87
-206 41 40
-40 7493 0
-1552 0 1
-194 0 1
-6613 4 3
-492 13807 11516
-2651 0 2
-1724 0 2
-2453 0 1
-3866 165 10497
-2912 8 0
-2305 93 94
-6287 1 0
-3225 7 7
-393 1 1
-18 1 1
-298 495 25877
-271 0 138
-31886 6 0
-14613 3 0
-9199 1105799 2318225
-448 0 73
-215 36 2
-248 14 15
-1012 1 0
-110 1 1
-211 15 16
-87 3 0
-268 10 6
-108 12 12
-74 1 1
-27 1 1
-178 1 1
-18 1 1
-1429 0 10
-168 1 1
-36 1 1
-64 1 1
-62 0 1
-129 2 0
-80 13 10
-11 3 0
-19 823 1702
-36 1 0
-605 17 17
-193 1 0
-215 12 13
-271 1 1
-18 1 1
-91 1 0
-178 4 4
-39 1 1
-233 1 1
-31 1 1
-500 1 1
-68 1 1
-325 9 9
-244 0 1
-843 1 1
-46 1 1
-202 0 1
-957 0 1
-150 1 1
-81 1 0
-6 1 1
-303 8540 16182
-59 4 0
-415 4 7
-127 38 38
-333 0 44
-16 0 252
-226 27 26
-64 4 0
-91 0 4
-56 32 32
-977 0 16
-701 1 1
-29 1 1
-1743 1 0
-676 0 2
-2780 0 16
-85 0 11
-22 1 1
-952 3 0
-470 1 0
-840 4 0
-146 0 4
-131 0 34
-39 4 0
-99 1 1
-26 0 4
-80 1 1
-1476 0 13
-977 0 2
-480 0 800
-1133 4 5
-532 1 1
-37 1 1
-207 0 117633
-2070 1 1
-30 2 0
-524 2 0
-484 0 1
-446 1 0
-1642 2 0
-63 1 1
-43 1 1
-148 12 12
-2115 0 1
-116 1 1
-182 10 10
-88 1 1
-65 0 320
-107 0 2
-2083 295 0
-1170 10932 59997
-1792 0 1
-292 6 7
-677 8 11
-1932
-
-chain 2670012 chrX_random 1719168 + 22277 129533 chrX 155270560 - 151420019 151525192 697
-318 0 8
-1212 7792 0
-1334 4590 634
-3132 4549 4298
-403 12 12
-889 7 7
-393 20 20
-2070 17932 14002
-179 0 1
-1042 0 1
-4330 476 475
-66 0 1
-1653 797 0
-2278 8 0
-5943 18846 26826
-69 77 81
-86 822 824
-287 1 0
-7796 1771 9789
-1118 1349 0
-2572 2 0
-4177 1 0
-2904 5 0
-881 1 1
-56 6 0
-590 1 1
-23 1 1
-262 6 6
-349 1 1
-55 1 1
-208 16 16
-311 0 2
-260 1 0
-34 5 5
-394 54 54
-206 27 27
-199
-
-chain 2529127 chrX_random 1719168 + 1458959 1485875 chrX 155270560 + 77160344 77187173 1079
-634 0 1
-9184 1 0
-59 1 0
-14 100 16
-21 1 0
-53 2 2
-11087 2 0
-2487 0 2
-2602 1 0
-667
-
-chain 902700 chrX_random 1719168 + 269161 291745 chrY 59373566 - 58967799 59197152 4215
-4053 3 0
-293 1 1
-26 0 1
-791 0 165863
-51 243 5
-66 134 1
-42 388 5
-141 0 15
-35 2 2
-42 361 0
-256 1 0
-341 3 36
-453 301 1
-147 0 1
-278 4 4
-15 0 3
-29 1 1
-122 2 0
-148 430 0
-222 151 0
-55 0 2
-149 1 0
-687 6309 50121
-61 1 1
-43 1 1
-408 80 0
-147 11 11
-228 1 1
-48 2 2
-1372 1 1
-31 1 1
-75 1 1
-28 97 0
-263 0 1
-495 98 1
-51 1 33
-52 1 1
-51 33 1
-226 1 1
-20 4 0
-211 340 0
-179 1 0
-10 1 1
-236 341 1
-555
-
-chain 569801 chrX_random 1719168 + 1106858 1112877 chrX 155270560 - 78234537 78240560 9279
-4787 0 4
-1232
-
-chain 569444 chrX_random 1719168 + 1452563 1458801 chrX 155270560 - 78136578 78142679 9342
-609 3 13
-1692 0 8
-1539 155 0
-30 3 3
-254 9 9
-1944
-
-chain 534458 chrX_random 1719168 + 90245 170863 chrX 155270560 - 151402385 151465977 943
-12303 69 69
-77 86 86
-822 66146 49119
-57 3 4
-1055
-
-chain 494413 chrX_random 1719168 + 391508 439759 chrX 155270560 - 151446976 151536655 1213
-50 57 60
-3938 36909 78166
-87 206 206
-41 40 40
-6143 240 408
-340 6 6
-194
-
-chain 379298 chrX_random 1719168 + 415243 419212 chrX 155270560 - 151507548 151511517 135808
-663 12 12
-3294
-
-chain 372919 chrX_random 1719168 + 1663885 1667930 chrX 155270560 - 153907181 153911269 141765
-802 0 3
-83 1 1
-47 1 1
-767 17 17
-1585 0 73
-215 36 2
-248 14 15
-229
-
-chain 274258 chrX_random 1719168 + 1667930 1671196 chrX 155270560 - 154066175 154070218 305212
-2034 1 281
-24 1 1
-190 0 200
-632 326 623
-58
-
-chain 267510 chrX_random 1719168 + 422339 428025 chrX 155270560 - 151460048 151465730 1055
-1034 4 3
-2317 3 0
-2328
-
-chain 266050 chrX_random 1719168 + 27992 75212 chrX 155270560 - 151430977 151495459 1091
-2648 315 25719
-644 9056 5097
-1296 30530 26348
-164 1 0
-310 1720 1720
-536
-
-chain 247472 chrX_random 1719168 + 49544 52383 chrX 155270560 + 3800594 3803433 7089
-2766 6 6
-67
-
-chain 247318 chrX_random 1719168 + 58807 462399 chrX 155270560 + 3743706 3828677 987
-48 658 658
-44 238 238
-102 246 246
-37 488 488
-27 206 206
-54 394 394
-39 797 797
-57 617 617
-134 287931 26427
-60 1338 0
-1419 8746 13247
-2214 50 50
-51 31242 578
-263 4 4
-5180 1349 0
-1121 24105 7962
-467 20820 8687
-32 2 2
-3992 2 0
-898 48 49
-92 22 22
-544 44 42
-175 0 1
-63 102 104
-246 37 37
-203 6 5
-279 27 27
-206 54 54
-394 39 40
-260 2 0
-311 16 16
-208 57 57
-349 6 6
-262 25 25
-590 57 63
-881 1017 1022
-1498
-
-chain 203629 chrX_random 1719168 + 419791 421950 chrX 155270560 - 151464996 151467156 582605
-2107 0 1
-52
-
-chain 199106 chrX_random 1719168 + 1699808 1701947 chrX 155270560 - 153935858 153937997 603481
-61 1 1
-57 1 1
-1588 4 4
-59 7 7
-361
-
-chain 199089 chrX_random 1719168 + 378452 380544 chrX 155270560 + 3796616 3798707 602253
-1586 1 0
-505
-
-chain 187776 chrX_random 1719168 + 376353 378301 chrX 155270560 + 3798256 3800203 654951
-729 1 0
-1218
-
-chain 174234 chrX_random 1719168 + 1285969 1288372 chrX 155270560 + 77019422 77021825 343560
-1763 87 87
-102 124 124
-70 56 56
-201
-
-chain 157788 chrX_random 1719168 + 111815 113457 chrX 155270560 + 3753462 3755104 810742
-1642
-
-chain 154415 chrX_random 1719168 + 1055747 1057376 chrX 155270560 + 77369279 77370908 822932
-1629
-
-chain 134293 chrX_random 1719168 + 1708912 1710376 chrX 155270560 + 1185231 1187137 959481
-129 1 1
-82 1 1
-350 2 297
-68 0 147
-831
-
-chain 132265 chrX_random 1719168 + 403961 405553 chrX 155270560 - 151477034 151478628 31377
-436 0 2
-1156
-
-chain 90853 chrX_random 1719168 + 1707707 1708693 chrX 155270560 + 1353464 1354449 1404000
-164 1 0
-46 1 1
-620 1 1
-37 1 1
-115
-
-chain 74037 chrX_random 1719168 + 267762 268693 chrY 59373566 - 59139189 59140054 1710353
-79 97 0
-220 1 0
-317 27 60
-128 1 0
-61
-
-chain 63811 chrX_random 1719168 + 410390 415127 chrX 155270560 + 3822705 3827447 11885
-2487 0 6
-1981 48 47
-221
-
-chain 61116 chrX_random 1719168 + 346359 347004 chrX 155270560 + 3777922 3778567 2069731
-645
-
-chain 55813 chrX_random 1719168 + 2787 3496 chrX 155270560 - 151499719 151505905 2274078
-50 6 6
-412 0 5477
-241
-
-chain 38577 chrX_random 1719168 + 1651263 1651671 chrX 155270560 - 153943757 153944164 3434500
-271 1 0
-136
-
-chain 34659 chrX_random 1719168 + 1707297 1707664 chrX 155270560 + 1118849 1119216 3901406
-367
-
-chain 33830 chrX_random 1719168 + 267400 267758 chrX 155270560 - 154819600 154819959 4017435
-54 0 1
-304
-
-chain 33594 chrX_random 1719168 + 347004 347356 chrX 155270560 - 151523309 151523661 4010211
-352
-
-chain 33500 chrX_random 1719168 + 290273 291150 chrX 155270560 - 155043354 155044230 1935940
-149 427 427
-91 1 0
-137 17 17
-55
-
-chain 33229 chrX_random 1719168 + 1452213 1452563 chrX 155270560 - 78136229 78136579 3954656
-350
-
-chain 31748 chrX_random 1719168 + 1656832 1657169 chrX 155270560 - 154080972 154081310 4345014
-118 0 1
-219
-
-chain 31047 chrX_random 1719168 + 364702 460901 chrX 155270560 + 3752840 3788747 1318
-48 54 53
-80 31133 470
-26 58237 28604
-46 660 660
-40 242 241
-78 0 2
-22 248 248
-33 492 491
-25 208 208
-52 400 400
-34 798 798
-56 1232 1232
-21 1 1
-34 882 887
-1017
-
-chain 26366 chrX_random 1719168 + 1717468 1717765 chrX 155270560 - 154599490 154599787 6355797
-65 8 8
-224
-
-chain 20775 chrX_random 1719168 + 1657225 1657446 chrY 59373566 + 1138227 1138450 9855403
-101 0 2
-120
-
-chain 20767 chrX_random 1719168 + 4453 4700 chrX 155270560 - 151332163 151332410 9860775
-174 10 10
-63
-
-chain 20271 chrX_random 1719168 + 1698243 1698467 chrX 155270560 - 154161726 154161950 2868
-224
-
-chain 20189 chrX_random 1719168 + 22064 22277 chrX 155270560 + 3752676 3752889 10232162
-213
-
-chain 20092 chrX_random 1719168 + 410218 414905 chrX 155270560 + 3784106 3788794 77876
-172 4468 4469
-47
-
-chain 19894 chrX_random 1719168 + 365127 367414 chrX 155270560 + 3744796 3747084 92469
-246 37 37
-203 5 6
-279 27 27
-206 54 54
-394 41 39
-260 0 2
-535
-
-chain 19881 chrX_random 1719168 + 217168 217385 chrX 155270560 + 3913712 3913929 10410664
-217
-
-chain 19372 chrX_random 1719168 + 1704190 1704597 chr2 243199373 + 106598364 106598785 10983407
-91 100 114
-81 74 74
-61
-
-chain 17351 chrX_random 1719168 + 365104 366619 chrX 155270560 + 3783188 3784703 560009
-23 246 246
-37 487 487
-27 206 206
-54 394 394
-41
-
-chain 16176 chrX_random 1719168 + 3557 21469 chrX 155270560 + 3768043 3793719 20345
-896 16406 24170
-326 33 33
-130 29 29
-92
-
-chain 15865 chrX_random 1719168 + 276938 277188 chrY 59373566 - 59140528 59140772 2014767
-82 6 0
-162
-
-chain 15331 chrX_random 1719168 + 367414 367617 chrX 155270560 + 3823924 3824127 647220
-203
-
-chain 13713 chrX_random 1719168 + 489399 489544 chrX 155270560 + 3712149 3712294 16431967
-145
-
-chain 12918 chrX_random 1719168 + 274951 275159 chrY 59373566 - 59139058 59139278 8720139
-52 0 12
-156
-
-chain 12632 chrX_random 1719168 + 1705530 1705970 chrX 155270560 + 145057484 145057926 18056495
-78 288 290
-74
-
-chain 12447 chrX_random 1719168 + 1030429 1030575 chr5 180915260 - 168461964 168462110 18325086
-146
-
-chain 12016 chrX_random 1719168 + 1317064 1317191 chrX 155270560 + 77214259 77214386 18979178
-127
-
-chain 11687 chrX_random 1719168 + 278072 278210 chrX 155270560 - 154988343 154988492 4329206
-112 25 36
-1
-
-chain 11514 chrX_random 1719168 + 278210 278346 chrY 59373566 - 59141204 59141340 4138572
-136
-
-chain 10224 chrX_random 1719168 + 1704620 1704728 chr19 59128983 - 37939031 37939139 22329028
-108
-
-chain 10213 chrX_random 1719168 + 277934 278654 chrY 59373566 - 59141065 59141499 2702219
-138 514 228
-68
-
-chain 9983 chrX_random 1719168 + 290082 290229 chrX 155270560 - 155043503 155043650 2501552
-48 40 40
-59
-
-chain 9686 chrX_random 1719168 + 1671544 1671645 chrX 155270560 + 1359785 1359886 23561825
-101
-
-chain 8627 chrX_random 1719168 + 274506 274913 chrX 155270560 - 154985996 154986278 9490470
-54 20 20
-32 0 8
-10 242 109
-49
-
-chain 7400 chrX_random 1719168 + 1030281 1030397 chr9 141213431 + 129760930 129761046 27439238
-59 26 26
-31
-
-chain 7194 chrX_random 1719168 + 274704 274779 chrY 59373566 - 59139208 59139283 27842833
-75
-
-chain 7041 chrX_random 1719168 + 129047 129334 chrX 155270560 - 151486292 151486579 1717
-54 206 206
-27
-
-chain 6777 chrX_random 1719168 + 275159 275252 chrX 155270560 - 154986140 154986238 15049098
-1 37 42
-55
-
-chain 6125 chrX_random 1719168 + 479075 479168 chrX 155270560 - 151461082 151461175 898
-93
-
-chain 5720 chrX_random 1719168 + 1705205 1705283 chr3 198022430 - 36255828 36255906 21764861
-52 21 21
-5
-
-chain 5699 chrX_random 1719168 + 57777 57859 chrX 155270560 + 3747892 3747974 156364
-82
-
-chain 5684 chrX_random 1719168 + 275730 275789 chrX 155270560 - 154985991 154986050 31480070
-59
-
-chain 5671 chrX_random 1719168 + 278678 278737 chrX 155270560 - 154987944 154988003 7684992
-59
-
-chain 5648 chrX_random 1719168 + 288487 288546 chrY 59373566 - 59194675 59194734 31602153
-59
-
-chain 5292 chrX_random 1719168 + 1698467 1698538 chrX 155270560 - 154160180 154160251 1242775
-71
-
-chain 4986 chrX_random 1719168 + 1705613 1705672 chr7 159138663 + 43857891 43857950 19004666
-59
-
-chain 4456 chrX_random 1719168 + 1030620 1030666 chrX 155270560 + 76367481 76367527 34837220
-46
-
-chain 4200 chrX_random 1719168 + 65786 66804 chrX 155270560 + 3789104 3790122 1705
-1018
-
-chain 4147 chrX_random 1719168 + 1704281 1704341 chr4 191154276 - 52750556 52750615 11058024
-1 2 1
-57
-
-chain 4142 chrX_random 1719168 + 276887 276938 chrY 59373566 - 59140619 59140670 3855343
-51
-
-chain 3859 chrX_random 1719168 + 291150 291190 chrY 59373566 - 59196218 59196258 16097861
-40
-
-chain 3722 chrX_random 1719168 + 1703633 1706063 chr17 81195210 - 47362086 47364493 15646977
-109 441 439
-7 1805 1784
-68
-
-chain 3009 chrX_random 1719168 + 1705804 1705856 chrX 155270560 + 62632912 62632964 24180689
-52
-
-chain 2509 chrX_random 1719168 + 1708877 1708912 chrX 155270560 + 1109247 1109282 2078841
-35
-
-chain 2078 chrX_random 1719168 + 1706063 1706085 chr1 249250621 + 114909259 114909281 21967653
-22
-
-chain 1700 chrX_random 1719168 + 274379 274412 chrY 59373566 - 59139235 59139268 19436247
-33
-
-chain 990 chrX_random 1719168 + 1705283 1705342 chrX 155270560 + 119232530 119232589 19658805
-59
-
-chain 463 chrX_random 1719168 + 1703519 1703583 chrX 155270560 + 65440530 65440594 26501250
-64
-
-chain 2373402471 chrY 57772954 + 0 27228749 chrY 59373566 + 10000 28819361 24
-34821 50000 50000
-86563 30000 50000
-766173 50000 50000
-36556 50000 50000
-80121 90000 50000
-754004 100000 50000
-6846717 50000 50000
-276367 600000 50000
-813231 500000 3000000
-39401 400000 50000
-554624 100000 50000
-535761 1 0
-32919 1 0
-10 1 1
-12811 5 0
-18899 1 1
-121 5 4
-230478 1 0
-750 24 24
-14340 1 1
-43 1 1
-2095 1 0
-14635 9 0
-2781 1 0
-45022 6 5
-7151 1 0
-9343 0 628
-5417477 0 50006
-2175794 0 50000
-1481749 50000 50000
-4867933
-
-chain 46617811 chrY 57772954 + 57228749 57772954 chrY 59373566 + 58819361 59363566 80
-98295 50000 50000
-395910
-
diff --git a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.fasta.fai b/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.fasta.fai
deleted file mode 100644
index aa00476..0000000
--- a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.fasta.fai
+++ /dev/null
@@ -1,45 +0,0 @@
-chrM 16571 6 50 51
-chr1 247249719 16915 50 51
-chr2 242951149 252211635 50 51
-chr3 199501827 500021813 50 51
-chr4 191273063 703513683 50 51
-chr5 180857866 898612214 50 51
-chr6 170899992 1083087244 50 51
-chr7 158821424 1257405242 50 51
-chr8 146274826 1419403101 50 51
-chr9 140273252 1568603430 50 51
-chr10 135374737 1711682155 50 51
-chr11 134452384 1849764394 50 51
-chr12 132349534 1986905833 50 51
-chr13 114142980 2121902365 50 51
-chr14 106368585 2238328212 50 51
-chr15 100338915 2346824176 50 51
-chr16 88827254 2449169877 50 51
-chr17 78774742 2539773684 50 51
-chr18 76117153 2620123928 50 51
-chr19 63811651 2697763432 50 51
-chr20 62435964 2762851324 50 51
-chr21 46944323 2826536015 50 51
-chr22 49691432 2874419232 50 51
-chrX 154913754 2925104499 50 51
-chrY 57772954 3083116535 50 51
-chr1_random 1663265 3142044962 50 51
-chr2_random 185571 3143741506 50 51
-chr3_random 749256 3143930802 50 51
-chr4_random 842648 3144695057 50 51
-chr5_random 143687 3145554571 50 51
-chr6_random 1875562 3145701145 50 51
-chr7_random 549659 3147614232 50 51
-chr8_random 943810 3148174898 50 51
-chr9_random 1146434 3149137598 50 51
-chr10_random 113275 3150306975 50 51
-chr11_random 215294 3150422530 50 51
-chr13_random 186858 3150642144 50 51
-chr15_random 784346 3150832754 50 51
-chr16_random 105485 3151632801 50 51
-chr17_random 2617613 3151740410 50 51
-chr18_random 4262 3154410390 50 51
-chr19_random 301858 3154414752 50 51
-chr21_random 1679693 3154722662 50 51
-chr22_random 257318 3156435963 50 51
-chrX_random 1719168 3156698441 50 51
diff --git a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.dict b/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.dict
deleted file mode 100644
index 8dd3e5b..0000000
--- a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.dict
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD VN:1.0 SO:unsorted
- at SQ SN:chrM LN:16571 UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta M5:d2ed829b8a1628d16cbeee88e88e39eb
- at SQ SN:chr20 LN:1000000 UR:file:/Users/mhanna/src/Sting/Homo_sapiens_assembly18.trimmed.fasta M5:b4eac854d70893986ac578c53c2324f1
diff --git a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta b/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta
deleted file mode 100644
index 9b75d10..0000000
--- a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta
+++ /dev/null
@@ -1,16946 +0,0 @@
->chrM
-GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT
-CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC
-GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT
-ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA
-ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
-AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA
-AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC
-ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA
-ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA
-TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
-AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG
-TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA
-GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC
-TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT
-AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
-GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC
-CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG
-ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA
-GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG
-AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
-GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA
-TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA
-AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC
-AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG
-AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
-TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA
-GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA
-CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC
-TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT
-AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
-TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG
-AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG
-CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA
-TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT
-AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
-TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT
-TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC
-CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA
-TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA
-GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
-ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA
-AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA
-GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC
-CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct
-ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
-cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG
-TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC
-GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG
-AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA
-CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
-CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT
-ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC
-CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG
-ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg
-cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
-taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC
-ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA
-CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA
-AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC
-TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
-CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG
-ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA
-AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG
-CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC
-ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
-CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG
-CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC
-CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA
-TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC
-CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
-AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC
-CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC
-CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc
-cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC
-GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
-TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA
-GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT
-CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT
-CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC
-AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
-TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT
-CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC
-GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA
-AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA
-ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA
-TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC
-CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC
-ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC
-TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
-GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC
-GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT
-AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG
-CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA
-ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
-TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA
-GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT
-CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC
-AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC
-AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
-CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC
-ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC
-ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG
-GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG
-CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
-GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA
-GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA
-CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA
-GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC
-CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
-CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA
-ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT
-ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA
-TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC
-GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
-AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC
-CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC
-GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC
-TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC
-CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
-CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC
-CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT
-TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG
-GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA
-TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
-ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA
-TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG
-CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT
-TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA
-ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
-TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG
-ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG
-ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG
-ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA
-TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
-CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT
-ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG
-AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT
-ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA
-GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
-TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA
-ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG
-AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC
-CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT
-CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
-AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT
-TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT
-ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG
-CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT
-CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
-ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC
-CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT
-ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT
-AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA
-AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
-GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA
-CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC
-ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT
-TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA
-CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
-CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA
-ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC
-TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC
-ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC
-TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
-CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT
-CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC
-TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA
-ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC
-AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
-CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA
-GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA
-GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA
-CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC
-TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
-GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA
-CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC
-ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA
-GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA
-CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
-TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA
-TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC
-CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC
-CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC
-TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
-AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA
-CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC
-TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC
-TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT
-TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
-TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG
-TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA
-CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT
-CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA
-TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
-TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT
-ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC
-TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA
-ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC
-TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
-CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA
-ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA
-TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA
-ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC
-CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
-GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC
-CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA
-AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT
-CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG
-AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
-ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT
-AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT
-ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG
-AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC
-CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
-ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC
-AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG
-TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA
-CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA
-AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
-AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG
-TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA
-CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA
-CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT
-CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
-TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC
-CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT
-TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC
-CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT
-TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
-CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC
-CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT
-CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT
-GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA
-GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
-CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC
-GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA
-ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG
-ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA
-CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
-CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG
-CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC
-CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA
-GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA
-AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
-CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC
-GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT
-CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA
-TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT
-CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
-ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG
-GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG
-CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG
-TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT
-GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
-TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT
-CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA
-CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT
-TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC
-CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
-CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC
-CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT
-ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT
-ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC
-TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
-TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG
-AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC
-TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC
-AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA
-TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
-TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA
-CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA
-GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC
-CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG
-CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
-ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG
-ACATCACGATG
->chr20
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNGATCCAgaggtggaagaggaaggaagcttggaaccctata
-gagttgctgagtgccaggaccagatcctggccctaaacaggtggtaaggaaggagagagt
-gaaggaactgccaggtgacacactcccaccatggacctctgggatcctagctttaagaga
-tcccatcacccacatgaacgtttgaattgacagggggagctgcctggagagtaggcagat
-gcagagctcaagcctgtgcagagcccaggttttgtgagtgggacagttgcagcaaaacac
-aaccataggtgcccatccaccaaggcaggctctccatcttgctcagagtggctctagccc
-ttgctgactgctgggcagggagagagcagagctaacttcctcatgggacctgggtgtgtc
-tgatctgtgcacaccactatccaaccgatcccgaggctccaccctggccactcttgtgtg
-cacacagcacagcctctactgctacacctgagtactttgccagtggcctggaagcacttt
-gtcccccctggcacaaatggtgctggaccacgaggggccagagaacaaagccttgggcgt
-ggtcccaactcccaaatgtttgaacacacaagttggaatattgggctgagatctgtggcc
-agggcctgagtaggggagaagctcccactctcagaacactgagaaaagtgaggcatgggt
-ttctgggctggtacaggagctcgatgtgcttctctctacaagactggtgagggaaaggtg
-taacctgtttgtcagccacaacatcttcctaagggagccttgtgtccgggaaaaactgac
-agaccagtgatctgggtgcagaaggcttgagacaaaactagctggttgggccagctatgg
-ggcaaatgctggaaagaaacctggtcagggagcctgagctgagtggtccccacagtcatc
-tgcttggcaagaaaccctaggtcgcaggtgctagaccagctgcacacccacagcaacact
-gccatgcccaggatcctctgcccttgatcctgaatcaacagaccacttgcagatatactt
-cacagcccacgctgactctgccaagcacagacaaccactgggccccaggggagctgcagg
-tctcctggtcacctaatcttttttttttttatactttaagttttggggtacatgtgcaca
-acgtgcaggttacatatgtatacatgtgccatgttcatgtgctgcacccattaactcgtc
-atttaacattaggtatatctcctaatgctatccctcccccctccccccaccccacaacag
-gccctggtgccatggaatactatgcagccataaaaaatgatgagttcatgccctttgcag
-ggacatggatgaagctggaaaccatcattctcagcaaactatcaaactatcacaaggaca
-aaaaaccaaacactgcatgttttcactcataggtgggaattgaataatgagaacacatgg
-acacaggaaggggaacatcacacatcgggacctaatcttaagctaagtgtggctaagagc
-ctatctgctggcctttactattaagcactgcccactggattgcagcctgaattacaccgc
-caaacaaatactgtttcagcatacattaccagtgaaacccaatgcaggaacatagtcaaa
-aataaacacctggcatagagacttggccctctgaaaacacccagaaaaaagccagctata
-ttcaacatacatcactgtcaaaatatcaaggaaaatgaagaagaataaaacaaaaagtca
-aaaccaaatgataggaacttcaaaaagataaagtaacaccagctgtcttagatgagaaag
-aatcagcacacattcttgcaattcaaaaagtcagaatgtctccttacctccaaacaatca
-tactagctctcatcagattgaaatggctgaaatgacagacatagaattcatgatctggaa
-ggtaaggaagctcaagaacattcaggagaaagttgaaacccagtccaaggaagccagtaa
-agcaatccaagagtacagagataacatagccattttaagaaagaaccaaaagaaacttct
-gcaattgacaaattcattataggaattttgtaatacattcagaagcattaacaacagaat
-agatcaagttgaggaaagaatctcagagctcaaagatcagtcctttgaatcaacacagtc
-agacaaaactaaagaaaaaaatttaaaaataaaacctctaaaaaaatatggaattatgta
-aagataccaaacttacaacttatgggcattcctgaaagaggagaaagaataagtaacttg
-gaaaacatatttgaggatagtccatgaaaatttccccaatctccctagagaggctgacat
-gcaaattcaagaaatgcaaataacccctgtgagataactacaagataactatccccaaga
-cacatagtcataagattctccaaggtcaacgtgaaagaaaaaaatcttaagggcagctag
-agaaaagcctgaggtcacttatgaagggaagctcatcagactaacagcagacttctcagc
-agaaaccttacaaaccaagcaagattaggggcctatttttagcatccttaaagaaaagaa
-atttcagtgaagaattccatatcctgcaaaactaagcttcataaaagaaggagaaatagg
-ctgggcatggtggctcacacctgtaataccagcattttgggaggctcaggcaggaggatt
-gcttgagctcaagagtttgagaccagcctgggcaacatggcaaaaccctgtctcttctaa
-aaatacaaaaattacctgggcAAGACTCCATCACAAACAAACTAACAAACCAAAActatc
-aggtactatgctcactacctgggtgacaaaatcatttttacaccaaacccagtgacaagc
-aatttacccatgtaacaaacctgcatgtgtatcccctgaacctaaaataaaagttaaaaa
-aaaaagaaCTTTCATCAACatttcttgcagtgaaggtatgttagtgatgaacattctctg
-cttttattgcctgaaaatatctttattttgtattcatatttgacatatattctcactggg
-cataaaaattctaaattacaagtttttccccttttttgtattaaaaatttcattccaata
-tcttTCATATTGCCTTATTTGTAATGATGCCTTCTATCCTTCTTATCTTTGTTCCATTTA
-TAAGAAGTGTTCCCCAACCCCAGACTGATTAAAACCATTTTTTTAATTAAAAAAGCAAAA
-GAAAGAAACATTTTTATCTGAAGCTGTCTCAGACTCAGACACCACCCAATCTTCAGATTT
-CAAATAGCTTATACTCAAACATTTGGTAATATCAGCCCCTTAATGGTCTTCCTGGAGGGC
-AGATGCATTCTAGAGATGAGAACACGATCATGATTACGAATGCTACCACCACTACGAACG
-CACAAAAGTCACTGGTGTGATCCTTTCTCAGAACACTGTGGTAACTTCTGGACATTCTCT
-GCTGTTATCATTGCTTCTTCCTTCTGGGTTTTTTTCCCCCTTATATGGGCAGATAATTTT
-CTCCATTGGAATGAAAAAGTCTTGCTTCATGCTCTTtaactgtgtgaccttgggcgtatt
-actttactttggggcaaaccattttccttcttgaggaccaaatgtgctcttttataaaac
-gagcagttagaattagattgtctctctggacacggcttatgttgacaacctggatcacAT
-TAGAGGATCAcactgagacctttatgtcggcctcagttcctccatctgtaaagtagaggt
-tgggcttagattatAGATGATAAAGACACCAACTTTCctggaaaggattctggaaaggat
-tctgAACTTAGGCTCAGCCTCAGTAAGAAGGAGTTCTGTGATTAAACAGGGATGCCCACA
-CATCAGCAACAGAAATGGGCAGGTCAACCATGTATGCTGTGCCTCAGTGAAGATTTTATG
-CTATGCTGTGCATTTGATATCCATTCTCTATATTTGATATCCAATCTAAGATTATCTAGA
-AGGTCCTTTCCAAGACACTGATGAGATACATCTGTATAAATATATAACTCAGGATGAAAG
-CAACTTTTAACATTTAGCGTGTGCCTCTGCCTCTGATCTGATTACAGCCCACAGAGAAAT
-ATAAACAATACACAATACAGGCTAATGAAGAAGGGTGATAAGAtttttttttttttttga
-gacggaatttcactcttgtcacccaggctggagtgcaatggtgcaatcttggctcactgc
-aaccttcgcctcccggttcaagcgattctcctgcctcagcctcctgagtagatgggattg
-gaggtgcccaccaccacgcccggctaatttttgtattttttagtagagacagggtttcac
-catgttgtccacgctggtctcgaactcctgacctcaggtgatccgccagcctcagcctcc
-caaagtgctaggattacaggtgtgagccactgcaaccggccAAGGGTGATAAGattttaa
-aaatttatttaaaataCAGAAATTTCAAAAAGAGAGAAGTGCAGTGATAGCAAAATTGAT
-GCAAACTGTGCAAGCATGAAATCTATTTTATAGCTGAATCTACTTTTCTTGGTCCCAAGA
-TTCTATTTCCATTGGTTTTCAAATAGTTAATTCTATTGTTTTTTCAGGGAGATTACTAAA
-ATCACTAATAATTATTTTCCTACTGACACAAAATCTAAAAAGCACCATATAGACCTTCTC
-TCTCCATCTCCCCTTATCCTTATGTCACCTTACCCTACCCCAATACTCCAATGGCAGAGT
-ATCTACCCATGGCAGAGTAGAGAATATGTACACTAACAAAACCAGATGCACAGAGGTGGG
-GTATCCATCTCTGACTTGGCTGAGCTAGTCTAAGGAAGGAAGGCTCTGTGGCCATTGTCC
-TTGGAAGTCATTCTCACAGGTTGGTGGTATTCTCAAGTAGGTGGTGCTTGAGTGGCCCAA
-GAGCACCCACATGCTGCTATGCATTTTTCTGACAACCTCTTTATGATCTCTGACTTTGGC
-AGATCATCTTGCATCTCTCAATTGGAGAGTCACTTTTCTTATCTCCACAGAAAATTCTTA
-ATCAAGCTCCTGGTTTTCCTTTATAGCTTCTACTTTTTAAACTCACTTCTCCAACTTCAC
-CGCTACATCTCTGACAGATGAGAACATTAGAGATTCCCTGTTTTTCAAAAACAAAACAAA
-ACTCAGCAAAACTATAAATATACTAAGGGTAAGTCTGTATTATCTCCTGCCAAAATACAC
-CACCCTGCATTTTTTTAAATttttatcttttgtaggtacatagtaggtgtctatatttgt
-ggggtacatgagatgttttgatacaagcatgcaatgcataataaccacatcatggaaaat
-ggggtatccatcccctcaagcatttatcctttgtgttacaaattatctaattatacttta
-ttattttaaaatgtacaattaaattatttttgactatagtcacctcgttatgctattaaa
-taccaggtcttattcattctttctaactattttttgtacccagtaaccatcctcaccttc
-ccacacacgcccaccacctttcccagcctctgataaccatccttctactctctatctccc
-ttgaattcagtagttttgatttttagatttcacaaataagtgagaacatgcaatatttgt
-ctttatgttcctggcttatttcacttagcataatggcctccagttccatccatgttattg
-caaatgacagcatctctttcttttttatggctgaataatactccactgtgtataagttcc
-acattttctttatccactcatttgttgattgacacttacgttgcttctaaatcttggcta
-ttgtgaatagtgctgcaacaagcacaggtgtgcagatatctattcaatattcttatttcc
-ttttggaggggagtgtgtacctagcagtgggattgctggattgtatggtaactctatttt
-cagtttttttaggaacctccaaactgttctccatagtggttgtactatcttacgttcaca
-ccagtagcatacaagggtttccctttctccaaatccttgccagcatttgctattgcctgt
-cttttggataaaagccattttaactggagtgagatgatattccattgtagcttgattttc
-atttctctgatgatcagtgattttgagcaccttttcatctgcctgtttgccatttgtatg
-tcttcttttgagaatatctattcagatactttgcccatttttaagttggatcattagatt
-tttttcctatagaattgtttgagctctttgtatttcctgttattaatcccttgtcagaag
-ggtcgtttgcaaatattttctcccattctgtgggttgtcttttcactttgttgattgtgt
-gctttgctgtgcagaagctttttaacttgatgtgatcccatttgtccatttttgcttcga
-ttgcctttgtttgtgggttgctactcaagaaatttttgtccaaacatcctggagagattc
-cccagtttcttatagtagtttcatagtttgagatcttagctttaagtctttaatccattt
-gacttaatgttttgtatatggtgaaagacaggggtctagtttcattattctgcatatgga
-tatccagttttcccagcaccattttttaaagagactgtttttcccccaaagtatgttctt
-ggcaactttgtcaaaaatgagtttactgtagatgtgtggacttgtttctgtgttctctat
-tcttttccattgctctatgtgtctgtttttatactagtaccatgctgttttggttactat
-agctttgtagtataatttgaagtgaggtaatgtgattcctctagttttgttctttttgct
-taggatggctttggccatcctgcatttttAAcccttttcccattttcacccagaatactc
-gctggtggcacttgcagctgcagggtttaccctgagataactttgccacaaaatatctcg
-cctttattattattttcacatcgttctaatatatcgactttgaaaacacaaatcatcatt
-ctatttatagcatcttgttgttagcagtggtatttccatttacaaaatatagaaattctt
-gatcgctgaaaatgtcaaattctagaaagcatagcattcccatgttaacattgttctcaa
-acagttttgggccaaagagtcatttaatgaatccggttttttccaaaatagatgattctg
-attattcagatgattctgatgttagttctgtttaaaaataattccaagaacagtttgtat
-attttattttcacactgaacatcagtcagcctccagagcatgttaatgtaaaattaaatg
-aacatgggcagtgagctgcagttttttttctaaacagTGCAGCTGTTTAGAAAATTTTTT
-TAAAATTTTCCTGATTTCCTTGGTATTAAACATATGTGGGAGAAATACAGCTCAGCAAAC
-TCTTCCAGGAGATAAAATGCTGATCACTCCTACTGGGCAATTTCACAAATGTCTCCTATA
-TTTTTCTCCTTTGGTAGTGGGGATGGGGGGCATAATGTTACATTGGGCctctctcctctc
-tctctttctctctccctctcCTTTTAAAATGTTTCCTCTCTCTCAATATTTCATTTCTTA
-TTTGTATTTCTGAATGAGGGAAAAGAGTTGATGGGACAGCGGAACGGGAAAAAGAAGAGC
-ACCAATAAAACCTGTTTTCCTGTTTTCACTATTTTCATTCCAAATTCCTTCTGTCTCATA
-ATTGATGGAATCTTATGAACTTATTAGTTAAAAAGTGTCTTTCTTGTTTCACAGGAATTC
-ATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGCTATTGAACTG
-CCACAAGTGATATCTTTACACACCATTCTGCTGTCATTGGGTATGTACAAAGTGCTGCAT
-ACAGACAGAGGAGAAGGACAATTGAGCCCATCTAAAGTTAACAAAAACTTCCTCTTGGGG
-CTGTTTCTTTCCATCAGACCTTACAGTTCTACGGGATAATAGCTTATCTCATAAGGCCTC
-AGCTTTCTTTAATAATTTCTAGAAGCAGACGTTATTGTGTCATGCACACTCAGTGTTGCA
-AATTAATGGTCTGGTGATCTGGGTGGCATGGCATTTTCCCCTTCTCTGGTTCATCACCCA
-TGATAGACCAGTAAAGGTGACCACTTAAATTCCTTGCTGTGCAGTGTTCTGTATTCCTCA
-GGACACAGAGCTTCCTCTCTCCCAGGAGCCATGAATATCCTGATGCTGACCTTCATTATC
-TGTGGGTTGCTAACTCGGGTGACCAAAGGTAATGGAACCCTATAAAGCAGAGATGATGAC
-TAGGATGAGTTGTTGCCCTTGGGCTCCCCTGGTATCATGATGGGAAGAGAGGGAATCTGC
-AGGAAAAATCTGGGCCAACAAAGAGCAGCAGAATGCTCTTATTTTGGCAGCTCCATGCCC
-CTAGTCTCTGAGAATCTTTCTGTTAGGGGCATCTAGCAAGCTGGGATGTCCTCTGAGGCA
-TTTCTCCAAAGACAAGAATTTCCTTAATGCTCTGAGCCACCCTATCTGTCTCTCTACATA
-ACTATCCAATGTTAGTTCAGCCTCACTTCACTTCCATTTCGATTATTCTGTTGTATCTAT
-TTCATTGTTGTGTCCTATTAGTTCTCCTACCATCTTGAATTCTTCTTTGCCCGGAGGGTA
-CCTTCAGAGGGAGGCCCTCACTTTCATGTTCTTAGATATGGTGAACAAGTCCATTGACAG
-TTTGTAGATTCTGTAGCACTATCATATGGAAGAGACAATATATATGTTTGGGGTAGAAGT
-GGAAATAAGTGGAGTGAAGACAGGATAGACAGACTAGTGACCAATGGGGAGCTTCTAATT
-TTAGATGAATAGGAACAGTCTGTTTCCACTATTTAATAATGCTACTTTTGAAAATTGTTA
-ACTTTTTATTAAAAAATAATACTTGCAATTGACTTATGTATCAAGCAATCGATGGATTTA
-TAGGGTTTAAGGAAAAGAAAAATGTTTGTCTGTCCAAGAATACCAGTTCTTCAGTCTTCC
-CCTTCAGAATCAATCAATGTTACCAATTTCTTATATATCCTAGCAAATACAAATATATTT
-ATATTTGCATGTGTATACCTTTTAGATTTTTAAAAAATGCAATTGCAAATGCACCATGTG
-AATTGTTCTGCAATGTACTAGCAATATATTAGAGACATCTTATCCATACATAAACCTAGT
-TCATTATTTTTAATCGATAAGTAAAACTTTGAGGAGGAGCAGATGAATTGCCTCACATTA
-ATTACTCCGCTACTGATGAAAAATAGGTCTTTAATTATCAAAAACAATTCAGCAAGAAAA
-ATTTGTAAACAAATGTATGTCTTTTCATTTATGACTGGACACGTGGacacacacacacac
-acacacacacacacagtcaaaccacctaccagaaaagctgaactattcttctctcctatc
-accagttgcaagagtgtcagcttcccacaccctcatcagtcctttttgttttttctacta
-cattcagttttctactacattcagttttacagtctaatatgtgaaaatgatgtcctgatg
-tttgaattcatgacactttagttataaatgagtttgaacatccagtccattagatttcta
-aactttcttAATTATCTTTATATACTAAGAAATTTGGCTTTTGTTAAATTTGGAGGTGTT
-ATATGTTGCCTAGAAAGATGCTATTCATGTCTATTAAATGGTTATAACTGTGCCTATGAT
-CTGTTATGTCTTGATTCACATGTTGATGTAATGTGAGTTACAGAATTAATATCTACATTC
-ATTTCTGATTATAAACTGCTGTATTTGTTGAAAATTTGGAAATTTTGAAATTGTAAAGAA
-GTAAAAAAATTGTAAAGAAGTTAAAAGAGACAAAATATTTTTGATCTATTGTTCTTCCTC
-AGTTTTCTTATTTGAATAAAAATGTATAGCATACTTATAAATTTTCTATTATACTATTAG
-TATTTTCCCATTTACTATTTTCAAAAACTGTATTTCCAATGACTGTATAAATTTTATAGA
-ATGGATACTGTTTAAATTACTTAGCCAAATTGTTTTTGCATAAATAAGTGCATTTACATT
-TTATAGACAAGGATGGCTAGTATAACCTTTCTTATACATAAATCATTCAGCATAAAATTC
-CTGGAGATGTACTTTTTTCTGTCTGCTTCATGTGTTATCAATTTTTGAATACTTGCCAAG
-TCCtaaaaatgaaatattatatataaatatttaatttttatttatGTCTGTGAGTAATGG
-GGAAGTCGAACTTCAAATACATGCTTAATGTATATTTAACTTTTCTACAAATTGTCTATG
-TCTCTCTTTCTCTTTTATTTTGGAGAGGTAGTTTTCATTTCTTTTGATTTAGAGATTTTC
-ATTTTTGTGTTCTCTTATAGGTTTTGTTTTGAAATTTAGCTATTTAGTCTCTCTGGGCTT
-TATATTATGTGTTTTCAAGTGAGATAGCACCTGATGGCTTGTGAAGCAACTTTTTACCAA
-GCCAAGCTATCAGTGGACTGGTATCCATAGATATATtttaagttgatgctagctgattat
-atatctggtatgttttagaaagaactccacacatgggataatgttttggctagatggctc
-cCCTACTTAGAAACATACAATTGCTAGTCATATTTCTAATTTTAGGATTTCGAGATACTG
-GTGATGAAGATCACATGTCCTAACAACATAATAGTTCCAGACTGAAGTTCTTTGAAAAAA
-ATGACTGTTGTCACTTTAGAAAAAAAAAATTATGAATTATTCCcaattgccatcattcta
-ctgctaaaaccaaattcttggaattatctatgatttttctatatcctatgacactcatat
-ctatcaggaagtctattacatctgcctgcaaattatatccagaatgcaattattctcgcc
-acctccattgctgccactctgattctagtcaccatcatctctcacctgtgttattgccat
-agcttcctcatgagatctgtccttctgctcttccctgccaccatcttgtgaagacacata
-gtgcatgatccgcttacactggaagtcagatcatgtacttttgctcaaaactctgctatg
-gccccctctatactcagagcggtaacaagagtccatacagtggctcacctggccctgcag
-gatctggcccttatgacctctctcacctcatctcctactattatagtccttgttcactcc
-actacagccacacaagccccagtgctcttccccaaacatatcagacttactcaacccata
-gagctttgtttgtttcctctgcctagaatgtacttgcctcagatactggtgtgactaatt
-cctttacctccttcaagctgtttaatcatcaccttgttacacaggcttgtgcaactcctg
-tttatgaatcttctattacccttaaatctattctcccttctttctgcaaaccatttgtca
-ccttttcatctacaaaataatgtacttttttattAAGGTAAAATATACATTTAAAAATTA
-CCATCCTTACCATGTTTTTACCATatttttatgtatacctgatggctgtttgtatgtctt
-ctgttgagaaatgtctattcaaatcttttgcctgttttaaaatcagattatttgtttttg
-tttgctatggagttttttgagctccttatattaatatactttttgttgttaattcctcgt
-cagatggatagcttgcaaatattttctcctactctgtgggctacatcttcactttgttga
-ttatttcctttgctgtgcacaagctttttagtttgatgtaatcctaattgcctatttttg
-ctttggttgcccgtgcttttgaggtcttacccaagaaatctttgccaagaccaacgtcct
-gaagtgtttccctaatgtttttttcaggtagttccatagtttcaggtcttagatttaagt
-ctgtaaAACCATACAGTCTAGCAGGGAGTGCatttactttttattatctgtctccctctg
-ctagaaagtcagctccatgtgatttttgtctgtttagttcacagatgtacctcaagggcc
-caggatagtgcctgtgccatagtaggggcccaaaactttgatgactgtgtgaCTATAGCC
-TAATTTAAGAATGGAGGGGATAATTTAAAAGCAGTAGGAAGGAATGTAAGTGAGAAACAA
-TTTTGAAGAATAATTGACAGAACAAGGCGATTCAAAGACAAAGGAGAAGAAGAGAGCCAA
-GATGACATATTTCAAGTATGGATAATGCTGGAGGAAAAAAATTAAGATATAAATCTTTGT
-AGATGTGAGGAACGAAGAAGCAAGGTTAGAGTCTGTCTTGCACAAAAGAAGTGGAAGGTC
-TAGACTTGAAACTTATAGAAAATTCCACGAAGTACAAAGTAAAATCGAGCCAGTAAAATA
-ACAAAGATAGAATAAATGACTCTAGAGGAGTGAAGGTAGAATAAATAATTGGTGAAGCTG
-GACTAGAGCCAACATTTCCCAGAGGATAAAATATAAACCAAATTATTGTGAGCCTAatat
-atacatacatacatacatctatatatgttttatatatatTATCACATTAAGTTCAAATAA
-GGTTGTTTAGAAAATTActtgctcttctgcacatataccaggcttcctcctccatagagc
-cttatctctagctgcttcctctgcctagaatacacttATCTAGGTACTCCTTGGGCAATT
-GTCTTGAGAAAGATGATCATGCCGTTTACTgcttgataaatgaacatacaatgcagcaca
-ctagtttccctttagatttatatcctcacccctcaaatgagtagtcacactgcttggaaa
-tcctactgcatttctcttgtaaatgaaccttccttcttttttttttttttttgagacaga
-gtctttctctgtcaccaggctggactgcagtggcccaatctcggctcattgcaaccgcca
-actccctggttcaagtgattctcctgcctcagcctcccgagtagctgggatcacaggcat
-gtgccaccacatccagctaatttttatatttttagtagagacaggttttcaccaggttgg
-ccaggatggtctcgatctcctgaccctgtgatccaccctcctcggcttcccaaagtgctg
-ggattacaggtttgtaccaccacacccagccatcttccctcttttttagacaactatttt
-gtcctgacctttatttgtcttttattttcctgctcctctcctctacatggctctccccct
-cagtttatcccatgccccatttatttaaacaattcaaataggaagttttcactcatttcc
-tctgtcccctttgccataaatggagaaacgtgtcttctccatctaaagatcagtctgctc
-tgtgtgaatttgtgactatgcccttctgtcatctcatcaccctattctatattaatctct
-ccttttctgcttttttttttttttttttgagatggagtcttgctcttgttgcccaggctg
-gaatgcagtggcacaatcttggcttactgcaaccttcgcctcccaggttcaagtgattct
-cctgcctcagcatcctgagtagctgggactacaggtgctcgccaccatgcccagctaatt
-tttgtattttttagtagagacagggtttcaccatggccaggctggtctcgaactcctgaa
-ctcaggtgatctgcccgcctcgatctcccaaagtgctgggattacatgtgtgagccactg
-cgcccagactgcttgtctcttttctcattgcttgcaagcaccatttggtatttctcgttc
-ttcaaaacaaacctgaaagctttcccttaaccttacattgctctctaacaagttatttat
-ttctctgcttttctttggatctaaacttcttaagagtttcatctacaggtcctgcattca
-cttctctctcattcacattttgaccaactgcaatttggtttcttttttcataccactcgg
-aagctgctctcctcagtatgaagttaccttcatactactaaaagcatggacattttcctg
-ccttcatcatttttttttaacctctcagcagtatttgactacaaaatgaccactctgtcc
-tttaagaaacagtctcctctcctgCTTAATGTAGTCACATCTGATACAACTTTCCCCATA
-ACCTTTTATGCATTTTCTGTTTTCATGCATATCAGCCCAACTTGCAATTGTCAGTATCTC
-CAGTCTTTCAACAACTGCTTGTGAAATACCCCTGTACAGGGCAATCCAGAAATGCCAGAA
-AATTATCAGCTGTCTCTGGATCATCTGTCAACTATGGGGGAAGCTGGATAAATAGTCCAG
-GTCCTTTGAGCCTCATGTAGAATAACTTTGAGGCTTGGTAATATTTTTTTTTTCCTGTGG
-TAATTCCCTTATTTGCAGTTCAAGGCTATTATGGGAAGAAAACATAAATGGATGTTAGTT
-CTTCAAGGTTTTTACTGTAACTGTGCACCCTTTCATTCTTCAAGGTTTTTCTGTAACACT
-GCACCTTCAGGACCTGATGCCCAATTAAACATTTTTTTAAGTTTTTTGGTTTTTTTTTAA
-TAAAAACTAAATGCTATTTTTTCttctacttttagttgatgtgtaataattgttcatatt
-tagaagatgcagagtgatattttgatacatgtatacaatgtgtaatgatcaaatcagggt
-aattagcatatctatcacctcaaacatttgtcatttttttatattgggaacattcagaat
-cgtctcttctagctatttgaaaatatacagtaaatgattgttaactaccgtcaccctaca
-gtgctatagaacagtggaccccttttggcaccagggaccagttttgtggaagacagtttt
-ttcgacgaggtgaaggtggtggtggggatggtttcaggatgaaactgttccacctcaggt
-catcaggcattagagtctcacaaggaacacacatcctagatccctcacatgcacagttca
-caatagggttcatgctcctatgagactctaatgccttggctgatctgacaagagatggag
-ctcaggtggtgatgcttgcacacctgctgttcaccttttgctgtgcagcctggttcctaa
-caggccatggaccagtacccattggctgcccaggggttggggacccctgctataggatgc
-tggaactttttcctcctatctaggtgtaattttctatctgttaaccaacctctctctatc
-ctcctttcccttcccagcctctagtaatcattattctacagtctacttctatgaactcaa
-cttttttagctcctgcttatgaatgaaaacatgtggtatttatctttttgtgtctatttc
-acataacggaatgtaacatgtcccccaggctcatccatgAGTCTGAGGCTTATTTGTAGC
-CTGGCTGCTGGGCTTCCCTGTGGGATTGTCCTCTGAGCAAACAGAACACAGCCATCCTGC
-TGGCCAGCAGTTGATAGATGATCTCATGATAATAACAGGTTATAACTCACCTTTTCTTGG
-ATTTCTTGCTTTCCTGATTTCTACATTTCTCCACTGATTTTTTTTAAGGAGGAATTGTCT
-CTCAACTAAACTATTATATTCAAATCTTTGCTGGAGCTCTGCTCTGCTGGGGGTCTGCTT
-TAAGACTCTAGAGTCTTattctcctgttttgatctgacttatcttattggtccttttaag
-tcgtttcctcttatctgatctcttatctcttaatattgaaactcactagaatttaattct
-agtcctctttttttctcatattattccaacccaccatggtttaccaatttctgtacttta
-aatgctatccataagcaatcacatttattgatttgcatatgtcgaaccaaccttgcattc
-caaggataaaggctacttgatcgtagtggataagctttttgatgtgctgctggattcagt
-ttgctactattttgttcaggatttttgcactgatgttcatcaaggatactggcctgaaat
-tttttttttcttgtgtctctgctaggttttggtctcaggatgatgctggcctcatagaat
-aagttaaagcggagtcctgccttctcaattttgggtgaatagtttcagtaggaatgatac
-cagctcttctttgtatatctggtagaattcagctgtgaatccatctggtcctgggctttt
-CATTTTCATCCTTTCTTTCTAGGTTTCGTATCAGTCTCAGTATGctctctctctctccgt
-ccctctctttttctacatttctccttttctcCATACAACTTCTTTGATGGCACATAGCAC
-AATTTTAATATACACTTTTTGTTCTCCTGTTTGTCTCTTACAATGGCTTTTTGTATTTGA
-CATCATATTAGTCTAGATGTCAGTCAGTGTAAATTTTTGAATGAATGAAAAGTTGTTATG
-TTGATGCCAGAGTTAAAAATTTGACCTATATTTTATTCTCTACAGGTAGCTTTGAACCCC
-AAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGT
-ACATACTTCTTTGTAGGAACAAGCTATCATGCTGCATTTCTATAATATCACATGAATATA
-CTCGACGACCAGCATTTCCTGTGATTCACCTAGAGGATATAACATTGGATTATAGTGATG
-TGGACTCTTTTACTGGTTCCCCAGTATCTATGTTGAATGATCTGATAACATTTGACACAA
-CTAAATTTGGAGAAACCATGACACCTGAGACCAATACTCCTGAGACTACTATGCCACCAT
-CTGAGGCCACTACTCCCGAGACTACTATGCCACCATCTGAGACTGCTACTTCCGAGACTA
-TGCCACCACCTTCTCAGACAGCTCTTACTCATAATTAATTAACATTTACTTCTGGTATGG
-AACAACTAGAAATACTGCTGGAAATAATATCCAAAGAGCTGATTCTACCAATCCAATTTC
-ACCAGGAAAATTCCATCAGGGATTGGATGACCATGGGGATGGACATAATTGCTACTACCA
-ACACAACAGCCAAGAGAGTTGCCTTACAATTAGAAATGTGTAGACAGAAATGTATAGAAG
-ATACAAGGATTCTCTTAATTGGACTTAAATTCTTTATCTGTCTTCCTCCGATGTACTCAA
-ATATATGAGCTAATTTTTGTCTTAAGTGAACATTTGTATATCTATGTATTTTTCCATGCC
-AAAAACAAAAACGAAGACCATTGTTTGGAGCTGCCTCTTATGACTAAGACAAGAATTTTT
-ACTTTAACAGTGCCTGGCCCACTACTATCGTATATAGGAGAACATATAAAAGCATATAGA
-AAGTTCCAGATGAATGTTCCCTTCTCTACCCTCCACCTTTTATTGTAAGTTCTGACCCTA
-AATACTTTTCTGTGTCATGACGTCAAATTTTGTTTAAGGTTCTAGCTGGTAACTAACAGA
-GTCAGAAGCTAATTCTTTCATTCAACACAAGCACTGATCTAACTGGATAGAGATAAAAGT
-GGGACTTGCCTTGAGAGTACATCATATTAAATTAAAAGCTGCATCTCAAATTCTACTTAT
-CTTTCCAATCTTCTTTCCACTTAGAATTCCAACTTCCAAGTATGGCAGCCTCATAACATG
-CCTCTTCAGGTCTCTGTGTTGTCCATGAATGTTAGTTGTGTGCAGTGTTTCTATGCTTTG
-TATGGCTGTACGCATGTGACTGCTGTTTGTATGGCAACAGGTGGGTCAGTAAGTGTCTTC
-TATGATACTACAGAGAAGCGGTTATTAACTATAAAGTTGATTAGGttttttttttttttt
-gagacagagtctagctctgtcgcccaagctggagtgcagtggcatgatctcggctcactg
-caagctctgcctcctgggttaacgccattctcctgcctcaggctcccgagtaactgggac
-tacaggcacccactaccacacctggctaattttttgtatttttagtagagaggggtttca
-ccatgttagccaggatggtctcgatctcctaacctcatgatccatccgccttggcctccc
-aaaatgctgggattacaggtgtgagctactgtgcccggctGATTAttattttttttaagt
-tccaggatagaagtgtagaacatgtaggtttgttacataggtatacatgtgccatgatgg
-tttgctgcacctatcaacgcatcatctaggttttaagtcccgcatgcattagctatttgt
-cttaatgctctgcctccccttccccacacaccctgactggcccccatgtgtcacgttccc
-ctccctgtgtccatgtgttcttattgttcaattcccacttatgagtgagaacacgtggtg
-tttggttttctgttcctgtgttagtttactgaagatgatggcttcgagcttcatccatgt
-ccctgcaaagagcatgatctcattcctttttatggctgcatagtattccatggtgtatat
-gtaccacattttctttatgcagtctatcattgatgggcatttgggttggttccatgtctt
-tgctattgtaaatagtgctgcagtaaacatacgtgtgcatgtgtctttataatagaatga
-tttatattcctttggatatatacccagtaatgggattgctgggtcaaatggtatttctgg
-ttctacatccttgaggaatcgccacactgtcttccacaatggttgaactaatttacattc
-ccaccaacagtgtaaaagtattcttatttctccacagccttgccagcatctattgtttct
-tgactttttaataattgccattctgactggcatgagatagtatctcattgtggttttgat
-ttgcatttctctaatgatcagtgatgttgagcttcctttcatacgtttgttggctgcata
-aatgtcttcttttgagaagtgtctgttcatatcctttgcccactttttgatgtttttttt
-ttcttgtaaatttaagttcttgtagattctggatattagacctttgttagctgggtagat
-tgcaaagcgttcctcccattctgtaggctgcatgttcaccctgatgatagttttttttgc
-tgtgcagaagctctttcatttaattagatcccatttgacaattttggcttttgttgcaat
-tgcttttggtattttcttcatgaagtctttgcccatgcctatgtcctaaatggtattgcc
-taggttttcttctagggtttttatggttttgggtattacatttaagtctttaatccatct
-tgagttaatttttgtataaggtgtaaagaaggggtcccgattcagttttctccatatggc
-tagccagttttctcagcaccatttattaaatatggatcaaattcacacataacactatta
-accttaaatgtaaatgggctaaatgccccaattaaaagacacagactggcaaattggata
-gagtcaagacccattggtgtgctgtattcaggagacccatcacacatgcaaagacacaca
-taggctcaaaataaagggatggaggaaaatttaccaagcagatagaaagaacaaaatagc
-aggggttgcaatcccagtctctgacaaaacagactttaaaccaacaaagatcaaaaaaga
-caagagcattacataacggtaaagtgatcaattcaacaactagagctaactatcctaata
-tatatgcacccaatacaggagcactcagattcataaaacaagttcttagaggcctacaaa
-gagacttagactcccacacaataatagttggagactttaacactcagtgtcaatattaga
-cagatcaatgagacagaaaattaacaaggatattgaggacttgaactcagctctggatca
-agtggacctaatagacatctacagaactctccaccccaaatcaacagaatgtacattcgt
-ctcagtgccacatgacacttattctaaaatcgaccacataattggaagtaaaacactcct
-caggaaatgcaaaagaactgaTTAGTTATTAATAAATTGGGCTGAGGCTTGGGCGCTACT
-GAAAGCCACAATATCAGATGCCAGAATGTCTCAAAATCAAAAAGGTTTTTTCCTCTAATT
-ATTTTTTATGTGATCCAAGCCAAGCTGCCAGTGACTATGGCTGTAGTTTGGATGTTGACC
-ATCAGACCACTGACCTTTCAGTAGACCTCATATTCTAATAGGTCTTAGACCACCAGTtag
-ggtgtccatcattcagatttgattgggactgaggggcttcccagaacatgggaattagag
-agctaaaatcaagaaaatccagagtaaattgggacaagttgatcaccctCACTTCAGTGT
-ACTTCTGTCTAGCAAGCTATTTTTCCATTTTTCATGGCTATACCTCATCACATAGGTCAT
-ACATTGGCTTTTCACAGAATCAGTCTAGGGTGCTCTTTTTCCATATTTTTGCCTCAACTG
-TCATTTCCTGAAACACACTCCTTGAGCATGCAGAACACCTTCCATTCTACTTTGTATTAT
-TTTCTTCCCATCATTTGAACTCTGAAATCATTTTGAGTATTTACTCTCTCTCTGATTTTT
-TTTACTAACTTATGGCCTAACACCCCTGCTATAATGTACATATAGTCCTCATCTCTTGgt
-cttgttgacctatgtgatccaaactgcaagaacagtgcgtcacacatgagaaatgctcaa
-taaaaatttgAGAACAAATTATTCAGGCAGTTATCTTAATATATATGAGAAGGTTATATA
-ATATAAAAcagtagtcttcaaactgcaatactggttacaaaaagatttttcaagctatac
-atattgatagtttaaaggaataaaatttcagaccctcaagttccaaatttcttatgatgt
-tttggagcattcttaacaggctcttcttttataactccaatttctcaattttccttctcc
-cactctgaaaagaaaacttacctctcacccaccctttatctgacaatcatggattgccct
-gagtgaacaaacctccagtggacaattgaaatactagtgctggTattcagaaagtgaata
-atcatagactttgaataaaaatcctttggaaataaaagtgtttttaatttttttgtttac
-aaaagcaatgatggggtgtcaatcaagttgatggttaatattaaatagatctttgaagat
-aaactttaataatagcctactatgaaattttttagcatatcacttggaagaggttaaaag
-aactgtgtaaacattagagtcttatgttcaaagagatttcacaataagctacaatgtatg
-tctatgttttgtcacagagaaatgtgatagaatgattaataaaagacttgcaaacacaaa
-aatatagtacattaggatcaaattttgcagagaagtttgaataaaaactaaagttttaaa
-aagaaaaaagatacaatgttcccaattgctaaaaaagagcttctttgcatatttattaaa
-tgaattattgtgattagcaaattgtcatgcattcatattccattggatgtatttagtatt
-tagttgttacatgtcaatatttgtaatatgctattagttatctttttatgattaaaattt
-aagatgaaatagtttatttcccaattttaaattgtattgggaaaatacacactttATTTT
-TATACCTAGCATAGACTTTTTGTTCCTTCTAATTGGAAAAAGGCTTTGCAATTTGCAATT
-GGTATATGTGTGACTTCTAGAAATGTGGTGTTCTttttttgttttttgtttttttgtttt
-ttttgagatggagtctcactctgtcgcccaggctggagtgcagtggcgccatctcggctc
-actgcaagctctgcctcccgggttcacgccattctcctgcctcagcctccctagcagctg
-ggactacaggagcacgccgccatgcccggctaatttttgtatttttagtagagacggggt
-ttcaccctgttagccaggatggtctagatctcctgacctcgtgatccgcccaccttggcc
-tcccaaagtgctgggattacaggtgtgagccaccgcgcccggccCAGGAATGCTCTTAAC
-CACTTCATCAAGCATCAAGGTTGGCACTGTCTAGATGTTGGTTTTGATTGCCAACCTACA
-AAAGAAAAGGGAAATTATAAAAGAGAAAATTAACAAGTGAGTACAGTTTCAAAATCTGTC
-CTGCAAATGTGTTTTAAACCAAAGAAATCATCTTTGGCATGGGCTATTTGCTTTATAGTC
-ATTCAGAATTGCTTGGTCTCTGTCTCCTGAAGACTGTGGCTAGGATTATTCCTGATGAAT
-GAGAAAGTTACCATAAATCAAAAATAAAATGAATAGAAAACTTAACAGTTGACTCTCAGA
-AGAAGGTATCTTCCCTCACTTTGCACTGGTtatatatatatatatacacacacatacata
-taATTGTATAATATGTATTAttttataaattgatttagaaggtacaagtgttgttttctt
-atatgcatatattacatagtggtgaagtctgggcttttagtttagccatcacccaaatag
-tgtacattgtacccattaagtaatttctcatttcttagcccccttctacccttccaagtt
-tccagtgtctattacccactccttatgtccatgtgtatacttagtttccacttgtgagaa
-catgtagtatttgactttctgtttctgagttatttcacttcagataatgAAAACATTCAC
-TTCAGATAATGAAAACACACTTTTCAAAATTCAAAGAGGTTTGAAAAGCTCATGGCCTAA
-TACCCCCACTATAAATTTTATTTTTAAACTGTTCATACTCCTAGAATGAACAGAGGCTTC
-AAACACTATCTGGTATAAACTGATGATGATTCTTCTACTACTGTGATCATTCTGTTTTTC
-TATGATTCCTGGATTTTCCTTTTCCATGAATGTGGGCTTTGCAGCATAACTTCTAGTTTG
-TTTATATCATTGCCCTTTAGGATCTCCTGTAGGCTCAGTAATCTATCACTTCCCTATATG
-GGACTGACCTCCAAATTACTGACTTTATATGTTCTCTCTCTCTCTCTCTCtgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTTAGTATTTGCATTTTG
-CCACATTCTTATATAGTTTCCAGCTCAAGTCTGAAATTCTCTACCtctttatctatgctg
-tccatattaggtatatgatttgataagttagacatgtgacatatatttcccccattctct
-gggttgttttttcattatatcaatggtgtcttttgaagtagagcagtttttaattttgat
-gaagttctcttttttaaaaacacttttctttttggtgtcatatctaagaaatcattccct
-aatttaaggtcataaaggcttattcttgtgttttcttctaagggttttagctttcacatt
-tagctgtacgatcctttttaatttaatttttttgtatgatgtaaggtaggggtccaaatt
-cattcttttgcatgtggctctccagtttctccaacactatttgataaaaagactatttac
-ccactgaattgtctggacacccttatagaaaatcaattaataataaatgtGataatttgg
-gcagatctttggagagaaagcaccaagagtggatggagaggcaacactgacaccaaagct
-gaagagagaggaagctggaatctctgcatgaggtgcctgaacattagggctagttcctga
-ccctgagtggctcctggggaaggggtaagtaaggggactaaggaacatcccgcttttgcc
-atggacctctgggatcatagctacagggtaccccatgtccctcatggatttgtaggctag
-cagggagcaggcagagacagggcttcagccagtgtgaagcccaggagcttttgtgcatgg
-ggcagctctggcagcgcatgaccgcaggtgcccatccccaagggctccccatcttcttct
-gagaggctgtagccccagctgactgctggacctggagagagtggcgccagctttgccatg
-ggactggggtgcatctgttctgcaggctctcctgcctgccagcccctcccatggcccctg
-cctagccaccctgcaggagcatgagcacagcacagcctccaccactaagccggagtgctt
-tgctccacctgagtacattcccagtaacctgggagcacttcagatccctcagtgcagctg
-gagcttgaccccaagccacagatcatccccgtgccccagggctgcagcacacagcttggg
-agcatgcagctgagatctgtggctgacaggcaagtagaggagaggcccccaatatcagaa
-cataaagggggcaagatgtgtgggttcatgggccagcttgggagcaaggtgtgcctccct
-ctgcagggttggtctggaaagggtgtggcccatctccctgccatggcctctgcccaagga
-agccccacagcctggaacacctaacgaaacacagaaatgatgccagtgatcagggtgggg
-tccctaaaggcccaagagcagatctggtgaggagttttctctcccactccactcaccata
-gaacatgcctgcaaatggaaggacatgcaaaagagctgagtaacagcctatgtaccagtc
-actacttaagcatcaatgactagatctcagccccaactacagcaccaaaaatgattctgc
-taatatacacccctgtgaaaccaagtgcaagactttgcccatacataaagatcctgtaca
-gagccacggacctctgaaaacatccagaaatgaactcaactgactatattcaacttacac
-cacatttaaaagaaaaccagcccccctcccaccagaagagaaagaatcaatgcaagaacc
-ccagcagttcaaaaagccagggtgtccccttacctcaaaatcagcccactatctccccag
-cagtggtccttaaccagactgaaatgacagacatagaattcagaatccaaatggcaagaa
-gctcattgagatttaggagaaagttaaaatccaatccaaggaatccagtaaaatgattca
-agagctgaaagatgaaatagccattttaagaaggaaccaaactaaacttctagaactgaa
-aaatttgctacaataatttcataatatgacagtataacagtattaacagaatagaccaag
-ctgaggaaagaatctcagagctcaaaggctggtccttcaaatgaacaaagtcagaaagaa
-aaaatctttaaaactgaacaaaaccaccaagaaatatgagattatgtacagaaacaaaac
-ttctgacacactagcattcccgagaggagggaaagagagtgaacagcttggaaaatatat
-ttgaggatatactccatgaaaatttccctaatctcactagagaggttgacatgcaaattc
-aagaaatacagagaaccccagctagataaaatacaacatgaccatcccaagaaacatagt
-catcagatttgccaaggtcagcatgaaggaaaaaaaatcttaaagccagctagaaagaag
-ggtcatgtcatatgtaaagagaaccccatcaggctaacaccagacctctcagcagaaacc
-tgacaaaccagaagagattaggggcctttttcagaatccttaaagaaaagaaattctaac
-caagaatttcaaatcccatcaaactaagcttaataaacaaagaggaaataaaatatttct
-cagacaagcaaatgctgaggaaattcatcacaaccagatatgcctccttacaagagattc
-ttaagggagctctaaacctacaatcaaaagaacaacacctgctacaaaaaaaaaaaaaaa
-aacatacttatgcacataaagacactataaagcaactacactatcaagtctacataataa
-ccagctaacaacacaatgacaggataaaaatctcgcatatcaatactaaccatgaatgta
-aatggactaaacaacccacttaaaggacacagtgtagcaagattgataaaaagacaagac
-ccaactatctgctgtctttaagagacctacctcacatgtaactacacccacaggctcaga
-gtaaagggataaagaaagatctgtcacacaaatggaaaacaaaaaagagcatgagttgtt
-attcttatatcagataaaacagactttaaatcaacaactatgaagagggacaaagaaggg
-cattacataataataaaggatacaattcagtgagaagacttaactgttgggcctggagag
-agtgggaccacctttgccatgggactggggtgcatctgttctgcaggccctcctacctgt
-agcccctccgaaggcccctgcctagccaccctgcagaagcatgtgcacagtgcagcctcc
-actgccaagcctgagtgctttgctccacctgaatatgtttatattctaaacatatatgtt
-cccaacattgaggcacccagattcataaaacaagttcttcttaacctataaaaagatgta
-gatagccatgcaataatagtgggagacttcaacaccctactgagagtgttagacaaatca
-ctgaggcagaaaattaaccaaaaaatcctggacttcaactcaacgtttgaccaactagac
-ctaacagacacctacaaaatattccacccaacaacaacagaatataacttccttcttctc
-tttggcacgtggaacatattccaagattgaccacatgctcagtcataaagcaagtctcaa
-taaatttaaaaaagtcatgctgagcccattctcaggccacagtttaataaaaatagaaat
-gaatatcaagaagatctcttaaaattacacaaatacatagaaatgctcctgatacctggg
-taaacatcaaattacagcagaaaattaaaaaattatctgaattttttattaaaataggga
-cacaatttaccgaaatatctgtgatacagccaaagcagtgttaagggaaatttatagtgc
-taaacgtcatcatcaagaagttagaaagatctcagattaaccatcaaagtttgcacctag
-aactagaaagaaaagaacaaaccaaccccaaagctagcagaagaaaaaaaaattactaaa
-attagaaaagaactgaaaaaaattgagatgcaaaattccatagaaaggaccaataaagcc
-aaaaggtggttttttgaaagaataaaaaaggttgatagactgctagctacataaccatga
-agaaaaaagaagaccaaaataaatacaataaaaaatgaagaagatgacattacaatgaat
-cccacagaaatacaaaagatactcagagatcattttgaacaactctatgcacacaaattg
-gaaaatctagaggaaatggataaattcctggaaatataaaacctcccaatattaaagcca
-aaggaacatgaaaacctgaacaatcaataaacaagttcctaaactgaatcaataataaaa
-acctaccagcccaaaaaaaccctggaagagatggattcacagcctaattctaccagacat
-aaaaagaactggtatcaattctactgaaactattccaaaaaaatctaggaggagaggctc
-ttccctaactcagtctatgaagccagcatcagccagataccaaaatctgtcagagacaca
-aataaagaaaacctcagaccaatatccctgattaacatagatgcaaaaattttcaacaaa
-atactaggaaaccaatcccagcaacagatcaaaaaattaatacatcagaatcaagtaggc
-tttattcctgggatgcaaggctggctcaatatatgcaaatcaataaatgtgattcaccac
-ataatcagaattaaaagcaaaaaaatatgatcatctcaatagatgcagaaaaggatttga
-aaacaatccaacgcaccttaatgataaaaacccacaacagactaggcactgaaggaacat
-accgtaaaataatgagccatctatgacaaacccatagccacgatcattctgaactggtaa
-aagccggaaccattccctttcagaactgcaacaagacaaggatgcccactctcaccatgc
-ctattcaacatagtactggaagtgctactagagcaatcaggcaagaaaaagaaataaaag
-gcatccaaataggaaaagaagaagtcaaactatccctcattgctgatgatatgattctac
-acctggaaaaccccaaatactctggcaagaggcttataatactgatgaacaacttctgta
-aagtctcaggatacaatatcaatgtcaatgtacatttctatacacaataaccttcaacct
-gagagtccaatcaagaacacaatcccatttataatagccataaaaaatgaaaatccctag
-gaatacagctaaccaaggaagtgaaaggtctccacaaggagaactacaaaatacttctgc
-aagaaatcagagatgacacaaataaatataaacaattccatactcatatatcaaaaagat
-caatgtcatttaaatggctatacattccaaagcaatctacagattcaatgctatttctat
-caaactacaaaaactgcttttcacagaattataaaaaaactattctacaattcatatgga
-atccaaaaagtacccaaatcaccaaagcaatcctaagcaaaaggaacaaagccagaggca
-tcacattatctgacttcaaactatattataaacccacagtaaccaaaacagctgatactg
-gtacaaaaataaacatatcactaatggaacagaatagacaacccagaaatgaagccacac
-acctacagacatctgatctttgataaagacaacaaaaataagcacagggaaaagaccccc
-tattcaataaacggtgcttgggtagctggctaaccatatgcagaagaatgaaagtggacc
-cctgcccttcaccatatataaaaattaactccacaaggattaaatatttaaatgtaagat
-cttaaactataagaatcctggaagaaaacctggaaatacccttctcaacatccacgttgg
-taaagaattcttggctaagtctccaaaagcaattgcaacaaaaacaaaaattggcaagtg
-ggacctaattaaactaaagagcttctacacagcaaaagaaactctcaacagagtaaacag
-acaacctacagaatgggagaaaatattcgcaaactatacatccaataaaggtctaatatc
-cagaatctataaggaaattaattcaataagcaaaaaaaaatcccattaaaaatgggcaaa
-agttataaacagacacttctcaaaagacatacaagtggccaaaaaacatgaagaattctc
-atcatcactaatcatcaaagaaaggcaaatcaaagcaattagataccatctcataccagt
-cagaatggccattattcaaaagtcaaataatagcagaagctagtgaagctgtagagaaaa
-ggaaacacatacactcttggtgggaacaaaaactagttctgccagtttggaaagcagttt
-ggagatttcttaaggaacttaaaaatagagctaccatttgacccagaaatctcattagtg
-ggtatctatgcaaaagaaaacaaatcattctaccaaaaagacacatgcagccctatgttc
-atcgcagcactattcccaatagtaaagacatgaaatcaacctatgtgctcatcaatcatc
-aatggtggattggataaagacaatgtgttacatattcaacatgaaatactatgcatccat
-aaaaaagaatgaaatcatgttttctgcagcaacatggatgcagctggagaccataattct
-aagcaaattaatgcaggaacagaaaaccaaatactgtatgttctcacttataagtaggag
-caaaacattgtgtagtcatcaacataaagaaggaaacaatagacaatgtggattactaga
-gggaggagggaggaaggggggcatgggctgataaactaactattgggtactatgctcact
-acccaagtgaaaggaaacataacccaaacgacagcatcacacaatatacccatgtaacaa
-acctgtacttgtatcccatgtatctaaaataaaagttgaagttataaagaaaaataagtg
-ttagagtttatttcttggctcacaattctactccattgttatatatgtttaGCTGTACTG
-Aggggtctccaagatcaccctcaagtttgatgactcactagaaaaactcaccagacctat
-aaaaacgattatactcatggttacagcttaatacagttaggagatacagattaaagtcag
-caaaggtaaaaggtgcacagagtgatgcctaggaaaaaacaggtatgagctttcagttgt
-actcttcctccagaatcacacgaatagaactcaattcttccaaccataaggtatgacaat
-aagtgcaaaatggtgccagccattttcagtgggagtcaatcacataagcatgaagcatcc
-ccaagactgaatttagctactcaatcttcagcccctaaccttaggagtcaagctaatacc
-gcttggcctgaagccccagtcatagaaaaaaatatatgatttattcaccataaatcacat
-tgttagcataaactatttggcatgggccaagtctcaggtatacaaagacactttatcagg
-caggataattaaagggctcagagattatctgccaggacctttgaaatatgcagggttagg
-acaaccccaaatcttctgagttaaccctttattacacaGTCCACCCCATACCCCTTAGCC
-TAGGCTGTCTTTCAGCAAAACAATTCTATATTTCTGAGCATCTACATTTAGTATAGCATT
-TATATAACAGATCTAGAAATAGTATCAGTATGAAGAAAGATCTCTAGTTATAGTAGATAA
-AATATAGCAGTGGAAGGCCCAGCATACCATGGTTGTGCTATGCTCAAAAACATTTGGAGG
-AGCTAGTGTGGGGTAGGGATAAAGATTTTAAAAACAACTAATCTATCTCATAAAGCCATT
-ACATACATTTTCATATTTTTGTACTGATTTGTTACTTGTTTCTCCCCTTGATCTACCACT
-TTAATCTTACAGCTGCAGAATTATTTAGCCTAGAAATTAGTTTATGGTTAACTAAATCCA
-ATTCTTCCTTAGGCTAGTCATTTTCCATTGGTAATACATCCTGAGGAGGCTTAACTCAAT
-CTCTCAATACATTTGATCATCAGTATCAGTACCATCCTATGACTTATTTAATAAGGTGGC
-TGAATCTTACCAACAATAATAGTGTCACACTGTATAGCAATATAGTCATGGAACAATTTA
-GTTTCATTCATAGAACAAATTAGTAAGGCTTACGTAAGTTTTGCTATGCCTTCCCAACAG
-AAACAGTCCTTGCTTATATACAAGATATACTTATGGACAAGCATTGTTATAATTGTTAGA
-ATGATTTGATTATTTCTGGCTTCCATGTCAACGGAGGACAAAGACAGCCACCCCGTTTTA
-GTTTTCAAGCTTGGACAGAGACTGGTTTCCATTGTGTGATTTTCTACAGCAGGACCTCCC
-CACCCTCCTATGGGAGGTCACAGGTGATATTCAGATAGCTTCAGTCCCTACTAACTGTAC
-TGCAGAATATGTCTTATTCTGAAGCTCTAATGGGGCAAGAATAATTTGTAGTGCATCAAT
-GCACATTTACAAATGCCCTGAGAGGTCTTTCATAAGTTTGAAGGCCCATGAGATTCCCAT
-AAGTGTGTCCCTTTTTCCTCAGCAACTAGGATGTAGTGCTATTTCCCCATGGTTACTTTG
-ACCTTCATCTGTAATTAAAACAGTCAAAAGGCACTGTTGGGTCAGGGTACAAGCCCTTTC
-CCAACGTTGGATCTTAGCATTATCTAGCATTATTTTTGAGTCTACTTGTTTCATTTTAAT
-AAAGCCTCATCACTTTCTCAGGATGACCCTCATCTTTTGCCTTCCTCCTAGAAAAGAATT
-CTCTCCAATCTGCTCATTTTAGTTCAGTAATATTTCCTCTAGACTTCACTAAAAGGGAAT
-TCAGCTTGTCCCATGATGCCTGAACTGACACCTAATGCCCCTAAAAAGTCTGTTTTATGC
-ACAAATGTAGTTTAATTCACCATGCATGTTGTTGGCATTGTATACTTATGGCCCAAGTGC
-AGTTAGCATATGTGGTTTTTACCCCAAAATGCGGGTTCTTCATATATAGATTAGATGAAT
-TGTAGTCAAACTAGATCTAATTTAGTTTTTAGTATGTTTTAATGCCTTTCATAATCTTTT
-TTGTCTCAGGGTGGGGCCATTACCCCAGGGGAATTCAAGTCACCGTGTAATGGCTACTGC
-TTTAATCCCATCATGTATTAATTGCCATTCTCTCttttttcaactttcattttagattca
-ggggatacatgtgcaagtttgttacctgggtatattgcatgatgctgaggtttgggatat
-gaatgattttgtcacacaggtctgagcatagtacccagtagttagtttatcaaaccttgt
-ccaccgcctacccagtagtacccagtgtctattgttttcatctttatgtccatcagtact
-caatgttcagcctccacttacaacatatggtgtttggttttctgttcctgtgttaattca
-cttagtattacaacatccagctgcatccatgttgctgcaaagagcataatttcattcttt
-attatggctgcatagtatttgatggtgtatatataacacattgtctttatccaatccacc
-atagatgggcatgtaggttgatttcatgtctttgctattgtgaatagtgctgtgatgagc
-tataactgcatctgtcattttggtggaatgatttgttttcttttgcatagatacccagta
-atgagattgctgggttgaatggtagctctatcattaagttccttaagaaatctccaaact
-gctttcaaactggctgaactaatttacattcccaccaagagtgtaaaaatgttcagtttt
-ctctgcaacctcaccaacatctgtttatttgtttttcatgtttgagtaatagtcattctg
-actgttgtgaaatggtatccagtcatggttttgatttgcattgctctgatgattagtgat
-gatgagcatttttttcatatgtttgttgagcacttatatgtcttcctttgagaagtgtct
-gtttgtgtcctttgcccattttttccatgagtttttttttcttattgaattgtttaattg
-ccttatagattctggatattagatctttgttggatgcatagtctgtaaatattttcttcc
-attctataggttatctgtttactctgttgagagttttgtggtgcagaagtttaattaagt
-cccactttccaatttttggtttttgtttttttcaattgcttttgagaacttagtcataaa
-ttattttccaaggtgatgttgagaatggtgttttctaggttttcttctaggattcttttt
-tctttcttttttttttttttttttttttttgagatggagtctcactctgttgcccaggct
-ggagtgcagtggcgtgatcttagatcactgcaacctccacctcctgggttcaagctgttc
-tcctgcctcaacctcctgagtagctgggattactggtgcatgccaccacacctggctaat
-ttttgtatttttactggagaccagatttcaccatgttggtcaggctggtctcaaactcct
-gacctcatgatccgcccacctcagcctcccaaagtgctgggattacaggtgtgagccgct
-gcgcccagctcttctaggattcttaaagttttggatcttacatttaaatctctaatcgaa
-cttgagtcaatttttatacatggtgaagggcaggggtccatttcattcttctgcatatgg
-ctagccagctatccaagcaccattactgaattattgaatagaattattgaatagggagtc
-ctttctccatgataatttttgttgtctttgttgaagatcaaatggctgcaggtttgtggc
-tttatttccaggttctccattctgttccattggtttatgagtctgtttttgtaccagtat
-catgctgttttggttactgttggcttatagtttgaagttaggtcatgtgatgcctccagc
-tttgttccttttgcttaagtttgctttgactattggggctcttttttggtttcatatgaa
-ttgtagaatagattttctaattctgtgaaaaatgataatggcagtttgatagaaatagtg
-ttgaatctatagactgcattgggcagtttggccatttaaatgatattgattcttccaatc
-catgagcatgggatattttttcatttgcttatattatttattatttcttttagcagtgtt
-ttgtagttctcccggtagaaatctttcacctccttggctaaatatttgcaatgtatttta
-tttttcatgtggctgtcatgaatgggattgtgttttgagactttgctgaagttgtttatt
-aaatctggaagtcttttggtggaatcattagggttttctaggcgcatagaatcacattgt
-cagcttagagagctaatttgactttctcttttcctatttagacaccttttatttccttgt
-cttgcctgattgtttgggctaggatctccaattctaacagctttcagtggagtctaggtt
-tttctaaatataagattatgctgtctgtaaacagggataatttttttcttttactgttaa
-ttttcagagttttatattttatttattatgtgtagtctgcaaatacattctgtaaggtta
-ttgcttgtctttttattttcttaacagggtcttttgcagagcaaattttaagactttgat
-gaagttaaatttgtcaattactttttatggattgggctttttgtgtcatgtctaaaacct
-cataaccaagcattaagctccatagattttctcctatgttttcttttaaaagctttatgg
-ttttacatcttacatgtgattctatgaccaattttgagggcttttttttcatgtatgtgg
-ggtgtttaggtaagttaattttttttaacctgtggatatgcaactgttccatcacctata
-tttaaaaagattattcttccttcatttaattggttttatatctttgtaaaaaaaatcaat
-tggctatactagtatggttctacttccggattctgtattcttttccattcatgtatgtgt
-ccattcctctgctaatacaaatcttggttactgaagctatacaacaactttcataattgg
-gtagaattaatttctccgactttattctattttttcaagattgactaatccattctagct
-attttgcctttccatataaattacagaataatctgtgtatatttagaaatatcttgatgg
-cagtttcaagatggctgactagaagcagctagcgtgtgctactctcacggagaggaaaca
-aagtagcgagtaaatagtggcttttcaagtggatcgtctgggagaccacatcaggattca
-ccaaggaagtgagggaatcctcagagagcagagagtgaagcctggcagcagccgctcacc
-cgggaccagtgtggagcaagagaaattccctaacatggggaaagggtgagtaagtgagag
-tcctcaggggatccacatggatctttgcaatcctgtgcacaggagaaccccttggcccct
-ataggcctctagatcgacacaacatcctggagtttgtgtagacgcactgctaagggccat
-gtggagccccacaggccctggatccctgatcaacctggtgccagctgccatagccctgat
-aggggctgcagtcatggtgctgaggagtggtcagactgccctgctcctcctcaccaggca
-aggctcggctttggcttccagtgcaacagtctgcctccacctgaactctgcatgtgggca
-cactctacactcccctgggaaccactcagatggcggattgtgtgactcccattcccctgc
-tgctccgagccaggcaaggctagctggtttgggcttcaacacagcacctctgcccctacc
-tgaacactgtagtgggttgcagctttccattcccctggggcaaaactcacagaggtaaca
-gatAATGCCTGGCACCTTTGTGTGTTGCTAATAGTGAAGTTCAACATTATTGGATAGGAG
-GGAGGTGCAAGCATGCCAGGCATTCCACAGCTTCCAGTCTCCATTGCCCCAGCTAAGGGA
-TGGCATGCTCTCCAGTTAAAGGCCCACAGCACAACTGTCCTGCCCCTGCCTGAACATTTC
-ACCTGCGACCCAGAGCCTTTCCGAAAACCCACCCACCACAGGCCTGTGATATTCTTCTGG
-GTTCCCACCACCCAAGAATCCCACcttcccctgcctgagagtttggctggtgacccaggg
-accagcctgaaccccacccccaccccattacagtcagcacctgaaatctgggatagataa
-ccccagtccagccccttcagggccatgcacactgtccagcaggccttctggaggcctgtc
-agctgagaaactatcaatacccttccagtgctgttggcacctgaccaatttcctcagggc
-ctgaggttgggcctacccaaccagcaaacaccaccatgaccaacaccgacctgcacggac
-cCAAAGGTGGAGACCTTCCTTCTCAAAAAGCAGCAGTAATGCCCCATCATagaataagtg
-agccttaaagctatctgtatcaggttgagtgatgaggttataccctgaacaactctcatg
-gagaatcataaaacaagtgttccctgtggccctcaaccacattgcagtccagagatagac
-tatagtgtgcatctgaactaggagtcatgagccctgaaacagggtgtgataaggaaacag
-atcacatttctacctacctaggatggggagctggtgcagtcttctcgcccacaagcccct
-acagagacctcagtgcaggagttgctcccagccacgctcatcagagctggtgcctgtgct
-tgccattggtatactaatgggcaagccaggggcaccagctcttctcagctctgtcccacc
-atccccacagaacaagaagctcagtacatcaggcacccccactgtccagcccttcacctg
-aaacaactgagagcccctaatagtaaaaaaagatcagatctatacccatctgtttatggg
-acagctggctgttacttgcaaatgtcatctaccagtctataggtcaaactggacagccca
-tcaaaaaacctgctggtagaagtgtgtaggactatagaaacaaagccaaaagccctaccc
-aacacaatcccctccagataagaaggaactagtataagaattctgctgtcatgaaaaatc
-tgaatgtgtgacaccaacaaggttcactctagctctccaggagtggtcctagccaaaata
-gaagctgagagatgacagatggagaattcaaagcatagattgcaggaaaattctttgaga
-ttcaagataaggttgaaaatcaacacaaagaaacctgtaaagcaatccagagaataaagg
-aagaggtaaactcttaaaaataaatctatcagagctactgaaagtgaaaaactcacttaa
-gacattccgaaattcaatgaaaagttttatcaatagactagatgtagcagaagaaagaat
-ttcagagcttgaagatcagtctttcaaactaacccagtcagacaaaataaagaaaaagtt
-attttgaaaaatgaaccaaatcttcaagaaatatgggattatgtaaagtgaccaaaccta
-tgaattactggcattctcaagagagaaagaggaaaaagtaaacaacctagaaagcatatt
-tgagggaataattcaagaaaatttcctttatcttgctagagaggtagacatccagataca
-ataaattcacagaacacctgcaagatgctatacaaagtgaacatcatcaagacatagggt
-catcagacagtctaaggtcaattctaaagaaaaaatcttgaaggcagcctagagaaaagt
-gtcagatgagttacaaaggtgagcccatctggctaacagcagacttatcagcagaaaccc
-tacaatcccaaagagactgggggcctatttaaagaattctcaaagaaaagaaactccaag
-caagaatttcataccctgccaaactaagctttataagtgaaggagaaataagatcttttt
-cagacaagcaatcactaaggcaatttattgccactagaccagccttacaagagatcctta
-agggagttggagttctaaacataaagatggaagaacaatatctgccaccacaaaaccaca
-cctaagtacatagcacatagaccctttaaagctattacacaataggaactataaagcaac
-cagcttacaatttcatgacaggatcaaaatctcacatatcaatattaaccttgaatgtaa
-atggtcttaacaccccacttaaaggcacagagtggcaagttggatcataaaataagaccc
-atccatctgttgtgttcaagagacccatctcacatgtaatgacTACTACACTAATTTTAT
-CGGGTTTTTTTCCCCATTGCTTATAAGTTTCATTTTATGGTATGTTATTTTGATTGTATG
-CCAAACATTGGGTAAATGGGTTTTGGAGACTCCAAGTGATGTTATCTTCAAACATAAAAG
-GTCCTCCCTTTCTCCAGATAGCAAAGAGATAAGGACATGACTAATTCAATATAACAAGGC
-ATTAAGCTGGTTCAGGGCTGGGTTTCAGTATTAGTAATGATTCCAACCACATCTAGTTTG
-GTCCTGTTTCTCAGGAATAGCCCTCCAGGCTTTTTCTTCAGGGTCTGTTTGGTCTCAGTA
-TCTTCAGCCCAAAAAAACAATGAGGGAATTCTAGCTCTGTTCTTTATGGTTTTCAAACAT
-TGCTCTTCAGCCTCCTGATTCAGGCACTTCTGTAATGTCTCAAGGGGGAGACTATCTGTG
-TGCTTGAGGTAGGCTCCATATCACTATCATATCTGTTTCCTAAGCACTACAAGAGTACAA
-GAAATCTCTTACTGCCTTTCGGAAGTTTCAGCTGAGCTTTCCAACCTCTCACAAAGCTCT
-ACTTTTCCAATGCTCCATTGGGGGGACTAAAATTTGGGGCACCTGAAATTCCAATTTGTA
-ATTCCTAGAATCTCTGCTACTTCTGCTGATTCAATTACCTCCCAGAAAGCCTTTCTTTCT
-GGGCCAAGCCTGATTTCCCGTCTGTCCCAAACTGACAAAGGCACCCATGGGGGAAATGGC
-TGGCAATTATTGACCTACTCCAGAAACAGAAAGCCTGTTCTGTTCTCTCTTTAGAATATC
-AACTCTTCTAGTACCAGTAATTTCTCTGGTTCTCTAATGCCTTGGaaatattattttaat
-aaaaatCAAGCTTTTCTAGGTTTTGTATCAAAGGCATTGCTTTTCTGTGATTTACTGATT
-TCTCCCCAAGAACAGAACTTCTCAGgcccatttaatcttaacttaattgctgttatgttt
-ggctttaaattggccattgtttaacgtgatttacattttcctgagttttctatatttctc
-ttttttctcctttcttttaatctttctgtataaaccagatgttctttaattccattttcc
-tccccactagtttttaatgtattctccttttctattcatcatcactctagaaatgaagac
-atacattcttaacctatcaatatctaatattaaccaaaaatgtgtatttctcctcagaca
-atgcatggaatacaactccatttcacctgcctccagtttatattctattgctttatttta
-ctttcatataatactaagacaatattattgcatgcgtgacaattataggtagttctattt
-tctgggtgactccaacaagttatcattataaagtaacccattttcctctaagataatttt
-tgccttaaatactattttgttcaatactaagaagtaagataacttccttttgttggtatt
-tgcatgttaagtttttttcccatatttccactttcaatcttctccgtatcttgtttttac
-atttatctgttgtaaatagcatctaatttttcatccagtctagcaactagagttaatcca
-taaatttaccaatctctgaataatatatggaacatagaccactttaattctatttaacgc
-tcccaattgattctattttcagaattttgatatttaattatgtttttaatcttataaaac
-atctttatttaattctGCCAGTTTAATCCACTtttatccctttttttgttgcttcttcat
-cacatactttccatgtgtggtcatttttttaaactaaagaacatcctttagaatttcctt
-tcatgagatctgctatctctatctgaaaaggttgtatttatattttcttcttaaaatatt
-tttgtggatatggatttctaggatgacatttactttgaaaaatacgttgaagagctcagt
-ccattggattatggcttctattgtttgtggtgaaaaatcacctgtcagtgtaacaattac
-tctatcaaaagtatggtttctgtttttccctctgactgtttcccacttttctctttgtcA
-TTTTATCTAGATGACAATTCTTATTTATTTTCTAGAATAGTATTTCTTAGATTATTTCTG
-AAAAAAAAGAAGATTTATTATCTTTTCAAATTTATGTAGCtttttgtaattctttttctt
-taattttctttctccttctctttgaaaatcttattaatcagatattggctctcctggatt
-gacactctgtgtcttatatattttgctcatactttccacttgtttttagacttcaaagat
-tttctcactttatcttcaaatgtgcctgctaaacaatcatttttctaatttccaaaagtt
-tactacttctccttacatagcatgatattattgctttatggatggaataCACTCTTGAAA
-CTCCAGCCCCTAAATAATAGTTATTCTAATGTGCCTTTCTTCATTTATTTTCAGTCATGT
-TAAAGATTTTCTCAAATAGATAGCCAGCCTAGATTGTTTATTCATATTTTACATATATAC
-TGAGCCATTTTATGTGTGCAAACTTGTCCACAGCTTTTGTTTTAAAATGCTTGaactgtg
-aagatagaaaagacatgtttgctggaatgcataatactgaagtttacttctcatagtctt
-tctttagaagttatcgcctaggcagaaaaagaaagtaactaaaaaaaaagaaaacacaat
-ttccaggtatatctgtgccaactcaggtgactagtaaaacaaaattctaagatgacatct
-gtatagcctacataggaagcaaccagttcacattatagaaggaagaatgaatgttccagA
-GACAAAATATAGTTACAATACACCCTCATCTATTGTAGTAAAAAAAAAAAAAAGCTGAAG
-TCTAAATTACACAAATGTAGCAGCATAATACTATTAAATAATAAGTAATTTAATATTCTA
-TTTCATGGCATTATTTTACAGGAGCACTATTTGATCATCTTCTCTTTATCACACATACTT
-CTTCCATTTATCTTACAGTATCTTTACATAAACACTAAAATAGTTATACTCAGATTGTAC
-ACTTTTGAAGGGAGTTAGCCTATTTGTGTCAATTATTTACTAAAACAAAGCTAAATAACA
-GCAACAAAAAAGCCTTGTTGGAACAGGGACCAGGGGAATGATCAGAGCAATAAGTAGCTT
-GCATGAAAATATTATTAACTCTGAATACTTTCTCATTAACATTAACAGTGTGTCCTGCCT
-GTATATTTAATCCATTTAGAATTAAACTATTAATATATTGTGTCCTAGGATGGCAGAGTT
-ATTAAGCAGCCCCTGTATGCTCCAGGGGATATAGGTTGATATTCTTCAGCTGTCAAAATT
-CTTCAGCTGTCAAAATTCTTCAGCTGACTTAAATCAGCAGTAGTGGCGTTTATCACCAGT
-CAACAAAGTTCTTCTATCCTTCACTTCTTTAGCCTACTCATCTAATGGATGTTGGCACGA
-ACATGAAGTTTCTCTCCTAAATATCTATGATGTTCCACAAATCATGGGATATGCCTGCAG
-GCTGCCAGCACAATCAGATCTTCATGTTCCAAGAAAGGGATCATTAGTTTGGCCCTGCAA
-GATGTGCCACCTTTCTTGGAGAACTGAGTGTGCCACATGCAATCTGCTGAGGCATGAACG
-TGCTCTTGGCATTTCTGTTTATTTGCTCCTTATTACACTATATTGTGTCAGAATGATGGT
-TTGGGTTCAACAGTATGCTCACGTAAGCCACTATTCCAAACTTCCTAAACGCACAGTTGT
-GGAATGTGACACAATTGTTGGCAATGATATTTAAACAGGATATGTGTTTTTGGTGGGGTC
-TCTGGGAAAAATTACTAAAGGGAGGGGTGGAGTGATCCAAATATTCAAGTGGTAGACACC
-CACTTGACTTTGGccttccacttcctcctgtttggaatatggtcataatgctggaggtaa
-tgctgccatctataacaatgaagcaaaaacactggataacagtatgtgaacagaagagta
-gagggtgactagcatggtgaagctgttatataatttctggactTTATGTTATGTAAGAAA
-AATAAAACCTGAATTTGTAATAAATGAACAAAATGCCTTTTTCATGTTTTTCTGTTTCAT
-ATTACAGCCTATTATACTTTCTAACTGGCACATCATGGATTATAGATAGAATGTGATTTA
-GGATTAAACTCTCTTAAGTTTAAAATGTGTAGTTTTCTTCTCTCTTGTTCATTCTCTTAC
-TGCCTCCAGTTCATTTCAGAGCATATGAAAAGAGACAATAAGGGACTTTTAGCTGGAAGT
-TTACACTACATTACTGAGTAGGAGGAAAGTAGCTTAATAGTTCTATAAAGAGTATCATTA
-CAATTTTAAAAATAAACAAAAACATAAATTATATACCTGTAGTCTATCCTGAAAATATTT
-CCTGAAGTCACAGATTTGGAGTATTGTCAACTTGTGCAtaaacttcatgagaccatggac
-tattgtttttctcactgctttattcctagctccttgatcagaacaggcagagagaagatg
-cacaataaatgaataaatataataaatgaatGTATCCTTTATTACCTACGCAAACACATG
-CACACAAACACATCTATGAAGTTTTACATGATAGTATAAACACTGCTTTGGTGGAGGAAG
-TTACTGATTTTCTTTTAGCTTGTTTTCCACTTTATTTTTCTTTACCAAATAAGTTTCACT
-TTTGCTATTAGAATATAATAAATAACAGAAACCACAAGAACAAAGTAGCAGCTGAAAAAA
-AGAAATGGAAAATTCTTAATTCATATATGATTGCCTCTGTGAAACAAtgaaaagtggtca
-tccaatttcagtttgaacacttTTTTCCTCATAAAGTCATCCTATACCTTTACTCAAATT
-TAGTTTTAGGTGCATTAGGAGTTAAAAATAAAACATAAACCCATTTAAGAACCAAGAGAA
-TTAGTAAGGTAAATTACTTTGGTAAAATGCCCAAGTTCCAGGCTCTGCTGAAGAGAAATT
-ATTGATTCAACCTTAAAATatttgaagtctctggtaaggtgactttagctaaagctgcaa
-ccagctcaactacaaatcagactgactcactactctagcaacttgacagaagaacaatac
-tagacagaatattaattaccttttggaggtaattatttattgaaaactctactgaacttc
-tatatgtctggcataaaataaaggttatgacatatttttaaaaagaaagaagacataact
-cattgtccagagaggaaatgatcaacacccagccaatggaattatcaaccagaaactcaa
-agtaactctgatagaaatatgctagagaatatagtgggaaaataaacagtactggtgttt
-actgataaaatagagaattttatctatgagccaaaacaaagtaatacaaattaaaaattc
-aatatcagaaatggataattcattcaatgggctgaacagcagactgggagaagcaaagaa
-aacaatcacttcacttgaaactcaaatgaacatttgaatagaaatttcccaaatgaacac
-aaacacaaaaaagtaaagaaaaattgaatacaacatcagagagatgtgagatattatcaa
-ataattcaacatggatttaattggctcccaagaagaagggaaggagagaatgaagcagaa
-gaaataagagctaatagcctcctacatagcaaaattgatccaagaacttcagcaaggtct
-aattaggacaaattcaaagaaaatttctagacatagtggatttcaaactgctgaaaatca
-aagacagagaacaaatcttaaaagtagccagagaaaaaggacatgttatctaggaaggaa
-caatgacacaaatGATGCTGAGCTATTTCCAGAAAAATAAAAACAGCgggtgacatcagc
-aagatggcagaataggaagtcccagatctcatttccacatggaaacaccagtttaacaat
-agatgaacaaaaatatctttattagaattccagaaGAGAAggaaagaaattcaaagattt
-ctcataagaaacttcgaagggcaggaggaagtggcacaatatttttaaagtgcttcaata
-gtaagtctcaatccagatatctatgtccaagaaaatatccttcaagaataaggaccaaat
-aaacacattctcaaatgaaggaaaactgaaaaaaaaagggggggtcactagtaggtatac
-ctaaaagaacagctaaaggaagtcctccacagtgaaagaaattatttttttttttttttg
-agaaaggagtcttggaacataaggaaaaaagaagagagaaaacaaaaacatcagaaatgc
-aataaactttttacctactttttagttttctaaattatttttgacagtaacagcaaaaat
-tatccctctatagtgattctcagcataggtagaaaaaatatttaagtcaatgatattaga
-aatggggggttatcatagagatataaagggagataaaatctttatctgatgtggttaaat
-gatgtaccagtagactgtaataagttatggatatataatgtagcacagacaacaatcact
-acaaaagctatacaaagagatacacttgaaaacactatagatgaatgaaaatggaattct
-aaattatggaaaaatatctcacaaaatggcaggaaaaataagacaaagaagcaaaaagga
-aacaaaaacaaaatgaaagatttaagcattaatatatcaataatttaattaaatttaaat
-gatctaaacacacaaatttaaagatgaatattggcaaagtatgtttttagatgacccagt
-aatatgctatatacaagaaactcacatcaaatataatgatataaataggttataagtaaa
-agaatggaaaaagatataccatacaaatattaataaaaagtttgcaggagtgactatatt
-aatgtcagataaagtagacttcagaacatcaaaaaaattaggatgattttttgtcacctt
-tacatagtgacaaaaggtccaatacaccaaaaagatgtggcaaacttaaatttgtgtgct
-ccaaaacacaaagctgcaaaatatgtgaagcaataacagagagttaaaagagagaaataa
-gcaaaaacacagtcgggatatcaccacccacttctttccagaattgatagaacaacaaga
-aagaaaatcagcaacagcaatagaagagctcaacaacattaactacaggatccacgtggc
-atttaaggagcatttccactcaactagagcagagtaaatattcctttcgagctcagagag
-tgtatactaagatagactatatcctaggcaaaaaaaaaaagaagaagaagaaaaaaggat
-attcaactaattaaaaagaatttaaactgcacaaagtttattctctatatgattgacaca
-gtgaaatcaaactaggaatcaataccagaaataaaacacaaaaatctccaaacacctgga
-aattacacaacatgcttccaagtcaaagagaagtctcaataagaataaaatatacataga
-attaaataaaaatgaacatataacatattcataatttgtgctaaagcagtgccaagagag
-aaatttagaacaacaaatgcttatattacaaaagaagaaaaatgtcaaatcaataatctt
-agctctcacctgaattagaaaaataagagcaaattaaatgcaaagtaagcagaagaaaga
-acataataaagataacagcacaaatcaatgaaattggaaacagaaaaacaatagagaaaa
-tcagtgaaatgaaaagctgcttctttgaaaagatcaataacattgacacacttttagcaa
-gactgacaaagaaagacacaaatttccagcatgcggaataaaacaaagaatatcactaaa
-gaccctatggaaataaaaatgataataagggaatacgataacctttttttttttttttga
-gacagagtcttcctctattgcccaggctggagtgcagtggcacaatctcagctcactgca
-acctctgcctcctgggttcaagagattctcctgcctcggcctcccaagtagctgggacta
-caggcatgggccaccatgcccagccagtttttgtatttttagtagagatggggtttcacc
-acactggccaggctggtctcgaactcctgacctcatgatctgctcgcctgggcctcccaa
-agtgctgggattacaggcatgagccaccgcgcccagccaactaactctctatacattgat
-ttacttttttattttaaaatatccttgcattcccagtagaaaccctagttggtAAAAAAa
-aattattgtttgtaaacccttcttctttgatgttacgcatctacagctaaagatttcccc
-ttaagcaaggcaggagctgcatttcacactttataaaatgttgtattttactatcttgcc
-gttcaaaatacatattaattattcctataattttatctttaacacatggcttttacataa
-ttttaaatagtactttttaaattttaaattaaattttaaatacttttaaataataaaagt
-atgctagttaatttcaaaatattatgtttcttaacatcttatttttattggtttccaact
-taatactgatgtttttctagatatcacatttttaattgattgctattttgcaattatttc
-tgcaatattttagtgttttgacatttatagggacttctttaaagaatcaacactgtccat
-ctcagtgagcattccatgtgcatgtgaaaaaaaaacgggtattctgtaattattggaggt
-agtgttctatacatgttaattggattgaggtggttattcagatttgctacattctttttt
-ttttttttcgagacagagtcttgctctgtcaccaaccaggctggagtgcagtggcacgat
-cttgggtcactgcaacctccacctcccgggttcaagtgattcccttgcattagcctcccg
-agtagctgggactacaggtgcgcgccaccatgcccggctaattttttgtattttagtaga
-gacgggatttcaccatgttggccaggctggtcttgaactcctgacctcgtgatctgcctg
-cctcggcctcccaaagtgctgggattacaggcatgagccaccacgcctggccatttgcta
-cattcttactaaatgtttggtctagttatgctatcaataaccaacagtgaatgataaaat
-ttccaactgattgaagatttttctgttttcaagttacttttgtccatctttacttcatgt
-atttttaagttatattattagatacatcatgtctttctaatgaattgaccctttcatcat
-tatgaaatggccttcattatctctagtaaatactgcttgccttggagtcaaatacatcag
-atattaatataatcacTCCACAATTAACAAAGCCATCAAAAGTAGCTTGTATATCCAACT
-TATTCTCTGTATCGATTTCTTTCACTTTTGGCCTGAAAAATCTTTACTCactgaaaagca
-aagaatataaagaaaaaaaaaaggtaaagaatccaaggactgtgggaaaactgcaaaagg
-tgtaacctacatgtaatgggaataccagaaggagaagaaagagaaaggaacagaaaaaaa
-tatttaaaacaacaattgaaaatcttcagtgggagtataattagttcaaccattgtggaa
-gacagtgtggtgattcctcaaggatctagaaccagaaatacctttgacccagcaatctta
-ttactgggtatatacccaaagaattataaattgttctactataaagacacatgcacacat
-atgtttactgcagcactatttacaatagcaaagacttggaaccaacccaaatgcccacca
-atgatagattggataaagaaaatgtggcacatatacaccatggaatactatgcattcata
-aaaaagaatgagttcatgtcctttgcagagacatggatgaagctggaaaccatcattctc
-agcaaactaacacaggaacagaaaaccaaacaccgcatgttctcactcataagtgggagt
-tgaacaatgagaacacatggacacagggaagggaatgtaacacactggggcctgccaggg
-gtgggggggcaatgagaaagcattaggacaaataatgcacgtggggcttaaaacctagat
-ggcaggtttataggtgcagcaaaccaccatggcacatgcatacctatgtaacaaacctgc
-acgttctgcacatgtatcccagaacttaaagtaaaataaaaagaaagaaaaaaaaacttg
-agtaaaatgaaaaagaaaaagaaaattttccccaaattaatatcaaacatcaaaccacag
-atccaagaagctcagagaatactaagtaggataaatgcaaaaaaaaaaaaaaaaaaaacc
-taatcatgtcatattcaagctccatgaaacaaaatataaagaaagaatcctgaaagaaga
-caaaggaaaaaaTCTTATcataataatagtgctcatttctccaacaagacataacaatcc
-ttaatgtgtatgtgtctaaaaacagagtcaaaCAATgttttgatttgcatttccctgttg
-actagtgatactgagcatttttccatgtatatgttgaccatttgcatgtcttttgagaat
-gtctatttttgttctttgctcatttttcaaggatatcatttgtttttgtttctgtttttt
-ttgctttcagttgagtcccttgtttattctagtttgatacagtcccatttgtctgttctt
-ggttttgttgcctgtgcttttaaggtcttaaaatatttgcctagaccaaagtcctggagt
-gtttcccctatgtcttcttctagtagttttatggttttgggtcttaggtttaagtctcta
-atctattttgagttgacttttgtatatgatgatagataggggtctagtttcatttttctg
-catataaatatccagttcccagcaccatttattgaagagtgtgtcctttccccagtggat
-gttcttggtgcctttgttgaaaatcagttggctgtaaatatgtgaatttatttctggatt
-ctttattctgttccattgatctatatgttcatttttataccaacaccatattgttttgct
-ataagtactatagccttgtaatatattatgaaggcaggtagtgtgatgccacaaactttg
-ttcttttgtctcagaattgctttggctattttggctcttttttggtttcatacacatttt
-aggattgatttttctatttatgtggaaaatgtcattggtattttgataagaattgaattg
-aatctgtagattgttttaggaaatatggtcattttaacaaaattgattgttccttttcat
-gagcatgggaggcatttccatttgtttgtgtcgtcttccattcctttcatccgtgtcttg
-gggtattccttgttgacatctttctcctccttggttaaatttattcttaggtattttttg
-tagctattgtaaatggaattgccttcttgatttcttttttggctagttcattattggcat
-ataaaaatgctactgattttttagcattgattttgcattctgcaactttactgaatttgt
-ttatcaattctaagaggtttttggtggagtcgttaggtttctttaaataaaattatgtca
-tctgcaaagagggataagttagtttcctgtttcccatttagatactgtttatttcttttt
-ttgtctaattgctctatctagcacttccagtactatgttgaatgggaatgatgaaagtgg
-acatcttcttgtcttattccagttcttaaaggaaaggcGACTCTTgggggaggagccaag
-atggccgaataggaacagctccggtctacagctcccagcgtgagcagaagacggcgattt
-ctgcatttccatctgaggtaccgggttcatctcactagggagtgccagacagtgggcgca
-ggccagtgggtgcgcgcaccggcaccgtgcgcgagccgaagcagggcgaggcattgcctc
-acctgggaagcgcaaggggtcagggtgttccctttccgagtcaaagaaagaggtgacgga
-cacacctggaaaatcgggtcactcccacccgaatattgcgcttttcagaccggcttaaaa
-aacggcgcaccacgagactatatcccgcacctggctcggagggtcctacgcccacggaat
-ctcgctgattgctagcacagcagtctgagatcaaactgcaaggcggcagcgaggctgggg
-gaggggcgcccgccattgcccaggcttgcttaggtaaacaaagcagccgggaagctcgaa
-ctgggtggagcccaccacagctcaaggaggcctgcctgcctctgtaggctccacctctgg
-gggcagggcacagacaaacaaaaagacagcagtaacctctgcagacttaaatgtccctgt
-ctgacagctttgaagagagcagtggttctcccagcacgcagctggagatctgagaatggg
-cagactgcctcctcaggtgggtccctgacccctgacccccgagcagcctaactgggaggc
-accccccagcaggggcacactgacacctcacacggcagggtattccaacagacctgcagc
-tgagggtgctgtctgttagaaggaaaactaacaaacagaaaggacatccacaccgaaaac
-ccatctgtacatcaccatcatcaaagaccaaaagtagataaaaccacaaagatggggaaa
-aaacagaacagaaaaacgggaaactctaaaacgcagagcgcctctcctcctccaaaggaa
-cgcagttcctcaccagcaacggaacaaagctggatggagaatgactttgacgagctgaga
-gaagaaggcttcagatgatcaaattactctgagctatgggaggacattcaaaccaaaggc
-aaagaagttgaaaactttgaaaaaaatttagaagaatgtataactagaataaccaataca
-gagaagtgcttaaaggagctgatggagctgaaaaccaaggctcgagaactacgtgaagaa
-tgcagaagcctcaggagccaatgcgatcaactggaagaaagggtatcagcaatggaagat
-gaaatgaatgaaatgaagcgagaagggaagtttagagaaaaaagaataaaaagaaatgag
-caaagcctccaagaaatatgggactatgtgaaaagaccaaatctacgtctgattggtgta
-cctgaaagtgatgcggagaatggaaccaagttggaaaacactctacaggatattatccag
-gagaacttccccaatctagcaaggcaggccaacgttcagattcaggaaatacagagaacg
-ccacaaagatactcctcgagaagagcaactcaaagacacataattgtcagattcaccaaa
-gttgaaatgaaggaaaaaatgttaagggcagccagagagaaaggtcgggttaccctcaaa
-gggaagcccatcagactaacagcggatctctcggcagaaaccctacaaaccagaagagag
-tgggggccaatattcaacattcttaaagaaaagaattttcaacccagaatttcatatcca
-gccaaactaagcttcataagtgaaggagaaataaaatactttacagacaagcaaatgctg
-agagattttgtcaccaccaggcctgccctaaaagagctcctgaaggaagcgctaaacatg
-gaaaggaacaactggtaccagccgctgcaaaatcatgccaaaatgtaaagaccatcgaga
-ctaggaagaaactgcatcaactaacgagcaaaatcaccagctaacatcataatgacagga
-tcaaattcacacataacaatattaactttaaatgttaatggactaaattctccaattaaa
-agacacagactggcaagttggataaagagtcaagacccatcagtgtgctgtattcaggaa
-acccatgtcacgtgcagagacacacataggctcaaaataaaaggatggaggaagatctac
-caagcaaatggaaaacaaaaaaaggcaggggttgcaatcctagtctctgataaaacagac
-tttaaaccaacaaagatcaaaagagacaaaggcggccattacataatggtaaagggatca
-attcaacaagaggagctaactatcctaaatatatatgcacccaatacaggagcacccaga
-ttcataaagcaagtcctgagtgacctacaaagagacttagactcccacacattaataatg
-ggagactttaacaccccactgtcaacattagacagatcaacaagacagaaagtcaacaag
-gatacccaggaattgaactcagctctgcaccaagtggacctaatagacatctacagaact
-ctccaccccaaatcaacagaatatacatttttttcagcaccacacaacacctattccaaa
-attgaccacatagttggaagtaaagctctcctcagcaaatgtaaaagaacagaaattata
-acaaactatctctcagaccacagtgcaatcaaactagaactcagaattaagaatctcact
-caaagccactcaactacatggaaactgaacaacctgctcctgaatgactactgggtacat
-aaggaaatgaaggcagaaataaagatgttctttgaaaccaacaagaacaaagacacaaca
-taccagaatctctgggacgcattcaaagcagtgtgtagagggaaatttatagcactaaat
-gcccacaagacaaagcaggaaagatccaaaattgacaccctaacatcacaattaaaagaa
-ctagaaaagcaagagcaaacacattcaaaagctagcagaaggcaagaaataactaaaatc
-agagcagaactgaaggaactagagacacaaaaacccttcaaaaaatcaatgaatccagga
-gctggttttttgaaaggaccaacaaaattgatagaccgctagcaagactaataaagaaaa
-aaagagagaagaatcaaatagacacaataaaaaatgataaaggggatatcaccactgatc
-ccacagaaatacaaactaccatcagagaatactacaaacacctctacgcaaataaactag
-aaaatctagaagaaatggatacattcctcgacacatacactctgccaagactaaaccagg
-aagaagttgaatctctgaatagaccaataacaggagctgaaattgtggcaataatcaata
-gtttaccaaccaaaaagagtccaggaccagatggattcacagccgaattctaccagaggt
-acaaggaggaactggtaccattccttctgaaactattccaatcaatagaaaaagagggaa
-tcctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagaca
-caaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctca
-ataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaag
-tgggcttcatccctgggatgcaaggctggttcaatatacacaaatcaataaatgtaatcc
-cgcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaag
-cctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatg
-ggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactga
-atgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctct
-caccactcctattcaacatagtgttggaagttctggccagggcaatcaggcaggagaagg
-aaataaagggtattcaattaggaaaagaggaagtcaaattgtccctgtttgcagacgaca
-tgattgtttatctagaaaaccccatcgtctcagcccaaaatctccttaagctgataagca
-acttcagcaaagtctcaggatacaaaatcaatgtacaaaaatcacaagcattcttataca
-ccaacaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaa
-agagaataaaatacctaggaatccaacttacaagggatgtgaaggacctcttcaaggaga
-actacaaaccactgctcaaggaaataaaagaggatacaaacaaatggaagaacattccat
-gctcatgggtaggaagaatcaatatcgtgaaaatggccatactgcccaaggtaatttaca
-gattcaatgccatccccatcaagctaccaatgactttcttcacagaattggaaaaaacta
-ctttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaa
-agaacaaagctggaggcatcacactacctgacttcaaactatactacaaggctacagtaa
-ccaaaacagcatggtactggtaccaaaacagagatgtagatcaatggaacagaacagagc
-cctcagaaataacgcccatacctacaactatctgatctttgacaaacctgagaaaaacaa
-gcaatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgt
-agaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatt
-aaagatttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacc
-attcaggacataggcgtgggcaaggacttcatgtccaaaacaccaaaagcaatggcaaca
-aaagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaa
-actaccatcagagtgaacaggcaacctacaacatgggagaaaattttcgcaacctactca
-tctgacaaagggctaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaa
-acaaacaaccccatcaaaaagtgggcgaaggacatgaacagacacttctcaaaagaagac
-atttatgcagccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatg
-caaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaag
-tcaggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttgg
-tgggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatcta
-gaactagaaataccatttgacccagccatcctattactgggtatatacccaaatgactat
-aaatcatgctgctataaagacacatgcacatgtatgtttattgcggcattattcacaata
-gcaaagacttggaaccaacccaaatgtccaacaataatagactggattaagaaaatgtgg
-cacatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgta
-gggacatggatgaaactggaaatcatcattctcagtaaactatcgcaagaacaaaaaacc
-aaacaccgcatattctcactcataggtgggaattgaacaatgagatcacatggacacatg
-aaggggaatatcacactctggggactgtggtggggtgtggggaggggggagggatagcac
-tgggagatatacctaaggctagatgacgagttagtgggtgcagcgcaccagcatggcaca
-tgtatacatatgtaactaacctgcacaatgtgcacatgtaccctaaaacttaaagtataa
-taaaaaataaataaataaataaataaataaaaaaggaaaggctttcagcttttcttcatt
-caatatgatgttagctgtgtgtttgtcacatatatgacctttatttattttatttatttt
-atttttttgagacggagttttgctcttgttgcccagggtgtagtgcagtggcacgacctc
-agctcactgcaacctctgccttctagtttcaagtgagtctcctgcctcagcctctcgagt
-agctgggattacaggggcccaccaccacacctggctaattttttttgtatttttagtaga
-gacagggtttcatcatgttggtcaggctggtctcgaactcctgacctcgtgatccgcctg
-cctcagcctcccaaagcgctgggattacaggcgtgagccactgcgcctggccatatgacc
-tttattatgttgaggtatgttccttctgtgcctagtttgttgagtttttaatcatgaagt
-ggtgttgaattttatcaaatgccttttcctgcatctattgagatggtcatattgtttatg
-tccttcattttgttgatgtgtcatgtttatcaactggcatatgttgaatcatttttgctt
-ctctgggataaatgccatttgattatgatatattacctttttgatgtgctgttggatttg
-acttgctagtattttgttcaggatttctgcaggatttcatcagggatattggcctgtagc
-ttctttcgttttgttgtgttcttgtcaggttttggtatctgagtaatgctggcctttaga
-atgctatagggagaattccttcttcaattttttggaacagtttgaggaggattcatgtta
-gttatttatacatttggtagaacttggtaaaccagtgaatccttctgatcctgggctttt
-cttcagagattttttattacgaattcaatcttatcacacattattggtctgttcaggatt
-tctgtttctttttgatttaatgttggtggctggtatgtgtgtgggaatttaccttttccc
-ctagattttcctgtcagtgtatacttgttcataatagtctctgatgatcttttgtattct
-gtgatatcatgtgtgatgtctccttttttcttttctgattttaacacacaaaagtataaa
-tcactggtacagcaaatgcataaatgaggaaaagacccaaatgttaccactacagaaaac
-cactaaaccataattataaataagagagaaaaaaaaggctatacaaaacaaccaaaaact
-aattaccaaaacgacaagaaaaagtcctcatatataaatagtaagtttgactgttaagtg
-gattaaatattccacttaaaacatataggctgtctgaatgaattttttaaaaaagtgacc
-cagtaatgtaatgcctacaagaaactcacttcaactgttaagacacatagactgataata
-aagggatagaaaaagatatctcatgcacacagaaaccaaaagcgagcaAAGAGACGATGG
-CAGTACGTTCAGGTAGgagataagcttccatgacctcagctgccaccattccccacaatg
-ccccagctacccaagagaccctgagcccactcaactagtacattacttgtacaagtagta
-cgttactactatagctggcatttgagagagccactacagtaaagctatttgcaaccaagg
-aaatcataaaaagtctacataactcctcgacacgcccatcagggctaatgattgtggttg
-ccattgggaaacctgagggcaagcctgccccatcgagctgtgcccaactttgcccccact
-ttggggctgagaatggagcccatgccactgtgcattccacagacagaccatttcctgaga
-caatactgtttctcccagtaaacaaagatcaaatataaactccctgctatcaccgcatcc
-agctcttaactgcaagtgccacctactggcctggaggtcaaactgcacaacccgatagaa
-gtgttgacataagcgtacagtgctcgagaaaaagataagcgtctcaggacctctgccact
-caagatctgcaggagactgtgagcctcatcacatgcctagtacatcactactacaactgg
-catttgagaaagtcaccgcatgaaggctatttataaccaaggaattcatacagagTATAT
-GCCATTCTCCCCATCATTACCACAAgtgctggtgtttgtgcctgccaatgagctatttga
-aggaaagtttgacagtttagctccacccagctttatcctccccttaggggctgagcaggg
-agctcaggccagtgtatattccatagactgtcccttgcctgaggcaacagagagcttctc
-cccgtaaacaaagatcaagcatacacccacctgcttctgcccagattttattcataagca
-ccacatagtagcctggaggtctaactacacaacccagtaaaaaactggcttacacaagtg
-cacagcacggggaaacaagttaagcttcctaagacttctgcactctagccctgcaggagg
-cagtgagcctagcccagcacatcactactacaaccagcatttgagaaagccaccacacaa
-aggctatctataatcaagaaactcatacagactctttgccactgaaagcacccagaacca
-aggccaaataaccctacacaatgtatattataatcacatcctcaagggggaaaaagtcct
-gaccaaatgaaagtaaatttaaaaataagaacagatagttgatccaaatgagaaggaacc
-caagaaacaattctggaagtataaaaaaaagagtgttacaacaccccaaaggattgcact
-aactcttccacaatgaaccctaaccaaaatgaaatctttgaaataccaaagaattcaaaa
-tattaattttaaagaatctcagtaaggtccaagagaaagtaaaaaatcaatacaaatcag
-aaatataactcaggatatgaatgaaaaatctactaaagagatggattttttaaaatagtt
-tttttgttgtttgtttgtttgtttgttgttgttgttgttgttgttgttgagatggagtct
-tgttctgttgcccaagccagagtgcagtggtgcgatctcggctcactgcaaactctgcct
-ccagggttcaagtgattctcctgcctcagcctactgagtagctggaattacaggtgtgtg
-ccactacgcccagataatttttttttttatttttagtagagacaaggtttcaccctgttg
-gccaggctggttttgaactcctgacctcaagtgatctgcccaccttggcctcccaaaatg
-ctgggattacaggtgtgagcccactgtgcccagcctaaatagttttttcaaatgaacttc
-tgtaattgaaaaattcatttaagaaattacaaaatatagttgaaagctctaacaatagac
-taaaccaagcagaagaaagaggttcagaacttgaagacaagtctcttatgaattaaccca
-gtcagacaaaaataaagaaaaaaattttaaaaatgaacagagctttcaagaagtatgaga
-ttatgtaaagtaactgaacctatgagtcacaggtattcctgaggaaaaagaaaaagtgag
-aagtttggaaaaactatttgaggaagtaattggggaaaacctctttagtcttgctagaga
-tttagacatctaaatgaaagaggctcaaagaatgccaggaagatacattgcaagacagac
-ttcatcaagatatgtagtcatcagactatctaaagtcaacatgaaggaaaaaaattctaa
-aatcagcaagagaaaagcatacagtcatctataaaggaaatcccatcagaataacaatgg
-gcttctcagcagaaaccttacaagccagaagagattggatctaatttttggacttcttaa
-agaaaaaaaaacctgtcaaacacgaatgttatgccctgctaaactaagcatcataaatga
-aggggaaataaagtcaagtctttcctgacaagcaaatgctaagataattcatcatcacta
-aaccagtcctataagaaatgctcaaaagaattgtaaaagtcaaaattaaagttcaatact
-caccatcataaatacacacaaaagtacaaaactcacaggttttataaaacaattgagact
-acagagcaactaggtaaaaaattaacattacaacaggaacaaaacctcatatatcaatat
-taactttgaataaaaagggattaaattcccccacttaagagatatagattggcagaacag
-atttaaaaacatgaactaactatatgctgtttacaagaaactcattaataaagacatgag
-ttcaggtaaaggggtggaaaaagatgttctacgcaaacagaaaccaaatgagagaaggag
-tagctatacttatatcagataaagcacactttaaatcaacaacagtaaaataaaacaaag
-gaggtcatcatacaatgataaaaagatcaattcagcaagaagatataaccatcctactaa
-atacatatgcacctaacacaagactacccagattcataaaacaaatactactagacctaa
-gagggatgagaaattacctaattggtacaatgtacaatattctgatgatggttacactaa
-aagcccatactttactgctactcaatatatccatgtaacaaatctgcgcttgtacttcta
-aatctataaaaaAATTAAAATTTAACAAAAGTAAATAAAACACatagctaaaactaaaaa
-agcaaaaacaaaaactatgctaagtattggtaaagatgtggggaaaaaagtaaactctca
-aatattgctagtgggagtataaattgttttccactttggaaaacaatttggtaatttcGt
-ttttttttttttcttttctcttttttttttttttttttttGCATGCCAGAAAAAAATATT
-TACAGTAACTATGGAACACAAAGGTTTATTACATCCATAATTAACATGGAACATTTACTT
-ATCAGTTTGACAAGGACAACACTGAGACCTCTTAGGACAGAGAGAAAGGGCAATTTTCAA
-AGGAAAAAAGCATAGTATATGCATATttaataagtaaaacatacacataccctgtgactc
-agccattgtacatctagctgtttatccaagagaaatgacagcatatggctacacaaagag
-ttgcacacaaattttcaatggcagttttatttgtaatagctaacatctgaaaacaatcat
-aatgttcattagggggtaaatggataaatgatcatatatgcataaaaagtaatacaagca
-ataaaaaggaatgaactattggtacacgaaacatatatgattcaaaataattgccttgga
-tggaaaaagacaagcggaaaagtatacatgctatattacttcatttatgtaatattcaag
-agaatgccaagaaagctacaagaacaaatagcaggtcagtcgttgcctgggtatcatgga
-ggtagagggagggaagggaagaggaaagagtggatgccaaagaggaatgagaaacatttt
-gagagtgaaggatatatacattatgttgattaaggtaatggtttcaccagtgcatctttt
-gccaagttcatcaaattatacactctaaataatgcagtttaatgtacatcaattatatct
-caataaTTTGGAATGAAAAAAAAAAACTCCTCACAAAGAACAAAACCTCTAGGACCTGAT
-AGCTTTCAGTCACAATATAGTCAGGCACTCAAAAAAAAACTTTAACACAATAAAATTCTC
-TTTGAATGCCACCTTAAACTCAATCCCATCCAGAGAAAACAACTTTTATTAGAATGACAT
-GTGATTTGCATTTTTAGTTCATGCATTTACTTATATACACATAAATATAGCTTTTTCACA
-TAAATTAGAATCATTGCTATGCATGTTGTTCTAAAATGTTGCTTTTTCACTCAAAAAATG
-TTTAGTAAGATAAAATCTGCTGCACTCTTTTTAACAGAAGCACAGAATTAAATCATATGG
-ATGCACTTCGTTTTATGCTACTCTACAGAGTGACAAGACTTCTTTGTGCATTTATCTTTG
-AGCACTTATTTATTTCTTTGTAAAAGGCTTTCTAAATTTCCAGATCATCAACAAAGCATT
-AATTTGGTCAGTTAAAAAACAATTGCTTATATCCTTCTCTGAAAAGAATGATGTACAGAA
-AAGAATTATATATATATATGAATAATACATCATAAGTGTTCAGAAAGACATTGTATTTTA
-GGTGGAGAGACAGGCAGGTGACCAGACTGCTACATGCAGTAAGATGAACCCTGATAGAAC
-TAACACTGGAGGCTGTGAAAAAACTGCTAGGAGCACCCAGCCTTGGTAGAGCAGCATAAT
-TTCTTCCTGTAATTCTTTCTCTCCAAATTGCCATACACTTCAGCAGAGTTTGCAACTTCT
-CTTCTAAGTCTTTATCCTTCCCCCAAGGCATGCCTAGCACAGGACTCTTGAACAGTGATG
-CCTCAATTAGAGTTGCTAGCCAATAGATTGAAGCTATGTTGGCACAATATCCTACATCCT
-CCCGATCTACTGGCTGAGCCCAACCCCACCTAAGAAGGACAATAAAGATCTGTGTTCAGA
-GTCATACTGAATAGAGACTTCTGGACTCTATAGAACCCACTGCCTCCTGATGAAGTCCCT
-ACTGTTCACCCTTGCAGTTTTTATGCTCCTGGCCCAATTGGTCTCAGGTAAACAGAATCT
-TGGGGAAGAAGAAACACTGGCCTGGAACAGGGTCCTGCACATGGAGTCCCTGTTTCTAAG
-TGGTCTGTGGAAATGGGGTCTGGCTTCTCACTGGGAGCAGGGCTGAGATTTGTCCTACTT
-CTTCAGACCACCTCTGTTCTAAGAAACTTGAAGGCTCTCAGGATAGAGCAGGATCTGTGA
-TCGGAGCTGGGGAGGAGGGTAAGGCAAATCCCATACAGTTGCCTCCAAAGGTAGAAATGA
-TCTTGAAATCCCAAACTTCTATCCTGTCACTTCGGGTCAGTCCAGTCAAGCCCTGCCTCA
-TTTCACTTTTGTTTTTTTTGCTGCCGATATTCCCTCCTGAGGTAACAATTATATAATATT
-ACTTCCCCCAGTTTTCTTGGTCTTACAGAGAGGTCTCTGATTTTTTGTTTGTTTGTTTGT
-TCTTGGATGTGGTTAACAGAACAGGAAAGGCTGTTTCTATATATGTATAGGACTGTAAAA
-TGGAAAATGAAAAAAAAAATTCTGTGTGGGAACTATTGGAAGTCTATATCAGATTTCAGC
-TCTGTTTGTGTAAGCATTTCTTATTTTTAATTTATTCTGTAGCTTATATTTACAAAACCA
-AGACAAGAACACTGAAAGTTATTTAGAAATAAATTGGCCACATTTCATCACTGCTTGCAT
-TTTTTCACTTGTAACCAactgatatatgagcttataacctgctttatttttttacctacg
-attctatcaggaaaattttcacaggtcttgaatattccttgaaaatacaatttgcagtag
-atgcttataattctgtcatatttttgtaccaatattaacttggaaagtccttaattgtgt
-gtcatttggattattttttctaatgtgtgagtactgtaaataacattgtacaaccttatt
-aatatatcattgtgagattctctgtttgtataggtaaattttagaagttccattgcttgg
-tacaagggtattatttcttctaagttaactggcacatattgccaaTGGTTACTATTGGAG
-TATTTGTATTTTTAACATTTGTATTTCATATTTCTTGCAAATATTTTCAAACATATTGGT
-TGCTTCTAAAATGCATTATTTATTTGAGACACATAATTTTCATTTTCATGTCAAATCTAT
-TGGTGTTTTCTTTGCATTCTTCCACTAACTTAGTAAGTCCTTCTCCGTGTTGAGAACAGT
-TATTCACCTATGATTTTGTTTTTTACACCGGACTCAATCCCACCTTTTTACATAAGGCAC
-AATGAAATAAACTAATATTCTTTAGTATAATTTCCTAATGGGTTATATAATAACTCCATA
-GCCCGCCTCTAGAGATAGTAGTTTATATTCCCTAATTTGCAGAAATGTTCAAATTGATAG
-TGGATAAGAGGAAATTATAATGCTCTCATGGTTGTCTCAAAAGATGTTTCAGGCCTATTG
-CATCCTTGAAATTCTATGAGTTTAAATTGCCTGATTTCTCCCTCTGTCTCTGGAACATTA
-GTGACATACATCGACATACATCACATACTTGTATGTTGTCCTTTTTCTACACTTTGTGTG
-TGTGTATATATATTCTAACATATACATATATATAATGTTAAAAACTCAATCATCAGAGGA
-GGATTAAACAGCTGATAAGGGATAATAGTAGTGGTAATAGCATTCAAAAACGTTTGCTCT
-GTTCACTTACTGTCAAttacctcatatttctttcatttattgtacttatcacaatctgta
-gttattttgtttattcatttacttgtttattttctttctccccctctccaatgtaaggtc
-ctcaaatcatgtctttctgttcattgttttattccctgcatcttgcagaattcttgacat
-ggtaggcactcatcatatacttgttgattaagtACAGTAATGAGTTAAGCAAGGTAAGAA
-AGAGCTCCAGCGTCACTCTAGGGCCTCTATGTGTTAAACCATGTGATGAGATATTTTCAT
-ATGTATATAATATGTACACATATATAGGCAAACCCTGCAGAATGTCTCCCTAATGAATAT
-ATTCCTAATGGAATGGCTTTTTTTATTCTCAAAATTTTGTAAAATGTACTTATATCTCAA
-TATCATATAGGTATATAGGTATAGATGAAAATTTTTTATTTATCTTTCCATAACTTGACA
-TGACATTTTTAACCAGATAATATGTAAGATAAGCCTAGAGTTATCTTCTAAATATAATTT
-TTAGGATCTCAGAAACATGTAAGGGACATTTTGAAAATCTCACCAATTGGCAACAAAAGC
-CATATGTGTTTCAGTAATGGTGAGAAAGATGACAGCAATTATTTTAGCATTTCTTATTTT
-TGAAATGATAGTTTTTACTTCTGTTTAGGTGTTTGTGTTTTAGCTACATTTTAGGAAATT
-GCTTGGGGATTTTGTGTTCATGTATAACAACATGCTATATATTTTCCCATTTAAAATCAT
-GGGGAATTGGCCCCTGGTAAGTGTTTGTATACAGAATTCTGATTTCAGAAATGAGAATCT
-CATACATATCTAAAGAATTCTATGTGTGTTTATAAAATTTCACTTAATCCTCAAAGTAGG
-TATTTATGATTAGGAAAAACATGCTAAAGCAACTGGAAAGGCACTTGAATAAACAGTGCT
-CAAAAACTATTGCTATTTTTTATCCTCCTGTGATAAATACTTAGGCTTAATAATCTATAT
-AATTCCTTTATTCAGGTAATTGGTATGTGAAAAAGTGTCTAAACGACGTTGGAATTTGCA
-AGAAGAAGTGCAAACCTGAAGAGATGCATGTAAAGAATGGTTGGGCAATGTGCGGCAAAC
-AAAGGGACTGCTGTGTTCCAGCTGACAGACGTGCTAATTATCCTGTTTTCTGTGTCCAGA
-CAAAGACTACAAGAATTTcaacagtaacagcaacaacagcaacaacaacTTTGATGATGA
-CTACTGCTTCGATGTCTTCGATGGCTCCTACCCCCGTTTCTCCCACTGGTTGAACATTCC
-AGCCTCTGTCTCCTGCTCTAGGATCCCCGACTCATTAAAGCAAAGAGGCTTATTCTGGTG
-TCAGTTTTCTCTCTACAGCCCCCTTCCCACTTTCCCTCCATTCAACAGTGTCTGGAAGGG
-CACCACAATTTCACTGCACTCGCATTTCTATGGTAGAAATGCAAATAAGATAGGGGCCAG
-GAACAAGGGAGGGTTAGTCCAAAACACCCACTCAGGAATGATAGATAGTAGCAATGTCCT
-CCTTGAAGACAGTTCTAGGCCCACAGCTTGCCATAGCAATTATCAtcaaacttcatgtac
-atcagaaacacctggagagatggctaaagcacagatttctagggctcacttttagtttcc
-aattctgcaggggagcttgagaatttgcactgctcacaagttcccaggtgatgctagggc
-tgctggtccaggcaccacactgtgagaacAATTAGCTTATAATATGAAAGGATTGAAAGC
-CGACTGTGAATGTGATTTTCTACAGATTGAAGGCTGCATTTCCTATGTAGTTTTGGAGTA
-GATAGTAATACAAAatcatcctacagaatcctccgacaacaacctgagaatgtaggtatt
-ataacctcactttagagaataggaaactTGATTTCTAAGCATTAGAAGACTGGGACAGAC
-TAAATTGACTACTGAGAACATTCTGTCACTGCACCATGAGGTTGCCCAATTTTCTTCTCA
-CCCTGGAAATCCTCATTCATAGCTTCCAACTTAAATATGATGAAAGGGAGATCAAGAGCT
-CTATAATGTGTCCTGAATGTTAGGACAGGCACTCATCCCAAGCAATAGAATGTTTTCCGT
-ACATTACATTACATTGATGCTCTGCCTGCACCAATAAGAGAATATGACTGGGTGTATCAT
-AGTCATCCATCCATGCCTCAGGCCCACTTCCCTGATAGTTGGACAGGGAGAATAGGGAAT
-GCAGATGCCTTCGCTTTCTGGACACTTACAGTAGCTGTGTTTGTCTTTGTCATCTCAGTT
-TGCTCACTTATGAAATGCTAGCGTTTTACTCAGTATCTTTCTCCCCACCCCTGTCATAGT
-ACATCTTTCTGATTCTGAAGATATAAGATTGGCTTATGTTTTGTGGGGTCAACTTCACCT
-TTGACCCCATAAGATCCTAGAGATTTAATGTAGATATATAAAAGTTGGAGAAAACATTGG
-TGGAAGGGTTTTCTCCACTATAGACACAAATCCATGAGTGTCATCACAGACTCCTTTTCC
-TTCTTCACTTGATTCCAGTGAAGATCCATGTTCAttctaccacctccaatatgtaccatg
-acctctatctccagctgctgctaggatgattgcaatagccttcccattgattgccctgca
-ttcctttcacactcacgcctaactatcctccacaatgagagccagaatcatttttctgaa
-acacagatctaatcattagactcccctctggcatcttttcccatagcatcctaagacaac
-tcttcagagcagccttcatcactcttggcattcagaacctgccttgcgtttccagtttta
-cctccaaagcactgtcacagggcatcttgctatcccaccaacatacctcttcgtgattgg
-tttgaactcactggattgcttctggttttgagtttttgtacatacttttctgtctCCATT
-TATAACTGCCTGGAAAAAAATCTTTATTTTCTTCTGGAGGACTTTGATAACCACACTGTT
-CTACCCACAATAGAACTACTGCCACCATTTGTGCTCCACTGTTATGACTTACCCAGAATT
-TTAAGTCATCATGTCACATGCCTCACTCTGAATATCTGCTTATGTCTTCTCCCCTACTGG
-ACTTTGAAATTTTATTTAGGAACAGGAACCATCTTATCTTCTCTTTCTCCTACCATCCCC
-TAACAAGATTCTATATTAATTCTTGTTGAATAAGTAAGAGGGATTCTCGAAGGCCAGAAA
-GATCTTTGGATGTTACTGAAATCTCATTTTTATTTATTTTAGATCTTCTCCAGGAAACAG
-GCTTCTGTCTCCTTTAGAAGACATATCTATGATCTATGTCATTACATAGTAGAGGAGTTT
-TGAGAGGTGGCTTGTCCCATGTGGTAGGACATCATTGCCTCTTACACCCATGCTTATCTT
-TGCAGGCAGAACTCATGAACTCACACAAGAAGGTGGGCAGATGGAAGCAAGTTACTTCAg
-cagaggagaatagtaggaaaaaaacataactttagagctggatgtatctgaggtcattca
-tgatcccaccatatatccactcttggaccacagacaaatgatttcccatcttcgagcctg
-ttactgaatttgaagaacagagaaaatactcactcccactcaaggtactttgagggttgc
-cagagtaatctattaaaatgttaatcataTCATAGGGATTCAGCTGTAACAGGTTGTTCC
-CTGGATAAGAAACAGTACAGCACATTTCCCCAGGGCCCTGCCCACTGGGCCTTGGCTGTC
-TTGCCTGAGTATGGGTGATTATAGCCTATGTTTCACCTGGGGGAAGACGCATTAGGCTGA
-GAAGAGTGTAACAGAGTTGAGGGTCATGGGATCTCTTTGAACAGCCAGATGAGATTTTAA
-AGGTTCTAGTAGAACTTGCTGTGCTTACTTTTCAATAATCACCTTGATCACTACCTTGGA
-AACATCTTAGAGCTATTATCACATTGATTCTAGACGATGAATATAATCTCAGTGCTGCAG
-CCTGAAACATTGTCCTCCTGTCCTCTTGCCTTATATCTCATCCGTCCTTCACGCAGTGCT
-GGAACTTAGGTGGCAAATATTCTTTTCCCACTTTGGAGTTGACTAATGGCATTAGGAGGC
-CAAGGGAAAAGGAATCTTTATGGTGAGAGAAACTGCAATGTGCCAAGCACATTAATACAC
-AATTTCTTAAACAAAAGCATTGTATGATAATtatgacaacatgattaaagctgaggaacc
-tggagtaaaatgtatctagggttacatctaggtttgttccttactacttttactcatcat
-gtggtctctatatcaatttcttcatttgcaagacaggtataatcatgcatctacctctta
-gaatcactctaaaaattaaaatagataaggcatataggtcaccgtgatctctagcaccaa
-tgaaattctaagaaatgtagatttTAAAAGGCATATGAGATATAGGTTATTCTGGTTTAA
-AATATGAAACGTTTAAAAAATAAAATATGTAAGTCCTGAGTTTCCGGGAGAAAAAGGGTC
-TTGCACAAGAACAACCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCCGCATCTCTA
-CCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCC
-GCATCTCTACCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTT
-CTCAAGGCCGCATCTCTACCCCATCTCATGCGAATCCTGACGACGTCCTCAAAGCTGAAT
-AAATTTTTGCCTTAAATAAATTAAACGAGATTTAGATTTCACCAGTCACTGATACTCAAT
-CCCAATTGGATATTCATTCAAAAGTCTGACTTCTCTCCTGAGGTGAGAGTAAGATTCCTG
-GGCACTTTTTCATAATACTTACCTTAACCTAGCTAAACACAATGGACACTCTTCTTTGAG
-gtgtcagtggaaattaagaggagagtctgaactcttacctcccacatggggcttgcagac
-aggtgaagatggcgctcctcccctttgttggtaatggagacctagaagaaaggctgggca
-tccagctcccacgcagtcatatgaagcagcccagagcaacattccccttcactgcctgtg
-cggtggcagtagagacctagcAGTAGAGACCTAGCTGGGAGTCAGATCTCCCATCCCTCA
-ACCAGTGGTAGTGATTGGCCTGGGgaggaatcccttccctgctggtgccatgtcagtgaa
-aactgaggggagactgaaattgcccttccttccaatagtataaaaggcctgaagcagact
-tcccttcccagccagtacattaccattgaagaccaaggggtggtctcaacttcaatccct
-aGGGAGCCGTGGCTGGCATCAACCCTCCTTCCAGTCAGTGAGGATAGAGGATAGGAGGGT
-GCTGGAAAATAGGTGTCTTTAAAACTGAATAATGTTGTTTTTACCACAATTTTAAAAACT
-GAATAAGAAGACATGGCAGACCCCTGAAACTGGATAACTACACACGGAACTAACCAGAAT
-TAACATGCAGAAGGTTTGAGAATAGAACTGCAGTGGGGAATACCACCTAGATTTTTAaaa
-taacaacttgtatatatttaaggatatatgcaatatgatgttttgatatacatagacata
-gtaaaatgattgctataatcaaattaacatatccttctcttcacatagttatcatttttt
-gaggagacagcacctgaaatccatcttcttagcaaatttctagtatacaacaccatatta
-ttaactagagtccccatactgccctttagctctctagactttatcctacacaacttcaac
-tttgtacccttcgacgagcatccccccatttcctccaccacccgccccacccctgataat
-cactggtctacactcttctatgtatttgaatttttaaattccatgtataagtgagatcat
-gctgtactttttttctgtgtctgtcttatttcacttagcataatgtcctctgggttcatc
-catgttgttctgaatggcaagctctcctttgtcaaggctgaataatatgccattgtatat
-atatacaatttatttagtgtgttcatctatcgatgtcgatagatgataatgtcttcatct
-atcagcttaggttgatttcatatcttggctattgtgaataatgctgagcacagatatctc
-tacatggtgccgatttcatttctttttggtatataccaagacgagggattgatggctcat
-atactagttctgtttttatttttttgagaagcctccatactgttttacatcattgttgta
-ctaatttacatttccaccaacagtgcgcaaaagttccctttacattctcaccaatacttg
-tgatctcttgtctttgtgataatagtcatcctaacaagtgtgaagtgatttctcattgtg
-cttttgatttgcatttccctgatgattagtgatgttgagcacctttccatacacttgtta
-gccacttttatttcttctccagaaatatttctgttcatgtctttgcccaattttcaagtg
-ggctctttgttttttgctactgagttgtgtatgtttcttatatgttttttatattaacct
-tatgtgatatatggtgggcaagtattttcctcccatcccataaactgccttctcactctg
-ttgactgtttcctttgctgtgcaAcaaatgatcttcaatgataatacaaagaatatgcaa
-tacagaaatgatagtcacttcaacagatggtgttgggaaaactggatttccacaggcaga
-acaaatgaaatggatccttatcttacaccacacacacacacacaaactcaaaatggattt
-aaagacttaaatgtgagcctggcaaacttaaaactcctaaaataaaacagaagggaatat
-ctttatgactttggtctaggcaacagttgcttgaatatgacatcaaaaccacaagcaaca
-aaagcaaaaatatattagtgggactatggatacatttgaaacaaactacaaactagtaaa
-atctcagcaaagaaatagaagatataggccaggcacggtggctcacgcctgtaatcccag
-cattttgggaggccgaagagggcggatcacgaggtcaggagatcgagaccatcctggcta
-acatgataaaaccccgtctctactaaaaaaaaaaatacaaaaaattagtggggcatggtg
-acaggcacctgtagtcccagctgcttgggaggttgaggcaggaggatggcgtgaacctgg
-caggcggaggttacagtgagccaagatcatgccactgcactccagcctgggtgacagagc
-gagactccatctcaaaaaaagaaaaacagaaaaaagaaaaagaaatagaagatatgaaaa
-taatcaaatggaaattataaatttatgaaatgtaatcaaagtaaaaaagaaaaagtcact
-gtataggctcaatagtagatggaacatgacagaggaaaaaataagacagatctatagaat
-tacccaatctaaaaacagagaaaaatagactgataaaaatgaacagagccacagatacct
-gtgggacataaaaagatctaatgttcatgtcatcagagtcctcaaggagagggagagtgt
-ggaactgaaaaaaatatttgaaggaataatgcctgaaaaatatcccaagtgtggcagaat
-acatacatctgtaattcaagatcttgaattaacccaaaacaagataaacccaaagaaatc
-catgccaagataaagtataatcaaactaaaactaatagctagagacagaaaaaaatcaag
-cgagcattcagaaacaatacaccacccatggtaaaacaatggtttgattgatgggatttg
-tcatctgaaaccatggaagcaaaaaagaaatgtcatcacatgtttcaaatgccaaaataa
-agaactatcaaatccaaatcctatatctagcaaaaaaaaaaaaaaaaaagttctctagga
-ataaacagggaaagaaaaacattctcaaacaagaaactattaagggaatttgtcactagc
-agccctatcctaaaaatatagtcaaagaaagttctctaaaccaaaatgataaccgggggc
-ttggaacttcagaaaggaagaagtcgaagtcaatagaatgggtaaaatgggaggtgaata
-taatagactatgcttttttttttgctttattttttttttatgctttcttttcttgagata
-gtgtctggctctgtcgcccggacaggagtgcagtggtacaatctcagctcactgcagcct
-cgacctcctgggatcaaaggatcttccctcctgagcccagtgagtagctgggaccacagg
-agccggctaatttttatatttttttgtagagacagggtttcactgtgttgcccaggctgg
-tctcgaactcttagactcaagcaatctgctgcctcggcctcccaaagtgagactatcttt
-ttattaaagagttttgaaatcatgtttggtagattgaagcaaaaattgtaacattgtctg
-atgtggttctaaatagatgtagaggaagtacttaaacattataagctgggtaaggcaaag
-aaatttaaagtgaggtaagtttttatacttcattcaaacttgtaaaactttgacaccgta
-gactgtgataagttaggtacagcaaccactaaaaaaaataaataaatacaataagaaatt
-atagctaaattatagtggaattctaaGgaacaaatagaaaacaaaatataaaatggtaac
-ttaatccctaacatgtatcaaaaagataccccatacaaatattaatcataagaaagtagg
-aatggctatattaacatcagttaaagcagacttcagagcaaaacaaattatcaaggacag
-agagggaaattatataatgccaaaagggtcaatcaaccaagaagacatggcagccctgat
-cgtccacaaactgaaaaccagagtttcaaaatacctgaagcaaaaactgataaaactaag
-aggagaaataaatttacaatatcaggccaggcgtggtgactcatccctgtaattccagca
-ctttgggaggctgaggcaggcaaatcacttgagcttgggagtttgagatcacctgaggca
-acatagtgagacccccctctctataaaagatacaaaaactaaggtgtggtggcccacgcc
-tgttgtcccagctactcaggaggctgacatggaaggcttgagcccaggacatcgaggctg
-ccgtgagctgtgcactccagcctgggtgacagagcgagaccccgtctcaaaaaaaaaaaa
-aaaaaaaaaattacaatatcaacttcaacagttgatagataggacaactagacataaaat
-ccacaagggtgtagaagaatttaaaaataccacaaagcaacaggatctaatagacattta
-taaaacatttcatccaacaacaatggaatacactccttggtgtttatgccaaggaaatga
-aagtgtttttctccacaactcccgggcaggaatatcaatggtagtgttatttataatagc
-ccaaaagagtaaacaaccaaaacgtcattcaacaggtgaatgactaacatagggtggtac
-atccatacaatggaatacttctcagcagtaaaaaaaaaaaaaaaaatgaattattgatac
-atgcaacagcttatatagattataagagcattatgctgagtgatgaaaaaagacaaaggg
-tcacatagtgtgtgactatattcacataacattgtctaaaaattatgaaatgtagaacaa
-attagtgctttccaggggttatgaatagtcaggagagggagggaaatatgccagtaagac
-aataagagagggagatcttttcataatgaataattctgtattttgatttgttgatggtta
-aatgaatctaAGAAGGATCTGATAATCTAGTATTAGACGCATAGTACAGTAGTGAACTTT
-CAGCCTCTAGAGAagtgctctccaatagaagtaactaaaaagatggaaatgttctaaatc
-tgtactatacaatatgttagccactggtcatgtggttgtaaagcacttgatatgtgCTCT
-ATAATattttgagcaagtttcttatgttttctgtgcctttgagtttctcatttgtagaat
-ggagataataatatctacctcaaagtgttgctgtaaaggtaaatgagtttatgtatgtaa
-gacaccgacaggagtgccagcacatagaaagtgttatacaagggttagccattTGTTATT
-GTCATTGTTGTGTTTTGTTCTCTTTCTAATGTCTGGACCTTCAAAtgattcagactcatg
-ggaccatacttcattctgtttttataactttaacctgtaagattctcattttaattggaa
-tttcatatttaggaattcttgggtgccttggatatatgaagaaaagattcacatctgctt
-ccactaaacaactagcgaattaacaactgagatttcttataattaaattatttacttgat
-ttttttaatccatataaatagcttgaacttaggttgaaacccatgagaatttgtggctac
-agttcatagggttaatatttaccttctccatccagagccaaggttaaTGCTGACAAAATA
-CAATCTAATACAGATTAATCTGTGTGTGTGTGTATGTATACACTCGTGTCAGAGAGAGAG
-ATTTCATTCTTCCTTAGGCTGAGATTGTTGCCTTTGAATCTCAGGTTTATATAAGGGTAT
-CAATTATATGTCTTCCCTAGGACTAGATCTTAGCTTTATACATCTCACATAGCCATCAAA
-ATAATGTTCAACTTATCTTTCAGGGTTTGCAATCTTAGTTTTTGGCCTGTGCAGATTCCT
-TTCATTTTTGACGGTTTCTCAATGCAGTAATTTCCTTTTTACATTTACCCAACTTTTTTG
-GTTATTTTCACCAGATACATTGTTCAATATATCTATTCTACTATATTCTATTAATAACAG
-TCTACTATATATGTGTCTTATTGTCTAatattgctgaaatctttttttaatccaataatg
-aatctctgtcatctaatcagtgagtttaagccatgtgaatgtattataactactgatcta
-ttaggacttttttctgccCTCCAGTTGTGACTTATCTATTCCTCATTTTTTTTAGTTTCT
-GTTGGATGGATCATATGTTCTTCTGCTAATATGaatattataattttatttttatttgtt
-ttattaaaaatttGTCCTTGCTCTTAGGACCCATTCCTATCCTTATATTTATTATTACTA
-ATTTAACATCCAGCTTCAGAAATACAACTTTAATAGGAAGGCTTTTTGTATTTCTCCTGA
-CTGCTCAGACTTAGGGTCTTTATTTGATGCTCCACCACCAAGTCACCTATAAGGAAAGTT
-TGCATTCACAGGAAGACTATAAATAATAAAACCAATCCCTTGACTAGGACTTAAACCATG
-TAAAAGCTGGTGGCAAAAGTAAAGGGAGGTGACCCTTGAGACCTCTGAGGTAACTGCTCT
-TAAATTTACATTTGCCTCTAAAAAGGATTTCTTATATGTCAACATCTCTCTGTTTAAACA
-TATTCTTGTGTAAAACCACTACGTGACCTGAATAATGGCCATAGGGCTCATCTCTAAGCC
-AACTGGCTTATTTATTTAATGCATCTCAGTGGTTAACAGGGTTGAAATTTTTTGAAAACT
-GCAATCAATGATCAAAGAATGATCTAGGTAAACATCGATTCCTTGTGGCAACATTTTAAT
-ATTTTCAAAGACAAGGTACAACTGGTAGAAAAAAAATACCCTCATGCATCTTTttcttct
-aattgtggtaaaatatatgacataacattggccattttagccatttttCCttttattttt
-agttgacacataattgtacttatttataggatacaaagtgatatttcaatacatgcatat
-aatgtgtaatgatcaaaccagggtaattagcatatccgtcacctcaaacatttatcattt
-gtattgggaacattcaaaatcctctcttctagccttttaaaagtatacaataaattgtag
-ttaaccatattcaccttacagtgctacaacaccagaagtcattcctcctatctataattt
-tgcatccattagccaatctctctccatcctcccctctccctaatcattaccagcctctaa
-tattaatatctgcaacactactctctacttccatgtgctcaacttttttagctcccatat
-ataaataggaacatgtggtaatctttctgtgcctgacatttcacataacataatgtcctc
-caggctatccatgttgttgcaaaggacagaatttcattatttttatgggtgaatagtatt
-ccattgtgtGTGTGTGTGTATATATATATATATATATTCCATTGTGTGTTATGTATGTAT
-AGTATTCCATTGTGTGCatatatatgtatatatgtgtgtacatatatatatacataatat
-atattcttctgcacatggaaatccagtttctccagcatgatttattgaagagggtatcct
-ttccccagtgtatgttcttggtgcttttataaaaaatcaggtgacCTCAGATCAGACCCA
-ACTACATCATACCTTCTTTCGAAATGTGCAAGAAACCTACTAGAAATTCTTATTGTTAGA
-GTTTCAGATTTATGTCCTGGTTTATACTGCCACATTCATTCTTGGAGGTGAGTACATTTC
-GATCTTGGTCCGGCTGCGCAGAGAGTCAAAGCAGGAAAATCACAGATTCTTCCCAGCAGT
-CTACAGCCTACACAGCGGCATTTGGTGCGATGGGATGGAACATGCTGTATCTCTATTCCA
-TGTGGGGGTAAAGTGGGTGGCCTGAAATTTCCTGTGTCTGCCTGCATGATGCAAAGCTCA
-CAGTTCAGAAGCTTAAGGACACACTTCATATCATCCCATCTGTTCTGGTTCAGTGCATAA
-GAATCTAAGTCTCTGAGGAAGGTAGCATAGTGTGCAGTTCACTGGACCAAAAGCTTTGGC
-TGCACCTCTTCTGGAAAGCCTGGCCATGGGGCTCTTCATGATCATTGCAATTCTGCTGTT
-CCAGAAACCCACAGGTAAACCAAACCAGAAGCTCACTCAAATCAACAGTGGGATGGAGCA
-TTTTCAGGAGCCAAAGGGAACTTCATAATCCACACTAAAGGGAAATAGAGCCCCCAAAGA
-TGGCTAAAGTTTATCCAACATCATCAGAAATTTCCTCTTTCTGGAGCCTTATTCCATGTT
-ACTATCCTTAAAGAGGAGTACTCACTGAGCTAAAAAGAGGTCATAATTTCTTCTGGGAAA
-GATGTGTTGTTATAGAAAGGAATGATGCCAATATCTAGGGATACCTTTATGTCTTTGGAT
-ATGGTTTTTACTCTGATGCTCAGCTATATTTCCTTTTACTCAAATATATATAtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgCATGAatagaggaagaagcaaattttggagttaggt
-ttaagaaacatgccttcaatatctactagtttgtcaactttaagtagtgaagactctagg
-agcctcagtttcctcatctatggagataatgacacctggttaacaggggttttattaaat
-gatataacctatgtgaagcttggcacatactgagaactcaaaaatTAGAGTTTCCTTTCC
-TCTTTCAAAACCAGATTTCTTACATGTGTCCCTTATTATAAGAATAGTAATGGCCTATTC
-CTGACCCTCTACATTCCTAAGACCCAATAGACTACTACCTTACTGGATAACATGAAAGTC
-ATTCTTGACCCTGATAGTGGGTTTGAACTCAGGAGAACAGTTTGATTCAGACATAAACAC
-ATAGTAACAATACATTGTTCTCTGGGCATCAGAGGAGGTGCAGTAGAAGGTAGTGCTCTG
-GGAGCATTCAGGATGCAGGCAGATTTGCTGAGGTTCCTATGTAGAGCATAGTTCCATAGC
-CTAGAATCAAGGGTTCAGCTCCTTTATTTTCTCAGATAAGATCTTATGTTCTTGGCAGAG
-TCTATCAGATGTTAAGGGAGGCCTAAAACCTCACAGGACCTAAATATAAGTGATCCAGTT
-AAATACAAACACTGAGGTTGACCTTGTCGGAAAATCCTCTTCAGAATATATGAGGGTCTG
-CCTTGTGGATACCCCATACCCCTAATTCCTACAAGCCTCCTCTGTCTTCCCCAAAACCAA
-CGTGCCTTCAGTCTCAAACACTGATATTGTTCTATTGCTCCTTTCTGTGTATAGTAACCG
-AACAACTTAAGAAGTGCTGGAATAACTATGTACAAGGACATTGCAGGAAAATCTGCAGAG
-TAAATGAAGTGCCTGAGGCACTATGTGAAAATGGGAGATACTGTTGCCTCAATATCAAGG
-AACTGGAAGCATGTAAAAAAATTACAAAGCCACCTCGTCCAAAGCCAGCAACACTTGCAC
-TGACTCTTCAAGACTATGTTACAATAATAGAAAATTTCCCAAGCCTGAAGACACAGTCTA
-CATAAATCAAATACAATTTCGTTTTCACTTGCTTCTCAACCTAGTCTAATAAACTAAGGT
-GATGAGATATACATCTTCTTCCTTTTGGTTTCTTGATCCTTAAAATGACCTTCGAGCATA
-TTCTAATAAAGTGCATTGCCAGTTTTCTGTCTCATTTTGTTCTTTAACCAGGGGTTGAAC
-ACTCATTATATACTAGGTAATGAATTGATAAGAACTCAGAACCTCTCCTTGAAAAGGGGA
-TATGACAAGTACACTAAAAAAAAAAAGTCCTATAGTGTGGAAGTCTGGAATAAGAAACTC
-AGAAACACTGACATGTAATTTAGGAGAGGGAAAGGTGAAGCAAATATTCAGGGGAAATTC
-ATGAGTAAGTTTAGGAATAAAGCAGTGTCTTGTAGTAAATAAGTAAATAGTAAAGCAGTA
-AATAAGTAGGATTTCCATGGATGAGGTTTGGTAGGGAAGGCAATTTGAGTGAACAGAATG
-GGAGGAAATTGGAAAAGACAGAACATTTCAAGACACTATACATGCACTTTGTTTGGATGA
-AGAACAGAGCACTCAAAGTTGAACTATGGGGGAAGTCTGATTTCCTAAGCTCCTGTGTAC
-CAGCAGTGAACTGGGAAGACGGAGATAAATAAGATTCCACTGTTGTGGAGCTCAACAGTG
-GAGCTCAACGCTTCCTCTATGAAGTGGAGAAGACCTAAGTAAATAACTCCAACACAAAAG
-TTTTTAGGTTTTTGCTttgttgttgttgttgttgttgatgtGTTCATCTTTTTTGTTATT
-GGGGCCCTGTGGAGTTTAGGGGAAATGTAAAAGATCTAGGAATTGGTCCAAATTGTAGTG
-CTTTCATTGTCTTGATATGCAAGAAGAATAATCCATGTACATACTCTGCTGAATTCTTAA
-AGATGTACCTTCTGAATATGATTAACATGGAAAGTTTCTTCTTCAACTACATTTCAAAGT
-CATTTGCTAGTTTTGTTTCTTATATCATTTCACCATAACAATTACAAGCATTTTAAAGAT
-TTAGTTCATCCACTATAACATTTACCACTAATGTGTGGCATGTGTTCTCTTAATCTCTCT
-CTTTCTGGTGttctagggctggtatagggagcacctaaaacaagcctaaaatatcttgtg
-gtgccagaaagtaagcaattgcttaataatcaaaggatagggtctgcaaacacggacaat
-ttgacttcctcttttcctaattgaataccctttatttccttctcctgcctgattgccctg
-gcgagaacttccaacactatgttgaataggagtggtgagagagggcatccctgtcttgtg
-ccagttttcaaagggaatgcttccagtttttgcccattcagtatgatactggctgtgggt
-ttgtcatagatagctcttattattttgaaatacgtcccatcaatacctaatttattgaga
-gtttttagcatgaagggttgttgaattttgtcaaaggctttttctgcatctattgagata
-atcatgtggtttttgtctttggctctgtttatatgctgcattacatttattgatttgcgt
-atattgaaccagccttgcatcccagggatgaagcccacttgatcatggtggataagcttt
-ttgatgtgctgctggattcggtttgccagtattttattgaggatttttgcatcaatgttc
-atcaaggatattggtctaaaattctctttttcggttgtgtctctgcccggctttggtatc
-agaatgatgctggcctcataaaatgagttagggaggattccctctttttctattgattgg
-aatagtttcagaaggaatggtaccagttcctccttgtacctctggtagaattcggctgtg
-aatccatctagtcctggactctttttggttggtaagctattgattattgccacaatttca
-gatcctgttattggtctattcagagatgcaacttcttcctagtttagtcttgggagagtg
-tatgtgtcgaggaatttatccatttcttctagattttctagtttatttgtgtagaggtgt
-ttgtagtattctctgatggtagtttgtatttctgtgggatcggtggtgatatccccttta
-ttgtatatgtagaaaaccccattgtctcagcccaaaatctccttaagctgataagcaact
-ttagcaaagtctcaggatacaaaatcaatttaccaaaatcataagcattcttatacacca
-acaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaaaga
-gaataaaatacctaggaatccaacttgcaagggatgtgaaggacctcttcaaggagaact
-acaaaccactgctcaaggaagtaaaagaggatacaaacaaatggaagaacattccatgct
-catgggtaggaagaatcaatatcgtgaaaatcgccatactgcccaaggtaatttacagat
-tcaatgccatccccatcaagctaccaatgcctttcttcacagaattggaaaaaaactact
-ttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaaag
-aacaaagctggaggcatcacactacctgacttcaaactctactacaaggctacagtaacc
-aaaacagcatggtactagtaccaaaacagagatgtagatcaatggaacagaacagagccc
-tcagaaataacgccgcatatctacaactatctgatctttgacaaacctgagaaaaacaag
-caatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgta
-gaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatta
-aagacttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacca
-ttcaggacataggcatgggcaaggacttcatgtctaaaacaccaaaagcaatggcaacaa
-aagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaaa
-ctaccatcagagtgaacaggcaacctacaaaatgcgagaaaattttcgcaacctactcat
-ctgacaaagggttaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaaa
-caaacaaccccatcaaaaagtgggtgaaggacatgaacagacacttctcaaaagaagaca
-tttatgcaaccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatgc
-aaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaagt
-caggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttggt
-gggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatctag
-aactagaaataccatttgacccagccatcccattactgggtatatacccaaatgactata
-aatcatgctgctataaagacacatgcacacgtatgtttattgcggcattattcacaatag
-caaagacttggaactaacccaaatgtccaacaataatagactggattaagaaaatgtggc
-acatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgtag
-ggacatggatgaaataggaaatcatcattctcagtaaactatcgcaagaacaaaaaacca
-aacaccgcatatcctcactcataggtgggaattgaacgagatcacatggacacaggaagg
-ggaatatcacactctggggactgttgtggggtggggggaggggggagggatagcactggg
-agatatacctaaggctagatgacgagttagtgggtgcagcacaccaacatggcacatgta
-tacatatgtaactcacctgcacaatgtgcacatgtaccctaaaacttaaagtatttaaaa
-aaaaaaaaaaggatagggtcatattaaaagaacacaggagtcggtctaaaagagcttcaa
-atgaccaaagctgcgacaatttgagcaataaaataaataagatagcattggattataata
-caacatataataaatatctatgagtccatgatgatatgaataaataattgaataaattgg
-aaaattggtgagaacagatgtgccatatagaataattcccaataattcatacagatactc
-cctgctgaagaaggtggagcttgacctccctctcccttgagcatgggctgtatttagcta
-cttgtttccaaagagaagtgtgtggaaaggagttaaaaaataatttcacctggataaacc
-tgataaggtcatgtttcagattttatggagaaatcatattgataacatgaacctgtgata
-tgatctgatgagaatggcacttcacttctgttttcttcctcccaaaaccctgcgacccaa
-gacaaacaatgaaaaacatcagaaaaactcaaattcagtggcattctaaacaatatttga
-ccagtatttctaaaaactgtcaaatttatcaaaaaggaagaaattctgagccacagtcaa
-agaccagagaagcctaaagagacaggacaactaaaggtaatgtggtatcctggatggact
-cttggaacaggaaaagaacattaaggaaaaactagtggtgataatagtaataataataag
-tgtagagtcatttagtagcaatgtatttagctgtgatggctgcattgtggtaatataaga
-tgttaacaatagcagaaactgggtgaatatttgggagctctctgtattatctttgcaaca
-tttctataaatctaaaactattctaaaactgaaaatgtatttAAATTTTAGAAAACTGAC
-CACAAAATCAATTTGGCACATTCCTTTTCTTCTTATTTACGAAAGAGCTTCTCatttctt
-cattgaatgcttggtagaatctaatggtaaattcaactggaacggaactctttacaggaa
-gtattgttatagattaagtttattgcaggttaaaaggcaattcagttttctatgccttct
-agtcaactgttgtatttggcatatatacttttcccatgttctaagatttttatacttgct
-atcctaaaactcttgtaatatcttctttttatcttattaatgcctgtaagatatgtaatg
-acaccttctttttcatttttgacatctattatttgttttattttctcttttttcttgata
-agtctcacattcacttattaatttgatttatctttacagaaaacaaattttcttcattaa
-ttttAGTTTAGTTTCCATTTCTTAGACtgtgacttgcattgcccaattgaaagtgattga
-aagtgacaggttcacttccaagtggaaacttaagagccagtgtgtccatgtgcagtggct
-cacacctgtaatctcagcactttgggatgctgaggcgggcagatcacctgaggtcaggag
-tttgagaccagcctggccatggtggtgaagccctgtctctactaaaaacacaaaaattag
-ccaggcatggtggcagggcctgtaatcccagctatttgggaggctaaggaaggagaatca
-cttgagcccagaaggcggaggttgcaatgagctgagatcatgcctctgcactctagccta
-ggtgacagagccagactctttctcaaaagaaaaaaaaaaagagccagtgtgcagtttaac
-cgtctctcatctctctgccaaggtgattgtggaagcactgttgacatagagcctctgtca
-gcctgaagccccgagtgaccatgaaagcagggtcattcttttgacctaaaatagacatct
-agcactgccagaaataaccttttgggaagttactctatgagagctgaggtttgtttttta
-ttTTGttttatatatattttttaaatCAGGAATAACTTAGACCAGGGTGAACAAACTACT
-GCTGTCAGGGCAAATCCAGCCCATAGCCTGCTTTTGGAAATAAATTTGTATTAGAacaca
-cacacacacacacacacacacacacacacacacacatacacacatacacacaAATATATC
-TTCACTAATGTTCTTTTTTTCTTGTTTTTCAAAAACTtttacataccataaaattcacct
-gttttaagtgcacaatttagtgTCATTTCTATTTTTTATTTTCGgtatgcttttcttttt
-gtaactttgttaggtgcatgtttatctttataaaagaaaagccttccttcttttcaaata
-tgagagtttaaagttgtaagtttctctctatacacagcctgagcaccatcccacaaattt
-tcaatatagagtatgttcattgttacattataaaccttctcatttctcttAAACCATGAG
-CATATAAATAACATATAGATTATATAAAGACTATGGATACAAATGTTAATCATGCAATTT
-TGTCAACTAGTTATAATTACATATACAGTAACATTACTTTGGTGATATGTAAACCAAAAT
-GTAAACAAAACTTGAAAGCAAACAGAAAATATCATATGCAAAAACTTGTACACACTTGTT
-CTTCATACAGTTTGTTTTCAAATATGATCTTCTATCTTGTTATAGGTTTTCTATGGCTTT
-AAACTGACATTTATTTTTCATTTATATTGTCCTCTGTTATGATTCTTCCAGTCCTGAACT
-TCCTGCATCAGTAATTTTTAAAGATATTTTTGGTTTACAGAAGTTTACCAATTATTACCA
-TAATTTATCATCAATTTATTAACTCTCACCATCATTTCAAAAGTGAAAGAAATTTCACTA
-CCTAAAAATATGTATGTATGACATTTTAGAAGAAAACAGACTTTTAACTAAATGCATTCA
-TGTCTCTTAAAATTTAGTTCTATCATTTTAATTTTTTTCATTTTATTACAGACCAGTTTA
-AACTTTGTCAGAACCCCATTAGGGCCCATGTATCCATTTAACAACAAAATTCTGTAATTC
-TTAAATTCTCAAATTCATAATTTATATAACCACTGATACCCAATTGGTAGTAGTCTTCTG
-AGGAATGTTTCTATTCCATTATTCCTTGTCTTCTCTAATCACTCTCTGAATCTAAACTTC
-TCTTTAGTTTTTTTTCCCTATAATTAGATGTTGAGGTGTTTGGCTTACTTATCTTCTTTA
-TTAGAATAAATAATATGTATCCCATCCCTAATGATTAGCACTTTGTCAATTTTTATATGT
-TTATGACAGGTGGACTCACTCTTATTCTAAACTCTGATATTAGTGATATCCAATGCCCCA
-TTCAGAGACCATTAAATTAAAAATGCACTTATTACTTCTGGGACTTTCTAGACAATTTCC
-TTCATCTTTAAAAGATCTGGGACAAACACCACAAGCTTTGTCCCACATGAAAGTTCTCTG
-CCCAAGTAATGAAGCATCTAAAAATGCTAGTAaagatattagattttaatataacacatc
-aataattatatttaatataaatgatctaaatcaggggtccccaccccccaggccatggac
-cggtataggtttgtggcctgttaggaactgggccacagagcaggaggtgagcagcagtgg
-gagtgagcattaccacctgagctctgcctcctgtcagatcagctgtggcattagattctc
-ataggagtttgaaccttattgtgaactgcacatgcaaaggatctttgcgtgctccttatg
-agaatctaatgcctgatgatccaaagtggaacagtttcatcctgaaaccatcttcccatc
-cctgccagtttatggaaaaattgactgcattaaaccggtccctggtgccaaaaaggctgg
-ggaccactgatctaaatacaccaataaaaagaaaaagattgtaagattggattttaaaag
-acctgactctatactgaccacaaaaaaAAACCCTCACTTTATTCTTTattgcatatattt
-atggtgtacaacatgatgttttgatacatgttgtgaaatggttaatatagtcaggcaaat
-caacacgttcatcatctcacatagtttccctttgtgtgtgtgtcgcaagagcacactact
-tttttaacaaaaattccaagtaaaatataatattatcatagacctcacgttgtacattag
-acctctagacttttttaatcttacgtatctgcaattttttatcctttgacctacatctct
-ccatttccttcccctccaaccacacccctggtaacgaccacattattctctatctccttg
-tattcagctttccttttttttcttttaagattccatgtataagtgaaatagtgcagtatt
-tttctttctgtgtcagtttatttcatttagcataatgttcttcatgttcattcatgcctt
-ggcaaatggcaggatctcctttttgaagagtaaataatattccattgtgtgtgtgtgtca
-cagtttatccattcatctatcaacagttcacttgtttcaaaattttgactattgtgaata
-atgctgcaataaatatgaaagtacagatacctctatgaagttaagtggtgatttcatttc
-atttttttttttaaagacagggtgtcacagtgttactctgtagcccaggctggaatgcag
-tggtgcaatcatagctcactgtaaatctcaaactcctaggctcaaggaatcctgcctcag
-tctcctgagtagctgggactacagacacacaccatgcttagtcaatgttttttaggtaca
-gggtcttgctgtgtagcccaggctgggctcaaagtcctgacctcaagcaatcctcctgct
-ttgacttcccaaattaccgggattacaagcatgaaccacctcactcagcctggtagttct
-atttctaattcctttagaagccttcatactgactccacaatggctacatctgtctacatt
-cccaccaagaatgtacaaaggttcccttttctccacaccctcattaacaattgttatatc
-ttgtctttttggtaatagttatactaacaggcatgaggtgatgtctcattgtggttttga
-tttacatttccctaatgattagtgattttgagccccttttcacatacttcttggccattg
-ttatgtcttctttggagaaatgtcttttcaagtctttgtccatttttttaattgggtttg
-gtttttttttactgctactgagctgtatgagttctttatatattttatatattaatccct
-tatcagatatatttaatataaaGACAAAGAAAAGCTATAAGACTTTATATCTTAAaaagc
-tggagtggctatattaatattgaacaaaatagatttcaaaacaagaaatactaccaggga
-tcaagacgcacagaaagaagtcaattcaccatgaaaatataacaatactaaatgtgcatg
-caactaacaatagaacttcaaaataaaagcttgtagaactaaaaaagagaaatagagaaa
-tcttcacctacaactggagatttTTAgactgacattagcaagatggcagaataggaggtt
-ccaagcatccctcctctcaacagaaaattcaactggcagatatccatgacaagagcactt
-tggtaaaaatcccaaaacttggaaataagccaaagacacccatgttgaccacagaactga
-ataaaaaccacattagaagggggaagagaaaaggtctcactttgaccaggccacccctcc
-tccactccctcgcccaagttggcacaccactatgcagacaggattgccctaggcctacag
-tttctccagtgggaaaagaaaactaaagatgaacattcagcttccttagccattcctgga
-atattctcagaaagcccatttcagtctcagttcacagggaaagcaggggataacggtgtg
-gttagatcacctgggttcagatagaaaaaaagaaaagggggcattgctcacagtgaccag
-tatgaagatactgttggtagctctgtgtcactgccagcagaggtaccagccaacagcata
-agccacctgcaaagccaagctggtcactcccagaagcacagtggaaatttccatctggct
-tgagtccctagatggccagcctccacagccagcctcaaatccctccccaaggccccacgc
-agaaatggagatacctgcaacaaagcatttcaaacaaaagaaacaactgagacttgtgcc
-ccagggcatttaaacagtggctcagactcaaagctcactcaaggagggagatgcccacca
-cagcacctttcagcaaagcccagaggctggactagccacacccagaagtataaatggtgg
-ctcacctcagcctcaaagcccaccccaagtctctgcctaggcaagggggcaagcctcaac
-catgcatttcaacaaagcatagcagctggtcccaactaccctgaacaaaacctatctaac
-ctcaggacccaaacagtggtagtgcccggccGGGGAAAATACCATGTCTGTTAAGGGTTC
-TTACCATGATTTTAAAAAAGAAAGaaaacctatacacagacattcccaacagctttattc
-ataattgccagaaattgaatacaatctgaatatccttcactgtgtggcttttaaaaaatc
-gcatttatagtacatccatagcatggaatattacttagcaataaaaagaaacaaagtatt
-catacaagttggagggatcttcaaggaacactaagagtaaaaatgccaatttaaaaagat
-tacatatctatgattccatttatatggcattcttgaaatgacaaaattatagagctagag
-aacagattcctgtttacccagggttagggaaggagggagaaggctctcactggaaaaggg
-tagcacaaggagtctatgtgataaactgttttgtgtcttgactgtaatggtggtcacaaa
-aatcaaagcatgtcataaaattgtgtaaaactaaatacatacctacatgcacacacacaa
-acaaatgactacatacatgtaaaactgatgacatctgattaagaccaatggagtatatca
-atgtcaatttcctgattatagttaaacaagatgtaaccattggagggaaaaggtatatgg
-gatttctctgcatgtaggtaagtctaaacatatctcaaaatTATTTTAAATGTCAACTTT
-TAGGAACAGCTGATATTTTCTCTGTATTTATCCTAAATCACTAAGGCTTTCACAAGATCT
-CTGCTCCAAAGACCACCATATTTCTTTTTAAATGACATATCTATTGTGAAATGCATTTAT
-GATAGTCAGTATTCTCATGCTGTGGAAATATACTTTAAAAAGAATATAGTCTTTATCCTA
-TACTGAAGCTCTTGTCCCATCCTGTCCTTTTCAAACACTCAGCAGTTCAATTGAGCTTTA
-CAACTTCCATGCACTTCACAAAAAGAAATAAAATAGTGGAGGCTACGCTGATCTCAGCTG
-GTTTTCATATATTTGGGGGTCAGAtggctatagactgatataagctagcctctgctggga
-caactgggttcttctccaaaatgtctctcttgtccttcctgcagactagactggtcttgt
-tcacctgactgaggcagggttccaatggagaaggcaaaggcacacaggccttttgaggca
-taggcttggaaatagcacaatttcatttgtgccatattctCTCTTTTTATGACTTTATTA
-TTTGAATTTGTATATTGCACAAGACTTCCTATTGTTCAGATTTCATTTGCTTTCTTTCTC
-TTGTATTTTAACATCCTTCACAATTCTCACATCATTATTAAAAGTTGCACTTAACCTAGT
-AATAGATAAGCATTAGCTGAAATTAGTAATTGCTTAACTTCTATCCTACACTACTTTATC
-ACATACTAGTGTGTCATGTTTCATAGTATAGGAACAAAGTAATCTTGCACGATGATATCT
-CTGATGCATACCACTATATTTTTGCTCATGGAATGACAGCAAAATTAATTTTTCTGCTGC
-CAAACTAATATTCAGCCAATCTTTTATTCATCAAATCTAACTACTTAGACCAGGGGCAGT
-TTCCTTTAGAGTTAGACTGTAATTTGTGTACTAATTTTTTTTTGGTTTTTTGTTTGTTTG
-CTTGTTTTGCTAAGGGAAAAATTTATTTTCCTGATGTAtttattattttttagcttttat
-tttagttttagttttaggaatacatgtgcaagtttgttatataggtaaattgcatgtcat
-gggtgtttggtgttcacattcttttgtcagccagataaCCATATTCTCTCTTTTAACGCC
-TATTTaaaattatatatttttaagctatacaatgtgatgttttgatatacatatgcatAT
-TTAAGCTATACAATGTCATGTTTTGTTGTACATATGCATATTTAAGCTATACAATGTCAT
-GTTTTGATGTACATATGCatatttaagctatacaatgtcatgttttgatgtacatatgca
-tcttgaaatgaatactatagtcaggctaattaacatatcagtctcttcacgtagttacca
-ttgtgtgtgtgacaagaatgcttaagatctactctgatagtaaatttcaactatataata
-cagtattatCTCTTTTTTAttttttacttttatttgtttatttttttgagacagagtctc
-tctgtgtctcccaggctggagtgcggtggcgccatctcggctcactgcaagctctggctc
-ccaggttcacgccattctcctgcctcagcctcctgagcagctgggactacaggtgcccac
-caccacgcctggctagtttttttgtatttttagtagagacggggtttcactgtgttagcc
-aggatggtctcgatctcctgacctcgtgatccgcccacctcggcctcccaaagtgctggg
-attacaggcgtgagccaccacgcccagcctttatttatttatttattttgagatagagtc
-tcgctctgtggcccaggctggagtgcagtggcagcatctcagctcactgaaatctctgcc
-tcccaggttcaagcaattctcctgcctcaacctcccaagtagctgggactacaggcaccc
-tccaccacacccagctaatttttttatttttcatagagacggggttttgccatgtcggcc
-aggctggtcttgaactcctgacctgaagtgatccacctgcctcggcctcccaaagtgctg
-ggattacaggcatgtgccaccatgcctggctGatttttgtatttttagtagagacggggt
-ttcaccatgttggacaggctggtctcgaactcctgacctcaagtgatctgcttgcctcag
-cctcccaaagtcctgggattacaggcgtgaaccactgcttccggccacagtattatcaac
-tgaggtccccatgctgtgcattagatctcaaaaacttaatcatcctacaatactggaacg
-tactctttgaccaacatcttttgattctgccaccattgcttctgataatcactattctct
-ctccttctatgaatttgacttttcaagattctacatgtaagtgatatcatgcagtatttt
-tcttcctgtgcctggcttattttacttagtataatgtcctccaggttcatgcacattgca
-caaacgacaggatttctttgttttaagactgaataatatttcatATtggatacaacctaa
-gtgttcaacagatgaatggataaacaaattgtggtatatacCACCTGTTCTCCCTTGTAA
-GTGGAAGCTAAAtgtcaggcctctgagccgaagctaagccatcacatcccttgtgacctg
-cacctatacgcctacatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggcc
-tgttcttgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgc
-cttaactgatgacattaccttgtgaaatcccttttcctggctcatcttggctcaaaaagc
-tcccccactgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttga
-ctgtaattttcctttacctacccaaatcttataaaacggccccacctctatctcccttca
-ctgactctgttttcggactcagcctgcctgcacccaggtgaaataaacagccttgttgct
-cacacaaagcctgtttggtggtctcttcacacggacgcgagtgaAATtttggtgccgtga
-ctcggatcaggggacctcccttgagagatcaatcccctgtcctcctgctctttgctccct
-gagaaagatccacctacgacctcaggtcctcagactgaccagcccaaggaacatgacacc
-aattttaaatcaggtaagcggcctttttgtactctcttcttcaatctcactatccctcaa
-cctctttctcctttcaatcttggcgccacacttcaatctctcccttctcttaatttcagt
-tcctttccttttctcctagggacaggagacgcattttatccgtgaacccaaaactccggc
-gtgggtcacggactcagcaaggcagacttcccttggtgtttaatcattgcgggaatgcct
-ctctgaatattcacccacatttcagaggtgtctgaccacatggggacgcctgccttggtc
-cttcacccttagcagcaagtaccgcttttctagggagcaaacaccccccaccccttctct
-ccatgtctctactctctcttttctctgggcttgcctccttcactatgggcagccttccac
-cctccattcctccttcttctcccttagcctgtgttttcaagaacttaaaacctcttcaac
-tcacacctgacctaaacctaaatgccttattttcttctacaatgccgcttgacctcagta
-caaactcgacagtggttccaaatagccagaaaacagcacttttggtttttccatcctaca
-agatctagataattcttttcataaaataggcaaacggtcggaggtgtttgacatccaggc
-attcttttacacattgttccctccctagtctctgttcccaatgtgtctcgtcccacatcc
-tccttctttccctcccacctgtcctctcagtcccaatcccaagcattgctgagtctttct
-aatcttcgttttctgcagacccctctgacctcttacctcctccccaggctgctcctcgcc
-aggccgagccaggtcccaattcttcctcagcctctgctcctccaccctataatcctttta
-tcacctcccctcctcacacctgctagccctaccccacttgcccagcaatttcctcttaaa
-aaggtggttggagctaaaggcatagtcatggttaatgctcctttttctctatccgaactc
-tcccaaaatcagttagcgtttaggttctttttcatcaaatatgaaaaacccagcccagtt
-catggctcattcggcagcaaccctgagatgctttacagccctagaccctaaaaggtcaaa
-aggccgtcttatcctcaatatacattttattgcccaatctgccccgacattaaataaaac
-tccaaaaagtaaattccagccctcaaaccccacaacaggacttaattaacctcgccttca
-aggtgtacaataatagagtagaggcagccaagtagcaatgtatttctgagttgcaattcc
-ttgcctccactgtgagacaatccccagccacatctccagcacacaagaactccaaacgcc
-tgaaccgcagctgccaggagttcctccagaacctcctcccccaaagtccgtccccttctt
-aatcaatacggaagctacccactccacattaccttcttttcaagggcttgtttcccttgc
-ctccataactgttgtaggtattgacggccaggcttctaaacctcttaaaaactccccaac
-tctggtgccaacttagacaacattcttttatgcactcttttttagttatgcccatctgcc
-gaattctcttattaggccaagatattttaagtaaattatctgcttccctgactgttcctg
-gactacagccacacctcattgctgcccttttccccagttcaaagcctccttcgcatcctc
-ctctcatatccccccaccttacccacaagtataagatacctctactccctccttggtgac
-tgatcatgcaccccttaccatcccattaaaacctaatcacccttaccccattcaatgcca
-atatcccatcccacagcacgctttaaaaagattaaagcctgttatcacttgcctgttaca
-gcatggccttttaaagcctataaactctccttacaattcccccattttacctgtcctaaa
-accggacaaggcttacaggttagttcaggatctgcaccttatccaccaaattattttgcc
-tatccaccccgtggtgccaaacccatatactctcctatcctcaatacctccctccacaac
-ccattattctgttctggatctcaaacatgctttctttactattcctttgcaccctacatc
-ccagcctctcttcgctttcacttggactgaccctgacacccattaggctcagcaaattac
-ctgggctgtactgccgcaagccttcacagacagcccccattacttcagtcaagcccaaat
-ttcatcctcatctgttacccatctcggcataattctcataaaaacacaggtgctctccct
-gctgatcgtgtccgactaatctcccaaaccccaatcccttctacaaaacaacaactccct
-tccttctaggcatggttagtgcagtcagaattcttacacaagagccaggaacatgccctg
-tagcctttctgtccaaacaacttgaccttactcttttagcctggctctcatgtctgcgtg
-cagcggctgccgccgccctaatacttttagaggccctcaaaatcacaaactatgctcaac
-tcactctctacagttctcataacttccaaaatctattttcttcctcatacctgacacata
-tactttctgctccccagctccttcagctgtactcactcttttttgagtctcccacaatta
-cccttgttcctggctcagacttcaatccggcctcccacgttattctggataccacacctg
-accctcatgactgtatctctctgatccacctgacgtacaccgcatttcccccattatttc
-cctcttccctgttcctcaccctgatcacatttagtttattgatggcagttccactaggcc
-taatcgctacacaccagcaaaggcaggctatgctatAGtacaagccaccagcccacctct
-tagaacctctcatttcctttccatcatggaaatctgtcctcaaggaaataacttctcagt
-gttccatctgctattctactactcctcagggattattcaggccccctcccttccctacac
-atcaagctcagggattttcccctgcccaggactggcaactcttaactccctcttagagtg
-gatagatgctctttgctggcaggggaccctccaatcttttcaccctgatgaagttctatt
-ctttacttttatactcactcttattctcattcccattcttatgccaccctctacctctcc
-ccagctatctccaccacactatcaaccttacccattctctcctagccgtttctaatccct
-ccttagtgaacaaccgctggctttgcatttccctttcttccagcacctacacagttgtcc
-ccaccttacatgcagactaggcaacatctcctatctccttacacctccaaacttccttta
-acagccctcacctttaccctcctgaagaactcatttactttctagacaggtccagcaaca
-cctcctgagacatctcacatcagcaagctgccgccctcctccgcacttaattaaaaaacc
-tttctccttatatcaactctactcccccaatatttggacctctcacaacacaaactacta
-ttcctgtggccgctcctttatgtatctctcggcaaagacccactggaattcccctaggta
-acctttcaccttctcgatgttcctttattcttcatctccaaagcccaactacacacatca
-ctgaaacaataggagccttccagctacatattacagacaagccctctatcaatactggca
-aacttaaaaacattagctgtaattattgcttaggaagacacttaccctgtatttcactcc
-atctttggctgccttccccttgctcatcagactctcctcccaggccctcttcttgtttac
-ttatacccagccctgtaaataacagtgaaagtttgcttgtagacacttgacgttttctca
-tacaccatgaaaatcaaacctccccctctatgcagttaccccatcagtccccattacaac
-ctctgatggctgccaccccagctggatccctaagagtctaggtacaagacactcctttca
-gcattccttctcatctttttactttgcatctccggttttgcctcacacaaggtctcttct
-tcctctgtggatcctctacctacatgtgtctacctgctaattggacaggcacatgcacac
-tagttttccttactcccaaaattcaatttgcaaatgggaccgaagagctccctgttcccc
-tcacgacactgacacgacaaaaaagagttattccactaattcccttgcttgtcggtttag
-gactttctgcctccactattgctctcagtactagaatagcaggcatttcaacctctgtca
-cgaccttccatagcctgtctaatgacttctctgctagcaccacagacatatcacaaactt
-tatcagtcctccaggcccaagttgactctttagctgcagttgtcctccaaaaccaccgag
-gccttgacttactcactgctgaaaaaggaggactctgtatattcttaaatgaagagtgtt
-gtttttatgtaaatcaatctggcctggtatatgacaacataaaaaaactcaagaatagag
-cccaaaaacttgccagccaagcaagtaattacactgaacccccttgggcactctctaatt
-agacgtcctgggtcctcccaattcttagtcctttaatacctatttttctccttcttttat
-tcagaccttgtatcttccatttagtttctcagttcatccaaaaccgtatccaggccctca
-ccaatcattctatacgacaaatgtttcttctaacaaccccacaatatcaccccttaccac
-aaaatcttccttcagctcaatctctcccactctaggttccatgacccaatcctgctcaaa
-gcagccctgagaaacatcacccattatctctccatgccagccccccaccaaaaatatttt
-tttcgctgccccaacacttcaatactattttatgttatttttcttattaatataagaagg
-caggaatgtcagacctctgagccgaagctaaaccatcgcatcccctgtgacctgcatgta
-tatgcccagatggcctgaagtaactgaagaatcaccaaagaagtgaaagtggcctgttaa
-tgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgccttaac
-tgatgacattaccttgtgaaatcctttctcctggctcatcctggctcaaaaagctccccc
-actgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttgactgtaa
-ttttcctttacctacccaaatcttataaaatggccccacccctatctcccttcactgact
-ctcttttcggactcagcccgcctgcacccaggtgaaatagccttgttgctcacacaaagc
-ctgtttggtggtctcttcacatggatgtgagtgaAATTaatattaggtacacacagacat
-aaagatgggaaaaatagacagtgaagattttaaaggggataaggaagggagaggagcaaa
-tgttgaaaaactatctattctgtactatgtttgctacttgggtgacagggtcattagaag
-cccaaacctcagcatcacacaataagcccatgtaacaaatctgtacatttatcccctgaa
-tctaGATTTTAAAATAAggctgggtgtggtggctcacacctgtaatccaaacactttggg
-aggctgaggcaggaggattgcttgagcccaggagttcaagaccagcctgggcaacataga
-ccttgtctctacaaaaaataaacaaaatcagcaaaatgtggaggtgcgcctgtagtccca
-gctgctcaggagactgaggcaggaagattacttgagcccaggagctcaaggttgcagtga
-gctgagatcgtgccactgtactccagcctaggctaccaagtgagattttgtctcaaagaa
-aataagataaaaTTTTTTCTTACATTGTGATATATATGCACAATGGaattttcaaatata
-tagtatattatcactaactgtagccaccatgatgtaaatagagctcttgaattttttttt
-tcttcttttgaaaacagagttttgctcttgttgctctggccagagtccaatggtgcgatc
-ttggctcattgcaacctctgcctccccagttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattacaggcacatgccaccacgcctggctaatttttgcatttttagtcaag
-gcggggtttcaccatgttggccagactggtcccaaactcctgacctcaggtgatctgcct
-gcctcagtgtcccaaagtgctaggattataagcatgagccaccgtgcctgaactctcttg
-agcttatttttcctgtctaagtgatttccccacccctagcctctgataactaccatttta
-ctctttgtttctatgaattcaacttttttacactctacatagaagtgagatcatgtcttt
-ctgtgcctggtttatttcatttagcttactgtcctccaggttcatccatgttgttgcaaa
-tgacagaatttacttcttttttaaagctgaaaagtattccattgtgattatgtaccacca
-ttttctttattaattcatctattaatgggcacttaagttgattccatgccttggttattg
-tgaataatgctgaaattaacatgaaagtgcagatatcttttcaacatgctgattttattt
-ccattagctatatacccagtaatgggattgctggatcatatagtagttttcattttaatt
-ttttaaggaacttccatacagttttccataatagctatactaatttttattcccaccaac
-agtgtgcaagggttcccatttctccacatcctttccaacacttattctctttcatagtat
-attttgaagtcaggtagtgtgatgccttcagctttgttctttttgctcaagattgttttg
-gctattcaaaatcttttgtggttcaatccaaattttaagatttttttctgtttcagtaaa
-aaatgtctttggaattttgatagggattgcattaaatctatagaccactttgggtactac
-agatattttaacaatattaattttttactttcatgaacatgggatatctttccatctgtg
-tcttcttcaatttcttccatcaaagttttatacattttagtgtagaggccttttacctct
-ttgttaaatttattcctaagtatttttgtagctattgtaaaaggatcatttacttgattc
-acttctcaggtgttcttgttagtattcagaaaagctgctgatttttgtatgttgaattta
-tatcctgccactttactgaattcatttattagttctaatagttatttggcaaagtcttca
-ggattttctgtatatacgattatgtcatctgcaaaaagaaacaatttcacttcttccttc
-ccattttaatgctctttttattgcattttcttgcctaattaatctggctagaatttccag
-tactacattgatagaagtggcaaaagtgggcattattttgttctttatcttaaagaaaaa
-gcttttgactgttcaccattgagtatgatgttaaatggggcttgtcatatatgatcttta
-ttgtgttgagatcattctttctgtatctaatttgttgagttttatcacaaaaggacgctg
-aatgttgtcaagtgttttttctgcatctgttgagatgatcatatggtttttacccatcac
-tctgttaatgtagataaatctcacttgatcatggtgaataatccatttaaagtattgttg
-aattcaatttgctagtattttcttgaggtttttgtatctctgttctagggacatcgacct
-ataacttttttttcttgtatgcccttgctctggctttattataagggtactgctACccca
-gcatgatttccaaatggctatgaaccagtgactgctgtgtacaaccaacttttcctcctt
-tcaaatgggagtgttgtggttatAACATTATAAAACAAATCTTGCAAagttagatagaag
-gcatcagttctagtgtttgatagcacagcagagtggctattgttaacaacaatttattgt
-atatttcaaaatagctaaaagagaagttttgaaatgttcccaacacaaagaaaggacaaa
-tgtccaaggtgctggatatcctaaataatctgacttgattattacacattatatgcatgt
-atcaaaatatcacatgtgcccagaaatatgtacaaatactatgtatcaataaaaaaGttt
-ttaaaaaataaatattacatataatatatgaattatataataaaactagaatataatata
-aaaaggaaaaaatatatgtaaaataaatCTTCATaataaaataaaataaaataaTTTGAA
-AGAGTCTATGAATAAGATTTTGGAGACTACTCTAAGACAGATGCAAGAGCAGGTACCAAT
-AATTCTGTCTGTACCAAAAGAGTGAATAATAAAAATATACAATTTCAACTTAATTTTGCA
-TAAAAAAAAGTGAACAAATAAACATGCATCTAACAATACTGACCACATCCACGTCTTCTA
-TGAGTATGGAGGGGATAAAAGAATAAAAGAAAAAAGTCAAAGCGAAGATTAGATCCCCCC
-AGTCAGAGCAGAATTCAAGGGTTAATTTATCTGTTCAATTAAGTATATCCCTCACCCCCA
-ACTCAGAAGACACTTCTCTGATTTATCTGACACTAAGCCAAAATGGATTCTCTTATCTAA
-TTTATCAGTAGAATCATATAGAGTAGAGGACACATGTAGATTAAAGACAGTGAGCCAGAC
-CCATCTTCACTGTCACAGTGACAGAATGGACCCTCCTTTAAAATACCCCTGGTGACATTG
-TAATGAAAGACTAAAAAAGAAAGGGGCTTATAAAGTGCTGCAGTGAAAAAAAGGGCTTCT
-TATGTGAGCCTTACTTTTAAAGTTCCCTAAGAATTAGGTTGAAAAAGGTCATACATTGAC
-TTTCATAGTGCTGAAATCATCAACAAAAATTTCTAAAATTCTGCAAAGTCCAGTCACTGT
-TACCTGTGCACTTCTCCAGAATTTTCAAAAGCCAAACTACTAAAAGGAAGGTTCTTGTAT
-GCTCTTGAAACTTTAATATATCCAGCTAAATATTTTTCTCCTTCCTCCCCCTGAAACAAG
-GTGGTGAGCTGCTCATGGAGTAATAAGGTTCATTGATTTCTTTATCTCACATGAGTAAAT
-ATTAGCTCTACAAAAGTTATTTATGACCAGTGCCTTAAATTAAGCAGCATCAACAAATGT
-CACCACAAAATTTCTCTTCTGTTCATCTGGACAGCATTTTCTACCATCATGACCTACTAC
-AATTTCATCTATCTCATGAGGAGCTTCTTAAGTACGTCCCCCTCATTTATAAGACTTTAA
-ATTTCATACTGAAACAAATGATATGCAATGCTTTTAGAGATCTTAAGATAATCTTTGTCT
-AAAAATTCTGTCAACTAGATGTTCAAATTGCTACTGAAAATGGAGATGGAACACATACAT
-TAAATGATTCAAATGATATATCGGAATTACCAGTAGCTGTCATGTTTGCCCATCAGATCT
-GCCCTCAAAAAAGTGTTATGAAAATATTCAAACATTTTTTCTCCCTCTAACTAATTCCTA
-GCTGTTAGCAGAACCCTCTGTacacacacacacacacacacGGCATTCAGATCTAATTAG
-ACAAAAGAAATTTCATTTGTGAAACAGGAGAAATACCTGAAATTCTGTGAAATATTGTCT
-CGCATAGAAAATGGAGTTGttacaagccaggagagattgggtgcctattttcaaccttct
-taaagacaagaaattccaaccaagaatttcatatcctgtcaaattaagattaataaatga
-aagagaaataaaatcttttccagacactccagtactaagagaaatccttattattaaagg
-cagtcttacaagagacccttcagggagttctaaatatggaaacaaaggaacgatatttgc
-atttacaaaaacatacttaagtacgtggcccacagaccctaataagcaaccacacaatag
-aaactacaaagcaaccagctaacaactccatgataggatcaaaacctcacatattaacat
-taaccttgaatatgaacactctaaatgctccacttaagaggcacagagtagcaagttgga
-aaagaaaagaaaagaaaagaaaagaaaactcatctgtctgcagtcttcaagagaccaata
-tcacatatatgacacccataggctcaaagtaaatggttggagaaagatctaccacataaa
-caaaaaacagaaaaagaggaggggtcattattcttagataaaacaaactttaaaccaaca
-actacttagaaagataaaaaagggcattacgtgacaataaagggttaaattcaataagaa
-gacttaactatcctaaatatatatgcacccaatattggagcatctagattcattaaaaaa
-actacttctagacctatgaaaagacttagccacatgattatattgggggacttcaacacc
-ccactgacagcattagatagatgattgaggcagaaaactaacaaagaaatcctggactta
-aacttgacacttgaccaattcaacttaatagacatctacagaatattccatccatcaacc
-acagaatatatattcttcacatctgcacatggaacagactccaagattgaccacatgcta
-ggccatggaataactatcaacaaattcaaaataccaaaataatgccaaccaaactctcag
-accacactggaaaaaaatagaaatcaataccaagaaccttcaaaaccacacaattacatg
-aaaattaaacaacttgctcctaaaccacttttggataaacaacaaaatgaaggcagaaat
-ttaaaaattcattgaaataaatgaaaacagagacatagcataccaaaatatctgggatgc
-agtgaaaacagtgttagaaagaaagtttatagcactaaacactgaccttgaaaagctaga
-aagatctcaaattaatgatattacgtcacacctacaggaactagaaaaacagaaacaaac
-taaccaccaagctagcagaagaaaaaaaataactaaaatcagtgtagaactgaatgaaat
-tgaggctcaaaaatccatacaaagacacagtgacattacaagtttgtttttttaagggat
-aaacgagatcaatagaccactattttttgttagtagattaacaaaagaagtgagaagatc
-caaataagcacaaatagaaacaacaaaagtgacattacaacagatcccacagaaatatga
-aagagactattatgagcacctctatgcacacaaactagaaaatctagaggaagtggataa
-attcctggaaacatacaatctcccaagattaaaccagaaagaaactgaaaccctgaacag
-accaataacaggttccaaaattgagtcatcaattaaaaacctattaactaaaaaaggccc
-tgaaccagatggattcacagcccaattttactagacataccaattctactaaaactattt
-caaaaaagcaagaagaaagatacctccctaactcattctacaaagtaggcatcaccctgg
-taccaaaacctggcaaagacacaacaaaaaaagaaaactacaggccaatatccctgatga
-aaaaaatgcagaaatccttaagaaatactagcaaactgaatcaaagaatactaaaaaaag
-acagttaattcgccatgagcaaacagacctccctcttgggatgcaaggttggttcaacat
-atgcaaatgaacaagtgtgattcaccatataaacagaattaaaaacaaaaaccatatgat
-catctcaataaatgcagcaaaccttttgataaacccaacatcccttcatttaaaaacccc
-tcaacaaactaggcatcgtaggagcatactcaaaaataataagagcccctatgacaaacc
-cacagccagcatcatgctgaatgggcaaaaactgaaagcatttcccttgagaactgggaa
-tgctttctggaacattccagttttctggaacattcccaggaatgcccactctcaccactc
-agattcagcctattactggaagtgcttgccagagcaatcaggcaagaggaagaaataaaa
-ggcatccaaataggaaaagaagaagtcaagctatctttcttcattgacagcagattatat
-gcctagaaaaccttaaagcctccaccaaaagactcctggaactgataaacgacttcagta
-aagtgtcaggatacaaaagtcaaagtataaaaattaacagcatttctatacaccaataat
-gttcaagctgagagtcaaatcaagaatgcaatcccattttcaataaccacacactcaaaa
-aaaaagcctaggatttttttctaactaagaaggtgaaagatctcttcagattcagggaga
-attataaaacattgctttaaaaaattatagatgtcacaagcaaatggaaaaacattccat
-gcccatgggttggaaaaatcaatatcatttcaacagtcattctgcccaaagcaatctaca
-gattcaatgttattcctatcaaactaccaaagccatttttcacagaattagaaacaacta
-tcctgagttcttatggagccaaaaaaagagcctgaataggcaaaacaattctaagcaaaa
-agaacaaagccagaggcatctaattacccatctcaaactacacgataaggttacagtaac
-tgaaacagcataatactgatacaaaaacagacatatagaccactggaacagaataaagaa
-tccaaaaataaagctgcatgcctacagccatctgatctttgacaaagtcaacaaaaatac
-gcaatgggaaaagggctccttattcaataaatggtgctgggatagctggcaagccacata
-tagaagaataaaactggacccctcctctcaccatataaaaaattaactcaagctggatta
-aagatagaaatgtaagaactcaaattacaagaatcctagaagacaacctagaaacaccat
-tctggacataggtcttgggaaataatttatgactaagtcctcaaatcaattgcaacaaaa
-acaaaaattgacaagtgggacctagttaaactaaagagcttctgcacagcaaaagaaact
-atcaacagagtaaaaagacaacatacaatggtagaaaatatcacaaactatgcctctgac
-aaaggtctaatatcaagcatctataaggaacttaattcaacaagcaaaaagaaaatagcc
-ccattaaaaagtgcgcacaagacatgaacagacacctctaaaaagaacacgtacaagtgg
-gcaacaaatatatgaaaaaatgttcagcatcactgaacaccagagcaatgcaaatcaaaa
-tcacaatgagataacctctttacaccacttagagtagctattactaaaaaatcaaaaaac
-aacagatgctggcaaggccgcagagaaaagggaatgcttatacactgttagtggaaatgt
-aaatttgttcagccactatggaaagatgtttggagacttctcaaagaacttaaaacataa
-ttaccattcaactcagcaatcccattactgggtatatatccaaaagaaaataaattgttc
-taccaaaaagatgtatgcacgtgtatgttgatcgcagcactattcataatagcaaagaca
-tggaatcaacctaggttcccatcaacagtggattggataaagaaaacgtggtacatatac
-acaatggaataccatgctgccataaaaaaataaaattacctcttttgcagcaacatggat
-gcagctggaggccattatcctaagcgaattaacacaggaataggaaacctaataccatat
-gttctcactaataagtgggagctaaacattgggtacacattgacataacgatgggaacaa
-tagacactggggactaatagaagagggaaggaggagaggagaaagggttgaaaaactaac
-tgttgggtactatattcaggacctgagtgatgggatcagttgtaccccaaacctcaacaa
-cacacagtacaccaatgtaacaaatctgcacatgtacccctgaggctaaaataaaagttg
-aaaTTATTTTCTTAAAAATGGAAAGGCTAAATTCCACCTCTACCAATATGTTTACTTAAT
-TTTTATATCCCCCATCTTACTGGTATAAAACCAGGAACATGGCAACCATTCATTTATGTT
-TGAAGTGTTCAAAAAATGAGTGACTACATCAATAAATGTACTCAGAGGAAAGCACAGGAC
-TTTATTATGTGGGGAATCAAGTTCACAGAAGGAAGCAGATGAATCTTTTGCTGCAGGCTG
-CTGGATTAGGCAGCACTTTTTATTTAGGAAGAGTGGAGACCAGCGAGACAAGGGCTAGAT
-TTAGGATTAGACTGTGAAAATGGTGATGGTGGGTAAGATGATGTAATCCTGCAGCACACT
-CAGCTTCTCACCAGAATGTTGATGTGGCTTCTTAAATGACACATGTTTTTTCTCTTCTTC
-ATCATTAGCACAACATAATTTCCCACTTAGACATCCTATTTCATATCTTTCTCCTACCTT
-GCATTTCTTCCTGCAATAGCCTGTTACTTTATTGAAGCATTTTTTGAGTCTTGCCCCGTC
-TGTGCATAGGAAACAACATTGAACCAAGGTTAGTGCGTAAGGAAGAGCAGAAGAGGTAGG
-TATGTGGTTCCCCACAAGTCATGGCCTCCTATGGTCCCAAGTGAACATTATGCTGATAAA
-AGGAAACTCAGAGGCCCCTCCTTGAAAAATATCCCAAATTAAGGACATTCAAAAGCCCAG
-GCTCTCAGCCAATGTCCAGTTGCCTCTGAGAACATTAGAACTGATATGACAAAAGAGAAG
-AGAGAACTCAATTCCTGGTTATCAACCAGAGCCAAGTCCCACCCCTAGGACCATGGCAAA
-GCTGACTCTCTCCACCAAGCTCCAAAGTCAGCACTCTCTCAGCTCCATCTCAGTCTCATG
-TCCCCAGAGACGGCTAACATGTCACCATGTGCACAAGACATGTCACCATTGGCACAACTC
-AGCCAAAGCAACTTTTGAAAGAACATCACAAACAAGACTTTTTAACTTAATTCGGTTTCA
-CACTCACTGATATGGGCAACAGAAATCTCCCTTTGACAAGATCTCATGGGTCTCAGCAAC
-AGGTGCTATTGAGAACTCCTTCCCTTAACCTGGCTCCTCCTGTCTGTCACTCATCACACT
-CCCCTTGATCTCAGATAAATGTGTTGCCCAGGGATCAAATTCAATTCCATGAATTTGGCT
-CTAGAGAGCTACATTGTCACCTTCTCAGAGTAATGCACTGAAATTCTAAGTCTCTTGTTT
-CTAATCCTTATTTGCCCCTCTACCCAAAATTTGAACAAGCCCAAAGAATAAGGTTGGAGA
-AGAGAGACATACTCTCCCTATCCTAAACTTCAGAATCAGGGAACATCTTTGAGGGTTAGA
-GGAGTATATTTTGGGGCCATAAAAATACAATATGCCTTCTTCCTAGCAAGAGAGAAGGTA
-ACTCTCACTGACAGGGCTTCTACGATGAACTTTgtgcttcgtgcttgtaagttcatgtaa
-cctgtacatcaaatagaatcatgaaatatagtaattatactccttcacagatgagaaaat
-tgagattaaaaggaaataatgtgcttaattcatacaacccgtcaatgatgaagacatatt
-ttaacctcacattgacatgactccaaaatgtgtgctattttaattactgtTGTAGTACAG
-GCTGAAAATGAATTTGAATGGAAAAGGGAATGGCCAGGCTCTCAGGTGAAAACTGTGTCC
-AGCATTATAAAGATAATTCTAGATGATGAGTTCATGGATACTTTTGAAAAGGACTCCTGA
-GAGTCCACTATAGCCCTGACCTCCTCTTACCTCCTTGGGTGCCTCTCTTCTAAGGCATAG
-ACTCAAGTCAGGCAACCAGGAGAATGGGTACTTTTTTATGATTTTGGCCAAATATAAATA
-ATCTTGAAAGTCCTGTTCCCACTCTTACAAATAGTAATATCTCTTAGGATGTTATAGTAC
-ATTTGGACAAGTTACCTGTGAGTACCTCAAACAGCAGAATAATGAGAACCAGAAACAGCT
-TCATATTTACAGACTTCCCAAGAGAAAGAGGCAGCAGAACTTTGTCCAGTGGTCTGTGTG
-CCACAGGTCTTTAAAGATGATCCAGAGTTTTGAGAGCTATCAGCGCTCGGAGCTCTCATT
-TTAACCCACACAGACAGAGAGGAATTCCAAGTCCACCCCCGTAACACACACACCTACATC
-CCCAAATATGGAGCTCACAGTCCCAGAATGTTCCACCATATCATCCCTCCTCCCCCTTCC
-TCAGGATATGCGCCCCTAGAGAGCAGGAACTATGACTTTCCGTCTGAGCTTCCAACCCAT
-TTGGGTCAAGGTTGGTTGGTCGTGGGCCTTGGGTTGTGTGGGATAATCCTGTCTTATTCC
-TATTGTTCCAATGTTCCATCCGGCTACTGCTGCCTCTAACAAAACTAACCCAGTTTGGAA
-GATAAATTAAGTCATTAGTCGACACAGAAGCATATTCAACAATAATTTTTTTAATGTATA
-AAGCTTCCAGATAGTCATTCTAGGAGTAAGATTGCTTTTAGGTTTGGCTAGATAAATTGA
-TATTATTTGAGAGTTTCCCATAAAGACTTGTCCATCTAGTAGAGCAAAATTCAACAACTG
-AAAGTTTTCAAAAGATCAAATCTCCTTAGCACAGCACTCAACTTATTATAAACTGGTCTC
-TGCTCTCCTCTCTTGGGACATTTTATGGAACCATCTATGTTTCTCCCAAACTAGTGGGTA
-CACCTTCCTGAACTTTTACTTCCTTAATCTGTTTCTTTTCACATTTAAATCCCTCCTTAC
-AGATTATATTACACTCCCCATCCCCTCCATATAATTGGTGCTAGTGAACTCCTGGTTTTC
-CTTCAAAACCAAGTTCAATCATCTCTATATAAGTGAAAGTTTCCCTGACCCAACTAAACA
-GAGCTGCAAACTCTCTTCTTCGCACCATCACTGTATTTGTACATATTTTTGTTGATGGTC
-ACACTATGTCATGTTCCAATTATTTGTTTATCTGCAATAGTCTGCAGACCCATAAAGGGC
-AGGTCTCTGGTCTTATTAGACTTGGAGttctttttctttttttttttttttttgcagttg
-caagatttaatagagtgaaaatggagctcccatacaaagggaggggacccaaagaggtta
-gccgttgccggctcgaatgcctgggtttatatcccaatcattgtccctcctgctgtgctc
-tcaggcaatagatgattggctatttctttacctcctgtttttgcctaattaccattttag
-tgagctctctttcctacctgattggtcacatgtgagctaagttgcaagccccgtgtttaa
-aggtggatgcggtcaccttcccagctaggcttagggattcttagtcggcctaggaaatcc
-agctagccctgtctctcagtaccccctctcaacaggaaaacccaagtgctgttggggagg
-ttggccgacgaccgctctaactgcttcctcctgaattggggcatagtaggggttgtgcag
-ttgagatttcctcaggaggggtgccttcgatgtcattaacattggagcatgggctagcag
-gccggtccaatggtccacggtagctcttagtcatggacggcatctgtggctccatttgaa
-gaatgatttgtagttttacagctttgattctggaaaagacaaacttaacaaggaggttaa
-agatacagggattgaaatgtatggcctgcagtgcaggggattatttctttggcacacttt
-acaggccctgactatctatttgatagttttgaaaaggcctggtccagtaaataataattt
-agccatctgatagttgctatcaatgcctaagtgaaaggtttggtaaagggttttaagtaa
-tttcaattggttagctgcaggcaaaagtattttttcttctttggtggctagccatcctga
-ggggaggaaagtatgtcctcttgaggttctccattctatttcttctgctgagtactgggg
-cttggtttcctggagggggttaccccacactaggggtccttctataagcatttctaatgg
-agggtcctgtcttgtggctcttttggcttcaacatctgcttggcagttcccttctacttc
-cctttccttttttttttttttttttatgaccccggcagtgtaagactgccacctctttag
-gtttctgtacagccaataataatatcctaatggcttcttgatgtttgataggtgttccct
-tggaagttaggaattccctttctctccatattgctgcatgggcatggagaactaggtaag
-catacttagagcctgtatatatatttaccctttttccttctcctaattctagtgccctag
-tgagggctattagttctgccagctgaacactagttcctggagtgaggggattactttcaa
-gtattccattatcactgaccactgcataccccacttttcgaagtcctttttctacaaagg
-aacttccatcagtacataaggtgaggtcaggatcagtcaagggaacctctaaaggatccc
-cttgagcagcgtaggtttgaacaattacttgctgacagttatgttctatcttttctttat
-tgtctggaagaaatgtggctgggttaagagttgcacaagtgcacagtcgcagcactggcc
-cttcaagtaatagagcctgatatttaagtaaatggttgtctgacagccacaagtctcctt
-tagcagtgagtatgccattcacatcatgagatgtccacacagtaagatctcttccctgta
-ttagtttaactgcttcagatactaagactactactgctgccactacccgtaaacaatgag
-gccaaccctttgccattacatcgatttccttacttaggtatgccacgggttacaagctca
-tccctcagacctgtgtaaggactcctagagctattcctgtttttttctgtgacttataaa
-gaaaagtcttgcccctttgacaagcttaacactggggcttgggttagggccttctttagg
-gcctggaaagctgcttctgcttcaggtatccatcttactaatgggtatttgctttctgag
-tttccttaattgtgtatataatggtctggctatttcgccatacctgggaatccatattct
-gcagaaacctgttacgccaaggaagcttttagttgctttagggttttgggatgaggatca
-gccagtataggctggatatgttcctcactgagggccctggtgcctttggataatttgagc
-cctaagtatttaacctgctgtgagcagagctgagcctttggtttggaaaccttatagcca
-caggtggcgaggaaatttaagagtgcttgggtggcttgattgcacaaggtttctgaacgg
-gcagctaaaattaaatcatccatgtaccaaaggacaagagtgtccaggtatgagaactgg
-ctcaagtcttaggctaatgcctggccaaatagatgggggttatccctgaacccttggggt
-aaaacagtccgggtgagttgagatgttgggttcgaaggatcttcaaaggtaaacaagaat
-tgaaggtcaggatgtacagggatgcagaaaaaggcatccttaatgtccaggactataaac
-cactctgcttcctctggtgtttgggaaagcagagtatacgggttaggtataggtgggtat
-ggagcgacaatggcctcattgataatcctgagatcttgcactaacctccactgtccgctg
-agtttctgtactcctaaaattggagtattgcaggggctattgcatggttttactaggcct
-tgggcttttaggtccttaaaaatattttagagtccttgttgggccttgggtgtaaggggg
-tactgcctttggtagggaaaggaggtgaaatcctttagtttaactcaaacagaatgggca
-ttctttgctcgtccatgttgtccttctgttgcccagacttcaggattaattccttcctca
-agcagggggacaataaacgggtgttctttctcctatgttcaggtgtataatggcccctgc
-tttcgctagaatgtctctccctaacaagggagtggggctttcaggcataattagaaaagc
-atgtgaaaagtataaagttccccagtcacaacttagtggctgggagaagtatctagtgac
-tggctgtcctaggaccccttggatagtgacagatctggaggacagttgtccgggacagga
-cagtaagactgagaaggctgcgccagtgtccaggagacagttagcctcctggctctcaat
-ggtcaagcatacccgggactctgtgagggtgatggcatgggctggagcttgccctgggca
-ccctcagtccttctgctggatcatctggttagtggcttctgactcagaggaccttcgtcc
-cctggggcagtgggccttccagtgattcccttgacataaggggcatggatgagagggtgg
-cttatttctacttggacaatcttttttaaagtgtccttgtagaccgcactggaagcaagc
-cctattaggcattcgatttgcccagtttttcccttttccaaagcctccTCGACTAGGAGT
-TCTTAACTCATAGCACAAAATTCATGCTATATGCTCAATACATAATCACTGAATGGCTGA
-AAAGTACTGAACAAATTACTGCTAGATAAAATACTCCAACACAGCAATAAAGTTAATTAT
-GGCATTTCCTTTAAAAATGCTGTTTACCACTTTTTGCAATTTCTAGGCACCTAATTATAG
-TAATGAGGTCCCATCTAATCCAAATATCTTTCTGTGACAGTATCTGGAAGAATGTTGGAA
-TTTCTGAAAGCTGTAGAAGTAGCCGTTGATGATTAAACTCTTATCACAACATAGTCAGGG
-AAAGAGTAAGGTTAGGAATTAGTATTGTATATAGCTTACTATGGATACCAGTAACCAGAG
-CCCTTATCCCCCTCAGTTAGTAGCTGTATACCTTGTAATCCTGGAGTGGCACAGAAAATA
-AAGATTGGTGAGGCTTACAGAATCTCATCAAATCATATTTATCATATGAAGACAGCTAAG
-TTAATGGGTGCAGGAAATTTAGCCGCACGAAGATCAGATGTGTGAATATTTATTAAGGGC
-TAGGTGCagtggctgggattacaggcgtgcaccatcatgcccagctaatttttgtatttt
-tagtagagatggggtttcaccacgttggccagtctggtcttgaactcctgacctcaggag
-atccacccacctcaacctcccaaagtgctgggattacaggcatgagccaccacgcctggc
-tTGTTtttttgtttttgtttttgttttAATTTTCTAAGTCTTTCTTGCTGAGGGTCTGTG
-GATCAAGGAAATACTTATTCAAAAAACAGGTATTAAGTTCCTGTTAATAAATACAAGAAG
-AAAAGTGCTAACTGAATCACCTGTGGGTTTAAAGACCACCATCAAAGCTACAATTTTGGA
-GGACAGCCAACTGCTCCCTTGTTCTGTAATTCAATTTTACTCATTGCTGTAAGGGAGTTG
-GTTCCATTTCTAAATAAATTAAACAGAGATAACCCAAGGATTAGATGAATATAAGTCCAG
-CTATGCAGGAAATCGTTTGCCACCTTAGTGCACAATAAGAACTAAGAAGTTGGACTCCAG
-ATTAGTGTATGGGATTTCTTTTAGCTTTTTCTAACTAGAATCAAGAAAGATGAGATATTT
-GACTGTTCTAAACCTTTACTTCAGCCAAGTATGGTGCTCTGGAAGCTTCTCAACCCCACT
-CCCACTGCCTCCATGTTCAAGACCATCAAATAAGAGGGAATTTCCTCTCCAAGTAGATGT
-CCATCTTCTACAACATTTTTTCCTACGTCTGATAGATACACTCTAGCAGAACTCCAGTAG
-CATATTTCACCCAGGATACAAAGGTGTATTTGTCAGCACCAGTCCTGCTGATGTTTTTCC
-TCAAATTCTGCATTGTTTCTTTCCAAATCTCAAAACCTCCCAGAaaatccttcttgtctt
-ttaaggctcagataaaaataagacctcctctgtgatgtcttcctaactcctctgatagac
-ttgattaattactattttgaacccccacagctctttccATTTGTATTTGTAACACTAATC
-CCATTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtctgtgtatgAAttttt
-ttagcttttattttaggttcaggagaacatgtgcaggttagtcacataggtaaattgtat
-gtcacagggatttggtgtacaggttatttcatcacccaggtaataagcatagtacctgat
-aggtagtttgttgattcccaccctcctcctacctcaagtaggccccggtgtttgtttcct
-tttttgtgtccaggtggactcaatgtttagctcccattataagtgagaacacgtggtatt
-tggttttctgttcctgtgttaactcacttgggatacaggcctccagctccatccatgtcc
-ctgcaaaaaacatgatttcattttttatggctgtgtagtattcgatggtgtatatgtacc
-atattttatttatccagtgtaccattgatgggcatttaggttgattccgtgtctttgcca
-ttgtgaatagtgctgcaatgaacatacacgtgcatgtgtctttatggtggaatgatttat
-attcctttggctatatacccaataatggaattgctgggtcgtatggtaattctgttttaa
-gttctttgagaaattgccaaactgttttccacaatggctgaactaatttacactcccacc
-agcagtctaaaagcattcccttttctccacaacctcgccagcatctgttattttttcact
-ttttaataatagctattctgactggtgtgagatagtatctcattgtggttttgatttgca
-tttctctaatgataagtgatgttgatctttttttttctttcaaatgcttcttagccgagt
-atatatcttgttttgaaaagcgttccccattgcttgtttttgtcaggtttgtcaaagatc
-acatagttgtaggtgtacagtcttatttctgggatctctattctgttccactgatctatg
-tgtctgttcttgtaccagtgtcatgctgttttggttactgtggccctgtagtacagtttg
-aagttgggtagtgtggtgtctccaactttgttctttttgcttagaattgccttggttatt
-caggctcctttttggttccatataaattttaacatagatttttctacttctgcaaagaat
-gtcagtggtagttaaatgggaatagcattgagtctataaattgctttgggcagtatggcc
-attttagtgatattgattcttcctaccaatgagcatggaatgttttttcatttgtttgtg
-tcatctctggtttctttgagcagcactttttagttccccttgtaggtagaaatctttcac
-ttcccttgtaagctgtattcctatgtattttattctttttgtggcaattgtgactgggag
-ttccttcatgatttggctcttgtgttgaaggttataggtgtataagaatgctagtgattt
-ttgcacattgattttgtatcctgcgactttgctgaagttgtttatcagattaagaagttg
-cctagccatgtgcagaaaattgaaactggaccccttcattacaccatataatacaaaaat
-taactcgagatggattaaagacttaaatgtaaaacccaaaagtataaaaaacctggaaga
-caacctagataataccattcaggacacaggcacgggcgaagattttagggtaaagatgcc
-aaaagcaattgcaacaaaagcaaaaatggacaaatgggatctaattaaactaaagagctt
-ttgcacagcaaaagaaactatcaacagagtaaacagacaacctacaggatgggagaaaat
-ttttgcaaattatgcatccaacaaaggtctaactaatatccagcatctataaggaactta
-aacaaatttacaataaaaacaaacaaccccattaaaaagtaggcaaagaaaacatgaacg
-gacacttctcaaaaaaagacatacatgcagccaacagtcatatgaaaaaaagctcaacat
-cactgaccattagagaaatgtgaattaaaaccacaatgagataccatctcccaccagtca
-gaatggctattaccaaaaagtcaaaaataacagatgctggccaggtacagtggctaacac
-ctgtaatcccaccactttgggaggcctaggcaggcagatgacctgaggtcaggagtttga
-taccagcctggccaacatggcgagaccccgtctctactaaaaatacaaaaattaatcagt
-catggtggtgggcacctgtaatcccagctacttaggaggctgaggcaggagaatcactgg
-aacccaggaggcggaggttgcagtgagccaaggctgcaccattgcactccagcctgggca
-acaagagcgaaactcccatctcaaaaaaataaataaataaaaataacagatgctggcaag
-gttgtgaagaaaaaaggaatgcttatacactattggtgtaaattagttcaatcattgtgg
-aagacagtgtggaaactcctaaagacctaaagacagaactaccatttgacccagcaatcc
-cattactgggtctatacccaaaagaatataaatcattccattataaagacacatacatgc
-ccatgttcattgcagcattatttacaataacaaagacttggaatcaattcaagtgcctgt
-caataatagactggataaagaaaatgtggtaaatatatgtcatggaatactatgcagcca
-caaaaaagaatgagatcacgtcctttgcagggacatgaatggagctggaagctattatcc
-ttagcaaactagcacaggaatagaaaaccaaataccacatgttctcatttacaagtggga
-gctaacttatgggaacacacagaaacacagaggggaaaaaccacacactggggcctcttg
-gagggtggagggtggggggagggagagaagcagaaaaaataactaatagacactaggctt
-aatatctgggtgatgaggggcgggcacagtggctcatgcctgtaatcccagaactttgga
-aggctgaagcaggcagatcgcttgaggtcaggagttcgagaccagcctggccaatatggt
-gaaacctcatctctactaaaaatacaaaaattagccaagtgtggtggcatgtgcctgtaa
-tcccagcttctcgggaggctgaggcacaagaatcacttaaaccagggaggtggaatttgc
-catgagccaagatggcgccactgcactccagcctgggtgacagaacaagactctgtctca
-aaaaataataataataataaatctgagtgatgaaataacctgtacaaccaacccccatgt
-cacacatttacctatgtaacaaacctgtaccccctgcacacataacctttgatcttaaaa
-taaaagtgaaaaaaaAAAGTGTCTGTTCATGATCTTTGCCtttttttttttttttttttt
-tttgacagagttttgctcttgttgcccagcctggaatgcaatggcatgatcttggctaac
-tgcaacctccacctcctggattcaagcaattctcctgcctcagcctcccaaatacctggg
-attacaggtgcccaccaccTCAAAGtaaatttctttgagtttcctcaacacagctattgt
-gaattatctgtcagaaaagtcacatatctctgtctctctggaatggcccctcctgcctta
-tttagtccatttggtgaggtcatattttcctggatggtgttgatgctagtagatgttctt
-cagtgtctgggcattgaagagtagggtatttattgcagccttcactgtctgagcttgttt
-gtacctgtccttcttgggaagtctttccgaatattcaaaaggtcttgagtgttgtgatct
-aagctatatctgctttagggggtaccccaaacccagtaatactgtggttcttgcagactc
-ttagagataccaccttgatggtcttagacaagatctgagaaaattctctggattaccagg
-cagaggttcttgttctcttcccttgctttctcccaaacaaacggagtcagtctctctctc
-tctctctcttttctgagctacctaaagctgaggatggagtgacataagcatccctgtggc
-caccaacactatgactgcactgggtcagacctgaagccagcacagccctaggtctcaccc
-aaggcctgctgcaaccactccctggctacttctcaaggccctgaggctctacaatcagca
-agtggcgaagccagccaggactgtgtccttcctttcagatcataaaggtaccccaggccc
-aggatggatacagaggttcccatggggactccgagactagagtaacaaaccttagaaatc
-tacctggtgttctattgtactgcagctgagcttgtactcaaaccacaagactcagtcctc
-cccactcttccctctcctttccaaaagcagaggagccttacttcgtggccaccaaaacca
-caggccacaaggaatactgccaggctactgctgatgttccctttaagccccaagggttct
-tacgtcagcttgtggtgaatgctgcctggcctgggactaatccttcaagaaggtaggctc
-ccctctggcccatgacaggtccagaaatattcaagagtcaagtcctagaatcgaggaccc
-caagagcccacctgatgctctacctccttgtggccaagctggtacctaaggtgtaagaca
-aagttcccttcattttttctctgcttttctcaagcagaaggagttctgccctatagccac
-cacagatggggatgtgttgagtgtcacctgaagccagaaagtctcatgggttcacccaag
-gccatcagtgtggaacctggttatcactgctggttattcagggcacaagggctctttagt
-tagcaggtgattaatgctgccaggactgggtccttcccttcaaggcagtgggttcccttc
-tggcccagggtgtgtctagagatgtttttcaggagctacgtcctggaagagggtctgtca
-actatctggtgcctgatcctgctgtggctgagctggtatccaagatgcaagacaatgttc
-ttcctactcttctctctcttctcctcaagtggaaggaaatggtctcttttggagctatga
-gttgcgcagcctggggttaggggaggatgatgttagaactcccttagctgccctagctac
-tgttttagtaggtcatgtgccccccagtccactgtctctaggcccagttcagcactagga
-cttgcctaagagttgcagtccttggggtttagactgcctttcaagtttgcttagagaccc
-aaagcccacagtggaaagctttgcatgtattcaagttccgaccactgagatcagcaattc
-ccctctggttagggctggtttaaatgcttcctctgtgggtgggcctcagctgcatttggt
-ccagttttcctttctgctctaactgggcagcactgagttcactgcctcacaattgccgag
-ttttccatccctcctccagcacccagagattatctttgcatgctgctaccgacagggcag
-tgggagtggggagtgcagggtggcagctgtgattgaggactgtgttttctatttcttcag
-tgcctcattcagtggtaggaactaaaatcaagtgctatgattcttattcttatgaaggtg
-ttttttgtgtagatagttgttaaattggtgcctttgcataggggagggaggacgatcagc
-ggagccttccattcaggcatcttgctctgcctcctttttccataaataatttttgggagt
-ctagtatgttccaggaactctttcaggtcctgaaaattagacatgcattcatggagcata
-cattcaaaagtgggaagcagataaaaaatcatatgaataaatatatagtatgtcagatgg
-tgacagggctctggagcaaaagaagatatagaaagaagatgacaaggccaggcacggtgg
-ctcacacctgtaatcccagcactttgggaggctgaggcgggcggatcacctgaggtcagt
-agtccaaggccagcctggccaacatggcgaaacaaaatacaaaaattatccaggaatgat
-ggcgggtccctgtaatcctggctacacaggaggctgaggtggaagaatcacttgaaccca
-gaggtggaagttgcagtgagccaagatcatgccattgcactccagcctaggcaaaagagg
-gagactccatctcaaaaaaaaaaaaaaaaaaaagtgctgagcaaaaaagagtacagtttt
-aaatgaggtatctgtgaaaagactccttgaggcagtgacatttcaggaaggatgtaaaag
-ttatctggggcaagagagtgtcaggcaatgagaagagcaagtgcaaaggccctgaggtgg
-gaccatgcccagtgtgttcaagaagtagcaagaagaccacatggataatgtgaagcaatg
-aggaaagagaaaaaggggattatatcagaaaagtaatgggggtgcacatttggggttaca
-ataaagaattagacttttcctctaagatggaggttattggacagtgctgacatgatctga
-tgtattttcaaaagatgcctctggcttctgtggtcaaaacagattgagagggagggaaag
-tataaaagtggaaaacctgttgcatgggcattacaaaatctaagtgacagctaatagggc
-ttagatagagagcatcagagaagagggtgggaaatggtcagactcttacatacctattga
-aaatacagtcactcgtagattgaagagaaaggaagaagtcaagataacatcacagtttta
-gtctgagtaactgaaagaatgaagttgtcactgacagagatggatataacaggagaaagt
-tcagattggtctttttgcttgagggaggataaaaacctttgtttgggatacgtttgcttt
-ggagtgctatagacatctaagtggaattgtcttgtaaacaggagagatttttaagccatg
-agactgaatgggattgtcaaggctatgactgcagaaaagagcctaatgcctgagacctag
-aactccccaatgttgatgaataagaagcagcaaaggacactgagaaggttcattccagtg
-aggtcggaggaaaaccaagagaacatgatgctctgggagcttaattaaattaagttcatc
-aaggaggataaagcaccaaatgctgctgatacatcaagatgaggcatgagaattgatcag
-tggCCTACCAGAATCCCAGCTCCAtgacctcttaccagatgccaagtagatgacaaatgc
-atttcaaatgcattgcttactttaatcatcacaagaacactatgaagcagaaattaatat
-acctcaatttttaaaactggaaaactacaatttagggagctaataatgtgcccaatgtca
-cacagccaataaggaattaactgggatcaacacaggtctgcatgaacctaaaattaaagg
-ccttagccactatgctaagctgcctctcCAGCTGCCTTCCATGGGTCAATTCTAGGGAGA
-CTGAAGACAAAGTATTCAAATAAAAGATGTTGCTTTATTCAAAAAATGTATTGGCCATGT
-GCTTGGCTGGACATTCTTCCATGACCTACTCCTTTATACTCTATTCATCACTTACAGGGC
-AGCCTGTTTTAAGAGAATTCATATTTCTTATTTCTGAAGATGACATTATTACATCCTGGA
-AGAAATATTGATTGCCCATTTCAGTATATTCCTAAGTCTTTTTGTTCCTCTGTGTCAATT
-Ctttttcttttattattatactttaagttctagggtacatgtgcacaaagtgcaggtttg
-ttacataggtatgcatgtgccatgttggtgtgctgcacccgttaactcatcgtttacatt
-aagtatttctcctaatgttatccctcccccctcccaccaccccacaacaggtcccggtgt
-gtgatgttccccacctgtgtccaagtgttttcattgtttaattcccacctatgagtgaga
-acatgcagtgtttggttttctgtccttgcgataatttgctcagaatgatggtttccagcg
-tcatccatgtccctacaaaggacatgaactcatccttttttatggttgcatagtattcca
-tagtgtatatgtgctacattttcttaatccagtctatcattgatggacatttgggttggt
-tcgaggaagtcaaattgtccctgtttgcagatgacatgattgtatatttagaaaacccca
-tcatctcagcccaaaacctccttaagctaaccaacttcagcaaagtctcaggaaacaaaa
-tcaatgtgcaaaaatcacaagcattcctatataccagtaacaaacagagagccaaatcat
-gagtgaactctcattcacaattgcttcaaagagaataaaatacctaggaattcaacttac
-aagggatatgaaggacctcttcaaggagaactacaaaccactgctcaacgaaataaaaga
-ggacacaaacaaatggaagaacgttccatgctcatggataggaagaatcaatatcgtgaa
-aatggccatactgcccaaggtaatttatagattcaatgccatccccatcaagctagcaat
-gactttcttcacagaattggaaaaaactactttaaagttcatatggaaccaaaaaagagc
-ccgcatcgccaagtcaatcctaagccaaaagaaaaaagctggaggcgtcaATTCTTTAAT
-GTCAAGCAGCCTTTATGCAATCTTGGATTGGGCACAAGAAGCACACAATCTCCTCATTTT
-CAAAGCCCTTCATGGCTAAGCAATAGAGTTCCTCTTGAGTAGGCTGGAACAGATAATGAA
-ATGTTGCTTTTTAGATGTGGTCAGTTAAAAATAAAATCACCTATCAACATTTGTTACTGT
-ACCTCCAGCTGTGATCAATAGTACAAATTGCTTTTAATATCTTACTTATAAATAGACTTT
-AAGTATGTTTCATTTCTGAGAAATGTTCTCTGAATTCTACTTAAGATGTTATCTTTCCAA
-ACTGCTGGACGGGCTGAATCCAGGCAAGAAATGGGATTGCAAATTCCCTTGCACGAAGAC
-TTGATGGGTGAGTCAAAGCAAGATTCCCTTGCCATTCTTTGTTTAGAGGTGAGAGGAAGG
-TTAACTAGCATTTTATGCTATAAAAATCAGACACAAAGATAAGCAAAAAGAATACAACAG
-AAGCCACTCATTATTTCAGCTCTCTGTTAACACTTTGATGTTCACTTCTAAATATGCTTC
-CTCAAAGTAATTTCTTTTCACAACTGGGTAGGAGATAAGATAAAGCAAAGTGAGCTTGCT
-TGCTTTTCATCCACTCAGTTAAAAACAGTCTTCCAGTTGACACTCCCTGATACATGCACA
-CTCAGGCACACACAAAAGTCTGCACTCATCCATTAACCTCAAGAAAGAGACCTGTTGACA
-AAATAGACATACACCAGTTCAGAGGAACCTATGTCACCTGTCCCTAGTAATCTACTTTTA
-AGCCTAAATATATCAACAGTCAATTTCAGGAAAATTAACATTAAAAAAATTTAGATGAAC
-AATAGGAATGAATGAACTTAAAGGAAAAGAAGCTAATATCAAGGACAGAAGATAATTATT
-TAAAATGATGAGTGACAAACTTGACTAAAATGCACAACCTCTTCATAACAAAAAGCATGC
-AGGAGAAGGTACAAGTCAGCACAAGgttaaaagacaatcagagtagaacaaaaattctat
-gtgcatgataccacaaaaagattgctatccataatctatatgaagaataactacaaatca
-ataagaaaatgacaaatgacccagaggaaaataggcaaaCAATAGTATAGCAGCAAAACA
-TTGTAAGCACTCGTTTCAGAAGGTTGATATAGATTCAGAAATATGATATTCCCTTTAAGA
-GAATCTGCTTTTAATCCATAAATTGTCTTACAAACTAGTTTTATTAGTTTAATATTAAAG
-GAcccattagtgggtatatatccagaggaatataaatcattgtattataaagacacacac
-ctgaaaatgttcattgcagtactattcacaatagcaaagacaaggaatcaacctaaataa
-ccatcaatgacaggttggataaagaaaatgtggtatgtatacaccatggaatactgtgta
-gccataaaaaagaacaagatcgcatcttttgtgggaatatggatggaactgcagaccatt
-atccttagcaaactaacgcaggaacagaaagccaaataccacatgctgtcacttataaat
-gagagctaaatgatgagaactcgtgaacacaaagacgggaacaagagacactggggtatc
-cttgagggtggagggcgggaggagggagaggagcagaaaagacaacaaacctctgtgaca
-caagttttcctatgtaaccaaccttcttatgtcctcccaaacctaaaacaaaagttaaaa
-aaaaaAAAAAGACCCAATTGGAGTTGCAATTTGCTCTTTCCCATTCTACTGCATTTCTGA
-AACCCAAAGTGTACAAAGAATGTGTCTTATGTTTTATGAAATGTACATTTGGGCCCCCAT
-TTTTTTATTTGTATAACAATTGTAAAACACTATCTAAAGGCATAAAATGGCTAGGATGAG
-AATTACTATTGGTTCATAATTATATTTGCTTAATTACTGAAGATGTAACTGTACTCGCTT
-TAAGTATGCCATTTGACTATTGCCCTTCTTTTTGTCCAGAGCCATCAAAAGATTAAAGTA
-TTTGAAATGAATAATGTAATGGTTTTGTCTTCCTGCTACAGTGTGTTTCAGGTTATTTTC
-TAAAATCATAATGAACCCTGTTTTTTTGTTGTTTTTATTATTTTTTGATAAGTAAATAAT
-GCCACGATTGGTAGATCTAAAACTGAAGAAGGAGACCCTATGGCCTCAATCCAGAATGCC
-ATAGCATGCTAAAATGAGAACTTCCTCCAGGTGTGTATGTGTGTGTTCAGGGCCACCTAT
-GTATGCCCGATACGTCCAGTCTTCGTTGATGAAAATTGTTAGAGGTCAGTATTACAGAAG
-ATAAAACAGAAAGGCCATATGTTAATAATGAGAAATAAGTGGTTAATTCATAATTAGTGA
-ATCTGGTTTCAGCACTTTGGCCTTCGAGGTGGTCAAAACAGGTCTCCAATATGAACTAAG
-GATTGAAAAGattaaaattatttttttaacaaaaattaaGCTCAAAGAGTCTTGGATGCT
-TCAGATTGACTCTGCTTCTGGCATAACTTGAATAGAAAATCATATAAGGGTCTATGATGG
-GCACCATGCCCAGAGCTAGTTGGTTTAAATGTCATTCTATTTTGGACCCTAAAGATAAAC
-ATGGCCTACTGTGATTCCGTCCTGCGTGGCTGTTCTCTGGAGCAGTAGTCATTAATCTTT
-GCCTGCCTTCTCTCCCACCTAGGTGTGTGCCACCACCCCATGGTGACATGAGCTTCatta
-attaaaaaaaaaaaaaaCtttttctctcttttcttaatagaaatgaccttggaaaatttc
-tattggtctgtcttcaagttcatttctctttccatatcatatctacatggctgttaagtc
-caaagtttattatttaaataaataaataaaattgataaaactctagccagttgatcaaga
-aaaaagagacaattaccaaattttcaatatcaggtataaaaagaggacatcattacatta
-aaagttttgtgagagatgattctatatgccaaaatttttgacaacctatatgaaatggat
-aagtttcttaaaagatacaaattaccaaaactgacctaagaggaaacataaagtttaaac
-gatgctgtatcaattggagaaattgaatccatagtttagtcttctcacaaagaaactttc
-atgccttgatggcttcactggtgaagtataccaagaaataataatggcaattctacacta
-actctttcagaaaataaaggaggagacacttctcaaatcattcttcgaggccaatattac
-cttggttccaaaaatatgcaaagatatcacaagaaaagagaactatgagccaatatcctc
-atgaacataatttcagaaatctataataaaatattagcaaattgaatgcggtgaagaata
-gaaaggatcatagaacaggacaatatgatgtttatccccagaatgcaaagttgatgtaac
-atcaaaaaatgaatcaacgtaattcaccatattgatggactaaaggggaaaaacatatga
-ttatttcaataaatgcaagaaaagcatttgacaaaattcaaagccctttaaaaaaaactc
-atcaaactaggagagatggtaacttcaagctgaataatgctagctacaaaaaagtaacta
-cagataacatcacctttaacttagaaggctcatgtctttctactttaattaggaacaaat
-ggtaagttgaccacaaccacttttacttaacgtcatactgaaggtcttagctactccaaa
-aaggctagaaataggaataaaatgcatgcatttagaaaaggaagatacagcagattctat
-ttttagtttttaatttttataggtacatagtagatgtatacatttatggggtacaaagtt
-attttgatacaggcatacaatgtgtaataatcatattagggtaaatggggtatccatcac
-ctcaaacatttatcttttctttgtgttatcaacattctaattatactcttttagttatat
-ttaaatgtagaataaattaattttgactgtagtcaccctgttgtgctattgaatactaca
-ttttattcattctgtcttactatattttcatacccattgaccatcccctcctcccagacc
-cccctactacccttcccagactctgatcatcatcattctactttccgtcttcatgagctc
-aattagtaaaactttccttttttgcagataacatgatcatgtacataggaaaccctaaag
-aatccttggaaaagctattacatctaataaatgaatttagcaaagttttgaatgaaagtc
-tgtatacaaaaatatatatgtgcatattttagcaaaaaattagaaaaagaaattttgaca
-aaaactaccctttccataatagcatcaaaaatgaaatatttaggGGCCGGGCATGATGGC
-TCACCAATCTTGTACCCCAACAACCAGAATGATTATTTTTTATAGTTTTATGTATAGTCT
-ATTTTGGTTTTAAAATGGCAAAATACTATATGATTTTATATAAAAACTAAACTAACTTAG
-AAGTATGCAGTAAGAACGTGAAGGTCAAACACGCTGTCCATAACACTTAGGAAAATGAGA
-TCAACAGTAAATAGAAGACTGGTTACTCATCCTACAAGAAATGGTGATGAATAGGCCTGC
-AAAATATCCTGTAACTCCTCTAGAGGGTGCTCACTAGCAGGACATTCACATGCTACTCCA
-TGTGATGTTAGATTATTGTAAAGCATTATGTTCCTATAAAGGGTGGCGTGACAGTCCATT
-ACCAAGCACGAGACCCTCTGCTGATCTGTCCTAACAAGTGGAATTATGATATGCAGCAAC
-ACAGGAACCAGGCTTACGCTAGCCACATTGCAGAGAGACATTGCCAGAATCTCACTTGTA
-GAGGCCACCATCATATACATCAGTAAGCCTCTCTCCCTGGATCCACATCTCCCTCTATAA
-GGAGCCCTGTTAACCCCATCATTTAAGGGCTTCATACATTTGCCTTATATTTCTCTCATA
-AACAAATCAATGAGTTCCAGACTTTTGGTACAAATGTATGAAGACAGAAGAAATCATATT
-TCAGtcttaaaagcctaatcccagaagtgacacccatcacttcacattccattgccaaga
-gcaaatcacatgaccacacagatgcaaggggaatgagacattggcaaccacttcccagtg
-aCCATTATATATTATAGAAGGGGGGCATGCATGTAAGAGGAAAGTTGGTCTTCTCTGACA
-GAGACGTAGAATTCTACAAACATAGGGGAGGACGTTAAAAGGTGCTGAGCAGATAAAGGT
-CAAATGTCTGTTACAGAAGGACACAGGCACCAAAAGATAAAGagatactcctcaatttat
-gagggagttatgtcccaataaactcaccataaattgaaaatatcatacgtcaaaacttca
-tttaatacaactaacctacctaacatcatagcttagccaagcctgccttaaatgtgctca
-gaatatttatttgagcacatagttgggcaaaatcatctaataaaaagactattttataat
-aaagggttgaatatttcctgtaatttattgaatactgtattgaaagtgaaagatggaatg
-gttgtatgggtacttgaagtatggtttctactgaatgcatatggctttcacaccatcgta
-gagtcaagaaatcatgtcaaccatcataaataggggactatctgTATGACAGTAAAAACC
-ATTTTGTTACACAAATAGCAATCATCAAAAAAGAAAACACAGCAATTTCTGTTGCATATA
-TCCAAGCATTCAACAACAAAAGACCTTTCATTTTAATCAtttttttaagacacacggtct
-gactctgttgcccaggctggagtgcaatggtacaatcatagctaactgcagccccgacct
-cctgagctcaagcgatcctcctgcctcagtctcttgagtagctgggactacaggtgcgca
-tcactatgcctggctagttttttctagaggcagagtcttgctatgttcctcagactggtc
-tcaaactcttggcctcaagtgatcctcccaccttggcttcccaaagtgctagaattacag
-aggtgagccacagcacctggccAAGAATAGACATTTTATATCAAAGTAATTCAAGTATCT
-ATATGAACAAGTAATCGTGCAACTAGGTAATCAGGGCTTTGACCAATTTTGAATTACACA
-ATTAAAGTGCTAATATGTATTGTATTATACTGTATTTGCTGTAGCAATGCAAAAACTTCA
-TTGTTCTTTGTCCCCAAATACAACTGTCACTTATATTTCACTGTTTATGCTGCTAGTACA
-TAGCTTTATAAATTAATCTATCTTGTTTCTGACACTTATACATATTTCATCCTCTGGGGA
-CCTGGAGGAGCATATTCTTTGCCCCACCTCACAATTACCTATGCATATTTCTCAGTAACA
-GGCATAAGGCACGCTGCACAATCTTAGCTGATGAGATAAGAAGTCTCTCCTAAGGCTTTA
-CTCGCTGGACCATGGCAGAAATGTGGACAAGAGTGGTTGCAGAACATGCTGTGCCTGGGG
-CAAGGACCCTCTAATAGAACTAGAAGAGATAAGTCACAGGTACAAGGAGTGTGCAATCGG
-TCTGTTCAGCCACAGTTGCTATTAGAGGCCCCTGAAGAATTTGTTGTACTTTCCACGCTA
-GGCTACCTCGATCACAGAAATCAGCCTAGAGTCATATAACCCAAAGGGGGAGCTGACATT
-GCTGCTAAGCCCTCCTCCTGAGGGCCTTTTATCATCTCGTCCTGTAACCTACCTTTGCCA
-AGACAATTCCTTCAATCTTTGCTTTGTTTCAGGGAACAGTAATCCTACTAAGACTCTAAC
-AGTAGGGACGAGAGAAAGGGATGGAACAAAGGAGTGAGGCAAGGAGGCATCAGATGAAAG
-TGAGCTAATAATCTGTTGGCACCCATCACAtgctgagtacttccacttacattatcacac
-ttaagatgcacaatactttgggcatgatgtcactgccagcaaatctgaaattaggaaact
-caggcccagaagatatgaagtgacttttccggggtatcattaatgcaccagcagtgtaag
-ctaaattgaatccattctgcctgacaccaaaatcgtattcctttcCTTCCCTCCCACAAT
-TGTTTCCATTGGTGTATAAAACCTCTAAAGATCAAGATGTGGCTTCCTTCTTTAAAGAAA
-TAAAGCTGAGGCTAGGTAGTGACAGGTGGGGGCAAGTATGACCATCTATGAATGTTAAAT
-CTCACCCTCAATCCCACCTTGTAGTTTACCATCTATAGACTTGGCCTTCTTTAGATGAAG
-CAGTGTTGTAGGGgcctttctcaactggtgttcctcattcgaaccacagaacacagaaaa
-tgacttaggtgactattttcccaattcttccaaagatgatacatatgaataccattctag
-gtgcttagaagaaaggttaatccaaacacaatggatgtgtttggttgttaggatttaatt
-tgcttgcagaaacccaattgagacatgctgGTAGGGAATCTCTAACATTGGTCCACTGTA
-GAAGACAGAGGAGACGATCAATTTATTTTGTCTATCAACCTGCAGAAATAAAGAGTTTTG
-GTGGAACTGTAGGTAGAGAAAGAAGGAGGTACCTTCCCATGGCCTTGATGAGCCTGAGTC
-TTTCTAAATGCCAGGAAGGAAAACTACTCAAATTAGCTGTAACAGGGAGTTATCACAACA
-ATTTTTATTCTCTTGGGAAGTGCTAAAACAAATATATATGGAAATCTTACAGCCAACAGA
-AACGAatttcccactgctttcctccctcccaaactttcccactgtccctaattgaaaccc
-cattggaaggtaactaaatcctgtacaaccagaatctcctcatctaacttttcatttctc
-cctgtgttaaattaatcctgtttctccctcatggattcaccatcaacttgtactctcaag
-ctgatgctgttcattttcccacttttcatgactcaaggccaaaaggttggtatggcagct
-tcctcccttcccaatgttattttgaaaacattgcttctgtagtgtaaaatccccaactag
-tcaagactcaagtcagctcttttcaatgcctcttcaaccatctttattgttatattttaa
-aaagcagccccccatttattgaggactttggcactttgtttagaatgtatctattctgat
-tattgcctttattattggtgacttcagcatccatatggaaacactatccagttctacaaa
-tgttcagttatttgtcctccttaatgtcaataatttacctgctattctactcctgatttc
-tggccatagagctgtccacgtcatcatcaatgaccactccacacatgaactctgaactcc
-taccaccttctctgatcacacccaggcaccttttcagctccctcattttattatagaaca
-tgcatccgccagacgcttcctccttcacttttctattttttttttttttttttttttttg
-agatggagtcttgctctgtcgcccaggctggagtgcagtggctcgatctcggctcactgc
-aagctccacctcccgggttcacgccattctcctgcctcagtctcccaagtagctgggact
-acaggtgcccaccaccacgtctggctaatttttttgtatttttagtagagatggggattc
-accgtgttagccaggatggtctcgatctcctgactttgtgatccacccgcctcagcctcc
-caaagcctccttcacttttctttattagcctcaaccccatgattcaccactccaagtact
-cccttgccagcatcctcaaatcccaataccatttttaaaattttttaaagaatttctgca
-cccacctgtgtgaaaagttcaacccccagatccttttaactgtttgtcttctccacagac
-aaattcaggctgatgagcagtgctggaaaaagtgcacagctgcgcagattagtggcacct
-gcattcatgatctccagttttcacaaagccctcaGCAGCAGCCACTTGGTTCCCTGTGTG
-CAGCGTTCAGTGGAaaactccatgagggcaagaacaatatctgcttttactcattatttt
-aacccacttgaatgttaagctccatgatgacagggactttctgcggtatagattattacc
-ggcccctaagacagtttctggcacataatagacgctcaataaatactcagtgaaggaata
-aaATAAATAGGAGGTTAAAATTAAGTGATCAACAGTAGTCCAGGGTATTAAAGagactcc
-ccttaaaagctgcaattaagcagagtcatgagaggtgagtaggagctagcctgagaggaa
-atggaaaagacagtattaaaggcaggttgaacagcGCCTCTGTGATCCCTCCCTCATGCT
-TTACACACAATCGTTCTGAGTATTCTGTACTCAAAGCCCTTCCATTCTCTCCAGTTCCAC
-TGCCGCTCCTATGCACCCTCAGATGCAGCCTCTGTATTTCAGCCAGAATGGTAGCTCTAA
-AAGGTAATTCTGCTCATTATTTTCAGCTTCTATTTGGAACTCCTCTCAGAGCTCTCTAAA
-TTTCCTCAAGATATCTATCAGTTAAATGTGTTCACCcagtggtcttccatgtggtttgta
-tatgccaaggtatccccaaaaccctttgaaggagtctgcaaggtcaaaattattttcata
-acaatatttttaaaataactagtttcataataatattttgccttttcacaaaattgacat
-tggctctgaaaatgcaaactgaagcagataaaatagctagtgcctcaccacaaatcaaag
-caggggcacaagtctataattagaagttggattctttatcaccaagcacttgtaattttt
-ttaaatgccactcttaagaatatacttgacaaagtataaaaatttttaattttattgaat
-cccttgagtaGATTTTGTTCTAAGgttaaagtaaattaaagtggaaaccaggcctggaga
-atccatgagcagacaaggcctcttaagtgctcataacttttcttgatttgcaaacgtaag
-caaaacttaattggagctatttcttgtaaatgcctatattaaagaaaaatagaacttaat
-ctcaaccaatcaaaagcagctaactaactcgtaattatataagaaggtacttcccagcag
-gatagaccaaataagacaaaatttgtaactataaccaatcaaatattttatttgtattat
-ttccacacttactgcataaaagcgtgttccttacCACttttttttttttcttgagacagg
-gcctcactctttcacccaggctggagtgcagcggcatggtaatggctcattgcagcctcg
-aactccggggctcaagcaatcctcccacctcagccttctgagtagctgggaccacaggca
-cccaccatcatgcctggctaatAtttttttttttttttttgagatggagtctggctttgt
-cacccaggctggagtgcagtggcgcaatctcggctcattgcaagctccacctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacaggcacccgccactacg
-cccatgcccggctaatttttttttcttttttttcttttttggtagagagaagggtgtcac
-catgttgctcaggctggtttcaaactcctaggctcaagcaatcctcccaccttggcctcc
-caaggtgctgggattactggcaggagccaccatgtccagctTccttaccacttcttaagt
-gaagaccccgaaccacttctggtttggagttgcccaattcatgcattgctgtttgctcaa
-ataaactcttttaaaaatttttattatgcctcagtttaccttttGACACTatgttctgag
-taatacaaggaaaagtacatataaagcacttctgcagtataacaagctatgatggttgtc
-gccagaaaaatcacttaaataactatttggattttaaactgaactaggcacttttttatg
-aaacatcatttttatttgaaagaatgatggaaaaagtatggttattcagacttacatact
-tggcagaaattttctcaaaaattaacaaagtgaacttgtcatttcaaagaaaatagctag
-caatattagttaccaatctattcttataatgtgtggctgacaacaagaagtgaagtcact
-gctccctttccttgaacctgggaagatctttgtaaccaacctgaccagtacaatgcagtg
-gaagaaatatcaggtgatttccaaggcagaacagcttctgactggccctctgtctccagc
-caccatgttagaaggaagttcaggccacatggagacagcaaggcctctagctcacagtca
-gcatcaactgccagacatgtaagtgaatgggcctccagatgattccagtccccagtcttt
-gaggcttcccagctgacgtcactgacattaccatgcagagacaagccatctctgctaagc
-cttaatttttaacccatagagaccatgaaagaataacaaatgatgattgttttgaagcca
-ctacattttggggtaattcattatgcagcaatgggtaaGTAATCCTGGCATCACATGTTT
-TTCAAGAATGGGAATATGTCTTTTTCTTCCTGTCTTTCATGTCTAAGCCCTCTATCAGTG
-GTGCTTGTTGTGTGGAGTTTGGAGCCCAGGAGTAGTCAGAAAAGACTTTGATGACACAGG
-GTTGCTTGTAGAACATCTAATATGAGCAACTCCTACCTTGTGCTCACTGACCAGGCCCAC
-AGAAAAGTCAACAAGGGCAAAAGTTCTTTGCCTCACAGCACAGAACTGCTCCTTCCTCTC
-TGGTGCCTCTCCAACCACAAAATTCCTTGTCCCTGTCTTTGCCAGTCTCATGTTAAGAAA
-CCCCATAGACCCAGGTATTCTCCAATCTTGATGATAGAAGGGGAAACTGAGGAAGAGGTC
-CAGCTCACAACATTCTTACCAGCCCAGGGGGAAGGCCAAGATCTCCACAGAGTCATAAAC
-TCTAGGCCAAGACTATGCCTCTCCCAGGAATATCCAAGTTGGATATACCATATATTTTAT
-GCAgataaaatagctagtgccttaccacaaatcaaagcaggggcacaaatctgtaactag
-aagttggattctttatcaccaagcacttgtaattttttaaaatgccacttttaagaatat
-acttgacaaagtataaaaattattaattttattgaatcccttgagtaGATTTTGTTCTAA
-Ggttaaagtaaattaaagtggaaaccaggcctggagaatccatgaaaagacaaggcctct
-taagtgaTAAAACCTGTATTATTCCTACAGAGTCTCCTCTAATGTCAGCAACTGTCCTGG
-TGTCTCAACCTGTCTTTACCACCTTGATTTAGCCATCATGAAAGATCAGCCAACTCTATG
-TTATTGTATTTTTATTTCCATCTCTACTTTTTATTACAACAAAGGTCCTACTTCGTTGAA
-TTTTCCCTTGCTTTTAAAAAAACGGAAGGTCTTTAACTTGTTCTGAAGAAACCTCCTGTG
-AATTTCAAAAGGGCTCCCTATCTGTTGCATGTGGGGAAGGGCCACGCACATCCACATTCC
-CTTCGTTCCAGGGCACTGGATTTTCAAATATTGAGTTCTTGCTGTCTTCAGTCTTTGAAT
-AAAGCTCACGTGGACAACTATGAAGTTTAAAAGCATAGGTTGAGTTTGGGGTATAGTCAT
-GAGAATAGAGAGGAAAGAGCAGAAGTACAGCTCATTGCAGAGGACAAGCATCATGATATT
-CAGAACATTTGATATGGAGTGATATGGGGTAAGAGTGAGCTGGGTTTTATTCTGGGAAAT
-CACCCAGccctgaaaaagctatttatattcttttgttcactttccttatctgtaacacag
-agaccgttatgccaggtttcctagctactttagttgttgtgaagCAGCATATTATAAATA
-TCATAAAAGATTATCCAGTgctaggtgccatggtgcacagctgtaatcccagctacttgg
-gaggcagagtcaggaggatcacttaagcccaagagttcaaggctgtactgcactgtgttc
-acacctgtgaatagccactgcactccaacctgagcaacacagtgCCTCTTAAATAtgtat
-atgtatatatatatatatgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtATAT
-ATATATATATATACTCTTTTAAATTTACTCTGTTTTAAATATTTTGAGGCAGAAGCAAGA
-CGTTTTGATACAGAAAGCCAGCAGGTTGCTGAATTACAAGACTGAAGCTGAGGAAACTGT
-GTTTATCAATAGAGATGCACCGCTCATTCTTATAGAGGGAAGAtacaaagtaactctatt
-aagtcaagaatttctatatgttttatttactgcaatatcctcagtacatagacagcagtt
-gacatatagtattgatcatagtatctaatgttcaatagatatctgctgaatgaactgaaA
-AATTAATAATGTTGAGCAATAACAGGTAATCACTGTAAGATAACATTCTGAGGAGACTAA
-AATTTGAAGAATGCCTACAAGAGAGGGAGATGCAAAGGGAAAACATATCCTAAAAAATGA
-AATGAAATTATCCTTAAGAGAAAAAAGAAACACCAGTATGATCAAAGATTGCAAGAGGTA
-GAAGACAAAACTGCATAAAGTAAAACAAAATGCTGAACTCTTGAAATGCAAAAATCCAAA
-AATCCTGTTGCCTGTtttttttttgtttgtttgtttgttttttttgagatagagtttcac
-tcttgttgcccaggctgaagtgcaatggcaccatctcggctcactgcaacctccacctcc
-ttggttcaagtgattctcctgcttcagcctcccaagtagctgggattacaggcgcccacc
-accatgcccagctaattttttgtatttttagtagagacgggtttcatcatgttggccagg
-ctggtctcgaactcctgacctcaggtgatccacccatcttggcctcccaaagtgctggga
-ttacaggcatgagccactgcactcggctGTATTTTTTTTTTTCACTTATTTAGAAGGCTG
-ATTTATTATCACCTCCTGCCAGTCACGGGAATGAGACAGAATCACCTTGAGAGTATCTAC
-AGGGAGAATCTGGAGTCCAAATCCCTTCTTAATCAAGAAATGCTCTTTAATCAACTCCCT
-ATATATAGGGAGGTTGATGCTGGGACAAGAGGGGCTGAATAACTTGGGGTTCTAGTCTTG
-GATATGGAATGGGGGCAAGTGTGTACAATCTCTTTGATTTTCCCCAGGGCTTCCATCAAT
-ATTCCAAAAGACTAGAAATTCTGGACAGCAGCTTTTCCCTTCTCTCCCTTTCACACTTCA
-GTGACTTCTGTCTTCATCTTAAGACACTAATCTACACCCAATTTTCTCTCCTTCCTTTTT
-GCAGGAATGCTATTCATTCAAAAATGCTGGGATGAAAGAGCAAACTTGCAAGGATATCTG
-CTACAATAATTAAAGAGAAATAGATGCCTATAATTAAAAACATTGCTGCTTGTCTCTGAA
-ATTATTTGAACACTGTATACATCATAATGTACATAATCAGTTTCCATCTGATATCCCAGA
-CATCTAATCCTGGAAACAACGTCTAATATCTCTACCCCAAAGCAATAGAATTAGAGCTGG
-AAGGGGCAGGTAAGCAACAGTGTGGACCTTTctcagcagcagtgaacttggggtgctcac
-aacctgtgcaaaaccagctgtggtggctaaggattgcctatgtcacctctcccccaactc
-taggcaatgcagcttggggatagactccttccacttgggggaagaagagggaagagtaca
-gagggctttgccttgcaacttgggtaccagctcagccacagtaaagtaaagtatcAAAAG
-TTacccagcatggtgccagctgtggtggccactggacttgcccttcccccaactccaagc
-agcctggcacagagagagagactccttttgtttgggggtaaatgagggaagagaagaaga
-aactctgcctggtaacccagggaatttggccaaatttaaaccccagcccactaaggtggt
-tcctctaggactcagcgagagttgcagtgtttctgagcttagggcaccctctagtgctga
-tatagtttcaataatcacaggctcaaatcacaacactcaatctccttcaaatacctgaaa
-agccttcccaagaaggatgggtgcaaacaagcccagattgtgaaggctacaatatgtatc
-taactcttcaatgcccagacatcaacaaccatcttcaagagttaagaacatccagggaaa
-tatgacctcatcaaatgaactaaataaggcatcagtgaccaatctgagaatgatggagat
-atgtgactttttagacaaataattcaaaatagctgtcttgatgaagctcaacaaacttca
-agacaacacagagaaagaattcagaattacatcagagaagtttcacaaagaaattgaagt
-aatttctaaaaaatcaagcagaaattctggcactgaaaagtttgattgtcaaagtgaaaa
-atgcataagagtctttcaacggcagaattgatcaagcagaaggaactggtgagaactggc
-tatccaaatatacacgaagccaaaaaaagaattaaaaaagaataaagtatgcctacaaaa
-tgtagaaaatagtctcaaaagggtaaatccaagagttattggtcttaaagaggatgtaga
-gggagagaaaagggtaaatagagagatcttttcctcagcacatggaacattttgagagat
-cagggtagaaaggtcagagaaataaaaacaaacaaccttccaaacctcaagaaagatata
-aacatccaggtacaaaaaggtcaaaaaacaccaagcagattcaacccaaataagactacc
-tcaaggcttataataatcaaactttcaaagatcaaagataaagaaaggatcctaaaagca
-ccaagagaaaagaggcaaataacatataaaggaactccaatacatctagcagcagacttt
-tcaacagcaactttacaggccaggagggagtgggaaaacatatgaaaactgctgaaggaa
-aaccaaccttcaacctagaatattatctccagcaaaattatcctctaaacatgaaggaaa
-aatagtctcccagacaaacaaaagctgaggaatttcatcaataccagatctgtcttacaa
-gaaatgcccatgggagttctccaacctgaaataaaaggacattaactaacaacaagaaat
-cgtctgaaggtataaactcactggtgatagtaagtacacagacaaatacaaataccctaa
-cactgtaattctggcatatgaaccgttcatatctttagtagaaagactaaaagacaaacc
-aatcaaaaataataatgacaacaactttttaagagattgtataaaaagatacagagacaa
-taaaaatcaaaaagagtgtagagtgtagagtggttgtctctttgcttgttagtctgtttt
-tcttttctttttaatcaggattaagttgtcatcagtttaaaataagtggttataagatgt
-tatttgcaagcttcatggtaagtacaaaacaaaaacctgtaacaaatatgcaagaaatta
-aaacatactaccacacaaagtcaactttacacaaagaaagatggaaggaagggagggagg
-gagggagggagcagggaagggaaggaagggagggaagggagggaatggagggaaggagga
-aaggagggaaggagtgagggagggagggaaggagtgagggagggagggaaggagagagga
-gaaaaggagggagagaggagaaaaggagggagagaggagggagggaggaaagggagggaa
-ggagggaggaagggagggaaggaaggaaggagggaaggaaggaaggaaggaaggaaggaa
-ggaaggaaggaaggaaggaaggaaaaagaggaccgatgaagcaaccagaagataaatttt
-taaatggcagttgtaagtccttatctattaataagaacattgaatgtaaatggactgaag
-tctccaatcaaaagacatagagtggttgaatggataaaagagcaagacccaactacatgc
-tgcctatgagaaactcacttcacctataaagaaactcatagactgaatataaaggaatga
-aaaaagaaattctatgcaaatagaaaccaaaaaagaagttattatacttatatcagataa
-aaatatctttcaagacaaaactgtaaaaagagacgaaggtcgttgtttaataataaagga
-gtcaatttttgcaagaggatataacaattataaatatatatgcacccaacactagggaac
-acagatatataaagcaaaaattattagttctaaagagagaggtagaccccaaaacaataa
-tagttagggacactaacaccccactttcagcattggacagatcatcaagacataaaatcc
-acaaagaaatatcagacttagtctgcactataaaccaaatggacctaacagacatttata
-gaacatttcatccaacagccatggaatacacattattttcctcaccatatgaacattctc
-aaagataaaccacttgttaggccacaaaacaggtctcaaaagaatctaaataattaaaac
-catatcaagtatcttttatgaccacagtggaataaaagtagaaatcaataacaagaggaa
-ctttgaacactatacaaacacatggaaattaaaaaacataatcctgaatgaccgttgggt
-cattgaagaaattaagacagaaattttaaaatttcttgaaacaaatgaaaatggaaatac
-aacattccaaaacctatgggatacagcaaaagcagtactaagagggaattttatagcaat
-aaatgtgtatatcaaaaaagtagaaaaaatgatcaataaagcagtctCAGTATCAAAAAT
-TATGCCATATGTCATTCCCTTCCCCAATATAGAAATTATTTAGAAATCAATAAcaaaaag
-ttcaagaaaatgtatattatgaaaaaaatcatgtaagaatttcaaaatgttttgcaccaa
-aataaactaatactaactggttataaaatgtttgaacaagatctagtttcagacactaaa
-aaagataagacatcagtctgaaaagagcccctatcagagcaacatgaattctgctaaaat
-tgaagcaagaacaaacatcaaatgtacagtgaagcttgggtagaagaatgatgaaatcat
-tgatgctttacaaaaagtctatgggacgatgccccaaggaagtcagcagtttgcaaatgg
-ataactcattttaataagggatgagataatattgaagatgaagccaccagcagcagacca
-cccacatcagtttgggaggaaaaaattaatcttgttcatgccccagttgaaaaggactga
-taattaacagtaaaaacaattgtcaacatcatagacttctcagttggttcagttaatgga
-aatctgactaaaaaattaaagaagaacaaactttccacttgatgggcgccaaaaccattg
-tgccaaaatcagctacaaacaagagcacagctttcaatgaaactttaaacaagtgggatc
-aagatcctgaagcatttattcaaagcactgtaacaaaagttggaatctggctttaccagt
-atgaccctgaagacaaagcaaaatcaaagcaaagagatggaagtgatccagtccaagcaa
-aagctgaccagttaagaacaaaagtcatgtcaacaatttttgggggtgcacaaggcattt
-tgcttgttgactttctggagggccaaagaacaataacatctgcttattatgagagtgttt
-tgagaaagttagccaaagctttagctgaaaaatacccaggaaaacttcaccagagagtcc
-ttctccaacatgacaatgctcctgctcattcccctagtcaaacaagggcaatttttcaag
-cgttttgatggaaagtcattaggcatccacattgccatcctgacatggctccttttgact
-tctttttatctcctaatcttaaaaaaaaatctttaaaggacaccaatttttcttcagtta
-ataatgtaaaagaacactgatgtggttaaattcccaggaagctcagtccttcagggatag
-actaagtggctggtaccattgcttacaaaagtgtcttgaacttgatggagcttatgttga
-gaaataaagtttatatctttatatttttatattttaatgtcatcttccacaaactgtttg
-aagttccctcataactaaaatgtccccacatgctcagataagaaacacatttctcaacca
-atgtttctcagatattaaagtacatacaaatcacctgaggatcttcctaatacgcagatt
-ttgattgactcattctgagatgaattgaaatcctgcatttctgacaagctctccggaagt
-gttgatgcttctggtctttccaccacactgtgaatagcaaggttcaaactaattcatatg
-tcagaaaagatgacacagtggaaattgaagtgtttatttttaagtgaatgattatgataa
-caaaacactgcaaataaaaacttatgaagtccagctaaagctgcatataaagggaaaatt
-agagtcttacccacttggttatactgaagaaaagctgaaaatgtatgagataacaacaca
-aataataagttagaaaacaataacagaataaaatgaaattttattcaaagaagttcaaag
-aaaggaagataaagctgagaggagaaaataattaaatattttttaattttcataatattt
-aaaataaaatataattaaataaaaatcaaacatagaatcaacaaaaccaaaagctgattt
-tgaaaagaccaattaattaattcactataggaataacaaagaaaaaattgaaaacacatt
-acccatatgaagaataaaacacgtagccatcactacaaactctatagatagtaaagagat
-caaaggacatattgtgagtgaccttatgccaaaaatgaaatttagaagaaataaacatta
-cttgatgtgacccaagaagaaattgaaaatttgacagttctaaattgttagggaaattaa
-atctTAAATCTTTAAACTCAGTTGAGTTTTTCTGCTACATTCCAATGTCTGATCCCTAGC
-TCTATGGGTTTCAACAGACAGTTGTAGAAGCAGCAGAAAAATATCCTTGCTCTTATATTA
-CAGCTACCGTGGTGTGTTCTTGAAGTCCAGCATGTCTAATCATGGGATCCTGTCACCCTA
-CTTTCCTGACTATGAAAGAACTAGCAGATTCTCTGCTGGGCCAGTTTGTTGGAATGTTCT
-GGAAGTCATTCTGGGAGACCAAGCCCACAGTCAGCTTCTGTAGAGAGTTTATAAGCACAT
-AATTCTGAGTATTAAAAATATTTCTGTTGAAAATAGCTAGTGTTTTTCATTTCCCAACTG
-ATACACATAAATGCAACACTTTGCACATGTGAATAATTTGTCTTTTTACAAAATTATGCT
-ACACTGTTGATAGATTCATTCCATATATACATGCAACATACTTAATTTTTCATAACTTTC
-CAATTCTTATTAACTCAACTTTTTGTTCCATAATAACTGTGCTTCTCTTTGTACCAGTAC
-TTTCCATATTCTTATTGCTTTGGGACTAGCAAGACACAATGAGGTGAATAATGTTATTTC
-AATGCATCTTAAAACACCAGAAACCAATTAATATGCGATATTCAGGATTAACTGATTCCA
-AAGGGCTGTTAATTCCATCTCTTGATATTGACAAGTAGTAAGTAAATATGCCTAAGCTTG
-ATTATTTTTGTTCATAGAAGTAAAATATACATTTCATAAAGTGAAAGTTCATAAGATTTG
-CTTTTATTGTTTTAAAAAATAACAGTTAATTTAAACAAAACTGAGGAGTCATTGGATACT
-ATAGTAGCTAATGAAATCCTAAGAAGACATGAATTTCAGGAAGGCGAGGAACCAGGGAAA
-CTCTTGAAACTTGAACAATTAATAATATTCAGAGCCAATGAGCTTCAATATCTGAGTTTC
-TTAGGAAATGTCCCAAATTAGCAGGGGAAAGCATCTGATTGGTAGGCTTGGTTCTATTGT
-TACACCTGGATCAATCAGCTACGACCAAGGAATCTGAGCAGTACACTATAAAAATTGCTG
-CTTTTaattatttcaaccattgtggaagatagtgtggcaatccctcaaaaacctaaagtc
-agaaataccatttgacctagcaatcctattactgggtatatgcccaaaggaatataaatg
-gttctattataaagacacatgcatgcatatgttcactgcagcgctattcacaataacaaa
-gacatagaatcaacccaaatgcccatcatttggccatttggataaagaatggataaagaa
-aatgtggtacatatataccacggaatactatgcagccataaaaaagaatgagatcgtgtc
-ctttgcagggacatggatggagctggaggccattatccttagcaaatgaaggcagaaaca
-gaaaaccaaatactgcatgttctcacttataggtgggagcaaaatgatgagaacacatgg
-acacacagaggggaacaacacacactggagcttactggagagtggaaggtgggaggaggg
-agaggatgaggaaaaataactaatggacactaggcttaatagctgggtgatgaaataatc
-tatacaaccaacccccatgacacacattacctatgtaacaaaccagcacatcctgcacat
-atacccgcgaagttaaaaaagttTTTTTTTAGTTGCTACTTTAAAAGGATGTGGGAATCA
-TTGTAAACTCAAAAGTTAAAGATGTGCCAAGAGCTGTCTCCCACGAACTTGTTTAACAAA
-CGTACTGACTTTGTATGTTGATCCAATACCCATGCTGGCCACTGGACATACCAGTACAAA
-CAAGGCAGAATCTTCACTCTCCTCTAGCTCTTCTAATTCTCATGCACTAAGTGCCAACCT
-TAGCATAACTGGGCTGACAATCAGTGAATCAAATATCTAACTCTTATCCTACTCCAACGT
-TAAGAAAGAGACATGCgactgggtgcggtggctcatgcctggaaccccagcactttggga
-ggccaaggtgggcggatcacttgaggtcaggagtttgagaccagcctggccaacatggtg
-aaaccccgtctctactgaaaatacaaaagttagctgggcatggtggtgcatgcctgtagt
-cccagatactctacttgggaggctgaggcaggaggattgcctgaacctgggaggcggagg
-ttgcagtgagtcgagatcacgccactgcactccagcctgggcaacagagtgagactccat
-ctcaaaaaagcaaaaGAGAGACACATGCAAAGGGCTTGCTCTTTCTTTCTCATCTTACCT
-ATCTTATGTTTTCCTCCAGGATCAAGAGCAAGGAATTTGTTGCATAGAGGTGTTCAAGAA
-AGGGTGTTTTCAAACAGAGTCAGAAAAAACACAACTATACTGCGAGCAGCATACAAACCT
-GCTTTGGCTGCACTTCACTGCTCATGGCATAAGGCCACGAAGAGGCCAATAAAGGCTGGA
-GCTCAGGAGCATCAACCCAGATTCAAGGCTTCCTCTCTGGCACCCAACCATGAAGCTCCT
-TTTTCCTATCTTTGCCAGCCTCATGCTACAGTACCAGGTGAACACAGGTAATGTGGATTC
-CCAAGTTTAAGATGGGTAGATGAGAGGAACCAAGGATTTGGCTGCCCATGACAATGGAAA
-CCCAAAGAGAGGAGACTGAAAGATTAGCTGTTCAAAAAGATGGCTAAAGAGCTTACCTAT
-TGTATCAGTCATGCACTGATACATTCTCATAGGCCCCAACTGCCAGATTGTGTCCAGTGG
-AAACACCCAGGAAGCTACAGAGAAAGCAGGGTATTTTTTGTCTATTCAGAAACTATCCAA
-AATATAATGCTGCCTTCCTGCCCTGTATATGTCTATCATGCTAAGACTAAGCCCAGGTCT
-ACCTCCTTTTAGCTCTATTTCTATCTTAAAAGCCCTTTTTTTTTAAAAAaagtcctgggg
-tacttgtgcaggatgtgcggtttgttacataggtaaatgtgtgtcatggttatttgctgc
-acctaccaacccatcgcccaggtattaagcccaggatgcattagctatttttcctgatgc
-tctccctccacccaacaggccccagtgtgtgttgttccccttcctgtgAAACCACCTCTT
-GAAGCAAAGTTTCCTATCAGTTTGTGCTTGGTGTAGAAAGGAGGAAGTTCTTCCCTCATG
-CTCAAAAAAAAACCCTTTCAAGATCAAGTAAACAGGCCTGTGTTCTCCATCTTGAATTCT
-TTCAGGTTTTCCAGAGCCTTTATCGCTTCTCTCAGACTTTGTCTTCCTGAAAACCCCCAA
-ACTACCATAAGGGCATCTAGGAATGCATTATAGCAAAAGGCTAAGCCAGGGGATTAACCA
-TTGTTTTTGGAAAAGAAAGGAGAAGCACTGAGATTTGTTTCAGAATACAAGAATCATCCA
-GCTATTTGAAAAAATTAGCAAAGGGTTTCGGGGCAGGGAAAGTGGAAGTGTCAAAGATGC
-TTCTAATGTTTTTATCTTCTAATGTTTTTATCTTGGGACCCTAGGAAAAGGGTAGTACCA
-TAAGCAAGTAtggctgtgtcatcttgggtaaagtcacttaaccactttgaacttcaattt
-cacatgagtataatggggttaatcaatgcAGCTGATTCCAATATAAGAATTTTTCTGTTT
-CCCGTTTGATGAGAAAACAATGTGGAAATGTATGCAAATATGCTTTGAAAATTAGCAGAT
-GCTACATAAATCTCTTGTAATTTAGGGAAAATCATTGGGTTATTAAGATGAACAAGGGAG
-AAAAGCTTTCTTGATTCAGAAAAAAGAAACACGAGACATTAGGATGGAAAAGTCATTCAG
-CAGATAAAGATAAGGTACTAAGCCGAGCAGGAAATTTAGAATTATAGATAACAATACAGA
-AGTTACCTTGGTGGATATGAGGTTAAGGCTAGGATAATGAATGAGACTTCTGAGAGATAG
-AGTGTCCAAAGAGGCTAGAAGAGATAGAACACCATGCTTCAGGAATCACAGATCTAGTGA
-TTGTTGAGAAGAGAGAAGTCATGGGCTACTGAGTTTGGTGAAAAGATAAGACTCCTGAAA
-ATTCTATTGATTCTCTTTTGAACTTCTTTCTTAAATTAGTTTTATGATGGACTTGGCTCT
-CATTGGTATTTCCCAAGATTATGGAGATGGGATAGTGATGTCTGACAAGTACCTAAGATG
-CTAAGTTGAAGGTCTAAAATTCCATCCTAAAAGCAAATAATTACTCTATCATCTACGTGC
-CCTTTGCTTCTTAAAGTTACTCAAGGAAGGCAGACTAAACAGGAAATTTACTTTGGATTC
-AAGAGGGGCATAGAGACGCTCTCAGCCTGCCCATTTGCCTTCATCAACATTCCTAAACAC
-TGGGCTTAAAATGTAGTATGAGTAAACTCTCTCTTAGTCTATCCATCTCCCACTAGCAGT
-TTTAACATCATCTCTAGTTATTAACCTTGGCTCAATGGCTTTCTCTTTTTTTATACAGAA
-TTTATTGGCTTGAGACGCTGTTTAATGGGTTTGGGGAGATGCAGGGATCACTGCAATGTG
-GATGAAAAAGAGATACAGAAATGCAAGATGAAAAAATGTTGTGTTGGACCAAAAGTGGTT
-AAATTGATTAAAAACTACCTGCAATATGGAACACCAAATGTACTTAATGAAGACGTCCAA
-GAAATGCTAAAACCTGCCAAGAATTCTAGTGCTGTGATACAAAGAAAACATATTTTATCT
-GTTCTCCCCCAAATCAAAAGCACTAGCTTTTTTGCTAATACCAACTTTGTCATCATTCCA
-AATGCCACCCCTATGAACTCTGCCACCATCAGCACTATGACCCCAGGACAGATCACATAC
-ACTGCTACTTCTACCAAGAGTAACACCAAAGAAAGCAGAGATTCTGCCACTGCCTCGCCA
-CCACCAGCACCACCTCCACCAAACATACTGCCAACACCATCACTGGAGCTAGAGGAAGCA
-GAAGAGCAGTAATGTGGATCTTTCCCTTAAAACTCCAAGTTCCTCTCTATTTTTGCTATC
-TATAAAATGACATAGAACTGTTTCCTCTGTCATCAGTCATTCAATAAACACTGTTTGAGC
-ACCTACAGTTTATGTAATATTATCATTCTCACAAGAGCCTCACAGAGGGGGTAGAGCTAG
-GGAGGGATGGAATTGTTTAAGTTTAGATGCCCAGGAGAAAGTAAGCCTCAGGAGGGTGAC
-TACAGCATCGAGTTTGTCCCAAGCATGGCCTAGATTAGGCCTCTGTAGCAAGCATTTATG
-TCTCTCATATGGTGTGTTTTTCCTGGAGCAACAGTAAGGAAAGCATCAGGAGATGTATTT
-TCTTTTCTCATGTATTTGGGAGGAAAGGCCCAAATGCAAAATAGAATATGTAGGAATCag
-aaaaaggttaaattaattgtaataatatatttttgtttcgttttgttttgagacggagtc
-tcactcagttgcccaggctggagtgcagtggtgtgatctcagctcactgcaactccacct
-cccgggttcaagcaattctcctgcctcagcctcctgagtaaccgagattacaggcgcaca
-ccaccacacccagctaatttttgtatttttagtagagacggggtttcaccatgttggtca
-ggctggtctcgaactcctgacctcgtgatccgcctgcctcggtctcccaaaatgctggga
-ttacaggcatgagccaccacacccaaccaataatgtgttttattgaatgcaatatatcca
-aaacatgatcatgttgacatgtaatcaatgtaaaaattatttatgagagagtttaccttt
-tttggactacatctttgaaatctcatatgtgtaattacacatagagcacatttctattca
-tactagccacatctcaagtgctcatagtcatatatgaatagaggatttcatagcatattg
-aacagcAACAAGGCTAGAGAGTTTTAGGGCACAAGTAATTATAGTGACTCTTAGGCATAG
-GGGATGCCCCTAATCCAGAGGAGACAGGCATATTTCTGAGGGCtgtggcatataatttaa
-gagtatagaaattcaggtctgatatgcccggactagcatcctagattctggcacttttta
-gctgtgtggtcttgaacaaatcatttatccacacataagcatcagtttatttattcataa
-aatggagatGTGAACATTATATTATATCCCAGAAATCAGCAATCTCAGATCACTCTTCCT
-CTTATTGCCCAAATTACAATGGCACAGCCACCTATTCTAGttttttaatagctttattga
-agcataattgatatacagagaattgaacatatttaatgtgaataatggcatgagtttggg
-catatgcaaaatcctgtgatactatcaccacaatcaaggtgatagacgtatacatcacct
-cccaaagtAacatgaccatatttgtagaaaaccctgaaaacttcacgaacacacacacaa
-aaatgtagaactaagaaatagattcaaaaaagtcaacatacaaatatcagtggcatttct
-atacacttaacaatgaaccattccaaaagaaaatcaaggaaacaatctatttacaaaagc
-aacaaaaagaataacataggaataaacttaaccaaagaagtgaaagaggtacattaaaaa
-cttaaaaatattgatgaaaaaatcaaaggaaacacaaataaatggaaagatattccatgt
-ttaggtattgaaagacttaacattgttaaactgttcattctgtctaaagcaatctacaga
-tataatacatctccccccttccaaatcccaatggcattttttaaagaaatggaaaaaaca
-atcctaaaattcacagggtaccataaaagacccagaatagcaaaatcaatcttgagtaaa
-aagaacaaagctgaaggcatcacactttcttatttcaaaatatattacaaaggtatagta
-attaggccaggcgcagggactcacgcctgtaatccagcactttgggaggccgaggcgggc
-ggatcatgaggtcaggatatcgagaccatcctggctaacacggtgaaacctcgtctctac
-taaaaacacaaaaaacaaaaaatagccgggcgtggtggcgggcgcctgtagtcccagcta
-cttgggaggctgaggcaggagaatggcgcgaacccgggaggcggagcttgcagtgagccg
-agattgggccactgcactccagcctgggcgacagagccagactctgtttcagaaaaataa
-ataaataaataaataaataaataaataaataaataatggtgttgggaaaactggctaccc
-acatgcagaagaatgaaattggatccttatctcaccccatataaaagaaatcaactcaaa
-acggattaacgacttaaacataagacctaaaactgtaaaactactagaagaaaacacagt
-actgttctgtatttaagctccatgacatcgttctgggcaatgatttcttgcatatgaccc
-caaagcacaggcaacaaaagtgaaaataggtaactgCATCCAGATTTTTTAACATATTCT
-TCTCTGCTACATATCACCTACCTCCATTCAAAGGTCACCTTTCCCCATCCTACTCATTTT
-TTAATACAGTGTCACTCTAAGAAAGACAAAGATTTTTCATGATGCCCCACAGTGATTCTA
-GAATATAACTAAAAAATATTTTCCTGGAAGTTTTTGCACAACAGAAAGGAGTTGCAATAC
-AAAGCATAAGTTTAACACCTGCTAGATATGTGTTCTCTGAGGAACCCCAAGCCTACCTGA
-TGGGTGTCAGATTCTCTCCCTGCTACAGCTATTTGTCAAACTCTTGAAAGTCCAGCTTTC
-CTTCCCATGGAAGGAAAATTCCCACGGAATGCTCTCTTCCGTGTTTACCCACAGAAAGGA
-GAGAAAGGTTCTTTCTCACACAAGTCTAAGGCCTTCCTCTAAGTCACCTTTTCCTATCAT
-AGAACTCACCCAGCACTTCTCAGGATAAATGATACTGCAGAATATGAGTTTGCTTCAGGG
-AAATCCCATACCCACTGTGAAAAATATGGTAACTctccaatatcagttctccccctttgc
-taagtaatagaaccctccaaatattaggttgacacaaagccgaccagagaaaaggctgaa
-tttcccaTCTAGAACTGGTCATTCTTCAATTCAGACCAGCCATAACTGGACACTTTTGCA
-AATATTCATTAATAGTCTTGGTGAAAACCTCAGATTTCCATTTTGCCAAAGTTTCCAAAG
-GAAAAGAGGGCCTTTTTCTAAGCCCTGAGAGCCCCACAGTGACAGTAAGTTCTCCCTTGG
-AATTCACCCTGGCATACCTCGGTGCTACCCCAGATCCTTTCCCTCAGGGGCTATGAGATT
-AGGTTTCATggccgaatgtgacggttcatgcctttaatcccaacactttgggaggccgag
-gcaggaggatggcttgagcccaggagtttgagaccagtctgggcaacatcatgagactct
-gtctatgtaaaaaataaaaattaaccaggtgtcatggtacataactccagtccctgctac
-tgtggggcaggggctgtgggggctgaggagggaggattgcttgagcccagaaggttgagg
-ctgcagtgagctgtggtcgtaccactgcactccagcctgggcaacagagcaagaccctgc
-cttttaaagaaaaagagaaaGGAggttgggcatggtggctcatgcctataatcccaccac
-tttgggaggccgaggcaggtggatcacctgaggtcaggagttcgagaccagactggacaa
-catggtgaaaccccatttctactaaaaatacataaattagctgggtgtggtggcgggcac
-atgtaatcccagctactcaggaggctgaggcaggagaattgcttgaacctgggaggcgaa
-ggttgcagtgagtcgagattgtgccactgcactccagcctgggtgacaaaagcaaaactc
-catctctaaataaataaataaaaataaaaaaGAGAGAGAGTGAGATTAGGACTCACCCTG
-GCCATCCCAGGTCCTGCCACTCCAGGTCCTGCCACTCAGGGACTGTGTGACTCTATATTT
-TTTTTAACTTCTCAGGCCAATATTAGAACCCAATCTGATCAAATTAGAAACCTATGAACA
-TTCCACTTACTAGCAGTGCATTCATGGAGCACTTCACAGGGAGTCACCAAAGTATCAATC
-AATCAATAAACTACTACCCTACCCTGAACTAttaggttggtgcaaagtaattgcagtttt
-tgcattgttggaatttgctgtttgatattagaatgcgttcttaaataaatgtggttatgt
-tacactttttttttttttttttttgagatggagtttcgctcttgttgcccaggctggagt
-gcaatggtgtgatcttggctcaccgtaacctcctcctcccgggttcaagctattctcctg
-cctcagcctccctagaagctgggattacaggcctgtgccaccatgactgactaattttgt
-atttttagtagagacggggtttctccatgttgatcaggctggtctctaactcctgacctc
-aggtgatgcacccgcctcagcctcccaaagtgctgggattacaggcatgagtcactgctc
-ccggcctatacatcattttaataggcatttctcactttatgttttttgataatgacttat
-tacttgctgttgattttatgtttattttagactatggaaatgatgtcagacaaaaagaaa
-attcaagcgattttcttattcaagttcaaaatgggtcgtaaagcagcagagacaacttgc
-aacatcgactgcgcatctggtccaggaactgctaacgaacgtacagtgcagtcgtggttc
-aaaaagttttgcaaaggagaggagaacctcgaagatgaggaatgtagtggccggccgttg
-gaagttgacaaccaccaattgagagcaatcattgaagctgatcctcttacaactatacaa
-gaagttgctgaagaactcaaccttgaccattctatggtcgtttggcatttgaagcaaatt
-ggaaagatgaaaaagctcgataagtgggtgcctcatgagctgagcaaaaatcaaatcatc
-attttgaagtgtcgtcatctcttattctacgcaacaatgaaccatttctcaattggattg
-ggacatggcaatgaaaagtgtattgtatgtgacaacctgctacaagcagctcagtggttg
-gaccaggaagctgcaaagcacttctcaaagccaaatttgcaccaaaaaaaaaggtcatgg
-tcactgtttggcactgtgatccactacagctttctgaatcccagcgaaaccattacctct
-gataagcatgctcagaaaatgagatggaaatgagatgcaccgaaaactgcaatgcctgca
-gccggcactggtcaacagaaagggcccagttctttacgacaaggcctgacctcatgttgc
-acaaccgacacttcaaaagttgaatgaattgggctacgaagttttgcctcatctgccata
-ttcacctgacctctcgccgatcgactaccacttcttccaactttttgcagggaaaatgtt
-tccacaatcagcaggatgccgaaaatgcttccaagggtttgttgaatcccaaagcacaga
-tttttacactacaggaataaacaaatttattcctcattggcaaaaatgtgttgattgtaa
-tggttcctaatttgagtaatcaagatgtgtttgagcctagttatagtgatttaaaattca
-cggtctgaaatcgcaattacttttgcaccaacctaaTATGTATGCAGGTGAATTCTGTCT
-GTCTTTGCTAAGCAGTGAGGTGATCCCGTGCTTAATGATGTTACTGCAAGCATGACAGCG
-GATAGAAGCGGGGAGGGCCAGTGATGAAGATAACTATTAGAGAGGGCATCCCAGTTGATT
-AGAAGCCCATCCCTAACTAACTACATCACTTCTAAAGGCCTGATTTCCAGTCCAGAACTA
-CTTTGAAAATGTTGTTTATGAACTCAAATTGTTAGTTGTAAAAATTATGAAATGAAAGAC
-TATTATGAGCATATATAAAATAAATTAGCCAGTAAATAACCTAAGATGATGAAGAAAAGA
-GCACTAAATAAAACCATAAATAAAAAGTTGGGAGCTTGGTAATGTCCAGAAAAAAATATA
-TATTTACTGTAACAAAGCAAAGGCCTTTTGTTAGTACATGAGACTCAGAATGCCTTAAGG
-AATGTGCTGGGCTCTAGAGGGCAGGGCAGGCACACAGCAGCTGGCACTGTTTGTCCAGAC
-TCCTGCCTGGACAAGTTGAATTAGAAAAATCCAAGCAAGAAACAGTGTCACTACTGGCTT
-CCCTGCTCTCTACTCATCTGCTCAGAGAGCTGCATGCTAGTTTGGCCTGTCCTGCACCCG
-TAGAGGACAATAGGTTATCTACATCCTTCACCACTAAGTGAGCCAatgggctgaactgtg
-ttcccctcaaaattcatatgctaaagccataacccacaatgtcactgtatttggaggtaa
-agcctttaaagaggtaattaaggttaaaagaggtcatatgagcaggatcctatccaacat
-aattggtatctttgcgagaagaggaaaagataccaaggatatgcatacacaaagaaaagg
-tcatgttagggcacagcaagaggtcagccatctgcaagccaaggaaggaggtctcaggag
-aaaccaaacctgccagcaccttgatcttggacttctcgtcttcaggactgagagaaaatg
-agtatctgctgtttaagccacacaggctgtggtattctgcgatagcagccctagactaat
-acaGGCCATAAAAAAGATAATATCCTTTCTTCCTTCTTTCTGAGCTCTGGGTAAATGGAG
-GTCAGATAAAgccaggtgtgatggcacatgcctgtattacccgctactcaggaggctgag
-acaggaggattgcttgagcccagtagttctaggctgtagtacactgtgattatacctgtg
-aatagccattgcactccagcctgggcaacatagtgagaccctgtcccctccccaaccaaa
-aaaaaaaaaagaaaGGAGGAGGGGGAGGAATGAGGTAGGAACAATAGGAACAACAGATGC
-tttttttttttttttttttttgagacagagttttgctcttttcacccaggctggagtgca
-atggcgtaatctcggctcactgcagcctccgcctcccaggttcaaacgattctcctgctt
-cagcctcccgagtagccaggattacaggcacccaccaccatgcctgactgatttttgtat
-ttttagtagagatggggtttcaccatgttggccaggctggtctcaaacacctgacatcag
-gtgatccacctgcctcagccttccaaagtgctgggattacaggcgcgagccaccgtgccc
-ggccAACAGATGCCTCTTAAAACACCCTGAGCCTCTGCCTTTATTCTAAATTTGTCAGTC
-ACAGGCCCGGGAGAAAGCTGAGCAACTTCAATAGGATTTTTAACTCAAATCTAAGACAGA
-AGTTTATATAAAGTTGTAGTCAGACTCGGCTGTGTTCAGAAAGTATATTTCTTCCATTGC
-TCAGCAATTATTTATTAGCATCTATTCTGGTCTCTGGGCAAACATTAAGGACTAAGAAAT
-GAATGAACTCTAATCATTTTCATTCTTTAAAAATTGTGCAGCCAAGAAAGAGAAATAAAT
-AGGCAAATGACCACATAACAGCAAGACATGTATAGTGAAAGTCATGCTCACTGCAATAAA
-AAGAACCTCTAGCTCTGAGTGAGGAAGGGGGAGTGGGTGCTGAGGTTGTGGGAAAGAGGA
-AGCGTGGGTAGAGTGAGGCAGACTGCTGTGGAGTGGAGCTGTGGGAGTGGCTTAGAGCTT
-GCAGGAGTAAGGGAATGAGGTGAGAGTGGAGGAACGGCAGAGTGCATATTCTCAGTTGCC
-AGAGATTCTGGGCAGCTTCTTTCGATCTTTGAGGATTTGGGCAGGAAAGGGTGAGAAAGG
-CCCATCTAACAATCCTGCGCTTCATAATCCCCTGAATCCTTGAAATTATTACTAAAGCTT
-AATGCTGGGAAAGATCTCTGATTCCCCTGAATCTGATTTGGCAAGCCAATCAATCATTTG
-TGTTAATTGGGAAAGAAATCAAATATTTCTGTGTGAATATACTCATCTCAAAACATTTTC
-AAGATAAAGTGTTTTACAAACTATGCTTCTGAGTCAATAGGATTCAGCTGTTTCGTTTTC
-ATTTCAGCAACTTAGAGGAAGTTTATCTTCAGAAAAAATTGCTATAAGAcacttcctata
-agccagccctgtgccaaattatttacatgaatcaccttctctagtctttaaacagcccta
-ttatgaatggacaattatctcaatttgacagatgatgaaactgaggcttgaagagattaa
-gttacctaagatcacacaATATGCCTCCAAAATTCGAAGAGGGCCGAAGGTTGTAATTGT
-GCAAGAAGAAGCAAATTTTCTATCTCTTTGAACCATAGACTGTGGATCCACTGCAACCTT
-GCTGAAATGGAAGTCTTTGTTGTTTCATGGGGGTTTTGCTGAATCTTCTGGCTTGTAGCA
-AGAAACTACTTTATCTTCACCAGATCTTATCAGCACATTGTATACCTGTGTGATACTCTG
-TGTGCTAATAAAATTATCAAGCTTCCTGTGGGTCCAAATTATGGCAAAAACGTAAGACAA
-AATGAtaatcccagcactttgggaggccgaggtgggtggaacacaaggtcaggagttcaa
-gaccagcctggccaacatggtgagacccccgtctctactaaaaatacaaaaattagctag
-gtgtggtggtgcgcacctgtagtcccagctactcaggaggttgaggcaggagaatcgctt
-gaacatgggaggcggaggttgcagtgagctgagatcacaccactgcactctagcctgggt
-gacagagctagactccatctcaaaagaaaaaaaaaaagaaaaaGCACACGACTAGTTATC
-ATAGATACTGTTGGCTACTGTTTCCTCTCTGTTGTGTGGGTCTGAGCAAAGAGAGGGAAT
-GGGATGCACCGTGCTTTCAGCTCTCTATAGTCTCTTCTGGATTTCAGTGTTTCAGCACAG
-CCCTAAAAACTACCACATGATTATGCCCCACGTAACAGTCAGATCACCTTGTCTCTAGAG
-AGACCACGCATCCATAACGAAGAACCTCTTATAACCATGGGTTCCACATCTTTACGGCTT
-AATCACTGATGCTCTCAGTGAACCTGAAAATTGATCCTGCTGAACAAGATCAATAAACAG
-AGTTTTGATTCAAAGGCAGCCCAATGAGTTAATAAGTGCTCCATGACAATGCCAAAGAGG
-ATTAAGGAAAGAATAGCAACCTGGAGGAAGATGTATAGAAAAGCAGAccaggtgcggtgg
-catgcgcctgtagtcccagctacccaggaggctgaggcaggtgaatcatttgaacctggg
-aggtggaagttacagtgagccgagatcacgccactgcactccagcctgggagacaaaacg
-agactctgtcaaaaacaacaacaaaaaaaaaCCAATATTAATAATGCAAATATTTGAGtt
-acagggcatttttaagagccagatacagtactgggaaccttgagtatattatctcattta
-gtccttaaaacaaccccatagactttatataaataatacaactgaaagtttaacttaagt
-tgctgaagttcacagataagcagtagaatcaggattggaacccatgtctcatcatatcag
-agaccctacgcttaagtgctatgctTCCTTGACTCTCACTGGCAACAGCTTTGGTGCATG
-TACCTAATGCCAGTTATATCATAAAGGATCTACATGGATAAGCTTATTTCATACTCTTAG
-AAATGGTTTGGAAGAggccaggcgtggcggctcacacctgtaatcccagcactttgggag
-gcctaggcaggcagatcacgaggtcaggagatcgagaccatcctggctaacatggtgaaa
-ccccatctctactaaaaatacaaaaaattagccaggcatggtggcatgcacctgtaatcc
-cagctactcaggaggctgaggcaggagaattgcttgaacctgagaagcagaggttgcagt
-gagccaagatcacgccactgcactccagcctgggtgacagagtgagacttcgtctcaaaa
-aaaaaaaaaaaaGTTTGGAAGAAGCTATAGAAGTCTCGATATTACTGGTGACCCAGTATA
-AGGAGGAGTGGTGAATATCCCTATTCTAAAGGATTTCCTAATCCTGAAGGATTTGGACAG
-CTCCTGCAATTGCCAAATGTAAGCGGCCTGAAAAGTTCACACTTAGATTATTGCCTTTAT
-TTTTGGCTCCCACACTGTAAAAGAAATTAGAATTAGAGCACAGATACAAAAGCTATGATA
-ATGAAAGTCCTAAAAAAAATTCCATTAAGAAACACACACATATAAGTCAGAAATTCATTG
-GGAATACCTTTGCATTTTAAGAGATGAGAAGGAAAGAGTTAACAGTAGTCCTGAAATCAA
-TTCTCTCCCTTTAACAGGAGATACTTCTGGCAGGAAAGAAAAAAAAAAAAAAAAAACTTG
-ACTCTGACTCTGTCAGATCTCCTTATAACATGCTAATAAGAGACCTTCTGGTAAATATGC
-TAATGATATTCACTAGCAGAGGGGTCTTTATGTAGCAGAATGCATCTGCTCAGTCCTCAA
-TTGCTTCTGGTAAACAAACTTAGAGTCTATGAATTTACAGGGCATGGCTCCTTGAAAAAT
-GTCATGTGTTTGTAATGCTAAGTAATTGCCAGAGAATAAAATGGAGATGTTTCTAGCTAA
-AATAGCCCCTTTGGGTAGCTGATGGGCACCCATGCATCACAGACATCACTTAGAGATCTT
-TCATGTTAAACCTATCCCATGGCTTATTTTCATGAGGCAAGAAAGGACCTGGGAAGTGGT
-GTGGACATCCCAGACTTTTGCATTTTTACCTGCTTCGTAATTACCCGTATCCTTGAAATT
-ATTACTAAAGCTTAATGCTGGGAAAGATCTCTGATTCCCCTGATTCTGATTTGGCAAGCC
-AATCAATCTTTTGTATTAATCAGGAAAGAAAGCCAATATTTCTATATGAATATACTCATC
-TCAAAACTTTTCAGAAAAGATATTTTCCATACATGGAAATAGCTTAATTAACtttttctg
-attatgaggttacttatagtcattttgaacactcagacaaaacagaaaactttatggaag
-ataaaataagaataacaaaatctttcccaaagagaaagaccattaaatttttgtatatat
-ccttccagagaatacacaaattatatgtatatatattttacatgtatacatatataacaa
-agactagcttatactacccacgctttcctgtcatttttcttttctacctaagatatcact
-gacagtcttttatataataaggatagtcctcaattatcatcattgtttaaatggaattct
-aatgtgttaagtgccataaattagcagattctctattgatagacatttagcttacttttc
-acattctcactatgagtaatgctAAGAAGGCAATATAGTTCTTGCACCTTCATGAACATA
-TTCTTTTATGCTATGTGCATTATTTTGGGTCAAAGGGCAAGCAGAGTTTCATTTAATTTT
-GTTTTAGACATGGGCTATATATTGACAAATTGCCCTCCCAGGAACAGTACACAGTTTTTC
-TTATGTTGCCTCACCCATGCCAGCAGTAGCTAGAAAATGCATTTCCAAAGACTGGTGCTA
-ATTTTCTGTGCATTCTGTGAGTGCTCAGTCAATTTAAGCAATAACCACTTAGAGTAACAA
-AATCTATTCACCCTAATAGCAGAGATTTCTACTTCATCCCTGGCTCACTGCCCAACTTTT
-GATCTCATCTAAGGCCAATAAATGTAGCTCCAGACAAGTGACACAGGTAGCTCTGTCCCC
-ATCCAATCTACCCAGCTACTTCTCTTAAGGCACGTTCTGATCCTTCAAGCATGAAGTTCT
-TGCCTCTGGCTTTTGTTTCTCTCTTGTTTCTGGCTTCAGTGACCTTGAGTACCCTGGAAT
-CTTCCATATTGAGAAAGAAATGATAGAGGGGAGGGGACATGGAAAAAAGAATTAAATATA
-TCTATTTTTAAAAAGAAAGAAAATTTTAGAATGGACATGTCTagaaggaggaggaaacag
-aggagggggacaggtataaaaactggacttctctgaatatactctgctttgaaggtttga
-ctttggaatcatctacatattttatctaatacaagaatatcgaaacttaaatggcaatcc
-caaaaatctaaaaggaatagaaatcaaattagcctctgtaataaatgggttgtataacca
-cacaaaggACTATTTGAAATGACTTTCAAAGAGTAATTTGAGAATACTTCCTTATTGGAA
-TATAACCTAAAAACAGAAGAATTGCAAACTGTTTTCAATGTTTTCAGTAATCATATTGAG
-ACTTTAATACATATATTGTGGGATAAAGGAAATGAATGTTGGTGTCACTGATAGAGATAA
-GAAATAAAAGTTCAGGTAAAAATTCTGTAAATCCTAAATTTGAATTGGAATTTTATATTT
-TATTTTTaaaatacctttttctacccccatccactgaaaagccctagaaatattggccaa
-cctagtagaaatgatttccctctcacccgggatattatctctaaatataatttaccaaag
-tcttattgaagaaattgctgtttctgagcttgaagcaactatacaaatgtacctggaaga
-ttttaccatactggaaaaaagcagcttgacaaagactactgaagtcatgtcaaaaaaaac
-aaagaagtcaacttgaaggggctttctcttggcaaagatgggaaaatgtgaaccttgata
-aaaaataattgcatgcattattcacagtaaccaagatatgtaatccacctaggtgtctat
-ggatggataaatatataaagaaaatgtgatatacacaatgaaatattattcagcctttaa
-aaagaaagaaatcctgccatttgtgacaacacagatgaacctggaggacattatgctaag
-tgaaataagccagacacaggcagacaaatactgaatgatctcacctatgtgtggaatctt
-aaaatgtcaaactcatggacacagagagtaggatggtggttaccaagggagttgagggaa
-atgaagaagtactagtcaaagggtacaaagtttccgttatgcagggtgaataagttcggg
-agcttactgcatagcacagtgactacagttaataatactgtgttgtatacttgaaatttg
-ctaagagtagatcttaaatattgttaccacagaaaaaaatggtgactatgagaggtgatg
-aatatgttaattagcttgatagtggtaatcatgtcacaatgtatatgtctatcaaaacat
-cacattgtacgtcttaaatatgtacaattattatttgtcaattatacctcaataaagctg
-gaaacataaaaataaaataactacaattaattgaaacatatcaaacatgtccaaaactga
-taaagaaaggtaaagaatttggcctggcacagcggctcacacctgcaatctcagcagttt
-gggatgccaaggcaggcggatcacctgaggtcaggagtttgagaccagcctggccaatat
-agcaaaaccccatctctactaaaaatacaaaaattagctaggcgtggtagcgggcatctg
-tagttccagctactactcaggaggctgagatagagaatcacttgaacccagaggtggagg
-ttgcagtgagccgagatcacgccactatactccagcctgggtgacaaagtgagactctgt
-ctcaaaaaaaaaaaaaaaagaaagaaagaaaagtgaagaatttatcctggcttttctgta
-aaaactgcacctcagaagaaccaaattattgataaggaattttgctctttagaaatattt
-ccagctaataaatgaaggaataatagcattgagacaaatcgccattttgtaatctcaggt
-gaatttacggatctaggcaatgatcattaatggctgagaaaatcacaacaaaaagaacaa
-ttagacatttgtgcctcctgatagaagtatacaatatcaccttcaaagctattttgccaa
-aaaagaaaaaaaaaatcaacccaaatctaatcaaggctcccactctaactcccaagctct
-aggatataccaaggacaaaggaagatcatgaaataccaccatggggattcaatcagcaaa
-ttcTGAAATGCAACATTATCCTTCACCCTGCTTGGCCTAAAAGTACAAAATAACACGAGG
-AAAAATTAGTTTCCAGAGCCTGTTATATTTTGAAAAATCATCAGAAAACTGAGAATCAAG
-GATAGAATTTCTAGAAAGTTCCTTCCCCTAAAGCTTTCACACTTGCCTCAGTGTATATAT
-GTGGCTATACCACTGACAGGCCGCCAGTCATTAAATTCAAGCTCCAAGAGACAAACTCTT
-GAAAAAAAGGCAGCCTAGGAGAAAGCAACATGATTTTTCACATATTTTAACTTGGTTTTT
-CTCATAAAATGGTTTCTGAATGTTTCTTAGCTTTCAATGGGCAATAAATAACTTTTAGGG
-AAATAGATGTGAGCCAATCTGAGGAAGTATTTGAGATGAAGAGAAGGCTTTGCTGTCTAT
-GAGGAGTGCATTAGAATAGAATCGCTCCAGGAAAAGGTCACCTGTGTTGATTGCCTTTAT
-GAGGTGACATTTAAATAAAAGTACTCGTTCAGTTTTCATTGAAAAACATTAAAAGACATC
-TCCAAAAATTTTTTTGGGAATGTGAGAAACTCTGCTGCACAAATGATCATGTTTTGTCAA
-ATAAGATGAAAAGAAAAAAAACACACACAAAAATgaaaaaacagatggaggggtaacata
-aattaagaaactcagaagacacatctacaaattacaatttatggatcatatttgaatgct
-gattctaaaaatttgaaaaaatatgcatttgagaaaatgaatgctgacttcatagtttat
-aatatgaagTCatattataaaatataataagaatgaaatattaataatttatCAGGTATG
-ATAATGGTTTTAAGGATGTGttttttgtttgtttgttttttgagacagagtctcattctg
-ttgcccaggctagactgcagtggcgcgatctcggctcactgcaacctctgcctcttgggt
-tcaagcgattctcatgcctcagcctctcgagtagctgggattacaggcatgcaccaccat
-acctggctgatttttgtatttttttattagtagagatgggcttttgccatgttggccagg
-ctggtctggaacttctggcctcagttgatccacctgcctcggcctcccaaagtgctagga
-ttataggcatgagccaccacgcccagccTAAGAATGTGTTTTTTaactgtatatatttaa
-ggtgtgcaacatgatgtgtgtatgtatatatatatatatatatatatatatatagagaga
-gagagagagagagagagagagaaataatttctgtggtcatgcaaattaacatatccatca
-tctcacagctacaatttttgtgtatgtgtggcaagagcacctaaaatctactcttagcaa
-aaatcctgaatacaatacgatattattaactattgtacattagacctctagacttgtttc
-tcttacatatctgcaactttgtgtcctttgacctacatttccccatttcctacccctcca
-ccacaccccagtaataaccactttattctctatctctgcattcaactttgttttttctag
-tttttaaactctgcatataagtgagatcatgcagaatttctctttctgtgtctggtttat
-ttcacttagtacaatgtcctccagattcactcacgttgccccatatggcagaatctcctt
-cttttttaaggctgaaaaatattccattgtatatataccatagtttctttgcccatttat
-ccttcaatgaatacttcagttgtttccacacctcggctattgtgaataatgctacaatga
-acgtaggagtacagatattttatgaggtgatgatttcacttcctctaggtatatacccag
-aggaggaattgctgggtcctatggtagtgctatttttaatttatttaggaaccttcatac
-tgttttccttaatggctccactaatctacattcccaccaaaagagtatacaggttccttA
-AGGGTGTATTTTTCAAAAGGGTCGCCGagagatacctattaaaatatatacaagagaaat
-cttataatatcagggatttgcttcaaaggaggggaaatccaagaaggggaaagtaaattg
-ggttatataagaaacaagattggccatgagttaatgttgaatttggatgatgaatacatg
-ggggctcattatattattgcttgacttttacacacatttaaattgttcAATAGTAtgtat
-tagtccattctcacactatataaagacatacctgaaattgggtactttataaaggaaaga
-ggtttaattgtctcacagttctgcagggctgtagaggcctcaggaaacttacaatcatgg
-tggaaggggaagcaaacacatccttcttcacatggtggcagcaagaaaaaatgcagcaca
-aaagggggaaaagccccttataaaaccatcagatcttgtgagaactcacacactatcacg
-agaacaggatggggaaaccactccgtgattcaattatctccacctggtccctcccacaaa
-acgtggggattatgggaactacaattcaagatgagatttcggtggtgacgcagcaaaatc
-atatcaAGTAATAAGCTGAAAATACCCTTTATATAAATAATGATAACACTGCATGGAAAT
-AAAGAAAAATCTTTAGGATGCAGCCTAACTGGTATTTACGATTTTTTAAACCCTGGATTA
-AACGCATCTTTTTATAAATGGAAATAATTAATGAAGAACTGAGATGGAATCAAAATAGCA
-AATCATGcacacacacacacacacacaAATTCTGTTTAGAGAACTAAAACAATATGTCAG
-AAACGTTGAAGAGTTCATGtgcatcagttagttcctgccatgtaacaaaccacaccaaaa
-tttagtagcttaaagcaaaatcatttatgtatgtcataattctatgagttacaaattgag
-gctgggctcagctgagaggttcttctcttcacttttgggctcatgcatgtgaggattaat
-gggagctggcaggtctagggtggactccactggaatagtctgtctctgttccaaaaggtt
-agctgaagcttgttttcctggcaacagagcagagttctgagagagcgtgagtatgcaagg
-cctcttgaggcccaagcctaggttcagaacaggaatcacttctgatatactctattggcc
-aaagttagtcccaagtccagatccagGCTTGCTCAAAACAGTGGCCCATCTCTCTGGCCC
-CAATCTCCATAGTTCTGGTAAACaaaaaaaaaagaaaaagaaaaagaaaaagaaagaaag
-gaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggCTGAGATAACA
-TTGGGTTTTTCCAATGATAAAACCTAGAATTAATGAAGAGCTAAAATTAGTAAATTTTCA
-AAAATAcaaaacacataaaatgtaaaactgctgaaaagataagaagaaatgaataaatct
-ataattaagacggaaatctttaataggccataggcctcaggagtcctcaaagtaaacaaa
-aaatgcacaagcatgcttatcttaaaggattaaataggtatttttaaaatattgatttaa
-tacacatgtagaactattaagtaacaaaatagatacatacaattttaaagcatagctaaa
-aaatggctaaaaattgattattataatacatgtgtatttcaaatattccaaaagaagtca
-gtccactcatataaactaaccacaatataacaacattagaacttccaaaaaaggtatgtg
-tatatgaggtggggttttttcaaccttctaaataattgtgggttaaaaaaacataaaaac
-tacaagattttggaaatgaatcaaaatgagagttctacatataaaatcttcatgaaaatg
-gttaaagtggaaattagatgaaagatttaaaggcatttactagaaaacaagaaaTTTTAC
-ATTTTTAAATTAAAAGCTAATTAAACTCAAAGTTAAATTTAGTTAATTAAACTCAAAAAG
-CTAACAGACCTGAACTTGCTCAGCAGCCTTACCTAAGAATCATCTATTTTACCGATCTTT
-TCAAAGAAATGTTTTGTTTTTATTGATCAATGCCTCCatatttttgaaatttttatagtt
-ttcatttattatattgacaaatttttttaaattattaatGTGGCGCTGGCAATACACTTG
-TGAAGCATTTAGTTATTTATCCTTAAAATATATTAGTACTTggcggagtgcagtggctca
-cgcctgtaatcccagcactttgggaggctgaggtgggcaggtcacaaggtcaagagatgg
-agaccatcctggccaacatggcgaaaccccgcctctactaaaaatacaaaaaatagctgg
-gcgtggtagtacacacctataatcccagctactcaggaggctgaagcaggagaatcactt
-gaacctgggaggcggaggttgtagtgagccaagattgggccactgcactccagcctggat
-gacagagcaagaccctgtctcaaaaaaaaaaaaaaaTTAATCCATGTGCACAAAGAGGCA
-TAATCAGAAATAATCATTTCCAATTTTggctgggcgcagtggctcatgcctgtaatccca
-gcaatttgggaggctgaggcgggtgaatcacctgaggtcaggagttcgagaccagcctgg
-ccaacatggtgaaaccccgtctctacttaaaataccaaaactagcctggagtggtggtag
-gcacctgtaatcccagctactcggggggctaaggcaggagaattgcttgaacctgggagg
-tggaggttgcagtgagccgagatggtgctatcacactccagcctggggaacaagagtgag
-atgtcatctcaaaaaaaaaaaaaTCATTTTTATTTTGTTTTTAAAAAGAAAAAATGggcc
-gggcgcggtggctcatgcctgtaatcccagcactttgggaggccaaggcgggtggattac
-ctgaggtcaggagttcaagaccagcctggccaacatggtgaaaccacgcctctactaaaa
-atacaaaaattagccagaagtagtggcacgtgtctgtaatcccagctactcaggaggctg
-aagcaggagaatcgcttgaacctgggaagcagagtttccagtgagccgagattatgccat
-tgcactccagcctgggtgacagagcaagactccatctcataaaaaaaaaaaaaggaaaaa
-TTGGAAAAATAAAGTACATGCAGTTTATTTGACAGAGGGATGTTTAACTGAACCACACTA
-CATCCATATATATGAAGTTATGCAGCAATAGAAAAGAATAATGGACATTTATATTTTTAG
-ATATAAAAAGAGCTGTTGAACCTATCATTGAAATTTTAAAAGGAAGCTGAAGAACAAGTA
-CAGTGTAATAAATTATTTGTTTTTtacaatttaattatagagtaaatgtgatctttcttg
-gtatatagttctatagattttaataaatatttggattcatgtaaccaccaccacaaatag
-gacacacaacagtttcatcaccctaagaaaagttcccggatgctcacccctctgtagcca
-aaccgtcaccccacccataatccctggcaaccactgatctattttccatcactataattt
-tgccttttccaagaatgtgacataaatggaatcatgtagtatttaacgttttgagaccag
-cttctctcagcatgtgatatggtatgtacctgtgtctccacctaaatctcacgttgaatt
-gtaatccccgatgttggaggtagagcctagtgagaggcgattggatcatggggacagatt
-tctcatgaatggttcggtatcatccccttggtactgtcctaaggatagtgagtgagttct
-gcagagacctggtttaagcgtggagcacctccccactctcttgctcctgctctggctatg
-ccatgtgcctgctcacccttaaccttccaccatgattgtaagtttcccgaagcctccccg
-gaagccaagcagatgccagcatcatgcttcctatatagcctgctgaacagtgagacaact
-aaacctcttttttttttagcaaatgacccagtcccaggtatatctctataacaatgtgag
-aacgacctagtaacagcatgtctttgagattcatccaagtttctaccagtatcaataact
-cattcctttttactgctgagtatgattgtattctatggatgtggtacatctgtttatcca
-ttcattcattgaagggcatttgggttgttttcagcttttggctatcacaaataaagtttc
-taagatggccaggcatgatggctcacgtctctaaccccaacactttgggaggctgagatg
-ggcgttgaggtcaagagtttgggaccagcctggccaacatggtgaaaccctgtctctact
-aaaaatacaaaaattagctaggtgtggtggcacacacctgtaatcccagctactcaggag
-gctgaggcaggagaatcacttgaacctgggaggtggaggttgcagtgagccaagattaca
-ccactgcactccagcctaggcaatagagagagactctgtctcaaaaacaaataaataaat
-aaataaagttgatatgagcagtttttacagatgtttgtgtgaccgtaagttttcgtttca
-ctagggtaaataccaggttcaggattgctaggtcctgaggtacgtgtatgtttacctttc
-aaataaactgacaaaccattttctagagtgactgcaatttccagttgttctgcaacctca
-ccagcaattggtgttgtcagaaactttttattttcataattcttatcaatgtgCACAATT
-GTTTTTAAAATTCACAGAATTAAAGGAAAATATATTGTGCACTATTTGTGTAATTaaagc
-aaaacacaaacacataaacggaagacaaaaataagaaactaattcaagaaactaaagaaa
-gaaaaacaaaaTTAACTTTTTAAAATTAGAATAAAGGCATATATATGTAATAGGGATAGT
-TTGAAACACTCCCAAACATCTGCTCTGAGCCAACAACAATCGGATAGCgtgagggcagat
-acaaattaaatatgagacttaactctccccgttaaaaataaggaaagagacttacccaac
-acccctcccccccgcccttctctttctctgtctctttgaaatgtatgtaaatctttttaa
-aatgtaaataggcctctagccagttttacaacccaggaatatctttgtcaaatacctagg
-agccatctctttgaaatgtaagcatccagaaaggtagtgctcctatctctgaatttatat
-gagtgggtaggtctctaactttggcaagttccttgcttcaagttgcaaagccacttcctg
-tcacaaggatgtgagaattttgtttttcctttggttaaagccaaccagcgaacacagatg
-gccactccaattatcaggtgaatctaggatgaactatgtgtatgtcaaatggtacttcta
-agttctcctatttgagaaccagttattgtttgtcttgagagcatatctgtaatgggtttt
-atcttcttcaggatataaacaagtaggatttctttctgtctttgcaaactctttgtgaat
-tgcctgtgatgtgtctcacattctggttcaatgcttattcaatggcaattgttttctttc
-tcttctacctttgtggagaggttttctaggttgagagaagattttgtttttaattatatt
-tcccccacaATAGCAAACACATCCCCAACcacatacacacacacacacacacacacacac
-acacacacacacaacaggtaattagacaggcctgagcagggcaggagagggctcttcccc
-cacccactacgaatgtcagtgatggttccaaaattatcacattgcctctctaaaagtgat
-aaattggGCAgcgcagtggctcatgcctgtaatcccagcactttgggaggctgaggtgga
-cagatcacttgaggtctggagttcaaaaccagcctggccaacatggtgaaaccccatctc
-tactaaaaatacaaaaaatagctgagcatggtagtggacacctgtaatcccagctactca
-ggaggctgaggcaggagaatcgcttgaacccagaaggttcaggtttcagcgagccaacat
-tgccccactgcactccagcctgggcaacagagtgagactccatctcaaaataaataaata
-aataaaataagtgagaacatatggtacttatctttctgtgtctgacttgcttcacttaag
-ataatggcctccagttatatccatgttgctgcaaaagacatgatttttgtggagggattg
-tattccattgtatatatagaccataatttctttatccaatcatctgttgatggacactca
-gttgattccatacctttgccatcatgaatcatgttgtaataaacatacaagtgcaggtat
-cttttgatgtgattatttcttttcctttgggtagatacctagtagtgggattgctggatc
-aaaAtggcaggtgcctgtaatcccagctactccagagactgaggcaggggaatcgcttga
-aactgggaggtggaggtttcagtgagccaagatcatcccactgcactccagcctgggtga
-cagagcaagactctgtctcaagaaaaaaaaaaaaaTgctgtgtgattacccttatatggg
-tttcctggatgagccatttgttaaattaatttttgttggaaatttccccgcagagctgtt
-gcacattgtggggggttaatccccagacactcccatgaggccccagtcacccaggggtgc
-ctttggctgggaggagcaagtgccctttctcctaggagctgaaaaactcagtctcttatt
-tatctatgaaaacaacagttcagtttctcacataaatgtgtacagataaaccgaatttag
-acagattttaggagaaaaagcaattgagaattccttttagaatgcatctcccaactagaa
-ttaggatccttaaacaaccacttcttaggagaaaaccagctcagaataaatcaaggacca
-tcaaccaaagggaggtctggggctcaggaggacttaccagttccaccagaggagaagctc
-gaagcttcaatgggcccctgctggcaccttagctctggttttgggcaactcctttagggt
-cctgagtcttccctgaggcctcacgtgtttgggcaccaaattattgttgacgaaaagagc
-caaactctgtaaaatattttaagagatttattctgagccaaatatgagtgaccatggccc
-gtgacacagccctcaggaagtcctgagaacatgtgcccaaggtggtcggggtgcagcttg
-gttttgtgtattttaggaaggcatgaaacatcaatcaaatacatttaagaaacacactgg
-ttacttggaagtccccgcggggctgggggcgggtatcaatggaaaggaatgttcaggtta
-acataaaggattgtggagaccaagttttattgtgaaaagaaatctctcagatagcagact
-tcagagagagagcagattgtaaaatgtttcttatcagacctaaaagggtgcctggctctt
-agttgattatctcctggatctggaaaggaaggggaaaaagggggtgggtgggtgtggggg
-tatagaatgtggatctttttccaccaaagattttgtaaggcaatttcaaagtatggcaag
-gcaatatattttgtgataaaacattgtgattttttttttttttttgtgagacagagtctc
-actaggtcccccaggctggagtgcagtggcgccatctcagctcactgcaaccttcgcctc
-ccgggttcacgccattcttctgcctcagcctcccgagtagctgggactacaggcgcccgc
-caccacgcccggctaactttttgtatttttactagagacagggttttactgtgttagcca
-ggatggtctcgatctcctgacctcatggtccgcccgcctcagcctcccaaagtgctggga
-ttacaggcgtgagccactgcacctggccaaaacattgtgattttcttccttgttatgcca
-gagtcagattgaaaagtaagtcacaatatacagggtcaaataaaacccatcttgtaagaa
-tttatggtttgtagggcataactccctagaccccttaggtaggaatttgggcaagataaa
-aaatcagagtttagtcctcaattccttaagataaatctctttctctatatatatctctct
-ctatctcatatctccatcctattctctggaaaactctgactaatgcaAGAAATTAAAGAG
-ACAAAACACATAATACAATATCTtaaacaacaaaatactattcagccataaaaaagaatg
-aaatcctgtcattcatggcaacatggatgagctagagcagtggtccccaacctttttggc
-accaggcactggtatagtggaagacaatttttccatggtcggaagggggtgggaggatgg
-ttttgggaagaaactgttccatctcagaccatcaggcagtagttagattctcataaggag
-tgtgcaacctggatcccttgcatgcgcagttcataatagggtttgtgcttccatgagaat
-ctaatgcttctgcacatctgacaggagatggagctccggggtaatgctcacctgccactc
-acctcttgctgtgctcccagttcctaacaggccatggtccccataccaatctatagccca
-ggggttggggacccctggcctagaggacattatgttaagtgaaataagtcaggcacagaa
-acataaatgctgcacattctcacttatatgtgggaactaaaaaagttgagcttacaggcc
-cggctcggtggctcacacctgtaatcccaacattttgagaggccaaggcgggtggatcac
-ctgaggccaggagtttgagaccagcctggccaacatggtgaaatcccatctctactaaaa
-atacaaaaattagccgggtgtggtggcgggtgcctgtaatcccagctgctcaggaggctg
-aggcaggagaatcgcttgaacctgggagacagagttgcagtgcaccaagattgcaccact
-gcactccagcctgggagacagggtgagactccatctcaaaaaaaaaaaaaaaagttgagc
-tttcagaagtagagagtaaaataatgtagcaggtagaagaggatacggagaggttggttt
-taacaaatacaaaatcacagctagataggaggaataagttctagggttccatagctctgt
-agggtgactgtagccaacaatcacttattgcatattttcaaatagctagaagagaggatt
-ttgaatgttctcgcacaaagaaatgagaaatgtttgaggtaccctgatttgatcattaca
-cattgtgtacacgtattgaaatatcactctgtatcccataaatatgtataattattatgt
-caattaaaaataaaattttaatttaaaaatacattttaaaaatCAATACAATATCTGACC
-TGACACTGCAATCTCAACTCAAGGAGGAAATGAAtgctgtaaaaggcattattaggtcaa
-ttggcaaattggaatacagatatatatatatatatatatatatatatggatagatgatag
-actagataaaagtggtgtccatttaaatttatggagttagtaactatactgtcatacagg
-agaatatccctattcttaggaaatacacactgaattatttgggagtaaaaggccacgata
-atataaggccatgaacatataacttatgctcaatagattcaaagaagaaaatatacaaat
-atagagagactaatatagATATATATATATCCATAGATAGAGAGAGGTGGGGCAAATGCT
-AAAGCAAGAAAGATAAAATGTCAACAATAGGCAAATCTCAGGGGAGCTGGGGAAAAGGTA
-TCGTACAATTTGTATTTTGCAGCCGGTATGttttaaattatttttaaatgaaaagatttt
-ttaatGGGTTGAGGAAATTGGAGTGACTTATATTTATGACATCCAATGGACTGTGCATGC
-TGTATGGAAACAAGGAGAAAATAAATGTCATCATTGCTTAACAAGTGAAGGGTAAAAAGA
-CAATTAACTCACTGAAGACTACGCACAGAAACACAAAAGCCTTTGCTTCTGTGGTTATAG
-GTTTACCAAAGGCACAAAGGGATTTGTATTTATTTTAGGATTATAATTTACATCACTTAG
-TTGGAAAAATTACAGATTTTAAGATATTTTTACAAATCTGAGTGACTGTAAAGACTGCTA
-AAGTCTTGGGACATATTCTTACCAAGTCCCAGATCttttgttttgttttgttttgtGCCT
-GAAATCAAACCAGGTTTTTTAGACCAGGAAAACGTGAGAAGCTAGAGCTGCTCTACTCAG
-TTGGCCCAAACCAGGACTCCGGAGATTATTCCCTTATACAGCAGGCACCACATTAGAGAA
-AGGATTCTGGAAAAGTGAGCTGGAACAGAAAAGAACTGTCTCAATGGGAAACAGACTCCA
-AAGGACGCTATTGGGGGGAGGAAAACACAAAATATTTCTTGAGAAGAATGTGGAAATGGC
-AAAGTCTCTAGCCTCCAGAAACCTTAAACTCTAGGGAAAGAAAGCAAAAATTTAGAGGTA
-AGAGTGTTCATATTAAAATTCAAACAATAAGTAGTTTTTCTATAAACTCTCTTTTTTTCT
-AATCATGAAAGTACACATAATCATTCTCTCCAAACTCAGACATTTtagacagatagatag
-atagatgacagatagatagatagatagatagatagatagatagatagatagataCacatg
-catacatactacatacatatatacctacataTGTTGGCACATAGATGTTCCTTTACCACA
-GATTAAGTTATTCTAGATGCATATCTTGTAGCCTACATTTTTATACATTTTcatcatttt
-aataactgcatactgctctattatattctgtattttctatattagattagatccatgttt
-tatcaccatttaggtagcttttggttttctgttactgtaatgttgagataaacgtcttta
-tgtacttgttcaattattcccattaaacaaaagcccaaggtacaaagtttctgagtaaaa
-aaataggcacattttaaggcttctgatatatattgccaaattgtgctacaaaagaaaaac
-tgtaccaattaacactcccagcaacaacgccaagagaatgctagtttccccacatctcac
-caacactgtctaGAACGCATAGTTTTAGAGATGAACGCTGGGAACCGACGCACTGTTTGC
-TCTACCTCTCCCCCTCCTAACAGTCTAGAACACAGGCGCTCAATAAATCAATCCAGGCTC
-CAGTCCAGTAGACATTCTGATCTAATCTGACTGCTCTGGGTAACAGAAAAGTCTCCCTTG
-GTTCACTGCCCAGTATCCTGGCATCATGTGGATCCTATAAAGGCAGTAGCTCCAAGCACA
-TTACAGAGGGACCCAACTCCATTAAACCACCACCAGCTCCCCAAGCCACCCCTTCAGCCA
-TGAAGTTCCTGCTCCTGGTCTTGGCAGCCCTCGGATTCCTGACCCAGGTGATCCCAGGTA
-AACTGGATAAATAGGAGGAAAGGAAAACTGGGAACGAGGAACACTAGCATATCTGGTTGC
-TCTGGTGATAGATGAGCCAGGTTGGGTGGAGGCAGGGCTCACCCCACTGAGTTCCAGTCT
-AAGGTAGAGATCTCCTAACAACCACCACTAGCCTTGATATCCCACACCCAAACACCACCC
-TATATAACCTTTACAAAAATTTGTTTTCTATTCTAAAATGATAGTCACCCTCAACCTAAA
-CCAAAATATCTTCTTTCACTTTATGTGAGCTCCTTATATCTAACCTCCTAAGACACACTG
-AAGGCTTCTGTCATCACCATGTGCATCCATTGAGATCAGCCCGGGTTGGAGCTCAAAGGA
-GATTTTGAGCCTAGAAGGAAGAGATTGAGGTTCCCATCCCTATGCTCAACAGACAGCTGG
-CAGGTGGGGGATGGAAGCAGACCTCTTAGAGGGCTAGTTCCCACAGGATGGTAAGCAATG
-GGTTCAGCTCAAACCCTGGGGCTAGGAGATAATGCAGGGTCagaaagagagagagacaga
-cacacagagagcagggagagagagagaTCAGAGGAGGGCCAGGCAACGGATGTGAAGAAA
-GCCAAAGAGGCTTGAGGGTGCTCCGAAGAGGCCCCTGCTGTGAGCCAATGGCAGACACAG
-AGCACTGAGGCAAACAGATTTCAGCAGATGGTGAAATGGTGCACAGCACTGGGTGAATGC
-AAAAATGCCCTGTCACTGGCAACCGTTATTTTCTTTTTAATGATTTTGGAGAAAGATTTG
-ACTCCTCCCACTTTGCCCCAGGTTGACTCATATTTACAGTTTTAGAGTCTATGAAAACAA
-GTAAGGTAGAAACACCTTAAAAGGGAGCCTGTGGGGTGAGTGAGACTAGCCCCATTTCTC
-CCTTTTGAGTATCCAAGCTCCTCCCTGACCGTGAAGACCAGGCTCCCCACCCCTGTTTTT
-ACCCATACATCCTATTCTGTAGTATCAAATTTAGCAAAAAGCTTCAAAGATGCAGATACT
-GGCAAAGAAGAAGAGCTCGTCAGACAGAGTTCCCCAAGGCCATCAATCCAGGAAGATTTT
-TGTCTCCTCATCACTGGCTTTCCCAAGTCTCATTTGCACAACATCCTAAGGATACACCTC
-AGAACAAAAAGCCAAACACTCCCATCTGGCGCTGACGCTTTAGTAGCCCTGTGCTGCTTC
-TAACCATGACTTCTCTGTCTTGTCCTCTCCCATACAGCCAGTGCAGGTGGGTCAAAATGT
-GTGAGTAACACCCCAGGATACTGCAGGACATGTTGCCACTGGGGGGAGACAGCATTGTTC
-ATGTGCAACGCTTCCAGAAAATGCTGCATCAGCTACTCCTTCCTGCCGAAGCCTGACCTA
-CCACAGCTCATCGGTAACCACTGGCAATCAAGGAGAAGAAACACACAAAGGAAAGACAAG
-AAGCAACAAACGACCGTAACATCATAATAACCACTGCTATCGCCTCCACCAACTCAGAGA
-AATATCATTTCCACAGTTCCAATTCCTCCTACATTGCTGAGTACTAGCCAAGGCTCCTCT
-TTATGGGGCAGATATCTATAGCCAACCCCAAAACTTCTGTCTTCTATCATTCTGTCATTC
-ATCTAGTAACTAATTTGGAGTTTGTATCTATCTTACGAGAACAATCATCATGCAGATTCG
-TCCACAGGGGATCtgtcagtttgggtcctccaaatgaaaaatgtcaagacagaattggac
-atgcaaaagattgactgggagaacacacctctgatggacaaaggtgagacagagcagcca
-caggcagggagagccttcagactgcaacgctggcctgatacgtgtcaaaggagagaggga
-tagaggaggattgaatagaaggagactaagactgcagctctaagaaagtctcagccaaac
-agatggggaggcccaaagcaaggcttgcccctcagaggagctcacgcagggcaggaatag
-ccaggttctcatatcccaggggttcagactttggctgagaacagcccctggagaacatgg
-ggtgactgctaccataggtctggaagtatgaggctgtccaccaactatccccttgaagca
-agttctcttgaaaggaaatctaaacagtgcacccccatggctgccacGGAGTATAAGGAG
-GGAGAGAAAGGAGCTGAAAGTCTAGGTTTGGCCAGCTAGGTAGACTGACTTGTGAGGTAT
-TTATTTATTCATTTGAGTAACAAAGCAGACAGAATACATAGCCACCATTGGTAGTACACC
-CCAAAAGCAAGGATGGCATGATGCTGGTGACTCAAACGTGCCTACTCATGGTGTCAAATT
-GGCATAATCCTCTTGGGAAGCTGTGTGGAAATAAGCACAGAGAAGCAGAACTCTAATTGC
-TTAATCCACTAAACATTACTTCTGGGAATTGGCTCATCATAAATTATCCAAGAGAAGCAC
-AAAGTTATGGGCACAAAGGTTTTCCATATAATATTATTTAAAATGCTGAGAAAATGAAAA
-AATCTAAATGGTGAAATATATACTAATGCCATCTATAAATACAAACAAATAGAATGTTTA
-TAGAATAATGGAACATAATAACATTATTCAAAATTGCATTTATGCTATAGTTGTCAAAAT
-TGTCTCCTTATATGATACAAAACTCATGAAAATTATGACTTTTTTGTTTGGTTGGAAAGC
-AGAATTATGCATAAATTTCCTCTTACAGTTCGATGCCCATTAGTTTTATATAACATTTAT
-TTGACACGTACTGACTTCTATCTGAGAAGAACAAACCAAAACACTCAGGCCTAAATAATT
-AAAAACGGTCCTAAAAACTAGCAAAccagataagaaaagatgttaatgcccattccctaa
-cttatgtcttagaccaaaattaattctagatggttttaaaatgacagtgtaaaagtaaag
-tattaaaagattgtgtggtcaaatattcaatttaagagcaaggaaattcttataaatata
-acaatagaggcagaactcatgtaagaataaattgattaggtggtattaaatattaagttc
-ttatgtatgtcaaaagatatcattttgaaattcatccatcttattgggtattgcaggagt
-tcattcctttttgtttataaatactcttccgtcatatgaatagtattcatttgtatactg
-gtttgttgatggacatttgggttgttcccagtttatggctattacaaataaagcttctat
-gaacatttatgtacaaatctttgtatggatgtatgctttcatttccctaaggtaaatacc
-taggagtagaacgtctgaatcatatggtaggtgaatgtttagcttttttgtttgtttgtt
-tgtttgtttgtttgtttgtttgttttttgagatagagtttcgctcttgttgcccgggctg
-gagtgcaatggtgcgatctcagctcactgcaacctccgcctcctgggttcaagcaattgt
-ccttcctcggcctcctgagtagctgggattacaggcacgcaccaccccccgaccccggct
-aatttttgtatttttagtagagacggggtttctccatgttggtcaggctggcctcgaact
-cctgacctcaggtgatccgcccgccttggcctcccaaaatgctgagattacaggcatgag
-aatgtttagcttttaaaggaaatacaaaattgttttccaaaatggttgtgccagtggatg
-tgcccatcagcaggatgtgaaagttccagccgttcctcatcctcaccagcatgtgatatg
-gtcagtcttttgcattttcatcattctaatagatgtgtagtggtatttcattatgctttc
-aatttgcatttttttaataactagttatcaaaaaagtatattctgtatgattctatttac
-ataaagttcttTAAATTCTTTTAAAATTGCATAcaattatttaaaatagaaagtaagaat
-ctaacgacagaaagcagatcactggttgtcaggggatgtgaaaggtgcatggagagggct
-gaaagaatgtaaagggacctgaggacactttgaggggtgatcagtcaagacacattcata
-ggccgggcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggtgga
-tcacgaggtcaggagatcaagaccatcctggctaacacggtgaaaccccgtctctactaa
-atatgcaaaaaattagccgggtgtggtggtgggcgcctgtattcctagctactcgggagg
-ctgaggcaggagaatggcgtgaacccaggaggtggagcttgcagtgagccaagatcgcgc
-cactgcactccagcctgggcgacagggcgagactgtctcaaaaaaaaaaaaaaaaaaaga
-tacattcataatcttgattgaggtaatggcttaatgggggtgtacataagtcaaaaaatt
-acaaaatggtaaactttaaatgtgttcagtttattgtatgtcaatttaaacttccaaaaa
-aGCtattattttaataaaataaataaatCTCACAGTGAAACAGAAATATTAAAGTATCAT
-AAATAGTTTAAAGACGTATGACAAACTGAGACATGTGATGAAGTATCGATACCAATAAAA
-TATAACAAGTTAACATGAAGcaacagggaaaacatgaaacccctagcagaaaatgaaaaa
-gtaacatgaactagctttttaactctataaacggcctgaaaaatgggaaaaaatctgtgt
-gactgtgatcaaataaatgcagattaaaactacaatgagatcttgttttttacctatcgg
-attgtcagagaattaacaaacccaagtctgacaaggcataaatagaaataagtctcatca
-tcagatgctccggtttataactaaatatgtccattctggaagacatttatctatacagct
-ttcaaaacccttaaaaatgttcatgttctgtggctcagagactctacttttagggatata
-ttctggggaaataattagagttcatatcaaaaagattaatgtatatacagcacaatcata
-gcagcatagtttaaagtagtgaagaggcagtggggtaagatggctgaacagaagcctcca
-ctgatcatcctccccactagaacaccaaatttgacaactatctacacaaaaaagcacctt
-cataagaataaaaaatgaggtgagtgatcacagtacctagctttaacttcatatcaccta
-aagaggcactgagaaggtaggaaagacagtcctgaattgctgacaccgcctctccccagt
-cctcaggcagcagctgtgtggtgtgcagagacaatatgtgtacttgcaggagggagagca
-cagtgattgtgggatttcacattggaactcagtgctgctagcaccaggcagaacccagca
-ggtgcctaaaagggatcatttagaccatccctagccagggggacatcacccatcccagag
-gtcggaactccagtttccgcaagcctcaccaccgtgggctaaagagctctggggtcctaa
-ataaacttgaaaggccgtataggccacaagaactgcaattcctaggcaactgctagtgct
-gtgctgggctcagaggcagtagatttagggaccactcaacctagtgagacaccagctggg
-gtgtgtgtgtgtgtgtgtgtgtgtgcgtgtgtgtgtgtgtgtgtgattctcgtgcctcag
-cctcccaagtagctggtgatggcagtggcagcccatctggagtggacgctgccatcaagc
-cagctgcagcagggagggacagctggggctgcacattccacagagctgcagagctgggga
-caatgagagccccacaccttccaagctggtgcagcaggagctccccaggtgcaactgcag
-ccactcaagtcacggctgtgaaccccggcctccctgtgttcttgtgggtgctgggagcag
-gcaggggtcctgcacttttgggtgcagctgcaggcgcccaaaccatggctgcggaaccag
-acatctctacactcttgagggtcagggaagtccccactgccctcacaagcttagaagtgc
-ctgctcccacagcctggcgcctccctgctgtcggtgcccgctctaatcttggagcaaagt
-tgaggccaagcccaggtgctgtcatagcctgttgggtgtgcacacgcttggggcagtgct
-gacataccagccccctgccgcctcggacccctacagacctcgggtgctgacgagcatagg
-aggaaagccgaggtggggctgagggcagctcggcacctacagcctgggtgccatgaatgg
-cagtaggagTCTTCTCAGTTCTGTCTCCCTCCCTTCAGTGTGGATGAAGGGGTAGAAATG
-AGGTACAGCATCCTGTCTTTCCCAGGGGTCGTGTTGCATCCTTTAATAGTTTACCACTGA
-CAGCACTACCAACGATTTGGGGATTGTGTCTCGAGGAAGCAATTGACCTAAATTTCATGT
-ATCAATGAAACTGTTTTTCCTTATGGttttaattatttatttattttataaaataaaata
-aataGGCTTTTAATATATAATGAAAGCCTTTTAATGTTAACATGCAAGGACTGAAAGAAT
-ACCTGTTGGACTGCAAGATGGCTGCTCCCTCTACCCTCAGCTTCAACTGGCCTGTCAGCC
-AAGCTTTGATTTCCTAGGCAGAATATAAAAGAATTCCTCTCTGTGGTGGTCCAGGAGACC
-AAGGGAATTTGGGGAGGTGATAGAACTGCACCCTGATCATGCTGGTGGTGAAAACTCGTG
-CAACCGTACACCCAAATGTCATCTTTTTTACTGTATGTTAATTTTAGAAATCAGAAAGTA
-AAAGATGCAATCACAAAAATATCATTTGGTAGGACAAACTTATTCAGTATATGAAGATAA
-TAGAGAACTTTTATACAAAAGTGGCTCTTACaaaatattaatataaaatattaaaatata
-aattCTCAAGAGCTATAACTTAAACTTCTATGTTAATTTAGGTAAGCAATTCTCCTATGA
-AAAGACTTAACGAATTCTTTCCTTTTCTTTTCCTCTTGTCTTTTCATTTTGCTGCAAGGA
-GCAGCCTTAAAGCTGACTGAAACAGTTATTGTGACCAGCATGTAATGCTTGAAAAGATGA
-AAATCCAGCTTTAAATATGCTCAATCTCAATAACttttttggtttttttttttttttttt
-tttttgagacggagtcttgccttgtcacccaggctggagtgcaatggcacgatctcggtt
-cactgcaactttcgactcccagattcaaatgattctcctgcctcagcctcttgagtagct
-gggattacaggcaccggccaccatgcccagctattgtttgtatttttagtagagatgggg
-tttcaccatgttggcaaggctggtctcgaactcctgacctcattatctgccgccttggcc
-tcccaaagtactgggattacaggtgtgagccaccgcgcctggccTCAATAACTTTTTAAT
-AGGTATATGCTTAGTTTATTCATGTTTCTTTGCTAGTTTTTTTTCCCTGCAAAGAAGAAG
-AAGAAAAATAATTTTAAATCTTATTTGAAGGATGATTGTACACTGTGTTATTGGCCTTGG
-AAAGGAGAGAAGGAGGAAAAGGAGTAGGAAAAGGGAAAATATCTTAAGAGGTTGTACTGT
-TAATCTACTTCCAGGCAGATTTTAACCACTAAAGCTAAAATGCTATTATGAAATTGAATA
-TTTCAATTGAATATTGAAAATGGTATAATGATgccgggtacggtggctcatgcctgtaat
-ggtagcactttgggaggccaaggtgggtgcatcacttgaggtcaggagttcgagactagc
-ctggccaacatggtgaaactctacctctactaaaaataccaaaaaaatagccggaaattg
-cttgaacctgagaggcagaggttgcaatgagctgagatcatgccactgcacttcagcctg
-ggcaagagagcaagactccatcttaaataaataaataaataaatgaaAATGGTATAGtgg
-cttgaagatgcaggggcccatgaggaagaacatggatggcccctagaagctgaaagcagc
-ccccaggtggcagccagcaaggaagtggggtcttcaattctacacgtgcaaggaactgaa
-ttctatcaacaacctgaatgagcttggaagctgattcttccccagaagccgcagataaga
-gctcagccTGCTAGGGGCTTGAGAAAGGGGAAAGTGACTTTAAAAATGTAACTCGAGGGA
-GTTCCAAAAGGCTAAGCGATTCGGTGAATCTAATAAACATGTTAAAATGCATAAAGTTCG
-GGTGTGGGGGAAAGGGAAGGGAGAGCATTAGGACAAATAGgttcttttctgagttctggc
-caggaggcttcttgatcagttcaaattgttacaaagttcagctggaggtttccttctccc
-tgtggccgctctgggcctctggcagccctcctcaaggagcaatccgtttccttcagaggg
-tctgtgggttctcctggcttccctaatgcgttcctgcagtccttctgaagcaaaacttaa
-tgatgcgagcctccacacgctgctctgaccgtccgagtgggagctgcaatctagtcctgc
-ctcccgtctgtcatgatcccTGGTGGTTTTTGACTACagctcaattgttttagattccat
-gtgtaagtgagaacatgaagtatttgtctttctgtgtttgactcatttcacctagcagaa
-tgtGTaataaacattaacaaaatgaatgtgtaaaatcaggtagtgatcacagctacaaag
-aaaataaaacagagtgatagatggaaagtgatggggaggaagaacctggttagaaatggt
-ggtcaggcaggacctctctaagaagggaaaagagctgtgactgcacgataagccggccac
-gtgaagaccttgaggacaacatgcaaagctgatgacccaccggccctgcaaagaccgggc
-gggagataagcttggctggcgcgaagaaagaaggctggagggagtagaaatggggacagg
-agctgaacgctgggagagggggctcaaagCCAGCTCGCGTAGGCAGGGACTGGGCACTCG
-CAATGCGCGCAGAACAAAGGCCTCTCTCTCTCTTTCGCCACACTAAGGGCCAACATGGTC
-ATCTCCAGGTGCGGATTCTGCCGTAAAATGCGCCCCTGGCGACTCACGACCAGGACGCAT
-TCCGCACCGCTCCCCCACGCCCCGCAGCCCGCCCTCGAGGCTGATTGATTTGTGCCAGTC
-TCTACCGCCATCTGCCGGCAGCACTCGGTACACCCGCGCCCTGGAGGTCGCACGCGCTGG
-CCAAACGGGCGCACCAGACACTTTTcagggccctgccaaagacctcccaatgtctactgg
-cgtcccagacacaagagatccaggccaagactcacacttcacaagatacacagacacggg
-ccttagggaacaggaaattccatgaaacttccatttacccaattagccggactcactgag
-ccccagaatagggttttcaaccaactcctactaaaattAAAAAGTAATGTGTGGtataga
-ttggaataatagacattggaggctacaaacgatgggaggcggagaggggtgagggttgaa
-aaattacctattgggtgcaacattcactatccgggtaatggggcactagaagcccactcc
-accactatgcaatatatgtatttgtaccccgtaaatctataaaaataaaaaCTACATTAA
-AAATAATAATAATGTCTGGTCATCTAAATAGTACCTCTACAGCTTATTAAGTGCTCTGGA
-GACGTCCCAGTTGCCTGTCCTTCCCATTAAAGGTGATATCCAGTGCTGATTTCCCCTTCA
-ACCTCGGGTTCCCATAAACCTCTTCTTTCTCACTCCTGCTGCCCTCCGGTACTCCAATAA
-AGAATGATAGATGggccgggagcagtggctcacgcctgtaatcccagcactttgggaggc
-caaggcggatggatcacctgaggtcaggagttggagaccagcctggtcaacatggtgaaa
-ccccgtttctactaaaatacaaaaattagctgggcatggtggcgggcctcagtaatccca
-gctactcaggaggctgaggcaggagaatcgcttgaacccgggggcagaagttgcagtgag
-cagagattgtgccactgcactccaacctgggcgacagagcaagactccgtctcaaaaaag
-aaaaaaagaaaagaaaCAGTCCCAGTATGCATCCATGTGCATGTGCATGCAGGTGTATCT
-GCCTGTGAGAGCTGCGCACGCGGCTCTGAGTACCTGGGAAGACACCCATGTACAGATGCT
-GTACATGTGCGGGGTCACTCTCTGGCGCATTCGGAGGCATGAGGGCTACGTGCAATGCGA
-GGGAACCTATGTCCAGGCTTCCTTTCTTGGTTTTCCTCCTCTGAACTCATGCATCCCTTC
-ACAAACagtccagctcctggctaaaaacctatgtgtgatttttcagcccaaacacaggca
-atgacaggttttacctggcaggcctcacagctgagtcgtgcacagctgatgcgttgcagt
-ctttaaagacagttgcagacacagactcaggcctcctggacagtcgacctctcacacaca
-tctccgctcccaacccaagtcttcattcagacacgtcttcattgcagtggggtaggcctt
-cggccaggacctccttatcttggggagtggagaatccttgaagacactttcctccatgct
-gactcagaagttttcccactctcccttccccaccccatccctggcccccaggtccgtaca
-acttcaggagcctttttgttggaagcttttctgcagtgagaccaaccccacacctgtgct
-catccacccgaccccagttggcatcattctatgaggaaattagaacaggtggatctgtgt
-tctacaaaataaaacaaaccaggttctctggtttagcctctttcttgtactgtaataata
-agagatttggggcttggctattacttgctttgactttttttgttttgagacagggtttcg
-ctctgtcacccaggctggagtgcagtggtgcgatctcggctcactgcaacctccgcctcc
-tgggctcaagcaatcctcccacctcagtctccctagtagctaggactacaggtgcacacc
-atcatgcccagctaatttttatattttttatagagatggggtttcaccatgttgtccagt
-ctggtctcaaattcctgagatcaagcaacccactggcctcagcctcccaaagtgtgagga
-ttacaggcctgagccaccatgccgggccatcattaatcagctactccagcacttagcagt
-tcagctctctcctgctcagctgagctcctgaTTGTACAGTGGTTAAGAGCAAActgcctc
-tgccacttagtaacctggtgacttgaaaaatcactttgccttttcatcctttggtttctt
-catctgtaaaatgaaaataacaataaacaatacctacttcacagggtggttgttgtgagg
-gtgtagtgagttgatgtatgtaaagcATAACGTAGGTTCCATTGAAGTGTTTGCTATTGT
-GTTCAACAGGGTCCATTTCTGCTTGGAGATCCACATGGCTCTGGGGAGTACCTGTTGGCT
-CAGCCTAGGTCACGTGTTCCACCTTAACCatcccttccctgctccaaggtagagcccgtg
-acctgaactaaaccagcaggcacgctccacctccaacaccggctcaaggtgggcgtgtaa
-tataagctggttcaattagaatgaatcttttttttttttttttaaagacggagtctcatc
-ccccatcacccagactggagagcagtggcacaatctcagctcactgcaacctctgcctcc
-caggttcaagcaattatcctgcttcagcctcctgagtagctgggattacaggtgcctgct
-gccacgcccagctcatttttgtatttttagtagacacagggtgttgccatgttggccagg
-atggtctcgaactcctgacctcaagtgatccacccacctcggcctcccaaagtgctagga
-ttacaggcgtgaaccactgtgcccagcccaattacagtgaatcttaatacactggctgaa
-aattctgggacacagccagtctctctctttccaacaggacatgtacaaggacctgtacaa
-ccctgggagatgctggcatattggggccacaagcagtgctgacctgaagaaaagggcaac
-acctcagaaaacaaagtagataaatagaaaccaagtccttggtgccatcacttgatttct
-ggacaaagcctcacctaagctatttattgacctgagcccttcatagtttaggccaatGTG
-ATTTGGTTGTTTTGTTACCTGTAACCAAGTATCTTAACACAAAGTGGATCTGTGAGTGAC
-CAGAGCCTCTTGGGGGTTGTAGCAATCTAGTAgttggcccagaaaggccaactctgagat
-ggagtgtagggtgcagaatgttgagtaatgagtgctcttggaatcaacaactgaggaaga
-cagaaatatgcaggattgggcacagggagaagttcagctgcagtgcaggcccaagggtag
-ttgcagctgagccttcaggaagttctggagccagagtagcccttctgagttgttccaagC
-ACTGAAGGCCTAGCAAGTTCCAGGGGTATTAAAATCAATAAGCCTGTCAGCCCCGACAAT
-GCCCTCAATAGGTCTGGGCACAGATTGGAGAGAAGCTGGGCTCCCACTGCACCAGGAGGG
-AGTGGCCCAGAGCCACTGAGCCATGGAGACTCAGGCAGGGGGTTGCTCCAGCACTTCTTC
-TGGAGAAGTTTTGAGCCCCAGATGCAGTTAGCACAGTTGCCCGCCCCTTATCATAAGACG
-AAGTCCGTTCCCACCACATCTTCTGCAAGACCTAGCTGGGGACCCCGAGACACTGGCAAA
-AAAGCAAATGTAAATCCAGCTTTATTGGTAAAAAAGGAATAGCAGATTTAATCAGAAATT
-CCCACCTGGCCCAGCAGCACCAACCAGAAAGAAGGGAAGAAGAGAGGAAAAAACCACAgg
-aagaaagaaaggagggagggagggagaggaggaaggaaggaggagggaagggaagggggg
-aagaagggagggagggagggagggaaagaaagagggaggaagggCAGAGGGAGCAGGGAG
-ACTGTAGATCAGGGTCTGAATGGAGATCCGGTCCTGGAAGTAAATGATCCAAGGCTCCAG
-GTGCTGGGAAGAGAGCAGGAGGGGAGGGCGGCCCATGGCACTGCCATCTAGAAGGGTAGT
-GGCTCTTCCACAGGAATGTTGAGGATGACATCCATGTCTGGGGTGCACCTGGTGGGAGGC
-AGCACAGAAGGCCATGAGAGACCAGAGGTGGCGGTGTGGGAGCACCCACTCAGAGGAGCC
-CTGCTCTTTAGAACTCTGGTACGTACTTGGGTTGGGGGGCAATCCCAAAATACAATCTGT
-GATCTATCTGTGACCTCAAAGCCCAACTGTGcatacacaagcatacacacacacacacac
-acacacacacacacacacacatacacacacaTCAAAAATGGAAAAGAAATGAGTTTGGCA
-GGACAAATGTTCCCCTGACAAGTCTGAGGTCAAGAGGGAGCAGGAACTCAGCTCTGAAAT
-GCTGAGGGCCCTCAAGATgatcactggctttggagtgaggatgacaggtttgataacttt
-gacctgtgtcaccttgagcaagctatttctactctcccagcctcactccttcagttgGCA
-CTTAAGTGAAAAGCACTCATTAAGTCCCAGACCCCAAGtgagcctcagtttcctcatctg
-tcaaatgggtttaatattctaacctcagtcattggtggaaagattaaatgagaccatgcc
-agcaggtaataagtgctcagtaaatgacaggcaTTATTATTTCCATGAAAGTAGCAAGAG
-AGATGGATTCCCATCAGCAATATATTCCCCATTGCAGGGACCAGCACAAATATTTAAGAG
-GCTGAAGGATTACATTCTGTTTCACTCTCTTTTCTCTCTTCCAAGGAGACCATCCTCTCT
-CATGGTTTCAATAATCTGCTGATACACATGAAGTATTTAGGCAGGAAATGTCAGGATACT
-TGCAATTTACAAATACTATTAAAAAAATGAACatgaaaccaacatagaaaaaaaaaaaat
-ttctaaatctagatgggcaaaactggctattcattatatcattctctcttctttatattt
-gaaatttttcataataatagtaaaaaaaaaaaGTTcatctctatgctggcaacacctaaa
-tttctacttccagccaatatctgtcctctgaggtctacactcatcttgtcaattgcccac
-ccaatgactccaccttggcacctcatataaatcaaacttactgtccaagtcaactgtatg
-gtttttgttttgttttgttttgtttgagacatggtctcactcggtcacccaggctggaat
-gcagtggtgcaatcacagctcactgcagcctggaactcctcaatcgatcctcctgcctcc
-caaatagctgggaccacaggcacgtgccaccacatctggctaattttttaattttttgta
-gagatggaggtctcactatgttgtccccctggtctcgaactcccagcctcaagcgatcct
-tcttcctcatcctcctaaagcactgggattacaggtgtgagccaccatgcctgcctccaa
-ataaactttttgactgtgcctacatacacatccctcaccccgccccagccttcccaatct
-ctgcatttgacatcaccaccaccccattataaaagtcaggaacccaggggttattcttga
-tacctccctttcctgtacttcccaagtcatgcaagtccttcttactttcctaaatatttc
-tccaatctatctatttctcccatttcttctgccacactcttggccaggccacttcccatg
-ttcccctggacaactgccctcacacccactagaattccagctgccattctggctccttgc
-caatctcatccccatgctcttttcttttcttttaagaaagagtcttgctctattaagcag
-gctggaaggcagtagcaccatcttggctcactacaacctctgtctctagggctcaagcaa
-tcctcctgccttagccttcactgcagctgggactacaggcgcacgccaccacgcctggct
-aacttttgtattttttgtagagatggggtttcaccatgttgcccaagctggtcttgaact
-cctgggctcaagcaatcctcccaccttggcctcccaaaacgctgagattacaggcatgag
-ccaccacacccagcccaccatgctcttttcaaactgacttttttggaatacaaatctgat
-catgtggcttaagatcctttgcttctgggatcaggcagaacatctgggcctacagggcac
-tgcatggaggtccctaggggctgagttgccctgctcccttcccgccactctccctgtcac
-tctgcattccaaccactctggcctcactcagctccgtgtcaatgccaagttccttccaac
-catagctccttcacaGCTCAAGGCTCAACATGTGGTtggttcatagagcagtaacataag
-catcaccgggtagcttcttagaaatgcagaatcAggctgggcatggtggttcacacctgt
-aatcccagcactttgggaggccaaggcaggcagatcacttgaggtcaggagtttgagacc
-agcctggccaacatggcaaaaccccgtttctactaaaaaacataaaaattagccaggcat
-ggtggtgcacacctgtaatcccagctactcgggaggctgagacaagagaatcacttgaac
-ccaggaggcggaggttgcagtgagctgagatggtgccagtgcactccagcctgggagaca
-gagctagactctgtctcaagaagaaggaaggaagaaaggaaggaagggagggagggaggg
-agggagggagggagggaggggaaagaaagaaagaaggaagaaagaaaaagaaagaaaaga
-gaaagacagagagagaaagaaagaaagaaaaagaaaagagagaaaggaaggaatgaagga
-aggaaagaaagaaaagaaaagaaaaaagaaatgtagattcatgagccccactgagaccta
-ctgacttggaatctgctttttaacgcgatctccaggtgtttcctgggcatgttccagttg
-gagaggcTCTGCTTAACAGTGTGCCATTTCTACTTTTTAGGAGGGAAAATGTGCTTCCTT
-GCTCCTGGTGTTCCCTTCCACGTGGAAGGGCATCCATGAGTGTATTGCTCCTGGCCTCTC
-TCTGCCCCCTTAAATTCTGCTTTTGGAAAGGGGGTATGACCACCAGAATGGTGAGTGTGA
-GGAGAGGAAGGGGACACAGGGAGCCCAGTCCCTTTCTCTCTCAGCAGCAAGAAACCCGAA
-AGGACTCCACTCTTCTCTGCCCCAAGGCCTGGCTCCACGTGGGTCCAGCTCCACCATGAT
-CGGGTGGTTCAATTTGCCTAATTCTGGGTTCACTATTCAGAGGCCAACACAGTCTCTAAA
-ATCAGCTTTACCAGAATAAAGGTGATAACCTGGCCCACATGCACCTTACCCCTTTCAGTC
-TCATTCACTGTGTTCAGAGTTCAGGTAAAGACAAGTGACTATTTATTACGTCCCCCGGAG
-ACCCTGGCAccaccgcctagaattgctcttccttcagctcccccatcagtctctttcacc
-tagtgaatttctatgcatccttcaagcctcagttcaaatgtcacatcctcaggaaaacct
-tccttgactgcccagacTTGCTGTCCTAACAGTTGCtttcttttttcttttttttttaat
-taaaaaaaaatttttttttagatggagtctcgctctgtcacccagactggaatgcagtgg
-cacaatctcggctgaccgcaacctccgccttccaggttcaagcaattctctgcctcagcc
-tcccgagtagctgggattacaggcacccgccaccatgcccagctagtttttgtattttta
-gtagagacagggtttcatcatcttggccaggctggtcttgaactcctgacctcgtgatcc
-accggccttggcctcccaaattgctgggattacaggcgtgagccactgcacccagctCCT
-AAGAGTCACTTTTGCAGTGGCATGTACTCTACTCAGCAGCTCTGGGCTCTGCTGCAACTC
-CACATTTATTTGTGGCTCATTATCGACTCATGTCCAGTTCCCTCTTTAGTTCCATGAGGG
-CGGGACCAAGGACTGTTCTCATTCACATGGTGCCTGGCATTCAGAGGCACTTCATAAATC
-CAATAGTATTTTGTTTTGGGGGCGGGGGGCGGTTTagaaatagaagaaaaggaagaaatg
-gcgataggagaggagaaggaaggaaaacgacaggagggagagacagatgaagaagaaaaa
-TTAAAGAATTTGCAAATGCTAGGCTCTGCCACACATGGTCCTGTGGTGTCATCAAGGAGA
-GGTAAGCCTGGGGGACCCCCAACCCAACCGCAGAGGGCTTGCCCCAAGGAAGGGCAGGCA
-AAGAATTGGTTTCTGGGGCCCAGAAACCTGCCAAGTGAACAGGACAGACTTCTCTCCTTG
-TAGAGTGTCTTCCAGGCTATTCTTCCCTGAAGCCAACCACCCCACTCAACTCTGCCTTCC
-TCAAAAACCCAGAAGTGGAAGGCTGTACCCACTTGGTTGACAcatgggatctgggaacta
-gaagggcccttagagattacaccacccagcctgctgtgtacagatgggaattggaggcct
-ttgcagagatgggaaaggtcacatctgcccctggtcagtggcagatccaaggtggaaacc
-caggaccgcccctccctccctgtacagggttctgccatccacACCAGGCTGCCTTCCCCA
-AGAACAGAGAGCCTCCGTGAGCTCAGAGTGTGACTGGTTTAAGAGGCAGTGGCAAAAAGA
-TCACATACTTGGGTCTCCGAAGCAGAACATCCTCAAATATGACCTCTCGGGGTTCCCGGG
-TCTGGGCTTGGAGCTCTTCCACCTCGGCCCTTAATACAGGCATGTTCTCCTCAAACTGGT
-CAATAATCTGAGAGGAAAGGCACAGCAGGGGAGAAGGGAGAGGCAAATGGCCCCCAACCA
-AAGGGAGAAAGGCCAAAATGAACGAGGAGCAAAGCTATCTGGGGAAATGGTATGGGTTCT
-GTCACTGGGACTTGCTGGACTCCAGGGAGGGGACTTCCCCATGCAAGGTGCGGCTGGCTT
-CCAAGTTAGTGACAATATTCAGTGGTGCTGAAACAGGTGAGGGATCATGGAGAATGGAGA
-CAGGTTACAAAGTGGCGGGGAATGCTCAATCATGGGAATGAATGGAGGCTGGCAGAGATA
-GTGAAGGGCATACACATTAAAAACCAGTGAAGAGGCAAGATAATGAAAATTAATTCAAGA
-AGGCAGTGATGGTGAAGTTCATTAACACTGATAATGGGTGGTGGGCAGTAACAAGAATCA
-AGGGGTAAAGATGCACGGTGGTTAATGGCTGAATAGGTGATGTTTGGTGATGGTTGTAAA
-TGGGTCATTAGCCAGCATTGCTGGCTAATGAGGCAAGGCCTAGGTCAGTGCCAATCGCCT
-TCCCAGATGAAAGACAAGTGACAGTAATGGCACCGGCAAGGAGGGAGGCCAACACCAGAG
-TCAGAGACCTCCTGAGCGCCAGATCAGGAGAAGCCTGACTCATTCCCACAGGCCGTGGGG
-ACTGCCCATCCACTGCTTCCCTACAGGGACCACCACCTTCCTTGCCCACGCACTTCTCTG
-AACCTTTGCATGCATTTCAGGAAGTCCTGGCTTTCCCACATCTTCTGTAGGAGAGCCTCT
-TCATAGGGACGCTGGGTTTCCTGTGGAGGAAGAAGAGGTCTGGCCCCCAGGTGCCTCTTC
-CTGGGCAGCAGAACATGGTAGAGACCGATGGGGCTGCAGTGGGCCTGGAGGCAGAGGATG
-GGGAAGAGGGCGGGGTGGGGGTGAGACCTGGATCCCCGCTCCCACACAGCAACTGGCTAC
-TCACCGCCACCACAGAACTCAGAATTTTTTTCTTCTTCTTCTGAATCTTGTCAGACAAGG
-ATTCCAGGACCTTTCTGCGCATCTCACCGAGGTCATCCAGCTCATCCTGGGAGCCAGCAG
-AAGGGTGTTGGTCACCAGTCCTGCCTCCCACACAGTCTGGTGGGAGAGGGGCAGGGGCTC
-CCCTACCTGCTGGCTGTCCTTAACCTGCTGCAGCTGGCGCATAAGAGTGGAGATCTGGAC
-AGACTTGATGGAATACTCATGGTCCATGTAAGTGCTCAGGAAGTTCACTTCCTCCTGGGT
-CTTCTCAATCTTGGCATTCAGCTGCTCTGCCTGCTGCTCAAGATCTGGGGAGGGGTTAGG
-GAGGTCAGCAGGGACAGGAGGCAAGACCTTCCCTCAAGCACCTGGGCCCCAGGAGGCCCA
-GGAGGCAAGGTCTCCTTGGCCAGTAACTGGGGTCTGGGCTGAGGTGAGCTCACACAGGGC
-TGGGAGGTGGTTAAAAGTTAAGGCTCTAGACGGTTTTCCACCCCTGCAGGAGAAGAGGCA
-ATgctgggtaggaaaaaggaagggaattggtgcatgatccctagactagtccccactctg
-ccactgacttgccgggtggctctcgccaagactgtccctctccagacttcagtctcctca
-GAGACACACTCAAGGAAGTGAGACCAGGCAGATGGGGTGACAGTGGCTCCCAAGACACAA
-CCCATGGCAGGATTAAGACAAAGTCTATCCTGTCTTCCTCCAGAGAGACCCCCAATGTCT
-GGGGTTGACTGATCCACCACCCCTCTGCTCAGCAGGTGTGTAGTCTGCTCAGGGAAAAGG
-AACCACAGGCCAGGCAGGAtggaagccaggagacccaggttctagcccagccactgactc
-ccagaaggaccttggCAGGAAACAgagccaggctaggattggattctggctcctagctat
-ataaccttccacaagctactgcacctctcttagcctcggtttcctcatctgtaaaatggg
-aggacagcttccctgcctccaagtagttgcaatgactgagtgtgtgcctgtaaCAATGCA
-GACATTGGTAGAGACCCAGATACGGGGCCTGGAAAGAGCTAAGTGTTGGGTAACTATGCT
-ATTCGCTCTGTATCTTAGCATTCCCATCTGCCAAGAAGAGAGCCAATGGGGCTGAGGGTT
-TCTGAATGGCAAGTACAAGGTGAATGCTCTGCTGCTGACCTCCCCAAGGTGCCAGGGGGG
-AGGGTCAAGGAATTTGCCAGGGATTCTTACAGCTCATCTTGCATTTCTTCTTTTCTTCCC
-ACTCCTGAAGCTCAGATTTCAATTGCTGCAGCCTCTTCTTGTTTGAGTACTCCAAGATGT
-CGATGATGGTCTGCGGGAGGGGTGGAGTCAACTCACCCACAGGCTCTGCTGGCTCTCAGA
-GGCGGCCACCCAGCACTTCCTCAGAGGAGTCCCCAGTCCCAACCTCACTCCCAGAAACCT
-GACCAGAGGCTaatcgggacagtaacagtgtccacccatagggttgttgtaaggactata
-taaagacatacagatcgcttGCTATTACACGTAGAGGTGTTTGCAAATGCTGTTGGTGGT
-AGCAGCGACCTCTGTCGCACCGGTACAGTATGTGCCCGGTGAACCCCCTCTGGGACGGGT
-GCTATGGTGCCGCATTTCACAGAGCTCGGGGAGGCAAAGTTAACTAAAAGTCTCCCGGCC
-AGTGAGTGCTGGCGCGCTGGGATGAAACCCATCTCGGTCCTCTTGCAAAGCCCAGGTGAG
-GGGAGTGAAGGGTGAAGAAATGCGTCTTCCAGGTGGAGGAAGCACCACGTGCAGTGGGCG
-GGGAAAGGCAGGAGAGGGCGCGCGAGTGCGcggagggagggcgggacggagggagggagg
-gcgggacggagggagggagggagggacggagggcgggacggcgggagggcgggacggagg
-gacggagggagggcgggacggagggcgggagggcgggacggagggagggagggagggagg
-gacggagggcgggacggagggacggagggagggagggagggacggaggttgggacggagg
-gacggagggCGGGCGGATGCCGCGGGTCTCACCGCCAGGGTGTCCTGCTGCTGCAGCAGG
-GCCCGCACGTGCAGGGTCGTGCTGTTCTCCATCTCCTGGATGGTCTCGATCAGCTCCCGG
-TTGAGCTTGCTGAGGAAGTTCTCACGGCTTCGGAGCTCTCGCAGAGCGGCCCTCCCGCTC
-CTGAGCGAGGTCTGCGGGCGGAGGGAAGAGCAGAGAGGCGGCGCTGCGCCCTGCCCGGCC
-TGAGCCCCCGAAAGCCCGTGGAcccgccgccccggccccgccagacgcccgcccccgTGC
-GGCCTCCTGCTGGTAAACGCGGCCCAAGCTGGGCGGTTCCCCATTGTCTGCGCCGCCCGG
-GAGCTCCGGGACtctcatccgttcggaaacgcacgtgtacccatcatctcacatccctga
-ggtgcgggtgcatctacagttggtggcgtgtcaccaactaatcaacaaatatattattag
-tgggtaaataaagatgtgccttcatatcaatggcttctcagaatcaatgaaatatagAAA
-TAATAGTAAGggccgggcggggtggctcacgtctataatcccagcactttgggaggccaa
-ggtgggccgatcacgaggtcaagagttcgagaccagcctgaccaacatggtgaaaccccg
-tctccactaaaaatacaaaaattagccgagcgtggtggcgcgtgcctgtaatgccagcta
-ctggggaggctgaggcaggagaatcgcttgaacctgggaggcggaggttgcagtgagcga
-gatggcgccactgctctccagcctgggcgacagaggaagattccTGTCCCaataataata
-ataataataaACGCCCCAGGTAGGTTAAGAAGGTGGCAGAGCGACCGCCATGTCTGGAGG
-AGAAGCAGGGGAGGCAAAATGGATGATAAACGTCAGCATTTCCGGGCAGGCCGCGGAGTC
-AATGAGTACTCTCATTTCACACAACAGCCCCCAGTGGAACAAGgagggtctgagggttaa
-gtgactcgcctaaggttacacccagcaggtgcataaaaccTACAGTAACAACAACAACAA
-CAATTGTACTTCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAATAACA
-ACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAAT
-AACAACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTaa
-caataacaacaacaattgctgagggccctctacatgccaggccaggtgctgtgccttgct
-ctgcaggtggcacatggtatctgttcaccctccaacagctttatgtttactaactctatt
-ttgctgataaatggaggctcagagagtttaatgacttgcccagtgtcacacagtcaagaa
-gtggcagggctggaactggaaagccagacttctgaatcccaatgtctgtctttccgttat
-gctaAAACAAGAACTGAGTAGCCTTAAAACTGCAAGGCATGGCTGAACCAcgtagtgact
-aagacttggatgttgaacctagacacaccttggttcaaatcccagctcagccacttacca
-tctaagagaatctgggcaagttagttaatgtctcagagcctccttatactcattctaaag
-gtaaggaaactagtatctgttttagagaactgccgtaaaatataaatgagATTggacagg
-tgcggtgactcacgcctgtaatcccaacactttgcgaggcccagatgggaggatcactca
-aggccaggagttcaagaccagcctgggcaacatagtgagacctcatttctacaaaaagta
-aacaaaattcgctgggtgtggtggtgtacacctacagtcctagctactcaggagtctgag
-gtgggaggaatgtttgagcccagaagatcgaggctgcagtaagtcaagattatgccacca
-cactccagcccgggtaacacagcaagaacttgtctctaaaagtaaataaataaataaata
-aataCAATTTTaaaaaattaaaatgttcgctgggcatggtggtgtgcacctatagtccta
-gctacttgggaggctgaggcaggaggatctcttgagcccaggagtttacggctgcagtga
-gctatgattatgccatttcactttagcctgggtgacagagcaagaccctgtctttaaaTT
-CACAATCAAGCCACTTAGTGAGAGTGCACTCATGTGCACTCAGTGAACAATAGCTGATAC
-TACTGTCTCTGGCTCTAACCCTCTACCCCTGCCATAAATATTTGCTCTTTCATTTGTTCC
-TGTACTTCCTCATTTCTCCGTCCTTTACTAAAAACGACCCCTTCCTAGCCCTCAGCTCCT
-TTATTTCTCATATaacagtaatcatgctgatgtgctgagtgcttgccatgtggctgatac
-tgtactaagcacttcatgcgcactgcagcacatcaccctcacagcaagactaagagatgg
-gcactattattaggccaactttataaaagtggacagcagtcgggcacagtggttcacacc
-tgtaatcccagcactttggaagagcaaggtggaaggactacttgagcccaggagttagag
-ccctgggcaacaaagggagatcccatctctacgaaaattagctgggcatgatagtgcatg
-tctatagtcccaactactccgagaggctgaggtgggaggatcacctgggctcggaaggtc
-caggctgcagtgagccatgatcatgccactgcgctccagcctggatgacacagcgagacc
-ctgtctcaatcagtcaatgtggacagcaaggattaaattcagtaacttattcaaggtcac
-acatagcagagctgTCATCCTTGAAGTCTTGCCTCCTAGCCACTCCACTACCTTGTCTCC
-ACATCTCCAGACCAAAATACCCAGAAGTATCTTGTGAAAAATGTTATTCTCCAAGTCCTG
-GGCCCACTGAAACAGCAGCACTAGggtttcagttcaaatgtcacccaccttagcagcctc
-tcgttagcacctaaacaattactgccacactctcctccgtgcctccagccccctaacctt
-attcttaggcttctctttagctcttatcatcatttcaaatatctttctcttgttgattgt
-cagtctcccccatccaatagaatggaagtcccctaagatcagaggtcacattactggtga
-accctcatactcagaatagaacctggcacatggtaggtgctcaatcaatatttgttgatt
-cattaaatgaatGAAAGATTGCAAGAGACAGTATTAAGAACTGGACtggttaggagcaca
-agttttagagccaaattgtccacgttcAGCTTCTACATCAATCAAAAACACCTAAACCCC
-TCTAAAGTTAGGATAAAAATAACAGAAATggctggaagcggtggctcacacctataatcc
-cagcactttgggaggccaaggcgggcagatcacctaaggtcaggagttggagaccagcct
-ggccaatatggtgaaaccccatctctactaacaatacaaaaaattagctgggcgtggtgg
-tgggcgcctgtaatcccaggtactcaggaggctgaggcaggagactcactcaaacctggg
-aggtggaggttgcagtgacctgagatcttgccactgcactccagcctgggtgacggagtg
-aaactctgtctcaaaaaaaaaTTTTTTTAAAAACTAAGAGAAATATGAGTTCCTCCTTTA
-AGAATACTGGGCTACCTCTAAACCATTTTGCAAGATAAAAGGTTAAAGGGGAAAAAAAGG
-TTTCAAAGCAAATTATATTTTCCCTTGTTCTTTATATAGTAGTCATTGTTCATTGAGCTA
-TTAAAAATTTTCTTGAAGAATTATTCTATAGTATTTTGTAGTCTTTATAATACTTAGTAT
-TTTACTTTCTGCTATGTATGCTAAGGACTTGTCTTCCTTTAGGCATTTCAAATACTTTGA
-GACATTGTTCAGATAATTACAGAAGCCATAAAACAATGTATAGCGAGGAAATTAATTACC
-TACAATTGTAGCGATTGATGTGAAAATTTTCATTGTCAGTTTCTAAGGCTTGCTTCAAAG
-TACACTGTAAGAAAATTTAATTTACTGGAAttttttttttttgagatgaagtctcactct
-gtctcccaggctggagtgcagtggcaccatctcagctcactgcaacctctgcctcccagg
-ttcaagccggtctcctgcctcagcctcccgagtagctgggactacaggtgcgtgctacca
-cacccagctaatttttgtagtttgagtagaaacggggtttcaccacgttggccaggctgg
-tctcgaactcctgacgtcaaatgatccacccacctagacctcccaaagtgctgggattat
-aggcatgagccaccacacccggccAAGTTGCTGCAAATTTTAAGATAAATAAGCCACTAG
-ATCGTGTTCCTAATGCAACAAAATAACAAGCAATTCTGATTATTTCTTGAGTCTTAAACA
-GAACAGCAAACGCTTTGTTTAActggctttgacccctgatcctgccatttcctggctgtg
-tgacctggtgcatgtcatttatctccctgcgcctcagtttcccggtttgtaaaataggaa
-caaggataagcgtgctcacacagttcctgtgaggaagaaatgagtcaagtctggcaccca
-caaagttctcagcacatgtttgctacaGCCATCATCCCCGTCCCTGTCCTGGGCCCAGTG
-TCCAGGGAAGATGTGCCTCATACCTTCATTAACCAGATTTTGGCATGCATCTTCCCAGGG
-TCCAACTTCCGCCTTCTATGTAGTTCTCTTGGATTCTTCGGCTGGCAGCTTGTCACCACC
-GTAGTGGGCTTGAAGTGAAACACTAGGGGTAGACAGGAAAGGACAGGGAGAGAGTGAGGG
-TCCCGGAAGGCCTGAGGCCAGGTTCCCGGGAGTGCACCATTAATGAGAGGAGGGCCAGAC
-CCCAGCTCCACCCTCTGACTGCCTTATAATGTGACACTAGACCGAGGGTGAAATTCACAC
-CCTTCACTAAGCTCCCAGGACAGACTCTGGGCCTCAATATGAGGGAGGGACAAGCCCAGG
-TGAAAGCAGTAACTATGGACATGGACAGAGGGGAGGGCAGGGCAGCCAGGAACCCCGCTC
-TCAAATGTCCAGTCAGAAAGAGAGTCGGGAACTCCCACTCCTTGTGTCTTTCCAGTAGCT
-ACTgcagcacaggacagcagaaagaccagagtctggcaggcctgaatccaaatccctgct
-gtcccaccaacctggctgGCAGAAGGCCTGatggggtaggggttaagagcaagaactaat
-gagccagacagtccaagtttaaatccaggctctTggccaggcatggcggctcacgcctgt
-aatctcaacactttgggaggccaaggcgggcggatcacctgtggtcaacagttcaagatc
-agcctggccaacatggtgaaaccctgtctctattaaaaatacaaaaaatgagatggacat
-gatgatgggcgcctgtaatcccagctacttgggaggctgaggcaagagaatcgtttgaac
-tcgggaggcggaggttgcagtggtgcgagatcccgccactgcactccagcctgggtgaca
-gagactctatctcaaaaaatatatataatcataaaaataaatttttaaaaattccaggtt
-ctgccttctactagctgcgtgaccttgagcaagtcaaatgacctctgtgtccctccattc
-gtccacctataaaatgggaataatcatcacgcccacctcatagagtcttcctgaagatga
-aagaagttactataccttaaaggtgtttggaatagtgcctgatgcatattcagtgctgga
-tacacattaccagttgttactCTTACTTCTAGTGACCTGAGAAGTGGGACCACAACACCA
-GACGAAGGCACAGCAGCCACGCAAAACTCCAACTGGCTGTCTCTGAAACACTCTAAGGGC
-TGTGGTTCTGCCAGATAAGAGTACAGGCATTTGGGGGGCATATTCTCAGAATCCCTGTTT
-CCTCTCTGCCTGTCGTGCAATGACATGGGACAAATCGCCCAGGTGGATCCAGCTGTACTC
-TCAGTCCTCACCAAAATCCCTGCTTCAGGTACAACCCAGCTCATCTGGGAGAGATACTAA
-TCTCTTTAATAGATCAATGTCCTTCATCCTGAGAAATGCTGGCATTAACTATGGAGATGA
-TTAAGTAAATTAATTTTGTGTTTAATTTATAAATTACCTGTATATATCCGGTTTTTAGTT
-GTATTGTATAAGAGATAGAATGATTAATAGGTTAATCTTGTGATTCTAATTTTAAAAGTG
-TAAGTGGGATTTTGATTTAGATTTAAGTTGAAAGGTTTAATACACTCTTATTAGCTCCgt
-tgcccaggctggtgttcaatggcgagatctcggctcactgctacttctgcctcccagatt
-caagcaattctcctgcctcagcctcctgaatagctgggataacaggtgcccgccaccaca
-cccagctaattttttaatttttagtagagatgcggttttgccatgttggccaggctggtc
-ctgacctcaggggatccacctgcctcagcctcccaaagtgctgggattacaggtgtgagc
-caccgcgcccggccAGATTACCCATATTTAGAAGTTTAAGTATTAGATATACAAGAATTA
-TGTAAATACCCAATGGTTTTTGTTAATCAGACAAGTGAACCATTTGAAAATGAAAATGAA
-TACGTTAAAATTTAAGATGTGGCTTAAAAGGTTTAGGAGAATTTAATTAACCAAGTTCCA
-AAACCCCCTTACAAGTGTTTATAAAAATTGTAAGATTCTTAAGTTGAATTTAAATGCTTA
-AGGAAGATTTGCAGTTTTAATAATGAGGATTTATTTTCATTATTGGTAGTAGCCCTAATT
-TATCtttttttaaattaaatcttttattacaagatagttcagattcacaagcagttttaa
-gaaataatacggagGggctggccgtggtggctcacgcctgtaatcccagcactttgggag
-gctgaggcatgtggatcacctgaggttaggagttcaagatcagcctggcgaacatggtga
-aaccccatctctactaaaaatacaaaatttagccaggtgtggtggtgcacgcctgtaatc
-ccagctacttgggaggctgaggcaggggaatcgcttgaacccgggagttggaggttacag
-tgagctgagatcacaccactgtactccagcctgggtaagagagacagagagagagagaga
-ctctgtctgaaaaaaaggaaaggaaaggagaggagaggagaggggaggggaagggagggg
-agaggaAAAGGAAAAGAAAAAGAAAAAGAaaaagaaaggaaagaaaaggaaacagaggta
-gtctatgtaccctttacccagtttctcccagtggcaacatcctgcaaaagtacggtacaa
-tatcacaaccaggatattgacattaagatgagcaagatataggactttcccataaccaca
-aggatcctgcctgtcgccttctacaaccacacccacttccctccccttaccaccctcctc
-acaactctgtccctaacccctgcaatcactaatctgctctccatttctataattttgtga
-tccccagaaggttatataaatggaatcatccagtatgtaactgtggggattggctttttt
-ttacttggcataattctctggagattcatccaagttgttgaatatatcaatagttctttc
-ctgtttatcgctgtatagttttccacggtggggatacaccataggttgtttaaacattca
-cccactgagggacttcaaggttgtttccagttttgaggaattatgaacgaggctgctatg
-aacattcacatactggcttttgtgtgaatataagttttcatttctctggaataaatgccc
-aagagtaaaactgctgggtcggattactaggaagtgcatgtttcatgttgttagaaatgg
-ccacacttgtttccagagaggctgcatcattttaccttcccaccagcaattgcgcacaat
-ctgacgtctcctctttgctagcatttggtgttatcactatttttttattttagccatttc
-gataggtgtgcagtgatatctcactgtggcttaatttgcattgccccaatggctaatgat
-gttgaacatctttttaatgtgcttatctgacatctgtatatctgctttggtgaaatgtct
-cttcatgtctttttcccattgcctaactgaattgtctgtttcactgttgagtttttactg
-ttactgatatattctacatagtagtcctttgtcagatacatggtttgcaaatattttctc
-caagtctatagcttgtcttttcatcctcctaaaaaggtctttcataaggccaggtgcagt
-ggctctcacctataatcccagcactttgggaggctgaggcgggcagattacttgaggtca
-caagttcgagaccagcctgtctctactaaaaatacaaaaattagccaggcatggtggcac
-acgccttcagtcccagctactcgggaggctaaggcaggagaatcgcttgaacccgggaga
-cagagtttgcagtgagctgagatcgcaccactgcaccctggcctgagcaacaaagcgaga
-ctccttctcaaaaaaaaaaaaaaaaaaaaaagtctttcacagaacaaaatttttaatttt
-gatgcagtccaattcatctatttttcttttatgggtcaagcttttggtgtgatacctaag
-aactcttcacttggccctaggccccaaagatttttctctcctgttttcttctaaaagttt
-ttcagtttcacattttacatttaatttctattttattttatctttgagctaatttttata
-ttcgttgttaaatcatttctttctttttctttttctttttttttttttttttttttttgc
-ctatgggtgtccaattgctccagcgccacccatggaaaaggctttcttcctccactgaat
-tgtttttccactttctgaaaaacccattgggaatattggtatggatttattccCTTTTCC
-TCACTGGGAAGTGTTGGCAGTGTCCAGCAGGTAGCTGATCCTTCATTCCCTGCTTGGTGG
-TGCTGATTccccaactgggatagtgctggcagggatgagtggggaggtcatcttctaacc
-cccacctggcagaagacagtgctctgactctctctctagggtagtgtcaacagagtctag
-cagtgacaagatttcatgaagtgtcatgaggtgggactcatcacctctgggcttcactcc
-cctcccccagcctacctatgtcagtagagcctggtgggagcctgagcctctatccccacc
-cagcatcagtgaggtAAAATAAGGTAGTGAGATGCAGGGCAACTTGGCATTCTACTCTCC
-CATCTCCTTTCTGTGTTTCAGTGTTGCCCACAGGGGAGCTGATCTAACATTACTTACTCA
-GAGGCAATGAGGTGGTATGAGTGATTTTATACATAGAtgtatacataagtatgctagatt
-gtctatgaagttcatttcaggataccaaagaaatattacaaaatatttgttattaattct
-cacaacaatcctaggtggtattagtgtccccatttcacaaatgagaaaaccaaggctcag
-agagatgaatgatttttccaagtgagtaaatggcagagccaaaatctgaccccatgtctg
-cctgagcctgacccaaggccTCGGAACTCCCCTGTAAAGCATGATAATGAtgtggcagag
-tttattctacgatttcaccaaaccttgttttcttttcctcctggaaaaacagatggacta
-catttcccaccttcccttgtggttagcagaggtcatgtggctaaattatggcccctgaaa
-catgagtaggagtaacatttgtcacttcaaatctggaccccccccaaaaaaaatgcccac
-ataattgtccatgttcttgttctctctcttccctctatgccagctggatgcaaaagtatc
-cagcagaagacttcaagaccttacaaaatatcagacccacaaggtcaaaggaacctggat
-ccctgaatgaccatgtggaacagaatccctccttcctcagatccacaaatgtactgtggc
-ataaatgagatataaacttctatatcaatacttgcaatttgggcattgtttattacatca
-gttagcctaccctaaTATAAGTGGTGTCACCAAGAGCCAAAAGCAGCCACTCTATCCTGT
-CTCCAACCCCCACACCAGCTCCCAGGTGCCTCCGCCCACCTGGTTGGACCCTAGTCAAAG
-TCTTCATTTTGCTTGTATGAAGGCTGTTGGCTTGTTGGACTGGAGGCAGAGTAGATGGCT
-TGGTTTCCTGCTTGGACTGCTGCCATGGAACATAATCCTACAAAATATACAATCagtcac
-atagcaccatgagtttatatcccagctctacccttttcagatatctgtgaccccaagcaa
-gtgacttgacctctcctgagcctcaatcttctcatctgtaaagtggatctaataataaaa
-cctacttctgtggattggcgcaagaattctgagagatatttatgaagcatgtggtaagtg
-ctccataaatgttagctatcactTTTTTAAATCAGCCAGCCAGAATTTACTAAGCACATC
-CAGGCTGTGAGGTGCTAAGAACTGTGAGAAACAGAAGGCATGGAAAAGACGCAGACATCC
-ACCCTCAGGAAACCAGAGCAGCAATCAGATGAATAAGAGAGCAGCATAATATACCCTTAC
-ATTCTGATAAGACAGTGagaggagaaaaatgaggttctgaggcttgctctgggtcccaca
-gcaaagtgtgacccggctgggactggaattcgggtctccagcctATATCCGCGGAGCAGT
-CACGACCGTGAGAGTGGAGAGCAGGTGGACTGCAGGGCCAGCGAGCCTCCCACCCCAGCC
-CTAGTCCCCCAAGACTCACCGGAACCTGGAACTCCTGGACTATGGAGTGAGTCCCAGAGT
-GCTTGGGTCTGGAAAGAGTTGGGAAGGGAAAGAACTTCCATTATCCCCAGCCCAAGGGGC
-AGCAAGCAGCAATTCGAAACAGGATTGGAGTCTCGAACCAGAAACTGCAGTTTACCGGGG
-ACAATAGCCCCGCGGGAGTGGGGCGGGGCCAAGGAGATGTGGGCGGGGAGAGGACGGGGG
-TCAGAAGACCGAGGGCGACCTCGAGGCGAGGGCGGGACAGCGGCGGGGTGTGAAGTACGC
-ATGCGTATTCCGCCTTTCTTCCAAtttttttttttttttttttttACCTACTTTTGTAAG
-ACATGCGCCATTGGGGAAAATGGAAGAGAAGTTGCGAGTCTGTGAGACCCTGATCTTCTG
-GTATAACTACTCGGCTTTTCCAACTTCCTTGTCTCAGTGTAGATCGCGCGGTAACCCAGG
-CCACTCAGAAGTCCCGAGACCCGATGCTTTCGCCAGCGTCTCGGTCTCCAAGGAAACGCG
-ACGCCGCCTACCGAGCGCCTAAAGGGACTAACCTCTCAAGGCAAAATCTAGTTCGGCCCG
-CTTTTCAATTTTCAAAttcccttcagtttgctctgcccataatcctaaaatatgatatca
-tatttctccactctcatcaaacttccaccatttccttcgccatcttcactcttggctaat
-gagtttgcttccaattttactaagaaaattgtgggaatcagtaaacccacaagttcatgg
-catcatttactcgcctacttgcctccctcccgtaactacgtataaactgcctactaagac
-caattcctacatttatgcaccgaatcctatcctctcacgttttctcaaagatattggccg
-agcagttctccccgttttttcctcctcttttctctctcctttgtatcatcagtataccaa
-cgtatttttaaatttcttctatttaaaaagattgtccacagccggacacggtggctcatg
-catataagcatgagagcactttgggaggccagaggtgggaagatcgcttgagccagaaag
-gtccagtctgcagtgagccacgatccagccactgcattccagcctggttgacagagcaag
-accctatctctaaataaataaacaaaccacttcccctccagccagctcccatttctgctt
-cattttaaagcaaaactcctagagaggtttgcctactctgtttcccatttttttccctcc
-tctcaatcaggctttcactccccactgaaactgccctcgtcaacatcattggtgacctcc
-actttgctaaaccccatggtcacttctaggtcctccctttatttggcctgtctgcagcat
-ttgacacaacagatcactccctcccctgaaacactttcttaacttagtatccaggaaacc
-actcttgagttgcttcctgcctccttttcagtctcctttgctggttcctcctcttctccc
-tttatcattgtagtatcccaggactcagtcccagccccctcccttccagtctcatggttt
-tgaataccatccgtacccagatgcctctcagactcacgtctccatcctccccctgaattc
-cagccatgtacatccaactgcctgcttgggccccttataagcaactctaatgtgcaatat
-ttttccagaaacatttttcccgaacttaaaatagggcatctctcttcttggaatcatcct
-taactcatctcttatcccacatccatcagcagatcctgttgcaataacttcaacgtatat
-ctggaataggaccacACATACACACACACACACCCCTCTTTCCTTTTGTACCCCAACTAA
-AGTACTAGTTCCCACCCTTGCCCTACACCAATTCTCTCTCTACACACCAGATTTGCTAGA
-TAGAGCACGGATTTAAAAGAGAATTCCAGTTTAAAAGATAATTGGGCGGGAGCAATAATT
-TTAAATCACTTAAACTTCAATAGGGGAACATTGCTATAGAATACCATGTCAGAGCTCCCA
-ACCTTTTCTGCCTCTTAAAAATCACAGGAGAATGTGTTTAAATGCACTGTGGTAAATAGA
-AGCAGCTGCTAGGATAAAAAGCAATTAGCCCAGGTACTCTGGCTATTCAGGCCCCTCCTG
-GCTGACCCTAGAGCTGAGGGAATCACTGTGTTGGGTACCCTCATTTGCAGAGCACACCAT
-ATGACAGCACTCTTGCTGGGCAACTCTGTACCAGGAAACCATTAAAAAGTAAAAGATAAA
-ggccgggcacggtggctcacgcctgtaatctcagcactttgggaggccgaggcagatgga
-tcacctgaggtcagaagttcgagaccagcctggccaacatgatgaaaccccatctctact
-aaaaatacaaaataggattagccaggcgtggtggcgggtgcctgtaatcccagctacttg
-ggaggctgaggcaggagaattacttgaagcagggaggctgatgttgcagtgagccaagat
-cacgccactgcactccaacctggacaacaataatgaaactccatctcaaaaaaaaaaaaa
-agtaaaaGATAGGAATACAtgacagatccaggtagtgacttactcaacagccattcctcc
-ccatcatcgcaactattggatcctgatcttgtccatgtatgcacttgccttaatggaggc
-aggccccaggtccagccctagtcctagtcccagctccaatagtcatgactgtctgaggct
-ggacttggtgagccaatttccctttccagttagaggtctagtcatagatacatgatgaaa
-gtctggctaagaagacaggatgagaaatctactcaaaggcttttgggaaaggttttcatc
-acacttttaaaaaaaggcattgcagaaaaacattccttcatctgctggtagacattgtca
-tatctgtgtgggattcctggaatcgcggaactgtgaggggagttggccaaagaggatata
-cagtgaatggtagagaggaaaatgtaaaaaccttcttccttgatagcactgttgagccat
-taaattaaccaaccctagcctggcacaatagtatgtgcctgtaataccagctacttggga
-agctgacgcaggagcatcgcttgaggccaggcatttgagatcagtctgggcaacatagtg
-agaccacatctcagaaaaaaaaaattttgttttaattagccagatgtgatgatgtgcacc
-tgtagtctcagctacttgggaggctgtggtgggaggattgcttgagcccatgagtttgag
-actgcagtgagctatgattgtgccactgcacgccagtctgggcaacagagtaagattctg
-tctctaaaagaaattaattaattaaattaacctttcacctatctagaaaatacttgagat
-taaataagaaatcacattactgggtgagcaaatttgagttgagttttctggtacttgcag
-accaaaagcattttactgaACCCTACGTCtggaggaacaacaagatagaaggaacctggg
-tgggtccctgacaaccttgcaggagaaagtcacctacctgtccttactgcctgccaaatt
-ccgagctgcttcatcaaagagaaataaacctccaccttgtctgagaccctgtatttgaga
-gtccctttgttacagtagcttaacctgtaccttgattaatacaAAGAAGAGCTTGGCCAC
-TGTCAGACAGCCTTCCTCATCAGACATGCTGACCCAGCATGGACACCCACTGAGAGCTGC
-CTGTGCCCCACATCTCAGGTACTTAACCAGTAATATTACTGCCTCCCACTTCAAtttttt
-tttgtttttgagacagagtttcgctcttgttgcccagactggagtgcaatggcatgatct
-tggctcaccacaacctctgcctcccgggttcaagtgattctcctgcctcagcctctcgag
-tagctgggactacaggcatgcgccaccacaaccggctaattttgtatttttagttgagac
-ggggtttctctatgttgctcaagctggtctcgaactcctaacttcaggtgacccgcccgc
-cttggcctcccaaagtgctgggattacaggtgtgagccaccgcacctggccCCACTTCAA
-ATTTTTAAAAAAAATACATAAAAACATTTGCAAAAATGCTGCCATCTTAATCAAAGCCAA
-AACACACTTGAGGGGCCACTGACAATCACCTGTAACAAAGCTGTTGGAACTGGGATTGAA
-TCAGATGGGGTCCATTTGCACTTACACCTGTTCAGGTGGCATTTCTGTGTTCACGAACAC
-CTGATGGAACTTCCTGCCCCCAGGATAGGTGGGCAAGATGAGCTGGCCTTTCCTCCCTGC
-ACATGTGAGGTGATAAATGTGATAGAGGGCCTCTCAGGCCTGCTTGGCTCCAGGCTCAGC
-AATGGCAACCTGGGCTCTGATTCCATCAACATCTTGCTGAGAGGTGGACTAGGCTGAGCA
-GGCAGTCTCGGGCTTCCATCCATGTCATTTGATGTGCTGGCTTTGTGGCAAATGTGCACA
-GCATCCTAAACCCACAATCCCTACTGTTGTCACTGGGTAAGATGCCGTGGTTCTTGTGGA
-GACACCTGCTATACTCGACATAACAAGATCCTAGACATTCCTTCTTATCATCTGCACAGC
-CCTCCAGAGCTGCTCTCTCCATACGGCCTCAGTGCCCATCCGGACTGCTCTCCTTGCAGG
-GTACCTGCCTGGCCCCTGTAGCTCCTGATGTAATAATCTCTGCAAAATTTGACCTGGAAA
-AAATGAAACTGACCAAAAGGATGGCCCTACACATACCAATGAAATTGTACAACAGAAGAA
-GATATGATTAGCAAAATTGGACATGGAGCCAGAACCTAATCCACAAGTCAAATATTTTCA
-AAATACAGACAGATGCCTTTAAAGTCCAACACAAAACAAAAATGCTCAAAATACGTTGat
-tatatgagagttcctgactagtgcagtaagacaagaaaaagtataagatttgaaaaaaga
-gacaaaaccttcattattcacagacgatatgattggcaatacagaaaagtaaagagattc
-caaaaaccactggaaattttttaaggtttcaactttgttgccagatatggggtcagtaca
-caaaattcaatcgtgtttcctctaacggacaccaacaaaccatatgtaacttctgattta
-caataatttcacttacaatagcagtcaaaccacgtggtactttggaataaatccccaaaa
-gtatgtaagacctttatgaagaaaactataatattttattgaaattcataaaataaggcc
-taaataagtgagaaatcaagtggggtcattgatggaaagactccgtgttataaagtggta
-attctgtacaaatgcagtgcaacgccaattaagatctcatagtttcctggaacttagtag
-gcaggttgtgaaatttatatggaggttccaaatatagctgagaccatcttaaagaagacg
-aaAGAGAGAGAAGAATGtttcccataaaagaagaaactggagttcagatttctctttgga
-aactgaaagatccccccacagtggaccctcacttctggagaggaatattcagctacagtt
-gactagcagttgccccttcagatagaatattcgatctccagttcacccagtatatcttct
-acttaaggcacctgcctgacccttgcagatatttgattatgtgaTAGTTACCTGGAGTGA
-GGGCTTAAGATAAGAGGAATGGAAGAGATTGTTTAAAATACATCTATTGTTTGGTTGTGT
-AAGTATTCTCCTCATGGTGAAACTTGACCAGGCAAGTAGAAAGAATAACAGAGAAGTATG
-TGAATCTAagacattgatgtttctggtaatggtgaagttccgagtatgatcacgggaatg
-cgtggctgagaagggataaaggaaatggtgcctgaggatataaagtgagaggactggaaa
-gTGCAAACGGCCCAAGTCAGTGGCTCCCCTGAGACCAATACCAGCAGTTGGGATGAAGGG
-AATCTGCCTGTTAACAAGGTTTCCTAGGATCTGATGCACAGTTCTTGATCCACGGCGTCA
-GAAATAAAGTGGTTAAATAAATATAAGCTACCggccgggcgcggtggctcacgcctgtaa
-ccccagcactttgggaggccgaggcgggcgatcacgaggtcaggagatcgagaccatcct
-ggctaacacggtgaaatcccgtctctactaaaaatacaaaaaattagccaggcgtggtgg
-cgggcgcctgtagtcccagctactcaggaggccgaggcaggagaatggcgtgaacccggg
-aggcggagcctgcagtgagccgagattgagccactgcactccagcctgggcgacagacca
-agagtccgtctcaaaaaagaaagaaagaaagaaaTATAAGCTACCTATACGTGGGGCTGC
-CTATTAACTCCGCcaagtgacttaactcctgcctctttatctgtaaaatgggcataatta
-cagcattgtttttggaagattccatgtaataaagtctgaagtgtgcttaacacagtactg
-ggaacttaagcagcactcaCACTTCATCCTAAATACGACGAAAGTCTTTTCAAAAAAATA
-AAAATTAATGCAATATGACTTACTTGGAAATGTATCAAAAAATAAAGACCGATGAATGGA
-TCGAGGCGTAGTGTGACAGAGTAAAATTTTAATGATAAAAAGTTAATGGTAAAATGTTCA
-CTGTAAAACTTTCAACTTTTCTTCTTGAAAACGTGCATAATCCGACGTGGGAAAAAAAAT
-AACGCATTGCAGTCAGTTCTGGGGAAACGGAAAGCTAAGTTTTAATTTTGCTATTGCTTT
-TGCTTTTTTAACAGAAAAGGTACAAAAAAGAAAAAATGGGAGAGATGTTGCCGAACTCCG
-TCCCGCCTGTGGGCTGTGGGCCGTTAGCAAAGCTGCTAGCATGAAATCGTCGAGCACCGC
-TTGCGAAACGCCAAATCCTCGAGAGCGAGGCCGGAGGCTGCCAAACCCGCGCTGGGGAAA
-GGGCCGCCTCCGGGCGCCCCATCCCGCTGCGGACGGAGGTGAGGTTGGAGCGAGCGCTGG
-CGGAAGAGAGGCTCAGCGCAGGGGGCGCAGAGCCGGCGCTGGCCAATATGCGCCGCATGT
-GATACCTTTGAGGGCGCGGCGGGGGAGGGTAGCGTCAAATTTCAAAAAAAAAAAAAAACC
-AAACCCACACAgccccggcgggcgggcgcgcgcgATGGGCGCCCTTTGGCTGCGGGAGCG
-AGTGGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGG
-AAACGGGGGCGGCCGCAGCTTCTgccccccgcgcggcccgcggcccggggcgAGGAGGCC
-GACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAG
-GGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGG
-AgcgccgggctcggcggccccgcgggcctggcggcgccggACCTCGGCGACTTCCCACCG
-GCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCC
-CGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCC
-GCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAG
-GATGAgccggcggcggcggcggcaggcccgggcAAGGGTCGCTTCCTCGTCCGCATCTGT
-TTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTG
-CGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGC
-GAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAG
-GAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCC
-AGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTG
-ACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTT
-GGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTC
-AGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGG
-CAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAG
-GACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATC
-GTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCAC
-AATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCA
-GGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTT
-TTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTT
-AAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGAC
-TGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTT
-TTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCG
-CCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGctgccttgctca
-tctttatgccccagcactaggtacggggcccaacacgtggtaggcactccatcagtgttt
-gctgaatTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCT
-TCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCA
-GTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTC
-TCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATT
-TTTTATAgaatcatggaatctagaatattcctgctggaaagaacctgagagttggtttgg
-accaattccctggttttccagcagatgaaacaggcccaaagaggttaaatgactgggtga
-aaatcacatagctgtctggtgccagagccagcctatagtagagtcccctgaccccaagcc
-cggtgctcattccactACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCA
-GAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGA
-GGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACG
-GACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTAC
-AGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAAT
-GGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATA
-GCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAG
-AAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAG
-ATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACAC
-TGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTT
-AGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGC
-TAAAACTGGTGCACTATTTCCTTTCAAAGTGTTAGATGCACAGTTACCCAGCTCCAGACC
-GTATTTCAATCCCACTTCCCCTACACTCCATTTGTTTACCTTGCTAAATACATTTCCCAC
-CCCTGCAGGCAACACTTAGCACCTACTACGTTGTGCCGGTCCCTTTGCATCACAATCAGC
-ACACTGTTAAAACGGGTTTTaagtcctaacacagttccaataaatcagaatcactgttag
-aggaagtgaaacattttagttaatcatcctcaagcaattctgatgggcagccaggtttga
-gaCCAGAGTATAAGATGTGTGAGCTGAAccctgccctcagggagattacagacctgtggg
-aaagagagGTGGTTTGCCAGCTTCCTCGTCTTTCTGTTACTGTAAGCGCGCGCTGTGGAT
-GGGATGCAAAATATTCTTGGGTTCTGGGAAAATGCCATTTCTTCCAGCTGTTGAAAAAGC
-GGGATCCAGGGAGCTGACTTCTCCAAGTTAGCCCCCACTGGAGACTGGGCCTGCAGGCAG
-AATAGGGTCAAGGTCCCTGGACTTCAGGTCCAATACCCTGCAGACCCCAGATACAACTCT
-CTGAAGGATTTTCCAGCTGGTGATGCTAGGATGATCTGATCCTGAGAGTTAAACGTTCCC
-AGTATATTGACTCTGACTCAGTGATTTGAGGATATTTCCAGAGCTGATCTGGAGTTGGGA
-CCTGGTAGGCTCTTGGGAATCCTGTCTTTCAGAGCCAGTTCAACCCCTCTCCTTGTCTCC
-CAAAGCAAGCAGACTCTCCCCTCCCTCCCATCCCTCTTTCCCGTCTTTGCCAGCGGTTTC
-CCTCCCTCTCACAGAGCTGGAGGCCAGGGGCCAGGAGAAAGCCTGCATTCACCATACTCT
-CCACTCCGTTCCTCAAAGCAGGCACTGTGCCAGGGAGCCTCCTTGAAGGAACCTTCCCTC
-TCCTGGCCCCATCCCCCCACTCTCCAGGAGGGAGGAGAGGAAGAAACTGTTTCCCTGCCC
-ATCCCCCACAGGATCTGCTTCAAGGCCTCCTGCCTGGTGGCCCAGGGACAGCCAGGGGCT
-GGAGCTGAACAAACCTCCCCCAGCTTCCTTTCCTGATCAAGCAGCCCTCAAATTACAATT
-CTTCACTGTTTTTGGGCTCCTGGAAAGTGTGCAGAGATGCCCGGACTGAGGCTGGTTGAC
-TAGGGGACATTGattcattccacttcaacaaatacggagggcattagagctgggccccat
-gcaaggccctctgcataggctgccttgaacaagacagTGCACTTGCAATGGAAGGTACAG
-ATAAGTAACAGTAGGCAATGTTTACAATCATATATTTAACAAtttttttttgagacagag
-tctcactctgttgcccaggctggagtgcagtggcatgatcttggctcactgcaacctcca
-cctcccggattcaagcgattcatgtgcctgagccttccaagtagctgggattacaggcac
-gtgccaccacgcccggctaatttttgtatttttagtggagatggggtttcagcatgttgg
-ccaggctggtctcgaactcctgacctcaggtgatccacctgcctcagcctctgaaagtgc
-tgggattacaggcgtgagacaccgcacccagccAACATTTGTCCTGTatagaattgtctg
-aagtaaaggtttccctagaagagaaaacgtcctgactgaaacctgcaagatgagtaagaa
-ccaggctaagagtgaagagacagccaagcagcagaaatagcagatgtagaggcctggagg
-ccagagagcacacagcgtgttcggactggccaagagtcaggggaagatgtggctgggaga
-aaacgccgagaagagGTGTCACAGGGCTTACCAGCCATATTTAAAAACGTGGATTTTGTC
-CTCAGAGCCTCCAATCAGGCCTCCTCCATTCCattcattctttcaacacatgcctgttaa
-gcgccaactctataggggccttttctaagcgatggaacacagcatggagcaggataatca
-agtccctgaagctcagattctagagtcacacaagtacataattacagacgatgatgcact
-aaaagaaacatacagggtgagatccctgtttaacaagcaaagctgatccagtcttaagga
-tcagagaaaatgtttgaactgagatggaaaagacataaaaggagttaatcgagagatggg
-gctggggattaagggatggcaagggtattaacctaggcaagagggatagcaagtaaaaca
-accctatagtgggaggaggcatgaccacttctagagacTAAATGAATCAGTCTAAGTTTA
-GAAACAGAAACCACTCTTGCTGTTGAAGAAAATGCTGGTCCCTGGGCTGGGTATTAGGAA
-TGACTCCTAGAACACCATAGAACTGCCAGGGGAGTTACTACCTCTCACAGTCAGAAAGAC
-AGAAGCCAGGAGGCCACCACTGGAAAGGCTGAGCATGAGGACACAATGGTGAAGCTGCCA
-CCCAAAGACAGGATCCTGGGATCAGAAAGTCACTGCCAATGCCACTGGCAGGACAGTGAA
-ATGCCAAGTCCTTTCCCTGCCTCTACAAAGCCAGGGACTGTGCACTACTGTCTCCGCAAC
-CATTTACAGGTAAAAACAGCCCAAACTGTCTGGCTTACTTATGCCTCCCTTCCATCTTTT
-ATGCAAATACATCTAAGTGCTAGAGCCCTAGCTGCAAGGGAGTTGGGAGATGTTTTAGCT
-TTCCAGCATCCGCAACATAGGAAGGCACATAGAATGGGGATGGGTGCTGTCTGTCAAAAG
-ACAATATCCAGCACAAAAAATGTGACTGCAGTGCAGAGAAGAGGAGCTCGTGGGagcatc
-tggtaggccatgttaagaatgtgggtctaagaacgatgtgccattgaaggacttgcaagc
-aagagagtaacatgattagattggttatgttttacaagcatcattcaggatagttggtgg
-agactgggtcagaggagagcccaaggggaaatacagtatagttcacccaggtctctcgag
-agatgaggacatcttaggcatggaaggcggagatgtacagagagaaacagccgagtaaag
-aaatctttcagagtttaagtcaacaagatttggagctatatttgacatgggctgggagaa
-agttaagtaccaaggatgttgcccaggtttctagcttctgcagttggatggatggtgggg
-cttttccctgagatgcgaaacagaagagaaaatccaagtttagggtgaagggcttgaatt
-tgattttggatatattgagtttaaggtctccgtagaggatatctaagaggagatgtggag
-taggcggttggatacacacagatcttacattcctaggagaattctggccctgagaaataa
-acacaggagttgtacagcTgtggctttcaaactgttttaccacatcccacagtaagatat
-atattttacattgcagccatcatacatatgcatgtgtgtatttatatctaaatctgaaat
-aagcttcctcaaacaatatttgccctgtgcatgatgcaccttgacactttctattccatt
-gcttcatccttttgtcaatgcttatatgacgtgttaaactgatttcacactctcctaatg
-gTCAAGAGAGAAAGCAGAAGGAAAGATTATACCAACTAAGATTGTGCCTCAAGCAACTTT
-GACACAGTTTTCCCTGATGgaaaaggagatggtgaaaaactaataagggacagccagaaa
-gggagaaggaaaaccagaacgtgcagaaacacataaaccaagggaggacatttcaggtgg
-taggggttaacaattgtgtcaagggctgcaagaaatcaagtaaaatcagctctaagaaat
-gtcaattgAggccgggcgcggtggctcatgcctgaaatcccagcactttgggaggccgag
-gcgggcggatcatgaggtcaggagattgagaccatcctggctaacacagtgaaaccccgt
-ctctactaaaaatacaaaaaattagttgggcgtggtggcgggcgcctgtaatcccagcta
-ctcgggaggctgaggcaggagaatggcgtgaacccaggaggcggagcttgcagtgagctg
-agattgagccactgcactccagcctgggcgacagagcgagacgccgtcaaaaaaaaaaaa
-aaaaTgtcaattgagatcagaactgaagagtgccctaggattgagtagtgtggaggttat
-caataagggccttttagaggaaagtgatgggggcagaTTAAGGAGCAAATGATCTTTCTA
-AGATGTCAATCTGGCACGCTGACCATTTTATTCCCATGTCACGTCCTCTGGGACTCCCTT
-GTGCACTTGGAACCCAGCCTGGTACCCGATCCCTTTCACAAGAGGCTCCTGGACTCCTTT
-CCAACCTTACTCTCAGCCAGATTGCCCATTACATCCCTTTATGTCAACTCCAGTTACGGC
-TGACAAACAGCAACCAGAAAGAATTTTGGAGTATGGAGTGGTACAAGACCAAGCTAAGGg
-gccaggtgcaatggttcatgcctgtaatcctagcactttgggaggcctaggcaagtggat
-cgcttgaggtcaggagttcgagaccagcctggccaacatggtgaaatcctgtctctacta
-aaaatacaaaaaaaaatagccatgtatggtggcatgcacctgtagtcccagctactcagg
-aggctgaggcaggagaactgcttgaacctggTGATACAGGAAGGGAAGTGCTGGGAAGGG
-AAGGGCACAGTCCCTTTAAATGACATGGAAGGGAGAAagggcgtggtccctggctagggc
-tccaccccagcctgtgcccatggacctaggtgaggacaggcatttttgttttcctgccca
-aatgttgcatttcccaagaccaccctggccggccacgcccccatcctgtgcctataaaaa
-ccctagcaggcagacacacaggtaactggacggctagaggagcacatcagtggaggaaca
-cacaagcggctggacgtcgagaggaacgcaccgacaggcactgacaaaccagcacaccac
-aggccatcgaccaacagaactatgcagagtttggctggggcagtcggaggggagcctggg
-ccactgaacagtccaactccaggggaaaaccttctcactccatccccttctggcttcctc
-catctgctgagagatacctccactcaataaaaccttgcactaattcttcaagcccaggtg
-tgatccaattcttctggtacaccaaggcaagaacccaggatacagaaagccctctgtcct
-tgcaacaaggtagagtgtctaattgagctggttaacacaagccacctatagatggcaaaa
-ctaagagcatacggtagcataagcccattggggcttcaggagctgtaaacatccaccact
-agacactcgtggggtcggagccccacaacctgcccatctgtatgctcccctagaggtttg
-agcagcgggacactgaagaagtgagccactccccttgtcacacgccctgggacggggaca
-agggaacttttcccgtttcaGTgggaggcagaggttgcagtgagccgagattgtgccaca
-ctgcactctagcctgggcaacagagcgagactccatctctaaataaataaataaaaGGAC
-CAAGCTAAGGGTGAGGAGACGTCAGATCATGCTGAGTTGAGGGTGGGGGCGCCACAGGAG
-TGCACCAAACGTGTACAAAGGCACTGATACATACAGCCCCATTTGCTGGCTTGTCAATGT
-GACTAAGATTTGGGGTAGGACATAGTAAAAGAAAATAAACACAGATATATTATGGAAAAG
-AATGTAAACTTTGCAGAGTTTTAAATAAAATATGACtttttttttttttgaggcagggtc
-tcactttgttaaccaggctggagtgcagtggctcactgcgtggctcgctacagcctacaa
-ctcctgggctcaagcaatacttctgccccagcctcctgtgtaactgagactacaggcaca
-caccaccacacccagctaatttttTCTttctttctttttttttttttttttttttttgag
-acggagtctcactctgttgcccaggctggagtgcagtggcacaatctcggctcactgcaa
-cctctgcctcccgggttcactgtggatatatcccctcccgggatatatccatcactgtgc
-ctggcacagctgcagcctcccaagtagctgggactacaggcacccgccaccacgcccggc
-taattttttgtatttttagtagagatggggtttcaccgcattagccaggatggtctcaat
-ctcctgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgag
-ccaccactcccagcctctctctttctttctcctctttcttctctttctttcttttctttt
-tcttttcttttctttcttccttccttcctcctttccttcctttccttccctttctctctc
-tccttccttctttccttccttccttccttcttctttctttctctttcttttctttcttca
-gggtctcaatatgttggccaggctggtcttgaactcctgccctcaagtgatccttccacc
-ttggcttctcagagtggtaggattacaggtgtaagccaccacacccagcccaagaaagat
-tttattttatttttttatacagacagggtcttgctatgttgcccaggctagactcaaact
-cctggacaacatagcaatcttcctgcctcagcctcccTAGTAGCCAGGTGTGCACGGAAC
-AAATTAtatgtattaatatggaacaatctctaagacacattattaaatgaaaaaaagcaa
-gatatggtatcctacagtttacattttttaatgttggaataaatacatacataccctcag
-caccataggaaagattttaaaaaagaaaaaatatatatacatatgcttatttttgtacaa
-atatgtaacactggaaggatattaatgaaattcgtaatttgtaACTTTGGAGAACTGGAT
-ATTTGGGGTTTGGGATAAAAGGAAAGTTTATTTTCCACTGTGTATCCCTGCTTTTAAAAA
-AATATTTCATCTATTATCTCTAACAACAACAAAAACAACTTTTAACAACAAAAATAAATG
-CAAAACACAAGACTTCAACGAAATTCCTATAGACTTTAGAGAGACAGGAGTCCATCTCCT
-CTATCTTTAAAAGTAAAggccgggcttagtggctcatgcctgtaattccaacactttggg
-aagccaaggcaggaggactgcttgagcccaggagtttgaggccagctgaggcaacacagg
-gatatcctgtctctacaaaaaaaaaacaaatcgttgggtgtggtggtacatgcctgtggt
-cccagctacttgggaggctgaaacaggaggatcacttgaggttgaggctgcagtgagccg
-tgatggcaccactgcactccagcctgggccgcagagtgagaccctgtctctaaaaataaa
-ataaaataaaataaaaataaaaAATAAGAACTTTGATGGAAGAGTTTAAGAAATTCTATA
-GCAGACAACACATTGGTCTCCCTGCTTCCAGGCTCCCTCTCCTTCCAACCATGGAATCCA
-CCCCAAAACAAAACTTGATCACATTTCTCCCCCGCTTAAAGAACTTCAAAGATTTTGCGT
-CCTCCCTGGTGTTCACCAGGGCCTGCCTGACCAGCCCTGCCTCCTCTGGGCCTCCTCTCT
-TGTCGGGCCTCCCCCTCTTACCCTGGCTTGGCTTCCCcttctgctccagctggtcattcc
-tggaagcagatctcttcctcccctacccatggttaatccttacctgcctggggcactcag
-ctctaatgctgcttcctaactagagcctaccctaacatcctgtatcagaccctcttacac
-cgtccgttacctccctggcctctccttcagcagttactcgggtgcaatgatatacttatt
-tgtgccatggtttgattgatatctgcctctgcctctccactttgagctccctgagggcag
-gaaccagtctcttttggctcacggttatagcttgagcaattagcactatgcctggcacag
-agtaaagcctaataaatatttattgcatgcatgaTCTAGAATCACTTGGCTGAGGTTACA
-GATTAAGACACGTGTCTACTTGTCCTTCTTTAATATACTTAACATACCTTAGCACTCTGT
-CATTGACACATACTGAACAAGGGCTTATTCATTCATCTTTTAAAAGCTAACTCACTCTTT
-TAGTTTTCCCACCTTTGATAAGGGAGGATAGGACCTGGGAGGTCAGGCCCTCGGTTTACT
-AGCTCATCCTCCTCTATTTCTCTGAGAGCATAAAATCACTGGAAGTCAGCCAGCATGCCC
-CATGGCACTGTGAGGCACAGGGGAGAAGCACCAGGCTCCTGGATTCTGAATGCGTGGCTT
-TGAAGCCTGGCAAGAGTGGCCCCTTCCCTGAGTCCCCCACCAcccctccccttggggcga
-ggattctgcaggcatgagaagtgcccacccagagtctgtgcctatgccttctagaacacg
-ctctgatacccgataattcccttccaaaatgtcactaagttaattcacagggctctttgt
-gggcctcatccctggcttcatctcacctgagggcaaactatactgcctgatgcacatctt
-atagacctgagccttgggcctcaagatagctgtttgcaggtgacagctaggtgttgaccc
-atgcatgctagctccatcactgatgggatgagaggtagctggataagggatggatacagg
-ttccaggggacaggtctccttgggcctacacattctggcacataactccaagggtcttag
-aattctaatttgaacatggccttccaggttgttagaggatatatccatcaaggaagaaaa
-cagaacatatttcatttaacacttgctggactgttgtataatttctaactatagagacat
-atggtatatgggcctccaactctactcttgttctgagccccacaaatgCCCATTtggttc
-tgtcatttctttgcatagacaagctacataacctctctgaacttcagtttcctgagcagg
-aaaatgggtctatggtaataactacattatcagggctggtgagaaaatgaaataaaataa
-tccatgtcaagggcttgagaagaatgccCTCTGGCTGTCGTCTCCTATGACTTCCTGTAT
-GATCTCCAAACTGCTCTCTTTGCAGGGTTTCAACACGGCTGCTCCCTCCTGCCTCCTTAC
-CCACAGCCAATAACCTCCCCATTCTCTCCACCTAGTCAAATCCCACCGTCTTCAATTGTG
-ataatagctggttgattgcacgtttactacgtttcaggcattgtattaagaactttccat
-gcattaactcagttctgacaccaactcgatgaagcaggcactgtttattattccccaaac
-acaaagacacagggatctggagactggaagcactggcggctgcaagtggcagggctggcg
-gggtgtgaagccggagaggagtctttctgcagTCAGGCCTCCCAAATCCCGGGATGGAAT
-CAAGGAGCCTTTGGCTGTCCCACCCCTCCTCCTCCAAGCCCCCAAATCCAAGTCTGTTAT
-ATCCCGTCAGCTCTGCGGGCCTGCCTGTGACTTTCAGCCCAAGGGGGCGGGCACTTCGTG
-TCACGCCACGTTGTCCACATCATCGAccctccctccccttctccccttccttccttccct
-ccctctcttcctcccATTGAGTGCCAGTTCTGTGCCAAGCTTTGCTGTTCAAAATGTTAC
-GAGTGGAGAAGTCAGGGAAGGATGGAATTATAGGTGTTTCTTCTTCATACCTTTCTGTTT
-GGCTGATTTTTTTTCAAATGAGCACGCAGGCCCGGTTCCTCAAACCCACTTCCAATGTGG
-CATTGCTGGGTTGGTTTGGTCCAAGGAAAGCCCTGTCTCCTTAACTCCCAGCCCCCACGC
-CTCCTCCGCCGGCCCCCAAATCCAGGCCGCCCTGCCCCCTCCGGAAAGGGGAGTTGGGGG
-CGAGCGCCGAAATCTGAGTGGCTCTTTCAAGCCTCCGTTGCCATAGAAACCGGCCGCACA
-GGCCGATGCTGTCCATTACACCATCCTCTAGCCTCGCAGCCAATGGACTCCGAGCTCCAT
-CGCCAGAGGCCCCGCCCCCCAGCTCTGGGGAGTCCACCAATCAGCAGGTCCCGTGACTTA
-GAGCCCTGCCCTCGGCCCAGGGACACCACCAATGCGCTTCGACCCTGCCCTCCTTCTCTT
-CGGTGTAACAAGAAGACTCGatatttttttttttttttttaGGAATTCTCCAGATCAGAA
-GGAATTGGCAGTAAGGCCTCTGTCAGCTGCACCCTGAATAATCTTTGGCTGCTATTTTAT
-TTAAGGAGAGCAAAACTGTTTCAATTACGCAACAATATATACCATTCTCTACTAAAACAA
-TTTTAGGAAATGAAAATGTAGGCAATGGGATGATATAGTCTGCTCTATATGAATGTCTTT
-CATTATAGGTATTTTAATTTAACTTAAAATGATCAAGGAACTAGTCATCTTTCCTTTGTA
-TTTCAAATGCATACAAAATTAAAGATACCGAGTTTTTTGATGCAGAGTTCATGAGACATT
-GACTTAATTAGTTGGTAGGCAACTTTTACTGAACCATCTAATTCCTGGTTCAGAACATTA
-CAACTGGAGGATAAATGAATATTTCTCTTAATCCATGGAAGAAATTCTGTTTTTGAGGCG
-GGCTGCGTAAATGGCTCTGACACTCTGGAGTCTAAATAAACCAAATGTGTTTTTAAAACC
-CGTTTGCCATTACAAaaaaaaaacttcaattttttagaacacttttagatttacagaaaa
-attgtgaatataaagttcccgtctaccccagccacccaCCCTGtttctttcattattatt
-attattattgagacagggtcccgctctttcacccaggctggagtgcagtggcgcgatctc
-ggctcactgcaacctccgcctcccaggctcaggcgatcctcccacctcagcctcccaagt
-agcagagactacaggggcatgccaccaagcccagctgatttttgcatttttcatagagat
-gaagtctcgccatgttgctcaggctggtgtttctgctattaacatcacatatggtattgc
-agacgcatggtatatttgttccaattaataaaccaataatgatacattatttattaatta
-gagttcacagtttattcagatttccttcgtttttacccaacgttctttttctactccatc
-tttttctactccaggatccatccagcatgcctcatcgcactagctgtcgtgtctctctgg
-gctcctcttggctggggcggtttctcaCATAGCAACATGACatcactgttggtgctgcgt
-caggtttctctactggaaagtcagtcttcttttgccccttttcatactgtactctttgga
-aggaagtcactatgctcgggccacacttaagtgaggagttatgctctatctccttaaggt
-tggaatagctacatagattatttgggatttttctacactgaagatttgtctcatttattc
-agtaatttatttatatcagtatggattcacagataattatttaatactttaggttataat
-ccaatactatttgattttgttgctcaagttgttccagctttggcttttgggagctctttc
-ggttggctcccgtctccctttgacacacccctatttttgtggggttttctcgttgccgtc
-aagcacttccttactttctggcactacaagatgcctcaggctcatctttcgtatttcctg
-ccccagtcctcaaatcagccatttcgcaagagctttgattgtttcggagaagggtattta
-ttagaaaccaagaactgggcgctaggtgcactcattgctactagggtgtcatttattTcc
-ttcctccctccctccctccctcccttcctttttgagacagagtctcactccatcacccac
-actggagtgcaCACTCATGGCTACAGCCACGTAGCCATGGTAATGAAGCCATAACCTCAC
-GAAGCTTCCAGTTTACACAATTAGAGGGTTAATTACCAAGTTGCCCAGCACTCTGCAGTG
-TGCTgtgtaggcaatgcgggggtaaattatctgaagagaatttaaagacaataaAAactg
-cagcctagacctcctgggctcaagtgatcctccctccttagcctcctgagtagctaggac
-cacaggtgtgtgccaccacactcagctaattttaattttcaatttttttttttgtagaga
-taaggtcttgccatgttgcccagactgatacaactcccggcctcaagccatcctcctgcc
-ttggcctcccaaagtgttgggattacaggcgtgagccaccacacctggccTtggggtatc
-atttcttttaagccttctcaactgacagaacaaagaaatatatctgtatataccaatgtg
-tatatatatacacacatatctatatttccatttgtaaccatctgtatatatattaagcta
-aacatgagttcctgtttatatttaccacttgaatccagggatcatttggcttgcttcctg
-cttgcttatctctaaattcccactccaataacgggaaacctggttcccatcatccacatc
-caccatccatttacttaattgttcaagtccagtatacatgtgtaggattatcaaaattgt
-taacccatacccctgtgggaaactttatcaagtagagtacattcttctgaacactttctt
-ttgcctttagtgttccagcagactccacttgtttcttttttctttttctttttttttttt
-ttttgagacagagcctcactctgttgcccaggttggagtgctggagtgcagcggggccat
-cacagctcacagcagccttgacttcccagtcttaagtgatcctcctgcctcagcctccca
-agtagctgggactacaggcatgcgccactacacccatctaattttttaaaatttttgtag
-agatgggatctcactatgttgcctaggcttgtctccaactcctgggctccagtgatcctc
-ccgcctcagcctcccaaagtcctgggattaaaggcatgagccaccacgcctggcccactc
-atttctaaagttacttaggtcagcacgttttcctctatcctcttcatgaggtcatttcac
-acatttgtaatacggtgaagatgtttgtcatattctgcatgacattttggaattatctaa
-atgtcctaagtgatttttttaactttgcatgcattaaggttcactttttgtgctattaag
-tttaatggatatcaaccaatgcacagtcatatacccacatttcttcaccctaaaaaaccc
-cctgtgctcacttattgaaccctctccccgccaaacactggcaaccacacatccgtttac
-tgtatctatggttttgcctttttgtgccattattaaaaaaaagaaagacgcacaatattt
-ttgttgttgctcttgtcacAGCTGCCacccattgaatccttactatgtcccaggtccaga
-attacactgtcccattttgaagatgaggaaacagatgcaaatgagttgaagtactcccta
-gagactcataacaataagcaaagtttgacttcTATGATTAACTTCTGAGTCACCTCTGGG
-AATATTTGTAATATGTCTAATAGCCACACttcttttgtttgttttgatacaggggtcttg
-ctgttgcctaggctggagtacagtggctactcacaggtgcaatcatagggcactacagcc
-ttgaactcctgggctcaagcaatcctcctgcctcaacctcaaaagtggctgggactacaa
-tgtgtgccactgtgcccagcTATattagccacatttcaagtactcaatagccgctgtgca
-gtttatactattatattggTTTCTGAGttttgtttttgagactgcgtcttgctctgtcac
-caggctggagtgcaatggcacaatctcggctcactgcaacctccaccacctgggttcaag
-cgattctcctgcctcagcctcccaaatagctgagactacaggtacgtatcaccaagacca
-gctaacttttgtatttttagtagagacatggtttcaccatgttggccaggatggtctcga
-tctcttgacctcgtgatctgcccgcctcggcctcccaaagtgttgggattacaggtgtga
-gccaccgtgcctagctATATTGTTTTTTAAAAGATCTCTTATTATTTAGTGAAAAGAAAG
-GAcctgtagtctcagttactcaggaggctgaggtgggaagatcatttgagccccagagtt
-tgaggtagcagtgagctatgatgatgccactgcactccagcctgggcaacagagggagat
-gccatctcacacacatacaaaagaaaagagaCCTTGTAATGCACACACTATCATAATCTC
-TGAtttttctttttttttttttttttttgagacactgtcttgctctgttgcccaggctgg
-agtgcagtggggtgatcactgctcactgcagcctcaacctcctgggctcaagtgatcctc
-ccacctcagcctccccagtggttgggaccacaaatgtgcaccaccacaactggtaaattt
-tttatttattgtagagatgtgggtctcaatattttgcccaggctggtctcaaactcctag
-gctcaagctagcctcccaaagtgctgggattataggtatgagccactgGCTttttttgtt
-tgtttgtttgtttttgtttttgatatggagttttgctcttgttgcccaggctggagtgca
-atggcgctatcttggctcactgcaacctctgcctcccaggttcaagtaattctcctccct
-cagccttctgagtagctgggattacaggcatgcgccaacacctccagttaattttgtatt
-tttagtagagacggggtttctccatgttggtcagactggtctcaaactcctgaccgcagg
-tgatctgcctgcctcagcctccaaaagtgctgggattacaggtgcgagccactgcccctg
-gccTGACTTTTTTAAAATCAGGAAATTTAGATGAATCAAAAAAGAAATTACCTTGTCCCT
-ATTGTTCTCTTCTCATTATGAATGTCTTTGAGGACCATGCCAGTTGGCAAATAGGTATTT
-TGGAGCTAGACACAGTTAGGGTGAGTGGAGTAACACGACAGTACCTACAACAGCCACACC
-CACACCTGAGTTGGCTTCATCCTGCCTTCAGGTATCATTAAGAATAGGtattattattat
-tattattattattattattttgagaccgagtctcactctgtcgcccaggctggagtgcag
-tggcacaatctccgctcattgcaacctctgcctcccaggttcaagcgattctcctgcctc
-agccttctgggactacaggcccgtgccaccacgcccggctaattttttgtatttttagta
-gagatgggtttcatcgtgttagccaggatggtttccatctcctgacctcatgatcctcct
-gcctcagccttccaaagtgctgggattacagatgtgagccaccacacctggccATATATA
-TAtttttttctttgagacagttccactctgtcacccaggctggagtgcagtggtgtgatc
-atggctcactgcagcctggaactcccaggctcaagagatcctcctgactcagtctcccaa
-gtaactaggactataggcacacaccaccaggcccagttaatttttctatttttagagacg
-gggtctcactatgttgcccagactcgtctcgaactcctgggctcaagcaatccttccaac
-ctctacttcccaaagtgttgggattgtaggcatgagacaccacatctggcctataatgga
-atattatttggcaataaaaaggaagttctgatacatgctacaacatagatgaacctagaa
-atcatgatgctaagtgaaagaagccaggcacaaaaggccacatgttgtatgattctcttt
-acatgaactgtccagaagagacaaatccatggatacagaagcagattaatggtggcctag
-ggctggggattagagggaaggcagagcagatgggagagtgactgctaatgagtactgatg
-ctaatggtttcttttggggatgatgaaaatagtctaaaatccattgtggcaacagttaca
-caactctgtgaatgcactgaaagccactgaattgtaaactataaatgactgaatagtgtg
-gtatgtgaattacatctcaacaaagctgttTTTTTTTTTTTTTAATGTTCTGGAAGAATC
-AGGATAGACATTACCTCAGGTGAAGGAAGGCAGGAGATGGGATGGTAAAGGAATTCATTG
-GGGAAAACAGGTTATCAATGTTCCAGTTCTTGTGTCAGATTGCTGACTCCACAGATTTTT
-ATTATGTTATGTAAAAATAAATACACACAGggccaggcatggtggctcacacctgtatcc
-cagcactttgggaggctgtggtgggaaaatcgcttgagcccaggagttcaagaccagcct
-aggaaacatagtgagaacctgcctctacaaaaaaaatttttcgaaattagccagccatgg
-tggcatgcatctgtagtcctaactacttgggaggctgaggcaggaggatcacttgggccc
-agaagttccaggatgcagtgagctatgatcgcaccactgtactccagcccaggcaacaga
-gcaagaccaggtctctaaaaaaaaCCCACACAAGCATAAAGTGAGGGAATCACAGGCAAC
-AATGAGAATGTGTCGCAGATGAAGCGATTCTGTATACCTGAGACAGAGGGAGATGAACGG
-GAAACGGCAGagagtggtcaggacagtcctctctggggagcccgtttgagccgaagctag
-gatgagtagatgctccagcccatgtggggatgggggtgaaaagagttccagacaaaggag
-acagcatgaatgagggccctgaggtaggcccaagcctgttgtgtttgggggacagccagT
-TTAAATGTCTGTTCTGTTATATTGTGGAGTCTCTGTGtatgaatttttcctaaagaaata
-acagacaggccgggtgcagtggctcacgcctgtcatcccagcacttcgggaggctgaggc
-aggcagatcatgaggtcaggagatcgagaccatcctggccaacatggtgaaaccccatct
-ctattaaaaatacaggtcgggcacggtggctcacgcctgtaatcccagcactttgggagg
-ccaaggcaggcagatcacaaggtgaggagatcgagaccatcctggctaacacggtgaaaa
-cccagctctactaaaaatacaaaaaaaaaaaaattagccgggcatggtggcgggcgcctg
-tagtcccagctactcgggaggctgagacaggagaatggtgtgaacccgggaggcagagct
-tgcagtgagccgacatcaagccactgcactccagcctgggtgacaaagcgagaatccgtc
-tcaaaaaaaaataaaaattagctgggtgtggtagcgcacacttgtaatcccagctactca
-ggaggctgaggaaagagaatcgcttgaacccaggaggtggagattacagtgagccaagat
-tgcgccactgcactccagcctggcgacagagcgagactccatctctaaataaataagtgg
-ccaaaaacatacatacaaaggtgttcactgccatattgtttataatagcaaaaaggggta
-aaacaatcaaaatgtctttcaagaaggaactgattcactttgggaggccgaggtgggcag
-atcacctgaggtcaggagttcgagaccagcctgaccaacatggtgaaaccccatctctaa
-taagaacacaaaattagccaggcgtggtgatgcacgcctgtaattccagctacttggaag
-gctgaggcagcagagtcatttgaacccaggaggcagagtttgcagtaatccgagatcacg
-ccattgcactccagcccaggcaaaaagagtgaaactccgtctctaaaaaaaaaagaactg
-attaaatgaattacaatataCTCGGCAGACCTGGACGAGAACCTACGCACTACATGGAAA
-GAGAAAAGAGATGTGAAAAAAGCAGGTTACTAGAAATTACATATAGTAACATTCCACTTG
-TGTAAAAAAAACTATGTGTGCATGTGATTATAAGCATTTAAGTTTCTGGATggccaggtg
-aagtggctcatgcctgtaatcccagcactttgggaggccaaggtgggcagaccgcttaag
-cccaggaatttgagaccagctcgggcaacgtggcaaaactcagtctctataaaaaataca
-aaaaattagccctgtgtggtggtacgcgtctgtagtcccagctacctgggacactgacgt
-gggaagatcacttgagcccaagaggttgaggctgcagtgagctgtgattgcgccactgca
-ccccatcctgggtgacagggagagaccttgtcgaaaaaaaaaaaaggccgggcacggtgg
-ctcacgcttataatcccagcactttaggaggccaaggcgggcagatcacaaggtcaggag
-ttccagaccagcctggccgatatggcgaaaccccgtctctattaaaaatacaaaaattag
-tcgggcgcagtggtgggcggctgtagtcccagctacttgggaggctgaggcaggagaatc
-gcttgaacgtgggaggcagaggttgcggtgagccaggatcgcgtcactgcactccagcct
-gggcaacagagtgagactccgtcccgtctcaaaaaaaaaaaaTTCTGGAAAATTACATTA
-AAATTTAAAATTTACTCATTATAATGCCATTTTTCTAGATTACAGGAGACGTTCACTTTT
-CGCCTTATATAATTCAGTATAAggccgggcgcagtggctcatgcctgtaatcccaaaact
-ttgggaggccgaggcgggcggatcacttgaggtcaggaattcgaggccagcctgaccaac
-atggcgaaactccgtctctactaaaaatacaaaaattagccaggcgtggtggcacgcacc
-tgtagttccagctactcaggaggctgaggcaggagaatcgcttgaacctgggaggaggaa
-gttgcagtgagctgagatcacgccactgcactccagcctggtgacagagcgagactccac
-acacacacacacacacacacacacacacacacaaacacaaacacCATATATATACATATA
-TAACTTTTGTAATAATAAAAAACATACTTCTACTTAAAGAGAATATCAATAAGCCCTAAA
-GTTTTTCATAGTGAAAGCCCTTCAAAATTGCTTGACAAATAAATTCTAAGTATACTAACT
-ATGGGAAAAATGTATGCTTGCGAAGACTTTGTTAGACACATTTTCTTAAATGCTGAAGCT
-ATAATTTAAAAATGAAGATTTCAGGAGACAAAATAAAGTCAGCTGGATAAAAAATGTGCA
-GAGAGAAAAAATATACCAAAATGTTAAGAGTGAGTGTCTCggccgggcgcagtggctcat
-gcctgtaatcccggcactttgggaggctgatgcgggcggatcacggggtcaagagtttga
-gatcagccggccaacatagtgaaaccccgtctctactaaaaatacaaaaattagccgggc
-atggtgatgcatgcctgtagtcccagccacttgggaggcttagggaggagaatcacttga
-acccgggaggcagaggttgtggtgagctgagatcgtgccactgcccttcagcctgggcaa
-cagagcaggactctgtctcaaaaaaaaaaaaagaGTGGGTGTCTCTTGGCACTGAGACAA
-TGAATCCCAACAAATTCCCAACAAATGATATTTTTTCCTTAAATTTCAGAATTTTTGAAG
-TTTTACACAATGAATATTTTGTGATCTGAAAATTTTTTCTTCCCCTCCTCTTCCAATTCA
-ACAGCTGAATAATAATCTtgtgttcattgtctgctactgcttaagacattctttccagac
-ttagaggcttaacaaagcaaacagctaccatctcacagtttctgtgggtcatgaatccac
-gcagagtttagttgcatggttctggctcagggtcattcacgaggttgcagttgagatgct
-ggtcagggctgcagtcatctgaagacttgactggggctggaggatctgattccaggatgg
-atcgatcactcagatggctgttggaagtaggtctcagttccttgttggtgttggcaggag
-gcttcagtttctcaccacgtagagctttccacagggctgcttgagtgccctcgcatgaca
-gctgacttctcccagaataaatgatacaaaataagacagccaggaggaaaacatagagct
-ttctatgtccaatcttagatatcacaaaccatcacttctgccatattctattagttagag
-gcaagttcacacttaactgggaaggggaggaggaattaggctcttccttttgaaggaagg
-aacattaaagaatttgtgaaGggccgggcgcagtggctcatgcctgtaatcccagcactt
-tgggaggctgaggggggcggatcatgaggtcaggagattgagaccatcctggctaaaacg
-gtgaaaccctgtctctactaaaaaaatacaacaaaaattagcagggcgtggtggcaggcg
-cctgtagtcccagctactggggaggctgaggcaggagaatggcgtgaacccgggaggcgg
-agcttgcagtgagccgagatggcgccaccgcactccagcctgggtgacagagcaagactc
-catctcaaaaagaaaaaaaaaaaaagaaTTTGTGAACATGTTTTTGAAACACAAGAAAAT
-ttccagctgatctttccccccaaatttccctcctccaatccaactacaacacatgaaact
-ccttaatcttgctgaagcgtacctctgatcatgtcatcctgcaataaaaaaactgtccct
-ggctccccacaacccagggaactccataacttggcttctgaggaccaactaccgtattgc
-ccttcagctccagctcaacataaacgcatcgtattcctcatgtacactcccccatctctg
-gtcttggcacctatccatgccctctcaatacctcgtcccagtctccttcccatctccagt
-cccttgcacttgctgtttcctctgcctggaatgttttacatggatggttcttcgtcatct
-tgagatctaaactctcccccatctctatcatcccccgtcccagtcactcactctctcatt
-accttgttttcttttcattgtcgtttgagacagggtctcactctgtcccacaggctgggg
-tgcagtggtacgatcacagctcactgcagcctcaacttcccgggctcaaacgatcttcct
-gcctcagcctcccaagtagctaggactaaaggcacaggccatcacacctggctgttttgt
-attttttgtagagacaggcttttgccatgttgcctaggctggtcttgaacttctaggctc
-aagcatctgcccacctcagcctctcaaagcgctgggatttcagatgtgagccaccttgcc
-cagcccctccctcccttctttccatcacccagtctggggtgcagtggcaccatcatagct
-cactacagcctcaaaatctctggcttaagcgttttcccacctcagcctccccagaagctg
-agatgacaggtgcttgctaccatgcccggctaatttttgaatttttgtggaggtgggatt
-tctctatgttacccaggctggtctgaaactcctgggctcaagcgattctcccgccttggc
-atcccaaagtgcagggattacaggcgtgaaccaccacacccagcccagctttattttctt
-tatagcagtcacaactatctgaaattatcttatttgtttacctgctcttttctgttgccc
-tcacttgctccttaagaacagggacctctgtcttggtcactgctgtaacccagtagcccc
-agttccaagttcactgcctggtgcacagtaggtggccaataaattgttgaattaaATGTC
-CTCTCTTCCAGGGAGTTGTTTTAGAAAGAATCACACACTGCATAAATGTCTGTTGAGGAA
-GAAAATGAAAAAAACAAAAGTGAAGACATTATCTTCTCGGCTGAACTTCCCACACCATCT
-TCTCTGTCATTAATAAGTCCTGGTGTCTACACTGGGGAAGGCAGTCCAAGGTTCTTCCAG
-GGCCTAGGTTCAGCCAGACTTTAACCATCTCTAGCTCCTCAGAGTCCGTCAAAGGGCCTA
-AGGAATGGTAAGTATTAATAATGtttgtttatgtatttatttatttatttattttgagat
-aaagtctctgtctcccaggccggagtgcagaggtacaatcattacaacttccacctttcc
-ggctcaagcaatcctcctgcctcagcctgccaagtagctaggactacaggcaggcaccac
-cctgcccagctaatttttgtacttttttttgtagagtaagggtttcaccatgttgcccag
-gctggtcttgaactcctggccttaagtgatctgcctgcctcagcctcccaaagtgctaag
-actacagctgtgaaccactgtgcAGGGTCAAATGTTTATTAATGGATGCATGCATGGATG
-GAAGAAGGAAAGGAGGCAGGTGTGAATAATGAATGCAGCATTTTCACTGCTGAGAATAAA
-GAGTGAAATCCTGGTCCAAATCAGTTTGGCAGTGAGTAAGGTTAGGAACTATTCACATAC
-ATTGGAATAATAATAGCAGCAGCAGCTACAGGGTCAGAGACAGATCTTTGAGAGGCCATA
-AGCATTGAAAAGATTGTGGTACCTATCACACACCGTCTAAAATAAAACAAATATTTTATT
-TATGGGAAAAGTGTTAAGGTGTTGATAATTCCAAGAAAGCTTTTATTTGTCCTACAATCA
-TTACTTTGATACCTTTTCTGAAATCCTAGAGCTGTCCCCACTCTGCCCATTTTTTTTTCT
-CATTATGGTGATGTCTCTGGGTTGCTGGTGACCTGCGTAACTATTGGGAAATCTAGTTTC
-TCAAAACttttagtttttttttagacagggtctcactctgtcactcaggctggagtgcag
-cggctcactgcaacatccgcctcctaggttcaagcgattctcatacctcagtctcctgag
-tagctgggattacaggtacgcgtcaccaagcctgactcattattttgtacttttagtaga
-gacaaggtttcaccatatcggccaggcggatctcgaacttctgacctcaaatgatccgcc
-cgccttggcttcccaaagtgctgggattacaggtgtgagccaccgcgtccCGTCTATCAT
-AAGTtttattgaacattgcctaggtatcaggatgtgtttacatgcattatctcatttaat
-ctgtaaaaccaccatgtgagggagaaactgaattatccccattttcaggataaggaaaag
-gaggGACTGGGAATGTGAACTCAGGAAGTGTGACTCCATCGGGTAGACTGCTCAGGCTGC
-AGATGTAAAGGTTTTACACGTAGGCTTTTCCAGATCTCAGCTTCTGAAAGGCGGAGGGAC
-CGTTTGGACGGGAGCAGGGCCTCCTCTTCCAAGCACCCTGTGCCTTTAAGAGTCGCCCCC
-TCCCTCCAGGGATGCTCCAATTTCTTTCTCCCCACCACCCCCACCCCGCCCCCCGCGCCG
-CGGAGCCGCACCTCGGTCCTTCCTCCCCGCCCCACACCCTCAAGCTCGGCTCTTGGCCTT
-CGCTCGTCCAGAAGTGGGTGAGCTGTACCGCCAGAGGCGCATTCTCCTAGCCCCAAACCA
-TGCCCGCTACGCCCCAGCGGAATGCCACCTTAAAGACCCTAATCCGGGCACCTCCCAGCT
-CCTGCTTCCCAAGGGCGAGGCCTCAGCGCCCCCTCCCATCGCCCATGCTCACGACGCCGT
-GAAGGTGACCTCCCCCAGGGGCGGCACACGCCCAGTGGTGCCCGAACTGGCTCACACGTG
-GTGAGCCGGGAGCGCGCGGCCCCTCCCCGCCACGCGCCTCGTGCCGGCCACCCGGCCACG
-CCCCCAGGACTGGCTCCGCCCCGTGCCCCTGCACGCTTCTCCAGGCTTGGGTGGGGCGAC
-GCGCCCAAGTCGGGCACCGGGCAGGCTACGGGGTGGGGTAGGACCTGGGAATGGCGCACC
-CACGCATCCTCGAATGTCGCCTGCGGTTTGTGAAAAGCGGGAAGTCCGCCCAGCTCAGGA
-CCTTTGGCTGGCAGGCGAGGTGCCCCGCGGCCCTTGGTGCTGAGCAGGGGAGAGACAGCT
-GGGACCGCGAGCCTGGGAATCGAATCCTAGTCTGCGTGTCCTCGGTGCTTCCTATTTGGA
-AACTGGGCATCATATTATCATATTCCCTTCTCCCTCCGGATTCTTATGGAGCTTCGAACG
-AGATTAAATATACATATATATGAGAAAGGGATTTGTTCACTAGGTCCAAAAGCATTTGCT
-GGTCCCATATGTGGTCGGACCCTGTGTGTAGTAGGCGGGGGGCAACATCTACGACAACCT
-GAGTTCGTCCCCTTAAGAAGCTTTCCTGAGTCTTGGGCCCCCCAAATTCTCTTCTGGGAT
-GGTCCGAAAAGACGTCCCTGAAAGAGGAAAGGGCGGAAATCCTACCTGACGGCAGGTGTC
-TCGGAATGAGCTAAAATTTAAAAGGCAACGCGGGGCAGGGACAAGCGTCCAGCGTCAGAT
-GGAAGCAGGCTCGCGTCCCCTACCCTTCCTCCAACCCCTAACCTAAGAAAAGAAACCGAT
-CTCGCCGGTCTCCCCCAATCCTAGCCGCGAGACCGCCCAGCCCCGCAGCCCGAGCCCCGC
-CCCGCTCCGGCGGCCAGCGATTGGGAGATGCAAATACCGGCTTCTCTGCCCAGCAACGGG
-TGACGCGGCGCCCGAGCGCGAGGCGGGGCCCGGCCGCAGCCCAAGCGGGCACCTCGGTGT
-TTACAcggggcggccccgcgcgcgccgcagcggcccgcagacggcgagggggaggggtgg
-tgcgcgcgccggcggggccgcgcggggAGAAAGACACTGAAAGGCGTcggcggccgggcg
-gggagcggcgcgcgcgggccgcggcggAGCCAGAGGCTGCAGGAAGAGCCCGCGGGGGCC
-CGGAGGGTGCGATTCCTCGGCCCCCGCAAAACAATGTGTGTTGTGAGCCAGGACGCAACT
-TGCCGGAGGCGGCGGGGGCGCGCCGAGCCCGCCTGAGACCGCGCTGACCTTCTCCCCCCG
-CCGTCCGTTGGGCCCGAGCGCCCAGCTCCTCGCTCCCCAGTTcgcgggggccgggccgag
-ccgcggggcggggccgccccTCCGTCGCCGCTGCCTCCTCCCCCACCCCCAGCCGCGGAG
-GATGCGGACGGCCCCCGGCGGCGTCTAGCGGCCCCGGGCCCAGGCGCGATGGTGCAGCAG
-CGGGGCGCGAGGGCCAAGCGGGAcggcgggccgccgcccccgggacccgggccggccgag
-gagggggcgcgcgagcccggcTGGTGCAAGACCCCGAGCGGCCACATCAAGAGGCCGATG
-AACGCATTCATGGTGTGGTCGCAGCACGAACGGCGGAAGATCATGGACCAGTGGCCCGAC
-ATGCACAACGCCGAGATCTCCAAGCGCCTGGGCCGCCGCTGGCAGCTGCTGCAGGACTCG
-GAGAAGATCCCGTTCGTGCGGGAGGCGGAGCGGCTGCGGCTCAAGCACATGGCGGATTAC
-CCGGACTACAAGTACCGGCCGCGCAAAAAGAGCAAgggggcgcccgccaaggcgcggccc
-cgcccccccggTGGTAGCGGTGGCGGCAGCCGGCTCAAGCCCGGGCCGCAGCTGCCTGGC
-CGCGGGGGCCGCCGAGCAGCGGGAGGGCCTTTggggggcggggcggcggcgcccgAGGAC
-GACGATGAAGACGACGACGAGGAGCTGCTGGAAGTGCGCCTGGTCGAGACCCCGGGGCGG
-GAGCTGTGGAGGATGGTCCCGGCGGGACGGGCCGCTCGGGGACAAGCGGAGCGCGCCCAA
-GGGCCGTCGGGCGAgggggcggccgccgccgccgccgccTCCCCGACACCGTCggaggac
-gaggagccggaggaagaggaggaggaggCGGCAGCGGCTGAGGAAGGTGAAGAGGAGACG
-GTGGCGTCGGGGGAGGAGTCGCTGGGCTTTCTGTCCAGGCTGCCCCCTGGCCCGGCCGGC
-CTGGACTGCAGCGCCCTGGATCGCGACCCGGACCTGCAGCCTCCCTCGGGCACGTCGCAC
-TTCGAGTTCCCGGACTACTGCACCCCCGAGGTTACCGAGATGATCGCGGGGGACTGGCGC
-CCGTCTAGCATCGCAGACCTGGTTTTCACCTACTGAGCCCACCGTCAGCGGGGCGCGCAC
-GCCCCCAAACCAGCTGTTTACATACAGGAATCAGGTATTGGGGCCCCTCGGAGGCCGAGG
-CTGGCACCCCATCTCCCGCGCAGCCTGCCCCCTCCTGGACGTGCCCATCCCCCCTCAGAT
-CCAGACATGCCCCTCCCCCGCAGACACACCCCAAGGCAGCCCAACCCCCACCCCTTCCCC
-GACACCCAAGCCCCTCCCCACGTCGCCCCCTCCTGCACAGCCACCAGCAGCCAGCCCCCT
-CCGATACACCTCCCGTCCTCTCCTACAGACCTGCACCCCTCCCCCCTTTTGCACACGCCC
-CTCCTCGTGGCCGGAGGACCCGCCCCCTCCTTTGCTCCGGAATCTCTCCTCCCTCGCCCG
-GCCCGCCTTCTCTGGGTTAGGGGGGCGATGCGGCCGGGTGGCAACGCACGCGCCTCCTGC
-GCCCCTCCCTTCCCTGGGGGGAGGGGCGCACCCCTTTTATCCCCGGAGCGCTAGGGCCCG
-CCCCTCCGCTGGGGCCCACCCCCTTCGTGCGCATGCTTAATGCTTCTGGGGAGGAGGGGG
-CTGGTCCCAGCGGAGCCGCACTCTTCGCCCGCTCCGGGCAAAAGCGGGGGCGAGTGTAGA
-GCGATCCTGGGAAATCCTTTGATCCGGGAGCCCTAGGTTTCCTCTCCAGCCAACGGGGCG
-TCGCTGCCTTAATGGGAGGAGCACTCGGAAGGGTTGGTTTGGGCCTGAAACTCTCCCAAG
-TGGCATAGCCCCTTTTCCGGTATGGGGTCTCCTACACCCACGCGCACCACCTCTCCGGTC
-GCGTGGCTGCCTCTACAGCCTACCTATACGTCCCTTTTTCCCCCCAACTGGGAATTGAGA
-GGTAAGGTCTTTCTCTGGAAATCCAGCAGTAGAGGAAGGGACCACCCAAGAAAACTAAAA
-ACCAAGGCACCTTACCAGTCTGTCTGGGGACAGGATCCCTGCTGCACCTTCCCCACCCCC
-TCCTGGGAAGTGCCCCCTCACCTCAGGGCACCCGCAACCTGGGCTCCTCCCTGAGCGCAC
-CGGCCCTTCCTGTCACCCAGGTCCACCCTCAGTACTCAAGCTGCAGTATACAGCGGGAAA
-AACTGAGGCACTTTGGTGCTAGGGGTTTGGGACTGAGGCGTGGAGAGCAGATGTGATGGC
-AGGAAGACTCTCGCTTTTAAACATCTGGTTTGGGAGAGACCATCGACTTGGCCAGTGAGA
-CTGAGAATGGATTCCGAGTAGTGATGGGCCGTTTGCACCTCGGTTTTTCCACGTGAGAAA
-TGGGGAGAACGCTGCTGTTAGGAGGAAGTTGTGTCCAGTTCAGGGTGCCCTCGGGAGCCC
-TGTCCCTGTTGCTGTGGCCCCTCTCACGCCGCCATCTCTCTGCCCCGCCCCGCCCCTCCG
-GCCTCCCCACACCCCCCTTGCCCTCACTACCTGTATCTCACCGGCGTGTGTTCACCCTCC
-CGGGTGGCTCACACACTCTCATTCACACACACAAATCTCAGGAACAAACGGTCCCAGAGT
-CCTCCGGACCCCTGCCCAGGGTCTCTGCAGGTCTCTGCCCCACGCGTTCCCGTCGCTGAC
-AAAGCCACCAGCTGCCTCCTTTAAGCTTGGTGCTCCGGCTCTGGGCCTTTCTTGCGCTCT
-AttttttttttttttttttttAAGAAAAACAACAACAACAAAAAAAGACAATGAAAAAAA
-AAACGTCATGTGAGTGAAGAGATGTCACTGTCTGTGGTCTTGGAGAACTAGTCTCGTAGC
-TGAGGGGTGGGGTCCCTCTGTCTGGGGCACTGGCACCCACAGCAGGACTCCGCCAGTCTG
-ATGCCAGGACTGAATAAAGTGTATTTGCCCCGACCTTGCCCTGTGGTTCTGCATGTCTGT
-GCTCTTCCTCAACCCTCCCTAAACAGTTTGCCAGATTCAAGTCCGTGTGATTTGGGCCCG
-AGCTGGGTGTCCCAGGGCAAGCCACCTTGCCTGTCTAGGCCTCTATGTCAGGACTCCCTG
-GCCTTCATGaagaatagcaaactcatccctgtagggaccaggcaggtaacatagacgagt
-gactctgggtggacagtggtgtcatgacccacttcaaggggcctacctcctgccagttgt
-gaccctgtgggaatgcagtccacagtggccaggtggccagatttttcaagaaaagctgga
-tggatgtttctgagtcatcttaatttcaaaatgagactcatattttaaaatttctgtggg
-ccaaatgaaacaagtatgcaggcaggtctggtccgagggGGCTGGCTTGGCCATGCCTTT
-CTGTGCCTTTAATGAGgactaagaagcaagattgggccacactgtctggactcaaagccc
-agctccaccactgagcacccgtgtgactctttccatatgtataacgtggggataataata
-atagctgcttcacaggatGAAATGAAGTTTGAGGTGAGAAGCATTCACCATGGTGCCCAT
-CGTGTTACTCCATTGTCAGAGGAGGAAACGGGGTCAGGCAGGAAAGCAACTTAAAGGAGG
-GCCTGCAAGCAGCCAGGGTCAGAGACAGGGCTTGGTTCTGCTTCCTGGTGAAGCATGGCT
-TCGGGGTGCTGCCTCTCCCTCCCTGTTTGAATCTGCAGATTGTGTTAGGCCCCCAGCTGA
-GGGCCTGGAGTGGTGGGATTGGTCCCAGTGCCTGGCGCACATTGGCCTGCAGAGTAGATT
-AACTGAATGACCAAAGAGCAACAGAAGTCTAGTGATTCTTGTCTTTGAGGTTCTGACTGG
-TGTTTTACAACTGAGTCCAAGGCTTTTCCCTCCTTTGTCCCTCTGACACCCCTCCCCCTA
-ATTCTCATCTGTCAGATCCAGTGTATTCCTAAGCTGGGACAAAGCCTCTGTTTTCCCAGT
-AGGAGCCAGGGCTGAGTGTGGAAATTACAGTGACTGCTTCTTCTCAGCTTCTCTGGTTGA
-AAGCAAGCTGGCGAAGTAAGAGGAGGTAGAGTTGAGAAGGTGTGGAAGATAGGGACAGCT
-GCCCCCAGAACTCCCTTCAAGGGAGGACTTccccagctatgggaagtgccatcagggtgg
-ccgcagctgcagagagccacttcacctgagaccacgcccttcctggggcagcctgtatct
-ggtgtctgagtgaggcatggtataaacacctggtcatttcaatccaacatgggacggaca
-ctgacagacagtactcccagcaggcccaggccagccagggcttcgtcaggcctgcagcac
-aatttgacttcctatgcccaggcctgcttcctcttcttcctcttcttttcacaggtgctt
-attcctaataaacatcttgcaacccaaactcagtctcattgtctgtttctagagaaaccc
-agtctacaacaGAGGGTTCAAGAGACTGGACAAAGGGAATTGGGTCAGTGGCCCAGCAAC
-TGCAGCTAGGCCGGTCGGATGTATCCTAATGTCAAGAGTCTGTTCACCGATGCCATCAGC
-ACCAAACTAGGGGCTGCACACTTTCCTAGTCTGCACACCAGTCACGTCAATTAGAGACTC
-CAGCCTCAGCCCGAAGGCCTTCCAGGGCCCCCTGCTGATGCCATTCTCACTGCCAGTCCG
-TCCCCTGGTAAAAGCAGGTGGGAGGGAGGTCGTCATCTGAGTTTGTCTTACAGAATAGCC
-TGGAATGGGGTGCACGGTAAAATGCCTGACCGGAGATAATGCTAGAgctgtggaaccttg
-ggcaagcctcttcccctttgtgggcTGTACTGGGAGTCGGTAATAGGACTAGAAGAGGGA
-CCATCTCATTTTGGTTCCTTCCATTTCAGATGCTGACCTGAAAGGTCGGGGAGACAGCTC
-CTTATGGGGTCTCTGGGGCCACCTAGTGGCTAAGAGGAGTAGAACCAAGGTTCTGTGCAG
-TTGGGAGGTGGGAGTCGGGGTGTGTCCCAGGCCAAGGAACTGAGTCCCACTCGAGTCTCA
-CTCCATTCATGCATTGACTCATTGCTGGGTCATGCCCCTTGCCTGGGTGGTGTGAGCCAC
-CCTGCTTCCAAGGCTTTCAAAACACCATACGCTGAtgtattgtttctcatctattgctgc
-gtaacaaattgccacaagcttagcagtgtaaaacaacatgcatttgttatttcagtctcc
-atgcatcaggagtccagcatgccttagctgggtctctgctcaggatctcacaaggcagca
-gctggggtgctggtggcccgcattccttcttggagctcagcagccttttccaagctctca
-cggtagtgggcagaattcagttctttgtgcttataggacagagatccctgttctattgct
-ggctgtcagttagtaccactcttgattactacaagctgctcagtttcttgccacatggcc
-cccacagggcctccccagccttctcacaatattgcaacttattttgtcaaggccagagga
-gaatttttctgctgcttggagtcacttggctcagggaaggtttaagctctcttttaaaag
-cctctcctggctgggcatggtgtgttcatgcctgtaatcccagcactttgggaggccaag
-gtgggtggatcacctgaggtcagcagttcgagaccagcctggccaaatggtgaaacccct
-tctctactaaaaatacaaaaattagcctggcgtggtggcagtcgcctgtaatcccagcta
-cttgggaggctgaggcaggagaatcactcgaacctgggaggcggaggttgcagtgagcca
-agaccaagccactgcacttcagcctgggcgacagagcaagactctgtctcaaaaaaaaaa
-aaagaaaaaaaaggaaaaagagagagagaaaaaaaaagccttccctaattaggtcagact
-cacccaggaaaatctcctttttgattaggcatcaactaatgtgggattttatatctgcaa
-aaaatcccttcacctttgcagtatattgtagccttataagagtgacagctgtcatactag
-atttgcccacactcaaaagggaggaggctgtctagggcagctacaccagagactgggaat
-cttgggggccatcttagaattctgcttatcacacacctgtaatcccagcacttcgggagg
-ccaaggtgggaggatttcttgagtccaggagttcaagaccaacctggccaacatagcaag
-acctaatctctagtaaagttttttttaaaaaaattagccaggcacggtggtacacacctg
-tagtctcagctacttgggaagctgaagtaTCATAgctgagaattctcaggtctacatctc
-catcccagacatgactagactagctgccttcttgtcatctccactgatatatctaattgg
-cacctcaaactggacatgccaaaaaatgaactgtttccacagtgctcccaagcctgcttc
-cacagaccacatctgcacagctgatgtgaaatgaaaggctaaagcctctcagttatcctt
-gatgcctcttttcctcccagcgccatctcccttataccctgttggctctaccttcaaaat
-atgccctgtgtcttgtcacttctcacatcttccatggcctctgggtccaggatataaggg
-catacgaagggctccttgcgttttcctttgccccactcatagtcttattgtccacacagc
-agccggagtgatctggttaaactgtaaatcccagcacaccctgccactgttcaaaattct
-ccaaagactctcattcagtagaagccagagtcctcagcatggcctgcaaagccccataag
-aagtagcctgtggctcagcctcggcttcatcttctactttttctgtttctcacatgccca
-gtcacactggtcttgctgttcctcaaaagtgccaatcacacttccgcctgaaggcttttg
-cacatgcttttccctctgcttaagatacccttcctccggctgggcgaggtggctcacgct
-tctaatcctagcactttgggaggtccaggtgggtggatcacctgaagtcaggagttcgag
-accagcctggccaacatggcgaaaccccttctctactaaaaatacaaaattagctgggcg
-tggtgacacatgcctgcagtcccagttactcaggaggctgagacaggagaatcacttgaa
-tccaggaagcagaggctgcagtgagctgagatcgcatcactgcactccagcctgggcaag
-acaaagcgagacttcacctcaaaaaacaaacaaaaaaatacccttcctccagatagccac
-atgtcttacttccttcaggtctcagctcccagggcgccctagagtaggcacagggagtac
-ctcacagtgtcctccctgaccatccatataaagtaacatcctccataaactatcctgtta
-ctttgctttatttttctgaatagcatttatcactatctggcatttatcacctgtagtttt
-tactttttgtctctctctctctaatttgtatgtaagcttcataaggaaggaatgactctg
-GACTGGACTCCATGCCTCAGCACATTCACCCACCCATTCAACAAACATTCTTAAGGGTCT
-Aggctgggcatggtggctcatgcctgtaatcccagcactatgggaggccgaggtgggagg
-atcacttgaagccaggagtttgagaccagcctgggcaaggaaacaagaccctgcctctaa
-aaaatacaatttaaaaaagtatccaggcacagtggcgtgagcctatagtcccagctactc
-gggaggctgagctgggaagatctcttgtgcccaggagttcaaggctgcagtgagccatgg
-tcatgccactacactccagcctgggtgacagagttagaccctgcctgtaaaaaaaaaaaG
-GTGGGGGGCAGGGTGGGgaaggtttgccttgaccaggccgcgtgctaggtgccgggcata
-caaaagtgaaaaacgtgatttgtcctcagtgagctcacaggtctgaggagacacataaac
-ccaggaatggaaatgctttgctggcgatggacagtgagtctgggagaacattgaggagat
-gtttaacccagacaatggagtggggtgtggtcaggtcattccctggaggaggtgatgttt
-aagctgtggcatgaaacctcagtaggatgtgatgaccttagaacatggctacacgttctt
-tgacattcctcctttaaattaccttccctttgaatctgggctgggccttcatgatccatt
-tgtaaccaacaggacacagcagacatggtgctgcaggatttccaaggctaagtcacgctg
-aaccgccatgttgaaaggccaacagccaagactgccatgtggagaagcagcccgggccac
-gtgggaagaccatgtgtaggtagctgctccagttgacagctgagcccaggcaccagactt
-atgagttgagaagcttccaggggattccagcccctcataattcaactcactcccagctgt
-tggagggccttcccagcagaggcccagccatcacagagcagagacaagccatcccttcta
-tatcctgtctgaattcctgacccagagtccacgaacataatgagatggcagttgtccaca
-ctattaggttttggggcagtttgttatgaaggaataactggaacaataggataaggaaga
-gtgaggtgaaggaaaggactttacagatgccagcaacagtacatgggaagacctggtaag
-agtggctgacacagaagctaaccagcttgcggggaaggtgtggagagaggagggtgacag
-gcaagagtgagaaggaCCTTGAAGGTATTTGGACTTTATCCCGAGTCTTCACACTGCAGC
-CCAAGGGGTCAAGGAGTCtttttttttgtatggtaaacatggggtcttgctatgttgccc
-aggctggtcacaaactcctggcctccagagatcctcctgccttggcctcctaaagtgctg
-aaattacaggtgtgagacactgtgcccagccTCCAAGGGGtcttctcttttttttgagac
-cgcgtctcgctctattgcccaggctggagtgcaatggcgcaatctcagctcactgcaatc
-tccgcctcctaggttcaagcgattctcctgcctcagcctcctgagtagctgggactacag
-gcatatgccaccacacctggataatttttgtatttttagtagagacagggttttaccatg
-ttggtcaggctggtcttgaactccttacctcatatgatctgcccacctcatcctcccaaa
-gtgctgggattacaggcgtgagccaccatgcccagccGGggtcctttgaaaacacaaacc
-tgaccactgctgtaaacctttcgatggccccttactaccctcaggataaaCTCTTGAAAT
-TCAAGGCATTTTGCAGTTGACTCCCTCACTCTTTTATAGATTTATCTTCGGTCACTTTAT
-CCTCAGCTACGCCAGGCCACTCTCCAGTGACAATGCTTCCCGCCTCACCCATGCTATTTA
-TCTTTGCTCATGTGGAGGAATTAgtgggactttgggctaatcaccttgcctttcgaggcc
-tcagtttccccatctgtatgattaggtggttggactagaagtttttgttttgttttgttt
-ttgtttttgtttttttgagaccgagtttcactctgtcgcccaggctggagtgcagtgctg
-tgatctcggctcactgcaacctctgcctcccgggttcaagtgatttttctgcctcagcct
-cccaagtgactgggattacaggcatgcaccaccaggcccaggtaatttttttgcattttt
-agtagaaacagggtttcaccatgttggccaggctggtcttgaactcctgacctcaagtga
-tccacctgcctcggcctctcaaagtgctgggattacaggtgtgagccacgacacccagcc
-ttagatgtctcttaagagcatatctagcctggcattctaggagtctatgaAAAGGAGGGA
-GAAAGGTGTCTGTAGCCAAACCTGCCTGTCTGGCTTCTTCTAGGTTGCCTAGCAATGGAT
-GCCAACCCTCTCCCCCATCCTTGGGGGTTTCTTAGCAACCCAGTTTCTCACCCTCTGCTG
-TTTTCAGGGTTTCCTTTTAACTAAATGTCAAGTTTTGCTCTTTCTCCTCCAGAAAACCTG
-AGGCCAAGGGTCTCTGTGTAGAGCTGGATACAACCCAGAATACACAGAGACCTGGGTTTG
-AGGTCAGTGGAGGATTTGCTGTGTGACTTGGAGGTCTTTGACCTCTCTGGCTTTCATTTC
-AGACTGTGATTCCCTGTCATATGCTCCTCAGAGttcttcttcttttcttcttcttcttct
-ttcctcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttc
-ttcttcttctcttcttctttcttcttcttcttctttcttttcttcttcttcctcttcctc
-ttcttcttcttcttcttctcctcctcctcctcctcctcctcctcctccttctccttcctt
-ctttcttcttcttcttcttcttttgttttttgagacctagtctcactctgtcgcccaggc
-tggagtgcagtggggcgatcccggctcactgcaacctccgcctccctggtacaagcagtt
-ctcctgcctcagcctcccaagtagctgggattacaggtgcacgccaccatgcccagctaa
-ttttgtatttttagtagacacagggtttcactatgttagccaggctgatctcgaactccc
-aaactttgggattacaagcatgagccactgtgcccagccTGttcttttctattttttgag
-atggagtctcactctgtcacttaggctggagtacagtggcacaatctcagctcactgcaa
-catccacctcccaagttcaaacgatttttctgcctcagccaccaaagtaagctgggatta
-taggtgaacaccaccacaccgggctaattttttgtattatttggtagagacgggttttca
-ccgtgttacccaggctggtctcagactcctgacctcaagtgatccgccagcatcagcctc
-ccaaagtgctgggattacaggcatgagccactgtgcccagccctctgtattgttctgatt
-ttagtatatgtgtgctgaaatgagcacTTCCCTCTTCTCTTGTATGCGTTTGGTTTGACT
-ACCAAATTTattcacttttgcaataaaccgtcactgagcacctactatgttccaggcact
-gtcttaaggactggggattcgtcagtgaataaagcagacatagtcccttccctcacagag
-cttatactctagtagatggaaacgtataatgaataaacagataagtgcacataatgatat
-catgcagtgaAGGGGACAAAGTGTAAGGAAGGGCTACTATTTTAGATGAGGAGGTTGTAT
-CAGTCAAGATGGGCTAGGGaagtcagagatggttgggaagaaaaagcctggcttccccct
-ttctccctccaacttcctgtgggtgcctcaccttgggtgacctcagctagaggccagctg
-acaaaggaggctgagtagcttccaggggtcagctctgcaaagcaggaaagagcaaggaat
-ccactggaagcaagaaggcCCAAAAGTACCTTGGGAGGTACGCCGCTTTTTCAGCTCACT
-CACTGCCTGTAAACTGTCAGGGACCCTAGGATCATTAAAAAATATTTTGAGggccgggcg
-tggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggatcacttgag
-gtcgggagatcgagaccagcctgaccaacatggagaaaccccatctctactaaaaataca
-aaattagccaggcgtggtggtgtgtgcctgtaatcccagctactcgggaggctgaggcag
-gagaatcacttgaacccaggagacagaggttgcagtgagctgagatcacaccattgcact
-ccaccctgggcaacaggagcgaaactctgtctcTCTCTCTCTCTCTCTCTCTATCTATAT
-ATATATAGATAGAGAGAGAGAGAGAGAgtagtaaaatacagatagcataacatttaccat
-cttaaccatctttaggtgtacaactcactggatattaagtatagtcacattgttgtgcaa
-ccatcaccatcatccatcttgagaactcttcatcgtgcaaaactgaagttctggatccac
-tatgcactaactctccatttccccctccccctagctcttagcaaccaccattctgctttc
-tatatgtatgaatttgactatggtatatgtctcatataagcagaatcatacagtgtttac
-ttttcgtgactggtctatttcacttcacatcatgtcctcaaggtttatccattgcagcat
-gtatcagaatttccttctttttaaagctgagtaatattctattgcatgtgtatatcacat
-cttgcttatccattcatctgttgatagacacttgggttgcttccaccttttagctattga
-gaataatgttgctatgaaaatgggtttggaaatttctcttcaagatacactgctttcagt
-tcttttttttttctctctgagacagtctcactctattgcccaggctggagtgcagtggca
-caatctccgctcactgcaacctccacttcctgggtccaagcaattctcctgcctcagcct
-cccgagtagctgggattacaggctcacaccaccgcacctgatgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtctgtgtgtgtttagtagggatgaggctttgccatgtttgtca
-ggctgctctcaaattcctgatctcaggtgatccgcctgcctttgcctcccaaagtgctgg
-gattacaggagtgagccaccacccctggcttcagttctttggggtatataactagaagta
-aaattgccagatcatgtggtaattctatttttactttttcaaggaatcactatgtgtttt
-ccatagcatctgcaccatttttcattgttatcaacaattcacagggttccagtttccccc
-tatccttgccaaaacttgttattctgttttgttttatggtagtcatcctaatgggtatga
-agtgACTAGGATCATTTTGAGACCCAAACAGTCACAGGCTTTTTTGTTGTtgttgcccag
-gctggagtgcagtggtgcaatcatagttgaccgcagcctcaacctccttgggctcaggtg
-aacctcccacctcaggctcccaaggagctgggactacaggcacacaccaccacatccagc
-taatttttgtgtattttgtagagacagggttttgccatgttgaccaggctagtcttgaat
-tcctgggctcaagcaatccacctgcctccagcctcccaaagtgctaggattataggcACC
-CAGCTTCATAGGctttttagcccaggcttgtgatttctttgtcagtataattctctgaaa
-aacttaggtttctggcagggggcagtggctcacgcctgtaatcccagcactttgggaggc
-cgaggcggacggatcacctaaggttagaagttcgacaccagcctgaccaacagggtgaaa
-ccccatctctaccaaatacaaaaaattagccaggcatggtagcatatgcctgtaatccca
-gctacttgggaggcggaagcaggagaatcacttgaacccaggaggtggaggttgcagtga
-gccaagattgtgccattgcactctagcctgggcaacaagagtgaaactccatctcaaaaa
-aaatcttaggtttcttatcgatttgactgtagttaatggtactaaaaccatacccacaat
-acttttcaatataTTGTCCTCAAGTCTGCTTTTTCCCTTTGCTTTCTATCCTAAAGCTGT
-CACTCTCAATGTAATGGCAATTAGCAAGAATAACAGGTGGCAGAGTTGCACCTCTAAAGT
-GATCTTGGCTCTGAGAGTTTTTACAGGACATTTTTCACTCAAAGCCTTTTAAAAATCCAA
-TCTCATACTTTAGTTGATTCTAGCCTTGAAGTACTTTAATTGATAAAAAAGAAAGTTCAT
-AAGGTCATTGGGAAGATTAATTATCCCAGCATATAGTAAATGCTCTATAAATGATACCCA
-TCTTTGTCACttttttttttttttttgagacggagtctcactctgtcgccaggctggagt
-ggcacaatcttgtattactgcaacctccgcctcctgggttcaagcaattctcctgcctca
-gcctcccaagcgagtagctgggactacaggcagcatgctgccactcccggctaatttttt
-ttttttttttttttcagtagagctggggtttcaccatattttctttctttctttctttct
-tttctttctttctttctttctctttcttttcttttcttttctttttctttctttcttttc
-ttctcagagtctctctctgtcacccaggctggagtgcagtggcatgatcttggctcactg
-caacctctacttcaagtgattctcctgcctcagcctcaagagtagctgggactacaggca
-tgtaccaccatgtccagataatttttgtatttttagtagagacagagtttcaccacgttg
-gccaggctggtctcaaactcctgacctcaagtgatccacccacctcagcctcccaaagtg
-ctgggatcacaggtgtgagccaccatgcctggACAAATTTTCCTATTTCTTAATAGATAA
-TCCATCTTGTTTTTCTCAAAAGTAGACAGTTTATCAGGTGTCGTGTCTCTCACCTTCCCA
-CCCTACTCACCTATAAACTAATATAACAATAACAGTaacaataaccataatttgctgagt
-tctaattttgttccaggtactttggataagtgtcttatatgcacatctcatttcactctt
-tcaacccctctgagaggcaagtacttaaattatcttcattttacagtcagggaaactgag
-gcacagagtgtttaaatcatgtaagcagtaagtagtggagctaagattcaaacgcagatc
-tgctggactccagagttcAACTTACAGACACTACATTGTGGCTCTTCTTGGTGGCCCCCT
-CCCCTCCTCCCCAGGCTCTCAGAGGATACAGGATCCCTCCTTTGCTAGTCAAGGCCAGCC
-CATCCCCCTGTATATTTGACTTCATCTCTTCCCACTGCCCCAGGATTTCATCCACCCCTG
-CTCTGATATCAGGGGCCCCCTCCCCTTCTGTCCATGGTGTGGGGCTTTTTGCACTTcaca
-cacacacacacacaggtgcacatacatacacacCCCTTCTCCAAACCACTCCACAAAGGG
-CCCCTGCCTCCTCActttcttgccttccacatcacaccctaaattctcctggccaaggtt
-cccactgacctccttgttgccaaacctaagtcctgttgtcccgctgtgtgtctcttatgc
-acttggcaaggctgagcaggtccttcttggaaatgtgtttctttggtttctatgacacAA
-TGCACCCCCACTCCAAAACACACATACACACATCCCAGATTCTTGCCCCCACCCACCACC
-ACCCGCTATCTCTCTAGATGCTTCTGTGGTTCTTTCTCCTCCTCTGACCTCTTCAAATGT
-AGtatggtggttttaaaacatgtccataatttttttttttttttttgagatagagtctca
-ctttgttgcccgagctggatacagtggtgcgatcaggtgcgtgccaccatgctcagctaa
-ttttttttaacttttaagttttttggagagataggggctccctgtgttgaccaagctggt
-ctcgagctcctgggctcaagcgatcctcccatcttggcctcccaaagtgctaggattaca
-gacttcagccatcgtgcccaaccatgtctataaattctttaagactcctcccactgagta
-acagagtctgtttcttccccttgaatctgagccaaacttagtgactcagactacagtaga
-aatgattctatggtgacttgtgaggctgggtcataaaggcaatgtggcctgactcatggg
-agtcctgagctacagtgtaagaggtgtcaacactctcagctgccatgctgtgaggaagcc
-caactggctcatgcagagagacaacatggagaggccttgaggctatatgaagagagatgc
-ttggccagctcccagctgctccagctccccagtgctccggcttccactgtaaccacaaaa
-gagacaccaaggcagaaccacccagatgagcccttcccaaattcctgacccacagaaatt
-gtgaaagatgataaaaatcattggatttggagtggtctgttatgcagccatagacagcca
-aACAGAGGCAtcttaatctgcttgggctactataacaatttagcatggagcaggtggctt
-gacaacacacatttattcctcaggtctgcagggtgaagagtctaagatcaaggtgctggc
-aaattccattctgctggcaaccaagggcctgacttctggtgtacagacgaccatcctatt
-gtagccccaaatggcacagagaagaagcaagctctcaagtctcctcttatcaggctgtaa
-tccctcccaaaggcccacttccaaataacatcaccttaggacttcaacatatgaatatga
-gggagatacaaacattcagtctgcagcaGAGGGCTTCGTTAGAGCTCTGACCTGAGCACG
-CTTCATCTCAATGTCAttgtttttgccagctctacatccactgccctttttttttttttt
-tttttttttttttttttttgagacagagtctcactcttatcacccaggctacggtgcagt
-ggcacgatcttggctcactgcaacctccgcctcccagcttcaagtgattctcctgcctca
-gcctccggagtagctgggactacaggtgcatgccaccacacccggctgatttttgtattt
-ttagtagagacagggtttcaccatgttggtcaggctggtctcaaactcctgaccttgtga
-tccacctgcctcagcctcccaaagtgctgggattacaggcatgagccactgggcctggcc
-ccactgccctttcttacagtaacagtatttcaatttccctttagggaagctcttcaagca
-ggttctcagtccaagaggtttctctgggttaagcactgccagccacccaaagggtgagca
-agtaaccagccaatcagagacactccagtgggttcagtaaatgacatattatctaactgg
-ggtgaggggaatcaacatcagggcttttcctgagactataaggagaaacagattcttttc
-ccagcagttaaatttgaagtctgtggccattttgctaccatatagggaaaatctgcctga
-cattgaagccaacacagatgagggaagagccaagagataaagagaaagatcctgagcatc
-tggatacagccatgcctgaagccagtatcccttgacttctcaattatgtgagcctttata
-ttccctttgtttaaagccagttcaagttTAAAACTGCCATTTCCAGTGAGAACAATTCCC
-TATGTTGTATCTAAGGCCAAGACCTTGCCCCTGACTCTAGGCCAGAATGTCCTGTACAGT
-GCCATTCAACTCTGCCAAAAGCAAAGGGCATCAACTTCTCCACAACCTGGCTTTCCCTCA
-TCTATTTTACATCTCTGTTAATGGGAGCATCACCCACCTGACCTATAAACATAAAAGTCA
-GCCTCTATCctctctgtctctctccctctctctgtctctctctctctctctcAATCCCTG
-TCACTTCCCTTACTTCTTAGTAACCAAGTTCTGCCAACTTAACTTTATGGACATTTTTCA
-CACCTGCACCCTCCTTTCCATTTTTCCTGCCCACTCCAATTCTTCATCATTTCTCACCTA
-AATTTTTACAAAATCAATAGATAACTAACATAGAGGTGTATAGTAAAAAGTGAATTTCgg
-ccgggcacagtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcagatc
-atgaggtcaggagatagagaccatcctggccaacatggtgaaacctcatctgtactaaaa
-atacaaaaaaaaattagctgggcatggtggcatgtgcttgtagtcccagctactggggag
-gctgaggcaggagaatcgcttgaacccgggaggcggaggttgcagtgagctgagatcgca
-ccactgccctccagcctggtgacagagcgagactccatctcaaaaaaaaaaaaaaaaaGT
-GAATTTCATTCCCACCCTTGCCATCAGTTACCCTCCCCCAAGGCATCTACTGTTACCTCT
-TTCTTGTCTATTTTCCCAGAAGTTCTCTATATGTGCCATCTTTTTGAGAATTTcaaatgg
-aggcatactatcaagacttttcagaacactgcatccttcttcacttgaagtgtgattaat
-ataaataattatagactaatttcttctttctaatggatgcatagtattccacaaagacat
-ataatgtacataactcgtcttccattgatggatatttaagtggtgtcccagttatctgtt
-agcacagaacaaaaccccccaaacctagtggtataacacaataaccacttgaatatgctt
-gtgggttctgtgtgtcaggaattcaggcaggacacagtgaggccagcttgtttctactct
-gcaatgtttgagtcttcagctaggaagatttgaagatttgaaggctgaagctgattcaaa
-tggctggccactggaatcatcttgttcttccccttccccttcgccttctacagtgcaatg
-gcatgatgtcggctcactgcaacctctgcctcccgggttcaagcaattctcctgcctcat
-cctccctagtagctgggattacaggtgcacgccaccatgcccggctatttttgtattttt
-agtagagacggggttttgccatgtggccaggctggtctcgaactcctgaactcagggtat
-ccacccgccttggcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggcct
-catctggttcttcttcactcacttcttttatgcttgaactgggatgactcaaagctaagc
-ttagctgggactgtggtgccttcatgtgtcctctcctgatggtcttggcatcctgacagc
-atggcagcctctaagcagacatggagccctaggtaggcatggtgcctcaggctccaagag
-ctagagttctagcagaagttgcctgtacttttatgtctggaccttagaagtcagagtgtt
-acttccaccgtactccattggttgaagcagtcatcagctcacccaagattcagagagggt
-acaaggatcccacctctctacagaggagtgctaaagaatttgtagctatattttaaaacc
-accacaggttgtttccaatctgtagctattcctgtagttcattttacaggctaacatctc
-ttgaatgtcttcatttctctgcaccaggccaagacactgtcatctctgatctctttgctg
-atctcttgctgtcactcttgtgctcaacatgctgttctcttgacagcagccagaggtctt
-ttcagaatgaaaatcagatcacatcccacccctcttcataacccttccatggctccccac
-tacccttgggctgaagctcaaactccttaccttggcttatgaggccccacaaggtctcac
-ttctgcctgcctctccaatgccatctcctgtcacCATTTGGGGCCTTTAGTTTTGAGCTG
-CAAGAGTTCCTCCCATcacacacacacacatacacacacacacacacacttaaatgagta
-agtaaatagaacatacaaaacgcttaaacactttgcacatagtgagcataataagtttgc
-tactattATTAGACTGTCttcagtaaatatttactgggctgcctactcagtgccaagcac
-tatgggaggctcacagatacaacacgaacaagaAATATGTGGCCTTggccagacgcggtg
-gctcacgcttacaatcccagcactttgggaggccgaggcaggtggatcacttgagctcag
-gagttcaagaccagcctgggcatcatggcaaaaccctgtctctattaaaaatacaaaaaa
-ttagctaggcatggtagtgcgtgcctgtagtcccagctcctcaggcgactgaggtgggag
-gatcacctgagccttgggagatcgaggctgcagtgagccgtgatcatgccaccgcactcc
-agcctggacaacagagtgagacgctgtctcaaaaaaataaaaattaaaaaaaaagaaaaa
-GAAAAACTAAAAAGGAAGATGTGGCCCTATCTTGccgagctcattcttctgtgtgtcccc
-agcccctagcacaaggagaaacagaatagatgctcaaGACACAAAGGCATGTCTGTGCAA
-GGGTGCTTGAtgacggttggaggggcacaatgactttcccaagatcacacagcaaatgtg
-ggacaaaatcaagGCTGACAGCTCATGACAGGGTGGGAGGCAGATGCAGCTGCCTGGCAC
-AGGCTGGCTCTCCAGGGAGATGGGCAGTGGGCACGCATTGCCCAGGGCAGAACTGGGGCT
-AGGGGAGGAAACAACAAGGGAGGCTGTCATTAGCTCCTTCCAAAGTGGAGGTCACTTCTC
-TCCCAACCCCGAGTCCTCCACCCAAACTCCCTTCTCAAGGTACAAGGGCTGATCCCGTAC
-CAGGGATGGGTAGGGACTCAAAGAGGAAAAGAGGATGAAAAGAGGATGGGGACTGAGTGA
-GATGTGAGGACTCCAGAGGGATTAGCGGCTCTCAAGGCAAGTGGGAGGGGACTTCCCGGT
-AGGAGCCCGGAGACAGATGGGAGCCTGTGAAGAGGGCGGGGGCCCGGCGAGGAGAAGCGG
-TTTCTACGCTGGGGTGGGGCTCCATGAGGGGGATGGAGACCTGGAAAAGGGACTGACGGT
-GCAGCGAGGAGAGGAAGGCTCGGTTAAGGGATGGGTCTTCCACGGGAGGGGTGGGGAACT
-GCGGGAGTGACGGCAGCTTCGGTGAGGAGTCTGAGGGGCTGCGTGAGGGGCTGGGGCCCA
-GGGAGTCCGAGGGGTCTCTGTGAGGGCGCTGGGGTGTCCGAGCGAGCAGGGAACTCTGGA
-AGGGGACAGGAGCCGGGGGAGCTGCAGGCGGCCGCCGTCTGCAGAGCCAGGCCCTGAggc
-gggccggcgccccctcccccgccccgAACTGCGGCGCAGGCGCGAACCGGACCCGCCTTT
-GCTCGGCGGAGACAGCAGGCAGAGAGGTGAGCTTAGCCCTGCCCCACGCGCGGCCAGGCC
-CCAGCCCCAGCCCCTGGAGAACCCCCGCGCTCTGCCCGCATCCTCAGCCCGGGCCGTGTC
-CCGCCAGGGCCGGGACCTTTGCGCCTGAGCCTCGGCTTTGGGAGGTGGGGGTCCCAGGGA
-AGCAGCAGGGGCGGGAGACAGAAACAGCCCCATCGCCCCTCGACGCCTCAGGGTTGATAG
-GCTGGGTAGAGGCTTCAAAGGACACCCCCACCCCCGCCAACACTTCAAAAACCCATTCCT
-ACCCCTCTCTGCCTCAGTTTCTCTCTAGGGAAAAGGACGCAGTTGGTGTGGAGCAGGGCA
-TCGGTGGTCCTGTCAGGAAGAGTGGCGCGGGTGCCGGTGGGGAAGGGAGGCGGGAAATGG
-CCTGATTTCCCCGGCCGACACCCCCTACCCATCCCCCCCGGGAGGGCGCCCCTTCTCCCC
-CGCCCGGGCAGCGCTGGACGCTGTAGTGGGCGAGTCTGAGGGTCTGGGAAGGACACAACT
-GAATGAGGCTGTGCAGAGGCGACAGATTCCGTCCATCTTCGGGCCCTGGCTTCCGTCACT
-TCCGCCCGTGCCTGCCGCCCCTCGCCTCCTCCCTCCGCCGCAGTCTCCCCACGTCGGACA
-GCGCAGCCCCCTCCGCCTCCCGCTCCCCTCCCACCGAGCTCCTCCCGGCTCCCGGGCTGG
-GGACGCCTCCCTAGCGGTTCCCATGGCAACCCTCGTCCCGGGTGCCTgcgccccgccccc
-cgcccgccAGACCTACTCCGTGCAGCCCTGAAACGCCAGGCGGAGGGGCCAGGCCGAGCG
-GGAGGCAGCGTCAAGGTCACCTTCCCTCTCCAGTAGCAGCAGGACTGAGTGATTCCATCT
-ATTTGGAGTCGCGGAAGCGGTGAATTGGAGGGGAGGAGCTGACCCAGGTCAACAGCCCCG
-AAGCCCCCTCCACACCTCCTCACCTGTGGCCTTGAACAGTGGTCTCCGCACGGAGGCTCC
-TACCGTCCCCCAGGCCCCATTTCTTCTCCCCACCCGGGCCTCCCCAGCGCCTCGCCGGGG
-CGGGTACCGCGCTGGCCGCACCCTCCGCACAGCCCGCCCCGCCCGCCTCCTCCGGCGAGC
-CCTCCTCTCCAGACCTCTCGCCCTCCTCCTCCGACGGTCCTTCGCTTTCAGTCTCTGCCT
-TTTCCCGTTCTCTGTCGTGGCTTTTGTTGTTGTTGTTTTTCCTCCTTTCCTTCCCCGCTC
-TTCTTTTCCCTGAATTGTAAGTGAGGAGGGTGTACAGCCACTATTTATGGACAGGCTTTC
-TTGACAGCAATCTTGTGTGCCGTGTGACTCCAAGCAGAACCTCCAACCgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtCGTACCTATCTGGGTATGTCTCTGTATG
-CTTTGTGAGTATGTCTGTGTGTTTCTCTGTGCTGTTTCGGTGAGTTTCTCTATGCAGGGA
-TTTGAGGACCACATCTGATTGGAAGTGAGGGGCAGCTGTCAGGACCTTTATCTTACCCTT
-TGGAACAAGCACATTGTTTCATTTTGCAGGAGGCTGCTAATTAAGGCTGAGGGCCATCAT
-GGAGACTGGGGTAGAAGCCCAGTCCTCCCCCAACACCTCCTGGCTTTGGTTCGGGCCAAA
-CCTGTATATGGATATACAAGTACCTTCCATTCCCAAGATCCGTGTCCACTTTTGTGGAAA
-AAAAAAAAAAGGTTATTTGATAGGTTTCTCTGGAAATCTAACAGCCCTTAAGCCTAAGAG
-TCTTTAATCCTGAGGGACCCTGACTTTCACTTCCAATGGAGTCAAAATTCATTGGAATCT
-GGAGGCTTTCAGGGGCAGTCCTGGGGAGGACCTTTTTATAGCCTTGCAGCTTGGGAACTC
-CAGCCCAAGTGTCAGCCATGACAATTACCCCCAGGAGGGGGTCTGAAGGGGAGCGGAGGG
-TGAGGCTCTCTCATTCCAGATATGGAGACTAAAAAGTTCAAGATGGAAGTAATAGCAAAA
-AAATTACAGTACTAATCACAACAGCTACCATTTCTCAGCATTAGAcacagtaactgtatg
-aaagaagtatgattattaggtctgttttacagatgaggaaactgagacccagaaaggtgg
-aagcacttgtctaaggtcacgcctccaggaagcagtgtgtccacgactccagtccaagtg
-gtcaggctccagagcccacagtcccaggtactGGGTGGCCTCCAGAGTAAACATGCAcat
-ttattgacacctccaattgccaggcactgggctaaggccttcagtgcattggctcattCG
-CAGTGTGCTTTGGGAAGGACAGGCTGGGATTCCAAAAGGCCAGACTGTGCTATGCGTGTA
-GGGTGTCTCGAGTGGGAGGAGAAGCGGGTGGGGCACAAAGATTTAGGGGGCTTATGAAGG
-TCACCATGAGCAGCTCCCACTAATCCCTCCCTCCGTCAGCTGCACCTTACCTGCTCCCCA
-GGGGTCCATGATGCCGAGCTGCAATCGTTCCTGCAGCTGCAGCCGCGGCCCCAGCGTGGA
-GGATGGCAAGTGGTATGGGGTCCGCTCCTACCTGCACCTCTTCTATGAGGACTGTGCAGG
-CACTGCTCTCAGCGACGACCCTGAGGGACCTCCGGTCCTGTGCCCCCGCCGGCCCTGGCC
-CTCACTGTGTTGGAAGGTAAGGCCAGATGAGCACCTCCCATGATTCCTCTGCCTTGATGG
-AGGAAATGAGTCTGAATTTGAGGCTCAGAGGAAAAAAGAAGAGATAGCgtagtagttagg
-agtcttgcacagtcaagcaacagaaaacccaattcaaatgggtttaaataatgaagggag
-ccttcattgTATTTGTATTTACAtacaaattatttacataattatttacatatttattGT
-ATGTAAATAATggtggctcatgcctgtaatcccagcactttgggaggctgaggtgggcag
-atcacctgaggtctggagttcaacacctgctctgtcagcatggcgaaaccctttctctac
-taaaaatacaaaaatggaccgggtgcggtagttcacgcctgtaatcccagcactttggta
-ggcggaggctgaggctggtggatctcgaggtcaggagttggagaccagcctggccaacat
-agtgaaaccctgtctgtactaaaaatacaaaaattagctgggtgtggtggcgggcgcctg
-taatcccggctactcgggaggctgaggcaggagaatcacttgaaaccaaaaggtggaggt
-tgcagtgagctgagatcaatccattgcactccagcctgggtgaaagagcgaaactccctc
-taaaaaaaaaaaaaaaaaaaaatgagccgggcgtggtggcaggcgcctgtaatcccagtt
-acttaggaggctgaggcaggagaattgcttgaacccaggaggcagaggttgcagtgagcc
-aagtttgcaccattgcactccagctgggcgacagaacaagactctgtctcaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaagaaaaaaGAAGGGAAAATGTTGCTCATTTTTTAGAAGAGA
-CCCAAGGTCCAAGGTTGCATACTTTCAGGCAAAGTTTGATCCAGCAGTTCAACCCTTTAT
-ACCAAGGACTTTGCAAGTTTTCTTAGTCTTCAGCCTCCTCATGGTGCCCCTACCCTGGTA
-GCCTGTTAGCTTCAGACTCTCCCCACATGTTCCCCAAATGGCCACTACTGTGTGGACTCT
-CAGGTCTTCACTCCACACCATCTAAGGGAAGTCAGCATTTCCTGTGGTATTTCCTTCAGA
-AAAGAAAATAgcctgtaatcccatcattttgggaggccaaggtgggtggatcacctgagg
-tcaggagttcgagaccagcttagccaacgtggtgaaacctcatctctactagaaatacaa
-aaattagctgggtgtggtgatgggcgcctataatcccagctactctggaggctgaggcag
-gataatcactagaacccgggagacagcagttgcagtgagcagagatcgtgccgttgcact
-ccagcctgcacaacaagagtgaaactctgtcttaaaaaaacaaacaaacaaaaaaTGGCC
-ACAGGTACtggcttacacctgtaatcccagcactttgagaggctgaagcaggaggattgc
-ttgagcccaggaattcaagatcagcctgggcaacatagtgagacttcatctctactaaaa
-ataaaaaattagctggatgtagtggcgcgggcctgtgatgcctactactcaagaggctga
-gccaggaggatcgtttgagcccaggaggttgaagctgcagtgagccatgattgtgccact
-gcactccagcctgggcaacagagtgagactctgtcaagaaaagaaaagagagaagaaagg
-aagaGAGAAAGCAAAATAGTAAgatattaaaaacatgttaccatttaccttagcaccaaa
-gaagagagaaatacttaggtgtaaatctaacaaaatatctgtaatatgagaagaactaca
-aaactcaaaagatatcaaataactaaataaatggagaaatagttcatattcgtggattgg
-aatagtcaagatgttagttcttcccaacctgatctttgattcaatgcaatgccaatcaaa
-accccagcacgttattttgtggacgtcaaAATGTCACCTCCTCAGGGAGGAGATCCCTGG
-ACTGAGTCGGGTCCCTTGCTTTACTCTGGGCAAACTCTGTGCCCATTCATTCTTCAATAC
-ACTTACCACTTTGCACACTTGTAGTTTATATGGAGAGGTAAAAGATTCAGAAATTTAAAA
-ATCATTTATAagaaacaatgcttttaattcccagaagtcctgacaagcattgtgttggct
-ctcattgggtcacttgccagccttgaactaattactatggttaagagatggactatgctg
-actggcAGGAAGTGAGGTTCATCTCACTTAAATCTTACTGTGGTTTCTCAATGGTAGACT
-GGAGTACCTTGCCAGGGCAGAGAAAAAATGTGAAGAATTGATGTCTTTAACAGCCAAGGA
-GACTAGTCGGCCAGGGTGCACCAATGGGTCAAGGTGTAGAGGTGGCAATGAGCTGAGTGC
-CTGCTATGGGCATAGCTCTTTGCTAAATATTCTCGGGAGACTGAGGCAGAGGGTCCCTTC
-TTTTGCTTTCAAAGGACTTCACTCTAGTGAGGAGGTAAGGTGCCAACCTCTGCAGAGAGG
-CCAACTTACATAACTTCAGGTCAGGTCTGTAGGGAACACCAGGAGAGGAAATGATCAAGG
-AAGACTTCCAAGGAAAGGTTAGTGTGTATTTaaaatttttaagcatcttcttattgcgag
-gcactgtgctaggctcttgggaacacagaatttaagacatgaggtccctgtcttcgagga
-actcTTTTAGCTGTGGTTTatttaatcattcagcaaacatttattcagcctttgctctgt
-gccggcacgtgctaggcacagaagactcctagtgagccaaaacaggcacagtctgctctc
-atggagctctcagtactgcgggagaggcagacgtcacttacatagcaaccaaaatacatg
-tccaagtgtgcacaatggtaagtgtattgaagaatgaatgggcacagtttgcccagagta
-aagcaagagacctgactcagtccaggggtcttctccctgaggaggtgaggtttgagatga
-gatctgatggtgcataggagttaacccaacagagacaggaaggtagaaaggATAAAGAGA
-TGAGTTGGGATGGAGGGAAACACAGGGTTGGCCGGAGAAACCCACTGCTAGGTGGGAGCT
-GGGAAGGAAATTAAGAGGCCTCAGGATTCCAAATAAAACATGACAGTTTATGCCTCCTGT
-CAGTTAGACCCCAGCAAGTGTGTTCTGTGATTCCCATCTCCTGAGGATGGATCAAGGGGT
-TACCCTTAAGTCTGGTGAGGATCCAAGGTGATCCCTTGGCCAGGGGCCCCTGGCTGACCC
-TGACTGCTTCCTGGTCTGTCTGCTTCTCCCTAGATCAGCCTGTCCTCGGGGACCCTGCTT
-CTGCTGCTGGGTGTGGCGGCTCTGACCACTGGCTATGCAGTGCCCCCCAAGCTGGAGGGC
-ATCGGTGAGGGTGAGTTCCTGGTGTTGGATCAGCGGGCAGCCGACTACAACCAGGCCCTG
-GGCACCTGTCGCCTGGCAGGCACAGCGCTCTGTGTGGCAGCTGGAGTTCTGCTCGCCATC
-TGCCTCTTCTGGGCCATGATAGGCTGGCTGAGCCAGGACACCAAGGCAGAGCCCTTGGAC
-CCCGAAGCCGACAGCCACGTGGAGGTCTTCGGGGATGAGCCAGAGCAGCAGTTGTCACCC
-ATTTTCCGCAATGCCAGTGGCCAGTCATGGTTCTCGCCACCCGCCAGCCCCTTTGGGCAA
-TCTTCTGTGCAGACTATCCAGCCCAAGAGGGACTCCTGAGCTGCCCACATGGCCTAAGAT
-GTGGGTCCTGGATCCTTCCCCCCTTCTCACCATAACCCCCTCTCAGTGTTTCCCCAACTT
-CTCCCTTTTAGCAGGGTCCCTTTAGAGCCCAACTCCAGGTCAAATCTGGAGCTCAAATCC
-CAGTGCTCCCTCCCCAGGAGTGGGGCCCCAACTCTTCCAAGATACCAGCATTCCTCAAGT
-CCTCCCAAAACTTCCTACCCACACCCTCTTCCCAAGGCCCTCAGGGGCAGAAAACATCTC
-CTTCAACCCGTCCCCACTCCTTCCTctgcatgaccttgggcaaacccttgccctttcaag
-ccatcagctcctgcctctctgccatgagggctttggatcagatTCCTCTTCTCGCCAGGA
-TGAGGACACGCACTGCCCTCCATAGACACAGATGAAGGGGTGGGGGTCATTCAGCTCGAA
-TGGGTCCCAGATGCTCACTTGGCCTTTCCCTGCAGGATGAGTGAAGACGTTTGCCTCTCA
-CAGTGTGTCTtctacctgcattttggcatcagagccccccagcccacccaccacaggcaa
-ttactagccctagttgataggtgaggtgggtgaagaaggctggaggtgacatgtccgagg
-tcacacaacaaagcagcatgcaggaactagaaacacatcttcagcctccTCCTGGGCCAG
-CTCTTGTGCTACAGGTGGGGCGGAGCCAGCCCCTCACCTTCCTGGTTCCCTGAGGGTCCT
-CAGGGTGGAGGACAGGTTTGGCCCAGAAAGACTAGCCAGAGGCCTGATGGTCCCAGGTGG
-CTCTGGATATACTTTGGATATGGATTTAAATGGTCTCTAAGAGCCGGGGGTAGGGGGCAG
-GAAAAGTGGGTTGTCTTTGCCCCTCAAAGTCCACCTACCTAGAAACCAAGCCCACGGTCT
-TGGCCGTGACCCTGATAATAAATGGGCTCTCTCAGAGGCGCCAGCCCCTCCCTCCCCAGC
-CGGAGGCGTCATCTCTCTTCTGTACCACTAGAGGGAGCTCTGATGCAGCTGGAGAGCAGC
-GCTCAAGGCTCTCGCCCCTCCCCTCCCTAACCCTTACCTTCAGTCTCCACCAGCCTGAAG
-GGCCTCCTAGGGGATCCTCAGGCGGCCCCCACCAGGGCACACCCTACTGTCCTTGTGCCT
-CACGCCCCCTCCTCATCCTGCACCCCTTCCATCCCACCTTCCCTTTCAATAAACAGCTGG
-GATGGATACTGACTTTGTTTCCTTTCTCCCTGGCCACTGGGGCGTGGGGAGGAGAAAGAC
-ACAGACTCAGgagcacctactgtgtgctgggcacgacccattatttctcattcgctcctc
-aggataacctgttgagaaaggaattattgtcttcttttttttttttttaagatgttgtct
-cgctctgtcgcccaggctggaatgcagtggggcgatcttggctcactgcaacctctgcct
-cctgggttcaaccaattctcctgcctcagcctcccaagtagctgatattacaggtgcacg
-ccaccacgcctggctaatttttgtatttatagtggagacggggttttaccatgttggcca
-ggctggtcttgaactcctgacctcaaatgatccgcctgcctcggcctcccaaagtgctgg
-gattaccgggtgagccaccttacccagacttattgtcttcattttacagatgcggtaact
-gatgatcagagaggtgagtgatttATTTTTTAtttttatttttaattcttttttattttt
-ttcgagacggagtctggctctgtcacccaggctggagtgcagtggcacgagctcagctca
-ctgcaagctccgcctcccgggttcatgccagtctcctgcctcagcctcccaagtagctgg
-gactatgagtagctgggactacaggtgcctgccaacacacccagctaattttttgtattt
-ttagtagagacagagtttcaccatgttagccagcatggtctcaaatctcctgacctcgtg
-atccgcccgcctcggcctcccaaagtgctgggattacaggcgtgagccaccgcgcccggc
-cTATTTTTAATtctttttatttcagtagcctttggggtcaaagtgggttttggttacatg
-aattagttctatagtgattctgagattttagtacacctatcacctgagcagtgtatactg
-tacccaatacgcagttttttatccctcatcccctcccaacctccctggactcagtcccca
-aagttcgttatatcactctgtatgcctatgcatcctcatagcttagcttccgcttatata
-agtgagaacctaccgtatctggatttccgttcctgagttacttcacttaggataatggcc
-tccagctccacccaagtcctgcaGTGGATTTAAATGCTCAGCCTAGGGCCTGGAGGGGTG
-GCTGggccaggcgaggtggctcacgcctgtaatcccaggactttgggaggccgaggtggg
-tggatcacctgaggtcaggagttcaagaccagcctggccaacatggtaaaaccccataac
-tactaaaaatacaaaaattagctgagcatggtggtgcatgcctgtaatcccagctactcg
-ggagactgaggcaggagaattgcttgaacccgggtggtggaggttgcagtgaaccaagtt
-cacaccattgcactccagcctgggcaacagagcaagcctctgtctcaaaaaaaaaaaaaa
-aaaGTGCTTAGCCTGATTGGCCTATTGCCTGAGTGTGGAGCTCCTGTCTTTGGGTGGGAA
-GGAGATTTCTCAGCCACCTTGAGAACACACTTCCTCTAGTTCTGAAAGGAATGTGAGGGC
-CAGGGTGTGGGAGAGGGGGCTGAAGCCAAAGGTAAGATCTTTTCCAGGCCTGGaagagta
-attaaccccttttggcactcaccaggggctgggccttgttcttagtgccttacagaattc
-gggaattcatttaaccaggacgacaacctctgaggtggcggctattattctcaaacctag
-tttttcctaaactccaggcttgcgttcccatctgcattcacctggatgttgaatttaaac
-tcaactatctcaaactgttctccttgttaccacccctccctgaccaaacctgcctctact
-atgctgcccacgtcttagagagtagcgtccccattcttctggctgctccagccaaaacct
-cctctctttcctcacaccctgtatccaatccatcagcaagtcctgtcaactcaaccttgg
-aaatatatcctgtacccaactacacctcgacatccccgtggctgattccatggtctgaac
-caccagcgaccagcgcctcgatctggatcattgcaccagcttcccccggtctcctggctt
-ctgagttttgaaccccaccctactccacgccttgactccccaagtctaattactacacag
-tagccagacagatcttgttagaacataaactaggtcatgttcctcctccgctccaaacct
-tcccatggctcccacctaactcagagtagccaaaaccctccctgtggcctccaaggccct
-acacaatttgctgatttccactccccccgcactttcctctgtaaccccaactcccaccac
-tctccaggttcctgtgtcctctccagccaggatcctgactcagggcctttgcctcactgt
-tccctctgctggggtactcctccccagttgacgacatgggcagttccttcaagtcgttgc
-tcaaacatcaccttctcagcaaggccttccctgagcagcctattagaattgcaACCAggc
-caggcgcagtggctcaagccagtaatcccagcactttgggaggccgaagcaggtggatct
-cctaaggttgggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaa
-aatacaaaatcacccaggcatggtggcacatgcctgtaatcccagctactcgggaggctg
-aggcaggagaatcacttgaacctgggaggcggagattgtggtgagctgagatcgcaccat
-tgcactccagcctgggcaacaagagcgaaaccccatctcaaaaacaggaaaaacaaaaaa
-caaaaaaaTGCAACCATGCCggccaggtggagtggctcacacctgtaatcccagcacttt
-gggaggccaacgtgggcagatcacctgaggtcaggagttggagaccagcctgggcaacat
-ggtgaaaccctatctctactgaaaatacaaaaattacccaggcatggtggcacgtgtctg
-taatcccagctacttgagaggctgaggcatgacaatcacttgaactcgggaggtggaggt
-tgcagtgagccaagatcgcgccattgcattccagcttgggcgacagagcgaaactccatc
-tcaaaaaaataaaaggaaGCTAACACAGAGTATAAATGGTGCAggcagtttgacaatatc
-aaaatagaaaatacacatgccctttgatttctccctcttatgcaggtggatctatagatt
-caactctacatgttggaacactatagtattatttgtaattaaagcatttggaaacaacct
-aaatgctcatggtaggggactattaataaaatacggtaAggctgagtgcagtggctcacg
-cctgtcatcccagtactttgggaggccaacgcaggaggatcacttgaggccaggagttca
-agaccaacctgggcaacatagggcaacatagcaaggccccatctctacaaaaaattaaaa
-attagctgggcatggtggcacacgcctgtagtctcagctattaatatttgggaggctgag
-gcaggaggatcacaccactgcactttagcctgaatactgagtaacaaagcaaaaccctgt
-ctctcttaaaaaaaaaaTTGGGGGGAAGGACAAGTCTTttttcttttcttttcttttctt
-ttctttttttttttttttttgagatggaatttcactcttgttgcccaggctggagtgcaa
-tggtgtgatctcggctcacggcaacctccgcctcctgggttcaagcaattctgcttcagc
-ctcccgagtggctgggattatagtcatgcgccaccacacctggctaattttgtattttag
-gtagagacggggtttctccatgttggtcaggctggtcttgaactcccaactcctggcctc
-ggcctcccaaagtgctgggattagaggtgtgagccaccgtgcccagccAGGacaagtctt
-cttacagaagaattccaattagtaaatgtagaaggattgagagaaattgaaaaatcatca
-ttagaacaccggaataataattgctgcaggcaacatctaccaatgaacaataaaatgagt
-gggtgaaactttaaggagaaacaaggttttttttttagaaacgggatcttactacattgt
-ccaggctggtctggaactcctaggctcaatgggatcctcccacctcatgctccccagtag
-ctgctactacaggcacataccaccccaccaggcttgaaacaaaatatttgcatagcctca
-aagtatctatccccaaatatgtattaattagtatggtggttttaacatatgcatacatgt
-tctttgatgctctgccatctaggaaatggagcttaatttttctcctcttgagtgtgggct
-ggactcagcaacttgcttctaacaagtagaatgtggaaaggcaaaaacagtgacttcaca
-gtggaaaaatctggcagacaccaccttaaccaaatgaaggctggcaccaccagtcaaaag
-tcttgttgatatcacagcctctgaaatgatgtggtgagaagggcacttggcctgagtggc
-attcttcccccaaatccgtaacgtcagcctaatcatgagaagacccattctacaaaagat
-ctgaccagcactcttcaaatgtgtccaggtcacgaaagacaaggaaaggacaagaaacgg
-tctcaggttggaggagactaaggagacgtggctgaaggatacacaggatctccctgtact
-gtccatgtaactcttcaataaatctacaattatttcaaaatagcaaaaaatacgattGCT
-ggccgggcacagtggctcacgcttgtaatcccagcactttgggaggccaagaagggcaga
-ttacttgaggtcaggagtttgagatcagcctggccaacatggtgaaaccctgtctctact
-aaaaatgcaaaaattagctgggcgtggtggcatgtgtctgtaattccagctgctcgagta
-gctgaggcaggagaatggcgtgaacccgggaggcggagcttgcagtgagccgagattgcg
-ccactgcactcccgcctgggccacagagcgagactccgtctcaaaaaaaaaaaaaaaaaa
-aTTACTGTGGTCAAGATGGAATAACAGGGATCTGGTTTAACACACCCCAAAAAGGACCTA
-AGAAAGGACCATTCCCTCTCCTCTCTGAGGTGGGAAGATCTGGGAAGGAGAGGAGGCTGA
-CCAGTGGGGTCTACCTTCTGCTCCACCCCTCTTCTATCCAAGAGTCTGAGCACCCAACCC
-CCACACCACCCTGGAGGCTCCCGCCCTCGTGCTGAGTCTGGCATGCCCTCCCCATCCCTA
-CTGGCCCAGGGGACTAGGTTAGCTCAGAGAAGCCCTTCTAACTCACCCACAACTGGACCA
-AAGAAGGATTGATCTGGGGCCACTGCCTGGTCCCTGGGAGCACTGTGCTAGGGCAGGGGG
-CTGAGATGCCCCAGGGTAAGAGACAGAACAGTGAtttttttttttctaagacagagtttc
-gctcttattgcccaggctggagtgcaatgcgcgatcttggctcaccgcaatctccgcctc
-ccaggttcgagcgattctcctgcctcagcctcccgagtagctgggattacaggcatgtgt
-caccacgccccccggctaattttgtacttttagtagacacagggcttctccatgttggtc
-aggctagtctcaaactcctgacctcaggtgatcctcccaccttggcctcccaaagtgctg
-ggattacaggcatgtgccaccgcacccggccAAAAACAGTGATATTCATATAGATGGGGG
-AGGGATTAATGGGGGTGGAGTGAGAGAGAGCCTGCTGGAGCAGTCCGAAAGGCAGGCATT
-CCTTCTGTTCAGCAACATTCCTGCCCCCACAATCTCCTCCCACAACTTATATCTAGTgca
-ggctgagagtgaatctgtctgccagtgttcaagccactgtgtgaacctgagtttcttaac
-cgttctgagtgtcaggagtttttttcatctccaaaataggagcaacaaggataccaatcc
-cttgagattgtatgaagcttaatgcacttaacacagcacctggcacgtagacatgctccc
-taaatgccagctgttattatGAAAGAGAGAAGTCTGAGGTTCAGAACTAGCAGGCAACAC
-ATAATCtataatgatggatggctcagacagggtcctgtcctatagggactcacagtctag
-tggaaaggacagtcctgtggacagcaaatggcaaTATACCTGGGTAAGTACTGTAATAGA
-ATAACAAAGTAATATCCTATCACGGGGCAGTCACGGGGGCAGTGAGAGACAagcgcttgt
-ccatgccaggctctgtactcagtccatcacatacattaggtcttgcagtcctcataccac
-cataaggtggttaccattatctccaattcacagaaaagcaaacagtatggagtgtttaag
-cgtcctgtccgagatggcatagctagtggagctgaaatttgaacccaagtaatccaggtc
-cagaatGCCCCGGATGCAGAAATGACCACACAGATTCTACCAATGAACTAACCTGATAAG
-GTTGGAGGTCATACTCATAACCCCTCACACAGGTCCACACAGACACAGGCAAGCACACCC
-ATGTCTATTCAGATACACACCAATTCCTGTCTATGACGAGCGCTCAGAAAATCCTCCACA
-ACACCACACCAGGAATGATGTGCATTTTGAGAAAAAAAAAAATCAGCTCTGAAGACCTCA
-CAGACACATGCAGTGAAATGTAAATGGAGGGACCCACCCAAGTTCTTGAATAGCACATTA
-CATGCCTGGATGCACATCAGCGGGCATGTAAATGATGACGAGGAGGTCTGCAGACACTGA
-CACGCTGCATTTGCACTCACTCTGCTACTGAATTTTTTAGCagctacatttactgagcac
-ctactgtatgtaaggAAAGATAAAGCagccgggagctgtggctcacgcctgtaatctcag
-cgctttgggaggccaaggcaggtggatcacctgagctcaggagaccagcctggccaacat
-ggtaaaaccttgtctctactaaaaataatacaaaaattagctgagtgtggtggcatgcac
-ctgtaatcccagctactcaggaggctgaggcaggagaatcgcttgaacccaggaggtgga
-ggttgcagtgagccaagatcacgccattgcactccagcctgggtgacagaatgaaactct
-gtctcaaagaaaaaaaaaaaaaaaagtaaaaaagataaagctcagagaagtgaagtggct
-tgcccaaagtcaaatggctgagattcaaaccctggccctataatattaggcaacggtgtc
-tccctccaccactgtgcAGATGCATCCATGAGTGAAGAGATGTGCTATGGCTGGATTCCC
-TCATTGACATTCCCTGTGACCTTGGACATGGCATGGCCTTGTCTGGCCCACATTCTCATG
-TTGAGTCCATTCACAGGTGTGCTCCATGGATGTGCATGGATGGGACCGGCAACCCTGGCC
-TTGCTCTGAGTCTCAGCTTGGCTTGGTGTCACCAGGGCTGTGAGCTTCCAATCCCAGCCT
-TGCCATGTCCCAGAGCACATGGCTCAAAACCAAGCTCTGGGCATCAGGCCAGCAGGGCCC
-CTGTGATGGAAGAACTGACAGGATTTCATAAGCATCCGGCCCGGGACACGTGGTCAGGGC
-AGGGAGAAGGGAGATAAACAGGATGTCCACCAGGGTGTGCACCTGGGCAGGGTCCATGGA
-CCAGGTGTGGCAGGGGAAGAGCTGTCAGGACTTGGCATCTGATGGGCACTCAGCAGATAT
-AGGCTGTGTGAGGGGAGGAGTTTGTGGGGAGGCAGGGCTGCAGCTTTGCTTCCATCCTGG
-AGGCCAGGAATGAGGGAGTAAGTGAGCCATTGACTCaatgaatgaatgaatgagcgagtg
-agtgaaggaaggaaggggtaagtaaataagtgaagaatgGAATGGGGGAGGGAGTGAatt
-tatttatttatttatttatttattttgagacagggtcttgctctgttgcccaggctggag
-tgcagtctcagctcactgcaacctctacctctcaggctcaagggattctcccacctcagc
-ccccagcatagctgggactacaggcgcatgccgccacatcccgctaatttttgtattttc
-tgtagagatggggtttcgctatgtcggccaggctggtctcaaactcctgggctcaagcga
-tctgcctgcctcagcctctgcagtgctgagattacaggtgtgagccaccgtgcTGAGCTG
-TGAatttattttttacacaaatctgagtgctcactctgtgctggccctggacgggtctct
-gtggatgtctggtgagcaggatggacacagcccggtcattgcaacgctaaaagCTTGAAT
-GACACCAGTCAGGCTGGGGAACTGGGAGGGCCCTTGACATGCAGAGTGACTCAGCCAGTG
-TGAGCAGGGGTTGTCAGCATGCCTAGGGGAGCAAGAGACTGTGAGAGAtgtgtgtgtata
-cttgtgtgcctgtgtgtgtccgtgtgtacacatgtgtgcgCCGACACAGCCAGGTGTTGG
-CCAATGCAGGTGTGGTGTCCTCAAGAGCACAGTGCATCCTGATTCTTCACCCTCCCAGGC
-CTCCCCTGCCCCTGTTGTGTGCCAGCTGGGCCTGCCCCATGTTATGCCTGACGCCCACGC
-AAAAGCTGCTTCTTCCAGTCACAGGACAAAGGCATCCTCAGCCCAGACCCTGTACCCCAG
-GGGTAAAGACCTCTCAGACCCCTAGTGCTCCTCAGCATGGACCTCTCCACCAGGAGCCTC
-AGAGTTGTGAGAAGCACAGGCACCCAAAGCCCACCGCCCTGTGTCCATGTGCATGGAGTG
-TGCCCAGGTACACGCAAGGGCTGGAGATGCCCCAGGGCGGTCCAGACAGACGTGCAGATG
-ACACATTGGCCACTGAGTTTCCACAGACACTGAGCTAAGTGCTTTCGAGACACActgggt
-gaccttaggcgtatcaccctctctgagcctcagtttctaatctaaaagtagggtaattat
-actcacttccagtcttgttagaataactcaatgCATGATCAGCTCAACACATCATGATTA
-TTTTTCCTGAGTTCCTGCCTTCCCAGCTATATTGTCTATTCCTCAACAGTACCCACTGAG
-TCTTATATCCCCGTTTCTCCTATGATACTCCATTACACAGGACTCAAATAACTACCTGCT
-CTAAGAATTGCTGAGTGACATGTAGTCCTCATAAATAGCAATAATAGTCACTAACATTTA
-TATAACaacaagagccagcaattttgattttttattgtgtcaggcattgtgctgaacact
-ttacattccttcattcatttgacaaacattcactgaacacctggtaggtgctgggctctg
-tgctagacctgcagatgcagcatctctgccctcaaggttcttacattctgatggggaaga
-agagacagacaaaagacagtttggcggggcacagtggctcacgcctgtaatcccagcact
-ttggtaagccgaggcaggcagatcacttgaggtcaggagtttgagaccagcctggtcaac
-atggtgaaacccctgtctctactgaaaaaatacaaaaattagccaagtgtggaggtaggc
-atctgtaatcccagctactcgggaggctgaggcacaagaatgacttgaacctagaaggtg
-gaggttgtagtgagcagagatcgagccactgcactccagcctgggcgacagagcgagatt
-cagcctcaaaaaaaaaaaaaagataatttaatacataaatgggataatttcaaaccttga
-caagtgctacaaataaaataaggaagagttatggattagagacaaactgcagggattagg
-tggggcatgatgcttgatgagtgatcagggagggcctctctgaggagcaaatatttgatc
-tgagacctgaagaagaaggaagagcctggaaagatacaggaaaagttccaggcagatggc
-atagcaagggcaaaggccctggggcaggaagaacttggtaggttcgaggactaggagaaa
-gggaccatagctggagGATGATTCAGCAAACCTGGCAGGTCTGTCCTGGATGACTCAGCA
-AGCCTTGCAGGTCTGTTCTGGTTTCAGAACCCAGGCATTTTGTCCTTCACTCCAGGCTGC
-CTCAGAGACATGCATCCCTGCCATACACAACAATGTGTGCACGCTGGCACACATGCACAT
-GCATGCACACACACACTCTGCATGCTGACACACAACTAAGGGCCGGACCAGCCATGATAG
-TCTAAGACACTAACATTTTTCTCTAGTGTCTTGTGGGGCCAAGTAGAAGGGCCAGATGTC
-ACCTTTGCCCAGCCTTCCAGAAGTTCTGGGCCAAAGAAAGATTAAATGGCAGGAAGAGAA
-AAATGGCTTAATAAGGAGGTGACGGGGAACTCGGGTGGCCTGTGGGGGTGCGGAGATGGG
-GGGAGATGATAGAGATGTGAGAGCCCATGGGCACATCCCCTCTGGGGAAGTGAGGGAGCA
-CCGAGAACAGAGAAGCAGAGGGAGTGGAGACGGTTCTCAGAAGCACAGGGCCTCCACACT
-CACCACAGCCCCTACTCAGCCGACATGCCTTGCTTCCTCTCACCTCCCCTGGTTCACCTC
-AGAGATGGGACACTCATTGCCCACCAGGGCAGCCTGGGTGGTGCCAACTGTGAGAGAGCT
-CCCCTTCCACATCTGCCTTTGTGGCTGTAAAATGTGGAAAGaataagagaaatacctatg
-aaatctgcaggaagatactttcttttttttttttttttttttttgagatggagtttagtt
-cttgtcgcccaggctggagtgcagtggagcgatctcagctcactgcaacctccgcctccc
-aggttcaagcaattctcctgcctcagtctcccgagtagctgggattacaggtgctcgcca
-tcacacccagctaatttttttgtatttttagtagagatggggtttcgccatgttgggcaa
-gctggtctcgaactcctaacctcaggtgatccacccacctcagcctcccaaaggaggctg
-ggattacatttttctaaatcagttcggtaaaaatcaaaaattttgagaacacctggtgtt
-gtagttctgggaagcaggtactcacatgctttgctggcaggaggtagattgataacaatc
-tctatagaggaggagccagagatctctcttaaaagtgcaaatgcacaaacttttgactta
-gaaattctgcttctgggCAGGGCGCGGTGGCTCACGCCTGTGATCCCTGCCTCCCaggcc
-aaggttgcagtgagctgagatcgcaccattgcactccagcctgggcaacaagagcgaaac
-tctgtctcaaaaaagaaagaaagaaagaaagaaaaattctacttctaggaaattagctca
-gaacttctctccacacccccatgtatgaacactgcagcattttttgttatagcaaaagac
-tggaaataattaactgttcattgacaagggatggtttaaataaaccagtacattcctaac
-catggaataggaccaagctgtaaaaactgaccaggcaggtctttctggactgacacggaa
-gagtccccaagataaattgttaaataggaaggaaaaaggcaatctgaaggacatggagtg
-tgctcccatctgtgtaaaaaagtgacaaTAAATCCTCATATTTTATGTCTTGAAGGAAAC
-ACGAGAAAATGGCTTGACCCCAGGAAGATGAACTAGGAGCTGGGGATAGGAGTGGGAGGG
-AGACTTCTCAAGTATTACTCTTCTGTGCCTTTGAATTTTGAGCTAAAATATTTAaataaa
-atattaatataattaatataatacaattaataattaatattgaataaaataaaatatCTA
-AAAATCTGCTCCccgggtgcggtggcccacgcctataatcccagcactttgggaggccaa
-ggctggtggatcacctgaggtcgagagttagagaccagcctgaccaacatggagaaaccc
-cggctctactaaaaatacaaaataattagccgggagaggtggcgcatgcttgtaatccca
-gctactcagcaggctgaggcagaagaatcgcttgaacccggaagacggaggttgcagtga
-gccaagatcgcaccattgcactccagcctgggcaacagaagcaaaactccgtctccaaaa
-acaaacaaaaaaacaaaacaaacaaacaaacaaaacCACAACTGTCTGCTCAAAAGTGCC
-ATCCTCCTACACACTCCTTGCCCTCAGCTAAGTTCTGTCCCCATGGAACTCTCCCTGGAA
-GAGACAATCTGTCTCCCAAGAGAgcaggcctatgtgtgagtcctggttccatcactgacc
-ctaagtgtgacctcaggcaagacactCCCACCCCTGACTTGTACTAGACAGTTCTCCCCA
-GCACTGACATTCTGTCTCTCCTGCTGGAGGGGCAGGAGGGCAGGCACAGTGTCTTCTTGC
-TCTGTGATTCATTCAGTTCACTTAAACTGAGTTACCTACTCCAGGCCAGAGTTTGGGTTC
-ATCCATTTCTTGCCCTCCATGCCCACCCCAGGGTCTGGCATGGGAGTTGGTACCCTATAG
-GAGTTCTGAACAGACTCAGCTTACGGATGAGGAACAGACGGTGGGTCAGATGCGCGGTAA
-GGAGGGTCAGGTACACGGCCCATGGGATCGAATAGATTCATGGGTGGGtctttaagacaa
-ccgccttcactcaatcctaagccctccccacagctaccaccctattttttctcccctttg
-cagaaaagggctttgagaaaattgtctatcctcgctgtttttaattagtcttctctctct
-ctctccctctgagacaggatctgctctctcacccaagctggagtgcagtggcgtgatcat
-ggctcactgcagcctcaacctcctgggctcaaacgatcttcccacctcagcctcctgagt
-agctgggactacaggtgtgcactaccatgcctggctaatttttgtattttttgtagagac
-tgggttttgccatgttgcccaggctggttttgaactcccaggctcaagtgatccatccac
-ctcagcctcccaaagtgctgggactgcaggtgtgagccaccacacctggccctcttgtct
-cttaagtccatttaatcatgcttctacctgtcacttccctagttgaaactgctcttgtca
-atttcaacacattgctaaatccaatgtgttcagttctcattcttcatctttttttttttt
-tttttttgagacagagtcttgctctgtcacccaggctggaatacagtggcacgatcttgg
-cccactgcaacctctgcctcctgggttcaagcgattctcctgcctcagcctcccgagtag
-ttgggactacaggcacaagccaccaaacccagctaatttttgtatttttagttgagacgg
-catttcaccatgttggccaggatggtctcaatctcttgacctcgtgatccgcccaccttg
-gcctccaaaagtgctgggattacaggtgtgagccaccgcacccggcccattcttcatctt
-cttaactgatcaacagtttgacacagctgaccactccctgctctttgatgtacttctttt
-cacttggtggccaggcctccactctctgctggttttcctccttctcaggctccctgcttc
-tcccattcctgttggagcagtgaggacttggtccctggagctctcatccagtctcacgtc
-tatgactcccaacactgtatcctcagcccagacctctcccctgaactccagcccatacat
-tcaaatacctacctgatgtctctttgaggatgtcaaaagacatgacagactccacagaac
-caaagctgaacctgggcttcccccaaacacctcgctccatgtcatttgatggcagttcca
-tacctgtcaccgttcaggccaagaaaccttggaagcaccttgacacctccttttccctca
-aactccacatctagaccatcagcaatcctgttggctccacctttaaaatatacccagaat
-ccagtcacagctcacctctagcatggccactgccctgctctgagccactggagtttaaga
-gaattattgcaacacctgctcccttgtcttcctgtccttgcctcattcagtctattccaa
-gtacagatccctaaatgattttattttaaaagtaagtcaaggctgggcatggtagctcat
-gcctgtaatcctagcgcttgaggaggccgaggaaggaggatcacttgggtgtaggagttt
-gagacccacctgggcaatgtggcaaaaccctgtctgtacttaaaaaaaagaaaaaaaATg
-gctgggcatggtggctcaccctgtaatcttagcactttgggaggctgaggcgggtgaatc
-acctgaggtcaggagttcgagaccagcctggccaacatgatgaaaccccatctctactaa
-aaatacaaaaattagccgggcaaggtgatgcacgcctgtagtcccagctactcaggaggc
-taaggaagaagaatcactggaacccaggaggtggaggttgcagtgagccaagatcgcgcc
-actgcactccagcctgcatgacaggagcgagactccatctcaaaaaaaaaaaaaaaaaaa
-aaaaggtaagtgagatcacttccctcctctccttaaaccctcccctgcctccccatgact
-cctcagcgtcctttcaaaggcctccaaagctccagattatctgaaccccctttacctctc
-tgacctcatctcccaccgcctccctgtcactggctgcactccagccacattgaccttctc
-cgatggcacaccagtcagctagtcagcttccttttggagcttttgcatgagctgttcctc
-ttcctgaagaatttgcccttcggatagtctcagggcatccactgaacactccactcaata
-cagccactgcctgcccacccaacactcctcatctctgtacttactctttttttcccttgc
-attcgtcaccccctaacatgtgctacaatgtacttattatggtaattatttcttgcatgt
-ttctttctttttttttttgagacagggtctcactctgttgcccagtctggagtgcagcag
-catgatctcagctcactgaaatcttggcctacctggctcaggccatcctccctcctctgc
-ctcctgagtagctgggactacaggcactcaccaccatgcctggctagttgttgtactttt
-ttgtagagatgaggtttcaccatgttgcctaagctagtctaaaactcctaggctcaagtg
-atcctcccgcctcagcctcccgaagtactgggattgcgggtgtgagccgctgtgcctggc
-tgcacttttccttctaatggaatgtaagcgccacttttgtctgttattttcactgtagta
-tccctagcctttggaatgttgcctggcaagtagtaggtactcagtaaatatttgttgaag
-aaacggatGATTCTATAAATAGCATGGATTGATATGGGAAAGCTATGTAGGTGGATGGAT
-GGATGCTTGTCGGATGGAGGGTAGATGAAAGAACAGCGAGAAATTCGAATGGCTAGATGG
-TGGGGATGCATTATAAAATAATAATTCATAGATGGAAAAGGAATGAATAGATGGGTGGAG
-GGATttaatctcttcaactactatttactgaccacttgccgtgtgccaggcactgtatga
-ggtgctagagacactggtgagccacacaggcaaggtgcctgtcctaagggagcctgtagt
-tcagtgggtgaggcagacactaaacaaataacaaatacatacataattccaattatagtt
-aagtgttctggtggaaaagaaCAGGATGCTCTGGGAGAGAATAATATGGATAAGTGATGG
-AAAAATGGACAATAAATGGGTAGATGGAGATGGATAGGATCGGGGTTATTTGCCTTAAAG
-GGCCTGGCTTCAGGACTGGAGCTGCTTTACCTTAAAGGGCCTGTCGGACCACATGTACCA
-TCCCACATCCCAGACCAGCTCTGCACTCAGAGACTGTCCCTCTCTCCCTGCCCTGACTCA
-GCACCTGCCTGGCCTATCCCCAGTGGTCCTGCCTGACTCTACCTCCAGCTCCCACCCTGC
-TGAGTCACAGTCAGGCTGGTCAGGGGGCTGTCCCATGTTCAGTCCAGCCCCTCAGCCTTC
-CTCGACCTGGGGGGGTATGGGGAGCAGCCCAGAGGGGAGGGGAGCAGGTGCCAAGCTCTT
-GATTCCTGTGCCTGAGCACTGCCCTGTTGAGACCAGAGAGAGAATCTATGGCTAGGGTAT
-CTGGGGCTACAGTTGGGGTTTATCTGGGGCCTGGGGTCACACATGATGGATTAGAGCTAA
-ATCTATCTCCAGGGTTATAACTCAATCAGGAGCTAGAATTCAAATTCAGTTTATGGATCA
-TGTGGGGAAAAAGTGACCAAGACACCGTTCAGTTTGGGACCTGTGTCGGCGTTAGCTGTG
-GCTACGGCCCAGGGCTTAGTGATCACAGGTCAGACCATGTTCAAGGTTTCAGGCCAGAGT
-GCAGTTGAAGTGCAAAGTCAGGCAATAGGGTTCACCCTAGGACCACAGTCAAGGATCTGG
-GTCAGTTAGTGTCCAGGGCACTGGCCTTGTCTCCTCTTCTTTGGGAGAGAAGCCAGGTGG
-ATGAGTTGGATCTAAATGTCCTGAGGAGCAACTTCCAGCTCAAGTTCCTTCACCCAGGCG
-GCCTAAGCCCTCTCAGCACTGGCCCCAAAGCCTTCCTTCATCCCTCAACTTCCTCCATCA
-CTCCCTGACAGCCTGGCCTTGCTCAGTGTCCCTCGCAAGGCTGAACAGTCCTCATTCTGG
-CACCTCAGGGGACAGGGTAGGGGTGGGGACTATGGGACAGGGCTCAGTGCTGGACCCAGG
-AGGGCGCCTTGCGCAAGGTTTTCTGATGCAACTGGCTGAGTGCTTCAGCATTCCACCCCC
-ACCCCCCAAGCTTTTCTCAGAAAGGCAAGGCCTGGGCAGTTATCCAGACTGAACATATAA
-TCCCCTTCCTTCTCTGGCCTTTGATGGCTTCAGGACCTGCAGGCAAaaggaaggcaggaa
-ggcaggcaggaaggaaggaaggTCAGGTGACTCAGCAATGCGTCCAGCACTGGGAGCTGG
-CAGATCTGGGGCTCCCTCATCCTCCAGCTGAGAGGCGAGAAAGAGAATCAGGATCCCTGG
-AAGTTTGGAGATCCTAACCCCTTATACATACAAAGCAGCAATTATGTGCCTAAGCCCAGG
-GAGAGACCTGTAGCTGCCCAAGGTCAGAGGCAAGGTCAGAACCAGACCAGCTGTCTTCAG
-CCCATGGCTATGATCTAGCTATTTCCACTACACAGAAAGAGAGAACCCTTCACCCTTGAG
-GAGGACACGGGACTTCCCCAGGAACCTCCCGTCAATCCTGTTGAGGCTCCTGAAATGgtg
-gaatgacgtggactttggaaccacgcagacctgggtttaaatcccaggccaggcacggtg
-gctcatgactgtaatcccaacactttgggaggctgaggcaggcagatcacttgtggtcag
-gagtttgagaccagcctggccaacatggtaaaaccccatctctactaaaaatacaaaaac
-tagccaggcgtggtggcacacgcctgtaatcccagctactcaggaggcagaagcgtgaga
-atcgcttgaacccgggaggcggaggttgcagtgggctgagatcatgccaccgcactccta
-ggtgagagtgagactccgtctcaaaaagccacactggctagctgtgtaacgctgggcagg
-ttactttcactctttgacactggatttgctcacttgcaaagtgggcgtaaatgcatcctt
-agctcacagggctgtggtgaggctgacatgaggaagcactggaaggcacagcttagGCTC
-CACATGGGCCACTCTCAGGAAGTGTGTCCCCACCTCCCCCTTTATCCTCAGCTCTCACTG
-GGTGTGTTTGCTGGGGAAGGAGGTGCAGCAGCCCTGGGGCCTTGGAaataataatagcca
-ctcaccctccagtgcttaccatgtgctgggaactctcctaagcgtgaacttaacctgtat
-tagcccatttaaccctcCATTTAATCCAATAACAGTTCCCAGgccaggcatggtggtgca
-tgcccatagtcccagctactcaggaagctgaggcgggagtatcgcttgagcctgggaggt
-tgaggctacagtgagtcatgatcaccctactgcactgcagcctgggcaacagagtgagat
-cttctctcaaaagaaaagaaaagaaaagaGggaaggaaggaaggaagggagggaggGAAA
-TCCCAATGACAATAAGCAGTTcaataaccctacaggaaaacactgtcatcaatcccactt
-tatagatagggctgtgggtctgagtagctaagtgactttgtccaagacagtggacaagag
-accacacggattttgagccaggccagctggctctgaatcccactgtctcctccctcctta
-aactagtgatgtcactgctctgagccctggtttcctcatctgtctccagggataaaaata
-gcagcttcatggggaagtttgaggatgacacaagatgacgtaagggaggtccccacacag
-ggctccacccacagGCATGAGAAGAGCCTTTCTCAGGAAGAATCCCAGGCCGCCCCTGGG
-GCAACCGCCGGGCTGGCCTTCCTGCCTCTCCTTAGGCCCAGCCTAGCGTGATCTGGATGG
-TGAGAGATTTCTGCAAAGCCCCCAGGGGCCTCCAGAGAAGGGAGGTGCCCGGTCTCCTAG
-ATAAGGGCTCCCAGAGAGGATCACAGCCCTGGAGTTGCCATTCTTGAATCACCCACTGTC
-TTCCCCAAGTTGATTGGTCTGAATCCATGTACTTATTTTTTAtattagttccataatgtc
-ttccttccaaccagctcatcttttacttatttatttatttatttattttatttatttttt
-tatacagagtcttgctctgtcacccaggctgaagtgcagtggtatgatctcggctcacgg
-caatctctgcctcctgggttcaagcgactctcatgcctcagcctcccaagtagctgggac
-tacaggtgcatgccaccacgtccagctaatttttgtatttttagcggagataggtttttg
-ccatgttggccaggctggtctcaaactcctgacctcaggtgatccactcacctctgcctc
-ccaaagtgctgggattacaagcatggaccactgtgcttgaccacaaccacctcattttaa
-aaaacttatctaaatttatttaacatggaaattttaaatcactgacctcaaatagaaaac
-tactatgatttgccataaagaagaggtaagcatacaattacatacaaaaaaagcagaacc
-aggttattccattccagctaaatcctgtttcttgctgaaggctccaagctgaactctgct
-gtctcattcttaacaagagaggtgttaaaaacatagaagctgtgaggccgggcacggtgg
-ctcatgcctgtaatcccagcactttgggaggccgagcgagtggatcacgaggtcaggaga
-tcgagaccatcctggctagcacggtgaaaccccgtctctactaaaaacaataacaacaac
-aacaacaatcagccgggcgtggtggcgggcgcctgtagtcccagctgcttgggaggctga
-ggcaggagaatcgcttgaacccgggaggcagagattgcagtgagctgagatcataccact
-gcatttcagcctgggtgacagagcaagagcaagactccgtctcaaaaacaaacaaaacaa
-caacaacaaaaaaaaaaaccatacaagctgttggccgggcgcggtggctcacacctgtaa
-tcccagcactctgggaggccaaggtgggtggatcacgtggtcaggagatcaagaccatcc
-tggccaacatggtgaaaccctgtctctagcaaaaatacaaaaattagctgggtgtggtgg
-cacacgcccatattcccagctactggggaggctgaggcaggaggatggcgtgaacccggg
-aggcggagcttgcagtgagctgagatcacgccagtgcactctagcctgggtgacagagcg
-agactccgtctcaaagaaaaagaaaaaaaaaaaaagaagctgttaaatgagactttctcc
-ctgagtctttggagaaacagcaagaaaactgaaagggtttaagtgtatcacaattatgat
-tcaaagttatgtcatacggtatctggagaccctaaaaccctctggcactcagccattgtt
-gtacatggtatatttcagaaaacactgACCTCACTGacctactccaactttctcttctta
-ttttacagataagaaatttgaagcccccgcaaagggaggtgacttgtccacaatctcaca
-ggctcagtggcttcagccagacttggaacgcaACCAGAAGTTCTAAGGCATCATGTCACT
-TTTGTGGGGGAAATGTATGAAGATGAAAAGTTTCAAGGACACCTATGGTGGAATTTTAGG
-CATATGGCAATCACTAGGGACACCCATGTGGAAGGAAAGGAGGCAGGCATGGCTCATGTC
-ATTGCTGTGGGCCCCACATCAGTGCTGGGGGTCAGAGACGGAACTCATCAGAACTATAGC
-AAAGAggccgggcacagtggctcacgcctataatcccagcagtttaggaggccaaggtgg
-gcggatcatttaaggtcaggagttcgagaccagcgtggccaacttggtgaaaccccgtct
-ctactaaaaatacaaaaacattagccaggtgtggtagtccacacctgtaatgccagctac
-tcagggagctgaggcaggagaattgcttgaacccgggaggcagaggttgcagtgagccaa
-gatcacatgccacttccctccagcctgggcagcagagcgagacactgcctcaaaaaaaca
-aacaaacaaacaaaaaaCCAAACCTATAGGAAAGAGAAAAGCAGCCTTCTGGGCTCAGAA
-ATCTGAGTAGAAAGATGTTCTGAGCCTGGAGAAAGAAATTCATAAAAGCCTGACTCTCTC
-TCCAGAAAAGAGTACATTTCTGCATTTAATTTTGGGAGGTTGGTCACCATTCTTTTCCTC
-GCTTCTAAATAAATGCTTATATAGCATTTAtattccagtcactttacaaatattgtcatt
-taattctcatgcaaaccaacgaggtaggaactattgttatccccattttacagatgggga
-aactgaagtacaaagagctgaagtaacttttccaaaatAGATGTGGTTTTGAACCCAAGA
-AATGTGATACAACTATGACATGAGGCAGTCCCAATGcattgaatccttatgactgcaatg
-caagggaggtataattaactgcattttatagatgcagaaactgaggcttgaggctatttg
-gtgtttctggtgtagatctaggagccaaactccagcctacctagactctttgcctctgct
-gtacccctggaccatgTGTTAGGAATTCTTGGTACAGGGTGGTAGTGCTCAATATGGTAG
-TGgttttagtctgttttctgttgcttataacagaatgtctgaaactgaacaattttgaaa
-gaaaaggaatttattccttacagctatggaggataggaagtccaagattgagggggcact
-tctggtgagggccttattcctggtctctgaagtgtctggaggtggcacagggtatagcgt
-ggagaggggactgggcatgctgacatgctatgctttggtctctcttcctcttcttataaa
-gccaccagttctcctcctgtgaaaacccacaaatccattaatccatgagtgggttagtcc
-attcataagggcagaggcttcatgatccaatcacttcttaaaagtcccaaccgctcagta
-ctgccacattgggggattaagtttccagcacatgacatttgggggacacatttaaaccat
-agcagtagccatttgccacatgtggttattgagcacttcaagtatggctaatgtggctag
-tgtgactgagaattttttattttattgaatattttaatttttttttttttttttgagatg
-gagtctcactctgtcgcccaggtcagagtgcagtgtcatgatctcggctcactgcaacct
-ccgcctcccggggtcaagtgattctcctgcctcaacatcccgagtagctgggattacagg
-tgtgtgccaccatgcccggcaaatttttgtatttttagtagagacagggtttcactgtgt
-tagccaggacgatcttgatcttctgacctcatgatccacccacctccgcctcccaaagtg
-ctgggattacaggcatgagccactgcgcccagcctcacattatatttctattggaacaca
-gaaTGGTCTAGAGAATTGGGATTTGACAAACCCAGCTGTGACAAGTCACCAAAATTTGGG
-GGCCATACCCAGGGTGCCGTTCCTGTCACGATACCCATAGGTCCATGTGGAGGCTGCAGG
-GATACAAAGCTCGTGAAATATCCCAGGATGgcatgggcactggagtcagctgccccaagt
-tcaaatctgaaatcagtctttttgttttttttttttttttgagatgcagtttcactcttg
-ttgcccaagctggaatgcagtggcgcaattggctcactgcaacctccgcctcctgggttc
-aagcgattctcctgtctcagcctcccgagtagctgggattacaggtacatgccatcacgc
-ccggctaaatttttgtattcttagcagaaaccgggtttcaccaccttagccaggctggtc
-tccatctcctgacttcaggtgatccgcctgcctcagcctcccaaagtgttgggattacag
-gcgtgagccaccgcgcccagcctgaaatcagtcttatacgaccagctgggtggtcttggg
-taggtcccttaccttaactcttcttgtctgcagaatggaggtgacttactgtttttctct
-gtctccctttcacatctttgcactcttcaccccttctcttccctcagcttttagtttaaa
-catcacctttctgataagccctgctgaaaatggccaccctcagtcatgacggagaacaag
-tctttcctattttattcaagaaaatgcatgatgcaatctattttaaatgatcatggtttt
-aattttattttcctgataatggtctatctctccactgatttataagatttgtaagagcag
-gggtggatcattctggtcactgctgagtccccagcatttagaacaggggctgacacaGCA
-CAAAACAACGTTAGTTGGGAATGTACAAGCAAACCCAGCACACCTTCAGAGGGGTGCTCA
-GGAAACAGCCCTCCCAcctttcttcacccctcacagctgtgggatcttcctaaccatttc
-ggtgtcccaggatagaggatgagtttattcacccctccccagcaggggagttgccaggat
-taaatgagatCCCAGAATGCCCTGGTATACCCTGAAGGCTCTGGGACACAGGTGAGCTGG
-TCCCCAGGGATTTGGAAACAGGAAAACAAATATGACTCCACCCTGCCTCCCATCCAGCCT
-CTGCCTAGAGGAGTTATtttattttattttactttttttttttttttgagacggagtctt
-gctctgtcgcccaggctggagtgcaatggcgcaatctcagctcattgcaactcctgcctc
-ctgggttcaagcgattctcctgcctcagcctcccgagtagctgggactacaggtgtgttt
-tttgtatttttagtaattttttgtacttttagtagaaacgggtttcaccgtgttagccag
-gatggtcttgatctcccgacctcgtgatccacctgcctcagcctcccaaagtgctgggat
-tacaggcataagccaccacgcccagccTCTAGAGGAGttattttacttacttacttattt
-atttattacacaggatctcactctgtcacccaacctggagtgcagtggcacaatcacgtt
-tcactgtaacctgaactcctgggctcaagtgatcctcctacctcagcttcctaagtagct
-gggaccacaagctcgtaccaccatgcccgctatctttttctctttgtaaagacagggtct
-tactatgtcatccaggctgttctcaaactcctggcctcaagcaatcctcccgtcttggcc
-tcccaaagtgctaggattacagacatgagccagctcacccagctGAGGAGTTATTTTTTG
-ACACTGGTGAATTCAGATCAAAAGGGATTTCTAAGAAAGGTGCTGGACCCAggccgggcg
-cggtggctcatgcctgtaatctcagcactttgggaggccgaggcaggtggattatctgag
-gtcaggagttcgagaccagcctgaccaacatggagaaaccctgtctctactaaaaataca
-aaattagccaggcatagtagcgcatgcctgtaatcccagctacttgggaggctgaggcag
-gagaatcgcttgaacccgggaggtggaggttgcagtgagccgagatcgtgccatcgcact
-caatcctgggcaacgagtgaaactctgcctcaaaaaaagaaaaaaaaagaaaGGTGCTGG
-ACGCCTAGGACGCAGAGGGGTGTTTCACCCCAAATCAAGTAGCACCAAGCCCTCCCAGGC
-CTTGGGTGCAAGCATATTAAAGGCCTCTTTCCCTCTCTGTCTCCATTGTTTACACTCCac
-tgagcatccgcaatgtgccacacactgttctaagcgtcttacacatattaaattatttaa
-tcctcacaacaactttatgaagtgagcgcaattatgagcccattttatggagcaggaagt
-tgaggcagggttttaggtagcttttctggggtagcactgtgggttggagcggaggtggag
-tgcactcttaggccagctggctctaggggctcttcaccactaggccgcactgCCTCTAGC
-AAAGGGACGCGGGGAAGCTCAGCAGACCTTAGGCCTCCCAAGGGCGCCACGGTGGTTCCT
-TTGAGCCCAGAGTCAGCTCTTAAGTCCATAGGCCTTCCTGAAGCTTCTGAACCACTTGCC
-CATAGCTGGGCCTCAGGCTGGCTCTCAGTAGAATGTGGAGAATGGAGATTCCCGCATGTC
-CACTTCTCCTAAAGGTTTTATAAGGCAGTGCTGGGAATGTGCTTTATAAAAAAGGGGAAG
-CACCCCGACAACAGTCACTGTTTGctcttttaagcaccatcctgagaaggaggaatgttc
-ttcccatttcataggtggggaaaccgaggctcagaagagcaaatttttggccgggcgcgg
-tggctcacgcctgtaatcccagcactttgggaggccgaggcgggtggatcacgaggtcag
-gagatcgagaccatcctggctaacaaggtgaaaccccgtctctactaaaaatacaaaaaa
-ttagccgggcgtggtgcgggcgcctgtagtcccagctactcgggaggctgaggcaggaga
-atggcgtgaacccgggaggcggagcttgcagtgagccgagatcgcgccaccgccctccag
-cctgggcgacagagcaagactctgtctcaaaaaaaaaaaaaaaaagagcaaatttttttt
-ccaaggtgatagggagagtccgtggctgaTGTCTGCACTGACCAGACGCCCCTAGGGGGC
-CAGCGAGGGCGGGTCCCAGGTGCAGCGGATGCAGAGGAGAGAggcccgggcgcggcgcgg
-gggATGGTGCGATCCCGGGCCCGAGGGCATCAGACGGCGGCTGATTAGCTCCGGTTTGCA
-TCACCCGGACCGGGGGATTAGCTCCGGTTTGCATCACCCGGACCGGGGGATTAGCTCCGG
-TTTGCATCACCCGGACCGGGGGCCGGGCGCGCACGAGACTCGCAGCGGAAGTGGAGGCGG
-CTCCGCGCGCGTCCGCTGCTAGGACCCGGGCAGGGCTGGAGCTGGGCTGGGATCCCGAGC
-TCGGCAGCAGCGCAGCGGGCCGGCCCACCTGCTGGTGCCCTGGAGGCTCTGAgccccggc
-ggcgcccgggcccACGCGGAACGACGGGGCGAGGTACTCGGCGGGGTGCGGCCTGCGGAC
-TcgcccggaggccggggggcgggagggggcggccggggAAGGGGGCGCCGGAAGCCTCTG
-GGCGTCTGCGTGTTGCCGCGTGTTACACGCACGCACGCCCCTTACACACCTTTTCACAGA
-CCCCGCCGTCGGGGCGCGGCCAGGTCAGATCCCTTTTGATCCGGGCCTGGGCTGAGTGCT
-CCCCCCGGGCTTCAGGTGACGCGGCCCCGCGGAGCGTGGGGTCGCCCGAGTTGGGCTGGG
-GAAGCCAGGGACGGAGGTGTCCGGCCGTCACCCCTAGAGGAGGGCGTGCGGGGGTCTGTT
-TTGCGTGAGTGCGGGATAGGGGAGTCGTGTGGTGCGGTGAGGGGCTTGTGGGGGGCACTG
-GAGGACTCTGGGGGTGGCGGGGGATCCGAGGGGGTCCTCGTGAACCCGCAGGGGAGAGTC
-CTGGGTGAGGGTGGGTCCCGAGCACCTGTGTCTCAGGAGATGGTGAGAGCTGTCTGGAGG
-GCTGGGCACTTGGTGGCAGGGGTTGGCGGTGCAGGGGACACCGCCGGGACAGGGCTGGGG
-TGCCCTGGAGCGGGGGAGCCGAGGGAGTGGGAGCGGGGGCGCAGCGCGCGATCTCTGGCC
-CGGCAGGGCCGCTGGTTCTCCCCAGTGCGCGGCTCCGGGTTTGCAGGTGGACGGTGCGCG
-CGTGTCTGCGGTGTGTGCTGTGCCTGCAGACCGGGGAGGGCGGGGGACGACAGCCACCTC
-CTTCCCTCTGCCTCACCCCCCTCCTGTCCCAGGGCCGCGCTTCAATTTCCGCTGAAACTT
-CTGACTCGGACACCCGCCGCCTTTCGCTTGGGCTCCCACGGGAGGGGCCTGGCTGCGGGG
-GGCGGGGCGGGGTGGGGGTGCGGCCTTGCTCGGGTAGACCATGGGTGTGACAGCTGGGAG
-GGCtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgtgCGCGCGCGCGCTTGCGCTTGATGTA
-ACCCGCCCTCATTTCCCTGGGTCCCGAGTGTGGCAGGGAACAGCAAGAGGTAGATATTAG
-GGGCTGCTTTCATTCCACATCACAGATTCTATTCTGCAGTGTGGTCTGCAAAATGCCTTG
-CCCAAGATGTATAGACTCAGTTACCGCATCTGTCCCCATCTGGGTGGAGCTTATCCCAGG
-CCCCAACAGGCTCTGAGGGATGGCCGGGGCCAAGGCAGCCTGGACTACTGATGTGGCACA
-GGCCAGAGGGACTCCAGGCAGTCTCCTGCTGCACAGGGCACAAAGCATGTGCACAGCCAG
-GTATCATCCTGCGTGACTCAGAACAGCCTTGAGATGTAAGGAGTGTCATCCCAGCCTCGA
-ACCTGGGGAGCTTTCTAAGACTCCCAAGGATGGTACTTATGCATCTTGCTGTGAAGAATA
-ACAGGATGAGTGCtaataatgaccatttcctgacacctacctggcaacaggtccataagc
-tctacatgcttcatttgtgttttcatttcatcatcacgaaaaacctgtaagctttgcatc
-ctgttcccactttacaggaactgaggctcagaaagcttgaggaacttgaccaggggtacc
-ccccagctagaaagggtttgagacaggattagaacccaggaatatctgactacagccact
-ccttactgcaTTCTTACCAAGCCAAAGTCATGACCTTTCACTCATGTGGGGAGGCCTTCC
-CTTCCAAGGCAGCTCTTCCATTTGGGAGCAGCGTACTTGGAGAGGTGGGCCTCTGTCTGG
-TAACTGACTCATGTTGCCTTGTTAATCCTGCCTTGAACTGTTGGGAAGGTCTTTAACCAG
-GCTGAGGTCTCTCGCACCAATGCCCATACCTGGGCATGCACCTCCTTGGAATGGAGTTTA
-AGTGGGTGGGCAGATGGGTTCTAGAGAGAACCCGTCTGCCCTGACCATGCCCTACTGCCC
-TCTCCTTCAGCCACCACACACACAGTCACACAGCTGCGTGAATGGTGgctttcctttcac
-ttaacagttcactctggagatccttccaattaccctataaagagcatcctcaacctttta
-aatggctgcacattgttccgttgtgtggatgaagtataatttatgtaaccagccctgtaa
-ttatagacagccaattatttctgtcaaaagggctgcaggaataactgtgtatttgcatgc
-ttacacacacacacctctacagaataaattcttagcaatgggattaattgctgaatcaaa
-gctcacacgcttttcatcgttgtttttgttttgttttgttttgctttgttttgagacagt
-ctcactttgttgcacaggctagagttcctgaccatggctcactgaagcctttaccttctg
-ggctcaagtgattcccctacttcaacctcctgcatggctgggactacagctgtgtgccat
-catgaccagataattttttttttcttagggacagggtctcgctacgttgcctaggctggt
-cttgaactcctgggctcaagtgatcttcctgcttcagcctcccaaagtactgggattaca
-ggcatgaagcactgcacccagcctgtttttcattttgatattgtcaaaatgcactcctca
-gaggtggtaccttttatcctcccactagcactgtCTTCATTGTTAGTGGCTGCACTGCCA
-CTATTCCACAGTATAAACCCACTTTTCATGACACTGCCAAGACATAAGGGTCTGAAATAC
-TTAACAGTTTTCTTCCACAGTCCCCAAAATACAGGCTtctcccccagctcaggacatgaa
-gccatcatccctcctcattgcaggagccaaaggctggacctcacctcgattccaccctct
-ccttcacccctcacatccaatccatccagtccatccagtctgccactgagtcctcttgat
-cttcctcctatgagcccttaacttcgcgtctccatctagcaccccctagtccaggtcacc
-ttctcctgcctggactcgtgcttgtgtgggcctcctagctagtctcactgccccgtcttg
-tactttcaaatccaccctaaaagcatgatgttcccctgctgaaatccttcagtggctccc
-cactgcctttggataattccaaatcctattgtgtgttaattaggattaggctcagctgta
-atatagaaacagccacttaatagctaaaatgaaatagacgtttttttcttctttttctct
-ttttttgagacagagtcttgctctgtccccaggctggagtgcagtggcgagatctcagct
-cactacaacctctgcctcccaggctcaagtgattctcctgcctcagcctcccgagtagct
-gggactacaggcatgcaccaccatgcccacctaatttttgtatgtttagtagagatgggg
-tttcaccatgttggccaagatggtctcgatctcctgaccttgtgatctgcctgcctcggc
-ctcccaaagtgctgggattacaggcatgagccactgcgcccagccttcaatagatgttta
-tttctctcctgtgtaaaaaacctggaggtctggcctgacaactccatgtgtcagggacct
-aggctcctctcttgctctactgtatgtggtacttctgaagccaaggtagatgctggagct
-ccagcagttaggtccacattccagcatacaggaaaggaggaaatgaggaagttgggccct
-ccctttaagaacactgtcctgggcattgtacacaacacttccacttgtgtcctactagcc
-atatgctgatacaaggatacaagggagacaggaaatgcagtttattctaggtgtccttgt
-gctcagctgaaaatctcaggttctaatcctatgtaaggaggggagacctgaaactgggga
-ccactaaccacctctgccatatgatgctcgtagagcccttcacaatagggcctctactaa
-cctcaccttatttttatttatttatttatttttgagacggagtttcactcttgtcgccca
-ggccggagtgcaatgacactatctcagctcaccgcaacctttgcctcctgggttcaagca
-actctcctgcctcagactcctgagtagctgggattacaggcgtgtgccaccacgcccggc
-taatttttgtagttttagtagagacggggtttcaccatgttggtcaggctggtctcaaac
-tcctgacctcaggtgacctgcctgcctcggcctcccaaagtgctgggattacaggtgtga
-gccaccacgcccggcctattttttttttttttttaacttttcacttttttttgcagtcac
-gctcattctccaccgtgttcttggggaacatgcagcatgttcttttgcctcTTCCCTCAC
-CCCAGAACAGGggttactggacagcggcatcaacttcacctgggaactggatagaaatgc
-agattcagaccttctgaatgagctactttgggagtagggcccagcaatgtatgttgaaac
-aggcctccagatgatctcaatgcttgctcaagtttgagaaccactgAACCGCAGTATGAC
-TCTCCGTGTCAcctggctaactctgcctcactttcaggtctcagtgtagacaccacctct
-tctaggaagacctctcttgacccaccagcccaggagagaggcctctctgggttcctagag
-gcccatgcttctctgTATAGTAGGGCTGATCACACTGTATGTGAtttttttttttttttt
-tgagagagtctttactctgtcaccaggctggagtgcagtggcacaaacatggctcactga
-agcctcaacctcccaggctcaagcaatcttcccacctcagcctcccaagtagctgggact
-acaggcatccaccaccacacccagctaattaaaaaaaaatttttttttgtagagacaggg
-tctcactatgttgcccaagctggtcttgaacttttgggttcaagcagtcttcccaccatg
-gccttccaaagtgctaggattacaggtgtgggccactgcacctagccTTGGACGTGATTT
-TATTACTCATCTGCCCTCCAAATTGACTGGAAGATCCTGACGGCAAGACTGCTGTCTAAC
-CTACTTCTCTTCCTAGCACCCAGTGTTAAGTGAATGAACAAGATCATATCTCTCATCTGT
-GAATGTACGAGAGCCATGGATTATGAGATTAGTTGATTTTCTTAACTATAATTTTTAGAA
-ACAAGCTGTGTTTTTAAGCAGGTATTTATTTCCTTAAATGTACATTTCTGATTACAAAAT
-ACttttttttgagacagagtcttgctctgtcacccaggctggagtgtagtggcacaatct
-cggctcattacaacctctgcctcctgggttcaagcgattctcctgcctcagccttcccag
-tagctgggattacaggtatgcaccaccacgcccggctaattttttttttctcccgtgacg
-gagtcttgttctgttggccaggctgaagtgcagtggtgtgatctcagctcactgcaacct
-ccacctcccgggttcaagtgattctcctgtctcagcctcccaagtagctgggattacagg
-cccacgccaccacgcctggctaatttttctatttttagtagagatggggtttcaccatgt
-tggccaggctggtctcaaactcctgacctcatgatccaccaccttggcctcccaaagtgc
-tgccgtgggctgcactttggcattgccttggtcacgtgctgctacctgggattacaggca
-taagccactgcgcctggcctaatttttgtattttttagtagagacagggtttcaccatgt
-tggccaggctggtcttgaactcccagcctcatgattcgcccaccttggcctcccaaagtg
-ctgggattacaggcgtgagccaccacgcctggccAGGAAATACATTTACATGGCTCAAAT
-TCAAAACTATAAAAGTCggccaaacatggtgactcacatctgtaatcctaacactttggg
-aggctgaggcaggaggattgcttgagctcaggtgagaccagcctaggcaatgtagggaga
-cccccatctctacaaagaataaaaaaaaattagtcaggcatcatagtgcacacctgtagt
-cccagctacttgggaggctgaggtggaagaatcacctgaaccctgaggtcgaggctgcaa
-gtgaactgtaatAGTAAGAGTCTCCTCCTAATCTTGTGCATCCTTTCAGAGAGAGAGATG
-atagatattcaaacaaatacatacatatatataacatatttatatatattctttttaaca
-taaaagtatagccaggtgtggtggttcactactagagtcccagctacttaggaagctgag
-gtgggaggttcacttgaggccacgagtttgagaccagcgtgggcaacatctcttggggaa
-aaaaaaaaaaaaacccaccataaaagcattctataacacgtaattctgtgtttgtctttc
-ttctcttaatacatcttggagatcagtacgcatcagtatatagagagcttccttgtcctt
-tttcagggctgtgtagtattctgctgtatggctataccatgatgttttcactagctttct
-actgcctgacatttgggatatttcctgcttttgctattggacacaaggctctgatgaaca
-gcctttactatatttaatttttttgtgagaagtttaactggaagataaattcccagaagt
-ggggcacccagttaaggatatgtgactttgtcattttaacacacactgccagatcacccc
-ctataaatgttgtgccacgtatcctcccaccagcaGGGGAAAGGAGGGGCCACCAAGCAG
-TCTCACTTTAGTGCTTTTCTCTCCTTTTTACCAGATGCGAGCCACCCCTCTGGCTGCTCC
-TGCGGGTTCCCTGTCCAGGAAGAAGCGGTTGGAGTTGGATGACAACTTAGATACCGAGCG
-TCCCGTCCAGAAACGAGCTCGAAGTGGGCCCCAGCCCAGACTGCCCCCCTGCCTGTTGCC
-CCTGAGCCCACCTACTGCTCCAGATCGTGCAACTGCTGTGGCCACTGCCTCCCGTCTTGG
-GCCCTATGTCCTCCTGGAGCCCGAGGAGGGCGGGCGGGCCTACCAGGCCCTGCACTGCCC
-TACAGGCACTGAGTATACCTGCAAGGTACGTGCCCATGGGCGGCTGTCCCCCAGCACCAC
-AGGAGGCCTGGGAAGGAGGCCTCCAAAGGATTGCCAGGGTGCAGAGGGGTCCTTATGTTC
-ATTCATTCTTGTGTTTGTTTAGTGGGGAAGCATCCAGGGAGCCCCTGCTGGACTGATACT
-AGAGAGGTAAACCAGAGGTCGTCCCAGTCCTGGGGGAGTTCACAGCTTAGGCCCTACAGT
-GTGATAAATGCTGCAGGGGTAGAACTTAGGGATCATGGGCGCAGAAaaggccgagcagaa
-gttagccaggtagaagtgggagatgggagttgcaggcagggggaacagctgttcaaaggc
-ctagaaaagtgaggggatagcactttagagaatgaaaaggacttctctgtggccagagtg
-gagaggatgtgcagaaaggggcaggagatgaagGTTGGCAGCAGCTGGTCATGAAGGTGT
-TAACAAGGGGCCTCCACTGGGCTGTGCGGAGCTACTGAAGATGTTTGCACAAGAGAAGGG
-TAGGGCATGGTAGACATCAAAACTCCTgggacctcggaggtgatcgagcctaacctgggg
-ccattttacagataggaagactgagatgaagacaggagaagggccatgcgtgaagtcaca
-tagcACTGGGCCTGGCTCCTGGGGTAAACTAAGGGGTAGAAAAGTCTGAGGATTCCTGGC
-AGAAACCAGGAAATGGACAGGGTCAAGGCCCCTGAGGGTCAGCCCATGCAGGACACTGAC
-AAGTGACAGTCCAAGAAGACAGAGATGAGAATAAAAAGTGTAACAAtaggtattcactgt
-gcaccaggtactatgatgattgcttagtgtgcacaatctcttttaatcttgacacaacca
-atgaggtggtttctatcattgtgccccttttatagatagaggacactgagactcagaaag
-ccatggttacttgccacatgacagagccaggtggtatcagagctgggattgggcccagga
-ggctgagcccagagagtcctgtgcccGTGCTAGGATAAGCGTTTCACACAATCAGGGCAG
-GCTGCCCTGGCAGGCAAGCATAAGGAAGATAAGGGGGACCTGGAAACCCAAGGGAGAGTA
-GCGGGGGCCTGGGTCCCTTGGGAATGCACAGAGAAGCAGAAGGACTTAAGCCTCCTCCTG
-GGGCAGCAGCAGAGCTTTGCTCTGTTGACGGAGATGCAGTGAACAGCGGGGCAGATCCAG
-ACAGGGTCCAGCCCCTAGCTTCACCTGGCCTCTTGTGCACAGATCTCCAGCGCCCTTACC
-AGGTGCCCTAAGGAGCCCAGAACTCTGGGTCCCCTTCCTGCAGCATCACAGGCTCTTTTC
-CACTCCCGCTGGGGAGGTGAGTCCATGATAAGAGGAATAACCCAAGCAGGCTCAGGAGAG
-AAGCGCCATGCGTTCACAGGGCCCTGATTCTCAAGAAACATTTGGGAAAATCCACTGGAA
-CATACTCACCCCTATGCCAATGTGCACCATGGGTGCTGAATGGTCATTTCCACACTTCCT
-CAGCTTTTCTGGTCAGTGTGTAGAAAGATCAAAATCTTGTCTTTGTAAATGATCAACTTa
-ttcattaattcaacacaacttcattgagcacccgtatttgccatgtaccatgctgtggtt
-aaaaaacaaagttctgttctcatcaagctgacgttctagtgggagatacagacactaaac
-aagcgaataagtaaaatacgtgtcaggtggccgggcgcggtggctcacacctgtaatccc
-agcactttgggaggccgaggtaggcagatcacctgaagtcaggagttcgagactatcctg
-gccaacatggtgaaaccttgtttctattaaaaatacaaaaaattagccgggcatggtggc
-aggggcctgtaatcccagctactcgagaggctgaggcaggagaatctcttgaacctggga
-ggtggaggttgcagtgagccgagatcacaccactgcactccagcctgggcaacaagagca
-aaactccgtctcaaaaaaacaaaaaacaaacaggaaaaCCCTTATTCCAGCATCTTTCTT
-GGTTCCTTTGCAATGCTTATCAGCATTTGTCAATATTTGGTTTCTGGGCATGTTTGCATG
-GCCTCCCAGTGGGCACCGGAGAGCAGAGCCCATGGCTGTCAGTCTAGCTGGACATGTGGC
-TGGCCCGTGCAGGCCCAGGGCCAGCATACTGAATGAATGAAAGCGTGGGTGGGCAAAGAG
-GACGGGAGCTGTGACGGTGATGAGCATCAGGTGCCTTCTGCATCATCCGCCCTTCCGGAT
-TCCTCCTGCTTTGTGGGTTATTTTTCTGTTTGGGTGACCTGTTACTTTTCAGTTATCCGA
-TGTTTGAGGCCAtatagcgtagcagttaagagcacagacaaaaggccgggtgcagtggct
-cacacctgtaatcccagccctttggaaggctgaggcgggaggatcacctgaggtcaggag
-ttcgagaccagcttagccaacatgatgaaaccccatctctactaaaaatacaaaaattag
-ctaggtgcggtggcacatgcctgtaatcccagctacactgggggctgaagcgggagaatc
-acttgaatccaggaggcggagtttgcagtgagctgagattgcgccagtgtgctccagcct
-gggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaaaagcacagacagtg
-gagtgcatacgtgcaaatctcagccgtgctgtttgctggctgtgtggcctctcagcttcg
-ttaaccgtaaaatggagcaagtcatcctaccttataggaccatggtcagggctgagtgac
-tcggtcagtgaagcgcttggtgcgatgcctagcacatggtagtgtctaataGGTCAGCTG
-TGACTGTTTGCAATGCCAGCCTCAGCTCCCGGGAGTCCCCAGCTGTGCTAACACCATGCT
-CTGCCCACAGGTGTACCCCGTCCAGGAAGCCCTGGCCGTGCTGGAGCCCTATGCGCGGCT
-GCCCCCGCACAAGCATGTGGCTCGGCCCACTGAGGTCCTGGCTGGTACCCAGCTCCTCTA
-CGCCTTTTTCACTCGGACCCATGGGGACATGCACAGCCTGGTGCGAAGCCGCCACCGTAT
-CCCTGAGCCTGAGGCTGCCGTGCTCTTCCGCCAGATGGCCACCGCCCTGGCGCACTGTCA
-CCAGCACGGTCTGGTCCTGCGTGATCTCAAGCTGTGTCGCTTTGTCTTCGCTGACCGTGA
-GAGGTGAGTGTGGTCTCAGAGACCCCAGCCACAGACACACCCAGGGGGTGGGCCATGATG
-GAGAGAAACCGAGGCCCAGGAAGGCAAGGTAACTTAGGCAAGAAGTGGGAGAAACTGAAG
-TAACCAGCAGCCCCTGTTTAGTTCCCTGAGAAGAGTTGACTCAggccaggtgcagtggct
-cacgcctttaatcccagcactttgggaggccgaggtgggtgaatcacttgaagtcaggag
-ttcgagaccagcctggccaacatggtgaaactccgtctctactaaaaatacaaaaattag
-cctagtgtggtggcgcacacctgtaatcccagctactctgaaggctgaggcaggagaact
-gcttgaacctgggaggcggaagttgcagtgagccaagatcacgccactgcactccagcct
-cggcaacagagtgagattccatctcaaaaaaaaaaaaaagaGTTGACTCAGTCCTCTTGG
-GAGCCCCTTGGGATTCTGGGATGGAGCACTGAGATGTGAAAGTCATAGTAGCCGACAGTG
-ACGAAAGCATCGCCACATTATCTAACGTGGTCttccatccttacaaacacgaggcaggta
-ctgttattatccccatatgatcaaggaaactgaggcccagagagctcaagtaacttgccc
-aagatcccatagcagaataaatggtagagctgggatttgaacctagatctgactccagag
-cctgggtcttaaTTCAATCTGAGCTTGAGAGGCAGGGGcctggctgggcttaccaactga
-ctttgggtgacctagtgtctctgagcctcagtttctccgttggtaaggaaaagggctgga
-ttGTTAGGGTGTTTTCAGGATTCCAAGACCACAGCCAAAATAGGGTCTGAGGTTCCCCAC
-ACGGGAACGTTTTCTGTGAAACTGAGAATTAGCACTTTTTGGTTAAAAGAATCTTCCTTC
-TCTAGGTTGGGATGCTAAGAAtttttttttttttaattgagacagagtctcactctgtca
-cccaggctggaatgcaatggcgcgatcttggctcactgcaacctctgctgcctgggttca
-agtgatacgcctgcctcagcctcccgaatagctgggactacaggcatgcgccaccatgcc
-tggctcattttttctatgtttagtagaaacggggttttgccatgttggccaggctggtct
-tgaactcttgaccttaggtgatccgcctgcctcggcctcccaaagtgctgggattacagg
-tgtgaggtactgcacccagccTAGACGCTAAGAAAAATTTTTAAAAGATAATTCTGGGGA
-GAAGGGCAGAGAGACTCGCCTCCTGTTCCCTCTCCAGATTCCTGGGGGCAGTCAAGATGT
-GTCAGGGAGTGCACTAAGCTGCCAGTTACACAGGAGTTTTCTGTGGAGAAAGGAGTGTGA
-CCCCATGGCATTTTAAAAAACtttttatcttgaaataattttagacttttagaaaaccta
-caaaaatagttcaaagagtttctgcatatcctttaaccagtgctctccaatgttaacacc
-tgacgtagctatggtacaattacccaaactattaactaagccacagattgattcccactt
-cccgagtttcccactaacaccccttgctgtgcaggatccagtgaggatcccaatttagtc
-atcagtggtttccttggtctcttccaatctgagacagttcctcagtctttccctgtcttt
-gaagacccatgaccttgacacttttttttttttgagacagggtctcactctgtcacccag
-gctggagtgcagtggtgtgatcacagctcactgcagcctcaacctcccgggctcaagtga
-tcctcccacctcagcctcctgagtagttggttctacaggtgtgtgccaccccacctggct
-aattgagatggggtcttgctatgttgcccaggctggtctcagactcctgagctcaagcaa
-tctgcctgcctcagcctcccaaaatcctgggattataggcgtgagccactgctcctggcc
-ataaccttgagacttttgaagagtactgatcagttactttgtatgtccctcaatttggat
-ttgattgatgttttctcacagttagattgcagttatgtatttttggcaagaacaacacag
-aatcgataggcccctctccacatcatatcaagagatacttgagctgatagtcattcctat
-gtcgtgaccttgatcacttggttagggcaggacctaccaggtttctctactgtaaggtcc
-taatttaccctttgtaattgacaaataccttgggggaggtaagctaggcatataaatatc
-ctgtttttcctcaactttcacccactaattttagcagccatccatcttgcctatagcagt
-tattattgtggtgcttgcctaagtctaattttctttttcttttttttctttctttctttt
-ttttttttttttgagacagagtctcgctctgttgcccaggttggagtgcagtggcacgat
-ctcggctcactgcaacctccacctcccgggttcaagtgattctcgtgcctcagcctcttg
-agcagctgggattacaggcacacaccaccacacttggctaatttttgtatttttagtaga
-gatggggttttgccatgttggccaggctggtctcgaaatccgcctgccttggcctcccaa
-agtgctgggattataggcatgggccgctgcgcccagccCCCAAGGCTGATTTTCTGTTAA
-TATTTCCTTCTACATTTTATATTAGAACAAGCATGCCTTTTTTAAAGAAGTAACATTTAT
-AATGATGTTTAAGCTAGTACATAACTTCAAACACATTTTAGGCTTAGGGTAGATACAACT
-ACCCCGGACCTCCTGGAGGAGACAGCGTGCTTCCTGCTCTTTTCAAGAAGTCACTTgatg
-gcccacacctgttatcccagtgcttcgggaagccaaagtaggaggactgcttgagcccag
-gagttcgaggccagcctaggcaacacagaaaaccccatctgtacaaaaaatttataaaaa
-ttagccaggtgtggtgatgcacacctgtgatcccagctacttgggaggctgaggcaggag
-gattgcttgagcccagaagtttgaggctgcagtgaactaggattgcaccactgcactcca
-gcctgggtggcagagtgagaccctatctctaaagaaaaaaaagaaaaaaaaaaagaaaaA
-TCACATGagagtcattggtagaagagggaccgtgagttagatagacctgtgtttaaatcc
-tgggttctgcttcttacctgctttttggccctgagcaaatgacttcacctgcctgagcct
-ttgtttcttcatctgtaaaatgggctaataatgctgacACCCCTTGTCCCCCAATACTGT
-GATTCATAGGATTGGTCAGTATTTGTGAAATGCCACTGGACACCCAGGAAGTAATGCCAT
-AAAGAAGAAACTAATAGCAGTGGTAATAGAATGATTACTATTAAAGTCATCTTTGAGTGC
-TCAGTGGAAGTTGTTTAAAGTAGAAATTGCAAATGGCAGGACACACtttttttttttttt
-tgagacagggtctcactctgtcacccaggccggagtgcagtggcgcgatctcagctcact
-gcaaccgccacctcctgggctcaagtcatatccttctgcctcagcctcccaagtagctgg
-gactacaggtgcgaatcaccatgcctgctaattttcgtattttttgtagagataggtttt
-taccgtgttgcccaggctggtcttgaactcctgaactcaagtgatccccctacctcggcc
-tcccaaagtgctaggattaccggcatgagccaccgcgcccagccTTACACACTTTTTTTT
-TTGCCCTGCTTACCTGTTTGTGTTTTTTATATAAACTGGTTGCCAATATTTTTTAAATGG
-GGACCTTTTCATTAAAATACAATTCCTGGCTTCTCTTGGGGAAAACAATGGGAATGTGGG
-GCCATCTTGGGAACTGCGAGGGTGGGTCACAGCACTGGCTCTGAGTATCTGCCAGCCAGC
-GTTCCCATCCCAGGCCCATGCtctacagctgtaaaatggtgtcttccttgcaggctgtag
-cctagatagaatgaggtgagccaggtaatgagctgggtcaagggccaggaacacagcagg
-cacttggtaaaCCCTAGAATGCGTTGTGTACCCTTTTTAGGTAGCGCTTGTGCTGAGATG
-TCAGGCACACTTCCTGTTTCTCTCATCTTATTACCTGCCTGGACCCTAAGTTTGTAGCTG
-GTTTAAGAGAGGCTTAACCCTCTCAGCCCCATCAGCCCCCTCCCCAAGGGACTCTGTTGA
-AAAATGTATTCCTTTCAgaattttagtttaaatttaattgctctgtggccttaaatgact
-taacctctctgagcctgggcttgggtatctgtaaaacaggATCAGACATCACAGGACTGG
-CTTGTGTCTGTCAAAGGCCAGCAGGCACTTGGAAAGTGGGTGCCACAAGGGTGATAGCAT
-GGGGTGGTGGCATGGGGGTTCTGGGTAGGACCTGACCCTTCTGTTTCTCCCCATGTCCCA
-GGAAGAAGCTGGTGCTGGAGAACCTGGAGGACTCCTGCGTGCTGACTGGGCCAGATGATT
-CCCTGTGGGACAAGCACGCGTGCCCAGCCTACGTGGGACCTGAGATACTCAGCTCACGGG
-CCTCATACTCGGGCAAGGCAGCCGATGTCTGGAGCCTGGGCGTGGCGCTCTTCACCATGC
-TGGCCGGCCACTACCCCTTCCAGGACTCGGAGCCTGTCCTGCTCTTCGGCAAGATCCGCC
-GCGGGGCCTACGCCTTGCCTGCAGGCCTCTCGGCCCCTGCCCGCTGTCTGGTTCGCTGCC
-TCCTTCGTCGGGAGCCAGCTGAACGGCTCACAGCCACAGGCATCCTCCTGCACCCCTGGC
-TGCGACAGGACCCGATGCCCTTAGCCCCAACCCGATCCCATCTCTGGGAGGCTGCCCAGG
-TGGTCCCTGATGGACTGGGGCTGGACGAAGCCAGGGAAGAGGAGGGAGACAGAGAAGTGG
-TTCTGTATGGCTAGGACCACCCTACTACACGCTCAGCTGCCAACAGTGGATTGAGTTTGG
-GGGTAGCTCCAAGCCTTCTCCTGCCTCTGAACTGAGCCAAACCTTCAGTGCCTTCCAGAA
-GGGAGAAAGGCAGAAGCCTGTGTGGAGTGTGCTGTGTACACATCTGCtttgttccacaca
-catgcagttcctgcttgggtgcttatcaggtgccaagccctgttctcggtgctgggagta
-cagcagtgagcaaaggagacaatattccctgctcacagagatgacaAACTGGCATCCTTG
-AGCTGACAACACTTTTCCATGACCATAGGTCACTGTCTACACTGGGTACACTTTGTACCA
-GTGTCGGCCTCCACTGATGCTGGTGCTCAGGCACCTCTGTCCAAGGACAATCCCTTTCAC
-AAACAAACCAGCTGCCTTTGTATCTTGTACCTTTTCAGAGAAAGGGAGGTATCCCTGTGC
-CAAAGGCTCCAGGCCTCTCCCCTGCAACTCAGGACCCAAGCCCAGCTCACTCTGGGAACT
-GTGTTCCCAGCATCTCTGTCCTCTTGATTAAGAGATTCTCCTTCCAGGCCTAAGCCTGGG
-ATTTGGGCCAGAGATAAGAATCCAAACTATGAGGCTAGTTCTTGTCTAACTCAAGACTGT
-TCTGGAATGAGGGTCCAGGCCTGTCAACCATGGGGCTTCTGACCTGAGCACCAAGGTTGA
-GGGACAGGATTAGGCAGGGTCTGTCCTGTGGCCACCTGGAAAGTCCCAGGTGGGACTCTT
-CTGGGGACACTTGGGGTCCACAATCCCAGGTCCATACTCTAGGTTTTGGATACCATGAGT
-ATGTATGTTTACCTGTGCCTAATAAAGGAGAATTATGAAATAATTTTATTTTTCTCTGCA
-ATTTCTTCCATCCTTTCCAACGATCTCTTACCAGTTTTTCCTGCCTTCAAAACTGGCCCC
-CATGGTGAAAGGCCGTAGAGTTGTGTCTTAACCTGGGCTGAGTGGTTTGTGAGAACAGAT
-TACCTGGAGCCCAGTGGGTCTTCCTGCACTCCTTCTGTTTCTTCTGGCAGCAGCAGTGTC
-TCTATTAGGGTACTTTCTGAGTCaaaatggcttcaacaagatggaaatatgtttcacaca
-aaacaagaagtcagcagatagggtgggcttcagtgctggtccattcaactcccaaagctg
-cgcacagggaccccggctctccaggctccttctgtctctTGGCTGTATTGTCTCGAGACT
-GCTGGCCCAATGGCTACAGCAGGTGTCACATTAAAGAGGTCCATGACCAGAGGAAGAAGC
-CAGGGGTCATTGtagtacctgagaactcagaactctggagtcaggctgcctggaattaaa
-tcctggctccagcactcaatagctgtttgacccttggcaagtttcttaaccactctatgc
-ctcagattcttcatctgtgaaatgggggacaatgatagtacctaacttatgagaactaaa
-tgacttattttgtataaagcaattagaacaagcagcgcctggcataataagcccacaata
-aaagttACTCCCggctgggcacggtggctcacgcctgtaatcccagcactttgggaggcc
-gaggtgggcagatcacaaggtcaggagttcaagaccaacctgaccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaatttttagtagagacggggcgtggtggtgcgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaattgcttgaacccgggaggtggacgtt
-gcagtgagccaagatcccgccactgcactcagcctgggcaagagagcgagactccgtctc
-gaaaaaaaaaaaaaTGGTGCTCCCACATTTCTTTCTTGGGATGGAGGaagctttcccaga
-agcgctcctgaccgactttcccacacatctcactggtcagaactgcatcacttgccgttt
-ctgaccaatcaccagcTTACATTCATGGGGCACGTGCTTACACTAACCATGGCACTCCTC
-GAGCTAAGTGGAGCTCATGCGTCATATGGAGGGGTAGTGACTCCTGAGCAAAACCAGGTT
-CAAAGAGGGAGGGGATCGTAGGGAAAAGAATGTGCGGAAGTgcggaggcccagccaacag
-cctgctaactgcagatactcgagagcggccaccctagatcatctgacccaggctggccca
-cgctagaattgcccagtgacccgcaaggtcatgagctaattgagctaaataaaatcattg
-tgtttttttgtttgtttgttttgtttttgttgttttgttttttgagacagagtctcactc
-tgtcacccaggctggagtgcagtggtgcgatcttggctcactgcaacctctgcctcccgg
-gttttcaaacgattcttctgcttctgcctcagcctcccgagtagctgggattacaggcac
-gcgccactacacccggctaatttttatatttttagtagagacgggggtttcgccatgttg
-gccaggctggtctccaactcctgacctcaggtgataggcccacctcggccacccaaagtg
-ctggtattacaggcgtgagccgccgcacccggccaatcattgtggttttaagtcactaag
-tttgaggctattttgttttacagcaaaagctaactgatgcaGACAGGGACAAGTCAGTCT
-CATCTCTGTGCACCCAGCATTGCCCAGAACAGGGCCTAGTTGTGTCTAGGGTCTCATGGG
-GCAGCCCCTGACCTCTATCTTGCCCCTCCCAGCTTCCAACAGACCCTGTCCCAGCTCCCT
-CCAAGCTGAGTGTTGGCCTGATACCTACCAGTGGAGCGAGGGGAACACGAGGACTGCCAA
-GGGcaggtaccgtgccaacccttcactccattccacaaagagactcatttactcctcatg
-acaatccagtgaggcagatgttcctgtcactttacagataagacaaatgagctttagaga
-gagcagaagactcatccaagacctcacaacAGAGAAAAAGACTCCTCTGGTTTTTGCCTT
-GGAGCAGGAACTTTTGACAAGGCTGCGCAGATGCAGCCACATGAAAACCGCCCATTAAAA
-ATGTAATATCggcccggagcgggggctcacgcctgtaatcccagcactttgggaggccga
-ggcaggcagatcacttgaggtcaggagttgaagaccagcctggccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaaatagccaggcgtggtggcatgggcctgtaatcccagc
-tactcgggaggctgaggcaggagaatcacttgaacccaggaggcagagattgcagtgagt
-caagattgcaccactgcactccagcctgagcgacagagcaagactctgtctcaaaataat
-aataaaaTGTAATATTCACTCTTATCAAATAATGGATGTCACCACACCCCGACCCTAATT
-AGTGAGGACTTTCATGTTCTACTTGTCTTCATTTAATCATCATTGTATAAGAGTTTTACA
-ATATCAAATTAGTAGATGTATATTACTGAAAGGGAAGGACTGTTAGAAATTTACTTGAGG
-AATGTCTGCCACTGGGGGCTGAACACAAAAGATCCTATTGTGACCTGCCAGATTATTCat
-tcacttagcaattcaacaaccatcgctgaatgcctactataggccaggtgccatgcaaga
-cagatgtgctcccaccctcaagggttcacagtctaatagaggagagagatgttaaacaga
-taactgtacagatggcaTAGCTAATTATATTCGTGGAAGTTCGTTGTGGCAAAGACAGGC
-ATCTCAATATTTCAGGAGCTCCCctatattttctagcctcccttacagtcacatgactag
-ttctgaccagtggggtgtgtgtaggagtgGCAGGCTGAAGCAATGGAGAGCTGGTGAGCC
-TCATCCCTCTCTTCCCCTGCCACAGCCACCTTGCGCCCACAAGTtcccttagctacaagc
-tggaggagagccaccagatccaccttagatttcactgagcaagaaataaagcttcttgtg
-ttaagtctttcagatttggagtttgtctggtagatagtgttaattaccatgactaaGGAA
-AATTTGCCATTAGTGAAGGGAGGAAAAATATTCTCCACCAGTAACAAGGCCATGTCAGTC
-TGCTGCATTATAAACCCCAAACAGtagtttatgatcctctgggctggcaatttgggctga
-attcagctgggtcactcctgcagctgcaggcagcaagcagctcgaatgtctaccttgcca
-ggaaggctcttctctgctccacatggcctcgtcctccaataggcatagcctactccttcc
-tatggtggtctcagggtttcagaaagcaacaagagaggacaaattccagtgttcaagctg
-cactagtgtcaaagcatatcaaatagcatgtcaaattccacatcaaattcaggatgcagg
-caaattgattctttctcttgatgggaagagctgaaaaTAATGTGTGGTCTTGTTTTTCAA
-TGTAcagtggtcccatttatccaggggggatacattccaagacccccagtggatgcctga
-aaccacagatagtacagaattctgtatataccatgttttttactatacatacatacctac
-gataaggtttaatttgtaaattaaactcttacaaattaagagttaacaacagctgggcac
-agtggctcacgcctgtaatcccagcactttgggaggccgaggtgggcggatcacgaggtc
-aagagatcgagaccatcatgaccaacatggtgaaactccgtctctactaaaaatacaaaa
-attatctgggtgtagtggcgcatgcctgtaatcccagctacttgggaggctgaggcagga
-gaatcatttgaacccgggaggcggaggttgcagtgagctgagatcgcgccactgcactcc
-agcctggtgacagagcgagactccacctcaaaaaaaaaaaaaaaacaaaaaaaacaaaca
-gttaacaataaatagaacagttataacagtatgttgtaataaaagttatgcgaatgtggt
-ctctccctcaaaatgtcctattgtactgtactcacccttcttgtgatgatgggagataat
-aaaatgcctacatgatgagatgaaggtaaatgaatgacatgggcattgtgatctagcgtt
-agactactactcacctgatgatacgtcagaaggagaatcatctcctttgggtgatccagg
-atcatgaagccgtgacaatgtccatgattggatgtcaggagcagatgatgttaatgatta
-accgtgggtaatgtctacaatatggatacagtgcaaaagggatgattcacatcctacgtg
-gaatagtgcaggattgcatgagatttcatcatgtggttggctgcaggtaactgacattgc
-agaaagcaaaaccacagatcatgggggTGGGGGTGGGGAACTACTGTACAACATGAGATA
-TATTTGATCAAATAAGATGAGGTGCACCTAAAACTTTCCCTACAGGTTGTATGCCCCTGA
-GTAAATTGCTTGGTGTCTCTGGATCTCCAGCTGTTCCCCTTCTCTCTGCATGGCTAAGCC
-CTGTCCGTCACTTGGGGCTGGACCTAGAGCCCTGCCTGGCCACTAAGCCCTCAGAACAGG
-GTTTCTTTTTTAAAAAAGACAGGGTcgggaggtggaggttgcaatgagccaaggtcgcac
-cattgcactccagcctgggtgacaagagtgaaactccatctcaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaagacagggtctcactctgtcacccaggctggagtacagtggt
-gtgatcatggctcgctgcagccttgaacacctgggctcaagctgtcccccaacctcagct
-tcctgagtagctgggagtgccaccacgcctagctagttttttaaaaaattgttttgtaga
-gacaggggcctcactattttgcccaggctggtcttgaatgcctggcctcaaatgatcctc
-ctgccttggcctcccaaagcactggggttacaggtatgaccacTACCCACAACCAGAACA
-Tttctcaaatgtgattggttgatctcctgcatccatccctggggtgcttgtttaaaatgc
-agagccctggatcctcccccaacctagagagtcagaacatctgggcttctgcatcttaac
-aagctccctgggtgatgctgctgggcctccaagttggagaacctctgTATTTGAAGAAAT
-CCGGACTCCTTGGGGACTCAAATCTTATTTCAGCTCTTCTCTGGACTAGTTTGACTTTAG
-CCTTGGTGTAAAATGGGTATACATTTTACACGCCTGTGACGCCAGGATGCGCTCACAGGG
-GAGGGAGGGCTTTATCAGAGGTCAGAATCTAAGCCACCACTACAGTTGTACTAGATCCAA
-GGAGAAAGACTCCCAGGCCTCATttcctcatcgttctctcttctcttacctggctttatg
-gttcttcatagcactgagcaccaccaggcagtgtattttatgttttttttgagctttata
-atgccagggactatgttttgtttataactgttcacccagttcctagaacagtgcctggta
-cacaggagtgctcaataaatgtttgtggaatgactgaatAAAAGTTGTTCCTGTACAGAT
-TCCACCTGCCTAGAGCAAAGCCAGGACACTGATTGGGAtgaacacatagcacatgccaga
-catggctttgagtgctttacctggatcatctcactttatatgtgacagccaaatggtccc
-cagtgaccttcaccagctgctattcacgcctttgtacagtttcctcccatcctaagctgg
-gctgaccagtgtaatgaatacaatattgtgaaatgagaaagtatgacttttaagattagg
-tcataaaatatgttatggcttctgccttgctcttctggatcatctgctctggggacagcc
-agctgccatgttgcgaggacactcaattacccctgtggaaacttacatgtggtgaggatc
-gtaggcattctgcaaataaccagcaccacccaggcacataaaagagctttcttgagtcaa
-tcctccagccccagtcaagccttcagatgactgcagccccagccgacatcttaactacaa
-cctcatgagtgaccctgagccagaaccatctatgtagctgctccccagttcctaacccac
-agaaactatgtgatagcatacatgttgattgcttttttaagcaattaattttgggaaatt
-tgccacatatcaataattaataacttgtacagattctcacaacagcctatgtgggaggag
-ccatcataattaccattgaacagagaaagaaactgaggcccagatagggggaatctttgt
-ccagggtcacacagatagtgaactgtagcactgagattggaacccaagtttgaatgacta
-gagtcTACCCACTGAGGTGAAGGTGTTCAAGTTGAATGCCAGCTCTTCCCCTGAAGGGCC
-AAGGCTGAGACCAGAAAACCTGAAACAATATAGCTGCACCCaatataaatatatgcaggt
-aactcagggctgatggtacatgaccataataaatcagcagggtcatcaggagaaaacaag
-acaacaggagcgaaaacagatagaaacaaatatgcccagagtttgtatatcagtattatc
-agacgcagattataaaacaaaatgttggccgggcacgggggctcatgcctgtaatcccag
-cactttgggaggccaaggcgcatggatcacctgaggtcaagagttcaagaccagcctgac
-caacatggggaaaccccgtctcaaataaaaatacaaaaaaattagctgggcctggtggca
-ggctcctgtaatcccaggtacttcaggaggctgaggtaggagaatcgcttgtacccggga
-gggagaggttgcagtgagctgagatcgcaccatctcactccagcctgggcaacaagagcg
-aaactctgtctaaaaaaaaaaaaagtttactgcgtttaaataaataaataacctagaaac
-attgccaaagtatagaaaattatatcacatgacaacaaattttaaaataacctaacagaa
-cttctaaaataaaataatacaataatcaaaatttttaggccaggcacagtggctcacacc
-tgtaatcccagcactttgggaagccgaagtgggtggatcacttgaggtcaggagttcgag
-accagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaaattagccagg
-agtggtggcagacacctgtaatcccagctactcaggaggctgaggcaggagaatcacctg
-aacccgggaggcagaggttgcagtgagctaagatcgtgccatttgcactccagcctgggc
-aacaagagtgaaactctgtcacacacacacacacacacacacacacacacaaattaaatt
-taaaagatgggctaaacagcaaactagatatggctaaagagggaattagtgagacagaaa
-tcagaCaccaatcacagattcaagaaactccataaattttacacatagacacatcatagt
-aaaagtgcaaaaagccaaagattttttttaaaaaactcttaaaagcactcagaggaaaag
-aatcagagattctaaaaacaaaaaacaaaACAAAACAAAAAAACCCCAAAACAACAACAA
-CAaaaaacaaacaaaaaaccagtactacaacatggataaacctcaaaaacgttatgtcaa
-gaaaaaccccaaagttatgccaagtgaaagaagccagtcacaaaggttcacatattgtca
-aaatctaattttctttttgagacagggtctcactctgtcacccaggctggagtgcagtgg
-gacgatcactgctctacaggtgcacgccatcacactcggctaatttttgtattttttgta
-gagatggggtttcaccatgttgcccaggctggtcttgaattcctgggctcaagcgatcca
-cctggcttggcctccccaagtgctgggattactggcatgagccactgtggcccatcagta
-agatctaatttctataaaatatcaagaagaggaaagtctatagagacataaagtatatta
-gtgctgtcagttggaggatgggaaacagggaatgtctgctaatgagtacaggtctatttt
-ggggtgataagaatgttctttctttctttttttttttttggtctgagacagagtctcgct
-ctatcacgcaggctggagtacaacggtgcgatctcagctcactgcaacctctgcctccca
-ggttcaagccattctcatgcctcaggctctgcagtagctaggattacagatgtccgccac
-cacacctggctaatttttgtatttttagtagagacagggtttcaccatgttggccaggct
-ggtctcgaactcctgacctcaagtgatccgcccacctcggcctctcaaagtgctgggatt
-gtaggtgtgagccaccatgctcagccaaaaatgtcctaaaatttgattgtgatgatgggt
-gtacaattctgtaaatgttactaaaaactattgaattgtatattttaggtgggtggattt
-tatggcatataaattatatctcaataaagctgtttataaaaaGAACAGCAGTTAGATTGA
-CAGGTGATGATATCTCAATAAAGCTGTTTATAAAAAGAACAGCAGTTAGATTGACAGGTG
-ATGATATCTCAACAGCAACCATTtcccagcattttgggaggccgaggtgggcagatcatt
-tgagcccaggagttcaagaccagcctgggcaacatgaccaaaccctgtctctacaaaaat
-tagccagctgtggtggcacgtgcccgtggtttgcagctactcgggaagctgagcccagga
-gttggaggctgtagtgagccatgatcacgccactgcactccagcctgggcaacaagagtg
-aaactccatctcaaaaaaaaaaaaaaaaaaaaaaaaGGCTtccccaggccattcaaatgt
-acagccaaagttaagaaacattgtctaaagggatgtgtttccggcaaaagaaaaattatc
-ccagatgaaggtctgaggttcattccttcattcaacatatggagcctccattatgtgttt
-ggaactgttctagacaccaggaacacagcagtgagcaaaacaaaccaaagtccctgccct
-ctaggagaggaaaacagacccagaataacataaataagtaaaacatgctccgttagacag
-taatagatgctgagaagaaaaaatgaagccaggaaagcggatgtgaaatgctggatacgt
-gtgtctgtgaaatttcagatggagtaactagggaagatttttgggtaaagaccaaaataa
-agggaaggagggagccatgcagacgtttgggttatggcaggtgcaaaggccttagggcgg
-gagtgtgtctgacttactccaggacccagcaggtcaatgggacttgagtggaatgaggca
-ggggcagggcagtcagctacgaagacagagatcgggaggcaatttgcgagccctgggaca
-gatctcggattttgctttaagtgagatgggagtacttgggtcggggagtggcatgggttt
-gatttacattttaacaggactctccggcagctaggtggaaatggacggtagggggcaaaa
-agagaagcaaggaggcccaggaggaggctggttcaagacccctgagatgatggagcactg
-atggagctggagcgggatggggccggaggaggtgagggatgagattctgcaagtggagcc
-cgcaggatctgctgatcgatgggacgaggaacgggagaaaaaTTAAAGCGGCGCATGAGG
-CAGACGAATGCAAACTTCACCAATAGCTCAACGAAAAGACAGACGGTGACCGCTgagagg
-cagcgtcggatctgggtaagggcgggttcctgagcctgccaggcctggattcaaacctcg
-gctgagtggccttggacaggtcatcaacaaacagagccttcgtttattcatgtgcaaacg
-gggccaaggaccgggcctgccccgaggtatgcctgaggcttgggtgagCAGGCGCCGGGC
-TCGCAGGGCGCGCTCCTAACCCGTCCCCAGCGGCTCGACGCTGTGGATCCCGCCGCCCTC
-CAGCCCCGGCTCCGGCGCCGACTCCTGCTCAGgctcctgctcctgcccccggccccgccc
-ccggccccggccccggcccccggcccaccccggccccgcccccagcccccggcccccccg
-gccccgcccccggccccgccccggccccgCCCACCCCGCCTGCGGCCCAGCTCCTTCCCG
-CGGCTCTGCGATGCGGCCCGCAGGGTGACCCGGGCGGGAGTCCGGGGACCCGCGATCAGC
-CCCGGAGGACGGGGTGGGGTCGCCCCAAACAGGAGCGCCGGGACCGCTGGGACCCCGCAC
-TCGGCGTCCGCCGCCGCCGGGTAGCCGGGCAGTGGAGGTCCCGGATGAGGCGACAATTTT
-TCCGGCCCCCCCTCCCAGTCCCGCCCCACTTCCGGGGCCGCCACTTTCACTTTCTCTTCC
-GCCGAAGCCGCTCCCCTTGCGAAGAACTGGGGCCTCCCGGGAGGAGAGAGGGCTTTGCCT
-TGAAACCCGGGACGCCAGGGGCGCTCCCGCAAGTGGGGGTCCTCCGGGACTTGGAACGCC
-CCGGCTGGGTGGTGTCCGGGCGTCCTTTCCCCGCTTCTTCCCACCTCGGCTGGTCCCGTT
-TCCTCCTGCGCCCAGTGCGGACCTGTCTCGGCGCCCGCTGCCCTCTCACCGCCCCACGCA
-GGATCCCGGCCTGGTCACCGGGCAGTGTGATGCTTCCCGACTGCCGCGGGGACAGCGAGG
-CACACACAGGGCTTGGGCCGCGCCGGAGGCCACACGGCCTGGCTGAGTTGCTCCTGGTCT
-CCCGCCTCTCCCAGGCGACCCGGAGGTAGCATTTCCCAGGAGGCACGGTCCCCCCCAGGG
-GGATGGGCACAGCCACGCCAGATGGACGAGAAGACCAAGAAAGGTGGGCACAGGCTGGAG
-GTGGCTGGGGAACTTCCGGTGGGAAGTGGGCCCCGCAGGACCTGGCCTTGCCCCTGGCCA
-GAAGGGCCTTGGAGAGGGGGCTTTAGCCTGCCCTCCCTCTACCCTCCTCCCCATCAGTTT
-CCTCCTTTGGTACCTGCTGGCTTCCAGAGCCATCTTGGGGCCCTGAGAACTCCTTGGGCT
-GGCTCTGTGCTGAGATGGGGCTAGGGGACTCGCAGAGGACACAGGGCATTGAACTTGGAG
-ACCTCCTGGGCTGGTGGGAGACAGACGTCAGTTGACCTGAGAAGCAGGGGTACTTGCCTC
-TTCTCTTGTCCCCTGCACCTAGGGttgtagaacggaagtcagtcactgccttgctggaaa
-ccctcccatgcccctctgtgttctccaaacaaaacccagaggccctgggtggcccacagg
-atatctgtcctcagtcaccccgccatgctcactctactggagccccactggcttccttcg
-gttctcatccaaccattttttggccaaggcccttactcttccttccacctggaccactct
-tccccactggagcttgacacgtgcagcttctcctccttcaggtcttagcttcagtgttac
-cccctcccagaggcctcccctggtctccttaacctgtttatttccctgccagcaaggatc
-gcaatctgactttttttttttttcttgttaaacttgttcattgtctccccactgggcagg
-gagatccataaggagaggggccctgtttataaatctctgtgggattccagttcctgggac
-agtgggtggcacacagtagaagctcaataactgcttgttggataaatgaatAGAAATATG
-AGGGACCCTGGGAATGGGAAGGACAAACAACCAAATGAGCCTAGTGTGAGGAGGAGTGgg
-gaatattagagaacccctcccggagaaagggacttttagtctgggtgctgaaggatacgt
-aggagttcaccaggaagacagagaaagCAGCACACACAAAGGATCGCCTCCTTTCCTACC
-CCATTACTCTCAGCTCCTGAAAATAAACCCTGTGCTAACTGGCTCCTGCTGTACTGGCTT
-TCAGCAGAGGAAATGGCCCTGAGCCTCACCCGAGCAGTGGCGGGCGGGGATGAACAGGTG
-GCAATGAAGTGTGCCATCTGGCTGGCAGAGCAACGGGTGCCCCTGAGTGTGCAACTGAAG
-CCTGAGGTCTCCCCAACGCAGGACATCAGGTGAGGAGTGCATGGCTGGCCTGAACCCAAG
-GGACAGCAGGACAGGATATTCTTGCCTGTAGAACAGTTCTTCCtaatggcacgttctggc
-ttcaggaggcctggcttctaaccctagttatgtcattaatcaactgtgaaatacagagca
-ggtcacttcacctctcagtgtgtcctcattttaaaaatcagaccgtaacagtagctatct
-catagggttgttaggaggTGTACTGTATTAGGATGTTAGGCCTTATACAACAGAAGAAAA
-CGGAACAGTGacgtaaacaaatttgatggcagggagtccagatagggaggttctgctccc
-gacagtcctcagaggctcatattgtttctctcaccattctgccattcattcccagattcc
-tcatggtgcaaaatggccattccagctccatccagccatcacatcacaggaggaagggaa
-gaaagacacccctccacactcttctaaagagcatagctcaaaaattgtacacacttcttc
-cgttaattcctgtggaccagaactgattcccacagctacagttcagcttgaggggagact
-gtatagccaagatattcagctagaattcaggggttcgcttggtaagggaagggaagagaa
-tggatactgTCGGTCTGTGCTCCAGgagacttaaactcaatgctgaaacactttgcacaa
-tgcctggcgtgttatgcactcaataaTAAACATTAGTGTCTATCGTTATTTTTTGACTGC
-TTTTTCATTACTGGATAGTAAGGCAATAGTTTTATGGTTTCTGATTTTTGGTTCTCTTGG
-TGGGTCCCATTTGGTTTttcttaaaacagttttatttatttatttatccttacagttcga
-ccatttaaagtatacagttcaatggcttttagtatattcaaggttgtgcaaccattgcca
-caatcaattttagaacattttcatcatcctgtaaagaaacctggtactcattagcagcca
-gtcctcatctctctaccttttccctaactccccaaccttaggcaaccactaatctacttt
-ttatctctagggatctaccttctggaaattccatataagttgaatcatgcaatatgtggc
-cttttgtatctggcttctttcacttaggatcgttttcgagattcatccatgttgtagcat
-gtctaacaacttcattcccctttttttttttgacatggggtctcttgtctaggttgaagt
-gcagtggtgccatcatcgctcactacagcctcaacttcctggattcaagcagtcctcctg
-ccttggcctcccaggtagctgggactactggcatgtaccaccacacccggctaatttttt
-ttttctttgagatgggagtctcactctgtcccccaggctggagtgcagtggcgcgatctc
-agctcactgcaagctccacctcccaggttcacgccattctcctgcctcagcttcccgagt
-agctgggactacaggcgcccgccaccacgcccagctaattttttgtatttttagtagaga
-cggggtttcgccgtgttaaccaggatggtctccatctcctgacctcgtgatccgcccgcc
-tatgcctcccaatgtgctgggactacaggcgtgagccaccacacccagccacacctggct
-aatttttagaaagtctgtagagataaggtcttgctttgttgtctgggctggtcttgaact
-tctggcttaagcagtcttcccacctcagcctctcaaagtgctgggattacaggtgtgagc
-caccatgcccaaccagaactttattcctttttattgccaaataataatctattgtataga
-catatctcattatctttactcattaaatcagttgatggacatttgggtgtttctattttt
-tggctattataaacaatgctgccgtgaacatttgtgtccaactttttgtgtggacacgtt
-ttcatttctcttggatacacactagcagtggaattgctgggtcatacagtaactctatgt
-tactttttgaagaaatgccagacagttttccaaagtggctgcaccattttacattcccac
-cagcatatatgagggttctagtttctccacatcatctctaatacttgttgttgtttatct
-ttttgattatagccatcctagtaagtttgaagaggtatctcactgtggttttgatttgca
-atttcctaaccatttgatgacaaatgatgttaagcatcttttcatgcacatattttcttt
-ggaggtttgcctattcaggtcttttgcccattttaaaattgggtttatcttttttttttt
-ttgagatggagtctcgctctgtcacccaagcaggagtgcaatggtgcaatctcggctcac
-tgcaacctccgcctcccaggttcaagtgattctcctgccccagcctcctgagtagctgga
-ttacaggtgcccaccactacactggctaatttttgtatttttagtagagacgggtcttac
-catgttggccaggctggtcttgaactcctgacctcaggtgatccacccaccttggccttt
-ccaaagtgttgggattacaggcatgagccactgcacccggctgggtttatgtttttatat
-tgagttgtaggagtactttattcattttagctagaagtactttattcattttagcttatc
-agctacatgatttgcaaaaattttctctcattctgtggattgtcttctcactttgttgat
-ggtatcctttgaaccacaaaagttttaaattttgatgatgtccagttagtctatgtttta
-ttttgttgtttgtgcttttggtgtcatatctaagaaatcgttgcctcatccaaggtcatg
-aagatttacctctatattttcttctaaagattttatggttttagctcttacatttaggtc
-tttggtccattttgatttaatttttatataaggtgtgaggtaagggtccagcttcattct
-tttgcacgtggatattgagttgtgccggcactatttgttaaggctgttttcctctgttta
-atcatcttaaccctttttggaaattaattgaccataaatgtgagtgcttatttctggact
-ctcatttctataccattgaactataatatatatctgcccttacgccagtaccacactaat
-tactatagcttcatagtatttgaaatcaggaaatacaagttctccaacttttgttctttt
-tcaatattgttttggttattgcaagtctcttgaatttccatataaattttacgatcagct
-tgtctgtttctgcaaaaaaaaaacaacaacaactgggaattttggtagggatttcattga
-atctgtagatcattggccacttgattttaaacaaaatattgagatatctacttcttgaaA
-TGATTGCttgagacagtacctgtgtactccttgctatgaaaaatgaggaagttaacatac
-tcatcttccacctttccttttccttactttttttgttGAAGTATCATTGTGGACACTTTC
-CCAGTTGACTTCCACTTGATCCCCTGAATTAACTAACTGGCACTGGCGTTTCCTTTGTAA
-AATGTACAATGTCAGCCACCATCTtgctactaaagtgtggcctgtggaccacaacatggg
-gggaatctcaggtctcacctcagacttgctgggtcagaacctgagttttgagaggctcTG
-GGCAACCGGCACCTCTCAGACCTGCTGTTGGGTTCTCATCGATGGACCCGATGCTTCCTA
-GCAAATGATACCTGTTGTATGTGTTATTGGTAATAACATAGTTTACTTAGCTATTACATT
-AATTAATAAAACATGAGCGCTGAAAGAGTTGTTTCTGTGAAAATAAGCTGATTGCTTTAA
-AAAGATAAGAGACAAATCACCAAAAAAAAAAAAAAAAAAGATTAACACTTTTGGGTGAGA
-CAGTAGTAAGGAAATACAGTAAAAATCCAGAAGGGCTCTGTGCTCTGATGCTTCAGGAGT
-GTGTCTAAGTTCTTGCTCGCTTTAAAGAAGCTGCTACTAGAAATTATAGATCATGATTAT
-CGATGTGGTTCATACAAAAAAAAAAAAGAAAAATCCCTGGGAAACTCCAATGAGCAGGTA
-TAAACTCACgctgggcatggcggctcagcactttggaaggctcaggcaggagaatggctt
-gaactcgagtttaagaccagcctgggcaacatagtgagaccttgtctctgcaaaaaataa
-aaaaaattagccaggctgggtggcacacacctgtagtcccagctatttgagaggctgaga
-tgagaggattattagaccctgggtggttgaggttgcagtgagccatgatcatgcctgagt
-gacaaggtgaaaccctgtctcaaagaaagaaagagagaaaaGCCATTGGCTGTACACCTA
-GAGACTGGCCAGTGAATATGCATTTATAGTATGTAAGTTAAAATTAAGTGTTTAAGCTTT
-GTCTGCAGCTGTTTTTGTGATTCTCTGCTGTTCACCAGCGATCCTGATGTCACATTGGAT
-GAGAGAGCTCCAGCTGTATTTTTTTGTTGATAGTGTTAAGATTATAGCTTTAAAAAATTT
-TGTTTTCTAACATAATTAAGGCCTTTATGCTTTGCCTCTAGGTTGATTCTAAAAGTGTAA
-CACTACTAGAAAGGATTTATAGTATTTTGATTATGGAAATATTATTCACTATAGAATAAC
-TAGTGCAGTTGAAACCATATGCACTTTTATGTTTCAAAACCCTTATTGCTGGAAGAACAT
-TTTGGGGTTAAGATCCAGTCCTTTTCATTTTTTACTTTTCTTCTATTCTCCTGTATCAGA
-CTCATCTATTTTTGTTTTTCAAGAACTTTTCACGTGGAAAATGTggtaaacttttagagt
-ctttgcatgtttaaaaatttctatattttgctctgtcaattcattgatagttgactgggt
-attcaaattgtttacctgaagaattttgagagcattttctggactgcttttaaataaatt
-tcagatattattttatccttaaatactttagtatgtgtcttcaaaaaattaggacttggc
-ggggcacgatggatgatgcttgtaatcctagcactttgggaggctgaggcaggtggactg
-cttgaacccatgagttcaaaaccagcctgggcaacatagtgaaaccttgtctctacaaaa
-cattagctaggcatggtggtgcgcccatctagtcccagctacccaggaggctgaggtggg
-agggtcacctcagtccaggagattgaagctgcagtgagccaagatcatgccactacactc
-catcctgggtgacagaagtgagaccctgtctcaaaaaaaacaaaaacaaacaaaacccct
-caatactattatcacaccttagaaaaggaataagaattccttaaaatccgctaatgccct
-gtttatattcacattttcctatttcattagtgctttttacaattggtttcttcaaatcag
-gagccaaacaagatctacatgtagcatttcttactatgtcttaagtcccttttactctcc
-tctatttttatgccactagttttttttttaagaaacctggtcttttgacctctagaattt
-tccccatattctggatctatccattacctcttcatggtatgtattagaccactctagcat
-tgctacaaagaaatatctgagactgggtaatttgtaaagaaaagaggtttaattgactca
-gttctgcaggtggtgtaggaagcatggtcctgacatttgcttggcttctggggaggcctc
-agtgaacttttactgaagcgggagcaggcacttcacatggtgagagagggagcaagagag
-agagttggtggggaggtgccacactttacaacagccagatctcacgaggactcactatgg
-cgagaagtcactacagtgagcgcagcaccaggctgtgagggagctgcccctatgacccaa
-acacctcccaccaggcctcaccttcaacactgaggattacagttcaaggtaagatttggg
-cagggacaaatacccagactatcatggtgtcatttactatctcccgtttttcctgtaact
-ggtagttagagataaagtttcaattagtcagCAGTCACtttttttttttttttttttgag
-acagagtttcactctgttgcccaggctggagtgcggtggcgcaatcttggctcactgcac
-ggtccgcctcccgggttcacaccattctcctgcctcaatctcctgagtagctgggactac
-aggcgcccgccaccgtgcctggctaatttttttttttgtatttttagtagagacgggttt
-tcaccgtgttagccaggatggtctcgatctcctgacctcgtgatccacccacctcggcct
-cccaaagtgctgggattCAGCAGTCacttttaatgtgcaggaactcttcctcattttttg
-gttgcttcatgcctttccttgctttctgaatgcagtgttttcccaaatctctctgaaggt
-actagttagacttcactgttgcttattgttccataccctaaatgatctctgtttcctttg
-gggtcggttctgttttttcatcttttcatgcttttgattttccaaacatgttggaggatc
-ctcaAGAAAGTTAAAACCACTTTCTCTGGAATAATACCATGTAGATTTAAATCCTGCCTC
-Tggctgaacacagtggcttactcctgtaatcccacttcgggaggccaaggcaggaggatc
-acttgaggccaagagttcaagaccagctttggcaacatagtgagaccctgtctctacaaa
-aacttaaaaaattagccaggcatggtggcatgagcctgtggtcccagctacttgggaggc
-tgagatgggaagagcccaggaggttgatactgcagtgagccaaggtagcactactgcact
-ccagcctgggccacagaaagagagcctgtgtcttaaaaTTAAATCAAGACATACAAATga
-atcctgcctctaacagttattagttgcttagtttggcagagtcactggaacctatctgtg
-cctcacatttttatctgtaaaacagggatacagcagtacctgtctgatgggttggttgag
-aggattaaatgagttaatacacatgaagtgcattaaatagtcttagcacgtagttaacaa
-caacttctggtggttTCACTAAGgagcaggggagagaagacagaagaggttggagaggtc
-agggaggtgccagatcatggaggccctcgtgtgctgccacgagttgattctaagagtagc
-gtggagccattggagggGCCTAACTGGTGGGTTCTAATAAAGGAAGAAGCATGGGTGGGG
-CCTACCCCAGACTGGGGTTtgtgtgtgtgtgtgtgtgtgtgtgtgtgCATGGCCATGTGC
-CTGTGTGCAAATATGTACATGTCTGTAGCCGGTGGCTGAGGCTGGACCCCTGGCCAGAGC
-CCATGCTGAGCCCCTGCTGTTCTCTGCAGGCTGTGGGTGAGCGTGGAGGATGCTCAGATG
-CACACCGTCACCATCTGGCTCACAGTGCGCCCTGATATGACAGTGGCGTCTCTCAAGGAC
-ATGGTGAGTGAGGAGGCGGAGGGCGACACTGGGGTGAAGGctctccctttcactcctgct
-tcctctctctcctctggccctcccttcccactctccctctctttgccccCACCAGGTTTT
-TCTGGACTATGGCTTCCCACCAGTCTTGCAGCAGTGGGTGATTGGGCAGCGGCTGGCACG
-AGACCAGGAGACCCTGCACTCCCATGGGGTGCGGCAGAATGGGGACAGTGCCTACCTCTA
-TCTGCTGTCAGCCCGCAACACCTCCCTCAACCCTCAGGAGCTGCAGCGGGAGCGGCAGCT
-GCGGATGCTGGAAGGTGAGGCTCTGCCCTGAGCACCGCCGGACCCAGCGGGGGCCCTGGA
-CTCACTTGAGGGCATAGGGCAAGCAGGGGCAGAGCCCCTGGGTTTTTAGTCAGGGACTCA
-CCCAGAGGACCCTATCCAAGTGGGGAAGAGAGGACCTAAGACACATGGGAGGGAGCATTT
-CAGGGACCCATCATGAGAACAGCTGGCACGGGGAGGGGTGGACTCCGtccaggctccggc
-attcccagctgtgtgaccttgggcaaggttgctcctatctgctgcccagtttgctaaaat
-cataaattgggtatgacagtgatCGTGATAACTAGTGTTTATTCTTAAtttttaacttct
-gaaatgtttcagacctacagaaaagttgctaaattttacaaagtagtacataaagaattc
-ccatgtacctttcatgtgggttttaccacatgtgctttctttttttttttgagacggagt
-ctcgctctgtcgcccaggctggagtgcagtggcacaatctcggctcactgcaagctccga
-ctcccgggttcacgccattctcctgcctcagcctccggagtagctgggactacaggcgcc
-cgccaccacgcccggctaattttttatatttttagtagagacggggtttcaccgtgttag
-ccaggatggtctcgatctcctgactttgtgatccgcccgcctcggcctcccaaagtgctg
-ggattacaggcgtgagccaccacgcccaacccacatttgctttcttttatcattctcttt
-ctatataaaattattttttttctgaaccattttgagagtaagttgcagacatgatgtctc
-tttcccctaaataattcagtgtgcatttccttgaaaagaaaggtcattttcttacattac
-tgggtataacaatccaactcaggaaactaacgctgatacagtactggtatccagtctaca
-gatcttactcagattttaccagttgtcccactattgtcatttatagcaaaagacttggca
-ttctgctgtcatgtctcagtccctttcaaagagtccaggccagtttcttttttttggcgg
-gggttgggggctgatgtttcctccggagtggatcaagtcactgttttggcaggaccgcct
-cagcggtgctcttgggtccctcttggtgcatccttcaggaggcacGGAAGGGCTGGTGTT
-GTGCTGGGTTTTGAAGCTCAAAGGACATAGAAGCATTTATCGGTGGAATAGGGACCCTGA
-CCCTGGGGGAGCCAGGATGCCCACTTGGCCAGATGGAAGCTGGAGGTACCCCCAGGGAGG
-AGGGAGAGGATAGGGGGAGGGTCTGCCTGGCTGGCTCAGGGAGACCCACCCCCATGGGTG
-TGGACCAAGTGGGCCGCGTGGAACCACCACCCTTTAACCCTCCTCCACAGATCTGGGCTT
-CAAGGACCTCACGCTGCAGCCGCGGGGCCCTCTGGAGCCAGGCCCCCCAAAGCCCGGGGT
-CCCCCAGGAACCCGGACGGGGGCAGCCAGATGCAGTGCCTGAGCCCCCACCGGTAAGCTG
-TCCTTGGCCTCAGTATCCTCTTCTGTGCCCCTCCCTTGCCTCACCCTGCCCAGTCGGGCT
-CACAGCACCCTCTGCTCCCAGGTGGGCTGGCAGTGCCCCGGGTGCACCTTCATCAACAAG
-CCCACGCGGCCTGGCTGTGAGATGTGCTGCCGGGCGCGCCCCGAGGCCTACCAGGTCCCC
-GCCTCATACCAGCCCGACGAGGAGGAGCGAGCGCGCCTGGCGGGCGAGGAGGAGGCGCTG
-CGTCAGTACCAGCAGGTGGGCGGGAAAGTCCCTGGACAGACACCTGCAGACCGCACGGGG
-GAGGTGTAGGCCAGGAAGGGAGACACCTGCGCACTGCCGCGCCTCTCCGTTACTGCCTTG
-CCCCTCCCAACCATGCTGCTGGCAGTGACCCTGCACCTGGCTGTGACCCTGCACCTGGCT
-GTGACCTGCCCTCTCTCAAAGGTCACCCTGTGGCTGAGACCCGCTCCCTGGCTGTGGCGC
-ACATCCAGGTTCACATGCCCCACTCCCACGTGGGCTGTGGCTCCATCCCCAGCTTTGACA
-CACCACACGAGTATGGCTGGCCATGACCCCAGCACCCTAGCCATGACCCCAGCACCCTAG
-CCATGACCACACCTCAGCTCGGACCTCACCCCCACCCGTCTGTGACCTAAGCCTGCTCCA
-CCTCGCCGTGACCTCACCCTGGACTCTCCTACTCCTGACCTCTTCCCTCTCGGGCTGGGC
-CCACCCCTGACTTCCTGAGAGCCTGGCCTGGACCCTCGCTGCGCCCTAGGGGGATGACCC
-CCGACCCCGGTCCTACGCCTTAGCCCTACCCCGCCCCCATCGTGACACACGCACTAATGA
-CACAGACATTGATCCCCGAGTGCTCCCCATTCTGATCTCACCCCTGGCCCCACCTGCATT
-CCCCTTGGACCCGGTGCTGCCCCTGGCCACCCCACTCCTGTTCCCGTCTCAGCTCCTCGG
-CTTCGTCACTTCCCCACCCCTGACGTTGAGTGGCTCCACCAGCCCTGGCCCGGGCCCTGC
-CCTGCTACCTGACTCACCACTCAGACCCCGGCCCCCTTCCTTACCTTGCTGCCATTGCTG
-TCTCACCTGGCGCCTTCCGTGGCTACCTGGCCGGCCTCCCCTCCCTTGGCTTCCCCACCT
-CCACCTGGCCTCACTCCCAGCCCCGCCCCTCCCAACCTGCCTGCTCCTGcccatccccca
-ccccccaccccccatcccccagccccacccccatcccccacccccgtcccccatccccca
-tccctacTGGCTCCCAGCTTTGCCTGTGGCTGGTCTGACCCAGCCCTGACCACGCCCCCT
-GGCCCTTCCCCCTTCGGGGTCTGACCCGCCCCCGAGGCCCTGACCCGCCCCGTGGCCCCG
-CCCCGTGTGCCCAGCGGAAGCAGCAGCAGCAGGAGGGGAACTACCTGCAGCACGTCCAGC
-TGGACCAGAGGAGCCTGGTGCTGAACACGGAGCCCGCCGAGTGCCCCGTGTGCTACTCGG
-TGCTGGCGCCCGGCGAGGCCGTGGTGCTGCGTGAGTGTCTGCACACCTTCTGCAGGTGCG
-GCCCCCAGTCCCACCCCCGGCAATGCAGCTtaatcaaagccgccaattacgcagggctgg
-acgtgggtggggccctgtgctctgatacctcattggacgcccgcgaaaacctacgaggta
-ggctccgtctccccatgttgcggacgaggaacctgagggaaagagaggcccagcgcctta
-ccccaggcccacggctcatgagagaagcagcctagacgtgagcgcaggCGTGGGGGGAGA
-CTCCCTTCCCCTCTACCTTTCGCCGCCCGGGCTCCTGCAGCCACGCTGCTCTCAGCCTCG
-CTGTGGGCATCTGCCAGTTTCTGAGTCTCCTGTCATGGCCCCCCCACCCCTGAATGTGGG
-GAACACAGACCCGCTCACCACAGCGGACCCTTGTGGAGCCGCCCCTGGGTGacaggctcc
-gtgcctgcctcctgcagcttacattccagcagagaggctgatgagaatcggataatcgct
-ggttgatgtctttgtgaattgtgtcaaatgctacatacagtacattaagagacaacagga
-gtccttcccagagagggtggtctggaagcttccaaggaggtagccccagagcagggaccg
-gaaggcctgctgtaggtgtggggtgtgggcctggcctgttggaggagactgaggaggtct
-cttggtggctggagcagagggatgaagggggtaatcagagcaggatagagaggtgttggg
-tacgtgagcagcagtgaggagttgggatttgttctgggtaggatgggagtcactggggag
-acatggctgctgttctgagatagactctaggggccagatggatgcagggagcccagcgag
-gaggctcctggagtcacccaggtgggggatgtggggcctggaccagagaatcagagcggc
-agtatggaggcagggtggagGCCTTGGTGATGGGTTGGTGAGAGGGATGGGAAGGAAGGA
-GATATTGAGGAGAAGTCCACCTGGGGTGACTGAGTGAGGCCCCTGGGGTCAGGCCTTGCC
-ATGTGAGGGATGGAGTCCCCAGTGAAGGGGGTTCCTATGATCCTAACTCTTTTCCCCTCC
-CCTCCCCTAGGGAGTGCCTGCAGGGCACCATCCGCAACAGCCAGGAGGCGGAGGTCTCCT
-GCCCCTTCATTGACAACACCTACTCGTGCTCGGGCAAGCTGCTGGAGAGGGAGATCAAGG
-CGGTAAGGCCTCAGGGTGGGAGACATACCCCAAGTCCCAACTCCTAAGGAACTGGGCCCT
-GAGCAGGCAGCAGACATCtttcttttctttcttttttttttttggagatggggtctcact
-atgttgtccaagctggtctcaaactcctgggcttaagcgatcattcatcctcagcccccc
-agaCATTTTTCAAGAGCTTTGTCCATGTGGGGTGTTGAGACCCCAAGCAGAAAAAGAATT
-GAGGGGAGTAGCTAGTCAAGAAACCACATCTATGAAGGAaggacagcagagttgttaaga
-atcagggactcggctgggcgtggcagctcacacctgtaatcccagcactttgggaggatg
-aagtgggcagattgcttgaacccatgagttccagaccaacctgggcaacatggcaaaaaa
-tattcaaaaaatagccaggcgcgggggcatgcgcctgtagtcctagctacttgggtgggg
-tctgggatgagtgggctgaggtgggaggattgcttgagcctaggaagtaaggttgcagtg
-agctgtgattgtgccactgcactccagcctgggcaacagagtgagaccttgcctcaaaaa
-aagaaaaaaaaaattagtcagggaactctggagcctggtggcctgggtgtgtgaccacaa
-gtcagatatttaacctctctatgcctctatctcatctctgttagagtcagagttacagct
-tctatttccaggattgcaaagattacagtagaggatatgtgtatagaattcatagtagta
-cATccaggcgcagtggctcattcctgtaatcccagcgctttgggaggccaaggcgggtgg
-atcacctgaggtcgggaattcgagatcagcctgactaacatggagaaaccccatctctac
-taaaaatagaaaattagccgggtgtggtggcgcatgcctgtaatcccagctactcaggag
-gctgaggcaggggaatcgcttgaaccccggaggcggaggttgtggtgaactgagatcgcg
-ccattgcactccagcctgggcaaccagagcgaaactccgtctgaaaaTATATATATATAT
-ATTTAGAGTAGTGCTTGTCACATAGTAAGCCTTtgttgttgttagcgcttactgtgtaac
-aaatcactgcaggctcaaaacaacagtcatttattcagctcataaatctgcaagttagga
-cagttggccctctgtatctgtgggtaccacactggagaattcagcaacggtggatagaac
-atattcttacaaaaaaaattacaataaaaaacaaatttaaaaaacaatacagcataaact
-atttgtataacatttatgttatattaggtattataaataatctacagatgatttaaagtg
-tatgggaggatgttggtaggttgtatgcaaatactgcactattttatataaggggtttga
-gcatccatggatttgggtatctgcaggggtcttggaaccaattctctggataccgaggga
-tgactataatttgggctggacttacctggatggttcttctggtctgggcagggcctcgct
-gatttcacctgggcctggctggtgggtcagccgcggtggcctggtttataatggtctcat
-ctgtgatgactgggatgactggggcctccttccacttcaatgtctcacccaccagcaggc
-tgcccgggccttctcatgtcatggtggtctcaaggttccaagagcagccatggggagccc
-cagtgcatgtgtactttctaagtctgctcatttctcacttgacactgtcccattggccaa
-agcaagtcccatgctcaagcacagagtccattgggaagggaccacccaaaagtgtggaat
-cggggagacagaaacaaattggagtcaccaCTCCGCCAGTCTGTCACAGCGTTATGTGTG
-TCTGCATACGTGTGTGCTTGCCGCTGGCGCTCTTCATGAATTCGTTAGCAGGTTctctgc
-ctggctgctggtgatctcgagcaagttgtttcccttctgtgggactccatttccttatct
-gaaaagtggacagttgggcttgatTCATGGTTTTCAAACTGCTGGGAAATGACCTTCCCA
-GACTTGGGCACTGTGGGTTCCCAGGCCAAAACATGGCAGCCGAGGCCCAAATGGGAGATC
-CCCACAAAACACATACACAGACCTCCTCTTTATTTCTGTCCCCCCTGCCTCTCTCCTATG
-CCCCTATTTCTCCTGAGAATGCTCCCAACTTCACCAAGTGTTTATGGAGCCCAAGAGGTT
-CTGCCCCTGGGGAAAAGGGGGAGGCAGAAGAGGTAGAACTTTGGGAGTTCACAGCTCTGA
-TATCAGGAGCAGCCCCATTTTTCTCTGTTGTCTCTGGGTGGTTGCTGAGGCTCCTTCGCT
-CTGGCCTGGAGAGACCTCATGACCAGTCATTCCATATGTCCCCAGCACCCATAGCCATTT
-GCTTAGAGGTTTCCCTGTGGAGTCCACCCCAGCCAAGGGGCATTATGCTGGGGCCAGGTT
-CATGCCAAAGGGCTGCATGAACTTCCCTGGAGCCCACTGGAGTTGATGTGAGTCTCAGAA
-AATGGTCAAGTGTGACAGAGAGAAGGAGGCAGGGATCAGCCAAGTAATGTAGTGGAGGTT
-GTTTTTACAAAAACAGAAAAATATGCCTCACCACATAGAACCAGAGCAGAAATCAGAGAG
-AAAATCACCCACAAACCCAGGAAATCCTCCAATTGCATTTTATCTTATTTCCTTCAGTAT
-CTCTGGGCAAAttttttttttttttcctttttgagatgaagtctcactctgtcatccagg
-ctggagtgcaatggcgcgatctcagcccactgcaagctccgcctcccgggttcacgccat
-tctcctgcctcagcctcccaagtagctgggactagaggcgcacaccgccatgcccagcta
-atttttgtattttcagtacagacgagttttcaccatgttggccaggctggtcttgaactc
-ctgacctcaggtgatccacccacctcggcctcccaaagtgctaggattacaggcgtgagc
-caccgtgcccagccAGATATGATTTTTTAAGTCAACtttacttaagtatactttgcacac
-aataaaatgtactcattgtaagtatgcagtcaggtaaattttaacaaatgtaactctcgt
-aaccaccaaccactgttacatataacatAGGCATGATTTCTGCCTCATTGTAACCAGCAT
-GGATACAATCGCTTTAGCTTTTGTTATTTTGCTATAGAATTTTTCTAAAGATTATTACAA
-ATCTCAATAGCACATATACTGTTTATACCTCTTAGTTCTAGTTTCTCAGTTTGTAATACT
-CCTTCAAGGAATGTTTTGCATGGTGTAttcttttttttttttttttttgagacgaagtct
-cactctgttgcctaagctggagtacattggtgtgatcttggctcactgcaacctccacct
-cccgggttcaaacgattctcctgcctcagcctcccgagtagctgggactacaggcagatg
-ccaccacacccagctaatttttgtatttttagtagagatggggtttcactatgttggcca
-agctagtcttaaactcctgacctcgtgatgcgcccgcctcggcctcccagagtgttcaga
-ttacaggcgtgatccatcattcctggctGGTGCATCTTATATattattttcttgggataa
-agttaaagaagtgggatgggtaccaaagggtcagaaaagtttgggatggttgaaacgtta
-ttgccacattgctttctcagtgctacgtactagcttactagtttgtttaatttttatttt
-ttatttttgcgggtacatagttggtgtatatatttctggggtacatgaaatactttgata
-caggcatgcaatgcgtaataatcacatcatggagaatggggaatccatcccctcaagcat
-ttatcctttgtgttacagacaatccagttaacctctcttagttattataaaatgtacaat
-taaattattggctacagtctgttgtgctatcaaatactaggtcttactctatttttttgt
-accaatttgccatccccactcccctgccacgcctcactaccctttgcagcctctggtaag
-catccttttactgtctgtcctcattagttcagttgtttcgatttttagcacctgcaaata
-agtgagaacatgtaatgtttgtttgtctgtgcctggcttatttcatttaacataatgacc
-tccagttcttccatgttgctgtaaatggcaggattgcattcttttttgtggccgaatagt
-actccattgtatatatgtgccacgttttctttataggatactagtttaatcatgtctttc
-ccaacattgcttattatttATGTTCttttctttattgtgagaaaatagacataacattta
-ccattttaaccagtttttagtatacagttcagtggcattaagtacattcacactgttgtg
-caaccatcaccaccatccacctccagaacttttAGAAATTCCCCCCACTTTCTTTCACTT
-TCTTTTTACTTTTCTTTTCCttttttttttttttttttttttttttttagctaggatttc
-attctgtcacccaggttggagtgcagtgcatcagtcatggctcactgcatccttgacctt
-ctgggctcaagcgatcctcacaacccagcctcccaagcagctgggactacaggtgtgagc
-accacacctggttattttattttttaaaaaaattttttggtagagatgaggtctcactgt
-atttctcaggctggtctgaaactcttggcctcaaggaatcctcctgccttgactgacctc
-ccaaagtgctgggattacaagtgtaagccaccacacctggccTAAAATCCACTCTTTGAA
-TGGAGTTTTTCAACACTATGAGGATTACATGAAGAAAAGAGCCTGGGGCTGGGTTGGAGT
-TTCTGGGCTGGGGGCTTTCTGGAGGGTATTTAGTGGTCAAGGGTCATATGTCAGGTGTTC
-TGAATCCTGAGCAGCAAGGACATGGTGTGTTGGCAGCTCCTGACCCCTGAGGATTACCAG
-CGATTTCTAGACCTGGGCATCTCCATTGCTGAAAACCGCAGTGCCTTCAGCTACCATTGC
-AAGACCCCAGATTGCAAGGGATGGTGCTTCTTTGAGGATGATGTCAATGAGTTCACCTGC
-CCTGTGTGTTTCCACGTCAACTGCCTGCTCTGCAAGGTGGGGCCTGCAGGGACTCCCCCC
-ACCTAGTCACTGTCATCTTGCCTGGAGCTCACCACACTGCAGTGCGTGTTCTCCTGGGAA
-GGGAGCTGTGACACTGGCCTGCTGGTCATGACTTAGAGCTACATGTCAGTGGGAGAGTGT
-GGCTTGAGCCTGAACTGagccctggccccacagacggagtcccagccccagccccagatg
-gagcctcaaacctaggcagccctggttcacaatggagccccgaccctgggccagtctgac
-cccagtcacagactgaatcccagtcccacattgagccctgatcccatccAAGTCCATAGA
-CTTGGCCTCTGACCAAACCTGACCCTGCACTTGTCACTTAAGGTGGTCCCATATTCAGCT
-CAGACCCTGAACCGAGCTCTGACCCTGGCTTCTGACTGAATCTGTGACAGACTAAGGCCT
-GACCCTGGCCCTATACCACGTCTCCACCCGTGTCCTCAACTGAGTGCTGACCCCAAACCT
-AGACAGCCCTACCTGATCCTTCCCCCAGGCCTGTCCCCGCCGCTTCATCTCAAAAGTTGA
-AGGTGAGGAGCCGGTAAACAGGTCTGGAGCCTGGTCTCAGACTCAGCCTGAGCAAGCTCA
-GTCTGGGGTCATTGGGCCTGTAACCCCGGGCAGGCCCTTGTTAGGGATGCAGGGTCTCAC
-CCTAGGGGTATAAGGGATTTCTGTGCCCATCAGAACTTaaataagctgggtgtggcagca
-catgtcagtggtcccagctactcaggaggctgaggtaTATTTTGCTGTTAGCATAtgtga
-tgaccttgacttcacctccctggcgccaatatcctcttctgtaaaatgGCTTATGCATTA
-CAAAGTGAGGTCCTGCCAGTGACTACACCTAGAGGCATTAAGTGCCTTTGTGGACTCCTG
-CCCTGCACCTCACCTCTCCCAGCTTCTTAACCCCCTGAGGAACCTTCTTACCTTGAGTCC
-CTCACCCGCTACAGGCCATCCATGAGCAGATGAACTGCAAGGAGTATCAGGAGGACCTGG
-CCCTGCGGGCTCAGAACGATGTGGCTGCCCGGCAGACGACAGAGATGCTGAAGGTGAGGC
-TGGGACAGGGCCGAGGCCTAGGGATTTTAAGTTCTGGGATCCAGGTGGGGGCTGGGGGCT
-TCCCAGTAAGGGCTGTGCTCACACATCCCTGGAGGCTCTGACCTCCCTTCTGGCTGTCAC
-TCCCATCCGGAGGTGGGACTTAGGCCGAATGGTCATGTCAGGAAGAGCGTCTGGGTGGAG
-GGTGGAGACCACAGGAATGAAGAGGGGGTTGCTGGATGGAGCCTGGCCTGGCAGAGCCAC
-ACAGGAGAGACTCCACAGCTCTAGAGGGTCACCACCTTCTCCCTGCCATGGGGAGGGGCC
-AGGCTGGGTGACTGCCCCAGCCCCGCCCCAGGGCCAGCACCTGCCCCACTCCAGGTGATG
-CTGCAGCAGGGCGAGGCCATGCGCTGCCCCCAGTGCCAGATCGTGGTACAGAAGAAGGAC
-GGCTGCGACTGGATCCGCTGCACCGTCTGCCACACCGAGATCTGCTGGGTCACCAAGGGC
-CCACGCTGGGGCCCTGGGGTGAGTCTTTGCTCGTGGTGGTGTGGAGAGGGTGCCCTTGTG
-GGCTTTGCCTTAGAGGagggctgggaaaactacagcccatgggccatatccaacccagca
-cctgaatttgtacagctcccgaggtaagaatttttttttttttttttgaaacggagtttc
-actcttgttgcccaggctggagtgcaatagcacaatctcagctcactgcaacctctgcct
-tccgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcatgcg
-ccaccacgcccggctagttttgtatttttaggagagacggggtttctccatgttggtcag
-actggtctcaaattcccgaccgcaggtgatccacctgcctcggcctcccaaagtgctagg
-attacaggcgtgagccaccgggccgcaagaatgttctttacatctttaaatggttgaaaa
-aataccagaagatgactattttgtgacgtgaaaattacatgaaatccacgtttcagtgtc
-cgtaggtaaagtgctttggagcacagccgtgttcattcattcacatgttggctgtggttg
-cttttacactacagaggcagaggccgtatggctgcccggcccaaaatgactggccctttg
-cagaaaaggtttgcccactcctgCCCtagaggacagcaagtaaaggttcgatctggagtc
-agaggtggattggcccctggctctggcacatactgactgtgtgattaggctgcctgccac
-tcacctctgtcagccccatttcctctgtgaaatggagatgatagctgggcttatctcagg
-cttgttgtcagaatcaagtggaaaaattgcaagagaagtgcttagagagcctgtcacttg
-gtgagcacccttgcagatggtagctgtcgttattAGGGGTGTGCTCTGGAATTGGGGGCC
-TGTTGCTACGTTCAGGTAGACTTTCAGACAGGTGGAGGCAGAGGAAACTGCCCTCTCGCA
-TGCTGACATGTCTAGAATATGCAGAGTGGTCAGATCCTCTCCCTGGCCTGTTCCCGGATC
-TAGGCGTGGGTAGACTGAGTGCTGTGGGAGCCCAGAAAAGGCCTCAGTGACTCTCCATCA
-GGTAGCTGAGGCTGACCAGGCCATTCTTGCAGGAGGACCTGCAGAGGCAAAGGCCCGGGG
-TGGGAGAGCGCTCGGCTGTGGGGGCAGTCTCTGCACTGCGCTGACATTCTCTTCTCTTCC
-TCCCATCCTCTAGGGCCCAGGAGACACCAGCGGGGGCTGCCGCTGCAGGGTAAATGGGAT
-TCCTTGCCACCCAAGCTGTCAGAACTGCCACTGAGCTAAAGATGGTGGGGCCACATGCTG
-ACCCAGCCCCACATCCACATTCTGTTAGAATGTAGCTCAGGGAGCTTCGTGGACGGCCTT
-GCTTGCTGTAGCGTTGTAGGGGCCCTGCCTGCACTGCGGTTGTCCACGGTCACATCTGCC
-CCAGTGCCTTTGTCCTTCCCTTGGGGCTTGCCGGCCAGACTTCTCTCCCCTGCGGCTCCC
-ACCTCTGCCTGACCCCAGCCTTAAACATAGCCCCTGGCCAGAGGCCTTGCTGGGTGGAGC
-CTCTGTGTGACTCCATACTCCTCCCACCACAACACTCATCTGTCAAACACCAAGCACTCT
-CAGCCTCCCCGCCTTCAGCTGTCAGCTTTCTGGGGCTAACTTCTCTGCCTTTGTGGTTGG
-AGGCCTGAGGCCTCTTGGAACTCTTGCTAACCTGTTCAGAGCCAGGAAGGAGACTGCACA
-GTTTTGAAAGCACAGCCCGTCAGGTCCGGCTCTGCGTCTCCCTCTCTGCAGCCTGTGTAA
-GCTATTATAATTAAAATGGTTTTCCGGGAAGGGATGAGTGTGATGTCCTTGAGAGGAAAT
-GAATGTCCTGGCCTGGGACTCTACACACAGGCAGGATCCTGAGGTCTCTGGGAACTGCAT
-CAGAAAGTTGACTTGTCAGTCCATCTGTGGTAGAATGAGGCTGTGACTGAGCACTGGGAC
-CTTTCTACCAGATGTGGACCCCATGCCCAGCCTCAGGGGCAAGGATGCTCTTGGGTCACC
-GTCAGCCAGGACAGGTGGAGTGTGCAGTGTGTCAAGTCTGCAGAGAAGGATGGGCTTAGG
-GGCGGGAGGGGAAGTCTTGCCACTCCTGCTCCCTTTTGACCTCTCAGCAGGCATCTAGGG
-TTGGCAGGTAGATAGTTCAAGAAGGAACGAAGCTGCTGCAGTTGAGGGGTGGGGTTGTCC
-ATCCTATTTTCTCGTCTCAAGCAAGATGGCACAGTATCGATTCAGCAGTATTTACTAGAA
-CCCACTCTGTGCTGGTCGGAGGTTACTAAGACAGGGTCCTGGGATGTTCATTCTCTAAGT
-CTTTCCTCCGCTCTGTGACCCACCCTCCTTCCCCTTTTGAGATCTGGTATTTGATGCCCA
-ACACATTGTCCACGCTGTGACGTGACCATCATCATAGCAGGCAGAGGGCGCCTCTGCTGC
-TGAAGGCCTGTGATTTTGTGGGGAAGGGCCTGTTCTAGCAACTGGAAAGGCACTGCCACC
-TGCCGTTGGATGCCAGGACTCAAGAGCTGGCCCCAGTCACTGTGCGCAGAGCTGTCTGAG
-AATGTGTGAGTGGACTGGGTCCTTCGGCACTGCCTGCATTGGCTCAGGGCAGTCAACCGT
-CGCAGAGGATGAGGGGCACACTCAGGCAGCCTCCCCGGCCCTGGAGGCAGAAAGGCCCAG
-GCAGAACCACTGACTGGGAGGAAACAGAAAAAGCAGAGGAGAGCCAGGCTGCAGGCGTGT
-GGATGGGACCAGCTCAGGCAGACGCTGTCTCATACCCACTCTCCCCTCTCTTGCCAGGGC
-CTGGCCTGGTGTCTCTCAGGAGCCTGGGCATGAGACAAAAGCAGAGATTGTTCTCTTGTG
-GTACCACAGGCTGTAACCAgtccacccagtgttgttttagaaatttaaatcggttgccca
-tctttttaaattggcaacatcgtttaccacattaaaatctagatgccctgcttctcttga
-aaatgtcaaagcttggtaatgccaggtcctcacttctacctggggggaatggagtcacag
-agatgtcaaatctcttcatggggtgtacaccctccagtttgccacagtcctcaccACCCC
-AGGACTCACGCCGAGGCCTTTCCAGTGCCCTTGCACCATCCTTTTTCTCGTAAGAGGAAG
-ATGAAGTGGGGCTCTACGCGCGGCGTATCACAGGTGAGGGCGAGACCAGCAGAGAGGGCT
-GTGCTGGCTGTGGCTTTGCTCGGCCTGCCCCATCCATGCTGCAGTGGTGCGGAGGAGCAG
-GGAGCTGTGTAGGGCCAACCCCGGTTCCTGCCTCAGCTCCACCCGCCTTGCACCTGCAAG
-TGAAAGGTCTTAAGACGAGCAGGCCCAGGGCACCCTCTACTGCAGGGTCAGGTGGAGGTG
-CCTCCACCTCCCAAGGCTCACCCATGCCAGGGGCCCAGAACTTGAGAGGCCAGCACCAAC
-TCTCCAGGGCCGAACGAAAACCAAACCCCAGGGCTTTGGACTCAAACCATCGAGAGGAAG
-CAGCAAGAGGTCCCAAAGGTACTTGAGTGACACAATGATCATCATTCTCTCCTCAGGGGC
-AGGACAGGGGCAGGGGAAGGTGAGTGGAAGCCCATTGCTCAGATAAAGAGCAGCTGCCAC
-GGAGGGTAGCCCGTCGGCCTATGCCGGCGCTCACTGGTGTCTTCCTCTAGTGCTTGGGGC
-TGGCATGGAATCTGCTCAAATGCAGGCAGCTGAAGGTGAGCCCGCAGCCTGGTGATCCCA
-AGTGCCAACCATGAGGAAGTCTGGAGAAAAGACCAGGGAGCAGGGGCCCTCGTGAGGAGC
-AGGAATTGGCAGCAGGGGCCACCAGCAGAACACCAGAGGGGACAGTGGCAGGGGGAGGAA
-GATACAGCCAGGCTGGGTCTCAGCCCCAGCTGAGGGTCTCACCTCTTAGCTGGTGAAGGC
-TCCGGCCTGTTCCTGCTTTCGGTCACCACTTCATCCCTGGGTGATCGTGGGCCCGGTGCA
-GGGCTGGCTACAAGTGTTTGTTGATTGGTAACTGCTCATGAAAATGGCAACAGCACTAGC
-ACAGCTTCACAAATAGAAACACATTTCACCAACACCCTTGCAGGAAGCCCTCCAGGAGGG
-CCAAGACCATCCCTGCTTTACTGTTATGGACGTGAGCCTCCGAGAGGCAGTGACTTAGAT
-GCTCACCCAGCCAGGAAGGAAGGAACACACTCGACCCTCAGTCTAAGACCCCATCAGGCC
-ACTAATAATTCTCCCTCCAAACCCAGCTCAGGTCAAGGCCTATCTTCACCCCCAAATCAT
-CCCTAAGGCAGCCTCAACTCTCCACAGCACTACAGCCATCCTGCCCGGCCCCAGTGCTCC
-ACAGACCCTAAACCCGAGCCCTCCCGGGCTTTGTTGGCCCCAAACCACCTACACTTGTTA
-CGTGTTATTTTTACACTGGCGTTTCCCCTCAGCCTTGCATACTGTGTGGTGTTGTCTGAC
-ACCACTTTTCCAGCTCtctgacaccaactggggctagtgtcaggttccacagattaaagg
-gctcagtcccacacttccgatggagtcacagatggggtgcccaggctacccacacttcct
-gggctacccacacttcctgggctacccacacttcctggccaactacacattcaggggttc
-ccatgactccaccccctcaggttcaataatttgcctgagtgactcagaactgaagatcac
-cctgccctgacgcttcctggtgtggtgtcctcaaggatgcagtgtgggcaggaacagcca
-cgcttgagatgaacagggttagggatgggagCGACTGGCAGCCACTGCAATCTCAAGTTT
-TGGGGttttttttgttttttttttgagacggagttttgctctgttgcccaggctggagtg
-caggggtgcagtcttggctcactgcaacctccgcctcccaagttcaagtaattctcctgc
-ctcagcctcccgagtagctgggattacaggcacccgccatcatgcccggctaatttttgt
-attttagtagagacggggtttcaccatgttggccaggctggtctcgaactcctgacctca
-ggtgatccacctgcctcggcctcccaaagtgctggaattataggcgtgagccaccgcgcc
-cagccCTGAATCTCAAGTTTGTAAAGTGCTCCACCTCTGTCACTCCAACTCCCAGGAGTC
-ACTGCTtgggattgaaagtttccgccctcgaatcacctggtctttctggtgcaggagcaa
-ccccgaggcaatctaggggccctgctctaacgaattcattagcatgaactcaaatgggct
-ggaaaggggttatgaataacaaaagacactcaccactcacgaaattccaagggttgtagg
-agacccgtgttaggaacccaggagaaagaccaaatatttcttagtatcccacaCATACCC
-TTCCTTTAGTTCTCCAATTATCATAATTCTATTCATCCTTCACATTCCACCCTCACCTTC
-TATGAAAGTGCCCTGAATTTGCTGCAGGATAGATTGCTCCTGGAGTGCAGCTCTGGTGTG
-AGCTTTCAGAGGCAGCGCAGTGCCCTGGGCAGCCTGCGTAATCCACGACTGTCAGATCAA
-AGGGCAGTGTGACCCTGGCCCACAGTGGCAGGAGCTGAGTGCCACTGGCTTGGCCCCGGG
-AACCTGCGCATCTCCCCTCTGAGCCAAGGAAACAAACAACACAGACAACAGTGTCTCCCC
-GATGGCCCCATCCCCAGGGTGGAGGCCCTGCACCGGGCACTGCTCTGCGCGCGCGCTCCC
-CAGCAGCCAGCAGTGTCTGGAGGATACTGGAAAGCTTGGCAAGAGTAGGCTGAGCAGCTC
-CTCTGTGGACAGAAAGGGCATGTGGAGAAGCGGCACATCAAGCTCTGGTTAGGATCCAAA
-ACCAAATGCCAGCTCCTAGGATCCCCAGACCAGGGTGTGAAACACACCAAGAGCACCCCA
-GACCCGCACCAGTTGTGTCGACTGTGACAGTACCCAGAGTGGAAAAAACATGAActcaaa
-ctgtgttttcctccactgctctctcaataccaacagacatctgtggccaaatgtgttggg
-gatttctcccctgacaccaagcaagcaagcaattctgcagcctacatcagctgggtatcc
-tccaattcaattcagtgctcaccctacctatagtatctggaaatggaatccacaggttca
-aggctctgtcccacaagaccgccgcctctgccacaacattggactgaccaccctctttgg
-gtggcatgatttgccaagagtggctcacagaactcagggaaacttatgtttaccagttta
-ttacaaacattattagaaaaggatacaaataagtaaacagccagatgaagatacacacag
-ggtgaggtctggacgggtcctgggcaaatgctggagcttctgtccccatggagtgggggt
-gcgccaccctcttggcacatggacaagttctcgttcccctccctccacatgttcagctct
-tcagaagctcccgtgttcctgggccttttatggagacgtcattggataggcatggctgaa
-gcatggcagctgtgttgagatgaaactggacaaaaagcataaggtctaaacccagcaagg
-cctgtctgtccagatgcttcttggcctctctgtgcagcgttcctccttccgggtatgggg
-cagcaccctctctggaatgagggtcttatgagctacagtcagattaaagtctggtgttga
-gcaagtgaaatggggcaggagaaggtcacagacagagattccgttttctgaggcctgcag
-tgtcccaacattataacaaagggttatgggagtgatgaaccaggaactgtggacaaaaac
-atctacacacgtataaaatatcacaGTGCCCTGGGCTGCAGCTGGAGTGTGTGGGTCATA
-ATtcttgcagatgaaacagaaacagcaagactgtaggtactgcccaaggtctcctagcca
-gtcaaggctgaccaggagtcCACAGACCATGGCACAGTTCTGGGCCTGACATGGAAGGTG
-GGAGCATCCAGATCAGAGACCATTCCCACTGAGCGGTGGCCAAGGACGGAATGACAGAAG
-AGGTGATTAGTAACCACATATGGCTGTTTATTTGATACAGGGCTCTGTACAAAATATTTA
-CACATATTCTTTACAGAATAAGTAAACCACCTGAAGGTAATTAGATAATGCTTTCTTCTC
-AATGACAGGGAGAATCCTGGTGTCAGCAAAGTTAGAAAACAGATAAACATTCTCCTTCCG
-AGGCCACAACTCAAGCAAATGCCACTTGCTTCCTAGGATCTGAAAAGCTGTGGCCTTGGG
-ACCCTGGTCACATGCACCTCCTTTCCTCAACCCCATCAATTCCTTCAGTATTTACAAACA
-GGCTTGAGTACTTGTGGAAGGAGGGGCAGCTGGTGCCGCCCACTGAGAGGATGACAAGAG
-GGCCAGCTTGCTTTGGGAGAGCACTGGGAATATCTGCCGCATCATCACCTCTGGAAGAAT
-TTCCTTTGCCCTGATGAATACACCACTGTCTAAATTAATCCATCGACATCACACTTACCC
-CACAGTGGGGCTCCTGAGCCATGGACAATGATCCATCCCTTTGAGCTTTTTTTGGTTTTA
-AAGTGCGTAGTGGTggctgggcgtggtggctcacacctgtaatcccagcactttgggagg
-acgagacgggcagatcacctgaggtcaggagttcgagaccagcctggccaacgtggcgaa
-accccatctctactaaaaatacaaaaattagtcaggcgtggtagcaggtgcctgtagtcc
-cagctactcgggaggctgaggcagcgagaattgcctgaacttgggaggcggaggttgcag
-tgagctgagactgcaccactgcactccagcctgggcaacagagtgagactccatctcaga
-aaaaagaaaataataataaaataaaTAAAAATAAAGTGCTTAGTGTAACTCAGCGGACAG
-GGCTCCCAGCTGCTCTGGCACGTGGGACACCCTCCACCCTGCACACAACAGGCATGCAAA
-GAGGACTGGATATGGTGGGGTAGAGTGCTTCTGGTGTGTTCACTTTAAGAAAACATCTGC
-CAAGAGAGAAGAGTGCCCAGGAAAGACCAGGAAAATACAAGTACATGGCTGCTTCATACC
-ATATACCCCAATTCTTTAAAGCAGCAAAAGGCACTTTTTTTTTCAGGCCAGAGTGAATCT
-AAAACAAACCTGGCTTTGCTTACAGGGAAGCTGTCCCAGAAGGACTGAGTGATGCCTCTT
-GTTCCCTAAGGTCTGGAGAGTCTTTGCAAGTTTCCAACGACATTTCCAACCAGGTGGGAG
-AGACCAGCAGTTGACGAGTCAAGTCAGACCCAAAAAACGACGCCAAGGTAGTGAGTGGGT
-GCCTATTTGGGAGTAGGATGATTTGAGGAAAACAGGAAGAAAAACCGGTCAGAAAGTGGC
-ACTTTGGAAGTGGAAAGCTGTTTGCAAATAGCAACTCTGGCTAAAGCGAAAATGTTAATC
-AAGTAGAAAGTAAAATTCAGGATCTTAGAAGCTCATCCTTCTGATGAGAACTATTTTTTT
-TTCCGTGAAGGAACTATTATTACTTTAAAAGTGAGGGTAATTTACATATGGGGTGTATAT
-ATTCTAAAAATAGTAATAAAAGTACCTTTTATAAGCAATGTTGTGTGGCTTGTAGAAGAA
-AGCAGGGAGGAAAAAAAGGCAGGCAAAACTAGTCTAGGTCTAGGCCCTAAAAATGAGCTT
-CCTTCCCACTTGACTGGAAACGCCCATGTGATTTCTAGGCTGAAAATAGGTAGGATTTAA
-CGAGTAACCTAGTTCCCTTCTGTCTCTGATTTCTGATCAGCTGATGGAGCTGCTAGTAAG
-AGGGGCCGATCATGCTCCCAGACGAGTCCTTTGGCCTCTTGCTCTCCATCCCAAGCCTGA
-CTCCTTCAGCAGCAGCCCCCTCCTTCTGTGTCCATCTGATGCAGGCAAGCAGGAGCAGTA
-AGAGGGCATCCCATGTTCCAGTTCACCTTCTATGGGGTGACTAGGAGGTTCCCGGTAACT
-AGGGCAGCCCAGGCCCAGCAGGTTGCAAAAGCAGCTGCAAGCTTCAGAAACCCACTTCCT
-CCAACACCAGGGAGGTGGCAGAGAGCCCATCCAAAAGCCCACTGGGAGAGGCATAAGATT
-CTGTGCCAGGCCCCCAGGTCCCCTCTGTGTCAGGTAGGCTCTGCTACTGGCCTCTGAAGT
-AAAGGCAAACACAAACGGGCAGGGCAGGGTGGCAGGAATAAAAAACTCTGGACAGAAACC
-CTTTTAATAAAGGAAATTCCACCCCTCCCAATCCTTCCATGGAAGGGTGAGACCTTAATG
-TGATGTAAGAGGAAGGTCTTCTCTGGCTTTCAGGGAAACAGCTGCAGCTGAAACTTAGGG
-GCCCATTCCAGGGCACTTTTCACCACAGCCAGTGCAGCCGCTCCAAGTGCCACTGTCAGC
-CCCATCACTGCCAATTTCACAAAGCGGTTGGTCCTTGGCTTGGTCAGGACATCTTTTGTT
-CGATCTTCAGGCCGCAGAAGTCCCCGAAACCGCTGCCGCAGCACCATATCAGGCCTCTGC
-TGGGCTGATGCCAGCTCAAAGTCTTTGAAAGTAGAGGCTGCCGTCCTGCAGGGGAAAGAG
-ACGGAAGGAAGGAAGTGGTATGAAAGAGGAGGAGGAAAGCAAAACTACACCACATAGGCT
-GCGGGCAGAGCCTTTCATTGCTGGGAAAGCTCTTTATGATAAAGACCCATATGTCTACAG
-TGGGGATTCCACTGGCCTAAGCTCAGATCTCTGGAAACATGCCCCAACCCTATCCCACCA
-GACACAAACCTTCCCTCGCTTCTGCTCATTTACAGCCACCCCCATTCAACCAGTGTCCCA
-GCCTTGCTCACCTCTCAGCTTGCTGTTGGGCAGCGGCCTCCCGAGCAAGTTCGGATGGGG
-GAAACTGAACAAAAAGGTCTCCTGCTCTGCTGATCAGTGTCTCATAGGGCAAGTCCTGAG
-GGATCTGGGACAACAGGTGGTGGACCGAGGCCATGTCACAGTCACAGTCCAGGACTTCCT
-GCTCGCGATACAACACAATCTGTGGGGAGGTAGTAAAGCCTTGCAGTCAGAGGCCAGACA
-CACAGGGCCTGGGCCACCTGCACTCCATTATCCTTGCAGATGAATTTAAACTGGTAACAG
-ACAGGACTCAGCCCAAATGTTGAGCAAACTCTTGTATCCATCAAGGAAGTAATAACATAT
-ATACGCTCAGTGCTACTCCTACTCTCTGGCCCTTCCTGCAAACTTCCACCACATGACATG
-AAAGGCTGACCAGTTACAATCTAAGTCCTTCGGGCATGCTGGGCTGCTCAGGTGTCCCTT
-TAAGTCTTGAAAGAAATGAAGGAGATTCTTTTAGGAGAAAGTAGGAGAATTATTGGGAGA
-TTCCTGGAGCTCCAGCATAGAAGAAATGGTTCAAAACAGTAGAAAGAACAGTCTTGCTCC
-CTTTAAGCATCTTCCTTCTGACTGTTGGTCCACAAATCCACAGATGCTCAAGGGACCAGT
-GGTCATTGAAGGACTTCCCTGAATTCCCATCTCCACCCCATCCCTCAAGACCCTTCTACT
-AACTGAAGCCCCTACCCTCCACCGCAAGCCGCCTCCCTTGTCTGTCATGACACCAGATCT
-CTTCTTTTCTTAAATCTGGAGTTGACAGCTTACGCTACTATTTCCCTAATTGTGTTCATC
-AGCTGAACATATATTCCAGACAATGTCAACAGGAACCCTGACAattcacaatgcagatta
-gcattttaaaggttcagaagtgtcatgcagcaaaaaaaatctgattttgtttatacccag
-catttcccaacttactATTTTTTGTGTGTGACACCCCCATTAATACTGCACAGAATGGTG
-TCCAGGGACACCAGCCTGGGAAGTGCTGTCTTTTGCATCTTTCCATAATCCCCAGGTTTC
-CCTTCAGGGAAAATGACCACAGTGGGATGGGTGATGGTGAACCCAGCTGCTGGCTCGTGG
-CCTGTACCTACCACGGCTGCAAAGTAAATCGGCATCAGTGGGTGGCAGGCCAGGAAGAAG
-TCATATAACCGCACGACGTGCCTGAAGTCAGACAGGACATGCCCAAACCAGGTGATGAGC
-CAGCTGAGGGCAAAGATGGTCCCTACCTCAGCACTAGAAACAAAGGAAAGGCAGGTGTCA
-GGTCCTGTGGGCCATCCCTTCCCTCTCTCTGGGCCTTATAGCGCTGGTGAGAAGGAAGCA
-TTTAGGAATAAGATTTCTGGAAAATTCAGTTACCTAGGAATTCAGCATCTTCTCCTTACA
-AAATATTTAATACAAAGTCTTTAAGGTGTACCACAACACTAACACCACAACAGGGTCCTG
-GCTGCTTTATCTCACTGGGTGCTCGCCTACTGGCCAACAAATGTCAACTACAGGAACGAG
-AAGCAGTTGTTTTCAGAGAACTACGCCATGATTCTCCTTCTGACTAAGTCTTACCCTTCT
-GGGGGGCACAGGTACATATTCCCAAGCCTGAAAACATGACTGCATTAATTTTTCTGTTAA
-CATGAGACAACTGAAATATCTTAAGATGTAGCTgccagacacggtgagtcacgcctataa
-tctcagcactttgggaggccaaagcgggcggatcacctgacatcgggagctcgagaccag
-cctgaccaacatggagaaaccctgtctctactaaaaatacaaaattagccgagcgtggtg
-gcgcatgcctgtaatcccagctacttgaggctgaggcagaagaatcgcttgaacccggaa
-gatagaggttgcagtgagccaagatcatgccattgcactccagcctgggcaacaagagaa
-aatactccatctcaaaaaaaaagaaGGCATAGCCATTACCttttaaaaaattttaaaaaa
-aGAGGCATTGGCCAAGAACACATTTCCAACTAAACAGAGAAGAAACAAAACATCACATGG
-GATTTGCAAAAAAATATTTCTTCTCTTTGGTACTTGGGAAATAAAACAACCCATTGTTGG
-CCTTCCCCTTCTCGCCACTGGATCCCACAGGACTTTGTGTTTCTCTTGTGGCAATAACCT
-CAACATCTTACCTTGGCATACATACCTTATCCACCTCTCCCCACTAGATGTAAACTCAAG
-GGATGGGCTATGTCCCCCAAAGAGCACAGTCCCCAAAAATGCTCCAAGAACTGAATTACC
-CAGATTGCTGGTGACTGGAACAACTGGGGAGAACTTAACAAATCCACCCAAGACAATGAG
-GAAACTGCGCTCGGCTTGTGAGGAGTGTTTCAGGTGTGGGGGGGTGTGGGCGTGTGTATG
-CATGCACACAGAAATGCAGACACATATGTACCTCTGCATGAAGTCATGGAGCTCTGGATT
-CACCTGGTCAATGATGGGCATCAGATAGTTTAATATATGCTTGGTGTTGTCCATTGTTGG
-ATCCATAAAATCCCTGGAGGGAGACAATTCAATAAGCCTGGTTACCAAACACTTAGATCA
-GGGCTCAGGGTGGCGAGGGCTCAAACTCCTAAAAAAGCTGACCAGAAAACAGGCCAGTGA
-GTTATCCCCAGGACGGCTGAGGAGTGATGCCCGTCGTCTTGTGTTCCTCTCTACTGGTAC
-CTGAGGTGGTGGGTAGATAATTTTTCTACCAGGGATGTTGCCAGCCTCTCGCCTACCACC
-AGCAGAAATGTGACCACAATGTCATGGTAGCCCTGGTAGTAGTGCAGCTGAGGGTTGCGC
-TCCAAGATGAGGAGGATGATGTCAATCAGTTCTTCCTGGAGCCCTTCTCTCTGTTCCTCT
-GGCATGCCTGGGGACAGGAACAGAGATGCCTTTGAACATACCAAGCAGCCTAGTTAACAA
-GGAGGTCGAAGAAGGCCAGCAATGAATTTTCAGAGAAAAAAGGAAAATGAATTACAAATA
-ATTTGGCAACGCATATCAAGATCCACTGTTGATACCACCTGGCATACAGGAAAAGGCAGC
-TGCtagctttccagtaggggaagctgcagatgccaccctaaccaagttgctgcagttaat
-actgctgggacacagtatttaactgcagaatttcaactatgggagccacagacggcctct
-gcctcccgaggtgatgcactgacagagctcagcatcatgtctgcaggatttctatcaaca
-gcgcacagacctcaatctcacaatgaagaaatacccaatatccccaaaggaagagaaatt
-taactctcatacaatacaaaggaactgttccagattaaaaatggctaaagatataggaca
-acagcatgagaaacgcataaatctatatttccttttccagtgaagcacattactcgaaga
-aatggtgaaatgtgaataaaatctgtggattaattagttaactatttttcagtgttgtta
-ctgatgttgctcagtgtactgtgattacatgagagccttatatttaggaaatatgtcctg
-aaacacttggggtaaaaagatgtcatgtttgcaacttactcttaaatagttcagagaaaa
-agtgtatgtctatgtgtaaagcgaaggaaagacagaaagcagctaaaaaagcaaatgtag
-gccaggcgcggtggctcacgcctgtaatcccagcactttgggaggcagaggcaggtggat
-cacgaggtcaggagatcgagaccatcctggctaatatggtgaaaaaccccgtctctaata
-aaaaatacaaaaaattagctgggcgtggtggcaggcgcctgtagtcccagctacttggga
-ggctgaggcaggagaatggcatgaacccaggaaccagagcttgcagtgagctgagatcgt
-gccactgcactgcagcccgggcgagagagcaagactccgtctccaagaaaaaaaaagcaa
-atgtagtaaaatgtgaaaacaaaaggaaatctgggtaaaaggtatctggggaattctttg
-tcctatttttacaacctttcagtaagtatgaaattatataaaaataaaaaAATTTTAAAG
-TTACACGGTCCCCTTTAAACCAAAGCAAACGTTACAGGAAAAACTGATCCTCTTGATCCA
-AAGATGTATTATAGCTGGAAATAGGGAAGCCTGTCTCAGGAGTTCTTTCAGGGAGTTCTT
-TTACTGCTGGAGCTAGTGCTGCCAGCAGTAAAAATGCCTTGGCCTTATGAGCCAGGTTAG
-AAGAATGGCACATGCACAGCTTCTCCACACCATTAGCTTTCAGTTACAAACACATACTCA
-GAGAGAGAAAGCAGCTAATGTAAGGGCCCAAACTAAACCGGACAAAGGATTGCAGGTAAG
-AGCAAAACTCACCTCTTGCCCATATTTACCCCACCCCTTCTCAAATAAAAAGCATACCCT
-AAAAGATAAATAAGGAAACGAAGCAAACCCAGGGCTGCTGATAGGTGAAGCAGTGAAAGG
-AGTGAGAGTAAAAATTAAACCCTGTGTGAATTTTCAGCAGAAAAGCAGTGAGCCAAGCCC
-AGAAGACCATGAATGGAAAAAGAATATGAAGCCACACTGTAAGTTCAGCCTACAGAAAGC
-GTATCACAGATATTACATCAATGGAAGAGGAATAAAGGGTTCAGAGGGAAAACAGGTTAC
-CTAGGAAAAAATGGGggtggctcttgcctgtaatcccagcactttgggaggctgaggtac
-gtgcatcacctgaggtcaggagttcgagagcagcctggccaacatggtgaaaccccatct
-ctattaaaaacacacacacacaaaattagctgggcgtggtggcgggcacctgtaatccca
-gctacttgggaggctgaggcaggagaactgcctgaacctgggaggcggaggttgtagtga
-gctgagacagtgccattgcactccagcctgcaacaagagtgaaactctgtctttaaaaaa
-aaaaaaaaaaGGGAGGCATCTGTCCTATATGATCTCATCCAAACCAGCAGGCTAGGAAAA
-GGGAATGGACCGTGGGCATGTGCTTTTATCAAAACCACGCTGGCAGGCTACTGCTACCTG
-GGTATTGCAAGAATCTGTCCAGGGAGCAAGAATGCCAGCAGGAAAGCAGCCCCTTCAACA
-ACAAAAGCCAGGCCAGAGCACAGTGCAGAAGAGGGAGGCAGCCAGCTTAGAGGCTCCTGT
-TCCCTTTAGCAATTCTCCTCTCTTCATGACCTAAAGGTGGAGTTGCCAGAGGAAGAAAAA
-TAGGTCATCCATGTGAGGTTTGTTGCCCAGTTCCCTTCACTGTGAAAATTGAGACAACGG
-TCCTTCTTTTCTTTCTTCCTGAAATAAAGAGGTAATTTTAGGAATACATTCTTTtttgtt
-tgtttgttttgtttttatttatttatttttttatctattGCTGCTTAATTTGTTAATTAA
-GGAATATACTCTTACACAAACAGGGAATGGCCTCTCTTCCCTCTAAGGAATCTTACATAT
-GTATGCGCAAGGTACCATCGTTTTTAAACCTAATTAAGATATTACTCATTCTTGTTGGTG
-CCCAATTCCACACCAATCTGCTCTTTAATGCCAGACTGATGGCTCTAACAATCCTTATTA
-ACTCCTTTTTGTGGCTTCAAGGAAAAACAAAAACCTCTTCTCTCATTCACCACCTCTAGG
-CCAGGAGAAATTATTTTTGGTTCAGGCTTTCACAGTGGGGGTCTGAAAGTGACCAGTCAA
-GAAAAGGATGACTCAGCAAAAGGAGAGCTCTGAAGGTCCCTGAGGCGGCAGGGTCCAGCA
-TATTAGGTCACATGGTATGACCTGGAACAGATACAGTCTTTCCAAATGTGGCAGGACCGG
-GAGAGCTTCTCACCAGGAGGGAACCGCCGCAATGACCGCCGGACGTCCAGCAACACTTGT
-TGGTAGTCCTTGCTCATCTGCCGTAGGTTCTTCCCTATTGAAGGAAAAGGCACGTTATTG
-CAGGAATGCCTGAGAAGCCAGACCAGAAGCAAAACATTCTGGGATGACACAAAAGGCCTA
-GAGGGCACATGTCAGCTTCTCCTGAAGAGGATGATATGACTCAAGATACAACATTTGGCA
-GGGAATCCCTAGTTTGGTTCCAAACATTATGTTTCCTGCAAGTCACAATGACCCTAAGAG
-AAGGGAGCACAGACTGCCCAGGAGACAATACAGCAGGGTGGGAAGGAGAGCAAAGACGTA
-AGGAGGCCAGGCGCCTCGTGCAGAAGGCCACTGTGCATCACTGGGAACTGCTCTGAATTT
-CAAAGTCCACAGCTACAAAATGAGGATATTCCAAGGATCAAATAAAATCATGAATGTGGG
-AACAACAGACCACTGAAAAAAACCCTAACGCCTATAAAGTTGTGGGAGCACTAAGCTGTT
-TAGAAAGGTATATTGAGACTCACATAAAGAACCACCTAACAACTCTTGACCCAGCAATTC
-TAAAACTAAAGAGCTGCAAAGAGGAGACAGTCCTTGTGTTCAGCTGCTAAGTCCAATACA
-GCATGAAAGGAGGCAGTCTCTAGCCATTATACATATAACAAGTGTACATTTCCTCCAACC
-AAACCAAGTGCTGTATAATAAGCGTACATTTCTCTCACAACCCAAATCCAAAGCTAGTAA
-GGCTGGGCAACACTTCCTCACACGTAGGCTTCACGGTATAAAAAGATGAGGGAAGTTTGG
-AACCTGATAGAAGAACATCATCTCAGGATTCAGGGTGTGAACATGGCACTGCCTTAGCCT
-TCCAACAAAAAGCTGACTGCTCTGAAGCAGCCAATTCCAAGGATAATAACAAGTGGCAAC
-TCAACACCTACTGGGTGACATCATGACGCTGTGAACTTTTTGGTGGCAGAAGTCCTGTTT
-CAATCATCTCCAGTACCTGGCAATCATAGCACAACTAATATTTGCCAACTGAAAGAATCC
-TCAGCACTTGGCATTTTGCCATGATGGCAGGAAAGCTACAAGGTGAGTGCACTGAGTGAA
-TGAGCAGCAGAGTGGATTCACTGTTCTACAGGACTTTTACTATTTTGAACTTCATTCCAA
-GGAACTCTTTTCACCACATGGGCCTTGCACATTAGTTAGGTAACTCTTTTCACAGAATTA
-CAGGATTTTAGAACTCCAAAGGATTTCAGTATTTCCCAATAAAAAGAGGGTGttttcttt
-ttttttgagtatctcactctgtcgcccaggctggagtatactggcgcaatctcggctcat
-tgcaacttccgcctcctcggttcaagcgattctcctgcctcagcttccctagtagctgga
-attacaggtgtgtgccaccatactcagctaatttttgtatttttagtagagatggggttt
-caccatgttggccgggctggtctcgaactcctgacctcaagtgattcacctgcctcagcc
-tcccaaaatgctaggattacaggcgtgagccactgtgcccggACAAAAGAGGGTGTTTTT
-GTGTGTGTTTAAttttactttacttttagagattggatcttgccatgttgcccaggctgg
-cctcaaactcctgggctcaagtaatcctgcctcatcctcccaagcagctaagactacagc
-cgtgcaccaccatgtctggctagtttttaaatttttgtagagacagggtttcgcaatgtt
-gcccatgctggcctcaaacttccagtctcaagtgaccctcctgcctcagcctccgaaagt
-gctggaattacaggtgtgagtcacctcgcccagccACAAAATACGCAttttttttttttt
-tttttttttttgagacggagtctcactctgtcacccaggctggaggacagtggtgcaatc
-tctgctcactgcaacctccaccttccaggttcaagcaattctctgctgcagcctcctgcg
-tagctgggattacaggcacctgccaccatacctggctaatgttcgtattttttttttttt
-tttttagtagagatggggtttcaccatcttggccaggctggtcttgaacttctgacctca
-agatccacctgcctcagcctcccaaagtgctgggattacaggcgtgagccaccacacccg
-gccCAAAATATGCATTTTTAAAAAACACTTGCCAAGCAAGTATGCAGAACAAAGCATATG
-CATTTTTAATAAATTCACTTGCCTAGCCAATATTTTAATCCCTAATAAAAAAAGAACTTG
-Cctgggcgtggtagctcatgcctgtaatcccagcactttgggaggccgaagcaggctgat
-cacttgaggtcaggaattcgagaccagcctggtcaacatggcaaaaccccatctctacta
-aaaatacaaaaattagccaggcatggtagcgcatgtctgtaatcccagctactaggaagg
-ctgaggcaggaaaattgcttgaacccagggggcagaggttgcagtgagctgagattgtgc
-caccgcactccagcctgggtgacagagcaagactccgtctcaaaaataaataaaataaaa
-acaagtaaaaaaaGAACTCATTCCACTTTTGAATAAAATTCTACTTATCGGTTTGGCCTT
-ATTTTCAGAGTGGGCCCAAGCATTTCCCAAAACACCCTAGATTTATTCATATACCCTTGG
-TTTGAAAGGACCATAAAAATTAAAGATCCTGGAATTCTTTTCCCCCTGTCTCCTAGATAA
-GCTCCCCTCACAGCCTCCCCCACTCCCCTTACCTGATATAGGAGGTGGGTCATTGGCATT
-GACATTGAGGAGCTTGGGCCACACTTTTCGTCTGATCTCATCAGTCAGGAGCCCTCCTTC
-ACTGATAGCCATGCGTCTAAGGGCAGCCACATCAGTGGGATCACTGTTCAGAGCCTGGTG
-TATCTCTGCCACTTTCTTTTTCCTTTTGGCGTTAAAGTCTGAAGATAAGGATAGGGAAGA
-ATTAGGCGCACATTCAGCACGTGCATATTTTCTGCCTAGGACTCAAGCTCCTTTTTGATA
-TGAGGTACAGGTAAGTATCTCCTCTTAGCTCTAAGACTGCCTGCTGGCATAAAGTCTCAC
-AGCCAGATGCACTATTCATTTCGGGCCCAGTCTACTGGACCTCATGGTGGGAGGCTTGGA
-GAGCCCACTATAAAACAGATTTTAAATCACCGATTTTTAAAAAGATAGTCTCTTTTTATA
-GGTCTGAACCAAAAATCATAGGCACAGACTGGAAATAATTATTAGTTGTTGTTGTTTTTA
-AGAGACAGTGTCggctgggtgtggtggctcatgcctgtaatcccagcactttgggaggcc
-gaggtgggcggatcacaagttcaggaattcgagaccagcctggccaatatggtgaacccc
-cgtctctcctaaaaatacaaaaattagctgggcatcgtggtgctcgcctgtagtcccagc
-tactcaggaggctgaggcagaagaatcacttaaacctgggaggcggaggttgcagtgagc
-cgagatcgtgccactgcactccagccaggatgacagagcgagactccgtcttgaaaaaaa
-aaaaaaaaaagagacattgtctctctaagttgcccaggctggcctcaaactcctaggcaa
-aaccgatcctcccacctcagccttccaaacagctgggactacaggtgcatgccaccatgc
-ctggTCCAGAAATAATTACACGTACttttttttttttttttttttgagacggagtctcgg
-tctgtagcccaggctggagtgcagtggcgcaatctcagctcactgcaacctccgcctccc
-gggtcccggttcaagcaattctgcctcagcctcccaagtagctgggatttcaggcacgca
-ccaccatgcccagctatatttttgtatttttagcagagatagcgttcacaacgttggcca
-gggtggtcatgaactcctgacgtcgtgatcctcctgcctcggtctcccaaagtgctagga
-ttacaggtgtgagccaccacgcccagccTATATGTACttttttttttttttttttgagaa
-ggactcttgctctgtcgccaggctggagtgcagtggcacgatctcggctcactgcaacct
-ctgcctcccgggttcaagtgattctcctgtctcagcctcccaaTACATTaaaaaaaaaaa
-aaaaaaaaaGGTAAGTGAggctgggcacggtggctcatgcctgtaatcccagcactttgg
-gaggccgaagtgggcagataatgaggtcaggagttcgagaccagcctggccaacatggca
-aaacctcatctctactaaaaatacaaaaattagccaggcgtggtggcatgcacctgtaat
-cccagctactcgggaggctgaggcaggagagtcgcttgaaacccaggaggctgaagttgc
-agtgagccaagatcgtgccactgcactccagcctgggcgacaaagtgagactccgtctca
-aaaaaaatgataagtgaaaaaagaaaTGTGttaaaatcagacagatcttggttcaaatcc
-tggctctgccacttatctgatccataatcttggacagatgacttccctgctctgggcctc
-TGGACTGACACCCTCTTGTCAGGATAGTTACCATGGTACACAGTAGATACTTACTAAATA
-TTAGCTCCCCTCCTCACTCTGAAACAACATGTATTTTACAAATCAACCTACAGATATTTA
-ATTAGTACGTAATATGCAAAGCACTAAGGAGATATACTGTGTAAGTAACAAGCAAGGAAT
-TACAACTATAATAAACGCTCAGTAAATTCAGGCATATCTAGCAGTTAGTGTCAATGTTTT
-CATACAAGAATGTCCATTCTTAATTCCCAAACTTCACAGAGCATATACATCTCTTACTGT
-AACAATTTTTTCCTGTTGTTTAAATAGGAAAAATGCATGTCACCAAAACTCGATACTACA
-TTGAAAACATAACCACATGAAAAGGTCTCCTGTTACACGCTACTACAACTGGTAAAAACA
-TTAGAATCACATAGAGAtttttttttttttttgagatggagtctcactgtcgcccaggct
-ggagtgtaatggcgcgatctcagctcactgcaacctccctgtcccaggttcaagtgattt
-tcctgcctcagcctcctgagtagctgggattacaggcatgcaccaccacgctttgctaat
-ttttttttttttttagacagggtttcaccatgttggccaggctggtctcgaactcctgac
-ctcaagtgatccacctgcctcagcctcccaaagtgctgagattacaagcgtgagccacca
-cgcctggccAACACAGAGATGTTTTCAAAACCAGTGTCAAAGGGTACTTGGGTTTCCAGT
-GTGGCTGGTGACACTGCCACCAGACACTGCCACAGAGAGGCTGTGACACTGCATACAAAG
-GAACTGTTTCTTAAAAACCATAGTAAGTAATGTTTTAAGCATCTTACATCCTTATGTGAT
-AGTCTGTTATTCATAGACATTTTGCCATGTTTAAATTACTTTTTAGgactggtccctgag
-tggtgctatttacaactcattgattacaatcagttagatttctttgttccttttccacgc
-ccactgcttcacttgactagccttCAAATAAATAAATAAATAACTTTTTTGGGAAATTGG
-TTGGGAATTTGTGGTTAGTAGCTATCATATCATTTTTCTATGTGAAATAACAGAGTATTG
-CTTTTTGGCCTTTGGCTGAGATCAGGGGAGATAAAGGAGTAAAAGGCTCTGAAAGTTTGC
-ATGCAGAATGTCTGCTTTTAGGGATGGCTTGTGGAAGTTAAATGGATGATGCCTGTATTT
-CAGTTCTTTCTAGTTGCCAGTACCATTGAGAAAATATGTCAAAAACACAAGAAATGTTAC
-ACAAGACAACACCAAACGTCACAAGGCAGTAGACTATAATTGTCAAAAAAGGTGCATGCA
-GACAATAATGGCCAAGAGCTCAAAGAGACTGCAGTGGGTCAGGGCCAAGCTAACCTGAGA
-AGTGTACCTTAAAAAGGAAGAGGAGCAAAACTCTCTTGACATGCTTAATTGTGATGTTTA
-ATGAACATCCTTGCAGTGTAAGACGACCTTTTTAAAATACATTCTTggccggggacggtg
-gctcacgtctgtaatcccagcactttgggaggccaaggcaggcagatcacctgaggtcag
-gagttcgagaccagcctggccaacatggtgaaaccctgtctctactttaaaaatacaaaa
-aactagccgggcatggtggcaggcgcttgtggtcccagctactcaggaggctgaggcagg
-agaatcgcttgaacctgcaaggtggaggttatagtgagccgagatagcgtcactgcactc
-tagcctggacgtcagagcaagactctgtctcaaaagaaaaataaataaataaataaatTC
-TCTCGGCTTCAGACCTACCTATCTTTGGTGTCTCAAGTTAAACCCAAAGCAGCACCCATC
-ACATCTGCCTTTTCTTTACTTTTGTCTCCTATTGCTTCCAGATACCTTCTTCCTTTTCCT
-GCAAAGCCCATTCTGCTGGAGTGGAAAAGTCCAATGCCttgatgccagggtcttgttcag
-tcactcaagatggagtgtagtggcacagtcatggctcactgcagcctcaaccATATATAT
-ATAGTTTAAATAAATCAATAAACCAATAAATTCTCTCTTAATGATGGTTTGAGCCTCACC
-ACTTGATTAGGACAATCAGCATAACCTGTAGAATCTTATTTGGAATTGAATTCTGTATTG
-TAATTTTGTTCCTGTTCATTTTTAAATTTTATTTTTCTTTCACTGTAAAGATGATACTCT
-GCTTTAAATGTTAAAAGTGTACAAGCAAAAggccgggcacagtggttcacacctgtaatc
-ccagcactttgggaggctgaggcaggcagatcacgaggtcaggtgttcgagaccagcctg
-accaacatgaggaaaccccgtctctactaaaaatacaaaagttagcctggcctggtggcg
-cacgcctgtaatcccagctactcatgaggctgaaagaggagaattgcttgaaccccggtg
-gcagaggctggagtgagccaagatcgcacaactgcactccagcctgggcgcgacatagcg
-agactccatctcaaaaacaaacaaacaaaaaaaaGTGTACAAGTTAAGGAagccaggtac
-aatggctcacacctgtaatcccagtgctgtggagggccaaggtgtgagaatcacttgagt
-ccacaaaatcgagaacagcctgggcaacaaagtgagaccctgtctctacaaaaagtacga
-aaagttagccaggcatggtggtcccagctactcaggaggctggggcgagaggatcacttg
-agcccaggagtataaggctgtggtgagctatgatagcaccactgcacttcagcctaggtg
-acagagcaataccctatTATCAAGGCACTGGACTTTTCCACTCCAGCAGAATTCTAAATT
-TTATTTAAACTATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATGTGAAGTGGAAG
-ATATCACCAGAAGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTA
-GAAGGGACACCAAGCATCTTCCCCAGCAATGTTCTAGTCTGAGGAAAAGGAGGAAGGTGT
-CCTGGTGACCTGTCTCTAAAAACAAAAACAAggctgggcacggtggttcatgcctgtgat
-cccagcattttgggaggccgaggcgggcagaccacctgagattgcgagtttgagaccagc
-ctgaccaacacggagaaaccccatctctactaaaaatacaaaattagccgggcgtggtgg
-cacaggccggtaatgccagctactcaggaggctgaagcagaatcgcttgaacccaggggg
-cggagattgaggtaagctgagattgcagatcgcgccattgcactccagcctgggcaacaa
-gagcgaaactccgtttcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCAggctgg
-gcgcagtggctcacgcctgtaatcctcgcactttgggaggccgaagtgggcagatcatct
-gaggtcaggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaaaat
-acaaaaaattagccgggcgtggcggcgcatgcctgtaatcccagctactcgggaggctga
-ggcaggagaattgcttgaacctgggaggcagaggttgcagtgagccgagatcatgctata
-tgccactgcactctagcctgggcgacaagagcgaaactccgtctcaaaaacaacaacaac
-aaCGACAGCAACCACGGAcggtggctcgtgcctgtaatccagcatttttttttttttttt
-tttttttgagacggagtctcgccctattgcccagactggagtgcagaggcgcaatctcgg
-cttactgcaacctccacctcccaggttcaagtgattctcctgcctcagtctcctgagtag
-ctgggattacgggcacgtgccaccatgcctggctaatttttttttttgtatttttagtag
-agacagggtttcaccatgttggtcaggctagtctcaaactcctgacctcgtgacccgcca
-gtctcagcctcccaaagtactgagattacaggcgtgagccaccacacctggcctatccca
-gcactttgggaggccgaggtggatggatcactgaggtcaggagattgagacgagcctggc
-caacatggtgaaactccatctctattaaaaatacaataattaggccaggtgcggtggctc
-acgcctgcaattccagcagtttgggaggccgaggtgggcagatcatgaggtcaggagatc
-gagaccatcttggctaacacggtgaaaccctgtctttactaaaaaaatacaaaaaaatta
-gccaggcgtggtggcgggcgcctgtagtcccagctactcgagaggctgaggcaggagaat
-gaggtgaacctgggaggcggagcttgcagtgagctgagatcacaccactgcactctagcc
-tgggtgacaagttctgtctcaaaaaaaaaaaaaaaaggcagaaagaaCATGGATTCACCT
-GCTTATACAAGAAAAAAGGAAAAAAAAAAGTGTACGAGTTGCCTTGTTACAATAAAACTA
-AATGTGTATACACACAAAGGAAATGGAGGACATTCAGGGGCTGGGATGAAGGGTACAGAA
-GAAAGGCCAGGAGATACGGCCCTTCCATTTGACAGTAAATAGACTAATTAAAAAATATTT
-ATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATTTGAAGTGGAAGATATCACCAGA
-AGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTAGAAGGGACACC
-AAGCATCTTCCCCAGCAATGTTCTAGTCTGAGACCATTGTGAGTCTACAAACTGTTTCTA
-TGACAAAGCTGTACattattattattattattattattttatttttattttttgagacag
-agtcttgctttgtctcccaggctggagtgcagtgaagcaatcttggctcactggaacctc
-tgtctcttgggttcaaaccattctcgggcctcagcctcccaggtagccaggattacaggc
-gcatgctgccaccacacctagctaattttttgtatttttagtagagacagggtttcacca
-tgccaggctggtctcgaactcctgacctgaagtgatctgcctgcctcaggctcccaaagt
-gctgggattataggcatgagccatcaggtctggccCATTATTAACATAAATTAAAGTTGG
-TACTAATAAGTCACAGGTGAGCTACCTATGAGACCTGAAACGTAAAACCCACATAAACAG
-AGGCACTAGCTGGTTTGGAGCCATGTGCAATTGGAAGTGCGACAGAAAGATAATAGGAGT
-AACTTTTCACCTCGGTAAACCTGTCCTCCTGGCTTGACTGCTGTTTCCTGGTAACCTAGt
-agggtgaccatttgtcctcatctgtctgagatcttcctggtttatacctagagtcctggc
-acaattgttcacagcaaaccctttctgctccctgtattctcaaatatgtcccagtttgga
-agccaaattaaatggttaccTACCTAGAAATCATTAAAAATAAAACCCCTTCTGGGcaca
-cctataatcccagtactttgggaggccaaggtgggcagattacctgaagtcaggagatcg
-agaccagcctgaccaacatggtgaaaccctgtctctactaaaaatataaaaattagccgg
-gtgtggtggtgcacgcttgtagtcccatctactcaggaggatgaggcaggagaatcgctt
-gaacccgggaggcggaggttacagtgtgccgagatcatgccactgtactccagactgggc
-aacagagtgacactctgtctcataaaataaataaataaaaaataaaataaaATAggccag
-gcgtggtggctcatgcctgtaatcccagcactttgggaagtcgaggcgagcggatcacct
-gaggtcaggcgttcgagaccagcctgaccaacatggcgaaaccccgtctccactaaaaat
-acaaaattagccaggcgtggtggcaggtgcctgtaatcctagttacttgggaggctgagg
-caggagaatcacttgaacccaagaggcggaggttacagtgagctgagatcacgccactgc
-actccagcctgggcaacgagagcaaaactccgtctcaaaaaaataaacaaaataaaaata
-aaaaTATAATAAAATAAAAACCACTGCCGGGCATGGTTTTTAGTCCAGACgtggctcatg
-cttataatcccagcactttaggaagccgacgtgggcagattgcttgaccccaggatttgg
-agagcaaccagcctgcacaacatggcaaaaccttgtctctacaaaaaataggtgggcgtg
-acggcgtgcacctgtaattccagctgcttaggaggcagaggcgggttgtagtgaggcatg
-attgtgccactgcactccagcctgggtgatagagtaagactctgtctcaaaaacaaaaaa
-aaaTCTCCAATTTCTTCTGTCAGCATAACACCTAGTCAATTGTTCATGAGATGTGTCAAG
-CTCTTGACTCAGGTGTGTCCTttcatccattcatccattcatccattcatccGCCTGCCC
-ATTTGtccagtcattcatcagtctgtcacttaatgggtgtctacttgtactaagcactgt
-actggggataaaaagatgaattactccctcccagcccttgaagggctcacagtagggaca
-caaacaattattatatataatagaatctgagggattatgaaaatccagaggaaagaatga
-ctttttttcttcttctttttttttgagacggagttacgctctttgttgcccaggctggag
-cgcagtgttgcgatctcagctcactgcaacctccacctcctgggtttgagcagttctcct
-gcctcagcctcccgagtagctgggattacaggcattcaccaccacgcctggctaattttt
-tgtatttttagtggagacggggttttgccatgttggccaggctggtcttgaaatcctgat
-ctcaggtgatctgcctgcctcggcctcccaaagtgctgggattacaggagtgagccacca
-cacctggccaagaatgactacttctaaagcagtcaggaaaggcttcaccaagaatatatt
-ctggatccttcttttaattttttttttttttttttttgagacagagtttcactcttgttg
-cccaggatggagtgcaacggcacgatctcagctcaccgcaacctccacctcccaggttca
-agcaattctcctgcctcagcctcccgagtagctgggattacaggcatgcaccaccatgcc
-tggctaattttgtatttttagtagagacagggtttttccatgttggtcaggctggtctcg
-aactccccacctcaggtgatccgcccaccttggcctcccaaagtgctaggattacaggca
-tgagccaccgcatctggccCttctttttaatttttatttatttatttagacagggtctca
-ctctgttgccttggctggagtgcagtggcacaatcatagctcactgcagcctcaacctct
-agggctcaagcgatccttccacctcagccttctatgccaccatgcctaattttaaaaaaa
-ttttttgtagaggtggggtctcattatgttgcccagactgatcttgaactcctgggctca
-agcaatcctcttgcctcaacctcccaaagtgctaggatcgcagatgtgagccaccacact
-gggctctggtacgttcttaaagaaaattttgccacagggaagagtgtgttaaggggaaag
-tactccaggcagaagagttatgtgcaaagaccttgtcacatgaaagaaacaccatgtcca
-ggaaacaaagagttctatgaagctgaagtgccaggtaaagggagagAACAGAAGCAGGTA
-GCACCGCAGTAAAAGAGGCTGGGCTGGATTCATCCCGCAAAGGAGTCTGGGTTTATCCTG
-TACTCAGGAGGAAGACAGGGAGGGATTTTACTTTGGGCCTGAGGGCCATCCTTTGGAAGA
-CCAGGCTGTACGTTTTCAAGAGGGGTCAAAAACATGCAGGAAACAGAGAAGCCTTTTTAT
-ATAACATCGGTGGAGGCAAACCATGAGAAGAATTTAATTTCCAACAAAGAGAAAAAACCT
-AACATATTTAATTTTTTTTTAACTTGGGAGTACCCCTGCACTTTCCACACATCACAAATT
-GACAGCACTTGAGTGGCAATACTGAATACTGCTTGAGGGAAGCTGATATTCAGAAGTCTT
-GTTAACCTATTTGCTAAGAGTATGATAATTTTTCTTCAGTTTGTTTAGACATACATCCAC
-CCCATCTCTCTTTCTAAATAAGCTATTCGGCAATCTGGGAGAAAGGAAATCTTGTATCTT
-GGGGAAAAAAACCACTATGCAGTCAACTGAATTTCCATGAGGTTTTGGCAAACCATTTGC
-CAGAATGTTACTTAATTCTGAACTCAAATCCTCAAATCATACCTCCCATAACTCATTTCT
-CTTAAGACTCTGTTCCAAttttttttttttttttagagacagggtcttactctgtcaccc
-aggctggagaatagtggcacgatcatggctcactgcagcctcaaccttctgggctcaagt
-gatcctcctgccttagcctcccaggtagctgggaccacagacaagctccactggcccagc
-taatttttgcgtatatatattttgtagagaaaaaaagtgttgcccaggctgatctcaaac
-tcctgggctctagtgatccacccacctcgacctcccaaagtgctgggattacaggcgttg
-agccaccatacctggccTCCAATTCTACTTTTAATCCTGCATTTCAAAATTTACTTACTA
-TTTCAAAATTTTTGGCACTCTGTGGGAACGCAACAAATACGTGCAGAATATAGTAAGTGA
-TTTAGTTTAGTTATTGTTCCTCTGGAAAAAACTGGCTTGCAGTAAATGACATTATTTTTC
-CCATACTGTTAAGGTGATGCTCACTGCAGAACTCTCTAAACAGATCTGCAGACTCTTTGG
-CCTGTTTCTAACACTACCGGTGTTTCCCAGAGGAGGATGCTGTCCCAACGTGGATTTCGG
-CTGCTGTTTTTTTCAGGCCCCAACACCACCCTCCTCAACCCCACAGCCTAGTGATTAAAT
-GTCAGTGGCAGATGGAGAAAGCACTCCCACGTGTGCCACTCTGACAAATACTTTATTCCA
-ACTAAATGTATAGGCTCTCACTGTGACATAAAAAGGGAAGAGGAAACAGAAAATTCAAGT
-GAGCTAAAGATGTATGAATTACAGAGTGAGATCAACTGCTAGACGACACAGGGAGGGAGT
-TAGCAGCGTCTCCACTGAAAGACAAATTCACAGACATCCTGTTTATTTCCGAAAGAGAAA
-CATCATAGAGCTATTCTTGGGATGTTCAGGAAAAGATTAAAATAAATGCCTATTATCTAT
-TGTATTTCGAGATAAACTTTATAGATTTAGAGCAGGACACACATTTCTGGACTTGAGAAC
-GCTGTATCTGGCTTGGAATAAAAGCCCACATTTCATCTAGAGGTAGAATGTATGTCATTC
-TAATCTCCCTCAATCCTTTCTTCTCCAATTTCTTTATTGCCCCACTTACAAGATAGTGCA
-CTATTATTCCAAAGCTGATACCTTCCAAATTCCTTTATAGTAGAGGTCTTGGCTATCATA
-ACCATGATGGAACGAATGACCGTCCTACAGCTGGCTGCAAAATATAAGACTGCTATAAAT
-AAATCCCTGATGCCTGAAAAGTAATTCATTCAACAAAGGAAGATAGGTATGACTTTGGCC
-TACTCTTCATTAGAACGCTTATTtttatttatttatttatttatttataaagagggcaaa
-gcagactttatttgaggggcaccacagcaataggtatagcaacaactgcaacagggtttt
-gtagtcagggagggagatcagactcaactccCTAAAATGCTAATTTTAACAATGGGACAC
-TTCATCTGAACTGTGGTTCTTAATGGTTCAGATAAAGATGACACAACCCACTATTGGCTT
-AAACTTCTCCCAACTCTGGCTACAGAATCCAGGTAAAGATTTCTGCCCCCTCAGAGTAAT
-AGGCATGTCCAAAATCACCTGGATTAGGGCACTTAATACACTGGGAAGGGACGATAACAA
-CTAAAGATGACCACTATCCATGCCTCCTCTAAAAGTTTTTTCATATATTTTTTCATATCA
-CCAAAACAAATACTAACTTGGATCAACTAATTTATATAATGGAATCTCGTGTGAGCGTAC
-AAAATTCCATACTGATTATTTGGTTTAAGCCTGCATTATCATAAAGGCTTTACAGTCTTT
-AAACTGAAATTAAGCTCAAATTAAGAAATGCTAGTCTTAAAACAATGGAAGGGGGGGGCC
-GTTTTGTGTGGAGGGAGGGAGACAGACATACCCCTACACCCACCCACAACTACTGATATT
-GACATTGGAAATTAACTTGAAAATTTATgcctgtagtcccagctactcaggaggctgagg
-tgggaggagcacttaagtccaggagttgggagatgacagtgagctttgactgtgacactg
-cactccaacccgggtgacagggcaagatcccatctctcaaaaaaaaaaaaaaaaaaTGCT
-TTAACTCCACGTCTGTACCAGAAGACCACAGCAGGAGAGGAAAACCTTATTTCAGTCTGG
-GTAAGAGTTCTATTAAACACAAAATAAAACAAACTAGCCTCTGTTTCTGGAGGTCTTCAT
-TAGTAGTTTCTACAAAACAGTATCCAAATTAGCAAAGATTCTGTTAACTACCTGGAAAAA
-GCAGGTACCAAGAAAGAATGTTTCACTACAATGGAAAAAAACAGTCTAGTAAGTAAACCA
-ATCTGACTATAAACGCTACAAAAGAGGGATTCTAGCATTAGTAACTTTGCCAACAATACT
-CTGATATGATTAAAAAACAAAACAATAACAAAAACAAAAAACCTCATCTTTAAATTTGTC
-CCATTCATCCAGAGAAGCAAAATCAAGGAAACTAGAGGGGGTAAAGTCTTGCAACAGATA
-CACAGCTGCACTGCCAACAGGTCACAAGACCCATGCTGCCTAGGGCATTGACTGTTATGC
-CATGAGGACAGACATCACACAAACACCAGTAATTAAAGGGTTACGGTGCCAAAGGGTTCA
-GAGCTCCACTTCCATTCAGTATCAGAACATAAGAAAAAGGGAAAAACAGAAAATGAGCCC
-aaataaaatataaaataaaatataGATACCAGGAGCTTCCTCAAAATATGTGGGTTGTAT
-TAATAACGTGTTTGGCTCTGTTACGGGCACCATCCATCAGAGGACTGGAAATAGGGAAAG
-TCACCTTAGTCTTCCTCAAGGAAAAAAGATTATTTAACTTGGTTCACGGTGTACATTCAT
-AATTTTAACTGTCATGTATTTATTGAATGAAAAACATTTGAGAACATCATGTGCAACAAA
-AACATGATTTCACAGAAATTGTCCAAACTAAAAGAGTATAAAAATAGAAGCGCTTTTTAT
-ACAAttatttacttattattattattgagatagggtctccatctgtcacccaggccggag
-tgcagtggcgcaatcatagagtagcctctaagtcctgggctcaagcgatcctcctgcctc
-agcctccagagtcgttgggatcacaggctcgagcctccacacccgactaacttttaaaaa
-ctttttgtagagatgaggcctcgctgtgtttcccagcctgatctcgaaatcctggcctca
-atcgatcctccaaccatggcctcccaaagcgctgggattacaggcgcgagccatggtgcc
-cggccGCTTTTACACAATTGAATAACATTAAAATAGGTGGCAGAAGACagacagaaagtc
-gattcgtggttgccaggcgtcgtgaataccggggaacgcggagtgcctattaatgggtaa
-gggtttcgttttggaatcagacagcggcgatggctgcacaactttgtgaattttctaaga
-atcactgaactgtgcaccttaaaggaagaactgtgtggtaattacatcGGCGGTACGCGG
-GCAGCGCGTCAATCAAGCCGGCGACGGTGAATGCAGTTCGGGAGAGCTGATACCCCTCGG
-GGAGGCGGCTCCGGGAGCCTGCGGACGTGGCGGACGCCTGGGACGGGGTGGGCCTGGCCT
-CCGCGCTCGAGGAGTCCCAGTCCTCTCCAGATGGAAGAAAGCCGGGGCGCGAAGCCGCCG
-CCCGCTCTTCTGCCTGGGGACGCGACTCTGCCGCCAGGCTCCCTCGGGTCAGCTCGGCAC
-CCGCCCGAGCCCCCCCAGTTCCAGGCCCTCTCCTCATCAGACGTGCCCTGGGCCCTCAGC
-CTGTTCCTCTCGccgcccggaaccccgcagcagccccgggtccccagcccgcgcccctcc
-ggcgccgcctccgccagctgcccctgccccccgggccgccctcgcaggccgctcccggcg
-ccccggtcggcttccgtacctgccttctccgcgccgccgtcccAGTGGCCGGAGGTGGGG
-CCGTCGCCCTGCGCACTCCGGAGGGCCATgccccggggccccgggcccccACCCGAGCCC
-CGGCTGGTGGCGGAGCCGGGAGAAGACGCGGCTCCGACCGCGGGACGTAGCACCCGCTCG
-GCATCGGCAGGCTCCCCTCCGTCGGCCAgcggcgcgcaggcgcgcaggcgccccgctggc
-cccgccccgcgccggcACGTGACCCTGCGCTACGCCCGGCCGGCGGCGGGGGAGGCTGCG
-GAAAGAGCGCGGTGAGCGCTCTGAGGAGTTGGCTTCGTCTGCGCTGTAGACTCTACGGTG
-TAGAgtgtggcgctcttgagcgagtgtgctcgagaccagctgtcgtttcctttgcttctt
-tcatctgtaaaatagtattgatgataataaaaatattgaactcacaaggttattgagagt
-gtttagaacatcaccaagcatatagtaaatactccacaattatGACCAATTTTTGCTTAC
-CAAGGATTATTTTTTTACCTCCTGTCTCGTCTCCCCACACGAACTCCTGTCATCAGTTCT
-TGGGTACTTGGGGATCTAGCAGGTTCATGTCAtacgggtccgcaggttatgcactgcaca
-aggcctgggagcgccatttacgtagacgttcacgtgaaccgtgcccccttaagttgtgcG
-AAATAGTGGCCACTCATCTAAAGCAGCGctctggcttatcaggtctgatttccttctcgt
-cttcagtgatattcctttctttccaattagacatccattcccttggttatatccctgata
-ttgtgattgtggcctcccgaatttctagtgctaggtcttcatgctgaagttcccataatt
-ccagttgcttgatgactctcttccacctcccacccccaaccacaacagttctttattatc
-ctgagacctccagcccatGAaactcctgacctcgtgatccgcccgcctcagcctctcaaa
-gtgctgggattacaggcgtgagccaccgcgcacagcCAAGTTTTACAGTTCTATTCATAA
-ATCTAGTAAATTATATCAGTTATTTGGTCCCATTAATAAACTAAGCTAATTAAAATCCTT
-TGAACATTTGAAACTGCATTTATAAATTCAATTCGTTTTTCTAAGTATCACAGGTTTCTA
-ACAAAGCCTTTCAAGTCCTTGTGTAATTCTTGTAAATGTAATACATTTATAAGAATACTG
-AGTCATGAGTGCTTTCAAATGTGTCAATACAAACGAGATTTCATCTTAAAATCAAAAGTC
-TAAATCTATTCAAATACATATTTGTAATTAGTACAAGAATAATCTGTTAGAATTCTCAAA
-Attatcttttttttttttttgagacagagtctcactctatcacccagactggagtgcaat
-agcgatcatagctcactgcagcctcaagctcctgggctcaagctagcctcctgttgcagc
-ctcccgagtagctgagactgtaggtacacactaccatgcctggctagtttttttagtttt
-tatagagggggtggggaatctccctatgttgcccaggccggtctcaaactgccttcgcct
-cccaaagctctgggattacaggcgtgaatcacagtgccAAGCTCTTGAAATTATCTTGAA
-CATTATAGGAATTTAAAGTATCACATTTACACAGATGCCTTAATGCAAAATTATTAATAC
-TAGAAGTTTGAAAACATTTCTAGTCTTTGTTCTAAATCATCTGTGAggctcatgcctgta
-atcccagcactttgggaggtgaagggctgcagatcacttgaggtcaggagttcaagacca
-gcctcaccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcatgg
-tggtgcctgcctgtaatcccagctacttgggaggctgaggcaggagaattgcttgaacct
-gggaggcagaggttgcagtgagccaagattgcgccactgcactccagcctaagagacgga
-gtgagactccatctcaaaaaataaataaataaaatgaaataaaTCATCATTGAGGTTAAA
-AGATGCTTAGTGCCCACTGAAGGAAGATTTAAGTCATCCCAGTTTAAGAGTAACGTGCTC
-AAGCAATTTGAGATATTTATTCCCTTCTCAGTTTACTGCGCTGGTCATCCAGCCAGCTGG
-ATTCTTGCTTTTGGTAGTGATGGAACAGTGACCCCCACCCCATTCCCACCACCACAACTC
-TAGGACTAAACAGTTGTGTGGTCGTTGTGAAGCTTGGGCcagaatttactttcaaaaaat
-gtcccgcttcatgtataatataaagaccttacaataaattcccatttcttccctcctgtt
-cttcttgctgttgtcctacattttactttttaaaatcccttccttctcttgctttctccc
-ctctacccaccaaccacttgcaaacaaccactgatctacatcctgtcactatagattggt
-tttcattttctggaattttttatggacggaatcatatagtatgtagtcttttttgtctgg
-cttcttttactcagcgtaattattttataagcaatcatgttgcattaatcaatagttcat
-ttgtttttgttgttaagtagaatttcatcttagaaatataccacgattcattttatcaGT
-ATTTTAAATTTTTGCATGTGCTGCAAGTACACAATTCATTGCTAATATGCTTGCCTTAGA
-CCAGGCGGTTAGCAAAAAAGATGGTCTGCCCAcctgcaagccaaaaccactctactgcct
-gattttgcacggctcatgaactaagaatggcttttaccttgataaatgttgaaaaatcac
-aacttaattgtagcacattaaaactatatggaatttaaatctcagtgtccataaaccttt
-actgaaacagagtcacgctcattcatttacctactgtctatggctgttttcatgctgcaa
-cggtagagttcagtggttgcaacagagatatggcctacaaaacctaaaatatttattatc
-tgctcctttatgtatttatttattttatgtgtgtatgtatgtatgtatttttttgagatg
-gagtttcactcttgttgcccaggctggagtgcaatggcgcaatcgcagctcactgcaacc
-tccgcctcccaggtccacgtgattctcctgcctcagcctcccgagtagctgggattagcc
-cgccaccatgcctggctaatttttttgtatttttagtagagacggggttttgccatgttg
-gtcaggctggtctcaaactcccgacctcaggtgatccgcccgcctcagcctcccaaagtg
-cctgggattacaggcatgagccaccgcacccggccTATCTGCTCCTTTATAGAAAAAGAT
-Tggcaggacgtggtggctcacacctgtaatcccagcactttgggaggccgaggcaggcag
-attacatgaggccaggagttcgagaccagcttggccaaagtggtgaaaccccgtctttac
-taaacatacaaaaattagccaggcatagtggcacaggtctgtaatcccagctactcagga
-ggctgaggcaggagaatcacttgaacccaggaggcggagactgcagtgagccgagatcac
-accattgcactccagcctgggtgacagagtgagactccacataaaaaaaaaaaaaaaaaa
-aaaaaaGTTTTGTGACCCTCTAttgtagagatggaggtattggggctgttgcccaggctg
-gccttcaactcctggcctcaagggatcctcctgcttcagcctcccaaaaatgatgggatt
-tcaagtttgagccccatgcccagctCACTTCAGTTATTTCTAAGGTAATTTAAaaaagat
-tttaattgtacttaccttcattcaatttccagtgctcttaatttcattgtgtagacccag
-gtttttttctggtatcatattccttttgcctgaaaaacttcctttagtatcttgtagaag
-gagcaatgaattccgtttttctttatctgaaacagggtttatttctcctttattttgaaa
-gacactttcatttgggtataggattccggaattttgggtgagcagtttttgtgtgtgtat
-gtgtttttcccctatcagcatcagcaataaggtcactccattggcttctagcttgcatag
-tttctgacgtctccataattcttagcttcctctgtatgcaatgtcttctttttccttgct
-gcctttaagattttcttttgttttagcatttcgagtatatctaattttatatgtgtgtgt
-gtatatatatatatatatatatatatatatatatatatatgagtttattctgcatgttct
-ctgagcttcttggattttgtggtttgctctgtccttaatgttgaaaagttctcagccttt
-aattcttcaaatgtttcttttcctgttctctctcctttcttctgggaatctaactataat
-atgtttgagtgtttgatattgtcccacaactcttggatgttctcttttgacggttttttt
-tcccttcaccctttttccccagtgtttcagtttgaataatttctcttgacctatctttga
-gttcattcattctctccttggctgtgtcaaatccactgacgagctccatgaggcactctt
-catctctgcatctctgttagtgtgtttcttttttttttttttttttgagacagagtctcg
-ctctgtcctccaggcgtgcagtggcgcaatctcggctcactgcaagctctgcctcccggg
-ttcacaccattctcctgcctcagcctcctgagtaggtgggactacaggctcccgccacca
-tgcccggctgattttttgtatttttagtagagacggggtttcaccgcgttagccaggatg
-gtctcaatctcctgacctcgtgatctgcccgcctcggcctcccaaagtgctggaattaca
-ggcgtgagccaccgcacctggccattagtgtgtttcttattttgaccagttccatttggt
-tctcatagcttccatctctctactgagattgcacttttgatcttgcatattgtctacttt
-tactgttagaccttttaccatattagttatttgaaattctgtatcacatagctctgacat
-ctgtgtttggttctgaagattgctttgtctcttgggagtatgtcatttatctcttgcttc
-ataagtgttggtgaaagttggacatcttgtgtaggatagtagaggcccagggaaatgggt
-tttgtgtagaaatgggcacacttttccttctgttaggtctttagcgtgggggtttgaatt
-aacctagttaggagttgTGATAggctgggtgggtggctcatgcctgtattcccagcactt
-tgggaggccaaggcaggaagattgcttgaacacaggagtttgagatcagcctggacaaca
-tagtgaaaccccatctctacaaaaaaaataaaaattatctaggcatttttggtgcatgcc
-tgttgtcctagctactgggaaggcttgccgagtctgtcctgcagactctgcccaagcgac
-ggatgaaaggagtactcagatacagatatccagtgaaagagcaggataggggactgccag
-cactaggggccgaagagaattagcagttcccctaagccggcagccctcgcatttgtttgg
-tacagatttaatgacaaaggcttggagcaaacacaatttgtgggtaataaacattgttga
-ccccccgagtagagagcagtcctgcatgcaaatgattaaaggttggtttctggagacagg
-agtagacaaatttatctagataagtttctttacattcccttgttatctgccctttgctct
-caggctccagatgagacaatttggctgccttcagccataatttccttccaaagcttttgt
-aaaacctcctggcctttcaagaaggtttgtgtctttactataatttctcccaccaccctg
-accaatctcctacatctcccccttttctgttttttgcatcagcttttgttaattgaagag
-tacagatgtgcagcaacaggtttttcaggtgtagtggtcactgcttgtatttcggctttg
-catcctagaattagtaaataacataagataaacgtgaatataatcagtaacattcttttc
-caatcaaggagtgacatgtagtgttacttgccacctcagttcagtgtgtgcccttactaa
-ggaaccccactgggggtatgttaaccccttccagccaagcagttacgttattagaggctg
-ggaagggggtgtccacccaggtaatagggtggaagaaaagcagatttagaagatgggccc
-aatagagtgtagcaggtactggttgcaggcagagtgagggaattaaacaaggttaataaa
-gcatagtaaggaataaattatctggagtgaatggtgtttgtgtccagagcaggattcgtt
-cagcctcctgagttgtcttcttcagcatcccccaggtaatgtctggggcttgtgtcgtct
-gaggaagctgcatcatccagggctgtgggtcctgcagggacatttccttcatttctggta
-ccaggttgggtcctagccacaccatgttaaggtttgatgcgttgtgctggaatccaaaga
-ggacctgaggtgatgtgaacacaaccatatcctcttccccatgttggcaactcatttgga
-ccacaccatacattactgtttacatctttccataaaactgtgggttttatgtcttgagag
-gttttagcaaagtgcttttctatagctgattgaaatttatcatttaaatttaagaaatta
-agggtaaataaggcttttgctagtagtgttgcagggtccttactcatactcccccttttt
-tgttttttgagcatatttttaagagtggacacgttctactatggcctgtccttgggggtt
-atacgggatgcctgtggaatgctggatgttccacgtgtgacaaaattgttgaaattgtga
-gctggcatgagccagaccattatcagttttaatttttgtgggccgccccataaatgcaaa
-agttaagagaagagtttaataacatatcaggtggactttccaggaagagcattgtgctaa
-ttaggtgagaataggtatcaatggatacttgtacatatcttagttttccaaattcaggga
-cgtgagtaacatctgtttgccataactgattaggttctagtcctctagggttaacgcctg
-ttgaaggaggggacatgcctgtgagctggcaatccgggcattgcaggataatttgtttag
-ctagtctttgggtaagttgaaattgttcagttaagttccttcaattttggtggaaaaatt
-gacgcaactgcatggcttggtgaagcagtgacatcataacttgcaggtctgcttgttcat
-tgccataagccagtgggccaggcagtgagctgtgggctcgaatatgtgtgataaaaatag
-gatgtgtacgttgatccagcaattgctgaagttgaagaaaaagtgcacacagggtgagct
-tgagagtggacttaatgagggctgttttaaggttttgcaataaataaacagagtaagcag
-agtcactaatattgataggcagagtggaaaagttctccaggggcaatattaaggctccaa
-cctcagctctctgagtgctagtaaatccagaatgagtgaggaaattatgcagtctccacc
-aaacaggcgcttttctgtttttaccagagccatcagtaaaaagtgttaaagtgttggggt
-atgggggagtgaactacttttgtaggcacaactacaggagtacgagataagaactgaatt
-acgttgtcagcaggaagggcatgctctatatggcctgtgtaatcagagattgctatctga
-agatctagagataggggcaatactgatccaaattgccttttactcaaaggaattcttatg
-acatcataacctagcaactgattgcactatctgcggcctgtatagatgactttactaact
-agctggatataggaagatagtgttttagtctcggtatgtgagcaaaaaacccattctagg
-aagcgtagtcctggggtcatctctcctattaatactgttggggaatgtttagtaggaaaa
-acaaacaattgaactgactatcggggtgtctatgtgatatagttgcctctgagaaatagc
-ttgctctatttcctcaatttccctttttgctgcaggagtcaaatacctgggagagtctag
-ggctgtattgccctttaggatagaaaacagttttgtaacttatcagtagttatgcccaac
-gtggggtgaagtcaattaatattgcccagtaacttttgataatcatttaaggtgtgtaaa
-tcgctagtatttaaccttttgaggtcttactgaccagaagttagtatgtatccaagatat
-ttccaattgtactttttcaggtgctatgattaaacctcttaactgtgtattctttatgac
-agaggcatataaacttaaaagcactggctctgttggggctgctaggaaaatatcatccat
-aaaatgaataatcttgcaactaggaaattcttttctactggggagcaaagcctgatttac
-atgatactgacacatggtaggactgaacagcatcccttgaggaagtactttccaatgaaa
-tcagcgagctggcctctcattactgataactggtattgtaaatgccaatttttctctgtc
-ctgttctacaaggggaatagtataaaagcagtcctttaagtcaataatgactataggcca
-atcttgaggaatcgcctcaaaggggaagggaggtcccgttgaaggggccccataggttgc
-aaattagcattgatagcctgtaagtcatgcaaaagtctccatttgccagaccttttggga
-atgatgaaaatgggcgaattccaagggctgtttgacagttctatatggccagcttttaat
-tgttcttccactaattcatgggctttttgtaatttctctctctttaaaggctactgtttt
-acccaaataggattttgagagagccatgtcaggggtaggggaggaataacagtggccatt
-attagaaaggtttgctgttcacacaatttatcaaattctgccctccagaggaggtactga
-ctggcctttaaagttgttttagctagcactgaccagtcccatggggtgatatggaagttg
-tctgctatggtttcaattattccttttgtaaatgggctagtggctccgtttaatgctttt
-tcttaccactttataagcgtcaaaagaagttgtctgctatggcttcaattattcctttca
-taaatgggctagcagctccattttctttaacgtttttttcttatctctttataagcgtca
-aaagaaatgggttcatatacctgatcgccttgtcgatcttgcattactgggcaggctaag
-agctccccttctgatgccgcttggctaagacagggtcccaaagctgtagtgtatcccttg
-tctttttccaatttattggaggagggggctcaggcaaaacctctgtttcctctttgttat
-ttttgcctgttaatggctgggctgagggagaaggaggagacggtagggtaggtgacggtt
-ccatctcccttacttttttaggcttttctgtgtagagtgggaccaaagcagtcctaacta
-aagcccataacgttaaagatgttactgagacccattgcccttgctcatgatgttaaaatt
-tcttcccagagctctacgtctagtgtaccttcttccgagagccatgggttatgggaaaca
-acagtttgcattaggtcccataattgagcctgtctgaggctctgctaactttcagcattt
-gttttactacttttatatactgttgctgttgagctgacaactgttgtcccatgatgacaa
-ctgtcatcccatgatgatcgtccctagcttgagcaattcctttgaacttggaaatgctga
-acaggcaccaatgacttactgactgcgcagtctcttcaccttcattttcgagggttccgt
-cgtgatctgttgcagcattcctcacacagggaatcacctgccgagtctgtcccacagact
-ttggccgagtgacagatgaaaggagtactcagacacagatattcagtgagagagcaggct
-aggggactgccagcactaggggccgaagagagttagcagtccccttaagctggtggccct
-cacatttatttagcacaaatttaatgacaaaggcttggagcaaacacaatttgtgggcaa
-taaacattgtcaacatcccaagtagacagcagtcctgtgtgtgaatgatcaaaggttggt
-ttctggacacaggaataaacaaatttatctaggtaagttcctatacaactcccctgttat
-ctgccctttgctctcaggcttcagataagaatttggctgccttcagccataatttctttc
-tgaagcttttgcaaaacctctcggccttccaagaaggtttgtgtctttcctataatttct
-cccaccaccctgaccaatctcctacaAaggctgaagcaggaggattgcttgagcccagga
-gtttgaggctgcagtgagctgcgatcacaccactgcacttcagcctgggcaacagagcaa
-gaccttgtctctaaaaagtaaataaaaaaaagagttgggctaggtttgaggtttattgtt
-gctatggttacccccaatgcagcagcttccagttcctccaatgacaccttggactgaggg
-tgcaggctggcctgccagagggattttctccttccatgtgtgctccctgctcagctttag
-gtcctccctttgtgaccctcagaaagggtcttcttcccatactcttgtctctctcctgta
-acatttttacttctaactcaaggcttgtcagcttaccattggcaggtgggggaggaggga
-attctctgttctgatcaagtctcagtctctgtcaggccctttgtgtctctgattttgggg
-ttatgtcctccttagtgctcctgttcctcccccAGTTCTGGGCCCAGTGTGTATTCCTGC
-CCCTGCCCAGGGAAAGTTTTGTTTTGTTCCTGTTTCATTCCCCCAGATGCAAGGGAGCTT
-CATCCAAGGGGGTGACAGGATTTGGTGTCCTTCCCTCCACAGACTAAGGCTTTTGTCCGG
-TAGGGGATACAGGGAAGGGTCTGGGTGGAGCACTGTGATCCTTTCACAGTAGCTGCCATT
-GTCTTCTTCCAGATCTTGAGACATTTTATTAAAACTTTCTCCAATCTTCTGTGTGCTCCC
-AGTGGGGTTCATGGTGAAAAACGCTGAAAAGGGTAAAGACTACTGCAGTCTCCATGACCC
-AGTCCCTCACCAGTGTCCACTTGTGTTTACCAGGTAACCAGTGCCCATGTCATCTCTTCC
-ATTTTGTGCCTGTCTCTCCTTAGATTTGAAGCCAGTTGATTGTCTTCTGATCTCAGCTCT
-CCAGAAGACCTTTTCCAGAAGACCTCTCCCTGTGTATCCACTTCTAAACCAGTCACAACT
-GCCCGAGTCTCACAGCAGCATGGTGGATATCCCGCTGTCCCTCAAACTGGGGCTCTGTCA
-ACAAAGAGGAAGGGAGGAATGACTCCCTTGGGAGGAGACAACAACATTGCAAGTGATCTa
-gtctttgaaaggcttttaagcaagggactgagataaaatttatttattatttttaagaga
-gaggttctcactctgtcagccaggtctcactgagagcaatgtgatcatagctcactgcag
-cctccaactcctgggctcaacgtatcctcccacccagcctccccagtagctagcactata
-gtcacacaccaccacactagttaatgttttcattttttgtagaacagaggactcgctgtg
-ttacccaggcctcaagtgatcatcgggccttggcctcccaaaatgctggggttatagata
-tgagtcactgtgcctggactagaatatttatttttgaaagatctttggttgcaggtgtca
-gatgaatcaggaattgagacgagatgggaaggcatcaagaccagttatctgctatgatac
-tccaagcaagagaggatggtggctgggatgaggaatttggcaacgggaatgggaggaagt
-ggatgcattcaagataaatATCCATTTATTAAAAGTAGTTGCTTTTTCACCAGAGTAATA
-CATAAATATAGTTTTAAAAGTAAATACTGCTACTATCTTAACAATAATTTAAAAAatctc
-aaaataacatgcaactgtttgatttttcagttttaggcattagttccccttataaatgat
-gagagtttagagcttagaccgcttgtcctgttaccaacaccaccacacatgccagcattt
-cccatcactcctctttccattgtcatcatactgtaatcctggttagaccagtattcagtg
-tttccattatgactacgtaaattctaatcacagctgaaccagcagtatgatatttagttt
-tccctcctttcataacttttcccattcctgctgagttaatacttttttggcttgtcttac
-tctgctcagttttcATTTTGTAAActtttaaacatttgaactctagcaaatatactgaga
-agtgccccaaacgtaaatggagagtttaacaaataattatagagcaaatacaacatttag
-gtaccaccccaataaacacaacaccgaggacccccagaagcaccctgtgtATAGTGGAAT
-GTTGTGTTGTTTCTGGCCATGGAGTCTCAAAGACTGATTCTCAATTTTTGTTGCTTGAAA
-ACAAGTAAACAAGTATTCTCagccgggcacggtggctcacgcctataatctcagcacttt
-tggaggccgaggcaggcagattacttgatgtcaggagttccagaccagcctggccaacat
-ggtgaaaccctgttgttttgtaaaaatacaaaaactatctgggtgtggtggcatgtgcct
-ataatcccaactacttgggaggctgaggcaggagaatcgcttgaacctgggaggtggagg
-ttgcagtgggctgagatcatgccaccgcactccagcctgggtgacagagttaagactctg
-actcaaaaaaaaaaaaaaaaaGTTGGTGTAATCCTTTCCACACACACATATATATATACA
-TAGATGTTATATGTGGTTGCCTTCTGTTCCTACTGATATATATGAATAGTATGGCTGATT
-GCATTATTGGTTTGTTTCTTCATTCCCCTGTAATAAGACTAAACatacacaccctttgcc
-atataacctcataaagttttcccaacacaggctctatgcttccctactgcactgatgttg
-ggcttggctatgtgatttgctttcgccaatgggatgatggtgcttgtgacacagcagagg
-cttgaaatgtgcttgtgtgattccatttggtctcttCTAAGTTTCTGTGATTCATGAGAA
-GAGCACGCCCTGAGTAGCTGCTGCAACTTCTGCCACATTGGGCAAACCTGAATCCAATTC
-ACATGGAGGTGTCCAGCCCAGCCGACCCACAACCTGAAAAACAGCTGCTTGGGCTGAACT
-TGATCTAGATCAGCTGAACTACATACAGTTGCCTTAGAAATTTGTGAGACTAAGACTAGA
-CAGAGAACAAAAGCAAAAGAAAGAAAAAATTTGTCTGCAATGACTGGCTAGGAACCTGGA
-CAGATTCCTGGCAACATAGCTGTGCAAAAGCAGCCCCACAAGCAAAATTGAGCCAGGAGA
-CAGGGTTCTGATCCCAGGCATGGGCCTTGGCAGCTGAAACTTGTTAGGCTGGGCCTCTCC
-CTCGCCAGTTCAGGCAGCCCCTCCTCTGAGGCCTCATGGACCATTCTCTCTTCTCCAAGA
-CTTCAAGATTCCTTCCTAGTGAGtttttcttttttacttttagatggagtctggctctgt
-cacccaggctggagtacactgacgtgatctcagctcactgtaaccgccacctcccaggct
-caagcaattctcctgcctcagcctcccaagtagctgggactgcaggcacacgtcaccaag
-cccagctaatttttgtattttttagtagaaacagggtgtcaccatgttgttcagtctggt
-ttcaaactcctgacctcaggtgatccactcgccttggtctcccaaagtgttggattacag
-gcgtgagccaccatgcccggcACCTAGTGAGtttttctgttacttttttttttggaggcg
-gggtctccctatgttgcacaggctggagtgcagtggtgaaatcatggctcactgcagcct
-caacctcctgggctcaattgattcctccatctcagcctcccaagtagctgggactacagg
-catgcaccaccatgcccagctaatctgtgtattttttgtagagagggtttcatcatgttt
-cccagaccggccttgaattcctgagctcaagtgagtcgcccgcctccacctctcaaagtg
-ctgagattacaggtgtgagccactgcacccagccTGTTAAATCTTTTTTTCAATTAATAA
-CAACttcttttacagacagggtctcactctgttgctcagtctggggtgcagtggcactat
-catagctcactgcagccttgaacccctgggctcaagtgatcctcctgcctcagcctccag
-agtagctagcactacaggcatgtgccaccacatccagctaatttttaattttggtagaga
-cagggtctccctatgttgcccaggctggtctccaactcgtggcctcaagcaatcctcctg
-cctcagcctcccaaagagctgagattacaggcatgagccaccacgcccagctTCTGTGAC
-TTTAAAAAAATCtttttagacagggtcttgctctgtcacttgggcttgagtactgtggca
-caatcacacctcactgcagccttgacttcttgggctcaggcaattaattctcgtcctttg
-gcctccccagtagctaggacacaggcgcacaccaccacactcagctaatctattttttgt
-agaggtgggttttcgccatgttgtccaggctggtctgggactcccggctcccaaagtgtt
-ccAACCACAGGTGTGTGGGCCTTCCGTGGTATCTTAACCTCATCACCCAGAGGCAACAAC
-AGCTAGTATTCTTCTAGTTTTTACCACCCCCACCACCTCAATCCTGCCCCTGTAGCCTTT
-CCAAGTGCCACAGCATTGTTTCAGTTTCTATCTTAGAAAGCCCGGGAGTCTGTGTCCTAT
-CTCCCTGGGGGCATTCAAACCCTAGTCCATAGCCTGAGGCCCACCTATACCCAGACCCAG
-TGTCTTGGAAGCACTGACTTTAATACCCACTTAggctgggcgcagtggctcacgcctgta
-atcccaccactttgggaggcttgggcgggcggatcacctgaggtcgggagttcgagacca
-gcctgaccaacatggagaaaccccgtctctactaaaaatacaaaattagctgggcgtggt
-ggtgcatgtaatcccaTGCCTGTCTCAaaaacaaaacaaacaaacaaaacaaaacaaaac
-aaaaAAACCCCAGTTACATTCAGGATGAATTCTGCCTTCCTTTTTGCCACCTTGGGATTT
-CCATTTCTTTCTCTGAAATAGGCATTTGCATTTTTCCTAGGATTTTTTTTTTAAAACAGT
-TGGAATTATCCCATATACACAATTTTTTCACTTTTCTAATTAACATACATTTCCCCATGG
-Gcttgtgtctcacctctcaatccccagtgtatagcaaagaccaggctcaggggcacttac
-aaatgtttgttgaaACCAAAGACATCCTATATTACAGAAATGAACTTTGGAAAGACCAGT
-CAGCGTGGGTGGGTGAGGAATGCCAGAGACGGGAGAACAAAATGAGGTATACCGTCAGGT
-TTGAAGGGTTGAGGGTTATGGAGGGTTCTTCATAGGAAGTTCACCATGGAGTTCTTGGAA
-CTGTTCAACACACAGAAGCAAGGTCCTCTCCTTCTAGGTATGGCTAGAAATGTTTATCAA
-TAGCTGAGACTCTGATTCCCAGGGTGGGATCAGGAAGCCAGCCCCAGCTGCTGCAGCATT
-TTTTTCCCTTTTTCTCATTACAGGAGCCAAGAAAACTGTCAAAGCAGATGATGCAAGAGT
-GAAGCTGACTCAGAAATACTCAATCCCCCCAGGAACTTCTCTAAGAAATGGACTGACCAT
-CCTGTAAGCTTCCATCTGGAGGTACCTGGGGAAGGGCTTCTCACATTGAGGCCAATAAGA
-ATCCCTAGTGggccaggtgtggtggctcatgcctctaatctcagcactttgggaggccaa
-ggcgggtagactgttgagctcaggagttcaagaccagcctgggcaacacggcaaaacttc
-atctctaccaaaaaaaaaaaaaaaaaaattagccaagcatgatggctcgtgcctgtagtc
-cctggaaggctgagttgggaggatcacctgagcctgggaggttgaggctgcagtgagctg
-tgatggcgctactgcactctagcctgggtaacagagcaagacccgtatcaaaaaacaaaa
-caaacaaaaaaCTTCTAGTGAGTAGAGCGACAGGGAGACAAATCCAGTTTGTAATTTGCT
-ACAGTGCAAAATATCTGGCTTTCCATAGAGGGAGTGGGAACAAGGCAATGCTGGCCTTCA
-TTCAATCAGAAACTTGACTTGTACCCGTTGAAAACCTGTCATGTTTAATGCTTGGATATT
-TTTTCTTCTAGTAaagacactttactgccacctgctggaaaagagtcagaaattttccaa
-atgcaaacatctatggcctccctataatgtagcatccttttactgtacatagtctgcaca
-actgtacaATTTAGAAGAGAAACCAACATTTGGTGTAACTCTACCATATACCAGGCATCT
-GTCATAGAATCTGAACAACCGCTCTATGAAATCAGTACTTATACCCCAATTTAACAGATA
-GGAAATATTGGGacctctggggaagggaggaagaagagggtatcaccaaaaaagggcaaa
-aagggggcttggtctgtattggcaatggaaattcaacttgggtggtaggattatggatgt
-gttacagctttctttataattTGGTACATGCCTAAAATGTTTTACAATAACAATTTAAAT
-CACCTGTGAAGAAAAGATTCAGAGAGGTTAACTGATCAAAAAAATCACACTGCCAGACAG
-AACTCTGTTAGAGGTAGACCACTTGCAGTAACATTACATTGCTTCTCTAATGGTTAAATT
-TAGCACAGAATCAAAGGAGAGCTATAAAGTCTAGGAAGTACTTATTTACATAGGATTGAG
-TCCAGAACATCTTGTGACACCATCTACATATGTTTTACTTGGAGAATAGTCTGAATTTCG
-TATTAcacgttgagcatttctaatttgaaaatacaaaatcctcaaaaatctgaaattttt
-taagcatcaacatgatgcctaaagtaaatgctatttggaatatttcaaatttcagattag
-gaatattgaactggtatgtattccgcaaatattccaaaaatccaaaaaaattcaaaacac
-ttctggtcccaaccattttggataggggatattcaacctATATTACACACAGGTAATACA
-GCAGGGGAAAAGCAGGGAGACTGCAGCATCTAAGTCTACTAAATTGGCCAGGATCATTCC
-TTAGTCTTCAGATACCTATTTATCAGGGTCTCATTAAATAAAGTTACTTGTCATGTTAGT
-TCAGTCTGGCCTGTGGCTTGTAATTATAGCTGCAAACTCAAGGGCAAAGTTCTTAGGATT
-TTGAGATGCTCTTTATGCAACAATACTTCCATTTACTTtgtgtgtgtgtgtgtgtgtgtg
-tgggtgggtgggtgtgtgtgtgtAGGGAGAGAAAGGGGGCAATGGAGTGGAGagtggaac
-tacaatttattaagcacctattattacaagccaagtagggtgttaaatattttcctcgtg
-ccattccattcaatactcTTCGATCCTGAGGGAAAACGAACCCACTTAAAAAAAAAAACA
-AAAGGTTTTAATGAGGATTGCATAAGACATGCAAGGTCACCAGGGAGTTTACATGCAAGT
-GGGGAGATACAAAATAATACAACAAAAGTTCAGGTGTTCTGAGGAAAAAGAAGGGCAAGG
-GTAAGTGATGACAGTGGGGGAAGTCGGATTCAGGATAAACCAATTTTAGACTCATTTTTT
-GAGGAAGGAACTGAGCATGACCTTACCACACAGCCTTTTTAGTTAAGTGTTTCTTTAACT
-AGGAAAAGGCCCTGGGAAGACAGGCTCTCTACTATGCAAACCCAATTCCAGTCTTGGGAG
-AGAATTTGCTGGTGGGACAAAATCAGGTTTTTCAAGAGATGCTTAAATGGTCAATTCTAA
-TTATAACCATACTTGTCAAAAGGTGAAGCAAAGATGAAAGTTAAAAACTAAGAAGAAATT
-AAAATTCCCAAATCTGTCAACCAATCTCTAATTTTCTCTGCTACTTTAGGACTATAGTAA
-TTAGCCATACCCTGAGGATCTACTTTACAAGATATATTCCTCTGACAGTCCCACTCTAAC
-AATTTAATCTATCTTATGTAAGCTGGACAGGCATTTCAAGTACAAGAAACAGAATTCAAA
-ACGTGAAAACGGAGCCATCTATCACACACGGTGTCGGTTGGAGAAGCATATTGCTCAGGC
-TGCAGGGACATTTCatttatttaaatgtttttattaaaaaaaattaaaGACCTTCATGGC
-ACAACTTCTTCCCAGCACAGTTATGGTTTAGTCATACCAATTACAATACAATTACAACCA
-ATAAAGCAAGGTGGGGAGGGCCTTCTGGCTTCAAACTTAAAAAAAAGCAGAGGAAGAGGG
-GAGGGACCACTTCAAACAAAGTTTAAAAATACTTTAAAAAATCTTTCAGAGTAATTGCCA
-ACATAACCTTTCATGTTGGCCATTCCATTTCCTGCCATCTAAGCAATGCAGACACAGGTA
-GTGCTGAGAAATAGTGTCCCAATACAAGGTATACAGATGAGGTAATTTACAACAACACGT
-AAGTTGTTACTCTGTAAACCCTTGCCTCCCCCCCACCCCCCACCCAATTGGGTCTTTTTT
-TTTTTTCTCTCTCTCCATGCTTCTGCAGTGACTCTTAAGTAGCATTTTTAAAAACTTCTA
-TTTATTTTAAAAGGCTCTTGGGTGGCACCTCAGAGTCCTCTGCATTCACCTTCGGTTTAT
-TCCAAGGTCTGATGGGTGTAAGGAGGTCCAGCTGTCTGCAGCTCTCCGCATCAGCCTAAG
-CTACACCTCAATTTCCGAGCTACAAGGATAGGGTATGAAGTCTTGATTTACAACCCTCTC
-CCCACCTCAAAAGAAAGAACTCATTAGTTATAAGTGTCCTGTTCAAATCACAATCCAGTG
-CAAACATAATCACAAATTGCATCTCTGGCACATCTGGTGCTTTTAGCTTCTGCACAAATT
-CAACATGGTAACCCTCACAGCATTCTAGGGCATAAAAGGGTCAAGTACAATAAATATCCA
-CTGTAAGTGGTCATAAGGAAGAAAATCACCCTGCCACACAGTCAGAATGTTTTCCCTTCA
-GCTCTCCCTACCGTTGAGAAGCGCTATAAAAGGAGGCTTTAGCGTCCTCTAAAGTTTACC
-ATTATATTCACTAAAGCCACCACCTTGATAAAGTTACTAAAGCCAAGATGGGTTACAAAG
-TTAGATAAGTTCATTAAATTCAACTCCCCAAACAATTACGTTTATCTATGATGCCTAGGC
-GAGAAAGGCCTGTGAATCTATAAGGTAGGAGAATGGGGAACTAAGATTTTAGGCCTTAAA
-ATATGTTGGAAGAATTTTTCCTAGTTCCCACAAGCAGCTACTGTAATGAAATAACAGGAG
-AAAATACAGAGCTGATGGTTTTGCTATTGTGCTTAAAAAACTAGGCTTCCTCAGTGAAGC
-ACCTGATAAACTTAGGTGGTTGGATTACAGTGGAAAGTCCACTTTACACACACACACAAA
-CACACAAAAACTGGCGACTTTTTCCATCCCCAATCCCTGCACTGCTGAGACACAAAATGA
-GTTTTATGGCAAAGGATCCTTAATCCCCAGAGACGCTTTGGCTTGTGGTGCTTTTTTTTT
-AAGGCCTCTCTGCTCTGCCCGGTACCATGGGTCGAACGAGGGGTGTATAAAATGGGGGCC
-TTGGGAAGCCTCCACGGTACAGGGCTGCAGGCCCCTCAGATGTGAACATGAGACACCCAC
-CCAGCAAGACCTTTACACAGGGAACTTAAATCTAACCTTGATAAATAAAACCAAACGTTT
-ATTTACACCAAAGAATTCCAACACTGGATCTTTCACATATGAAGGACAAAGTATTATATA
-TATACACACAGCAAGGGGTGGCGGGGCTGTAACAAGAGAGTTTATAGTTTTCCCACAATT
-ACAGGTCTACCATTTCAGCTTCAATGGAGATAGTGGCTCTGCTCCTACCTCTCAAGATAC
-ATTTACAAGACTGAGGAGCAGGTCTTCTCACTGGATGGCATGTGAGGGAAGGGGACGGTC
-GGAGGAAAAGAAGGTAGAAAGCTTAAAATGGAAGTCAGTGTGGCCACATCTCCCATTAGC
-TCTAGCATGAAACCTGTACAGACAATGTTTGTTTCTTTTGTAAAAAGCAGTAAGTTATGC
-CCAGTAACTAAATGAATTCAAAATGGCCAAGACAAAGAAAACTAAGAAAGATTTTGCCTT
-CCCTCTCCTACCAGCTATGGAGCACAGCATGTTGGGAGATGAACAGGGAAAAGACCAAGG
-TAAGGAGCCTGGGAGGGAAGGTATCAACATTTTAAACTGAACTAAAAATAAAAGTATAAA
-TGAGTTGGATTTAGGGTTAGATCAGTAAGACATGATTCTTACTGAACAGAAGTTTTTAGT
-ATCTGTCTGCATTTTGGGTAGATTTTCAACATCTTGATGTAACTAAGACACACTTCCACA
-AGAGCCACTAGGATAACCCCACTGAAGCGCTTATGGAGTAAAGTGATGTAAGCGACCAGC
-AAGCAGTCCACTGCTCCTATAGATTGGGtcctcccttccttctttccttccttcctttct
-tcctgcctcccCTGAGAAGCTACATTTTTGTAATCTCTGGAGAAGAGCACGAGATACCAA
-CCCCCTAAAGTGTGGGACGGTGGAGGAACAATGGTGGGAATGGGAAGAAGTCTCCACCTA
-AATGCAGCAGCCGGGATTGAGGCTGGTTTATCTTTGTTCTTTTGTGATGAGGAACTAAAT
-TTGGGAGGGGAGAAAAAAAAATTTGTCCATGAAATATTCCACCTGCAGGTAATTTTTCAG
-GGAATCCCCTGAGTTATGAAAAGTTCGAGTTAAAAAAAAAAAGAAAAAAGAAAATCAGCC
-TATTATAATTTTTTTTTTATGACTGAACTACTATAAATCCACAAGCAACGGTTCAGACAC
-GGTGCTTCTGAAGTGTTTCACCCCTCCCCGCCAGGCGCAAGCTGCATCAAGGAGAGGGTG
-GACTCCCCCACCTCTGCTCAGGCATCAGGAGACAGATAGGGCCGTTACTGCTGAGCGCCA
-GCGGCAGCTGGAACAGGCATCCCAAGGGGGTTGGCAGCAGCAATCACTGGTGAGCCTGCC
-AGAGGTCCAAGGGGTGAAGGGGTTGGCACTGAAGAAATCCCTGAAAGAAAAGAGCTGTCA
-GTGAGCCAAAGACACCAACCATGGCAATCTTACCAGTTTCTCATAGCACTCACTGCAAAA
-GGAACACAATAATTCTTTACTGAAGACTTCCTCTTAGCTGGATTtttacatatacttcaa
-gtctgaccctcacaaattcaagttaaagtggcaagtcctaatcaatttaagagacaggta
-aagaaatctaggcttggacaatttaaggagtttgtccaaagtacacgattaagcaagtgg
-caaccatggttggattctaacccaggcctgtctagGGCAGAGATGTCCACCCTGGTGACc
-agtagccaaccacatgtggctgctgagcacttgaaatatggctagtgcaactgaggaact
-acattttaaattttattcaattgtaattaaatagcctcacgtggctagtcactaccatac
-tgaacagcacaTGACTGCAGTCAAAGCTCATGTGCTCTTACACCATGCTGTCTTGATAGC
-TGGCAGCTTTCAAAATTACTGAAAGTCAATTTGAATGGGGAAAGAGCATTTTCTAAGATA
-AAATTGTGTTTTGGAATTTATTTCCATTTGATTTCTTCCACCTCTCTAATCATGTTTTtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtACACACAGGTAATACATTCACATGGTTCAAA
-ATACAAAAGGTTCAAAAAAGTATACAAAggccaggtgcagtgtctcacgcctgtaatgcc
-agcactttgggaggccaagttgggcggatcacctgaggtcaggagttcaagaccagcctg
-gccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcgtcatggcg
-ggcgcctgtagtcccagctacctgggaggttgaggtgggagaatcgcttgaacccgggag
-gcggaggctgcagcagctgagattgtgccactgcactccagccttggccacagagcaaga
-ccttgtctccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatatata
-tatatatatatatatatatatGAGAACATTATTATACATTCTTCTCCACTCCTCTTAGAC
-ATGGCTCTGCATCTCACtttttcttttgagacagagtctcactctcacccaggctggagg
-gcaacggtgcgatctcggctcactgcaacctctgcctcccaagttcaagcgattatcttg
-ccttagcctccaagtagctgggattaaaggcgccgccgccacgcccagctaattttttgt
-atttccagtagagacagggtttcgccatgctggccaggctggtctcgaactcctgacctc
-aagtgacccacccgcctcagcctcccaaagtgctgggattacaggcatgagccactgcac
-ctggccctgcatcttgcgttttaaatttcacattattatattggagttggagatctaaca
-gaacatgaaactcttattctactggctgcaccacattccattaaatggatataccataac
-tgatttaaccagtttcctactgatagctattctcaatgttttgttattacaaataaggct
-acaagtaagtttggatatacattactctgtacagaggtaggatactcaaggggtaaattc
-tagaagGCAGTTAGTTCTTTTCTTAAAAAAGAGGAGGGCAACAGCAATTATTTGAGGATA
-TGTAAGTAAATGCCTTCACTACCAGATATGCACCCACTTGGATGTTGCCTATATGTATAA
-TTCTTATGCTATGTGCCTGTAGTTCCTTTGGAATAACTGGGTACTCTATAAAAATTCACT
-GTGCGTCACAATGATCCAATAATGGAAAACCATTTTACTTATGTTTTTACAACTGATAGG
-CACTCTATAGTTGCTCTGGCACATGTCACGGAACTGTCCTTGTACACATACACACCTATG
-TATAAACCCCACCTCTATACCCCATTTCTTAACATTGTTTCTAAGGGCCATGTAACTACT
-GTCATTTCAAACTATAAGATGAAATGGTGTATTTTTCCTTTTCATGGCTTGGCACTTTCA
-AGCCCCTATGCCAAAAATTTTCAGCCAGGAATGCTGAGATTCTAGCCTAGAAGGGGATAC
-CCTACTCAAGACAGTATCACTAAAGTATACCAAATGTCAAGCATGCTGAAACCTGGTTAA
-AAAAAAGTCACAAGGCCACCAGTACGGAGAAGAGAAGGTATACAAGAAATCAGACCACAA
-AGCTAAGAACAGTAATTGACTTCCACATTTTTTTAAAGAAAATTTACCAATGAACTGACC
-TGACATCATATTGGCGCTGCTGACGGGCGTACTGCCCCCTGGCATGCTAGATGAACCCAT
-TCGAGCCTGGTCCTTCACAACAGTGTCTAGAAAAGAGACAAAAAGGCTAGGTTCTGTTTT
-GCTTGAAAGATTAAACTAATGGTCTGGAAGCCTGAAAGCAGCCAGCTTCATTCTTTGCAA
-TTTATATATACTCTACATTATTCCCCAAAGAACTTAAGGTGGCAATTGCCTTCACCATGA
-ATTAGACAAGTGGTAAAAAGCAGAAATAGCTTTCCTATCAAACTGTGGTAAAAGCTAACC
-TTTCAATCAAATGGTAGAAAGATGAGGTAATTATTTATAGCAGAGCGAATTTAATGAAGC
-CCTGGTCCTGTTGAGGTTTAATGGAGACAAGACACTGTAACTCGGCAAAGACGGTAATAT
-ATTACCAGTGTGTCCACAGCCCAGTACCAAGTAGGCCAAAGCTATAGGTCCATGTAGCTT
-AGGGCTATGACCACATTCTCTATCCCAATCAGCCTATCTATCTGCTTCAGGTATTGGGCA
-AAAGTATAAATGATTCAGTACAAAACCATCACACCGAAGGAAAAATGTCATGTTGCAGCT
-AACATCACAGTGCAGATGGGGTGGGTCTCAGTGGTATTTTCACTTAGGATGGCACAGGTG
-GCTATACTCACAAATCTAAGTCAAGGTGTTCATACAATTTTAAGATTTGTAAGCCTCATT
-AGCTCTTTCCAACGAATGATTACTAGGGACAGGAAAGATACAGGGCTGTGTATTCTAATT
-CAACCATTCCAGACTGAGGCACTGAGAAGTGTCATCCTCACAGTATGAAAAGAGTTTATT
-TAGGAATGCTCTTGTGTCATGTATTCTGTTACAGAAGaattcttccagtaattctgcaat
-gtagttgccatcactatccccactggaagaatctgaggctcagtgtgggtgaattaactt
-TGCAGCAAGCTGACAGGAGCTGGGATTACGACTCTGTTCTATAGGACTCTGCGCCTGCAC
-AAACTCTGTGGGCTAGATATCTGGACTCACAGAAATAGGGGTGCTCCATTGCCTCTCTTG
-CAGTAAGCCGTGACTGGTGGTCATATCGCAGCAGTTTGTCCAGGAAATCCAAGGCCTCAG
-GGCTGACAAGGTGCTGATTTTCACTGTGGACAAAGCGTTCCCATCGCTTTCGAGAGTGTC
-TGCAGGACCAAAAGAGGGCATGAGAAATGGGCCACGTGGGCACAGAAGCCCAACATTTCA
-TTCCTACATTTTTCTTAGTGGCTAACAGCCCAGACAAAAGCAAAGAGGGATCCAAACTCA
-AGAGGGTAGTCTTGCACCGCTCTGCCACTGAGTGGGACAACAAAGCTAACTGGAGACTGG
-AAACAACATAGCTAGAGTGAAAAAAGACATCTGAGTCCTCTCAATTTTAAGAAACATAAT
-TCAGGTTACTTGACAGGACGTGACCGCTTCTGTGTAGCAAGGAGGGTCAGGTGGCTGAGC
-TCACCAGGCCTATTTCCCATCCCCACACATATTCCTGGCATCTCTGCCAATTGGCCAGCA
-AAAGCCTTTGCATCAGGAAAGTCCATCTCCTCCTGTTGAGTGGTTAAGTGTATAAGTACT
-ATATCTAGTCACTACTGTTAAGAGTCGGTTGTCTGCATATAGCCtttttttttttttttt
-tggagacagggtctcactctgttgcccagactggagcgcagccacatgttcattgctctc
-tgtagcattccctcctgggctcaagggaagctcctgcctcagcttcctagtagtctggac
-tactgccacacatcaccatgcatggagtcgagggtctcattatgttgtccaggctggtct
-ccaactcctgggctcaagtgatcctcctaaagttctgggattacagatatgagccaccgt
-gcccagccTGCACATCAGTCTTAAAGCATGCATTTTCTACTTCAATTTCTTTCTCTTGGA
-GAGAGGTTTTTCACTTAAAGAAGCAAGGTAAATTTTGATTTTTGCCTCAACTGTAACCCT
-TCTACTAGAATCTACATTCATTTTGTAGGAATCCTCTAGCTATAACCCCTCCATCAGACT
-CCTGTAAGTTAATTTGAATAAAGGGCCATTCAATCCAATGCCTTTATCAGAGGCCTGCTC
-AATGCAGCATCCTGTGGCACTGGACCACTGACATCCTGACAGTGCTGGCAAAGAAAACAT
-AACTATTTTGAAGATCCTAAGTGCCAGTTCACTCTCAAAGTGCTTAAGCCACAGATGCAC
-ATATTTTGTTTCATGACTTACCTGCCCAAGATATCATTGAAACGTGGATCTAATTCAATG
-TTGTATTTGTCAATATAGTCATATAAATCTTCTGTCCCCAGAACCTTGGCTATCCTCACC
-AACTAGTATTAAAGAAAGACAAAAACCCATATCACAAGCATATTATATTAACAAATCAAC
-AATTAACAATGATTGAATTTACATAAACGGGTCATCATGTCTACAGGTATGAATGCTACC
-TCCTAACAGTTTAGACTTCAACTCAATGTGATAGTGTTAGAAAAAGCAAACTACTTTATA
-AACTGGTTTCTTCCTCTTGAAATGtcaccctggtgaacccttatttttctcccctcaaaa
-cccaattgaagatgtcacttcttttgggaagctcccattgcacactcaaactactcacca
-ctactgccttttgtgccttgtccacatttctactctgaagttatgactgtaacctatttt
-gttgtatgtttgactcccttacaagatcagctatgaactatctgaggggaagaaaactat
-tctttcttttttctgtattcctcagtactgcatgcacttgatacagagTTATTGACTTTA
-ATGGAATTCAGGTTGTATTCTTTGACTCATTAAAATTGGACATGGTGCTCAAAGGGAACA
-AGACAATGGTACCTTCCACAAGGTCCTAGAATCATTCCAGGTTCTTGTGAATGAAAGAGC
-CCTTTGATCTTCAAGGGGGAAGTGGAGTTAGTTTAAGAAACATCTGTAACTCAACCCATA
-TAAAGAGCCAAAAGGATCACAGAAATACCACATATGGGCTCACATATTGGAGAAAACACC
-ATATTGGAGATAAGGGTTTATTAGGAGAATTCTAAGGTAATGTCCTATTTTAAAAATCTG
-GATGACAATTTATATGTATTCTTCACAATAAAATAAGCAATGCAAATGACAAAGACTAGG
-GGGGAATGTCTGATTTCAAAAGGCTAAGCTGGTAGCTCCCGAAACATCAATCTAAGGATC
-AATATCGGGGTGGCTGAATAAACAGTGAACTGAAAGTTACAGGCAGTGCTGGCTATCATT
-GCATTAGGCCAGTACATTTTTCAATGGGTATAACATATATTACCTGATCATAATTGTCAT
-GTCCATGGAAAAATGGCTCCTTCCGAAAGATCATACTTGCCAGCATACAACCCAAACTCC
-ACATATCCAAACTATAATCGTACATCTGCATAAAAGTAAACTCACTGTTATTATCTGTGA
-ATCCTCAGGCTTGTCACTTCaaaataaaaaattaatttttaaaattaaaaaaaaatCACT
-CCACTGACTCAAAATCAAAACACTAATAACATCTTCATATAtttctttttagtctttctt
-ttttttttttttggagacagagtctcactctgctgcccatgctggagtgcagtggcgcaa
-tcttggctcaccacaacctccgcctcccgggttcaagcaattctcctgcctcagcctcct
-gactagctgggactacaggcgcgtgccaccatgcctggctaattttgtatttttagtaga
-gacggggtttcactacgttggccagtggtctcaaactcctgacctcatgatctgctcgcc
-tcaggttcccaaagtgctaggattacaggcatgacccaccgtgcctggctAGttttttct
-tttttttttttttttagttttttttttagttttttcttttATGCATCTTTCACTCGGTTT
-TAAAACAAtttttactttttttttttttttttgagacagagtcttgctctgtcgcccagg
-ctgcaggggtgtgatcttggctcattgcaactcagcttcccaggttcaagcaattctctg
-cctcagcctcctgagtagctgggattacaagcgcccaccaccgcgcctggctaatttttt
-tgtatttttagtagagacagggtttcaccatcttggccaggctggtcttgagctcctgac
-cttgtgatccacttgccttggcctttccaagtgctgggattataggcgtgagccactgtg
-cctggctCttttttttttttttttaaagacacagggtcttgctctgttgcccaggctgga
-gtgtagtggcgtgatcatagctcactgcagcctccaactcctgggcttaggcctcctgag
-taggtaggattacaggcatacaccactatgctcagctaatATACATACTATTTTGAATTG
-TTTTCTTCACTTACATGAAAAAAAAAAAAAAAAAACCTCCAAATTGTTAGCCCATGGAGA
-CCATCTAATGTGTATCATTAGTATTTTATTACATAAATGTTTCAGAATTCAATCTTTAAT
-TTTCCTATAATAGGACAGTGTTCTGTTTTTCACAATTATTAGTAATACTGTAAAAACTAT
-TTTTATGCATAAAATGCTTTTTGAACTCAGGGCTATAGCCTTAAGACCCCAAGAAAGAAA
-TTCCTACAAGAACAAAAAGTCTGAAACTTTTAAAATCAACTGATAATAACCTGGAAAGAC
-TGGGCATAAAAGATACTCCCAAGAAAACTTCAGATTTTTAAACACTTGGCAAATCTATTA
-TTAATTTGGTTCCTTTCTCCTTTTTCTGTGAGGAGAAAGAAGGCTTTTTGGGGGAGCTGG
-GGAGAAGACCTTTTTATTTAGTATACAATTCAGAAGAACAAGAAAACATTCTTGAATTTA
-CTCTGAAGATTGGTTAAACTTAGTTACAGGATgggcatggtggctcatgcctgtaatctc
-agcactttggggagccaaggtgtgaggatgggttgtgcccaggagtttgagatcagcctg
-ggcaacatagtgagactttctctctacacacaaaaaaattaaaaattagctgggtgtggt
-agtgcacgcctgtagtcccagctactcaggaggctaagctggaaggatcacttgagccca
-gaagttcggggctgcagtcagctatgatcatggcattgcactccagcctgggcaacagag
-caaaaccctgcctcagaaaacaaacaaaaggccgggcgtggtggctcacgagggcaggag
-atcgagaccatcctggctaacacagtgaaacccagtctctactaaaaatacaagaaaaat
-tagctggggtggtggtgggtgcctgtagtcccagctacttgggaggctgaggcaggagaa
-aggtgtgaacctgggaggcggagcttgcagtgagccgagatcatgccactgcactgcagc
-ctgggcgacagagtgagactccgtctcaaaacaaaaacaaaaacaaaaacaaaaCAGCTT
-ACAATTCAAAACAGTTCTGGAACTGCTGATTATAGAACATATCTTTGGCTACTTTCCCTC
-AAGTCAGGATCAAATGCAAACCTATTCATATTCTACCGACATTATGACAATAAAAGTAAT
-GTAAGTCATGGTACATGAATTAAGGTGATTTATATTTTACATTTCATATAAAAAGGACAG
-CTGTGAATGTGCATTAAGTGGCCTACCTAAATGCACAAAATGATACTTTTTTTTTTTTGG
-TAAATTATGTGCGAAATAAACACAGGATCAAAACTGTGCCTGCCCTTCTGTTCTTACCTG
-ATAGTCTACAAGTAGCTCAGGACCTTTGAAGTATCGGGAAGCAACTCGGACATTATATTC
-TTGGCCAGGATGATAAAACTCAGCCAAACCCCAGTCTATTAGTCGTAGCTGAAAAAGAAT
-AAACCATGAGCAATCTTATCTTTCTCTAAGCTACCCACACTGTGCCATTAGCATACTCTT
-GAtaaaatataccagacacgtcactctttactgaaacccctccactgactacttatagcc
-tttagaatgaaaataaaacttcttagcttgacaaacctctttctccatgattttgttccT
-GGAAGACACAATCTCACCTGTGCTTTTACAAATTTCTTAAACTGCTCAATGACTAAAATG
-TCCCTACTACCCAGCCTATAATCCTATTGGTAAGCATTTCCTTAACTTTTGGAATATTTA
-AGTCAGCTTCTCAATGAAGTCTGATCATTGCCTTCAGCCCCCTGAATTTTAGATATATTT
-CTTTAACAGAACCTAAACTCTTTATGTTTTCTACCTTtctttttcaatatggacgacaag
-ctccttaggggtagggactgttttattcacctttgtaattttcagaattcaacataatgc
-ctggtatacaggagaaaaatgaataaatatttgctggatagatgaaATAACAGAAAAGTC
-ATACAATACAGCTTTTACCAAAATGCATCCTAAACATGGAAAAAGGGGTAAGAGGCAAGC
-TTATCTGCCCACTGTGCATAGCATGACCATGATCTGAAGTGCCAGCAGTAGGCCCTGAGG
-AAAAACATCGGACTGCTCTGGCACTAAGTTTACTGCCTGTATCTcaaaactaaacctttg
-attactccctgcaaaagcacctccactcagtctccccctgttcggttaaaggtgatactc
-atcctgtcatacaagccaaaacttaagattcaccctggattcttgattccctcagacctc
-acatttaatctgtcaaaaaattctgaaggttctatcatattgtgaccattatcatcacct
-ccactgccactgccccgatccaagccaccaccacctcttgtttgatatattgccatagcc
-ccttctcctaactggtctcactgctttcactcttgccctctagtctaAACAGtttaataa
-atactaaatagtttaatagttattttaaaaataattaaatatttaaaaataaatataaaC
-AGCTTTTTAAAAGGATTGTTCAGGTTGCTATGGAGAGattatagattcacaggaaattgc
-caaagtagtagagattctctgcaccctttacccagtttcccctaatagtaacatcttaca
-taactacagtacaatatcaaaatcaagaaactgacactggcacaattcagaaagatctta
-ttcaggtttcaccagttttacatgcacgcatgtgtttgtgtgtgtgtttctatgcaattt
-catcacatatgtaagttgatataatctcctcaacaagatatagaactgttccatcaccac
-acacatgtcctgtgtgttagcccaacccctggcaacccctctgctctttatctctatcat
-tttgagaatgctacaaaaatggagtcattggcatataactttttttgagactgccttttt
-tcactaagcatgagatccatccaagttgttgcatgtgtcatacttctttcctttttattg
-ctgagaaatactacttcataataatattatatggtatggatatgccagtttgtttaacca
-ttccctcattgaagggcacttttccccatttttttttttttttttttttgagacgcagtc
-tcgctctgtcacccaggctggagcacagtggcacgatctcggctcactgcaacctccgcc
-tccggggttcaagcaattctcctgcctcagcctcctgagtagctgggattacaggtgcat
-gccaccaggcccggctaatttttgtatttttttagtagagacagggtttcaccatgttgg
-ccaggctggtcttgaactcctgaactcgtcatctgcctgccttggcctcccaaaatgatt
-acaggtgtgagccactgcacccagcttttccccccaattttaagctattacaaatatagt
-tgcattcatatataggcttttgtgtggacctaagattttgttgctctgagataaatgcca
-ctgcaggattgtatggtaagcatatgtttagcttttcaagaaaccaaccaactataaaac
-aatagttaagcattttccaaaatgccaaactttgcattcctaccagcaatgtatgagaga
-tcaagtttcttcacatttttgccagcacttggtaccatcactattttttattttagctgt
-tctaataaatgtgtagtTAActtttaaatttcaagtgagaacatgctaaagcttagaata
-tgcaaaagctctctatcttcagagaaaaggcctaacaatgaccaataaggttttacatga
-tttggttttacctctttgatttcatttcctccttctttccccgcattcattctgtcccag
-ctttatccttgctgctgctcttccaacatgccaaacatatccttacctgaagggcttttg
-tacttgctatttactctgccttgggacatgtttcttcataagactgcatggctgggtccc
-tcccagtgctctctaaaatgtcacctttccaatgaaaccttcccttataactggtttaaa
-actgcaaataccctcttgccattccctattcgttttttcttctacatcaaaataactttc
-tatcccaccagcctccctaaatgtagctcctaaaagacaagcatttattgtatgttgagt
-tcacttacatatccccagccctagggtggtgcctctgacatggtgtgtgtctaaaagtaa
-ttcagttgcataaataaatCACCTGCCTCCCCAGAGACCACAACAGGCAAGTCATCACAG
-CTTGTCACCTTAAAAAACTGAAATGCTAAAGCATGTGGCCATTACAGCTCTCATGTAAAA
-GCATTTGCAGACAACAGGGCCCTTATGACATCCAATAAACAGAAACAGCATTTTCTGTAT
-ATCTCGTCCACTTAACTGTGCAcatttaattctcacgaatacctagtcgcctgcagggct
-attattacccacactgtacacgtaagaaaaagaaggcaaatggagagaaagtagtttCTC
-AGGAAACCAGTTACTCAATAAATAAGGCGAGAAGCCACGTTTCCGGGCTTAGAAGATGAA
-CATTTTGCCCACTTTACTCATGTTTCCTTCTTGGGAATATTCTTAGGAATATAAATAATG
-GTTCAAACATGTTGACTTGTAAATTCGTAcattcattcaccaaatatttctcaactgccg
-aataggtactagggcctgtgacaacacaagggataaagtgttgaaGATGGGCAATTAGCT
-ACATCATGTAGATAAATAACACTTGTCAGCCTATCACTTTACCTTTCTGTGCTCATGATC
-AATCATGACATTATGGGGCTTGACATCTCTGTGCATAATTCCCATGCTGTGACAATAATC
-CAGGGCCTGTGGGATGAACGGGTCAGAAAGGAGTTAGCCTGAATAATACGTAAGAGTCCT
-TTACTTTTCCCTCCATGTAAATTTTCCTTTTAGCCTCACAATACCCCTGGGATTCAAGCT
-GAGGACACAGTCACTTCCACAGCAATGCTTCAGAGACTTGTTCATGATCTCACAGTCAAG
-CAAACTCAGCTCTCTGAGCTTAGAGATCTTTTTCTGACACAGTTGTTTCAACATGTTTTC
-TGTCCTAAAAGACCCAAAGTATACCCAAATTGCACCACTTCAAATTTTTCTGTCTTGTCC
-AGATCCTAGATTATTTCCACAGACCCCTCAAAGAAAGAAAACAGATCTTTACTACAAACC
-TCTTATTCTAAGAACAGTAATTCTTTAGCCATTAAGAGTCTGTAAcagaggttggcagac
-cacaggccaaatttggcctgatgtctgcttttgtaaataatgttttattgcaacatagcc
-atgcctatttgtttgcatattgtttatggttgctcttgtgcaacaacagcagacttgaat
-agtgtgacaaacactacatggcccacaaagcctaaaatatttactatttggccctttaaa
-gaagtttgccaatgcctgATTTAGGTCATCAAATCCAATCTGAAATGTTTCCAACCTCAA
-ACTAAAGGGAACTGAGTAGTATAATCTTTGGGGTTTGTTAATCCCAGCCTTTCAGTCAGC
-CGACGTTGTTGGCCAAATTCTTGTCCTTCCTGAAGGGCAACTTGGGTTCCTACAGTTCCC
-AGGGCTGGGCAATCATATCTGTAACTTTCTAAAGCCTTGCTTGCCACAAACTGCATGAGC
-CAATGGAAAGATCAAGTATCTCTGCTGGCACAATCTCCTCAGGGGATTTCTAAGGCTCCA
-ACAGCAGGCTTTATGTCAACTCTTGTTTAGTAAGAAAGCTTAGCCAACTTTTAGCAATTC
-TCTCTTCTAGGAAGCTGATCTTGTGGCTACTGGGAACAAGATATTTGGTGACCCCACTTT
-AGAAATGTAAGTAAATTTTCAATTAGCATCTATAAGCAGAAATTTACACAATCCTTAGGA
-CAATTACCCTTTGAGAACTGAGTTAAAGTTTACTGTTTTATTTGCTGACTCTTAAGTGAG
-ATAAAGTATACCAGAAGCTAGCACGTCAGGTGTTTTCACGAGTTTTGAAAATTTAATATT
-AACTTACATAGGGGCCACAGAAATTACAAATATTTGTTAAGGGGTCAGTCCCAGCTATCT
-TACAAATACCCTTTTTCAAATTGTTCTAAATTATACTCCCACTAGACCCCATTCCATAAC
-CCTTAGCACAAGGGTTCTGATACTATTATTATTAAtttttatttatttatgtatttagag
-acagggtcttactctgtgctactgcactccagcctgtgcaacaatcatagctcactgctg
-cctcaaattcctgagatcctcctgtcacagcctcccaagtagctggaattacaagcataa
-gccaccatacccagctaatttttaaattttttgtagagacagggtctcactatgttgctc
-aggctggtcttgatctcctggcctcaagcaatcctcctgccttggcctcccaagtagctg
-ggacttacaggtgcacaccaccatgcccagGTAATTAAACAAtttttttttgtagagatg
-gggatctcactatgtcacccaggctggtcttttgatctcctggcctcaagcaatcctcct
-gcctcagccttccaaagtgctgggattacaggtatgaTACTATTAACTTATTAAAAACTT
-ATATAGAGGTCCCTTCTTTCAACATACTTTACAAAGTTAATCTGCTGGCTTTTCTACCAT
-CAATTGACTATTTAACAAAAAGAAGACCAATTTAAAAAATATTTAGTATTCAAGGTTCAC
-TTACCTTCAGAATCTCATACATGTAAAATCGAATATCATAGTCTGTTAACGTCTGGTACA
-ATTGCTGTTAAAGACAAATGTTTGAGCCATGAAATAATGCTGACAGAAAGGCATTTTTCA
-CCCTCACTCACAGTAATTCAAACCAAGACTTGGCTCATTTACCGTTGTTCCAAGATCTGT
-CCATTCACTGCCCTCTATTTCTCCAACATTACATTAACTTTAAAGAGATACTTTGGGTCT
-TCAACTCTTAAAAATGAAGAATTACTTAAACATATATTGCGGAAGCTATAATCCACTGTC
-AGAAACATACTGATCTAGATACGTTAATATGCACTGACACCCACCTATAATTTAGTTTGC
-TTTTCATGTATCTTCAGACCTTCTCAAAAGAGGCATTTTGGCAAATATACTGCCTCCTTA
-GTAGGGAACTAACTCATCTTTGCCTTACATAGTTGGCCCTGCAGATCACCAGTGGGTATG
-CAGATGGCATGATACCAAACCTGTTGAGTCAATTTAACAAAACTATTCTTGTTCCAATTG
-GAAAGTAAACTCTGAACAACTGTTATGTATCCTTTCCAGTTTCCAAAGAGTTGCAGAATG
-TTTTTTACATGGACATATCttttttttttttttttttttttgagacagggtcctcactct
-gctgcccaggctggagtgccgtgctgcaatcataactcactgcaacctcaaactcctggg
-ctcaagcgatcctcctacctcagcttccccagtagctaggactacaggcgaaagccacca
-tgcccagcCACAGGTACGTCTCTTTAATGGTTAGCAACGTCTTCTGACAAAGTTTTTCTT
-GAAATTATCATTCTGACTCTAAAGCAGTTCCTCTTCCTTTCTCCCTATCTCTGCAACAGA
-ATTCACTAATTTATTAATATATAACATTCTGGATACTGGACTGGTGGAAAGGCAAATCGA
-AGATTTTTACTTTTACTCCAAAAGAGTAGCTATATTCTTCTGTAAAATTGGAACTGTGTG
-AAATAAGTAGGCCACTGGATAGACTGGAATTCTGAGATATCTCTTATAGAGGTTTGTGTT
-ATGGCAGAATTTGACATTATCCTTCCTCGATCCCTGCCTTTTAAGATCTATAGCCCACAG
-TTTATGAGGAATCCTAAGAAATAAGCAGTCCCTACTTTTATACATACAATATATTTCTTC
-CTGAACACTATTGTTTAAAGCGAATTGCCATATGGCCAGATCCTAAGTGAACGTGTGTTA
-CTGCCTTCATTAGGTTGGACATCAGCAGAAACTGTCAACTAAGTAGTGAGAAGTCAATGT
-GTTGGTCATTAAAAAGAACATTAAACAAATGGGCAAAATATCAAGATGCAGAAAGTGGGC
-ACTGCTTATATAGGAGTTCTTCTATCTTAAAATTTGCACTGTAAGGATGAAAAGCTTTTT
-AAAAACAAATGCGAAGCAAGCTCTTCTAACAGCATCATCCCCAAAGGCTATGTGGTCTAA
-AAACCCACTAGCCCGAAACAGTTGGTTATATATTATACCTTGAAGTCTGTGTTGTTTACG
-TGTTCAAAAACCAAGGCGGGGGTTCGTGACTAGGGGAAAAGAACAAAAACAAAAACACAC
-ATTAGCAATAGCCCTGACAGCTTTAATGGGGACAATGTTTGCGGATGCTGCGTGGTGAAA
-TTTGGCAGTCCTCGCCTCAGTAGTAAGAAACCCTCTATTGCTACAAGCCCTCCCCGCTCT
-GATCATCACCGCACTTAGGTCATTTTTGGGATGGATTTCAAACAGAAGACATGGAGCTGA
-AGTCTCACCAGGCTCTAGGCAGCCCGACAATGCGCCCATCGCCCATCGGCATCGGACCTG
-AGTTTGCAAAATGGATTAACACATTTCAGTTTCCAGTGCTATCAGTCTCTTAGCCTAGAA
-GAATAAGAAATAGTCTGTGGGTGGAGGTCTCTTTGAAAGAAAGACCCAAGCTAGTTAAAT
-GGTATATCTGATTAAGCACTTTCAAAGCAGGACTTAATGATGAGGGTTGGGGGAGGGAAC
-AAAAAGAGGCCAGTTGTGCTCCAGGTCAAACACCATCTCAGCTCTGGCGGGCCTTGCTAA
-CACCTACTATACTCACCACAGGGTCTTTTACAATGTCTGCCAGTGTGATGATGTTGGGAC
-CTCCTCTCAAATTCTCCAAAATCTTTATTTCACGCTTAATTTTCTTCTTTTTTACTGGCT
-GAAAGGGGAAAAGTACATCAGCaaaaaaaaaaaaaaaaaattttttCAGAGTATTTCAAC
-ACGTAGTGTAATACATAAATGATAAATGGCTTACTtatgagcacaccttgaaggaagaaa
-atgtgtcacattcgtctctgaatccttctcctagcactgtgccaggtattctgcaggtac
-ttacaaatgttgaattgaaagaaAAAAAGATTTCTATTCCAAAGACCAGACACTTCTGCA
-GAATTAGCATTTCAATCATCAGTCTTGATGTTAATGTTTTAAAACATGTTAAACATGTTA
-ATGTCTTAAAACCTTACAAAGTAGCAATTTAAATCGTTAGTAATACTAAAGTATATCAAA
-CTTTTTATCAATTAGGATGAAACATGGGCCCTTTCCATTTCTTCCTCTAATTAGGGCCAA
-CAACAAGGATGGCCAAAACATCTTTGTgtagcacaaccctgagggtaaagggtgagtctt
-ggagtcacaatgcccaatgtgaaacctacctttactacctgctggctgttaatggcaaac
-tacataacctctctaagcctttcattaagtgtaaaatgagtaacaagagtacccatctca
-taagattgttgcaagaatcaaatgaggtaTTCGAAAGATTTCGGAATATGGCTGAAACAT
-AACATAATAATAACTGTCTAGCCTGATCACCAATGCTCtttttttttttttttttttttt
-gagacagagtcttgctctgtcacccaggctggagtgcagtggtgcaatcttggctcactg
-caacctccgcctcctgggttcacgccattctcttgcctcagcctcccgagtagctgggac
-tacaggcacccgccaccaggccaggctaatttttgtatttttagtagagacggggtttca
-ccgtgttagccaggatggtctcgatctcctgacctcgtgatctgcctgcctcggcctccc
-aaagtgcCAATACTCTTATAAATGAACCCCTCCATTCTAAAGAGTATTCTGCAGAGCATA
-TCTTAAACATTCCTTTGTCCTTACCCATTCTTTCCACATCTGTTCTAGTATGGAATCCTT
-TTCATTTTTTTCTGAGGAGGGCCTTGGTCCCACTGCACCTCCTTTATAAAGCCttttttt
-ttttttgagacagagtcttgctctgtcgcccaggctggagtgtagtagcatgatctcagc
-tcactgcaacttccgcctcccgggttcaagcaattctcctgcctcagcctcccgagtagc
-tgggattacaggcgccagccaccatgcccagctaatttttgtatttttagtagagacagg
-gtttcatcatgttggtcaggatcgtctcgaactcctgacctcatgatccgcctgccttgg
-ccttccaaagtgctgggattataggcatgagccactgtgcctggGCTTATATTATAAAGC
-CTTCTCCTGAATAGTCTAAAAcagtgctggcccaaaggaaatataatacaaaccacatgt
-gtaattttaaatgtgttagtagccacatcaagaaaattttaaaaaggacaaaattaatgt
-actttattaatctaaaatcttaacatataaatcaatataaaaattattaatctattttac
-ctttttttgtattaaacccttgaaatctaatgtattttactcttacagcatatctcaatt
-cagcccagccatatttcaagtgcttaacagcctcatgtggcctgcgtgcctgctgtactg
-gactgtgcagGTCTTTTCCTAGGGTGTTGGTCACCTCAGACTAGATGCACTGCATATAAC
-TCTTAGAAGTTAAGTACATCTCATCTCTTCATTAACAAGATTGgtggttactaaagtttg
-atgaccaacaatcacctggatttttttaatatacagactcacagaacccaccaagattca
-ctaaatcaaaatcttgagagggaaacgggggatttatttttagatactttccaggctgat
-GATCCAGGTCCAGAAACTACCAAATAATACTATAAATTCTTTTAACTTTGTCTTAAGCCT
-CAAGCACATGATAGCAGAAAGCAAGCAGATTTTGGAAACATTGACAGTTCTCAAAACCTG
-GCTTTGTGGTTGTGCAGTGTTCAGAAAAGCATTTAAATGTTTCTCACTGCTGAAAGGGAC
-TATACTCGCCTGTTAGTGATTTACATACCACAGTTAGAACAGGTCCAATGCAAAGTGGTA
-CCCAATAAACAGAAGCTATTTTACTAATGACTTCCATGTAGTCCATTGAATTCAACCCAC
-GACCTCTTACCCAATACAATATCTACCTAAGAAACAAGATAATATAAGTCTTCTCTTCCT
-GCTTCAACTATTCAGATCTTTATAAACTGTTATATTATCTGGGAGATCTTTCCACCCTGC
-AGAGACTAACCCAACAACTTACCTCCTGTTTTCCATTAACCCAACTGCTGGTTTTTTAGT
-GGAAAAAAAAAGCTTCTGGTTGACAAAACTACTCTACAGAATGCTTCAAATCTATAAACT
-TAAAAAGCTGGTTTGTGACAGACCAGGCAGCTGACTCAGGCCCGAATTTAATGCGATCAA
-TGCAACTTTTGTCTTATTAAATAGGGGAGATTAAAAATTTTAAATATGGTTTACAAAGGA
-AATTCATCTATACTTACACCACCTACCCACAGTTACAGTAAAATATACAATACAGTTAGA
-AAGACTGAGCTGAAAAAAATCTTTCTAAATCACCCTTCATTCAAAATCATCAAGGGCTCA
-CAATTACCTAGAAGAGATAGTCATATAATTTTAAGACTGCAAGGAAATGCAGAGATTATT
-TTTTCCAGGCCTTCGCCAACTTAATCTCTCTTTCCAAGTTCAACTCCTATGTATGGTCAC
-ATAACATCTTTCACATGAAATATTTCTCTCACTTTTCCCTCCTCCTCTTTTCTTATCTTG
-GTGCACTCTACAGCCTGCTTCCCTTCACCACTTCCACCCAACACCTATCCAAATCCTCCT
-CCCATTCAGCCTGAAGACAGCTCCTGGGAGCTTTTCCTAACTACTACCCTCTTCTGAACT
-GTAGACCCACTATGCATGCTTTTCATGTGGCTCTAAATAATAATATATCACCTCATTCTA
-TCATATACCTTTCCATATGAATATCACCATACAATCACAAAGAACTCCAGTCTCCAACGT
-ATGTATATATACACACAATTTTGTGTTTGATCCtttttgttttttgagacagggtctcat
-tctcatcgcccaggctggagtgcagtggtttgatcatagatccgtgcaaccttcaacttc
-caggctcaagcgatcctcccactttagcccctcgaggacctgcgactaaaggcacatgcc
-accatgctcagccaaCATTCTTTTTAATAGATGGATAAACATGTCCTAGGTTAAAAGGAC
-TACTATGGCTAGTCACCCACATGTTTTGATTTCCAACCTAGTTCTCTTTCTACATATTTC
-AAGACAGATATAAATACTTAAACTCTCTGGTTCTCAAAGGGCATGTgaagcaccccagca
-atgcacaggaatactgtggaacactttacatttttgaggaagacacatcaacccatcgtt
-gaatctgccagacactgggtgcactgccagcttgaggtggttcgtagtttcaacattaga
-ttgtgttacactcctcgtgatggattgtgttatactcctcgcgatggcatatttttgtga
-agctgggtttgcagtagttgctgtggtaaaaagcaagtactgcacaaaaatcaatgacag
-gaaatgagggtggtggtgtccaaccaatgacaacatttgaaaagctatgcagcaacaggt
-ctacataacccaacagtaacaaattatagttatataagaacaaatttaacttttttcttt
-taatttatgtgaataactttttaaatggctaccaagttgctaagatataaatacttagcg
-ggcaggcgcagtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcggat
-cacctgaggtcaggagtttgagaccagcctgaccaatatggtgaaaccccgtctctatta
-aaattacaaaaattagccgggcattgctggcgtgcatctgtagtcccagctacttgggag
-gctaaggcaggagaatcgcttgaacccaggaggcggaggttgcagtgagccgagatcgcg
-ccactgcactccagcctgggcgacagagcgagactccttctcaaaacaaaaacaaaaaca
-ataaaaaaaacaaaacttacttagctatttggaccttgctacttaatacagagaactatg
-aggtatttcttgacttaggagtaccgtgaaaaattaaagacagtataagtgttataaatt
-gagaaagtttggaaacttctACTTTTCAGTGTCAAATATGAAAAAGTTCCTGTGGTAAGG
-AACTATATGCTAAGTTCCCAATATATGACAGTGCACAGCATAGTTATAACTAAATTAAAA
-GTTGTATATTGGTCTCCCAGAGGCCAAATCtggcctgtgcattgtttttttaaaatcttg
-agccaacacttaaaagtcaggaaaattcatatacaaatataaatttctggcttttatttg
-caaaacagagtatcaagcaacaatggacttgcattactgcagggcaatcatcagcttcag
-ctgagaagcagctaactccttttgaagaggcatgtgtttcccagtttgtttcagtcccta
-ccactcacatcacCTAAGCAAGGGCAATTACACCCGACTAGCTGCACTAATATCATCTGT
-CTGTCCCCCTCGAGTCCTGTGACTCCTCATCTTTACAAAGTAGAGGCAATGATTTATTTA
-TTGAAAACAAAAGCCTCATTATATAATGAAAAGTAAAGGAAATAAGTATTAGgcaataac
-tgggagagaagagactgtacctttgctcccttactctgccacaacctagctatatgagtc
-aactcaaatcacttctcttgcttcagtttcccgatctgtcaaataagcagaacttgttct
-attgagttcataggatACAATAAAATTTTATTTATTTGCTTTGGCACCAAAAACCTTTTA
-AATGCTGTTTTAAAAAAGTCTTCAAAACTACTTTTAAAAATCTATATTCCAAATACCTCT
-GAAATTATCTCTTGTACTCACCTTGAGAATTTTAACAACAACTTTTTCATTATTTGTGAT
-GTTGATGGCTTCAAATACTTCACTGTATTTACCTCGGCCTAATTTTCGAACCAGCTGGTA
-GTCATCTTGATTTCTGTGGACACAAACAAAATGACTTATAAACGGTCAAATTATCAGCAT
-CAATTCAAATTACAGGAATCTATTACCAGCAGCTGTAATAGAAATAAGAAGTATTTCAAA
-CAATTCCCAAATAGGtttttttttttttttttttttttttggagatggagtctcactctg
-tcgcccaggctagagtgcagtggcgcgatctctgctgactgccagctccacctcccgggt
-tcacaccattctcctgcctcagcctcccgagcagctgggaccacaggcgcctgccaccat
-gcccggctaattttttgaatttttagtagagacggcgggtcctcaccgtgttaaccagga
-tggtctcgatctcctgacctcgtgattcgtccgcctcggcctcccaaagtgctgggatta
-caggcgtgagccaccgcgcctggccCATTGtattttttttttttttaaattaGGCCAATT
-AAAATACGTGTGTTTCAAATCCTAGAATTAGAAAAACTTATACCTTTCAATTATTCTTTC
-TAATCCCAAACTGTTTACATCTTTATTGGCACATGACATGGAGCTGGCTTGTATTAAGGT
-TTGTTCTAAATACGTTTGTCTCCAACAAGAGACAGCTTTCCCCAAGAGAATAAttttttt
-ttttttttttttttttgagacggagtcttgctctgtcgcccaggctggagtgcagtggcg
-tgatctcggctcgctgcaagccccgcctcccaggttcacgccattctcctgcctcagcct
-cccctagtagctgggactacaggcgcccaccaccacgcccggctaatttttttgtatttt
-tagtaaagacggggtttcaccgtgttagccaggatggtctcgatctcctgaccttgtgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgcacccggccG
-GAGAATAATTTTTATATATTCTTGTCCCTTAGTGCTTGGTCCAGTGTTGGCACTTAGCAG
-GAACTAAAAACATTTTGCAAGACTGTTTCAATCTAGCCACACTTTGGCAGCAGCTGATTT
-TTAACAGGCCTCTTTGAAGGTAAATGGCTTTCAAATGTATAGGCTTAATCTATTTGCCCT
-CCAGGGCAAGCTCTGGGGATAGTCCATGCGTAGTACGAAGCACATTATAGATTGTAAACT
-ATAATCAGCGATCCCCTCCTCTACATATACCCATATTCTGTGACCAATAAGCAACATCAG
-AGGTAATAAACAGAGGTAGAATAAGGGAAATGCCAACATTTTCCTCCTGCCCCTGCCTGC
-TTCCAATGTAGAGCGCTTTGCTCTGAAGAATGACAAACACAGTTCCAATAAGGCCTAAAT
-TCTATCCTACTGGATAGAATCCTCTGGACCTACTAAGTATCCAATATGAACCAAATCAAC
-CACCTCAACCATTCATTTTCCTCAAGTAGCTAAAAAGAAAGTGAATGAAAAGACAAAAGG
-TACTAAAAACAATGGACAACATAATAATCATGGCAGGTGTAGGGGAAGAATGCTCCTACT
-TCTGGTTGAGTTCTCTTCCTATGGGAGGGCATACAAAACAAATGCCAGCAAGCAAACAGA
-ACCATGCCAAAAGCCCAAAAGGGCTCTTTAGTGCCATTTAAGCAGAACCAAGTGCAAAGC
-ACTCAATTTGAAGATAGCGGCTGAAATTCCTATAGTAAACACAGTGTCACCTAGAGTCCA
-AAGCCTGTGACATAAGAGGAGAATTGTTAGATTATCAGTAATAACAACATTTATTGGTAC
-TAAACCACACTGGCATTTAATGGTGTCTTTACAGCATACAGTGCCTCTGTATTCAGAGGC
-AATGTATTTACTGTTAAGAATCATGGCATACTCaaattagctgggtagggtggaaggtgc
-ctgtaatcccagctactcgagaggctgaggtgggagaatcacgtgaacccaggaggcgga
-ggctgcagtgagccgagatcacaccactgcactgcagccagggcaacagagcaagactcA
-TTTCCACACACACACATACACAAATTCATGGCATACTCAAGATTAAAAATACGCCCTATG
-ACAATTTAGGGAAGCCATCCACTAACCACTTACAGGTTACAGAAATCACATGCAGTCAGA
-TATAAAATACAGCATACAGGAGCTGTAGCTTTAGTTTTCAAATTGCTTTCTTTTGCACTT
-GAATGTCAAAATGCTTTTATCACAAAAGTATGATCTGAACAATTAAATGTCTACCACATT
-GGGACAGGAAATGCAAACATCCAAATGAGTCTGCACAGAGAATTAGGAGGGCAAACACAG
-CTGTTCAGGCAGACTACAACTGTTCAAGATAGAATTTGGGCTGAATTCCATGCTAAGACA
-TGCCTAGTCTCAGGATAAGGGCAAATGTTTAAGAATTTAATTGTTTCTCATCAGAAAGAA
-GTTACCTCTTTGGAGAACTGTTTCGTCCTCCTGTATTAACACGAAACAACATTCTCTACC
-TCAAAAATACTTTATATAAGACTTTGGTGTTTTCAAAGTCTCTCAAGTATCACTTCTCAC
-TGATCTGCAATGCCCTTGGCTTGATAAGCAAGCTGATAGGTAACTTTTTGTTGCCAGGTG
-CCCATACAGAATACCgtcatgcgttatttaatgacattctgagaaatgtgttaaacatca
-gagtgtttacacaaacctacatggtatggcatattacatacctagggtatggcctacggc
-tcctaggatacaaatgtgtaccgtaataaatactttaggcaattgtaacacaatggtatt
-tgtgtatctaaacgtagaaaaggtaatgaatgcactgttgatgttacgatgacatcacta
-ggccacagacatttttcagctctcttataatcttatggaaccactgtcctacatgtggtc
-tgtcattaattcaaactttgttatgtggtgcacgactgCATATACATCATAGAAAAGGAT
-AAGAAACTAAAATGATTTTTAAATGGTAAGCCCATTAAAATTGTTCACTTGCCAAAGCAA
-CTCTGCTTCCTCACTGCAAAACCAAATTTTCAGCTCAAAAGAAAACACAAATTGGGCTTT
-GATCCTGAGGTATACACATACAGAGTCACGGAGGTTTTCTGACAAAAACTACTCAACAGA
-TCCACAAGATTCAGCCCTTTGAGTGAGTATAATGAAGTCAACAAAAACAATTACCCCCAT
-TCCACCACATGTGACTCGTAATCCCAGTATTCTCGAGGTCTGTGTGTATTAACATCTGTG
-TAAACTCTGGCCCTGCTTGGCACGGGTCCCGACATGTCAGACAGGTTGGCGGACAAAGCT
-GGACTTGATGTTTGGAGATCTGGCAGTCACTGTGTTCAGAAGCAGCTGGGGGTAAGACCT
-TGTTTCAGACCTGTTTTCTTCAAACTGCAGAAACAAAATGCACAAAGTCCAAGGAATCAT
-TTACAGAAGGTATATGGGAAGGAAATAATCTTACAAATAATAATGGCCTGAAATATACCT
-CTGGCTCTCCTACCTACAGCCAATAAATATAGCTCAACTGTGTTAACCAGTGCTTCCTAT
-AACATGAGAAGAAAAATCCCAAGAAATACAGTAAACTGATATTTGCTTTAATCATATTTT
-GCCAAATATCCTGTTACCTCTGCAGGCAAAATTTGAATGATTTTTGTAAGACAGCCTGGA
-AGAGAAAAATGGCATTGAGGATAGATACATCAGCATTACCACTAGTTATATATTCTACAA
-AAGGTATTGGCAAGAAAAATACTTTCTTTTCAGCAGCTTTCTGTAACTTAAGTAGGGGTG
-CTAAAAGGTTCTAGAATGGCGGCAAAGCTAAGAGTACAACTTGCCATTCTGACTCATATT
-TGATGAAACCAGGAAGAGAATAAAGGCTTGTTCTCATACATCAAAGCTCCATGTCATCTT
-ATACCAATCCAAATCTTTTGGGGGAACCTTAAGGTAATAATCAGTAGAACCTTGATCACC
-ATTTGAAAGACACACTTGGTTTCATTAAATTTAAAAACAGAAATCAGTAATATTCTCTTT
-ATATTTAATACAGGAGCTTAAAAACTGGTATAAAACAGTAATACAGATTAGCTGAGCTAA
-TGCAAAATTTGACACCGGGGGAAAATAAGTAAGATGTTAGAAATATGCTATCAAATCAGG
-TTCCTTTCCAATGATGTCTTCCCTATCTCCTACAGCATGTGCTGATTCCCCTCATTATGC
-ATTTAGATGAAATTGTATTGAGTCTCCAGATTGTGATAACGTGAGAAGGATATAACACGT
-ATGCAAGTCTCCTGGCTGAGACAGCATAACTTCAATTTGTATGTGTGTATGTGttttaag
-acagggtcttattccactgcccagactggaatgcagtggtgtgatcatggctcactgaag
-cctcaacttcctggactccggtgattctttcacctcagcctcccaggtagctgagactac
-aggcacgcaccaccaccctcagctaattttctgtattttcagtagagacggtgtttcacc
-atgttgcccaggctggtcttgaactcccaggctcaagcaatcctcccacctcagcctccc
-aaagtgctgagatcacagatgtgagccaccgcacccagccATAACTTCAATTCAATTACC
-AGGAAACATTCAGAAAAAGAGGAAGTGTCTATTTAAAAAGGGGGAAGGGGTACTATACTT
-CTAAAACATGTCCACAGCATAAAAGACAAATGGAGGCTAAAGAGACATTGCATAAATGCA
-ATACTCTAGACTGTATCCCATACTGCAGGAGGTGGAGGGGGAtgctataaaaaacaatat
-cgacagaactggaattcagagggtattaaattattgtatcaatgtaaatttgtgaagttg
-gtacataatcacaatagttaagagaatatacctattcttttttttttttttttgagatgg
-agtttcgctcttgttgctcaggctggagtgcaatggcgtgatcttggctcaccacaacct
-ctgccgcctcccaggttcatgtgattctcctgcctcagcctcccgagtagctgggattac
-aggcatgcgccaccatgcctggctaattttgtatttttagtagagatagggtttctctat
-gttggtcaggctggtctcaaactcccgacctcaggtgatccgccctcctcggcctcccaa
-agtgctaggattacaggcgtgagccacctcgcccagcccaagaatatgtctattgttaag
-aaattttcctgaagtaattagaagtaaacagccatgatgcatataatctaccctaaaatg
-attcaggaaaaaaatgtgcccacacgtttacatgtgtatatatatagcacacatgactgc
-acactcacaaatgataaaacaagctgggtaaaatattacaataggtaaacgtgcgtaaag
-ggaatagagatgccctttgtactatttttatttactttttgttgaaatcttcttatttga
-aacaaggtctccctctgtaggccaggctagagtacagtggtctgatcacagctcactgca
-gccttgacctcccaggctcaatcaatcctcccacctctgcctcccaagtagttgggacca
-caggcgtgggctaccacagctggctaattaaataaattttttttttgtaaagatggggtt
-tccctatgttgcccaggctggtctcaaactcctgggttcaagtgatgctcccaccacagc
-ctcccaaagtactgtgattataggagtgatccaccatacccagctTGTTGAAACACtttt
-ttaaattgtggtaaaatatacataacataaactttatggccaggcacagtggctcacttt
-gggaggcttaagagggtggatcgcttgaacccaggagttcgcaaccagtctgggcaacat
-ggtaaaaccccatctctactgaaaatacaaaaaattagccaggtgtgatggtgtctgcct
-gcagtcccagctacttgggaggctgaggcaggagaatcaccagagaccaggaagtcgagg
-ctacagtgagctgtgattgcaccactgcactccagcctgggtgacaggagagagacctca
-tctaaaaaaaataaaaactgccattttatccacatttaaacctaaagctcagttgcatta
-agtatattcacattcttgtgcagtaatcaccagatcatccatttctacaaatttttacca
-tcccaaatgaaaactatgtatccactaaacactaattttccctcccccaactctttgcaa
-ccactattctattttctgcctgagctggctattctaggaacctcatataagtggaatcag
-acaatatttgtcctttgttttgtttatttaatttagcataatgtcttcaaggctgatcca
-tgttgtagcatgtgttagaattccaatccttttaaaggctgaatgatattgcactgtgta
-tatatatacacacacacacacacacacacacacaccacattttgcttatccatttatctg
-ctgatggacacttgagttgcttccacagcttggctattgtaaataatgctgctatgaaca
-taggtgtacaaacatctgtttgagacctcgctttcaaatcttttatgtatatatccagaa
-gtggaactgctgaaccatgtagtaattctatgttaattttttgaagaaccagcatattgt
-ttcaacaagctgggcacggtggctcactcctatacagcaactgtatcattttacactccc
-aggaacagtgcaaaggctacaacttctctacatccttactaacacttgttattttctgtt
-ttttGCTTGtttttatagagacaggggtcttgcttatgcccaggctggtcttgagctcct
-ggcctcaagggatcctcccacctcggcctcccaaagtgctCTCAAAATAGACTGTGCCTG
-GCCTATTTTTTGGTTTTCTTTTCTTCTTCTTCTTttttttttttcagtaacagccctcct
-aatgagtatgaagttgtatctcattgactgtgattttaatttgcatttccctaatgatta
-atgatgttgagcatctttttacatgcttattggccatttgtatatttgttttggagaatg
-tctattcaaagctgttgtccattttttgattgggttgttttgtttgttGACGATGCATTT
-GTTAACTATACTGTTTTTTTGTTGCTTACAAGCTGCTCATCTTTCCAAGGTAAGCTGTAA
-CTTAGCTACCACACCCAAAGAGAAGCCAGAAGAGATACCTCCTTATGCCCATGGTGTCGG
-CAGCTAAAGGCTTTCAGAAGAATAGCAAGACTGGGATGGAGATTAATTCTCTATTCCTTA
-ACCGTGACAAACACAATTAATGACATTCCACTCCAAATATATGAGATCAAAAGATTCACA
-TGCTGACTTATGAATTCTCCCACCCAAAAAACTGCTGTAACTTGCCTCTGTTCAACTCAA
-ACCTTCTGAGGTTCCATAAATGTACTAAATGACCAGAAAACAACAAAGTAATTCAAGTAC
-CAAAAGTCTTTAAAATTATTTCTATTTCTTTGATTTTGTAAAACCTGGGTGACATTAATC
-TATCTTCACTTAATATCAGTTAAAACTGTAAACGCACACACACACAAACACATCAAACAT
-GCAAAAACCAGATGTTTTCTTGTAATTTTTCTTCTTCCCAAAGAAATAAGGTCATCTATG
-TTGTAGGATTGGTGACTCTGTGACTACTATGCCTGCCTTGACAGCAATGAAAGACACTAG
-GAAAACCGTAGAGAAAGGTGTAGGTGTGAATATGGCCAAAATAGTAGAAACAGCAGCATG
-AACCCAACAGAAATGCTGTCCCCAGAAATTTATTACTTTTAATATACTAAACTTTTAAAT
-TCTCAGCCTCTCCTCTGACAGGAAACAGTATCTTTCTCTACATAACCTTTACAGCCACTT
-TACTCTTCTGGTTAACATTTTATACGTGTAAGACAGCCTTCGTCTGTGGATCTCAAAGCC
-CTTTTCCTATGCTTAAAAGTGATCTCTCTGTTGGGCTTTTCCCAGCTTTGGTTCATCACT
-TATAAAACCTGTCTAACTGTGCTTGCAGACTGAAGGGAAGATGAAGTGAGATGATCTTCC
-AGAAAGGGCTTAGAAACATGAAATGCATGTAAATTTGTATTAAGTAATTACTATCCCCTA
-GCTCCTTAGTGAAAGCTAATAAGCAGAAACCTATCTTTACAGGCTGGAACCTTCATTCTT
-TAAAATACAAAAATTATAGTAGCCGTGGTTAATTCCCGGCCACTGAGGGCTAACTCCCAA
-GTATACATGACATTACAAAATGAGTCCTCATTTCTCCCTGGAAACCATCTGACATATGGA
-GAATAGCCAACTCCTATTACTAGTCATGTACATTCTCATCACCCAGTCTTCTTCTGCTGT
-TTCAAGGCCCTGGCATCCTCTGTGAGGAGTGGGAAAAGACTAATAACTAATGAAACTCTT
-GAGATTCTCCAGTACTTGTCTGAATGACCCTTGAAGCTTTGGGGCTCATCAACTGGGACC
-TAATTTATGAACTAGCAGATCTGATTCTCCACTGGGAAGACAACAAGCTAACTATTTTTG
-CAGTACCCCCAAAGAGGTGCTTCACCTTACTGTCACGCATACCAAATAATCTGCTTATAG
-TAAGAAAGGTATTCACATGAATTTCAAATGGCTGGCCTTCATTAATTATACGGGAAAATA
-AAACAGAGGATTCTTCAACTGTGACTCTGTAATCTCAGATAGATAAAAGGGTACTAAGAG
-ATTGGGGGTTAAGGGATGGTGATAAAAAGGGGATGTGAagcccagtgtggtggctcatac
-ctataatcccagcactctggcaggatcacttgagcccaggagtttgagaccaccctgggc
-aacacagcgagacctcctctctacaaataacataaaaatgagctgggtgtagtggagtac
-aactgtggtcccaggtacttggtaggctgagatggaaggatcacttgagcctgggaggtc
-aaggttgcagtgagccatgatctcaccactgcactccaacctgggtgacagagcaagacc
-ctgtctcaaaaacaaacaaacaaacaaacaaaaaacaaaAACAAGAGGGGATGTGAAAAG
-ACAGAAAAGGGAGGTCAAAGACCAAATATTATCATTATTATTTTTTTGAGACAGgagaca
-gggtcttgcgctgtcacccaggctggagtgcagtggtgcaatctcgctcggctcactgaa
-acctccacctcatctcctgggcttgagcaatcctcccacctcagcctcctgagtagttgg
-gactatagctatgcgccatcaggcccagctaatatttgtattttttgtagagacaaggtt
-ttgtcatgatgcccaggctggtctcaaactcctggactcaagtgatccaccagcctcagc
-ctcccgaagtgctgagattacaggtgtgagccaccatgcccaaccAAGATAAACATTATC
-TTATTTAGAAATAGTATTTCACTTATACCTCTGCAAATGCATATGTATATCACATGTAAG
-CTAACAGGAAGAAAACACACAGCCTACATTTCTCAATTTTTGGTTTGATTCTTCCCTACA
-TTCCTGATTTTGTCCATCCCTTAAATAGAtaaccatctactatgaaaaagtactatccta
-ggccttaggaatataagtgagcaaggcagaACAGGGGTGAGACAAgtatgccattgaaga
-ttttacctatggactaagggtaacagaaattcattgaaaagttttaagcagaaaagtgac
-ccatacatattgtttttaaaatttttactctggctgagtgtgggacaggacttagggaga
-aggctgttaacagtagcacacgtgagagaaatgatgacctaaggtggtggcatgtggaga
-tcagtggactaatatgaggaacaaaatttatggtgtaaaatcaatagctctgagtgaact
-ggaaaatgctgtatgaagtgggaggtgactcttggatttcttgcttgacagactgttggt
-gccattcatggagataagagtgcacaagataggttttggacttaaggttaaaatggcttt
-gaatcattcaaacgaagattctgaataggcagttagatattacaagtctggaactaagag
-tttctcagctttaagtatctaactcttccaacaactctacgaggcaagcattagtttctc
-taatctacaaataagaacagcctaagttcagtagcttgaccaagaatatccaatacagtt
-acagctgggattcaaagacagtgagttggcctccaaggttcaagtcttctcactCCTACA
-GAACACAATCACTTTCTACTGCACATTCACACACACACACACCAGTCTTCAAATCTTAAT
-ttctcaattggaccctaagttctacaaagttaagaaccatgtttaatttacctttttaat
-ttatagtacctagcctaaggcttgcattttgtagcacgttcagtaaacactatttggtga
-tcaaattaatCTTGGTTTATTTTTTAAAAATGAAATGAAAATGAAGTTGCATCCAAAGTA
-TAGGGTGTTCCTAAATACTTCAGGTCATCTGGTACGCAACTAGGAGAACTGGAAAACCAA
-GTCAAAGGTTCTTGAGTAATTGTTCCCTTCCCTCTCTCTCTTTCCCAATACTACAGCTTC
-TATTAAATCACAGGACTACAACTAGGATTTGTCTTTTTCCCCTCGATAATTCAAATTAAG
-AGAATACTGAAGAAACTTGATTTTACCAATTTTTATAGCAGCTTATTTGGAAGATGGAAA
-AAGTGCCTGAGTCCTAGATATTTGGAAGATCAATTCTCCTCTCCACTGTTCATAATACTA
-GTATATCTTAAGGCAATCTAACAAAATGCACTGCCTTTCTTATTAAGTTCCATTTTAAAT
-TGTCTTACTTAGTGCTTACTGTTCTCATGTAATTGCATAAAAGGAGGTGTAACTTTAGTG
-GCTAACCATTTCAGACCACTACATCTACCTTAACACCGTCAGAATGACTTTGAAGACATG
-GCTAGGTCTTGTATGCTCAACGTTTAGCCTAACAGAAGCCAATTAATCAGCTACGAAAAA
-AGTATCATGTCAATGAATTTTTCCCGACTGAAGTAAGATCACATCGAAGCCAACTGCATG
-GGTCTGCATGACCTATTCTTTAATAAAGTATAAGTAAATAAAAAGAAAATGCCATTAAAC
-CATAAGGAAAAATTGTCCATTGCCAAAATCATAAGTTTACTGATATACACTGAATACAGC
-AGAATTAATTTCAATAAAAACTCCTCTTGCCCTTAGCTAGTCCCTCCTTCTAATCTCTTA
-TGTTCAGTTGTTATTTTTCAATTTGGCAACTAAAAAGAAAACTAGAGGCTTAGTAACAGT
-CCAATACCAGAAAACTATACAAACAAGTTTGCTTAGTCATTTCTGCTAATGTATTTTTAT
-TGATGAATTTCCTAGTATCAGAAATGGAAAAGATCATTCTAGAACTTTAAGTCAATTTTT
-GAACTGTAATATAATTAGTTCTTTTTAACCCTAATGTTTATTAGTCTCCATCTTAAAAGG
-AAAAAAAAAATCTCCTTCTCATCCCTAAATGAACCATAGCAAATGAACAAGATCTCATCA
-TCATCCCGACAGGACAAAGATTTCTATAGCAAAGAATGAGGAATGTGCTTAGATTGCACT
-GACTGCATGGTTTAGGACTGCTTGTTTAGAGGAAAAGCAGCTATACAGGAAGACACCTTT
-TATGCACTGCTGCAGAGAATGAACTCTTTTTCCAAGCAATCAGGCAACATAAACTGGTAA
-GAGACAAACAAGACTTGTGGAACTCAGCGAGACCTTAAATATGTATACTTTTCTACCTTG
-CTACAGAAGCAAAGAGAAAAATTCAGTCAAACTTGCCCATTTCCCTTTACAAAAGGGGCA
-CTGATTAGAAGGCCAACTTAATACAAAAAAGCACAAGTAGCTAATGTTACCTGAATTACT
-TATTTCAAATGTCCATACTTAACCTTAATTTCTTTCTTCCTTTCCAATCAAGAGCAGAAT
-GCTCATACATCAAGcatttactgaacgtttactatgtaccaggaaatgtgtgcctgactg
-ccagaaaggcattctttctcttggtcctGGAGAAAGTATCTCTGCCCTCAGACAAAGAAA
-ACAGACCATTACAATCTCAAGTGATCAGTGCTTGAAACAATTAAGTCATGGTGGTGTACA
-GACGTTGAAGGGTATTTAAACTATCACCAACCCAtcattcattcaacaaatatttatgga
-gtacctaAAATGGGGAAAAACTGTAAGAGAAAAAAAAAACTGCACTTAAAGTACGCACAG
-GAATTATTCAGATGGAAAACATTAAAACAAGAAATTGCAAAGCGTAACACTTTAAAGCAA
-GTTAAGAATTTTAAAGACCTATAATTTTGCACCCTAAAATGACCAAAGGCTGGCACATTT
-TGTTATCTTCTATAAGAAACACATCATTGGATGCCACATGCAACGTGGCATCAGGTGTAA
-AAAAGCACCTGATGTGCTTTTTTTGCACATCAGGTCAGCAACCTTTTTATATCTGATTTG
-GAGACTATTAGTTTACTCGACTGTTACCATTTTGTGCTTAAAACAAACAGTATCATTAAT
-TCACAAGCTTTGGAATTCTTTCTCTTTATTTTCTTTTCTCTACTTCCAACACTAATCAGT
-TCCTtgttgcccaagctggagtgcagtggcacaatcgtagctcactgccacttcaaattc
-ctgggctcaagtaatcctcccacctcagcctcccaagtaactgaggctacaggcatgtgt
-caccacacctggcCCACTCATCTTTAAATAAGACAGAGAAGTAATTATAGCCAAAAGGGA
-ATAGAAAATGCAAACCCAGAGATATAAGCAAGCAAGGAAGCCTGGAAAGCCTTTGTTGAT
-CCTGAAAATTAGAATTTTGTTCTCACATAAACCAAAGCCCAGGGCTCTCACAAGACAAAA
-AGTCTAATAGGAGGCCCTCTTCATAAGGTGGGACTTCAGAGGCATACTTCCTAATGGTGA
-GAGTGACTAGGGAGTGGAAGATCCAGGGAGGAATTAAAGCCCTACTGAAGGGAATATCAT
-ATCTTAAGCTTGTTTTAAGGTGGTCTCTGGATTAGTGCCCATGCATACCTGATATAAGCA
-AGCTCTCCATGGAGGAAAGTACCTTACTGTGGGCCTCAAATGATCACTACAAATATCTAt
-ttttatttttattattttttatttttttgagacagagtctcgctctgtcacccaggctgg
-agtacagtggcctgatctcagctcactgcaagctctgcttcctgggttcacgccattctc
-ctgcctcagcctcccgagtagctgggactacaggagtccgccaccacgcccggctaattt
-tttttttttttttttttttaagtaaagacggggtttcaccgtgttagccaggacggtctc
-gatctcctgacctcgtgatccacccgccttggcctcccaaagtgctgggattacaggtgt
-gagccaccgcacccagccAATTATTTATTTTTAAATACAATGTCCTAGCAGATCTCAAAA
-AACAAGAGGAAAAATATAGTGAAATCGTTGGATATACttttttttttttttttttttgcc
-acaaagtcttgttctgccacccaggttagagtgcagtggcacgatctcagttcattgcaa
-cctctgcctcccaggttcaagtgattctcctgcctcagcctccagagtagctgggactac
-aggtgcatgccaccatgcccggctaatttttgtatttttagtagtgagggggttttgcca
-tgttttggccaggctggtcttgaacttctgacctcaagtgacccgcccatcttggcctcc
-caaagtgctgtgattataggcgtaagccaccgtgcccagccAGTTTGATATACTTTTAAT
-TGGTACTAGCAGAAAAGAGAATGGGATAAAGGCAGTAACTGAAGACAGTTGAAAATATCC
-CAGAAGCAATCAGACACAATCAAATTCCAGAAGCAAACAATTTccaaacaagatcaataa
-aaagaaatccaaaaccaaacatataattacaaaatagcaggaaaaaacaaagatgagttg
-ggtgtaatggcacaggcctatagtcccagctatttgggaggctgatacaggaagattgct
-tgtgcccaggagttggaggccagcctgggcaaaacagcaagaccttgtctcaaacaaaaa
-caaaaaactaaagacaagcaagtacagaaaaaggcagattatattcaaagagcaacatta
-gaacagctgatttttcaaaaccaacaatgaagccaagtagtttaatacctgcagtgtgct
-gaaaaaaataaatagccgccaaattaaaattctgttatcaagcaaatgtctctaaagaaa
-aaagaaaaataatcccattttggaaggtctgagttgaaagaaaaaataaagagcaaaaaa
-gaggaaaatttacagacagctccaaacaaacactgattatacaaaagaataacaatacct
-tgaggagctttaaaacatagaatacataacaataaaaacacagtgtattgaggagatttc
-aaagtattctttctaaaggtcttttattatatgaaaagaagataaaattataatatcagg
-ttttgctaagttatagctgcaagtcacaagatgtatgacaactaattacagaataaaaat
-agcatatatttccaaaccagaaagagggaaaagtaaaatcataaaaagaatccaaaagaa
-tgttaagaagggagaagaaaaaaatctagaacataagaagcataggggaagaaagttgaa
-ttggaatatgattaattatattaaatataagtggaataaattatccaggtaaaagacaaa
-gactatcatatcagactggattaaaaaagaaatccaaatgaaccagaataatccaaacaa
-ttctgaaaaataataaagctggaagaattatactaactgatcttaaacttattacaaagc
-tatagttgtcaaaacagtgtattggcaaaaggataatacatagatcaagggaacagaata
-aagagtacagaaatacactcacacaaacaaggccaattaatttttgacaaaggtacaaag
-gcagttcaatggagaaaggacatatatacatatatatataaatatattatgtattttttt
-cgagatagggtctgcctctggtgcccacgctggagtgcaggggcatgatctcaactcact
-gcaacctccgcctcctgggttcaagtgattctcctgcctcagcctccaaagtagctagga
-ccacaggagtgtgtcactatgccctgctaatttttgtatttttagtagagacagggtttc
-accatattgcctaggctggtctcaaatttctgagctcaactgatccacctgccttggcct
-cccaaagtgctgggattacaggcataataatcttttctataaattgttttggaagacttg
-gagatcaatatgcaaaatcataaactttaatctaaatctcacactttatataaagataat
-tcataatgaatcacagatatcaatgtaaaacttgggtcagatgcggtggctcatgactgt
-ataatcccaggctgggtgacaaggcaagactctacctctgggggggaaaaaaaaagatat
-aaatgtaaaattatcaaaccttcttgcaaccaggggttaggcagagtttgaagacatgac
-actaaaagcatgggctgtaaaactgataaactgaacttcatcaacgttaaaatatttctg
-ctctgtgaaagacactattaagaaaataagccagacacaagaagaatgtatttgcaaatc
-acaaatcgaataaagaacttgtatctgtaacattaaaaaactcaataagaaaacagctca
-atttaaaaatgggcaaaagacgtgaacatacacaccacaaaagaagatatacacataagt
-atatgaaaagatacacaacactgccagacagcagggaaaatgaaattaaatcatacaact
-accactacagatttattaaaatggctaaaatttaaaaaaacagaaaacaaaactatacca
-aaagctggtgtggatgcagagtaacagtaactaatacattcctggtaggaatgcaaaatg
-gttttggaaaacagtttggcagtttcttatagagttaaacatgtacttaagcatacaacc
-agcattcccactcctaggtatttactcaagagaaacggaaacccgtatctacacaaaaac
-ttatacacaaacatttaaggcagctttattcataattgtgaaaaaacagaaacaaccaag
-gtgtccaacagttacatgaacaaacaaatggtttgccatgtgatgcttagcaataaaaag
-gaacaaattactgatttgtgcaacaaaatggatgaatcGtttttctttttttggtagaga
-cagggtctcgctttgttgcccaggctggtctcaaacgtctagcctcaagtaatcctttgg
-cttcagtctcccaaagtgctaggattacaggtgtgagctgctacacctgaccaacatggt
-gaatcttaaaagtgaagaagccagaaacaaaagcctacatattgtatacttccatttata
-tcaggggtccccaatccccgggccatgggcctgtaccagttcatggcctgttaggaacca
-ggctacacagcaggaggtgagcagcgggagtcactcgcattactgcccgagctctgcctc
-ctgtcccatcagcaacagcattagattctcataggagaaccctattgtgaactgcacatg
-tgaggaatctaggAGGTGGAGCTCAATTTTTCTCCTTTAAGGAAAGGAAATAAGTAAGCA
-TGGAAAGAGAGCCTAAATTTCTCCCTTTCCATGCTTATTCATTACAAGGGTATTCCTAAG
-TCCAATGGGCTtggaaagggagaaatagcaactctacagtagaaaaacctggcagacttt
-actgaaatatcactagtgttaagtcactttgacatcatatgcccctgatataatgtgatg
-agaagggcacttcacctctgtggtagtcttctcaaaaatccataaccacaatttaatctt
-gagaaaacatcaaacctgtattgaaggacattctataacatacatcaccagtcttcttca
-aaagtttccaagtaatgaaaattaaagacagactaagaagcttcacagactggaggatac
-taaggagacatgatgactaaattaatgtggtatcctggactggctccttgaacagaaaaa
-ggatacaactggtaaaatccaaacaaagcctgtagtttagttaatagtattataccgatg
-ttaatttcttaattattttatttatttatttatttttagagatggggtctcactttgtca
-cccaggctggagtgcaatggtgtgatcctagctctcccagttcacagcagcctcaaactc
-ctgggctcaagcgatcctcctgccccagcctcctaagtagctaggactacaggcacatgc
-caccatgcccacctaacttctgagaaccaggttggtctcaaacgcctggcctcaagcaat
-cctccccaccacggcctccagagttactgggataacaggtgtgagccaccatgactggcc
-cagtttcttagtgttgatgacatatcacggttatggcaagatgtgaacattaggatatac
-tgagggaagcatatatggagattctatctgtaacttctgtaaacctaaaattttcaacat
-tacaagttAAATACTGCCAATATTTAACTTGAAATGCTAAAGAGGATGAGAtgctagaga
-agatgaggaaaaactgaaactcatacattgctagtgtgaacgcaaaatagtactgtatag
-ccattctagaaaacagtttggcaacttctttataaataagttaaatgtacatttttcata
-tgacccagcaatccaactcacagttatttaccctagaaaaatgaaaacttaggtccacaa
-aagcctataatgttatgttcacagcaactgtattcataatcaccaaagaatgaaaaccaa
-aatgtccttcaaggagtgaatggataaaaataactatagtctatccataaatggaatact
-actcagtaataaaaaggaactaaccatttacacacacaataactttgatgaatctcagag
-gcagtatgctgaatgaaataagccagtctcaaaatattacataatgtttgatttcattta
-tatgacattcacgaaaagataaaactgtagtgaggttgggcacggtggctcacgcctgta
-atcccagcactttgggaggccgaagcggatggatcacaaggtcaggagatcgagaccatc
-ctggctaacacggtgaaaccccgtctctactaaaaatataaaaaattagccgggagcggt
-ggtgggcgcctgtagtcccaactactcgggaggctgagcttgcagtgagctgagatcacg
-ccaatgcactccagcctgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaaa
-aaaaactgtagtaactcagaacagaacagtggttgctagagattaggggtgggaggctag
-gtatgttaccaagggtaacatgcagaaggtgatataactattctatgtcccagttgtgat
-ggtagttacttgaatctatgtatgtattaaaattcatagaacagtatacacaaaaaggag
-tcaattttactgtgtattaatttaaaaaaaaATTTAAAAAAAGGAAAAAAATTCTATCAC
-ATGCTGTCTAAAAGAGATACATCTAggccgggtgcagctgctcacgcctgtaatcccagc
-actttgggaggctgaggtgggcagatcacctgaggtcaggagctcaaaaccaccctggcc
-agtacagtgaaacccatctctactaaaaatacaaaaatgagctgggtgtggtggtgcgtg
-cctgtagtcccagctgctcttagaggctgaggcaggggaatcgcttgaaactctcgagag
-gcgaaggttgtagcaagataacgccattgcattccagcctgggagacagagggaggctcc
-ttctcaaaaaaaaaaaaaaaaaaaTTAATAAACAAATAAATAAAAGAGATACATCTaggc
-caggtgtggtggctcacttgaggtcaggagtttgagaccagcctggccaacacagcgaaa
-cctcatctctacttaaaaacaacaacaacaacaaaacacaaaaattagctgggtgtggtg
-gcgggtgcctataatcccagctactcaggaggctgaggctggagaatcgcttgaacctag
-gaggtggaggttgcagtgggcactccagcatgggtgacggagactccatctcaaaaaaaa
-aaaaaaaaaaaaaaGAGATACATCTAAAACATGGGGTATATATTATAtacacgatgtata
-catgcactgaaacatcacaatatatcccataaatatgtacaattatgtatcaattagaaa
-tTAAGAGCTGGGCACAGCTCAGGGGtccctgcactttgggagactgaagaggaaagatgg
-cttgaggctgagttcgtgaccagcctgggcaacacagcaagactaccatctctacagaaa
-aatttaaaagttagctaagtatggtgcatgcacctgtgtcctagctactcagaaggctga
-agtgatcatgtgaacctaggagtttgaggcttcagtgagctatgatcacagtgttgcact
-ccaacctggctgacagacactctgcctcaaaaTCAATCAATCaataaattttaaataaaa
-aaaaaCATAGGCTATAGAGAGTTTGTTCataaaaatacgatatttcaaaacgtgggatac
-aattaaagcaggacttagaaatttataaacttaggccaggtgtggttgctcatgcctgta
-atcccagcactttgggaggctgaggtgagtggattacttgaatctaggagttcgagacca
-gcctgggcaacatggcgagacctcgcctctataaaaataaaaattTTAAAAATCggctgg
-gcgcagtggctcacgcctgtaatcccagcactgtgggaggctgaggcgggcggatcacga
-ggtcagaagatcgagaccaccctggctaacatggtgaaaccccgtctctactaaaaatac
-aaaaattagctgggcatggtggcgggcgcctgtaatcccagctactcaggaggctgaggc
-aagagaatggcgtgaacccgggaggcagagcttgcagtgagccgagatcgtgccactgca
-ctccagcctgggcgacagagcgagactccatctcaaaaaaaaaaaaaaaaagaaaaaaaa
-aaTAATAATAATTAggctgtgcacagtggctaatgcctgtaatcccaacactttgggagg
-ctgaggccaaggtgtgaggattgcttgagctcaggagtttggagaccagcctaggcaaca
-tagtgagaccctgtctctatttttttaacttaaaactattaaaaaaaaaaaaaaaaaaaa
-aaagccaggtgtggtggcatgcacctgtggtccaactattcaggagtctgagatgggagg
-aacacttgagcctaggaggtggaggctgcagtgagctgtgattatgccactgcactctag
-cctgggcgacatagcaaggccctgattcgaaaataaaaaTTCATAAACTTGAACttagaa
-aagcaaactaaaaattaagaacttacacatatctcaataaatttgaaaacagaagcccag
-agaaactagaaggaaaaaaacgggaaaagcagcaatcaaagaaatatgaaacaaagaGGA
-TCCACAATACCAATTGAGTCTTTAAAAATGCTCGTgctgagcccgtggctcatgcctgta
-atcccaacactttgaaaggccaaggcaaaggattgtctgagtccaggagtttgagatcag
-cctgggcaacagagtgcaacccccaatctctacaaaaataatttaaaaattaggccaggc
-atggtggctcatgactgtaatcccaatacttaggaaggctgaagcgggaagactgcttga
-gcccaggagtttgagaccagcctgggcaatacagtgagactccatctcaaaaaaattgtt
-tttaataataaaaacaatggaaaaaattagctgagtcccagctactcaggaggctaaggc
-aggaagatcacttgagcccaggagtttgaggctgcagtgagctatgatcatgtcactgca
-ctctagccagggcgacagagaaagaccctgcctcTGCAGGTGGGGGGGAAGAAATTAAAA
-ATGTAAGTGTGCTTGATTTAAGAAAAAAAAAAAGAAGggccaggtgtgatggctcatacc
-tgtaatcccagcactttgggaggctgaagcaggcggatcacaaggtcaggagctcgagac
-cagtctggccaatatggtgaaaccccatctctactaaaaatataaaaaattagctgggtg
-tggtgccacacgcctgtagtcccagcaggaggataaggcaggagaatcgcttgaacccgg
-gaggcggcagaggttgcagtgagctgagatcatgccactgcactccagcctggcgacagt
-gagactctgtctcaaaaaaagaaagaaagaatgagagagagagagagaaagagagagaga
-cagacagagagagagagagagagagagagagagagagagagagagagaATGAATATTAGG
-GTAAATGTCCAATATCAAGAATGGAAATGAGGGAGTGAGGGATGAATTAGGGTAAATGTc
-cagtatcaagaatggaaatgatacatcactacagatcctacagatggtaaaaagataaga
-caatatcacgaacaactttgtgcccacaaacttgaaattcccagaagaaaaataatttat
-caaaactgatacaagaTCCCAGTCTGATTCTCAGGGAGAAAAAACAAAAACTGACACAAA
-AAATGAAAACCATAAATAGTCCCATAACCAATAAATTCAATCAGTATTGTTTCAACCTGT
-TCTATTCTAATGTCTTTGAACTGCACAGATTAACATTTTCAAAACATTTGTTTAAACTGA
-CTGAACTTGCTTCCCACTCCTCTCCAGGTCTCTGTGCTTTTATACATTGATTATGCCTTC
-CAATAGTGCTTGCTAGGGGAAATCCTACTCACCCTTCAAGAATCAGCAAACTTTACATCC
-ACTATGAAGCACACTATGAAGCATTCCCATCTTTCTCCAAAACAGGCCAAGTACCTCTTC
-TACAGGGCCAAAGCAACCCCATATACTCTCTGACATTGTCACACTGAATGTGTTTTGTTT
-ACATACACCTCTCTCCTCAGATTATGAATTCAAGTACTTGGACTTTGATTTATTTCTCTT
-GGTGGATGCCCCGTgtttcaccacactgcccaggctggtctcaaactcctgacctcaggt
-gatccaactgtttcagcctcccaaagtgctagggttacaggcatgagccactgtgcccgg
-ccTGTGGTTTTTAAAATGCTCCTCAGTCTTACCTATAAATGTTATTGCATCCATCCTTTT
-TAAACCAGGGGAAAAAGGTTTCCTACTATCACTTACCAAAGAGATGTGAAACTAGTCAGT
-ATGGGTGAATGATGTTTCTTGGAGATTTTATGAGGTTCCACGCTGCATGATTTACCATGT
-GATGAGCACACTGCTTGACAAGCCTTGATAGAGCTACAAAAACAGTTCAGTACTCCGTTA
-CTGAAAGGATCTTGGATTTAAAAGACATCATAAGGTTGCAGAAAGAATAAGTACACTAGA
-ACCACTACAACCTACATCTGATGTTGGATATGTTATTTAACCTACCTGATTAAAGTGAGA
-AAACTGCAGAATATAAGGATTATCACCCTTCCCCCACTCCCTTCTTTACTGCCATGGTGG
-CAGGTTACATAGCAGACAACCATCATCTCCGCAGGTGATCAATAACCAACAGCTAATAAG
-GTAGGTTGTCCTAAAACTGACAAAAATAGAATAGGCTGGAAGTAAGGGCAGTAAAAACTG
-GTTGCCTTTCAATTCTGAAGATATTATGTGAATGCCTATGTCAGTCACTGATTCTTGGGA
-TTTATCAtttttgtgtgtgtaacagggtcttgctctgtcacccagggtgggtgactgcag
-ccttgacctcccaggctcaagcaatcctcctccttcagcttccttagtagctgggaccat
-aggcatacactactgtcccctgctaattaaattttttcttttttttctttctttcttttg
-tttttttttctgagatgtcttttgtttttgttctgaggtcttgttatgttacccaggctg
-gtctggaagtcctaagctcaagcaatcctcctaccttggcctcccaacgtgctgggatta
-taggcatgagccaccatgcccagccAGATTTATCACTGTTAAACCAGCAAGTCCATGACC
-TAAGTAATGTCTTTCTCATTTTACAGAAGGCAAAACTGCATAACCTTCCCAATGTCAGAG
-GTAGTGATTGGAAAACATTCGTCTAGATTCACAGCCTATTCTTCTGTTCTACAGCAAGGG
-ACTGTAAACTGGTGACCACAAACACAGCCAACCCCCATACccatggtttcagttacccgc
-agtcaactgcagtctgaaaatattaaatggaaaattccagaaataaataagtcataagtt
-ttattttccatgtttgtttttagagacgaggattcactcagtcacccaggctggagtgca
-gtggtgcaaccgtagctcactgtagcagcctctacctcccatctcagcctcccttgtagc
-tgggaccacgggcatgcaccaccactcctggctattttttttttttttttgtaaagaagg
-tttctcactatgttgcccgggctagtcttgaactcctgggctcaagcaatcctcccgcct
-taccctcccaaagtgctgggattacaggcatgagccattgcacccagccatgttttaaat
-tgtacatggttctgagtaatgtgatgaaatcttgcaccatctagtaccatccagccctgg
-atgtgaatcatccctttgtccagctgtatatgccacctgctcattagtcacttggtagcc
-ttcttggttacttgaatgttgcagtattgcagtgcttgtcttcaagttacccttatttta
-cttaagaaatgccccaaagtgcaagagtagcgatgctgagaatctggaaatgccaatgtg
-aagctgtaaagtgcttcctttaagtaaaaaggtaaaagttcttgacttaatatggaaaaa
-aaaatcatatgtggaaattgctaagatctatggtaagaacaaatcttctatcagtgataa
-tgtgaagagggaaaaataaattcacatttgttttgctgttgtacctcaaactgcaaaagt
-tatgaccgcagtatgtgataaatgcttagttaaaatggaaaaggcattaaatttgtgggt
-agaagacatcaacagaaaactgtgttccaactgatgataatcaggtttggtattatctgt
-ggtttcaggcatccactggggatcttggaatatatttcccacagatggctgggaacagga
-ctactCTGTGTGTATATCTCCTATTTGGCTCACATATTACTTTTAAAAattgagataaaa
-tccatgtaacataaaactcatcattttagggtacaatcagtaccctaaaatggtgtgttt
-tcgtatattcacaatgctgtggaaccatcaccactatctgattccagaacacttcatcgc
-cccaaaaagaaacccagtacctcagaggattaactcccaatagcctcttcctacaatcct
-ctggcaaccaataatctgctttctgtcttcatgtatttgcctattatggacatttcacat
-aaatggaatcatgcaatatgtggcctcttccacttagcaaaatgtctacaagtttatcca
-cgttgttgcaagtatcagtaattcatttccttttacagctgaattcactgtataaataca
-tcacattctggttgtccattcactgacagatatttggactgtctccactttttggctact
-atgaaataatgtcgctaggtgcatatgtgtacaagtttttCACtttttttcctttttttt
-tttttttttagagtcaggaccttgctctgtcacccaggctggagtgcaatggcatgatca
-tagttcacttcactgcagcctcacactcctgagctcaagtgatcctcctacctcagtctt
-ccaagtagctgggactatgggtgtgcgccaccacgcccagttaattttctgcatttttag
-tagagacagggtttcgccatgttgcccaggctggtctcgaactcctggattcaagcgatc
-atcccatcttagccttccaaagtgttgggactacagtatgagccacagtgcccagccTTC
-ACACTGTTTTTAAAAAGTAAATCAGGggccaggcatagtggctcacacctgtaaccccac
-cagtttgggaggctgaggcaggcggattacctgaggtcaggagttcatgacagccttggc
-caacatgatgaaaccccatttgtactaaaaatacaaaattagccaggtgtggtggtgggc
-acctgtaatctcagctacttgggagcctgagacaggagaatcacttgaacctgggaggca
-gaggttacagtgagctgagatcgcgccattgcactccagcctgggtgaaaagagtgaaat
-tccgtctcaaaaaacaaaagaaaaGGTATTAAGGTGAATTATGTATTAAAATTTTTCACA
-ATTAATATTTTTCAAAGTGACAGTTACCAAAATTAAAAAAAAATTTAACTTTCTATTTCT
-TAAAAGAAATAAAGCAGGAGGGAGGGCAGGTAGGTCTGTCTGTCTGGTAACAATGACTCT
-TCATTCCTGCACTGACAAAAACCTGCTGGATATGCTAAGCTGTGACTGTCCAACAACTGG
-CTCTTTTAACAGACACCCAATGGAGATACCACACGTAAACCTGGACAACTCTTCATTTAC
-CTTATTGACTCGACTCCTGAAGGCATTTGAGCAATCAATCCCTGGTTTATACTAAATATA
-TAAATTTACAAATAATAAGATGGGGGAACTCTTATTTAGACTACACAAATTTTGGAACTG
-AAAATGCAGCTCAACAATGAGATCAGTGGCCATGAACTCTCTGGTAAATGTATATAAAGC
-AGCATGTACATGTACATTTTTTTTTGAAGAAAAAAATTATTACAGGCTCAGGAAATCTGT
-AAACTCCAGCAAAATTAATAATTCCTGAGTTAGACAAACAGAAACTCATCTAAGAAGGCT
-AACTTGGTGATTTACATAAATATTAAAAAATTAAACTGCTCAAACTAAGTATATGCCATT
-CTTTCCTGAAGGAAGACAAGAAGACAATGTATCCTAGGCTTCAGAGTATGAGACCCAAGC
-TTGATGAATGATTAACAAAATGTCAGCCTCAGAAAAGATACAGTAGCATTCAGAGTTAGT
-CAGGTAGAGATAACAGTTTTACAAAAGGGAACTTTACTTCTGCCTCACATTACTGCTTAG
-AAAATAAGAACTTGAATTTCTTCACTACTGTCCAACCTTAAATTGTTCACAGTCTTGTAT
-TTTAAAGCATATCCTTTGAATCATGTGTCCAAAGAGAATTACTTGTGGGTCAGAGAGGTA
-CCTTAAAATGGCTTTAAAAACTTAAAACCAAGATTATTTTCAGATTGTTTACCCCCTTGA
-ATCTTAAAACTGTTCAGATATCCAATTACTGAGCTTTCTAAATTAGTGCTCCCAGTTTTT
-CTAAACTTTTAACtttttttttttttgagatggagtctcgctctgtcgccaggcctggag
-tgcagtggcacgctctcggcttactgcaacctccgcctcctgggttcaagcgattccccc
-gcctcagcctcctgagtatctggactacaggcaagcgccaccatgcccggctaatttttt
-tttttttttttttttgtattttagtagagacagggtttcaccatgttggccaggatggtc
-ttgaactcctgatcttgtgatctgcccgcctcggcctcccaaagtgctgggattacaggt
-gtgagccactgctcccagtcTTTTTTACAGTCAAGACAGAAAATAATATTTGTATGGCAC
-AATGGGGTAAATGATCAAGACTGCTCTGGATCTGAGGTCATTAGTTTGGATGCTGTATCC
-AAACTATATTCTGCATGAATGGCCAGAGGTGTGAGGGGACCAGTATCTCAACACATCTGT
-AACGCACCCTAACACAATACACTGGTTGAGAAATTCTAGTTTAAATAACTTGTGGAGATC
-ACGACCTGAATAGTCAAAATCCATGCAGCAGGTTGAGAAAACTATTTCACAATTCCTCTT
-ATTTCAAGAGATACGCAATCACCTTTTGCAGCTTTCAAGTATAGACCAGATGTACTAACA
-GGCAACCATTTCGTCTGGAAGATCATCTATTTGGAGGTCACTGACACAAAAAAACAAAAA
-CAACAAAGACAAAACAAGCCTCCTTACCCTAGCTCAGAAGGATAAGCCAAAAGAAAACAG
-GTTAACGGTAAAAATGTATGATTAAATGAAGTTATTGTTTTTTTTCCTCCACTTCATATT
-GATTCTCTTTTCCCATGTCAATTTAAGGTGGTAACCATGGCCAACAACATTCTCTCTCAC
-CTATCATACTAATGCCATATAAGTAGTAGTGTTTTTGTTTTTTCAAGTGGGGAAATATAT
-ACAGCTCAAAAAAACAAAAAAATATCTAGCAACTAACTCCTTGGCAGTTCCCTTGACTCT
-CTGACCTTTAAGTCCCAAGGTTCTAAGTATACAATGAATAAGAAAACTACCTGTTCAAAC
-CCAACAGAATATGTTTTTTTCTGGTTTGATTAAGGCTTCGAATTTGGAACATAAATACTC
-TCAGTAATACTTAGTAATTCATGAAGTTACTGCTTGTGTAAACTTGCAGAATATTTAACT
-TTAGGAGATTATAAATCCTAACATGCCCCTAGGGGCCTTCTGCTTTTATTCCTACATACA
-AAACATACAACATGTTTGTTTTTAAAAACAATGCACATAGgccaggtgtggtggcacaca
-cctgtagtcccagctacttgggaggctgaggcagaagcatcacttgaacccaggaggcag
-aggttgcaatgagccgagatcatgtcactgcactccagcctgggtgacagagcgagacgc
-tgtctcaaaataaaTACATACATACATACAAAAAAATTAAACCAATACACGGAAGTATTA
-CTTCCATAAAACAAACCAGGAAGTACAGTAAAACAGAAAACATTAGCATTTGGGCCTTTT
-GTGTGAATTACATTTCTCCACCTTCAACCCAGAAAAGGGATCTGAGTGTCAATGTGACAT
-AAATGACATAGCAACAGTGTGAGGTCTCCCAATGAAGGGAGGTATTAGAAGAAAATCCAA
-GCAGTTTGATTTGGATTAATAGTTCTACCCCAAACACCTAAGAGAAATCGGAATTCCAGT
-ACTGTCTCTTACAATATAGTCATCATCTATACACCTTTTTACCACGCCATATAAGCAAAA
-TAAAGTCACAATGTGAAACTTTACTCCACTGGCTATTACCCTCTGGAACCAAAAGATGGA
-AAACTTCATTTGGGATATACAGTAATCTAAAGAAAAATTCAGCACTTATGAATGTAATAA
-CTACTGTTACCATTTGAATGCCTCTTACAAACCAGGCACAGTATCAGATGCAtattctga
-ttttagaaataaacagattcagaggttaaataatctgccaaaaacaacaggattactaag
-tggtggaagccagatctgtttaggatccaaagcctaaataggttcttttcactAAATTTA
-ATACTATTTCCTTAGTTCTCCAAACTGATTTATTAACAGCCTATCCAAAACACTATAATA
-AAATGAACTGCTTTAAATTTGGAGGCAAGGTAGGGGTGGGATACTGAGTTTCAATAATCA
-GGTTTCTTCATTATTCTTTTACCTGAATGGGCTGGCCACCAGGCCACAATTGTATAAAAA
-TCAGATTTTAAATGATGGAAAAGCTTTTCTGTGTGGCTACTGAAGGGAGAAAGGAAGACA
-ACTGAGACATGCCCCACCTTGCTGGCTGGGGGCTGGTGACATCTGTGGGCCTCAGTGTTG
-GACTCCAGATGCAACAAAGCCTAAAGTTTTGAATATGTATGAAGGTCAATGTGATGTTTT
-CCAAAAACAGTCATAAAAGATGGCTGTGAAAAACCCCCTAGTATAACAACTGTATGTAAC
-AAGAGCATATAGGTAGCTGCAGATGAATGCTCAGGTCCTTAGCTGTGGTGTTTAAAAATT
-CTTCAGACCAggctgggtgcagtggctcacacctgcaatcccagcactttgggaggccga
-gatgggtggattgcctgagctcaggtgttagagaccagcctgggaaacacagtgaaaccc
-catctctactaaaatacaaaaaaaaaaaaaagccaggcgtggcagcgtgcgcctgtagtc
-ccagctacttgggaggctgaggcaggagaattgcttgaacccgggaggtggaggttgcag
-tgagccaaggtcgtgccactgcactccagcctggcaacagagtgagatgctatctcccaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTTTCTTCGGACCAgtgtggtggctcatgag
-tgtaatctcagcactttgggaggctgagttaagaggactgcttgagcccaggagtttgag
-accagcctgggcaacatggtgagaccttgtctctacaaaaaaAATTaacaactacccaca
-aagaaaaccctagctcaagatggcttcactggAAGGAAAAATGAACTGGTCAGGAAGACA
-GACAAATAGAAGCAAATAATGAAAGCATTTTATTTGACATTGATAACCTTCTCACAATAA
-ATTATGTGGCAAAATACATGCTTGAATACTTAATTGCTAGGCAATAGTCTATTTTCATTT
-TTTCACAAAAGGTAGACAACTCCAAAGCAGATGGCCATTTGTAGCCATTCTATATAATCA
-TAAATACACAAAACACTggccgggcgcggtggctcacgcctgtaaccccagcactttggg
-aggctgaggcgggtggatcacctgaggtcaggagtttgaggccagcgtggccaacatggc
-gacaccccgcctctactaaaaatacaaaaattagcccggtggggtggcatgcacctgtaa
-tcccagttacttaggaggctgagagaggagaatcacttgaacccaggaggcagagattgc
-gccactgcactccagcttgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaa
-aaGTTTTAAAGTGCCGATAAATACAAGTTCCTGGTCTGCCTACAGTTTATCACTTAATAA
-TACAAAGCAAACAAGAAAGCAAGTTAGTGGATTACCTGAGAGAGCAAGACATAGAGAAGA
-TGTTAATGCAGGGAGCTGGCCTTCTCCAAACATATCCCTAACACACAATATTCAAGCAAT
-TCCCAAACTGTGATCAGAGAACCACTGGGAGTAAGACCTCTGATCTATATTTACAAGTCT
-ATAGGTGAGCAAAGGTAGACCTTTTCCTGAGTCTGAGATGGGAATATTACCTTCTCTATC
-TAGAAGCAAAAGAATCCTAGACTCACCAGGACTAGGTAATAGACACTGTACACGAGTAAT
-TGAGGTAATCTACACTGGGCGTGACTTACATACTGATCCACCCCTAGGCAGCAATTCATA
-CCTCACCCACCCAACAGGCTACATTAGAAACAAGGAAGTACAGGTCAAAAGTCTCATTAA
-AAAAATAAGAACTCTTGGCAGCAGAAAATGAAAATAAAGAATGAAGAATGACAGCACTGG
-CAATAAACACATTCTTTTCTCCGAAAGGGAAGGGAAAGAACTAATGTTGGGCACCCACAT
-GCCAGACATTTTATCAATTTTCTCCTTTAATCCTCAATAATCCTGAGATAATACTAGCTA
-GTACTCTAGTTAttaatcctcacaaaaatcctgaggtaggtactactaattcccatgtta
-caggtgaagaaaccaaaagttagtaagttgcccaaggtAGttgttatccgaactgtagag
-acaagaactcccagacttgaagaggttaagtaaacttccccaaactcaAAGTGGGAGTTC
-TTTCCCACTAACCTATTGCCTTCCCCTCCCTACCCGCAATCTCAATTAATTCTCTATTCT
-ACCCCCTTCTCATTTCTGCAGCTGTTTCAAAAACTACACCTAAGATACAAAGCAAATAGG
-AGTTATTATAAGAAAACACCTCCAAAATCTACTAAGTTGTGGTATGATATGCCTGTTATC
-AGAAAACGTCACTCAATTTTGAGCTTGGAGGGCAGTGACAGTTTGGAGATCTTtagcaca
-acgcctgccagaaacgtggcaggcgctcaggatctgctgaatgaaCAACATCTTCTGAGT
-GGTTATGAATTCAATAACCCAAAATGACCATCTCGTATTTCTGGATATGACATGATACCA
-TTTTTTGGAAAATAATTTACCCATTCATTTTAAACAGGGTAGCTTTCTTAAAATTTATAG
-AACATTGATGAGATAGCTAAACTGAGAAATGCCCATTAAAGCATTAGTCATAACTTCAGG
-AAAATTTCAAATGTTCACTTTTCCAAGCAAATTAAAATGTTTCAGCTAATAAAAACCTGT
-CAGAAAAACCCACAAGACAAGAAAGTATAAAAAGAAAAGAGCAGCCAATATAAGGGCATT
-TAAGATGTCACACATAAAAAATTATAAAACATTAATCTAACTTGTACCTTGGTATTTAAC
-CCTAAAACTGTCACCTCAGATAACACAATATTTTCTATGCAAGAAAACATTATCACCACG
-AATGTAAAGAAGCTTGCCGACCATAGCAACTGTTGCTACGTAGGGTTTTTTAATGTCTAA
-GACTGAAAGACAGAATTTGTAGAAACCAGTTAAAATGCCACTCTTAGCAGTATCTTGTGA
-TACTGTGAATGCTTTCACCTTAAACTTTTTAAAAGACTCAATCTTTGACTTCTACATGTG
-AAAAAAAAAAAGTACATCTGGGAGCACTCAACGTAAGAAAACTACCAATTGTCTATAACC
-CAATGAAAATACATCCTTTGTTACAATGACAGCAGCTACTTTTCCTTAATAATCCTAGAG
-GAATTTCTTCATTTGAAAAGCTGGCTGGCCTAGATTTCTCTATAAACTAAATGACATGCT
-ACTTTCGAAATTATCCATTTCAGAAGTTCAAAGAAATTCAGGTATAAGAACACATTAATA
-CTCTCATGAAACAAACCTTATCCAGGTTACCCACGAATTGTGACAGATCAAAACCCAGTT
-TCTCATTTCAAATCAAGTATCACATTATTTATTACCTTAAAATACTAAGCCCTTACCTAA
-TTCAATGGCAAATCATATTGGTTTTCAGTTTCTGAACTTGTACAAATCATACTGTAATAT
-TTATGCAAAAGTTGTCATATAGTTGAATATTATAGACAGTTAACATCttttttttttttt
-tttgagacggagtcttgctctgtcccccaggctggagtgcagtggcgtgatcttgactca
-ctgcaaccaacctccgtctcccaggttcaagtgattctcagcctcctgagtagctgggac
-cacaggcacgcacctccacactcagctaattttagtagagatggggttttaccatgttgg
-ccaggctggtcttgtcctgacctcaagtcatctgcccacctcggcctctcaaagaactgg
-gattacaggtgtgagccaccatgcccggccAACAGTAGAAAAGGGTACTCAGGGAACATA
-GTTCAAAAGTCATGATTCTCTATTGGCTGGACCAGGATTCTAGACTAGCTCTAGGGCTGA
-GATATCTTAGTAGACCAGTTAACATTCATGTGGCCCAATTTCCCTTACTCTAAACCCAAA
-GTCAAACATAACCTCTAAAGTCTTTCATACCCTGAAATGCTAATCTTGTAATCATCTTTC
-TATTCAGGTAATAACTCAAAAGAAATGGTCTCACTTCCTTCATCCTCTGACTAAAGTTTA
-GTTAGTCCATATTTTATGAATCCAATTAATAGGATACTTTAAAGAACAAAAAGAAAAGAC
-TTTTCTTAAAAGCTAGAAACTCCATTCTGTAGTGATGATTCCCAGATCTGACTCTTAAAC
-TCAACAACCTCAACAGACAATGACAGGGAGAAAAGATCTTACAAGTTTGAGCTGAGCTGG
-GGTGGGGTGGGAGGTGTGAGAGAACAGAGAGACAGTTACAAATTCACAAAAATGTATCAC
-CCATTTCCATCTCCTCTAAAAAAATATGAAATAAGCCTTAAAAGGCTGTCATAGAAACCC
-ATTATTAAGCCAATAAAAACTAATGAAGAAATTATGTCATTTATCCAAGATATGGAAGAA
-CCACCTATTTACAGAAATCCTACCAATGTCCTAGACCTTCAGAAACTACATCTCACTAAG
-CTGACCATCAAGCCCCTTCAAACTGCATCTAAGGACAATAATAATATTCAAACATCAAGA
-AACAGGCACAGGTTCCACTCAACACCATTATTCCGTGGAGTCTTCCAGGACTAAATTGTT
-TTATAGAATCTTTGCTATCTTTGTTCTCTAGAAAATGATATCCCAAAGACTCTAAAATAA
-AACCAGCAAAACCCCtgtatttgttttccattgtgtcataacaaattatcacaaacaaaa
-caacacaaatggattatcttacagaagtcagtgggcttgactgggtctcacaagggctaa
-atgagggtatccagtgggtgggttccctgctggaaactctggggaaaatttgcttccaca
-ttcattcaagctattggctgaatttagttccttgcagctgtaggactgagttcccacttc
-cttgctggttgtcagctgggactggcctttcctactagaggctgcctgcattccccgtct
-cacactttcaatctggtcccctccagtaacggcaggctgagtccttctcatgcttcaaat
-ttgacttccccttctgcctcatctctgacaccagccagaaaaagttctctgcttttaagt
-gcttatgtgagtagaataaacccacccagaaaatccaagataatctacctaagatcctta
-actttaattaaatctacttaacatattcatgttccagggtttatagtatggaaatcgtag
-gggagccattctgcttaccgcagtctgccttctggtttccaaggattcatctctctctca
-aatgcaaaatacatccatcccatcccaaggtcccaaaggtttcccatctaaagcttatca
-tttcagaagtcccaaatctcattcatctattcaggtgtggatgaggttctggggacaaaa
-cagtaagtccaattcctggggcacaattcctaaagaaacaagttctctactcccaacata
-ccactgtgagacatgtagagaataacagttagacattccagttcaaatgggcaaaatgta
-aaagaaaacagagcctccggtccaaagcagtttcaaaatctagggaatctccattccatt
-tcaaagcctgggaaaaatcctctccagcttttagctccacccctctgggctctcctatct
-ccgtctgagtcaccctgattcttttatgaaaagcaacacattcacatgtgagtagtttta
-tcagcctgcttcctatcagtagaatttggggggtccaacagccctattactttctgtctc
-tttcaatccaaactagaactgtttatgttggcataaaattctcaagaacctaatgggctg
-tggaagtattccacatgggtccactccattaaagttcacattcacaaataaaccaggctg
-cacatttaatactttgcttggaaatctcagctaaatatacaagttcatcacttgcaaatt
-tggctttccatataaccataggatacaattctgctaaacttagttgctactatgtaacaa
-ggatcccctttctgccagtttccaataagaaagacctcacttctgtctgggccctcacta
-gcagagtcattaacatccatattgctactaaaagtatgtccTAGGCCttttcttttttga
-cagggtctcactctgccacccaggctggagtgcagtggtgccattaccgctcactgcagc
-cttgacttcctgggctcaagcgatcctcctgTGTtccaggccttttctatcatgcccctc
-aaaacaattctaacctttatctactgccactttcatttttaggtaatagtaccccactcc
-tggtaccaaaatctatactagtgttctactgctgccataacaaattaccacaaatgtagt
-agctaaaaataacacaaatttgttatctcacagttattgtaggtcagaagttgggtgggc
-ttggctagctaggtcttttgcttagggtctcacgaggccaaaaatcaaggtgtctcaagg
-ttgcattccttggtggaaactgggaaattcacttccaagctcaatcaggttgttgaccaa
-attcaggttccttctggttgcacaactgaggtccccatttctttctggttgtcagccagg
-gactggtctttgccactagaggctgcccacattccttctgataaactttccatgtggtcc
-tctctagcaaaggcaaatggagtccttctcatgcttcaaatctctgatttccttttctgc
-ccatttctctgatcccagttggagaaagttctctgcttttaaggacttaagtgactagat
-tcggcccacccagaaaatccaggataatttttctattttaagattcttaaccttaattac
-acctgccaagttccttttgccatgtaacacaggatagctacagattctggggatcaaggt
-atggcaccttgggaagagggagatgtaattctgcctactacaAATCCAAGTCCTATGGAA
-GGGTTTAAACTCACTTCCTAAAGAAAATCATCCCTTTCTTTAACAGAGTGTGAAGTAAAG
-ATGTATATATTTTACTTATGTGAAGTAAAGTATATATACATACATACATATGTCTTTACT
-TATGTGACACAAAGATGTATGTTCAGAGATAGAGACAATAGTAAAAACAAGGACTCACTC
-TGGATGAGTGAGTAGGAAAAGGACGCGCAGTATGGAAAAGGAGTTGCCACCTGTTTCATC
-CTCAAATTGCAAGGCACTTCACCCATAACTACTTAGAAACTAACCCATGCTCCTCCTTAA
-ATGTGTATTTCTCTTCTCTGTATTCCACAAAGGAGTACATAACTAGGCTTTTTTTTATTT
-TTAAAGAAAAGTCACCTCACGGGGACCTAACTGTATAATCAGTTGATTAATCAATCTAAG
-CAAATTTCCAATCTTGCATTCTTTCTTCAAGTCATACACCCTCCCGCAATAGCAAACCAA
-AGCCAAGTATTTCAAAGTCACAGAAGGACAAAAACATGCCCTGCTAAGACTGCAGGTGAA
-CTTTTGAGAATACCACGGAGGAGAACTAGTATTGGTACTGGACTTTCAGCCCCAGGTCCA
-CCAAGCCAGTAAAGCCAAATGACTTACAACAAAACCCTACAACAACTACAAAGATACTAC
-TCTAAAGCCCTGTCTACAGTCAAATTCTTGACTATAAATTTTACTTAGAACAGAAGAGCC
-CCAAATATACCAGCTAGTCCCTTTACAGTGACAGGTAAAAGCTACTTACTAcacttacta
-cctgccagacactgtagtaagcacttgacacaaattgtcttatttactcttctccgtaaa
-ctcacaagctagaaaataccatcatcccccttttacagacgggaaaactgaggcttagag
-agtttaggtcacacagctaagtagcaatggccctgatatttgagaacctaggcagtctgg
-tttttaaccactgggcctacactgCACTCCTCAGATGGAATGAAGTCTCCAATTCTTGGA
-AAAATCTTCCCTTCTTAGttttcttttttctttttgaggcggagtctcgctctgtcgccc
-aggctggagtgcagtggcggatctcagctcactgccacctccgcctcccaggttcaagcg
-attctcctgccttagcctcccgagtagctgggattacaggcgcgcgccaccaagcccggc
-tgatatttgcatttttagtacagacggggtttcaccgtgttggtcaggctggtctcgaac
-tcctgacctcgtgatccacccgcctcggcctcccagagtgctgggattacaggcgtgagc
-cacacgcccggccTCTCTTCTTAGTTTTCATTTCCTCTCCCCATGTCCCATTCTCGTAGA
-ATTAAACAGCTGAAAAGTAATCAAGTCTTCCCAAATAATTTGCCACCTTCTTTTCAAAAC
-TCTTTCCTCCACACAAAGCAATAGCCAAGATGCAACTTCTCCTGACCCTGACTCTGCTTC
-CCCAAAACAAACTACAGAAGCTCCACCCATCACCTGCTTAATCTAGCAATGTTCCAACAC
-TGCAAAAAACACACAACGAAAAACAAAATTGAAAAGTCCTACTCTTTCAAAAGGTCACCA
-ACATATGTATACCCTTAGCCAAGCTTTCTCTCCATACCTCTTTTTCTATCCAGGCTCCTA
-ACTAGTCCTTAACTCCAACTCCAGACGTTCTGCCCCACGTCTTGGTCCCTTCCCCCTTTC
-GCCCCAGCAACCCCGCCTGGGGTTCTCTCCACCTCGCACCCACTCTGCAGGTGGGAAGCT
-CAGCCCCGCCCAGAGGGACCCTAAGAAGGCCCCTACTCCAGCTGCCCAGTTTCGCGGGAG
-GGTTCACTGCACACTACCCAGCAGGCACCACTCCCTCCGCACCCTCCCCCAGCACCCCCC
-TGCGGCCCCACCCCTCAAGTTCCCTTCCCCCTCTGACGACCCCCTCCTCCAAGTTGTCCC
-CTAGTCCCCACCCAGTTCAGTCCTCTCCTCTGCAATAAGCTGGACTCCGGCAGCCGGTTC
-CCACCCTCACATCGGCCTCTGCCCCCAAACCTCGCCCTCCGCCCTGAGGGGTGGCCCCTG
-GGCCTCCCCGATGGGCTGCAGGGGCCTCGCTTGGTTTATGTGTGAAGGTGGGGGCAGGGG
-AAGGCGACGGGCCGCTCAGGAGTCTGCTGGAAGCGTGAGGGTCGGCCGCGCTCCGCTGCC
-CTATCCTGGGCCCACCCCACCCGCCAACGACCTCGCCTGGCTGCTCCCTAGGTACCTGTG
-GTGGAAGCGGCAGCGGCGGCGGCCGCTCTCCCCTCTGCTCACACAGACAATATGGCGGCG
-ATGGAGGAGGAGACACACGGCTCGGCCGCCAGCCGCAGGGACCAGAGCGAGGCTGCAGCC
-GCTGCTGCCGGAAGCGGAAACCCCCTCCTACCAGGAGGCGGGGCGAGACAGCTTCCGACT
-CCGCCCCCAGAGGAATCTCTCTGAATGCGGCCATGCTGGGATGTCCTATTGTAACCTTAG
-GGATTCAGTTCTGGCCTAGGGTGCAAAATGGAAGGAATCCCCAACGCAAAGCAGAATAAG
-GAGACTTGCAATAGTTAAGCGCATTTTATTTCAATAGTGTTAACAAGTGACAACAGAGAG
-AACACGAACCTCCCATTAGGTGAACAGTTGGTTTGACCCAAGTTAAGATGGCGGTACCCA
-GGTTTCCCACACTTCACCCAGCTGGCCCCCCTTTCTTGAAAAGAACCATGCGCGACCTGC
-AGAGCTGTAGAGCCAAGCATTCTGGGAGCTGAAGTCTCTTTTGCTCTGACCCCTCGTTTT
-AAATTAGGGTTTCAGCAACACTTTCTATTCAAACTTGGAGTTCGGAAGAAGTGAATGAAA
-GTTGGACCCTAGGAAGGGCATGGCGCAGGAGTCTGAGAAGTGAGGATACTAGCTCTCAAG
-AGACCAAGGCCCAATTCCTTCCTCCTACAGGAGTCCTGCCAAGAGCTGTGCGTCCAAAAT
-ACAGTGTTTTTTTTTCCTtctatctgcctcccacccctgctctccttgcccgagctacct
-ccccaaaacagccacaaagcactttctaccatgcagagctcatcatggtctccctatggt
-caaaaatctcccatggacctctttatgcaccaaagatagcccaaactcttcacttgacat
-tcagagtcctccataatttggccaaaccctcctttccagcctcctattctgccactctct
-tctcaaattccggaagattccacccacaagactgcaaacaattcctggaacttagctgtg
-ttgcctccctccctttacactggcagttacttctCTTACTGTCACCTCATGGACTGGATA
-ATTTCTGTATGCCGATTGAACTAAttcagggatcctttcctctaggggtctcctctctgt
-ttaactccctccaacccagacactatcagtcagtaacctgaggacctcagtctgtctcct
-ccatcagactgggagcccccagtggacagggctccatctgATGATCAACCTCTCCTTTGC
-AGGCCCTGATAAAAGCTGAAGCGTCTAAGAGTTGCTGAAAGGAGTTCAAGTATTAGTCTC
-ACCTCTGGTGGGACAGAGGTGTGAGCACTGGAACGAGGGTGAGGAGGCCAGGTTCTTTCA
-GTACCAACCATTATCCCTAACTGTCTCAGAATAGCTGGTTGTCTCAGGAATGGGCCTCTC
-CACCCTCCACAGCCCTGCCTTCACAGTTTGTCAGCTGACTAGCACCTCTGCTCCCAAAGA
-GGCACCTCTTCCCCATGTGGGGTTAGGGCTGGTGGTGGCTGCAGACTTATAGTGATGGCC
-TCAGGGAGGTGGCTGTGGCCTTCTCTGGACCTCATCTGCTAGACAGCTTGTGACATCTGA
-TCCCAATTGCCTGGGAACCCACAACAGTTTTTCTCTCAGTGTCCTGTAActgggcctcaa
-tttccccacttgtggactgaggaggttatacaagataatcccaaagtttctGGGAAGCCA
-TCTTCCAGGAAATGATACCCTTCTACCTACCTCTCGAACGTATCTTTTTGGCTCTTGTGG
-CTTTGTTTTTCCCAACTGTATTCAcatttgtttaactcacaacaattcatcatttgctat
-gagccagacactgtgctaggtactggggatgtgttatgaggaagacatacaccagttgct
-cactggtggagcttaccttctaaagtgagaagcaagtaatgcacaggtaaacaaatgcat
-aaacaaagtaatttcaggtagcaataagtgctacgaaaggaaaagataagtagctgtgaa
-gtatagagctttagcttgagtggttcagaaggtccctttgagaaggaaacagtaagtgca
-aacgtcccaaggcaggaaagagcatcacaagtttgaagaaggaggccatggtggctgaag
-cactgcaaataaagggaagaagaggaagaaatatggtgggagaggtgggcagggcattca
-ggtcatgataaggaagctgggttttcatctgagtgtagtgaggaTATTTCCCATTGCTTA
-GCCTTCATGCCTTTCCAATCTCAGCCTCTCTCACAGCATTAGTTCTTCATTCTTCTTCCT
-AGTTCTGGCCTCTATCCATGACTTCATTCAGAGGGCTCACCTGGGCACACATATACAACC
-CTCATACTCATGCAGGACATAATTGAAACCCAACTCCTGCCGTCTACTACGCCAGCCTCA
-TGTAGGTCTCCGGTCTCAAGAGGCTTCCCATCCCAAGTGTTCACCTAGTTGTAGACTTAA
-CATTTATCCTTAACTCTTACTGTCTCTGATCCCCCACATCACACCTCTCAGGCTAGTCTT
-TCTGCAAACAACAGCAGCAGAAGCAAGAGTTAAGATGTTGAGAGTACTTgcactgtgcca
-cacactgaatgttcatcatctcacttaatcctcatgtcaacctgatgaggtagaaaccaa
-aagtatctcaccgtacagatgaggagactcaggttcacagagatcacaggccatgcccaa
-ggtcacatgccggagatggagcttgcatttcaacctgggccATTAGAGTGActctctctc
-tctctctctcttttgagacaggatcttgctctgttgtccaggctggagtgcagtggcatg
-atcacagctcattataaccttgaactcctgtgcttaagcgatcctcccaccttagcctcc
-tgagtagctaggactacagacatgcaccaccatgcctggctcatttttaatttagtagta
-ttattattactattattattattgtacagatggggtcttgctatgttgccagggctggtc
-ttgaactcctaggctcaagcagttcccctgccttggcctcccaaagtgctagaattacag
-gcAAAAGTTTTAATCATGCACTAAGAACCTAAGtgtatttgctttctattgctgcttaac
-aaaatcaccccacaatatagtggcttaaaacaacaatattttatgtttgtgtggattggc
-agtttggacatgtctcagccaggacagctcttttctgctccaagtggtctttcctggctt
-actcttacgtttgctgtcagtgaacaggccagcaaactggttagaactccatggcctcat
-tcacatgtctggcagttggttggggttgttggcttgagtgccttggttctcctccatgtt
-gcttcttcagtaagctaactcaggcttacttacatgacggcccccagaagaaagaaaaca
-aaagcagcaagatctcttcagatctaggcttagaaatgatatagcatcattttcactgta
-ttatatcgatcaaaggcagtcatatggccagctcagattcaaggagagtagaaatagatt
-ccatctcttcatgagaaaaacatcaaatcatactgcaaggagtcatgtgtataaggaggg
-tggaattgttgtggccacctttgcaaacattatatcacaTAAGTAATCGTAGGCATggaa
-ctggttaaagaaattatggtacagccagacatggggctattcacagcaatgagaactaac
-atttttgagcacttaatatgtgtcagacactgtacaagatgctttacatctattaactca
-tttaatcctcacaacagctctctgtggccagtacatttttaatccccattttagagatta
-agaacaccaagtctcagagaggttaaacaactagtccaatgtcacacagcaagtgacaaa
-gccATTGAAAAGAATGAAGACAGTATTATGTCCTGACATAGAAATCTGGCCCTGACATTC
-TGTTATACGATACAAAGCAAGAGACAAACAGTAGTTTGATCAGAAAACATTTAAAAAGCA
-CATTTAAATAATTAGGAGATGTGTGTCttttttttttctgagatggagtttcactcttgt
-tgcccagggtggagtccaatgatgccatcttggctcactgcaacctccgccttctgggtt
-caagcgattctcctgcctcaacctcccgagtagctgggattacaggtgcccaccatgccc
-agctaatttttgtatttttagtagagatgggatttcaccatgttggccaggctggtcttg
-aactcctgacctcaggtgattgcctgtcttggcctcccaaagtcctgggattacaggcat
-gagccactgcgttcagctGGAGATGTATGTCTTATAAAAATTAGTAGAATAAAAATTTTT
-ATGTCTTATAAAAATTAGTAggccgggcgcggtggctgatgcctgtaatcccagcacttt
-gggaggccaaggcgggtggatcacaaggtcaggagatcgagaccaccctggctaacacgg
-tgaaaacttgtctctactaaaaatacaaaaattagccgggcatggtggtgggtgcctgta
-gtcccagctactcaggaggctgaggcaggagaatggcgtgaacccgggaggcagagcttg
-cagtgagctgagattgcaccactgcactccagcctgggcaacagagcgcgactctgtctc
-aaaaaaaataaataaatacaataaaTTAGTAGATCTATATGTCTTATAGTTTTAGATAAA
-TTCAGGAAGAATTTACTACAAACTATTAATGGAGCTTATCTTTGAAGAGGAGAAAAGGAG
-AAAACTTTTATTTAAACACCTCTGTTTGTGTTGCTTGAATAttttttttttttttttttt
-ttttttgagacagattcttgctctgttgcccaggctgaagtgcagtggcaatggtcacag
-cttgctgcagcctcaacctccagggctcaagtagtccttgcacctcagtctcccaagtag
-ttgagaccacaagtgtgtgccatcatgcctggctaatttatttttatgttttgtagagat
-agggtctccccatgctggccatgctggtcacaaactcctgggttcaagtgatcctcccgc
-cttggcctcgcaaagtgctggaattacaggcACAAAGCCTGGCCTTCTTTGAATTTTTTT
-ATAGCAATCATAAATTTTTATTTCAATACCTTATAAAGAAGAAAATGCTTTTAAAATGTC
-CTTCAACTTGGCTCCCACCTATGTCtttttctatttggttttatttttattgttttttgt
-tttcttttttgATACCACCCCAGCCCAACCCCTTATCAATTCTGACCCGAAGTTTTGTGG
-CTACCTTGAGGGCCCCTCCTCTCTCCCTCTGTAGTTCATCCTGCCTGCTGCTGGGGGAAA
-GCTCATTAACCATCATGTTCCATTTTTGTCTAAGAGTTTTCAATGGTATTGCATTGTCTA
-CACAGAAAGTCCAAACCCTTTGGCCTTGTACATTGGGTGTTTGTAAGTTTGACTCCAact
-tggttggattccagctctgtcacttactagcagcatatagttggataagttattagatct
-ctctgagcctcaatttccacatctttttttaaaaaaatgaaagAAAAgaccaggtgtggt
-ggctcatgcctgtaattccagcactttgggaggctgaggtgggtggatcacctgaggtca
-ggagtttgagaccagcctggccaacacagagaaaccctgtctctagtaaaaatacaaaaa
-ttagccgggcatggtggcacatggctgtaatcccagctactcgggaggctgaggcaggga
-gaattgcttgaacctggaaagtggaggttgcagtgagccgagattgtgccactgcactcc
-agctgagtgacagagcaaaactctgtctcaaaggaaagaaagaaagaaataaagaaagaa
-agaaagaaagaaagaaagaaaaaggaagagagagagagaaagaaaaagagaaaagaaaga
-aaAGGATATAGCATTACATATTTTGTGGCAAATTAGATTACTGTTCAGTGACTGTTCACT
-TTCTCACCCAGCCAGGGGCAATTAAtattttcctgccccattaatattaggcttggccat
-atggtttgctttggctagtggaatatacatatcagttacaatgtgcaaattccagcctag
-gccttaagaggtctCTCTTGTTTTCAATTGGCTGTCTTAGAATTTTCACCTCTTCCTTGA
-AGGGCGAGCTGTCATTGGTGCCTTACATCTTTTGAAACAGACTTCCAATCAAGGCTGTAG
-TAGGCAAGTCTGAGATAAGAATAGTTCTTTACTCTTTAGTTTTAGTTTGCattaattaaa
-ttataatttataGTTTTTCGTGAACTCCATATTTTTGAATGAGCGGAAGCTAAAGAGGTG
-GGAAGAGAATGCTCTGTCTCAATTTGGGAAAGCAGTAGCTTCTGTCCAATCCTCCAGCAT
-CAAACAGGCTAGTCCTAGAAGAATAAAGGACACACATAGTAGATCTGAAATTGAGTCAAC
-CCCAGCAGAACCCAGCCAAGATCAGCCAAACCCAAATGACTACATATGAGAGAGGGAGAA
-ATCAATGTTTGCTTCTGTCAGCACAGAGTCTTGGGGCAGTTTGATATGCAACATTATTat
-aggaatagccaactaacagattcacatcatagggcttttttcagggttaaataaatgaat
-acaggaaacgccttaaaaatacactggcatatagcaagggtgtaatgcatgagaactact
-attATtgggggtgcaactgtgaacaaaacaagcccctgttctcaaggatcttatgttctg
-cggagagatgtatggaatggcagctggtgatgagtgttatggaagaaaataaagcaggga
-aggagagggagtgctgaggtaaaatttcaaatgtgatcatcaacaaaacttcaacggaag
-gtgaaacttgaccaaatccaagaggaagtgaggcggggagccagaaagtatgtgggagaa
-gattgtcccaagcagagagaattcggatgggcaaagaccgtgaagtaggctcatgcctgg
-tgaatttcaggaatggtcagtagatagggcagctgagccgagggagtgGCTGATCTCGTC
-TCGGCTCTGCTGGGGTTGACTCAAATTCAGGTCTACTGCATGTGTCTTTTGTTCTTCTGG
-GACCAGCCTGTTTGATGCAGGAGGTTTGGACAGAAGggggacaatgtctcagaggttcac
-aaggtactggattgtgcacagccatgtagggctatcgtgaggacttgcttctgctctgaa
-tgaggtggggagctatgggagggttttgaccaggtggagagcaggctctgctatgcattt
-ttataggatttgtccagctgctaagtgtggactagatggaccgggaatgagggctgaagc
-agggagaaaagataagaagctactaccacaagccagacaagagatggtgttgctttgaac
-caaagttggactccgaggttcttttcaaagtaaaatcaaaagaatttactgataggtgtg
-gtatggggtgtttgaggaaaaaaagaattgaggatgactccaaggcttctggcctgagga
-actgaaagaaggaatttgccagtaactgagatgaagaaggctatagaagagaacttcttg
-gggcagggggagaaagagaggaggaattagcagttccatttgcgacttgttaaatttaag
-tgagctatgagacttccaagtgcagatgactaatcagaagttagatgtatgaatctgagc
-ccaggagagaggtccaagctggagacgtaatttttgggagttactatgtactaaattttg
-tcctccccaaatttatatattgaaaccctaacacccaatgtgacactatttggagacagg
-gtctttaaaggaggttaaaagagatcatagagtgggccctaattcaacaggactattgtc
-cttacaggaagatgagatatcagagctcattctctccccatgcaggtgctcagaggaaat
-gctgtgtgaggacacagcaagaaggcagccatttacaagccaggcagagagccttcacca
-gaaaccctccctgacagcaccttgatctcagatttccagcctctcagtgagaggctgaac
-tgtgagaaaataaatttctgttgtttaatcctctcagtctgtggcattttgttatggtag
-tttgagcagactactactgagtcatcaacagagaaatggtttttaaagccatgaggggcc
-aggcatggtggctcacacctgtaatcccagcactttgggaggctgaggtaggcagatcac
-ttgaagtcaggagtctgagaccagcctggccaacatggtaaaaccccgtctctattaaaa
-atacaaaaattagctgggtgtggcggtgtgtgcctgtaatcccagctacccaggaggctg
-aggcaggagaattgcttgaacccgggaggcggaggttgcagtgagctgagatcgagccac
-tgcactccagcctgggcgacaaggaagaaactgtctcaaaaataaataaataagtaaata
-gccataaggctgggtgaaattgcccagggaatgagtgtagacagagaaggaggaccaagg
-actgcgccctggggcatccaacagtaagagacaagcaaccagcaaaggagcctgagaagg
-agcagccagtggggtaagtgtcctggggaccaagtgaaaaacgtgtttcatggaaggagt
-gttgatcccctgatcccctgtgtcagatgctgctgaggggtcagaaaagaaaagaacaaa
-gagctgatttacaaagtggaggacattgttttgacaggagagagtgtaggtaggttggtg
-ggaacaaaagtctgattggagtgggattaagagagaataggagaaaatataaatatagac
-aTagaaaggaaggaaaaaaggaaggaaggaaggaaggagggCTCtttttttttttttctt
-tttgagatgggttctcactctgtcgcccaggttggagtgcagtggtgtgatctcagctca
-ctgcaacctccgcctcccaggttcaagcgattctcctgcctcagcctcccgagtagctgg
-gattacaggtgcgtgccaccacgtctggctaatttttgtatttttagtagagatggggtt
-ttgccatgttggccaggctagtctcaaactcctgacatcaggtgatctgcctgcctcagc
-ctcccaaagtgctgggattagaggtgtgagccaccacacctggccTggagagctcttttt
-aagagtagaaagctgggccaggcgcagtggctcatgcctgtaatcccagcactttgggag
-gccgaggcaggcggatcacctgagatcaggagtttgagaccagccgggccaacatggtga
-aacccagtctctactaaaaatacaaaaagttagccaggtgtggtggtgcatgcctgtaat
-cccagctcctcaggagactgagctaggacaattgcttgaacctgggaggtggaggttgca
-gtgagctgagatagtgccattgcactccagcccgggcaatgagagtgaaactctgtctca
-aaaaaaaaaaaaaaaaaaagtaggaagcaaatgactaaatgtagaagaataggagttggc
-aaccaccataggagacaatcattaatggacactgcagtagtggattaaagtttgatgaga
-aatagggcatttgcacagtctgagaatatctccccccaagatacttattaattacaaagg
-gtaaaatagtaactttacatggagaaacacagccaacaccacttgaccaagtgataaagt
-gaacatcaccagtagcagggcaaattgacatcatgtggcttccgggatgatgcactgagt
-gggacgtcgcgtcacgtcagtgatatttctgccaaagaggcataattgactcatgaggaa
-gcattagaaaagcccaaagtggccaggcacagtgactcacacctgtaatcccagcacttt
-gggaggctgaggtgggcagatcacgaggtcaggagttcgagacaagcctgaccaacatgg
-tgaaaccctgtttctactaaaaatacaaaaattagctgggcatggtggcgtgcgcctgta
-gtcccaactactcaggaggctgaggcaagaaaatcgcttgaacccaggaggcagaggttg
-cagtgagccgagattgcaccactgcactctagcctgggcaacagagcaagactccgtcta
-aaaaaaaaaaaatgtccaaagtgaggatatctttgcaagagaaccttactctttaaaaat
-gttgaagtggtaaaagacaaaggaagactgaggaatagttttagatgaaggagaataaag
-taattacaactactgaatgcaatgtgagatcctagattaagaaaaaatcattttcactta
-ctacaaaatatattaactagatgagtggtgaaatttgaataagatctgtagattagataa
-tggttttgcatcagtgtaaaacgtcccgattttggttattataagagaatgtccttcctt
-ttaggaaatgtgtactggtttttaggcctgtaacttaccataaaagagttcagggttgga
-ggaaagaaaaataaatgataaagcaaagatggtaaaatctgggtaatgggtatttggcta
-ttctgtttttgtttttgagacagggtctcactctgttacccaggctggagtgcagtggtg
-tgatcatagctcactgcagcctcaacctcccaggctcaagcaatgctcccacctcaacct
-cctgagtagctgggaccacagttgcgcaccaccacacctgactcatttttaaatattttt
-tagagatggggtctccctgtgttgcccaggctggtctcaaattctaggctcaagcaatcc
-tcccatctcagccttccaaaatgctgagattttaggtgttagccattgtggctggtgaga
-tttgagtgttctttgtactactttgtaacttttctgtaagtgacattatgtcaaaataaa
-TTCTAACaagagagaatagaaggaaaggaagtagagacatggaggcagtgagtccaggta
-actttttgaggagttttgctatagaactgaggacaggtggcaggtggagagcaaaatggg
-gtcaagataagttgttcaaaggcagaaattgtagcatgtttttatgctgatgagagagat
-tcagtagattggaaaaaaaagtaataatgcagacagagagagagaagagagtggctagaa
-tggtgtctctggagagaaggatgggatctagtatacaaatgggggctttgaccttggagc
-acagatggctcatccatggtcacagaagggagggcagagtatttgggtaccagattggta
-ggtaggtagctgtgcagtggaaatgtgtggaaatgctttctgattgctaccattttccct
-gtgaaataggaagcaaggtccttggctaagagtgagaatgggggagaaggtgatggaggt
-ttgaaaagataggaaggaagtgtgtagggaaaatgaatggatctactgtgattgtcaggc
-agaacaaaagacaccactgaagctatcatcattcaagtaaagtgaggccagtctacatgg
-tggtgtgtttttctccagccacattccactgcagggggacaaacacagagggatgtggag
-ttggcaccaactaacaggtgtttagtcagagagggtcagggggatcttgggagtatgcag
-cacagtggggataaagttatatcatggctgtaatccacaaagaaggaagtgaggacaagg
-aaacaccaaggttcagagaggtttagtgacttacccaagcttgcacagctagtgaataat
-gagttggtctctgcatccaggcagtgtggctcaaagcttattctctcaccaacccagtat
-acacaggctgtccccagggtgtagcatagcatttggcacatgtagCCTCTGCTAACAAGT
-GAATTAAATTGTACCTGGGGTTCTCTCTGCCTTTCATTCTATGCCTCCGAAGAATACTaa
-ataaaataaaataaaacaacaacaacataaaaACCTAGCTTCTTCCTTGCCTTCAAGCTG
-TCTTTGATGTCTTAGTGTGCACGATGAAGGAGATGTACCATCAGTCTCCTTTGGGTGGCC
-ATTGGTTCATGCCTGCAGTCTGGCTttcagcaggtcattctcagcacatactctggggca
-gacactttctcaggttctcagtacacagcgggaaacaagtcagtattcctggcctggtgg
-agctcagtcaagtggggagaagataagcagacaaatctagcattgcaaactgggattatc
-gccaggagagacaagtgggcggggtatgagagtgcatgagagtaaagccgacctagtgga
-gggcgggaagaagagtttacccaaggaaggtcaggaggggtggcccatggggctgactga
-agaggagaaacagcatgggcaaaggtcctaagataggaacatgcctgttaatggcatatc
-aaggaggccaatgtggtccagacgtatatggagagggtggagggtgggagggaacatagt
-gggaaatgagatgggagaggttggcaggatccactacaccctgtagaggaatctgattta
-agaacaatagggtttaagcaggggaatgatttcgtaaggttttacatttatcagccaggt
-gcggtggctcacgcctgtagtcccagcactttggaaggctgagatgggcggattgcttga
-gctcaggagttcaacatggggaaaccccatctgtaaaaaaatatacaaaaattaggctgg
-gcgtggtggctcatgcctgtaatcccagcactttgggaggctgaggagggcagattatga
-ggtcaggagatggagaccatcctggctagtagtgaaacccctggctagatggtgaaaccc
-catctctactaaaaatacagaaaaattagccgggcgtggtggcaggcgcctgtagtccca
-gctactcgggaggctgaggcaggagaatggtgtgaactgggagatggaacttgaagtgag
-ctgagatcatgccactgcactccagcctgggtgacagagcgagactccgtctcaaaaaaa
-aaaaaatatatatatatatatataaaatacaaaaattagcagggcgtggcatcatgcacc
-tgtattcccagctacttgggggctgaggcaggaggattgcatgaacccaaggagttgagg
-ctgcagtgagccgagatcaccccactgtgctctagcctcaatgacaaagtgagatcctgt
-ctcaacaacaacaaaaaaaattttttttatttataaaagacctctttggctgctgggcca
-ggagcagggaggacaggaggcaggggtaggagtggaggtgtgggaggagaggaagcagga
-gaggagtggaggtgtgggggcaggggaggcagtgggtgggccaggagagaggtgatgtgg
-catgggctaagatggaagcagtgcagataaagagaggtggattgacttgggacatatttt
-ggagctggagttcacCACAGGGAAACTGAGGCCCAGTGCTTCCAAGGATAGCGCTCCAGC
-TCTCCCAGCCCAATGGAAGCTTTTAGATACTTCTGCACTGTGGGGGTCACTTGTGGGTGG
-TTGCATTGGGGGACGAGTGGCCAGGACAGGTGACCTCTGACTTTTGTCTGGTGATGCGTG
-AGTCTCAGATTGGGCTTTGAAGGAGCCATGGGTACCTTGCTGGGCAGGTGGAGCATGTCC
-TTAGAGGATCATCCCACCATCCTCACgtaaccctgcaggtctcttctctctgagtcatag
-ttctcacacttgtaacatgaagagggacagtacccacttAGGCGACATCACCCCCTTCTT
-ACAGATGAGACAACTAggccaggtacagtagctcatgcctgtaatcccagcactgtggga
-ggctgaggcaggcagatcgcttgagcccacacatttgagaccagcctgggcaacatggca
-aaactctgaatctacagaaaatacaaagattagctgtgtgtggtggcatgcgcctgtagt
-cccagctacttgggagactgaggtaggaggatcacttgagcccaggaggtggaggttaca
-gtgagctgagatccaccactatactccagcctgggagacagattgagactttgtctcaaa
-aaacaaaaacaaaaacaaaaCCACCACCACCACCACAACAAAAAAACCCAAAAGAAAaca
-gatgagacaactgagcctcagtgaagggaagtggctctttagggtcatacaggagtaaag
-acacagccaagactagcacccaggctagagcctgggctgttgacctttctgcttcatcat
-ttgccTCCCATACCTTTCCTGGGCTCGTCAGTCCTGGGGATGCTCAACTCACCCAACACT
-GTGTTTCAAGCCCAGGGAATCCAGGATCGGTtagttcagtggttaggggtatgggctgct
-tggattctatttccagcgccaccaaggggccttattctgtctgaaccttggttttctcct
-ctgcaaaatggggctaacagtgcatacccttgtagcactgttacaaggtaggggaactgt
-acagatgtaaTGATTTGTGTATGTGAGTCATTTACAAGCCTTTGGAGTGGCTGGCACCCA
-TCATTGTTTGCTGTTGCTGTGATTATCATGCCATTGGACTgtggcttgaaaccctacagg
-cccaaggctccctttaatagtagttataatgcttcttttctaaaataaaatacatgaata
-acataacctgctgacgcacataattttttttttttgagaccgagtctcactctgtcatcc
-aggctggagtgcagcggcacaatctcggctcactgcaacctccgcctcctgggttcaagt
-gattatcctgcctcagcctcccgaataggtaagattacaggcgcatgccaccatgcccag
-ctaatttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcgat
-ctcttgacctcgtgatccttccgccttggcctcccaaagtgctgggattacaggagtgag
-ccaccgcgcccggccatgcatagttttaaacataaataatgtcctagttgtaatttaaaa
-gaaaataaagtgaaaataatttagaataaattaatatgtaaatgttccaggacaatgtgt
-agaaaccatcacaaagtagttgggtgggctctgctctgggtggaatcattgagaatctgc
-aggctgaattggtaacgccgcactggcggcacatgcactgtgactgcatggctgtgatag
-tctgaaatgtgagcagtctaggtaaagttctgaaccaaacacaatccattctgttcccaa
-tcgctacagactaaatgtttgtctcccccaaaatcttacgtcaaagcctaatccccagcg
-tgatggtattaggagatggggccttttggaggtgattaggttatgagtgcagagccctca
-tgagtgggattagtgcccttataaaagaggccccagagagctctgctgccccttctacca
-tgtgaggacacggtgagaagccatctatgaaccaggaagcggtcttcaccagacatggaa
-tctgccagctcctggatgttggacttgccaggcttcggatctgtaagaaataaatttctg
-ttgcttataagccaccagtctgtgtaatttgttacagtggcctgaactgactaagacacc
-aatttatgtgaaggttgctttcctggcagagtcgctgttattaaaaccaagcaaaCACac
-attgtactggaaaaggcaaaactatagagacaatgaaaagatcagtggttgccagggctc
-aggggaggggagagagggatgcacaggtggagcacagggcatttttagggcaggggacct
-cttctgtatgatgctgtaatggtagataaaggatgtatgtacttgtcaaaacccagcatg
-ggccgggcgcggtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcgga
-ttgcctgagctcaggagtttgcaaccagcctggcgctacagaaatcctgcttcaaatcca
-gaaaccccgtctctactaaaaaacacagaaaattagctgcgcgtggcggcatgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaatttcttgaacccgggaggtggagggt
-gcagtgagccgagatcgtgccactgcactccagcctgggtgacagagcgagactctgtct
-caaaaacaaaaaacaagcaaacaaaaaaacaaaaaaaaacaaaaaatccccagcatggta
-gaactgtgcaacacaaagagtgaactgtaaggtaactgtggatttcagttaataattgtg
-tgtcaaaattggtttatcaattgtaacagatgcaccatgcatttgcactaatgcaaaatg
-ttaataacaggagaaactgcatgtttggagaaggagtacaagggaactgtctatgatttc
-tgtgtcatttttctttttcttttctgagagagggtcttgctctgtcccccaggctaaagt
-acagtggcacgattagagtccactgcagcctcaaactcctaggttcaagcaatcctttag
-cctcagcctcccaagtagctaggaccacacacatgtgccaccatgctagggaaattaaaa
-aaaaaaattgtggagacaggttcttgctatcttgctcaggctggtctcaaactcttggcc
-tcaagcaatctccccatctcggcctcccaaagcactgggattacaggcgtgagccagtgt
-gcccagtctctgcacagttttgctctaagtctaaaacttctctaaaaaagtagtctatta
-aACATAAAAAACAAAATGAAAACCCCCacacattgtgtttatatgtaaaatagaattcgg
-tccttggctcagataattaaaaacaaggtttttacctacactaattaccaaagggagatt
-tgaaaatcatgACTTGAGATGCACTGCAGGATGTCTGCACCCTTGCTCCCCTCCTGCATG
-GCCGGGGCACCCCCTGGTCACTGGGAACTCTCCAACACTCTTGGTGACATTGCCCCCTTG
-AGGATCTCTGCACTGGATCTTTGCTCCCTCTCCTGCAGAACCCACAACTGCTGACTTACT
-GATCTTGGGTGATGTCTGATTAAAAAGTCTCCCCAGGCTTAGGAAACTCAAGGTGCCACT
-GTGGACACAGCTCCCACATTTCAGCTTccagaaatcctgcttcaaatccagatcccagca
-ctccctcattatgtggacttgaatgagtcacatcaatttattgagcttcagtttccccat
-tgatgggaaaaagggtgattgataatacctgccatactttatattcataatgaatataat
-gagtatattcattaactcagtaaatatatattgaacacctactgtctgtgctgagaattc
-aacagcgagcagaacaaacatctctgccttattggagcttatggtctcgtgatggggaca
-gacaaaaatcaaacaaatatatgagataatgtcagtgataaataaaaataaggcagagtc
-acagatggaaagagggtagggcaagggatccttggtaagtgtcgtcctggatggcttccc
-agaggagatggcatttgaacagggctgggaatgaagtgaaggaacgtgccacgaaagtct
-cagggcgaagaggcaacagcaaacaccaaaaccctgaggtgggaatgtgcttggtgaatt
-cgagaaacagcaaggaggccagtgaggccggtggggagtaagagggaagagaaagtgagg
-acagagagatctggagaagccagactctgtaAGGAATTGGGGGTTTATCCCAAGTGCAGC
-AGGGAGAAAACTTGAAGAGTTATTTACTGGGGAAGGCTTCCTGTGTTGTGTGCCCTTGCA
-GGTGAGAAAAGGTGATGAGCCCACTCTAAAGCCAACTCTATGGCCCATGACCGTGGTCTG
-GGACACTTTGAGCAGAAAGCGTCCTGTTCTCCTTGGAGTCAAAGGATTGGTGACAGTGTC
-TGCCATGCTGTAGTTTCCACAAAATACCACCAGGTGACGACTCTGGGTCACGCTTCTAAC
-TTGTGGGTTCTTGATTcctggagggcttttgctaaaacacagactgctcctggccccagc
-cttccaaagcgctggattacaggtgtgagccaccacacctggccTGACAGCCATGTTTTT
-AGCTTTTAAAAGCAAAACTTTGGCATTAGCACTATctctgtgagaggggccgatcattcc
-tgttttccagatgggtctatgaggctcagagaggagaaatcattgtctccatgagcaaaa
-gtgataaaactggcactcggcccccatgtctgcctgacttcaaggcccccaatccttcAG
-GGATGCCACACccatgtgcccagtgaggctctgggaattttaaaaactcatccaatttaa
-tccttacaactgaacaaatcccatgcaacgttaatgtctccattttagagatgagaaaac
-tgaggactagaactgagaaataagtcacctgatgtcgctgagctGTTCTAAGGCTGACAT
-catgcattttggagtcagagagacctgaatctcaactctagctcacactctccctagcta
-tgttcacctgatttctctgagccacagtttaagatgggaataagagcccctcctgcttgg
-tagctgtTGGTAATATTTATGAACAAATCTAGGCCTGGGGCCTCTTAGGCTTACAGTGGC
-ACCAGCCTCTTCTGTTCTGGAATCAGGAGGGAAAGTGATTGACCCGGCATTGGCCATCCC
-TGGCCTGGCTGGGATCAGAAGGGTCCTGGAAGGATAGGCAGTACCCGGCAAAGACTGGGG
-AGGGAGCTTGCTTAGCAGAGGTGTGAGGGACCTCACAGGAGTCCCCACAGGGTGTCCAGG
-TAGGCATAGGTATGGACGGCTGGACAGGGACTCCAGTTGGCCAACCAAGAACAGGGATAG
-AGCTTGGGCTTTGGGGTCAGGCAGCTTGAAGctctgggttccagctcccagatctgtaaa
-gtggaacagtaatgactcttccctgttttggattattgagaggaCCCCGGGGAACAGTGG
-GCTCAGCTGGAGGGATGACATTCTAAAGTGTTCTCTGGGACCTTAACCCCAGTCTCACAG
-GAGATGGGCCTTTGACTGTGGCCTTTCTGAAACCTGAGAATGTTAATGGTCACATAACGT
-TAGTAACAGTGATGGCAGATAACATCTGTCATGGATTAGAGGCCACTGGGAGGTTCTCCC
-TCACAGTTCTGGGTTCTTTGGATCAGAAACATGGCACAAACACACAGCCAAGGGTGGTTT
-AGGGCCTTGCAACTTACAAAGTCCTTCCATAGCATTGCACTGCACCCTGTGTTAAGATAA
-ATTCTCCAAGCTTTaagcactctgctaagtgcttgacaggccttattttattcttccaaa
-acactttgaagtgggtgttgccttgacccccattcttcagctgaggaaatgggaggcata
-gtgaggtcaagtgacttgcctaaggctactcagctggaacgtagagcgcctcatcccatg
-cttgactctgaGTAGAGCAAGGGTTGCACAGCAAGTCAGAGGCTGAGAGGGCCTTGGAAG
-GACCCGAGGCTCCCCTAGCCACTCCTGCCTGGCACCGATTCCTCCAATCCCACCTGGAAG
-TGGCTGGAAGTGAGAGGGAGAGGCGGTAGGGGTGCTGAGCCTGAAGGGAGGTTTCAGGAC
-TCAGGCTAGGAAGGCAGAGAAGGAGAGGAGGGACGGAAGTGCCCCTTCCCCCTAGAGCCA
-CTGAGGGGAGAGATAAAGGCATGAGGAGATGTAGCTGGGGCCAAGACAAGGAGGAAGAGA
-AGAGCTCAGGAGCTAGAAGGAACAACTATCTGGGGAGGAAGCCCCGTTCCAAGAGAGAAG
-GCCAGGGATGGGAAGGGGTGGGCCAGGCCCTTGGGCTGGGGTCCTGGGTCCCAGTTTTAG
-CAGGTAGCAAGACCCCGAACTGGATAGAGGGTTGCCTTCAGTAGATACCCTATCATTCCT
-GTGTTATGAGAGGTTGGGGCCACTTGAGGTGAGCCCAGGATTCAGCCTTCGAGGCTCAAC
-ACACTTGAGTCCAGCTGAATGACAGAATGAGCCATAGGACACTGTCCCAGGCCTGACttc
-cttccttcaacaaatatctatggaggattcaccaagggccaggctgggctcccagcagga
-aacaaagtccctctgaagagagactaacaccttcgttaaggagcccccaatctcatagga
-gagatggacaaaaagcagaaaatgaattggtatccagtatcacttttggctgtaaaggtg
-atcaggggaaaatgaatggattggagtctacctattttgtgatggcggtcagggagggcc
-cctctgagaaggtgtcatctgcacagaggcctgaaggagatgaggcagtagctatgaatc
-tgggggaagagcatttcaggcaagcgcaaaggccagggcaaaggccttgaggcaagaaga
-tgctgctgtggaggaaggagggcaccaagcaaggaggccagtgtggctgctggtgagaga
-taagagagtgaaggaagatgagggtagagtccggggggcagatcacatagggcctcaaag
-gccactctatggattttagctgcatctcatgtgacatggacattgaaggaTTTTTATGTG
-TGTGTGTTTGTTTGTTTGTTTGTTTttgagagggattctcgctctgtcacccaggctgga
-gtgcagtggcacatctcggctcactgcaacctccacctcccacattcaagcgattctctt
-gcctcagcctcccaagtagctgggattacaggtgtgtaccaccacgcttggctaattttt
-gtatttttagtagagacagggtttcaccatgttggccaagctggtcttgaactcctgacc
-tcaactgatccacctgcctcggcctcccaaagtgctgggactacaggtgtaggccactgt
-ggcctgtgacattggaaggttttgagcagaggtatgtgttgtgacctgactcaggtttta
-ccagaatccccctgagagatgttctggccaccactgaagaagactggagggtagagcagg
-caagggctgatgcagggagcccagtgaggaggctGGTCAATGAGCACAGCAGTTTGGCCA
-ACGATCTGGGGTGCTAAATATCAACAGAAACAAAaatatttattgcatgctttctgtggg
-tcacaaactattctaagtggttgcttgacatggaatgcttttaatcttcagtacagattt
-taggtagatcatatttttgtACATTTATGTCTATTTGTCTCTGGACTGATTtttttttaa
-ttgagatgaaattcacataatataaatcaaccatttgaaagtatacatctcagcggcatt
-tagtatattcacgacattgtacagccacacttctgtctagttccaaaatattttcaacac
-cccccccaaagaaactttgtacccatcaaagatagatgatatttttatcctaattttaca
-gatgaacaagcagaggcgtggacaagcagagtcacgtgccccaggtcacacagccaggaa
-atggaacaagctggCCACAGGTGTTGGGAGGAACATGTTGACAAGCTGCCCAGGATGGCC
-TGGAGGCCCCTTCGGGGTCCCCCAGGTAATAGCACCAAACTGCCttttatttttatttat
-ttattttgagacagaattttgttcttgtcacccaggttggagtgcaatagtgcaatcttg
-gctcactgcaacctccgcctcccgggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgtgccaccatgcctggctaattttttgtatttagtaaagacag
-ggtttcatcacgttggtcaggctggtctcgaactcctgacctcaggtaatccaccgcctc
-tgcctgccaaagtgctgggattacaggcgtgaaccatcatgtccagccCAAATTGCCTTT
-TAAGAAGGGCATGTCagccgggcgcggtggcttacacctgtaatcccagcattttgggag
-gctgaggcgggcggatcacctgacgtggtgagtttgagaccagcctgaacaacatggaga
-aacccgtctctactgaaaatacaagattagccgggcatggtggtttatgcctgtaatccc
-agctacttgggaggctgaggcaagagaatcacttgaacctgggaggtggaggaggttgcg
-gtgagccgagatcacgccattgcactccagtctgggcaacaagagtgaaacaatgtctca
-aaaaaaataaaaataaaaataaaaataaaaataaaaaAAAGAAGGACATGTCCTCACTTC
-TGGGCTTTTGTTTTGTGGAAGGGGTGGGATACATTTGAGGCCAGAAAACAGAAAGCACTG
-GGAAGGCTGAACAGTGGCCCCTGCACCCTCTCTcaggatggtgcacagaggagaatgggg
-actctggagccaggctgttgagttcaattcccttctcccacctttcttccatgttgtgaa
-gttgggataataagagcaccaatctcatcagtgttgggggaaagtgaatttcccatcagt
-agagctcagcactgcccgtagtatttgctcaatcaaCAGCAGCCTGCATTCTCTTTGCTG
-CCCTCTCCACTCCAGGAAATAAGTTAAGCAGGTACCTAAATGCAATCTCAGTGTTGGGCC
-TCGTAAAACATCTGGGACAAGACATCCTCCATTACCAGAAAAAATGCAGTCATAAAAATC
-TCAAGGTTGACAGGATAGTGCCCAtttttatttatttattattattattattattttgag
-agaaagcctcactctgtggcccaggctggaatgcagtggcacgatcttggctcactgcaa
-cctccacctcccaggttcaagcgattctcctggctcagcctcccgagtagctgggattac
-aggcacctgccaccacgcctggctaatttttgtatttttaggagagacagggtttcacta
-tgttggccaggctggtctcgagctcctgacctctagtgatctgcccgcctcggccaccca
-aagtgctgggattatagatgtgagccaccgcacccggccCTGATACCCATTTTTAAAAAT
-CACATACAATCAAAATTCAGGATATAATTTACATAAAAACAAAAGCACTCATTTTGTCCA
-TCCCTTGCTTTGGGTTTATCTACCGGTCTTGTTGACTCCATTGCTAATATACATCCAGGT
-CCCATCCCATCTTCCCAACCTTTCCCAGTCTTTCATCCTTCAGCTGCACCTCTATGGCAA
-GGAGCCACCTCATGAACATCAGTTTCAGACTTGACAGCTGATGGCCGGGGGTGCAcatgg
-gcttgtggagacacggtcagggagccctgggtctacacctgagtctgcctgggccgctgt
-ccgttgtgtaatcttcatcaggccacatcctctctctgagtctcagttttcttttcctta
-aattggagatgaaaaagtctgtctcacttggcagtcaagaaggtccaacaggataaCTTC
-ATCCATGGTGAGAGAGTGGAGGAGAGGCCCCCAGGAGGAGGCAGGGATCTCATTCTGCGG
-GTACTGTACTTGGTTCTGGGAGTGGGATGGCAGACAAGCGTGTCACTGTCTTTGTTCTCA
-GAGCTTTGGTTGTGGAACGGGAATGGGAAGGTAAGGGAGGGTACCCCTGGCAGGGGCACA
-GCATAAACCAGGGTGTGGAGATGGGATGGCGAGGCAGGACTGCCCCAGAACTCTGTCCCC
-AGGGGCTGGCAGTGCTGAGAGGGACAGAGGGAGAAGCGATTGTTTATTCTCAGCCTCAGG
-AGGACGCAGGAGAATCTCAGGCATCAAATTTAGTGCAGCACACCTGCCTAGGCAAAACTG
-GACAGCTCCACCTCAACTTTGTAGAGGGGCAGAGAAAGCTGTGGGGAACCACCTTCCTGC
-TCTTGTCATGAAGTCCTCCTCAACTGGAAGCCCAAGCTTCAGGCCAGGAACTTCCCCAGC
-AGAGGCAGCCTTCCCCAGGGGGCCAAGACCTTGGCAGAATGTCTGGGGTGCTCATGGCAG
-CGCCTCTCACCTGGCCCCTGCCAAATCAGTTTCTGCTTGGCCTCTGCAGGATCTGACCTC
-GTTGAGTCCCCAGGGCCCAGTTCTCTGCCTCTGAGGCTAAAAGTGAGATCGTTTCCTGGT
-TGAGGAGTGACTAAAAGACTTCTGTGTgtagagactgggttttgctgtgttggccaggct
-ggtctcgaactcctgaccccaagtgattcaccTTAAGGTGAATGTGTGGCTGTGTACGCG
-CACGTGCAGAGCAGAACCATCACTCTGCTTGGGCTAGGCAGCTGGACTAATCGTCCATTT
-CCCCCCGCCCGGAGGCCTCTTCCAGGCCCCCAGCTGCCCTGATGGGCCAGGTCAGCCCCC
-CCCACAGGAGCCCCCAGCCGCTCCCCATTCGGCTTTCCTTGTATTGTGCGCTGCCTGGTT
-TCTCGAGGAAATGGGGCGGCTGCTGGGTGCGGGGGCGGCCGCCAGCAGCCCCACCCCCTT
-CCCCCCATTGTCACTCCTGGCTTCTGCCCCTAGCCCCTGCTGCTGACACTAAAAATAGAC
-CTGTTCACAGGGAGACGGCCCCACCCCTGAGCGGGGCCCCAGGCTCAGTGTCAGGTTGGG
-TTTGCCAAGACAGAGCTGCCCTGGGGACTGAGGTGGCTCAGCTGAAAGACCGGGGTCGAA
-ACACGTTAGGgctgtgtgaccttaggtccccttttctcctctctgagcctcaatttcctc
-acctttaaaatggggtaaggctacctacctgctaaggttgctCTTGACAATGAACAGAAG
-CTGGGTGAGTCACAAGCGCACTTCGTTCTCGTCCTGCCCGTGGTTTGGTGCTGCCTGAGC
-GGCTTGAGAACCTGGAGGACAGATGGCATAACACACGCCTTCATCTTCAATCTGCCTTGA
-ATGATTGCCAAGGACTTCCAAATCCCCCTAAACAGAGGAGCTGGAAGAGCCCACTTGGGA
-ATCCAAAAGTGTCCGCAGCTCTGCTGTGTGAGCCCGGGTAGGTGCCTCCTCTCTGGCATC
-CATGagctcacacgtgaagtatgcagccaggctgggactcgaacctgtgtctgcagcctc
-tgaagactgttttttccgctttaaggggctgcctcCATGCTGATGACTCCAAGGACTTCC
-TGGCTGGGATAACCCTGCCTTTTCGTCTACAAACACATGATTCATGGTGAAGGAAGATGC
-TGGGCGGTGGGCATGGAAGCCTGAGCTGGGGGCTGGGTAGTTCCCCTTGAGCCCATGCAG
-ATGGGCAGCTGTCCTCAGATGCCACCCGCAGCCATTGGGTTGGGCCCTGCAAAGGAGATA
-CTGGCATGTGTCTGTCTACCAGGCTCTTTTTTGTTGTTGTTCCTTTGTCCTTTTTTTTAA
-ACCATGGAATATTTCAAATATGGGTCTTTCATATACATTCAAAACCTTGAACTCTTAGAA
-TTACTTTTGTCACAGTTGCAATTTTTTTTTAAAtttttatttcatttgtctatttatttt
-ttgagacggagtctcgctctgttacccaggttagagtgcagtgacctgatcttggctcac
-tgcaaccttcgcctcccaggttcaagcaattctcctgcctcagccttccaagtagctggg
-attacaggcacgcaccaccatgcccagctaatttttgtatttttagtagagacagggttt
-taccatgttggccaggctggtcttgaactcctaacctcaggtgatcggtccaccttggcc
-tcccaaagcgctgggattacaggtgtgagccagcgtgcctggccTGCAATTTGATATATG
-TCTATGTAATTACCTATCTCCCATTAATCCTGGGCCCTAGAACAGGGACTGAGACTTTAT
-TATTAATCCATGTATTCCCCCCCAAAACAAATACAGTACTGTTATTCTCCCACACAGACC
-CTGAGAGCAAGCAGACTTGTCTCTATTGTTTGTGTTTTGGGATTTGTGGGGACACCTTGT
-GACCCAGTTTTGTTGTAAATCTTGTCCATGGGGTTTTGGTTTTGCTACCTAATTGCTTTG
-CCAATTTTTATGTGGGGATTTAGAAAGATTTAAAAGCTGAGTTTTCCACTGCAGACATAC
-CCATATTCCCGAATCTTGACTCTTTCTAAATACATATGTACATGAGAAAAAAAAAATCAG
-CACTCAAGGTATTCAGTGACAGGTTTCTCTCAGAACCTGGAAATGCTGGAAATGACCACT
-GTTGCTTAGTCGGGGCTCCtttctttcttttttttttttttttgaggcagagtcttgctc
-tgtcgcctaggctggagcgcagtggcgcaatcttggctcactgcaacctctgcctcccgg
-gttcaaggaattctgcccaagcctcctgagtagctgggattacaggtgcatgccatgact
-cccggctaattttcgtatttttagtagagatggtgtttcaccatgttggccaggctggtc
-tcgaactcctgacctagtgatctgcccacctcggcctcccaaagtgctgggattacaggc
-gtgagccaccgcacccagccTGAGGCTCCTTTCTTATATTTTATGTGTATCAAGCAAACT
-TAGGTACCTGGTCTAGTTCTTACACAAAGAGTGTACTTCCCCACTTAAAAACGGCTACAT
-TGggctgggtgtggtggctcatgcctgtaatcccagcattttgggaggctgaggcgggtg
-gatcatttgaggtcagaagttcgagaccagcctggccaacatggtgaaaccctatctcta
-ctaaaaatacaaaaacattagcccggtgtggtggcagatgcctgtaatcccagctactct
-ggaggctgaggtgagagagtctctcgaacccaggaagcggaggttgcagtaagctgagat
-cacagcactgcactccagcctgggtgacagagcaagactctatctcaaataaataaataa
-ataaataaataaataaataaaataaaATGGCTACATTAAAAGTAggatttttagcttttg
-ttccatagacctcttcggcatatggtgaagtggggatggaccccttctcaaaatgtggtt
-tttttttaattagtctttttttttttttttttcaatagaggtggcgtctgactatgatgc
-ctagcctggtctccaactcctgggctcaagtgatcctcctgccttagccttccagacagc
-agggattacaggcatgagctactgcacctggatttttttttaatgttttataaatgcata
-aaataaaatgcacgatattacaaaggaaaccaattatactgaaatgctattactgcaata
-taaacaagggtttgtgatgcagtgatgaggtgaacttctttattagtacattaaataaca
-agatggggaagcaggttgcaggtcaccatgaacgtaaacaatatgtaatgttatctgcaa
-ccactgtgatatgaaatgaaagtatctttgacttctgttgtaacagtcactgctaaccct
-accatgcttcttgatccacattcatacttgaaggaaatgctgcatttcaattagaggtta
-gtgaatataaagttattttttcccacctaagttcatgaagtttctgagttctagatcagg
-taaagaacccctgCTAAAAATTGTGGCTGTCCCTCACTTGATTCAACCAGTCTCTTATTG
-AAAAGTCACCCCacctcagcatttcttcaaatctcatccttatgcagttggggaaactga
-ggcccaggctggagaacaaacttgggtcattctgccctggggggattgcagaatccagtg
-tcctgattcccggctcaggttattttccagctcctcccctaccagGCGGGTGGCAGGGAC
-CCCCCCTCGGCCCCACCTCCCTGCTCGCCAGGAGCAGCTGGCGTCCTGTCCCGAGAGTGA
-CCCAGCCCCGCCCCGCCCTCGCCCCACCCTGGCCGGCCAGCTGTGGATGTGACAGGAGGC
-TTGGCTCTGGCTCACTCCGGCACATTCCTGGCCCAGCCACTGTTTTCCTCTTCTTCTTTT
-TTTTTTTGGTGGTGACTTTTTCTCCCATACCCCTCCCACTCCTTTTCCTCAAAAATGCTG
-TGTCTTTCCCCAGAGGGTCCCTCTGGGCGGCTCCGGGAGGGAAATGTGGCCTGGATTTCC
-TGGAACGCGTGGAGCTGGAGTCTCAGCGCTGGGAGGAGGGAAGCTGTTGGCAGCAGGGCA
-CCCCCCCAACATAACTGGGCCTCCCTGGAGAAAGAGGGTGAGCGGAGCCTCAATATTCCC
-TTTGCACTGGGCCCTCTGAGCAGTGGCACCCGCAGCTGCAGCGAGTGGGCTGCTGCCTCG
-GGGATAGTGAGACGCCTCTAGGAAACCGCGgctctgtgatcttggggaagctgggcattc
-tctctgagcttgggtttccttgctccttagaactgaggatgtgatctggatctgccacag
-ctggtgggacagtccagtgaggcgatggctgtaCATGGTCCCTTTCCAAACAGGGAACAA
-GAAGCGAGGTGTTGGGGGCATCTGGGGATGCAGGTTTGGGGGCTGCATTTGGGGCAGCAG
-GGGTGGAACAGAGAATTTCCATCCTTCCTTCTTACCTTCATTCATTCATGAGACAAACGT
-GTATCAGACAATTACCATTGTGCCTCTCGGGGCTCacaataagagacaagtaaatgtctc
-ctgtaggggcaggtgcagatgagtgctctaagaaaaagtgaagcagggtGCAGGGATAGA
-GTTTCTGAGGGTGCTGGGGGGAGCTGCTCTGCTGGGGCACCACATGAGCccaggcagagg
-gagcagtgggtgctgaaggctctgaggtgggagcaagcaaggaagggaagagaaggcaag
-gtttgtgtggagtgggggagacagcagagagggctgtggggacttctgggtgaggcgagg
-actttggctcgattcatgggaagctacgaagggctttgagcctgcagtgacacagtctgT
-AAAGGACCCACGGGGCTCTACAGGAGGTgcgcacgtggaggagtgacttggaggccaagc
-agctggggtcctggcttcagctcctccctggctctgtgagcgtggacaggatgcttctcc
-ttgagcctcattttcctcctcagtagagtgggctcatggagctctgaagactaagaggaa
-gggTCATCAAAGTGATGACCCTTTGCCATCACTTTGCCTGTGAGCTACAGGTCTCTATAA
-GTGGGAGCTGTTTTTTTCTATGAGCCTCTGAGGATTGGAGCCACTTGCTTAGGGGGAGGC
-TTTGGGGACAGAGCCAAAGGCTGGTTCCGAGCCCAGGTAGAGCAGTGGCTGCTCAGATTT
-TGGGGACATGTGGTGTCATGATCTGGGAGGGGGATATTCTTGAGTTGTCTGCAGCCCTTT
-TCCCCTTATGGGTACGTGGCTGGATTTAGGGAACCCTAGGGCAAGGGAAGAAGGGCTAGG
-AGCTGCCCCTGAGATCTGTGAGATGGGAGGTGGCCGGGTGTTCAGAGGTTCTCTGAGGTT
-GCAGAATGCCCTGTCAACCACTCTCCCATACCCAGAGGGGGCTGGACGCATCCCTCTCtc
-ccttgtcctcagtctcgattttctcatctgtgaggtgggcacaacaagtcctaatcctgg
-cagTGATAGGAACGTTTGGGGAAGCAGTGATTTGTCATGCATGATGCGGTCGGACAGGAC
-CCTGCCCTTAAGAAGGAGGGAGCCCACCTGCCCAGGCACTGTGCTGAGCTTCTGTGCATT
-AGCTGAAAGTGGACAGGATGACGTCACTTCACTGGAACTTTCTGTGGCTTCTCTTTGCTC
-TCCTATGGAGGTTCCATGGGAGGTAGGAGCTGGGGGCTAAccctgcataccttataaacc
-tcaactctcacatcctcctggctttctgtgtccaggttcacaggcctcctgaatctccct
-ccttaatgcccacgttgttctggcctctgagacattgtgttactccctgaattccttcct
-cttgccctagtaaactctccctccctgctcagctcagtttaactatctcttcctagagga
-agcccaccctgtcctgtagactaggctgagtctcacattgcggcatcttaaggtgctgcc
-tcctctcctggtaacacctgtcgctgttgtaatttcacaggtgttgctgcaattacctgg
-ttgctgactctccccacattaggactgtgtgttccatgagggcagggacgttttctcgat
-cacagccatatccccaacagtaatagcaaattgcagatgctcaataaatgctttctggat
-aaatggaGGGGTGAaatcattttgacaatcagaagaagaaggtgccccccttttacagat
-aaggaaccaaaggtacagagagattaagtaacatgccccgaggtcacacagccagaatca
-gatggTGTCTGTCTGGGAATGTGTCCCTGCAAGCCAGGCCTAGAAGGTGGGCAGATGGGG
-TTACGCAGAGAGGAGCTAGGACCATCTGGATAAGGGAGGGTTGTGGGGGCAAGCCCCACC
-CATCCTTGTTTTCTCCATTCGAATAGTGGTTTGTGGCTGTTTTCCTCAAGGGCGACTCAG
-GTGACCTTCAGGTTGGGGCCTCCTGGGTCCCAGGGGCCTGCTGGGTGGAGGGCCCGGTCT
-GGCTGGGCTGCTTTTCTCGCCCCTTTGCCGGCCCGCTGGCTTCACGCACAGATTACAACT
-TCCCCTCTTCGGCCGTCTTACGCAGGCCACCTCCGGCTCGCCATTGTCTCATTGTTTGCT
-GAGGGAAGCTCCAGGAGGAAATCAACCTGCTGCTCACCCCAAGCAGGGAGTTTCACCCCC
-AGCCCCCACCCAGGGAATGCCTGGGGGGAGGGCAGGAGGGGTGGGGGCAGGTAGCAGGCa
-atgcaacaggcagccttgaagggagtgagctccctggccgggaagtatgcaagcagaagc
-tacatTCACAGCACCTATTTACTAGGTCCTCTCCCAGGCTGCACGTCAGGCAGCTGGAGA
-CACAGATGCTAGAAAAGGGTCTTGTCCTTAAAGACCCTGTAGCCTAGAAGAGATGCTGGG
-CAGGGCCTCAAAGCCAAATGCCTTAGGGGCCAGACAGGTGACAGAAATCTGTAGGCCTGC
-GAGCAATGCTGAGTGGTCGGGACGTTAAATGAAAACTATGGTGCGAAGGAAGGCTTTTAG
-ATTCCAATTTTATTTTAACATGTTGCTAATCAAACAAATGAGTCCTCCAGCCTGATGTAG
-ACTGCGGAACCCCAGCCTAGCCCTTTAGAAAGGAATTCTTGTTCTGGGGTGAAATTGGAT
-CAATAGTTATTGGTGTCTGCCCCTATGCCTTTAGCTATAGCTGTGATGGGCAGTTCCCAG
-CACACTGACAGCATCCCTTTTCAAACACCCAGCAGTCATTTGGCTTCTCTGAAGACTTGG
-GAACTCTCTCAGGGACCTGGgaggagttgatgccactaggggcacccctcagtcaatggg
-gaatgggagttagtgggtaaatgccccatcctcttatccattggaagttcctggtcactc
-aaaggtctgcagtgagttgggggcactggttgcccatactggaaactggctcaataactc
-actttttatccgtttcccctcttcgctgtcactctcccagatccctctggcttcctgggc
-taccggctcccaaattcttgtctcaggctctgcttttaggggaacccaaactaaaacaGT
-CTCTAATATTCTTTCCAAATAGCTTATGATTGTACACTTAGGTGATTCTAATATCCAATG
-ACTTTAACTCTGTGATTATAAGTTTTCATAAGTAAACCCAACTGTGATTCCAGAATGATG
-TCATTCTAATATGGCCGAGATACACCTATCAGAACTGGAATGCTCCATTTTGTACAACTG
-AATTTTGCTTCTCTTGAGCTCCTATTTTTTTTTTCCGATGCCAGAAAATGCAAACTTCAA
-AAAAATCTAGACAAAAACCAATTATTTCAGATTTGAACTCAGTTGGGTGAATCAAGCTTT
-CCCTGGCATCCCTTTTTTCCCGGATTCATTTAAGTCCTGGAAGGGTAGAGGCATCTTGGC
-ATTGGTTGAGGGAAGAAGGGGTCTGTGACTGGTGTTTCTCAAGCTATACCAACCCATCTG
-GCTCTCCAGCATGCTTCTGCCCCCTTGGCATTCACTGGAGATGACCCACTCATGTTGATG
-CTTTGATCTCTAGGGTCAAAGAAGCATAGCTTTCTCCTCCTGGACCATACACTGTAAGAG
-TCACGTCCACTCCATTCAGTCATCTGAAAAGATGTGTTCACTTTTTACACCTCACAAGGC
-CCTGTATACAAACTCGtcattcaatcaaatgtacttgctgagtatccggcatgtgttggc
-attgagccaggcactgaggatacaaagatgaaaagacaggtccctttcctcaagtcattt
-gcaagccaaataatgtataaatattttcaacttacatattgtgatgtccattatgaagga
-accaaatagggtaggcagagaaagcctctttgaagagctgtcattggagccaaagtctaa
-agtcaggggaagccacaaaaaggtttagcaagaaagaCATGTCTGATTATATCTGTAACT
-GTAAAACATTTTCtttttctctttctttcttttattattattttttggagacagggtctc
-actttgtcacacaggccagagggcactggtgcgattttggttcactgcagcctcaaccta
-cggggctcaagcgatctccttcctcagccccccaagtagctgggattctaggcacatgcc
-accatgcccagttaatttttttgtattttttgtagagatagggtttcaccatgttgccca
-ggctggtctcgaactcctgagctcaagtgatatgcccaccttggcctgccaaagcattag
-gattagaggtgtgagccatcacgtttggccGGTAACTGTAAAACTTTTTGTAATACTGAA
-GGCATCTCCTGCATTTTTTCATACATTTTACTTTTCCCCTATTTATTGGTGGCCTCCATC
-ACCTTAGAGATTCACGTCTCAAAGGACAAGAGTCATGGAAATTTAGTCAAAGCCCTGAGT
-AATTTGAGAGTGTACAATTTATGCCATAAATAATAGATTGAGAAGAATAGATGAGTCAAA
-TTGGTTTTCCTCTTTAGGAAACGAGATAAAGATTATCGGGAGGTGGGGAGAAGGGAAGtg
-tagcagagatgtccagctgtcatgcaattacccgacttccccttcttctatagctgcaga
-tggccatgtatctacactgcatttcgctgtctcccttgcagtttaggcgtggccacgtga
-ccaggctctggcaaaggatatgtgaaccgaatggtgtgtgcaacttctgggtcatgcatt
-gaaagaaaaaaaggggcatcctcttcccacacctcttcttcccttcctgccagctagaat
-ttggcatggtggcaggagcagtagcagccgtcttagaccacaagactgaagccacacgtt
-gaggatgtcagaacaacaaaatggaaggatcccaggtatctgacgtcatgggactcatag
-cggcctagactgcttgccccctactggttagtgagagagaaatcaaTAGCTGAGTTAGCA
-TCCCAAGTAATACAGAGGGTCAGAAATATAGGAAATTagcctgttgctgtggctcacgcc
-tctaatccctgcactttgggaggctgagttgggcagatcacttgaggtcaggttttgaga
-ccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaactagctgcggc
-atggtaggacatgtgcctgtaatcccagctactcaggaggctgaggctggagaattgctt
-gaacccgggaggcagaggttgcagtgagctgagattgtgccactgcactccagcatgggt
-gacagagcaaggctctgtctcaaaaaaaaaaaaaaaaagaaaggaaagaaaTATAGGAAA
-TTAGTGTGCATAGACACTGGTGTAACCCTGAAAAAAGAATAGAAACTTCGTGTGGTCTTG
-AGGGGTCTAAGGTCTGGGCCCAGAGCCTTAATTCTGGGTAGAACCCAAGGAAGCCATGAA
-CCTAACTGCCTGAGTGTGTGTGCAGGCACCTGGAGCAGGACACTTCAGGGGAAGGGAGGT
-GAACTGAGGGGAAAAAGCAAAAGAAGACACCCAGAATTGACCAAGATTAAGTTTCTCCTA
-CCTAGTGGAATGGAGGCTATTTATTTTGGGTGTGAGCTGAGAGTTGTACCTGCTTCCCAT
-TTTATTATTATTGTATTATTATTCCTGGATCCCAGCCCAGCAGTTAACAGGAACCTGAGT
-GGAGGCTGAGTTTTATCAATAAATTTTTGCTGAGCACCAaggcccaggctcaggtcccag
-cctagctccctacttgctgggtggccttgagcatgttacttctcttttctgagccttggt
-gatctcattgggaacataaaggggttgaactccaggatgctcaaggtggctctttttgca
-ttgatgtcctgtggttttTCTCTGGGTCTGGCAATGAGGGCAGTTCAGGAAAAGTGTGAT
-AAAATAGCTCTACTTTAGTTCATAGAGGGACAAGACACAGTCACATGGGcacacatgtac
-acacacacacacacacacacacacacacacaAATGTGATTAACCAAACATCATGGTAGCC
-AAGAAGATATGTAGCATTAAGGTTTagaatacaggctttgaagtcaaacagaccagagtt
-aacaacctcattttgtttttattTTCTTTTTTAAAAtttttttaaaattatactttaagt
-tctagggtacatgtgcacaacgtgcaggtttgttacatatgtatacatgtgccatgttgg
-tgtgctgcacccattaactggacatttacattaggtatatctgctaatgctatccctccc
-tcctccccttaccccacaacaggccccggtgtgtgatgttccccttcctgtgtccaagtg
-ttctcattgttcagttcccacctatgagtgagaacatgcggtgtttggttttttgtcctt
-gcgatagtttgctgagaatgatggcttccagcttcatccatgtctctacaaaggacatga
-acacatccttttttatggctgcatagtattccatggtgtatatgtgccacattttcttaa
-tccagtctatcaatgatggacatttgggttgcttccaagtctttgctattgtgaatagcg
-ccgcaataaacatacatgtgcatgtgtctttatagcagcatgatttataatcctttgggt
-atatacccagtaatgggatggctgggtcaaatggtatttctagttctagatccctgagga
-attgccacactgtcttccacaatggttgaactagtttacagtcccaccaacagtgtaaaa
-gcattcctttctccacatcctctctagcacctgttgtttcctgactttttaacgatcgcc
-attcttactggtgtgagatggtatctcattgtggttttgatttgcatttctctgatggcc
-agtgatgatgagcattttttcatatgtctgttggctgcataaatgtcttcttttgagaag
-tgtctgttcatatccttcgcccacttgttgatggggttgtttgtttttttcttgtaaatt
-tgtttgagttctttgtagattctggatattagccctttgtcagatgagtagattgcaaaa
-attttctcccattctgtaggttgcctgtttactctgatggtagtttcttttgctgtgcag
-aagctctttagtttaattagatcccatttgtcaattttggcttttgttgccattgctttt
-agtgttttagtcatgaagtccttgcccatgcctatgtcctgaatggcattgcctaggttt
-tcttctagggtttttatggttttaggtctaacatttaagtctttaatccatcttgagtta
-atttttgtattaggtgtaaggaagggatccagtttcagctttctacatatggctagccag
-ttttcccagcaccatttgctaaatagggaatcctttccccatttcttgtttttgtcaggt
-ttgtcaaagatcaggtggAGCaaccccattttcatcactaactagctggtgaccttggat
-aagtcactttatttctctgagtcttgggtttctcccatttaaaaggaggatgataatacc
-tatatttagggctttcatgtaataaaataaggtaatttatgtgcagctccaagatcacgc
-tgggcacgttacagatactcagtaaatggtggttattCTGATGAGGATTGTGAGCCATGG
-TGAGAATCAAGTGAAAGGTGGAGAAGGGCAGAGCTGGTGGGTCTTGAGTATGGACTAGGA
-AGATCCATGAAGTCCAGGGTGTAGGGAGGCTCTTGGAGAAGGCAGGACATGAGCAGTGCA
-GGGATGTGTAAAAGCGTGACCAGATGGGATGAAATACCCTTTTAGGAGAAGGAGAAAATA
-GACCCAGAAGCGAGGTAGAGCCAGGcttgagaaaattacttcctctttctgagccttatt
-tttcctcttggtaaagcgagtgtaacaatatctgccttgcaatgttgttatagcgattat
-tgagatgttagaagtcaagctcccattaagatgcctggctcatgtaaggcatcaaatatt
-agtttcattCCTTTCCCAAGAGAGGGTACTCACAAAATATCATCAGGGCTAgtaacacag
-aggataaatatttgaggggatggatacctcattctccatgatgtgattatgtcacattgc
-atacctatatcaaaacatctcatgtaccccataaatatatacaccgaatatgtaccccaa
-aaattaaaaATAAACAATTTTTAAAAAAATCCCCCAAAACAAAAACAAATGAACAAACAA
-AGACAAAATGTCAGGGCTAGAGTGACCCTCAACGCCTTTCTATGGTAACATACACATCTA
-TTCATGAACTGTTCACACAtcattcatcaatctatacagctatcacttatgcatttttca
-tatatccattcaaacaccaacaattcattcatcacccattgttcattcatctagccaaaa
-gtccattcatccttcactcaccatctatccttatccatcatcatgcattcatcagcaacc
-ttccatctgtctacctatcatctattctatattcatccttcatcaatctatttcatatcc
-atacacccattcagccagctactcaagcagccatcattctttcatctgtctatccattta
-tcatttatccatcatccacctatccacctgccattagttagccatcaccatctctcatga
-atttatttgttcctcaactatccattcttcatgcatctatccatctatttatcactcaat
-gatccatccatccattatttcattcatCATTTATGCACCCACCATTTTTCACGCATGAAA
-TATTCATCCAAAATCTATTCTTCATTTCTTCATAGCTATCATTTACAAGCCAAACATCAA
-CCCACCAATTTACTCTTCCTCCCTTCCTCTTCCATGCATCATCCATCCTTCATTCACTCT
-TTCACTAAACATCTGTCATCTATTAGCCATGCCTATCATCATCTATGTATCTTCCATCGA
-CATAACCACCTACGATCTATGTAATTTCATCATCCATCTGTATATGTTTatccagtcatt
-cattcatttatgtttcatcttccatattgcctgtcaggtaacatacaccagagatacaga
-ctaaataagctacaacctgtcctccagttgttcagagtctagtggagaaagataaataag
-cctatgatagctgctgtaccagaggaatgactgtaccaagcaccccaggggagaccacac
-aggagagagccacagactctgagggaactggggaaggactcacaaaggaggtggcagttc
-attaaactgggtctcgaagaatgattagaagGTCCACTGttttttttttttttttttttt
-ttttgagacagagtctcactctgtcccccaggctggagtgcagtggcatgatcgtggctc
-actgcaacctctgccttccaggttcaagcaattctcgtgcctcagcctcccgagtagcta
-ggactacaggtgcccgccaccaggcctggctaattttttgtatttttagtagagatgggg
-ttttaccgtgttggccaggctggtctcgaactcctgacctcaagtgatctgctcctgacc
-tcaagtgatctgcgcgacttggcctcccaaagtgctgggattacaggcgtgagtgagcca
-ctgtgcccagccCAAAGGTCCCCTGGTATttttatggggggaaatgagtcctaagagggg
-aagtgactgtgcataatcatactaagagttaattaacaggacagagacttgtaaccaagt
-ctctagcctactatactagttctgtttccactTCTTATGGGAAACAGTAAGTTACTCAAG
-GGAAGACAAGTAAGCAAAGAAAACCTGCCTCGAAGCACCAGAAGGCTGCTGTTTTAGGAT
-CTGGTTGTAGATGGGGTGGAGAAGGGGATTTTCCTAGACCTCAGCTTCTCATTCAGGGAG
-AGGTAACAGCAGAAGCCCCAGGAATATTTGACAAAGGGCAGGAAAGAAGGAGGAGGAGAG
-ACAGAGCACAGTGAGGTGAGGAGAAAAACAggtcaggcacagtggggctcatacctgtaa
-tcccagtgttttgagagatcgaggtgggaggatcacttgaggccaggacttggagaccag
-cctgggaaactccatctctaccaaaaaaaattaaccgggtgtggtagcatgtgcctgtag
-tcctggctgaggcaggaggatccccttgagcccaggagtttgaggctggctgcagtgagc
-taagatcgtgcctctgcactccagcctgggtgacagagcgagcccctgcttcaaaaggaa
-ataatataataataaaaaaaCCCCACCTACTATTTTCTTGTTACCTTTACTTGGGTAATT
-AATAATAATATTGTTACTGCTTggcacggtggcttatgccagcaatcccagcactttggg
-aggccgaggtgggtgggtcatttgaggtcgggagtttgagaccagcctggccaacatggt
-gaaaccgtctctactaaaaatatgcaaattaaccaggtatggttacacatgcctgtagtc
-ctagctacttgggaggctgaggcaggagaatcacttgaatccaggaggtggaggttgcag
-cgagccgagatcatgccattgcactccagcctgggcaacagagcgagagtccatgtcaaa
-aataaaaataataataaTGTTGTTAATATTCTAGCagccatgttttattgagcacagact
-acgtgctgaacagtgtgctatagatttttcatgcatcataccattttatacctcaccctc
-agcagccccaagaagcagttattactcttgtccccattttgtgaatgaggaaactaagtt
-cctgagaaggtaagctaggatttaaatatggtctgtgtgactacaaattccatgtccttt
-ccactcctctttgctgcctctctCATCGTTCTTTGGGTATGGTATATAATAAGTGACTCA
-GACATACATGTGCATTCACTAAGATATATGCTTCATTTTACTGGAGATTTTCTCTGTATC
-CTCAGACTCTGAAATAGTGGACATAGTAGGAAAGAAAAAATTTGTTGAATTTTCATAGCT
-ATCATTTACAAGCCAAACATCAACCCACCAAGAAATATCTTCTATTTCTTGTTGAATTAT
-CTTGCAAAGAAAATGGATAATCAATTAGAATATAGGGTATACAGGTTTGTCTATTCTGAC
-ACAAGTCCAAAGttttttgttttttttttttgagataagagtcttgctctgttgcccagg
-ctggagtgagtgcaatggcacgatcttggctcactgcaacctccgcctcccaggttcaag
-cgattctcctgcctcagcctctcaagtagctgggattacagctgcctgccaccatgccag
-ctattgtttttttgtatttttagtagagatggggtttcaccatattggccaggctggtct
-cgcacttctgacctcaagtgatctgcttgccttggcctcccaaagtgctgggattacaga
-cgtgagccaccgtgcctggGCAAATCTGAAGTATTAATAGCATAAAGATATAATTATTTT
-TCTCCCAGGTCCAGGAGTAGgctgggcatggtagctcatgcctgtggtcccggctacaca
-ggaggctgaggtgggcggattgcttgagctcaggagttcgaggttgcagtgagctatgat
-tgtgctgctgcactccagcctgggtgacagagggagatgctatctcaaaataataataat
-aataaTCCAGGacaagcttgtttgggtcccaggcttcttctgtcatgcagctctgccacc
-cccagggtgttgccctagtccccgtggtctcagatgccacccacatatctacaccacagg
-cagtaggcagtggaaaaggcatgaggcaactatgacttgcaggttgctctccccacttct
-gttcacctaccactggtcagaatttagtcatgtgatagtaaccagctgcaagggaggctg
-ggcaatgtagtctttattctgagaggctatgtgttcaggtaaaagtgagaggttttattt
-ccacaggagaaggggaaaatgggtatgaggggcaagtaggggtctctgGCGTAGATGAGA
-AGAAGATGTATGGACACCAATATTCTCTATCATGTGAAGACTCCTAGGGTCAcatatcat
-ctctcccattagacagcaagctccctgagggcagggggctagattaatcaccctggtgtc
-cctgaaagcttctagctcagACTTAAGGAAGAAGACTTTTTCAGTCCCGGATAGAGGTCT
-AATGATCTGATGGAACCAGAGCAAGTAGGTTAGAGGCCTTTTGCCTGGTGACGACCAAAG
-TGGAGAGGCCAGGCGTCTGGGAGGCGGCCAGCAACAGTAGAGAGAGACGCAGGAAAGCGA
-CTTGCAAGGGGGCTGGAGTGGGTGAAAGGTCAGAGGAGAGTCTGGAAAGGAGGATGCAGT
-GTTGCAGGGCGGGCAGAGCTGGGGGAAGGAGGGGATAATTTAGTAATCACAGCTCTTCCC
-TCAATAGAATGCTCAAGGGCTCACAAAGCATCTTGGCCTCCATGTTCTCACTGGTGAGGA
-TAGATGGTACATGAAGTTAGGTGGCAGATGGGGGGGTGCTTCGGATTGCCACCAGCCCAT
-TCCTATCTAGAGAACTGTCACTGGTttccttcttcgtttcccatgtgcttcctttctcct
-tccctgtctcccttccttcttccttccttgatttctctcttcttcctCTGTATGTGTGGa
-tatacacatgtataacacacacacacacatagacatacatatatatgtatatctgaatgt
-atgtctctgtatgtacagatatacacatatacatatatgtatatgtgcatacacatatGT
-GATGACCAAAGTGGAGAGGGCTAAAAGATGAGGCCAGGTGTCTGGGAGGCAGCCAGCAAC
-AGTAGAGAGAGACGCAGGAAAGCGACTTGCAAGGGGACTGGAATGGGTGAAAGGTCAGAA
-AAGAAgtgtgtatatgtgtgtatgtatatgtgtgtatatgtatatgtacatatatgtgtg
-tacatatgtatgtgtgtgtgtgtgtgtgtgtatgtataatcacctactatgtgccaggag
-gtattgtgaaagttattgagaaacacactggtgagcaaaccagacaagatccttgccctc
-atggagcttatgcttaagagagagagatattacacaaataaatgcacaaatagctccata
-accgttaaatgtgaccaacgactagcgctatgcagaagtgcagaatgctgtgagaGCATA
-TTCGTTGTGTATTCCAGCATTTATTAAACAAATATTTAATAAAGCAAATTATATGTATTA
-GAGAtttgcttttttttttttttttttttgagatggagtcttgctctgttgcccaggctg
-gagtgcagtggcacgatcttggctcactgcaacctctgctgcccaggttcaagcgattct
-cctgcctcagcctcccgagtacctgggattacaggtatgtgccaccacgtctggctaatt
-cttgttttttagtagagacggggtttcagcatcttggccaggctggtcttgaactcctga
-cttcgtgatccacctgtcttggcctcccaaagtgctgggattataggcatgagccactgc
-gcctggccTAGAgataatttttagaaaggaataaaatcacgctcttgttcaaatataaaa
-tgaacatgtgtcaaagattttatttaactcattaatttatgaggtaaccaataaggtgtt
-aaaaaatagttcaaaggagaatccaaagagaagaggcatacataggtaatgaggattgct
-tacattaatttgctaaagatgcaaaactgttttcttccaagagtactggggggaatgaat
-tgcatctttattattattattttgagacagggtctctctctgttgccaaagggctagaat
-gcagtggtatgatcatggctcactgcagcctcaacctcctgggctcaagcgatcctccca
-cctcagcctcctgagtagttgggactatagacaagtgatatgtgacaccttgctagctaa
-tttttaaataattttttgtagagatggggtttctctctgttgcccaggctggtctcaaac
-tcctgggctcaagtgttcctgccacaggctcccaaagtgctgggattacaggcgcgagcc
-accgcatctggcctcaactgcatcttgagcagaagaaatttgtttgcatctctgtgacga
-gaattgtttttattatcatcaatcttgttacaacatattgaagtgtacgctagctcaaaa
-atgtgaaatgcgtcggcaaccatagaatcagctaacctgaaatgatgtaaagacaattca
-taCCATTCTGGAGGACTTCCAGTAATCTTTGTGGACTTTTTTTTTTCAGCTTCAAAGTAT
-TTTACAGTTTTTcctgatgtgagtcagatcggtactagatactaataatacagaggtaaa
-ccatacagacacaatttctccctcaaggaCAATATTCCCTTATGTTCTAACTGGGGTGGA
-GAGCCGGGGAACAGTTTTTGGAAGCCAAACTGAGTCTTTGCCATTTATAcagtcatatgt
-taattaacaacaggaatatgttctgagaaatgtgtcgtcaggtgatttcattcttgtgca
-aacgtagaatgtactgtcacaattctagatggtacaacctactaggcacctagtctctat
-tctataacctatttcttctaggttacaaatttgtacctcatgttactgtactgaatattg
-taggcaattgtaacacaatggtaagtatttttgtatctaagcatagataaatatagaaaa
-gatacagaaaaaatatgtagaaaagattttttttaaaaaagacacacttgtatctttact
-gtgaatggagcttgcaggactggaagttactcttggtgagttaggaagtggtgactggat
-gtgaaagtctaggacattactgcacactactgtagactttataaacactgtacacttagg
-ctatactaaatttatttttaaaatttgtttctttcttcaatagttaactttagcttactg
-taactgttttgttctataaacaaaaaaattttaaaaacactttttgtattattttgtaat
-aacacttagcttaaaataggaacacattgtacagctgtataaaaacattttctttcttta
-tatccttattctataagcctttttctacttttaaatgttttttccttaaattttgttgtt
-gttgttgttaaaaactaagacacaaacacacacattagcttcagcctacacaaggtcagg
-atcatcaatatcactgtcttccacctccacgtttcgttccactggaaggttttcagggca
-gtaacacctgtggggctatcatatcctgtgacaacaataccttcttttgaatacctcctg
-aaaaacctacctgaggctgttttacagttaacttatttttttttaataagtagaaggagc
-acactgtaaaataacaattaaaaagtatagtaaacatgtaaatcaataagttgtttattg
-tcattatcaagtattatgtactgaacattttttttttttttttttgagatggagtttcgc
-tctggttgcccaggctggagtgcaatggcacaatcttggctcactgcaacttctgtctcc
-caggttcaagcgattcttccgcctcagcctccggagtagctgggattacaggcatgcacc
-accacgccgggctaattttgtatttttagtagagatgggCACACCAactaaagaacatca
-aagcccagagcgagaaccttcctccctttcccattttccttcaacttgttattaaggaga
-aagtctctgttcaatgctggtgtgtttttaacacctctcttaacacttacttcccttttt
-aacagagaataggcctccagagcctttggcaggccaccggatctggctagaatgtgatga
-cattgttttgttttcattgtacttatttttatggctaccttctatttatggcacgagata
-ctggttttccatttagggagggccctaaactttccttttgacataatatatttatgtttt
-tagaagaaggaccatttaaagaaaaaatattatgtaatattaattacataatatttgcag
-cacaggtggtactgagacagggaaaaaattataaagaggtatgtaaTGTGCTGAAAAGGA
-GGACATGCTTCTCAGGCTAATGCCTCtcccagcccctacttaacagaagggaccactgag
-gcacagagaggagaagggactttgtcaaggtcacacTGATGATGTGGACTAAGAACTGAC
-AGCCTCTTGATAGCCCTGTGGTGGGGGATATCTTGTGTCAGATGGGGAGGGCAGAGGTCA
-GGGACTGTGTGCAGCCCCATTGGTCAGTCCAGTGCACTGATCCGCTAGTCAGACAGAGTC
-CTCCAAGGTTGACCAAGTCATGGACTGAAGGCAAAAAGGACCGGGGGACCTGGAGGGGAG
-GAGAGAAGAATGCTGGTGTTTATCACGCACTAACTATGCTAGATGCTCGGGTGCCGGACG
-TCACCCCTAGGGAATTCACAAATTTGGGGGCAGACACGTCCTACAAAAATAACTCAAGTT
-TCTGGCGAAAGTGTGGTAAGTGTTCCAGCAGAGGCCTCTCtagtgacatctaggtttttg
-tctgctcactggtcatttccccatattcttttgggaaaccacctcttcaccactcttgat
-tcttgtagctcagaccaggcaaaccccacacccacttcagaggtgggcacatgaccagac
-ctggccaattagaacactttatccctcttgccacagagactggcacatggttgggcgcgt
-gacccaaggcaggccagagggggccttccccaggaatttgctggaactactggagaaaaa
-tcccacttcatagggtttttaaaatggatacactgtaagccagagttgctggcagctatc
-tttgccaccaaaagagagaggttctctgaaaatgaagctgacaggaaagcagggatgaca
-gatggagagacagctagagtcctaatgctactgtatggtcacctcctggacccagccgtg
-aaatcagtgaccctgaacACAGTTCTATTTTGCTTTGTTACCCAGGCTGGAGCtttttat
-ttttgtaattaaattaaattaaattaaattttaatttttagagacaaggtctcgctttat
-cacctagactggagtgcgtggtgcaatcacagctcactgcagaatcagcctcctaggctc
-aagtgatcctcctgcctcagcctcccatgtagttgggactacagttgtgtgccaccacgt
-ctggctaatttttaatttttattattatttaatttaatttttaatttttattttttgtag
-acatgtggtctcactatgttacccaggctggtcttgaactcctggcctcaagtgatcctc
-ctacctttatctcccaaagttctgggattccaggtgtgagccattgtgcctggctCGttt
-ttatttttatagagatggggtctctctatgttgcccaggcttgaactcGGTTCTAGAAGG
-CAATAacacacacacacacacacacacacacatacaTAtttgcattagccactttgagat
-gggtttctgtctcttaaaaccaaaaagagacctgtctaatTCCAGGCAGAAACAATATCA
-TGGGAATGTTGGCAAGGGAGAGGGATTGGAGTGTGTGTAAAGATTTATCTGGGAGTCCTT
-CCTCGTGGAGGTAGGTTTTGAGCAGGGTTTTGAGAAATGGAGAGGATTTTGATATATAAA
-GAAGGTGAAGAAACAGTATTTCCAGGGAGGGGAACATCCTGGGCAAAGGCTTGGTGGTGG
-AAGAGGGCAGGGAAGTGGCGCCGTCCAGTGTGATTGGAGAGAGGATGGGGATAGAGAGGA
-GGTGGGAGAAGAGCTGGCAAGAAGGGATGTGCCCTAATCGTGCAGAGATCCAGTCTGCTC
-CTTCACCTGCATCCTCCTCCTCTGGAGGCGTGCCCTTCATCAGttaattcatccacagcc
-atttactgaacaccagcatgcgtcaggcactgtcaaagggctggcgagagagctgtgggc
-cacaccaccaagtccctgccctcttgtagcttcttttgtaggtgaaggacacaggtggta
-aacatgagcaagaaataaacaagtatcatagtgtcagggagcagtaactgttatctagaa
-aaattaagacgagtaaagggaatacagactagtggagaggTGTTTGGGAtgaaaacggat
-aatactgatggttgaccgacatcgtgagtgcactcaatgccactgaactggtaaaatggt
-taaaatgataaattttacattaggtatttttctgttctttatattatgtacattttacca
-caataaaaaaCAGGATTggcagaggggtgctattttagctagggtggtcagggcatgtct
-ctctaaggaggtgtcgtttgaacagaatggaggggaattagcaagccttgaagagattgg
-ggggaaggtattctgggtggagggaattgccaggacagatcctgtggggccagagtcggc
-ctggtgtgttctaaggacagcaagtgggcccctgtggctggagcccagagagcaaaggga
-gagggggaggaagatgagtacagggatcagcaggggcttgtatgccaggagagaactttg
-gatttggttgtatgagtgatgggaagccatcggagggctgagcagggaagggatatgaat
-cagagtttctgttCAATTCTCCCTCTGCCCACACTCAGTCCTGCTCTTAATCAGGTTGGT
-AATCTTGCCTCTGCTTCTGACTATCTCTCTCTCCTGGCTGCTACCCTCTTCTGCACATCT
-TCATGACCACTATCTTGCTGAGGTCATCttttttttttttttttgagacagagtctcact
-ctgtctcccagctgaagtgcagtggcacaatctcggctcgctacagcctctgcctcctgg
-gttcaagtcattctcatgcctcagcctcccgagtagctgggattcaggcgagcaccacca
-tacccagttaatttttgtatttgtagtaacgatggggttttgccatgttggccaggctgg
-tcttgaacacctggcctcaagtgatccacccaccttggcctcccaaagtgctgggattac
-aggtgtgaaccaccacacccagAGAGGTCATTGTTTTTATATGGCTGACCCAAATGGCCT
-CCAACTGGCCTCCCTGCCTCCTGCCGACCCAGCCTCCACCAGTCATCAGGGTCTCTTTCT
-ACCCGCAGCTCTGACCAGCCCTTGCCTTGGTGAGAGCCACAGCCTCCCAACTTCCAGTCC
-AGCCCCATCTATCTTCTTTTCTCCTCACCCCAAAGCCCACACTTAGTCACTCAGAGCCTC
-CATGGGGTTCCCCTGCTGCCTGCCGTAGGCTTGCCCTCCTCAAGGCTGGTGTATGGCTCT
-CTGCTCTACTCGGGTTCCTTTTCACCTAGACAGCCCCCTCCCATCCTTCAACAGCCTCCC
-AGCATCACTCCTCTGTGAAGCCTTCCTTGGCTGTCCCACCCGCAGGCTGGCTTAGCTAGC
-TCCTCTTCAGTGCTCCCTAAACCACTCACATCTTCCACTTTCAGAGCCCCGAGCATGTGG
-CATGCAAAGCACATTggtttggtttggttttgtacaaacctttccctttcctcagctccc
-tgaaccccccagttccctgttcatagtatgttcgcaacaaatgtttattgaataaatgaa
-tGAGTTTGGAATTTATCTTGCAGAAACAATACTCCCACCACCACTACCAGCACCTCCACC
-AACGAAaataatatccaacccaagttgatgacttgctatgcatcgggcactgtgctacac
-acttccaaatctggatctgatttctatttcataatattaggaggaaatcactgtgttagc
-cccactttagagatgagaaaactgaggcatggtgaaattaatcaattttcctaaggctac
-ataactcagaagcaggagagccgacagtccaaAGTGTGCAGCCCAAAGCCGTGGGCACCG
-CATGCAGCTGGAGGAGGTGTCTTGGCATTACTGCATCCACGGACGGGGTTTCCAGGAGTC
-CTGGAGTTCCATATGAAGATTGATTGTCCATGAACTTTTTGGGCATGGGGGCAGGTCCAT
-TACTTGTAttttttttttttttgacagggtcttgctttgttacccaggctggagtgcagt
-ggtatggtcatagctcactgcagcctccatctcctgggttcgagagatcctctcacctca
-gcttcccaagtagctgggaccacaggcatgcatcaccatgtctgcattatatatatatat
-atatatttttttttttttttaagagatggtgtctccctgtgttgtgcaggctggtctcga
-actcctgtgctcaagtgatcctcctgccttggcctcccaaagtgttgggagtacaggtgt
-gggccatcgtgcccagccGTGATCCATTACtttttttttttttttttttgagacggagtc
-atgctctatcacccaggctggagtgtagtagtgagatctcggctcactgcaacttctgcc
-tcctgggttcaagcgattcttctgcctcagcctcctgagtagctgggattacaggtgtgt
-gctacctcgcttgactaatttttgtttttttagtagagacagggtttcaccatgttgacc
-aggctggtctcgaactcctgacctcaagtgatccgcccacctcggcctcccaaagtgctg
-agattataggtgtgggccaccgcacccggctGGTCCATTACTTTTACCAGGGTCTTAGAG
-GGGCTCTTGATAATTCCTATATTTAAGATGCTCCTCTGCACATAAGGGGGAAAGATGGAG
-AGTTTTCGAGTATTGGACTGTTGCGGTTCAACCTATGCTTTAGAGAGATCACGTTggcta
-tccattgcagtgtaatgcagggagaagagattggaaatatccctaagattcaccaagagt
-ggatgtgttaatcatatcatggtacctccttccacagaagggaataatacgcagccataa
-agatgaatgaggagtctctttatgtaccaatgtgaaatgattcctaagatatttatgtca
-gagagagagagacagggtCTgggtctcactctgtctcccagactggagtgcagtagtgtg
-atctcggttcactacagcctccatctctgggggctcaagagatcctctcgcctcagcctc
-ctcagtagctaggactacaggcttgcaccaccacgcttggctaattaaaataaaattttt
-ttttggagagactaggtctcactatattgcccaggctggtctcaaacttctgggccaaag
-agattctcgcacctcagccttccaaagtgctgggattacaggcgtgagctaccctgcctg
-gccTtccaagacatagtttaagtaaatacagcaaggtgcaggccagcatgtataattagc
-ttctatgtatgttttttaggaagggaggggttaagattatagatctagatgtgcttctat
-atgcataaaaaaTCTTTGGCAATATTCACTGTTAAATAGTCAGTGGAAACcctacctcat
-agggtttttatgagggttacatgagttaatattagataattgcttagaagagtacctggc
-acacattaagcactacagaagattttatttaataAAATAAAAAAGAgtggcgggcgcctg
-tagtcccggttacttgggaggctgaggcaggggaatggcgtgaacccgggaggcggagct
-tgcagtgagatgagatcgcgccactgcactccagcctgggcgacagtgtgagactctgtc
-tcaaaaaaaaaaaaaaaaaaaaaaGAGGGTCCCTTAGGGGATGGAGACCAGGTGACTAAG
-GGGCAGGGAGAGAGACTTATTTTTCATCTGAGGCCTTAGACGCCTTTTGAATTTGGTACC
-ATGGGTAAAttttttttatttttatttattaatttatttttgagacagagtctcactctg
-tcacccaggctggagtgcagtggcacgatctcggctcactgcaacctccacctcccgggt
-tcaagtgattctcctgcctcagcctccctcgtagctgggattacagttgtgcgccaccac
-acctggctaatttttgtatttttagtagagttggattttcgccatgttggccagcctggt
-ctcgaactcttgacatcagatgatctgcctgcctcagccttccaaagtgctacgatgaca
-ggcgtgagccaccacgcccggccTATTTTTTTGAAGTTGAAATTCAGTGTATCTTggcca
-ggcgtggtggctcatgctgtaaccctagcactttgggaagctgaggcaggtggattgctt
-gagctcaggagtttgagagcagcctgggcaacatagtgagaccctatctctcaaaaaaat
-gcaaaaattagctgggtgtagtggcgtgcacctgtagtcccagctacttggggggctgag
-gtgggaggattgcttgagcccaggaggcataggttgcagtgagccgagctcacaccactg
-cactccagcctggacgacggtgagaccctgtctcaaaaaagaaaacaaaaaacaaaaaac
-aaaaaaaaaaaaAGAGAAAGAAAGAAATTCAGCATATCTAGATAGCTAAGAGATCATCTG
-AGGGGGTCAGGGCCTGGAAGGAGATCCCACCCAGAATCCCCGGGAATTCGCTGTAATTGG
-TCAAAGGCCACATTGTGTAGTGTGAGAAATCAGGACGTGAGGAAAAGGCGGACAGGAGAC
-ACCAAAACACCCACGCCCCAGGGCCCACTATAAAAAGCACATTTAAAAACACCAGACTGG
-AAAAGTTttattattattattattattTTTTAAATAGCAAAAGCGAGTCCCCCCAGGAGG
-CGCACTGCAGCTGCGGCTGTGGCGGTTCCCAGGTGATGTCAGTCCTGGCCAGGCGCCAGT
-CCCGGCCCCTTGGAGACGGTCTTGGTGGGTTCAGCTTGACTGTTTTTCCTTCCTGAGACT
-TGAGGACACCTTCCTGTCTCAAAGAAGGAAGCCTTTCCAGGGCTTTCTGAAAGCCAGGGG
-CAGGGGAGGCGGTGGGCCTGGGCTGCAAGGGCAGAGAGAGGCAGGGAAGGTGGGTGGGGG
-TGGGGAGGAGCGGGGGCTGCCTCTGGGAGGAGAGTGAGGGTGGAGAGAGCAGAAGACAAG
-CCTGGCTCCTGGGTGGCTCTTTAGCCCTCCCACCCGGGGGCGCGAGGGGGTCTGCTTCTT
-GGGAATCCAAGGCCCGCCTCCCTGGCCCCATTGCTTCTCAGCCCTGGCTGCTTCCTGGGG
-AGGCCCCTGGGTGGGGTGAGGTTGTGGGGTGAGAGAGGTTCCCACAGAGTTCCCAGTTGG
-TCAGTGTCTTTTCTCCCTCCCTGAGCCCTGGGCCCACCCTTTCTTCTCTATGGTTAAAGG
-CTCTTTGCCAATATCTTCCAggccaagcgcggtggctcacgcctgtaatcccagcacttc
-gggaggctgcagcaggcagatctcctgaggtcagaagtttgaggccagcctggtcaatat
-ggtgaaaccctgtctctactaaaaatacaaaaattagccaggtgtggtggcacgctcctg
-aatcccagctactctggaggccgaggcaggagaatcgcttgaacctgggagacggaggtt
-gcagtgagtcgaatcatgccactgcactccagcctgggtgatggagcgagactctgtctg
-aaaacaaaaacaaaaacaaaaacaaaacaaaacaaaacaaaacaCCCAAGATTCTGCCAA
-TATCTTCCAAACTGGGTTTTCTGCAGATGGGACGATCCAcagagctgggtttgaggtcca
-actctgcactcctagccgtgcgacctcaggctggtcactgcttttctttgagtgccacct
-ctgaaatggattaggttggccttacagggtggttatgcagagtgagtgagacaGAACAAT
-GCCTCTTGGTCCTTCCCGAGTATCTGCTAGGCACCCACAACGCGCCGGTGCCACCAGGCG
-CTCGGGATGCTCAGCATTTGGCACAGAGGcagcagagcagggaggtgaagagagtgggct
-ctggacccagcctcagtccacatcccggttctgtcctttgatggccgtgtgaggatagtg
-acagcctgtctcactgggtcgtagaggagtaaatgagttacaggccgtggaacagtgcct
-ggcactgaggcggtgctaggtaagtgtttgcttttattTTCGACTTCTGTCCAACCAGCC
-TTCTGTTGCTTTGACAGCTTCATGGGGCTGCTCTGGGCACTCAAAGGAGATATGTTGGGG
-ATTCAGGGGTTGTGTTTAGGGGAGACCCAGGTCCTGCAGGTGCCCCATCATTCATACTGA
-TGCAGGGGTGGCCTGGAAGCTGCAGAACCATTCACACTCGGCAAAGCCTTCTCTCACCTT
-GGAAGCATCATTCCTAATGACGACACAGGTCTCCCAGCCATGCGTTCCCACATAACTTAG
-AAGCACCCATCCCatttttattatttgctcagagcctgctttttcagtaggccgtaaact
-ccatgaggtcaggtactacatctggcttattctctgatcatccctagagccttgtgtggt
-tcatggagaagttcaaaacatgtttgttgaCGGACTTACTGACTGACAAAGTCTGCCAGC
-CTTATGTTGGTCTACAATGTTACACTCTATCCCATGCCTCCTGCTGAGTTTTACCCTCCT
-GCTGTGATGCAGGCTGTGGGAtctggagctagaccccctcagttggaatcctggctgtgc
-cattgcctagctgggtgcccttgggcttggttttctagtctgtgaaatggggatagcaac
-agtacctacctatgtggcttgttgcaagtgaggccatctctgtatgtcactcagagaagt
-gccttggattagtcagTTCCATCAACATCAGGACTAGGCACGCACCTGGTGAGGTCATGT
-GGGGGtggtggttgagagcccagtggggctctgcagctagaacatctgattcaaatccac
-cagccactgtgtcaccttggccaagttctttaacctccttgtgcctccgtttcctcatct
-ataaaatggagcaataataatacatatctaaccagcttttgagcaagctgtatgtatgta
-tgtatttatttatttagagacggggtcttactctattgcccaggctggagtgcagtggtg
-caatctcggctcactgcaacctccaactcctgggttgaagggattttcctgcctcggcct
-cctgagtagctgggattacaggcacgcaccaccatgcccagctaatttttgtatttttag
-cagagatggggtttggccatgttggccaggctggtcttgaactcctggcctcaagtgatc
-tgccctcctccgccttccaaagcactgtgattacaggcatgagccactgccccccgcgaa
-gctgtatttattttatgtaaagtgcatagcctaggcctgacacgtagtaggtcctcaaaa
-gagtcaggcatttttCCAAGCCATTCAGAAAAAAACAACTCCTAGATTTTATCAGCCTTC
-CCTCCCACAAGGCCAGTGTGTCCCAGCTGACAAAGTTGCTGGCCGTGCTGACGtgaggaa
-aagcaagggccagagagggccagacgcctaccctgggtcacacaggagcagtggccaacc
-tagaataggctaggtcttctgtctcgcagcctgtTCATCCTGAGTGCCTCCCTGGTTTCC
-AGGCCCTGCTGGCCTGCCCTCTGACCCTAGCCCCCTGGGAGCTCTATCCCAGGCCCATGG
-GGTCTGCAAATCTGGTCTGGATTAGACACGCTGAGAAGCAAACGCCAGCCCCCCCAGCCG
-GCTGCCCAGTGGGACCTGTGCTCACAGCTGCTGAGGCTCATAGGGACATAAATCATGGTG
-GCAGGAGACTCGGGGGATGGGACCACCTTAGCCTCCTAAGGGGCACAGGGGCCTGAGAGT
-CACGAGCAGAGGCACCTGGGTCTGCTGGGGATATTTTCCATCGTCTGTTGGACAAGCTAA
-AGCCAGGGTGCATCAGAGGGGGCCAGGACACCATTTGGCAGCCCTCGCATCACAGTAGGC
-CAAGATCCCAACTTCTTTTTAACttttcattttgcaatcatttacaacatgcagaaaagt
-gacaaaagtggtgcagagaactcccatataccctgtactcagattcaccacattttaagt
-ttgtcatatttactctatccttttctctcacacatatattatttctcttctgaaccattt
-gagagagcacgttacctacatcatacttctccttaatagtacttcaggatgtattttttt
-ttttttttttgagacggagtctcactctgtcacccaggctggagtgcaatggtgcgatct
-tggctcactgcaacctctgcctcccgggttcgagcagttctcctgcctcagcctcccgag
-tagctgggattacaggcgcctgccaccacagggtttcaccatgttggccaggctggtctc
-gaactcctgacctcaggtgatgcgcccacctcggcctcccaaagtgctgggattacaagc
-tgagccaccacgcccggcctaggatgtaattcttaagcacaaggatatcctctgacacaa
-tcagggtgctgttagcaaatacagaaaatttaactttgatgcaataccttaatctattgt
-tcatatcccaattttgtgtgaccatgtctcaaaaaaaaaaattgtcaactctaccaagaa
-ggtcccctgtcacattttcccctctgcagtacaggatccagttcaaagtcatgtatcgca
-tttacctgttcaggtctATACTTGATATCACAACTACACGAGGTAAAATATACAGTCGTA
-AGAGACACAGATGGGGTTGAACAAAGACATCCAACTTCATATGTACGTCCCATGAACCAA
-TGTTTCTATAAATCCTCTAATTATATGGTGTTCCACAATAATGCATCACGCTCCTGACTG
-TGTGGAGGTAGTTAAGAGTTAACTTGCCAggccaggcacagtggctcacacctgtaatcc
-cagcactttgggaggctgaggctggaggattgcttgagcccaggaatttgagactagcct
-gggcaacatggcgaaaccccctcaaaataaaaaattagctgggcatcatggtgcacacct
-gtagtcccagctactcaggaggctgaggcgctaggactacctgactccaggaggtggagg
-ctgcagtgagccatgatcgtgccacctgcactccagcctgggtgacagggtgtaaccgtg
-tctcaaagaaaaaaaaaaGTTAACTTACCAAATATGCCATAGTCTTCAGCACTCTCTTTT
-TGTAGTGCTTCATTTTTTAACCTAATAAAAGCCTCATAAAATGGGAGTGGCCTGGGACAA
-TGAGGGGAACCTGAAGTGCTGtgggtgcaagaggtcctgtgttctcagccctgctcagct
-ccagatgctgtgcaaccgtggcccatcaccgctcctctctgagcttcaggttGCCATGGG
-TGACCTCTGAGGCCTTCCTGCTCATAACTGTGGAGTCAGAGAAAACAGCCCTgcatggca
-aggagggagatttgtgttcttggtgtcccaacagggccaaggacctgctggggaacccca
-ggcaggttgccctctgtcttgtctcactttcttcattgtgaaatgaTGAACTCTGAGATT
-ATTCTTGTGCTGCTGCTTCATGTGTCAAGACTTGCAGGGAGAGTGTAACCCTTTGGGGTC
-CAAGGTGGCCTGGCTGAGTCGGTCATTCCAACCCCTTCAGTCCTGGATTTCTTCTCCCTG
-AGCAGCTTTACTCCTGTGGCCTCAAGTTGGCCTGGAGAAGCTTGGCTGGGCTGGACCATC
-CCGGAGGCGACAGGCATGCTGGGGGAGCGGACAATGTTACAAAATGTTCCCCAGAGGAGC
-TGCCTATATATGCAGACCACACCTGTGCTTCTCCCCGGTCACGTGTGTGGGCTGACCTTG
-CAGCTCACAAAGGCTCATGGGCATtaactgtccattaccaggaagatagcaagctgcaaa
-atatgcataatggagcactatgcagctatgaaaaggtgtgaaacagctctgtaagcaacc
-aagggtctccaagaagtacagttaagaaaaaaaaatccagtgcagagaggagtgtgtgaa
-atgctaccacttgtgtggaaaaacaatatctatgtaatttgcctatatatgcagaCCATC
-TCTGCCGGAATCCATAGGATCCTGGTTACCTTAACATAGCAATTGCCTCTGGGGACTGGA
-GCTGGTGGCTGGGAGAGAAGGAGACTTATTGTCAGTTTATTCTTTTTTGTGTCTCATTCA
-AAGGAAAGAACCGGTATGTGTAGATGTGcaagaggggctggctcctgggaagctgctaat
-tgcatttcttgatctccatgctgggtgtacaggtgtgctcagcttgtgaaaatccattga
-gctgtacccttacaccctgtgcactttcctgaatgtgtcttatacttccataaaaagtgt
-aaaCTTggccgggcgcagtaactcatgcctgtaatcccagcactttgggaggccaacatg
-ggtgggtcacctgaggtcaggagttcgagaccagccttgccaacatggtgaaaccccgtc
-tttactaaaaatacaaaaattagccaggcgtggtggtgcacgtctgtactcccagctact
-caggaggctgaggcaggagaatcgcttgaacccgggaggtggaggttgcagtgagccaag
-atcacgccactgcactccaacctgggtgacagagtgagatccatcttaaaaaaaaaaaaa
-aaGCGTAAACTTAGCATGGTTTAAATGATTTGTTAAGCGTATGTGTGCTAGTTTAACAAA
-AACGCTGCAGagctgggcgcagtggctcatgcctataatcccagcactttgggaggctga
-ggtggatcgcttgagcccaggagctggagaccagcctgcataacatagtaagaacctgtc
-tctacaaaataaacaaataaataaaattagccaggcctggtggtgtatgcccgtatttcc
-agctactccgcaggctgaggtgggaggatcacttgaggacaggaggttaagcctgcagcg
-agctatgactgtgccactgcactccagcctgggtgacagagtgagaccctatctcaaaca
-aaacaacaaaaaaTACTCGGTGGGATTATCGTCTTCACTGTGGCTGTCTCTGGGATAAGT
-GATATTTCTAGAGTCTTATAGCATTTTGAATTTGTTTTACAATGAAAGCACAGGCAGAGA
-AACCTATAAATATTTTTTCAGAAACAGTTATCAGTATAGAAGCTTTTTTGGAAGGACACT
-CAGGAAGCTGCCTCTGGGGAGGGGCCTGAGGAGGTCTGTACTTTTCACTGCATACCATTT
-GATACAACTTGGATTACTTACCAGTGCATACAGGGTCTATTAAAAACTATCTCACAAAGC
-AAAACAAATACTTATCTTTCTGTTCTAGCTGCTCTTACTAGTTAGAGACTGAGCCAGGga
-ggcccagaggggtcaagcaacatctctggggtcacccagcaaatctggtggcggagtggg
-cctccagccagagcacccaagtgtctgctctgcccccactcccaggcttcctgccattga
-caaggccacagtccttttcCTGTGGCTTTGCCAGAGGCTGGCTGTACCTGGGAGGGTAGG
-CGCAGGGGGAGCAATGTGCTTTCCTAATCAGCTCCCAAAGGGGGAAGCACAGCCACGCTG
-GGACACAGGATAAGCACGACCAGTGTTCCTGAAACAGCGGGGAAGTGAGGTAGAGGGTGC
-TTGGAAAGCTCTCCTGGGTGGGGGACCCCGGCCCCCTGGGGCCCTCCTTCCTCTACTTCT
-TACACCAAAGGAATTAAGCATGGTAATTTCATGGCCTGCTCCAGCCTAGGGACTGGCAAT
-TCCAcaactcccttgatctccctgggcctcggttttcatctgtgaggaagaccaggttgg
-tcgggctcattcctgtggcatctggcacagtgcctgccacacagagggtattgacaatct
-gtttgtcaaTTTGCAAAATCGGAGCCACAATTCAGGCTCAGATGGTCAAACGCAGGGGAG
-TGGGGTAGAGGCAGAACAGAGGGGATACGAACGTGGACTCTGGGGCCAGAGTGCAGTCAG
-TAAACATGAAATAgatcacttgagctcaggagtttgagaccagcctgggcaacatagtga
-gaccctgtctctaaaaaaataaaaataaaaGTGTTTGTTAAATAAATAAACTGTTGAAAT
-AGGCATATGAATGTACCTTGCTGAGGAGAGGGTGGCTGCCTGGCTGCCCTGGCCTTTCCC
-TGGCTCTCCCACCCTCGGGCCTCTCGAGCTTCTCTGATCCTGACCTCACAGGGACACAGC
-CCCAGCCCGAGAGCCAAGAACTCCTAGCTGCACTGATCAGCTGACGCATCGCTGTCTCTG
-CTGGGTCTGCAGTGGGGAAGACACCAGCTCTCACCTCCCAGGGCTCCTGGGAGTGTAATT
-GGGGTAACAGGTGCTGGCTTTCCACTTGGGGCATCTCCAGGGCAAGGAAGGAGCTGCTCT
-GGGCTTCAAAGGTGGACGGACCTCAGGGTGTCACCCTGCCACGTGCCTCTGGGTGTCATC
-GGTCTTCTAAAGCATTTCAGCTAACACAGGGGTAAGAATATTCCCCTTTAGCATGCACTC
-ATTTGCACTTGTGGAAAACCACATGGCTTGTTGGTGATCGcatcaaagagggatgggtta
-aaggatggcatgttcacaaaatggaataataagcagctcaggaagaaatgaaataccctt
-taggtactgacttgggatgataccaagctagattaaggaaaaaaagaaggagccaaaagt
-gtgtacgatgtgctgtcatttgtgtaTTTGCCTGATCATTCATAGTGAATGGGACATCAC
-AGGAAACTGGTGCCCTAGGCTGCTTGCAGAGAGGAGAGCTGGTGGCTGGAGGACAGGGGC
-ACGGAGACTTTTCAACACATACCCTCTGGTACCTTCTGAGTTTTGAACCATGTGAATGAA
-ATGAACACAGGCCTTATTCAAAAATAAGTAAAATTAAGATTTCTTTACCAACCATATCAG
-ACACCTAACAGTTGTTAAGAACATCTGATAAACAGCAGACTGAGGAAAGTTTGGTTATGG
-CGCCCGGAGAGGGGGCTCTGCCTGCCTTCCCCCGCCCCACCCCCACCCTTCCAGGGCTCA
-GGGCAGCCCCCAGAACATCTGTGCCTCTCTCTAGGTCCAGGGGAGGGCCCACCTCTGACC
-TCCGATGTCCACGGGACTCTCCTCAGCTCAGAACGACGTCTTTTATTTAAAAATAGCTTT
-TATTTTAAACTCACCAATTCTCTCTcacacacactcacactcacgcacagatacacacac
-acCCTGTCACCAACAGTCTTTGTTTTTCCAAAAGTTCTGCCTTGTCTCTGACCAGCCAGA
-GCTGGGCAGGCTGAATGGATCCTCACAGCTCTCCAGGATCGGGTGGAGATGTCCCGAGGG
-CCCTGCCCAGAGTGTCCCGGAACAGGCCATGGTCCCCCGGTCCCTACACAAAGAAGGGGT
-GGGCTTGGCTCCTGGGGTCTTCTTCCCTGTCCAGCCAGTGGCTGGCTCCTGGCCTCCTTC
-TCCAGGGTCCAGGCTCATCTCCGTGGCCCTCGAAGGGGGGCCACCCCCCTCACCTTCAAG
-CAGCTGCCCCCCAGGTCACGACGGCCACCCTGCAGAGGGGGAGAAAGAGTATAAAGAGGT
-TCGATTAGGCCAGTGTGaacactggaactaacctctgtatccctcaagagggatcctgat
-caataaatcacagttcagccacacgatcaagttctctgcaacagaaagcagaagaaaccc
-tttctggactgatacagactgctgccaaatgacaatgtttagggacaaaagcaaggggca
-gGCTGAATGCGCCTGTGTGCTGTGATTGCTGGGGAGAAGCACACACGGGAAATTGTGAGT
-GGGTTTCTTCAGAGAGGAATTTGATGATGGAGAGAGGATGGGAGGGAGGCTCTCTCATGC
-TATACTGttttttgagatggagtcttgctctgttgccaggctggaatgcagtggcacaat
-ctcagctcactgcaacctctgcctcccgggttcaagtgattctcctgcctcatcctcccg
-agtagcggggactacaggggcccaccgccacacccggctaatttttgtattCACGCTATA
-CTTTTTTACCTTTTCTACTTCTTTCCCATATGATCTGTTGCTTAAAAAAAATCCAATATA
-TTTTAAAGCATAATATTTTACACGGGCAAAACAAGCACACCCCACAGTGGTCCTCCCCCT
-GCCTGACTGCATGCCTAGCGGCTCACTCGTCCACCTTTAAAAGGGGACTCGGTTTCTGGC
-CTCCTTGACTTCCCTCAGGGCGTCCCCTTTCCCAGGAATGTGCTCTCAGGTCTTGTCTCC
-CTGGAAAGGTTTCTCTGTTCCTGAAATTGCCTAGCACTTCCTGCCTTTCTGGGGACATTC
-CATGGGGATGAATCTCAGAAGGACAAGGCAGGGTCTCTCCTTTGTCTCCCCATCTGGACT
-GGGATCTCAGGGAGTGGTAGGGAAAAGGAGTTCTTCACTCTGTGGTCCCATTTCCAGCCT
-GGGCTCTCTTGGCCCAGGACCTGACTTGGAGCAGGCACCAATCAAGGCCGCCTGAATTAA
-GTGGCAGCCATTGGAAGATGGGCTAATGGCGGCAGTCCCTGAAACCATCAGTCCTTACAG
-GGGCTGTCTCTACCAGCTCTTCTCATTGATATTTTCAGACTGGACACATGGGtttcatcc
-tcaccgtaagccagagaggtcacagatgttaaagcaccccctcttttgaggcctccagcc
-actgaatgactggcccagaggcacccagccagttgtaaaagagctgggctagaaatctat
-gttgtccaacaatctgtcctgtttccaGGACATGATAGTGTCTGAAATCCCACTGTAAAT
-GCTCATCACCCTGAGCCTGGCTAGATGATGGAGGAACAGGCAGCTTTCTCAGCCCACTTA
-GAGAAACAGCTGACCATCTGGGAGCTCTGTCCCCTGCCCCCTCCACCCCCAGGTCCAGGT
-TGGGGCAGATCCATCCAGATGCGAGCCCAGCCTCCCTCGAGGCTCTTGCAGCCCAGGGAC
-AGCATGTTCACTCACAGGCAGGGCTATTTTGAGGGCTGAGGCCACAGTCCCAGCAGAGCC
-TGGGGCTTGGGCTTCTCAGACAAACTCTGGCAGGAGTGGCTGAGAAGGGCAGATAGGGGA
-GGGGGTGCAATATTAAGGTTGAATTAGAAAACTGGCCTTCCTCTCTTTTACTCTGTAAGT
-GCTCAGGGACAGGGAGAGCCGCCCCCTCCCACCCCAAGTCTGGAGGTCAGCTGGAGACCT
-AGGGTCCCAGAAGAATGCTGGGACTGttcacctccctgaacctcagtttcttcatctatg
-aaatggggacaaaatgattttacttgccatctcaaggtGCAGTCGAATGTGAATGCAGCT
-GTGTAAGCTGCTAAGTGTACTTAGAAGAGGTCTTGACggccgggtatggtggcttatgcc
-tgtaatcccagcacttttgggaggccgaggcaggcggatcacctgaggccaggagttcga
-gaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaaattagccag
-gtgtggtggctggcacctgtaatcccagctacttgggaggctggggcaggagaactgctt
-gaacccgggaggcggaggctgcagtgagttgagatcgtgccactgtactccagcctgggc
-gacagagcgagactccatcgcaaaaaaaaaaaaaaaaaaGTCCTGACAAGACCCCAGTTT
-GTTTGTCCCTTAGGAACTCAGCACCAAGGGTCTTCGGGAagcaccatggttaggagttag
-gctcaagtgagacagacctaggcttcgatccctactttgccaagggccaactactggacc
-tcaggcaagtgatttcatctcactgagcctcagtttcccccccgtaaaggggaattactt
-tacaggatcacacaagctaatctaggtaaagccttggcacagtgttgggaacaaagtaaa
-tgttcaataaatgttcataagtattattatCAGCATCATCTATGGACAGTGCCTCCTGGT
-CCCAGCTACCCTCTGGGTATACCAACAGGGGAGAGCCTTACAAGATGATCCTGTCCAATC
-CTCACCCCCAGGTGACAAAGGGAAAACAGGGCAGAGACAAGAACCCCCTTTCCACCTCCC
-ACGTGCTAATTCTACCACAGAGGGCCACACCTAACCCCTCCTTCAACAGAAAGATGCTAC
-AGGAAACTGTTTCCACGGCAACCCCAACTCCAGACTGGCCAGGATGGGAGGGAGGTGGTG
-GCTCAGGGTAAAGGAACGGGGTCTTGGGTCTTAAAGCTCTTCTGGCCCACAAAGCTCAGA
-AGGGAGCAAGAGCTCCCCAAGCCAGCCAGTTTTCTTCCAGCAGAGTCTTCAAGGGGCCAT
-AGCTGGCCAGGATTGCCCCTCTCGCCTATTCCCAGAGGAGACCGTGGGGTTGAGAGCATG
-GTTTCTACAGCCAAATTTGGCTGAGTTCTTGGTCCCATAGACAGATCCCAGGGAAGCGGC
-CAGGCCCAGGGGAGGCCCCTGTGAGCTGTGGGACAGGCCTGAGACCTGCAGAGAAGTCCC
-CCAGCCTGCTTGCTATGGGGGTGGACACATGACAGTTACAGGGACTTCCCTCTGTAACCT
-ATCCCACGTCCCaaccaggcaggcctgagtttgaatcctggttccatcactgactgtgtg
-tctctgcgccactggcagcacctctaagcaagtggggataaccacagcgcctcattcctg
-gctgttgcaggattttaatgataaatcataaagagcgcttagcacagATCAGTGCTCATG
-AAGGCTGCTGTCACTGCTGTTATTGGCCATTGTGCTCCCCCTCTGCACTCCTGCCACTTT
-TAACCTCTTCCCTCTTCCTTCTCTAGGCCTGAGCTCTTGCTGTATGCCCCAATCCTAGAA
-CACCCTTTCCTACCCCTTCATCGGCCTGCCCCTGTTCTAAAGCATCCTTCAGAAATGAGA
-CACAGAAACCCTGTCAGCACTCACCCTGGGTTGGAGGCTTTCTCTGGGCTCTGAGAATCC
-CTTTGTGCTTCCCCTCCCCCACCATCAGACCACAGCATCCTCATCTTCATCTCCCTGCCC
-TGACCCTGGGGCTGTACTGTCAGGTCCTGACTGGTGGAAGGGTGGGGACCTACAACCTGC
-TTCTCTGGGGTTCTCAGAGCCAACAGAAGGCAGCTGTTGGGTAGCTAAGGGTTGCTAACT
-GGAATGAATGGGTGAAAGGCAGTCAGGGAGTATCCCTGAGAGCCCCTTCAGGCCCTCCCA
-TCCCAGGAAGCCTTAAAGGCCCACTCCTGGCTTCTCAGCCCAGCCTGGGGCACTGACAGG
-GGCCCACAGCTGGGAGCAGCAGGGACCCTGGAGAGGGCACAAGCCTGAGGCTAAGAAGAC
-CGACGATTCAGGGCAACTGAGGCAGCCAAGTGTTGAGCAACCAGGCTGGATATCTGATGA
-GCCAGACAGAGGGTGGTCTCAGGCCAAGATGCAGAGGCCTCCGCAGAACAGGGTGGAGCA
-AGGGACCAACGGCAGCTGTGAGAACCAAACAGCAGGGAGTCAGGGGCCTAACTCCAATTC
-CCCATGCCCTTCCACTTGGCCACCAAAAGTCAGTACTCTCTCAGCCTCAGTTTCCCCGGA
-TGTAAATGGTAGCTGCTGGAATACAAGTTGTTAGACAGGCTTCTTTACTGTAGGAAAAGC
-CCAGGCCAGAAAGGCACACGGTCGGGGGATGAAGCAGGTTCCTTGGAGCCTGGGCAAGGT
-TTCAGCCAAGAGGCCACCTCTGCTGCCACACAGCCCCCGCCCACCCCTACCAGCCTGATC
-CACTTTCTTGCCCAGGACACATTGCAGGAGCTGCACACCAGCTCCCTCCAGCTGACCCAA
-GAGTGCCCTCTCCCAACACCACGTCCTTTTGGGGGCTGGGGACTCTCAGAGGGCCCCTTC
-TTCACTCCTACTGCTCATCCGCTGGGTACCTCAGGCTCTCGGTTGGCGGTTTGTGGCCTC
-CTTTCTTCTCAGTCTCCTGCTCTTGGGTTAGATCTTAGGACAGGGGACAATTATTTCAAG
-GTGGGGGCAACACACACCGGGCAAGCCCAGGGCCAGCGCCCCGGcttcccagctgagtaa
-atgtgggcaggtgatcccatctctgatgctcagatcctcatcaggataaaatgggcagaa
-aaactacctgcctgaagggattcttgtgaaggcaaaaaagtggatgtggagcgcatcggc
-acagaggaagactccataaaagatgggtctttgttACTCAGTCCTCATGCCGTCTTCCCA
-GCAGGAAGGAAGTTCCAGCACACCTTTCGTTGGAGGGGATATCCCACACTGAGCAGTTAA
-ATCAGACCCGAACTCTGGGTTTTCCCGCATCCTTCTGTTTGGGGGCCTGGGCATTAAGTC
-AGTGGTTCTGGGCTTGGGGTGCCGCACCCAGCACGAATTCCACGTCGCTTCCCCCTGGCC
-TCGTTGGGGACCCCTGCACCTCTCCGGTTCCCGCAGAGGCGCTGCCCCCCGCCTACCCCG
-ACCTGGCGGCCGCAGCGAGGGACGCAGCACACTCACCCCCTTGCGCTGGTTGCTGAGGCA
-GAAGGTGCAGATGGAgcgcggctggcggccgccgtcggcggcggcggggacggcgcccTT
-GGCACTGCCCGCGGCACGGAAGCACGGCTGCCCGTCGTCGGCCGAGTCGCCCAGCAGCAG
-CACGTTGGCCAGGTGCGCGATGTAGCTGGACGCCAGGCGCACGGTCTCGATCTTGGACAG
-CTTGCGGTCCACCGGCTCGGTGGGGATGAGCGTGCGCAGCGCCGTGAAGGCCGTGTTCAC
-GCTCTGAGTGCGGTCCCGCTCCCGCGCGTTGgccgcctgccgctgtcgcaccaccaccac
-ggggcccgcgccgccgccgccgcccgcccgccgcccgcccccggggcccgggccgcgccg
-cgccgcctccgggccctcgcagcagccgAACGACTGGTCCGACGCGTCGCTCTCGCTGCG
-GTTCTCCTCGTCCTCGCTCAGCAGCCGCACGTCCGGGTACAGCACGTGCGCGCCGACGGG
-CCGCAGCAGCGCGAACGCCATGGGCGCCGGCCGCGTCCCTCCGTGCGCCGCGTCCCAGCG
-TcggccgcgccccgccgtgcgctcccgcgcgctcccacggccccgccggcccccgccTTA
-TAGGCGAGGGAGGGGCCAATGGCAAggccgccccggccgggggcggagggctccgcccgg
-ccAATGGGGAGGCGTCCGCCCGGCCAATGGGGAGGCGTCCGCCGCGCCCTGGCCAATGGC
-GACGCTCCCACCGCCTCCGTCCCCCAGGTTGAAAGCGGCCCGGGAGCCGGCGGCCCACCC
-CGAAGGCCCCCGTTCCCGGCTGGCTAGCCCGGCAGATGCTGGAGGTCTGGGAGGGTCGGC
-CGGggtgggcccagatccgaactttttgtctccagcctggaccacctgggagacgcgggc
-agatccctttctcctctctgggcctcagtttcctcgttcggaaCGTTCAGATTGCAGAGA
-AACAGCTAGTGTCTGCCTGCCCTCCAATTCTAATCCTgtagttctgcagctttcacgtgc
-gtaagaactggggaaggggcttttgctattacagagtcccaaattgctcccattctgatt
-gagcagttctggaacgggcccaggaacctacattttgtaacaagccattggtgatagtgg
-tggtgtccgtggagaacacttggagaaAAGCTATAATCTTTCCAAATGAGGATTCGACAG
-TGTCTTGTCCCTGAAGACAAACTTAAAAAGAAGAAGAAAAAAAAAAGCAAAACAAAACCA
-CAATACACAAACACCAGTAGTTCGttcgttttttcaacaaatattcgttgggtccctact
-atgtgtcagacatggttttaggtctgaggatacagccattaacaaaataaattcttcacc
-ctcacggaactgacgttttggttaaggaACTACTGTGTACCAGACTCGGTGCTATATACT
-CTATTGCGCCCAGCTGAGGCTGCAGGATGGCAGCCCTGAGTTACAGGTCAGAGAGCTCCG
-GCCTTCAGTCGTACAGGTGGGAGTGGCGGCGCTAGCTCCAGCCTGTCCGGTTTCACTACC
-TCTTGGAATCCTACCACCACCATCCCATCACACACACACGGGCTATCTTTCCTCAATGCC
-TGCTTGCCTTCTAGAAACCTTAGATTGTTCAGCCTGACGTGTCCTCTTCAGAGAATTGCT
-GAGCCAAAGGTGGTTGCCGGGGTCTCGATCTCACTCGTGCCTGCTGCTCAGCTCTCTCCA
-GGCACTAGCTAAACCAGCATCCACTTGGCCTTGAAAATAAGCCCGAGTGGCAGCCGGTGT
-AGCAGACAGAGCGCAGGGAGTGGAGTTGAAAGGCTTCTAGGTGCATTTTGGCTCCTCTGG
-GCGTCTGTTTTCCTGACGATGCCTGCAGCTCTGCCATGCTGTGCTTTCCTGGCTTCCCTG
-ATCCAGGCCAGAATTAGGGGAAGAAGAGGGAGCGAGGGATTTCCCATGACTGCCGGGGGA
-GGAGCCCCTTAGGACCCAGGGTCTGCGGGAGAGTCTGTTCCCACACCTGGATCCCCCCAC
-CGCCAGCATTTGACCGTGACCCCAGCCAGGCTGGGCTTTGGGGAGGAGGGAAACAGCCAG
-CATGGGCCCCCTCCCCGCAGGGCTGGTCCCACACACAGCCCCAGACCAGGCTGCTGCTTC
-CTGAGCCGATGAATTATTACCGGGAGATTTCCTTCCCTGTCTGCGCCTCCTCACAGGGGC
-TCCCAGCTCACTTCACTTTCGCTTTCTCCCCCTTCTCCCCCTCCTCTCTGCTTCTGACCC
-TCAGGCAGCTTGAAATTCCTCTGTCCAGCCCCCTCCCAATTCCACCTCCAACTGGAGATG
-CCAACCAAGGCGTGAACTGGGCCCGGAAGGCGAAGAGGGGCTTGCCTTGTAGGCTCATTC
-ATTTATTTGCTCCTTAGGCATATTTTGACACTTGGGACCCTGGGAGTAGAAGAAAACCAT
-GAATGAGACTGAGACAGGCCTTCTGCAGCCGAGAGGGGAAGGCGAGCTGTAAACAAAGGA
-TTTCAAGACAATGTGGTAGGAGCAAGCCAGGGTCTGGTATCAGAGAGACCCAGTTCCGGT
-TCCAAGGTTAGCTGcttcccagagtctcagttgcctgctctgaaaatgagataataatag
-tacccattcccagggctggtgatggttccatgagtttgtgccagtagagctgggcttggc
-acacaggagtgctcagtaCCTGAGAGGAGTTTGTGCTACTGTTTTTAGGGGCTGGCCCCA
-GCCAACTGCCTGGGAAAGGGCTGAGCAGCATTGACTTTTCTAGGTCTTGTCCCTGGGAGT
-GCGGAGGGGACTCCTACCACATTCTCAGCTCACCTACACAGGGgacctcagcttccccca
-ttctctgtccctcactctgctccagccacactggcctccccactaaatctggagcccact
-tcttcctggcccccctggcccctgatagtctcatagtttgttcactcatttccttcaaat
-cttcactcaaatcttatctcagggaggcccttcctgaccaccagcactaacagtaatggc
-ttctccaacctgccagcacccccagctctccctttccccttatcctgctttatttctttt
-tatagcatttgtcactgactttcattcattcacttattcattctacaaatattaactgag
-cacctgctatgtgctaggcacagttctgggtactgcggatacagcagtagaGacattaca
-tatttatttgtctaccacctgtctccctccactagagtataagctccatggggcaggtac
-tttgtgtattttgctcatctcacttccttcccaacacaaccttctgaggtaggtattgtc
-attattcccattttacagatgaagatacggaggttcaaagaggggaaagtgacttgcccg
-aggtcacacggtgggccaatgtgggagctgagattggtctgactccaaagccattgctcc
-ttccctaaccacatggcttctGAGGCAGCCTAGAGGCCTGTGAGGGCTGAGTAGGAGTCT
-GCCAGGTAAGAGGAGACAGGTGTCACAGGCTGAGAGGGTAGAGGCTGGTCCCTGCCTCCC
-TGACCATGGGCACCCTTCACTTCTACAAAAAGCATTTGTTTCTCAGAGGCACCTGCTGTG
-CACAACTCTGAGCCTGTGCTCCAGCTGTCCTTCCTGCTTGGAATGCTGCCCCTTTGGGTC
-TGACCAGACATCCCTAGTCCTCTGCCAGTGTTCAGAGTAGCAGATGGTGAAGGCCTCTTT
-GCCACTTTTTGCCAACCTTGCTGCAAAGTCTTGTTGTGTTCATCACACCATATTTTGACT
-TTTCTCCCTTCATCCCTGATTCTCACTTCCATTTCCCTCCCCTAACAGGGCACCCACTCC
-CATATCTTTGACGCATGCCTTTGGATATATGTGTGTCTTTATAAAATGTGCATGGCGTTG
-ATTTGTGTGTGGAGGTTTTTAATGTATATAAATAGTGGTTTCAATAGATCTGTGTCATAG
-GCTATTTTGTTTCCTCGACACTGCTCTGTGtgctgagtccagctcaagtcccttggttcc
-cactgctgctaagcatgcacggtgtgcgtgtgccaccatgcctccttttcccaccgcttt
-agtgatggatgctggctacctccagttcccacctccccaagcaaagctgtgatggacttg
-cagtgtgtgactctcatggactcccgtgtgtatttctctgggatgtacactcgggggcag
-gatccctggggtggagagaatacatacagttactgcactctatgacggctgcctcagtct
-acatgcccagcagcagggcatgagggaccactttctccacatgcaccctagcacttggaa
-ttatctgACTTCCCAATGATGGAGATATGGGTTGTTTTCCATCTCCTTGTGCTTGCCTCC
-ATCACGGTGTGGGCAATAATGAATACTTGTTgcactttgggtggccgaggcgggtggatc
-attgaggtcaggagtctgagaccatcctggccaacatggagaaaccccgtctctagtgaa
-aatacaaaaattagccaggcgtggtggtgtacctgtaatcccagctactcaggaggctga
-gtcaggagaatcgcttgaacctgggaggcagaggttgcagtgagccgagatcgcgccact
-gcactccagcctgggtgacagagcaagactccAtctctctctctctctctctctctctat
-atatatatatatatatatacatatatatatgtatatatatgtatatatatgtgtatatat
-gtgtatatatatgtatatatgtgtatatatatatgtatatatatatataATGAATACTTG
-TTGAACAAATGAATGAAAAGGCTAATACACAGCCTCCCACACCTACCTTGTACCAAACCT
-CAGTCTAGAAGGTGGCGGTATATGTGTGTATGTTTGTGTGTAGAGAGGGGAATATAAGAC
-AAAGTCTTATGCCTCAACCTGCTTAGAGAAAAAGACTaatgacagttagcatttattgag
-ggcttactttgtgtcaagaattCATAGGTGTATATTCACAACCTTAACTTCAGTGAGACA
-AGTAAAATGCATTTCTCTCTCATTCAAGGCCTTTGGAGGTAGGGCTGCTCTGGCATTCCA
-CAGtgtggtcgccagcttccaagattgccagcaatgatccttgcctcctagtattcatct
-gcgtgtgtagaaccctcccccattgaatcagatttgactcatgtgaccaaaagaatatga
-cagaagtgacggtatgtgacttctgaatgtagctcataaaggcattgagctcctgccttg
-ttctcttgagtcatttactctggggacagcagccaccatgccatgaggacactcaagccg
-tctgtggagagagaccaaggtccctagcctacagccatcaccaatttgccagccaagtga
-gtgagcctccttggatgtggatcctgaattcctgacctgcaggacctgtgaaaaagaaga
-aagataatacagaaagacaaagaaaaaagataataaataattattggctgggcgcagtgg
-ctcacacctgtaatcccaggacttcacaaggctgaggccaaaggatcgtttgaggccagg
-agtttgagaccagcctgggtaacatagtgagaccctgtctctaaaagaaaaaaaaggaaa
-agaaatttgctggatgctctggtgcatgcctgtgttcccagctactctggaggctgaggc
-aggagggtcgcttgagcccaggagtttgaggctgcagtgagccatgatcacaccactgca
-ctccagcctgggcaacagagcaagaccttgtctctaaaaacacaaaaattatcaatgttg
-taatcccgtaagtttagggtgttttgttatgcaacattagataactaaaacaGATGGTgc
-cggggacccaggctctgtctatctttttactgcaccatacatagctttcacttcctagtt
-ctcttacagagccacatggccacaggagccattctatctgcattccaactggcaaaaagg
-agaaagaggcagaaggaagagcatgctttaatctgtagaacaccaacctcactccgttca
-catcccgttggcaagatcttgtcatttgaccatacttaactgaaaaggaggctgagtata
-tagtcttttgcaggtaggtgtccgtgtgtgcagctgaacactgggtttctgttagtgagg
-aagaagggaagaatggctattgaaaacaactaacCATAGGTGTTATATACCATAGGTGTT
-AACTCTGGAGATAATAATGTCACAtggttaagtttgcacatttgggagcctgactgcctg
-gtttcagttctcagttaggccacttaccagatgtgtgatcttgggaaatttaccaaactt
-ttctgggcctcagtttcctcatctgtaaacagggctcacagtaaagcctgcctcataggg
-ttgttatgaggattaaatgagtcaatgtatgtagcgtttataacagtcctggcacatggt
-atgtgctGTGTGTTAGCTGTTTTCATTATATAATCCTTACAAGGGttttttttttttttt
-gacagagtttcacaattattgcccaggctggagtgcaatggtgcgatcgcagctcactgc
-aacctctgcctcccaggaggattctcctgcctcagcttcccatgtagctgggattacagg
-catgcaccagcatgcctggctgattttgtatttttagtagagactgggtttcaccacatt
-ggtcaggctggtcttgaactcctgacctcaagtgatccaccctctttggcctcgtaaagt
-gctgggattacaggcatgagccaccgcgcctggccACAAGGGGTTTTCTTAAGTTCTCAC
-AACCAGCAAGTGATGGAAGCAGAATTTGGCCCAAAAGCATTTTTTTCCACTTGCGTCATC
-CCATAGAAATTCGTAGAGTGCAAGATCAAGAcccagatcagtacaccgcacataatacgc
-atccagaaatatctgtcgaatgagtgagtTAAATAAACACGTAAACTGTCCTTACATAGA
-GATGCTAGGTTTTGTTTGGTTTTGTTTTATGTTCAGTTAATGAGAATGCTCCATTGACCC
-CATCTGGTTCCTCTAGTATGGGGCTGATGCCCTTGATACCATGCTAGAACTCAGTCCCTC
-CAGGGTCCCTCCAAGCCATCATTTTTAAGGGTGAATTCCTGGGAACACTTGTTCTTGCGG
-ATGCTCAGGATTCCATGATTTTTTttaaaaaaagtcagagaagctgcattttatatcccc
-ctcctagcgacctgcaacaacattagcatgttaaagagtcggagaaatcctgcaacaaaa
-aagcttgttgggcttcatttcaatctgcattttgttttcttatttttttgagacgaggtc
-ttactctgttgcccaggctggagtatagtgatgcaatcatggttcactgcagcctcgacc
-tcccaggctcaagcaatcctcccacctcagcctcccaaataactaggactacaggcatgt
-gacaaacccagttaatttttaatttttttgtagagatttaatttttttttttgtaggcaa
-ctatgttgcctaagctagtctctaattcctggactcaagcaatccttctgccttggcctc
-ccaaagtgctgagattacaaacatgagctaccgtgcctggtctcaatctgcattttctga
-gcttatttTAGGCTTACTTGATTAAAGACTCACTTCCTGCCCCCAACACCAGACACCTAA
-TAGAGAATACAGTTTAGCAGACATTTCTCCGGGCTGTTGCCACTGACATCTACCTCAGTG
-TGAGTGGGTATCCATTCTTTCTAGACAGCATGTTTGATAGGAGTGAAGTGGAAGTGAGCA
-GGTGGGTGCTGGTTACCAGGAAGAGACAGGGTAAGAGAGGGAACATACAGGCATATGTCC
-GAGCCCCACTTTCTAAGGGACATAAAAATATCATTGAAAATATAATAGGTGGAGAAAAGT
-GTATTTCGTGGTACTTCTTTCAGGGAAAATGCAATGTAAATTGAaataataatattattg
-aggggtaacaatatgccaggcactctgctaggaacttatttaatcctcacagcagtctca
-tgagctaagtactattaatattcccgttctataggtgagtagactaaagagcagaaaggt
-taagtaatttgcttaaggtcacatagctagggagtggacaggaattcTTTGATAAGTTGC
-TTGTGGTGAGGATAACAAGGGAAGACCCTCCCCCGGGGTAGTTTAAGCTCAGATGCTCAC
-AAAACTCTGCTCCAGGGAGAGTGAGCCTACTTGGTTGAAGAGCACTGATTTTGTTGAGTA
-GAGGATGCAAGTTTGGGCCAGAGTGGAATTGTTCAAGAATAGAGAGGAGGTTGGTGCTGC
-CATGGGTGCCCTCCTTCAGCTCCATCGCTTTAAGGAAAGGATGAGCTCATGTTTAAAGAC
-TTTTAAGTTGAAGGCAGTGCTAAATAATTTAGTGTGGTCAGGTACCCACCTGACTCAGGT
-TGACCCTGACACCAGTGCCAGGTGTGGCAGAATCACCAAAATGGTGTGGAAGATCAAGAT
-AATGCTAAAtgaaactaccatttaagtctgctttgaaaactcaaggagtttggagctcag
-agttgccaagaacaagttggaatggcctgaggctgccatgctatgaggaagcccaggcca
-catggagaggccacatgcttttgactggtcgttctggtctttcaattctcccagctccag
-gaacagacacatgagtgaagaggctttcatacaattccagccccagttatcgagtctttg
-ccattgaagcctcagacatcatggacagtgacaagtcttcactgctctacccattctgaa
-tcctgaactacagaatccgtgagcataaggaaatgcttaagacaccaaattgtggggtaa
-tttgTCACACAGCAACACTAATTGTGACTGTAGCTCACTAAAATGCCTCCCAAATATTAT
-CTTCACAACTAAAAGCACCAAAAAACCTGAAAGTAcagttgaatttcatgatttgctata
-attatattctagaaagtcactgcaaacactgaattagcaaatactgaaccactgctccta
-ggagaaatacaggcttaggttcctgtgaaccattctgttcccaacatgttcatcaactca
-tcaatacttaagcttgttttatgcatgtttctgttgaaagacaccatgtttaatacatat
-tgttgattcactcacattgcactcatggccaacagcactgtaactcacgcctgaatgaag
-cttatctaactcacatgatcttctctgtaaggcacatcaaagccttctggtgcttaggaa
-cattagacagcacctcagcaccatgcccggggccattgtcaacagtacaatcaccagcgg
-aagacacaaaaatttgtaaaatgtggcactgaatagactgaaaaggacagttgtttacag
-tgtgagagctgaaagaagaaggcagcgtgtcactttgtatgatctcacctggaaacatgc
-atcaagtgactcaaaaaaaattttttttttcgagacagggtctcactctgttgccaggct
-ggagtgcagtggtgggatctctgctcactgcaacctccgcctcccgggttcaagcagttc
-tcctgcctcagcctcccaagtagctgggactacaggcacacgccaccacacctggctgat
-ttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcaatcgctt
-gaccttgttatctgcccacctcggcctcccaaagtgctaggattacaggcgtgagccact
-gcgcccaactggcaactcaaatttttcatgactcctcaagtatccatcaatgaccatgag
-agctccagcgagtgttgattttgaggttacaaatttagtgagtagatgaatccacgactc
-cacaatcagtgactaataagaattgactgCATTATTTAATAAGTTCAGGGCTTGCCGTCG
-TGATTCACAATTGGAGAAAGCGAGGCATGGAGCAAGTCCAGGGGTGTTCCAAAAGGCCTC
-ACTTTTCTCCTTTGCAAACTGTGGCTGATGAGGGCCATCCTGCGGGGTTTGTGGAGAGAA
-GGGATAGTAACAACAGCTGCATTGTATGGTGCTAtgtgctgcacactttgcacacctgat
-catttaatactcacaatgatccctagcagatggatcctattaccaagttcattttacaga
-tgaggaagcttagacccagcaaggttaaggggctgtgctcaaggtcttaccttctaggag
-aggcagagctggatctgaagccatttctgttctcagcccctgctGTGTGCTTTCCTACCA
-TCCTCTCCAGACTCGCCCTGAGCCCAAGTTGCtgaggcatgtggcacggtgcctggcaca
-cagtaggctcacagtagtggctgctttGATGATGACCATAAACTGGGATCTGGGGTCCTT
-GAGATGATTCTACCAAGGGGACCCGGGGGAAGCTGAGCCCTGGGGCAAAGTGGGGGCCAG
-CACAGGAGCTGCTGGGGAAGGAACAGAGCCTGTGCGGTGGGAAGATAGGACATGGAGCAA
-AGAGGATCTTGAATCAGACCCCGTGGTCCCCTCCTACAGAGGGTTAAAGCAAGCCAGCCT
-CCTTCCGGCTGAGCGGAAATCAGATTTTGAGAGCTGAGCAGGGCTCTGGAGGGATGTTTT
-TCTTCTCCATTTGTCTGCTTGTGGCTGGCCCATAAAATCCACCGGAACTCCATGCTGGAC
-TGAGGAATTCCTGCTGAACAGGGACATGGAGAACGCAGGCTGGGAGGGGGCATAGTGTGG
-ATCCTTATCAGAGCAGAGACCACCCCATCTTCAAGGCCCCACCTCCAGGTTGGGTGATCC
-CCTCTGGAGGCCTCATAGGATTCCTGGGTAAGGGGAGGGACCAGGATCGACAGGGTGGGG
-GAAAGTCCAAGGAACAAGTGATACCCCCTCCCACCTTTTCAAAGTGAACTTGTGGGGTGA
-GGAATGAGAGGAGACAGGGAGGGTCAGGCTGTGGCAGGTCAGTGAAGTGtgatgcaggtt
-ccaccttctacgctgtgtgacattgggcaagtctctgcccgtttcctcatcattgcaacc
-agggggctggagctagatgaccaccatgtgtaattttctaatcagagctgacagtctgag
-gctctTTCTGTCTAGTTTGCACCTTGCATGCATGTCCTCCCCTGAAGGCAGTGCAattat
-tataacccctattttaaaggtaaataaaccaaggctcactgaggcaaggtgacctgagca
-attttgcccttgaagggctgggacaggatgcaaacctagacaattggtgccagaattcat
-ctctcaagcattcgctctcctgCCTCCCAACACGAGTTTCTACttctctttgccctggga
-tgacctctcctttgtctcttggcttgatgacctcatttttaaagattcggctcatgcatc
-acctcccccaagaagcctgtcctgactaactaagctcggttggggctcctctctgtctgc
-tcatgcctctgggaagtagctgtctcttttggtcactgggctgtgagccctggatgagca
-gagccacttctcattccttcctgtgcctcctgcatcAGCCAACATAAAAAGCTTTCAATT
-TTCCTTGAAGATTCTAAGTGCTTGTGGTGGTTTTAGAACATGGCTGCCTTAAGAAGTGGG
-GTCCATTggtagctcatgcctgtaatcccagcactttgggaggctgaggcaggaggattg
-cttgagcccaggaagctgaggccagcctgggcaacacagcaaaatcccgtctctacaaaa
-aatacaaaaattagccagatgtggcagcatgtgcctgtgggctcagccccttgggaggct
-gtggcaggaggatcacctgaacctggggaggtcaaggctgctgtgagctgtgattgcacc
-accgcactccagcctgggtgatagagggagaccctgtctcaaaaaaaaaatggggtttat
-gtctcctcctcttgagtctgggtgggctcgtaacagctttaaccaatagaatatgtcaga
-agtgactctgcgactactgagactgttcactggcactctgtttttggagccctgagctgc
-cgtagaagatgttcaaatactctgggactaccatgctgtggggtcacatgtaggccctcc
-tagtcttcaagtcatcctggtctggggactccagatgattccagttcttagttgtttcat
-atccagcctttgagtcctcccggctgaggaccaagacaccacggagcaaaaacaagccat
-ccccaccactcctggcccgaattcctaagcataataaaatggtggctgcttaaagccacg
-gagttttggggtagtttgttacacagaggtggtaacgggaacaGtgcgaccaccctgggc
-atgtcaccttcctctctggccagccagaaggtgcagcagccacaaagctctctgcctcct
-cccttccctcagcggtgtgctgctgacacagcagtcagagatgccccataaatgcttcaa
-acagaccatgtccctcctttgctcaaaaccgtctgttggctcccagctcactcagaggaa
-atgccagattcttaccatggcccacgggccctacatgatgggacccctctccagcccatg
-gcctctctgtcctgtctcccaccctctcccttctccagccacaccacctccttgctactc
-cttgaacaccacatacgccctgtctcagggcctttgcgcttgccaaggacagtgctccat
-tgcctggaacattctttctccaggtgttgcttggttcagtccctcatcttgttcatgtcc
-ctgctcagatgtcatcttctcagtgaggccctctcttcctactcccaaaccccttgactt
-gctctattttcctctcgccatggcccttagaactacctaacacactatgcactttactta
-ttgtgtttccccgcccaccccgtccaccctagaatgtcaataccacagggcaggaatctt
-ggttattctttaatgtctccccagtgcctgtaagagtacccaacactcacagtggtttgc
-tgaatgaatgaatGAATGAGCTGTAGGAGCCCAGAAGGGGTTCGTTGCCTTCCCTAGGAC
-TATGTATGTGGGGAAGCAGAGTGGGTGAGGAAAGGGCAGGATTGGAGTGACTGGGTTGAG
-CCAGTGTGGCCAGGGCTGGAGGACATTTCTTGGAAGTGACAACTCACTGCCCAGCTGGGG
-AATCCTGAGGATGGGAGAGTGCAGGGCAAGCCTTTGAAGATGCAAACATGGGTCGTCTCC
-GGGGCCTCCCTCCTTCCTGGTCTTGTGTGTCTCCGGCCCTGCCAGTAAACAGGATCTCTG
-GGCAACTGCCTGAGAACCCTGCCCAGTGCCCCAGAGGCCCTGACGTGCTCCTTCCTGAGC
-TATAAATCAGGTACCTTCCAGCTGTGTGACATCCTGGATTTGATGGGGAAGGCAGAGCAG
-ACAGATTTGTTGCAAAGAGCTGTGCActgcaccttgatttccttgttagcaaaataggaa
-ggataggagcgttgacttcaagctgtggctgtgaaatcgagtgagataatgcatgaaaTT
-CCTCTGTAAACAGAGATGCTTCAAGGACGCATTAGTGGGTGGAGGCACAGGgagcaaatc
-ccaactctgccgctgagctctgtgtcttcacctgtaaaatggggttaatgtgaatcacta
-acttcctagggctattgagggattcaaaaatggagagaaaagtcttagtacccaatgaac
-gtgcaatagatattagctgttattaATGGTAACTATTACCATAATGATAAAGAATCAGAT
-GTTATTGATAAGCCATTTGGGAGACCGAGAGTCTCAGTTCATACCCCAGAGGGGACCATG
-GACTTGGCACAGCACGATTTCAACCCTGTGCCTTTTGTGTATATTTCAATCTGGTCAGAG
-ACTATCTCCCACTCACAGGCCACCTCCTCCCCCTACCCCCAGAAAGGCTATACTTGTGAG
-CACACCACTTCCCTAAAATATGCCACAAGAGTCGACATCTagccaggcacagtggctcat
-gtctataatcccagcaatttgggaggccaaggtaggaggatagcttgaatccaggagttc
-gagaccagcctgggcaagatggtgaaaccatctctactaaataattttttaaaaattagc
-tgggtgtggtagtgtgcacctgtagtcccagctacttgggaggctaaagtgggaggattg
-cttgagcccagaaattcaaggctgcagtgagctgtggttgtaccattccacttcagcctg
-ggcaacagggcaagaccttgtctctaaaaaaatttaaaacaaacaaacaaacaaagaATA
-AATATCTAGCCTTGAAGCCAGCCTTGGGGGTGGGGTGGGAGGAGGACTATTTGTGtgcag
-gagttcaaacccaggccccatcactccccagatgtggaaacttagacatgttatttaatt
-gtcctatgcctcagttccctcaactgaaaaagagaataataatagtacccatctcttcta
-gttgcattgaggactgaatgagttaaAAAGTACCcaacacaccatatgagataatgctat
-tttcattctaccaatgggtaaactgaggctcagctaggagaaagaacttggttcaagCTA
-TCAGTCGTGTTGTTTATTGGCCCTAAGTTGTGACGAGTTTCATTATACCATTAGAAGCCC
-CCGAACAGTGAACTCATTGTTTGTGAGGTATCTCTATCTCTTAGTGATTTTTTAGTTAAA
-TGAGAGTCCATGCTAATCATTTATAAAAAATGGATAAGATAAAAACTTAACATTGAAACA
-TCCATGGGCTTCTTTCCATAAGAAATGGAGAAACTCTTGCTCCTAGTATTAAAAGGTCGT
-GGGTTCCAGTTTGAGATGCACCAAGCAAGGTAATAGGAAGTCCTTGAAGGTTCTTGAGCA
-GGGGGAAGCATGAACTTAAAGCATATGAACCATGTGTTTGGGTCAATTCAagttactgag
-acttagacattgctggtgggatgcaaattgctacaatctctgtggagggtgattgagttc
-cacaaatatttaagataaatgtaagagctcctaccAAAtgccaggtgctgttcaggtgct
-aaggatttgcagcaaataaatccaaccaagtccctctgcctggtgcttattttctggaga
-ggagacacacaatgaatgaatatacaacttagtatagcgtgCACTGGGGAAAGAAATAAG
-AGCATTTCTACAATAATGTTTACTGCAGTGTGAAGGGGGATCTGAAGAGGCTGGACAGAG
-CCAAGTATGGGTGAAGATGTGGAGATAGCGCTGGGGGTGTGTGGACTGGAGCTGCCATCT
-GGAGAGCAATCTGTCCAGTTAAATCTGTACATTGggtgcataaattatggccaccaatta
-tttgacattcctcccatctagatgtaggtctatgtatctgctctctgaatctgggctggc
-ctctgactgctttgacaaacaactatggtggaagtgatgatgtgtcagtttccaggccta
-ggctttaaaagattggcagcttctacttcctctttcttggaacaattacttgaggggaag
-ccagctgccatgaagaactccagccaccccaagactgccattctgtgaggaagtcccgcg
-aacaatggaaagaagtcctctaggatgagacaccatgtgatggagagagaggccaggaac
-atcaaggctgtagacatgagtgaagatgccatcttgaaagggaacctccagccgtagctg
-tttcagttgataccacaaggttcagaaaggagccacccagctgagtccttcctaaattcc
-tgactcacaaagtaatgaacaaagtggttgctttaagcctctaagttgagggtagtttat
-tgtagtgcaaaagataaccagaataGATatatccgatgacccagcaattatactcctggc
-tatatgtccagacaaaatTCTCTTATCAGCCCATAGAGGATATGGCCATATTGTTGTGGC
-AACAGAGAGTTAGAGGCCACTCAGGTATCCATTACTGGGGTGGTAGAAAGGAATACATGG
-TAGGTGCAAAGAGCTCTAGGCAGCAATCAGAAGTCACAGGTGAAGCCACACATACAAGTC
-TGTTATGTTCTACGTGAAGACTTATACACCACAGAATGCACAAAGAACCCATCAGAATCT
-ATGGAGGTGCAGAAAATATGAAGGGGAAATGGGATAAAAAGGAATAACTAGAGAGAGAGA
-AACAAAACCAAACAAAGGAGGGTGCACAGGGGTAAGTTATGATAATCTGCCATGAATTGA
-GGTCTTATTAAACTCAACGCTCTACATTTAAAATCTAAAAAgtaataacaaaggccaaca
-aaattaatgtgtgtgaatagggggttggttaaataaattgtagcacatccacatgaggga
-gtactgtaaagccataaaaaagagtggcagagcttgctatgtactaacatgtaagagtcc
-caaagtatgtcgaaaaggctataagaagggtattgaaaaggatgcataataggcttccat
-ttgGGGGGAGATACCAGTGTGTGTGGTTGTGGATATGTTTATAGACAAATGGTATATCTG
-TGGAAGGATGCTCCTGGGGAAAAGAGCCAGATGTCAGGGGAGAGGGGTGGATGGCACTTC
-AGAAGAGCAGGCACCCAGGAGCTGTGTTCAGAGAAGGAATTGCCACTAACACTGGGACCA
-CCTCCTCCAGGCCAGGATCACGCCAGGTGTGGGGGCTCAGAGTGGGCAGAGAGCCTCTGC
-TGCTTCCAAGATGCCCAGGGTCCTGACTGTGTCCATGATGCAACCTCAGCCAACAAGTTG
-GTTGGGCACTGCCCACTGCTGTGCCCTCATCAGCCACTGTCCTCACTTCATTGCCACTCA
-CCATCACCACTCTCCTTCATTCTGCCTGAAACACTCCTCCCCACTGCCCGTCTCCCTCTG
-TTACTTAATACTCAAACTAGTACAGAGAATAACAGAATAAAATCCCATGTACTCACTGCT
-CAGTTTAAGGAATAATACttttcttttcttttttgagatgaagtctcgctctgttgccca
-ggctggggtgcagcagcgtgatctcagctcactgcaacctccgcctcccagattcaagtg
-attcttctgcctcagcctcctgagtagctgggattacagggatacgccaccacacctggc
-taatttttgtatttttagtagagatgggatttcaccaagttggtcaggctggtctcaaac
-tcctgacctcgtgatctgcctgccccggcctcccaaaatgctgggattacaggcatgagc
-cactgcgcctggccTAAAACTTTTCAAAAAGAATTGAGAGTGAAtggttttaaatatgtc
-cacaaattcttggacactcctctcttcaaaaagtagagttacattctccttacctttgag
-tatgggctgagctcagcaactcatgtctaatgaagaggatgtggtgaatgaggatgggtc
-acaaaagggatacaacttctgcttaattgtccatctgtccgtctatctctccatgctcac
-ttttggaatccagccaccatgttgtgatagaacccaagatgcatgggcgggcccacatgg
-agaggaactgaggccctctcccctcttcccagtccctgatcaacaaccatcacaaatttg
-ctagccacccagatgaaccccctttggcttggcagcaaattctccagcttaccctccaac
-tccccaacccgataggccttcagatgactgcaggcccagctgacagctgaatttagcttc
-ctgaggaccagaaccacccagctaaaccatgcccatattcctgccttcagaaactgtgag
-atataaaaaatgactgttagtactttgaaaacattatgttttgggatgatttctaatgca
-ggatcgattgctaatacaGAGGGTCCCTGGTATCCCTCCCCACCATCCCCATCCACCCTC
-TTAGAAGCCACAATCCTGATGTTTATTATTTCCATGAATGTTTTACCTTTTACTACATAT
-AATAAATCCTTACCCAATACATAGGACTATAtttccttcttttttaaagaattttttctt
-tttgagatggagttttgctcttgttgctcaggctggggtgcaatggcgcgatctcggctc
-actgcaacctccgcttctcgagttcaagcgtcattctTAAAAATGtatagaagtgcatat
-atattgtatggattctgtgcatcctacctcgcatgctcttttccttgcacagtgtgcatt
-ggcgacccatctgcattgaggcaggcagctgccattcgttggcactgctgggcattcttc
-ccttatatgaatatgttaataccacgatatagtatctgaagtccatgttgatgaacattt
-ggatggtttttattttttgctattacaaacaacagcgctggtaacatccACTTGCCCTCT
-TCCCTCTTTCACATGGCACCTTCTTGTTCTTGGAGGTCTCAGCTCTAACAATGTAACCCC
-ACCAACCCCCCGCTCCAGCTAATGGGTTCTCTGTCCCCACATGTGCCTCCCAAGCTGGCT
-TTTGATGGTGctccctctgtttttccttctggcatctactccgtgtggtcaacattcagt
-tatcttttcctgtctggagctagagggtaagccccatgaaggcaggcagagtagtgggtt
-tttttccccagtcccctccatccctgatgctttgcacagggcctggcacacagtaggttc
-gcaagaaaaattgttggatcaggaatgGCTGAGAATTAGcttcctctctttgggcttcag
-ttttcccatctgcacagtgaaaactttagataatttcGGGGTGATTTTAGGTTTAGCCTT
-TGAGAGGTGCCTCAGTGGCCGCCACAAAATATCGGAAGACCCCAACTTTCAGCAGAGCTG
-GCCTTGTTTCCCTTGTGTCTTAGATTGGTCTCTATGGCAGATTATGTTTAAAaagaatag
-ccaccatttattgagcgctcactacgtgataggcatgctgtcagctggcagatgcatttc
-ctcattttggccactcattaaccctcagaagtagcactgttactatgctctttataaaga
-ggggtaaactgaggcaaagagaggtgaagtcacttgtcagaggactagcaaaggagggag
-ctgggatttgtagcacaagagactatcagagcccattcgccaaccctggtgcagccctgc
-cccactgGTACCACAGCTTTAAAGAAGTGGGGTGGGAGGCAGAGGAGGAGGACGGTGAAG
-GACAAGGGTGAAGAGAAATGTTTGGATAAGTTTGACAGCCACTCTTCTGAAGGGCTTTGC
-CAGCCGCAGCATTCGGGTGTCCCTAGTCACGGGGGCTCCGTCACTTCCCTATCCCCCTGT
-TTCCCGGCCCTGATgggtcttgctctgtcacccaggaggctggagtgcagtggcgtgatc
-acagctcactgcagcctggaactcccgggctcaagtgatgttccccatcagccttcctag
-tagctgcgactacaggcgtgcaccaccatgcccagctaagttttaaatgtttatatagac
-acagggtctcactatgttgcccaggctggtctcgaactcctggcctaaagcaatcctcct
-gtcttggcctctcagagcactgggattaaagtgtgagccactgtgcctggctGAGattta
-ttgatcacatagatacctatattattctaagtgtttttcaagtgacaactcatttaatct
-tcataactgtcctgtgacgtagatagtatcagttttatcagtattttatggagattaagt
-aacagaagcacagaaaggtcaagtaacttgcacagagtcacacagctggtaagatgtgga
-cccagctttgaatccaggcagtccagctccagaatccttgtgcttcacATCACCACACGC
-TGCCTTCACCATCACGTGTCAGTTCCACACAAGTGGATGCCCACAATGGTTGGGAGTAAG
-GGGAAAAGGAGTAGGGCTTGAGGAAAAAATAAAAGTGAAGCGTGTGATGATAATGAGCTA
-TGCTTGAGAAATGGGATTAACTCAGCTCTCTGTACTTGATAGAaaaaagaaggagaagga
-ggagaggaaagaagaagaaggaaaTATTTAACTGGACTCTCCGGGGCTTAATTATAACAA
-CTGTCTGGCACCTAAGGTCCTTCCCTAGCTGGGcttgctgcttctctaatctcatttccc
-tacgtttctcacggtgctccagtcactccaggccacacctgatcccagaaacctacttgt
-tcctactttgagcctttgcttgtgctgtttcttccattaagggtgccctttttgccaggt
-gcagtggctcatgcctataatcccagcactttgggaggccgaggtgggacaatcacctga
-ggtcaggagttcgagaccagcctggccaacatggtgaaaccccgtctctactaaaaacac
-aaaagttagccaggcgtggtggcaggtgcttgtaatcccaactacttgggcggctgaggt
-gggaggatcgcttgaacctgggaggcagaggttgcaatgagctgagatcatgtcgctaca
-ctccagcctgggcaacagagctagagactccgtcacaaaaaaaaaaaaaaaaaaaaaaaa
-agagtgctcctttccccattttaggaactcctacacatccatcaaaacctggcctaaagg
-ccctctcctcaatggaaccttttccagcctttcacttcttggggttcccacagcccttta
-catgtctctattctggttggctcacctgctagccagtgagctcctggaggacagggatgg
-gtctggctcatctctttaaccgccatgctgagcccagagcctggtaaatggtgggtgctc
-tataaGCTCGTGCCCAGTCACTCACCTTTACAGCTCcagtgtctggctgacagtgggtgc
-tcagtacatgtggttggacagatcaatGAGTGAATATTTGACGGAAGGGTGAATAATGAC
-ATCAAGGCTGCATTCCAATAACAGCACAATCCCAGTGCTGAGAAAACAATTCACAGCCCT
-GGATTCATATCATGGAATTCTGATTCCTAGGCCCCTTTGTTCCCAGAGCTATCCGATGAT
-GCTGAAGAAGAGTCCCTGGGCATCATCTGTTccagctgtgtgaccttgagcaagttgttt
-aaccaccttgtgccccaagattctcatctgcataaagaagagaaatagctacaccttcct
-catgggctagttacaaggatgaaatttgatcatatgtgccaagcacttaacacaacacat
-gaacatCACGGCATTGGCATGTCAGCTATGCCAATGACTCTATTTATACCTGAAttttta
-tttgaaataatttcagacttacagaaagtttgcaataataatacaaagaattcctacata
-ccatcacccagattccttaaatgttaacattttgcattctttgctttttcattctctctc
-agcatatatttttgtccagtgcctgaattgttggaaataagttgcagacatgttgactct
-ttacctctaagttaattatcccatgtatatttctaaaaacaagaatattctcttacaaaa
-tcgcaggacagatagaaaaatcaggacactgatacaatgctattgtctatcttatagacc
-tattgaaattttttcagttctactaatgtcctttgtagcaaataaacaaaaagatttcta
-cccccccaccccacccactcagtaaccagtccaggacacatgttgtatttaatgtttatg
-tctctttagtcttctttttagtcttatctggagcagtttcttttttttgagacagagtct
-tgctctgttgcccaggctggagtgcagtggtgccacctcggctcactgcaacctctgtct
-cccaggttgaagtgattctcctgcctcagtctcccgagtagcaggaattacaggcgcctg
-ccaccacgttcagctaatttttgtatttttttagttttaccacgttgaccaggttggtct
-cgaattcctggcctcaagtgatccacctgcctcggcctcccgaagtgctgggattacagg
-cgtgagccactgtacccagcgtggaacagtttctttggcttttatggctgacattatttg
-aagagtttaggccagttttttgttttgttttgttttggtttTTGAagatggagtttcact
-cttattgcccaggctggagtgcaatggcaccatcttggctcactgcaacctccgcctctg
-ggttcaagcgattctcctgcctcagcctcctgagtagctaggattacaggcgctcgccac
-tatgcctggctaattttttgtatttttagtagagacagggtttcaccatgttggccaggc
-tggtctcgaactcctgatctcaggtgatccatctgcctcggcctctcaaagtgctgggat
-tacaggtgtaagccactgtgcccagcctggaacagtttctttgacttttatgatcaacat
-tatttgaaaagtttagaccagttgttttgcagattgtccctctgtttggatttttgtgtt
-atttctttatgcttggattcagatcaggcacttgtggcaagaacaccgcatcagtgacgc
-tttgtccttcacagtgcgtcccatcagggggcccatgatgcctgccgacttgccccacta
-ttagcaatgttcactgtgatcatttggtgaaggtggtgtctgccagttttccctactgta
-aagttaccatttttctctttgtaattaacgaataccttataggaagatacactgatacta
-tgtaaatattctgtttctctttatatttcctgcccatatatttcctagcaggatgatcta
-ttttgcaatagatgcaattattatttgatAAAGGAATACATAAACATGGACCAATATTCC
-AACAGTATAAAAGAGTGTAAGGCAAATctcccacccactccgtccccagccaccccgatc
-ctctccccaagccatccctagtctcactgtttcttgtgtccttccagaaatgttctatgc
-atagacaagcgaatccactcatccatcttcttctcgagttatgtgcatgcagaaggtagc
-taaatagacacatgatctgcatcttgttttatttcatttaatattttggagaccatttca
-tatttgaacacaaagaGAGATCTCTTGCTGATTTTAGAAACTTATGTCCATCTGAGGTGC
-AATCCCAGGGtagtcaatctctttcaggttcacaaataaggaagctgagactcagagtgg
-ggaagggacaggtcccaatgtcagaggcaaaacagacTTGGAAACCAGCCTGGAACCCCT
-GAATAAGAGAGTTGACAGGTCTTACTATTGGGGAACCAGTCCTTCCAAGGGCCTTTTCAA
-CAAAATGCCAGACCCAGGCTCATGCCCCCGTTCTCAGCCTGGCTTCTCCCTCCTTCCCCC
-CTCCTCCCCTGGGTCCCTTCTTAACTCTCGTTAGGGACTCCCCTCCAGCTCCCTGCTGGG
-CCAGGCCTTGGGAGCCCCATTGATCCTCTGACAGCCCAAGACAGATTGGTGGGGAGTGTG
-TATTCAGGTGCAGGCGCCAGCACATGGAGGCCAGATGAGAATGGGGTGGAGGGGGTCAGG
-GGCCTGCTGGGGTGGGGGGATTGAGGATTGAGGAAGGCCAGGATAGTGCATCCCACAGAC
-ACCTGCCTCCCCTCTTTCTCCCCCACCAATTCCTGCCCTTCTTGGGGCTTCTGTTCCTCC
-CGCCTCCTCTTGCCAGGCGTGGGCAGGCCAGAGGGGCTGGGGCAGGGCCTGGGAGGCCTG
-GGggtgtagcagagagaagtcgggatggggagtgagccttgcttggtttgatctcagctc
-aggccctcttgtgagactcaggcagatgacatctcttgagcctccgtctcctcggggcaa
-taagaaggaaataaACTTCATACAGCGTCCAGCAGCCAGTGAGGCATGGCCAGTAAAGGT
-CTCCATGTCCTTCATTGGCCTCTTAAGGCTCCCACTGCATTGTTCCTGTCTGATTATGGA
-AGCCCCCAAGCCAAGGCGGCCCCTCGGCTCTGCCTGCGGAAAGTTTTCCCTTCACCTGCG
-CAGACCAGGCCGATGTGGCCTCCAGAATGGAGGGGTCAGCCTAGGTTGCCTGTGACAACT
-CTGAAAGGCCTTAGGAGGCACAGCATCTCAAGTGCACACCCGAGTATGGCGTGATCTGCA
-AGGGGAATAGGGGCTGGGGGGAGACATAGGCTTTGAAGATGAATCAGGCTGGAGCAGGGT
-GGAAGTGGGCTCAGGGAGATGGAGCAGGAGGGGTTGGTCAGGGAAGAGGGAGCTCAAGGG
-AGGAGACATAAGCGCAGAGAGTGAGATAGATAGGGACCCAGCAGCAAGTGGGCTCAGAGA
-GGGGCTGTGGTGCAGAGAGAATGAGACTCAGATGGGGGCTGTAGACTCAGAGAGAGAGAT
-GGGGACAAAAGGGGAGTGGGGGCTCAGGCAAAGGGATGAAGGCAGAGATGGGAAAATTGG
-GAGGGAGGGGAGCATCCGTTTTGGGAGGGAAGTGTCAGTTTTGAGCACACACAGTCCTCT
-GCAGCTTGAGGAGGAGGAAGGCTGGGTCTGTGGAGGGTGGGGAGCGGGTGGCACCAGAAC
-AAAGCCCCGGGGGTAGCAGCCTGGGCCCTGCAGCTCCTTCGCAGCTGACAGTCCCTGAGC
-TAATTACCATTAATGAGCAGCTGGGCCCAGTTTCCCGGGATTTGCATTCACTGTGCTAGT
-CAGCGCCACTGTGGATGGAAGCCAGCGCCAGCCTTCTGGGGTGGGGGTGACTCAGGGAGC
-CGAGGTAAGATCGCTGGCTTCATGTGGGGCTGAAGAAGGTGTGGCTTTGCCTTTCCTGCA
-GGTTAGGAGATGGCCGAGGTACAATCGTGCCTGGAGGCAGGGCACTGGCATCATCCACCT
-GTCCTCAGCCAGGGCCGGGGTAAGGGTCTTGGGGAAGGAACAGGTCTTGTGGCCCTCAGA
-AGCCCTCAGACATTTGGTTGCAGGGGCCCTCAGATTGTGCAGCCAGCTGTCCACTGCGGA
-GTTGAGGGAATAGACCACAGAGGAGCAACGTGCTGCTCAAACTCATACCAAGACAGCATT
-GCTCGTTAAGCGTGCCtgtgtcagacgctgtccaaagcactttactgaatcttcactacc
-aaccccatgtggtggctgttattagcaatcccattttacagatgaggaaactgaggcaca
-gagcggtcacacagccagggaccagcagggctggcatttgagcccagtcctcctgactGA
-TCCCTGCTGGGCAATAGGGCTGAGGAGCTCTCAGACCTGGGTTTTCCCTTGTGATGGGGG
-CTAACAGTGCCTCTCTCCCCCTAATTCCACTCTCTGCAGGGATGCCGGTATGTTTGGTGC
-CCCTGGCAGGGTTGGGAGGTGAGACTTAAGTACAAATAAATAAACAGGGAGCAGATGGTT
-GTGGGGGGAGTGGTGGTGCTGGGAGGGATAGGGCCAGGGCCTCCCACTTCTCCTTGGGAA
-AACATTTCTGGGCTGGAGCAAATGGATTCCAGACTCAGGACCTGGGAGCCCCTTCCCCAG
-GCCTGCCCTCCTGCCTGCTGGCCTCAGACCTGGCCCAGCCCTTGGgagaaatggtgggct
-ggggtcccgagtcttgggttctgcccatccctcatttctctctcttcttcctgtgtggcc
-ttgagcaagtccctttacctttctgtgcctctatttcctcatctgtcaaatgagtggaag
-gagaatgaactttatcaagtttctgttcaagggccacctcccctgggaagcctttcttga
-ttgctccaggcAGCTTCTGTTAGAGCAACAGCCTCGAGTATCAAGGAGAACATAGGTATT
-TGTGTTTTTCATTTCACAACAatccattcaacagatactttctcagggtcacctatgtgc
-ctggcacgatgccaCACTCCAGGCTGACTCGTAGTTTTTCTCTGTAGCTCcagtgctggc
-ccagagtagccactaataaacatgtgtcatgtgcatgaatGATGAGTGGGTGACTGAAAG
-GGAGCATGAGGAGCTGcagtgtttcccaaacgtggtacttgtatcttgggggtgggagtg
-gggagtggataaaagatgatacgggtgaacagcaacaagttattaaataacaataaatca
-acagtgaaaaagttattcctttttcattacctcccagtccttcttacaggccaaggagaa
-ggtctccgatgatgccaggaacgtgtttctagcacctgtggatctctctttctctctctc
-tctcccccaactcccgcaaaacccaccccaagaaggctggtcttgggctcagagcttcta
-cagacaacactatctagaatttgagaatgttgtttggtttccattttattcattttggtc
-agttaccttttatttgtgacaagggattttgatttttcctttgtTTGGACATGGCCAGTG
-GGAGTTGGAAGTGTTTGGCACTTTCTGATGAAGTGATCAGGACCAgggtggggaagaggg
-ctcgactgaaaaggggcacgagagcacttgtggggtgatggaaatgttctgtgttttgct
-tgtggtcgtagttacatggctgtgtacatttttcaaaatgcattgcacgataacacttaa
-aataggtgcattttattgtatgtaaattatacctcaaAGTTGATTTAGAAACACATATTG
-AGggctgggaatggtggcttacgcctgcaatcctagcactttgggaggccaaggtgggtg
-gatcacctgatgtcgggagttcgagaacagcctggccaacttagcaaaaccctatcttta
-ctaaaaatacaaaaaaattagccgggcgtggtggtgcatgcctgtaaccctggctactca
-ggaggccgaggcatgagaattcttgaatctgggagacagaggttgcagtgagctgagatt
-gcactactgcaccccagagcgagactctgtctcaaaaccaccaccaccaccagcaccacc
-accagcaccaccaccaccaccaccaccagcacATGTTGAGGatattaagtagataataat
-acagatggcatgtaggtgtggccaaagtcatgaaggtTGCCCACCACACGGTAAACTTTG
-TAGTCagtgaataaatggatagataggagatagaatggaggaatgcatgaatgggtaaat
-gagcaagcgaatgaatACCTATCTCatccattctacacagccccagcacattgggaggtt
-gtcctatctcaacttgcatagctcctagaatgggggaactcactaccttatgacatagcc
-ctttccacatctgaaccactaggagtgtgtaaaagacattttctcatattaagtttatct
-ttctggagatcctgtgctctctggggccccacagacacatctgcttccctgtctggggac
-agcccaaacacttgCCCTCCCCAGGCTGCCCTTCTCTGGGCCCTTCTGCCCAGATGCTTG
-GCTGCTGTGCCCACCaggtcctgcttgcacagagcttatatcctagtgggcggcaggaca
-aagaacaagcacacaggcacacaaacacaatgattccatgctatgaaggaaatgcagagt
-gagactgttgggaagagcatggcggggtgtggagaggcaaggggagtctctctaggaagg
-taatatttgagctgggacctgaagaatgcaacaaagccagaagaacaagagaaagggcat
-tccagatagaggcaagagcaagtgcaagagccctgagatcacagagcaattggaaactag
-gaagcagccagcctggctggaCATGGACATTTTGGGTATTGATGGTGAAGAGCCTGGAAT
-TGTTTTCTAAATTTGATCTCCAAACACTTTTAAGCAAGAGGTGATATGATATGACATATT
-TTAGCAGACAATGAATATTTCCTGAATTAAAATTGAAGACCCTTCTAGTTCCAATAGTTC
-CATGCTTCCCAAAGTGATACTGAAATGACTTCAGGAGAGAACAggctgggcgtggtagct
-cacatctgtaatcccaacgctttgggagggtaaggcaggaggattgctcgaggccaggag
-ttcaagaccagcattggcaacatagtgagatccccatctctacagaaataaaaataaaaa
-taaaaaaattaaggccgggcacagtggctcaagcctgtaatcccagcactttggaaggcc
-aaggtgggtggatcatgaggtcaggagttcgagaccagtctggccaacatggtgaaaccc
-catctctactaaaaatacaaaaaatttagctgggcatgttggcgtgtgcctgtaatccca
-actacttaggaggctgaggcaggagaatcacttgaacctgaaaggtggaggttgcagtga
-accgagatcacaccactgcactccagcctgggcgacagaatgagactctgttaaaaaaaa
-aaaaaaaaaaaagctggacatgatggaacatacctgtggtcctagctactcagggggctg
-aggcaggaggatcacatgagcccaggaggtcaaggctgcatgagctgtgatcttactact
-ccacctcagcctaggtgacacagccagaccttgcctcaaaaaaaaTTTTTTTTTAAAAGA
-AAAGAGACAATCATGtgatggttgccagaatggcctccagagagggcctccctaggctga
-atcctggctctgcctcatccttgccgtatgactctgggccaaggaccttgcctctttgag
-cctcagtttttacatctgcaaagtgggggtcataattgtccctgtcttattggcttgttg
-tgaggattaaatgactttatattggagaacagggcccagcatgtcaaaagtactTTCTGT
-TTGTTAAATACAATGAAAAAGGGTGAGGACATGCAGAAGCAAGATTAATCCTTTTTCAAT
-CTCTTCCAGTCCTGATTCCTGCAAGGAGAGTCAGGGTTGGTGGGGATGTGTATCTCTAAC
-ACCAGCCCAATCTGGAGGAAGTTAGTAACAAGGTTATATTTATGTTGTTTATATTTACAG
-CTACCTTTATTTGTGCCACATGATACAAtttttttttttttttgagatggagtctcactg
-tctccaggctggagggcaatggcacaatcttggctcactgaaacctccacctcctgggtt
-caagcagttctcctgcctcagccacccgagcagctgggattatgggtgctcatcaccatg
-cccggcttattctgtagttttagaagagacggggtttcaccgtgttggccaggctggtct
-tgaactcctgacctcaggtgatccacccatctcagcctcccaaagtgctgggattacagg
-cgtgagccaccgcgtctggccCAAATTTTCCATCTACCCTGGCTATTTCAAGTTTCCTTA
-TTTTTTTTTTTTAAAGTAAAACAAAAGCAAATAGATTTAGAAATTCAAGGGCCATGGTCC
-CTGAGGTAATGGCAAGCCCTCCTGTCCCAAATGGCCCAAATTGTGCAGGTGGTCATTGAG
-CCATTGATGGGACTTTAGGAAGCATGGttttatttttatttttattttttagatggagtc
-tcgctctgttgcccaagctggagtgcaatggtgcaatcttggctcactgcaaccttcacc
-tcctgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcgccc
-gccaccactcccggctgatttttgtatttttagtagagatgggatttcaccatcttggcc
-aagctggtcttgaactcctgaccttgtgatccacctgtcttggcctcccaaagtggtggg
-attacaggcatgagccaccgcgccccgccCAGAAACCTGTTTCTAAGCTCAGCACAGGGA
-ATAGCTCCTTTTTCAAGTTATGTCCTGATCCGGATCACTTCTTTCTACCCGTGTGCAATC
-CACCAAGCATCACCTGGGGCTCTGGTGACAGCAGCATCCCCTTCACCTTCTTTCTCTTCC
-TGCTCCACTCGGCAGCCAGagccagaccatgtccttcctctgctcaaagcctcacaaggc
-tcccagctcacttggagaaaaagccgaagtcctcacccagctatgaggcccctcccaagc
-tgatgaccctcacccctcctcacccctccagcctcgtcacctgcccagccacagcccttc
-tcccacctccactgaccccaccacactggcctccttgctgcttcttgaacactcactctg
-tgcaggctccagctcaggacttttgcatatgctgttccctctgcctggaacacatccctc
-tgacacccacagggcatttttcctctcattgcccaggtcaatgccccctctcagagaggc
-ccatccaccttacctaaatatttcctagctcattcttcctccctcccctgcttttccctc
-agagcatatatcactaccagacatcacattttacctttgatacatatgttgtgtgtgtca
-tcgcctgtctcccagagtggacttcaagaggacagaagtttgcgtctgttttgtactctg
-atggctccagtgcctggaatggtacTGATTTGCAGAATGAATGTCCAGGGGTGTGTGTGA
-AGGGTGGAGGGCAGTCACTCCCAGCCCTGCCCAGCCTCACTGTGGCCCCTCAGTCCCCTC
-TCCGGATATAGCTTTTCTCTCTGCCTGCCCCACCCTCTGACCCTCAAGGGCAGGCCAGGG
-CAGCAAGCTTGTCCCTTAGGAGGGAGGTTTCCAGCTGCAGGGCAGACCTTCCTCCTATAC
-CTCCATCCCAGGTAAGCCCAACTGGAGCTGCCCTCTCGTGGAGGGTACTCCAAGGATGAA
-GGGCCTTAGGGGAAGAGCCACCCTGAATGTCTCTGGGCAGCCAGGAACCTGCTCACAGCC
-TCCGCGACCTCATCGGGAAAGAGGCAAGACTCATGAGAGTGAATGGcccacggggagtta
-ctatgcttgtccccttttacagatgagaaaactgaggctcagagaggtgaaTCTGTCTCT
-AGGGCAGCTGGAgcctctgtcccctcctctgtaaaatgaggagaataactcctccctcct
-aaggttaccttgaggattaaatgagctaaataaagcctttaaacacagagctgtgtctgg
-cacataggaggtgctcaataaatgttgggtactcttGTTgttctgacaggtgaactaact
-ttccaaggtctcacagttagtaagtaacacaaacaaattcaaacccagatctgtctgaat
-ctaaagTGATTCCCAGAGGgggggcagtggctcacaccagcactttgggaggtcgaggca
-ggaggatcacttgtgcccaggggttcgggactagcctgggcaacgtgacaagacattgtt
-tgtctccgcaaaaaacttacaaaattagccaggcatggtggtacgtgcctgtggtcccag
-ttacttgggaggctgaggctggaggatggtttgagcctgggagttggagactgcaatgag
-ctgtgatcacaccactgcactccatcctgggtcagagagctagacctggtttcgaaaaaa
-agtcaaataaataaagaaaGTGACTCCTGTGCacaaccacaaaataataacaataacagc
-gacgacaacagcaacaacaCCTCCGAGCAGTAACAGCATTTTCCACTGCAGACGGCGGCG
-CTGAGGGTACAGGGATAAGATCATCCGGTGACAGGGATCATCATCCCTGCCTGGCATAGA
-AACCCGGACATCGGACCCTGCCCTCCCGCTGCTTCCGCAGGGACAGGGGGCAGCCAGCAG
-AGCCTCCCTCTGGGGGTGCCCCCCAATCTGGTTGCCTGGGACGGGGGCCCAGCGGGGGTG
-GAGTTGCCTGGGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGAGGCCCAGCGG
-GGGTGGAGTTGCCTGGGGGGGGGAGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGGTGC
-CCAGCGGGGGTGGAGTTGCCTGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGTGGGGGGA
-GGCCCAGCGggggtggagttgcctggggggggcccagcgggggtggggttgcctgggggg
-ggaggcccagcgggggtggagttgcctgggggggggaggcccagcgggggtggagttgcc
-tgggggggggtgcccagcgggggtggagttgcctggggggggcccagcgggggtggagtt
-gcctgtggtggggggccagcgggggtgaagttgcctggggggggccagcgggggtggagt
-tgcctgggggggggccagcgggggtggagttgcctgtgggggggggccagcgggggtgga
-gttgcctggggggggccagcgggggtggagttgcctggggggggCCAGCGGGGGTGGAGC
-ACCCTGGACGGCCCCGCGGAGCCCCCTGCGGGAGGCGAGGGCGGCCCTCGGGCTCTGGAA
-GGGGCCGCGCGGCCTGGAAGACATTACACGGCTGTCGGGCGGGGGGCGGCGCTCGCAGTT
-CCGGAGGGGGGTCCCGGCGGCGGACGCGCGGGGTGAGGGGACCGCCCGGCCACAGAGCGC
-GCTTTGTTCTGCGCCGCCCCCGGGAGCTGGAACCAATGGATTGGCGGCAGCTGAGGTCAT
-CTGTCAGGCGGAGCCGGGGGGTCAGGCCCGGGGAAGGGGCCGCGAGGGAGGGCGGCGCGC
-GTGGGCCGGCGGGGTGCGGGTGGacgagccgggggccctgcggcaggtggctacgctgct
-tcggtcctcagtttacccgtctgtccaacaggaaagatcatttctgccctgtccacctct
-gggggctaatgtgagagttaaaGTAGGGGAGCTACAGTGATGATGATGATGACGACGGAG
-GATGACAGCCTTCCCCTAATCGCAGTCTCTACTTCGGGTACCATAGAAGTGCTAAGTCAG
-GGGCTGGACGCAAATGTGCTTTGTAGCCTATAGTGCGTGCCTGTGTGGGAAGCGGGATGG
-ATGTTTCACCCCACCCTCTTTCAGCCCAGGGAAGTCAGTGGCTCCCCCTGATTGCCTGCC
-TTGACCCTGGGTGCCAGGCTTGGTCTGCCTTCTCCAGGGGTGATAGGTGCAGCTGCCCAA
-GCCTGAGCCCAGGAACCCATTGCAGCCTGTCCTTGGAGCCTTCTGGTCCAGGGTAGGGCG
-GGACTGGAGTGACCCAGATAGGTGGGGTTTTTTTTTCTGACTGGGGGTAGGTCAGGGTCT
-CAAGGCTCTCCTTTGCCTCCTACAAAAGGACAGCCCTttctttcatcaattcactcattc
-attcattcaCACTGCCACCTGCCTGTGCCTCACAGTTCCCATCCATGAGATAATGAGGCT
-TCTAAACATTTGATACAGGGTCCCCCAGGGAAGGAGATCATCAAATACAGGGAGGCCCAG
-AAACGGCCCAAAATGCGTGTGTGTGTATTTTTGGGGAAAGGACTCATGGCTTTCTTGTGT
-TCTCAACCACGTTCATGATCCcaaacaaggctaagaagtactggttggagtgcagggaag
-gcaaataggctcccaaactccaccggagagggtggcacttggaacaaccactttggagag
-caatttgccagggtcttagaagatggaaatgggcgtatgcatcagccaggcagctccact
-cctgggtatacagttgaaagaGCAGGGTGATGGCGGGGGCCGTTCGCAGCCGCAAATAAC
-TGTAAGCCCCCATGCTTCCATGAACATGATCACGACTAACAAACGGCTACATTCACAGCC
-TGGAACACCACGCAGCGGTGAAAAAGAATGAGATAGACTCAGCTGGAatttattcatttg
-acagatattgattaacactactatcttttaggcactgttcttagcactgaacctacagtg
-ataaacaagacagattgagtcctgccttaagaacgtacatttggccaggcacggtggctc
-acacctgtaatcccagcactttgggaggccaatatgggaggactgcttgaggccgggagt
-tgaaaatcagcctgataaacattgtgagacctcatctctacaaaagaaaaataaaaaatt
-agctgggtgtggtgacacacacctgtaatcccagctactcaggaggctaagtgggaggat
-tgcttgaacccagaagttggaggctgcagtgagccacgatggtgccactgcatactccag
-cctgggtggtagagcaagatcctgtcttaaaaaaaaaaacaaaaaaagcagacacagaag
-aaaatttgggagagtgtgacaaatgccatgaagaaaataaaactggataaagggacggaa
-tgatgggggagggggctgttttagacgctatggttgggaaggcccctgaagaagtgacat
-ttgggcacagaccagaatgagggagactgggagacaggcacgCACGAATGGGATGGACGG
-CTGGGGCACAGTGCCAAGGGAGAAAAGCAATCCACAAAACAGCGCAAAAAAAGAAAACAT
-TTTTTACTTAAACGCACATTCATTACTATTAAATTAGATAAGAGTCTGGGAGGCTCTATG
-CCAAATTCATAAAGGTAACTGTCCCAAGAGGGCAAAGGAATAATCAGGACTAGGTTTTGT
-GGTGGGCTTCCGCTTGCCTCTAATACtttaaatttctaatatttaattatttaacatttt
-aatattttaatGTTTAAACGGTAAATATggctgaatgcagtggctcatgcctgtaatatc
-atactttgggaggccaaggcgggaggatcacttgaggccaggagttggagaccaaccacc
-ccaggcaacagagcaagacctggtctctataaaacgttaaaaacaaaattagctgggtgt
-ggtggtgcctgtagtcctagctactcgggaggctgaggcaggaggatggcttgagcccag
-gagtttgaggttgcagtgagctataatcagaacattgcgtgccagctttggtaacagagc
-aaaaccccatcacaaacaaacgaacaaaCACATTTTAAAAAGTAAATATACTTATATAAA
-ACTTGTGAAATggctgggcatggtggctcacacctgtaatcccagtgcctcgggaggccg
-aggcggacagatcacctgaggccaagagttcaaggtcagcctggccaacatggtgaaacc
-ccatttctactaaaacaacaacaaCAAAAAGCCTTGTGAAATGAAAACAAAAAAAAAAAA
-AAAAAGGAAATTTAAATCTACCACGGTCAAGTGGGTGGGTTCCAGGGCGGTGAAGGCACA
-TACTGCCTTTCACTGGAGCCAAGTTCCTGGGGGCAGAGGTTTTTTTGGGGAGGGACACTG
-TAGGTCATGGtagcccagccagtaggagcccagaagcttcttggaggaggtaccaccttt
-gctgagcctgaGATTCTCTGGCCCAGCACCCCCAGTATAGACAGGAATGGGTAGACATGT
-GCGCAAGGTTACAGAACAAGAGCTGATAAATAGAACCTGAACTCCAGACTCATCCCGGCT
-GAACCCGGGTTAACTATCCCGCCTCTTTCAGCCCTGCGCGTGCATCCAGCCCCTTCCCAC
-AGCTGTAGCTCTTGCAGGCCAGAGGGACGGCCCTGCCGCGGGGGCCGGAGAGCAGCGCCA
-CCTGCTGCTGTAAGAGGGAAACGCAACTTCCGGCTACCAGCAGGTTACACCCTTTAAAAC
-CCAGCTCCTCTTCCTTAAATGATCAAGCAGTACCCCTCTACTCCGAATCTGTTCTGCACC
-TCCTTCGCAGTGCCTGGCAGGGCCCTTAGCGCTGTCTGGTTGGGTCTTCTCTGCAAGAAG
-GAAAAGTTGTTTCAGGAGGGGGCGACCATCTTCACTCTCATTCCAGCCCAGCGGGCACAG
-GAGGAGTTTACTCACAGAAGACAGGGGcacctcaccttcgctacaaaccttaggggtaca
-caatccatttgacagcctggaagaagtccccagggaagggacagaaccgcccaaggtcac
-acagttaatgagtagacaagctgggGGGAATGAGTAGACTCATTCCACTGGGGATGGAAG
-TGGGGAAGTCACCGTATTTGAAAATAACTGACGCAGTTATTagcagctcttagcatgtgg
-tccctgaacagcagcatcagcaacatctgggaacttgttagaaaagcaaattatcaggcc
-ctgccccaactcgcctcaatcagaaactctggggggccgggggcagtggccatgtctgta
-atcccagcactttgggaagctgaggcgggagaatcgcttgtgcccaggagtttaggacca
-gcccagagaacacagcaaaaccctgtctctacaaaaaaatgagaagggcgcacctgtagt
-cccagctactcaggaggttgacgtgggaggatcacttaagccccgggaggtcaaggctgc
-agtgagtcatgatcgtgccactgcactccagcctgggtgacagggcatgaccctgtctca
-aaaaaaaaagaaagtgggggtggggcccagcaatctggtatttagcaaacAAGCTTGAGA
-CCCTGAACCATTGGTCTAAAGGAATTGCACACCCCCCCTTTTTTTTTTTAAAttaaataa
-acttttattttggaatgatactagatttacagagaagttgcagagatagtacaaagagtt
-cctgtatacccttcacccagcctaccccaaggtcaacatcttacatcaccatggtacatc
-tgtcaaaaccaagagactgaaattggtatattaactaaaattcagacttttttcagattt
-ccaattttcccactaatgtcctgtttttgttccaagacccaatccaggatgccacattgc
-actGAAGACACTCTCCCTTTTCAATTCTATTACTGGTCACCTCAGTCAACTTTCCCGGGG
-AAAGAGAATGCATGGGAAAAGCTCTTGTCCTTATTATTGAACTGGAGAAACTGAGGCTTA
-AAAGTGCCGAGTGACCAAGTTCCCTTAGAGGGCAGTGAGAACAAGGCCTGCCTTACTCTG
-TTCCCTTTCCCCAGGGACTCTTGGTTTTCAGAAGCCCCTCTGGAATGTCCTACCTGGCCT
-AACCCCATACCAGCAGTGCAGACAAGGAGGCACTCCTACTACAGTGGGTCCAGCCCATGG
-AGAGACTCACTTCCTGCCCCAACACCTCTTCCCCTAGACCCTGAGGGCCAGGACAATGTC
-TTAGTGCCTTCCAACTTGGCAGAGTGAGGCCCCATGAGACAGAGAGAAAGGGGGAAGAGG
-GAAATACCTTTATCCAAATAAATACCCATCCAAAATTATTTGTGATAGGTGAAAAATGGC
-CACAAGCTctttgtggttcccctcatcaagacatgtagtctgtttctcatcccttgaatc
-tgggtaaagccttgtgatttgctctgaccaaaagaacttagcagaagtgacactgtccta
-gtcccagttccaggccaagaactcaagaagtctttcagcttctactctcactctctttgg
-aatcctgaagccatcatgtgaataagcctgagctagcctgctggagaggccacatggagg
-agaaccaagcaattccagccaacagcctgtcacctgccaggcaagtgagtaaggctatcc
-tagaccatccaggcccagctgaggtaacagctgaccttagctccatgagggatcccaggt
-gtgagcagcagaactgccctgttgagcccagcccaaattgccaacccataggattgtggg
-aaaatacagggtttgtttctagctgccaagtttggggatggtttgttacacagcaaaagc
-taactggtacaCAattctgcatttctctcttggtaatgggatcccagttttattgcagga
-ggcagtgtgccagtctcagtagatggaacacgattggtctattcagccatgacaattctg
-ttccctgctgtcttagctttgtttgcagctagaggtgcaatggtagctggctcgggccaa
-gggcatctaagtgaagatatgcagagggagagagcaggaaacagacttctgacgaggttt
-tactttctgatagaaggtgacgggtccagctagtttggcccttcctcttcctccacccct
-ccttccttgaacgcagacatgattcttggggatacagcagccatcttgggaccatgaagt
-aacgagcactgagattaaggcaaaaggatccaagacgtgacccctaccttcgtggagttg
-ttgaaccaataccattagccacccatctccagaatccatgctatgtggaaaaacaatctt
-ctgtttgtttaaaccactgcaatcaaggttttcctttccttgcagctgaatgtagtccAT
-ATAAGAGGTTACATAGACAAAAATGCAGAGGGATCCTTGTCCTTGGGAATTTGGAGCCGG
-CAGCACGTGgctcttcaagcccatctctgttctccttctcggtaatgcttcaagggtaag
-gccatgatcctattgtcacagaggtgggaactggggctcccacactgtacagtgagtcca
-aggccttgtagctggtgagaggggtgcccagagtcagacccTCTCGCCAGGTGCAAAGAG
-AATGCACCCCTGCTATCCCTTCTGCATGGCCCAGCCTGCTGGAGGCCAGGTGTGTCTTCT
-GGGCTCTTGAAGGTGGCAGCAGGTGCCAAGGAGGCTGCTACTGCAAGTCTGGTGTGGATG
-CTCCCAGGTACACCCTTAGGTCTGAGAGAGTGGACTGGACAAGCTTGGCGGGGATGGTCT
-CTCGCTGCAGTTGCTGGTAGGCCGCGTAGCGGTGGCAGCCCCCAAAGGAGTAGAAGTAGT
-CACCTCCCTGGGCCCCTTTGATCCAGAGGACATCGATGGGGGGCACGCTGTCTGGGTCCT
-CCTGGGGAGAAGAGGCACAGAGTCAATGGACATGGTACAAGGCTTGAGAGTTTGTAAAGC
-AGACTTTGTCCACTTGTGCTGAGCTCCTTATAAGGTGATCACACTGGACTACTGTGAGAG
-ACAACTGTTAATTATCAGGAATTTTGTGAGCTGTTCgacatcaccttgtagcttgaaaat
-cagccatgggagagtatttacaccagagaaatggacagatgctacaaatcagggatttct
-cccacacatgtatcagcacaccacATGCACactatccagctggccctgttgtagaccctg
-ggaatacggtacagctggaatgtgactgaatcaggccctggcttcaaggggctccagtct
-agtggggcagatggaacaagaagtaaatattagagtgacaaatgctataatgacaataac
-acaggtgacaggacagagatgggGTCCACGAGGCCTCTCTGAGGTAAGAATGAAGCAGAG
-TACTTGGAAAGATAGAGAAGTGGggccgggcacggtggctcatgcctgtaatcccagaac
-tttgggaggccgaggcgggtggatcacctgaggtcaggagtttgagaccagcctggccaa
-aatggcacaaccctgtctctactaaaaatacaaaaattagctgggcatggtggtgtatgc
-ctgtaatcacagttactcaggaggctgaggcaggagaatcacttgaacccaggaggcgga
-ggttgcagtgagctgagatcgcaccattgcactccagcctcggcgatggaacgagaatcc
-atctcaaaaaaaaaaaaaaaagagagaaGTGGAATAGTTTCGATTAAgagctcaactgcc
-tgggttcaaatctagctctgctgcttaacagctatgtgatcttgggcaattcatcttttt
-gtgcctcagttgccccatctatcaaattggatggagataacagatccatctcatagaatt
-tttgggttaaatgggttaatatatataaagcacttcaaaccatgcttggcacacggaaag
-tgctcagtaatgtatgctgtgtatGACCTgagggaagaacgttccatgcaaagggaacag
-caaacgcaaaggacttgaaaccagagcacgttcactgtgtaggaggcacagcaaggagtt
-cactagagtggactccagggctccaggaatggtcagaaaggccagcaggagccagatggt
-gcaggtctgcttctgagagcagtgggtgggccctggagtgttggcaacaggggagggtga
-catgatctgatgcatgttctagaaagttgtcacaggagaacagacttggcagggtggaca
-gggcacagggctggaaggcagaggggaggcctctgcaggtattcagcagaagatgctggt
-ctggatgatggtgtggtggggacagggagaggtagacaggtttgggacacatttacgggg
-caggcccaaggggtctggcagaaggggtgaatccaagggcaagagaaaagggagaatcta
-agttgacttcctgttaggggcccacacagccaggtggagagtaggtcatcctctaaacag
-ggaaagtctggggcaggacgggtgcagggtagagCACTCTGGGGAGACCCCATTAAGTGT
-GAGCGGCGTGGAAGGCCTCCTGCTGCTGGTCCACGGGTTCTCTCTCATGATTCCACAAAT
-GATTATTCAgcagtaaggtgcagcagtcacaagcctgagctctggaacctggcacacctg
-actttggatctcagctcctctccacagcagctggggcacacagccctctgaacaccattc
-ctcacctgtaaactgggaataaaacatcctagagggctgctgatgaagagtcagtgagct
-gatgcCTACCGGGCATTAGTGGAGCACTAAGGAGGGCAGCCGTGCCAGGCAGGCCTTGTG
-CCGGGTACTGGAGGCACGATGGTGgatggccagaatgatggctcccaaagatgtccacgc
-ccgaatgcttctgaatgtgttaccttacatgggagaagggacttggcagacagaattaag
-gtaaggatcctgagatgcggaaattatccaaggttatctagatgggtcgaatgccattat
-cagggtccttaaaactggaagaggaagtagaggaagaggtcagagtgatgcgatgtgaga
-aggccttggcctgatgttgctggctttgaagacagaggaagaggccataagccaagcagt
-gtgggtggcgtctggaagctgggaaaggcgaggaaatggattctcccctagagcctacag
-aaagtagtgcagccctgcttggtgttagcccagtaagacccattttggacttctgaccat
-aaataaacctgtgttgttttaagccatcaactttgtggtaacttacagtggccccagaaa
-actaatacaGGTGTATGTAAGCAAAGGCAGAGCTGGTTCTGGCCCTCAGAGCCTACGGTT
-CTAGCACGGAAGGCAGGTGTCTAGACAGGACGTTAAAAGCCAGTGGGctgtaatcccagc
-actttgggaggccgaggtgggcagatcgcttgaggtctggagtttcagaccagcctggcc
-aacagggtgaaaccccatctctactaaaaatacaaaaattagccaggcgtggtggtgggc
-gcctgtaatcccagctacttgggaggctgaggcaggagaatggcttgaacccgggaggcg
-gaggttgcagtgagccaagatcgtgccactgcactccagccagggtgacagacccagaca
-acgtcttaaaaaaaaaaaaaaaaaGCCAGTGAGATCAGAGCTATGCAGGTGGGCACACAG
-GTGGCTGCAGGCCCACAGAAGCTCCTAACCCGGTAGGGATGGTCAGGGAAGATCCTGACA
-CTGAGACAGGAAGACCGAGAAAGAGTGAGAAACGACAAGGCAGAGATAGAAGAGGTTCTC
-AACGGGAGAAAAAGCCCAGTGGTGGGACAGGGCATGCATGGCAGATCCCTTCCCATCTCA
-gccaggcgccgtgctactattgtggcaacagataagatgggacgaggtcctcgcccttgt
-ggagtgcacgtgaggtcaggaagacagaaaataaaatgcaacacaaatagatgtataata
-taatttctggtggacataagtggtatcctgaaaaacatctcgggctaaggggagagctag
-agaggccagtgactctgaccaagggtgatcaaggaggcagagagctgaaccaggcagggg
-agcaggccctgtggttgtctggggaagtggctccaggcagtgaggacactagtgtaaaTA
-CTAGGACTGAAAGTTATCGGGGGTGGCTGTAGAGGTGCTGGGTGGGGCTTAGGGATCTCA
-TGTGCTCACCTTCCAAGGGTCGGGGGAAGGGGACACAACGTTATGTAGGCCTAACCTGAC
-ACCTGTTCTTGCGGGGCCCCCAAGTTCCTGCCAGAATCACTCCGGTATTCTTAACACCCT
-TCCTCAGTGGTGGAGCTGACCCTTGACCTCTCCCACTTCCCATTCAGACAAGGGCCTCCC
-AGCAGATATGACACACCTAGTCCCACTGTCACTGACTGTCACAGCCATGAGAGCCCACGG
-CTTATCTCCGGgtagtgcggtggccatgtgctgggcagtggggcccaggctgcctgggtg
-tgaattccagccgtgtcactttttaagcgcctgatcttagtcaagccgctgaaatcttcc
-ctgcctcagttctcgtctgcaaaagagccactatctacctcctagggttggcataggaaa
-ctgagggacttcctgcagttcctggaccactgcaagcactAGCGTTATAAGCGTTATCAT
-CACTactttaattatctcgcccaattccctccttgctcaagtgaggaaacagaggcccag
-agaggcccagctacttgctcaaggtcacacagcagaggctgagctccggctgggcccgga
-accagtccgtctcgcgtccaTCGCAGCGACCTCCCTCCTCCGGCAACCTCCCTCCTCCGA
-AGCCCTCCCTCCGGTTGGCTGGACTCCCCGAGGCCTCACCCGGATCGTGTCCACGAGGCT
-CTGCACCTTGGCGGGGTCCAACACGGACGGCAGCGGCCGGATGAGCACGCTCAGCGGCAC
-GTTGTGCACCGCGGCGATGCGGCCCGAGTGGATGCTgccgccctgcgcgccgccgctcgg
-cccgggcccctcgggcgccccccgacccgcgccggcccTGCCCAGCGTTCCTCCTGCACG
-CAGCCCCATCGTCGCCGCCGCCGCGGGACTCGCCGCCTCCCCCCGGCCTTAACTCCGGCC
-GGGCCATACCATTccgcgcggccgggggggggggcccgTGCCAGGGCAGCGCGCGTTTCT
-CCCCCGACCCCGCCGCGGTCCGGCCTCGACCCCGCGGTCCCCAGCCCGACTCCGGCTCCG
-CTCGCCAGGTGCCGCCAGACTCGCGCGGGGCTCAGGCTCTCCACCGGGGGGCGCCTCTCG
-CCTCCCCTGCGCCGCGCGGCGTCCGGGGAGTGGAAACGCCCGGGCGGGCTGACTCAGGGT
-GAGTTTGCAGGTCGCGGGGCGGGAGGGGCGCGGGTGACGCACCGGCCGGGCCGACTTAgg
-ccgcgggggcgggggcgggggAGAGCGCGGCGGACCTGCCCAGCCAGGGTGAGTCGGCAA
-AGCCCGCGGTGCGCTGCTGCCCCGCTGCTGGGGTTCCTAGCCAGCGAGGTTATGATCCCC
-ACCAGCGGTTCCACTTCCAGTCTGGCGCCGGCtgtgtctggagtcgttccgaacattttg
-cacgtgtattaacgtatctgaacctcaaaacaaccctgcaaggaaggtatgactgttatt
-cccattttacagaagaggagactgagacacaggtttaagtgatgtacccaagatcacgga
-actagtaagtggccgaatccgcgttcaaatccagacggtctggctccagagtccgccttc
-tACCCCACCGTTGGCTGCCTTGGTTCAGCAACAGTGACTGTCACACGGAGCCCTCAGGAG
-TCGCGCTGACAATGGGTGGGCCCTGCCTTCAAGTTCCACACTGTCTGTTTGTGTCATTAC
-AACACTACTGGAAGTAGGTGCAGTTATAGACCCGCTGTTCAAGGTCAGCTGAAATGAAAG
-TCAGGTCACACGAGTCCAAACTGTGGGGCCACTTAACCACCAACTCCAAGCAGGAAGGTG
-GACGATCCCAGACTCGGTCGAAGACAAGCATGTCTGGTTTGCTTGTCTTCCTTCTCAACC
-TGAATGGCACGAACATGGAGAAATGCATACTTACCCTGCCAGCTGGAGAAAACTGGAGAC
-GAAGGAGGGAGCCAGGAGTTTCTACTTTGccttccaccagttgctgacactttctgaacc
-ccgtctgtaaaatgaagtcatgctgcccatcactcaaagttgtgtgaattgagagagtgc
-tcatagtgctctgtgaattgcataacaTCCATTTTGCTGTTGAAGATCATTTATTTTGGG
-TTCTTAGTCTCTCACAAAACCTTAGAACACTGACACCAAGACTCCAGCCTTTCCCTTTCG
-AAACATAATTCCCGTGCGCACCTAAATGATACTTTATTTCAAGAAGTAGAACTGACACCC
-ACACCTCAGCCCCAGAATTATTCAGAATTAGAGAATTTCATCAAGAGGGAAGTTATCCCT
-TCTAAAACATCTTCCTCATTACAGGAAGTAAGAATGGCAGGATAACAGTTTCTAGAGTGG
-AAAAGTGGAGCTCTGGCCTGATTCTATCATCATGGTGTACCCAGGGAGGCCTCATTTCCT
-GGTATCAAATTCTCTGTGTTAAGATATCTATGGcccaattcaaaatggcttaagcaataa
-gaaggtttgttttctcacataataaaatgtttggaggtaggtatgtccaaggttggtaaa
-gaggcagttgaacaatgtgaccaaagactccagttctggctgggcccggtggctcacacc
-tgtaatcccagcactttggaaggctgaggcaggcgaatcacttgaggccaggagttcgag
-accagcctagccaacatagtgaaaccctgtctctaccaaaagtacaaaaattaggcaggc
-atggtggcgcgcgcctgtagtcccagttactccagaggctgagacaggagaattgcttga
-aaccgagaggcagaggttgcagtgagctgagatcatgccgttgcactacagcctgggtga
-gagagtgagactctctcagaaaaaaaagaccctggttctgtctatccttttgtgccatca
-tccttggtgttctgttatcctgcggtgtgcccctcatggtcccaagatggctactgtagc
-tcaaaacatcacatcattacatgcgaatgtccacaagtggaagttaggacatcccttcga
-gcctctttttaagagtgaagaaaccttcccTGGCTGGATGCAGTGGctcacaccttctga
-ccttccactcctcaagccccggagtcaactctagtcacactggcctccttgctgtgcctc
-ttccacagcgaatgtgtcctggcctcagaccctttacatttgctgttccctgtgcatgga
-acgctcttccctcaggtCATACatagcatacattactgagtgctctccatgtgcccagca
-tggtttgatgcgctttacatatattaactcatggaacctaacagctttatgagacgagtc
-tgttatctccatccccatttgatagatggggCATCCCTGTGGGAGCTCTGCCCATTCCAG
-AGGTGCCAGGCCATTCACTAATGGGGGCAGGAGCCGGTGAGTAAATGCCAGTCTTGTGCT
-GTCACAGGTGGACGATTCAGAGAGGTGTTCTAGACCATTCAGATCTTTCTGGAACCTTCT
-CAGAGACCAGAAGTACTCAGCCCTATTGCTACAACTGACTTCACTAACACACCctctgtc
-ccattcctcccaccccttacttctgcttccagggatcacctcccacataaacgacttaca
-ctcaagtctcagacttgctatcagggaaccaaaactaaaacaAAAGGGAAACTTGATACT
-GGGTCATCCCCTATAGTTCTGTACCTtgcctgggttaaaattgcactattttattagatg
-tgtgaccttgggccagtcacctgtctgtgcctgtttcctaatctgtaaaacggacataat
-gtcacctaattcacaggggtgttggaagagtgaagagagatggtgttaggtgaggtcctt
-aaaacagtgcacaacgcattataagtgctcaataaatgtttgctgttTGATTGCATTTTA
-AATTGTAACAGAGCTTGAACGTCTCTCCGTGTCTTCACTTTCAGACTAGGCTTGAtgtat
-tagtcaagacttttgtttgcaagtgacagaaagccaaagtgaattagcttaatgaaaatg
-gggatgcttggctattcccgtgactgaGGTGAAGCGGAGCCTCAGGGGAAAGTAAGTTGA
-GAGATTTCTTTTCTCTGCCCTCACTCAGCAGAGGGATTATCTCTACATGTCAGGAACATG
-ACTGTCAACAGCgatgatatttggctttaaataagggaaacctgacaacagagacttcat
-acaacttaaagtgtttcctctttaaaaaaaaaaacagtcgaggtaggaagtccatggctg
-ggatggctgctccatggtcactagtggcataggccctttctatcttgccgctccatcatt
-ttccagcagagttttcattctcagggtcacctcctattcaggattgctgctgaagtgcca
-gccgtctcatccaaattccaccctggaaagaggtggagaaatggaaaggcaaaggatatg
-acccctccccttttgaggatgctatctcagaagttttgtataacacttccccttgcatgt
-cattgactagaaattggtcacacggccacccctggctgcaagggcagctggatatgttgt
-cttcatccgtagcggtaatgtgctgagctaaaactggagttctcttactaaggaagaata
-gagattgataagtagctagcaatcggggccacaGCTCTCAAGTTACAGGCCTTATGGCAC
-AGAGACAGGGAGAGAGAGAAAATTTCCAAGTTCTAGTCAGATGCCTACATATGGACAAGC
-CAGCTATGGCATTGGGGGACACAGACTTTCTTAAAAGCATAAGCCACCATTATTTATTAT
-AATGACTTAAAGGTAAGGAGttcatttaaagataattactggtcacctgctattggctag
-gctagacccaggggatttagtgatcagcaaaaagacactaccaatctctgcattatgagg
-cttacagtgtagtggaggattcagataatgaccaaataatcacactggttaatggaaagt
-atacattggtagtgggtgctgcaaaagaaTGGCATGTGGTTCTGAGGAAGtgttttagtc
-ctttttggctgccatagcaataccatagactgggtggtttataaacaacagaactttgtc
-tcttacagttttaggggctgagaaatccaagatcaaggtgACtttgtatctccccaacat
-tcatatgttgaaatcccaacctccaggtgatggtgttgggaggtgggcctttgggaagtg
-attatgtcacggggttcatgggggtagagccctcatgaatgagattagtgtcctttttct
-ttcttttgagacagggtctcactttgtcacccaggctggagtgcagtagaactgtaaaga
-aaacttctaatttttaaaatcaggaacctgataataactaaggaatcctgaacagagtgt
-tggtagaaatacagatgaaaaaggccatttggatgaggaaatgaggaagatattattgga
-caatggaaaaaaggccatgttgttataaaatggcaaagaacttggctgaattatgtccac
-gttctagtgttttataggaggtagaacttgtgagcaatgaaacggaatatttagctaaag
-ctatttctaagcaaagtgttgaagctgtggcttggctcctcctgactgcttatagtaaaa
-tagaagcagaaagaaatgagttaaagatgtgacttttaagcgaataggaagcaaaacgta
-aagatttgaaaaattttcagcctatccatattgcaaagaatgagaaagaatgtttgggag
-aaaacaccaTAGTCTCCATAAGGAGACTGTAATGGTGATGAACGTAATCAGCCatcccag
-caggaaaactgccgtcttgaattgaaggggaaggagatgggaagggatgaggaaggaAAG
-CTGTCTGACTTCTTGGATTTTTCAGGACAAGACCAGAGTGCAAactcttcaagacaaggg
-aagaatgaccctgaaggcaattcagagatcatcaaggctatctcCTTGCTTTCAAAAGTC
-GGGAGCATTGCCTTGCATTCAGCAGGTTAGAGGGCCTCTGTCCAAAGCCATGGAGGAAGA
-GCTGCCCAGAGCTGTTGGTGTGGGGCTACCCAGAGCCCTGGGAACATGACTTCTGCGGGA
-TAGAGCTGGAGGGACAGGACCACCACCCCAGAGGGTACAGAGGGTGGGACCACCACCATT
-GTGGATCTGGAAGGCTGcctcagtgggcctggaagcagagcatttaatgaactaaaaatg
-atttttcttgagccttaagatctcatggagtttgccttgtagtttggatgtaatttggat
-ctgctattcctttcttctttcctatttctcccttttggaatggtctatcctatgcctgtc
-tcaccattgtattttggaagcagataacttgcttgatttcacaggctcaccgctggagaa
-caatttgccccaggatgcatcacaccttgagtctcagccatatctgacttagatgacact
-tagataataaaactttggattttagacttcagagttaatgctggaatgagttaaggcttt
-tggggctgttggaatgtaaggaatgaatgtattttgcatgtgagaaggatgtgaatttgg
-cggggGATGGGGACGGAGGCAGAAtgctatagactgaatgtttgtgttcctccaaaattc
-atgttaaaatcctaacccccagtatgatggtattaggaggtgggcttttgggaggCACGT
-TAAGGCCAGTTCATTTCATGGTCACAAGATGACATGCTTTTCTGTTCACACTGGAGGGGA
-AGAGGAACTGGACTTCCTTTCCTCTTAAGAAAAAGGAagcagcaaagttttccataccct
-tccagcaaccctctccttaagtctcattggccagaattgggtcatgtgcccatttctgaa
-cGATGGGAGATGTTAGTATTAGACCAGTAAAGACTACCTCTTAAGCTGATGTTCAGTCCC
-CAGATTGCGTGGTTGCTAATCCAGGAGAGAGGGGTGGGGTGGAATGGTTATTGGACCCAC
-ATAACTGGGCTGGATATGGCTGATGGAGACCCAGCATTCTTTCCCACCTCCCTCTAGGGT
-GCCTTCTAGATTGCCTAGTTGGAGAGTTAAAAACTCTATTTCTCAGATCTCTTTGCAGCA
-AAGATACTAACAGGGAATTAAGTTCTACCAGTTAGATGTACTTTCATGAGACATGGATGG
-CAGAGGTGGGCCGGGGCCATCTTCCATCTTTTGACTCTTGCTACTGTCAAGATTGTCTTG
-GAGGTGTTAAGATTTTCTGTAGCAGTGTTCCAGCATTGTGCCACCAGCACAGTGGGAGAC
-AGGAGATAGTTATAGAGGCAGTGGCAAGGGCCTGCTGATCCCTGGCTTGCACCTATGATG
-CGGTGTTCTGTATCTCAATAGTTCCAGGGCACCTTATTGACCACCACCAACCCCCACTCC
-GCACCCTCTCCCACCACTGACTGTGGAAGAGGCAGGTGCTGTCTCAGTGGCAGCAGTTCT
-GCAGTGGGGTTCTGGGGTCCAGCAGATGGCTCACTTCAGCCCTTACACAAATTTTGTCAG
-CAGCCAATTATTGAAGTATTAAATCCTTTCTCCTTCAAAGGAATTTAATACTTGTTTATA
-AAATCCTGTCTAGAGTGGTTTCTGTTCCTGGCACCTAAAACAAACATAATGGATCCAACA
-GCCAGTCACGGGCAGTGTATGTGGGTGGTTAAGGGATGCAGCAGATGCCTGGGTTTCTCA
-AAACCCCACTGGcgaggcgggcagatcacttgaggcaaggagttcgagaccagcctggcc
-aacatggcaaaaacctgtctctactaaaaatacaaaaattggctggacgcgggggctcac
-gcctgtaatcccagaacttggagaggccgaggcgcgcggatcacaaggtcaagagatcga
-gacaatcctggccaacatggtgaaaccctgtctctaccaaaaatagaaaaattagctggg
-catggtggcacatgcctgtagtcccagctacttgggaggctgaggcaggagaattgcctg
-aacccaggaggcggaggttgcagtgagccaagctcacaccactgcagcctggcaaggcag
-cgagactccatctcaaaaaaaaaaaaaaaaaaccaaaaacaaattagccgggcgtggtgg
-cacatgcctgtaattccagctacttgggaggctgaggcaggagaactgcttgaacccaga
-aggcagaagttgcagtgagctgagattgcgtcactgcactccagcctgggtgacacagca
-agactctgtctcaaaaaaaaaaacaacaagaaaCCACTGGAGATTTTGCAGAGTTGTGGG
-GAGGTTCCCACAACTGCTGCTGTCAAAAACAGCTAGCACATTGCTCAGGATGCAGCTGCT
-TGTCCAGAGGGGTGTGAAGGGAAGGCGGACAGGCACCAGGGAGGCAGTCTACAAACTGAG
-TGCACTGCTTACACAGGAGGAAACTGACAAAGAGGCCCCAGAGGAGGCAGATTCTAGCCT
-GCAGCTTCCCCATCCCTCAAAGCATGCAGGTTATGCTTCTTGGTAAGTCTGAGTTGAGGG
-TAGGTGGCAGGGGTTGGTGGTCCCCAGTGAAGTTTTTAGTAAGGTGAGACAGATTTGTAT
-CTTGAAGGATCACTAAGGCAGCTATCGAGGATGATGGATTGGTTGCcttgaacacttttg
-gtgacaggcagctcagaagctctaggggcaagtcactgtttttggacaactttccagctg
-agccaaagtcaacctttttgcctgcttccactcactgaATATGTGACCATATATGACTAG
-GCAGAGCAGTAGGGGGTGAACTGGGGAAGATTATAGGGGTTGTAAACTGGCTGTCAACAG
-ACACATGTGGACCACAGTTTTAACTGTTTGGTGGGTGTAGTTAATTTGAATCCTATTTCT
-CTAAGGTGAGACACTCTTTCCAATTAGTCACAGGCTTCACCTTCCCTAATGTCTTAAGGC
-AACTGGCTTCACTCACATGTTATTAATCTGGTTTTTAAACCCTTATTTGAGGAGTATTAA
-GGATTGAGGATGCCTGAGAACTTGTAAATGCCAAGGGACCCTTGGGGCTGTGTGACCCTT
-GGTGGCAGCTACAGGCTGGTCAGGCTACAGAGAGGAAAATGGAGTGGAAAAGTAGTATCT
-CTCAGATGCCCTCCCCTTCGTCTCATTCCCCCCCTTCATCCCCACCCCTTGCTCCAATCA
-GAAGGTCTAGAGGCGATGGTGAGTGGCCAAAGTCCCTTTAATATCCCTGAATTGCGTTAC
-AAGTAATACTGCTGGAGGTGGGGAAGGGATGGGGGTTTGGGGGTGAGTTGGGATAGGACG
-GAGGAGGAGCGCCAAGCGCTCATACAAAATATGGCCAAAAGGCTTAGCATGCATGGAAAA
-TTATTGCTGTCAGAAGTTGCTATTTACAGGGTCAACGCCTCCATAATTGCTTCTGCTACC
-CCTCTCCCTCCCACCATCCCTGCAGCCTCCCTTCCCGCTGGGCCTGGAGCTGAGCAAAGG
-CCCATTCACCCCTCTGGAGCCCTAGGGAAGTGCCCCTGCTGCAGGGGTGCCTCCAGTCTC
-CCCCCTCTTTTGTGGCTAAGAGGAGGGGAGAGGAGGATCTGAGAGTCCAGGACTCCTGCC
-CCCAAGCTGGCTGCAGAGCAATGGGGCAGAGGCGTGTGCTTAAAGCGGAGGGGGCCAGGG
-CCCGTGCGCGTGGAGGTGTGTGCTTCGGTCCTCGCCCGGGCATGCAAAAGCGCAGCGGAG
-GAGGTAGTGGCGGCCAACGGGCGGGTGGCTGGCAGCCCGGCCCCTCTGTCCGGGAGAGTT
-GCATAGACATGGCCGGGAGAGAGCGCCCCTCCCGGGGAGCAGGCCAGAGGCCCCAGCGGG
-TCCGGGGCTCAGTCGGTCCCTGGAACCTGGGGTCCCTCGGGAAGAAGAATAAACAGGAAA
-CAAATCGAAGAGGCTCCTCTCTCCGGGCCGCCTGGAGTGGCAGGGGAAGGTTCAGGAAGG
-TGGGGACCTGCCCCACGCCTGGACCTCCTGATGCTCCCTCACCCCCCCAGTTGAGGGTCA
-GCAAGCTGCCCCCCCATTCTCGAGTCCCCTTCCTTAGCGAGTGCAGGCTCTGAAGAGGGT
-GGGTTTCTCCCGAGACGCGGGGGTGTGTGTGGTGGGGGCAGCCCTCTGTGGCCTGTGCTG
-TCCCTCTCCTTGCCTGGCTTCCTGACCTCCCAGTCCAGCTGGGGAAGCCAGACGGTCCCT
-GGGTGAGGCCAAGAGATtaaatagaataataaatagataaataaataaatacacaaataa
-ataaCTGGAAGGACCCAGCCGGATGGGGGAAGGGCATTGGCGAGGTGCTCCAGACCTCCC
-CCCAACAAGTAAGGAAGGGGATCTGTGGCCCTGGGGATGGGGGAAAGTGCTCAGAGAATC
-TGGGGGTAGGGCAGCTCCAGACTGTGGAAGCCCAGGTTGTGCCGGGGTGAGAGAGGGGTT
-ACATTAGGGGGCAGGGCCCTGAAGTGCCCCTCAAGCCCCCTCCAGGTTAGGTAGACTCAG
-AGGGGTGAGAGCTGCTAGAGAGGTGAGGGCAGCTGGAGCTGGGGCTGGGAGTGGGTGATG
-AGATCCCCATGGACTGAAGACAGTAGGAACTGTGTGTGGGAGTGGGGTGTGGGGGTGTGT
-GTGTGTGTGAATGGCCAGACCTAAGGCCTGAGCATGGATGGGATCAGGGACAGATCGGAG
-ACTTCAAGAAGGGTGAAGATTAGATCCCCAGATGGACACACTCTGGGAGATTCAGCAGAG
-GCCAGAGGGATGGTCTGGGGTTGGACTGTGGTCTCAGGGCGGCAGGGCCTGCGTCCAGGT
-GTGGATGGGGAAACTGAGGCAGGTATGGGCGTCAAGGGTATAGGTTTGCGGCTTTCATTG
-GGGGCTCCAGTAGAGGAATGGTCAGAGAGATTCAGCTGAGAAGCGAGAGAAAAGATCTAG
-AAGTTAGAAGAGCAGCGCGGGGTCTGGGAGGGAGAAATTTCCGGCTCTGGGGCGCGGGAG
-AGGTGCGGACCTGGTGCCTGAGTTGGGAGCCTTGAAGGCGCGGACAGGGGGGTCAAGGTC
-CGAGGGATGGCCGGAAAGGATGAAGTGGGTCGGGGGACGCTGGGGAAGACGGTGTGGAAG
-TGAGTCGTGGGTTTGGGGGTTGGGGAGAAAAGTTCCGGGCCGGGCCGGGGGTCCCCACGA
-GAGGGTCATGGGCAGGGAAACGCAGCCGGGGCTGGGCGAGGGCGCTGCGGGCGCAGGTAG
-GGGGCCCGGGGCGCGTGGAGAGCGAGTTCCGGGCGCGAGGGCGAGGCGGAAGGCTCAGCT
-GGCCGGGCCGGCGGGGGTCGGCGGGGGTGGCTCGGCCGCCTTGGCGCAGGCCGCCTCGCA
-GTGCTTGTGGAGGTAGGACTTGAGCGCGAAGCTCTTGTCGCACTGGCGGCAGCGGTAGTG
-CTTGAAGGCCGAGTGCGTCTGCATGTGCGCGCGCAGGTTGGAGCGGTCGGCGAAGGCCTT
-GCCGCAGTGCGCGCAGCCGAACGGCTTTTCGCCGGTGTGCGAGCGCATGTGACCCTGCAG
-CAGCCAGGGCCGCGAGAAGGCCTTGCCGCAGACGCCGCACTTGTGGCGCAGGTTGTGCGT
-GAGCAGGTGCATGGCGAGCGCGGGCATGGACACGTAGGCCTTGCCGCACGTCGGGCATTT
-GCGCGCCAGCTGGCTGTCCAGGCTGCGGTGCGTCTGCTTGTGGCGGCTCAGGTTCGACGA
-CGTGGCGTAGGTCTTGCCGCACTCGGCGCACGCGTGCCGGTGcccgccgcccgcctgcgc
-ccccgcgcgccccgcgcgccccccggcgccccccgcgtctcccgagccccccgcgtcccc
-gccgcccccgccccgccgccgccGCGAGCGCCCGTCCGAGATGAAGAAGGCGTCCATGGA
-GTAGCTGTCGGTCACTGCCGCCTCCCCTCGGAAGTAGCGCGCCGACAGGCTCGACTGCGG
-GCTTTCGGGGTCGCTGTACTCCTCCGGCGCCGCCGGCGGGTACGCGGGCTCGGCCGGGGC
-CAGCTCCAGGCCCGGCTTCTGGTCCGCATCGTAGCTGCTCGGGGGCAGGCGGTGCGGGGC
-GTACCCTGGAGGGGGCGAGAAGTGGAGGGGCGGTGAGAGGAGGCGCCGAAGAGGGTTTCC
-CGCTTTGAGCGCGTCACCCTTTGCGCCTTCCAGCTTGGCGCCCCTGTGGCAGCTCCGACA
-GTGGTGGTCTCCGACCTGCACCTCAGCTCTTCCTGTCAGGCAGCCTGGGTTCAATTCCTT
-CCTCCATCGACGGCAGTGCAAATAGCCGCCACCCCAACCCACGGAGCATGGGGCCAGCAC
-GGTtgtacagagcgtaccttcactatccagtgctcacaaccgcggagtgatggtcttata
-atacccacgctacaggtagagaaactgaggcgcagagagatgcagcagtctaaccttaca
-gtcaggaagtgatggagcccttgccagtgtgaccctgaagcccatgctgtctctattcca
-acaacatgctgccGTTGCAGCCCTGtaacttctctggatctcagttttctcatctgcaaa
-atggagcttgtgattggacacctccttccagggtcgttggaaggactgagtaaagtgacg
-ataataagcgtgtgttaagctcttactgtttgccagactctgcctcggtgctttacgcat
-gttaactctaatcgtcacagacccaaggaagtcggcactattgtaatccccatttgatgt
-gtaaggaaatgaacaaagGTGGGGGAGCATACAGTAATTGCTATATAAATGTTAGCTATT
-ATAATTATGCTTTTTACTTGCTTGGAGATAGTTTCctcccccaccacactgtgagctccc
-catggttggatctgtgtgcccagcacatgcctggctcaaagtaggtgtgcgatgaataga
-tgttgcatgaaggaatCACAATCCAGTTAGACCCACCTGCCAGGGTTGCTGAAGCATTTA
-ACAGGGGTCAAGTGTGTGGCATGTAATAGGTGCTACAGAAAGGGGACTTCCTCGCACCTG
-CTCCCAAGCCTGCTCTAGAAGTCGTCGGAAGTCCGCAGTGAGAATTCCCCTCCCCCTCCT
-CCTCCCACTTAGCTGGAGTTGGACCAGGAATCCTGTCTGCCAAGGGTTTGAGTGATTGGT
-GGGTGGGCAGGCTGGGGTCTCCCTGGGGATTCCGTAGGGGATTCTCATGGGCAGGGGCCA
-TTCTGATTTGCCTCTGCCTCCCATGGCCTAGGCTGGTCCTAGCACCTTCCCTGAGACCCT
-GGGGGCTGGGCTCCCTGGAGAGTTTCTGGCAGACAAACTTTTCATCCTGGCACTTGATGG
-GCAAGTGATTCCATTGTTCTGTGATTCCACAGAACAATGAAGGTTAGGTCCGTTTGGGAG
-GTTTCCCACCTGGGGAGTGGGATTTGACCTTCTCCTGGTGACCCCTGAGACCTGTAACCA
-CTCCTCCTTCCCTCCTCCCCTAGCCTCCTTCACTGAAGTGAGCAGGTGGAGGAGGGTTTT
-GTAAGGGGAAACAGGGTTCAAGATGTTCAGACTTTTAGCTGGGTACTCTGGTCAGCTTTC
-GTTTCCCACACAGCCTGGCTGATTCAGCctccaggcctttgcctctcatctggagtttgg
-gatggacacagggtgaagtctgtgtgcccctgaaggcaagggtgtgcccttatttttacc
-tctgtcccttcagcagccagcacagggccctctgcacacagaagtcattgtggattatgg
-aagtggatgaCTCGGAAGCGGGGGGCTCTGTGGTTGGATGTAAAGGGGGATAGTGATAGT
-GGCAATTTTTTAATCTGGGGAGAGGAGATGCCCAGCCTCTCCGCACCCTATGTCTCCCGT
-CCCATCTGCCTGTGGTCTGGAGGTCCCCCTGCTTCCCACTCCGGGAACCAGGCCTGGTAC
-TCAGGTCCCAGAACATTCAGGAGTGTTGTTTCAGACTGAGTTAAATACCCGTCAGGCACT
-CCCAGACCCCCCTCCTTCTCCTTCTGTATTTCCTCACGTTGTAATTCCTGGTGATGataa
-taatagctaatattcactgagcacttactgtgtgcaccaggctctgtgctaagtgcttcg
-ctcccatcatctcactgaatcatcacaaaactactctcatcacagataaggaaactgagg
-gacagtgtggtgatggcacttgctccaggggtggagcaaggattggaatccactgccCCC
-TTGgtttcccacatactgggaggtcctccaggagggggctgtggctgagctgttcacctc
-ccattcccagggccctagctagtgggcacttaataagtatttgtggaatgagtgaTGATG
-ATTTGCGAGGCCAGCCTCACTCCCCAGCCTAGCAGGACCTGGTATAGACAGTCCTGTTCA
-CCTGGTCTCAGGGCAGGTCTGCATCTCATGTGTCTGGGGCCATGGAAGGGGAAGGGTGGT
-TTGGTTCTCCAACACAGATTCCAGCTGAGTGCCTTTGGGTGGGTTGTGCTTCAGGTCCTT
-TTTTTTTAAAATGGGATTTATCTGGAGGGGTGACTGATCACGTAACCAGTGCTTTGAGTT
-CTATTATTAAaggatgacatattggataagagtaaaactttggtgccagacggcctggat
-tgttttggctctaccattcccagcagtgtgaccttggccaaacgatttggcctctgtgtg
-actcTACCGTTTCAGTAAGGGGTCTGCCAGTAAACAGTATATAAACAaatgataaccagc
-actctcagagcactcctgtgtcaggcactcttacaagggctttccacacatgaaagcatt
-ctacccccatgacacacaaggtggtaggtacccttttatagaagaggaaaccaaggcaca
-aggaagctaagtaacaagcctaagattgtgcagctgataagttagagccaggattccagc
-tcagTGGCTGGCACATTTTAAATCCACCACGCATGTTGGCTGTTATTATGAACAATAATA
-ACAATCTCCCCAGATGGGTTTCTGTGCTGCAGCTTTCTTGGCATCTGCCCCAACACATCG
-TGCTGCTCCTCTCTGGGCCTCTGTTTCCTCACCCGGGATGTGTAATTTCTATTTCACGTT
-CTGATGGGAAAATATCTGGTGCATAGTAGGAGCTCCATCAGTGAACCAGAGCGTTCTCCA
-TGAGGTGCTCTGCCCATGGCGCCCTCTGCTGGTGGCCCTCAGCGCTGTTGACTTTCCTCC
-TGTTGCAAGGGGCTCTTTATGAAGAAATAGGGGTGCCTTCAACAAAGGCTGCTCATTTGC
-CTAGGGAGGGCTGCAGAAGTGTCTTCAGGATAGGAATTGTGAGCCCAGACCAGACACCCA
-GTCAGTGGATTTTGGCATGGGTTGAGAGCATCCTGTGAGAGTTTGTGTGGTCATGTTAGG
-AGGAGGTGGTTctaacttgctttgtgactgtggccaggttgcttaacctttctgggcgga
-atctatacatgacaaagatggactggaatggtctaaagaccctttctgcATCATGGCTGA
-ATCAGTCCCTCCATGATGCTCTTTGTCCCCTCCACTCCCAGCTCCTCCAATTCCACCCCG
-TTTTCCTCAGATTCACAGACATCTCCctaggcaaccttgggcaagttacttaacatcttt
-ctgccacacctgtataagggagttcataataaggctgaataaatgaatgcatgtaaagtg
-cttaggacaatgcctgacacataatagctgccctcttgagctgttattattGTTACTGGT
-AGTATTCCTGTGTTTCCTGGTGATATATCCTTCTAATCTGCCAGAGAGTAGGAGATACAC
-ATGGGTGTCTTAGGCTgctgtgtgaccttgagcaaaccacctcacctctctgagcctcaA
-CCCTGGAGACTCCTTTAGGACACTAAAAGCCATACTTTAACCTAATGCATGGAACCCAGA
-CAGGTACCTTCCTCTGCCCTAAGAGTGACTATAGAAGGCTGAGATACCTATCCTGCAACT
-GACAGGGTGAGACAGGACTCTTGTTTGGGTTCCCAcagagatagggatgagctgggattc
-agagaaaagagaatctcaggtgagatctctcatcctagcccttgaattcaggccgtagcc
-atgtgaccttgggtaagtcgcataacttatctgggctcaaatcctccatttgaggaatgt
-ggaccagaggcacccctgtcatgtagggatatggggaggGCCCAGAAATACTTTGGAGAT
-GTGCACATGTCACCTGGAAATGACTTTGGTTTTCCCTGCCCAAGAGTCTTGATATTTTAG
-ACTGAAGGTCCAGAATCTGTCTTTTTAAAAATCGGTACTCAAAGGAGTGGTGAAAGGGAA
-ATTTATGAGAACTAAGGTGCTGGGCCCTCTGCAGACACTGTCTCATTTAGCTGCCTGACC
-CCCTGCGGGGATGGAGGGGGATGTGTAACAAATACTGCTACTGCTACTGCTGGTGCTTCC
-AACTAGCACCAGCCTCCCTGTGAGCCAGACATTGCCCTGTGCCCAgaggcccagagaggg
-gagaggatttgcccaaggtcactgagagggaggcggcaggtttgaaaccctccaaggcct
-gtgttttttccaaaacaccaGAGAGGGCATGGAGACTTGCTGGGGAAGAGATCTTCAATT
-GGTAGGGGAAGGGGTGGTGCGTTTCCTCAAACACTCCCTAGTTAGCCTGTGGTGGGGTGG
-GTGGGGGCACGGGGTGGTGGGGGCATGGAGAAGCTGTTGTGGAAAATGCTTCAGCCTCTT
-GTAAGTATTTGTAAATCATACTTAATaacagtaatgcctatcacttactgagcacttact
-tggtgcaaggcatcctgctaaatgctttgtgcacattagctcatgtctaaggtcacttcc
-ctccatgcccttgttctgcagaagctgaagcccagacaaaggccttgacccacctcaggt
-cacaaaacaagttctcatcagagctgggttggcctccttttctttcctttttttcagtcc
-aggactcctttccccagtctctcccagACTCCCAAGGTGCCAAACTTTCTCCAGGGAATT
-CCTAGCCTCAGCCTCACCTCTCTGTCCTAAAATGGGCAGAAAAAGACAGGGGCCTGGTGG
-GGGGCCAGCTTCCCCGGCGGCCCACTTTCCTGAGGAGGGCTGGGCCCTGCTGGGTGGTAG
-GGGCTGGAGGAGCTGCTGTATGGGTATATTTAGAGCTGCTTCTTGCTGTGCCAGGGCCTC
-GGGCCTCGAGAATCAGCTCCAGCCAGCTGAGCAGAAAGCCAGGTCTGTCAGCAGCAAAGC
-GGGATAAAAATAGTTTCTCCTGTCTGCTCACAGAGCTGGGCAAAGGGGCTGGGTACCTCC
-CCCTCCCCTTATTATAGCATCTTTGTTAGCGGTTCCCTGGGCACTGGACCAGAAATGACA
-CCCACCTCCTCCAAAGGCCTGGCAGCTGGTACATCTGCCCACGGGGAGGAGGTCCCTGTG
-CCCAAATGAGCAGGGGACAGAGTGAGGTCTGGCCCAACATGACCAACGCTGCATGGCTTG
-GGGCTGATGCCCACTGACCCAGGCCCAAGGAACTTTGAGAGAATTTCAAGGCTTTTCCCC
-ACCACCCCCATCTCTTGGAATTCCCCACATTCTGGTCTTTCCTGACTGTGACCCAATTCC
-TGTGGCCTACAGGGAGGTCCAGAGCTCTGCAGGAATCAATAGGAAAGATTTTTCAGGGGG
-GTATGGAGATGAGAGTGAGTGGCTCAGGGTCTTCATTTGCCCAGCCTGGGTTCGTAGAGT
-TGCCTCCTGCTCCCTCGGGGGGGATCTCCAGTGGGCCCTTTCTGGGCCTCGTTCCGGAGA
-CTGGGTGTGTTGTGCAGTGCTCCACCTCTTCCCCCGGCCTCCTACTTTCTGCTCTGCCGC
-CTCTCTCTCTAGAAGGGTGCACTCAGAGGGCCCATTCCAAACCCCTCCCTATCCAAAGGC
-TGGCCTGGCAGTAGACGCTTCACTTCAGGGGAGTCCACAGCTGGGAAAGAGACCAAGAGG
-CCCGAGGGACCCCATCTCTCCCGGCAGAGGGCCTCCAGGCTGTGGGGGCCCCTAAAACCT
-GTGGATGTAGCACCCACTAGGGAGGTGTGACAGGGTGCACCGTTTATGCTCTtgtgactt
-tgggcaagtcacggcctctctgtgacctcagttttgcctctgtaggttggagtgaatCCT
-CCCCTGCCCCCCGCTGCCCTTTGCCCACTGTGGATTTGTGTGGCCAGAGAGTGCCTTTGG
-GATGTGTAGATTGCTGTACTGACATAAGGGACTTGGTGTACTCTCTGGCCCTCCTTCAGC
-AATCAAAGACTGAGACTATCTAAAGTGTGGAAGCTCAGCTCAGGACCCTCACGTCCCTCT
-CGTAACCCCAGGCTTTAGAGGAAATCAGGGGTTCCCAGATTCCATATCTCACATGGGCCT
-CATCATTCCACACTTCCACTGAGCCCTGTTAATTCACAGGAATATTAGATTTCTGGGTCC
-Ctagaaggtcaaagctgaaagagatcatattcaaccgtttgatattatgaaaggaaaaca
-gaggctgggaggagaggggagactaggccaaggccacacagaaggctaatggtgagtcta
-agacttgaactcagCCCAGCCTTGAGAGCGGATCTGGACAATGACCTTGGACTGGAAACT
-GGGCCTGAATCTTGATTCTGGACCCAGCACTTTGCCCTGGACCTGTTCATAGGTATTGAA
-ATTTGAAATTGGACATGGATTTGTCCTGGATAGCAGACCTGGACCTATAACCTCAGACAC
-TGACCTTGGACCTAGTCCTTGGACCTGGTCCTATACCTGAAGTTTGACGTAGGCATTGGA
-CTTGGACCTCAGATCTGTACTTGGATGTTGGACTGAATGTTGGACCTTGACCTAGACTTT
-GAACCTGGGCCTCTGACATGTCTTTAACCTGGACCTTGGACCTGGACCAAGGCCAAGTTA
-CCAGGGAAAGGGGTGGTTAGAGAAGACTCAGATGGGTCTGCTGTGTGTCCATGGGCACCT
-CCCCAGCCTTCTCTGTGCTTGCTCTTCCAAAAGACTGGGGAAGCCCTTTTGCATTGCTGC
-TCCCCAGAGGAGCTTTCTGAGGTGTGGAATGGATGTGTGGCAGCTGGGGACATTGGGCCG
-GGCTCCCGGGCTTGGCCTGGAGCGACTACCCGGCACCATCAGAGGGAGTGAGAGGAAGTG
-GGCGCTGGTTTAATGTGGTCAGCTAGATAAGCCCATGGGTAGAAGTAGGAGAGTTTCCTC
-AGCTTGCTGGGGGAGGCTTAATGTAGCTGCAGAGGGCAGACAACTGTGTTATTGGATTGG
-CATTGATCCCTCATCTGCCTGGGTTGGATGCACTCTGAGAGGGCAGGAGGGCAGGACAGG
-GCGGGGATGCAGAGGAAGGGGGGCCTGGCTCCAAGCTGGGGTTCGGAGTTAAGGTGGAGG
-GGAGGCAGACACTCCAGAAGATATTCTTGGCAGGGGCCCACAGAGACCACTGACATGCAT
-GTGGGTGGGCCACCTTCTTTGGGGTGGCTGAGAGTCCCAGTATCCTTCAGATGGGGGCCC
-CGGTCTGTGGGGAGGGCCTGGTGGAGTTGGAGGGTGAGGTTAGCAGAGGGTTAGGATGAT
-GTAAGTTGGCATCTCCCAGAAAGACTGAGTCTGTGCTCAGAATCACCCAGGGGAGAAGAG
-GGGAAGGGAAAGCAGTGGAGGAGCAAGAGAGGCATCTTACTTGAGGGGACAATGAAATTA
-GATCTATTCCCACTTATCAGGGAGCTCTGCAGAGAGACCTGGTGCTTTCTTCATTTGAGG
-GGCTCCCCTTCCCTGTTTAGGAGTTCTGTGGGCTTGGGGGGACCCTGGAGCACAGACAGA
-CTTGCTGCACCCTCTGTTCTGCCTGGCGGTAGAGGCTGAAAGGGAGTAGGAAGGCAAAGA
-AGAGCATTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgcgcgtgcgtgt
-gtgtgtatgGAGGAGGAGCAGGAGTCCTCCAGGAATTCTCCAGCATTCTCAGGCATTCCC
-AGAGCTGGGGTACACCTCTTTAATTTGGGGTTCTGCATCTTTATCAGCTAGGAGCTTGTG
-GTTTCTCTGACCTCCACATTCACAGGCTCCCCCAACCCCTGCTCCCCCGACCCAGGTTTC
-CCTCCCGCCAGCCTCATCCTGACCCTGCAGCCCGAGCTGCAGGAATGGCTTGTAAGAAGA
-TCTTTCTAATAACTGGAACTATCTCCAGCCCCAGGCCTCCcccgccctccctccctccct
-ctctccttccctccctcccttgcttctcctccctccctctcctcatcttccccccctccT
-CTCTTTCTCCTTGTTTACCCAGCACACTTACACACGCTGAGAGAGAAAAACGTCGGCTCA
-GCAATTTTTCACACTTCCCTCAAATGCTCAGCAAGGTTATTTCCGGCAGAGCGGAGACAA
-CGGGCCACCAGGAGCCGGCGGGCTCTCAGCAGACCCCCAGCACCCTCCACCCGCCCAGGG
-AATAAGGGATCCCTCACTGCCCAGTCTGGCCGCACCCCAGGGAGGGAAGAGGCCCCTGAA
-AACAAGACAAGGCAGACTTTGTATTTCCCAGTCATACCTAGGCTTGGTCTCTGGCACTGA
-CCGTCCACTGCAGACACTGCCAAGGTGGCCAGGCCAGGGTGCCTGTCCTCACTATGGGGT
-AGCCTACAGAGACCAAAGCCAAGAAAAGTGCCCGATCCCAGAAATGCCGCTACCCTCAGC
-CAGGTGGCGTATGTTCAGTGGAGCCCTAAGGAAACCCTGACAGTGGCCTCCCAGCATCCT
-GTTAGACCCCTGTGCAGGCATCTCCAGTGCCTGACATTCCATAGTTGACCTtcacagaag
-ctgagcttgtcaaagttggaaggatgcttagtttatgccatcaaaactctttcactgctg
-gggaggctgaggaccagagaagggaaggcacttgcccaaggtcacacagcatgtgagaga
-tctagagcccaggcctccaaatttcaggccaggtttctggctatcagcacagccTCAGGA
-TTCCTGAGAGGTGAGGGAGTTGGTCTGGAGACCCATGGGGAAGGGGACAAAGACAGAGGT
-GGTTCTAGGGTGTTAAACCCGGTGGAACCTCTGCAGAAACACCCTGCTGGTGGCTCTGCA
-CCCGCCCTGCTTCCCACTATTCACTCAGGGGCTCCTTTCAAAGCTTTTTTTTGGACTGAA
-TTCAAGGCAAGGCATTCTCTTGCCTCCCTCCTGAGGAACAGCCTGCAGTTTTGGCTGTGC
-ATGGGAAATTCTCTGGGCTTCTCTGGGTTTCCTCAGCTGGCCTGGGGACAGGACCAACGG
-GGCTTCAGGGGGTGGAATCCCAGAGCTTTGTGTCAGTGTCAGTCCCTTAAGAGATCCATA
-TCCCAAGCTTGCAGATATTTCAGTTTCTACCAGCTTTGAGCGCACACTCTCCAGCTTTGG
-CATGGCCCCAGGTCCACCCTCTGTCCTGCCAGCCCTCAGCCCTGCTCAGCCATGTCCCTG
-GGCTTCTGACCTCCACCTCAAGAGGCCCTGTGATCAAGAAAAGAGGACAGTAGAATAAGG
-GACATGTGGGCAGAGGAGAAGGGGTTTCTGTTAAGGGTCTGGGGGATGCCAGTGGATGAG
-GGGCTGTAGCTGTATCCCTGATCACTCTGTAACTTCTTTGACCTTGATGAGGTCACAAAG
-CCCTTTGCCCAGCACTCTCTCTCTCTCTACCTGGTGTGGCAGAGTGATGGAATGTGGGTG
-AAGTGCTTGGAAATCCCAGAGGTGGAAGCCCCCATCCTCCCAGGCTCCTGTCTTTGCCAT
-CTCAGTTCCCCCCTCATCCTCAGTCCTTTCTTTTCTCctctctcaatctccctctttctc
-tctctctctttccccacccccatctctctctctctctctctctcacacacacacacacac
-acacacacacacacacacacacacaACCCAAAGCTGCCACATGTGATGTCAGATCTCTCA
-CTACCAAAGGGACACCTCCTCTTCAGACACCTGCCCTGGTGGGGGCCATCAGGGGAGAAC
-CCCTTTGTGATCCCCTTGGTGGAGGATGGGATCCACAGAAGCAGTCTCCACTTTCCCCTG
-CCTTCCAGAGATCACCCCCTTCTGCACCTGAATGACTTCTCTTGTTCCTCAAACCCTTGT
-CCCTGCAGGAACTTGTTCTGAGAAGAGATGGAgtgtgtgtgtgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtatgtgtAGTGAGGAGGGGGCTTACGAGGAGCAGCAGGGTTGGTT
-CTGGAGGGGGTTGAGAAGCTGGGGATGGGGAAGGAGTGCAATCCAGGGGACCAGGAGCCA
-CTTTGGGGGAACCCCTCCCAGAAATCCTCTCTTTCTTGCAGTCCCCAGGACAGGCCCAGC
-CTTTGGCAGGCATGTGGCTGAGGGTAACAAAAGAGTTATTGAGAGAGGGGGTCTGAGAGC
-ACTTGTGTGACATCGGCAGGGGAGCAGGTTTGAAGGGAGGGAGGGCGCCCCCAGCCACCC
-CCAGGGAACCAACCCTGTCTCTCCAGGGACTGAACATCCAGGGCTCTTTACCTTCCCCCT
-TCCCGGGCAGCCAGCTTCTCTTCCTCAACGGGGGAGAGGGAACCCTCAAAGTGCCTTGTG
-CCTCAGTGCCCAGCGCTGGCCTTTCACGAGCAGCCCCGTCTGTGTTCTCTTGCCACCCCC
-TCACTCTAGCCCTATTTGAGGGCCACAACTTTCAAAGTCCCGGCTGGCGCGTGGCTGCGG
-GATGGGCCGACCCCGCGACTTTCCCTTTGTACGACCTAGCCCCTGCCCCGCCCGCACGGC
-CCTTGGAAAGCCCGGGAGGAGCCCACGGCCAGAGAGATCTCCTCCCGGGGGTTTCCTGTC
-GCACGCGCCCCTCCTCGTGGCCCAAGCTGGGGAGGGCCCCAGCTCCCCTCGCCTCTTCTC
-CCAACCCCCCGCCCCCGCCGGGTCCCACTCACCGTTGTCCCCGGGAGGCCCCCGGGCGCC
-AGGCAGCACGTAGGCTGTCTCCAAGGGGTGGTAGGTGGGGGCCGGCACCCCGCTGCACTG
-GAAGCCGTCCCCTTTGATCTTCTTTACCAGGAAGGAgcgcggcatggcgcggccggcgcg
-gggctcggtgcggggaggcggccggccgggcgcgATCGGCTGTGTCCGCGCGGGTTTTCA
-GCACTGGACAGCTCCCAGCGGGCTGGAGCGCGGGAGGCCGCTCGGAGCCGGCACCGGTGG
-CGGCGGCCCCGGCTCGGGCTCGGGCTTGGCGGCGGCGGCGCGCAGACAGGGGATCGCGGG
-AGCTGCGCTCAGCACTCCGGCTGCCGGCTTTATATGGGACGCAGGCTGGAGATCAGGTGG
-TCCCCTAGCAATGGAACCGCTCGGCGCTCTAATCCATCAAATGTCCCCCAGGACAATCGC
-TCCGCACACGTTCCCCTGAACCGGCGGCGGTGGGGGCAGGCCCGGAGCaggcaggagggg
-agaaagtgagggcgagaaaggcgcagagacagagagggacggagaaaggggagtgagggg
-ggcggggagaagaagagagactcggagaaagacagagacatacagggaaagagagacgca
-cacgctgagagaggtagaaatagaagcagagagaccaagataaggacaaaaagacacaag
-agagaaacagagagagaagaaagacagagaTGGAGAGAAGTAGCAACACACACACACCCA
-CGGGAGGAAAAGAGAAATCCAGGCACACAAAAAGGAAACCCCCCCAGGGATGCAAAGAAA
-GGGAAAGAAAAGTGCAAAAGAGAGGGGGAAGCCGAGGGGAACGGAGGGAAAGCGGTCCCG
-AGCAGGCGGGGTTCAGGCACATGGGGCCGCAGGGAAGGGGATGCAGAGGAAAGAGTGCGC
-ACTGGCCAGCGGCCACCCTCCCGCCTCCAGTCCTCTCCCTCTCCCCCAGTTCTGAAGTGG
-CCAGGGTGGACGCTCAGCTTTCACTAGAGTAAGTCTCCCCTCCCCCCTGCTCGGGCTCCC
-ACTGGAGCCCCCTGTTGGGTTTGGGGTTCAACTTTCTTCTTCCAGAACTGGTGGGGGGAG
-CAAGTCCCCCACGCCGATGCCTGGCCTTGCTCGGTTGGTCCTGTTCCGGTGCCTAGCTCA
-GGCGGGCGCTGCAAGAGGAAGTGAAAATCGTCCAGTAATTAATTTTCCTGCTGCCGGGGG
-GTGGTGGTTTTGACACATCCGAGGCAGTGTCTTTCCCTGAAGCGGGGAGCAGACAATAGA
-GACACGTGGACTgggaagggagaggggggaagggagggggagcgggGCTCCTGCTGGAAC
-TCTTTGCAGGTCAGCTCCTTTGTCTCTAAAAGGATCTGAGCAGACCCGCCACCCCCAGTC
-CGACCCAAACCTGGGGGAGCCCCCATATCTTGGCAGGACCAAGGAGCAGGAGAGCTCAGC
-CCCCTGCCCAGAGGGTGCTGGGCAAAGCCCCATGGTGGCGGACCTGCTTTAGCAAGTGTG
-GGATGGCCAGTGCACAAGAGTCCCAGAATCAGACTCTAGGAATTCCAGGCTCTCGCTGTC
-AATGGAATTCTGGTTATGAGATGCAAGGCTGGTGGAGTGGGGATGTCCTTTTGGGACTGG
-GTCATCCAATACCAGTTTGCAGGCTAAGACCTAGAGAGGGCTTGGAGGTGCTTGAGGTCA
-TGCAGTGAGTCAGCAGCAATTGCCAGAGACCTCAGTGGCCTCTGGGCACCACTGAATCAG
-GGCCTATCATGGTCCTTGAGGTGTAGCCCAGAAGTCTCAGAATAAAACTGGGGCCCCTcg
-tggtggttcaagcctgtaatcccagcattttgggaggctgaggcaggaggatcacttgag
-gtcaggagtttgagaccagcctgggcaacatagtgagaccttgtctctacaaatagttaa
-aaaaaaaaaaaaaattagccaggtgtggtggtgcacacatgtggccttagctacttggga
-ggatgtggtgggaggatcgcttgggcctgggagttcgaggctgcagtgagctgtaatggc
-accactgcgctccagcctggatgaaagagcgagaccctatctccaaaataataataataa
-taataataaGTTAGAGTTTCCAATGCAGGATCTGTTGGCCTTGAATATTTTCAAAAGACA
-TAAAGATGCAAGGATGTGGAAGCAGAAGGTTTGCCATTGAATTTGCCCTGTATGGTTTTA
-GATTGTTTTCCCTGACCGAAATAAGGAATTAAGGCAGTTTACTCCCTATATATAAACATT
-GAAAAACATTGCAGGTCCAAAACAATGGGGGCCCCTGATCTTGCCAAGGCCCTGCATGGT
-CTAGAGGTCCCCCACCATCTTTCCTGTTGCATTGCCTCATATCTTGCCCATGGGAAtttt
-ttttttttttgagatggagtttcgctctcgttgtccaggctggagtgcaatggcgcgatc
-acagcccactgcaacctccgcctcccaggttcaagtgattctcctgtctcagcctcctga
-atagctgggattacagggtgcgccaccatgcctggctaattttttgtctttttatcagag
-acggggtttcaccatgttgcccaTGGGACTTTTTTAAACCTCTGTCACTGAGAGTTGAAG
-TGACCACACCCTTGACTCATGGCACGcccatgcattctctgctccagccataggtgccta
-ctggtgctttgggcttgcagctctcttgacctgtataccatttccactgcccagagtcct
-tccctgcacttcaccctaggaaacccctacttgttctcaagactcagccgaggggtcact
-tcctccaggaggtgtccctgacttccatcattgcagactgggccaactcacccactggtc
-cctgagcttcatgaggacaaagactctgtcccatgtatggcttaacacACTCTTAACAGT
-GTGCATGAGGGTCttctagctcccctacttattagccataggtccttggacaagttactc
-aaccgctctgtgcctcaatttccccacttataaaatgggaataataattgtcactaccta
-agtgttgttgggagtgttagaagagttactacatataaagggcttggaatggtgactggc
-atatggtaggagttcaatGCTTGAGGGTTCTATATATGCAGTTTTGCCTGTAGCATGCAG
-CGCTCATTTGTTACATGTTAGTGGGATTctgtggaatgagtggtgaactaggcatctctg
-gtccctgctttcttgcagctgatcttgcagctgtccattcattgagtggatggacaccaa
-gcaagaaaatccttaaatcaacaatatattttcagatagttgaccagtgctgtgaggaac
-ataaaacagggtgagatgatggagagtgatggtgcctttaggcagggtgaccagcaaggg
-tctcctgggagaggtggcatgtgcacctagacttgagccagccatggaaggagcccagga
-aagagtgctccagccagaggcttcacaagttcaaaggctctgaggcaggaatgagcttga
-gcagctgaggacagcaagaaggGAAGGAAGATGAGTTCAACATGTTAGCAGGGCCAGACC
-CAGAGATTACTCCATAAATCCCAaatgaatgagtgaatgaaagaatgaatgaTTGTAGGG
-GTGAGATTCAGCCTATAACTATAGCTTACAACTGTGACTAAGTAGACCTATTGGTTGGAG
-AATAACTTTTCACTGTTTACATAGAGGAAGTTGCTTATTTGTTCAGTCATTGACAATTGT
-GGTATAGCCATATTTTTTAGTTTGTGCTGGGTACTTGGATCTCTGTCCTCTAGGGGTGCC
-TAGTTCACTGTGGGTAAATAAGGCAAGTGGGTGTCATCTAGCTCACCTCCACCTGCCTGA
-TGGTTCTACCTCTCCAACCTCACATCTAAGAGATGGCAAAACGGATCCCAGAGTCCTTAA
-AAAGGAATATAGGTCACAGCAACTTTTGACAGAGCTGGGACTGGACTGTTCTCACTGGGC
-AAGATAGTGATCCACCCCTTAACTGATCAAAGGAAGCCCCACAGAAATGGTGTATTAATA
-GGTCCTGCAGCCCACTAGTGTCGGGTTGAGGATAGAACCCCAGGTCTCTGACCACAGGTT
-GGAAGGTGGTGTGGGTGCATTTAGCATATGAGAAGAAGCCTTGAGCCCTGAAGATGAGGT
-TCCAAAATACCTTCAGAGGGGAGGAGGCCTTAAGTATGGATGAAATACACAATGGCCAGC
-AGAATTTCATCACTAGGACACCAGGAAGGGCCTTCTGTCCCCCAAACCTCCCCCCACCCC
-AGCTTACTGGTTTcaggaagttcactgtggggaattaatttctctaagtcacatgaaata
-aggaaataacttttattcccaaggatgttcgctgcagcatcagagatggtaataaaaacc
-ctgggttggagaaagcaaggagagggttgtgaagaagacgttcactccatgtagtattct
-gcagccattaaaaattctcatttggggagaaaagctcataaaatgtgttaagtgaggggt
-gcagaatacagaaacctctcacagcacgttcacaaccatgaaccaaaacaaaaataaaca
-cacacAAAAGAGTGAAATAAGGGTCTGGAACTATGGGGTTTCCCTCTCCCTTCTTTTTGT
-GTTTTCCAAAAAGATCATAAAATATTTCAGTTCagccaggtgcagtggctcacgcctgta
-atcccagtactttgggaggctgaggcgggtggatcacgaggtcaagagattgagaccatc
-ctggccaacattgtgaaaccccatctctactaaaaatacaaaaattagttgggcatggtg
-gcgcgcgactgtagtgtcagctactagggaggctgaggcaggagaatctcttgaacccag
-gaggtggaagttgcagtgagctgagatcgcgccactgcactccagccttgtgacagagca
-agactccatctcaggaaaaaaaaaaTAGTTCAACAAATATTTATCTTGAGCACTTGCTAA
-CTGTCACTTACTTCCAAATAGAAGAAATGCTGAAGTTTAGTAAACCATGTCAGGATATTC
-ACTATTCATTCTTCTGACTTTTGGGAAGTTGGCATTGTGAATTTCCCCAGTGGCAATAAT
-AATTATTAGTACATCGCCAGCAACATTACAGAGCCACCCCACAGGCCTGGCAGTGTGCTA
-AGCACTTTCCCTTTGAAGAAGGTGACCTTgcctggggctttagattgagggatttggagt
-cagcctattttcagtttaaattcctgctctgccatttcccgactgtgtaattctctgtgc
-ctccattttctcatctgtaaaatgggtgtataaattgggcctgtctcacaaggttgcagt
-gaggattaaatgataatataggcatcaagtgcttagagcagtgcctggcacacaataact
-tgataaatgttgacagttgctatttacatatcctcacttatctaagccttaccatggcct
-catgggagaaggtgctgttattGAAATGACTGGTTCATGGCTACATAGTCACTGTACAGA
-GGAGCTAAAGAGTGTCCCATGTCTTCATGGCCTACTGCCTTCCTGCCCAGGAGCCCCAGG
-TCTTGGCATAATAGGTCTAGCTGGCTGCAGGCTTAGCCCTCTCTGGCCTACCTCGTCTGC
-TCTGGCATCTTCCATATTTCAACTGTGCCCTGCCCATCAGGAAGAAGGGCAGTTCCCAGG
-GTCTAGGTGTGAGTCTCAGGGCTGTGTGACCCTAGGTGGCTGGCAGAGCCACCCTGGGCC
-TCACCCTGCACATCCATAAAGAGGGGTTGGGGCATCCTATGATTCACTGGCTTCACTCTA
-TGGGGTCAGgaaggagcactgacctgggagtcaggagcccagttccagccctgcttctgc
-tccctttgccctcccctttgggccccagctttcttgtctgtcaaatgggaatgggacaag
-atggtccctgagctgctgtccagACCCGGTAATGGAATTCTGTATGAATTCCAAGGAGGA
-GAGTAGCCACAAATGCATCCGCTCCACGCTGATGGGGCTCTCTCTCCGGTAAGCTTCACT
-TACTCTGCCATTTCTCCAGTGTATTTTATCAGACCCACCTCCTCTGAGCCAAAGAAAAGA
-GGGTAGGAGCAGGATGAAACAAACTCACAGCTCTGTTCATTCAGGCTCATCACAGAGATG
-ACTTGCCCAAGGGCATGTGGCAGGTCCTCTGAAATTTGAGGAAGGCTGTGTTTTCTTTtg
-tgtcactttggtcctccgggaagcagatgtgaaaatggaggtgtaagtgtaagagattta
-ttgagaaaacaccgtgagaaatggaggagagccttcagagagggatgcaggtctgatact
-gtgaaaggagaggtggaataaagaaagattggggaagaggagcctcaggccatggtgcag
-gtctaaggaagtcctagccaacccaacagggagctcctgtgcaaagatttcctgtagagg
-agtcccgtgctcgacagaagggcagaccctagtttcccaccatgctcagtcatcagccgg
-cctgtcctggaagagtggctgtgctgacaactatggcagattgcaaaggtgttgcagctg
-gaggctctcagtgactgtagtccagagaagatctgagtggcacctccctaaggctgccac
-aTGTTTTTCTTTATTCATTtaatagacacttacagaactctgggccatgtgccagttact
-gatctatgcactttacaaatattaccttagttaatccttaccctcgccttttgagacaga
-tggtatttttagccccattttatagagggagaaactgagcacaaagaggttaagtaagtt
-gcccaaggtttcacagccagtaggtgataagccacaaatccaacccaggcaagctgcttg
-gaggctctgctctgaccactccaccacactgCCTCCTCTCCAGCTGCAAATGCCTTGGTG
-GCAATTTCTGGGACCATTTCCATTTTCATTTTTCATTGGCTCAGGACCTCACAGCCTTAA
-CAGGAAGGGGCCTACTGTGGTGGCTGGGGGCATAGCAGGGTCCCAGCTCCCCCTGAAGCT
-TCTAccttgctccctcaaagacttccacctcaaagcctttgcatatattgttcccactgc
-ccagagcactcttccacccccttccttgcctaggtaacccctcctcCCATCGCTCCCTTG
-CCTGACCCCAGGATCTAGCCCAGGATAGGGGTGATATGTAGTGGAAAGGAGCTagttgac
-atttattgagcacttattatgtgctaggagccaagtccagccctttacatagattgcctc
-acttaaccatcataacaacctgtgagtgtggcccatggctatccccattttacagatgag
-gaaaccaaggctcacagatgcaaggtgacttgcccaaggagacccagctaggaatcagtg
-gtgtcagtatttaaaccaggctgcctggctacaaagtcctgatcttAAACCATGAGTCCT
-TCCCTCTAAGAGGGCAAAAGATACCAATGCTAGGGTGGGTAGGTGAGGGCCCTCCAAAGA
-ATGTCCCTCCCCTtccccctgccagggctgacagctccttgagtgggattccggatctgc
-tccattcattgccgcacctccatcgtctacccagagccgggtaaatagtaagtgctcagt
-aaatacatcaattgaatgaataaaCTAATGAGTGAAAAACCTTCTTGCGACCCGCAGTCA
-CCTTGGTCCCCTTTGACCAGAGCCAGGTTGACGTGTCAACCGTCAAGATATCCCTCTGTT
-TTGGGTGATAATTAGATTTCTATCTTGACTGTTACAGACATTGGTATTCCTCCATTAAAA
-TGTCTTTCTTTCAggccaggtccggtggctcacgcctgtaatcccaacactctggggggc
-cgaggcgggtggatcacctgagttcaggagttcgagaccagactggccaacatggtgaaa
-ccctgtctctactaaaaatacaaaaatcagctgggcatgatggggcgtgcctgtgatccc
-agctactcaggaggctgaggcatgagaatcgcttgaacctgggaggaggaggttgcagtg
-agccaagactgcgccactgcactccagcctaggtgatggagtgagactctgtcttaaaaa
-aaaaaaaaaaagaaagaaagaaaaGAAAAAAAGTCTTTCTTTCAAAGTTGGAGACATCCC
-TAAACATTCTAACTCCTGTCCCTGACAAGGTCCCATCTTAAGCAGGTCTCTGAAACCTCT
-GGAAGAAGGAATTGGCTATCAGGAGTCTGATCACCAGGCTGCCTGCGGGGTCAGGGTATT
-TGGGGTGGGCCTCTGGCATGGTTTAGCGGTGGGCTGGCCAAAAGCCCCTAGACAAGAGCC
-CACCATTCAAGCAAGTGGGATAACTCAGCGTTTGGGCCTGGGTCACCCTGAGCCAAGttt
-tattttttatttttattttgtagaggtagggtcttgctctcatccaggctgtagtgcagt
-gttgtgatcatggcttatggcagccttgaactcctggggtcaagtgatcctcctccctca
-gcctcctgagcagctgggactacaggtgcatgccaccatgccctggctaatttttaaact
-ctttgtagagatgggattttgctatacttcccagactggtctcaaactcttggcctcaag
-tgatcctcacgcctcggcctcctaaagtgctgggattatagatgtgagccactgtacctg
-gctgagccaaattttaatcctggctctgcctcttcaagctggttggccctgggcaagtta
-ctttgcctctttgcagctctatttcatctctgtaaacagaggccagtgggagcacctgct
-aagtagggctgtAGGGGGCTTCATGTATAGTCAGCCCTTGGTAAGTGGGAGCTCTActtg
-aagggcctttgagataacagcattgtctcctccccacccccatttgacagttgtggaacc
-tgaggcatgggacagggaaatgctttccctggaacattcaggctccctgccaagtcagga
-tgggcttcctcactccaaggtggcctctctTGCCTCCCTCTCTTCCCCACCAGCCGAGCT
-CAGAACCATGCCTGGGAGATGCTGAGGTGGCAATGGAGCTGCAGAGTTGGCATTTCCAGG
-CTCCCAGGACTCCTGGCACAGAGGAATCAACCCCTCTCAGCAGCCCCGGCTCTGCCTCCT
-GCTCCCTGCCTCTGCTCATATACCAGCTGGGACTCATCAGCTTCTAGAGAAAGCCAGGAG
-GTGGCCCAGGTGCATGGAGGCAGGGGGCTGTCAATATTGACCTGTGCTTGACCGCAGACT
-TTGCCAGTGGACAGGTTGCTAAGGAGTCAGAATGTCCACATGCCCCTAGTGCTCATCTTC
-CTAGCCTCCCATCTCACCTAGCTGCAGAGGGGGAGGGGgagcacaagagttgaaagcgtg
-gatgatctgggttcacttcggctgcttaccaacaagttacccagcctggggaagtttccc
-atcctctttttatctcagtttcttcaactgttacatgaggatgttgatactaatggctta
-tcttgaagggcagatggaagatgagtgaggtgtttgcacacagccagtgctcaataatat
-tggccattgttAATTCTGAGGCTATCCTCTTACAGTGACCTCTTGGGCCTTTCAGCCCCA
-AGGAGCCTCTCCTCTCTCTGACTCCTGTGGCTCTGTCAAGATCCTGCAATGAAATTCTTC
-TGGAACCCTATCCAGATGGTGAACTCTTCAAGGGCGGGGACCCCATACAGGTGCCCCATT
-ATAGGCCTGGTACACAACAGGTGCTCATGAAAAGGCCTGCTTGGCTGTGATACtacatga
-acttacagaaccctcacaactacttttggaggcatatgacatgattatccccttttataa
-aaagggggacagtgggtaacatcgaggtgaagaaattgcccaagcagctgggcgcgatgg
-ctcacgcctatagtcccaacactttgggaggctgaggtgggtggatcatttgaggccagg
-agttcaaggccagcctggccaacatggcgaaaccccatctctgctacaaatacaaataca
-aataataataataataataataataataataataataataataataatagccaggcatgc
-tggcatgcacctgtaatcccagctactgaggctgaggcatgagaatcatttgaaccggga
-ggcagaggtaagagggagccaagatcgggccactgcattccatcctgggtgacagagtaa
-gactctgtctcaagaaacaaacaaacaacaaacaaacaacaacaacaaagaaaaagaaag
-aaaaaaattgcccaggggctcacagctataaatctgcagatacttattgtgacctgccat
-gtgccagacactgtgctaagagctggggacacagcaatgaacaagacagagacctgctct
-catgtggcttacatcctgctgagccaagagtaggtagatatgccaatgtcctgtcataga
-aagcaccaggcagggaaatgggcaaagacagagagaggtggaggccgggcgcggtggctc
-acgcctgtaatcccagcactttgggaggccgaggcgggcggatcacgaggtcaggagatt
-gagaccatcctggctaacacggtgaaaccccgtctctactaaaaatacaaaaaatcagcc
-gggcgtggtagcaggcgcctgtaatctcagctactcgggaggctgaggcaggagaatggc
-gtgaacccgggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgg
-gcgacagagatagactccatctcaaaaaaaaaaaaaaaaagagaggtggagcgagagcca
-ttttagatagggtagtcaaggaagacctctctgaggaggtgacttttgtgtagagtccag
-aatgCAGCAAGTGCTGGGTGAAGCCTCAGGAAATCTGCTTTAGCATTGCTGTGGCAGATT
-CAGGGTGGAATCCAGGAGATCCCAGGACTGGTGGTGCCTAGAGCCCAGTTGGCTAGATCA
-ACTTCAGTGTGGATAAATGACTCCCCTGCCCCCGCGAACTTACCTTCCTGGAGCAGTTAA
-AAGAACGgggcacatgacctagattctctgagcttcacttttctcatctgtaaaatgggg
-attgaaaagcatagcttacaattctgagagctgagttgattaacagagatggtccatgta
-aaatgctgggctcagagctgggcTGACCAGATTCACCTAGTCCTTGGTGGCTGGAGTGGG
-CAGGTGACCTTCCTTTTGGCCGTCCAGCACCCTCCAACTCCTTGCTTCTGAGACCTCACC
-TCCCACTCATGGTATCATTGCTGGCCTTCCCAGCCCCGTCTTGGCCAGGGGGCAGTCAAG
-TGACCCAGATTAGCCTCGTGccattctgttgagggtgtggtggttgctacattgagtgtc
-cagaggtagcaaggactaaagtcctggtgtcagcatccagcgttggtgtcagcagcacga
-gctctgtcttggggacccgtggtgtcagcagtgaagtctccctcaggccagggctttggt
-ctgatttgagggcttttttcttttctggatatgaagcctgtaagccttctgaccctcctg
-gagatcctTCAGGCACGTCTGCAGCCATGGGTCCTGGATGATTTAGCAGCTCACGCCATT
-GTCTGGAAACTCCACTGGTACTATTTTTCTCATGTTCAGCTCTCTGTGCACAGACTCCAT
-CCTTCTGGCCCAGATGGCCCCTTGGGGATATGCACATACCAAGTTCTTTCCACTGTCCTC
-ACTTtgagggcaggggcctgggttgttcatttttgtgtccccagatcctagcacagagcg
-gctcagaggaaaggctcaatgcatgtccatggtgtcaacaaatCAGTGGcacaggataca
-gtttccacacatctccccatcctggttgcttccccgaaccattttccagtctgtcagtgt
-tcttctgaatatacaggatccagaactgagcacaaaactccagaaataggtgaatggagc
-tgagcagaatgaaactgtcacctcccttaccgtagataccggacttctaattacatgacc
-agacatttaataagcttgttttgTTTCCCTGGGTGGCATATATCAAGCTACTAGCAAGCG
-TTTTGTTTTCATGGTCCTCTACCCACATATTGTTGCAAAACCTCACTTTACTGCCCTTCT
-CCCTTAATTTCACGCTTATAATAGTATTGCCCCTCTCTCACTTCCcaggaatgccaagtc
-gattacagctcaagagcccaatcttgactggtccgtagcctggaacatggtgctgagata
-gatgctgtaactgagtttgggctcactgagaaagactgctgcaattgattaacgatgtct
-gccaAGCTGTGTAAAGTGAAGTAATGTCATTCCCTATCACAAGtcctaacctggggtcca
-tggaaagaatttagttggtctgtcattaacttggatagggaaagtattacatctttaatt
-tcattaacctctatctgaaacttatcattccttcaattatgaatgcaggcaacagaccac
-agtggtattagcaggacctgtgactttgtcaccaatagaaatcacagattttttaaaatg
-acattacagacgttccgcatatcttgaaatataatttacatgcactgtgacttggaaatg
-ataagttattTGCTAAGTactcatttacttactcacatttgtttagcgcctagtcaatag
-cctggtgacgtgccaggacctgggctgggtgctataggcaaaaggcagatgcgtaaggct
-cagtccttccctcaaaagagaaaagcagacagtgacaatggaaaggcttgatgctttgat
-gggggaagtacctgaggcccccaacccagcccagagggatcagggaaggcttcccagagg
-aagtggcctctcagatgagtaggaagtaaccagacccctgagtgctgagaaaaagtgttc
-agggagcagaaacagcatgagtaacgaagctaggaaagaaagagGACACAGGGCTTACAA
-AGTATTCCATGGCGGGGATGGGGAGGGGAGGAGAGAAGCGGGGAGATGGCTGGGGGGGTC
-AGGCAGGCCCCTGGAAGTCATGCTTGGCGGTACCCTGGTCGTGGGGGGGAAGGGGTGCTG
-GCGCTTGCTGCCCCATCTGTCTCAGTGGCATTGAGCTGTGACTTCAGTGGCCTGGGGAAG
-TTCAAGGTCACCTCTGGGGTGGAGGAGGTGGAGACATCTCACCAGGGCTGGCAAAGGCCA
-ACTGGGAAGCTGGGGCCGATACCTGCCCCTCACGGCAGCCACCACAAGGGGCCTTCTGCT
-CCGAAGGCCCAAGCACGCCCTGTTCCTTTATTTATGGGCCGTGTGAGCAATTTGCTGCTT
-GCTGGCCGGCTGGCTGGGTGTGCGATGCGGGGATTACTCACGCCCCAGTTGTGGTCCGGC
-CTCTGCAGGCTGCGGGGTAGTGAGTGAGGTAATTAAGTGTAAAAGATGGAGCAGGCAGGG
-GAGGGCTGAGGGCGGTGAGCAGTCACTGGTTCTTTTCAGGAGCAGGGGAGTGAGATAATG
-TAGGATAATAGCCTAGCCAAACCCTGCCCAGGCAGCCCGGCCTGTGCTGAGAGGTGCCCC
-CCAAACGGCCAAGACAATTCAGCCTTTTCAGGGAAAATGGGGGGGCTTGGGCAGGGCCTG
-GCTCCCAGGGACAGCTGTATGGAAATGACAGCTCCTCTCCTTCGTCCTGTCCTGTGTTGG
-CTCAGGGTAGGGGCAAGTGTAAGTGTCTTCAGCTGGGGATGAGGCCAGGGCAGGGGGCAG
-TAGATGGGACCAGGAAAGCTGGTGGGTGAGAGGAGGGATCCATGCGGGGCTGGGAGACTG
-ACCTGTGTATGTGGCACAGgcacagtggttcgtggcagcagactccagggcctgactcac
-ctggtggaaactgtggtgtggctttggctagctgtgtgacatcagcctagttgtggtcct
-tctctgagcctcaggactctcatctgtcaaatggggctgtcaaacaattcctacttcccg
-ggggtgtttggagaatGGTTCGTAGCGCCTGATGCACAGGGGCTACGAAATGCTTGACAT
-GGTGAAGTCCAGAATCAGAGTGCATTAGTCattcactcattcagtggataaatgtttatt
-gagtgcctaccatgttctaatggttcctgggaaagcagcagtgactagaacagagtccct
-ttcctcttggagatgacattctaagaggggagacagaccattaatcgtgaaacacataaG
-CATAAAAGGTCATAccagcaatcccacttctgaaaacttattctatagacatgtttgcat
-acatgtggaatgaatgcattcatggttatttattgcaattttgtttggcatagcaaaatc
-ttagtaatgatctaaatgcctgttacacatgggctgactgaagtatggaatattatatag
-ccattaaaaagggtgagaccatttctatTTCTgtttatttttatttactttttttagaga
-tgggatctcactatgttgaccaggctggtcttaaactcgtcactggtgaGACCATTTCTT
-ATGTACTGATATAGAAAGCTCCCTAAGATGTTTTGACAAATAAGAAAAGGAATGTGAAGG
-ATAGTTTCTGTAAAAGAGGAGACAATTTGAAAAATGTATTTCTATTAGCTTGTGTATATA
-TGAAACTAATAATAGTTGTTACCCAAGGAGAGGAGTAGGGTTGGAATGAGAGACAGGAAG
-GGGAGAGTTTCACTGTATACTTTTCTATAACTTTTATTTTTGTATGAAGTGAATGTATTA
-CTAGTTCAAAAAAGAGAAAATAAATATTCAGCTTCCTCTTTCCTCCTTTCCTTCCTCAGC
-ATTTGTTGGAGGTAGCTGTTGAGATTTGGGACTAAGCAACAAAGGCAGCTGAGTGAGGTG
-GTGGCTCAGTGTGCCTGGggattgaacaaacaggttcatatatcaaggataatgagagcc
-aggttgctcagcatcagagaagggaattacaagtatgaaaacaggaaaggctagaaagaa
-ccctgtggtgttagattggagttagaggaatcagtgtaaactcatagcttttgatatata
-tagttacataagcatgcatgcaagtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtg
-tgtgtgtgtgatgcatatgtgcatttcccagttctgtccaaaaagacagcaataatcaat
-acaccatgtagccacgaatacacctaacacctagatcttgggttttaaatactattctcc
-actgaaaggaactggggcttgggaaaatagtagatttgagggctggagcaggaaaagtgc
-cctgtgcctggtaccatggtacatgaaacatctagctgtgccatatgataggcaagtgct
-caagtaatgctgaggacatgtcaaaagaccaaggtgccaacttaaagggactcccaatgg
-ccaaatctgggacaacttgagtatcaaaataatgacagtaacagattataagccatgaaa
-tataaatagtcctgatatacagacacatacacgtattacatacacacatacatacataca
-cacatgtgcagaaagagaaagctctttcttacactagaatgcccaataataggtgtggaa
-ggaaggatgcaactagtatggtaataattgattcaaacaagaagcattactagatgctaa
-aactaaagccattgtgtgaaaatttgttgaggagtaggatatttacatagtcttaaagag
-tctttccacaagatacaatacctgcaaaaggaaggagagtgactttatagcgaagaaaca
-tggcagagactatcttagtcgagtgatcaaaggctgcatcactgttactggacaaactga
-catgaggctcctgatgggatgcacagggaagagtgaaaaatcacttctgtgatgttcctg
-ccagagatgcaaaactgaaatctaatcacgaggagccgtcacataaacccaatttgagga
-accttctacaaaacaactggcctgtaacctgggtaagtatcaaggtaatgaaaggcaaag
-aaaaactgagggaccgtcacagattagaggagactaaagagataagacaatgaaatacaa
-tgagtaattctggatggatctttttgtttattataaaggacattattattgagacaatgg
-acaatatttgactgggctctgaagattggatggtagtaatatatcaatgtcaatttcctg
-attttgatgattttattgtggttatgtaggagaatatacttgcttttaggaaatgtacac
-taaagtattccaggataacagggaatcaaattgacaatttactctcaaacaattcaaaga
-aaatctctctatatataaatctctaagagagaatgataaagcaaatatgtttaaatgtca
-atatttggggattctgggtaaacaatatatgagaattctttgtacaatgtttgcaactct
-tctgtaggtttaacattattttacaataaaGTTATTTACATGAAACTGaaaccatatgat
-gtcaagtaatgataagtgatatatagaaaaatcaagtgggcagaggaacagaaaatgagg
-gggtggtgctattctagatggtatggtccaggcaggcctctctaggggaggacctttgag
-cagagacctagtgggagggagggagtagctccatggatacttggggagagtctcaaaggc
-cgagggacccatctgagaaaaggcccagagtgggaccagcttggcctgtgtattagtgtc
-tattgctatgtaacaaatcatcaccaacttagtggcttcaaacaacagccatttagctca
-cagttctgtaagtcatcgtctggcacagagcaactgagttctttgctcaggatattacaa
-ggtagaaaccaaggtgtaggttgggcttagttcttatgtgaaggctctggggaaaaaatc
-cacttccaatttcattcttttcttttcttttttttctttttctttttttttttGTGCAGT
-TGCagagaggaaaggaggaaatttttcgatagaaaaatcttggagatcctgttgctgtca
-cccatcgggctgttggaagctggggttagtccagaagtcttcaggtaatgccagggtgtt
-gccctggccaggaactctcagttgcctctgaacttcttccagccccacatgatggctaag
-ctctccatgaaaggagaccagttggaaacaaagccaacattcccagcaccctgagggcac
-tgaaggattggctaagttctccccggcaagcctgttccctgagaaaatggaggacagagt
-ccttaaaatgaaagagctggggtctgtgcctatactcactctttcaatgaatctacgtcg
-gatcccaggcaggcccccacaatgaagtggtgttgttcaactgaggtaatacccaaggtt
-cgttgtctcatggccacagaaaactaggactcggacacaccagagtgaggttaagagcag
-aagtttaataggcaaaagaaagagaaaagctctctctgttgcagagagaggggtcctggc
-gaaaatgggttgcccccaagttcattcttgttgttcgcaatgttcagcgtcttgcggttg
-tgggactgaccgtaacagacgatttttttgttggctagaagccacctgcattccttgatg
-tgtggcccctccatcttcaagtgagcaatggtgttttgaatcctccttatgcttcatgtc
-tttgacttcctcttctgtgaccaaccgggaaaaactcactgctttaaaagggctcttagg
-attagatcaggtactgtgttagttcacttttgcattgctataaagaaatacctgaggctg
-ggtgatttataaagaaaagtggtttaattggctcatggctctgcaggctgtaccagcata
-gctctagcatctgcttctggtgaggcctcgggaagcttctaatcatggtagaaggtgaag
-ggagagcaagtggtgtcacatggtgagagccagagcaagagagagaaggggagggtgcca
-gattcttttattttttatttttgttttttgagacagagtcttgctctgttgcccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctccacctctcgggttcaagtgactcc
-catgcctcagcctcctgagcagctgggactacaggtgcacgccaccatgcccagctaatt
-tttttgcatttttgttagagatggagttttgccatgttgctcaggctggtctcgaactcc
-tgaactcaggcaatctgcccaccttggcctcccaaagtgctgggaattcaggcatgagac
-atggcgcctggccccagactcttttgaacaagcagatctgtgaactaaccgggtgagaac
-tcacttattaccaaggggatggtggtaaaccattcatgaggaatccgccccggtgatcca
-atacctcccgccaggcccacctccgacactgggaatcacatttcaacgtgagatttcaga
-agacacacatccaaaccgtatcaagcatacccagagattttccgtatcttaaggccattt
-atgccaaataacataagctgatcacaagagtaaacgccaccatattcacagcgcagggta
-ttttacaggacatgtacacaggatggggaggactgggctgaaatcctggaggccatctta
-gaatctgcctatcataGTtgccggggttgagaaacaagaaagccagtgtggctggagcac
-agtgaacaagggggtgcagggaggagagacagcagagTATCACAGGTGGAGAGACACATA
-TATACCACCTAGCCTGATGGGAGGCTGAAGGCCTGAAAGTCACCTTGTGCAATTTTGGTT
-CCTGAGGAAGGGGAGGGTCATGCGAGTTCCTCCATGGATTCACTTGCACTAAAAAGCACC
-CCTGGGGTGGGACCCAGTCGATGATGGAAGTCAATGGAATGCGTGTTGAAGAGTAGCCCT
-TGGAGAACCAGTGGGCTGCTGGGCATAGGTGATAAGTTCTGCTCTGTGCATTTGGCCCAG
-TAGGCACAATGCCAAGAAGCCATGGGCTCGTCAAGGATCCATGGAGAAGTCTGAAATCTA
-AAAAAGCTGGCTGGAAAAATATTTTAAAACTTTCCAAACTTGAAAGACTTAGTGAAGTGC
-CTACCAAGTAGCATTGTGTCAATGGGTCATGAGCAACGCCCAAGTCTCCTAATAGTTACA
-TATGCGTTCTATGTGATGTGACTGCATTTTGTTTCCATTTTAACATTATTGTATTTATTT
-TTTCGTAGTATCATGTGCAATGTACAAATAAAAAGGAACAAAAGGAGATGCCCTGAAAAG
-CAAGTCTCTCTCCCACCTCTGACCCCCAGCCACGCACCCTCTCCCCACTGAGGCGTttcc
-tgtactcaaaggtattttgtgcacatgctaatgaacatgtatatatacacctgactcctc
-cccttttcacaatggtggctgttctgcctgctttttttcttttttcttggcagtacatct
-tggagatgtttcctattggctcatgtggagctgcccattcttttgtacagcagcagagca
-gtctgttatttggatgaactgtcatttattaactagACATGCCCACAACCCTGCCACCTC
-TTTTCCTAACACACTGGGCAGTCTTGGCCTCTCCCAGGCTCCCTGGGAGGGTCACTACTT
-TCACAAAGATGATGCCCACTTCTGCCcatggaatctggcttgcccagtgactacctgaca
-gggttgagtgacaccacccagaagtgcaaagAAGGCAGTAAAGAAGAAAGAAGAATTTAT
-TAGGTGCCCGAGGAAGGGCTcaatcctgccagtctaaacattgttgtacatacctcctga
-tatgtttttctagaatgtctccaggaagggattgctgggaataagtgcaaaataatgccc
-aattgttctccagagtggttgtacaactgactcccttatcaccagtgtcaaggagtcctt
-gttccacataattgatcacatttggacttgtctagctttttaagttttgccaattgagta
-gacaggaaatgagcttttaatttggatttctctaattactcagaggttgagcatcttttc
-aaatgtttgttggctattcatgttttcgcttctctatgtctgtccaaatctttagtccat
-ttttctttttgattgtttgtccttgtcttattgaattgtaggggttctttatatatttgg
-gtgctaatctttgtcagttaaattgttacggacatcttctagcttgtgacttgtctttcc
-acttttaaaaaatggtgaactttgatgaacggtatcggttgtaatgtaactaatttatta
-atatatgcctttatggtttgtcctttctgtttcttgcttcaggaatcctttccaacccaa
-agccatCCCCATGtttctatgatgcacatgtatatatattatttatttatttattttttg
-agatggagtctcgttttgtcccccaggctggagtgcagtggcgcaatctcggctcactgc
-aagctccgcctcctgggttcacgccattctcctgcctcagcctccggagtagctgggact
-acaggcgcccgctaccatgcccggctattttttttgtattttttagtagagacagggttt
-caccatgttagccaggatggtctcgatctcctgacctcatgatctgcccacctcggcctc
-ccaaagttctgggattacaggcgtgagccaccacgcctggcacatgtatatatatatttt
-aaaaagatcatatgtgcatcctgttttgtagctacttttccacttacctaacatgaagga
-acattttttccatgtttaaatagtctacaacatctttggtaaatggttgcatagttttcc
-attgtatggaatatacagtctttatttactgaatcccctgtgatgaacatttaagttgct
-ttcagctttcatatgatcaataatgctgccaagaatatcctgaagctgttggggtccaca
-ttcatgatcatttctcttagataaagtcatagaaatgaaattgcccatagaatttaaggc
-ttcggatacatttgaccaaatttgccagaGGATCCACTTTTGATTCCTTTCCAAGAAGCA
-ATATGCCATTGTGTTCAATTGCCCTTCCCAAGAGTCTGGAATCAGCAAAGTAGGGGTCCT
-GGAGATGATGTTTTGAACTGGAGCTGTTAGCAGGCATGTTCTGTTGTGTGCAGAAATAGT
-TACTGTAGCAGTTAAAGATTTTCCCTGTCCTCTTCCTTCCTACCCTCTCCTGACTCCTGA
-CAGGTAAGATGCCATTATTAGTACTATTAAGAGAAAAGAGCCAAGAAATTAGGCCTGCTT
-TGGTAATGATTCTTGGCTAATTAATTGCATTTCCAATGGCCATAAGCTCCTGCTTCAACC
-AGCACCTCTATGTGTTGAAGGCAAGAAAAGGGGTCCACTACAGCTGCTACCTCCTGGGCT
-GGGCACATAACATTCTCATAAAAATGTTTGTCCAGTCAATGAAGGATTTCGGtttttttt
-aagagacagggtctcattctgttgcccaggctggagtgcagtgtcacgatcacggctcac
-gcagtcttgacctcctgggctcaaatgatcctcccacctcagcctcaaatgatcctccca
-cctcagcctcccgagtagctcggaccacgggcacatgccaccatgcctggctgatttttg
-tattttttgtagagatggggtttcgccatgttgatgaggctggtctcgaactcctggctc
-aagcaatccacgtgcctcggctttccaaaaagattacaggcatgagctaccgtgctcCCG
-GTCAGGAATCTTTTAAAAGTCTCCTGGGTTGTCTTGGATGAGAAAAATAAAAAGAAGTCT
-CCCAGAGAACTTGAAAGCCTTAGATCAGGATTCCCTTCCTTCAGAGGGGTAAGAGGTGGG
-TGCCAAGCATTTAATTCTTAAGCATTTATTTTAGCAAATATCAACATGTATAGTAATTGA
-TACTtttatagtaattgatattaattttcatgtatggcagcacaaagtttcccattagcg
-tgaactggctttttgtttttttaaatgaggctatttaaagaaaaatattaagtaaattgg
-tggaagatagcctgcagatgggggtggggaggaggtggtgtgattccgcccaaacttcga
-gaaacactgCTTCGGTGGAAACCGCTCCGTGAGGAAGGCCTTAAGCCAGGGCTGGGTTGG
-GTCAGGAGAAAGCAGGGCCTTGGGATTCCAGGCGGAGGGCACTGGGAGGCTCTGGAGGGT
-GCAGTGAGGCTGCCACAGTCAAAGGCCGGGCGGCTGGGAGGGGCTTTCGGAGCTCTTCCT
-GGTATTTAAATCATATTTAGGGATTATAAAGTGTGATCCTTCTCATTGTGtcatttgaca
-ctcacagcaactttgtggagtttcaggcaataaggagattgccttgtcagtttacagaag
-gaaacggaggcagagagagacgcagcaatttgcccagggtctcaggtgagtaaaaggcCT
-CAGTGGTGGGTGTGGGCAGCATGGCTGGAAGAAGCGGAATTTGGTGTGGAATTTGTGGAG
-ATGTGTCAGGAGTTGCACCTCTGGGACTAGGGCACTCACAGCCCTCTCCTAATAACaata
-acaaccaccattagcatttatggagtgctcgctgcgggctggctctgtgctgagcaactc
-tggctgtctcactgcacactttacactaacgcaatgggaggggaggtgtcattatccccC
-AGAAAGTGTCAAGGGCAGGAGTTATTGATTCATGgtgtctgctcttgtagaaatttgaat
-tccagtaagggagaggggagccagaaaataaccacgggaagacatcaatgaatgagataa
-tttcacataacgataaatgccagggagaaaaaacccacagggcaatgtgatatggcctct
-ggaggtggagaaggaactgctccagatgaggccatccgtgaaggcttctctgaggaggtg
-acattagagcCAGAGCCAGTAACGTCTGGACTTGAACCTGGGCTTGCGGCATGGGAGAGT
-CCTGCATCTGACTCCAAACTTCCCCTCCTCTGTCTCCTGTGGATCACAGAATGCTTTTGC
-CAGAGACTCAATCCCTTGTTAAGAATCATGGAGTTggccgggcacggtggttcatgcctg
-taatcctagcactttgggaggctgcggcgggtggatcacttgaggtcaggagttcaaaac
-cagcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaaattagcagggca
-tgatggtgcgagcctgtaatcccagctgctcaggaggctgaggcaggagaattgcttgaa
-cctgggaggtggaggttgcagtgagccgagatcccaccactgcactccagcctgggtgac
-agagctagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaTCATGGAGTCCTGGCTTA
-GGGAACGGAGTGTCCAGGAACTAGGGATGAAAGGATGGTAAGATATCCAAGCTGGAGAGA
-CCTCACCTGTGGTGCTGCCTTGTCCAACTCCAGGAGCTTCATGCACTTGCCGACAGTGGA
-GTTATGCCACGTTAGGGGTCACTCTAGATGATTCCCCTGGCCAAAGGGAAACCAAGTCCC
-AGAGACGAGATGGGTCCTGCCAAAGGCTGTAGCTTACAGCTGTGCAAGTTGTGCTGGGCT
-CCAGGGAGCCCAACTGGAGGCTAAGGGGATgccttgcatcccaccagggggctgcaccag
-gaagaaagggtacctgtttctaattcacacaaaggaatgctatgggctaggggtggccct
-gAGCCTCGTGGAGGATGGGGGCAGAGGTGAGATCCCCACATCGTTGTGCCATCCTTTTTC
-CCACCTCTCCTGCTTCCTGCTTTGTTCCTGCCAGTCCCTGGAGGGCAGGCGGGTGAGCAT
-CTTCACCATTGAGGGATGCCCCCTCCTTAATTGTGGCAAGGGGGGCCCTTTGCAGCCCAG
-TGCAGGCCTTATGGGACAGTGAAGAGGAAAAGAAGCAAGCTGGCCAGGATTCCCTGGGGT
-TTTTGTGGAGCTGACAGGCTGAGGAGTGGTTGGTTCCGGGGGCGGGGGTGGCCCAGAAGT
-GCCTTATCTCCTCTGGGCCAGTGTCAGCTCCTGTCCCCAGCCTGCAGCACAGGCTGGAGC
-TGCCAGCCTGGGGACTGCAGCAAATTTGCATTTATATTGGAGACTTCTGTTTCCAGGGCT
-TGGGGGGAGGAGGGGTGGCCACCACCATCAGCTGAGCAGAGATGCAGGAGAGGAGGGGCC
-TGCAGCCCTGTCCTGCCAGGGGCACAGGAAGTGGCCGATGGGCCCAGTCTGCCTGGCTGA
-GGGAACAGTGGCACAGAAGGTTCTCTGGGCACGCGGCCGGCCCCGACAGCCTGCCTGTCC
-ACCCTCCCAGACGCTCGCCAACATCAGCTGGGAGTTGGCTCTGCCCCCAGGCCTGGGAGA
-AAGGTCAGAGGCCGGTGCCAGCAAGGGACTAAGCAAGGCCAAAGCACTCCTGTGACAGGG
-TGCAACTGCGTGTCACCCGGTCTCAGCCCCACAAAATTGTAAATTGttttagccaagaaa
-acggaggctcagaggggcttagccattagctcaaggtgatccagctTATCATCCATGCCC
-CATGAGCCTCCCAGGAACACCCGGGATACTCACACACCCTGGATGCCATCTATACTTAGG
-GGACAAAGAGGAGTTGACACCCCTTTTCCAGCTAAGTTCTGGAGGGTCAAGGGAAGTTAT
-TGCAGGCTCGTGACACTGTTAGGGCTGGTTTTGTGACAGCTTAGGAATCATGTTTCTTTC
-TCtcttttctttcttttttttttttttttttagagacagtctcactcagctgcccaggct
-gaagtgtagtgcagtcatggctcactgcagcctcagcctcccgggcttaagagatcctcc
-cacctcagcctcctgagtagctgggaccacaggagcatgccaccatgcctggctaatttt
-ttaattttttattattagtagagactgggtctcgctctattgcccaggctggactggaac
-tcctggcctcaagggatcctctcgtcttggcctcccaaagtgctggTGTAAGTCATGGCT
-CCTGGCCTCATGTTTCGTTTTATGGTGAAATCCATAAAATGGGTTTTTTTAGGGCCAGGT
-TCAGGCCAGGTTTCCCCTTGTCTTTGGAGAATGTAGCTTCTCCCATCTGTGAGGTTCCAT
-GTGaagaaggaatggaaggaaggagagaagacaagaagggaaggaggggggacaggagga
-gggagaaatagggagtgaagTATAGAATAAATAAATAGAAGAGGGGggccgggcatggtg
-gctcatgcctgtaatcccagcacttcgggaggccaaggtgggcggttcacctgaggtcgg
-gaccagcccgaccaacatggagaaaccctgtctctactaaaagtacaaaattagccaggt
-gtggtggtgcatgcctgtaatcccagttactctggaggctgaggcaggagaatcgcttga
-actcgggaggcggaggttgctctccagcctgggcaacaagaatgaaactctgtctcaatc
-aatcaatcaatcaatcaGTAGAAGAGGGGATAgaaggaaggagtggaaggagggaaggaa
-gggagAGGGAGTAGATGAGAAGAGAAGATAGAGTCATCCTGCACCCCGCCCCCCAGGTGT
-GCTTGTTGCTGCTGGAAGTGCCCCCTCTGTGCCCTTTCCCTGGCTGTTGTATGGAATGGT
-GGTCCTCTCCCCATCCTCCTCACCCTACAGCTGAGACCTCCTGACCTCCAGTAGCAGGTG
-AGCCCTGCTCCAGGTGGGGGACCAGTGACAAGCTGGTTGGGGCTCCAGGAAGCAGAAGTT
-GGGGCCCTGTTGTGATCCCTGGGCTTTATTTCCATCCTCAGGGCTCAGCTGCCTCTGGAG
-GGGGCTCTGCCTTGCTCTTTGGGTTCTCTCCACACACTCCCTCCCCCACTCTTCCAGACG
-GAGGTCTTGGCCCCATTCCCCCAGCCTGTGGCTGTAGGCTTGCAGCTGACAAACCTCCTG
-GTCCTGGCTCTCCGTCCAGCAGAACAAGCCCTCCCTGTCTGTCACCAAACAGTCAGGACG
-GCCTGTTCCACCTGGCAGGCTGGACTATTGCCcagcttagtcttgggaagtgaggaccag
-ggctgacaacccactgcctgagttcaaatctttgctgtgcctctttctggctgtgtggcc
-ttgggcaagacccgttacctctctgagcttctggcttctcatccgtcaatgggcataatg
-ttaggatctgcctcttggattactgtatgaatgatacgagatcgttcatggaaagtgctt
-ggcttggtgcctggcacCAAGACATTTCAGCTTATATTATCCTAGCTGTATCCTTCAGTG
-TCTGTCTGGCCTAGGTGGGATGTCAGGTTCCAGGGACCTGTCCCCATGCTTCCTCCATTA
-ACCCCTTTATGACTAGTGTCACCTGATATGACTATTTCAACACACATAGGATTGAACCCT
-GGTACTATTATACCATTACTACTTCTCCTAGTTGTTGTATAAGTGCTTATGGGATCAGGC
-ACTGTTCAAGCCAttttaaaatatgactccacattcctttaaattcctctaatcaagaag
-tggggcctatgtcccctctcttgattgctcccaggaataaaatatggttagaaatgacca
-tgctggctgcgtgcggtggctcacgcctgtaatcccagcactttgggaggctgaggtggg
-cggaccacccgagggcaggagtttgagaccagcctggccaaccaacatggtgaaacccca
-tctctactaaaaatacaaaaaaattagccgggcgtggtagctgtaatcccagctactcgg
-gaggctgaggcgggagaatcacttgaacccgggaggcagaggttgcagtcagcctagatc
-gtgccactgcactctagcctgggcaacagagtaagactccttctcaaaataaataaataa
-ataaataaTAAAAAAAAtgaccatgccacttctgcttgagtctctggggacactcactct
-tggaactgttggaacccagcctgcatgctaggaggaagcccaggacccacggagaggcca
-ggtgtggatgttctggcctgcagtctccactgtgccactcctaactgccacacatgtgag
-gggaagacaattctagatgattctagtcccctgccttcaactcttttcagctgaggcccc
-agatactgtagaacagaaggaagccacccccatgtgctctgtctgaatctgtgagcataa
-gaaaatggttaacagtactacacgttggggttgttatgccacagtaaatcaccagaaTCC
-Ctgtgctgactcatttaagcttcacaacttaggaagtagctgttcttatcatctccattt
-catagatgaggaaattaagacccaaaatgctttagcaagctacctgagtccacagatctt
-ctaagaggaagagctgggattcgtgcccaTGGGTTTGAGCATTGAAGAATCAAGCAGGGC
-CCATGTCCTACAGGGCCTAGTGGGCCACATAGGTGACTGGATGTCATCTTGAGGGCCTTG
-GAGGGCTGTGGGAAGACACTGATGTGTGGAATTCACGAGGTCGGGAGAGGGCACTAAGAA
-GCTTGCTTAGGTGCAACGTGGAGGGTGGGTGAGAAGGGGCTGGAAGTGGCCCACGAGGAT
-GGACAGTGCCACCCTGCCATGGTCCACCATCCTCTCCATGTCCTGCTCCTCAAAGTTACG
-AGGGCAGCAGCAGGAGGCCTGGTCTCAGGCCCTAATGAGCTCTGCACCTATCAGAGCTTG
-GCCTAGCCGGAGATCCCAGCCAATTCCTTTGGGCTGACTTAGGCTGTGCCCTTGGACGGA
-CAGAGCTGGGCAGTCAGGGCTGGGAGCCTGACAGTGTGAACAGGAAGTTGACGGCCCAGG
-AGCATCCTCTGTTCCCTGCACATCAAGGTGGGCCACATAGCTCCAAGATCATCTGTGCCA
-ACtggatctactgggtttggagttggctgagagtggaagggagcccacaagaagagtgac
-ctaaagaggacagacactgatttctttttcttattaccaatctggaagcaggcagtcccg
-ggctggtataatggctctttgatcctcagggacccagactccttctatcttgttgttcca
-ccctcaacacttcatagtccaaggtggccgctcattctctggccatcatgtccacattcc
-agccagagggaaagaggaagaggcaaagaatgctctggtctctttaaggacccctcaccc
-ccaccgctcagaagttgtactcggtactccgtttacctcttcatggcaggaatgcagaca
-catggccacccctaactgcaagagaggctgggaagcgtggtctctgttctgccatccatt
-cacccagctaTATCGGTGGGGAGGGGGTTCTCATACTGCGGGACATGGCAAATCGCTTGG
-AATGCCAGCCACACCTGGCACCTGGAagccagagtgagtgttttgaaacttgaatcattt
-aacttcgttgcttaaaatgatcctgtagcactcactgctcccatgataaaggccaaatcc
-tcatctgacccccagggctgcctgatctcaccgtggctcacctctccagcctcatgccct
-ggttcccccagccccatcctccccaactcaccctaacATTGAAATTAAACCATGCCCACT
-CCATCCTCACCTTGGGTCTCCCTTTGTGCTCTGATATTTGGGTTCTCTTCATGCCACAGC
-TCCACCCAATGTGTGCTCTGCTTCCTTAGCTGTAAAAGGAGCTCCCCATAGTACCCACTG
-GGCACATAATAGGGTCACTTGCTTGGGTACAACGTGGCGGGTGGGTGAGAAGGGGATGGA
-AGTGGTCCACAAATAATGATTTGGGAGAACACAAATAATCAGACATAAAGAGCCACAGAG
-GCACTTACTGACTCTAAGGACTGTGGTTATAAAGCCCCTGCAATGTGCCAGGTTGGTACT
-ATGGGGAGCTCCTTTTATAGATAAGGAAACAGTGCATGCTGGGCGGAGCTGTGGTGTGAG
-GTCCTGCTGCACTGCCTTGCTGATGAGAAAAAACACTTATGGGCAGAGCGCTTTACACTG
-AGCAACTCTGTGCCTGCCTTTGTCTCAGGCAGTCCTCTAGCCATTGTGCCCCCCCCtttt
-tttttctgagatggagttttgctcttattgcccaggctggagtgcaatcgtgcaatcttg
-gctcaccgcactctccacctcccaggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgcaccatgacacctggctaattttgggtttttattagagacgg
-agtttctccatgttggtcaggctggtctcgaactcctgacctcaggtgatccacccactt
-cggcttcccaaagtgctgggattacaggtatgagccaccacacctggccCactgtgcccc
-ttttgcacatgaggaaatgggagagggactgtgattctgtaaggtcatatagccaggtag
-tagccatgccttgactggaacccagctctgcctgccccttccctgctggcagttgcatca
-cctgccttctctgGGGAGTGAATGAGGACAAGCCAcacttgaccttccatggtcctgtag
-cagagattttaaagtccagcttttagagaggaacgtgaaagcccagagaggaaggaactt
-gcccttggtcctatactccatcaagcacaatgctgggaagggactcaggtctcctgactc
-ccagtccagagctcttgcacactttgctccttcatgcaacaaatatttattgagcatcta
-ctgtgtaccagcacagtgctagcccttgagaacacagcagcaaacacaacagacacaaaa
-ccctggccctgtggagtggacattccagggctgggtggaggagTGGGAGACCAATACGGA
-CCAAGTAAGTCAGCTGCAGCACTGTCTTTCCTCTTATTTATTTCCGGAAACAAATAATTA
-TGGAGAACTTTATTGCTataagacagacatggtcctgactctcctacagtgagaatatag
-tgttggagacaggcactcaatgagagacacataaataagcaaagttcagattgtgatcat
-agctgagaagaaaacaaggttgaagtgctagagagtaatggggatgcggtactggtagtt
-aacttcagatggggtggccaggaaaagcctctccaggaagtgactcttgagctgagaccc
-aaagcatgcaatggggcccaacagtgttccaggtggagggaacagcaagtgccagggtgc
-agaagtaggacagagcttggtgggagaaaggaacagagagaaggccaaggtggctggagc
-agggcgagagggggaggttggcaagagggagggggctggagaAAGTCCAGAGTGTCGTGG
-ATAGACACTGAATAAAGAGAAGGGATGACTAGCCCCCTACAGTTCACCCCTGGGTGGGGG
-TTGGGTAGTCGTCTTTGCATCTGATAATTTCCCAGCTAGACCCCCAAGGGGTGGGGGCCA
-AACACCTGCTGGCCTGGCACTGCCTGTCTCTGCAGAGATAAAGTTCCCTGCCCCCCGTTC
-ACCAGGACCCCGCTCTGTGGTGCCTCCACCTGCACAGTCAGGCAGGGCATTGTGTGTTCC
-GGCCGGCACACCTGGCATTCACCAGCCTGCTGGTTGCCTGATTTAGGGGCTCATCCTGCC
-TGGCTCAGGGGTCTGTTCCCTGGAGTCTACCAGCTGGGACTAGGCTGGCTGAGGAGGAAG
-ACACAGGCGCTGGTGGTGGCCACAAAGAAGGCACCCTTTACCGTTGCACGCCCATTGGAC
-CATGTTTGAAACCCCAGGCCTCCCTTTTCCAGCCATCCTTCCCTGGGTGGCAGAGTCTGG
-GCTTGGGCAGAAAGGTTCAAGGGGCAGTTTCACTgctgtgcttagaaattttctctccct
-ctctgggcctgtttcctcatctgtgcaacggaagggttgacctggataaactcATGGTGT
-Agactctagagccagactgcctgggtttgaacctttaccacgtagtgaccatatgaattt
-agctaagttactcaacctttcgttctcagtttacctacatgtaaaatggaggtacaataa
-taacacctatttcaagggctgcgggaggattaagtgaattatatatgtctggtgcttcaa
-acagtgcctgctctatggtaagtgctatatattttaactctgatcattattATTAACGTC
-TTTGGAAAACATTGCACTGGAAAGACTCAGTGGAGAAATCTGAGTTCATTTGTTTGCAAA
-CTTTTTGGTCTTTGTTTTTAACAGAGAAGCTCTGCATTGGTCAGGAGAAATTTTACTCAG
-AGCCCCAGCTGTTAGCAGGGGATTGAAGGGGGGCGCCTGCCCCACCTGCTTCCCCGTCTC
-TGTGTCTGCAGCCCCCAAGAGGCCTActggagcataacttgaaaatccctgctcagttta
-tctccttcagctcacagtcagggaaactgagactcagagaggagcagggatctgcccagt
-gagtggcccagcctagactagaacccagatctcctATTTTTCTCAATACAAGACAAGGGG
-CAGGGGCTAAGAGAGAAGCTAAGACCAGAAGCCTCTTAGGGGACTGGGTGCATTGTGTCG
-TCAAGTCATTAGCATGCAAATGATATGCAAATGAATGCAAAACAGCATGTTTTATGCTAA
-TTTGCAGAGTCGAGAGCGACGACATTTTTGGTAATAGGGCGGCAGTCCTGGTCCCTGGGC
-ATTGCCGAACACGCGTCCTTTTTTTCTTTTCTTCTTTCATTATTATGATCGGGCCCATAA
-ATCTTGGTTTGGCTGTGACTCCGCCCCTTCTTGCTTGAAAGCCTGGCTCCTATCATTCTC
-AAGGGCTCCCTTGCCAGTCCTCTGGTCCGGCCTGGGCCCAGGGACAGGCCTGAGCAGTGG
-GTCAGAGAACCAGGACTCAGGAGCCACCAGTCAGAGCTAGAGGGTGACCCCAGCTCTGGC
-CTGGAAGCCACTTCTGAAGGAGGGGACCGTGGCACTTCCTCTGAGCTCCCACAGCCACTG
-TGGCTTCTGTGCCATTGTCTGTTTGGGGCTGGCTTGCTCCTTTTCTTGTCAGGGCGCCCA
-GTACCTGGAACACAGGTTCAGGATGTGTTTGGTGTTTGAAGACTGAATCCATATATGGAG
-AGCTGGTGgtgtaccctagtgatgagcctgcagtctctgaaaacatgcagcttgagttaa
-aaccctggcaccactactttctGAGAAAATAGTAGTATGTACTCACAGCTAACCttttgt
-ttttgttttgttttgagacagggtctcattctgtggctcaggcatgagtgtagtggcatg
-attgcagctcactgcagcctcagccttctgggctcaatccatcctcccacctcagcctcc
-tgagtagctggcactacaggtgcacactgctaccatgcccagctaatttttttttttttt
-tttttttgtagagatggggtcttgccatgttgtccaggcaggtctcgaactcctgggctc
-aagccatccttctgcctcggcctaccaaagtgcagggattacaggtaagagccatcacac
-caggccCATAGCTAattgagcacctaccatgttccagggctctgctttgtaattgttgtg
-aacgctgtcactgataagagtatcctagaaggtgagtatcgttatcattgctctcatttt
-acagagagggttaaatgatttgcctgaggtcacacTCCCCAGGGTAATGGTAAAGGGGTA
-TTTATATTTACTAAGGATGAGTGCTTCATCAGGCAGGGGCCTTTAAGGCACTCAGCAAAG
-CTTCTGTCACAGGGTACCAGGGTCTCCACCTGTGCTATCAAGCCACTCTTTtgacaatgt
-taaactttacctgagccctgtgctcctgaaaaacagcgatggtccagaaatccccccaac
-tttttgttttctgaagtctccctaccttttctgttcagggaaatggcttagcaaaacgag
-ccacccttccccatatgactcagataagacgtagtcccctctttctagtgtatcctgtaa
-gactggaggatgactcccttgctggcctgtgatctttccccttttgctggaacctgctga
-caaggccaaggccaaggaccctcccacttcccattctttgtctcatggttgattagctga
-gatgagaactgtgtgtcctctctgaaactagctagacacagagatgaacatttcctcttc
-aatggactgatggagatatcccctatttgtaagacaatccccactttaaatccctcctgc
-tgtaacctgtctcctcacccctacaaaagtcaaaggcaaatccatcctgtccagacactc
-tgattttgggatctgggatgctctccctgttgcaatagcatgaataataccatcaacccc
-aattcttccgtgtattttgtctttGACCCTTTCCACCGTGCTGTTTTCCACCTAAggctc
-tgagctaggtaagagccctgtgaccttggagtacttctcgggcttctctgtaccttaggt
-ttaaaacggatgcgcacaggcgttatgtcctcaggttgtgagataaaaggagacgacgcc
-agggaaacgctcggtcgcttggcactgtgcccagcagcgtgagtgctccagaaatgtcaa
-ccattgtGAGTCCAGGAGAGGAGAGTGGCGCTCAGAGAGGGAACGGGACCTGCCGGGAGA
-CTCACAGCGGGAGGAAGGGGGAGTAGGGCGCACGTCTGGTGACCTCCGCCCCCAGCTGTG
-GGAGTGTGCCCTGTGACCCCCTCATCCTGCCTTTGGATCACGAGCTGGGGTCGGGGGAGG
-GGATGGTGGGGGGGACACTGCTCGGTCCTCCACTCCGTGTGCCCTGTGACCCCCTCATCC
-TGCCTTTGGATCACGAGCTGGGGTCGGGGGAGGGGATGGTGGGGGGGACACTGCTCGGTC
-CTCCGCTCCCCTCCGCCCGCCTTTGATTGTGGTGAGCAGCGAGTCGCGGAGCAAATTAAC
-TTTTCGCACACTTCATTATGCGCCGTCCCGCGTcccccggggccgaggcccgcgcccccg
-ccccgcgccgACAACTTGATTGGGCAATTAATCTTCGCGCCCCCCACACCCCCTCCCGGC
-CCCGGGCCTTTGTGCGCCCGAGCGTGGGCCGTgggcgccccccgggccgcccggTCTGCT
-GGCGCAGATAAGGCGCCCCTCGCCGCGCGGCCCCGCCTTTGTCAGGGCGCCCGCAGGCCC
-GGCCGCCGCGCTGCCGTCTCGCACCCCATCCGCGCGCCCCCGCCCCTTGGCTCGGTCCAT
-CTGTTTGAGCTTCACAATCCTCCAGCGGCCGGGGGCTGGGGGCGGGGTCTCGCTCTTGGG
-CAGGCAGCCAGCACCCCCTCCCCCCGGCCCCCCCACCCAGCCCCCAGACACGCGCGCGCA
-CGCCCACTCGCACGCGGGGCCGCCCTGTCAAGCAGTGCGGTATTAATTAAGAAGGTGGGG
-GGGAAGCACAGCAGCAGTTTGAAGAATTGTGGGGCGGAGGGTTCCCAGCGGTGTCCAGAA
-AAGAGGGGGACCCTGCCACCCATCTCGTACCGCAGGTGCTTAACGCCTGGTTATTGGCTT
-GGGGATCTACAGGCTCCCATGGCTGGGGGTGGGGGTTAGGGGAGGTGGGAGGTGGGAGGG
-AGAGGCCTGGGAATTTGCCTGACAGTGTCTCTTTGTGCATTTTTCTGGGGTTTTGCCAGC
-AGTTGACCCAGCCTCAGAAAGGTAGCCTGTGATTCAGGTAGTGTTGAAAACCAGAGGCCC
-AAAGGCAGGATAAATCTGGGCCTATTTTAGAGGCCAATAGCGTGGTGGTTCAGAAAGGGG
-TTCCAACAGTTCTCCCTACTCGCCGTTGAGGATTTGCGTCAGGTAACCACCCTGCGCCCG
-GGGCGGTGGAGGTGATGGGCTGAGACCGTGTTGGCGCAGTGCTGGGTACACGGTGAGTGC
-TCACAAGTGCTGGTTCTTGCTGTTTTCTGTGATTTTCCTTGGAGGGGCACAGGGAAAACC
-AAAAATGGCTGGTGCTGGAAAGAGGCCCTTGAGTTTCATCTCACAGCTGGCGGTAGGGTG
-AAGCTTGGCAAAAAACCTGTGGTCTGTGCTGAGCTTGGGGCTGGgtgtgtgtgtgtgtgt
-gtgtgtgtCTATGGTCTTTGAGAAGTGTCTTCATCAGCATATGACTTGTGTGAGTTTTTG
-GGTAGAGAAGGCACAGCCTTCACTAGTTTCTACAAGAAGGGTGTGATCCAGTGTGCGAAG
-AATCCCTGTGTGCAGGGCTGGGAAATCAGCTTCATCTCTTCCATCCAAGAACAGCATGGC
-TGGCACGCTTATTGTGTGCGGAGTCCACGGTAGCGTCCCTAGGTGCTAGGGACAACCGTG
-AGCAGAGCAGAGTTCTTGGCTGCCTTCACAGACTCGCAGTCTCCTTCGGAAGATGAATGA
-GAAATAAAATAAACATGTAAGACATGAGGTAGGTCACTAGGTGACATGAGCTTTAGATAA
-AAACAAAGCAGGGCACCTGATTAGGAGGGTGGGCCCTACTTGCCAGACCCCTACCCTCAT
-CCCCAATACAGTGTGTATCATTGCCTGGGCAGGAAAGGGCCACACTCCTGGGTCTAGGGA
-ACTAGGTCCCTAAGTAGCCTCATGTCCCCACCCACTAGGACCCAGCCTCCAGCCAGTTCT
-GTTGCATGGGGCAGGGTCCCTGGGAAGATGGGCAGGCCTCAGACTGCTGCAACCTCTGCC
-CCTAGCCCTGAGGTGGTGGCAGTAGTGTTTCCCTCTGATAATGACATACTCCAGTCTTGC
-ATGACCACGATGCCTCATGAGCCCACAGTCCAGAAGGGGCCTGGTGAGCAGGAGCTGAAT
-TAAAATGGAAAATACGGCCTCCCTTCCCCCCTTCCTGTTCCTCCCCACTTACTCCCTTCA
-TTCCTGCTGCTCCTGAAGCCATGGGTGAATAGTTTCTCAGTCTCTTTGCCTTGCTGAGCT
-GGGTTAGTTGGGTTAGCAGGATGGACATCTCCTTATGGATACTAGAGTTAGGAGACACCC
-AGAACCAGCAGGTGGGATTTTAGAAAGTGCTGTTTGGCTCTGACCAACCCCTACTCCCAC
-CCCATGCATAGCAGGGTTAGTTTCCTCATCAACTCTGGTCTCTGATTCTGATGTTCTGCC
-CCTAAGCATCCTACATTCTAACATTGTATTCTTCTGACTTTTTAGAATTTTCCCATCCTA
-TGCATCTTACACGAATATGGTGAAGTTCTGATTTCCGCCCTTATGTTCTAGATTGAGTCT
-TCAGTATTAATTTTGTTGGGGTCTACCCATTCAAATAACAATAGAGAAAGACTATGTGCA
-GAGTCACATAATACTAGTCATGATAGTAGCAATTAACATCCTTTTGACCTTGGTTTTATT
-TAACAGTTTTTTTTTTTGAGAATTTTCTAAGCGCCAGACACCATTCTAGACATTATACaa
-ataaatagataaaaatgaataaataaataaatGTTATTTTAGAAGGTGCAATTGAAATTG
-AGAGTCAAGGCAGGACTCACTAAGAAAGTGACAATattttctttctgctttcagttatgg
-agatttgaaatctcagttgataaggtggatttatttctccttgcaggtcattcacttttt
-ccttcatgtattttgaatctctgctattgggggcataaatatttagaattgttatatgct
-catgattaactgaccttttttttttttttttagatggagagtcttgctctgtcgcccagg
-ctggagtgcagtggcgcaatctcgactcactgcaacctccgcctcctgggctcaagagat
-tctctggcctcagcctcctgagtagctgggattacgggtgtgcaccaccacgcccagtta
-atatttgtatttttagtagagatggggtttcaccatgttggtcaggctggtctcaaactc
-ctgaccttgtgatccacctgccttggcttcccaaagtgctgggattacaggcgtgagcca
-ccgcacccagccttgacctttttaatcattataaaatgaccttatctttcctggtaatat
-tctttgctctgaaacaaacattgtctgatatgaaactagctactcctccagtgttatttt
-gattactgttactttccatctttgtacttttaacttgtgtgtttacacttaaggtgtgcc
-gttttgaaggttgggtcttattttttttttttaaaaaaaacaatatttgggtcttatttt
-tttaaaaaaatccaatctaacaatctctgctttttaattgagggtatttagaccatttac
-atttgatgtgatcattgacgtggttagatttaagtctatcatcttgctatttgttttatt
-tttgtcccatctgttctttgcttcctttttcttctttttctgtcttcttttgtataagct
-cagttttttttactatttcattttaactcctccttttttattatatcgttttaccttctc
-tgttggtttattaactgtaatgttttgtttgttatcttagtagttacattaggccttata
-agcctgggtacggtggctcacacctgtaatcccagcactttgggaggctgaggtgggcgg
-atcacctgaggtcaggagtttgagaccagcttgccaatatagtgaacccctgtctctact
-aaaaatacaaaaattagccaggcatggtggtgcatgcttacagtcccagctactcgggag
-gctgaggcaggagaattgcttgaacctgggaggcagaggttgcagtgagctgagatagca
-ctactacactccagcctgggtgacagagcaagactcaaaaagaaaatcatgtaatagtat
-actttcatttccttcctggccttcttgctgttgttgtcatacatacatatgtgtgacaga
-ctccacaaaatgttattatttttgtttaaatgctaagttatctttttttaaattaaataa
-tcagaaaagattttatatatttaactcatgtagttaacacttctggtgacctccattccc
-ttatgtagatccagatttccatctggtatcattttccttctgcctgaaggatttccttta
-tcacttcttgcagtgcagatctgttggtgacaaatgcattcagcttttgtatgtctgaaa
-tcatctttatttcatcttcatttttaaaagatattttaactgggtatagaattctagatc
-ggcaggttttttctttcattagcttaaaagatgttgttgcttcactattttcttccttaa
-attgtgtccaacaagaaatctgccattatccttatctttgtttctctatactttacaagg
-cttttctttctctgactgtttttaatatttatctgtttgtcactggttttgagcaattcg
-ttcatggtgggtaatttccttcctgtttcttgtgcttgaggttcgttaagcttcttggat
-ctgtgagtttatagtttatatcagatatgaaatattctcagccattaattttctatttcc
-tctcctttggggacttcaaagacacatatattaggcttcttgaagttgttccatagctcc
-taatactcttggttttttggattctttctttttctctgagtcgtcgattttgggtagttt
-ctattgctacatcttaaaattctctaatcttttcttctgtcacatcagcatatttttcat
-ttcagacatgtagttatcatttctagaagttcagtttgggtcattttatatcttccaagt
-ctctccttaacctttgaacatgcagaccatgaaatacaatttgaatacttattttaatgc
-tcttatctcctacttctgtatcagttctgggtcagtttcaattgattgattattattctt
-gtatgggccatgttttcttgcttatttacgtgcatggtaaactttggatgccaggcattg
-tgaacattacccttgttgggtgctgtacacttttatatttctataaatctccttcagttt
-tgctctaagatgcaattaagttacttggaaacagttttatccttcctagtcttgctttta
-taatttgttgagtgggtccagagcagtgctatctgttgagggctaattatataccactgt
-tgagaaaagaccttcctgagcactctacccagtaccccagaaattatgagggttttttct
-gtttattaatatttctggttttgtgtgagtgctgagcactgttctctaatcttatcagat
-gattttcacccctacttcagtgtagttttatcatacaaaagcaccaaccagtactcagtc
-taatactcaagggggactttcttcatatctctggaatagtctctctgtgcaactctttcc
-tcccaatactgtgtcctgcaaactctgccctctttgtccttcctggactctcaactctat
-ttccttaactcaggaagcctcctgggtgctgcctgggttcctcctccctgcactaggttc
-tgaaaactctctccaagcggcaaactgaggccatgatagggttcatcttatttcccactt
-ctcagggatcatgatcctttattgcctgttgcctagagtcttaaaaattacagtttcatg
-tattttgcctggtttggtttgtttgtttgattgtttcaagcaggagagtaaattcagttt
-ctgatactccatcttgggtggaagcagaTAtgagaaggtgacatttgaacacaaacttga
-aggagttgatggagtgaaccaagaggatatgggagtggggagaggaaggagattctaggc
-agtgtgaacagcaagtacaatggtctcctgcgtgtatagctgagagtgcgggtagtgtgt
-ttgaggaaggaagggagcacgtatggctggagcagagagttatgtggggaaagtggggag
-agggagggatgaggtgtcagcttgtgtaggaccttgcaggccatggagaggattttggct
-tttacaccaaatgaaatgggagccatgggaggattttgagcagagggaggacatctttta
-caggatctctgaatcgattggattaactgaaagggataagagggcaagagagaaagccag
-agacttgctgggaaccagtgcactaagccaggtgaatgctagtgactcagacACATGAAA
-GGACACACTACCAagggggtgaataactaggagcggggatgaaggaggcttctggggtgc
-tgtcggtgtcttgtatcttgatctgagggaggttacatcatctgctcactgtgtgaagat
-tcattgagctggatgtacacgtctaaattgtgTTCACAATTGAATTGAATACATGAATAT
-ATTACTATATAAATATACTATATACATATAAAACTTAGAAAACAAAGTAgggagatgaag
-gtggcttggactagactgttatcagtggaggtgggaagaactgtatgcattctagatctc
-ttttatatgtagatccaataagatttgcaaacagatctaatgttagatgtgaagacagag
-aatagtccaggataatgtcaagttctctggctgagctacagcaaagactgaggacctgct
-gtgtaccagagcttgggctaagctctattaacttctttaatcttcatgacaattctagga
-agtaagtCTGGCAAGAGCTGCTTctgaggtttttgtggggctactgggagcctttccacc
-agaagtgtagtttgtgtgatggattccagaggtagtggtggccacctttgcctccatgag
-gttacaggctgcctgagagtgaggcctacaagaaagaaatcaaagccatgatagagagag
-agacaggatcctcacagtaacatgtcagcacctggattcagccataacagaagccagtgc
-cctgggcttctcagttatataaattaataattacttttttttttatttctttcacttcta
-actgaagagtccagactgatacaACTTCTTCATATGTGTCCCCTGTCTGCACCATCCAAT
-GGACCATCAACAGCAGCTACATCCTCTCCTTACCGTTGCTTGCTTGCtttttttgagaca
-aggtctctttctgttgatcagactggagtgcagtggcataatcacagctcactgcagcct
-tgacctcttgggctcaagcagtccttctgcctcagcctcctaagtagctgggtctatagg
-tgcttgccatcatgcccagctatttttttttttttcatagagacagggtctcactatgct
-gtctaggctggtcttgaactcctggactcaagaaatcttcctgccttggcctcccaaagt
-agtgggattacaggcgtgagccaccgtgtttggccGTCCTTACCATTTCTAATGCCTGCT
-CTGCACTTTCTCTCTCTGGACCTTTGCTCCTACAGGTCCTCCTTTCCAGAATGCCTTTCC
-TCCCTTACCTTCTGCCCTCACATCAAAACCAGCCCCCTACTCAAAGCCATCCTAACTCCA
-CCAGCTGAAGGATGGAGCTGGCAGAGTGCTTAGATATCAATCCATTTTACAGATGGGAAT
-ACCAAGGTCACTGTGAGACAGGGCAGATTTGTGGTCAGGACTCCCGCGTTCTGACTCTCT
-GAGACTCTTTCCATGATCCTCCAGGACAGCCTTTTCTGTGCCCTCCCTTGCGTGGGGTTG
-AACAGTACTTTTCACAACAATTTACActctcccataccccaacccttgcacgtgctgttt
-cctcagtctgggatgccctattccattctgtccttccggaaagggtgccacttgaacttg
-gagattcaactcaaggatcagacttccagaagccttctctttttcccagggtggctctgt
-gtcctgcctggtactcccACAGCTGCCTCTGGTACCTCCATGAACCCATTTATCCATTTG
-TTTTTTAGGTGTCTGTTTCTTGTTTGCCTCACCTGTTAGGTAGGGGAACTGAGGCAGACC
-TCCTGGCCAAAGAAGGCTCCCAACTGATGTTTGTGAATCAACATAGAGTGAGAAAGAGCC
-CCGTGGAGTGGGGCGGGGGgtggagagccagcgctgggcgtggaggcaggacgcctgggc
-tccagtccagccaccaccactctagtgtgtggcctcatgcaagtcatgtcctctccttga
-gcctcaggcttttttggcagtaaaaagggcagaacatcatagtagttaatacctcaggca
-gcctggatttgaatcttggctgtgtgactttaggcagtttactccagctctctgtgcctg
-tttcctcatttgcaaaatgggggcaataaacatatctgcatcatagggtatttgtgagca
-ttaaatgagttaatgtttacaaagctttcaaaccatgcttgcttggcacatcataTAAGC
-ATCCCAGAGTGAGAACCATTAAACAAAAGAAACCCTTCCCTTCCTGAGAGGAGAGGAGAG
-CTTGACAAACTCTAAAGTGGCGTGTGAGTGAACTATGGTCACTctcagggggtaagctgc
-ctggaaaaggctgactctgacactgactagtgtgtgtctttggagaaatcatgtcacctc
-tctgggactcagcttccccatctatcaaatggaggagttggtctagcgcagttggagtta
-aagtgctttgtctctttgagttttatgtccatgtcagtagagtgggctgagagctgcatg
-tctgtcatgcgctcctggtgagaatgaaatacgatgatgggccggacgcggtggctcatg
-cctgtaatcccagcactttgggaggctgaggcgggtggatcacttgaggtcaggagttcg
-tgaccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaattagccgg
-gtgtggtggcgggcgcctgtaatcccagctacttgggaggctgaggcaggagaatcgctt
-gaacccgggaggtggaggttgcagtggaaccaggattgagccactgcactccagcctggg
-caaaaaagtgagactctgtctcaaaacaaataaataaaataaaaaatataataataaata
-aataaatacaatgatgtctggagcacttgccagtcatgcctgccacatagcaagtaatcT
-GTCATAACTGTCACTGTTATTCTGGCCCTGACATTCCAGGGTTCCTTGAGGTGGGGCAGG
-ATGAGGGATGGGCTGGGCATCATGAAGGAAGGTGCTGATGTATCACCTACTGACAGTTTA
-GAAAAGGGAAGGCAGCCATGTGACCCACAGGCAGTGTCCCCCTGCCTGAGCCTTATTTGC
-AGGGCTGTGGCATCGGTGAGCAGGACAGGGACCACCACGCCCACTAGAGAAAGAAGCACG
-TGCTGCTTTTGTGAGTTCACAAAGGTCTTGGTTTTCCAGGGCCAACAGTGTCCCCGCCAC
-ACGTGACCACCTCAGAACCATCACCTGCCACCTGCCAGGGCCTGGGAGTTGGAATCTGAG
-Gtggaaggagagagcaggggccaactcctggctgctcccctctcttggtatgtgaccctg
-ggcaagcctctgcacctctgtcccctttgtcctctcttgtcacataatgaggttttgagt
-gtcttagatagggaggatgtcTCCCTATCTAAGGATAGGATAGGATagaaatggccaggc
-cctggtgcctctgctagctcagtctggctgggacgacctgggaagaacatggcctcagtt
-ccaaagccaaggcggctcctgggggagctgcagctggaggctgtcagcttgctgccctcc
-ttgctgctgaaggacaagctttttcttgaagataggatggataggatgtctcctatccat
-caGGAGATGCGATTATTGGCCTAGACTGGGCAGGGTCTCCACCTGGGCGACGGGTTGGGA
-GGCGGAAGTGAAGCTGGTGGCATGAACCATTCTCAGTGACCTTTCACCAGGGTGAGTGGG
-AAGTAGTTGGGAGCATCGAGGCCTCACTCTCCATCCTGAAGATGGAGCACAGACTGGCTG
-GCTGAGGCCGGGAGCTCATCACGGGATGGAGACAGATTGGCAGACAAAGAGGAGGCGGGC
-GGTTGGGGCTGGGTGCCCCTGGGGAGGAAGGCGGGGAGAGAGCGTAGGAGCAGGAGGAAA
-GAAGGCTGGGCTTATGTGCAGCCTCACAGACTGGGCCTGCAGAGTCTCCAGCTGGAGGTT
-GGGACTGGACCTTCCTCCTGAATGGGCAGGGAGGGAGGCTTGTTGGCCTAGCCCTCGGGG
-TTCTTGAAATAAATGAGGGAGGGCCTTGGGGGGTGGTAAATTGCTGAGGCTGTGATAAAC
-ATTCTCCCCTTCCCACAAAacacacacaggcacgtgtgcgtgcatacacatacacacaca
-cacCCTGGCCACACTGCTGTGCATATCTTACTGATTGTTGTCCTCTGTGAcagcagttct
-ccaagttgagtgcattggaaggatcagttaaaatgcagatttccaggcatttccatctct
-aaatgtagggtgtggcctgagaatgtgtatgtcttacaggatcctggttgatgctgatgc
-tgggggttctgggacacactttgagaaccactgCTCCATTGAGCAGCCtttcagtttggg
-tgcccctcggtgctggtgctgggagagagttaggagggcaagggggttagtgagggctgc
-tacctgtgaaacacaaagcaggagggaatggaattggccaggagagcctcagaccacagc
-ccgggcctgcagagtcaccctctaggggtctctggagtaaagattatccacagagaagcc
-ccacatggggcagaaatggccaggccctggtgcctctgctagctcagtctggctgggacg
-acctgggaagaacatggcctcagttccaaagccaaggcggctcctggaggagctgcagct
-ggaggctgtcaccttgctgccctccttgctgctgaaggacaagctttttcttgaagagag
-aCTGTGTCCCATCCACAACTGCCCCAGgcatctaccacatgccaggctctgtgcagagtg
-tttacctggatgaatgcagtttcagatcagagcaacctggccaagcaaatataatcgtcc
-ccatctaatagatggggaaaatgagggattaagtcatctgcccaGTGGTGGAGTCAAGAT
-TTATCCCCTCTTGTGCCTTAGcactcatccctgtcagcttccctgggtggtgaagaacat
-tagctccttttacacctgaggaatctgaggtgtggagaggtcagtgacttgcggtagagg
-tgggtagaggatccgggattccaaccctgctcatgccCCTCTTTTTAAATTTCAAGATGC
-TGTCCCTTGAGTACTTCTAGGGGGATGTAATGGCAGAAACTTGGGGCTGGAAGAAGCctc
-cctggcatttgacaggtgggtacactgaggcccagggaggcaaTCAGCCGTGCCTCAGTG
-CCTCTCTCTGCCCTGAAGGGGCTCCCTGTTGTGTGTGGGGTATAACCCCCCCGTAATTCA
-TGCATTCAGCACACACTGGTGGGCACCCATTGTGGGTCAGTCCCCCAAGCCAGAGTACTG
-TTGGTGAGTGGGAAGGCAGACGTGGGTGCAGAGGGTCTGTGCAGTGATTGGGGATGCACT
-GGGGATTGGAGGGGGCAGTTGACATGTGTGGGGTGCATGCAGGGAGGCTTCCTGGAGGAG
-ATAGTCTGAGAGAGGAGGAGGTGAGAAGGGTACTCAAGGATGAGAAAAGAACAGAAACAA
-AGGCTTGGAGGTGGGGGAAGTGATATTGCCTTTAGGAAATTGATAGAAAATCTGTAGCTG
-AGATAGTGTGGGGAAGGTATGGCCAGAAATGAGGTGGAAAGTGGAAGCTTGGCCTGGGGA
-AGTGGTGGAAAGCTCTGGACTTGAACCATGACCCTGGTTCTGTTCAAGGCAGGGCTACTC
-TCTGCAGGGCTCTGAATTCTCCAGATTTCCCTCTTACCTTTCCGAACTTCCTGCGGTGGC
-CAACCCCTAAAATAGCCCCCAGTAATCTTTGAGTCCTAAtaaccagtaggattttgtgga
-aatgacagagtgtgacttccaaggctggatcatagagtgtgttgcagcttctgccttggt
-ctctgggtttgatccccccggagaagccagctgccgggctgtgaagtcactcaagcagcc
-tgcagaaaggccacatggagagaaactgaggtcctgcctgcagccagcatggacttgcta
-gtcatatgactgagccaccttggaagtggatcctccagccccaggcaagccttcagatga
-cagcagcccagaatcacctagccaggcctgttctatattcctgacccagagaaactgaga
-cacactaaatgatcattgtgttgtacgtcactaagttttggggtcatttgccgtgcagca
-tcagataaTGAGGGCTTCTCTGTGCCCTTTCTTGGCTTCTTCTGTTGCTTCAGCTGCCAT
-CTGATGAAAGTCTGATGAAAACCAAAGGCCCTCCTCCAGAAAAGTTCAGGTACACCCAGA
-AAGAAATGGGGGTGCAATTTCAAAGGGATCACAGGCCATCTAAAACTAAACCTCAGACCT
-TCAGATCCCGGCCCCCAGTGGACATGGAACCTGAGTGAGGAATGAACAGTGTCTCAGTTG
-CTGAGCTGTGGGACATGGTGGCTGCTGCGGGGTCTTCAGCTTGGTCATGGCAGGGTGCCC
-ATGGCCTACATTCCTTTCTCCTCCTCTTCTCTGTGTCCTTGGCAGGCTGCCCCTGCAGAG
-GAGGACCGTGGGTGCCCAGACTGAGTAGGTAAGTTTAGCTCTAAGAGAACAGGTTGAGAG
-AGCCCATCGGTTGTGTACAGGCAACTTCTCAGCCAAGCTCTGCCAGTTGCTGGTGTTCAT
-ACTTGGCTGATGTCTCCACTTCAATACAGAGCCTGCAGGGGATGCAGGCTGTGAATGCAG
-TCCCTGGAACCAGACTGTGGGCTCagccatgagacctgggggatgtacttcaccttcctg
-acttgggcttttcaacttggaattggaggccagaagtccaccctgaagcgtggctgtggg
-gTGGAAACAGGCCCTCCAGCAGGGCAACAGCAGGGGCTCCTTGCCTGGCAGCCCCTCCGG
-TTCTTCAGCCCTTAGCCTCCCCTCTCTGGCTGTGGTCAGTGGCTGGCTCACCAGCCCCTC
-TTATGGCAGTCACTGCTCCAGAGTGCCAGGATTTCCCAGTATGGTGGCCAGGGCTGTCCG
-GAGCCCAGCACGCAGCTCAGGAAGCAGCTCAATGCAGGTGGGACGTCAGTGGGAGCAGAG
-GGCAGCCTCCCTCCCCAGACCCCTGAGGATGAGTCTGTCTCCCTCCTTGGTGCTAActtc
-tctctccttcttacatctccacttctttcttcttcctttatcttctctacctccttctct
-cttctaccttttcccttcttttccgctttttccttttttcatcttcattcttctcttttc
-tttcgtctttctcttcccctttcctcctctctttgtctagtccttcttccccctcacctc
-tccttttcctcctcttcCGTTTcataatgattaagagtatggcttctgatgtcagcctcc
-ctgggttcgaatccctgctgtgccacacactggctgcgtggcgttgggcaagccacttaa
-tttctctgtgctttggcttcctgagctgtacagtgggatgctaacagtgtctctcttgaa
-gggtGCCATGGGTGCCAGGTGAGCGTTAGCTGCTTATCATTCGTGTTCCTTCCTCCCCTC
-CTCTTCTTCTCCTCCTGGTCTTAGAAGTCTGTCTCCCTCCCTCTCTCCAAGCCCTGTGAC
-TCGCCTCTTACGTCTCTCTGCCCAGCATCTTGGGCCTGTCTCTGGCCCCTGCCCTGCTGC
-TTCATCCTCTCACTGCACGCACAGGAAGGAGAGCCCAGGCCTGGGGCCAGGTTGCCCCAT
-GAACAGTTGCTGAGCCAGGTGGCTGGAGCTCTTCCCTGGGGCCCCGCCCACGATGAGTTC
-AGGAGCTGCCTTTGTGCACCCGTGACAGCCTCTCCTGGCGCCTCATTTGGCAGAGCTGTG
-CATCTGGCCCAGTTACTGTGGTAGCCTTGGAAGGCAGAGTGCTCTGGGGCTTCCTTGTCA
-TCTACCTGCGTGACCCTGCATGAAGGGTATGCCCAGCCCTCAGCTGGACTGCCAGCCCCA
-CAGGCACCCTTGGTGCCCACCACACAGCAGGAGCTCATCCACAGATGGGCACAAATAGTG
-ATACCAGACAGTGCCTCtgagtccttgctgtgctaggcactgttctaagtgcaaattccg
-ttcatcttcacagcaacccttgcagtgggggctgttaaccccattttagagatgagcaaa
-ctgaaacacagaaaagcataggaaattgcccaaagttgaatgaatgaatgaatgaatACA
-ATGACAACTTAGGAAGGAAGGCATTTTACTGAAGagtgacaggcccacggtcacacagat
-agtaagtggaaaaaaatcagggctggaactcatgactccaaCATCACCTCCCACCTGTCC
-ATAAGCCCAGTGACAGCAAGGCTGGCACTCCCTCACACTTGGGGTTGAGGCCAGTAagag
-ctgcatttgtggaacactggccaaagcaaaccctctgtgctgagggcacttcagccagtg
-tctcaagcctgtctgcacttcttcttttttttttttttgagacagactctcactctgttg
-cccaggctggagtgcagtggcgcaatctcggctcactgaaacctctgcctccccggttca
-agccattctcctgcctcagcctcctgagtagctgggattacaggcacgtgccaccatgcc
-cggctaatttttgtatttttagtagagatggcattttgccatgttggccaggctggtctc
-aaactcctgacctcaggtgatctgcctgccttggcctcccaaagtgctgggattacaggc
-gtgagacaccatgcccagtcaactgaagttctttgagagtactgttcccattttccagat
-gaggagcctgaggcccagcgaaggcgagcaacatggccaaggtcacacagccagtaggtg
-TGATTCCAAAGTCCCACTTTCTGTCTTCCATCAGGTAGTACTATCTGCCTTCCACTATGG
-AGGGAATGTCCCATTGGGAGACGCCTAGGATGGGGGCTAAAGAAAGACAGGCAGGCCCGA
-CACCAGCCTCTCTCTCTTCTGTCTGCTGTCAACACTATATCTTGGTGCCATTCTGCCCAC
-TATTTGTAGAGAGGCCTGGGTACCAGCCTCTTCACTTTGTCCTGGAGGCCAGGCCAGGCA
-AGGATCACTGTACCCACTTttctttccttccttccttccctccctccctctctttctgcc
-ttTTTATTAAGGTATAAACCACACAAAATAAAGTACATAGagccaggtgtggtggctcac
-gcctgtaatcccagcactttgggaggccgaggGACCCCCCAGCCAAAGCCTGGAGCTCAG
-AACACAAATGCTCCCCTTGTTGAGAGTGGGGAAAAAAATCTCTTTTCAGGTGCCAGCCTT
-AAAAAGAAAGAACAAAAAAGGTAACTCACAGATGACCGTGATATGTGACGTGCATCTGAG
-CCCTTCACACAACCACAGAACTAACTGTCTGCAGCTGCCACAACAGCTGACCCCTCTGCC
-AGGCAGAGTTTGCTATCAACCAGTAACAGCTCCCAGAGGTTTTGTTATCCCTCTGTAGAA
-ATGGAGGCTTGAggccaggtgcagtggctcatgcctgtaatcccagtactttgggaggct
-gaggcaggcggataacctgaggtcgggagttcgagatcagcctgaccactatggagaaac
-cctgtttctactaaaaacaaaaaattagccaggcgtggtggcgcatgcctgtaatcccag
-ctaccagggaggctgaggcaggagaatcacttgaacctgggaggcggaggttgtggtgag
-ccgagatcgtgccattgcactccagcctgggcaacaagagcgaaagtccatctcaaaaaa
-aaaaaaaaaaaaaaaaaaagaaaTGAAGTCTTGATTGACTGAAGTAGGAGGAGCCAGCGC
-ACAGGCTTTGGAGGCAGAAGAGCTGGGACCAGCTCTGGAGGTTTGGGAACATGACTCCAC
-CTCCCCGAGCCTCGTACTGCTGACCAGATTGCTtttgcaagcattgtactacatcttcac
-acaatgctgggaggcagctgttaccaaccccatcttacagccggagaccctgaggctcag
-ggaggtaagggatgtgtgcagagacatgcaCAAAGTGGAAAAATGTGAAAACAGACCTCA
-TCGTGCAGTGTTATTGTGCAATTTGAATTGAATGAGGGATAAGAATGTGAATGGAtgcag
-tccacagtaggtgcttaagtcttgcatggggtctaatagccggtgagtggcaaaaggaga
-acttgtacccagatctgcctcaccccagagcccacctctgagcctctTCATCCATGGGAA
-GCCATCAtcagcatggtgcctggcaccgagtgagcctttgagaaagggtaactGGgtcaa
-aaattattttcagaaagttgaaaacatggatcttatacaaatgtatagtgagcacatgtc
-aaagtgttatttaactcattaaggatggaaccggtaggatggcaaagctgactcaaagga
-ggataaaatggcaaagttagctacgacataggttaatgtcttacagggcaccaaaaccat
-aagctttagcgttatttcttctacaggtcagaaatcatttgcaactcgtgcactttttac
-aagttaccaggtaactttgcttaggatcaggtgacccaggctcatcggacactgccttcg
-cttgatattgaaagggcacacagacaccctttttgtcttatttccaagttttggatattt
-tttctttaCAGTTATTATCATTCCACTTCTCTCTGACGAAAGGCTGTTCACAGGCCTCAC
-AGGTTCCCAGGAGCCCAGGGACACGCAGACCCCACCCCACCCATTCACACAAGGACTCAA
-GGACAGAGCCTCTACCCACAGATGAACTTGGGTGGTGCACAGGCACACGAGCTTGATGGC
-AGGGCACGCCCAGGCTGAAGGGGCCGGGTGGGAGCTAAAACGTGTGGTCTATGGTAGCCC
-AGCCTCTTTCCTCAGCAACCACGCCATGAAAAGATCCCTACATTATTTGTCAGGTAAAAT
-AAAGCGACCCGTAGCTAGTGGCGCGAGATTCTATCCAGCTTAATACGTGTGTATGTGCAG
-ACACATTTATGAGTGTGCATGCAGAGAAAACTCTCTGGGGAAATACCCCCTGAACTGACA
-GCCATGGGGAGTGAGGGTGAAGCGGAAACAATCTTGTAAAAGAAATTCAAAAACCGAAGC
-CCACTGCATTGTTTAAATTGGTTACGTCCAACTTGTTTTCCTGTGTTATCTGTCGCCTGT
-TAATACACACACACAAACACACACATAATAGAATGGGATAGAatatctatatatatctaa
-tatatataatatctaatatatataatatctaatatatataatatctaatatatataatat
-ctaatatatataatatatatatagagagagagagagagcgagagagagagagagagggag
-agacggagtttcgctcttgttgcccagactggagtgcaatggcgcgatctcggctcaccg
-caacctccgcctcccggcttcaagcgattctcctgcctcagcctcccgagtagctgggat
-tacaggcgtgcgccaccacgcctggctaaattttttttttttttttttaatttttagtag
-agacggggtttctccgtgttggccaggctggtctcgatctcccgacctcaggtgatccgc
-ccgcctcgacctcccaaagtgctgggattacaggcgggagccaccgcgcccggcGGGATA
-TTATATTTCCATAAGGCCCTCCGGGGGCCTGGGAACGGACTGGTGCTTGCGTGCGGGGCT
-TTTCCACTGGTTCCCTTCCGTACTCGGGCTTCCCCCGCTGTTGTTACTCCCTCAACGGGA
-ACACAACTCCACCGCCGCCTCCGGGACACACCCCCGCCGCGTGGGCCGGGGTCCGGGACG
-CGCGCTCAGCTCGGCCCCGCGGGGGCGGCGCAGGAGGGAAGGGGGTGCGGACCCCGGAGG
-CGCCGCAGGAAGCCCTCGCCCACCCTTCCCGGCCGGGCCGGGTCCGCAGCTGACGGTGGG
-GGTGGGGAGCAGACGGGCGGGGCGCCGGCCGGCTTGGGGGTCCCCTGGTCCCGTCCAGGG
-GGCTCGGGCCGACTCCGGGCCAGCTGCGGAGGCGGGGGAGGGGACCCCGCTTTCCATGGC
-AGTGCCGAGGCGGCGCGCACAAAGGCGCCGCGATCAGCGCTTCATCGGTTCGAGTCAATT
-ATCTGAGGCGCGGAGGCGGCGGGCGGGGCGAGGCGATTCCCCGGTGGGGCTGCGGAGCGC
-GGCGCCGAGACTCAGAGGAGGGGGCGCTGGGGAAGCGGCTTCTCCGTCTCCTGCTCCGCC
-CCGGGCTTCGTGGCGAGGCGCCGTCGCCCCCTGGTGGGGCCTCATCCATTCCTCGCTCAC
-TCGCTCGTTCACCTTTTTCTCAACCTTACAGCGGGTGGCTCTACGGTACGAGCTGAGGGT
-GAAGTGCTGAGAACAGGGCAAGCGGGCCGTACCTTTAAATGCCCTGTCGGGAGCTGGGCC
-CCTCTGAGTGGCCAACCTCACCAGGAAAGGGCGCTCAGCCTCGCGCTGCAGATGGACTTG
-GAAGCAGACCGTCAGAATGCAGCCCTCCCTGCACGTGATAGAGTAAGGGCCGCACAGGGG
-ATGAGGGCCCGGGGAGGCCCTTCGGGAGAGGAAGAGTCCCAGATGGCTCTCTGGAGGAAG
-TCTGGCCTAAGATGACCAGGTGAAGGGGTGGGGGTCCAGGGAGATGAGGGCGTTGCAGGT
-AGAGGTTTCAGCTATTGCAAAGGGGTTGCAGTACGGGCAAGTAAGGTGCACTCTGGGGAG
-AGTAACCTGTACTTACTGTGCGAGGGGAAGGGAGGTGATCAGTGAGGTAGGTAAGTGGGC
-CAGGGCCAGATGGCACAGGGCCACCTGCAAGCGTGGGCTGAGGGTGGGTTGTCAGGTCGT
-TTCATCATTTCCAGTTTATCCTTCTCCCCTTTAGATTTGGAGAGGATTTGGctgccctca
-cccttgtaagggtttaggcatcattcgcccttgactcctgtccagttgtctcactggtct
-ccctgtatcccttattttgcccttcaatctgcctgcacccatcctccaaaatgacctttt
-taaaagcaaagctcggtggcactacttttcaaaatcACAAATGCACAGGATCTGTAACCT
-GCTGGTTGCACATGACAGAAACCGCATAATAATCATGGGTTAggccgggtgtggtggctc
-aagcctgtaatcccagcactttgggagcctgaggcaagcggatcacttgagatcaggagt
-tcgagaccaggctggccaatatggtgaaaccctgtctctactaaaatacaaaactttgct
-gggcgtggtggtgtacaccagctactcaggaggctgaagcacgaggagaatcgcttgaac
-ccaggaggcagaggctgcagcgggctgagatcacaccactgcactccagcctaggtgaca
-gagcgaggctccttctaaaaaaaaaaagaaaataaaaaaaaaGTCCTGGTGTTAGAGGCA
-TTTTTCTTTtcctcctcctcctcctcctgctcctcctcctcctcctcttcttcttcttct
-tttctgagacagagtctccctttgtcacccaggctggagtgcaatggtgtgatcttggct
-cactgcaacctccacctcttgggttcaagcgattcttctgcctcagcctccagctaattt
-ttgtatttttagtagacatggggtttcaccatgttagccaggctggtcttgaactcctga
-cctcaggtgatccacccgccttggcctcccaaagtgctaggattacaggtgtgagccacc
-acactcagccAatagaggcatttttctgtcatgtaaataaagtctaaagcaggcagtcta
-aaactggcatggtgctctacggttcaggaacctaaactccttttgtcttattatgctacc
-ccctcagtacatggtttccacttcatggcccaacatggctgctcaaacagcagccctcac
-atctgcatccccagatggagagtctttttttttttttgagatggagtctccctctgtcac
-ccagcctggagtgcagtggcctgatcttcgctcactggaatctctgcctcccaggttcaa
-gtgattcccctgctcagcctcctgagtagctgggaccacaggcacgtgccaccacacctg
-gctaattttttgtatttttagtagagatggggtttcactgtgttagccaggatggtctcg
-atctcctgaccttgtgatccacccacctcggcctcccaaagtgctggggttacaggtgtg
-agccaccgcgcccagcccccagatggagagtcttttagtcattagaaaggagaaaggagc
-caaggagggagggaggttcccttaaagactctttcggaagtcacatacaatcttcttgtt
-gatgttccattggctaaacttgatcacatcactacactaagctacaaaggaggctgagaa
-atatgatctgtgttctaggcaccatgtgtccagatgaaaattgaggctcttatttcaaag
-aaaaagTTCAGTCCATggccaggcgtggtggctcatacctgtaatcccagcactttggga
-ggccgaggctagtggatcacctgaggtcaggagttcgagaccagcctgggtaacatggaa
-aaaccccgtctctactaaaaatacaaaaattagccgggtgtggtggcatgtgcctgtagt
-cccagctgctcaggaggctgaggcaggaaaattgcttgaatttgggaggcacaggttgca
-gtgagctgagatcacgccactgcactccagcctgggtgacagagcagaactctgtctcaa
-aaaaaaaaGTATCAGAAAAAGCGCAGTCTGGATATTGGGAAATGACCATCAGTCTATGCA
-TGctcaggagttccatgtctagcagtgtgtcctataggtttgcttaacccatgtgacatt
-tgacacgtttacaaggttattcactgcagcattgtgacagcaaaagactggaaacaacct
-aagtgtcctgtaataggggactggttaaacaaattatgggacatttatacaatggagaat
-gatggccacaaacacacatgaggaaactctcaatgcagtgatatgaaatggtatttaaga
-tgtTTcactttggaaaacagtttggcagtttcttatagagttaaacatacatctctccta
-tgacccagcaagttcacctctaggtttttgctcaaaataaaaatatatatgtatatatag
-ctccacaaggacttctatgcaaatgttcaacagagtttaacatgtgatagacaacaattg
-gaagtgacccaagatcgaacagccaatgaatggataaactggtgagtcaaatattacact
-ggagtttaaatgagtgatccaatgtctgcaaccacatggatgaatctcaaaacatgctga
-atgaaaacaagctggatacaaaaaatagcatgttgtaatgatgccgtttatatgaaattc
-tagaagaggcaaaacagaccaatctatgatgacagaaagcagagcagtggctgcctctgg
-ggtggagggatggactgggaaggagcataaaagaatttcttgggatgctggaaatgttct
-gtatcatgattggggtgttgattacacaggtgcatTTCACTGCATGTAAATTATACCTTG
-ATATTTTTAAAAAGCAGGGTGCAGAACAATGTTTAAATTATGGAATCCGGTATGTTTAAA
-AAGCAAGGAAATTTGCTTGTATCTGCATTGACTGTCTAGAAGAGACTTGTAATAGTGATT
-GTCGGTGGGAGAGGAACTGGGTAGCTGGGGGCTGGGGAAAAGGGACACTTTGGGCCATAC
-CCTGTTATACCTGTTGAATCTTAAACCAGTTGAATGTACTACCTAATTAAAAACTAAAAC
-TGAAAAGATCAGTTAGATGCACACGTGACATCACCACATTCATGTTTTAAATCTCCTAAT
-GGCTCTTCCCGGCAATCTGGACGAAGTTCAGACTCTGAGCTGTCCTGGCCTTATGTGGCC
-CCACTCAGGCAGCATCCTCTCCAACCACTTTTCTGTTCCCTGCAGAGACAGCTCAGTGCC
-TGGCTCCCTCTGGTTGGCCTAAGTGCATATGTGCCATTCCCTGAGTGCTCAGCTCCTCGG
-TGAATTCTCCCCAGCCCCCTGCCTGAGTTGGTCCCTCGGGTCTCACTGGACCTGCTGCAC
-TTTGCCTTCCCCCTTCCTCATCTATCAGATCAACACGTGTTTCCCAGAGCTCTCTGTGAG
-CTGGACCCCAGAGTCCTGGAGATGTGTGGGAGCCACTTTTATGGGGGAACCTGCTTCCTT
-GTTTCTGCTTCAGACAGCAGGCTTCTCCTGCCCTGAGACTCCCAGCAGCGTCTCCTCTTC
-CCAGGCCCAGATCTGGCCTGGGGTAGAAACTTTGATAAAATGTGCTGTCTTTAAGTTAAA
-TATGGCTCCATAAAGAATGCATTCCATGacaagaaccaacagagccctggtttcttagaa
-gatacagagaaaacacactgttgtgggagaattgtgtctgccaaaaagatacatcccagc
-tctaaccctgggacctgtgattgtgaccttatttggaaacagggtttaggcagatgtagt
-caggtcagggtgaggtaatactggattagagtgggctactccaatgactggtgcccttaa
-agagggaaacagacagaggagaacaccacgtgaccacagaggcgaagatgggagtgatgc
-atccacaagccaaagaaggccaaggaggcttgcagtcataaaagctggggagaagcgagg
-aagtgtcctcccttagggctttcagagagagcatggccttgccagcaccttgatttcaga
-cttttagcctccagcactgtgagaatacatttcagttgtcttaacctacctggtttgtgg
-ttatttgttctttttttaaattttttatttatttatttatttttgagacagagtctcact
-ctgtcacccaggctggagtgcaatggtgtgatcttggctcagtgtgacttccaccttctg
-agttcaagtgattctcctgcctcaggctctggagtagctgggattacaggcacctgccac
-cacacctggctaatttttgtattttcaatagagacgtggttccactgggttggccaggct
-ggttttgaactcctggtctcaactgatccgcctgtcttggcctcccaaagtgctgagatc
-acaggcatgagctaccgcacctggcctgtggttgttaactgtagtcccaggaaatgaata
-cacacacaaaaccagttaatacctaagacaattccagctagtggcaagtgctttggaaaa
-acaaaacaaaacaaaacaaaacaaaacaggtgagaagggcgtgggatagagagggactgg
-gaacggtgccacattagccagggtggtcagggaagccctcttggaggaggaggcatttca
-gtggagaGGAGAAGCCCAGCATGTGAGGACCAGGCAGAGGTGCTGGTGAGGGGGCACTTG
-GTGGGCGTGAAAGCTACTGGATGCAGCTCTGACGATGGAGGATACCTGACTGGGATTTTG
-GAGGAAGTCTCCAGGAATGAACCGGGAAGGGGCTATCCTCTCTTTGCCTCTGCAGGTCTC
-AGAACCTGCTGCATGGCTGCTGCAGGCTGTCCCTCGGCCTAGGCCGGCTGGCAGCCGATG
-AAGGAGGCCAGCCTCGCAGCTGACATGCTGCTCTCTAATTGTGATTAACTACCAAGTCCT
-CTCCTGCTCCGGCCTGAGGCCGCTGGTGTGACAGCTGCAGAGTGAATCAATGAGGCCAGG
-AAGGGGTTAATGGGCAGCCCCTCCATCTGAGCCCTTCAGACAATAAGGGGAGGTGGGGAG
-GCCTCTGGTGGGGGTGTGTGGCATCAGCTGGGGTGAGTGAATGGAGGGGACAGAGGCCTT
-GTCCCTGGGGACAGGGTGTGAGTGCTCTGTGGGGAGAGGGGTCAGACCCCCCTCCCATTA
-TTTTCATCCACCTCCATCGTCCTCTCCCCTCCCCCACCCAGCCAGAGCATCCCAGACAAC
-TGCCCTCTTGGCTCCAAAGTGTGCAGCATCTTCAGCCTTACGGAATTCTGAAGCAGAAAT
-TCTAAAAGCCAAAGAACTGCAGAATCGTGACATGTCACCGCTGTGGGAGAGTCCGTCTAG
-TCCTGTCATTCTGAAACTTTCTTTTGCAGTGGAACCCACAACTCCCACCCCAGCTCATTT
-CCCCCCAAAATAATAGTGCATTGATAACATTGAGAACAGACCCTGGTACCAGCCGGCCTC
-ATTCATCCTTCATTCAGCCCCGGTTCTACCACGTACAACTAGGGTAACTTGGGGGTATAA
-TGCATAGTTTATAGgtgtgtgtgtgtgtgtgtgtgtgtgtgtCTTCCCtagagacagagt
-cttgctatattgcccaggctggtcttgaactcctgggcacatgcagttctccagccttgg
-ccttctgagtggctggCTCACACCACCGTATTCAGTagttccgtaggttttgacaagttt
-gtaagttatgtaaccaccaccacaattaatatatagaacatttccatcgctgaaaaatgt
-tgcctcatgccccttgtagtcaatacccttcccTGTGTTACCTGATATGGTAGCATGAAT
-AAAGGTCATCTAGAGTTAGTGACTCTAggccgggcagggtggctcatacctataatccca
-gcattttgggacgccaaggtgggtggatcacttgaggccaggagtttgagaccagcctag
-ccaacatgacaaaaacccatctctactaaaaatacaaaaatgagccaggtgtggtgatgc
-acgcctataatcccagctactccggaggctgaggcaggagaattgcttgaacccaggagc
-tggaagttgcagtgatccgagatcacatgactgcactccagcctgggcaacagcaaggct
-ccgtctcaaaaaaataaaaaaaataaaaaaaTTAGTGAttctaatccttgaactgtgtaa
-atgttaccttatttggataaaggatctttgcagatgtaattaagaggcagaggttggagt
-gatgtggcccaaagcaaagaacaccaggaggctcccagaaccagaaggggcaaggaatgg
-attctgctctagagcctccagaggtagagtggctctgccaacaccttgatttcaaatgcc
-tggcttcagaactgaaagagaatacacttctgttgttttaagcctctcagtgtgtggtac
-ttttttacagtagtctttacaaacaaatatacctagcaaccaccatgccttgttttctat
-ctgtataagttttgcctttgcaaggatgttacatagacagaatcctgcagtatgaagctt
-ttgtgagtttggcttctttcactcagcataacacagttgagatgcatccatgctgttgca
-tgcatcagaagtctgttccttttggatgctgagtagtatttcactgctggatacaccaca
-gcttatccattcaccagttgaaaggcatttgggtcactcctaattgggagcattataaat
-aatgctgctatgaacatgtgtgtatagatctctgtgtggacatacactgtcatttctcca
-gagtagataccctggagtagaattactgggtcatattgtaagtgtatttataattttatc
-agaaattattacccgggcatggtggcatgcacctatagtgccagctacttgggaggctga
-ggcaggagaatcccttgaacccagtaggtggaggttgtagtgagccgagatcatgccact
-gcactccagcctgggcaacagagtaagactctgtctaaaaaaacccaaaaaaccaaagaa
-caaaaCTACAAAGAATCTGATgtggctcatgcctgtaatcccagcactttgggaggccga
-ggttggaggattgctggagctcaggagtctgagaccagcctgggcaacatggcaaaaccc
-gatctccactaaaagtacaaaaattagttgggcgtgatggtgagtgcctgtagtcccagg
-tacttgggaggctggggtaggaggatcacttgagggtgggaggcggaggttgcagtgagg
-tgagattgtgccaatgcactctagcctgggtgacaaagtgagaccctgcctaaaaaaaac
-cccaaaaaacagaaagaaactgacaaactgttttccagtgtagctataccattttgcatt
-ctctccagcaCTTAGTATTGTCAGGTTTTTAAAAATTTAGATATTTTAggccaggcgctg
-tggcttatgcctgtaatcccagcactttgggaggcagaggtgggcggatcacttgaggtc
-aggagttcgagacgagcttgaccaacagggagaaccagatacttgggaggttgaggcagg
-agaattgcttgaacctgggaggcagaggttgcagtgagctgagatcacaccattgcactc
-cagccctccagcctgggcatcaagagtgaaactctgtctcaaaaaaaaaaaaaaaTTAGA
-TATTTtaataggtatgtaacaatcatagggttattgtgagaatgaaatgaacatatctga
-gaatactgcctagcacatggCTCCTGGCTTGGAAGGGTAAGCTCCTCTTATTGCAATCAC
-TATGGGGTTATGTCCTGTCCAGGACAAAACCAGAGGTGAAAACTCAAAAAAAAACTCAGG
-TGGGCCAGGAGGAGGCTGTGGGGACCAGTGAGCTCATGTCCCATCttgaaggtcaaggtc
-ccgggaagcagctcctgagatggaaatctgcatgtgggtggttttccaggtagtgctctt
-aggatcttggaggagccagggaagcaggctcgggcagttgcaatagaggccttgaccagt
-cccatcaggagctgggccagcccttaggacatgtcacagcctgagacagggaggtcatgc
-ctctgtactctgcaagatcagactttggagtggttgcccacaggagagatgttattaata
-tcttgggtgaagcagcccttttaagctgGTGCCTTGATCCGGGTGATGGCTTTGAGGTgg
-aaaacaagcctgagtggtttcagctttcaacttttcaagagaagctatgtatctagattt
-tgatgttaactctccaaacttttttaaaatgctggaaattctagacttttcaaacctgct
-gtgaggggctcacatgccaggcacaagggctggagggggcctgaggctgcctgtCGATGC
-CCCTTGATATAAAACCAggctgggtgcagtgccttatgcctgtaatcccagcacttcggg
-aggccgaggtgggtggatcacttgaggtcaggagttcgagaccagcatggccaaagtggt
-aaaaccccgtctctactaaaaaatacaaaataataataataataataataataataataa
-taattagctgggtgtggtggctcacccctgtaatcccagctactcgggaggctgaagcag
-gagaattgcttgaacccgggaggcggaggttgcagtgagccgagatcgcgccattgcact
-ccagcctgggcaacaagagcaaaactctgtctcaaaaacaaaacaaaacaaaaacaaaaa
-caaaaaAGGAAAACCAAACAAAAAAACCCCCAAAACCTGCTGTGTCATCTGACATCACGC
-TAGTgtctggttgccgcactggagaggacaccccatggggcaggaatctttgggttttga
-tctccaccacatccccagcatgtagggcagggtccagGCCTGGATGCAGCACGAGAGAAG
-GAACGCAGGGCCCGAATGAGTAATTTGCCTCAGTGTGCAGGTCATTTAATTGCAAAGAGA
-GGAAAAACGACAACCAAaaacaaccaaatgaaaaaatgagcaaaggatttgaatagacat
-ttctccaaagatgtacaagtggccaataaacagaggaaaagatgctcagcgtcagtaatc
-attagggagatgcaaatcagaattgcaagcacgagataccgcttcacacctattaggatg
-cctattaaaaaacaaaaacaaaaaACAAAACAAAACAAAAAAATCAggcagagtgctgtg
-actcacacctgtaatcccagcactttgagaggctgaggtgggcggatcacctgaggcagg
-gagttcgagactagcctgaccaacatggagaaatcccgtctctactaaaagtacaaaatt
-agccgggcgtggtggcgcctgcctgtaatcccagctactcgggaggctgaggcaggagaa
-tcgcttgaacccaggaggtggaggttgcagtgagccgagaccacgccattgcactccagc
-ctgagcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaaaaaaaaaaaTCGCAGA
-Tctgactgtgtgaccttgggcaagttgcttgacctctcagtgcctccatttcctcctctg
-taacgtgagagtaaaaatactactcatacctacctcgtagggctgtcatgaggactgaat
-aagtgcataggtacagacatgcttaggacagtatcagcacatgcaggaattacatgggag
-ttggctgttaATATTATTACAGGAGTggatcaaatccatctctgccatggacttgctgtg
-tgacctagtgcaggtcactttgcctctcttggtccagttttctcacttgtaaaatgggac
-catactgccactctccatagggcaagtgtgcggattcgaggagctcatatgtgaaaggcC
-TCCTTCAGGCGCAAGGTTGGTCCTTGGTTATGCACGTATGTGAGCCTCTTGGCGTGCCTT
-CATATGTGGGGCATAGGCAAGCACTCAAGTGGCCTGGACTCCTATCTCGGCTCTCAATGT
-CCCCGCTTCCTGGCCTGGGATCAGCAGGACCTCAGTGGATCCACCATCCAGGCACATCCC
-TTTCTTTCCCTGCTTTTTTCCTGCTTCTTGGGCGGCACCACCACCTACTGGCCTAAAGCT
-ACATTGCAGCCAATGTGCACAGCGGGGCGGAGGGAAGGGAATATGGCCTTGGGCAGCTGC
-TGTGCGCAGAATATTTACCTCTGTACACGCTTAGGGTGCTGAGGCTTAGGGAGCTCACAC
-GGAGAGAGCCAGCTGTGAAGCTGGGGTTAGAATCCCTGTCTCCCTTTCACCTCACTCCAA
-ACACCCTCTTAGAATGGGAACTCAGTTCAGGTTCTGCCTTGGGCCCTAGACGATCCACCC
-CTCCCTTCTGAGCAGGGAGCCAGGAGCTGAAGTCCAGGGTCCTTGGAAGTATGTCAGGGT
-TGTCCCCCCAGGGTCCTGATTACAGAAGAAAGAACACTGGACTCAGAGTCCAGAGGTTGG
-GGGTCTAGCTTTGCCTTCCCTATCCCCAACTATCAGCAAAACAGCCTTTGGAAAATCCTC
-ACCCATTTATTCTAGCACTTGTCATTTCGAAATATATTTACTGTGGGAGAGCATTTAATG
-TGAGTGTTAGGTTCTAACGCAAGGAGAAAATTATAAAAATAAACAAAAACTTTTAAAGAA
-CTCCTAAAAATCCTTTAAGTCACTCATAAAGTATAATATGGGCAGTTTTCTAAATATAGT
-CCTTTGCAGCAATAAATGCACGGACCATAAAGAACAGCAGTATATGGTGGTGATTGCATG
-CATTTGCGAACTGTAATTTTAGGTTCTGTTCTCTCTCAGGGGTGTGTGGGATTCCGAGCT
-GTGGATCCACACCCCCACATCTCTCTCACAGCTGGGATCATGTCCAGGCAGAATCGCCCA
-CATTGTGTACATCATTCTCCCTTCTCTCTCTCTTTCTGAGCGCACATAGCTGCATTTCCG
-AAGTTACATAATaaaaacagctaacatttattgagctttcattatgtattaggcctgctc
-gcagccctttgctcacgcattaattcattaattcagataatcctcctaagaatgttatga
-ggtaggtatattattatctcttctctttacagatgaggaaactgaggcactgaatggtta
-agtaactagcccaaggtcaaatagTGTACCACCCAGCCCGAAGGCGTTCACCTTgttccc
-gggtaggatcgcagaactggttaagctaggttaccgatccgggtggtgtcagctgatccc
-tcagctgctgtagtgcaagatctgcaaaatatctcaagcactgatcttaggttttgcaat
-agtgacactgtccccaggaacaacttggggaggttcagacccttgctgtcagaggctgca
-cagcccctaaaccttgatttctaatcttgtagctaatttgttagtcttacaaaggcagac
-tggtccccgggcaagaagtggatcttttcaggaaagggctattgtcataatttcctcagt
-tacaatttttgcaaaggtggtttcaatagccagtgagtggtacagcctgaatttgaaggc
-aggaagtccgggacgagaacccacactcttgactggcatactTGCCACCTGAATGGAGGC
-TCCATAGAGCCACGCGTGCATGCTTGTGTACCTGTTGTCAGCCCGCAAGCTCCGTTAGGC
-AGGCTAGAACCTGATCCAGGTTAACTTTGCATCCTTAGTGCTGGTTCTTTCCATCCAGGG
-CCCCACTCAGGGTATATGCTCAGTGACTGTTGTACAAATGCATAAAGCTCAGTTTGCATA
-AAGCTCACTTCAGCTTCTGTATCTGTAAGACAAGAATCAGagccaggcacagtggttcat
-gcctataatcacagaactttgggaggctgaggcgggcggatcacgaggtcaggagttcca
-ggccagcctgtccaatatggtgaaaccccgtctgtagtaaaaatacaaaaattagccagg
-tgtggtggcacgcatctgtaatcccagatactcgggaggctgaggcagaagaatcacttg
-aacctgggaggcagagtttgcagtgagccgagatcatgccactgcactccagcctgggcg
-acagagcgagactccatctcaaaaaaaaaaaaaaaaaaagaaTCGAAATCAGCTCTTCAG
-ATTGCTGGAGGCTCCGACAAGCCCATTGGTGGGAAAATTCTCTTTAAAGACACTGATGTG
-ggctgggcacaatgactcatcctgtaatcccaacactttgggaggccaaggtggatggat
-cactagaggtcaggagtttgagaccagcctagccaacatggtgcaaccttgtctctacta
-aaaatacaaaaaattagccaggtgtggtgacatgaacccataatcccagctactcgggag
-gctgagatgggagaatcgcttgaacccaggaggcggaggttgcagtgagccaagattgca
-catctgcactccagcctgggcgacagagcaagactccatctgaaaacaaacaaacaaaca
-aaaCACtgatatagtttggatttgtttcccctcccaaatctcaggtggggttgtaatccc
-cagtgttggaaaaggggcctggtgggaggtgattggatcttgggggcaaacatccccctt
-gctgttcttgtgatagtgaatggattcttacgagatctgcttgtttaaaagtgtgtggca
-cctcctcctaccccgctccagccatgtagaacgtgcctgcctccccttcgccttctgcca
-tgattgtaagtttcctgaggcctccccagtcatgcttcctgtacagcctgcagaaccgtg
-agccaattaaacttctttttttaaatgaattacccagtctcagttcattataccaatgtg
-agaacaaacgaatacaGACACTAAATTCTCCTTTGCCCACCTCCTGCTTGGTCCCTTCTT
-GAATTTTCAAGCTGCTCAACCAAGTggcctgcaccagcttgggagagctaatcgtgtgta
-tctgtacccaactctacattcagtaacatcatgtttgtagctcgaaatcagcaatggtga
-gtatttacactatggcaattggcaaatgcttcaaacaggagttttcccctctagagatgt
-taaacgtttgccagGAGGAAATCAATCCTCTAATGGCCACCTTcaaggaggcaacacagt
-ggagtgatcatgcttgttggctctggagccagaacacctgggttcaaagtccagctctat
-cacttaccagctgtgtgaccttgttcagttacttaacctctctgagcctcattagtctca
-ttcatgaTTACGTATTTCATTGGGGACTCAATGCCATCTTCCATATAAGTGCTCTCTCAA
-TTAATGTTATATATTAATATTATCAATCAGCTTAAGAGGTGGGGAAACTTTCTTGTTTTC
-CATCCTAGGAAAGGGAGTGCTGAGGACAGGACTTGCAGTGTCAAAAAGGAACCTCAAAAA
-CGGCAATGTGTAACTGCAGGTCTGGGCCATTTTTGAGGGTCTCTTGAGCATTGGCAGACC
-AGATCTTTATGCCAACACAGGTTGTGCGTGTGGGGGTTAGAGGAGGAGAGGCCTTCTCAG
-TTCTTTGCAGGAAAGGCTACTGTTAGCTCTAGAGCCCAGAACAGATTTAGGGGGAGAGAT
-GATCTAACCAAACTTTCCCTCTGCCCTCGGCTTGCCAGTCTTCTCGCTAGTGAACACTCC
-CAGTGTGAGGTAGAGGGTTCCCTGTTCCACCTCCTTCCTCCCTCTGTAGAGGAGGTATGC
-ATTGGGGCAGGTGTGTGTAAGGCCCTCCTGGGGTACCCCTCCAGGGAATCTTCCCATCTT
-CTCCAGTACTGCCCCATCTGACATCCTGCCTGAAGCCACAGGTTTCCCTTGCAATCACTA
-AAGAAGCAGGAGGGAACCAGCAGAACTCCCTGCCCATGTGCACAGGAGGTGATCCAGAAA
-CTTCAAGGGGAAAAATCCTGCTCTCCACCCCAGCAGGCATTGATTTTTGGCTGCGAAGAT
-TACAGtctctctctctctctctctctctctctctctctctctctctctcacacacacaca
-cacacacacacacacacacTCCTGTGTGCCAGGAGGTTCCTAGAAGGTCCTCACTCCTCG
-CACTCAGGTGCTCCAGGGCTAGCCCACTCCTGGGAGGTGCCCACAACTGACCACGATGCC
-CACAAGACTGTGGGAAGGGTTGCCCCATGTGCCTTCGTGCCCCTCCCACTGGATCCCAAC
-gaaggctcttttcacaacaggaatcagagcatgtcactcccaacctgcctaaaccctcca
-atggctcccaccacttttgatcaagacctaaatcctttctgagtccaccccatccttaca
-gggtctaaccttgcttccatccctgtcttcaccccttattcctccctctgggctcctctt
-caggcccttgaggtgccaagctcactcctgccctgggcctttgctgctgctgtccccttg
-gcctggagcactcttcccTGTCCTTTTTGCCCATGTGAGGCTGAGAGGCAGACGGAATCA
-TGGTTGCTAGTGTAGAgaggccacactactggagtttgtatttcagttctgtcaccttga
-actgggtgacctcacccatctctgcctccctttcctccctctatacagtgggaaagataa
-tagcacctacatcttagggtgttgtgagactgattgagataatCTGTATGGTTTTtggca
-gtttctgaaatgcactgtaaactgtctggttctcctcccatcggaaggtgagaatctgac
-tgctccccttgactctgggtgagagggtagggcaacagcaatgctccatgatttcagagg
-ctgggtcataaaaacggtctgcaggggattcacttccagaacagtggagtgaggaacact
-gcagactgctttctggtgaaaacaactgatgatgatttctaaaaaacaatcatttgaagt
-ctctggaaattgtcctaagagcatacagcaagtgaagaaacacttattcaagaaaatcta
-ctaaatctaggtaagaacagtgagtttgtagaacttgagacacaatccactctctttctc
-ccctccattccattttactgttatggaaactcaactgtgagcagccagggccaagaagat
-gggagtcatttccccccaagctcctagtcgatggggtacagcatctccccaggaagggaa
-ggctgccagcatttgtcatcctcccaacagctatatcttacagaggctaaactccaggta
-ggtgtggctgggagactgggatcttccttcctctacccagtccccactcatagggtggtg
-gccacgccaagtgcagcaggctaaaaatattgaagccccagttgcttttgtcttagctta
-cttgttaaagcagaggttccatgcctggagatgcaagctgagaagaccagagactaagaa
-tactgccccaactcagccctgctcataaagcaagaaggttactctgggagaagtgaactg
-ttgtccctgcctccagctccagagcagtgtcacagatgctttgcccaagagagaggcagg
-tcataacaacacagatctttaaagttgtccataaaggaactgactttctttagaacagag
-tatgcagaaatttaagcctaagagtgccctcagaagcagtggcgattttggtagtgatca
-gggacccaaagttgctatactatatcatcttaaatgttcattttccagcaaagaatttca
-agacttgcaaagaaataaacacatgtgacccatacacagggaaagaccagtcaacagaaa
-ctacctgtgagagtgctcagaggtcagacttgcacggacttcaaagcaaccactgtaaat
-atgttcaaagaaataatggaagccatgcttaaagaataagggaaggtaggctgggtgcag
-tggctcatgcctgtaatccccgcactttgggaggccaagaggggtggatcacctgaggtc
-aggaatttgagaccagcctggccaacatggtgaaaccccatctctactaaaaatacaaaa
-attagctgggcatggtggcaggtgcctgtagtcccagctactcgggaggctgaggcatga
-gaatcacttgaacccaggaggcggaggttgcagtgagctgagattgtgccactgcccttc
-agcctgggtgacagagagagactccatctcaaaaagaaaaacaaaaacgaaaatcaagaa
-taagggaagcggtgatgactgtgtctcatgaacagagaatgtaaacaagaagatactatt
-ttaaaaaacttaatggaaattctggagttgaaaagtgcaaaagaaaaattcactagaggg
-gctcaacagtagacttgagccagcagaaggaagattcagtgaatctgaagacagatcaat
-agagatttcgcagtctgaagaacagagagaaaaatatgaagaaaaatgaacaaagccttg
-gagaaatgtgggacacagctaggtgcaccaacatatgcacaataacatatataacagaag
-gagagcaaagagagaaaggaacagaaaaaaatgtgcaaaaataatcactgaagcctttgc
-aaatttgatgagaaacatgaattatgcattgaagaagcttaatgaactccgagtagaaca
-aatgcaaagtggtcaacaaccagatacataaaaggaaaatgttgaaacccaaagataaaa
-agaaaatcttgaaagcaacaagagaaacacagctcatcacatataagggaacaccaaata
-agaccgacagcagatttctcatgtgaaacgatggaggccctaaggcagtgggacaacata
-ttcaaaatgcataaacaaaaactaccaagcaagaatcttacatccagcaaaattatcttt
-caaaagtgatgatgaaagagatatttccagataaacataaactgagaatttgttgccagg
-aaacttaccttacaataaatactaaaggaagttcttcagacagtaatttgaatccacaca
-cacaaaagccaaagtgctctgggaaaggcaagtagatcgttatgaaaggcagtaagaatg
-catatttattcaccttctcttaacagatttttaaaaataatttgtatataattgtattgt
-ggggccaagacatatagaaatgtaatatattttgataataatagcacacaggaggtgagt
-gggagcagagctgtattggattaagaaagtgagaccagatgggaactggaatccacagga
-acaaatgaagagaaccagaaattataagtaagaaagttaataaaacaaagtcttttaata
-tatacttgctctcctttcttctctcagcttcttcaaaagacataaaactatataaagtaa
-taattataacaaagtactgttggttttgtaacatatgtagatgtaatacatataaaaaga
-atagtgcaaagaggaagaagagagaatagtgctatataggagtcaccgggcacggtggct
-cacaactttaatcccagcactttgggaggccgaggcaggccagtcacttggggccaggag
-ttcaagaccagcctggccatgtatctctacatataatagattgaaaccatgtatctctac
-gtataatacaaaaattagccaggtgtggtgtcatgtgctggtaatcctagctactgggga
-ggctgaggagaattgcttaaacccaggaggtggaggttgcagtgaaccaagatcacgcca
-ccacactccagcctgggcaatagcacaaaaatctgccaaaaaaaaaaagatagaaatata
-taggagtaatatttctatatatcactggaattaagttactgtaaatctgaagtcaattct
-gataagttaaaacctatatagtaagcctaaactggtcattaagacaaacaaacagaacag
-tgaaaaagctattaaagaaatttaaggctgggcacggtggctcacacctgtaatctcaac
-actttgggaggctgaggtaggtggatcacctgaggtcaggagttcgagaccagcctggcc
-aacatggtgaaaccccctccctactgaaaatacaaaaaattaggtgggtgtggtggcagg
-cacctataatcccagctacttgggaggctgaggcaggagaattgtttgaacctgggaggt
-ggaggttgtagtgagccgagatcatgccattgcactccagcctgggtgacagaatgagat
-tctgtctcaaaaacaaaaacaaaaacaaaacaaacaaaaaatccaaaaaacagaaattta
-aataatacactagaaaatattcgtttagtgtaaaagatgtcaaggaagaaaagaggaaca
-aaaaagacatgagacatatagaaaataaaaagtcaaatgacagacataaatccaacttct
-ctcaatgatagcattaaatgtgattggatcaagtcaaaagggagagatttcctgactaaa
-taaaaagccaagatcaactatatactgtgtgcagaagatacactcaagattcaaaggtta
-aaagtaggttgggcgttaaaggctgaacaaaatatatcacgcaaacagcaaccataagaa
-aacttgatttgctatattaatatcaggaaaaagactttaaaatgaaatatgttacaaaag
-ataaagaggaacattttataatggtaaaaggatcaatcgatccattgggaagacataaaa
-attatagacagatatgcccctaacaacaaagccccaacatgtgtgaagcaaaaacagaaa
-gaattgaaggggcaaatagacaattcaaaaataatatttggagacttcaaaaccccactt
-ttaataatgaatagaacaactaaacagaagactaaagaaggcaatagaggctgggcgtgg
-tggctcatgcctgtaatcccagcactttgggaggcccaggcgggcagatcacctgaggtc
-aggagttcgagaccagcctgaccaacatggagaaaccccgtctctactgaaaatacaaaa
-ttagccaggtgtggtggcgcatgcctgtaatcccagctactcaggaggctgaggcaggag
-aatcacttgaacctgggaggcagaggtttccgtgagcccagatcacaccactgcagtcca
-gcctgggcaacaagtgcaaaactccgtctcaaaaaaaaaaaaaaaaaaaagaaaaaaaaa
-agaaggcaatagaagacttgaacaacactaaaccaacaagacctaaaagacatctataga
-acatttcacacaacaacaagataatacacattcttctcaagagtacgtgaaaaattattt
-aggacagactatatgttagaccacaaaacaaacatcaatgatttttttatcttttatttt
-tttttttaatatggagtcttgctctgttgcccaggctgaagtgcagtggcatgatctcag
-ctcactgcaacttcagcctcccgggttcaagcaattctcgtgcctcagcttccagagtag
-ctgggattacaggcacccaccactatacccagctaatttttatatttttgtagagacagg
-gtttcaccatgttcgctaggctggtcttgaactcctgacctcaagttatctgcctaagtc
-ggcctcccagagtgctgggattacaggtgtgagcaaccgtacctggacaataaattttaa
-aagattgaaatcatacaaagtaccttctctgactaaaatggaatgaagctagaaatcaat
-agaagaaaaccaagataattcacgaatatgtgaaaattaaaaacacactcaaacaactaa
-tgtgtcaaaatagaaatcacaagggaaattggaaaacaccatgagggaatgagaataaaa
-atataacataccaaaacttacgtgattcagtgaaagcagaaaaatttatagctgtaaaga
-cctgcactaaaaagggagaaaggggccaggcgtggtagctcactcctgtaatcccagcat
-tttgcgaggctgaggcaggcggatcacttgaggtcaggagtttgagaccagcctggccaa
-catggtgaaaccccatctctactaaaatataaaaattagctgggtatggtggcacatgcc
-tgtaatcccagctacttaggaggctgaggcgggagaatcgcttgaacgcaggaggcagag
-gttgcagtgagccgagagcgtgccactgcactctaacctgggtgacagagtaacactccg
-tctcaaaaaaataaaaaataaataaaaaaatttttttaaaaaggagaaaagtctcaaaac
-aaccacctaactctacaccttaaagaactaCAGAaagaatacaaaaattagccgggcatg
-gtgatgggcacctgtaatcccagctactctggaggctgaggcagagaatggcatgaacct
-gggaggcagagcttgcagtgagctgagatcgtgccactgcattccagcctgggcaacaga
-gcgagactccgtctcaaaaaaataaataaataaataaaaaataaaaagaactagagaaag
-aagcacagactaaacccaaagctagcagaagaaagaaaataattaagattggagtggaag
-taaacaaaatagagtatagaaaaacagtggtaaaaaaatcactgaagctgggcatggtgc
-cacatgcctataatcccagcactttggaaggcagaggcaggtggatcacttgaggccagc
-agttcaagaccagcttggctaacatggtgaaaccccatctctactaaaaacacaaaaatt
-agctgagcctggtggtggacacctgtaatcccagctatgcgggaggctgaggcaggagaa
-tcacttgaacctgggaggcagaagttgcagtgaactgagatcatgccactgcactgcagc
-ctgggcaacagagcaagaccctgtctcaaaaaaataaaaaataaaaaaataataaatcaa
-agaaacaaaaaattgatcaatcaaattgacaaacctttagctaaactggctaagaaaaga
-agattcaaattactaaaatcagaaatggaagttcggacagtactactgaacttacagaaa
-taaaaataattataagaaaatactatgaacaattgtgtaccagcaaattggagaacctag
-atgaaacggacaaattctggccaggcgtggtggctcacgcctgtattcccagcactttgg
-gaggcaaaggcaggcagatcacaaggtcaggagattgagaccatcctggctaacatggtg
-aaaccccgtctgtactaaaaatacaaaaaattagcctggcatggatggcacgtgcctgta
-gtcccagctactcaggaggctgagacaggagaattgcttgaacctgagagatggaggttg
-cagtgagccgagattgtgccactggactccagcctgggtgacagagcaagattctgtcaa
-aaaaaaaaaaaaagaaagaaaggaaagaaagaaagggacaagggacagattcctagatac
-acatgatataccaaaactgagtcatgaagaatggaaatctttatagacctgtaatgaagc
-agtgatcaaaagccatccaaaaaagaaaaacctttgacaagtccctggtgaattctacca
-gacatttaaagaagaactaacatcaatctttctcaaactcttccaaaaaatttaagagga
-gggTCGGGGGGCTGGGAGATCCAACATGACctcatccacatgactggcaattggtgctga
-ttgtcagcaggaatgtctgtgttctcctccttgcggtcactcttgctctgttaggtcaga
-catcatcccttacatagaggcccaagggtccaacggtccaagtccaagactgaagctgca
-aggtctcttgaggcagaggctctgaaaaccacatgatgtcacttctgtcacacgctattg
-gtcaaagcaagtcacatgcctcactcagcttcaagtcagtggagaaacagactccacctt
-ggatgggaagaatagcagagtcacattgcaaaggggtgtggataagggttgggaggaatg
-tgtagccattaatttacaCCAGATAATGTGAGTGTTTGCACTTTACAAGGTCCACAGGTC
-CACtgatacagtttggctctgtgtccctacccacatctcaccttgaattgtaataatacc
-cacgtgtcatgggagggaccccatgggaggtaattgaattatggggcgggtttttcttgt
-gctgttctcgtgataatgaagacatctcaagagatctgatgtttttatcggggggagttc
-ccttgcctgccaccatggaagatgtcccttgactcttccttcatcttcagccatgattgt
-gaggcctctccagccatgtggaacagtgagtccactaaacttgtttcctttataaattac
-ccagtctcaggtatgtctttattttattttattttattttattttattttattttatttt
-attttatttttgagacagagtcttgctctgtcacccaggctgaagtgcaagggcaccatc
-tcggctcactgcaacctccgcctcccacgttcaagagattcccctgcctcagcctcctga
-gtagctgggactacagtgcacgcctccacacccggctaatttttgtattttagtagagac
-agggtttcactatgttggccaggctagtgtcgaacttctgatctcatgatccacctgcct
-cggcctcccaaagtgctgggattacaggcatgagccaccatgcccggcctcaggtatgtc
-tttattagagcgagagaatagactaatacaTCCACCAACCCTAGGAAGTCAGTGGAAGGG
-TATTTCCGTATTTCATATGGAAGTCATTTCCATATGAAAATTTAGCCAGAGGATTTCATG
-CTGGTTGTCTGAAAGCCAGGAGCTTCTAAAAAACTTTCAGGGTAGCTGTCTAAGCATGac
-ctcatgtcatcctgttgtgagtactaaattagttaattcaggggaggcactcagaaaagt
-gAAGAAAGGGAAATCTTTCTTATATAAATCTTAGAAATCTCATAGAAATCTTAGGAAAgt
-gcctggcgtgcagtaaacacgtgatacatttcagttgttattatcttcacaataattttt
-ttgggtcaggcttgttattttccctgttttacagattaaggggcagagactcagagatgc
-gcagtaagtcgcctgagggttacgcagcaaataagcagggaagccagatgagaacctaCA
-TGACAGAGTCACCCATGTGTGAGACTCCAAAGCCTCATTCAGGTGCACAGAGAGGCGGTT
-GTGAGGACGttcactgctgcgttgccttcagtagcttaacatcagaaacagcgcagatgt
-ccaccaacaggggccacccagtaaaccccagcatgcccagccaaggagtgctttgtgctg
-gttacaagaaatgaggtcacgctatacataggacatgggatcatctccaagacattctgt
-tcagtaaaaagaacaTCTGAAAAAAAAGTTCCATAACCCACAGAAAATACTGCCAAATAT
-TCCAAAAAATCTAAGTCCAAGTGTGTGTGTATGTGACCTCTGGAGGCTGATCTGAAGCAA
-ATGTAGGTGAATTAAACAATAGGATCTATTTATAGGACTCTTCTTTTCCTACTTTTCTTT
-ATTTTTGTTGGATTTTGAAACATGTTCAAAGAAAAATTCAGAGTACAATAAAGTACCagt
-cgggcatggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggacca
-cctgaggtcaggagttcgagatcagcctggccaatatggtgaaaccctgtctctgctaaa
-aatacaaaaattaggtgggtgtggtggcaggcacctgtaatcccagctactcgggaggct
-gaggcaggagaattgcttgaacccaggaggcaaaggttgcagtgagctgattgtgccact
-gcactccagcctgggcgacaagagtgagactgtgtctcaataaataaatgaaagaaagaa
-agaagaaagaaagaaagaaagaagaaagaaagaaaagaaagaaagaaagaaagaaagaaa
-gaaagaaagaaagaaagaaagaaaaagaaaaagaaccaagaagaaaaaataaTCACCGGA
-GATTCCtcccctcccctagagctaactaggctaacattttggtatatatctttccagtcc
-ggatcctgtgtgactgagtgtgtatatgcatatgtattattttCAACTGTtggctttctc
-cttgtggtccaagacagctgctccagatttagccattacatctgtttcctgccagcaaga
-aagggaaaatgggaagtagagggccttttaagtatacaacctagaatttacacacattat
-tctttatcacatctcatttctctaaatgtagtcgcatggccatcctggccagaaggaagc
-ctgggaaatgtggtctttcctctgggctgccttgtgcccagtgaaaagtcaggggttcta
-tgactatgaaagaaacaggagaatggatattgtggcaactagcagtGCTATTCACCTTTA
-TTCTCTCAATGGTAATATTTTTCCCCATCAAGAGGGGAAAATTTGTGTCTTACATTCTAA
-CCACTGAACTCCGAGAGAAGACACTGGCCTGTGCCAttctcttgcgatggagtttcgctc
-tgtcgcccaggctggagtgcagtggggtgatctcagctcactgcaacctccacctcctgg
-attcaagcaattctcaggcctcagcctcccgagtagctggaattacaggcacctgccagc
-acacccctttttagaccacatagggtagcttccgactgttgccatggcatttgtgaattg
-tcatgtgctggtgggagtgtctcttagcatgctaatatattataattagcatatatatta
-taatgagcagtgaggaggaccagaggttgctttcatcaccatcttggttttggcgggatc
-tggccagcttctttactgcatcctgtttgttttatcaataaggtctttgtgacatgtacc
-ttgtgAAACCAGTCCTGCCTAAGGGAGCGGGGCTGGCGGTTGTTCAGAGTGAACAATTCA
-AAGTCAGGTCCTCCCTCTTGGAGCTCAGAGACTTGAAGAGCAAGGACCACTGTCAGGACA
-CAACCCCATTTGCAAGGCCGGGGACACACATACAGACCCACAGGCCATTGTAGAGAAAGT
-GTTAAAAGATGGAAGTCAAGCCACGGCCACTGGAAGTGGTGTGCCCTGAGAGGCAGAGGG
-TTCTCCCTAAGCCAGGGAAGGACAAGGCAGGGCAAGACAGAAACTGGGCCTGGGGCCAGG
-ATTCCTGAGCTGGGGCTAGATTTGCCCAAATCTAGGGCAGGGCTGACTGGGTCAAGCACA
-GCAGGGAGCCAGGGTGGGTCGATCCCCCTGCCACAGGCTTCACTCTTCTGGCTCTGGTTT
-CCAGGCAGTTCTAAAAGCCTCCCAGTggcccagtgcagtggctaacgcctgtattcccaa
-cgctttgagaggccttaggcgagcagatcacttaaggccaggagttcgagaccagcctga
-ccaacatgtcaaaaccccgtctctactaaaaatacaaaaattagccaagcgtggtggcag
-tgcctgtaatcccagctacttgggaggctgaggcaggagaacccaggaggtggaggttgc
-agtgagctgagattgtgccactgcactccagcctgggtgatagagcaagactgcatctca
-aataaaataaaataaaaaaaTCAAATCAAATAAAATGTCTCCCAGAATACACCACCCCAG
-CAAAATGGCAGGAGGGAGTGTCACCTGGGGACCTCCACTTTGGAGGTTTGAGTGGGCAGC
-TTTAAGCTGGAACAGTCACTCTTGCTGTGGGTTCTCAGGGCGGAGACTGAGCCCCCACCC
-TGCCTCCTCAAATGCATTTCCTCTCAGCTCCCACCTGCCAGCCCAGGAGAGAGGGAGGGC
-CATTCTGTCCTTTTCCTGCAGAGTCCCTTTGTTCAGTTGGTGACCAACATCCTGAAAAAC
-ATTCTCAGGAGATCAAAAAGAAGAACATTTTGGTCTATGTGGTAGGTTGGCCCAGTGCAC
-CACGCCCAGTGCAGGTCCCTCTTGAAACCACCTTTGGGAAATTATGACTGAgacaccacc
-tttgcaaaattatgactgagacaatgagagatctttttttttttcctttgagacagagtt
-tcgctcttgttgcccaggctggagtgcaatggtgtgttctcggctcactgcaacctccac
-ctcctgggtttaagcgattctcctgcctcagcctcccgagtagctgggattacaggcacg
-cgccaccatgcctggctaatttttgtatttttagtagagacaggtttctccgtgttggtc
-aggctggcctcgaactcccaacctcacacctgaggttgcctcagcctcccaaagtgctgg
-gattacaggcgtgagccaccacgcctggcccacagtaagaggtcgaacttaacctactct
-atcttgcttctaacctccaagctgtccttgttcattcctgggcataagctgaactaacct
-tgggagaaacttagtttatactttaaacagccctttcccaaagcagacctccttcttgcc
-tggggactaagctgcctttgtaggactaacattagccacaaaattagaaattttggttta
-ggagtcatgcagctggaggctacaagatcctgaccctccctaaactactcctgacatcag
-ggcttgagatatttttcagaccctgcacttgatggatcagctggcatcacccacgtcaat
-aaactggctcatctgatcttgtggcccccacccaggaattgattcagctcaggaagacag
-cttggactccctgtgatttcaaccctgaccaatcagcactcctggtgcactggcttctcc
-ccacccaccaagttatccttaaaaactcttctccccaaatgctcggagagacagatttga
-gtcataaaactccagtctcccacgcagctggctctgtgtgaattactctttctctattgc
-atttctcctgtcttgatgaatcggctcttgatgaataggcagcctgcaaggtgaacccct
-tgggcggttccaCTCTTTGCCCAGGGTGATGTTATTTCTCTCCAGGATGGCTGCAGCGGC
-TTCTGAGCCTGCTTGCATCTGGTGTGGTCCCTTTCAATGTCACGCAGGCCAAAGCAGCCC
-TCCATCTCTCCATGATCTTGGCTTCCAAGGTACTCTGTCTCTCTCTCTGGGTCGCCATAC
-TGGCTTCCATCAGGCCCTGGAATGCATCCTGCTGGTTCTATCCCTTGGCCTTCAAAAGTG
-CGGTTTCCTCCTGGAAGGCACCTTCTGCCTTACCTCACACTTCCTTCCCTCCTACCTGCC
-TTGAGATACCAGCTTGCAGGGGCATTCTTGGGAAAGCCGACCCCTTGGACTGAGTCTGGA
-GTTTTGATCTCTCTCTCTCttttttttttttttggagatggagtttcactcttgataccc
-aagctggaattcaatggcgtggtctcggcttaccacaacctctgcctcccaggttcaagt
-gattctcctgcctcagcctcccaagtagctgggattacaggcatgtaccaccatgcctgg
-ctaattttgtatttttagtaaagatggagtttctccatgttgatcaggctggtctcgaac
-tcccaacctcaggtgatctacctgccttggcctcccaaagtgctgggattacaggcatga
-gccaccgtgcctggccttttttttttttttttttttgagatggcatctcactttgtcacc
-caggctggagtgcagtggcaccatcatggctcactgcagcattgaactcctgggctccag
-caatcctcccacctcagcctcttgagtagctgggatcacaggcatgtgccaccatgccta
-gctaatttttgtatttttttttgtagagacagggtctcattatgttgcccaggctggtct
-caaactcctgggctcaagcaatcctcctgcctcaacctcccaaaatactgggattacacg
-tgtaaaccaccacatccagccCTGATCTCATTCTTCAGAGAATTTACCTAGCTGGTCACT
-TGGTGTCTGTAGGAGCATCGCCTCTCAGGCCTGCCTCAAAACTGCATTTCAGTTGGGAGT
-GGGGCGGGGGGAGGGAGAGTGTAGTTTGGGGACATCAAGCGTCTGTGGTGGATCTCCTCC
-CAAAGTGAGACTGCTTTTTAATGatatttattgagcacttactgtttgccactgcggtgc
-taagcactttgcacatactagctcagtgcatccttacagcaatcctgggagggaggtgct
-tttctcatccgcatgtgctgacaaggctgagAAGAGCTGGGTCTTGCACGGTACCTTAAG
-GGCTAAAGACCTGCAAGGATGGTGCATGAAAGCAAAACCAGAGAGGCGCCTTTTCCAAAT
-GCCAATGCGCCCTCCACCCAGTCCTTCACAAACCACATCAGCATGGATAGCACCACACTC
-CACAGGCTTTTCTGCATCTCCTTTGTGTGTGTGCACATGTGTAATTAATTCTGGGGCAAC
-TTCCTACATCAGTACAGAGAAACTCCTTGATCATTATCCACTCCAACATCCTTCCTGGGA
-GGGACTGACTGGAAACCCAAATGCCCTtgtaagggcaaatacaaaaactaaaataattct
-ccctggtgcagaaaaaggaaagaaacctcccgtttcctgttcttaaacactctagagcaa
-acactttagaaaacttctcaattatttctctgttcctttaagatgtgtctttttaaaagc
-caggtgagcctcctgccagttttacaagccagggatgttttcccaaggacctaggagcca
-tctctttggaaggtaaacatcaagattgcacccttctcatccagtctccatgggcagata
-ggagcctaacttcagtgcttggctccaagttgcaaaacaatccatcgtctatcataaaga
-tgtgagtttatattttctctggataaagacaattagctaacacagatggccactccaatt
-accaggtgaattcgggatgaaataagttgcaaattgtgttgtgcagtcatctgactcgag
-aactatttttttttttttgagacagagtctcgctctgttgtccagtctggagtacagtgg
-tacgatctcagctcgctgcaacctctgcctctcaggttcaaacaattctcctgcctcagc
-ttcccgagctgggattacaggcgtgcactaccacacctggctaatttttgtatttttagt
-agagatggggttttgccatgttggccaagctggtctcgaacttctgactttaagtgatct
-gcccaccttggcctcccaaagagttgggattacaagcatgagccaccaccccggccctag
-ttattatttgaggacatgtatgcaataggttatacctgcttggttatataggaggacgaa
-atgtatttctctttgtaatctcttttgtggattgcctgtgatgcccactgcagtctggtt
-taacgcttatttaataataaaactgttttctcttctacttttgtggaaaggttttctgga
-ttagATCTTTAATTTTGTCTCCAGCATCTTCaaatgtctttctacagagggttggttaaa
-taaatgtggcatctccacaaaagagaatactgcacagtcatggcaaaaaaacaaggagcc
-tgttttcgttgttgaatgaaaagtgcaaggtgcacaacagtttactactttttctgtaaa
-aaaagaggTCTGAGAAGGCTGTATTTGCCATTTGTATAATCTCTGGAAGGGTAAACAGCG
-ACTGATAAAAGTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTAAGAGAAAC
-TGGGCAGATGAGGGAGAGGAAAGGGATGAAAACCTTTCTCTGTACACCTTATATTTTCTG
-ATTTTTTGAAACACGTGACTGTATTACCTATTCACAGTAAGTTAACAGGGATGGGAAGCA
-TGGTGGTGGCAAGCAAACGAAACCTCTAAAAAGAAGTCCCAGGggccgggcgcagtggct
-aactcttatgatcttagcgctttgagaggccaaggtgggcagattgcctgaactcaggag
-ttcgagaccagcctgggcaacatggtgagacctcgtctctactgaaaatacaaaaaatat
-gccaggtgtggtagtgcgcacctgtagtcccagctactccggagactgagaggcaggaga
-gtcacttaaacctgggaggcagaggttgcagtgagccgggatcacaccactgcactccag
-cctgagcaacaggcaggactctgcttccaaaaaaaaaaaattagccaggtgtggtggtgg
-gcacctgtaatcctagctactcaggaggctgaggcaggagaatcacttgaacctgggagg
-cagaggttgcagtgacctgagattgcgccacggcactccagcctgggtgacagagcaaga
-ctccatctcaaaacaaaaaaaGCCCCAGAACCAGACATCCTTAAGCACTTGATTCTGTTC
-ATTTCTGAGCTCAGCCTTGAGCTTAGAACCAAGTGAAAACTAATTACACATTTTCGGAGT
-TCACATTAAACttcttctttttaaaattattatttttgagacagaatcttgctctgtcac
-ccaggctggagggcagtggcacgatctcagctcactgcagcctccacctctggggttcaa
-gcaattctcagtctcctgagtagctgggactacaagcatgtgccaccatgaccagcaatt
-ttttgtatttttagtagagatgggtttttgccatgttggccaggctgatctcaaactcct
-ggcctcaagtgatctgcccgccttggcctcccaaagtgctgggattacaggtgtgagcca
-ctgtgccATGCCTGAACTTCTCCTTTGAAGGAAGATCTGAGTGTAAAAGCAGGGAATGCC
-TTTATTTAAAAAAATGAAAAACAGAAACTAAAACAAAATAACAATCACCTCTGTTGCCTC
-CATTTGAGAGAATACTTCCAGGGGCTCTGCATGTCTGGTCCCCAACCTGGTCGGGGAGTT
-CACTTTCAGAGGCTCAGGGATGGGCCTTCCCCAGCCCCACCAGCAAATCATCTCTCCCGG
-CTTCCAGGAGGGTACTTACTCTCCAACTAGTGGGCTTTATGGGCCAGGAAGGATGACAGG
-AAGGGGTGTGTGGGGTACTACGTCCCTCCACACTGAGAATCCGAAAGCCAAGATGCCCAA
-GATTCTATCGTTATCTGCTTGTCTTGTAGAAGCCCCTCTGTGAGACTGAGGGGCAAAGGA
-GAGAGGGCAGGGGCGTGTCTCAACCCTTCTGGCCACTTCTAGGTTGTGCAGACTGCCACT
-CTTGTTACTACGATGGACTGTCAGATCAGCAGGTGGCCCAGGAGGGCTTGCTTGATGCGG
-GCTGCTTTTTCCTTTTGCCTCCGTGCCATGcctgtgaggtagttggtacttactggaatc
-cccactgcatgcatgaagaaacaggcacagagaagccaaatgactttcccaaggtcacac
-agcctgaagggacagccggctgtcccagctgtttcccttctaacacccttgggcctgcct
-ccagctagatgctgcAAATCAGTCCTCTCTTGAGAGTCAAAGCAAAGGAGATCTGAGCTG
-GTCGTCACAGGTAGTGTGACACAGAGTTGGGGATAGAGCCGCACCTTGCATTTCCAGGTG
-CCATCTTCCCCACAGTCCCCAGTGGGCACTTGCGTTCATGATTCAATTACTCAGGCTCTG
-TCTCTCTGTTCCTGCCCCTTGCTCTGTGACCTGGCCTCTCTGGACCCCAGTTCCGTCCGT
-GAGCGATGGGGGCGGGGTCGGCGGCCTGCCTAGGCTGGACAGTGCAGATTGCAGAAGTCC
-GCGGACGAGAAGAGCCGCAGCACGTTGACCAGAGGGAACATGAGCAGCGCTCCGAGCAGC
-GAGCCCAGCTGCACCGCCGCCCCGCACCACAAGAGGGCGCTGCGGCTGAGGTCGCGCAGG
-ACCACGCCCAGCATCACCTTGACGTAACTGAGGCAGCCGCTGAAAAGCACCCACGAGGCC
-ACCTGCGGGGCCGGGAGGGAAGAGGTGCAGAGTCACGGGGCTTGCGGGGCGAGCGCCGGA
-GCAAAGAACTCTCACAGGGCTCAGGGGAACCCACGGAATACTCTCTAGGTGCGAGGAGCG
-CCTTCTGGGAGTGAGCCTGCGGGGCCGACGGGTCCCATGAGTTGGCCGCCCGGGGGCGAA
-GGAGAATCCAGTGGCTTTTCTGGGTTCACGTGCCCATGATCAGGGCAAGGGCCCTTGAGA
-GAAGGCCCCTGCTGAGGTACACATGGTGGGAAGAGGCCTACCAGTCACCTCGATTCCCTA
-AGCCTCCACTCCCAAATGAGGAAGGGGCGCTTCCCCCACCTGGGGCTTCCCGGGAGGGTC
-CCACAGACCCCGCTCGCTGGAAAGGGCCGCGCCCAAGCTCTCCCAGGCCTTGGCTAGGGG
-TGAGGGGTACGCAGCGGGAGCAGCCCCACCGGCCGGATACTCACAATGAGGACTTCCCCA
-CCCCAGTGGCCCTGCAAGAGGGGGCAGGGGCTCATCACCGCCATGGCCATGTTGTAGCCC
-CCAAAGCAGGTCCCAAGCACGGAGAGGACCCCCAGGAACAGCAGAGACCTAGAGGAAAGT
-AGGGGAGGTGAGTGGAGGTGAGAAGCCTGACCTCTGACCCCCCCGCCCCACTGGGCGGCA
-TGTGGATGGCCAGTGTCTCCATAGTTAGTTTAGACCCATGTGGAAAATTCCAGGTTGCCT
-GGCTCAAGTGGGTCAGGGAGGCTCCTGAGCAGGCAGGGCTGGCCTGAGTCATCCCCAGCA
-TTAACGGCAGGGCCTGGCACCCCGgcaagaaaaacataatggactctggcaccggatggt
-cctggttcaaatcccagttctactgtttaagctgAGACTCGCCTCTGAGCCTCCAAATCG
-GAGTTTTGCAAGGCTGCATGACCTCCAGGAGCAGAGCATGCAGGCCTGGCGCCGCTGTGG
-GCCCACCTGGTGTTTACCTGCTGGCATTTCCTCCTGCAACACACCCTCAGCCTCAGCCAG
-GAAGCTGAGTTGAAGTGAAGATGGCTGGATCGGGCATTGGCACAGTAGGGTTTGCTGTGC
-CTCCTCAGGAGACCCCTCCCCTTCTGGCCTCAGCTACCTGCCTCTGCAATGTGGAGTGTG
-CTGATCTCCAGGGGTCCTGGCAGCTGGCTTGTTGCTGCTAGGAGCATCTCTCTACAGGTG
-GCCTTCCATGCAAACCTACATCTGGGACCACTGTCCTTCCTCACAGGTCCTTGTCCCTGG
-GGTCCCAATCTCTAGAACCCCAAGACTGGTCCACGCCCTGGGTAAGAACAGACAGAGGTC
-TGCCTATACCCTTAAAGACTCTTTCTGCTCCAAGATTCTTGGATTCCATGACTCAGATTC
-TGTAATTCTAACATTTGGGGTTTCTTGGATTTGCAGGTCTGAGCCTTTGGTCCTGCTTCC
-CTCAAATCCTCCATCCTCTTTCCAGTTTCTAGGTCCCAAGGTAGAAAATCCAGCTTCCTG
-GCAAGCTTTCTGTCAAGCTCTTCTGTCCTCACTGTCCTTCTTCTGGGCTGGGAGAGTGGG
-TGTAAGCAGGCCAGTGAGGACAGGCAGGCCAGCGTGGATACGAGGCTGTAGGACCCACCT
-CAAATGTCAAGATCCCAAGGTGGTAGTTCTCCTACAGGGGTCTGAAGCCCCTGCCTCAGA
-ACCGTCTGGTTTCCTTACTAAAAATTGAAATCCCAGGTCCCAGTCTAGGCTGGTTCAATC
-TGCATTTTATCAACTTGCCCAGCCATTCTTCTAGAACTGTGGCTCTAAGGGAACCAGCAG
-GAGGTTAGAGGCAGGAAGGCAGGGCCGAAATCCTGGGAATTAGACCAGGTCAAGCTCTTT
-CTCCAAGCCTCAGGGTTTCCCCTTATAAACGGGAACCTCAGTGGCTATCTGCTCCTCCTC
-ATGGACTGATGACaatgatggtcaacgcttaggctggacctgccacgtgccaggcaccgc
-tccaagagctttatagaatcagctcatatcatgcttccagcagtcctaggaggtggaatg
-ttacactcccattttccgataaatatccctgaggcacagagaactgaagtgacttgtctt
-acacacagctgacaggtggcagagctgggatttggaccagggtgctccccaaacatgttc
-ttaaccactaCATGTACAGCCCAGTAGGTGCGTTTGGAATTCTGGGTTCTGAAATGAAGT
-GTTCCCCCACTAGGATTCCCTAGGACCAGATGAGGGCACACCTGTTAGGCAGGAACATGG
-AGACCAACGAGGCAAGAGGGTTGGCCACAATGCTGAGGGTGGCAGCCAGGTGGTAGGCAA
-CTGGCCCATAGGACAGGCAGGAGTAGGTCTGCACAGAGGGCAGCATGCCGTTGGTGAGCG
-CGTTGACGAAGGCCACCAGGGTATAGATGAAGGCCAGGTGCGCCGGGCAGCAGGGGGCTG
-CTTTCTCCTCTAGATACCCCTGGCCCTGGCTGCTGTCCACCGTGCCTGCAGGGCCCAAGT
-CATTCTCTTCCCGCGGCCGGATGGAGTGGAGGGTGACCTGGTCATTGAGGAGGTCTTCCA
-CGGAAGCCTCCCAGCACCTGGGTTGACGCTGGAGGACAAAGAACGCCACGAGGCAGCAGG
-CCATCATGATGGATAGGAGGAGGAAGAAGACCAGGGGTGAGAAGTGGGCGGGAAGGTAGC
-GGCTCTCCAGGTGGGACAAGGGTGCTTCCATTCCGGGGAGGGCGGACACCAAAGCTCTGG
-GAACTCCCTGCAAAGGACAAGACAGATCCCTGGTCAGGGGAGGGGATCAGGCTGCAGAAC
-AACAATCATGACAGTGATAACAGAATACAGATCACCTGTTATTATTAATGGATAATGAAT
-AAATAAACATAACTAACAAGGTGGCAAtaatgactgctcatactgactgcccactgagca
-cgggcactgtgcatggataagcccctatgcctcctaacagggctgcacagtgggcaccat
-catcccccattttagagggaactgaggtatcagaatgcttcgtcccttacctgagggtca
-cagggagaatgtggcaaagccagactccacctggtgctttctgacttggaagctacacct
-tttatcaccccacAGCAGTGGCAACCACAAACATGTTCAGAGGAGGAGCTAGCTGGAGAC
-TGAGCAGTGGAGCCGCCCACCTAAGAGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACC
-TAAGGGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACCTAAGGGGAGAGCCCCCACCTA
-AGGAAGAACACTGCTCCACCCATCGTCTAGGAAATAAGGGCCTTcaggacatgccatccc
-aaaatatgactgtaggaggccagaatatgccaccccaaaattgacctattggcatatttt
-ttatttctagctggttattttgaaaaattgcaggctaaggagtagctctgaaaagttgcc
-attttgtaagataaatttacatctaaaggaaatttttattagtaaagctatcttatctgt
-accaagaaaaggtatctgtaccacgaaggggtatctgaaccaggaagagaaaggtgatgg
-cctttatcacccgaggaacttttatctgcataacagtgcaatgtttattcaccataagtt
-tcctcccttcactctcccataatttgtctccaccatcctgcagtagcctcaagcccctat
-tcccttttgtagctcaggatgctatagaagctgaaatcatctggcccttttttgagtctc
-atattttttggggactcccatgcgtatgtatgtaagtaattaaaatgagtttcctgctgt
-tgatctgccttatgtcagtttaactcataggccgaccaaagaacctagaaggatggaggt
-gagcagtttttccctcccctacaTTTGTGATAAAGCCAAGTGCTGAGATGGCTCCGGGTG
-ATGCTGGGTACCTGTGCGATGTCAGTCTCCCTCGTGGGTACAGGGCTTGGTACGCTGTCT
-GATATCTCAGTGACATTGACGCAGGTAGTGAGACCGGAGCCCTGGGCAAGAGCCACCAGG
-GCGGGCAAGAGGCCGCTGAGTCCTTCACCCACAAAGAAGGTGGTGAGGTAGTAGGTGGGC
-AGCCGGCTCATGAACGGCAGGAAGGTCACTGAAGAGGTGCAGTCCACCAGGGCCAGGAAG
-AAGGTGAGGACCAAGAAGGCGATGCTGTGGTGGCCGTCCAGCACCCAGGAGGTCATATTC
-CAGAGGAAGGCAAAGATGATGCAGGTGACGGTTCCCACGCCCAGCAGGGTGAAGATGATG
-GGCACTTCGGAAAGGCAGCTGGGCCGGAAGTGATGGAGCAGGGTGACCAGGAGGGGCCCG
-ATGTTGGCCAGCTGGATGACCACCGTGAGGTAGGAGGGCAGGTACCAGCCCTCGGGCAGC
-TCCATCACCAGCAGGGGCAGCTCTACCCAGAGCCCATTGATGGTCACCCAGGAGCCCATT
-CCGAAGACGCAGACCAGCAGGTGCATCAGGAAGGCCATGGCGGTATCTGCCCTGGGCCAG
-AGGCTTTCTCAGATCAGCCTGCAGCGGGGCTGGCAGAGAAGGACACCAGGTGAGTAATTC
-CAGCTTCACCACCTAGCAAGATGCTGGGACCTGGGGCCCAGAGTTTTCTCTTATTACTCC
-CCTTCCTGTGAACAAGCTGGCttttttttttttcctttgagacatagtttcactctttta
-gtccaggctggagtgcaatgggatgatctcggctcagtgaccctctgcctcctgggctca
-agtgattctcctgcctcagtttcccaaatagctgggattacaggtgcatgccaccatgcc
-agctaattttgtatttttagtggaaacagggtttccccacgttggtcaggctggtctcga
-actcctggcctcaggtgatccgcctgcctcggcctcccaaagtgctgggattacagtgtg
-agccaccacgcctggccCAAGCTGTCTTTTTATTAGCAGAAAACAAGAGAAGCCTTTCCT
-AACCGTGATTCATGAAAGAAAAGTTCAATCCGACACACAAAAGCaaacaaagcagcttct
-gcaaaagataccaacagcaaggtcaaaagttaaatgaaaacacggggaaaacatttgcca
-cataaatcacagacaaagggctcatcttccttgtcaggcctctgagcccaagcctgcgcg
-tgtacatccagatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggccggtt
-cctgccttaactgatgatattaccttgtgaaattccttctcctggctcagaagctcccct
-actgagcaccttgtgacccccacccctgcccgccagggaacaaccccctttgactgtaat
-tttccactacctacccaaatcctataaaactgccccacccctatctcccttcgctgactc
-tcttttcggactcagcccgcctgcacccaggtgaaataaacagccttgttgctcacacaa
-agcctgtttgatggtctcttcacatggacgcgcgtgacattcctaatatataaagagttt
-ttaaaaatcaagaacaaagagaccccatatagaagagggccaaggatatgaacaattcag
-agaaaaaggtacaaataagctttaaacacatgaaaatattatcaccttcattcacaatag
-gaaaactactccaggtgccatttctcaccatgagattgtcccaaagcctgacaaaatgac
-tcatgttcaaggttattatagattgcgatcttgttggtaatagcaagttatgggaaattt
-tctcctgggtggctaccaacagagagggggctaattaaagggacctgctggaataccaca
-tacctgtttaaaggaataagaaataaggaaagcagatcttggtgactgataaggaaaggt
-ctccaggctataataataatcttgaaacaaaatcaaggcaggtaaatggaaccaggaaaa
-agtgtactgccttttggtcatagaagaggaggaaaaacaTGTTTTCTTTGCTTGTACTTG
-CACAAAGCAACCCTTGAAGGACACACAGGGACTGCAGGGATGTTGGTGATGCCTCTGTAT
-ATCttttttttttttcttgtgacagagtcttactctgtcaccaggctggagtgaagtggc
-acaatctcagctcactgcaacctctacctcccgggttcaagtgattctcctgcctcagcc
-tcccaagtagctgggactacaggcgcccaccactacgcccagctaattttttgtattttt
-attagagatggggtttctccgtgttagccaggatggtctcaatctcctgatcttgtgatc
-caccctcctcagcctcccaaagtgctgggattacaggcatgagccaccgctcctggccCT
-GCCTCTGTATATCTTTTAATAAGAGTTTTGATTTGTGAACCATGTAAACATATTACCTGA
-TGCAAATATATGGTTACCTGAAATAAGATTTCAATCTGGCTTTTTTTCCTCCTGAAATTA
-TATCACTCTCTACGTGGCCTTTGGAGACCACTTCCTCTAGCCCTCCAGAGCCATTCTGCC
-ATCTGTTTACCCCTTTGTCAGCTACCAGTGGCAGCCCACCTGTGCTGTTACTAACAACTT
-TCTTCTATCTATCCTTAGTCTGAGCAGTAATATGGGAGATGCCAGGAGTGAggctctgga
-gccagctgtttgagtttgaccctggctctgctgcttacaatctgggtgaccctgggcaag
-tggctttgcctctctctgcctcatctcctcatctgtaagtaggggatagtgatagtatga
-actccgtggtttgttgtgagatataaggatgctggtgagtttatgctgtttccaacagtc
-ccagcatagggtaagcacctctaagggttactgatcattATCGTGAAATGGCAGGTTTGG
-TGACATCGTTATTTTTGTCTAATTCACATGAGAATTAATACATGACTATGAAAATTTAAA
-AAAGGAAAAGATTCCCCTACTAGGTATCAAGTGAACTCACCAGTGGTATATGCACCTTTT
-TGTAGAGACACGCTAACTGGGCCAATCTTCACGTTTTGTAGATGGGAGACGAGGTCCGAA
-GGGGCAGAGGGGCTCTCCTGGGATCTGGACTGGATCCTCTGCAGCAAGCGGCCTGTCCGG
-GACTCCTCAGTTCACGCTGCAGTCTTTAACTCCATACTTCTTCCTTCTAGTACAAAGCAG
-GAGTGTCCGTTGTGGCCACGCCTCACCCAGGAAACTCCTGAATCCTGGCAGCTCCTCCCC
-ACGGTTCCCACACACGGAATTCCCTCACAGGGCTGGGACTTCCTTCCTCATACCTTCACT
-GAGCGAACCCAATGCTCAGTGGCCTTTCTGGTCACCTCCTTTTCCTCTCTGGGAGGAGCC
-ACTCCTGGGGTGTAACGCAGTCAGATCCCCTAGCAGTCCCGCTCTGCCCCCTCCCTTCTG
-GGGGCCTCAGACTCCATTCCCTCCCTTAGGAAGCTGACTTGACTAATAGCACAGGTGAGG
-CCCACTCCAGGCGTGCCAAGAGGACCCAAGGAGGGAGGGGAAGCTCCCAGACAGCAGTGG
-CACAcctttgcctgtgctgtcctcccagcctggagcaccagccccctctgctgtccacat
-ccaagctttctacaagactccgtcctccaggagacctctggctgcctcaccttctcaggc
-gtcctcaccagggcccatgaccccttcatttcaggttgttcttgtgtgggtgcatgcagg
-cacataccttgagactgaagctttttgagggcaggggctgCTTGGGAATCTGACATTTTG
-AAGGTGGAAGGGCCTTTCTCAATGACTTAGCTTAGGATTTGTAAATTGTTAACTCACTGG
-CCACTGCCAGACAGCAGATATATTACTTTGGTTTGCCCAGTGTGTTTAACAATTTGTTAC
-TGTAATCAGCAGTGGAGGGGATGGCAAGCAACCTTCAGCATTTCTGGCTTCTCAGGAATA
-TTTTGGAAGAAGTGGCCCCCCACTTTGGCCTCTTTCTCTGTTCTAGACTCGGGCCATCTT
-GGAGCTCTCCCCTGCGGTAACAtctggaaccagttgcctgggttcaaatcccagcttcaa
-cccttacaagctgagcaagtgacctaacctcctgtgcttcagagtcttctcttgcaaaac
-agctataggctgtcagtaccaacatcagaactgttgctaggaacatgcactaaagtgcta
-aaactgtgcctgccacatagtgagggctcaatgaaCCATCATTATAAGATTACTATTTCA
-GCAAACGTATCAGTTGCATTCAAAAACATGTAGTTATTggccaggcgcggtggctcacgt
-ctgtaatcctagcactttgggaggatgaggcgggcggatcccttgaggtcatgagtccga
-gactggcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaattagcccag
-catggtggcgcacacctgtaatcccagctactcaggaggctgaggccggagaacggctcc
-aacctgggaggtggaggttgcagtgagccgagatcatgccactgcactccagcctgggca
-acagagcgagactccatcttaaaaaagaaaaaataaaaaaaaGGCGCAGtttttgttaga
-caaatggccactcaactaaaggactacatttcccagccttctttgtagctgcacatggcc
-atgtcatcaagcacaggccaatgaattcaaatgcgactttgagtagtctccttagcccgt
-ttcctgtttagaaaaaaaagtgcagctcgttgccagcactcatttaattttatgtaaacg
-tgctatttgaggctgaagcaaatctgattctgactgctgttttttttttttttcttttga
-gacagagtcttactgtgtagcccaggctggactacagtggcttgatctcggctcacagca
-acctccgcctcccgagttcaagcagttctcgtgcctcagtctccttagtagctgggatta
-caggcgtgcaccacaatgtccggctaattttttatatttcttagtagagacggggtttct
-ccatgttgccaggctggtctcgaactcctgggttcaagtgatccccacgcctcagcctcc
-cagagtgctgggattgcaggcgtgagccaccaagcccagccctaaatctgactgattttc
-aatgtgaaaataacatgtaaaaactgtttttgaagttatttctaaccagaactaacatca
-gactcatctatttcagaaaaactggattcatcaaacgaatctttggtcaacaactgttca
-agaacaatgttaacatcacacataggaatgctaggatttgctattttcagcgatcgagaa
-ttactttgttttgtaaatggaaataccacgactaaaaccagaatgctacaaatagagtga
-tgtcttttgtttccaaagtcaatatactagagcaaggcaaaaataataataaaagcgagg
-tattttgtggcaaagttatcttggggtaaacactgcagtcacaagtgggtattccttctg
-gcaaacagggaaagagttaacaataagggagtgtgcccttctgctcttcctccatttggc
-tgtctggaatcagatgtgatggccagaactccagcaacgattttgtgctatgaggcatgt
-ggtgggggttagatgcatactaggctcctttgggattttgtggcagagagcacccatacc
-agccctgttttgcctgtgttgaactgttttgtttgtttgtttaatgttgttgttaaattg
-taaaagaaacttctatgttgtttaagtcactcttattttATGTACAACAAAAGTACTCAG
-Aggctgggtgcagtggctcactcgtataattccagcactttgggaggctgatgttggcag
-atcacttgaggtcaggagttcaagaccagcctccaactggtcaacatggtaaaaccctgt
-ctttaccaaaaacacaaaaaattagccaggtatggtggtgggcacctgtaattctagcta
-ctcgggaggctgaagcaggagaattgcttgaactcgggatgtggaggttgtagtgagcca
-agagcacgccagtgcactctagcctcggcgacaaagcaagactcttgtctcaaaaaacta
-aaagaaacaaacagacaaaaaCTACTCCATACTAAGTGCACAGAGATACACATTCCAGGA
-TATATATTGAAAGATTATAGTAACCAAAAACTAATGAATACATTTATCTCCTTTACCACC
-TACTTTCTGACTCTGAAACTTAGGTCCTGTCCCAACCAGGATTTGATCAAAAATCAAAAT
-TTAACAAAAGTAGTTGTTTAGACCCTTGGGGGCAAATGTCTTGCAGAGATATGAAAAAAA
-AAAAAAAAAGGAGAAGAGAGAAAGAGGGAGGAACAGAGGAACACAGAACCCTCCATATAG
-CATTTGGTACCAAAAGTATAAATTGAGACCAAGAGTCATTTCATATATCAAAACTCTAAT
-TCATAAAGGAGTCAAAATTGTAGTGACTATCTGTATTCTGAATATTTCCTGAAATAGCCT
-CAGACATTCCAGGAGAAATGGACAGAAGCACAGTCCAGCAGTACAGGCCTGACTCACCCT
-TCCAGGTCAAGACAGCAGACGAAGGTGCAAAATAAACAAGGATATAGCAAAAGCAATAAA
-TGATATACCTAGTAAAGAGGGCTAAGTCAGTAGTTAAGGGGAGTAGGCGAATTTGCAGAT
-GATGGTGACCTTTGCCATATGAAAAGCTATTAAACTAATGAGAGTGTCCAGTTAAACATT
-TACAAACATCAGTAGCTTTCCCACAGAGGGCTGGATGGGGAGATGAGGGCAGACAGGGCA
-GAAGTAGCCTCACTTTCTTGTATGTTCGACAACTCCTAAGCTCTGAACGCCTAAATCCCT
-GCTCCCCACAAAGACGAATTCTCTGGTTTTGACCCAGGTGCTACCACGGCTGTGTCACTT
-GAGGGATGGGATTTGGCTCCGGGGGTCTGTTTCCTTGTCTGGAAACCAGGCACAGTGGGG
-GTGTGTCCCCACGTGACCCATCTGCCCTATGGCCCTGGCCCACTCCCAAATTATCTCCTT
-CCTCAAAAGTGAGGTGTGCTTTTGGACCTCGGGGACACAGTGAGGAACAGTCATTAATGT
-CAATGAAGGGGATGTCTTAGGCAGAGGGAACTACATGTGCAAAAAGGCCCCAGAGAAAAG
-GAGAGACTCAGAATGGCTGGTGTTCGGAATGTGTTGGGATACTTTTAAAAGATGCATATC
-TGTATtttctgttttttttttttttgttgttgttgtttgtttgtttattttACAGTGACC
-TTGCAGTTCTTatttattcattttaaccagtatttcttgggcaccaactgtgtgctcaac
-cacAATCCCTGCTCTCAGGAAGTTGGAGGAAGCATTCACGAAGCAGAATAAAAAACAGAA
-ACATAGAGCAGGTCAGATGGTGGCAAGGACTCCGGAGGAAAGCAAAGCTCCTGAATGGGG
-AATGTGCCGCTGTCAAGGAGAGgacatgaagggagtgtgggagtgagctgtctgcagaaa
-gcacggtccaggggagaaaacagcaagtgaaaaggccctggggtgcggccacacctgctc
-tgtcccagaagtggattttgctgttcaaaggacagctaggaggccagtgtggccgcagca
-gcgggagccaggttggaggggaggagacagggcaggtcccctgtggccctgtggtgacag
-cttgggtgttttctctagagcaaaaagctccgtgagtgggcagaagagaccagctctaat
-ctagtttttaacaggatcgtgctggctgttgtgaggagaaacatgaggcgccagggagga
-agcaggagtaaaccttcggagggttaggaagctgtagcaAAAGAGCTAACAATCACCATG
-ACAACAGTGACAACCATagctgccactcctcagctatttattgtgccagaccctgtgcta
-agctctttgaacacattacctgtcaaatcttgttccacaatcctgaggctggcattatga
-ttatctccattttacagatgaggaaactgaggtttaaaagggaaataaatttgcctaggg
-tcatacagctgggagctgagctttacatccaggcatgcttgactGTGGACCCAGCCCTGA
-GAAAGGCCTCAGGGTGAAGGGGTTCTGAAGGGGCCATGGGGGTCAAGCTGAGCAGGATCT
-CTTTCTGCTCACAGATGGCCTCCCAAGACTTGGGCCAGAGAAAGAGAGAAATGGGGTACA
-GGCTCAGGAGAAGCTGAGAGAGGCTCTGAGACATATCTGCTTCCCAAGGATCCAGGACCC
-CTTATGTGATCACCAGAGACCAGAAACCTAAGGCTTCGCATGAGACAGTTAAGATGCCCC
-ATAATGCGTGGGCGACAGATAGAGAAGCTAGAAGGATCAGTTCCAGGCAAAGGTTTCTCT
-TTTGCATTCTTGCATCAAAAGCTGTGAGCCCCCAGCCCAAGAAAGTGAAGAGAATTGGGA
-GTGGGGTTCTGACCAGGGCCAGTGCACCGTCATTGTGTGGGCTGGGCCATCTCCTCCAGG
-GAGCTCAGGCAGCTTCCATCCCACCCAATGTCCCCCGCCCCCCTCCACATTCTCCTGCCC
-TCTGTTTTCCTCCATCAAAGTATTACTGACACCAGCTCAGTTACGGGAGTTTATCTGTGT
-CTATCTGTTGAGCGCTGGTCTCTCCCATTGGAGTGTAATCTCCATGTGAGCGGGGGCTTG
-TCCTCTCCCCCAGTGCCCAGGTGACCATCTGGCTTGCCACGGGCTGGGCCACCTGAGCTC
-CTGGCACCATGGCTGGGTTCTCGCTCTGCAGGGATAATCTGCCAGCTGGTAGGCACCTAG
-CCCTGTGGGCCAGACTGGAGGAAACCCGCCTCAGCTATGAGGGTTGTGTTGGCCAGGGTG
-ACCCCTGGGGCAGTGCCAGGTGGCAGCCTGACACTGGATACATCTCACTCCTGGGCAAGG
-GTCTGAGCCAATTCTTTCCTGGGTTCCAGGCTCCTGGAGAACTTAGTGAGGCCTGTAGGC
-GTCTACTTAGGGCCTGGCCTCACCCTCATGAGAGTGGGTAGGAATGGACTGACTTTGAGC
-CCATGAAGAAGGGAGGCTGAGAGGTCAAACCACAAAACCCACagggagagatgggggaga
-tgaaggggagtgagagagaagagactgagacaaagagacagaaagaaccgaaagctagaa
-gcagaaatggggagaaaggacaacagaggcacagagacagggaaaaatgagaAGCTGCGG
-CTGAGAGGGAGGCAGGGAGGTGCCAGGAGGCAGGAGGCAGCTGGGGCGCTGGGAGCCTGG
-CCTCAGCCACCCTCACTGTTCACAGCCACATGTAGCAGAAGGCCATCTCTACCTCTTGTT
-GCTGGGACCTCAGAGTTCccctgaaactcatcccaactcaatgtccctattgcacaggtg
-gggaaaccaaggcccagagaggagatagtgcttccccgaACCCTGCCCCACCCCTGATCT
-CAGGCTGTGGCAGACattcaggcctgtgctcaccggctgtgcaacctcaggtcagctgct
-caccctctctaggccttggtttctccatctgtgaaagggTCTGGGAATGCCCAGCCTTTC
-TGGGCTCAGCAGACCAGGAAAAAGGGAATGAGATAACAGGCGCTCAGCCTGGCCAGTAGA
-AGCGGACAGTGAGTTCTCTTCCCCCTTCTCCTCCCTCCCAAGGCCAGGAAGGGCTTCAGG
-CCTCCCATGGGGCTGACCTTGGTGGAGCAGCCTCCCCCAGGCCAGTTCCCCTCCCCTCCA
-CGTCCATCCCAACTCCCAGCCTCCTTCCCAGGCTCCTGCGGCTTCAGCCTGGTCAAGTTG
-TTCCGAGATAGCATGGAGATGGCCCTGGGTAAAGTCAGTGGGGGCCCAGTCttttttttt
-tttttttttttttttaagacaggatgtcgctctgtcacccaggctgaagtgctgtggcat
-gatctgagctcactgcagcctcaaccttcctggctcatgcgattctcccacctcagcctc
-tgagtagctgggactattaacccatgccaccacgtccgacctgggtaatttttgtatttt
-ttgtatagatggagtttcgccacgttgcccaggctggtcttgaactccctgagctcaagc
-gattcacctgcctcagtctccagaagtgctgggattacaggcgtgagccatgacacccag
-cATGGGCCCAGCCTTTTGGTCTGGAGGCACCAGGGGTCTGGAATTCACCTGGATGGCTCA
-GCCTGTCCCGACTCCAACATGCCAGCTGAGGAGGAAACCTTTCTTCCCTCCTGTCCCTTT
-GATCTTTCACCTGGATGGCTCAGCCTGTCCTGACTCCACATGCCAGCTGAGGAGGAAACC
-TTTCTTCCCTCCTATCTCTTTGGACTCTCCCGACATGGCAGCCTGAAACTAGGGGAAAGG
-CCACGGGACACCTGCTGGCTCCAGATAAGTGCCCCTGCCATATCCTGGTCAGTGTCCCAT
-GCTCCTAGCTAGCAGGCAGCCTTGGTAGCTGCAGCTGCACCCTCACAGGCCTGAGCCGCC
-CCGCTTTGCCCACTTACCTGCTGGTCCAGTTCCCCAGCCGCTCTGCATGGGAGGGGCCAG
-AGGCAGCTCGTTTTGTATAAAGCTGTCCCCGCCCAGAGCTCGGGGAAAGGCAGGCGGAGG
-GTGGGTGTGGCTCCCGGCAAGACCAGGCGCCTACTATGTGTCTCTGATCTGCCCTACAGC
-CCAGCTAGGAGGAGGATCCAGATGGTAGAACTGTATAATAAAGGGCTTGCTTTATTGAGG
-CTCTCTGCCACCCAGATTTCATGAGGGTTGATCCCCAGTTGACAAAAGCTATGTGCAAAC
-AGTTGGTTCTGGCATCACCCTGAGATCTCCATAATTCCTTTCACACAGGAAGAGAGTTCC
-CTGGAGCAAAAACAGTTCAAATACTGgtgcttcagtaagtcatgtggaaagcggggataa
-taatagtgccctcttcataggACAGAAATCCTAACTGCCAGTGTGCACTGAgctgactca
-gtgtcaggcatgttcttggggcttgagagaaattaatgcatttaatcttcatggcctttt
-ggagagatgctattactatccctattttccagatgaagaaacaggcccagagaagtcgag
-agccttgtgtaggtcacacaccttgtatatggcagaactggTCTCTGATGCACACTGAGC
-TACCCTGACAAATACtgtaaccacctgaggggttctttctgcccactgcataaagaaaga
-ccatgaggctggccatgccacaggggaaatgagtttgttcccaaatcatcttcaaagctt
-gtaggtgaggggtttttcaaaggcagtataggggaagagttgggggtggccaggtaacag
-gtgcttgctgctgattggttggggtggagatgaaatcatagggggttgaagctgtgctcc
-tacaggctgaatcgcttttggggggggggccacaggagcagggttggcggtcctggtgga
-gacatcaggtttaggtggagccatgggtgtcaaatctgcaaaaaacctggaaagatggcg
-gggcgtggtgggtcatgcctgtaatcccagcactttgggaggccgaggcgggtggattac
-ctgaggtcaggaattcaggaccagcctgaccaaaatggcgaaaccctgtctccactaaaa
-atacaaaaattagccgggcatgatggcggacacctgtaatcccagctactggagagactg
-aggcaggagaattgcttgagcccgggaggcggaggttgcagtgagccgagatcgcgccgt
-tgcactccagcctggacaatagagcaagactctgtctcaataaaaCAAaaacaaacaaac
-aaacaaacaaaaaacaaaaaaaaaacaccaactggaaagatatctcaaaaggccaacctg
-caacagtggtgttatttgcaggagtaattggggaagttgcatatcttataacctccagaa
-taatggctggcaatcatttatgtctacaccttaggaggacccaggctcctcttctttccc
-cagcctgatggcctctcattaactttacaaaagtggttGCTCACAGTGCTACGGCCTGTA
-AGTGCAGGGCCAGGATGTGAATGCAGACTCAAATTGGTGCCTCCatggatgtaaaacata
-ttgcacagattctgacacctagtaaatgctcagtGCATATTGACTTCTACAAATAATTCT
-GGCCTGCCTGTTGTGTTATTTTCCAAGACATTCATTTACTTAACAAGCAATCAATCACTC
-TCCAGGCTAATGCTTGGGGCGAGAGGTGAGCAGGCACTAGGGAAGGGGCCAGACCCCTCG
-CTTAGCAGGCAGGTGTTCAGGAAGTGTTGCCACtgttggggctcaggacatacacacccc
-caaaatatgactctgggaaaccagaatgtgccacccccaaatacacctctttgacatact
-ttgagctggttattcagagaaactgcagacacaggagtagctctggaaagctattctttg
-gtaaaagaaatttacatctatcaaggaaatctacattagtaaaggtgcctgtatcaggaa
-aaaggctgctccagaagaattaccctagagactttcttttttttttttttttttaagata
-caatttcacttttttttgcccaggctggagtgcaatgctgcaatctcggctcactgcagc
-ctccgcctcccgggttcaagtgattctcctgccacagcctcccaagtaactgggattata
-ggcgcacgccaccatgcccagctaattttgtatttgtagtagagacaaggtttcaccatg
-ttggccaggctggtcccgaactcctgacctcaggtgatcttcttgcctctgcctcccaaa
-gtgctgggattacaggcttgagccactacactggccaccagacagacttttatctgcaca
-ggaagacaaccattatttaccatacaataattcttcccctcaccctcccataactgtgtc
-tccgccaatcccccaaagccctaagaccctattccttaaacttcaatcatctgacccttc
-tttgagtctcatattttgtgggatttccacgcacagatatgtaattaaatatggtttctc
-tcctgttactcagtttcatgtcaatttaattcatagcccagccaaagaaccatgaaaggt
-ggagggaagccatgtttcccttctctataGTACCAAATACTTTGGATCTGTtaaaaaaaa
-attgcaggactctaaatttatgatgccaagggagaagttaagccttgcagagtgTGAGTT
-ATGTGGCTTGCAGGATGGCCACTTTCTtcttctttttttttttttttgagacggagtctc
-actctgtcgcccaggctggagtgcagcggccaggctggtctcgaactcctgacctcaggt
-gatctgcctgccttggtctcccaaagtgctgggattacaggcatgagccactgtgcctgg
-cCAcaatttcatacttatctctgccaaatactataaggtgtcaaaatttggcatagaggg
-tacaaaactataactcaatccaaacagaataatctttgcttgtataattttttaataatg
-aaacatcaatattggtttaataaaggcagctatatcttgaactatttagttaaataccct
-aacttctaatcctgtggccttaggaagtctagtctacagacgtgaaggaagtttctttag
-ggaaaggacttatcatctttgatattaaagaaaagagaatttatataaaaataatcttat
-atggtaaattcttgttctaaagtaaatgaattggttgtttaaaaagaaggatgtttacaa
-cgagtcagaaagttgaggcatgtcagagattgtgtaaattgtaaaaattttataaaaggg
-aatttatgcaagaaatgttgtacagtttaaaagtgatgagggggccgggcacggtggctc
-acgcctgtaatcccagcactttgggaggccaacgcgggtggatcacctcaggtcaggagt
-tggagaccagcctggccaacaagatgaaaccctgtctctactaaaaatacaaaaaattgg
-ctgggcatggtggtgggtgcctgtaatcccagctactcgggaggctgaggcagaatagct
-tgaacccagaggcagaggttgcagtaagctgagattgcaccactgcactccaggctgggc
-gacaagagtgacattccatctaaagaaaacaaaaacaagagcgactaggcctcctgaatg
-ctttataaaatgccaccataactcttaactgtacaacttgcctgctttgtagctgggtaa
-gacctagcacacatggagttaaatgctggaataagtcagaccttatctgcacttctgtct
-aggtcctaggctctacatctagtacataattacaatctcaaactgactaacaaaagtaaa
-agttgctaaaagttaacagtgtaacatgtattgttccatagaaagaatctaagataagac
-tgtaaagctgaggctagccgtggaattgtaccattaaatacctatgagtttcctcttgag
-gttgcaagataacctagggttcccggcctctcagaaagggcattctttgcttaccacaga
-tcagaagccctatacagggactgtgtacacaaaatataaggccagtttccaagggctttc
-ttggcttcgtaaatcaagtttgattccttaaaggaaagcataccattccagtcaaggcct
-tggtaaaaaaaccagtttttccaattgtgtcctgttacaaaagaaaacagattcttatta
-cacttgtgcaaataactatatcgccataacttaagaatactcacagatagtttccaaatt
-ctggagaaaatcagggagagagaaacaagtatgctacaaattttgttcatgggagtatac
-taaattgttaaaagctgttaatagctcaaaagaaaaatttcgaggccggatgcagtggct
-catgcctgtaatcccagcactttgggaggccgaggcgggcggatcgcctgaggtcgggag
-ttagagaccagcctgaccaacatggagaaaccccatctctactaaaaatgcaaaattggc
-tgggtgtggtggtggcacatgcctgtaatcccagctactcaggaggctgaggcaggagaa
-tcgcttgaacccaggaggaggaggttgtggtgagccgagactgcaccattgcactctggc
-ctgggcaacaagagcgaaactccgtctaaaaataaaataaaataaagaaaagtttctttg
-actttgaaaagcaaaacaaagtattagcaatattttaagcaaaatatcaaaaagatcact
-ccagtctcctattagttcagttcgtgcagttaattcctgtcctgcttgatattaatgaac
-attttagctaagagtcctaaccatttttcctgtattctgatgtcacaatctccaaattta
-tcagaaacctgcattcaagaacacctgttagagctttatagctgagtataaaacccttct
-aaagaggatcaaaacaagacaacaattgtttatggatgaccaaaagttttagggtagcca
-tagttaaagacacaattgacaaggaaatctgttacttctgtggcacacaataattttaac
-ataacaattataattactactgataacacacactaagacatatcagaattataggagtct
-cccataactttggaacacataccaataacatatttatacaaatatggcccaaagaaagcc
-aaacattattttatatttgacaatgcttcctgtatgacttcataccaaataagccaaatt
-ttacctttatattagtgtgttattaatgttaaactcaattttaatgttttgatcataagg
-tcagattttcatggacccttttttttttttgagacagagtctcgctctgtcgtgggcgac
-agagtgcagtggagcaatcttggctcactgcaacctccacctcctgggttcaagctattc
-ttctgcctcagcctcctgagtagctgggactacaggtgcccaccaccatgcctggctaat
-tttttgtgtttttagtagagatggggtttcaccgtgttagccaggatggtcttcatctcc
-tgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgagccat
-tgcggctggcctatagaccatttttaaccctttataatttttgtcaaagagcaggttagt
-gctttaagaaaaacccattgtgcttttattttaatactcaatttacagaaaaactggatg
-atacacctttaactttagccaagatgtttacacacagtatttcctttacaattaaccttc
-caaaagttgcttaaaccttcatttttattttattcaacttaaaacaattctttaaccttt
-taatctaggtaaaaatccacattctcatgcctccttataatctttttaccaaaagtatat
-gtaaactgttttttcaatagtcttaaatacatgttacactgttaacttttTTTTTTAAGG
-CCTACGTAACAAATAATTATTCTTggctgggtgtggtggctcacgcctgtagtcccagca
-ctttgggaggccgaggcaggtagatcacctgaggtcaggagtttgagacaagccttgcca
-acatggcaaaaccctgtctctacaaaaatacaaaaattagctgggcgtggtggtgggtgc
-ttgcaatcccacctactcgggaggctgaggcaggagaatcacttgaacccgggaggcaga
-ggttgcggtgagcttagattgcaccactgcactccagcctgggtgacaagagcgagactc
-catctTGGGGGGGAaaaaatgggaaactggagagagaaaattacatttcagaaactataa
-cacacctgttattaaattccagtgttgcctaatgttgttcaatttttattactttaaatt
-aaattctaatttttctgactacgagtttccaaaataagctttgttttcttaaagccctat
-gaactgaaaactagacgtttcagcaggcactgcctctaaacgccccccagccatcacagg
-aggaaacctcttcactgctggagctgacaactaataactgagcgtgcctggaatcctttg
-cccccacatctaataagtccatggaacccagggtaattgagatggcatctcttacaagaa
-tcaacttctgggtcaggtgcggtggctcacgcctgtaatcccaacactttgggaggccaa
-ggtgagtggatcacttgaggtcaggagtctgagaccagcctggccaacatggtgaaaccc
-catctctaccaaaaatataaaaaagttagctgggcatggtggtgcatgcctgtaatccca
-gttattcgggaggctgaggcatgataatcacttgaacccaggaggtggaagttgtggtga
-gccgagatcgcgccattgcactccagactggcgacagagcgagactccatcttaaaaaac
-gaaacaaaacaaaaaaacaggaatcaacatctggatacattacactcgagtcaaagcctg
-gaaagctgaggaagcaacccctgatagccaaaggaacatcctaaatatcagtgtaaagaa
-ataggaaattttaagctcataaaaggtaagtaactgagtgagaactacttatcttactca
-gtctcacccctacctcaccaaatacttttagatgttcctacctctccttttaagacaaat
-attaaaactttttaatggaaattattcactacaccaccattgtgggaactgctttacaca
-ctctattatttgcagtgggactatgtactacagcaccctcaggatggaatatcagacaga
-gaatctcaattatggtaccattttgcttaattattatcctcatagcaggaataacagtta
-ctaacagcaaataacacatgggcctttccagacatgtgcctctgcctgtcattgggtgag
-gaatgttgtttctatatcaaccaattaggcctagtaagaggtgctgttgaaaaacttaag
-gaaagggctataccaaaacaaccaaatagattcttggtttaggaacaaaatcatagcatg
-ggtcatcccattcctgggacctttcctaataatatgcctaggactaatgttcttaccctg
-cctaattaacctttttcaaagatttttaactgacaggatcatggccatttcacagacaac
-tacccaaaaacatccacagacagcgttactgctacagttaatccaagaccagaaaactct
-gtcccctcatcagcaggaagtagccagaaagaacaccctgcctttcatcctttttataac
-tataaggtctggattgacagagcaggagcattgccatcttggacaagcactgccattcta
-aagttccccttgatcaaaaaccacctaaatccaaagggcatcagcctaatggctaaggtc
-agcatgaccataaaccacaaatgacatctctgaccagaaacattccaaccataagttaaa
-gccctccccgaccagagacgtgccagccccaagataacctcccctccaggtggagagatg
-tcagccccaagataccgtcccttccaaccagagacattccaaccctcaatagacttctcc
-cctacacaggaacattccaagcctgtgataagctctcttacccagaaaccagtaaatacc
-cttagtatgtaagagagagcattcctgactgaaattggacagaggcccctctcaggttta
-ttcttcaaaataaacctgtctttgactgttgagcctcttttcatgtttctttcctctttc
-ttgaactcttacaACACCTTTGTTAGGCGCAAATtttcagtgctgcaaaagaaatagcac
-tcgaacataaatttaattttctcagcaaggcaattttacttctatagaagggtgtgactt
-gtggatggaacaatggtgagagcacacctgaacaagggaggggaaggggtttttattcct
-gatgcaggtagcccctactgctgtgtggttcccctgttgactaggattggaccacacagt
-ctaagctaattccgattggctgttttaaagagagcaggggtacgagtcggagtagcggag
-tgagtagtttggcgggaaggacagttaggaacaggtgactaaaggtgactcaggtcagtg
-caggtgaccaggggtgactcaagaaggagcaggtgatcaggggaatagatgtgaactact
-gattagaactggtggaaaaggttgtttactgaaactaggggcaaggaggcaaagagaatg
-agaaagttaaactttaaaatggagaacaaagaacaggggacctgaatatactcatacatt
-ggttccttggagaggatctcagaactcattgtacttaacaATTTACAGGCTGAAACATTT
-GAAAAGGAATTTGTTATATCCTACAatttccccctttcaattttcatagtacttcctctt
-caaactttttaaacatgtcttggcttagctgctcgacttaatcctctaaaagaaaaagct
-tatctgaataaggtggaggtgagttaaggaagattttagtaagtgctgcttttataagtc
-tttgcactagcccacagatgcatggtatgacataacacctaacaagaatgagtacagcta
-ttacggctgcaagagaagtaagaattgaggctgtgatttctttccatttactgaaccccc
-tttctagccaccctgagaaagggttatcgactccagaattttagctagttcattggatag
-agtggtaagtctttataaggcccttgttatgttcccagtgtgggcagtgttatttgggat
-aaaggtacaacactgagttttaatcataatacaaacaccactttttctgctaatatcata
-tctggtgccattctgttttcccaggccatctggctagtgggccccaattgttctgctatc
-cctttgacagcatccctggtgtaattaataaactgctgctgattataatagatgtaattt
-atccagtctacatttttattaatcgtcacccatgaaaatattgacttaaatcctgcagct
-atttgatctcgggctttaaattcatctggtactcctagtggaactccagtaatgtttata
-taaacatgggggtcaaacgactcatgtaaggcacttcttttacaattttcttttttatca
-tgttgacggaatgctagagtgaaagggatggccaattggactagagcacgagtgctgctc
-taattgcttggcagagtatccagcaatagtgcccctcaatgccaccacacacctgctcag
-ggatgaacaagggcagactgatgggtaagctcttgaaaaggcttggtttcaccgcaccct
-gttaagtctccaaggaatgctaacttttccccctgccgtgaaagggacaggtgaacttaa
-catcaggggctggaggctggatggccctccgggctgacccacagggctcttgacctcggg
-gaagagcagtgaaagcgaacagcagtgaaagagttttgcctgactcattgccccggctgt
-ggggttctggaagagagctaccatacagctcatgccctgtccatgagaggaccactcgag
-gggaaaggggacaatttgggtctctggcctgcctgtcgcacaagcagtcacttttgttta
-gcatgcgaacagaatatttaatccatttcagccaagcatttacatcctggtactctgttt
-caattgctatagtttgttttaaatctataacttctacaacagctactttggttttatcat
-tgggtatataacgaaagaagatctggttagtggagaacttaggagtgggagaagggggtg
-caggagttgaggaggcaatgaagcacatttcaaaggatcctctggggtccttccctgaga
-cttctgctcctataccatagaaacggtactctggggagcagaggtggtaatctgtactgg
-attacattggttcatctgacaatggggtggtccatccttgctccttggtagtccataagc
-cattagaccagctaaaagttctgttctaggagggcaagattcctagttcatactgggacc
-atcatcaatatcttcccagactaactgatcccagttaacagattttcagtctgaggagag
-ccaggaaggacaaagatacttttctgaaggggagagttgcctctggtttggcagatctcc
-acaggtcatcccaaggcaagcatcaaaagtaatagtttggggcgaacttgttacataaag
-aacgagaagactagcaatagaaggggaaaagaaagagatggaatgtaagaggatcaaacc
-cgttttagctttagcttggttggagttggccctggaatagctgtccatgattctggaggg
-ggtggtgctcttttgacctaggtgtgatgagtccatcctctttctgctgtttgaactgtg
-gtctcggtggttagaagcaacaggtagggtccttcccaagccagttcgagtttcccttcc
-ctccaacttttgacaaggacacagtccttaagctgatgttggtgtactggaaactgtagg
-ggtggtacctgttctaaaagacctttagttctgagggaagagaaagtggaaaataaacca
-agtatataatttctgagaaactcatcttttgttttgaacataggaatgtcagcagtggag
-tgtaaacagggcaacctacacaacatttcataaggggataagccaacatctctctgagga
-gcagttcagactctcaagagggcaatgggagagcatctatccatggcaaccgagtctcta
-agactaatttggttaggtggccttttttttttttttttttttttttttgagagggagtct
-cgctctgtcgcccaggctggagtgcaatggtgccatctgagctcactgcaacctccacct
-cccgggttcaagtgattcttctgcctcagcctccctagtagctgggactacaggcacgcg
-ccaccatgcctggctaatttttgtatttttagtagagatggggtttcaccatattggcca
-ggctggtctcgaactcctgacctcgtgatccacccgccttggcctcccaaagggcttttt
-ttttttttttttgacagggtctctctccgtagcccaggctggagcgcagtggcgcgatct
-cggctcactgcaagcaccgcctcccgggttcacgccattctcctgccaaagggctttttt
-aaaaaatagtttggttcattctttccactcttcttgatgaaggtaggtgccagggagtat
-gatattcccatgttatatccagtatctgggctaatttcttaatgacatgtacagtgaaat
-gagtcttattatctgaatcaatgttttctattaatctaaacttgagtataagattttcaa
-ctaatgccctgtctatgttattatcagttgtacttgaaaaggaaatagcttctatccaat
-gagtaaggtgatctactatactaataaatacttcagatgatcagttggaggcatctctgt
-gtagtcagtctggatactttggaatggccttaagcctggactccttcccccaaggggtaa
-tgttttactaaacaactgtctgtaacctgtttggccagggtataaatcctatgcacccat
-aaactctgatgaatgtgtcacacgaggcttggggcctccaatgggtcctttaatgcagtt
-ggaataagacttccctcataaggggtttggataacatttctctctggtctagcaatatcc
-attttccttctgaattctctttagcacctatttttattagtttttaaaccaaagaaagcc
-aaacaccattttatatttgataatgcttcctgtgtgattttataccagataagctaaatt
-tcacctttatattagtgtgctattaatgttaaactcaattttaataaaatcttgtagaca
-tatttattcaattttaatgtctgaccataaggtaaaattgttatagactctttctaacgc
-ttcataatttttgttaaagagcaggttagtactttaagaaaaacctgttgtgcttttatt
-ttaatgtccagttcacagaaaaactggatgacacccctttaactttagccaatatgttta
-cacacagaaattcctttacaattaacatttcaaaacttgcttaaaccttcaaaacaattt
-tttaaccttttaatgtaggtaaaaatccacattcttatgccttcttataatccttttacc
-aaaagtatattttactttccttacacgccttgaacataaactgtttcttcaatagtttta
-cattcaggaggcctaattacttttaaattatacaacatttcttgcataaattccctttta
-taacattttccacgactttcacagaccatctttgacatgacttaaatttctgacttgtga
-acattcctttctttaaacaaccagttaatttattttaggatgagaatttaccgtataaga
-ttctttttacataaattctccTTTTTTCTTAATGTcaaagatgataattgttttttccca
-aagcaaacttccctcatgtctgtggactagactgcctaaggccacaagattagaagttag
-gataatacatgttacactgttaacttttagcaaattttacttctgttgaaaaccttgtaa
-gtttggaattttaattaaaggaaggcttttttggtgtccggggacatggacaatagttat
-ttttttggcaactgaaggttatttaatacttgggtgattaattcctcgtggaccgggtct
-tgacctttgctattaataagacctggttcagtccaaatttttccacatgcatgagccact
-ccaaaggcacactgaaaattggtatagatggttccttcctggttctgtaagtactttaag
-gcttggctgagtgcaaacagctcacacgtttgagcagaccaattattaggcaattttcct
-aactctatctctacACCTTTAACCATTGTTCCCTATTTCTCATTCAAACTTGGACATAAC
-GGTATgtgaaaaagagcctcttgtgactgttacctctttacaatggaatgttaagcaacc
-cctcagaaagtagggagtagcaaatcaaatctttgtaactacatttcagcctttgccggt
-tgaaatgtcagagccccggcatcagaaagtggtcaactcaagggctgataagaagaattt
-accaacaacagtataggtttgaaaagtaaagttttattagaaagaaagaacattgcagaa
-gagtgcagcgaggtgcctcagcaagaggggactgagagggctgtggtggatattccttag
-gcgcatatatgaaccttaaggcaaaagcttgagggtaatttggagcatactagccacgta
-ggttatgataaatggttacatttgtagttattttggtgccttaatgtcagcaaggattgc
-acagtgagtttcgcatagaaattctggttactacaaaatttttgaaagacccctggaacc
-agatgccaactttagatatgtcgatgaagagtcaaactctgtaaaatatttgaagagatt
-tattttgggcgaaatacgagtgaccatggcccatgacacagcacttaggagatcctgaga
-acatgtgcccaaggtggttcgggcgcagcttggttttatacattttagagaggcacgagg
-catcaatcaaatacatttaagaaacacattggtttggtccagaaaggtgggacaactcaa
-agtgggaacttccagactataggtaaatttaaacattttctggttgacaattggttgaat
-ttgtctaaagacctgggatcaataggagggaaatgtttaggttaagataaaacattgtgg
-agaccaaggttcttttgaagtcttatagtggctgtccttagagacaatagatgacaaatg
-tttcctattcagacttttaaaagctgctagactcaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaggctgccagactcttagttaatctcagagggcctggaagaaaaagatctagctatat
-taatagagattatttacagatgcagatttccccccacaaaggacagctttgcagggccat
-ttcaagatatggcaaagaaacatgtttttgggtaaaatatttttgctttcttctttgtca
-cataatgttatgccagagtcagattggaaagcaagtcagatatataggtttaaataaaac
-ccatctgatgagaatttatggtttgtagggcatgactccccagaccccttagataggaat
-ttcagcaaaataaaaagatcagagcttagtcctcataatcaagaaataaccataaaaatg
-ggcaaccctatggagtagccattcttttattcctttactttactaataaattttcttttg
-ctttgcactgtgaacttgccctggattctttcttgtgtgagatccaagaaccctcttgtg
-gggtctggattgggacccctttccggtaacGATTAtacttctaaattcctcagataagga
-gtttttgtctcgggctgcttcagggtcaccaggtgatttttgctctcctcaCCCCTTTGT
-TCAGCTTCTCTGTTTTTGCCTATGTACACAACTCTCAGATTTGGCCACtggggagagcaa
-agttatacctggtgaccatcaagcagaccattcagagacaaaactccttatcagaactcc
-ttattcagaagcaattagacttccctattatctaaagcaggcatctcattccaggcttct
-ttcccccaaatttataagtaactagaatttctatgcatctctggaatgcatgcatatcaa
-aactcacggtgcTgaaaatttgcatctgtaaagaatctctattaacatagctggatcttt
-ttcttccaggccctcccaatcctgaagagattaactaagagtctaacaccttttgatggt
-ctgaataggaaacatttgccatctgttgtctctaagggcagcgaacataagacttcaaaa
-gaaccttggtctccacaatcttttatcataacctgaacatGAGTCTCTTGCTGATATTAA
-GGCATTGAAACCACCTTTGCAAAATTATTACAGACAGcatcattgcaggaatccaggaca
-ctggagtagaggatgttccatacctttgggttacaagccacccccaggaccttgtcctca
-ttgcaaacaagagggtcattgtgatatggaaggggggcaggggagtgctgggtacagaaa
-tgcagggttcctggtgagggctccacccttgggcctgtgcccacagacctaagtaagaac
-aggcactcctgttttcatgcctgaatgttgtattttccaagaccactctggcccaccaca
-tccccttcctgtgtccataTtgttaaatatgaattctaaatttctcttcaaagaattaat
-atgtcagtatgttcaattctttgacttctgcttttaaatttaacttcctcgtaaagcaac
-ctttttcgattacctgctccaccctgactcattccgattacctgctccaccctgactctt
-gcaggttacttgctacctgctccaccctgactaattattctccaccctgcataaccattt
-ttttttcccgccaaagcactcatcctgtcacactctttaaatctgccaattggaattagt
-ttagcctgtgcagtctaaccctagccaataggggaacgacacagcagcaggagccttgtg
-cattagggataagaacccctttccctcccttgtccaggtgtacactcaccattgctctac
-ctgtgagggtgcacccttctatagaagtaccttgccttgctgagaattaaaaagaaaatt
-ttatattcgagtgctatttcttttgcggcactgaaactttatatgtaacaatttgggggc
-tcgccctgattacatttccctctggggcagtctctggttctctcttgtgaggagcgctcc
-gccccctgtggcggcctcagccgggagaaatcagaacccacccagtgcgaggaacaaccc
-gagctgtcagcaacaggggggaagaaaactggccggcaacctagcttaaagaatcctcac
-atactgcagcgacgactctgcgcacagagcaaggaaggagaagccgcgggagctggtaaa
-gtatttccttggtggtcgggaccaaggtaagaaagccacgggggtggtgggcggtgaagt
-actccttggtcagggtggcttagaggttaaaaagaggtgagacatccccattggcggaga
-ttgaacctcacacaaacctccagtagtagaaaaggcaagaaatttccagtggggaaattg
-agcctcaccccaaaaggtaagaaatttccagtaagggaaagtgaaccttgaaccttatcc
-caaaaccatcaagatgggaaatatcccaagcaagacagggagcaagggggataaacatgg
-taacaaagatatccctccagatggccccctaggtctcatgctaaaacactggaaggataa
-tgaaaggatacacataggaaaaagcaacaaatggtaaaatattgctgttttatttggagt
-cagggacccatcctcagtccctcaatcttctggtcaaagtttgggtcaaatgagaatgta
-atgtgtcagcttctaatccgatacgttaatgataaaagtccagtgtctcaagaagaacta
-ggctatgccctttgttggaggcaaggacctgccctcctatttctcttaaaaataaatagg
-gaagaacccaatctggcacctcaaaatgaaaagtcagaggagccagctctcatgcctaaa
-gactccagtgctgcatggtatcccctagaccatcttcccccactcagtgtccccaaactt
-tcccctcagacagccactgccacctcagatcaccactgccacctcagatcctgttccaaa
-ttccccctctactcacgctatccctcctccttataaccctgactgttgggaattaccatc
-ccaccagcctgttctctcccaacctaaagacccctctctaaaaagactccagcgtgaggt
-agaacaatgtaaaaaagatattcagaatttcctatttccctccgtacctaagaggtcagc
-ccctaccctcttccctttgaaagaggtaccacaagttgggggcgggggggggggcattga
-ctttgtaaatgctcccttaatcagttcagaagtccagaattttacaaaggagcttaaact
-gctgctggacgacccttacagagtggcagaccaaattgaccaattcttagaacctcagtt
-atacacttgggtcaagttaatgtccatcttgggcatcctcttttcagggtaagaaaggag
-tatgattcttaggtctgctatggtagtttgggaatgtgagcaccctcccaatgaaaacgt
-tcctaccacggaccagaaattccccgcccaggaccccccatgggaaaataacaatgcaga
-tcaccgggaaaatatgcaggacctaagggagataataaaaggaattcaggaatcagtacc
-ctgaacccaaaatctttctaaagcatttgatatacaacaggaaaaagatgaagggcctat
-gagattcctagacagactgagggagcaaatgaggcaatatgcaggcctcaatttggatga
-tccccttgggcaaggaatgttgaaactccaatttttcactaaaagttggccagacatttg
-aaaaaaaaagttacaaaagatagacaattgggaagaccatcccttaagtgagcttctcag
-ggaagctcagaaagtgtatgtgaaaagggacaaagtaaaacgaaacaaaagacaaaactt
-atgtttttcaccttccaacagatggctccaaacccaggtacttctagatagagtttccag
-ggagccagaaactataaagggtccgaatcctcttttaaagaaccccagcctccatctgga
-ggaccagggtccttgtctaccaagccccctaaagagtatgggggagaagggttaaagaat
-cccagaactaaggggaggaaggacaaaataggtgctatagatgtggaagagcagaccact
-tcaggagaggatgttctgaactaagaaaggagaaagaagccctttcactcatgactttca
-aggaagaatagcggggtcaggggctctgtctcttttatcttgagtcccaccaggagccct
-tgataaatttgggggtgggacctaaacatgagcttatcacctttttagttgattcggggg
-ctgctcgctcctctgtttccccccatctaatgttgtctccttcttagaggaacttttagt
-ctccagggtaaaaggtgtaggattaagagcaaaaattttagaaagcactgaagttagata
-ccaggatcgctcagcttatattcagttcttgtttatccctgaagcaggaactaatttact
-ggggaggaatttaatgttaaagttgggcataggtctacaagtcagcccaagaggattcct
-cacctcattaaacctactcaccaccgcagatgaaaaatatattaatcctcatgtcttgac
-caaagaaggaaaccaagggaaactctaagtccctccgatccacatcaagctaaaaaaccc
-aggggaagtagtaagaaggaagcaataccctattcccctagaaggtaggatagtgttgaa
-acctataattgaaggccttatttaggatgggcttcttgagccctgtatgtctccttataa
-catcccaatcaagaatcaagaaatcaagactgctaccagccagtcaagaaattagatggg
-tcataccagctagtacaggaccttagagctatcaaccaaatagtccagagtacccaccct
-gttgtcaccaatccttacaccattcttagcaagattccatataatcatcaatggtttact
-ataataaatttgaaggatgctttttgggcatgtcccctggctgaagatagctgagatata
-tttgcttttgagtgggaggatccatactcagggtggaaacaacaatatcgatggaccgtc
-ttgccccaagggttcacagactcccctaaactttttggccaaattttagaagaagtacta
-gaaaaagttgtcatcccagaacaaatatgccttcttcagtacctggatgacattcttata
-tctggtgaagatctagagaaggtaactgacttctctacacatattcttaaccatctgcag
-tttgaggggctatgagtctcaaaaagaaagcttcagtatgtagagcctgaagttaaatat
-ttaggccacttaataagtgtaggcaagcgaataatagggcctgaatgaattgagggaatc
-gtgtccctacccttgcctcaaactaaacaagaactcaggaaatttttagggtcagtcaga
-cactgtcgctaatggattgactcatatacactgccccgtaaactgttctatcaaaaactt
-gcccaggagaagcctaaccgtctcctgtggacttctgaggaagttgatcaaatcgagagg
-ttggaggaaaggctcataactgcccctgttttaggcttaccctccctagaaaagccattc
-cacctttttgctaatgtggacagtagggtaccttcgggagtgctgactcaagaacacaga
-ggccgccagcagcccgtagccttcccatcaaaggtcttagacccagtcacttgtggatgg
-cctcaacgcatccagtccatcgctgctatggcaatactaggtgaggaaagcagaaaatta
-accttcggaggaaaattgacattaaacacgcctcaccaagttagaactatcttaaaccag
-agagcagtgagatggcttactgacttgagaatcttaaagtgtgaggccattctgttagaa
-aaggatgatttaacattgaccactgataattcactcaacccagcaggtttcctaacaggg
-aatccacatctaaggagggaacacacatgtttagatttaattgattaccatacaaaggtt
-tgaccagacctgggagaaacccccttctggactggacggcacttactcatagatggttcc
-tcccaggtgattgagggaaaaagacacaatgggtattcagtgattgttggagaaactctt
-gtagaaataaagtcaggaaaattgcccaacagttgatctgctcaaacgtgtgagctgttt
-gcactcagccaagccttaaagtacttacagaaccacatctatacagattccaggtatgcc
-tttggagtggcccatacatttgggaaaatttggactgaacgaggtctcattaatagtaaa
-ggtcaagaccttgttcacaaggagctgttcacccaagcattgaataatcttcagttgccg
-gaagaaatagctattgtccatgttcccggacaccagaaaagcctttcttttgaaagttga
-ggaaataacctagcagatcaggtagccaagcaggctgctgtgtcttctgaaatgcgtgtt
-tttcacttaactccctacctccctcctcctaccataatccccattttctcttccaccgaa
-aaagagaaactaataaaaataggtgctaaagagaattcagaaggaaagtagatactgcca
-gaccagagagaaatgttgtctaaaccctttatgagggaagtcgtatcccaactacatcag
-gggacccattttgggccccaggccatgtgtgacgcagttctcagagtttatggttgtata
-ggaatttataccctggcaaaacaggttacagatagttgcttagtatgtaagaaaactaat
-agacatactataaaatgattacctctcaggggaaggaatccaggctaaaggccattccaa
-agtatctaagttgattacacagaaatgcctctgatagatcatctaaaatatttactagtg
-atagtaggccacctcactccctgggtcgaagctatccccttttcaaatgcaacagccagt
-aatgtagttgaggccctaattgaaaatatagtacccaggtttcgactaacggaaaatact
-gactcagacaatggaactcatttcaccacacacattattaaaaagctattccaaaatatt
-agacattagatgggaacaccatactccctggcacccaccctcatcagggagagtagaaag
-aatgaattagactctaaagaaccacttaaccaaattagtcttacagacttggttgccatg
-gaccaagtatcttcctatcaccctgctgagaatttgaactgcaccatggaaagacattgg
-tctttctccttatgagatgctctatggattaccttatttgcactccactgttgatattcc
-tacctttgaaacaaatgatcaattccttaaaaattatatacttggtctatgttctacttt
-ctcctctcttaaaactaaaggtctattagcacaggcaccacccttggagttcctggtgca
-tcaacattagcctggggatcacgtcctcatcaagagctggaaagaggagaagcttgagcc
-agcctgggaaggtccttacttggtgctcctaactactgaaaccgcagtccgcacagcaga
-gagaggatggactcaccacacccaagtcaagaaagcaccgccccctccagagtcgtgggc
-catagtcccaggggaaaaccctactaaactaaagctaagaagaatttaactccctttcat
-ctattctattactcttttttctttcctcactctattgctgaccatatagttattaacata
-accaagtcaatttcacctcaactattgcatttgatgcttgccttgttatatcctgtgggg
-atttgtcaagccaaagaaagctctctacttcagatacctctgtccctcctggctctcctc
-agactaggcattagtgaatcgggaccatttaatctggggagatttctataaagatcccag
-tggcaaccaggagtcttcccccagtgatgtagagcttttaagccatagttggtccaaagt
-tctgtggaccattaaagagcaaggatggattgccccaaccagtttttgtaatttcctaaa
-ttcatacattcgttttactaaagggacagtgcccactaactctcagctaaaccagtgcaa
-ccctatacaggttattattttgagcccacaaaattcttcctcttttctaagctggttccc
-ttctttaagccagttttatggtatgggggctgaagtttcagggacagaccctattggatt
-ctttgaaatgcacttctttgatcccctgctgtctgcacctgcctctgagcctttttccaa
-aacctctcacaacggaaccattgttcctcctctatctaacgacaaggccaagatagcgat
-ggtagaagttaaagacttaaaacaaactggcaattgagacaggataccaagatgtaaatg
-tttggttggaatggatcaaatatttcatccacacgttaaacaaaagcaattgttatgctt
-gtgcgcacagcaggccagaggcccagattgtcccctttccactagggtggtcctccagtt
-gaccgggcatgggctgcatggtagctcttttccaggattctatagcctggggtaagaagt
-tgtgccaagctctctctctgctatatcccgaagtttgacaccttgtgggtcagcccccaa
-gggccatccagcttccatctcccaacactaagtttacttcgtgtctctcatgacagggag
-gaaacttagtgttccttggagacctgaagggatgcagtgagcttaagaacttttggccag
-gcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcggatcacaa
-ggtcaggaaatcgagaccatcctggctaacacgatgaaaccccatctctactaaaaatac
-aaaaaaaaaaaaaaaaattagccaggcgtggcgtcatgcgcctgtagtctcagctacttg
-ggaggctgaggcaggaggatggcgtgaacccaggaggtggagcttgcagtgagccgagat
-cgtgccactgcactccagcctgggcgacagagcgagactctctctcgaaaaaaaagaaaa
-agaactttcaaaagcttaccaatcagccagcccttgttcatcccctagcagaagtgtggt
-ggtattgtggtggacctttactggacactctgccgaataactggattggcacttgtgctt
-tagtccaactagctatccctttcaccctggcatttcatcaaccagaggaaggaaaaataa
-gacatcgtaaagtgagagaagccccttatgggtctttagactctcacttctgtttagacg
-caattggggtcccatggagaatacaagatcaatttaaagtctggaatcaaatagctgcag
-gatttgagtcaatatcttggtgggtgacaattaataaacatgtagattggataaactaca
-tctattacaaccaacagtgatttagtaactacactagagatactgttagaggaatagctg
-agcaagtaggggctacaggccagatggcttgggaaaataggacagccttagacatgatat
-tagcagaaagaggaggggtttgcatcgtgactaaaactcaatgttacaccttcatcccaa
-acaacattgcccctaatggaagtataacaaaggcattgcaaggtctcactgctctatcca
-gtgagttagccagcagctcaggggtaaatgatccctttacaggatggctagaaaaatggt
-tcggtaaatggaaaggaataatagcctcaattcttacctccctcgtagctgtaataggtg
-tacttattcttgtcgggtgctgtgtcataccatgcatccgtgggttggtgcagaggctcg
-tagaaacggcacttgctaaaacctcccttaactatcctccaccttatccagagaagcttc
-ttcttttggaaaatcaagcagaacaactaagtcaagacatgttaaataagtttgaagaga
-aagccgtaagaaaaatgcaagaggaggaagttgttaaatatgaattctaaatttctcttc
-aaagaattagtatgtctgtatgttcaattctttgccttctacttttaaacttaatttcct
-cataaagcaacctttttcgattacctgctccaccctgactcactccgattacctgctcca
-ccctgactcactccgattacctgctccaccctgactcactccgattacctgctccaccct
-gactcattccgattacctgctccaccctgactcattattctctgccctgcataaccatta
-ttttcccgccaaagcactcaccccatcactctctttaaattagccaatcggaattagttt
-agcctgtgtggtctaaccctagccaataggggaatgacatagcagcaggggccacatcct
-tcagggataagaacccctttccttcccttgtccagatgtgtgctcaccattgctccatct
-gtgaggttgcacccttttatagaagtaccttgccttgctgagaattgaacagaaaatttt
-atattcgagtgctatttattttgaggcacagaaactttatatataacaatataaacccga
-gaccttggcgggcacacacacaagcagctgaatgtcaagaggaGTGGAGGAACGGAGTGG
-CAGAGAATGGCAGAGAGCGCTGGAGAGTGGCAGAGCAGCATGGCAGAGAGGGAGGGAAGA
-GGCGTCTGAACTTtggaagacacctccactcctcaataaagtctccgcatgtatcacttt
-tcaaacagttcatgtgacctgattaatccaggatgccagacaagaatctgggGAAgttaa
-cattcaggcatccctggatggcaaggctaaaggagcacactgtaacatatgcccacttgg
-gctccagcacctgtccatctgtgtgttcccccttccctcaggggtttgagcagtggggtg
-accaaacagacgagccacaccccctgttgcatgtcctgcaaggagaatcagggaactctc
-ctgtttcaGttggaagagcaagtgtccctctctctctcgtggtggggagacatctcttcc
-ttctgggctgtcacagccccaacctcaccaacctacctgacaagggagtctggcagaaca
-agggcaagggcagggagaagcacctctaactctattcctggataataatcaagtctctaa
-aagtcatcctggagccgggcacagtggctcatgcctgtaatcccagcactttgggaggct
-gaggcgggtggatcacctgatgtcaggagttcgagaccagcctggccaacatggtgaaaa
-cctaactctactaaaatacaaaaaaaattagctaggcatggtggcaggtgcctgtaatcc
-cacctacttgggtggctgaggcaggagaatcacttgaacctgggaggcggaggtcgcaat
-gagctgagactgtgccactatgctccagcctgggtgacagagagagactctgcctcaaat
-aaataaataaataaataaataaataaataaataaataaataaataaagtcatcctctagg
-gctttgaggccgttcaagcccctattttttccatctctgtggatgagcctctgttaaatc
-tgattgtggctgaacaagagataatgttcctaatagatacagggaccagttattcagctt
-taagtgtttattacagcccaatgtgctagtcctccatttcattacgggtattgataaact
-tcagtgaggctgtttcacactgccactcccttataaaatgaaaggctattcctttaccca
-ctcttcagtcctgccaagctgccctgtttctttattaggtcacaatttgctcacaaaatt
-acaagcgaatttacagttaagacctcacattctagctgtaattaactcacacttcaccaa
-aaaagttgctgcagtctatagaacatcacattttaaaacaagtgccggccaggcgcagtg
-gctcacgcctgtaatcccagcactttgggaggccaaggcgggtggatcacttgaggtcag
-gagtttgagaccagcctggtcaatatggcgaaaccccatccctactaaaaatacaaaaat
-tagctgggcatggtggcacacacctgtaatcccagctactcaggaggctgaggcagggga
-atcacttgaacctcggaggtggagattgcagtgagccaagatagtgccattgcactccag
-ccctggcaacaagagtgaaacgctgtctcaaaaaaaaaaaaaTTGTTCTTTTGTTTGCTT
-TTCTTTCACCCTGATTCCTCCTTCCCCCTTTGCCGTCTTCAGTACCAAGCTACAAAGCTA
-GGGGTGGCTGAGGACAGTAAACAGAGTGTGGtcttagctggctttttccctcctgggaag
-ttgttgtttaggatcctaattctagttcagaggtgcattctaaatagtcttctccattgc
-ctttccccccaaaattaatctcacacgttggcttgtgtgtgcattcacgtgaggaactga
-actgtcattttcatagataaataagagactgagtttccttagctccaaagagaaagggca
-ttttgctcctcccagcagaaaggtacccgagtgactggggggccttgcgggagtgttggg
-gggttgagcccccagcgacatgaagtgattctgcagggaactcacaacaaaattagtttt
-aaaaaggctcgtccaggaagcacatataggaactggtcactctgagttttgagccctctt
-ggaggtgctagacctccggagaaaacactgagacacctaagagggtggtggcaaggattc
-agtggtgacacactgtggagtctcatctgcaaccattacacttcgacctactccacaaaa
-accctaggccacagctcagttactccttaaaagaaagtgggaaacaaataatctaagaat
-aaggaaaaacaaggtgttgacgaaaagagttaaactgtgtaaaatagttgaagatattta
-ttcagagcccaatatgagtgactatggcccgtgacatagcccttaggaggtcctgagaac
-acgtgcctaaggtggtcggggctcagcttggttttgtatattttaggaaggcatgagaca
-tcaatcaaatacatttaagaaacacattggtttgattcagaaaggcgggacaattcaaag
-caggggtcagggtgagggtggcttccaggctataggctataggtaaatcggtaaatttaa
-actttttgttttgttttgtttttttgttttgagacagagactcactcttccacccaggct
-ggagtgaagtggcacaatctcaactcactgcaacctccgcccccatgggtttcaagtaat
-tctcctgcctcagcctcctgagtagctgggattacaggcacccaccaccacgcctggcta
-atttttgtatttttagtagaggcagggtttccccatgttggccagagtgatcttgaactc
-ctgacttcaggtgatccaccggcctcggcctcccaaagtgctaggattatgggtgtgagc
-caccttgcctggtctaaatttaaacattttctgattgacaattggttgagtttgtctaaa
-gacccgggatcaatagaaagtaaatgtttaggttaagataaaagactgtggagtccaagg
-ttcttttgaggtcttatattggctgcccttagagacaataggtgacaaatgtttcttatt
-cagacctttgaaaatgtgctagactattagttaatctcttcaggattgggagggcctaaa
-ataaaaagatctagctatgctaatagagattctttacagttgcaaattttcccccacaaa
-gtacagtttggcaggaccatttcaaaatatggcaaagaaacatgttttggggtaaaacaa
-ttgactttcttcttggtcatgtaatgttatgccagagtcagattggaaagtagtcatcat
-atataatgttaaataaaatccatctgatgagaatttatgatttgtagggcatgactcccc
-agaccccttagataggaatttaggcaagatagaaaaaatcagagcttagtcttctcacaa
-gagaatgaccctcttttaggtaccccattgattttacggcatctctactttgcaagtgtt
-tgtgtaaatggacatattatggtctctttgtgcacaattatgtcaaagacaatttagagc
-ttgaaggttgacctccagctgtaaagttcctaagttctctatctctctgctttcttttct
-gcctgttttaagtctgctattatttttctttctttttttgagacagagtcttgctctgtg
-cccaggttggagtgcagtggtgcaatctcagctcactacaacctctgcctcccaggttca
-agcagtcctcccacctcagcctcctgaatagctgggactacaggcatgtgccaccactct
-tggctaatttttttttttttttgagacagagtcttgctctgttgcccaggctggagtgca
-atggcatgatctcagcaaaccaacgagtttctattaatatctcatggctagagttctgag
-ataatagctataggatctttggttgtatgagtatgtatgtgtgtgtttatgcatacatac
-acttatttcattgtgttttctagccacaggtactgaattggcttaaagttaaagaatatt
-cataaattaataagcctaaatgcttttcaagttcatgtgacttaagtaaaatctttaata
-agctagctttaaaattattggtaaagtaatattagaaatgtcttaaaaattgttagcata
-aatttttgtttgcatttattgatcaagggacttcatatactgccaaatactgtaaggtgt
-caaaatttggcatagggtttgtaaaactacaaaaccgttcaaaacagaatgatttttgct
-tttgtaatttttgataaataagacattgatattggtttaatgaaaacagctaaatcatga
-attatttagtgaaataacaatatatttaatcttaaggtttttacttagcaaacacctgaa
-attcacaggctatcaaatgtttgacagggaaataactttaaatgatgactatcacagttt
-tcataactaacctgggtaaactattaaaataaaatatttaggtaaatgtaatgggataaa
-tacttgtagacaaagttgtcataatttaggatctaaagttatgttaaattaaacaataga
-tatttcattaactgggtttttttaattaaaaaagatattgcaggaaatcattttttttct
-aaaaaatgtgttcttgttaaaaggaggataatttttgtctaattcaaagcttatttaaag
-gttatatataaaataaggtaaaaagaaacaagaaaatatataaagaagttatagaaataa
-aaaagaatttttggtaagaaagcttaaagaaaaataattttacatgagaaagaaccttgt
-atggtacatttttgtcctagaataaaatgactggttgtttaagaaagaggaatgttcata
-caaaccagaaagtccaagcatgtcgtgaatggtctgtttaagttataataagagcattta
-tggaaaaagacccacaaactttcatataatcaagttgtctataattaaagggaaattatt
-tataatgatcttttgagagattgggttttgatattaaaaaacatttatacactaaagaat
-tcattagaacaacattttcttaaggtattgatttacttttaataaattacaagactatat
-atataatatattttttcctgcaaagttcaacttttattgcatctcactgttttcagcttt
-ctctccccttttaaagtacctgaaataataactctatctttcaactcatttttagctcct
-gtaagtttttttattttctcctttgtgttctaactgttgtggcctgacgctaataaatgt
-tttatctttgtggtctaaaggaaacattccttccaacataatatttcctgtagggaacag
-cggttgaaatgcagaaggtgttttgttttccctttgggaaattggcctaataaacagagt
-ttatgctttattgaaataattcctatgtcattattactaagttttggtttgtttagaaaa
-aaacccgagattaaattttttttaattaagattattacatacatgtaaccctctgtatgt
-gcttttaaagtccttgtgccattaagttacagagctttgagtccttggtctaaaaagaac
-accaagtcctgctaaatattaaacactgacagcagttaaaacctcattttctgacctggt
-agaagatgccaatcaaaataaactgtgttcatgagacagaaggccggaaattaaaacgat
-tcaactcctcaaggtctggagactatcaaagaagaggtgggtgcatgagattgtaagggc
-cgattttgagagatcaaatgattataaggccaattttgagagataaaataattgagtttc
-tctataaattaaccattaatctcaaaggcacactgatgcaagactagcatatgggctgct
-gtgtcacgttaacaaggttttcttggagaattaacccactccttaataaaaggttataaa
-agaggttataaaggttataaaaaaggcttgtggaatttttatcttgtggtcaggatgatt
-aaaattttatagattgtttatacattttgaaaaacaaatttaattggcctcgtttttatt
-agggcttattgtttaggcaattaagtcttctctctcaaagaatcaaggtttttgcctttt
-ttttgaaatctttgagttatcaagttgagtaaatgaaagacttattttacaatgacttga
-tctgtgatcctattttgtgatatcaagcattttatttatttatttatttatttttgagat
-ggagtcttactctgttgcccaggctggagtgcagtgctatgatcttggctcactgcaacc
-tccacctcctgggttcaagcgattctcctgcctcagcctcccgagtagctgagattacag
-gtgcctgccaccacacccggctaatttttgtatttttcatagagacagcatttaccatgt
-tggccaggctggtctagaactcctgacctcaggcgatccacccaccttggcctcccaaag
-ttttgggattacaggtatgaaccactgtgcccagccaaatcaagcattttaaacttttta
-tttttatttttaaaattttaatattttgagatggagtctctctctgtcactcaggctgga
-gtgcagtggtgcaatcttggctcactgcaacctctgcctcccaggttcaagcaattctca
-tgcctcagcctcatgaatagctgggattacaggcacttgccaccacacccagctaatttt
-tctatttttagtagtgacagggtttcaccatgttggccaggctggtcttgaactcctaac
-ctcaggtgatccacttgccttggcctcccaaagtgctgagattacaggtgtgaaaggtgt
-ttaaaggccactgtgcctggcctttaaactttttatatttgacaaactttccaaagtcaa
-attctaacttggttcctcaatgattttttgatattagtcccctgaagtccaaaagagaca
-cagtcagcttatttggcataaaaatcatacaggaagcattgtcaaatatgtaatagtgtt
-tggctttctttgggctgtatttgtataaatatgttattggcatatgttccaaaattatgg
-gaaaatcctataattatgaatgacttagtatatgttattaatcattatcattattatgta
-aaattattgtatgctacagaagtaaccaagtttctttgtcaattgtgtctttaagtatga
-cttttctaaaacttttgtcatccacagttgttttacttttatccttttcaaaaggatgat
-tttacaatcagcataggactctgacagttgctgttgaatacaggttttggagatagtgac
-actaaaatagagaaaaaaaatccaacactcccatagagagctgaaatatacatgaatagc
-aagcagaagaggagttaactgcatggactgaactaatagaagactgaaataatccttcta
-tgactttttgcttaaaacattgctaatcctttctttgtttttcagagccaagaaaacatt
-tattttgagcttttaaaaaatttattattattattattattaacaaataaataatcttct
-ttctttttttcttttatctttctctgcagggcaagttctgtatttatagcttttaacaat
-tgaggaaattatactcctataaacaaaatttggagcatatttctctctatctggtttctc
-taaaatttggaaactagttgggagtattcttaacttatagcaatatagttatctgcacaa
-gtacaataagaatctgttttcttttgtaagaggacataattggggacagtggtgatttta
-ccaaggttttgactggaacaacatgctatcagatgcagactcctttaaggaatcaaagtt
-gacttacagagctaataaaagcatcttgggaaagctggcctcctatcttgtctacacagt
-ccctgtacaggttcctgacctgtggtaagtaaagagtgtcactttctaacaggcccagga
-gcccaaagtcttcctgaggtgaggaattcatccaattaatacaggtatttgcaggcacag
-gccgggcttaagacattaaagtcgaatgtgagattacttatggaataaagttccagcaaa
-gccaattaaaaaaaaaacaaggagcctatatggcaaataattattcttgatgattttatg
-caaatactccagccaaatataataagacagaaacttattttgcaaatgaattttgttcta
-taatttgtcctcagtgaaaggggactggagagagaaaaaattatgtttcaaaatcaccta
-tagtacacctgttgttagattttagtctcacttagtgtttttaaatttttattattttct
-atagtttggactaaactctaaaatttttcctggtcacaagtccccaaaataatttttttc
-attttttttcttttttcctttccttttccccccacattttttcctgattagaaatcacca
-aacattaaactgtgctttcctaaagccctgtgaactaaagctagacaatctatttacata
-cataagctactttcatacctgcctactggtgtatgaacttcagagtaatatggcctatat
-tgatttcccaggattattgttgttgttgttgtttttctcctttcctcccccattttctct
-taggacgtgagacttcacaacctgctaaagcgagctttcctaataatgtggaacctacct
-gtctatgaataaactgtcctagtcatgagagatcagacaaaacctgagaccagaggctaa
-ttttcttctaaaatgcttttaaaaagaaaaggggggaaAtgtgaaaggaaaataaacttg
-ggaccctcaaatcactaagccaaaacgaaaagtcaagctgggaacggcatcgggcaaacc
-tgcctcccattctaatgggatagctaaataagatagctacaaagattttaaaaagctaca
-tacctccctcacaattttcccacaaggaaattccttgtgtacctagaacagacagaactc
-aaagtcatccctctgctcatgggagacaaatgcacatctgatggcttcctttgccctatt
-gcttcgctaagccagactaaggcataagtgactattcctgcaagttgcatattcagtgga
-gggctaatcagaaactcaaaagaatgtaacaatttgtcctttatctacctatgacctgga
-aaacccctccccacttcaggttgtctcacctttctggatggaattgatgtacatcttacg
-tatttgctgactgatgtctcatgtctccctaaaatgtataaaacctagctgtgccccaac
-taccttgggcacatgttatcaggacctcctatggctgtgtcactggtgtgtccttgacct
-tggtagaataaattttctaaattgattgagacttgtctcagataactcttgatttgcagt
-aagtagcatttctaaacatctctggaatgcatgcatattgaaactcattatgcaaccctt
-gctgacatcaaggcaggaaaatgtctacaaatgtaatcatttagcgtgacctatgtggct
-aatgtggaccaaattatccttaagctcctgctttaaggtgcataaatgcccctgaggaaa
-aatccaccttggcactctccatcctatcttgctgagattcttgcctgcactcttctacag
-agttctttctttctaataaaactttccttttttcaaaccaatactattatccataaattc
-ttcttctttttttgtttttttgaaacggaatctcactttgttgcccaggctggagtgcag
-tagcatgatcttggctcactgcaacctccacctcctgggctcaagtgagtctcctgcctc
-agcctccagagtagctgggattacagacgtccaccaccacgtccagctaatttttgtatt
-tttagtagagatgaggtttcaccatgttggccaggctggttttgaactcctgacctcaaa
-tgatccacctgccttggcctcccaaagtgctgggattataggtatgagccaccatgccca
-gcagtaaattctccttactaatccacgagtggaccactttccaatgctgaggctctgaca
-cctcgctgggcaGCCACTTTTGATTATTTTGGGTTGTCAGGGCTCAGGGACACAAGAACT
-TGCTCCTTAGGGGAGCTGGAGGTCTAGTAGGGATTGCTTGTTCTCCATCAGGCCCCTAGT
-AGGGAGGCCTCTCCTGTCCCCAATCCCTGACTCCCAGGGATGCTCCCCTCCAAACCACAG
-caggaagttcctccttaggtcagacccacagccctgatgctgtggtctCACTGCAGGTCA
-TAGTCTCACAGGGGCCTCTTATAttattttaattttaattttaattaaattaaattaatt
-ttttttttttagatggagtctcgctcttatcgcccaggctggagtgcggtggtgtgatct
-tggctcactgcaacttctgcctcccaggttcaagtgattctcctgcctcagccacctgag
-tagctgggattacaggcatccgccaccatgcctggctaatttttgtatttttagtagaga
-cagggttttgccatgttgaccaggctggtctcgaaatcctggcctcaagtgttctgcctg
-cctcagcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggtcttatatta
-ttttaattttaaatttaaGAATACATTCTTAATATCAACCTTCAAAGACTCCCTGTTGCT
-TACCAAGTTAAGAAAACTACTTAAACCTCACATATAATTCCTTTCTCAACTGGGACCAAT
-AAACCGTGACAGCTTTATtgaagggggccagccccttcacacctgtgggtatttctcgtc
-aggtgggatgagagactgagaaaagaaatagacacagggacaaagtacagagaaagaaca
-gtgggcccagggcactggcgctcagcatacgaaggacccgcaccggcgccagcctctgag
-ttccctcagtatttattgatcatgatctttactatcttagcaaggggagtgtagcagggc
-aacaggtggggagaaggtcagcagggaaacatgtgagcaaaggaatctgtatcatgagta
-agttcaaggaaagatactgtgcccggatgtgcacgaaggctagatttatgtttctcttta
-cccaagtatctcagtgtagcaaagagcaacagagcagtattgctgccagcatatctcgcc
-tccagccacagggcggttttctcctatctcagaatagaatgaatgggaatggtcggcttt
-acacagagacattccattcccagggatgagcagagaagccttcctcttatctcaactgca
-aagaggcctccctctttcactcctcctcctcagcacagaccctttatgggtgtcgggctg
-ggggatggtaaggtctttcctttcccatgaggccatatctcaggctgtctcagttggggg
-aaacgttggacaatacccaggctttcttgggcagaggtccctgtggctttccacagtgca
-ttgtgtccttggttaacagagaatggagaatggcgatgacttttaccaagcatactgcct
-gcaaacatattaacaaggcacatcctgcacagtcctaaatccattaaactttgatccaat
-acagcacatgtttctgtgagcacagggttggggataaagttacaagttaacagcatctca
-aagcagaaacaatttttcttaatacagatcaaaatggagtttcttatgtttccttttcta
-catagacacagtaacaatctgatttctctttcttttccccacaCTTTCTCACGTGttctt
-tctttctttctttcttttcttttttgagatggagtctcgctttgttgcccaggctggagt
-gcagtggcgtaatctcagctcactgcaaactctgcctcccaggttcaagtgattctcgtg
-cctcagcctcccgagcagctgggattacaggcatgcaccatgacgcccagctaatttttg
-tattttcagtagagacgggtttcaccatcttggccaggctggtctcgaactcctgacctc
-aagtgatccacctacctcagcctcccaaattactgggatcatatgaatgagccaccatgc
-ctggccCATGTTTTTCTTGTACTTTAGGCTTTGCTACTTACAACCAGAACTGCTTACCAT
-TCtgtcagaagccttccaaccagggcaactccatcttgaataggggctgggtaaaataag
-gctgagacccactgaactgctttcccagaaggtcagacattcttagtcacaggatgggat
-aggagtttggcaggactggtatcacaagtacaggtcacaaagaccctgctgataaaacag
-gatgcagtaaaagaagccggccaaaatccaccaaaactacgatggggatgaaagtgacct
-cgattcgtcctcactgctcattatataggaattataatgcattcgcatgctaaaagacac
-tcccaccagcaccatgagaatttaccaatgccatggcaacgtcaggaagttaccctacat
-ggtctaaaaaggggacgaaccctcagttctgggaattgcccatccctttcctggtaaaac
-aatgaataatccaccccttgtttagcatacgatcaaggagtaactataagtatgttcagc
-tgagcagcccatgccactgccctgcctatggagtagccattattttattcctttactttc
-ttaaataaacttgctttcactttactctatggattcaccccaaattccttcttgtgtgag
-gtccagaaaccctgtcttggggtctggtttggtacccctttctggtaataATTCTGTAAG
-TATTTGTAGTACGTCTGAGCCACCAAAATTTCcatactgatccttccattagaatatcct
-ttctgcctgtctctttctggcaggatctgatccatatttcaaagccagtctcaaatgcca
-ccttttccaaagaaacctatcctTATATCTTTATCTAATACAAACAGTATATATTGGGAG
-CCTAAGAAATGCTTGTTGCATACATCAATGAATGAACCCCAAACCAATGTATTTCTCCCT
-TCCTTGTAATCTCCAGAAATGTTTATAAACTTTGTTGTTGTTTAtttgtttgttttattt
-ttatttttattttgagatggagttttgttcttgtcacccaggcgggagtgtaatggcgcg
-atctcggctcaccacaacctctgcctcctgggttcaagtgattctcctgtctcagcctcc
-cgagtagctgggattacaggtgtgcactaccatgcccagctaatttttgtggttttagta
-gaaatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcaggtgatcca
-cccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccTGTT
-GCTATTTATTTAATATACTTTATTTTTTTGAGCGATTATAAGTTTATTtttatttattta
-tttatttatttatttatttttgagacagggtctcattgtcacctcttgcccaggctggag
-tgcagtggcacgatgttagctcactgcaacctctgcctcccagagtcaagtgatcctgcc
-acctcagcctcctgagtagttgggaccacagatgtgcaccaccacgctgggctactattt
-ttatatttttagtgcagatggggttttgccatgttgctcaggctgatcctgaactcctga
-gctcaagcaatctgcctgccttggcctcccaaagttctggaattacatgcgtgagctact
-gagcccggccTTAGGTTTACAGAACAGCATTCCACCCATGTTATTTATGCAGGGGAGCAC
-ACCACACACATCACTTTGCAGCTTCCTTTCTCCTCTTATATGTCTTACAGATCTTTCTGT
-GTTCTGTACATTGAGACACTCATTCATTGGCTTCACTCATTCATTTGAATTCattccttt
-gttcaacagatatttatcgtcagctctatgtcaggcactatgagaagtgcttgggatata
-aaactgaacaaaataaacaaagtcctttccattggagagatgacattctagtgtaaggag
-atagacaatagataataaatacaacaaataaataaatacatggtttagtatgttataaga
-tgctttctgtaggaaaaaagtgagagggacctggagtggagggaggaccgagtggggaca
-ggtgcagggtgggggcagccagtagagcccctctgaggaggAGTGGATCACAGGAGGATG
-ACTGGCAAGACCTAAAGGTGGCAAGCTGTCTCTGGTGCTGGCTCTGAGAGCAGGATAGCT
-GGAGTAGAGTGAGGGAAAGGCGAGGTCAGAGGTGAACCTGCAGGGCAGGTGGGGCTCCTT
-CCGCTAGCgcatggtgttccattatccagatgcaccaggacaaatgtcgcccactgccat
-tactaggtgcttaccatgtgccatcaagaacaataccgcaggccgggtgcggtggctcac
-gcctgtaatcccagcattttgggaggccaagatgggtggatcacttgaggtcaggagttc
-gagaccagcctggctaacatggtgaaacctggtctcgactagaaatctaaaattagccta
-gcgtggaggcgcactcctgtaaacccagctacttgggaggctgaggcaggagaatctatt
-gaacccaggaggcagaggttgcagtgagcctagatttcgccattgcactccaactgggca
-agagcaaaaatctgtctcaaaaaacaaacaaaaacaatactgcaataaacattctgtcag
-tctgtcattttgcccatggacagaatatctgcagaattaattcccggcagtgaacttgAG
-AGAGATCACCCAATTGCCTTCCAAAGGAGCTGTGCCTGGACCATGGGTTTCAGCACAAAG
-TGCTGCTCCCTCCAACTTGTAGACTCTTCTGGCAGGTCACGGTGGAGCTCACATTCTAGC
-GGGAGAGTGTCCAGGGCAGAGATATTCCATTCCGTGTCTTTTCTCCCAGGGCTCGCACAG
-AGAGGGTTCACGCGGTAGTCAGTAGGTGGGCAGTGCTTGGTGAAGGCATTGATGGGTGGA
-GGGATTGAAGGATGAATGAATGGATTAGGGGCTGACAGTGCCGCTGCAGTTACTCAAAGG
-AGCCACCAGGAGGCGCAGGGAGCCCACATTCTGGAGACAAACCTTTTAAAAAAAGCATCT
-GGTGACTTAACGACCTTTTCACCAATGGCTTGTGTGGGGCCTTAATGCTAGGGTGAGAAA
-AAGGTGGGAGATGGAAGAAAGGGGAGTGGGTAAAAGGACATGTGGGAGAAGAAGGCAGAG
-AGAGGGCCTTCTGAGGGGGCCTCCACGCCAGGTAAGGACCGTTTAGCTCCCCTAAGAGCC
-TGCAGCATTGATGCAGATCCCAGCAAAGCCAAAACCCCCTTATGCCCACAGTTGAGCCCA
-AAAGCCCAGAACAGAGGGGAAAAATAAATTTCAGGATAggccaggtgaagtggcttacgc
-ctgtaatcccaaaacttggcgaggtcaagtaatcccaagtactttgggaggctgacaggg
-gaaactctatctaaaaaaaaaaaataaGAAAAGGAATTTCCAGGATAAATATGTACAGTA
-TAATCCCATTTATGTGAAAAAAAAAATCTCCACAAATAAATTCCTTtgtgcgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtttgtgtgtgacggagtctcagtctgtcgcccaggctgaagt
-gcagtggcacgttctcggctcactgcaacctccggctcccaggttcaagcaattctcctg
-cctcagcctcctgagtatctgggattacaggcgtgtgacaccacacccagctaatttttg
-tatttgtggtagagacggggtttcaccatgttggtcaggctggtctcgaactcctgacct
-cgtgatctgcccgcctcagcctcccaTAAATTCTACATATTAGTTTGGGGAGTGTGTATT
-TACCACATACACATCTACAGGGAAAATCTGGAAAGGTAAATGTCGAATTGACAACAGTGG
-TTACTTTTGTTATTGTGTGTGTAGAGAGGGGCAGGGGACAAAAAGGAAAATGAGGAGTGA
-TCAAAGGGGACTTTAATTTTCTTTTTTTTTTTTGAGACAGAGtctcagctcactgcaacc
-tctgtctcccaggttcaagtgattctcctgcctcagcctcccaggtagctgggattacag
-gcacccgccaccacgcctagctaatttttgtattttattttagtagagacagggtttcgg
-tttcaccatgttggccaggctggtctcaaactcctgacctcaggtgatctgcctgctgcg
-gcctcccaaagtgctgggattacaggcgtgagtcactgcaccgggccCCCAAAGGGGACT
-TTAGACTAAACTGAAACATTTTAACTTTCCAGGAATCTGTAACCCTGCTATTATATAACC
-ACAAATTAAAAATTACTTTaaaaaatgaaaaaaaaaaaaaaaaaaaaaaggctgggagcg
-gtggctcacacctgtaatcccagcactttgggaggctgaggcaggaggatcacgaggtca
-ggggtttgagaccagcctggccaaaacggtgaaaccctgcctctactaaaaagacaaaaa
-ttagcagagtgtggtggcacgtgcctgcagttccaactactcaggaggctgaggcaggag
-aatcgcttgaacttgggaggcagaggttgcagtgagcctagactgcgccattgcactcca
-gcctgggcaacagagcaagactccggctcaaagaaaaaaaaaaaaggaaaagagaaaaaA
-AAAGGAACAATAACAACAACaaaaattaaatgctatcttgtgttgcatcaatagaagtct
-tacgtgcagctcaagggaggtgacagccccctctgctctgctcagaccacacctgggacc
-tcctttcctcttcttggccctgtcccgtgagaagaataatgacagcctaaggcatgCTGG
-GGGTTGGAGATGGGGGGAGGCTGGGGCCATCTGCACATGATACAGATCCAGGAATAGTCC
-CTTTACCCAAGCGGGAGAAACTGGGCAGGTGAGCAGCTTCCAGGTGTGTGGATGGCAAAT
-GGATGCCAGACTTTAGGATAGGAATCCAGGGGTGCAGCGGATGGAAAGTCCAGCCCAGGA
-TGGGGCATAGTTTTCCCACCCAGCTAGGGAGGGAGGGTAGGGGCTACTCTGGGGTGTCAG
-GAGTGCCGAAGCCTGAGGTAGGCGCAAGCCAGGCAGCATGGCAGCATCCTTCCAGAGGGT
-GTTGTGCAGCTGTGGAAAACAATTGCTGGGAGGCCGGCAGGGGCAGTGGTGGAGGAGACC
-AGAGCTTAATTCTAGGTGAGTCACAATAGCCTCATCTGTAGAATGAGTGAGGGGTGGGGC
-GTAGTTTCAGAttttttttttttttttgacacgtagtttcgctcctgttgcccaggctgg
-agcgcaatggcgcaatctcggctcaccgcaacctccgcctcccgggttcaagcgactctc
-ctgcctcagcctcctgagtagctgggattacagccatgtgccaccatgcccggctaattt
-tgtatttttagtagagacggggtttctccatgttggtcaggctggtcttgaactcttgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtcagccaccgtgcccCACCA
-GTTTCTGACTGAttttcttttttttttttttttgagacggagtcccgctctgtcgcccgg
-gcgaagtgcagtggcgcgatctcggctccctgcaagctccgcctcccgggttcacgccat
-tcccgggcctgggaccacaggcgccgccaccacgcccggctagtatctttttttattttt
-attttcaatagagacggggtttcaccgtgttagccaggacggtctcgatctcccgacctc
-gtgatccgcccgcctcggcctcccaaagtgccgggatcacaggcgtgagccaccgcgccg
-ggccCAGCTTCTGATTTTATGCAGCTGGCGGGATCTTGTTCTTGGTCCTTTAAGGCGACC
-GGAGGGATTGCAGTTTTAAAAACTCGCCAGCAGAGGTCGCCTTCTGACGGATTTGACCAA
-AAAATCCATTCCGGTGGGAAAGGGGAACCTGCGCCTGCGATtctctctctctccccctct
-ctccctctctctttctctccccccctctctctctctccctccctccctctctcctcctac
-tcctccctccctccctctctctgtctctccctccctccctcccgctctctcccccctccc
-cctctccccctccctccctcccttcctccctctctGtctctttctttgagacaaagtttc
-actctgtcacccaggctggagtgcagtggcacgatctccactcactgcaacctctgcctc
-ccggggttcgtgattctcatgcctcagcctcccgagtagctgggattacaggcgcccgcc
-accacgcccggctaatttttgtatttttagtagagacggggttttgccatgttggccagg
-ctggtctcaaactcctgacctcaagtgatctgcctgcctcggcctcccaaaCTAAGATTC
-ATTTGTTGACTAAGTGAATAAAAGGGGAGACATTGAAGAGGGGGACCCgactggatttgg
-gggtgaaggtggagttgagagtgactttgaggcttctgcttgagcaatgagtggagggtg
-cctctcctgagctggggaaactggggcagCACTGACGGAGGGGACACAGCTACAGAGGGG
-AGAACCCTCTCCTGCCGGGGCTGCGGGTTACAGCCTGCACTGCGATTCTCTGATCTCAGG
-GACCTCAGACTTCTGGGGCCCTGTCCCCTACCTCTGTGTATGACCCTAGCTGGCTGAGGG
-CTGAAGGCTTGCTGTTGGCTCTTTCTGCACCCTCAGCCTTCTCCTTCCTCTTCCCTCTGC
-AGGACTCTGTCCTGGGTCCTTAGGAAGAGTCCAGGCCCCAGGACAGGGAAGTTGGGTCAG
-GCCTGGACCTCACATTCCCTGCCTGTCCCATGAGGTGGACAGTGAGAGGACAAATGCCTG
-GACCCCTGGCCCCAAACCCAAGAGCAGATGTACCGGAGAAGAGCTTCTTAGAGCACCAGG
-TGCCAGGGCTGCGGTGGAGAATCAGGGGGGCCCAGGGGAAGGGGCTGCAGATGAGGGAGG
-AGATAGATACGGAGGGCCTGTGTGCCTCCCAGATACAGGGCTGGCTTTCCCAGCCCAGAA
-GGTTCTTTCTGCCTTTCCCAGTCTTCTTCCATTCTCATTTCATGTTCACACTTTTGGCCA
-TACCCAGGGTCAGCCATGAAGATTGTTCTCAGAATGTtttctttcttccttcctttctct
-ttcttttctttctttcttcctttctttctttcctttctttttctttcttctctttctttt
-tttcttttcttctttctctctctttctttctctctctctctctccttccttccttccttc
-ttttctttctttcttctttctttttttgaaacagagtctcactatgtcacccaggctgta
-gtgcattggcacgatcactgctcactgcagccttgacctcctgggctcaagtgatcctcc
-cgcctcagcctcctgagtagctgggaccacaggtatgcaccaccatgcccagctgatttt
-ttaattttttgtagagatgggggtctcactgtgttgctctggttggtcttaaactgctgg
-gctcaagtgatcctcccgccttggccttccagagtgttgggattacaagcaggagcagca
-cacctggccAATGTTTTATTTAAATCAACTCACTTAGGTTGAAttagaataattttagac
-acacagaagagtgtgtctatataattttgaattatatacccaacactcagatataacatt
-agcattttgccatatttgcttcatctatttctttctgaaatattttaatgtaaattacag
-atatcatgaattttcatccccaaatactttagtctgcatCAGTCAAAGATATCTAATATT
-TAATCCACAATGGATTTCCCCAGTGGCAATTCCCCTAAATTGTGTTTTACAGTTGACAGT
-GGatttattgtaaaaggaaactcgatataccaagtgacaagcaagttatcttctgttata
-aatagaaaggatccctggaaatggacacagtgtcaggcccagagctgtgggtggagacct
-gctctctgtttgacataaataggagatcagtggctactaaatctgaagacagggcagcag
-caaagaacattttctcacggatgtgatgagacttgaaagggactcagaaagggggtcact
-ttctccaggttggggtaactgttatttaagccagggttcatCTGCAGCGTGGGGAGCCAG
-AGGGTGACCCCTTCCCTAGGTGATGGAGGTGGCTGAGGCTCCAGAAGTTTCCAGAGAAAG
-ATCTGGTGTTCCTACAAGGCCAGTGGCAGGGGGAAGGGCACTAGACAGTGGGGCTGGAGG
-GTGTGGGCCTGTCCCTGCTCTGATTTTGGGCACTGCACTTTTGCCTGTAAGAAGGGGATA
-TGTGAGGCCAGGACAGGGTCTCCTACTCTGTCCCCACTCCCACGCCAAACAGGGCCTTGA
-GGACTCTCGCGACCTCCATGACCCAGCTTCCCTCCTACCCCAGCCCCAAGCCTGTTTTTG
-TTCCCCTCCCTCCctcctgcttgatctttgagcctcagccaggatgttacctcctcctag
-aagcctgccttggtccctggaatggattaagggactctctcctgggccccacagctgccc
-aggatcactcagcactgtagtgccctgttggcctttgcctccctccagctgtggacgtac
-aaagcagacagcgaatctgtcttgctcaccactgtacccccatcccctactgcagcacct
-ggcacatagcagtagtgcggcacacttgttgaatgaataaGGGATCATTACTACTACGCT
-TCCCACTCATAAATGTCTGCCTCTTCGGGGGGCTCAGAATGCACATTTGGTCCTTCATTA
-ACTCATTTACTCACAAttttttttttttttttttttttgagacggagtttcactcttgtc
-gcccaggctggagtgcaatggtgtgatctcggctcactgcaacctctgcctctcaggttc
-aagcgattctcctgcctcagcctcccgagtagctgggattacaggcgctagccaccatgc
-ctggctaatttttgtatttttagtagagatggggtttcaccatgttggccaggctggtct
-cgaactcctgacctctcaggtgattcacccacctcagcctcccaaagtgctgggattaca
-ggcatgagccaccgtgcctggctcatttactcacaaatatttactgagcacctactatgt
-cccaagcagtattctaggcactggaaatggggcaaggctgctgcctctgtggaacttata
-ctggggtgtgggaggcaaagaaaaacaagcaaacatacatatgaaataatttaagatgcc
-actcgtggtgggagggactgacaggagctgctgtggaagagagcattaggagggccttgc
-tgaggggtgactttatttcagctgagaggtggatgagaaggcacctgcaggggaagaaga
-accaggggaagggtgttcctgatggagcaacagcctgtgctaaggccccaaagtgagcac
-cagctgggcgctgagggacagaaccaggcacaggctcggttagaggaggtctgaggtccc
-agaggagacaagagaggggaaggatgggagggcaggcctgagccgcagaaggccagtgga
-aggttctgagtgggaagaggatgggataggagttatattctgaaaggtccgcctgtgctg
-ggtggaggatgggtggggacaggcaggagcagcccaggctctgatgcagcctccaggcag
-agatgGACCAGGGGAGCCCATTTCATATCCGGCCCCTGTGGAGGGTCTGAGGGTGTTGAG
-CAGACAGGCCCTGGCTTTGGAAGTCCTGGGTGTCTGGACCCGCCTGCCTGTGGGGCCCCA
-GCAGAGAGGAAGGGAGGCGGGGCTCCCAGTGCCTGTTGACTCATTTGCATCTGATTTGCA
-TGTGAAGCAGAGAGTCAGGTTGAAAGCTGGGAAGGCCTGTGCCAGCCCTGGGTAGAGGGT
-CTTGGGTGTTAGTTCCCACAAAGACTCTGTCCCAGGCCATGACCTTCCTGTTCAGGAGGG
-GCTCTGCCTTCCCTTGCCTCCAACGCCCCTCTGGCCTGGCCCTGCCATCTGGGGCTGGGC
-AGTGCCCACGGGGACAAGGTCGTTTCCTTTTAGGAGAGGTCTGCATGCTATGAGGACAAA
-GGCCAAATCCCCACCCTCGGGAACCTCCTTCCCCAGCAAAATCCCATCTGTCAGGCTCAG
-CCTCTGACCTTCGACCTCTCTGTCAGCACAGGCTGCAGTGTTGGGGAGGGGAGGGTCCCC
-ACCCCCAACCCTAGGGGAGACCCAAACCTCTCCCCCCAGCCTTCTCCATCTGTCCCCTTC
-GGCTtctgccacctgctccgtgtgatccaggccaggtcacctccgctttctgggccttgg
-ttcccccacgtgtccaatgtgggTTTCCCAAATACCAGTGACTTGTGTCAGTCCACTTTT
-GTAATTGTAGCCAACTCCacttactatttcttaagtgaacttactctccttcacttaaat
-agatttaatttaaaaagaaatgttataccagctctgtaaatggaaaaccagtttcatctg
-ccacaagtagaaacataataggaaaaaataatgaaatggaaataaaacaatgttactcta
-gtctagcCTCaagtgaaaaaagtcagacacaaaaggttacatttatatgattgtctagaa
-aatgcaaaactagagagaaagaaaacagaccactggttgccagggttggggagagggagc
-tgacaatatcaaggggtgcagaaactttttagggtgatccaaactgttttttgatgatga
-tggtggttacagattgtatacatttgccaaaaatcaccaaagtgtacattcaaagttggt
-gagttttattttatgtataaaccacctcaaaaagacaaaTTTTAGAGAAGAAAACAAAGA
-AAAATGCCGGTTTAGCCCCAAGTCTGAGGCTTCCTCTCTGTTAAACAAATTAGCAAATAG
-AAggccaggcatggtggctcatgcctgtaatcccagcactttgggaggctgaggcaggag
-gatcacttgaggtcaggagttcaagaccagccatggccaacatggtgaaatcctgtctct
-acaaaaaatacaaaaattagctgggcgtggtggcgcatgcttgtaattccagctactcag
-gaggctgaggcaggagaattgcttgaacctgggaggcggttgcagtgagccgagattgca
-ccaccgcactccaccctgagtaacagagcaagagactccatctcaaaaaacaaacaaaca
-aacaaggaagagaaAGAGGGATTTCTCTCTCTGTCTCTCACCAACTCTCTAACCCTCCCT
-AGTTCcatgcaccaaggaaaagctatgtgaggacataggagaaggtggccagccacaggc
-caagaagagagccttcaccagggactgaatcagctggcacctccatctggtacctctagg
-ctccagagctgtgagaaatagatgtgtgctgtttgagccacatagtctctgatattttgt
-tttggcagccggagcagactcatgcCCTCTGATCTCATCATTAGCATAATGCctgtttat
-agaaccatgctgtgggcaggctctgtgctaaaagctttgccagcatcatttcagagactt
-gatgtgacatcttacatcgtaggggaaattattgttcccattaaagatgggCCCACAGTG
-TGGCTAAGCCAGTGGGGCATGTCCTCAGACCTGGAGTGCTCCCATAGGAAGCTGGGCCCG
-ATTCTTTCTGAAGGTGTGAGCTGGAGGCAGTGATGGTGGTTTGAGAGGCACGGGCTGTGG
-GGAACTGGATACTGAGGGCAGTCCCTGTGTCCCAGGGGAAGCACTCTGTGCTTTCAAGGG
-GGGCACTGGCAGAGAAGGAAGTGTCCCTCATCACATCCTGGAGACCCACCCTCTGGAGAC
-AGTGTTTTCACGAtttcttttctttcttttttttttcagacagggtctcactctgtcacc
-caggctagagtgcagtggcacgatctcagctcactgcaacctctgccttctaggttcaag
-taattctcctacctcagcctcctgagtagctgggattacaggcacccgccaccacgccca
-gctcatttttatttttttatttttcgtagagacagggtttcaccacgttggccaggctgg
-tgtcaaactcctgacctcaaatgatctgcttgctttggcctcccaaagtgctgggattac
-aggcatgagccatcatgcctggccATGTTTTCACTATTTCTATGGACCGTTTCATAAGTG
-TTGTGTGGACATAGGgctccagggttaaatgtgtttgggaaatgtggtgtaagcaaagag
-aaagaagtttccactctaatacttctcagagactttaatgtggagataggcatggcgaat
-ctcTCACTGCGGGACAAgtgggcaagagaagtgtggatgctgccttctgggcactcacag
-ttggtggaggagacagccaacatgcaagcaggggccacaccacatgtctggaggttggaa
-cgctatgcagagagaccacaggaaccatgggggaagtggggagggatttcccagaggaga
-tgacatttgaacaaagatgcaaaggaagtgtggaaggaggtaagggagagctgtatgact
-gtctgggggaagagaaacccaagcagagggaacagcaagcacaaaggttctgaggctcaa
-ggttgcttggtgcatttgacaagcagaccagcgccattggctggagctagctgggccgag
-tgggagggtgataatggatgaggtTGACCACGGTCCGCTCCCAAAGGCCATGGAATTCAG
-AGCATACTGGAGAGCCCTTAGTGGGTTTGGACAGACAGTGATACCTTGGGACACACAGCC
-TCATGAGCTCATACTGACCAAACAAACCACCCAAAATAGCAGCAGAAACAACAGCCACAG
-GGTGCAGAGGGTCATTCAGGGTGcctctcacaagcctgggaagtaggcatgtgatatggt
-ttggctgtgtccccacccaaatctcatcttgttttgtaactgcttcaattcccatgtgtc
-gtgggaggaacccggtagggggtgattgaactgtgggggcaggtctttcctgcgctgttc
-ttgtgatagtgaaaatgggtctcacgagatctgatggttataaaaatcggagtttccctg
-cacaggctctcttttttgcctgccgccatccacgtaagatgtgacttactcctccttgcc
-ttcggtcatgattgtgaggcctccacagccttgtggaagtccattaaacttctttcattt
-gtaaattgcccagtctcgggtatgtttttatcaacagcgtgaaaacgaactaatacagca
-cggttaactcccattttacaggcgaggaagctgaagcttagaaagatgaaagaatttgcT
-TGTGACCCCGAACGTTCCCTCTGGCTGATGCATTGTTCCTACCTGCTCTGTTTCCTTGTT
-TATGAAGCTTGCAGGCTCCAtggtcctcaaccctggctgctacacactggaataacctgg
-ggtggcagactgtgtctccccaggatggccacaccaatacatctcacatcccacatgctt
-ggccaatagcatatgacagatgtgactgtgggttacttctaaagctaggccataatagcc
-atcgcaaccccaccgtgatctctgggattgctagttctgagggaagccagctgccatgtc
-ctgaggttactcaagaagccctgtggagtaggccatttggggagggactgaggcccccag
-gcaacatctgtcccaacttgccagtcatgttagtgaactacccttgtccagccttcagat
-gacACCTCATGAGAGGCCCTGAGAGAGTCTTATTGTCCCGTTCACCATTCCTGTTGCCCT
-GTGGCCAGCTAATCAGCTTGTGGTGGTTTTCATTTCTTTTTTCTTTTTGCCATTAATAGC
-AATGCCAggctgggctcagtggctcatgcctgtaatcccagcactttgggaggccgaggt
-gggtggatcacctgaggtcagaagtttgagacaagcctggctaacatggtgaaaccctgt
-ctctattaaaaatacaaaaattagccaggtgtgatggtgtgcgcctgtaatcctagctac
-ttctcccaagtagaagggcgtgattcttctcatgcctcatgctgaggcatgagaatcact
-tgaacccgggaggctgaggctgcagtgagcggtgtttgtgccactgcacttcagcctggg
-cgacagagtgagactatctcaaaaaaaaaaaaaaaaGTAGCAATGCCATAGTAAGTATTC
-TTCTAATTAAGCCCTTCTGAATCAGCTTAATTATTTGCTTAGGGTCAATTTCTAAATGCA
-CAGTTGCTGGATCAGAGTACAAGTCCACTGATACAGCATTTAATTTTTTCAAAGAATTGT
-GACTGggccgggcacggtggctcatgcctataatcccagcactttgggaggccaaggcgg
-gcggatcacctgaggttgggagttggagaccagtctgaccaacatggagaaaccccgtct
-ctactaaaaatacaaaattagctgggcatggtggtgcatgcgtgtaatcccagctacacg
-ggaggctgaggcaggagaattgcttgaacccgggaggcagaggttgcggtgagctgagag
-ggtgccagcttgggcaacaagagtgaaactccgtctcaaaaagaaaaaaaaaaaaaaaag
-aaTGTGACTATagctggccgtggtggctcatgcctgtaatcccagcactgtgggaggcaa
-gatggtcagattgcttgagtcaaggagtttcagaccagcctgggaaacatggcaaaaccc
-tgtctctacagaaaaattagctgcgcatgggggcagacacctgtagtcccagctacgtgg
-gaggctgaggtgggagcatcacctgagcctgggaagtcgaggctgtagtgagctgtgttt
-gcaccaccgcactccagcctgggcaacagagtgaggccttgtctcaaaaaaatttaaaaa
-ataaataaaTGTAACTATATTCTCCTTCAGTAGCAACATCTCAATTTACCTTCTCATGCA
-CAGTGTTTGGAAGGACATATTTTGGGATGAGTTTTCTTTTACTTCACTACCTTATTTTGT
-TCTTTCATAGAATGCCTTTAAAATGTTACTTTAAAAAAATAGATAATACCTTTACAAGGT
-ACAAAATCCAAAAGGTATAAAAATGttttctttttttttttggagacagagtttcgctct
-tgtcgcccaggctggagtgcaatggtgcgatcttggctcgctgaaacctccgcctcccgg
-gtttaggtgattctcctgcctcagcctcctgagtagctggaattacaggtgcccaccacc
-atgccctgctaatttttgtattattagtagagatggggtttcaccatgttggccaggctg
-gttttgacctcctgacttcaggtgatccacccaccttggcctcccaaagtactgggatca
-caggcataagccaccacgcccggccAAAAATATTTTATAAAAGTCTTTCCCCCACCCCTT
-TCCCCTCAGTCAGCACAAGTAGCCACCACTGGGACCAGTTTCTGGTGGATAAATCCAGAA
-AAGTTCAGGTGCAAGTAAACACACATAGAGAGAACACCCTTTAAATTAAATGAAACTAAA
-GAAAACAGAGCCATAGGTGCACAGGAGACAGAGAGCTGACATCTGGGGCTGATTGCATCT
-TGGTTTCGAGCTGAGTGGCAAAAATACTGCTAAGGTCAACGTTCTGAAGGAGGCAAAACC
-CACACGCAGAACCAGCCATAGGCCTGTCAACAAGGCGAGATGTTATCATTGCTCATGTGC
-TGGGTCAGGATAAGGCCATACAGACCGCCCAGTTCTCTCTGATCTGGGTGTAGTTAATGA
-CAGTTTATCCGCCTTTTTCTTCTCTCTCACCACTCCCCATGGTGGGGGAGGAGAAGGACT
-GGGAGGACTTGAATACTCTGAATTGGCACCAGGTGCTTAATATAGTCCTGAAAATAGAAG
-ACCAATATGCTGTTGGCACATAAAGATGCCCACAATTCTAGAATCTGAGTGCGCCCAGAT
-GATCTCTCTTTACATGGCCTAATTTGGGATCCTGACAAGTTCCTTCTGCCCTCTGCCTCA
-CTTTCTCAATCTAGGAATGGGCCTCTCGGTTTTTGTTTTGTCTAATTTTAAGCTCTCGGC
-TGTGCATGGCAGAGGCAAACTTGAAGACGCAAGGGTCAGTGAGCAGGGCCTTTATCCAGG
-TATCTCAAATATCTCCCAACCCTGATTAAAGTTACATATCTCAGAGAAGAATTTGGTCAA
-CACCATTGTTGTCATTCCTGGTTAATAACAGGGAAGTTGAGGTctgggaagcaccctagt
-gatgtgttcacatggccatgtgcttctgtaaaatttaccaatgtaaggcatcttaacctc
-attctgttaaaaccactatctcctttcattccaacttccctttgcatcagatgatgttgg
-ggttggtgtgagcagtttgggcatcttgctaaaaggaccttaacatttactttgggttta
-gtgggatatatttatattgtttccagtcacttttgtgaaaaattattactaactgacctg
-gtattgaaatggcttccaggaatatatccataccgagcatactgagctgactcaacttgt
-cgtggcatcaagattcaggatcagaggttatatctcaagatatatgaatggtcctacagc
-actcagttccacaagactgtgaaggagaggtttgaatgtatacacggagccagcagctag
-tttatggaaagtattacagatgtgtttgagacaggcagctaataaaaagaatgttatttt
-tctgcgttttgtaacgtttgtgcaatttctcttttttttttttttttttttggagacaag
-gtcttgctctgtcatctaggctggaatgcagtggtgaaatcatggcttactgcagcctca
-acctcctggtctcaagcaatcctccctctcagcctcctgagtagctgggactataggcac
-gtgccaccatgcctgactaatttcttttttccttttttttttttttttttgagacggagt
-ctcactgtcgtccagcttggagtgcagtggcacaatcttgactcactgcaacctctgcct
-cccagattcaagtgattctcctggctgagcctcccaagtagctgggattacaggtgccca
-ctaccacgtccagctaattttttgtatttttagtagagatgaggttctgccatgttgtct
-agattggtctcaaactcctgagctcaggtgatccaccagcctcggcctcccaaagtgcta
-ggattacaggtatgagccaccatgcctggccagctaatttctttttaaaatttttttgta
-gagctggggatctcgctttgttgcccaggctggtctgaagcccctgggctcaggcactcc
-ttccacctcgacctcccaaagtggtgggattacaggcatgagccaccttattgtggtttc
-ttgtctctttctaaccaaatcttcactttattacttaatttcatatctgtaattttttct
-taaagaggtctccctaGggctggacgtggtggctcacgcctgtaatcccagcactttggg
-aggccgaggtgggtggatcgcctgaggtcaggagttcaagaccagcctgaccaacatact
-gaaaccctgtctctactaaaaatacaaaaaattagcgggtatggtggcgggcacctgtaa
-tcccagctactcaggaggctaagacaggaaaatcacttgaacttgggaggcagaggttgc
-agggagctgagatcgtgccattgcattccagcctgggcgataagagtgaaactctgtctc
-aaaaaaaaaaaaaaaaaaaaaaaaagaaGTCTCCCTAGGCTGAAGCTACCTGCTCAATCT
-TCTCTTGTGTCTTATAGGATCACAGGATCCCCCTTGCCTTACCTCACTGTTACTCCCAAA
-CAGTTCTCACATGTTTACAAGGGAATGTAACAGAGTGGATCAGAGAATTCATTCTGGATC
-CAGACCGAccttagttttctcatctatataatgggaataatagcaggatctctcgcctta
-gatagtcatgaagtccaatgagatgatgtgtataaagccctaacacaatgTAGCAGAGGG
-CACAGGGCCAGGATTGATATTTAGCTGGTCCTCACGGATACAGCAGACTCCCTGTTTATG
-ACAGTGGTTGGCTCTGATTTGGTTGGTGTCCATGCCAGAGTGTACAATCATTATTAGCTA
-TTGATATATTATTAGCTCCCTCCCCTGCCCACCCAGGGGTTTACGCAGTAAGTTCTCAAT
-TATTGGCAATCCAAACAAAGAATAAAAGACACCAGCTGGAATGAAACAGAGAAGCTGGTT
-CCAAATTGAGCAATTCAGACTGACTGCTATAAAATTTCCTCACCTTAAAGGCCCTTAGAG
-TTAATTCATTCTAATCCCCCTAAAAATATACTTTTTTGACATGTTCAAGTATTGGAAATT
-TGGAAAATTCACAAAAACACAAAGAAGAAATTAACTGCTGTGATTATAGATGATTATACA
-CATATACATATGTATTTAATACATATTTATGCTGTACATAGTGTTTTGAAGCATACTGTA
-CTTCAAAAAAATTTGGGAGgggtgcattggcttatgcctgtaatcctagaaattcaggag
-gccaaagcaggaggatcacttgaggccaggagttctagactggcctggggcaacatagcg
-agacccgtagcttgacatggtgatgcgggcctgtagtcttagttactctggaggctgagg
-tgtgaggattgcttcaacctaggttacagtgagctatgattgcaccactgcactccaccc
-tgggcaacagagctagaccctgtctctaaaaaacataaataaaCCAATGTTTAATACTTA
-GCATTTCCCCCTATCTTTAAATATCTTCTAGCTACTTCACttttatttttatctttttga
-gatgatctcttgcccaggttggggtgcagtggcatgatctcagcttactgcatcccccac
-atcccaggttcaatctattctcctgcctcagcctcctgagtagctgggattacaggcatg
-tggcaccacgcctggctaatttttgtatttttagtagagacgaggtttcaccacgttggc
-caggctggtcttgaactcctgacttcaggtgatctggtcgcctcagcctcccaaagtgct
-gggattacaggtgtgagccactgctcctggTAGCTACTTCACTTTTAATGGCTGCATAAT
-ATTCCTCATCAGAAAGTGGGAAAAATTAggctaggtggcgtggctcatgcctgtaatcct
-agtactttgggaggctgagttggtagaattgctagagctcaggagtttaagatcagtctg
-ggcaacatggcaaaaccccatccctacaaaaaatacagaaaataccgggtgtggtggtgc
-acacctgtagtcccagctacttgggaggctgaggtgggaagattgcttgaccccaggaga
-ttgaggctgctgtgagctgagatcctgccactgcactccagcctgggcgacagagtgaga
-ctccatctcaaaaaaaaaaaaaaaaaaagaaaagaaaaaGATAAAGAAATAAATAAAGTG
-TTAATAATTAAAAGTACTTTTAGAGGGTTATGTCATAAGCCTTGACAAGACTTGTTCTGT
-AAAGCTACCCGGCATGCAAAAAGCTCAATTAAGTTAGCTCCTCCACAGGATGGAAttata
-taaccaatccctttcaagaggcattgaagttgtttccattattttgctatgatgaataag
-gctgagcaatattaatctttgctcatatctttggtcatttcctttgtaaatttcgggact
-gctgggtATGCACATTTTAAAATTAActcactcatcatcatgcagttaggagaacagaga
-aaggaaggggcttgcaccgggtcacatagggagttagcgtcaaagtcaggactaggaacc
-agccagggccctctaactGGAGCTCTTCCAGCTGGGGTCCTAGAGGAAGTCCCAGCTGGC
-CGCGGGAGGGAGGAGGAGGAAGGGAAAGAACCAGGCGCCGGGGCTGAAGCGGCGGCAGGA
-AGAAGGTGGGGCCGGCTGGGAGGAGCGGGCGGAGCTGCTGAGCAGCGCCTCTCCTTCGGG
-CGGGGGAAGCTAAGCGGTCGCCTGGCAACCCTGGCGGCGCGCCGTTCGAACGGAAGCGAG
-GAACCAATCAGGAAGTCCGGGGCGAACCATTCTGGTGTGAAGGGGGGCGGCGTGCTCACT
-TCCCCTTCCACGGCGCCCCAGGGACTTTCCCTGCGGTGGGGGCCTTCGACAGTGAGGGCC
-ACCCGCTCAGCTCGACCGCGGAGGGCAGCTCCAAAGGGGACCCCAAAGGTGCCCACGCGG
-GGCTGGGGCCTCCTGGGCGTCGTTGGGAGCGGCCACTACCGGCCCGGGTCCGAGCTGTCA
-GCCTCTCCAAAGCCTGCGCGAGAGGAGCCGGGACACGCCTAGCGCGGGCTCCAGGTGAGG
-GCGCGGGTGGGTCCGGGTGCGACCCCGGGTCTGGGGGCCCCGTTCCCCGAGCGTCTGCTG
-TCTGCTTTCTCCCCGCGTCGTACCTGCGTGTcatttcacagatgaggactctgaggctca
-gagaggcaagtgTCCCGGCCCGGCGAGCTCTGGCGGAGAATCCAGTTCAAGTCTTTCTGC
-CCCACCTCGCAGCCCCCTAGTCTAGTCACATCTGGACTTGCCTTGAGAGGCCCAGACGGG
-CAACTGGTAGTCATTTTCCCAGCGTTTTATCGGCAGGGACCTGTAGACCCCTGGCTGGAT
-CACATATCCCCGCGCCCCACACTGTCCTCGGGATACCCCCTTTGGGCGTCTGTCTTTCCT
-TCTCCGCAGTCCGGGGTTGGACTCGGCTCATTTGGCGCCTTTCTGTCTACGGGGACAGAG
-GACCACTCTTTGGGGATCGGACGGGACTGACATTTCTGGGCTGGATGCAGGGGCAGCAGA
-TTCTCCAGCCCCCAGAGCCGCTGCTGGCCTCTTGGGAATCATCCCCAGTTTGGGGAAGGG
-AATAGAGCCAGTCCCTAAACCAAAGCCACTAGTCACCAGAGACTTTGGAATTGGGAGTGG
-GGCCGGAATCCCCCCAGGTGGAGCAGCTGACCTAGGCCAGACCCTGCTGTGTCTCCtggg
-gacaccccctgccccctaggttgctattgtcagtctccttttgtaggtggggaaacggag
-gttctaagaagttaagccccttttcgaagtcacagtcagacaatgcagtggttagctcct
-agtccctctggcttcAATCTTAGAATCCTTGACACACAGAATCATGCATTTTGAGAGTCT
-TCAATCTCTTCATAAGGGAGTTACATATCCTCTCTCCTCTGGAGCCTGCCCCTGGCTTTG
-GGGGACAGGATCTCCGAGGACTCAGAAAGAAAACAAGGCTTTCTTTTATTCTTTCAACAA
-ATATTATTTATTGACTTCATAAGCCCTGCTCTGGTTCTTGCATGTTTTGGTTTTTTTACT
-TATTAGCAAATGTATCATCTTCTCCCACTGTGATGcaaggcaggggctgaggcaattgag
-ccagtgcaaaatttagggatgcccaaaacctcagtaatcaagaCTGAAACTAACGTTCAT
-GGACCATTTGTGTGTTCTGCAGGCAGGAGGTTAACTCACACAGCCTTCATGAAGTGCAGT
-CCTCCCAtctctctctctctctctctctctctctctctctctctatatatatatatacac
-acacacatatatacacacacacatatatgtatatatatgtatgtgtgtatatatgtatat
-atgtgtatatatatgcatatttataAATCATGAAACCACTgccctgtccctgagttgctc
-tgtgacattgagtaagtttcttcagtctctgggcTGAGCTAAGAAGTCATGATGGTGCAC
-TCAGGCCTGGGCAGAGGGCAGTCTAGGATAGGAAGTGGGCTTGGCTGTGGATCTGCCTCC
-CCCTCCCCTTTCTAATCctgcgtgccaggcccttccccaagaccttgcatgtgttatctt
-ccattctgtcctcactgcaaaatccttcatccccattttgcaacctcaagtgcagaccta
-ggcctagaagatcaaCTTGGTATCAGTGGGCCTAGATGTCCACATCCACACCCATTCCAC
-AGCCTACTCCCTTCTCCCTTCCTAATGTTAGTGCAAGGCCACCCTGAGCAAGGCTGACTC
-CTGGGCAGGCCAGGGCACCAGCGTCTGGGAGGCCTCCAGAAATAGCTCAGGGCCTGGTGT
-GGCTCTGGAGGTGGCCCAGCTGGGTGTCCCTGACCTGGACAGCTGGGCTGAAATTGAGCT
-GGGGCTGCCCTGCTGGCTGGCCCCTTGCCACTGCCTGGAGCCTTCCCAATCTCCTCTGGG
-GCAGGCAAGGGCCTCCCCAAATCTAGGCCAGGCTTCTGCTGAAGGGAAAGAAAGAAGCAG
-GTGGGAGGAAGGGGGCGGGTTGGGTGTAGAATGTCATGAAAATTATAACCTTTGGAAACC
-ACACCTCCCACCCCCTCACCAAAGAATaaaaatcactaacacctcttgagcatttactat
-gttctaagtactttacaagtatgaactcatttaattccctcaactctgtgatataaggta
-attactgctgttcttatttccatcttgcagaggggaaactgagcacaagagaggtttaat
-aatttgcataagataacctagaggtggagtttgaacccagagagtctggctctaaatttt
-acatttttTGGGGGGGGGGGTGGGGTGGGGCAGTGAATGAATtaaaatgtatataaaata
-aaatttaccattgtaaccacttttaagtatacagttcagtggcattaagtacattcccca
-ttgcctctccccccagtgcctggcaatcaccattctactttctgtttgagtgaatttgac
-tactttgggtacctctaggtattataaatggaatcataacagtatttgtcttgttgtgtc
-tggcttatttcacttagcataatgcctttaagtttcacccatgttgttgtatgtgttaga
-attttcttttttatggcggaataatctattctaatattctatgtatatgccacattctgt
-ttatccattcattccttgatggacacttggattgcttttggctgttgtgactaatgctgc
-tttgagcatgaatgtacaaatatctgtttgagttcctgtttttaattgttttgggtatac
-actcagaagtggaattgctgggtgatcctatggcaattctgtttaattttttgaggaact
-actttactgtgtttcacagtgactgcaccattttatgtgtccatcagcagtgcacaaagt
-gctaatttctcaacatcttcaccaacacttgttattttctgtttgtattttttttttggt
-aatggccatcttcaggggtgtgatgtggtgtctcattgtggttttaatttacatttccct
-aatgactaatggtgttgagcatcttttcctgtgcctgttggccatttgttatctttggag
-aaatgtctgttcaagtGACTCTGCAttgttttttttttttttttttttttttgagacaag
-agtttcgctctgtcgcccaggctggagtgcagtggcgccatctcggctcactgcaacctc
-tgtgtcccgggttcaaatgattctcctgcttcagcctcctgagtagctgggattataggc
-ccccgccaccatgctgggctaatttttatatttttagtagagacggggtttcatcatctt
-ggccagtctggtcttgaactcctgaccttgtgaaccacctgcctcagcctccaaagtgct
-gggattacaggcttgagccactgcacccagtcATGACTCTGCATTCTTAACCATTACCTG
-TGCTTCTCTTAGATTTGTAACCTCTGAGAATAGTGGATCAGCTTTCTGGGCTGATGAAGC
-CCTCCCTCAGGAGCTGGGCACTGGATGATCTATTTGGTTGAATAGTTATCATAGCCTGCA
-CTTTGGTGACATTTGTCATGCATGGACCTCATGCAGAgagggaggcactgttgtgagtcc
-tgttttgcagttagggaaactgagatatggagaagttgagtattttatccaaggtctcat
-agctaatcattggtggagctaggatttgaatgggttctggagtccatgctATACCTTACA
-GATAtggccagggggatggagtagtgaagaccactgcaggcagcagaaccagtgtgtgca
-gaggTTTGTATATGGTGGCTTTGGAGAAAGAACAGGACTTGGGTAGAAGTGGTCAGAGCC
-CAGCTTGAATGGGGGTGACTTGAAGTTGGAGGAAGAGTAGGACAGGTCTGGAAAGGCCAG
-GAGCACGGTGAGGGTTTGGGGAGGAGGCTTGGTGCTTAGGGACCCTGTCCTTTTTTTTTT
-TTCtcttctcacaagatatttattaattacaaagggaaaataataactgtacagtggaga
-aatttggcagatactgccttaaccaaggaattggctgatcactaagattaagacaaactg
-ttgttatgagtgggtgtggtaatgtacctatagtcccagccactcaggaggctgaggtgg
-caggattgcttcagcccatctatttgaggctgcagtgagctatggagtgcactccaacct
-gggcaacacagtgagacctcatttctaaaaaaagaaaaaagaagccttctgataccatgt
-actaagaaggacacaacatcacttttgtgttattcttgacagatatgtttaacttTCTCT
-CctttctttcttcctctctttctttcttctctctttcttACTGATATAAGAAAAAGCTTT
-ATACATTTAATATATACCTCTTGATGAGTGGCCTTGGCCTTTGAGGTGGGCTGGGTCCAG
-AACAGCCGGTTGTTCAACGGTATTTCCTCGTGTTTGGTCCCTGAAGGAAGAAAATTGGAA
-GGGTGTGATggagctcatggtccagtgggagagacaggaaacgagttatatttcctatcc
-tagataagagtatctaaaatgacaggatgtaatgagtgctcggaagggaataaaatgggt
-gaaattgctgagggggtctcttggaggagatgacatttgaaatgagatctgaagggggtg
-agggaagaggttccagacagagaacagctggtgcaaaagccctgaggcaggaaagacctt
-atgttcaggaacagcagggagggctttgtggccagagcaggaaagaggttggagataaga
-tgggagatttggacaaggactgagtcctggaaggcctgagggccaagtggggagcttggA
-ttttttttttttttttttttgagacagagtcttgctctgttgtccaggctggagtgcagt
-ggctcaatctcagctcactgcaggGAGCTTGGATTTTATTGTAAGGGAGCCACAGGAGGG
-TTTAAACACAGCAGTAATGAGACTTTATTTCTGCTGGGAAAACATtgccgttattgcccc
-cattttacagcagaggaaaccgagactcagaaccatgaccagggagtgcttcctaaggtG
-GTTTCTCCCTCTGGGGTCCAGCCGACGAGGCAGTAGATTCCTTGGGACTTCCTTGGGGGG
-CACATCTGGTGAGTGGCCAAAGCCCAACACTGAAAACACCGTCTCTTCCACCTCCCCTCC
-CCAGATGTGAgcctgggttccaatcctggctctaccattaatcagctgtgtaattttggg
-cacgtggccttacctcttggagcctcagttttctcatctgaaaatgggcataataatagt
-agccctcacagggtaggtgtgaggattaaattagttaacattttgtagagcttagaacag
-tgtctggtacaaagaaagtgctcagatgagatttgttcttTTCTTTTTTGGCTGTAAGTT
-TATTCAATGTGAAATAATCCTCTCCAATTTTATTGAGGTGGCTGACCACGTCCACGACCA
-CATCTGCCTCTAAACTGGAATTCGGTTGCTGACCCAGCCCCAGCCTCGGCTTTCTTGTCA
-GCACCAGGGGGCACAGAACACCGTCTGTAGGTATCTCTGTCAGCTTCCCGTCTTGTGAGT
-CTTGCAGGTCGCTTACCCTCCAGACCTTTAGGCCGAGGCCTGCCAGTCTCTGGACGGCTG
-CGGTGTAGGGTGGCAGGAACAATCTCCGGGGGCAGATGTAGGGTGGCAGGAACAATCTCT
-GGGGGCAGATGAAGGTAATCACGGAGATACTGGCTACCCTCATTGGTAAGGTACCAGTAG
-AAATGTCTCCAGGCAAACTGTTCCTTCACGCAGCCCCGGGACTTGAGAGACTGCATGGCC
-TTCATGACGTGAAGGTTGGGCACATTCTTGTCTGCCAGCTCCGGGTGCTTAGGCATGTGG
-ACATCCTTCTTGGCCACCATGACTCCCTCCTTAAAAAGGAGTTCATGAATGGCAATCCGG
-TTCTTCTTAGGCATCAGCATCTTGGCAGCTGTAGGGTCCGGGGCTGGGGCTGGAAAGGAA
-GGACTGTTCTTTTCTTTGCTATTACGAAAATCATTATTGTTGCTTTGCTGTTACTACTAT
-TAGCGCCTGAAGGAGCCTTCCCTCCCCATCCCCCATTTCTGCCTCCGTGGAGGGCTAGGC
-AGGGCTCAGCAGGCCATTTGGAGGATGAAGGACTTGTTGCCCCGTCCCCTGTAAAGTCAG
-GGACTGGAGGAGGCTGCAGTGCTGAGGGGGAAGGAAAGCTGATGTGCATCACTGCCGGTC
-TCCTCATGCCCTGTACCCTAGTCCTGGCCCAGCTCCCACAGGCACAGACATGGAACAGGA
-GCCTCTTCAGCCTGAGTGTGGCAGAGGGCTGGGGCTGAGGCCTGGGGGACAGCTCCTTCT
-CTGGGCCTCAGGATTCCCATGAAAAAATGGCCTATCAAATGTTCCTACCTGCAGTGAGTT
-ATAGGACTTGGGGTGGAAGAGGTGACAGTCACCTCCCTCTGGGAATTCCTTCCTGCAGGG
-CTGCAGTCTCATGGGATTAAATGAGGGGGCTCTGGGGATTTAAATGAGTATGGTGCCTGG
-CACCCCAAAATTCTAGTTATTGTTGTTACTATGACGGCTGTTGTTGCCGATGTTAACCGT
-TTTCACAAGGCAGCTGAGGCATGCTCAGGCTCAGCCTGTTCCAGAGGGATGGACTCTACA
-CGTGACAGCATGGAGCACCAGGAGGGTCCCGCAGCCTGGTCAGGGACACACAGCTAGAAA
-GTGGTGGCGTTAAGCCTTGGTCTGGAGGGAAAGTGCGCAGGCTGGACTCCCCAGAgtgat
-tttgggctagtgactcagcctctctcagcctcagtttaccattagtcaaatggggtaaca
-atagaactcaccagatagtgattgttgggaagattaaaatgggttacccgataccaagaa
-aaacactttcccgtgcctggcacaGTGAACATCACCTGGCGGTCGTTCTGAGTGTCAGGG
-AGCGGGGCTCAGTTTGTCCATCTCTAAGGTGGGTGCGCTTGCCTGCCAGAGCCACGGGGA
-CCCCGCGCGCCAGGTGTGCGGTGGGCGGGTCTCGGCTCCCGGAAGAACTTCCCTGGGTGG
-TCCTGGAGCGGGTCGGACCCAGTTCCTGAGCCAGGCCAGCTGCCGGCGGCCGGGGCTCGG
-GTTCTGGCCCCTGCCTGGCTTTCCTTACCCTTTTCGGGTAGTACCTGGACCAGCGGGTTC
-ACTTGCCCGCGGCCGCCGGAAGTTGCGCAAACTCAGCTTGCCGGAGCCCCAGGTGGGCCG
-GGCCGGAGGAGCGCAGGCCAGCGGCGCGGGCGCAGCCGGGTACGTGCGGACCGCGGCGGG
-GGGCGCCCAGCCGGGGTAGGGGGCGGCCCGAGCACCCCTCCACCCCAGGACGGCGGGAAC
-GGGGCAGGGATCTACCTTTCGGCTTCAAGAGGACCGCGGGGATGGTGCCGCTCTCTCCCT
-CATTTGAGAGCCAGGAGGGGCGGCGAGGGGCAAGGGTCACACAGCGCCCTGCTAGCCGAC
-CCCCCATCCCCCGCCACCGGGAGTCCTCAAGCTTTTCCGGAATTGAGGGAGAGCAAAAGC
-CAGCCTGGGGATCTGAGTTCCCCCCAGCCCTGCCCCGCGGCCTCTGGAGGCTGACGCTGG
-GGAGCTAGTGGGGAGGGGGCCAGGTGGGGATGCGCGCCCCCGGGATGCAAGCCAGAAGGG
-CCGGCGGTTGGGGGCATCCGTGGGAGGCATTTGAATCCGTGGGTGGGGCATTGGGCGGTG
-AGAGGAGGCCTCAGAGGGGACATTGAGTCGCGCTTGGGGACTTGGGACCCTGGCTTCACC
-TGGCGGGAGCCGCTGCACCTCCGTTTGCCCACCCGTGACGTGGGGCTGTTGAGGTCAGCT
-CACCGATCAGCCTCTGTCTTGGGCCTGCTTTGTCCGCGGTGTGGGCTGGGACAGACCCTC
-GTGGGGCTTGCTTAGAGACCCCTGCGTGGGGGTGGTCTGTGGACTTGGTTAGTCGAAATC
-TTCTTGAAGACCAGGAGCCTGGTTCGTGGCTCCGCctttttgccagatgccgaggaaagc
-cctcgacctgtttgatctctccatccttatcgtgacctggaggctcaggaaggtctattt
-ttaacctcgtttcacggataaggtaaccgagtctgtaaagaggcgaagctgcttgcgcaa
-ggcgcacagcgggcgggtgggcgagccGAAggccggcgggcccgcggcgccAAACCCGGG
-GTTGGCTCTCGCATCTGTCCCGGCCCCGCCAGAGGGGACCTCAGGGCCAGCAGATGGGGC
-CAGAGGGGCTGGGGGCCCGATCGGGGTCGTGCACGGGGTTTCTGCCCCGGCCCCGCCCGT
-CTGACCTCCTTCTCCCTCTTTATCCGGATGGTGCCCGCAAGGGAACTGCCACTGCGGACG
-GGTTGGACTGGTTTGGGAGGTGGCGGCCTGGGGGTGGGGCAGAGTTTGGCTGGCTCTGCT
-GTGCTCCTTTCCTGTCAGGTCCTTCCCACCTGAGGTCTCCTGGGGGTCGGCCCTGGTGGA
-GCGAGGCTTCCTTTCCCATCCACTCCATCTCTCCTGCCTTGGGAGCAGCACCCAAGGATC
-TATTCCCAACTCATGGCTGCTGCAGAGGTCTCCAGCTGGTGGTTGGGGGCCAGATGGAGG
-AGGAGGGGACAGATATGTTCGCAGACATATTTTGTTTGCTGTATATGCAATGTTTTAATC
-ATTATTATCGAATATGCTGACAGTTAAGAATCTAGAGTTTTTATGTACTCCTGGATTTCC
-AGCTTCCTGGAACAATACACCTACCACCTTGGACCCATATGCCTGCAGCAGGCAGGGTAC
-CTAGATGTCTAGTTCATCCCTGATCACCCAGTTCACATCTGGCTCCCATAAATATttcag
-ttcaataaatttttattgaatattctgccctagtatgtgtctagggcagtatcttgaaac
-tggggtatagtgaacaaaatagccaacccccgcccctacacacacacgcctgccctcatg
-gagctgatattttagggggatagagacaacaaagagtaaaacaaccatacacaaatagag
-tacttgtgcaggggataaggagaaaaggaatagtgccgggagggggtcaggagtgccggg
-gagaaacaggacgtggtattGAGATCAGTGCCTTatttatctattctgggacctgggaaa
-gccacttctctgagtctcagtttctccatctgcacaacgACCCACAGGCTTGTGGGAGGT
-TATAGGGAGGATGGCACCCAGCAGAGATCCCTGCCTCCCCACCCCAATCCAGACTCACTC
-CCTTCTGGATTTTTGGATGTCTAGGTGGGgctgtccaatgtagcttcctaccatggatgg
-aaatgctgtactctgtgctgccaaacacagtggcaactggccacatgtggctattgagaa
-cttgaaatgccactagtgtagctcaggaactgaattttatgtttttatttcatttaaatt
-taaagttaaggttgaatagccacatgtggctgctggctattgagctggacagcacggGTC
-TAGATGGCTTGAACTGTAAGCCTTCTTGGGGAACACCCAGATTAAGTACCCGCCCCCTCC
-ATTTTACAGATGAGAATGTTTGGGACTTGGTATGTGGGTTTTCTTCTGTCCCATCTCCAA
-GGGGCCTTGTGGGGTGACTCTGTGGGCTTGGCCCTTCCTTGGAAACAGGGTCAGGGTTGG
-CTTGATGTCTGGGGCATCAGGTCCTGACACTTGGGTGACCACGTAGACACTTGTGCATCC
-AGGTGTATGCCCTCCTCCCAGGTGAGTACCCATTCCATGGCTGCAGGCAGATCGAGGGTC
-TGCCGGATGCCTCCATGCAGGGCTGTGTGATTTTGGACATTTCCAGCTTCTCTCAGCACA
-GCATAGCTCAGGGCTGATGTTTCCACGTGACAGGCATTTGTGGATCACCGTGGGCCATCC
-AGTTCCATGCAGGAAGCTGACGGATGTCTGGACTCCACTGGGGCGCGGGTGGAGATTTTC
-TTTGCTCCTTCCCTATAAGCTCTGCCCTTTGCCTGGGGCCTGGCATGTCTAGGCGGGTGG
-ATGGCACAGGGCAGCTTCCTGCCTGGATGGGTGAGGGGTAGAGGTGGTACCAGGCTCCCT
-GTGGGGAGTCCAGGTGGGGTGTGGGGCTGGAGCCCTTTTTCTTGGTCATTTAACCCTACG
-CCCCGGTGCCAGCACCTTCCTTTTTGGTGGTCAGGGGCAGAgccacctactcgctgggtt
-aacttaagcaagttgtttgcctctctgggcttcagtttctccatccaaaaaacggggctg
-ttgagaggacctGAGGTTGAGTTGACTGGTGCGTAGCACAGAGCCTGGAGCCTCCCTTGC
-TCCCTTTAGCGCGTGCCTTGCCCTGTCTTTTCTGCTCAGGTTGCCCAGGTCGCCCAGGTC
-TTTTTTCTCTAGCACCTTTTTTCCTCTCTTGGTCTCAGCTGGGCCTGGTTCTCCCGGGGC
-AGGAGGGAGGGGGTGTGGGTGGGGCCTGAGGCCCCGCAGCTGCTGCCTTGTGCCTGCTGA
-TTGGCTCCTTGTGGAGGGGCGTGGTCTCTACCTTATAATAGGGAGGGCGTCTTATCCTCT
-CAGCCGCGGCTGAGCCTCTTTGTCTGAGCGCGCTCGGCTTTTTTTTTTTTTTCTCTCTCC
-TTCCCTGCAGCAGTGGCCGGTGTCCAGCTGCCTACTTTCTGCCCGGATCTCTGGCTCCTC
-ATCTCTCCGGTCTCCGCAGACTAAAGCCCTCGGGATATGCAGCAGCCATGCCTGTGCACA
-CGCTGAGCCCCGGAGCCCCGTCCGCCCCCGCCCTACCTTGCCGCCTGCGGACCAGGGTCC
-CTGGCTACCTGCTACGGGGGCCGGCAGATGGTGGAGCCCGGAAACCGAGCGCTGTGGAGC
-GCCTGGAGGCCGACAAGGCCAAGTACGTCAAGAGCCTGCACGTGGCCAACACCCGCCAGG
-AGCCTGTGCAGCCCCTGCTGTCCAAACAGCCGCTCTTTAGCCCTGAGACTCGCCGCACAG
-TGCTCACGCCCAGCCGCCGAGCCCTGCCTGGCCCCTGCCGACGGCCCCAGCTGGACCTGG
-ACATCCTCAGCAGCCTCATCGACTTGTGTGACAGCCCCGTGTCCCCTGCCGAGGCCAGCC
-GCACTCCTGGACGGGCCGAGGGAGCCGGCCGTCCTCCCCCAGCCACCCCTCCGCGACCGC
-CGCCCAGTACCTCTGCGGTCCGCCGGGTGGACGTccgccccctgcccgcctcgcctgccc
-ggccctgcccatcacccggccctgccgccgcctccagcccagcccggccGCCGGGTTTGC
-AACGCTCCAAGTCGGACTTGAGCGAGCGCTTTTCTAGGGCAGCCGCTGATCTCGAGCGCT
-TTTTTAACTTCTGCGGCCTGGACCCGGAGGAGGCGAGAGGGTTGGGTGTGGCCCACCTGG
-CACGGGCCAGCTCGGATATCGTGTCCCTGGCAGGGCCCAGTGCTGGGCCGGGCAGCTCTG
-AAGGGGGCTGCTCCCGCCGCAGCTCGGTGACTGTTGAGGAGCGGGCCCGGGAGCGCGTTC
-CCTATGGCGTGTCGGTGGTGGAGCGCAATGCCCGCGTGATCAAGTGGTTGTATGGGCTAA
-GGCAGGCTCGGGAGAGCCCAGCAGCTGAAGGCTAGGCGCCACTGGGCCTGGAATTCGCCA
-CAGGACGGATCTTACAGAGGCAAGTGGTCCCTGGACCTCTCTTGCATCCATTCTCTAGAC
-GGCCGTGTCAGAGGCTCCACCCTGTTGTGAACTTGGTATGGAGGCAAAGGCTTAGAGGCT
-GGACCAGCATTGTTGGGCAAGGACTGACTCTCCAAGGGTTTTGTTCTTGGCTTTGGACAC
-CTGAGAACCCCCTCCTCCCCTCCCCCAATACAAGGTTTTTGACATGAGTGTACTCCTGCT
-TAGTTCCTCTTGTGGGGCTGCATTTGCGGTGCTTTGCCCTCCCCACTGTGAGTGAGGGGC
-CAAGGGATCTCCTCAATCCTGTCTCCCCAGCGGCTCTGTTTCCTCCTTCCTTCCTTGGCC
-TCTGTCCTTTGCTGACTTCCTCTTCCTTACCCAGCAGAACTCACCCTGGGGTCGGGGCAG
-TGGGGAGGGGCCTATCCACTGCTCTTCCTAGTCCTTGGCAGCTGGCCTAGGTGGGCAGAC
-TATAGGAGGGACTGGTTAGGAGTCTGCATTGCTTTGACTTCCCTCTCCTTGGTTAATAAA
-CACAAATGCTTGTTTCTCAAGGGCTGGGCCTTCAGACTCTTCTGTGTTCACAAGAGAAAG
-GGTGAGAGAAGTCTTGGGGTGGGGCCATCAAAACAGTAATTGTTCACCCCGAGGTCTAGT
-GGTGGGGCATGATGATAGCGGCTGGCCTGGCTGGAGACATGTCCCCGTGGTGGGTTCTCA
-TAACTCTCCTGGAAGGCTAGCAGGCCTGCCTCATCGAGGAGGAAACTGAGATCCAGCCAT
-GAGTGAGCTGGAATAGAGCTGGGAGTAGGAATGGGGTCTTTCCCCTGCACCAGAAAGGGA
-GCCTGCAGGGGAAAGGCCGATGGGGTGCATAGACTCTCCCCAACCAGGAGTGTTCCATCC
-AAGCCCTGCCCAGTTCCCAAGGGGGCAGGAAGCTCGGAGAGGGCAAATCCTGAACTTGAG
-GTCACACAGACCATAGAGTGAGGATGAGAAGTGGGAGTTTTGGAGGAAGAGAGACTTGGG
-GTGGACGGCACAAAATGAGTGGCctccctggcgatcttggacaagccagtttccctctgg
-gcctcagtGGGAGAGTTAGGCAGCACAGTCCTCCTTGGGTTGGGGCACTGGTGCATTCTG
-GGCCCTTCATGCTATATTCCAATACCTGGGGAGAGGGGAAGGAAGGGGCTGGCACTGGGC
-TTCGAGGCCTCAGCTTCTTCCAGTCTCCCTCCAGGTCAGTTACCTACTAGGACACCCCAC
-CTTGGCTAGTGGAGCAGCTAGGGCTAGAGCTGGGCCTACAAAGGGCGAAAGCGGGGGTGG
-CCTCTCTGGTGCCCCACGGTGGGCGTGGAGAGGGGGTGGGTGGCGCTTCCTTTCACAGGC
-TGCCTTGGCTGCAGCACTCAGAAACAGGAAGCTCTAATGGGGGCCCTGGTGACAGGTTTG
-ATGTAGGTTTTATTTTAAGCATAAAGAGGAGATTTCCGTTGGACTGTTGACAAACATCCA
-CATCAGCCCAGCTGTCCATCTCTCTGTCTGTCTGCCTGTCTACAACTAGCCCCCAGGGGC
-CTGGGATGGGCCTGGGCAGTTTGGGGAAGGAAGGGAAAATTGGGTTCTAGAAGAAGATGG
-TGTTCCAGCTCATGAGACTGGAGCTCATGATACTGGTGGGGAGACAAGCATGAGGAGGGT
-GGTGACCTACCCACAACCCCCCATGGTGCCCAGCAGTTTTGACAATGCAGGAGCTGGGCC
-TCCAGGGTCCCCATGCTGAAGGAGTGATGGTGTCAGGAGAGAGAATCCAGGCAGGATCTG
-CAGACGTGGTGCCCTTTGAGGTGTCAAAGACTAGATTTCCTAGGCAACCCTGCTAGAATT
-CAGGGCTAGTCATTGCCCCTTGCTGTGACCTGGCAGcctccgagtaacccaagaaggtgg
-atgggctggctgcattttacatgtgaagaaattgaggttcagGTCACAGGACTGGTGGGT
-GACACCTTGTTTCTGAAGGAGGGTACAGTGCttgaatcctcaaggtagccttttgaggac
-cagatatattgtcagagcaggaggttgagctcagggaaggatagcgacttgtatactgtc
-acatagcaggtctgcaggacagcctggggtcacactcttgcctgccagacACATCGCAGT
-CTGGATTCCTGGTTCTCCCAGCATGTACCCCACCACTCTTCCTCATCTTGGCAGCCTTTT
-CTTCTGGTCACTTTATTACTGAGCATCTActgggtgcccagcagtggataagacagacat
-ggcccctgtcctagtctggagaagagaatgggcaactaaacattcagcacataaataatc
-atagaatgtAAAGCAGGTATACTTAGGGACTTCTGCCCTAAAACCAGAGCTGTTCCCAGG
-AGCTGGACCAGGGGATAGCTGAAAAGAGAACGCCTTTCCATAAATCCACTGGGAGGGTCT
-GTTGGGGAGAGAGCAGGGAGGGATTCTTGGAAGTGGGGAAGGTGCCAGATTGAGTCTTCT
-CCAATGGTTATGGCTTGGTCTTGGGAGGGCTCCCCCTGTTCCAGGATTCTGGAGCCTCCC
-GCCTTCCCTGCAGGCCTCTGTGGAGGGAGCAGGGCGGGGGGCTTTTGCACTCCTCCCTCC
-CCCAACCCTGCAGCCTTGGGGATCTGTGGAAACAGCCCCTCTATTGTTCTGCCTCCAGTT
-GGAGTGTGAGCCCTCGGAGGGCCTGCAGCTGCTGCCCTGTCTCCTGGGGCTGCCCAGCCC
-TCCGAAGCAGCTCCCCCAGGCCAGCCTGGCCCCAGCTGCCTAGCCCCTAATTAGGCAGAG
-ATGGGATCTGCTCTCTGATCCATTTCCCACCAGCTAATTATATACACGTGGATTtgggaa
-ccaggcaacctggctgctcacttctatcatgaaggtggatgggccctgggaaaggcagcc
-ccccccccacagacctcagtttacccttttggcagaggatggagtGTAGCTGCAGAGGCC
-TGTTCCCTGTCCTTGGTTAAATAGTTCTGTTCCTGCTACTGAAACATTTAAGGAGACCCC
-CCACCCCCATCTTACCTGATATCCTGTGTACAGGGGACCAGGAAAGGGTTGAGGAATTTG
-GCTATAGGTCCTTGACTCTAGGACCCCAGGGTAGGGTCATAGGATATAGATGAGAGCATG
-GCTGCAGCTGGCTGCCAATTAGATGTGCATATAGGAGGGCTTACAGTTGTGCTGGTCCAT
-CTGGGTGGCCTGAACACCCggccgggtgcggtggctcacgtctgtaatcccagcactttg
-ggaggccaaggcaggcggatcacttgaaaccaggagtttgagaccagcctggacaacgtg
-gtgaaatcccgtctctactaaaaatacaaaaattagctaggcatagtggcggacacctat
-aatcccagctacttgggaggctgaggcatgagattcgcttgaaccctggaggtggaggtt
-gcagtgagccaatatcatagcactgccctccagcctgggtgacaaagaaagactccctct
-caaaaaaaaaaaaaaaGGAGTGAACACCCCATCCAGGTTTTTAAAAaggtaatattggtt
-gatgggtacagcaaaccaccgtggcacatacatatctatgtaacaaacctgcacattctg
-cacatgtatctcagaacttaaagtagaataaaaataaaataaaaGGTAATATTATTTTTC
-AGATAATTCACTCATATATTTCTTCCAACAttttattaagaaaaatttcaaacatagagt
-tgaaagaattagacagtgaacattcatatacccacctactaatgcacacttgttaatatt
-tcactatatttgctctatcaggaatctacccatctctccatccATTAATACAACTTATTT
-TTTTAATACAACTTATTTTTTAATAAAGCTTTTCAAATTAAGTTGCATATATCAGTACAC
-TTCCCTTAAAGTCACTTTAGTGTGCATGCCATTAGCTAGAATTCAATATTTGTTTGTCTT
-GTTCCTCTCTaggtaacatttacatggaatgaaatgcacagatcttaaaggtgccatttg
-ctgaatttagacaaatgcatactgtaccccaaacccctatcagggtatcaagcattatca
-cctcagaaagtttccttgcatcgctctcctgccgattgctgcctgcccaCCATGGACATA
-TTTTTATATCCATATATATCAGTACTAACaagcagcatcccttgtcctttcctctacatc
-agcctcgctccccaaaagcaaccacttacaacttcttaaactatttcttctggtactttc
-ctccatatttttaaataacttgcttttcctgctgttttcttgatcaattttaggcataca
-cacacacacacacacacacacacacacacacacacacaTATATAtttattttttttttga
-gacagaatcttgctctgttgccccggctggagtgcagtggtgtgatcttggctcactgta
-acccctgcctcccaggttcaagcgattctcctgcctcagccacctaagtagctgggacta
-caggtgtgtgccaccacgcctggctaatttttgtattttttgtagagatggggtttcacc
-atgttgaccaggctggtcttgaattcctgacctcaagtgatccacccaccttggcttccc
-acagtgctgggattacaggcgtgagccagtgtgtctgaccAATTTTAGGCACATATTGAC
-TGACTTTCTGGTCTGATGTTttcatagtgtggcctccactgcctggctgcctggctttgg
-atcccagcccttcctctttctggctgtatgaccttgggcagtaacttaacctccttgggc
-ctcagttttctcatttgtaaaatgagggtgataataatagtgctgaggttattggattgt
-tatacggattcaagatgtaaaaggctgagaataatgaacatcacccagtgagtagtcaaA
-CTTTTTCTTCTCATAATCATTATTATCAAGAAAGATTTAGCTTTTGGTTCCCCCCTTTCA
-ATTGGCATTtatcacaattttttgtgaagtggattttagtgttatttatattatgactat
-gtaaatactgtttcctttcaagccaagtcatatattttggttacatttcctttcttgtac
-aactctttgttcttcctggagttactactcgctttgctttttttcatttgctgtttcctc
-ttaacccatccttaattcTCTTAATTCTTTGACACCCTCAGTCTCCCCATAGTTAACATT
-ACACATCCTGAAACTCTTCAAGTGCTTTTAAAGAAGCATCCCCATCCATTTAAAAAAAAC
-TGGAGCCAATTTTTAAAATAGAATCTCAAATACAATCTGTAAaataaagatttgtgagca
-tccactatgtgccaggagctgtgctaggcagagtgggaaggtagccaaataggggatatc
-cctgcccatgtggGTTTCCAAGAGGGATGAAAACTGAAGCTCCACACCCCCAGCCTCTGC
-ATTTACCGGGGAACACCTCAGCACCTCTAGGAATCTCAGGACCTCAGGGAGCCCAGATTT
-ACTTATTTGTAAAATGAGGATCATTTTGTCATTCTGCAATCACTCCTTAACCATGTTGTC
-TGGGGCTGTGTTGTGGCTGCTGGGTATAGAGCAATGATCTCCCCATCCCTTGAGGGGCTC
-ACAAGAGCTGTGGGATAGAGCGGAGGCTGTGGATTGCAGCGGAGCAATGGGAGCTGGGGA
-GCGGGTTTCCCAGAGGAAGTACCATAGGACGAAGAGGGTCTTGGTGGGTAAGGGCAGtaa
-acggctgttatgttccaagggctgtgcgaagaacttccatgtattgtcccatcaaatcct
-cccaaagacccattgaaaggggtcatatttttatcacaatttcatagatggggaaactaa
-ggccaggagagtccaaggccagggtcacacagctaataagcggcagaggcagtatttgaa
-cctatgcagttgggttcttaaccacacactgcactgtCTCTCACATCCAGATGCCCAGCT
-CCTGTCCCCACCTCATCCTGTATCTGCCTCGTCCTCTCCTGTCTACCCACTGGTGCTAAC
-CTCTGGCTCATTCCATGCCCTTCGCTTTATTCatccattcattcaacacaaatctactgg
-gcgccttttccacgcccaaccctgggctgggcagtgccagggacatagAGCTTGGGCAGT
-ATTGACTCACCCATTCCCAGATAGGCATTGACATTGACATGCAAGCGGCCAGGAAAGTTG
-TCTAAATAAAGGGGTGTTTGGGGTTGAGTGATGGCtgtgtgtatgtgtgtgtgtgtgtgG
-CCTGCAAGGGGTGTGTGTCAGTGTGGCAGCAACAGACTTTCTGTGGAGGCCATTTATGAA
-GGCATATCTGTGTACCCTTGAGAGTGTGTTGTCTGCAGAGGGTGTGTCCACCAGGTATGt
-ggatcagtgaggctctgctgcataacaaaccactctaagcccagaagcctaaaaccactt
-attagcctgtgtgaagtggcagtctggcctgggcttagctgggcagttctggttttacct
-gggttcacttgccttgctgcagtcagctgagggtgggggctctgggagggcttcactcac
-atgcttagcagttggcaggctgtttgctggggtgcctccatttgctttgatgaggctggc
-ttgggctcatgcttatggtgacctcagggttccacattcagcaagagaagataagctcca
-acgcacagtgcattttgagcctctacttgtgtcaagattataaatgtcctaatagcccaa
-gtgacatgtcaagtcagattcaaaggatggagaaatagactctctctctCTCTCTCTCGG
-TTGTGTTTTTGTTCTTTGAAAACAAGCCCGGCTTGCctggctccatcgcccaggctggag
-tgcagtggcgcgatcttggctcggtgcaacctccgcttcctggttcaagcaattctcctg
-cctcagcctcctgagtagttgggactacaggtgcgtgtcaccacgcccagctaatttttg
-tatttttagtagagatggggtttcaccatattggccagactggtctcgatctcttgacct
-catgatctgcccgccttggcctcccagagtgctgggattataggcatgaggcaccgcgcc
-tggctTAGAATCCATCTCTTagtcacattacacagggcatgagtacagatatggaggaat
-tattgtagctgattttcaaacaacttaccTGTGTGTGCAGGTAAAGAActagggacagtt
-ctcagttttggaaataaaaaaaactctgggctgcagtcctggctcttccgtccttgctgt
-ctgaccttagtcaagttgtctcattctctgagcttccgtaaattggataaaattgaatga
-aacgagatgatctttaTAAAGTGCTTGTGCTACTCATTTGTTTACAAACGcagcacatat
-ttattgaggcctcctatataccaactactggtcccaccccgaggatattgcagtgaacaa
-aatggaccaaaacacctgctcttgtgaagctcacagcctaggttgtagacagatgttaat
-tgatcatcctaataattgtatgaccattgagagtagattccggaaggagagattgctgac
-ctggccaggttgatctgagaagccaaagatatttaagctgagatgtgaagggtaggtagg
-agacaacgaggagaagaaagataggagtggaaaatgattctagatggagggcatgtgcaa
-aggccctgtggtgggaggagtagattccaggaacacagagaaggtgggtggggctggGCC
-TGAAGCACCAGGGCCAGATGGTGTGGGGCTGCTGGAGCCTTTGAACAATGTGAGGGTCTG
-TCTTGCCAGGCAGcctaaaataaaaccgaaaggcctaactgctccacaaggccctcatga
-tcggggaccttgttactcctccagtctcccctttacctactctgctgcagccatgctgcc
-tccttcctgttccaggaacaccctggacacattcccacctcagggcctttgcacttgcca
-ttgcctttactagtatcgaccctacccagatattctgatgactcattctgtcacttcatt
-tccatctctgcctcttcaaaggggccttccctaccaacccaccacaacccccctgcccct
-ccagctaagcagtcagcatccagcagtctctacttccctggcctggtttatttctcttcc
-tagcacatatcacctcctggcttatattaaccagaggccacattgtctgtttctcttctg
-gatctctcaccagagtgcagctcagcaggcagggacttggccttgctctaggctgtgtcc
-tcagcctcaggggaagagtaggcattccataaacatttgtgaataaagaaatGAGTGAAA
-ATGAGTGAGTGAATGCTGGAAAGAACTAGCTCctggaaattaggaggtctgggttcaagt
-tctagctGGGCGATCCTTTCTGTTCCTTGGTTTCTCCAGTTGAGCTGTGAGGCATTTGTG
-GTCTCTAGGGAGGTTCTAGGACAGGAAAGGAGTACTCCAGGCTGTGGAGGGGGCCTATGT
-AGGAAGAAGGGAGCTGGGGCCTTCCCTTTGGCCTTCTGGCGTTTGAAAATAGCCTAGCTC
-AGCCCCTAGCTTGGGCCCCTACCCTCCCTGGGGTGCCAAGCTGGAGCCAGGGGGCTCTGT
-CTGGAGCCTGCCAGCCTGGTGCCGGGCTGGGATCAAGGCCACCTGACAGCTGGGCCAGGC
-AGTCCTGGAAGGTTCTTAAGGGCAAACAGGGCATGCTGGATGTCCCAGACCTCCCTCCCC
-ACCTATTGTCCCTCCTCCCTCAGTGTCCACCGGCAGGATAAATCCCTTCATCCTCTACAG
-GCCTGCAGCCCTTGCAGCTTGCAAATCTTTTTCTTGGTTTGTTTCTAATTTCACCCCTGC
-TCAGTAGctactttactggtgaggacactgaggctcagagatgacaactgcctcactgag
-gttacgttgcagttatgattcaggcccaagtctTGCCCAGCCCTGTCCTGTCACCGCGTG
-CACgtgtgtgtgtttgtgtttgtgtgtgtgtgtgtgtgtgtgtgtgGTCTCACTATCAAA
-CAGTGCCCTCCCTTAACCACCAGTGCCCCGGGTCTCTGATAAGATGtgatgactatgagc
-acctggagccaggtggcctgggttcaaatcccacctttgctacttctatactgtgtgGAT
-TGCTGGGCCACCCCCACCTCAGTGTCTGCTAATAGGACAAATCCCTTAATCCTGGGCACT
-GGGGCACTATCAGGACTAGCATTGTATACATTGCACAGGTTTTAAAAAATGTAATCTGTA
-ggctgggcacagtggcttacacctgtaatcccagcattttgggaggcccaggtgggtgga
-tcatgaggtcaggagctcaagaccagcctggccaacatggtgaaaccccgtcactactaa
-aaatccaaaaattcaccaggcatggtggcgggcacctgtagtcccagctactcgggaggc
-tgaggcaggagaatcgcttgagcccagaagctgaggttgcactgagccgagattgtgcca
-ctgctctccagcctgggcaatagagcaagactccgtctcaaaaaaaaGGTAATTTGTTGT
-CAATATTTACACATCTAAACCATTGGAAGAATAATGTATATATAAACTAGCTAATGAACA
-CCTACCAAGCCCCAAGCACCAACTGTATGTCCAGTACAGAGCCAGCTGCTCCAGGGGAGT
-TCGTTCCTGGGAGGGGGCATCATGATGAAGTGGGCGTGGTTCCCATTTCCTCCAGCGTAG
-TCTCAGAAGCGGGAAGCCATGTGACTGAGGTTACAGCCAGGGAGGGCAGAGGCCCCCGGC
-ACTCACCCCTCTGGGGTCCAAGCCCCGCTGGCATGTGTTGTGTCCCTGGGTAGGTGTGTC
-ACTCCCTGTCTGTGTCTCCAGTGTTCCTGTTGGCAAATCAGGGGTGGGACGGAGGTAAAT
-GGAGAGGCCCTGCCCAGTCTGCTGTAATCCAGGATCTCGGACTTAGTGGGGCCAAAGCTT
-CCAAGTTCTCCTGATTAGTGAGGCTGCAAAAAATGTTTGGCATGTTATTCTCTCACCGTT
-TAAATGTGGGCAAGTAACAACTTACATGTAAAATTACCCCCATATACCAAGCATTTaagt
-tatttattatatcattgcttacaatagcaaataattggaaattatttgagaaatggctaa
-agaaactcaggcccaggtacgcaagggaatcctaggcagccctcaaaagatgtcctgcaa
-acacctgatgtggaatcacaagatacacaacacaggtcagtgaacaaaacaagttgtggc
-atgatacccacagtgtgctgctgcttgtggaagcaggaaCACATGTCCATGTACTCTTGT
-ACTGGCACAGAACCCTGGAGAATTATCCTGGGAACCCTGCATGCTGGCTGCCCCTGGGGA
-GGGGAACCCGAGGGTTGGGCTCAAGGGTGGGAGGCAAGACTCACTACTTTGCACACCTTT
-TGAATTTTGAATCATGTGAATGTGTTATCTGTGCAGAAAAAATAAAAATACATTTAAAGT
-AAAGTGAAAGTAGACAAGAAACCTGAAACAGAGACGGACAAGCAAGCCTGCAGGCCCAGC
-CAGCTACCGCCCCCGGGCAACCTCATGCCACACTGTGGGCTCTGCCCAGCTTGGTTTTGT
-GGCTCCACCCTCTACGGTCATATTTGGGTTTCCACACACACAGCACCCAAAGGAAATCCC
-AGCTAACGCACATCAGGTTCTGGGCTGGGCCACCCGCCAAGGTGGTTGGTGGGCATGACA
-CCGCCCCGGGAATGGCGTCGTCCAAATGCCTGAGCAATGACACGGCCTCAGATGGAATGA
-TGCCACTGCCCACAGTCTCACAGGCCCTCCCATCTCGCCTTTGTTCTGCAGCCTCCAGGT
-GGGTGTATGGACACTCCAAAACAGCCATCCCTGTCAATGAATCAGCCTGCAGGGACTGAA
-TTCattccttcattcatcaatatccattgagcacctactgtgtgccaaacactcttctag
-gaactgaagatgcaacagaaaacaaaacagataaaaatccctgccctcgaggagctgaca
-ttccagaggggacacagacaatacttgccagagtgaaaatgctaaggagaaaaatgaagc
-agggaaggatgggGAACTAGAGATTTTTTTTCCtttttttattgaggttgaattgataaa
-caataaaattggcccattttaggtgtacagttggatgcattttgacagttgtatggcact
-acagacaagtgctagaattcctgtatcatcccaccatgttccttcacgccccccacagtc
-agcccctgactcccacccgctcccacccgaagaaactacagatcagttttctttcactgt
-agatcagctttgtctttcccagagttcatgcaaatggaatctggcttctctcagtcagca
-tcatggacttggttgagattcgcccgtgttgctgagtgtatctgtagcttgttccttttt
-actgacgagtagtattccacagtgtggatgcactgtattttgtttattcatccaacttgt
-tgacggacatacaggttgttcccatttcttggctattacaaataaagctactataaacat
-ttgtgaacaactctttgtgtggatgcatattttcatttctcttgggtaactaccacggag
-tggaattgctggacctcgtggtaagggtagctttaTTAGAAGCAGATCTCATGCttttaa
-acaggatggtcagataaggtgtcaccggctcggtgatatttcaggagaggccagaaggag
-gtaaggggtgtctgcagggaagagtgttctgggctgaggaaacagagtcagtatgtgcct
-ggagtgtttgaggaacagcatggaggccatcaaggagggagtgaaggacgtgaggggaga
-gggctaggaggtgtgctccatgtggaatgaggctagatggtatagggtcacatacatcat
-ggtgaggacattggtatttttttcttttgacatggagtctcgctctgtcacccaggctgg
-agtgcagtgacacaatctcggctcactgcaacctccgcctcctgcattaaagtaattccc
-cggcttagcctcccaagtagctgggactacaggcacgtgcccccacgcccattttatatt
-tttgtagagatggggttttgccatgttgtccaggctggtctcaaatgcctgacgtcaggt
-gatccgcccacctcagcctcctgaagtgttgggattacaggtgagagccactgcacctgg
-ctgaggacattggtttttcctctgagaacccgtgggaggaatctgagcagaggtgggaca
-ggatcagacttgcattttaacaccttcccccatctccagctaccaagtggagaatgggct
-gcagggctgcagggaggaggctactgtaatagtcctggcaggagatgaaggagttggact
-ggggtggaggcggtgggggctgaggggtgtgggattctggatctttctggatctaccccg
-aatgtggagccaacaggggatgtattggacgtgggatgtggggaaagtagggacatgaaa
-gaaggctAGGACCCAAggtgacctctaggaactgagagtggccctccagctcccagctgg
-caaggaaacatgcatctcagaccggcaaccacaagaagttgaactgtgctgacaaccaaa
-ggaacttagagtggaccctgagccgcacaaaggatcacagcctagctgacacggtgattt
-cagcctggtgagacctaagcagagaagccaatcatttcatgccaggacttctgacctgca
-gaaactgtaagaaaataaatgggtgctaagtcactaagtttgtgataatttgttatgtag
-caatagatgactgatacGGGCATACtagaatcctacagtgtgagagctaaaagagtgctt
-agcaaccactaagcccaccccccccatgtacatatggggaaactgaggctcagagagcac
-agaggacttgAGGCGTGGTTCCTGAAGGGAGGCGACATCAGGCAGAAACTGTCCCAGCTC
-TGGAGGTGTCGCGAGTCCCAGCCTCTCCTCTCTTAGGAGGCTGTAGTACCTGCCCCTCTG
-CCAACCCCTGCTCATCAGGACTCCCAGAGAGCCAGCTCCTGGCTACCCACTATCTACCCT
-CGGCTCCCCAAGCAGCGAGTTCAGGCAGGCTCCCCACTGGTGCAGGCCCTCACCCCCACA
-GCAGAGCATGGGCCAAGGGTGCACGAGCCAGGCCTGAATCTGAGACCCCAGGGAAGagag
-gaaaaatcacaaccttgggcctggctagaatcccaactctgccactcaccagctatgtga
-ccctggttgagggactcccctttgctgagctgcagtgtccacatgtataagatgggagta
-gggatgctttcctccaatggtcaatgagctaatgaaggtgaaactcttggcGGGAGCACT
-GTAAATGCATGTATCCAACCTcttcctctgcatgggcctcagcttccccatctgctaaag
-ggtcttgtgttcttgatgtgtttgggggggcccttgcagctctaactatatgaggattca
-aattccggctctgcttctcactagctgtgtgaccttgaatatgttactcaagctctctga
-gtcccagttttctcacccataaaacggggctattaataatacctcctattacaggagaga
-tgcaggtcagatacctagtagagtgactgAGAAAATGTTAGCTAGTTGTGTTATCATCAT
-GATCACCATTTCTAGTGTGTGAGTTTGGTTGTGCCTGCTGGAAGGGGCAACAGGGCCGAG
-CCTCCCAGGGTGAGAAAGTTTGGTTTTCTTAGAGACAGACGTTTGTAGGCTGAGCAAGGC
-ATGCGTGCATTTCTGGGAAAACAAAATTAGTTCATTTCCCTCCAAATCCCTGCCTGTGCA
-ACCACCTAAAGCCAGGCTCTGAGTATCACAGTGCTTATAAGTGGTAAACCCACAGGCAGG
-TTTGTGAAAATGAAAATATGCATTTATTTCTGTTCCCAGTTCTGAGAACTACTTCCTGTT
-TCCCTCTAGAGGAAGGCAATGGCTTGTGCACATGCCTGGAGGTGGGAATGTGTGTCATGG
-ACACAAACTGGGGTGGTTATCACTGTGATGTTCCCACTGGCCATGTCTGAATTGTGCACG
-CAATCCTCTGACCATAGCTGATTCACTGGTGTTAACAGACACCTGACGGCAGGCTGGGCA
-CTCAACAGTCTCTATTGGAAATTTGAAACTTGAATGGGGCACACAGACAGAGAGTGGCTG
-GAGATGCATCATTCCTGGCCAGCACCCTAGAGAGGAAAGCCACAGGCCCTGCCCCTGAGC
-TCCCCAGAGATGCCTTTTCCTGTTCTTCCCACAAGAGTACTCGTTTTGGGGGTTTGCTCT
-TCCCTCATCCTGGAAATGCCTTTCAATAAATCCACTGCTGGGCTCCTTGGTTAGTCAGTT
-TTTCGGTGTTTGCCACCCAGTTCACCTTGGCCAATGTGGTGACTAGGGAGACAGCACTGC
-TGGGGGTTAAGGGGAGACTGTGCAATGGAGCAGTGGCCCTCTgtggagtagttctgggca
-gaaagagcactggacccagagtctggttcttcatgatgtactgccatgtgaccttgggca
-aatcacttaacttctctgTCTGGGATGGAACCAGGGGGCACCTTAGTAAGcagatgggga
-cactaaggatcagagagaggaaaggctttacttaaagccacacaacaggtttaggacaga
-cccgggagagctgggccctgcaaatcccagcccTCAGAGGGAAAATTTCCTGGGTTAGGA
-AGCTTATTTCTAATTATCACCAGGACCTGTTTACCCCAGGTGAACAGGGTCCCCAGGCAC
-TTGGCAGATCACAGATTTCTTTCCCAACCAATTGTCACATTTGGCCTTGGCAACAGCATC
-AATGGCCCAGGAGGGGGCtgagtaaactgagcccagagagggacagagtcttgtgcaggg
-tcataccacaagttcatggcagaactagagtctgggccagatctAAAAAAGTGTTGCTTT
-TTGCTCTAAATTTAAGGAGGGTGAATTGGGGGTAGTGGCTAATGAGTTCTCCAGAGGAAT
-TTTTAAACTGTTTGCTTTCATTTTGATGATAATCCTAAACATGTAACTCAAGCATATCAT
-GAATCATCTGCAGAGCCACAGGTAAGTCCTGCCTGAGCTTGCGTTTGGACTTGGGATCAC
-ACTGGCAGCAaataatagcatttgttgagaactaactatggcccaggcactacgctttgc
-attttttatctattttttaaaattttatttaatcctcacaacaaccctataagataaatg
-ccatcagcatccccatttcacagatcaggcagtcaaggtgcagagaggttaaggttaagt
-aacttgaagcaatgttaacagcgagCCTGTGATCTTGCCCACTACACTTTACCATTGTAA
-TCGGAGGAGAAAATGGCAGAGGTGGCTTTGATATGTAAAGATGAATTCCTGCTAAGTGAA
-GGCCAGTGATGCAGAAGTACAGGGTGGGGAGAAATTTCACCATGGGTGAAATGGTGCCAA
-ATGGTGGGAGAACAAAGCCATCATCAGCATGCAGAGTTGGGTGGAAGTGCGTGACAAACC
-CAAACAAAATGGCATCGCAATTGAGTGTCCCACATTCACACTGCTGGTGGCAACTCTGGT
-TTAGCAAAGCAACATCAACCATATCATTAATTAATTAATATTGTTGCATTGATGATATGG
-cagcatagcttaatgcttagggatgcaggcttaaaactcataatttctgacttcaaatgt
-gttttcctcttggcctagtcctcagactatgggcaaatcactcaacctctctaagcctca
-gttttgttcatctttaaaatggaattgtaatagcacctGATagactgctgattgcctatg
-caattcccttcttttcctgttttttgttgaccaaaccctgattttattcccgatggtgat
-atatctagctaagtaagactttattcccagcctctcttacagctactggtggccagcgag
-tggaagttattcagtgagagacttctgaggactatccctagagggggccaatgcatctgg
-gaggaaagcccatatactcttctttctccttcttcctatatggaactcaggcattatggc
-agcagccccagcagccatctaggatcaagaagtgaccttcaggatgaagacacatgataa
-ggatgaagcaacatgaggctggaaggaacctgaaacattgatgataccatagagactgca
-gcagccctgggctgactcttccctgacttttttttttttttttttttttttttaagtcag
-ccttttattttaggacaattttagatgtaagaatcattgcaaagatagtacagagagtgc
-ctgcataccccacacccagtttctcctattattaacatcttataggccaggcgaggtggc
-ttacacctgtaatcccagcactttgggagtccaaggtaggaggatcacttaaggccaaga
-gtttgagaccagcctgggcaacagagcaaggccctcttcctacaaaaataaaaataaaaa
-attgagctgggtgtcatggcataccagtagtcctagttactcaggaggctgaggtggaag
-gattacttgagcccaggagtttggggcttcagtgagctatgatcacaccactgtactcca
-gtgtgggtgacagagcaagaccctgtctgtaaaaaaacccgaaaaccaaaaccagaaaat
-cttatattagggtatgatacatattaaaaccaaaaaatcttatattagggcatggtacat
-atgtcacaatgaatgagccatactgtcattattaactgaaaagcccatacttcattcaga
-tttcctcagtttctccctaataccccttttctgttccaggatcccatccaggctcccaca
-ttacatttagttgtgtctccttaggctccacctggttgtgacggtttcaaagactttcct
-tgtttttgatgaacctcatagttttgaggacaactggtcaggtattttgtaacatgttcc
-tcaatagggatttttctggtgattttcttgtgattagacaggggtgatgtgtttagggag
-gaagaccgcagaggtgaagtgtcaatgtcatcgcttcagatggggggacattctatcaat
-acgacttctcactgtggatgttgaccttgattgctggcacgtttctccactgcaaaatca
-ctgtttctgtcctccattcaacgccatactctttggaagaaagtcactccatgcagcccg
-tgcttaaggagtgggagttatgttccacctcctggagggtgacgcacttaAGCTACTTAA
-GCTAATAAGTATTTTTTATGTAGCAAAAGCTAACAGATAAACAAACCCTTTTGTTTCGTA
-GATCTATGTTATTTGGGTTTTCTATTACATGCAGTCAAACCCAATTTTAAATGGATGCAG
-AATTTATTTCTCAGGGAGGTTGTGATAATTGAATCAGAGAGGCAGGGACAGTACCTACAG
-CAGTGTTTGGGTGAATAAACAGTAACAATAATCATCGTTggccaggtgtggtggctcatg
-cctataatcccagccctttgggaggccaaagccagtggactacttgagcccaggagtttg
-agaccagcctgggcaacttggcaaaaccctgtctctacaaaaaatacaaaagttacctgg
-gcatggtggcacatgtctctagtcccagctacttgggaggctgaggtgggaggatctatt
-gagcctggaaggcagaggttacagtgagctatgattgcatcactgcactccagcctgggt
-gacagagtgagaatctgtctcaaaaaaaaaaaTCATGattattaataacttaattataaa
-taataataattattattagttttataGTGCATTAGTATTTGATTGATAATTTTGTTTCAG
-TCTTTTTAGTTGTTTGGGAACTATAAGCCTAAGGAGTTGATAGCTCACTTCATGAATGCA
-CACAAATAAGTAGTTTACCgtcaatgccctcctaagggcctaagatcaacaggaatgcac
-ctgtagttaaacaagtggttctattactcactgggacaagaaagtgcacagcatggggaa
-ccttggaatgtcttagtgagagtgttagaaaaggcttattataggattggtctcgtgtta
-ggtgacttgaatagggtttgaggatgtggggtttttcttcagattggatgctctcaggaa
-gtgagggtaattatgcagttgcgatcttaacaagtcttgtctatagagaaggcagactct
-ggcaaggctaatgctgtcattgggaaagaagcagcggtcacttgtattagctgggactga
-ggggtgtttggtcattttcgtggcttggaaatgtgcatgatttgtctttgttcagacatg
-attacagagtgttccacttttcgtcttgattcatcaatcactgaggacctcatctgatgt
-tggtgttctggggaatcattaacattggacaggacataagctgttctctgtgcatgttgg
-gctgacttgcagcaacacccagtcctagctgatgactatccaggatggcccctggatgtc
-agggctgctttcctctttctcaATTTCAGTCAACATTAGTGGGTCTGAGAGGATCCCTTC
-CTCCTTTTAAAGCTCTCCATATATTAAGTTGGAGCAACAAGCTCATTCCTGCTCAAACTG
-GGCAGGCATTTTTAGATTCTTTTCTGCTCCCAGAAGTTTTCCTTTCCCATTATTTGGTCT
-TGAGCTGGTCTCAGGAAGAAGTAATGAAGGTGAGAGATCTGCAGTGGGATCCTGGGAAAG
-GTGGCACATGTGGATCACTGAGGCCTGGGCTCGGATGGTGAGGATTTGAAGATTCCCAAA
-GGCCACACCTAAGGGTCACCAGAGGGTgtccagcccccattatccagatgggggaactga
-gacccaggagggaagGGCTCTGTGTTGGGTCCCAAGGTGTGCCATTCCAATTATCAACTG
-CCCTCCCTTACCTGACTGGCAGAGTCCCTTTCTTCCAGTTTGACGGAAAATACTGTTTGG
-CTCTTTTTTTGTGGGATGGAGTGTAGAAATTGGGGAAAAGAAGAAAATATAAAATCTTAC
-ATTAAGCATCCTAAGCCAATTCATGTGGTCGAAGAagcagaaaagcagcagaaaagcagc
-agaaTGCGATGCCAAACACATCCTCTGTAGGCACGTGTGTTATACCAGGTTGCTGCGAGG
-GCCCAGAGGACACATCTGTTGTAGCTGAATAAGTTCCAGTGTTGAACCTCAGCACACACA
-TGCGCATCTGGGCACCTGTGCACAGAGCTTGTATGCACAGAGCAGGAACACATGCATGCT
-ACAAAAGGATCAAGAGTCAAACTCCAAACTGGCTGCCCTTATTGATAACTTCCAGCTGAT
-GGAAGGTGGAAAGGCGAAGGTAGATGTGTTTTGGATATAAAAGGTctgtcttctctgttt
-actgtctatgtgaccttgagcaaattgattgacctctctaagactcagttttctgcaata
-taatatggTTCTCTTCTCTCAGAGTAAGGATGGAGTTCAGTGAGGAAACAGAAATGTAAG
-CATtgcatcattcggaatgctctgggctgcaagtaacagaacaccaactccactggctta
-aatgaaaaagaaattgatcatctAGAGACAGGACTCAGGACCTCAATGATGTCAGTAAAG
-CTCCAGGCCCCTTCTGACCCTCCACTCAACCACTCACTCTCCCACCTCCCTGTCAGATTG
-GTCCCAAATGTGGTTCTCCTGGTGGTCCACACTGGAGTAGCATCCATGCTGTGTAGTGTC
-TTCTCCATCAACAGAAGAGAGAATCTTTGTttttcttttctttcttctttcttttttttt
-tagacagagtcttgctctgtcttctaggctggagtgcagtggtgcgatctcagctcacta
-taacctctgcctcctgtattcaagcaattcttgtgcttcagtctcccaagtagctgggat
-tatgggtgcctgccaccactcctggctgatttttgtatttttagtagagacagggtttca
-tcgtgttgaccaggctggtctcaaactcctgacctcaggtgatccacccgcctcagcctc
-ccaaagtgctgagattacaggcatgagccaccacgcccagccAGCAGAAGAGGTAACTTT
-TCTGTATCCCTGAAACGCTAAGTCTTCCTCTTTAGTATGAGTGAACTAATTGAAGTCACA
-TGACCAGCCCTGGCAGTAGGAACCATGGCCAGGGGAATATCATGTGCTGACTGGCTGCAG
-TTTTGGTCCCTGAACACATCAGTGGCTGGGGGACCCCTTCAGACTAAAGGACCTAGCCCT
-GCAGCTGGGGACTGATATTAGGAAGGGAAAGGGAAAGGGCATGATTCATGTCCCTCACTG
-CTCAGGGTCTTGCTGTGTAGCATCTCTTCTGAGATGTGGGTCAGACAGGGTGTTGGCCAT
-CGCTAGAAAGGACCCCTCCTACAAGGACAAGACTTGAACAGGGATCCTGAAGACTTCTGG
-GGTTTCTATCTAGAGTCCAAATGGGTCTCTAGAGTCAGCCTGTTGACAGGCTGAGTTGAG
-TGGCAGCATCTCTAGTGGATCTGGCTCTCTGCCTGTGACCACTTGTGTGCATGAGCAAGT
-GCCTCACAGACCTGCATGTGTACATGGAAGATGTATTTTTACCTCCATGTTTGCGTCTGT
-AGCAACAAGTATGAAATGCACATACATGTTCATGCACATGTCAATGTACGTGGCTACCAC
-ACAGTAGGTATACTGTACAGTGTAACCATACAGTGTTTCAAATAtgcatatatgttcata
-tatgtgcatatatgCAATATCTGGATAGATGTATATGGCATAATGGCATATTTATATATT
-AATAAATCAATCATTTTAGAGTATTAACTATATATGAGTTATATTATGCCTAAGATATAT
-Taataaaaacaatgtttgtcaagtacttgctatatgccaggtactattctaagcacatat
-gttctaaattaATATATGTATTACTTTAAGGATACATAACCTAGTGTCTTTTTGGGGTCC
-ATGGATGAAGTGTATCTTCACTCACCTTTAATTAAATTCGGTTGTTTCATTCTTCATTTG
-TGAATGTAGGGCATTCACAAATTCACaaattcattctttcaattgtgaatgtagggcaca
-agccacagtagtgtcaggagtgcctggaactttgtcaccattagaaatcatagctatttt
-tgtatcttgttataatgattatagatatctcaaaatattaacagtcatcatttgttttga
-cctaccactgatcttgttatttaatgtattagcaaagaagcatatatagtacaatatcaa
-aactgtgttctttaaAAAAAAAAAAAGTATATATATATATAtgtatatgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgatgaagtcttgctatgttgcccaaggt
-ggccttgaccccctgggctcaagtgatcctctcacttcagcctcccaagtaactgggacC
-CAGCTTAAAATATTTTGATGACAGTATATATATAttttttgagacagagtctcgctctgt
-cacccaggctggagtgcagtggcacaatctcagttcactgcaagctctgcctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacagttgcccgccaccatg
-cctggctaacctttttttgtatttttactagagacggggtttcaccgtgttagccaggat
-ggtctcgatctcctgacctcgtgatccgcccgcctcggtctcctaaattgctgggattat
-aggcgtgagccaccgcgcccggccAatgactgtgtttttaatataatttgtttcattcat
-aatccaatgcatttaattttattttaagcatgtgaagacaccattctgaggaggggtcca
-tggcttcaccagatgccaaagacgcccatgccacagcaaagAAAaattcattgatcaatc
-cttcaatgaccccatgaagcagcagtgttaccagtttgctacagaggggaacctgaggca
-cagggaggttgtgcaacttgtttaaggtcacatagatatcgagtggTTGTGCATTATTAT
-ATCTGTCAGTTGTTTTTATAGCCTATGGGCTGATGTGGGCTTGTCCTTTGTGTCACATCA
-GAAAGCAAGTCTGGTCAATTATTTTCTTTCTCAAGGTTAAGTGAGATCAAGAAAAATAAT
-ACACATATATTGCATGGATTATTTGTGGTCATCATTTGCTAATCCTTATACCTGTGCCAT
-GTTGGATTAATTATTACAGCTTTGTGAGCTGCTTTATTAAGGAGGGGAAGTAGAGTGAAC
-AAATCATGGCAAGTCACTTCACCTCATCTTCTCATTTAAGGATGCTGATACTGGTGTTGC
-CAAGGCGACGCTGTCAGCTTTCGGAAGCATCTTTAAATGGGAGAGGCGAAGGCCCACACA
-GATCGAGGCGGAGGAAAACTCAGAAAAAAGGCTCAAATCCCTCGGCCGCAGAGACAAACC
-ATCCTGGTGGGGACCATCCCTCACCCCCCGCACATGGCCACTTTCTACCTCACCTGTGGT
-GGTTGTCTCTGGGGTGTACTCAGGGAACTCTCTCCCCAGTGTGGAAACTGCCTTTGCTGG
-GAACAACGCAGAGATCTCAGAAATGATGGATCCATCAAGTGCCAGTGGGAGAGACTGAGT
-GGTCTTGGAGGCCTTTCCAGGAAGTTCCTCCTGCCCTTGGTACACGAGTTTGGTGGTAGA
-TGCCCAGATGCCCAGAGTGCTCTGGGAGAGGAAGGCAGCTCACAAATGCAAATGCGCTGG
-AGGTGGTGCTtggctgtgctgccttggatgagaccctttccctctctgagccctaatttc
-ttttttctttttctttttcttttttttttttttttttgagacagagtctggttctatcgc
-ccaggctggagtgcagtgacaagatgtcggctcagtgcaacctccgcctcccggttcaag
-caattcttctgcctcaggctcctgaggagctggggctacaggcatgtgtcaccatgccca
-gctagtttttgtatctttagtagagatggggtttcaccatgttgcccagggtggtcttga
-acttctgagctcaggcaacccaccagccttggcctcccaaagtgctaggattacagacta
-ggagccactgtgcccggTGCCTAATTTCTTCATCACTGAAATGGGAAGAAAACTAACCTG
-GTGCAGGGAGAGGTGACAAGTGTTTTCCATAGGAACCCGCAGATGCAGGTATCCTAGAGG
-CTGGCACCTATGAGCTGTGGCCCCCAGGAGACCCAGTCTAGGCTCGAGACCACACCAGCC
-GTGCCCTCTACAGTGCCTTGTGCTGCCCAGGATCCTCAGGTTGGTCTTGTCTGCAGCCAT
-TGTGAGTCAGCCTCACTGTCAGAAGGGCTTTCAGAGGTTGCTAGGTGCTCTGTCCATGGG
-AAACTGAGGTTCAGAGAGGGCCAGGGGCTCTGATCCAATGGCAGAGCCAGACTGATAACA
-GGGTCTAATATTCCTGGGCAGGACACAGCTGTGCCCTTGATAGTCAGAGGCAATCTGGGA
-TGAACTGGATCCTGGGGTCAGGACCTGGGGACAGGGAGGCCGAGAGAGGGCACAGAGGTG
-GAGAGAAGAGAGATGAGAGCCAGGGACAGGGAACGAGGGAAGGCTGCCTAGCATCCCTGT
-TTCCTGAAGTCAtgacttgggtgtcactgaccccactgctggtgccaggcatgatcatga
-gaccgaggtctggtcaagcagagtaagagtgataagcatagggatggacacaagaccaat
-cctggctgcagaaaatcattcctttactggaatcatggagacgagggagctccccgggtc
-agggatgctgagctgggaggacatgagcctggggctgccagagccttcttgtgaggaaag
-atcctggctgagaatgaagtcaacggggcagatggaggggctgagaggtggagctgacat
-catttgagcctctggatctaacctcacttgcctttacccttagactttccagttatgtga
-gtcaatttattccttAGGGCTAGAATTTCTATCCCTTATACCTGAGTCCTGGCATGGAAG
-AGGAAGGAAGGTAAGAAAGAAGGATGAATATTTAAGAACAGGTGTCTGAggctgggtatg
-gtggctcatgcctgtaatcccagcactttgggaggctgaggcaggtggatcacatgaggc
-caggagtttgagaccagcctggccaacatggtgaaaacccgtttctactaaaaatacaaa
-agttttccgggcgtggtggtaggcgtctgtaatcccattactcaggaggctgaggtagga
-gaatcacttgaaccaggaggcagagattgcagtgatctgagatcatgccactgcactcca
-gcctgggtgacagagtgagactctgtctcaaaaaaataaaataaaaTTACATAAAGAACA
-GGTGTCTGAGGATAACTCAAATCAGCTTCCTGCCCCCTTATAAAATGGGAGTAGAGAGGG
-ACTTGGGCCTTCAACCCACCCAGAGGAGTTCTGTCCCTGGGCCTCACAGCTTTGCCCTGT
-CTCCTCTCTAGCTTGCAGTCAGCCTAGAAACTACAATAGAAAAATAAATGATGTGGATAC
-AAAAATAAAATGCCTTTTCCTCACCTGAGTGCAGGAGAAGGGGCGGCATGTGCTGGGGAA
-TGCCTTCCTCACCCCATTCTCCTCTTTGaggacaaacatttattaggcacctgcttcatg
-ccaggctctattaagaagatgacatacatggtctcatttcctccttgccatagcccagcc
-aggaaggaatattatcatctccattttacagatgggaaaactgaggctttgatgatgtga
-agataactggtgccttgagaggctgagccactggaccaaagtgtcagagctggagcaggt
-ttgtccgactccaaagccctgcccaccacaccacactgcACACAGTAGAGGCTAAATAAA
-GGTCTGCTGGGCAAATGCTGCTTAAGGCGATTTGAGCTCTCTGGGCAGCAATCTGCCCCT
-AAAGATTTCCCATCATGCCTGAAATGCCACCATTAGCAACCATGTCCTTTGAGTCTTGAA
-GGGGAAGAGTGCTAATTCCCAGGAATGAGATCAAAGTCAGTCTGTGCTGGGTTTACTCAG
-GGATCGGCTGAGAGTGGGACTCAGGGCTGGGGCGAGCCAGGGGGATGAAGGGGTCCCATT
-CCCATTGGCTCAGTCTCATCCAGGAGAAAACCTTCTGAGGACAGAGGTGTATCCTGGCGG
-TAGGGCAGGTGGGCTCCTGGCTATGCCTGGGTGTTGGCTGATGACAACAGGGCAGACAGC
-ATGACACAGTGATGGGGGCAGGTGACAGAGTAGCTGTGGATCCTTTCTGACTCCATCCTC
-TGAAAGAAGCTATGAGGGCCCTGGTCTCCCAAACTCAGGCAGAGGCCTTATCTCCTCCCC
-TGCAGCTCCCCACCTACCACCACAGAGGCAGCATCACTGCTGGATGGGGAAGGGAGGGAG
-GCTAGGGGTTAGGGCTTGGAGGCAGAGAGGATCTGGACTTGGAGACAGATGTCCTGCCTA
-ACAGTCCCTGTAATTGAGCCTGGGGGAGTTGAGGTTACAGGGAGTCCTAAGGGAAGCCAC
-CCAGGTAGAGATCAGCTTCCTGGGACTTGAAGGAGCCTTGGAGGACATGAGCCTATAACA
-CAGACAGGGACCTAGTTCTAGACCCTTCTTCAGGGATGGTATCTGTTTTAACTGAAAGGT
-TATTTCCAGTTGTTTTTAGAGGTTGTTTGAGGCTGTCACTGTGGCCCTTGTAGCCAAAAA
-GGGTGAGTATAGCTGGGGTGGGGATGGGGTCGTAGGGCTCCTCCTTATGCCAGGGGAGCA
-CTAGCTTTGTCCAAGAGCATCTACAGTCCTGTGAGATGCTCTGGGACAAACCGAGCCCAT
-TTTCAAATaagtaaatttggagaaagctgcccactctagccccttcatgggtagtcacaa
-ggcacttggccatattaaaggctctgatcagtcctgcagtgaagagtgcctgttcacttt
-gacttaacctgctgtttccTTTTCTCATTGCTCATAGGTACTTTTAGAGACAAGCCATAG
-TTATTCCCTGTGACACATCCTCTAGGACATGCTGGAGGTGAAGGAGCATGTCCTTTTGGG
-TCTCCTAAAGACCCTGAGCTCCAAACATTGGAGCCTAGAAGTGGTGAAGTGGTAAAGCCT
-AGAAGTGGTGAAGTCTAAAGACCCTGAGATCTAGGGTCATTAGAACCTAGAAGTGGTGAA
-GTGTGAAGGGGAAATAATGATTAACCCACCCACTAAGGGGTGGATGCAGCCCCTTCAGAC
-TTGAAAAGAAAGTTCAAGGACATCTCAAGACTAGAAAATCTTGGAACAGGAGCTTAGAAT
-GGGAGATGGCCTTCTTGCCAATCCAAGGGAGAGAACCTGGGCCATCTGGGCAGCTTCCGA
-TGTGCAAATACATTCCCACCTGCCTGCAACCCCACCATTGGTCATGGGAATCAAGTTTGG
-TCTGTTCTCAGCCCATTCAAGGTACTGTGACCCTCAGGCAGGGAGCCCCTGAAGGGGGAG
-GGAGAGAAGAGGGGCGAGGACTACATCAGAGGGATGGGCCCCGAACACCCTCCATGTCAC
-AGACGGAGGGGAGTTGGGGGGCAGATGACCCTTCTGGACTTCTGGGTCAAGGAGGGCTGG
-CTCAGGAAGCCCAGGGTGTCAGGGAAGGCGGTGGCACAGTGTCTTGCATCTGGGTCCAGG
-TTGTCCAGGAGTGCCAAGTCCGAGCTTCTCCTGTGTGGTCCAGCCTCTGGCACAGCTGCT
-CGTTAGATGTCCAAAGGCCGTATCATCATGCGAGAGGCACGCAGTGAGTAGCTGGGGCCC
-TTGAAGTAGTGCCAGCGGATGCCGTCCATCTTGTACTTGTTGTCGGGAGCGTGGTAGTAG
-ACGCCGTTGAGGTTTGACAGGCCACAGGCGTCAAACCACCACCCTGGTGGAAGAGGGAGG
-ACAGGCGCTTGGTGGAGGTGGGAGCCCAGCCAGTGGCAAGAGGGCAGCCCCTGTGTCCCA
-AAGAGAACAAAGACTAATCGGGGCTGTTGCCTCCTCTGGGAAGCCAGCTggctggggatg
-gggctgggtgggagtgggggtggggTGGACAACAGACCCTCTGCTCAGCCGGGGCCTCTA
-GAGGGCAGCAAGGGGCTCTGGCCACTCCTCGAGCCCCCTTGCTCCTCCCGGCCTTCTCCC
-TGAGCCCTTGGCGTCCCTGTCTTCCTCCCTCACTGAACCTGTCTTTCCAGCTCCCCAACC
-TCCCCTCATCGCTCTGCTCACTGCTTTCTAGTGgtctctgtcactctctctgagtctctc
-actctccaggttcatctctttctctcttatggtctctgtgcgtgggtctgtctctgtgtg
-tcccattgtgttcatctttctctgatggtctttgtccctctctgcctttcgtgtctctgg
-ccctCCCTTCCTCTGGGCCCCCATCTTTCACATGCTGTGTTTGTCTCCCGGCCTCTCCTT
-GGGCTAAGTCTTTCTCCCCCATCTCCCTCTGTACTTCTCTGCCCCAGTATAGCTCTCCAT
-CTGCTGCTCAATGACTCTGACAGCCTTGGtgtctctctctttctccatctgtcctctgtg
-tctcagaaggtctctccccctgtctctgttcttcttactttgtctctgtctcCCATTCAC
-CCCACTTCCTGTTCTCTGACCTCTGTGCCTACCAAGGAACACTGCCTGAGCCACAGCTGG
-TGTGGAGCTGCCCCTCTGCCTCCCTCTGGTCTCCTGATCCTGGTTCGGCTTGCCTGGGGT
-TGGGACTGATAGGGTATAGGGTGCCTCCCCCCCGGGGCCCTGCACTCAGTGTTTCTTTAG
-CCTTGTCTCTGAGGAAAACTGGTGGTGCCAGCTTTAGGAGGAGGTGAGACCTGGAGGGGA
-CTTCAAGGACTCAATGGGGGAAGGCACCGAAGGGGCACAGCCAGGTGAGCTTATGGGTGG
-GCAAGGCCCAGACCTGCACCCATCCTCCTGACAGCACCTGGGCGCACAAGAACCTGGGGA
-GGGAATGGGAGTGTCAATCTGGGTGAGCCTGTGGGTGGGCGGAGCTTCACCCCACCCTGC
-ACCTACCTCCAGACATCACTTGGGCACACTTGCAGAGACAGTGGTCGTTGTCTGAGTCAA
-GGGTGCTAAAGCTGGTGTTCTGCAGGACCAGGCTGCTCTGGCGCCCTGCTGAGCCGCTGT
-ACCCGACCACAGAAAGCCTGGAGGCCACCCAGAGGTGGTGGTGGCAGAAGGGCCCAGAGT
-CAGGTTGGGGCTGTGTCGAGCAAGAACTTCCCCAGTGGCTTTGTCCCAGGCTGGGCTTCC
-CCTCCAGGTGTTCTTGGAGGGACAGCCCCAGCCTGGGTGGAGTGCTTGGGCTGTTTCCCT
-TCCTGGATTGCCTTCCCTGCCTGCTGCCTCCCAGGGACAAAGCACTTACTGTATGCCAGG
-CCTCCCCTATCTCACTGAACCTGAGTCTTGGAGAGAAGTGATAATGGTCACAATAATGAT
-AATAATGGCTAATACATATACAtttttttctttagagacagcaacttgctctgttgccag
-gctggagtgcagtggcacaatcacggctcattacaaccttgacctcttgggctcaagcaa
-tcctcccacctcagtctcctgagtaaatgggacaataggcacgggccaccatgcccagct
-aatgtttgtattttttgtaaaatacaaacatagggtctcactatgttgcccaggctggtc
-ttgaacacctgagctcaagcagtctgcctgccttggcctcccaaagcactgggattacag
-atgtgagccaccgtgcccggcAACGTTTCTTTTTCTTTCTTTTTTTTCTATTCTTTGCAT
-CTACTATGtgttcaaagtgctttgcataggttaactcattctcctttaatcctcacaaca
-ccctatttccattttacacatgcgaaaacagaaatcccaagagccaaagaaacctgctca
-agtctcagaatgaatgagggtcagagccacatgccagcctagtgtggcctgacttgggag
-tctacgtgcatttTGTTCCCCAGCTGATGATGATCTGGCAACCCCAGCCCCATCGCACCT
-CCTCACATTCACCCACCTCTTCCAAGAAGCCTTCCCTGACTACACCAGCCCCCATGGATC
-TGGGCTCCAGGGCACCCCAGCTCTGCAGCTTCGACATCTGCTGCCAGCCAGGTGAGGATT
-TCTATTTCTTTGCCAGGCTCTGTGGCCTTGGTGGGCATGTCCAAGCCTgcctggtgatga
-agaccatgagatctgggggcagaaagcctggattcaaattccagctctaccacttagagc
-tgcatggccttggaggattggctcaccccactgagcctcagtttcttcatctgttccagt
-ggtaatgatagtgaaattagcagtgctgccctcgtttattattgatttggtgatgtcagt
-gtgtgaagtgtgcagagcagtgtcacggggtgagtgctcaacattcagtgcttgttatta
-ttTGGCCCTTGGCAGATGGCTGGGCCTGGTTGGAGAGAATGCGGGGTGTTTGTATGGCAG
-GGTTGGGGGAGGCTGCACTGGCAGCTGAAGTAGGGAGCCAATTTGGGAGCAATTAAGAAG
-GTCCTGCTGAggctgggtagggtggctcacgcctgtaatccccgcactttgggaggctga
-ggcaggctgattgcttgagcccaggagttcgagatcagcctgggcaacatagggaaaccc
-tgtttctataaaaaatacaaaaattagctgggcatggtggtgcatgcctgtaattccagc
-tacttgggaggctgaggtgggaaggtcactggtcactggagcctgggaggtctgggaggt
-cagggctgcagtgagctgtgatcatgccactgcactccagcctgggcaacagagtaagcc
-ctgtctcaaaaaaaaaaaaaaaaaaaaagaaGGTCTTGCTGGGTGGAGGCAAGTGGGTGG
-CAGATGTGGCCAGGGCAGCTCAAGGAAGCTCTTGTACCCTCAGGGCAGGGCCTGAGAAAT
-TCCCCAGTGGGAATTCAGAGGGAATACAGAGCCTGGGTATATGGTTGGCTCAGTCCCCAC
-ACCTCCAGTCATAGATTGTGTCTGTCGCCAGGGAAATGAGACTTAATTATTCTCTGTGTA
-GAAAAGACTTGGGAGGCTCCCTCAGCTTCCTTTTAGGCACTTACTATGTCTGGGGATGGG
-AACAGCCGTGCTCCCAGAAAGCAGTCCAGTCAAGGGTGTGAAAGGCTGCCACGAGACAGT
-GATCGTAAtattgtttgctgagcgtttactacatgccaggcactgtgttaatgcttcatg
-tgcagtatctcattcaggcctcatcacaccctttttgaggtaggtatgcctaaagcaccc
-attctacagatgaaaccgtgaagggacttgctcagggtcactcagggaagtagggatgga
-gtcgggatttaagccTTTGCTTTAGTGGCCAGTGGCTTAAATGGGACTCAGCATAGTGTT
-GTAGCTACTCACTGGTCAGGTGTGAGGAGTAGGGGGACATCCAGGGAATTTTTCATTCAG
-CTCTGGACCTTGCATTATCAGGTTGGTATGGATCCCATAAGGAGGGATGTCAGaacctgg
-gcaacatagggaaaccctgtttctataaaaaatacaaaaatcagctgggcatggtagtgc
-atgcctgtaatcccagctacttgggaggctgaggtgggaaggtcactggagcctgggagg
-tctgggaggtcaaggctacagtgagctgtgatcatgccactgcactccagcctgggcaac
-agagtgagaccctgcctcaaaaaaGCCTTTGCTTTGGTGGCCAGTGGCTTAAATGGGACT
-CAGCTGGAGGAAACAGTGGGGGCATATCACTGAGAAGTTCCCAGAAGTGGAATCAGGCAT
-AAAGTTCAGGAGGACAGAGAGTCATTCAGAGATTccttgtggggaagcgaccttcccacc
-agtggaggtattccagcacggctggatgatgattgcaactatggagggaatctatgaaga
-accagatgacacgtgagattttttgcagccctgtgagtgtgaatcCTGGTTCAGAGATAG
-CCAGGACCCAGGCTTATCTAAAAGATCCTTAAATTTCTCTgagaggcaatatcatgttgt
-ggagacatcatgagttttgacagcagggagatctgagttcaaattccagctcatttaact
-tgtaactttgggcaggatacttaaacttggcatctcagtttccatattactaaagtaggt
-acagtaatgcctacttcaaagtgttgtggggaagattaaatggaataatggtgcctggaa
-cacagtaggtgctcaataaatgctagttcCTTTTCCCAAATATACCAAGAACCAGGCTGA
-GGAAGGGGTGAGAAACCTTGATgatcttacaagatcgtcatgtttaagctcatcctgcta
-ttgaagaagcagaagctcagagaagccagactgacttgtccaagttcccaaagcaagctg
-gagcaaggccacaatgagtgcaggaatttcaacttctggcccagggacccttccacccag
-ccCCAGGGCATAGGACAGGCTGGGCAAGTCACCTCCTTTTGCTTCTGGGTCTCTGTAAAA
-AGGCTGACTTGGGGTGACTGACCTTGGAAGACCCCTTCTTGCTCCTCGGATGGCAGCACC
-AATGACATTCTTTCCACTCCACCCAGTGGCTAGGACATGCTGAGTGCTAACCAGCCACCT
-CCAGATCCCATGACGTGCACCCAAATGGGGGACAGATGGTAGGAACAGGAGACACCCAGA
-GACTGACCGTTGGAGCAGACTCTGTAGACACTAGCCTGGGGACCCCAGCCCGCCCACTAG
-CTGAAGACCCCAGCCCCCACAACGGCCTGGGCCCCGAACCCACCTGTATAGCTGGTTCTC
-ACTGCCCAGGTGGAAATGTTCGTACTGGGCATAGGCCTCGTGGCCTTCCCAGTCTTGCAG
-CTCCACACGCAGAGAGTAGGCTGCCCTTCTGGTGAGCTGGTGCACCACTTCATTGCCCAG
-CCAGTGCTCCCCAGCTGGGTCTCCGAAGCCCTATAGGGAGGGGAGCGTGGGGTGAGACTC
-ATGCTGAGGAGGAGGCCATGTCCCTGGCTGAGGAGCTGGGCTGGGCCAGGCTCCAGGGCT
-ACTTATACAAAACCACTGTGCTTAATGATCGAGTTCATAAGTACAGTGTAGGCAGGACTG
-GGAGTAGGAGCCCTCCACCTGCTAGAGGGAAAAGACTAAGGCTTTTGTAAGTGTAAAAGC
-CTGTTAAAAGTTATTGAAATCAcattcctctgaagttcaagaacaggaaaaagtaatatt
-tggtgactacctttggtggagtattgactgggagggggcacaaagtgggcttctggggtg
-ctgggagtgttgtacatctagcactgaatggtggtcacgtggttaaatacatatctaaag
-gctcactgagccttacactttatttgtgcgcttagacacatgtacgttaaacctcaacaa
-aaaTTAAATAAAATATTTCAATCAGCTACATAAATAGTAGAGCAAACTTTGTTCAGTGAC
-AGCGCAGCCACTGCAAGATTTCAGCAACACAGAAATGTAAAACTGAGAGTGTGGGGAATG
-TCATGTCCCAATGCCCTTGGACAGAACAAGAATTCAGCACCAAGGACAGGGGCACACCCA
-AGGCCCGCTCCCCAATTTAGTCACGATGCAATGCGGGTTAGCCTGATGGTTAATATTCAG
-GGTTCTTTTGTGTATTTCTGCACCTGGACACCCTATTCCTCCTTGCCATTTTAATGGTTG
-TTTAAAGCCCAATTAGTTCAAAACACTCATAACTTAATTTGGTATTTATTTTTAAGTATT
-CCTTAAATGAACAGCAAGCAGACGCAAATAATAGAACTGCTGTATCACTTTGTGGGTATC
-TTTTTCTATTTCTTTGGCTTTGAAAACTTTAAGAGCTTTTAAGTATTTTAAGTCAGCTTG
-GCAAAAAATCCTTTATTCAAAACCTAATTAAAAAATTGGAAAACAATCGGGCTTCTCATC
-TGATAAAATACATGTGATCTTTGGGCCTGCAATTCCTCGTTAATGAATCTCTCCTGCAGA
-TATGATCATAGACGTATGAAAAGACAAGAAACTTCATTAAAGCAACGCAGTCAGGGTTGA
-CTGGGGGGATTTTTATTCTGTCTCCTCCTTTGTATTCtttaaaaaattagaaatgtatat
-gtatttttttaaaaaaaattaaaacaaaaataaaGCTAAACTTTTTTTCTTAGAACATAT
-GTCAGAACTTTCAGAAAGAACATTCAAATTCAGGTGATGGGGTCCCATAAAGCAGATGTG
-CACTGTCAGCTTTAGATGAGTTGATTTTTTCTGGGGGAGGAATGAGGGCAAAGCAGTCCC
-CTTCCAACAGCCCAGCCCCAGCCCCAGGTTTCAGAGCAGAATGGCCCCTCCCCAAGGCAG
-CAGGGCTACCTGTTTGTAATCCTTCCAGTTCCGCTGAAAATTCACGGTGCCATTCTCACG
-GCGCTGGATGAGGGTCCACCTGCCTCCACTGCTCTGCAGGTCACAGAACACCTGGAGGGG
-GTGGGCAAGGCACAGCTGGGAGCCCTTGGAGGTAGCCAGAGGCCAGGCCTGTGCTAGCCC
-AAATGTGGCTAAGCAGACAGACCCCCACAGAGCAACAGGTgagcctgggggtcctgggca
-tcagaaagatccaggcttaaattccccacccattgtcatcatttttctaaagtggtgggt
-aaggaatgacctctcagagccttcctctcatttgtaaaatggagattcataccttaacct
-ctttgtgcctcagtctctcatctaccaactggggttgtgaaaattaaacgagatgagtca
-cgtaaagtgtttagaacagtgcctggcagtactaggtaaacggaagctcGACCTCTTTTT
-GTTGAAAGGAGAGGTTAGCAGGTGTGTGAGAAGTGTAAAAGACAACCTGGAGACAAACAG
-AGGCATTCTCCTTAGTATATTAAGAGGGGGTGAAAGGAAATAGAGCAATGgtaatactag
-caatttgagggccgaggagggaggatcgcttgagctcaggagtttcagaccagcctggga
-aacacagggagactttgtccctacaaaatgtttaaaaatattagccaggccatggtggca
-tgtgtctgtggtcccagctacttgggaggctgaggcaggaggatcactcgagcccaggag
-gtcaaggctgcagtgagctgtgatcatgccattgcactccagcctgggcaccagagcaag
-accctgtctcaaaaaaaaaaaGGGAATTATGAAGTAGGAATCTGCTAGTTGTTTCCcttc
-taggcctggctctcagaccctccctcctgacatccgtgctcttctctgtcacccttctta
-tcggatgacttgaccttaaattttaggacaaccttgggagccactgattgaaaatggtgg
-cacctctattagccctggtttctaatttcccacatggagcagaaccccaactcctgcctt
-caactggactatatgtaaactagaaagaaacgtctttgggctaaggccctggaattttgg
-gggttgtttgtaatatcagctatcatcatcttaaccaacacTGAACTATTTTGTGCTGTT
-CCAGTTAAAGCACCTCTGAAGTGATGCTGGTTAAGGATGCACTTCCAACTTTGGGAACTT
-CTGCTTATCCCCACAATCTGATCCCTGACTGCTGGGAAGTCAAAGCCACCCCTACACCTC
-TGGTATTTCAGATACTGGACAAAGCCTGATCCCGATGGGGTGCGGGGTGTCTGTTTGGGA
-AGCCCTTGGCTCAGCACCCTCTAACAGCCACAGTTCCCAGGGAGCCCCCTAACCTTCCTG
-GGCTTCGTTGCATTGGACACCTGGATGGTGTAGACACCACTGGCACTGGCCCCAGAGCGC
-TGGATCTCTGCACAGTCCTGGAACACCTGCTCACCTGCCATTATGAAGGCTGCAAAGGGA
-CAACACAAAAGTCAGTTGGAGGTGGGCAAGGAAAGAGAGAAGGGGCCAAGTGGGCATGCC
-TGCCTGCTTTGTGCCAGGTTCTGGGTTGGGAGGTGCTGGGGACAGGGAGATGAGTCAGAC
-CTgggaagatttcgtagaggaggtgacagtaagctggaacctgtgtaatgagcaggagtt
-gcccagtggagaaggggaaggtgttccaggcggaagaaacagcatatgcaaaggccccaa
-ggtaggaagggccctagtgtgtgcagaggacagGGCATGGGGAGGGGAACTAAGGCTGAG
-GCCAAGGAGAGGAAATGACTCACACCGTGAGAGAGGAGTTGAGACCAGGGAGGCTGCTTG
-CTGTATGATGCAACTGAGAGGGTAGAACAAGGCTGGCACAGAGAAGGTGGGGAAGGAAAA
-GGAGAGACGAAGCTGAGATTTCAGCAGGGCCAAGTCAGCCGTGAGTGCCAGGCTGCGGAG
-CCCAGATTCTCTGGGCTGagaaagagcactctgtccagagtgtggaggggggcctggagg
-ggatgagactcaaagctgggaggccagagaggaggctgctagagttttctgggagagagt
-tactggggcctgaacTCCAGTGAGGCActtcccatttcacagaccaggaaactgaggccc
-aagagtgaggcaactggcccaagggcacacagccaggtaaggcagaacCTTCCTTCTTTG
-GAGCTCCCTTGGGTGGGAAGCTGTGGGCTCCCCTTCATAGCCCACCCTTTTGGCTGTATC
-TCCCTGCTGCCCTGGGCATATGCTCCCTTATTCTGTCCTCCCTTGAAGCTGACTGCTGGC
-CTTAAAGGGCCCCTGTTTCTTCCCTCTGGACTACATGAGATCGGGATAGTATTAATGACT
-AAAACCTACCAGGGGTTTCTAGGCCTGGCCTGGAAAAAGTGACTGTTGACAAACAAAGTG
-CAGAGATTTAAAATCTCCTCTGTCTCAATTAGTGGAATCCAGTTAGAGGTTTGAACTATG
-ATTCTACCAGAATCCAATCTCTCTGGGTAGCCAGGTACCCAGGATGGGGCTAAAATTCCA
-GATGGATAGGTTGTCAACACCAGTGAGGAACCAGGAGGCTACCACAGGGTGGGACTTCCT
-GGTTTGGCTTTACATCTGAACTTCAGGGATCCCAGATCCTGGATCTGGGGCACTTGTCCA
-GAGAAGGCTATTGCTCTCATGTCACAAATGAGATGACTAAGACCCCCAAATCAATTCCAG
-TTCACTCACAAGCATTTCCTGGGCAGTGGAGACCCCTGCCCCACCTGTTGGCACCCCCTC
-AGCTCCCCACAGGGAATTGGAGTCCAGCCAAGCATGAGGAGGCTGTTGGCCTCAAGGTGA
-GCAGGGATGGGCTGAACCTCACCCAGTAAGGCAAGGACAGAGCCAGGGTTGGCCTGAGAT
-TTCCAGCCACCCTTTCCAAGGCTCTGCTCACTGTTATTTTCCTTAGTCTacaacaatatc
-aataacaataacaacaataatatcaacaCAAAAAGTGAAATACTCACCATGTATTGTAGT
-GTTTCCAAGGTGTCATGTAATGCCAGGGGTAGTTTGGGGCCAGGAAAAATATTTTTGGGA
-GGCATAAGAATAGGATGGACTGATATTGATATGCAACAGTTTGATCTGGTCCTCCTCTGA
-ATATCTGGGCTGGTAATTTGTACCAGTTTCCCTCGCTTTtgtgcataggcactgtgctga
-acccttttgtatgcatgaactcatccgattctctgtgcaagaactctatgagattattat
-tcccgttttacaagtaagaaaaattgaggctctgagaagttaaataaatgacttgtatga
-agttccagtgctaattaataagtgaaggagccagggcttgaactccggcccatctgactg
-caaagccagtgcccttcctcctacacATCTTCCTTTGGATTTCCACCACTGAGCATATGT
-AAGGTTGGGCAAACAGCCTGCATGAACAATCGCTGCTTTTATATCATGCACAAGTTTGGT
-CTTTTCTGCCTGTGCCCATGTCCTTGTAACCTTCTGAACCAAACTCCCCAGTGCCTGGGA
-ACATCAGAAGACTTGACTCTCTTCTCCTTTCACTAGCCTCCACCTGACTGGGACAAAGCC
-ATGCAGAGAGCTAGTGCTCCCTTCCTGCTAGACTTCAAGGATGCCTGGTTCCTGTGCCCC
-ATCTCCATCCAGCCCTCTCTTCTACACCTGGTGACTGAGCCTCTCCTTCAGTTTCTCCAT
-CCAGAAGGGGGTGAAAGCAACTGCCTAGTGTCCTTCCCTGGTGATAGTGGAGCACGGGGG
-ACAGGGTGTTTGGGCAAAAGGTGCCCAAGGTGAGGTGCCCAACACAACCTCCTACTCAGA
-CGATTGAGCAGACATTCAGCCTCATCTGGGGACTGGGTTACCAGTGGGTTAGTGGGAGGC
-ATTGGGCCCAGGCCCTGTGCCTTGGGCTGAGCTACAAGAAACCCACACATGGGATGAATT
-CAGGCAGCTCAAGGCCAGGTCTGTGCATACGCCAGTAATAGGTTCAGGTTAATCCACATG
-TCGCGATTTGGAAGGTGTCTACTTTTCCTACCTGTAGCTTCCTTAGGCCTCAAACCCCTA
-CTCAGCTGGGTCTGCCAGACTGAGATGGAGCCAGGGTGGAATCTTCTGCCCTCAAATCCC
-TGTCAGCCCTGGTGGTGCCGGGAGCGCCATCACTATTGGGTCTTAAAGGCTTTCCAGCCT
-TCCACTATGGATCCAGGAGCAGCAGTAGCCCCTTTGGTCTTTCTCTCTCATCAGGACATC
-TCCACTCATGGTTCCAGTCAGAGCTTCTTGAAAGTAGTCCCACTCTGTTCAAAAGCCTCC
-CATGCCCCCTGCTAGCCTCAGGCTAAGAGCCCTTCTCCTTCGCACAGCCTTTGGACCTGT
-CTATTTTTATGGTCTGGAAACTTCAGGAACACTGATAGCTGAGCATCTGGCACATATTAT
-GCACTCAAAAACCATGTATTTCTTTCTCCTTCCCTTTGGGACCCGTAAACCAGGGactgg
-acatttttgcaagagacaggagctgtgactgtgcattcactgctgtatccccagcaccca
-gcactgggcctgccacacagtaagtgcttagtaaatgtttgttgactgagtgaTTGCAGC
-TGGGGCCAAGAATGCCTTGGACACCCCAAGTAGGCCGTGTTAGAAGGAGTCAGTGAGAGC
-CTGGGAGCCCAGCCCAGAATTGTTTTCTTGACCCAGAAGCCAGGGCCAGGGATGCCTCTT
-CACTTCTGTTTGGCCCTCTTGGGCTTAGGGGCAGGGGCATTAAGATGAgagaggtccttg
-gggtgcattgagtctaacctcccagttcctcccattctacagccaggaaaactgaggccc
-agggaggggtaggacaagcccaagAAAGTGGGGCTGGAGAATGAATCCTGGAGACCAAAC
-TTGTCAGTCTGGATTGCTGTTGCCCTCATCCTCGCCTCCAAAACCCatgggtaaactgag
-gccaagagaggggcaggggcatgcccaaggtcacccatggaatcaggggacagggcctgg
-attgggaTTGTTGTTGACGCCATTATTACTGTTTATTGTTGTTTCTATTTCACAGATGGT
-CGGGGAGGGTGGGGCCCGCAATGGCTCCCAGGCGCCCAGAGACCCTGGAGGGTGAGCAGG
-GTCTCCCCTCCCCTCTCCTGCCCGTCTTTAGCCACACTGGGGCGCACACCGCTCACTCAC
-CCGGGGCCGAGGCGTTAGCCCTTTCTTGCACCAGGTGCCGCAACAACACCAGCAGCTGGC
-GCAGGCTGTGCTGCTGGTCCTGCAGGAGGCTGGAGTTGTGCCTGACACCGCGCAGGCCGC
-GCTCGATGTTGGTGAGGGCGGCGCTCTGGCGGCTCAGCGTGTTCAGCAGCTTCGCCTTCT
-TGCTGAGGATGCTGGCCAGCTCCTCCTGCTGCTTGGTCTCCAGGGCCTGCAACCGCTTCT
-CGAGCGCGCTGCGGGGTAGGGGGCGCACAGAGGTGAGCCTGGCATCCTCGCGAAGCACGC
-ACCCCCGCGCGCCTCCCCGGCCCTGGAGTCCCTGCAGCCCGACGATGAGACTCAAGTGTG
-GTGGAACGTCCTGTGCCCACTGTAGGCACAGATTGAGGAGGGGAGAAAAGAGATACCCGG
-CCCTGGAGTAATATAGATTGAGGTTTAGTGGAAGAAAGAGGTGGTGTGGGAGGGACACCA
-GCAACTGGGTAGCTATTATCAAATCCCAACTGTGCTTGCTTTTTGACCCAGCAGTCTACT
-CTCAGGAGTTATCCTCTAGGGAGCATGGTCAAGAATGGCCCTGGGGACTTGCTTGTAATA
-GAAAAACAAACTAACCAACCAACCAAAAAAGATATAGCCTAGATGCCCAAAAGCCAGGAC
-TGGCTGAATCCGTTGCGTTTTGGCGTCCCTGGAAATGTTCCGCAGTCATGAAGGAGGAGG
-CATTTGCACAGAATTGGAAAGATGCCCAGGACTTGGGGCACATCAAGCCTAACCCCATGT
-GTGGCAAGAGAAGAAAGAAAGTATTAATGTAAATAAAGAGAAATGGGGTGAACATATAGG
-AGAAGGCTGGAAAGACCGCAGTGGTGCCTGTGTTTGGGAAGAATATGAAAGAAATTCCCT
-CAAGTGCTGTGACTTCTGCAGAGCAGGTTTGAGTGGATGAAGATGGAGAGGAGGAAGATG
-GGGGCAGGATGGAGGGCCCAACTTTCACTTTTATTTTGTACAGGTTCCTGTTGTCCGATG
-ATATTATAATAATCAAGAGACATTTTTTGTAATGGATTTAGAAGCAAAGAGGAGTTTTTC
-AAAAGAAAGCCTTAGACTCAGCTCTTTCTTTTTGGACATTTTATCCTCCagatttactca
-catgtgtgtgaaatgagatatggaaatgttactcatcgtatcactggttggattagtaaa
-aggctggaagcaacctcaatatccattaactggggactggaggaataaaagcagggacca
-catatggtggagcattataaaggtggagaaaaaaatgagcaagcatgtcATGCAGTTATA
-GAATCTTTCCAAGGTAACTGAATAATAATTTGTAGAAACAAGGTATAAACAAGTAGTAGG
-CTACATTTGGGCTTAAAAAGGATAAAAATGGGAATGTAcagatgctccaaaatgtatgat
-ggggctatgtcctaataaagccatcgtaagttgaaaatgtcctaagtcaaaaactcattt
-aatacacctaacctgctgaacatcctagcttagcctagaccatcttaaacatgcttagaa
-cacttacattagcctgtgattgggcacgatcatctagcacaaaacctattttataacaaa
-atgttgagtagcttatgtaaggtattgatattgtactgaaagagaaaaaccgaatggttg
-tatgggtactcaaagtacggtttctactgcatgtgtatcactttcataccactgttaagt
-cacaaaattgtaagcccaaccattgtaagttagcaatcttctgTATGTATGTGTTTGCAT
-ATTCATAAGAAACCCTGGAATGTCAGCTTAtaggatgtcagcttcacgaggacaggggct
-tttgtctctttgttcacttctgtatccacagtgtctacaatagtgcctgacacatgaaaa
-gagtttgaaaaataattgttggttgaatgaatGGAAGGATACACAAGAAACTAGGAACAG
-TGGCTACCTCTGGCTTGGGTGGGTGGCTGAGAGACAGGGCTGGGAGGGAGACATTTTACT
-GTATATCCACTTGTGCCAACTCATTCTGCAGACTAAGAAATTGAGTCCAGCTAGGGCAGA
-AGAAATTTCCTCTGGACTCCCAATTATGCTGCAGGAAAAGAGAGAATTGGGGCACACTGA
-AATTCTAGAATTCCTGCCCTGTCTTCATGGGCCAAGAGTTTACCGATGACATCCTCCATC
-CTCACTGATTTCTAGACACCTAGTGTTAATTTAGAGTCATTGAAAGTGTCCCAGTCCTTG
-CCACTGAGACCTTGGGTTGGGAGAATAAGAAGATGGGCAGATTGTCATTAATTGCACCCA
-GATTAGAGAGAGCTGGGGGATCTTATGGCCTTATCCTGAACCGGCATGTGAACAACAACA
-TCTTGCCTGATTCACAGGCCTGTGGCTTGTTCAGTGGGTAGATTTTGCCTTCTCCAGAAC
-CCTGACTTTGGCAGCTTTTTTTCTTCACTCAGCTTGAAACTGAGGTGAAATCAGCCTTAG
-CTGCCAGATTTTTCTGCTTTATCTAAACCTCATGACCGCttttttttttttttttttgta
-atttaaaGGGTGTTCCCCTGATGCCCATTTGCTTATAAATGCAAAGACTCTCTGATAGTG
-TGGACAAGAACCTGGTAACTGTGGTTGTTTCTGGGAAAGGAATCGTAGATAGCACCAGAT
-TTATTTATTTGCAAAGAAGTAAAGCCAATAAAGTTTACCggatgaatagtatggtgggtg
-aattagatctcaataaagctgttaaaaTTTACGAGATAAATAaaagaaggaggaaggaag
-gaaggaaggaaggaaagggaaagaaagaaTCAGGGTGTCCTGGGCCCCAGGAAGATGCCT
-ATCCCCTGTCCCACCCAGTGCAGGGGCCAGGCAATGTGTTTGCCTGGCTCCTAGcccagc
-cccgtatccactctcatttccagcctcagtctagactccaaccctggtttcagtccttcc
-ccagcaggggctattcccagctctagtttcagccctaactccCAGGATACCTccttgccc
-caatcctaatccaagctcctaggtctggctgcaggccctatcccagacaccagcccacgt
-ccagcttccggtcctggctccagccccagtcctagccctggctctggtgcctgccctagg
-tcctaaacttgactccagccccagcccctgtcctagtcTGGTGCCAGGTGCCACACCCAC
-CTGTTTTGGCCCTGAAGCTGCTGGAGCTTCTGCCTCTGTAGCAGCAGCTGGTTCTCCAGC
-TTGTTGGTGGACAGAAAGGTCTCTGGCATCTGGGCATCCATTCTTGATGTCTGGTTCAGG
-AGCTGCCCCAGCAAGCAGAAGCAGGTAGGGGGCTGCGTAAGCGCTACAGGAGCCCTGCCC
-AACCACCCACCTGCCCACAGGCCCTGCCACTCCAGAAACTTACCCATTTCCACTCTCCCA
-GTCGTAGTTCCTGTGGTTACTCACTCACAGGCCCTGACTTAAGCTTATTacctgcttcct
-aaatttgcctttctccatcactgcaatggcagctccattctccctgatgcttaggcccca
-ggagctgtcaaccctgtcccccacatccaactcatctgcaggtcctgtcagccttgcctt
-ccaggtggcccctgaccacctctctcctgctctgtggccctcactctggccctggactgc
-tccctcattgcttgcaatctattctctactcagtagcctggggctgcctcttaaaacatg
-tttgctctgttcaaaagcttcctgtggctcccatctcatgtagcggaaatgccccagttc
-tcaccatggcctgcaaggccctatggtgtgatctgtccctatcacttctccagctccttg
-cctgccactctcctcctggtcactccagcatagtggtctcctgatgttcttgaacctgcc
-agcacgtccatcctccctccgggcctttgcacatgctgcatcccttgtctggagcactct
-ctgcagtaagcctggctgcagccctaccttctccatggcccttcctggccttgctgtatg
-agcttgcagctctcatccccccccaccactcccaatgcaccccctctcttgctctctctt
-ccatgctattttctccttagcgctgtcactggctaacatatgcagacatgtgttgcttaa
-tgacggaaagatgttgtaagaaagtcgtcatcatgcaatttcgtcattgtgcaaacatca
-tagtgtgtacttacacaaatctagatggtatagccgcctgcatacctaggctatatgaga
-cagcctattgctcctaagctacaaatccatacagcatgtgactgcacccaatactgtagg
-cagttataacacagtgggaagtatttgtgtatgcatatctaaacacagaaaaggtacaat
-aaaaacagcatacgatactcttatgggactgctgttgtctatgtggcaagttgttgactg
-gaacattaagcagtgcataaccatatatgtcacttatcttttcattttcaggggaagctt
-cacaggagtaggaatgtatgcctgctttgtttcctgctgtatactagacaccagtcttct
-caagcagtgcctggcacaCGGGGGATCAAACAAACAAATGGGCACAAACTTGTGTCTATT
-TGTTATTCACTTTTTCATCCACTGACTTCCCTACCCTTCATTTATTCACTAGTTCCTTCC
-CTGCTCTTTGCTGCTCAGATACCTCTTCTCTCCAAGTCCTTGGCCCCAGAGGCCCAGTGA
-Attgtttcttatccatcttcccctggcacattgtaagtcctctgagggcaagggagctgt
-gctactatacccctcattccagtgcccagcacagacccaggcactgaagttacagaggca
-gaaaagccaagcccagcatccaccccccagggctcatagcttggagagagatagttttat
-gacaagttcatcagggaggagggacccggggggctacaggcccagaggaggccttgaccc
-tactcagggtcagagatcaaggtaagatgactggggCTACGAACCAGCCTGGCCAGCCAC
-AGGCCCTCAGTGCCCACTCAGTCACCCTCTGTTACCTGAGCCTCCATGTCGGTCAGCTTG
-CGGATCTGGGCAGTGGTCTGGTTCAGGAGGCTGGTGCCCAGCTCTAGCATGGGGGCCGTC
-TGATTCTGGGCCATTTGCTGCTGGACCTGCTCCAGCTTCGACCTCAAGATCGTCTTGATG
-GCCCTCTCTAGCTGTGGGAGACCATGGGCTGGGGTCACGGGGGAGGGGCGGGGGAAGCCC
-CCTGTCCCTCCCACGTGTCACCATGGGAGGGCACTGAGCAGCCACTTGAGGCCTCCCTGG
-CTCAGAACATGCCGGGccaggtcaggccaccattacgtcttgcctggactatcccagtag
-atttttccctgggagggatttatatgcctgttttgtctgcctctctgcttccatctttgt
-cccctgcacagtccatcccccactaggcagccagagggatcctgctaaacctaagtcaag
-tcacactcctcctttgctcaaaatctttccagggttcctatctcacgcagaggaaaagcc
-atgactgcaggttcctccgtgactgggcctgccaccacactctcattcctctcctattcc
-cctctccctcactcacttcaatcccgatgcaatggctccatgacatccctctaacgaagc
-aagcatgtgcccacagctgttccctcactgttccctctggaatcctcccccAACCCTGAT
-CCGCATCTGCGTGGCACAcctcctcatgctgtttcagctttcttcataccacttatcacc
-acctgactttttaaaatcactatctctctttttatctgtctgttgtctgtttctctctct
-agaatgtcaattccatgaagccagggacttggttttgctcactgccttgtttctatgttt
-agcacaatgcatggtgcacagtgagtgctcataaatgcgcgttcaatgaattgatGAAAA
-AGGGGAAACAGCAAGGGTCAGAGCACAGCGCCCAATCACATGCCCCTTCACCAGCTTCCT
-CAGGGTGAGTCAGCCAGCAGGGAGTGGGAATGCATCTCTCCCTTGTACAAAGAGTTTGCA
-GGTCCAttggccaagctgtgttttctatcttcagatcccctctatctgccaaatggggct
-ggactggccagtctccaagggttctcccagctctgatgttctgggatcccaCATGCAAAT
-GTTCATTTCTTTGACAGGGCTGCTCTCTTTCCCAAGGGCAGGAGAGCTGGTCTGGCATGA
-CACCAGTATGCTGTTGTAAAGGTGAACAGTGTGTTCTCAGGGCTCGGTGCCTGCAGGCAG
-AGAGCCAGCTCCCCTCCACCATTGCCTCTCCATTCGGCACACATGCTGGCCTCTCACCAT
-GCCCCCCACCCCTGTCCCTGGCTCCTTCCCTTGCCCTCTCACTCAGTCTTTCAGAAGCCA
-GCTGGACAGCTCTCAGGGTCCTTGGGAAGATGGGTGCTCCCCAGGAGAGGTGGTGACCTT
-GGCTCGGGCCAGGCTCCAGCCACTTCCTCCTTCATCTCTTCTCCCTTCTTCCATCTTGAC
-TGTTCACTCCCATCCCTTCCTCACCCTGGAGTGTTTCAAAGGGAGCAAGTTCCATTATCA
-CATCCTGGAGCGGGTGCTTGTGGGCGGTAGTAGTACTGGTTAGAGCTgtgtttctccaag
-tgtggttcttccgtcagcatcagctgagctcattaaaaatgtgaatttccaggtcccacc
-gcagacctcctgaaccagaaactcttaatggtgcccagccaactgtggttaacaacaccc
-ctggctgagtcagatgcctgctcaagtgtgagagcccttgATGCAGAGTAGCAGCAGGGA
-CTGAAGACCAGAGAGACCCCCCTCCTTCTTTCCCTGCATCATCAGCCCACCCCCTCCCTG
-CAGCACACAAACATGCGCTAACAGCTTCCATCTAAAAACTAACTCCACAGCCTCTCTGGC
-TGCTTCTCCAGTTTCTCTGATCTCATCAACACAAAACTTCTACAAGTTGTCTCCATTTTC
-TCACCTTCATACCCACCCTCACTTAAAAAACAACAACAACAACATAACGTTAATAATAAA
-ATGATGTTACGTTTCACACATACAAAAAAGCATAGAggccaggtgcggtggctcacacct
-ataatcccagtactttggaaggctaaggagagtggatcatttgagcccaggagtttgaga
-ccagcctgggcaacatggtgaaactccatctctactaaaaatacaaaaattagccagcca
-tggtggcataagcctgtggtcttagctacccaggagactgaggcaggaggatcgctggag
-cctgggaggtggaggttgcggtgagctgagatgcaccactgcactccagcctgggtaaca
-gagtgagaccgtgtctcaaaaaaaaaaaaaaaGTATAGAGAATAAATATAGCCCATAGTG
-CTCATCCTCCTGTATACCTCCAGTCATGTCTCTCCATCCTGGGAGGTCCCTTTGCCTTTT
-GGCgtctcactgttgcccaggctggagtgcagtgatgtgatcacggctcactgcagcctg
-aaactactggcttcaaacaatcctcccacctcccaaatagctgggacgacaggcgagcac
-caccacgcgcagttCCCCCCTTCGCTCTTTAATTCACCTTGTCATAGATAGCCCTCCTTG
-ACACTGCCCTCAAGGGACActccatcttgcttgacatctcaggagcaatcacctggatgg
-ccactccctgttgctggacgacttccccccaatcctggtttcctcctagcccctaaccac
-ccactctctgactcctcctttacagactcctacacggcagggcccccatggcccagtcct
-gggtccttgtctctatgtacattcactctctaggtcaggggtccttaatgaagaagccac
-aggctccatgaacttgagtgagaaaaaaagatcacattttttgtccactaatctgcaatt
-aaaatttggcatttccttcaattatgagcctaggtcacaaaccacagccatactagcagg
-tcctgagagtcattaccaatagaaatcccaaatattttcatatcacaacacactcttacg
-gtatcttaaaacattgtttttactcaccgggactttggaattatagacatcacacccacc
-actggataatgctatgcctgatcacagattttatttttcatattttgcttatgatttcca
-tattactgagtgttcttatgctttgattttatgcatttctgagaaaggattattaagctt
-caccaggaccagatgccaagaggTCTGAGGATCCAAATGCATCAGGGCCCTGCCCCAGGG
-GCTGAGATCGGTCTTTGGACTTCCACATCCctctgtgctaatggagccatcaccatctcc
-cacccagacttctcccctgcatgtccccaactcgccatctctgcatggtttccaatgagc
-atctcaagcccagtgtgaaactcttcattcctcagctcccatcgcccctgtccctgtaac
-tcccaccccatgcttcgaaatctttcccatctcaggaaatggctccacccagttctgaag
-ccccaaacccagacctcaatcttaacttctctttttcttagcggccacactcaacccact
-agtaagtactgcccactgtgatcccaatttggatttcaaatctgtttactcgccttattc
-tgggccaggctgccctcctctcCATGGGTCTGCCTTTTGTGCCTTCCTGTCTTTAACCCC
-TCTGTCAGCTCCCAGGAGATTCTTTTTTTTTTTtgcagttgcaagatttaatagcatgaa
-atagagtgaaaacagagctcccatacaaagggaggggacccaaagggggttgctgttgct
-ggctcgaatgcctgggtttatatgccaatccttgtctctcccactgtgctctcaggcaat
-agatgattggctatttctttacctcccatttttgcctaattagcattttagtgagctctc
-tgattggttgggtgtgagctaagttgcaagccccgtgtttaaaggtggatgcggtcacct
-tcccagctaggcttagggattctaagttggcctaggaaatccagctagccctgtctctca
-GTccccctctcaacaggaaaacccaagtgctgttggggaggtcagctgatgaccgcacta
-actgcttcctgctgaattagggagtagtaggggtggtgcagttgagatttcctcgggagg
-ggtgccttcgatgtcattaacatcagagcatgggctagcaggctggtccgggggtccgtg
-gtaaatcttagtcatggactgcatgtgagctccCAGGAGATTCTAATGTGTGGCTGGCTG
-GGCCCACCAGCATGGATGAGGACAAATATAGCTGTATCGAGTTTGGTCTCAGACTTTTTC
-ATGCATCATTGACCTCCTAGAACCTAAATTAAAAAGCAGACATCCAGGTACTGAGCACCT
-GCTCCAAGTAGTCAAACAGCATATTCATGCCTGAGGTGAGACTTTCCCAGGcatcttccc
-caagcttctcatttgcctgaacatagacaaactgaggcccagaagtcttgcccaaggtca
-ccatctggcaggCTAGGCTCTAAGACTCCTTGCCTGAGGGCTGCAGAGCTGAGCTGGTGA
-TTCAGGGCAGCTCAGGGTCCCCTCAAGTGACTGGAGCTCCCCAAGCACCTCACTGGTCCC
-CCACTTGTCCTGTGGTTGCAAGTGGCTGGGCAGGGCAAAGGTTACCCACAGCTGGATCCC
-ATCACCCAGTTTGCCACACCCGCCCACCAGCACAGGCCCTGGGATGGATAATCTGGGCCA
-GATGGGCTCAGTTAGGCTGGGCTGGGCTCTGGAGACTAATATTGGCCTGGGTGGTGGGAG
-CTAGGTCTGGCCCATGGCTGAGGCACCAGCTGGAAGGGCAGGGAATGGATCCCAGTGGAG
-GAACTCACCCAGCGTGGGATCTACTTCTCTTGTTTTTTTGGATCTACTTCTCTCTATGCC
-GTGCACCGACTCCAGGATTAGACCTGCCCCTTCTCCATCACTCTCAGGCTGCCGAATTCT
-CAGGCCTATGATGGGGTACAAAGGCCTGACCTTTTGTCACCCTTCCAGCTGGCAAAGAGA
-CTGAGTTTTGGTCCCTGGTCTACTGCCCCATCCCCTTGGCcctgggtttgagttctggct
-ctgccacactttcattgtgggcccttggagactactgtgtttctctgagccccactttac
-agatctgggtcatgggTCAGCACACCCTGCTCCTTGCTGGGGAGAGGGCATTTGCAAAGG
-GTCTTGAAGGAAAAGAAAGAAATTTTCACAGGCAGGGGCTGGGGGAGAGGGGGTGATTCA
-GACAAATAACAGGTGCAGATCCGTGGATGAGCAGCCTCCGTGGCCGAGGAGATCTGCTCA
-AGCCTGCTTCTCTCCTGCATTATTTATATAaaatggacatcaattggtgaatggagaaac
-tgcagtccatccatgcagtggactccattgagcaataaaaaggaaagaaccattgatgtg
-tgcaaacacacagatgaacttcagatggatcatgagtgaaaaatatgcaactccaatggt
-tccatactgtaggagtctatttgtatgactctctaaaaatgtcagaatctgtgattgcca
-gggcctgggtccggggagggggtggggattgattgttaaaggacacaggggagctttttg
-ggatattggcaatgttctatgtcatgattttgctggtggttacataactgtatatgtctg
-tcaaaactcatggaactatatgtgaaaagggtagattttgctgtacgtgggtcatacctc
-agtaaaaaaCAACGCCCCCAACACAAGGTTCTATAAAATGCCGCAGATATACATATGTAA
-CATTAAATAGATCTCCTCCAGTGAACCCCCTCACCCTCTCTGAGTTTCATTCATGTGttc
-attcaggaattatttcttgagcacctactatgtgctcatcctgtattaggtattagataa
-tcagaaatgagcaaaattcgtaaagtttctgattccagggcacttctactaaatatatca
-gttgcattgaaatcttgatgaatgctatgaagaaaataagacagggtaatatgtggggtt
-ggaggcaagtttagccagtatgatggagaaagccccaccagagagggccatctgggctga
-gaggctgagaagaagcaaggtctgggagagtcaggagggagggaattccaggcagaggaa
-aaggcaagtgcagaggccttgaagtgggagcgtgtctggtatttgaggatcaaaatgaag
-ATGGTAACAATGATATGCCCTGCAGCTATCTCTCTTCCATGGAAAATGGTGCATGAGGTT
-CCTGTTTGGGAAATGCATCTTGTCAACTGCAGATAAAAATCAATgcagagagagtagtgc
-tttgtatggatgaagctgtgtgtgaatcacagctcttagcttactggctgtgtgacctta
-ggctggggcctctactggtgtctgagccttttctctaaaatgaagataatcatagctcct
-tcccctgggttgtagggagcattcctgagataaCTCTGGTTGTAGTTACATAATGAACGC
-ATGATAAATTCTGGTATGTCTGGGCCATATCTTACTATGtgtcaggactctgagcccaag
-cctgcgcgtatacatccagatggcctgatgcaactggagaaccacaaaagaagtgaaaat
-ggctggttcctgccttaacggatgacattaccttgtgacattccttctcctggacaataa
-gtctccgtagctccccaccaagcaccttgtgacccctgcccctgcccgccagagaacaac
-cccctttaactgtaattttccactacctacccaaatcctataaaactgcccaccccatct
-cctttttcagactcagtccacctgcacccaggtgattaaaaagctttattgctcacacaa
-agcctgtttggttcacatggacgtgcatgatatttggtgctgaagacccgggacaggagg
-actccttcaggagaccggtcccctgtccttgccctcattccatgaggagatccacctatg
-acctccgatcctcagatcaaacagcccaaggaacatctcaccaatttcaaattgagtaaa
-cggtcttttcactctcttcttcagcctctctcactacccttcaatctccctgtccttcca
-attcgggttcctttttctctctagtagagacaaaggagacacattttatccatggaccca
-aaactgcagcaccggtcatggactcaggaagacagtcttcccttggtgtttaatcactgc
-agggatgcctgccctgatcattcacccacattccattggtgtctgatcaccggggggaca
-cctgccttggtcattcacccACATTCCCTTGGTGGCATGTCAATTGCAGGGACACCTGCT
-TTGGCTGCTCACCCATATTACAGCCCAGGGCTGCTCACCGcccgcttctccgtgtctcta
-gctttctctttaaacttacctcttcactgtggtcaaccttccaccctgcattcccccttc
-ttctcccttagcctgtgttctcaagaacttaaaacctcttcaactcacacctgaactaaa
-acctaaatgccttattttcttctgcaatactgctaggccccagtacaaactcgacaattg
-ttctaaatggccagaaaacagcacttttgatttctccatcttacaagacctggatgattt
-tttgtcaaaaaatgggcaaatggtctgaggtgcctgatgtccaggcattctttcacacat
-tggtccctccctagtctctgctcccaaagcgactcatcccaaatctttttttttctctcc
-tgtctgtttccttccatctccaccccaagctctgagtcctttgaatccttcttttctacg
-gactcatctgacctctcccctcctccctgacgctgctcctcgccaggctgagccaggtcc
-caattcttcctcagcatctgctcccctaccctataatccttctatcacctcccctgctca
-cacccagtctggcttacagtttcgttctgcaactagccctcctcacctgcccaaaaattt
-cctcttaaaaaggtggcttgagctgaaggcacagtcaaggttaatgctcctttttcttta
-tctgacctctcccagatcagttagcatttaggctctttttcatcaaatataaaaacccag
-ccccgttcatggcccacttagcagctaccattagatgcttcacagccctagacccagagg
-ggccagaaggccaccttatccttaatatgtattttattacccaatctgctcccaacatta
-gaaaaagctccaaaaatgagattccggccctcaaaccccacaacaggacttaatgaacct
-tgccttcaaggtgtacaataatagagaagaggcagccaagtggcaacatatttctgagtt
-gcaattactcgcctctgctgtaagagaaaccccagccacatccagcacacaagaacttca
-aaacgcctaagccgcagcagacagttgttcctccaggacctcctcccacaggatcttgct
-tcaagtgctggaaatctggccactgggccaagaaatgtccacagcctgggattcctccta
-agccgtgtcccatctttgcgggaccccactggaaatccaactgtcccactcgcccaccaa
-ccacacccagagcccctggaaatctggcccaaggctgtctgactgactccttcccagatc
-ttctcttcttagctgctgaagactgacactgcctgattgcctcagaagcctcctggacca
-tcacagatgctttaggtaactcttacagtggagggtaagtctgtcccctttttaatcaat
-acagaggctacccactccacattacctacttttcaagggcctgtttcccttgcctccata
-actgttgcgggtattgacggccaggctgctagactccttaaaactccccagctttggtgc
-caactgggacaaaattttttttttttttgagatggagtctctctctattgcccaggctgg
-agtgcagtggcgcgatctcggctcactgcaagctccatctcccaggttcatgccattctc
-ctgcctcagcctcccgagtagctgggactacaggtgcctgccaccacgcctagctaattt
-ttttgtattttttttttagtagagacggggtttcaccgtgttagccaggatattctcgat
-ttcctgacctcgtgatttgcccgcctcggcctcccaaagtgctgggattacaggcatgaa
-ccaccgcccccggcctgggacaacattcttttatgcactcttttttaattatccccacct
-gcccagtacccttattaggccaagacattttaacccggacaagtcttacaggctggtcca
-agatcttcgccttatcaaccaaattgtcttgcctatccaccctgtggtgccaaacccata
-tactctcctatcctcaatacgcccctccacaacccattaatctgttctggatctcaaaga
-tgctttctttactattcctttgcatccttcatcccagcctctcttcggtttcacttggac
-tgaccctgacacccatcagcctcagcaacttacctgggctgtactgccacaaggcttcag
-ggacagcccctattacttcagtcaagccctttctcatgatttactttctttccatcactc
-ccacctactctcccactgaaacttccacctatcaatctcttcccacacaaggcaaatggt
-tcttggactaaggaaaattcctccttccagcctcacaggcccattccattctatcgtcct
-ttcataacctcttctatgtgggttacaagccaccagcccacctcttaaaacctctcattt
-cctttaagacatttaccttgtatttcactccatccttggctaccttccccttgctcttca
-gactctcctcccaggccctcttcttgtttgcttatacccagccctgtaaataacagtgaa
-tggttgcttgtagatactcgacgttttttcatgcaccatgaaaattgaacctcctcctct
-aggaagttaccccatcagtctccattacaacctctgacggctgccaccctagctggatcc
-ctaggagtctgggtacaagaaacctttagtactccttctcatctttttactttgcatttc
-cagttttgcctcgcacaaggtctcttcttcctctgtggatcctctacctacatgtgtcta
-cctgctaattggacaggcacatgcacacaagttttccttactcccaaaattcaatttgca
-aatgagaccgaagagttccctgttcccctcatgacaccaacaGTTCACTACTATTTTGTT
-TTGTTTTTCTTATTATTAATATAAAAAGACAGGAATaggccttgacttactcactgctga
-aaaaggaggactctgaatatttccaaatgaagaaggttgttttcacctaaatcaatctgg
-cctggtatatgacaacataaaaaaactcaaggacagagcccaaaaacttgccagtcaagc
-aaataattacactgaacccccttggacactctctaattggatgtcctaggtcctctcaat
-tcttggtcctttaatacctgtttttctccttctcttattcggaccttgtgacttccattt
-agtttctcaattcacacaaaactgcatccaggccatcaccaatcattctatacgacaaat
-gctccttctaacaaccccacaatgtcaccctttaccccaaaatctttcttcagtttactc
-tctcccactctaggttccgacattgctcctaatcctgctcgaagaagccctgagaaacat
-cacccattatctctccataccacctccaaaaattttcgccaccccaacacttcacctcta
-ttttgttttgtcccaacacttcaccactattttgttttgtttttcttattaatataagaa
-gacaggaatgtcaggcctctgagcccaagcctgcacgtgtacatccagatggcctgatgc
-aactggagaaccacaaaagaagtgaaaatggctggttcctgccttaactgatgacattac
-cttgtgacattccttctcctggacaatgagtctcagaagctcccccactgagcaccttgt
-gacccctgcccctgcccacaagagaacaaccccctttaacgtaattttccattacctacc
-caaatcctataaaactgccccaccccatctccctttgctgactcctttttcggactcagt
-ccacctgcactcaggtgattaaaaagctttattgctcacacaaagcctgtttggtggtct
-cttcacacggacgcacgtgacaCTATGTAGCTGTTAAAAACAATGAGGTTGATggctggg
-catggtggctcacacctgtaatcccatgactttgggaggccaaggtgggtggatcgctta
-agctcaggatttggagaccagcctgggtaacatggtgaaaccttgtgtctactaaaatca
-gaacaaaattagctgaaggtggtggtgcatgcctctagtctcagctacttgcggggctga
-ggcaggaggatggctttagcctaggaggtggttgcagtgagctctgatcatgccactgct
-ctccagcctgggcgacagagcaaaaccctatcttaaaacaaaacaaacaaacaagcaaga
-aTGAGGTTGAGCTACATCAGATGCTGATCTGAAAAGATGTCCCTGTCATGCTTATGAGTA
-AAAAAAGAAACCAAGAGGCAGAACACTATATACAATGTGGATCCATTTGTGTGTAAGAAT
-GATCCAAATGATGTATTTTTATACAAAAACCGAGAAGATCAAACTATTAACAGTAGCGAT
-TTGCTTCAGGGGAGGGGGTTTCAATAGGGTGATGGTGATGGCGTTTTCTTTTTACATTAC
-CTATATTGAAATTGTTTGGATTTTAAAAGTAGAATGAGAGTGTATACAGGTATAATTAAT
-AGAATATTTAACAACTAGTATATAAACACTAGGAGTCCCTAACTGATGTCCTGGACCCcc
-agggatctgtgaatagaattcaaggaacctgtaaacttgcattaaaaaaaaaaggacatg
-cttttcccactagtctctaactgatattaacttttcctgtggtagtgagtatatgccaca
-ggctattacagtggtgatagcagggcctgcagctttgtcactagtagaaaccgcagatac
-tctaatatctcattgcagtgattgcggatatctacgacacattgtgtatactcacctcag
-cctcaaaattatggaaggtacttgacccaccactcagtcttgttattttgtgcattaata
-cagaaataatataggactatatcagaaacctgttttctgttatgttgacatttgcatctc
-aaggcaatttgtttcctttataaatctatgcatttaattttacatttcaaaaaaaaattt
-ttttttctgagagagggtcaccggatgccaaaggaccccaaggtacaggaaaggttaaga
-cccctgAAGGCCTGTCCCACACAAGGTTCCTCACTGGTGTccccagtaggctaccaactc
-tgagagtgcaaggactttgcctgccttCTGGGGCCTGGAAGACTGTCTGGATATTTgtag
-gctctgctgttgaccccaattatagatgggcaaatggaggttcaggctcagagtcacttc
-cctgaggtcacccatcaagttgcagatgctagattcctcctcatgtctactgatttggaa
-ggctgGGAGGTCAGGTCTTGTGGGTGTAAGAGGGTCAAGGCGGGGGCTGGGCGGGTGAAA
-GTGGTGCTTCCCTCACCCAGGGTACGACCCAGGCTTTAGCCTTGCAGCCAGTGAGCCCAG
-AGGATGGGGTGAACCCTGCTGCTGGCTTCTGCCTGTTGACCCAGTTCCTGGGTCTCTGCC
-CAGACTTGTTCCAGAACCAGACCCAAAGCACCAAGGTTTCTGTGAATGGGGGTGGCAtta
-aggaaacttacccttctagttggtcagacccagcctctcagagctgccctgctttccttt
-gtctctctcacatcctgcatccaatctgttgtctctaccctcgggcgcatgcagaatctg
-accacttctgcccaaccttgccacttccaccccagtcccagcccccattgtctctagcag
-ggatcaaagcttccttgatactgtcagcatctgtcattgctccctgggcccccaggctat
-gctccacacatagccagtgacgtcctggtcaacctgtcagattatgaccccctctgctct
-aaaccctgccttgggtcccgtgtggcttagagaggaccaggactccttgcagATTCCTTT
-AGTGAAGAACAAAATTCTTTGCTTTGGAAACAGGTAAAACAGTCCCCAGTGAACAGAGTC
-CAAACCAGGCTGTACTGGGATGGTGTGGGAATTGGGATGAAGCCTGTTCTAGGTCCTAGG
-CTGAACCAAAGCCCCATGGCTGGGGTGGTGCAGGGTGTGGAGATTTGAGCCCGGCCTGAC
-GGTAAAAGGAAACGGGCTTTAGCAGGGATGCCCCAGGGGTAGGAGCCCAGGCAGGGAGAC
-ATCTGGGGAGCAAAGACTTAGTGAGGGGGAGACCTAAATGATGCTCTCagggacctctca
-gctcccatcccctccatttcacagatgggaaaactgaggtcccaatcaggaaaataaagt
-gccagaggctgtacacaggagctaatggccagatctggTGCAGACGTATGAAAATCTGGA
-GGGTCAGATCTTACCTAGCTGTGTGTGTGTGTTTCAACTTAAATGTAAATCTTTGTAATT
-TTATTTTTCGAATGGGTGATATAAACACATTGTTCAAAATTCCAAGGAACAAAAAGGAGT
-GAAGTGAAAAACAAATTTTTCTGTCCCTGCCTCAACCCACAGTTCCCTCCCTACAGGCCA
-CTGAGGGAGGTTCCTGGGTTTCCTTCCAGAGAAACGCTATGCATACTTCTACATCTGCAG
-TAACTGTGTTTCCATCCCACCACCTGCCCTTCAGGCTACAAAAACCTCAGCTTGccattc
-cacacctggcttccttttgcttaacattgttcatagcatgttccacattcatccaggtag
-acttgcctcagcattgtaagctgcttgaaattccatctatgggcctccattgtttgctca
-tctagtcccctctagctgggcctgtaggatgtttccaggctttaacatcaaaaacagggc
-tgctacaaatatccttgtacacctgtcacttaacattcccacaagtctatgtggggaata
-aatcctctgaagtagaattgcttcaaagtagagtgaaatcacacgtttttttggtccttt
-gttttttgaggcagagtcttgctttatcacccaggctggagtgcaatggtgtgatcatgg
-ctcactgcagccttgaattcccaggctcaagcgatcttcccacctcagcctcccaagtat
-ctgggactataggcatgtgccaccaggcccagccaatttttcagtatttttttgtagaga
-ccagggtcttgctttgttgcctcaggctggtctcaaactcctgagctcgagtgatcctcc
-cacctcacctcagcctcccaaaacagttgtgattttgactatcgttaacaaactgccctt
-ggcagaggttatgccTAGTGGTTTCTGCCCCTTTGGAGGAGAGGCCCTAGGGTCTGCAGA
-GGTGGCCACAGGAGCCACAGAGTTGCTTATTGCACCCCCTCCCAATACGCATCCACACCT
-CCCAATCTCAGTAGCACCAAAGCATCTCCCACCAGCTtccttctgacttctaggtctccc
-tgaaaatgtcacctcctctgagaagcattccctgaccacccccactctactccacctgtt
-tatcacagtgtgcactctggcttctacacagtacttcatgccatctgaaatcactttagt
-catttgtcatttgtccaattcccccacgagaagagccccaggagtgcagaggtttgtctg
-ccctgttcatgagcacatcctctatgcctagaatagggctaggcatatgagaggtcctcg
-ataaatatttgtggaaagagcagatGGGTCAGTTTTGTGTAAGGGGCACGAGATTTCCAC
-TGAATAGTTGTTTGGCAGCTAGAAGCAAGTTAGGAGCCTCGAGCCCAGGCCCAGCCACTG
-CTGGAGCCTGTGAGAGGCAAAGGCAGTGGAGACCACAGAGACCAGAGAACAGAGAGCTAA
-CTGGTGCCAGGGCAGAAAGAAAGGGGAAGAAACACCAGCACAGAGATGGGAGGGGCAGGA
-AGGAGGGTTCCCAGGAGGGAGGCCCATGGCAAGGGAGGGAGTCAGCTTGGGGTATCTGCA
-GGAGGAATGTTCTAGAAATGAACAAGACATAGTCTTGGTGCTCATttccttcctccaacc
-aactcattcagatgtgccgagacctgggcatggtgctggggatagagcagctaccagaac
-aggccaggctctgcactGCTGCTGCGGTCTCCCAAGGAAGATATCTAAAGGGCtactctg
-tcccaggcatgaccccaaggccctacaaatacagctcatttagtccttggtgctcccatt
-gtcaccattttacagatgaggaaaggaaggcattgagaagatgagcatcttgcctaagtg
-gcaaagactggatttaaatataggcctttggtctccagagaccacacccttagccactCG
-GTGGGCTGCTtgtggcagctagccttcaggatgaccccagggatcctggtgctcatgccc
-ttgtgtagtcccctctctcaacaagtcaggactggctggcatgactaattagatattgta
-gaaacgttagtgtgacttccttggctaaaccattgcattgtgtcttctgtcttgccctct
-cttggaccacacgctttagaggaagtaggccactatggcctgaggacccttaagcagccc
-ttgggaggaagccatctggaggggaactgaggccttctactcacagccagcgccagctca
-ccagccacaggaggccgagccccagcccaggtcaagccttcagatgagtgcagccctagc
-tgatacctgagtgcaaccacatgaaaaaaaccccaagtcggaactaccttgttaagttgc
-ttcagaattcctgaccctcagaaactatgaaagataagaaatgtttgttgttattttaag
-ctgctaaatgttttagggtaatttgttatgccacaatagataactaatataCTGCTTTTC
-CAGAGCTTATAGAGGTTTAACCCTCTTGCTTCTCTTCTCTGCCATCCCCAGGCCTCAGTT
-TCCTCATTTTGACAATGGGCTGACTTGTGATTTATGAGGGTTGGCCCCTCCTCCTCTGCC
-TTGCTTCTGTCCCCTGGGCCTGCACCAGGCCCTCACCCTGTGGCTCAATGCAGACTGAAA
-TGGTTTGTCTTGTCCTGTCTGAGCAGCTGGGCCCAAGCCTTCCTCATTGTTTTCCTCTCT
-GCAAGACATACTATTGCTTTTCTTCTGGGTCAGGCTCTGGGCAAGCACAGCCAGTGGGCT
-GAGAGCCAGGGGTAGAGAGACTTGGGGACCAACGGGCTCTCACGGAGGGATGAGCTTCTC
-AACCCTAGCTCAACCCTCAATTCTTTGACACAGGCCCAGCGTCTCCAAACATCcagtgtg
-gtctgggcctggagcactgcactgagagtcagcaagcttgctcaatagctttgccatttc
-ctttctctgccagtgatgagtttctctgaacctcagtggcctcattgtttcctccttgca
-gagcgcctggaaggaatagggaaatggccactgggacctgtgttctgtggatctgggcta
-ggattcttgtctgtctggttcatgaggcctagcacagtgcctggcacacagtagtgcctc
-ccatatttgtggaatATTTGGGACTTCCCTGGCTCCTGAGCCTCACCTTTCATGGGGTGG
-CAGGTCCAGTGTTCATCCCAGGTGAAAGGCCACAAGGAGAAGATGAGGAGTGTGGCGGAA
-AGGGCTGCAGAGGGAGGGGAGCAGGGCCTGCCTCTGCCATCTGGACTTGGGAGGGGCTGC
-CAGGGTCCCTGCCTCCTCAGGCTCAGGTATGCCTTTGGTGGTCGTCTATATTTCAACCTT
-GATCTTGGGAGGTGTTTGCGATCGCTCACCTCCCTGACACTTGAAAGTCACAGAATGGAG
-AGGTGTGTCCATTTTGCTTGGcaacatgcttattgaacagttattatgtggtcagcactg
-ttctaaccactaggtatatgaagtccttgcagccaccctccaaggtaggacctgttatcg
-acctattttacagacgaggcacagagaggttaaacaacttgtccaaggacaggtagctct
-tcacaggtgtaaccaggCGGTGCTTCTGCAAGGCCTCTTGGCTAGAGTGATCATGTGACA
-GCGCCCCTGCCCACCCCCCAACCTCACCTCAACTTTGGGAAAATAGGGCAAAGTATGTTC
-TAGACACAGGGAGGCTTTGCTGGGGTATCTCCCCACGTGGCACCAGGCCTTTCTGCCTGT
-ACGACTCCAGTGTGTACCTCttctcttattggatccccagcagcctggaggaaaagggtg
-attgttccccacacaaatgagtaaactaaggcccacaaaggccgagcattactcacagct
-ggtaaaggaagaTTTTTAACTTAATGGCTGAGCTCTTTCTATGTGCCTGTCTTGCCTTCT
-TGGTGGCTGAGGCTGATCCTGCAGATGGGGTGACAGGGATAAGATTAGGGTCAGACAAAG
-ATGGTGGAAGCTGGCTCAGAGGTCCACAGTCTATCAGAGAATGATCCTCAGTGAGGACAG
-GACAGAAAAGTGGCCACATCTCTTCCCAGTCTCCATGGTCCTCCACGGAGAACAGGGTCA
-GGACCAGGGACATCTGtctggctcctggtgagcactccagtctcatcttggccatgctct
-cctcgctctctgcactgtagacacactgaatgccttttgcttttggcccattctaccccc
-agggcctttgcacttgctgtcccgtgtgcctggaatgcttttgcttcctttccctgtctc
-gccactgccaacccagcctttagatctcagctctgtccttcttcctagtgcctccctccc
-tcaaggtcaggcacccattatccacccctagcatctctcggtccctccttcatggcacat
-atcatgattgatcgttgcacatgggaaatcactaggttagttacacccactgctccaggg
-gcaagggggaaggatggtcttccttgctcactactaaatccttgtcacttgcatggcgcc
-tggcgcattgtaagccctcaataaacagtggtggaagggacaaTTAAATGAATGCAGGAA
-TGAATATTCTTACCTGACAAACTAAGTTCAGAGTTGTGTATACACATTTGTGTTTGTGTG
-TGGTGGGGGGCAGGAGTCGGGGGTTGCACATCTACACATAGTCCCAGAATTGAAAGGATG
-CATGATTTTTTCATGACATTTATGGCATGCTATGTATCTTGTTGCCTCTGGAGAGGAGAA
-ACAGGGGTCTCAGctgggtgtcaggaaccctgggttctgggccaactcctgccaccgacc
-cttgggtgaatgtgattgagtcactcccttgcccaggcttagtgttcccatctgtaaaTG
-GTGGGCACAGAGAGGTGGTCTgtgtagtggttaagactgtgggttctggagccagtctgc
-ccgggtacgaactcacctccctcacttcttagctgtgtaaactccctgggcctccgtttc
-cccgcaataaatggggatcataacagtccccaccttttaggatgccacgaggtttatgag
-tcaatgtttataagacacatataaagtgcctggcccagagaaagTCCCATATGTGAATTC
-ACCCCAGCAAAGCACTTATCCCAGAAGACAGAGGAaacaatagtagcatctcctggttct
-ctgtgctggagcagtgccaggcacatcccctgaccagccatttgagcctcacagcaaacc
-caggcgatgtgtgtatcatcacctcaattttatagattgaaaaactgaagctcaggtctt
-tctcatagttacacagctaataaTCTCACAGATGTAAAGTTGAGGGAACAAAAGGAAACT
-ATAGTAAGATATGGATGGTACGACAGGATTCCTTCCTTGCACCGTGAATCCTGGAGTCTT
-Gacgtttactgagcacttactctctgccaggccctgtactgagccccacatgtgcattgc
-ctcatttaatctcctcaataacctgcaaagtagcttctgttagtgtcctcacttcacaga
-taaggaaaccgagtcacagagtggaaaagcaatggtctgagaaggcacagccagtaagca
-gtggagctgggattcagactgagtcaactgggactcagggcctacactcGGCTTCTGTGG
-GATTTGCCCCCAGGCCCTGGGCCAAGAATGGGGTGTGTAATTGTGGGGACACCCAGACTG
-AGCTTCTGGAGCCCCTTAGCTTTTCAGAACGGCCACAGCTGCCTGAGGCCCTACCTGAAT
-CATCCCTGGCAGAAAAGCCCTAGGGAGCCTTGGGCCAAGGGTTCCTGGGGGAAGAAAAAT
-CTAGTAGCTATGGATCTCCCCTTTGGGGACCAGGGTCCTCTATATTTTCCAGGTCCCAGC
-TAATGCCCAGGGACCCATCCACCATGGACATGGCTTATTTATTGGACAGAAAACTGGCTT
-AAGTTCtgagataataggttccggcatcagatggctgaatctgactttgcccttcttggc
-tgtaagatcttgggcaagtcacctaatctcttggtgcctcagtttcctcatctgttagtg
-gacaagcaatcttacttcactgggtcatggtgagaattaaatgccgtaacataaagcacc
-taggacagtgtgtggcatacagtaaatgctcactaaatgagtgcttactcattACGTCAT
-AACTGCTTtttcatcctccactcattctgggaggcacgagtattttgagttccactttag
-agaggagccaattgatatatgtggcttccccgggttcccatagctttgagtggtacccct
-gggacttgacctcctgaccccaaCTTGGTCCTCCCCAGACCCCACAGCCAACTCTCAGGG
-TTCATTCCTGACATTTCAGAGCTGGCTCTGAGGTTATGCAAACAAACTGCGGCCAGAGTC
-TGACTGGAGGTGCAGGCTTAGGGGGCAGACCTGGGGCCCGTTTTCTAACATTTCCTGCCC
-AAGGAGAAGGAGAAGAAGGTCTGTGTACATCCCAGCCTGGCTGAGCTCTAAGGCCAGGGA
-GGAGAGAACTAGAAACATGTGGCCCTGCCCTCTGTGGGATGGCTGGCCAAGCCAGTTGAA
-CAAATAAACCCGTCCTTTTGGGGGAAGTCGTCAGGGGGTCTGCTGCTGCTGGTGCCTGCC
-CTGCACCCCCACCTCATCCCAGGCATGAGCCAGCTGGTCATCCCCAGGCCGAGGGTATCT
-GTGCCAGCTGTTTCCAGGCCCCCTTCTTGGAAAAATCATCCCATTCCTCTAAGAAGCAGA
-TGCTGTTTCCCCCATCCCCCAGTCCCAAACTGCTTAGAAAGGAGCCAGCAGTGAGGTTAG
-GAAATCAAACCCCAAGATATTTTGTTCGGCACCGAGACTCATTTCTTGTTTGGATAACTG
-AAGGCTGAAAATGCCAAGAATTTGTGGGCAGCCTGGGAAGGCTGGGGCAACTGGAACCCT
-GACTCCCAAACCAGGTCAGTTTGGGAGGGTCTCAGGCTGGGCAAGGACCCCACCCTGGGT
-TCCTCCTTGGTGCTCTCTTGACCCACACCCAGTTAGGCAGGGCCTCACAACTGCCAGGCC
-GAGGGGCCCAGTTATTCTGAGGTTTGATGTCAGAGACCTGGAGCAAACAGCAGAGGCTGG
-GGCAGTGCCAGGTTGGGAGGCCCCTGCCCAGCCCCTGACCCCTCTCTGCTTGGCTTTGGG
-TGCAGAGGAGGAAGAGAAAGAGGCCTCGGCTGAGCAGCCAGCTGCAGGGTGGGCATTGGT
-CATTTGGCAGATGTGCCCTGGGTCTTCAGTGTGGACACTCGGGGAGGTAGAGGTGGGAGG
-GATGGCCTTGGGGTGAGAAAAGGAGGAGCTGAGAAAGAGACAGGAAAAGATGCAGGGAGT
-CACTTTGATAGCCAACCAGGAGAGAGAATCAGAGACAGAGACACCCACAGAGTTAGCAAC
-AGTGAGTCAGGGCCACCGCGAGAGCCCCAGGAGAGATCCACAGAGGCAGAGAGACTCAGA
-AATAGAGACAGgctgaccacagtggctcgtgtccgccgtcccagctacttggaagactga
-ggcgggaggatcgcttgagctcaggagttcaaggctgcagtgagctgtgattgcaccatt
-gcaccccagtgtggttgagagagtcagaccttgtctttaggagagagacagagagaggga
-gagagggacagagagagggagagagagacagagagagggagaaagagacagagacagaca
-gagatagacagggagataggcagagagagGGCTGCCATGGACCCCAGGCCAGCAGCTGCT
-GGCTGCTCCCTAAAGGTGAGAAAGTAGTTCTCACCTGCAGTTTCCAGGTGGGGTCAGCCC
-TGCCTCTGGGAGCTCAGAGACTGGGGAAGATGTGCTGCCCTCAGGTGGTGGGGGTGGGCC
-AGAGAGGCTGGGGCTTGTGTCTGGCCCTGGTTTTcctcattctcctcatctgtataatgg
-atcattctgtggggccatgaagagaaggCAGAGTATGGCACTTCTTGGATGGGACACCTG
-GGGCAACTGGGGGAATGGCAGTCACACACGGGAGCCCttattgagcacctgctgtgtgca
-gaggctttctctgctctgcttctcttgaccccacatcaaaggtcaggggtaggtgctgtc
-attctcctcccagcctccggattaggcactgagAGGGAAGGGCCAGCACTGGGTCCTAGA
-GGGAGGGCATGGTGGACAGAGGAGGTCATGTGACTAGCCACTGAGCTGCCCAGCCCAGCT
-AGAGATGCCTGCACTGCAGCCGGCTCTGTCCCCCAACCTCCTCAATATTCCTGCCTGCAG
-CTTCTCATCCATATGAGCGGGGTGGAGCAGAGCCCAGAGCTGACGTGCAGCCCCAGGAGC
-TGGCTCCAGATGGGAGTTACTGGGGCAGGGGCTTTCCaggagcgaggaggaggagagaga
-gggaggcagaaggagggggagagcagggagaagaaagggaaggggagtgcaggggaggag
-gagagtatgaaagaggagagagagagaagaggtgaggCCGGGGCTCTCCCCATGCCTGAT
-GAGCACTGGCAGTAGGACACAGCAAGCTGTATGCTAGGAAAGAGTGCGTATCTGGGGACT
-TGGAAACTCTGCAGTAGAAGGGAGCACCAAGAGCATCCCATCCTCTCTAGATCTTGCTTC
-CCTTGCCTCCTTGACACCTTCCAgagtcaggaaaaagtacctgcagtttgtagtgagaat
-ccagattggctttcactgctacatggctctggcaagtcactttccctctctggcctgttt
-cctcacctgtacactgggggaacaggaGGGGAGTTGGGGGCACAGGCTGAGCAGATGATG
-GCTTCTGGGATTCGCGACAGGAAGGATCTCCCCTGTGTCTGTCTAGATGAACAGAATCTT
-GCTGAGAGCTTGTTCATCCCTAATGGCAatggtgatgatggtgatgatgatgctgatggt
-gCCATTAGATGAGTATTTTAAAACTCTTTTTTTAACTTTTCTGAGATGTTAGAGAAAAAG
-CCAAAAAAAGGCTTTGAGTTTCAGAAGATCTGAGATATGCCTGGACCAAGAGAAGAACCA
-GAGGAAGGTCACAGCCACAGCCACAGAAGGTAGCAAGCACTCCCCACTGGGGACCAGGAG
-TGTCAGAGGGGGCAGAGAGAAATTATTGTTTACATGAACCAAGGGAGACCGAAACCTGCT
-CATCTGTAGCCATTTGGTAAGGAAGTACCTGCAGCCAGGTCAGCTGAACTCCCATATCAG
-AGATCTTAGGCCCTACGGCACTCTACGGTGACCTGACTGACCCTAGCTCAGAATTTTCAG
-GCTAGGTGAATGGATGCCTGGAGAGGACATTCCACCCCAAGCTGAGGCACTGGACCAGGT
-GACCTTCTGATCCTGCAAGCCATCAGTTCAAGCCATCAGCTCTCAGCCAATGTTTCCCAA
-GCATCCGACACCCAGGGGATTCAAAGATGGATGAGAGTGAGAGGTGAGACTTGGGGTAGG
-AGGCCCAGTGGGAGGTGATGACAGCATCCTGGGAAAGATGACGAGGCCTAAGCCAGAAAG
-ATGGACCATGAGAGAAGCCTAGGCCACAGGATGGGCTGGGCCAGCTGCCTGGGGGATAGG
-TGGGAGCCACAGGAAGCCCCCAGGGCACAGCCTGTGGCTGGGTGGTGGTGTCACCCTAAA
-CAGAGACAGACAGGCAGGAGGAGGGTGTTTGGAGAAGAGCAGGGAGTCGTCTCAGGCAGC
-TTTGGAGTTGAGACACCCATGGACCCTCAGGGAGGTGTTGGGGGAGATCCAGGTCATGGG
-TTTTGGGCTCAGGATCCCATCAATGCCAATTTTGTGTCATCACGGAGCAGGATGGAGACC
-TGGGACCTGAGAGATTGGAAGGACATTTATGCATTCATGCattcactcatgctacagaca
-tttattgagtacctactgtgtgttcggcactattctaggccctgggaacccagaagtgag
-caaaagagacatggcgcctgccctctgggagctcacacaccaaaagaaatgtttttaaga
-acattaggtagggataagttctaagaaaaaaaaacacaacaaagccagcagagggacaaa
-gggtggaagaggaaggtggttatttcgtacggggaggacaaggagggcctctggggagat
-ggcgctggagaggataggaggctggggtaagcaaagtgggagtctgggagagggaactcc
-agggagtaagggttcttgcttttattcggatgcatggttagccctgggaggagggagagg
-atgtaacttaggttttgatggggattctttggtctgctgcatggagaacaggaggtgggg
-gccgagtgttagcagggagccaggggggcagccaggacagctatcctgcctggagccaga
-ggtggttGTCAAGCTTGTCTGCTGTTTAATACCTTCTAAAACTCCAGGAATTAGTTCGCA
-TCCTTCATTCCTCAGTCATCGCCCAGACTGTCTCCTGGGTCCCTCTCCCTTTCCTTGGTA
-GCTCTCACTTAGGGACTCTGAAGAGTCCCATCTCAGACCCCCCAGGATGTCTCCTGTACC
-CTCATGCCCCGCCAGGGCCAAGCCTGCTTTGCACACCTCTGTAGTCAGTGCTTCTCCGAG
-GGTACACAATAGGTGCTCACACTGCTGAAAGACGAAAGCATGACAGGGCATTCTACAGCA
-GCCCTGGTcttgggccaaaaccacagtggcatcctcagctccttgcttcctcccactccg
-catccaattcaccagcagagctgatgggctctacctccagaacccaccagaatcttactg
-gccacaccccctcctagccccgttctgctccaggcctccggtaccttgcacctgatggct
-gcagcggccacctctttgggcttcttccttccaccctgcctcctacagtctatgctgttg
-aaatcgaatcacgggtgtctgtctctgctcacaaccttgcagtggctcccatgacactca
-gaacaaaagctgaagtccttccagtggccccccccccagctgcatggcctgccctgctgt
-cacctctcagacctccccgcacccttgctccctctcctctgctccagctacacaggcctt
-cgccccatggttctccaggcacacaccgctgcggatgcattccctcctcacggtcaaaat
-acatgcagctccctttgcagaacgttccctcaaatacctgcctggcccactctatcattt
-cccttgttctctgggttcaaatgtcacctcctctgagaagtactctctaatgatctgacc
-tcaagcagccacccagggccgccacttgccctctttcttcttcattttgcttcaccatct
-gacatagtagattatctcttactgcctctttcccctactagtccagagggagacatacta
-tactgtcgtatccccagcacccaggaaggcttggtccgttcagcccttggtcagggctga
-atggatttctgttggatgaatgaaGGGACGGCAGTTAAAGAGCCAGGTTGCCAGCTGACA
-TTGCCCAATCTTGCTGTGTGGCCTCAGACCCACCCCTGCCCCTCTTTGTGCAGCTCAGAG
-ACAGCCCTCTGTGCTCAGGGAAGGCCTCTTGGATGGACACTCCACCTGCTGATTGTGACA
-GACCCCAAAGCCGCCCTCTGCCCCCTGCAAACCTCCCATGCCCCGTACCTTCTTCAGCCA
-CTGCGTGTTGTTCTGCAGTGCCTGCTCCAGCTGTTTCACCTGCTGGGTGGGCAACTTCCC
-CAGGTGCAGTGGGTTGGCCAGTGATTCTCTCTGGAGGGTGTTGGAGTCCCTGGAGACCTC
-AGGCCCCGGAGGGCAGGGCTCAGACTTGGGCAGCAAGAAGGTGTAGCTACAGTGGCCGTG
-CTGGACTACAAGTGTCTCGCAGCCCCTATCCGCCTCCTGCCTTGTCTGTTGAGCCACAGA
-CATGGTGGCAACCACAAGGAGGAGGCTGCCCTGCAGCATGGCTAGCTGGGAGAGCATCTG
-AAGATGTGTCAATGGCGAGGGATGTCTGCTCAGAGCCCTAGGGGCTGTGCCTGGGATGTC
-CTGCTGCAGCCAACAGTGGCCAGGCTTGCCTGCAGCTGCAGCTACAAACCTCTGTCTGGC
-CGAGCTCTGTCCAGGCAGCTATTTATACTTGCTCTGAATACCACGGCTGCTCTGCTTGCT
-TCCTCTCACCGCCTCCCTCCGGCCCCACCCGACACCCTCTCACCTCTATTCTTCACTCCT
-TCCCTTCCTCCTTCCTCAGTCTTGGTGGCACGTCGCCCTTACCCTAAGCGTGCACCAACC
-TTGCTCTGTCTGCCTCACCTCTGAGCCCTCTGATTATCCAGTGAGGCCTGGCTTCCCTGC
-TGGAGGGGAGGGAAGAAAACAGcacacagacacgcgcacacactcatgcacacactcacg
-agcacacactcacacgcacgctgacacgcacacacattcatgtacacacaAACGCCAAGC
-TCCAATGCTGCCCGCTTTGGAAAACCAAATGCAACTTAACTCTCCCTTCCTGTCTCTGTC
-TTGGTCTCCCTCTTTCCCTCCACCCCCATCCCCTGCCCCCCAAGTCTAAGATCTCAAGTT
-TCAGTCCCGCTGCCATCCCCTTCTCTCCCCGCTGCACCTTCCTCCCTCTGGTTCCATGTT
-AGCGCTTGGAGTACAAGTGACCCCCGGAGAGAGCAGAGGGAGGGGAGGAGGCAGAGGGGT
-GAGGCTGGGGAGGGCCCAGCGAATCCACTTTGCCTCTGGAGACACAGAAAATCCTTCCAA
-GGTGGGGCAAGTGAGCAACCCAGCTGGGAGTTGCTTCCTGTCCTCTCTTCTCCCTCAGGG
-CCAGGGGAAAGTGGTATGCCCCAGGATGGCCCTGGCTTGGTTGCTTGTAACAGTAATGAG
-AAGTTGTCATGTCCTGGGGCAGATTGTCCTGGGGCTGCTGGAGTGGGGATGTGGAGAGGA
-Ggcagtggggagaggaggttggagtgccaggaggctaaccctagatctcgctccccgaca
-gctggccacgagacctagggtgggcagctgtgcctctctgggcctccacaccctgatctg
-taaactgggtaaaccttatctcttgcaggAGGAATGCGTGTGAGTCCTCAGCATGGGGAT
-GGAGAAGTTTTCAGCTTctgggttcaaatcctggctctaccatctaccagctgtatgact
-ttgagtaagtcacttaacctctctgtgccttcatttcctcctgaatgaggaaaataatac
-cacctacttcacatggcatgaaaattaggtgagttagagcaaggttggcacagagcgagc
-actaaataaatattTTCCGTTGTCAATgttatagttgtcattgcacctcccctcccacga
-cccactggagcataaactcctctagggcagggatttgtcCCTGGGGGACATGGTCTCCAG
-GCAGAAGGTGCCCAGGAGTTGGTGGGGCCTTTCCTGCATGGGCTGCCTTTATGTTCTGCC
-AGCTGTTTGGGCTTTTCCTCTCTCCCTGCTTGTTTCCTCAGAGTAGGGGCCAGTCTGGCT
-GTTTAGTATTTTCCTTTTTGTTCTCTCAAATCCCGATAGAGTTTTGAATTGGGGCAGGCT
-GCTTCTGGGCAGCTGTGAACTGTGGTCTCATCTGGGGACTGAGAACATTATACCAGGTGT
-GGGGCTTTTGCAGGCAAAGGAAAAGCAGCTGGTTATCAGCCTCCAGCCTCCCCTGAGCCT
-TCCCACATGCTCTGAGCTCTGCGTGCCCCGCTTGGCCCCAGTTGCCTCAGCTGTAAATGG
-GGTCATAGCACCCTGACCATGTGAGAGTAATGTGGACTGATAGCTTATCACAGCTCTGGG
-TGCAGAGAAGGGCAGTGTGAATGGTGGTCGTCATTATGATTGTCTTGACTGAGCTGCTTG
-ATAATCCCAACGAGgcagttacaccaggccccaagcttagatgggccccatgcttggttt
-acactctgccagcactgtcttgaaattcttaatacatttggaacaaagtactcagcactt
-gcattcttcattgagttccacaaattaggtagcaggccctgCCTGGGAAACATGAGGCTT
-CCCTCATCCCTCACTCTGCTCCTGACCTTACCATCCAATCAGACCTGTTCTTCCAACATG
-ATCCTTTAGATATTTCCCCCTCTGTCACCTCTTCACTACTCAGAATGCtggagccagcac
-atctggatcggaatcttggctttcctgaccccctatttgtgtgccttttgccaagttgcc
-taacctgtctctcagtttcctcttctgtcaaaatagtgatgttacagtggctaaaagacc
-gattcctgcagtgaggttaacacagagcctttcacataatacatgctcaaccagtgacag
-ctgtcatcattACTCCCtgctatgatatgaatgtttgtgtgcccccaaattgatctattg
-aaacttagtcaacaaggtgatggtattagaaggtggggcctttgggagtgaatagctcgt
-gaggactctgccttgggaatgagattaacgctcctatcaaacatgtcctagacagctggc
-cttcccttttgctaggtgacgttgcagtaagaaagcaccgtctatgaagcagggagctct
-caccagacaccagatcggctggtgccttgatcttggaattcccagcctccagaactgtga
-gaaataagtttctgttgtttataagccccccagcttagtgcattttgttatagcaacctg
-aatgggctaagacaCCCCACCATCACTCTCTTAGACCGGGGTGCTTCCTCTCTTGTAGGG
-AGAACAACAGCCTCAGAAGTGAACTCTGGTTAATTGGCCTTTGCTATTGCAACCAGAGTG
-Accttccttccttccttccttccttttttctttctttctttccttcttctctttctttct
-ttctttctccttttttttgacagagtcttgctctgttgtccaggctatagtgcagtggca
-tgatcttggctcactgcaacctccatctccccggttcgcgtgattctcctgcctcagctt
-ccccagtagctgggattacaggcatacgccaccatgcccaactaatttttgtatttttag
-tagagacggtgtttcactatgttgcccaggctggtctcaaactcctgacctcaggtgatc
-cacgcacctcggcctcccaaagttctaggattgcaggtgtgagtcaccatgcccagccca
-gagtgatttttctaagacacaatccagccctgacttctttgtttaaaattcttcagtttt
-gaactccaactctttctgtggtttacaagcccctgccggatgtggcctccattctcatca
-ctgtttccctggcactttataccttatcattTGGAATTGGTTTTACTCCCCCGCATGCTT
-TCCGCCTTCTGAGGCCTCAGTGTCTATGCTCCTAGCAGGAAACTtctgcttaaaaacttc
-cccccacctgtattgtcccagcttcgttctgcctgtcttttgatcttatctcagggatca
-cctcctctgggaaggctttctgcatctgtccctcccacttcaatgggagtaggccttctg
-cctctgggagctcaaaggcccctgcctgcctgtccctcaccaaagcactcatcctgcatt
-agaaaggcttgtttgcaggccttggtcaccgtctagactgaacactcttctaggtttgct
-gtcacactttccatttctgtgtttgttgcctgtcctaaggttaggctcacagtgggtcct
-catgagtgttatgttgaatgaatAGGAGCTGCAGGCCCAAAGCAGAGAGGAAGGCAGTCC
-CCTTTCCTCTCCAGCAGGGGCAGCAGGAAGTTCTGTGTGAGTTGTTCTGAGTGTCTGGCC
-TCCAAATCCTAAAAACAAACCAACCCATGTTGATTTTCCCATTGTCTGCTGCTACCATGG
-AGGTAGAGAACGGAGAATAAACTTATATCCACCTGGATACTTTGGCTTTTGTtcaaatag
-cttgggtaaaaagggaatttattggccaatttaactgaaaattttaggggtatcgagctt
-caggcatggctggatccaggtgctcaaatgatattagattttttttttttcctccaactc
-caggctcttattttccttcatttccttattttcctttgggttcattctgtaagagttccc
-accataatcaccaccactactggcaacagcagctccaatctatcaactcagtaacctctt
-ttaagagtgcctctttcctaatagttcttggaaaagttccagcttgagccgtacagtcat
-tcctgaaccaactattatagccagaggaaggagctactgtggatggtcaggctggatcct
-gtgtccaggcctggagccttggagcaggtcaacctcacaggatcggaagggactaagggt
-ggggtacagtgacgctcaagaaaacctggagtagaatgatcaggaggcgggtggagttgt
-tgggcaTAAAGCACCTGCCTGCCTGCACCCTGACTCTCCATCCCGCCACCCACCAAGTGA
-ACCCACCTCCCGCtcagagctgatggactcttggagtaactagagatgccatggaccctt
-accttgcatttcactcatgaggaaactgatactcagagagggaggccacttgcccagtgt
-tacaTGCTGGAATCTATTTTCCTGGAAGAACAGAACTTCCTGCTCCTAGGAGTGAAGGGT
-GGGAAAACAGGGTCATTCCGGGAGGACCACTTGCCAATTTGGGGTCCTGAAGTACCTGGA
-TCCAAAAGAAGAAGACTGTCCCCAGTCTGAATCTCCCACTCTGGGGAGAGGGTCACTCCT
-GGGTTGTTCCCACAATCCAGCCCTTCTGCCAGCCCCTCCCTTGGCAACTCCTTGCATTTC
-AACACCCTGGATGATCATTGAGGGTTGCACGTGGGGCAGCTGAAACAGACCCCAGGCCTC
-TGGTCCTGTGCTGCTCATGCCCCTGAGGACACTGCCTGGGCATCTCCCAGAGCTACTGAT
-GGCAACATGGCAAGAGCCTGGTGGGAAGCTGTGGGGCCATCGACAACCCCGGGGGATGGT
-CTGTGTGTCCTCAGAAGGTCTGGTGGTGAATCTTGTGCAGCAGACATCATGGTGGCCCCG
-TGAGCCTTTCCACCCAAGACAGAAGTCGGTTGACTGCCCTCCTCCACTTTCTACCAACCC
-AGACCTAGAGCCAAACAGAATTCCTGGATCACAAGGGGCCTAGGGTGGGTTTTGAGGTCA
-CCCTGTGACCCAGGCCCAGCTGTTAAGAGCCCCACATTCCTGATGCTCAATCTTGACTTC
-CCTTCAGTAGAtgagactcagtttcctcatctataacatggagaaaataatccctcactg
-ggaaggcggtggtgGTGGGGTCttccagttactgatactgtgtaacaaagtatccccaca
-tctagtggtttaaagcagtggcaacatctactttactcacaaatctgcaattgtggccag
-gttccctgggaaaagctcaactgtgctccattccgtgtcagctggagcaacttgcaggct
-ggggtttgcatccaaaactcatccactcacatatctgaaacctcagctggggcactcagc
-aaggacaactgcatatggcctcttcatgtggctaggggcttcctcatggcatggtggctg
-cttcccagagcaagcatctcaggagagagatttgggcagaaggtaggtgatctttatgac
-ctagcctcatggatcatgcagggccaagtcctctgtatctagtcaaagaagcaaccacaa
-agtcccactcaagttccaggggaggaagaacagactctacctcttgatgaggaggatcaa
-ggtttcagaagaaggtataggatgggggatagtgttgtggccatttttatttatttattt
-tgtttatttttaaatttttatttatttatttatttttgagaaagagtctccctctgttgc
-ccaggctggagggcagtggtgtgatctcagctcactctaacctctgcctcccgggttcaa
-gcaatgcccgtgcctcagcctcccaagtagttgggattacaggcacatgccaccaagtct
-ggctaatttttgtatttttagtagagacagggtttcaccgcattggccaggctggtctcg
-aactcctgacctcaagtgatccacctgcctcggcctcccaaagtgctggggttacaggta
-tgagccatagtgaccggccTGTTATGGCCATTTTTAGAAAATACAACTGGCCATGGGAGG
-GTCGGATGAGAAAATGCCATTTAAGTGTTTAGCATGTAAGTGCTTGATAGTTGGTAGCTG
-TTATTATTATCTTTGCGATTATTGGAAAGACCCAGCATCTCTTTGCATAAAAATATCCTT
-CAGAACCTGTGAGAGCTAAAGGTGCAGGAGGAAGCAGGATAATTTCCATCAGGGCTGCTG
-GAGAAATTGGCCCAGAAACCCACTGGATTTGTCCCAAGTCACCCAGTGTATCAGCAGCAC
-CCAGTCTGAGCAAGACTGGCCTGGGACATAGCTGCTTCTTCTGTTAGTAACGCTGTTACT
-ACTTCCTGGGGTATCTTCCTTGGCCTCAGCTTCCTCTCTGAACCATGAGAGCATCCTGGC
-TCTGCCTCCTCAGAGGCTGAGGGGATAAGGGCGGAGGACATGCATTCTCTTGGCTGTGCC
-CAGTCTGGGCCACCAGCCATGCCTGTTCTTTCTCAGGCCTGGGGAGCTCGGTTGCCTCTG
-AACCCACATCTGGCACTCCCTCCAGGATATGAAGAATAAGCCTGCCAGGTCAGAGGGCAG
-ATCTATTTTGGAACCTGGGACCCCATAAAGACCCAGAGGACCCTGTGACCGAGAAAACCA
-ACAGGCCCCTCTGTGttttgttttcattaaacaagcacaacatgtccctcatagaaaagc
-cagaaaatacatattggcaagaaagcgaaaataaatgttgcctgtgctctcaccagccag
-aggcaaaaaccatagctaacattttggagttttttccccccaaataattttcctctgcat
-atagatgcatattttttttggtagattttctagcaaaAAAAAAAAAAAATCAACAAACAA
-AGGAATATTGTCTCAACAATTTTTTAATTTTCTTTTACTTACTTTGGATTTTTCTTCTGG
-AAAAAAATTTAGAgccaggcacggtggctcatgcttggaatcccagcactttgggaggcc
-gaggtgggaggatcgcttgagctcaggagttcgagaccattctggccaacatggcaaaac
-cctgtctcttaaaaaaaaaaTACTGAAATCTCCAGACTTCCAATTGGAATTTATGTTggc
-cgggtgtggtggctcatgtctgtaatcccagcactttgggaggccgaggcaggtggatct
-attgaagccaggagttcaagaccagcctggccaacatggtgcaaccctatctctactaaa
-aatacaaaattagccaggcttggtggtacacgcctataatcccagcgactcagaagactg
-agacacgagaaatgcttgagcccaggaggcggaggttgcagtgagccgagatcatgccat
-tgcactccagcctgggagacagagggaaactatttctcaaaaaaaaaaaaaaaaaaaTCA
-GACAAGTGCACAGGATAACAAAATACACCCCCATATAGTCATCACTCCAAGTGGGCCCAT
-GTTAACATTTTGCATATTTGTCTTCGATTGTTAAAACAATGAAATATTACAGGAAATGTC
-AGTATTCCTTATAACTCCTTCTTGGTCTCATTTTCTCTCCCACCCTGCCCataggttcat
-atctaggtatataaataatgtataatatttttgtgttctcaaaacttaagtatatgctgt
-tatactgaatgcgacgtcctgcttatattatattttccagattgatataaatgacacata
-tagatcttgtgaccaaggacattttcttttcactgctgtgcagcattgcattatgtaatt
-tttaactctttatccagtttttggcagatggatatttaaattaattcagttatcttgtta
-ttcctgacaatactgctattaccatcttatatgggaatacttgtgcttacaagcaagggc
-tcctctggggaactaatccaggcatgctcctcctgggtcgtggaatatatgtgctgccag
-cctgaggcagttgccaaattgtgctccaagtctctctgtcgagttaattccagtagggtg
-ccggggtctccatcgctccgcacccctgccatcccttgagatggtcatgctttacctttg
-ttccaatctgatggctgtgaaatcgtacatgtaattacatagcctgctttccctacttaa
-tagtatattacggaactattttcctgtgcagaatattgttctatatgtgggtgtttcaag
-gtggcataagctgaaagcctccattggggtgttgctgggattttcttaaccaattcccta
-ttgttggacaacagggtttgtttTtgtggtaggattgcaaaactgaccacagatgctacc
-cacccctataagcatgctcctttgcagtgtgactctgcagttctccctattaagaggcaa
-agttcacttctccactcccttaatgctgacttgggccatgtgacttgctttggccaatgg
-gacattttcaagcagaggcttgaaaagggcttgtgctctggggcttgctctcttgctgca
-cctggggccctgagaccaccatgtgaatgagtcctggctagcctgagggatgatgagaca
-cacttggccaagtcatcctgtcatcccagctgatactaaaccatccaccagatttgtgag
-tgaggccatcctagaccatctatctagcccagccaaactggtgcggaccagaagcaaagt
-ccagttggcctgcagagatgtgaaaaataaatgttttaagccactaaattttagaggtgg
-tctgttagacagcaagcctgatacaGTTCCACCCAGCATTTtctttgctcaaccagttac
-tggctgggaaccttgggcaagttgctgagccttagttttctcctcagtacaatgggggat
-tacatacgcactcctcaaagtcgttgtgaagattggatgagatggcacctgtCAGTATCA
-CATGGCGGGGACCCCATAACCAGGGGTTCCTCTTTCACATCACGGTGGTCTTAGATGTGA
-CCTGTGACCTTTCTTATTGCTTCTTGGTTCTCCCTGCTGCCTCTTTCTCAAAAATGTACT
-CATCCTTCCAAGTTTTCTGGAGAGTATCAACATGTAAGTGTAAATCACAATCCCTAGTGC
-TCTCCAAGACTTGCAGGTATCTCCTCCTTCCAGGGCCTTCCCTCTTGAAATTAGGCATAG
-Tggctgtgtgcagtggctcatgcctgtaatacaagcactttgggaggccgaagcaggccg
-atcccatgaggccaggagttggagatcagcctggccaacagggcgaaactttgtctctac
-taaaaatacaaaaattcaccgagcgtggtggtgcatgcctgtaatcccagctactcagga
-ggcggaggcatgagaatcgcttgagtctgggaggcggaggtttcagtgagccaagatggc
-accactgcactccacactccagcaagacccggtctcaaaaaaaaaaaaaaagtaaggaaa
-agaaaaAGAAAAGaaaaggagtctccatccagaccccaagagagggtttcgtggatcttg
-cacaggaaagaattcaaggtgagttgcagagtgcactgagaagagatagtttattgaaag
-ctactcagttacagagaaggatgtcctcagaaagcaagaggaagaacgcactgtctttgt
-tttaaactcttctaatgtaggagtcttatctaagtaaaagctaagttatgtctttgtgca
-gacagaccgacagtgtgacagaatccattaccgttgacttaaagaaagttatccttggca
-ttttagtaagtacatcagatcacgacagtaattgttttgaaagcataaattgttatgtga
-tattggaacatctgggcattttgctgtcgtaagagtttactcttgcaggcattattgagc
-agcttccttagccataaacatcttatgactgtgggctgtgattagcaaggaatgtgtctt
-gctagttttaagatagagttgattttaaaatggtgtcaccctagctctcctatgctcctg
-tttcccaaacaTAAtcccccctctacttaagagagaaccctaaatcttaaggggagatga
-aaggtgaaggtcatttttctgtaacttattcctgctgacagtggACGTTGTTGACCTTTG
-GGAGAGAGTTCTCTCATAAGAGTTTGCAGAGAGCCTTGTAGGGAGCCGGGGAAACTCTTC
-ACTTGAATGACATCCCGATGATTTGGTTTAGTAAGTGTAGGGGCAGATAAGCTGCCAGAC
-TATTttatctccgtaatcccatgcaataagtgcaacagaagtaaaaagcacaataaccaa
-tagcaataagtgtgacaacacgaagcatgctaaaaaggaatgccttccaagtgctgggga
-gctggccaaactgtgctgttatgacaggaagtcaattgctgaggtatgagtctctaggga
-gttcatggcctgagatatattatgagagtgaccaggaatatagacacagtgttcagtctt
-gatcaatgcacagattttcccagggctgctgttaatatgtttaaagccatatggctttgt
-aaggacatttgtcttattcgggacgtttcttctgtcagacgggtgatcaccagatgagtg
-ttgttgaaagccacagcagtatgttttgctagggctcccacctgcgattcaacgtctata
-gatgttgcttaaagacagaatatgggcacaggatataaccaccaaaaagtttgtttctgt
-tgcctatcacagaccttgactacttcccagttggtggagagggaatccagatgtgtaagg
-atacatcctagaaggtagggatgaccccaagtgcatcatccagtcaaattgtaaggtgag
-tatggccaactatgagacccacatgcccataaccattcccaaggggaaggatagtcacct
-aaccatagagattcattttgccatcccatccacatttggtcaattgaaaggagagtctga
-ttgcattgttggggtggcagccatccgatactatagatgttggtttgggggtggttactg
-ttgatgaaaagagtcgaactctgtaaaatatttgaagagacttattctgagccaaatatg
-agtgaccatggcctgtgacacagccgtcaggaggtcctgagaacatgtgcccaaggtggt
-tggggcacagcttgattttatacattttagggaggcatgagacatcaatcaaatacattt
-aagaagtacattgatttagttcagaaaggcgggacaactcaaagcggtggggggaaggag
-aggcttccaggctataggtgaacttaaacattttctggttgacaattggttgagtttgtc
-taaagacctacgatcaatagaaaggaaatgtttaggttaagataaaagattgtggagacc
-aaggttcttttgaagtctcatagtagctgccctcagggacaatagatgacaaatatttcc
-tatttagacctttaaaaaggtgctagactcttacttaacctcttcaggattgggagggcc
-tggaagaaaaagatgtagctatgttaatagagattctttacagatgcacatttgtcccca
-caaaggacagctttgcaagaccatttcaaaatatagcaaagaaacatgttttcgggtaaa
-atattttaattttcttccttgtctcataacattatgccagggtcaggtcggaaagtaagt
-cacaatatgtagggttaaataaaacccatctgaggagaatttatggtttgtagggcatga
-ctcccagaccccttagataggaatttggacaagaaaaaaaaaaatcagagcctagtcctc
-ataaccattatgccttccaaggcataagggtactttgcctgataactgaatttggatacc
-tgtcaaccaactgagtccatcatgtatggtatagcctaaggtagggatgctattaagtta
-tttGGGATTAAATGAAGAAGGAATTTCTTGGTTTCGGTGGAGGAAGGGAAGAAAGAGTGG
-TGTGTGTCCTTTTGGAAAAAGGAGAGTACATATTTTCTGTACTCAAATTAGCTGATTGGA
-TATGCCAAGGTAAGCCCGAGGTTGACAAAGTTTGTACCCATTCTGCAAACAGATATCCTC
-CAACTCTATAATAGAGCAAGCTCAACATTAAAACCAGTGGTCTTATTTTCAGAGCATCAC
-TTATCCACTGGATAgctttttctggaagagaagccgtagatccactattggctcacagga
-gtattctggaatggtgatccctgcaccagatgcctgtgggacttcatgagagacaggttt
-aacttgggataaatgtacccaaatatgtaatcccttaagtttaactgtagtaggagtgcc
-tggaagtacatggtagggctctttctattttggggaaagctgatctgcaggggatccctc
-cttccaaggtttcaatagcatgaaatctcctggTCAAacaggagagaatatttatgaaga
-tggtcctgacacatgtatactgaacaaacatgcatgtaacatatgactctgttcacctta
-aggtggagacttaatccttgccaggcatggtcttagatcctgtttataatttgaaatctt
-cttgctataaagtttctattctatcagtcttatgatctctgttttaatgttaatgctggt
-tggttgtgcccgaattccaagagggagaattgtacagcaaggtgtgtttgaccccccagt
-ccctcttcccatcatggccagaaccagttgttcaggatttttaaaaaattattatttcct
-tttgccaagagagaggtccattctgttgggtggcttaggatatttgtttatttattagtt
-taGTTTATGGTATcccattttgtcgaggtgccagaggcagtattgaaggctaagctttta
-ttgtgtcccatatcaatgctggggtggtgtcctacttgccctggtccattacctcccttg
-gtggaacacttatggtcaaggaacttagagtcaaaagacttatagccaatcaaatgttct
-aggccagatgggaatggaggtgagcaggcactcattaaccttaaagcctctttaagcaac
-ataagagccaaaaatcaaaagccagaaggcaaggtataaaattggcttatttagaaattc
-tatgcaagagctactataatcttggtttgtggcaattagctatacaaactcaagaattat
-gtttagctatttagggatctgtgtgcctgtccttgatttggagtgtcagaattaatttta
-ttcctcaaaactggcccttacaatctcatgtgatagtccctgggcatggaggaattgaat
-agtttcaAATTTTGGAGGTAAAACAAAACATAAGGCATTAACAACATTTTAAACAAAAGG
-TCATAAGCCCTGCCTAGTTTTGAGAGTGACAGGAAAGGAAGTTCACAGGTAGCTAAACAT
-TTAAATTATTTAGTATCAAGACATAGAATAAATTATATTATTTCAGATAAAGGCAAAATT
-ATTAAATGAGTCTTAATGTTTTTGAATACAGGActgcctctgtgtcttatggaagcagtt
-tattttgattgtcacttttgtctaggtctaaagatgagactttggtcaacttgagtttgg
-tgtcagatactggcagaagtcagtgccttcttcttttttgggacagagtctcactctgtc
-acccaggctggagtgcagtggcatgatcctggctcactgcaacctccacttaccagcttt
-aagcaattctcatgtctcagccacgcaagcagctgggattacagatgtgcacgtaccacc
-acacctggctgatttttgtatttttagtagaaatagggtttcaccacgttggccaggctg
-gtctcaaactcctggcctcaagtgatctgtctgcctcagcctcccaaagtgataggatta
-taggcatgagacactgtgcctggcagtcagtgccttccttagatgagatattggacccag
-aagtcaaagccctgtaacttaacagcacaaggattagttaatagCACCTGATAAGGATAC
-TTTTGAGGGGGATAGAGTGAGCCCTTTAATTGATGTTCTTCCAATATATGTAATTATCAG
-GCTGGAGGTGGTGATCCTGGAGTTCATGGTCTGACTGGAAGCTGTGAAGACTTACAATCT
-TCAGTGCTTAATTTTTATGGCTTTAGTAAGCCCCAGCAATATGACtaagtcagagactta
-atttaggattttgattttgaagatgtttgttaaagatgttaaaaggctcaaaacatttga
-tcaaaacagaagcacagatcatggtaaaatagcatttactcatttacccaaagtgatcat
-cgaaatactttaaaggcaatacagaaggttacatggatgtaaaaaccttaacccttttaa
-aatctcagtttctttagcaatgaaaaacctaataaagacagcatagaaattatcttgata
-atacataaaatctcagttttttaagccatctactaaaaaagcaaaaaagccctactgcat
-tgtgactacttttacttattggaagctcatttagataaccaggaagtcaaacttgatgaa
-aaaagtgcttgaatttaatcagacacaggaagactgttttcaaggttatgaatatagcag
-gggaatacacgactcctaggaacagcatgagaagttttctgattgcatcaaaaatttaga
-catatcaagaaaagccagtgtacagaatgcagttatactagaggaaaacattgcttttct
-agacctccaagatgcaatatgttagcatttggccataataacagttagaaccagagcagg
-gagaaagttatagaagctgacagaaaaattaaaggagagagttgttatctcaagcattct
-caaagggagaaacagctgaaagctgtttttttcaacagcacagcaacagttgaacttttg
-agatatgattctgagaagttttaaaaagaaaaaggttataaaattaaaggtaagatttcc
-tataatttatttaaagagcatatcaatatcttaagaaaaccttgttttgatgtaagggac
-caatttttagacaaattattataaataatttttttataactaatgatatgcaaaatccct
-tttacaaattcccctttatgacttacatagaccatctacgacatgcttggactctctgac
-ttgtcctgaacttccctctttgctaaacaatcagtcattttactttaggacaaaaattta
-ccatataagactctttttcatataaaattattctcttttctttataacctttcttaccat
-aaatacatcttcatatttataactttctttacatctctctctctcccctacctactggtc
-cctttctaccttgtttcataagtaaacattttcaagttcgtaatttgaattgaccttcaa
-ttcagataacttctgaattagacaaaattatttttttctcagtaatactagatcttGGCA
-GGCTTTTGGCCTCTAACATCACCCAGAGAGAAGCCAAATTAAACAACCTAAGAAGCAAAA
-ATCATCAAGACCAGAAGGAAAATGTTAAGTGTAAACTTCAAAGCATGTGAGCGTAGGGCG
-ACATGTGTCACTACTGAGGCACAGACAGCAAATATGTAGTCATCAAAAGGGACAAGGGGA
-TCAAGAAGCAGTAGGTGCTGGAAAATATCCCTCTGAGCCTCAAACAGTTTATGCATCAGG
-GTGACACTGCAACCCTGGGCCCCTAATGGCAGAAAAACGCCACACAACAGGGTGGCAGCT
-GACCAGAAGGATCCCACAACTCCAGGCTCCCTAGCAGACACAGCCCAAAGGATCCAACAA
-CTCTGAGTGGGGGGCTCCAACCCCTGGGCCCTGAGAATATAAAGGAACATGAGTGTCCCT
-GTGTCTCCTGGGGCTCAGAAGGCTAGGCTGAAAAGTGACAACAAAGGGAAGGGCACTCAC
-CTGCCTGTGAATCCaaaactggaaaaagcaagaaatcctgagctgtttgtcagatgttag
-cattttatagataaagccattctataattttagaaacatgctttcccatatcataaactt
-ttcttaattggaaataacccagacatctgatgagtaatctaaggaaagctgtggaccaaa
-attttgggtaaagtggtctttatggaagttaaaaaaaaaaagatttaaaaaaagatttaa
-agattttttttttaaaGCCTggctgggcatgatggctcctgcctgtaatcccagcacttt
-gggaggccgaggcaggtggatctcttgagaccaggaatttgagagcagtatggggaacat
-agtgagactctgtctctataaaaaattaaaaaaattagctgggtgtggtggtgtgcacct
-gtggtcccgaatacttgggaggctgaggtaggaggatcacttgagcccaggaggttgagg
-ctgcagtgagctgtgattgtgccaccgcattccagcttgggtgacaaagcaaaaccctgt
-ctaaaaaaaaagagaaataaagaataaataaaaGAATACATGAaattaaattttaaaaaa
-gccttttccactttttttccttcagtgtcaaatgaacttctaatgtttccatttcatcta
-gaactgactgaactgcgttaagaaaaataaaatctccaagtagacttgaattagtaatac
-ataaacagtgagtcttatctcaacaccagcagcttaataacagcagatttaaagcaggca
-gaaaagaaaagggagaaatagataagagagctttagaagCAATAATCAGAGGCAAGCATG
-GAAAGTGAAAGTAGCAAACTTCTGGGCTGGCCATACAGAGCTGTCATAAGCCTGCAGTAA
-AGCAAAGGTAACAAGCTGGGAAACGATGAGAATTACAGCATTCCCATACCTGGCAAAGGG
-GACAATATGGATTAGTTCATAGCAAACATCTTGCAAAGCTACTTCCATTTTTCCAAATAT
-ACCCCAGGGGCTCTAACCCCATGGGTCTTTGGGCCTCTGATCTGAGTATTATACCCCAGG
-GCCTCCAACCCTGTGAGTTGGGCCTCTGACTCCATGGGCCAGGCCTCTAGCCTGAGTTTC
-TAGGCAAGTGTCCTTGCCTAAGCCTGACATAGTACACCaagatggacctcacttaccaga
-agcggccaattggtgctgcagactgaatttcttttgcatagggtctcgtcttatgcttcc
-ttcatggtcgctaggaagatgttgccagaaaaggggccatgattcaaaccttaaaaaagg
-gttcttaggcctcacacaagatggaagtcaaggcgagtctcaaagtgcattgagaacaga
-tagtttattgaaagctactcagttacagagaagggtgttctcagaaagcaagaggaggaa
-cacattgtctttgttttaaactcttcttatatatgagtcttattcatgtaaaagctaagc
-tatttctatgtgagtggactgacagtgtgacaaaatccatgactctgttgatttaaagaa
-agttatccttggcattttaatgtgtaagtacaccaaagcatgactataattattttaaaa
-gcacacattgttatgtgacatggaaacatctggacattttgctgtctaggagtttgtcct
-tgcaggtattattaagtggcttccttagctgtgaatatcttatgatcatgggttgtgatt
-gggaaggaatgtgccttgctaactttaagatagagttgattttaaaatggcatcaccctg
-gctctcctatgcttctgtttccctaacaAAGGAATGCCCCTTCCCTCCACACCCCAAGCC
-CCAACCAGCGGGACCTGGAGGTAGGGAAGACAGCATGGGAAGCCCAGCCTGGATTGGAAG
-CAGCAAACATTTGACCATCCCAGCCACAGGGCATGCCTACCCTCTTCTCTCCCTGGACCC
-TGGCCTCGCCTACCGTGGCCATCCTGCTCCCACACTAATCAGAAACTTTCCCCTGGAAAC
-CCGTCCTGGGCCCAGCCTTTGTTTCAGGTCCTCCTCAAGCCAAAGACTTCCTGATGCAAG
-CGCTTCCTCCCTCCAGCCAGGGTGAATTCTGCCCTGTCCTTAGTTGGCTTTTCACATTCA
-CGTTTCCTTGTGATGCTGCTACTCCGGCTATCAGAGTCGGGGGCAGCAGTGCTGAGGCCT
-CCCACCCAACCCCAAGGTGGCAGCAACATCCTTCAAGTTCCCTCCTTCCAGGAAACCATC
-TCTGGCCCCTCACTTCACAGCGTCCTCCCTCCTGTTCTGCACCTGGCATTTAACACATAC
-TGCCCCAATCACTGAGGATGTTGTCACTGTTGGTAATACAAGGAATAACAGCACTGACAA
-CAATCACAGGGTCAACTATGGGAGAGCAAGAGGTTGAGAAAAACAGACTCTGCAGTGATT
-GGATCTGGCTCAtctgagcctgagttttctcacctgtgaaatggggtcagtgtagcatct
-accagccttgtgtagctgctggcagataaaattagatcaatatatatcaccatcagcact
-cagagggctcagtccctggGGACAATTGTGGTTATTATTATTATTATTGTTGCTGCTACT
-ACAGGGAACACTTGCCAAGGCCTTCCTGTGGGCCACTAACTGTGCCCCCACTCTTCCAGA
-TTCACACCCAAAGGAACAGggtgctatgatacccattttgtggttgagaaaaactgagtt
-ccatcaaagtgaggagatgggttcaaggtaccacagttgggacctgaaaagccagCAATG
-CACTAAAGATGTGGGTGACACAAGGCTTGGACCCTAACAGAGCAGACTCTGAGCCCTGAG
-GGTGGAGATCCCAGCCTAGTTCACACTGCTGCACAACCTGGCTGCAGGAGGACAGCCAGT
-CTTGgggctctggcctcggacaacctgggctaatccttccaccttctagctgagtgaacc
-cgggaacatcacttaaccttcttgagctcagtttttgcctttggaaggtgaaataatggt
-ctctaccatgcagggggtgggggaggattagatgggtaagtggatggaaagcttgagccc
-agagcctatgcacagtgggctgctcaggaaggtagAATCATGCAAGCCCAGGCCTAGAAA
-TTCTAAAGGGCAGGCACAGGTTCCCCACAAACATGACCTTGGCAGAATCCGTTTCTGAGA
-GTTGGCAGCAAGAAGAAGTTGTATGGATGACAGAAATTCTCAAATTTGCCTATTTTCTTA
-AAGTGGACATTTAAAAAATTCCACATTGGGGCGGAGGAATGTTCTTAGCCCAGGGATTGC
-TATACATAGGTTCATGCATTTACTATGCGTTGGTTCATCTAAGCccaacctcagggtctt
-tgtatttgctgctccctctgcctggatcactgtttccccagtgggtctcttcctaacatt
-ctagtctaggcttaactatttgcccttcaagagatcttccctgggcaccctataaaaatg
-catccttcacataaactctttctccttttccctactttgtttattcatgctgcttttact
-atctggcatcatattctaaatttatttgtttatctgtttgttgactgccttcttgtctta
-gcctattcaggttggtataacaaattgtcatgaactgggtagtatataaacaacagaaat
-ttgggctgggcacagtggctcaagcctgtaatcccagcactttgagaggacaaggcttga
-ggtcacgagtttgagaccagcctggccaacatggtgaaactctatctccactagaataca
-aaaattagccaggtgtagtggtgcacacctggggtcccagctacttgggagggtgaggca
-gttgaatggcttgaacccgggaggtggaggttgcagtgagccaagatcgagccactgcac
-tccagcctgggcaactgagcgagactccatctcaaaaaaaaaaatttaaaaataaattta
-ttttcacagttctggaagctggaaagtctaaatcaggtcatgggtagattagatgcctac
-tgagggcctgctttctggctctgggagacttttagctgtgtctgcatatggtggaatggg
-taaggggctgctctggggcctctttcataagggcactaattccattcatgagggctccac
-tcccatgacgtggttccctcccaaagtccccacatcctaacactatgacatgggaattaa
-gtttcaacatataaatgttgggaagacgcaaacattcagaacatagcactttcccattag
-attgtgaggataaggactatatctaagccattcacttctatatccctgttgcccactata
-tacctagcatacagtaggtgcttaataaatgtttgaaaaatgggtgaatGAAATATTGTA
-CTTTCTAATTcaagcattttctgagcacctactgtgcaccagggcctgtgctatgggctg
-tatatacagaaatacatcagtgagagtcctcagccctAAGGCCATTGGTCTGAAGAAAAA
-AGAGAAATTGCAACAAGTGCCATAGCAAACACAGCTGGGAAATTCACtgatgtagtttgg
-aggtgtgtctctgctcaaatcatatattgaaatgtaatctgcagtgttggaggtagggcc
-tggtgggaggtgattggataatggaggaggatttctTTTTTTATATCTATcaggaatgca
-aaattaatttaataatcgaaaattactataattcacagactaagacaagaaaagccatac
-gattctctcaccagttgcagaaaaagcatatgatagaattaaacatctttttatgatttt
-ttaaaattatactttaaattctgggatacatgtgcagaatgtgtaggtttgttacatagg
-tatacatgtgccatgttggtttgctgcacccatcaacttgtcatttacattaggtatttc
-tcctaatgctatccctcccccagccccccaccccctgacaggccccagtgtgtaatgttc
-ccctccctgtgtccatgtgttctcattgttcaactcccacttatgagtgagaacatgtgg
-tgtttggttttctgtccttgtgatagtttgctgagaatggtggtttccagcttcatccat
-gtccctgcaaaggacttgaactcatccctttttatggctgcatagtattccatggtgtat
-atgtgccacattttctttatccagtctattattgatggacatttgggttggttccaagtc
-tttgctattgtgaatagtgccacactaagcatatgtgtgcatgtgtctttatagtagcat
-gatttataatcctttgggtatatactcagtaatgggattgctgggtcaaatggtatttct
-agttctagatccttgaggatttgccacggtgtcttccacaatggttgaactaatttacac
-ccccaccaacagtgtaaaagcgttcctatttctcatggaggaggatttctaatgaatggt
-ttcacaccatctccttggtactgtccccatgatagggagggagttcttgtaaaagctggt
-catttaaaagtgtgaggcccccaccgcctctttctcttgctcctgcttcaccaggtgatg
-tgcctgttccccctctgccttccaccaggattggaaacttcctgagacctccccagaagc
-tgatgccaccatgtttgctgtgcagcctacagaaccgtgagccaattaaacctcttttct
-ttataaatgacccagtctcaggtatttctttctggcaatgcaagaacagcctaacacaTT
-CACCTCCAGCTACTGCAAGCATTCATGGGGATGAGTGAAAGGAAGGAGAGAGGTGGCTGC
-TGTGTCGAGGGTTTGCTCTACGACAGGATGGTGCACTTGCCACCTCTGGCTCGATCCACA
-CACTAGcccattttacagattaggcattgggaactcagagaggtgaagtgacttgaccaa
-aagcaaactcatggcagaatgaagactgggaccagggaggcctaattccaaacattgtgt
-gttacctcctctaccacaaggcctctctTGCCCAAGAGAAAGAATAAAGTCCAGCTAAAG
-TGAGCTCAAGCAAAGAAGATATAGATATGTAATTATTATCATTGTTATTACTATTTTTTT
-ctcatgtaacagatacatcaaaaagtagaagccttcaggcatggctggatctagggtctc
-aaacactatcactagaactgctccattcttagAGAGGCTCTCAAGTCAAAGTGACAAGAC
-GGCTGCCTGCCATGCCAGCCTCCCCTCCCCTACTCCCAAAAGACCAAGTCCAGAGGGAAA
-AAGAATGCCTCATAGCAGGCCGTTGAGGTTGGCTAATCTGGCACCCATTCCCATCAGCCT
-CTTCCTGCTACAAAGGCTGTGCAGCCAAACGTccacctttctgaccctcctgcagctggg
-tggccacaggacacagttctggtcaatgagacataagctgaagtttgtggtgagggagag
-cttttgctcctctgataacaggagcagttgtggccagagctgccccttcccatgttgcct
-tgatcacagacatgatatttgaagcacagaccatcttgcaaccaggaggaaaggctgaga
-aaaaaaaagtcctcactattttttagccatgacattgttaagttgctggactcctaactt
-cagacttcttcctaagagaaaaataaacttccaatgttcaagccactgcattaaattcct
-tgttacttgtagctgaaagcattcctgactaatacaACTCTCTGTCTCAGGTCCCTATAA
-AAACCCTGGGAAGGCATCATATTGGTTCTAATGGGGTCATGCTGTCATTCTGCAATGGAC
-TGTGGTGGCCAGCAGAGATGGGATGTGCCAATTGACCACTCCAGTGGCCACCCTTACCAC
-ATAGGCTTCGAGTGGGTAGGGTTGTTCTCCAGCACAAAAGTTAGTAGAGTAGGGAAGTGG
-TGGCTACACTCCCTATACCTCTGAATCAGTGGAGGCAATAAATTCCCTGTTCTTGGCTTA
-AAGTTTCTTCCATCGTTTCCAGGAACATGAAGATATTGACTTATTTATCCTCCAGGATTT
-TTATTTGGAATGTGAGGGGAGGATAATTCAGTGAACAGTCCAAATAGGGGATCTTCCTGG
-GAAAAAAGGACAAGTCATAAAAACTGCATTGAATGCCAGTGTGCACAATGTCCTTTCTGT
-GCCCCAAGACAGTCTCCCTgcatgagttcttgagccagacagacctgagttcaaacccgt
-ctccatcatgcaagtgcgtgggcagcctcgccatgtcacctcacctctctgcacctgcgt
-ctcTAGAACCGGGGGTGGAAGGACCCACTTCAAGGACCCAGTCTTCAAGAAAGAGTGGAC
-CAAGTGCCTCCCCCATGGTGGCCCTTTGACCAGCAGCAACACCCAGAGTGCTTTCTCTGT
-GAACCCTTCCCTGATAATCCCAGAGTCCCAGGGAGAAAATCTGCTCCCATCTGAAGCAGG
-AACCATCCAGCAGTGAGTGaacccactgccatttcctcctgccatgtggctaggccatat
-tccacagcctcccttgcagtcaggagtggccacgtgccttagttccaatccactgcactc
-cttcccctttgatgggtttgatgcacacaggtctgaagacctcagcagccacagtggaag
-atggcagagctgcaggacaccaggagcttgggtcctgaaatctttgtgcgctagagctgc
-tcacttaccaggggcacccatgttgggcttttggtgagtaaggaaaaaacctctttggta
-tttggtgcatggtgcctcttgggcttACGAACGTTACCCACATGCACCGCTTGGGGGGCA
-CCTGTAAAAGTCTGCAGGACGGTCAGCCCGGGAGGACATTCCATGTGGGCACCAGCAAAG
-GCAGAGGGTGGGAGGTGAGGAGGCCTGAAGAGCCAACGGCAGCCACACTGTGGTGTTGGA
-ACCAGATTGTCCTTCAGTCCTCCCGCCTTGACTGCCAGAGAGCAGCCCATGATCACCATC
-ACATCAAGCCTGCAGGCAGGGTAAGAGATTAATAACAATACTAACAACAGTaataatagg
-aggctctgccaatattcaagagaacttaccactcaccagctgcgggctggtttcttccta
-ggcctgatctcatttaatcctcaccatggcccagcaatgaaggccctactgatgtcagtc
-ccattttacagacaagaatacagaggcccatgaggcgtcggaggacattctccaaagGGC
-ATGTTCTTGAGCTCAGCTTCCTTCCAGCACAGCCTTTCATCAGGGCTTGGACCTTCATcc
-cattatatgtccagcattattcataggctgaggacacagaagtgaacaaagtagatagaa
-atctggacctcgaggggctgcgactctagtgggagaaaatgggcaataaacacacaaaca
-cgtaaatatacaaaaggagtttggtgaaggatgagtgacatgaagacagcaggtcaggat
-gctgcggtgggtgaagggaggaggtggtgctgtgcatcttgaggttggaggaaacctctc
-tgacatggagctgaaagtgctgcagcaaacgagtgagccacgtgaagatctggggcaggc
-tgttcctggcagagggaacagcaagtgcaaagtgcaagtgctacggccctgaggctggaa
-ggagcttgtcatgttcaggaacagaaaggagagagcagtgtggctggagtggagtgatgg
-ggggtggggagggatgaggctgcagagggagtgggttgggacaagTGGCAAGTTTTGGTG
-GGCAATGGTGGCAGGGGTAGATGATCCTCCAAAAAGACTCATCTGGATGCCAGCTCTGGG
-GGGTGCAAGGAGGGTATTCCAATGAGGAGAGGAGACAGGGGTTTCAGCCCAAATTTGCCT
-CCCCACTCTCCACTTGACTTAAGCTGCTCCCctctcccttcctttctctcattccctctc
-tctttttctctctctcCAAGTGGAAGCTGGATCCCTAGGGAGGATGAGGCCCGGGCTTGA
-GTCCAGGCACCAACAAGAGCGCGTTCCCACCCTCCCGAAGGTCTGATGTGGAGCAGAGGA
-AAAGAATGGTCCTGATATCACcggaaaaagggtcttatcccatatcgcaagagtgggttc
-ttggatctcacatgggaaagaattcagggtgagttgcagagcatagtgaagttaagatag
-gattagagactaatcaatgacagagtagggcatcctcagaaagcaagaggagaacgtacc
-catttcaagtaccagtgcttgcttatataggcagttaagagtagtgtactctgggctcac
-ccctgtaatcccagcatgttgagcggccaaggcgggcggatcacttgaggctaggagttt
-gggaccagcctgaccaacataatgaaaccctgtctctactaaaaatacaaaaaactagct
-gggcatggtggcctgagcctgtggtcttagctacccaggaggctgaggcaggaggatcgc
-tggagccccgaaggtccaggttgcagtgagatggtgccactgcactccagcctgggtgac
-agagtgagactctgtctcaaaaaaaaaaaaaaaaaaaagaagagtagtgtattctgttac
-aaaggcttatgatcagcttgtgacaggctactagtattgctactttcctatgttactatt
-gattttagcaagaatttatgagtgtactattatctttaaagcaaaacctaTTATTTTATT
-TTTATTTATTTATTTATTTATTTtttgagatggagtcttgctccatcacccaggctggag
-tgcagtggcgcgctctcggctcgctgcaagctccacctcccgggttcacgccattctcct
-gcctcagcctcccgagaagctgggactacaggcacctaccaccacacctggctagttttt
-tttgtatttttagtagagacggggtttcaccgtgttagccaggatgttctcgatctcccg
-acctcaccatctgcctgcctcggcctcccaaagtgctggaattacaggtgtgagccaccg
-cgtccggccgaaacctgttcttaaactaagaatttttttttgttcttaagatattgggac
-attttcataagttctgcgtctttaagtaacatcattaactcgttccctcaaccatgaaca
-tcttgtaaccaagcacgtccacgcccctggaaatgtaacccagcaggtttggcttttctg
-cctttattcaatatggagtcagtctggttaggatgcctttgTCCctgagagtcagtgccc
-tcacagcccctgcccggcctctaacttgctgtgtgacctggagctgatcattcgctctgg
-gcttcccttttctcctctgtttgaggagggagctggtctggtgccaccattttccagctg
-tctgtccttaggcaaattattcagcatccctgtacctcagtttcctcatccatgaaatga
-ggatggcccagttccaggcttacggtgaggattaaatgCACAGTGCCTGGTCTCAGTGGC
-TGCTGGGAATTACCATCATTACTGTTGTTTTGCCATTCTATTGCTATTGCCAGTGTTGCT
-ATTAGTATTCAAAATGCAGATTGGTggctgggtgcagtggctcatgcctgtaatctcagc
-actttgggaggcagaggttagaggatcgcccaggggttcaagaccagcctgggcaacacg
-gtgaaacctgatctctacaaaaaaaaaaatacaaaaattagccaggcatggtggcacgta
-cctgtagaccttacctgaactcaggggggttgaggctgtagtgagctgtgatcgtgccac
-tgcactacagcctgggggacagagtgagacgctgtttaaagaggtttattctgagccaaa
-tgtaagtgatcaagacccgtgacacagccctaagagatcctgagaaaatgtgcccaaggt
-ggttgggttatagcttggttttatacattttatgggtacagaagttacaggcagacatta
-atcaatccatgtagggtgtacattggttttgtcgggaaaggcaggaagcttgaaaagtgg
-gcggcttccaggttataggtgaattcaaagattttctgatcagcaattggttgaaagagt
-taagttattatctaaagacctggaatcaataaaaaggaatgtctgggttaagataagggg
-ttttggagaccaaagttcttattatgcaaatgaagtctgcaggtagcagccttcagagag
-aatagagggtaaaggtcccagactctttgttaaatctctcctgcatcaggaaaagacctg
-gaaagggaaaaggattctctacaggatgtagattttctctacaagagacagagttgtagg
-gccatttcaaaaatatgtcaaagaaatatattttggggtaaaatacttcaatttctttca
-ggtcctgctatctgttgtgtgatgctatatgaggaatttggtatcttattgctacaaaga
-gcatgctttgtcagtcttaagctctctctctctttttttttttttttttttttgagacag
-tgtctctctctgttgcccaggctggagtgcagtggcactaccttggctcactgcagcctc
-cgcctcccaggttccagtgatactcctgcctcagcctcctgagtagctgggattacaggc
-gtgtgccacctcgcctggctaatttgtgtatttttagtagagatggggtttcaccatgtt
-ggccaggctggtcttgaactccgaccttaggtgatctgccgccgtcttggccttccaggc
-gtgagccaccacgacctgccaagctctctgttttcatgataatgctggtcaactgtgcct
-gaattccaaagggaggagggtatgaggcatgcctgatccccactttccatcatggcctga
-actagattttcagggtttgttgggtcccgttggccgagagggaggtccattcagtcagtt
-agggggcttgtaattttatttttggtttacaGTTCTGAGGCCCCTTCTGGCTTTCAGACT
-GGCCTGGTTGCTTCCCATCTGGTCACCTCTCTGTCAGTGTTGGGGATCAGCATTCATCTA
-CCCCACGGATGTTCTGCCTGGAGTGGGGGTGGGAAATGGGACTGGACCTCTCGCCATGGG
-ATGCAGCCAGGCCCTCTCTGCTCAAGCCTTCCAGTGCTCCTCACCCAGACACCCTTCTGC
-AGGGACCCCAGTTTTACTCCCCTGAAAAAGAAAGTTTCCATCAGTAGGAGAAGACAGGAC
-CTGAAATTGTCCCTGAGCCTACATGTCTACTAGGGTAGATATTTTGAAAGCCGGAGAGAG
-GAGGAAGCAGACAGGAAGGAGACGAAACCCCAGGACTGTCTGCTAACTCCAGGAGGACTG
-GTCTTCAGAACCCAGGGGCCCTCCGCATTCCTTCTGCCTCCCTATCTCATCGTAGCTCCT
-GCCCCATCCCCCCACCACTTCTCTCCCCTTTCCTAACTGCGTGCCCTTCTCTCCTCCAGT
-CCAGCCCAGCCCTACTGAAGAACAGCAACTTGAGCTGGTCTTTCTGTGCTCCGCTTGATT
-AAAATGTAGAAGGCACCTCTATCCAGAAGACTTGGCTTGGCCCTAATCACTCCCAGCCCC
-CTTGGCTGAGTGGCCACCCGCTGCTGGCTGCTGTCATCCCACATTGGAAGTGACGGAGGA
-GCAGAAGAACGAGTGGGTCACCAGCCGGTCTTCAGGCTCCCGGGCCAGCATTCAGACTGG
-GCAGGAGGTTTGTGGGTGGAAGGTGAGTTGGGCAGCCCGTCAGCCACTCCTCAGGGCTGG
-ACGGAAatagtgattaggagcatggggtttgatgtcagatggcctggggttgcagcctaa
-ctttgttatttactatctgtgagttaagccctctgggtttcagtttctccatttgtaaaa
-tgggactgatattggaagatgtcctacttagaatggcgcctgagccatcgtaagccctca
-gtgaatCCACTGTAAGACTTCAGCCCCCAGACTCCCACTGTTCCCTTGCCCCAGCTTCCC
-TGCACCTCTCCTGCCACTTCCCTCAAAGTTGCTCTCAGTCAGGCCTTGGGAGCCACAATC
-TGGGAACGAGGACCCTGACATCCCTCTTCACAGCTGTACCCAGCACCAAACAAGTCATCA
-GAGGTTCAAAACACGGAGCCCCTACCATGTGCCAGGCACGGCATGGCATGCCTGCTCTCT
-TTCTAATTTTGATACCGCAATGATTAATTCTGTGAAAAAAGTTCTAGAAGGATATAAGGC
-AAAGAATTAGGTTGTGTTCCGTCCATTCACTCACGGCTCTGCTCCCACGCATGGCTGCGc
-tatgcacactgccctgcagcttcctttgtctgctgcacaatgggctctggacggagccct
-gttggcgcaatgagtgagccctacatcaagcttcgtcatcgctgcatcgctttgcaccgt
-gtggctgggccgccatcagtacagccaactgcctctgatggacatctgggctgcagccag
-attcctcctaacagggcttcagggaaagtcctcctcagcgcctctttgtgcgcatggcac
-atttctctaaggcaggtttctggacatgagactgacgggcagcatgtgctccttacattt
-gggggtcctgtcaatcccctcctctcccgcaggctgttctagactccagcccccatgtga
-gaggatgcctgttgcccTCACTCTTCCATCCTGGCAGTCCCCAGCCTCCTTGCCTCTCTT
-GTTTTCTTGTTCCGATCAGTTCCAGGTGGCCAGAGGGTCGAGACTCATCTCACAGCCGTG
-CAATAGATGCGTGTCTCTCAGTCGGTCAGCTCTGGCTGGGATCAGTGTTTATCTTCATGT
-CGGTGGACACCATCACAGGCACCCGCAAGAATCAGCGATCGACGGGGAAGAGGTTTGGGT
-GCATGGAGGagtgctttgcagtgagggctttggagccttgtgccctgattcaaatcctgg
-ctgtgtcccctgccggttgtgtgacttcggataaattacttgatgtctctgagcataagc
-tgggtcatcagaaaagccaagctagtaagagcacgtagctcagaaggctgctgtaaagtt
-cagatgagttgatatatgctcagtgctggaaagggtgctgggcacattagctgttggtat
-tattTGGGCACCTCCAGCCCAAATAATAATAAAGAGACTAGGAGGGATGTTGGGAGATAT
-CAGATGTTGCTCATTGGAGGCTGTACTGAGTGTGCAGAGAGCTTCAGGGAACCTGGAGCT
-TTGAGAGGTAAAGGAACGTGCCAACTGGAACTAGAAACCCACTGCCGCCTGCAGCTCTCT
-GGGCTGTTTCTCCACATGCACCGTGGGGTTGTTCGGGTCCCACTGGGGAGGGTGGCTGGT
-ATGAGGGTGGCCTGGCCTGGATGTGAAGTGGGATTTCCAAGGCTGGCACTCAGTCCAGAG
-CACGAGCCTTGATGAGGAACAGATGCACTCACAGTCTGGGGTCGCCGCCCTCCCCTCCTC
-CACAGCCCAGGGTTGGGGTGGCGATAGCTTCCAGATGGGCTTGGCTCTTAGTGGGGCCTT
-AAATGACTCCCTCTGAGTCCCTGAGAGGTGGGACTTAGGGCCTCTTCCTTGGTTCTCAAC
-CCCCCTGGCCCTGGGGGATACCTGAGGTAGCTGGGTTCAGGCCAGgtgaccttgggaatg
-ccagccctgctccgagcctcagtttccccatctgagaaacaggcattCTCCATCAAGCTG
-GCTTGGCAGAGCCACTGTGTCCTGTGATAGCTAAAGAGAAACATGAAGGAGGACCAGGAA
-CCCCCAGGAAAGTAGGGTTTCTTTGGTTTTATTTTCTTTTTGTATTTACTTTCTGAATGT
-ATAGTACATATCCATAGCATAAAATTTCAAAGGTACAAAAGGGGTCATAGGTAACAGTAA
-GCCTGTCTCCCACCCCTGCCCTCCAGACACCCAGACCCCTCTTCCCCGAGGCAAAAACCC
-TGTCACCAATTTCTTGAGAATCTGCCCAGAGATACGGTATGCACACATAGGAAtttttta
-cccagtgatgacaaacttcacacacagtatttcacactgtccttttgttactttaacaat
-accctttagagatcttcctatgtcactccataaagtgcttcttttttttttttGGATGCT
-TGGCGAAGATGGTTTCAGAATATTACACAACTTTCAACTGACCAATCAGGATGGGCCCGA
-GCAGTGCACAACCCTACAGTAGTATATGGCTGCTAGCTGGATGCCAGCTCTGTGTCTTTA
-TGGTTCACCATTGCATAGATGGGCCAATTGCAGGGAtgggtaatttataaaggaaagagt
-tttaattgactcacagttccttgtaactggggaggcctcaggaaacctacaatcatggca
-gaaggggaagcaggcacatcttacatggcagcaggcgagagagtgtgtgaagaagcaaag
-ggggaagagccccttaaccagtcttcaagagatgagcaggggctgtttccaacattttgc
-tctttaaaggaaggttgcaatacatacccattttgtacatttgtaggagaatatatgtag
-aataactttctagaagtgaaattgcATTTTacatccatatgtttaaaaaaatatcaattt
-ccaccccctgccatatacaagaattaacttgaaatctaccataaatctaaacgtaaaact
-taaaactgtaaaacttccagacagcaacatggaagggaaatctttgtgaccttgagttag
-gcaaagatttttttaggtactacacaaaaagcataaaccgtaaaagaaaaaaagataaat
-ttgacttaatcaaaattcaaaacttctgctcttcaaatgatgctatcaagaaaatgaaaa
-gacaagccacagattaggtgaagatatttgcaaaagtcatatctgataaaagactcatat
-ccagaatatatattgagtgctttcacaactcaataataagaacaaataatccaataacaa
-atgagaaaaaggtttaaaaagacatttcacccaaaaacagatattgatggcaaaaacaca
-catgaaaagatactcaatgttatcagtcatcagggaaacatatattaaaaccacaacggg
-ctaccactacatacctgttagaagactaacatgaaaaataactgataatacctggagagg
-gtatctaacaactggaacttagaaaaacagtttggtaatttcttataaaatgacccagct
-gtcctactcttaggtacaaagagtaatgcaagagaagtttgtgttttaaaaagaaaaact
-gtaggcaaatatttacagcagcttttctcataatcaccaaaaactggaaataacTGCtgt
-atgagtctagtctcacacagctataaagagactactcgagatgggctaatttataaagta
-aagaggtttaattgactcatagttctgcatggctgggggggcatcaagaagcttacaatc
-atggcagaagggggaagcaggggaagcaggcacgtcttacatggcagcaggtgagagagc
-gtgtgaaggaggtgaaggggaaagagtcccttttaaaaccatcagatcttgtgagaactc
-actcactatcttgagaatagcatggaggaaactgcctccatgatccaatcacctcccgcc
-aggttccacccttgacatgtgggaattatggggattacaatttgagatgagatttgggtg
-aggcaggaggatcacttgaacccaggaggcagaggttgcagtgagctgagatcgtgccac
-tactctgcagcctgcagacagagtgagactgtctcaaaagaaaaaaaaaagaGGTaaaca
-ggtaaagaaaataattttagatcatgataagagttaggaagaaaacattttcaaggcact
-aaatagagaatgatttggagggggtacgatatttaaagaaggttatcagggaaagcctct
-ctgaagaggtaacatttgaactgagatgtagagggagagaaggaactagccatgtggaga
-tctgggggaggagcattccaggcagaggggatagcaagtgcatctgaagaggtaacattt
-gaactgagatgtagagggagagaaggaactagccatgtggagatctgggggaggagcatt
-ccaggcagaggggatagcaagtgcaagggccctgaggccagaatgagtttggtgttttta
-atgaaagaaaaaggccagtgggtggggcaaggaggagagggcaggaggtaaggtcagaga
-aggaatggggaaAGTCTAGCTTGCACCAGCCCTGACATGGGACGAGACACCCTCTATGCC
-CTCGGTCCTGGCGGCTCCTGCTTCCTCCTTTGTGTCCACTCAACATGATGGGTGGGCTTG
-GCCATCCGCAGACCCCTCTTGATGCCCCAGTACCTTCCCTGCCCCGCCCGACAGTGAGGT
-CCAGCCTCCTGAACAGCTCCTCTTGCTTGTCATTGGATTAATGGGCAGGAATTGCTTCTG
-CTTTTTCAAAGCCATTGCCCCCTACCACAGTCCCCTAAGATCATGAAGGTGCgagcaatc
-atacttgaactgttggatgatgaatgcatcactgttgatgtggaggaggctccccagtgt
-gaggactcagagcagggtctcggcctctcacagacctggctgtgtgcttggctccacctc
-ctacgacctagggccctgagcctcagttgcctcacctgtaaaatgcggcaaacaagcaag
-caacaagatgctcaacctcagtagtagtcggagaaacaagagctaaatagcagtgaggca
-caccctttacctccattccctggattagcaaatagtagagtcaggaacttccaagtattc
-atgagggtgtgggcgatgggaattccatgttctgctgctgggtgtttggactggtttagt
-acctaagagcctaagaaagagtatatctgatgacccaggcattttcctcttgagtgtata
-ccccagagaaattctcctgcagctccagaagGAGCCCATTCGAGGTCATGGGTCACTGTG
-ATGGTGTTTGAGGATGTGAGCAGTAGGTGAGAATCCATGTAGATGCCAGGAAAAGCAAAC
-TGCAGGGGCCTCTAAAAAATACCAGATAAGGGATgagtgcggtggctcatgcctgaatcc
-cagcactttgggaggctgaggcaggtgcatcatttgaggtcaggaattcaagaccaacct
-ggccaacacgatgagacccaatttctactaaaaatacaaaaattagccaggtgtggtggt
-gcgcacctattatcccagctactgaggaggctgaggcaggagaattgcttgaatctggga
-gactgaggctgctgtgagccaagatcacaccactgcactccagcctgggcgacagagtga
-gactccatctcaaaaaaataataaaaataaataaataaataaatacaagaataaaatgaa
-taaaaaaccagatgaaaaagaaaaccaaaaagtaaaaataaaaaACACCAGGTGCATGAG
-AGAAAAAAAAAATAGAAGACGGGGAAATCTGTAGCACACGACCATTTCTGTGAttttttt
-tttttttttttttttttttttttttttttgcgacagagtctcactttttcgcccaggctg
-cagtgcagtggcgcaatctcggctcactgcaacctccgcctcctgggttcaagcgattct
-cctgcctcagcctccggagtagttgagattacaggcatgcaccaccacgcccagctaatg
-tttgtatttttagtaaaaacggggtttcgccatgttggccaggctgaactcgaactcccg
-acctccggtgatccacccgcctcagcctttcaaagtgctgggatgacaagcgtgagccac
-caggcccggccCATTTCTATGAATGAAAAAAACTCACAAGCTACAGAACATCCCTACACG
-CGTTAAAAGGATTCACACACATTCAAGCCCAGAGAACAGACTCACAGGAGCAGATGCCTG
-GGGGGAGGGGGAGGGGAAAGGGCAGAAGAGCATCAAGAGCGAAATCCAATTCAATCCAAC
-TGTGCAACAGACAGTTTGCAGAATTGATGAGGATGTTTAACCCAGGTCTTGGCACCCTAA
-GTCCAAGTAAAAAAATAAATACGATACAGCAGGTAAAATGGGGGATGATGGAAGGGtggc
-gatagtagtgcctttctcatggggaaccctcgaggctccgatgagcgaaaccatgcagag
-tgctcagccaggtgcctggcacgcagcaagGTGTCCGGTGCACAGCAGGGCCGCCCAGCT
-GTGAGCGGTGCGTGTATTCTCTCCAGCCTTGAATTCAGGCCTGGCTCCTTCTGCTTCCTG
-GTCAGTGCCGCTCTCTTGTGGCCCATACAGTGACAGGACTTAGACTGAATAGAGATCTGC
-CATGGTCCAAGGTATCTGATGGCGCTTCGGAGGAGGGAAGGGAGGGAGTCACATGGGGGA
-GATAGGATCACCAGAGGCAGATGGGATCACAGGAGGGAGATGGGGTCACAGGAGGAAGAG
-TGACTTCCGATTGGGGAAGAGATGGCGGATCAGATAAGGCCTCCTGGAGAAGGAATGTCT
-AGGCTGAAGGACAGATTCGACTGGGGGTCAAGGGGATTGATGAGCAAATGAAAGAATGaa
-tggagttagaatattgagcatgagcattacttagccctactgtgtgccaaggctttacat
-gcctcatatcatttcgtcctctaccacccctgggaaggcgacttattgcttctgtctcct
-ttgcagctgcaaaaagggaggctcagtgggttagcgactcatccaaagtcaagccgccag
-ctgcacatagagctctgatacacacccaggtcgtgtgactTGCTGGGGGACTCTATCTTC
-TCCACTTTGGGGTGGACTGAGGGACCCCAGTGAGCATAGGTACAGACCACCCCTGAGTCT
-GTCTGGACCATGTGTTAGCAGAAGTTTAATACTACACCTGTGCAGCAGGTGGAGATGGGT
-GGGACCTGTGTGGACGAGAGGAAGTGGATCTTGGGACAGCTACAGCATGCAGCGGCTCAC
-CCCAGGGCTGGACCCTCACTCTTTGGCAGGCAGCTGGGGCACCACACCCAGGGGTTAAAT
-GTGGAGACTCACTTCTTAAGCTAAAGGATGTGTCTGTCTTCAAGGCACTCTCCGAAAAAT
-GCCTCATTTTGGAATTTATGTCAAAGCCATTTAAATCCTTATTAAGAGTATTTAAAGATC
-AGTTTTCAAAATGTCTCCTAAGTATTTCATTTTTGTTTTTCTCGACTTGGTAGTATATTC
-CCATGGCTAAAAATTCAAAAGGGACCAAAGATAAAGGTAAGcctcctctctttccatcca
-ctctaacctctccccacccagagccatcactgttactggtttctagagtgttttgtcacc
-tgtaggttttgtgcattcatgaatcgtacacacgtgtattttccctccttcccgtccccc
-cgcgtgggggcttactatgcgcgctgttctgcaacttgcttttttcacttggcaattcgt
-ctcagggactgccccgtcattgtgtcaaatccttcctcgtggtgcttctcggccatgcgg
-tgttgcactgagtgctgtgacattgtatcgcaatgcctgtcctctagatatttaggatgt
-ttccagcattttgtgatcatacacaggactgcagggaacagctgtgtaagcaggtacact
-tgttctgcagcatgtgggccaggctaattgttatttatttatttatttatttttgagaca
-gaatctcactctttcgcctaggcgggagtgcagtggcgctatctcagctcactgcaagct
-ctgcctcccaggttcacgccattctcctgcgtcagccttctgagtagctgggactacagg
-tgcccgccaccgtgcccggctaatttttttgtattttttaataaagacggggtttcacca
-tgttagccaggatggtctcgatctcctgacctcgtgatccgcctgcctcggcctcccaaa
-gtgctgggattacaggcgtgagccactgcgcctggccctgggccaggctaattggaggat
-gaatccctagaggtggattgctgggtcaggggacatgtgcgctgtgatttgaatagatgt
-caactcaccttctgtagaggctgggtcaagtcaccctctcctgaggaaggtaggggaggg
-tggcggcttacccccacccagcccaggccctgtggtttcattttctttttttttcttttt
-tatggctcttagccaatcagataggtggaaaatggtagctctgtgtggctttattgtcat
-ctaatttgagtaagggtgTTTGGAGTTCCTTTTCTGGATGAGGCATTTTTGCCACACGGG
-GACAGCGCTGAGCCGACGACACGGCAGTGCCGCTCTGGACACGCTGATTCTCCCTGAGGC
-TCATCTTCTCAGGCTGAGTGGGACTGTGCCTGTGGATGCCCGCTCATGGAGTAGTCGCCT
-GGTGGAGGGCAAGGGTTTTGAGTTCCCATTCCACtacttactttctgagcctcggattcc
-ccctctgtaaaaagtggaaagaataatagaacccacttcagatggctctgaggaggatga
-atttaagtttttaatgtgaaatgcttggcacagttcctggctcagagttagtgcttagga
-aatgtttgttGAATGAAGAAATGAAAGAGATataatcatcttaaaaattgtattgagtac
-ttattatgaagcctttctcatgtattcacgtattttaacttcacagtgacaccaagaggg
-gtacttttattatccccctttaaagacaagaaaactgggccgggtgcggtggctcacgcc
-tgtaatcccagcactttgggaggccaaggcaggcgatcacgaggtcagattgagaccagt
-ctggctaacacggtgaaaccccgtctctaccaaaaaatagaaaaaattagccgggcgtgg
-tggtgggcacctgtagtcccagctactcgggaggctgaggcaggagaatggcatgaaccc
-gggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgggcgacaga
-gcgagattccgtctcaaaaaaaaaaaaaaaaaaaaaaagaagatgagaaaactgaggcac
-agggagagatacaggatcttgcctaaaggctcatagctggcgtcactggcggcgacggga
-ttcgtgatcttctgtctgctcttacccacctcacttccctgcctcccactCTAGGAGAGA
-GGTGCCACCATAAACCCCAttccagctgtccattgcatgaaacaacctcctcaacctcag
-aggcataaacaaacaaccattttatcatgttcctgggttctgtggatcaggagttcaggc
-aggataaggtggacagcttctctctgctgggccttcgatgggaggactctgtggctggga
-gggttctgcagtggggggtaaggaggggcagcgggtaaaacagcaaggactagaagaccc
-acttgcgagaaggcttcttcagctacaagtctggCTGGAGGATCCATTCCACCTTGTGGA
-TGGTAGGTTGGCTATGGCTATGGGTGAGGGTGGGAGTCATGGGGGGCTGAGTGGGAGCCA
-TCAGACCCCAGGGCTGAGTCCACATGTTCCAGGATCTGACAGCTTAGGAGGCTTAGCAAT
-TCCAGGGCTGGCGCCCCCATGAATAGCTTctccaggattttgcaagtgctgtttcctccc
-cctccccacccatctcattaacacctcgcactctttaattctcagcttggctatctggtc
-ctggaggaggagctccctaacccctgtatgccttagacaggatatgctagatcctgtcct
-catggaaggtcttatcacattgttggaattgactgtctgcagactgaacgcttggaggac
-aaggcagggtctttatcaccagcacccaggacagtaccaggcacacagtaggcactttat
-gcatattcacggaatgaatgaatGGGTGAGACTGATGGATTTTGAATGACTTGAACTTGA
-GCCTCAGTTTTTCCTCCTAGAAGTTAGCTGGCAACGTAGCTGTGAAGGTGGCAGGAGATA
-GGTGGGAAATGCGAGGTTAGTAAGAGGAATTGGTAGAAAAATGGTAGTTATGATTTATGC
-TGAAGAGAGAAAAGCAAAGGaaattagatattgcacctgaaatgcttagctatgtttggt
-gcagaataggtgctccataaatATAAGATGACGTCATCATCCTCATCCTCATCATTACTA
-TTATTTGTATTATAAGAATGCACATTTCCTGAGTTAGAAGGTCCACATACGATGGCTTGA
-AATTTTCCTCTGggctgggtgcggtcgctcacacctgtcatcccagtactttgggagact
-gaggcaggaggatcgcttgagcccaggagttcaagaccagtctgggcaacatagcaagac
-tctttctctacagataattttaaacatagctgggtattgtggtgtgcatctgtagtccca
-gttacttgggaggctgaggtgggaggatcaactgatccctgcaggtcgaggctgcagtga
-gccgggatcatgtcaccgacctccagtctgggcgatagagctattacccatcttaaaaaa
-caaacaaacaaagacagaaaaaaGAAATTTTCTTCCAAGCGAAAATGGAGAGGTGTAATC
-CCCATAGGTCACCTGGGCCAGATGTCTGGGCAGGAGGTCATGCTCTGAGTCAGATTTCCC
-TTCTGTGCAAGGAAGGACCTGGGACAGGGACCTCTGAGTCTGACACTCTCTGCACAGCTG
-AGAAGGCCATTCAGCTGAAGTCCCCATTGCAACTGTTGTCCTTCAGCCTGAGGCAGTCAG
-TCCTTCGGTCTGAGGCAGCCTGTCCCTTGCCCTCGGCTACCCTCCACCCTGCTCCAGTCC
-TGCTAGGAGAGAACCGCAACACGACCCCGTTTCAGAAATGCGCTCCTTGACAAGCCTGGC
-TGCGACCTGTTCCTGGTTGACTGCCGTCATCCGGTGGCAGCATGTGGGAATGACATGCAG
-GGCTGTGGTGAGGATGAGGATGGAGTGAGCGGGTGGGGGGAACTGCAGAGAGGGCCCTAG
-TGTGGCCCAGTTGGAAGCGGTGACAGGAAGAACCCACCAGGGATTCCTCAGCTCTGGCCA
-AGGGGTTGTTCTCTCCCTCTGGCATAGCATCCAGAAGGCCAATAGCAGCGGAACCTCCCC
-CTGGGCTCTGCCCAGACTGCCTCTCTTTGGCTGTGTGACCTCACCCTGTTTCTGAGCTTC
-TCTGTGAACTTCTCCAAGCTTGGCTTGTAAGAAGGGAGTGGGCGATGCCCACCTGACAGC
-AGAGTCTCCTTCCCAGAGAGGCCCCTCAATCCTCCAGAGAATGTGGGAGAGGCTGGGATT
-TGAAAGGATTGGAGCTGGGGGCAGGGAACGTCTGAGATGGAAAGGTTATAGGAGGGGCTT
-AGGCCCTGAAGAAATTTCATCCTGTAATTTGAAAATATTAAAAAACCACCACAGCCCCCA
-GCTGAGGACAGAGGACCAGGCCCCCCAAGAAGAAAGAACATGGCCAGGGAATTGCAGTAC
-TGGAAACTTCTACCCTTATGTTGGTCTTTTAGAATTGTGAAAATTAGAACGTTCAGCATC
-CTAAAACTGGAATCTTAACAGAAAACACTATATAGtgtatgtatgtgtgtgtgtgtgtgt
-gtgtgtatatatatatatatttatatatatatttatttatataGGggctgggtacagtgg
-ctcatgcctgtaatcccagcactttgggaggctgaggtgggaggatcatttgaggccagg
-agttcaaaactagcctgggtaacatattgagacccccatctctacaaaaaataaaaaatt
-agctgggtgtggtggtgtacacctgtagtcccagctacttgggaggctgaggcaagagga
-ttgcttgaggccaggagtttgaggctgcagtgagttgtgatcgtaccactgcactccaac
-ctgggtgacagatcaagaccctgccaaaaaaaaaaaaaaattaaaaaGATacacacacat
-acacacacacatacaGACTAAACTCTGTAGAATCAGATCATTGAGCCTTGAGGTCAGAAT
-CAGAATTGCAGCTGCAAATCTAGACTCAGCCCTCTGAGCTGGAAGTCATCTGAGAGCCAC
-CTCTCCCCTCAGCTTGTCCTGGAAAGAATGTTTGCTCTCACTGCCTGCTCCTAAACTTGT
-TTGCAATGaatagatctgggggagggccccaaaacctgaatttctaaaaggctccccagg
-ggattctgttgtTGGGTCTTCCAGATTTCGGCAATAGATTTAATTTAGCCAGGCTTcctc
-ttcatcacattcatcacatgggaaaactgaggccccggaaggggaagtgacttgacctgg
-accccatcagatagctggtgacaggctggagctcccacctgtgcctcccaatgccaaggc
-cactctcaccagcagcccagggtgtttAGATGGCCCCGTGGGACTGTCAACCTCCTAGGT
-ACCCCTGGTCCCTGAGACATCTGGTTCGTGAAACTGCGAGGTTCTGGGGATCGAGGTGTC
-ACCCTCTTCTGCCTCTGGCTGAGTCTGCTTCTTGAGAGTAGCCTGGAGGGGCTGAGGGCC
-CCTCCTCTTTTATCAGCTCCCCCCAAGCTGAAACCCCACCCCAATCCCCAATACACTCTG
-ACCCCTCTCAGCCCCAAGCATTCCTGTGAAAACCACTCCACATGTTTTAAATTCTGCTAC
-TCCAAACTCAGCAGTATCATGGTTTTGCAACACCCTCTTGATGCTCAAGAAGCATTTACA
-AGTTTCTTTTCCCTTTATTAAGAAAGTTTTAAAAAAAAGTTAGGGTCTTGAAACAATAAC
-AACGGAGCATTTCAGAGGCACAAACGTTTGCAGAAGAGAAGCTGGTGGCCTGGCCAGGCG
-GAGGAGGGGGCTCTAGCTGTTCTCGGGGAGGTGAGAGCAGGGAAGTCAGAGAGAGGGTGG
-GCCTGCTGGGAGGGGGGGGTTCAGGCCAGGGCTCCCCAGCTGCCAGGTGGAGGGCAGGTC
-TGAGGGTGGGTGCTCTCTTGGGGTCGGGAATGTAATATTTCATCACCTAGAGCCTCTCCC
-CCAGCCTGCTGACCATCTTCCTTCCCCAGGCCACCCCTGGGCCCCTTGGAGCTCCGACTC
-TTGCTTCTCCTGCCCATTCCTGTCCCAGTCACGGAGCCCTACGTGTTCAGGCCAACCAGT
-CACGGCAAATACAAATCCCGTTTCTGAGGATTCCGGGGAGCAGAGCAGGAAGGGGGTGTT
-ATGATGGCAGAAGGATAGGCAGTGAGGACAGACTTGCTTCCAAGCTGGGTCTGACCTGGA
-GACTCCTCCCAGCGTCGTTCCTGCCTAGGGCGAGGGGCGTCACAGCGAAGCACAGATGCT
-CAAGTCACtggtggtgggtgtgggcgagtgtggtggtgggtgtgggggagtgtggtggtg
-ggtgtggggcagtgtggtggtgggtgtgggcgagtgcggtgatgggtgtgggcaagtgtg
-ggggtgggtgtcagcgtgtgggggtgggtgtcagcgagtgtggtggtgggtgtggACGAG
-TGCACGGATCTTCCCTTGCTCCCCACCCACAATTCCCTACATTTCCCCCCTCAAGTGACC
-CCCAAATTCTCCTCTCCACCGTGAATGTGCTGAGCAGAGCCATCAGGCAGAAGCAGAGCC
-TGAAGGCTTCctgtgtgaccctgggcaagccccttccttctcagacctgtttccccaCAT
-GGGCAGGAAGCGCTGAGGTGGGGAACAGAGCTGCTGGATAATCTCAGCTTTCCTTTCCGT
-TTCAGTGGCCTCTTCTGGGCTGGGCAGGTGGATCCCCCAGCAGTGACAGCTCACCTGATC
-CGGCTTGGGAAAAAGGGGCATGGAACCCATGAGAGGGAGGCCTGTGGGGGAGTGCCGATG
-AGGGTGGCAGGCAGCTTGCAGAGGATGCCCTCCAGGGCTGGCTGCCCACCCAGAGGCCAG
-GTTGTGACCCTCCACGGCCAGCTGGGGGAGGTGTCCAAGCCAGGCCTCTGGAAGCCCTGG
-AGCCTTGTCCAGCCAGCTCCTCGGGGTGGCTGGTGGCTGAAGGCTGTGGAAATGGCCTCT
-GGGGACTGTCCAGAGAACCAGGTGCTCACAGCTCAGGGTCCTGGAGCCTCCCCCAGAGCA
-GAAGCAGGGCCTTCAGGATTCACCTGTGCTGTGTCCCAGCTTTGCCCTCTGGAAACCCTT
-TCTCTGCAAAGATGGGGTCAGGGAAAGGCCTGGGAAAAGATGTTTGCTTTCTTTAAGTTG
-TAGATAGAGAAAGCTGCAGGGGAGGGCACAGGCTCATGGTCCCTCTTAAAGTGTGTGTga
-gagggagacaagaggagggagagagagaaggatgcggtgaaggacaggaagaaacacagg
-aagaaagaaaaggaaagataaaagataagtgagaaagaagaggaaggaagggaaggaggg
-agggagaaaggAGAGGAGAATGGAGGTggaagaaataaaggaaataaaaaagaaaaagaa
-agggaaggtagactgacagaaaaatgatagaagggtggaaagaaagagaggaCAAATGGA
-GAAGACAgaggagaaagagtaagaggagaggaggagaaggagcaggaggaggTGTGCAGG
-GGCCGAGGACTAGGACCAGAGAGTCGGGAGAGCCGGCGGTCAGGGCTGCAGGCCGGGCTG
-GCGCGGCCTCACGTCCAGCCTGCGGTCCAGCTTCCTGTCCTTGCGTGGGCGCCGGTCCTT
-CCTGCCCTTCTTCTGGCCGGGGCTCCTCTCTGCAATGAGAGGACAGAGCCCGGTGACCAA
-GGCTGCAGGGCCAGTTAGGTCCTGGGAGCCTCCTCAGTCCTGAAAGACAAGGGTGCCCCA
-CCCACTCCCCAACAACGGGGCTCAGAACATTTGGGCACTGACCTTGCAGTCCCTCCTGTT
-GAGAGTTTGGACCGTGGGCTAAGGTACCCCAAACTGAACCTTTCTCTCTAGGTCTTCAGG
-GAGTGGCGAGGGCCACTAACTTGTTCAGGGCCTTCTTGTGCTGGACATCTGGCTCGGCCA
-GGCCTGCAGGTTCACCTGGGGCCCCCCAATCAGCATGTCGGGTGGCCTCATGGGAGTCCC
-CATGGCTTTCCCCGGCACACTCCTTCCATAGCTGAGCAGGCTCTGTGCTGGACGCTGGAC
-ACCTTTCATCTGTGTCCCTGCACCAACTTCTGCATAACACTGTGGCaacaatacttcagc
-atttagcaagcgctcactgtatgcaggccacagccccaagtgctttatgtatacgaaact
-cacaacagccgagagaggcaggtaGGGTCTGAGCCACACCCAGTCCCGTCTTCTCCAATT
-GTCCTCTCTTTCTCTCCACCCTTCTATCATTTTTCTGTGCCAGGCTACCTTTCCTTTCTT
-TTTCTTCTTTATTTCCTTTATTCCTTCCACCTCCACTCTGGCTGTGCCCGCTGCCCAGGG
-AGTTCTTCTGAGCAGTTGCCTGTCATTGTTATGGACAGGTGAGAAGACCACAGCATGGTT
-GGGAGCAAGGCCAGCCCTAAGTTTCTGCTTTACAAAGTGTCTCCACACCCAGGACATTCT
-CCTACATTGCTTGGGCCCCATTCAGTTCCCCGCAAGGAGCTGTGTGTCCATTTGAACACG
-ATGAACCTGAGGCTCCATGAGTCACTTTCTGAAGGTGCGCAGCGAGGCTGTTAGAGACCC
-TCTGAGCCTAGTGGCAAGGGGAGGGCAGTTTTATTCCTTGGGTGTCAACTATGTGCCCGT
-CTCCCCAAGAGTCAGGGCTGTGGCTCCAGTCCTGGCTCCTTCCTCTGCAGAGCAGAGTCA
-AGGAGCTAAGACCAGGCTACCCACCTCTGGGGCTCCCCACGCCCACTCTGAGCTCTTGGG
-GAGCACTGAGGCCAACTCCCACTCTGAGCTGCAGAGCTGACTGTGCAGGCCTCAGGTAGG
-ACAGCATCTGGAGATGGGGTGTGGGTGCTGCCTGAGTGGCCCTGCCGGCTCTGATGTGGG
-GGTGTGGGGGCCAGTGGCTTTGTGTCCCTACCCCTTCCCTAGGCCTGCCTGCCAGCTGCT
-CATGTacccatccagtcacccacccatccctccacctatttacccacctacacactcacc
-cacctattcacccatctactcacccacctCCATACCCAATGacccatccatccacctagg
-cacccacccatcacctatccatccacctgttcacctatctacctacctacccacccacct
-aatcatccacctacctactcatccacccacctaccctcccatctaccctcctatccaccc
-atctacctacccactcacccaccTGTGCATTCAGCCATCCatccactcatccaacaaata
-ttaactggataccgactatgtgccagactgtgttagaggcactagagagacagctgtgaa
-caaggcagataaagcccttgccgtcactggagatcacactccagtaaggaaaacagacgc
-tgaacaagcaaacacgagaatgagaaggctcatttcagaagggtgcaagtgctaccatgt
-gatatgatggaaaatgactccggggagggggactcctgggaagcctctctgaggaggagc
-cactgcagccaagacctgggtgatgcagggagctacagcggggttgttgcgaggattaga
-gtcatgtttcacagcactaagcacagccagcacatggtagatgctttatgaatgtttgca
-gttattgtGATTATTATTATCCAGGGGAAAAGCTTTCCCCTCATGATTCCCCAACAGCCA
-TTCACCCCCAGCTCTTGGAGCCATGAGAGGTGCCATGTGGTAATGAGTGCAGAAGAACTG
-TCTGCCTCCTGTGTGAGTCCTGCTCTGGCTCTGGGGTCTCTTAGGTTCTCTGGTTCCACC
-TCAACCTCACTCTGTCCTCACCTGCCCAACATGACTCCCAAAGGCTCCTATCTCTGCTAG
-CTGCACTCCCAACCCAAATAGCACAAGTCCTTCTGAAAGAGGAGTGTCcctgagttcaaa
-tcctggctccactatgtcccagctgggtgccccgggtggcctggttccaggtccctcatc
-cttcatcatgactttagattcctctttgcaTGACGAGTTACgtttgaattctaggtctac
-agctccctggctttgtgacccttaggtgagtgactcaacctttctgggcctcagtcccct
-catctgtaaaatggggatagtgctaataacacctaccgcatagcatcactgcgaagatta
-catgagttaacgattatagagaattcggcacagtgcccagTCAACACTGCCAATACTACT
-CACCGTTCACATCTTACCAAGCACACCCTGTGGCCTCTCTTCTATGTAAATCAGTGGTCC
-TTCATAgcccccagaaacattttggaaatacgtgtagtggtcttgaatggcacagtgaag
-ggggttcctgtggcattcagtggacggcaatcgggatccagcgtgggacagtcccccgca
-aagacgagctgtccccctgttccatccagttctctcacatcgtgccccaccctcacgtag
-ctgaaaagtctgcttgctgggagctgaattctgtttgactcatgaataccaattggtttc
-gaacacttccattcactgaagattctagggcactgtgagtgtggtgtcaatcagagatca
-attgggttggaccttactaatcattggtcactgttgggaaatcgcatctctgatggcgat
-gTGGCCACGTACTTGGGGCGCTGACCACGGCCGCGGTCCTCACTGGGATTGTACTTCCCT
-AAGTGTCTGTTGGTATGTTGGGCCAAGCGCTTCCATCAAGAAAtttcttttctttctcct
-ctatattacagttaggacactatactgataaaaaaaaattacctttgcaagtaggccaca
-ttctccatgaacttcattaagaatgataaagagggtattcccaaatccttcttattaaaa
-ggggggtgttcagtttgagagggttgggaactcctgGCCAGCTCAATTTTCCTAATGTAT
-TTGGGACTGAACCCAGCAAGGAAGGCCCTCCTTTGAAAGGACACCAGGGAAGGTGATGTG
-TACTCCACATGATAGTATGGCTAATGGTGGCCTTTCAGGCAGTCTCATAGATACTATTTG
-TGGGGCAGTGATCTGAGTCCGCCCTGTCCCTGTGGGCCTTTCCCACCGCAGCCTCGTGTG
-CCTGTCCTGGGGCTCACCTCCTGGGCAGGGCCTCTGGATGGGACATTTCCTTGACTCAGA
-AAGCACCTGGCAGGTGGCTGCCTCCTCATGCCCAGCCCGGCCAGCCTCTCGTACCCGGCT
-CTCCAGGCCCCAAGCCGAGCCGCAGGTCTTTCCATTGTGTGTGCAGGGGCTCCAGCCGCC
-CCAGGGACCCAGTTCACACTCCCCTGTGGGGTGAAAGGAGagacagacagacagacagac
-agGGTCAGCCGGCAGTGAGGGTCCTTCAGATCCAAGGGCAGGGTTTGAGGGGTTCAGTCC
-TCTGAAGACTGAAGACACCACTTCCACCTGCTAGGAGCAGAGTTATTTATAAGAGCCTGG
-AATGAGAGCGAAACGAATGCATGCACAGACTAATATGGGCCTGAAGCCAGAGCGGCCGAC
-TGTCTAGCTTTAAaggaaaggcttcctggaggaggtgatgtatgagttaaagggagagag
-gggagctcgtcaggtgagaagaaggaagcccattccaggcaggtgtgcaaagccttggga
-gcccggcccaccatgtttgggagatggggcagcctgagttgggagtcaagtctcaggaag
-gcggggacaggagaggaggctggaaggttgcctgggaaGCCCTCAGGACCAGGACACAGG
-TTTTAAACTTGATCATGTGTCTTTGATCAACTTTGGAAGGAAGAAAAAGGAGGCCATGGA
-CATAAAAGTTCTTCATAGGGGGTAATAAAAatacatatatacatgtatatatatatatac
-acacacacacacatatatatatacacatatatatacacacacacacatatatatacacat
-atatatacacacacacacacatatatatatacacatatatacacacatacacacacacac
-acacacacacacacatatatatatatatataCTTTGATTATTTTAAAAGTCCATGAGAAG
-TAGGCACAGAATATGggtagctatgaatactcctattttgtagatttggacactgagacc
-tagagcagaggtttgctaagggaacgcagcaagaggctcacacagcagacacagcaagct
-caagacacagtgggacccagaccttgctAGatacacacatttgacaagtaaagactgagc
-acccagtgtatgccaggtgctattctgggtgctgagggagcagcagcagacaagacagcc
-cagggtctgcaggcctcctggaattcaccatctggacaccgccgtgatgagggaagtgca
-ggcaccgtgggagcccagaagcagcatgggttgggttgtaggggaggaaacccctggact
-gggtcttgaagtgggggtgggatggcggggaaggggagcctagccaggctcagggaggga
-cgggaggtgctccaagtgagggcataaccccagcagagtcccCAGGATGATTTGGCCTGG
-AACTGGGCAAGCCGGAGAATAAGCTCAAACTGAGGAGGAAAAAAATGATGGGGGTGGAAA
-GGCTGGCAGATGGGACAGATTGCCCAGGGCCTGGGTGGGCTCCGCCCAAGGGCAGTggga
-gccactgaagggtcctgggaggaaaagaaattgagcagactatcattgtgaaatactccc
-tctgctgttgagtggagactgggctggagggactgagaaccaaggcgggagacgggcagg
-agctgtggccagaaccctggcgataggcagggggtggcaagagggtgggaagagggcggC
-ACAGAGGACAGAAACAAATGGGTGGGGAGAAAGGGATGAGCTGAATGGTGTGGGTTTGGG
-AGCTTCGTGctgcttcattttcaccccaaagttcttcctaccacccaaaatattatgcat
-ttgttctcaggtgtcgcttctgtctctccactgaaatgtcatgtccttgagtgcagaggc
-tttgtctgttttgttctgtaatgtgtctccagcacctaggaaagtgcctggccatagcag
-atgctctagtagatattttcagagtgaataaatGAACAGATTGGATTGAATATAGGGTGA
-GGGAGAGAGAAGAGTCAACAGCGATGTCTGCATCTCGCGCATGCCACCCAGGGATCAGGG
-AGCTGGTTATTGAAACCCAGAGGAAACCCAGAGGGAGCGTTAGGTGGGGGATGGTGGCAG
-TGGGAGTGGAAAGAAGGCACCCAGAGGGCAGTGGAGGTGAGGATCAGCTGCTCAGGGAGG
-CTGGAGACACGGAGTCAGGGGCCATCAGCAGCTGGAATGACCATGAATGTGAGCCCGGAG
-GGAATGCGTGGGCAGAGAGGCACAGTGTAGATGAGAATGCCAAGGAGCAGCCTAGTGCAG
-GAACGGGAGGGCTCACAGGCAGGAGTGTGACAAGGAGCTGTTAGGAAATAATCAGAGCAG
-TAATAACACTGATactgacacgtactgagcatctactgtgtgctggctgctgtactgagc
-actttaaattgtactaattcactttatcctcataacaattcctccccatgaggtaggctc
-tatgttctattgtctttttttttttctaacgtttggagaaaccgaaggacagagagctga
-ggtggtttgcttaagatcactaaagggtaaggtttagagctaggattggaccccaggcct
-gtcctattccaaaatcagtgctcagccaggtgtggtggctcatacctatactcccaatgc
-tttgggaggctgaggtgggaagaccgcttgagcccaggggcagcctgggcaacatagcaa
-gagcctgtctttacaaaaacataaacgcatagccagctgttgtggtacatgcctgtggtc
-ccagttactcgggaggctgaggcgggaggattctctgagcctaggagtttgaggctgcag
-tgagctatgatcatgccactgcactccagctgggcaacagagtgagaccctatctcaaac
-aaaacaagcaaacaagcaaacaaacaaacaaataaacaTCAGCGCTCTTCTTCTGCACTC
-TGCTGATTCCCTTGGCATTAATAACAATGCCAGTGTTGGTTGTAGTAGTAATCATAGTAA
-TGGCGGTTATGTTGGCTCTAGTGTTTTGCAGTTACTATGTGGAGGTACCCAGTGTACCTG
-ACATGGTGGTGCTGGGCCTTCCCTCACCATATGGCATTCTACTGTAATTTCTTCCAGGGC
-CCCTAACATCTCTCACCAAGCCCCCGCTCCAGGGAGAGGGGAGGGGCAGGGGCAGGGCGG
-GGAGGTCCCCACTCACCCTGGCACTCCCGTGTGTTCTGGTGGGCCAAAGTGCCCGGCGGG
-CAGGTGGGCAGACACTTCCCCTTGTACAAGTAAAACTGCCTCTTGCACCGGATGCAGAAG
-TCCTGGCTGAAGCAGCTCTCACAAGTGGCCCCACATTCTGTAATAGAGCCAGGGACACCC
-CAGGTGAGGGAGACTGCCAAGGATGGGGCCCACTGGGTCTGCCCGAGGTGGAAGGCCCTC
-TGGGTAGCTCCAGGCTTGGTAGCATTTGGGTCAGGACTCAGTGTCTCCTTTGAAGCCCAG
-ACTTGGCCAAGGTCAAACTGGGCTGCATGTGAAGAGAACActccctttctcatttgaggg
-gaggctcagagagagcgagtgacttgcttgaagtcacccgcaaaccagggctggagtgag
-gactccctgcttcttttTCACCTCAGAAATAGTGATAATTTGCCCAAAGTTACAGCAAAA
-ATTAGAGCTTGGAATTAGGACTCCTTTTCCTATTTGagctaagaccagagaaggtgagtt
-acatgcctaaggccacaccacaaactagggtagaAGTGAAAGTTGCCTGTTCTATTAGTG
-CTAATTAAGGCTGAGAGCGGACTGACTTGCCTCGGGCTGCGGAGTCAGCCTGGACACAGG
-CAGGTATCTCAGAGTCTGGGCTTAGACATGCACCTACTTCCCCTCTGTCTGTGCTGGGGT
-GAAAGGGTGGGATCTAAGCCCATGGTGTCTAGGAGCCCAGCACTAGCATAGAACAAGGGA
-GAAGCCACGTACTTTTGCACCTGTTGACCTCCTGGCCGCGGATGCCGAAGTACCCAGGGG
-GACAGTCGTGCAGGCACTTGCCGTACTGGCGGATGCCTTCCCGGCGGATGAACAGGAAGA
-GCCTCTGCTGGCAGGTGGAACAGCCGTTCTCCTCTGAGCAGATGATACAGCCTGTGCAGT
-TGCCCCCCAGGCCAGTGCCCACTGCCCACAAGACCAGGGCAGAAGGAGGGGGAAAGGGAG
-AGAGAGATGGTCAAACCATATATGCGAGCAGCTGAGATGGTCTCATTGGGATAGtaactg
-ggcacatggccacccaaacaaaagactacatttcccaccttcccttacaactagatatgg
-tcatgtgaccaacatctggccaatcagatgtaaggtaaagcagcatgtgacacttcaaga
-aagctgccttaaagggcaggggtgtgccccttgtcgtcccctcatcctttctgttgggtg
-gaatgtgaacgatggctggagcacaagcagccatttcagatcatgaggtggaaactatgt
-cccgtgaggcggtggaaaaatcagataaaaagcacctgggtgcctgaggaaggcagaact
-gctgtaccagctctagcctgcctgtgtagactgttacatgagagagaaatcaacatctat
-cttgcttaaatcactgttatttgaagttttccatcactcacaagcaaacttaatctttac
-CAAAGTAATGTGAATTTTTGAGTGTGTGTGGGTGCACATGATGAGTGGGGTGGGGTGAGA
-CCCTCACCCTCCTGCTGGGTTCCTGAACAATACTCAGCAATACTCCATTTCTCACTGTCA
-CCATCAGCAAGGGCTCCCACCATCATCAGGAATAGCAATGGGAGAAATTTTTTTAAGGAG
-AAAATTTTTTGTTACCCCAGAATTGGCACCCAGGAGCCAAAGCTGGGGAAAAAAGAGGTG
-GAAAATGCTCTAGAATCTTAAGTGAGCCTCTCCCAGGCTCATAAGGAGTCTCTGTTACCC
-TGACCATCACCCCAGGACCCTGATTAAGCTGAACACTTGCAGGGAGGGACTCATGGGAGT
-TAGGGATTGTCAGCCTggccaggcacagtggctcatgcctgtcatcccagcattttggga
-ggccaagatgggagaattgcttgagtccaggagtttgagaccagcctggacaatatggcg
-aggccctgtctctacaaaaaatacaaaaattagccgggtatggtggcacacacctgtagt
-cccagctacttgggaggctaaggtgggaggatcgcctgagcggggaaggctgcagtgagc
-tgtgtttgtgccactgtactccagtcggagagacagagtgaagccatgtttccaataaag
-aagaaaataaaaagaaGTGGACAGCCTAGGGAAGTGAGTTGTGGTGCTGTGACTTTTCCT
-CTGTTCCCAACCCTGCCAACGAAGTGAGGAGATGCCAGAGAAACTCACAAAGACAGGGGG
-TGCCTGCAAGAAGGTGCCAGCATCTCATGCCCTGCTTGGACATAAACTCATGTCCATAGC
-CCTGCGAATCTGCCCCCTTCCCATTCCTCTTTGAACAGAGAAAGGAGACCAGGAGACAGA
-AGGGCAGAGCTGAGGGGAAGAGTGTGATAGAAGAGCCTGCACATCCTTCCCGGCACGTGT
-GAGGGAGTTCTCAGTGGTAAGGGGCACCTTGGGAGCAGCCAGGCTTAGGTGGTATTCCTG
-CTGCCTGGCACAAGAAGGCTGGTTGCTGGGAGGTGCCCCAGCAGTAAGAGGCAGCAGGGG
-AGACCACTGGGAGTAGGAGGTGGGGGAGAGTCAGAAAATGACCAGGTGTCACTAAGTGAC
-AGGAAAGGATAGGGCAGCTTTTGAGAGGCAGCAATTGGGGAAACAGTAAATGGTTTCATG
-TTTATATGTCATTAGGGTCAGACTGGTTAATAATCCGGTTATACACCTTGATTCACCTGA
-GCCCCAAGACCACCCGGCAGGAAACATTCTTGGCTCTCCAGCTCTCAGATGCTCCCCTCT
-TCCTATTGGTGCCCCATCTCCCTTTTAGAGGAATTCCCCATTGTGCAAGGTCCTGATGAA
-ACACATCCTGGCACCTTCCCCCTGGAACAGAAACCAAAAGAGTTCTGGCCCTCCTTTAAG
-TTGGCAGCAGGTGAGAGCTAACGAAAGCCCGGTCAGATACACATTCTGGTGACTCCAGTC
-CTGGGAGTGGGACACAAGAGTGAGGGTCACACAGAAATGGGGTTCATGGTGGAGGCAGGG
-CAGGCTCTCTGCCCAGCCCTGGCTGAGGcctttctctctcccttccatccctcagtccct
-ctgttccttcctccctGCTCCAGCTCTCGGATGAGTACTGCTACTTCCCCAGTCCTCACC
-TTCTGTTCCTTAGATTCGGTGAGGCCCCACATCCTGCTGATAACCCTCTTTCTGTTGCTT
-ATAACTCAGGAGGCTTACTGATCCAGGGTCGTACGGAAGCACACAGTAACTAAAGTGTAC
-CCTGGGATGCTGTTCCCAAGCAAAGTTGGCATTGCCCTCAATTTTCTTGCCCTGGGATAA
-GAAACTGCAACAGGAGAGCAGAATAAAGATTTTTGTGCCTCTGGAGCTGTATACCTGGCA
-GGGATCTGAGGGCAGAGAGCAAGTGTGATGTTGTAAGGGAGATTCCCAGAGCCAGAGAAA
-TAAGAACATCCACTGAGAATTTAGCAGAGTCCGGACTTCTCACTCAgcaaaagattcaga
-ttctgatactacccagagctggcaagaatgagaggaaaccttcgctttttcaccttagat
-aggagtgtaaacttcggggaaaaatctagcagtacctaataaatttggagatGTCTCTTT
-TCTTTTTGTGTTAAAAAGtttttttgtttgttttgttttgttaagacaggatcttgctct
-gtcacccaggctccagtgcagtggcatgatcctaagctcactgcagcctcaaattcctgg
-gctcaagcaatcctcctgcctcagcctcctaagtagctgggactacaggcatgtcccacc
-acaccaagataattttttaaaaacttttgtacagatggtctctctctgtttcccaggctg
-gtcttgaactctggcctcaagtgatcttcctgcctcagggtcccaaagtgttgggattat
-aggcatgagccaccacgactggccTGATGTCTCTTCTAAATGTAACAATTTAGCTTCTGG
-TATATACCCTAGAGcggcagttctcaaactctggcgcacaacagcagctcctagagagct
-tgttagaatataggtccctgggttccacccctggtacgtctgattcagtaggtctgagaa
-tttgtatttctaacaggttcccaggtgatgctgatgctgctggtccagggaccatgctct
-cagaaacactgAcctagagaaacccttgtatatgtgtagaaagagacaaagatatttatt
-gcagcattatttaatagcaaacaactgcaaaaagctaaccctctgccaaaggaatagata
-aatacattgtggtatattcatacaccacagccagataccacatacacaacccagccatga
-taaatgactgaggtagctacagttatcattgtgggcacagctcaaagacggggctgagag
-gaaaaaagcaaggtgcacgatgaatcatatagtaagagccatttatataaagttcaagga
-cctgcaaagcaatattttgtAGCATTTGTGACTTGTAAATATGCATTCAGAGCAGAAGAC
-ATGGGACTAACCAACACTGAATTCAGGATCATGGCACACAAATGtttattatattatttt
-aaattCTTGACTGTAGGTTTGAAATAGTTCACCCTAAAAATGCATAAAGAACAAAAGAAT
-TTAGCCTCTACTGTGTCCTGGGGCAGGAGGAGGCCTACATTCTTTCTTCTCCTTCTCCAC
-TAGCTCCCCTCCCAAGCCCTGTCCCATCCTCAAGCTGAGGTCTTGAGCAGGGGAAGGTGA
-CAAATTCTGAAGACGTGGGACCCGGGTTCCAAGAGCAGTGGAGACTCGTGCCTCTGCACA
-CTttgcccctcgtccactctcccctcatcctcagtagtggaatcctgatttttattttat
-tttttgaggcaaggtcttgctctgccccccaggctgaagtgcagtggcacgaccttggct
-cactgcagcctagacttcccgggctcaagcaatcctccctcctcagcctccctagtagct
-aggactacaggcgtgcaccaccatgcccagctaatctgtgtatttttttgtagagaaatg
-gtttcaccatgtttcccaggccggtctaaaactcctgggctcaagcaatcctcctgtctc
-agactcccaaagtgctgggattacaggcctgagccacagcgcccggctggaaccctgata
-ttaagcggagtttatgtcctctaagactatatttcccaggccctttgcagctatatgtgg
-tcatgtgcttatgccctgaccaatgggatatgagcgggcatgccctgtacagcCCCTTAG
-GAAACGCTGGCACTGTTCTCCTCCCATTTTCCCTTATGCCTGCAGGAGTGCAGGCTTAAG
-AGTGGAGCCATGGCAGATCCAGGAGGCAGAGGGATCTTATAGAAAgacagcttggcgtgg
-ctgtattaacccagggctgcccaccgccgagattctttcctggggaagggaggaaagcat
-tgcccatcttgtttaggtcactgGGCCTTTCTGACGCACACATTGACTGATGATGTCGGG
-TTTTCCGCCATGCAAGGCAGCACAGAGTCATATCAGTGGAGACCAAGTTGCCCTGCGCTG
-TGCCTTGGCGCTGTGTAAGCCCACTGGGCCTGAGAGGCGACCCCACTACCAAAGAGCAAG
-GGGACCCTCAGTTGACTTGTGGTGATCTTTATCACCTGGCAGAATAGGACTTCAAATTAC
-AAATTAATTTAAATTACAGAAAAACAAAGTAGCATTTCCTGAAaaacgaatctgtggaca
-cagactcacaccctgacatggcgttgctgcccattttgcagctgagaaaaaccgagaatc
-aaggaggtgaaacgacatgtccagggtcacacagaattggcaggggtggacccacatcac
-tctgccccacgctgccctctTAGAGCATCTGTCCAGGGCCTCCTGTGTCAGGCAGAGCCT
-GGGGCCATGGGGGTGAGCCACGCATGGCCCCTACCCCTATAGGACAAACAGCCTGGTGGG
-AGGAATTGAAGCCCACAGAAGTGACAGCAAAGCAGGATGAGATAAGGGGTCAAGATGGAG
-ACAAAGCAAAGCTCTTACCACTCTtagaagagcttagaggtcactcagcacaactcctgc
-agtttcactggggacactgaggccagaaggggtggagctttccccaaagtcaggcagcca
-actGCAAAGAAGCCTCAGTCCTCAGTTAGAGTTATAGCACTAtttgttttttgtttgttt
-tattgtttgtttgtttgtttgtttgtttgtttttgagatggagcctcactctgttgccca
-gactggagtgtagtggtgcgatctcagctcactgcaaactccgtctcccaggttcaaacg
-attctcgtgcctcagtctcccgagcagctgggattacaggcacccccaccaagcctagct
-aaatttttttgtatttttagtagagacggggtttcgccatgttggccaggctggtctcga
-cctcctgacctcaAAAAGCTACAGTATATGCTGAAGGCCAAAGAACCCAACAAGCCCCTC
-CCAGGCCTCATAGAGTGCTGGCCCACTGGATGGTGCTTAGCATCCTTCAATACCCTGGTC
-TTTGAAGGTCAATACCCTGGTCTTTGAAGGGTAGTGGCTGTTTCTGGCCTCATCCTCGAC
-CCTGGCAGTTGGCTAGGATGCCCTCTTGTGCCTCTATGTTGTAATGGCACCTCTTGCTTT
-TTGACTTCCGGTAGCCTGTCTGGTGTTTCGTCATGTCTCTGTAACTCATTAGAAAAAGCA
-GTGCTACTGCCTCTCTCTACCCCCTGCCCTAAAGTCACGGGTGCAGGCGCTTGAATGTTC
-ATTCTGTGAATCATCAGTGATGACAAGAGTCTGTAGAGTGCTGCTCTAGAAAGATCCAAA
-CTTGAAGGTTCTTAAACTTGACTGTGATAACAATCTCCAGAGAGGCTTGTAAAGCGTCTG
-CTGTGGGCCAGGAATGTGCACTTTAACAAGTCCAAAATAAATGTAACAGAATTTTGGAAG
-TGTCTTCCCTGTTCACAGTTTCCTTTCCCTGAGAACTGGCCCCAGTAATCCTGTTTGTAG
-GGCATGACTCTGACCCTAACCAATGGCTGTCTCTTCCAGGATGGGCCAATTAGACCATCT
-CTCTCTGGGCTGATGGACAATGGTCTGCGCTGGCCTTGACCTAAGGCGATCTGCAGGTGG
-GAGGGTAGCCTGTTCCAATGCACATGTGTGAGAAGCCTTGGTGGGCACTAGCTAACAGAG
-GCTCTGCTCCTCTGcactctctggcattgaggttcgtgtgctgccatatccacccagatg
-cacttaacctgggcttggccaatcagagcatcaggtccccttgactacagtggttgtagg
-ttcagacacaggctcacatccccacaagagctagtcttggggtttttgctgaggtcaatg
-gatgtgtgtggagatgtgtgtgttttcctttcctctctttggatctaggaggatatagat
-cagagctggtgggtgccacatgagggaagagcctctggagaatggaggccatacagcaga
-aacagagccaagagacacagacaaagaccaaaaagagtcatctgtgcatgtggatccacc
-ctggggatccataaattctctttttttctcaggtcacattgagttaggttttctgtcact
-tgcaaccagatgattcccgactaatacaGAAGTAGAGAGAGAAAAATAAATCAGATGCAG
-AGAGAGAAGCAGCAACCAGAACCTCACGGGCTCCTTGAGACAGAAAAAATTTCTGACTGC
-CTCCCAGTCCTTCCCAAAGCTTGGCTTGTCCCATAGCTCCAAATCCAGTGACTTTTTCAC
-TTGAGCTGGTTTTCTTCTGTCAAATTACAATAAAAATGGATGTAGCTCACTAGACAGCGA
-ACAGATCACGGTGGAGCAGCGCTGCTTTGGCGCGGATGAGGAACCTGGAGCACCACCTAT
-CCAACCTGATCACCCTGGTGCTCCAGGGGACACTGAGGTTCCAGGGAGCACACTTTGAAA
-CCCCCTGGGTCCTTCTACACATCTTGGCCTCTGTCGCTGTCCTCTCCCAGCTGAGATGCA
-CATTTTAAAAGCATTCAAGCTCTAGTTGCAACCTCCCCAAGTTTTCTTGGGCCATCACAG
-TGGATGGCAGGCACCCCATGTAACTTCCATTAACAACTGTCTCCCATAATCAAGACCATC
-CTCCCTCAGTCAAAACACCAGTAGGCCACAAAAGCATGGCCCTGTGTTGCTCCAGCAGCT
-GGAGAGGCTTAGAATGAAATCTGAGTCACTCCATGTTTCCCCAAGCACCCGAGGGATGAG
-TCCAGATTTGGATGTCCATTTTATGGAGAATGAGAGTGGAATCAAACACACCAGATTTGA
-CAGTTTGCAAAGTGATAAAGGCTTATGACAACTCTGAATGCGTGCATTAACCCAGGGTTG
-AGTGATCCATTCATTCATTCATCGACCcattcattcaacaattactgagcccctattctg
-ggtaaggtccagtgctaggACTCAATGGTTATGAGCTTTGGGGCagttgtgtgaccttgg
-gcaaggtactttacctctacaagcctcagtttttccagctgtaaatggggataataatgc
-ttatcttgcagggctgttgtgattaaaggagatggtacgtgaaaaactgttagctcagac
-cacctgcagcaggcatctgataaactgaagctaccattattATATTGAGAATGATGTGTT
-TTCTGCCCTCAAGGGACTTAAAAATCTAAAGACGTGTAACAATGCAGGTTcccaggttga
-tatcctggccccatcactcattgaatgagatccctcgtctctgtgggcctcagtttcccc
-atctgaaaaattgtggcagcaattcctacctccacgtgatttgttatgagggatgtgcaa
-accagcaagcactggcacacagtaggtgctcCTCTGTAAACCTAGGTTCCCTCCCTGTTC
-CCTCACCATCATGACACACAGTGGGACTGTCAACCAACATCTGGACCCTTGTCCTCTTTC
-CCAGGTGAGCAAACAAAAGCCAGAGATGTTGGTGAGGCTGGAAGGAGGCCAGCAGGGTCC
-AGGGACATGGTCTTTTGCCCTCTGGATGGTGAAGTGCTCAGGGCAGAGATACTAGCCAGC
-AGCTTTGGTCCTAGGTGAAGGGCAGGCTTATTCCTTCTTTTGGGAATAGGGAATAACCTG
-TGCCCTTCAAATAAGGGTCCCTAAGCTCAGGTTCACCCACATCCTGAGAACTGCCCCAAG
-CACCTTGTTTCAACAGGAGTCAACGGCTCAACATGTGCAAGTGATCGCTGTATTTTTTTT
-TTCCATTTCAGGGTTTTGAGTGAACTTAGGGTCATCTCTGCCATATCATGCCTTCCATCT
-GCCTTCACTCTGCAGAACTTCCCTGAGGGGTCAAAAATGCAGGGTGACATCTGGGACGCT
-GAAAATGTCATGTTCTCCTAGGCAAGCTCGTCTCCTCAGTAGCCCAGTGAATCTGTCATT
-GAAATTTCCTTAATACCCAAGCCAGAAAGCCTAGCCCCATACATTTTTTTTAAAAAAAAC
-AAGACTAAtttggatagatttctagcatttaaaaaatcaagagatttcacattaaaaagc
-tggaatttgaacttctctggaaaaagtcagaacatctaccaacactgggtctgctgtcac
-agggcagtgagtggttagagttacataaataaggcatatgttccccaggttactgcagac
-cctaccCCTCCCTATTGTATTTCAGATACTGAGGGAAAAGGTCAGCTGCCCTATGTTATC
-ATCCTTGAGCTACATCTTAACACCCACTTCACTCACTCACAATAGAAAACAATGTAGAGc
-aggggttctcaaacttgggcatgcatcagattcacctagagagcctgttaaaaacacagg
-ctgctgggccttaccctagagttgctgattcattaggtctgggcagggcctgagaatccg
-cattgctaacaggttcccaggtgatgctgacctttgctggtcctgggcccacactttgag
-aactactAGTGTGGAACAGGGTTAAgagccagactggttggattgaaatttcagctctgc
-cccttacctttgccatgtgaccttgacccagtgccttaacctcactgtgcttcagttttc
-tcatctgtaaaacaagaatcctcctggctgacctcacaggtgtgctgtggggGCCTGGCA
-GGGCTGACAGTCAAGCGGGTCTCCATGACATCACTGTTACTACCATTATTATCACCACCT
-GCCCTGCCTGTGTTGGCATTTGTGATCCTGGAACTGCTTTGACAATCAGTGCAGAGTTTT
-TGGTTTTGATGCCAACATTTTTGGGGGTAGAGTTTCTTCATAATTGGGGTGTGCCCTGGG
-AAGTGTGTCTTGCATGAGAACATCATGTCATGGTGAACTAAGGATTTAATACAGCTGTCC
-TGGAGGACTCCCCAGGGCTAAGAAGGATGGGGAAAGAGAGAAAGACACCACTGCCCCTGC
-TGAGGTCCCTGCTCTGTCCTTGGGGAGGACCCAGAACCATGCAGGAGGGCCCTACACAGA
-CAGTGCTGGGCAGCGCATCCTCCGATGCCCGCCTGGCAGTGCAGGACGCATGTCACCGAT
-GACCAAGGGAAATAAAAAACATCTGGGCACCCGCCTGCCCACTCAGGCCTCCACATATGG
-GAGGCAGTCGCCACTGCTGGAGGCTTGCTCAGAAGATCCCCCAGCACATTTCTGCCTAGG
-GGTAGATTGCACCATCTCTAGCAAGGGGGTGGGCCCTGGAGATGACTCCCAGCTTAGAGA
-CTCCCTGGGATCAGGGCTAGAGGTCGCTAGCCCACTGGACCCTTCTCAGCACTCAGGAGG
-TGGGGGGACCAGCAGGGCAGAACATTCAGCAGAATGTTGaggttgccttggctttggggc
-ctgacaaaccaccacttcctagctgggtgatattgggcaagtggctttactgttctgagc
-cttggtcttctcttctgtaaaatggggacgatagtagcaaccacctcccaggcagttgtg
-gggatgccatgaactcatctgcgcaaagtgcttagcacagctcacggcagatgaatgagc
-actccattactacttgattCATGAGAGATGCTCCTTTGAGGGCTGGGCCCAGCTTGGCTT
-GCTCACCTTTAAATCCCCACGGCCCTGCACATTGTAGGTGCCCACTGACTACCCATTTGT
-GATTATACCCATTATGCCCATTCATTATTTCTTAAATGAATGCATGAACGGTGGCTCAAT
-AAAGGTTCTCAAAAACTGCTCTCAGGGGGCTCACAGCCTATTTGGGAGGACCAGGCCCAT
-ACGAATGTGGAGAAAGCTGATGACCTCTGCCCAGCAGGGCTCAGAGACAAGTGAAGGACC
-CAGGCAAGGTGGGAGTGAAAGTCCAGAGACTGGAGACATCAGGGGTGGTTTTCTAGGGAG
-GCAGATGTGGGGACAGAAGCTGAGGCCAGGAGCAGGACTAGTTTGTGTAGATGGAAGAAA
-GGTTTCTAAGAGAGGTGAGTACAAGATGATATTGTACTCATTTGGTAGAAAGGGAGGGGC
-TTGAGCAAGGAGCAGATGGCAAATCCCCGCTAAGGTGCCAATACAGGACACCTAAGGGGC
-TAATGGATAAGACCCTCAAAATACAGTAAGAATAGGCacacatccaaaatggaaactttt
-catcctttgccctccaaacctgcttctcctgtccatttcagtcaatggctactccactca
-gggccaaagacttcagcggcatccttgtctcttctctctccctcatatcctactattggc
-ccatcaggaatccggtcagttccacttctgaaatatgtctgggaataatttctccacctt
-tcctgtccctaccccgttccctgctcctgccctgtttccccaccactcaccttccctggc
-catgctggcctcatcctccatgttccccatctgccaagaccactcccaccacaggacctt
-tgcacttgctcttccttttgtctggaatgcccttcccacattcacccgcaaggctccctc
-cctcaaatgtctccttgtggggacaagagtgattccttcttagatactaatttgccacgt
-caactcctgactaaccctgagtccagtaatgcctccaagatgtctagctgaagcattact
-ctctacgtagaaacacttatttgctgcgggtttcacttttcctccaaaacaaaccttgat
-gctgctgcaggaagcataggctatgacacccatagcacaatgtcagtcacctgtgcactc
-ctcccagagcacgcagacctttctccccaagatatgtaagccctgggtctggagagttac
-agcttggagatctacctatcttgaggctgcccaaatcttgctctgttcaaaagttcccca
-actaataaccctttaccaacaaattggaattggctgcctcattctttggtttcccagctc
-cttctgcatttggggtcgctttatgtatacggccctttcacagaacaccccttccctgtg
-atgcccccagacctcttgcctgcagcagcaccacacctacaccctattcctctcccacgt
-cgctatgttcttcatgccatttattcccacctgataggttctaaatttggcaagtgctgt
-tgtctctttcccaccagtgaaagatgagttccaggaaggcagggaTGAGCCACGGCACAC
-TGGACCTTCTCACTTATGCAGCACCTGCCTTCTCACTTAACCAATTCTTTGTTTTATAGC
-TGCTTACCATTCCGCATAGaggggctgcaaaactcatttaggtgctattatcacacccat
-ttcagaaaggaggaaactgaggttcagagcaatgatgctgcttgcccgaggtcacttaat
-aagtggagcagatattcaaacccaggcagtgtgactctgaacctgagggttatcctcagg
-ttgccacactgcAGCCTGGCTACTCAACATATCCCTGTGCGCCTCCTCAGTCCTCCATGC
-AGAGTCCCTTACCTACTGACGCCTTGCTAAGTTCCCAGTGCTGTGCTGAGGCCTTCTTCG
-GTGTCCGCTTGACCTCACCTGAGACAGGAAATTGGCCAAATGGTGGCAGTGCAGGCTGCC
-CCAGGACTGAACATGCCCCCTCTGCATTCCTCATCCATCCTCCCCTCACCCCCAGTAGAG
-AGTGAGCAGATCAATAGGTGTGTGTTCAATCAAGGGGTGAAATGCCCACTCCGTCTCTCA
-AATTCTCCAGGAGTGAGTCTCCTGCCTCGCAGCTGGGACTTGGGGAGGATGAAGAAAAAT
-TACCTGCTAAGTTGCAGCCTCTGCTGGACATTCTGGCCAGAATCCTTTTTAGACGTTGAC
-CTATATGGGCTGGTTGCAGGGGTGGAGAGGGTGGTGGTAAAACCGGGGTTCAAACTCACA
-TTTGTTGATTTCATGGCcagtggtgatctcagatttcaatccccatcagaatcacctgag
-gctgcttattaaaaACAAGAGGTGCTGTCGCCTCTCGACACATGCGGTTGTTTTAACGTT
-TATGGTGTGCCCAGGGTTGTACGTGCATGAACTCAGAGATCTTCAAAAACTGTCCTGTGA
-GATCAGCCAGGgcttcccaaactgtaatatgcacacaaagggatttaactcagggatctt
-gggttaaaatgtagattttgatgctaaagttctggaatggggccagaggtgctgGCCCGA
-GAACTCACTTTAAGAAGCGAGGCGGgagatgctgttatcattcctcattttacggttcag
-gaagtgaaggctcaaagaccaacaattataggtggtggcattagatttaaacccacagct
-gatgaaaccccagactcattctactgtgtcacactgccTTACCCTGTTGGTCTGATGATG
-AACGTGGAGCGGGAAAATGGGAGTGATACTCAAAAGGGGCAACCTggccaggcacagtgg
-ctcacgcctgtaatcccagcacttagggaggctgaggcaggtagatcataggaggcccgg
-agttcgagaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaatc
-agctgggcgtggtggtgcacacctgtaatcccagctactcaggtggctgaggcatgagaa
-acgcttgaatccaggatgcggaggttgcatgagccaagattgcaccactgcactccagcc
-tgggcgacagagtgagacgctgtctcaaaaaagataagatataaaataaaataaaataaa
-aataaaataTCAAATGGGCAACCTGACTCCTTTCGCCACTCATAGGAGGGGCATTTCCCC
-AAGCAGCCTGAGTTGGGGACAGTCCCTGCCAGGCCCAGCATGGCAGAAAAAGGAAGGGCT
-GGGTTCATGTGTGCCCGACATGTGTGTGTTTGGGGGACAGGGGCAGGTATGTGCCGACAC
-ACGAGACCCCTGTCTAAAGGATCTGCCTGTCCCCACATTAAAGCATAGAGAAGGCCTGAG
-CCCCTGCCCTATGCTGGTCCTGCAGGGCTCGGCTGGGGCCCAAATCAGGGGTTGACACAG
-TGAGAACAGGCTGCTGGTGCCTGGCATCCCCCACTTCCCACCCCACATCAACCAAATCTC
-TGCTTCCCCATTCTCCTGGACCTGCCCTGGACCACATCTATTCTGCCCTCCATTAGCTAC
-TCATTAAGAGAAGTTACATTTGTGTTTCTGGTGGGAGCCCTGGGGGTGCTGAGCAGCCCA
-GAGCAACCACTGGTGACCTTCAGAAAAATCATATTAAAGAAAAAAGGGTTGTTTTTGGAT
-TCCTCATCATTCGGCAAGCTGTGCTGGGGGTAGAGCAGCCAGATGAGTTCGGGACCGGGG
-CAGAGAGTCTACCCTCCAGCTGGCTTCTCCAGACCCACCTGCCCAGAGCTAGTGCCCTGT
-TAGCCAGGAACACAGAACTGTCACAAAGCTGTCCTGAGCATGAAACTGTTACCAACCAAT
-CTGTCCGTGGAGTTGTTACAAAACTGTCTTGTGTGTGAAGGTGTCACAATGTTGTCAAGT
-ATGTGACCTTGTATAAGAAATTGTCATGCAATTGTCCTATAGGTAAAACTGCCATGAAGT
-TGTCAAGCATATGCAGTTGCCACTCATTTGAAAAACTACTGGAGAAGAGTTTCTTTTCTT
-TTCATGTATGAGGGACAGGTTTGCTGTGTGGGTGACTTTGAAAAAGTTGCTGACAGGCAC
-TGTGCTTGGCTGCTGCTCCTGTAATAacagcgcccggcacccagtaggtgctcagtgagt
-acttgccgaatgTCTCCTCAGGGCTGCAAAGTAGACTCAGACAGGTTCTGGTTCTTTCAG
-GTGCTGGCTTTGTCCCGTAGTGGGCTGGTCTGATGTGACCTCGGGTAGGTCTGTTGCCTC
-TCGCATCCTCTCTGAGCCTACTTTGGTTGTTGTAAAGTGCCCTGAGGCCTGTGTATGACG
-TGCCCAGCAATACTGGGGACAATAAATGCTGGCTGCTAATTCCCTCTCCCTCTTGTCGGG
-GGTTTATGATTCCTCAGGGCTCTTGATGGTAGCAGAGGCCTCTCGTGGCTCTTTGGGAGG
-CTGTGGAAGCTTCAGCTTTGGCTGAGTAGGACGTCTGCAGTGGCAGGACACCTCCAGCCA
-ATCAGGATGCTCAGTGTCACAGGGATTGGGGGCAACGCCCACCGCTACAAACCCAGGAGG
-CCTCCTCTGGGGAGGATGTGAGCTCCAGGATTCCAGGAAGGGTGGGAGGAAACCTTCTAA
-GGGGAGCTGAAAGCTCGTTGATTCCTAAGATGAGCCCGAGTGAGAAAGGTACCAGGTTTT
-GAAGTTTGTTCTGCAAACGACCTTCTTCACTTTTTTGTGAAGTCCTGCaatcaacagagc
-tcagggctaggaattaggacctttgctcctgtcccaccttggactcagactcattgtatg
-acctttggcagagcacctggagcttcCAAGGGGTGGCAGAGAGTTGGGAATGCAGTTTCC
-TATCGGAAAAGCAGAGCCTTGGTCTTGATAAAGAACTTTTGAACTTTTTCTTAGCCAAGG
-GAGCCTTCCTTTTTGCAAGATGAAATGTGACATGAGAGATCGATTCCTAAAATGAATGAG
-TTGAGCTGCTTTGGCTGAGGCCAGGATGGGGGTGAGGGTGAGCATCTTGAGCTGTCTTTT
-TGGTTTCCTTTGCCTACTTCTAGAGGCAGCCTCTGAGAGCTTGGATACCCCCTAAGGAAC
-CTTTGAACCCCAGAGTTCCACAGTGCTAATGGCTGCAAGGCAGGTGATATAATTTTGTGG
-GACTCTGGAGCCTGGGTTCATTCCCACACtagcttctctgagcattggttttcccgtctg
-taaatggggataacgactatgctcacatgttgtgacagtgtggtaagctggttttgtgtg
-tggcatgccaaaacagggtttggctgacatggggtgcacagcaatgtgggAGCTGCTAGC
-AGTTGTGGATCTCTTCTTTCACAGGCCAGACTGCCTcaacaatcctgcaagatgggtagt
-attatctggtcttgcggacaaggaagctaaggcacagagaaggtaagtaagttgcccaga
-tcccatagctggtgagtggcaaactcaaagccaggcagtctTAGTAACAGATAGTTATTA
-TTATTTTAAGTACTGGGGAGAGTCTAGGCCCCAGAATAGGTCCAAAATAAATACCCTCCT
-CACCTTACATAATTAAGCTCTAAGAAAGCTTAGAAATAggccaggcacggtggttcacac
-ctgtaatcccagcactttgggaggctgaggcgggtggatcatgaggtcaggagttcaaga
-ccagcctgaccaagacggtgaaaccccgtctctactaaaaacacaaaacacctgcaccag
-gtgtggtggtgcgcacctgtaatcccagctacttgggaggctgaggcaggagaatcactt
-gaacctgggcagcagaggttgcagtgagccgagatcatgccactacactccaccctgggc
-gacagagtgagactctgtctcagaaaaaaagaaaGCTGAGAAATATAATCAGCTCCCAGT
-GCTGAGAAGACTTGGGGCCCCACTGCCAGTGAGCATCAGGAAAGGGGGCCAGGTCTAAAA
-GTCAGCGCTGACTGAGGCAGGTCCTTGGTCAGTGTGTCCCTGCCAGTGTTCCTGGGAAAG
-CCCCAGTTCTTCTCAGCCAGCACCCTGGGTACCTGGAGCTTCCAAGGGGTGGCAGAGAGT
-TGGGAATGCAGTTTGGGCCTCCAGCCCAATGCTCCATGCTCCTTGCCCAGTAATCACACC
-TGGCACAAAGTGAGCATCTTCAAGGACCCTATTCTGGGTCTGGTCTCTCCCCATGGGCCT
-TCTTCAACACTCAAATCCTAGTAGTACAAGGGAGAGAGCCCCAGATGTGGACTcttgtcc
-agttctgtgtgtcctcaggcaagtgtctccctgtctctgggcttcagtttctccatctgt
-caaatggatggttaaactcagtgtttctaaaggcccACTGTTCACccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccccatccatccatccatccatccatccatccacccacccacccatctatccatcca
-ctcacccacccatctatccatccatccatccacccatccatccatccaccaacccatcta
-tccatccaatcacccacccatctatccatccaccaacccatctatccatccactcaccca
-cccatctatccatccatccatccacccacccactcatctatccatccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccacccacccatatatccatccactcacccacccatctatccatccatccacccacc
-cactcatctatccatccatccatccatctatccacccacccacccatcatccacccaacc
-atctatccgtccatccatccattcagcagatatttcttgaatatcatctatgtgccaggA
-TCCTTTATTTATTAAAGTTAAAAGACAAATCACAGACCTGTAGAAACATTTTAGAAAGAC
-ATACAAAATCATACTGGATTGGAAATGTAAATTTCCCCAGGACttttgttcaccagtgac
-tctccaatgccatgcatggggccacatgtctactaggtgctctgtaaaatgtttattgga
-tgtaagaatGAATAGGACATATTTTGCTGTTCTAAAGAGAGCTGCCTCCGAGTCTGAGAT
-TGGAGTCAGACATCCTCTCTAGGACTTATTGAGAGGGGGCCAACTATCTTTGTCACCCCC
-ATCCCTGACCTGCCCCACTGCCTCCCCAGCCCATATAAGCCAGTTTCTAAAGAGGATCTA
-AGGAGGATTGGCCAGCAGTGACTGGGGCAGGGTAGGGCACGGCATGCCCCCAACTCCCAA
-GCCCAGGTGGGCTCATGGTTTGGAGGGGAGAAGCTATGAACCAGAGGGAAACAGGCATTC
-CATCCCTTGATTGAACTCACTCTTGTTGATCTGCCCTGTGTCCATTGGGAGTGAGTGGAG
-AATGAATGAGAAATGCAAAAGGGGTGGGGTCTGGCAGAGGCAGCCTGCATTGCCACCATT
-TGACCAATTTCCTGTCAATTTCCTATATTTGGTCAAGTGGACATTGAAGGAGGCTCTTGA
-GCTTAATCTAAGCCATGGTTTTCCAGCCCAAAGGGGCATGAGGCTGTTGAAGTGGGGATG
-GGGTAGTGAGGAAGCTAGGGTGATCTGAAGAGGTCAAGCTCGTGCTCCTTGCTCAGTAAT
-CACACCTGTGTACCAATTAGGCACCTGCCACACGTGGGAGAAAGGGGAGGGCATGGATGG
-AGGCAGAGGAACATTTAGTCCCAGTCCCTCCCTGCTGCTCACTGGTGATGGCCCCAGAGT
-TTTCTAACACCGGGAATTGTGGAGGCCACAGCAGCATCAGGGTAGTGACAGCTGTCTCTA
-TCCCCATTCCTTCTTCTGCTCCCCAACATACAGGGGAGAAATCAACCCAGAGGGAGGAGA
-GAAGAGAATGAGACAGCATGACATATCTCCCTACAGGGCAAATCAGTGGAGTCAGAAGCT
-GAGTCAGGCAGTGATGGGGAAGCAGTGATGGGAAAGGAGAGCTTCAAATCAGACCTGTAT
-TTTAAAAATTCAGCACTGGACTAGGCTTTTTAATAGCTGAAAGTTACCAGAAAGCTTTGA
-GATCTGCCCAAAGTTATTAAGGATTGGAGTTTAAAAATACGACTGTGCATTGGGGGTGGG
-GGGTGGGGGGTGCATGGAAAGCATGCCATGTTTGTAACCCTCTGTTACAACTTCAGTATC
-ATCATTAAGCCAGTTACACACAAAGTAAGCCAAGAAtatccttaatacacaacgagctcc
-tataaatcaataagaaaaaggggaatgatccaagtgtgtggagggagaatgggcaaagac
-attacaaggaatttaaaaaagaaagacaaataggacaataaccatacgcaaagctgttct
-acttccctaagaattttcaaattgaagatgagaacaagaatgaaataccaccatgaccta
-caagatacggaaactgtaaaagactCCGGCACCCTCTTTTGAGAAGGCAATTAGGCAGAG
-TCTATTATCTGTAGCCTGAGGTAGTAACAGcattttacaggaagtgtcctgagttgagag
-aggggtaggcacttgttagaagccacacagtgagtcatgggaggggaggagctagaactc
-agacctctggaTGGGCACCTTTGATTCTTTATCTCCAGCCAGCTGGTCCTCTCTGTCTGG
-GCTAGTGCACAGCCTGGCCCCTGGCCCCTGTCTGGGTAGCCCAGGTCTGCTACATCCATT
-GCTGCACCCTGCTCTGGGCCTGAGGATGGTTGGGGCACTGCTATTCCAAATGACACATCT
-CTTATGATTACCCTGTCCTTCCTAGACAGGAAGCTTTCAATTAGTCCTGCTGGGCAGCAG
-CCTTAGAGGgtagaggtaggactccaaggtttgggatgagacaaacctgttctcaaatcc
-cagccccacctttactccctgggacagttacttaacctcagtttgctcatttgtaaaaGG
-AACACTGTccaggtgcggtggctcacacctgtaatcccagcactttgggaggctgaggtg
-ggaggattacttaaggccaggaatttgagaccagcctgggcaacatagtgagacccttat
-ctctatgaaaataaaaaaaaaaaattagccaggcatggtgatgcgtgcctatagtcccag
-ctactcaggaggctgaggtgggaggactgcttgagcccaagaggtcaaggctgcaatgag
-ctaagatcgtgctattgccctccagtctgggtgacagagagagaccctgtctcaaaaaca
-aacaagattaaaaTGGACACAATCACCCACCCACTGAAAAGCttgttccttccacagata
-tttattgagggcctactatgtgccaggcacttttcaaggcactgcagatacatcagtgaa
-tgagacagaccttcccctcatgaagtttacatcctaagtgggagagggagatcatttcag
-agaacgacagggaattgaatttgggtacacagagtggcaggagggagggcctgggctgcc
-tggaagggcatctctgagatacacaagaaagcactcttggcggagggaccagtgggtaca
-aaagcccagaagcggcaaagaacgtggtgtggaagagagcagcaaggccagagtgcagtg
-actgaggggagagtggtgggtggtgaggtctggaggcagaggggccagacccccaggaca
-catggatgagtttggatggtgctggattttcctggaagtgagttgggaagccactgtggg
-ttgcaagccgaggagtgtctgccaccttgaaagcttctctggtgctgaggggaatggact
-gtggggcaggagtagaagctgggagctcagggtgtatgggctgtggtcattctggtggcc
-tggacgaggctggcagctatgagaagtgggtggatccagggagggtggacagacaagctc
-tgctcatgggttATCATGAAGATTAAAGGGTAAGTGACTCAGTCCACAGTGCAGCACATA
-GCACATGCTAGACAGATCTTAGCTGttttatttatgtatttatttatttttgagacacag
-tcttgctctgtcactcaggctggagtgcagtggtgtgatctcgactcagtgcaacctctg
-cctcccaggttcaagcaattctcctgcctcagcttccctagtagctgggattacaggcac
-ccaccaccatgcctggctaatttttgtaattttagtagagatggggtttcaccatgttag
-tcaggctggtcttgaactcctgacctcaagtgatccacccgactcagcctcccaaagtgc
-tgggataacaggcgagagccactgcgcccagccAGATCTCAGCTTTTAAGAGGCCTAGAC
-CTAGAATCCCATGACTGTGTCTACCCCACAGCCTCCTCCATAAATGCCCCAAATCGCTTC
-TGCCTCTCCTGGTCATTGGTTCAAAATGTGATTCCTTGACCTCTTGTTGCCTCTTGACTT
-TTGCAGCTGCTGGGATGAAGTACTTGTTCTGAGTTCCTCTAGTTGCTATTTTAAGCAGAC
-TGCATACCCTCCGGCCCCCATCTCCCAAGCTGGTGTGAAACCCAAGGCAGTATCTGGGTG
-GCTCCCTAAGTCGTTTTCCAAGTTGAGAATAGGTAGTAGAGTCACCTATTCTCACAACCG
-TGACATTCCACCCAGTCCAGGCTCCCAGACTAACTGCCCAGCCCCTGGAagtagagagat
-gggaggcagcaccaggcagcagggaacccaggtttgagtcccagctctgccaccttgacc
-ctaggaaggccctttgacctctctgagtctctgcacctcttctgcaaaataggaatgatg
-atattaaagaattgcttgcagggtaaagtgaggtaataacctgcggagcacctggctgtg
-tgcccagctcatatggcaaacactcaccaggtaggagGATCCTAAGGTTGTGGGCaatgc
-atacaaagcctctggtgcattgtaggtgctcaataaatggtagGATGCCAGTAGGGAGGA
-GTTGAATGAGAAAAGGGGAAAGAGACCCAGTGCATGGTGGGGGTGGCAGGAACACAGGGA
-GTTGGGGGCTCCACCTTGGAAACCTCTCCTGGCCCTGGGGGCACTATCTCCACCAAACCC
-AAATCCAGGCAGCTAGAGGGACCTGGGCCTGCACAGGCATGGAAATTCTGCACTCACTGT
-TAGtgggcctcagtttcctcatccgcgaagtggaaaccataacccttcttaccCAGTTAT
-AACCTGGATTCTGGGCTGGAACCAAGATAAGCAGCTACAGGCTGTCCTACCCCACCCCCA
-GCTGGAGACGCGGGCCTCTGGGAGCTCTGGCCGATTTTCAAAGGGACCAGAACTGCAAAA
-AACAGAACTAGGCTAATGCTGGCtgagtgttcacagtgtgccaggacctgtgccacccag
-gtccttgtactaaatcattaaaacttgccataaccccacaaggtgggggctacacttact
-ccattggcagggatgagaaaactgaggctcggagaggtaaagggcttggcccaagcattc
-acaggaggagccaggaggaatgcaaaactgagcccagctcctaactACTGGAGAGGAGCC
-TGCCTTGTGGTCCGTCACCCCTCCCTGCCAACCCCTGCCAGCTGGGCTTCCAAAGGCCGA
-CAAATGCTATTTAAAGTCATACGTCTCTCAGGTCCCGAGGCACACCAGGGATGGACCCTA
-AACTGTTTGTGGGGGCAGACAGGAGTTATATCAGCCAAGTGAAGGCAGGAGGGGAAGGCT
-ACTCCAAGTGCCTTTAGTCTGGAACTGTTTGCATTGCAGGGATGGAGCCCTTAGTAGCAA
-CCTCCAGACAGTCAAAAAAGCTGGCTTTGCACACAAACATCCCAAGTGTATGTTttcctt
-cattctttctctttctcttttctttttccttccttccttccttctttccttccttccctc
-cttctttccttcctccctccctccctccttccttcctttctttttctttcttctttcttt
-cTCAGtctctctctctctttccctctctctcttcctGGGGTGGGGAGTTGTTGATGCAAG
-AGAATGAGATGATCCACAAACTGAACTGGTTCAGCCAAAGCAGCCCTCAGCCAGGGGCGA
-GCGGGAAGTGTAAGCTGTTGGCTGAGGATTCTCCTTGTGGGGGATTTTGAGCCCCTGTGG
-GGTGTTGTTCAAGCCAATGTCACTCGCCTCCAGGGGCAGGGAGTCTCCAGCTGATGTCTC
-TCTTAGAGGAAAATTCACTGCTGTTGAGCTTACTACCTCCATCAGAGTAGGGGAAAGGGG
-ACCCCAAGGACAGGGTCTGGCTAGCAGCACATGCTCCGCAGATGCGTGCCAACTGCAGGC
-TGTGATCCTAGGGCACAGTCAGGAAGGGGCGTGGACAGAGGAGCATTGTCGCAACTGAGC
-GTCCCACTAGCGTCCTCAGGAAGGCCCGAGGGCTGCTGCAGCAGCACTAACACTTGGAAG
-AATCCCTCGCGGGAAGGGTGGTCCAATGTTGAGGAGTAGCAGATCCAAGCTCACACTCTG
-GAGTGTGACtttgcttgtttattttaaaagaaggggtctcaccacattgcccgggctggc
-ctcgaactcctgggctcaagccatcctcccacctcagccccgtgagtagctgggatttca
-ggcgagagtcaatgcacctggcTCTGGGGTGACTTCTTGTAAGACCTTCTCATACAGACT
-TTTTAATAAGATCAGAAAACCCAGACCATAAGGCAGAACAAGCCCCCTCTCCCCACTCAA
-AAACCAATGGATTTGACCACACTGACAGCATGGTAAGCAATGATTTCTACTCTCCAAAGG
-TGaggactctacaaagtcagattaaaaaagattttttttgtgtcaaaatgaacatgggat
-tgatatctaggtaatacaaggaagccctacaaattgacaagaaaaattcaggaattccaa
-ttttaaaagtgggaaaaataaaaataaaatgtttaaaaagtgaaaaaataaaatttaaaa
-ttaaaaatcaggtgaataagaattacatgattaaaacaaatttaaacagttaaaataaca
-ttcaaaaacgaaattaagtaacaaaataaaaatttaaaaataaggtataaaaataaagtg
-taaaaatccattcaaataaaaaatacatttgtaaaataatttaaatacattaaaattaat
-aaaaacaaaaatgttaaaaataaaagtaaaatgtttaagtgaaataaaatttaaaaatgt
-aagaatacatgaaagaatttttacgagtaaaataaaaaatcagctatttttaacaatcta
-aagaataaagaaaAACTAATAGAAACATCAAAGGAGAGCAAGGTCTTGCTAGATGGATGC
-TGATGATGTGCTGTGAATTAAGGAGTCCGATTGGCTCAAATGCCTGCAGGGAGGCGGGGG
-AAGTGAATGACGGGGGTGGTGTAGGGAGTGAGAGGGGACGAGGAAGTAAAAGCATGCCCG
-CAGGCAGCATCTGATTCGGTTTTTCCAGCCCGCTGTGGGCAGAGGGCAGGAAGTCAGGCC
-CCATCATGGCTTCCCCCCAAAATAGCCATCACATCATTTATGCATTTGTAATGTGCTGGC
-AACATACGCACACGCACACGGATGCATGTTACATCATCCCATCCTCACTGCCCCATCCTC
-ACTGCTGTCCTCTGAGGTCCACTTTCttttttttttttttttttttgagacggagtttcg
-ctcttgttgcccaggctCTGAGGTCCACtttcatagaggagtgaacagagactcagagag
-ggtgggtcactgtgccacagtcacacagcACTTAGGACCACCCTATCCTCTGAATCTGGC
-ATGCTCAAAATGACCTTCTTTGGATGAGTTAGGTCTGCTGAGCACTTTCAAACAGAGGCA
-GGGCCATCTCTGACATCAGGCTCGAACGTTCTGTACACTAGGAAGAGCCCAACCTCTCCC
-CCCATGACGCATGACAGTTATCaccattaaagaaacactgactgtcttccaggggcgtca
-catgcatagtcatcttgaaaaccatatgaggtagatgctcttattgtccccattgtattg
-acagacaacatcgagattcaggagtcaaatactgtcacccaagcatggcagtaacagaac
-tgggagctgagcccaggactgtccacagcccaaatctcacactccctgcgtggcaccagg
-cCCTTTTAACCGTCATTGATGAGCACTCCCTATGTACCAGCAATGCGTTTGTCTATGTTT
-CATGcctcattttgcaaattagccaacgggggcacagaagggagagatgacctgcccaag
-gtcactcagccagtaagtggcagagccCACAGCCTTCGTGACAGCCTGCCAAGCCCCCAG
-TGCTCATCCGGGACTTGCTAGAGACAGCTGTGCCCACTGGCCAACCCCAGATCAGGCTCA
-GAAGGGCAACTGTGACATTCCTTCTCTTCATGTCTCCACCCTGGCGGATGTGGGCTCTGC
-CATCGGGCTCCAGGGAAAGTGGAGGCTTCCAGTGAAAGGGAGTGGTTTCCCCATGTGGCC
-TGGGTCCTCTGGGCTTGGGAATGCCTCTGTTTTGAGCTGGTGAAACAGAATTTCCCACCC
-CCTCCGCAATGGCACATCAGAGCCCCCACTATGGGCCACAGAGCAAGGGCCCTATGAATC
-ATGCTGCATTACTGCAAGAAATCATTCCAGGGCAGGCAGTGGCGGCCCAGCATGGGACAG
-CAGTGTCCGGGTGGAGTTGGCGTCACCCATCCGGAGATGGGAAGCAGACCATTCCCGAAG
-GGATCTGGAAGAATCTCCGAGGGCGGGGCTGAGGGCAAATGTGTCCTGGATGCTGCTGTT
-CCACCgggctaggaaaaaaagctccagcccacagagacctgggagcacatcacgaccttt
-ccccagcctggctgtgtgtccttggcaagttgattcccctccctgaatgtggaaggcctc
-atctgtagaagagggagaataatagggtcaagccacttcatggggctataatgtgggtAG
-CCTGGGAGGAGGGCtggcatggtggttatggactcaggctttggaatcaattgtctggat
-ggaatcctggtttttgccaaacttactctgccaagctgtgGggtagaaacatgaaattgc
-taatatttggctgtttatgacctagaaaaatggcaactgcatatacttcaaTGAATGTGC
-CTctcttttaactgcttcctcctctgtaaaatgtgggtaataacaggcccctcagagggg
-tgctgtgaggatgaaataagGCTgggaggcaattaagttcagtagttagagctgggctct
-ggggcaaggaaggatttgaaccttggctgagtggccttgggcaaagttacttaaccttcc
-tgtgcctcagttttcttgtctgtaaaataggaatgctactgcccactgcacaggtttatt
-aaggtaatttaatcaattaatacatacaaagtacatagaacagtgtctgAAATTGTTACA
-TAAAAGAATGCAGGTAACATCTGGCATCTCCTGCACCCTCATGTCTACTCACATAAATGC
-TCAACCACGAAACAAAATCCAAAGTGACTTTTGTAAACCTTTGATGCCAATGAAAGTTAA
-GTATTTTTAAAGAAAAAATATGTTTTGGGGAACATACATGTGTGTAGAGATGTAGGTGAG
-GAGTGTGCTCCCCAGGGTCCACCCCCAGGGCTGTTCTATGTCCTGATGGTGCCTATAGCC
-CAAGACTCTGAGGACAGGACTAGCCTTGAGGCCATGATGGCCCCGTGGCTTGGTCTCTTT
-CACAAAATCACACAGCCAAACCTCAGACCCTATGGAGAGGCTCCACTTGCCTAGGTAACT
-CTAGAGGCCCTTAAGAGGCACCCAGCCCTGGGCTGGCCTCTGATTATTAAGAAATTCCTG
-CAGACAGCCTTGGATGTGCGAAAGCCCTCCAGCTTCCATCCTGTCTTAAtttttttttag
-acgaagtcttgttctgtcacccaggctagagtgcagcagtgcaatctcagctcactgcaa
-cctttgctttccaggttcaagtgattctcatgcctcagcctcctgagtagttggtagttg
-ggattacaggtgtgcactaacacacccagctaatttttgtatttttagtagagatggggt
-ttcaccatgttggccaggctggtctcgaactcctggcctcaggtgatctgcctgcctcag
-ccttccaaagtgctgggattacaggcgtgagccactgcgcctggctCCATCCTGTCTTCT
-GACATTTGTCCCAGCCCTGGGAAAAAAGGCAAAGCACACTGAGCATTTCCAAGTCACGCG
-GGGGGAAACTGAGGCTCTGAGAGGCTCTCAACCTATCAGGCTCTGGAGCAGGCTGCCTTC
-CTCTACCAATTCAAGTTTTGCCTTCACCGCTAGTCTCCTgaaccctcacttctactcaca
-gctgggtgaccttgagtaaggtacttccctgcttgagtctccaattttacaaggattggt
-ctcaaaggtctcacttggcctttttggccttatcacttcattattctaGAACCCTTCTCC
-AGAATTTCAGAGAGAAAATGAAAGCTGAATTGCTCTGCAAACTATAAAGTGCTACACAAA
-CAAGAAGGTGGTTAATGGCAGCATTAGATGGGTTTTCAGAAGTCTACCGTAGGCAGGATT
-TGCTGTgggttttggaattaagaagacccagctcacacatgtatttgcgacgttactttg
-gataagccagttcccctctctgaaccaacttccctcttctgtaagctggcggtagaggca
-tatccaccaggcaggactggggtgaggaccaaaggaaaggagcgtgcaaTGTCTGCCACG
-CCCTGGCCGAGCAGAGGTGTTTGATGCAGGAGGAGATTTAGGGCCCCGACACATCATTCC
-ACCTTCCAGGAGCTAAAATCCACACACCTGGGGAATGATGTAGCTGTCAGATTCAGGGCG
-ATTAGAAACAAGCATCTGAACTAAGGCAATTGTTTGgagctccagagacagactctctgg
-gcttacatcccagcacccctgtctgttgctataccacccactgggcctcagtctcctcat
-ctataatataaagatcctcctggaatctgccccttacagctgtcaggagggcctccatta
-ggccatgactgaaaggggctgagcacagAAGATGGGCTCAGCTGGTCCAGCAGCCTCCAC
-ACTATTTTGACAATGGTATCAGTAGACACAGTAGTacacacgtgcacatgcatgcacaca
-ctcacatacatccacatatatgtgcatgcacactcacCCactcatacacccattcacata
-tatgtgtaaactgaaacacatttctcaaaataatagttttcacacttgcaatgcactctg
-atatattctaaaaaggaggttggcaaaaatcgcagcctctggaccaaatttggatgtttt
-tgtgttgcctgtgagctaagaagagtggagtacatgacagattgtatgtggtttgcaagg
-cctaaagtatttactatctgacccttcgcaaaaaatgtttgctgaccccactctatttta
-gtcagtgctattccattccgttctgttccgttccattccattccgttaccattccattcc
-atttcattagaaaatgctggctattgctaaatttattgtcctcacctgctgatgcattgt
-aaacctcagcttggaaaacTTTAAACTAATGGGAGCTTCAGTTTTTTCACCAGATGGGAG
-GATGGATGAACAAACCGTATCCATGTGACACCTTAGCCAAGCAACCTCCCCTCTTTGTCT
-TGGATTCCTCGGCTGAGGCTGAGACCACCACCACCAGCCTGCTCTCAAGGGTGTGTTGAG
-GTGCAGCCTCAGAGGTCTTGTCCATGATGTTCTCATTGACGGATCTCaagagcccaatag
-taaatactttaggctttttgcaccacatacgatctgttgcctattcCAGTATTCTTAGCT
-TGAAGGCCATACAAAAATAGTCCTGTGGCGGCAGAAATGGAGGAACACCCAtctctgctg
-tccttttcaatacccagcccagggcctggcccacaggaaggacccaataagtatttcttC
-ATGGTGATGGTGACTGGAGAGTGGCACCCAAGGCCCTCCATGACGGGACTCTGGCCCAAT
-CTGCAATCAGAACTTCACTTCCTTCGGCCACGCAGTCCCTTGTCCCCTCCACCTGGCCAC
-ACTCTCTCCTCATCCTGCAGAGGTCCTCACCTTACTGCCACCTCTGCCTGACAAAATCCT
-AAATCCTACTCCCCCCGATGGGGTTCCTCTCAGACACTTACACCTTGCAGCCCTGGCAAA
-TCACTGGCATGATTCATTTCTATATCTATTgcacgggcttcggagcctccaaaactctgg
-gtccaggtcctggctcagcagctgtgagctctttggcaggccattgatgctttctgagcc
-tcagttcccgtgtctgggaaataggcataacaCAAGGCAGTGGCAGAGTGAGGACGCGCA
-GCCCCACCTGCACAGCTCCTGGCACATGGCCCGCCTCCCTCCTTCCTCAGTGGCCTCAAT
-CTCAGTGGCCTGAATCTCCTTCAGTGGCTGGGCAGGGGGGTTGGATGGTTTCCGTCCACA
-GGAGAGGGAGGTGGGGCCCCCCGTGGTGGGGCAATGGGATGGAAAAGCAGCATCTCTTTT
-GCACCCAGGCTTGGCTTCAGAACGCTGAGTGGAAGAAGGATGGCAAATGGAGCTCAATTG
-ATTGACCACCTACTATCTGCCAAGCATTCAGATTTCCATTTCTCAACCAGCCCCTATGCT
-ATGAAGAAACCGAAGCCGAGAGACCCAAGGTTACATTCTATTAAGACTCAGCGCCATTCC
-CTCAGCCCTCAATGTCCAGTCATTACCCACCCCTGCCCTGTAGGAATCCCTTTCAGAACT
-ACCCCTGCATCTAAACCTGGCTTCACCTGGATGCCAGCACTCAGGGGACATACTTTGTTC
-GTGCCCAGCGATGGCGCCTGCTTGCCCAGGGCCTGGTGCATCTGTCTGTGTACAGGAGAC
-AGtgctgtctgcctggccctccacaaggggctttgcaatttaaacggaagcatcatattc
-actccacataacaggcctctggagtgggcactgccacagtcaatttacaataaagaaaaa
-caagctcagagagaggagaaggtttgctccggatgcaccacaagcaagaggcagaggtga
-gcttaacccacgtgagaccccactcccttccggtccagggcatgtctgctctgcTGTAAA
-ATGGGAAGGGAAAGTGGTCAAATCCttatgaagcccctactgtgtgcctttggccccctt
-ccctcttggactgcagtaaatcttcccaattgctcagagaggtaggtgtaagttttccca
-tttcacagatggggaagcacggacgggagaaggcatgtggcctgcttaatgtcacatatc
-tagggcaggagagggctcaaggtttgatcccagggctcttcactTTGCCCCTTGCTTGCT
-CAGGTCTAGAAAGATCCAGAAGCTCCATGTGAATGTGGGGGTCCCTCCCCAGAAGGCCTT
-GGATGTCAGGGAAAGTCAGTCACAGGCTGGCATCTCCTCCTTGCCCAAATGGACCTCCAG
-ATCTAGGGATGCGAACCAGGGCCCCCTCACTCTGCCCTACTGTCCCATTGCCAGGACacc
-ccagcatgtttcaaaaaaatgtccccatctggttctgattcatttacacttcattaatca
-acatgctgttttgtaagagacacttgagatccaagaatctttctcaagtcttttacttca
-ttctttcttagaaacagaaaaattgggcttcattaagaCGCAGTGACGCCGGAGCCTGAG
-GAAGGATGGGCCTGTGGGAACCAGGCCTCAAGCAGGCTCAGAGAGGGCAGATGCCAGCCC
-AGCACCTCATTCCTCGGGATTGTGCAGACCTGGCCAAACGCTAAGGCCAAAGACTCAGGC
-ATGGGGGAGGCTGGAGAAAGGTGGGAAAGGGTCATccctctatgttggcagctccccaag
-gacaggcccagggctgctcacctgggtatctccaaggtccccaacacagagcctggcaca
-gaggctgccctgtgaaatgaacaagtgaatgaatgaaGCACTGCCAATACCCAGGTGTTT
-TCAGGACACATTCTCCTGCCAAAGTTAGATAAGGTCAAAGCTGGTAGGACCCTGAGGGAT
-TGTGTACAGAATTTTCCAAGCAGATGCCTTATGAGAAATGGTCTCTGATGTGTAATATGT
-TTGGGAAAGGTCACTCTCTCTCGCtctctttttttttttttttttttgagacagggtctg
-ctctgtcgcccaggctggggtgcagtggcacaatcacggctcactgcagccttgatgtct
-ttcctgggctgaagcgatcctcccacttcggcttcctaagtagctgggactacaggtgtg
-caccaccaccaacatgcctggctattttttgtatttttttatagagacaaaaaatgtatt
-ttttgtagagttttgccatgttgcccaggctggtctcgaactcctgagctcaagctatcc
-tcccatcttggcctcccaaagtgccaggattataggcttgagccatcgcacctggGTTAC
-ACTGTCTGTCTCCACCTCTTCAGCATgctctgataagtctcacagccaagaaatctgcta
-aacccagcatttcccaatctatttgaccagaactCCTGTGGCTGCCTTGCAAAATATGCT
-ACAGGAAGGGTTTATCTAGCTCTGGTCCCCACTGCAGTGCCAGTGGGAAACTGAGGCTAT
-GGGCGGGGGACAGAGAAAATCCACTCACCCAAGGTCACATGATACAACTGGGTCAGGGGT
-GTGACTGAAATCCAAGGCTATCTCCATTGTACCCCAACAAATAAATGGAGCCCTAAGCCT
-CTTCTGAAGATGCTAGGCAGGTGTGTGTCCCAGAGGCAAGAGATCAGGTACTGGAGGAGG
-GATGCTGAGAGCCCCTCACCAAATTGCGGCCATATCCCTACCTCCTCACTGAGCTCCTGG
-GGAGGTGGTGGTGAGCTGTAGATGGGGCGGGGGGCAAAAGGGGCAGGATAGGAATTTTTC
-ATTTTTCTTTAATTTTTTTGTCTTTTTTgagctgagaagcatcttaaagtcttctaaacc
-agctcctttttgttgttgttgttgttgttgagacagagtctcactctgacacccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctctgcctcctgggttcaagcgactct
-cctgcctcagcctcccaagtagctggaattacaggcgcccgccaccacacccagctaatc
-attgtatttttagtaaagacagggtttcatcatgttagccaggctggtctcaaactcctg
-atctcaaatgatccgcctgccttggcctcccaaagtgctggtattacaggcgtgagccac
-cacacctggcctaaaccagctcctctttagatgaggaaactgaggctctgagaagggaag
-ACCAGCACACCTCAGAAGATATCTTCTCAGCATTATgtcaggcagattgggattcgagcc
-tgctttgctactcacctgctgtgcgaccttggacaagtcagtttccttctctgaacctca
-gttccctcatccagaaaacaagcatCTCTCCCCTCCCTCCACTAAGCCACTGTGAGTAGC
-CAAAGACACAGTGGACAGGAAATGAGAATGATTAATACTTACGAGCACCCATTAGGAGCC
-TGTGTCCTTAGCTACTCATCTTGCCCACAATCCTCCTTATGAGCAGGATACTTAAGTAAA
-AGATGGGTTGATGAAGGGAAAGGGGGTTTGTTTGATTTTTTGGTATTGTttagaatggag
-aaagatctcagagatcttctaaaggaccctcagatgggtaaagtgaggattggacaggca
-aagtgacttatccaaagtcactcagttggtaactggggaagctgggatttgaactcagtt
-gacctggctccagagcccatgcccctaactactaAACAAAGGCCATTCACAAAGGAGTGT
-CCCCATAGAGTCCCAAACTCACCCCAGCTCAGCTGAAAACCACACGCCTCTCTAGTCCCT
-TGTCCCACTGTCACAGCAAGAACTGGAGCCTCTTGGGCCACAGTCTCCCCAACCCCATCC
-AATCCCACCTCCCAATTCTCCCACAGCCTCTGTCTGCTTCCTGCTCCGTTCCAGGAGTGA
-CTGTGTCGCTGTAGGGCTTTCACACAAATGGAAGGCCCCAGAGGGCAACCCATCCTCTCT
-CATTTTCCTTCCCCTTTATCCTTGCTCAGACCCGATGCCAGGGCTGGAAAGAGAGAAGAC
-accagctggacaattcagcagttatttaaaccagtctgagccttggaatcccaggcttta
-ttaaaactggacgacccctatgtcatgagcatatagttgggatttgatgagctaggacat
-gaaaaacccgtggcatagtggctggcaTTCGGCTGCTGATCTTAAGAGTGGCACCTGGAG
-GCCAAAGGGCTGCCCAGCTCAGGCAGGCGATTTGCTCACTTGCTCACCCGCTTACCCTTC
-TCTGAGGCACAGGCTCTACCAACTCCTGCTCTGCAGGGACAGCCTCCAACCCACCTTCTG
-AGGATGTTCTGACTCTCACAGCGAGGCTGTGGCATAGGACTCCCAGGTGAGAGCGCATGC
-GGCCCCTGGTACATTTATAATCTGAACCTTGGCTCATCTTCCTAGTGGCCTGAGAGGTGA
-agatggaaaagctgaggctctctgaggggctggacttcttctaggtcatcccctattaga
-ataagtgaacctgaactcaggtctcaggtctggctgaactcaaCATAGGGGGGCCATGGA
-GGATCACTGCCCTCTGGGAGGTGACACCAGGAGTCAGGGTGAGTGATGAGGCTGGGACTG
-GGGCCTCTGGACGCCCAGCCCAAGGCTCTCTATGTCACTTCCTGGCCGAGCATGGATGCT
-TGGAATGGCTTCTACGCCACTGAGTCTGTCTCCTAGTCCCTGTGCCCCGCAGGCTGGCTC
-TTGAGTCTTCTGTCTCTGCACGAAGCCATCCTCCTTTCTGCTGACCATGCGGCTACTACA
-GAGAGCCCTGCTACCCTCTCCCTTCTGGGTGAGTCTCCTTGGCCCACCCTACTCAATGGC
-TCGCTCACTGGGTGCCCTGGAGCCTCAATCTCCCCATCTTAAGTGAGGTTGAGACTCGTC
-TGGAGGAGCGAAGGACCCAGGGCGCCAGGCACCAGGCAGATGCCCCCAGAGCCGCCGCCC
-CCGGTCCTCCGGCCCCCGGTCTGCCCCGCAGCGCCTGCCCGGCCGCCCTGCCCAGCCACC
-CCTTGTACCTTGCTTCTTCCTTCGGTTCAGGGCGAGCATGTCCACGGCGTGGGCGACGAG
-CAGGAGCAGGCAGAGTGGCGCCCGCATCTGGGCAGCCGGATCCGGGCTGGCGCTCCCCAG
-GCGGCCCGACGGCCCAAGGGCCCCACGTcccggcggcggcacggcgggcgcgggggcTGC
-TGTGGGCGCGCCGGGCGCATCCGCCAGGCGCGGGTCGGTCCGGCCGCCAGGTCTAGTGAG
-GGCGTTGGCGGAGCCGGGGCACTGCCCTGGCGGGGAGGAgccggcgcggcgggggcggcg
-cgTTAACCAGCTcggggcccgggagcgcgcgcggggagggggcgggggTCACCCGGGTCG
-GGGCCCTCGAGTTCGATCTGTCCCGCAGCCGGCGGTCTTGCGTCTTTCCCGCCCCCAGCA
-CTGCCCCCGAGCACGTGCACGTGCCCACCGCCAGCCACAGGTACGCACGCGCGCGCAGGT
-ACAGATGCGCGGACACCCGGAGACCCGTACGGTCCCCCGCGCCCTCTCAGCGCCTGTGAT
-TTTCTTTCCCTCCCCCCAGTCCCCTTTCTCTGTCTGTTCCTCCTTCTGGCCCTTAAGGAC
-AACTCCTTGTCTCCTGCTTTCTCGGTCTTTCCGCGGCCCGCGCTCCCCTGCTCTGCCCCC
-GACCCTGCCTGGCTGTTCCTGCATCCTTTACTCTTGCCGGCCGTCTCTCTCTCAGGCTCA
-CTGTCTGTGTCCTCCTGGCTGGGCCTCTGGTTCTCCCTTTTCTCTGTCTCTCCCTTCAAC
-CCCATCTCTCCCCTTCTCCCCTCCTGCAGGGTGGGGTGTTTGCGGGGCTCCTGCTGCCTG
-GCTTTCTCTTTTTCTCTCTACTCTGTCTCATTCTTTTAACAGAGGCCTGAGCCCCTTCTG
-GCCACTAACCCTGAATGTTTCCTGTGCAGTCTGCGGGGATCATCTACTCCGACTCAAAGT
-GACCAGCACCTCATAAATCCACTTGTGACAGGGCTGGGGACCTGGACTGTGTTTCCTCCA
-ACCTTATCACCAGGACTGGGAGCAGCTGGTTCAAGTTTAACCCTTTCAGAGCAAAATTCC
-TCCTTCAACCCGACAGCATGCTCACCTCTCCTGTCACTATAACCACCAAAAACAACAACA
-ATCATGCTagctatcatttgtgaggcatatatggtgggcattgctaagaacttgacatat
-actagagtcttcaaaacaacccaatggtttgggtttgtattctgagtaattccacttttc
-tggggagcaaagggaagctcagagaggccaagtgacttgcccaaggccacacagcaggtc
-agtggcCATTCTGGTCCAGTGCCTGCCCCTCTTAGCCACTTCTCAGGCACAGACTCATCA
-GAATGGAAGAGGCCTTGGAGGGAGGCCTAGAGAAACTTACAGTTGACACTCTCTTGCTGA
-ACAATTGTCCTTCCtttttcttttcttttttttttcttttttttgagatgggttttcact
-ctgtcacccaggctggagtgcaatggcgccatctcggctcactgcaacctctgcctcctg
-ggttcaagtgattctcctgcctcagcctcccaagtagctgggattacaggcacctgccac
-cacacccagctaatttttgtagtttttagtagagacggggtttcaccatgttggccaggc
-tggtcttgaactcctgacctcaagtgatccacctgcctcagcctcccaaagtgctgggac
-tacagacgtgagccaccccacccagccTGTCCTCTTTTTTCCTACATGTGGAGCTTGCTC
-CAAAAGAAATGGAAGGTAAATGCTGGTATCTCCTCCAGCTCCTTCTCCCAGTGCAATGAG
-GGACACTTGAAGGCATGGCAGGGGCAGGGGAAACACACAGAGAGTGTGGCAGCTGAAGGT
-ACAGCCCTGGCCTGGCCATTCTTTCTGTGGGGCCCCAAGAACGCTGGCAGACAACACGGa
-gaacttggtggaatgtcagagacagcccacccaaagtgctccatttcacagatgaggcca
-ctgagccttcaggactggggggtgcctagattaggccacccagtgagtcaaggactgagc
-tgacatgggcatccaggtgtccCATTGTGgtcatcaccatggcctgcaaggacctcttgt
-tctgatatctctgatctcagtctttcccactgccccacccctctctctttagccttagag
-atttcagcccttgaatatttcacaaacaccacaggcctctcacacctctgagcttttcat
-gttgtggggcctctccatggaataccatcctatatcctacctccttcttcactgcctctg
-ctccaggaagccttccctgattctcaggccaggtccagtgcctcctctgggcatccacaa
-tctctttatcacagctctgatcacatcaggtggtaacaatggatgtgtctgttctccttc
-caaactgccatctctttcaagccagagccagacacacagcggtgctcagaatgtttgcat
-aatgagtgcataaataaatgaatggtgaatgaatgaatTCTCCAGATGCACAAGTCTCCC
-AGCCTGTACATGGAATGCAGGTACTTGGAGAAATGAGGTGACCCCAGAAGATCAAGCCTT
-AGGAAAGCGGAGGTCATTCCCTTCCCCACTACCCCCAGTACTGGAGTCTCCAAAGTCCAA
-AGGGGACAGCTTCCATGTGAGCAGGGCCAGAGAGGTCCAATGTGCATTGTGAATTGacag
-ccagccacacggctctgcaggatgaagctgcttaccccttcttgaattttttcccctatt
-tattccccactgcctctgctctagctagcctcgtgtttctcagactcttgtcactcatcc
-tgcggtttttgctgttctctctgcctggaaagtctttccccagatttggggcttgtctcc
-cctcgatgttgcctcctcagagaggccccctgtgaccactccagtaaaacgcaccaccat
-gcactttatcctcttgtcttgctttaccctccgtagtacctgttcatgtctgtcagttcc
-tgtttgcttgtttgtgagttccatgaggacaggaatcttctattttgtccctatgtgcct
-tacactgcagtgattaagacatacttgtggaatggatttttttaaaaaatgagtgaatga
-atAAGCACTCATTCATccatagattcattgtgggacctcaagtactttctgttctcttag
-gctcaatttccccagttgttcaatggcacagatgggattttgtgttctgtgagagcccct
-ttagtgcttccagaattggatatttctagggttcTAAGGCCCAGAACTCAGGGCCCTTCA
-TACCCCAAGATGCTCAGAGGGTGTTTGGTTCTCTAACTATGGGGGCTGTCTGGGCATCTT
-GGCCTGTTATCCAGTTCCCCTACCCCAATACAGGTGCCCAGGGAGGCTAGTGATGCTGAT
-GGCATGCTCTGGCGGGGGGCGGGGAGGGGTGCACCCAAGGGTGTCAGTTAAGGCACCATT
-GTCACAAATAGATGAAGACAGGTATAATGGCTGAAACACACTAAGCTCACAGCATGTGTT
-CCTGATCAGCAGATCCTTCTCTGTGGGATAGCAGGAACTCAGATTCCTTTCAGCTTGTGT
-TCTGCCCTGTTCAGTACCTGGTTTAAAGCTCACCGAGaagggcagggcttatgggaagta
-cagagcctgtctacctatgtcccattggccagaactcagacacacggccacacctacctg
-caagggtgactgggaaatgtagtccagccatgtgccagacaacacacaggaggaaaagca
-agaatttggtgaacatctggccCATTGACCAACGTTGGgccaccctcatttcttgcccca
-gtcatgcagtagctccttcctgtgtctgctctgacccctacaagctcttcttaagcagcc
-agagGACATGTATTATTCATCGGGTGAAGACCAAATTTCTCCTCAGAGATGCAAGGGCTA
-CGTGATGGCCCCTACTAGGGGGCCATCTGCtagggtgaccagctgtctggtttgccaggg
-attgaggggcttcctaggatgCAACGTTGACCTGTGTGTAGCCTTGtataatacaaccac
-aatcaagatatttaaacatacttaaacaagatactaaaacatcatcacaagactccttca
-tggtatccatttatggctccaccctccctctccacttccagtcctaatccctagcaaccg
-ctaatctgttctccatctctgtaatgttttattttttgagacagggtcttgctgtgtcac
-ccaggctgaagtgcagtggcacgatcatggctcactgcagccttgacctcctgggctaaa
-gcttctcctgcctcagctgtgtagcctggactacaggtgcatgccaccatggctggctaa
-ttttttattttttgcagaggtgaggtttcgccatatttcccaggctggtcttgaactcct
-gggctcaagtgattcttccacctcggcttcccaaagtgctgggattataggtgtgaatca
-ccacgcctggcctcccatctctataactgtttttacataaatattgtataatggagtcat
-gcagtatgcatctttttgagatttggctttcttcactcagcacaatttgtttggagattc
-attttagttttgcatgtattagttatttgctttttactgctgagtagtattccaccgtat
-gaatgtaatatagtttgtttaaccattcacccactgaaggacatttgggtattttctagt
-ttttcattattaagaataaaggtgccatgctcacttgtgtataggtttctgtgtatcctc
-tttggtgaaatgtctgtgcatatctttcacacattttaaattggatttttacattactat
-tgtgttttaagagttctatgtatatattctatatagaagttctttgttggttacgtgatt
-tgcaaagcgtgagatttatgtcaaggttcattttgtatttttgtttatttttttatgttt
-ttgtttgtttatttttatgttcgtttttaatttttgtttatttcgaggttcattttttat
-ttttcgtctgcggatgtccaattgctccagtatgctttgatgtaaaagctttatcaaaaa
-ttaattgggcatattggcatggatttattttggggctgtctcctgtattccatgggctat
-gtgtctttctgtctaccaatactacactgtactgattactgtaactatataataaatctt
-gaaattgggtagatggatccttcccactttattcttctttttcaaaattattttagctat
-tctagttcctctgccttttcatatatattttagaataatcttgtttatatctaccaagaa
-tcttgctgtgagtttgattagaattgcattaaacatgtatatgaatttgggaagaattca
-catctttactatattgagtctttcaatccaaaaacatagtatgtctctccatttgtttag
-atcttctttgacttttttaaataaatgttttgtcattttcagcatacaactcctgtgcat
-gttttgttagatttatacctatttccttttttctcccttagaaattatacatggtattct
-attttaaattttgctgtccgtgtgttcattgctagcagatagaaatacaactgatgttcg
-tgtgttgatcttgtatcctagcaccttgctgaactcatatattagttctaggagtatttt
-tgtagatttttttgggttttgcaacattgacaatcatatcaactgcaaatagcgacagtt
-ttctttccttctgatcttgtgccttttgtttcctttacctgctttatcaaacttgctaga
-acttccagccatatgccgagtaagtgtgatgagcatagacatccttgttctcaatcttgc
-ctggttcccaatcttagtgggaaagcattcagtcattcactatgacattagactgtagga
-cttttgtagacactctatatcaccttgaggaagatcctctctattgctacttttctgagc
-attttttaaaattatgaatggctgttgaattttgtcaaatgtttttcctgcacattggta
-taatcatttaatgtttattctttagtctactgatacgatgtattacattgattgattttt
-aagtataaaaccaacctttcttcaatggaataagccccacttggccatggtgtaccattc
-tccattatatactgctgaattctacctactaatattttgctgaggatttttgtgtctaaa
-tccattaagaatattggtctatatttctcttttttgttctgtctttgtctggttttggta
-gcagggtaatgccagccccagtagcaccagaagaacaaggcttactagaatagaattgca
-agggttccaggccaagtgcggtggcctatgcctgtaatcccagcattttgggaggctgag
-gtgggcggatcacttgaggtcaggagttcgagaccagcctggccaacatggtgaaacccc
-atctctattaaaaatacaaaaattagccacgtgtggtggtgcatgccagtaatcccagct
-acttgggaggctgaggcaggagaatcacttgagccctggaggcagaggttgcagtgagcc
-aagatcgtgccattgcactccagtctgggtgacaagagcaagactcctctcaaaaaaaaa
-aaataaataaataattgcaagggttccaacaagtttactgtcattggacctaaagcccac
-aaaagtaaacgagaactcacatgctacatttaaacagggaaactgctgcctgctaaacta
-aagtatgaaataagacctgaagttccaactgatgctaatactaaaatgactcagatgttg
-aaattgtctgacaaggattttaaagcagtcatcataaaaatgctttggcaaggaattatg
-aaatctcttgaaacaaatgaaaacagaaaatctcagcaaagaaatggaagttatataaaa
-ggatcaaacagaaattttagaaatgaaaaataccataactgggggaaaaaactttgctaa
-tggactcattagtacagtggagaagTTCAGtgatggacaaataccccaactctctattga
-atgggcaggatggccggacacataaaacatgccacgctgtctcctgccacaattccccag
-ccctgccatgctgacttcagagggactgagcttcagttgcccacggtgctgtctgggtaa
-cctgtccttcatgggctgcctgcccttcctgtttcactccttatgctccatgctatgctt
-cttgggatcaattctcaaatcaatttcttgaactcaaatccttgtctcagggttggcttc
-tggcaaccccaaaccaagacTAATTCTTACTAATTCTCATGACAACCTATAAGGTATTAC
-AGGTAAAACATGGAACAGCACCTAACCCAGAGTAAGTTCTCACTGGTAACTTTCATGATT
-GGTGCCTCAGTTTTGTTATGTATAAGACAGAGGCATCGAACCCCTCACCCTCTTCCTCTG
-GACTTCTTCTTGTTCTCCTCTTAAATCAAAATCTCTGCAAACCCACCTTTGTTCTTTGTT
-TTACCTGTTCTTTCCCAAGGGAAGGCAAACAGCCTTCTCCCTGTAGGATGCTCAGGCAGA
-CAAAGGAGCTGCTTCAAGCCAGCGCCCCTCCCTCACCAACCCCAGTGGAATCCCAGCCTC
-CACAGTCAGTTGGGTTGTTGTTTTTTATAATACCAGTGTGAAATAAATTGAAAAATTACC
-CATAAAATACAGGTTTTCAGCAGCTGGCCTGAAATTTCTTTCCATAAACAAACAAGTTTA
-AAGAGATGCCTGATGCCACCCGCCAATCCCAAACTTTTATGTCCCCATGTGGCAGTGGGG
-TCTGCCGGGAGATTTGGCCTCCTGGGCAAAGGCAGGCTGCTGGGGGCCACAAGTCACCCC
-TAGGTCTTTGGGGCTGACTTGTACTTCTCAACCGTATCTGTCTGCTCCATGAAGAATCCC
-CCAGACTCATCCCTCATCCCCCAGCTCCTACACTCagcatagacttgggagccaaactgc
-ctggatttgaatcagagatttccacttattcagtgtgacttcaagcaagttacttaatct
-atctctgcctcagtttccccaactgataatgctgataatagtagtacctacttcatagga
-ttgtttgtggattaaattagttaaatatacatgaagttcttaggacatggcacaagacca
-tgctgtataactgttagctattattAGTCGTCCAGGAGGAAGAAAAACTAGGATGGAAGC
-TACAGCAGGAGGCCTAGTGACATTTTGATTTTCCCACAATAAGCTTTCTCTGGAGTTTCC
-TTCAGGGTGTTTACATAAATGCCTGTCCAACACTCTgcagtttgcaaagcttgctacatc
-tgctatctcatttggatcaacatttaagccatggaaggagttaggacagaggttgtgatt
-atccccattacccctagtttacagaagaggaaactgaggcccagtaggtgaattgacttg
-ctcatgatctcaagaaggggtagagccaggaCCCCATTTCTGTAGCTTGAGGATCCGGGA
-CGCATCTTGATTCTTGTCACACACTGAAAGCAGGTCAGAGCCCTCCTGATCCTGCATCGC
-ACACTGAAGCTTGAACCTCATCCTAGACCACAACATAACCCTGGTCTCAGGTGGGGCTCT
-GACCCCATGCTTGACCACAGACTGAAGCCCAGATTAAGCCTCAGTATCGGTTTGAGTCAG
-AACTCTGAATCTCGCTTCACACTAGGCCCTGACTCCAGCCTCAGACTGATTCCTGATCTT
-TGTTATAGGCTGAGTCCTAATCCAGGTCCCATATTGACTCATGATCGTGATTCCACACTG
-TGCCCTAACTCTGGCCCCAGACTGAGCCCCCAGTGGGAGCCTCTAACTTGGAACTCCATC
-TCTAACCCCATCTTGAATCTTTTGTATAAATCCAATTGCCCATCTTCCCCAGGCTTTGGT
-CCATCTACCTGAAAAACAGAGTAGGGAAGAAAGTGCTCAGCACCCTTTGGAGAAGGCCCA
-GGCACCAGAGCAGAATTTACAATCCACCACAGGAAGCAAGACCCTCATCTCATCTCCTGT
-GTTTGCAACTTCCTCCAACTCCACCCCAGCTGGGACAGCCTCAAAGACCCCAGTCCTCCT
-GACGCCAGAACTCTGAGGAGTTCTATTGTTTAGGTGGTTTTCGGTTTTGATTATTTAATA
-CAGTCATTTCTGGTTTTATATTCACAGCTTTGGTCAGCTGGGATAGGGTTTTTCTTCTTC
-CTGTGGTTGAAGTTGTAACACTATTTCAAACAAAGGAAAAATTTTAAAAACAACAGTGAA
-AATATTTTCAAAATATGTTCACAATCAAGTTAATTTCTTGGTAATTGGCTGGGGAAGAGA
-AGGGAAGGACAAAGAGAGATTTTTCATAATGAAGGGACAGCAGTTCTCTGGTGGGCTGGG
-GGACAGCAGGGTGGGGGCCAGCCTTGGGTCTCAGTCTACACAAAGGTGGTAATGGGCTGG
-GGGAGATAGGGATTGGGAGCTGGACCCAGGACAGTGGATGAGAAAAGCCAAGGTCAGGCC
-TCTAAATGTCCCACTCTGGAGGGAGTTAGGACCCGGAGCCTATTTTTCTCTGTGTGCCct
-taattctgggcctcacttttttcatctgtgaaatggattcaataacacctgcccaaggag
-gactcttgaaattaaaagacaaggtggctgcaaagcacccagcacaaggcctgacactga
-ggtgtacaagtaatagtagttGATGCCATCATTATTATTTGTATTCATGGTTTGCCAGCC
-CAGAGGCTgtagaacctggtggtacagggaagcctgagtcagacaacctggattcaagcc
-ccagttgtgccacttactacttatgtgacctccggcaagttgctgagcctctctgacctt
-tggttttctcatccataaaatggggatagtaactgagttgttgtgaggatcgaatgcatg
-actgcatgcaaagcacttagaactgtgcctagtgcatagtcagtgccaagtgtcagctac
-tactATCTGCTCAAAAATATTTCATGCATACCTACTACTTGCAGGTTGTGAATTGATTGA
-TTCTTTTTTCATTACTAAGCACTAACTGTGTGCCAGAGAGCAGTGAGAACCGAAGACACA
-GTAGCTTCTATCAAGGCCCTCATCGCCTGGTGGGAGACTGAGAAGGAAAGAAGGCAATGA
-TGACAAGGTCAAGTAAGTTCTAAAATCCAGGCACAGGGGAGGAGCTGTGGGAGCCTAGGG
-GCAAGGCCAGAGAAGGGTTCACAGGAGTTAAACattcattcattcaacaagtatctactg
-agcactggcccaaggctgaggattcagccaccaccaccacaggtccacatctggccttcc
-tggagcttgcagcctagccggggagacaggaacaatgaagacacacacacttagataaca
-tgatggtggtgatggtgagtgccgcgatgaaaaccaaagccaggggaggggatagagaat
-gacagacatggtcaggggaggcttctctgcaaggtgagcagagatttggataaagtgggg
-gaacgagtcctgtggaggtctggggagggcattccaggtggaggggcagtaaatgcagag
-gcccagaggcctctccatgggctaacgagggaggcagagggagggagggagtggagggag
-caagggtatgtgtaggagggaagcagggcagGAGTGGGAGCACAGTGACTCGCCTGCATG
-TATTCCCAAGGAGATGGGAAGGAGAGGCGAGCAGAGGGGTAAAGGAGAGGAAGCAGGAGC
-TGCCACTTTTGAGAAGCACTGAGAAGAGAAGCAGAGGTGGGTGGGGAGGGGGATGCAGGG
-CCAGGACTGGTGGGCAGGGGCCCTGCAAGCCCTGCTTACTGGAACGGGAGAAGGCTGGGG
-GAGGTGTTCCAACCTTCACAAGCCACAGGCAACCACCGAGTGACATTAGACAGGGAAGGG
-ATGAGATCAGACCCTGGCATTAGAAAGGCTGGAGTTCTGGGTCCTTCATGCTCTCTCCCT
-TAATTCTTACAAGAAcccatttcacaggtggggaaaatagaggtcccagagaggttcagt
-gacttgctccaggtcactctgaaaggacacagatctggctgcctccagctccccctgctc
-cttgagttccctgctgtcttccctggcctctgcctctGGGCCCAAGAACTCCCAGCCCTC
-AGCATCCATGGCCTCCCCCTGGCCCACGAAGTCCTCAGCCACCTCCTTCCTGGAGGGCTC
-AGCCAAAATCAGACTGAGGAAGAAGTGGTGGGCACCCACCTTCTGGCCTTCCTCAGCCCC
-TTATTCCTAGGACCAGTCCCCATCTAGGGGTCCTCACTGCCTCCCTGCAGCCCCTTGAAA
-CTTCTGATCATTCAGCTCCTGGGATGTCCTGGGCAAAGTTATCCAGGCCCAGGTCCCTGG
-CTCGTGGCTCTCCTCTCATTCCCTCAGTGGGTGCCCTGCCCACACCAGGATTGCATTCAC
-CATCCAGGTGCTTGCTGACTCGGgggcaggctgagtgctgatgagttaatgccccccagg
-agcacccctgagtggatgaggatgggagttggtggaaaaacatttcagtcccctcgcccc
-ttgggtgggacagttctgttgccagagttcccagtgggagggatgcccagttgccaacTT
-GATCCTTATCACACCTGTGCTTGCTTCTTTGGGACTGGCTTCCAGGGAATCTATTTGGAC
-GGGAATTCTTGTTTCCAGGTCTGCCAAGATAACTGCCAAGCCTAGTCCATTCTACCTGCA
-AAATAGCTCTCCAACCCTTGCCTCTGTGACTGCCAGGTCTGCCGCAGCCTCCTGCATCTC
-TGTTTGTACTCGTGTAAAGGCCCCCCAAGCTGTCCTCTTGTTTTGCCCTTGCAGTCTACC
-CCTCCTCCCTCCCAAGGAGCCAAAGGGGTTGGGTTTTAAGGAAAACCTGACCATGGCTGC
-CTGCTGTTCTCAGGCTAAACAGCACCCCTGCAAGGCCCACAGGCAGCCCACCTAACCGTT
-TCTCTACATctctgccccaagccacactggtcaccttcccatttttcaaacacatctact
-tatcaccttctcagggcctttgcacttgctgtctcctctggatggaacactcccagtctc
-ccatggttagctcattccaggcttcagttcaaatgtcacctcctcaaagaggccttccct
-gaccatgcgatggaaactcccatccttcaccactacgcttggcttagccctcttagcttt
-gcttcctctcctttgaactgtttcccatgatctgaactagccttgtttgtttgttGTGAT
-GACGATTGAGCCCCCCAAAGCAGAGAACTTGTCTGCACACACTGGGCATCTGGCTGGCTG
-CGGGTGTTGAGCTGTGAGATCGGCTATGTTCTTGCCCTGCTGCAGTTGACCGTCTGGTTG
-GACAGGGGCTGGAGGGATGAACCAGTTGTGGAAAATGCCACAAAGGAAGAGGAGTAACCG
-GCTGCAGGGAGAGTGGGAGGGCACACTCACTTGGGTGGGTGGATTCTGTGTAAGAACAGG
-GACCTAccaaggtgggcagatcacttgaggtcaggagttcaagaccaccctggccaacat
-ggtgaaaccccgtctccactaaaactacaaaaacattagctaggcgtggtggggcacgcc
-tgtgatcccagctacacgggagactgaggcaggagaatcgcttgaacctagaaggcagag
-gttgcagtgagccgcgatcatgccgctgccctccagcctgggtgacaagagtgaaactct
-atctcaaataaataaataaataaataaataaataaataaataaataaaataaaGTGCGGC
-TGCATTTGCCTCCCAGGGCAGCCCAGGTGTAAGCTATACAGCTTGGTGGAATGTCTCCAT
-GGCTTCTAGGGGATGGCCCAAGAGAGTTCCAAACACATCATATTCCAGTGAATGGGactg
-gtcagcccacagccacatggccatgtccagctgcaagggaggctgggaaatgtaatattc
-tgcaggccacccatgtgctcagataaaaataaagagaatattattcaagagaaagggaga
-cagagtgtgggggatgactgatgatccttgccataAGCATCAGCAGGAAACCACCAGCCC
-CCACTTCCCTGTTTCTGCATGTCTGTTATTTGGTCCTTCCTGTGTGTGATGGAGGGAAAG
-ATGGCTGTGTGTGATGGAAAAAAAGATGGTCCTGAATGAGCCTGATTCCACTTCTGGGTT
-CCCACACCCTCTGGTAATTCCCTCCTTTCCCCCGTTTCTGCCCTGTATCTCCTACAGTGT
-CTCCAGCCCTCCTTCACTCCATTTCTCCCTCTCATCATAGACTGTCTTGGAAGTTCTGCC
-TACAAATGTGGCAGCTGCTGTCCCACTCTTCTCTCCATCCCCTCTGGAAGCCTGGCCTCT
-CCCCAACTTCCTGCTCTGTTCTGTAGCTCACTCAGCGAGGACCAGTCCCTCTCTGTCATG
-AGATCCACTTTTTCTCTCCAACCTCCCTGTGGGCCTCTGTCCTGTCAACATCCCTCCTGA
-CACTCTCTGTGACATTTGACCACCTGCTGGAATCAAAGAATGTGGGCTCTGCAATCAGGC
-AGGACAGAAATGaagatgcttcccctttctcagcctcaatgatctcatctgtaaaatggt
-gtgaagaatgtccacTAACTAATTGAAACAAATTTTTATTTGCAGCCATGACATACCATG
-CATTTAAGTAAGCCCATATGAGCACATCTGAAGGCAGTGATAATACAATCAATAATACTA
-CTGGGAGTGCCTAGCTCTTACTGAGTGCTAAGCTCTTCAGCACGTCAGCTCAGAAATGTG
-GCCCCTCCCATGGCCCCGCCTGCACTCTTTTCTCCTTTTTTGCTTAACTTCCCTTTTGTT
-GCTTCTTTCTTGAGTCCATTTTTGGCTCTGTTCTCTCCTCATCTCTGCAGCTTTCCCAAA
-TTCTTTTTTAAAtttttatttatttatgtatgtatttattttgagactgagtttcactct
-tgttgcccagactggagtgcaatagcatgatctcggctcactgaaacctccacctcttgg
-gttcaagtgattcttctgcctcagcctcccaagtagctgggattacaggcgcacaccacc
-ctgctcagctaattactgtatttttagtagagacagggtttcatcatgttggccaggctg
-gtctctaactcctaacctcaggtgatccactcgcctcagcttcccaaagtgctgggatta
-caggcatgagataccacatccagccAGCTCTcccaaatccttttcccagctctgacatgt
-tgccacacttcatctacctggctggacacctccacttgaagtcctgtggacatctcaaac
-ccagggtgtctaaaatagaactcagcctcttcccctgcaggcttCCAACTCTGGAAAGGG
-CCCAACCACCTACCCGCTGGGTCTGTGAGCCAGGccttcctctcaggcccctcctctctt
-cccctggccccagcctccttccccacttccccacccttccccaccccAATGCACATACAG
-TTGCTCAATTGCTAGTCCTCACATACTGCATTGTGTCACCCCACCTGGTCATTGTCCTGC
-CCATGTCCTCTCAGCACTCACCTTTCCATGTCCAAGGAGTCTTCTGCAAACATCTGCAAC
-TGTCTGaagccaaggtgctggagaactaagagagagtccccaagcagccctcagccaatg
-accgatgggaggtggtggataaataccagccccctgccctgagttgggagacctgaggtg
-tgctcttcactgtctcaagaggacctcaatggggctgagctcccgttgcccatattagca
-attcacttattatgcatcagtggcttcagtggtttactgcagtgtcttcattgtctcTGG
-GCCACATAATTTTATGGAAGTCACAGCCCTTCTCTCTAAAGTCCATCTATGAAGCCACTT
-TACCTCTGTTTGAGAAGCACTGGTCTCCAGGATGACATCTATACCCCTTACCTGGCATTC
-AAGGTCAACCTGCTGACTCCACCATGTGTCTACCCTTCCATGctttgctcatgctcttcc
-ctcctgcctgaaatattcatcactttgcttaatgcttgtctgagttgcacctatccttca
-agactcagctcaagttcacttcctccgggaagcctttcAGACCACATTAATCCTTCGAGT
-GTTCCCCACAGCCCCAAGAATCTGCTCCCCACATGTGGCACAAATAGTGCCTTGGGTCTT
-ACCTGGtttgttccttcagcaaaccaaggttaagttagcattttctctgtgcaaggccct
-gagagctgggagagctggagacatgaggtgagtcaacacagaccctgctctgaggtctgg
-gcagtccagtcgaaagacGTCCAGGACATGGGGTTGGGCATTCCAGGCAAGACCATCAAC
-TCTACGAGGAAAGGGATGATTTTAATTCACTATGAGAAATGAGTGAATCATTTATTTTCT
-TAGCTTAAAACAGGGGGTGGACAAGAGACTGACtctggcccaccatctgtttttataaat
-aaagttttattgaaacacaactatatttcttcatgtatcacctatggcctttacactaca
-atgtacgagtaattgtgaaagagaccacgtggaccacaaacactaaaatatttactgttt
-ggacccttatagaagttccctggccctggcttgaaacactaatacttgtttattatttca
-cacagtttctgaaggccagaaatttgggagtggtttagctgggtggttctggctgagggt
-gtctcaggaggttgcagtccgcagggctgtctgagtctcatcataacacagcagctggtt
-tccccAGTGAAGACTTccatgctaggcacctcacacacagcctcatttaatcctcataaa
-catccttaaaggacagctatgattattacctacatttctcagctgaggaaaccagagctc
-agagagaggaagttatttccctaaggcaaggacagacctaggactggagctcaggttcct
-ctgcctccaaagccccgctcctaaccactgggctgtccttctgAGCACCACGGGGTCCCA
-GCAAATGATCTGTGGCTGGGGATCCAGGATCATTGTGATTTGACTCAGATGTCCCTTTGC
-CAGGGATATGGTCCTACTCTCCCTCCAGTTACCTGCTCCACAGGTGGGGTCCACCTTCTT
-TCAGACCCTCTATCAAGTGAGTCAATGGTACTGTCCAATTCCTTCCCAATATCTTTGCCA
-TCCACCCCCACTCTTTTCCAGCCCCACTGCTTCGGTCTTACCTCTGGCCGTCTGGGCTCC
-CATCTAGAGACAAAGTCAGGGGAGGTGATGCTTTCTGCTGATATTCCTTGATTTTTTCCA
-CCTGATTCACTTTCAGCTCTCCTCTGCCCATCCTCTCAGAAGATGGATATGCAAAAAATG
-ACCCCAGAGCCATAGGAAGGCCCCAAATGCATCCCAAAGTACTGCAGATGATACCTCCTG
-ATCAAGCCCTGCTGCTAATCAATCAATAGAATTAATATAATTATACAATTTCATTTATTC
-AGCCTTCTACCTTCACaaatgcctggaccttggtttcaggtaaactggctcgagttcctg
-cttggtctttgccaacatgtgtccatgggcaggtcttagtctttcctttggcctcagcct
-cctcatctcaggattgctagagggggttaaaGGACATTGCATTGTAATTTGCTTGTTTTC
-ACACTTGGTACATAATACTTGCTAGAACCATGATGCAAAGAGCAGTCAGTCCGCATGCTT
-ATAAGGGAAGCAAAGATGTTCAGCATTATAGAATGCATGGCTAACATGGCCCCAAGATGG
-TCCAATGGAAAGCTCTTCTTCTAATCAAATAGTGAACAATCCAGGAATAACCAAAGAAAA
-AGTtcatcttattatttgttttcacagcagctccatgaggcagaattaattttgtgtgtt
-ttgcagatacgggaacagtaggtgagagcatgagtaactcagctcaggtcacacagcagg
-tgggagagaactggaacaagaacccagtgctctttctgctctacccactgacccATCCTC
-TCACGCATCATACACCCATACTCccatccacccaccttcccattcatgcattcacccatt
-cacccaccttccatccatctaccatccaCCACGTACCTACACTCCCATCTACCATCCAAC
-CACATTtccattcacccatcctcccatccatcaaccctccaatccaccacccacagacct
-tcccatccattcatttacccatccacatattcacccaccctcccatccatccatcTACTG
-TCTATCACCTACTCATTTTCCCATCTGCTATTCACCCCCACCCTCCTatccatccattca
-accatccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccat
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-accctccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccac
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-acccTCCACCcatttatttgacagttgctgagagcctactaaccaccaatcactattcca
-ggcactgagatatgactttgagctagacaaagtcttgcttcatggagctcacattttggc
-tgtgaatggcagcaacagacaaataaatacgtagtttacgtgaggtactgcaaagaaaaa
-ataaagcaggggagtgatgtcaggagtaactaaggcaggatggtagtcagggaggtcgtc
-tctgaaacgggacatttgagcagaagcctgaaggaagtgagctccctgacaacttgggag
-aagagaatttcaggcagagagaacagttgtacaaaggcccagtggtaggaatagaaacag
-cttgatgggattaagaatcaacaaaaaggtcattatggatgaagcagaatgagggaggaa
-acccaagccagctcgggcttgatcatggcaggctttgtcagtcactgtgagtaaccagac
-tttatttcaagtgagttggCCAACAGTGTCTCCCCAGTAGTAGAGTGATTGCTCGTCTGC
-CAGAAAAGGGGCACAGAGCTCTGGACATCAATACTTGCCGATCTCTCCTTCATCAGCCAC
-CCAACCCTGGCAACAGTTTTCAATTACACCTGTGAAAACTTGTGGGTTAAACAGCTGAGA
-TCCATGCCTCAGCTTCTATAGGTGATAAGCCTGTCCTTCCTTAGGTAAAGAAAGGAAGGG
-GCGAACCGTCAGtgagcaccattcacataccttagccggttcagcttcaccaccctctga
-aggtgccatcagcagctcccttttgctgaagagtaagcggaggcccagagaggtcatgtg
-gtgtgtgcttgaggtcacatggctgagaggtggcaccagatttgcccaactctcaagtcc
-catagtctaacgtttcactccacTCAGATTCAACCTCCcaagaaattatttgtttgagta
-cctactaggcaccagactcagagtgagaggcagttgcagattcactcagggccagttttg
-gaggccagcttcacaatcacccagcacagcccatctttctacttgtgaggaaacagaggc
-tcagtgaaggaatgcctttcagatcacagagaggatgaagccaggatattcaaacccagc
-ttattttACTACAACTCTATATGGTAGGAAAGAGAAAAGCGCCCATACAATTTCAGTGGC
-TTGACGTGGAGCCTGGCAACAGATGTGTTCTTGGACTGTTGGCTATAAGACAAACCAGCT
-TTCCCCACTGACTGTCACCGTGTTTTGGGAGACAAAGCCTAGGACTTTGGTGTGTCCACC
-GTGGGTCAATAAATGCCCCCAAACAAGCATATCTTGCAAAAGTGGGGACTTATTAATTCA
-TTGATTCGTTTCTTGATTGATCAATTGATTTATATGTCCCTGTTGGACAAAGGGTTTGAG
-GCAGCCTGGGAAGGAAGTGAAGTGTGGAAACTGGTCATCTTCTGTGCTTCTTACATTCCA
-CTCATTGGGAACATCAAAAAATGAAAAAAAAATCCAGCTGCTACATAGCTGGGGAACAAA
-TTCTTGGTATGGAAGTAATTCTGCTAAGGCTAGCCTCCTCAGAGTAATTCCAAATGCTTT
-TCCTATTTTCAAATTTAATTAGGAGACATTTCTGTAGTGTGAGTCATCATTTAATAATGG
-GGGGTGTTTATTAGGGAATGagtggaaagagaacaggacagctggataattcaaatccca
-gttcttcaagtctctggctgtgtgatcttgggtgagccacttcacctctctgaacatcag
-ttttcttgtctttaaattgatatttacctggcaaggtttggggaaggtctcaactagatt
-atgtacataacaagcttgccagtgttagtacataataggtgtttaataaatattaactGC
-CTTCTCTTCCCATTTATTTTCTTATTTGGTCTTCTAAACAACCTTGGGGACCATGATAGG
-TATGTTGTTTGCTTTCTCTAGCATGAAAACAGCCTCCCAGAAACTACTCAGCCAATCCTC
-TGAAATGGTATTTCCGGTCAAATCTGATGCACCTTCTGAGACTTTTTTTTTTTTGTCTTT
-TCCAGTAAAGCCAAGCACATAGTCATTGTTAGTTTTAAAAAATGTATTTGGATGGGGTAT
-GAAGTTCAGAAGAGAAAGACATTCCTGGTTGGGTTATTCAAGCAAGGATCCCTGAAGAAG
-AGATGCTAGCATTTGGCTAGGTGATAGGAAGGGGACAGGAAACAGCAAAAGGCAGGATGT
-GGAGGCAGAATGAGTTGAAAGATGCTGTTATTGAAGGCGATGGTGGTAGTTTATCCCTGA
-AAGCCACCAAGAGCTCAAGAGCAGGAGGGAAGAAGATGAGTTTCTGTTGAAGAAAGACCA
-AAGTCACTCACTGGCTGATTTGTGCTTGGGAGGAGCATCTCTTTCCCCTGCTGATTGGGA
-GTCTTTTGTTTCCCTGGGACAATAGGCACTGGTCACTGAAGAGTGTGTCTGTCCTCCACA
-CTTTCCCATGTTCCTGTCTCTGGGGAACTCCTCCCTGACTCCGAGAGACAGGATGGAGTT
-GTCAATCAAGATGTCTGTCACTTTGCCTACCAGGGGAGAGCTTTCCAAGTGGGGCCCTGT
-TTTTCTGCTGGGGCTATAGGGGAGGGTCTCCATCTTCATGtgtcaggatgtagccttggg
-gctgctggtgtcatatttatgccacatggaatgaagctgtctgaagcaggaaaggatgat
-attaccaagcaaaaagagatgcaaagctgagtgtggacggaggcctgcttctgatcctgt
-ccatgtacttggatcaaaccatgcctgaactccatttggtttgcaccttatggggcaata
-agggaataagtaattctctttgtttattcaacaggatttctgtcacttggcaattctgat
-taatacaGACTTCTGATTAATACAGTTGGCAAATGAGAGACAAGTGATCTCTTcagaaat
-ggacagagcaggaaaggaacccaccaagcatggagaggttgaatgagagtctcttcttcc
-ccattgactcactgcagccctggatcaggttgctgcccttctctgggactcagttttatc
-atctgtgaaatgggCTGCAGTGAGTGGGAAACAAAAtcatttatttatgcccaaccttgt
-tgcaaaaatgatttaagacagcttacaaatgtattaaagccagagattaggaaaagaaag
-agataatgaaattgtgagaagggggagaaaaggtgaactcaaggatgaggttaggttatt
-gaatgcctgctgtaaagttctggacagttgctaaaggtgaacagacaagtttgttctgag
-attctttgtagccaaagcaagaaaaagaaaatgcagttacgtggatttgtaggaaaaaaa
-aaaaaaacaacccggttcctgagaagaagcccaacttttcttagaataaaagtctgaaac
-aattttccttgtggttccccatcaaaaggactttgtgaaataccatgagcaaATATAAAA
-ACCAGAcaggttgagtatcccttatctggaatgcttggaaccagaagtgtttcagataac
-agattcttttggattatggaatatttgcatatacagtcctacctcgggtataggacccaa
-gtctaaacacagaattcattcatgtttcgtgtataccttatacaagttacctgaaggtaa
-ttttatttttctgtgtgttgtgcacctgcattttgactgcaacctgtcacgtgaggtcag
-gtatagagttctctacttgtggcatcatgttggtactcaaaaattttggattttggagca
-ttttcaatttcagattttcaaattacaggtgctcaacATTTAacaggctggggtaaatag
-ttgcaacatatttaatagtcggaggattaaaatccacaataaaataagagctcccacaaa
-tcaataaggacaaaggaaaaaaacactccatcaataaaatgggcaaaaagggataagaac
-acaattcacaataggggaaatAGctatcaaattagaaaaaaatatcagaagaatgggtaa
-tatcagtgttggtcacagtgtggggaaataggcatgctcagacacCttaacttactttta
-gcgtttctcgtcacctgacacaccatatatatacgtctctacgtgttggggatctctctc
-tctgaccagattgcaagttccatgagagtaaggactacctcctcatcactgctgaattcc
-cagaacctagaacagtgtgcccagaacagagtagatccttgataaatatttatcaagtat
-gtgagtCAATAAATAAATGAGTGAATGAATGGACAGTGTGTAAACTGGGGTCATATAttt
-ggcaggcaatttggcaacatttattagaatgaaaatgcacaaacactgatgcagacattc
-ctcctttagccatacgctcgactgagacatacaaatattcaaaggaatgggtcaaagagt
-gtttttgtagtgctgtttaaatggcaaaagttggaaatgacctaaatgccaaacaatact
-acactaataaagttatggtttattctgactgtgaaatattgtgtgttcttctttaaaaaa
-atagtgttttcatactgatgtggtcagatctccaagatacattatcaaaagaaaatagca
-agtcacagaacaataatatgtaacatttacggtaaaaaCAAAACAAACTTTccaggcgca
-gtggctcacgcctgtaatcctaacactttgggaggctgaggcgggtggatcacgaggtca
-ggagattgagactatcctggctaacacggtgaaacctgtctctactaaaaacacagaata
-tcagccaagtgtggtggcacgcacctgtaatcccagctactcgggaggctgaggcaggaa
-aatcacttgaactcgggaggcggaggttgcagtgagtcgagatcacgccactgcacccca
-gcctgggcgacagagagagactccatctcaaacaaacaaacaaaaacaaacaaacaaaaa
-acaccacaaacaaacaaacTCAGTCTGTCTGGTTAGCTAGCTActatctatccatctatc
-tatccatccatccaCTCGCTTACATTGGTCAACCTATCAGTATAAACAAATAGAAACATA
-TCTAGAAGGAAATACCAAGCTGTTAACAGTTCTTCAGAACAAGGGAATAAAATGTGGAGG
-TTTACACAAAGGGCTATTTTTACTTTAAAAATAtatttcagtataatatgcacttaatgt
-gcatagataggttggcaaatgataaagctttacaaactgtatttatccctgtcagcatca
-ctcagatgaagaaagagatatgaccagcaccccagcagccctactgttatcctctcaagg
-aaaactatcactgcccttctattacttttatcaccctagactagttttgctaatttttgg
-actttatataaatagaatcaaaaagtggatacaattttgtatctttcatctttggtgcaa
-tattctgtttatgtgaATATTGCCAAATGGCCTGACACTCCAACCAGTGTGGCAGAAGGC
-CTGTTCCCCCCATGCAGCCACCcaatacattttaactaacctgtagtctgtattttgttc
-agtcccagtaatgtcctttacagctttttttctagtttgggattacatgttgcatgtagt
-tgtcatgtctctttagtatcctttaatctggaacagtttctcagcctttctttgtctttc
-atgatgttggcctttaagaaaaatataggttagttgttttatggaatgtcacatccctca
-ctttgggtttgtgtgatgtctcctcatgattagactgaggttatgcattttgggcaggaa
-tatcttgtaaatgatgctgtgttcttctcagtctatcacattaagaggtacacaatgtca
-atttgtccctttattagtgttaactgatcatttggttaaggtgacatccagtttctccac
-tgtaaagttgtttactttttcttttgtaattaaaaagtaattttaggaagctactttaat
-atctttatctattaaatatccttttccttgtcaaaGCCATGGTATGTTTAAAATGTGaat
-ttctttctaagttcaggggtacatgtgcagatttgttacacaggtaaacatgtgccatgg
-gggtttgttgtacagattatttcattgcccaggtattaagcctagtacccattagttatt
-tttcctgatcctctccctcatcccacgctccaccctccagtaggccccagtgtgtgtcat
-tctcctctgtgtgtccatgtgttctcataatttacctcccacttatgagtgagaacttgt
-ggtatttggttttctgttcctgcattagtttgctaaggataacggcctccagctccatcc
-atgtccctgcaaaggacaggatctccccttttttatggctgcatagtattccatggtgta
-tatgtaccacattttatttatctagtctatcattgatgggcatttaggttgattccatgt
-ctttgatattagtgctgcaatgaacatacagttgcatgtgtcttcatcatagaacaattt
-atatttcttctttttttttgtttgagacagagtcttgctctgttgcccaggctggagtgc
-aatggcacaatctcagctcactgcaacctctgcctcttgggttcaagtgattctcctgca
-ccaccctcccaagtagctgggattacaggtgcccaccagcacttccggctaatttttgta
-tttttagcagaaacggggtttcaccatgttggccaggctagtctcaaattcctaacctca
-agtgatctgcctgccttggcctcccaaagtgttaggattacaggcgtgagccaccgcacc
-tggcctttacattcctttgggtatatacctagtaatgggattgctgggtcgaatgatctt
-tctgtctttaggtctttgaggaatcgccacactgtcttccataatggttgaactaattta
-tactcccaccaacagtgtactgagcattcctttttcttcacaaccctgctagcatctgtt
-attatttgattttttaatagtaaccatcctgactggtgtgagatggtatctcattgtggt
-tttgatttgcatttctctaatgagcaatgatgttgagctttttttcatataattgttggc
-tgcatgtatgtcttcttttgaaaaatgtctgttcatcttctttgctcacttttttaatgg
-ggtagttttcttgtaaatttaagatcctcatagatgctgggtattagactgtggtcagat
-gcataatttgcaaaatttttctcccattctgtaggttgtcactttgttgatagtttcttt
-tgctatgcagaagctctttagtttaattatgtcccatttgtcaatttttgctttcattgc
-aactgcttttggtgtcttcatcatgaaatacttgcccgtgcctatgtcctgaatggtatt
-gcctaagttgttttccaggatttttatagtttgtgttttataAAATGTGAATTTCTTAAT
-TGAGAGTAATGGGAAGCATTTATTCCTGTGCTCCTGAGTCACCGGTTTTCCTTTTTGATG
-AATTTTGATAATCATTTTTTCTCACTAAAATTTAAAGGTTTAATTTTTAAAAACTGAATG
-GTTTAAGCTTAGCCCTATAGTTCTTGAACCATGATTTTAATAATAATGATTTTTTAATCT
-TCATTGCTCTAGCACCTTTAAGAAGGATTCGTTTGAAAATTCACCTGTGTCTCAACCCAG
-GAATAGGCTTGGCCTTCCTTCTCTGATGGCAGCCAGGGAGCTTCCTCCCATATACCGTGC
-CCACGGGAAGGAACAGAAATGCTTCCTGTCACTCCCAGGGGTCTCCAGCTGTCATAAGCT
-GCCAGCTGGAGGTGGTCCAAGCCAAGATTACAGCCGGCCTTTATCCTATAGTTATCACCC
-ACAAATCACCCCCTATCCCCAACCCAGGGGAGTCTCTCTGTCCATTCCATACCCCGGATA
-CTGAACTCAGCTCCAGAACCAGGGACCTCCTGCCCATTCACGATGGCCTTGAGCTCCCAG
-TGCTGTCCCCACCACTCAAGATTGTCCCATACCACCTTTCCCACCCAGCCCAAACCTCAC
-AAGCCAGGTGCATGTGGTGGCCTCTAGGGAAATGAGGTTTCAAGGTATTTTAGCCACAGA
-TCTCTTTGCTCAAATAAAGCCCTACACAGAACCCCAGCCCATTCAACATTTCAAGGTGGA
-GCTGAAATCCTTTGTGGGTTCTATTTTTCTCTCTTTGCAAAGCATTTCCAGCTTGTGGGC
-TGATTGTCATATAATCTAGACAAGTGTTAATTAAAGAAATCACTCAGAGCCTGTATATAC
-AAAAGGTAAAAATTTTAAAATCTTTACAGCTAAAAATATATTTAATGTGGTACATTTAAA
-AATATTTGATACAAGGTGGGGATCCCAAACAAAGAGTGCCAGGGGCCTATGGTGAGCCAA
-CCTCCCACACCTCCCAAATAAATCAGTCATCTGGCTTTGTCTATCTCTACGCTCTTCCTA
-TGAGTGTTATCACACTCAAATTGCATATTGATGGGATTAACCCTTTAAGGTCTCTTTCAC
-TCCACCATTGGCTTAGTGAGGCAATCTAGTCCATCATTGTCTCCCCAGCTCTGAGAAGCG
-AGCACTATCATAAAAGAAAAGAACTATTATACAAGAAAAGATTGCTACAGTGAACTAGAT
-TAATGTTAACAGGCTCCTTGAGGTAAGATGCTAAAAAGCATCAGAATGAATGAGTGAGTC
-GATAAATGAGTGAATCCACACTGTTGCTTATGAGGTCTGTGGGTGATGACGCCCCATGTG
-CATGGCAGTTTCAGAAGGGCTTTCAGGGTTTAGATTCTGGGGAAAGGAATCCACTTCACA
-GACCCTGCTGGTGCCGAGCCACTTCTAAGAGACCAAGGAGCCTGGAGCCACCCCATTCCT
-CCCAGGGGGTGGGGTTAGTTGATGCTGTCTGGTGAGTGACCAATCGCATCAGCACCTCTG
-CTGACCCCATGGGACTCCGCTACCTTCTCTCCTGGACTCCTAAAACTGCCATTTCTCTGA
-GAGGGGGAGGAGGGCTTCTTGCTTCCAAAAGGACTAAGCAGGGTTCTGGCAATGGGGACA
-GGATAGTCGTTCCCTGTGGCAGGCTGATGTACAATGGGATGGTCCTGGGGCCACATCTGG
-GCACAGACCCCCATTATCTTTAATGGTGCTCTTGCCAGGGGGACACTGCAGAGAGGAGTC
-TACCACGAGGAGACCTGCTCTCCCCTCCCAAGCACTGGAGCAACCTTGGCCCTGCCCAga
-aaaaggcagctgtagggaaatggagctgagtttaaatgcccactgggcacttagtagcca
-tgtgaccttgtgtaggtgactcctcctcttcctctctgggcctgagtttcctcctccata
-aaatgaggcagtcatctttgcagctctgcacccacaaagtgccattgtgagggtcaaata
-agtggatgtaaaagggcttgcagagaaccctgcagatggaaggtgGACCTTTATAAGGGA
-GAAATAAAATCTTATTAAGGAGAAAATAAATTCCCAAGAATGAGCTGCCCAGCATCTTTA
-AAAGAAGACTGCAGAGTGGACAGTGCTCAtacctgaaatgttttttttattcctctacca
-gtcagcctcctacacatcccagaggaggcagtgccttccccagaaagccctgccaggctg
-cactctgtcctcccatcctgctgcctccagcacaatgctcatatctgactgtctgtctac
-ctgacatctcccccactggtctggtgctcctttgggaaggaactgtatctgatgcaacca
-ggaatttcagctcttagggcagagtctggcgcatctgaggcacacatcaatattCTGAGC
-CAGACTGACTGGCTAGAGTAGAGCTAATGGTAGAATGTCGGGGGCTGGTGCCTAAGGTTG
-GGGTAACTAAAGACGCAGGCAAGCCTCACACTCCCTTCCTAGAACCTTATCTGATTACTT
-TCTCCATCTAGGTTTGAGACGAGGTCTAGCCGATCCTGCCTACAGGCTGAGTGAAAGCTC
-TTTAAGGTAGgggtgaccagcttttcctggtctgctcaggactttcctggtttgagttct
-aaaacgtcccatttcccaggtaaaccagggcagttggtcatgctaCCTTAGTTACTAATT
-GATTCTCATAGTAGACATTGTAATTACTCACTGATTGTATATTACGCTTCTCCTTCCTCC
-CCCTTTCCCAGGCTGGCAGAGcccatctcttaggacagaggctgaaaacggaagatagtt
-tcccagcctctcttgtggtgaggggttgccatgtgaccgagttttggccaatgagacaaa
-agggaaagtctgctgggaacttctgggaaggggttttttctctctatctaccttcacccc
-ctctttcttcctgctttcggtcgtgagaatgtgatgattagagctgtgacagccatcttg
-tgaccacaaggaaacatccttaccacactctgaggggtaaaacgaaggacagtaaaagct
-cgacactttgatgacattgttgatcctctgaaCGACCCTAGGACttgaacaacattaaaa
-tgttacatgttgtttatcaaaagacatcattagaataacaaaaaggcagcctctgtgctg
-ggagatgatatttgaaatctctccttgaaaaggactcgtatacagaatactcaatgatag
-ataactcagttgttaaaaattggggcaaaacttgaaaagaaactctagaaaagagaaaat
-taaaatggccaataagcaaagcacacaaaaaggtctgaacatcattattcatcagggaaa
-tgcaaattaaaactacagtggggcccgggcctgttggctcatgcctgtaataccagcact
-ttgggaggccgaagcaggcatatcacctgaggttgggagtttgagaccagcccgaccaac
-ttggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtggcacatgcct
-gtaatcccagctacttgggaggctgaggcaggggaatcacttgaactcgggaggcagagg
-ttgcagtgagctgagatctcaccattgcactccagcctgggtaacaagagcaaaactcca
-tctaaaaaaaaaaaatacaatgggatacaatctcacacttaccagagtggctaaaattaa
-aaacactgaaaatacaaagtgtcggtgaggatgtggagaaactggaactctcatactcta
-gtaatactaataataggagtgtaaatttggacagttgctttggaaaactgctaagcaata
-gctactaaaactaaacacagacttacctgatgaccaggtatttacccaagaaaaataaaa
-acatgtccacaagaagatgtgtatgtagatgatcatagcagctttattcagaacagcaaa
-acacaagaaacaccgccaacgcctgtcaacaaaagaacagaaaagtaagttgtgatatat
-ccatacaatggatgtatatgttattttatgaatatataaaatggatatattggaaatact
-acatggataaaatagttactttttaaactacatagcagtgaaaaagaataaactactgac
-acgtagcaatatggatgaatcttaaaattatattgtgcaaaagaagctagacacaaaaga
-gtacatacagcatgattcatttctatgaagtttaagaatgggcaaaaccattctatgctg
-ttagaagttggttagtggttaccctttgcaatggcaggtggagcagtggggagcagtagc
-tgggaaggaggtatggggatgccaaatgggatgtcaagaatgttctacatcttgatctag
-atcatatacttgcaaaaaattccttcagccattacagctcaagattcgtgtgctttattt
-atgcaatacagcaatctaaaaCATTAAAAAATGAATAATCTCTATGGTTTAAGGCACATT
-TAATCGAGTATTCTGTTACTTGTAGCGAAAAGCACTCTAACACTCCTCAACACAATTTGG
-CGACAGAGGATGTTTGTTGGGTGAGTGATGGTAATACCCGTGGAATAGCATTCTTACAGG
-GAACAGGGCACATTCACGCcattaacacctgtcactctcacttcagtcccaccagggagg
-gtttgttagtttcctctaacagatgaggaaactgaggtccagagaatcgcactgacctgc
-tcagagtcacacaacgagctttttttttttttttttttgagatggagtctcactgtgttg
-cccaggctggagtgcagtggcatgatcttggctcactgcagcctccgcctcccaggttca
-agcaattctctgcctcagcctcccaagtagctgggattacaggtgcccgccaccatgccc
-agctattttttttttcttagtagagagaggttttgccatgttggccaggctggtcttgaa
-ctcctgacctcaagcaatccacctgcctcggtctcccaaagtgctgggattataggcatg
-agccactgtgcccagcctacacagtgagcttttgaccaatctagaatttgggcccaagat
-tgtttaatcccaaacccagtgctctttccgctacacttctctcaccctGGGCACATCCAC
-CAACAACATTTGTTGAACTCCTATTCTGTATACTTCAGGGAAACTTTATCTGGTCTCTAC
-TTCCACTGAGCTTGTGGTCTAGGAGAAGAACAAGAGTTTTATCTAACAATAATAATTGTA
-TTTTTAAGTGCTTACGTTTATTAAATACTTACTATCTCCTAGACCAGCCTTTTTCagtgg
-agtccatgtattgcagagtatactccactgggttgcaagaaaaacaattagtaattctat
-ctgtatatttgatctcatcttttaaaaattttcattttgtgtatatcatataagatgata
-atatattgattgataatatattatgtttttactttgtaaatgtacatattaaatatattg
-ggggcaatgttcaCTGACAAGAATGGGACACCTAAATCTTTAAAGACCCATTGGTCGCCT
-GATCACATGATCCCATCTGGCCCTCATGACACTCCTGAGGACCAGAttttttttgttgtt
-tttagagacagagtttgctatgtcactcaggctgggatgcagtggtacagtgatggctca
-ctgcagccttgaactcctgggctcaaatgttcttcctgcctcagcctcccaaagctctgg
-gattacgggcatgagccaccatgcGTGACTGAGAACCCGATGTGTTGCCCCATGTTACAT
-ATGAAgatacatctttaaggtaatgaatatcccaatcacccagatttaattcttaagcgt
-tgtatacaggtatcaaaatatcacatataccccccaaatatggccaactattgcatgatt
-aaaaaataaaagaaaaaaGAAAAAGAAACCATCTTTAGCAATACCCTTTTAAAAAGTgct
-ttttgtttgtttagctttctttgaacatttgacccaagtcttccctcactcagaaaacca
-ctctgtaaaacatccctcaacatgatttcctcacagacaaacctgtctgataatttaatg
-ctgctgccatttttttttctggagctctgaactttgatgcctatctggactagttttgct
-ctagacttggggcacagataccattaggaattcctttGTCTCTCCTGTGTTGAAACCACA
-GACTGCTATATCTCAGTTCATCATAGAAAATTTACAAAATAAAAGCCACAGAGATTCATT
-Cccctgcctgtgtctaagctcttgtccaagcccctctcacattgactctgggcttggtca
-cgtgacttgctttggccaatggcataatggcaaacatgacacaagcagcagctggaaaat
-tacttgtgcatatgagcctttgccctttcagctctggggaaccctgtgaccacaaccagg
-ctggcagcaaacccaggctggtttgctgaagtataagagaccgatggctaaatcatctct
-gttaccccagctgtgccaagccaaccagcatatatatgtgagtgaggccattgacgacca
-gctgacggcagacacaggagagaagccagccaagaccacatggagcccagcccacgccac
-tactgggctataggttcataagggaataaatggtggccgttttcaggcaatttgttacac
-aggaaaagctCATGGttcctcttcttggtttagttcctctttttggtggagcacagcccc
-tggtagcATGGAAGttttaaaacatgtgcaccaatcctttgacacttgtcccatcagcag
-atagggttcatgacaccttcccttgcttgggcctgtaccttagtaatgcagcaaaagtga
-catggcataacttctgaagataagttagaaaaggccctacagtttccacctggttctcct
-gggacactcactccggggtaagccagccattgaggaagaggtatgagatcaccgtgctgg
-aaaagctacatgtcaacacaccactcaacaatccagtcgagacagccttccagccatctg
-ggccaaaggagccagactggtgagtgatgtcatcttgggccctccagaccagctcatcca
-ccagctgaagaccactaagtgagctccatcaacaccacgtggaacagaatcatcacccag
-ttgcaccctccctcagtttttaacccacaaaattaatccactaattttggtgatggtttg
-tcatgcaacaatagataaccagaTTCTATGCCATGATGGGAAGTTCTGCAGTTTCATTGG
-GAAGTGGCAGGCATTCTGGGACAGAAAAAACTTGGGGTCATTTGTGCAATCTACTGCAca
-gatttttaatctctggtttcttactctctgttccttccagagagcttcttgttcacattt
-tactgctgcaatatctttatcactcaagggatattaattgtaggatttattttaagtttt
-ctcttgttccctggattcttttcttgaagaccttttaccccgccctcatggtttgctttg
-atctctgcacttcatgatagaaatttctaatgatccttggctgtctactcacattaccac
-tctggctggaaactgggtggggagggtggactggtaggcttttgtgtagggtccatgcag
-ggtggttgcatagggctggtgcaaaggggctggttggctttttctgtgatgcactctcct
-cccacccccaattaccgtatctttaggtctttgtcctggaagtggttctccagataattt
-tctgcctggggttggacattctagaatgagacgggtgaagggggctgaagatctcACCTT
-CTctgggcctgatgtttctagttttggagtttctttgttgcctttttttcagagaataaa
-cctccctttgcttgcccagaagtgagtggggttactacctggctgggcaggatgggggtt
-ggggacgtggaggtcccatgctccttgtacagattgctttcaatccccacttcaccagca
-gctcctccaagacctagtagcttcaatttttgaggcctttaggCAAATTGGCTTGTTTCT
-CTATGCAGCAATCCACCCACACAGCAGTCACCTACCCCATCCATTTAGCTTTGACTTTCT
-TCCTCTCGGTTATGTCACTGGCCACTTCATCCATTTCCCTCCTTTGTAGTTCAGGGTTAC
-AAATGTCTCTCGATTTCCTCAAAGACAGAGTTTTTGTTTCTGCTCCTTATTCTTGTTTTG
-GGGAAGTTTTTTGTTTGTTTTTTTCTTTTTTAAGAAGAGAAAAGGAATAGAAATGTCTTT
-AGTCTACTATCTTAAAGCCACCATTTCATTAGAGTTTTAAATGGAAAAAGCACCCTCTTA
-TATTGGACAGAAGTGTGTCAGCAATGTGGGTTTTGTGACTCTTACTGGAGTAAGAGCCTA
-CATTATACGCCAAGGTGGCTTCATGTTCTAGTTTTACAAATGCATTTGATACAGTTAATA
-AAATAGCAAATTATGTATTAAGGAGAATACAGATAAGTCATTGCTGGCTTGGCAGAGAGT
-GGAGAGCAGCCTTGACCAAAAAGCTTAGAGGAGGAAAAGTGGGGTGGAGGCATGAGGTTG
-ACCTGTCCCTGCTAAGTGCCACTGTTTTCAgctcacccctttccacctgcaggtccctgc
-tcagatgccacctccttggaggatccccacccacctgtcactttctctctactaacttgt
-tttatgtctgactgcctgccaatggatttgattgacttatttatctttaggtttgtcgac
-cccactagatcatgggctccatgaccagggggagctttgctttttcacctccatacactc
-ggtgcctgtgagcacctggtacatcagtagatgctcaataaagagttgttgagtgaacaa
-atGAATGAGCCAGTGATTGCGTGGATCCATGTTTTCTATGAGAAGGCAGAGCTCTGAGGA
-CAGACAGAGGCCCAGTGTGCATGAGAAAGTCCTGCTGGCCCAGGCAGTGGCCTAAGAGCT
-GCCTACCATGGCGGTCACTGTTCTTGGGGAACCACAGATGTTTCCCCTCTAATCCCTCCA
-TGGGGACCAGGGGGGCATGAGAATGGGAGAGAACACAAAGTCCCTTTATTCAGGGGAGTG
-GATTCCATCTCAAGACAAATTGTTACCTCCAAGGCCACCAGCCGCCCAGCCGGCCCATCA
-CCATGGCCTCCCTCTTAAGGATGTGGGCACAGGCCCGGCCAGAGCTGAAATTGCCCTGGA
-AACTAGTCTCCCCTTTAATTAACAGGGAGGGCGACCAGGCCTGCTAACGGGGTGGGGTAT
-GGAGTCGGGGTGGGGTCAAGTTCATAAAGTCCCCAAAGAATCAAGGCCTCCTTGTTTATT
-TTCCCGAAAATGTTCCCCATTACCCAGAACAGCATAGGGGCCAAGCAGGCCGCAGGCAGG
-GAAAAAGCTTTAACCTCCCCGCTGCTCAGCTCAGCACATCACTATTTGACTTGCATTTTA
-AAAATAATTACAAACTTAATGAAAAAATAACCTAACCCCCAAACAGGCCAGGGACTCATG
-GCCAGCATTGGCAGGAGCAAGCCCCTGGCAGCTGTGAGGATGAGATGCAAAGGGTATAGA
-GGAACCACTGGAAGACAGGGGACACCCTTTAGATGGACACTCCCTCTCTCTAGCGCCAGC
-TTTGGCTCCCTATTGCCCTTTGTGTCATGCCCAAATGTCTCAGCCCATGTCTTAGAGCCA
-GTTTTACTCAGGCCCTATGTGGAAGACACTGGAACCCAAAGAGGAAAGGAAGTTGCTCAG
-GTTGTGCATTGTGTGGGACCTGATGCAGGTAGTGAGGCTGGTTGGGATGGGTTCTCGGGG
-AAAGAGTGGAGGAAAGTGAGAATGTGTCTCTGTTACCATCTGAGCCCTGGCTGGGTATGG
-CCAACATGCCAGGTAAGCAGCCTTGGGAAGCAGGCACGATGATTATCCATCTTTAATATC
-CCAGGACTTGAGTCCAGGTCTGTCGGGCTTTTAGCCACCACACTAAGTGCTGTAAAAGGA
-GCTGGAGGTAGAAATGAAGTAACAACAATAATaataataagcagctttcatggattgtag
-actatgtgccgtgcactgtgccaagctctttaccatctcttttaatctttgcaataactt
-tatctggtaggtagtgttattgacccattttacaaacgacgcccagagcattggttcaag
-gttgtgcagctgggaaatggcCTGTACTCTTCTACCCTGAGAATAATGCTCTACAGTGAG
-TCAGGGAGTCTtgtgaggtctcaagaacagggaccttgtctgtcttattcacttgtgtgt
-cctcagagcccagaagagagactggcatataatagatatttaatatctgtgttgtgaata
-agaatgaaCAAATGCACCTGGACCTAGAAGTAACTTCCGATGAACCATCCCAGTTCTCCC
-TTCCCCATTCCGGATTATCTTTACTTACCTGGAAGTGAACAAGATATTAAGGGGCTCCAA
-AAGAACTGAGAAATAGAACTTGGTTTGAAAGACAGTAGGGAGCCACAGCAGGTCCTTCAG
-GAATGGAGTTCCAAGCTAGGGGAGTGATGGTCTTCCTGTGTCTTTATGGATTCCAGGAGC
-TAGTCAAGGTCAATGAGCCTTTAGCCAGAAGGTCAAGTTATCCCCAGTGGTAAGTGTTGG
-GGGAAGAGGAGGGCACTTCTCAGGAGTTGAGGGTCCCAAACTTGTCATGCTCATTGGTTT
-TGTGGCTGAGAGTGGCAGGTTCAGGCTGGCCAGCCAGCCTCTTCAGCTTGCCCATGGTAA
-ATCCCATGATCCTGGGTCAAGGACGCCCAAACATGGTATGTCCATAGCCAGCTGACAGAA
-TTCGTATGTCATTGAATCTTTCAACAATGGATTCTTTGAAACTTACAACTCTGGGGCCTT
-TGAGGTCCATCTCAGATTCTGAGGCTGTAGAAACTGTTCATTTTAGAATAATGATAGGTA
-CAAaacatttactgagtacttactactccagacattgtttacaaatatcaacgcctttaa
-tcctcacaaccaccccagaaggtagtaacaatgtgaccccccacttcacagatgtgaaga
-cggaggcactgaaaggtgtaacttgcccagggtcacTGGCCGCCTGGCTCTAAAGCACAC
-AGCACTGCCTCACAGACACTTAAAGTCGTTGAGACTTACACTCTTCAAATTTTAGAATCG
-TAGAAAGTCACAAGGTCAGGATCTTCAAGCCACAGAGTCTTAAAATCATAGCACTTTAGA
-ACCTGCCATCATTGACTCATCAAATTCTGCCGTCATAAAATCTGGGCATGTTATAATCCT
-GGAATTCCAGATTCTTGGGGACTTTTAAGTCAGAGAAGTTTAGatcctgggatattaggc
-ttggattacagaccctagcccagtcctctcatatagcacagggaaactgaggcccacaga
-agtgaCAGAAGTCCAAGAGAGGCAGAGCCTGGTGGATTCAGTGTCATGTTTGGAGGGAGA
-AATCGGAGTGAACAAAGAAAGCCCCTGGGCAGGCAGGAATCTGTTTGTGATTAGCAGTGG
-GTTTTAGTGTTGCCGAGGAATGTACCCAACGTTACCGTTACCCCCGCAGGTTGCTGCCTC
-CTTTCTTCCCCCTCAGATGCCCTCCTCAGAGCCCATCCTGGCCAGACTCAATATCCTGTT
-TCTACCACCAGCAAATTGAATTTTCAGAAGTTGGCCTCCTAACGAAGCCAGCTTAATACG
-TTGGAGGTTTTCTTTGCCTGCATTGCTATTTCTTGGTAGGATGCCTGCTCTTCAGGAGCC
-CAGAGAGGTTTTGCACACTCAAATCACAACGCCAGGAGGGATGAGGGACAGGAACTATGG
-GACAGGTGGCTGGGGGCTTAGATAGACCCAGAGGTGGGaatagaaatggcgtgtctcaag
-ggggaggtgacaggtccacagggacctccgtactgctcaggccacacctgggaatttggg
-ggccttcagtctttcagaaacattaaccaaatggggtttgtttagaggagggatggggag
-agatgggtgggaatcccatgCTCTGGGAGACCTTGAGCGTGGACTAGATGGAAAGAAGCA
-TGAATTCTAAAGTTCAGCCTCTCAGCTACTGCCCCCTTGAAGACAGACATGGGTGGAGCC
-CTGGGGTATAGACCTAAGATTGAATGGTGGAAACTCCATGAAGATTTTGGTTTTATCAAA
-ATCAGTGGTTCTCAggctgggcatggtggctcacacctgtaatcctgaggcgggcaggtc
-acttgagatcaggagttcaagaccagcctggccaacatggtgaaaccccatctctactaa
-aaatacaaaaattagctgggtgtggcatcagacacctgtagtcccagctgctcaggaggc
-tgaggtaggagaattgcatgaacatgggaagcagaggttccagtgagccgagattgcacc
-actgcactccagcctgggcaatagagcaagagcctgtctaaaaaaaaaaaaaaaaaaaaa
-Gcaatggttctcaaagtacagtacagtccagaatctgtggggttcctgagaccattccag
-ggcatccacatggtcaaaactatattcacaacaacactaagacattatttgttcttctaa
-ccctcagtggggttgtccaaagttgatatgacatgtgatgccaccatcactctgatagca
-atgaaaaaaattaatgcaaaaacattcatgatgaacaaaatactaaaactgtaaataaag
-agaagactaatactactgatttttcctttcatctcaggcttcagtgtgaatttttcaaaa
-tattgcattaaaatgtcctaattactgatatttttggcacacaaattttaaacctgaggc
-aagtgcctcgtttaactcactctagtcctggcTGtggatataatccacatcaacagaagc
-ttgttggggtcctcaataatttttaaggatataaagtgtgctgagatgaaaacatttgag
-ggtcactgataaaagggataatgttccatcagctcaaactatccaacaatggaggggatt
-atattccaaggtactgagttcccatcacaaggtgtgtacaaatgggggGATTAAAGGATT
-GGGTGTGGGGAAGAGGCCTAATGTGCAGCATCTCTTGCCCAGGTGCCTCCTGTGGTCCCA
-CCTACCTGGCATCCAATagatcttctcattttcccacttgaaagcttgcaatggtacccc
-actgtgctctgagcaaaaacccacctcttctccatggcctaccaggctctatgtgtcctg
-gccctgtctcccactcttttgcccctagcttgctctgctatccccaacctagcctctttc
-tatttcttcagcatgccaaactctttcttacctagggattttgcacacgctgttccctct
-gcctggaacatcttcctcttcactcttctcatggctgttccttgtatcttctgagtttca
-acttgactgttgcctccaggaaggcttccctgatcaccctatagtaagtaggatttctct
-gacatcatctctcaacctcttttttgcttccttcatggaagtcatcactgcttttttata
-tttacttgttggcatggatggttctcatctattctctccatgagaccatgagctcctcca
-gggcaggaagcctgactgttcagacatggggcctcagcacctgacccagcacctggcatg
-gaggaggcccttgagaagtgtttgttaagcaaataaaCAAATCCTTTatgaattagtgaa
-tgaatgagtaaatgaatgaaAGATTAAACAGAAAAGGCCTCTGACTGCTGATGCTCAGGC
-ACTCACCAGGAAACCCAAAGTAACACAGGTTGTTACTTTGATGAAACATCAGTAACCATG
-GCTGGATAGTGTGTGATGAAGTATTAAGCAGTAAGTGTTTGCCCACTACCCATCAGCGCT
-GATCAAGTTGGAGGAGAGGGAGACTGGCCTGGCTGCAGAAATCTTGGATGAGTTGGGGCT
-TGAACACAAGCCTTCAGGGCTTTGCCAAGGCAGGTTCCCCTGCCTAGTTTCTCTGAAGAT
-TCACATTGTATTCACTGTGAGGGCTCGGCTCAAATAACCCTGCCTCCTATGGCTCTTCCC
-TGACTCTTCTTGGGTAGGGTCGGAACACACCATCCTTGTTCTGGGTGTTATTGTATTAGG
-ATAACCACCCTTGTCTATCACTGATTTGAAGACATTAGCTTATAGAAATGTCCCGACAGT
-ATAGATGTTATCCCAGTTTAGAGATGAGAAAAGTAAAGGTCCCAGAAGAACTTACATTCC
-AGTGGAGGAGACTCATCACGGGCAAAAAACCAAACCCACGTGTTGTGAGTGATAAGAGTT
-AAGGTGAAGAATGTTGCCGCGGAAGAGGAGTGGGGAGACCTCTCTGAGGGATCAAAGAGA
-TGTGGGTACAAATTCCATCTAATAGTGTCAGCTAAAGTTCAGTTAACTGTTACCACTAAC
-AATGAGTTAGCtgttgcttccaggatgtctgtttcacgaggacagggactatgttcactt
-ttctgtccccagcacctagaacagtgaacaacacatagtaggtgttccatgtatggtgtg
-aggtgaataaaGGCCTGCctgcatcaggcgttgtatatgaattattttatttaatctcca
-tggtcagagaggtaagggttatcatccccattttgtagataaggaaatgagggcacagtg
-aagttaaagtctaatgacttacccaagaacacccagatagtaaatggtggagcccgagtt
-ggattcgaatccagtccaatctgtctcgtatcttagccactctcctacacAGccttattc
-tgctcactcactgtgtgaccagggcatattgcctaacctctcatccactgaggatgtcat
-tttctttagcttttgaaataatacccatgtcatagggttactgtgaaagtttggttcagg
-tagagctcttagattcctgtctggcacacagtgaCACCTCTTTTCAGGTGACCCATTCTC
-GTTTGATATTGTCAGCCATTGTGAAATAAGAGGGTATAGAGCAAAGCTTTCCAAATGGAA
-AAACCTGCTATGATTTCTAGAAAGTCTTGGGAAACTTTCTAGATCAGTTATGGAGGTTGC
-AGAGCAGAAGGCCTCAAGGACGAGATGCAAAAACAGCACCCATGCAAGTTGACTTGTAAA
-CTGCTTTCTTCATCCTTTAGGAGGAATTGCCCAagaggcagcatttatggggcatgccca
-gggtctccaggcactgtgctgagggctctgtatcccgtctgtcaatttttcccaactcta
-ttatacagatggcaccactgaggctcagagaggtgaagggacttgcccaaggcctcatag
-tgcatcagaaacagtcaggactcagctcaagaaaaggccccaaagcaagcactcccaacc
-acatgatctaAGACCAGGGAACAAGGGGACAATGAGAGTGAGGGCAGGAAAAACGCTGGA
-AGATGTACCAGAGACTTAGCACTTGACTGATGGCATCTTTCCAGGCCAGTGCCCACCCCT
-CCTCTCCTGGCCTTCTCTTCCACCTCCCACCCTCCTGGGTTCCTGCACCATTTTCTCACT
-GGAGCTCCTGCCATGCCTGTTATCTTCTgttggttcttgggaaaagactctgagatggag
-attggcgtgcagtgggtttattggggagagtgctcaggagtaagaccaatgcaggagtga
-ggaaaacaggcctgggaggagtgaacagctggcacaatggagttacaacagaaatctcag
-tgatcccacaggagctctggagcagagatggcccttcggagctgaaggatcgggtcaggc
-attttttatcatacaccaaccactctttggccacaggctgcacctggaacgaacgtgtcc
-ttgggcagggcaagtccctacagctgagggccattcccggctgggaaatatcagcagctg
-gcagtcccatcagctgggAAGGGTGTCTGATGAGGGAATCCATGCTAGCCCCCAGCCTCC
-TTTCCACCTGTCCACTGTTATCTGACAATAGCGATCATGCCACACTAGCTCACACCGGCA
-GAGCACTGTCTACCTCTCAGGCTCCCTACCACGTCGTGTGGTGTGtggattccctcattc
-catcctcatgacaaccatgagagggggacactttccacatgaggaaacggaggctcagtg
-agatgaagagcttgcccagagtcccaaggtgcaagaatgctgtagctggtattctcaccc
-aagcagtGGGACCTATGGGTCCTATCTTGGTCCCTTATAGAAACTCCTTCCTTTAATCCA
-ACTCGGCACTGAGTCCCCTGGagtcaaagctcctgccctccaaaagttcatcatccagtg
-ggggaagtcaagacatatacactggaaagataagggctggtaagtgctgtgatgagaggt
-gacctgagggtgggtgacagggatgtcctgcccaggaaggcaggtgagacaaagtcagtg
-agttcagcctcagtggatgaggagagtgctgtgggaaggatcggggcagggtgggcttct
-aggcagtgggagcacaggtgcaaagacagagagggtgaaagagAGGGGCCCTCCAGAAAT
-AGGGAGTGGTCTCCTGAGATGACATAGGGGTTTGGGGGAAGGAAAACAAGGTCATCAAGG
-TGGAGGGGCTCCAGCCTCAGGGCCCTGCATGATACAGTCCCTGCCCTTCCGTGAATATTT
-GCTGAACGAATGAATGGTTGGATGGGTGAATGAATCGCTGCTGTGGAGGGTGGATTGGAG
-GTTACAGAGACGGGCAGGGAGACCAGTGGGGGGTCCACAGCAAATGTCCAGGTAAGAGGA
-AATGGGCCCAACTTTGCAGGGACCACAGGGGTGAAGCGATGAGAGAGAGAAAGAGAGAGA
-GGAGCGGAACGCCGCTGGGTGTGGTGACCTAGAGCTTCTGTGGCCCATCTCTCAGTCTCA
-CCCTGTTCCACCTCCATGCCCTGCACCATGCTGCATCCCCTGCCTGGCAGCTTTTTCCTC
-TCCCTCTGCATCTGCAAGTTGCACTGGCTGCCCAAGCTCTGCTTCCTCTAGGAAGTCTTA
-TTGACCAATGCAGCTCTCCCTTACCGTGCAAGGTCACTTCCCATCTCCCTCACAGTTTAA
-CCCTAGCAAACTCCATTTGCAGAGGCCGGTGTTCAAAATGCAATTCTCCAATTTTTGAAT
-GCCAGGCCAACAGGGAAGCATTTAATGCCCTTCAGCAGGGGTATGATGGGATAAGTGTGA
-ATCCATGTATCCCGTACAGGTAGGACCTCTCTGCCCCCATAGTGCCTGCTCGTTAGCCCT
-CTAAGGGAGGCATCTGGTAAATCTGGGCTTGGAGTTTGGAGGATCGGAAACAGGAACGAC
-CTCTCTGGGGACAGTTCTTAAGTTCTAATGGAGCAACTCTTCACAGAGGGACTTGCAAAG
-CTCTTAATTAAAGTTACCATCAGAACAAAGACTCTCTGAAGCAAGAATTTGGACCCCAAT
-GGAGTCCTGAATCCAGGCAACCAAGCTTGCATAAGTGTGCAACACAAAGGCAAATGAGTC
-CCCAAGGAAGAAGAGGCTCCATCCTCAGCTTGCTGCCCTTGTCTGAGGGAAGCACCATGC
-CCTACAGCTGACATTTACTGAGTTTGCATCCGTTgactcttttggttgcagaaaactggc
-tcagacaaaaaggggatttgctggactgaaaaggccaggctggagctatggtgcagcagg
-atctaagggcttaagtgatgtctttagggtggggtttctctccatttttttctgctcagc
-atccttcagaatccacttcattcccagAGTCTATGAAGGTGGGGTGCACAGAGAGAGTCT
-GTTGGACCAGTGTGGTCACACACACACCCTGAACCAAGGAGCACAACACCTGAGTGGCTG
-AGGCTGCAGGGCACGTCCCAGATTACACTGACCAAAGAGTAGGAAAATGTTCCCCATCAG
-AAATTGGTAGAACAGGGAATGGATTCTGGGGAAGTAAGCAATGAACATTATCCGTAAGGG
-CCTActatatggtaagcagctattaatcgctttgccaatttatagttgaggaaacagcct
-cagagaggtgaagtcactctgacagccaggaagtagggaaaagcaagcttggaacgcagc
-tctgtctggtaccagagcTGAGGGTCTGGGGAGCTCCACCATCCTGCTTTCCAGGCAACA
-TCTTTACCCATCTCTGTTTTGGTCCAAGGCACAAAGCTGGTGTCAGATGGCTCTTGGATA
-AGCCTGTGTGGGAAGGACAGATAGATGGGGGTGTGTatggatgaatggattggtgaatgg
-atgaacagcggggtggatggatgggtaggtagaagggtggatggattgctggctgtgtgg
-tttactggctaggtgggtgggtaaattggtatatggttaggtggaagggtggatgtatgg
-ataggtgggtggatgCTTGGGTGAATAAATGAAATGGCAACTGAAAGGACAGGTGGAAGG
-ATGTGTGGGTAACTAGATGGGAGGGTGAATAGAATAATGCTGACATAAGCATTAACAATT
-ATGTCTAGCCTCTTGCCCCTCTCTTCCCAACTGCCTTTTCCAGTGGAAAAATTGAAAATC
-ATGGACCCGGGGAACACATTCCCCTGTGGTCTGTTAATAGAGGCCCAGCAAGGCCAGCCG
-AGGCTGTCAACTCACCCCCCACTAGGACCCTGTCATTAGCCACACTCCCCCAACCCTGCC
-CTTGGGTGGAAGTATGATCTGGTGGGCACTGAGGGGCTGGGCCCATCCAGGCCCCTTATT
-AAGCCTTATTAAGCCCACAGACGGGGAGCAAAAAGGGGAGAAGAACTTTCTCCCAAAGGT
-CAGCTGTTGGAAAAAGAAGGTACAGATGTCTCTGGGGTGGTCGTCTACTCtcaggccaca
-aggaatgtgaaagtttgcctggcccaatctgctctgctgtcttcttgcaggctgggaaac
-tgaggcccatacaggagacaggagggacacacagaagtcgggacagagccagactcaaac
-ctcaggccggctcacagaccatAGCCCAGCCTTTCCCTGAAACAGCCTCAGCATCAACAA
-TGGGGAGGGAAAGGAATGGGCATGAATGGGGCTCCTGCTATATGCCAGGCCCTTGAGCAA
-AGCATTTTCTGTTCATGGAGCCACTGGTCTCCTCTGTATCCCCATGAGTAAAATGGAAGT
-TATGCCTGTCCTGTCACGGattgaacaagcatttgttaaacatctgttatactgtgggcc
-aagcactggtctaggtgccaggaatatggcattaactagccaaacaaggtttctgctttc
-agagagcttactttctagacagtgatagagacagacaaataagtaggtagataaaatgtg
-atatgaagaaaattgaggagtggtatgagatgtacaaggatggaagggacgttctttgga
-tgagatggttgggaagggcctctctgagaaggtgaTCATGGTCAAGGTCATtaattgtcc
-accaagtccattctcccctttgctagtatgtgggcaaagcccacaagtggctgtccaggc
-agggtcaacatttcccagccctatttgcatgcaggtgtggccatgtgactagctcttacc
-aatagaatgggagcagaagtgatgagtgccacatccaggcctagcttttgagaagtgagg
-gagcttcccccatgttcttgttacttttcccctggctgaattcaaatgatggcaagaccc
-caagatagaggagccacaagattagaagagcctggattcctgcatcaccacatggaggag
-agccactcattgccctggcacatccattgcatgagtgagaaataaacttCAGGTGAGACC
-CAAAAGACATGTGATGAACTGGTTaggacattgcaggcagaggaaatagcatgtgcaaaa
-ggctcaaggcagaaccaagcttggcatgttggcacagaaaggataccaatgtggccagaa
-taaatggcacaagaggaggaaatgaggtgaaccatgcaggcagtggcctcagtcaggagt
-ctgtatttcaagtggccccagtggaggtggcgccatcagcagggaagaaataccatgtgg
-ttcatacttggaaaagatccctctggccactgtgcagagatgagttggaaggaggcagga
-atggacacaccagagaggagctggtgcagtcatcctagcctggatgaggctggggacata
-agagtgagtgaacagagtgggtttggatatattttcaagggcttgctgatgggttgtttg
-tggaaggtgaaggaaaCCAAATAACCCACAAGCCATTAAACAAAATCTAATGCAGAAGCC
-AATATATATTAGTAAACACTTTAGGGGTCTCTGTCTAGCTTCTAATCTTCCTTCCCTGAG
-AACCTCCCACTTATGCCTATCTGATAACTCTACTTATCTGATAAACTGGCCCCTCCCCTG
-CCCTAGCTCATGGAGCTGGAGATCGGTCCCTGACTGGGGCTCAGCCAATCAGATCATCCC
-TGGCTGTCAGACCCCAGTGTGTGGCTGGATGGGGAATAGGCTGGGCCCTAGCACTCTCTC
-CTTGATAGAGATGATGGGGTAGGGGGAAGGTCAGCAGCCCAGAAGCTGAGGAAGAATGAA
-CTCTCCAAGGACCACCTACCCATCCCATAGCAGGCGAAACATAGCTGCAAGTGGACTCAA
-CCACCCTCAACCACAATTGGAGCTGCCACCAGCCAAGTGTGGAAAGGGTTGGTCTTTGCA
-GAGCCCTGGACTGGAAGAGGAGAGTGGGTCTCCCAGGGCAGAAAATGGGAGTGGCCAGCT
-CCAATTCTGTGCCTCAGGTTGGGAGACATGATCCTCTGGGTTCTTTCCATACCCTAGACA
-AGGATATTCCTTGTCTGAGCCTAGACAAGTTATTCCCCTGGGAAGGAGGGAGGTGCTTCT
-GTTTCTCCATCTGTCAGGTGGCTGAGtataacagatttcatttccaaaaatggccacagc
-cccctgctcctcatgaaccctgccactctccatcaagagggagagtttatttctcctccc
-ctggagactggcaggactttgtgactgccttgatgaatagaacgcagcagaggtgactgt
-gtaacttccaagggtgggtaagaaaagacaatacagcttctctctggctctttgtcttga
-gacactcaccctgggaaccagacgaccacggtgtaaggaagcccaggccccctggaaaag
-ccagaggtaaatgttctggccgacatttacccagctggggtcccagccaacagtcagcat
-caaccaccagacccatgagggaatcagtccagcccctggccatcaagtcttccatctgag
-gccccagacaccgtggagcacagacaaatctacccactgtgcccttctggattcctgccc
-cacacaatatgtgaatgcaatgaatgactgtttgatgccagtgtgttcaggggtgatggg
-taacgcagcactagatacccagaacGCTGACTCAGGCAGACTCTGCCTCCATGACACCCT
-CCGTGCTAAGCATCTGTTCCATTTCCCCACTGTCCTGAAATTTCCAGACACTCCTCTTTG
-ACAAGCCAGGCTTGGCTATGAGCTGGGGCCTCTCAGGGATCTTCCAAAGATCAGCCGTGG
-AACAAGCCCTGCGGGGAGTTCACTCCCTGGTCAAGAACCTTTGCTAACTCCCCATTTCCC
-CCCATATCAAATCTCAGCTCTTCTACTAGGCTTCCCAGGCCTGTCCTAATCTCCTCCATC
-CTCATGTCTCCCTGAAATGGGCCACAATTCCTCCCTCTGCAGTGTATTAAGAGTGAGAAT
-GTGGGGTTAGATGAGGTGAGGGGAATCGCAGGCTCTGGGAGAGCTTTGAGAGCTAGGCCT
-GAAGCTTTAGAAGGCAGTCttccctcatttagcaaatattgagtcctagtgtgcactacg
-ttctatttacagtgctgggaatacacagctgcacctgctagacataatccctgtcctaaa
-cccatgaggatcatattctcttccacctcagggcctttgcacctgccattctcctaacct
-aaaatctatttcggaagatttgtgtacacctcatcctttatccttccagtctcaccttag
-aagggcctgcctggccaccctctctagtcatccccattgctaattccctttattattatt
-attttttttttgagacagagtctcactctgtcactgaggctggagtgcaatggcacaatc
-ttggctcactgcaacctctgcctcctgggttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattaccggcacatgctgccacacctagctaattttttgtattttagtagag
-acagggtttcaccgtgttcaaggctggtcttgaacttctgagctcaggcaatccacccac
-ctctgcctcccaaggtgctaggattacaggtgtgagccaccatgcctggcctaattccct
-ttactcttaattatatctccctgttcattttctccctaagtcttgaacaacagtatataa
-tctgtgatggctgatttacttgatgtttgtctgacttcccctactagaagtgtcagctcc
-ctgaggcagggactgtgtctgtctcattcactgctgtgtgccagggcatggcacagggcc
-tggcacccaggggtgctctatgactattAAATGTGTGCAGTGTGATGCTGGCTGCACAGT
-GCCTGCTTGCAGCTGGGAAGCTCGCAGTAAGGGGTGATCCTCTCTTTCTCTTCTGCCCTG
-TCTGTGGACATGCCCCATAAACACTCAACAGACTCCCCTCTGTGCCAGGTTCCATGTGGG
-CACCAGCAGCATGTAAGGGCTCAAACACAGTCGCTGGTACTGAAGCAGCTCCCAAATACT
-GGGGCAGGAGACAGATATCCAGCCTGTACTGGATATCTGGGGACATAGTGTAGCTGGTAG
-GGAGAGACGGCACAAAAGTCAGGGCACCAGAGGTCTGCAGTGCCAAATTAGAGTGGAGTA
-AGGACTCCATGCTGAGTAAGGAAAGAAGATCAGGCAGGCACTGGGGAGTACATTGAGGAT
-GGAAAGGAGGGCGATGGAGGCCATCTGGAAGGACGAAAGCGAGTGGTAGCAGGAGAGGCA
-TCTTAGgtatgaccccgggcatgacacgcaacctctctgaatctgtgtccCTGTTGgtat
-aacattctgtgaagcacacaggtcctggagccttcctgggttcaaatcccaccctctgat
-tactcatgaccctcaataagttctttcaacttggtttcttcatctgtaaaatggagatga
-caataatagcacctccccactattgtttcatcaggatcacatgagttaatgcattgaaaa
-cacttagatcggtgccaggcacatggtaagtggtcagtcaacgtGAGCTAGCACTGAAGC
-AGGAGTCACAGTTGCAAAGCACAGACCAGTGCCTGCACGCGCACACAGCAGGCACTCATC
-AGTGAGACGGACCTTCTATCTGCCTCTTACGCTGtaacacatatcaccacccaacatggt
-atttttttgcttatgtgattattgtcccttgcctccaccagaatgtgagctcaatgaggg
-caggggttctgtctcttttgttcccttgcattatccccagagcccagggcagtacttgac
-acatagtaggtgctcagtaagtagttgctgaatgaattcatttctaatttttagttttgt
-gcttggtgcacagcaaatgctcaacaaatgctggtcctcttCACCCCTACCAGCCTCTCC
-ATCCCGTTTCTACCTGCTCCAGGAAGCCCTCTTGGGCCTCGCAGCATCCACCAACCGTCC
-TTCATCCCAGGCTAAGTTCCCCACAGACCCCCTTGGCCCACCTCCCATCTGCTTTATCAT
-GCCTGTGGAGCCAAGGTTCACCTTGTTCCCCGGCACTCCCGCCAGCGTGAGTAAGCATCA
-GCCAGGACCTGGAGAGTAGAACCCACCCAGAGAAGAGCCCCTGCTTCTCTGCCCACCCCA
-GGCCAGAAGTGCTCTTGCCCCTGGACTGGTTTGTCCAGGGAGGTTTTCCAAGTCACTGAG
-AGCCCCATGATCAGATGTCACCAGATCCTCCCACCCCGGCTGCAGGGGCTGCAGTACCAC
-CAGGGCCAGAGCCATCCCCATGCGTGATTTCAACATCTGTAATACTTTCCCCTCTCCTTG
-TGGAATTCCCCCTCCAAATTCCTCCTGCTTCattattagtatatataaaaaataaaaaaa
-ttaaGCTGTCTTAATCATTTTCCATATTAGCTGACAGCCGGTTCCCATATGCCTGGGAGT
-GAGACCACACCTCCTGTTCCCCCCCCCTCCCCGCCCTCTCTGCTGTTCCAAAATGACTAG
-CCCCAAACAAGGCCCAGTTACTGAAAACCCTCTATCTTACAGACTCCGCAGCCCTGACTC
-CTTGGAGTCCTGTCTGGCTGGTGTGGCCCAAGCCAAAAGCAAAGCAGGAAGATTCTCTTA
-TGTCCCCAAAAAGTGCAGACCTCAGGGCTGGGCTGATCAAGGTGCAAATCTCAGTGTCAT
-CACCTACAAACTGGAACTCCACAAACTGCTTTGTCCTGTCCAAgaaagggcacaaattct
-gaagcagacggatctgagttccatctctggaactcagctctgtcaccttgggcgagccag
-ttcaccactctgagcctgagtttcgtcatctgtaaaacggcagaaacaacagcagttacc
-tctcagtgtcacagtgaaaatcaaggagaCTTTGataacagcagtgaacatccactgatc
-ccactgtgtgccaggcactgagccaagccctccctgcctccccctcattgcatctgcaca
-acaacctgctttgcagacagaaacaaagggaccgagatattaaaaatttctccaggacaa
-agaacagggaggtggaggagcaccctgacccaggcccgGCATTTTCAGTTCCACTCGAGA
-GCCTGACCCCCTGGAGATACTCCACAAGTCCTCACCCTTTTCCCCCAGTTTCACCTTGGT
-CTTTCCTCCTCTCATGGTCTTGAGCATGGGCATCAGGGATTGGCAGCACTGTTGTGTCCT
-GTCCCCACTGCCCAACCCCAGTGCCAGGGCTGTGAGCATCAGGAGGGTCGGTAGGAGCCC
-GTGGCCCATGCATGGCAGACTCAGGTGGCCCAGCACCTTGCGGCTGCTCCTAAAAGCACA
-GACACCTGTATTGAAGAGAGGGAAGTTCTGGGTTGAACTTGAACTGATTGAGAATTCCCA
-AGCCAGAGGAGATAGACAACTATGCCAGACCTCAAACTTGAAGATTGTTTTTGTTTTTAT
-TTAACTGAACCAAACTGATTTTTTTCTTCCCCCCGAATTACGAGTGAATCAGTTCATAAT
-AGAAGCCCCCATTATATCTCCTAGATTTTTAACCAAAATATCCAAAAAGAATTGGGCTAA
-CATAGCCACACCATCTTGGAATATGTATATTTATAGTGACATGTCATAAAGACTTCTAGT
-ATTTTGTCTCTACTCTTGATCCAAACTCCAGTGGTTCcggtttctctatattaagtattc
-acgtgctttgcatgtgtcacttttcatccttcagcccttagagggaagtatcattcatct
-tcaacttacagatgaggaaactgagactcaacgtagttaaatgatctgtaagacaaggtt
-ctgaatttgaacataggtctcagctgcagagccatgttattgctaacacagcctctgtat
-ggttctccagaaggcccctgatcCACTAAGAAACAAACCTGTCCCCCAATGCCAGCTGAC
-CCTATCCATGAACCCTCCTCCCTCCAGCCAGACAGGCCTCTGCCCGGAGAGGCAGCATCA
-TCTCCAGCTGcctgtactctcatcccagttcagccattcgccaagcatgacaactcggac
-aagacctttccctcctcagcctgtttcctcctgtgctgaggagaaataaaatcctccatc
-tcccacgctgttctgtgaaatgaagcaatcatgtacctaaagtgcgagcacaTagctggg
-catggtggctcacacctgtaatcccagcactttgggaggctgaggcaggcgtatcacttg
-agcttaggagttcaagaccagcctggtcaacatggcaaaaatccaccacttgagactagg
-atttcaagaccagccgggccaacatggcaaaaacccatacaaaattagctgggcgtggtg
-gcacacacctgtaatcccagctactcaggaggctgaggcacgagaatcacttcaacccac
-gaggcagagcttgcagtgagctgagatggcaccactgcattctggcctgggtgacagagc
-aagactgtctcaaaaaccaaaaacaacaataacaaaaaaaaGGGCTAGCACTTATTTTAC
-TTCTAAACTCTCCAGCCTCAACCCAACGTAAGTGAGGTGCATATAATAGGTGCTCAAGAA
-TTACTCATTGATGATAAAAGCAAGCCTGGAACAacaaaaataagagactgggcagaaata
-ttacaaaacatcagaagtagatccctctggggtggaattatgggtgattttattgtcttc
-ttggtgattttttttttctattttccaaactctcAGCTTGGAAGTATGTTATACTGTGTT
-TTCTAATTGTATGACACTATGAACTATACAATGCACTGTACACCTAATAGCAGTTTTTGA
-GAGGAAAGAACAAAACTACTTCATTGGATTGTAAGACTTGTTCTGATTTTGGTAAAGTTA
-AACTCTGCAGGGCAGGAAGAGTAGAGAGGTGTTTTAGAATCAAGGAAATACATTTGTAAT
-CAAGCAATCAAAGTGGTGGTCTTGGGGGGAGGAGGCTAATAAAATTATTATTGTTAATGT
-TATTATTAtttttgagatggagtctccctctgttgcccaggctggggtgcagtggcatga
-tcttggctcactgtaacctccacctcccgaattcaagcaattatcctgcctcagcctccc
-aagtagctgggactacaggcgcacgccaccatgcctggctaattttttgtattttaggag
-agactgggtttcaccgtgttgctcaagctggtctcaaactcctgagctcaggcaatccac
-ccgcctcggcctccgaaagtgctgggattacaggcatgagccactgaacctggccATAGC
-ATTACTTTTTAAAGGAGGAAGAGGATACAGGCAACTTTTCATTGCTTCCAGAACCTGGAA
-CATCAGCTTAACCTTGCCGGCACACCcagctcacctgggatatttgaaaataaacacaga
-tggccaggccctgtcctggtctgaatggccagcatctctaggctggggcctgggagtctg
-tgttttaaGTGGACACAGCAGATCCTGGGCACTGTATAGTAAATaaatctcctcatccac
-tttctgtctcatcttacagatgggaaatcagaagtccaaccaggggaggtgTTTAGCACT
-CTCCTGCCTGAATGGTGAGGGTGGCCAATCTCTTCCTTCACCCCAAGGGCCTTTCTCAGT
-CCCTGTCACCATCTTACCTCTCCCAGTCCTAGCCCCTTCCCCAGCCTTGCTCTGCCAGCC
-TGGAGCTGTTTCTTCCTTTTCTCCCTAAGGGAGTGTTCCCTGTTCTTAATTAGGGAGACT
-CTGGGTATTTTTGTCTCTTTGAGTACTGCGTTCTGTTGCCAGCAAATAACTTTAAATAGA
-AAAAATATGCCCAAAATTAAACTAGAAAACAGAAATAAATAGGAAGGGGGTGGGCTGAGT
-GTCAGCCTGCCCTTGGTGGAGAGGGTGGGctctgggcctcctttcctgcatctctgccat
-ggagaccatcacagtacccaccttctggggtgctgtgcacatcagacaagaagaggcaca
-cagtacactttgcacagggtgtctAAGTGTCCATTAATATCCAAAGTTACTGGGCACACT
-CGTTGCTTGGATTTTGAGATAATTATGTAGAGAAAATGTCAAGGGGCTCAAAGTCCCCCA
-GTTGACATTTCCCTACCAAGAGCTACTTTTATAACATGCTGCCGGATGTCATTTTCTTAA
-TAGGTACAATTTTAAGAGCAtctctccaccttcttccctaccctagtccaactgttcaca
-gctgaaagagtgaccttccaaaagcctaactcagatcatatgattctttgcctctgaaat
-ttttcaaagctctccattgtctacgaaatgccggcctcagagcctttcaggataggggcc
-atgaagggtctcaaatttcaaatttcatcttcctctaccatcctcctgtcaccctccagc
-cacacagacctgccccttggtccccaaaTGGATGCCCACTTCCTTTTTCCCTAATTGAAA
-GCCAGGGCAGAGTTAGGTTAATCACATGCCTTAGCTCCAGCCACACTTTTGGCACCAGAG
-TGAGACCCCTCCCTTATTTTATGTGTCCCTTTCATGCctcatccctactctcatcccacc
-tctcatccctccctcATGTGGATACCCCCCTAACGTGTTTGGCGTGTGTCTTTAAACATG
-CACGTGCCCTTGGAAAATGTGCAATGTTGTTGTCTGTGTGTATGATTTTAATTTACATAA
-ATGCTATTCATATTATGGCTTCTTACCTTTTTTCCTTGACACTGTCTTGAGATCTAGCCT
-GCATATGTGTGGAATCATCACTTCCAACTGCAGAAGAGTCAGCCACAGGGGGTGTCCTCT
-GTGCTTCCCTGCCCATCGTTCTGGTGCTGGTGGCCTAGGCTACCTCTGACTCCCCACAAC
-AAACCTCTGACTGCTTCTTATGTAAGAGAACACAACGACAGCTCCTGCTTTTTGCATAAC
-GAGCCGTTGTTTAGTAACAAGGGGCAGATGCCTCACTCAAGTGGATTTAGACACAGAGAC
-AAAGAAAGTGTAGATCTAGGTGTTCACTAACTCCTCAGGCAGCTGTCTTTCTCCATCTTA
-TCAATTCCAAGATCCCAGCCTCCCACCTTGGCAACTGCAGGGGAAAAGAAGCTCCCGAAA
-CAGTCCCAGGTGACTTTCTGGACCATAGCCTTTGTGCTGTTTCTTTGACGGTGGGATCTG
-GTTTTGTCCTGGCTTCAGCCTTCCCAGATCCATGTGTTTCAGAGGAAGTGAACTCCAGTC
-TCGGGGtgttatggactgaattcgaaattgtgttgaaaccctaaagcccaatgtggctat
-attagaagacatggtctgaagggaggtaattcaagttaaaggaggtcacgagggtggtat
-ccagtaggactggtgtccttataagaggaagagacatcagagctctctcttcacatagac
-acacagagcagatgccacatgaggacacagtgaggaggtggccatctacaggccagaaag
-gcctcaccagaaaccaaacctgatgacaccttgatcttgaacttccagcctccagaacca
-ggaggaaataaatttctgttgctgaagacacccagtctgcagtattttgttatggtagcc
-caagcagactaatacaGGGAATGAACTGTGATTGGTCTAAGGcaatatttctccattttt
-ttttcattattacccctcattattgacctcctgaagagttgttttaagaatttttttctc
-ctaagagtgcctcccacaaaatatatatatactacagacatatctatttatgtagtgtgg
-tttcttggagggtcacaaacggttgtcatatctaagattttgtcataccttaacctaagc
-taatttttacagccttaggagcaatattgccccattgagaatgcaCTGCCTAAGGCAATG
-TACTTGGTCTgtgattggttagaacatgggcatgtgaggctaatgtagaccatagatgtg
-agagccacagaggaagaaattgtcccttttcacctttggtctttattatggatggacata
-atgcctggatctgcggcagctattttgtgactatgaggacaggctgatatgctttaaatg
-gccaactagtagataaaacctaggccattgttcatatatatatatatatttgagatggaa
-tttcactcttgtcacccaggctgaagttcagtggctcgatctcagttcactgcaacctct
-gcctggttcaagctattcccctgccagagccttcagagtatctgggattacaggcaccca
-ccaccactcccagctaatttttgtatttttagtagagacgacgtttcaccatgttggtca
-ggttggtctcaaactcctgacctcaggtgatccacccacctcggcctcccaaagtgctgg
-gattacatgtgtgagccaccacacccggcccactgatcatatttttgagcaataaaagta
-accagccctgaaactgccctaccacaaactcctccttatgtgaaatgatgcattttcaca
-tttcagcctgttcagctgtgtagtttttgtaattgcagctgaagacattctaacagaTCC
-TGTtctttttcccgtaagttgtaccaaatgttctgaggcagactggcagtgatgggcctg
-gttagtccatgagttcatccccaaaccaatcttgtggccagacttgaatcctgtgcccac
-ccacctttgtagctcagggatgggaaggggtcaaccccacctggactgagaactgggggc
-tgttcctccgagggagatgagggagatacttcccaaagggattgtgaatgctgagagggc
-agaaatgacagctgGGTTTCACATTCACACCATCCCTTCTACATGAAATACCCCATCTCC
-AGCCCAATATACTCCCTCTAGTGCAGCTCAGCATCTCCCTCTTCTGAAAGGTCTCCCCAA
-GACCATGTTGAAATTATCTCTTCTCTTCCAGGTGATGCTCACTGGGGCATTTGTAGTCTA
-CCTCTGCCCTTAAGAGGCCAGTCTTCATGGCATGCAATCattcatgcatccatctaccct
-ccaatcttaattagcaccttctgtagccatccctaggccttggggtgctaagcaagaaaa
-aggcataatttccatcctcaaggatctcacagtccaggggaggaagcaaaactcataggc
-attcatTCGACACACATTTATTCTCTGTATAGATATGAGTAAAATATTGCATATCCTCAA
-GGAAAGGGGGAACTCCCCAGCTAATGGGACAGACAGATGAAGAACAAGTAAGTACAGTGT
-ATAATGAGGTGACAGAAGCCACCACTCATTGCTCTGACTAGGAGGAAACAACAAGATGCC
-TTAGACTCTTTTGGCCAAGGAAAGACACACTAGCTGTGTGAATGCCAGGTGAGCTGGCAT
-CATTTGTCTGGGATAGGGTGCAGTGGAGGCTGTTGAGGCCTGACAGCTTCCCCCTTCACC
-TTACTCCATTGTTTGCCAGGCTCATGCCTGGGAGAACCATATGCATAAGAAGACCTGGAT
-CTTATAGGAAGAAGAAGTGGAAAAGCCAATACCTGACCTCCAGGAATCAGAATTTGtgtt
-gcaggttgggttctatgcaggcagacacgaagacagagtttaggtgcaaggtgtttatta
-ggaatcaatatctggaaaagaaaggggcaggaatcagggttgaggaggaggagatactta
-actgcaatgtgacccagtaaagcgttggtcaacatggtgaggaagttgggagcaagaatt
-atccctcgatagacaccccgttctacatgatgtaattattatgaattacatgcctgtatc
-aaaacatctcatgtaccccataaatatatatatacctactatgtacccacaaaaattaaa
-attaaaaagagttacccctcagagaatcccaaaagatatcaaaatatccagacttttgtc
-tcagccccttcattttgatagttcactattcaccaaatacaggttgccccaggaagggca
-tggcctgggatgaagtggccctctcaagctgaggctaaccttgaaggggctgaagctgaa
-ggctctctgctgaccatgcttccCCCGCCTTCAGCTGTCAAGTCCTTCAGGGTCAGCTCA
-GTTCTGAGTGCCACTTTACTTGGGGTCACTTCTTTGATTCCAAGCAGTTTAACATAATGG
-CAACCACAGTTAGGGAGACCTGTCCTGGTGGATCAGGGTGGCCCAAGCTAAGGTCTGGAG
-GAAAGACGACCCTCAAGAAAAGATGTCTCCTCTGTCCCTCCACCCCATTCATACTAAGGG
-CCATGGGTTCATGGAGAGGGTTTCAGATGGGCACATTATAGGGCTGAGGCTAAAAGTCTC
-TTTGAACCAACTCACACTTGTACAGAAGTGATGCTGTGAGGACTAATGAAaacaagtagc
-atctactgcatgcttaacatacaccaggcactattccaaattttttacccacattagtca
-tttaattctcacattaccctatcagaggaacaatgatGAGCATGGGTATGTAGACCAGAA
-GGAGCTAAAACCCTAGAACACAAGCAGAGGACACCAGTGAGCCCAGGAAAGGCCCTGGGC
-CCCTGGAAGCAGTCTCCTCATCCGCCTGCATGGGCCAGGGTTCAACAGAGGCACCATGTG
-GCTGCAAGAGGCAGAAATGGCTGCAGACTGAGCTCTACTAGTTCCTTCCACTTGATGTTT
-GAATAAAGTCCCTGGAAAACTTGGGGAGATGGGATGAGTATCTCAGCTGGGAACACACCA
-AGACTTCTTAATAAGGCATGGAGAGGCTCAAGCAATTGATTGGAAAGAAAAAAAAAAAAC
-AAAACTAACTCAAGTTGGTAGATTTTACCTGCCATGAGATGTTTGTGAATAGCAGAGCAC
-AGGGTAGAGAGGTCACTGCCAAAGAGCAACTCCCAGTCACCCTTGACATGTGGCATCCCC
-TCTCATGCCTCCACGTCTGCATAAGCTTGGTAATCTTGTGCCCTCTGACACCATTCTCCC
-ACCTGTCACCCCACTCCATTCTGCCCATCAGGATAATGCTGCCACATCCTCCAGGAAGCC
-TTCTCTGGCTGTCCTTCTCCATGACGCTAGGCTCCCCTTCCATCTTCCCACAACTTCATG
-TACCTCCCTCTATCATTTTATTTATCAATCATTCTAGATTTTATGTGTTTATGACTGACT
-TTCCTCCTAGATTATGAGGCAGTATGATTATATTATTTACCTTTCCCACTGTCATGCATT
-CCCATTTATCTCACTCGGCGATTGTCACAACAatgctgcaaactaactaccactaagctc
-agtggcttaaaacaataacttcttctcactcatgggtctgtaggtcagctgggattctgg
-tggtctagactgggctgggctccaggcatgcatgcggatctgctccacgcgtctctcatc
-ctccttgacccacagaagacagctggaagcaggcaggacctcataggctttagctcagag
-ctggtgtgctgtcacttctgcccatgttccatcagccagagcaagtcacatggccaagct
-caacatcaattagatgtggagaaaattgatgagtcatgtggcaaagggcatggatatagg
-aaaaggtgaaaattAGGAATAGTATGATTTACTGTGACACAGATGCTTTCTGGTGAACAC
-CAacctctccaaactcatttcaagacccttcctcatcagcccagtgctcaaggtcaattc
-ctgcaaccttcagccctttgtagcctttcagtcttttgaacacactgtactttttgtctg
-acatacacctttcccatccctttcagatctcagctgagatgtcatctcctcaaagaTTTG
-CATGGCTGTAGGCTTTGCCACCAGGAGATAGTGACCCAACAAACAAGCTTGTATGGGTGA
-GTCCCTGAATCCAAACCCAACCCTGcctggccttgccactcactgctgtgaggccctaag
-aaaatcttatcttttttctactgctgttttcttatctgccaaaagtaaataaaaacaTCT
-TCCCAtatcagttagaaatgcttgcagctgcaagtagcagaacccctaatagtagctaaa
-acaataatatctcacaaactagatgcctggaagcaagaagctccagggctggtttattgg
-ctcagtgatgtaaggacTAAGTGCTCACTCATACCCTCTCATTTCTCCTCCTTCCCTTTC
-CCCATTCTACtaggttggtgcaaaagtaattgtggtttttgccattactttcaatggcaa
-aTTGtggtgcaaaagtagttgtggtttttgccattactttcaatggaaaaaacagcaatt
-acttttgcaccaacagcaaaaacagcaattacttttgcaccaacctTAATATTTCCACAG
-TGTCTTCCCTAAAGTCTCACAGAAGGTTCCCTTTACATTTTACTGGGCAGACATGGATCA
-TATGGCCACTCTAGCAGGAAAGTGAAGTGGGAATGCCAATATCAGGGTTTTGTTGTTGTT
-GTTGTTCAGCCTCCTTTGGGGGAAGCAGCAAACGAGAAGGGGGTAAGAATTGGCTGCTGT
-GTAATCAACTCACAATATCTACTCCTGATCTAACTTTCTACCTCACAGAATTTTTGTGAA
-AATTTGGATTGCCAGTAGCACTCTGAAGGCCACAAGCTTATAAAATAATAATCTACTTTT
-ATTATTATTCATGACTTATTAAGAAAAAATCAATATTGGAAGAGAATAATACTTCGCATT
-TGTTCAACAATGAACTTTCCGAAGGTGAAAGGAAAAGCAATTACTGTCTGAGCCCAGCCT
-GAGTCCCAAGTCCATGCCAAGCGCAAGCCTGCAAGACCATTTCCTCCTCCAGGGACTTGC
-TTCGATTGTGctaaaacagcttctgccaagccaaccaggattgcatgctgccaaatccag
-tactcattttcctgatcttattttatttgaattccctgagcattcaatccagttggcagc
-accctccttgatacatgatcctgtctgggcttctgtatgctcacagccctggttgttcct
-cagtctcctctgctggcttctccccatctacctggtttctagatgccagctgactcagga
-ctcacatgtgagctcctctcctccttcccaccccctatgctctttctgtctcaGGTttct
-caaaccttagcatgcatcaccgtcacagggagggcttgttaacacatagattgctgggtc
-tcactcccacagtgtctgatttcatcgctctagggtgaaacctgaacacttgcatttcta
-acaatttctaggtgatggtgatgatgctggtcctgggaccaccccttgagaacctctCAC
-TGCTCTatctcaaccagtgttgagagccttgtttctcagccttggctgcaaattggaatc
-acccggggtgctttaaaatatggacaccaggatctcatcccccagagattctgattttaa
-tggtctgcattatatcctgggtacctagagttaaaaacctcccccaggtgacttcaacat
-gcaggtaaagttgaaagcccctaatttagatactacttaactgctagtaacacctacatt
-tatttccctctcccagacttgtcctctgagttttagcccagtatgcccaattattcactc
-gatatctccacttacgtgactcacaagcatctgagagttaacacacccaaagtggaagtc
-tgaatcttcacttccaaattgctacttctctatcttccccatctcagcaaacagcaactc
-catccatgtgctgtagtttattggggtaaaaaccttggagttatctttggctcctctctc
-ccctccatgacccatatataatcctttgacatagtctatcggttccacctacaaaacata
-tccctaaattctcctctctgcctgaactgctaacacctacatcagaatatcatcaactct
-ttcctgggtggtctctgcagcatcctcacctccctacttctattctttactccctcgcca
-atgcatcctccaaacagcagccagaatggtctcttaaaatcataaaccagatcatgatac
-accccgatttaaagtcttgcaaaacttcctgtcaccttgggcataaaatctcagctcttg
-ctcatggccagtgagatcctgtcctcttctcaaccttgtctattccgctctctccctggc
-ttagatactccaaacacactggccttccttctgtcccttaaatacattcagttatttctt
-gcatttactatttcattaacctggatttctgttccctttggactctgcttggccagctac
-ctctcatctttcaggtctgcttaagtgtcactgccttaaagtgtctccctgacccgcctg
-ttatgttctatcataagactctatattcttcttagcgcctatcagagttggtgatcattt
-gatttgtaaatatattggtttattatttgtctctctcactagactgtgtgctttgtgagg
-gcaggaaccatgcctgttttggtcacggttgacacctcagtgcccagaagagtgaatgag
-acatagtgggtattcaaaacatacttagggagggagagaaaagaggaagaaaaaggaggg
-aggagaaaggaaggTCTAGTAATACTCAGAGCCCAGGAATTACACACCAGATACCCCTTG
-CTTCTACCCAAGAGGTGGTTCAGATTAGAGATTAGATTTCAAGGCTCCAGCTTGCTAGCT
-CATAACTGCTTCTACTCAAGACGGTCTATTCATGTAGCAAAGTCaaaatgtgaacatgct
-tttaagttccttgacgacaggaattgtggcttgtttactcttctacctggcatttgcaca
-gagcctgggcctgaatgaaagttcagtaaatggttcatgaatgaTTTGAATGGCATTTGC
-CTGAAGGAAATCTAAGAAAGTCTTGCCTTGGTTTCCCCATTAAATGGGGCAAGCAATTCT
-TATCTCCCCTTCCAGAGAGCTGCTGCCAACACAGGGAATCCATCCTGGAAGAAAAGATTG
-GTGGCCACCTGCACCATCAGGTGGAGGGCATCTCTCAGCTGCCCTTGCCACATCTGCAGC
-CCTAAGCTTCCAGGTGACCCCAGTGGACCAGTCTGCCCAGAGCATATCATTAGTTAGGGG
-CACTCTGCAGGAGGATGCCTGCCTTTGCTAGTGCATAGCTAATGTCCCAGGGGGCTTCCT
-CTAATTAAAACCCAAACTGCAATTATAGTTGTGCCAAAGCATGTGCACATGGCGCCACTT
-AAAAGGGACAGATTGACAAGGCGTTAACAACTCCAGAGGCAGCATTGTCCCAGCACCAGG
-TGCTACCAATCATCAAAATTAGAACCAAATGAGTCACTGGGGCTCAAGATACAGTATCCA
-GTGCAGACTAATGGGTGATTCCAAGAAACTTATGAGGATTATTTAAaacacactaactat
-gctccttctacagggcctttgcacttactagtccctgtacttcttcttgcctaactctat
-ttgatctctctcaattatcacctcttctgagacacctgctttgatcacatgaatctctac
-cctgctttatttttcttcttagtgtttattatcatctgatattatatatttgtttTGCGA
-TTGATAGCCCaaaatatgttttaatattgtataaatgtaaaacatatataaatacacaaa
-attttataattttCTGCAATACATATGTATCAAGAAGATACAGCATACACACTAAGGAGG
-GTGTCTTCTTGGGGTTGGGGGTGGTGAGGCAGGGGAATAGAAAGACTGATTCAGAAAGAA
-GAGAGGAACAATAAAAGAACAAATGAGAATATTTATATATCCTGATGACAATAGTGGGCC
-ATTATTTGAAGAGTATGATAAACTTGAATTTTCCTTCCTATCACTTGGTAAACTTGAATT
-ATTCCTCCCTGAAGTTCTGTACTCTGGGAAAAttttcttttttttttttttttggagaca
-gagtcttgctctgtcaccaggctggagtacagtggcacgatctcggctcactgcaacctc
-tgcctcctgggttcaagtgattctcatgcctcagcctcccaagtagctgggattataggc
-acatgccaccacacccagctaatttttgtatttttagtagagacagggtttcaccatgtt
-ggccaggatggtctcgatctcctgacctcatgatctgcccaccttggcctcccagagtgc
-tgggattacaggtgtgagccaccatgcctggccACTCTGGGATAATTTTATTTTGGTTTT
-TAGAAATAACTTTATTGAATATTTTAGTACCAGTAATCTTGCGATAAATTTCAGCCCTGG
-TTTGGTTGTTGTTgttgttgtttttggtctaaagccatcttgattttgcctttatttttg
-aagagtatttttactagatatagaattctaagttgtcaattatgtatattttttcagcac
-tttataaatgttatttcattgtcttctggctttcatcatttctgttgaaaagtctaccat
-cagtcttattgttgctcttctgtaggtaatgtcatttacctctgactacttttaagattt
-ttctctttatttttgtttttcagcagtcttactatgatgttcctatgtataattttctta
-gtatttaccctgcttgggattgtcagagcttcttgagtctgtgggttgatatcttttatc
-agttttgaaaaaattcttagctcttatttctgcaaatattgttaattttgtattcttatc
-ctcaccttctaggactccaaataaatgtatattttttttactaggtcccacatatctatg
-acacattcgtgtattttctattatttttctatgtatactttagtttggacacttttcatt
-tttttaagtgtgctaatcctatcttccactgtatcaaatctctgttaatcccatctgatg
-aatttttgatttcagatattatattttctcattctagaggtatcattttttcttttttat
-agacgctaattttctgatgaaattctccatcttttcaaatattttgtgcatatttttctg
-ttttttaaCATATTAATCTTAGCATGTCAAAGTCATTATCATATACCTGTTTCTATTGTC
-TATTTTATTCTGTTTGTTTTCAGATATGTCCTAGCTTTGGCATAACTAATAATGTTAATA
-GAATGCCACTTATTATACATAATGTAGAGACTCCAGATGATATATTCTTCTAGAGAAGAT
-TTACCCTCTGCTAGGCACAGAGTGGGGCTTATCATCATAAACCAGTCAGGGATTGTACTG
-AGTCAAGACTGTAAGGTAACCCCAGGAAGGTCAGTTTCCCTGTGCTTCAGTCAGTCATAC
-ACTGAACACCTCTTCTCAGAGGCTTTATGCCAAGGTTTATAGCCTCCTGCACCAGGTATC
-CCAGAATCCAGCAAGTGTCTTGAGGGATTAATGAGCCCTCAAGTCTGCCAAAGGCTCTGC
-TGGTTTCTTCCACACTAGTCCAGTGCTGCATAAAACTTGGATTCTCAGCATTCTGCTTTT
-GCCTAGAATTGGAAAATGGTCTGGGGTAAAGAAGCTATATAATTCAGCTTACTCCCCTGC
-TGTTCATTCCTTTCCAGAATTTTAGCAAGTAGTATATTTTTTTCCAATCCTatgatatct
-gacaatgctactatatttctctagtcaatttactcttccatttcctgggcaaccatttca
-ctttctcttatttcttcacatctttgacaccttctttctctcctcacttctaactgacgg
-cttacaaatgaaagcaagtggaatgacaataactttttataaaaacttctacactagtcc
-atcaacacgtctctctaatacttctccctccctctctttctctctctccctttctctctc
-tccatgtgtctgctggatcccatcattctcatctaatcaaggactttgctcctataatca
-tccctccatgaatcattttcctctctctgctaaattattcccataagtggacaaatatac
-cattagtctcccatcttctaaaaagtatataccctcccttgtctcaatatctctgtgcag
-ctacccccacattttgtttcttcccatttgaagcaaaactcctcaaaaattgtatatatt
-cactatcttcattttctttccttctatgccaaacaggttttcctccttcaaagctactct
-catcagggtcaccaaatacctctgcattgccaaatccagaggtcagttcacagacctcgc
-cttacctgattgctcagaagcatttgacactgttctctttgctggttcttcctcatgttc
-tcgacatctgagtgttggagacccccaaaatcagtcctaggactctttcttttccttcta
-tatattccttttacgtgctttccttattctctttgtatataatttaatacctctactggg
-taatttacaaagaaaacaaacttatttctcacagttctagaagctggaaagtccaagatc
-aaggcagcagcatgttcagacgtgtggtgagggctgccctctgcttcctagatggtgcct
-tgatgctgttgtcctccagaggagaggaaatctgtaaattcacatagtggaagatacgga
-attatgaaaaaggaacaaactccctccatcaagctcttttatcagtaccttgatccattc
-tgccctcatggcttaaacacctttcaaaaggccccacttcaacactgttgcattggcaat
-taagtttccaacacacacattttggggaacacattcagaccatagcaacccttttgttca
-gtctcatgattttaaatatcatttatattttatgactctcaaatgattctagccagaaat
-tatctcatgagctctagactctctctacatacccacattaacaGCAACGAAAGCACATTT
-AATCAATTTAACCCAAGGAAGTAATACGATGAGCTCAGGTAATACAGACTGAGACTTCAT
-CCAAGATCACAAGGATGGTATGTGCTAGACTCCAAAGAGATGCCCAAGATTTTGTAAATA
-CCCTTCCCTTCCACAAGAATAGAGTTGTTATTTGGTGTGATTTCTCAGGGAGTTGGGGAG
-ATCTCTTATCAAACTCCCAAATTGCTCTCCAATCTGCTCAAGTTTTCTGAAATGTTGTTG
-tttctgggtcatagcatatgcacatacttactttggttaagttcagccaaattatttctc
-cagaatggctgttccagtctacattctttccagccatgcctgtgggctcttatctccaca
-tctttgccaggtattactagccttttagtttttgcctggttaataaatgtaaagtgctaa
-ttctctgatgttttatttatcatattactaattaatttgagcatctctcacttacttgtt
-ggcttgtttctttttccataaattggtatccatttctcttgccagttttttattatggag
-tatatatatattgccaatttaaaggacttctttgaatattctagTGATTTGTCCCCTGTC
-AATTTTAGAAATTGCAAACATCTCCTAATTTGTCATTAGTCTATTATCTTTGTCTTTATG
-TCTGTCATTTAAGAGAAATCATTTTCCTGTAAATGTTTTAAAActttttattgtaaaata
-aaacacattaaaaatctcacacggcaaatgtttaacttagtaaattattataaactgaac
-cctttaaagtattactcaagtcaagaatataactttgccggccattcagaagcccctccg
-tatgttctatcccaattatagctccctctcccctccaaaagcaatattaccctgactttc
-atatcaatcactttcttgcttcttttatcatccaagtgtgcacccccagacactatggtt
-tagtcttgccATTTAAAAAAATgtttatatgtattttgagtctcttttaatctacaggct
-ccctttccatctcttctctttctttaatattcatctgttgaagaacccaggccatttgac
-ctgtacagagtcccatagtttggaatttgctgattgcaagtcttggtgaagttcaagatt
-cctctgtttaacgtctttactgtaaatggacagctggtccagaggcttcatcaggctcag
-acgctgtgttattttatcatgtggcacattcctatctgggtgcttctctttgagaaggca
-gtgacacttaaagattagatctattgattcattgcggattggaaaaaggggatgttctaa
-ttccattttttttttcattttttttaactggaataattttataaagagacacttttctca
-ctcgccattggttattgttacgaactgaattgtatccctccccaaattcattcattcgtt
-gaaacctagcccccaatgtcactgtacttggatatagggccgctagggaggtagttgagg
-ttaaatgaggtcagaagggtagggtactaatccaataagactggtacccttagcaaacaa
-agagactccagtggtctgtgtccttctctccatacctgcaaagaggaaaggccatatgaa
-gacacaatgagaagtcagccctctgtaagccaggaaggaagactcaccagaaaccacatt
-ttgtggcaccttgattttggacttcccagcctccagaactgtgagaaaataaatttctgt
-tgtttaagccacccattcggcggtattttattttggcagccctagcaaactaacaccatt
-acccaagtggtataattaatacataaaagagaagataactgcttgattctctttatttac
-caggtttcgagataatgaatttgttcctgttatcctccaaaggctaccatttaaattctt
-ttgttattattaaatcatggatttaagtatagtttgtggttttcaatccattgcattttt
-attctaattgacaatcaagttgttccatctttgaacagtaggaagctctttggcttggct
-cctgaggccttttgacttatctcccttagtccttgaagcttctttgtatcttgaatgaca
-aaatattccaggcttgtcctaccttcatatcctgctttaaacctagaatcagccatttct
-tcaaggagtcctgggtccttctaatgagaaattttatttcaagactataatatgaatgct
-agagatgttcactgctcctgggctgctcattaagtctaggcttcttgagtgggcaaagct
-aatatacatatatgtatgtgtgtgtgtgtgtatatatatatatataactcatgaattcat
-actggttcaatgagttcagttctaacttagaactcagattgttcacttaacttcttttac
-actatatttgaatcttttttcttacattctgagaattctggttcttaatatcACAGGGAG
-TGATATAATTAGGATGTCAATAGTCTTTAATTATTTAATTTATCCCATGTTGTACACACA
-ACAATACTACCAATCCTAATTACTGACAACAGTTTAAAAAGTTTTGCATATGCTATTCCA
-TTCCCTCCCCATTTTTATATTTACATAATCAAATAATAAAGCCTTTAATATATAGTCTCT
-ttctggtcttagttccgcaagtgggtatatataaaggctcaaaatcaatctttatattga
-catctctctacttatttgtgttgtctgatgctcatattgt
diff --git a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta.fai b/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta.fai
deleted file mode 100644
index 04a438b..0000000
--- a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-chrM 16571 6 60 61
-chr20 1000000 16861 60 61
diff --git a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta b/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta
deleted file mode 100644
index 9b75d10..0000000
--- a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta
+++ /dev/null
@@ -1,16946 +0,0 @@
->chrM
-GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT
-CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC
-GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT
-ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA
-ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
-AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA
-AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC
-ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA
-ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA
-TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
-AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG
-TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA
-GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC
-TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT
-AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
-GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC
-CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG
-ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA
-GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG
-AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
-GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA
-TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA
-AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC
-AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG
-AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
-TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA
-GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA
-CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC
-TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT
-AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
-TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG
-AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG
-CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA
-TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT
-AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
-TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT
-TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC
-CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA
-TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA
-GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
-ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA
-AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA
-GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC
-CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct
-ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
-cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG
-TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC
-GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG
-AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA
-CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
-CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT
-ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC
-CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG
-ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg
-cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
-taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC
-ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA
-CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA
-AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC
-TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
-CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG
-ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA
-AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG
-CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC
-ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
-CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG
-CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC
-CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA
-TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC
-CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
-AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC
-CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC
-CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc
-cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC
-GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
-TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA
-GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT
-CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT
-CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC
-AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
-TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT
-CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC
-GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA
-AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA
-ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
-CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA
-TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC
-CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC
-ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC
-TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
-GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC
-GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT
-AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG
-CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA
-ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
-TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA
-GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT
-CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC
-AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC
-AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
-CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC
-ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC
-ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG
-GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG
-CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
-GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA
-GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA
-CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA
-GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC
-CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
-CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA
-ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT
-ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA
-TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC
-GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
-AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC
-CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC
-GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC
-TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC
-CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
-CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC
-CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT
-TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG
-GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA
-TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
-ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA
-TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG
-CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT
-TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA
-ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
-TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG
-ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG
-ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG
-ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA
-TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
-CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT
-ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG
-AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT
-ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA
-GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
-TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA
-ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG
-AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC
-CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT
-CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
-AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT
-TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT
-ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG
-CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT
-CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
-ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC
-CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT
-ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT
-AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA
-AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
-GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA
-CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC
-ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT
-TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA
-CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
-CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA
-ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC
-TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC
-ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC
-TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
-CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT
-CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC
-TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA
-ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC
-AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
-CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA
-GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA
-GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA
-CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC
-TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
-GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA
-CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC
-ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA
-GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA
-CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
-TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA
-TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC
-CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC
-CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC
-TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
-AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA
-CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC
-TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC
-TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT
-TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
-TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG
-TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA
-CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT
-CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA
-TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
-TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT
-ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC
-TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA
-ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC
-TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
-CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA
-ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA
-TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA
-ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC
-CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
-GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC
-CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA
-AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT
-CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG
-AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
-ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT
-AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT
-ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG
-AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC
-CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
-ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC
-AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG
-TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA
-CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA
-AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
-AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG
-TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA
-CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA
-CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT
-CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
-TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC
-CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT
-TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC
-CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT
-TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
-CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC
-CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT
-CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT
-GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA
-GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
-CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC
-GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA
-ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG
-ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA
-CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
-CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG
-CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC
-CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA
-GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA
-AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
-CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC
-GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT
-CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA
-TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT
-CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
-ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG
-GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG
-CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG
-TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT
-GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
-TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT
-CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA
-CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT
-TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC
-CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
-CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC
-CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT
-ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT
-ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC
-TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
-TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG
-AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC
-TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC
-AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA
-TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
-TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA
-CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA
-GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC
-CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG
-CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
-ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG
-ACATCACGATG
->chr20
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
-NNNNNNNNNNNNNNNNNNNNGATCCAgaggtggaagaggaaggaagcttggaaccctata
-gagttgctgagtgccaggaccagatcctggccctaaacaggtggtaaggaaggagagagt
-gaaggaactgccaggtgacacactcccaccatggacctctgggatcctagctttaagaga
-tcccatcacccacatgaacgtttgaattgacagggggagctgcctggagagtaggcagat
-gcagagctcaagcctgtgcagagcccaggttttgtgagtgggacagttgcagcaaaacac
-aaccataggtgcccatccaccaaggcaggctctccatcttgctcagagtggctctagccc
-ttgctgactgctgggcagggagagagcagagctaacttcctcatgggacctgggtgtgtc
-tgatctgtgcacaccactatccaaccgatcccgaggctccaccctggccactcttgtgtg
-cacacagcacagcctctactgctacacctgagtactttgccagtggcctggaagcacttt
-gtcccccctggcacaaatggtgctggaccacgaggggccagagaacaaagccttgggcgt
-ggtcccaactcccaaatgtttgaacacacaagttggaatattgggctgagatctgtggcc
-agggcctgagtaggggagaagctcccactctcagaacactgagaaaagtgaggcatgggt
-ttctgggctggtacaggagctcgatgtgcttctctctacaagactggtgagggaaaggtg
-taacctgtttgtcagccacaacatcttcctaagggagccttgtgtccgggaaaaactgac
-agaccagtgatctgggtgcagaaggcttgagacaaaactagctggttgggccagctatgg
-ggcaaatgctggaaagaaacctggtcagggagcctgagctgagtggtccccacagtcatc
-tgcttggcaagaaaccctaggtcgcaggtgctagaccagctgcacacccacagcaacact
-gccatgcccaggatcctctgcccttgatcctgaatcaacagaccacttgcagatatactt
-cacagcccacgctgactctgccaagcacagacaaccactgggccccaggggagctgcagg
-tctcctggtcacctaatcttttttttttttatactttaagttttggggtacatgtgcaca
-acgtgcaggttacatatgtatacatgtgccatgttcatgtgctgcacccattaactcgtc
-atttaacattaggtatatctcctaatgctatccctcccccctccccccaccccacaacag
-gccctggtgccatggaatactatgcagccataaaaaatgatgagttcatgccctttgcag
-ggacatggatgaagctggaaaccatcattctcagcaaactatcaaactatcacaaggaca
-aaaaaccaaacactgcatgttttcactcataggtgggaattgaataatgagaacacatgg
-acacaggaaggggaacatcacacatcgggacctaatcttaagctaagtgtggctaagagc
-ctatctgctggcctttactattaagcactgcccactggattgcagcctgaattacaccgc
-caaacaaatactgtttcagcatacattaccagtgaaacccaatgcaggaacatagtcaaa
-aataaacacctggcatagagacttggccctctgaaaacacccagaaaaaagccagctata
-ttcaacatacatcactgtcaaaatatcaaggaaaatgaagaagaataaaacaaaaagtca
-aaaccaaatgataggaacttcaaaaagataaagtaacaccagctgtcttagatgagaaag
-aatcagcacacattcttgcaattcaaaaagtcagaatgtctccttacctccaaacaatca
-tactagctctcatcagattgaaatggctgaaatgacagacatagaattcatgatctggaa
-ggtaaggaagctcaagaacattcaggagaaagttgaaacccagtccaaggaagccagtaa
-agcaatccaagagtacagagataacatagccattttaagaaagaaccaaaagaaacttct
-gcaattgacaaattcattataggaattttgtaatacattcagaagcattaacaacagaat
-agatcaagttgaggaaagaatctcagagctcaaagatcagtcctttgaatcaacacagtc
-agacaaaactaaagaaaaaaatttaaaaataaaacctctaaaaaaatatggaattatgta
-aagataccaaacttacaacttatgggcattcctgaaagaggagaaagaataagtaacttg
-gaaaacatatttgaggatagtccatgaaaatttccccaatctccctagagaggctgacat
-gcaaattcaagaaatgcaaataacccctgtgagataactacaagataactatccccaaga
-cacatagtcataagattctccaaggtcaacgtgaaagaaaaaaatcttaagggcagctag
-agaaaagcctgaggtcacttatgaagggaagctcatcagactaacagcagacttctcagc
-agaaaccttacaaaccaagcaagattaggggcctatttttagcatccttaaagaaaagaa
-atttcagtgaagaattccatatcctgcaaaactaagcttcataaaagaaggagaaatagg
-ctgggcatggtggctcacacctgtaataccagcattttgggaggctcaggcaggaggatt
-gcttgagctcaagagtttgagaccagcctgggcaacatggcaaaaccctgtctcttctaa
-aaatacaaaaattacctgggcAAGACTCCATCACAAACAAACTAACAAACCAAAActatc
-aggtactatgctcactacctgggtgacaaaatcatttttacaccaaacccagtgacaagc
-aatttacccatgtaacaaacctgcatgtgtatcccctgaacctaaaataaaagttaaaaa
-aaaaagaaCTTTCATCAACatttcttgcagtgaaggtatgttagtgatgaacattctctg
-cttttattgcctgaaaatatctttattttgtattcatatttgacatatattctcactggg
-cataaaaattctaaattacaagtttttccccttttttgtattaaaaatttcattccaata
-tcttTCATATTGCCTTATTTGTAATGATGCCTTCTATCCTTCTTATCTTTGTTCCATTTA
-TAAGAAGTGTTCCCCAACCCCAGACTGATTAAAACCATTTTTTTAATTAAAAAAGCAAAA
-GAAAGAAACATTTTTATCTGAAGCTGTCTCAGACTCAGACACCACCCAATCTTCAGATTT
-CAAATAGCTTATACTCAAACATTTGGTAATATCAGCCCCTTAATGGTCTTCCTGGAGGGC
-AGATGCATTCTAGAGATGAGAACACGATCATGATTACGAATGCTACCACCACTACGAACG
-CACAAAAGTCACTGGTGTGATCCTTTCTCAGAACACTGTGGTAACTTCTGGACATTCTCT
-GCTGTTATCATTGCTTCTTCCTTCTGGGTTTTTTTCCCCCTTATATGGGCAGATAATTTT
-CTCCATTGGAATGAAAAAGTCTTGCTTCATGCTCTTtaactgtgtgaccttgggcgtatt
-actttactttggggcaaaccattttccttcttgaggaccaaatgtgctcttttataaaac
-gagcagttagaattagattgtctctctggacacggcttatgttgacaacctggatcacAT
-TAGAGGATCAcactgagacctttatgtcggcctcagttcctccatctgtaaagtagaggt
-tgggcttagattatAGATGATAAAGACACCAACTTTCctggaaaggattctggaaaggat
-tctgAACTTAGGCTCAGCCTCAGTAAGAAGGAGTTCTGTGATTAAACAGGGATGCCCACA
-CATCAGCAACAGAAATGGGCAGGTCAACCATGTATGCTGTGCCTCAGTGAAGATTTTATG
-CTATGCTGTGCATTTGATATCCATTCTCTATATTTGATATCCAATCTAAGATTATCTAGA
-AGGTCCTTTCCAAGACACTGATGAGATACATCTGTATAAATATATAACTCAGGATGAAAG
-CAACTTTTAACATTTAGCGTGTGCCTCTGCCTCTGATCTGATTACAGCCCACAGAGAAAT
-ATAAACAATACACAATACAGGCTAATGAAGAAGGGTGATAAGAtttttttttttttttga
-gacggaatttcactcttgtcacccaggctggagtgcaatggtgcaatcttggctcactgc
-aaccttcgcctcccggttcaagcgattctcctgcctcagcctcctgagtagatgggattg
-gaggtgcccaccaccacgcccggctaatttttgtattttttagtagagacagggtttcac
-catgttgtccacgctggtctcgaactcctgacctcaggtgatccgccagcctcagcctcc
-caaagtgctaggattacaggtgtgagccactgcaaccggccAAGGGTGATAAGattttaa
-aaatttatttaaaataCAGAAATTTCAAAAAGAGAGAAGTGCAGTGATAGCAAAATTGAT
-GCAAACTGTGCAAGCATGAAATCTATTTTATAGCTGAATCTACTTTTCTTGGTCCCAAGA
-TTCTATTTCCATTGGTTTTCAAATAGTTAATTCTATTGTTTTTTCAGGGAGATTACTAAA
-ATCACTAATAATTATTTTCCTACTGACACAAAATCTAAAAAGCACCATATAGACCTTCTC
-TCTCCATCTCCCCTTATCCTTATGTCACCTTACCCTACCCCAATACTCCAATGGCAGAGT
-ATCTACCCATGGCAGAGTAGAGAATATGTACACTAACAAAACCAGATGCACAGAGGTGGG
-GTATCCATCTCTGACTTGGCTGAGCTAGTCTAAGGAAGGAAGGCTCTGTGGCCATTGTCC
-TTGGAAGTCATTCTCACAGGTTGGTGGTATTCTCAAGTAGGTGGTGCTTGAGTGGCCCAA
-GAGCACCCACATGCTGCTATGCATTTTTCTGACAACCTCTTTATGATCTCTGACTTTGGC
-AGATCATCTTGCATCTCTCAATTGGAGAGTCACTTTTCTTATCTCCACAGAAAATTCTTA
-ATCAAGCTCCTGGTTTTCCTTTATAGCTTCTACTTTTTAAACTCACTTCTCCAACTTCAC
-CGCTACATCTCTGACAGATGAGAACATTAGAGATTCCCTGTTTTTCAAAAACAAAACAAA
-ACTCAGCAAAACTATAAATATACTAAGGGTAAGTCTGTATTATCTCCTGCCAAAATACAC
-CACCCTGCATTTTTTTAAATttttatcttttgtaggtacatagtaggtgtctatatttgt
-ggggtacatgagatgttttgatacaagcatgcaatgcataataaccacatcatggaaaat
-ggggtatccatcccctcaagcatttatcctttgtgttacaaattatctaattatacttta
-ttattttaaaatgtacaattaaattatttttgactatagtcacctcgttatgctattaaa
-taccaggtcttattcattctttctaactattttttgtacccagtaaccatcctcaccttc
-ccacacacgcccaccacctttcccagcctctgataaccatccttctactctctatctccc
-ttgaattcagtagttttgatttttagatttcacaaataagtgagaacatgcaatatttgt
-ctttatgttcctggcttatttcacttagcataatggcctccagttccatccatgttattg
-caaatgacagcatctctttcttttttatggctgaataatactccactgtgtataagttcc
-acattttctttatccactcatttgttgattgacacttacgttgcttctaaatcttggcta
-ttgtgaatagtgctgcaacaagcacaggtgtgcagatatctattcaatattcttatttcc
-ttttggaggggagtgtgtacctagcagtgggattgctggattgtatggtaactctatttt
-cagtttttttaggaacctccaaactgttctccatagtggttgtactatcttacgttcaca
-ccagtagcatacaagggtttccctttctccaaatccttgccagcatttgctattgcctgt
-cttttggataaaagccattttaactggagtgagatgatattccattgtagcttgattttc
-atttctctgatgatcagtgattttgagcaccttttcatctgcctgtttgccatttgtatg
-tcttcttttgagaatatctattcagatactttgcccatttttaagttggatcattagatt
-tttttcctatagaattgtttgagctctttgtatttcctgttattaatcccttgtcagaag
-ggtcgtttgcaaatattttctcccattctgtgggttgtcttttcactttgttgattgtgt
-gctttgctgtgcagaagctttttaacttgatgtgatcccatttgtccatttttgcttcga
-ttgcctttgtttgtgggttgctactcaagaaatttttgtccaaacatcctggagagattc
-cccagtttcttatagtagtttcatagtttgagatcttagctttaagtctttaatccattt
-gacttaatgttttgtatatggtgaaagacaggggtctagtttcattattctgcatatgga
-tatccagttttcccagcaccattttttaaagagactgtttttcccccaaagtatgttctt
-ggcaactttgtcaaaaatgagtttactgtagatgtgtggacttgtttctgtgttctctat
-tcttttccattgctctatgtgtctgtttttatactagtaccatgctgttttggttactat
-agctttgtagtataatttgaagtgaggtaatgtgattcctctagttttgttctttttgct
-taggatggctttggccatcctgcatttttAAcccttttcccattttcacccagaatactc
-gctggtggcacttgcagctgcagggtttaccctgagataactttgccacaaaatatctcg
-cctttattattattttcacatcgttctaatatatcgactttgaaaacacaaatcatcatt
-ctatttatagcatcttgttgttagcagtggtatttccatttacaaaatatagaaattctt
-gatcgctgaaaatgtcaaattctagaaagcatagcattcccatgttaacattgttctcaa
-acagttttgggccaaagagtcatttaatgaatccggttttttccaaaatagatgattctg
-attattcagatgattctgatgttagttctgtttaaaaataattccaagaacagtttgtat
-attttattttcacactgaacatcagtcagcctccagagcatgttaatgtaaaattaaatg
-aacatgggcagtgagctgcagttttttttctaaacagTGCAGCTGTTTAGAAAATTTTTT
-TAAAATTTTCCTGATTTCCTTGGTATTAAACATATGTGGGAGAAATACAGCTCAGCAAAC
-TCTTCCAGGAGATAAAATGCTGATCACTCCTACTGGGCAATTTCACAAATGTCTCCTATA
-TTTTTCTCCTTTGGTAGTGGGGATGGGGGGCATAATGTTACATTGGGCctctctcctctc
-tctctttctctctccctctcCTTTTAAAATGTTTCCTCTCTCTCAATATTTCATTTCTTA
-TTTGTATTTCTGAATGAGGGAAAAGAGTTGATGGGACAGCGGAACGGGAAAAAGAAGAGC
-ACCAATAAAACCTGTTTTCCTGTTTTCACTATTTTCATTCCAAATTCCTTCTGTCTCATA
-ATTGATGGAATCTTATGAACTTATTAGTTAAAAAGTGTCTTTCTTGTTTCACAGGAATTC
-ATATCGGGGTGATCACTCAGAAGAAAAGGTGAATACCGGATGTTGTAAGCTATTGAACTG
-CCACAAGTGATATCTTTACACACCATTCTGCTGTCATTGGGTATGTACAAAGTGCTGCAT
-ACAGACAGAGGAGAAGGACAATTGAGCCCATCTAAAGTTAACAAAAACTTCCTCTTGGGG
-CTGTTTCTTTCCATCAGACCTTACAGTTCTACGGGATAATAGCTTATCTCATAAGGCCTC
-AGCTTTCTTTAATAATTTCTAGAAGCAGACGTTATTGTGTCATGCACACTCAGTGTTGCA
-AATTAATGGTCTGGTGATCTGGGTGGCATGGCATTTTCCCCTTCTCTGGTTCATCACCCA
-TGATAGACCAGTAAAGGTGACCACTTAAATTCCTTGCTGTGCAGTGTTCTGTATTCCTCA
-GGACACAGAGCTTCCTCTCTCCCAGGAGCCATGAATATCCTGATGCTGACCTTCATTATC
-TGTGGGTTGCTAACTCGGGTGACCAAAGGTAATGGAACCCTATAAAGCAGAGATGATGAC
-TAGGATGAGTTGTTGCCCTTGGGCTCCCCTGGTATCATGATGGGAAGAGAGGGAATCTGC
-AGGAAAAATCTGGGCCAACAAAGAGCAGCAGAATGCTCTTATTTTGGCAGCTCCATGCCC
-CTAGTCTCTGAGAATCTTTCTGTTAGGGGCATCTAGCAAGCTGGGATGTCCTCTGAGGCA
-TTTCTCCAAAGACAAGAATTTCCTTAATGCTCTGAGCCACCCTATCTGTCTCTCTACATA
-ACTATCCAATGTTAGTTCAGCCTCACTTCACTTCCATTTCGATTATTCTGTTGTATCTAT
-TTCATTGTTGTGTCCTATTAGTTCTCCTACCATCTTGAATTCTTCTTTGCCCGGAGGGTA
-CCTTCAGAGGGAGGCCCTCACTTTCATGTTCTTAGATATGGTGAACAAGTCCATTGACAG
-TTTGTAGATTCTGTAGCACTATCATATGGAAGAGACAATATATATGTTTGGGGTAGAAGT
-GGAAATAAGTGGAGTGAAGACAGGATAGACAGACTAGTGACCAATGGGGAGCTTCTAATT
-TTAGATGAATAGGAACAGTCTGTTTCCACTATTTAATAATGCTACTTTTGAAAATTGTTA
-ACTTTTTATTAAAAAATAATACTTGCAATTGACTTATGTATCAAGCAATCGATGGATTTA
-TAGGGTTTAAGGAAAAGAAAAATGTTTGTCTGTCCAAGAATACCAGTTCTTCAGTCTTCC
-CCTTCAGAATCAATCAATGTTACCAATTTCTTATATATCCTAGCAAATACAAATATATTT
-ATATTTGCATGTGTATACCTTTTAGATTTTTAAAAAATGCAATTGCAAATGCACCATGTG
-AATTGTTCTGCAATGTACTAGCAATATATTAGAGACATCTTATCCATACATAAACCTAGT
-TCATTATTTTTAATCGATAAGTAAAACTTTGAGGAGGAGCAGATGAATTGCCTCACATTA
-ATTACTCCGCTACTGATGAAAAATAGGTCTTTAATTATCAAAAACAATTCAGCAAGAAAA
-ATTTGTAAACAAATGTATGTCTTTTCATTTATGACTGGACACGTGGacacacacacacac
-acacacacacacacagtcaaaccacctaccagaaaagctgaactattcttctctcctatc
-accagttgcaagagtgtcagcttcccacaccctcatcagtcctttttgttttttctacta
-cattcagttttctactacattcagttttacagtctaatatgtgaaaatgatgtcctgatg
-tttgaattcatgacactttagttataaatgagtttgaacatccagtccattagatttcta
-aactttcttAATTATCTTTATATACTAAGAAATTTGGCTTTTGTTAAATTTGGAGGTGTT
-ATATGTTGCCTAGAAAGATGCTATTCATGTCTATTAAATGGTTATAACTGTGCCTATGAT
-CTGTTATGTCTTGATTCACATGTTGATGTAATGTGAGTTACAGAATTAATATCTACATTC
-ATTTCTGATTATAAACTGCTGTATTTGTTGAAAATTTGGAAATTTTGAAATTGTAAAGAA
-GTAAAAAAATTGTAAAGAAGTTAAAAGAGACAAAATATTTTTGATCTATTGTTCTTCCTC
-AGTTTTCTTATTTGAATAAAAATGTATAGCATACTTATAAATTTTCTATTATACTATTAG
-TATTTTCCCATTTACTATTTTCAAAAACTGTATTTCCAATGACTGTATAAATTTTATAGA
-ATGGATACTGTTTAAATTACTTAGCCAAATTGTTTTTGCATAAATAAGTGCATTTACATT
-TTATAGACAAGGATGGCTAGTATAACCTTTCTTATACATAAATCATTCAGCATAAAATTC
-CTGGAGATGTACTTTTTTCTGTCTGCTTCATGTGTTATCAATTTTTGAATACTTGCCAAG
-TCCtaaaaatgaaatattatatataaatatttaatttttatttatGTCTGTGAGTAATGG
-GGAAGTCGAACTTCAAATACATGCTTAATGTATATTTAACTTTTCTACAAATTGTCTATG
-TCTCTCTTTCTCTTTTATTTTGGAGAGGTAGTTTTCATTTCTTTTGATTTAGAGATTTTC
-ATTTTTGTGTTCTCTTATAGGTTTTGTTTTGAAATTTAGCTATTTAGTCTCTCTGGGCTT
-TATATTATGTGTTTTCAAGTGAGATAGCACCTGATGGCTTGTGAAGCAACTTTTTACCAA
-GCCAAGCTATCAGTGGACTGGTATCCATAGATATATtttaagttgatgctagctgattat
-atatctggtatgttttagaaagaactccacacatgggataatgttttggctagatggctc
-cCCTACTTAGAAACATACAATTGCTAGTCATATTTCTAATTTTAGGATTTCGAGATACTG
-GTGATGAAGATCACATGTCCTAACAACATAATAGTTCCAGACTGAAGTTCTTTGAAAAAA
-ATGACTGTTGTCACTTTAGAAAAAAAAAATTATGAATTATTCCcaattgccatcattcta
-ctgctaaaaccaaattcttggaattatctatgatttttctatatcctatgacactcatat
-ctatcaggaagtctattacatctgcctgcaaattatatccagaatgcaattattctcgcc
-acctccattgctgccactctgattctagtcaccatcatctctcacctgtgttattgccat
-agcttcctcatgagatctgtccttctgctcttccctgccaccatcttgtgaagacacata
-gtgcatgatccgcttacactggaagtcagatcatgtacttttgctcaaaactctgctatg
-gccccctctatactcagagcggtaacaagagtccatacagtggctcacctggccctgcag
-gatctggcccttatgacctctctcacctcatctcctactattatagtccttgttcactcc
-actacagccacacaagccccagtgctcttccccaaacatatcagacttactcaacccata
-gagctttgtttgtttcctctgcctagaatgtacttgcctcagatactggtgtgactaatt
-cctttacctccttcaagctgtttaatcatcaccttgttacacaggcttgtgcaactcctg
-tttatgaatcttctattacccttaaatctattctcccttctttctgcaaaccatttgtca
-ccttttcatctacaaaataatgtacttttttattAAGGTAAAATATACATTTAAAAATTA
-CCATCCTTACCATGTTTTTACCATatttttatgtatacctgatggctgtttgtatgtctt
-ctgttgagaaatgtctattcaaatcttttgcctgttttaaaatcagattatttgtttttg
-tttgctatggagttttttgagctccttatattaatatactttttgttgttaattcctcgt
-cagatggatagcttgcaaatattttctcctactctgtgggctacatcttcactttgttga
-ttatttcctttgctgtgcacaagctttttagtttgatgtaatcctaattgcctatttttg
-ctttggttgcccgtgcttttgaggtcttacccaagaaatctttgccaagaccaacgtcct
-gaagtgtttccctaatgtttttttcaggtagttccatagtttcaggtcttagatttaagt
-ctgtaaAACCATACAGTCTAGCAGGGAGTGCatttactttttattatctgtctccctctg
-ctagaaagtcagctccatgtgatttttgtctgtttagttcacagatgtacctcaagggcc
-caggatagtgcctgtgccatagtaggggcccaaaactttgatgactgtgtgaCTATAGCC
-TAATTTAAGAATGGAGGGGATAATTTAAAAGCAGTAGGAAGGAATGTAAGTGAGAAACAA
-TTTTGAAGAATAATTGACAGAACAAGGCGATTCAAAGACAAAGGAGAAGAAGAGAGCCAA
-GATGACATATTTCAAGTATGGATAATGCTGGAGGAAAAAAATTAAGATATAAATCTTTGT
-AGATGTGAGGAACGAAGAAGCAAGGTTAGAGTCTGTCTTGCACAAAAGAAGTGGAAGGTC
-TAGACTTGAAACTTATAGAAAATTCCACGAAGTACAAAGTAAAATCGAGCCAGTAAAATA
-ACAAAGATAGAATAAATGACTCTAGAGGAGTGAAGGTAGAATAAATAATTGGTGAAGCTG
-GACTAGAGCCAACATTTCCCAGAGGATAAAATATAAACCAAATTATTGTGAGCCTAatat
-atacatacatacatacatctatatatgttttatatatatTATCACATTAAGTTCAAATAA
-GGTTGTTTAGAAAATTActtgctcttctgcacatataccaggcttcctcctccatagagc
-cttatctctagctgcttcctctgcctagaatacacttATCTAGGTACTCCTTGGGCAATT
-GTCTTGAGAAAGATGATCATGCCGTTTACTgcttgataaatgaacatacaatgcagcaca
-ctagtttccctttagatttatatcctcacccctcaaatgagtagtcacactgcttggaaa
-tcctactgcatttctcttgtaaatgaaccttccttcttttttttttttttttgagacaga
-gtctttctctgtcaccaggctggactgcagtggcccaatctcggctcattgcaaccgcca
-actccctggttcaagtgattctcctgcctcagcctcccgagtagctgggatcacaggcat
-gtgccaccacatccagctaatttttatatttttagtagagacaggttttcaccaggttgg
-ccaggatggtctcgatctcctgaccctgtgatccaccctcctcggcttcccaaagtgctg
-ggattacaggtttgtaccaccacacccagccatcttccctcttttttagacaactatttt
-gtcctgacctttatttgtcttttattttcctgctcctctcctctacatggctctccccct
-cagtttatcccatgccccatttatttaaacaattcaaataggaagttttcactcatttcc
-tctgtcccctttgccataaatggagaaacgtgtcttctccatctaaagatcagtctgctc
-tgtgtgaatttgtgactatgcccttctgtcatctcatcaccctattctatattaatctct
-ccttttctgcttttttttttttttttttgagatggagtcttgctcttgttgcccaggctg
-gaatgcagtggcacaatcttggcttactgcaaccttcgcctcccaggttcaagtgattct
-cctgcctcagcatcctgagtagctgggactacaggtgctcgccaccatgcccagctaatt
-tttgtattttttagtagagacagggtttcaccatggccaggctggtctcgaactcctgaa
-ctcaggtgatctgcccgcctcgatctcccaaagtgctgggattacatgtgtgagccactg
-cgcccagactgcttgtctcttttctcattgcttgcaagcaccatttggtatttctcgttc
-ttcaaaacaaacctgaaagctttcccttaaccttacattgctctctaacaagttatttat
-ttctctgcttttctttggatctaaacttcttaagagtttcatctacaggtcctgcattca
-cttctctctcattcacattttgaccaactgcaatttggtttcttttttcataccactcgg
-aagctgctctcctcagtatgaagttaccttcatactactaaaagcatggacattttcctg
-ccttcatcatttttttttaacctctcagcagtatttgactacaaaatgaccactctgtcc
-tttaagaaacagtctcctctcctgCTTAATGTAGTCACATCTGATACAACTTTCCCCATA
-ACCTTTTATGCATTTTCTGTTTTCATGCATATCAGCCCAACTTGCAATTGTCAGTATCTC
-CAGTCTTTCAACAACTGCTTGTGAAATACCCCTGTACAGGGCAATCCAGAAATGCCAGAA
-AATTATCAGCTGTCTCTGGATCATCTGTCAACTATGGGGGAAGCTGGATAAATAGTCCAG
-GTCCTTTGAGCCTCATGTAGAATAACTTTGAGGCTTGGTAATATTTTTTTTTTCCTGTGG
-TAATTCCCTTATTTGCAGTTCAAGGCTATTATGGGAAGAAAACATAAATGGATGTTAGTT
-CTTCAAGGTTTTTACTGTAACTGTGCACCCTTTCATTCTTCAAGGTTTTTCTGTAACACT
-GCACCTTCAGGACCTGATGCCCAATTAAACATTTTTTTAAGTTTTTTGGTTTTTTTTTAA
-TAAAAACTAAATGCTATTTTTTCttctacttttagttgatgtgtaataattgttcatatt
-tagaagatgcagagtgatattttgatacatgtatacaatgtgtaatgatcaaatcagggt
-aattagcatatctatcacctcaaacatttgtcatttttttatattgggaacattcagaat
-cgtctcttctagctatttgaaaatatacagtaaatgattgttaactaccgtcaccctaca
-gtgctatagaacagtggaccccttttggcaccagggaccagttttgtggaagacagtttt
-ttcgacgaggtgaaggtggtggtggggatggtttcaggatgaaactgttccacctcaggt
-catcaggcattagagtctcacaaggaacacacatcctagatccctcacatgcacagttca
-caatagggttcatgctcctatgagactctaatgccttggctgatctgacaagagatggag
-ctcaggtggtgatgcttgcacacctgctgttcaccttttgctgtgcagcctggttcctaa
-caggccatggaccagtacccattggctgcccaggggttggggacccctgctataggatgc
-tggaactttttcctcctatctaggtgtaattttctatctgttaaccaacctctctctatc
-ctcctttcccttcccagcctctagtaatcattattctacagtctacttctatgaactcaa
-cttttttagctcctgcttatgaatgaaaacatgtggtatttatctttttgtgtctatttc
-acataacggaatgtaacatgtcccccaggctcatccatgAGTCTGAGGCTTATTTGTAGC
-CTGGCTGCTGGGCTTCCCTGTGGGATTGTCCTCTGAGCAAACAGAACACAGCCATCCTGC
-TGGCCAGCAGTTGATAGATGATCTCATGATAATAACAGGTTATAACTCACCTTTTCTTGG
-ATTTCTTGCTTTCCTGATTTCTACATTTCTCCACTGATTTTTTTTAAGGAGGAATTGTCT
-CTCAACTAAACTATTATATTCAAATCTTTGCTGGAGCTCTGCTCTGCTGGGGGTCTGCTT
-TAAGACTCTAGAGTCTTattctcctgttttgatctgacttatcttattggtccttttaag
-tcgtttcctcttatctgatctcttatctcttaatattgaaactcactagaatttaattct
-agtcctctttttttctcatattattccaacccaccatggtttaccaatttctgtacttta
-aatgctatccataagcaatcacatttattgatttgcatatgtcgaaccaaccttgcattc
-caaggataaaggctacttgatcgtagtggataagctttttgatgtgctgctggattcagt
-ttgctactattttgttcaggatttttgcactgatgttcatcaaggatactggcctgaaat
-tttttttttcttgtgtctctgctaggttttggtctcaggatgatgctggcctcatagaat
-aagttaaagcggagtcctgccttctcaattttgggtgaatagtttcagtaggaatgatac
-cagctcttctttgtatatctggtagaattcagctgtgaatccatctggtcctgggctttt
-CATTTTCATCCTTTCTTTCTAGGTTTCGTATCAGTCTCAGTATGctctctctctctccgt
-ccctctctttttctacatttctccttttctcCATACAACTTCTTTGATGGCACATAGCAC
-AATTTTAATATACACTTTTTGTTCTCCTGTTTGTCTCTTACAATGGCTTTTTGTATTTGA
-CATCATATTAGTCTAGATGTCAGTCAGTGTAAATTTTTGAATGAATGAAAAGTTGTTATG
-TTGATGCCAGAGTTAAAAATTTGACCTATATTTTATTCTCTACAGGTAGCTTTGAACCCC
-AAAAATGTTGGAAGAATAATGTAGGACATTGCAGAAGACGATGTTTAGATACTGAAAGGT
-ACATACTTCTTTGTAGGAACAAGCTATCATGCTGCATTTCTATAATATCACATGAATATA
-CTCGACGACCAGCATTTCCTGTGATTCACCTAGAGGATATAACATTGGATTATAGTGATG
-TGGACTCTTTTACTGGTTCCCCAGTATCTATGTTGAATGATCTGATAACATTTGACACAA
-CTAAATTTGGAGAAACCATGACACCTGAGACCAATACTCCTGAGACTACTATGCCACCAT
-CTGAGGCCACTACTCCCGAGACTACTATGCCACCATCTGAGACTGCTACTTCCGAGACTA
-TGCCACCACCTTCTCAGACAGCTCTTACTCATAATTAATTAACATTTACTTCTGGTATGG
-AACAACTAGAAATACTGCTGGAAATAATATCCAAAGAGCTGATTCTACCAATCCAATTTC
-ACCAGGAAAATTCCATCAGGGATTGGATGACCATGGGGATGGACATAATTGCTACTACCA
-ACACAACAGCCAAGAGAGTTGCCTTACAATTAGAAATGTGTAGACAGAAATGTATAGAAG
-ATACAAGGATTCTCTTAATTGGACTTAAATTCTTTATCTGTCTTCCTCCGATGTACTCAA
-ATATATGAGCTAATTTTTGTCTTAAGTGAACATTTGTATATCTATGTATTTTTCCATGCC
-AAAAACAAAAACGAAGACCATTGTTTGGAGCTGCCTCTTATGACTAAGACAAGAATTTTT
-ACTTTAACAGTGCCTGGCCCACTACTATCGTATATAGGAGAACATATAAAAGCATATAGA
-AAGTTCCAGATGAATGTTCCCTTCTCTACCCTCCACCTTTTATTGTAAGTTCTGACCCTA
-AATACTTTTCTGTGTCATGACGTCAAATTTTGTTTAAGGTTCTAGCTGGTAACTAACAGA
-GTCAGAAGCTAATTCTTTCATTCAACACAAGCACTGATCTAACTGGATAGAGATAAAAGT
-GGGACTTGCCTTGAGAGTACATCATATTAAATTAAAAGCTGCATCTCAAATTCTACTTAT
-CTTTCCAATCTTCTTTCCACTTAGAATTCCAACTTCCAAGTATGGCAGCCTCATAACATG
-CCTCTTCAGGTCTCTGTGTTGTCCATGAATGTTAGTTGTGTGCAGTGTTTCTATGCTTTG
-TATGGCTGTACGCATGTGACTGCTGTTTGTATGGCAACAGGTGGGTCAGTAAGTGTCTTC
-TATGATACTACAGAGAAGCGGTTATTAACTATAAAGTTGATTAGGttttttttttttttt
-gagacagagtctagctctgtcgcccaagctggagtgcagtggcatgatctcggctcactg
-caagctctgcctcctgggttaacgccattctcctgcctcaggctcccgagtaactgggac
-tacaggcacccactaccacacctggctaattttttgtatttttagtagagaggggtttca
-ccatgttagccaggatggtctcgatctcctaacctcatgatccatccgccttggcctccc
-aaaatgctgggattacaggtgtgagctactgtgcccggctGATTAttattttttttaagt
-tccaggatagaagtgtagaacatgtaggtttgttacataggtatacatgtgccatgatgg
-tttgctgcacctatcaacgcatcatctaggttttaagtcccgcatgcattagctatttgt
-cttaatgctctgcctccccttccccacacaccctgactggcccccatgtgtcacgttccc
-ctccctgtgtccatgtgttcttattgttcaattcccacttatgagtgagaacacgtggtg
-tttggttttctgttcctgtgttagtttactgaagatgatggcttcgagcttcatccatgt
-ccctgcaaagagcatgatctcattcctttttatggctgcatagtattccatggtgtatat
-gtaccacattttctttatgcagtctatcattgatgggcatttgggttggttccatgtctt
-tgctattgtaaatagtgctgcagtaaacatacgtgtgcatgtgtctttataatagaatga
-tttatattcctttggatatatacccagtaatgggattgctgggtcaaatggtatttctgg
-ttctacatccttgaggaatcgccacactgtcttccacaatggttgaactaatttacattc
-ccaccaacagtgtaaaagtattcttatttctccacagccttgccagcatctattgtttct
-tgactttttaataattgccattctgactggcatgagatagtatctcattgtggttttgat
-ttgcatttctctaatgatcagtgatgttgagcttcctttcatacgtttgttggctgcata
-aatgtcttcttttgagaagtgtctgttcatatcctttgcccactttttgatgtttttttt
-ttcttgtaaatttaagttcttgtagattctggatattagacctttgttagctgggtagat
-tgcaaagcgttcctcccattctgtaggctgcatgttcaccctgatgatagttttttttgc
-tgtgcagaagctctttcatttaattagatcccatttgacaattttggcttttgttgcaat
-tgcttttggtattttcttcatgaagtctttgcccatgcctatgtcctaaatggtattgcc
-taggttttcttctagggtttttatggttttgggtattacatttaagtctttaatccatct
-tgagttaatttttgtataaggtgtaaagaaggggtcccgattcagttttctccatatggc
-tagccagttttctcagcaccatttattaaatatggatcaaattcacacataacactatta
-accttaaatgtaaatgggctaaatgccccaattaaaagacacagactggcaaattggata
-gagtcaagacccattggtgtgctgtattcaggagacccatcacacatgcaaagacacaca
-taggctcaaaataaagggatggaggaaaatttaccaagcagatagaaagaacaaaatagc
-aggggttgcaatcccagtctctgacaaaacagactttaaaccaacaaagatcaaaaaaga
-caagagcattacataacggtaaagtgatcaattcaacaactagagctaactatcctaata
-tatatgcacccaatacaggagcactcagattcataaaacaagttcttagaggcctacaaa
-gagacttagactcccacacaataatagttggagactttaacactcagtgtcaatattaga
-cagatcaatgagacagaaaattaacaaggatattgaggacttgaactcagctctggatca
-agtggacctaatagacatctacagaactctccaccccaaatcaacagaatgtacattcgt
-ctcagtgccacatgacacttattctaaaatcgaccacataattggaagtaaaacactcct
-caggaaatgcaaaagaactgaTTAGTTATTAATAAATTGGGCTGAGGCTTGGGCGCTACT
-GAAAGCCACAATATCAGATGCCAGAATGTCTCAAAATCAAAAAGGTTTTTTCCTCTAATT
-ATTTTTTATGTGATCCAAGCCAAGCTGCCAGTGACTATGGCTGTAGTTTGGATGTTGACC
-ATCAGACCACTGACCTTTCAGTAGACCTCATATTCTAATAGGTCTTAGACCACCAGTtag
-ggtgtccatcattcagatttgattgggactgaggggcttcccagaacatgggaattagag
-agctaaaatcaagaaaatccagagtaaattgggacaagttgatcaccctCACTTCAGTGT
-ACTTCTGTCTAGCAAGCTATTTTTCCATTTTTCATGGCTATACCTCATCACATAGGTCAT
-ACATTGGCTTTTCACAGAATCAGTCTAGGGTGCTCTTTTTCCATATTTTTGCCTCAACTG
-TCATTTCCTGAAACACACTCCTTGAGCATGCAGAACACCTTCCATTCTACTTTGTATTAT
-TTTCTTCCCATCATTTGAACTCTGAAATCATTTTGAGTATTTACTCTCTCTCTGATTTTT
-TTTACTAACTTATGGCCTAACACCCCTGCTATAATGTACATATAGTCCTCATCTCTTGgt
-cttgttgacctatgtgatccaaactgcaagaacagtgcgtcacacatgagaaatgctcaa
-taaaaatttgAGAACAAATTATTCAGGCAGTTATCTTAATATATATGAGAAGGTTATATA
-ATATAAAAcagtagtcttcaaactgcaatactggttacaaaaagatttttcaagctatac
-atattgatagtttaaaggaataaaatttcagaccctcaagttccaaatttcttatgatgt
-tttggagcattcttaacaggctcttcttttataactccaatttctcaattttccttctcc
-cactctgaaaagaaaacttacctctcacccaccctttatctgacaatcatggattgccct
-gagtgaacaaacctccagtggacaattgaaatactagtgctggTattcagaaagtgaata
-atcatagactttgaataaaaatcctttggaaataaaagtgtttttaatttttttgtttac
-aaaagcaatgatggggtgtcaatcaagttgatggttaatattaaatagatctttgaagat
-aaactttaataatagcctactatgaaattttttagcatatcacttggaagaggttaaaag
-aactgtgtaaacattagagtcttatgttcaaagagatttcacaataagctacaatgtatg
-tctatgttttgtcacagagaaatgtgatagaatgattaataaaagacttgcaaacacaaa
-aatatagtacattaggatcaaattttgcagagaagtttgaataaaaactaaagttttaaa
-aagaaaaaagatacaatgttcccaattgctaaaaaagagcttctttgcatatttattaaa
-tgaattattgtgattagcaaattgtcatgcattcatattccattggatgtatttagtatt
-tagttgttacatgtcaatatttgtaatatgctattagttatctttttatgattaaaattt
-aagatgaaatagtttatttcccaattttaaattgtattgggaaaatacacactttATTTT
-TATACCTAGCATAGACTTTTTGTTCCTTCTAATTGGAAAAAGGCTTTGCAATTTGCAATT
-GGTATATGTGTGACTTCTAGAAATGTGGTGTTCTttttttgttttttgtttttttgtttt
-ttttgagatggagtctcactctgtcgcccaggctggagtgcagtggcgccatctcggctc
-actgcaagctctgcctcccgggttcacgccattctcctgcctcagcctccctagcagctg
-ggactacaggagcacgccgccatgcccggctaatttttgtatttttagtagagacggggt
-ttcaccctgttagccaggatggtctagatctcctgacctcgtgatccgcccaccttggcc
-tcccaaagtgctgggattacaggtgtgagccaccgcgcccggccCAGGAATGCTCTTAAC
-CACTTCATCAAGCATCAAGGTTGGCACTGTCTAGATGTTGGTTTTGATTGCCAACCTACA
-AAAGAAAAGGGAAATTATAAAAGAGAAAATTAACAAGTGAGTACAGTTTCAAAATCTGTC
-CTGCAAATGTGTTTTAAACCAAAGAAATCATCTTTGGCATGGGCTATTTGCTTTATAGTC
-ATTCAGAATTGCTTGGTCTCTGTCTCCTGAAGACTGTGGCTAGGATTATTCCTGATGAAT
-GAGAAAGTTACCATAAATCAAAAATAAAATGAATAGAAAACTTAACAGTTGACTCTCAGA
-AGAAGGTATCTTCCCTCACTTTGCACTGGTtatatatatatatatacacacacatacata
-taATTGTATAATATGTATTAttttataaattgatttagaaggtacaagtgttgttttctt
-atatgcatatattacatagtggtgaagtctgggcttttagtttagccatcacccaaatag
-tgtacattgtacccattaagtaatttctcatttcttagcccccttctacccttccaagtt
-tccagtgtctattacccactccttatgtccatgtgtatacttagtttccacttgtgagaa
-catgtagtatttgactttctgtttctgagttatttcacttcagataatgAAAACATTCAC
-TTCAGATAATGAAAACACACTTTTCAAAATTCAAAGAGGTTTGAAAAGCTCATGGCCTAA
-TACCCCCACTATAAATTTTATTTTTAAACTGTTCATACTCCTAGAATGAACAGAGGCTTC
-AAACACTATCTGGTATAAACTGATGATGATTCTTCTACTACTGTGATCATTCTGTTTTTC
-TATGATTCCTGGATTTTCCTTTTCCATGAATGTGGGCTTTGCAGCATAACTTCTAGTTTG
-TTTATATCATTGCCCTTTAGGATCTCCTGTAGGCTCAGTAATCTATCACTTCCCTATATG
-GGACTGACCTCCAAATTACTGACTTTATATGTTCTCTCTCTCTCTCTCTCtgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTTAGTATTTGCATTTTG
-CCACATTCTTATATAGTTTCCAGCTCAAGTCTGAAATTCTCTACCtctttatctatgctg
-tccatattaggtatatgatttgataagttagacatgtgacatatatttcccccattctct
-gggttgttttttcattatatcaatggtgtcttttgaagtagagcagtttttaattttgat
-gaagttctcttttttaaaaacacttttctttttggtgtcatatctaagaaatcattccct
-aatttaaggtcataaaggcttattcttgtgttttcttctaagggttttagctttcacatt
-tagctgtacgatcctttttaatttaatttttttgtatgatgtaaggtaggggtccaaatt
-cattcttttgcatgtggctctccagtttctccaacactatttgataaaaagactatttac
-ccactgaattgtctggacacccttatagaaaatcaattaataataaatgtGataatttgg
-gcagatctttggagagaaagcaccaagagtggatggagaggcaacactgacaccaaagct
-gaagagagaggaagctggaatctctgcatgaggtgcctgaacattagggctagttcctga
-ccctgagtggctcctggggaaggggtaagtaaggggactaaggaacatcccgcttttgcc
-atggacctctgggatcatagctacagggtaccccatgtccctcatggatttgtaggctag
-cagggagcaggcagagacagggcttcagccagtgtgaagcccaggagcttttgtgcatgg
-ggcagctctggcagcgcatgaccgcaggtgcccatccccaagggctccccatcttcttct
-gagaggctgtagccccagctgactgctggacctggagagagtggcgccagctttgccatg
-ggactggggtgcatctgttctgcaggctctcctgcctgccagcccctcccatggcccctg
-cctagccaccctgcaggagcatgagcacagcacagcctccaccactaagccggagtgctt
-tgctccacctgagtacattcccagtaacctgggagcacttcagatccctcagtgcagctg
-gagcttgaccccaagccacagatcatccccgtgccccagggctgcagcacacagcttggg
-agcatgcagctgagatctgtggctgacaggcaagtagaggagaggcccccaatatcagaa
-cataaagggggcaagatgtgtgggttcatgggccagcttgggagcaaggtgtgcctccct
-ctgcagggttggtctggaaagggtgtggcccatctccctgccatggcctctgcccaagga
-agccccacagcctggaacacctaacgaaacacagaaatgatgccagtgatcagggtgggg
-tccctaaaggcccaagagcagatctggtgaggagttttctctcccactccactcaccata
-gaacatgcctgcaaatggaaggacatgcaaaagagctgagtaacagcctatgtaccagtc
-actacttaagcatcaatgactagatctcagccccaactacagcaccaaaaatgattctgc
-taatatacacccctgtgaaaccaagtgcaagactttgcccatacataaagatcctgtaca
-gagccacggacctctgaaaacatccagaaatgaactcaactgactatattcaacttacac
-cacatttaaaagaaaaccagcccccctcccaccagaagagaaagaatcaatgcaagaacc
-ccagcagttcaaaaagccagggtgtccccttacctcaaaatcagcccactatctccccag
-cagtggtccttaaccagactgaaatgacagacatagaattcagaatccaaatggcaagaa
-gctcattgagatttaggagaaagttaaaatccaatccaaggaatccagtaaaatgattca
-agagctgaaagatgaaatagccattttaagaaggaaccaaactaaacttctagaactgaa
-aaatttgctacaataatttcataatatgacagtataacagtattaacagaatagaccaag
-ctgaggaaagaatctcagagctcaaaggctggtccttcaaatgaacaaagtcagaaagaa
-aaaatctttaaaactgaacaaaaccaccaagaaatatgagattatgtacagaaacaaaac
-ttctgacacactagcattcccgagaggagggaaagagagtgaacagcttggaaaatatat
-ttgaggatatactccatgaaaatttccctaatctcactagagaggttgacatgcaaattc
-aagaaatacagagaaccccagctagataaaatacaacatgaccatcccaagaaacatagt
-catcagatttgccaaggtcagcatgaaggaaaaaaaatcttaaagccagctagaaagaag
-ggtcatgtcatatgtaaagagaaccccatcaggctaacaccagacctctcagcagaaacc
-tgacaaaccagaagagattaggggcctttttcagaatccttaaagaaaagaaattctaac
-caagaatttcaaatcccatcaaactaagcttaataaacaaagaggaaataaaatatttct
-cagacaagcaaatgctgaggaaattcatcacaaccagatatgcctccttacaagagattc
-ttaagggagctctaaacctacaatcaaaagaacaacacctgctacaaaaaaaaaaaaaaa
-aacatacttatgcacataaagacactataaagcaactacactatcaagtctacataataa
-ccagctaacaacacaatgacaggataaaaatctcgcatatcaatactaaccatgaatgta
-aatggactaaacaacccacttaaaggacacagtgtagcaagattgataaaaagacaagac
-ccaactatctgctgtctttaagagacctacctcacatgtaactacacccacaggctcaga
-gtaaagggataaagaaagatctgtcacacaaatggaaaacaaaaaagagcatgagttgtt
-attcttatatcagataaaacagactttaaatcaacaactatgaagagggacaaagaaggg
-cattacataataataaaggatacaattcagtgagaagacttaactgttgggcctggagag
-agtgggaccacctttgccatgggactggggtgcatctgttctgcaggccctcctacctgt
-agcccctccgaaggcccctgcctagccaccctgcagaagcatgtgcacagtgcagcctcc
-actgccaagcctgagtgctttgctccacctgaatatgtttatattctaaacatatatgtt
-cccaacattgaggcacccagattcataaaacaagttcttcttaacctataaaaagatgta
-gatagccatgcaataatagtgggagacttcaacaccctactgagagtgttagacaaatca
-ctgaggcagaaaattaaccaaaaaatcctggacttcaactcaacgtttgaccaactagac
-ctaacagacacctacaaaatattccacccaacaacaacagaatataacttccttcttctc
-tttggcacgtggaacatattccaagattgaccacatgctcagtcataaagcaagtctcaa
-taaatttaaaaaagtcatgctgagcccattctcaggccacagtttaataaaaatagaaat
-gaatatcaagaagatctcttaaaattacacaaatacatagaaatgctcctgatacctggg
-taaacatcaaattacagcagaaaattaaaaaattatctgaattttttattaaaataggga
-cacaatttaccgaaatatctgtgatacagccaaagcagtgttaagggaaatttatagtgc
-taaacgtcatcatcaagaagttagaaagatctcagattaaccatcaaagtttgcacctag
-aactagaaagaaaagaacaaaccaaccccaaagctagcagaagaaaaaaaaattactaaa
-attagaaaagaactgaaaaaaattgagatgcaaaattccatagaaaggaccaataaagcc
-aaaaggtggttttttgaaagaataaaaaaggttgatagactgctagctacataaccatga
-agaaaaaagaagaccaaaataaatacaataaaaaatgaagaagatgacattacaatgaat
-cccacagaaatacaaaagatactcagagatcattttgaacaactctatgcacacaaattg
-gaaaatctagaggaaatggataaattcctggaaatataaaacctcccaatattaaagcca
-aaggaacatgaaaacctgaacaatcaataaacaagttcctaaactgaatcaataataaaa
-acctaccagcccaaaaaaaccctggaagagatggattcacagcctaattctaccagacat
-aaaaagaactggtatcaattctactgaaactattccaaaaaaatctaggaggagaggctc
-ttccctaactcagtctatgaagccagcatcagccagataccaaaatctgtcagagacaca
-aataaagaaaacctcagaccaatatccctgattaacatagatgcaaaaattttcaacaaa
-atactaggaaaccaatcccagcaacagatcaaaaaattaatacatcagaatcaagtaggc
-tttattcctgggatgcaaggctggctcaatatatgcaaatcaataaatgtgattcaccac
-ataatcagaattaaaagcaaaaaaatatgatcatctcaatagatgcagaaaaggatttga
-aaacaatccaacgcaccttaatgataaaaacccacaacagactaggcactgaaggaacat
-accgtaaaataatgagccatctatgacaaacccatagccacgatcattctgaactggtaa
-aagccggaaccattccctttcagaactgcaacaagacaaggatgcccactctcaccatgc
-ctattcaacatagtactggaagtgctactagagcaatcaggcaagaaaaagaaataaaag
-gcatccaaataggaaaagaagaagtcaaactatccctcattgctgatgatatgattctac
-acctggaaaaccccaaatactctggcaagaggcttataatactgatgaacaacttctgta
-aagtctcaggatacaatatcaatgtcaatgtacatttctatacacaataaccttcaacct
-gagagtccaatcaagaacacaatcccatttataatagccataaaaaatgaaaatccctag
-gaatacagctaaccaaggaagtgaaaggtctccacaaggagaactacaaaatacttctgc
-aagaaatcagagatgacacaaataaatataaacaattccatactcatatatcaaaaagat
-caatgtcatttaaatggctatacattccaaagcaatctacagattcaatgctatttctat
-caaactacaaaaactgcttttcacagaattataaaaaaactattctacaattcatatgga
-atccaaaaagtacccaaatcaccaaagcaatcctaagcaaaaggaacaaagccagaggca
-tcacattatctgacttcaaactatattataaacccacagtaaccaaaacagctgatactg
-gtacaaaaataaacatatcactaatggaacagaatagacaacccagaaatgaagccacac
-acctacagacatctgatctttgataaagacaacaaaaataagcacagggaaaagaccccc
-tattcaataaacggtgcttgggtagctggctaaccatatgcagaagaatgaaagtggacc
-cctgcccttcaccatatataaaaattaactccacaaggattaaatatttaaatgtaagat
-cttaaactataagaatcctggaagaaaacctggaaatacccttctcaacatccacgttgg
-taaagaattcttggctaagtctccaaaagcaattgcaacaaaaacaaaaattggcaagtg
-ggacctaattaaactaaagagcttctacacagcaaaagaaactctcaacagagtaaacag
-acaacctacagaatgggagaaaatattcgcaaactatacatccaataaaggtctaatatc
-cagaatctataaggaaattaattcaataagcaaaaaaaaatcccattaaaaatgggcaaa
-agttataaacagacacttctcaaaagacatacaagtggccaaaaaacatgaagaattctc
-atcatcactaatcatcaaagaaaggcaaatcaaagcaattagataccatctcataccagt
-cagaatggccattattcaaaagtcaaataatagcagaagctagtgaagctgtagagaaaa
-ggaaacacatacactcttggtgggaacaaaaactagttctgccagtttggaaagcagttt
-ggagatttcttaaggaacttaaaaatagagctaccatttgacccagaaatctcattagtg
-ggtatctatgcaaaagaaaacaaatcattctaccaaaaagacacatgcagccctatgttc
-atcgcagcactattcccaatagtaaagacatgaaatcaacctatgtgctcatcaatcatc
-aatggtggattggataaagacaatgtgttacatattcaacatgaaatactatgcatccat
-aaaaaagaatgaaatcatgttttctgcagcaacatggatgcagctggagaccataattct
-aagcaaattaatgcaggaacagaaaaccaaatactgtatgttctcacttataagtaggag
-caaaacattgtgtagtcatcaacataaagaaggaaacaatagacaatgtggattactaga
-gggaggagggaggaaggggggcatgggctgataaactaactattgggtactatgctcact
-acccaagtgaaaggaaacataacccaaacgacagcatcacacaatatacccatgtaacaa
-acctgtacttgtatcccatgtatctaaaataaaagttgaagttataaagaaaaataagtg
-ttagagtttatttcttggctcacaattctactccattgttatatatgtttaGCTGTACTG
-Aggggtctccaagatcaccctcaagtttgatgactcactagaaaaactcaccagacctat
-aaaaacgattatactcatggttacagcttaatacagttaggagatacagattaaagtcag
-caaaggtaaaaggtgcacagagtgatgcctaggaaaaaacaggtatgagctttcagttgt
-actcttcctccagaatcacacgaatagaactcaattcttccaaccataaggtatgacaat
-aagtgcaaaatggtgccagccattttcagtgggagtcaatcacataagcatgaagcatcc
-ccaagactgaatttagctactcaatcttcagcccctaaccttaggagtcaagctaatacc
-gcttggcctgaagccccagtcatagaaaaaaatatatgatttattcaccataaatcacat
-tgttagcataaactatttggcatgggccaagtctcaggtatacaaagacactttatcagg
-caggataattaaagggctcagagattatctgccaggacctttgaaatatgcagggttagg
-acaaccccaaatcttctgagttaaccctttattacacaGTCCACCCCATACCCCTTAGCC
-TAGGCTGTCTTTCAGCAAAACAATTCTATATTTCTGAGCATCTACATTTAGTATAGCATT
-TATATAACAGATCTAGAAATAGTATCAGTATGAAGAAAGATCTCTAGTTATAGTAGATAA
-AATATAGCAGTGGAAGGCCCAGCATACCATGGTTGTGCTATGCTCAAAAACATTTGGAGG
-AGCTAGTGTGGGGTAGGGATAAAGATTTTAAAAACAACTAATCTATCTCATAAAGCCATT
-ACATACATTTTCATATTTTTGTACTGATTTGTTACTTGTTTCTCCCCTTGATCTACCACT
-TTAATCTTACAGCTGCAGAATTATTTAGCCTAGAAATTAGTTTATGGTTAACTAAATCCA
-ATTCTTCCTTAGGCTAGTCATTTTCCATTGGTAATACATCCTGAGGAGGCTTAACTCAAT
-CTCTCAATACATTTGATCATCAGTATCAGTACCATCCTATGACTTATTTAATAAGGTGGC
-TGAATCTTACCAACAATAATAGTGTCACACTGTATAGCAATATAGTCATGGAACAATTTA
-GTTTCATTCATAGAACAAATTAGTAAGGCTTACGTAAGTTTTGCTATGCCTTCCCAACAG
-AAACAGTCCTTGCTTATATACAAGATATACTTATGGACAAGCATTGTTATAATTGTTAGA
-ATGATTTGATTATTTCTGGCTTCCATGTCAACGGAGGACAAAGACAGCCACCCCGTTTTA
-GTTTTCAAGCTTGGACAGAGACTGGTTTCCATTGTGTGATTTTCTACAGCAGGACCTCCC
-CACCCTCCTATGGGAGGTCACAGGTGATATTCAGATAGCTTCAGTCCCTACTAACTGTAC
-TGCAGAATATGTCTTATTCTGAAGCTCTAATGGGGCAAGAATAATTTGTAGTGCATCAAT
-GCACATTTACAAATGCCCTGAGAGGTCTTTCATAAGTTTGAAGGCCCATGAGATTCCCAT
-AAGTGTGTCCCTTTTTCCTCAGCAACTAGGATGTAGTGCTATTTCCCCATGGTTACTTTG
-ACCTTCATCTGTAATTAAAACAGTCAAAAGGCACTGTTGGGTCAGGGTACAAGCCCTTTC
-CCAACGTTGGATCTTAGCATTATCTAGCATTATTTTTGAGTCTACTTGTTTCATTTTAAT
-AAAGCCTCATCACTTTCTCAGGATGACCCTCATCTTTTGCCTTCCTCCTAGAAAAGAATT
-CTCTCCAATCTGCTCATTTTAGTTCAGTAATATTTCCTCTAGACTTCACTAAAAGGGAAT
-TCAGCTTGTCCCATGATGCCTGAACTGACACCTAATGCCCCTAAAAAGTCTGTTTTATGC
-ACAAATGTAGTTTAATTCACCATGCATGTTGTTGGCATTGTATACTTATGGCCCAAGTGC
-AGTTAGCATATGTGGTTTTTACCCCAAAATGCGGGTTCTTCATATATAGATTAGATGAAT
-TGTAGTCAAACTAGATCTAATTTAGTTTTTAGTATGTTTTAATGCCTTTCATAATCTTTT
-TTGTCTCAGGGTGGGGCCATTACCCCAGGGGAATTCAAGTCACCGTGTAATGGCTACTGC
-TTTAATCCCATCATGTATTAATTGCCATTCTCTCttttttcaactttcattttagattca
-ggggatacatgtgcaagtttgttacctgggtatattgcatgatgctgaggtttgggatat
-gaatgattttgtcacacaggtctgagcatagtacccagtagttagtttatcaaaccttgt
-ccaccgcctacccagtagtacccagtgtctattgttttcatctttatgtccatcagtact
-caatgttcagcctccacttacaacatatggtgtttggttttctgttcctgtgttaattca
-cttagtattacaacatccagctgcatccatgttgctgcaaagagcataatttcattcttt
-attatggctgcatagtatttgatggtgtatatataacacattgtctttatccaatccacc
-atagatgggcatgtaggttgatttcatgtctttgctattgtgaatagtgctgtgatgagc
-tataactgcatctgtcattttggtggaatgatttgttttcttttgcatagatacccagta
-atgagattgctgggttgaatggtagctctatcattaagttccttaagaaatctccaaact
-gctttcaaactggctgaactaatttacattcccaccaagagtgtaaaaatgttcagtttt
-ctctgcaacctcaccaacatctgtttatttgtttttcatgtttgagtaatagtcattctg
-actgttgtgaaatggtatccagtcatggttttgatttgcattgctctgatgattagtgat
-gatgagcatttttttcatatgtttgttgagcacttatatgtcttcctttgagaagtgtct
-gtttgtgtcctttgcccattttttccatgagtttttttttcttattgaattgtttaattg
-ccttatagattctggatattagatctttgttggatgcatagtctgtaaatattttcttcc
-attctataggttatctgtttactctgttgagagttttgtggtgcagaagtttaattaagt
-cccactttccaatttttggtttttgtttttttcaattgcttttgagaacttagtcataaa
-ttattttccaaggtgatgttgagaatggtgttttctaggttttcttctaggattcttttt
-tctttcttttttttttttttttttttttttgagatggagtctcactctgttgcccaggct
-ggagtgcagtggcgtgatcttagatcactgcaacctccacctcctgggttcaagctgttc
-tcctgcctcaacctcctgagtagctgggattactggtgcatgccaccacacctggctaat
-ttttgtatttttactggagaccagatttcaccatgttggtcaggctggtctcaaactcct
-gacctcatgatccgcccacctcagcctcccaaagtgctgggattacaggtgtgagccgct
-gcgcccagctcttctaggattcttaaagttttggatcttacatttaaatctctaatcgaa
-cttgagtcaatttttatacatggtgaagggcaggggtccatttcattcttctgcatatgg
-ctagccagctatccaagcaccattactgaattattgaatagaattattgaatagggagtc
-ctttctccatgataatttttgttgtctttgttgaagatcaaatggctgcaggtttgtggc
-tttatttccaggttctccattctgttccattggtttatgagtctgtttttgtaccagtat
-catgctgttttggttactgttggcttatagtttgaagttaggtcatgtgatgcctccagc
-tttgttccttttgcttaagtttgctttgactattggggctcttttttggtttcatatgaa
-ttgtagaatagattttctaattctgtgaaaaatgataatggcagtttgatagaaatagtg
-ttgaatctatagactgcattgggcagtttggccatttaaatgatattgattcttccaatc
-catgagcatgggatattttttcatttgcttatattatttattatttcttttagcagtgtt
-ttgtagttctcccggtagaaatctttcacctccttggctaaatatttgcaatgtatttta
-tttttcatgtggctgtcatgaatgggattgtgttttgagactttgctgaagttgtttatt
-aaatctggaagtcttttggtggaatcattagggttttctaggcgcatagaatcacattgt
-cagcttagagagctaatttgactttctcttttcctatttagacaccttttatttccttgt
-cttgcctgattgtttgggctaggatctccaattctaacagctttcagtggagtctaggtt
-tttctaaatataagattatgctgtctgtaaacagggataatttttttcttttactgttaa
-ttttcagagttttatattttatttattatgtgtagtctgcaaatacattctgtaaggtta
-ttgcttgtctttttattttcttaacagggtcttttgcagagcaaattttaagactttgat
-gaagttaaatttgtcaattactttttatggattgggctttttgtgtcatgtctaaaacct
-cataaccaagcattaagctccatagattttctcctatgttttcttttaaaagctttatgg
-ttttacatcttacatgtgattctatgaccaattttgagggcttttttttcatgtatgtgg
-ggtgtttaggtaagttaattttttttaacctgtggatatgcaactgttccatcacctata
-tttaaaaagattattcttccttcatttaattggttttatatctttgtaaaaaaaatcaat
-tggctatactagtatggttctacttccggattctgtattcttttccattcatgtatgtgt
-ccattcctctgctaatacaaatcttggttactgaagctatacaacaactttcataattgg
-gtagaattaatttctccgactttattctattttttcaagattgactaatccattctagct
-attttgcctttccatataaattacagaataatctgtgtatatttagaaatatcttgatgg
-cagtttcaagatggctgactagaagcagctagcgtgtgctactctcacggagaggaaaca
-aagtagcgagtaaatagtggcttttcaagtggatcgtctgggagaccacatcaggattca
-ccaaggaagtgagggaatcctcagagagcagagagtgaagcctggcagcagccgctcacc
-cgggaccagtgtggagcaagagaaattccctaacatggggaaagggtgagtaagtgagag
-tcctcaggggatccacatggatctttgcaatcctgtgcacaggagaaccccttggcccct
-ataggcctctagatcgacacaacatcctggagtttgtgtagacgcactgctaagggccat
-gtggagccccacaggccctggatccctgatcaacctggtgccagctgccatagccctgat
-aggggctgcagtcatggtgctgaggagtggtcagactgccctgctcctcctcaccaggca
-aggctcggctttggcttccagtgcaacagtctgcctccacctgaactctgcatgtgggca
-cactctacactcccctgggaaccactcagatggcggattgtgtgactcccattcccctgc
-tgctccgagccaggcaaggctagctggtttgggcttcaacacagcacctctgcccctacc
-tgaacactgtagtgggttgcagctttccattcccctggggcaaaactcacagaggtaaca
-gatAATGCCTGGCACCTTTGTGTGTTGCTAATAGTGAAGTTCAACATTATTGGATAGGAG
-GGAGGTGCAAGCATGCCAGGCATTCCACAGCTTCCAGTCTCCATTGCCCCAGCTAAGGGA
-TGGCATGCTCTCCAGTTAAAGGCCCACAGCACAACTGTCCTGCCCCTGCCTGAACATTTC
-ACCTGCGACCCAGAGCCTTTCCGAAAACCCACCCACCACAGGCCTGTGATATTCTTCTGG
-GTTCCCACCACCCAAGAATCCCACcttcccctgcctgagagtttggctggtgacccaggg
-accagcctgaaccccacccccaccccattacagtcagcacctgaaatctgggatagataa
-ccccagtccagccccttcagggccatgcacactgtccagcaggccttctggaggcctgtc
-agctgagaaactatcaatacccttccagtgctgttggcacctgaccaatttcctcagggc
-ctgaggttgggcctacccaaccagcaaacaccaccatgaccaacaccgacctgcacggac
-cCAAAGGTGGAGACCTTCCTTCTCAAAAAGCAGCAGTAATGCCCCATCATagaataagtg
-agccttaaagctatctgtatcaggttgagtgatgaggttataccctgaacaactctcatg
-gagaatcataaaacaagtgttccctgtggccctcaaccacattgcagtccagagatagac
-tatagtgtgcatctgaactaggagtcatgagccctgaaacagggtgtgataaggaaacag
-atcacatttctacctacctaggatggggagctggtgcagtcttctcgcccacaagcccct
-acagagacctcagtgcaggagttgctcccagccacgctcatcagagctggtgcctgtgct
-tgccattggtatactaatgggcaagccaggggcaccagctcttctcagctctgtcccacc
-atccccacagaacaagaagctcagtacatcaggcacccccactgtccagcccttcacctg
-aaacaactgagagcccctaatagtaaaaaaagatcagatctatacccatctgtttatggg
-acagctggctgttacttgcaaatgtcatctaccagtctataggtcaaactggacagccca
-tcaaaaaacctgctggtagaagtgtgtaggactatagaaacaaagccaaaagccctaccc
-aacacaatcccctccagataagaaggaactagtataagaattctgctgtcatgaaaaatc
-tgaatgtgtgacaccaacaaggttcactctagctctccaggagtggtcctagccaaaata
-gaagctgagagatgacagatggagaattcaaagcatagattgcaggaaaattctttgaga
-ttcaagataaggttgaaaatcaacacaaagaaacctgtaaagcaatccagagaataaagg
-aagaggtaaactcttaaaaataaatctatcagagctactgaaagtgaaaaactcacttaa
-gacattccgaaattcaatgaaaagttttatcaatagactagatgtagcagaagaaagaat
-ttcagagcttgaagatcagtctttcaaactaacccagtcagacaaaataaagaaaaagtt
-attttgaaaaatgaaccaaatcttcaagaaatatgggattatgtaaagtgaccaaaccta
-tgaattactggcattctcaagagagaaagaggaaaaagtaaacaacctagaaagcatatt
-tgagggaataattcaagaaaatttcctttatcttgctagagaggtagacatccagataca
-ataaattcacagaacacctgcaagatgctatacaaagtgaacatcatcaagacatagggt
-catcagacagtctaaggtcaattctaaagaaaaaatcttgaaggcagcctagagaaaagt
-gtcagatgagttacaaaggtgagcccatctggctaacagcagacttatcagcagaaaccc
-tacaatcccaaagagactgggggcctatttaaagaattctcaaagaaaagaaactccaag
-caagaatttcataccctgccaaactaagctttataagtgaaggagaaataagatcttttt
-cagacaagcaatcactaaggcaatttattgccactagaccagccttacaagagatcctta
-agggagttggagttctaaacataaagatggaagaacaatatctgccaccacaaaaccaca
-cctaagtacatagcacatagaccctttaaagctattacacaataggaactataaagcaac
-cagcttacaatttcatgacaggatcaaaatctcacatatcaatattaaccttgaatgtaa
-atggtcttaacaccccacttaaaggcacagagtggcaagttggatcataaaataagaccc
-atccatctgttgtgttcaagagacccatctcacatgtaatgacTACTACACTAATTTTAT
-CGGGTTTTTTTCCCCATTGCTTATAAGTTTCATTTTATGGTATGTTATTTTGATTGTATG
-CCAAACATTGGGTAAATGGGTTTTGGAGACTCCAAGTGATGTTATCTTCAAACATAAAAG
-GTCCTCCCTTTCTCCAGATAGCAAAGAGATAAGGACATGACTAATTCAATATAACAAGGC
-ATTAAGCTGGTTCAGGGCTGGGTTTCAGTATTAGTAATGATTCCAACCACATCTAGTTTG
-GTCCTGTTTCTCAGGAATAGCCCTCCAGGCTTTTTCTTCAGGGTCTGTTTGGTCTCAGTA
-TCTTCAGCCCAAAAAAACAATGAGGGAATTCTAGCTCTGTTCTTTATGGTTTTCAAACAT
-TGCTCTTCAGCCTCCTGATTCAGGCACTTCTGTAATGTCTCAAGGGGGAGACTATCTGTG
-TGCTTGAGGTAGGCTCCATATCACTATCATATCTGTTTCCTAAGCACTACAAGAGTACAA
-GAAATCTCTTACTGCCTTTCGGAAGTTTCAGCTGAGCTTTCCAACCTCTCACAAAGCTCT
-ACTTTTCCAATGCTCCATTGGGGGGACTAAAATTTGGGGCACCTGAAATTCCAATTTGTA
-ATTCCTAGAATCTCTGCTACTTCTGCTGATTCAATTACCTCCCAGAAAGCCTTTCTTTCT
-GGGCCAAGCCTGATTTCCCGTCTGTCCCAAACTGACAAAGGCACCCATGGGGGAAATGGC
-TGGCAATTATTGACCTACTCCAGAAACAGAAAGCCTGTTCTGTTCTCTCTTTAGAATATC
-AACTCTTCTAGTACCAGTAATTTCTCTGGTTCTCTAATGCCTTGGaaatattattttaat
-aaaaatCAAGCTTTTCTAGGTTTTGTATCAAAGGCATTGCTTTTCTGTGATTTACTGATT
-TCTCCCCAAGAACAGAACTTCTCAGgcccatttaatcttaacttaattgctgttatgttt
-ggctttaaattggccattgtttaacgtgatttacattttcctgagttttctatatttctc
-ttttttctcctttcttttaatctttctgtataaaccagatgttctttaattccattttcc
-tccccactagtttttaatgtattctccttttctattcatcatcactctagaaatgaagac
-atacattcttaacctatcaatatctaatattaaccaaaaatgtgtatttctcctcagaca
-atgcatggaatacaactccatttcacctgcctccagtttatattctattgctttatttta
-ctttcatataatactaagacaatattattgcatgcgtgacaattataggtagttctattt
-tctgggtgactccaacaagttatcattataaagtaacccattttcctctaagataatttt
-tgccttaaatactattttgttcaatactaagaagtaagataacttccttttgttggtatt
-tgcatgttaagtttttttcccatatttccactttcaatcttctccgtatcttgtttttac
-atttatctgttgtaaatagcatctaatttttcatccagtctagcaactagagttaatcca
-taaatttaccaatctctgaataatatatggaacatagaccactttaattctatttaacgc
-tcccaattgattctattttcagaattttgatatttaattatgtttttaatcttataaaac
-atctttatttaattctGCCAGTTTAATCCACTtttatccctttttttgttgcttcttcat
-cacatactttccatgtgtggtcatttttttaaactaaagaacatcctttagaatttcctt
-tcatgagatctgctatctctatctgaaaaggttgtatttatattttcttcttaaaatatt
-tttgtggatatggatttctaggatgacatttactttgaaaaatacgttgaagagctcagt
-ccattggattatggcttctattgtttgtggtgaaaaatcacctgtcagtgtaacaattac
-tctatcaaaagtatggtttctgtttttccctctgactgtttcccacttttctctttgtcA
-TTTTATCTAGATGACAATTCTTATTTATTTTCTAGAATAGTATTTCTTAGATTATTTCTG
-AAAAAAAAGAAGATTTATTATCTTTTCAAATTTATGTAGCtttttgtaattctttttctt
-taattttctttctccttctctttgaaaatcttattaatcagatattggctctcctggatt
-gacactctgtgtcttatatattttgctcatactttccacttgtttttagacttcaaagat
-tttctcactttatcttcaaatgtgcctgctaaacaatcatttttctaatttccaaaagtt
-tactacttctccttacatagcatgatattattgctttatggatggaataCACTCTTGAAA
-CTCCAGCCCCTAAATAATAGTTATTCTAATGTGCCTTTCTTCATTTATTTTCAGTCATGT
-TAAAGATTTTCTCAAATAGATAGCCAGCCTAGATTGTTTATTCATATTTTACATATATAC
-TGAGCCATTTTATGTGTGCAAACTTGTCCACAGCTTTTGTTTTAAAATGCTTGaactgtg
-aagatagaaaagacatgtttgctggaatgcataatactgaagtttacttctcatagtctt
-tctttagaagttatcgcctaggcagaaaaagaaagtaactaaaaaaaaagaaaacacaat
-ttccaggtatatctgtgccaactcaggtgactagtaaaacaaaattctaagatgacatct
-gtatagcctacataggaagcaaccagttcacattatagaaggaagaatgaatgttccagA
-GACAAAATATAGTTACAATACACCCTCATCTATTGTAGTAAAAAAAAAAAAAAGCTGAAG
-TCTAAATTACACAAATGTAGCAGCATAATACTATTAAATAATAAGTAATTTAATATTCTA
-TTTCATGGCATTATTTTACAGGAGCACTATTTGATCATCTTCTCTTTATCACACATACTT
-CTTCCATTTATCTTACAGTATCTTTACATAAACACTAAAATAGTTATACTCAGATTGTAC
-ACTTTTGAAGGGAGTTAGCCTATTTGTGTCAATTATTTACTAAAACAAAGCTAAATAACA
-GCAACAAAAAAGCCTTGTTGGAACAGGGACCAGGGGAATGATCAGAGCAATAAGTAGCTT
-GCATGAAAATATTATTAACTCTGAATACTTTCTCATTAACATTAACAGTGTGTCCTGCCT
-GTATATTTAATCCATTTAGAATTAAACTATTAATATATTGTGTCCTAGGATGGCAGAGTT
-ATTAAGCAGCCCCTGTATGCTCCAGGGGATATAGGTTGATATTCTTCAGCTGTCAAAATT
-CTTCAGCTGTCAAAATTCTTCAGCTGACTTAAATCAGCAGTAGTGGCGTTTATCACCAGT
-CAACAAAGTTCTTCTATCCTTCACTTCTTTAGCCTACTCATCTAATGGATGTTGGCACGA
-ACATGAAGTTTCTCTCCTAAATATCTATGATGTTCCACAAATCATGGGATATGCCTGCAG
-GCTGCCAGCACAATCAGATCTTCATGTTCCAAGAAAGGGATCATTAGTTTGGCCCTGCAA
-GATGTGCCACCTTTCTTGGAGAACTGAGTGTGCCACATGCAATCTGCTGAGGCATGAACG
-TGCTCTTGGCATTTCTGTTTATTTGCTCCTTATTACACTATATTGTGTCAGAATGATGGT
-TTGGGTTCAACAGTATGCTCACGTAAGCCACTATTCCAAACTTCCTAAACGCACAGTTGT
-GGAATGTGACACAATTGTTGGCAATGATATTTAAACAGGATATGTGTTTTTGGTGGGGTC
-TCTGGGAAAAATTACTAAAGGGAGGGGTGGAGTGATCCAAATATTCAAGTGGTAGACACC
-CACTTGACTTTGGccttccacttcctcctgtttggaatatggtcataatgctggaggtaa
-tgctgccatctataacaatgaagcaaaaacactggataacagtatgtgaacagaagagta
-gagggtgactagcatggtgaagctgttatataatttctggactTTATGTTATGTAAGAAA
-AATAAAACCTGAATTTGTAATAAATGAACAAAATGCCTTTTTCATGTTTTTCTGTTTCAT
-ATTACAGCCTATTATACTTTCTAACTGGCACATCATGGATTATAGATAGAATGTGATTTA
-GGATTAAACTCTCTTAAGTTTAAAATGTGTAGTTTTCTTCTCTCTTGTTCATTCTCTTAC
-TGCCTCCAGTTCATTTCAGAGCATATGAAAAGAGACAATAAGGGACTTTTAGCTGGAAGT
-TTACACTACATTACTGAGTAGGAGGAAAGTAGCTTAATAGTTCTATAAAGAGTATCATTA
-CAATTTTAAAAATAAACAAAAACATAAATTATATACCTGTAGTCTATCCTGAAAATATTT
-CCTGAAGTCACAGATTTGGAGTATTGTCAACTTGTGCAtaaacttcatgagaccatggac
-tattgtttttctcactgctttattcctagctccttgatcagaacaggcagagagaagatg
-cacaataaatgaataaatataataaatgaatGTATCCTTTATTACCTACGCAAACACATG
-CACACAAACACATCTATGAAGTTTTACATGATAGTATAAACACTGCTTTGGTGGAGGAAG
-TTACTGATTTTCTTTTAGCTTGTTTTCCACTTTATTTTTCTTTACCAAATAAGTTTCACT
-TTTGCTATTAGAATATAATAAATAACAGAAACCACAAGAACAAAGTAGCAGCTGAAAAAA
-AGAAATGGAAAATTCTTAATTCATATATGATTGCCTCTGTGAAACAAtgaaaagtggtca
-tccaatttcagtttgaacacttTTTTCCTCATAAAGTCATCCTATACCTTTACTCAAATT
-TAGTTTTAGGTGCATTAGGAGTTAAAAATAAAACATAAACCCATTTAAGAACCAAGAGAA
-TTAGTAAGGTAAATTACTTTGGTAAAATGCCCAAGTTCCAGGCTCTGCTGAAGAGAAATT
-ATTGATTCAACCTTAAAATatttgaagtctctggtaaggtgactttagctaaagctgcaa
-ccagctcaactacaaatcagactgactcactactctagcaacttgacagaagaacaatac
-tagacagaatattaattaccttttggaggtaattatttattgaaaactctactgaacttc
-tatatgtctggcataaaataaaggttatgacatatttttaaaaagaaagaagacataact
-cattgtccagagaggaaatgatcaacacccagccaatggaattatcaaccagaaactcaa
-agtaactctgatagaaatatgctagagaatatagtgggaaaataaacagtactggtgttt
-actgataaaatagagaattttatctatgagccaaaacaaagtaatacaaattaaaaattc
-aatatcagaaatggataattcattcaatgggctgaacagcagactgggagaagcaaagaa
-aacaatcacttcacttgaaactcaaatgaacatttgaatagaaatttcccaaatgaacac
-aaacacaaaaaagtaaagaaaaattgaatacaacatcagagagatgtgagatattatcaa
-ataattcaacatggatttaattggctcccaagaagaagggaaggagagaatgaagcagaa
-gaaataagagctaatagcctcctacatagcaaaattgatccaagaacttcagcaaggtct
-aattaggacaaattcaaagaaaatttctagacatagtggatttcaaactgctgaaaatca
-aagacagagaacaaatcttaaaagtagccagagaaaaaggacatgttatctaggaaggaa
-caatgacacaaatGATGCTGAGCTATTTCCAGAAAAATAAAAACAGCgggtgacatcagc
-aagatggcagaataggaagtcccagatctcatttccacatggaaacaccagtttaacaat
-agatgaacaaaaatatctttattagaattccagaaGAGAAggaaagaaattcaaagattt
-ctcataagaaacttcgaagggcaggaggaagtggcacaatatttttaaagtgcttcaata
-gtaagtctcaatccagatatctatgtccaagaaaatatccttcaagaataaggaccaaat
-aaacacattctcaaatgaaggaaaactgaaaaaaaaagggggggtcactagtaggtatac
-ctaaaagaacagctaaaggaagtcctccacagtgaaagaaattatttttttttttttttg
-agaaaggagtcttggaacataaggaaaaaagaagagagaaaacaaaaacatcagaaatgc
-aataaactttttacctactttttagttttctaaattatttttgacagtaacagcaaaaat
-tatccctctatagtgattctcagcataggtagaaaaaatatttaagtcaatgatattaga
-aatggggggttatcatagagatataaagggagataaaatctttatctgatgtggttaaat
-gatgtaccagtagactgtaataagttatggatatataatgtagcacagacaacaatcact
-acaaaagctatacaaagagatacacttgaaaacactatagatgaatgaaaatggaattct
-aaattatggaaaaatatctcacaaaatggcaggaaaaataagacaaagaagcaaaaagga
-aacaaaaacaaaatgaaagatttaagcattaatatatcaataatttaattaaatttaaat
-gatctaaacacacaaatttaaagatgaatattggcaaagtatgtttttagatgacccagt
-aatatgctatatacaagaaactcacatcaaatataatgatataaataggttataagtaaa
-agaatggaaaaagatataccatacaaatattaataaaaagtttgcaggagtgactatatt
-aatgtcagataaagtagacttcagaacatcaaaaaaattaggatgattttttgtcacctt
-tacatagtgacaaaaggtccaatacaccaaaaagatgtggcaaacttaaatttgtgtgct
-ccaaaacacaaagctgcaaaatatgtgaagcaataacagagagttaaaagagagaaataa
-gcaaaaacacagtcgggatatcaccacccacttctttccagaattgatagaacaacaaga
-aagaaaatcagcaacagcaatagaagagctcaacaacattaactacaggatccacgtggc
-atttaaggagcatttccactcaactagagcagagtaaatattcctttcgagctcagagag
-tgtatactaagatagactatatcctaggcaaaaaaaaaaagaagaagaagaaaaaaggat
-attcaactaattaaaaagaatttaaactgcacaaagtttattctctatatgattgacaca
-gtgaaatcaaactaggaatcaataccagaaataaaacacaaaaatctccaaacacctgga
-aattacacaacatgcttccaagtcaaagagaagtctcaataagaataaaatatacataga
-attaaataaaaatgaacatataacatattcataatttgtgctaaagcagtgccaagagag
-aaatttagaacaacaaatgcttatattacaaaagaagaaaaatgtcaaatcaataatctt
-agctctcacctgaattagaaaaataagagcaaattaaatgcaaagtaagcagaagaaaga
-acataataaagataacagcacaaatcaatgaaattggaaacagaaaaacaatagagaaaa
-tcagtgaaatgaaaagctgcttctttgaaaagatcaataacattgacacacttttagcaa
-gactgacaaagaaagacacaaatttccagcatgcggaataaaacaaagaatatcactaaa
-gaccctatggaaataaaaatgataataagggaatacgataacctttttttttttttttga
-gacagagtcttcctctattgcccaggctggagtgcagtggcacaatctcagctcactgca
-acctctgcctcctgggttcaagagattctcctgcctcggcctcccaagtagctgggacta
-caggcatgggccaccatgcccagccagtttttgtatttttagtagagatggggtttcacc
-acactggccaggctggtctcgaactcctgacctcatgatctgctcgcctgggcctcccaa
-agtgctgggattacaggcatgagccaccgcgcccagccaactaactctctatacattgat
-ttacttttttattttaaaatatccttgcattcccagtagaaaccctagttggtAAAAAAa
-aattattgtttgtaaacccttcttctttgatgttacgcatctacagctaaagatttcccc
-ttaagcaaggcaggagctgcatttcacactttataaaatgttgtattttactatcttgcc
-gttcaaaatacatattaattattcctataattttatctttaacacatggcttttacataa
-ttttaaatagtactttttaaattttaaattaaattttaaatacttttaaataataaaagt
-atgctagttaatttcaaaatattatgtttcttaacatcttatttttattggtttccaact
-taatactgatgtttttctagatatcacatttttaattgattgctattttgcaattatttc
-tgcaatattttagtgttttgacatttatagggacttctttaaagaatcaacactgtccat
-ctcagtgagcattccatgtgcatgtgaaaaaaaaacgggtattctgtaattattggaggt
-agtgttctatacatgttaattggattgaggtggttattcagatttgctacattctttttt
-ttttttttcgagacagagtcttgctctgtcaccaaccaggctggagtgcagtggcacgat
-cttgggtcactgcaacctccacctcccgggttcaagtgattcccttgcattagcctcccg
-agtagctgggactacaggtgcgcgccaccatgcccggctaattttttgtattttagtaga
-gacgggatttcaccatgttggccaggctggtcttgaactcctgacctcgtgatctgcctg
-cctcggcctcccaaagtgctgggattacaggcatgagccaccacgcctggccatttgcta
-cattcttactaaatgtttggtctagttatgctatcaataaccaacagtgaatgataaaat
-ttccaactgattgaagatttttctgttttcaagttacttttgtccatctttacttcatgt
-atttttaagttatattattagatacatcatgtctttctaatgaattgaccctttcatcat
-tatgaaatggccttcattatctctagtaaatactgcttgccttggagtcaaatacatcag
-atattaatataatcacTCCACAATTAACAAAGCCATCAAAAGTAGCTTGTATATCCAACT
-TATTCTCTGTATCGATTTCTTTCACTTTTGGCCTGAAAAATCTTTACTCactgaaaagca
-aagaatataaagaaaaaaaaaaggtaaagaatccaaggactgtgggaaaactgcaaaagg
-tgtaacctacatgtaatgggaataccagaaggagaagaaagagaaaggaacagaaaaaaa
-tatttaaaacaacaattgaaaatcttcagtgggagtataattagttcaaccattgtggaa
-gacagtgtggtgattcctcaaggatctagaaccagaaatacctttgacccagcaatctta
-ttactgggtatatacccaaagaattataaattgttctactataaagacacatgcacacat
-atgtttactgcagcactatttacaatagcaaagacttggaaccaacccaaatgcccacca
-atgatagattggataaagaaaatgtggcacatatacaccatggaatactatgcattcata
-aaaaagaatgagttcatgtcctttgcagagacatggatgaagctggaaaccatcattctc
-agcaaactaacacaggaacagaaaaccaaacaccgcatgttctcactcataagtgggagt
-tgaacaatgagaacacatggacacagggaagggaatgtaacacactggggcctgccaggg
-gtgggggggcaatgagaaagcattaggacaaataatgcacgtggggcttaaaacctagat
-ggcaggtttataggtgcagcaaaccaccatggcacatgcatacctatgtaacaaacctgc
-acgttctgcacatgtatcccagaacttaaagtaaaataaaaagaaagaaaaaaaaacttg
-agtaaaatgaaaaagaaaaagaaaattttccccaaattaatatcaaacatcaaaccacag
-atccaagaagctcagagaatactaagtaggataaatgcaaaaaaaaaaaaaaaaaaaacc
-taatcatgtcatattcaagctccatgaaacaaaatataaagaaagaatcctgaaagaaga
-caaaggaaaaaaTCTTATcataataatagtgctcatttctccaacaagacataacaatcc
-ttaatgtgtatgtgtctaaaaacagagtcaaaCAATgttttgatttgcatttccctgttg
-actagtgatactgagcatttttccatgtatatgttgaccatttgcatgtcttttgagaat
-gtctatttttgttctttgctcatttttcaaggatatcatttgtttttgtttctgtttttt
-ttgctttcagttgagtcccttgtttattctagtttgatacagtcccatttgtctgttctt
-ggttttgttgcctgtgcttttaaggtcttaaaatatttgcctagaccaaagtcctggagt
-gtttcccctatgtcttcttctagtagttttatggttttgggtcttaggtttaagtctcta
-atctattttgagttgacttttgtatatgatgatagataggggtctagtttcatttttctg
-catataaatatccagttcccagcaccatttattgaagagtgtgtcctttccccagtggat
-gttcttggtgcctttgttgaaaatcagttggctgtaaatatgtgaatttatttctggatt
-ctttattctgttccattgatctatatgttcatttttataccaacaccatattgttttgct
-ataagtactatagccttgtaatatattatgaaggcaggtagtgtgatgccacaaactttg
-ttcttttgtctcagaattgctttggctattttggctcttttttggtttcatacacatttt
-aggattgatttttctatttatgtggaaaatgtcattggtattttgataagaattgaattg
-aatctgtagattgttttaggaaatatggtcattttaacaaaattgattgttccttttcat
-gagcatgggaggcatttccatttgtttgtgtcgtcttccattcctttcatccgtgtcttg
-gggtattccttgttgacatctttctcctccttggttaaatttattcttaggtattttttg
-tagctattgtaaatggaattgccttcttgatttcttttttggctagttcattattggcat
-ataaaaatgctactgattttttagcattgattttgcattctgcaactttactgaatttgt
-ttatcaattctaagaggtttttggtggagtcgttaggtttctttaaataaaattatgtca
-tctgcaaagagggataagttagtttcctgtttcccatttagatactgtttatttcttttt
-ttgtctaattgctctatctagcacttccagtactatgttgaatgggaatgatgaaagtgg
-acatcttcttgtcttattccagttcttaaaggaaaggcGACTCTTgggggaggagccaag
-atggccgaataggaacagctccggtctacagctcccagcgtgagcagaagacggcgattt
-ctgcatttccatctgaggtaccgggttcatctcactagggagtgccagacagtgggcgca
-ggccagtgggtgcgcgcaccggcaccgtgcgcgagccgaagcagggcgaggcattgcctc
-acctgggaagcgcaaggggtcagggtgttccctttccgagtcaaagaaagaggtgacgga
-cacacctggaaaatcgggtcactcccacccgaatattgcgcttttcagaccggcttaaaa
-aacggcgcaccacgagactatatcccgcacctggctcggagggtcctacgcccacggaat
-ctcgctgattgctagcacagcagtctgagatcaaactgcaaggcggcagcgaggctgggg
-gaggggcgcccgccattgcccaggcttgcttaggtaaacaaagcagccgggaagctcgaa
-ctgggtggagcccaccacagctcaaggaggcctgcctgcctctgtaggctccacctctgg
-gggcagggcacagacaaacaaaaagacagcagtaacctctgcagacttaaatgtccctgt
-ctgacagctttgaagagagcagtggttctcccagcacgcagctggagatctgagaatggg
-cagactgcctcctcaggtgggtccctgacccctgacccccgagcagcctaactgggaggc
-accccccagcaggggcacactgacacctcacacggcagggtattccaacagacctgcagc
-tgagggtgctgtctgttagaaggaaaactaacaaacagaaaggacatccacaccgaaaac
-ccatctgtacatcaccatcatcaaagaccaaaagtagataaaaccacaaagatggggaaa
-aaacagaacagaaaaacgggaaactctaaaacgcagagcgcctctcctcctccaaaggaa
-cgcagttcctcaccagcaacggaacaaagctggatggagaatgactttgacgagctgaga
-gaagaaggcttcagatgatcaaattactctgagctatgggaggacattcaaaccaaaggc
-aaagaagttgaaaactttgaaaaaaatttagaagaatgtataactagaataaccaataca
-gagaagtgcttaaaggagctgatggagctgaaaaccaaggctcgagaactacgtgaagaa
-tgcagaagcctcaggagccaatgcgatcaactggaagaaagggtatcagcaatggaagat
-gaaatgaatgaaatgaagcgagaagggaagtttagagaaaaaagaataaaaagaaatgag
-caaagcctccaagaaatatgggactatgtgaaaagaccaaatctacgtctgattggtgta
-cctgaaagtgatgcggagaatggaaccaagttggaaaacactctacaggatattatccag
-gagaacttccccaatctagcaaggcaggccaacgttcagattcaggaaatacagagaacg
-ccacaaagatactcctcgagaagagcaactcaaagacacataattgtcagattcaccaaa
-gttgaaatgaaggaaaaaatgttaagggcagccagagagaaaggtcgggttaccctcaaa
-gggaagcccatcagactaacagcggatctctcggcagaaaccctacaaaccagaagagag
-tgggggccaatattcaacattcttaaagaaaagaattttcaacccagaatttcatatcca
-gccaaactaagcttcataagtgaaggagaaataaaatactttacagacaagcaaatgctg
-agagattttgtcaccaccaggcctgccctaaaagagctcctgaaggaagcgctaaacatg
-gaaaggaacaactggtaccagccgctgcaaaatcatgccaaaatgtaaagaccatcgaga
-ctaggaagaaactgcatcaactaacgagcaaaatcaccagctaacatcataatgacagga
-tcaaattcacacataacaatattaactttaaatgttaatggactaaattctccaattaaa
-agacacagactggcaagttggataaagagtcaagacccatcagtgtgctgtattcaggaa
-acccatgtcacgtgcagagacacacataggctcaaaataaaaggatggaggaagatctac
-caagcaaatggaaaacaaaaaaaggcaggggttgcaatcctagtctctgataaaacagac
-tttaaaccaacaaagatcaaaagagacaaaggcggccattacataatggtaaagggatca
-attcaacaagaggagctaactatcctaaatatatatgcacccaatacaggagcacccaga
-ttcataaagcaagtcctgagtgacctacaaagagacttagactcccacacattaataatg
-ggagactttaacaccccactgtcaacattagacagatcaacaagacagaaagtcaacaag
-gatacccaggaattgaactcagctctgcaccaagtggacctaatagacatctacagaact
-ctccaccccaaatcaacagaatatacatttttttcagcaccacacaacacctattccaaa
-attgaccacatagttggaagtaaagctctcctcagcaaatgtaaaagaacagaaattata
-acaaactatctctcagaccacagtgcaatcaaactagaactcagaattaagaatctcact
-caaagccactcaactacatggaaactgaacaacctgctcctgaatgactactgggtacat
-aaggaaatgaaggcagaaataaagatgttctttgaaaccaacaagaacaaagacacaaca
-taccagaatctctgggacgcattcaaagcagtgtgtagagggaaatttatagcactaaat
-gcccacaagacaaagcaggaaagatccaaaattgacaccctaacatcacaattaaaagaa
-ctagaaaagcaagagcaaacacattcaaaagctagcagaaggcaagaaataactaaaatc
-agagcagaactgaaggaactagagacacaaaaacccttcaaaaaatcaatgaatccagga
-gctggttttttgaaaggaccaacaaaattgatagaccgctagcaagactaataaagaaaa
-aaagagagaagaatcaaatagacacaataaaaaatgataaaggggatatcaccactgatc
-ccacagaaatacaaactaccatcagagaatactacaaacacctctacgcaaataaactag
-aaaatctagaagaaatggatacattcctcgacacatacactctgccaagactaaaccagg
-aagaagttgaatctctgaatagaccaataacaggagctgaaattgtggcaataatcaata
-gtttaccaaccaaaaagagtccaggaccagatggattcacagccgaattctaccagaggt
-acaaggaggaactggtaccattccttctgaaactattccaatcaatagaaaaagagggaa
-tcctccctaactcattttatgaggccagcatcattctgataccaaagccgggcagagaca
-caaccaaaaaagagaattttagaccaatatccttgatgaacattgatgcaaaaatcctca
-ataaaatactggcaaaccgaatccagcagcacatcaaaaagcttatccaccatgatcaag
-tgggcttcatccctgggatgcaaggctggttcaatatacacaaatcaataaatgtaatcc
-cgcatataaacagagccaaagacaaaaaccacatgattatctcaatagatgcagaaaaag
-cctttgacaaaattcaacaacccttcatgctaaaaactctcaataaattaggtattgatg
-ggacgtatttcaaaataataagagctatctatgacaaacccacagccaatatcatactga
-atgggcaaaaactggaagcattccctttgaaaactggcacaagacagggatgccctctct
-caccactcctattcaacatagtgttggaagttctggccagggcaatcaggcaggagaagg
-aaataaagggtattcaattaggaaaagaggaagtcaaattgtccctgtttgcagacgaca
-tgattgtttatctagaaaaccccatcgtctcagcccaaaatctccttaagctgataagca
-acttcagcaaagtctcaggatacaaaatcaatgtacaaaaatcacaagcattcttataca
-ccaacaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaa
-agagaataaaatacctaggaatccaacttacaagggatgtgaaggacctcttcaaggaga
-actacaaaccactgctcaaggaaataaaagaggatacaaacaaatggaagaacattccat
-gctcatgggtaggaagaatcaatatcgtgaaaatggccatactgcccaaggtaatttaca
-gattcaatgccatccccatcaagctaccaatgactttcttcacagaattggaaaaaacta
-ctttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaa
-agaacaaagctggaggcatcacactacctgacttcaaactatactacaaggctacagtaa
-ccaaaacagcatggtactggtaccaaaacagagatgtagatcaatggaacagaacagagc
-cctcagaaataacgcccatacctacaactatctgatctttgacaaacctgagaaaaacaa
-gcaatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgt
-agaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatt
-aaagatttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacc
-attcaggacataggcgtgggcaaggacttcatgtccaaaacaccaaaagcaatggcaaca
-aaagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaa
-actaccatcagagtgaacaggcaacctacaacatgggagaaaattttcgcaacctactca
-tctgacaaagggctaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaa
-acaaacaaccccatcaaaaagtgggcgaaggacatgaacagacacttctcaaaagaagac
-atttatgcagccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatg
-caaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaag
-tcaggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttgg
-tgggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatcta
-gaactagaaataccatttgacccagccatcctattactgggtatatacccaaatgactat
-aaatcatgctgctataaagacacatgcacatgtatgtttattgcggcattattcacaata
-gcaaagacttggaaccaacccaaatgtccaacaataatagactggattaagaaaatgtgg
-cacatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgta
-gggacatggatgaaactggaaatcatcattctcagtaaactatcgcaagaacaaaaaacc
-aaacaccgcatattctcactcataggtgggaattgaacaatgagatcacatggacacatg
-aaggggaatatcacactctggggactgtggtggggtgtggggaggggggagggatagcac
-tgggagatatacctaaggctagatgacgagttagtgggtgcagcgcaccagcatggcaca
-tgtatacatatgtaactaacctgcacaatgtgcacatgtaccctaaaacttaaagtataa
-taaaaaataaataaataaataaataaataaaaaaggaaaggctttcagcttttcttcatt
-caatatgatgttagctgtgtgtttgtcacatatatgacctttatttattttatttatttt
-atttttttgagacggagttttgctcttgttgcccagggtgtagtgcagtggcacgacctc
-agctcactgcaacctctgccttctagtttcaagtgagtctcctgcctcagcctctcgagt
-agctgggattacaggggcccaccaccacacctggctaattttttttgtatttttagtaga
-gacagggtttcatcatgttggtcaggctggtctcgaactcctgacctcgtgatccgcctg
-cctcagcctcccaaagcgctgggattacaggcgtgagccactgcgcctggccatatgacc
-tttattatgttgaggtatgttccttctgtgcctagtttgttgagtttttaatcatgaagt
-ggtgttgaattttatcaaatgccttttcctgcatctattgagatggtcatattgtttatg
-tccttcattttgttgatgtgtcatgtttatcaactggcatatgttgaatcatttttgctt
-ctctgggataaatgccatttgattatgatatattacctttttgatgtgctgttggatttg
-acttgctagtattttgttcaggatttctgcaggatttcatcagggatattggcctgtagc
-ttctttcgttttgttgtgttcttgtcaggttttggtatctgagtaatgctggcctttaga
-atgctatagggagaattccttcttcaattttttggaacagtttgaggaggattcatgtta
-gttatttatacatttggtagaacttggtaaaccagtgaatccttctgatcctgggctttt
-cttcagagattttttattacgaattcaatcttatcacacattattggtctgttcaggatt
-tctgtttctttttgatttaatgttggtggctggtatgtgtgtgggaatttaccttttccc
-ctagattttcctgtcagtgtatacttgttcataatagtctctgatgatcttttgtattct
-gtgatatcatgtgtgatgtctccttttttcttttctgattttaacacacaaaagtataaa
-tcactggtacagcaaatgcataaatgaggaaaagacccaaatgttaccactacagaaaac
-cactaaaccataattataaataagagagaaaaaaaaggctatacaaaacaaccaaaaact
-aattaccaaaacgacaagaaaaagtcctcatatataaatagtaagtttgactgttaagtg
-gattaaatattccacttaaaacatataggctgtctgaatgaattttttaaaaaagtgacc
-cagtaatgtaatgcctacaagaaactcacttcaactgttaagacacatagactgataata
-aagggatagaaaaagatatctcatgcacacagaaaccaaaagcgagcaAAGAGACGATGG
-CAGTACGTTCAGGTAGgagataagcttccatgacctcagctgccaccattccccacaatg
-ccccagctacccaagagaccctgagcccactcaactagtacattacttgtacaagtagta
-cgttactactatagctggcatttgagagagccactacagtaaagctatttgcaaccaagg
-aaatcataaaaagtctacataactcctcgacacgcccatcagggctaatgattgtggttg
-ccattgggaaacctgagggcaagcctgccccatcgagctgtgcccaactttgcccccact
-ttggggctgagaatggagcccatgccactgtgcattccacagacagaccatttcctgaga
-caatactgtttctcccagtaaacaaagatcaaatataaactccctgctatcaccgcatcc
-agctcttaactgcaagtgccacctactggcctggaggtcaaactgcacaacccgatagaa
-gtgttgacataagcgtacagtgctcgagaaaaagataagcgtctcaggacctctgccact
-caagatctgcaggagactgtgagcctcatcacatgcctagtacatcactactacaactgg
-catttgagaaagtcaccgcatgaaggctatttataaccaaggaattcatacagagTATAT
-GCCATTCTCCCCATCATTACCACAAgtgctggtgtttgtgcctgccaatgagctatttga
-aggaaagtttgacagtttagctccacccagctttatcctccccttaggggctgagcaggg
-agctcaggccagtgtatattccatagactgtcccttgcctgaggcaacagagagcttctc
-cccgtaaacaaagatcaagcatacacccacctgcttctgcccagattttattcataagca
-ccacatagtagcctggaggtctaactacacaacccagtaaaaaactggcttacacaagtg
-cacagcacggggaaacaagttaagcttcctaagacttctgcactctagccctgcaggagg
-cagtgagcctagcccagcacatcactactacaaccagcatttgagaaagccaccacacaa
-aggctatctataatcaagaaactcatacagactctttgccactgaaagcacccagaacca
-aggccaaataaccctacacaatgtatattataatcacatcctcaagggggaaaaagtcct
-gaccaaatgaaagtaaatttaaaaataagaacagatagttgatccaaatgagaaggaacc
-caagaaacaattctggaagtataaaaaaaagagtgttacaacaccccaaaggattgcact
-aactcttccacaatgaaccctaaccaaaatgaaatctttgaaataccaaagaattcaaaa
-tattaattttaaagaatctcagtaaggtccaagagaaagtaaaaaatcaatacaaatcag
-aaatataactcaggatatgaatgaaaaatctactaaagagatggattttttaaaatagtt
-tttttgttgtttgtttgtttgtttgttgttgttgttgttgttgttgttgagatggagtct
-tgttctgttgcccaagccagagtgcagtggtgcgatctcggctcactgcaaactctgcct
-ccagggttcaagtgattctcctgcctcagcctactgagtagctggaattacaggtgtgtg
-ccactacgcccagataatttttttttttatttttagtagagacaaggtttcaccctgttg
-gccaggctggttttgaactcctgacctcaagtgatctgcccaccttggcctcccaaaatg
-ctgggattacaggtgtgagcccactgtgcccagcctaaatagttttttcaaatgaacttc
-tgtaattgaaaaattcatttaagaaattacaaaatatagttgaaagctctaacaatagac
-taaaccaagcagaagaaagaggttcagaacttgaagacaagtctcttatgaattaaccca
-gtcagacaaaaataaagaaaaaaattttaaaaatgaacagagctttcaagaagtatgaga
-ttatgtaaagtaactgaacctatgagtcacaggtattcctgaggaaaaagaaaaagtgag
-aagtttggaaaaactatttgaggaagtaattggggaaaacctctttagtcttgctagaga
-tttagacatctaaatgaaagaggctcaaagaatgccaggaagatacattgcaagacagac
-ttcatcaagatatgtagtcatcagactatctaaagtcaacatgaaggaaaaaaattctaa
-aatcagcaagagaaaagcatacagtcatctataaaggaaatcccatcagaataacaatgg
-gcttctcagcagaaaccttacaagccagaagagattggatctaatttttggacttcttaa
-agaaaaaaaaacctgtcaaacacgaatgttatgccctgctaaactaagcatcataaatga
-aggggaaataaagtcaagtctttcctgacaagcaaatgctaagataattcatcatcacta
-aaccagtcctataagaaatgctcaaaagaattgtaaaagtcaaaattaaagttcaatact
-caccatcataaatacacacaaaagtacaaaactcacaggttttataaaacaattgagact
-acagagcaactaggtaaaaaattaacattacaacaggaacaaaacctcatatatcaatat
-taactttgaataaaaagggattaaattcccccacttaagagatatagattggcagaacag
-atttaaaaacatgaactaactatatgctgtttacaagaaactcattaataaagacatgag
-ttcaggtaaaggggtggaaaaagatgttctacgcaaacagaaaccaaatgagagaaggag
-tagctatacttatatcagataaagcacactttaaatcaacaacagtaaaataaaacaaag
-gaggtcatcatacaatgataaaaagatcaattcagcaagaagatataaccatcctactaa
-atacatatgcacctaacacaagactacccagattcataaaacaaatactactagacctaa
-gagggatgagaaattacctaattggtacaatgtacaatattctgatgatggttacactaa
-aagcccatactttactgctactcaatatatccatgtaacaaatctgcgcttgtacttcta
-aatctataaaaaAATTAAAATTTAACAAAAGTAAATAAAACACatagctaaaactaaaaa
-agcaaaaacaaaaactatgctaagtattggtaaagatgtggggaaaaaagtaaactctca
-aatattgctagtgggagtataaattgttttccactttggaaaacaatttggtaatttcGt
-ttttttttttttcttttctcttttttttttttttttttttGCATGCCAGAAAAAAATATT
-TACAGTAACTATGGAACACAAAGGTTTATTACATCCATAATTAACATGGAACATTTACTT
-ATCAGTTTGACAAGGACAACACTGAGACCTCTTAGGACAGAGAGAAAGGGCAATTTTCAA
-AGGAAAAAAGCATAGTATATGCATATttaataagtaaaacatacacataccctgtgactc
-agccattgtacatctagctgtttatccaagagaaatgacagcatatggctacacaaagag
-ttgcacacaaattttcaatggcagttttatttgtaatagctaacatctgaaaacaatcat
-aatgttcattagggggtaaatggataaatgatcatatatgcataaaaagtaatacaagca
-ataaaaaggaatgaactattggtacacgaaacatatatgattcaaaataattgccttgga
-tggaaaaagacaagcggaaaagtatacatgctatattacttcatttatgtaatattcaag
-agaatgccaagaaagctacaagaacaaatagcaggtcagtcgttgcctgggtatcatgga
-ggtagagggagggaagggaagaggaaagagtggatgccaaagaggaatgagaaacatttt
-gagagtgaaggatatatacattatgttgattaaggtaatggtttcaccagtgcatctttt
-gccaagttcatcaaattatacactctaaataatgcagtttaatgtacatcaattatatct
-caataaTTTGGAATGAAAAAAAAAAACTCCTCACAAAGAACAAAACCTCTAGGACCTGAT
-AGCTTTCAGTCACAATATAGTCAGGCACTCAAAAAAAAACTTTAACACAATAAAATTCTC
-TTTGAATGCCACCTTAAACTCAATCCCATCCAGAGAAAACAACTTTTATTAGAATGACAT
-GTGATTTGCATTTTTAGTTCATGCATTTACTTATATACACATAAATATAGCTTTTTCACA
-TAAATTAGAATCATTGCTATGCATGTTGTTCTAAAATGTTGCTTTTTCACTCAAAAAATG
-TTTAGTAAGATAAAATCTGCTGCACTCTTTTTAACAGAAGCACAGAATTAAATCATATGG
-ATGCACTTCGTTTTATGCTACTCTACAGAGTGACAAGACTTCTTTGTGCATTTATCTTTG
-AGCACTTATTTATTTCTTTGTAAAAGGCTTTCTAAATTTCCAGATCATCAACAAAGCATT
-AATTTGGTCAGTTAAAAAACAATTGCTTATATCCTTCTCTGAAAAGAATGATGTACAGAA
-AAGAATTATATATATATATGAATAATACATCATAAGTGTTCAGAAAGACATTGTATTTTA
-GGTGGAGAGACAGGCAGGTGACCAGACTGCTACATGCAGTAAGATGAACCCTGATAGAAC
-TAACACTGGAGGCTGTGAAAAAACTGCTAGGAGCACCCAGCCTTGGTAGAGCAGCATAAT
-TTCTTCCTGTAATTCTTTCTCTCCAAATTGCCATACACTTCAGCAGAGTTTGCAACTTCT
-CTTCTAAGTCTTTATCCTTCCCCCAAGGCATGCCTAGCACAGGACTCTTGAACAGTGATG
-CCTCAATTAGAGTTGCTAGCCAATAGATTGAAGCTATGTTGGCACAATATCCTACATCCT
-CCCGATCTACTGGCTGAGCCCAACCCCACCTAAGAAGGACAATAAAGATCTGTGTTCAGA
-GTCATACTGAATAGAGACTTCTGGACTCTATAGAACCCACTGCCTCCTGATGAAGTCCCT
-ACTGTTCACCCTTGCAGTTTTTATGCTCCTGGCCCAATTGGTCTCAGGTAAACAGAATCT
-TGGGGAAGAAGAAACACTGGCCTGGAACAGGGTCCTGCACATGGAGTCCCTGTTTCTAAG
-TGGTCTGTGGAAATGGGGTCTGGCTTCTCACTGGGAGCAGGGCTGAGATTTGTCCTACTT
-CTTCAGACCACCTCTGTTCTAAGAAACTTGAAGGCTCTCAGGATAGAGCAGGATCTGTGA
-TCGGAGCTGGGGAGGAGGGTAAGGCAAATCCCATACAGTTGCCTCCAAAGGTAGAAATGA
-TCTTGAAATCCCAAACTTCTATCCTGTCACTTCGGGTCAGTCCAGTCAAGCCCTGCCTCA
-TTTCACTTTTGTTTTTTTTGCTGCCGATATTCCCTCCTGAGGTAACAATTATATAATATT
-ACTTCCCCCAGTTTTCTTGGTCTTACAGAGAGGTCTCTGATTTTTTGTTTGTTTGTTTGT
-TCTTGGATGTGGTTAACAGAACAGGAAAGGCTGTTTCTATATATGTATAGGACTGTAAAA
-TGGAAAATGAAAAAAAAAATTCTGTGTGGGAACTATTGGAAGTCTATATCAGATTTCAGC
-TCTGTTTGTGTAAGCATTTCTTATTTTTAATTTATTCTGTAGCTTATATTTACAAAACCA
-AGACAAGAACACTGAAAGTTATTTAGAAATAAATTGGCCACATTTCATCACTGCTTGCAT
-TTTTTCACTTGTAACCAactgatatatgagcttataacctgctttatttttttacctacg
-attctatcaggaaaattttcacaggtcttgaatattccttgaaaatacaatttgcagtag
-atgcttataattctgtcatatttttgtaccaatattaacttggaaagtccttaattgtgt
-gtcatttggattattttttctaatgtgtgagtactgtaaataacattgtacaaccttatt
-aatatatcattgtgagattctctgtttgtataggtaaattttagaagttccattgcttgg
-tacaagggtattatttcttctaagttaactggcacatattgccaaTGGTTACTATTGGAG
-TATTTGTATTTTTAACATTTGTATTTCATATTTCTTGCAAATATTTTCAAACATATTGGT
-TGCTTCTAAAATGCATTATTTATTTGAGACACATAATTTTCATTTTCATGTCAAATCTAT
-TGGTGTTTTCTTTGCATTCTTCCACTAACTTAGTAAGTCCTTCTCCGTGTTGAGAACAGT
-TATTCACCTATGATTTTGTTTTTTACACCGGACTCAATCCCACCTTTTTACATAAGGCAC
-AATGAAATAAACTAATATTCTTTAGTATAATTTCCTAATGGGTTATATAATAACTCCATA
-GCCCGCCTCTAGAGATAGTAGTTTATATTCCCTAATTTGCAGAAATGTTCAAATTGATAG
-TGGATAAGAGGAAATTATAATGCTCTCATGGTTGTCTCAAAAGATGTTTCAGGCCTATTG
-CATCCTTGAAATTCTATGAGTTTAAATTGCCTGATTTCTCCCTCTGTCTCTGGAACATTA
-GTGACATACATCGACATACATCACATACTTGTATGTTGTCCTTTTTCTACACTTTGTGTG
-TGTGTATATATATTCTAACATATACATATATATAATGTTAAAAACTCAATCATCAGAGGA
-GGATTAAACAGCTGATAAGGGATAATAGTAGTGGTAATAGCATTCAAAAACGTTTGCTCT
-GTTCACTTACTGTCAAttacctcatatttctttcatttattgtacttatcacaatctgta
-gttattttgtttattcatttacttgtttattttctttctccccctctccaatgtaaggtc
-ctcaaatcatgtctttctgttcattgttttattccctgcatcttgcagaattcttgacat
-ggtaggcactcatcatatacttgttgattaagtACAGTAATGAGTTAAGCAAGGTAAGAA
-AGAGCTCCAGCGTCACTCTAGGGCCTCTATGTGTTAAACCATGTGATGAGATATTTTCAT
-ATGTATATAATATGTACACATATATAGGCAAACCCTGCAGAATGTCTCCCTAATGAATAT
-ATTCCTAATGGAATGGCTTTTTTTATTCTCAAAATTTTGTAAAATGTACTTATATCTCAA
-TATCATATAGGTATATAGGTATAGATGAAAATTTTTTATTTATCTTTCCATAACTTGACA
-TGACATTTTTAACCAGATAATATGTAAGATAAGCCTAGAGTTATCTTCTAAATATAATTT
-TTAGGATCTCAGAAACATGTAAGGGACATTTTGAAAATCTCACCAATTGGCAACAAAAGC
-CATATGTGTTTCAGTAATGGTGAGAAAGATGACAGCAATTATTTTAGCATTTCTTATTTT
-TGAAATGATAGTTTTTACTTCTGTTTAGGTGTTTGTGTTTTAGCTACATTTTAGGAAATT
-GCTTGGGGATTTTGTGTTCATGTATAACAACATGCTATATATTTTCCCATTTAAAATCAT
-GGGGAATTGGCCCCTGGTAAGTGTTTGTATACAGAATTCTGATTTCAGAAATGAGAATCT
-CATACATATCTAAAGAATTCTATGTGTGTTTATAAAATTTCACTTAATCCTCAAAGTAGG
-TATTTATGATTAGGAAAAACATGCTAAAGCAACTGGAAAGGCACTTGAATAAACAGTGCT
-CAAAAACTATTGCTATTTTTTATCCTCCTGTGATAAATACTTAGGCTTAATAATCTATAT
-AATTCCTTTATTCAGGTAATTGGTATGTGAAAAAGTGTCTAAACGACGTTGGAATTTGCA
-AGAAGAAGTGCAAACCTGAAGAGATGCATGTAAAGAATGGTTGGGCAATGTGCGGCAAAC
-AAAGGGACTGCTGTGTTCCAGCTGACAGACGTGCTAATTATCCTGTTTTCTGTGTCCAGA
-CAAAGACTACAAGAATTTcaacagtaacagcaacaacagcaacaacaacTTTGATGATGA
-CTACTGCTTCGATGTCTTCGATGGCTCCTACCCCCGTTTCTCCCACTGGTTGAACATTCC
-AGCCTCTGTCTCCTGCTCTAGGATCCCCGACTCATTAAAGCAAAGAGGCTTATTCTGGTG
-TCAGTTTTCTCTCTACAGCCCCCTTCCCACTTTCCCTCCATTCAACAGTGTCTGGAAGGG
-CACCACAATTTCACTGCACTCGCATTTCTATGGTAGAAATGCAAATAAGATAGGGGCCAG
-GAACAAGGGAGGGTTAGTCCAAAACACCCACTCAGGAATGATAGATAGTAGCAATGTCCT
-CCTTGAAGACAGTTCTAGGCCCACAGCTTGCCATAGCAATTATCAtcaaacttcatgtac
-atcagaaacacctggagagatggctaaagcacagatttctagggctcacttttagtttcc
-aattctgcaggggagcttgagaatttgcactgctcacaagttcccaggtgatgctagggc
-tgctggtccaggcaccacactgtgagaacAATTAGCTTATAATATGAAAGGATTGAAAGC
-CGACTGTGAATGTGATTTTCTACAGATTGAAGGCTGCATTTCCTATGTAGTTTTGGAGTA
-GATAGTAATACAAAatcatcctacagaatcctccgacaacaacctgagaatgtaggtatt
-ataacctcactttagagaataggaaactTGATTTCTAAGCATTAGAAGACTGGGACAGAC
-TAAATTGACTACTGAGAACATTCTGTCACTGCACCATGAGGTTGCCCAATTTTCTTCTCA
-CCCTGGAAATCCTCATTCATAGCTTCCAACTTAAATATGATGAAAGGGAGATCAAGAGCT
-CTATAATGTGTCCTGAATGTTAGGACAGGCACTCATCCCAAGCAATAGAATGTTTTCCGT
-ACATTACATTACATTGATGCTCTGCCTGCACCAATAAGAGAATATGACTGGGTGTATCAT
-AGTCATCCATCCATGCCTCAGGCCCACTTCCCTGATAGTTGGACAGGGAGAATAGGGAAT
-GCAGATGCCTTCGCTTTCTGGACACTTACAGTAGCTGTGTTTGTCTTTGTCATCTCAGTT
-TGCTCACTTATGAAATGCTAGCGTTTTACTCAGTATCTTTCTCCCCACCCCTGTCATAGT
-ACATCTTTCTGATTCTGAAGATATAAGATTGGCTTATGTTTTGTGGGGTCAACTTCACCT
-TTGACCCCATAAGATCCTAGAGATTTAATGTAGATATATAAAAGTTGGAGAAAACATTGG
-TGGAAGGGTTTTCTCCACTATAGACACAAATCCATGAGTGTCATCACAGACTCCTTTTCC
-TTCTTCACTTGATTCCAGTGAAGATCCATGTTCAttctaccacctccaatatgtaccatg
-acctctatctccagctgctgctaggatgattgcaatagccttcccattgattgccctgca
-ttcctttcacactcacgcctaactatcctccacaatgagagccagaatcatttttctgaa
-acacagatctaatcattagactcccctctggcatcttttcccatagcatcctaagacaac
-tcttcagagcagccttcatcactcttggcattcagaacctgccttgcgtttccagtttta
-cctccaaagcactgtcacagggcatcttgctatcccaccaacatacctcttcgtgattgg
-tttgaactcactggattgcttctggttttgagtttttgtacatacttttctgtctCCATT
-TATAACTGCCTGGAAAAAAATCTTTATTTTCTTCTGGAGGACTTTGATAACCACACTGTT
-CTACCCACAATAGAACTACTGCCACCATTTGTGCTCCACTGTTATGACTTACCCAGAATT
-TTAAGTCATCATGTCACATGCCTCACTCTGAATATCTGCTTATGTCTTCTCCCCTACTGG
-ACTTTGAAATTTTATTTAGGAACAGGAACCATCTTATCTTCTCTTTCTCCTACCATCCCC
-TAACAAGATTCTATATTAATTCTTGTTGAATAAGTAAGAGGGATTCTCGAAGGCCAGAAA
-GATCTTTGGATGTTACTGAAATCTCATTTTTATTTATTTTAGATCTTCTCCAGGAAACAG
-GCTTCTGTCTCCTTTAGAAGACATATCTATGATCTATGTCATTACATAGTAGAGGAGTTT
-TGAGAGGTGGCTTGTCCCATGTGGTAGGACATCATTGCCTCTTACACCCATGCTTATCTT
-TGCAGGCAGAACTCATGAACTCACACAAGAAGGTGGGCAGATGGAAGCAAGTTACTTCAg
-cagaggagaatagtaggaaaaaaacataactttagagctggatgtatctgaggtcattca
-tgatcccaccatatatccactcttggaccacagacaaatgatttcccatcttcgagcctg
-ttactgaatttgaagaacagagaaaatactcactcccactcaaggtactttgagggttgc
-cagagtaatctattaaaatgttaatcataTCATAGGGATTCAGCTGTAACAGGTTGTTCC
-CTGGATAAGAAACAGTACAGCACATTTCCCCAGGGCCCTGCCCACTGGGCCTTGGCTGTC
-TTGCCTGAGTATGGGTGATTATAGCCTATGTTTCACCTGGGGGAAGACGCATTAGGCTGA
-GAAGAGTGTAACAGAGTTGAGGGTCATGGGATCTCTTTGAACAGCCAGATGAGATTTTAA
-AGGTTCTAGTAGAACTTGCTGTGCTTACTTTTCAATAATCACCTTGATCACTACCTTGGA
-AACATCTTAGAGCTATTATCACATTGATTCTAGACGATGAATATAATCTCAGTGCTGCAG
-CCTGAAACATTGTCCTCCTGTCCTCTTGCCTTATATCTCATCCGTCCTTCACGCAGTGCT
-GGAACTTAGGTGGCAAATATTCTTTTCCCACTTTGGAGTTGACTAATGGCATTAGGAGGC
-CAAGGGAAAAGGAATCTTTATGGTGAGAGAAACTGCAATGTGCCAAGCACATTAATACAC
-AATTTCTTAAACAAAAGCATTGTATGATAATtatgacaacatgattaaagctgaggaacc
-tggagtaaaatgtatctagggttacatctaggtttgttccttactacttttactcatcat
-gtggtctctatatcaatttcttcatttgcaagacaggtataatcatgcatctacctctta
-gaatcactctaaaaattaaaatagataaggcatataggtcaccgtgatctctagcaccaa
-tgaaattctaagaaatgtagatttTAAAAGGCATATGAGATATAGGTTATTCTGGTTTAA
-AATATGAAACGTTTAAAAAATAAAATATGTAAGTCCTGAGTTTCCGGGAGAAAAAGGGTC
-TTGCACAAGAACAACCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCCGCATCTCTA
-CCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTTCTCAAGGCC
-GCATCTCTACCCCATCTCATGCGAATCCTGACCCATATTTGGGAGGCAATTTTACCTGTT
-CTCAAGGCCGCATCTCTACCCCATCTCATGCGAATCCTGACGACGTCCTCAAAGCTGAAT
-AAATTTTTGCCTTAAATAAATTAAACGAGATTTAGATTTCACCAGTCACTGATACTCAAT
-CCCAATTGGATATTCATTCAAAAGTCTGACTTCTCTCCTGAGGTGAGAGTAAGATTCCTG
-GGCACTTTTTCATAATACTTACCTTAACCTAGCTAAACACAATGGACACTCTTCTTTGAG
-gtgtcagtggaaattaagaggagagtctgaactcttacctcccacatggggcttgcagac
-aggtgaagatggcgctcctcccctttgttggtaatggagacctagaagaaaggctgggca
-tccagctcccacgcagtcatatgaagcagcccagagcaacattccccttcactgcctgtg
-cggtggcagtagagacctagcAGTAGAGACCTAGCTGGGAGTCAGATCTCCCATCCCTCA
-ACCAGTGGTAGTGATTGGCCTGGGgaggaatcccttccctgctggtgccatgtcagtgaa
-aactgaggggagactgaaattgcccttccttccaatagtataaaaggcctgaagcagact
-tcccttcccagccagtacattaccattgaagaccaaggggtggtctcaacttcaatccct
-aGGGAGCCGTGGCTGGCATCAACCCTCCTTCCAGTCAGTGAGGATAGAGGATAGGAGGGT
-GCTGGAAAATAGGTGTCTTTAAAACTGAATAATGTTGTTTTTACCACAATTTTAAAAACT
-GAATAAGAAGACATGGCAGACCCCTGAAACTGGATAACTACACACGGAACTAACCAGAAT
-TAACATGCAGAAGGTTTGAGAATAGAACTGCAGTGGGGAATACCACCTAGATTTTTAaaa
-taacaacttgtatatatttaaggatatatgcaatatgatgttttgatatacatagacata
-gtaaaatgattgctataatcaaattaacatatccttctcttcacatagttatcatttttt
-gaggagacagcacctgaaatccatcttcttagcaaatttctagtatacaacaccatatta
-ttaactagagtccccatactgccctttagctctctagactttatcctacacaacttcaac
-tttgtacccttcgacgagcatccccccatttcctccaccacccgccccacccctgataat
-cactggtctacactcttctatgtatttgaatttttaaattccatgtataagtgagatcat
-gctgtactttttttctgtgtctgtcttatttcacttagcataatgtcctctgggttcatc
-catgttgttctgaatggcaagctctcctttgtcaaggctgaataatatgccattgtatat
-atatacaatttatttagtgtgttcatctatcgatgtcgatagatgataatgtcttcatct
-atcagcttaggttgatttcatatcttggctattgtgaataatgctgagcacagatatctc
-tacatggtgccgatttcatttctttttggtatataccaagacgagggattgatggctcat
-atactagttctgtttttatttttttgagaagcctccatactgttttacatcattgttgta
-ctaatttacatttccaccaacagtgcgcaaaagttccctttacattctcaccaatacttg
-tgatctcttgtctttgtgataatagtcatcctaacaagtgtgaagtgatttctcattgtg
-cttttgatttgcatttccctgatgattagtgatgttgagcacctttccatacacttgtta
-gccacttttatttcttctccagaaatatttctgttcatgtctttgcccaattttcaagtg
-ggctctttgttttttgctactgagttgtgtatgtttcttatatgttttttatattaacct
-tatgtgatatatggtgggcaagtattttcctcccatcccataaactgccttctcactctg
-ttgactgtttcctttgctgtgcaAcaaatgatcttcaatgataatacaaagaatatgcaa
-tacagaaatgatagtcacttcaacagatggtgttgggaaaactggatttccacaggcaga
-acaaatgaaatggatccttatcttacaccacacacacacacacaaactcaaaatggattt
-aaagacttaaatgtgagcctggcaaacttaaaactcctaaaataaaacagaagggaatat
-ctttatgactttggtctaggcaacagttgcttgaatatgacatcaaaaccacaagcaaca
-aaagcaaaaatatattagtgggactatggatacatttgaaacaaactacaaactagtaaa
-atctcagcaaagaaatagaagatataggccaggcacggtggctcacgcctgtaatcccag
-cattttgggaggccgaagagggcggatcacgaggtcaggagatcgagaccatcctggcta
-acatgataaaaccccgtctctactaaaaaaaaaaatacaaaaaattagtggggcatggtg
-acaggcacctgtagtcccagctgcttgggaggttgaggcaggaggatggcgtgaacctgg
-caggcggaggttacagtgagccaagatcatgccactgcactccagcctgggtgacagagc
-gagactccatctcaaaaaaagaaaaacagaaaaaagaaaaagaaatagaagatatgaaaa
-taatcaaatggaaattataaatttatgaaatgtaatcaaagtaaaaaagaaaaagtcact
-gtataggctcaatagtagatggaacatgacagaggaaaaaataagacagatctatagaat
-tacccaatctaaaaacagagaaaaatagactgataaaaatgaacagagccacagatacct
-gtgggacataaaaagatctaatgttcatgtcatcagagtcctcaaggagagggagagtgt
-ggaactgaaaaaaatatttgaaggaataatgcctgaaaaatatcccaagtgtggcagaat
-acatacatctgtaattcaagatcttgaattaacccaaaacaagataaacccaaagaaatc
-catgccaagataaagtataatcaaactaaaactaatagctagagacagaaaaaaatcaag
-cgagcattcagaaacaatacaccacccatggtaaaacaatggtttgattgatgggatttg
-tcatctgaaaccatggaagcaaaaaagaaatgtcatcacatgtttcaaatgccaaaataa
-agaactatcaaatccaaatcctatatctagcaaaaaaaaaaaaaaaaaagttctctagga
-ataaacagggaaagaaaaacattctcaaacaagaaactattaagggaatttgtcactagc
-agccctatcctaaaaatatagtcaaagaaagttctctaaaccaaaatgataaccgggggc
-ttggaacttcagaaaggaagaagtcgaagtcaatagaatgggtaaaatgggaggtgaata
-taatagactatgcttttttttttgctttattttttttttatgctttcttttcttgagata
-gtgtctggctctgtcgcccggacaggagtgcagtggtacaatctcagctcactgcagcct
-cgacctcctgggatcaaaggatcttccctcctgagcccagtgagtagctgggaccacagg
-agccggctaatttttatatttttttgtagagacagggtttcactgtgttgcccaggctgg
-tctcgaactcttagactcaagcaatctgctgcctcggcctcccaaagtgagactatcttt
-ttattaaagagttttgaaatcatgtttggtagattgaagcaaaaattgtaacattgtctg
-atgtggttctaaatagatgtagaggaagtacttaaacattataagctgggtaaggcaaag
-aaatttaaagtgaggtaagtttttatacttcattcaaacttgtaaaactttgacaccgta
-gactgtgataagttaggtacagcaaccactaaaaaaaataaataaatacaataagaaatt
-atagctaaattatagtggaattctaaGgaacaaatagaaaacaaaatataaaatggtaac
-ttaatccctaacatgtatcaaaaagataccccatacaaatattaatcataagaaagtagg
-aatggctatattaacatcagttaaagcagacttcagagcaaaacaaattatcaaggacag
-agagggaaattatataatgccaaaagggtcaatcaaccaagaagacatggcagccctgat
-cgtccacaaactgaaaaccagagtttcaaaatacctgaagcaaaaactgataaaactaag
-aggagaaataaatttacaatatcaggccaggcgtggtgactcatccctgtaattccagca
-ctttgggaggctgaggcaggcaaatcacttgagcttgggagtttgagatcacctgaggca
-acatagtgagacccccctctctataaaagatacaaaaactaaggtgtggtggcccacgcc
-tgttgtcccagctactcaggaggctgacatggaaggcttgagcccaggacatcgaggctg
-ccgtgagctgtgcactccagcctgggtgacagagcgagaccccgtctcaaaaaaaaaaaa
-aaaaaaaaaattacaatatcaacttcaacagttgatagataggacaactagacataaaat
-ccacaagggtgtagaagaatttaaaaataccacaaagcaacaggatctaatagacattta
-taaaacatttcatccaacaacaatggaatacactccttggtgtttatgccaaggaaatga
-aagtgtttttctccacaactcccgggcaggaatatcaatggtagtgttatttataatagc
-ccaaaagagtaaacaaccaaaacgtcattcaacaggtgaatgactaacatagggtggtac
-atccatacaatggaatacttctcagcagtaaaaaaaaaaaaaaaaatgaattattgatac
-atgcaacagcttatatagattataagagcattatgctgagtgatgaaaaaagacaaaggg
-tcacatagtgtgtgactatattcacataacattgtctaaaaattatgaaatgtagaacaa
-attagtgctttccaggggttatgaatagtcaggagagggagggaaatatgccagtaagac
-aataagagagggagatcttttcataatgaataattctgtattttgatttgttgatggtta
-aatgaatctaAGAAGGATCTGATAATCTAGTATTAGACGCATAGTACAGTAGTGAACTTT
-CAGCCTCTAGAGAagtgctctccaatagaagtaactaaaaagatggaaatgttctaaatc
-tgtactatacaatatgttagccactggtcatgtggttgtaaagcacttgatatgtgCTCT
-ATAATattttgagcaagtttcttatgttttctgtgcctttgagtttctcatttgtagaat
-ggagataataatatctacctcaaagtgttgctgtaaaggtaaatgagtttatgtatgtaa
-gacaccgacaggagtgccagcacatagaaagtgttatacaagggttagccattTGTTATT
-GTCATTGTTGTGTTTTGTTCTCTTTCTAATGTCTGGACCTTCAAAtgattcagactcatg
-ggaccatacttcattctgtttttataactttaacctgtaagattctcattttaattggaa
-tttcatatttaggaattcttgggtgccttggatatatgaagaaaagattcacatctgctt
-ccactaaacaactagcgaattaacaactgagatttcttataattaaattatttacttgat
-ttttttaatccatataaatagcttgaacttaggttgaaacccatgagaatttgtggctac
-agttcatagggttaatatttaccttctccatccagagccaaggttaaTGCTGACAAAATA
-CAATCTAATACAGATTAATCTGTGTGTGTGTGTATGTATACACTCGTGTCAGAGAGAGAG
-ATTTCATTCTTCCTTAGGCTGAGATTGTTGCCTTTGAATCTCAGGTTTATATAAGGGTAT
-CAATTATATGTCTTCCCTAGGACTAGATCTTAGCTTTATACATCTCACATAGCCATCAAA
-ATAATGTTCAACTTATCTTTCAGGGTTTGCAATCTTAGTTTTTGGCCTGTGCAGATTCCT
-TTCATTTTTGACGGTTTCTCAATGCAGTAATTTCCTTTTTACATTTACCCAACTTTTTTG
-GTTATTTTCACCAGATACATTGTTCAATATATCTATTCTACTATATTCTATTAATAACAG
-TCTACTATATATGTGTCTTATTGTCTAatattgctgaaatctttttttaatccaataatg
-aatctctgtcatctaatcagtgagtttaagccatgtgaatgtattataactactgatcta
-ttaggacttttttctgccCTCCAGTTGTGACTTATCTATTCCTCATTTTTTTTAGTTTCT
-GTTGGATGGATCATATGTTCTTCTGCTAATATGaatattataattttatttttatttgtt
-ttattaaaaatttGTCCTTGCTCTTAGGACCCATTCCTATCCTTATATTTATTATTACTA
-ATTTAACATCCAGCTTCAGAAATACAACTTTAATAGGAAGGCTTTTTGTATTTCTCCTGA
-CTGCTCAGACTTAGGGTCTTTATTTGATGCTCCACCACCAAGTCACCTATAAGGAAAGTT
-TGCATTCACAGGAAGACTATAAATAATAAAACCAATCCCTTGACTAGGACTTAAACCATG
-TAAAAGCTGGTGGCAAAAGTAAAGGGAGGTGACCCTTGAGACCTCTGAGGTAACTGCTCT
-TAAATTTACATTTGCCTCTAAAAAGGATTTCTTATATGTCAACATCTCTCTGTTTAAACA
-TATTCTTGTGTAAAACCACTACGTGACCTGAATAATGGCCATAGGGCTCATCTCTAAGCC
-AACTGGCTTATTTATTTAATGCATCTCAGTGGTTAACAGGGTTGAAATTTTTTGAAAACT
-GCAATCAATGATCAAAGAATGATCTAGGTAAACATCGATTCCTTGTGGCAACATTTTAAT
-ATTTTCAAAGACAAGGTACAACTGGTAGAAAAAAAATACCCTCATGCATCTTTttcttct
-aattgtggtaaaatatatgacataacattggccattttagccatttttCCttttattttt
-agttgacacataattgtacttatttataggatacaaagtgatatttcaatacatgcatat
-aatgtgtaatgatcaaaccagggtaattagcatatccgtcacctcaaacatttatcattt
-gtattgggaacattcaaaatcctctcttctagccttttaaaagtatacaataaattgtag
-ttaaccatattcaccttacagtgctacaacaccagaagtcattcctcctatctataattt
-tgcatccattagccaatctctctccatcctcccctctccctaatcattaccagcctctaa
-tattaatatctgcaacactactctctacttccatgtgctcaacttttttagctcccatat
-ataaataggaacatgtggtaatctttctgtgcctgacatttcacataacataatgtcctc
-caggctatccatgttgttgcaaaggacagaatttcattatttttatgggtgaatagtatt
-ccattgtgtGTGTGTGTGTATATATATATATATATATTCCATTGTGTGTTATGTATGTAT
-AGTATTCCATTGTGTGCatatatatgtatatatgtgtgtacatatatatatacataatat
-atattcttctgcacatggaaatccagtttctccagcatgatttattgaagagggtatcct
-ttccccagtgtatgttcttggtgcttttataaaaaatcaggtgacCTCAGATCAGACCCA
-ACTACATCATACCTTCTTTCGAAATGTGCAAGAAACCTACTAGAAATTCTTATTGTTAGA
-GTTTCAGATTTATGTCCTGGTTTATACTGCCACATTCATTCTTGGAGGTGAGTACATTTC
-GATCTTGGTCCGGCTGCGCAGAGAGTCAAAGCAGGAAAATCACAGATTCTTCCCAGCAGT
-CTACAGCCTACACAGCGGCATTTGGTGCGATGGGATGGAACATGCTGTATCTCTATTCCA
-TGTGGGGGTAAAGTGGGTGGCCTGAAATTTCCTGTGTCTGCCTGCATGATGCAAAGCTCA
-CAGTTCAGAAGCTTAAGGACACACTTCATATCATCCCATCTGTTCTGGTTCAGTGCATAA
-GAATCTAAGTCTCTGAGGAAGGTAGCATAGTGTGCAGTTCACTGGACCAAAAGCTTTGGC
-TGCACCTCTTCTGGAAAGCCTGGCCATGGGGCTCTTCATGATCATTGCAATTCTGCTGTT
-CCAGAAACCCACAGGTAAACCAAACCAGAAGCTCACTCAAATCAACAGTGGGATGGAGCA
-TTTTCAGGAGCCAAAGGGAACTTCATAATCCACACTAAAGGGAAATAGAGCCCCCAAAGA
-TGGCTAAAGTTTATCCAACATCATCAGAAATTTCCTCTTTCTGGAGCCTTATTCCATGTT
-ACTATCCTTAAAGAGGAGTACTCACTGAGCTAAAAAGAGGTCATAATTTCTTCTGGGAAA
-GATGTGTTGTTATAGAAAGGAATGATGCCAATATCTAGGGATACCTTTATGTCTTTGGAT
-ATGGTTTTTACTCTGATGCTCAGCTATATTTCCTTTTACTCAAATATATATAtgtgtgtg
-tgtgtgtgtgtgtgtgtgtgtgtgCATGAatagaggaagaagcaaattttggagttaggt
-ttaagaaacatgccttcaatatctactagtttgtcaactttaagtagtgaagactctagg
-agcctcagtttcctcatctatggagataatgacacctggttaacaggggttttattaaat
-gatataacctatgtgaagcttggcacatactgagaactcaaaaatTAGAGTTTCCTTTCC
-TCTTTCAAAACCAGATTTCTTACATGTGTCCCTTATTATAAGAATAGTAATGGCCTATTC
-CTGACCCTCTACATTCCTAAGACCCAATAGACTACTACCTTACTGGATAACATGAAAGTC
-ATTCTTGACCCTGATAGTGGGTTTGAACTCAGGAGAACAGTTTGATTCAGACATAAACAC
-ATAGTAACAATACATTGTTCTCTGGGCATCAGAGGAGGTGCAGTAGAAGGTAGTGCTCTG
-GGAGCATTCAGGATGCAGGCAGATTTGCTGAGGTTCCTATGTAGAGCATAGTTCCATAGC
-CTAGAATCAAGGGTTCAGCTCCTTTATTTTCTCAGATAAGATCTTATGTTCTTGGCAGAG
-TCTATCAGATGTTAAGGGAGGCCTAAAACCTCACAGGACCTAAATATAAGTGATCCAGTT
-AAATACAAACACTGAGGTTGACCTTGTCGGAAAATCCTCTTCAGAATATATGAGGGTCTG
-CCTTGTGGATACCCCATACCCCTAATTCCTACAAGCCTCCTCTGTCTTCCCCAAAACCAA
-CGTGCCTTCAGTCTCAAACACTGATATTGTTCTATTGCTCCTTTCTGTGTATAGTAACCG
-AACAACTTAAGAAGTGCTGGAATAACTATGTACAAGGACATTGCAGGAAAATCTGCAGAG
-TAAATGAAGTGCCTGAGGCACTATGTGAAAATGGGAGATACTGTTGCCTCAATATCAAGG
-AACTGGAAGCATGTAAAAAAATTACAAAGCCACCTCGTCCAAAGCCAGCAACACTTGCAC
-TGACTCTTCAAGACTATGTTACAATAATAGAAAATTTCCCAAGCCTGAAGACACAGTCTA
-CATAAATCAAATACAATTTCGTTTTCACTTGCTTCTCAACCTAGTCTAATAAACTAAGGT
-GATGAGATATACATCTTCTTCCTTTTGGTTTCTTGATCCTTAAAATGACCTTCGAGCATA
-TTCTAATAAAGTGCATTGCCAGTTTTCTGTCTCATTTTGTTCTTTAACCAGGGGTTGAAC
-ACTCATTATATACTAGGTAATGAATTGATAAGAACTCAGAACCTCTCCTTGAAAAGGGGA
-TATGACAAGTACACTAAAAAAAAAAAGTCCTATAGTGTGGAAGTCTGGAATAAGAAACTC
-AGAAACACTGACATGTAATTTAGGAGAGGGAAAGGTGAAGCAAATATTCAGGGGAAATTC
-ATGAGTAAGTTTAGGAATAAAGCAGTGTCTTGTAGTAAATAAGTAAATAGTAAAGCAGTA
-AATAAGTAGGATTTCCATGGATGAGGTTTGGTAGGGAAGGCAATTTGAGTGAACAGAATG
-GGAGGAAATTGGAAAAGACAGAACATTTCAAGACACTATACATGCACTTTGTTTGGATGA
-AGAACAGAGCACTCAAAGTTGAACTATGGGGGAAGTCTGATTTCCTAAGCTCCTGTGTAC
-CAGCAGTGAACTGGGAAGACGGAGATAAATAAGATTCCACTGTTGTGGAGCTCAACAGTG
-GAGCTCAACGCTTCCTCTATGAAGTGGAGAAGACCTAAGTAAATAACTCCAACACAAAAG
-TTTTTAGGTTTTTGCTttgttgttgttgttgttgttgatgtGTTCATCTTTTTTGTTATT
-GGGGCCCTGTGGAGTTTAGGGGAAATGTAAAAGATCTAGGAATTGGTCCAAATTGTAGTG
-CTTTCATTGTCTTGATATGCAAGAAGAATAATCCATGTACATACTCTGCTGAATTCTTAA
-AGATGTACCTTCTGAATATGATTAACATGGAAAGTTTCTTCTTCAACTACATTTCAAAGT
-CATTTGCTAGTTTTGTTTCTTATATCATTTCACCATAACAATTACAAGCATTTTAAAGAT
-TTAGTTCATCCACTATAACATTTACCACTAATGTGTGGCATGTGTTCTCTTAATCTCTCT
-CTTTCTGGTGttctagggctggtatagggagcacctaaaacaagcctaaaatatcttgtg
-gtgccagaaagtaagcaattgcttaataatcaaaggatagggtctgcaaacacggacaat
-ttgacttcctcttttcctaattgaataccctttatttccttctcctgcctgattgccctg
-gcgagaacttccaacactatgttgaataggagtggtgagagagggcatccctgtcttgtg
-ccagttttcaaagggaatgcttccagtttttgcccattcagtatgatactggctgtgggt
-ttgtcatagatagctcttattattttgaaatacgtcccatcaatacctaatttattgaga
-gtttttagcatgaagggttgttgaattttgtcaaaggctttttctgcatctattgagata
-atcatgtggtttttgtctttggctctgtttatatgctgcattacatttattgatttgcgt
-atattgaaccagccttgcatcccagggatgaagcccacttgatcatggtggataagcttt
-ttgatgtgctgctggattcggtttgccagtattttattgaggatttttgcatcaatgttc
-atcaaggatattggtctaaaattctctttttcggttgtgtctctgcccggctttggtatc
-agaatgatgctggcctcataaaatgagttagggaggattccctctttttctattgattgg
-aatagtttcagaaggaatggtaccagttcctccttgtacctctggtagaattcggctgtg
-aatccatctagtcctggactctttttggttggtaagctattgattattgccacaatttca
-gatcctgttattggtctattcagagatgcaacttcttcctagtttagtcttgggagagtg
-tatgtgtcgaggaatttatccatttcttctagattttctagtttatttgtgtagaggtgt
-ttgtagtattctctgatggtagtttgtatttctgtgggatcggtggtgatatccccttta
-ttgtatatgtagaaaaccccattgtctcagcccaaaatctccttaagctgataagcaact
-ttagcaaagtctcaggatacaaaatcaatttaccaaaatcataagcattcttatacacca
-acaacagacaaacagagagccaaatcatgagtgaactaccattcacaattgcttcaaaga
-gaataaaatacctaggaatccaacttgcaagggatgtgaaggacctcttcaaggagaact
-acaaaccactgctcaaggaagtaaaagaggatacaaacaaatggaagaacattccatgct
-catgggtaggaagaatcaatatcgtgaaaatcgccatactgcccaaggtaatttacagat
-tcaatgccatccccatcaagctaccaatgcctttcttcacagaattggaaaaaaactact
-ttaaagttcatatggaaccaaaaaagagcccgcatcgccaagtcaatcttaagccaaaag
-aacaaagctggaggcatcacactacctgacttcaaactctactacaaggctacagtaacc
-aaaacagcatggtactagtaccaaaacagagatgtagatcaatggaacagaacagagccc
-tcagaaataacgccgcatatctacaactatctgatctttgacaaacctgagaaaaacaag
-caatggggaaaggattccctatttaataaatggtgctgggaaaactggtagccatatgta
-gaaagctgaaactggatcccttccttacaccttatacaaaaatcaattcaagatggatta
-aagacttaaacgttagacctaaaaccataaaaaccctagaagaaaacctaggcattacca
-ttcaggacataggcatgggcaaggacttcatgtctaaaacaccaaaagcaatggcaacaa
-aagacaaaattgacaaatgggatctaattaaactaaagagcttctgcacagcaaaagaaa
-ctaccatcagagtgaacaggcaacctacaaaatgcgagaaaattttcgcaacctactcat
-ctgacaaagggttaatatccagaatctacaatgaactcaaacaaatttacaagaaaaaaa
-caaacaaccccatcaaaaagtgggtgaaggacatgaacagacacttctcaaaagaagaca
-tttatgcaaccaaaaaacacatgaaaaaatgctcatcatcactggccatcagagaaatgc
-aaatcaaaaccacaatgagatatcatctcacaccagttagaatggcaatcattaaaaagt
-caggaaacaacaggtgctggagaggatgtggagaaataggaacacttttacactgttggt
-gggactgtaaactagttcaaccattgtggaagtcagtgtggcgattcctcagggatctag
-aactagaaataccatttgacccagccatcccattactgggtatatacccaaatgactata
-aatcatgctgctataaagacacatgcacacgtatgtttattgcggcattattcacaatag
-caaagacttggaactaacccaaatgtccaacaataatagactggattaagaaaatgtggc
-acatatacaccatggaatactatgcagccataaaaaatgatgagttcatgtcctttgtag
-ggacatggatgaaataggaaatcatcattctcagtaaactatcgcaagaacaaaaaacca
-aacaccgcatatcctcactcataggtgggaattgaacgagatcacatggacacaggaagg
-ggaatatcacactctggggactgttgtggggtggggggaggggggagggatagcactggg
-agatatacctaaggctagatgacgagttagtgggtgcagcacaccaacatggcacatgta
-tacatatgtaactcacctgcacaatgtgcacatgtaccctaaaacttaaagtatttaaaa
-aaaaaaaaaaggatagggtcatattaaaagaacacaggagtcggtctaaaagagcttcaa
-atgaccaaagctgcgacaatttgagcaataaaataaataagatagcattggattataata
-caacatataataaatatctatgagtccatgatgatatgaataaataattgaataaattgg
-aaaattggtgagaacagatgtgccatatagaataattcccaataattcatacagatactc
-cctgctgaagaaggtggagcttgacctccctctcccttgagcatgggctgtatttagcta
-cttgtttccaaagagaagtgtgtggaaaggagttaaaaaataatttcacctggataaacc
-tgataaggtcatgtttcagattttatggagaaatcatattgataacatgaacctgtgata
-tgatctgatgagaatggcacttcacttctgttttcttcctcccaaaaccctgcgacccaa
-gacaaacaatgaaaaacatcagaaaaactcaaattcagtggcattctaaacaatatttga
-ccagtatttctaaaaactgtcaaatttatcaaaaaggaagaaattctgagccacagtcaa
-agaccagagaagcctaaagagacaggacaactaaaggtaatgtggtatcctggatggact
-cttggaacaggaaaagaacattaaggaaaaactagtggtgataatagtaataataataag
-tgtagagtcatttagtagcaatgtatttagctgtgatggctgcattgtggtaatataaga
-tgttaacaatagcagaaactgggtgaatatttgggagctctctgtattatctttgcaaca
-tttctataaatctaaaactattctaaaactgaaaatgtatttAAATTTTAGAAAACTGAC
-CACAAAATCAATTTGGCACATTCCTTTTCTTCTTATTTACGAAAGAGCTTCTCatttctt
-cattgaatgcttggtagaatctaatggtaaattcaactggaacggaactctttacaggaa
-gtattgttatagattaagtttattgcaggttaaaaggcaattcagttttctatgccttct
-agtcaactgttgtatttggcatatatacttttcccatgttctaagatttttatacttgct
-atcctaaaactcttgtaatatcttctttttatcttattaatgcctgtaagatatgtaatg
-acaccttctttttcatttttgacatctattatttgttttattttctcttttttcttgata
-agtctcacattcacttattaatttgatttatctttacagaaaacaaattttcttcattaa
-ttttAGTTTAGTTTCCATTTCTTAGACtgtgacttgcattgcccaattgaaagtgattga
-aagtgacaggttcacttccaagtggaaacttaagagccagtgtgtccatgtgcagtggct
-cacacctgtaatctcagcactttgggatgctgaggcgggcagatcacctgaggtcaggag
-tttgagaccagcctggccatggtggtgaagccctgtctctactaaaaacacaaaaattag
-ccaggcatggtggcagggcctgtaatcccagctatttgggaggctaaggaaggagaatca
-cttgagcccagaaggcggaggttgcaatgagctgagatcatgcctctgcactctagccta
-ggtgacagagccagactctttctcaaaagaaaaaaaaaaagagccagtgtgcagtttaac
-cgtctctcatctctctgccaaggtgattgtggaagcactgttgacatagagcctctgtca
-gcctgaagccccgagtgaccatgaaagcagggtcattcttttgacctaaaatagacatct
-agcactgccagaaataaccttttgggaagttactctatgagagctgaggtttgtttttta
-ttTTGttttatatatattttttaaatCAGGAATAACTTAGACCAGGGTGAACAAACTACT
-GCTGTCAGGGCAAATCCAGCCCATAGCCTGCTTTTGGAAATAAATTTGTATTAGAacaca
-cacacacacacacacacacacacacacacacacacatacacacatacacacaAATATATC
-TTCACTAATGTTCTTTTTTTCTTGTTTTTCAAAAACTtttacataccataaaattcacct
-gttttaagtgcacaatttagtgTCATTTCTATTTTTTATTTTCGgtatgcttttcttttt
-gtaactttgttaggtgcatgtttatctttataaaagaaaagccttccttcttttcaaata
-tgagagtttaaagttgtaagtttctctctatacacagcctgagcaccatcccacaaattt
-tcaatatagagtatgttcattgttacattataaaccttctcatttctcttAAACCATGAG
-CATATAAATAACATATAGATTATATAAAGACTATGGATACAAATGTTAATCATGCAATTT
-TGTCAACTAGTTATAATTACATATACAGTAACATTACTTTGGTGATATGTAAACCAAAAT
-GTAAACAAAACTTGAAAGCAAACAGAAAATATCATATGCAAAAACTTGTACACACTTGTT
-CTTCATACAGTTTGTTTTCAAATATGATCTTCTATCTTGTTATAGGTTTTCTATGGCTTT
-AAACTGACATTTATTTTTCATTTATATTGTCCTCTGTTATGATTCTTCCAGTCCTGAACT
-TCCTGCATCAGTAATTTTTAAAGATATTTTTGGTTTACAGAAGTTTACCAATTATTACCA
-TAATTTATCATCAATTTATTAACTCTCACCATCATTTCAAAAGTGAAAGAAATTTCACTA
-CCTAAAAATATGTATGTATGACATTTTAGAAGAAAACAGACTTTTAACTAAATGCATTCA
-TGTCTCTTAAAATTTAGTTCTATCATTTTAATTTTTTTCATTTTATTACAGACCAGTTTA
-AACTTTGTCAGAACCCCATTAGGGCCCATGTATCCATTTAACAACAAAATTCTGTAATTC
-TTAAATTCTCAAATTCATAATTTATATAACCACTGATACCCAATTGGTAGTAGTCTTCTG
-AGGAATGTTTCTATTCCATTATTCCTTGTCTTCTCTAATCACTCTCTGAATCTAAACTTC
-TCTTTAGTTTTTTTTCCCTATAATTAGATGTTGAGGTGTTTGGCTTACTTATCTTCTTTA
-TTAGAATAAATAATATGTATCCCATCCCTAATGATTAGCACTTTGTCAATTTTTATATGT
-TTATGACAGGTGGACTCACTCTTATTCTAAACTCTGATATTAGTGATATCCAATGCCCCA
-TTCAGAGACCATTAAATTAAAAATGCACTTATTACTTCTGGGACTTTCTAGACAATTTCC
-TTCATCTTTAAAAGATCTGGGACAAACACCACAAGCTTTGTCCCACATGAAAGTTCTCTG
-CCCAAGTAATGAAGCATCTAAAAATGCTAGTAaagatattagattttaatataacacatc
-aataattatatttaatataaatgatctaaatcaggggtccccaccccccaggccatggac
-cggtataggtttgtggcctgttaggaactgggccacagagcaggaggtgagcagcagtgg
-gagtgagcattaccacctgagctctgcctcctgtcagatcagctgtggcattagattctc
-ataggagtttgaaccttattgtgaactgcacatgcaaaggatctttgcgtgctccttatg
-agaatctaatgcctgatgatccaaagtggaacagtttcatcctgaaaccatcttcccatc
-cctgccagtttatggaaaaattgactgcattaaaccggtccctggtgccaaaaaggctgg
-ggaccactgatctaaatacaccaataaaaagaaaaagattgtaagattggattttaaaag
-acctgactctatactgaccacaaaaaaAAACCCTCACTTTATTCTTTattgcatatattt
-atggtgtacaacatgatgttttgatacatgttgtgaaatggttaatatagtcaggcaaat
-caacacgttcatcatctcacatagtttccctttgtgtgtgtgtcgcaagagcacactact
-tttttaacaaaaattccaagtaaaatataatattatcatagacctcacgttgtacattag
-acctctagacttttttaatcttacgtatctgcaattttttatcctttgacctacatctct
-ccatttccttcccctccaaccacacccctggtaacgaccacattattctctatctccttg
-tattcagctttccttttttttcttttaagattccatgtataagtgaaatagtgcagtatt
-tttctttctgtgtcagtttatttcatttagcataatgttcttcatgttcattcatgcctt
-ggcaaatggcaggatctcctttttgaagagtaaataatattccattgtgtgtgtgtgtca
-cagtttatccattcatctatcaacagttcacttgtttcaaaattttgactattgtgaata
-atgctgcaataaatatgaaagtacagatacctctatgaagttaagtggtgatttcatttc
-atttttttttttaaagacagggtgtcacagtgttactctgtagcccaggctggaatgcag
-tggtgcaatcatagctcactgtaaatctcaaactcctaggctcaaggaatcctgcctcag
-tctcctgagtagctgggactacagacacacaccatgcttagtcaatgttttttaggtaca
-gggtcttgctgtgtagcccaggctgggctcaaagtcctgacctcaagcaatcctcctgct
-ttgacttcccaaattaccgggattacaagcatgaaccacctcactcagcctggtagttct
-atttctaattcctttagaagccttcatactgactccacaatggctacatctgtctacatt
-cccaccaagaatgtacaaaggttcccttttctccacaccctcattaacaattgttatatc
-ttgtctttttggtaatagttatactaacaggcatgaggtgatgtctcattgtggttttga
-tttacatttccctaatgattagtgattttgagccccttttcacatacttcttggccattg
-ttatgtcttctttggagaaatgtcttttcaagtctttgtccatttttttaattgggtttg
-gtttttttttactgctactgagctgtatgagttctttatatattttatatattaatccct
-tatcagatatatttaatataaaGACAAAGAAAAGCTATAAGACTTTATATCTTAAaaagc
-tggagtggctatattaatattgaacaaaatagatttcaaaacaagaaatactaccaggga
-tcaagacgcacagaaagaagtcaattcaccatgaaaatataacaatactaaatgtgcatg
-caactaacaatagaacttcaaaataaaagcttgtagaactaaaaaagagaaatagagaaa
-tcttcacctacaactggagatttTTAgactgacattagcaagatggcagaataggaggtt
-ccaagcatccctcctctcaacagaaaattcaactggcagatatccatgacaagagcactt
-tggtaaaaatcccaaaacttggaaataagccaaagacacccatgttgaccacagaactga
-ataaaaaccacattagaagggggaagagaaaaggtctcactttgaccaggccacccctcc
-tccactccctcgcccaagttggcacaccactatgcagacaggattgccctaggcctacag
-tttctccagtgggaaaagaaaactaaagatgaacattcagcttccttagccattcctgga
-atattctcagaaagcccatttcagtctcagttcacagggaaagcaggggataacggtgtg
-gttagatcacctgggttcagatagaaaaaaagaaaagggggcattgctcacagtgaccag
-tatgaagatactgttggtagctctgtgtcactgccagcagaggtaccagccaacagcata
-agccacctgcaaagccaagctggtcactcccagaagcacagtggaaatttccatctggct
-tgagtccctagatggccagcctccacagccagcctcaaatccctccccaaggccccacgc
-agaaatggagatacctgcaacaaagcatttcaaacaaaagaaacaactgagacttgtgcc
-ccagggcatttaaacagtggctcagactcaaagctcactcaaggagggagatgcccacca
-cagcacctttcagcaaagcccagaggctggactagccacacccagaagtataaatggtgg
-ctcacctcagcctcaaagcccaccccaagtctctgcctaggcaagggggcaagcctcaac
-catgcatttcaacaaagcatagcagctggtcccaactaccctgaacaaaacctatctaac
-ctcaggacccaaacagtggtagtgcccggccGGGGAAAATACCATGTCTGTTAAGGGTTC
-TTACCATGATTTTAAAAAAGAAAGaaaacctatacacagacattcccaacagctttattc
-ataattgccagaaattgaatacaatctgaatatccttcactgtgtggcttttaaaaaatc
-gcatttatagtacatccatagcatggaatattacttagcaataaaaagaaacaaagtatt
-catacaagttggagggatcttcaaggaacactaagagtaaaaatgccaatttaaaaagat
-tacatatctatgattccatttatatggcattcttgaaatgacaaaattatagagctagag
-aacagattcctgtttacccagggttagggaaggagggagaaggctctcactggaaaaggg
-tagcacaaggagtctatgtgataaactgttttgtgtcttgactgtaatggtggtcacaaa
-aatcaaagcatgtcataaaattgtgtaaaactaaatacatacctacatgcacacacacaa
-acaaatgactacatacatgtaaaactgatgacatctgattaagaccaatggagtatatca
-atgtcaatttcctgattatagttaaacaagatgtaaccattggagggaaaaggtatatgg
-gatttctctgcatgtaggtaagtctaaacatatctcaaaatTATTTTAAATGTCAACTTT
-TAGGAACAGCTGATATTTTCTCTGTATTTATCCTAAATCACTAAGGCTTTCACAAGATCT
-CTGCTCCAAAGACCACCATATTTCTTTTTAAATGACATATCTATTGTGAAATGCATTTAT
-GATAGTCAGTATTCTCATGCTGTGGAAATATACTTTAAAAAGAATATAGTCTTTATCCTA
-TACTGAAGCTCTTGTCCCATCCTGTCCTTTTCAAACACTCAGCAGTTCAATTGAGCTTTA
-CAACTTCCATGCACTTCACAAAAAGAAATAAAATAGTGGAGGCTACGCTGATCTCAGCTG
-GTTTTCATATATTTGGGGGTCAGAtggctatagactgatataagctagcctctgctggga
-caactgggttcttctccaaaatgtctctcttgtccttcctgcagactagactggtcttgt
-tcacctgactgaggcagggttccaatggagaaggcaaaggcacacaggccttttgaggca
-taggcttggaaatagcacaatttcatttgtgccatattctCTCTTTTTATGACTTTATTA
-TTTGAATTTGTATATTGCACAAGACTTCCTATTGTTCAGATTTCATTTGCTTTCTTTCTC
-TTGTATTTTAACATCCTTCACAATTCTCACATCATTATTAAAAGTTGCACTTAACCTAGT
-AATAGATAAGCATTAGCTGAAATTAGTAATTGCTTAACTTCTATCCTACACTACTTTATC
-ACATACTAGTGTGTCATGTTTCATAGTATAGGAACAAAGTAATCTTGCACGATGATATCT
-CTGATGCATACCACTATATTTTTGCTCATGGAATGACAGCAAAATTAATTTTTCTGCTGC
-CAAACTAATATTCAGCCAATCTTTTATTCATCAAATCTAACTACTTAGACCAGGGGCAGT
-TTCCTTTAGAGTTAGACTGTAATTTGTGTACTAATTTTTTTTTGGTTTTTTGTTTGTTTG
-CTTGTTTTGCTAAGGGAAAAATTTATTTTCCTGATGTAtttattattttttagcttttat
-tttagttttagttttaggaatacatgtgcaagtttgttatataggtaaattgcatgtcat
-gggtgtttggtgttcacattcttttgtcagccagataaCCATATTCTCTCTTTTAACGCC
-TATTTaaaattatatatttttaagctatacaatgtgatgttttgatatacatatgcatAT
-TTAAGCTATACAATGTCATGTTTTGTTGTACATATGCATATTTAAGCTATACAATGTCAT
-GTTTTGATGTACATATGCatatttaagctatacaatgtcatgttttgatgtacatatgca
-tcttgaaatgaatactatagtcaggctaattaacatatcagtctcttcacgtagttacca
-ttgtgtgtgtgacaagaatgcttaagatctactctgatagtaaatttcaactatataata
-cagtattatCTCTTTTTTAttttttacttttatttgtttatttttttgagacagagtctc
-tctgtgtctcccaggctggagtgcggtggcgccatctcggctcactgcaagctctggctc
-ccaggttcacgccattctcctgcctcagcctcctgagcagctgggactacaggtgcccac
-caccacgcctggctagtttttttgtatttttagtagagacggggtttcactgtgttagcc
-aggatggtctcgatctcctgacctcgtgatccgcccacctcggcctcccaaagtgctggg
-attacaggcgtgagccaccacgcccagcctttatttatttatttattttgagatagagtc
-tcgctctgtggcccaggctggagtgcagtggcagcatctcagctcactgaaatctctgcc
-tcccaggttcaagcaattctcctgcctcaacctcccaagtagctgggactacaggcaccc
-tccaccacacccagctaatttttttatttttcatagagacggggttttgccatgtcggcc
-aggctggtcttgaactcctgacctgaagtgatccacctgcctcggcctcccaaagtgctg
-ggattacaggcatgtgccaccatgcctggctGatttttgtatttttagtagagacggggt
-ttcaccatgttggacaggctggtctcgaactcctgacctcaagtgatctgcttgcctcag
-cctcccaaagtcctgggattacaggcgtgaaccactgcttccggccacagtattatcaac
-tgaggtccccatgctgtgcattagatctcaaaaacttaatcatcctacaatactggaacg
-tactctttgaccaacatcttttgattctgccaccattgcttctgataatcactattctct
-ctccttctatgaatttgacttttcaagattctacatgtaagtgatatcatgcagtatttt
-tcttcctgtgcctggcttattttacttagtataatgtcctccaggttcatgcacattgca
-caaacgacaggatttctttgttttaagactgaataatatttcatATtggatacaacctaa
-gtgttcaacagatgaatggataaacaaattgtggtatatacCACCTGTTCTCCCTTGTAA
-GTGGAAGCTAAAtgtcaggcctctgagccgaagctaagccatcacatcccttgtgacctg
-cacctatacgcctacatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggcc
-tgttcttgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgc
-cttaactgatgacattaccttgtgaaatcccttttcctggctcatcttggctcaaaaagc
-tcccccactgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttga
-ctgtaattttcctttacctacccaaatcttataaaacggccccacctctatctcccttca
-ctgactctgttttcggactcagcctgcctgcacccaggtgaaataaacagccttgttgct
-cacacaaagcctgtttggtggtctcttcacacggacgcgagtgaAATtttggtgccgtga
-ctcggatcaggggacctcccttgagagatcaatcccctgtcctcctgctctttgctccct
-gagaaagatccacctacgacctcaggtcctcagactgaccagcccaaggaacatgacacc
-aattttaaatcaggtaagcggcctttttgtactctcttcttcaatctcactatccctcaa
-cctctttctcctttcaatcttggcgccacacttcaatctctcccttctcttaatttcagt
-tcctttccttttctcctagggacaggagacgcattttatccgtgaacccaaaactccggc
-gtgggtcacggactcagcaaggcagacttcccttggtgtttaatcattgcgggaatgcct
-ctctgaatattcacccacatttcagaggtgtctgaccacatggggacgcctgccttggtc
-cttcacccttagcagcaagtaccgcttttctagggagcaaacaccccccaccccttctct
-ccatgtctctactctctcttttctctgggcttgcctccttcactatgggcagccttccac
-cctccattcctccttcttctcccttagcctgtgttttcaagaacttaaaacctcttcaac
-tcacacctgacctaaacctaaatgccttattttcttctacaatgccgcttgacctcagta
-caaactcgacagtggttccaaatagccagaaaacagcacttttggtttttccatcctaca
-agatctagataattcttttcataaaataggcaaacggtcggaggtgtttgacatccaggc
-attcttttacacattgttccctccctagtctctgttcccaatgtgtctcgtcccacatcc
-tccttctttccctcccacctgtcctctcagtcccaatcccaagcattgctgagtctttct
-aatcttcgttttctgcagacccctctgacctcttacctcctccccaggctgctcctcgcc
-aggccgagccaggtcccaattcttcctcagcctctgctcctccaccctataatcctttta
-tcacctcccctcctcacacctgctagccctaccccacttgcccagcaatttcctcttaaa
-aaggtggttggagctaaaggcatagtcatggttaatgctcctttttctctatccgaactc
-tcccaaaatcagttagcgtttaggttctttttcatcaaatatgaaaaacccagcccagtt
-catggctcattcggcagcaaccctgagatgctttacagccctagaccctaaaaggtcaaa
-aggccgtcttatcctcaatatacattttattgcccaatctgccccgacattaaataaaac
-tccaaaaagtaaattccagccctcaaaccccacaacaggacttaattaacctcgccttca
-aggtgtacaataatagagtagaggcagccaagtagcaatgtatttctgagttgcaattcc
-ttgcctccactgtgagacaatccccagccacatctccagcacacaagaactccaaacgcc
-tgaaccgcagctgccaggagttcctccagaacctcctcccccaaagtccgtccccttctt
-aatcaatacggaagctacccactccacattaccttcttttcaagggcttgtttcccttgc
-ctccataactgttgtaggtattgacggccaggcttctaaacctcttaaaaactccccaac
-tctggtgccaacttagacaacattcttttatgcactcttttttagttatgcccatctgcc
-gaattctcttattaggccaagatattttaagtaaattatctgcttccctgactgttcctg
-gactacagccacacctcattgctgcccttttccccagttcaaagcctccttcgcatcctc
-ctctcatatccccccaccttacccacaagtataagatacctctactccctccttggtgac
-tgatcatgcaccccttaccatcccattaaaacctaatcacccttaccccattcaatgcca
-atatcccatcccacagcacgctttaaaaagattaaagcctgttatcacttgcctgttaca
-gcatggccttttaaagcctataaactctccttacaattcccccattttacctgtcctaaa
-accggacaaggcttacaggttagttcaggatctgcaccttatccaccaaattattttgcc
-tatccaccccgtggtgccaaacccatatactctcctatcctcaatacctccctccacaac
-ccattattctgttctggatctcaaacatgctttctttactattcctttgcaccctacatc
-ccagcctctcttcgctttcacttggactgaccctgacacccattaggctcagcaaattac
-ctgggctgtactgccgcaagccttcacagacagcccccattacttcagtcaagcccaaat
-ttcatcctcatctgttacccatctcggcataattctcataaaaacacaggtgctctccct
-gctgatcgtgtccgactaatctcccaaaccccaatcccttctacaaaacaacaactccct
-tccttctaggcatggttagtgcagtcagaattcttacacaagagccaggaacatgccctg
-tagcctttctgtccaaacaacttgaccttactcttttagcctggctctcatgtctgcgtg
-cagcggctgccgccgccctaatacttttagaggccctcaaaatcacaaactatgctcaac
-tcactctctacagttctcataacttccaaaatctattttcttcctcatacctgacacata
-tactttctgctccccagctccttcagctgtactcactcttttttgagtctcccacaatta
-cccttgttcctggctcagacttcaatccggcctcccacgttattctggataccacacctg
-accctcatgactgtatctctctgatccacctgacgtacaccgcatttcccccattatttc
-cctcttccctgttcctcaccctgatcacatttagtttattgatggcagttccactaggcc
-taatcgctacacaccagcaaaggcaggctatgctatAGtacaagccaccagcccacctct
-tagaacctctcatttcctttccatcatggaaatctgtcctcaaggaaataacttctcagt
-gttccatctgctattctactactcctcagggattattcaggccccctcccttccctacac
-atcaagctcagggattttcccctgcccaggactggcaactcttaactccctcttagagtg
-gatagatgctctttgctggcaggggaccctccaatcttttcaccctgatgaagttctatt
-ctttacttttatactcactcttattctcattcccattcttatgccaccctctacctctcc
-ccagctatctccaccacactatcaaccttacccattctctcctagccgtttctaatccct
-ccttagtgaacaaccgctggctttgcatttccctttcttccagcacctacacagttgtcc
-ccaccttacatgcagactaggcaacatctcctatctccttacacctccaaacttccttta
-acagccctcacctttaccctcctgaagaactcatttactttctagacaggtccagcaaca
-cctcctgagacatctcacatcagcaagctgccgccctcctccgcacttaattaaaaaacc
-tttctccttatatcaactctactcccccaatatttggacctctcacaacacaaactacta
-ttcctgtggccgctcctttatgtatctctcggcaaagacccactggaattcccctaggta
-acctttcaccttctcgatgttcctttattcttcatctccaaagcccaactacacacatca
-ctgaaacaataggagccttccagctacatattacagacaagccctctatcaatactggca
-aacttaaaaacattagctgtaattattgcttaggaagacacttaccctgtatttcactcc
-atctttggctgccttccccttgctcatcagactctcctcccaggccctcttcttgtttac
-ttatacccagccctgtaaataacagtgaaagtttgcttgtagacacttgacgttttctca
-tacaccatgaaaatcaaacctccccctctatgcagttaccccatcagtccccattacaac
-ctctgatggctgccaccccagctggatccctaagagtctaggtacaagacactcctttca
-gcattccttctcatctttttactttgcatctccggttttgcctcacacaaggtctcttct
-tcctctgtggatcctctacctacatgtgtctacctgctaattggacaggcacatgcacac
-tagttttccttactcccaaaattcaatttgcaaatgggaccgaagagctccctgttcccc
-tcacgacactgacacgacaaaaaagagttattccactaattcccttgcttgtcggtttag
-gactttctgcctccactattgctctcagtactagaatagcaggcatttcaacctctgtca
-cgaccttccatagcctgtctaatgacttctctgctagcaccacagacatatcacaaactt
-tatcagtcctccaggcccaagttgactctttagctgcagttgtcctccaaaaccaccgag
-gccttgacttactcactgctgaaaaaggaggactctgtatattcttaaatgaagagtgtt
-gtttttatgtaaatcaatctggcctggtatatgacaacataaaaaaactcaagaatagag
-cccaaaaacttgccagccaagcaagtaattacactgaacccccttgggcactctctaatt
-agacgtcctgggtcctcccaattcttagtcctttaatacctatttttctccttcttttat
-tcagaccttgtatcttccatttagtttctcagttcatccaaaaccgtatccaggccctca
-ccaatcattctatacgacaaatgtttcttctaacaaccccacaatatcaccccttaccac
-aaaatcttccttcagctcaatctctcccactctaggttccatgacccaatcctgctcaaa
-gcagccctgagaaacatcacccattatctctccatgccagccccccaccaaaaatatttt
-tttcgctgccccaacacttcaatactattttatgttatttttcttattaatataagaagg
-caggaatgtcagacctctgagccgaagctaaaccatcgcatcccctgtgacctgcatgta
-tatgcccagatggcctgaagtaactgaagaatcaccaaagaagtgaaagtggcctgttaa
-tgccttaactgatgacattccaccacaaaagaagtgaaaatggctggtccttgccttaac
-tgatgacattaccttgtgaaatcctttctcctggctcatcctggctcaaaaagctccccc
-actgagcaccttgtgacccccactcctgcctgccagagaacaactcccctttgactgtaa
-ttttcctttacctacccaaatcttataaaatggccccacccctatctcccttcactgact
-ctcttttcggactcagcccgcctgcacccaggtgaaatagccttgttgctcacacaaagc
-ctgtttggtggtctcttcacatggatgtgagtgaAATTaatattaggtacacacagacat
-aaagatgggaaaaatagacagtgaagattttaaaggggataaggaagggagaggagcaaa
-tgttgaaaaactatctattctgtactatgtttgctacttgggtgacagggtcattagaag
-cccaaacctcagcatcacacaataagcccatgtaacaaatctgtacatttatcccctgaa
-tctaGATTTTAAAATAAggctgggtgtggtggctcacacctgtaatccaaacactttggg
-aggctgaggcaggaggattgcttgagcccaggagttcaagaccagcctgggcaacataga
-ccttgtctctacaaaaaataaacaaaatcagcaaaatgtggaggtgcgcctgtagtccca
-gctgctcaggagactgaggcaggaagattacttgagcccaggagctcaaggttgcagtga
-gctgagatcgtgccactgtactccagcctaggctaccaagtgagattttgtctcaaagaa
-aataagataaaaTTTTTTCTTACATTGTGATATATATGCACAATGGaattttcaaatata
-tagtatattatcactaactgtagccaccatgatgtaaatagagctcttgaattttttttt
-tcttcttttgaaaacagagttttgctcttgttgctctggccagagtccaatggtgcgatc
-ttggctcattgcaacctctgcctccccagttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattacaggcacatgccaccacgcctggctaatttttgcatttttagtcaag
-gcggggtttcaccatgttggccagactggtcccaaactcctgacctcaggtgatctgcct
-gcctcagtgtcccaaagtgctaggattataagcatgagccaccgtgcctgaactctcttg
-agcttatttttcctgtctaagtgatttccccacccctagcctctgataactaccatttta
-ctctttgtttctatgaattcaacttttttacactctacatagaagtgagatcatgtcttt
-ctgtgcctggtttatttcatttagcttactgtcctccaggttcatccatgttgttgcaaa
-tgacagaatttacttcttttttaaagctgaaaagtattccattgtgattatgtaccacca
-ttttctttattaattcatctattaatgggcacttaagttgattccatgccttggttattg
-tgaataatgctgaaattaacatgaaagtgcagatatcttttcaacatgctgattttattt
-ccattagctatatacccagtaatgggattgctggatcatatagtagttttcattttaatt
-ttttaaggaacttccatacagttttccataatagctatactaatttttattcccaccaac
-agtgtgcaagggttcccatttctccacatcctttccaacacttattctctttcatagtat
-attttgaagtcaggtagtgtgatgccttcagctttgttctttttgctcaagattgttttg
-gctattcaaaatcttttgtggttcaatccaaattttaagatttttttctgtttcagtaaa
-aaatgtctttggaattttgatagggattgcattaaatctatagaccactttgggtactac
-agatattttaacaatattaattttttactttcatgaacatgggatatctttccatctgtg
-tcttcttcaatttcttccatcaaagttttatacattttagtgtagaggccttttacctct
-ttgttaaatttattcctaagtatttttgtagctattgtaaaaggatcatttacttgattc
-acttctcaggtgttcttgttagtattcagaaaagctgctgatttttgtatgttgaattta
-tatcctgccactttactgaattcatttattagttctaatagttatttggcaaagtcttca
-ggattttctgtatatacgattatgtcatctgcaaaaagaaacaatttcacttcttccttc
-ccattttaatgctctttttattgcattttcttgcctaattaatctggctagaatttccag
-tactacattgatagaagtggcaaaagtgggcattattttgttctttatcttaaagaaaaa
-gcttttgactgttcaccattgagtatgatgttaaatggggcttgtcatatatgatcttta
-ttgtgttgagatcattctttctgtatctaatttgttgagttttatcacaaaaggacgctg
-aatgttgtcaagtgttttttctgcatctgttgagatgatcatatggtttttacccatcac
-tctgttaatgtagataaatctcacttgatcatggtgaataatccatttaaagtattgttg
-aattcaatttgctagtattttcttgaggtttttgtatctctgttctagggacatcgacct
-ataacttttttttcttgtatgcccttgctctggctttattataagggtactgctACccca
-gcatgatttccaaatggctatgaaccagtgactgctgtgtacaaccaacttttcctcctt
-tcaaatgggagtgttgtggttatAACATTATAAAACAAATCTTGCAAagttagatagaag
-gcatcagttctagtgtttgatagcacagcagagtggctattgttaacaacaatttattgt
-atatttcaaaatagctaaaagagaagttttgaaatgttcccaacacaaagaaaggacaaa
-tgtccaaggtgctggatatcctaaataatctgacttgattattacacattatatgcatgt
-atcaaaatatcacatgtgcccagaaatatgtacaaatactatgtatcaataaaaaaGttt
-ttaaaaaataaatattacatataatatatgaattatataataaaactagaatataatata
-aaaaggaaaaaatatatgtaaaataaatCTTCATaataaaataaaataaaataaTTTGAA
-AGAGTCTATGAATAAGATTTTGGAGACTACTCTAAGACAGATGCAAGAGCAGGTACCAAT
-AATTCTGTCTGTACCAAAAGAGTGAATAATAAAAATATACAATTTCAACTTAATTTTGCA
-TAAAAAAAAGTGAACAAATAAACATGCATCTAACAATACTGACCACATCCACGTCTTCTA
-TGAGTATGGAGGGGATAAAAGAATAAAAGAAAAAAGTCAAAGCGAAGATTAGATCCCCCC
-AGTCAGAGCAGAATTCAAGGGTTAATTTATCTGTTCAATTAAGTATATCCCTCACCCCCA
-ACTCAGAAGACACTTCTCTGATTTATCTGACACTAAGCCAAAATGGATTCTCTTATCTAA
-TTTATCAGTAGAATCATATAGAGTAGAGGACACATGTAGATTAAAGACAGTGAGCCAGAC
-CCATCTTCACTGTCACAGTGACAGAATGGACCCTCCTTTAAAATACCCCTGGTGACATTG
-TAATGAAAGACTAAAAAAGAAAGGGGCTTATAAAGTGCTGCAGTGAAAAAAAGGGCTTCT
-TATGTGAGCCTTACTTTTAAAGTTCCCTAAGAATTAGGTTGAAAAAGGTCATACATTGAC
-TTTCATAGTGCTGAAATCATCAACAAAAATTTCTAAAATTCTGCAAAGTCCAGTCACTGT
-TACCTGTGCACTTCTCCAGAATTTTCAAAAGCCAAACTACTAAAAGGAAGGTTCTTGTAT
-GCTCTTGAAACTTTAATATATCCAGCTAAATATTTTTCTCCTTCCTCCCCCTGAAACAAG
-GTGGTGAGCTGCTCATGGAGTAATAAGGTTCATTGATTTCTTTATCTCACATGAGTAAAT
-ATTAGCTCTACAAAAGTTATTTATGACCAGTGCCTTAAATTAAGCAGCATCAACAAATGT
-CACCACAAAATTTCTCTTCTGTTCATCTGGACAGCATTTTCTACCATCATGACCTACTAC
-AATTTCATCTATCTCATGAGGAGCTTCTTAAGTACGTCCCCCTCATTTATAAGACTTTAA
-ATTTCATACTGAAACAAATGATATGCAATGCTTTTAGAGATCTTAAGATAATCTTTGTCT
-AAAAATTCTGTCAACTAGATGTTCAAATTGCTACTGAAAATGGAGATGGAACACATACAT
-TAAATGATTCAAATGATATATCGGAATTACCAGTAGCTGTCATGTTTGCCCATCAGATCT
-GCCCTCAAAAAAGTGTTATGAAAATATTCAAACATTTTTTCTCCCTCTAACTAATTCCTA
-GCTGTTAGCAGAACCCTCTGTacacacacacacacacacacGGCATTCAGATCTAATTAG
-ACAAAAGAAATTTCATTTGTGAAACAGGAGAAATACCTGAAATTCTGTGAAATATTGTCT
-CGCATAGAAAATGGAGTTGttacaagccaggagagattgggtgcctattttcaaccttct
-taaagacaagaaattccaaccaagaatttcatatcctgtcaaattaagattaataaatga
-aagagaaataaaatcttttccagacactccagtactaagagaaatccttattattaaagg
-cagtcttacaagagacccttcagggagttctaaatatggaaacaaaggaacgatatttgc
-atttacaaaaacatacttaagtacgtggcccacagaccctaataagcaaccacacaatag
-aaactacaaagcaaccagctaacaactccatgataggatcaaaacctcacatattaacat
-taaccttgaatatgaacactctaaatgctccacttaagaggcacagagtagcaagttgga
-aaagaaaagaaaagaaaagaaaagaaaactcatctgtctgcagtcttcaagagaccaata
-tcacatatatgacacccataggctcaaagtaaatggttggagaaagatctaccacataaa
-caaaaaacagaaaaagaggaggggtcattattcttagataaaacaaactttaaaccaaca
-actacttagaaagataaaaaagggcattacgtgacaataaagggttaaattcaataagaa
-gacttaactatcctaaatatatatgcacccaatattggagcatctagattcattaaaaaa
-actacttctagacctatgaaaagacttagccacatgattatattgggggacttcaacacc
-ccactgacagcattagatagatgattgaggcagaaaactaacaaagaaatcctggactta
-aacttgacacttgaccaattcaacttaatagacatctacagaatattccatccatcaacc
-acagaatatatattcttcacatctgcacatggaacagactccaagattgaccacatgcta
-ggccatggaataactatcaacaaattcaaaataccaaaataatgccaaccaaactctcag
-accacactggaaaaaaatagaaatcaataccaagaaccttcaaaaccacacaattacatg
-aaaattaaacaacttgctcctaaaccacttttggataaacaacaaaatgaaggcagaaat
-ttaaaaattcattgaaataaatgaaaacagagacatagcataccaaaatatctgggatgc
-agtgaaaacagtgttagaaagaaagtttatagcactaaacactgaccttgaaaagctaga
-aagatctcaaattaatgatattacgtcacacctacaggaactagaaaaacagaaacaaac
-taaccaccaagctagcagaagaaaaaaaataactaaaatcagtgtagaactgaatgaaat
-tgaggctcaaaaatccatacaaagacacagtgacattacaagtttgtttttttaagggat
-aaacgagatcaatagaccactattttttgttagtagattaacaaaagaagtgagaagatc
-caaataagcacaaatagaaacaacaaaagtgacattacaacagatcccacagaaatatga
-aagagactattatgagcacctctatgcacacaaactagaaaatctagaggaagtggataa
-attcctggaaacatacaatctcccaagattaaaccagaaagaaactgaaaccctgaacag
-accaataacaggttccaaaattgagtcatcaattaaaaacctattaactaaaaaaggccc
-tgaaccagatggattcacagcccaattttactagacataccaattctactaaaactattt
-caaaaaagcaagaagaaagatacctccctaactcattctacaaagtaggcatcaccctgg
-taccaaaacctggcaaagacacaacaaaaaaagaaaactacaggccaatatccctgatga
-aaaaaatgcagaaatccttaagaaatactagcaaactgaatcaaagaatactaaaaaaag
-acagttaattcgccatgagcaaacagacctccctcttgggatgcaaggttggttcaacat
-atgcaaatgaacaagtgtgattcaccatataaacagaattaaaaacaaaaaccatatgat
-catctcaataaatgcagcaaaccttttgataaacccaacatcccttcatttaaaaacccc
-tcaacaaactaggcatcgtaggagcatactcaaaaataataagagcccctatgacaaacc
-cacagccagcatcatgctgaatgggcaaaaactgaaagcatttcccttgagaactgggaa
-tgctttctggaacattccagttttctggaacattcccaggaatgcccactctcaccactc
-agattcagcctattactggaagtgcttgccagagcaatcaggcaagaggaagaaataaaa
-ggcatccaaataggaaaagaagaagtcaagctatctttcttcattgacagcagattatat
-gcctagaaaaccttaaagcctccaccaaaagactcctggaactgataaacgacttcagta
-aagtgtcaggatacaaaagtcaaagtataaaaattaacagcatttctatacaccaataat
-gttcaagctgagagtcaaatcaagaatgcaatcccattttcaataaccacacactcaaaa
-aaaaagcctaggatttttttctaactaagaaggtgaaagatctcttcagattcagggaga
-attataaaacattgctttaaaaaattatagatgtcacaagcaaatggaaaaacattccat
-gcccatgggttggaaaaatcaatatcatttcaacagtcattctgcccaaagcaatctaca
-gattcaatgttattcctatcaaactaccaaagccatttttcacagaattagaaacaacta
-tcctgagttcttatggagccaaaaaaagagcctgaataggcaaaacaattctaagcaaaa
-agaacaaagccagaggcatctaattacccatctcaaactacacgataaggttacagtaac
-tgaaacagcataatactgatacaaaaacagacatatagaccactggaacagaataaagaa
-tccaaaaataaagctgcatgcctacagccatctgatctttgacaaagtcaacaaaaatac
-gcaatgggaaaagggctccttattcaataaatggtgctgggatagctggcaagccacata
-tagaagaataaaactggacccctcctctcaccatataaaaaattaactcaagctggatta
-aagatagaaatgtaagaactcaaattacaagaatcctagaagacaacctagaaacaccat
-tctggacataggtcttgggaaataatttatgactaagtcctcaaatcaattgcaacaaaa
-acaaaaattgacaagtgggacctagttaaactaaagagcttctgcacagcaaaagaaact
-atcaacagagtaaaaagacaacatacaatggtagaaaatatcacaaactatgcctctgac
-aaaggtctaatatcaagcatctataaggaacttaattcaacaagcaaaaagaaaatagcc
-ccattaaaaagtgcgcacaagacatgaacagacacctctaaaaagaacacgtacaagtgg
-gcaacaaatatatgaaaaaatgttcagcatcactgaacaccagagcaatgcaaatcaaaa
-tcacaatgagataacctctttacaccacttagagtagctattactaaaaaatcaaaaaac
-aacagatgctggcaaggccgcagagaaaagggaatgcttatacactgttagtggaaatgt
-aaatttgttcagccactatggaaagatgtttggagacttctcaaagaacttaaaacataa
-ttaccattcaactcagcaatcccattactgggtatatatccaaaagaaaataaattgttc
-taccaaaaagatgtatgcacgtgtatgttgatcgcagcactattcataatagcaaagaca
-tggaatcaacctaggttcccatcaacagtggattggataaagaaaacgtggtacatatac
-acaatggaataccatgctgccataaaaaaataaaattacctcttttgcagcaacatggat
-gcagctggaggccattatcctaagcgaattaacacaggaataggaaacctaataccatat
-gttctcactaataagtgggagctaaacattgggtacacattgacataacgatgggaacaa
-tagacactggggactaatagaagagggaaggaggagaggagaaagggttgaaaaactaac
-tgttgggtactatattcaggacctgagtgatgggatcagttgtaccccaaacctcaacaa
-cacacagtacaccaatgtaacaaatctgcacatgtacccctgaggctaaaataaaagttg
-aaaTTATTTTCTTAAAAATGGAAAGGCTAAATTCCACCTCTACCAATATGTTTACTTAAT
-TTTTATATCCCCCATCTTACTGGTATAAAACCAGGAACATGGCAACCATTCATTTATGTT
-TGAAGTGTTCAAAAAATGAGTGACTACATCAATAAATGTACTCAGAGGAAAGCACAGGAC
-TTTATTATGTGGGGAATCAAGTTCACAGAAGGAAGCAGATGAATCTTTTGCTGCAGGCTG
-CTGGATTAGGCAGCACTTTTTATTTAGGAAGAGTGGAGACCAGCGAGACAAGGGCTAGAT
-TTAGGATTAGACTGTGAAAATGGTGATGGTGGGTAAGATGATGTAATCCTGCAGCACACT
-CAGCTTCTCACCAGAATGTTGATGTGGCTTCTTAAATGACACATGTTTTTTCTCTTCTTC
-ATCATTAGCACAACATAATTTCCCACTTAGACATCCTATTTCATATCTTTCTCCTACCTT
-GCATTTCTTCCTGCAATAGCCTGTTACTTTATTGAAGCATTTTTTGAGTCTTGCCCCGTC
-TGTGCATAGGAAACAACATTGAACCAAGGTTAGTGCGTAAGGAAGAGCAGAAGAGGTAGG
-TATGTGGTTCCCCACAAGTCATGGCCTCCTATGGTCCCAAGTGAACATTATGCTGATAAA
-AGGAAACTCAGAGGCCCCTCCTTGAAAAATATCCCAAATTAAGGACATTCAAAAGCCCAG
-GCTCTCAGCCAATGTCCAGTTGCCTCTGAGAACATTAGAACTGATATGACAAAAGAGAAG
-AGAGAACTCAATTCCTGGTTATCAACCAGAGCCAAGTCCCACCCCTAGGACCATGGCAAA
-GCTGACTCTCTCCACCAAGCTCCAAAGTCAGCACTCTCTCAGCTCCATCTCAGTCTCATG
-TCCCCAGAGACGGCTAACATGTCACCATGTGCACAAGACATGTCACCATTGGCACAACTC
-AGCCAAAGCAACTTTTGAAAGAACATCACAAACAAGACTTTTTAACTTAATTCGGTTTCA
-CACTCACTGATATGGGCAACAGAAATCTCCCTTTGACAAGATCTCATGGGTCTCAGCAAC
-AGGTGCTATTGAGAACTCCTTCCCTTAACCTGGCTCCTCCTGTCTGTCACTCATCACACT
-CCCCTTGATCTCAGATAAATGTGTTGCCCAGGGATCAAATTCAATTCCATGAATTTGGCT
-CTAGAGAGCTACATTGTCACCTTCTCAGAGTAATGCACTGAAATTCTAAGTCTCTTGTTT
-CTAATCCTTATTTGCCCCTCTACCCAAAATTTGAACAAGCCCAAAGAATAAGGTTGGAGA
-AGAGAGACATACTCTCCCTATCCTAAACTTCAGAATCAGGGAACATCTTTGAGGGTTAGA
-GGAGTATATTTTGGGGCCATAAAAATACAATATGCCTTCTTCCTAGCAAGAGAGAAGGTA
-ACTCTCACTGACAGGGCTTCTACGATGAACTTTgtgcttcgtgcttgtaagttcatgtaa
-cctgtacatcaaatagaatcatgaaatatagtaattatactccttcacagatgagaaaat
-tgagattaaaaggaaataatgtgcttaattcatacaacccgtcaatgatgaagacatatt
-ttaacctcacattgacatgactccaaaatgtgtgctattttaattactgtTGTAGTACAG
-GCTGAAAATGAATTTGAATGGAAAAGGGAATGGCCAGGCTCTCAGGTGAAAACTGTGTCC
-AGCATTATAAAGATAATTCTAGATGATGAGTTCATGGATACTTTTGAAAAGGACTCCTGA
-GAGTCCACTATAGCCCTGACCTCCTCTTACCTCCTTGGGTGCCTCTCTTCTAAGGCATAG
-ACTCAAGTCAGGCAACCAGGAGAATGGGTACTTTTTTATGATTTTGGCCAAATATAAATA
-ATCTTGAAAGTCCTGTTCCCACTCTTACAAATAGTAATATCTCTTAGGATGTTATAGTAC
-ATTTGGACAAGTTACCTGTGAGTACCTCAAACAGCAGAATAATGAGAACCAGAAACAGCT
-TCATATTTACAGACTTCCCAAGAGAAAGAGGCAGCAGAACTTTGTCCAGTGGTCTGTGTG
-CCACAGGTCTTTAAAGATGATCCAGAGTTTTGAGAGCTATCAGCGCTCGGAGCTCTCATT
-TTAACCCACACAGACAGAGAGGAATTCCAAGTCCACCCCCGTAACACACACACCTACATC
-CCCAAATATGGAGCTCACAGTCCCAGAATGTTCCACCATATCATCCCTCCTCCCCCTTCC
-TCAGGATATGCGCCCCTAGAGAGCAGGAACTATGACTTTCCGTCTGAGCTTCCAACCCAT
-TTGGGTCAAGGTTGGTTGGTCGTGGGCCTTGGGTTGTGTGGGATAATCCTGTCTTATTCC
-TATTGTTCCAATGTTCCATCCGGCTACTGCTGCCTCTAACAAAACTAACCCAGTTTGGAA
-GATAAATTAAGTCATTAGTCGACACAGAAGCATATTCAACAATAATTTTTTTAATGTATA
-AAGCTTCCAGATAGTCATTCTAGGAGTAAGATTGCTTTTAGGTTTGGCTAGATAAATTGA
-TATTATTTGAGAGTTTCCCATAAAGACTTGTCCATCTAGTAGAGCAAAATTCAACAACTG
-AAAGTTTTCAAAAGATCAAATCTCCTTAGCACAGCACTCAACTTATTATAAACTGGTCTC
-TGCTCTCCTCTCTTGGGACATTTTATGGAACCATCTATGTTTCTCCCAAACTAGTGGGTA
-CACCTTCCTGAACTTTTACTTCCTTAATCTGTTTCTTTTCACATTTAAATCCCTCCTTAC
-AGATTATATTACACTCCCCATCCCCTCCATATAATTGGTGCTAGTGAACTCCTGGTTTTC
-CTTCAAAACCAAGTTCAATCATCTCTATATAAGTGAAAGTTTCCCTGACCCAACTAAACA
-GAGCTGCAAACTCTCTTCTTCGCACCATCACTGTATTTGTACATATTTTTGTTGATGGTC
-ACACTATGTCATGTTCCAATTATTTGTTTATCTGCAATAGTCTGCAGACCCATAAAGGGC
-AGGTCTCTGGTCTTATTAGACTTGGAGttctttttctttttttttttttttttgcagttg
-caagatttaatagagtgaaaatggagctcccatacaaagggaggggacccaaagaggtta
-gccgttgccggctcgaatgcctgggtttatatcccaatcattgtccctcctgctgtgctc
-tcaggcaatagatgattggctatttctttacctcctgtttttgcctaattaccattttag
-tgagctctctttcctacctgattggtcacatgtgagctaagttgcaagccccgtgtttaa
-aggtggatgcggtcaccttcccagctaggcttagggattcttagtcggcctaggaaatcc
-agctagccctgtctctcagtaccccctctcaacaggaaaacccaagtgctgttggggagg
-ttggccgacgaccgctctaactgcttcctcctgaattggggcatagtaggggttgtgcag
-ttgagatttcctcaggaggggtgccttcgatgtcattaacattggagcatgggctagcag
-gccggtccaatggtccacggtagctcttagtcatggacggcatctgtggctccatttgaa
-gaatgatttgtagttttacagctttgattctggaaaagacaaacttaacaaggaggttaa
-agatacagggattgaaatgtatggcctgcagtgcaggggattatttctttggcacacttt
-acaggccctgactatctatttgatagttttgaaaaggcctggtccagtaaataataattt
-agccatctgatagttgctatcaatgcctaagtgaaaggtttggtaaagggttttaagtaa
-tttcaattggttagctgcaggcaaaagtattttttcttctttggtggctagccatcctga
-ggggaggaaagtatgtcctcttgaggttctccattctatttcttctgctgagtactgggg
-cttggtttcctggagggggttaccccacactaggggtccttctataagcatttctaatgg
-agggtcctgtcttgtggctcttttggcttcaacatctgcttggcagttcccttctacttc
-cctttccttttttttttttttttttatgaccccggcagtgtaagactgccacctctttag
-gtttctgtacagccaataataatatcctaatggcttcttgatgtttgataggtgttccct
-tggaagttaggaattccctttctctccatattgctgcatgggcatggagaactaggtaag
-catacttagagcctgtatatatatttaccctttttccttctcctaattctagtgccctag
-tgagggctattagttctgccagctgaacactagttcctggagtgaggggattactttcaa
-gtattccattatcactgaccactgcataccccacttttcgaagtcctttttctacaaagg
-aacttccatcagtacataaggtgaggtcaggatcagtcaagggaacctctaaaggatccc
-cttgagcagcgtaggtttgaacaattacttgctgacagttatgttctatcttttctttat
-tgtctggaagaaatgtggctgggttaagagttgcacaagtgcacagtcgcagcactggcc
-cttcaagtaatagagcctgatatttaagtaaatggttgtctgacagccacaagtctcctt
-tagcagtgagtatgccattcacatcatgagatgtccacacagtaagatctcttccctgta
-ttagtttaactgcttcagatactaagactactactgctgccactacccgtaaacaatgag
-gccaaccctttgccattacatcgatttccttacttaggtatgccacgggttacaagctca
-tccctcagacctgtgtaaggactcctagagctattcctgtttttttctgtgacttataaa
-gaaaagtcttgcccctttgacaagcttaacactggggcttgggttagggccttctttagg
-gcctggaaagctgcttctgcttcaggtatccatcttactaatgggtatttgctttctgag
-tttccttaattgtgtatataatggtctggctatttcgccatacctgggaatccatattct
-gcagaaacctgttacgccaaggaagcttttagttgctttagggttttgggatgaggatca
-gccagtataggctggatatgttcctcactgagggccctggtgcctttggataatttgagc
-cctaagtatttaacctgctgtgagcagagctgagcctttggtttggaaaccttatagcca
-caggtggcgaggaaatttaagagtgcttgggtggcttgattgcacaaggtttctgaacgg
-gcagctaaaattaaatcatccatgtaccaaaggacaagagtgtccaggtatgagaactgg
-ctcaagtcttaggctaatgcctggccaaatagatgggggttatccctgaacccttggggt
-aaaacagtccgggtgagttgagatgttgggttcgaaggatcttcaaaggtaaacaagaat
-tgaaggtcaggatgtacagggatgcagaaaaaggcatccttaatgtccaggactataaac
-cactctgcttcctctggtgtttgggaaagcagagtatacgggttaggtataggtgggtat
-ggagcgacaatggcctcattgataatcctgagatcttgcactaacctccactgtccgctg
-agtttctgtactcctaaaattggagtattgcaggggctattgcatggttttactaggcct
-tgggcttttaggtccttaaaaatattttagagtccttgttgggccttgggtgtaaggggg
-tactgcctttggtagggaaaggaggtgaaatcctttagtttaactcaaacagaatgggca
-ttctttgctcgtccatgttgtccttctgttgcccagacttcaggattaattccttcctca
-agcagggggacaataaacgggtgttctttctcctatgttcaggtgtataatggcccctgc
-tttcgctagaatgtctctccctaacaagggagtggggctttcaggcataattagaaaagc
-atgtgaaaagtataaagttccccagtcacaacttagtggctgggagaagtatctagtgac
-tggctgtcctaggaccccttggatagtgacagatctggaggacagttgtccgggacagga
-cagtaagactgagaaggctgcgccagtgtccaggagacagttagcctcctggctctcaat
-ggtcaagcatacccgggactctgtgagggtgatggcatgggctggagcttgccctgggca
-ccctcagtccttctgctggatcatctggttagtggcttctgactcagaggaccttcgtcc
-cctggggcagtgggccttccagtgattcccttgacataaggggcatggatgagagggtgg
-cttatttctacttggacaatcttttttaaagtgtccttgtagaccgcactggaagcaagc
-cctattaggcattcgatttgcccagtttttcccttttccaaagcctccTCGACTAGGAGT
-TCTTAACTCATAGCACAAAATTCATGCTATATGCTCAATACATAATCACTGAATGGCTGA
-AAAGTACTGAACAAATTACTGCTAGATAAAATACTCCAACACAGCAATAAAGTTAATTAT
-GGCATTTCCTTTAAAAATGCTGTTTACCACTTTTTGCAATTTCTAGGCACCTAATTATAG
-TAATGAGGTCCCATCTAATCCAAATATCTTTCTGTGACAGTATCTGGAAGAATGTTGGAA
-TTTCTGAAAGCTGTAGAAGTAGCCGTTGATGATTAAACTCTTATCACAACATAGTCAGGG
-AAAGAGTAAGGTTAGGAATTAGTATTGTATATAGCTTACTATGGATACCAGTAACCAGAG
-CCCTTATCCCCCTCAGTTAGTAGCTGTATACCTTGTAATCCTGGAGTGGCACAGAAAATA
-AAGATTGGTGAGGCTTACAGAATCTCATCAAATCATATTTATCATATGAAGACAGCTAAG
-TTAATGGGTGCAGGAAATTTAGCCGCACGAAGATCAGATGTGTGAATATTTATTAAGGGC
-TAGGTGCagtggctgggattacaggcgtgcaccatcatgcccagctaatttttgtatttt
-tagtagagatggggtttcaccacgttggccagtctggtcttgaactcctgacctcaggag
-atccacccacctcaacctcccaaagtgctgggattacaggcatgagccaccacgcctggc
-tTGTTtttttgtttttgtttttgttttAATTTTCTAAGTCTTTCTTGCTGAGGGTCTGTG
-GATCAAGGAAATACTTATTCAAAAAACAGGTATTAAGTTCCTGTTAATAAATACAAGAAG
-AAAAGTGCTAACTGAATCACCTGTGGGTTTAAAGACCACCATCAAAGCTACAATTTTGGA
-GGACAGCCAACTGCTCCCTTGTTCTGTAATTCAATTTTACTCATTGCTGTAAGGGAGTTG
-GTTCCATTTCTAAATAAATTAAACAGAGATAACCCAAGGATTAGATGAATATAAGTCCAG
-CTATGCAGGAAATCGTTTGCCACCTTAGTGCACAATAAGAACTAAGAAGTTGGACTCCAG
-ATTAGTGTATGGGATTTCTTTTAGCTTTTTCTAACTAGAATCAAGAAAGATGAGATATTT
-GACTGTTCTAAACCTTTACTTCAGCCAAGTATGGTGCTCTGGAAGCTTCTCAACCCCACT
-CCCACTGCCTCCATGTTCAAGACCATCAAATAAGAGGGAATTTCCTCTCCAAGTAGATGT
-CCATCTTCTACAACATTTTTTCCTACGTCTGATAGATACACTCTAGCAGAACTCCAGTAG
-CATATTTCACCCAGGATACAAAGGTGTATTTGTCAGCACCAGTCCTGCTGATGTTTTTCC
-TCAAATTCTGCATTGTTTCTTTCCAAATCTCAAAACCTCCCAGAaaatccttcttgtctt
-ttaaggctcagataaaaataagacctcctctgtgatgtcttcctaactcctctgatagac
-ttgattaattactattttgaacccccacagctctttccATTTGTATTTGTAACACTAATC
-CCATTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtctgtgtatgAAttttt
-ttagcttttattttaggttcaggagaacatgtgcaggttagtcacataggtaaattgtat
-gtcacagggatttggtgtacaggttatttcatcacccaggtaataagcatagtacctgat
-aggtagtttgttgattcccaccctcctcctacctcaagtaggccccggtgtttgtttcct
-tttttgtgtccaggtggactcaatgtttagctcccattataagtgagaacacgtggtatt
-tggttttctgttcctgtgttaactcacttgggatacaggcctccagctccatccatgtcc
-ctgcaaaaaacatgatttcattttttatggctgtgtagtattcgatggtgtatatgtacc
-atattttatttatccagtgtaccattgatgggcatttaggttgattccgtgtctttgcca
-ttgtgaatagtgctgcaatgaacatacacgtgcatgtgtctttatggtggaatgatttat
-attcctttggctatatacccaataatggaattgctgggtcgtatggtaattctgttttaa
-gttctttgagaaattgccaaactgttttccacaatggctgaactaatttacactcccacc
-agcagtctaaaagcattcccttttctccacaacctcgccagcatctgttattttttcact
-ttttaataatagctattctgactggtgtgagatagtatctcattgtggttttgatttgca
-tttctctaatgataagtgatgttgatctttttttttctttcaaatgcttcttagccgagt
-atatatcttgttttgaaaagcgttccccattgcttgtttttgtcaggtttgtcaaagatc
-acatagttgtaggtgtacagtcttatttctgggatctctattctgttccactgatctatg
-tgtctgttcttgtaccagtgtcatgctgttttggttactgtggccctgtagtacagtttg
-aagttgggtagtgtggtgtctccaactttgttctttttgcttagaattgccttggttatt
-caggctcctttttggttccatataaattttaacatagatttttctacttctgcaaagaat
-gtcagtggtagttaaatgggaatagcattgagtctataaattgctttgggcagtatggcc
-attttagtgatattgattcttcctaccaatgagcatggaatgttttttcatttgtttgtg
-tcatctctggtttctttgagcagcactttttagttccccttgtaggtagaaatctttcac
-ttcccttgtaagctgtattcctatgtattttattctttttgtggcaattgtgactgggag
-ttccttcatgatttggctcttgtgttgaaggttataggtgtataagaatgctagtgattt
-ttgcacattgattttgtatcctgcgactttgctgaagttgtttatcagattaagaagttg
-cctagccatgtgcagaaaattgaaactggaccccttcattacaccatataatacaaaaat
-taactcgagatggattaaagacttaaatgtaaaacccaaaagtataaaaaacctggaaga
-caacctagataataccattcaggacacaggcacgggcgaagattttagggtaaagatgcc
-aaaagcaattgcaacaaaagcaaaaatggacaaatgggatctaattaaactaaagagctt
-ttgcacagcaaaagaaactatcaacagagtaaacagacaacctacaggatgggagaaaat
-ttttgcaaattatgcatccaacaaaggtctaactaatatccagcatctataaggaactta
-aacaaatttacaataaaaacaaacaaccccattaaaaagtaggcaaagaaaacatgaacg
-gacacttctcaaaaaaagacatacatgcagccaacagtcatatgaaaaaaagctcaacat
-cactgaccattagagaaatgtgaattaaaaccacaatgagataccatctcccaccagtca
-gaatggctattaccaaaaagtcaaaaataacagatgctggccaggtacagtggctaacac
-ctgtaatcccaccactttgggaggcctaggcaggcagatgacctgaggtcaggagtttga
-taccagcctggccaacatggcgagaccccgtctctactaaaaatacaaaaattaatcagt
-catggtggtgggcacctgtaatcccagctacttaggaggctgaggcaggagaatcactgg
-aacccaggaggcggaggttgcagtgagccaaggctgcaccattgcactccagcctgggca
-acaagagcgaaactcccatctcaaaaaaataaataaataaaaataacagatgctggcaag
-gttgtgaagaaaaaaggaatgcttatacactattggtgtaaattagttcaatcattgtgg
-aagacagtgtggaaactcctaaagacctaaagacagaactaccatttgacccagcaatcc
-cattactgggtctatacccaaaagaatataaatcattccattataaagacacatacatgc
-ccatgttcattgcagcattatttacaataacaaagacttggaatcaattcaagtgcctgt
-caataatagactggataaagaaaatgtggtaaatatatgtcatggaatactatgcagcca
-caaaaaagaatgagatcacgtcctttgcagggacatgaatggagctggaagctattatcc
-ttagcaaactagcacaggaatagaaaaccaaataccacatgttctcatttacaagtggga
-gctaacttatgggaacacacagaaacacagaggggaaaaaccacacactggggcctcttg
-gagggtggagggtggggggagggagagaagcagaaaaaataactaatagacactaggctt
-aatatctgggtgatgaggggcgggcacagtggctcatgcctgtaatcccagaactttgga
-aggctgaagcaggcagatcgcttgaggtcaggagttcgagaccagcctggccaatatggt
-gaaacctcatctctactaaaaatacaaaaattagccaagtgtggtggcatgtgcctgtaa
-tcccagcttctcgggaggctgaggcacaagaatcacttaaaccagggaggtggaatttgc
-catgagccaagatggcgccactgcactccagcctgggtgacagaacaagactctgtctca
-aaaaataataataataataaatctgagtgatgaaataacctgtacaaccaacccccatgt
-cacacatttacctatgtaacaaacctgtaccccctgcacacataacctttgatcttaaaa
-taaaagtgaaaaaaaAAAGTGTCTGTTCATGATCTTTGCCtttttttttttttttttttt
-tttgacagagttttgctcttgttgcccagcctggaatgcaatggcatgatcttggctaac
-tgcaacctccacctcctggattcaagcaattctcctgcctcagcctcccaaatacctggg
-attacaggtgcccaccaccTCAAAGtaaatttctttgagtttcctcaacacagctattgt
-gaattatctgtcagaaaagtcacatatctctgtctctctggaatggcccctcctgcctta
-tttagtccatttggtgaggtcatattttcctggatggtgttgatgctagtagatgttctt
-cagtgtctgggcattgaagagtagggtatttattgcagccttcactgtctgagcttgttt
-gtacctgtccttcttgggaagtctttccgaatattcaaaaggtcttgagtgttgtgatct
-aagctatatctgctttagggggtaccccaaacccagtaatactgtggttcttgcagactc
-ttagagataccaccttgatggtcttagacaagatctgagaaaattctctggattaccagg
-cagaggttcttgttctcttcccttgctttctcccaaacaaacggagtcagtctctctctc
-tctctctcttttctgagctacctaaagctgaggatggagtgacataagcatccctgtggc
-caccaacactatgactgcactgggtcagacctgaagccagcacagccctaggtctcaccc
-aaggcctgctgcaaccactccctggctacttctcaaggccctgaggctctacaatcagca
-agtggcgaagccagccaggactgtgtccttcctttcagatcataaaggtaccccaggccc
-aggatggatacagaggttcccatggggactccgagactagagtaacaaaccttagaaatc
-tacctggtgttctattgtactgcagctgagcttgtactcaaaccacaagactcagtcctc
-cccactcttccctctcctttccaaaagcagaggagccttacttcgtggccaccaaaacca
-caggccacaaggaatactgccaggctactgctgatgttccctttaagccccaagggttct
-tacgtcagcttgtggtgaatgctgcctggcctgggactaatccttcaagaaggtaggctc
-ccctctggcccatgacaggtccagaaatattcaagagtcaagtcctagaatcgaggaccc
-caagagcccacctgatgctctacctccttgtggccaagctggtacctaaggtgtaagaca
-aagttcccttcattttttctctgcttttctcaagcagaaggagttctgccctatagccac
-cacagatggggatgtgttgagtgtcacctgaagccagaaagtctcatgggttcacccaag
-gccatcagtgtggaacctggttatcactgctggttattcagggcacaagggctctttagt
-tagcaggtgattaatgctgccaggactgggtccttcccttcaaggcagtgggttcccttc
-tggcccagggtgtgtctagagatgtttttcaggagctacgtcctggaagagggtctgtca
-actatctggtgcctgatcctgctgtggctgagctggtatccaagatgcaagacaatgttc
-ttcctactcttctctctcttctcctcaagtggaaggaaatggtctcttttggagctatga
-gttgcgcagcctggggttaggggaggatgatgttagaactcccttagctgccctagctac
-tgttttagtaggtcatgtgccccccagtccactgtctctaggcccagttcagcactagga
-cttgcctaagagttgcagtccttggggtttagactgcctttcaagtttgcttagagaccc
-aaagcccacagtggaaagctttgcatgtattcaagttccgaccactgagatcagcaattc
-ccctctggttagggctggtttaaatgcttcctctgtgggtgggcctcagctgcatttggt
-ccagttttcctttctgctctaactgggcagcactgagttcactgcctcacaattgccgag
-ttttccatccctcctccagcacccagagattatctttgcatgctgctaccgacagggcag
-tgggagtggggagtgcagggtggcagctgtgattgaggactgtgttttctatttcttcag
-tgcctcattcagtggtaggaactaaaatcaagtgctatgattcttattcttatgaaggtg
-ttttttgtgtagatagttgttaaattggtgcctttgcataggggagggaggacgatcagc
-ggagccttccattcaggcatcttgctctgcctcctttttccataaataatttttgggagt
-ctagtatgttccaggaactctttcaggtcctgaaaattagacatgcattcatggagcata
-cattcaaaagtgggaagcagataaaaaatcatatgaataaatatatagtatgtcagatgg
-tgacagggctctggagcaaaagaagatatagaaagaagatgacaaggccaggcacggtgg
-ctcacacctgtaatcccagcactttgggaggctgaggcgggcggatcacctgaggtcagt
-agtccaaggccagcctggccaacatggcgaaacaaaatacaaaaattatccaggaatgat
-ggcgggtccctgtaatcctggctacacaggaggctgaggtggaagaatcacttgaaccca
-gaggtggaagttgcagtgagccaagatcatgccattgcactccagcctaggcaaaagagg
-gagactccatctcaaaaaaaaaaaaaaaaaaaagtgctgagcaaaaaagagtacagtttt
-aaatgaggtatctgtgaaaagactccttgaggcagtgacatttcaggaaggatgtaaaag
-ttatctggggcaagagagtgtcaggcaatgagaagagcaagtgcaaaggccctgaggtgg
-gaccatgcccagtgtgttcaagaagtagcaagaagaccacatggataatgtgaagcaatg
-aggaaagagaaaaaggggattatatcagaaaagtaatgggggtgcacatttggggttaca
-ataaagaattagacttttcctctaagatggaggttattggacagtgctgacatgatctga
-tgtattttcaaaagatgcctctggcttctgtggtcaaaacagattgagagggagggaaag
-tataaaagtggaaaacctgttgcatgggcattacaaaatctaagtgacagctaatagggc
-ttagatagagagcatcagagaagagggtgggaaatggtcagactcttacatacctattga
-aaatacagtcactcgtagattgaagagaaaggaagaagtcaagataacatcacagtttta
-gtctgagtaactgaaagaatgaagttgtcactgacagagatggatataacaggagaaagt
-tcagattggtctttttgcttgagggaggataaaaacctttgtttgggatacgtttgcttt
-ggagtgctatagacatctaagtggaattgtcttgtaaacaggagagatttttaagccatg
-agactgaatgggattgtcaaggctatgactgcagaaaagagcctaatgcctgagacctag
-aactccccaatgttgatgaataagaagcagcaaaggacactgagaaggttcattccagtg
-aggtcggaggaaaaccaagagaacatgatgctctgggagcttaattaaattaagttcatc
-aaggaggataaagcaccaaatgctgctgatacatcaagatgaggcatgagaattgatcag
-tggCCTACCAGAATCCCAGCTCCAtgacctcttaccagatgccaagtagatgacaaatgc
-atttcaaatgcattgcttactttaatcatcacaagaacactatgaagcagaaattaatat
-acctcaatttttaaaactggaaaactacaatttagggagctaataatgtgcccaatgtca
-cacagccaataaggaattaactgggatcaacacaggtctgcatgaacctaaaattaaagg
-ccttagccactatgctaagctgcctctcCAGCTGCCTTCCATGGGTCAATTCTAGGGAGA
-CTGAAGACAAAGTATTCAAATAAAAGATGTTGCTTTATTCAAAAAATGTATTGGCCATGT
-GCTTGGCTGGACATTCTTCCATGACCTACTCCTTTATACTCTATTCATCACTTACAGGGC
-AGCCTGTTTTAAGAGAATTCATATTTCTTATTTCTGAAGATGACATTATTACATCCTGGA
-AGAAATATTGATTGCCCATTTCAGTATATTCCTAAGTCTTTTTGTTCCTCTGTGTCAATT
-Ctttttcttttattattatactttaagttctagggtacatgtgcacaaagtgcaggtttg
-ttacataggtatgcatgtgccatgttggtgtgctgcacccgttaactcatcgtttacatt
-aagtatttctcctaatgttatccctcccccctcccaccaccccacaacaggtcccggtgt
-gtgatgttccccacctgtgtccaagtgttttcattgtttaattcccacctatgagtgaga
-acatgcagtgtttggttttctgtccttgcgataatttgctcagaatgatggtttccagcg
-tcatccatgtccctacaaaggacatgaactcatccttttttatggttgcatagtattcca
-tagtgtatatgtgctacattttcttaatccagtctatcattgatggacatttgggttggt
-tcgaggaagtcaaattgtccctgtttgcagatgacatgattgtatatttagaaaacccca
-tcatctcagcccaaaacctccttaagctaaccaacttcagcaaagtctcaggaaacaaaa
-tcaatgtgcaaaaatcacaagcattcctatataccagtaacaaacagagagccaaatcat
-gagtgaactctcattcacaattgcttcaaagagaataaaatacctaggaattcaacttac
-aagggatatgaaggacctcttcaaggagaactacaaaccactgctcaacgaaataaaaga
-ggacacaaacaaatggaagaacgttccatgctcatggataggaagaatcaatatcgtgaa
-aatggccatactgcccaaggtaatttatagattcaatgccatccccatcaagctagcaat
-gactttcttcacagaattggaaaaaactactttaaagttcatatggaaccaaaaaagagc
-ccgcatcgccaagtcaatcctaagccaaaagaaaaaagctggaggcgtcaATTCTTTAAT
-GTCAAGCAGCCTTTATGCAATCTTGGATTGGGCACAAGAAGCACACAATCTCCTCATTTT
-CAAAGCCCTTCATGGCTAAGCAATAGAGTTCCTCTTGAGTAGGCTGGAACAGATAATGAA
-ATGTTGCTTTTTAGATGTGGTCAGTTAAAAATAAAATCACCTATCAACATTTGTTACTGT
-ACCTCCAGCTGTGATCAATAGTACAAATTGCTTTTAATATCTTACTTATAAATAGACTTT
-AAGTATGTTTCATTTCTGAGAAATGTTCTCTGAATTCTACTTAAGATGTTATCTTTCCAA
-ACTGCTGGACGGGCTGAATCCAGGCAAGAAATGGGATTGCAAATTCCCTTGCACGAAGAC
-TTGATGGGTGAGTCAAAGCAAGATTCCCTTGCCATTCTTTGTTTAGAGGTGAGAGGAAGG
-TTAACTAGCATTTTATGCTATAAAAATCAGACACAAAGATAAGCAAAAAGAATACAACAG
-AAGCCACTCATTATTTCAGCTCTCTGTTAACACTTTGATGTTCACTTCTAAATATGCTTC
-CTCAAAGTAATTTCTTTTCACAACTGGGTAGGAGATAAGATAAAGCAAAGTGAGCTTGCT
-TGCTTTTCATCCACTCAGTTAAAAACAGTCTTCCAGTTGACACTCCCTGATACATGCACA
-CTCAGGCACACACAAAAGTCTGCACTCATCCATTAACCTCAAGAAAGAGACCTGTTGACA
-AAATAGACATACACCAGTTCAGAGGAACCTATGTCACCTGTCCCTAGTAATCTACTTTTA
-AGCCTAAATATATCAACAGTCAATTTCAGGAAAATTAACATTAAAAAAATTTAGATGAAC
-AATAGGAATGAATGAACTTAAAGGAAAAGAAGCTAATATCAAGGACAGAAGATAATTATT
-TAAAATGATGAGTGACAAACTTGACTAAAATGCACAACCTCTTCATAACAAAAAGCATGC
-AGGAGAAGGTACAAGTCAGCACAAGgttaaaagacaatcagagtagaacaaaaattctat
-gtgcatgataccacaaaaagattgctatccataatctatatgaagaataactacaaatca
-ataagaaaatgacaaatgacccagaggaaaataggcaaaCAATAGTATAGCAGCAAAACA
-TTGTAAGCACTCGTTTCAGAAGGTTGATATAGATTCAGAAATATGATATTCCCTTTAAGA
-GAATCTGCTTTTAATCCATAAATTGTCTTACAAACTAGTTTTATTAGTTTAATATTAAAG
-GAcccattagtgggtatatatccagaggaatataaatcattgtattataaagacacacac
-ctgaaaatgttcattgcagtactattcacaatagcaaagacaaggaatcaacctaaataa
-ccatcaatgacaggttggataaagaaaatgtggtatgtatacaccatggaatactgtgta
-gccataaaaaagaacaagatcgcatcttttgtgggaatatggatggaactgcagaccatt
-atccttagcaaactaacgcaggaacagaaagccaaataccacatgctgtcacttataaat
-gagagctaaatgatgagaactcgtgaacacaaagacgggaacaagagacactggggtatc
-cttgagggtggagggcgggaggagggagaggagcagaaaagacaacaaacctctgtgaca
-caagttttcctatgtaaccaaccttcttatgtcctcccaaacctaaaacaaaagttaaaa
-aaaaaAAAAAGACCCAATTGGAGTTGCAATTTGCTCTTTCCCATTCTACTGCATTTCTGA
-AACCCAAAGTGTACAAAGAATGTGTCTTATGTTTTATGAAATGTACATTTGGGCCCCCAT
-TTTTTTATTTGTATAACAATTGTAAAACACTATCTAAAGGCATAAAATGGCTAGGATGAG
-AATTACTATTGGTTCATAATTATATTTGCTTAATTACTGAAGATGTAACTGTACTCGCTT
-TAAGTATGCCATTTGACTATTGCCCTTCTTTTTGTCCAGAGCCATCAAAAGATTAAAGTA
-TTTGAAATGAATAATGTAATGGTTTTGTCTTCCTGCTACAGTGTGTTTCAGGTTATTTTC
-TAAAATCATAATGAACCCTGTTTTTTTGTTGTTTTTATTATTTTTTGATAAGTAAATAAT
-GCCACGATTGGTAGATCTAAAACTGAAGAAGGAGACCCTATGGCCTCAATCCAGAATGCC
-ATAGCATGCTAAAATGAGAACTTCCTCCAGGTGTGTATGTGTGTGTTCAGGGCCACCTAT
-GTATGCCCGATACGTCCAGTCTTCGTTGATGAAAATTGTTAGAGGTCAGTATTACAGAAG
-ATAAAACAGAAAGGCCATATGTTAATAATGAGAAATAAGTGGTTAATTCATAATTAGTGA
-ATCTGGTTTCAGCACTTTGGCCTTCGAGGTGGTCAAAACAGGTCTCCAATATGAACTAAG
-GATTGAAAAGattaaaattatttttttaacaaaaattaaGCTCAAAGAGTCTTGGATGCT
-TCAGATTGACTCTGCTTCTGGCATAACTTGAATAGAAAATCATATAAGGGTCTATGATGG
-GCACCATGCCCAGAGCTAGTTGGTTTAAATGTCATTCTATTTTGGACCCTAAAGATAAAC
-ATGGCCTACTGTGATTCCGTCCTGCGTGGCTGTTCTCTGGAGCAGTAGTCATTAATCTTT
-GCCTGCCTTCTCTCCCACCTAGGTGTGTGCCACCACCCCATGGTGACATGAGCTTCatta
-attaaaaaaaaaaaaaaCtttttctctcttttcttaatagaaatgaccttggaaaatttc
-tattggtctgtcttcaagttcatttctctttccatatcatatctacatggctgttaagtc
-caaagtttattatttaaataaataaataaaattgataaaactctagccagttgatcaaga
-aaaaagagacaattaccaaattttcaatatcaggtataaaaagaggacatcattacatta
-aaagttttgtgagagatgattctatatgccaaaatttttgacaacctatatgaaatggat
-aagtttcttaaaagatacaaattaccaaaactgacctaagaggaaacataaagtttaaac
-gatgctgtatcaattggagaaattgaatccatagtttagtcttctcacaaagaaactttc
-atgccttgatggcttcactggtgaagtataccaagaaataataatggcaattctacacta
-actctttcagaaaataaaggaggagacacttctcaaatcattcttcgaggccaatattac
-cttggttccaaaaatatgcaaagatatcacaagaaaagagaactatgagccaatatcctc
-atgaacataatttcagaaatctataataaaatattagcaaattgaatgcggtgaagaata
-gaaaggatcatagaacaggacaatatgatgtttatccccagaatgcaaagttgatgtaac
-atcaaaaaatgaatcaacgtaattcaccatattgatggactaaaggggaaaaacatatga
-ttatttcaataaatgcaagaaaagcatttgacaaaattcaaagccctttaaaaaaaactc
-atcaaactaggagagatggtaacttcaagctgaataatgctagctacaaaaaagtaacta
-cagataacatcacctttaacttagaaggctcatgtctttctactttaattaggaacaaat
-ggtaagttgaccacaaccacttttacttaacgtcatactgaaggtcttagctactccaaa
-aaggctagaaataggaataaaatgcatgcatttagaaaaggaagatacagcagattctat
-ttttagtttttaatttttataggtacatagtagatgtatacatttatggggtacaaagtt
-attttgatacaggcatacaatgtgtaataatcatattagggtaaatggggtatccatcac
-ctcaaacatttatcttttctttgtgttatcaacattctaattatactcttttagttatat
-ttaaatgtagaataaattaattttgactgtagtcaccctgttgtgctattgaatactaca
-ttttattcattctgtcttactatattttcatacccattgaccatcccctcctcccagacc
-cccctactacccttcccagactctgatcatcatcattctactttccgtcttcatgagctc
-aattagtaaaactttccttttttgcagataacatgatcatgtacataggaaaccctaaag
-aatccttggaaaagctattacatctaataaatgaatttagcaaagttttgaatgaaagtc
-tgtatacaaaaatatatatgtgcatattttagcaaaaaattagaaaaagaaattttgaca
-aaaactaccctttccataatagcatcaaaaatgaaatatttaggGGCCGGGCATGATGGC
-TCACCAATCTTGTACCCCAACAACCAGAATGATTATTTTTTATAGTTTTATGTATAGTCT
-ATTTTGGTTTTAAAATGGCAAAATACTATATGATTTTATATAAAAACTAAACTAACTTAG
-AAGTATGCAGTAAGAACGTGAAGGTCAAACACGCTGTCCATAACACTTAGGAAAATGAGA
-TCAACAGTAAATAGAAGACTGGTTACTCATCCTACAAGAAATGGTGATGAATAGGCCTGC
-AAAATATCCTGTAACTCCTCTAGAGGGTGCTCACTAGCAGGACATTCACATGCTACTCCA
-TGTGATGTTAGATTATTGTAAAGCATTATGTTCCTATAAAGGGTGGCGTGACAGTCCATT
-ACCAAGCACGAGACCCTCTGCTGATCTGTCCTAACAAGTGGAATTATGATATGCAGCAAC
-ACAGGAACCAGGCTTACGCTAGCCACATTGCAGAGAGACATTGCCAGAATCTCACTTGTA
-GAGGCCACCATCATATACATCAGTAAGCCTCTCTCCCTGGATCCACATCTCCCTCTATAA
-GGAGCCCTGTTAACCCCATCATTTAAGGGCTTCATACATTTGCCTTATATTTCTCTCATA
-AACAAATCAATGAGTTCCAGACTTTTGGTACAAATGTATGAAGACAGAAGAAATCATATT
-TCAGtcttaaaagcctaatcccagaagtgacacccatcacttcacattccattgccaaga
-gcaaatcacatgaccacacagatgcaaggggaatgagacattggcaaccacttcccagtg
-aCCATTATATATTATAGAAGGGGGGCATGCATGTAAGAGGAAAGTTGGTCTTCTCTGACA
-GAGACGTAGAATTCTACAAACATAGGGGAGGACGTTAAAAGGTGCTGAGCAGATAAAGGT
-CAAATGTCTGTTACAGAAGGACACAGGCACCAAAAGATAAAGagatactcctcaatttat
-gagggagttatgtcccaataaactcaccataaattgaaaatatcatacgtcaaaacttca
-tttaatacaactaacctacctaacatcatagcttagccaagcctgccttaaatgtgctca
-gaatatttatttgagcacatagttgggcaaaatcatctaataaaaagactattttataat
-aaagggttgaatatttcctgtaatttattgaatactgtattgaaagtgaaagatggaatg
-gttgtatgggtacttgaagtatggtttctactgaatgcatatggctttcacaccatcgta
-gagtcaagaaatcatgtcaaccatcataaataggggactatctgTATGACAGTAAAAACC
-ATTTTGTTACACAAATAGCAATCATCAAAAAAGAAAACACAGCAATTTCTGTTGCATATA
-TCCAAGCATTCAACAACAAAAGACCTTTCATTTTAATCAtttttttaagacacacggtct
-gactctgttgcccaggctggagtgcaatggtacaatcatagctaactgcagccccgacct
-cctgagctcaagcgatcctcctgcctcagtctcttgagtagctgggactacaggtgcgca
-tcactatgcctggctagttttttctagaggcagagtcttgctatgttcctcagactggtc
-tcaaactcttggcctcaagtgatcctcccaccttggcttcccaaagtgctagaattacag
-aggtgagccacagcacctggccAAGAATAGACATTTTATATCAAAGTAATTCAAGTATCT
-ATATGAACAAGTAATCGTGCAACTAGGTAATCAGGGCTTTGACCAATTTTGAATTACACA
-ATTAAAGTGCTAATATGTATTGTATTATACTGTATTTGCTGTAGCAATGCAAAAACTTCA
-TTGTTCTTTGTCCCCAAATACAACTGTCACTTATATTTCACTGTTTATGCTGCTAGTACA
-TAGCTTTATAAATTAATCTATCTTGTTTCTGACACTTATACATATTTCATCCTCTGGGGA
-CCTGGAGGAGCATATTCTTTGCCCCACCTCACAATTACCTATGCATATTTCTCAGTAACA
-GGCATAAGGCACGCTGCACAATCTTAGCTGATGAGATAAGAAGTCTCTCCTAAGGCTTTA
-CTCGCTGGACCATGGCAGAAATGTGGACAAGAGTGGTTGCAGAACATGCTGTGCCTGGGG
-CAAGGACCCTCTAATAGAACTAGAAGAGATAAGTCACAGGTACAAGGAGTGTGCAATCGG
-TCTGTTCAGCCACAGTTGCTATTAGAGGCCCCTGAAGAATTTGTTGTACTTTCCACGCTA
-GGCTACCTCGATCACAGAAATCAGCCTAGAGTCATATAACCCAAAGGGGGAGCTGACATT
-GCTGCTAAGCCCTCCTCCTGAGGGCCTTTTATCATCTCGTCCTGTAACCTACCTTTGCCA
-AGACAATTCCTTCAATCTTTGCTTTGTTTCAGGGAACAGTAATCCTACTAAGACTCTAAC
-AGTAGGGACGAGAGAAAGGGATGGAACAAAGGAGTGAGGCAAGGAGGCATCAGATGAAAG
-TGAGCTAATAATCTGTTGGCACCCATCACAtgctgagtacttccacttacattatcacac
-ttaagatgcacaatactttgggcatgatgtcactgccagcaaatctgaaattaggaaact
-caggcccagaagatatgaagtgacttttccggggtatcattaatgcaccagcagtgtaag
-ctaaattgaatccattctgcctgacaccaaaatcgtattcctttcCTTCCCTCCCACAAT
-TGTTTCCATTGGTGTATAAAACCTCTAAAGATCAAGATGTGGCTTCCTTCTTTAAAGAAA
-TAAAGCTGAGGCTAGGTAGTGACAGGTGGGGGCAAGTATGACCATCTATGAATGTTAAAT
-CTCACCCTCAATCCCACCTTGTAGTTTACCATCTATAGACTTGGCCTTCTTTAGATGAAG
-CAGTGTTGTAGGGgcctttctcaactggtgttcctcattcgaaccacagaacacagaaaa
-tgacttaggtgactattttcccaattcttccaaagatgatacatatgaataccattctag
-gtgcttagaagaaaggttaatccaaacacaatggatgtgtttggttgttaggatttaatt
-tgcttgcagaaacccaattgagacatgctgGTAGGGAATCTCTAACATTGGTCCACTGTA
-GAAGACAGAGGAGACGATCAATTTATTTTGTCTATCAACCTGCAGAAATAAAGAGTTTTG
-GTGGAACTGTAGGTAGAGAAAGAAGGAGGTACCTTCCCATGGCCTTGATGAGCCTGAGTC
-TTTCTAAATGCCAGGAAGGAAAACTACTCAAATTAGCTGTAACAGGGAGTTATCACAACA
-ATTTTTATTCTCTTGGGAAGTGCTAAAACAAATATATATGGAAATCTTACAGCCAACAGA
-AACGAatttcccactgctttcctccctcccaaactttcccactgtccctaattgaaaccc
-cattggaaggtaactaaatcctgtacaaccagaatctcctcatctaacttttcatttctc
-cctgtgttaaattaatcctgtttctccctcatggattcaccatcaacttgtactctcaag
-ctgatgctgttcattttcccacttttcatgactcaaggccaaaaggttggtatggcagct
-tcctcccttcccaatgttattttgaaaacattgcttctgtagtgtaaaatccccaactag
-tcaagactcaagtcagctcttttcaatgcctcttcaaccatctttattgttatattttaa
-aaagcagccccccatttattgaggactttggcactttgtttagaatgtatctattctgat
-tattgcctttattattggtgacttcagcatccatatggaaacactatccagttctacaaa
-tgttcagttatttgtcctccttaatgtcaataatttacctgctattctactcctgatttc
-tggccatagagctgtccacgtcatcatcaatgaccactccacacatgaactctgaactcc
-taccaccttctctgatcacacccaggcaccttttcagctccctcattttattatagaaca
-tgcatccgccagacgcttcctccttcacttttctattttttttttttttttttttttttg
-agatggagtcttgctctgtcgcccaggctggagtgcagtggctcgatctcggctcactgc
-aagctccacctcccgggttcacgccattctcctgcctcagtctcccaagtagctgggact
-acaggtgcccaccaccacgtctggctaatttttttgtatttttagtagagatggggattc
-accgtgttagccaggatggtctcgatctcctgactttgtgatccacccgcctcagcctcc
-caaagcctccttcacttttctttattagcctcaaccccatgattcaccactccaagtact
-cccttgccagcatcctcaaatcccaataccatttttaaaattttttaaagaatttctgca
-cccacctgtgtgaaaagttcaacccccagatccttttaactgtttgtcttctccacagac
-aaattcaggctgatgagcagtgctggaaaaagtgcacagctgcgcagattagtggcacct
-gcattcatgatctccagttttcacaaagccctcaGCAGCAGCCACTTGGTTCCCTGTGTG
-CAGCGTTCAGTGGAaaactccatgagggcaagaacaatatctgcttttactcattatttt
-aacccacttgaatgttaagctccatgatgacagggactttctgcggtatagattattacc
-ggcccctaagacagtttctggcacataatagacgctcaataaatactcagtgaaggaata
-aaATAAATAGGAGGTTAAAATTAAGTGATCAACAGTAGTCCAGGGTATTAAAGagactcc
-ccttaaaagctgcaattaagcagagtcatgagaggtgagtaggagctagcctgagaggaa
-atggaaaagacagtattaaaggcaggttgaacagcGCCTCTGTGATCCCTCCCTCATGCT
-TTACACACAATCGTTCTGAGTATTCTGTACTCAAAGCCCTTCCATTCTCTCCAGTTCCAC
-TGCCGCTCCTATGCACCCTCAGATGCAGCCTCTGTATTTCAGCCAGAATGGTAGCTCTAA
-AAGGTAATTCTGCTCATTATTTTCAGCTTCTATTTGGAACTCCTCTCAGAGCTCTCTAAA
-TTTCCTCAAGATATCTATCAGTTAAATGTGTTCACCcagtggtcttccatgtggtttgta
-tatgccaaggtatccccaaaaccctttgaaggagtctgcaaggtcaaaattattttcata
-acaatatttttaaaataactagtttcataataatattttgccttttcacaaaattgacat
-tggctctgaaaatgcaaactgaagcagataaaatagctagtgcctcaccacaaatcaaag
-caggggcacaagtctataattagaagttggattctttatcaccaagcacttgtaattttt
-ttaaatgccactcttaagaatatacttgacaaagtataaaaatttttaattttattgaat
-cccttgagtaGATTTTGTTCTAAGgttaaagtaaattaaagtggaaaccaggcctggaga
-atccatgagcagacaaggcctcttaagtgctcataacttttcttgatttgcaaacgtaag
-caaaacttaattggagctatttcttgtaaatgcctatattaaagaaaaatagaacttaat
-ctcaaccaatcaaaagcagctaactaactcgtaattatataagaaggtacttcccagcag
-gatagaccaaataagacaaaatttgtaactataaccaatcaaatattttatttgtattat
-ttccacacttactgcataaaagcgtgttccttacCACttttttttttttcttgagacagg
-gcctcactctttcacccaggctggagtgcagcggcatggtaatggctcattgcagcctcg
-aactccggggctcaagcaatcctcccacctcagccttctgagtagctgggaccacaggca
-cccaccatcatgcctggctaatAtttttttttttttttttgagatggagtctggctttgt
-cacccaggctggagtgcagtggcgcaatctcggctcattgcaagctccacctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacaggcacccgccactacg
-cccatgcccggctaatttttttttcttttttttcttttttggtagagagaagggtgtcac
-catgttgctcaggctggtttcaaactcctaggctcaagcaatcctcccaccttggcctcc
-caaggtgctgggattactggcaggagccaccatgtccagctTccttaccacttcttaagt
-gaagaccccgaaccacttctggtttggagttgcccaattcatgcattgctgtttgctcaa
-ataaactcttttaaaaatttttattatgcctcagtttaccttttGACACTatgttctgag
-taatacaaggaaaagtacatataaagcacttctgcagtataacaagctatgatggttgtc
-gccagaaaaatcacttaaataactatttggattttaaactgaactaggcacttttttatg
-aaacatcatttttatttgaaagaatgatggaaaaagtatggttattcagacttacatact
-tggcagaaattttctcaaaaattaacaaagtgaacttgtcatttcaaagaaaatagctag
-caatattagttaccaatctattcttataatgtgtggctgacaacaagaagtgaagtcact
-gctccctttccttgaacctgggaagatctttgtaaccaacctgaccagtacaatgcagtg
-gaagaaatatcaggtgatttccaaggcagaacagcttctgactggccctctgtctccagc
-caccatgttagaaggaagttcaggccacatggagacagcaaggcctctagctcacagtca
-gcatcaactgccagacatgtaagtgaatgggcctccagatgattccagtccccagtcttt
-gaggcttcccagctgacgtcactgacattaccatgcagagacaagccatctctgctaagc
-cttaatttttaacccatagagaccatgaaagaataacaaatgatgattgttttgaagcca
-ctacattttggggtaattcattatgcagcaatgggtaaGTAATCCTGGCATCACATGTTT
-TTCAAGAATGGGAATATGTCTTTTTCTTCCTGTCTTTCATGTCTAAGCCCTCTATCAGTG
-GTGCTTGTTGTGTGGAGTTTGGAGCCCAGGAGTAGTCAGAAAAGACTTTGATGACACAGG
-GTTGCTTGTAGAACATCTAATATGAGCAACTCCTACCTTGTGCTCACTGACCAGGCCCAC
-AGAAAAGTCAACAAGGGCAAAAGTTCTTTGCCTCACAGCACAGAACTGCTCCTTCCTCTC
-TGGTGCCTCTCCAACCACAAAATTCCTTGTCCCTGTCTTTGCCAGTCTCATGTTAAGAAA
-CCCCATAGACCCAGGTATTCTCCAATCTTGATGATAGAAGGGGAAACTGAGGAAGAGGTC
-CAGCTCACAACATTCTTACCAGCCCAGGGGGAAGGCCAAGATCTCCACAGAGTCATAAAC
-TCTAGGCCAAGACTATGCCTCTCCCAGGAATATCCAAGTTGGATATACCATATATTTTAT
-GCAgataaaatagctagtgccttaccacaaatcaaagcaggggcacaaatctgtaactag
-aagttggattctttatcaccaagcacttgtaattttttaaaatgccacttttaagaatat
-acttgacaaagtataaaaattattaattttattgaatcccttgagtaGATTTTGTTCTAA
-Ggttaaagtaaattaaagtggaaaccaggcctggagaatccatgaaaagacaaggcctct
-taagtgaTAAAACCTGTATTATTCCTACAGAGTCTCCTCTAATGTCAGCAACTGTCCTGG
-TGTCTCAACCTGTCTTTACCACCTTGATTTAGCCATCATGAAAGATCAGCCAACTCTATG
-TTATTGTATTTTTATTTCCATCTCTACTTTTTATTACAACAAAGGTCCTACTTCGTTGAA
-TTTTCCCTTGCTTTTAAAAAAACGGAAGGTCTTTAACTTGTTCTGAAGAAACCTCCTGTG
-AATTTCAAAAGGGCTCCCTATCTGTTGCATGTGGGGAAGGGCCACGCACATCCACATTCC
-CTTCGTTCCAGGGCACTGGATTTTCAAATATTGAGTTCTTGCTGTCTTCAGTCTTTGAAT
-AAAGCTCACGTGGACAACTATGAAGTTTAAAAGCATAGGTTGAGTTTGGGGTATAGTCAT
-GAGAATAGAGAGGAAAGAGCAGAAGTACAGCTCATTGCAGAGGACAAGCATCATGATATT
-CAGAACATTTGATATGGAGTGATATGGGGTAAGAGTGAGCTGGGTTTTATTCTGGGAAAT
-CACCCAGccctgaaaaagctatttatattcttttgttcactttccttatctgtaacacag
-agaccgttatgccaggtttcctagctactttagttgttgtgaagCAGCATATTATAAATA
-TCATAAAAGATTATCCAGTgctaggtgccatggtgcacagctgtaatcccagctacttgg
-gaggcagagtcaggaggatcacttaagcccaagagttcaaggctgtactgcactgtgttc
-acacctgtgaatagccactgcactccaacctgagcaacacagtgCCTCTTAAATAtgtat
-atgtatatatatatatatgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtATAT
-ATATATATATATACTCTTTTAAATTTACTCTGTTTTAAATATTTTGAGGCAGAAGCAAGA
-CGTTTTGATACAGAAAGCCAGCAGGTTGCTGAATTACAAGACTGAAGCTGAGGAAACTGT
-GTTTATCAATAGAGATGCACCGCTCATTCTTATAGAGGGAAGAtacaaagtaactctatt
-aagtcaagaatttctatatgttttatttactgcaatatcctcagtacatagacagcagtt
-gacatatagtattgatcatagtatctaatgttcaatagatatctgctgaatgaactgaaA
-AATTAATAATGTTGAGCAATAACAGGTAATCACTGTAAGATAACATTCTGAGGAGACTAA
-AATTTGAAGAATGCCTACAAGAGAGGGAGATGCAAAGGGAAAACATATCCTAAAAAATGA
-AATGAAATTATCCTTAAGAGAAAAAAGAAACACCAGTATGATCAAAGATTGCAAGAGGTA
-GAAGACAAAACTGCATAAAGTAAAACAAAATGCTGAACTCTTGAAATGCAAAAATCCAAA
-AATCCTGTTGCCTGTtttttttttgtttgtttgtttgttttttttgagatagagtttcac
-tcttgttgcccaggctgaagtgcaatggcaccatctcggctcactgcaacctccacctcc
-ttggttcaagtgattctcctgcttcagcctcccaagtagctgggattacaggcgcccacc
-accatgcccagctaattttttgtatttttagtagagacgggtttcatcatgttggccagg
-ctggtctcgaactcctgacctcaggtgatccacccatcttggcctcccaaagtgctggga
-ttacaggcatgagccactgcactcggctGTATTTTTTTTTTTCACTTATTTAGAAGGCTG
-ATTTATTATCACCTCCTGCCAGTCACGGGAATGAGACAGAATCACCTTGAGAGTATCTAC
-AGGGAGAATCTGGAGTCCAAATCCCTTCTTAATCAAGAAATGCTCTTTAATCAACTCCCT
-ATATATAGGGAGGTTGATGCTGGGACAAGAGGGGCTGAATAACTTGGGGTTCTAGTCTTG
-GATATGGAATGGGGGCAAGTGTGTACAATCTCTTTGATTTTCCCCAGGGCTTCCATCAAT
-ATTCCAAAAGACTAGAAATTCTGGACAGCAGCTTTTCCCTTCTCTCCCTTTCACACTTCA
-GTGACTTCTGTCTTCATCTTAAGACACTAATCTACACCCAATTTTCTCTCCTTCCTTTTT
-GCAGGAATGCTATTCATTCAAAAATGCTGGGATGAAAGAGCAAACTTGCAAGGATATCTG
-CTACAATAATTAAAGAGAAATAGATGCCTATAATTAAAAACATTGCTGCTTGTCTCTGAA
-ATTATTTGAACACTGTATACATCATAATGTACATAATCAGTTTCCATCTGATATCCCAGA
-CATCTAATCCTGGAAACAACGTCTAATATCTCTACCCCAAAGCAATAGAATTAGAGCTGG
-AAGGGGCAGGTAAGCAACAGTGTGGACCTTTctcagcagcagtgaacttggggtgctcac
-aacctgtgcaaaaccagctgtggtggctaaggattgcctatgtcacctctcccccaactc
-taggcaatgcagcttggggatagactccttccacttgggggaagaagagggaagagtaca
-gagggctttgccttgcaacttgggtaccagctcagccacagtaaagtaaagtatcAAAAG
-TTacccagcatggtgccagctgtggtggccactggacttgcccttcccccaactccaagc
-agcctggcacagagagagagactccttttgtttgggggtaaatgagggaagagaagaaga
-aactctgcctggtaacccagggaatttggccaaatttaaaccccagcccactaaggtggt
-tcctctaggactcagcgagagttgcagtgtttctgagcttagggcaccctctagtgctga
-tatagtttcaataatcacaggctcaaatcacaacactcaatctccttcaaatacctgaaa
-agccttcccaagaaggatgggtgcaaacaagcccagattgtgaaggctacaatatgtatc
-taactcttcaatgcccagacatcaacaaccatcttcaagagttaagaacatccagggaaa
-tatgacctcatcaaatgaactaaataaggcatcagtgaccaatctgagaatgatggagat
-atgtgactttttagacaaataattcaaaatagctgtcttgatgaagctcaacaaacttca
-agacaacacagagaaagaattcagaattacatcagagaagtttcacaaagaaattgaagt
-aatttctaaaaaatcaagcagaaattctggcactgaaaagtttgattgtcaaagtgaaaa
-atgcataagagtctttcaacggcagaattgatcaagcagaaggaactggtgagaactggc
-tatccaaatatacacgaagccaaaaaaagaattaaaaaagaataaagtatgcctacaaaa
-tgtagaaaatagtctcaaaagggtaaatccaagagttattggtcttaaagaggatgtaga
-gggagagaaaagggtaaatagagagatcttttcctcagcacatggaacattttgagagat
-cagggtagaaaggtcagagaaataaaaacaaacaaccttccaaacctcaagaaagatata
-aacatccaggtacaaaaaggtcaaaaaacaccaagcagattcaacccaaataagactacc
-tcaaggcttataataatcaaactttcaaagatcaaagataaagaaaggatcctaaaagca
-ccaagagaaaagaggcaaataacatataaaggaactccaatacatctagcagcagacttt
-tcaacagcaactttacaggccaggagggagtgggaaaacatatgaaaactgctgaaggaa
-aaccaaccttcaacctagaatattatctccagcaaaattatcctctaaacatgaaggaaa
-aatagtctcccagacaaacaaaagctgaggaatttcatcaataccagatctgtcttacaa
-gaaatgcccatgggagttctccaacctgaaataaaaggacattaactaacaacaagaaat
-cgtctgaaggtataaactcactggtgatagtaagtacacagacaaatacaaataccctaa
-cactgtaattctggcatatgaaccgttcatatctttagtagaaagactaaaagacaaacc
-aatcaaaaataataatgacaacaactttttaagagattgtataaaaagatacagagacaa
-taaaaatcaaaaagagtgtagagtgtagagtggttgtctctttgcttgttagtctgtttt
-tcttttctttttaatcaggattaagttgtcatcagtttaaaataagtggttataagatgt
-tatttgcaagcttcatggtaagtacaaaacaaaaacctgtaacaaatatgcaagaaatta
-aaacatactaccacacaaagtcaactttacacaaagaaagatggaaggaagggagggagg
-gagggagggagcagggaagggaaggaagggagggaagggagggaatggagggaaggagga
-aaggagggaaggagtgagggagggagggaaggagtgagggagggagggaaggagagagga
-gaaaaggagggagagaggagaaaaggagggagagaggagggagggaggaaagggagggaa
-ggagggaggaagggagggaaggaaggaaggagggaaggaaggaaggaaggaaggaaggaa
-ggaaggaaggaaggaaggaaggaaaaagaggaccgatgaagcaaccagaagataaatttt
-taaatggcagttgtaagtccttatctattaataagaacattgaatgtaaatggactgaag
-tctccaatcaaaagacatagagtggttgaatggataaaagagcaagacccaactacatgc
-tgcctatgagaaactcacttcacctataaagaaactcatagactgaatataaaggaatga
-aaaaagaaattctatgcaaatagaaaccaaaaaagaagttattatacttatatcagataa
-aaatatctttcaagacaaaactgtaaaaagagacgaaggtcgttgtttaataataaagga
-gtcaatttttgcaagaggatataacaattataaatatatatgcacccaacactagggaac
-acagatatataaagcaaaaattattagttctaaagagagaggtagaccccaaaacaataa
-tagttagggacactaacaccccactttcagcattggacagatcatcaagacataaaatcc
-acaaagaaatatcagacttagtctgcactataaaccaaatggacctaacagacatttata
-gaacatttcatccaacagccatggaatacacattattttcctcaccatatgaacattctc
-aaagataaaccacttgttaggccacaaaacaggtctcaaaagaatctaaataattaaaac
-catatcaagtatcttttatgaccacagtggaataaaagtagaaatcaataacaagaggaa
-ctttgaacactatacaaacacatggaaattaaaaaacataatcctgaatgaccgttgggt
-cattgaagaaattaagacagaaattttaaaatttcttgaaacaaatgaaaatggaaatac
-aacattccaaaacctatgggatacagcaaaagcagtactaagagggaattttatagcaat
-aaatgtgtatatcaaaaaagtagaaaaaatgatcaataaagcagtctCAGTATCAAAAAT
-TATGCCATATGTCATTCCCTTCCCCAATATAGAAATTATTTAGAAATCAATAAcaaaaag
-ttcaagaaaatgtatattatgaaaaaaatcatgtaagaatttcaaaatgttttgcaccaa
-aataaactaatactaactggttataaaatgtttgaacaagatctagtttcagacactaaa
-aaagataagacatcagtctgaaaagagcccctatcagagcaacatgaattctgctaaaat
-tgaagcaagaacaaacatcaaatgtacagtgaagcttgggtagaagaatgatgaaatcat
-tgatgctttacaaaaagtctatgggacgatgccccaaggaagtcagcagtttgcaaatgg
-ataactcattttaataagggatgagataatattgaagatgaagccaccagcagcagacca
-cccacatcagtttgggaggaaaaaattaatcttgttcatgccccagttgaaaaggactga
-taattaacagtaaaaacaattgtcaacatcatagacttctcagttggttcagttaatgga
-aatctgactaaaaaattaaagaagaacaaactttccacttgatgggcgccaaaaccattg
-tgccaaaatcagctacaaacaagagcacagctttcaatgaaactttaaacaagtgggatc
-aagatcctgaagcatttattcaaagcactgtaacaaaagttggaatctggctttaccagt
-atgaccctgaagacaaagcaaaatcaaagcaaagagatggaagtgatccagtccaagcaa
-aagctgaccagttaagaacaaaagtcatgtcaacaatttttgggggtgcacaaggcattt
-tgcttgttgactttctggagggccaaagaacaataacatctgcttattatgagagtgttt
-tgagaaagttagccaaagctttagctgaaaaatacccaggaaaacttcaccagagagtcc
-ttctccaacatgacaatgctcctgctcattcccctagtcaaacaagggcaatttttcaag
-cgttttgatggaaagtcattaggcatccacattgccatcctgacatggctccttttgact
-tctttttatctcctaatcttaaaaaaaaatctttaaaggacaccaatttttcttcagtta
-ataatgtaaaagaacactgatgtggttaaattcccaggaagctcagtccttcagggatag
-actaagtggctggtaccattgcttacaaaagtgtcttgaacttgatggagcttatgttga
-gaaataaagtttatatctttatatttttatattttaatgtcatcttccacaaactgtttg
-aagttccctcataactaaaatgtccccacatgctcagataagaaacacatttctcaacca
-atgtttctcagatattaaagtacatacaaatcacctgaggatcttcctaatacgcagatt
-ttgattgactcattctgagatgaattgaaatcctgcatttctgacaagctctccggaagt
-gttgatgcttctggtctttccaccacactgtgaatagcaaggttcaaactaattcatatg
-tcagaaaagatgacacagtggaaattgaagtgtttatttttaagtgaatgattatgataa
-caaaacactgcaaataaaaacttatgaagtccagctaaagctgcatataaagggaaaatt
-agagtcttacccacttggttatactgaagaaaagctgaaaatgtatgagataacaacaca
-aataataagttagaaaacaataacagaataaaatgaaattttattcaaagaagttcaaag
-aaaggaagataaagctgagaggagaaaataattaaatattttttaattttcataatattt
-aaaataaaatataattaaataaaaatcaaacatagaatcaacaaaaccaaaagctgattt
-tgaaaagaccaattaattaattcactataggaataacaaagaaaaaattgaaaacacatt
-acccatatgaagaataaaacacgtagccatcactacaaactctatagatagtaaagagat
-caaaggacatattgtgagtgaccttatgccaaaaatgaaatttagaagaaataaacatta
-cttgatgtgacccaagaagaaattgaaaatttgacagttctaaattgttagggaaattaa
-atctTAAATCTTTAAACTCAGTTGAGTTTTTCTGCTACATTCCAATGTCTGATCCCTAGC
-TCTATGGGTTTCAACAGACAGTTGTAGAAGCAGCAGAAAAATATCCTTGCTCTTATATTA
-CAGCTACCGTGGTGTGTTCTTGAAGTCCAGCATGTCTAATCATGGGATCCTGTCACCCTA
-CTTTCCTGACTATGAAAGAACTAGCAGATTCTCTGCTGGGCCAGTTTGTTGGAATGTTCT
-GGAAGTCATTCTGGGAGACCAAGCCCACAGTCAGCTTCTGTAGAGAGTTTATAAGCACAT
-AATTCTGAGTATTAAAAATATTTCTGTTGAAAATAGCTAGTGTTTTTCATTTCCCAACTG
-ATACACATAAATGCAACACTTTGCACATGTGAATAATTTGTCTTTTTACAAAATTATGCT
-ACACTGTTGATAGATTCATTCCATATATACATGCAACATACTTAATTTTTCATAACTTTC
-CAATTCTTATTAACTCAACTTTTTGTTCCATAATAACTGTGCTTCTCTTTGTACCAGTAC
-TTTCCATATTCTTATTGCTTTGGGACTAGCAAGACACAATGAGGTGAATAATGTTATTTC
-AATGCATCTTAAAACACCAGAAACCAATTAATATGCGATATTCAGGATTAACTGATTCCA
-AAGGGCTGTTAATTCCATCTCTTGATATTGACAAGTAGTAAGTAAATATGCCTAAGCTTG
-ATTATTTTTGTTCATAGAAGTAAAATATACATTTCATAAAGTGAAAGTTCATAAGATTTG
-CTTTTATTGTTTTAAAAAATAACAGTTAATTTAAACAAAACTGAGGAGTCATTGGATACT
-ATAGTAGCTAATGAAATCCTAAGAAGACATGAATTTCAGGAAGGCGAGGAACCAGGGAAA
-CTCTTGAAACTTGAACAATTAATAATATTCAGAGCCAATGAGCTTCAATATCTGAGTTTC
-TTAGGAAATGTCCCAAATTAGCAGGGGAAAGCATCTGATTGGTAGGCTTGGTTCTATTGT
-TACACCTGGATCAATCAGCTACGACCAAGGAATCTGAGCAGTACACTATAAAAATTGCTG
-CTTTTaattatttcaaccattgtggaagatagtgtggcaatccctcaaaaacctaaagtc
-agaaataccatttgacctagcaatcctattactgggtatatgcccaaaggaatataaatg
-gttctattataaagacacatgcatgcatatgttcactgcagcgctattcacaataacaaa
-gacatagaatcaacccaaatgcccatcatttggccatttggataaagaatggataaagaa
-aatgtggtacatatataccacggaatactatgcagccataaaaaagaatgagatcgtgtc
-ctttgcagggacatggatggagctggaggccattatccttagcaaatgaaggcagaaaca
-gaaaaccaaatactgcatgttctcacttataggtgggagcaaaatgatgagaacacatgg
-acacacagaggggaacaacacacactggagcttactggagagtggaaggtgggaggaggg
-agaggatgaggaaaaataactaatggacactaggcttaatagctgggtgatgaaataatc
-tatacaaccaacccccatgacacacattacctatgtaacaaaccagcacatcctgcacat
-atacccgcgaagttaaaaaagttTTTTTTTAGTTGCTACTTTAAAAGGATGTGGGAATCA
-TTGTAAACTCAAAAGTTAAAGATGTGCCAAGAGCTGTCTCCCACGAACTTGTTTAACAAA
-CGTACTGACTTTGTATGTTGATCCAATACCCATGCTGGCCACTGGACATACCAGTACAAA
-CAAGGCAGAATCTTCACTCTCCTCTAGCTCTTCTAATTCTCATGCACTAAGTGCCAACCT
-TAGCATAACTGGGCTGACAATCAGTGAATCAAATATCTAACTCTTATCCTACTCCAACGT
-TAAGAAAGAGACATGCgactgggtgcggtggctcatgcctggaaccccagcactttggga
-ggccaaggtgggcggatcacttgaggtcaggagtttgagaccagcctggccaacatggtg
-aaaccccgtctctactgaaaatacaaaagttagctgggcatggtggtgcatgcctgtagt
-cccagatactctacttgggaggctgaggcaggaggattgcctgaacctgggaggcggagg
-ttgcagtgagtcgagatcacgccactgcactccagcctgggcaacagagtgagactccat
-ctcaaaaaagcaaaaGAGAGACACATGCAAAGGGCTTGCTCTTTCTTTCTCATCTTACCT
-ATCTTATGTTTTCCTCCAGGATCAAGAGCAAGGAATTTGTTGCATAGAGGTGTTCAAGAA
-AGGGTGTTTTCAAACAGAGTCAGAAAAAACACAACTATACTGCGAGCAGCATACAAACCT
-GCTTTGGCTGCACTTCACTGCTCATGGCATAAGGCCACGAAGAGGCCAATAAAGGCTGGA
-GCTCAGGAGCATCAACCCAGATTCAAGGCTTCCTCTCTGGCACCCAACCATGAAGCTCCT
-TTTTCCTATCTTTGCCAGCCTCATGCTACAGTACCAGGTGAACACAGGTAATGTGGATTC
-CCAAGTTTAAGATGGGTAGATGAGAGGAACCAAGGATTTGGCTGCCCATGACAATGGAAA
-CCCAAAGAGAGGAGACTGAAAGATTAGCTGTTCAAAAAGATGGCTAAAGAGCTTACCTAT
-TGTATCAGTCATGCACTGATACATTCTCATAGGCCCCAACTGCCAGATTGTGTCCAGTGG
-AAACACCCAGGAAGCTACAGAGAAAGCAGGGTATTTTTTGTCTATTCAGAAACTATCCAA
-AATATAATGCTGCCTTCCTGCCCTGTATATGTCTATCATGCTAAGACTAAGCCCAGGTCT
-ACCTCCTTTTAGCTCTATTTCTATCTTAAAAGCCCTTTTTTTTTAAAAAaagtcctgggg
-tacttgtgcaggatgtgcggtttgttacataggtaaatgtgtgtcatggttatttgctgc
-acctaccaacccatcgcccaggtattaagcccaggatgcattagctatttttcctgatgc
-tctccctccacccaacaggccccagtgtgtgttgttccccttcctgtgAAACCACCTCTT
-GAAGCAAAGTTTCCTATCAGTTTGTGCTTGGTGTAGAAAGGAGGAAGTTCTTCCCTCATG
-CTCAAAAAAAAACCCTTTCAAGATCAAGTAAACAGGCCTGTGTTCTCCATCTTGAATTCT
-TTCAGGTTTTCCAGAGCCTTTATCGCTTCTCTCAGACTTTGTCTTCCTGAAAACCCCCAA
-ACTACCATAAGGGCATCTAGGAATGCATTATAGCAAAAGGCTAAGCCAGGGGATTAACCA
-TTGTTTTTGGAAAAGAAAGGAGAAGCACTGAGATTTGTTTCAGAATACAAGAATCATCCA
-GCTATTTGAAAAAATTAGCAAAGGGTTTCGGGGCAGGGAAAGTGGAAGTGTCAAAGATGC
-TTCTAATGTTTTTATCTTCTAATGTTTTTATCTTGGGACCCTAGGAAAAGGGTAGTACCA
-TAAGCAAGTAtggctgtgtcatcttgggtaaagtcacttaaccactttgaacttcaattt
-cacatgagtataatggggttaatcaatgcAGCTGATTCCAATATAAGAATTTTTCTGTTT
-CCCGTTTGATGAGAAAACAATGTGGAAATGTATGCAAATATGCTTTGAAAATTAGCAGAT
-GCTACATAAATCTCTTGTAATTTAGGGAAAATCATTGGGTTATTAAGATGAACAAGGGAG
-AAAAGCTTTCTTGATTCAGAAAAAAGAAACACGAGACATTAGGATGGAAAAGTCATTCAG
-CAGATAAAGATAAGGTACTAAGCCGAGCAGGAAATTTAGAATTATAGATAACAATACAGA
-AGTTACCTTGGTGGATATGAGGTTAAGGCTAGGATAATGAATGAGACTTCTGAGAGATAG
-AGTGTCCAAAGAGGCTAGAAGAGATAGAACACCATGCTTCAGGAATCACAGATCTAGTGA
-TTGTTGAGAAGAGAGAAGTCATGGGCTACTGAGTTTGGTGAAAAGATAAGACTCCTGAAA
-ATTCTATTGATTCTCTTTTGAACTTCTTTCTTAAATTAGTTTTATGATGGACTTGGCTCT
-CATTGGTATTTCCCAAGATTATGGAGATGGGATAGTGATGTCTGACAAGTACCTAAGATG
-CTAAGTTGAAGGTCTAAAATTCCATCCTAAAAGCAAATAATTACTCTATCATCTACGTGC
-CCTTTGCTTCTTAAAGTTACTCAAGGAAGGCAGACTAAACAGGAAATTTACTTTGGATTC
-AAGAGGGGCATAGAGACGCTCTCAGCCTGCCCATTTGCCTTCATCAACATTCCTAAACAC
-TGGGCTTAAAATGTAGTATGAGTAAACTCTCTCTTAGTCTATCCATCTCCCACTAGCAGT
-TTTAACATCATCTCTAGTTATTAACCTTGGCTCAATGGCTTTCTCTTTTTTTATACAGAA
-TTTATTGGCTTGAGACGCTGTTTAATGGGTTTGGGGAGATGCAGGGATCACTGCAATGTG
-GATGAAAAAGAGATACAGAAATGCAAGATGAAAAAATGTTGTGTTGGACCAAAAGTGGTT
-AAATTGATTAAAAACTACCTGCAATATGGAACACCAAATGTACTTAATGAAGACGTCCAA
-GAAATGCTAAAACCTGCCAAGAATTCTAGTGCTGTGATACAAAGAAAACATATTTTATCT
-GTTCTCCCCCAAATCAAAAGCACTAGCTTTTTTGCTAATACCAACTTTGTCATCATTCCA
-AATGCCACCCCTATGAACTCTGCCACCATCAGCACTATGACCCCAGGACAGATCACATAC
-ACTGCTACTTCTACCAAGAGTAACACCAAAGAAAGCAGAGATTCTGCCACTGCCTCGCCA
-CCACCAGCACCACCTCCACCAAACATACTGCCAACACCATCACTGGAGCTAGAGGAAGCA
-GAAGAGCAGTAATGTGGATCTTTCCCTTAAAACTCCAAGTTCCTCTCTATTTTTGCTATC
-TATAAAATGACATAGAACTGTTTCCTCTGTCATCAGTCATTCAATAAACACTGTTTGAGC
-ACCTACAGTTTATGTAATATTATCATTCTCACAAGAGCCTCACAGAGGGGGTAGAGCTAG
-GGAGGGATGGAATTGTTTAAGTTTAGATGCCCAGGAGAAAGTAAGCCTCAGGAGGGTGAC
-TACAGCATCGAGTTTGTCCCAAGCATGGCCTAGATTAGGCCTCTGTAGCAAGCATTTATG
-TCTCTCATATGGTGTGTTTTTCCTGGAGCAACAGTAAGGAAAGCATCAGGAGATGTATTT
-TCTTTTCTCATGTATTTGGGAGGAAAGGCCCAAATGCAAAATAGAATATGTAGGAATCag
-aaaaaggttaaattaattgtaataatatatttttgtttcgttttgttttgagacggagtc
-tcactcagttgcccaggctggagtgcagtggtgtgatctcagctcactgcaactccacct
-cccgggttcaagcaattctcctgcctcagcctcctgagtaaccgagattacaggcgcaca
-ccaccacacccagctaatttttgtatttttagtagagacggggtttcaccatgttggtca
-ggctggtctcgaactcctgacctcgtgatccgcctgcctcggtctcccaaaatgctggga
-ttacaggcatgagccaccacacccaaccaataatgtgttttattgaatgcaatatatcca
-aaacatgatcatgttgacatgtaatcaatgtaaaaattatttatgagagagtttaccttt
-tttggactacatctttgaaatctcatatgtgtaattacacatagagcacatttctattca
-tactagccacatctcaagtgctcatagtcatatatgaatagaggatttcatagcatattg
-aacagcAACAAGGCTAGAGAGTTTTAGGGCACAAGTAATTATAGTGACTCTTAGGCATAG
-GGGATGCCCCTAATCCAGAGGAGACAGGCATATTTCTGAGGGCtgtggcatataatttaa
-gagtatagaaattcaggtctgatatgcccggactagcatcctagattctggcacttttta
-gctgtgtggtcttgaacaaatcatttatccacacataagcatcagtttatttattcataa
-aatggagatGTGAACATTATATTATATCCCAGAAATCAGCAATCTCAGATCACTCTTCCT
-CTTATTGCCCAAATTACAATGGCACAGCCACCTATTCTAGttttttaatagctttattga
-agcataattgatatacagagaattgaacatatttaatgtgaataatggcatgagtttggg
-catatgcaaaatcctgtgatactatcaccacaatcaaggtgatagacgtatacatcacct
-cccaaagtAacatgaccatatttgtagaaaaccctgaaaacttcacgaacacacacacaa
-aaatgtagaactaagaaatagattcaaaaaagtcaacatacaaatatcagtggcatttct
-atacacttaacaatgaaccattccaaaagaaaatcaaggaaacaatctatttacaaaagc
-aacaaaaagaataacataggaataaacttaaccaaagaagtgaaagaggtacattaaaaa
-cttaaaaatattgatgaaaaaatcaaaggaaacacaaataaatggaaagatattccatgt
-ttaggtattgaaagacttaacattgttaaactgttcattctgtctaaagcaatctacaga
-tataatacatctccccccttccaaatcccaatggcattttttaaagaaatggaaaaaaca
-atcctaaaattcacagggtaccataaaagacccagaatagcaaaatcaatcttgagtaaa
-aagaacaaagctgaaggcatcacactttcttatttcaaaatatattacaaaggtatagta
-attaggccaggcgcagggactcacgcctgtaatccagcactttgggaggccgaggcgggc
-ggatcatgaggtcaggatatcgagaccatcctggctaacacggtgaaacctcgtctctac
-taaaaacacaaaaaacaaaaaatagccgggcgtggtggcgggcgcctgtagtcccagcta
-cttgggaggctgaggcaggagaatggcgcgaacccgggaggcggagcttgcagtgagccg
-agattgggccactgcactccagcctgggcgacagagccagactctgtttcagaaaaataa
-ataaataaataaataaataaataaataaataaataatggtgttgggaaaactggctaccc
-acatgcagaagaatgaaattggatccttatctcaccccatataaaagaaatcaactcaaa
-acggattaacgacttaaacataagacctaaaactgtaaaactactagaagaaaacacagt
-actgttctgtatttaagctccatgacatcgttctgggcaatgatttcttgcatatgaccc
-caaagcacaggcaacaaaagtgaaaataggtaactgCATCCAGATTTTTTAACATATTCT
-TCTCTGCTACATATCACCTACCTCCATTCAAAGGTCACCTTTCCCCATCCTACTCATTTT
-TTAATACAGTGTCACTCTAAGAAAGACAAAGATTTTTCATGATGCCCCACAGTGATTCTA
-GAATATAACTAAAAAATATTTTCCTGGAAGTTTTTGCACAACAGAAAGGAGTTGCAATAC
-AAAGCATAAGTTTAACACCTGCTAGATATGTGTTCTCTGAGGAACCCCAAGCCTACCTGA
-TGGGTGTCAGATTCTCTCCCTGCTACAGCTATTTGTCAAACTCTTGAAAGTCCAGCTTTC
-CTTCCCATGGAAGGAAAATTCCCACGGAATGCTCTCTTCCGTGTTTACCCACAGAAAGGA
-GAGAAAGGTTCTTTCTCACACAAGTCTAAGGCCTTCCTCTAAGTCACCTTTTCCTATCAT
-AGAACTCACCCAGCACTTCTCAGGATAAATGATACTGCAGAATATGAGTTTGCTTCAGGG
-AAATCCCATACCCACTGTGAAAAATATGGTAACTctccaatatcagttctccccctttgc
-taagtaatagaaccctccaaatattaggttgacacaaagccgaccagagaaaaggctgaa
-tttcccaTCTAGAACTGGTCATTCTTCAATTCAGACCAGCCATAACTGGACACTTTTGCA
-AATATTCATTAATAGTCTTGGTGAAAACCTCAGATTTCCATTTTGCCAAAGTTTCCAAAG
-GAAAAGAGGGCCTTTTTCTAAGCCCTGAGAGCCCCACAGTGACAGTAAGTTCTCCCTTGG
-AATTCACCCTGGCATACCTCGGTGCTACCCCAGATCCTTTCCCTCAGGGGCTATGAGATT
-AGGTTTCATggccgaatgtgacggttcatgcctttaatcccaacactttgggaggccgag
-gcaggaggatggcttgagcccaggagtttgagaccagtctgggcaacatcatgagactct
-gtctatgtaaaaaataaaaattaaccaggtgtcatggtacataactccagtccctgctac
-tgtggggcaggggctgtgggggctgaggagggaggattgcttgagcccagaaggttgagg
-ctgcagtgagctgtggtcgtaccactgcactccagcctgggcaacagagcaagaccctgc
-cttttaaagaaaaagagaaaGGAggttgggcatggtggctcatgcctataatcccaccac
-tttgggaggccgaggcaggtggatcacctgaggtcaggagttcgagaccagactggacaa
-catggtgaaaccccatttctactaaaaatacataaattagctgggtgtggtggcgggcac
-atgtaatcccagctactcaggaggctgaggcaggagaattgcttgaacctgggaggcgaa
-ggttgcagtgagtcgagattgtgccactgcactccagcctgggtgacaaaagcaaaactc
-catctctaaataaataaataaaaataaaaaaGAGAGAGAGTGAGATTAGGACTCACCCTG
-GCCATCCCAGGTCCTGCCACTCCAGGTCCTGCCACTCAGGGACTGTGTGACTCTATATTT
-TTTTTAACTTCTCAGGCCAATATTAGAACCCAATCTGATCAAATTAGAAACCTATGAACA
-TTCCACTTACTAGCAGTGCATTCATGGAGCACTTCACAGGGAGTCACCAAAGTATCAATC
-AATCAATAAACTACTACCCTACCCTGAACTAttaggttggtgcaaagtaattgcagtttt
-tgcattgttggaatttgctgtttgatattagaatgcgttcttaaataaatgtggttatgt
-tacactttttttttttttttttttgagatggagtttcgctcttgttgcccaggctggagt
-gcaatggtgtgatcttggctcaccgtaacctcctcctcccgggttcaagctattctcctg
-cctcagcctccctagaagctgggattacaggcctgtgccaccatgactgactaattttgt
-atttttagtagagacggggtttctccatgttgatcaggctggtctctaactcctgacctc
-aggtgatgcacccgcctcagcctcccaaagtgctgggattacaggcatgagtcactgctc
-ccggcctatacatcattttaataggcatttctcactttatgttttttgataatgacttat
-tacttgctgttgattttatgtttattttagactatggaaatgatgtcagacaaaaagaaa
-attcaagcgattttcttattcaagttcaaaatgggtcgtaaagcagcagagacaacttgc
-aacatcgactgcgcatctggtccaggaactgctaacgaacgtacagtgcagtcgtggttc
-aaaaagttttgcaaaggagaggagaacctcgaagatgaggaatgtagtggccggccgttg
-gaagttgacaaccaccaattgagagcaatcattgaagctgatcctcttacaactatacaa
-gaagttgctgaagaactcaaccttgaccattctatggtcgtttggcatttgaagcaaatt
-ggaaagatgaaaaagctcgataagtgggtgcctcatgagctgagcaaaaatcaaatcatc
-attttgaagtgtcgtcatctcttattctacgcaacaatgaaccatttctcaattggattg
-ggacatggcaatgaaaagtgtattgtatgtgacaacctgctacaagcagctcagtggttg
-gaccaggaagctgcaaagcacttctcaaagccaaatttgcaccaaaaaaaaaggtcatgg
-tcactgtttggcactgtgatccactacagctttctgaatcccagcgaaaccattacctct
-gataagcatgctcagaaaatgagatggaaatgagatgcaccgaaaactgcaatgcctgca
-gccggcactggtcaacagaaagggcccagttctttacgacaaggcctgacctcatgttgc
-acaaccgacacttcaaaagttgaatgaattgggctacgaagttttgcctcatctgccata
-ttcacctgacctctcgccgatcgactaccacttcttccaactttttgcagggaaaatgtt
-tccacaatcagcaggatgccgaaaatgcttccaagggtttgttgaatcccaaagcacaga
-tttttacactacaggaataaacaaatttattcctcattggcaaaaatgtgttgattgtaa
-tggttcctaatttgagtaatcaagatgtgtttgagcctagttatagtgatttaaaattca
-cggtctgaaatcgcaattacttttgcaccaacctaaTATGTATGCAGGTGAATTCTGTCT
-GTCTTTGCTAAGCAGTGAGGTGATCCCGTGCTTAATGATGTTACTGCAAGCATGACAGCG
-GATAGAAGCGGGGAGGGCCAGTGATGAAGATAACTATTAGAGAGGGCATCCCAGTTGATT
-AGAAGCCCATCCCTAACTAACTACATCACTTCTAAAGGCCTGATTTCCAGTCCAGAACTA
-CTTTGAAAATGTTGTTTATGAACTCAAATTGTTAGTTGTAAAAATTATGAAATGAAAGAC
-TATTATGAGCATATATAAAATAAATTAGCCAGTAAATAACCTAAGATGATGAAGAAAAGA
-GCACTAAATAAAACCATAAATAAAAAGTTGGGAGCTTGGTAATGTCCAGAAAAAAATATA
-TATTTACTGTAACAAAGCAAAGGCCTTTTGTTAGTACATGAGACTCAGAATGCCTTAAGG
-AATGTGCTGGGCTCTAGAGGGCAGGGCAGGCACACAGCAGCTGGCACTGTTTGTCCAGAC
-TCCTGCCTGGACAAGTTGAATTAGAAAAATCCAAGCAAGAAACAGTGTCACTACTGGCTT
-CCCTGCTCTCTACTCATCTGCTCAGAGAGCTGCATGCTAGTTTGGCCTGTCCTGCACCCG
-TAGAGGACAATAGGTTATCTACATCCTTCACCACTAAGTGAGCCAatgggctgaactgtg
-ttcccctcaaaattcatatgctaaagccataacccacaatgtcactgtatttggaggtaa
-agcctttaaagaggtaattaaggttaaaagaggtcatatgagcaggatcctatccaacat
-aattggtatctttgcgagaagaggaaaagataccaaggatatgcatacacaaagaaaagg
-tcatgttagggcacagcaagaggtcagccatctgcaagccaaggaaggaggtctcaggag
-aaaccaaacctgccagcaccttgatcttggacttctcgtcttcaggactgagagaaaatg
-agtatctgctgtttaagccacacaggctgtggtattctgcgatagcagccctagactaat
-acaGGCCATAAAAAAGATAATATCCTTTCTTCCTTCTTTCTGAGCTCTGGGTAAATGGAG
-GTCAGATAAAgccaggtgtgatggcacatgcctgtattacccgctactcaggaggctgag
-acaggaggattgcttgagcccagtagttctaggctgtagtacactgtgattatacctgtg
-aatagccattgcactccagcctgggcaacatagtgagaccctgtcccctccccaaccaaa
-aaaaaaaaaagaaaGGAGGAGGGGGAGGAATGAGGTAGGAACAATAGGAACAACAGATGC
-tttttttttttttttttttttgagacagagttttgctcttttcacccaggctggagtgca
-atggcgtaatctcggctcactgcagcctccgcctcccaggttcaaacgattctcctgctt
-cagcctcccgagtagccaggattacaggcacccaccaccatgcctgactgatttttgtat
-ttttagtagagatggggtttcaccatgttggccaggctggtctcaaacacctgacatcag
-gtgatccacctgcctcagccttccaaagtgctgggattacaggcgcgagccaccgtgccc
-ggccAACAGATGCCTCTTAAAACACCCTGAGCCTCTGCCTTTATTCTAAATTTGTCAGTC
-ACAGGCCCGGGAGAAAGCTGAGCAACTTCAATAGGATTTTTAACTCAAATCTAAGACAGA
-AGTTTATATAAAGTTGTAGTCAGACTCGGCTGTGTTCAGAAAGTATATTTCTTCCATTGC
-TCAGCAATTATTTATTAGCATCTATTCTGGTCTCTGGGCAAACATTAAGGACTAAGAAAT
-GAATGAACTCTAATCATTTTCATTCTTTAAAAATTGTGCAGCCAAGAAAGAGAAATAAAT
-AGGCAAATGACCACATAACAGCAAGACATGTATAGTGAAAGTCATGCTCACTGCAATAAA
-AAGAACCTCTAGCTCTGAGTGAGGAAGGGGGAGTGGGTGCTGAGGTTGTGGGAAAGAGGA
-AGCGTGGGTAGAGTGAGGCAGACTGCTGTGGAGTGGAGCTGTGGGAGTGGCTTAGAGCTT
-GCAGGAGTAAGGGAATGAGGTGAGAGTGGAGGAACGGCAGAGTGCATATTCTCAGTTGCC
-AGAGATTCTGGGCAGCTTCTTTCGATCTTTGAGGATTTGGGCAGGAAAGGGTGAGAAAGG
-CCCATCTAACAATCCTGCGCTTCATAATCCCCTGAATCCTTGAAATTATTACTAAAGCTT
-AATGCTGGGAAAGATCTCTGATTCCCCTGAATCTGATTTGGCAAGCCAATCAATCATTTG
-TGTTAATTGGGAAAGAAATCAAATATTTCTGTGTGAATATACTCATCTCAAAACATTTTC
-AAGATAAAGTGTTTTACAAACTATGCTTCTGAGTCAATAGGATTCAGCTGTTTCGTTTTC
-ATTTCAGCAACTTAGAGGAAGTTTATCTTCAGAAAAAATTGCTATAAGAcacttcctata
-agccagccctgtgccaaattatttacatgaatcaccttctctagtctttaaacagcccta
-ttatgaatggacaattatctcaatttgacagatgatgaaactgaggcttgaagagattaa
-gttacctaagatcacacaATATGCCTCCAAAATTCGAAGAGGGCCGAAGGTTGTAATTGT
-GCAAGAAGAAGCAAATTTTCTATCTCTTTGAACCATAGACTGTGGATCCACTGCAACCTT
-GCTGAAATGGAAGTCTTTGTTGTTTCATGGGGGTTTTGCTGAATCTTCTGGCTTGTAGCA
-AGAAACTACTTTATCTTCACCAGATCTTATCAGCACATTGTATACCTGTGTGATACTCTG
-TGTGCTAATAAAATTATCAAGCTTCCTGTGGGTCCAAATTATGGCAAAAACGTAAGACAA
-AATGAtaatcccagcactttgggaggccgaggtgggtggaacacaaggtcaggagttcaa
-gaccagcctggccaacatggtgagacccccgtctctactaaaaatacaaaaattagctag
-gtgtggtggtgcgcacctgtagtcccagctactcaggaggttgaggcaggagaatcgctt
-gaacatgggaggcggaggttgcagtgagctgagatcacaccactgcactctagcctgggt
-gacagagctagactccatctcaaaagaaaaaaaaaaagaaaaaGCACACGACTAGTTATC
-ATAGATACTGTTGGCTACTGTTTCCTCTCTGTTGTGTGGGTCTGAGCAAAGAGAGGGAAT
-GGGATGCACCGTGCTTTCAGCTCTCTATAGTCTCTTCTGGATTTCAGTGTTTCAGCACAG
-CCCTAAAAACTACCACATGATTATGCCCCACGTAACAGTCAGATCACCTTGTCTCTAGAG
-AGACCACGCATCCATAACGAAGAACCTCTTATAACCATGGGTTCCACATCTTTACGGCTT
-AATCACTGATGCTCTCAGTGAACCTGAAAATTGATCCTGCTGAACAAGATCAATAAACAG
-AGTTTTGATTCAAAGGCAGCCCAATGAGTTAATAAGTGCTCCATGACAATGCCAAAGAGG
-ATTAAGGAAAGAATAGCAACCTGGAGGAAGATGTATAGAAAAGCAGAccaggtgcggtgg
-catgcgcctgtagtcccagctacccaggaggctgaggcaggtgaatcatttgaacctggg
-aggtggaagttacagtgagccgagatcacgccactgcactccagcctgggagacaaaacg
-agactctgtcaaaaacaacaacaaaaaaaaaCCAATATTAATAATGCAAATATTTGAGtt
-acagggcatttttaagagccagatacagtactgggaaccttgagtatattatctcattta
-gtccttaaaacaaccccatagactttatataaataatacaactgaaagtttaacttaagt
-tgctgaagttcacagataagcagtagaatcaggattggaacccatgtctcatcatatcag
-agaccctacgcttaagtgctatgctTCCTTGACTCTCACTGGCAACAGCTTTGGTGCATG
-TACCTAATGCCAGTTATATCATAAAGGATCTACATGGATAAGCTTATTTCATACTCTTAG
-AAATGGTTTGGAAGAggccaggcgtggcggctcacacctgtaatcccagcactttgggag
-gcctaggcaggcagatcacgaggtcaggagatcgagaccatcctggctaacatggtgaaa
-ccccatctctactaaaaatacaaaaaattagccaggcatggtggcatgcacctgtaatcc
-cagctactcaggaggctgaggcaggagaattgcttgaacctgagaagcagaggttgcagt
-gagccaagatcacgccactgcactccagcctgggtgacagagtgagacttcgtctcaaaa
-aaaaaaaaaaaaGTTTGGAAGAAGCTATAGAAGTCTCGATATTACTGGTGACCCAGTATA
-AGGAGGAGTGGTGAATATCCCTATTCTAAAGGATTTCCTAATCCTGAAGGATTTGGACAG
-CTCCTGCAATTGCCAAATGTAAGCGGCCTGAAAAGTTCACACTTAGATTATTGCCTTTAT
-TTTTGGCTCCCACACTGTAAAAGAAATTAGAATTAGAGCACAGATACAAAAGCTATGATA
-ATGAAAGTCCTAAAAAAAATTCCATTAAGAAACACACACATATAAGTCAGAAATTCATTG
-GGAATACCTTTGCATTTTAAGAGATGAGAAGGAAAGAGTTAACAGTAGTCCTGAAATCAA
-TTCTCTCCCTTTAACAGGAGATACTTCTGGCAGGAAAGAAAAAAAAAAAAAAAAAACTTG
-ACTCTGACTCTGTCAGATCTCCTTATAACATGCTAATAAGAGACCTTCTGGTAAATATGC
-TAATGATATTCACTAGCAGAGGGGTCTTTATGTAGCAGAATGCATCTGCTCAGTCCTCAA
-TTGCTTCTGGTAAACAAACTTAGAGTCTATGAATTTACAGGGCATGGCTCCTTGAAAAAT
-GTCATGTGTTTGTAATGCTAAGTAATTGCCAGAGAATAAAATGGAGATGTTTCTAGCTAA
-AATAGCCCCTTTGGGTAGCTGATGGGCACCCATGCATCACAGACATCACTTAGAGATCTT
-TCATGTTAAACCTATCCCATGGCTTATTTTCATGAGGCAAGAAAGGACCTGGGAAGTGGT
-GTGGACATCCCAGACTTTTGCATTTTTACCTGCTTCGTAATTACCCGTATCCTTGAAATT
-ATTACTAAAGCTTAATGCTGGGAAAGATCTCTGATTCCCCTGATTCTGATTTGGCAAGCC
-AATCAATCTTTTGTATTAATCAGGAAAGAAAGCCAATATTTCTATATGAATATACTCATC
-TCAAAACTTTTCAGAAAAGATATTTTCCATACATGGAAATAGCTTAATTAACtttttctg
-attatgaggttacttatagtcattttgaacactcagacaaaacagaaaactttatggaag
-ataaaataagaataacaaaatctttcccaaagagaaagaccattaaatttttgtatatat
-ccttccagagaatacacaaattatatgtatatatattttacatgtatacatatataacaa
-agactagcttatactacccacgctttcctgtcatttttcttttctacctaagatatcact
-gacagtcttttatataataaggatagtcctcaattatcatcattgtttaaatggaattct
-aatgtgttaagtgccataaattagcagattctctattgatagacatttagcttacttttc
-acattctcactatgagtaatgctAAGAAGGCAATATAGTTCTTGCACCTTCATGAACATA
-TTCTTTTATGCTATGTGCATTATTTTGGGTCAAAGGGCAAGCAGAGTTTCATTTAATTTT
-GTTTTAGACATGGGCTATATATTGACAAATTGCCCTCCCAGGAACAGTACACAGTTTTTC
-TTATGTTGCCTCACCCATGCCAGCAGTAGCTAGAAAATGCATTTCCAAAGACTGGTGCTA
-ATTTTCTGTGCATTCTGTGAGTGCTCAGTCAATTTAAGCAATAACCACTTAGAGTAACAA
-AATCTATTCACCCTAATAGCAGAGATTTCTACTTCATCCCTGGCTCACTGCCCAACTTTT
-GATCTCATCTAAGGCCAATAAATGTAGCTCCAGACAAGTGACACAGGTAGCTCTGTCCCC
-ATCCAATCTACCCAGCTACTTCTCTTAAGGCACGTTCTGATCCTTCAAGCATGAAGTTCT
-TGCCTCTGGCTTTTGTTTCTCTCTTGTTTCTGGCTTCAGTGACCTTGAGTACCCTGGAAT
-CTTCCATATTGAGAAAGAAATGATAGAGGGGAGGGGACATGGAAAAAAGAATTAAATATA
-TCTATTTTTAAAAAGAAAGAAAATTTTAGAATGGACATGTCTagaaggaggaggaaacag
-aggagggggacaggtataaaaactggacttctctgaatatactctgctttgaaggtttga
-ctttggaatcatctacatattttatctaatacaagaatatcgaaacttaaatggcaatcc
-caaaaatctaaaaggaatagaaatcaaattagcctctgtaataaatgggttgtataacca
-cacaaaggACTATTTGAAATGACTTTCAAAGAGTAATTTGAGAATACTTCCTTATTGGAA
-TATAACCTAAAAACAGAAGAATTGCAAACTGTTTTCAATGTTTTCAGTAATCATATTGAG
-ACTTTAATACATATATTGTGGGATAAAGGAAATGAATGTTGGTGTCACTGATAGAGATAA
-GAAATAAAAGTTCAGGTAAAAATTCTGTAAATCCTAAATTTGAATTGGAATTTTATATTT
-TATTTTTaaaatacctttttctacccccatccactgaaaagccctagaaatattggccaa
-cctagtagaaatgatttccctctcacccgggatattatctctaaatataatttaccaaag
-tcttattgaagaaattgctgtttctgagcttgaagcaactatacaaatgtacctggaaga
-ttttaccatactggaaaaaagcagcttgacaaagactactgaagtcatgtcaaaaaaaac
-aaagaagtcaacttgaaggggctttctcttggcaaagatgggaaaatgtgaaccttgata
-aaaaataattgcatgcattattcacagtaaccaagatatgtaatccacctaggtgtctat
-ggatggataaatatataaagaaaatgtgatatacacaatgaaatattattcagcctttaa
-aaagaaagaaatcctgccatttgtgacaacacagatgaacctggaggacattatgctaag
-tgaaataagccagacacaggcagacaaatactgaatgatctcacctatgtgtggaatctt
-aaaatgtcaaactcatggacacagagagtaggatggtggttaccaagggagttgagggaa
-atgaagaagtactagtcaaagggtacaaagtttccgttatgcagggtgaataagttcggg
-agcttactgcatagcacagtgactacagttaataatactgtgttgtatacttgaaatttg
-ctaagagtagatcttaaatattgttaccacagaaaaaaatggtgactatgagaggtgatg
-aatatgttaattagcttgatagtggtaatcatgtcacaatgtatatgtctatcaaaacat
-cacattgtacgtcttaaatatgtacaattattatttgtcaattatacctcaataaagctg
-gaaacataaaaataaaataactacaattaattgaaacatatcaaacatgtccaaaactga
-taaagaaaggtaaagaatttggcctggcacagcggctcacacctgcaatctcagcagttt
-gggatgccaaggcaggcggatcacctgaggtcaggagtttgagaccagcctggccaatat
-agcaaaaccccatctctactaaaaatacaaaaattagctaggcgtggtagcgggcatctg
-tagttccagctactactcaggaggctgagatagagaatcacttgaacccagaggtggagg
-ttgcagtgagccgagatcacgccactatactccagcctgggtgacaaagtgagactctgt
-ctcaaaaaaaaaaaaaaaagaaagaaagaaaagtgaagaatttatcctggcttttctgta
-aaaactgcacctcagaagaaccaaattattgataaggaattttgctctttagaaatattt
-ccagctaataaatgaaggaataatagcattgagacaaatcgccattttgtaatctcaggt
-gaatttacggatctaggcaatgatcattaatggctgagaaaatcacaacaaaaagaacaa
-ttagacatttgtgcctcctgatagaagtatacaatatcaccttcaaagctattttgccaa
-aaaagaaaaaaaaaatcaacccaaatctaatcaaggctcccactctaactcccaagctct
-aggatataccaaggacaaaggaagatcatgaaataccaccatggggattcaatcagcaaa
-ttcTGAAATGCAACATTATCCTTCACCCTGCTTGGCCTAAAAGTACAAAATAACACGAGG
-AAAAATTAGTTTCCAGAGCCTGTTATATTTTGAAAAATCATCAGAAAACTGAGAATCAAG
-GATAGAATTTCTAGAAAGTTCCTTCCCCTAAAGCTTTCACACTTGCCTCAGTGTATATAT
-GTGGCTATACCACTGACAGGCCGCCAGTCATTAAATTCAAGCTCCAAGAGACAAACTCTT
-GAAAAAAAGGCAGCCTAGGAGAAAGCAACATGATTTTTCACATATTTTAACTTGGTTTTT
-CTCATAAAATGGTTTCTGAATGTTTCTTAGCTTTCAATGGGCAATAAATAACTTTTAGGG
-AAATAGATGTGAGCCAATCTGAGGAAGTATTTGAGATGAAGAGAAGGCTTTGCTGTCTAT
-GAGGAGTGCATTAGAATAGAATCGCTCCAGGAAAAGGTCACCTGTGTTGATTGCCTTTAT
-GAGGTGACATTTAAATAAAAGTACTCGTTCAGTTTTCATTGAAAAACATTAAAAGACATC
-TCCAAAAATTTTTTTGGGAATGTGAGAAACTCTGCTGCACAAATGATCATGTTTTGTCAA
-ATAAGATGAAAAGAAAAAAAACACACACAAAAATgaaaaaacagatggaggggtaacata
-aattaagaaactcagaagacacatctacaaattacaatttatggatcatatttgaatgct
-gattctaaaaatttgaaaaaatatgcatttgagaaaatgaatgctgacttcatagtttat
-aatatgaagTCatattataaaatataataagaatgaaatattaataatttatCAGGTATG
-ATAATGGTTTTAAGGATGTGttttttgtttgtttgttttttgagacagagtctcattctg
-ttgcccaggctagactgcagtggcgcgatctcggctcactgcaacctctgcctcttgggt
-tcaagcgattctcatgcctcagcctctcgagtagctgggattacaggcatgcaccaccat
-acctggctgatttttgtatttttttattagtagagatgggcttttgccatgttggccagg
-ctggtctggaacttctggcctcagttgatccacctgcctcggcctcccaaagtgctagga
-ttataggcatgagccaccacgcccagccTAAGAATGTGTTTTTTaactgtatatatttaa
-ggtgtgcaacatgatgtgtgtatgtatatatatatatatatatatatatatatagagaga
-gagagagagagagagagagagaaataatttctgtggtcatgcaaattaacatatccatca
-tctcacagctacaatttttgtgtatgtgtggcaagagcacctaaaatctactcttagcaa
-aaatcctgaatacaatacgatattattaactattgtacattagacctctagacttgtttc
-tcttacatatctgcaactttgtgtcctttgacctacatttccccatttcctacccctcca
-ccacaccccagtaataaccactttattctctatctctgcattcaactttgttttttctag
-tttttaaactctgcatataagtgagatcatgcagaatttctctttctgtgtctggtttat
-ttcacttagtacaatgtcctccagattcactcacgttgccccatatggcagaatctcctt
-cttttttaaggctgaaaaatattccattgtatatataccatagtttctttgcccatttat
-ccttcaatgaatacttcagttgtttccacacctcggctattgtgaataatgctacaatga
-acgtaggagtacagatattttatgaggtgatgatttcacttcctctaggtatatacccag
-aggaggaattgctgggtcctatggtagtgctatttttaatttatttaggaaccttcatac
-tgttttccttaatggctccactaatctacattcccaccaaaagagtatacaggttccttA
-AGGGTGTATTTTTCAAAAGGGTCGCCGagagatacctattaaaatatatacaagagaaat
-cttataatatcagggatttgcttcaaaggaggggaaatccaagaaggggaaagtaaattg
-ggttatataagaaacaagattggccatgagttaatgttgaatttggatgatgaatacatg
-ggggctcattatattattgcttgacttttacacacatttaaattgttcAATAGTAtgtat
-tagtccattctcacactatataaagacatacctgaaattgggtactttataaaggaaaga
-ggtttaattgtctcacagttctgcagggctgtagaggcctcaggaaacttacaatcatgg
-tggaaggggaagcaaacacatccttcttcacatggtggcagcaagaaaaaatgcagcaca
-aaagggggaaaagccccttataaaaccatcagatcttgtgagaactcacacactatcacg
-agaacaggatggggaaaccactccgtgattcaattatctccacctggtccctcccacaaa
-acgtggggattatgggaactacaattcaagatgagatttcggtggtgacgcagcaaaatc
-atatcaAGTAATAAGCTGAAAATACCCTTTATATAAATAATGATAACACTGCATGGAAAT
-AAAGAAAAATCTTTAGGATGCAGCCTAACTGGTATTTACGATTTTTTAAACCCTGGATTA
-AACGCATCTTTTTATAAATGGAAATAATTAATGAAGAACTGAGATGGAATCAAAATAGCA
-AATCATGcacacacacacacacacacaAATTCTGTTTAGAGAACTAAAACAATATGTCAG
-AAACGTTGAAGAGTTCATGtgcatcagttagttcctgccatgtaacaaaccacaccaaaa
-tttagtagcttaaagcaaaatcatttatgtatgtcataattctatgagttacaaattgag
-gctgggctcagctgagaggttcttctcttcacttttgggctcatgcatgtgaggattaat
-gggagctggcaggtctagggtggactccactggaatagtctgtctctgttccaaaaggtt
-agctgaagcttgttttcctggcaacagagcagagttctgagagagcgtgagtatgcaagg
-cctcttgaggcccaagcctaggttcagaacaggaatcacttctgatatactctattggcc
-aaagttagtcccaagtccagatccagGCTTGCTCAAAACAGTGGCCCATCTCTCTGGCCC
-CAATCTCCATAGTTCTGGTAAACaaaaaaaaaagaaaaagaaaaagaaaaagaaagaaag
-gaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggaaggCTGAGATAACA
-TTGGGTTTTTCCAATGATAAAACCTAGAATTAATGAAGAGCTAAAATTAGTAAATTTTCA
-AAAATAcaaaacacataaaatgtaaaactgctgaaaagataagaagaaatgaataaatct
-ataattaagacggaaatctttaataggccataggcctcaggagtcctcaaagtaaacaaa
-aaatgcacaagcatgcttatcttaaaggattaaataggtatttttaaaatattgatttaa
-tacacatgtagaactattaagtaacaaaatagatacatacaattttaaagcatagctaaa
-aaatggctaaaaattgattattataatacatgtgtatttcaaatattccaaaagaagtca
-gtccactcatataaactaaccacaatataacaacattagaacttccaaaaaaggtatgtg
-tatatgaggtggggttttttcaaccttctaaataattgtgggttaaaaaaacataaaaac
-tacaagattttggaaatgaatcaaaatgagagttctacatataaaatcttcatgaaaatg
-gttaaagtggaaattagatgaaagatttaaaggcatttactagaaaacaagaaaTTTTAC
-ATTTTTAAATTAAAAGCTAATTAAACTCAAAGTTAAATTTAGTTAATTAAACTCAAAAAG
-CTAACAGACCTGAACTTGCTCAGCAGCCTTACCTAAGAATCATCTATTTTACCGATCTTT
-TCAAAGAAATGTTTTGTTTTTATTGATCAATGCCTCCatatttttgaaatttttatagtt
-ttcatttattatattgacaaatttttttaaattattaatGTGGCGCTGGCAATACACTTG
-TGAAGCATTTAGTTATTTATCCTTAAAATATATTAGTACTTggcggagtgcagtggctca
-cgcctgtaatcccagcactttgggaggctgaggtgggcaggtcacaaggtcaagagatgg
-agaccatcctggccaacatggcgaaaccccgcctctactaaaaatacaaaaaatagctgg
-gcgtggtagtacacacctataatcccagctactcaggaggctgaagcaggagaatcactt
-gaacctgggaggcggaggttgtagtgagccaagattgggccactgcactccagcctggat
-gacagagcaagaccctgtctcaaaaaaaaaaaaaaaTTAATCCATGTGCACAAAGAGGCA
-TAATCAGAAATAATCATTTCCAATTTTggctgggcgcagtggctcatgcctgtaatccca
-gcaatttgggaggctgaggcgggtgaatcacctgaggtcaggagttcgagaccagcctgg
-ccaacatggtgaaaccccgtctctacttaaaataccaaaactagcctggagtggtggtag
-gcacctgtaatcccagctactcggggggctaaggcaggagaattgcttgaacctgggagg
-tggaggttgcagtgagccgagatggtgctatcacactccagcctggggaacaagagtgag
-atgtcatctcaaaaaaaaaaaaaTCATTTTTATTTTGTTTTTAAAAAGAAAAAATGggcc
-gggcgcggtggctcatgcctgtaatcccagcactttgggaggccaaggcgggtggattac
-ctgaggtcaggagttcaagaccagcctggccaacatggtgaaaccacgcctctactaaaa
-atacaaaaattagccagaagtagtggcacgtgtctgtaatcccagctactcaggaggctg
-aagcaggagaatcgcttgaacctgggaagcagagtttccagtgagccgagattatgccat
-tgcactccagcctgggtgacagagcaagactccatctcataaaaaaaaaaaaaggaaaaa
-TTGGAAAAATAAAGTACATGCAGTTTATTTGACAGAGGGATGTTTAACTGAACCACACTA
-CATCCATATATATGAAGTTATGCAGCAATAGAAAAGAATAATGGACATTTATATTTTTAG
-ATATAAAAAGAGCTGTTGAACCTATCATTGAAATTTTAAAAGGAAGCTGAAGAACAAGTA
-CAGTGTAATAAATTATTTGTTTTTtacaatttaattatagagtaaatgtgatctttcttg
-gtatatagttctatagattttaataaatatttggattcatgtaaccaccaccacaaatag
-gacacacaacagtttcatcaccctaagaaaagttcccggatgctcacccctctgtagcca
-aaccgtcaccccacccataatccctggcaaccactgatctattttccatcactataattt
-tgccttttccaagaatgtgacataaatggaatcatgtagtatttaacgttttgagaccag
-cttctctcagcatgtgatatggtatgtacctgtgtctccacctaaatctcacgttgaatt
-gtaatccccgatgttggaggtagagcctagtgagaggcgattggatcatggggacagatt
-tctcatgaatggttcggtatcatccccttggtactgtcctaaggatagtgagtgagttct
-gcagagacctggtttaagcgtggagcacctccccactctcttgctcctgctctggctatg
-ccatgtgcctgctcacccttaaccttccaccatgattgtaagtttcccgaagcctccccg
-gaagccaagcagatgccagcatcatgcttcctatatagcctgctgaacagtgagacaact
-aaacctcttttttttttagcaaatgacccagtcccaggtatatctctataacaatgtgag
-aacgacctagtaacagcatgtctttgagattcatccaagtttctaccagtatcaataact
-cattcctttttactgctgagtatgattgtattctatggatgtggtacatctgtttatcca
-ttcattcattgaagggcatttgggttgttttcagcttttggctatcacaaataaagtttc
-taagatggccaggcatgatggctcacgtctctaaccccaacactttgggaggctgagatg
-ggcgttgaggtcaagagtttgggaccagcctggccaacatggtgaaaccctgtctctact
-aaaaatacaaaaattagctaggtgtggtggcacacacctgtaatcccagctactcaggag
-gctgaggcaggagaatcacttgaacctgggaggtggaggttgcagtgagccaagattaca
-ccactgcactccagcctaggcaatagagagagactctgtctcaaaaacaaataaataaat
-aaataaagttgatatgagcagtttttacagatgtttgtgtgaccgtaagttttcgtttca
-ctagggtaaataccaggttcaggattgctaggtcctgaggtacgtgtatgtttacctttc
-aaataaactgacaaaccattttctagagtgactgcaatttccagttgttctgcaacctca
-ccagcaattggtgttgtcagaaactttttattttcataattcttatcaatgtgCACAATT
-GTTTTTAAAATTCACAGAATTAAAGGAAAATATATTGTGCACTATTTGTGTAATTaaagc
-aaaacacaaacacataaacggaagacaaaaataagaaactaattcaagaaactaaagaaa
-gaaaaacaaaaTTAACTTTTTAAAATTAGAATAAAGGCATATATATGTAATAGGGATAGT
-TTGAAACACTCCCAAACATCTGCTCTGAGCCAACAACAATCGGATAGCgtgagggcagat
-acaaattaaatatgagacttaactctccccgttaaaaataaggaaagagacttacccaac
-acccctcccccccgcccttctctttctctgtctctttgaaatgtatgtaaatctttttaa
-aatgtaaataggcctctagccagttttacaacccaggaatatctttgtcaaatacctagg
-agccatctctttgaaatgtaagcatccagaaaggtagtgctcctatctctgaatttatat
-gagtgggtaggtctctaactttggcaagttccttgcttcaagttgcaaagccacttcctg
-tcacaaggatgtgagaattttgtttttcctttggttaaagccaaccagcgaacacagatg
-gccactccaattatcaggtgaatctaggatgaactatgtgtatgtcaaatggtacttcta
-agttctcctatttgagaaccagttattgtttgtcttgagagcatatctgtaatgggtttt
-atcttcttcaggatataaacaagtaggatttctttctgtctttgcaaactctttgtgaat
-tgcctgtgatgtgtctcacattctggttcaatgcttattcaatggcaattgttttctttc
-tcttctacctttgtggagaggttttctaggttgagagaagattttgtttttaattatatt
-tcccccacaATAGCAAACACATCCCCAACcacatacacacacacacacacacacacacac
-acacacacacacaacaggtaattagacaggcctgagcagggcaggagagggctcttcccc
-cacccactacgaatgtcagtgatggttccaaaattatcacattgcctctctaaaagtgat
-aaattggGCAgcgcagtggctcatgcctgtaatcccagcactttgggaggctgaggtgga
-cagatcacttgaggtctggagttcaaaaccagcctggccaacatggtgaaaccccatctc
-tactaaaaatacaaaaaatagctgagcatggtagtggacacctgtaatcccagctactca
-ggaggctgaggcaggagaatcgcttgaacccagaaggttcaggtttcagcgagccaacat
-tgccccactgcactccagcctgggcaacagagtgagactccatctcaaaataaataaata
-aataaaataagtgagaacatatggtacttatctttctgtgtctgacttgcttcacttaag
-ataatggcctccagttatatccatgttgctgcaaaagacatgatttttgtggagggattg
-tattccattgtatatatagaccataatttctttatccaatcatctgttgatggacactca
-gttgattccatacctttgccatcatgaatcatgttgtaataaacatacaagtgcaggtat
-cttttgatgtgattatttcttttcctttgggtagatacctagtagtgggattgctggatc
-aaaAtggcaggtgcctgtaatcccagctactccagagactgaggcaggggaatcgcttga
-aactgggaggtggaggtttcagtgagccaagatcatcccactgcactccagcctgggtga
-cagagcaagactctgtctcaagaaaaaaaaaaaaaTgctgtgtgattacccttatatggg
-tttcctggatgagccatttgttaaattaatttttgttggaaatttccccgcagagctgtt
-gcacattgtggggggttaatccccagacactcccatgaggccccagtcacccaggggtgc
-ctttggctgggaggagcaagtgccctttctcctaggagctgaaaaactcagtctcttatt
-tatctatgaaaacaacagttcagtttctcacataaatgtgtacagataaaccgaatttag
-acagattttaggagaaaaagcaattgagaattccttttagaatgcatctcccaactagaa
-ttaggatccttaaacaaccacttcttaggagaaaaccagctcagaataaatcaaggacca
-tcaaccaaagggaggtctggggctcaggaggacttaccagttccaccagaggagaagctc
-gaagcttcaatgggcccctgctggcaccttagctctggttttgggcaactcctttagggt
-cctgagtcttccctgaggcctcacgtgtttgggcaccaaattattgttgacgaaaagagc
-caaactctgtaaaatattttaagagatttattctgagccaaatatgagtgaccatggccc
-gtgacacagccctcaggaagtcctgagaacatgtgcccaaggtggtcggggtgcagcttg
-gttttgtgtattttaggaaggcatgaaacatcaatcaaatacatttaagaaacacactgg
-ttacttggaagtccccgcggggctgggggcgggtatcaatggaaaggaatgttcaggtta
-acataaaggattgtggagaccaagttttattgtgaaaagaaatctctcagatagcagact
-tcagagagagagcagattgtaaaatgtttcttatcagacctaaaagggtgcctggctctt
-agttgattatctcctggatctggaaaggaaggggaaaaagggggtgggtgggtgtggggg
-tatagaatgtggatctttttccaccaaagattttgtaaggcaatttcaaagtatggcaag
-gcaatatattttgtgataaaacattgtgattttttttttttttttgtgagacagagtctc
-actaggtcccccaggctggagtgcagtggcgccatctcagctcactgcaaccttcgcctc
-ccgggttcacgccattcttctgcctcagcctcccgagtagctgggactacaggcgcccgc
-caccacgcccggctaactttttgtatttttactagagacagggttttactgtgttagcca
-ggatggtctcgatctcctgacctcatggtccgcccgcctcagcctcccaaagtgctggga
-ttacaggcgtgagccactgcacctggccaaaacattgtgattttcttccttgttatgcca
-gagtcagattgaaaagtaagtcacaatatacagggtcaaataaaacccatcttgtaagaa
-tttatggtttgtagggcataactccctagaccccttaggtaggaatttgggcaagataaa
-aaatcagagtttagtcctcaattccttaagataaatctctttctctatatatatctctct
-ctatctcatatctccatcctattctctggaaaactctgactaatgcaAGAAATTAAAGAG
-ACAAAACACATAATACAATATCTtaaacaacaaaatactattcagccataaaaaagaatg
-aaatcctgtcattcatggcaacatggatgagctagagcagtggtccccaacctttttggc
-accaggcactggtatagtggaagacaatttttccatggtcggaagggggtgggaggatgg
-ttttgggaagaaactgttccatctcagaccatcaggcagtagttagattctcataaggag
-tgtgcaacctggatcccttgcatgcgcagttcataatagggtttgtgcttccatgagaat
-ctaatgcttctgcacatctgacaggagatggagctccggggtaatgctcacctgccactc
-acctcttgctgtgctcccagttcctaacaggccatggtccccataccaatctatagccca
-ggggttggggacccctggcctagaggacattatgttaagtgaaataagtcaggcacagaa
-acataaatgctgcacattctcacttatatgtgggaactaaaaaagttgagcttacaggcc
-cggctcggtggctcacacctgtaatcccaacattttgagaggccaaggcgggtggatcac
-ctgaggccaggagtttgagaccagcctggccaacatggtgaaatcccatctctactaaaa
-atacaaaaattagccgggtgtggtggcgggtgcctgtaatcccagctgctcaggaggctg
-aggcaggagaatcgcttgaacctgggagacagagttgcagtgcaccaagattgcaccact
-gcactccagcctgggagacagggtgagactccatctcaaaaaaaaaaaaaaaagttgagc
-tttcagaagtagagagtaaaataatgtagcaggtagaagaggatacggagaggttggttt
-taacaaatacaaaatcacagctagataggaggaataagttctagggttccatagctctgt
-agggtgactgtagccaacaatcacttattgcatattttcaaatagctagaagagaggatt
-ttgaatgttctcgcacaaagaaatgagaaatgtttgaggtaccctgatttgatcattaca
-cattgtgtacacgtattgaaatatcactctgtatcccataaatatgtataattattatgt
-caattaaaaataaaattttaatttaaaaatacattttaaaaatCAATACAATATCTGACC
-TGACACTGCAATCTCAACTCAAGGAGGAAATGAAtgctgtaaaaggcattattaggtcaa
-ttggcaaattggaatacagatatatatatatatatatatatatatatggatagatgatag
-actagataaaagtggtgtccatttaaatttatggagttagtaactatactgtcatacagg
-agaatatccctattcttaggaaatacacactgaattatttgggagtaaaaggccacgata
-atataaggccatgaacatataacttatgctcaatagattcaaagaagaaaatatacaaat
-atagagagactaatatagATATATATATATCCATAGATAGAGAGAGGTGGGGCAAATGCT
-AAAGCAAGAAAGATAAAATGTCAACAATAGGCAAATCTCAGGGGAGCTGGGGAAAAGGTA
-TCGTACAATTTGTATTTTGCAGCCGGTATGttttaaattatttttaaatgaaaagatttt
-ttaatGGGTTGAGGAAATTGGAGTGACTTATATTTATGACATCCAATGGACTGTGCATGC
-TGTATGGAAACAAGGAGAAAATAAATGTCATCATTGCTTAACAAGTGAAGGGTAAAAAGA
-CAATTAACTCACTGAAGACTACGCACAGAAACACAAAAGCCTTTGCTTCTGTGGTTATAG
-GTTTACCAAAGGCACAAAGGGATTTGTATTTATTTTAGGATTATAATTTACATCACTTAG
-TTGGAAAAATTACAGATTTTAAGATATTTTTACAAATCTGAGTGACTGTAAAGACTGCTA
-AAGTCTTGGGACATATTCTTACCAAGTCCCAGATCttttgttttgttttgttttgtGCCT
-GAAATCAAACCAGGTTTTTTAGACCAGGAAAACGTGAGAAGCTAGAGCTGCTCTACTCAG
-TTGGCCCAAACCAGGACTCCGGAGATTATTCCCTTATACAGCAGGCACCACATTAGAGAA
-AGGATTCTGGAAAAGTGAGCTGGAACAGAAAAGAACTGTCTCAATGGGAAACAGACTCCA
-AAGGACGCTATTGGGGGGAGGAAAACACAAAATATTTCTTGAGAAGAATGTGGAAATGGC
-AAAGTCTCTAGCCTCCAGAAACCTTAAACTCTAGGGAAAGAAAGCAAAAATTTAGAGGTA
-AGAGTGTTCATATTAAAATTCAAACAATAAGTAGTTTTTCTATAAACTCTCTTTTTTTCT
-AATCATGAAAGTACACATAATCATTCTCTCCAAACTCAGACATTTtagacagatagatag
-atagatgacagatagatagatagatagatagatagatagatagatagatagataCacatg
-catacatactacatacatatatacctacataTGTTGGCACATAGATGTTCCTTTACCACA
-GATTAAGTTATTCTAGATGCATATCTTGTAGCCTACATTTTTATACATTTTcatcatttt
-aataactgcatactgctctattatattctgtattttctatattagattagatccatgttt
-tatcaccatttaggtagcttttggttttctgttactgtaatgttgagataaacgtcttta
-tgtacttgttcaattattcccattaaacaaaagcccaaggtacaaagtttctgagtaaaa
-aaataggcacattttaaggcttctgatatatattgccaaattgtgctacaaaagaaaaac
-tgtaccaattaacactcccagcaacaacgccaagagaatgctagtttccccacatctcac
-caacactgtctaGAACGCATAGTTTTAGAGATGAACGCTGGGAACCGACGCACTGTTTGC
-TCTACCTCTCCCCCTCCTAACAGTCTAGAACACAGGCGCTCAATAAATCAATCCAGGCTC
-CAGTCCAGTAGACATTCTGATCTAATCTGACTGCTCTGGGTAACAGAAAAGTCTCCCTTG
-GTTCACTGCCCAGTATCCTGGCATCATGTGGATCCTATAAAGGCAGTAGCTCCAAGCACA
-TTACAGAGGGACCCAACTCCATTAAACCACCACCAGCTCCCCAAGCCACCCCTTCAGCCA
-TGAAGTTCCTGCTCCTGGTCTTGGCAGCCCTCGGATTCCTGACCCAGGTGATCCCAGGTA
-AACTGGATAAATAGGAGGAAAGGAAAACTGGGAACGAGGAACACTAGCATATCTGGTTGC
-TCTGGTGATAGATGAGCCAGGTTGGGTGGAGGCAGGGCTCACCCCACTGAGTTCCAGTCT
-AAGGTAGAGATCTCCTAACAACCACCACTAGCCTTGATATCCCACACCCAAACACCACCC
-TATATAACCTTTACAAAAATTTGTTTTCTATTCTAAAATGATAGTCACCCTCAACCTAAA
-CCAAAATATCTTCTTTCACTTTATGTGAGCTCCTTATATCTAACCTCCTAAGACACACTG
-AAGGCTTCTGTCATCACCATGTGCATCCATTGAGATCAGCCCGGGTTGGAGCTCAAAGGA
-GATTTTGAGCCTAGAAGGAAGAGATTGAGGTTCCCATCCCTATGCTCAACAGACAGCTGG
-CAGGTGGGGGATGGAAGCAGACCTCTTAGAGGGCTAGTTCCCACAGGATGGTAAGCAATG
-GGTTCAGCTCAAACCCTGGGGCTAGGAGATAATGCAGGGTCagaaagagagagagacaga
-cacacagagagcagggagagagagagaTCAGAGGAGGGCCAGGCAACGGATGTGAAGAAA
-GCCAAAGAGGCTTGAGGGTGCTCCGAAGAGGCCCCTGCTGTGAGCCAATGGCAGACACAG
-AGCACTGAGGCAAACAGATTTCAGCAGATGGTGAAATGGTGCACAGCACTGGGTGAATGC
-AAAAATGCCCTGTCACTGGCAACCGTTATTTTCTTTTTAATGATTTTGGAGAAAGATTTG
-ACTCCTCCCACTTTGCCCCAGGTTGACTCATATTTACAGTTTTAGAGTCTATGAAAACAA
-GTAAGGTAGAAACACCTTAAAAGGGAGCCTGTGGGGTGAGTGAGACTAGCCCCATTTCTC
-CCTTTTGAGTATCCAAGCTCCTCCCTGACCGTGAAGACCAGGCTCCCCACCCCTGTTTTT
-ACCCATACATCCTATTCTGTAGTATCAAATTTAGCAAAAAGCTTCAAAGATGCAGATACT
-GGCAAAGAAGAAGAGCTCGTCAGACAGAGTTCCCCAAGGCCATCAATCCAGGAAGATTTT
-TGTCTCCTCATCACTGGCTTTCCCAAGTCTCATTTGCACAACATCCTAAGGATACACCTC
-AGAACAAAAAGCCAAACACTCCCATCTGGCGCTGACGCTTTAGTAGCCCTGTGCTGCTTC
-TAACCATGACTTCTCTGTCTTGTCCTCTCCCATACAGCCAGTGCAGGTGGGTCAAAATGT
-GTGAGTAACACCCCAGGATACTGCAGGACATGTTGCCACTGGGGGGAGACAGCATTGTTC
-ATGTGCAACGCTTCCAGAAAATGCTGCATCAGCTACTCCTTCCTGCCGAAGCCTGACCTA
-CCACAGCTCATCGGTAACCACTGGCAATCAAGGAGAAGAAACACACAAAGGAAAGACAAG
-AAGCAACAAACGACCGTAACATCATAATAACCACTGCTATCGCCTCCACCAACTCAGAGA
-AATATCATTTCCACAGTTCCAATTCCTCCTACATTGCTGAGTACTAGCCAAGGCTCCTCT
-TTATGGGGCAGATATCTATAGCCAACCCCAAAACTTCTGTCTTCTATCATTCTGTCATTC
-ATCTAGTAACTAATTTGGAGTTTGTATCTATCTTACGAGAACAATCATCATGCAGATTCG
-TCCACAGGGGATCtgtcagtttgggtcctccaaatgaaaaatgtcaagacagaattggac
-atgcaaaagattgactgggagaacacacctctgatggacaaaggtgagacagagcagcca
-caggcagggagagccttcagactgcaacgctggcctgatacgtgtcaaaggagagaggga
-tagaggaggattgaatagaaggagactaagactgcagctctaagaaagtctcagccaaac
-agatggggaggcccaaagcaaggcttgcccctcagaggagctcacgcagggcaggaatag
-ccaggttctcatatcccaggggttcagactttggctgagaacagcccctggagaacatgg
-ggtgactgctaccataggtctggaagtatgaggctgtccaccaactatccccttgaagca
-agttctcttgaaaggaaatctaaacagtgcacccccatggctgccacGGAGTATAAGGAG
-GGAGAGAAAGGAGCTGAAAGTCTAGGTTTGGCCAGCTAGGTAGACTGACTTGTGAGGTAT
-TTATTTATTCATTTGAGTAACAAAGCAGACAGAATACATAGCCACCATTGGTAGTACACC
-CCAAAAGCAAGGATGGCATGATGCTGGTGACTCAAACGTGCCTACTCATGGTGTCAAATT
-GGCATAATCCTCTTGGGAAGCTGTGTGGAAATAAGCACAGAGAAGCAGAACTCTAATTGC
-TTAATCCACTAAACATTACTTCTGGGAATTGGCTCATCATAAATTATCCAAGAGAAGCAC
-AAAGTTATGGGCACAAAGGTTTTCCATATAATATTATTTAAAATGCTGAGAAAATGAAAA
-AATCTAAATGGTGAAATATATACTAATGCCATCTATAAATACAAACAAATAGAATGTTTA
-TAGAATAATGGAACATAATAACATTATTCAAAATTGCATTTATGCTATAGTTGTCAAAAT
-TGTCTCCTTATATGATACAAAACTCATGAAAATTATGACTTTTTTGTTTGGTTGGAAAGC
-AGAATTATGCATAAATTTCCTCTTACAGTTCGATGCCCATTAGTTTTATATAACATTTAT
-TTGACACGTACTGACTTCTATCTGAGAAGAACAAACCAAAACACTCAGGCCTAAATAATT
-AAAAACGGTCCTAAAAACTAGCAAAccagataagaaaagatgttaatgcccattccctaa
-cttatgtcttagaccaaaattaattctagatggttttaaaatgacagtgtaaaagtaaag
-tattaaaagattgtgtggtcaaatattcaatttaagagcaaggaaattcttataaatata
-acaatagaggcagaactcatgtaagaataaattgattaggtggtattaaatattaagttc
-ttatgtatgtcaaaagatatcattttgaaattcatccatcttattgggtattgcaggagt
-tcattcctttttgtttataaatactcttccgtcatatgaatagtattcatttgtatactg
-gtttgttgatggacatttgggttgttcccagtttatggctattacaaataaagcttctat
-gaacatttatgtacaaatctttgtatggatgtatgctttcatttccctaaggtaaatacc
-taggagtagaacgtctgaatcatatggtaggtgaatgtttagcttttttgtttgtttgtt
-tgtttgtttgtttgtttgtttgttttttgagatagagtttcgctcttgttgcccgggctg
-gagtgcaatggtgcgatctcagctcactgcaacctccgcctcctgggttcaagcaattgt
-ccttcctcggcctcctgagtagctgggattacaggcacgcaccaccccccgaccccggct
-aatttttgtatttttagtagagacggggtttctccatgttggtcaggctggcctcgaact
-cctgacctcaggtgatccgcccgccttggcctcccaaaatgctgagattacaggcatgag
-aatgtttagcttttaaaggaaatacaaaattgttttccaaaatggttgtgccagtggatg
-tgcccatcagcaggatgtgaaagttccagccgttcctcatcctcaccagcatgtgatatg
-gtcagtcttttgcattttcatcattctaatagatgtgtagtggtatttcattatgctttc
-aatttgcatttttttaataactagttatcaaaaaagtatattctgtatgattctatttac
-ataaagttcttTAAATTCTTTTAAAATTGCATAcaattatttaaaatagaaagtaagaat
-ctaacgacagaaagcagatcactggttgtcaggggatgtgaaaggtgcatggagagggct
-gaaagaatgtaaagggacctgaggacactttgaggggtgatcagtcaagacacattcata
-ggccgggcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggtgga
-tcacgaggtcaggagatcaagaccatcctggctaacacggtgaaaccccgtctctactaa
-atatgcaaaaaattagccgggtgtggtggtgggcgcctgtattcctagctactcgggagg
-ctgaggcaggagaatggcgtgaacccaggaggtggagcttgcagtgagccaagatcgcgc
-cactgcactccagcctgggcgacagggcgagactgtctcaaaaaaaaaaaaaaaaaaaga
-tacattcataatcttgattgaggtaatggcttaatgggggtgtacataagtcaaaaaatt
-acaaaatggtaaactttaaatgtgttcagtttattgtatgtcaatttaaacttccaaaaa
-aGCtattattttaataaaataaataaatCTCACAGTGAAACAGAAATATTAAAGTATCAT
-AAATAGTTTAAAGACGTATGACAAACTGAGACATGTGATGAAGTATCGATACCAATAAAA
-TATAACAAGTTAACATGAAGcaacagggaaaacatgaaacccctagcagaaaatgaaaaa
-gtaacatgaactagctttttaactctataaacggcctgaaaaatgggaaaaaatctgtgt
-gactgtgatcaaataaatgcagattaaaactacaatgagatcttgttttttacctatcgg
-attgtcagagaattaacaaacccaagtctgacaaggcataaatagaaataagtctcatca
-tcagatgctccggtttataactaaatatgtccattctggaagacatttatctatacagct
-ttcaaaacccttaaaaatgttcatgttctgtggctcagagactctacttttagggatata
-ttctggggaaataattagagttcatatcaaaaagattaatgtatatacagcacaatcata
-gcagcatagtttaaagtagtgaagaggcagtggggtaagatggctgaacagaagcctcca
-ctgatcatcctccccactagaacaccaaatttgacaactatctacacaaaaaagcacctt
-cataagaataaaaaatgaggtgagtgatcacagtacctagctttaacttcatatcaccta
-aagaggcactgagaaggtaggaaagacagtcctgaattgctgacaccgcctctccccagt
-cctcaggcagcagctgtgtggtgtgcagagacaatatgtgtacttgcaggagggagagca
-cagtgattgtgggatttcacattggaactcagtgctgctagcaccaggcagaacccagca
-ggtgcctaaaagggatcatttagaccatccctagccagggggacatcacccatcccagag
-gtcggaactccagtttccgcaagcctcaccaccgtgggctaaagagctctggggtcctaa
-ataaacttgaaaggccgtataggccacaagaactgcaattcctaggcaactgctagtgct
-gtgctgggctcagaggcagtagatttagggaccactcaacctagtgagacaccagctggg
-gtgtgtgtgtgtgtgtgtgtgtgtgcgtgtgtgtgtgtgtgtgtgattctcgtgcctcag
-cctcccaagtagctggtgatggcagtggcagcccatctggagtggacgctgccatcaagc
-cagctgcagcagggagggacagctggggctgcacattccacagagctgcagagctgggga
-caatgagagccccacaccttccaagctggtgcagcaggagctccccaggtgcaactgcag
-ccactcaagtcacggctgtgaaccccggcctccctgtgttcttgtgggtgctgggagcag
-gcaggggtcctgcacttttgggtgcagctgcaggcgcccaaaccatggctgcggaaccag
-acatctctacactcttgagggtcagggaagtccccactgccctcacaagcttagaagtgc
-ctgctcccacagcctggcgcctccctgctgtcggtgcccgctctaatcttggagcaaagt
-tgaggccaagcccaggtgctgtcatagcctgttgggtgtgcacacgcttggggcagtgct
-gacataccagccccctgccgcctcggacccctacagacctcgggtgctgacgagcatagg
-aggaaagccgaggtggggctgagggcagctcggcacctacagcctgggtgccatgaatgg
-cagtaggagTCTTCTCAGTTCTGTCTCCCTCCCTTCAGTGTGGATGAAGGGGTAGAAATG
-AGGTACAGCATCCTGTCTTTCCCAGGGGTCGTGTTGCATCCTTTAATAGTTTACCACTGA
-CAGCACTACCAACGATTTGGGGATTGTGTCTCGAGGAAGCAATTGACCTAAATTTCATGT
-ATCAATGAAACTGTTTTTCCTTATGGttttaattatttatttattttataaaataaaata
-aataGGCTTTTAATATATAATGAAAGCCTTTTAATGTTAACATGCAAGGACTGAAAGAAT
-ACCTGTTGGACTGCAAGATGGCTGCTCCCTCTACCCTCAGCTTCAACTGGCCTGTCAGCC
-AAGCTTTGATTTCCTAGGCAGAATATAAAAGAATTCCTCTCTGTGGTGGTCCAGGAGACC
-AAGGGAATTTGGGGAGGTGATAGAACTGCACCCTGATCATGCTGGTGGTGAAAACTCGTG
-CAACCGTACACCCAAATGTCATCTTTTTTACTGTATGTTAATTTTAGAAATCAGAAAGTA
-AAAGATGCAATCACAAAAATATCATTTGGTAGGACAAACTTATTCAGTATATGAAGATAA
-TAGAGAACTTTTATACAAAAGTGGCTCTTACaaaatattaatataaaatattaaaatata
-aattCTCAAGAGCTATAACTTAAACTTCTATGTTAATTTAGGTAAGCAATTCTCCTATGA
-AAAGACTTAACGAATTCTTTCCTTTTCTTTTCCTCTTGTCTTTTCATTTTGCTGCAAGGA
-GCAGCCTTAAAGCTGACTGAAACAGTTATTGTGACCAGCATGTAATGCTTGAAAAGATGA
-AAATCCAGCTTTAAATATGCTCAATCTCAATAACttttttggtttttttttttttttttt
-tttttgagacggagtcttgccttgtcacccaggctggagtgcaatggcacgatctcggtt
-cactgcaactttcgactcccagattcaaatgattctcctgcctcagcctcttgagtagct
-gggattacaggcaccggccaccatgcccagctattgtttgtatttttagtagagatgggg
-tttcaccatgttggcaaggctggtctcgaactcctgacctcattatctgccgccttggcc
-tcccaaagtactgggattacaggtgtgagccaccgcgcctggccTCAATAACTTTTTAAT
-AGGTATATGCTTAGTTTATTCATGTTTCTTTGCTAGTTTTTTTTCCCTGCAAAGAAGAAG
-AAGAAAAATAATTTTAAATCTTATTTGAAGGATGATTGTACACTGTGTTATTGGCCTTGG
-AAAGGAGAGAAGGAGGAAAAGGAGTAGGAAAAGGGAAAATATCTTAAGAGGTTGTACTGT
-TAATCTACTTCCAGGCAGATTTTAACCACTAAAGCTAAAATGCTATTATGAAATTGAATA
-TTTCAATTGAATATTGAAAATGGTATAATGATgccgggtacggtggctcatgcctgtaat
-ggtagcactttgggaggccaaggtgggtgcatcacttgaggtcaggagttcgagactagc
-ctggccaacatggtgaaactctacctctactaaaaataccaaaaaaatagccggaaattg
-cttgaacctgagaggcagaggttgcaatgagctgagatcatgccactgcacttcagcctg
-ggcaagagagcaagactccatcttaaataaataaataaataaatgaaAATGGTATAGtgg
-cttgaagatgcaggggcccatgaggaagaacatggatggcccctagaagctgaaagcagc
-ccccaggtggcagccagcaaggaagtggggtcttcaattctacacgtgcaaggaactgaa
-ttctatcaacaacctgaatgagcttggaagctgattcttccccagaagccgcagataaga
-gctcagccTGCTAGGGGCTTGAGAAAGGGGAAAGTGACTTTAAAAATGTAACTCGAGGGA
-GTTCCAAAAGGCTAAGCGATTCGGTGAATCTAATAAACATGTTAAAATGCATAAAGTTCG
-GGTGTGGGGGAAAGGGAAGGGAGAGCATTAGGACAAATAGgttcttttctgagttctggc
-caggaggcttcttgatcagttcaaattgttacaaagttcagctggaggtttccttctccc
-tgtggccgctctgggcctctggcagccctcctcaaggagcaatccgtttccttcagaggg
-tctgtgggttctcctggcttccctaatgcgttcctgcagtccttctgaagcaaaacttaa
-tgatgcgagcctccacacgctgctctgaccgtccgagtgggagctgcaatctagtcctgc
-ctcccgtctgtcatgatcccTGGTGGTTTTTGACTACagctcaattgttttagattccat
-gtgtaagtgagaacatgaagtatttgtctttctgtgtttgactcatttcacctagcagaa
-tgtGTaataaacattaacaaaatgaatgtgtaaaatcaggtagtgatcacagctacaaag
-aaaataaaacagagtgatagatggaaagtgatggggaggaagaacctggttagaaatggt
-ggtcaggcaggacctctctaagaagggaaaagagctgtgactgcacgataagccggccac
-gtgaagaccttgaggacaacatgcaaagctgatgacccaccggccctgcaaagaccgggc
-gggagataagcttggctggcgcgaagaaagaaggctggagggagtagaaatggggacagg
-agctgaacgctgggagagggggctcaaagCCAGCTCGCGTAGGCAGGGACTGGGCACTCG
-CAATGCGCGCAGAACAAAGGCCTCTCTCTCTCTTTCGCCACACTAAGGGCCAACATGGTC
-ATCTCCAGGTGCGGATTCTGCCGTAAAATGCGCCCCTGGCGACTCACGACCAGGACGCAT
-TCCGCACCGCTCCCCCACGCCCCGCAGCCCGCCCTCGAGGCTGATTGATTTGTGCCAGTC
-TCTACCGCCATCTGCCGGCAGCACTCGGTACACCCGCGCCCTGGAGGTCGCACGCGCTGG
-CCAAACGGGCGCACCAGACACTTTTcagggccctgccaaagacctcccaatgtctactgg
-cgtcccagacacaagagatccaggccaagactcacacttcacaagatacacagacacggg
-ccttagggaacaggaaattccatgaaacttccatttacccaattagccggactcactgag
-ccccagaatagggttttcaaccaactcctactaaaattAAAAAGTAATGTGTGGtataga
-ttggaataatagacattggaggctacaaacgatgggaggcggagaggggtgagggttgaa
-aaattacctattgggtgcaacattcactatccgggtaatggggcactagaagcccactcc
-accactatgcaatatatgtatttgtaccccgtaaatctataaaaataaaaaCTACATTAA
-AAATAATAATAATGTCTGGTCATCTAAATAGTACCTCTACAGCTTATTAAGTGCTCTGGA
-GACGTCCCAGTTGCCTGTCCTTCCCATTAAAGGTGATATCCAGTGCTGATTTCCCCTTCA
-ACCTCGGGTTCCCATAAACCTCTTCTTTCTCACTCCTGCTGCCCTCCGGTACTCCAATAA
-AGAATGATAGATGggccgggagcagtggctcacgcctgtaatcccagcactttgggaggc
-caaggcggatggatcacctgaggtcaggagttggagaccagcctggtcaacatggtgaaa
-ccccgtttctactaaaatacaaaaattagctgggcatggtggcgggcctcagtaatccca
-gctactcaggaggctgaggcaggagaatcgcttgaacccgggggcagaagttgcagtgag
-cagagattgtgccactgcactccaacctgggcgacagagcaagactccgtctcaaaaaag
-aaaaaaagaaaagaaaCAGTCCCAGTATGCATCCATGTGCATGTGCATGCAGGTGTATCT
-GCCTGTGAGAGCTGCGCACGCGGCTCTGAGTACCTGGGAAGACACCCATGTACAGATGCT
-GTACATGTGCGGGGTCACTCTCTGGCGCATTCGGAGGCATGAGGGCTACGTGCAATGCGA
-GGGAACCTATGTCCAGGCTTCCTTTCTTGGTTTTCCTCCTCTGAACTCATGCATCCCTTC
-ACAAACagtccagctcctggctaaaaacctatgtgtgatttttcagcccaaacacaggca
-atgacaggttttacctggcaggcctcacagctgagtcgtgcacagctgatgcgttgcagt
-ctttaaagacagttgcagacacagactcaggcctcctggacagtcgacctctcacacaca
-tctccgctcccaacccaagtcttcattcagacacgtcttcattgcagtggggtaggcctt
-cggccaggacctccttatcttggggagtggagaatccttgaagacactttcctccatgct
-gactcagaagttttcccactctcccttccccaccccatccctggcccccaggtccgtaca
-acttcaggagcctttttgttggaagcttttctgcagtgagaccaaccccacacctgtgct
-catccacccgaccccagttggcatcattctatgaggaaattagaacaggtggatctgtgt
-tctacaaaataaaacaaaccaggttctctggtttagcctctttcttgtactgtaataata
-agagatttggggcttggctattacttgctttgactttttttgttttgagacagggtttcg
-ctctgtcacccaggctggagtgcagtggtgcgatctcggctcactgcaacctccgcctcc
-tgggctcaagcaatcctcccacctcagtctccctagtagctaggactacaggtgcacacc
-atcatgcccagctaatttttatattttttatagagatggggtttcaccatgttgtccagt
-ctggtctcaaattcctgagatcaagcaacccactggcctcagcctcccaaagtgtgagga
-ttacaggcctgagccaccatgccgggccatcattaatcagctactccagcacttagcagt
-tcagctctctcctgctcagctgagctcctgaTTGTACAGTGGTTAAGAGCAAActgcctc
-tgccacttagtaacctggtgacttgaaaaatcactttgccttttcatcctttggtttctt
-catctgtaaaatgaaaataacaataaacaatacctacttcacagggtggttgttgtgagg
-gtgtagtgagttgatgtatgtaaagcATAACGTAGGTTCCATTGAAGTGTTTGCTATTGT
-GTTCAACAGGGTCCATTTCTGCTTGGAGATCCACATGGCTCTGGGGAGTACCTGTTGGCT
-CAGCCTAGGTCACGTGTTCCACCTTAACCatcccttccctgctccaaggtagagcccgtg
-acctgaactaaaccagcaggcacgctccacctccaacaccggctcaaggtgggcgtgtaa
-tataagctggttcaattagaatgaatcttttttttttttttttaaagacggagtctcatc
-ccccatcacccagactggagagcagtggcacaatctcagctcactgcaacctctgcctcc
-caggttcaagcaattatcctgcttcagcctcctgagtagctgggattacaggtgcctgct
-gccacgcccagctcatttttgtatttttagtagacacagggtgttgccatgttggccagg
-atggtctcgaactcctgacctcaagtgatccacccacctcggcctcccaaagtgctagga
-ttacaggcgtgaaccactgtgcccagcccaattacagtgaatcttaatacactggctgaa
-aattctgggacacagccagtctctctctttccaacaggacatgtacaaggacctgtacaa
-ccctgggagatgctggcatattggggccacaagcagtgctgacctgaagaaaagggcaac
-acctcagaaaacaaagtagataaatagaaaccaagtccttggtgccatcacttgatttct
-ggacaaagcctcacctaagctatttattgacctgagcccttcatagtttaggccaatGTG
-ATTTGGTTGTTTTGTTACCTGTAACCAAGTATCTTAACACAAAGTGGATCTGTGAGTGAC
-CAGAGCCTCTTGGGGGTTGTAGCAATCTAGTAgttggcccagaaaggccaactctgagat
-ggagtgtagggtgcagaatgttgagtaatgagtgctcttggaatcaacaactgaggaaga
-cagaaatatgcaggattgggcacagggagaagttcagctgcagtgcaggcccaagggtag
-ttgcagctgagccttcaggaagttctggagccagagtagcccttctgagttgttccaagC
-ACTGAAGGCCTAGCAAGTTCCAGGGGTATTAAAATCAATAAGCCTGTCAGCCCCGACAAT
-GCCCTCAATAGGTCTGGGCACAGATTGGAGAGAAGCTGGGCTCCCACTGCACCAGGAGGG
-AGTGGCCCAGAGCCACTGAGCCATGGAGACTCAGGCAGGGGGTTGCTCCAGCACTTCTTC
-TGGAGAAGTTTTGAGCCCCAGATGCAGTTAGCACAGTTGCCCGCCCCTTATCATAAGACG
-AAGTCCGTTCCCACCACATCTTCTGCAAGACCTAGCTGGGGACCCCGAGACACTGGCAAA
-AAAGCAAATGTAAATCCAGCTTTATTGGTAAAAAAGGAATAGCAGATTTAATCAGAAATT
-CCCACCTGGCCCAGCAGCACCAACCAGAAAGAAGGGAAGAAGAGAGGAAAAAACCACAgg
-aagaaagaaaggagggagggagggagaggaggaaggaaggaggagggaagggaagggggg
-aagaagggagggagggagggagggaaagaaagagggaggaagggCAGAGGGAGCAGGGAG
-ACTGTAGATCAGGGTCTGAATGGAGATCCGGTCCTGGAAGTAAATGATCCAAGGCTCCAG
-GTGCTGGGAAGAGAGCAGGAGGGGAGGGCGGCCCATGGCACTGCCATCTAGAAGGGTAGT
-GGCTCTTCCACAGGAATGTTGAGGATGACATCCATGTCTGGGGTGCACCTGGTGGGAGGC
-AGCACAGAAGGCCATGAGAGACCAGAGGTGGCGGTGTGGGAGCACCCACTCAGAGGAGCC
-CTGCTCTTTAGAACTCTGGTACGTACTTGGGTTGGGGGGCAATCCCAAAATACAATCTGT
-GATCTATCTGTGACCTCAAAGCCCAACTGTGcatacacaagcatacacacacacacacac
-acacacacacacacacacacatacacacacaTCAAAAATGGAAAAGAAATGAGTTTGGCA
-GGACAAATGTTCCCCTGACAAGTCTGAGGTCAAGAGGGAGCAGGAACTCAGCTCTGAAAT
-GCTGAGGGCCCTCAAGATgatcactggctttggagtgaggatgacaggtttgataacttt
-gacctgtgtcaccttgagcaagctatttctactctcccagcctcactccttcagttgGCA
-CTTAAGTGAAAAGCACTCATTAAGTCCCAGACCCCAAGtgagcctcagtttcctcatctg
-tcaaatgggtttaatattctaacctcagtcattggtggaaagattaaatgagaccatgcc
-agcaggtaataagtgctcagtaaatgacaggcaTTATTATTTCCATGAAAGTAGCAAGAG
-AGATGGATTCCCATCAGCAATATATTCCCCATTGCAGGGACCAGCACAAATATTTAAGAG
-GCTGAAGGATTACATTCTGTTTCACTCTCTTTTCTCTCTTCCAAGGAGACCATCCTCTCT
-CATGGTTTCAATAATCTGCTGATACACATGAAGTATTTAGGCAGGAAATGTCAGGATACT
-TGCAATTTACAAATACTATTAAAAAAATGAACatgaaaccaacatagaaaaaaaaaaaat
-ttctaaatctagatgggcaaaactggctattcattatatcattctctcttctttatattt
-gaaatttttcataataatagtaaaaaaaaaaaGTTcatctctatgctggcaacacctaaa
-tttctacttccagccaatatctgtcctctgaggtctacactcatcttgtcaattgcccac
-ccaatgactccaccttggcacctcatataaatcaaacttactgtccaagtcaactgtatg
-gtttttgttttgttttgttttgtttgagacatggtctcactcggtcacccaggctggaat
-gcagtggtgcaatcacagctcactgcagcctggaactcctcaatcgatcctcctgcctcc
-caaatagctgggaccacaggcacgtgccaccacatctggctaattttttaattttttgta
-gagatggaggtctcactatgttgtccccctggtctcgaactcccagcctcaagcgatcct
-tcttcctcatcctcctaaagcactgggattacaggtgtgagccaccatgcctgcctccaa
-ataaactttttgactgtgcctacatacacatccctcaccccgccccagccttcccaatct
-ctgcatttgacatcaccaccaccccattataaaagtcaggaacccaggggttattcttga
-tacctccctttcctgtacttcccaagtcatgcaagtccttcttactttcctaaatatttc
-tccaatctatctatttctcccatttcttctgccacactcttggccaggccacttcccatg
-ttcccctggacaactgccctcacacccactagaattccagctgccattctggctccttgc
-caatctcatccccatgctcttttcttttcttttaagaaagagtcttgctctattaagcag
-gctggaaggcagtagcaccatcttggctcactacaacctctgtctctagggctcaagcaa
-tcctcctgccttagccttcactgcagctgggactacaggcgcacgccaccacgcctggct
-aacttttgtattttttgtagagatggggtttcaccatgttgcccaagctggtcttgaact
-cctgggctcaagcaatcctcccaccttggcctcccaaaacgctgagattacaggcatgag
-ccaccacacccagcccaccatgctcttttcaaactgacttttttggaatacaaatctgat
-catgtggcttaagatcctttgcttctgggatcaggcagaacatctgggcctacagggcac
-tgcatggaggtccctaggggctgagttgccctgctcccttcccgccactctccctgtcac
-tctgcattccaaccactctggcctcactcagctccgtgtcaatgccaagttccttccaac
-catagctccttcacaGCTCAAGGCTCAACATGTGGTtggttcatagagcagtaacataag
-catcaccgggtagcttcttagaaatgcagaatcAggctgggcatggtggttcacacctgt
-aatcccagcactttgggaggccaaggcaggcagatcacttgaggtcaggagtttgagacc
-agcctggccaacatggcaaaaccccgtttctactaaaaaacataaaaattagccaggcat
-ggtggtgcacacctgtaatcccagctactcgggaggctgagacaagagaatcacttgaac
-ccaggaggcggaggttgcagtgagctgagatggtgccagtgcactccagcctgggagaca
-gagctagactctgtctcaagaagaaggaaggaagaaaggaaggaagggagggagggaggg
-agggagggagggagggaggggaaagaaagaaagaaggaagaaagaaaaagaaagaaaaga
-gaaagacagagagagaaagaaagaaagaaaaagaaaagagagaaaggaaggaatgaagga
-aggaaagaaagaaaagaaaagaaaaaagaaatgtagattcatgagccccactgagaccta
-ctgacttggaatctgctttttaacgcgatctccaggtgtttcctgggcatgttccagttg
-gagaggcTCTGCTTAACAGTGTGCCATTTCTACTTTTTAGGAGGGAAAATGTGCTTCCTT
-GCTCCTGGTGTTCCCTTCCACGTGGAAGGGCATCCATGAGTGTATTGCTCCTGGCCTCTC
-TCTGCCCCCTTAAATTCTGCTTTTGGAAAGGGGGTATGACCACCAGAATGGTGAGTGTGA
-GGAGAGGAAGGGGACACAGGGAGCCCAGTCCCTTTCTCTCTCAGCAGCAAGAAACCCGAA
-AGGACTCCACTCTTCTCTGCCCCAAGGCCTGGCTCCACGTGGGTCCAGCTCCACCATGAT
-CGGGTGGTTCAATTTGCCTAATTCTGGGTTCACTATTCAGAGGCCAACACAGTCTCTAAA
-ATCAGCTTTACCAGAATAAAGGTGATAACCTGGCCCACATGCACCTTACCCCTTTCAGTC
-TCATTCACTGTGTTCAGAGTTCAGGTAAAGACAAGTGACTATTTATTACGTCCCCCGGAG
-ACCCTGGCAccaccgcctagaattgctcttccttcagctcccccatcagtctctttcacc
-tagtgaatttctatgcatccttcaagcctcagttcaaatgtcacatcctcaggaaaacct
-tccttgactgcccagacTTGCTGTCCTAACAGTTGCtttcttttttcttttttttttaat
-taaaaaaaaatttttttttagatggagtctcgctctgtcacccagactggaatgcagtgg
-cacaatctcggctgaccgcaacctccgccttccaggttcaagcaattctctgcctcagcc
-tcccgagtagctgggattacaggcacccgccaccatgcccagctagtttttgtattttta
-gtagagacagggtttcatcatcttggccaggctggtcttgaactcctgacctcgtgatcc
-accggccttggcctcccaaattgctgggattacaggcgtgagccactgcacccagctCCT
-AAGAGTCACTTTTGCAGTGGCATGTACTCTACTCAGCAGCTCTGGGCTCTGCTGCAACTC
-CACATTTATTTGTGGCTCATTATCGACTCATGTCCAGTTCCCTCTTTAGTTCCATGAGGG
-CGGGACCAAGGACTGTTCTCATTCACATGGTGCCTGGCATTCAGAGGCACTTCATAAATC
-CAATAGTATTTTGTTTTGGGGGCGGGGGGCGGTTTagaaatagaagaaaaggaagaaatg
-gcgataggagaggagaaggaaggaaaacgacaggagggagagacagatgaagaagaaaaa
-TTAAAGAATTTGCAAATGCTAGGCTCTGCCACACATGGTCCTGTGGTGTCATCAAGGAGA
-GGTAAGCCTGGGGGACCCCCAACCCAACCGCAGAGGGCTTGCCCCAAGGAAGGGCAGGCA
-AAGAATTGGTTTCTGGGGCCCAGAAACCTGCCAAGTGAACAGGACAGACTTCTCTCCTTG
-TAGAGTGTCTTCCAGGCTATTCTTCCCTGAAGCCAACCACCCCACTCAACTCTGCCTTCC
-TCAAAAACCCAGAAGTGGAAGGCTGTACCCACTTGGTTGACAcatgggatctgggaacta
-gaagggcccttagagattacaccacccagcctgctgtgtacagatgggaattggaggcct
-ttgcagagatgggaaaggtcacatctgcccctggtcagtggcagatccaaggtggaaacc
-caggaccgcccctccctccctgtacagggttctgccatccacACCAGGCTGCCTTCCCCA
-AGAACAGAGAGCCTCCGTGAGCTCAGAGTGTGACTGGTTTAAGAGGCAGTGGCAAAAAGA
-TCACATACTTGGGTCTCCGAAGCAGAACATCCTCAAATATGACCTCTCGGGGTTCCCGGG
-TCTGGGCTTGGAGCTCTTCCACCTCGGCCCTTAATACAGGCATGTTCTCCTCAAACTGGT
-CAATAATCTGAGAGGAAAGGCACAGCAGGGGAGAAGGGAGAGGCAAATGGCCCCCAACCA
-AAGGGAGAAAGGCCAAAATGAACGAGGAGCAAAGCTATCTGGGGAAATGGTATGGGTTCT
-GTCACTGGGACTTGCTGGACTCCAGGGAGGGGACTTCCCCATGCAAGGTGCGGCTGGCTT
-CCAAGTTAGTGACAATATTCAGTGGTGCTGAAACAGGTGAGGGATCATGGAGAATGGAGA
-CAGGTTACAAAGTGGCGGGGAATGCTCAATCATGGGAATGAATGGAGGCTGGCAGAGATA
-GTGAAGGGCATACACATTAAAAACCAGTGAAGAGGCAAGATAATGAAAATTAATTCAAGA
-AGGCAGTGATGGTGAAGTTCATTAACACTGATAATGGGTGGTGGGCAGTAACAAGAATCA
-AGGGGTAAAGATGCACGGTGGTTAATGGCTGAATAGGTGATGTTTGGTGATGGTTGTAAA
-TGGGTCATTAGCCAGCATTGCTGGCTAATGAGGCAAGGCCTAGGTCAGTGCCAATCGCCT
-TCCCAGATGAAAGACAAGTGACAGTAATGGCACCGGCAAGGAGGGAGGCCAACACCAGAG
-TCAGAGACCTCCTGAGCGCCAGATCAGGAGAAGCCTGACTCATTCCCACAGGCCGTGGGG
-ACTGCCCATCCACTGCTTCCCTACAGGGACCACCACCTTCCTTGCCCACGCACTTCTCTG
-AACCTTTGCATGCATTTCAGGAAGTCCTGGCTTTCCCACATCTTCTGTAGGAGAGCCTCT
-TCATAGGGACGCTGGGTTTCCTGTGGAGGAAGAAGAGGTCTGGCCCCCAGGTGCCTCTTC
-CTGGGCAGCAGAACATGGTAGAGACCGATGGGGCTGCAGTGGGCCTGGAGGCAGAGGATG
-GGGAAGAGGGCGGGGTGGGGGTGAGACCTGGATCCCCGCTCCCACACAGCAACTGGCTAC
-TCACCGCCACCACAGAACTCAGAATTTTTTTCTTCTTCTTCTGAATCTTGTCAGACAAGG
-ATTCCAGGACCTTTCTGCGCATCTCACCGAGGTCATCCAGCTCATCCTGGGAGCCAGCAG
-AAGGGTGTTGGTCACCAGTCCTGCCTCCCACACAGTCTGGTGGGAGAGGGGCAGGGGCTC
-CCCTACCTGCTGGCTGTCCTTAACCTGCTGCAGCTGGCGCATAAGAGTGGAGATCTGGAC
-AGACTTGATGGAATACTCATGGTCCATGTAAGTGCTCAGGAAGTTCACTTCCTCCTGGGT
-CTTCTCAATCTTGGCATTCAGCTGCTCTGCCTGCTGCTCAAGATCTGGGGAGGGGTTAGG
-GAGGTCAGCAGGGACAGGAGGCAAGACCTTCCCTCAAGCACCTGGGCCCCAGGAGGCCCA
-GGAGGCAAGGTCTCCTTGGCCAGTAACTGGGGTCTGGGCTGAGGTGAGCTCACACAGGGC
-TGGGAGGTGGTTAAAAGTTAAGGCTCTAGACGGTTTTCCACCCCTGCAGGAGAAGAGGCA
-ATgctgggtaggaaaaaggaagggaattggtgcatgatccctagactagtccccactctg
-ccactgacttgccgggtggctctcgccaagactgtccctctccagacttcagtctcctca
-GAGACACACTCAAGGAAGTGAGACCAGGCAGATGGGGTGACAGTGGCTCCCAAGACACAA
-CCCATGGCAGGATTAAGACAAAGTCTATCCTGTCTTCCTCCAGAGAGACCCCCAATGTCT
-GGGGTTGACTGATCCACCACCCCTCTGCTCAGCAGGTGTGTAGTCTGCTCAGGGAAAAGG
-AACCACAGGCCAGGCAGGAtggaagccaggagacccaggttctagcccagccactgactc
-ccagaaggaccttggCAGGAAACAgagccaggctaggattggattctggctcctagctat
-ataaccttccacaagctactgcacctctcttagcctcggtttcctcatctgtaaaatggg
-aggacagcttccctgcctccaagtagttgcaatgactgagtgtgtgcctgtaaCAATGCA
-GACATTGGTAGAGACCCAGATACGGGGCCTGGAAAGAGCTAAGTGTTGGGTAACTATGCT
-ATTCGCTCTGTATCTTAGCATTCCCATCTGCCAAGAAGAGAGCCAATGGGGCTGAGGGTT
-TCTGAATGGCAAGTACAAGGTGAATGCTCTGCTGCTGACCTCCCCAAGGTGCCAGGGGGG
-AGGGTCAAGGAATTTGCCAGGGATTCTTACAGCTCATCTTGCATTTCTTCTTTTCTTCCC
-ACTCCTGAAGCTCAGATTTCAATTGCTGCAGCCTCTTCTTGTTTGAGTACTCCAAGATGT
-CGATGATGGTCTGCGGGAGGGGTGGAGTCAACTCACCCACAGGCTCTGCTGGCTCTCAGA
-GGCGGCCACCCAGCACTTCCTCAGAGGAGTCCCCAGTCCCAACCTCACTCCCAGAAACCT
-GACCAGAGGCTaatcgggacagtaacagtgtccacccatagggttgttgtaaggactata
-taaagacatacagatcgcttGCTATTACACGTAGAGGTGTTTGCAAATGCTGTTGGTGGT
-AGCAGCGACCTCTGTCGCACCGGTACAGTATGTGCCCGGTGAACCCCCTCTGGGACGGGT
-GCTATGGTGCCGCATTTCACAGAGCTCGGGGAGGCAAAGTTAACTAAAAGTCTCCCGGCC
-AGTGAGTGCTGGCGCGCTGGGATGAAACCCATCTCGGTCCTCTTGCAAAGCCCAGGTGAG
-GGGAGTGAAGGGTGAAGAAATGCGTCTTCCAGGTGGAGGAAGCACCACGTGCAGTGGGCG
-GGGAAAGGCAGGAGAGGGCGCGCGAGTGCGcggagggagggcgggacggagggagggagg
-gcgggacggagggagggagggagggacggagggcgggacggcgggagggcgggacggagg
-gacggagggagggcgggacggagggcgggagggcgggacggagggagggagggagggagg
-gacggagggcgggacggagggacggagggagggagggagggacggaggttgggacggagg
-gacggagggCGGGCGGATGCCGCGGGTCTCACCGCCAGGGTGTCCTGCTGCTGCAGCAGG
-GCCCGCACGTGCAGGGTCGTGCTGTTCTCCATCTCCTGGATGGTCTCGATCAGCTCCCGG
-TTGAGCTTGCTGAGGAAGTTCTCACGGCTTCGGAGCTCTCGCAGAGCGGCCCTCCCGCTC
-CTGAGCGAGGTCTGCGGGCGGAGGGAAGAGCAGAGAGGCGGCGCTGCGCCCTGCCCGGCC
-TGAGCCCCCGAAAGCCCGTGGAcccgccgccccggccccgccagacgcccgcccccgTGC
-GGCCTCCTGCTGGTAAACGCGGCCCAAGCTGGGCGGTTCCCCATTGTCTGCGCCGCCCGG
-GAGCTCCGGGACtctcatccgttcggaaacgcacgtgtacccatcatctcacatccctga
-ggtgcgggtgcatctacagttggtggcgtgtcaccaactaatcaacaaatatattattag
-tgggtaaataaagatgtgccttcatatcaatggcttctcagaatcaatgaaatatagAAA
-TAATAGTAAGggccgggcggggtggctcacgtctataatcccagcactttgggaggccaa
-ggtgggccgatcacgaggtcaagagttcgagaccagcctgaccaacatggtgaaaccccg
-tctccactaaaaatacaaaaattagccgagcgtggtggcgcgtgcctgtaatgccagcta
-ctggggaggctgaggcaggagaatcgcttgaacctgggaggcggaggttgcagtgagcga
-gatggcgccactgctctccagcctgggcgacagaggaagattccTGTCCCaataataata
-ataataataaACGCCCCAGGTAGGTTAAGAAGGTGGCAGAGCGACCGCCATGTCTGGAGG
-AGAAGCAGGGGAGGCAAAATGGATGATAAACGTCAGCATTTCCGGGCAGGCCGCGGAGTC
-AATGAGTACTCTCATTTCACACAACAGCCCCCAGTGGAACAAGgagggtctgagggttaa
-gtgactcgcctaaggttacacccagcaggtgcataaaaccTACAGTAACAACAACAACAA
-CAATTGTACTTCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAATAACA
-ACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTAACAAT
-AACAACAACAATTGTACTCCCCTAAGGTTACACCCAGCAGGTGCATAAAACCTACAGTaa
-caataacaacaacaattgctgagggccctctacatgccaggccaggtgctgtgccttgct
-ctgcaggtggcacatggtatctgttcaccctccaacagctttatgtttactaactctatt
-ttgctgataaatggaggctcagagagtttaatgacttgcccagtgtcacacagtcaagaa
-gtggcagggctggaactggaaagccagacttctgaatcccaatgtctgtctttccgttat
-gctaAAACAAGAACTGAGTAGCCTTAAAACTGCAAGGCATGGCTGAACCAcgtagtgact
-aagacttggatgttgaacctagacacaccttggttcaaatcccagctcagccacttacca
-tctaagagaatctgggcaagttagttaatgtctcagagcctccttatactcattctaaag
-gtaaggaaactagtatctgttttagagaactgccgtaaaatataaatgagATTggacagg
-tgcggtgactcacgcctgtaatcccaacactttgcgaggcccagatgggaggatcactca
-aggccaggagttcaagaccagcctgggcaacatagtgagacctcatttctacaaaaagta
-aacaaaattcgctgggtgtggtggtgtacacctacagtcctagctactcaggagtctgag
-gtgggaggaatgtttgagcccagaagatcgaggctgcagtaagtcaagattatgccacca
-cactccagcccgggtaacacagcaagaacttgtctctaaaagtaaataaataaataaata
-aataCAATTTTaaaaaattaaaatgttcgctgggcatggtggtgtgcacctatagtccta
-gctacttgggaggctgaggcaggaggatctcttgagcccaggagtttacggctgcagtga
-gctatgattatgccatttcactttagcctgggtgacagagcaagaccctgtctttaaaTT
-CACAATCAAGCCACTTAGTGAGAGTGCACTCATGTGCACTCAGTGAACAATAGCTGATAC
-TACTGTCTCTGGCTCTAACCCTCTACCCCTGCCATAAATATTTGCTCTTTCATTTGTTCC
-TGTACTTCCTCATTTCTCCGTCCTTTACTAAAAACGACCCCTTCCTAGCCCTCAGCTCCT
-TTATTTCTCATATaacagtaatcatgctgatgtgctgagtgcttgccatgtggctgatac
-tgtactaagcacttcatgcgcactgcagcacatcaccctcacagcaagactaagagatgg
-gcactattattaggccaactttataaaagtggacagcagtcgggcacagtggttcacacc
-tgtaatcccagcactttggaagagcaaggtggaaggactacttgagcccaggagttagag
-ccctgggcaacaaagggagatcccatctctacgaaaattagctgggcatgatagtgcatg
-tctatagtcccaactactccgagaggctgaggtgggaggatcacctgggctcggaaggtc
-caggctgcagtgagccatgatcatgccactgcgctccagcctggatgacacagcgagacc
-ctgtctcaatcagtcaatgtggacagcaaggattaaattcagtaacttattcaaggtcac
-acatagcagagctgTCATCCTTGAAGTCTTGCCTCCTAGCCACTCCACTACCTTGTCTCC
-ACATCTCCAGACCAAAATACCCAGAAGTATCTTGTGAAAAATGTTATTCTCCAAGTCCTG
-GGCCCACTGAAACAGCAGCACTAGggtttcagttcaaatgtcacccaccttagcagcctc
-tcgttagcacctaaacaattactgccacactctcctccgtgcctccagccccctaacctt
-attcttaggcttctctttagctcttatcatcatttcaaatatctttctcttgttgattgt
-cagtctcccccatccaatagaatggaagtcccctaagatcagaggtcacattactggtga
-accctcatactcagaatagaacctggcacatggtaggtgctcaatcaatatttgttgatt
-cattaaatgaatGAAAGATTGCAAGAGACAGTATTAAGAACTGGACtggttaggagcaca
-agttttagagccaaattgtccacgttcAGCTTCTACATCAATCAAAAACACCTAAACCCC
-TCTAAAGTTAGGATAAAAATAACAGAAATggctggaagcggtggctcacacctataatcc
-cagcactttgggaggccaaggcgggcagatcacctaaggtcaggagttggagaccagcct
-ggccaatatggtgaaaccccatctctactaacaatacaaaaaattagctgggcgtggtgg
-tgggcgcctgtaatcccaggtactcaggaggctgaggcaggagactcactcaaacctggg
-aggtggaggttgcagtgacctgagatcttgccactgcactccagcctgggtgacggagtg
-aaactctgtctcaaaaaaaaaTTTTTTTAAAAACTAAGAGAAATATGAGTTCCTCCTTTA
-AGAATACTGGGCTACCTCTAAACCATTTTGCAAGATAAAAGGTTAAAGGGGAAAAAAAGG
-TTTCAAAGCAAATTATATTTTCCCTTGTTCTTTATATAGTAGTCATTGTTCATTGAGCTA
-TTAAAAATTTTCTTGAAGAATTATTCTATAGTATTTTGTAGTCTTTATAATACTTAGTAT
-TTTACTTTCTGCTATGTATGCTAAGGACTTGTCTTCCTTTAGGCATTTCAAATACTTTGA
-GACATTGTTCAGATAATTACAGAAGCCATAAAACAATGTATAGCGAGGAAATTAATTACC
-TACAATTGTAGCGATTGATGTGAAAATTTTCATTGTCAGTTTCTAAGGCTTGCTTCAAAG
-TACACTGTAAGAAAATTTAATTTACTGGAAttttttttttttgagatgaagtctcactct
-gtctcccaggctggagtgcagtggcaccatctcagctcactgcaacctctgcctcccagg
-ttcaagccggtctcctgcctcagcctcccgagtagctgggactacaggtgcgtgctacca
-cacccagctaatttttgtagtttgagtagaaacggggtttcaccacgttggccaggctgg
-tctcgaactcctgacgtcaaatgatccacccacctagacctcccaaagtgctgggattat
-aggcatgagccaccacacccggccAAGTTGCTGCAAATTTTAAGATAAATAAGCCACTAG
-ATCGTGTTCCTAATGCAACAAAATAACAAGCAATTCTGATTATTTCTTGAGTCTTAAACA
-GAACAGCAAACGCTTTGTTTAActggctttgacccctgatcctgccatttcctggctgtg
-tgacctggtgcatgtcatttatctccctgcgcctcagtttcccggtttgtaaaataggaa
-caaggataagcgtgctcacacagttcctgtgaggaagaaatgagtcaagtctggcaccca
-caaagttctcagcacatgtttgctacaGCCATCATCCCCGTCCCTGTCCTGGGCCCAGTG
-TCCAGGGAAGATGTGCCTCATACCTTCATTAACCAGATTTTGGCATGCATCTTCCCAGGG
-TCCAACTTCCGCCTTCTATGTAGTTCTCTTGGATTCTTCGGCTGGCAGCTTGTCACCACC
-GTAGTGGGCTTGAAGTGAAACACTAGGGGTAGACAGGAAAGGACAGGGAGAGAGTGAGGG
-TCCCGGAAGGCCTGAGGCCAGGTTCCCGGGAGTGCACCATTAATGAGAGGAGGGCCAGAC
-CCCAGCTCCACCCTCTGACTGCCTTATAATGTGACACTAGACCGAGGGTGAAATTCACAC
-CCTTCACTAAGCTCCCAGGACAGACTCTGGGCCTCAATATGAGGGAGGGACAAGCCCAGG
-TGAAAGCAGTAACTATGGACATGGACAGAGGGGAGGGCAGGGCAGCCAGGAACCCCGCTC
-TCAAATGTCCAGTCAGAAAGAGAGTCGGGAACTCCCACTCCTTGTGTCTTTCCAGTAGCT
-ACTgcagcacaggacagcagaaagaccagagtctggcaggcctgaatccaaatccctgct
-gtcccaccaacctggctgGCAGAAGGCCTGatggggtaggggttaagagcaagaactaat
-gagccagacagtccaagtttaaatccaggctctTggccaggcatggcggctcacgcctgt
-aatctcaacactttgggaggccaaggcgggcggatcacctgtggtcaacagttcaagatc
-agcctggccaacatggtgaaaccctgtctctattaaaaatacaaaaaatgagatggacat
-gatgatgggcgcctgtaatcccagctacttgggaggctgaggcaagagaatcgtttgaac
-tcgggaggcggaggttgcagtggtgcgagatcccgccactgcactccagcctgggtgaca
-gagactctatctcaaaaaatatatataatcataaaaataaatttttaaaaattccaggtt
-ctgccttctactagctgcgtgaccttgagcaagtcaaatgacctctgtgtccctccattc
-gtccacctataaaatgggaataatcatcacgcccacctcatagagtcttcctgaagatga
-aagaagttactataccttaaaggtgtttggaatagtgcctgatgcatattcagtgctgga
-tacacattaccagttgttactCTTACTTCTAGTGACCTGAGAAGTGGGACCACAACACCA
-GACGAAGGCACAGCAGCCACGCAAAACTCCAACTGGCTGTCTCTGAAACACTCTAAGGGC
-TGTGGTTCTGCCAGATAAGAGTACAGGCATTTGGGGGGCATATTCTCAGAATCCCTGTTT
-CCTCTCTGCCTGTCGTGCAATGACATGGGACAAATCGCCCAGGTGGATCCAGCTGTACTC
-TCAGTCCTCACCAAAATCCCTGCTTCAGGTACAACCCAGCTCATCTGGGAGAGATACTAA
-TCTCTTTAATAGATCAATGTCCTTCATCCTGAGAAATGCTGGCATTAACTATGGAGATGA
-TTAAGTAAATTAATTTTGTGTTTAATTTATAAATTACCTGTATATATCCGGTTTTTAGTT
-GTATTGTATAAGAGATAGAATGATTAATAGGTTAATCTTGTGATTCTAATTTTAAAAGTG
-TAAGTGGGATTTTGATTTAGATTTAAGTTGAAAGGTTTAATACACTCTTATTAGCTCCgt
-tgcccaggctggtgttcaatggcgagatctcggctcactgctacttctgcctcccagatt
-caagcaattctcctgcctcagcctcctgaatagctgggataacaggtgcccgccaccaca
-cccagctaattttttaatttttagtagagatgcggttttgccatgttggccaggctggtc
-ctgacctcaggggatccacctgcctcagcctcccaaagtgctgggattacaggtgtgagc
-caccgcgcccggccAGATTACCCATATTTAGAAGTTTAAGTATTAGATATACAAGAATTA
-TGTAAATACCCAATGGTTTTTGTTAATCAGACAAGTGAACCATTTGAAAATGAAAATGAA
-TACGTTAAAATTTAAGATGTGGCTTAAAAGGTTTAGGAGAATTTAATTAACCAAGTTCCA
-AAACCCCCTTACAAGTGTTTATAAAAATTGTAAGATTCTTAAGTTGAATTTAAATGCTTA
-AGGAAGATTTGCAGTTTTAATAATGAGGATTTATTTTCATTATTGGTAGTAGCCCTAATT
-TATCtttttttaaattaaatcttttattacaagatagttcagattcacaagcagttttaa
-gaaataatacggagGggctggccgtggtggctcacgcctgtaatcccagcactttgggag
-gctgaggcatgtggatcacctgaggttaggagttcaagatcagcctggcgaacatggtga
-aaccccatctctactaaaaatacaaaatttagccaggtgtggtggtgcacgcctgtaatc
-ccagctacttgggaggctgaggcaggggaatcgcttgaacccgggagttggaggttacag
-tgagctgagatcacaccactgtactccagcctgggtaagagagacagagagagagagaga
-ctctgtctgaaaaaaaggaaaggaaaggagaggagaggagaggggaggggaagggagggg
-agaggaAAAGGAAAAGAAAAAGAAAAAGAaaaagaaaggaaagaaaaggaaacagaggta
-gtctatgtaccctttacccagtttctcccagtggcaacatcctgcaaaagtacggtacaa
-tatcacaaccaggatattgacattaagatgagcaagatataggactttcccataaccaca
-aggatcctgcctgtcgccttctacaaccacacccacttccctccccttaccaccctcctc
-acaactctgtccctaacccctgcaatcactaatctgctctccatttctataattttgtga
-tccccagaaggttatataaatggaatcatccagtatgtaactgtggggattggctttttt
-ttacttggcataattctctggagattcatccaagttgttgaatatatcaatagttctttc
-ctgtttatcgctgtatagttttccacggtggggatacaccataggttgtttaaacattca
-cccactgagggacttcaaggttgtttccagttttgaggaattatgaacgaggctgctatg
-aacattcacatactggcttttgtgtgaatataagttttcatttctctggaataaatgccc
-aagagtaaaactgctgggtcggattactaggaagtgcatgtttcatgttgttagaaatgg
-ccacacttgtttccagagaggctgcatcattttaccttcccaccagcaattgcgcacaat
-ctgacgtctcctctttgctagcatttggtgttatcactatttttttattttagccatttc
-gataggtgtgcagtgatatctcactgtggcttaatttgcattgccccaatggctaatgat
-gttgaacatctttttaatgtgcttatctgacatctgtatatctgctttggtgaaatgtct
-cttcatgtctttttcccattgcctaactgaattgtctgtttcactgttgagtttttactg
-ttactgatatattctacatagtagtcctttgtcagatacatggtttgcaaatattttctc
-caagtctatagcttgtcttttcatcctcctaaaaaggtctttcataaggccaggtgcagt
-ggctctcacctataatcccagcactttgggaggctgaggcgggcagattacttgaggtca
-caagttcgagaccagcctgtctctactaaaaatacaaaaattagccaggcatggtggcac
-acgccttcagtcccagctactcgggaggctaaggcaggagaatcgcttgaacccgggaga
-cagagtttgcagtgagctgagatcgcaccactgcaccctggcctgagcaacaaagcgaga
-ctccttctcaaaaaaaaaaaaaaaaaaaaaagtctttcacagaacaaaatttttaatttt
-gatgcagtccaattcatctatttttcttttatgggtcaagcttttggtgtgatacctaag
-aactcttcacttggccctaggccccaaagatttttctctcctgttttcttctaaaagttt
-ttcagtttcacattttacatttaatttctattttattttatctttgagctaatttttata
-ttcgttgttaaatcatttctttctttttctttttctttttttttttttttttttttttgc
-ctatgggtgtccaattgctccagcgccacccatggaaaaggctttcttcctccactgaat
-tgtttttccactttctgaaaaacccattgggaatattggtatggatttattccCTTTTCC
-TCACTGGGAAGTGTTGGCAGTGTCCAGCAGGTAGCTGATCCTTCATTCCCTGCTTGGTGG
-TGCTGATTccccaactgggatagtgctggcagggatgagtggggaggtcatcttctaacc
-cccacctggcagaagacagtgctctgactctctctctagggtagtgtcaacagagtctag
-cagtgacaagatttcatgaagtgtcatgaggtgggactcatcacctctgggcttcactcc
-cctcccccagcctacctatgtcagtagagcctggtgggagcctgagcctctatccccacc
-cagcatcagtgaggtAAAATAAGGTAGTGAGATGCAGGGCAACTTGGCATTCTACTCTCC
-CATCTCCTTTCTGTGTTTCAGTGTTGCCCACAGGGGAGCTGATCTAACATTACTTACTCA
-GAGGCAATGAGGTGGTATGAGTGATTTTATACATAGAtgtatacataagtatgctagatt
-gtctatgaagttcatttcaggataccaaagaaatattacaaaatatttgttattaattct
-cacaacaatcctaggtggtattagtgtccccatttcacaaatgagaaaaccaaggctcag
-agagatgaatgatttttccaagtgagtaaatggcagagccaaaatctgaccccatgtctg
-cctgagcctgacccaaggccTCGGAACTCCCCTGTAAAGCATGATAATGAtgtggcagag
-tttattctacgatttcaccaaaccttgttttcttttcctcctggaaaaacagatggacta
-catttcccaccttcccttgtggttagcagaggtcatgtggctaaattatggcccctgaaa
-catgagtaggagtaacatttgtcacttcaaatctggaccccccccaaaaaaaatgcccac
-ataattgtccatgttcttgttctctctcttccctctatgccagctggatgcaaaagtatc
-cagcagaagacttcaagaccttacaaaatatcagacccacaaggtcaaaggaacctggat
-ccctgaatgaccatgtggaacagaatccctccttcctcagatccacaaatgtactgtggc
-ataaatgagatataaacttctatatcaatacttgcaatttgggcattgtttattacatca
-gttagcctaccctaaTATAAGTGGTGTCACCAAGAGCCAAAAGCAGCCACTCTATCCTGT
-CTCCAACCCCCACACCAGCTCCCAGGTGCCTCCGCCCACCTGGTTGGACCCTAGTCAAAG
-TCTTCATTTTGCTTGTATGAAGGCTGTTGGCTTGTTGGACTGGAGGCAGAGTAGATGGCT
-TGGTTTCCTGCTTGGACTGCTGCCATGGAACATAATCCTACAAAATATACAATCagtcac
-atagcaccatgagtttatatcccagctctacccttttcagatatctgtgaccccaagcaa
-gtgacttgacctctcctgagcctcaatcttctcatctgtaaagtggatctaataataaaa
-cctacttctgtggattggcgcaagaattctgagagatatttatgaagcatgtggtaagtg
-ctccataaatgttagctatcactTTTTTAAATCAGCCAGCCAGAATTTACTAAGCACATC
-CAGGCTGTGAGGTGCTAAGAACTGTGAGAAACAGAAGGCATGGAAAAGACGCAGACATCC
-ACCCTCAGGAAACCAGAGCAGCAATCAGATGAATAAGAGAGCAGCATAATATACCCTTAC
-ATTCTGATAAGACAGTGagaggagaaaaatgaggttctgaggcttgctctgggtcccaca
-gcaaagtgtgacccggctgggactggaattcgggtctccagcctATATCCGCGGAGCAGT
-CACGACCGTGAGAGTGGAGAGCAGGTGGACTGCAGGGCCAGCGAGCCTCCCACCCCAGCC
-CTAGTCCCCCAAGACTCACCGGAACCTGGAACTCCTGGACTATGGAGTGAGTCCCAGAGT
-GCTTGGGTCTGGAAAGAGTTGGGAAGGGAAAGAACTTCCATTATCCCCAGCCCAAGGGGC
-AGCAAGCAGCAATTCGAAACAGGATTGGAGTCTCGAACCAGAAACTGCAGTTTACCGGGG
-ACAATAGCCCCGCGGGAGTGGGGCGGGGCCAAGGAGATGTGGGCGGGGAGAGGACGGGGG
-TCAGAAGACCGAGGGCGACCTCGAGGCGAGGGCGGGACAGCGGCGGGGTGTGAAGTACGC
-ATGCGTATTCCGCCTTTCTTCCAAtttttttttttttttttttttACCTACTTTTGTAAG
-ACATGCGCCATTGGGGAAAATGGAAGAGAAGTTGCGAGTCTGTGAGACCCTGATCTTCTG
-GTATAACTACTCGGCTTTTCCAACTTCCTTGTCTCAGTGTAGATCGCGCGGTAACCCAGG
-CCACTCAGAAGTCCCGAGACCCGATGCTTTCGCCAGCGTCTCGGTCTCCAAGGAAACGCG
-ACGCCGCCTACCGAGCGCCTAAAGGGACTAACCTCTCAAGGCAAAATCTAGTTCGGCCCG
-CTTTTCAATTTTCAAAttcccttcagtttgctctgcccataatcctaaaatatgatatca
-tatttctccactctcatcaaacttccaccatttccttcgccatcttcactcttggctaat
-gagtttgcttccaattttactaagaaaattgtgggaatcagtaaacccacaagttcatgg
-catcatttactcgcctacttgcctccctcccgtaactacgtataaactgcctactaagac
-caattcctacatttatgcaccgaatcctatcctctcacgttttctcaaagatattggccg
-agcagttctccccgttttttcctcctcttttctctctcctttgtatcatcagtataccaa
-cgtatttttaaatttcttctatttaaaaagattgtccacagccggacacggtggctcatg
-catataagcatgagagcactttgggaggccagaggtgggaagatcgcttgagccagaaag
-gtccagtctgcagtgagccacgatccagccactgcattccagcctggttgacagagcaag
-accctatctctaaataaataaacaaaccacttcccctccagccagctcccatttctgctt
-cattttaaagcaaaactcctagagaggtttgcctactctgtttcccatttttttccctcc
-tctcaatcaggctttcactccccactgaaactgccctcgtcaacatcattggtgacctcc
-actttgctaaaccccatggtcacttctaggtcctccctttatttggcctgtctgcagcat
-ttgacacaacagatcactccctcccctgaaacactttcttaacttagtatccaggaaacc
-actcttgagttgcttcctgcctccttttcagtctcctttgctggttcctcctcttctccc
-tttatcattgtagtatcccaggactcagtcccagccccctcccttccagtctcatggttt
-tgaataccatccgtacccagatgcctctcagactcacgtctccatcctccccctgaattc
-cagccatgtacatccaactgcctgcttgggccccttataagcaactctaatgtgcaatat
-ttttccagaaacatttttcccgaacttaaaatagggcatctctcttcttggaatcatcct
-taactcatctcttatcccacatccatcagcagatcctgttgcaataacttcaacgtatat
-ctggaataggaccacACATACACACACACACACCCCTCTTTCCTTTTGTACCCCAACTAA
-AGTACTAGTTCCCACCCTTGCCCTACACCAATTCTCTCTCTACACACCAGATTTGCTAGA
-TAGAGCACGGATTTAAAAGAGAATTCCAGTTTAAAAGATAATTGGGCGGGAGCAATAATT
-TTAAATCACTTAAACTTCAATAGGGGAACATTGCTATAGAATACCATGTCAGAGCTCCCA
-ACCTTTTCTGCCTCTTAAAAATCACAGGAGAATGTGTTTAAATGCACTGTGGTAAATAGA
-AGCAGCTGCTAGGATAAAAAGCAATTAGCCCAGGTACTCTGGCTATTCAGGCCCCTCCTG
-GCTGACCCTAGAGCTGAGGGAATCACTGTGTTGGGTACCCTCATTTGCAGAGCACACCAT
-ATGACAGCACTCTTGCTGGGCAACTCTGTACCAGGAAACCATTAAAAAGTAAAAGATAAA
-ggccgggcacggtggctcacgcctgtaatctcagcactttgggaggccgaggcagatgga
-tcacctgaggtcagaagttcgagaccagcctggccaacatgatgaaaccccatctctact
-aaaaatacaaaataggattagccaggcgtggtggcgggtgcctgtaatcccagctacttg
-ggaggctgaggcaggagaattacttgaagcagggaggctgatgttgcagtgagccaagat
-cacgccactgcactccaacctggacaacaataatgaaactccatctcaaaaaaaaaaaaa
-agtaaaaGATAGGAATACAtgacagatccaggtagtgacttactcaacagccattcctcc
-ccatcatcgcaactattggatcctgatcttgtccatgtatgcacttgccttaatggaggc
-aggccccaggtccagccctagtcctagtcccagctccaatagtcatgactgtctgaggct
-ggacttggtgagccaatttccctttccagttagaggtctagtcatagatacatgatgaaa
-gtctggctaagaagacaggatgagaaatctactcaaaggcttttgggaaaggttttcatc
-acacttttaaaaaaaggcattgcagaaaaacattccttcatctgctggtagacattgtca
-tatctgtgtgggattcctggaatcgcggaactgtgaggggagttggccaaagaggatata
-cagtgaatggtagagaggaaaatgtaaaaaccttcttccttgatagcactgttgagccat
-taaattaaccaaccctagcctggcacaatagtatgtgcctgtaataccagctacttggga
-agctgacgcaggagcatcgcttgaggccaggcatttgagatcagtctgggcaacatagtg
-agaccacatctcagaaaaaaaaaattttgttttaattagccagatgtgatgatgtgcacc
-tgtagtctcagctacttgggaggctgtggtgggaggattgcttgagcccatgagtttgag
-actgcagtgagctatgattgtgccactgcacgccagtctgggcaacagagtaagattctg
-tctctaaaagaaattaattaattaaattaacctttcacctatctagaaaatacttgagat
-taaataagaaatcacattactgggtgagcaaatttgagttgagttttctggtacttgcag
-accaaaagcattttactgaACCCTACGTCtggaggaacaacaagatagaaggaacctggg
-tgggtccctgacaaccttgcaggagaaagtcacctacctgtccttactgcctgccaaatt
-ccgagctgcttcatcaaagagaaataaacctccaccttgtctgagaccctgtatttgaga
-gtccctttgttacagtagcttaacctgtaccttgattaatacaAAGAAGAGCTTGGCCAC
-TGTCAGACAGCCTTCCTCATCAGACATGCTGACCCAGCATGGACACCCACTGAGAGCTGC
-CTGTGCCCCACATCTCAGGTACTTAACCAGTAATATTACTGCCTCCCACTTCAAtttttt
-tttgtttttgagacagagtttcgctcttgttgcccagactggagtgcaatggcatgatct
-tggctcaccacaacctctgcctcccgggttcaagtgattctcctgcctcagcctctcgag
-tagctgggactacaggcatgcgccaccacaaccggctaattttgtatttttagttgagac
-ggggtttctctatgttgctcaagctggtctcgaactcctaacttcaggtgacccgcccgc
-cttggcctcccaaagtgctgggattacaggtgtgagccaccgcacctggccCCACTTCAA
-ATTTTTAAAAAAAATACATAAAAACATTTGCAAAAATGCTGCCATCTTAATCAAAGCCAA
-AACACACTTGAGGGGCCACTGACAATCACCTGTAACAAAGCTGTTGGAACTGGGATTGAA
-TCAGATGGGGTCCATTTGCACTTACACCTGTTCAGGTGGCATTTCTGTGTTCACGAACAC
-CTGATGGAACTTCCTGCCCCCAGGATAGGTGGGCAAGATGAGCTGGCCTTTCCTCCCTGC
-ACATGTGAGGTGATAAATGTGATAGAGGGCCTCTCAGGCCTGCTTGGCTCCAGGCTCAGC
-AATGGCAACCTGGGCTCTGATTCCATCAACATCTTGCTGAGAGGTGGACTAGGCTGAGCA
-GGCAGTCTCGGGCTTCCATCCATGTCATTTGATGTGCTGGCTTTGTGGCAAATGTGCACA
-GCATCCTAAACCCACAATCCCTACTGTTGTCACTGGGTAAGATGCCGTGGTTCTTGTGGA
-GACACCTGCTATACTCGACATAACAAGATCCTAGACATTCCTTCTTATCATCTGCACAGC
-CCTCCAGAGCTGCTCTCTCCATACGGCCTCAGTGCCCATCCGGACTGCTCTCCTTGCAGG
-GTACCTGCCTGGCCCCTGTAGCTCCTGATGTAATAATCTCTGCAAAATTTGACCTGGAAA
-AAATGAAACTGACCAAAAGGATGGCCCTACACATACCAATGAAATTGTACAACAGAAGAA
-GATATGATTAGCAAAATTGGACATGGAGCCAGAACCTAATCCACAAGTCAAATATTTTCA
-AAATACAGACAGATGCCTTTAAAGTCCAACACAAAACAAAAATGCTCAAAATACGTTGat
-tatatgagagttcctgactagtgcagtaagacaagaaaaagtataagatttgaaaaaaga
-gacaaaaccttcattattcacagacgatatgattggcaatacagaaaagtaaagagattc
-caaaaaccactggaaattttttaaggtttcaactttgttgccagatatggggtcagtaca
-caaaattcaatcgtgtttcctctaacggacaccaacaaaccatatgtaacttctgattta
-caataatttcacttacaatagcagtcaaaccacgtggtactttggaataaatccccaaaa
-gtatgtaagacctttatgaagaaaactataatattttattgaaattcataaaataaggcc
-taaataagtgagaaatcaagtggggtcattgatggaaagactccgtgttataaagtggta
-attctgtacaaatgcagtgcaacgccaattaagatctcatagtttcctggaacttagtag
-gcaggttgtgaaatttatatggaggttccaaatatagctgagaccatcttaaagaagacg
-aaAGAGAGAGAAGAATGtttcccataaaagaagaaactggagttcagatttctctttgga
-aactgaaagatccccccacagtggaccctcacttctggagaggaatattcagctacagtt
-gactagcagttgccccttcagatagaatattcgatctccagttcacccagtatatcttct
-acttaaggcacctgcctgacccttgcagatatttgattatgtgaTAGTTACCTGGAGTGA
-GGGCTTAAGATAAGAGGAATGGAAGAGATTGTTTAAAATACATCTATTGTTTGGTTGTGT
-AAGTATTCTCCTCATGGTGAAACTTGACCAGGCAAGTAGAAAGAATAACAGAGAAGTATG
-TGAATCTAagacattgatgtttctggtaatggtgaagttccgagtatgatcacgggaatg
-cgtggctgagaagggataaaggaaatggtgcctgaggatataaagtgagaggactggaaa
-gTGCAAACGGCCCAAGTCAGTGGCTCCCCTGAGACCAATACCAGCAGTTGGGATGAAGGG
-AATCTGCCTGTTAACAAGGTTTCCTAGGATCTGATGCACAGTTCTTGATCCACGGCGTCA
-GAAATAAAGTGGTTAAATAAATATAAGCTACCggccgggcgcggtggctcacgcctgtaa
-ccccagcactttgggaggccgaggcgggcgatcacgaggtcaggagatcgagaccatcct
-ggctaacacggtgaaatcccgtctctactaaaaatacaaaaaattagccaggcgtggtgg
-cgggcgcctgtagtcccagctactcaggaggccgaggcaggagaatggcgtgaacccggg
-aggcggagcctgcagtgagccgagattgagccactgcactccagcctgggcgacagacca
-agagtccgtctcaaaaaagaaagaaagaaagaaaTATAAGCTACCTATACGTGGGGCTGC
-CTATTAACTCCGCcaagtgacttaactcctgcctctttatctgtaaaatgggcataatta
-cagcattgtttttggaagattccatgtaataaagtctgaagtgtgcttaacacagtactg
-ggaacttaagcagcactcaCACTTCATCCTAAATACGACGAAAGTCTTTTCAAAAAAATA
-AAAATTAATGCAATATGACTTACTTGGAAATGTATCAAAAAATAAAGACCGATGAATGGA
-TCGAGGCGTAGTGTGACAGAGTAAAATTTTAATGATAAAAAGTTAATGGTAAAATGTTCA
-CTGTAAAACTTTCAACTTTTCTTCTTGAAAACGTGCATAATCCGACGTGGGAAAAAAAAT
-AACGCATTGCAGTCAGTTCTGGGGAAACGGAAAGCTAAGTTTTAATTTTGCTATTGCTTT
-TGCTTTTTTAACAGAAAAGGTACAAAAAAGAAAAAATGGGAGAGATGTTGCCGAACTCCG
-TCCCGCCTGTGGGCTGTGGGCCGTTAGCAAAGCTGCTAGCATGAAATCGTCGAGCACCGC
-TTGCGAAACGCCAAATCCTCGAGAGCGAGGCCGGAGGCTGCCAAACCCGCGCTGGGGAAA
-GGGCCGCCTCCGGGCGCCCCATCCCGCTGCGGACGGAGGTGAGGTTGGAGCGAGCGCTGG
-CGGAAGAGAGGCTCAGCGCAGGGGGCGCAGAGCCGGCGCTGGCCAATATGCGCCGCATGT
-GATACCTTTGAGGGCGCGGCGGGGGAGGGTAGCGTCAAATTTCAAAAAAAAAAAAAAACC
-AAACCCACACAgccccggcgggcgggcgcgcgcgATGGGCGCCCTTTGGCTGCGGGAGCG
-AGTGGAGGATGCTGGGAAGGAGGTAAAATGGCCACCGGCGGCGGCGCGGAGGAAGAGAGG
-AAACGGGGGCGGCCGCAGCTTCTgccccccgcgcggcccgcggcccggggcgAGGAGGCC
-GACGGCGGCCGCGAGAAGATGGGCTGGGCCCAGGTGGTGAAGAATCTAGCCGAGAAGAAG
-GGCGAATTCCGCGAGCCGCGGCCGCCGCGGCGGGAGGAGGAAAGCGGCGGCGGTGGAGGG
-AgcgccgggctcggcggccccgcgggcctggcggcgccggACCTCGGCGACTTCCCACCG
-GCTGGCCGCGGGGATCCGAAGGGCCGTCGGAGAGATCCGGCCGGCGAGGCGGTGGACCCC
-CGCAAAAAGAAGGGCGCTGCGGAGGCGGGCAGGAGGAAGAAGGCCGAGGCGGCGGCGGCC
-GCCATGGCGACCCCGGCCAGGCCCGGCGAGGCCGAGGACGCGGCCGAGCGGCCCCTCCAG
-GATGAgccggcggcggcggcggcaggcccgggcAAGGGTCGCTTCCTCGTCCGCATCTGT
-TTCCAGGGAGACGAGGGCGCCTGCCCGACCCGGGACTTCGTGGTAGGAGCGCTTATCCTG
-CGCTCCATCGGCATGGACCCGAGCGACATCTACGCGGTCATCCAGATCCCGGGCAGCCGC
-GAATTCGACGTGAGCTTCCGCTCAGCGGAGAAGCTGGCCCTGTTCCTACGCGTCTACGAG
-GAGAAGCGGGAGCAGGAGGACTGCTGGGAGAACTTTGTGGTGCTGGGGCGGAGCAAGTCC
-AGCTTGAAGACGCTCTTCATCCTCTTCCGGAACGAGACGGTGGACGTGGAGGACATTGTG
-ACTTGGCTCAAGCGCCACTGCGACGTGCTGGCCGTGCCGGTGAAAGTGACCGACAGGTTT
-GGGATCTGGACCGGGGAGTACAAATGCGAGATCGAGCTGCGCCAGGGGGAGGGCGGGGTC
-AGGCACTTGCCAGGGGCCTTCTTCCTGGGGGCCGAGAGGGGCTACAGCTGGTACAAGGGG
-CAGCCCAAGACATGCTTTAAATGTGGTTCCCGGACCCACATGAGCGGCAGCTGCACGCAG
-GACAGGTGCTTCAGGTGCGGGGAGGAGGGGCACCTGAGCCCTTACTGCCGGAAGGGCATC
-GTGTGCAACCTCTGTGGCAAGCGAGGACACGCCTTTGCCCAGTGTCCCAAAGCAGTGCAC
-AATTCCGTGGCAGCTCAGCTAACCGGCGTGGCCGGGCACTAAACACCCGCCTGCCTGCCA
-GGGTGAACACACAGCCAGCTTATCCCTCTTAAGTGCCAAAACTTTTTTTTAAACCATTTT
-TTATCGTTTTTGAAGGAGATCTTTTTAAAACCTACAAGAGACATCTCTCTATGCCTTCTT
-AAACCGAGTTTACTCCATTTCAGCCTGTTCTGAATTGGTGACTCTGTCACCAATAACGAC
-TGCGGAGAACTGTAGCGTGCAGATGTGTTGCCCCTCCCTTTTAAAATTTTATTTTCGTTT
-TTCTATTGGGTATTTGTTTTGTTTCTTGTACTTTTTCTCTCTCTCCTTGCCCCCCTCCCG
-CCCTCCCCGCCCCATACCTTTTCTTCCCCTGGATTTTCACCCTTTGGGctgccttgctca
-tctttatgccccagcactaggtacggggcccaacacgtggtaggcactccatcagtgttt
-gctgaatTGAAAACATTGTTGACTGTGGCTTCTATCAGAGTGTCTACCTTTTGCAGCTCT
-TCCCCTCCCTCATTTAATTTGCTGCTTTTAATCTACGTGGTCTGAGAATTTGTGAAACCA
-GTGTTGTTAGAAGTGTATATAATCTGAATCAATAAGCTCTGAATGGTGGCCAAGGGCCTC
-TCTTATGGCACAAAGATGCATGGACTTCATGACAGCTCTTTTGGTGGCTCAGAAGCCATT
-TTTTATAgaatcatggaatctagaatattcctgctggaaagaacctgagagttggtttgg
-accaattccctggttttccagcagatgaaacaggcccaaagaggttaaatgactgggtga
-aaatcacatagctgtctggtgccagagccagcctatagtagagtcccctgaccccaagcc
-cggtgctcattccactACCTCTCACACTTCACAACAATTTCCTCAACACTTGAGGGCCCA
-GAAAGTCTGATCTCTCCAGAATGATCAGCCCAGAGGAATGCTGAGAAATCACCTGGAGGA
-GGGAGCAGAAAGAGAAGGTTTTTAAGGAGGGGCTTCTGAATACTTGGGAGATACGGAACG
-GACCAAGGACCACACTCCAGGGTGCATTCGTTGCTCCCTGGGGCACCACTTCTGGATTAC
-AGTGTGCCAGGTCCTTTGGAGGCCCTACCCCTTCCCCATTCATTGCCACCAGTGAGAAAT
-GGGGGTGCCCCTGTGTAAAGAAACCTACCAAAGGTTTACATTTGCACCTTAGCCTCAATA
-GCTACGAACCCTAGAGAAGCAGCTAGCTGGAGCTCATGTGCAACTCCTGATTCTCAGGAG
-AAAGATGGATTTTAACCCAAAATTATGAGTGAGCTGTTAACTCTAAAATGTACTTGGGAG
-ATAGGCCAAGCGAGAGGTCATGGGCCAACTAAGTGTTATCCAGTAGAAAAGACAGTACAC
-TGCTTTTCTTTTAGTGTTTGCTTTTCCTTTGCTATATGTTTTGCTATTTCCTTGTGGCTT
-AGAATGTAAAATTGATTGTTAAAAGTTTTGTTCTGAATAAATATTTATCTTTTGTATTGC
-TAAAACTGGTGCACTATTTCCTTTCAAAGTGTTAGATGCACAGTTACCCAGCTCCAGACC
-GTATTTCAATCCCACTTCCCCTACACTCCATTTGTTTACCTTGCTAAATACATTTCCCAC
-CCCTGCAGGCAACACTTAGCACCTACTACGTTGTGCCGGTCCCTTTGCATCACAATCAGC
-ACACTGTTAAAACGGGTTTTaagtcctaacacagttccaataaatcagaatcactgttag
-aggaagtgaaacattttagttaatcatcctcaagcaattctgatgggcagccaggtttga
-gaCCAGAGTATAAGATGTGTGAGCTGAAccctgccctcagggagattacagacctgtggg
-aaagagagGTGGTTTGCCAGCTTCCTCGTCTTTCTGTTACTGTAAGCGCGCGCTGTGGAT
-GGGATGCAAAATATTCTTGGGTTCTGGGAAAATGCCATTTCTTCCAGCTGTTGAAAAAGC
-GGGATCCAGGGAGCTGACTTCTCCAAGTTAGCCCCCACTGGAGACTGGGCCTGCAGGCAG
-AATAGGGTCAAGGTCCCTGGACTTCAGGTCCAATACCCTGCAGACCCCAGATACAACTCT
-CTGAAGGATTTTCCAGCTGGTGATGCTAGGATGATCTGATCCTGAGAGTTAAACGTTCCC
-AGTATATTGACTCTGACTCAGTGATTTGAGGATATTTCCAGAGCTGATCTGGAGTTGGGA
-CCTGGTAGGCTCTTGGGAATCCTGTCTTTCAGAGCCAGTTCAACCCCTCTCCTTGTCTCC
-CAAAGCAAGCAGACTCTCCCCTCCCTCCCATCCCTCTTTCCCGTCTTTGCCAGCGGTTTC
-CCTCCCTCTCACAGAGCTGGAGGCCAGGGGCCAGGAGAAAGCCTGCATTCACCATACTCT
-CCACTCCGTTCCTCAAAGCAGGCACTGTGCCAGGGAGCCTCCTTGAAGGAACCTTCCCTC
-TCCTGGCCCCATCCCCCCACTCTCCAGGAGGGAGGAGAGGAAGAAACTGTTTCCCTGCCC
-ATCCCCCACAGGATCTGCTTCAAGGCCTCCTGCCTGGTGGCCCAGGGACAGCCAGGGGCT
-GGAGCTGAACAAACCTCCCCCAGCTTCCTTTCCTGATCAAGCAGCCCTCAAATTACAATT
-CTTCACTGTTTTTGGGCTCCTGGAAAGTGTGCAGAGATGCCCGGACTGAGGCTGGTTGAC
-TAGGGGACATTGattcattccacttcaacaaatacggagggcattagagctgggccccat
-gcaaggccctctgcataggctgccttgaacaagacagTGCACTTGCAATGGAAGGTACAG
-ATAAGTAACAGTAGGCAATGTTTACAATCATATATTTAACAAtttttttttgagacagag
-tctcactctgttgcccaggctggagtgcagtggcatgatcttggctcactgcaacctcca
-cctcccggattcaagcgattcatgtgcctgagccttccaagtagctgggattacaggcac
-gtgccaccacgcccggctaatttttgtatttttagtggagatggggtttcagcatgttgg
-ccaggctggtctcgaactcctgacctcaggtgatccacctgcctcagcctctgaaagtgc
-tgggattacaggcgtgagacaccgcacccagccAACATTTGTCCTGTatagaattgtctg
-aagtaaaggtttccctagaagagaaaacgtcctgactgaaacctgcaagatgagtaagaa
-ccaggctaagagtgaagagacagccaagcagcagaaatagcagatgtagaggcctggagg
-ccagagagcacacagcgtgttcggactggccaagagtcaggggaagatgtggctgggaga
-aaacgccgagaagagGTGTCACAGGGCTTACCAGCCATATTTAAAAACGTGGATTTTGTC
-CTCAGAGCCTCCAATCAGGCCTCCTCCATTCCattcattctttcaacacatgcctgttaa
-gcgccaactctataggggccttttctaagcgatggaacacagcatggagcaggataatca
-agtccctgaagctcagattctagagtcacacaagtacataattacagacgatgatgcact
-aaaagaaacatacagggtgagatccctgtttaacaagcaaagctgatccagtcttaagga
-tcagagaaaatgtttgaactgagatggaaaagacataaaaggagttaatcgagagatggg
-gctggggattaagggatggcaagggtattaacctaggcaagagggatagcaagtaaaaca
-accctatagtgggaggaggcatgaccacttctagagacTAAATGAATCAGTCTAAGTTTA
-GAAACAGAAACCACTCTTGCTGTTGAAGAAAATGCTGGTCCCTGGGCTGGGTATTAGGAA
-TGACTCCTAGAACACCATAGAACTGCCAGGGGAGTTACTACCTCTCACAGTCAGAAAGAC
-AGAAGCCAGGAGGCCACCACTGGAAAGGCTGAGCATGAGGACACAATGGTGAAGCTGCCA
-CCCAAAGACAGGATCCTGGGATCAGAAAGTCACTGCCAATGCCACTGGCAGGACAGTGAA
-ATGCCAAGTCCTTTCCCTGCCTCTACAAAGCCAGGGACTGTGCACTACTGTCTCCGCAAC
-CATTTACAGGTAAAAACAGCCCAAACTGTCTGGCTTACTTATGCCTCCCTTCCATCTTTT
-ATGCAAATACATCTAAGTGCTAGAGCCCTAGCTGCAAGGGAGTTGGGAGATGTTTTAGCT
-TTCCAGCATCCGCAACATAGGAAGGCACATAGAATGGGGATGGGTGCTGTCTGTCAAAAG
-ACAATATCCAGCACAAAAAATGTGACTGCAGTGCAGAGAAGAGGAGCTCGTGGGagcatc
-tggtaggccatgttaagaatgtgggtctaagaacgatgtgccattgaaggacttgcaagc
-aagagagtaacatgattagattggttatgttttacaagcatcattcaggatagttggtgg
-agactgggtcagaggagagcccaaggggaaatacagtatagttcacccaggtctctcgag
-agatgaggacatcttaggcatggaaggcggagatgtacagagagaaacagccgagtaaag
-aaatctttcagagtttaagtcaacaagatttggagctatatttgacatgggctgggagaa
-agttaagtaccaaggatgttgcccaggtttctagcttctgcagttggatggatggtgggg
-cttttccctgagatgcgaaacagaagagaaaatccaagtttagggtgaagggcttgaatt
-tgattttggatatattgagtttaaggtctccgtagaggatatctaagaggagatgtggag
-taggcggttggatacacacagatcttacattcctaggagaattctggccctgagaaataa
-acacaggagttgtacagcTgtggctttcaaactgttttaccacatcccacagtaagatat
-atattttacattgcagccatcatacatatgcatgtgtgtatttatatctaaatctgaaat
-aagcttcctcaaacaatatttgccctgtgcatgatgcaccttgacactttctattccatt
-gcttcatccttttgtcaatgcttatatgacgtgttaaactgatttcacactctcctaatg
-gTCAAGAGAGAAAGCAGAAGGAAAGATTATACCAACTAAGATTGTGCCTCAAGCAACTTT
-GACACAGTTTTCCCTGATGgaaaaggagatggtgaaaaactaataagggacagccagaaa
-gggagaaggaaaaccagaacgtgcagaaacacataaaccaagggaggacatttcaggtgg
-taggggttaacaattgtgtcaagggctgcaagaaatcaagtaaaatcagctctaagaaat
-gtcaattgAggccgggcgcggtggctcatgcctgaaatcccagcactttgggaggccgag
-gcgggcggatcatgaggtcaggagattgagaccatcctggctaacacagtgaaaccccgt
-ctctactaaaaatacaaaaaattagttgggcgtggtggcgggcgcctgtaatcccagcta
-ctcgggaggctgaggcaggagaatggcgtgaacccaggaggcggagcttgcagtgagctg
-agattgagccactgcactccagcctgggcgacagagcgagacgccgtcaaaaaaaaaaaa
-aaaaTgtcaattgagatcagaactgaagagtgccctaggattgagtagtgtggaggttat
-caataagggccttttagaggaaagtgatgggggcagaTTAAGGAGCAAATGATCTTTCTA
-AGATGTCAATCTGGCACGCTGACCATTTTATTCCCATGTCACGTCCTCTGGGACTCCCTT
-GTGCACTTGGAACCCAGCCTGGTACCCGATCCCTTTCACAAGAGGCTCCTGGACTCCTTT
-CCAACCTTACTCTCAGCCAGATTGCCCATTACATCCCTTTATGTCAACTCCAGTTACGGC
-TGACAAACAGCAACCAGAAAGAATTTTGGAGTATGGAGTGGTACAAGACCAAGCTAAGGg
-gccaggtgcaatggttcatgcctgtaatcctagcactttgggaggcctaggcaagtggat
-cgcttgaggtcaggagttcgagaccagcctggccaacatggtgaaatcctgtctctacta
-aaaatacaaaaaaaaatagccatgtatggtggcatgcacctgtagtcccagctactcagg
-aggctgaggcaggagaactgcttgaacctggTGATACAGGAAGGGAAGTGCTGGGAAGGG
-AAGGGCACAGTCCCTTTAAATGACATGGAAGGGAGAAagggcgtggtccctggctagggc
-tccaccccagcctgtgcccatggacctaggtgaggacaggcatttttgttttcctgccca
-aatgttgcatttcccaagaccaccctggccggccacgcccccatcctgtgcctataaaaa
-ccctagcaggcagacacacaggtaactggacggctagaggagcacatcagtggaggaaca
-cacaagcggctggacgtcgagaggaacgcaccgacaggcactgacaaaccagcacaccac
-aggccatcgaccaacagaactatgcagagtttggctggggcagtcggaggggagcctggg
-ccactgaacagtccaactccaggggaaaaccttctcactccatccccttctggcttcctc
-catctgctgagagatacctccactcaataaaaccttgcactaattcttcaagcccaggtg
-tgatccaattcttctggtacaccaaggcaagaacccaggatacagaaagccctctgtcct
-tgcaacaaggtagagtgtctaattgagctggttaacacaagccacctatagatggcaaaa
-ctaagagcatacggtagcataagcccattggggcttcaggagctgtaaacatccaccact
-agacactcgtggggtcggagccccacaacctgcccatctgtatgctcccctagaggtttg
-agcagcgggacactgaagaagtgagccactccccttgtcacacgccctgggacggggaca
-agggaacttttcccgtttcaGTgggaggcagaggttgcagtgagccgagattgtgccaca
-ctgcactctagcctgggcaacagagcgagactccatctctaaataaataaataaaaGGAC
-CAAGCTAAGGGTGAGGAGACGTCAGATCATGCTGAGTTGAGGGTGGGGGCGCCACAGGAG
-TGCACCAAACGTGTACAAAGGCACTGATACATACAGCCCCATTTGCTGGCTTGTCAATGT
-GACTAAGATTTGGGGTAGGACATAGTAAAAGAAAATAAACACAGATATATTATGGAAAAG
-AATGTAAACTTTGCAGAGTTTTAAATAAAATATGACtttttttttttttgaggcagggtc
-tcactttgttaaccaggctggagtgcagtggctcactgcgtggctcgctacagcctacaa
-ctcctgggctcaagcaatacttctgccccagcctcctgtgtaactgagactacaggcaca
-caccaccacacccagctaatttttTCTttctttctttttttttttttttttttttttgag
-acggagtctcactctgttgcccaggctggagtgcagtggcacaatctcggctcactgcaa
-cctctgcctcccgggttcactgtggatatatcccctcccgggatatatccatcactgtgc
-ctggcacagctgcagcctcccaagtagctgggactacaggcacccgccaccacgcccggc
-taattttttgtatttttagtagagatggggtttcaccgcattagccaggatggtctcaat
-ctcctgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgag
-ccaccactcccagcctctctctttctttctcctctttcttctctttctttcttttctttt
-tcttttcttttctttcttccttccttcctcctttccttcctttccttccctttctctctc
-tccttccttctttccttccttccttccttcttctttctttctctttcttttctttcttca
-gggtctcaatatgttggccaggctggtcttgaactcctgccctcaagtgatccttccacc
-ttggcttctcagagtggtaggattacaggtgtaagccaccacacccagcccaagaaagat
-tttattttatttttttatacagacagggtcttgctatgttgcccaggctagactcaaact
-cctggacaacatagcaatcttcctgcctcagcctcccTAGTAGCCAGGTGTGCACGGAAC
-AAATTAtatgtattaatatggaacaatctctaagacacattattaaatgaaaaaaagcaa
-gatatggtatcctacagtttacattttttaatgttggaataaatacatacataccctcag
-caccataggaaagattttaaaaaagaaaaaatatatatacatatgcttatttttgtacaa
-atatgtaacactggaaggatattaatgaaattcgtaatttgtaACTTTGGAGAACTGGAT
-ATTTGGGGTTTGGGATAAAAGGAAAGTTTATTTTCCACTGTGTATCCCTGCTTTTAAAAA
-AATATTTCATCTATTATCTCTAACAACAACAAAAACAACTTTTAACAACAAAAATAAATG
-CAAAACACAAGACTTCAACGAAATTCCTATAGACTTTAGAGAGACAGGAGTCCATCTCCT
-CTATCTTTAAAAGTAAAggccgggcttagtggctcatgcctgtaattccaacactttggg
-aagccaaggcaggaggactgcttgagcccaggagtttgaggccagctgaggcaacacagg
-gatatcctgtctctacaaaaaaaaaacaaatcgttgggtgtggtggtacatgcctgtggt
-cccagctacttgggaggctgaaacaggaggatcacttgaggttgaggctgcagtgagccg
-tgatggcaccactgcactccagcctgggccgcagagtgagaccctgtctctaaaaataaa
-ataaaataaaataaaaataaaaAATAAGAACTTTGATGGAAGAGTTTAAGAAATTCTATA
-GCAGACAACACATTGGTCTCCCTGCTTCCAGGCTCCCTCTCCTTCCAACCATGGAATCCA
-CCCCAAAACAAAACTTGATCACATTTCTCCCCCGCTTAAAGAACTTCAAAGATTTTGCGT
-CCTCCCTGGTGTTCACCAGGGCCTGCCTGACCAGCCCTGCCTCCTCTGGGCCTCCTCTCT
-TGTCGGGCCTCCCCCTCTTACCCTGGCTTGGCTTCCCcttctgctccagctggtcattcc
-tggaagcagatctcttcctcccctacccatggttaatccttacctgcctggggcactcag
-ctctaatgctgcttcctaactagagcctaccctaacatcctgtatcagaccctcttacac
-cgtccgttacctccctggcctctccttcagcagttactcgggtgcaatgatatacttatt
-tgtgccatggtttgattgatatctgcctctgcctctccactttgagctccctgagggcag
-gaaccagtctcttttggctcacggttatagcttgagcaattagcactatgcctggcacag
-agtaaagcctaataaatatttattgcatgcatgaTCTAGAATCACTTGGCTGAGGTTACA
-GATTAAGACACGTGTCTACTTGTCCTTCTTTAATATACTTAACATACCTTAGCACTCTGT
-CATTGACACATACTGAACAAGGGCTTATTCATTCATCTTTTAAAAGCTAACTCACTCTTT
-TAGTTTTCCCACCTTTGATAAGGGAGGATAGGACCTGGGAGGTCAGGCCCTCGGTTTACT
-AGCTCATCCTCCTCTATTTCTCTGAGAGCATAAAATCACTGGAAGTCAGCCAGCATGCCC
-CATGGCACTGTGAGGCACAGGGGAGAAGCACCAGGCTCCTGGATTCTGAATGCGTGGCTT
-TGAAGCCTGGCAAGAGTGGCCCCTTCCCTGAGTCCCCCACCAcccctccccttggggcga
-ggattctgcaggcatgagaagtgcccacccagagtctgtgcctatgccttctagaacacg
-ctctgatacccgataattcccttccaaaatgtcactaagttaattcacagggctctttgt
-gggcctcatccctggcttcatctcacctgagggcaaactatactgcctgatgcacatctt
-atagacctgagccttgggcctcaagatagctgtttgcaggtgacagctaggtgttgaccc
-atgcatgctagctccatcactgatgggatgagaggtagctggataagggatggatacagg
-ttccaggggacaggtctccttgggcctacacattctggcacataactccaagggtcttag
-aattctaatttgaacatggccttccaggttgttagaggatatatccatcaaggaagaaaa
-cagaacatatttcatttaacacttgctggactgttgtataatttctaactatagagacat
-atggtatatgggcctccaactctactcttgttctgagccccacaaatgCCCATTtggttc
-tgtcatttctttgcatagacaagctacataacctctctgaacttcagtttcctgagcagg
-aaaatgggtctatggtaataactacattatcagggctggtgagaaaatgaaataaaataa
-tccatgtcaagggcttgagaagaatgccCTCTGGCTGTCGTCTCCTATGACTTCCTGTAT
-GATCTCCAAACTGCTCTCTTTGCAGGGTTTCAACACGGCTGCTCCCTCCTGCCTCCTTAC
-CCACAGCCAATAACCTCCCCATTCTCTCCACCTAGTCAAATCCCACCGTCTTCAATTGTG
-ataatagctggttgattgcacgtttactacgtttcaggcattgtattaagaactttccat
-gcattaactcagttctgacaccaactcgatgaagcaggcactgtttattattccccaaac
-acaaagacacagggatctggagactggaagcactggcggctgcaagtggcagggctggcg
-gggtgtgaagccggagaggagtctttctgcagTCAGGCCTCCCAAATCCCGGGATGGAAT
-CAAGGAGCCTTTGGCTGTCCCACCCCTCCTCCTCCAAGCCCCCAAATCCAAGTCTGTTAT
-ATCCCGTCAGCTCTGCGGGCCTGCCTGTGACTTTCAGCCCAAGGGGGCGGGCACTTCGTG
-TCACGCCACGTTGTCCACATCATCGAccctccctccccttctccccttccttccttccct
-ccctctcttcctcccATTGAGTGCCAGTTCTGTGCCAAGCTTTGCTGTTCAAAATGTTAC
-GAGTGGAGAAGTCAGGGAAGGATGGAATTATAGGTGTTTCTTCTTCATACCTTTCTGTTT
-GGCTGATTTTTTTTCAAATGAGCACGCAGGCCCGGTTCCTCAAACCCACTTCCAATGTGG
-CATTGCTGGGTTGGTTTGGTCCAAGGAAAGCCCTGTCTCCTTAACTCCCAGCCCCCACGC
-CTCCTCCGCCGGCCCCCAAATCCAGGCCGCCCTGCCCCCTCCGGAAAGGGGAGTTGGGGG
-CGAGCGCCGAAATCTGAGTGGCTCTTTCAAGCCTCCGTTGCCATAGAAACCGGCCGCACA
-GGCCGATGCTGTCCATTACACCATCCTCTAGCCTCGCAGCCAATGGACTCCGAGCTCCAT
-CGCCAGAGGCCCCGCCCCCCAGCTCTGGGGAGTCCACCAATCAGCAGGTCCCGTGACTTA
-GAGCCCTGCCCTCGGCCCAGGGACACCACCAATGCGCTTCGACCCTGCCCTCCTTCTCTT
-CGGTGTAACAAGAAGACTCGatatttttttttttttttttaGGAATTCTCCAGATCAGAA
-GGAATTGGCAGTAAGGCCTCTGTCAGCTGCACCCTGAATAATCTTTGGCTGCTATTTTAT
-TTAAGGAGAGCAAAACTGTTTCAATTACGCAACAATATATACCATTCTCTACTAAAACAA
-TTTTAGGAAATGAAAATGTAGGCAATGGGATGATATAGTCTGCTCTATATGAATGTCTTT
-CATTATAGGTATTTTAATTTAACTTAAAATGATCAAGGAACTAGTCATCTTTCCTTTGTA
-TTTCAAATGCATACAAAATTAAAGATACCGAGTTTTTTGATGCAGAGTTCATGAGACATT
-GACTTAATTAGTTGGTAGGCAACTTTTACTGAACCATCTAATTCCTGGTTCAGAACATTA
-CAACTGGAGGATAAATGAATATTTCTCTTAATCCATGGAAGAAATTCTGTTTTTGAGGCG
-GGCTGCGTAAATGGCTCTGACACTCTGGAGTCTAAATAAACCAAATGTGTTTTTAAAACC
-CGTTTGCCATTACAAaaaaaaaacttcaattttttagaacacttttagatttacagaaaa
-attgtgaatataaagttcccgtctaccccagccacccaCCCTGtttctttcattattatt
-attattattgagacagggtcccgctctttcacccaggctggagtgcagtggcgcgatctc
-ggctcactgcaacctccgcctcccaggctcaggcgatcctcccacctcagcctcccaagt
-agcagagactacaggggcatgccaccaagcccagctgatttttgcatttttcatagagat
-gaagtctcgccatgttgctcaggctggtgtttctgctattaacatcacatatggtattgc
-agacgcatggtatatttgttccaattaataaaccaataatgatacattatttattaatta
-gagttcacagtttattcagatttccttcgtttttacccaacgttctttttctactccatc
-tttttctactccaggatccatccagcatgcctcatcgcactagctgtcgtgtctctctgg
-gctcctcttggctggggcggtttctcaCATAGCAACATGACatcactgttggtgctgcgt
-caggtttctctactggaaagtcagtcttcttttgccccttttcatactgtactctttgga
-aggaagtcactatgctcgggccacacttaagtgaggagttatgctctatctccttaaggt
-tggaatagctacatagattatttgggatttttctacactgaagatttgtctcatttattc
-agtaatttatttatatcagtatggattcacagataattatttaatactttaggttataat
-ccaatactatttgattttgttgctcaagttgttccagctttggcttttgggagctctttc
-ggttggctcccgtctccctttgacacacccctatttttgtggggttttctcgttgccgtc
-aagcacttccttactttctggcactacaagatgcctcaggctcatctttcgtatttcctg
-ccccagtcctcaaatcagccatttcgcaagagctttgattgtttcggagaagggtattta
-ttagaaaccaagaactgggcgctaggtgcactcattgctactagggtgtcatttattTcc
-ttcctccctccctccctccctcccttcctttttgagacagagtctcactccatcacccac
-actggagtgcaCACTCATGGCTACAGCCACGTAGCCATGGTAATGAAGCCATAACCTCAC
-GAAGCTTCCAGTTTACACAATTAGAGGGTTAATTACCAAGTTGCCCAGCACTCTGCAGTG
-TGCTgtgtaggcaatgcgggggtaaattatctgaagagaatttaaagacaataaAAactg
-cagcctagacctcctgggctcaagtgatcctccctccttagcctcctgagtagctaggac
-cacaggtgtgtgccaccacactcagctaattttaattttcaatttttttttttgtagaga
-taaggtcttgccatgttgcccagactgatacaactcccggcctcaagccatcctcctgcc
-ttggcctcccaaagtgttgggattacaggcgtgagccaccacacctggccTtggggtatc
-atttcttttaagccttctcaactgacagaacaaagaaatatatctgtatataccaatgtg
-tatatatatacacacatatctatatttccatttgtaaccatctgtatatatattaagcta
-aacatgagttcctgtttatatttaccacttgaatccagggatcatttggcttgcttcctg
-cttgcttatctctaaattcccactccaataacgggaaacctggttcccatcatccacatc
-caccatccatttacttaattgttcaagtccagtatacatgtgtaggattatcaaaattgt
-taacccatacccctgtgggaaactttatcaagtagagtacattcttctgaacactttctt
-ttgcctttagtgttccagcagactccacttgtttcttttttctttttctttttttttttt
-ttttgagacagagcctcactctgttgcccaggttggagtgctggagtgcagcggggccat
-cacagctcacagcagccttgacttcccagtcttaagtgatcctcctgcctcagcctccca
-agtagctgggactacaggcatgcgccactacacccatctaattttttaaaatttttgtag
-agatgggatctcactatgttgcctaggcttgtctccaactcctgggctccagtgatcctc
-ccgcctcagcctcccaaagtcctgggattaaaggcatgagccaccacgcctggcccactc
-atttctaaagttacttaggtcagcacgttttcctctatcctcttcatgaggtcatttcac
-acatttgtaatacggtgaagatgtttgtcatattctgcatgacattttggaattatctaa
-atgtcctaagtgatttttttaactttgcatgcattaaggttcactttttgtgctattaag
-tttaatggatatcaaccaatgcacagtcatatacccacatttcttcaccctaaaaaaccc
-cctgtgctcacttattgaaccctctccccgccaaacactggcaaccacacatccgtttac
-tgtatctatggttttgcctttttgtgccattattaaaaaaaagaaagacgcacaatattt
-ttgttgttgctcttgtcacAGCTGCCacccattgaatccttactatgtcccaggtccaga
-attacactgtcccattttgaagatgaggaaacagatgcaaatgagttgaagtactcccta
-gagactcataacaataagcaaagtttgacttcTATGATTAACTTCTGAGTCACCTCTGGG
-AATATTTGTAATATGTCTAATAGCCACACttcttttgtttgttttgatacaggggtcttg
-ctgttgcctaggctggagtacagtggctactcacaggtgcaatcatagggcactacagcc
-ttgaactcctgggctcaagcaatcctcctgcctcaacctcaaaagtggctgggactacaa
-tgtgtgccactgtgcccagcTATattagccacatttcaagtactcaatagccgctgtgca
-gtttatactattatattggTTTCTGAGttttgtttttgagactgcgtcttgctctgtcac
-caggctggagtgcaatggcacaatctcggctcactgcaacctccaccacctgggttcaag
-cgattctcctgcctcagcctcccaaatagctgagactacaggtacgtatcaccaagacca
-gctaacttttgtatttttagtagagacatggtttcaccatgttggccaggatggtctcga
-tctcttgacctcgtgatctgcccgcctcggcctcccaaagtgttgggattacaggtgtga
-gccaccgtgcctagctATATTGTTTTTTAAAAGATCTCTTATTATTTAGTGAAAAGAAAG
-GAcctgtagtctcagttactcaggaggctgaggtgggaagatcatttgagccccagagtt
-tgaggtagcagtgagctatgatgatgccactgcactccagcctgggcaacagagggagat
-gccatctcacacacatacaaaagaaaagagaCCTTGTAATGCACACACTATCATAATCTC
-TGAtttttctttttttttttttttttttgagacactgtcttgctctgttgcccaggctgg
-agtgcagtggggtgatcactgctcactgcagcctcaacctcctgggctcaagtgatcctc
-ccacctcagcctccccagtggttgggaccacaaatgtgcaccaccacaactggtaaattt
-tttatttattgtagagatgtgggtctcaatattttgcccaggctggtctcaaactcctag
-gctcaagctagcctcccaaagtgctgggattataggtatgagccactgGCTttttttgtt
-tgtttgtttgtttttgtttttgatatggagttttgctcttgttgcccaggctggagtgca
-atggcgctatcttggctcactgcaacctctgcctcccaggttcaagtaattctcctccct
-cagccttctgagtagctgggattacaggcatgcgccaacacctccagttaattttgtatt
-tttagtagagacggggtttctccatgttggtcagactggtctcaaactcctgaccgcagg
-tgatctgcctgcctcagcctccaaaagtgctgggattacaggtgcgagccactgcccctg
-gccTGACTTTTTTAAAATCAGGAAATTTAGATGAATCAAAAAAGAAATTACCTTGTCCCT
-ATTGTTCTCTTCTCATTATGAATGTCTTTGAGGACCATGCCAGTTGGCAAATAGGTATTT
-TGGAGCTAGACACAGTTAGGGTGAGTGGAGTAACACGACAGTACCTACAACAGCCACACC
-CACACCTGAGTTGGCTTCATCCTGCCTTCAGGTATCATTAAGAATAGGtattattattat
-tattattattattattattttgagaccgagtctcactctgtcgcccaggctggagtgcag
-tggcacaatctccgctcattgcaacctctgcctcccaggttcaagcgattctcctgcctc
-agccttctgggactacaggcccgtgccaccacgcccggctaattttttgtatttttagta
-gagatgggtttcatcgtgttagccaggatggtttccatctcctgacctcatgatcctcct
-gcctcagccttccaaagtgctgggattacagatgtgagccaccacacctggccATATATA
-TAtttttttctttgagacagttccactctgtcacccaggctggagtgcagtggtgtgatc
-atggctcactgcagcctggaactcccaggctcaagagatcctcctgactcagtctcccaa
-gtaactaggactataggcacacaccaccaggcccagttaatttttctatttttagagacg
-gggtctcactatgttgcccagactcgtctcgaactcctgggctcaagcaatccttccaac
-ctctacttcccaaagtgttgggattgtaggcatgagacaccacatctggcctataatgga
-atattatttggcaataaaaaggaagttctgatacatgctacaacatagatgaacctagaa
-atcatgatgctaagtgaaagaagccaggcacaaaaggccacatgttgtatgattctcttt
-acatgaactgtccagaagagacaaatccatggatacagaagcagattaatggtggcctag
-ggctggggattagagggaaggcagagcagatgggagagtgactgctaatgagtactgatg
-ctaatggtttcttttggggatgatgaaaatagtctaaaatccattgtggcaacagttaca
-caactctgtgaatgcactgaaagccactgaattgtaaactataaatgactgaatagtgtg
-gtatgtgaattacatctcaacaaagctgttTTTTTTTTTTTTTAATGTTCTGGAAGAATC
-AGGATAGACATTACCTCAGGTGAAGGAAGGCAGGAGATGGGATGGTAAAGGAATTCATTG
-GGGAAAACAGGTTATCAATGTTCCAGTTCTTGTGTCAGATTGCTGACTCCACAGATTTTT
-ATTATGTTATGTAAAAATAAATACACACAGggccaggcatggtggctcacacctgtatcc
-cagcactttgggaggctgtggtgggaaaatcgcttgagcccaggagttcaagaccagcct
-aggaaacatagtgagaacctgcctctacaaaaaaaatttttcgaaattagccagccatgg
-tggcatgcatctgtagtcctaactacttgggaggctgaggcaggaggatcacttgggccc
-agaagttccaggatgcagtgagctatgatcgcaccactgtactccagcccaggcaacaga
-gcaagaccaggtctctaaaaaaaaCCCACACAAGCATAAAGTGAGGGAATCACAGGCAAC
-AATGAGAATGTGTCGCAGATGAAGCGATTCTGTATACCTGAGACAGAGGGAGATGAACGG
-GAAACGGCAGagagtggtcaggacagtcctctctggggagcccgtttgagccgaagctag
-gatgagtagatgctccagcccatgtggggatgggggtgaaaagagttccagacaaaggag
-acagcatgaatgagggccctgaggtaggcccaagcctgttgtgtttgggggacagccagT
-TTAAATGTCTGTTCTGTTATATTGTGGAGTCTCTGTGtatgaatttttcctaaagaaata
-acagacaggccgggtgcagtggctcacgcctgtcatcccagcacttcgggaggctgaggc
-aggcagatcatgaggtcaggagatcgagaccatcctggccaacatggtgaaaccccatct
-ctattaaaaatacaggtcgggcacggtggctcacgcctgtaatcccagcactttgggagg
-ccaaggcaggcagatcacaaggtgaggagatcgagaccatcctggctaacacggtgaaaa
-cccagctctactaaaaatacaaaaaaaaaaaaattagccgggcatggtggcgggcgcctg
-tagtcccagctactcgggaggctgagacaggagaatggtgtgaacccgggaggcagagct
-tgcagtgagccgacatcaagccactgcactccagcctgggtgacaaagcgagaatccgtc
-tcaaaaaaaaataaaaattagctgggtgtggtagcgcacacttgtaatcccagctactca
-ggaggctgaggaaagagaatcgcttgaacccaggaggtggagattacagtgagccaagat
-tgcgccactgcactccagcctggcgacagagcgagactccatctctaaataaataagtgg
-ccaaaaacatacatacaaaggtgttcactgccatattgtttataatagcaaaaaggggta
-aaacaatcaaaatgtctttcaagaaggaactgattcactttgggaggccgaggtgggcag
-atcacctgaggtcaggagttcgagaccagcctgaccaacatggtgaaaccccatctctaa
-taagaacacaaaattagccaggcgtggtgatgcacgcctgtaattccagctacttggaag
-gctgaggcagcagagtcatttgaacccaggaggcagagtttgcagtaatccgagatcacg
-ccattgcactccagcccaggcaaaaagagtgaaactccgtctctaaaaaaaaaagaactg
-attaaatgaattacaatataCTCGGCAGACCTGGACGAGAACCTACGCACTACATGGAAA
-GAGAAAAGAGATGTGAAAAAAGCAGGTTACTAGAAATTACATATAGTAACATTCCACTTG
-TGTAAAAAAAACTATGTGTGCATGTGATTATAAGCATTTAAGTTTCTGGATggccaggtg
-aagtggctcatgcctgtaatcccagcactttgggaggccaaggtgggcagaccgcttaag
-cccaggaatttgagaccagctcgggcaacgtggcaaaactcagtctctataaaaaataca
-aaaaattagccctgtgtggtggtacgcgtctgtagtcccagctacctgggacactgacgt
-gggaagatcacttgagcccaagaggttgaggctgcagtgagctgtgattgcgccactgca
-ccccatcctgggtgacagggagagaccttgtcgaaaaaaaaaaaaggccgggcacggtgg
-ctcacgcttataatcccagcactttaggaggccaaggcgggcagatcacaaggtcaggag
-ttccagaccagcctggccgatatggcgaaaccccgtctctattaaaaatacaaaaattag
-tcgggcgcagtggtgggcggctgtagtcccagctacttgggaggctgaggcaggagaatc
-gcttgaacgtgggaggcagaggttgcggtgagccaggatcgcgtcactgcactccagcct
-gggcaacagagtgagactccgtcccgtctcaaaaaaaaaaaaTTCTGGAAAATTACATTA
-AAATTTAAAATTTACTCATTATAATGCCATTTTTCTAGATTACAGGAGACGTTCACTTTT
-CGCCTTATATAATTCAGTATAAggccgggcgcagtggctcatgcctgtaatcccaaaact
-ttgggaggccgaggcgggcggatcacttgaggtcaggaattcgaggccagcctgaccaac
-atggcgaaactccgtctctactaaaaatacaaaaattagccaggcgtggtggcacgcacc
-tgtagttccagctactcaggaggctgaggcaggagaatcgcttgaacctgggaggaggaa
-gttgcagtgagctgagatcacgccactgcactccagcctggtgacagagcgagactccac
-acacacacacacacacacacacacacacacacaaacacaaacacCATATATATACATATA
-TAACTTTTGTAATAATAAAAAACATACTTCTACTTAAAGAGAATATCAATAAGCCCTAAA
-GTTTTTCATAGTGAAAGCCCTTCAAAATTGCTTGACAAATAAATTCTAAGTATACTAACT
-ATGGGAAAAATGTATGCTTGCGAAGACTTTGTTAGACACATTTTCTTAAATGCTGAAGCT
-ATAATTTAAAAATGAAGATTTCAGGAGACAAAATAAAGTCAGCTGGATAAAAAATGTGCA
-GAGAGAAAAAATATACCAAAATGTTAAGAGTGAGTGTCTCggccgggcgcagtggctcat
-gcctgtaatcccggcactttgggaggctgatgcgggcggatcacggggtcaagagtttga
-gatcagccggccaacatagtgaaaccccgtctctactaaaaatacaaaaattagccgggc
-atggtgatgcatgcctgtagtcccagccacttgggaggcttagggaggagaatcacttga
-acccgggaggcagaggttgtggtgagctgagatcgtgccactgcccttcagcctgggcaa
-cagagcaggactctgtctcaaaaaaaaaaaaagaGTGGGTGTCTCTTGGCACTGAGACAA
-TGAATCCCAACAAATTCCCAACAAATGATATTTTTTCCTTAAATTTCAGAATTTTTGAAG
-TTTTACACAATGAATATTTTGTGATCTGAAAATTTTTTCTTCCCCTCCTCTTCCAATTCA
-ACAGCTGAATAATAATCTtgtgttcattgtctgctactgcttaagacattctttccagac
-ttagaggcttaacaaagcaaacagctaccatctcacagtttctgtgggtcatgaatccac
-gcagagtttagttgcatggttctggctcagggtcattcacgaggttgcagttgagatgct
-ggtcagggctgcagtcatctgaagacttgactggggctggaggatctgattccaggatgg
-atcgatcactcagatggctgttggaagtaggtctcagttccttgttggtgttggcaggag
-gcttcagtttctcaccacgtagagctttccacagggctgcttgagtgccctcgcatgaca
-gctgacttctcccagaataaatgatacaaaataagacagccaggaggaaaacatagagct
-ttctatgtccaatcttagatatcacaaaccatcacttctgccatattctattagttagag
-gcaagttcacacttaactgggaaggggaggaggaattaggctcttccttttgaaggaagg
-aacattaaagaatttgtgaaGggccgggcgcagtggctcatgcctgtaatcccagcactt
-tgggaggctgaggggggcggatcatgaggtcaggagattgagaccatcctggctaaaacg
-gtgaaaccctgtctctactaaaaaaatacaacaaaaattagcagggcgtggtggcaggcg
-cctgtagtcccagctactggggaggctgaggcaggagaatggcgtgaacccgggaggcgg
-agcttgcagtgagccgagatggcgccaccgcactccagcctgggtgacagagcaagactc
-catctcaaaaagaaaaaaaaaaaaagaaTTTGTGAACATGTTTTTGAAACACAAGAAAAT
-ttccagctgatctttccccccaaatttccctcctccaatccaactacaacacatgaaact
-ccttaatcttgctgaagcgtacctctgatcatgtcatcctgcaataaaaaaactgtccct
-ggctccccacaacccagggaactccataacttggcttctgaggaccaactaccgtattgc
-ccttcagctccagctcaacataaacgcatcgtattcctcatgtacactcccccatctctg
-gtcttggcacctatccatgccctctcaatacctcgtcccagtctccttcccatctccagt
-cccttgcacttgctgtttcctctgcctggaatgttttacatggatggttcttcgtcatct
-tgagatctaaactctcccccatctctatcatcccccgtcccagtcactcactctctcatt
-accttgttttcttttcattgtcgtttgagacagggtctcactctgtcccacaggctgggg
-tgcagtggtacgatcacagctcactgcagcctcaacttcccgggctcaaacgatcttcct
-gcctcagcctcccaagtagctaggactaaaggcacaggccatcacacctggctgttttgt
-attttttgtagagacaggcttttgccatgttgcctaggctggtcttgaacttctaggctc
-aagcatctgcccacctcagcctctcaaagcgctgggatttcagatgtgagccaccttgcc
-cagcccctccctcccttctttccatcacccagtctggggtgcagtggcaccatcatagct
-cactacagcctcaaaatctctggcttaagcgttttcccacctcagcctccccagaagctg
-agatgacaggtgcttgctaccatgcccggctaatttttgaatttttgtggaggtgggatt
-tctctatgttacccaggctggtctgaaactcctgggctcaagcgattctcccgccttggc
-atcccaaagtgcagggattacaggcgtgaaccaccacacccagcccagctttattttctt
-tatagcagtcacaactatctgaaattatcttatttgtttacctgctcttttctgttgccc
-tcacttgctccttaagaacagggacctctgtcttggtcactgctgtaacccagtagcccc
-agttccaagttcactgcctggtgcacagtaggtggccaataaattgttgaattaaATGTC
-CTCTCTTCCAGGGAGTTGTTTTAGAAAGAATCACACACTGCATAAATGTCTGTTGAGGAA
-GAAAATGAAAAAAACAAAAGTGAAGACATTATCTTCTCGGCTGAACTTCCCACACCATCT
-TCTCTGTCATTAATAAGTCCTGGTGTCTACACTGGGGAAGGCAGTCCAAGGTTCTTCCAG
-GGCCTAGGTTCAGCCAGACTTTAACCATCTCTAGCTCCTCAGAGTCCGTCAAAGGGCCTA
-AGGAATGGTAAGTATTAATAATGtttgtttatgtatttatttatttatttattttgagat
-aaagtctctgtctcccaggccggagtgcagaggtacaatcattacaacttccacctttcc
-ggctcaagcaatcctcctgcctcagcctgccaagtagctaggactacaggcaggcaccac
-cctgcccagctaatttttgtacttttttttgtagagtaagggtttcaccatgttgcccag
-gctggtcttgaactcctggccttaagtgatctgcctgcctcagcctcccaaagtgctaag
-actacagctgtgaaccactgtgcAGGGTCAAATGTTTATTAATGGATGCATGCATGGATG
-GAAGAAGGAAAGGAGGCAGGTGTGAATAATGAATGCAGCATTTTCACTGCTGAGAATAAA
-GAGTGAAATCCTGGTCCAAATCAGTTTGGCAGTGAGTAAGGTTAGGAACTATTCACATAC
-ATTGGAATAATAATAGCAGCAGCAGCTACAGGGTCAGAGACAGATCTTTGAGAGGCCATA
-AGCATTGAAAAGATTGTGGTACCTATCACACACCGTCTAAAATAAAACAAATATTTTATT
-TATGGGAAAAGTGTTAAGGTGTTGATAATTCCAAGAAAGCTTTTATTTGTCCTACAATCA
-TTACTTTGATACCTTTTCTGAAATCCTAGAGCTGTCCCCACTCTGCCCATTTTTTTTTCT
-CATTATGGTGATGTCTCTGGGTTGCTGGTGACCTGCGTAACTATTGGGAAATCTAGTTTC
-TCAAAACttttagtttttttttagacagggtctcactctgtcactcaggctggagtgcag
-cggctcactgcaacatccgcctcctaggttcaagcgattctcatacctcagtctcctgag
-tagctgggattacaggtacgcgtcaccaagcctgactcattattttgtacttttagtaga
-gacaaggtttcaccatatcggccaggcggatctcgaacttctgacctcaaatgatccgcc
-cgccttggcttcccaaagtgctgggattacaggtgtgagccaccgcgtccCGTCTATCAT
-AAGTtttattgaacattgcctaggtatcaggatgtgtttacatgcattatctcatttaat
-ctgtaaaaccaccatgtgagggagaaactgaattatccccattttcaggataaggaaaag
-gaggGACTGGGAATGTGAACTCAGGAAGTGTGACTCCATCGGGTAGACTGCTCAGGCTGC
-AGATGTAAAGGTTTTACACGTAGGCTTTTCCAGATCTCAGCTTCTGAAAGGCGGAGGGAC
-CGTTTGGACGGGAGCAGGGCCTCCTCTTCCAAGCACCCTGTGCCTTTAAGAGTCGCCCCC
-TCCCTCCAGGGATGCTCCAATTTCTTTCTCCCCACCACCCCCACCCCGCCCCCCGCGCCG
-CGGAGCCGCACCTCGGTCCTTCCTCCCCGCCCCACACCCTCAAGCTCGGCTCTTGGCCTT
-CGCTCGTCCAGAAGTGGGTGAGCTGTACCGCCAGAGGCGCATTCTCCTAGCCCCAAACCA
-TGCCCGCTACGCCCCAGCGGAATGCCACCTTAAAGACCCTAATCCGGGCACCTCCCAGCT
-CCTGCTTCCCAAGGGCGAGGCCTCAGCGCCCCCTCCCATCGCCCATGCTCACGACGCCGT
-GAAGGTGACCTCCCCCAGGGGCGGCACACGCCCAGTGGTGCCCGAACTGGCTCACACGTG
-GTGAGCCGGGAGCGCGCGGCCCCTCCCCGCCACGCGCCTCGTGCCGGCCACCCGGCCACG
-CCCCCAGGACTGGCTCCGCCCCGTGCCCCTGCACGCTTCTCCAGGCTTGGGTGGGGCGAC
-GCGCCCAAGTCGGGCACCGGGCAGGCTACGGGGTGGGGTAGGACCTGGGAATGGCGCACC
-CACGCATCCTCGAATGTCGCCTGCGGTTTGTGAAAAGCGGGAAGTCCGCCCAGCTCAGGA
-CCTTTGGCTGGCAGGCGAGGTGCCCCGCGGCCCTTGGTGCTGAGCAGGGGAGAGACAGCT
-GGGACCGCGAGCCTGGGAATCGAATCCTAGTCTGCGTGTCCTCGGTGCTTCCTATTTGGA
-AACTGGGCATCATATTATCATATTCCCTTCTCCCTCCGGATTCTTATGGAGCTTCGAACG
-AGATTAAATATACATATATATGAGAAAGGGATTTGTTCACTAGGTCCAAAAGCATTTGCT
-GGTCCCATATGTGGTCGGACCCTGTGTGTAGTAGGCGGGGGGCAACATCTACGACAACCT
-GAGTTCGTCCCCTTAAGAAGCTTTCCTGAGTCTTGGGCCCCCCAAATTCTCTTCTGGGAT
-GGTCCGAAAAGACGTCCCTGAAAGAGGAAAGGGCGGAAATCCTACCTGACGGCAGGTGTC
-TCGGAATGAGCTAAAATTTAAAAGGCAACGCGGGGCAGGGACAAGCGTCCAGCGTCAGAT
-GGAAGCAGGCTCGCGTCCCCTACCCTTCCTCCAACCCCTAACCTAAGAAAAGAAACCGAT
-CTCGCCGGTCTCCCCCAATCCTAGCCGCGAGACCGCCCAGCCCCGCAGCCCGAGCCCCGC
-CCCGCTCCGGCGGCCAGCGATTGGGAGATGCAAATACCGGCTTCTCTGCCCAGCAACGGG
-TGACGCGGCGCCCGAGCGCGAGGCGGGGCCCGGCCGCAGCCCAAGCGGGCACCTCGGTGT
-TTACAcggggcggccccgcgcgcgccgcagcggcccgcagacggcgagggggaggggtgg
-tgcgcgcgccggcggggccgcgcggggAGAAAGACACTGAAAGGCGTcggcggccgggcg
-gggagcggcgcgcgcgggccgcggcggAGCCAGAGGCTGCAGGAAGAGCCCGCGGGGGCC
-CGGAGGGTGCGATTCCTCGGCCCCCGCAAAACAATGTGTGTTGTGAGCCAGGACGCAACT
-TGCCGGAGGCGGCGGGGGCGCGCCGAGCCCGCCTGAGACCGCGCTGACCTTCTCCCCCCG
-CCGTCCGTTGGGCCCGAGCGCCCAGCTCCTCGCTCCCCAGTTcgcgggggccgggccgag
-ccgcggggcggggccgccccTCCGTCGCCGCTGCCTCCTCCCCCACCCCCAGCCGCGGAG
-GATGCGGACGGCCCCCGGCGGCGTCTAGCGGCCCCGGGCCCAGGCGCGATGGTGCAGCAG
-CGGGGCGCGAGGGCCAAGCGGGAcggcgggccgccgcccccgggacccgggccggccgag
-gagggggcgcgcgagcccggcTGGTGCAAGACCCCGAGCGGCCACATCAAGAGGCCGATG
-AACGCATTCATGGTGTGGTCGCAGCACGAACGGCGGAAGATCATGGACCAGTGGCCCGAC
-ATGCACAACGCCGAGATCTCCAAGCGCCTGGGCCGCCGCTGGCAGCTGCTGCAGGACTCG
-GAGAAGATCCCGTTCGTGCGGGAGGCGGAGCGGCTGCGGCTCAAGCACATGGCGGATTAC
-CCGGACTACAAGTACCGGCCGCGCAAAAAGAGCAAgggggcgcccgccaaggcgcggccc
-cgcccccccggTGGTAGCGGTGGCGGCAGCCGGCTCAAGCCCGGGCCGCAGCTGCCTGGC
-CGCGGGGGCCGCCGAGCAGCGGGAGGGCCTTTggggggcggggcggcggcgcccgAGGAC
-GACGATGAAGACGACGACGAGGAGCTGCTGGAAGTGCGCCTGGTCGAGACCCCGGGGCGG
-GAGCTGTGGAGGATGGTCCCGGCGGGACGGGCCGCTCGGGGACAAGCGGAGCGCGCCCAA
-GGGCCGTCGGGCGAgggggcggccgccgccgccgccgccTCCCCGACACCGTCggaggac
-gaggagccggaggaagaggaggaggaggCGGCAGCGGCTGAGGAAGGTGAAGAGGAGACG
-GTGGCGTCGGGGGAGGAGTCGCTGGGCTTTCTGTCCAGGCTGCCCCCTGGCCCGGCCGGC
-CTGGACTGCAGCGCCCTGGATCGCGACCCGGACCTGCAGCCTCCCTCGGGCACGTCGCAC
-TTCGAGTTCCCGGACTACTGCACCCCCGAGGTTACCGAGATGATCGCGGGGGACTGGCGC
-CCGTCTAGCATCGCAGACCTGGTTTTCACCTACTGAGCCCACCGTCAGCGGGGCGCGCAC
-GCCCCCAAACCAGCTGTTTACATACAGGAATCAGGTATTGGGGCCCCTCGGAGGCCGAGG
-CTGGCACCCCATCTCCCGCGCAGCCTGCCCCCTCCTGGACGTGCCCATCCCCCCTCAGAT
-CCAGACATGCCCCTCCCCCGCAGACACACCCCAAGGCAGCCCAACCCCCACCCCTTCCCC
-GACACCCAAGCCCCTCCCCACGTCGCCCCCTCCTGCACAGCCACCAGCAGCCAGCCCCCT
-CCGATACACCTCCCGTCCTCTCCTACAGACCTGCACCCCTCCCCCCTTTTGCACACGCCC
-CTCCTCGTGGCCGGAGGACCCGCCCCCTCCTTTGCTCCGGAATCTCTCCTCCCTCGCCCG
-GCCCGCCTTCTCTGGGTTAGGGGGGCGATGCGGCCGGGTGGCAACGCACGCGCCTCCTGC
-GCCCCTCCCTTCCCTGGGGGGAGGGGCGCACCCCTTTTATCCCCGGAGCGCTAGGGCCCG
-CCCCTCCGCTGGGGCCCACCCCCTTCGTGCGCATGCTTAATGCTTCTGGGGAGGAGGGGG
-CTGGTCCCAGCGGAGCCGCACTCTTCGCCCGCTCCGGGCAAAAGCGGGGGCGAGTGTAGA
-GCGATCCTGGGAAATCCTTTGATCCGGGAGCCCTAGGTTTCCTCTCCAGCCAACGGGGCG
-TCGCTGCCTTAATGGGAGGAGCACTCGGAAGGGTTGGTTTGGGCCTGAAACTCTCCCAAG
-TGGCATAGCCCCTTTTCCGGTATGGGGTCTCCTACACCCACGCGCACCACCTCTCCGGTC
-GCGTGGCTGCCTCTACAGCCTACCTATACGTCCCTTTTTCCCCCCAACTGGGAATTGAGA
-GGTAAGGTCTTTCTCTGGAAATCCAGCAGTAGAGGAAGGGACCACCCAAGAAAACTAAAA
-ACCAAGGCACCTTACCAGTCTGTCTGGGGACAGGATCCCTGCTGCACCTTCCCCACCCCC
-TCCTGGGAAGTGCCCCCTCACCTCAGGGCACCCGCAACCTGGGCTCCTCCCTGAGCGCAC
-CGGCCCTTCCTGTCACCCAGGTCCACCCTCAGTACTCAAGCTGCAGTATACAGCGGGAAA
-AACTGAGGCACTTTGGTGCTAGGGGTTTGGGACTGAGGCGTGGAGAGCAGATGTGATGGC
-AGGAAGACTCTCGCTTTTAAACATCTGGTTTGGGAGAGACCATCGACTTGGCCAGTGAGA
-CTGAGAATGGATTCCGAGTAGTGATGGGCCGTTTGCACCTCGGTTTTTCCACGTGAGAAA
-TGGGGAGAACGCTGCTGTTAGGAGGAAGTTGTGTCCAGTTCAGGGTGCCCTCGGGAGCCC
-TGTCCCTGTTGCTGTGGCCCCTCTCACGCCGCCATCTCTCTGCCCCGCCCCGCCCCTCCG
-GCCTCCCCACACCCCCCTTGCCCTCACTACCTGTATCTCACCGGCGTGTGTTCACCCTCC
-CGGGTGGCTCACACACTCTCATTCACACACACAAATCTCAGGAACAAACGGTCCCAGAGT
-CCTCCGGACCCCTGCCCAGGGTCTCTGCAGGTCTCTGCCCCACGCGTTCCCGTCGCTGAC
-AAAGCCACCAGCTGCCTCCTTTAAGCTTGGTGCTCCGGCTCTGGGCCTTTCTTGCGCTCT
-AttttttttttttttttttttAAGAAAAACAACAACAACAAAAAAAGACAATGAAAAAAA
-AAACGTCATGTGAGTGAAGAGATGTCACTGTCTGTGGTCTTGGAGAACTAGTCTCGTAGC
-TGAGGGGTGGGGTCCCTCTGTCTGGGGCACTGGCACCCACAGCAGGACTCCGCCAGTCTG
-ATGCCAGGACTGAATAAAGTGTATTTGCCCCGACCTTGCCCTGTGGTTCTGCATGTCTGT
-GCTCTTCCTCAACCCTCCCTAAACAGTTTGCCAGATTCAAGTCCGTGTGATTTGGGCCCG
-AGCTGGGTGTCCCAGGGCAAGCCACCTTGCCTGTCTAGGCCTCTATGTCAGGACTCCCTG
-GCCTTCATGaagaatagcaaactcatccctgtagggaccaggcaggtaacatagacgagt
-gactctgggtggacagtggtgtcatgacccacttcaaggggcctacctcctgccagttgt
-gaccctgtgggaatgcagtccacagtggccaggtggccagatttttcaagaaaagctgga
-tggatgtttctgagtcatcttaatttcaaaatgagactcatattttaaaatttctgtggg
-ccaaatgaaacaagtatgcaggcaggtctggtccgagggGGCTGGCTTGGCCATGCCTTT
-CTGTGCCTTTAATGAGgactaagaagcaagattgggccacactgtctggactcaaagccc
-agctccaccactgagcacccgtgtgactctttccatatgtataacgtggggataataata
-atagctgcttcacaggatGAAATGAAGTTTGAGGTGAGAAGCATTCACCATGGTGCCCAT
-CGTGTTACTCCATTGTCAGAGGAGGAAACGGGGTCAGGCAGGAAAGCAACTTAAAGGAGG
-GCCTGCAAGCAGCCAGGGTCAGAGACAGGGCTTGGTTCTGCTTCCTGGTGAAGCATGGCT
-TCGGGGTGCTGCCTCTCCCTCCCTGTTTGAATCTGCAGATTGTGTTAGGCCCCCAGCTGA
-GGGCCTGGAGTGGTGGGATTGGTCCCAGTGCCTGGCGCACATTGGCCTGCAGAGTAGATT
-AACTGAATGACCAAAGAGCAACAGAAGTCTAGTGATTCTTGTCTTTGAGGTTCTGACTGG
-TGTTTTACAACTGAGTCCAAGGCTTTTCCCTCCTTTGTCCCTCTGACACCCCTCCCCCTA
-ATTCTCATCTGTCAGATCCAGTGTATTCCTAAGCTGGGACAAAGCCTCTGTTTTCCCAGT
-AGGAGCCAGGGCTGAGTGTGGAAATTACAGTGACTGCTTCTTCTCAGCTTCTCTGGTTGA
-AAGCAAGCTGGCGAAGTAAGAGGAGGTAGAGTTGAGAAGGTGTGGAAGATAGGGACAGCT
-GCCCCCAGAACTCCCTTCAAGGGAGGACTTccccagctatgggaagtgccatcagggtgg
-ccgcagctgcagagagccacttcacctgagaccacgcccttcctggggcagcctgtatct
-ggtgtctgagtgaggcatggtataaacacctggtcatttcaatccaacatgggacggaca
-ctgacagacagtactcccagcaggcccaggccagccagggcttcgtcaggcctgcagcac
-aatttgacttcctatgcccaggcctgcttcctcttcttcctcttcttttcacaggtgctt
-attcctaataaacatcttgcaacccaaactcagtctcattgtctgtttctagagaaaccc
-agtctacaacaGAGGGTTCAAGAGACTGGACAAAGGGAATTGGGTCAGTGGCCCAGCAAC
-TGCAGCTAGGCCGGTCGGATGTATCCTAATGTCAAGAGTCTGTTCACCGATGCCATCAGC
-ACCAAACTAGGGGCTGCACACTTTCCTAGTCTGCACACCAGTCACGTCAATTAGAGACTC
-CAGCCTCAGCCCGAAGGCCTTCCAGGGCCCCCTGCTGATGCCATTCTCACTGCCAGTCCG
-TCCCCTGGTAAAAGCAGGTGGGAGGGAGGTCGTCATCTGAGTTTGTCTTACAGAATAGCC
-TGGAATGGGGTGCACGGTAAAATGCCTGACCGGAGATAATGCTAGAgctgtggaaccttg
-ggcaagcctcttcccctttgtgggcTGTACTGGGAGTCGGTAATAGGACTAGAAGAGGGA
-CCATCTCATTTTGGTTCCTTCCATTTCAGATGCTGACCTGAAAGGTCGGGGAGACAGCTC
-CTTATGGGGTCTCTGGGGCCACCTAGTGGCTAAGAGGAGTAGAACCAAGGTTCTGTGCAG
-TTGGGAGGTGGGAGTCGGGGTGTGTCCCAGGCCAAGGAACTGAGTCCCACTCGAGTCTCA
-CTCCATTCATGCATTGACTCATTGCTGGGTCATGCCCCTTGCCTGGGTGGTGTGAGCCAC
-CCTGCTTCCAAGGCTTTCAAAACACCATACGCTGAtgtattgtttctcatctattgctgc
-gtaacaaattgccacaagcttagcagtgtaaaacaacatgcatttgttatttcagtctcc
-atgcatcaggagtccagcatgccttagctgggtctctgctcaggatctcacaaggcagca
-gctggggtgctggtggcccgcattccttcttggagctcagcagccttttccaagctctca
-cggtagtgggcagaattcagttctttgtgcttataggacagagatccctgttctattgct
-ggctgtcagttagtaccactcttgattactacaagctgctcagtttcttgccacatggcc
-cccacagggcctccccagccttctcacaatattgcaacttattttgtcaaggccagagga
-gaatttttctgctgcttggagtcacttggctcagggaaggtttaagctctcttttaaaag
-cctctcctggctgggcatggtgtgttcatgcctgtaatcccagcactttgggaggccaag
-gtgggtggatcacctgaggtcagcagttcgagaccagcctggccaaatggtgaaacccct
-tctctactaaaaatacaaaaattagcctggcgtggtggcagtcgcctgtaatcccagcta
-cttgggaggctgaggcaggagaatcactcgaacctgggaggcggaggttgcagtgagcca
-agaccaagccactgcacttcagcctgggcgacagagcaagactctgtctcaaaaaaaaaa
-aaagaaaaaaaaggaaaaagagagagagaaaaaaaaagccttccctaattaggtcagact
-cacccaggaaaatctcctttttgattaggcatcaactaatgtgggattttatatctgcaa
-aaaatcccttcacctttgcagtatattgtagccttataagagtgacagctgtcatactag
-atttgcccacactcaaaagggaggaggctgtctagggcagctacaccagagactgggaat
-cttgggggccatcttagaattctgcttatcacacacctgtaatcccagcacttcgggagg
-ccaaggtgggaggatttcttgagtccaggagttcaagaccaacctggccaacatagcaag
-acctaatctctagtaaagttttttttaaaaaaattagccaggcacggtggtacacacctg
-tagtctcagctacttgggaagctgaagtaTCATAgctgagaattctcaggtctacatctc
-catcccagacatgactagactagctgccttcttgtcatctccactgatatatctaattgg
-cacctcaaactggacatgccaaaaaatgaactgtttccacagtgctcccaagcctgcttc
-cacagaccacatctgcacagctgatgtgaaatgaaaggctaaagcctctcagttatcctt
-gatgcctcttttcctcccagcgccatctcccttataccctgttggctctaccttcaaaat
-atgccctgtgtcttgtcacttctcacatcttccatggcctctgggtccaggatataaggg
-catacgaagggctccttgcgttttcctttgccccactcatagtcttattgtccacacagc
-agccggagtgatctggttaaactgtaaatcccagcacaccctgccactgttcaaaattct
-ccaaagactctcattcagtagaagccagagtcctcagcatggcctgcaaagccccataag
-aagtagcctgtggctcagcctcggcttcatcttctactttttctgtttctcacatgccca
-gtcacactggtcttgctgttcctcaaaagtgccaatcacacttccgcctgaaggcttttg
-cacatgcttttccctctgcttaagatacccttcctccggctgggcgaggtggctcacgct
-tctaatcctagcactttgggaggtccaggtgggtggatcacctgaagtcaggagttcgag
-accagcctggccaacatggcgaaaccccttctctactaaaaatacaaaattagctgggcg
-tggtgacacatgcctgcagtcccagttactcaggaggctgagacaggagaatcacttgaa
-tccaggaagcagaggctgcagtgagctgagatcgcatcactgcactccagcctgggcaag
-acaaagcgagacttcacctcaaaaaacaaacaaaaaaatacccttcctccagatagccac
-atgtcttacttccttcaggtctcagctcccagggcgccctagagtaggcacagggagtac
-ctcacagtgtcctccctgaccatccatataaagtaacatcctccataaactatcctgtta
-ctttgctttatttttctgaatagcatttatcactatctggcatttatcacctgtagtttt
-tactttttgtctctctctctctaatttgtatgtaagcttcataaggaaggaatgactctg
-GACTGGACTCCATGCCTCAGCACATTCACCCACCCATTCAACAAACATTCTTAAGGGTCT
-Aggctgggcatggtggctcatgcctgtaatcccagcactatgggaggccgaggtgggagg
-atcacttgaagccaggagtttgagaccagcctgggcaaggaaacaagaccctgcctctaa
-aaaatacaatttaaaaaagtatccaggcacagtggcgtgagcctatagtcccagctactc
-gggaggctgagctgggaagatctcttgtgcccaggagttcaaggctgcagtgagccatgg
-tcatgccactacactccagcctgggtgacagagttagaccctgcctgtaaaaaaaaaaaG
-GTGGGGGGCAGGGTGGGgaaggtttgccttgaccaggccgcgtgctaggtgccgggcata
-caaaagtgaaaaacgtgatttgtcctcagtgagctcacaggtctgaggagacacataaac
-ccaggaatggaaatgctttgctggcgatggacagtgagtctgggagaacattgaggagat
-gtttaacccagacaatggagtggggtgtggtcaggtcattccctggaggaggtgatgttt
-aagctgtggcatgaaacctcagtaggatgtgatgaccttagaacatggctacacgttctt
-tgacattcctcctttaaattaccttccctttgaatctgggctgggccttcatgatccatt
-tgtaaccaacaggacacagcagacatggtgctgcaggatttccaaggctaagtcacgctg
-aaccgccatgttgaaaggccaacagccaagactgccatgtggagaagcagcccgggccac
-gtgggaagaccatgtgtaggtagctgctccagttgacagctgagcccaggcaccagactt
-atgagttgagaagcttccaggggattccagcccctcataattcaactcactcccagctgt
-tggagggccttcccagcagaggcccagccatcacagagcagagacaagccatcccttcta
-tatcctgtctgaattcctgacccagagtccacgaacataatgagatggcagttgtccaca
-ctattaggttttggggcagtttgttatgaaggaataactggaacaataggataaggaaga
-gtgaggtgaaggaaaggactttacagatgccagcaacagtacatgggaagacctggtaag
-agtggctgacacagaagctaaccagcttgcggggaaggtgtggagagaggagggtgacag
-gcaagagtgagaaggaCCTTGAAGGTATTTGGACTTTATCCCGAGTCTTCACACTGCAGC
-CCAAGGGGTCAAGGAGTCtttttttttgtatggtaaacatggggtcttgctatgttgccc
-aggctggtcacaaactcctggcctccagagatcctcctgccttggcctcctaaagtgctg
-aaattacaggtgtgagacactgtgcccagccTCCAAGGGGtcttctcttttttttgagac
-cgcgtctcgctctattgcccaggctggagtgcaatggcgcaatctcagctcactgcaatc
-tccgcctcctaggttcaagcgattctcctgcctcagcctcctgagtagctgggactacag
-gcatatgccaccacacctggataatttttgtatttttagtagagacagggttttaccatg
-ttggtcaggctggtcttgaactccttacctcatatgatctgcccacctcatcctcccaaa
-gtgctgggattacaggcgtgagccaccatgcccagccGGggtcctttgaaaacacaaacc
-tgaccactgctgtaaacctttcgatggccccttactaccctcaggataaaCTCTTGAAAT
-TCAAGGCATTTTGCAGTTGACTCCCTCACTCTTTTATAGATTTATCTTCGGTCACTTTAT
-CCTCAGCTACGCCAGGCCACTCTCCAGTGACAATGCTTCCCGCCTCACCCATGCTATTTA
-TCTTTGCTCATGTGGAGGAATTAgtgggactttgggctaatcaccttgcctttcgaggcc
-tcagtttccccatctgtatgattaggtggttggactagaagtttttgttttgttttgttt
-ttgtttttgtttttttgagaccgagtttcactctgtcgcccaggctggagtgcagtgctg
-tgatctcggctcactgcaacctctgcctcccgggttcaagtgatttttctgcctcagcct
-cccaagtgactgggattacaggcatgcaccaccaggcccaggtaatttttttgcattttt
-agtagaaacagggtttcaccatgttggccaggctggtcttgaactcctgacctcaagtga
-tccacctgcctcggcctctcaaagtgctgggattacaggtgtgagccacgacacccagcc
-ttagatgtctcttaagagcatatctagcctggcattctaggagtctatgaAAAGGAGGGA
-GAAAGGTGTCTGTAGCCAAACCTGCCTGTCTGGCTTCTTCTAGGTTGCCTAGCAATGGAT
-GCCAACCCTCTCCCCCATCCTTGGGGGTTTCTTAGCAACCCAGTTTCTCACCCTCTGCTG
-TTTTCAGGGTTTCCTTTTAACTAAATGTCAAGTTTTGCTCTTTCTCCTCCAGAAAACCTG
-AGGCCAAGGGTCTCTGTGTAGAGCTGGATACAACCCAGAATACACAGAGACCTGGGTTTG
-AGGTCAGTGGAGGATTTGCTGTGTGACTTGGAGGTCTTTGACCTCTCTGGCTTTCATTTC
-AGACTGTGATTCCCTGTCATATGCTCCTCAGAGttcttcttcttttcttcttcttcttct
-ttcctcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttcttc
-ttcttcttctcttcttctttcttcttcttcttctttcttttcttcttcttcctcttcctc
-ttcttcttcttcttcttctcctcctcctcctcctcctcctcctcctccttctccttcctt
-ctttcttcttcttcttcttcttttgttttttgagacctagtctcactctgtcgcccaggc
-tggagtgcagtggggcgatcccggctcactgcaacctccgcctccctggtacaagcagtt
-ctcctgcctcagcctcccaagtagctgggattacaggtgcacgccaccatgcccagctaa
-ttttgtatttttagtagacacagggtttcactatgttagccaggctgatctcgaactccc
-aaactttgggattacaagcatgagccactgtgcccagccTGttcttttctattttttgag
-atggagtctcactctgtcacttaggctggagtacagtggcacaatctcagctcactgcaa
-catccacctcccaagttcaaacgatttttctgcctcagccaccaaagtaagctgggatta
-taggtgaacaccaccacaccgggctaattttttgtattatttggtagagacgggttttca
-ccgtgttacccaggctggtctcagactcctgacctcaagtgatccgccagcatcagcctc
-ccaaagtgctgggattacaggcatgagccactgtgcccagccctctgtattgttctgatt
-ttagtatatgtgtgctgaaatgagcacTTCCCTCTTCTCTTGTATGCGTTTGGTTTGACT
-ACCAAATTTattcacttttgcaataaaccgtcactgagcacctactatgttccaggcact
-gtcttaaggactggggattcgtcagtgaataaagcagacatagtcccttccctcacagag
-cttatactctagtagatggaaacgtataatgaataaacagataagtgcacataatgatat
-catgcagtgaAGGGGACAAAGTGTAAGGAAGGGCTACTATTTTAGATGAGGAGGTTGTAT
-CAGTCAAGATGGGCTAGGGaagtcagagatggttgggaagaaaaagcctggcttccccct
-ttctccctccaacttcctgtgggtgcctcaccttgggtgacctcagctagaggccagctg
-acaaaggaggctgagtagcttccaggggtcagctctgcaaagcaggaaagagcaaggaat
-ccactggaagcaagaaggcCCAAAAGTACCTTGGGAGGTACGCCGCTTTTTCAGCTCACT
-CACTGCCTGTAAACTGTCAGGGACCCTAGGATCATTAAAAAATATTTTGAGggccgggcg
-tggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggatcacttgag
-gtcgggagatcgagaccagcctgaccaacatggagaaaccccatctctactaaaaataca
-aaattagccaggcgtggtggtgtgtgcctgtaatcccagctactcgggaggctgaggcag
-gagaatcacttgaacccaggagacagaggttgcagtgagctgagatcacaccattgcact
-ccaccctgggcaacaggagcgaaactctgtctcTCTCTCTCTCTCTCTCTCTATCTATAT
-ATATATAGATAGAGAGAGAGAGAGAGAgtagtaaaatacagatagcataacatttaccat
-cttaaccatctttaggtgtacaactcactggatattaagtatagtcacattgttgtgcaa
-ccatcaccatcatccatcttgagaactcttcatcgtgcaaaactgaagttctggatccac
-tatgcactaactctccatttccccctccccctagctcttagcaaccaccattctgctttc
-tatatgtatgaatttgactatggtatatgtctcatataagcagaatcatacagtgtttac
-ttttcgtgactggtctatttcacttcacatcatgtcctcaaggtttatccattgcagcat
-gtatcagaatttccttctttttaaagctgagtaatattctattgcatgtgtatatcacat
-cttgcttatccattcatctgttgatagacacttgggttgcttccaccttttagctattga
-gaataatgttgctatgaaaatgggtttggaaatttctcttcaagatacactgctttcagt
-tcttttttttttctctctgagacagtctcactctattgcccaggctggagtgcagtggca
-caatctccgctcactgcaacctccacttcctgggtccaagcaattctcctgcctcagcct
-cccgagtagctgggattacaggctcacaccaccgcacctgatgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtctgtgtgtgtttagtagggatgaggctttgccatgtttgtca
-ggctgctctcaaattcctgatctcaggtgatccgcctgcctttgcctcccaaagtgctgg
-gattacaggagtgagccaccacccctggcttcagttctttggggtatataactagaagta
-aaattgccagatcatgtggtaattctatttttactttttcaaggaatcactatgtgtttt
-ccatagcatctgcaccatttttcattgttatcaacaattcacagggttccagtttccccc
-tatccttgccaaaacttgttattctgttttgttttatggtagtcatcctaatgggtatga
-agtgACTAGGATCATTTTGAGACCCAAACAGTCACAGGCTTTTTTGTTGTtgttgcccag
-gctggagtgcagtggtgcaatcatagttgaccgcagcctcaacctccttgggctcaggtg
-aacctcccacctcaggctcccaaggagctgggactacaggcacacaccaccacatccagc
-taatttttgtgtattttgtagagacagggttttgccatgttgaccaggctagtcttgaat
-tcctgggctcaagcaatccacctgcctccagcctcccaaagtgctaggattataggcACC
-CAGCTTCATAGGctttttagcccaggcttgtgatttctttgtcagtataattctctgaaa
-aacttaggtttctggcagggggcagtggctcacgcctgtaatcccagcactttgggaggc
-cgaggcggacggatcacctaaggttagaagttcgacaccagcctgaccaacagggtgaaa
-ccccatctctaccaaatacaaaaaattagccaggcatggtagcatatgcctgtaatccca
-gctacttgggaggcggaagcaggagaatcacttgaacccaggaggtggaggttgcagtga
-gccaagattgtgccattgcactctagcctgggcaacaagagtgaaactccatctcaaaaa
-aaatcttaggtttcttatcgatttgactgtagttaatggtactaaaaccatacccacaat
-acttttcaatataTTGTCCTCAAGTCTGCTTTTTCCCTTTGCTTTCTATCCTAAAGCTGT
-CACTCTCAATGTAATGGCAATTAGCAAGAATAACAGGTGGCAGAGTTGCACCTCTAAAGT
-GATCTTGGCTCTGAGAGTTTTTACAGGACATTTTTCACTCAAAGCCTTTTAAAAATCCAA
-TCTCATACTTTAGTTGATTCTAGCCTTGAAGTACTTTAATTGATAAAAAAGAAAGTTCAT
-AAGGTCATTGGGAAGATTAATTATCCCAGCATATAGTAAATGCTCTATAAATGATACCCA
-TCTTTGTCACttttttttttttttttgagacggagtctcactctgtcgccaggctggagt
-ggcacaatcttgtattactgcaacctccgcctcctgggttcaagcaattctcctgcctca
-gcctcccaagcgagtagctgggactacaggcagcatgctgccactcccggctaatttttt
-ttttttttttttttcagtagagctggggtttcaccatattttctttctttctttctttct
-tttctttctttctttctttctctttcttttcttttcttttctttttctttctttcttttc
-ttctcagagtctctctctgtcacccaggctggagtgcagtggcatgatcttggctcactg
-caacctctacttcaagtgattctcctgcctcagcctcaagagtagctgggactacaggca
-tgtaccaccatgtccagataatttttgtatttttagtagagacagagtttcaccacgttg
-gccaggctggtctcaaactcctgacctcaagtgatccacccacctcagcctcccaaagtg
-ctgggatcacaggtgtgagccaccatgcctggACAAATTTTCCTATTTCTTAATAGATAA
-TCCATCTTGTTTTTCTCAAAAGTAGACAGTTTATCAGGTGTCGTGTCTCTCACCTTCCCA
-CCCTACTCACCTATAAACTAATATAACAATAACAGTaacaataaccataatttgctgagt
-tctaattttgttccaggtactttggataagtgtcttatatgcacatctcatttcactctt
-tcaacccctctgagaggcaagtacttaaattatcttcattttacagtcagggaaactgag
-gcacagagtgtttaaatcatgtaagcagtaagtagtggagctaagattcaaacgcagatc
-tgctggactccagagttcAACTTACAGACACTACATTGTGGCTCTTCTTGGTGGCCCCCT
-CCCCTCCTCCCCAGGCTCTCAGAGGATACAGGATCCCTCCTTTGCTAGTCAAGGCCAGCC
-CATCCCCCTGTATATTTGACTTCATCTCTTCCCACTGCCCCAGGATTTCATCCACCCCTG
-CTCTGATATCAGGGGCCCCCTCCCCTTCTGTCCATGGTGTGGGGCTTTTTGCACTTcaca
-cacacacacacacaggtgcacatacatacacacCCCTTCTCCAAACCACTCCACAAAGGG
-CCCCTGCCTCCTCActttcttgccttccacatcacaccctaaattctcctggccaaggtt
-cccactgacctccttgttgccaaacctaagtcctgttgtcccgctgtgtgtctcttatgc
-acttggcaaggctgagcaggtccttcttggaaatgtgtttctttggtttctatgacacAA
-TGCACCCCCACTCCAAAACACACATACACACATCCCAGATTCTTGCCCCCACCCACCACC
-ACCCGCTATCTCTCTAGATGCTTCTGTGGTTCTTTCTCCTCCTCTGACCTCTTCAAATGT
-AGtatggtggttttaaaacatgtccataatttttttttttttttttgagatagagtctca
-ctttgttgcccgagctggatacagtggtgcgatcaggtgcgtgccaccatgctcagctaa
-ttttttttaacttttaagttttttggagagataggggctccctgtgttgaccaagctggt
-ctcgagctcctgggctcaagcgatcctcccatcttggcctcccaaagtgctaggattaca
-gacttcagccatcgtgcccaaccatgtctataaattctttaagactcctcccactgagta
-acagagtctgtttcttccccttgaatctgagccaaacttagtgactcagactacagtaga
-aatgattctatggtgacttgtgaggctgggtcataaaggcaatgtggcctgactcatggg
-agtcctgagctacagtgtaagaggtgtcaacactctcagctgccatgctgtgaggaagcc
-caactggctcatgcagagagacaacatggagaggccttgaggctatatgaagagagatgc
-ttggccagctcccagctgctccagctccccagtgctccggcttccactgtaaccacaaaa
-gagacaccaaggcagaaccacccagatgagcccttcccaaattcctgacccacagaaatt
-gtgaaagatgataaaaatcattggatttggagtggtctgttatgcagccatagacagcca
-aACAGAGGCAtcttaatctgcttgggctactataacaatttagcatggagcaggtggctt
-gacaacacacatttattcctcaggtctgcagggtgaagagtctaagatcaaggtgctggc
-aaattccattctgctggcaaccaagggcctgacttctggtgtacagacgaccatcctatt
-gtagccccaaatggcacagagaagaagcaagctctcaagtctcctcttatcaggctgtaa
-tccctcccaaaggcccacttccaaataacatcaccttaggacttcaacatatgaatatga
-gggagatacaaacattcagtctgcagcaGAGGGCTTCGTTAGAGCTCTGACCTGAGCACG
-CTTCATCTCAATGTCAttgtttttgccagctctacatccactgccctttttttttttttt
-tttttttttttttttttttgagacagagtctcactcttatcacccaggctacggtgcagt
-ggcacgatcttggctcactgcaacctccgcctcccagcttcaagtgattctcctgcctca
-gcctccggagtagctgggactacaggtgcatgccaccacacccggctgatttttgtattt
-ttagtagagacagggtttcaccatgttggtcaggctggtctcaaactcctgaccttgtga
-tccacctgcctcagcctcccaaagtgctgggattacaggcatgagccactgggcctggcc
-ccactgccctttcttacagtaacagtatttcaatttccctttagggaagctcttcaagca
-ggttctcagtccaagaggtttctctgggttaagcactgccagccacccaaagggtgagca
-agtaaccagccaatcagagacactccagtgggttcagtaaatgacatattatctaactgg
-ggtgaggggaatcaacatcagggcttttcctgagactataaggagaaacagattcttttc
-ccagcagttaaatttgaagtctgtggccattttgctaccatatagggaaaatctgcctga
-cattgaagccaacacagatgagggaagagccaagagataaagagaaagatcctgagcatc
-tggatacagccatgcctgaagccagtatcccttgacttctcaattatgtgagcctttata
-ttccctttgtttaaagccagttcaagttTAAAACTGCCATTTCCAGTGAGAACAATTCCC
-TATGTTGTATCTAAGGCCAAGACCTTGCCCCTGACTCTAGGCCAGAATGTCCTGTACAGT
-GCCATTCAACTCTGCCAAAAGCAAAGGGCATCAACTTCTCCACAACCTGGCTTTCCCTCA
-TCTATTTTACATCTCTGTTAATGGGAGCATCACCCACCTGACCTATAAACATAAAAGTCA
-GCCTCTATCctctctgtctctctccctctctctgtctctctctctctctctcAATCCCTG
-TCACTTCCCTTACTTCTTAGTAACCAAGTTCTGCCAACTTAACTTTATGGACATTTTTCA
-CACCTGCACCCTCCTTTCCATTTTTCCTGCCCACTCCAATTCTTCATCATTTCTCACCTA
-AATTTTTACAAAATCAATAGATAACTAACATAGAGGTGTATAGTAAAAAGTGAATTTCgg
-ccgggcacagtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcagatc
-atgaggtcaggagatagagaccatcctggccaacatggtgaaacctcatctgtactaaaa
-atacaaaaaaaaattagctgggcatggtggcatgtgcttgtagtcccagctactggggag
-gctgaggcaggagaatcgcttgaacccgggaggcggaggttgcagtgagctgagatcgca
-ccactgccctccagcctggtgacagagcgagactccatctcaaaaaaaaaaaaaaaaaGT
-GAATTTCATTCCCACCCTTGCCATCAGTTACCCTCCCCCAAGGCATCTACTGTTACCTCT
-TTCTTGTCTATTTTCCCAGAAGTTCTCTATATGTGCCATCTTTTTGAGAATTTcaaatgg
-aggcatactatcaagacttttcagaacactgcatccttcttcacttgaagtgtgattaat
-ataaataattatagactaatttcttctttctaatggatgcatagtattccacaaagacat
-ataatgtacataactcgtcttccattgatggatatttaagtggtgtcccagttatctgtt
-agcacagaacaaaaccccccaaacctagtggtataacacaataaccacttgaatatgctt
-gtgggttctgtgtgtcaggaattcaggcaggacacagtgaggccagcttgtttctactct
-gcaatgtttgagtcttcagctaggaagatttgaagatttgaaggctgaagctgattcaaa
-tggctggccactggaatcatcttgttcttccccttccccttcgccttctacagtgcaatg
-gcatgatgtcggctcactgcaacctctgcctcccgggttcaagcaattctcctgcctcat
-cctccctagtagctgggattacaggtgcacgccaccatgcccggctatttttgtattttt
-agtagagacggggttttgccatgtggccaggctggtctcgaactcctgaactcagggtat
-ccacccgccttggcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggcct
-catctggttcttcttcactcacttcttttatgcttgaactgggatgactcaaagctaagc
-ttagctgggactgtggtgccttcatgtgtcctctcctgatggtcttggcatcctgacagc
-atggcagcctctaagcagacatggagccctaggtaggcatggtgcctcaggctccaagag
-ctagagttctagcagaagttgcctgtacttttatgtctggaccttagaagtcagagtgtt
-acttccaccgtactccattggttgaagcagtcatcagctcacccaagattcagagagggt
-acaaggatcccacctctctacagaggagtgctaaagaatttgtagctatattttaaaacc
-accacaggttgtttccaatctgtagctattcctgtagttcattttacaggctaacatctc
-ttgaatgtcttcatttctctgcaccaggccaagacactgtcatctctgatctctttgctg
-atctcttgctgtcactcttgtgctcaacatgctgttctcttgacagcagccagaggtctt
-ttcagaatgaaaatcagatcacatcccacccctcttcataacccttccatggctccccac
-tacccttgggctgaagctcaaactccttaccttggcttatgaggccccacaaggtctcac
-ttctgcctgcctctccaatgccatctcctgtcacCATTTGGGGCCTTTAGTTTTGAGCTG
-CAAGAGTTCCTCCCATcacacacacacacatacacacacacacacacacttaaatgagta
-agtaaatagaacatacaaaacgcttaaacactttgcacatagtgagcataataagtttgc
-tactattATTAGACTGTCttcagtaaatatttactgggctgcctactcagtgccaagcac
-tatgggaggctcacagatacaacacgaacaagaAATATGTGGCCTTggccagacgcggtg
-gctcacgcttacaatcccagcactttgggaggccgaggcaggtggatcacttgagctcag
-gagttcaagaccagcctgggcatcatggcaaaaccctgtctctattaaaaatacaaaaaa
-ttagctaggcatggtagtgcgtgcctgtagtcccagctcctcaggcgactgaggtgggag
-gatcacctgagccttgggagatcgaggctgcagtgagccgtgatcatgccaccgcactcc
-agcctggacaacagagtgagacgctgtctcaaaaaaataaaaattaaaaaaaaagaaaaa
-GAAAAACTAAAAAGGAAGATGTGGCCCTATCTTGccgagctcattcttctgtgtgtcccc
-agcccctagcacaaggagaaacagaatagatgctcaaGACACAAAGGCATGTCTGTGCAA
-GGGTGCTTGAtgacggttggaggggcacaatgactttcccaagatcacacagcaaatgtg
-ggacaaaatcaagGCTGACAGCTCATGACAGGGTGGGAGGCAGATGCAGCTGCCTGGCAC
-AGGCTGGCTCTCCAGGGAGATGGGCAGTGGGCACGCATTGCCCAGGGCAGAACTGGGGCT
-AGGGGAGGAAACAACAAGGGAGGCTGTCATTAGCTCCTTCCAAAGTGGAGGTCACTTCTC
-TCCCAACCCCGAGTCCTCCACCCAAACTCCCTTCTCAAGGTACAAGGGCTGATCCCGTAC
-CAGGGATGGGTAGGGACTCAAAGAGGAAAAGAGGATGAAAAGAGGATGGGGACTGAGTGA
-GATGTGAGGACTCCAGAGGGATTAGCGGCTCTCAAGGCAAGTGGGAGGGGACTTCCCGGT
-AGGAGCCCGGAGACAGATGGGAGCCTGTGAAGAGGGCGGGGGCCCGGCGAGGAGAAGCGG
-TTTCTACGCTGGGGTGGGGCTCCATGAGGGGGATGGAGACCTGGAAAAGGGACTGACGGT
-GCAGCGAGGAGAGGAAGGCTCGGTTAAGGGATGGGTCTTCCACGGGAGGGGTGGGGAACT
-GCGGGAGTGACGGCAGCTTCGGTGAGGAGTCTGAGGGGCTGCGTGAGGGGCTGGGGCCCA
-GGGAGTCCGAGGGGTCTCTGTGAGGGCGCTGGGGTGTCCGAGCGAGCAGGGAACTCTGGA
-AGGGGACAGGAGCCGGGGGAGCTGCAGGCGGCCGCCGTCTGCAGAGCCAGGCCCTGAggc
-gggccggcgccccctcccccgccccgAACTGCGGCGCAGGCGCGAACCGGACCCGCCTTT
-GCTCGGCGGAGACAGCAGGCAGAGAGGTGAGCTTAGCCCTGCCCCACGCGCGGCCAGGCC
-CCAGCCCCAGCCCCTGGAGAACCCCCGCGCTCTGCCCGCATCCTCAGCCCGGGCCGTGTC
-CCGCCAGGGCCGGGACCTTTGCGCCTGAGCCTCGGCTTTGGGAGGTGGGGGTCCCAGGGA
-AGCAGCAGGGGCGGGAGACAGAAACAGCCCCATCGCCCCTCGACGCCTCAGGGTTGATAG
-GCTGGGTAGAGGCTTCAAAGGACACCCCCACCCCCGCCAACACTTCAAAAACCCATTCCT
-ACCCCTCTCTGCCTCAGTTTCTCTCTAGGGAAAAGGACGCAGTTGGTGTGGAGCAGGGCA
-TCGGTGGTCCTGTCAGGAAGAGTGGCGCGGGTGCCGGTGGGGAAGGGAGGCGGGAAATGG
-CCTGATTTCCCCGGCCGACACCCCCTACCCATCCCCCCCGGGAGGGCGCCCCTTCTCCCC
-CGCCCGGGCAGCGCTGGACGCTGTAGTGGGCGAGTCTGAGGGTCTGGGAAGGACACAACT
-GAATGAGGCTGTGCAGAGGCGACAGATTCCGTCCATCTTCGGGCCCTGGCTTCCGTCACT
-TCCGCCCGTGCCTGCCGCCCCTCGCCTCCTCCCTCCGCCGCAGTCTCCCCACGTCGGACA
-GCGCAGCCCCCTCCGCCTCCCGCTCCCCTCCCACCGAGCTCCTCCCGGCTCCCGGGCTGG
-GGACGCCTCCCTAGCGGTTCCCATGGCAACCCTCGTCCCGGGTGCCTgcgccccgccccc
-cgcccgccAGACCTACTCCGTGCAGCCCTGAAACGCCAGGCGGAGGGGCCAGGCCGAGCG
-GGAGGCAGCGTCAAGGTCACCTTCCCTCTCCAGTAGCAGCAGGACTGAGTGATTCCATCT
-ATTTGGAGTCGCGGAAGCGGTGAATTGGAGGGGAGGAGCTGACCCAGGTCAACAGCCCCG
-AAGCCCCCTCCACACCTCCTCACCTGTGGCCTTGAACAGTGGTCTCCGCACGGAGGCTCC
-TACCGTCCCCCAGGCCCCATTTCTTCTCCCCACCCGGGCCTCCCCAGCGCCTCGCCGGGG
-CGGGTACCGCGCTGGCCGCACCCTCCGCACAGCCCGCCCCGCCCGCCTCCTCCGGCGAGC
-CCTCCTCTCCAGACCTCTCGCCCTCCTCCTCCGACGGTCCTTCGCTTTCAGTCTCTGCCT
-TTTCCCGTTCTCTGTCGTGGCTTTTGTTGTTGTTGTTTTTCCTCCTTTCCTTCCCCGCTC
-TTCTTTTCCCTGAATTGTAAGTGAGGAGGGTGTACAGCCACTATTTATGGACAGGCTTTC
-TTGACAGCAATCTTGTGTGCCGTGTGACTCCAAGCAGAACCTCCAACCgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtCGTACCTATCTGGGTATGTCTCTGTATG
-CTTTGTGAGTATGTCTGTGTGTTTCTCTGTGCTGTTTCGGTGAGTTTCTCTATGCAGGGA
-TTTGAGGACCACATCTGATTGGAAGTGAGGGGCAGCTGTCAGGACCTTTATCTTACCCTT
-TGGAACAAGCACATTGTTTCATTTTGCAGGAGGCTGCTAATTAAGGCTGAGGGCCATCAT
-GGAGACTGGGGTAGAAGCCCAGTCCTCCCCCAACACCTCCTGGCTTTGGTTCGGGCCAAA
-CCTGTATATGGATATACAAGTACCTTCCATTCCCAAGATCCGTGTCCACTTTTGTGGAAA
-AAAAAAAAAAGGTTATTTGATAGGTTTCTCTGGAAATCTAACAGCCCTTAAGCCTAAGAG
-TCTTTAATCCTGAGGGACCCTGACTTTCACTTCCAATGGAGTCAAAATTCATTGGAATCT
-GGAGGCTTTCAGGGGCAGTCCTGGGGAGGACCTTTTTATAGCCTTGCAGCTTGGGAACTC
-CAGCCCAAGTGTCAGCCATGACAATTACCCCCAGGAGGGGGTCTGAAGGGGAGCGGAGGG
-TGAGGCTCTCTCATTCCAGATATGGAGACTAAAAAGTTCAAGATGGAAGTAATAGCAAAA
-AAATTACAGTACTAATCACAACAGCTACCATTTCTCAGCATTAGAcacagtaactgtatg
-aaagaagtatgattattaggtctgttttacagatgaggaaactgagacccagaaaggtgg
-aagcacttgtctaaggtcacgcctccaggaagcagtgtgtccacgactccagtccaagtg
-gtcaggctccagagcccacagtcccaggtactGGGTGGCCTCCAGAGTAAACATGCAcat
-ttattgacacctccaattgccaggcactgggctaaggccttcagtgcattggctcattCG
-CAGTGTGCTTTGGGAAGGACAGGCTGGGATTCCAAAAGGCCAGACTGTGCTATGCGTGTA
-GGGTGTCTCGAGTGGGAGGAGAAGCGGGTGGGGCACAAAGATTTAGGGGGCTTATGAAGG
-TCACCATGAGCAGCTCCCACTAATCCCTCCCTCCGTCAGCTGCACCTTACCTGCTCCCCA
-GGGGTCCATGATGCCGAGCTGCAATCGTTCCTGCAGCTGCAGCCGCGGCCCCAGCGTGGA
-GGATGGCAAGTGGTATGGGGTCCGCTCCTACCTGCACCTCTTCTATGAGGACTGTGCAGG
-CACTGCTCTCAGCGACGACCCTGAGGGACCTCCGGTCCTGTGCCCCCGCCGGCCCTGGCC
-CTCACTGTGTTGGAAGGTAAGGCCAGATGAGCACCTCCCATGATTCCTCTGCCTTGATGG
-AGGAAATGAGTCTGAATTTGAGGCTCAGAGGAAAAAAGAAGAGATAGCgtagtagttagg
-agtcttgcacagtcaagcaacagaaaacccaattcaaatgggtttaaataatgaagggag
-ccttcattgTATTTGTATTTACAtacaaattatttacataattatttacatatttattGT
-ATGTAAATAATggtggctcatgcctgtaatcccagcactttgggaggctgaggtgggcag
-atcacctgaggtctggagttcaacacctgctctgtcagcatggcgaaaccctttctctac
-taaaaatacaaaaatggaccgggtgcggtagttcacgcctgtaatcccagcactttggta
-ggcggaggctgaggctggtggatctcgaggtcaggagttggagaccagcctggccaacat
-agtgaaaccctgtctgtactaaaaatacaaaaattagctgggtgtggtggcgggcgcctg
-taatcccggctactcgggaggctgaggcaggagaatcacttgaaaccaaaaggtggaggt
-tgcagtgagctgagatcaatccattgcactccagcctgggtgaaagagcgaaactccctc
-taaaaaaaaaaaaaaaaaaaaatgagccgggcgtggtggcaggcgcctgtaatcccagtt
-acttaggaggctgaggcaggagaattgcttgaacccaggaggcagaggttgcagtgagcc
-aagtttgcaccattgcactccagctgggcgacagaacaagactctgtctcaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaagaaaaaaGAAGGGAAAATGTTGCTCATTTTTTAGAAGAGA
-CCCAAGGTCCAAGGTTGCATACTTTCAGGCAAAGTTTGATCCAGCAGTTCAACCCTTTAT
-ACCAAGGACTTTGCAAGTTTTCTTAGTCTTCAGCCTCCTCATGGTGCCCCTACCCTGGTA
-GCCTGTTAGCTTCAGACTCTCCCCACATGTTCCCCAAATGGCCACTACTGTGTGGACTCT
-CAGGTCTTCACTCCACACCATCTAAGGGAAGTCAGCATTTCCTGTGGTATTTCCTTCAGA
-AAAGAAAATAgcctgtaatcccatcattttgggaggccaaggtgggtggatcacctgagg
-tcaggagttcgagaccagcttagccaacgtggtgaaacctcatctctactagaaatacaa
-aaattagctgggtgtggtgatgggcgcctataatcccagctactctggaggctgaggcag
-gataatcactagaacccgggagacagcagttgcagtgagcagagatcgtgccgttgcact
-ccagcctgcacaacaagagtgaaactctgtcttaaaaaaacaaacaaacaaaaaaTGGCC
-ACAGGTACtggcttacacctgtaatcccagcactttgagaggctgaagcaggaggattgc
-ttgagcccaggaattcaagatcagcctgggcaacatagtgagacttcatctctactaaaa
-ataaaaaattagctggatgtagtggcgcgggcctgtgatgcctactactcaagaggctga
-gccaggaggatcgtttgagcccaggaggttgaagctgcagtgagccatgattgtgccact
-gcactccagcctgggcaacagagtgagactctgtcaagaaaagaaaagagagaagaaagg
-aagaGAGAAAGCAAAATAGTAAgatattaaaaacatgttaccatttaccttagcaccaaa
-gaagagagaaatacttaggtgtaaatctaacaaaatatctgtaatatgagaagaactaca
-aaactcaaaagatatcaaataactaaataaatggagaaatagttcatattcgtggattgg
-aatagtcaagatgttagttcttcccaacctgatctttgattcaatgcaatgccaatcaaa
-accccagcacgttattttgtggacgtcaaAATGTCACCTCCTCAGGGAGGAGATCCCTGG
-ACTGAGTCGGGTCCCTTGCTTTACTCTGGGCAAACTCTGTGCCCATTCATTCTTCAATAC
-ACTTACCACTTTGCACACTTGTAGTTTATATGGAGAGGTAAAAGATTCAGAAATTTAAAA
-ATCATTTATAagaaacaatgcttttaattcccagaagtcctgacaagcattgtgttggct
-ctcattgggtcacttgccagccttgaactaattactatggttaagagatggactatgctg
-actggcAGGAAGTGAGGTTCATCTCACTTAAATCTTACTGTGGTTTCTCAATGGTAGACT
-GGAGTACCTTGCCAGGGCAGAGAAAAAATGTGAAGAATTGATGTCTTTAACAGCCAAGGA
-GACTAGTCGGCCAGGGTGCACCAATGGGTCAAGGTGTAGAGGTGGCAATGAGCTGAGTGC
-CTGCTATGGGCATAGCTCTTTGCTAAATATTCTCGGGAGACTGAGGCAGAGGGTCCCTTC
-TTTTGCTTTCAAAGGACTTCACTCTAGTGAGGAGGTAAGGTGCCAACCTCTGCAGAGAGG
-CCAACTTACATAACTTCAGGTCAGGTCTGTAGGGAACACCAGGAGAGGAAATGATCAAGG
-AAGACTTCCAAGGAAAGGTTAGTGTGTATTTaaaatttttaagcatcttcttattgcgag
-gcactgtgctaggctcttgggaacacagaatttaagacatgaggtccctgtcttcgagga
-actcTTTTAGCTGTGGTTTatttaatcattcagcaaacatttattcagcctttgctctgt
-gccggcacgtgctaggcacagaagactcctagtgagccaaaacaggcacagtctgctctc
-atggagctctcagtactgcgggagaggcagacgtcacttacatagcaaccaaaatacatg
-tccaagtgtgcacaatggtaagtgtattgaagaatgaatgggcacagtttgcccagagta
-aagcaagagacctgactcagtccaggggtcttctccctgaggaggtgaggtttgagatga
-gatctgatggtgcataggagttaacccaacagagacaggaaggtagaaaggATAAAGAGA
-TGAGTTGGGATGGAGGGAAACACAGGGTTGGCCGGAGAAACCCACTGCTAGGTGGGAGCT
-GGGAAGGAAATTAAGAGGCCTCAGGATTCCAAATAAAACATGACAGTTTATGCCTCCTGT
-CAGTTAGACCCCAGCAAGTGTGTTCTGTGATTCCCATCTCCTGAGGATGGATCAAGGGGT
-TACCCTTAAGTCTGGTGAGGATCCAAGGTGATCCCTTGGCCAGGGGCCCCTGGCTGACCC
-TGACTGCTTCCTGGTCTGTCTGCTTCTCCCTAGATCAGCCTGTCCTCGGGGACCCTGCTT
-CTGCTGCTGGGTGTGGCGGCTCTGACCACTGGCTATGCAGTGCCCCCCAAGCTGGAGGGC
-ATCGGTGAGGGTGAGTTCCTGGTGTTGGATCAGCGGGCAGCCGACTACAACCAGGCCCTG
-GGCACCTGTCGCCTGGCAGGCACAGCGCTCTGTGTGGCAGCTGGAGTTCTGCTCGCCATC
-TGCCTCTTCTGGGCCATGATAGGCTGGCTGAGCCAGGACACCAAGGCAGAGCCCTTGGAC
-CCCGAAGCCGACAGCCACGTGGAGGTCTTCGGGGATGAGCCAGAGCAGCAGTTGTCACCC
-ATTTTCCGCAATGCCAGTGGCCAGTCATGGTTCTCGCCACCCGCCAGCCCCTTTGGGCAA
-TCTTCTGTGCAGACTATCCAGCCCAAGAGGGACTCCTGAGCTGCCCACATGGCCTAAGAT
-GTGGGTCCTGGATCCTTCCCCCCTTCTCACCATAACCCCCTCTCAGTGTTTCCCCAACTT
-CTCCCTTTTAGCAGGGTCCCTTTAGAGCCCAACTCCAGGTCAAATCTGGAGCTCAAATCC
-CAGTGCTCCCTCCCCAGGAGTGGGGCCCCAACTCTTCCAAGATACCAGCATTCCTCAAGT
-CCTCCCAAAACTTCCTACCCACACCCTCTTCCCAAGGCCCTCAGGGGCAGAAAACATCTC
-CTTCAACCCGTCCCCACTCCTTCCTctgcatgaccttgggcaaacccttgccctttcaag
-ccatcagctcctgcctctctgccatgagggctttggatcagatTCCTCTTCTCGCCAGGA
-TGAGGACACGCACTGCCCTCCATAGACACAGATGAAGGGGTGGGGGTCATTCAGCTCGAA
-TGGGTCCCAGATGCTCACTTGGCCTTTCCCTGCAGGATGAGTGAAGACGTTTGCCTCTCA
-CAGTGTGTCTtctacctgcattttggcatcagagccccccagcccacccaccacaggcaa
-ttactagccctagttgataggtgaggtgggtgaagaaggctggaggtgacatgtccgagg
-tcacacaacaaagcagcatgcaggaactagaaacacatcttcagcctccTCCTGGGCCAG
-CTCTTGTGCTACAGGTGGGGCGGAGCCAGCCCCTCACCTTCCTGGTTCCCTGAGGGTCCT
-CAGGGTGGAGGACAGGTTTGGCCCAGAAAGACTAGCCAGAGGCCTGATGGTCCCAGGTGG
-CTCTGGATATACTTTGGATATGGATTTAAATGGTCTCTAAGAGCCGGGGGTAGGGGGCAG
-GAAAAGTGGGTTGTCTTTGCCCCTCAAAGTCCACCTACCTAGAAACCAAGCCCACGGTCT
-TGGCCGTGACCCTGATAATAAATGGGCTCTCTCAGAGGCGCCAGCCCCTCCCTCCCCAGC
-CGGAGGCGTCATCTCTCTTCTGTACCACTAGAGGGAGCTCTGATGCAGCTGGAGAGCAGC
-GCTCAAGGCTCTCGCCCCTCCCCTCCCTAACCCTTACCTTCAGTCTCCACCAGCCTGAAG
-GGCCTCCTAGGGGATCCTCAGGCGGCCCCCACCAGGGCACACCCTACTGTCCTTGTGCCT
-CACGCCCCCTCCTCATCCTGCACCCCTTCCATCCCACCTTCCCTTTCAATAAACAGCTGG
-GATGGATACTGACTTTGTTTCCTTTCTCCCTGGCCACTGGGGCGTGGGGAGGAGAAAGAC
-ACAGACTCAGgagcacctactgtgtgctgggcacgacccattatttctcattcgctcctc
-aggataacctgttgagaaaggaattattgtcttcttttttttttttttaagatgttgtct
-cgctctgtcgcccaggctggaatgcagtggggcgatcttggctcactgcaacctctgcct
-cctgggttcaaccaattctcctgcctcagcctcccaagtagctgatattacaggtgcacg
-ccaccacgcctggctaatttttgtatttatagtggagacggggttttaccatgttggcca
-ggctggtcttgaactcctgacctcaaatgatccgcctgcctcggcctcccaaagtgctgg
-gattaccgggtgagccaccttacccagacttattgtcttcattttacagatgcggtaact
-gatgatcagagaggtgagtgatttATTTTTTAtttttatttttaattcttttttattttt
-ttcgagacggagtctggctctgtcacccaggctggagtgcagtggcacgagctcagctca
-ctgcaagctccgcctcccgggttcatgccagtctcctgcctcagcctcccaagtagctgg
-gactatgagtagctgggactacaggtgcctgccaacacacccagctaattttttgtattt
-ttagtagagacagagtttcaccatgttagccagcatggtctcaaatctcctgacctcgtg
-atccgcccgcctcggcctcccaaagtgctgggattacaggcgtgagccaccgcgcccggc
-cTATTTTTAATtctttttatttcagtagcctttggggtcaaagtgggttttggttacatg
-aattagttctatagtgattctgagattttagtacacctatcacctgagcagtgtatactg
-tacccaatacgcagttttttatccctcatcccctcccaacctccctggactcagtcccca
-aagttcgttatatcactctgtatgcctatgcatcctcatagcttagcttccgcttatata
-agtgagaacctaccgtatctggatttccgttcctgagttacttcacttaggataatggcc
-tccagctccacccaagtcctgcaGTGGATTTAAATGCTCAGCCTAGGGCCTGGAGGGGTG
-GCTGggccaggcgaggtggctcacgcctgtaatcccaggactttgggaggccgaggtggg
-tggatcacctgaggtcaggagttcaagaccagcctggccaacatggtaaaaccccataac
-tactaaaaatacaaaaattagctgagcatggtggtgcatgcctgtaatcccagctactcg
-ggagactgaggcaggagaattgcttgaacccgggtggtggaggttgcagtgaaccaagtt
-cacaccattgcactccagcctgggcaacagagcaagcctctgtctcaaaaaaaaaaaaaa
-aaaGTGCTTAGCCTGATTGGCCTATTGCCTGAGTGTGGAGCTCCTGTCTTTGGGTGGGAA
-GGAGATTTCTCAGCCACCTTGAGAACACACTTCCTCTAGTTCTGAAAGGAATGTGAGGGC
-CAGGGTGTGGGAGAGGGGGCTGAAGCCAAAGGTAAGATCTTTTCCAGGCCTGGaagagta
-attaaccccttttggcactcaccaggggctgggccttgttcttagtgccttacagaattc
-gggaattcatttaaccaggacgacaacctctgaggtggcggctattattctcaaacctag
-tttttcctaaactccaggcttgcgttcccatctgcattcacctggatgttgaatttaaac
-tcaactatctcaaactgttctccttgttaccacccctccctgaccaaacctgcctctact
-atgctgcccacgtcttagagagtagcgtccccattcttctggctgctccagccaaaacct
-cctctctttcctcacaccctgtatccaatccatcagcaagtcctgtcaactcaaccttgg
-aaatatatcctgtacccaactacacctcgacatccccgtggctgattccatggtctgaac
-caccagcgaccagcgcctcgatctggatcattgcaccagcttcccccggtctcctggctt
-ctgagttttgaaccccaccctactccacgccttgactccccaagtctaattactacacag
-tagccagacagatcttgttagaacataaactaggtcatgttcctcctccgctccaaacct
-tcccatggctcccacctaactcagagtagccaaaaccctccctgtggcctccaaggccct
-acacaatttgctgatttccactccccccgcactttcctctgtaaccccaactcccaccac
-tctccaggttcctgtgtcctctccagccaggatcctgactcagggcctttgcctcactgt
-tccctctgctggggtactcctccccagttgacgacatgggcagttccttcaagtcgttgc
-tcaaacatcaccttctcagcaaggccttccctgagcagcctattagaattgcaACCAggc
-caggcgcagtggctcaagccagtaatcccagcactttgggaggccgaagcaggtggatct
-cctaaggttgggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaa
-aatacaaaatcacccaggcatggtggcacatgcctgtaatcccagctactcgggaggctg
-aggcaggagaatcacttgaacctgggaggcggagattgtggtgagctgagatcgcaccat
-tgcactccagcctgggcaacaagagcgaaaccccatctcaaaaacaggaaaaacaaaaaa
-caaaaaaaTGCAACCATGCCggccaggtggagtggctcacacctgtaatcccagcacttt
-gggaggccaacgtgggcagatcacctgaggtcaggagttggagaccagcctgggcaacat
-ggtgaaaccctatctctactgaaaatacaaaaattacccaggcatggtggcacgtgtctg
-taatcccagctacttgagaggctgaggcatgacaatcacttgaactcgggaggtggaggt
-tgcagtgagccaagatcgcgccattgcattccagcttgggcgacagagcgaaactccatc
-tcaaaaaaataaaaggaaGCTAACACAGAGTATAAATGGTGCAggcagtttgacaatatc
-aaaatagaaaatacacatgccctttgatttctccctcttatgcaggtggatctatagatt
-caactctacatgttggaacactatagtattatttgtaattaaagcatttggaaacaacct
-aaatgctcatggtaggggactattaataaaatacggtaAggctgagtgcagtggctcacg
-cctgtcatcccagtactttgggaggccaacgcaggaggatcacttgaggccaggagttca
-agaccaacctgggcaacatagggcaacatagcaaggccccatctctacaaaaaattaaaa
-attagctgggcatggtggcacacgcctgtagtctcagctattaatatttgggaggctgag
-gcaggaggatcacaccactgcactttagcctgaatactgagtaacaaagcaaaaccctgt
-ctctcttaaaaaaaaaaTTGGGGGGAAGGACAAGTCTTttttcttttcttttcttttctt
-ttctttttttttttttttttgagatggaatttcactcttgttgcccaggctggagtgcaa
-tggtgtgatctcggctcacggcaacctccgcctcctgggttcaagcaattctgcttcagc
-ctcccgagtggctgggattatagtcatgcgccaccacacctggctaattttgtattttag
-gtagagacggggtttctccatgttggtcaggctggtcttgaactcccaactcctggcctc
-ggcctcccaaagtgctgggattagaggtgtgagccaccgtgcccagccAGGacaagtctt
-cttacagaagaattccaattagtaaatgtagaaggattgagagaaattgaaaaatcatca
-ttagaacaccggaataataattgctgcaggcaacatctaccaatgaacaataaaatgagt
-gggtgaaactttaaggagaaacaaggttttttttttagaaacgggatcttactacattgt
-ccaggctggtctggaactcctaggctcaatgggatcctcccacctcatgctccccagtag
-ctgctactacaggcacataccaccccaccaggcttgaaacaaaatatttgcatagcctca
-aagtatctatccccaaatatgtattaattagtatggtggttttaacatatgcatacatgt
-tctttgatgctctgccatctaggaaatggagcttaatttttctcctcttgagtgtgggct
-ggactcagcaacttgcttctaacaagtagaatgtggaaaggcaaaaacagtgacttcaca
-gtggaaaaatctggcagacaccaccttaaccaaatgaaggctggcaccaccagtcaaaag
-tcttgttgatatcacagcctctgaaatgatgtggtgagaagggcacttggcctgagtggc
-attcttcccccaaatccgtaacgtcagcctaatcatgagaagacccattctacaaaagat
-ctgaccagcactcttcaaatgtgtccaggtcacgaaagacaaggaaaggacaagaaacgg
-tctcaggttggaggagactaaggagacgtggctgaaggatacacaggatctccctgtact
-gtccatgtaactcttcaataaatctacaattatttcaaaatagcaaaaaatacgattGCT
-ggccgggcacagtggctcacgcttgtaatcccagcactttgggaggccaagaagggcaga
-ttacttgaggtcaggagtttgagatcagcctggccaacatggtgaaaccctgtctctact
-aaaaatgcaaaaattagctgggcgtggtggcatgtgtctgtaattccagctgctcgagta
-gctgaggcaggagaatggcgtgaacccgggaggcggagcttgcagtgagccgagattgcg
-ccactgcactcccgcctgggccacagagcgagactccgtctcaaaaaaaaaaaaaaaaaa
-aTTACTGTGGTCAAGATGGAATAACAGGGATCTGGTTTAACACACCCCAAAAAGGACCTA
-AGAAAGGACCATTCCCTCTCCTCTCTGAGGTGGGAAGATCTGGGAAGGAGAGGAGGCTGA
-CCAGTGGGGTCTACCTTCTGCTCCACCCCTCTTCTATCCAAGAGTCTGAGCACCCAACCC
-CCACACCACCCTGGAGGCTCCCGCCCTCGTGCTGAGTCTGGCATGCCCTCCCCATCCCTA
-CTGGCCCAGGGGACTAGGTTAGCTCAGAGAAGCCCTTCTAACTCACCCACAACTGGACCA
-AAGAAGGATTGATCTGGGGCCACTGCCTGGTCCCTGGGAGCACTGTGCTAGGGCAGGGGG
-CTGAGATGCCCCAGGGTAAGAGACAGAACAGTGAtttttttttttctaagacagagtttc
-gctcttattgcccaggctggagtgcaatgcgcgatcttggctcaccgcaatctccgcctc
-ccaggttcgagcgattctcctgcctcagcctcccgagtagctgggattacaggcatgtgt
-caccacgccccccggctaattttgtacttttagtagacacagggcttctccatgttggtc
-aggctagtctcaaactcctgacctcaggtgatcctcccaccttggcctcccaaagtgctg
-ggattacaggcatgtgccaccgcacccggccAAAAACAGTGATATTCATATAGATGGGGG
-AGGGATTAATGGGGGTGGAGTGAGAGAGAGCCTGCTGGAGCAGTCCGAAAGGCAGGCATT
-CCTTCTGTTCAGCAACATTCCTGCCCCCACAATCTCCTCCCACAACTTATATCTAGTgca
-ggctgagagtgaatctgtctgccagtgttcaagccactgtgtgaacctgagtttcttaac
-cgttctgagtgtcaggagtttttttcatctccaaaataggagcaacaaggataccaatcc
-cttgagattgtatgaagcttaatgcacttaacacagcacctggcacgtagacatgctccc
-taaatgccagctgttattatGAAAGAGAGAAGTCTGAGGTTCAGAACTAGCAGGCAACAC
-ATAATCtataatgatggatggctcagacagggtcctgtcctatagggactcacagtctag
-tggaaaggacagtcctgtggacagcaaatggcaaTATACCTGGGTAAGTACTGTAATAGA
-ATAACAAAGTAATATCCTATCACGGGGCAGTCACGGGGGCAGTGAGAGACAagcgcttgt
-ccatgccaggctctgtactcagtccatcacatacattaggtcttgcagtcctcataccac
-cataaggtggttaccattatctccaattcacagaaaagcaaacagtatggagtgtttaag
-cgtcctgtccgagatggcatagctagtggagctgaaatttgaacccaagtaatccaggtc
-cagaatGCCCCGGATGCAGAAATGACCACACAGATTCTACCAATGAACTAACCTGATAAG
-GTTGGAGGTCATACTCATAACCCCTCACACAGGTCCACACAGACACAGGCAAGCACACCC
-ATGTCTATTCAGATACACACCAATTCCTGTCTATGACGAGCGCTCAGAAAATCCTCCACA
-ACACCACACCAGGAATGATGTGCATTTTGAGAAAAAAAAAAATCAGCTCTGAAGACCTCA
-CAGACACATGCAGTGAAATGTAAATGGAGGGACCCACCCAAGTTCTTGAATAGCACATTA
-CATGCCTGGATGCACATCAGCGGGCATGTAAATGATGACGAGGAGGTCTGCAGACACTGA
-CACGCTGCATTTGCACTCACTCTGCTACTGAATTTTTTAGCagctacatttactgagcac
-ctactgtatgtaaggAAAGATAAAGCagccgggagctgtggctcacgcctgtaatctcag
-cgctttgggaggccaaggcaggtggatcacctgagctcaggagaccagcctggccaacat
-ggtaaaaccttgtctctactaaaaataatacaaaaattagctgagtgtggtggcatgcac
-ctgtaatcccagctactcaggaggctgaggcaggagaatcgcttgaacccaggaggtgga
-ggttgcagtgagccaagatcacgccattgcactccagcctgggtgacagaatgaaactct
-gtctcaaagaaaaaaaaaaaaaaaagtaaaaaagataaagctcagagaagtgaagtggct
-tgcccaaagtcaaatggctgagattcaaaccctggccctataatattaggcaacggtgtc
-tccctccaccactgtgcAGATGCATCCATGAGTGAAGAGATGTGCTATGGCTGGATTCCC
-TCATTGACATTCCCTGTGACCTTGGACATGGCATGGCCTTGTCTGGCCCACATTCTCATG
-TTGAGTCCATTCACAGGTGTGCTCCATGGATGTGCATGGATGGGACCGGCAACCCTGGCC
-TTGCTCTGAGTCTCAGCTTGGCTTGGTGTCACCAGGGCTGTGAGCTTCCAATCCCAGCCT
-TGCCATGTCCCAGAGCACATGGCTCAAAACCAAGCTCTGGGCATCAGGCCAGCAGGGCCC
-CTGTGATGGAAGAACTGACAGGATTTCATAAGCATCCGGCCCGGGACACGTGGTCAGGGC
-AGGGAGAAGGGAGATAAACAGGATGTCCACCAGGGTGTGCACCTGGGCAGGGTCCATGGA
-CCAGGTGTGGCAGGGGAAGAGCTGTCAGGACTTGGCATCTGATGGGCACTCAGCAGATAT
-AGGCTGTGTGAGGGGAGGAGTTTGTGGGGAGGCAGGGCTGCAGCTTTGCTTCCATCCTGG
-AGGCCAGGAATGAGGGAGTAAGTGAGCCATTGACTCaatgaatgaatgaatgagcgagtg
-agtgaaggaaggaaggggtaagtaaataagtgaagaatgGAATGGGGGAGGGAGTGAatt
-tatttatttatttatttatttattttgagacagggtcttgctctgttgcccaggctggag
-tgcagtctcagctcactgcaacctctacctctcaggctcaagggattctcccacctcagc
-ccccagcatagctgggactacaggcgcatgccgccacatcccgctaatttttgtattttc
-tgtagagatggggtttcgctatgtcggccaggctggtctcaaactcctgggctcaagcga
-tctgcctgcctcagcctctgcagtgctgagattacaggtgtgagccaccgtgcTGAGCTG
-TGAatttattttttacacaaatctgagtgctcactctgtgctggccctggacgggtctct
-gtggatgtctggtgagcaggatggacacagcccggtcattgcaacgctaaaagCTTGAAT
-GACACCAGTCAGGCTGGGGAACTGGGAGGGCCCTTGACATGCAGAGTGACTCAGCCAGTG
-TGAGCAGGGGTTGTCAGCATGCCTAGGGGAGCAAGAGACTGTGAGAGAtgtgtgtgtata
-cttgtgtgcctgtgtgtgtccgtgtgtacacatgtgtgcgCCGACACAGCCAGGTGTTGG
-CCAATGCAGGTGTGGTGTCCTCAAGAGCACAGTGCATCCTGATTCTTCACCCTCCCAGGC
-CTCCCCTGCCCCTGTTGTGTGCCAGCTGGGCCTGCCCCATGTTATGCCTGACGCCCACGC
-AAAAGCTGCTTCTTCCAGTCACAGGACAAAGGCATCCTCAGCCCAGACCCTGTACCCCAG
-GGGTAAAGACCTCTCAGACCCCTAGTGCTCCTCAGCATGGACCTCTCCACCAGGAGCCTC
-AGAGTTGTGAGAAGCACAGGCACCCAAAGCCCACCGCCCTGTGTCCATGTGCATGGAGTG
-TGCCCAGGTACACGCAAGGGCTGGAGATGCCCCAGGGCGGTCCAGACAGACGTGCAGATG
-ACACATTGGCCACTGAGTTTCCACAGACACTGAGCTAAGTGCTTTCGAGACACActgggt
-gaccttaggcgtatcaccctctctgagcctcagtttctaatctaaaagtagggtaattat
-actcacttccagtcttgttagaataactcaatgCATGATCAGCTCAACACATCATGATTA
-TTTTTCCTGAGTTCCTGCCTTCCCAGCTATATTGTCTATTCCTCAACAGTACCCACTGAG
-TCTTATATCCCCGTTTCTCCTATGATACTCCATTACACAGGACTCAAATAACTACCTGCT
-CTAAGAATTGCTGAGTGACATGTAGTCCTCATAAATAGCAATAATAGTCACTAACATTTA
-TATAACaacaagagccagcaattttgattttttattgtgtcaggcattgtgctgaacact
-ttacattccttcattcatttgacaaacattcactgaacacctggtaggtgctgggctctg
-tgctagacctgcagatgcagcatctctgccctcaaggttcttacattctgatggggaaga
-agagacagacaaaagacagtttggcggggcacagtggctcacgcctgtaatcccagcact
-ttggtaagccgaggcaggcagatcacttgaggtcaggagtttgagaccagcctggtcaac
-atggtgaaacccctgtctctactgaaaaaatacaaaaattagccaagtgtggaggtaggc
-atctgtaatcccagctactcgggaggctgaggcacaagaatgacttgaacctagaaggtg
-gaggttgtagtgagcagagatcgagccactgcactccagcctgggcgacagagcgagatt
-cagcctcaaaaaaaaaaaaaagataatttaatacataaatgggataatttcaaaccttga
-caagtgctacaaataaaataaggaagagttatggattagagacaaactgcagggattagg
-tggggcatgatgcttgatgagtgatcagggagggcctctctgaggagcaaatatttgatc
-tgagacctgaagaagaaggaagagcctggaaagatacaggaaaagttccaggcagatggc
-atagcaagggcaaaggccctggggcaggaagaacttggtaggttcgaggactaggagaaa
-gggaccatagctggagGATGATTCAGCAAACCTGGCAGGTCTGTCCTGGATGACTCAGCA
-AGCCTTGCAGGTCTGTTCTGGTTTCAGAACCCAGGCATTTTGTCCTTCACTCCAGGCTGC
-CTCAGAGACATGCATCCCTGCCATACACAACAATGTGTGCACGCTGGCACACATGCACAT
-GCATGCACACACACACTCTGCATGCTGACACACAACTAAGGGCCGGACCAGCCATGATAG
-TCTAAGACACTAACATTTTTCTCTAGTGTCTTGTGGGGCCAAGTAGAAGGGCCAGATGTC
-ACCTTTGCCCAGCCTTCCAGAAGTTCTGGGCCAAAGAAAGATTAAATGGCAGGAAGAGAA
-AAATGGCTTAATAAGGAGGTGACGGGGAACTCGGGTGGCCTGTGGGGGTGCGGAGATGGG
-GGGAGATGATAGAGATGTGAGAGCCCATGGGCACATCCCCTCTGGGGAAGTGAGGGAGCA
-CCGAGAACAGAGAAGCAGAGGGAGTGGAGACGGTTCTCAGAAGCACAGGGCCTCCACACT
-CACCACAGCCCCTACTCAGCCGACATGCCTTGCTTCCTCTCACCTCCCCTGGTTCACCTC
-AGAGATGGGACACTCATTGCCCACCAGGGCAGCCTGGGTGGTGCCAACTGTGAGAGAGCT
-CCCCTTCCACATCTGCCTTTGTGGCTGTAAAATGTGGAAAGaataagagaaatacctatg
-aaatctgcaggaagatactttcttttttttttttttttttttttgagatggagtttagtt
-cttgtcgcccaggctggagtgcagtggagcgatctcagctcactgcaacctccgcctccc
-aggttcaagcaattctcctgcctcagtctcccgagtagctgggattacaggtgctcgcca
-tcacacccagctaatttttttgtatttttagtagagatggggtttcgccatgttgggcaa
-gctggtctcgaactcctaacctcaggtgatccacccacctcagcctcccaaaggaggctg
-ggattacatttttctaaatcagttcggtaaaaatcaaaaattttgagaacacctggtgtt
-gtagttctgggaagcaggtactcacatgctttgctggcaggaggtagattgataacaatc
-tctatagaggaggagccagagatctctcttaaaagtgcaaatgcacaaacttttgactta
-gaaattctgcttctgggCAGGGCGCGGTGGCTCACGCCTGTGATCCCTGCCTCCCaggcc
-aaggttgcagtgagctgagatcgcaccattgcactccagcctgggcaacaagagcgaaac
-tctgtctcaaaaaagaaagaaagaaagaaagaaaaattctacttctaggaaattagctca
-gaacttctctccacacccccatgtatgaacactgcagcattttttgttatagcaaaagac
-tggaaataattaactgttcattgacaagggatggtttaaataaaccagtacattcctaac
-catggaataggaccaagctgtaaaaactgaccaggcaggtctttctggactgacacggaa
-gagtccccaagataaattgttaaataggaaggaaaaaggcaatctgaaggacatggagtg
-tgctcccatctgtgtaaaaaagtgacaaTAAATCCTCATATTTTATGTCTTGAAGGAAAC
-ACGAGAAAATGGCTTGACCCCAGGAAGATGAACTAGGAGCTGGGGATAGGAGTGGGAGGG
-AGACTTCTCAAGTATTACTCTTCTGTGCCTTTGAATTTTGAGCTAAAATATTTAaataaa
-atattaatataattaatataatacaattaataattaatattgaataaaataaaatatCTA
-AAAATCTGCTCCccgggtgcggtggcccacgcctataatcccagcactttgggaggccaa
-ggctggtggatcacctgaggtcgagagttagagaccagcctgaccaacatggagaaaccc
-cggctctactaaaaatacaaaataattagccgggagaggtggcgcatgcttgtaatccca
-gctactcagcaggctgaggcagaagaatcgcttgaacccggaagacggaggttgcagtga
-gccaagatcgcaccattgcactccagcctgggcaacagaagcaaaactccgtctccaaaa
-acaaacaaaaaaacaaaacaaacaaacaaacaaaacCACAACTGTCTGCTCAAAAGTGCC
-ATCCTCCTACACACTCCTTGCCCTCAGCTAAGTTCTGTCCCCATGGAACTCTCCCTGGAA
-GAGACAATCTGTCTCCCAAGAGAgcaggcctatgtgtgagtcctggttccatcactgacc
-ctaagtgtgacctcaggcaagacactCCCACCCCTGACTTGTACTAGACAGTTCTCCCCA
-GCACTGACATTCTGTCTCTCCTGCTGGAGGGGCAGGAGGGCAGGCACAGTGTCTTCTTGC
-TCTGTGATTCATTCAGTTCACTTAAACTGAGTTACCTACTCCAGGCCAGAGTTTGGGTTC
-ATCCATTTCTTGCCCTCCATGCCCACCCCAGGGTCTGGCATGGGAGTTGGTACCCTATAG
-GAGTTCTGAACAGACTCAGCTTACGGATGAGGAACAGACGGTGGGTCAGATGCGCGGTAA
-GGAGGGTCAGGTACACGGCCCATGGGATCGAATAGATTCATGGGTGGGtctttaagacaa
-ccgccttcactcaatcctaagccctccccacagctaccaccctattttttctcccctttg
-cagaaaagggctttgagaaaattgtctatcctcgctgtttttaattagtcttctctctct
-ctctccctctgagacaggatctgctctctcacccaagctggagtgcagtggcgtgatcat
-ggctcactgcagcctcaacctcctgggctcaaacgatcttcccacctcagcctcctgagt
-agctgggactacaggtgtgcactaccatgcctggctaatttttgtattttttgtagagac
-tgggttttgccatgttgcccaggctggttttgaactcccaggctcaagtgatccatccac
-ctcagcctcccaaagtgctgggactgcaggtgtgagccaccacacctggccctcttgtct
-cttaagtccatttaatcatgcttctacctgtcacttccctagttgaaactgctcttgtca
-atttcaacacattgctaaatccaatgtgttcagttctcattcttcatctttttttttttt
-tttttttgagacagagtcttgctctgtcacccaggctggaatacagtggcacgatcttgg
-cccactgcaacctctgcctcctgggttcaagcgattctcctgcctcagcctcccgagtag
-ttgggactacaggcacaagccaccaaacccagctaatttttgtatttttagttgagacgg
-catttcaccatgttggccaggatggtctcaatctcttgacctcgtgatccgcccaccttg
-gcctccaaaagtgctgggattacaggtgtgagccaccgcacccggcccattcttcatctt
-cttaactgatcaacagtttgacacagctgaccactccctgctctttgatgtacttctttt
-cacttggtggccaggcctccactctctgctggttttcctccttctcaggctccctgcttc
-tcccattcctgttggagcagtgaggacttggtccctggagctctcatccagtctcacgtc
-tatgactcccaacactgtatcctcagcccagacctctcccctgaactccagcccatacat
-tcaaatacctacctgatgtctctttgaggatgtcaaaagacatgacagactccacagaac
-caaagctgaacctgggcttcccccaaacacctcgctccatgtcatttgatggcagttcca
-tacctgtcaccgttcaggccaagaaaccttggaagcaccttgacacctccttttccctca
-aactccacatctagaccatcagcaatcctgttggctccacctttaaaatatacccagaat
-ccagtcacagctcacctctagcatggccactgccctgctctgagccactggagtttaaga
-gaattattgcaacacctgctcccttgtcttcctgtccttgcctcattcagtctattccaa
-gtacagatccctaaatgattttattttaaaagtaagtcaaggctgggcatggtagctcat
-gcctgtaatcctagcgcttgaggaggccgaggaaggaggatcacttgggtgtaggagttt
-gagacccacctgggcaatgtggcaaaaccctgtctgtacttaaaaaaaagaaaaaaaATg
-gctgggcatggtggctcaccctgtaatcttagcactttgggaggctgaggcgggtgaatc
-acctgaggtcaggagttcgagaccagcctggccaacatgatgaaaccccatctctactaa
-aaatacaaaaattagccgggcaaggtgatgcacgcctgtagtcccagctactcaggaggc
-taaggaagaagaatcactggaacccaggaggtggaggttgcagtgagccaagatcgcgcc
-actgcactccagcctgcatgacaggagcgagactccatctcaaaaaaaaaaaaaaaaaaa
-aaaaggtaagtgagatcacttccctcctctccttaaaccctcccctgcctccccatgact
-cctcagcgtcctttcaaaggcctccaaagctccagattatctgaaccccctttacctctc
-tgacctcatctcccaccgcctccctgtcactggctgcactccagccacattgaccttctc
-cgatggcacaccagtcagctagtcagcttccttttggagcttttgcatgagctgttcctc
-ttcctgaagaatttgcccttcggatagtctcagggcatccactgaacactccactcaata
-cagccactgcctgcccacccaacactcctcatctctgtacttactctttttttcccttgc
-attcgtcaccccctaacatgtgctacaatgtacttattatggtaattatttcttgcatgt
-ttctttctttttttttttgagacagggtctcactctgttgcccagtctggagtgcagcag
-catgatctcagctcactgaaatcttggcctacctggctcaggccatcctccctcctctgc
-ctcctgagtagctgggactacaggcactcaccaccatgcctggctagttgttgtactttt
-ttgtagagatgaggtttcaccatgttgcctaagctagtctaaaactcctaggctcaagtg
-atcctcccgcctcagcctcccgaagtactgggattgcgggtgtgagccgctgtgcctggc
-tgcacttttccttctaatggaatgtaagcgccacttttgtctgttattttcactgtagta
-tccctagcctttggaatgttgcctggcaagtagtaggtactcagtaaatatttgttgaag
-aaacggatGATTCTATAAATAGCATGGATTGATATGGGAAAGCTATGTAGGTGGATGGAT
-GGATGCTTGTCGGATGGAGGGTAGATGAAAGAACAGCGAGAAATTCGAATGGCTAGATGG
-TGGGGATGCATTATAAAATAATAATTCATAGATGGAAAAGGAATGAATAGATGGGTGGAG
-GGATttaatctcttcaactactatttactgaccacttgccgtgtgccaggcactgtatga
-ggtgctagagacactggtgagccacacaggcaaggtgcctgtcctaagggagcctgtagt
-tcagtgggtgaggcagacactaaacaaataacaaatacatacataattccaattatagtt
-aagtgttctggtggaaaagaaCAGGATGCTCTGGGAGAGAATAATATGGATAAGTGATGG
-AAAAATGGACAATAAATGGGTAGATGGAGATGGATAGGATCGGGGTTATTTGCCTTAAAG
-GGCCTGGCTTCAGGACTGGAGCTGCTTTACCTTAAAGGGCCTGTCGGACCACATGTACCA
-TCCCACATCCCAGACCAGCTCTGCACTCAGAGACTGTCCCTCTCTCCCTGCCCTGACTCA
-GCACCTGCCTGGCCTATCCCCAGTGGTCCTGCCTGACTCTACCTCCAGCTCCCACCCTGC
-TGAGTCACAGTCAGGCTGGTCAGGGGGCTGTCCCATGTTCAGTCCAGCCCCTCAGCCTTC
-CTCGACCTGGGGGGGTATGGGGAGCAGCCCAGAGGGGAGGGGAGCAGGTGCCAAGCTCTT
-GATTCCTGTGCCTGAGCACTGCCCTGTTGAGACCAGAGAGAGAATCTATGGCTAGGGTAT
-CTGGGGCTACAGTTGGGGTTTATCTGGGGCCTGGGGTCACACATGATGGATTAGAGCTAA
-ATCTATCTCCAGGGTTATAACTCAATCAGGAGCTAGAATTCAAATTCAGTTTATGGATCA
-TGTGGGGAAAAAGTGACCAAGACACCGTTCAGTTTGGGACCTGTGTCGGCGTTAGCTGTG
-GCTACGGCCCAGGGCTTAGTGATCACAGGTCAGACCATGTTCAAGGTTTCAGGCCAGAGT
-GCAGTTGAAGTGCAAAGTCAGGCAATAGGGTTCACCCTAGGACCACAGTCAAGGATCTGG
-GTCAGTTAGTGTCCAGGGCACTGGCCTTGTCTCCTCTTCTTTGGGAGAGAAGCCAGGTGG
-ATGAGTTGGATCTAAATGTCCTGAGGAGCAACTTCCAGCTCAAGTTCCTTCACCCAGGCG
-GCCTAAGCCCTCTCAGCACTGGCCCCAAAGCCTTCCTTCATCCCTCAACTTCCTCCATCA
-CTCCCTGACAGCCTGGCCTTGCTCAGTGTCCCTCGCAAGGCTGAACAGTCCTCATTCTGG
-CACCTCAGGGGACAGGGTAGGGGTGGGGACTATGGGACAGGGCTCAGTGCTGGACCCAGG
-AGGGCGCCTTGCGCAAGGTTTTCTGATGCAACTGGCTGAGTGCTTCAGCATTCCACCCCC
-ACCCCCCAAGCTTTTCTCAGAAAGGCAAGGCCTGGGCAGTTATCCAGACTGAACATATAA
-TCCCCTTCCTTCTCTGGCCTTTGATGGCTTCAGGACCTGCAGGCAAaaggaaggcaggaa
-ggcaggcaggaaggaaggaaggTCAGGTGACTCAGCAATGCGTCCAGCACTGGGAGCTGG
-CAGATCTGGGGCTCCCTCATCCTCCAGCTGAGAGGCGAGAAAGAGAATCAGGATCCCTGG
-AAGTTTGGAGATCCTAACCCCTTATACATACAAAGCAGCAATTATGTGCCTAAGCCCAGG
-GAGAGACCTGTAGCTGCCCAAGGTCAGAGGCAAGGTCAGAACCAGACCAGCTGTCTTCAG
-CCCATGGCTATGATCTAGCTATTTCCACTACACAGAAAGAGAGAACCCTTCACCCTTGAG
-GAGGACACGGGACTTCCCCAGGAACCTCCCGTCAATCCTGTTGAGGCTCCTGAAATGgtg
-gaatgacgtggactttggaaccacgcagacctgggtttaaatcccaggccaggcacggtg
-gctcatgactgtaatcccaacactttgggaggctgaggcaggcagatcacttgtggtcag
-gagtttgagaccagcctggccaacatggtaaaaccccatctctactaaaaatacaaaaac
-tagccaggcgtggtggcacacgcctgtaatcccagctactcaggaggcagaagcgtgaga
-atcgcttgaacccgggaggcggaggttgcagtgggctgagatcatgccaccgcactccta
-ggtgagagtgagactccgtctcaaaaagccacactggctagctgtgtaacgctgggcagg
-ttactttcactctttgacactggatttgctcacttgcaaagtgggcgtaaatgcatcctt
-agctcacagggctgtggtgaggctgacatgaggaagcactggaaggcacagcttagGCTC
-CACATGGGCCACTCTCAGGAAGTGTGTCCCCACCTCCCCCTTTATCCTCAGCTCTCACTG
-GGTGTGTTTGCTGGGGAAGGAGGTGCAGCAGCCCTGGGGCCTTGGAaataataatagcca
-ctcaccctccagtgcttaccatgtgctgggaactctcctaagcgtgaacttaacctgtat
-tagcccatttaaccctcCATTTAATCCAATAACAGTTCCCAGgccaggcatggtggtgca
-tgcccatagtcccagctactcaggaagctgaggcgggagtatcgcttgagcctgggaggt
-tgaggctacagtgagtcatgatcaccctactgcactgcagcctgggcaacagagtgagat
-cttctctcaaaagaaaagaaaagaaaagaGggaaggaaggaaggaagggagggaggGAAA
-TCCCAATGACAATAAGCAGTTcaataaccctacaggaaaacactgtcatcaatcccactt
-tatagatagggctgtgggtctgagtagctaagtgactttgtccaagacagtggacaagag
-accacacggattttgagccaggccagctggctctgaatcccactgtctcctccctcctta
-aactagtgatgtcactgctctgagccctggtttcctcatctgtctccagggataaaaata
-gcagcttcatggggaagtttgaggatgacacaagatgacgtaagggaggtccccacacag
-ggctccacccacagGCATGAGAAGAGCCTTTCTCAGGAAGAATCCCAGGCCGCCCCTGGG
-GCAACCGCCGGGCTGGCCTTCCTGCCTCTCCTTAGGCCCAGCCTAGCGTGATCTGGATGG
-TGAGAGATTTCTGCAAAGCCCCCAGGGGCCTCCAGAGAAGGGAGGTGCCCGGTCTCCTAG
-ATAAGGGCTCCCAGAGAGGATCACAGCCCTGGAGTTGCCATTCTTGAATCACCCACTGTC
-TTCCCCAAGTTGATTGGTCTGAATCCATGTACTTATTTTTTAtattagttccataatgtc
-ttccttccaaccagctcatcttttacttatttatttatttatttattttatttatttttt
-tatacagagtcttgctctgtcacccaggctgaagtgcagtggtatgatctcggctcacgg
-caatctctgcctcctgggttcaagcgactctcatgcctcagcctcccaagtagctgggac
-tacaggtgcatgccaccacgtccagctaatttttgtatttttagcggagataggtttttg
-ccatgttggccaggctggtctcaaactcctgacctcaggtgatccactcacctctgcctc
-ccaaagtgctgggattacaagcatggaccactgtgcttgaccacaaccacctcattttaa
-aaaacttatctaaatttatttaacatggaaattttaaatcactgacctcaaatagaaaac
-tactatgatttgccataaagaagaggtaagcatacaattacatacaaaaaaagcagaacc
-aggttattccattccagctaaatcctgtttcttgctgaaggctccaagctgaactctgct
-gtctcattcttaacaagagaggtgttaaaaacatagaagctgtgaggccgggcacggtgg
-ctcatgcctgtaatcccagcactttgggaggccgagcgagtggatcacgaggtcaggaga
-tcgagaccatcctggctagcacggtgaaaccccgtctctactaaaaacaataacaacaac
-aacaacaatcagccgggcgtggtggcgggcgcctgtagtcccagctgcttgggaggctga
-ggcaggagaatcgcttgaacccgggaggcagagattgcagtgagctgagatcataccact
-gcatttcagcctgggtgacagagcaagagcaagactccgtctcaaaaacaaacaaaacaa
-caacaacaaaaaaaaaaaccatacaagctgttggccgggcgcggtggctcacacctgtaa
-tcccagcactctgggaggccaaggtgggtggatcacgtggtcaggagatcaagaccatcc
-tggccaacatggtgaaaccctgtctctagcaaaaatacaaaaattagctgggtgtggtgg
-cacacgcccatattcccagctactggggaggctgaggcaggaggatggcgtgaacccggg
-aggcggagcttgcagtgagctgagatcacgccagtgcactctagcctgggtgacagagcg
-agactccgtctcaaagaaaaagaaaaaaaaaaaaagaagctgttaaatgagactttctcc
-ctgagtctttggagaaacagcaagaaaactgaaagggtttaagtgtatcacaattatgat
-tcaaagttatgtcatacggtatctggagaccctaaaaccctctggcactcagccattgtt
-gtacatggtatatttcagaaaacactgACCTCACTGacctactccaactttctcttctta
-ttttacagataagaaatttgaagcccccgcaaagggaggtgacttgtccacaatctcaca
-ggctcagtggcttcagccagacttggaacgcaACCAGAAGTTCTAAGGCATCATGTCACT
-TTTGTGGGGGAAATGTATGAAGATGAAAAGTTTCAAGGACACCTATGGTGGAATTTTAGG
-CATATGGCAATCACTAGGGACACCCATGTGGAAGGAAAGGAGGCAGGCATGGCTCATGTC
-ATTGCTGTGGGCCCCACATCAGTGCTGGGGGTCAGAGACGGAACTCATCAGAACTATAGC
-AAAGAggccgggcacagtggctcacgcctataatcccagcagtttaggaggccaaggtgg
-gcggatcatttaaggtcaggagttcgagaccagcgtggccaacttggtgaaaccccgtct
-ctactaaaaatacaaaaacattagccaggtgtggtagtccacacctgtaatgccagctac
-tcagggagctgaggcaggagaattgcttgaacccgggaggcagaggttgcagtgagccaa
-gatcacatgccacttccctccagcctgggcagcagagcgagacactgcctcaaaaaaaca
-aacaaacaaacaaaaaaCCAAACCTATAGGAAAGAGAAAAGCAGCCTTCTGGGCTCAGAA
-ATCTGAGTAGAAAGATGTTCTGAGCCTGGAGAAAGAAATTCATAAAAGCCTGACTCTCTC
-TCCAGAAAAGAGTACATTTCTGCATTTAATTTTGGGAGGTTGGTCACCATTCTTTTCCTC
-GCTTCTAAATAAATGCTTATATAGCATTTAtattccagtcactttacaaatattgtcatt
-taattctcatgcaaaccaacgaggtaggaactattgttatccccattttacagatgggga
-aactgaagtacaaagagctgaagtaacttttccaaaatAGATGTGGTTTTGAACCCAAGA
-AATGTGATACAACTATGACATGAGGCAGTCCCAATGcattgaatccttatgactgcaatg
-caagggaggtataattaactgcattttatagatgcagaaactgaggcttgaggctatttg
-gtgtttctggtgtagatctaggagccaaactccagcctacctagactctttgcctctgct
-gtacccctggaccatgTGTTAGGAATTCTTGGTACAGGGTGGTAGTGCTCAATATGGTAG
-TGgttttagtctgttttctgttgcttataacagaatgtctgaaactgaacaattttgaaa
-gaaaaggaatttattccttacagctatggaggataggaagtccaagattgagggggcact
-tctggtgagggccttattcctggtctctgaagtgtctggaggtggcacagggtatagcgt
-ggagaggggactgggcatgctgacatgctatgctttggtctctcttcctcttcttataaa
-gccaccagttctcctcctgtgaaaacccacaaatccattaatccatgagtgggttagtcc
-attcataagggcagaggcttcatgatccaatcacttcttaaaagtcccaaccgctcagta
-ctgccacattgggggattaagtttccagcacatgacatttgggggacacatttaaaccat
-agcagtagccatttgccacatgtggttattgagcacttcaagtatggctaatgtggctag
-tgtgactgagaattttttattttattgaatattttaatttttttttttttttttgagatg
-gagtctcactctgtcgcccaggtcagagtgcagtgtcatgatctcggctcactgcaacct
-ccgcctcccggggtcaagtgattctcctgcctcaacatcccgagtagctgggattacagg
-tgtgtgccaccatgcccggcaaatttttgtatttttagtagagacagggtttcactgtgt
-tagccaggacgatcttgatcttctgacctcatgatccacccacctccgcctcccaaagtg
-ctgggattacaggcatgagccactgcgcccagcctcacattatatttctattggaacaca
-gaaTGGTCTAGAGAATTGGGATTTGACAAACCCAGCTGTGACAAGTCACCAAAATTTGGG
-GGCCATACCCAGGGTGCCGTTCCTGTCACGATACCCATAGGTCCATGTGGAGGCTGCAGG
-GATACAAAGCTCGTGAAATATCCCAGGATGgcatgggcactggagtcagctgccccaagt
-tcaaatctgaaatcagtctttttgttttttttttttttttgagatgcagtttcactcttg
-ttgcccaagctggaatgcagtggcgcaattggctcactgcaacctccgcctcctgggttc
-aagcgattctcctgtctcagcctcccgagtagctgggattacaggtacatgccatcacgc
-ccggctaaatttttgtattcttagcagaaaccgggtttcaccaccttagccaggctggtc
-tccatctcctgacttcaggtgatccgcctgcctcagcctcccaaagtgttgggattacag
-gcgtgagccaccgcgcccagcctgaaatcagtcttatacgaccagctgggtggtcttggg
-taggtcccttaccttaactcttcttgtctgcagaatggaggtgacttactgtttttctct
-gtctccctttcacatctttgcactcttcaccccttctcttccctcagcttttagtttaaa
-catcacctttctgataagccctgctgaaaatggccaccctcagtcatgacggagaacaag
-tctttcctattttattcaagaaaatgcatgatgcaatctattttaaatgatcatggtttt
-aattttattttcctgataatggtctatctctccactgatttataagatttgtaagagcag
-gggtggatcattctggtcactgctgagtccccagcatttagaacaggggctgacacaGCA
-CAAAACAACGTTAGTTGGGAATGTACAAGCAAACCCAGCACACCTTCAGAGGGGTGCTCA
-GGAAACAGCCCTCCCAcctttcttcacccctcacagctgtgggatcttcctaaccatttc
-ggtgtcccaggatagaggatgagtttattcacccctccccagcaggggagttgccaggat
-taaatgagatCCCAGAATGCCCTGGTATACCCTGAAGGCTCTGGGACACAGGTGAGCTGG
-TCCCCAGGGATTTGGAAACAGGAAAACAAATATGACTCCACCCTGCCTCCCATCCAGCCT
-CTGCCTAGAGGAGTTATtttattttattttactttttttttttttttgagacggagtctt
-gctctgtcgcccaggctggagtgcaatggcgcaatctcagctcattgcaactcctgcctc
-ctgggttcaagcgattctcctgcctcagcctcccgagtagctgggactacaggtgtgttt
-tttgtatttttagtaattttttgtacttttagtagaaacgggtttcaccgtgttagccag
-gatggtcttgatctcccgacctcgtgatccacctgcctcagcctcccaaagtgctgggat
-tacaggcataagccaccacgcccagccTCTAGAGGAGttattttacttacttacttattt
-atttattacacaggatctcactctgtcacccaacctggagtgcagtggcacaatcacgtt
-tcactgtaacctgaactcctgggctcaagtgatcctcctacctcagcttcctaagtagct
-gggaccacaagctcgtaccaccatgcccgctatctttttctctttgtaaagacagggtct
-tactatgtcatccaggctgttctcaaactcctggcctcaagcaatcctcccgtcttggcc
-tcccaaagtgctaggattacagacatgagccagctcacccagctGAGGAGTTATTTTTTG
-ACACTGGTGAATTCAGATCAAAAGGGATTTCTAAGAAAGGTGCTGGACCCAggccgggcg
-cggtggctcatgcctgtaatctcagcactttgggaggccgaggcaggtggattatctgag
-gtcaggagttcgagaccagcctgaccaacatggagaaaccctgtctctactaaaaataca
-aaattagccaggcatagtagcgcatgcctgtaatcccagctacttgggaggctgaggcag
-gagaatcgcttgaacccgggaggtggaggttgcagtgagccgagatcgtgccatcgcact
-caatcctgggcaacgagtgaaactctgcctcaaaaaaagaaaaaaaaagaaaGGTGCTGG
-ACGCCTAGGACGCAGAGGGGTGTTTCACCCCAAATCAAGTAGCACCAAGCCCTCCCAGGC
-CTTGGGTGCAAGCATATTAAAGGCCTCTTTCCCTCTCTGTCTCCATTGTTTACACTCCac
-tgagcatccgcaatgtgccacacactgttctaagcgtcttacacatattaaattatttaa
-tcctcacaacaactttatgaagtgagcgcaattatgagcccattttatggagcaggaagt
-tgaggcagggttttaggtagcttttctggggtagcactgtgggttggagcggaggtggag
-tgcactcttaggccagctggctctaggggctcttcaccactaggccgcactgCCTCTAGC
-AAAGGGACGCGGGGAAGCTCAGCAGACCTTAGGCCTCCCAAGGGCGCCACGGTGGTTCCT
-TTGAGCCCAGAGTCAGCTCTTAAGTCCATAGGCCTTCCTGAAGCTTCTGAACCACTTGCC
-CATAGCTGGGCCTCAGGCTGGCTCTCAGTAGAATGTGGAGAATGGAGATTCCCGCATGTC
-CACTTCTCCTAAAGGTTTTATAAGGCAGTGCTGGGAATGTGCTTTATAAAAAAGGGGAAG
-CACCCCGACAACAGTCACTGTTTGctcttttaagcaccatcctgagaaggaggaatgttc
-ttcccatttcataggtggggaaaccgaggctcagaagagcaaatttttggccgggcgcgg
-tggctcacgcctgtaatcccagcactttgggaggccgaggcgggtggatcacgaggtcag
-gagatcgagaccatcctggctaacaaggtgaaaccccgtctctactaaaaatacaaaaaa
-ttagccgggcgtggtgcgggcgcctgtagtcccagctactcgggaggctgaggcaggaga
-atggcgtgaacccgggaggcggagcttgcagtgagccgagatcgcgccaccgccctccag
-cctgggcgacagagcaagactctgtctcaaaaaaaaaaaaaaaaagagcaaatttttttt
-ccaaggtgatagggagagtccgtggctgaTGTCTGCACTGACCAGACGCCCCTAGGGGGC
-CAGCGAGGGCGGGTCCCAGGTGCAGCGGATGCAGAGGAGAGAggcccgggcgcggcgcgg
-gggATGGTGCGATCCCGGGCCCGAGGGCATCAGACGGCGGCTGATTAGCTCCGGTTTGCA
-TCACCCGGACCGGGGGATTAGCTCCGGTTTGCATCACCCGGACCGGGGGATTAGCTCCGG
-TTTGCATCACCCGGACCGGGGGCCGGGCGCGCACGAGACTCGCAGCGGAAGTGGAGGCGG
-CTCCGCGCGCGTCCGCTGCTAGGACCCGGGCAGGGCTGGAGCTGGGCTGGGATCCCGAGC
-TCGGCAGCAGCGCAGCGGGCCGGCCCACCTGCTGGTGCCCTGGAGGCTCTGAgccccggc
-ggcgcccgggcccACGCGGAACGACGGGGCGAGGTACTCGGCGGGGTGCGGCCTGCGGAC
-TcgcccggaggccggggggcgggagggggcggccggggAAGGGGGCGCCGGAAGCCTCTG
-GGCGTCTGCGTGTTGCCGCGTGTTACACGCACGCACGCCCCTTACACACCTTTTCACAGA
-CCCCGCCGTCGGGGCGCGGCCAGGTCAGATCCCTTTTGATCCGGGCCTGGGCTGAGTGCT
-CCCCCCGGGCTTCAGGTGACGCGGCCCCGCGGAGCGTGGGGTCGCCCGAGTTGGGCTGGG
-GAAGCCAGGGACGGAGGTGTCCGGCCGTCACCCCTAGAGGAGGGCGTGCGGGGGTCTGTT
-TTGCGTGAGTGCGGGATAGGGGAGTCGTGTGGTGCGGTGAGGGGCTTGTGGGGGGCACTG
-GAGGACTCTGGGGGTGGCGGGGGATCCGAGGGGGTCCTCGTGAACCCGCAGGGGAGAGTC
-CTGGGTGAGGGTGGGTCCCGAGCACCTGTGTCTCAGGAGATGGTGAGAGCTGTCTGGAGG
-GCTGGGCACTTGGTGGCAGGGGTTGGCGGTGCAGGGGACACCGCCGGGACAGGGCTGGGG
-TGCCCTGGAGCGGGGGAGCCGAGGGAGTGGGAGCGGGGGCGCAGCGCGCGATCTCTGGCC
-CGGCAGGGCCGCTGGTTCTCCCCAGTGCGCGGCTCCGGGTTTGCAGGTGGACGGTGCGCG
-CGTGTCTGCGGTGTGTGCTGTGCCTGCAGACCGGGGAGGGCGGGGGACGACAGCCACCTC
-CTTCCCTCTGCCTCACCCCCCTCCTGTCCCAGGGCCGCGCTTCAATTTCCGCTGAAACTT
-CTGACTCGGACACCCGCCGCCTTTCGCTTGGGCTCCCACGGGAGGGGCCTGGCTGCGGGG
-GGCGGGGCGGGGTGGGGGTGCGGCCTTGCTCGGGTAGACCATGGGTGTGACAGCTGGGAG
-GGCtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgtgCGCGCGCGCGCTTGCGCTTGATGTA
-ACCCGCCCTCATTTCCCTGGGTCCCGAGTGTGGCAGGGAACAGCAAGAGGTAGATATTAG
-GGGCTGCTTTCATTCCACATCACAGATTCTATTCTGCAGTGTGGTCTGCAAAATGCCTTG
-CCCAAGATGTATAGACTCAGTTACCGCATCTGTCCCCATCTGGGTGGAGCTTATCCCAGG
-CCCCAACAGGCTCTGAGGGATGGCCGGGGCCAAGGCAGCCTGGACTACTGATGTGGCACA
-GGCCAGAGGGACTCCAGGCAGTCTCCTGCTGCACAGGGCACAAAGCATGTGCACAGCCAG
-GTATCATCCTGCGTGACTCAGAACAGCCTTGAGATGTAAGGAGTGTCATCCCAGCCTCGA
-ACCTGGGGAGCTTTCTAAGACTCCCAAGGATGGTACTTATGCATCTTGCTGTGAAGAATA
-ACAGGATGAGTGCtaataatgaccatttcctgacacctacctggcaacaggtccataagc
-tctacatgcttcatttgtgttttcatttcatcatcacgaaaaacctgtaagctttgcatc
-ctgttcccactttacaggaactgaggctcagaaagcttgaggaacttgaccaggggtacc
-ccccagctagaaagggtttgagacaggattagaacccaggaatatctgactacagccact
-ccttactgcaTTCTTACCAAGCCAAAGTCATGACCTTTCACTCATGTGGGGAGGCCTTCC
-CTTCCAAGGCAGCTCTTCCATTTGGGAGCAGCGTACTTGGAGAGGTGGGCCTCTGTCTGG
-TAACTGACTCATGTTGCCTTGTTAATCCTGCCTTGAACTGTTGGGAAGGTCTTTAACCAG
-GCTGAGGTCTCTCGCACCAATGCCCATACCTGGGCATGCACCTCCTTGGAATGGAGTTTA
-AGTGGGTGGGCAGATGGGTTCTAGAGAGAACCCGTCTGCCCTGACCATGCCCTACTGCCC
-TCTCCTTCAGCCACCACACACACAGTCACACAGCTGCGTGAATGGTGgctttcctttcac
-ttaacagttcactctggagatccttccaattaccctataaagagcatcctcaacctttta
-aatggctgcacattgttccgttgtgtggatgaagtataatttatgtaaccagccctgtaa
-ttatagacagccaattatttctgtcaaaagggctgcaggaataactgtgtatttgcatgc
-ttacacacacacacctctacagaataaattcttagcaatgggattaattgctgaatcaaa
-gctcacacgcttttcatcgttgtttttgttttgttttgttttgctttgttttgagacagt
-ctcactttgttgcacaggctagagttcctgaccatggctcactgaagcctttaccttctg
-ggctcaagtgattcccctacttcaacctcctgcatggctgggactacagctgtgtgccat
-catgaccagataattttttttttcttagggacagggtctcgctacgttgcctaggctggt
-cttgaactcctgggctcaagtgatcttcctgcttcagcctcccaaagtactgggattaca
-ggcatgaagcactgcacccagcctgtttttcattttgatattgtcaaaatgcactcctca
-gaggtggtaccttttatcctcccactagcactgtCTTCATTGTTAGTGGCTGCACTGCCA
-CTATTCCACAGTATAAACCCACTTTTCATGACACTGCCAAGACATAAGGGTCTGAAATAC
-TTAACAGTTTTCTTCCACAGTCCCCAAAATACAGGCTtctcccccagctcaggacatgaa
-gccatcatccctcctcattgcaggagccaaaggctggacctcacctcgattccaccctct
-ccttcacccctcacatccaatccatccagtccatccagtctgccactgagtcctcttgat
-cttcctcctatgagcccttaacttcgcgtctccatctagcaccccctagtccaggtcacc
-ttctcctgcctggactcgtgcttgtgtgggcctcctagctagtctcactgccccgtcttg
-tactttcaaatccaccctaaaagcatgatgttcccctgctgaaatccttcagtggctccc
-cactgcctttggataattccaaatcctattgtgtgttaattaggattaggctcagctgta
-atatagaaacagccacttaatagctaaaatgaaatagacgtttttttcttctttttctct
-ttttttgagacagagtcttgctctgtccccaggctggagtgcagtggcgagatctcagct
-cactacaacctctgcctcccaggctcaagtgattctcctgcctcagcctcccgagtagct
-gggactacaggcatgcaccaccatgcccacctaatttttgtatgtttagtagagatgggg
-tttcaccatgttggccaagatggtctcgatctcctgaccttgtgatctgcctgcctcggc
-ctcccaaagtgctgggattacaggcatgagccactgcgcccagccttcaatagatgttta
-tttctctcctgtgtaaaaaacctggaggtctggcctgacaactccatgtgtcagggacct
-aggctcctctcttgctctactgtatgtggtacttctgaagccaaggtagatgctggagct
-ccagcagttaggtccacattccagcatacaggaaaggaggaaatgaggaagttgggccct
-ccctttaagaacactgtcctgggcattgtacacaacacttccacttgtgtcctactagcc
-atatgctgatacaaggatacaagggagacaggaaatgcagtttattctaggtgtccttgt
-gctcagctgaaaatctcaggttctaatcctatgtaaggaggggagacctgaaactgggga
-ccactaaccacctctgccatatgatgctcgtagagcccttcacaatagggcctctactaa
-cctcaccttatttttatttatttatttatttttgagacggagtttcactcttgtcgccca
-ggccggagtgcaatgacactatctcagctcaccgcaacctttgcctcctgggttcaagca
-actctcctgcctcagactcctgagtagctgggattacaggcgtgtgccaccacgcccggc
-taatttttgtagttttagtagagacggggtttcaccatgttggtcaggctggtctcaaac
-tcctgacctcaggtgacctgcctgcctcggcctcccaaagtgctgggattacaggtgtga
-gccaccacgcccggcctattttttttttttttttaacttttcacttttttttgcagtcac
-gctcattctccaccgtgttcttggggaacatgcagcatgttcttttgcctcTTCCCTCAC
-CCCAGAACAGGggttactggacagcggcatcaacttcacctgggaactggatagaaatgc
-agattcagaccttctgaatgagctactttgggagtagggcccagcaatgtatgttgaaac
-aggcctccagatgatctcaatgcttgctcaagtttgagaaccactgAACCGCAGTATGAC
-TCTCCGTGTCAcctggctaactctgcctcactttcaggtctcagtgtagacaccacctct
-tctaggaagacctctcttgacccaccagcccaggagagaggcctctctgggttcctagag
-gcccatgcttctctgTATAGTAGGGCTGATCACACTGTATGTGAtttttttttttttttt
-tgagagagtctttactctgtcaccaggctggagtgcagtggcacaaacatggctcactga
-agcctcaacctcccaggctcaagcaatcttcccacctcagcctcccaagtagctgggact
-acaggcatccaccaccacacccagctaattaaaaaaaaatttttttttgtagagacaggg
-tctcactatgttgcccaagctggtcttgaacttttgggttcaagcagtcttcccaccatg
-gccttccaaagtgctaggattacaggtgtgggccactgcacctagccTTGGACGTGATTT
-TATTACTCATCTGCCCTCCAAATTGACTGGAAGATCCTGACGGCAAGACTGCTGTCTAAC
-CTACTTCTCTTCCTAGCACCCAGTGTTAAGTGAATGAACAAGATCATATCTCTCATCTGT
-GAATGTACGAGAGCCATGGATTATGAGATTAGTTGATTTTCTTAACTATAATTTTTAGAA
-ACAAGCTGTGTTTTTAAGCAGGTATTTATTTCCTTAAATGTACATTTCTGATTACAAAAT
-ACttttttttgagacagagtcttgctctgtcacccaggctggagtgtagtggcacaatct
-cggctcattacaacctctgcctcctgggttcaagcgattctcctgcctcagccttcccag
-tagctgggattacaggtatgcaccaccacgcccggctaattttttttttctcccgtgacg
-gagtcttgttctgttggccaggctgaagtgcagtggtgtgatctcagctcactgcaacct
-ccacctcccgggttcaagtgattctcctgtctcagcctcccaagtagctgggattacagg
-cccacgccaccacgcctggctaatttttctatttttagtagagatggggtttcaccatgt
-tggccaggctggtctcaaactcctgacctcatgatccaccaccttggcctcccaaagtgc
-tgccgtgggctgcactttggcattgccttggtcacgtgctgctacctgggattacaggca
-taagccactgcgcctggcctaatttttgtattttttagtagagacagggtttcaccatgt
-tggccaggctggtcttgaactcccagcctcatgattcgcccaccttggcctcccaaagtg
-ctgggattacaggcgtgagccaccacgcctggccAGGAAATACATTTACATGGCTCAAAT
-TCAAAACTATAAAAGTCggccaaacatggtgactcacatctgtaatcctaacactttggg
-aggctgaggcaggaggattgcttgagctcaggtgagaccagcctaggcaatgtagggaga
-cccccatctctacaaagaataaaaaaaaattagtcaggcatcatagtgcacacctgtagt
-cccagctacttgggaggctgaggtggaagaatcacctgaaccctgaggtcgaggctgcaa
-gtgaactgtaatAGTAAGAGTCTCCTCCTAATCTTGTGCATCCTTTCAGAGAGAGAGATG
-atagatattcaaacaaatacatacatatatataacatatttatatatattctttttaaca
-taaaagtatagccaggtgtggtggttcactactagagtcccagctacttaggaagctgag
-gtgggaggttcacttgaggccacgagtttgagaccagcgtgggcaacatctcttggggaa
-aaaaaaaaaaaaacccaccataaaagcattctataacacgtaattctgtgtttgtctttc
-ttctcttaatacatcttggagatcagtacgcatcagtatatagagagcttccttgtcctt
-tttcagggctgtgtagtattctgctgtatggctataccatgatgttttcactagctttct
-actgcctgacatttgggatatttcctgcttttgctattggacacaaggctctgatgaaca
-gcctttactatatttaatttttttgtgagaagtttaactggaagataaattcccagaagt
-ggggcacccagttaaggatatgtgactttgtcattttaacacacactgccagatcacccc
-ctataaatgttgtgccacgtatcctcccaccagcaGGGGAAAGGAGGGGCCACCAAGCAG
-TCTCACTTTAGTGCTTTTCTCTCCTTTTTACCAGATGCGAGCCACCCCTCTGGCTGCTCC
-TGCGGGTTCCCTGTCCAGGAAGAAGCGGTTGGAGTTGGATGACAACTTAGATACCGAGCG
-TCCCGTCCAGAAACGAGCTCGAAGTGGGCCCCAGCCCAGACTGCCCCCCTGCCTGTTGCC
-CCTGAGCCCACCTACTGCTCCAGATCGTGCAACTGCTGTGGCCACTGCCTCCCGTCTTGG
-GCCCTATGTCCTCCTGGAGCCCGAGGAGGGCGGGCGGGCCTACCAGGCCCTGCACTGCCC
-TACAGGCACTGAGTATACCTGCAAGGTACGTGCCCATGGGCGGCTGTCCCCCAGCACCAC
-AGGAGGCCTGGGAAGGAGGCCTCCAAAGGATTGCCAGGGTGCAGAGGGGTCCTTATGTTC
-ATTCATTCTTGTGTTTGTTTAGTGGGGAAGCATCCAGGGAGCCCCTGCTGGACTGATACT
-AGAGAGGTAAACCAGAGGTCGTCCCAGTCCTGGGGGAGTTCACAGCTTAGGCCCTACAGT
-GTGATAAATGCTGCAGGGGTAGAACTTAGGGATCATGGGCGCAGAAaaggccgagcagaa
-gttagccaggtagaagtgggagatgggagttgcaggcagggggaacagctgttcaaaggc
-ctagaaaagtgaggggatagcactttagagaatgaaaaggacttctctgtggccagagtg
-gagaggatgtgcagaaaggggcaggagatgaagGTTGGCAGCAGCTGGTCATGAAGGTGT
-TAACAAGGGGCCTCCACTGGGCTGTGCGGAGCTACTGAAGATGTTTGCACAAGAGAAGGG
-TAGGGCATGGTAGACATCAAAACTCCTgggacctcggaggtgatcgagcctaacctgggg
-ccattttacagataggaagactgagatgaagacaggagaagggccatgcgtgaagtcaca
-tagcACTGGGCCTGGCTCCTGGGGTAAACTAAGGGGTAGAAAAGTCTGAGGATTCCTGGC
-AGAAACCAGGAAATGGACAGGGTCAAGGCCCCTGAGGGTCAGCCCATGCAGGACACTGAC
-AAGTGACAGTCCAAGAAGACAGAGATGAGAATAAAAAGTGTAACAAtaggtattcactgt
-gcaccaggtactatgatgattgcttagtgtgcacaatctcttttaatcttgacacaacca
-atgaggtggtttctatcattgtgccccttttatagatagaggacactgagactcagaaag
-ccatggttacttgccacatgacagagccaggtggtatcagagctgggattgggcccagga
-ggctgagcccagagagtcctgtgcccGTGCTAGGATAAGCGTTTCACACAATCAGGGCAG
-GCTGCCCTGGCAGGCAAGCATAAGGAAGATAAGGGGGACCTGGAAACCCAAGGGAGAGTA
-GCGGGGGCCTGGGTCCCTTGGGAATGCACAGAGAAGCAGAAGGACTTAAGCCTCCTCCTG
-GGGCAGCAGCAGAGCTTTGCTCTGTTGACGGAGATGCAGTGAACAGCGGGGCAGATCCAG
-ACAGGGTCCAGCCCCTAGCTTCACCTGGCCTCTTGTGCACAGATCTCCAGCGCCCTTACC
-AGGTGCCCTAAGGAGCCCAGAACTCTGGGTCCCCTTCCTGCAGCATCACAGGCTCTTTTC
-CACTCCCGCTGGGGAGGTGAGTCCATGATAAGAGGAATAACCCAAGCAGGCTCAGGAGAG
-AAGCGCCATGCGTTCACAGGGCCCTGATTCTCAAGAAACATTTGGGAAAATCCACTGGAA
-CATACTCACCCCTATGCCAATGTGCACCATGGGTGCTGAATGGTCATTTCCACACTTCCT
-CAGCTTTTCTGGTCAGTGTGTAGAAAGATCAAAATCTTGTCTTTGTAAATGATCAACTTa
-ttcattaattcaacacaacttcattgagcacccgtatttgccatgtaccatgctgtggtt
-aaaaaacaaagttctgttctcatcaagctgacgttctagtgggagatacagacactaaac
-aagcgaataagtaaaatacgtgtcaggtggccgggcgcggtggctcacacctgtaatccc
-agcactttgggaggccgaggtaggcagatcacctgaagtcaggagttcgagactatcctg
-gccaacatggtgaaaccttgtttctattaaaaatacaaaaaattagccgggcatggtggc
-aggggcctgtaatcccagctactcgagaggctgaggcaggagaatctcttgaacctggga
-ggtggaggttgcagtgagccgagatcacaccactgcactccagcctgggcaacaagagca
-aaactccgtctcaaaaaaacaaaaaacaaacaggaaaaCCCTTATTCCAGCATCTTTCTT
-GGTTCCTTTGCAATGCTTATCAGCATTTGTCAATATTTGGTTTCTGGGCATGTTTGCATG
-GCCTCCCAGTGGGCACCGGAGAGCAGAGCCCATGGCTGTCAGTCTAGCTGGACATGTGGC
-TGGCCCGTGCAGGCCCAGGGCCAGCATACTGAATGAATGAAAGCGTGGGTGGGCAAAGAG
-GACGGGAGCTGTGACGGTGATGAGCATCAGGTGCCTTCTGCATCATCCGCCCTTCCGGAT
-TCCTCCTGCTTTGTGGGTTATTTTTCTGTTTGGGTGACCTGTTACTTTTCAGTTATCCGA
-TGTTTGAGGCCAtatagcgtagcagttaagagcacagacaaaaggccgggtgcagtggct
-cacacctgtaatcccagccctttggaaggctgaggcgggaggatcacctgaggtcaggag
-ttcgagaccagcttagccaacatgatgaaaccccatctctactaaaaatacaaaaattag
-ctaggtgcggtggcacatgcctgtaatcccagctacactgggggctgaagcgggagaatc
-acttgaatccaggaggcggagtttgcagtgagctgagattgcgccagtgtgctccagcct
-gggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaaaagcacagacagtg
-gagtgcatacgtgcaaatctcagccgtgctgtttgctggctgtgtggcctctcagcttcg
-ttaaccgtaaaatggagcaagtcatcctaccttataggaccatggtcagggctgagtgac
-tcggtcagtgaagcgcttggtgcgatgcctagcacatggtagtgtctaataGGTCAGCTG
-TGACTGTTTGCAATGCCAGCCTCAGCTCCCGGGAGTCCCCAGCTGTGCTAACACCATGCT
-CTGCCCACAGGTGTACCCCGTCCAGGAAGCCCTGGCCGTGCTGGAGCCCTATGCGCGGCT
-GCCCCCGCACAAGCATGTGGCTCGGCCCACTGAGGTCCTGGCTGGTACCCAGCTCCTCTA
-CGCCTTTTTCACTCGGACCCATGGGGACATGCACAGCCTGGTGCGAAGCCGCCACCGTAT
-CCCTGAGCCTGAGGCTGCCGTGCTCTTCCGCCAGATGGCCACCGCCCTGGCGCACTGTCA
-CCAGCACGGTCTGGTCCTGCGTGATCTCAAGCTGTGTCGCTTTGTCTTCGCTGACCGTGA
-GAGGTGAGTGTGGTCTCAGAGACCCCAGCCACAGACACACCCAGGGGGTGGGCCATGATG
-GAGAGAAACCGAGGCCCAGGAAGGCAAGGTAACTTAGGCAAGAAGTGGGAGAAACTGAAG
-TAACCAGCAGCCCCTGTTTAGTTCCCTGAGAAGAGTTGACTCAggccaggtgcagtggct
-cacgcctttaatcccagcactttgggaggccgaggtgggtgaatcacttgaagtcaggag
-ttcgagaccagcctggccaacatggtgaaactccgtctctactaaaaatacaaaaattag
-cctagtgtggtggcgcacacctgtaatcccagctactctgaaggctgaggcaggagaact
-gcttgaacctgggaggcggaagttgcagtgagccaagatcacgccactgcactccagcct
-cggcaacagagtgagattccatctcaaaaaaaaaaaaaagaGTTGACTCAGTCCTCTTGG
-GAGCCCCTTGGGATTCTGGGATGGAGCACTGAGATGTGAAAGTCATAGTAGCCGACAGTG
-ACGAAAGCATCGCCACATTATCTAACGTGGTCttccatccttacaaacacgaggcaggta
-ctgttattatccccatatgatcaaggaaactgaggcccagagagctcaagtaacttgccc
-aagatcccatagcagaataaatggtagagctgggatttgaacctagatctgactccagag
-cctgggtcttaaTTCAATCTGAGCTTGAGAGGCAGGGGcctggctgggcttaccaactga
-ctttgggtgacctagtgtctctgagcctcagtttctccgttggtaaggaaaagggctgga
-ttGTTAGGGTGTTTTCAGGATTCCAAGACCACAGCCAAAATAGGGTCTGAGGTTCCCCAC
-ACGGGAACGTTTTCTGTGAAACTGAGAATTAGCACTTTTTGGTTAAAAGAATCTTCCTTC
-TCTAGGTTGGGATGCTAAGAAtttttttttttttaattgagacagagtctcactctgtca
-cccaggctggaatgcaatggcgcgatcttggctcactgcaacctctgctgcctgggttca
-agtgatacgcctgcctcagcctcccgaatagctgggactacaggcatgcgccaccatgcc
-tggctcattttttctatgtttagtagaaacggggttttgccatgttggccaggctggtct
-tgaactcttgaccttaggtgatccgcctgcctcggcctcccaaagtgctgggattacagg
-tgtgaggtactgcacccagccTAGACGCTAAGAAAAATTTTTAAAAGATAATTCTGGGGA
-GAAGGGCAGAGAGACTCGCCTCCTGTTCCCTCTCCAGATTCCTGGGGGCAGTCAAGATGT
-GTCAGGGAGTGCACTAAGCTGCCAGTTACACAGGAGTTTTCTGTGGAGAAAGGAGTGTGA
-CCCCATGGCATTTTAAAAAACtttttatcttgaaataattttagacttttagaaaaccta
-caaaaatagttcaaagagtttctgcatatcctttaaccagtgctctccaatgttaacacc
-tgacgtagctatggtacaattacccaaactattaactaagccacagattgattcccactt
-cccgagtttcccactaacaccccttgctgtgcaggatccagtgaggatcccaatttagtc
-atcagtggtttccttggtctcttccaatctgagacagttcctcagtctttccctgtcttt
-gaagacccatgaccttgacacttttttttttttgagacagggtctcactctgtcacccag
-gctggagtgcagtggtgtgatcacagctcactgcagcctcaacctcccgggctcaagtga
-tcctcccacctcagcctcctgagtagttggttctacaggtgtgtgccaccccacctggct
-aattgagatggggtcttgctatgttgcccaggctggtctcagactcctgagctcaagcaa
-tctgcctgcctcagcctcccaaaatcctgggattataggcgtgagccactgctcctggcc
-ataaccttgagacttttgaagagtactgatcagttactttgtatgtccctcaatttggat
-ttgattgatgttttctcacagttagattgcagttatgtatttttggcaagaacaacacag
-aatcgataggcccctctccacatcatatcaagagatacttgagctgatagtcattcctat
-gtcgtgaccttgatcacttggttagggcaggacctaccaggtttctctactgtaaggtcc
-taatttaccctttgtaattgacaaataccttgggggaggtaagctaggcatataaatatc
-ctgtttttcctcaactttcacccactaattttagcagccatccatcttgcctatagcagt
-tattattgtggtgcttgcctaagtctaattttctttttcttttttttctttctttctttt
-ttttttttttttgagacagagtctcgctctgttgcccaggttggagtgcagtggcacgat
-ctcggctcactgcaacctccacctcccgggttcaagtgattctcgtgcctcagcctcttg
-agcagctgggattacaggcacacaccaccacacttggctaatttttgtatttttagtaga
-gatggggttttgccatgttggccaggctggtctcgaaatccgcctgccttggcctcccaa
-agtgctgggattataggcatgggccgctgcgcccagccCCCAAGGCTGATTTTCTGTTAA
-TATTTCCTTCTACATTTTATATTAGAACAAGCATGCCTTTTTTAAAGAAGTAACATTTAT
-AATGATGTTTAAGCTAGTACATAACTTCAAACACATTTTAGGCTTAGGGTAGATACAACT
-ACCCCGGACCTCCTGGAGGAGACAGCGTGCTTCCTGCTCTTTTCAAGAAGTCACTTgatg
-gcccacacctgttatcccagtgcttcgggaagccaaagtaggaggactgcttgagcccag
-gagttcgaggccagcctaggcaacacagaaaaccccatctgtacaaaaaatttataaaaa
-ttagccaggtgtggtgatgcacacctgtgatcccagctacttgggaggctgaggcaggag
-gattgcttgagcccagaagtttgaggctgcagtgaactaggattgcaccactgcactcca
-gcctgggtggcagagtgagaccctatctctaaagaaaaaaaagaaaaaaaaaaagaaaaA
-TCACATGagagtcattggtagaagagggaccgtgagttagatagacctgtgtttaaatcc
-tgggttctgcttcttacctgctttttggccctgagcaaatgacttcacctgcctgagcct
-ttgtttcttcatctgtaaaatgggctaataatgctgacACCCCTTGTCCCCCAATACTGT
-GATTCATAGGATTGGTCAGTATTTGTGAAATGCCACTGGACACCCAGGAAGTAATGCCAT
-AAAGAAGAAACTAATAGCAGTGGTAATAGAATGATTACTATTAAAGTCATCTTTGAGTGC
-TCAGTGGAAGTTGTTTAAAGTAGAAATTGCAAATGGCAGGACACACtttttttttttttt
-tgagacagggtctcactctgtcacccaggccggagtgcagtggcgcgatctcagctcact
-gcaaccgccacctcctgggctcaagtcatatccttctgcctcagcctcccaagtagctgg
-gactacaggtgcgaatcaccatgcctgctaattttcgtattttttgtagagataggtttt
-taccgtgttgcccaggctggtcttgaactcctgaactcaagtgatccccctacctcggcc
-tcccaaagtgctaggattaccggcatgagccaccgcgcccagccTTACACACTTTTTTTT
-TTGCCCTGCTTACCTGTTTGTGTTTTTTATATAAACTGGTTGCCAATATTTTTTAAATGG
-GGACCTTTTCATTAAAATACAATTCCTGGCTTCTCTTGGGGAAAACAATGGGAATGTGGG
-GCCATCTTGGGAACTGCGAGGGTGGGTCACAGCACTGGCTCTGAGTATCTGCCAGCCAGC
-GTTCCCATCCCAGGCCCATGCtctacagctgtaaaatggtgtcttccttgcaggctgtag
-cctagatagaatgaggtgagccaggtaatgagctgggtcaagggccaggaacacagcagg
-cacttggtaaaCCCTAGAATGCGTTGTGTACCCTTTTTAGGTAGCGCTTGTGCTGAGATG
-TCAGGCACACTTCCTGTTTCTCTCATCTTATTACCTGCCTGGACCCTAAGTTTGTAGCTG
-GTTTAAGAGAGGCTTAACCCTCTCAGCCCCATCAGCCCCCTCCCCAAGGGACTCTGTTGA
-AAAATGTATTCCTTTCAgaattttagtttaaatttaattgctctgtggccttaaatgact
-taacctctctgagcctgggcttgggtatctgtaaaacaggATCAGACATCACAGGACTGG
-CTTGTGTCTGTCAAAGGCCAGCAGGCACTTGGAAAGTGGGTGCCACAAGGGTGATAGCAT
-GGGGTGGTGGCATGGGGGTTCTGGGTAGGACCTGACCCTTCTGTTTCTCCCCATGTCCCA
-GGAAGAAGCTGGTGCTGGAGAACCTGGAGGACTCCTGCGTGCTGACTGGGCCAGATGATT
-CCCTGTGGGACAAGCACGCGTGCCCAGCCTACGTGGGACCTGAGATACTCAGCTCACGGG
-CCTCATACTCGGGCAAGGCAGCCGATGTCTGGAGCCTGGGCGTGGCGCTCTTCACCATGC
-TGGCCGGCCACTACCCCTTCCAGGACTCGGAGCCTGTCCTGCTCTTCGGCAAGATCCGCC
-GCGGGGCCTACGCCTTGCCTGCAGGCCTCTCGGCCCCTGCCCGCTGTCTGGTTCGCTGCC
-TCCTTCGTCGGGAGCCAGCTGAACGGCTCACAGCCACAGGCATCCTCCTGCACCCCTGGC
-TGCGACAGGACCCGATGCCCTTAGCCCCAACCCGATCCCATCTCTGGGAGGCTGCCCAGG
-TGGTCCCTGATGGACTGGGGCTGGACGAAGCCAGGGAAGAGGAGGGAGACAGAGAAGTGG
-TTCTGTATGGCTAGGACCACCCTACTACACGCTCAGCTGCCAACAGTGGATTGAGTTTGG
-GGGTAGCTCCAAGCCTTCTCCTGCCTCTGAACTGAGCCAAACCTTCAGTGCCTTCCAGAA
-GGGAGAAAGGCAGAAGCCTGTGTGGAGTGTGCTGTGTACACATCTGCtttgttccacaca
-catgcagttcctgcttgggtgcttatcaggtgccaagccctgttctcggtgctgggagta
-cagcagtgagcaaaggagacaatattccctgctcacagagatgacaAACTGGCATCCTTG
-AGCTGACAACACTTTTCCATGACCATAGGTCACTGTCTACACTGGGTACACTTTGTACCA
-GTGTCGGCCTCCACTGATGCTGGTGCTCAGGCACCTCTGTCCAAGGACAATCCCTTTCAC
-AAACAAACCAGCTGCCTTTGTATCTTGTACCTTTTCAGAGAAAGGGAGGTATCCCTGTGC
-CAAAGGCTCCAGGCCTCTCCCCTGCAACTCAGGACCCAAGCCCAGCTCACTCTGGGAACT
-GTGTTCCCAGCATCTCTGTCCTCTTGATTAAGAGATTCTCCTTCCAGGCCTAAGCCTGGG
-ATTTGGGCCAGAGATAAGAATCCAAACTATGAGGCTAGTTCTTGTCTAACTCAAGACTGT
-TCTGGAATGAGGGTCCAGGCCTGTCAACCATGGGGCTTCTGACCTGAGCACCAAGGTTGA
-GGGACAGGATTAGGCAGGGTCTGTCCTGTGGCCACCTGGAAAGTCCCAGGTGGGACTCTT
-CTGGGGACACTTGGGGTCCACAATCCCAGGTCCATACTCTAGGTTTTGGATACCATGAGT
-ATGTATGTTTACCTGTGCCTAATAAAGGAGAATTATGAAATAATTTTATTTTTCTCTGCA
-ATTTCTTCCATCCTTTCCAACGATCTCTTACCAGTTTTTCCTGCCTTCAAAACTGGCCCC
-CATGGTGAAAGGCCGTAGAGTTGTGTCTTAACCTGGGCTGAGTGGTTTGTGAGAACAGAT
-TACCTGGAGCCCAGTGGGTCTTCCTGCACTCCTTCTGTTTCTTCTGGCAGCAGCAGTGTC
-TCTATTAGGGTACTTTCTGAGTCaaaatggcttcaacaagatggaaatatgtttcacaca
-aaacaagaagtcagcagatagggtgggcttcagtgctggtccattcaactcccaaagctg
-cgcacagggaccccggctctccaggctccttctgtctctTGGCTGTATTGTCTCGAGACT
-GCTGGCCCAATGGCTACAGCAGGTGTCACATTAAAGAGGTCCATGACCAGAGGAAGAAGC
-CAGGGGTCATTGtagtacctgagaactcagaactctggagtcaggctgcctggaattaaa
-tcctggctccagcactcaatagctgtttgacccttggcaagtttcttaaccactctatgc
-ctcagattcttcatctgtgaaatgggggacaatgatagtacctaacttatgagaactaaa
-tgacttattttgtataaagcaattagaacaagcagcgcctggcataataagcccacaata
-aaagttACTCCCggctgggcacggtggctcacgcctgtaatcccagcactttgggaggcc
-gaggtgggcagatcacaaggtcaggagttcaagaccaacctgaccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaatttttagtagagacggggcgtggtggtgcgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaattgcttgaacccgggaggtggacgtt
-gcagtgagccaagatcccgccactgcactcagcctgggcaagagagcgagactccgtctc
-gaaaaaaaaaaaaaTGGTGCTCCCACATTTCTTTCTTGGGATGGAGGaagctttcccaga
-agcgctcctgaccgactttcccacacatctcactggtcagaactgcatcacttgccgttt
-ctgaccaatcaccagcTTACATTCATGGGGCACGTGCTTACACTAACCATGGCACTCCTC
-GAGCTAAGTGGAGCTCATGCGTCATATGGAGGGGTAGTGACTCCTGAGCAAAACCAGGTT
-CAAAGAGGGAGGGGATCGTAGGGAAAAGAATGTGCGGAAGTgcggaggcccagccaacag
-cctgctaactgcagatactcgagagcggccaccctagatcatctgacccaggctggccca
-cgctagaattgcccagtgacccgcaaggtcatgagctaattgagctaaataaaatcattg
-tgtttttttgtttgtttgttttgtttttgttgttttgttttttgagacagagtctcactc
-tgtcacccaggctggagtgcagtggtgcgatcttggctcactgcaacctctgcctcccgg
-gttttcaaacgattcttctgcttctgcctcagcctcccgagtagctgggattacaggcac
-gcgccactacacccggctaatttttatatttttagtagagacgggggtttcgccatgttg
-gccaggctggtctccaactcctgacctcaggtgataggcccacctcggccacccaaagtg
-ctggtattacaggcgtgagccgccgcacccggccaatcattgtggttttaagtcactaag
-tttgaggctattttgttttacagcaaaagctaactgatgcaGACAGGGACAAGTCAGTCT
-CATCTCTGTGCACCCAGCATTGCCCAGAACAGGGCCTAGTTGTGTCTAGGGTCTCATGGG
-GCAGCCCCTGACCTCTATCTTGCCCCTCCCAGCTTCCAACAGACCCTGTCCCAGCTCCCT
-CCAAGCTGAGTGTTGGCCTGATACCTACCAGTGGAGCGAGGGGAACACGAGGACTGCCAA
-GGGcaggtaccgtgccaacccttcactccattccacaaagagactcatttactcctcatg
-acaatccagtgaggcagatgttcctgtcactttacagataagacaaatgagctttagaga
-gagcagaagactcatccaagacctcacaacAGAGAAAAAGACTCCTCTGGTTTTTGCCTT
-GGAGCAGGAACTTTTGACAAGGCTGCGCAGATGCAGCCACATGAAAACCGCCCATTAAAA
-ATGTAATATCggcccggagcgggggctcacgcctgtaatcccagcactttgggaggccga
-ggcaggcagatcacttgaggtcaggagttgaagaccagcctggccaacatggtgaaaccc
-cgtctctactaaaaatacaaaaaatagccaggcgtggtggcatgggcctgtaatcccagc
-tactcgggaggctgaggcaggagaatcacttgaacccaggaggcagagattgcagtgagt
-caagattgcaccactgcactccagcctgagcgacagagcaagactctgtctcaaaataat
-aataaaaTGTAATATTCACTCTTATCAAATAATGGATGTCACCACACCCCGACCCTAATT
-AGTGAGGACTTTCATGTTCTACTTGTCTTCATTTAATCATCATTGTATAAGAGTTTTACA
-ATATCAAATTAGTAGATGTATATTACTGAAAGGGAAGGACTGTTAGAAATTTACTTGAGG
-AATGTCTGCCACTGGGGGCTGAACACAAAAGATCCTATTGTGACCTGCCAGATTATTCat
-tcacttagcaattcaacaaccatcgctgaatgcctactataggccaggtgccatgcaaga
-cagatgtgctcccaccctcaagggttcacagtctaatagaggagagagatgttaaacaga
-taactgtacagatggcaTAGCTAATTATATTCGTGGAAGTTCGTTGTGGCAAAGACAGGC
-ATCTCAATATTTCAGGAGCTCCCctatattttctagcctcccttacagtcacatgactag
-ttctgaccagtggggtgtgtgtaggagtgGCAGGCTGAAGCAATGGAGAGCTGGTGAGCC
-TCATCCCTCTCTTCCCCTGCCACAGCCACCTTGCGCCCACAAGTtcccttagctacaagc
-tggaggagagccaccagatccaccttagatttcactgagcaagaaataaagcttcttgtg
-ttaagtctttcagatttggagtttgtctggtagatagtgttaattaccatgactaaGGAA
-AATTTGCCATTAGTGAAGGGAGGAAAAATATTCTCCACCAGTAACAAGGCCATGTCAGTC
-TGCTGCATTATAAACCCCAAACAGtagtttatgatcctctgggctggcaatttgggctga
-attcagctgggtcactcctgcagctgcaggcagcaagcagctcgaatgtctaccttgcca
-ggaaggctcttctctgctccacatggcctcgtcctccaataggcatagcctactccttcc
-tatggtggtctcagggtttcagaaagcaacaagagaggacaaattccagtgttcaagctg
-cactagtgtcaaagcatatcaaatagcatgtcaaattccacatcaaattcaggatgcagg
-caaattgattctttctcttgatgggaagagctgaaaaTAATGTGTGGTCTTGTTTTTCAA
-TGTAcagtggtcccatttatccaggggggatacattccaagacccccagtggatgcctga
-aaccacagatagtacagaattctgtatataccatgttttttactatacatacatacctac
-gataaggtttaatttgtaaattaaactcttacaaattaagagttaacaacagctgggcac
-agtggctcacgcctgtaatcccagcactttgggaggccgaggtgggcggatcacgaggtc
-aagagatcgagaccatcatgaccaacatggtgaaactccgtctctactaaaaatacaaaa
-attatctgggtgtagtggcgcatgcctgtaatcccagctacttgggaggctgaggcagga
-gaatcatttgaacccgggaggcggaggttgcagtgagctgagatcgcgccactgcactcc
-agcctggtgacagagcgagactccacctcaaaaaaaaaaaaaaaacaaaaaaaacaaaca
-gttaacaataaatagaacagttataacagtatgttgtaataaaagttatgcgaatgtggt
-ctctccctcaaaatgtcctattgtactgtactcacccttcttgtgatgatgggagataat
-aaaatgcctacatgatgagatgaaggtaaatgaatgacatgggcattgtgatctagcgtt
-agactactactcacctgatgatacgtcagaaggagaatcatctcctttgggtgatccagg
-atcatgaagccgtgacaatgtccatgattggatgtcaggagcagatgatgttaatgatta
-accgtgggtaatgtctacaatatggatacagtgcaaaagggatgattcacatcctacgtg
-gaatagtgcaggattgcatgagatttcatcatgtggttggctgcaggtaactgacattgc
-agaaagcaaaaccacagatcatgggggTGGGGGTGGGGAACTACTGTACAACATGAGATA
-TATTTGATCAAATAAGATGAGGTGCACCTAAAACTTTCCCTACAGGTTGTATGCCCCTGA
-GTAAATTGCTTGGTGTCTCTGGATCTCCAGCTGTTCCCCTTCTCTCTGCATGGCTAAGCC
-CTGTCCGTCACTTGGGGCTGGACCTAGAGCCCTGCCTGGCCACTAAGCCCTCAGAACAGG
-GTTTCTTTTTTAAAAAAGACAGGGTcgggaggtggaggttgcaatgagccaaggtcgcac
-cattgcactccagcctgggtgacaagagtgaaactccatctcaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaagacagggtctcactctgtcacccaggctggagtacagtggt
-gtgatcatggctcgctgcagccttgaacacctgggctcaagctgtcccccaacctcagct
-tcctgagtagctgggagtgccaccacgcctagctagttttttaaaaaattgttttgtaga
-gacaggggcctcactattttgcccaggctggtcttgaatgcctggcctcaaatgatcctc
-ctgccttggcctcccaaagcactggggttacaggtatgaccacTACCCACAACCAGAACA
-Tttctcaaatgtgattggttgatctcctgcatccatccctggggtgcttgtttaaaatgc
-agagccctggatcctcccccaacctagagagtcagaacatctgggcttctgcatcttaac
-aagctccctgggtgatgctgctgggcctccaagttggagaacctctgTATTTGAAGAAAT
-CCGGACTCCTTGGGGACTCAAATCTTATTTCAGCTCTTCTCTGGACTAGTTTGACTTTAG
-CCTTGGTGTAAAATGGGTATACATTTTACACGCCTGTGACGCCAGGATGCGCTCACAGGG
-GAGGGAGGGCTTTATCAGAGGTCAGAATCTAAGCCACCACTACAGTTGTACTAGATCCAA
-GGAGAAAGACTCCCAGGCCTCATttcctcatcgttctctcttctcttacctggctttatg
-gttcttcatagcactgagcaccaccaggcagtgtattttatgttttttttgagctttata
-atgccagggactatgttttgtttataactgttcacccagttcctagaacagtgcctggta
-cacaggagtgctcaataaatgtttgtggaatgactgaatAAAAGTTGTTCCTGTACAGAT
-TCCACCTGCCTAGAGCAAAGCCAGGACACTGATTGGGAtgaacacatagcacatgccaga
-catggctttgagtgctttacctggatcatctcactttatatgtgacagccaaatggtccc
-cagtgaccttcaccagctgctattcacgcctttgtacagtttcctcccatcctaagctgg
-gctgaccagtgtaatgaatacaatattgtgaaatgagaaagtatgacttttaagattagg
-tcataaaatatgttatggcttctgccttgctcttctggatcatctgctctggggacagcc
-agctgccatgttgcgaggacactcaattacccctgtggaaacttacatgtggtgaggatc
-gtaggcattctgcaaataaccagcaccacccaggcacataaaagagctttcttgagtcaa
-tcctccagccccagtcaagccttcagatgactgcagccccagccgacatcttaactacaa
-cctcatgagtgaccctgagccagaaccatctatgtagctgctccccagttcctaacccac
-agaaactatgtgatagcatacatgttgattgcttttttaagcaattaattttgggaaatt
-tgccacatatcaataattaataacttgtacagattctcacaacagcctatgtgggaggag
-ccatcataattaccattgaacagagaaagaaactgaggcccagatagggggaatctttgt
-ccagggtcacacagatagtgaactgtagcactgagattggaacccaagtttgaatgacta
-gagtcTACCCACTGAGGTGAAGGTGTTCAAGTTGAATGCCAGCTCTTCCCCTGAAGGGCC
-AAGGCTGAGACCAGAAAACCTGAAACAATATAGCTGCACCCaatataaatatatgcaggt
-aactcagggctgatggtacatgaccataataaatcagcagggtcatcaggagaaaacaag
-acaacaggagcgaaaacagatagaaacaaatatgcccagagtttgtatatcagtattatc
-agacgcagattataaaacaaaatgttggccgggcacgggggctcatgcctgtaatcccag
-cactttgggaggccaaggcgcatggatcacctgaggtcaagagttcaagaccagcctgac
-caacatggggaaaccccgtctcaaataaaaatacaaaaaaattagctgggcctggtggca
-ggctcctgtaatcccaggtacttcaggaggctgaggtaggagaatcgcttgtacccggga
-gggagaggttgcagtgagctgagatcgcaccatctcactccagcctgggcaacaagagcg
-aaactctgtctaaaaaaaaaaaaagtttactgcgtttaaataaataaataacctagaaac
-attgccaaagtatagaaaattatatcacatgacaacaaattttaaaataacctaacagaa
-cttctaaaataaaataatacaataatcaaaatttttaggccaggcacagtggctcacacc
-tgtaatcccagcactttgggaagccgaagtgggtggatcacttgaggtcaggagttcgag
-accagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaaattagccagg
-agtggtggcagacacctgtaatcccagctactcaggaggctgaggcaggagaatcacctg
-aacccgggaggcagaggttgcagtgagctaagatcgtgccatttgcactccagcctgggc
-aacaagagtgaaactctgtcacacacacacacacacacacacacacacacaaattaaatt
-taaaagatgggctaaacagcaaactagatatggctaaagagggaattagtgagacagaaa
-tcagaCaccaatcacagattcaagaaactccataaattttacacatagacacatcatagt
-aaaagtgcaaaaagccaaagattttttttaaaaaactcttaaaagcactcagaggaaaag
-aatcagagattctaaaaacaaaaaacaaaACAAAACAAAAAAACCCCAAAACAACAACAA
-CAaaaaacaaacaaaaaaccagtactacaacatggataaacctcaaaaacgttatgtcaa
-gaaaaaccccaaagttatgccaagtgaaagaagccagtcacaaaggttcacatattgtca
-aaatctaattttctttttgagacagggtctcactctgtcacccaggctggagtgcagtgg
-gacgatcactgctctacaggtgcacgccatcacactcggctaatttttgtattttttgta
-gagatggggtttcaccatgttgcccaggctggtcttgaattcctgggctcaagcgatcca
-cctggcttggcctccccaagtgctgggattactggcatgagccactgtggcccatcagta
-agatctaatttctataaaatatcaagaagaggaaagtctatagagacataaagtatatta
-gtgctgtcagttggaggatgggaaacagggaatgtctgctaatgagtacaggtctatttt
-ggggtgataagaatgttctttctttctttttttttttttggtctgagacagagtctcgct
-ctatcacgcaggctggagtacaacggtgcgatctcagctcactgcaacctctgcctccca
-ggttcaagccattctcatgcctcaggctctgcagtagctaggattacagatgtccgccac
-cacacctggctaatttttgtatttttagtagagacagggtttcaccatgttggccaggct
-ggtctcgaactcctgacctcaagtgatccgcccacctcggcctctcaaagtgctgggatt
-gtaggtgtgagccaccatgctcagccaaaaatgtcctaaaatttgattgtgatgatgggt
-gtacaattctgtaaatgttactaaaaactattgaattgtatattttaggtgggtggattt
-tatggcatataaattatatctcaataaagctgtttataaaaaGAACAGCAGTTAGATTGA
-CAGGTGATGATATCTCAATAAAGCTGTTTATAAAAAGAACAGCAGTTAGATTGACAGGTG
-ATGATATCTCAACAGCAACCATTtcccagcattttgggaggccgaggtgggcagatcatt
-tgagcccaggagttcaagaccagcctgggcaacatgaccaaaccctgtctctacaaaaat
-tagccagctgtggtggcacgtgcccgtggtttgcagctactcgggaagctgagcccagga
-gttggaggctgtagtgagccatgatcacgccactgcactccagcctgggcaacaagagtg
-aaactccatctcaaaaaaaaaaaaaaaaaaaaaaaaGGCTtccccaggccattcaaatgt
-acagccaaagttaagaaacattgtctaaagggatgtgtttccggcaaaagaaaaattatc
-ccagatgaaggtctgaggttcattccttcattcaacatatggagcctccattatgtgttt
-ggaactgttctagacaccaggaacacagcagtgagcaaaacaaaccaaagtccctgccct
-ctaggagaggaaaacagacccagaataacataaataagtaaaacatgctccgttagacag
-taatagatgctgagaagaaaaaatgaagccaggaaagcggatgtgaaatgctggatacgt
-gtgtctgtgaaatttcagatggagtaactagggaagatttttgggtaaagaccaaaataa
-agggaaggagggagccatgcagacgtttgggttatggcaggtgcaaaggccttagggcgg
-gagtgtgtctgacttactccaggacccagcaggtcaatgggacttgagtggaatgaggca
-ggggcagggcagtcagctacgaagacagagatcgggaggcaatttgcgagccctgggaca
-gatctcggattttgctttaagtgagatgggagtacttgggtcggggagtggcatgggttt
-gatttacattttaacaggactctccggcagctaggtggaaatggacggtagggggcaaaa
-agagaagcaaggaggcccaggaggaggctggttcaagacccctgagatgatggagcactg
-atggagctggagcgggatggggccggaggaggtgagggatgagattctgcaagtggagcc
-cgcaggatctgctgatcgatgggacgaggaacgggagaaaaaTTAAAGCGGCGCATGAGG
-CAGACGAATGCAAACTTCACCAATAGCTCAACGAAAAGACAGACGGTGACCGCTgagagg
-cagcgtcggatctgggtaagggcgggttcctgagcctgccaggcctggattcaaacctcg
-gctgagtggccttggacaggtcatcaacaaacagagccttcgtttattcatgtgcaaacg
-gggccaaggaccgggcctgccccgaggtatgcctgaggcttgggtgagCAGGCGCCGGGC
-TCGCAGGGCGCGCTCCTAACCCGTCCCCAGCGGCTCGACGCTGTGGATCCCGCCGCCCTC
-CAGCCCCGGCTCCGGCGCCGACTCCTGCTCAGgctcctgctcctgcccccggccccgccc
-ccggccccggccccggcccccggcccaccccggccccgcccccagcccccggcccccccg
-gccccgcccccggccccgccccggccccgCCCACCCCGCCTGCGGCCCAGCTCCTTCCCG
-CGGCTCTGCGATGCGGCCCGCAGGGTGACCCGGGCGGGAGTCCGGGGACCCGCGATCAGC
-CCCGGAGGACGGGGTGGGGTCGCCCCAAACAGGAGCGCCGGGACCGCTGGGACCCCGCAC
-TCGGCGTCCGCCGCCGCCGGGTAGCCGGGCAGTGGAGGTCCCGGATGAGGCGACAATTTT
-TCCGGCCCCCCCTCCCAGTCCCGCCCCACTTCCGGGGCCGCCACTTTCACTTTCTCTTCC
-GCCGAAGCCGCTCCCCTTGCGAAGAACTGGGGCCTCCCGGGAGGAGAGAGGGCTTTGCCT
-TGAAACCCGGGACGCCAGGGGCGCTCCCGCAAGTGGGGGTCCTCCGGGACTTGGAACGCC
-CCGGCTGGGTGGTGTCCGGGCGTCCTTTCCCCGCTTCTTCCCACCTCGGCTGGTCCCGTT
-TCCTCCTGCGCCCAGTGCGGACCTGTCTCGGCGCCCGCTGCCCTCTCACCGCCCCACGCA
-GGATCCCGGCCTGGTCACCGGGCAGTGTGATGCTTCCCGACTGCCGCGGGGACAGCGAGG
-CACACACAGGGCTTGGGCCGCGCCGGAGGCCACACGGCCTGGCTGAGTTGCTCCTGGTCT
-CCCGCCTCTCCCAGGCGACCCGGAGGTAGCATTTCCCAGGAGGCACGGTCCCCCCCAGGG
-GGATGGGCACAGCCACGCCAGATGGACGAGAAGACCAAGAAAGGTGGGCACAGGCTGGAG
-GTGGCTGGGGAACTTCCGGTGGGAAGTGGGCCCCGCAGGACCTGGCCTTGCCCCTGGCCA
-GAAGGGCCTTGGAGAGGGGGCTTTAGCCTGCCCTCCCTCTACCCTCCTCCCCATCAGTTT
-CCTCCTTTGGTACCTGCTGGCTTCCAGAGCCATCTTGGGGCCCTGAGAACTCCTTGGGCT
-GGCTCTGTGCTGAGATGGGGCTAGGGGACTCGCAGAGGACACAGGGCATTGAACTTGGAG
-ACCTCCTGGGCTGGTGGGAGACAGACGTCAGTTGACCTGAGAAGCAGGGGTACTTGCCTC
-TTCTCTTGTCCCCTGCACCTAGGGttgtagaacggaagtcagtcactgccttgctggaaa
-ccctcccatgcccctctgtgttctccaaacaaaacccagaggccctgggtggcccacagg
-atatctgtcctcagtcaccccgccatgctcactctactggagccccactggcttccttcg
-gttctcatccaaccattttttggccaaggcccttactcttccttccacctggaccactct
-tccccactggagcttgacacgtgcagcttctcctccttcaggtcttagcttcagtgttac
-cccctcccagaggcctcccctggtctccttaacctgtttatttccctgccagcaaggatc
-gcaatctgactttttttttttttcttgttaaacttgttcattgtctccccactgggcagg
-gagatccataaggagaggggccctgtttataaatctctgtgggattccagttcctgggac
-agtgggtggcacacagtagaagctcaataactgcttgttggataaatgaatAGAAATATG
-AGGGACCCTGGGAATGGGAAGGACAAACAACCAAATGAGCCTAGTGTGAGGAGGAGTGgg
-gaatattagagaacccctcccggagaaagggacttttagtctgggtgctgaaggatacgt
-aggagttcaccaggaagacagagaaagCAGCACACACAAAGGATCGCCTCCTTTCCTACC
-CCATTACTCTCAGCTCCTGAAAATAAACCCTGTGCTAACTGGCTCCTGCTGTACTGGCTT
-TCAGCAGAGGAAATGGCCCTGAGCCTCACCCGAGCAGTGGCGGGCGGGGATGAACAGGTG
-GCAATGAAGTGTGCCATCTGGCTGGCAGAGCAACGGGTGCCCCTGAGTGTGCAACTGAAG
-CCTGAGGTCTCCCCAACGCAGGACATCAGGTGAGGAGTGCATGGCTGGCCTGAACCCAAG
-GGACAGCAGGACAGGATATTCTTGCCTGTAGAACAGTTCTTCCtaatggcacgttctggc
-ttcaggaggcctggcttctaaccctagttatgtcattaatcaactgtgaaatacagagca
-ggtcacttcacctctcagtgtgtcctcattttaaaaatcagaccgtaacagtagctatct
-catagggttgttaggaggTGTACTGTATTAGGATGTTAGGCCTTATACAACAGAAGAAAA
-CGGAACAGTGacgtaaacaaatttgatggcagggagtccagatagggaggttctgctccc
-gacagtcctcagaggctcatattgtttctctcaccattctgccattcattcccagattcc
-tcatggtgcaaaatggccattccagctccatccagccatcacatcacaggaggaagggaa
-gaaagacacccctccacactcttctaaagagcatagctcaaaaattgtacacacttcttc
-cgttaattcctgtggaccagaactgattcccacagctacagttcagcttgaggggagact
-gtatagccaagatattcagctagaattcaggggttcgcttggtaagggaagggaagagaa
-tggatactgTCGGTCTGTGCTCCAGgagacttaaactcaatgctgaaacactttgcacaa
-tgcctggcgtgttatgcactcaataaTAAACATTAGTGTCTATCGTTATTTTTTGACTGC
-TTTTTCATTACTGGATAGTAAGGCAATAGTTTTATGGTTTCTGATTTTTGGTTCTCTTGG
-TGGGTCCCATTTGGTTTttcttaaaacagttttatttatttatttatccttacagttcga
-ccatttaaagtatacagttcaatggcttttagtatattcaaggttgtgcaaccattgcca
-caatcaattttagaacattttcatcatcctgtaaagaaacctggtactcattagcagcca
-gtcctcatctctctaccttttccctaactccccaaccttaggcaaccactaatctacttt
-ttatctctagggatctaccttctggaaattccatataagttgaatcatgcaatatgtggc
-cttttgtatctggcttctttcacttaggatcgttttcgagattcatccatgttgtagcat
-gtctaacaacttcattcccctttttttttttgacatggggtctcttgtctaggttgaagt
-gcagtggtgccatcatcgctcactacagcctcaacttcctggattcaagcagtcctcctg
-ccttggcctcccaggtagctgggactactggcatgtaccaccacacccggctaatttttt
-ttttctttgagatgggagtctcactctgtcccccaggctggagtgcagtggcgcgatctc
-agctcactgcaagctccacctcccaggttcacgccattctcctgcctcagcttcccgagt
-agctgggactacaggcgcccgccaccacgcccagctaattttttgtatttttagtagaga
-cggggtttcgccgtgttaaccaggatggtctccatctcctgacctcgtgatccgcccgcc
-tatgcctcccaatgtgctgggactacaggcgtgagccaccacacccagccacacctggct
-aatttttagaaagtctgtagagataaggtcttgctttgttgtctgggctggtcttgaact
-tctggcttaagcagtcttcccacctcagcctctcaaagtgctgggattacaggtgtgagc
-caccatgcccaaccagaactttattcctttttattgccaaataataatctattgtataga
-catatctcattatctttactcattaaatcagttgatggacatttgggtgtttctattttt
-tggctattataaacaatgctgccgtgaacatttgtgtccaactttttgtgtggacacgtt
-ttcatttctcttggatacacactagcagtggaattgctgggtcatacagtaactctatgt
-tactttttgaagaaatgccagacagttttccaaagtggctgcaccattttacattcccac
-cagcatatatgagggttctagtttctccacatcatctctaatacttgttgttgtttatct
-ttttgattatagccatcctagtaagtttgaagaggtatctcactgtggttttgatttgca
-atttcctaaccatttgatgacaaatgatgttaagcatcttttcatgcacatattttcttt
-ggaggtttgcctattcaggtcttttgcccattttaaaattgggtttatcttttttttttt
-ttgagatggagtctcgctctgtcacccaagcaggagtgcaatggtgcaatctcggctcac
-tgcaacctccgcctcccaggttcaagtgattctcctgccccagcctcctgagtagctgga
-ttacaggtgcccaccactacactggctaatttttgtatttttagtagagacgggtcttac
-catgttggccaggctggtcttgaactcctgacctcaggtgatccacccaccttggccttt
-ccaaagtgttgggattacaggcatgagccactgcacccggctgggtttatgtttttatat
-tgagttgtaggagtactttattcattttagctagaagtactttattcattttagcttatc
-agctacatgatttgcaaaaattttctctcattctgtggattgtcttctcactttgttgat
-ggtatcctttgaaccacaaaagttttaaattttgatgatgtccagttagtctatgtttta
-ttttgttgtttgtgcttttggtgtcatatctaagaaatcgttgcctcatccaaggtcatg
-aagatttacctctatattttcttctaaagattttatggttttagctcttacatttaggtc
-tttggtccattttgatttaatttttatataaggtgtgaggtaagggtccagcttcattct
-tttgcacgtggatattgagttgtgccggcactatttgttaaggctgttttcctctgttta
-atcatcttaaccctttttggaaattaattgaccataaatgtgagtgcttatttctggact
-ctcatttctataccattgaactataatatatatctgcccttacgccagtaccacactaat
-tactatagcttcatagtatttgaaatcaggaaatacaagttctccaacttttgttctttt
-tcaatattgttttggttattgcaagtctcttgaatttccatataaattttacgatcagct
-tgtctgtttctgcaaaaaaaaaacaacaacaactgggaattttggtagggatttcattga
-atctgtagatcattggccacttgattttaaacaaaatattgagatatctacttcttgaaA
-TGATTGCttgagacagtacctgtgtactccttgctatgaaaaatgaggaagttaacatac
-tcatcttccacctttccttttccttactttttttgttGAAGTATCATTGTGGACACTTTC
-CCAGTTGACTTCCACTTGATCCCCTGAATTAACTAACTGGCACTGGCGTTTCCTTTGTAA
-AATGTACAATGTCAGCCACCATCTtgctactaaagtgtggcctgtggaccacaacatggg
-gggaatctcaggtctcacctcagacttgctgggtcagaacctgagttttgagaggctcTG
-GGCAACCGGCACCTCTCAGACCTGCTGTTGGGTTCTCATCGATGGACCCGATGCTTCCTA
-GCAAATGATACCTGTTGTATGTGTTATTGGTAATAACATAGTTTACTTAGCTATTACATT
-AATTAATAAAACATGAGCGCTGAAAGAGTTGTTTCTGTGAAAATAAGCTGATTGCTTTAA
-AAAGATAAGAGACAAATCACCAAAAAAAAAAAAAAAAAAGATTAACACTTTTGGGTGAGA
-CAGTAGTAAGGAAATACAGTAAAAATCCAGAAGGGCTCTGTGCTCTGATGCTTCAGGAGT
-GTGTCTAAGTTCTTGCTCGCTTTAAAGAAGCTGCTACTAGAAATTATAGATCATGATTAT
-CGATGTGGTTCATACAAAAAAAAAAAAGAAAAATCCCTGGGAAACTCCAATGAGCAGGTA
-TAAACTCACgctgggcatggcggctcagcactttggaaggctcaggcaggagaatggctt
-gaactcgagtttaagaccagcctgggcaacatagtgagaccttgtctctgcaaaaaataa
-aaaaaattagccaggctgggtggcacacacctgtagtcccagctatttgagaggctgaga
-tgagaggattattagaccctgggtggttgaggttgcagtgagccatgatcatgcctgagt
-gacaaggtgaaaccctgtctcaaagaaagaaagagagaaaaGCCATTGGCTGTACACCTA
-GAGACTGGCCAGTGAATATGCATTTATAGTATGTAAGTTAAAATTAAGTGTTTAAGCTTT
-GTCTGCAGCTGTTTTTGTGATTCTCTGCTGTTCACCAGCGATCCTGATGTCACATTGGAT
-GAGAGAGCTCCAGCTGTATTTTTTTGTTGATAGTGTTAAGATTATAGCTTTAAAAAATTT
-TGTTTTCTAACATAATTAAGGCCTTTATGCTTTGCCTCTAGGTTGATTCTAAAAGTGTAA
-CACTACTAGAAAGGATTTATAGTATTTTGATTATGGAAATATTATTCACTATAGAATAAC
-TAGTGCAGTTGAAACCATATGCACTTTTATGTTTCAAAACCCTTATTGCTGGAAGAACAT
-TTTGGGGTTAAGATCCAGTCCTTTTCATTTTTTACTTTTCTTCTATTCTCCTGTATCAGA
-CTCATCTATTTTTGTTTTTCAAGAACTTTTCACGTGGAAAATGTggtaaacttttagagt
-ctttgcatgtttaaaaatttctatattttgctctgtcaattcattgatagttgactgggt
-attcaaattgtttacctgaagaattttgagagcattttctggactgcttttaaataaatt
-tcagatattattttatccttaaatactttagtatgtgtcttcaaaaaattaggacttggc
-ggggcacgatggatgatgcttgtaatcctagcactttgggaggctgaggcaggtggactg
-cttgaacccatgagttcaaaaccagcctgggcaacatagtgaaaccttgtctctacaaaa
-cattagctaggcatggtggtgcgcccatctagtcccagctacccaggaggctgaggtggg
-agggtcacctcagtccaggagattgaagctgcagtgagccaagatcatgccactacactc
-catcctgggtgacagaagtgagaccctgtctcaaaaaaaacaaaaacaaacaaaacccct
-caatactattatcacaccttagaaaaggaataagaattccttaaaatccgctaatgccct
-gtttatattcacattttcctatttcattagtgctttttacaattggtttcttcaaatcag
-gagccaaacaagatctacatgtagcatttcttactatgtcttaagtcccttttactctcc
-tctatttttatgccactagttttttttttaagaaacctggtcttttgacctctagaattt
-tccccatattctggatctatccattacctcttcatggtatgtattagaccactctagcat
-tgctacaaagaaatatctgagactgggtaatttgtaaagaaaagaggtttaattgactca
-gttctgcaggtggtgtaggaagcatggtcctgacatttgcttggcttctggggaggcctc
-agtgaacttttactgaagcgggagcaggcacttcacatggtgagagagggagcaagagag
-agagttggtggggaggtgccacactttacaacagccagatctcacgaggactcactatgg
-cgagaagtcactacagtgagcgcagcaccaggctgtgagggagctgcccctatgacccaa
-acacctcccaccaggcctcaccttcaacactgaggattacagttcaaggtaagatttggg
-cagggacaaatacccagactatcatggtgtcatttactatctcccgtttttcctgtaact
-ggtagttagagataaagtttcaattagtcagCAGTCACtttttttttttttttttttgag
-acagagtttcactctgttgcccaggctggagtgcggtggcgcaatcttggctcactgcac
-ggtccgcctcccgggttcacaccattctcctgcctcaatctcctgagtagctgggactac
-aggcgcccgccaccgtgcctggctaatttttttttttgtatttttagtagagacgggttt
-tcaccgtgttagccaggatggtctcgatctcctgacctcgtgatccacccacctcggcct
-cccaaagtgctgggattCAGCAGTCacttttaatgtgcaggaactcttcctcattttttg
-gttgcttcatgcctttccttgctttctgaatgcagtgttttcccaaatctctctgaaggt
-actagttagacttcactgttgcttattgttccataccctaaatgatctctgtttcctttg
-gggtcggttctgttttttcatcttttcatgcttttgattttccaaacatgttggaggatc
-ctcaAGAAAGTTAAAACCACTTTCTCTGGAATAATACCATGTAGATTTAAATCCTGCCTC
-Tggctgaacacagtggcttactcctgtaatcccacttcgggaggccaaggcaggaggatc
-acttgaggccaagagttcaagaccagctttggcaacatagtgagaccctgtctctacaaa
-aacttaaaaaattagccaggcatggtggcatgagcctgtggtcccagctacttgggaggc
-tgagatgggaagagcccaggaggttgatactgcagtgagccaaggtagcactactgcact
-ccagcctgggccacagaaagagagcctgtgtcttaaaaTTAAATCAAGACATACAAATga
-atcctgcctctaacagttattagttgcttagtttggcagagtcactggaacctatctgtg
-cctcacatttttatctgtaaaacagggatacagcagtacctgtctgatgggttggttgag
-aggattaaatgagttaatacacatgaagtgcattaaatagtcttagcacgtagttaacaa
-caacttctggtggttTCACTAAGgagcaggggagagaagacagaagaggttggagaggtc
-agggaggtgccagatcatggaggccctcgtgtgctgccacgagttgattctaagagtagc
-gtggagccattggagggGCCTAACTGGTGGGTTCTAATAAAGGAAGAAGCATGGGTGGGG
-CCTACCCCAGACTGGGGTTtgtgtgtgtgtgtgtgtgtgtgtgtgtgCATGGCCATGTGC
-CTGTGTGCAAATATGTACATGTCTGTAGCCGGTGGCTGAGGCTGGACCCCTGGCCAGAGC
-CCATGCTGAGCCCCTGCTGTTCTCTGCAGGCTGTGGGTGAGCGTGGAGGATGCTCAGATG
-CACACCGTCACCATCTGGCTCACAGTGCGCCCTGATATGACAGTGGCGTCTCTCAAGGAC
-ATGGTGAGTGAGGAGGCGGAGGGCGACACTGGGGTGAAGGctctccctttcactcctgct
-tcctctctctcctctggccctcccttcccactctccctctctttgccccCACCAGGTTTT
-TCTGGACTATGGCTTCCCACCAGTCTTGCAGCAGTGGGTGATTGGGCAGCGGCTGGCACG
-AGACCAGGAGACCCTGCACTCCCATGGGGTGCGGCAGAATGGGGACAGTGCCTACCTCTA
-TCTGCTGTCAGCCCGCAACACCTCCCTCAACCCTCAGGAGCTGCAGCGGGAGCGGCAGCT
-GCGGATGCTGGAAGGTGAGGCTCTGCCCTGAGCACCGCCGGACCCAGCGGGGGCCCTGGA
-CTCACTTGAGGGCATAGGGCAAGCAGGGGCAGAGCCCCTGGGTTTTTAGTCAGGGACTCA
-CCCAGAGGACCCTATCCAAGTGGGGAAGAGAGGACCTAAGACACATGGGAGGGAGCATTT
-CAGGGACCCATCATGAGAACAGCTGGCACGGGGAGGGGTGGACTCCGtccaggctccggc
-attcccagctgtgtgaccttgggcaaggttgctcctatctgctgcccagtttgctaaaat
-cataaattgggtatgacagtgatCGTGATAACTAGTGTTTATTCTTAAtttttaacttct
-gaaatgtttcagacctacagaaaagttgctaaattttacaaagtagtacataaagaattc
-ccatgtacctttcatgtgggttttaccacatgtgctttctttttttttttgagacggagt
-ctcgctctgtcgcccaggctggagtgcagtggcacaatctcggctcactgcaagctccga
-ctcccgggttcacgccattctcctgcctcagcctccggagtagctgggactacaggcgcc
-cgccaccacgcccggctaattttttatatttttagtagagacggggtttcaccgtgttag
-ccaggatggtctcgatctcctgactttgtgatccgcccgcctcggcctcccaaagtgctg
-ggattacaggcgtgagccaccacgcccaacccacatttgctttcttttatcattctcttt
-ctatataaaattattttttttctgaaccattttgagagtaagttgcagacatgatgtctc
-tttcccctaaataattcagtgtgcatttccttgaaaagaaaggtcattttcttacattac
-tgggtataacaatccaactcaggaaactaacgctgatacagtactggtatccagtctaca
-gatcttactcagattttaccagttgtcccactattgtcatttatagcaaaagacttggca
-ttctgctgtcatgtctcagtccctttcaaagagtccaggccagtttcttttttttggcgg
-gggttgggggctgatgtttcctccggagtggatcaagtcactgttttggcaggaccgcct
-cagcggtgctcttgggtccctcttggtgcatccttcaggaggcacGGAAGGGCTGGTGTT
-GTGCTGGGTTTTGAAGCTCAAAGGACATAGAAGCATTTATCGGTGGAATAGGGACCCTGA
-CCCTGGGGGAGCCAGGATGCCCACTTGGCCAGATGGAAGCTGGAGGTACCCCCAGGGAGG
-AGGGAGAGGATAGGGGGAGGGTCTGCCTGGCTGGCTCAGGGAGACCCACCCCCATGGGTG
-TGGACCAAGTGGGCCGCGTGGAACCACCACCCTTTAACCCTCCTCCACAGATCTGGGCTT
-CAAGGACCTCACGCTGCAGCCGCGGGGCCCTCTGGAGCCAGGCCCCCCAAAGCCCGGGGT
-CCCCCAGGAACCCGGACGGGGGCAGCCAGATGCAGTGCCTGAGCCCCCACCGGTAAGCTG
-TCCTTGGCCTCAGTATCCTCTTCTGTGCCCCTCCCTTGCCTCACCCTGCCCAGTCGGGCT
-CACAGCACCCTCTGCTCCCAGGTGGGCTGGCAGTGCCCCGGGTGCACCTTCATCAACAAG
-CCCACGCGGCCTGGCTGTGAGATGTGCTGCCGGGCGCGCCCCGAGGCCTACCAGGTCCCC
-GCCTCATACCAGCCCGACGAGGAGGAGCGAGCGCGCCTGGCGGGCGAGGAGGAGGCGCTG
-CGTCAGTACCAGCAGGTGGGCGGGAAAGTCCCTGGACAGACACCTGCAGACCGCACGGGG
-GAGGTGTAGGCCAGGAAGGGAGACACCTGCGCACTGCCGCGCCTCTCCGTTACTGCCTTG
-CCCCTCCCAACCATGCTGCTGGCAGTGACCCTGCACCTGGCTGTGACCCTGCACCTGGCT
-GTGACCTGCCCTCTCTCAAAGGTCACCCTGTGGCTGAGACCCGCTCCCTGGCTGTGGCGC
-ACATCCAGGTTCACATGCCCCACTCCCACGTGGGCTGTGGCTCCATCCCCAGCTTTGACA
-CACCACACGAGTATGGCTGGCCATGACCCCAGCACCCTAGCCATGACCCCAGCACCCTAG
-CCATGACCACACCTCAGCTCGGACCTCACCCCCACCCGTCTGTGACCTAAGCCTGCTCCA
-CCTCGCCGTGACCTCACCCTGGACTCTCCTACTCCTGACCTCTTCCCTCTCGGGCTGGGC
-CCACCCCTGACTTCCTGAGAGCCTGGCCTGGACCCTCGCTGCGCCCTAGGGGGATGACCC
-CCGACCCCGGTCCTACGCCTTAGCCCTACCCCGCCCCCATCGTGACACACGCACTAATGA
-CACAGACATTGATCCCCGAGTGCTCCCCATTCTGATCTCACCCCTGGCCCCACCTGCATT
-CCCCTTGGACCCGGTGCTGCCCCTGGCCACCCCACTCCTGTTCCCGTCTCAGCTCCTCGG
-CTTCGTCACTTCCCCACCCCTGACGTTGAGTGGCTCCACCAGCCCTGGCCCGGGCCCTGC
-CCTGCTACCTGACTCACCACTCAGACCCCGGCCCCCTTCCTTACCTTGCTGCCATTGCTG
-TCTCACCTGGCGCCTTCCGTGGCTACCTGGCCGGCCTCCCCTCCCTTGGCTTCCCCACCT
-CCACCTGGCCTCACTCCCAGCCCCGCCCCTCCCAACCTGCCTGCTCCTGcccatccccca
-ccccccaccccccatcccccagccccacccccatcccccacccccgtcccccatccccca
-tccctacTGGCTCCCAGCTTTGCCTGTGGCTGGTCTGACCCAGCCCTGACCACGCCCCCT
-GGCCCTTCCCCCTTCGGGGTCTGACCCGCCCCCGAGGCCCTGACCCGCCCCGTGGCCCCG
-CCCCGTGTGCCCAGCGGAAGCAGCAGCAGCAGGAGGGGAACTACCTGCAGCACGTCCAGC
-TGGACCAGAGGAGCCTGGTGCTGAACACGGAGCCCGCCGAGTGCCCCGTGTGCTACTCGG
-TGCTGGCGCCCGGCGAGGCCGTGGTGCTGCGTGAGTGTCTGCACACCTTCTGCAGGTGCG
-GCCCCCAGTCCCACCCCCGGCAATGCAGCTtaatcaaagccgccaattacgcagggctgg
-acgtgggtggggccctgtgctctgatacctcattggacgcccgcgaaaacctacgaggta
-ggctccgtctccccatgttgcggacgaggaacctgagggaaagagaggcccagcgcctta
-ccccaggcccacggctcatgagagaagcagcctagacgtgagcgcaggCGTGGGGGGAGA
-CTCCCTTCCCCTCTACCTTTCGCCGCCCGGGCTCCTGCAGCCACGCTGCTCTCAGCCTCG
-CTGTGGGCATCTGCCAGTTTCTGAGTCTCCTGTCATGGCCCCCCCACCCCTGAATGTGGG
-GAACACAGACCCGCTCACCACAGCGGACCCTTGTGGAGCCGCCCCTGGGTGacaggctcc
-gtgcctgcctcctgcagcttacattccagcagagaggctgatgagaatcggataatcgct
-ggttgatgtctttgtgaattgtgtcaaatgctacatacagtacattaagagacaacagga
-gtccttcccagagagggtggtctggaagcttccaaggaggtagccccagagcagggaccg
-gaaggcctgctgtaggtgtggggtgtgggcctggcctgttggaggagactgaggaggtct
-cttggtggctggagcagagggatgaagggggtaatcagagcaggatagagaggtgttggg
-tacgtgagcagcagtgaggagttgggatttgttctgggtaggatgggagtcactggggag
-acatggctgctgttctgagatagactctaggggccagatggatgcagggagcccagcgag
-gaggctcctggagtcacccaggtgggggatgtggggcctggaccagagaatcagagcggc
-agtatggaggcagggtggagGCCTTGGTGATGGGTTGGTGAGAGGGATGGGAAGGAAGGA
-GATATTGAGGAGAAGTCCACCTGGGGTGACTGAGTGAGGCCCCTGGGGTCAGGCCTTGCC
-ATGTGAGGGATGGAGTCCCCAGTGAAGGGGGTTCCTATGATCCTAACTCTTTTCCCCTCC
-CCTCCCCTAGGGAGTGCCTGCAGGGCACCATCCGCAACAGCCAGGAGGCGGAGGTCTCCT
-GCCCCTTCATTGACAACACCTACTCGTGCTCGGGCAAGCTGCTGGAGAGGGAGATCAAGG
-CGGTAAGGCCTCAGGGTGGGAGACATACCCCAAGTCCCAACTCCTAAGGAACTGGGCCCT
-GAGCAGGCAGCAGACATCtttcttttctttcttttttttttttggagatggggtctcact
-atgttgtccaagctggtctcaaactcctgggcttaagcgatcattcatcctcagcccccc
-agaCATTTTTCAAGAGCTTTGTCCATGTGGGGTGTTGAGACCCCAAGCAGAAAAAGAATT
-GAGGGGAGTAGCTAGTCAAGAAACCACATCTATGAAGGAaggacagcagagttgttaaga
-atcagggactcggctgggcgtggcagctcacacctgtaatcccagcactttgggaggatg
-aagtgggcagattgcttgaacccatgagttccagaccaacctgggcaacatggcaaaaaa
-tattcaaaaaatagccaggcgcgggggcatgcgcctgtagtcctagctacttgggtgggg
-tctgggatgagtgggctgaggtgggaggattgcttgagcctaggaagtaaggttgcagtg
-agctgtgattgtgccactgcactccagcctgggcaacagagtgagaccttgcctcaaaaa
-aagaaaaaaaaaattagtcagggaactctggagcctggtggcctgggtgtgtgaccacaa
-gtcagatatttaacctctctatgcctctatctcatctctgttagagtcagagttacagct
-tctatttccaggattgcaaagattacagtagaggatatgtgtatagaattcatagtagta
-cATccaggcgcagtggctcattcctgtaatcccagcgctttgggaggccaaggcgggtgg
-atcacctgaggtcgggaattcgagatcagcctgactaacatggagaaaccccatctctac
-taaaaatagaaaattagccgggtgtggtggcgcatgcctgtaatcccagctactcaggag
-gctgaggcaggggaatcgcttgaaccccggaggcggaggttgtggtgaactgagatcgcg
-ccattgcactccagcctgggcaaccagagcgaaactccgtctgaaaaTATATATATATAT
-ATTTAGAGTAGTGCTTGTCACATAGTAAGCCTTtgttgttgttagcgcttactgtgtaac
-aaatcactgcaggctcaaaacaacagtcatttattcagctcataaatctgcaagttagga
-cagttggccctctgtatctgtgggtaccacactggagaattcagcaacggtggatagaac
-atattcttacaaaaaaaattacaataaaaaacaaatttaaaaaacaatacagcataaact
-atttgtataacatttatgttatattaggtattataaataatctacagatgatttaaagtg
-tatgggaggatgttggtaggttgtatgcaaatactgcactattttatataaggggtttga
-gcatccatggatttgggtatctgcaggggtcttggaaccaattctctggataccgaggga
-tgactataatttgggctggacttacctggatggttcttctggtctgggcagggcctcgct
-gatttcacctgggcctggctggtgggtcagccgcggtggcctggtttataatggtctcat
-ctgtgatgactgggatgactggggcctccttccacttcaatgtctcacccaccagcaggc
-tgcccgggccttctcatgtcatggtggtctcaaggttccaagagcagccatggggagccc
-cagtgcatgtgtactttctaagtctgctcatttctcacttgacactgtcccattggccaa
-agcaagtcccatgctcaagcacagagtccattgggaagggaccacccaaaagtgtggaat
-cggggagacagaaacaaattggagtcaccaCTCCGCCAGTCTGTCACAGCGTTATGTGTG
-TCTGCATACGTGTGTGCTTGCCGCTGGCGCTCTTCATGAATTCGTTAGCAGGTTctctgc
-ctggctgctggtgatctcgagcaagttgtttcccttctgtgggactccatttccttatct
-gaaaagtggacagttgggcttgatTCATGGTTTTCAAACTGCTGGGAAATGACCTTCCCA
-GACTTGGGCACTGTGGGTTCCCAGGCCAAAACATGGCAGCCGAGGCCCAAATGGGAGATC
-CCCACAAAACACATACACAGACCTCCTCTTTATTTCTGTCCCCCCTGCCTCTCTCCTATG
-CCCCTATTTCTCCTGAGAATGCTCCCAACTTCACCAAGTGTTTATGGAGCCCAAGAGGTT
-CTGCCCCTGGGGAAAAGGGGGAGGCAGAAGAGGTAGAACTTTGGGAGTTCACAGCTCTGA
-TATCAGGAGCAGCCCCATTTTTCTCTGTTGTCTCTGGGTGGTTGCTGAGGCTCCTTCGCT
-CTGGCCTGGAGAGACCTCATGACCAGTCATTCCATATGTCCCCAGCACCCATAGCCATTT
-GCTTAGAGGTTTCCCTGTGGAGTCCACCCCAGCCAAGGGGCATTATGCTGGGGCCAGGTT
-CATGCCAAAGGGCTGCATGAACTTCCCTGGAGCCCACTGGAGTTGATGTGAGTCTCAGAA
-AATGGTCAAGTGTGACAGAGAGAAGGAGGCAGGGATCAGCCAAGTAATGTAGTGGAGGTT
-GTTTTTACAAAAACAGAAAAATATGCCTCACCACATAGAACCAGAGCAGAAATCAGAGAG
-AAAATCACCCACAAACCCAGGAAATCCTCCAATTGCATTTTATCTTATTTCCTTCAGTAT
-CTCTGGGCAAAttttttttttttttcctttttgagatgaagtctcactctgtcatccagg
-ctggagtgcaatggcgcgatctcagcccactgcaagctccgcctcccgggttcacgccat
-tctcctgcctcagcctcccaagtagctgggactagaggcgcacaccgccatgcccagcta
-atttttgtattttcagtacagacgagttttcaccatgttggccaggctggtcttgaactc
-ctgacctcaggtgatccacccacctcggcctcccaaagtgctaggattacaggcgtgagc
-caccgtgcccagccAGATATGATTTTTTAAGTCAACtttacttaagtatactttgcacac
-aataaaatgtactcattgtaagtatgcagtcaggtaaattttaacaaatgtaactctcgt
-aaccaccaaccactgttacatataacatAGGCATGATTTCTGCCTCATTGTAACCAGCAT
-GGATACAATCGCTTTAGCTTTTGTTATTTTGCTATAGAATTTTTCTAAAGATTATTACAA
-ATCTCAATAGCACATATACTGTTTATACCTCTTAGTTCTAGTTTCTCAGTTTGTAATACT
-CCTTCAAGGAATGTTTTGCATGGTGTAttcttttttttttttttttttgagacgaagtct
-cactctgttgcctaagctggagtacattggtgtgatcttggctcactgcaacctccacct
-cccgggttcaaacgattctcctgcctcagcctcccgagtagctgggactacaggcagatg
-ccaccacacccagctaatttttgtatttttagtagagatggggtttcactatgttggcca
-agctagtcttaaactcctgacctcgtgatgcgcccgcctcggcctcccagagtgttcaga
-ttacaggcgtgatccatcattcctggctGGTGCATCTTATATattattttcttgggataa
-agttaaagaagtgggatgggtaccaaagggtcagaaaagtttgggatggttgaaacgtta
-ttgccacattgctttctcagtgctacgtactagcttactagtttgtttaatttttatttt
-ttatttttgcgggtacatagttggtgtatatatttctggggtacatgaaatactttgata
-caggcatgcaatgcgtaataatcacatcatggagaatggggaatccatcccctcaagcat
-ttatcctttgtgttacagacaatccagttaacctctcttagttattataaaatgtacaat
-taaattattggctacagtctgttgtgctatcaaatactaggtcttactctatttttttgt
-accaatttgccatccccactcccctgccacgcctcactaccctttgcagcctctggtaag
-catccttttactgtctgtcctcattagttcagttgtttcgatttttagcacctgcaaata
-agtgagaacatgtaatgtttgtttgtctgtgcctggcttatttcatttaacataatgacc
-tccagttcttccatgttgctgtaaatggcaggattgcattcttttttgtggccgaatagt
-actccattgtatatatgtgccacgttttctttataggatactagtttaatcatgtctttc
-ccaacattgcttattatttATGTTCttttctttattgtgagaaaatagacataacattta
-ccattttaaccagtttttagtatacagttcagtggcattaagtacattcacactgttgtg
-caaccatcaccaccatccacctccagaacttttAGAAATTCCCCCCACTTTCTTTCACTT
-TCTTTTTACTTTTCTTTTCCttttttttttttttttttttttttttttagctaggatttc
-attctgtcacccaggttggagtgcagtgcatcagtcatggctcactgcatccttgacctt
-ctgggctcaagcgatcctcacaacccagcctcccaagcagctgggactacaggtgtgagc
-accacacctggttattttattttttaaaaaaattttttggtagagatgaggtctcactgt
-atttctcaggctggtctgaaactcttggcctcaaggaatcctcctgccttgactgacctc
-ccaaagtgctgggattacaagtgtaagccaccacacctggccTAAAATCCACTCTTTGAA
-TGGAGTTTTTCAACACTATGAGGATTACATGAAGAAAAGAGCCTGGGGCTGGGTTGGAGT
-TTCTGGGCTGGGGGCTTTCTGGAGGGTATTTAGTGGTCAAGGGTCATATGTCAGGTGTTC
-TGAATCCTGAGCAGCAAGGACATGGTGTGTTGGCAGCTCCTGACCCCTGAGGATTACCAG
-CGATTTCTAGACCTGGGCATCTCCATTGCTGAAAACCGCAGTGCCTTCAGCTACCATTGC
-AAGACCCCAGATTGCAAGGGATGGTGCTTCTTTGAGGATGATGTCAATGAGTTCACCTGC
-CCTGTGTGTTTCCACGTCAACTGCCTGCTCTGCAAGGTGGGGCCTGCAGGGACTCCCCCC
-ACCTAGTCACTGTCATCTTGCCTGGAGCTCACCACACTGCAGTGCGTGTTCTCCTGGGAA
-GGGAGCTGTGACACTGGCCTGCTGGTCATGACTTAGAGCTACATGTCAGTGGGAGAGTGT
-GGCTTGAGCCTGAACTGagccctggccccacagacggagtcccagccccagccccagatg
-gagcctcaaacctaggcagccctggttcacaatggagccccgaccctgggccagtctgac
-cccagtcacagactgaatcccagtcccacattgagccctgatcccatccAAGTCCATAGA
-CTTGGCCTCTGACCAAACCTGACCCTGCACTTGTCACTTAAGGTGGTCCCATATTCAGCT
-CAGACCCTGAACCGAGCTCTGACCCTGGCTTCTGACTGAATCTGTGACAGACTAAGGCCT
-GACCCTGGCCCTATACCACGTCTCCACCCGTGTCCTCAACTGAGTGCTGACCCCAAACCT
-AGACAGCCCTACCTGATCCTTCCCCCAGGCCTGTCCCCGCCGCTTCATCTCAAAAGTTGA
-AGGTGAGGAGCCGGTAAACAGGTCTGGAGCCTGGTCTCAGACTCAGCCTGAGCAAGCTCA
-GTCTGGGGTCATTGGGCCTGTAACCCCGGGCAGGCCCTTGTTAGGGATGCAGGGTCTCAC
-CCTAGGGGTATAAGGGATTTCTGTGCCCATCAGAACTTaaataagctgggtgtggcagca
-catgtcagtggtcccagctactcaggaggctgaggtaTATTTTGCTGTTAGCATAtgtga
-tgaccttgacttcacctccctggcgccaatatcctcttctgtaaaatgGCTTATGCATTA
-CAAAGTGAGGTCCTGCCAGTGACTACACCTAGAGGCATTAAGTGCCTTTGTGGACTCCTG
-CCCTGCACCTCACCTCTCCCAGCTTCTTAACCCCCTGAGGAACCTTCTTACCTTGAGTCC
-CTCACCCGCTACAGGCCATCCATGAGCAGATGAACTGCAAGGAGTATCAGGAGGACCTGG
-CCCTGCGGGCTCAGAACGATGTGGCTGCCCGGCAGACGACAGAGATGCTGAAGGTGAGGC
-TGGGACAGGGCCGAGGCCTAGGGATTTTAAGTTCTGGGATCCAGGTGGGGGCTGGGGGCT
-TCCCAGTAAGGGCTGTGCTCACACATCCCTGGAGGCTCTGACCTCCCTTCTGGCTGTCAC
-TCCCATCCGGAGGTGGGACTTAGGCCGAATGGTCATGTCAGGAAGAGCGTCTGGGTGGAG
-GGTGGAGACCACAGGAATGAAGAGGGGGTTGCTGGATGGAGCCTGGCCTGGCAGAGCCAC
-ACAGGAGAGACTCCACAGCTCTAGAGGGTCACCACCTTCTCCCTGCCATGGGGAGGGGCC
-AGGCTGGGTGACTGCCCCAGCCCCGCCCCAGGGCCAGCACCTGCCCCACTCCAGGTGATG
-CTGCAGCAGGGCGAGGCCATGCGCTGCCCCCAGTGCCAGATCGTGGTACAGAAGAAGGAC
-GGCTGCGACTGGATCCGCTGCACCGTCTGCCACACCGAGATCTGCTGGGTCACCAAGGGC
-CCACGCTGGGGCCCTGGGGTGAGTCTTTGCTCGTGGTGGTGTGGAGAGGGTGCCCTTGTG
-GGCTTTGCCTTAGAGGagggctgggaaaactacagcccatgggccatatccaacccagca
-cctgaatttgtacagctcccgaggtaagaatttttttttttttttttgaaacggagtttc
-actcttgttgcccaggctggagtgcaatagcacaatctcagctcactgcaacctctgcct
-tccgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcatgcg
-ccaccacgcccggctagttttgtatttttaggagagacggggtttctccatgttggtcag
-actggtctcaaattcccgaccgcaggtgatccacctgcctcggcctcccaaagtgctagg
-attacaggcgtgagccaccgggccgcaagaatgttctttacatctttaaatggttgaaaa
-aataccagaagatgactattttgtgacgtgaaaattacatgaaatccacgtttcagtgtc
-cgtaggtaaagtgctttggagcacagccgtgttcattcattcacatgttggctgtggttg
-cttttacactacagaggcagaggccgtatggctgcccggcccaaaatgactggccctttg
-cagaaaaggtttgcccactcctgCCCtagaggacagcaagtaaaggttcgatctggagtc
-agaggtggattggcccctggctctggcacatactgactgtgtgattaggctgcctgccac
-tcacctctgtcagccccatttcctctgtgaaatggagatgatagctgggcttatctcagg
-cttgttgtcagaatcaagtggaaaaattgcaagagaagtgcttagagagcctgtcacttg
-gtgagcacccttgcagatggtagctgtcgttattAGGGGTGTGCTCTGGAATTGGGGGCC
-TGTTGCTACGTTCAGGTAGACTTTCAGACAGGTGGAGGCAGAGGAAACTGCCCTCTCGCA
-TGCTGACATGTCTAGAATATGCAGAGTGGTCAGATCCTCTCCCTGGCCTGTTCCCGGATC
-TAGGCGTGGGTAGACTGAGTGCTGTGGGAGCCCAGAAAAGGCCTCAGTGACTCTCCATCA
-GGTAGCTGAGGCTGACCAGGCCATTCTTGCAGGAGGACCTGCAGAGGCAAAGGCCCGGGG
-TGGGAGAGCGCTCGGCTGTGGGGGCAGTCTCTGCACTGCGCTGACATTCTCTTCTCTTCC
-TCCCATCCTCTAGGGCCCAGGAGACACCAGCGGGGGCTGCCGCTGCAGGGTAAATGGGAT
-TCCTTGCCACCCAAGCTGTCAGAACTGCCACTGAGCTAAAGATGGTGGGGCCACATGCTG
-ACCCAGCCCCACATCCACATTCTGTTAGAATGTAGCTCAGGGAGCTTCGTGGACGGCCTT
-GCTTGCTGTAGCGTTGTAGGGGCCCTGCCTGCACTGCGGTTGTCCACGGTCACATCTGCC
-CCAGTGCCTTTGTCCTTCCCTTGGGGCTTGCCGGCCAGACTTCTCTCCCCTGCGGCTCCC
-ACCTCTGCCTGACCCCAGCCTTAAACATAGCCCCTGGCCAGAGGCCTTGCTGGGTGGAGC
-CTCTGTGTGACTCCATACTCCTCCCACCACAACACTCATCTGTCAAACACCAAGCACTCT
-CAGCCTCCCCGCCTTCAGCTGTCAGCTTTCTGGGGCTAACTTCTCTGCCTTTGTGGTTGG
-AGGCCTGAGGCCTCTTGGAACTCTTGCTAACCTGTTCAGAGCCAGGAAGGAGACTGCACA
-GTTTTGAAAGCACAGCCCGTCAGGTCCGGCTCTGCGTCTCCCTCTCTGCAGCCTGTGTAA
-GCTATTATAATTAAAATGGTTTTCCGGGAAGGGATGAGTGTGATGTCCTTGAGAGGAAAT
-GAATGTCCTGGCCTGGGACTCTACACACAGGCAGGATCCTGAGGTCTCTGGGAACTGCAT
-CAGAAAGTTGACTTGTCAGTCCATCTGTGGTAGAATGAGGCTGTGACTGAGCACTGGGAC
-CTTTCTACCAGATGTGGACCCCATGCCCAGCCTCAGGGGCAAGGATGCTCTTGGGTCACC
-GTCAGCCAGGACAGGTGGAGTGTGCAGTGTGTCAAGTCTGCAGAGAAGGATGGGCTTAGG
-GGCGGGAGGGGAAGTCTTGCCACTCCTGCTCCCTTTTGACCTCTCAGCAGGCATCTAGGG
-TTGGCAGGTAGATAGTTCAAGAAGGAACGAAGCTGCTGCAGTTGAGGGGTGGGGTTGTCC
-ATCCTATTTTCTCGTCTCAAGCAAGATGGCACAGTATCGATTCAGCAGTATTTACTAGAA
-CCCACTCTGTGCTGGTCGGAGGTTACTAAGACAGGGTCCTGGGATGTTCATTCTCTAAGT
-CTTTCCTCCGCTCTGTGACCCACCCTCCTTCCCCTTTTGAGATCTGGTATTTGATGCCCA
-ACACATTGTCCACGCTGTGACGTGACCATCATCATAGCAGGCAGAGGGCGCCTCTGCTGC
-TGAAGGCCTGTGATTTTGTGGGGAAGGGCCTGTTCTAGCAACTGGAAAGGCACTGCCACC
-TGCCGTTGGATGCCAGGACTCAAGAGCTGGCCCCAGTCACTGTGCGCAGAGCTGTCTGAG
-AATGTGTGAGTGGACTGGGTCCTTCGGCACTGCCTGCATTGGCTCAGGGCAGTCAACCGT
-CGCAGAGGATGAGGGGCACACTCAGGCAGCCTCCCCGGCCCTGGAGGCAGAAAGGCCCAG
-GCAGAACCACTGACTGGGAGGAAACAGAAAAAGCAGAGGAGAGCCAGGCTGCAGGCGTGT
-GGATGGGACCAGCTCAGGCAGACGCTGTCTCATACCCACTCTCCCCTCTCTTGCCAGGGC
-CTGGCCTGGTGTCTCTCAGGAGCCTGGGCATGAGACAAAAGCAGAGATTGTTCTCTTGTG
-GTACCACAGGCTGTAACCAgtccacccagtgttgttttagaaatttaaatcggttgccca
-tctttttaaattggcaacatcgtttaccacattaaaatctagatgccctgcttctcttga
-aaatgtcaaagcttggtaatgccaggtcctcacttctacctggggggaatggagtcacag
-agatgtcaaatctcttcatggggtgtacaccctccagtttgccacagtcctcaccACCCC
-AGGACTCACGCCGAGGCCTTTCCAGTGCCCTTGCACCATCCTTTTTCTCGTAAGAGGAAG
-ATGAAGTGGGGCTCTACGCGCGGCGTATCACAGGTGAGGGCGAGACCAGCAGAGAGGGCT
-GTGCTGGCTGTGGCTTTGCTCGGCCTGCCCCATCCATGCTGCAGTGGTGCGGAGGAGCAG
-GGAGCTGTGTAGGGCCAACCCCGGTTCCTGCCTCAGCTCCACCCGCCTTGCACCTGCAAG
-TGAAAGGTCTTAAGACGAGCAGGCCCAGGGCACCCTCTACTGCAGGGTCAGGTGGAGGTG
-CCTCCACCTCCCAAGGCTCACCCATGCCAGGGGCCCAGAACTTGAGAGGCCAGCACCAAC
-TCTCCAGGGCCGAACGAAAACCAAACCCCAGGGCTTTGGACTCAAACCATCGAGAGGAAG
-CAGCAAGAGGTCCCAAAGGTACTTGAGTGACACAATGATCATCATTCTCTCCTCAGGGGC
-AGGACAGGGGCAGGGGAAGGTGAGTGGAAGCCCATTGCTCAGATAAAGAGCAGCTGCCAC
-GGAGGGTAGCCCGTCGGCCTATGCCGGCGCTCACTGGTGTCTTCCTCTAGTGCTTGGGGC
-TGGCATGGAATCTGCTCAAATGCAGGCAGCTGAAGGTGAGCCCGCAGCCTGGTGATCCCA
-AGTGCCAACCATGAGGAAGTCTGGAGAAAAGACCAGGGAGCAGGGGCCCTCGTGAGGAGC
-AGGAATTGGCAGCAGGGGCCACCAGCAGAACACCAGAGGGGACAGTGGCAGGGGGAGGAA
-GATACAGCCAGGCTGGGTCTCAGCCCCAGCTGAGGGTCTCACCTCTTAGCTGGTGAAGGC
-TCCGGCCTGTTCCTGCTTTCGGTCACCACTTCATCCCTGGGTGATCGTGGGCCCGGTGCA
-GGGCTGGCTACAAGTGTTTGTTGATTGGTAACTGCTCATGAAAATGGCAACAGCACTAGC
-ACAGCTTCACAAATAGAAACACATTTCACCAACACCCTTGCAGGAAGCCCTCCAGGAGGG
-CCAAGACCATCCCTGCTTTACTGTTATGGACGTGAGCCTCCGAGAGGCAGTGACTTAGAT
-GCTCACCCAGCCAGGAAGGAAGGAACACACTCGACCCTCAGTCTAAGACCCCATCAGGCC
-ACTAATAATTCTCCCTCCAAACCCAGCTCAGGTCAAGGCCTATCTTCACCCCCAAATCAT
-CCCTAAGGCAGCCTCAACTCTCCACAGCACTACAGCCATCCTGCCCGGCCCCAGTGCTCC
-ACAGACCCTAAACCCGAGCCCTCCCGGGCTTTGTTGGCCCCAAACCACCTACACTTGTTA
-CGTGTTATTTTTACACTGGCGTTTCCCCTCAGCCTTGCATACTGTGTGGTGTTGTCTGAC
-ACCACTTTTCCAGCTCtctgacaccaactggggctagtgtcaggttccacagattaaagg
-gctcagtcccacacttccgatggagtcacagatggggtgcccaggctacccacacttcct
-gggctacccacacttcctgggctacccacacttcctggccaactacacattcaggggttc
-ccatgactccaccccctcaggttcaataatttgcctgagtgactcagaactgaagatcac
-cctgccctgacgcttcctggtgtggtgtcctcaaggatgcagtgtgggcaggaacagcca
-cgcttgagatgaacagggttagggatgggagCGACTGGCAGCCACTGCAATCTCAAGTTT
-TGGGGttttttttgttttttttttgagacggagttttgctctgttgcccaggctggagtg
-caggggtgcagtcttggctcactgcaacctccgcctcccaagttcaagtaattctcctgc
-ctcagcctcccgagtagctgggattacaggcacccgccatcatgcccggctaatttttgt
-attttagtagagacggggtttcaccatgttggccaggctggtctcgaactcctgacctca
-ggtgatccacctgcctcggcctcccaaagtgctggaattataggcgtgagccaccgcgcc
-cagccCTGAATCTCAAGTTTGTAAAGTGCTCCACCTCTGTCACTCCAACTCCCAGGAGTC
-ACTGCTtgggattgaaagtttccgccctcgaatcacctggtctttctggtgcaggagcaa
-ccccgaggcaatctaggggccctgctctaacgaattcattagcatgaactcaaatgggct
-ggaaaggggttatgaataacaaaagacactcaccactcacgaaattccaagggttgtagg
-agacccgtgttaggaacccaggagaaagaccaaatatttcttagtatcccacaCATACCC
-TTCCTTTAGTTCTCCAATTATCATAATTCTATTCATCCTTCACATTCCACCCTCACCTTC
-TATGAAAGTGCCCTGAATTTGCTGCAGGATAGATTGCTCCTGGAGTGCAGCTCTGGTGTG
-AGCTTTCAGAGGCAGCGCAGTGCCCTGGGCAGCCTGCGTAATCCACGACTGTCAGATCAA
-AGGGCAGTGTGACCCTGGCCCACAGTGGCAGGAGCTGAGTGCCACTGGCTTGGCCCCGGG
-AACCTGCGCATCTCCCCTCTGAGCCAAGGAAACAAACAACACAGACAACAGTGTCTCCCC
-GATGGCCCCATCCCCAGGGTGGAGGCCCTGCACCGGGCACTGCTCTGCGCGCGCGCTCCC
-CAGCAGCCAGCAGTGTCTGGAGGATACTGGAAAGCTTGGCAAGAGTAGGCTGAGCAGCTC
-CTCTGTGGACAGAAAGGGCATGTGGAGAAGCGGCACATCAAGCTCTGGTTAGGATCCAAA
-ACCAAATGCCAGCTCCTAGGATCCCCAGACCAGGGTGTGAAACACACCAAGAGCACCCCA
-GACCCGCACCAGTTGTGTCGACTGTGACAGTACCCAGAGTGGAAAAAACATGAActcaaa
-ctgtgttttcctccactgctctctcaataccaacagacatctgtggccaaatgtgttggg
-gatttctcccctgacaccaagcaagcaagcaattctgcagcctacatcagctgggtatcc
-tccaattcaattcagtgctcaccctacctatagtatctggaaatggaatccacaggttca
-aggctctgtcccacaagaccgccgcctctgccacaacattggactgaccaccctctttgg
-gtggcatgatttgccaagagtggctcacagaactcagggaaacttatgtttaccagttta
-ttacaaacattattagaaaaggatacaaataagtaaacagccagatgaagatacacacag
-ggtgaggtctggacgggtcctgggcaaatgctggagcttctgtccccatggagtgggggt
-gcgccaccctcttggcacatggacaagttctcgttcccctccctccacatgttcagctct
-tcagaagctcccgtgttcctgggccttttatggagacgtcattggataggcatggctgaa
-gcatggcagctgtgttgagatgaaactggacaaaaagcataaggtctaaacccagcaagg
-cctgtctgtccagatgcttcttggcctctctgtgcagcgttcctccttccgggtatgggg
-cagcaccctctctggaatgagggtcttatgagctacagtcagattaaagtctggtgttga
-gcaagtgaaatggggcaggagaaggtcacagacagagattccgttttctgaggcctgcag
-tgtcccaacattataacaaagggttatgggagtgatgaaccaggaactgtggacaaaaac
-atctacacacgtataaaatatcacaGTGCCCTGGGCTGCAGCTGGAGTGTGTGGGTCATA
-ATtcttgcagatgaaacagaaacagcaagactgtaggtactgcccaaggtctcctagcca
-gtcaaggctgaccaggagtcCACAGACCATGGCACAGTTCTGGGCCTGACATGGAAGGTG
-GGAGCATCCAGATCAGAGACCATTCCCACTGAGCGGTGGCCAAGGACGGAATGACAGAAG
-AGGTGATTAGTAACCACATATGGCTGTTTATTTGATACAGGGCTCTGTACAAAATATTTA
-CACATATTCTTTACAGAATAAGTAAACCACCTGAAGGTAATTAGATAATGCTTTCTTCTC
-AATGACAGGGAGAATCCTGGTGTCAGCAAAGTTAGAAAACAGATAAACATTCTCCTTCCG
-AGGCCACAACTCAAGCAAATGCCACTTGCTTCCTAGGATCTGAAAAGCTGTGGCCTTGGG
-ACCCTGGTCACATGCACCTCCTTTCCTCAACCCCATCAATTCCTTCAGTATTTACAAACA
-GGCTTGAGTACTTGTGGAAGGAGGGGCAGCTGGTGCCGCCCACTGAGAGGATGACAAGAG
-GGCCAGCTTGCTTTGGGAGAGCACTGGGAATATCTGCCGCATCATCACCTCTGGAAGAAT
-TTCCTTTGCCCTGATGAATACACCACTGTCTAAATTAATCCATCGACATCACACTTACCC
-CACAGTGGGGCTCCTGAGCCATGGACAATGATCCATCCCTTTGAGCTTTTTTTGGTTTTA
-AAGTGCGTAGTGGTggctgggcgtggtggctcacacctgtaatcccagcactttgggagg
-acgagacgggcagatcacctgaggtcaggagttcgagaccagcctggccaacgtggcgaa
-accccatctctactaaaaatacaaaaattagtcaggcgtggtagcaggtgcctgtagtcc
-cagctactcgggaggctgaggcagcgagaattgcctgaacttgggaggcggaggttgcag
-tgagctgagactgcaccactgcactccagcctgggcaacagagtgagactccatctcaga
-aaaaagaaaataataataaaataaaTAAAAATAAAGTGCTTAGTGTAACTCAGCGGACAG
-GGCTCCCAGCTGCTCTGGCACGTGGGACACCCTCCACCCTGCACACAACAGGCATGCAAA
-GAGGACTGGATATGGTGGGGTAGAGTGCTTCTGGTGTGTTCACTTTAAGAAAACATCTGC
-CAAGAGAGAAGAGTGCCCAGGAAAGACCAGGAAAATACAAGTACATGGCTGCTTCATACC
-ATATACCCCAATTCTTTAAAGCAGCAAAAGGCACTTTTTTTTTCAGGCCAGAGTGAATCT
-AAAACAAACCTGGCTTTGCTTACAGGGAAGCTGTCCCAGAAGGACTGAGTGATGCCTCTT
-GTTCCCTAAGGTCTGGAGAGTCTTTGCAAGTTTCCAACGACATTTCCAACCAGGTGGGAG
-AGACCAGCAGTTGACGAGTCAAGTCAGACCCAAAAAACGACGCCAAGGTAGTGAGTGGGT
-GCCTATTTGGGAGTAGGATGATTTGAGGAAAACAGGAAGAAAAACCGGTCAGAAAGTGGC
-ACTTTGGAAGTGGAAAGCTGTTTGCAAATAGCAACTCTGGCTAAAGCGAAAATGTTAATC
-AAGTAGAAAGTAAAATTCAGGATCTTAGAAGCTCATCCTTCTGATGAGAACTATTTTTTT
-TTCCGTGAAGGAACTATTATTACTTTAAAAGTGAGGGTAATTTACATATGGGGTGTATAT
-ATTCTAAAAATAGTAATAAAAGTACCTTTTATAAGCAATGTTGTGTGGCTTGTAGAAGAA
-AGCAGGGAGGAAAAAAAGGCAGGCAAAACTAGTCTAGGTCTAGGCCCTAAAAATGAGCTT
-CCTTCCCACTTGACTGGAAACGCCCATGTGATTTCTAGGCTGAAAATAGGTAGGATTTAA
-CGAGTAACCTAGTTCCCTTCTGTCTCTGATTTCTGATCAGCTGATGGAGCTGCTAGTAAG
-AGGGGCCGATCATGCTCCCAGACGAGTCCTTTGGCCTCTTGCTCTCCATCCCAAGCCTGA
-CTCCTTCAGCAGCAGCCCCCTCCTTCTGTGTCCATCTGATGCAGGCAAGCAGGAGCAGTA
-AGAGGGCATCCCATGTTCCAGTTCACCTTCTATGGGGTGACTAGGAGGTTCCCGGTAACT
-AGGGCAGCCCAGGCCCAGCAGGTTGCAAAAGCAGCTGCAAGCTTCAGAAACCCACTTCCT
-CCAACACCAGGGAGGTGGCAGAGAGCCCATCCAAAAGCCCACTGGGAGAGGCATAAGATT
-CTGTGCCAGGCCCCCAGGTCCCCTCTGTGTCAGGTAGGCTCTGCTACTGGCCTCTGAAGT
-AAAGGCAAACACAAACGGGCAGGGCAGGGTGGCAGGAATAAAAAACTCTGGACAGAAACC
-CTTTTAATAAAGGAAATTCCACCCCTCCCAATCCTTCCATGGAAGGGTGAGACCTTAATG
-TGATGTAAGAGGAAGGTCTTCTCTGGCTTTCAGGGAAACAGCTGCAGCTGAAACTTAGGG
-GCCCATTCCAGGGCACTTTTCACCACAGCCAGTGCAGCCGCTCCAAGTGCCACTGTCAGC
-CCCATCACTGCCAATTTCACAAAGCGGTTGGTCCTTGGCTTGGTCAGGACATCTTTTGTT
-CGATCTTCAGGCCGCAGAAGTCCCCGAAACCGCTGCCGCAGCACCATATCAGGCCTCTGC
-TGGGCTGATGCCAGCTCAAAGTCTTTGAAAGTAGAGGCTGCCGTCCTGCAGGGGAAAGAG
-ACGGAAGGAAGGAAGTGGTATGAAAGAGGAGGAGGAAAGCAAAACTACACCACATAGGCT
-GCGGGCAGAGCCTTTCATTGCTGGGAAAGCTCTTTATGATAAAGACCCATATGTCTACAG
-TGGGGATTCCACTGGCCTAAGCTCAGATCTCTGGAAACATGCCCCAACCCTATCCCACCA
-GACACAAACCTTCCCTCGCTTCTGCTCATTTACAGCCACCCCCATTCAACCAGTGTCCCA
-GCCTTGCTCACCTCTCAGCTTGCTGTTGGGCAGCGGCCTCCCGAGCAAGTTCGGATGGGG
-GAAACTGAACAAAAAGGTCTCCTGCTCTGCTGATCAGTGTCTCATAGGGCAAGTCCTGAG
-GGATCTGGGACAACAGGTGGTGGACCGAGGCCATGTCACAGTCACAGTCCAGGACTTCCT
-GCTCGCGATACAACACAATCTGTGGGGAGGTAGTAAAGCCTTGCAGTCAGAGGCCAGACA
-CACAGGGCCTGGGCCACCTGCACTCCATTATCCTTGCAGATGAATTTAAACTGGTAACAG
-ACAGGACTCAGCCCAAATGTTGAGCAAACTCTTGTATCCATCAAGGAAGTAATAACATAT
-ATACGCTCAGTGCTACTCCTACTCTCTGGCCCTTCCTGCAAACTTCCACCACATGACATG
-AAAGGCTGACCAGTTACAATCTAAGTCCTTCGGGCATGCTGGGCTGCTCAGGTGTCCCTT
-TAAGTCTTGAAAGAAATGAAGGAGATTCTTTTAGGAGAAAGTAGGAGAATTATTGGGAGA
-TTCCTGGAGCTCCAGCATAGAAGAAATGGTTCAAAACAGTAGAAAGAACAGTCTTGCTCC
-CTTTAAGCATCTTCCTTCTGACTGTTGGTCCACAAATCCACAGATGCTCAAGGGACCAGT
-GGTCATTGAAGGACTTCCCTGAATTCCCATCTCCACCCCATCCCTCAAGACCCTTCTACT
-AACTGAAGCCCCTACCCTCCACCGCAAGCCGCCTCCCTTGTCTGTCATGACACCAGATCT
-CTTCTTTTCTTAAATCTGGAGTTGACAGCTTACGCTACTATTTCCCTAATTGTGTTCATC
-AGCTGAACATATATTCCAGACAATGTCAACAGGAACCCTGACAattcacaatgcagatta
-gcattttaaaggttcagaagtgtcatgcagcaaaaaaaatctgattttgtttatacccag
-catttcccaacttactATTTTTTGTGTGTGACACCCCCATTAATACTGCACAGAATGGTG
-TCCAGGGACACCAGCCTGGGAAGTGCTGTCTTTTGCATCTTTCCATAATCCCCAGGTTTC
-CCTTCAGGGAAAATGACCACAGTGGGATGGGTGATGGTGAACCCAGCTGCTGGCTCGTGG
-CCTGTACCTACCACGGCTGCAAAGTAAATCGGCATCAGTGGGTGGCAGGCCAGGAAGAAG
-TCATATAACCGCACGACGTGCCTGAAGTCAGACAGGACATGCCCAAACCAGGTGATGAGC
-CAGCTGAGGGCAAAGATGGTCCCTACCTCAGCACTAGAAACAAAGGAAAGGCAGGTGTCA
-GGTCCTGTGGGCCATCCCTTCCCTCTCTCTGGGCCTTATAGCGCTGGTGAGAAGGAAGCA
-TTTAGGAATAAGATTTCTGGAAAATTCAGTTACCTAGGAATTCAGCATCTTCTCCTTACA
-AAATATTTAATACAAAGTCTTTAAGGTGTACCACAACACTAACACCACAACAGGGTCCTG
-GCTGCTTTATCTCACTGGGTGCTCGCCTACTGGCCAACAAATGTCAACTACAGGAACGAG
-AAGCAGTTGTTTTCAGAGAACTACGCCATGATTCTCCTTCTGACTAAGTCTTACCCTTCT
-GGGGGGCACAGGTACATATTCCCAAGCCTGAAAACATGACTGCATTAATTTTTCTGTTAA
-CATGAGACAACTGAAATATCTTAAGATGTAGCTgccagacacggtgagtcacgcctataa
-tctcagcactttgggaggccaaagcgggcggatcacctgacatcgggagctcgagaccag
-cctgaccaacatggagaaaccctgtctctactaaaaatacaaaattagccgagcgtggtg
-gcgcatgcctgtaatcccagctacttgaggctgaggcagaagaatcgcttgaacccggaa
-gatagaggttgcagtgagccaagatcatgccattgcactccagcctgggcaacaagagaa
-aatactccatctcaaaaaaaaagaaGGCATAGCCATTACCttttaaaaaattttaaaaaa
-aGAGGCATTGGCCAAGAACACATTTCCAACTAAACAGAGAAGAAACAAAACATCACATGG
-GATTTGCAAAAAAATATTTCTTCTCTTTGGTACTTGGGAAATAAAACAACCCATTGTTGG
-CCTTCCCCTTCTCGCCACTGGATCCCACAGGACTTTGTGTTTCTCTTGTGGCAATAACCT
-CAACATCTTACCTTGGCATACATACCTTATCCACCTCTCCCCACTAGATGTAAACTCAAG
-GGATGGGCTATGTCCCCCAAAGAGCACAGTCCCCAAAAATGCTCCAAGAACTGAATTACC
-CAGATTGCTGGTGACTGGAACAACTGGGGAGAACTTAACAAATCCACCCAAGACAATGAG
-GAAACTGCGCTCGGCTTGTGAGGAGTGTTTCAGGTGTGGGGGGGTGTGGGCGTGTGTATG
-CATGCACACAGAAATGCAGACACATATGTACCTCTGCATGAAGTCATGGAGCTCTGGATT
-CACCTGGTCAATGATGGGCATCAGATAGTTTAATATATGCTTGGTGTTGTCCATTGTTGG
-ATCCATAAAATCCCTGGAGGGAGACAATTCAATAAGCCTGGTTACCAAACACTTAGATCA
-GGGCTCAGGGTGGCGAGGGCTCAAACTCCTAAAAAAGCTGACCAGAAAACAGGCCAGTGA
-GTTATCCCCAGGACGGCTGAGGAGTGATGCCCGTCGTCTTGTGTTCCTCTCTACTGGTAC
-CTGAGGTGGTGGGTAGATAATTTTTCTACCAGGGATGTTGCCAGCCTCTCGCCTACCACC
-AGCAGAAATGTGACCACAATGTCATGGTAGCCCTGGTAGTAGTGCAGCTGAGGGTTGCGC
-TCCAAGATGAGGAGGATGATGTCAATCAGTTCTTCCTGGAGCCCTTCTCTCTGTTCCTCT
-GGCATGCCTGGGGACAGGAACAGAGATGCCTTTGAACATACCAAGCAGCCTAGTTAACAA
-GGAGGTCGAAGAAGGCCAGCAATGAATTTTCAGAGAAAAAAGGAAAATGAATTACAAATA
-ATTTGGCAACGCATATCAAGATCCACTGTTGATACCACCTGGCATACAGGAAAAGGCAGC
-TGCtagctttccagtaggggaagctgcagatgccaccctaaccaagttgctgcagttaat
-actgctgggacacagtatttaactgcagaatttcaactatgggagccacagacggcctct
-gcctcccgaggtgatgcactgacagagctcagcatcatgtctgcaggatttctatcaaca
-gcgcacagacctcaatctcacaatgaagaaatacccaatatccccaaaggaagagaaatt
-taactctcatacaatacaaaggaactgttccagattaaaaatggctaaagatataggaca
-acagcatgagaaacgcataaatctatatttccttttccagtgaagcacattactcgaaga
-aatggtgaaatgtgaataaaatctgtggattaattagttaactatttttcagtgttgtta
-ctgatgttgctcagtgtactgtgattacatgagagccttatatttaggaaatatgtcctg
-aaacacttggggtaaaaagatgtcatgtttgcaacttactcttaaatagttcagagaaaa
-agtgtatgtctatgtgtaaagcgaaggaaagacagaaagcagctaaaaaagcaaatgtag
-gccaggcgcggtggctcacgcctgtaatcccagcactttgggaggcagaggcaggtggat
-cacgaggtcaggagatcgagaccatcctggctaatatggtgaaaaaccccgtctctaata
-aaaaatacaaaaaattagctgggcgtggtggcaggcgcctgtagtcccagctacttggga
-ggctgaggcaggagaatggcatgaacccaggaaccagagcttgcagtgagctgagatcgt
-gccactgcactgcagcccgggcgagagagcaagactccgtctccaagaaaaaaaaagcaa
-atgtagtaaaatgtgaaaacaaaaggaaatctgggtaaaaggtatctggggaattctttg
-tcctatttttacaacctttcagtaagtatgaaattatataaaaataaaaaAATTTTAAAG
-TTACACGGTCCCCTTTAAACCAAAGCAAACGTTACAGGAAAAACTGATCCTCTTGATCCA
-AAGATGTATTATAGCTGGAAATAGGGAAGCCTGTCTCAGGAGTTCTTTCAGGGAGTTCTT
-TTACTGCTGGAGCTAGTGCTGCCAGCAGTAAAAATGCCTTGGCCTTATGAGCCAGGTTAG
-AAGAATGGCACATGCACAGCTTCTCCACACCATTAGCTTTCAGTTACAAACACATACTCA
-GAGAGAGAAAGCAGCTAATGTAAGGGCCCAAACTAAACCGGACAAAGGATTGCAGGTAAG
-AGCAAAACTCACCTCTTGCCCATATTTACCCCACCCCTTCTCAAATAAAAAGCATACCCT
-AAAAGATAAATAAGGAAACGAAGCAAACCCAGGGCTGCTGATAGGTGAAGCAGTGAAAGG
-AGTGAGAGTAAAAATTAAACCCTGTGTGAATTTTCAGCAGAAAAGCAGTGAGCCAAGCCC
-AGAAGACCATGAATGGAAAAAGAATATGAAGCCACACTGTAAGTTCAGCCTACAGAAAGC
-GTATCACAGATATTACATCAATGGAAGAGGAATAAAGGGTTCAGAGGGAAAACAGGTTAC
-CTAGGAAAAAATGGGggtggctcttgcctgtaatcccagcactttgggaggctgaggtac
-gtgcatcacctgaggtcaggagttcgagagcagcctggccaacatggtgaaaccccatct
-ctattaaaaacacacacacacaaaattagctgggcgtggtggcgggcacctgtaatccca
-gctacttgggaggctgaggcaggagaactgcctgaacctgggaggcggaggttgtagtga
-gctgagacagtgccattgcactccagcctgcaacaagagtgaaactctgtctttaaaaaa
-aaaaaaaaaaGGGAGGCATCTGTCCTATATGATCTCATCCAAACCAGCAGGCTAGGAAAA
-GGGAATGGACCGTGGGCATGTGCTTTTATCAAAACCACGCTGGCAGGCTACTGCTACCTG
-GGTATTGCAAGAATCTGTCCAGGGAGCAAGAATGCCAGCAGGAAAGCAGCCCCTTCAACA
-ACAAAAGCCAGGCCAGAGCACAGTGCAGAAGAGGGAGGCAGCCAGCTTAGAGGCTCCTGT
-TCCCTTTAGCAATTCTCCTCTCTTCATGACCTAAAGGTGGAGTTGCCAGAGGAAGAAAAA
-TAGGTCATCCATGTGAGGTTTGTTGCCCAGTTCCCTTCACTGTGAAAATTGAGACAACGG
-TCCTTCTTTTCTTTCTTCCTGAAATAAAGAGGTAATTTTAGGAATACATTCTTTtttgtt
-tgtttgttttgtttttatttatttatttttttatctattGCTGCTTAATTTGTTAATTAA
-GGAATATACTCTTACACAAACAGGGAATGGCCTCTCTTCCCTCTAAGGAATCTTACATAT
-GTATGCGCAAGGTACCATCGTTTTTAAACCTAATTAAGATATTACTCATTCTTGTTGGTG
-CCCAATTCCACACCAATCTGCTCTTTAATGCCAGACTGATGGCTCTAACAATCCTTATTA
-ACTCCTTTTTGTGGCTTCAAGGAAAAACAAAAACCTCTTCTCTCATTCACCACCTCTAGG
-CCAGGAGAAATTATTTTTGGTTCAGGCTTTCACAGTGGGGGTCTGAAAGTGACCAGTCAA
-GAAAAGGATGACTCAGCAAAAGGAGAGCTCTGAAGGTCCCTGAGGCGGCAGGGTCCAGCA
-TATTAGGTCACATGGTATGACCTGGAACAGATACAGTCTTTCCAAATGTGGCAGGACCGG
-GAGAGCTTCTCACCAGGAGGGAACCGCCGCAATGACCGCCGGACGTCCAGCAACACTTGT
-TGGTAGTCCTTGCTCATCTGCCGTAGGTTCTTCCCTATTGAAGGAAAAGGCACGTTATTG
-CAGGAATGCCTGAGAAGCCAGACCAGAAGCAAAACATTCTGGGATGACACAAAAGGCCTA
-GAGGGCACATGTCAGCTTCTCCTGAAGAGGATGATATGACTCAAGATACAACATTTGGCA
-GGGAATCCCTAGTTTGGTTCCAAACATTATGTTTCCTGCAAGTCACAATGACCCTAAGAG
-AAGGGAGCACAGACTGCCCAGGAGACAATACAGCAGGGTGGGAAGGAGAGCAAAGACGTA
-AGGAGGCCAGGCGCCTCGTGCAGAAGGCCACTGTGCATCACTGGGAACTGCTCTGAATTT
-CAAAGTCCACAGCTACAAAATGAGGATATTCCAAGGATCAAATAAAATCATGAATGTGGG
-AACAACAGACCACTGAAAAAAACCCTAACGCCTATAAAGTTGTGGGAGCACTAAGCTGTT
-TAGAAAGGTATATTGAGACTCACATAAAGAACCACCTAACAACTCTTGACCCAGCAATTC
-TAAAACTAAAGAGCTGCAAAGAGGAGACAGTCCTTGTGTTCAGCTGCTAAGTCCAATACA
-GCATGAAAGGAGGCAGTCTCTAGCCATTATACATATAACAAGTGTACATTTCCTCCAACC
-AAACCAAGTGCTGTATAATAAGCGTACATTTCTCTCACAACCCAAATCCAAAGCTAGTAA
-GGCTGGGCAACACTTCCTCACACGTAGGCTTCACGGTATAAAAAGATGAGGGAAGTTTGG
-AACCTGATAGAAGAACATCATCTCAGGATTCAGGGTGTGAACATGGCACTGCCTTAGCCT
-TCCAACAAAAAGCTGACTGCTCTGAAGCAGCCAATTCCAAGGATAATAACAAGTGGCAAC
-TCAACACCTACTGGGTGACATCATGACGCTGTGAACTTTTTGGTGGCAGAAGTCCTGTTT
-CAATCATCTCCAGTACCTGGCAATCATAGCACAACTAATATTTGCCAACTGAAAGAATCC
-TCAGCACTTGGCATTTTGCCATGATGGCAGGAAAGCTACAAGGTGAGTGCACTGAGTGAA
-TGAGCAGCAGAGTGGATTCACTGTTCTACAGGACTTTTACTATTTTGAACTTCATTCCAA
-GGAACTCTTTTCACCACATGGGCCTTGCACATTAGTTAGGTAACTCTTTTCACAGAATTA
-CAGGATTTTAGAACTCCAAAGGATTTCAGTATTTCCCAATAAAAAGAGGGTGttttcttt
-ttttttgagtatctcactctgtcgcccaggctggagtatactggcgcaatctcggctcat
-tgcaacttccgcctcctcggttcaagcgattctcctgcctcagcttccctagtagctgga
-attacaggtgtgtgccaccatactcagctaatttttgtatttttagtagagatggggttt
-caccatgttggccgggctggtctcgaactcctgacctcaagtgattcacctgcctcagcc
-tcccaaaatgctaggattacaggcgtgagccactgtgcccggACAAAAGAGGGTGTTTTT
-GTGTGTGTTTAAttttactttacttttagagattggatcttgccatgttgcccaggctgg
-cctcaaactcctgggctcaagtaatcctgcctcatcctcccaagcagctaagactacagc
-cgtgcaccaccatgtctggctagtttttaaatttttgtagagacagggtttcgcaatgtt
-gcccatgctggcctcaaacttccagtctcaagtgaccctcctgcctcagcctccgaaagt
-gctggaattacaggtgtgagtcacctcgcccagccACAAAATACGCAttttttttttttt
-tttttttttttgagacggagtctcactctgtcacccaggctggaggacagtggtgcaatc
-tctgctcactgcaacctccaccttccaggttcaagcaattctctgctgcagcctcctgcg
-tagctgggattacaggcacctgccaccatacctggctaatgttcgtattttttttttttt
-tttttagtagagatggggtttcaccatcttggccaggctggtcttgaacttctgacctca
-agatccacctgcctcagcctcccaaagtgctgggattacaggcgtgagccaccacacccg
-gccCAAAATATGCATTTTTAAAAAACACTTGCCAAGCAAGTATGCAGAACAAAGCATATG
-CATTTTTAATAAATTCACTTGCCTAGCCAATATTTTAATCCCTAATAAAAAAAGAACTTG
-Cctgggcgtggtagctcatgcctgtaatcccagcactttgggaggccgaagcaggctgat
-cacttgaggtcaggaattcgagaccagcctggtcaacatggcaaaaccccatctctacta
-aaaatacaaaaattagccaggcatggtagcgcatgtctgtaatcccagctactaggaagg
-ctgaggcaggaaaattgcttgaacccagggggcagaggttgcagtgagctgagattgtgc
-caccgcactccagcctgggtgacagagcaagactccgtctcaaaaataaataaaataaaa
-acaagtaaaaaaaGAACTCATTCCACTTTTGAATAAAATTCTACTTATCGGTTTGGCCTT
-ATTTTCAGAGTGGGCCCAAGCATTTCCCAAAACACCCTAGATTTATTCATATACCCTTGG
-TTTGAAAGGACCATAAAAATTAAAGATCCTGGAATTCTTTTCCCCCTGTCTCCTAGATAA
-GCTCCCCTCACAGCCTCCCCCACTCCCCTTACCTGATATAGGAGGTGGGTCATTGGCATT
-GACATTGAGGAGCTTGGGCCACACTTTTCGTCTGATCTCATCAGTCAGGAGCCCTCCTTC
-ACTGATAGCCATGCGTCTAAGGGCAGCCACATCAGTGGGATCACTGTTCAGAGCCTGGTG
-TATCTCTGCCACTTTCTTTTTCCTTTTGGCGTTAAAGTCTGAAGATAAGGATAGGGAAGA
-ATTAGGCGCACATTCAGCACGTGCATATTTTCTGCCTAGGACTCAAGCTCCTTTTTGATA
-TGAGGTACAGGTAAGTATCTCCTCTTAGCTCTAAGACTGCCTGCTGGCATAAAGTCTCAC
-AGCCAGATGCACTATTCATTTCGGGCCCAGTCTACTGGACCTCATGGTGGGAGGCTTGGA
-GAGCCCACTATAAAACAGATTTTAAATCACCGATTTTTAAAAAGATAGTCTCTTTTTATA
-GGTCTGAACCAAAAATCATAGGCACAGACTGGAAATAATTATTAGTTGTTGTTGTTTTTA
-AGAGACAGTGTCggctgggtgtggtggctcatgcctgtaatcccagcactttgggaggcc
-gaggtgggcggatcacaagttcaggaattcgagaccagcctggccaatatggtgaacccc
-cgtctctcctaaaaatacaaaaattagctgggcatcgtggtgctcgcctgtagtcccagc
-tactcaggaggctgaggcagaagaatcacttaaacctgggaggcggaggttgcagtgagc
-cgagatcgtgccactgcactccagccaggatgacagagcgagactccgtcttgaaaaaaa
-aaaaaaaaaagagacattgtctctctaagttgcccaggctggcctcaaactcctaggcaa
-aaccgatcctcccacctcagccttccaaacagctgggactacaggtgcatgccaccatgc
-ctggTCCAGAAATAATTACACGTACttttttttttttttttttttgagacggagtctcgg
-tctgtagcccaggctggagtgcagtggcgcaatctcagctcactgcaacctccgcctccc
-gggtcccggttcaagcaattctgcctcagcctcccaagtagctgggatttcaggcacgca
-ccaccatgcccagctatatttttgtatttttagcagagatagcgttcacaacgttggcca
-gggtggtcatgaactcctgacgtcgtgatcctcctgcctcggtctcccaaagtgctagga
-ttacaggtgtgagccaccacgcccagccTATATGTACttttttttttttttttttgagaa
-ggactcttgctctgtcgccaggctggagtgcagtggcacgatctcggctcactgcaacct
-ctgcctcccgggttcaagtgattctcctgtctcagcctcccaaTACATTaaaaaaaaaaa
-aaaaaaaaaGGTAAGTGAggctgggcacggtggctcatgcctgtaatcccagcactttgg
-gaggccgaagtgggcagataatgaggtcaggagttcgagaccagcctggccaacatggca
-aaacctcatctctactaaaaatacaaaaattagccaggcgtggtggcatgcacctgtaat
-cccagctactcgggaggctgaggcaggagagtcgcttgaaacccaggaggctgaagttgc
-agtgagccaagatcgtgccactgcactccagcctgggcgacaaagtgagactccgtctca
-aaaaaaatgataagtgaaaaaagaaaTGTGttaaaatcagacagatcttggttcaaatcc
-tggctctgccacttatctgatccataatcttggacagatgacttccctgctctgggcctc
-TGGACTGACACCCTCTTGTCAGGATAGTTACCATGGTACACAGTAGATACTTACTAAATA
-TTAGCTCCCCTCCTCACTCTGAAACAACATGTATTTTACAAATCAACCTACAGATATTTA
-ATTAGTACGTAATATGCAAAGCACTAAGGAGATATACTGTGTAAGTAACAAGCAAGGAAT
-TACAACTATAATAAACGCTCAGTAAATTCAGGCATATCTAGCAGTTAGTGTCAATGTTTT
-CATACAAGAATGTCCATTCTTAATTCCCAAACTTCACAGAGCATATACATCTCTTACTGT
-AACAATTTTTTCCTGTTGTTTAAATAGGAAAAATGCATGTCACCAAAACTCGATACTACA
-TTGAAAACATAACCACATGAAAAGGTCTCCTGTTACACGCTACTACAACTGGTAAAAACA
-TTAGAATCACATAGAGAtttttttttttttttgagatggagtctcactgtcgcccaggct
-ggagtgtaatggcgcgatctcagctcactgcaacctccctgtcccaggttcaagtgattt
-tcctgcctcagcctcctgagtagctgggattacaggcatgcaccaccacgctttgctaat
-ttttttttttttttagacagggtttcaccatgttggccaggctggtctcgaactcctgac
-ctcaagtgatccacctgcctcagcctcccaaagtgctgagattacaagcgtgagccacca
-cgcctggccAACACAGAGATGTTTTCAAAACCAGTGTCAAAGGGTACTTGGGTTTCCAGT
-GTGGCTGGTGACACTGCCACCAGACACTGCCACAGAGAGGCTGTGACACTGCATACAAAG
-GAACTGTTTCTTAAAAACCATAGTAAGTAATGTTTTAAGCATCTTACATCCTTATGTGAT
-AGTCTGTTATTCATAGACATTTTGCCATGTTTAAATTACTTTTTAGgactggtccctgag
-tggtgctatttacaactcattgattacaatcagttagatttctttgttccttttccacgc
-ccactgcttcacttgactagccttCAAATAAATAAATAAATAACTTTTTTGGGAAATTGG
-TTGGGAATTTGTGGTTAGTAGCTATCATATCATTTTTCTATGTGAAATAACAGAGTATTG
-CTTTTTGGCCTTTGGCTGAGATCAGGGGAGATAAAGGAGTAAAAGGCTCTGAAAGTTTGC
-ATGCAGAATGTCTGCTTTTAGGGATGGCTTGTGGAAGTTAAATGGATGATGCCTGTATTT
-CAGTTCTTTCTAGTTGCCAGTACCATTGAGAAAATATGTCAAAAACACAAGAAATGTTAC
-ACAAGACAACACCAAACGTCACAAGGCAGTAGACTATAATTGTCAAAAAAGGTGCATGCA
-GACAATAATGGCCAAGAGCTCAAAGAGACTGCAGTGGGTCAGGGCCAAGCTAACCTGAGA
-AGTGTACCTTAAAAAGGAAGAGGAGCAAAACTCTCTTGACATGCTTAATTGTGATGTTTA
-ATGAACATCCTTGCAGTGTAAGACGACCTTTTTAAAATACATTCTTggccggggacggtg
-gctcacgtctgtaatcccagcactttgggaggccaaggcaggcagatcacctgaggtcag
-gagttcgagaccagcctggccaacatggtgaaaccctgtctctactttaaaaatacaaaa
-aactagccgggcatggtggcaggcgcttgtggtcccagctactcaggaggctgaggcagg
-agaatcgcttgaacctgcaaggtggaggttatagtgagccgagatagcgtcactgcactc
-tagcctggacgtcagagcaagactctgtctcaaaagaaaaataaataaataaataaatTC
-TCTCGGCTTCAGACCTACCTATCTTTGGTGTCTCAAGTTAAACCCAAAGCAGCACCCATC
-ACATCTGCCTTTTCTTTACTTTTGTCTCCTATTGCTTCCAGATACCTTCTTCCTTTTCCT
-GCAAAGCCCATTCTGCTGGAGTGGAAAAGTCCAATGCCttgatgccagggtcttgttcag
-tcactcaagatggagtgtagtggcacagtcatggctcactgcagcctcaaccATATATAT
-ATAGTTTAAATAAATCAATAAACCAATAAATTCTCTCTTAATGATGGTTTGAGCCTCACC
-ACTTGATTAGGACAATCAGCATAACCTGTAGAATCTTATTTGGAATTGAATTCTGTATTG
-TAATTTTGTTCCTGTTCATTTTTAAATTTTATTTTTCTTTCACTGTAAAGATGATACTCT
-GCTTTAAATGTTAAAAGTGTACAAGCAAAAggccgggcacagtggttcacacctgtaatc
-ccagcactttgggaggctgaggcaggcagatcacgaggtcaggtgttcgagaccagcctg
-accaacatgaggaaaccccgtctctactaaaaatacaaaagttagcctggcctggtggcg
-cacgcctgtaatcccagctactcatgaggctgaaagaggagaattgcttgaaccccggtg
-gcagaggctggagtgagccaagatcgcacaactgcactccagcctgggcgcgacatagcg
-agactccatctcaaaaacaaacaaacaaaaaaaaGTGTACAAGTTAAGGAagccaggtac
-aatggctcacacctgtaatcccagtgctgtggagggccaaggtgtgagaatcacttgagt
-ccacaaaatcgagaacagcctgggcaacaaagtgagaccctgtctctacaaaaagtacga
-aaagttagccaggcatggtggtcccagctactcaggaggctggggcgagaggatcacttg
-agcccaggagtataaggctgtggtgagctatgatagcaccactgcacttcagcctaggtg
-acagagcaataccctatTATCAAGGCACTGGACTTTTCCACTCCAGCAGAATTCTAAATT
-TTATTTAAACTATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATGTGAAGTGGAAG
-ATATCACCAGAAGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTA
-GAAGGGACACCAAGCATCTTCCCCAGCAATGTTCTAGTCTGAGGAAAAGGAGGAAGGTGT
-CCTGGTGACCTGTCTCTAAAAACAAAAACAAggctgggcacggtggttcatgcctgtgat
-cccagcattttgggaggccgaggcgggcagaccacctgagattgcgagtttgagaccagc
-ctgaccaacacggagaaaccccatctctactaaaaatacaaaattagccgggcgtggtgg
-cacaggccggtaatgccagctactcaggaggctgaagcagaatcgcttgaacccaggggg
-cggagattgaggtaagctgagattgcagatcgcgccattgcactccagcctgggcaacaa
-gagcgaaactccgtttcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCAggctgg
-gcgcagtggctcacgcctgtaatcctcgcactttgggaggccgaagtgggcagatcatct
-gaggtcaggagttcgagaccagcctgaccaacatggagaaaccccgtctctactaaaaat
-acaaaaaattagccgggcgtggcggcgcatgcctgtaatcccagctactcgggaggctga
-ggcaggagaattgcttgaacctgggaggcagaggttgcagtgagccgagatcatgctata
-tgccactgcactctagcctgggcgacaagagcgaaactccgtctcaaaaacaacaacaac
-aaCGACAGCAACCACGGAcggtggctcgtgcctgtaatccagcatttttttttttttttt
-tttttttgagacggagtctcgccctattgcccagactggagtgcagaggcgcaatctcgg
-cttactgcaacctccacctcccaggttcaagtgattctcctgcctcagtctcctgagtag
-ctgggattacgggcacgtgccaccatgcctggctaatttttttttttgtatttttagtag
-agacagggtttcaccatgttggtcaggctagtctcaaactcctgacctcgtgacccgcca
-gtctcagcctcccaaagtactgagattacaggcgtgagccaccacacctggcctatccca
-gcactttgggaggccgaggtggatggatcactgaggtcaggagattgagacgagcctggc
-caacatggtgaaactccatctctattaaaaatacaataattaggccaggtgcggtggctc
-acgcctgcaattccagcagtttgggaggccgaggtgggcagatcatgaggtcaggagatc
-gagaccatcttggctaacacggtgaaaccctgtctttactaaaaaaatacaaaaaaatta
-gccaggcgtggtggcgggcgcctgtagtcccagctactcgagaggctgaggcaggagaat
-gaggtgaacctgggaggcggagcttgcagtgagctgagatcacaccactgcactctagcc
-tgggtgacaagttctgtctcaaaaaaaaaaaaaaaaggcagaaagaaCATGGATTCACCT
-GCTTATACAAGAAAAAAGGAAAAAAAAAAGTGTACGAGTTGCCTTGTTACAATAAAACTA
-AATGTGTATACACACAAAGGAAATGGAGGACATTCAGGGGCTGGGATGAAGGGTACAGAA
-GAAAGGCCAGGAGATACGGCCCTTCCATTTGACAGTAAATAGACTAATTAAAAAATATTT
-ATGTAGTATATATTAGGTGCAAGGCACCAGAGTTCATTTGAAGTGGAAGATATCACCAGA
-AGGTAGGGCAGATTTTAGAAATAACTAACAGAAGGTACATTAGGTTTTAGAAGGGACACC
-AAGCATCTTCCCCAGCAATGTTCTAGTCTGAGACCATTGTGAGTCTACAAACTGTTTCTA
-TGACAAAGCTGTACattattattattattattattattttatttttattttttgagacag
-agtcttgctttgtctcccaggctggagtgcagtgaagcaatcttggctcactggaacctc
-tgtctcttgggttcaaaccattctcgggcctcagcctcccaggtagccaggattacaggc
-gcatgctgccaccacacctagctaattttttgtatttttagtagagacagggtttcacca
-tgccaggctggtctcgaactcctgacctgaagtgatctgcctgcctcaggctcccaaagt
-gctgggattataggcatgagccatcaggtctggccCATTATTAACATAAATTAAAGTTGG
-TACTAATAAGTCACAGGTGAGCTACCTATGAGACCTGAAACGTAAAACCCACATAAACAG
-AGGCACTAGCTGGTTTGGAGCCATGTGCAATTGGAAGTGCGACAGAAAGATAATAGGAGT
-AACTTTTCACCTCGGTAAACCTGTCCTCCTGGCTTGACTGCTGTTTCCTGGTAACCTAGt
-agggtgaccatttgtcctcatctgtctgagatcttcctggtttatacctagagtcctggc
-acaattgttcacagcaaaccctttctgctccctgtattctcaaatatgtcccagtttgga
-agccaaattaaatggttaccTACCTAGAAATCATTAAAAATAAAACCCCTTCTGGGcaca
-cctataatcccagtactttgggaggccaaggtgggcagattacctgaagtcaggagatcg
-agaccagcctgaccaacatggtgaaaccctgtctctactaaaaatataaaaattagccgg
-gtgtggtggtgcacgcttgtagtcccatctactcaggaggatgaggcaggagaatcgctt
-gaacccgggaggcggaggttacagtgtgccgagatcatgccactgtactccagactgggc
-aacagagtgacactctgtctcataaaataaataaataaaaaataaaataaaATAggccag
-gcgtggtggctcatgcctgtaatcccagcactttgggaagtcgaggcgagcggatcacct
-gaggtcaggcgttcgagaccagcctgaccaacatggcgaaaccccgtctccactaaaaat
-acaaaattagccaggcgtggtggcaggtgcctgtaatcctagttacttgggaggctgagg
-caggagaatcacttgaacccaagaggcggaggttacagtgagctgagatcacgccactgc
-actccagcctgggcaacgagagcaaaactccgtctcaaaaaaataaacaaaataaaaata
-aaaaTATAATAAAATAAAAACCACTGCCGGGCATGGTTTTTAGTCCAGACgtggctcatg
-cttataatcccagcactttaggaagccgacgtgggcagattgcttgaccccaggatttgg
-agagcaaccagcctgcacaacatggcaaaaccttgtctctacaaaaaataggtgggcgtg
-acggcgtgcacctgtaattccagctgcttaggaggcagaggcgggttgtagtgaggcatg
-attgtgccactgcactccagcctgggtgatagagtaagactctgtctcaaaaacaaaaaa
-aaaTCTCCAATTTCTTCTGTCAGCATAACACCTAGTCAATTGTTCATGAGATGTGTCAAG
-CTCTTGACTCAGGTGTGTCCTttcatccattcatccattcatccattcatccGCCTGCCC
-ATTTGtccagtcattcatcagtctgtcacttaatgggtgtctacttgtactaagcactgt
-actggggataaaaagatgaattactccctcccagcccttgaagggctcacagtagggaca
-caaacaattattatatataatagaatctgagggattatgaaaatccagaggaaagaatga
-ctttttttcttcttctttttttttgagacggagttacgctctttgttgcccaggctggag
-cgcagtgttgcgatctcagctcactgcaacctccacctcctgggtttgagcagttctcct
-gcctcagcctcccgagtagctgggattacaggcattcaccaccacgcctggctaattttt
-tgtatttttagtggagacggggttttgccatgttggccaggctggtcttgaaatcctgat
-ctcaggtgatctgcctgcctcggcctcccaaagtgctgggattacaggagtgagccacca
-cacctggccaagaatgactacttctaaagcagtcaggaaaggcttcaccaagaatatatt
-ctggatccttcttttaattttttttttttttttttttgagacagagtttcactcttgttg
-cccaggatggagtgcaacggcacgatctcagctcaccgcaacctccacctcccaggttca
-agcaattctcctgcctcagcctcccgagtagctgggattacaggcatgcaccaccatgcc
-tggctaattttgtatttttagtagagacagggtttttccatgttggtcaggctggtctcg
-aactccccacctcaggtgatccgcccaccttggcctcccaaagtgctaggattacaggca
-tgagccaccgcatctggccCttctttttaatttttatttatttatttagacagggtctca
-ctctgttgccttggctggagtgcagtggcacaatcatagctcactgcagcctcaacctct
-agggctcaagcgatccttccacctcagccttctatgccaccatgcctaattttaaaaaaa
-ttttttgtagaggtggggtctcattatgttgcccagactgatcttgaactcctgggctca
-agcaatcctcttgcctcaacctcccaaagtgctaggatcgcagatgtgagccaccacact
-gggctctggtacgttcttaaagaaaattttgccacagggaagagtgtgttaaggggaaag
-tactccaggcagaagagttatgtgcaaagaccttgtcacatgaaagaaacaccatgtcca
-ggaaacaaagagttctatgaagctgaagtgccaggtaaagggagagAACAGAAGCAGGTA
-GCACCGCAGTAAAAGAGGCTGGGCTGGATTCATCCCGCAAAGGAGTCTGGGTTTATCCTG
-TACTCAGGAGGAAGACAGGGAGGGATTTTACTTTGGGCCTGAGGGCCATCCTTTGGAAGA
-CCAGGCTGTACGTTTTCAAGAGGGGTCAAAAACATGCAGGAAACAGAGAAGCCTTTTTAT
-ATAACATCGGTGGAGGCAAACCATGAGAAGAATTTAATTTCCAACAAAGAGAAAAAACCT
-AACATATTTAATTTTTTTTTAACTTGGGAGTACCCCTGCACTTTCCACACATCACAAATT
-GACAGCACTTGAGTGGCAATACTGAATACTGCTTGAGGGAAGCTGATATTCAGAAGTCTT
-GTTAACCTATTTGCTAAGAGTATGATAATTTTTCTTCAGTTTGTTTAGACATACATCCAC
-CCCATCTCTCTTTCTAAATAAGCTATTCGGCAATCTGGGAGAAAGGAAATCTTGTATCTT
-GGGGAAAAAAACCACTATGCAGTCAACTGAATTTCCATGAGGTTTTGGCAAACCATTTGC
-CAGAATGTTACTTAATTCTGAACTCAAATCCTCAAATCATACCTCCCATAACTCATTTCT
-CTTAAGACTCTGTTCCAAttttttttttttttttagagacagggtcttactctgtcaccc
-aggctggagaatagtggcacgatcatggctcactgcagcctcaaccttctgggctcaagt
-gatcctcctgccttagcctcccaggtagctgggaccacagacaagctccactggcccagc
-taatttttgcgtatatatattttgtagagaaaaaaagtgttgcccaggctgatctcaaac
-tcctgggctctagtgatccacccacctcgacctcccaaagtgctgggattacaggcgttg
-agccaccatacctggccTCCAATTCTACTTTTAATCCTGCATTTCAAAATTTACTTACTA
-TTTCAAAATTTTTGGCACTCTGTGGGAACGCAACAAATACGTGCAGAATATAGTAAGTGA
-TTTAGTTTAGTTATTGTTCCTCTGGAAAAAACTGGCTTGCAGTAAATGACATTATTTTTC
-CCATACTGTTAAGGTGATGCTCACTGCAGAACTCTCTAAACAGATCTGCAGACTCTTTGG
-CCTGTTTCTAACACTACCGGTGTTTCCCAGAGGAGGATGCTGTCCCAACGTGGATTTCGG
-CTGCTGTTTTTTTCAGGCCCCAACACCACCCTCCTCAACCCCACAGCCTAGTGATTAAAT
-GTCAGTGGCAGATGGAGAAAGCACTCCCACGTGTGCCACTCTGACAAATACTTTATTCCA
-ACTAAATGTATAGGCTCTCACTGTGACATAAAAAGGGAAGAGGAAACAGAAAATTCAAGT
-GAGCTAAAGATGTATGAATTACAGAGTGAGATCAACTGCTAGACGACACAGGGAGGGAGT
-TAGCAGCGTCTCCACTGAAAGACAAATTCACAGACATCCTGTTTATTTCCGAAAGAGAAA
-CATCATAGAGCTATTCTTGGGATGTTCAGGAAAAGATTAAAATAAATGCCTATTATCTAT
-TGTATTTCGAGATAAACTTTATAGATTTAGAGCAGGACACACATTTCTGGACTTGAGAAC
-GCTGTATCTGGCTTGGAATAAAAGCCCACATTTCATCTAGAGGTAGAATGTATGTCATTC
-TAATCTCCCTCAATCCTTTCTTCTCCAATTTCTTTATTGCCCCACTTACAAGATAGTGCA
-CTATTATTCCAAAGCTGATACCTTCCAAATTCCTTTATAGTAGAGGTCTTGGCTATCATA
-ACCATGATGGAACGAATGACCGTCCTACAGCTGGCTGCAAAATATAAGACTGCTATAAAT
-AAATCCCTGATGCCTGAAAAGTAATTCATTCAACAAAGGAAGATAGGTATGACTTTGGCC
-TACTCTTCATTAGAACGCTTATTtttatttatttatttatttatttataaagagggcaaa
-gcagactttatttgaggggcaccacagcaataggtatagcaacaactgcaacagggtttt
-gtagtcagggagggagatcagactcaactccCTAAAATGCTAATTTTAACAATGGGACAC
-TTCATCTGAACTGTGGTTCTTAATGGTTCAGATAAAGATGACACAACCCACTATTGGCTT
-AAACTTCTCCCAACTCTGGCTACAGAATCCAGGTAAAGATTTCTGCCCCCTCAGAGTAAT
-AGGCATGTCCAAAATCACCTGGATTAGGGCACTTAATACACTGGGAAGGGACGATAACAA
-CTAAAGATGACCACTATCCATGCCTCCTCTAAAAGTTTTTTCATATATTTTTTCATATCA
-CCAAAACAAATACTAACTTGGATCAACTAATTTATATAATGGAATCTCGTGTGAGCGTAC
-AAAATTCCATACTGATTATTTGGTTTAAGCCTGCATTATCATAAAGGCTTTACAGTCTTT
-AAACTGAAATTAAGCTCAAATTAAGAAATGCTAGTCTTAAAACAATGGAAGGGGGGGGCC
-GTTTTGTGTGGAGGGAGGGAGACAGACATACCCCTACACCCACCCACAACTACTGATATT
-GACATTGGAAATTAACTTGAAAATTTATgcctgtagtcccagctactcaggaggctgagg
-tgggaggagcacttaagtccaggagttgggagatgacagtgagctttgactgtgacactg
-cactccaacccgggtgacagggcaagatcccatctctcaaaaaaaaaaaaaaaaaaTGCT
-TTAACTCCACGTCTGTACCAGAAGACCACAGCAGGAGAGGAAAACCTTATTTCAGTCTGG
-GTAAGAGTTCTATTAAACACAAAATAAAACAAACTAGCCTCTGTTTCTGGAGGTCTTCAT
-TAGTAGTTTCTACAAAACAGTATCCAAATTAGCAAAGATTCTGTTAACTACCTGGAAAAA
-GCAGGTACCAAGAAAGAATGTTTCACTACAATGGAAAAAAACAGTCTAGTAAGTAAACCA
-ATCTGACTATAAACGCTACAAAAGAGGGATTCTAGCATTAGTAACTTTGCCAACAATACT
-CTGATATGATTAAAAAACAAAACAATAACAAAAACAAAAAACCTCATCTTTAAATTTGTC
-CCATTCATCCAGAGAAGCAAAATCAAGGAAACTAGAGGGGGTAAAGTCTTGCAACAGATA
-CACAGCTGCACTGCCAACAGGTCACAAGACCCATGCTGCCTAGGGCATTGACTGTTATGC
-CATGAGGACAGACATCACACAAACACCAGTAATTAAAGGGTTACGGTGCCAAAGGGTTCA
-GAGCTCCACTTCCATTCAGTATCAGAACATAAGAAAAAGGGAAAAACAGAAAATGAGCCC
-aaataaaatataaaataaaatataGATACCAGGAGCTTCCTCAAAATATGTGGGTTGTAT
-TAATAACGTGTTTGGCTCTGTTACGGGCACCATCCATCAGAGGACTGGAAATAGGGAAAG
-TCACCTTAGTCTTCCTCAAGGAAAAAAGATTATTTAACTTGGTTCACGGTGTACATTCAT
-AATTTTAACTGTCATGTATTTATTGAATGAAAAACATTTGAGAACATCATGTGCAACAAA
-AACATGATTTCACAGAAATTGTCCAAACTAAAAGAGTATAAAAATAGAAGCGCTTTTTAT
-ACAAttatttacttattattattattgagatagggtctccatctgtcacccaggccggag
-tgcagtggcgcaatcatagagtagcctctaagtcctgggctcaagcgatcctcctgcctc
-agcctccagagtcgttgggatcacaggctcgagcctccacacccgactaacttttaaaaa
-ctttttgtagagatgaggcctcgctgtgtttcccagcctgatctcgaaatcctggcctca
-atcgatcctccaaccatggcctcccaaagcgctgggattacaggcgcgagccatggtgcc
-cggccGCTTTTACACAATTGAATAACATTAAAATAGGTGGCAGAAGACagacagaaagtc
-gattcgtggttgccaggcgtcgtgaataccggggaacgcggagtgcctattaatgggtaa
-gggtttcgttttggaatcagacagcggcgatggctgcacaactttgtgaattttctaaga
-atcactgaactgtgcaccttaaaggaagaactgtgtggtaattacatcGGCGGTACGCGG
-GCAGCGCGTCAATCAAGCCGGCGACGGTGAATGCAGTTCGGGAGAGCTGATACCCCTCGG
-GGAGGCGGCTCCGGGAGCCTGCGGACGTGGCGGACGCCTGGGACGGGGTGGGCCTGGCCT
-CCGCGCTCGAGGAGTCCCAGTCCTCTCCAGATGGAAGAAAGCCGGGGCGCGAAGCCGCCG
-CCCGCTCTTCTGCCTGGGGACGCGACTCTGCCGCCAGGCTCCCTCGGGTCAGCTCGGCAC
-CCGCCCGAGCCCCCCCAGTTCCAGGCCCTCTCCTCATCAGACGTGCCCTGGGCCCTCAGC
-CTGTTCCTCTCGccgcccggaaccccgcagcagccccgggtccccagcccgcgcccctcc
-ggcgccgcctccgccagctgcccctgccccccgggccgccctcgcaggccgctcccggcg
-ccccggtcggcttccgtacctgccttctccgcgccgccgtcccAGTGGCCGGAGGTGGGG
-CCGTCGCCCTGCGCACTCCGGAGGGCCATgccccggggccccgggcccccACCCGAGCCC
-CGGCTGGTGGCGGAGCCGGGAGAAGACGCGGCTCCGACCGCGGGACGTAGCACCCGCTCG
-GCATCGGCAGGCTCCCCTCCGTCGGCCAgcggcgcgcaggcgcgcaggcgccccgctggc
-cccgccccgcgccggcACGTGACCCTGCGCTACGCCCGGCCGGCGGCGGGGGAGGCTGCG
-GAAAGAGCGCGGTGAGCGCTCTGAGGAGTTGGCTTCGTCTGCGCTGTAGACTCTACGGTG
-TAGAgtgtggcgctcttgagcgagtgtgctcgagaccagctgtcgtttcctttgcttctt
-tcatctgtaaaatagtattgatgataataaaaatattgaactcacaaggttattgagagt
-gtttagaacatcaccaagcatatagtaaatactccacaattatGACCAATTTTTGCTTAC
-CAAGGATTATTTTTTTACCTCCTGTCTCGTCTCCCCACACGAACTCCTGTCATCAGTTCT
-TGGGTACTTGGGGATCTAGCAGGTTCATGTCAtacgggtccgcaggttatgcactgcaca
-aggcctgggagcgccatttacgtagacgttcacgtgaaccgtgcccccttaagttgtgcG
-AAATAGTGGCCACTCATCTAAAGCAGCGctctggcttatcaggtctgatttccttctcgt
-cttcagtgatattcctttctttccaattagacatccattcccttggttatatccctgata
-ttgtgattgtggcctcccgaatttctagtgctaggtcttcatgctgaagttcccataatt
-ccagttgcttgatgactctcttccacctcccacccccaaccacaacagttctttattatc
-ctgagacctccagcccatGAaactcctgacctcgtgatccgcccgcctcagcctctcaaa
-gtgctgggattacaggcgtgagccaccgcgcacagcCAAGTTTTACAGTTCTATTCATAA
-ATCTAGTAAATTATATCAGTTATTTGGTCCCATTAATAAACTAAGCTAATTAAAATCCTT
-TGAACATTTGAAACTGCATTTATAAATTCAATTCGTTTTTCTAAGTATCACAGGTTTCTA
-ACAAAGCCTTTCAAGTCCTTGTGTAATTCTTGTAAATGTAATACATTTATAAGAATACTG
-AGTCATGAGTGCTTTCAAATGTGTCAATACAAACGAGATTTCATCTTAAAATCAAAAGTC
-TAAATCTATTCAAATACATATTTGTAATTAGTACAAGAATAATCTGTTAGAATTCTCAAA
-Attatcttttttttttttttgagacagagtctcactctatcacccagactggagtgcaat
-agcgatcatagctcactgcagcctcaagctcctgggctcaagctagcctcctgttgcagc
-ctcccgagtagctgagactgtaggtacacactaccatgcctggctagtttttttagtttt
-tatagagggggtggggaatctccctatgttgcccaggccggtctcaaactgccttcgcct
-cccaaagctctgggattacaggcgtgaatcacagtgccAAGCTCTTGAAATTATCTTGAA
-CATTATAGGAATTTAAAGTATCACATTTACACAGATGCCTTAATGCAAAATTATTAATAC
-TAGAAGTTTGAAAACATTTCTAGTCTTTGTTCTAAATCATCTGTGAggctcatgcctgta
-atcccagcactttgggaggtgaagggctgcagatcacttgaggtcaggagttcaagacca
-gcctcaccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcatgg
-tggtgcctgcctgtaatcccagctacttgggaggctgaggcaggagaattgcttgaacct
-gggaggcagaggttgcagtgagccaagattgcgccactgcactccagcctaagagacgga
-gtgagactccatctcaaaaaataaataaataaaatgaaataaaTCATCATTGAGGTTAAA
-AGATGCTTAGTGCCCACTGAAGGAAGATTTAAGTCATCCCAGTTTAAGAGTAACGTGCTC
-AAGCAATTTGAGATATTTATTCCCTTCTCAGTTTACTGCGCTGGTCATCCAGCCAGCTGG
-ATTCTTGCTTTTGGTAGTGATGGAACAGTGACCCCCACCCCATTCCCACCACCACAACTC
-TAGGACTAAACAGTTGTGTGGTCGTTGTGAAGCTTGGGCcagaatttactttcaaaaaat
-gtcccgcttcatgtataatataaagaccttacaataaattcccatttcttccctcctgtt
-cttcttgctgttgtcctacattttactttttaaaatcccttccttctcttgctttctccc
-ctctacccaccaaccacttgcaaacaaccactgatctacatcctgtcactatagattggt
-tttcattttctggaattttttatggacggaatcatatagtatgtagtcttttttgtctgg
-cttcttttactcagcgtaattattttataagcaatcatgttgcattaatcaatagttcat
-ttgtttttgttgttaagtagaatttcatcttagaaatataccacgattcattttatcaGT
-ATTTTAAATTTTTGCATGTGCTGCAAGTACACAATTCATTGCTAATATGCTTGCCTTAGA
-CCAGGCGGTTAGCAAAAAAGATGGTCTGCCCAcctgcaagccaaaaccactctactgcct
-gattttgcacggctcatgaactaagaatggcttttaccttgataaatgttgaaaaatcac
-aacttaattgtagcacattaaaactatatggaatttaaatctcagtgtccataaaccttt
-actgaaacagagtcacgctcattcatttacctactgtctatggctgttttcatgctgcaa
-cggtagagttcagtggttgcaacagagatatggcctacaaaacctaaaatatttattatc
-tgctcctttatgtatttatttattttatgtgtgtatgtatgtatgtatttttttgagatg
-gagtttcactcttgttgcccaggctggagtgcaatggcgcaatcgcagctcactgcaacc
-tccgcctcccaggtccacgtgattctcctgcctcagcctcccgagtagctgggattagcc
-cgccaccatgcctggctaatttttttgtatttttagtagagacggggttttgccatgttg
-gtcaggctggtctcaaactcccgacctcaggtgatccgcccgcctcagcctcccaaagtg
-cctgggattacaggcatgagccaccgcacccggccTATCTGCTCCTTTATAGAAAAAGAT
-Tggcaggacgtggtggctcacacctgtaatcccagcactttgggaggccgaggcaggcag
-attacatgaggccaggagttcgagaccagcttggccaaagtggtgaaaccccgtctttac
-taaacatacaaaaattagccaggcatagtggcacaggtctgtaatcccagctactcagga
-ggctgaggcaggagaatcacttgaacccaggaggcggagactgcagtgagccgagatcac
-accattgcactccagcctgggtgacagagtgagactccacataaaaaaaaaaaaaaaaaa
-aaaaaaGTTTTGTGACCCTCTAttgtagagatggaggtattggggctgttgcccaggctg
-gccttcaactcctggcctcaagggatcctcctgcttcagcctcccaaaaatgatgggatt
-tcaagtttgagccccatgcccagctCACTTCAGTTATTTCTAAGGTAATTTAAaaaagat
-tttaattgtacttaccttcattcaatttccagtgctcttaatttcattgtgtagacccag
-gtttttttctggtatcatattccttttgcctgaaaaacttcctttagtatcttgtagaag
-gagcaatgaattccgtttttctttatctgaaacagggtttatttctcctttattttgaaa
-gacactttcatttgggtataggattccggaattttgggtgagcagtttttgtgtgtgtat
-gtgtttttcccctatcagcatcagcaataaggtcactccattggcttctagcttgcatag
-tttctgacgtctccataattcttagcttcctctgtatgcaatgtcttctttttccttgct
-gcctttaagattttcttttgttttagcatttcgagtatatctaattttatatgtgtgtgt
-gtatatatatatatatatatatatatatatatatatatatgagtttattctgcatgttct
-ctgagcttcttggattttgtggtttgctctgtccttaatgttgaaaagttctcagccttt
-aattcttcaaatgtttcttttcctgttctctctcctttcttctgggaatctaactataat
-atgtttgagtgtttgatattgtcccacaactcttggatgttctcttttgacggttttttt
-tcccttcaccctttttccccagtgtttcagtttgaataatttctcttgacctatctttga
-gttcattcattctctccttggctgtgtcaaatccactgacgagctccatgaggcactctt
-catctctgcatctctgttagtgtgtttcttttttttttttttttttgagacagagtctcg
-ctctgtcctccaggcgtgcagtggcgcaatctcggctcactgcaagctctgcctcccggg
-ttcacaccattctcctgcctcagcctcctgagtaggtgggactacaggctcccgccacca
-tgcccggctgattttttgtatttttagtagagacggggtttcaccgcgttagccaggatg
-gtctcaatctcctgacctcgtgatctgcccgcctcggcctcccaaagtgctggaattaca
-ggcgtgagccaccgcacctggccattagtgtgtttcttattttgaccagttccatttggt
-tctcatagcttccatctctctactgagattgcacttttgatcttgcatattgtctacttt
-tactgttagaccttttaccatattagttatttgaaattctgtatcacatagctctgacat
-ctgtgtttggttctgaagattgctttgtctcttgggagtatgtcatttatctcttgcttc
-ataagtgttggtgaaagttggacatcttgtgtaggatagtagaggcccagggaaatgggt
-tttgtgtagaaatgggcacacttttccttctgttaggtctttagcgtgggggtttgaatt
-aacctagttaggagttgTGATAggctgggtgggtggctcatgcctgtattcccagcactt
-tgggaggccaaggcaggaagattgcttgaacacaggagtttgagatcagcctggacaaca
-tagtgaaaccccatctctacaaaaaaaataaaaattatctaggcatttttggtgcatgcc
-tgttgtcctagctactgggaaggcttgccgagtctgtcctgcagactctgcccaagcgac
-ggatgaaaggagtactcagatacagatatccagtgaaagagcaggataggggactgccag
-cactaggggccgaagagaattagcagttcccctaagccggcagccctcgcatttgtttgg
-tacagatttaatgacaaaggcttggagcaaacacaatttgtgggtaataaacattgttga
-ccccccgagtagagagcagtcctgcatgcaaatgattaaaggttggtttctggagacagg
-agtagacaaatttatctagataagtttctttacattcccttgttatctgccctttgctct
-caggctccagatgagacaatttggctgccttcagccataatttccttccaaagcttttgt
-aaaacctcctggcctttcaagaaggtttgtgtctttactataatttctcccaccaccctg
-accaatctcctacatctcccccttttctgttttttgcatcagcttttgttaattgaagag
-tacagatgtgcagcaacaggtttttcaggtgtagtggtcactgcttgtatttcggctttg
-catcctagaattagtaaataacataagataaacgtgaatataatcagtaacattcttttc
-caatcaaggagtgacatgtagtgttacttgccacctcagttcagtgtgtgcccttactaa
-ggaaccccactgggggtatgttaaccccttccagccaagcagttacgttattagaggctg
-ggaagggggtgtccacccaggtaatagggtggaagaaaagcagatttagaagatgggccc
-aatagagtgtagcaggtactggttgcaggcagagtgagggaattaaacaaggttaataaa
-gcatagtaaggaataaattatctggagtgaatggtgtttgtgtccagagcaggattcgtt
-cagcctcctgagttgtcttcttcagcatcccccaggtaatgtctggggcttgtgtcgtct
-gaggaagctgcatcatccagggctgtgggtcctgcagggacatttccttcatttctggta
-ccaggttgggtcctagccacaccatgttaaggtttgatgcgttgtgctggaatccaaaga
-ggacctgaggtgatgtgaacacaaccatatcctcttccccatgttggcaactcatttgga
-ccacaccatacattactgtttacatctttccataaaactgtgggttttatgtcttgagag
-gttttagcaaagtgcttttctatagctgattgaaatttatcatttaaatttaagaaatta
-agggtaaataaggcttttgctagtagtgttgcagggtccttactcatactcccccttttt
-tgttttttgagcatatttttaagagtggacacgttctactatggcctgtccttgggggtt
-atacgggatgcctgtggaatgctggatgttccacgtgtgacaaaattgttgaaattgtga
-gctggcatgagccagaccattatcagttttaatttttgtgggccgccccataaatgcaaa
-agttaagagaagagtttaataacatatcaggtggactttccaggaagagcattgtgctaa
-ttaggtgagaataggtatcaatggatacttgtacatatcttagttttccaaattcaggga
-cgtgagtaacatctgtttgccataactgattaggttctagtcctctagggttaacgcctg
-ttgaaggaggggacatgcctgtgagctggcaatccgggcattgcaggataatttgtttag
-ctagtctttgggtaagttgaaattgttcagttaagttccttcaattttggtggaaaaatt
-gacgcaactgcatggcttggtgaagcagtgacatcataacttgcaggtctgcttgttcat
-tgccataagccagtgggccaggcagtgagctgtgggctcgaatatgtgtgataaaaatag
-gatgtgtacgttgatccagcaattgctgaagttgaagaaaaagtgcacacagggtgagct
-tgagagtggacttaatgagggctgttttaaggttttgcaataaataaacagagtaagcag
-agtcactaatattgataggcagagtggaaaagttctccaggggcaatattaaggctccaa
-cctcagctctctgagtgctagtaaatccagaatgagtgaggaaattatgcagtctccacc
-aaacaggcgcttttctgtttttaccagagccatcagtaaaaagtgttaaagtgttggggt
-atgggggagtgaactacttttgtaggcacaactacaggagtacgagataagaactgaatt
-acgttgtcagcaggaagggcatgctctatatggcctgtgtaatcagagattgctatctga
-agatctagagataggggcaatactgatccaaattgccttttactcaaaggaattcttatg
-acatcataacctagcaactgattgcactatctgcggcctgtatagatgactttactaact
-agctggatataggaagatagtgttttagtctcggtatgtgagcaaaaaacccattctagg
-aagcgtagtcctggggtcatctctcctattaatactgttggggaatgtttagtaggaaaa
-acaaacaattgaactgactatcggggtgtctatgtgatatagttgcctctgagaaatagc
-ttgctctatttcctcaatttccctttttgctgcaggagtcaaatacctgggagagtctag
-ggctgtattgccctttaggatagaaaacagttttgtaacttatcagtagttatgcccaac
-gtggggtgaagtcaattaatattgcccagtaacttttgataatcatttaaggtgtgtaaa
-tcgctagtatttaaccttttgaggtcttactgaccagaagttagtatgtatccaagatat
-ttccaattgtactttttcaggtgctatgattaaacctcttaactgtgtattctttatgac
-agaggcatataaacttaaaagcactggctctgttggggctgctaggaaaatatcatccat
-aaaatgaataatcttgcaactaggaaattcttttctactggggagcaaagcctgatttac
-atgatactgacacatggtaggactgaacagcatcccttgaggaagtactttccaatgaaa
-tcagcgagctggcctctcattactgataactggtattgtaaatgccaatttttctctgtc
-ctgttctacaaggggaatagtataaaagcagtcctttaagtcaataatgactataggcca
-atcttgaggaatcgcctcaaaggggaagggaggtcccgttgaaggggccccataggttgc
-aaattagcattgatagcctgtaagtcatgcaaaagtctccatttgccagaccttttggga
-atgatgaaaatgggcgaattccaagggctgtttgacagttctatatggccagcttttaat
-tgttcttccactaattcatgggctttttgtaatttctctctctttaaaggctactgtttt
-acccaaataggattttgagagagccatgtcaggggtaggggaggaataacagtggccatt
-attagaaaggtttgctgttcacacaatttatcaaattctgccctccagaggaggtactga
-ctggcctttaaagttgttttagctagcactgaccagtcccatggggtgatatggaagttg
-tctgctatggtttcaattattccttttgtaaatgggctagtggctccgtttaatgctttt
-tcttaccactttataagcgtcaaaagaagttgtctgctatggcttcaattattcctttca
-taaatgggctagcagctccattttctttaacgtttttttcttatctctttataagcgtca
-aaagaaatgggttcatatacctgatcgccttgtcgatcttgcattactgggcaggctaag
-agctccccttctgatgccgcttggctaagacagggtcccaaagctgtagtgtatcccttg
-tctttttccaatttattggaggagggggctcaggcaaaacctctgtttcctctttgttat
-ttttgcctgttaatggctgggctgagggagaaggaggagacggtagggtaggtgacggtt
-ccatctcccttacttttttaggcttttctgtgtagagtgggaccaaagcagtcctaacta
-aagcccataacgttaaagatgttactgagacccattgcccttgctcatgatgttaaaatt
-tcttcccagagctctacgtctagtgtaccttcttccgagagccatgggttatgggaaaca
-acagtttgcattaggtcccataattgagcctgtctgaggctctgctaactttcagcattt
-gttttactacttttatatactgttgctgttgagctgacaactgttgtcccatgatgacaa
-ctgtcatcccatgatgatcgtccctagcttgagcaattcctttgaacttggaaatgctga
-acaggcaccaatgacttactgactgcgcagtctcttcaccttcattttcgagggttccgt
-cgtgatctgttgcagcattcctcacacagggaatcacctgccgagtctgtcccacagact
-ttggccgagtgacagatgaaaggagtactcagacacagatattcagtgagagagcaggct
-aggggactgccagcactaggggccgaagagagttagcagtccccttaagctggtggccct
-cacatttatttagcacaaatttaatgacaaaggcttggagcaaacacaatttgtgggcaa
-taaacattgtcaacatcccaagtagacagcagtcctgtgtgtgaatgatcaaaggttggt
-ttctggacacaggaataaacaaatttatctaggtaagttcctatacaactcccctgttat
-ctgccctttgctctcaggcttcagataagaatttggctgccttcagccataatttctttc
-tgaagcttttgcaaaacctctcggccttccaagaaggtttgtgtctttcctataatttct
-cccaccaccctgaccaatctcctacaAaggctgaagcaggaggattgcttgagcccagga
-gtttgaggctgcagtgagctgcgatcacaccactgcacttcagcctgggcaacagagcaa
-gaccttgtctctaaaaagtaaataaaaaaaagagttgggctaggtttgaggtttattgtt
-gctatggttacccccaatgcagcagcttccagttcctccaatgacaccttggactgaggg
-tgcaggctggcctgccagagggattttctccttccatgtgtgctccctgctcagctttag
-gtcctccctttgtgaccctcagaaagggtcttcttcccatactcttgtctctctcctgta
-acatttttacttctaactcaaggcttgtcagcttaccattggcaggtgggggaggaggga
-attctctgttctgatcaagtctcagtctctgtcaggccctttgtgtctctgattttgggg
-ttatgtcctccttagtgctcctgttcctcccccAGTTCTGGGCCCAGTGTGTATTCCTGC
-CCCTGCCCAGGGAAAGTTTTGTTTTGTTCCTGTTTCATTCCCCCAGATGCAAGGGAGCTT
-CATCCAAGGGGGTGACAGGATTTGGTGTCCTTCCCTCCACAGACTAAGGCTTTTGTCCGG
-TAGGGGATACAGGGAAGGGTCTGGGTGGAGCACTGTGATCCTTTCACAGTAGCTGCCATT
-GTCTTCTTCCAGATCTTGAGACATTTTATTAAAACTTTCTCCAATCTTCTGTGTGCTCCC
-AGTGGGGTTCATGGTGAAAAACGCTGAAAAGGGTAAAGACTACTGCAGTCTCCATGACCC
-AGTCCCTCACCAGTGTCCACTTGTGTTTACCAGGTAACCAGTGCCCATGTCATCTCTTCC
-ATTTTGTGCCTGTCTCTCCTTAGATTTGAAGCCAGTTGATTGTCTTCTGATCTCAGCTCT
-CCAGAAGACCTTTTCCAGAAGACCTCTCCCTGTGTATCCACTTCTAAACCAGTCACAACT
-GCCCGAGTCTCACAGCAGCATGGTGGATATCCCGCTGTCCCTCAAACTGGGGCTCTGTCA
-ACAAAGAGGAAGGGAGGAATGACTCCCTTGGGAGGAGACAACAACATTGCAAGTGATCTa
-gtctttgaaaggcttttaagcaagggactgagataaaatttatttattatttttaagaga
-gaggttctcactctgtcagccaggtctcactgagagcaatgtgatcatagctcactgcag
-cctccaactcctgggctcaacgtatcctcccacccagcctccccagtagctagcactata
-gtcacacaccaccacactagttaatgttttcattttttgtagaacagaggactcgctgtg
-ttacccaggcctcaagtgatcatcgggccttggcctcccaaaatgctggggttatagata
-tgagtcactgtgcctggactagaatatttatttttgaaagatctttggttgcaggtgtca
-gatgaatcaggaattgagacgagatgggaaggcatcaagaccagttatctgctatgatac
-tccaagcaagagaggatggtggctgggatgaggaatttggcaacgggaatgggaggaagt
-ggatgcattcaagataaatATCCATTTATTAAAAGTAGTTGCTTTTTCACCAGAGTAATA
-CATAAATATAGTTTTAAAAGTAAATACTGCTACTATCTTAACAATAATTTAAAAAatctc
-aaaataacatgcaactgtttgatttttcagttttaggcattagttccccttataaatgat
-gagagtttagagcttagaccgcttgtcctgttaccaacaccaccacacatgccagcattt
-cccatcactcctctttccattgtcatcatactgtaatcctggttagaccagtattcagtg
-tttccattatgactacgtaaattctaatcacagctgaaccagcagtatgatatttagttt
-tccctcctttcataacttttcccattcctgctgagttaatacttttttggcttgtcttac
-tctgctcagttttcATTTTGTAAActtttaaacatttgaactctagcaaatatactgaga
-agtgccccaaacgtaaatggagagtttaacaaataattatagagcaaatacaacatttag
-gtaccaccccaataaacacaacaccgaggacccccagaagcaccctgtgtATAGTGGAAT
-GTTGTGTTGTTTCTGGCCATGGAGTCTCAAAGACTGATTCTCAATTTTTGTTGCTTGAAA
-ACAAGTAAACAAGTATTCTCagccgggcacggtggctcacgcctataatctcagcacttt
-tggaggccgaggcaggcagattacttgatgtcaggagttccagaccagcctggccaacat
-ggtgaaaccctgttgttttgtaaaaatacaaaaactatctgggtgtggtggcatgtgcct
-ataatcccaactacttgggaggctgaggcaggagaatcgcttgaacctgggaggtggagg
-ttgcagtgggctgagatcatgccaccgcactccagcctgggtgacagagttaagactctg
-actcaaaaaaaaaaaaaaaaaGTTGGTGTAATCCTTTCCACACACACATATATATATACA
-TAGATGTTATATGTGGTTGCCTTCTGTTCCTACTGATATATATGAATAGTATGGCTGATT
-GCATTATTGGTTTGTTTCTTCATTCCCCTGTAATAAGACTAAACatacacaccctttgcc
-atataacctcataaagttttcccaacacaggctctatgcttccctactgcactgatgttg
-ggcttggctatgtgatttgctttcgccaatgggatgatggtgcttgtgacacagcagagg
-cttgaaatgtgcttgtgtgattccatttggtctcttCTAAGTTTCTGTGATTCATGAGAA
-GAGCACGCCCTGAGTAGCTGCTGCAACTTCTGCCACATTGGGCAAACCTGAATCCAATTC
-ACATGGAGGTGTCCAGCCCAGCCGACCCACAACCTGAAAAACAGCTGCTTGGGCTGAACT
-TGATCTAGATCAGCTGAACTACATACAGTTGCCTTAGAAATTTGTGAGACTAAGACTAGA
-CAGAGAACAAAAGCAAAAGAAAGAAAAAATTTGTCTGCAATGACTGGCTAGGAACCTGGA
-CAGATTCCTGGCAACATAGCTGTGCAAAAGCAGCCCCACAAGCAAAATTGAGCCAGGAGA
-CAGGGTTCTGATCCCAGGCATGGGCCTTGGCAGCTGAAACTTGTTAGGCTGGGCCTCTCC
-CTCGCCAGTTCAGGCAGCCCCTCCTCTGAGGCCTCATGGACCATTCTCTCTTCTCCAAGA
-CTTCAAGATTCCTTCCTAGTGAGtttttcttttttacttttagatggagtctggctctgt
-cacccaggctggagtacactgacgtgatctcagctcactgtaaccgccacctcccaggct
-caagcaattctcctgcctcagcctcccaagtagctgggactgcaggcacacgtcaccaag
-cccagctaatttttgtattttttagtagaaacagggtgtcaccatgttgttcagtctggt
-ttcaaactcctgacctcaggtgatccactcgccttggtctcccaaagtgttggattacag
-gcgtgagccaccatgcccggcACCTAGTGAGtttttctgttacttttttttttggaggcg
-gggtctccctatgttgcacaggctggagtgcagtggtgaaatcatggctcactgcagcct
-caacctcctgggctcaattgattcctccatctcagcctcccaagtagctgggactacagg
-catgcaccaccatgcccagctaatctgtgtattttttgtagagagggtttcatcatgttt
-cccagaccggccttgaattcctgagctcaagtgagtcgcccgcctccacctctcaaagtg
-ctgagattacaggtgtgagccactgcacccagccTGTTAAATCTTTTTTTCAATTAATAA
-CAACttcttttacagacagggtctcactctgttgctcagtctggggtgcagtggcactat
-catagctcactgcagccttgaacccctgggctcaagtgatcctcctgcctcagcctccag
-agtagctagcactacaggcatgtgccaccacatccagctaatttttaattttggtagaga
-cagggtctccctatgttgcccaggctggtctccaactcgtggcctcaagcaatcctcctg
-cctcagcctcccaaagagctgagattacaggcatgagccaccacgcccagctTCTGTGAC
-TTTAAAAAAATCtttttagacagggtcttgctctgtcacttgggcttgagtactgtggca
-caatcacacctcactgcagccttgacttcttgggctcaggcaattaattctcgtcctttg
-gcctccccagtagctaggacacaggcgcacaccaccacactcagctaatctattttttgt
-agaggtgggttttcgccatgttgtccaggctggtctgggactcccggctcccaaagtgtt
-ccAACCACAGGTGTGTGGGCCTTCCGTGGTATCTTAACCTCATCACCCAGAGGCAACAAC
-AGCTAGTATTCTTCTAGTTTTTACCACCCCCACCACCTCAATCCTGCCCCTGTAGCCTTT
-CCAAGTGCCACAGCATTGTTTCAGTTTCTATCTTAGAAAGCCCGGGAGTCTGTGTCCTAT
-CTCCCTGGGGGCATTCAAACCCTAGTCCATAGCCTGAGGCCCACCTATACCCAGACCCAG
-TGTCTTGGAAGCACTGACTTTAATACCCACTTAggctgggcgcagtggctcacgcctgta
-atcccaccactttgggaggcttgggcgggcggatcacctgaggtcgggagttcgagacca
-gcctgaccaacatggagaaaccccgtctctactaaaaatacaaaattagctgggcgtggt
-ggtgcatgtaatcccaTGCCTGTCTCAaaaacaaaacaaacaaacaaaacaaaacaaaac
-aaaaAAACCCCAGTTACATTCAGGATGAATTCTGCCTTCCTTTTTGCCACCTTGGGATTT
-CCATTTCTTTCTCTGAAATAGGCATTTGCATTTTTCCTAGGATTTTTTTTTTAAAACAGT
-TGGAATTATCCCATATACACAATTTTTTCACTTTTCTAATTAACATACATTTCCCCATGG
-Gcttgtgtctcacctctcaatccccagtgtatagcaaagaccaggctcaggggcacttac
-aaatgtttgttgaaACCAAAGACATCCTATATTACAGAAATGAACTTTGGAAAGACCAGT
-CAGCGTGGGTGGGTGAGGAATGCCAGAGACGGGAGAACAAAATGAGGTATACCGTCAGGT
-TTGAAGGGTTGAGGGTTATGGAGGGTTCTTCATAGGAAGTTCACCATGGAGTTCTTGGAA
-CTGTTCAACACACAGAAGCAAGGTCCTCTCCTTCTAGGTATGGCTAGAAATGTTTATCAA
-TAGCTGAGACTCTGATTCCCAGGGTGGGATCAGGAAGCCAGCCCCAGCTGCTGCAGCATT
-TTTTTCCCTTTTTCTCATTACAGGAGCCAAGAAAACTGTCAAAGCAGATGATGCAAGAGT
-GAAGCTGACTCAGAAATACTCAATCCCCCCAGGAACTTCTCTAAGAAATGGACTGACCAT
-CCTGTAAGCTTCCATCTGGAGGTACCTGGGGAAGGGCTTCTCACATTGAGGCCAATAAGA
-ATCCCTAGTGggccaggtgtggtggctcatgcctctaatctcagcactttgggaggccaa
-ggcgggtagactgttgagctcaggagttcaagaccagcctgggcaacacggcaaaacttc
-atctctaccaaaaaaaaaaaaaaaaaaattagccaagcatgatggctcgtgcctgtagtc
-cctggaaggctgagttgggaggatcacctgagcctgggaggttgaggctgcagtgagctg
-tgatggcgctactgcactctagcctgggtaacagagcaagacccgtatcaaaaaacaaaa
-caaacaaaaaaCTTCTAGTGAGTAGAGCGACAGGGAGACAAATCCAGTTTGTAATTTGCT
-ACAGTGCAAAATATCTGGCTTTCCATAGAGGGAGTGGGAACAAGGCAATGCTGGCCTTCA
-TTCAATCAGAAACTTGACTTGTACCCGTTGAAAACCTGTCATGTTTAATGCTTGGATATT
-TTTTCTTCTAGTAaagacactttactgccacctgctggaaaagagtcagaaattttccaa
-atgcaaacatctatggcctccctataatgtagcatccttttactgtacatagtctgcaca
-actgtacaATTTAGAAGAGAAACCAACATTTGGTGTAACTCTACCATATACCAGGCATCT
-GTCATAGAATCTGAACAACCGCTCTATGAAATCAGTACTTATACCCCAATTTAACAGATA
-GGAAATATTGGGacctctggggaagggaggaagaagagggtatcaccaaaaaagggcaaa
-aagggggcttggtctgtattggcaatggaaattcaacttgggtggtaggattatggatgt
-gttacagctttctttataattTGGTACATGCCTAAAATGTTTTACAATAACAATTTAAAT
-CACCTGTGAAGAAAAGATTCAGAGAGGTTAACTGATCAAAAAAATCACACTGCCAGACAG
-AACTCTGTTAGAGGTAGACCACTTGCAGTAACATTACATTGCTTCTCTAATGGTTAAATT
-TAGCACAGAATCAAAGGAGAGCTATAAAGTCTAGGAAGTACTTATTTACATAGGATTGAG
-TCCAGAACATCTTGTGACACCATCTACATATGTTTTACTTGGAGAATAGTCTGAATTTCG
-TATTAcacgttgagcatttctaatttgaaaatacaaaatcctcaaaaatctgaaattttt
-taagcatcaacatgatgcctaaagtaaatgctatttggaatatttcaaatttcagattag
-gaatattgaactggtatgtattccgcaaatattccaaaaatccaaaaaaattcaaaacac
-ttctggtcccaaccattttggataggggatattcaacctATATTACACACAGGTAATACA
-GCAGGGGAAAAGCAGGGAGACTGCAGCATCTAAGTCTACTAAATTGGCCAGGATCATTCC
-TTAGTCTTCAGATACCTATTTATCAGGGTCTCATTAAATAAAGTTACTTGTCATGTTAGT
-TCAGTCTGGCCTGTGGCTTGTAATTATAGCTGCAAACTCAAGGGCAAAGTTCTTAGGATT
-TTGAGATGCTCTTTATGCAACAATACTTCCATTTACTTtgtgtgtgtgtgtgtgtgtgtg
-tgggtgggtgggtgtgtgtgtgtAGGGAGAGAAAGGGGGCAATGGAGTGGAGagtggaac
-tacaatttattaagcacctattattacaagccaagtagggtgttaaatattttcctcgtg
-ccattccattcaatactcTTCGATCCTGAGGGAAAACGAACCCACTTAAAAAAAAAAACA
-AAAGGTTTTAATGAGGATTGCATAAGACATGCAAGGTCACCAGGGAGTTTACATGCAAGT
-GGGGAGATACAAAATAATACAACAAAAGTTCAGGTGTTCTGAGGAAAAAGAAGGGCAAGG
-GTAAGTGATGACAGTGGGGGAAGTCGGATTCAGGATAAACCAATTTTAGACTCATTTTTT
-GAGGAAGGAACTGAGCATGACCTTACCACACAGCCTTTTTAGTTAAGTGTTTCTTTAACT
-AGGAAAAGGCCCTGGGAAGACAGGCTCTCTACTATGCAAACCCAATTCCAGTCTTGGGAG
-AGAATTTGCTGGTGGGACAAAATCAGGTTTTTCAAGAGATGCTTAAATGGTCAATTCTAA
-TTATAACCATACTTGTCAAAAGGTGAAGCAAAGATGAAAGTTAAAAACTAAGAAGAAATT
-AAAATTCCCAAATCTGTCAACCAATCTCTAATTTTCTCTGCTACTTTAGGACTATAGTAA
-TTAGCCATACCCTGAGGATCTACTTTACAAGATATATTCCTCTGACAGTCCCACTCTAAC
-AATTTAATCTATCTTATGTAAGCTGGACAGGCATTTCAAGTACAAGAAACAGAATTCAAA
-ACGTGAAAACGGAGCCATCTATCACACACGGTGTCGGTTGGAGAAGCATATTGCTCAGGC
-TGCAGGGACATTTCatttatttaaatgtttttattaaaaaaaattaaaGACCTTCATGGC
-ACAACTTCTTCCCAGCACAGTTATGGTTTAGTCATACCAATTACAATACAATTACAACCA
-ATAAAGCAAGGTGGGGAGGGCCTTCTGGCTTCAAACTTAAAAAAAAGCAGAGGAAGAGGG
-GAGGGACCACTTCAAACAAAGTTTAAAAATACTTTAAAAAATCTTTCAGAGTAATTGCCA
-ACATAACCTTTCATGTTGGCCATTCCATTTCCTGCCATCTAAGCAATGCAGACACAGGTA
-GTGCTGAGAAATAGTGTCCCAATACAAGGTATACAGATGAGGTAATTTACAACAACACGT
-AAGTTGTTACTCTGTAAACCCTTGCCTCCCCCCCACCCCCCACCCAATTGGGTCTTTTTT
-TTTTTTCTCTCTCTCCATGCTTCTGCAGTGACTCTTAAGTAGCATTTTTAAAAACTTCTA
-TTTATTTTAAAAGGCTCTTGGGTGGCACCTCAGAGTCCTCTGCATTCACCTTCGGTTTAT
-TCCAAGGTCTGATGGGTGTAAGGAGGTCCAGCTGTCTGCAGCTCTCCGCATCAGCCTAAG
-CTACACCTCAATTTCCGAGCTACAAGGATAGGGTATGAAGTCTTGATTTACAACCCTCTC
-CCCACCTCAAAAGAAAGAACTCATTAGTTATAAGTGTCCTGTTCAAATCACAATCCAGTG
-CAAACATAATCACAAATTGCATCTCTGGCACATCTGGTGCTTTTAGCTTCTGCACAAATT
-CAACATGGTAACCCTCACAGCATTCTAGGGCATAAAAGGGTCAAGTACAATAAATATCCA
-CTGTAAGTGGTCATAAGGAAGAAAATCACCCTGCCACACAGTCAGAATGTTTTCCCTTCA
-GCTCTCCCTACCGTTGAGAAGCGCTATAAAAGGAGGCTTTAGCGTCCTCTAAAGTTTACC
-ATTATATTCACTAAAGCCACCACCTTGATAAAGTTACTAAAGCCAAGATGGGTTACAAAG
-TTAGATAAGTTCATTAAATTCAACTCCCCAAACAATTACGTTTATCTATGATGCCTAGGC
-GAGAAAGGCCTGTGAATCTATAAGGTAGGAGAATGGGGAACTAAGATTTTAGGCCTTAAA
-ATATGTTGGAAGAATTTTTCCTAGTTCCCACAAGCAGCTACTGTAATGAAATAACAGGAG
-AAAATACAGAGCTGATGGTTTTGCTATTGTGCTTAAAAAACTAGGCTTCCTCAGTGAAGC
-ACCTGATAAACTTAGGTGGTTGGATTACAGTGGAAAGTCCACTTTACACACACACACAAA
-CACACAAAAACTGGCGACTTTTTCCATCCCCAATCCCTGCACTGCTGAGACACAAAATGA
-GTTTTATGGCAAAGGATCCTTAATCCCCAGAGACGCTTTGGCTTGTGGTGCTTTTTTTTT
-AAGGCCTCTCTGCTCTGCCCGGTACCATGGGTCGAACGAGGGGTGTATAAAATGGGGGCC
-TTGGGAAGCCTCCACGGTACAGGGCTGCAGGCCCCTCAGATGTGAACATGAGACACCCAC
-CCAGCAAGACCTTTACACAGGGAACTTAAATCTAACCTTGATAAATAAAACCAAACGTTT
-ATTTACACCAAAGAATTCCAACACTGGATCTTTCACATATGAAGGACAAAGTATTATATA
-TATACACACAGCAAGGGGTGGCGGGGCTGTAACAAGAGAGTTTATAGTTTTCCCACAATT
-ACAGGTCTACCATTTCAGCTTCAATGGAGATAGTGGCTCTGCTCCTACCTCTCAAGATAC
-ATTTACAAGACTGAGGAGCAGGTCTTCTCACTGGATGGCATGTGAGGGAAGGGGACGGTC
-GGAGGAAAAGAAGGTAGAAAGCTTAAAATGGAAGTCAGTGTGGCCACATCTCCCATTAGC
-TCTAGCATGAAACCTGTACAGACAATGTTTGTTTCTTTTGTAAAAAGCAGTAAGTTATGC
-CCAGTAACTAAATGAATTCAAAATGGCCAAGACAAAGAAAACTAAGAAAGATTTTGCCTT
-CCCTCTCCTACCAGCTATGGAGCACAGCATGTTGGGAGATGAACAGGGAAAAGACCAAGG
-TAAGGAGCCTGGGAGGGAAGGTATCAACATTTTAAACTGAACTAAAAATAAAAGTATAAA
-TGAGTTGGATTTAGGGTTAGATCAGTAAGACATGATTCTTACTGAACAGAAGTTTTTAGT
-ATCTGTCTGCATTTTGGGTAGATTTTCAACATCTTGATGTAACTAAGACACACTTCCACA
-AGAGCCACTAGGATAACCCCACTGAAGCGCTTATGGAGTAAAGTGATGTAAGCGACCAGC
-AAGCAGTCCACTGCTCCTATAGATTGGGtcctcccttccttctttccttccttcctttct
-tcctgcctcccCTGAGAAGCTACATTTTTGTAATCTCTGGAGAAGAGCACGAGATACCAA
-CCCCCTAAAGTGTGGGACGGTGGAGGAACAATGGTGGGAATGGGAAGAAGTCTCCACCTA
-AATGCAGCAGCCGGGATTGAGGCTGGTTTATCTTTGTTCTTTTGTGATGAGGAACTAAAT
-TTGGGAGGGGAGAAAAAAAAATTTGTCCATGAAATATTCCACCTGCAGGTAATTTTTCAG
-GGAATCCCCTGAGTTATGAAAAGTTCGAGTTAAAAAAAAAAAGAAAAAAGAAAATCAGCC
-TATTATAATTTTTTTTTTATGACTGAACTACTATAAATCCACAAGCAACGGTTCAGACAC
-GGTGCTTCTGAAGTGTTTCACCCCTCCCCGCCAGGCGCAAGCTGCATCAAGGAGAGGGTG
-GACTCCCCCACCTCTGCTCAGGCATCAGGAGACAGATAGGGCCGTTACTGCTGAGCGCCA
-GCGGCAGCTGGAACAGGCATCCCAAGGGGGTTGGCAGCAGCAATCACTGGTGAGCCTGCC
-AGAGGTCCAAGGGGTGAAGGGGTTGGCACTGAAGAAATCCCTGAAAGAAAAGAGCTGTCA
-GTGAGCCAAAGACACCAACCATGGCAATCTTACCAGTTTCTCATAGCACTCACTGCAAAA
-GGAACACAATAATTCTTTACTGAAGACTTCCTCTTAGCTGGATTtttacatatacttcaa
-gtctgaccctcacaaattcaagttaaagtggcaagtcctaatcaatttaagagacaggta
-aagaaatctaggcttggacaatttaaggagtttgtccaaagtacacgattaagcaagtgg
-caaccatggttggattctaacccaggcctgtctagGGCAGAGATGTCCACCCTGGTGACc
-agtagccaaccacatgtggctgctgagcacttgaaatatggctagtgcaactgaggaact
-acattttaaattttattcaattgtaattaaatagcctcacgtggctagtcactaccatac
-tgaacagcacaTGACTGCAGTCAAAGCTCATGTGCTCTTACACCATGCTGTCTTGATAGC
-TGGCAGCTTTCAAAATTACTGAAAGTCAATTTGAATGGGGAAAGAGCATTTTCTAAGATA
-AAATTGTGTTTTGGAATTTATTTCCATTTGATTTCTTCCACCTCTCTAATCATGTTTTtg
-tgtgtgtgtgtgtgtgtgtgtgtgtgtgtACACACAGGTAATACATTCACATGGTTCAAA
-ATACAAAAGGTTCAAAAAAGTATACAAAggccaggtgcagtgtctcacgcctgtaatgcc
-agcactttgggaggccaagttgggcggatcacctgaggtcaggagttcaagaccagcctg
-gccaacatggtgaaaccccatctctactaaaaatacaaaaattagctgggcgtcatggcg
-ggcgcctgtagtcccagctacctgggaggttgaggtgggagaatcgcttgaacccgggag
-gcggaggctgcagcagctgagattgtgccactgcactccagccttggccacagagcaaga
-ccttgtctccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatatata
-tatatatatatatatatatatGAGAACATTATTATACATTCTTCTCCACTCCTCTTAGAC
-ATGGCTCTGCATCTCACtttttcttttgagacagagtctcactctcacccaggctggagg
-gcaacggtgcgatctcggctcactgcaacctctgcctcccaagttcaagcgattatcttg
-ccttagcctccaagtagctgggattaaaggcgccgccgccacgcccagctaattttttgt
-atttccagtagagacagggtttcgccatgctggccaggctggtctcgaactcctgacctc
-aagtgacccacccgcctcagcctcccaaagtgctgggattacaggcatgagccactgcac
-ctggccctgcatcttgcgttttaaatttcacattattatattggagttggagatctaaca
-gaacatgaaactcttattctactggctgcaccacattccattaaatggatataccataac
-tgatttaaccagtttcctactgatagctattctcaatgttttgttattacaaataaggct
-acaagtaagtttggatatacattactctgtacagaggtaggatactcaaggggtaaattc
-tagaagGCAGTTAGTTCTTTTCTTAAAAAAGAGGAGGGCAACAGCAATTATTTGAGGATA
-TGTAAGTAAATGCCTTCACTACCAGATATGCACCCACTTGGATGTTGCCTATATGTATAA
-TTCTTATGCTATGTGCCTGTAGTTCCTTTGGAATAACTGGGTACTCTATAAAAATTCACT
-GTGCGTCACAATGATCCAATAATGGAAAACCATTTTACTTATGTTTTTACAACTGATAGG
-CACTCTATAGTTGCTCTGGCACATGTCACGGAACTGTCCTTGTACACATACACACCTATG
-TATAAACCCCACCTCTATACCCCATTTCTTAACATTGTTTCTAAGGGCCATGTAACTACT
-GTCATTTCAAACTATAAGATGAAATGGTGTATTTTTCCTTTTCATGGCTTGGCACTTTCA
-AGCCCCTATGCCAAAAATTTTCAGCCAGGAATGCTGAGATTCTAGCCTAGAAGGGGATAC
-CCTACTCAAGACAGTATCACTAAAGTATACCAAATGTCAAGCATGCTGAAACCTGGTTAA
-AAAAAAGTCACAAGGCCACCAGTACGGAGAAGAGAAGGTATACAAGAAATCAGACCACAA
-AGCTAAGAACAGTAATTGACTTCCACATTTTTTTAAAGAAAATTTACCAATGAACTGACC
-TGACATCATATTGGCGCTGCTGACGGGCGTACTGCCCCCTGGCATGCTAGATGAACCCAT
-TCGAGCCTGGTCCTTCACAACAGTGTCTAGAAAAGAGACAAAAAGGCTAGGTTCTGTTTT
-GCTTGAAAGATTAAACTAATGGTCTGGAAGCCTGAAAGCAGCCAGCTTCATTCTTTGCAA
-TTTATATATACTCTACATTATTCCCCAAAGAACTTAAGGTGGCAATTGCCTTCACCATGA
-ATTAGACAAGTGGTAAAAAGCAGAAATAGCTTTCCTATCAAACTGTGGTAAAAGCTAACC
-TTTCAATCAAATGGTAGAAAGATGAGGTAATTATTTATAGCAGAGCGAATTTAATGAAGC
-CCTGGTCCTGTTGAGGTTTAATGGAGACAAGACACTGTAACTCGGCAAAGACGGTAATAT
-ATTACCAGTGTGTCCACAGCCCAGTACCAAGTAGGCCAAAGCTATAGGTCCATGTAGCTT
-AGGGCTATGACCACATTCTCTATCCCAATCAGCCTATCTATCTGCTTCAGGTATTGGGCA
-AAAGTATAAATGATTCAGTACAAAACCATCACACCGAAGGAAAAATGTCATGTTGCAGCT
-AACATCACAGTGCAGATGGGGTGGGTCTCAGTGGTATTTTCACTTAGGATGGCACAGGTG
-GCTATACTCACAAATCTAAGTCAAGGTGTTCATACAATTTTAAGATTTGTAAGCCTCATT
-AGCTCTTTCCAACGAATGATTACTAGGGACAGGAAAGATACAGGGCTGTGTATTCTAATT
-CAACCATTCCAGACTGAGGCACTGAGAAGTGTCATCCTCACAGTATGAAAAGAGTTTATT
-TAGGAATGCTCTTGTGTCATGTATTCTGTTACAGAAGaattcttccagtaattctgcaat
-gtagttgccatcactatccccactggaagaatctgaggctcagtgtgggtgaattaactt
-TGCAGCAAGCTGACAGGAGCTGGGATTACGACTCTGTTCTATAGGACTCTGCGCCTGCAC
-AAACTCTGTGGGCTAGATATCTGGACTCACAGAAATAGGGGTGCTCCATTGCCTCTCTTG
-CAGTAAGCCGTGACTGGTGGTCATATCGCAGCAGTTTGTCCAGGAAATCCAAGGCCTCAG
-GGCTGACAAGGTGCTGATTTTCACTGTGGACAAAGCGTTCCCATCGCTTTCGAGAGTGTC
-TGCAGGACCAAAAGAGGGCATGAGAAATGGGCCACGTGGGCACAGAAGCCCAACATTTCA
-TTCCTACATTTTTCTTAGTGGCTAACAGCCCAGACAAAAGCAAAGAGGGATCCAAACTCA
-AGAGGGTAGTCTTGCACCGCTCTGCCACTGAGTGGGACAACAAAGCTAACTGGAGACTGG
-AAACAACATAGCTAGAGTGAAAAAAGACATCTGAGTCCTCTCAATTTTAAGAAACATAAT
-TCAGGTTACTTGACAGGACGTGACCGCTTCTGTGTAGCAAGGAGGGTCAGGTGGCTGAGC
-TCACCAGGCCTATTTCCCATCCCCACACATATTCCTGGCATCTCTGCCAATTGGCCAGCA
-AAAGCCTTTGCATCAGGAAAGTCCATCTCCTCCTGTTGAGTGGTTAAGTGTATAAGTACT
-ATATCTAGTCACTACTGTTAAGAGTCGGTTGTCTGCATATAGCCtttttttttttttttt
-tggagacagggtctcactctgttgcccagactggagcgcagccacatgttcattgctctc
-tgtagcattccctcctgggctcaagggaagctcctgcctcagcttcctagtagtctggac
-tactgccacacatcaccatgcatggagtcgagggtctcattatgttgtccaggctggtct
-ccaactcctgggctcaagtgatcctcctaaagttctgggattacagatatgagccaccgt
-gcccagccTGCACATCAGTCTTAAAGCATGCATTTTCTACTTCAATTTCTTTCTCTTGGA
-GAGAGGTTTTTCACTTAAAGAAGCAAGGTAAATTTTGATTTTTGCCTCAACTGTAACCCT
-TCTACTAGAATCTACATTCATTTTGTAGGAATCCTCTAGCTATAACCCCTCCATCAGACT
-CCTGTAAGTTAATTTGAATAAAGGGCCATTCAATCCAATGCCTTTATCAGAGGCCTGCTC
-AATGCAGCATCCTGTGGCACTGGACCACTGACATCCTGACAGTGCTGGCAAAGAAAACAT
-AACTATTTTGAAGATCCTAAGTGCCAGTTCACTCTCAAAGTGCTTAAGCCACAGATGCAC
-ATATTTTGTTTCATGACTTACCTGCCCAAGATATCATTGAAACGTGGATCTAATTCAATG
-TTGTATTTGTCAATATAGTCATATAAATCTTCTGTCCCCAGAACCTTGGCTATCCTCACC
-AACTAGTATTAAAGAAAGACAAAAACCCATATCACAAGCATATTATATTAACAAATCAAC
-AATTAACAATGATTGAATTTACATAAACGGGTCATCATGTCTACAGGTATGAATGCTACC
-TCCTAACAGTTTAGACTTCAACTCAATGTGATAGTGTTAGAAAAAGCAAACTACTTTATA
-AACTGGTTTCTTCCTCTTGAAATGtcaccctggtgaacccttatttttctcccctcaaaa
-cccaattgaagatgtcacttcttttgggaagctcccattgcacactcaaactactcacca
-ctactgccttttgtgccttgtccacatttctactctgaagttatgactgtaacctatttt
-gttgtatgtttgactcccttacaagatcagctatgaactatctgaggggaagaaaactat
-tctttcttttttctgtattcctcagtactgcatgcacttgatacagagTTATTGACTTTA
-ATGGAATTCAGGTTGTATTCTTTGACTCATTAAAATTGGACATGGTGCTCAAAGGGAACA
-AGACAATGGTACCTTCCACAAGGTCCTAGAATCATTCCAGGTTCTTGTGAATGAAAGAGC
-CCTTTGATCTTCAAGGGGGAAGTGGAGTTAGTTTAAGAAACATCTGTAACTCAACCCATA
-TAAAGAGCCAAAAGGATCACAGAAATACCACATATGGGCTCACATATTGGAGAAAACACC
-ATATTGGAGATAAGGGTTTATTAGGAGAATTCTAAGGTAATGTCCTATTTTAAAAATCTG
-GATGACAATTTATATGTATTCTTCACAATAAAATAAGCAATGCAAATGACAAAGACTAGG
-GGGGAATGTCTGATTTCAAAAGGCTAAGCTGGTAGCTCCCGAAACATCAATCTAAGGATC
-AATATCGGGGTGGCTGAATAAACAGTGAACTGAAAGTTACAGGCAGTGCTGGCTATCATT
-GCATTAGGCCAGTACATTTTTCAATGGGTATAACATATATTACCTGATCATAATTGTCAT
-GTCCATGGAAAAATGGCTCCTTCCGAAAGATCATACTTGCCAGCATACAACCCAAACTCC
-ACATATCCAAACTATAATCGTACATCTGCATAAAAGTAAACTCACTGTTATTATCTGTGA
-ATCCTCAGGCTTGTCACTTCaaaataaaaaattaatttttaaaattaaaaaaaaatCACT
-CCACTGACTCAAAATCAAAACACTAATAACATCTTCATATAtttctttttagtctttctt
-ttttttttttttggagacagagtctcactctgctgcccatgctggagtgcagtggcgcaa
-tcttggctcaccacaacctccgcctcccgggttcaagcaattctcctgcctcagcctcct
-gactagctgggactacaggcgcgtgccaccatgcctggctaattttgtatttttagtaga
-gacggggtttcactacgttggccagtggtctcaaactcctgacctcatgatctgctcgcc
-tcaggttcccaaagtgctaggattacaggcatgacccaccgtgcctggctAGttttttct
-tttttttttttttttagttttttttttagttttttcttttATGCATCTTTCACTCGGTTT
-TAAAACAAtttttactttttttttttttttttgagacagagtcttgctctgtcgcccagg
-ctgcaggggtgtgatcttggctcattgcaactcagcttcccaggttcaagcaattctctg
-cctcagcctcctgagtagctgggattacaagcgcccaccaccgcgcctggctaatttttt
-tgtatttttagtagagacagggtttcaccatcttggccaggctggtcttgagctcctgac
-cttgtgatccacttgccttggcctttccaagtgctgggattataggcgtgagccactgtg
-cctggctCttttttttttttttttaaagacacagggtcttgctctgttgcccaggctgga
-gtgtagtggcgtgatcatagctcactgcagcctccaactcctgggcttaggcctcctgag
-taggtaggattacaggcatacaccactatgctcagctaatATACATACTATTTTGAATTG
-TTTTCTTCACTTACATGAAAAAAAAAAAAAAAAAACCTCCAAATTGTTAGCCCATGGAGA
-CCATCTAATGTGTATCATTAGTATTTTATTACATAAATGTTTCAGAATTCAATCTTTAAT
-TTTCCTATAATAGGACAGTGTTCTGTTTTTCACAATTATTAGTAATACTGTAAAAACTAT
-TTTTATGCATAAAATGCTTTTTGAACTCAGGGCTATAGCCTTAAGACCCCAAGAAAGAAA
-TTCCTACAAGAACAAAAAGTCTGAAACTTTTAAAATCAACTGATAATAACCTGGAAAGAC
-TGGGCATAAAAGATACTCCCAAGAAAACTTCAGATTTTTAAACACTTGGCAAATCTATTA
-TTAATTTGGTTCCTTTCTCCTTTTTCTGTGAGGAGAAAGAAGGCTTTTTGGGGGAGCTGG
-GGAGAAGACCTTTTTATTTAGTATACAATTCAGAAGAACAAGAAAACATTCTTGAATTTA
-CTCTGAAGATTGGTTAAACTTAGTTACAGGATgggcatggtggctcatgcctgtaatctc
-agcactttggggagccaaggtgtgaggatgggttgtgcccaggagtttgagatcagcctg
-ggcaacatagtgagactttctctctacacacaaaaaaattaaaaattagctgggtgtggt
-agtgcacgcctgtagtcccagctactcaggaggctaagctggaaggatcacttgagccca
-gaagttcggggctgcagtcagctatgatcatggcattgcactccagcctgggcaacagag
-caaaaccctgcctcagaaaacaaacaaaaggccgggcgtggtggctcacgagggcaggag
-atcgagaccatcctggctaacacagtgaaacccagtctctactaaaaatacaagaaaaat
-tagctggggtggtggtgggtgcctgtagtcccagctacttgggaggctgaggcaggagaa
-aggtgtgaacctgggaggcggagcttgcagtgagccgagatcatgccactgcactgcagc
-ctgggcgacagagtgagactccgtctcaaaacaaaaacaaaaacaaaaacaaaaCAGCTT
-ACAATTCAAAACAGTTCTGGAACTGCTGATTATAGAACATATCTTTGGCTACTTTCCCTC
-AAGTCAGGATCAAATGCAAACCTATTCATATTCTACCGACATTATGACAATAAAAGTAAT
-GTAAGTCATGGTACATGAATTAAGGTGATTTATATTTTACATTTCATATAAAAAGGACAG
-CTGTGAATGTGCATTAAGTGGCCTACCTAAATGCACAAAATGATACTTTTTTTTTTTTGG
-TAAATTATGTGCGAAATAAACACAGGATCAAAACTGTGCCTGCCCTTCTGTTCTTACCTG
-ATAGTCTACAAGTAGCTCAGGACCTTTGAAGTATCGGGAAGCAACTCGGACATTATATTC
-TTGGCCAGGATGATAAAACTCAGCCAAACCCCAGTCTATTAGTCGTAGCTGAAAAAGAAT
-AAACCATGAGCAATCTTATCTTTCTCTAAGCTACCCACACTGTGCCATTAGCATACTCTT
-GAtaaaatataccagacacgtcactctttactgaaacccctccactgactacttatagcc
-tttagaatgaaaataaaacttcttagcttgacaaacctctttctccatgattttgttccT
-GGAAGACACAATCTCACCTGTGCTTTTACAAATTTCTTAAACTGCTCAATGACTAAAATG
-TCCCTACTACCCAGCCTATAATCCTATTGGTAAGCATTTCCTTAACTTTTGGAATATTTA
-AGTCAGCTTCTCAATGAAGTCTGATCATTGCCTTCAGCCCCCTGAATTTTAGATATATTT
-CTTTAACAGAACCTAAACTCTTTATGTTTTCTACCTTtctttttcaatatggacgacaag
-ctccttaggggtagggactgttttattcacctttgtaattttcagaattcaacataatgc
-ctggtatacaggagaaaaatgaataaatatttgctggatagatgaaATAACAGAAAAGTC
-ATACAATACAGCTTTTACCAAAATGCATCCTAAACATGGAAAAAGGGGTAAGAGGCAAGC
-TTATCTGCCCACTGTGCATAGCATGACCATGATCTGAAGTGCCAGCAGTAGGCCCTGAGG
-AAAAACATCGGACTGCTCTGGCACTAAGTTTACTGCCTGTATCTcaaaactaaacctttg
-attactccctgcaaaagcacctccactcagtctccccctgttcggttaaaggtgatactc
-atcctgtcatacaagccaaaacttaagattcaccctggattcttgattccctcagacctc
-acatttaatctgtcaaaaaattctgaaggttctatcatattgtgaccattatcatcacct
-ccactgccactgccccgatccaagccaccaccacctcttgtttgatatattgccatagcc
-ccttctcctaactggtctcactgctttcactcttgccctctagtctaAACAGtttaataa
-atactaaatagtttaatagttattttaaaaataattaaatatttaaaaataaatataaaC
-AGCTTTTTAAAAGGATTGTTCAGGTTGCTATGGAGAGattatagattcacaggaaattgc
-caaagtagtagagattctctgcaccctttacccagtttcccctaatagtaacatcttaca
-taactacagtacaatatcaaaatcaagaaactgacactggcacaattcagaaagatctta
-ttcaggtttcaccagttttacatgcacgcatgtgtttgtgtgtgtgtttctatgcaattt
-catcacatatgtaagttgatataatctcctcaacaagatatagaactgttccatcaccac
-acacatgtcctgtgtgttagcccaacccctggcaacccctctgctctttatctctatcat
-tttgagaatgctacaaaaatggagtcattggcatataactttttttgagactgccttttt
-tcactaagcatgagatccatccaagttgttgcatgtgtcatacttctttcctttttattg
-ctgagaaatactacttcataataatattatatggtatggatatgccagtttgtttaacca
-ttccctcattgaagggcacttttccccatttttttttttttttttttttgagacgcagtc
-tcgctctgtcacccaggctggagcacagtggcacgatctcggctcactgcaacctccgcc
-tccggggttcaagcaattctcctgcctcagcctcctgagtagctgggattacaggtgcat
-gccaccaggcccggctaatttttgtatttttttagtagagacagggtttcaccatgttgg
-ccaggctggtcttgaactcctgaactcgtcatctgcctgccttggcctcccaaaatgatt
-acaggtgtgagccactgcacccagcttttccccccaattttaagctattacaaatatagt
-tgcattcatatataggcttttgtgtggacctaagattttgttgctctgagataaatgcca
-ctgcaggattgtatggtaagcatatgtttagcttttcaagaaaccaaccaactataaaac
-aatagttaagcattttccaaaatgccaaactttgcattcctaccagcaatgtatgagaga
-tcaagtttcttcacatttttgccagcacttggtaccatcactattttttattttagctgt
-tctaataaatgtgtagtTAActtttaaatttcaagtgagaacatgctaaagcttagaata
-tgcaaaagctctctatcttcagagaaaaggcctaacaatgaccaataaggttttacatga
-tttggttttacctctttgatttcatttcctccttctttccccgcattcattctgtcccag
-ctttatccttgctgctgctcttccaacatgccaaacatatccttacctgaagggcttttg
-tacttgctatttactctgccttgggacatgtttcttcataagactgcatggctgggtccc
-tcccagtgctctctaaaatgtcacctttccaatgaaaccttcccttataactggtttaaa
-actgcaaataccctcttgccattccctattcgttttttcttctacatcaaaataactttc
-tatcccaccagcctccctaaatgtagctcctaaaagacaagcatttattgtatgttgagt
-tcacttacatatccccagccctagggtggtgcctctgacatggtgtgtgtctaaaagtaa
-ttcagttgcataaataaatCACCTGCCTCCCCAGAGACCACAACAGGCAAGTCATCACAG
-CTTGTCACCTTAAAAAACTGAAATGCTAAAGCATGTGGCCATTACAGCTCTCATGTAAAA
-GCATTTGCAGACAACAGGGCCCTTATGACATCCAATAAACAGAAACAGCATTTTCTGTAT
-ATCTCGTCCACTTAACTGTGCAcatttaattctcacgaatacctagtcgcctgcagggct
-attattacccacactgtacacgtaagaaaaagaaggcaaatggagagaaagtagtttCTC
-AGGAAACCAGTTACTCAATAAATAAGGCGAGAAGCCACGTTTCCGGGCTTAGAAGATGAA
-CATTTTGCCCACTTTACTCATGTTTCCTTCTTGGGAATATTCTTAGGAATATAAATAATG
-GTTCAAACATGTTGACTTGTAAATTCGTAcattcattcaccaaatatttctcaactgccg
-aataggtactagggcctgtgacaacacaagggataaagtgttgaaGATGGGCAATTAGCT
-ACATCATGTAGATAAATAACACTTGTCAGCCTATCACTTTACCTTTCTGTGCTCATGATC
-AATCATGACATTATGGGGCTTGACATCTCTGTGCATAATTCCCATGCTGTGACAATAATC
-CAGGGCCTGTGGGATGAACGGGTCAGAAAGGAGTTAGCCTGAATAATACGTAAGAGTCCT
-TTACTTTTCCCTCCATGTAAATTTTCCTTTTAGCCTCACAATACCCCTGGGATTCAAGCT
-GAGGACACAGTCACTTCCACAGCAATGCTTCAGAGACTTGTTCATGATCTCACAGTCAAG
-CAAACTCAGCTCTCTGAGCTTAGAGATCTTTTTCTGACACAGTTGTTTCAACATGTTTTC
-TGTCCTAAAAGACCCAAAGTATACCCAAATTGCACCACTTCAAATTTTTCTGTCTTGTCC
-AGATCCTAGATTATTTCCACAGACCCCTCAAAGAAAGAAAACAGATCTTTACTACAAACC
-TCTTATTCTAAGAACAGTAATTCTTTAGCCATTAAGAGTCTGTAAcagaggttggcagac
-cacaggccaaatttggcctgatgtctgcttttgtaaataatgttttattgcaacatagcc
-atgcctatttgtttgcatattgtttatggttgctcttgtgcaacaacagcagacttgaat
-agtgtgacaaacactacatggcccacaaagcctaaaatatttactatttggccctttaaa
-gaagtttgccaatgcctgATTTAGGTCATCAAATCCAATCTGAAATGTTTCCAACCTCAA
-ACTAAAGGGAACTGAGTAGTATAATCTTTGGGGTTTGTTAATCCCAGCCTTTCAGTCAGC
-CGACGTTGTTGGCCAAATTCTTGTCCTTCCTGAAGGGCAACTTGGGTTCCTACAGTTCCC
-AGGGCTGGGCAATCATATCTGTAACTTTCTAAAGCCTTGCTTGCCACAAACTGCATGAGC
-CAATGGAAAGATCAAGTATCTCTGCTGGCACAATCTCCTCAGGGGATTTCTAAGGCTCCA
-ACAGCAGGCTTTATGTCAACTCTTGTTTAGTAAGAAAGCTTAGCCAACTTTTAGCAATTC
-TCTCTTCTAGGAAGCTGATCTTGTGGCTACTGGGAACAAGATATTTGGTGACCCCACTTT
-AGAAATGTAAGTAAATTTTCAATTAGCATCTATAAGCAGAAATTTACACAATCCTTAGGA
-CAATTACCCTTTGAGAACTGAGTTAAAGTTTACTGTTTTATTTGCTGACTCTTAAGTGAG
-ATAAAGTATACCAGAAGCTAGCACGTCAGGTGTTTTCACGAGTTTTGAAAATTTAATATT
-AACTTACATAGGGGCCACAGAAATTACAAATATTTGTTAAGGGGTCAGTCCCAGCTATCT
-TACAAATACCCTTTTTCAAATTGTTCTAAATTATACTCCCACTAGACCCCATTCCATAAC
-CCTTAGCACAAGGGTTCTGATACTATTATTATTAAtttttatttatttatgtatttagag
-acagggtcttactctgtgctactgcactccagcctgtgcaacaatcatagctcactgctg
-cctcaaattcctgagatcctcctgtcacagcctcccaagtagctggaattacaagcataa
-gccaccatacccagctaatttttaaattttttgtagagacagggtctcactatgttgctc
-aggctggtcttgatctcctggcctcaagcaatcctcctgccttggcctcccaagtagctg
-ggacttacaggtgcacaccaccatgcccagGTAATTAAACAAtttttttttgtagagatg
-gggatctcactatgtcacccaggctggtcttttgatctcctggcctcaagcaatcctcct
-gcctcagccttccaaagtgctgggattacaggtatgaTACTATTAACTTATTAAAAACTT
-ATATAGAGGTCCCTTCTTTCAACATACTTTACAAAGTTAATCTGCTGGCTTTTCTACCAT
-CAATTGACTATTTAACAAAAAGAAGACCAATTTAAAAAATATTTAGTATTCAAGGTTCAC
-TTACCTTCAGAATCTCATACATGTAAAATCGAATATCATAGTCTGTTAACGTCTGGTACA
-ATTGCTGTTAAAGACAAATGTTTGAGCCATGAAATAATGCTGACAGAAAGGCATTTTTCA
-CCCTCACTCACAGTAATTCAAACCAAGACTTGGCTCATTTACCGTTGTTCCAAGATCTGT
-CCATTCACTGCCCTCTATTTCTCCAACATTACATTAACTTTAAAGAGATACTTTGGGTCT
-TCAACTCTTAAAAATGAAGAATTACTTAAACATATATTGCGGAAGCTATAATCCACTGTC
-AGAAACATACTGATCTAGATACGTTAATATGCACTGACACCCACCTATAATTTAGTTTGC
-TTTTCATGTATCTTCAGACCTTCTCAAAAGAGGCATTTTGGCAAATATACTGCCTCCTTA
-GTAGGGAACTAACTCATCTTTGCCTTACATAGTTGGCCCTGCAGATCACCAGTGGGTATG
-CAGATGGCATGATACCAAACCTGTTGAGTCAATTTAACAAAACTATTCTTGTTCCAATTG
-GAAAGTAAACTCTGAACAACTGTTATGTATCCTTTCCAGTTTCCAAAGAGTTGCAGAATG
-TTTTTTACATGGACATATCttttttttttttttttttttttgagacagggtcctcactct
-gctgcccaggctggagtgccgtgctgcaatcataactcactgcaacctcaaactcctggg
-ctcaagcgatcctcctacctcagcttccccagtagctaggactacaggcgaaagccacca
-tgcccagcCACAGGTACGTCTCTTTAATGGTTAGCAACGTCTTCTGACAAAGTTTTTCTT
-GAAATTATCATTCTGACTCTAAAGCAGTTCCTCTTCCTTTCTCCCTATCTCTGCAACAGA
-ATTCACTAATTTATTAATATATAACATTCTGGATACTGGACTGGTGGAAAGGCAAATCGA
-AGATTTTTACTTTTACTCCAAAAGAGTAGCTATATTCTTCTGTAAAATTGGAACTGTGTG
-AAATAAGTAGGCCACTGGATAGACTGGAATTCTGAGATATCTCTTATAGAGGTTTGTGTT
-ATGGCAGAATTTGACATTATCCTTCCTCGATCCCTGCCTTTTAAGATCTATAGCCCACAG
-TTTATGAGGAATCCTAAGAAATAAGCAGTCCCTACTTTTATACATACAATATATTTCTTC
-CTGAACACTATTGTTTAAAGCGAATTGCCATATGGCCAGATCCTAAGTGAACGTGTGTTA
-CTGCCTTCATTAGGTTGGACATCAGCAGAAACTGTCAACTAAGTAGTGAGAAGTCAATGT
-GTTGGTCATTAAAAAGAACATTAAACAAATGGGCAAAATATCAAGATGCAGAAAGTGGGC
-ACTGCTTATATAGGAGTTCTTCTATCTTAAAATTTGCACTGTAAGGATGAAAAGCTTTTT
-AAAAACAAATGCGAAGCAAGCTCTTCTAACAGCATCATCCCCAAAGGCTATGTGGTCTAA
-AAACCCACTAGCCCGAAACAGTTGGTTATATATTATACCTTGAAGTCTGTGTTGTTTACG
-TGTTCAAAAACCAAGGCGGGGGTTCGTGACTAGGGGAAAAGAACAAAAACAAAAACACAC
-ATTAGCAATAGCCCTGACAGCTTTAATGGGGACAATGTTTGCGGATGCTGCGTGGTGAAA
-TTTGGCAGTCCTCGCCTCAGTAGTAAGAAACCCTCTATTGCTACAAGCCCTCCCCGCTCT
-GATCATCACCGCACTTAGGTCATTTTTGGGATGGATTTCAAACAGAAGACATGGAGCTGA
-AGTCTCACCAGGCTCTAGGCAGCCCGACAATGCGCCCATCGCCCATCGGCATCGGACCTG
-AGTTTGCAAAATGGATTAACACATTTCAGTTTCCAGTGCTATCAGTCTCTTAGCCTAGAA
-GAATAAGAAATAGTCTGTGGGTGGAGGTCTCTTTGAAAGAAAGACCCAAGCTAGTTAAAT
-GGTATATCTGATTAAGCACTTTCAAAGCAGGACTTAATGATGAGGGTTGGGGGAGGGAAC
-AAAAAGAGGCCAGTTGTGCTCCAGGTCAAACACCATCTCAGCTCTGGCGGGCCTTGCTAA
-CACCTACTATACTCACCACAGGGTCTTTTACAATGTCTGCCAGTGTGATGATGTTGGGAC
-CTCCTCTCAAATTCTCCAAAATCTTTATTTCACGCTTAATTTTCTTCTTTTTTACTGGCT
-GAAAGGGGAAAAGTACATCAGCaaaaaaaaaaaaaaaaaattttttCAGAGTATTTCAAC
-ACGTAGTGTAATACATAAATGATAAATGGCTTACTtatgagcacaccttgaaggaagaaa
-atgtgtcacattcgtctctgaatccttctcctagcactgtgccaggtattctgcaggtac
-ttacaaatgttgaattgaaagaaAAAAAGATTTCTATTCCAAAGACCAGACACTTCTGCA
-GAATTAGCATTTCAATCATCAGTCTTGATGTTAATGTTTTAAAACATGTTAAACATGTTA
-ATGTCTTAAAACCTTACAAAGTAGCAATTTAAATCGTTAGTAATACTAAAGTATATCAAA
-CTTTTTATCAATTAGGATGAAACATGGGCCCTTTCCATTTCTTCCTCTAATTAGGGCCAA
-CAACAAGGATGGCCAAAACATCTTTGTgtagcacaaccctgagggtaaagggtgagtctt
-ggagtcacaatgcccaatgtgaaacctacctttactacctgctggctgttaatggcaaac
-tacataacctctctaagcctttcattaagtgtaaaatgagtaacaagagtacccatctca
-taagattgttgcaagaatcaaatgaggtaTTCGAAAGATTTCGGAATATGGCTGAAACAT
-AACATAATAATAACTGTCTAGCCTGATCACCAATGCTCtttttttttttttttttttttt
-gagacagagtcttgctctgtcacccaggctggagtgcagtggtgcaatcttggctcactg
-caacctccgcctcctgggttcacgccattctcttgcctcagcctcccgagtagctgggac
-tacaggcacccgccaccaggccaggctaatttttgtatttttagtagagacggggtttca
-ccgtgttagccaggatggtctcgatctcctgacctcgtgatctgcctgcctcggcctccc
-aaagtgcCAATACTCTTATAAATGAACCCCTCCATTCTAAAGAGTATTCTGCAGAGCATA
-TCTTAAACATTCCTTTGTCCTTACCCATTCTTTCCACATCTGTTCTAGTATGGAATCCTT
-TTCATTTTTTTCTGAGGAGGGCCTTGGTCCCACTGCACCTCCTTTATAAAGCCttttttt
-ttttttgagacagagtcttgctctgtcgcccaggctggagtgtagtagcatgatctcagc
-tcactgcaacttccgcctcccgggttcaagcaattctcctgcctcagcctcccgagtagc
-tgggattacaggcgccagccaccatgcccagctaatttttgtatttttagtagagacagg
-gtttcatcatgttggtcaggatcgtctcgaactcctgacctcatgatccgcctgccttgg
-ccttccaaagtgctgggattataggcatgagccactgtgcctggGCTTATATTATAAAGC
-CTTCTCCTGAATAGTCTAAAAcagtgctggcccaaaggaaatataatacaaaccacatgt
-gtaattttaaatgtgttagtagccacatcaagaaaattttaaaaaggacaaaattaatgt
-actttattaatctaaaatcttaacatataaatcaatataaaaattattaatctattttac
-ctttttttgtattaaacccttgaaatctaatgtattttactcttacagcatatctcaatt
-cagcccagccatatttcaagtgcttaacagcctcatgtggcctgcgtgcctgctgtactg
-gactgtgcagGTCTTTTCCTAGGGTGTTGGTCACCTCAGACTAGATGCACTGCATATAAC
-TCTTAGAAGTTAAGTACATCTCATCTCTTCATTAACAAGATTGgtggttactaaagtttg
-atgaccaacaatcacctggatttttttaatatacagactcacagaacccaccaagattca
-ctaaatcaaaatcttgagagggaaacgggggatttatttttagatactttccaggctgat
-GATCCAGGTCCAGAAACTACCAAATAATACTATAAATTCTTTTAACTTTGTCTTAAGCCT
-CAAGCACATGATAGCAGAAAGCAAGCAGATTTTGGAAACATTGACAGTTCTCAAAACCTG
-GCTTTGTGGTTGTGCAGTGTTCAGAAAAGCATTTAAATGTTTCTCACTGCTGAAAGGGAC
-TATACTCGCCTGTTAGTGATTTACATACCACAGTTAGAACAGGTCCAATGCAAAGTGGTA
-CCCAATAAACAGAAGCTATTTTACTAATGACTTCCATGTAGTCCATTGAATTCAACCCAC
-GACCTCTTACCCAATACAATATCTACCTAAGAAACAAGATAATATAAGTCTTCTCTTCCT
-GCTTCAACTATTCAGATCTTTATAAACTGTTATATTATCTGGGAGATCTTTCCACCCTGC
-AGAGACTAACCCAACAACTTACCTCCTGTTTTCCATTAACCCAACTGCTGGTTTTTTAGT
-GGAAAAAAAAAGCTTCTGGTTGACAAAACTACTCTACAGAATGCTTCAAATCTATAAACT
-TAAAAAGCTGGTTTGTGACAGACCAGGCAGCTGACTCAGGCCCGAATTTAATGCGATCAA
-TGCAACTTTTGTCTTATTAAATAGGGGAGATTAAAAATTTTAAATATGGTTTACAAAGGA
-AATTCATCTATACTTACACCACCTACCCACAGTTACAGTAAAATATACAATACAGTTAGA
-AAGACTGAGCTGAAAAAAATCTTTCTAAATCACCCTTCATTCAAAATCATCAAGGGCTCA
-CAATTACCTAGAAGAGATAGTCATATAATTTTAAGACTGCAAGGAAATGCAGAGATTATT
-TTTTCCAGGCCTTCGCCAACTTAATCTCTCTTTCCAAGTTCAACTCCTATGTATGGTCAC
-ATAACATCTTTCACATGAAATATTTCTCTCACTTTTCCCTCCTCCTCTTTTCTTATCTTG
-GTGCACTCTACAGCCTGCTTCCCTTCACCACTTCCACCCAACACCTATCCAAATCCTCCT
-CCCATTCAGCCTGAAGACAGCTCCTGGGAGCTTTTCCTAACTACTACCCTCTTCTGAACT
-GTAGACCCACTATGCATGCTTTTCATGTGGCTCTAAATAATAATATATCACCTCATTCTA
-TCATATACCTTTCCATATGAATATCACCATACAATCACAAAGAACTCCAGTCTCCAACGT
-ATGTATATATACACACAATTTTGTGTTTGATCCtttttgttttttgagacagggtctcat
-tctcatcgcccaggctggagtgcagtggtttgatcatagatccgtgcaaccttcaacttc
-caggctcaagcgatcctcccactttagcccctcgaggacctgcgactaaaggcacatgcc
-accatgctcagccaaCATTCTTTTTAATAGATGGATAAACATGTCCTAGGTTAAAAGGAC
-TACTATGGCTAGTCACCCACATGTTTTGATTTCCAACCTAGTTCTCTTTCTACATATTTC
-AAGACAGATATAAATACTTAAACTCTCTGGTTCTCAAAGGGCATGTgaagcaccccagca
-atgcacaggaatactgtggaacactttacatttttgaggaagacacatcaacccatcgtt
-gaatctgccagacactgggtgcactgccagcttgaggtggttcgtagtttcaacattaga
-ttgtgttacactcctcgtgatggattgtgttatactcctcgcgatggcatatttttgtga
-agctgggtttgcagtagttgctgtggtaaaaagcaagtactgcacaaaaatcaatgacag
-gaaatgagggtggtggtgtccaaccaatgacaacatttgaaaagctatgcagcaacaggt
-ctacataacccaacagtaacaaattatagttatataagaacaaatttaacttttttcttt
-taatttatgtgaataactttttaaatggctaccaagttgctaagatataaatacttagcg
-ggcaggcgcagtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcggat
-cacctgaggtcaggagtttgagaccagcctgaccaatatggtgaaaccccgtctctatta
-aaattacaaaaattagccgggcattgctggcgtgcatctgtagtcccagctacttgggag
-gctaaggcaggagaatcgcttgaacccaggaggcggaggttgcagtgagccgagatcgcg
-ccactgcactccagcctgggcgacagagcgagactccttctcaaaacaaaaacaaaaaca
-ataaaaaaaacaaaacttacttagctatttggaccttgctacttaatacagagaactatg
-aggtatttcttgacttaggagtaccgtgaaaaattaaagacagtataagtgttataaatt
-gagaaagtttggaaacttctACTTTTCAGTGTCAAATATGAAAAAGTTCCTGTGGTAAGG
-AACTATATGCTAAGTTCCCAATATATGACAGTGCACAGCATAGTTATAACTAAATTAAAA
-GTTGTATATTGGTCTCCCAGAGGCCAAATCtggcctgtgcattgtttttttaaaatcttg
-agccaacacttaaaagtcaggaaaattcatatacaaatataaatttctggcttttatttg
-caaaacagagtatcaagcaacaatggacttgcattactgcagggcaatcatcagcttcag
-ctgagaagcagctaactccttttgaagaggcatgtgtttcccagtttgtttcagtcccta
-ccactcacatcacCTAAGCAAGGGCAATTACACCCGACTAGCTGCACTAATATCATCTGT
-CTGTCCCCCTCGAGTCCTGTGACTCCTCATCTTTACAAAGTAGAGGCAATGATTTATTTA
-TTGAAAACAAAAGCCTCATTATATAATGAAAAGTAAAGGAAATAAGTATTAGgcaataac
-tgggagagaagagactgtacctttgctcccttactctgccacaacctagctatatgagtc
-aactcaaatcacttctcttgcttcagtttcccgatctgtcaaataagcagaacttgttct
-attgagttcataggatACAATAAAATTTTATTTATTTGCTTTGGCACCAAAAACCTTTTA
-AATGCTGTTTTAAAAAAGTCTTCAAAACTACTTTTAAAAATCTATATTCCAAATACCTCT
-GAAATTATCTCTTGTACTCACCTTGAGAATTTTAACAACAACTTTTTCATTATTTGTGAT
-GTTGATGGCTTCAAATACTTCACTGTATTTACCTCGGCCTAATTTTCGAACCAGCTGGTA
-GTCATCTTGATTTCTGTGGACACAAACAAAATGACTTATAAACGGTCAAATTATCAGCAT
-CAATTCAAATTACAGGAATCTATTACCAGCAGCTGTAATAGAAATAAGAAGTATTTCAAA
-CAATTCCCAAATAGGtttttttttttttttttttttttttggagatggagtctcactctg
-tcgcccaggctagagtgcagtggcgcgatctctgctgactgccagctccacctcccgggt
-tcacaccattctcctgcctcagcctcccgagcagctgggaccacaggcgcctgccaccat
-gcccggctaattttttgaatttttagtagagacggcgggtcctcaccgtgttaaccagga
-tggtctcgatctcctgacctcgtgattcgtccgcctcggcctcccaaagtgctgggatta
-caggcgtgagccaccgcgcctggccCATTGtattttttttttttttaaattaGGCCAATT
-AAAATACGTGTGTTTCAAATCCTAGAATTAGAAAAACTTATACCTTTCAATTATTCTTTC
-TAATCCCAAACTGTTTACATCTTTATTGGCACATGACATGGAGCTGGCTTGTATTAAGGT
-TTGTTCTAAATACGTTTGTCTCCAACAAGAGACAGCTTTCCCCAAGAGAATAAttttttt
-ttttttttttttttttgagacggagtcttgctctgtcgcccaggctggagtgcagtggcg
-tgatctcggctcgctgcaagccccgcctcccaggttcacgccattctcctgcctcagcct
-cccctagtagctgggactacaggcgcccaccaccacgcccggctaatttttttgtatttt
-tagtaaagacggggtttcaccgtgttagccaggatggtctcgatctcctgaccttgtgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgcacccggccG
-GAGAATAATTTTTATATATTCTTGTCCCTTAGTGCTTGGTCCAGTGTTGGCACTTAGCAG
-GAACTAAAAACATTTTGCAAGACTGTTTCAATCTAGCCACACTTTGGCAGCAGCTGATTT
-TTAACAGGCCTCTTTGAAGGTAAATGGCTTTCAAATGTATAGGCTTAATCTATTTGCCCT
-CCAGGGCAAGCTCTGGGGATAGTCCATGCGTAGTACGAAGCACATTATAGATTGTAAACT
-ATAATCAGCGATCCCCTCCTCTACATATACCCATATTCTGTGACCAATAAGCAACATCAG
-AGGTAATAAACAGAGGTAGAATAAGGGAAATGCCAACATTTTCCTCCTGCCCCTGCCTGC
-TTCCAATGTAGAGCGCTTTGCTCTGAAGAATGACAAACACAGTTCCAATAAGGCCTAAAT
-TCTATCCTACTGGATAGAATCCTCTGGACCTACTAAGTATCCAATATGAACCAAATCAAC
-CACCTCAACCATTCATTTTCCTCAAGTAGCTAAAAAGAAAGTGAATGAAAAGACAAAAGG
-TACTAAAAACAATGGACAACATAATAATCATGGCAGGTGTAGGGGAAGAATGCTCCTACT
-TCTGGTTGAGTTCTCTTCCTATGGGAGGGCATACAAAACAAATGCCAGCAAGCAAACAGA
-ACCATGCCAAAAGCCCAAAAGGGCTCTTTAGTGCCATTTAAGCAGAACCAAGTGCAAAGC
-ACTCAATTTGAAGATAGCGGCTGAAATTCCTATAGTAAACACAGTGTCACCTAGAGTCCA
-AAGCCTGTGACATAAGAGGAGAATTGTTAGATTATCAGTAATAACAACATTTATTGGTAC
-TAAACCACACTGGCATTTAATGGTGTCTTTACAGCATACAGTGCCTCTGTATTCAGAGGC
-AATGTATTTACTGTTAAGAATCATGGCATACTCaaattagctgggtagggtggaaggtgc
-ctgtaatcccagctactcgagaggctgaggtgggagaatcacgtgaacccaggaggcgga
-ggctgcagtgagccgagatcacaccactgcactgcagccagggcaacagagcaagactcA
-TTTCCACACACACACATACACAAATTCATGGCATACTCAAGATTAAAAATACGCCCTATG
-ACAATTTAGGGAAGCCATCCACTAACCACTTACAGGTTACAGAAATCACATGCAGTCAGA
-TATAAAATACAGCATACAGGAGCTGTAGCTTTAGTTTTCAAATTGCTTTCTTTTGCACTT
-GAATGTCAAAATGCTTTTATCACAAAAGTATGATCTGAACAATTAAATGTCTACCACATT
-GGGACAGGAAATGCAAACATCCAAATGAGTCTGCACAGAGAATTAGGAGGGCAAACACAG
-CTGTTCAGGCAGACTACAACTGTTCAAGATAGAATTTGGGCTGAATTCCATGCTAAGACA
-TGCCTAGTCTCAGGATAAGGGCAAATGTTTAAGAATTTAATTGTTTCTCATCAGAAAGAA
-GTTACCTCTTTGGAGAACTGTTTCGTCCTCCTGTATTAACACGAAACAACATTCTCTACC
-TCAAAAATACTTTATATAAGACTTTGGTGTTTTCAAAGTCTCTCAAGTATCACTTCTCAC
-TGATCTGCAATGCCCTTGGCTTGATAAGCAAGCTGATAGGTAACTTTTTGTTGCCAGGTG
-CCCATACAGAATACCgtcatgcgttatttaatgacattctgagaaatgtgttaaacatca
-gagtgtttacacaaacctacatggtatggcatattacatacctagggtatggcctacggc
-tcctaggatacaaatgtgtaccgtaataaatactttaggcaattgtaacacaatggtatt
-tgtgtatctaaacgtagaaaaggtaatgaatgcactgttgatgttacgatgacatcacta
-ggccacagacatttttcagctctcttataatcttatggaaccactgtcctacatgtggtc
-tgtcattaattcaaactttgttatgtggtgcacgactgCATATACATCATAGAAAAGGAT
-AAGAAACTAAAATGATTTTTAAATGGTAAGCCCATTAAAATTGTTCACTTGCCAAAGCAA
-CTCTGCTTCCTCACTGCAAAACCAAATTTTCAGCTCAAAAGAAAACACAAATTGGGCTTT
-GATCCTGAGGTATACACATACAGAGTCACGGAGGTTTTCTGACAAAAACTACTCAACAGA
-TCCACAAGATTCAGCCCTTTGAGTGAGTATAATGAAGTCAACAAAAACAATTACCCCCAT
-TCCACCACATGTGACTCGTAATCCCAGTATTCTCGAGGTCTGTGTGTATTAACATCTGTG
-TAAACTCTGGCCCTGCTTGGCACGGGTCCCGACATGTCAGACAGGTTGGCGGACAAAGCT
-GGACTTGATGTTTGGAGATCTGGCAGTCACTGTGTTCAGAAGCAGCTGGGGGTAAGACCT
-TGTTTCAGACCTGTTTTCTTCAAACTGCAGAAACAAAATGCACAAAGTCCAAGGAATCAT
-TTACAGAAGGTATATGGGAAGGAAATAATCTTACAAATAATAATGGCCTGAAATATACCT
-CTGGCTCTCCTACCTACAGCCAATAAATATAGCTCAACTGTGTTAACCAGTGCTTCCTAT
-AACATGAGAAGAAAAATCCCAAGAAATACAGTAAACTGATATTTGCTTTAATCATATTTT
-GCCAAATATCCTGTTACCTCTGCAGGCAAAATTTGAATGATTTTTGTAAGACAGCCTGGA
-AGAGAAAAATGGCATTGAGGATAGATACATCAGCATTACCACTAGTTATATATTCTACAA
-AAGGTATTGGCAAGAAAAATACTTTCTTTTCAGCAGCTTTCTGTAACTTAAGTAGGGGTG
-CTAAAAGGTTCTAGAATGGCGGCAAAGCTAAGAGTACAACTTGCCATTCTGACTCATATT
-TGATGAAACCAGGAAGAGAATAAAGGCTTGTTCTCATACATCAAAGCTCCATGTCATCTT
-ATACCAATCCAAATCTTTTGGGGGAACCTTAAGGTAATAATCAGTAGAACCTTGATCACC
-ATTTGAAAGACACACTTGGTTTCATTAAATTTAAAAACAGAAATCAGTAATATTCTCTTT
-ATATTTAATACAGGAGCTTAAAAACTGGTATAAAACAGTAATACAGATTAGCTGAGCTAA
-TGCAAAATTTGACACCGGGGGAAAATAAGTAAGATGTTAGAAATATGCTATCAAATCAGG
-TTCCTTTCCAATGATGTCTTCCCTATCTCCTACAGCATGTGCTGATTCCCCTCATTATGC
-ATTTAGATGAAATTGTATTGAGTCTCCAGATTGTGATAACGTGAGAAGGATATAACACGT
-ATGCAAGTCTCCTGGCTGAGACAGCATAACTTCAATTTGTATGTGTGTATGTGttttaag
-acagggtcttattccactgcccagactggaatgcagtggtgtgatcatggctcactgaag
-cctcaacttcctggactccggtgattctttcacctcagcctcccaggtagctgagactac
-aggcacgcaccaccaccctcagctaattttctgtattttcagtagagacggtgtttcacc
-atgttgcccaggctggtcttgaactcccaggctcaagcaatcctcccacctcagcctccc
-aaagtgctgagatcacagatgtgagccaccgcacccagccATAACTTCAATTCAATTACC
-AGGAAACATTCAGAAAAAGAGGAAGTGTCTATTTAAAAAGGGGGAAGGGGTACTATACTT
-CTAAAACATGTCCACAGCATAAAAGACAAATGGAGGCTAAAGAGACATTGCATAAATGCA
-ATACTCTAGACTGTATCCCATACTGCAGGAGGTGGAGGGGGAtgctataaaaaacaatat
-cgacagaactggaattcagagggtattaaattattgtatcaatgtaaatttgtgaagttg
-gtacataatcacaatagttaagagaatatacctattcttttttttttttttttgagatgg
-agtttcgctcttgttgctcaggctggagtgcaatggcgtgatcttggctcaccacaacct
-ctgccgcctcccaggttcatgtgattctcctgcctcagcctcccgagtagctgggattac
-aggcatgcgccaccatgcctggctaattttgtatttttagtagagatagggtttctctat
-gttggtcaggctggtctcaaactcccgacctcaggtgatccgccctcctcggcctcccaa
-agtgctaggattacaggcgtgagccacctcgcccagcccaagaatatgtctattgttaag
-aaattttcctgaagtaattagaagtaaacagccatgatgcatataatctaccctaaaatg
-attcaggaaaaaaatgtgcccacacgtttacatgtgtatatatatagcacacatgactgc
-acactcacaaatgataaaacaagctgggtaaaatattacaataggtaaacgtgcgtaaag
-ggaatagagatgccctttgtactatttttatttactttttgttgaaatcttcttatttga
-aacaaggtctccctctgtaggccaggctagagtacagtggtctgatcacagctcactgca
-gccttgacctcccaggctcaatcaatcctcccacctctgcctcccaagtagttgggacca
-caggcgtgggctaccacagctggctaattaaataaattttttttttgtaaagatggggtt
-tccctatgttgcccaggctggtctcaaactcctgggttcaagtgatgctcccaccacagc
-ctcccaaagtactgtgattataggagtgatccaccatacccagctTGTTGAAACACtttt
-ttaaattgtggtaaaatatacataacataaactttatggccaggcacagtggctcacttt
-gggaggcttaagagggtggatcgcttgaacccaggagttcgcaaccagtctgggcaacat
-ggtaaaaccccatctctactgaaaatacaaaaaattagccaggtgtgatggtgtctgcct
-gcagtcccagctacttgggaggctgaggcaggagaatcaccagagaccaggaagtcgagg
-ctacagtgagctgtgattgcaccactgcactccagcctgggtgacaggagagagacctca
-tctaaaaaaaataaaaactgccattttatccacatttaaacctaaagctcagttgcatta
-agtatattcacattcttgtgcagtaatcaccagatcatccatttctacaaatttttacca
-tcccaaatgaaaactatgtatccactaaacactaattttccctcccccaactctttgcaa
-ccactattctattttctgcctgagctggctattctaggaacctcatataagtggaatcag
-acaatatttgtcctttgttttgtttatttaatttagcataatgtcttcaaggctgatcca
-tgttgtagcatgtgttagaattccaatccttttaaaggctgaatgatattgcactgtgta
-tatatatacacacacacacacacacacacacacaccacattttgcttatccatttatctg
-ctgatggacacttgagttgcttccacagcttggctattgtaaataatgctgctatgaaca
-taggtgtacaaacatctgtttgagacctcgctttcaaatcttttatgtatatatccagaa
-gtggaactgctgaaccatgtagtaattctatgttaattttttgaagaaccagcatattgt
-ttcaacaagctgggcacggtggctcactcctatacagcaactgtatcattttacactccc
-aggaacagtgcaaaggctacaacttctctacatccttactaacacttgttattttctgtt
-ttttGCTTGtttttatagagacaggggtcttgcttatgcccaggctggtcttgagctcct
-ggcctcaagggatcctcccacctcggcctcccaaagtgctCTCAAAATAGACTGTGCCTG
-GCCTATTTTTTGGTTTTCTTTTCTTCTTCTTCTTttttttttttcagtaacagccctcct
-aatgagtatgaagttgtatctcattgactgtgattttaatttgcatttccctaatgatta
-atgatgttgagcatctttttacatgcttattggccatttgtatatttgttttggagaatg
-tctattcaaagctgttgtccattttttgattgggttgttttgtttgttGACGATGCATTT
-GTTAACTATACTGTTTTTTTGTTGCTTACAAGCTGCTCATCTTTCCAAGGTAAGCTGTAA
-CTTAGCTACCACACCCAAAGAGAAGCCAGAAGAGATACCTCCTTATGCCCATGGTGTCGG
-CAGCTAAAGGCTTTCAGAAGAATAGCAAGACTGGGATGGAGATTAATTCTCTATTCCTTA
-ACCGTGACAAACACAATTAATGACATTCCACTCCAAATATATGAGATCAAAAGATTCACA
-TGCTGACTTATGAATTCTCCCACCCAAAAAACTGCTGTAACTTGCCTCTGTTCAACTCAA
-ACCTTCTGAGGTTCCATAAATGTACTAAATGACCAGAAAACAACAAAGTAATTCAAGTAC
-CAAAAGTCTTTAAAATTATTTCTATTTCTTTGATTTTGTAAAACCTGGGTGACATTAATC
-TATCTTCACTTAATATCAGTTAAAACTGTAAACGCACACACACACAAACACATCAAACAT
-GCAAAAACCAGATGTTTTCTTGTAATTTTTCTTCTTCCCAAAGAAATAAGGTCATCTATG
-TTGTAGGATTGGTGACTCTGTGACTACTATGCCTGCCTTGACAGCAATGAAAGACACTAG
-GAAAACCGTAGAGAAAGGTGTAGGTGTGAATATGGCCAAAATAGTAGAAACAGCAGCATG
-AACCCAACAGAAATGCTGTCCCCAGAAATTTATTACTTTTAATATACTAAACTTTTAAAT
-TCTCAGCCTCTCCTCTGACAGGAAACAGTATCTTTCTCTACATAACCTTTACAGCCACTT
-TACTCTTCTGGTTAACATTTTATACGTGTAAGACAGCCTTCGTCTGTGGATCTCAAAGCC
-CTTTTCCTATGCTTAAAAGTGATCTCTCTGTTGGGCTTTTCCCAGCTTTGGTTCATCACT
-TATAAAACCTGTCTAACTGTGCTTGCAGACTGAAGGGAAGATGAAGTGAGATGATCTTCC
-AGAAAGGGCTTAGAAACATGAAATGCATGTAAATTTGTATTAAGTAATTACTATCCCCTA
-GCTCCTTAGTGAAAGCTAATAAGCAGAAACCTATCTTTACAGGCTGGAACCTTCATTCTT
-TAAAATACAAAAATTATAGTAGCCGTGGTTAATTCCCGGCCACTGAGGGCTAACTCCCAA
-GTATACATGACATTACAAAATGAGTCCTCATTTCTCCCTGGAAACCATCTGACATATGGA
-GAATAGCCAACTCCTATTACTAGTCATGTACATTCTCATCACCCAGTCTTCTTCTGCTGT
-TTCAAGGCCCTGGCATCCTCTGTGAGGAGTGGGAAAAGACTAATAACTAATGAAACTCTT
-GAGATTCTCCAGTACTTGTCTGAATGACCCTTGAAGCTTTGGGGCTCATCAACTGGGACC
-TAATTTATGAACTAGCAGATCTGATTCTCCACTGGGAAGACAACAAGCTAACTATTTTTG
-CAGTACCCCCAAAGAGGTGCTTCACCTTACTGTCACGCATACCAAATAATCTGCTTATAG
-TAAGAAAGGTATTCACATGAATTTCAAATGGCTGGCCTTCATTAATTATACGGGAAAATA
-AAACAGAGGATTCTTCAACTGTGACTCTGTAATCTCAGATAGATAAAAGGGTACTAAGAG
-ATTGGGGGTTAAGGGATGGTGATAAAAAGGGGATGTGAagcccagtgtggtggctcatac
-ctataatcccagcactctggcaggatcacttgagcccaggagtttgagaccaccctgggc
-aacacagcgagacctcctctctacaaataacataaaaatgagctgggtgtagtggagtac
-aactgtggtcccaggtacttggtaggctgagatggaaggatcacttgagcctgggaggtc
-aaggttgcagtgagccatgatctcaccactgcactccaacctgggtgacagagcaagacc
-ctgtctcaaaaacaaacaaacaaacaaacaaaaaacaaaAACAAGAGGGGATGTGAAAAG
-ACAGAAAAGGGAGGTCAAAGACCAAATATTATCATTATTATTTTTTTGAGACAGgagaca
-gggtcttgcgctgtcacccaggctggagtgcagtggtgcaatctcgctcggctcactgaa
-acctccacctcatctcctgggcttgagcaatcctcccacctcagcctcctgagtagttgg
-gactatagctatgcgccatcaggcccagctaatatttgtattttttgtagagacaaggtt
-ttgtcatgatgcccaggctggtctcaaactcctggactcaagtgatccaccagcctcagc
-ctcccgaagtgctgagattacaggtgtgagccaccatgcccaaccAAGATAAACATTATC
-TTATTTAGAAATAGTATTTCACTTATACCTCTGCAAATGCATATGTATATCACATGTAAG
-CTAACAGGAAGAAAACACACAGCCTACATTTCTCAATTTTTGGTTTGATTCTTCCCTACA
-TTCCTGATTTTGTCCATCCCTTAAATAGAtaaccatctactatgaaaaagtactatccta
-ggccttaggaatataagtgagcaaggcagaACAGGGGTGAGACAAgtatgccattgaaga
-ttttacctatggactaagggtaacagaaattcattgaaaagttttaagcagaaaagtgac
-ccatacatattgtttttaaaatttttactctggctgagtgtgggacaggacttagggaga
-aggctgttaacagtagcacacgtgagagaaatgatgacctaaggtggtggcatgtggaga
-tcagtggactaatatgaggaacaaaatttatggtgtaaaatcaatagctctgagtgaact
-ggaaaatgctgtatgaagtgggaggtgactcttggatttcttgcttgacagactgttggt
-gccattcatggagataagagtgcacaagataggttttggacttaaggttaaaatggcttt
-gaatcattcaaacgaagattctgaataggcagttagatattacaagtctggaactaagag
-tttctcagctttaagtatctaactcttccaacaactctacgaggcaagcattagtttctc
-taatctacaaataagaacagcctaagttcagtagcttgaccaagaatatccaatacagtt
-acagctgggattcaaagacagtgagttggcctccaaggttcaagtcttctcactCCTACA
-GAACACAATCACTTTCTACTGCACATTCACACACACACACACCAGTCTTCAAATCTTAAT
-ttctcaattggaccctaagttctacaaagttaagaaccatgtttaatttacctttttaat
-ttatagtacctagcctaaggcttgcattttgtagcacgttcagtaaacactatttggtga
-tcaaattaatCTTGGTTTATTTTTTAAAAATGAAATGAAAATGAAGTTGCATCCAAAGTA
-TAGGGTGTTCCTAAATACTTCAGGTCATCTGGTACGCAACTAGGAGAACTGGAAAACCAA
-GTCAAAGGTTCTTGAGTAATTGTTCCCTTCCCTCTCTCTCTTTCCCAATACTACAGCTTC
-TATTAAATCACAGGACTACAACTAGGATTTGTCTTTTTCCCCTCGATAATTCAAATTAAG
-AGAATACTGAAGAAACTTGATTTTACCAATTTTTATAGCAGCTTATTTGGAAGATGGAAA
-AAGTGCCTGAGTCCTAGATATTTGGAAGATCAATTCTCCTCTCCACTGTTCATAATACTA
-GTATATCTTAAGGCAATCTAACAAAATGCACTGCCTTTCTTATTAAGTTCCATTTTAAAT
-TGTCTTACTTAGTGCTTACTGTTCTCATGTAATTGCATAAAAGGAGGTGTAACTTTAGTG
-GCTAACCATTTCAGACCACTACATCTACCTTAACACCGTCAGAATGACTTTGAAGACATG
-GCTAGGTCTTGTATGCTCAACGTTTAGCCTAACAGAAGCCAATTAATCAGCTACGAAAAA
-AGTATCATGTCAATGAATTTTTCCCGACTGAAGTAAGATCACATCGAAGCCAACTGCATG
-GGTCTGCATGACCTATTCTTTAATAAAGTATAAGTAAATAAAAAGAAAATGCCATTAAAC
-CATAAGGAAAAATTGTCCATTGCCAAAATCATAAGTTTACTGATATACACTGAATACAGC
-AGAATTAATTTCAATAAAAACTCCTCTTGCCCTTAGCTAGTCCCTCCTTCTAATCTCTTA
-TGTTCAGTTGTTATTTTTCAATTTGGCAACTAAAAAGAAAACTAGAGGCTTAGTAACAGT
-CCAATACCAGAAAACTATACAAACAAGTTTGCTTAGTCATTTCTGCTAATGTATTTTTAT
-TGATGAATTTCCTAGTATCAGAAATGGAAAAGATCATTCTAGAACTTTAAGTCAATTTTT
-GAACTGTAATATAATTAGTTCTTTTTAACCCTAATGTTTATTAGTCTCCATCTTAAAAGG
-AAAAAAAAAATCTCCTTCTCATCCCTAAATGAACCATAGCAAATGAACAAGATCTCATCA
-TCATCCCGACAGGACAAAGATTTCTATAGCAAAGAATGAGGAATGTGCTTAGATTGCACT
-GACTGCATGGTTTAGGACTGCTTGTTTAGAGGAAAAGCAGCTATACAGGAAGACACCTTT
-TATGCACTGCTGCAGAGAATGAACTCTTTTTCCAAGCAATCAGGCAACATAAACTGGTAA
-GAGACAAACAAGACTTGTGGAACTCAGCGAGACCTTAAATATGTATACTTTTCTACCTTG
-CTACAGAAGCAAAGAGAAAAATTCAGTCAAACTTGCCCATTTCCCTTTACAAAAGGGGCA
-CTGATTAGAAGGCCAACTTAATACAAAAAAGCACAAGTAGCTAATGTTACCTGAATTACT
-TATTTCAAATGTCCATACTTAACCTTAATTTCTTTCTTCCTTTCCAATCAAGAGCAGAAT
-GCTCATACATCAAGcatttactgaacgtttactatgtaccaggaaatgtgtgcctgactg
-ccagaaaggcattctttctcttggtcctGGAGAAAGTATCTCTGCCCTCAGACAAAGAAA
-ACAGACCATTACAATCTCAAGTGATCAGTGCTTGAAACAATTAAGTCATGGTGGTGTACA
-GACGTTGAAGGGTATTTAAACTATCACCAACCCAtcattcattcaacaaatatttatgga
-gtacctaAAATGGGGAAAAACTGTAAGAGAAAAAAAAAACTGCACTTAAAGTACGCACAG
-GAATTATTCAGATGGAAAACATTAAAACAAGAAATTGCAAAGCGTAACACTTTAAAGCAA
-GTTAAGAATTTTAAAGACCTATAATTTTGCACCCTAAAATGACCAAAGGCTGGCACATTT
-TGTTATCTTCTATAAGAAACACATCATTGGATGCCACATGCAACGTGGCATCAGGTGTAA
-AAAAGCACCTGATGTGCTTTTTTTGCACATCAGGTCAGCAACCTTTTTATATCTGATTTG
-GAGACTATTAGTTTACTCGACTGTTACCATTTTGTGCTTAAAACAAACAGTATCATTAAT
-TCACAAGCTTTGGAATTCTTTCTCTTTATTTTCTTTTCTCTACTTCCAACACTAATCAGT
-TCCTtgttgcccaagctggagtgcagtggcacaatcgtagctcactgccacttcaaattc
-ctgggctcaagtaatcctcccacctcagcctcccaagtaactgaggctacaggcatgtgt
-caccacacctggcCCACTCATCTTTAAATAAGACAGAGAAGTAATTATAGCCAAAAGGGA
-ATAGAAAATGCAAACCCAGAGATATAAGCAAGCAAGGAAGCCTGGAAAGCCTTTGTTGAT
-CCTGAAAATTAGAATTTTGTTCTCACATAAACCAAAGCCCAGGGCTCTCACAAGACAAAA
-AGTCTAATAGGAGGCCCTCTTCATAAGGTGGGACTTCAGAGGCATACTTCCTAATGGTGA
-GAGTGACTAGGGAGTGGAAGATCCAGGGAGGAATTAAAGCCCTACTGAAGGGAATATCAT
-ATCTTAAGCTTGTTTTAAGGTGGTCTCTGGATTAGTGCCCATGCATACCTGATATAAGCA
-AGCTCTCCATGGAGGAAAGTACCTTACTGTGGGCCTCAAATGATCACTACAAATATCTAt
-ttttatttttattattttttatttttttgagacagagtctcgctctgtcacccaggctgg
-agtacagtggcctgatctcagctcactgcaagctctgcttcctgggttcacgccattctc
-ctgcctcagcctcccgagtagctgggactacaggagtccgccaccacgcccggctaattt
-tttttttttttttttttttaagtaaagacggggtttcaccgtgttagccaggacggtctc
-gatctcctgacctcgtgatccacccgccttggcctcccaaagtgctgggattacaggtgt
-gagccaccgcacccagccAATTATTTATTTTTAAATACAATGTCCTAGCAGATCTCAAAA
-AACAAGAGGAAAAATATAGTGAAATCGTTGGATATACttttttttttttttttttttgcc
-acaaagtcttgttctgccacccaggttagagtgcagtggcacgatctcagttcattgcaa
-cctctgcctcccaggttcaagtgattctcctgcctcagcctccagagtagctgggactac
-aggtgcatgccaccatgcccggctaatttttgtatttttagtagtgagggggttttgcca
-tgttttggccaggctggtcttgaacttctgacctcaagtgacccgcccatcttggcctcc
-caaagtgctgtgattataggcgtaagccaccgtgcccagccAGTTTGATATACTTTTAAT
-TGGTACTAGCAGAAAAGAGAATGGGATAAAGGCAGTAACTGAAGACAGTTGAAAATATCC
-CAGAAGCAATCAGACACAATCAAATTCCAGAAGCAAACAATTTccaaacaagatcaataa
-aaagaaatccaaaaccaaacatataattacaaaatagcaggaaaaaacaaagatgagttg
-ggtgtaatggcacaggcctatagtcccagctatttgggaggctgatacaggaagattgct
-tgtgcccaggagttggaggccagcctgggcaaaacagcaagaccttgtctcaaacaaaaa
-caaaaaactaaagacaagcaagtacagaaaaaggcagattatattcaaagagcaacatta
-gaacagctgatttttcaaaaccaacaatgaagccaagtagtttaatacctgcagtgtgct
-gaaaaaaataaatagccgccaaattaaaattctgttatcaagcaaatgtctctaaagaaa
-aaagaaaaataatcccattttggaaggtctgagttgaaagaaaaaataaagagcaaaaaa
-gaggaaaatttacagacagctccaaacaaacactgattatacaaaagaataacaatacct
-tgaggagctttaaaacatagaatacataacaataaaaacacagtgtattgaggagatttc
-aaagtattctttctaaaggtcttttattatatgaaaagaagataaaattataatatcagg
-ttttgctaagttatagctgcaagtcacaagatgtatgacaactaattacagaataaaaat
-agcatatatttccaaaccagaaagagggaaaagtaaaatcataaaaagaatccaaaagaa
-tgttaagaagggagaagaaaaaaatctagaacataagaagcataggggaagaaagttgaa
-ttggaatatgattaattatattaaatataagtggaataaattatccaggtaaaagacaaa
-gactatcatatcagactggattaaaaaagaaatccaaatgaaccagaataatccaaacaa
-ttctgaaaaataataaagctggaagaattatactaactgatcttaaacttattacaaagc
-tatagttgtcaaaacagtgtattggcaaaaggataatacatagatcaagggaacagaata
-aagagtacagaaatacactcacacaaacaaggccaattaatttttgacaaaggtacaaag
-gcagttcaatggagaaaggacatatatacatatatatataaatatattatgtattttttt
-cgagatagggtctgcctctggtgcccacgctggagtgcaggggcatgatctcaactcact
-gcaacctccgcctcctgggttcaagtgattctcctgcctcagcctccaaagtagctagga
-ccacaggagtgtgtcactatgccctgctaatttttgtatttttagtagagacagggtttc
-accatattgcctaggctggtctcaaatttctgagctcaactgatccacctgccttggcct
-cccaaagtgctgggattacaggcataataatcttttctataaattgttttggaagacttg
-gagatcaatatgcaaaatcataaactttaatctaaatctcacactttatataaagataat
-tcataatgaatcacagatatcaatgtaaaacttgggtcagatgcggtggctcatgactgt
-ataatcccaggctgggtgacaaggcaagactctacctctgggggggaaaaaaaaagatat
-aaatgtaaaattatcaaaccttcttgcaaccaggggttaggcagagtttgaagacatgac
-actaaaagcatgggctgtaaaactgataaactgaacttcatcaacgttaaaatatttctg
-ctctgtgaaagacactattaagaaaataagccagacacaagaagaatgtatttgcaaatc
-acaaatcgaataaagaacttgtatctgtaacattaaaaaactcaataagaaaacagctca
-atttaaaaatgggcaaaagacgtgaacatacacaccacaaaagaagatatacacataagt
-atatgaaaagatacacaacactgccagacagcagggaaaatgaaattaaatcatacaact
-accactacagatttattaaaatggctaaaatttaaaaaaacagaaaacaaaactatacca
-aaagctggtgtggatgcagagtaacagtaactaatacattcctggtaggaatgcaaaatg
-gttttggaaaacagtttggcagtttcttatagagttaaacatgtacttaagcatacaacc
-agcattcccactcctaggtatttactcaagagaaacggaaacccgtatctacacaaaaac
-ttatacacaaacatttaaggcagctttattcataattgtgaaaaaacagaaacaaccaag
-gtgtccaacagttacatgaacaaacaaatggtttgccatgtgatgcttagcaataaaaag
-gaacaaattactgatttgtgcaacaaaatggatgaatcGtttttctttttttggtagaga
-cagggtctcgctttgttgcccaggctggtctcaaacgtctagcctcaagtaatcctttgg
-cttcagtctcccaaagtgctaggattacaggtgtgagctgctacacctgaccaacatggt
-gaatcttaaaagtgaagaagccagaaacaaaagcctacatattgtatacttccatttata
-tcaggggtccccaatccccgggccatgggcctgtaccagttcatggcctgttaggaacca
-ggctacacagcaggaggtgagcagcgggagtcactcgcattactgcccgagctctgcctc
-ctgtcccatcagcaacagcattagattctcataggagaaccctattgtgaactgcacatg
-tgaggaatctaggAGGTGGAGCTCAATTTTTCTCCTTTAAGGAAAGGAAATAAGTAAGCA
-TGGAAAGAGAGCCTAAATTTCTCCCTTTCCATGCTTATTCATTACAAGGGTATTCCTAAG
-TCCAATGGGCTtggaaagggagaaatagcaactctacagtagaaaaacctggcagacttt
-actgaaatatcactagtgttaagtcactttgacatcatatgcccctgatataatgtgatg
-agaagggcacttcacctctgtggtagtcttctcaaaaatccataaccacaatttaatctt
-gagaaaacatcaaacctgtattgaaggacattctataacatacatcaccagtcttcttca
-aaagtttccaagtaatgaaaattaaagacagactaagaagcttcacagactggaggatac
-taaggagacatgatgactaaattaatgtggtatcctggactggctccttgaacagaaaaa
-ggatacaactggtaaaatccaaacaaagcctgtagtttagttaatagtattataccgatg
-ttaatttcttaattattttatttatttatttatttttagagatggggtctcactttgtca
-cccaggctggagtgcaatggtgtgatcctagctctcccagttcacagcagcctcaaactc
-ctgggctcaagcgatcctcctgccccagcctcctaagtagctaggactacaggcacatgc
-caccatgcccacctaacttctgagaaccaggttggtctcaaacgcctggcctcaagcaat
-cctccccaccacggcctccagagttactgggataacaggtgtgagccaccatgactggcc
-cagtttcttagtgttgatgacatatcacggttatggcaagatgtgaacattaggatatac
-tgagggaagcatatatggagattctatctgtaacttctgtaaacctaaaattttcaacat
-tacaagttAAATACTGCCAATATTTAACTTGAAATGCTAAAGAGGATGAGAtgctagaga
-agatgaggaaaaactgaaactcatacattgctagtgtgaacgcaaaatagtactgtatag
-ccattctagaaaacagtttggcaacttctttataaataagttaaatgtacatttttcata
-tgacccagcaatccaactcacagttatttaccctagaaaaatgaaaacttaggtccacaa
-aagcctataatgttatgttcacagcaactgtattcataatcaccaaagaatgaaaaccaa
-aatgtccttcaaggagtgaatggataaaaataactatagtctatccataaatggaatact
-actcagtaataaaaaggaactaaccatttacacacacaataactttgatgaatctcagag
-gcagtatgctgaatgaaataagccagtctcaaaatattacataatgtttgatttcattta
-tatgacattcacgaaaagataaaactgtagtgaggttgggcacggtggctcacgcctgta
-atcccagcactttgggaggccgaagcggatggatcacaaggtcaggagatcgagaccatc
-ctggctaacacggtgaaaccccgtctctactaaaaatataaaaaattagccgggagcggt
-ggtgggcgcctgtagtcccaactactcgggaggctgagcttgcagtgagctgagatcacg
-ccaatgcactccagcctgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaaa
-aaaaactgtagtaactcagaacagaacagtggttgctagagattaggggtgggaggctag
-gtatgttaccaagggtaacatgcagaaggtgatataactattctatgtcccagttgtgat
-ggtagttacttgaatctatgtatgtattaaaattcatagaacagtatacacaaaaaggag
-tcaattttactgtgtattaatttaaaaaaaaATTTAAAAAAAGGAAAAAAATTCTATCAC
-ATGCTGTCTAAAAGAGATACATCTAggccgggtgcagctgctcacgcctgtaatcccagc
-actttgggaggctgaggtgggcagatcacctgaggtcaggagctcaaaaccaccctggcc
-agtacagtgaaacccatctctactaaaaatacaaaaatgagctgggtgtggtggtgcgtg
-cctgtagtcccagctgctcttagaggctgaggcaggggaatcgcttgaaactctcgagag
-gcgaaggttgtagcaagataacgccattgcattccagcctgggagacagagggaggctcc
-ttctcaaaaaaaaaaaaaaaaaaaTTAATAAACAAATAAATAAAAGAGATACATCTaggc
-caggtgtggtggctcacttgaggtcaggagtttgagaccagcctggccaacacagcgaaa
-cctcatctctacttaaaaacaacaacaacaacaaaacacaaaaattagctgggtgtggtg
-gcgggtgcctataatcccagctactcaggaggctgaggctggagaatcgcttgaacctag
-gaggtggaggttgcagtgggcactccagcatgggtgacggagactccatctcaaaaaaaa
-aaaaaaaaaaaaaaGAGATACATCTAAAACATGGGGTATATATTATAtacacgatgtata
-catgcactgaaacatcacaatatatcccataaatatgtacaattatgtatcaattagaaa
-tTAAGAGCTGGGCACAGCTCAGGGGtccctgcactttgggagactgaagaggaaagatgg
-cttgaggctgagttcgtgaccagcctgggcaacacagcaagactaccatctctacagaaa
-aatttaaaagttagctaagtatggtgcatgcacctgtgtcctagctactcagaaggctga
-agtgatcatgtgaacctaggagtttgaggcttcagtgagctatgatcacagtgttgcact
-ccaacctggctgacagacactctgcctcaaaaTCAATCAATCaataaattttaaataaaa
-aaaaaCATAGGCTATAGAGAGTTTGTTCataaaaatacgatatttcaaaacgtgggatac
-aattaaagcaggacttagaaatttataaacttaggccaggtgtggttgctcatgcctgta
-atcccagcactttgggaggctgaggtgagtggattacttgaatctaggagttcgagacca
-gcctgggcaacatggcgagacctcgcctctataaaaataaaaattTTAAAAATCggctgg
-gcgcagtggctcacgcctgtaatcccagcactgtgggaggctgaggcgggcggatcacga
-ggtcagaagatcgagaccaccctggctaacatggtgaaaccccgtctctactaaaaatac
-aaaaattagctgggcatggtggcgggcgcctgtaatcccagctactcaggaggctgaggc
-aagagaatggcgtgaacccgggaggcagagcttgcagtgagccgagatcgtgccactgca
-ctccagcctgggcgacagagcgagactccatctcaaaaaaaaaaaaaaaaagaaaaaaaa
-aaTAATAATAATTAggctgtgcacagtggctaatgcctgtaatcccaacactttgggagg
-ctgaggccaaggtgtgaggattgcttgagctcaggagtttggagaccagcctaggcaaca
-tagtgagaccctgtctctatttttttaacttaaaactattaaaaaaaaaaaaaaaaaaaa
-aaagccaggtgtggtggcatgcacctgtggtccaactattcaggagtctgagatgggagg
-aacacttgagcctaggaggtggaggctgcagtgagctgtgattatgccactgcactctag
-cctgggcgacatagcaaggccctgattcgaaaataaaaaTTCATAAACTTGAACttagaa
-aagcaaactaaaaattaagaacttacacatatctcaataaatttgaaaacagaagcccag
-agaaactagaaggaaaaaaacgggaaaagcagcaatcaaagaaatatgaaacaaagaGGA
-TCCACAATACCAATTGAGTCTTTAAAAATGCTCGTgctgagcccgtggctcatgcctgta
-atcccaacactttgaaaggccaaggcaaaggattgtctgagtccaggagtttgagatcag
-cctgggcaacagagtgcaacccccaatctctacaaaaataatttaaaaattaggccaggc
-atggtggctcatgactgtaatcccaatacttaggaaggctgaagcgggaagactgcttga
-gcccaggagtttgagaccagcctgggcaatacagtgagactccatctcaaaaaaattgtt
-tttaataataaaaacaatggaaaaaattagctgagtcccagctactcaggaggctaaggc
-aggaagatcacttgagcccaggagtttgaggctgcagtgagctatgatcatgtcactgca
-ctctagccagggcgacagagaaagaccctgcctcTGCAGGTGGGGGGGAAGAAATTAAAA
-ATGTAAGTGTGCTTGATTTAAGAAAAAAAAAAAGAAGggccaggtgtgatggctcatacc
-tgtaatcccagcactttgggaggctgaagcaggcggatcacaaggtcaggagctcgagac
-cagtctggccaatatggtgaaaccccatctctactaaaaatataaaaaattagctgggtg
-tggtgccacacgcctgtagtcccagcaggaggataaggcaggagaatcgcttgaacccgg
-gaggcggcagaggttgcagtgagctgagatcatgccactgcactccagcctggcgacagt
-gagactctgtctcaaaaaaagaaagaaagaatgagagagagagagagaaagagagagaga
-cagacagagagagagagagagagagagagagagagagagagagagagaATGAATATTAGG
-GTAAATGTCCAATATCAAGAATGGAAATGAGGGAGTGAGGGATGAATTAGGGTAAATGTc
-cagtatcaagaatggaaatgatacatcactacagatcctacagatggtaaaaagataaga
-caatatcacgaacaactttgtgcccacaaacttgaaattcccagaagaaaaataatttat
-caaaactgatacaagaTCCCAGTCTGATTCTCAGGGAGAAAAAACAAAAACTGACACAAA
-AAATGAAAACCATAAATAGTCCCATAACCAATAAATTCAATCAGTATTGTTTCAACCTGT
-TCTATTCTAATGTCTTTGAACTGCACAGATTAACATTTTCAAAACATTTGTTTAAACTGA
-CTGAACTTGCTTCCCACTCCTCTCCAGGTCTCTGTGCTTTTATACATTGATTATGCCTTC
-CAATAGTGCTTGCTAGGGGAAATCCTACTCACCCTTCAAGAATCAGCAAACTTTACATCC
-ACTATGAAGCACACTATGAAGCATTCCCATCTTTCTCCAAAACAGGCCAAGTACCTCTTC
-TACAGGGCCAAAGCAACCCCATATACTCTCTGACATTGTCACACTGAATGTGTTTTGTTT
-ACATACACCTCTCTCCTCAGATTATGAATTCAAGTACTTGGACTTTGATTTATTTCTCTT
-GGTGGATGCCCCGTgtttcaccacactgcccaggctggtctcaaactcctgacctcaggt
-gatccaactgtttcagcctcccaaagtgctagggttacaggcatgagccactgtgcccgg
-ccTGTGGTTTTTAAAATGCTCCTCAGTCTTACCTATAAATGTTATTGCATCCATCCTTTT
-TAAACCAGGGGAAAAAGGTTTCCTACTATCACTTACCAAAGAGATGTGAAACTAGTCAGT
-ATGGGTGAATGATGTTTCTTGGAGATTTTATGAGGTTCCACGCTGCATGATTTACCATGT
-GATGAGCACACTGCTTGACAAGCCTTGATAGAGCTACAAAAACAGTTCAGTACTCCGTTA
-CTGAAAGGATCTTGGATTTAAAAGACATCATAAGGTTGCAGAAAGAATAAGTACACTAGA
-ACCACTACAACCTACATCTGATGTTGGATATGTTATTTAACCTACCTGATTAAAGTGAGA
-AAACTGCAGAATATAAGGATTATCACCCTTCCCCCACTCCCTTCTTTACTGCCATGGTGG
-CAGGTTACATAGCAGACAACCATCATCTCCGCAGGTGATCAATAACCAACAGCTAATAAG
-GTAGGTTGTCCTAAAACTGACAAAAATAGAATAGGCTGGAAGTAAGGGCAGTAAAAACTG
-GTTGCCTTTCAATTCTGAAGATATTATGTGAATGCCTATGTCAGTCACTGATTCTTGGGA
-TTTATCAtttttgtgtgtgtaacagggtcttgctctgtcacccagggtgggtgactgcag
-ccttgacctcccaggctcaagcaatcctcctccttcagcttccttagtagctgggaccat
-aggcatacactactgtcccctgctaattaaattttttcttttttttctttctttcttttg
-tttttttttctgagatgtcttttgtttttgttctgaggtcttgttatgttacccaggctg
-gtctggaagtcctaagctcaagcaatcctcctaccttggcctcccaacgtgctgggatta
-taggcatgagccaccatgcccagccAGATTTATCACTGTTAAACCAGCAAGTCCATGACC
-TAAGTAATGTCTTTCTCATTTTACAGAAGGCAAAACTGCATAACCTTCCCAATGTCAGAG
-GTAGTGATTGGAAAACATTCGTCTAGATTCACAGCCTATTCTTCTGTTCTACAGCAAGGG
-ACTGTAAACTGGTGACCACAAACACAGCCAACCCCCATACccatggtttcagttacccgc
-agtcaactgcagtctgaaaatattaaatggaaaattccagaaataaataagtcataagtt
-ttattttccatgtttgtttttagagacgaggattcactcagtcacccaggctggagtgca
-gtggtgcaaccgtagctcactgtagcagcctctacctcccatctcagcctcccttgtagc
-tgggaccacgggcatgcaccaccactcctggctattttttttttttttttgtaaagaagg
-tttctcactatgttgcccgggctagtcttgaactcctgggctcaagcaatcctcccgcct
-taccctcccaaagtgctgggattacaggcatgagccattgcacccagccatgttttaaat
-tgtacatggttctgagtaatgtgatgaaatcttgcaccatctagtaccatccagccctgg
-atgtgaatcatccctttgtccagctgtatatgccacctgctcattagtcacttggtagcc
-ttcttggttacttgaatgttgcagtattgcagtgcttgtcttcaagttacccttatttta
-cttaagaaatgccccaaagtgcaagagtagcgatgctgagaatctggaaatgccaatgtg
-aagctgtaaagtgcttcctttaagtaaaaaggtaaaagttcttgacttaatatggaaaaa
-aaaatcatatgtggaaattgctaagatctatggtaagaacaaatcttctatcagtgataa
-tgtgaagagggaaaaataaattcacatttgttttgctgttgtacctcaaactgcaaaagt
-tatgaccgcagtatgtgataaatgcttagttaaaatggaaaaggcattaaatttgtgggt
-agaagacatcaacagaaaactgtgttccaactgatgataatcaggtttggtattatctgt
-ggtttcaggcatccactggggatcttggaatatatttcccacagatggctgggaacagga
-ctactCTGTGTGTATATCTCCTATTTGGCTCACATATTACTTTTAAAAattgagataaaa
-tccatgtaacataaaactcatcattttagggtacaatcagtaccctaaaatggtgtgttt
-tcgtatattcacaatgctgtggaaccatcaccactatctgattccagaacacttcatcgc
-cccaaaaagaaacccagtacctcagaggattaactcccaatagcctcttcctacaatcct
-ctggcaaccaataatctgctttctgtcttcatgtatttgcctattatggacatttcacat
-aaatggaatcatgcaatatgtggcctcttccacttagcaaaatgtctacaagtttatcca
-cgttgttgcaagtatcagtaattcatttccttttacagctgaattcactgtataaataca
-tcacattctggttgtccattcactgacagatatttggactgtctccactttttggctact
-atgaaataatgtcgctaggtgcatatgtgtacaagtttttCACtttttttcctttttttt
-tttttttttagagtcaggaccttgctctgtcacccaggctggagtgcaatggcatgatca
-tagttcacttcactgcagcctcacactcctgagctcaagtgatcctcctacctcagtctt
-ccaagtagctgggactatgggtgtgcgccaccacgcccagttaattttctgcatttttag
-tagagacagggtttcgccatgttgcccaggctggtctcgaactcctggattcaagcgatc
-atcccatcttagccttccaaagtgttgggactacagtatgagccacagtgcccagccTTC
-ACACTGTTTTTAAAAAGTAAATCAGGggccaggcatagtggctcacacctgtaaccccac
-cagtttgggaggctgaggcaggcggattacctgaggtcaggagttcatgacagccttggc
-caacatgatgaaaccccatttgtactaaaaatacaaaattagccaggtgtggtggtgggc
-acctgtaatctcagctacttgggagcctgagacaggagaatcacttgaacctgggaggca
-gaggttacagtgagctgagatcgcgccattgcactccagcctgggtgaaaagagtgaaat
-tccgtctcaaaaaacaaaagaaaaGGTATTAAGGTGAATTATGTATTAAAATTTTTCACA
-ATTAATATTTTTCAAAGTGACAGTTACCAAAATTAAAAAAAAATTTAACTTTCTATTTCT
-TAAAAGAAATAAAGCAGGAGGGAGGGCAGGTAGGTCTGTCTGTCTGGTAACAATGACTCT
-TCATTCCTGCACTGACAAAAACCTGCTGGATATGCTAAGCTGTGACTGTCCAACAACTGG
-CTCTTTTAACAGACACCCAATGGAGATACCACACGTAAACCTGGACAACTCTTCATTTAC
-CTTATTGACTCGACTCCTGAAGGCATTTGAGCAATCAATCCCTGGTTTATACTAAATATA
-TAAATTTACAAATAATAAGATGGGGGAACTCTTATTTAGACTACACAAATTTTGGAACTG
-AAAATGCAGCTCAACAATGAGATCAGTGGCCATGAACTCTCTGGTAAATGTATATAAAGC
-AGCATGTACATGTACATTTTTTTTTGAAGAAAAAAATTATTACAGGCTCAGGAAATCTGT
-AAACTCCAGCAAAATTAATAATTCCTGAGTTAGACAAACAGAAACTCATCTAAGAAGGCT
-AACTTGGTGATTTACATAAATATTAAAAAATTAAACTGCTCAAACTAAGTATATGCCATT
-CTTTCCTGAAGGAAGACAAGAAGACAATGTATCCTAGGCTTCAGAGTATGAGACCCAAGC
-TTGATGAATGATTAACAAAATGTCAGCCTCAGAAAAGATACAGTAGCATTCAGAGTTAGT
-CAGGTAGAGATAACAGTTTTACAAAAGGGAACTTTACTTCTGCCTCACATTACTGCTTAG
-AAAATAAGAACTTGAATTTCTTCACTACTGTCCAACCTTAAATTGTTCACAGTCTTGTAT
-TTTAAAGCATATCCTTTGAATCATGTGTCCAAAGAGAATTACTTGTGGGTCAGAGAGGTA
-CCTTAAAATGGCTTTAAAAACTTAAAACCAAGATTATTTTCAGATTGTTTACCCCCTTGA
-ATCTTAAAACTGTTCAGATATCCAATTACTGAGCTTTCTAAATTAGTGCTCCCAGTTTTT
-CTAAACTTTTAACtttttttttttttgagatggagtctcgctctgtcgccaggcctggag
-tgcagtggcacgctctcggcttactgcaacctccgcctcctgggttcaagcgattccccc
-gcctcagcctcctgagtatctggactacaggcaagcgccaccatgcccggctaatttttt
-tttttttttttttttgtattttagtagagacagggtttcaccatgttggccaggatggtc
-ttgaactcctgatcttgtgatctgcccgcctcggcctcccaaagtgctgggattacaggt
-gtgagccactgctcccagtcTTTTTTACAGTCAAGACAGAAAATAATATTTGTATGGCAC
-AATGGGGTAAATGATCAAGACTGCTCTGGATCTGAGGTCATTAGTTTGGATGCTGTATCC
-AAACTATATTCTGCATGAATGGCCAGAGGTGTGAGGGGACCAGTATCTCAACACATCTGT
-AACGCACCCTAACACAATACACTGGTTGAGAAATTCTAGTTTAAATAACTTGTGGAGATC
-ACGACCTGAATAGTCAAAATCCATGCAGCAGGTTGAGAAAACTATTTCACAATTCCTCTT
-ATTTCAAGAGATACGCAATCACCTTTTGCAGCTTTCAAGTATAGACCAGATGTACTAACA
-GGCAACCATTTCGTCTGGAAGATCATCTATTTGGAGGTCACTGACACAAAAAAACAAAAA
-CAACAAAGACAAAACAAGCCTCCTTACCCTAGCTCAGAAGGATAAGCCAAAAGAAAACAG
-GTTAACGGTAAAAATGTATGATTAAATGAAGTTATTGTTTTTTTTCCTCCACTTCATATT
-GATTCTCTTTTCCCATGTCAATTTAAGGTGGTAACCATGGCCAACAACATTCTCTCTCAC
-CTATCATACTAATGCCATATAAGTAGTAGTGTTTTTGTTTTTTCAAGTGGGGAAATATAT
-ACAGCTCAAAAAAACAAAAAAATATCTAGCAACTAACTCCTTGGCAGTTCCCTTGACTCT
-CTGACCTTTAAGTCCCAAGGTTCTAAGTATACAATGAATAAGAAAACTACCTGTTCAAAC
-CCAACAGAATATGTTTTTTTCTGGTTTGATTAAGGCTTCGAATTTGGAACATAAATACTC
-TCAGTAATACTTAGTAATTCATGAAGTTACTGCTTGTGTAAACTTGCAGAATATTTAACT
-TTAGGAGATTATAAATCCTAACATGCCCCTAGGGGCCTTCTGCTTTTATTCCTACATACA
-AAACATACAACATGTTTGTTTTTAAAAACAATGCACATAGgccaggtgtggtggcacaca
-cctgtagtcccagctacttgggaggctgaggcagaagcatcacttgaacccaggaggcag
-aggttgcaatgagccgagatcatgtcactgcactccagcctgggtgacagagcgagacgc
-tgtctcaaaataaaTACATACATACATACAAAAAAATTAAACCAATACACGGAAGTATTA
-CTTCCATAAAACAAACCAGGAAGTACAGTAAAACAGAAAACATTAGCATTTGGGCCTTTT
-GTGTGAATTACATTTCTCCACCTTCAACCCAGAAAAGGGATCTGAGTGTCAATGTGACAT
-AAATGACATAGCAACAGTGTGAGGTCTCCCAATGAAGGGAGGTATTAGAAGAAAATCCAA
-GCAGTTTGATTTGGATTAATAGTTCTACCCCAAACACCTAAGAGAAATCGGAATTCCAGT
-ACTGTCTCTTACAATATAGTCATCATCTATACACCTTTTTACCACGCCATATAAGCAAAA
-TAAAGTCACAATGTGAAACTTTACTCCACTGGCTATTACCCTCTGGAACCAAAAGATGGA
-AAACTTCATTTGGGATATACAGTAATCTAAAGAAAAATTCAGCACTTATGAATGTAATAA
-CTACTGTTACCATTTGAATGCCTCTTACAAACCAGGCACAGTATCAGATGCAtattctga
-ttttagaaataaacagattcagaggttaaataatctgccaaaaacaacaggattactaag
-tggtggaagccagatctgtttaggatccaaagcctaaataggttcttttcactAAATTTA
-ATACTATTTCCTTAGTTCTCCAAACTGATTTATTAACAGCCTATCCAAAACACTATAATA
-AAATGAACTGCTTTAAATTTGGAGGCAAGGTAGGGGTGGGATACTGAGTTTCAATAATCA
-GGTTTCTTCATTATTCTTTTACCTGAATGGGCTGGCCACCAGGCCACAATTGTATAAAAA
-TCAGATTTTAAATGATGGAAAAGCTTTTCTGTGTGGCTACTGAAGGGAGAAAGGAAGACA
-ACTGAGACATGCCCCACCTTGCTGGCTGGGGGCTGGTGACATCTGTGGGCCTCAGTGTTG
-GACTCCAGATGCAACAAAGCCTAAAGTTTTGAATATGTATGAAGGTCAATGTGATGTTTT
-CCAAAAACAGTCATAAAAGATGGCTGTGAAAAACCCCCTAGTATAACAACTGTATGTAAC
-AAGAGCATATAGGTAGCTGCAGATGAATGCTCAGGTCCTTAGCTGTGGTGTTTAAAAATT
-CTTCAGACCAggctgggtgcagtggctcacacctgcaatcccagcactttgggaggccga
-gatgggtggattgcctgagctcaggtgttagagaccagcctgggaaacacagtgaaaccc
-catctctactaaaatacaaaaaaaaaaaaaagccaggcgtggcagcgtgcgcctgtagtc
-ccagctacttgggaggctgaggcaggagaattgcttgaacccgggaggtggaggttgcag
-tgagccaaggtcgtgccactgcactccagcctggcaacagagtgagatgctatctcccaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTTTCTTCGGACCAgtgtggtggctcatgag
-tgtaatctcagcactttgggaggctgagttaagaggactgcttgagcccaggagtttgag
-accagcctgggcaacatggtgagaccttgtctctacaaaaaaAATTaacaactacccaca
-aagaaaaccctagctcaagatggcttcactggAAGGAAAAATGAACTGGTCAGGAAGACA
-GACAAATAGAAGCAAATAATGAAAGCATTTTATTTGACATTGATAACCTTCTCACAATAA
-ATTATGTGGCAAAATACATGCTTGAATACTTAATTGCTAGGCAATAGTCTATTTTCATTT
-TTTCACAAAAGGTAGACAACTCCAAAGCAGATGGCCATTTGTAGCCATTCTATATAATCA
-TAAATACACAAAACACTggccgggcgcggtggctcacgcctgtaaccccagcactttggg
-aggctgaggcgggtggatcacctgaggtcaggagtttgaggccagcgtggccaacatggc
-gacaccccgcctctactaaaaatacaaaaattagcccggtggggtggcatgcacctgtaa
-tcccagttacttaggaggctgagagaggagaatcacttgaacccaggaggcagagattgc
-gccactgcactccagcttgggcgacagagcaagactccatctcaaaaaaaaaaaaaaaaa
-aaGTTTTAAAGTGCCGATAAATACAAGTTCCTGGTCTGCCTACAGTTTATCACTTAATAA
-TACAAAGCAAACAAGAAAGCAAGTTAGTGGATTACCTGAGAGAGCAAGACATAGAGAAGA
-TGTTAATGCAGGGAGCTGGCCTTCTCCAAACATATCCCTAACACACAATATTCAAGCAAT
-TCCCAAACTGTGATCAGAGAACCACTGGGAGTAAGACCTCTGATCTATATTTACAAGTCT
-ATAGGTGAGCAAAGGTAGACCTTTTCCTGAGTCTGAGATGGGAATATTACCTTCTCTATC
-TAGAAGCAAAAGAATCCTAGACTCACCAGGACTAGGTAATAGACACTGTACACGAGTAAT
-TGAGGTAATCTACACTGGGCGTGACTTACATACTGATCCACCCCTAGGCAGCAATTCATA
-CCTCACCCACCCAACAGGCTACATTAGAAACAAGGAAGTACAGGTCAAAAGTCTCATTAA
-AAAAATAAGAACTCTTGGCAGCAGAAAATGAAAATAAAGAATGAAGAATGACAGCACTGG
-CAATAAACACATTCTTTTCTCCGAAAGGGAAGGGAAAGAACTAATGTTGGGCACCCACAT
-GCCAGACATTTTATCAATTTTCTCCTTTAATCCTCAATAATCCTGAGATAATACTAGCTA
-GTACTCTAGTTAttaatcctcacaaaaatcctgaggtaggtactactaattcccatgtta
-caggtgaagaaaccaaaagttagtaagttgcccaaggtAGttgttatccgaactgtagag
-acaagaactcccagacttgaagaggttaagtaaacttccccaaactcaAAGTGGGAGTTC
-TTTCCCACTAACCTATTGCCTTCCCCTCCCTACCCGCAATCTCAATTAATTCTCTATTCT
-ACCCCCTTCTCATTTCTGCAGCTGTTTCAAAAACTACACCTAAGATACAAAGCAAATAGG
-AGTTATTATAAGAAAACACCTCCAAAATCTACTAAGTTGTGGTATGATATGCCTGTTATC
-AGAAAACGTCACTCAATTTTGAGCTTGGAGGGCAGTGACAGTTTGGAGATCTTtagcaca
-acgcctgccagaaacgtggcaggcgctcaggatctgctgaatgaaCAACATCTTCTGAGT
-GGTTATGAATTCAATAACCCAAAATGACCATCTCGTATTTCTGGATATGACATGATACCA
-TTTTTTGGAAAATAATTTACCCATTCATTTTAAACAGGGTAGCTTTCTTAAAATTTATAG
-AACATTGATGAGATAGCTAAACTGAGAAATGCCCATTAAAGCATTAGTCATAACTTCAGG
-AAAATTTCAAATGTTCACTTTTCCAAGCAAATTAAAATGTTTCAGCTAATAAAAACCTGT
-CAGAAAAACCCACAAGACAAGAAAGTATAAAAAGAAAAGAGCAGCCAATATAAGGGCATT
-TAAGATGTCACACATAAAAAATTATAAAACATTAATCTAACTTGTACCTTGGTATTTAAC
-CCTAAAACTGTCACCTCAGATAACACAATATTTTCTATGCAAGAAAACATTATCACCACG
-AATGTAAAGAAGCTTGCCGACCATAGCAACTGTTGCTACGTAGGGTTTTTTAATGTCTAA
-GACTGAAAGACAGAATTTGTAGAAACCAGTTAAAATGCCACTCTTAGCAGTATCTTGTGA
-TACTGTGAATGCTTTCACCTTAAACTTTTTAAAAGACTCAATCTTTGACTTCTACATGTG
-AAAAAAAAAAAGTACATCTGGGAGCACTCAACGTAAGAAAACTACCAATTGTCTATAACC
-CAATGAAAATACATCCTTTGTTACAATGACAGCAGCTACTTTTCCTTAATAATCCTAGAG
-GAATTTCTTCATTTGAAAAGCTGGCTGGCCTAGATTTCTCTATAAACTAAATGACATGCT
-ACTTTCGAAATTATCCATTTCAGAAGTTCAAAGAAATTCAGGTATAAGAACACATTAATA
-CTCTCATGAAACAAACCTTATCCAGGTTACCCACGAATTGTGACAGATCAAAACCCAGTT
-TCTCATTTCAAATCAAGTATCACATTATTTATTACCTTAAAATACTAAGCCCTTACCTAA
-TTCAATGGCAAATCATATTGGTTTTCAGTTTCTGAACTTGTACAAATCATACTGTAATAT
-TTATGCAAAAGTTGTCATATAGTTGAATATTATAGACAGTTAACATCttttttttttttt
-tttgagacggagtcttgctctgtcccccaggctggagtgcagtggcgtgatcttgactca
-ctgcaaccaacctccgtctcccaggttcaagtgattctcagcctcctgagtagctgggac
-cacaggcacgcacctccacactcagctaattttagtagagatggggttttaccatgttgg
-ccaggctggtcttgtcctgacctcaagtcatctgcccacctcggcctctcaaagaactgg
-gattacaggtgtgagccaccatgcccggccAACAGTAGAAAAGGGTACTCAGGGAACATA
-GTTCAAAAGTCATGATTCTCTATTGGCTGGACCAGGATTCTAGACTAGCTCTAGGGCTGA
-GATATCTTAGTAGACCAGTTAACATTCATGTGGCCCAATTTCCCTTACTCTAAACCCAAA
-GTCAAACATAACCTCTAAAGTCTTTCATACCCTGAAATGCTAATCTTGTAATCATCTTTC
-TATTCAGGTAATAACTCAAAAGAAATGGTCTCACTTCCTTCATCCTCTGACTAAAGTTTA
-GTTAGTCCATATTTTATGAATCCAATTAATAGGATACTTTAAAGAACAAAAAGAAAAGAC
-TTTTCTTAAAAGCTAGAAACTCCATTCTGTAGTGATGATTCCCAGATCTGACTCTTAAAC
-TCAACAACCTCAACAGACAATGACAGGGAGAAAAGATCTTACAAGTTTGAGCTGAGCTGG
-GGTGGGGTGGGAGGTGTGAGAGAACAGAGAGACAGTTACAAATTCACAAAAATGTATCAC
-CCATTTCCATCTCCTCTAAAAAAATATGAAATAAGCCTTAAAAGGCTGTCATAGAAACCC
-ATTATTAAGCCAATAAAAACTAATGAAGAAATTATGTCATTTATCCAAGATATGGAAGAA
-CCACCTATTTACAGAAATCCTACCAATGTCCTAGACCTTCAGAAACTACATCTCACTAAG
-CTGACCATCAAGCCCCTTCAAACTGCATCTAAGGACAATAATAATATTCAAACATCAAGA
-AACAGGCACAGGTTCCACTCAACACCATTATTCCGTGGAGTCTTCCAGGACTAAATTGTT
-TTATAGAATCTTTGCTATCTTTGTTCTCTAGAAAATGATATCCCAAAGACTCTAAAATAA
-AACCAGCAAAACCCCtgtatttgttttccattgtgtcataacaaattatcacaaacaaaa
-caacacaaatggattatcttacagaagtcagtgggcttgactgggtctcacaagggctaa
-atgagggtatccagtgggtgggttccctgctggaaactctggggaaaatttgcttccaca
-ttcattcaagctattggctgaatttagttccttgcagctgtaggactgagttcccacttc
-cttgctggttgtcagctgggactggcctttcctactagaggctgcctgcattccccgtct
-cacactttcaatctggtcccctccagtaacggcaggctgagtccttctcatgcttcaaat
-ttgacttccccttctgcctcatctctgacaccagccagaaaaagttctctgcttttaagt
-gcttatgtgagtagaataaacccacccagaaaatccaagataatctacctaagatcctta
-actttaattaaatctacttaacatattcatgttccagggtttatagtatggaaatcgtag
-gggagccattctgcttaccgcagtctgccttctggtttccaaggattcatctctctctca
-aatgcaaaatacatccatcccatcccaaggtcccaaaggtttcccatctaaagcttatca
-tttcagaagtcccaaatctcattcatctattcaggtgtggatgaggttctggggacaaaa
-cagtaagtccaattcctggggcacaattcctaaagaaacaagttctctactcccaacata
-ccactgtgagacatgtagagaataacagttagacattccagttcaaatgggcaaaatgta
-aaagaaaacagagcctccggtccaaagcagtttcaaaatctagggaatctccattccatt
-tcaaagcctgggaaaaatcctctccagcttttagctccacccctctgggctctcctatct
-ccgtctgagtcaccctgattcttttatgaaaagcaacacattcacatgtgagtagtttta
-tcagcctgcttcctatcagtagaatttggggggtccaacagccctattactttctgtctc
-tttcaatccaaactagaactgtttatgttggcataaaattctcaagaacctaatgggctg
-tggaagtattccacatgggtccactccattaaagttcacattcacaaataaaccaggctg
-cacatttaatactttgcttggaaatctcagctaaatatacaagttcatcacttgcaaatt
-tggctttccatataaccataggatacaattctgctaaacttagttgctactatgtaacaa
-ggatcccctttctgccagtttccaataagaaagacctcacttctgtctgggccctcacta
-gcagagtcattaacatccatattgctactaaaagtatgtccTAGGCCttttcttttttga
-cagggtctcactctgccacccaggctggagtgcagtggtgccattaccgctcactgcagc
-cttgacttcctgggctcaagcgatcctcctgTGTtccaggccttttctatcatgcccctc
-aaaacaattctaacctttatctactgccactttcatttttaggtaatagtaccccactcc
-tggtaccaaaatctatactagtgttctactgctgccataacaaattaccacaaatgtagt
-agctaaaaataacacaaatttgttatctcacagttattgtaggtcagaagttgggtgggc
-ttggctagctaggtcttttgcttagggtctcacgaggccaaaaatcaaggtgtctcaagg
-ttgcattccttggtggaaactgggaaattcacttccaagctcaatcaggttgttgaccaa
-attcaggttccttctggttgcacaactgaggtccccatttctttctggttgtcagccagg
-gactggtctttgccactagaggctgcccacattccttctgataaactttccatgtggtcc
-tctctagcaaaggcaaatggagtccttctcatgcttcaaatctctgatttccttttctgc
-ccatttctctgatcccagttggagaaagttctctgcttttaaggacttaagtgactagat
-tcggcccacccagaaaatccaggataatttttctattttaagattcttaaccttaattac
-acctgccaagttccttttgccatgtaacacaggatagctacagattctggggatcaaggt
-atggcaccttgggaagagggagatgtaattctgcctactacaAATCCAAGTCCTATGGAA
-GGGTTTAAACTCACTTCCTAAAGAAAATCATCCCTTTCTTTAACAGAGTGTGAAGTAAAG
-ATGTATATATTTTACTTATGTGAAGTAAAGTATATATACATACATACATATGTCTTTACT
-TATGTGACACAAAGATGTATGTTCAGAGATAGAGACAATAGTAAAAACAAGGACTCACTC
-TGGATGAGTGAGTAGGAAAAGGACGCGCAGTATGGAAAAGGAGTTGCCACCTGTTTCATC
-CTCAAATTGCAAGGCACTTCACCCATAACTACTTAGAAACTAACCCATGCTCCTCCTTAA
-ATGTGTATTTCTCTTCTCTGTATTCCACAAAGGAGTACATAACTAGGCTTTTTTTTATTT
-TTAAAGAAAAGTCACCTCACGGGGACCTAACTGTATAATCAGTTGATTAATCAATCTAAG
-CAAATTTCCAATCTTGCATTCTTTCTTCAAGTCATACACCCTCCCGCAATAGCAAACCAA
-AGCCAAGTATTTCAAAGTCACAGAAGGACAAAAACATGCCCTGCTAAGACTGCAGGTGAA
-CTTTTGAGAATACCACGGAGGAGAACTAGTATTGGTACTGGACTTTCAGCCCCAGGTCCA
-CCAAGCCAGTAAAGCCAAATGACTTACAACAAAACCCTACAACAACTACAAAGATACTAC
-TCTAAAGCCCTGTCTACAGTCAAATTCTTGACTATAAATTTTACTTAGAACAGAAGAGCC
-CCAAATATACCAGCTAGTCCCTTTACAGTGACAGGTAAAAGCTACTTACTAcacttacta
-cctgccagacactgtagtaagcacttgacacaaattgtcttatttactcttctccgtaaa
-ctcacaagctagaaaataccatcatcccccttttacagacgggaaaactgaggcttagag
-agtttaggtcacacagctaagtagcaatggccctgatatttgagaacctaggcagtctgg
-tttttaaccactgggcctacactgCACTCCTCAGATGGAATGAAGTCTCCAATTCTTGGA
-AAAATCTTCCCTTCTTAGttttcttttttctttttgaggcggagtctcgctctgtcgccc
-aggctggagtgcagtggcggatctcagctcactgccacctccgcctcccaggttcaagcg
-attctcctgccttagcctcccgagtagctgggattacaggcgcgcgccaccaagcccggc
-tgatatttgcatttttagtacagacggggtttcaccgtgttggtcaggctggtctcgaac
-tcctgacctcgtgatccacccgcctcggcctcccagagtgctgggattacaggcgtgagc
-cacacgcccggccTCTCTTCTTAGTTTTCATTTCCTCTCCCCATGTCCCATTCTCGTAGA
-ATTAAACAGCTGAAAAGTAATCAAGTCTTCCCAAATAATTTGCCACCTTCTTTTCAAAAC
-TCTTTCCTCCACACAAAGCAATAGCCAAGATGCAACTTCTCCTGACCCTGACTCTGCTTC
-CCCAAAACAAACTACAGAAGCTCCACCCATCACCTGCTTAATCTAGCAATGTTCCAACAC
-TGCAAAAAACACACAACGAAAAACAAAATTGAAAAGTCCTACTCTTTCAAAAGGTCACCA
-ACATATGTATACCCTTAGCCAAGCTTTCTCTCCATACCTCTTTTTCTATCCAGGCTCCTA
-ACTAGTCCTTAACTCCAACTCCAGACGTTCTGCCCCACGTCTTGGTCCCTTCCCCCTTTC
-GCCCCAGCAACCCCGCCTGGGGTTCTCTCCACCTCGCACCCACTCTGCAGGTGGGAAGCT
-CAGCCCCGCCCAGAGGGACCCTAAGAAGGCCCCTACTCCAGCTGCCCAGTTTCGCGGGAG
-GGTTCACTGCACACTACCCAGCAGGCACCACTCCCTCCGCACCCTCCCCCAGCACCCCCC
-TGCGGCCCCACCCCTCAAGTTCCCTTCCCCCTCTGACGACCCCCTCCTCCAAGTTGTCCC
-CTAGTCCCCACCCAGTTCAGTCCTCTCCTCTGCAATAAGCTGGACTCCGGCAGCCGGTTC
-CCACCCTCACATCGGCCTCTGCCCCCAAACCTCGCCCTCCGCCCTGAGGGGTGGCCCCTG
-GGCCTCCCCGATGGGCTGCAGGGGCCTCGCTTGGTTTATGTGTGAAGGTGGGGGCAGGGG
-AAGGCGACGGGCCGCTCAGGAGTCTGCTGGAAGCGTGAGGGTCGGCCGCGCTCCGCTGCC
-CTATCCTGGGCCCACCCCACCCGCCAACGACCTCGCCTGGCTGCTCCCTAGGTACCTGTG
-GTGGAAGCGGCAGCGGCGGCGGCCGCTCTCCCCTCTGCTCACACAGACAATATGGCGGCG
-ATGGAGGAGGAGACACACGGCTCGGCCGCCAGCCGCAGGGACCAGAGCGAGGCTGCAGCC
-GCTGCTGCCGGAAGCGGAAACCCCCTCCTACCAGGAGGCGGGGCGAGACAGCTTCCGACT
-CCGCCCCCAGAGGAATCTCTCTGAATGCGGCCATGCTGGGATGTCCTATTGTAACCTTAG
-GGATTCAGTTCTGGCCTAGGGTGCAAAATGGAAGGAATCCCCAACGCAAAGCAGAATAAG
-GAGACTTGCAATAGTTAAGCGCATTTTATTTCAATAGTGTTAACAAGTGACAACAGAGAG
-AACACGAACCTCCCATTAGGTGAACAGTTGGTTTGACCCAAGTTAAGATGGCGGTACCCA
-GGTTTCCCACACTTCACCCAGCTGGCCCCCCTTTCTTGAAAAGAACCATGCGCGACCTGC
-AGAGCTGTAGAGCCAAGCATTCTGGGAGCTGAAGTCTCTTTTGCTCTGACCCCTCGTTTT
-AAATTAGGGTTTCAGCAACACTTTCTATTCAAACTTGGAGTTCGGAAGAAGTGAATGAAA
-GTTGGACCCTAGGAAGGGCATGGCGCAGGAGTCTGAGAAGTGAGGATACTAGCTCTCAAG
-AGACCAAGGCCCAATTCCTTCCTCCTACAGGAGTCCTGCCAAGAGCTGTGCGTCCAAAAT
-ACAGTGTTTTTTTTTCCTtctatctgcctcccacccctgctctccttgcccgagctacct
-ccccaaaacagccacaaagcactttctaccatgcagagctcatcatggtctccctatggt
-caaaaatctcccatggacctctttatgcaccaaagatagcccaaactcttcacttgacat
-tcagagtcctccataatttggccaaaccctcctttccagcctcctattctgccactctct
-tctcaaattccggaagattccacccacaagactgcaaacaattcctggaacttagctgtg
-ttgcctccctccctttacactggcagttacttctCTTACTGTCACCTCATGGACTGGATA
-ATTTCTGTATGCCGATTGAACTAAttcagggatcctttcctctaggggtctcctctctgt
-ttaactccctccaacccagacactatcagtcagtaacctgaggacctcagtctgtctcct
-ccatcagactgggagcccccagtggacagggctccatctgATGATCAACCTCTCCTTTGC
-AGGCCCTGATAAAAGCTGAAGCGTCTAAGAGTTGCTGAAAGGAGTTCAAGTATTAGTCTC
-ACCTCTGGTGGGACAGAGGTGTGAGCACTGGAACGAGGGTGAGGAGGCCAGGTTCTTTCA
-GTACCAACCATTATCCCTAACTGTCTCAGAATAGCTGGTTGTCTCAGGAATGGGCCTCTC
-CACCCTCCACAGCCCTGCCTTCACAGTTTGTCAGCTGACTAGCACCTCTGCTCCCAAAGA
-GGCACCTCTTCCCCATGTGGGGTTAGGGCTGGTGGTGGCTGCAGACTTATAGTGATGGCC
-TCAGGGAGGTGGCTGTGGCCTTCTCTGGACCTCATCTGCTAGACAGCTTGTGACATCTGA
-TCCCAATTGCCTGGGAACCCACAACAGTTTTTCTCTCAGTGTCCTGTAActgggcctcaa
-tttccccacttgtggactgaggaggttatacaagataatcccaaagtttctGGGAAGCCA
-TCTTCCAGGAAATGATACCCTTCTACCTACCTCTCGAACGTATCTTTTTGGCTCTTGTGG
-CTTTGTTTTTCCCAACTGTATTCAcatttgtttaactcacaacaattcatcatttgctat
-gagccagacactgtgctaggtactggggatgtgttatgaggaagacatacaccagttgct
-cactggtggagcttaccttctaaagtgagaagcaagtaatgcacaggtaaacaaatgcat
-aaacaaagtaatttcaggtagcaataagtgctacgaaaggaaaagataagtagctgtgaa
-gtatagagctttagcttgagtggttcagaaggtccctttgagaaggaaacagtaagtgca
-aacgtcccaaggcaggaaagagcatcacaagtttgaagaaggaggccatggtggctgaag
-cactgcaaataaagggaagaagaggaagaaatatggtgggagaggtgggcagggcattca
-ggtcatgataaggaagctgggttttcatctgagtgtagtgaggaTATTTCCCATTGCTTA
-GCCTTCATGCCTTTCCAATCTCAGCCTCTCTCACAGCATTAGTTCTTCATTCTTCTTCCT
-AGTTCTGGCCTCTATCCATGACTTCATTCAGAGGGCTCACCTGGGCACACATATACAACC
-CTCATACTCATGCAGGACATAATTGAAACCCAACTCCTGCCGTCTACTACGCCAGCCTCA
-TGTAGGTCTCCGGTCTCAAGAGGCTTCCCATCCCAAGTGTTCACCTAGTTGTAGACTTAA
-CATTTATCCTTAACTCTTACTGTCTCTGATCCCCCACATCACACCTCTCAGGCTAGTCTT
-TCTGCAAACAACAGCAGCAGAAGCAAGAGTTAAGATGTTGAGAGTACTTgcactgtgcca
-cacactgaatgttcatcatctcacttaatcctcatgtcaacctgatgaggtagaaaccaa
-aagtatctcaccgtacagatgaggagactcaggttcacagagatcacaggccatgcccaa
-ggtcacatgccggagatggagcttgcatttcaacctgggccATTAGAGTGActctctctc
-tctctctctcttttgagacaggatcttgctctgttgtccaggctggagtgcagtggcatg
-atcacagctcattataaccttgaactcctgtgcttaagcgatcctcccaccttagcctcc
-tgagtagctaggactacagacatgcaccaccatgcctggctcatttttaatttagtagta
-ttattattactattattattattgtacagatggggtcttgctatgttgccagggctggtc
-ttgaactcctaggctcaagcagttcccctgccttggcctcccaaagtgctagaattacag
-gcAAAAGTTTTAATCATGCACTAAGAACCTAAGtgtatttgctttctattgctgcttaac
-aaaatcaccccacaatatagtggcttaaaacaacaatattttatgtttgtgtggattggc
-agtttggacatgtctcagccaggacagctcttttctgctccaagtggtctttcctggctt
-actcttacgtttgctgtcagtgaacaggccagcaaactggttagaactccatggcctcat
-tcacatgtctggcagttggttggggttgttggcttgagtgccttggttctcctccatgtt
-gcttcttcagtaagctaactcaggcttacttacatgacggcccccagaagaaagaaaaca
-aaagcagcaagatctcttcagatctaggcttagaaatgatatagcatcattttcactgta
-ttatatcgatcaaaggcagtcatatggccagctcagattcaaggagagtagaaatagatt
-ccatctcttcatgagaaaaacatcaaatcatactgcaaggagtcatgtgtataaggaggg
-tggaattgttgtggccacctttgcaaacattatatcacaTAAGTAATCGTAGGCATggaa
-ctggttaaagaaattatggtacagccagacatggggctattcacagcaatgagaactaac
-atttttgagcacttaatatgtgtcagacactgtacaagatgctttacatctattaactca
-tttaatcctcacaacagctctctgtggccagtacatttttaatccccattttagagatta
-agaacaccaagtctcagagaggttaaacaactagtccaatgtcacacagcaagtgacaaa
-gccATTGAAAAGAATGAAGACAGTATTATGTCCTGACATAGAAATCTGGCCCTGACATTC
-TGTTATACGATACAAAGCAAGAGACAAACAGTAGTTTGATCAGAAAACATTTAAAAAGCA
-CATTTAAATAATTAGGAGATGTGTGTCttttttttttctgagatggagtttcactcttgt
-tgcccagggtggagtccaatgatgccatcttggctcactgcaacctccgccttctgggtt
-caagcgattctcctgcctcaacctcccgagtagctgggattacaggtgcccaccatgccc
-agctaatttttgtatttttagtagagatgggatttcaccatgttggccaggctggtcttg
-aactcctgacctcaggtgattgcctgtcttggcctcccaaagtcctgggattacaggcat
-gagccactgcgttcagctGGAGATGTATGTCTTATAAAAATTAGTAGAATAAAAATTTTT
-ATGTCTTATAAAAATTAGTAggccgggcgcggtggctgatgcctgtaatcccagcacttt
-gggaggccaaggcgggtggatcacaaggtcaggagatcgagaccaccctggctaacacgg
-tgaaaacttgtctctactaaaaatacaaaaattagccgggcatggtggtgggtgcctgta
-gtcccagctactcaggaggctgaggcaggagaatggcgtgaacccgggaggcagagcttg
-cagtgagctgagattgcaccactgcactccagcctgggcaacagagcgcgactctgtctc
-aaaaaaaataaataaatacaataaaTTAGTAGATCTATATGTCTTATAGTTTTAGATAAA
-TTCAGGAAGAATTTACTACAAACTATTAATGGAGCTTATCTTTGAAGAGGAGAAAAGGAG
-AAAACTTTTATTTAAACACCTCTGTTTGTGTTGCTTGAATAttttttttttttttttttt
-ttttttgagacagattcttgctctgttgcccaggctgaagtgcagtggcaatggtcacag
-cttgctgcagcctcaacctccagggctcaagtagtccttgcacctcagtctcccaagtag
-ttgagaccacaagtgtgtgccatcatgcctggctaatttatttttatgttttgtagagat
-agggtctccccatgctggccatgctggtcacaaactcctgggttcaagtgatcctcccgc
-cttggcctcgcaaagtgctggaattacaggcACAAAGCCTGGCCTTCTTTGAATTTTTTT
-ATAGCAATCATAAATTTTTATTTCAATACCTTATAAAGAAGAAAATGCTTTTAAAATGTC
-CTTCAACTTGGCTCCCACCTATGTCtttttctatttggttttatttttattgttttttgt
-tttcttttttgATACCACCCCAGCCCAACCCCTTATCAATTCTGACCCGAAGTTTTGTGG
-CTACCTTGAGGGCCCCTCCTCTCTCCCTCTGTAGTTCATCCTGCCTGCTGCTGGGGGAAA
-GCTCATTAACCATCATGTTCCATTTTTGTCTAAGAGTTTTCAATGGTATTGCATTGTCTA
-CACAGAAAGTCCAAACCCTTTGGCCTTGTACATTGGGTGTTTGTAAGTTTGACTCCAact
-tggttggattccagctctgtcacttactagcagcatatagttggataagttattagatct
-ctctgagcctcaatttccacatctttttttaaaaaaatgaaagAAAAgaccaggtgtggt
-ggctcatgcctgtaattccagcactttgggaggctgaggtgggtggatcacctgaggtca
-ggagtttgagaccagcctggccaacacagagaaaccctgtctctagtaaaaatacaaaaa
-ttagccgggcatggtggcacatggctgtaatcccagctactcgggaggctgaggcaggga
-gaattgcttgaacctggaaagtggaggttgcagtgagccgagattgtgccactgcactcc
-agctgagtgacagagcaaaactctgtctcaaaggaaagaaagaaagaaataaagaaagaa
-agaaagaaagaaagaaagaaaaaggaagagagagagagaaagaaaaagagaaaagaaaga
-aaAGGATATAGCATTACATATTTTGTGGCAAATTAGATTACTGTTCAGTGACTGTTCACT
-TTCTCACCCAGCCAGGGGCAATTAAtattttcctgccccattaatattaggcttggccat
-atggtttgctttggctagtggaatatacatatcagttacaatgtgcaaattccagcctag
-gccttaagaggtctCTCTTGTTTTCAATTGGCTGTCTTAGAATTTTCACCTCTTCCTTGA
-AGGGCGAGCTGTCATTGGTGCCTTACATCTTTTGAAACAGACTTCCAATCAAGGCTGTAG
-TAGGCAAGTCTGAGATAAGAATAGTTCTTTACTCTTTAGTTTTAGTTTGCattaattaaa
-ttataatttataGTTTTTCGTGAACTCCATATTTTTGAATGAGCGGAAGCTAAAGAGGTG
-GGAAGAGAATGCTCTGTCTCAATTTGGGAAAGCAGTAGCTTCTGTCCAATCCTCCAGCAT
-CAAACAGGCTAGTCCTAGAAGAATAAAGGACACACATAGTAGATCTGAAATTGAGTCAAC
-CCCAGCAGAACCCAGCCAAGATCAGCCAAACCCAAATGACTACATATGAGAGAGGGAGAA
-ATCAATGTTTGCTTCTGTCAGCACAGAGTCTTGGGGCAGTTTGATATGCAACATTATTat
-aggaatagccaactaacagattcacatcatagggcttttttcagggttaaataaatgaat
-acaggaaacgccttaaaaatacactggcatatagcaagggtgtaatgcatgagaactact
-attATtgggggtgcaactgtgaacaaaacaagcccctgttctcaaggatcttatgttctg
-cggagagatgtatggaatggcagctggtgatgagtgttatggaagaaaataaagcaggga
-aggagagggagtgctgaggtaaaatttcaaatgtgatcatcaacaaaacttcaacggaag
-gtgaaacttgaccaaatccaagaggaagtgaggcggggagccagaaagtatgtgggagaa
-gattgtcccaagcagagagaattcggatgggcaaagaccgtgaagtaggctcatgcctgg
-tgaatttcaggaatggtcagtagatagggcagctgagccgagggagtgGCTGATCTCGTC
-TCGGCTCTGCTGGGGTTGACTCAAATTCAGGTCTACTGCATGTGTCTTTTGTTCTTCTGG
-GACCAGCCTGTTTGATGCAGGAGGTTTGGACAGAAGggggacaatgtctcagaggttcac
-aaggtactggattgtgcacagccatgtagggctatcgtgaggacttgcttctgctctgaa
-tgaggtggggagctatgggagggttttgaccaggtggagagcaggctctgctatgcattt
-ttataggatttgtccagctgctaagtgtggactagatggaccgggaatgagggctgaagc
-agggagaaaagataagaagctactaccacaagccagacaagagatggtgttgctttgaac
-caaagttggactccgaggttcttttcaaagtaaaatcaaaagaatttactgataggtgtg
-gtatggggtgtttgaggaaaaaaagaattgaggatgactccaaggcttctggcctgagga
-actgaaagaaggaatttgccagtaactgagatgaagaaggctatagaagagaacttcttg
-gggcagggggagaaagagaggaggaattagcagttccatttgcgacttgttaaatttaag
-tgagctatgagacttccaagtgcagatgactaatcagaagttagatgtatgaatctgagc
-ccaggagagaggtccaagctggagacgtaatttttgggagttactatgtactaaattttg
-tcctccccaaatttatatattgaaaccctaacacccaatgtgacactatttggagacagg
-gtctttaaaggaggttaaaagagatcatagagtgggccctaattcaacaggactattgtc
-cttacaggaagatgagatatcagagctcattctctccccatgcaggtgctcagaggaaat
-gctgtgtgaggacacagcaagaaggcagccatttacaagccaggcagagagccttcacca
-gaaaccctccctgacagcaccttgatctcagatttccagcctctcagtgagaggctgaac
-tgtgagaaaataaatttctgttgtttaatcctctcagtctgtggcattttgttatggtag
-tttgagcagactactactgagtcatcaacagagaaatggtttttaaagccatgaggggcc
-aggcatggtggctcacacctgtaatcccagcactttgggaggctgaggtaggcagatcac
-ttgaagtcaggagtctgagaccagcctggccaacatggtaaaaccccgtctctattaaaa
-atacaaaaattagctgggtgtggcggtgtgtgcctgtaatcccagctacccaggaggctg
-aggcaggagaattgcttgaacccgggaggcggaggttgcagtgagctgagatcgagccac
-tgcactccagcctgggcgacaaggaagaaactgtctcaaaaataaataaataagtaaata
-gccataaggctgggtgaaattgcccagggaatgagtgtagacagagaaggaggaccaagg
-actgcgccctggggcatccaacagtaagagacaagcaaccagcaaaggagcctgagaagg
-agcagccagtggggtaagtgtcctggggaccaagtgaaaaacgtgtttcatggaaggagt
-gttgatcccctgatcccctgtgtcagatgctgctgaggggtcagaaaagaaaagaacaaa
-gagctgatttacaaagtggaggacattgttttgacaggagagagtgtaggtaggttggtg
-ggaacaaaagtctgattggagtgggattaagagagaataggagaaaatataaatatagac
-aTagaaaggaaggaaaaaaggaaggaaggaaggaaggagggCTCtttttttttttttctt
-tttgagatgggttctcactctgtcgcccaggttggagtgcagtggtgtgatctcagctca
-ctgcaacctccgcctcccaggttcaagcgattctcctgcctcagcctcccgagtagctgg
-gattacaggtgcgtgccaccacgtctggctaatttttgtatttttagtagagatggggtt
-ttgccatgttggccaggctagtctcaaactcctgacatcaggtgatctgcctgcctcagc
-ctcccaaagtgctgggattagaggtgtgagccaccacacctggccTggagagctcttttt
-aagagtagaaagctgggccaggcgcagtggctcatgcctgtaatcccagcactttgggag
-gccgaggcaggcggatcacctgagatcaggagtttgagaccagccgggccaacatggtga
-aacccagtctctactaaaaatacaaaaagttagccaggtgtggtggtgcatgcctgtaat
-cccagctcctcaggagactgagctaggacaattgcttgaacctgggaggtggaggttgca
-gtgagctgagatagtgccattgcactccagcccgggcaatgagagtgaaactctgtctca
-aaaaaaaaaaaaaaaaaaagtaggaagcaaatgactaaatgtagaagaataggagttggc
-aaccaccataggagacaatcattaatggacactgcagtagtggattaaagtttgatgaga
-aatagggcatttgcacagtctgagaatatctccccccaagatacttattaattacaaagg
-gtaaaatagtaactttacatggagaaacacagccaacaccacttgaccaagtgataaagt
-gaacatcaccagtagcagggcaaattgacatcatgtggcttccgggatgatgcactgagt
-gggacgtcgcgtcacgtcagtgatatttctgccaaagaggcataattgactcatgaggaa
-gcattagaaaagcccaaagtggccaggcacagtgactcacacctgtaatcccagcacttt
-gggaggctgaggtgggcagatcacgaggtcaggagttcgagacaagcctgaccaacatgg
-tgaaaccctgtttctactaaaaatacaaaaattagctgggcatggtggcgtgcgcctgta
-gtcccaactactcaggaggctgaggcaagaaaatcgcttgaacccaggaggcagaggttg
-cagtgagccgagattgcaccactgcactctagcctgggcaacagagcaagactccgtcta
-aaaaaaaaaaaatgtccaaagtgaggatatctttgcaagagaaccttactctttaaaaat
-gttgaagtggtaaaagacaaaggaagactgaggaatagttttagatgaaggagaataaag
-taattacaactactgaatgcaatgtgagatcctagattaagaaaaaatcattttcactta
-ctacaaaatatattaactagatgagtggtgaaatttgaataagatctgtagattagataa
-tggttttgcatcagtgtaaaacgtcccgattttggttattataagagaatgtccttcctt
-ttaggaaatgtgtactggtttttaggcctgtaacttaccataaaagagttcagggttgga
-ggaaagaaaaataaatgataaagcaaagatggtaaaatctgggtaatgggtatttggcta
-ttctgtttttgtttttgagacagggtctcactctgttacccaggctggagtgcagtggtg
-tgatcatagctcactgcagcctcaacctcccaggctcaagcaatgctcccacctcaacct
-cctgagtagctgggaccacagttgcgcaccaccacacctgactcatttttaaatattttt
-tagagatggggtctccctgtgttgcccaggctggtctcaaattctaggctcaagcaatcc
-tcccatctcagccttccaaaatgctgagattttaggtgttagccattgtggctggtgaga
-tttgagtgttctttgtactactttgtaacttttctgtaagtgacattatgtcaaaataaa
-TTCTAACaagagagaatagaaggaaaggaagtagagacatggaggcagtgagtccaggta
-actttttgaggagttttgctatagaactgaggacaggtggcaggtggagagcaaaatggg
-gtcaagataagttgttcaaaggcagaaattgtagcatgtttttatgctgatgagagagat
-tcagtagattggaaaaaaaagtaataatgcagacagagagagagaagagagtggctagaa
-tggtgtctctggagagaaggatgggatctagtatacaaatgggggctttgaccttggagc
-acagatggctcatccatggtcacagaagggagggcagagtatttgggtaccagattggta
-ggtaggtagctgtgcagtggaaatgtgtggaaatgctttctgattgctaccattttccct
-gtgaaataggaagcaaggtccttggctaagagtgagaatgggggagaaggtgatggaggt
-ttgaaaagataggaaggaagtgtgtagggaaaatgaatggatctactgtgattgtcaggc
-agaacaaaagacaccactgaagctatcatcattcaagtaaagtgaggccagtctacatgg
-tggtgtgtttttctccagccacattccactgcagggggacaaacacagagggatgtggag
-ttggcaccaactaacaggtgtttagtcagagagggtcagggggatcttgggagtatgcag
-cacagtggggataaagttatatcatggctgtaatccacaaagaaggaagtgaggacaagg
-aaacaccaaggttcagagaggtttagtgacttacccaagcttgcacagctagtgaataat
-gagttggtctctgcatccaggcagtgtggctcaaagcttattctctcaccaacccagtat
-acacaggctgtccccagggtgtagcatagcatttggcacatgtagCCTCTGCTAACAAGT
-GAATTAAATTGTACCTGGGGTTCTCTCTGCCTTTCATTCTATGCCTCCGAAGAATACTaa
-ataaaataaaataaaacaacaacaacataaaaACCTAGCTTCTTCCTTGCCTTCAAGCTG
-TCTTTGATGTCTTAGTGTGCACGATGAAGGAGATGTACCATCAGTCTCCTTTGGGTGGCC
-ATTGGTTCATGCCTGCAGTCTGGCTttcagcaggtcattctcagcacatactctggggca
-gacactttctcaggttctcagtacacagcgggaaacaagtcagtattcctggcctggtgg
-agctcagtcaagtggggagaagataagcagacaaatctagcattgcaaactgggattatc
-gccaggagagacaagtgggcggggtatgagagtgcatgagagtaaagccgacctagtgga
-gggcgggaagaagagtttacccaaggaaggtcaggaggggtggcccatggggctgactga
-agaggagaaacagcatgggcaaaggtcctaagataggaacatgcctgttaatggcatatc
-aaggaggccaatgtggtccagacgtatatggagagggtggagggtgggagggaacatagt
-gggaaatgagatgggagaggttggcaggatccactacaccctgtagaggaatctgattta
-agaacaatagggtttaagcaggggaatgatttcgtaaggttttacatttatcagccaggt
-gcggtggctcacgcctgtagtcccagcactttggaaggctgagatgggcggattgcttga
-gctcaggagttcaacatggggaaaccccatctgtaaaaaaatatacaaaaattaggctgg
-gcgtggtggctcatgcctgtaatcccagcactttgggaggctgaggagggcagattatga
-ggtcaggagatggagaccatcctggctagtagtgaaacccctggctagatggtgaaaccc
-catctctactaaaaatacagaaaaattagccgggcgtggtggcaggcgcctgtagtccca
-gctactcgggaggctgaggcaggagaatggtgtgaactgggagatggaacttgaagtgag
-ctgagatcatgccactgcactccagcctgggtgacagagcgagactccgtctcaaaaaaa
-aaaaaatatatatatatatatataaaatacaaaaattagcagggcgtggcatcatgcacc
-tgtattcccagctacttgggggctgaggcaggaggattgcatgaacccaaggagttgagg
-ctgcagtgagccgagatcaccccactgtgctctagcctcaatgacaaagtgagatcctgt
-ctcaacaacaacaaaaaaaattttttttatttataaaagacctctttggctgctgggcca
-ggagcagggaggacaggaggcaggggtaggagtggaggtgtgggaggagaggaagcagga
-gaggagtggaggtgtgggggcaggggaggcagtgggtgggccaggagagaggtgatgtgg
-catgggctaagatggaagcagtgcagataaagagaggtggattgacttgggacatatttt
-ggagctggagttcacCACAGGGAAACTGAGGCCCAGTGCTTCCAAGGATAGCGCTCCAGC
-TCTCCCAGCCCAATGGAAGCTTTTAGATACTTCTGCACTGTGGGGGTCACTTGTGGGTGG
-TTGCATTGGGGGACGAGTGGCCAGGACAGGTGACCTCTGACTTTTGTCTGGTGATGCGTG
-AGTCTCAGATTGGGCTTTGAAGGAGCCATGGGTACCTTGCTGGGCAGGTGGAGCATGTCC
-TTAGAGGATCATCCCACCATCCTCACgtaaccctgcaggtctcttctctctgagtcatag
-ttctcacacttgtaacatgaagagggacagtacccacttAGGCGACATCACCCCCTTCTT
-ACAGATGAGACAACTAggccaggtacagtagctcatgcctgtaatcccagcactgtggga
-ggctgaggcaggcagatcgcttgagcccacacatttgagaccagcctgggcaacatggca
-aaactctgaatctacagaaaatacaaagattagctgtgtgtggtggcatgcgcctgtagt
-cccagctacttgggagactgaggtaggaggatcacttgagcccaggaggtggaggttaca
-gtgagctgagatccaccactatactccagcctgggagacagattgagactttgtctcaaa
-aaacaaaaacaaaaacaaaaCCACCACCACCACCACAACAAAAAAACCCAAAAGAAAaca
-gatgagacaactgagcctcagtgaagggaagtggctctttagggtcatacaggagtaaag
-acacagccaagactagcacccaggctagagcctgggctgttgacctttctgcttcatcat
-ttgccTCCCATACCTTTCCTGGGCTCGTCAGTCCTGGGGATGCTCAACTCACCCAACACT
-GTGTTTCAAGCCCAGGGAATCCAGGATCGGTtagttcagtggttaggggtatgggctgct
-tggattctatttccagcgccaccaaggggccttattctgtctgaaccttggttttctcct
-ctgcaaaatggggctaacagtgcatacccttgtagcactgttacaaggtaggggaactgt
-acagatgtaaTGATTTGTGTATGTGAGTCATTTACAAGCCTTTGGAGTGGCTGGCACCCA
-TCATTGTTTGCTGTTGCTGTGATTATCATGCCATTGGACTgtggcttgaaaccctacagg
-cccaaggctccctttaatagtagttataatgcttcttttctaaaataaaatacatgaata
-acataacctgctgacgcacataattttttttttttgagaccgagtctcactctgtcatcc
-aggctggagtgcagcggcacaatctcggctcactgcaacctccgcctcctgggttcaagt
-gattatcctgcctcagcctcccgaataggtaagattacaggcgcatgccaccatgcccag
-ctaatttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcgat
-ctcttgacctcgtgatccttccgccttggcctcccaaagtgctgggattacaggagtgag
-ccaccgcgcccggccatgcatagttttaaacataaataatgtcctagttgtaatttaaaa
-gaaaataaagtgaaaataatttagaataaattaatatgtaaatgttccaggacaatgtgt
-agaaaccatcacaaagtagttgggtgggctctgctctgggtggaatcattgagaatctgc
-aggctgaattggtaacgccgcactggcggcacatgcactgtgactgcatggctgtgatag
-tctgaaatgtgagcagtctaggtaaagttctgaaccaaacacaatccattctgttcccaa
-tcgctacagactaaatgtttgtctcccccaaaatcttacgtcaaagcctaatccccagcg
-tgatggtattaggagatggggccttttggaggtgattaggttatgagtgcagagccctca
-tgagtgggattagtgcccttataaaagaggccccagagagctctgctgccccttctacca
-tgtgaggacacggtgagaagccatctatgaaccaggaagcggtcttcaccagacatggaa
-tctgccagctcctggatgttggacttgccaggcttcggatctgtaagaaataaatttctg
-ttgcttataagccaccagtctgtgtaatttgttacagtggcctgaactgactaagacacc
-aatttatgtgaaggttgctttcctggcagagtcgctgttattaaaaccaagcaaaCACac
-attgtactggaaaaggcaaaactatagagacaatgaaaagatcagtggttgccagggctc
-aggggaggggagagagggatgcacaggtggagcacagggcatttttagggcaggggacct
-cttctgtatgatgctgtaatggtagataaaggatgtatgtacttgtcaaaacccagcatg
-ggccgggcgcggtggctcacgcctgtaatcccagcactttgggaggccgaggcgggcgga
-ttgcctgagctcaggagtttgcaaccagcctggcgctacagaaatcctgcttcaaatcca
-gaaaccccgtctctactaaaaaacacagaaaattagctgcgcgtggcggcatgtgcctgt
-agtcccagctactcgggaggctgaggcaggagaatttcttgaacccgggaggtggagggt
-gcagtgagccgagatcgtgccactgcactccagcctgggtgacagagcgagactctgtct
-caaaaacaaaaaacaagcaaacaaaaaaacaaaaaaaaacaaaaaatccccagcatggta
-gaactgtgcaacacaaagagtgaactgtaaggtaactgtggatttcagttaataattgtg
-tgtcaaaattggtttatcaattgtaacagatgcaccatgcatttgcactaatgcaaaatg
-ttaataacaggagaaactgcatgtttggagaaggagtacaagggaactgtctatgatttc
-tgtgtcatttttctttttcttttctgagagagggtcttgctctgtcccccaggctaaagt
-acagtggcacgattagagtccactgcagcctcaaactcctaggttcaagcaatcctttag
-cctcagcctcccaagtagctaggaccacacacatgtgccaccatgctagggaaattaaaa
-aaaaaaattgtggagacaggttcttgctatcttgctcaggctggtctcaaactcttggcc
-tcaagcaatctccccatctcggcctcccaaagcactgggattacaggcgtgagccagtgt
-gcccagtctctgcacagttttgctctaagtctaaaacttctctaaaaaagtagtctatta
-aACATAAAAAACAAAATGAAAACCCCCacacattgtgtttatatgtaaaatagaattcgg
-tccttggctcagataattaaaaacaaggtttttacctacactaattaccaaagggagatt
-tgaaaatcatgACTTGAGATGCACTGCAGGATGTCTGCACCCTTGCTCCCCTCCTGCATG
-GCCGGGGCACCCCCTGGTCACTGGGAACTCTCCAACACTCTTGGTGACATTGCCCCCTTG
-AGGATCTCTGCACTGGATCTTTGCTCCCTCTCCTGCAGAACCCACAACTGCTGACTTACT
-GATCTTGGGTGATGTCTGATTAAAAAGTCTCCCCAGGCTTAGGAAACTCAAGGTGCCACT
-GTGGACACAGCTCCCACATTTCAGCTTccagaaatcctgcttcaaatccagatcccagca
-ctccctcattatgtggacttgaatgagtcacatcaatttattgagcttcagtttccccat
-tgatgggaaaaagggtgattgataatacctgccatactttatattcataatgaatataat
-gagtatattcattaactcagtaaatatatattgaacacctactgtctgtgctgagaattc
-aacagcgagcagaacaaacatctctgccttattggagcttatggtctcgtgatggggaca
-gacaaaaatcaaacaaatatatgagataatgtcagtgataaataaaaataaggcagagtc
-acagatggaaagagggtagggcaagggatccttggtaagtgtcgtcctggatggcttccc
-agaggagatggcatttgaacagggctgggaatgaagtgaaggaacgtgccacgaaagtct
-cagggcgaagaggcaacagcaaacaccaaaaccctgaggtgggaatgtgcttggtgaatt
-cgagaaacagcaaggaggccagtgaggccggtggggagtaagagggaagagaaagtgagg
-acagagagatctggagaagccagactctgtaAGGAATTGGGGGTTTATCCCAAGTGCAGC
-AGGGAGAAAACTTGAAGAGTTATTTACTGGGGAAGGCTTCCTGTGTTGTGTGCCCTTGCA
-GGTGAGAAAAGGTGATGAGCCCACTCTAAAGCCAACTCTATGGCCCATGACCGTGGTCTG
-GGACACTTTGAGCAGAAAGCGTCCTGTTCTCCTTGGAGTCAAAGGATTGGTGACAGTGTC
-TGCCATGCTGTAGTTTCCACAAAATACCACCAGGTGACGACTCTGGGTCACGCTTCTAAC
-TTGTGGGTTCTTGATTcctggagggcttttgctaaaacacagactgctcctggccccagc
-cttccaaagcgctggattacaggtgtgagccaccacacctggccTGACAGCCATGTTTTT
-AGCTTTTAAAAGCAAAACTTTGGCATTAGCACTATctctgtgagaggggccgatcattcc
-tgttttccagatgggtctatgaggctcagagaggagaaatcattgtctccatgagcaaaa
-gtgataaaactggcactcggcccccatgtctgcctgacttcaaggcccccaatccttcAG
-GGATGCCACACccatgtgcccagtgaggctctgggaattttaaaaactcatccaatttaa
-tccttacaactgaacaaatcccatgcaacgttaatgtctccattttagagatgagaaaac
-tgaggactagaactgagaaataagtcacctgatgtcgctgagctGTTCTAAGGCTGACAT
-catgcattttggagtcagagagacctgaatctcaactctagctcacactctccctagcta
-tgttcacctgatttctctgagccacagtttaagatgggaataagagcccctcctgcttgg
-tagctgtTGGTAATATTTATGAACAAATCTAGGCCTGGGGCCTCTTAGGCTTACAGTGGC
-ACCAGCCTCTTCTGTTCTGGAATCAGGAGGGAAAGTGATTGACCCGGCATTGGCCATCCC
-TGGCCTGGCTGGGATCAGAAGGGTCCTGGAAGGATAGGCAGTACCCGGCAAAGACTGGGG
-AGGGAGCTTGCTTAGCAGAGGTGTGAGGGACCTCACAGGAGTCCCCACAGGGTGTCCAGG
-TAGGCATAGGTATGGACGGCTGGACAGGGACTCCAGTTGGCCAACCAAGAACAGGGATAG
-AGCTTGGGCTTTGGGGTCAGGCAGCTTGAAGctctgggttccagctcccagatctgtaaa
-gtggaacagtaatgactcttccctgttttggattattgagaggaCCCCGGGGAACAGTGG
-GCTCAGCTGGAGGGATGACATTCTAAAGTGTTCTCTGGGACCTTAACCCCAGTCTCACAG
-GAGATGGGCCTTTGACTGTGGCCTTTCTGAAACCTGAGAATGTTAATGGTCACATAACGT
-TAGTAACAGTGATGGCAGATAACATCTGTCATGGATTAGAGGCCACTGGGAGGTTCTCCC
-TCACAGTTCTGGGTTCTTTGGATCAGAAACATGGCACAAACACACAGCCAAGGGTGGTTT
-AGGGCCTTGCAACTTACAAAGTCCTTCCATAGCATTGCACTGCACCCTGTGTTAAGATAA
-ATTCTCCAAGCTTTaagcactctgctaagtgcttgacaggccttattttattcttccaaa
-acactttgaagtgggtgttgccttgacccccattcttcagctgaggaaatgggaggcata
-gtgaggtcaagtgacttgcctaaggctactcagctggaacgtagagcgcctcatcccatg
-cttgactctgaGTAGAGCAAGGGTTGCACAGCAAGTCAGAGGCTGAGAGGGCCTTGGAAG
-GACCCGAGGCTCCCCTAGCCACTCCTGCCTGGCACCGATTCCTCCAATCCCACCTGGAAG
-TGGCTGGAAGTGAGAGGGAGAGGCGGTAGGGGTGCTGAGCCTGAAGGGAGGTTTCAGGAC
-TCAGGCTAGGAAGGCAGAGAAGGAGAGGAGGGACGGAAGTGCCCCTTCCCCCTAGAGCCA
-CTGAGGGGAGAGATAAAGGCATGAGGAGATGTAGCTGGGGCCAAGACAAGGAGGAAGAGA
-AGAGCTCAGGAGCTAGAAGGAACAACTATCTGGGGAGGAAGCCCCGTTCCAAGAGAGAAG
-GCCAGGGATGGGAAGGGGTGGGCCAGGCCCTTGGGCTGGGGTCCTGGGTCCCAGTTTTAG
-CAGGTAGCAAGACCCCGAACTGGATAGAGGGTTGCCTTCAGTAGATACCCTATCATTCCT
-GTGTTATGAGAGGTTGGGGCCACTTGAGGTGAGCCCAGGATTCAGCCTTCGAGGCTCAAC
-ACACTTGAGTCCAGCTGAATGACAGAATGAGCCATAGGACACTGTCCCAGGCCTGACttc
-cttccttcaacaaatatctatggaggattcaccaagggccaggctgggctcccagcagga
-aacaaagtccctctgaagagagactaacaccttcgttaaggagcccccaatctcatagga
-gagatggacaaaaagcagaaaatgaattggtatccagtatcacttttggctgtaaaggtg
-atcaggggaaaatgaatggattggagtctacctattttgtgatggcggtcagggagggcc
-cctctgagaaggtgtcatctgcacagaggcctgaaggagatgaggcagtagctatgaatc
-tgggggaagagcatttcaggcaagcgcaaaggccagggcaaaggccttgaggcaagaaga
-tgctgctgtggaggaaggagggcaccaagcaaggaggccagtgtggctgctggtgagaga
-taagagagtgaaggaagatgagggtagagtccggggggcagatcacatagggcctcaaag
-gccactctatggattttagctgcatctcatgtgacatggacattgaaggaTTTTTATGTG
-TGTGTGTTTGTTTGTTTGTTTGTTTttgagagggattctcgctctgtcacccaggctgga
-gtgcagtggcacatctcggctcactgcaacctccacctcccacattcaagcgattctctt
-gcctcagcctcccaagtagctgggattacaggtgtgtaccaccacgcttggctaattttt
-gtatttttagtagagacagggtttcaccatgttggccaagctggtcttgaactcctgacc
-tcaactgatccacctgcctcggcctcccaaagtgctgggactacaggtgtaggccactgt
-ggcctgtgacattggaaggttttgagcagaggtatgtgttgtgacctgactcaggtttta
-ccagaatccccctgagagatgttctggccaccactgaagaagactggagggtagagcagg
-caagggctgatgcagggagcccagtgaggaggctGGTCAATGAGCACAGCAGTTTGGCCA
-ACGATCTGGGGTGCTAAATATCAACAGAAACAAAaatatttattgcatgctttctgtggg
-tcacaaactattctaagtggttgcttgacatggaatgcttttaatcttcagtacagattt
-taggtagatcatatttttgtACATTTATGTCTATTTGTCTCTGGACTGATTtttttttaa
-ttgagatgaaattcacataatataaatcaaccatttgaaagtatacatctcagcggcatt
-tagtatattcacgacattgtacagccacacttctgtctagttccaaaatattttcaacac
-cccccccaaagaaactttgtacccatcaaagatagatgatatttttatcctaattttaca
-gatgaacaagcagaggcgtggacaagcagagtcacgtgccccaggtcacacagccaggaa
-atggaacaagctggCCACAGGTGTTGGGAGGAACATGTTGACAAGCTGCCCAGGATGGCC
-TGGAGGCCCCTTCGGGGTCCCCCAGGTAATAGCACCAAACTGCCttttatttttatttat
-ttattttgagacagaattttgttcttgtcacccaggttggagtgcaatagtgcaatcttg
-gctcactgcaacctccgcctcccgggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgtgccaccatgcctggctaattttttgtatttagtaaagacag
-ggtttcatcacgttggtcaggctggtctcgaactcctgacctcaggtaatccaccgcctc
-tgcctgccaaagtgctgggattacaggcgtgaaccatcatgtccagccCAAATTGCCTTT
-TAAGAAGGGCATGTCagccgggcgcggtggcttacacctgtaatcccagcattttgggag
-gctgaggcgggcggatcacctgacgtggtgagtttgagaccagcctgaacaacatggaga
-aacccgtctctactgaaaatacaagattagccgggcatggtggtttatgcctgtaatccc
-agctacttgggaggctgaggcaagagaatcacttgaacctgggaggtggaggaggttgcg
-gtgagccgagatcacgccattgcactccagtctgggcaacaagagtgaaacaatgtctca
-aaaaaaataaaaataaaaataaaaataaaaataaaaaAAAGAAGGACATGTCCTCACTTC
-TGGGCTTTTGTTTTGTGGAAGGGGTGGGATACATTTGAGGCCAGAAAACAGAAAGCACTG
-GGAAGGCTGAACAGTGGCCCCTGCACCCTCTCTcaggatggtgcacagaggagaatgggg
-actctggagccaggctgttgagttcaattcccttctcccacctttcttccatgttgtgaa
-gttgggataataagagcaccaatctcatcagtgttgggggaaagtgaatttcccatcagt
-agagctcagcactgcccgtagtatttgctcaatcaaCAGCAGCCTGCATTCTCTTTGCTG
-CCCTCTCCACTCCAGGAAATAAGTTAAGCAGGTACCTAAATGCAATCTCAGTGTTGGGCC
-TCGTAAAACATCTGGGACAAGACATCCTCCATTACCAGAAAAAATGCAGTCATAAAAATC
-TCAAGGTTGACAGGATAGTGCCCAtttttatttatttattattattattattattttgag
-agaaagcctcactctgtggcccaggctggaatgcagtggcacgatcttggctcactgcaa
-cctccacctcccaggttcaagcgattctcctggctcagcctcccgagtagctgggattac
-aggcacctgccaccacgcctggctaatttttgtatttttaggagagacagggtttcacta
-tgttggccaggctggtctcgagctcctgacctctagtgatctgcccgcctcggccaccca
-aagtgctgggattatagatgtgagccaccgcacccggccCTGATACCCATTTTTAAAAAT
-CACATACAATCAAAATTCAGGATATAATTTACATAAAAACAAAAGCACTCATTTTGTCCA
-TCCCTTGCTTTGGGTTTATCTACCGGTCTTGTTGACTCCATTGCTAATATACATCCAGGT
-CCCATCCCATCTTCCCAACCTTTCCCAGTCTTTCATCCTTCAGCTGCACCTCTATGGCAA
-GGAGCCACCTCATGAACATCAGTTTCAGACTTGACAGCTGATGGCCGGGGGTGCAcatgg
-gcttgtggagacacggtcagggagccctgggtctacacctgagtctgcctgggccgctgt
-ccgttgtgtaatcttcatcaggccacatcctctctctgagtctcagttttcttttcctta
-aattggagatgaaaaagtctgtctcacttggcagtcaagaaggtccaacaggataaCTTC
-ATCCATGGTGAGAGAGTGGAGGAGAGGCCCCCAGGAGGAGGCAGGGATCTCATTCTGCGG
-GTACTGTACTTGGTTCTGGGAGTGGGATGGCAGACAAGCGTGTCACTGTCTTTGTTCTCA
-GAGCTTTGGTTGTGGAACGGGAATGGGAAGGTAAGGGAGGGTACCCCTGGCAGGGGCACA
-GCATAAACCAGGGTGTGGAGATGGGATGGCGAGGCAGGACTGCCCCAGAACTCTGTCCCC
-AGGGGCTGGCAGTGCTGAGAGGGACAGAGGGAGAAGCGATTGTTTATTCTCAGCCTCAGG
-AGGACGCAGGAGAATCTCAGGCATCAAATTTAGTGCAGCACACCTGCCTAGGCAAAACTG
-GACAGCTCCACCTCAACTTTGTAGAGGGGCAGAGAAAGCTGTGGGGAACCACCTTCCTGC
-TCTTGTCATGAAGTCCTCCTCAACTGGAAGCCCAAGCTTCAGGCCAGGAACTTCCCCAGC
-AGAGGCAGCCTTCCCCAGGGGGCCAAGACCTTGGCAGAATGTCTGGGGTGCTCATGGCAG
-CGCCTCTCACCTGGCCCCTGCCAAATCAGTTTCTGCTTGGCCTCTGCAGGATCTGACCTC
-GTTGAGTCCCCAGGGCCCAGTTCTCTGCCTCTGAGGCTAAAAGTGAGATCGTTTCCTGGT
-TGAGGAGTGACTAAAAGACTTCTGTGTgtagagactgggttttgctgtgttggccaggct
-ggtctcgaactcctgaccccaagtgattcaccTTAAGGTGAATGTGTGGCTGTGTACGCG
-CACGTGCAGAGCAGAACCATCACTCTGCTTGGGCTAGGCAGCTGGACTAATCGTCCATTT
-CCCCCCGCCCGGAGGCCTCTTCCAGGCCCCCAGCTGCCCTGATGGGCCAGGTCAGCCCCC
-CCCACAGGAGCCCCCAGCCGCTCCCCATTCGGCTTTCCTTGTATTGTGCGCTGCCTGGTT
-TCTCGAGGAAATGGGGCGGCTGCTGGGTGCGGGGGCGGCCGCCAGCAGCCCCACCCCCTT
-CCCCCCATTGTCACTCCTGGCTTCTGCCCCTAGCCCCTGCTGCTGACACTAAAAATAGAC
-CTGTTCACAGGGAGACGGCCCCACCCCTGAGCGGGGCCCCAGGCTCAGTGTCAGGTTGGG
-TTTGCCAAGACAGAGCTGCCCTGGGGACTGAGGTGGCTCAGCTGAAAGACCGGGGTCGAA
-ACACGTTAGGgctgtgtgaccttaggtccccttttctcctctctgagcctcaatttcctc
-acctttaaaatggggtaaggctacctacctgctaaggttgctCTTGACAATGAACAGAAG
-CTGGGTGAGTCACAAGCGCACTTCGTTCTCGTCCTGCCCGTGGTTTGGTGCTGCCTGAGC
-GGCTTGAGAACCTGGAGGACAGATGGCATAACACACGCCTTCATCTTCAATCTGCCTTGA
-ATGATTGCCAAGGACTTCCAAATCCCCCTAAACAGAGGAGCTGGAAGAGCCCACTTGGGA
-ATCCAAAAGTGTCCGCAGCTCTGCTGTGTGAGCCCGGGTAGGTGCCTCCTCTCTGGCATC
-CATGagctcacacgtgaagtatgcagccaggctgggactcgaacctgtgtctgcagcctc
-tgaagactgttttttccgctttaaggggctgcctcCATGCTGATGACTCCAAGGACTTCC
-TGGCTGGGATAACCCTGCCTTTTCGTCTACAAACACATGATTCATGGTGAAGGAAGATGC
-TGGGCGGTGGGCATGGAAGCCTGAGCTGGGGGCTGGGTAGTTCCCCTTGAGCCCATGCAG
-ATGGGCAGCTGTCCTCAGATGCCACCCGCAGCCATTGGGTTGGGCCCTGCAAAGGAGATA
-CTGGCATGTGTCTGTCTACCAGGCTCTTTTTTGTTGTTGTTCCTTTGTCCTTTTTTTTAA
-ACCATGGAATATTTCAAATATGGGTCTTTCATATACATTCAAAACCTTGAACTCTTAGAA
-TTACTTTTGTCACAGTTGCAATTTTTTTTTAAAtttttatttcatttgtctatttatttt
-ttgagacggagtctcgctctgttacccaggttagagtgcagtgacctgatcttggctcac
-tgcaaccttcgcctcccaggttcaagcaattctcctgcctcagccttccaagtagctggg
-attacaggcacgcaccaccatgcccagctaatttttgtatttttagtagagacagggttt
-taccatgttggccaggctggtcttgaactcctaacctcaggtgatcggtccaccttggcc
-tcccaaagcgctgggattacaggtgtgagccagcgtgcctggccTGCAATTTGATATATG
-TCTATGTAATTACCTATCTCCCATTAATCCTGGGCCCTAGAACAGGGACTGAGACTTTAT
-TATTAATCCATGTATTCCCCCCCAAAACAAATACAGTACTGTTATTCTCCCACACAGACC
-CTGAGAGCAAGCAGACTTGTCTCTATTGTTTGTGTTTTGGGATTTGTGGGGACACCTTGT
-GACCCAGTTTTGTTGTAAATCTTGTCCATGGGGTTTTGGTTTTGCTACCTAATTGCTTTG
-CCAATTTTTATGTGGGGATTTAGAAAGATTTAAAAGCTGAGTTTTCCACTGCAGACATAC
-CCATATTCCCGAATCTTGACTCTTTCTAAATACATATGTACATGAGAAAAAAAAAATCAG
-CACTCAAGGTATTCAGTGACAGGTTTCTCTCAGAACCTGGAAATGCTGGAAATGACCACT
-GTTGCTTAGTCGGGGCTCCtttctttcttttttttttttttttgaggcagagtcttgctc
-tgtcgcctaggctggagcgcagtggcgcaatcttggctcactgcaacctctgcctcccgg
-gttcaaggaattctgcccaagcctcctgagtagctgggattacaggtgcatgccatgact
-cccggctaattttcgtatttttagtagagatggtgtttcaccatgttggccaggctggtc
-tcgaactcctgacctagtgatctgcccacctcggcctcccaaagtgctgggattacaggc
-gtgagccaccgcacccagccTGAGGCTCCTTTCTTATATTTTATGTGTATCAAGCAAACT
-TAGGTACCTGGTCTAGTTCTTACACAAAGAGTGTACTTCCCCACTTAAAAACGGCTACAT
-TGggctgggtgtggtggctcatgcctgtaatcccagcattttgggaggctgaggcgggtg
-gatcatttgaggtcagaagttcgagaccagcctggccaacatggtgaaaccctatctcta
-ctaaaaatacaaaaacattagcccggtgtggtggcagatgcctgtaatcccagctactct
-ggaggctgaggtgagagagtctctcgaacccaggaagcggaggttgcagtaagctgagat
-cacagcactgcactccagcctgggtgacagagcaagactctatctcaaataaataaataa
-ataaataaataaataaataaaataaaATGGCTACATTAAAAGTAggatttttagcttttg
-ttccatagacctcttcggcatatggtgaagtggggatggaccccttctcaaaatgtggtt
-tttttttaattagtctttttttttttttttttcaatagaggtggcgtctgactatgatgc
-ctagcctggtctccaactcctgggctcaagtgatcctcctgccttagccttccagacagc
-agggattacaggcatgagctactgcacctggatttttttttaatgttttataaatgcata
-aaataaaatgcacgatattacaaaggaaaccaattatactgaaatgctattactgcaata
-taaacaagggtttgtgatgcagtgatgaggtgaacttctttattagtacattaaataaca
-agatggggaagcaggttgcaggtcaccatgaacgtaaacaatatgtaatgttatctgcaa
-ccactgtgatatgaaatgaaagtatctttgacttctgttgtaacagtcactgctaaccct
-accatgcttcttgatccacattcatacttgaaggaaatgctgcatttcaattagaggtta
-gtgaatataaagttattttttcccacctaagttcatgaagtttctgagttctagatcagg
-taaagaacccctgCTAAAAATTGTGGCTGTCCCTCACTTGATTCAACCAGTCTCTTATTG
-AAAAGTCACCCCacctcagcatttcttcaaatctcatccttatgcagttggggaaactga
-ggcccaggctggagaacaaacttgggtcattctgccctggggggattgcagaatccagtg
-tcctgattcccggctcaggttattttccagctcctcccctaccagGCGGGTGGCAGGGAC
-CCCCCCTCGGCCCCACCTCCCTGCTCGCCAGGAGCAGCTGGCGTCCTGTCCCGAGAGTGA
-CCCAGCCCCGCCCCGCCCTCGCCCCACCCTGGCCGGCCAGCTGTGGATGTGACAGGAGGC
-TTGGCTCTGGCTCACTCCGGCACATTCCTGGCCCAGCCACTGTTTTCCTCTTCTTCTTTT
-TTTTTTTGGTGGTGACTTTTTCTCCCATACCCCTCCCACTCCTTTTCCTCAAAAATGCTG
-TGTCTTTCCCCAGAGGGTCCCTCTGGGCGGCTCCGGGAGGGAAATGTGGCCTGGATTTCC
-TGGAACGCGTGGAGCTGGAGTCTCAGCGCTGGGAGGAGGGAAGCTGTTGGCAGCAGGGCA
-CCCCCCCAACATAACTGGGCCTCCCTGGAGAAAGAGGGTGAGCGGAGCCTCAATATTCCC
-TTTGCACTGGGCCCTCTGAGCAGTGGCACCCGCAGCTGCAGCGAGTGGGCTGCTGCCTCG
-GGGATAGTGAGACGCCTCTAGGAAACCGCGgctctgtgatcttggggaagctgggcattc
-tctctgagcttgggtttccttgctccttagaactgaggatgtgatctggatctgccacag
-ctggtgggacagtccagtgaggcgatggctgtaCATGGTCCCTTTCCAAACAGGGAACAA
-GAAGCGAGGTGTTGGGGGCATCTGGGGATGCAGGTTTGGGGGCTGCATTTGGGGCAGCAG
-GGGTGGAACAGAGAATTTCCATCCTTCCTTCTTACCTTCATTCATTCATGAGACAAACGT
-GTATCAGACAATTACCATTGTGCCTCTCGGGGCTCacaataagagacaagtaaatgtctc
-ctgtaggggcaggtgcagatgagtgctctaagaaaaagtgaagcagggtGCAGGGATAGA
-GTTTCTGAGGGTGCTGGGGGGAGCTGCTCTGCTGGGGCACCACATGAGCccaggcagagg
-gagcagtgggtgctgaaggctctgaggtgggagcaagcaaggaagggaagagaaggcaag
-gtttgtgtggagtgggggagacagcagagagggctgtggggacttctgggtgaggcgagg
-actttggctcgattcatgggaagctacgaagggctttgagcctgcagtgacacagtctgT
-AAAGGACCCACGGGGCTCTACAGGAGGTgcgcacgtggaggagtgacttggaggccaagc
-agctggggtcctggcttcagctcctccctggctctgtgagcgtggacaggatgcttctcc
-ttgagcctcattttcctcctcagtagagtgggctcatggagctctgaagactaagaggaa
-gggTCATCAAAGTGATGACCCTTTGCCATCACTTTGCCTGTGAGCTACAGGTCTCTATAA
-GTGGGAGCTGTTTTTTTCTATGAGCCTCTGAGGATTGGAGCCACTTGCTTAGGGGGAGGC
-TTTGGGGACAGAGCCAAAGGCTGGTTCCGAGCCCAGGTAGAGCAGTGGCTGCTCAGATTT
-TGGGGACATGTGGTGTCATGATCTGGGAGGGGGATATTCTTGAGTTGTCTGCAGCCCTTT
-TCCCCTTATGGGTACGTGGCTGGATTTAGGGAACCCTAGGGCAAGGGAAGAAGGGCTAGG
-AGCTGCCCCTGAGATCTGTGAGATGGGAGGTGGCCGGGTGTTCAGAGGTTCTCTGAGGTT
-GCAGAATGCCCTGTCAACCACTCTCCCATACCCAGAGGGGGCTGGACGCATCCCTCTCtc
-ccttgtcctcagtctcgattttctcatctgtgaggtgggcacaacaagtcctaatcctgg
-cagTGATAGGAACGTTTGGGGAAGCAGTGATTTGTCATGCATGATGCGGTCGGACAGGAC
-CCTGCCCTTAAGAAGGAGGGAGCCCACCTGCCCAGGCACTGTGCTGAGCTTCTGTGCATT
-AGCTGAAAGTGGACAGGATGACGTCACTTCACTGGAACTTTCTGTGGCTTCTCTTTGCTC
-TCCTATGGAGGTTCCATGGGAGGTAGGAGCTGGGGGCTAAccctgcataccttataaacc
-tcaactctcacatcctcctggctttctgtgtccaggttcacaggcctcctgaatctccct
-ccttaatgcccacgttgttctggcctctgagacattgtgttactccctgaattccttcct
-cttgccctagtaaactctccctccctgctcagctcagtttaactatctcttcctagagga
-agcccaccctgtcctgtagactaggctgagtctcacattgcggcatcttaaggtgctgcc
-tcctctcctggtaacacctgtcgctgttgtaatttcacaggtgttgctgcaattacctgg
-ttgctgactctccccacattaggactgtgtgttccatgagggcagggacgttttctcgat
-cacagccatatccccaacagtaatagcaaattgcagatgctcaataaatgctttctggat
-aaatggaGGGGTGAaatcattttgacaatcagaagaagaaggtgccccccttttacagat
-aaggaaccaaaggtacagagagattaagtaacatgccccgaggtcacacagccagaatca
-gatggTGTCTGTCTGGGAATGTGTCCCTGCAAGCCAGGCCTAGAAGGTGGGCAGATGGGG
-TTACGCAGAGAGGAGCTAGGACCATCTGGATAAGGGAGGGTTGTGGGGGCAAGCCCCACC
-CATCCTTGTTTTCTCCATTCGAATAGTGGTTTGTGGCTGTTTTCCTCAAGGGCGACTCAG
-GTGACCTTCAGGTTGGGGCCTCCTGGGTCCCAGGGGCCTGCTGGGTGGAGGGCCCGGTCT
-GGCTGGGCTGCTTTTCTCGCCCCTTTGCCGGCCCGCTGGCTTCACGCACAGATTACAACT
-TCCCCTCTTCGGCCGTCTTACGCAGGCCACCTCCGGCTCGCCATTGTCTCATTGTTTGCT
-GAGGGAAGCTCCAGGAGGAAATCAACCTGCTGCTCACCCCAAGCAGGGAGTTTCACCCCC
-AGCCCCCACCCAGGGAATGCCTGGGGGGAGGGCAGGAGGGGTGGGGGCAGGTAGCAGGCa
-atgcaacaggcagccttgaagggagtgagctccctggccgggaagtatgcaagcagaagc
-tacatTCACAGCACCTATTTACTAGGTCCTCTCCCAGGCTGCACGTCAGGCAGCTGGAGA
-CACAGATGCTAGAAAAGGGTCTTGTCCTTAAAGACCCTGTAGCCTAGAAGAGATGCTGGG
-CAGGGCCTCAAAGCCAAATGCCTTAGGGGCCAGACAGGTGACAGAAATCTGTAGGCCTGC
-GAGCAATGCTGAGTGGTCGGGACGTTAAATGAAAACTATGGTGCGAAGGAAGGCTTTTAG
-ATTCCAATTTTATTTTAACATGTTGCTAATCAAACAAATGAGTCCTCCAGCCTGATGTAG
-ACTGCGGAACCCCAGCCTAGCCCTTTAGAAAGGAATTCTTGTTCTGGGGTGAAATTGGAT
-CAATAGTTATTGGTGTCTGCCCCTATGCCTTTAGCTATAGCTGTGATGGGCAGTTCCCAG
-CACACTGACAGCATCCCTTTTCAAACACCCAGCAGTCATTTGGCTTCTCTGAAGACTTGG
-GAACTCTCTCAGGGACCTGGgaggagttgatgccactaggggcacccctcagtcaatggg
-gaatgggagttagtgggtaaatgccccatcctcttatccattggaagttcctggtcactc
-aaaggtctgcagtgagttgggggcactggttgcccatactggaaactggctcaataactc
-actttttatccgtttcccctcttcgctgtcactctcccagatccctctggcttcctgggc
-taccggctcccaaattcttgtctcaggctctgcttttaggggaacccaaactaaaacaGT
-CTCTAATATTCTTTCCAAATAGCTTATGATTGTACACTTAGGTGATTCTAATATCCAATG
-ACTTTAACTCTGTGATTATAAGTTTTCATAAGTAAACCCAACTGTGATTCCAGAATGATG
-TCATTCTAATATGGCCGAGATACACCTATCAGAACTGGAATGCTCCATTTTGTACAACTG
-AATTTTGCTTCTCTTGAGCTCCTATTTTTTTTTTCCGATGCCAGAAAATGCAAACTTCAA
-AAAAATCTAGACAAAAACCAATTATTTCAGATTTGAACTCAGTTGGGTGAATCAAGCTTT
-CCCTGGCATCCCTTTTTTCCCGGATTCATTTAAGTCCTGGAAGGGTAGAGGCATCTTGGC
-ATTGGTTGAGGGAAGAAGGGGTCTGTGACTGGTGTTTCTCAAGCTATACCAACCCATCTG
-GCTCTCCAGCATGCTTCTGCCCCCTTGGCATTCACTGGAGATGACCCACTCATGTTGATG
-CTTTGATCTCTAGGGTCAAAGAAGCATAGCTTTCTCCTCCTGGACCATACACTGTAAGAG
-TCACGTCCACTCCATTCAGTCATCTGAAAAGATGTGTTCACTTTTTACACCTCACAAGGC
-CCTGTATACAAACTCGtcattcaatcaaatgtacttgctgagtatccggcatgtgttggc
-attgagccaggcactgaggatacaaagatgaaaagacaggtccctttcctcaagtcattt
-gcaagccaaataatgtataaatattttcaacttacatattgtgatgtccattatgaagga
-accaaatagggtaggcagagaaagcctctttgaagagctgtcattggagccaaagtctaa
-agtcaggggaagccacaaaaaggtttagcaagaaagaCATGTCTGATTATATCTGTAACT
-GTAAAACATTTTCtttttctctttctttcttttattattattttttggagacagggtctc
-actttgtcacacaggccagagggcactggtgcgattttggttcactgcagcctcaaccta
-cggggctcaagcgatctccttcctcagccccccaagtagctgggattctaggcacatgcc
-accatgcccagttaatttttttgtattttttgtagagatagggtttcaccatgttgccca
-ggctggtctcgaactcctgagctcaagtgatatgcccaccttggcctgccaaagcattag
-gattagaggtgtgagccatcacgtttggccGGTAACTGTAAAACTTTTTGTAATACTGAA
-GGCATCTCCTGCATTTTTTCATACATTTTACTTTTCCCCTATTTATTGGTGGCCTCCATC
-ACCTTAGAGATTCACGTCTCAAAGGACAAGAGTCATGGAAATTTAGTCAAAGCCCTGAGT
-AATTTGAGAGTGTACAATTTATGCCATAAATAATAGATTGAGAAGAATAGATGAGTCAAA
-TTGGTTTTCCTCTTTAGGAAACGAGATAAAGATTATCGGGAGGTGGGGAGAAGGGAAGtg
-tagcagagatgtccagctgtcatgcaattacccgacttccccttcttctatagctgcaga
-tggccatgtatctacactgcatttcgctgtctcccttgcagtttaggcgtggccacgtga
-ccaggctctggcaaaggatatgtgaaccgaatggtgtgtgcaacttctgggtcatgcatt
-gaaagaaaaaaaggggcatcctcttcccacacctcttcttcccttcctgccagctagaat
-ttggcatggtggcaggagcagtagcagccgtcttagaccacaagactgaagccacacgtt
-gaggatgtcagaacaacaaaatggaaggatcccaggtatctgacgtcatgggactcatag
-cggcctagactgcttgccccctactggttagtgagagagaaatcaaTAGCTGAGTTAGCA
-TCCCAAGTAATACAGAGGGTCAGAAATATAGGAAATTagcctgttgctgtggctcacgcc
-tctaatccctgcactttgggaggctgagttgggcagatcacttgaggtcaggttttgaga
-ccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaactagctgcggc
-atggtaggacatgtgcctgtaatcccagctactcaggaggctgaggctggagaattgctt
-gaacccgggaggcagaggttgcagtgagctgagattgtgccactgcactccagcatgggt
-gacagagcaaggctctgtctcaaaaaaaaaaaaaaaaagaaaggaaagaaaTATAGGAAA
-TTAGTGTGCATAGACACTGGTGTAACCCTGAAAAAAGAATAGAAACTTCGTGTGGTCTTG
-AGGGGTCTAAGGTCTGGGCCCAGAGCCTTAATTCTGGGTAGAACCCAAGGAAGCCATGAA
-CCTAACTGCCTGAGTGTGTGTGCAGGCACCTGGAGCAGGACACTTCAGGGGAAGGGAGGT
-GAACTGAGGGGAAAAAGCAAAAGAAGACACCCAGAATTGACCAAGATTAAGTTTCTCCTA
-CCTAGTGGAATGGAGGCTATTTATTTTGGGTGTGAGCTGAGAGTTGTACCTGCTTCCCAT
-TTTATTATTATTGTATTATTATTCCTGGATCCCAGCCCAGCAGTTAACAGGAACCTGAGT
-GGAGGCTGAGTTTTATCAATAAATTTTTGCTGAGCACCAaggcccaggctcaggtcccag
-cctagctccctacttgctgggtggccttgagcatgttacttctcttttctgagccttggt
-gatctcattgggaacataaaggggttgaactccaggatgctcaaggtggctctttttgca
-ttgatgtcctgtggttttTCTCTGGGTCTGGCAATGAGGGCAGTTCAGGAAAAGTGTGAT
-AAAATAGCTCTACTTTAGTTCATAGAGGGACAAGACACAGTCACATGGGcacacatgtac
-acacacacacacacacacacacacacacacaAATGTGATTAACCAAACATCATGGTAGCC
-AAGAAGATATGTAGCATTAAGGTTTagaatacaggctttgaagtcaaacagaccagagtt
-aacaacctcattttgtttttattTTCTTTTTTAAAAtttttttaaaattatactttaagt
-tctagggtacatgtgcacaacgtgcaggtttgttacatatgtatacatgtgccatgttgg
-tgtgctgcacccattaactggacatttacattaggtatatctgctaatgctatccctccc
-tcctccccttaccccacaacaggccccggtgtgtgatgttccccttcctgtgtccaagtg
-ttctcattgttcagttcccacctatgagtgagaacatgcggtgtttggttttttgtcctt
-gcgatagtttgctgagaatgatggcttccagcttcatccatgtctctacaaaggacatga
-acacatccttttttatggctgcatagtattccatggtgtatatgtgccacattttcttaa
-tccagtctatcaatgatggacatttgggttgcttccaagtctttgctattgtgaatagcg
-ccgcaataaacatacatgtgcatgtgtctttatagcagcatgatttataatcctttgggt
-atatacccagtaatgggatggctgggtcaaatggtatttctagttctagatccctgagga
-attgccacactgtcttccacaatggttgaactagtttacagtcccaccaacagtgtaaaa
-gcattcctttctccacatcctctctagcacctgttgtttcctgactttttaacgatcgcc
-attcttactggtgtgagatggtatctcattgtggttttgatttgcatttctctgatggcc
-agtgatgatgagcattttttcatatgtctgttggctgcataaatgtcttcttttgagaag
-tgtctgttcatatccttcgcccacttgttgatggggttgtttgtttttttcttgtaaatt
-tgtttgagttctttgtagattctggatattagccctttgtcagatgagtagattgcaaaa
-attttctcccattctgtaggttgcctgtttactctgatggtagtttcttttgctgtgcag
-aagctctttagtttaattagatcccatttgtcaattttggcttttgttgccattgctttt
-agtgttttagtcatgaagtccttgcccatgcctatgtcctgaatggcattgcctaggttt
-tcttctagggtttttatggttttaggtctaacatttaagtctttaatccatcttgagtta
-atttttgtattaggtgtaaggaagggatccagtttcagctttctacatatggctagccag
-ttttcccagcaccatttgctaaatagggaatcctttccccatttcttgtttttgtcaggt
-ttgtcaaagatcaggtggAGCaaccccattttcatcactaactagctggtgaccttggat
-aagtcactttatttctctgagtcttgggtttctcccatttaaaaggaggatgataatacc
-tatatttagggctttcatgtaataaaataaggtaatttatgtgcagctccaagatcacgc
-tgggcacgttacagatactcagtaaatggtggttattCTGATGAGGATTGTGAGCCATGG
-TGAGAATCAAGTGAAAGGTGGAGAAGGGCAGAGCTGGTGGGTCTTGAGTATGGACTAGGA
-AGATCCATGAAGTCCAGGGTGTAGGGAGGCTCTTGGAGAAGGCAGGACATGAGCAGTGCA
-GGGATGTGTAAAAGCGTGACCAGATGGGATGAAATACCCTTTTAGGAGAAGGAGAAAATA
-GACCCAGAAGCGAGGTAGAGCCAGGcttgagaaaattacttcctctttctgagccttatt
-tttcctcttggtaaagcgagtgtaacaatatctgccttgcaatgttgttatagcgattat
-tgagatgttagaagtcaagctcccattaagatgcctggctcatgtaaggcatcaaatatt
-agtttcattCCTTTCCCAAGAGAGGGTACTCACAAAATATCATCAGGGCTAgtaacacag
-aggataaatatttgaggggatggatacctcattctccatgatgtgattatgtcacattgc
-atacctatatcaaaacatctcatgtaccccataaatatatacaccgaatatgtaccccaa
-aaattaaaaATAAACAATTTTTAAAAAAATCCCCCAAAACAAAAACAAATGAACAAACAA
-AGACAAAATGTCAGGGCTAGAGTGACCCTCAACGCCTTTCTATGGTAACATACACATCTA
-TTCATGAACTGTTCACACAtcattcatcaatctatacagctatcacttatgcatttttca
-tatatccattcaaacaccaacaattcattcatcacccattgttcattcatctagccaaaa
-gtccattcatccttcactcaccatctatccttatccatcatcatgcattcatcagcaacc
-ttccatctgtctacctatcatctattctatattcatccttcatcaatctatttcatatcc
-atacacccattcagccagctactcaagcagccatcattctttcatctgtctatccattta
-tcatttatccatcatccacctatccacctgccattagttagccatcaccatctctcatga
-atttatttgttcctcaactatccattcttcatgcatctatccatctatttatcactcaat
-gatccatccatccattatttcattcatCATTTATGCACCCACCATTTTTCACGCATGAAA
-TATTCATCCAAAATCTATTCTTCATTTCTTCATAGCTATCATTTACAAGCCAAACATCAA
-CCCACCAATTTACTCTTCCTCCCTTCCTCTTCCATGCATCATCCATCCTTCATTCACTCT
-TTCACTAAACATCTGTCATCTATTAGCCATGCCTATCATCATCTATGTATCTTCCATCGA
-CATAACCACCTACGATCTATGTAATTTCATCATCCATCTGTATATGTTTatccagtcatt
-cattcatttatgtttcatcttccatattgcctgtcaggtaacatacaccagagatacaga
-ctaaataagctacaacctgtcctccagttgttcagagtctagtggagaaagataaataag
-cctatgatagctgctgtaccagaggaatgactgtaccaagcaccccaggggagaccacac
-aggagagagccacagactctgagggaactggggaaggactcacaaaggaggtggcagttc
-attaaactgggtctcgaagaatgattagaagGTCCACTGttttttttttttttttttttt
-ttttgagacagagtctcactctgtcccccaggctggagtgcagtggcatgatcgtggctc
-actgcaacctctgccttccaggttcaagcaattctcgtgcctcagcctcccgagtagcta
-ggactacaggtgcccgccaccaggcctggctaattttttgtatttttagtagagatgggg
-ttttaccgtgttggccaggctggtctcgaactcctgacctcaagtgatctgctcctgacc
-tcaagtgatctgcgcgacttggcctcccaaagtgctgggattacaggcgtgagtgagcca
-ctgtgcccagccCAAAGGTCCCCTGGTATttttatggggggaaatgagtcctaagagggg
-aagtgactgtgcataatcatactaagagttaattaacaggacagagacttgtaaccaagt
-ctctagcctactatactagttctgtttccactTCTTATGGGAAACAGTAAGTTACTCAAG
-GGAAGACAAGTAAGCAAAGAAAACCTGCCTCGAAGCACCAGAAGGCTGCTGTTTTAGGAT
-CTGGTTGTAGATGGGGTGGAGAAGGGGATTTTCCTAGACCTCAGCTTCTCATTCAGGGAG
-AGGTAACAGCAGAAGCCCCAGGAATATTTGACAAAGGGCAGGAAAGAAGGAGGAGGAGAG
-ACAGAGCACAGTGAGGTGAGGAGAAAAACAggtcaggcacagtggggctcatacctgtaa
-tcccagtgttttgagagatcgaggtgggaggatcacttgaggccaggacttggagaccag
-cctgggaaactccatctctaccaaaaaaaattaaccgggtgtggtagcatgtgcctgtag
-tcctggctgaggcaggaggatccccttgagcccaggagtttgaggctggctgcagtgagc
-taagatcgtgcctctgcactccagcctgggtgacagagcgagcccctgcttcaaaaggaa
-ataatataataataaaaaaaCCCCACCTACTATTTTCTTGTTACCTTTACTTGGGTAATT
-AATAATAATATTGTTACTGCTTggcacggtggcttatgccagcaatcccagcactttggg
-aggccgaggtgggtgggtcatttgaggtcgggagtttgagaccagcctggccaacatggt
-gaaaccgtctctactaaaaatatgcaaattaaccaggtatggttacacatgcctgtagtc
-ctagctacttgggaggctgaggcaggagaatcacttgaatccaggaggtggaggttgcag
-cgagccgagatcatgccattgcactccagcctgggcaacagagcgagagtccatgtcaaa
-aataaaaataataataaTGTTGTTAATATTCTAGCagccatgttttattgagcacagact
-acgtgctgaacagtgtgctatagatttttcatgcatcataccattttatacctcaccctc
-agcagccccaagaagcagttattactcttgtccccattttgtgaatgaggaaactaagtt
-cctgagaaggtaagctaggatttaaatatggtctgtgtgactacaaattccatgtccttt
-ccactcctctttgctgcctctctCATCGTTCTTTGGGTATGGTATATAATAAGTGACTCA
-GACATACATGTGCATTCACTAAGATATATGCTTCATTTTACTGGAGATTTTCTCTGTATC
-CTCAGACTCTGAAATAGTGGACATAGTAGGAAAGAAAAAATTTGTTGAATTTTCATAGCT
-ATCATTTACAAGCCAAACATCAACCCACCAAGAAATATCTTCTATTTCTTGTTGAATTAT
-CTTGCAAAGAAAATGGATAATCAATTAGAATATAGGGTATACAGGTTTGTCTATTCTGAC
-ACAAGTCCAAAGttttttgttttttttttttgagataagagtcttgctctgttgcccagg
-ctggagtgagtgcaatggcacgatcttggctcactgcaacctccgcctcccaggttcaag
-cgattctcctgcctcagcctctcaagtagctgggattacagctgcctgccaccatgccag
-ctattgtttttttgtatttttagtagagatggggtttcaccatattggccaggctggtct
-cgcacttctgacctcaagtgatctgcttgccttggcctcccaaagtgctgggattacaga
-cgtgagccaccgtgcctggGCAAATCTGAAGTATTAATAGCATAAAGATATAATTATTTT
-TCTCCCAGGTCCAGGAGTAGgctgggcatggtagctcatgcctgtggtcccggctacaca
-ggaggctgaggtgggcggattgcttgagctcaggagttcgaggttgcagtgagctatgat
-tgtgctgctgcactccagcctgggtgacagagggagatgctatctcaaaataataataat
-aataaTCCAGGacaagcttgtttgggtcccaggcttcttctgtcatgcagctctgccacc
-cccagggtgttgccctagtccccgtggtctcagatgccacccacatatctacaccacagg
-cagtaggcagtggaaaaggcatgaggcaactatgacttgcaggttgctctccccacttct
-gttcacctaccactggtcagaatttagtcatgtgatagtaaccagctgcaagggaggctg
-ggcaatgtagtctttattctgagaggctatgtgttcaggtaaaagtgagaggttttattt
-ccacaggagaaggggaaaatgggtatgaggggcaagtaggggtctctgGCGTAGATGAGA
-AGAAGATGTATGGACACCAATATTCTCTATCATGTGAAGACTCCTAGGGTCAcatatcat
-ctctcccattagacagcaagctccctgagggcagggggctagattaatcaccctggtgtc
-cctgaaagcttctagctcagACTTAAGGAAGAAGACTTTTTCAGTCCCGGATAGAGGTCT
-AATGATCTGATGGAACCAGAGCAAGTAGGTTAGAGGCCTTTTGCCTGGTGACGACCAAAG
-TGGAGAGGCCAGGCGTCTGGGAGGCGGCCAGCAACAGTAGAGAGAGACGCAGGAAAGCGA
-CTTGCAAGGGGGCTGGAGTGGGTGAAAGGTCAGAGGAGAGTCTGGAAAGGAGGATGCAGT
-GTTGCAGGGCGGGCAGAGCTGGGGGAAGGAGGGGATAATTTAGTAATCACAGCTCTTCCC
-TCAATAGAATGCTCAAGGGCTCACAAAGCATCTTGGCCTCCATGTTCTCACTGGTGAGGA
-TAGATGGTACATGAAGTTAGGTGGCAGATGGGGGGGTGCTTCGGATTGCCACCAGCCCAT
-TCCTATCTAGAGAACTGTCACTGGTttccttcttcgtttcccatgtgcttcctttctcct
-tccctgtctcccttccttcttccttccttgatttctctcttcttcctCTGTATGTGTGGa
-tatacacatgtataacacacacacacacatagacatacatatatatgtatatctgaatgt
-atgtctctgtatgtacagatatacacatatacatatatgtatatgtgcatacacatatGT
-GATGACCAAAGTGGAGAGGGCTAAAAGATGAGGCCAGGTGTCTGGGAGGCAGCCAGCAAC
-AGTAGAGAGAGACGCAGGAAAGCGACTTGCAAGGGGACTGGAATGGGTGAAAGGTCAGAA
-AAGAAgtgtgtatatgtgtgtatgtatatgtgtgtatatgtatatgtacatatatgtgtg
-tacatatgtatgtgtgtgtgtgtgtgtgtgtatgtataatcacctactatgtgccaggag
-gtattgtgaaagttattgagaaacacactggtgagcaaaccagacaagatccttgccctc
-atggagcttatgcttaagagagagagatattacacaaataaatgcacaaatagctccata
-accgttaaatgtgaccaacgactagcgctatgcagaagtgcagaatgctgtgagaGCATA
-TTCGTTGTGTATTCCAGCATTTATTAAACAAATATTTAATAAAGCAAATTATATGTATTA
-GAGAtttgcttttttttttttttttttttgagatggagtcttgctctgttgcccaggctg
-gagtgcagtggcacgatcttggctcactgcaacctctgctgcccaggttcaagcgattct
-cctgcctcagcctcccgagtacctgggattacaggtatgtgccaccacgtctggctaatt
-cttgttttttagtagagacggggtttcagcatcttggccaggctggtcttgaactcctga
-cttcgtgatccacctgtcttggcctcccaaagtgctgggattataggcatgagccactgc
-gcctggccTAGAgataatttttagaaaggaataaaatcacgctcttgttcaaatataaaa
-tgaacatgtgtcaaagattttatttaactcattaatttatgaggtaaccaataaggtgtt
-aaaaaatagttcaaaggagaatccaaagagaagaggcatacataggtaatgaggattgct
-tacattaatttgctaaagatgcaaaactgttttcttccaagagtactggggggaatgaat
-tgcatctttattattattattttgagacagggtctctctctgttgccaaagggctagaat
-gcagtggtatgatcatggctcactgcagcctcaacctcctgggctcaagcgatcctccca
-cctcagcctcctgagtagttgggactatagacaagtgatatgtgacaccttgctagctaa
-tttttaaataattttttgtagagatggggtttctctctgttgcccaggctggtctcaaac
-tcctgggctcaagtgttcctgccacaggctcccaaagtgctgggattacaggcgcgagcc
-accgcatctggcctcaactgcatcttgagcagaagaaatttgtttgcatctctgtgacga
-gaattgtttttattatcatcaatcttgttacaacatattgaagtgtacgctagctcaaaa
-atgtgaaatgcgtcggcaaccatagaatcagctaacctgaaatgatgtaaagacaattca
-taCCATTCTGGAGGACTTCCAGTAATCTTTGTGGACTTTTTTTTTTCAGCTTCAAAGTAT
-TTTACAGTTTTTcctgatgtgagtcagatcggtactagatactaataatacagaggtaaa
-ccatacagacacaatttctccctcaaggaCAATATTCCCTTATGTTCTAACTGGGGTGGA
-GAGCCGGGGAACAGTTTTTGGAAGCCAAACTGAGTCTTTGCCATTTATAcagtcatatgt
-taattaacaacaggaatatgttctgagaaatgtgtcgtcaggtgatttcattcttgtgca
-aacgtagaatgtactgtcacaattctagatggtacaacctactaggcacctagtctctat
-tctataacctatttcttctaggttacaaatttgtacctcatgttactgtactgaatattg
-taggcaattgtaacacaatggtaagtatttttgtatctaagcatagataaatatagaaaa
-gatacagaaaaaatatgtagaaaagattttttttaaaaaagacacacttgtatctttact
-gtgaatggagcttgcaggactggaagttactcttggtgagttaggaagtggtgactggat
-gtgaaagtctaggacattactgcacactactgtagactttataaacactgtacacttagg
-ctatactaaatttatttttaaaatttgtttctttcttcaatagttaactttagcttactg
-taactgttttgttctataaacaaaaaaattttaaaaacactttttgtattattttgtaat
-aacacttagcttaaaataggaacacattgtacagctgtataaaaacattttctttcttta
-tatccttattctataagcctttttctacttttaaatgttttttccttaaattttgttgtt
-gttgttgttaaaaactaagacacaaacacacacattagcttcagcctacacaaggtcagg
-atcatcaatatcactgtcttccacctccacgtttcgttccactggaaggttttcagggca
-gtaacacctgtggggctatcatatcctgtgacaacaataccttcttttgaatacctcctg
-aaaaacctacctgaggctgttttacagttaacttatttttttttaataagtagaaggagc
-acactgtaaaataacaattaaaaagtatagtaaacatgtaaatcaataagttgtttattg
-tcattatcaagtattatgtactgaacattttttttttttttttttgagatggagtttcgc
-tctggttgcccaggctggagtgcaatggcacaatcttggctcactgcaacttctgtctcc
-caggttcaagcgattcttccgcctcagcctccggagtagctgggattacaggcatgcacc
-accacgccgggctaattttgtatttttagtagagatgggCACACCAactaaagaacatca
-aagcccagagcgagaaccttcctccctttcccattttccttcaacttgttattaaggaga
-aagtctctgttcaatgctggtgtgtttttaacacctctcttaacacttacttcccttttt
-aacagagaataggcctccagagcctttggcaggccaccggatctggctagaatgtgatga
-cattgttttgttttcattgtacttatttttatggctaccttctatttatggcacgagata
-ctggttttccatttagggagggccctaaactttccttttgacataatatatttatgtttt
-tagaagaaggaccatttaaagaaaaaatattatgtaatattaattacataatatttgcag
-cacaggtggtactgagacagggaaaaaattataaagaggtatgtaaTGTGCTGAAAAGGA
-GGACATGCTTCTCAGGCTAATGCCTCtcccagcccctacttaacagaagggaccactgag
-gcacagagaggagaagggactttgtcaaggtcacacTGATGATGTGGACTAAGAACTGAC
-AGCCTCTTGATAGCCCTGTGGTGGGGGATATCTTGTGTCAGATGGGGAGGGCAGAGGTCA
-GGGACTGTGTGCAGCCCCATTGGTCAGTCCAGTGCACTGATCCGCTAGTCAGACAGAGTC
-CTCCAAGGTTGACCAAGTCATGGACTGAAGGCAAAAAGGACCGGGGGACCTGGAGGGGAG
-GAGAGAAGAATGCTGGTGTTTATCACGCACTAACTATGCTAGATGCTCGGGTGCCGGACG
-TCACCCCTAGGGAATTCACAAATTTGGGGGCAGACACGTCCTACAAAAATAACTCAAGTT
-TCTGGCGAAAGTGTGGTAAGTGTTCCAGCAGAGGCCTCTCtagtgacatctaggtttttg
-tctgctcactggtcatttccccatattcttttgggaaaccacctcttcaccactcttgat
-tcttgtagctcagaccaggcaaaccccacacccacttcagaggtgggcacatgaccagac
-ctggccaattagaacactttatccctcttgccacagagactggcacatggttgggcgcgt
-gacccaaggcaggccagagggggccttccccaggaatttgctggaactactggagaaaaa
-tcccacttcatagggtttttaaaatggatacactgtaagccagagttgctggcagctatc
-tttgccaccaaaagagagaggttctctgaaaatgaagctgacaggaaagcagggatgaca
-gatggagagacagctagagtcctaatgctactgtatggtcacctcctggacccagccgtg
-aaatcagtgaccctgaacACAGTTCTATTTTGCTTTGTTACCCAGGCTGGAGCtttttat
-ttttgtaattaaattaaattaaattaaattttaatttttagagacaaggtctcgctttat
-cacctagactggagtgcgtggtgcaatcacagctcactgcagaatcagcctcctaggctc
-aagtgatcctcctgcctcagcctcccatgtagttgggactacagttgtgtgccaccacgt
-ctggctaatttttaatttttattattatttaatttaatttttaatttttattttttgtag
-acatgtggtctcactatgttacccaggctggtcttgaactcctggcctcaagtgatcctc
-ctacctttatctcccaaagttctgggattccaggtgtgagccattgtgcctggctCGttt
-ttatttttatagagatggggtctctctatgttgcccaggcttgaactcGGTTCTAGAAGG
-CAATAacacacacacacacacacacacacacatacaTAtttgcattagccactttgagat
-gggtttctgtctcttaaaaccaaaaagagacctgtctaatTCCAGGCAGAAACAATATCA
-TGGGAATGTTGGCAAGGGAGAGGGATTGGAGTGTGTGTAAAGATTTATCTGGGAGTCCTT
-CCTCGTGGAGGTAGGTTTTGAGCAGGGTTTTGAGAAATGGAGAGGATTTTGATATATAAA
-GAAGGTGAAGAAACAGTATTTCCAGGGAGGGGAACATCCTGGGCAAAGGCTTGGTGGTGG
-AAGAGGGCAGGGAAGTGGCGCCGTCCAGTGTGATTGGAGAGAGGATGGGGATAGAGAGGA
-GGTGGGAGAAGAGCTGGCAAGAAGGGATGTGCCCTAATCGTGCAGAGATCCAGTCTGCTC
-CTTCACCTGCATCCTCCTCCTCTGGAGGCGTGCCCTTCATCAGttaattcatccacagcc
-atttactgaacaccagcatgcgtcaggcactgtcaaagggctggcgagagagctgtgggc
-cacaccaccaagtccctgccctcttgtagcttcttttgtaggtgaaggacacaggtggta
-aacatgagcaagaaataaacaagtatcatagtgtcagggagcagtaactgttatctagaa
-aaattaagacgagtaaagggaatacagactagtggagaggTGTTTGGGAtgaaaacggat
-aatactgatggttgaccgacatcgtgagtgcactcaatgccactgaactggtaaaatggt
-taaaatgataaattttacattaggtatttttctgttctttatattatgtacattttacca
-caataaaaaaCAGGATTggcagaggggtgctattttagctagggtggtcagggcatgtct
-ctctaaggaggtgtcgtttgaacagaatggaggggaattagcaagccttgaagagattgg
-ggggaaggtattctgggtggagggaattgccaggacagatcctgtggggccagagtcggc
-ctggtgtgttctaaggacagcaagtgggcccctgtggctggagcccagagagcaaaggga
-gagggggaggaagatgagtacagggatcagcaggggcttgtatgccaggagagaactttg
-gatttggttgtatgagtgatgggaagccatcggagggctgagcagggaagggatatgaat
-cagagtttctgttCAATTCTCCCTCTGCCCACACTCAGTCCTGCTCTTAATCAGGTTGGT
-AATCTTGCCTCTGCTTCTGACTATCTCTCTCTCCTGGCTGCTACCCTCTTCTGCACATCT
-TCATGACCACTATCTTGCTGAGGTCATCttttttttttttttttgagacagagtctcact
-ctgtctcccagctgaagtgcagtggcacaatctcggctcgctacagcctctgcctcctgg
-gttcaagtcattctcatgcctcagcctcccgagtagctgggattcaggcgagcaccacca
-tacccagttaatttttgtatttgtagtaacgatggggttttgccatgttggccaggctgg
-tcttgaacacctggcctcaagtgatccacccaccttggcctcccaaagtgctgggattac
-aggtgtgaaccaccacacccagAGAGGTCATTGTTTTTATATGGCTGACCCAAATGGCCT
-CCAACTGGCCTCCCTGCCTCCTGCCGACCCAGCCTCCACCAGTCATCAGGGTCTCTTTCT
-ACCCGCAGCTCTGACCAGCCCTTGCCTTGGTGAGAGCCACAGCCTCCCAACTTCCAGTCC
-AGCCCCATCTATCTTCTTTTCTCCTCACCCCAAAGCCCACACTTAGTCACTCAGAGCCTC
-CATGGGGTTCCCCTGCTGCCTGCCGTAGGCTTGCCCTCCTCAAGGCTGGTGTATGGCTCT
-CTGCTCTACTCGGGTTCCTTTTCACCTAGACAGCCCCCTCCCATCCTTCAACAGCCTCCC
-AGCATCACTCCTCTGTGAAGCCTTCCTTGGCTGTCCCACCCGCAGGCTGGCTTAGCTAGC
-TCCTCTTCAGTGCTCCCTAAACCACTCACATCTTCCACTTTCAGAGCCCCGAGCATGTGG
-CATGCAAAGCACATTggtttggtttggttttgtacaaacctttccctttcctcagctccc
-tgaaccccccagttccctgttcatagtatgttcgcaacaaatgtttattgaataaatgaa
-tGAGTTTGGAATTTATCTTGCAGAAACAATACTCCCACCACCACTACCAGCACCTCCACC
-AACGAAaataatatccaacccaagttgatgacttgctatgcatcgggcactgtgctacac
-acttccaaatctggatctgatttctatttcataatattaggaggaaatcactgtgttagc
-cccactttagagatgagaaaactgaggcatggtgaaattaatcaattttcctaaggctac
-ataactcagaagcaggagagccgacagtccaaAGTGTGCAGCCCAAAGCCGTGGGCACCG
-CATGCAGCTGGAGGAGGTGTCTTGGCATTACTGCATCCACGGACGGGGTTTCCAGGAGTC
-CTGGAGTTCCATATGAAGATTGATTGTCCATGAACTTTTTGGGCATGGGGGCAGGTCCAT
-TACTTGTAttttttttttttttgacagggtcttgctttgttacccaggctggagtgcagt
-ggtatggtcatagctcactgcagcctccatctcctgggttcgagagatcctctcacctca
-gcttcccaagtagctgggaccacaggcatgcatcaccatgtctgcattatatatatatat
-atatatttttttttttttttaagagatggtgtctccctgtgttgtgcaggctggtctcga
-actcctgtgctcaagtgatcctcctgccttggcctcccaaagtgttgggagtacaggtgt
-gggccatcgtgcccagccGTGATCCATTACtttttttttttttttttttgagacggagtc
-atgctctatcacccaggctggagtgtagtagtgagatctcggctcactgcaacttctgcc
-tcctgggttcaagcgattcttctgcctcagcctcctgagtagctgggattacaggtgtgt
-gctacctcgcttgactaatttttgtttttttagtagagacagggtttcaccatgttgacc
-aggctggtctcgaactcctgacctcaagtgatccgcccacctcggcctcccaaagtgctg
-agattataggtgtgggccaccgcacccggctGGTCCATTACTTTTACCAGGGTCTTAGAG
-GGGCTCTTGATAATTCCTATATTTAAGATGCTCCTCTGCACATAAGGGGGAAAGATGGAG
-AGTTTTCGAGTATTGGACTGTTGCGGTTCAACCTATGCTTTAGAGAGATCACGTTggcta
-tccattgcagtgtaatgcagggagaagagattggaaatatccctaagattcaccaagagt
-ggatgtgttaatcatatcatggtacctccttccacagaagggaataatacgcagccataa
-agatgaatgaggagtctctttatgtaccaatgtgaaatgattcctaagatatttatgtca
-gagagagagagacagggtCTgggtctcactctgtctcccagactggagtgcagtagtgtg
-atctcggttcactacagcctccatctctgggggctcaagagatcctctcgcctcagcctc
-ctcagtagctaggactacaggcttgcaccaccacgcttggctaattaaaataaaattttt
-ttttggagagactaggtctcactatattgcccaggctggtctcaaacttctgggccaaag
-agattctcgcacctcagccttccaaagtgctgggattacaggcgtgagctaccctgcctg
-gccTtccaagacatagtttaagtaaatacagcaaggtgcaggccagcatgtataattagc
-ttctatgtatgttttttaggaagggaggggttaagattatagatctagatgtgcttctat
-atgcataaaaaaTCTTTGGCAATATTCACTGTTAAATAGTCAGTGGAAACcctacctcat
-agggtttttatgagggttacatgagttaatattagataattgcttagaagagtacctggc
-acacattaagcactacagaagattttatttaataAAATAAAAAAGAgtggcgggcgcctg
-tagtcccggttacttgggaggctgaggcaggggaatggcgtgaacccgggaggcggagct
-tgcagtgagatgagatcgcgccactgcactccagcctgggcgacagtgtgagactctgtc
-tcaaaaaaaaaaaaaaaaaaaaaaGAGGGTCCCTTAGGGGATGGAGACCAGGTGACTAAG
-GGGCAGGGAGAGAGACTTATTTTTCATCTGAGGCCTTAGACGCCTTTTGAATTTGGTACC
-ATGGGTAAAttttttttatttttatttattaatttatttttgagacagagtctcactctg
-tcacccaggctggagtgcagtggcacgatctcggctcactgcaacctccacctcccgggt
-tcaagtgattctcctgcctcagcctccctcgtagctgggattacagttgtgcgccaccac
-acctggctaatttttgtatttttagtagagttggattttcgccatgttggccagcctggt
-ctcgaactcttgacatcagatgatctgcctgcctcagccttccaaagtgctacgatgaca
-ggcgtgagccaccacgcccggccTATTTTTTTGAAGTTGAAATTCAGTGTATCTTggcca
-ggcgtggtggctcatgctgtaaccctagcactttgggaagctgaggcaggtggattgctt
-gagctcaggagtttgagagcagcctgggcaacatagtgagaccctatctctcaaaaaaat
-gcaaaaattagctgggtgtagtggcgtgcacctgtagtcccagctacttggggggctgag
-gtgggaggattgcttgagcccaggaggcataggttgcagtgagccgagctcacaccactg
-cactccagcctggacgacggtgagaccctgtctcaaaaaagaaaacaaaaaacaaaaaac
-aaaaaaaaaaaaAGAGAAAGAAAGAAATTCAGCATATCTAGATAGCTAAGAGATCATCTG
-AGGGGGTCAGGGCCTGGAAGGAGATCCCACCCAGAATCCCCGGGAATTCGCTGTAATTGG
-TCAAAGGCCACATTGTGTAGTGTGAGAAATCAGGACGTGAGGAAAAGGCGGACAGGAGAC
-ACCAAAACACCCACGCCCCAGGGCCCACTATAAAAAGCACATTTAAAAACACCAGACTGG
-AAAAGTTttattattattattattattTTTTAAATAGCAAAAGCGAGTCCCCCCAGGAGG
-CGCACTGCAGCTGCGGCTGTGGCGGTTCCCAGGTGATGTCAGTCCTGGCCAGGCGCCAGT
-CCCGGCCCCTTGGAGACGGTCTTGGTGGGTTCAGCTTGACTGTTTTTCCTTCCTGAGACT
-TGAGGACACCTTCCTGTCTCAAAGAAGGAAGCCTTTCCAGGGCTTTCTGAAAGCCAGGGG
-CAGGGGAGGCGGTGGGCCTGGGCTGCAAGGGCAGAGAGAGGCAGGGAAGGTGGGTGGGGG
-TGGGGAGGAGCGGGGGCTGCCTCTGGGAGGAGAGTGAGGGTGGAGAGAGCAGAAGACAAG
-CCTGGCTCCTGGGTGGCTCTTTAGCCCTCCCACCCGGGGGCGCGAGGGGGTCTGCTTCTT
-GGGAATCCAAGGCCCGCCTCCCTGGCCCCATTGCTTCTCAGCCCTGGCTGCTTCCTGGGG
-AGGCCCCTGGGTGGGGTGAGGTTGTGGGGTGAGAGAGGTTCCCACAGAGTTCCCAGTTGG
-TCAGTGTCTTTTCTCCCTCCCTGAGCCCTGGGCCCACCCTTTCTTCTCTATGGTTAAAGG
-CTCTTTGCCAATATCTTCCAggccaagcgcggtggctcacgcctgtaatcccagcacttc
-gggaggctgcagcaggcagatctcctgaggtcagaagtttgaggccagcctggtcaatat
-ggtgaaaccctgtctctactaaaaatacaaaaattagccaggtgtggtggcacgctcctg
-aatcccagctactctggaggccgaggcaggagaatcgcttgaacctgggagacggaggtt
-gcagtgagtcgaatcatgccactgcactccagcctgggtgatggagcgagactctgtctg
-aaaacaaaaacaaaaacaaaaacaaaacaaaacaaaacaaaacaCCCAAGATTCTGCCAA
-TATCTTCCAAACTGGGTTTTCTGCAGATGGGACGATCCAcagagctgggtttgaggtcca
-actctgcactcctagccgtgcgacctcaggctggtcactgcttttctttgagtgccacct
-ctgaaatggattaggttggccttacagggtggttatgcagagtgagtgagacaGAACAAT
-GCCTCTTGGTCCTTCCCGAGTATCTGCTAGGCACCCACAACGCGCCGGTGCCACCAGGCG
-CTCGGGATGCTCAGCATTTGGCACAGAGGcagcagagcagggaggtgaagagagtgggct
-ctggacccagcctcagtccacatcccggttctgtcctttgatggccgtgtgaggatagtg
-acagcctgtctcactgggtcgtagaggagtaaatgagttacaggccgtggaacagtgcct
-ggcactgaggcggtgctaggtaagtgtttgcttttattTTCGACTTCTGTCCAACCAGCC
-TTCTGTTGCTTTGACAGCTTCATGGGGCTGCTCTGGGCACTCAAAGGAGATATGTTGGGG
-ATTCAGGGGTTGTGTTTAGGGGAGACCCAGGTCCTGCAGGTGCCCCATCATTCATACTGA
-TGCAGGGGTGGCCTGGAAGCTGCAGAACCATTCACACTCGGCAAAGCCTTCTCTCACCTT
-GGAAGCATCATTCCTAATGACGACACAGGTCTCCCAGCCATGCGTTCCCACATAACTTAG
-AAGCACCCATCCCatttttattatttgctcagagcctgctttttcagtaggccgtaaact
-ccatgaggtcaggtactacatctggcttattctctgatcatccctagagccttgtgtggt
-tcatggagaagttcaaaacatgtttgttgaCGGACTTACTGACTGACAAAGTCTGCCAGC
-CTTATGTTGGTCTACAATGTTACACTCTATCCCATGCCTCCTGCTGAGTTTTACCCTCCT
-GCTGTGATGCAGGCTGTGGGAtctggagctagaccccctcagttggaatcctggctgtgc
-cattgcctagctgggtgcccttgggcttggttttctagtctgtgaaatggggatagcaac
-agtacctacctatgtggcttgttgcaagtgaggccatctctgtatgtcactcagagaagt
-gccttggattagtcagTTCCATCAACATCAGGACTAGGCACGCACCTGGTGAGGTCATGT
-GGGGGtggtggttgagagcccagtggggctctgcagctagaacatctgattcaaatccac
-cagccactgtgtcaccttggccaagttctttaacctccttgtgcctccgtttcctcatct
-ataaaatggagcaataataatacatatctaaccagcttttgagcaagctgtatgtatgta
-tgtatttatttatttagagacggggtcttactctattgcccaggctggagtgcagtggtg
-caatctcggctcactgcaacctccaactcctgggttgaagggattttcctgcctcggcct
-cctgagtagctgggattacaggcacgcaccaccatgcccagctaatttttgtatttttag
-cagagatggggtttggccatgttggccaggctggtcttgaactcctggcctcaagtgatc
-tgccctcctccgccttccaaagcactgtgattacaggcatgagccactgccccccgcgaa
-gctgtatttattttatgtaaagtgcatagcctaggcctgacacgtagtaggtcctcaaaa
-gagtcaggcatttttCCAAGCCATTCAGAAAAAAACAACTCCTAGATTTTATCAGCCTTC
-CCTCCCACAAGGCCAGTGTGTCCCAGCTGACAAAGTTGCTGGCCGTGCTGACGtgaggaa
-aagcaagggccagagagggccagacgcctaccctgggtcacacaggagcagtggccaacc
-tagaataggctaggtcttctgtctcgcagcctgtTCATCCTGAGTGCCTCCCTGGTTTCC
-AGGCCCTGCTGGCCTGCCCTCTGACCCTAGCCCCCTGGGAGCTCTATCCCAGGCCCATGG
-GGTCTGCAAATCTGGTCTGGATTAGACACGCTGAGAAGCAAACGCCAGCCCCCCCAGCCG
-GCTGCCCAGTGGGACCTGTGCTCACAGCTGCTGAGGCTCATAGGGACATAAATCATGGTG
-GCAGGAGACTCGGGGGATGGGACCACCTTAGCCTCCTAAGGGGCACAGGGGCCTGAGAGT
-CACGAGCAGAGGCACCTGGGTCTGCTGGGGATATTTTCCATCGTCTGTTGGACAAGCTAA
-AGCCAGGGTGCATCAGAGGGGGCCAGGACACCATTTGGCAGCCCTCGCATCACAGTAGGC
-CAAGATCCCAACTTCTTTTTAACttttcattttgcaatcatttacaacatgcagaaaagt
-gacaaaagtggtgcagagaactcccatataccctgtactcagattcaccacattttaagt
-ttgtcatatttactctatccttttctctcacacatatattatttctcttctgaaccattt
-gagagagcacgttacctacatcatacttctccttaatagtacttcaggatgtattttttt
-ttttttttttgagacggagtctcactctgtcacccaggctggagtgcaatggtgcgatct
-tggctcactgcaacctctgcctcccgggttcgagcagttctcctgcctcagcctcccgag
-tagctgggattacaggcgcctgccaccacagggtttcaccatgttggccaggctggtctc
-gaactcctgacctcaggtgatgcgcccacctcggcctcccaaagtgctgggattacaagc
-tgagccaccacgcccggcctaggatgtaattcttaagcacaaggatatcctctgacacaa
-tcagggtgctgttagcaaatacagaaaatttaactttgatgcaataccttaatctattgt
-tcatatcccaattttgtgtgaccatgtctcaaaaaaaaaaattgtcaactctaccaagaa
-ggtcccctgtcacattttcccctctgcagtacaggatccagttcaaagtcatgtatcgca
-tttacctgttcaggtctATACTTGATATCACAACTACACGAGGTAAAATATACAGTCGTA
-AGAGACACAGATGGGGTTGAACAAAGACATCCAACTTCATATGTACGTCCCATGAACCAA
-TGTTTCTATAAATCCTCTAATTATATGGTGTTCCACAATAATGCATCACGCTCCTGACTG
-TGTGGAGGTAGTTAAGAGTTAACTTGCCAggccaggcacagtggctcacacctgtaatcc
-cagcactttgggaggctgaggctggaggattgcttgagcccaggaatttgagactagcct
-gggcaacatggcgaaaccccctcaaaataaaaaattagctgggcatcatggtgcacacct
-gtagtcccagctactcaggaggctgaggcgctaggactacctgactccaggaggtggagg
-ctgcagtgagccatgatcgtgccacctgcactccagcctgggtgacagggtgtaaccgtg
-tctcaaagaaaaaaaaaaGTTAACTTACCAAATATGCCATAGTCTTCAGCACTCTCTTTT
-TGTAGTGCTTCATTTTTTAACCTAATAAAAGCCTCATAAAATGGGAGTGGCCTGGGACAA
-TGAGGGGAACCTGAAGTGCTGtgggtgcaagaggtcctgtgttctcagccctgctcagct
-ccagatgctgtgcaaccgtggcccatcaccgctcctctctgagcttcaggttGCCATGGG
-TGACCTCTGAGGCCTTCCTGCTCATAACTGTGGAGTCAGAGAAAACAGCCCTgcatggca
-aggagggagatttgtgttcttggtgtcccaacagggccaaggacctgctggggaacccca
-ggcaggttgccctctgtcttgtctcactttcttcattgtgaaatgaTGAACTCTGAGATT
-ATTCTTGTGCTGCTGCTTCATGTGTCAAGACTTGCAGGGAGAGTGTAACCCTTTGGGGTC
-CAAGGTGGCCTGGCTGAGTCGGTCATTCCAACCCCTTCAGTCCTGGATTTCTTCTCCCTG
-AGCAGCTTTACTCCTGTGGCCTCAAGTTGGCCTGGAGAAGCTTGGCTGGGCTGGACCATC
-CCGGAGGCGACAGGCATGCTGGGGGAGCGGACAATGTTACAAAATGTTCCCCAGAGGAGC
-TGCCTATATATGCAGACCACACCTGTGCTTCTCCCCGGTCACGTGTGTGGGCTGACCTTG
-CAGCTCACAAAGGCTCATGGGCATtaactgtccattaccaggaagatagcaagctgcaaa
-atatgcataatggagcactatgcagctatgaaaaggtgtgaaacagctctgtaagcaacc
-aagggtctccaagaagtacagttaagaaaaaaaaatccagtgcagagaggagtgtgtgaa
-atgctaccacttgtgtggaaaaacaatatctatgtaatttgcctatatatgcagaCCATC
-TCTGCCGGAATCCATAGGATCCTGGTTACCTTAACATAGCAATTGCCTCTGGGGACTGGA
-GCTGGTGGCTGGGAGAGAAGGAGACTTATTGTCAGTTTATTCTTTTTTGTGTCTCATTCA
-AAGGAAAGAACCGGTATGTGTAGATGTGcaagaggggctggctcctgggaagctgctaat
-tgcatttcttgatctccatgctgggtgtacaggtgtgctcagcttgtgaaaatccattga
-gctgtacccttacaccctgtgcactttcctgaatgtgtcttatacttccataaaaagtgt
-aaaCTTggccgggcgcagtaactcatgcctgtaatcccagcactttgggaggccaacatg
-ggtgggtcacctgaggtcaggagttcgagaccagccttgccaacatggtgaaaccccgtc
-tttactaaaaatacaaaaattagccaggcgtggtggtgcacgtctgtactcccagctact
-caggaggctgaggcaggagaatcgcttgaacccgggaggtggaggttgcagtgagccaag
-atcacgccactgcactccaacctgggtgacagagtgagatccatcttaaaaaaaaaaaaa
-aaGCGTAAACTTAGCATGGTTTAAATGATTTGTTAAGCGTATGTGTGCTAGTTTAACAAA
-AACGCTGCAGagctgggcgcagtggctcatgcctataatcccagcactttgggaggctga
-ggtggatcgcttgagcccaggagctggagaccagcctgcataacatagtaagaacctgtc
-tctacaaaataaacaaataaataaaattagccaggcctggtggtgtatgcccgtatttcc
-agctactccgcaggctgaggtgggaggatcacttgaggacaggaggttaagcctgcagcg
-agctatgactgtgccactgcactccagcctgggtgacagagtgagaccctatctcaaaca
-aaacaacaaaaaaTACTCGGTGGGATTATCGTCTTCACTGTGGCTGTCTCTGGGATAAGT
-GATATTTCTAGAGTCTTATAGCATTTTGAATTTGTTTTACAATGAAAGCACAGGCAGAGA
-AACCTATAAATATTTTTTCAGAAACAGTTATCAGTATAGAAGCTTTTTTGGAAGGACACT
-CAGGAAGCTGCCTCTGGGGAGGGGCCTGAGGAGGTCTGTACTTTTCACTGCATACCATTT
-GATACAACTTGGATTACTTACCAGTGCATACAGGGTCTATTAAAAACTATCTCACAAAGC
-AAAACAAATACTTATCTTTCTGTTCTAGCTGCTCTTACTAGTTAGAGACTGAGCCAGGga
-ggcccagaggggtcaagcaacatctctggggtcacccagcaaatctggtggcggagtggg
-cctccagccagagcacccaagtgtctgctctgcccccactcccaggcttcctgccattga
-caaggccacagtccttttcCTGTGGCTTTGCCAGAGGCTGGCTGTACCTGGGAGGGTAGG
-CGCAGGGGGAGCAATGTGCTTTCCTAATCAGCTCCCAAAGGGGGAAGCACAGCCACGCTG
-GGACACAGGATAAGCACGACCAGTGTTCCTGAAACAGCGGGGAAGTGAGGTAGAGGGTGC
-TTGGAAAGCTCTCCTGGGTGGGGGACCCCGGCCCCCTGGGGCCCTCCTTCCTCTACTTCT
-TACACCAAAGGAATTAAGCATGGTAATTTCATGGCCTGCTCCAGCCTAGGGACTGGCAAT
-TCCAcaactcccttgatctccctgggcctcggttttcatctgtgaggaagaccaggttgg
-tcgggctcattcctgtggcatctggcacagtgcctgccacacagagggtattgacaatct
-gtttgtcaaTTTGCAAAATCGGAGCCACAATTCAGGCTCAGATGGTCAAACGCAGGGGAG
-TGGGGTAGAGGCAGAACAGAGGGGATACGAACGTGGACTCTGGGGCCAGAGTGCAGTCAG
-TAAACATGAAATAgatcacttgagctcaggagtttgagaccagcctgggcaacatagtga
-gaccctgtctctaaaaaaataaaaataaaaGTGTTTGTTAAATAAATAAACTGTTGAAAT
-AGGCATATGAATGTACCTTGCTGAGGAGAGGGTGGCTGCCTGGCTGCCCTGGCCTTTCCC
-TGGCTCTCCCACCCTCGGGCCTCTCGAGCTTCTCTGATCCTGACCTCACAGGGACACAGC
-CCCAGCCCGAGAGCCAAGAACTCCTAGCTGCACTGATCAGCTGACGCATCGCTGTCTCTG
-CTGGGTCTGCAGTGGGGAAGACACCAGCTCTCACCTCCCAGGGCTCCTGGGAGTGTAATT
-GGGGTAACAGGTGCTGGCTTTCCACTTGGGGCATCTCCAGGGCAAGGAAGGAGCTGCTCT
-GGGCTTCAAAGGTGGACGGACCTCAGGGTGTCACCCTGCCACGTGCCTCTGGGTGTCATC
-GGTCTTCTAAAGCATTTCAGCTAACACAGGGGTAAGAATATTCCCCTTTAGCATGCACTC
-ATTTGCACTTGTGGAAAACCACATGGCTTGTTGGTGATCGcatcaaagagggatgggtta
-aaggatggcatgttcacaaaatggaataataagcagctcaggaagaaatgaaataccctt
-taggtactgacttgggatgataccaagctagattaaggaaaaaaagaaggagccaaaagt
-gtgtacgatgtgctgtcatttgtgtaTTTGCCTGATCATTCATAGTGAATGGGACATCAC
-AGGAAACTGGTGCCCTAGGCTGCTTGCAGAGAGGAGAGCTGGTGGCTGGAGGACAGGGGC
-ACGGAGACTTTTCAACACATACCCTCTGGTACCTTCTGAGTTTTGAACCATGTGAATGAA
-ATGAACACAGGCCTTATTCAAAAATAAGTAAAATTAAGATTTCTTTACCAACCATATCAG
-ACACCTAACAGTTGTTAAGAACATCTGATAAACAGCAGACTGAGGAAAGTTTGGTTATGG
-CGCCCGGAGAGGGGGCTCTGCCTGCCTTCCCCCGCCCCACCCCCACCCTTCCAGGGCTCA
-GGGCAGCCCCCAGAACATCTGTGCCTCTCTCTAGGTCCAGGGGAGGGCCCACCTCTGACC
-TCCGATGTCCACGGGACTCTCCTCAGCTCAGAACGACGTCTTTTATTTAAAAATAGCTTT
-TATTTTAAACTCACCAATTCTCTCTcacacacactcacactcacgcacagatacacacac
-acCCTGTCACCAACAGTCTTTGTTTTTCCAAAAGTTCTGCCTTGTCTCTGACCAGCCAGA
-GCTGGGCAGGCTGAATGGATCCTCACAGCTCTCCAGGATCGGGTGGAGATGTCCCGAGGG
-CCCTGCCCAGAGTGTCCCGGAACAGGCCATGGTCCCCCGGTCCCTACACAAAGAAGGGGT
-GGGCTTGGCTCCTGGGGTCTTCTTCCCTGTCCAGCCAGTGGCTGGCTCCTGGCCTCCTTC
-TCCAGGGTCCAGGCTCATCTCCGTGGCCCTCGAAGGGGGGCCACCCCCCTCACCTTCAAG
-CAGCTGCCCCCCAGGTCACGACGGCCACCCTGCAGAGGGGGAGAAAGAGTATAAAGAGGT
-TCGATTAGGCCAGTGTGaacactggaactaacctctgtatccctcaagagggatcctgat
-caataaatcacagttcagccacacgatcaagttctctgcaacagaaagcagaagaaaccc
-tttctggactgatacagactgctgccaaatgacaatgtttagggacaaaagcaaggggca
-gGCTGAATGCGCCTGTGTGCTGTGATTGCTGGGGAGAAGCACACACGGGAAATTGTGAGT
-GGGTTTCTTCAGAGAGGAATTTGATGATGGAGAGAGGATGGGAGGGAGGCTCTCTCATGC
-TATACTGttttttgagatggagtcttgctctgttgccaggctggaatgcagtggcacaat
-ctcagctcactgcaacctctgcctcccgggttcaagtgattctcctgcctcatcctcccg
-agtagcggggactacaggggcccaccgccacacccggctaatttttgtattCACGCTATA
-CTTTTTTACCTTTTCTACTTCTTTCCCATATGATCTGTTGCTTAAAAAAAATCCAATATA
-TTTTAAAGCATAATATTTTACACGGGCAAAACAAGCACACCCCACAGTGGTCCTCCCCCT
-GCCTGACTGCATGCCTAGCGGCTCACTCGTCCACCTTTAAAAGGGGACTCGGTTTCTGGC
-CTCCTTGACTTCCCTCAGGGCGTCCCCTTTCCCAGGAATGTGCTCTCAGGTCTTGTCTCC
-CTGGAAAGGTTTCTCTGTTCCTGAAATTGCCTAGCACTTCCTGCCTTTCTGGGGACATTC
-CATGGGGATGAATCTCAGAAGGACAAGGCAGGGTCTCTCCTTTGTCTCCCCATCTGGACT
-GGGATCTCAGGGAGTGGTAGGGAAAAGGAGTTCTTCACTCTGTGGTCCCATTTCCAGCCT
-GGGCTCTCTTGGCCCAGGACCTGACTTGGAGCAGGCACCAATCAAGGCCGCCTGAATTAA
-GTGGCAGCCATTGGAAGATGGGCTAATGGCGGCAGTCCCTGAAACCATCAGTCCTTACAG
-GGGCTGTCTCTACCAGCTCTTCTCATTGATATTTTCAGACTGGACACATGGGtttcatcc
-tcaccgtaagccagagaggtcacagatgttaaagcaccccctcttttgaggcctccagcc
-actgaatgactggcccagaggcacccagccagttgtaaaagagctgggctagaaatctat
-gttgtccaacaatctgtcctgtttccaGGACATGATAGTGTCTGAAATCCCACTGTAAAT
-GCTCATCACCCTGAGCCTGGCTAGATGATGGAGGAACAGGCAGCTTTCTCAGCCCACTTA
-GAGAAACAGCTGACCATCTGGGAGCTCTGTCCCCTGCCCCCTCCACCCCCAGGTCCAGGT
-TGGGGCAGATCCATCCAGATGCGAGCCCAGCCTCCCTCGAGGCTCTTGCAGCCCAGGGAC
-AGCATGTTCACTCACAGGCAGGGCTATTTTGAGGGCTGAGGCCACAGTCCCAGCAGAGCC
-TGGGGCTTGGGCTTCTCAGACAAACTCTGGCAGGAGTGGCTGAGAAGGGCAGATAGGGGA
-GGGGGTGCAATATTAAGGTTGAATTAGAAAACTGGCCTTCCTCTCTTTTACTCTGTAAGT
-GCTCAGGGACAGGGAGAGCCGCCCCCTCCCACCCCAAGTCTGGAGGTCAGCTGGAGACCT
-AGGGTCCCAGAAGAATGCTGGGACTGttcacctccctgaacctcagtttcttcatctatg
-aaatggggacaaaatgattttacttgccatctcaaggtGCAGTCGAATGTGAATGCAGCT
-GTGTAAGCTGCTAAGTGTACTTAGAAGAGGTCTTGACggccgggtatggtggcttatgcc
-tgtaatcccagcacttttgggaggccgaggcaggcggatcacctgaggccaggagttcga
-gaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaaattagccag
-gtgtggtggctggcacctgtaatcccagctacttgggaggctggggcaggagaactgctt
-gaacccgggaggcggaggctgcagtgagttgagatcgtgccactgtactccagcctgggc
-gacagagcgagactccatcgcaaaaaaaaaaaaaaaaaaGTCCTGACAAGACCCCAGTTT
-GTTTGTCCCTTAGGAACTCAGCACCAAGGGTCTTCGGGAagcaccatggttaggagttag
-gctcaagtgagacagacctaggcttcgatccctactttgccaagggccaactactggacc
-tcaggcaagtgatttcatctcactgagcctcagtttcccccccgtaaaggggaattactt
-tacaggatcacacaagctaatctaggtaaagccttggcacagtgttgggaacaaagtaaa
-tgttcaataaatgttcataagtattattatCAGCATCATCTATGGACAGTGCCTCCTGGT
-CCCAGCTACCCTCTGGGTATACCAACAGGGGAGAGCCTTACAAGATGATCCTGTCCAATC
-CTCACCCCCAGGTGACAAAGGGAAAACAGGGCAGAGACAAGAACCCCCTTTCCACCTCCC
-ACGTGCTAATTCTACCACAGAGGGCCACACCTAACCCCTCCTTCAACAGAAAGATGCTAC
-AGGAAACTGTTTCCACGGCAACCCCAACTCCAGACTGGCCAGGATGGGAGGGAGGTGGTG
-GCTCAGGGTAAAGGAACGGGGTCTTGGGTCTTAAAGCTCTTCTGGCCCACAAAGCTCAGA
-AGGGAGCAAGAGCTCCCCAAGCCAGCCAGTTTTCTTCCAGCAGAGTCTTCAAGGGGCCAT
-AGCTGGCCAGGATTGCCCCTCTCGCCTATTCCCAGAGGAGACCGTGGGGTTGAGAGCATG
-GTTTCTACAGCCAAATTTGGCTGAGTTCTTGGTCCCATAGACAGATCCCAGGGAAGCGGC
-CAGGCCCAGGGGAGGCCCCTGTGAGCTGTGGGACAGGCCTGAGACCTGCAGAGAAGTCCC
-CCAGCCTGCTTGCTATGGGGGTGGACACATGACAGTTACAGGGACTTCCCTCTGTAACCT
-ATCCCACGTCCCaaccaggcaggcctgagtttgaatcctggttccatcactgactgtgtg
-tctctgcgccactggcagcacctctaagcaagtggggataaccacagcgcctcattcctg
-gctgttgcaggattttaatgataaatcataaagagcgcttagcacagATCAGTGCTCATG
-AAGGCTGCTGTCACTGCTGTTATTGGCCATTGTGCTCCCCCTCTGCACTCCTGCCACTTT
-TAACCTCTTCCCTCTTCCTTCTCTAGGCCTGAGCTCTTGCTGTATGCCCCAATCCTAGAA
-CACCCTTTCCTACCCCTTCATCGGCCTGCCCCTGTTCTAAAGCATCCTTCAGAAATGAGA
-CACAGAAACCCTGTCAGCACTCACCCTGGGTTGGAGGCTTTCTCTGGGCTCTGAGAATCC
-CTTTGTGCTTCCCCTCCCCCACCATCAGACCACAGCATCCTCATCTTCATCTCCCTGCCC
-TGACCCTGGGGCTGTACTGTCAGGTCCTGACTGGTGGAAGGGTGGGGACCTACAACCTGC
-TTCTCTGGGGTTCTCAGAGCCAACAGAAGGCAGCTGTTGGGTAGCTAAGGGTTGCTAACT
-GGAATGAATGGGTGAAAGGCAGTCAGGGAGTATCCCTGAGAGCCCCTTCAGGCCCTCCCA
-TCCCAGGAAGCCTTAAAGGCCCACTCCTGGCTTCTCAGCCCAGCCTGGGGCACTGACAGG
-GGCCCACAGCTGGGAGCAGCAGGGACCCTGGAGAGGGCACAAGCCTGAGGCTAAGAAGAC
-CGACGATTCAGGGCAACTGAGGCAGCCAAGTGTTGAGCAACCAGGCTGGATATCTGATGA
-GCCAGACAGAGGGTGGTCTCAGGCCAAGATGCAGAGGCCTCCGCAGAACAGGGTGGAGCA
-AGGGACCAACGGCAGCTGTGAGAACCAAACAGCAGGGAGTCAGGGGCCTAACTCCAATTC
-CCCATGCCCTTCCACTTGGCCACCAAAAGTCAGTACTCTCTCAGCCTCAGTTTCCCCGGA
-TGTAAATGGTAGCTGCTGGAATACAAGTTGTTAGACAGGCTTCTTTACTGTAGGAAAAGC
-CCAGGCCAGAAAGGCACACGGTCGGGGGATGAAGCAGGTTCCTTGGAGCCTGGGCAAGGT
-TTCAGCCAAGAGGCCACCTCTGCTGCCACACAGCCCCCGCCCACCCCTACCAGCCTGATC
-CACTTTCTTGCCCAGGACACATTGCAGGAGCTGCACACCAGCTCCCTCCAGCTGACCCAA
-GAGTGCCCTCTCCCAACACCACGTCCTTTTGGGGGCTGGGGACTCTCAGAGGGCCCCTTC
-TTCACTCCTACTGCTCATCCGCTGGGTACCTCAGGCTCTCGGTTGGCGGTTTGTGGCCTC
-CTTTCTTCTCAGTCTCCTGCTCTTGGGTTAGATCTTAGGACAGGGGACAATTATTTCAAG
-GTGGGGGCAACACACACCGGGCAAGCCCAGGGCCAGCGCCCCGGcttcccagctgagtaa
-atgtgggcaggtgatcccatctctgatgctcagatcctcatcaggataaaatgggcagaa
-aaactacctgcctgaagggattcttgtgaaggcaaaaaagtggatgtggagcgcatcggc
-acagaggaagactccataaaagatgggtctttgttACTCAGTCCTCATGCCGTCTTCCCA
-GCAGGAAGGAAGTTCCAGCACACCTTTCGTTGGAGGGGATATCCCACACTGAGCAGTTAA
-ATCAGACCCGAACTCTGGGTTTTCCCGCATCCTTCTGTTTGGGGGCCTGGGCATTAAGTC
-AGTGGTTCTGGGCTTGGGGTGCCGCACCCAGCACGAATTCCACGTCGCTTCCCCCTGGCC
-TCGTTGGGGACCCCTGCACCTCTCCGGTTCCCGCAGAGGCGCTGCCCCCCGCCTACCCCG
-ACCTGGCGGCCGCAGCGAGGGACGCAGCACACTCACCCCCTTGCGCTGGTTGCTGAGGCA
-GAAGGTGCAGATGGAgcgcggctggcggccgccgtcggcggcggcggggacggcgcccTT
-GGCACTGCCCGCGGCACGGAAGCACGGCTGCCCGTCGTCGGCCGAGTCGCCCAGCAGCAG
-CACGTTGGCCAGGTGCGCGATGTAGCTGGACGCCAGGCGCACGGTCTCGATCTTGGACAG
-CTTGCGGTCCACCGGCTCGGTGGGGATGAGCGTGCGCAGCGCCGTGAAGGCCGTGTTCAC
-GCTCTGAGTGCGGTCCCGCTCCCGCGCGTTGgccgcctgccgctgtcgcaccaccaccac
-ggggcccgcgccgccgccgccgcccgcccgccgcccgcccccggggcccgggccgcgccg
-cgccgcctccgggccctcgcagcagccgAACGACTGGTCCGACGCGTCGCTCTCGCTGCG
-GTTCTCCTCGTCCTCGCTCAGCAGCCGCACGTCCGGGTACAGCACGTGCGCGCCGACGGG
-CCGCAGCAGCGCGAACGCCATGGGCGCCGGCCGCGTCCCTCCGTGCGCCGCGTCCCAGCG
-TcggccgcgccccgccgtgcgctcccgcgcgctcccacggccccgccggcccccgccTTA
-TAGGCGAGGGAGGGGCCAATGGCAAggccgccccggccgggggcggagggctccgcccgg
-ccAATGGGGAGGCGTCCGCCCGGCCAATGGGGAGGCGTCCGCCGCGCCCTGGCCAATGGC
-GACGCTCCCACCGCCTCCGTCCCCCAGGTTGAAAGCGGCCCGGGAGCCGGCGGCCCACCC
-CGAAGGCCCCCGTTCCCGGCTGGCTAGCCCGGCAGATGCTGGAGGTCTGGGAGGGTCGGC
-CGGggtgggcccagatccgaactttttgtctccagcctggaccacctgggagacgcgggc
-agatccctttctcctctctgggcctcagtttcctcgttcggaaCGTTCAGATTGCAGAGA
-AACAGCTAGTGTCTGCCTGCCCTCCAATTCTAATCCTgtagttctgcagctttcacgtgc
-gtaagaactggggaaggggcttttgctattacagagtcccaaattgctcccattctgatt
-gagcagttctggaacgggcccaggaacctacattttgtaacaagccattggtgatagtgg
-tggtgtccgtggagaacacttggagaaAAGCTATAATCTTTCCAAATGAGGATTCGACAG
-TGTCTTGTCCCTGAAGACAAACTTAAAAAGAAGAAGAAAAAAAAAAGCAAAACAAAACCA
-CAATACACAAACACCAGTAGTTCGttcgttttttcaacaaatattcgttgggtccctact
-atgtgtcagacatggttttaggtctgaggatacagccattaacaaaataaattcttcacc
-ctcacggaactgacgttttggttaaggaACTACTGTGTACCAGACTCGGTGCTATATACT
-CTATTGCGCCCAGCTGAGGCTGCAGGATGGCAGCCCTGAGTTACAGGTCAGAGAGCTCCG
-GCCTTCAGTCGTACAGGTGGGAGTGGCGGCGCTAGCTCCAGCCTGTCCGGTTTCACTACC
-TCTTGGAATCCTACCACCACCATCCCATCACACACACACGGGCTATCTTTCCTCAATGCC
-TGCTTGCCTTCTAGAAACCTTAGATTGTTCAGCCTGACGTGTCCTCTTCAGAGAATTGCT
-GAGCCAAAGGTGGTTGCCGGGGTCTCGATCTCACTCGTGCCTGCTGCTCAGCTCTCTCCA
-GGCACTAGCTAAACCAGCATCCACTTGGCCTTGAAAATAAGCCCGAGTGGCAGCCGGTGT
-AGCAGACAGAGCGCAGGGAGTGGAGTTGAAAGGCTTCTAGGTGCATTTTGGCTCCTCTGG
-GCGTCTGTTTTCCTGACGATGCCTGCAGCTCTGCCATGCTGTGCTTTCCTGGCTTCCCTG
-ATCCAGGCCAGAATTAGGGGAAGAAGAGGGAGCGAGGGATTTCCCATGACTGCCGGGGGA
-GGAGCCCCTTAGGACCCAGGGTCTGCGGGAGAGTCTGTTCCCACACCTGGATCCCCCCAC
-CGCCAGCATTTGACCGTGACCCCAGCCAGGCTGGGCTTTGGGGAGGAGGGAAACAGCCAG
-CATGGGCCCCCTCCCCGCAGGGCTGGTCCCACACACAGCCCCAGACCAGGCTGCTGCTTC
-CTGAGCCGATGAATTATTACCGGGAGATTTCCTTCCCTGTCTGCGCCTCCTCACAGGGGC
-TCCCAGCTCACTTCACTTTCGCTTTCTCCCCCTTCTCCCCCTCCTCTCTGCTTCTGACCC
-TCAGGCAGCTTGAAATTCCTCTGTCCAGCCCCCTCCCAATTCCACCTCCAACTGGAGATG
-CCAACCAAGGCGTGAACTGGGCCCGGAAGGCGAAGAGGGGCTTGCCTTGTAGGCTCATTC
-ATTTATTTGCTCCTTAGGCATATTTTGACACTTGGGACCCTGGGAGTAGAAGAAAACCAT
-GAATGAGACTGAGACAGGCCTTCTGCAGCCGAGAGGGGAAGGCGAGCTGTAAACAAAGGA
-TTTCAAGACAATGTGGTAGGAGCAAGCCAGGGTCTGGTATCAGAGAGACCCAGTTCCGGT
-TCCAAGGTTAGCTGcttcccagagtctcagttgcctgctctgaaaatgagataataatag
-tacccattcccagggctggtgatggttccatgagtttgtgccagtagagctgggcttggc
-acacaggagtgctcagtaCCTGAGAGGAGTTTGTGCTACTGTTTTTAGGGGCTGGCCCCA
-GCCAACTGCCTGGGAAAGGGCTGAGCAGCATTGACTTTTCTAGGTCTTGTCCCTGGGAGT
-GCGGAGGGGACTCCTACCACATTCTCAGCTCACCTACACAGGGgacctcagcttccccca
-ttctctgtccctcactctgctccagccacactggcctccccactaaatctggagcccact
-tcttcctggcccccctggcccctgatagtctcatagtttgttcactcatttccttcaaat
-cttcactcaaatcttatctcagggaggcccttcctgaccaccagcactaacagtaatggc
-ttctccaacctgccagcacccccagctctccctttccccttatcctgctttatttctttt
-tatagcatttgtcactgactttcattcattcacttattcattctacaaatattaactgag
-cacctgctatgtgctaggcacagttctgggtactgcggatacagcagtagaGacattaca
-tatttatttgtctaccacctgtctccctccactagagtataagctccatggggcaggtac
-tttgtgtattttgctcatctcacttccttcccaacacaaccttctgaggtaggtattgtc
-attattcccattttacagatgaagatacggaggttcaaagaggggaaagtgacttgcccg
-aggtcacacggtgggccaatgtgggagctgagattggtctgactccaaagccattgctcc
-ttccctaaccacatggcttctGAGGCAGCCTAGAGGCCTGTGAGGGCTGAGTAGGAGTCT
-GCCAGGTAAGAGGAGACAGGTGTCACAGGCTGAGAGGGTAGAGGCTGGTCCCTGCCTCCC
-TGACCATGGGCACCCTTCACTTCTACAAAAAGCATTTGTTTCTCAGAGGCACCTGCTGTG
-CACAACTCTGAGCCTGTGCTCCAGCTGTCCTTCCTGCTTGGAATGCTGCCCCTTTGGGTC
-TGACCAGACATCCCTAGTCCTCTGCCAGTGTTCAGAGTAGCAGATGGTGAAGGCCTCTTT
-GCCACTTTTTGCCAACCTTGCTGCAAAGTCTTGTTGTGTTCATCACACCATATTTTGACT
-TTTCTCCCTTCATCCCTGATTCTCACTTCCATTTCCCTCCCCTAACAGGGCACCCACTCC
-CATATCTTTGACGCATGCCTTTGGATATATGTGTGTCTTTATAAAATGTGCATGGCGTTG
-ATTTGTGTGTGGAGGTTTTTAATGTATATAAATAGTGGTTTCAATAGATCTGTGTCATAG
-GCTATTTTGTTTCCTCGACACTGCTCTGTGtgctgagtccagctcaagtcccttggttcc
-cactgctgctaagcatgcacggtgtgcgtgtgccaccatgcctccttttcccaccgcttt
-agtgatggatgctggctacctccagttcccacctccccaagcaaagctgtgatggacttg
-cagtgtgtgactctcatggactcccgtgtgtatttctctgggatgtacactcgggggcag
-gatccctggggtggagagaatacatacagttactgcactctatgacggctgcctcagtct
-acatgcccagcagcagggcatgagggaccactttctccacatgcaccctagcacttggaa
-ttatctgACTTCCCAATGATGGAGATATGGGTTGTTTTCCATCTCCTTGTGCTTGCCTCC
-ATCACGGTGTGGGCAATAATGAATACTTGTTgcactttgggtggccgaggcgggtggatc
-attgaggtcaggagtctgagaccatcctggccaacatggagaaaccccgtctctagtgaa
-aatacaaaaattagccaggcgtggtggtgtacctgtaatcccagctactcaggaggctga
-gtcaggagaatcgcttgaacctgggaggcagaggttgcagtgagccgagatcgcgccact
-gcactccagcctgggtgacagagcaagactccAtctctctctctctctctctctctctat
-atatatatatatatatatacatatatatatgtatatatatgtatatatatgtgtatatat
-gtgtatatatatgtatatatgtgtatatatatatgtatatatatatataATGAATACTTG
-TTGAACAAATGAATGAAAAGGCTAATACACAGCCTCCCACACCTACCTTGTACCAAACCT
-CAGTCTAGAAGGTGGCGGTATATGTGTGTATGTTTGTGTGTAGAGAGGGGAATATAAGAC
-AAAGTCTTATGCCTCAACCTGCTTAGAGAAAAAGACTaatgacagttagcatttattgag
-ggcttactttgtgtcaagaattCATAGGTGTATATTCACAACCTTAACTTCAGTGAGACA
-AGTAAAATGCATTTCTCTCTCATTCAAGGCCTTTGGAGGTAGGGCTGCTCTGGCATTCCA
-CAGtgtggtcgccagcttccaagattgccagcaatgatccttgcctcctagtattcatct
-gcgtgtgtagaaccctcccccattgaatcagatttgactcatgtgaccaaaagaatatga
-cagaagtgacggtatgtgacttctgaatgtagctcataaaggcattgagctcctgccttg
-ttctcttgagtcatttactctggggacagcagccaccatgccatgaggacactcaagccg
-tctgtggagagagaccaaggtccctagcctacagccatcaccaatttgccagccaagtga
-gtgagcctccttggatgtggatcctgaattcctgacctgcaggacctgtgaaaaagaaga
-aagataatacagaaagacaaagaaaaaagataataaataattattggctgggcgcagtgg
-ctcacacctgtaatcccaggacttcacaaggctgaggccaaaggatcgtttgaggccagg
-agtttgagaccagcctgggtaacatagtgagaccctgtctctaaaagaaaaaaaaggaaa
-agaaatttgctggatgctctggtgcatgcctgtgttcccagctactctggaggctgaggc
-aggagggtcgcttgagcccaggagtttgaggctgcagtgagccatgatcacaccactgca
-ctccagcctgggcaacagagcaagaccttgtctctaaaaacacaaaaattatcaatgttg
-taatcccgtaagtttagggtgttttgttatgcaacattagataactaaaacaGATGGTgc
-cggggacccaggctctgtctatctttttactgcaccatacatagctttcacttcctagtt
-ctcttacagagccacatggccacaggagccattctatctgcattccaactggcaaaaagg
-agaaagaggcagaaggaagagcatgctttaatctgtagaacaccaacctcactccgttca
-catcccgttggcaagatcttgtcatttgaccatacttaactgaaaaggaggctgagtata
-tagtcttttgcaggtaggtgtccgtgtgtgcagctgaacactgggtttctgttagtgagg
-aagaagggaagaatggctattgaaaacaactaacCATAGGTGTTATATACCATAGGTGTT
-AACTCTGGAGATAATAATGTCACAtggttaagtttgcacatttgggagcctgactgcctg
-gtttcagttctcagttaggccacttaccagatgtgtgatcttgggaaatttaccaaactt
-ttctgggcctcagtttcctcatctgtaaacagggctcacagtaaagcctgcctcataggg
-ttgttatgaggattaaatgagtcaatgtatgtagcgtttataacagtcctggcacatggt
-atgtgctGTGTGTTAGCTGTTTTCATTATATAATCCTTACAAGGGttttttttttttttt
-gacagagtttcacaattattgcccaggctggagtgcaatggtgcgatcgcagctcactgc
-aacctctgcctcccaggaggattctcctgcctcagcttcccatgtagctgggattacagg
-catgcaccagcatgcctggctgattttgtatttttagtagagactgggtttcaccacatt
-ggtcaggctggtcttgaactcctgacctcaagtgatccaccctctttggcctcgtaaagt
-gctgggattacaggcatgagccaccgcgcctggccACAAGGGGTTTTCTTAAGTTCTCAC
-AACCAGCAAGTGATGGAAGCAGAATTTGGCCCAAAAGCATTTTTTTCCACTTGCGTCATC
-CCATAGAAATTCGTAGAGTGCAAGATCAAGAcccagatcagtacaccgcacataatacgc
-atccagaaatatctgtcgaatgagtgagtTAAATAAACACGTAAACTGTCCTTACATAGA
-GATGCTAGGTTTTGTTTGGTTTTGTTTTATGTTCAGTTAATGAGAATGCTCCATTGACCC
-CATCTGGTTCCTCTAGTATGGGGCTGATGCCCTTGATACCATGCTAGAACTCAGTCCCTC
-CAGGGTCCCTCCAAGCCATCATTTTTAAGGGTGAATTCCTGGGAACACTTGTTCTTGCGG
-ATGCTCAGGATTCCATGATTTTTTttaaaaaaagtcagagaagctgcattttatatcccc
-ctcctagcgacctgcaacaacattagcatgttaaagagtcggagaaatcctgcaacaaaa
-aagcttgttgggcttcatttcaatctgcattttgttttcttatttttttgagacgaggtc
-ttactctgttgcccaggctggagtatagtgatgcaatcatggttcactgcagcctcgacc
-tcccaggctcaagcaatcctcccacctcagcctcccaaataactaggactacaggcatgt
-gacaaacccagttaatttttaatttttttgtagagatttaatttttttttttgtaggcaa
-ctatgttgcctaagctagtctctaattcctggactcaagcaatccttctgccttggcctc
-ccaaagtgctgagattacaaacatgagctaccgtgcctggtctcaatctgcattttctga
-gcttatttTAGGCTTACTTGATTAAAGACTCACTTCCTGCCCCCAACACCAGACACCTAA
-TAGAGAATACAGTTTAGCAGACATTTCTCCGGGCTGTTGCCACTGACATCTACCTCAGTG
-TGAGTGGGTATCCATTCTTTCTAGACAGCATGTTTGATAGGAGTGAAGTGGAAGTGAGCA
-GGTGGGTGCTGGTTACCAGGAAGAGACAGGGTAAGAGAGGGAACATACAGGCATATGTCC
-GAGCCCCACTTTCTAAGGGACATAAAAATATCATTGAAAATATAATAGGTGGAGAAAAGT
-GTATTTCGTGGTACTTCTTTCAGGGAAAATGCAATGTAAATTGAaataataatattattg
-aggggtaacaatatgccaggcactctgctaggaacttatttaatcctcacagcagtctca
-tgagctaagtactattaatattcccgttctataggtgagtagactaaagagcagaaaggt
-taagtaatttgcttaaggtcacatagctagggagtggacaggaattcTTTGATAAGTTGC
-TTGTGGTGAGGATAACAAGGGAAGACCCTCCCCCGGGGTAGTTTAAGCTCAGATGCTCAC
-AAAACTCTGCTCCAGGGAGAGTGAGCCTACTTGGTTGAAGAGCACTGATTTTGTTGAGTA
-GAGGATGCAAGTTTGGGCCAGAGTGGAATTGTTCAAGAATAGAGAGGAGGTTGGTGCTGC
-CATGGGTGCCCTCCTTCAGCTCCATCGCTTTAAGGAAAGGATGAGCTCATGTTTAAAGAC
-TTTTAAGTTGAAGGCAGTGCTAAATAATTTAGTGTGGTCAGGTACCCACCTGACTCAGGT
-TGACCCTGACACCAGTGCCAGGTGTGGCAGAATCACCAAAATGGTGTGGAAGATCAAGAT
-AATGCTAAAtgaaactaccatttaagtctgctttgaaaactcaaggagtttggagctcag
-agttgccaagaacaagttggaatggcctgaggctgccatgctatgaggaagcccaggcca
-catggagaggccacatgcttttgactggtcgttctggtctttcaattctcccagctccag
-gaacagacacatgagtgaagaggctttcatacaattccagccccagttatcgagtctttg
-ccattgaagcctcagacatcatggacagtgacaagtcttcactgctctacccattctgaa
-tcctgaactacagaatccgtgagcataaggaaatgcttaagacaccaaattgtggggtaa
-tttgTCACACAGCAACACTAATTGTGACTGTAGCTCACTAAAATGCCTCCCAAATATTAT
-CTTCACAACTAAAAGCACCAAAAAACCTGAAAGTAcagttgaatttcatgatttgctata
-attatattctagaaagtcactgcaaacactgaattagcaaatactgaaccactgctccta
-ggagaaatacaggcttaggttcctgtgaaccattctgttcccaacatgttcatcaactca
-tcaatacttaagcttgttttatgcatgtttctgttgaaagacaccatgtttaatacatat
-tgttgattcactcacattgcactcatggccaacagcactgtaactcacgcctgaatgaag
-cttatctaactcacatgatcttctctgtaaggcacatcaaagccttctggtgcttaggaa
-cattagacagcacctcagcaccatgcccggggccattgtcaacagtacaatcaccagcgg
-aagacacaaaaatttgtaaaatgtggcactgaatagactgaaaaggacagttgtttacag
-tgtgagagctgaaagaagaaggcagcgtgtcactttgtatgatctcacctggaaacatgc
-atcaagtgactcaaaaaaaattttttttttcgagacagggtctcactctgttgccaggct
-ggagtgcagtggtgggatctctgctcactgcaacctccgcctcccgggttcaagcagttc
-tcctgcctcagcctcccaagtagctgggactacaggcacacgccaccacacctggctgat
-ttttgtatttttagtagagacagggtttcaccatgttggccaggatggtctcaatcgctt
-gaccttgttatctgcccacctcggcctcccaaagtgctaggattacaggcgtgagccact
-gcgcccaactggcaactcaaatttttcatgactcctcaagtatccatcaatgaccatgag
-agctccagcgagtgttgattttgaggttacaaatttagtgagtagatgaatccacgactc
-cacaatcagtgactaataagaattgactgCATTATTTAATAAGTTCAGGGCTTGCCGTCG
-TGATTCACAATTGGAGAAAGCGAGGCATGGAGCAAGTCCAGGGGTGTTCCAAAAGGCCTC
-ACTTTTCTCCTTTGCAAACTGTGGCTGATGAGGGCCATCCTGCGGGGTTTGTGGAGAGAA
-GGGATAGTAACAACAGCTGCATTGTATGGTGCTAtgtgctgcacactttgcacacctgat
-catttaatactcacaatgatccctagcagatggatcctattaccaagttcattttacaga
-tgaggaagcttagacccagcaaggttaaggggctgtgctcaaggtcttaccttctaggag
-aggcagagctggatctgaagccatttctgttctcagcccctgctGTGTGCTTTCCTACCA
-TCCTCTCCAGACTCGCCCTGAGCCCAAGTTGCtgaggcatgtggcacggtgcctggcaca
-cagtaggctcacagtagtggctgctttGATGATGACCATAAACTGGGATCTGGGGTCCTT
-GAGATGATTCTACCAAGGGGACCCGGGGGAAGCTGAGCCCTGGGGCAAAGTGGGGGCCAG
-CACAGGAGCTGCTGGGGAAGGAACAGAGCCTGTGCGGTGGGAAGATAGGACATGGAGCAA
-AGAGGATCTTGAATCAGACCCCGTGGTCCCCTCCTACAGAGGGTTAAAGCAAGCCAGCCT
-CCTTCCGGCTGAGCGGAAATCAGATTTTGAGAGCTGAGCAGGGCTCTGGAGGGATGTTTT
-TCTTCTCCATTTGTCTGCTTGTGGCTGGCCCATAAAATCCACCGGAACTCCATGCTGGAC
-TGAGGAATTCCTGCTGAACAGGGACATGGAGAACGCAGGCTGGGAGGGGGCATAGTGTGG
-ATCCTTATCAGAGCAGAGACCACCCCATCTTCAAGGCCCCACCTCCAGGTTGGGTGATCC
-CCTCTGGAGGCCTCATAGGATTCCTGGGTAAGGGGAGGGACCAGGATCGACAGGGTGGGG
-GAAAGTCCAAGGAACAAGTGATACCCCCTCCCACCTTTTCAAAGTGAACTTGTGGGGTGA
-GGAATGAGAGGAGACAGGGAGGGTCAGGCTGTGGCAGGTCAGTGAAGTGtgatgcaggtt
-ccaccttctacgctgtgtgacattgggcaagtctctgcccgtttcctcatcattgcaacc
-agggggctggagctagatgaccaccatgtgtaattttctaatcagagctgacagtctgag
-gctctTTCTGTCTAGTTTGCACCTTGCATGCATGTCCTCCCCTGAAGGCAGTGCAattat
-tataacccctattttaaaggtaaataaaccaaggctcactgaggcaaggtgacctgagca
-attttgcccttgaagggctgggacaggatgcaaacctagacaattggtgccagaattcat
-ctctcaagcattcgctctcctgCCTCCCAACACGAGTTTCTACttctctttgccctggga
-tgacctctcctttgtctcttggcttgatgacctcatttttaaagattcggctcatgcatc
-acctcccccaagaagcctgtcctgactaactaagctcggttggggctcctctctgtctgc
-tcatgcctctgggaagtagctgtctcttttggtcactgggctgtgagccctggatgagca
-gagccacttctcattccttcctgtgcctcctgcatcAGCCAACATAAAAAGCTTTCAATT
-TTCCTTGAAGATTCTAAGTGCTTGTGGTGGTTTTAGAACATGGCTGCCTTAAGAAGTGGG
-GTCCATTggtagctcatgcctgtaatcccagcactttgggaggctgaggcaggaggattg
-cttgagcccaggaagctgaggccagcctgggcaacacagcaaaatcccgtctctacaaaa
-aatacaaaaattagccagatgtggcagcatgtgcctgtgggctcagccccttgggaggct
-gtggcaggaggatcacctgaacctggggaggtcaaggctgctgtgagctgtgattgcacc
-accgcactccagcctgggtgatagagggagaccctgtctcaaaaaaaaaatggggtttat
-gtctcctcctcttgagtctgggtgggctcgtaacagctttaaccaatagaatatgtcaga
-agtgactctgcgactactgagactgttcactggcactctgtttttggagccctgagctgc
-cgtagaagatgttcaaatactctgggactaccatgctgtggggtcacatgtaggccctcc
-tagtcttcaagtcatcctggtctggggactccagatgattccagttcttagttgtttcat
-atccagcctttgagtcctcccggctgaggaccaagacaccacggagcaaaaacaagccat
-ccccaccactcctggcccgaattcctaagcataataaaatggtggctgcttaaagccacg
-gagttttggggtagtttgttacacagaggtggtaacgggaacaGtgcgaccaccctgggc
-atgtcaccttcctctctggccagccagaaggtgcagcagccacaaagctctctgcctcct
-cccttccctcagcggtgtgctgctgacacagcagtcagagatgccccataaatgcttcaa
-acagaccatgtccctcctttgctcaaaaccgtctgttggctcccagctcactcagaggaa
-atgccagattcttaccatggcccacgggccctacatgatgggacccctctccagcccatg
-gcctctctgtcctgtctcccaccctctcccttctccagccacaccacctccttgctactc
-cttgaacaccacatacgccctgtctcagggcctttgcgcttgccaaggacagtgctccat
-tgcctggaacattctttctccaggtgttgcttggttcagtccctcatcttgttcatgtcc
-ctgctcagatgtcatcttctcagtgaggccctctcttcctactcccaaaccccttgactt
-gctctattttcctctcgccatggcccttagaactacctaacacactatgcactttactta
-ttgtgtttccccgcccaccccgtccaccctagaatgtcaataccacagggcaggaatctt
-ggttattctttaatgtctccccagtgcctgtaagagtacccaacactcacagtggtttgc
-tgaatgaatgaatGAATGAGCTGTAGGAGCCCAGAAGGGGTTCGTTGCCTTCCCTAGGAC
-TATGTATGTGGGGAAGCAGAGTGGGTGAGGAAAGGGCAGGATTGGAGTGACTGGGTTGAG
-CCAGTGTGGCCAGGGCTGGAGGACATTTCTTGGAAGTGACAACTCACTGCCCAGCTGGGG
-AATCCTGAGGATGGGAGAGTGCAGGGCAAGCCTTTGAAGATGCAAACATGGGTCGTCTCC
-GGGGCCTCCCTCCTTCCTGGTCTTGTGTGTCTCCGGCCCTGCCAGTAAACAGGATCTCTG
-GGCAACTGCCTGAGAACCCTGCCCAGTGCCCCAGAGGCCCTGACGTGCTCCTTCCTGAGC
-TATAAATCAGGTACCTTCCAGCTGTGTGACATCCTGGATTTGATGGGGAAGGCAGAGCAG
-ACAGATTTGTTGCAAAGAGCTGTGCActgcaccttgatttccttgttagcaaaataggaa
-ggataggagcgttgacttcaagctgtggctgtgaaatcgagtgagataatgcatgaaaTT
-CCTCTGTAAACAGAGATGCTTCAAGGACGCATTAGTGGGTGGAGGCACAGGgagcaaatc
-ccaactctgccgctgagctctgtgtcttcacctgtaaaatggggttaatgtgaatcacta
-acttcctagggctattgagggattcaaaaatggagagaaaagtcttagtacccaatgaac
-gtgcaatagatattagctgttattaATGGTAACTATTACCATAATGATAAAGAATCAGAT
-GTTATTGATAAGCCATTTGGGAGACCGAGAGTCTCAGTTCATACCCCAGAGGGGACCATG
-GACTTGGCACAGCACGATTTCAACCCTGTGCCTTTTGTGTATATTTCAATCTGGTCAGAG
-ACTATCTCCCACTCACAGGCCACCTCCTCCCCCTACCCCCAGAAAGGCTATACTTGTGAG
-CACACCACTTCCCTAAAATATGCCACAAGAGTCGACATCTagccaggcacagtggctcat
-gtctataatcccagcaatttgggaggccaaggtaggaggatagcttgaatccaggagttc
-gagaccagcctgggcaagatggtgaaaccatctctactaaataattttttaaaaattagc
-tgggtgtggtagtgtgcacctgtagtcccagctacttgggaggctaaagtgggaggattg
-cttgagcccagaaattcaaggctgcagtgagctgtggttgtaccattccacttcagcctg
-ggcaacagggcaagaccttgtctctaaaaaaatttaaaacaaacaaacaaacaaagaATA
-AATATCTAGCCTTGAAGCCAGCCTTGGGGGTGGGGTGGGAGGAGGACTATTTGTGtgcag
-gagttcaaacccaggccccatcactccccagatgtggaaacttagacatgttatttaatt
-gtcctatgcctcagttccctcaactgaaaaagagaataataatagtacccatctcttcta
-gttgcattgaggactgaatgagttaaAAAGTACCcaacacaccatatgagataatgctat
-tttcattctaccaatgggtaaactgaggctcagctaggagaaagaacttggttcaagCTA
-TCAGTCGTGTTGTTTATTGGCCCTAAGTTGTGACGAGTTTCATTATACCATTAGAAGCCC
-CCGAACAGTGAACTCATTGTTTGTGAGGTATCTCTATCTCTTAGTGATTTTTTAGTTAAA
-TGAGAGTCCATGCTAATCATTTATAAAAAATGGATAAGATAAAAACTTAACATTGAAACA
-TCCATGGGCTTCTTTCCATAAGAAATGGAGAAACTCTTGCTCCTAGTATTAAAAGGTCGT
-GGGTTCCAGTTTGAGATGCACCAAGCAAGGTAATAGGAAGTCCTTGAAGGTTCTTGAGCA
-GGGGGAAGCATGAACTTAAAGCATATGAACCATGTGTTTGGGTCAATTCAagttactgag
-acttagacattgctggtgggatgcaaattgctacaatctctgtggagggtgattgagttc
-cacaaatatttaagataaatgtaagagctcctaccAAAtgccaggtgctgttcaggtgct
-aaggatttgcagcaaataaatccaaccaagtccctctgcctggtgcttattttctggaga
-ggagacacacaatgaatgaatatacaacttagtatagcgtgCACTGGGGAAAGAAATAAG
-AGCATTTCTACAATAATGTTTACTGCAGTGTGAAGGGGGATCTGAAGAGGCTGGACAGAG
-CCAAGTATGGGTGAAGATGTGGAGATAGCGCTGGGGGTGTGTGGACTGGAGCTGCCATCT
-GGAGAGCAATCTGTCCAGTTAAATCTGTACATTGggtgcataaattatggccaccaatta
-tttgacattcctcccatctagatgtaggtctatgtatctgctctctgaatctgggctggc
-ctctgactgctttgacaaacaactatggtggaagtgatgatgtgtcagtttccaggccta
-ggctttaaaagattggcagcttctacttcctctttcttggaacaattacttgaggggaag
-ccagctgccatgaagaactccagccaccccaagactgccattctgtgaggaagtcccgcg
-aacaatggaaagaagtcctctaggatgagacaccatgtgatggagagagaggccaggaac
-atcaaggctgtagacatgagtgaagatgccatcttgaaagggaacctccagccgtagctg
-tttcagttgataccacaaggttcagaaaggagccacccagctgagtccttcctaaattcc
-tgactcacaaagtaatgaacaaagtggttgctttaagcctctaagttgagggtagtttat
-tgtagtgcaaaagataaccagaataGATatatccgatgacccagcaattatactcctggc
-tatatgtccagacaaaatTCTCTTATCAGCCCATAGAGGATATGGCCATATTGTTGTGGC
-AACAGAGAGTTAGAGGCCACTCAGGTATCCATTACTGGGGTGGTAGAAAGGAATACATGG
-TAGGTGCAAAGAGCTCTAGGCAGCAATCAGAAGTCACAGGTGAAGCCACACATACAAGTC
-TGTTATGTTCTACGTGAAGACTTATACACCACAGAATGCACAAAGAACCCATCAGAATCT
-ATGGAGGTGCAGAAAATATGAAGGGGAAATGGGATAAAAAGGAATAACTAGAGAGAGAGA
-AACAAAACCAAACAAAGGAGGGTGCACAGGGGTAAGTTATGATAATCTGCCATGAATTGA
-GGTCTTATTAAACTCAACGCTCTACATTTAAAATCTAAAAAgtaataacaaaggccaaca
-aaattaatgtgtgtgaatagggggttggttaaataaattgtagcacatccacatgaggga
-gtactgtaaagccataaaaaagagtggcagagcttgctatgtactaacatgtaagagtcc
-caaagtatgtcgaaaaggctataagaagggtattgaaaaggatgcataataggcttccat
-ttgGGGGGAGATACCAGTGTGTGTGGTTGTGGATATGTTTATAGACAAATGGTATATCTG
-TGGAAGGATGCTCCTGGGGAAAAGAGCCAGATGTCAGGGGAGAGGGGTGGATGGCACTTC
-AGAAGAGCAGGCACCCAGGAGCTGTGTTCAGAGAAGGAATTGCCACTAACACTGGGACCA
-CCTCCTCCAGGCCAGGATCACGCCAGGTGTGGGGGCTCAGAGTGGGCAGAGAGCCTCTGC
-TGCTTCCAAGATGCCCAGGGTCCTGACTGTGTCCATGATGCAACCTCAGCCAACAAGTTG
-GTTGGGCACTGCCCACTGCTGTGCCCTCATCAGCCACTGTCCTCACTTCATTGCCACTCA
-CCATCACCACTCTCCTTCATTCTGCCTGAAACACTCCTCCCCACTGCCCGTCTCCCTCTG
-TTACTTAATACTCAAACTAGTACAGAGAATAACAGAATAAAATCCCATGTACTCACTGCT
-CAGTTTAAGGAATAATACttttcttttcttttttgagatgaagtctcgctctgttgccca
-ggctggggtgcagcagcgtgatctcagctcactgcaacctccgcctcccagattcaagtg
-attcttctgcctcagcctcctgagtagctgggattacagggatacgccaccacacctggc
-taatttttgtatttttagtagagatgggatttcaccaagttggtcaggctggtctcaaac
-tcctgacctcgtgatctgcctgccccggcctcccaaaatgctgggattacaggcatgagc
-cactgcgcctggccTAAAACTTTTCAAAAAGAATTGAGAGTGAAtggttttaaatatgtc
-cacaaattcttggacactcctctcttcaaaaagtagagttacattctccttacctttgag
-tatgggctgagctcagcaactcatgtctaatgaagaggatgtggtgaatgaggatgggtc
-acaaaagggatacaacttctgcttaattgtccatctgtccgtctatctctccatgctcac
-ttttggaatccagccaccatgttgtgatagaacccaagatgcatgggcgggcccacatgg
-agaggaactgaggccctctcccctcttcccagtccctgatcaacaaccatcacaaatttg
-ctagccacccagatgaaccccctttggcttggcagcaaattctccagcttaccctccaac
-tccccaacccgataggccttcagatgactgcaggcccagctgacagctgaatttagcttc
-ctgaggaccagaaccacccagctaaaccatgcccatattcctgccttcagaaactgtgag
-atataaaaaatgactgttagtactttgaaaacattatgttttgggatgatttctaatgca
-ggatcgattgctaatacaGAGGGTCCCTGGTATCCCTCCCCACCATCCCCATCCACCCTC
-TTAGAAGCCACAATCCTGATGTTTATTATTTCCATGAATGTTTTACCTTTTACTACATAT
-AATAAATCCTTACCCAATACATAGGACTATAtttccttcttttttaaagaattttttctt
-tttgagatggagttttgctcttgttgctcaggctggggtgcaatggcgcgatctcggctc
-actgcaacctccgcttctcgagttcaagcgtcattctTAAAAATGtatagaagtgcatat
-atattgtatggattctgtgcatcctacctcgcatgctcttttccttgcacagtgtgcatt
-ggcgacccatctgcattgaggcaggcagctgccattcgttggcactgctgggcattcttc
-ccttatatgaatatgttaataccacgatatagtatctgaagtccatgttgatgaacattt
-ggatggtttttattttttgctattacaaacaacagcgctggtaacatccACTTGCCCTCT
-TCCCTCTTTCACATGGCACCTTCTTGTTCTTGGAGGTCTCAGCTCTAACAATGTAACCCC
-ACCAACCCCCCGCTCCAGCTAATGGGTTCTCTGTCCCCACATGTGCCTCCCAAGCTGGCT
-TTTGATGGTGctccctctgtttttccttctggcatctactccgtgtggtcaacattcagt
-tatcttttcctgtctggagctagagggtaagccccatgaaggcaggcagagtagtgggtt
-tttttccccagtcccctccatccctgatgctttgcacagggcctggcacacagtaggttc
-gcaagaaaaattgttggatcaggaatgGCTGAGAATTAGcttcctctctttgggcttcag
-ttttcccatctgcacagtgaaaactttagataatttcGGGGTGATTTTAGGTTTAGCCTT
-TGAGAGGTGCCTCAGTGGCCGCCACAAAATATCGGAAGACCCCAACTTTCAGCAGAGCTG
-GCCTTGTTTCCCTTGTGTCTTAGATTGGTCTCTATGGCAGATTATGTTTAAAaagaatag
-ccaccatttattgagcgctcactacgtgataggcatgctgtcagctggcagatgcatttc
-ctcattttggccactcattaaccctcagaagtagcactgttactatgctctttataaaga
-ggggtaaactgaggcaaagagaggtgaagtcacttgtcagaggactagcaaaggagggag
-ctgggatttgtagcacaagagactatcagagcccattcgccaaccctggtgcagccctgc
-cccactgGTACCACAGCTTTAAAGAAGTGGGGTGGGAGGCAGAGGAGGAGGACGGTGAAG
-GACAAGGGTGAAGAGAAATGTTTGGATAAGTTTGACAGCCACTCTTCTGAAGGGCTTTGC
-CAGCCGCAGCATTCGGGTGTCCCTAGTCACGGGGGCTCCGTCACTTCCCTATCCCCCTGT
-TTCCCGGCCCTGATgggtcttgctctgtcacccaggaggctggagtgcagtggcgtgatc
-acagctcactgcagcctggaactcccgggctcaagtgatgttccccatcagccttcctag
-tagctgcgactacaggcgtgcaccaccatgcccagctaagttttaaatgtttatatagac
-acagggtctcactatgttgcccaggctggtctcgaactcctggcctaaagcaatcctcct
-gtcttggcctctcagagcactgggattaaagtgtgagccactgtgcctggctGAGattta
-ttgatcacatagatacctatattattctaagtgtttttcaagtgacaactcatttaatct
-tcataactgtcctgtgacgtagatagtatcagttttatcagtattttatggagattaagt
-aacagaagcacagaaaggtcaagtaacttgcacagagtcacacagctggtaagatgtgga
-cccagctttgaatccaggcagtccagctccagaatccttgtgcttcacATCACCACACGC
-TGCCTTCACCATCACGTGTCAGTTCCACACAAGTGGATGCCCACAATGGTTGGGAGTAAG
-GGGAAAAGGAGTAGGGCTTGAGGAAAAAATAAAAGTGAAGCGTGTGATGATAATGAGCTA
-TGCTTGAGAAATGGGATTAACTCAGCTCTCTGTACTTGATAGAaaaaagaaggagaagga
-ggagaggaaagaagaagaaggaaaTATTTAACTGGACTCTCCGGGGCTTAATTATAACAA
-CTGTCTGGCACCTAAGGTCCTTCCCTAGCTGGGcttgctgcttctctaatctcatttccc
-tacgtttctcacggtgctccagtcactccaggccacacctgatcccagaaacctacttgt
-tcctactttgagcctttgcttgtgctgtttcttccattaagggtgccctttttgccaggt
-gcagtggctcatgcctataatcccagcactttgggaggccgaggtgggacaatcacctga
-ggtcaggagttcgagaccagcctggccaacatggtgaaaccccgtctctactaaaaacac
-aaaagttagccaggcgtggtggcaggtgcttgtaatcccaactacttgggcggctgaggt
-gggaggatcgcttgaacctgggaggcagaggttgcaatgagctgagatcatgtcgctaca
-ctccagcctgggcaacagagctagagactccgtcacaaaaaaaaaaaaaaaaaaaaaaaa
-agagtgctcctttccccattttaggaactcctacacatccatcaaaacctggcctaaagg
-ccctctcctcaatggaaccttttccagcctttcacttcttggggttcccacagcccttta
-catgtctctattctggttggctcacctgctagccagtgagctcctggaggacagggatgg
-gtctggctcatctctttaaccgccatgctgagcccagagcctggtaaatggtgggtgctc
-tataaGCTCGTGCCCAGTCACTCACCTTTACAGCTCcagtgtctggctgacagtgggtgc
-tcagtacatgtggttggacagatcaatGAGTGAATATTTGACGGAAGGGTGAATAATGAC
-ATCAAGGCTGCATTCCAATAACAGCACAATCCCAGTGCTGAGAAAACAATTCACAGCCCT
-GGATTCATATCATGGAATTCTGATTCCTAGGCCCCTTTGTTCCCAGAGCTATCCGATGAT
-GCTGAAGAAGAGTCCCTGGGCATCATCTGTTccagctgtgtgaccttgagcaagttgttt
-aaccaccttgtgccccaagattctcatctgcataaagaagagaaatagctacaccttcct
-catgggctagttacaaggatgaaatttgatcatatgtgccaagcacttaacacaacacat
-gaacatCACGGCATTGGCATGTCAGCTATGCCAATGACTCTATTTATACCTGAAttttta
-tttgaaataatttcagacttacagaaagtttgcaataataatacaaagaattcctacata
-ccatcacccagattccttaaatgttaacattttgcattctttgctttttcattctctctc
-agcatatatttttgtccagtgcctgaattgttggaaataagttgcagacatgttgactct
-ttacctctaagttaattatcccatgtatatttctaaaaacaagaatattctcttacaaaa
-tcgcaggacagatagaaaaatcaggacactgatacaatgctattgtctatcttatagacc
-tattgaaattttttcagttctactaatgtcctttgtagcaaataaacaaaaagatttcta
-cccccccaccccacccactcagtaaccagtccaggacacatgttgtatttaatgtttatg
-tctctttagtcttctttttagtcttatctggagcagtttcttttttttgagacagagtct
-tgctctgttgcccaggctggagtgcagtggtgccacctcggctcactgcaacctctgtct
-cccaggttgaagtgattctcctgcctcagtctcccgagtagcaggaattacaggcgcctg
-ccaccacgttcagctaatttttgtatttttttagttttaccacgttgaccaggttggtct
-cgaattcctggcctcaagtgatccacctgcctcggcctcccgaagtgctgggattacagg
-cgtgagccactgtacccagcgtggaacagtttctttggcttttatggctgacattatttg
-aagagtttaggccagttttttgttttgttttgttttggtttTTGAagatggagtttcact
-cttattgcccaggctggagtgcaatggcaccatcttggctcactgcaacctccgcctctg
-ggttcaagcgattctcctgcctcagcctcctgagtagctaggattacaggcgctcgccac
-tatgcctggctaattttttgtatttttagtagagacagggtttcaccatgttggccaggc
-tggtctcgaactcctgatctcaggtgatccatctgcctcggcctctcaaagtgctgggat
-tacaggtgtaagccactgtgcccagcctggaacagtttctttgacttttatgatcaacat
-tatttgaaaagtttagaccagttgttttgcagattgtccctctgtttggatttttgtgtt
-atttctttatgcttggattcagatcaggcacttgtggcaagaacaccgcatcagtgacgc
-tttgtccttcacagtgcgtcccatcagggggcccatgatgcctgccgacttgccccacta
-ttagcaatgttcactgtgatcatttggtgaaggtggtgtctgccagttttccctactgta
-aagttaccatttttctctttgtaattaacgaataccttataggaagatacactgatacta
-tgtaaatattctgtttctctttatatttcctgcccatatatttcctagcaggatgatcta
-ttttgcaatagatgcaattattatttgatAAAGGAATACATAAACATGGACCAATATTCC
-AACAGTATAAAAGAGTGTAAGGCAAATctcccacccactccgtccccagccaccccgatc
-ctctccccaagccatccctagtctcactgtttcttgtgtccttccagaaatgttctatgc
-atagacaagcgaatccactcatccatcttcttctcgagttatgtgcatgcagaaggtagc
-taaatagacacatgatctgcatcttgttttatttcatttaatattttggagaccatttca
-tatttgaacacaaagaGAGATCTCTTGCTGATTTTAGAAACTTATGTCCATCTGAGGTGC
-AATCCCAGGGtagtcaatctctttcaggttcacaaataaggaagctgagactcagagtgg
-ggaagggacaggtcccaatgtcagaggcaaaacagacTTGGAAACCAGCCTGGAACCCCT
-GAATAAGAGAGTTGACAGGTCTTACTATTGGGGAACCAGTCCTTCCAAGGGCCTTTTCAA
-CAAAATGCCAGACCCAGGCTCATGCCCCCGTTCTCAGCCTGGCTTCTCCCTCCTTCCCCC
-CTCCTCCCCTGGGTCCCTTCTTAACTCTCGTTAGGGACTCCCCTCCAGCTCCCTGCTGGG
-CCAGGCCTTGGGAGCCCCATTGATCCTCTGACAGCCCAAGACAGATTGGTGGGGAGTGTG
-TATTCAGGTGCAGGCGCCAGCACATGGAGGCCAGATGAGAATGGGGTGGAGGGGGTCAGG
-GGCCTGCTGGGGTGGGGGGATTGAGGATTGAGGAAGGCCAGGATAGTGCATCCCACAGAC
-ACCTGCCTCCCCTCTTTCTCCCCCACCAATTCCTGCCCTTCTTGGGGCTTCTGTTCCTCC
-CGCCTCCTCTTGCCAGGCGTGGGCAGGCCAGAGGGGCTGGGGCAGGGCCTGGGAGGCCTG
-GGggtgtagcagagagaagtcgggatggggagtgagccttgcttggtttgatctcagctc
-aggccctcttgtgagactcaggcagatgacatctcttgagcctccgtctcctcggggcaa
-taagaaggaaataaACTTCATACAGCGTCCAGCAGCCAGTGAGGCATGGCCAGTAAAGGT
-CTCCATGTCCTTCATTGGCCTCTTAAGGCTCCCACTGCATTGTTCCTGTCTGATTATGGA
-AGCCCCCAAGCCAAGGCGGCCCCTCGGCTCTGCCTGCGGAAAGTTTTCCCTTCACCTGCG
-CAGACCAGGCCGATGTGGCCTCCAGAATGGAGGGGTCAGCCTAGGTTGCCTGTGACAACT
-CTGAAAGGCCTTAGGAGGCACAGCATCTCAAGTGCACACCCGAGTATGGCGTGATCTGCA
-AGGGGAATAGGGGCTGGGGGGAGACATAGGCTTTGAAGATGAATCAGGCTGGAGCAGGGT
-GGAAGTGGGCTCAGGGAGATGGAGCAGGAGGGGTTGGTCAGGGAAGAGGGAGCTCAAGGG
-AGGAGACATAAGCGCAGAGAGTGAGATAGATAGGGACCCAGCAGCAAGTGGGCTCAGAGA
-GGGGCTGTGGTGCAGAGAGAATGAGACTCAGATGGGGGCTGTAGACTCAGAGAGAGAGAT
-GGGGACAAAAGGGGAGTGGGGGCTCAGGCAAAGGGATGAAGGCAGAGATGGGAAAATTGG
-GAGGGAGGGGAGCATCCGTTTTGGGAGGGAAGTGTCAGTTTTGAGCACACACAGTCCTCT
-GCAGCTTGAGGAGGAGGAAGGCTGGGTCTGTGGAGGGTGGGGAGCGGGTGGCACCAGAAC
-AAAGCCCCGGGGGTAGCAGCCTGGGCCCTGCAGCTCCTTCGCAGCTGACAGTCCCTGAGC
-TAATTACCATTAATGAGCAGCTGGGCCCAGTTTCCCGGGATTTGCATTCACTGTGCTAGT
-CAGCGCCACTGTGGATGGAAGCCAGCGCCAGCCTTCTGGGGTGGGGGTGACTCAGGGAGC
-CGAGGTAAGATCGCTGGCTTCATGTGGGGCTGAAGAAGGTGTGGCTTTGCCTTTCCTGCA
-GGTTAGGAGATGGCCGAGGTACAATCGTGCCTGGAGGCAGGGCACTGGCATCATCCACCT
-GTCCTCAGCCAGGGCCGGGGTAAGGGTCTTGGGGAAGGAACAGGTCTTGTGGCCCTCAGA
-AGCCCTCAGACATTTGGTTGCAGGGGCCCTCAGATTGTGCAGCCAGCTGTCCACTGCGGA
-GTTGAGGGAATAGACCACAGAGGAGCAACGTGCTGCTCAAACTCATACCAAGACAGCATT
-GCTCGTTAAGCGTGCCtgtgtcagacgctgtccaaagcactttactgaatcttcactacc
-aaccccatgtggtggctgttattagcaatcccattttacagatgaggaaactgaggcaca
-gagcggtcacacagccagggaccagcagggctggcatttgagcccagtcctcctgactGA
-TCCCTGCTGGGCAATAGGGCTGAGGAGCTCTCAGACCTGGGTTTTCCCTTGTGATGGGGG
-CTAACAGTGCCTCTCTCCCCCTAATTCCACTCTCTGCAGGGATGCCGGTATGTTTGGTGC
-CCCTGGCAGGGTTGGGAGGTGAGACTTAAGTACAAATAAATAAACAGGGAGCAGATGGTT
-GTGGGGGGAGTGGTGGTGCTGGGAGGGATAGGGCCAGGGCCTCCCACTTCTCCTTGGGAA
-AACATTTCTGGGCTGGAGCAAATGGATTCCAGACTCAGGACCTGGGAGCCCCTTCCCCAG
-GCCTGCCCTCCTGCCTGCTGGCCTCAGACCTGGCCCAGCCCTTGGgagaaatggtgggct
-ggggtcccgagtcttgggttctgcccatccctcatttctctctcttcttcctgtgtggcc
-ttgagcaagtccctttacctttctgtgcctctatttcctcatctgtcaaatgagtggaag
-gagaatgaactttatcaagtttctgttcaagggccacctcccctgggaagcctttcttga
-ttgctccaggcAGCTTCTGTTAGAGCAACAGCCTCGAGTATCAAGGAGAACATAGGTATT
-TGTGTTTTTCATTTCACAACAatccattcaacagatactttctcagggtcacctatgtgc
-ctggcacgatgccaCACTCCAGGCTGACTCGTAGTTTTTCTCTGTAGCTCcagtgctggc
-ccagagtagccactaataaacatgtgtcatgtgcatgaatGATGAGTGGGTGACTGAAAG
-GGAGCATGAGGAGCTGcagtgtttcccaaacgtggtacttgtatcttgggggtgggagtg
-gggagtggataaaagatgatacgggtgaacagcaacaagttattaaataacaataaatca
-acagtgaaaaagttattcctttttcattacctcccagtccttcttacaggccaaggagaa
-ggtctccgatgatgccaggaacgtgtttctagcacctgtggatctctctttctctctctc
-tctcccccaactcccgcaaaacccaccccaagaaggctggtcttgggctcagagcttcta
-cagacaacactatctagaatttgagaatgttgtttggtttccattttattcattttggtc
-agttaccttttatttgtgacaagggattttgatttttcctttgtTTGGACATGGCCAGTG
-GGAGTTGGAAGTGTTTGGCACTTTCTGATGAAGTGATCAGGACCAgggtggggaagaggg
-ctcgactgaaaaggggcacgagagcacttgtggggtgatggaaatgttctgtgttttgct
-tgtggtcgtagttacatggctgtgtacatttttcaaaatgcattgcacgataacacttaa
-aataggtgcattttattgtatgtaaattatacctcaaAGTTGATTTAGAAACACATATTG
-AGggctgggaatggtggcttacgcctgcaatcctagcactttgggaggccaaggtgggtg
-gatcacctgatgtcgggagttcgagaacagcctggccaacttagcaaaaccctatcttta
-ctaaaaatacaaaaaaattagccgggcgtggtggtgcatgcctgtaaccctggctactca
-ggaggccgaggcatgagaattcttgaatctgggagacagaggttgcagtgagctgagatt
-gcactactgcaccccagagcgagactctgtctcaaaaccaccaccaccaccagcaccacc
-accagcaccaccaccaccaccaccaccagcacATGTTGAGGatattaagtagataataat
-acagatggcatgtaggtgtggccaaagtcatgaaggtTGCCCACCACACGGTAAACTTTG
-TAGTCagtgaataaatggatagataggagatagaatggaggaatgcatgaatgggtaaat
-gagcaagcgaatgaatACCTATCTCatccattctacacagccccagcacattgggaggtt
-gtcctatctcaacttgcatagctcctagaatgggggaactcactaccttatgacatagcc
-ctttccacatctgaaccactaggagtgtgtaaaagacattttctcatattaagtttatct
-ttctggagatcctgtgctctctggggccccacagacacatctgcttccctgtctggggac
-agcccaaacacttgCCCTCCCCAGGCTGCCCTTCTCTGGGCCCTTCTGCCCAGATGCTTG
-GCTGCTGTGCCCACCaggtcctgcttgcacagagcttatatcctagtgggcggcaggaca
-aagaacaagcacacaggcacacaaacacaatgattccatgctatgaaggaaatgcagagt
-gagactgttgggaagagcatggcggggtgtggagaggcaaggggagtctctctaggaagg
-taatatttgagctgggacctgaagaatgcaacaaagccagaagaacaagagaaagggcat
-tccagatagaggcaagagcaagtgcaagagccctgagatcacagagcaattggaaactag
-gaagcagccagcctggctggaCATGGACATTTTGGGTATTGATGGTGAAGAGCCTGGAAT
-TGTTTTCTAAATTTGATCTCCAAACACTTTTAAGCAAGAGGTGATATGATATGACATATT
-TTAGCAGACAATGAATATTTCCTGAATTAAAATTGAAGACCCTTCTAGTTCCAATAGTTC
-CATGCTTCCCAAAGTGATACTGAAATGACTTCAGGAGAGAACAggctgggcgtggtagct
-cacatctgtaatcccaacgctttgggagggtaaggcaggaggattgctcgaggccaggag
-ttcaagaccagcattggcaacatagtgagatccccatctctacagaaataaaaataaaaa
-taaaaaaattaaggccgggcacagtggctcaagcctgtaatcccagcactttggaaggcc
-aaggtgggtggatcatgaggtcaggagttcgagaccagtctggccaacatggtgaaaccc
-catctctactaaaaatacaaaaaatttagctgggcatgttggcgtgtgcctgtaatccca
-actacttaggaggctgaggcaggagaatcacttgaacctgaaaggtggaggttgcagtga
-accgagatcacaccactgcactccagcctgggcgacagaatgagactctgttaaaaaaaa
-aaaaaaaaaaaagctggacatgatggaacatacctgtggtcctagctactcagggggctg
-aggcaggaggatcacatgagcccaggaggtcaaggctgcatgagctgtgatcttactact
-ccacctcagcctaggtgacacagccagaccttgcctcaaaaaaaaTTTTTTTTTAAAAGA
-AAAGAGACAATCATGtgatggttgccagaatggcctccagagagggcctccctaggctga
-atcctggctctgcctcatccttgccgtatgactctgggccaaggaccttgcctctttgag
-cctcagtttttacatctgcaaagtgggggtcataattgtccctgtcttattggcttgttg
-tgaggattaaatgactttatattggagaacagggcccagcatgtcaaaagtactTTCTGT
-TTGTTAAATACAATGAAAAAGGGTGAGGACATGCAGAAGCAAGATTAATCCTTTTTCAAT
-CTCTTCCAGTCCTGATTCCTGCAAGGAGAGTCAGGGTTGGTGGGGATGTGTATCTCTAAC
-ACCAGCCCAATCTGGAGGAAGTTAGTAACAAGGTTATATTTATGTTGTTTATATTTACAG
-CTACCTTTATTTGTGCCACATGATACAAtttttttttttttttgagatggagtctcactg
-tctccaggctggagggcaatggcacaatcttggctcactgaaacctccacctcctgggtt
-caagcagttctcctgcctcagccacccgagcagctgggattatgggtgctcatcaccatg
-cccggcttattctgtagttttagaagagacggggtttcaccgtgttggccaggctggtct
-tgaactcctgacctcaggtgatccacccatctcagcctcccaaagtgctgggattacagg
-cgtgagccaccgcgtctggccCAAATTTTCCATCTACCCTGGCTATTTCAAGTTTCCTTA
-TTTTTTTTTTTTAAAGTAAAACAAAAGCAAATAGATTTAGAAATTCAAGGGCCATGGTCC
-CTGAGGTAATGGCAAGCCCTCCTGTCCCAAATGGCCCAAATTGTGCAGGTGGTCATTGAG
-CCATTGATGGGACTTTAGGAAGCATGGttttatttttatttttattttttagatggagtc
-tcgctctgttgcccaagctggagtgcaatggtgcaatcttggctcactgcaaccttcacc
-tcctgggttcaagcaattctcctgcctcagcctcccaagtagctgggattacaggcgccc
-gccaccactcccggctgatttttgtatttttagtagagatgggatttcaccatcttggcc
-aagctggtcttgaactcctgaccttgtgatccacctgtcttggcctcccaaagtggtggg
-attacaggcatgagccaccgcgccccgccCAGAAACCTGTTTCTAAGCTCAGCACAGGGA
-ATAGCTCCTTTTTCAAGTTATGTCCTGATCCGGATCACTTCTTTCTACCCGTGTGCAATC
-CACCAAGCATCACCTGGGGCTCTGGTGACAGCAGCATCCCCTTCACCTTCTTTCTCTTCC
-TGCTCCACTCGGCAGCCAGagccagaccatgtccttcctctgctcaaagcctcacaaggc
-tcccagctcacttggagaaaaagccgaagtcctcacccagctatgaggcccctcccaagc
-tgatgaccctcacccctcctcacccctccagcctcgtcacctgcccagccacagcccttc
-tcccacctccactgaccccaccacactggcctccttgctgcttcttgaacactcactctg
-tgcaggctccagctcaggacttttgcatatgctgttccctctgcctggaacacatccctc
-tgacacccacagggcatttttcctctcattgcccaggtcaatgccccctctcagagaggc
-ccatccaccttacctaaatatttcctagctcattcttcctccctcccctgcttttccctc
-agagcatatatcactaccagacatcacattttacctttgatacatatgttgtgtgtgtca
-tcgcctgtctcccagagtggacttcaagaggacagaagtttgcgtctgttttgtactctg
-atggctccagtgcctggaatggtacTGATTTGCAGAATGAATGTCCAGGGGTGTGTGTGA
-AGGGTGGAGGGCAGTCACTCCCAGCCCTGCCCAGCCTCACTGTGGCCCCTCAGTCCCCTC
-TCCGGATATAGCTTTTCTCTCTGCCTGCCCCACCCTCTGACCCTCAAGGGCAGGCCAGGG
-CAGCAAGCTTGTCCCTTAGGAGGGAGGTTTCCAGCTGCAGGGCAGACCTTCCTCCTATAC
-CTCCATCCCAGGTAAGCCCAACTGGAGCTGCCCTCTCGTGGAGGGTACTCCAAGGATGAA
-GGGCCTTAGGGGAAGAGCCACCCTGAATGTCTCTGGGCAGCCAGGAACCTGCTCACAGCC
-TCCGCGACCTCATCGGGAAAGAGGCAAGACTCATGAGAGTGAATGGcccacggggagtta
-ctatgcttgtccccttttacagatgagaaaactgaggctcagagaggtgaaTCTGTCTCT
-AGGGCAGCTGGAgcctctgtcccctcctctgtaaaatgaggagaataactcctccctcct
-aaggttaccttgaggattaaatgagctaaataaagcctttaaacacagagctgtgtctgg
-cacataggaggtgctcaataaatgttgggtactcttGTTgttctgacaggtgaactaact
-ttccaaggtctcacagttagtaagtaacacaaacaaattcaaacccagatctgtctgaat
-ctaaagTGATTCCCAGAGGgggggcagtggctcacaccagcactttgggaggtcgaggca
-ggaggatcacttgtgcccaggggttcgggactagcctgggcaacgtgacaagacattgtt
-tgtctccgcaaaaaacttacaaaattagccaggcatggtggtacgtgcctgtggtcccag
-ttacttgggaggctgaggctggaggatggtttgagcctgggagttggagactgcaatgag
-ctgtgatcacaccactgcactccatcctgggtcagagagctagacctggtttcgaaaaaa
-agtcaaataaataaagaaaGTGACTCCTGTGCacaaccacaaaataataacaataacagc
-gacgacaacagcaacaacaCCTCCGAGCAGTAACAGCATTTTCCACTGCAGACGGCGGCG
-CTGAGGGTACAGGGATAAGATCATCCGGTGACAGGGATCATCATCCCTGCCTGGCATAGA
-AACCCGGACATCGGACCCTGCCCTCCCGCTGCTTCCGCAGGGACAGGGGGCAGCCAGCAG
-AGCCTCCCTCTGGGGGTGCCCCCCAATCTGGTTGCCTGGGACGGGGGCCCAGCGGGGGTG
-GAGTTGCCTGGGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGAGGCCCAGCGG
-GGGTGGAGTTGCCTGGGGGGGGGAGGCCCAGCGGGGGTGGAGTTGCCTGGGGGGGGGTGC
-CCAGCGGGGGTGGAGTTGCCTGGGGGGGGCCCAGCGGGGGTGGAGTTGCCTGTGGGGGGA
-GGCCCAGCGggggtggagttgcctggggggggcccagcgggggtggggttgcctgggggg
-ggaggcccagcgggggtggagttgcctgggggggggaggcccagcgggggtggagttgcc
-tgggggggggtgcccagcgggggtggagttgcctggggggggcccagcgggggtggagtt
-gcctgtggtggggggccagcgggggtgaagttgcctggggggggccagcgggggtggagt
-tgcctgggggggggccagcgggggtggagttgcctgtgggggggggccagcgggggtgga
-gttgcctggggggggccagcgggggtggagttgcctggggggggCCAGCGGGGGTGGAGC
-ACCCTGGACGGCCCCGCGGAGCCCCCTGCGGGAGGCGAGGGCGGCCCTCGGGCTCTGGAA
-GGGGCCGCGCGGCCTGGAAGACATTACACGGCTGTCGGGCGGGGGGCGGCGCTCGCAGTT
-CCGGAGGGGGGTCCCGGCGGCGGACGCGCGGGGTGAGGGGACCGCCCGGCCACAGAGCGC
-GCTTTGTTCTGCGCCGCCCCCGGGAGCTGGAACCAATGGATTGGCGGCAGCTGAGGTCAT
-CTGTCAGGCGGAGCCGGGGGGTCAGGCCCGGGGAAGGGGCCGCGAGGGAGGGCGGCGCGC
-GTGGGCCGGCGGGGTGCGGGTGGacgagccgggggccctgcggcaggtggctacgctgct
-tcggtcctcagtttacccgtctgtccaacaggaaagatcatttctgccctgtccacctct
-gggggctaatgtgagagttaaaGTAGGGGAGCTACAGTGATGATGATGATGACGACGGAG
-GATGACAGCCTTCCCCTAATCGCAGTCTCTACTTCGGGTACCATAGAAGTGCTAAGTCAG
-GGGCTGGACGCAAATGTGCTTTGTAGCCTATAGTGCGTGCCTGTGTGGGAAGCGGGATGG
-ATGTTTCACCCCACCCTCTTTCAGCCCAGGGAAGTCAGTGGCTCCCCCTGATTGCCTGCC
-TTGACCCTGGGTGCCAGGCTTGGTCTGCCTTCTCCAGGGGTGATAGGTGCAGCTGCCCAA
-GCCTGAGCCCAGGAACCCATTGCAGCCTGTCCTTGGAGCCTTCTGGTCCAGGGTAGGGCG
-GGACTGGAGTGACCCAGATAGGTGGGGTTTTTTTTTCTGACTGGGGGTAGGTCAGGGTCT
-CAAGGCTCTCCTTTGCCTCCTACAAAAGGACAGCCCTttctttcatcaattcactcattc
-attcattcaCACTGCCACCTGCCTGTGCCTCACAGTTCCCATCCATGAGATAATGAGGCT
-TCTAAACATTTGATACAGGGTCCCCCAGGGAAGGAGATCATCAAATACAGGGAGGCCCAG
-AAACGGCCCAAAATGCGTGTGTGTGTATTTTTGGGGAAAGGACTCATGGCTTTCTTGTGT
-TCTCAACCACGTTCATGATCCcaaacaaggctaagaagtactggttggagtgcagggaag
-gcaaataggctcccaaactccaccggagagggtggcacttggaacaaccactttggagag
-caatttgccagggtcttagaagatggaaatgggcgtatgcatcagccaggcagctccact
-cctgggtatacagttgaaagaGCAGGGTGATGGCGGGGGCCGTTCGCAGCCGCAAATAAC
-TGTAAGCCCCCATGCTTCCATGAACATGATCACGACTAACAAACGGCTACATTCACAGCC
-TGGAACACCACGCAGCGGTGAAAAAGAATGAGATAGACTCAGCTGGAatttattcatttg
-acagatattgattaacactactatcttttaggcactgttcttagcactgaacctacagtg
-ataaacaagacagattgagtcctgccttaagaacgtacatttggccaggcacggtggctc
-acacctgtaatcccagcactttgggaggccaatatgggaggactgcttgaggccgggagt
-tgaaaatcagcctgataaacattgtgagacctcatctctacaaaagaaaaataaaaaatt
-agctgggtgtggtgacacacacctgtaatcccagctactcaggaggctaagtgggaggat
-tgcttgaacccagaagttggaggctgcagtgagccacgatggtgccactgcatactccag
-cctgggtggtagagcaagatcctgtcttaaaaaaaaaaacaaaaaaagcagacacagaag
-aaaatttgggagagtgtgacaaatgccatgaagaaaataaaactggataaagggacggaa
-tgatgggggagggggctgttttagacgctatggttgggaaggcccctgaagaagtgacat
-ttgggcacagaccagaatgagggagactgggagacaggcacgCACGAATGGGATGGACGG
-CTGGGGCACAGTGCCAAGGGAGAAAAGCAATCCACAAAACAGCGCAAAAAAAGAAAACAT
-TTTTTACTTAAACGCACATTCATTACTATTAAATTAGATAAGAGTCTGGGAGGCTCTATG
-CCAAATTCATAAAGGTAACTGTCCCAAGAGGGCAAAGGAATAATCAGGACTAGGTTTTGT
-GGTGGGCTTCCGCTTGCCTCTAATACtttaaatttctaatatttaattatttaacatttt
-aatattttaatGTTTAAACGGTAAATATggctgaatgcagtggctcatgcctgtaatatc
-atactttgggaggccaaggcgggaggatcacttgaggccaggagttggagaccaaccacc
-ccaggcaacagagcaagacctggtctctataaaacgttaaaaacaaaattagctgggtgt
-ggtggtgcctgtagtcctagctactcgggaggctgaggcaggaggatggcttgagcccag
-gagtttgaggttgcagtgagctataatcagaacattgcgtgccagctttggtaacagagc
-aaaaccccatcacaaacaaacgaacaaaCACATTTTAAAAAGTAAATATACTTATATAAA
-ACTTGTGAAATggctgggcatggtggctcacacctgtaatcccagtgcctcgggaggccg
-aggcggacagatcacctgaggccaagagttcaaggtcagcctggccaacatggtgaaacc
-ccatttctactaaaacaacaacaaCAAAAAGCCTTGTGAAATGAAAACAAAAAAAAAAAA
-AAAAAGGAAATTTAAATCTACCACGGTCAAGTGGGTGGGTTCCAGGGCGGTGAAGGCACA
-TACTGCCTTTCACTGGAGCCAAGTTCCTGGGGGCAGAGGTTTTTTTGGGGAGGGACACTG
-TAGGTCATGGtagcccagccagtaggagcccagaagcttcttggaggaggtaccaccttt
-gctgagcctgaGATTCTCTGGCCCAGCACCCCCAGTATAGACAGGAATGGGTAGACATGT
-GCGCAAGGTTACAGAACAAGAGCTGATAAATAGAACCTGAACTCCAGACTCATCCCGGCT
-GAACCCGGGTTAACTATCCCGCCTCTTTCAGCCCTGCGCGTGCATCCAGCCCCTTCCCAC
-AGCTGTAGCTCTTGCAGGCCAGAGGGACGGCCCTGCCGCGGGGGCCGGAGAGCAGCGCCA
-CCTGCTGCTGTAAGAGGGAAACGCAACTTCCGGCTACCAGCAGGTTACACCCTTTAAAAC
-CCAGCTCCTCTTCCTTAAATGATCAAGCAGTACCCCTCTACTCCGAATCTGTTCTGCACC
-TCCTTCGCAGTGCCTGGCAGGGCCCTTAGCGCTGTCTGGTTGGGTCTTCTCTGCAAGAAG
-GAAAAGTTGTTTCAGGAGGGGGCGACCATCTTCACTCTCATTCCAGCCCAGCGGGCACAG
-GAGGAGTTTACTCACAGAAGACAGGGGcacctcaccttcgctacaaaccttaggggtaca
-caatccatttgacagcctggaagaagtccccagggaagggacagaaccgcccaaggtcac
-acagttaatgagtagacaagctgggGGGAATGAGTAGACTCATTCCACTGGGGATGGAAG
-TGGGGAAGTCACCGTATTTGAAAATAACTGACGCAGTTATTagcagctcttagcatgtgg
-tccctgaacagcagcatcagcaacatctgggaacttgttagaaaagcaaattatcaggcc
-ctgccccaactcgcctcaatcagaaactctggggggccgggggcagtggccatgtctgta
-atcccagcactttgggaagctgaggcgggagaatcgcttgtgcccaggagtttaggacca
-gcccagagaacacagcaaaaccctgtctctacaaaaaaatgagaagggcgcacctgtagt
-cccagctactcaggaggttgacgtgggaggatcacttaagccccgggaggtcaaggctgc
-agtgagtcatgatcgtgccactgcactccagcctgggtgacagggcatgaccctgtctca
-aaaaaaaaagaaagtgggggtggggcccagcaatctggtatttagcaaacAAGCTTGAGA
-CCCTGAACCATTGGTCTAAAGGAATTGCACACCCCCCCTTTTTTTTTTTAAAttaaataa
-acttttattttggaatgatactagatttacagagaagttgcagagatagtacaaagagtt
-cctgtatacccttcacccagcctaccccaaggtcaacatcttacatcaccatggtacatc
-tgtcaaaaccaagagactgaaattggtatattaactaaaattcagacttttttcagattt
-ccaattttcccactaatgtcctgtttttgttccaagacccaatccaggatgccacattgc
-actGAAGACACTCTCCCTTTTCAATTCTATTACTGGTCACCTCAGTCAACTTTCCCGGGG
-AAAGAGAATGCATGGGAAAAGCTCTTGTCCTTATTATTGAACTGGAGAAACTGAGGCTTA
-AAAGTGCCGAGTGACCAAGTTCCCTTAGAGGGCAGTGAGAACAAGGCCTGCCTTACTCTG
-TTCCCTTTCCCCAGGGACTCTTGGTTTTCAGAAGCCCCTCTGGAATGTCCTACCTGGCCT
-AACCCCATACCAGCAGTGCAGACAAGGAGGCACTCCTACTACAGTGGGTCCAGCCCATGG
-AGAGACTCACTTCCTGCCCCAACACCTCTTCCCCTAGACCCTGAGGGCCAGGACAATGTC
-TTAGTGCCTTCCAACTTGGCAGAGTGAGGCCCCATGAGACAGAGAGAAAGGGGGAAGAGG
-GAAATACCTTTATCCAAATAAATACCCATCCAAAATTATTTGTGATAGGTGAAAAATGGC
-CACAAGCTctttgtggttcccctcatcaagacatgtagtctgtttctcatcccttgaatc
-tgggtaaagccttgtgatttgctctgaccaaaagaacttagcagaagtgacactgtccta
-gtcccagttccaggccaagaactcaagaagtctttcagcttctactctcactctctttgg
-aatcctgaagccatcatgtgaataagcctgagctagcctgctggagaggccacatggagg
-agaaccaagcaattccagccaacagcctgtcacctgccaggcaagtgagtaaggctatcc
-tagaccatccaggcccagctgaggtaacagctgaccttagctccatgagggatcccaggt
-gtgagcagcagaactgccctgttgagcccagcccaaattgccaacccataggattgtggg
-aaaatacagggtttgtttctagctgccaagtttggggatggtttgttacacagcaaaagc
-taactggtacaCAattctgcatttctctcttggtaatgggatcccagttttattgcagga
-ggcagtgtgccagtctcagtagatggaacacgattggtctattcagccatgacaattctg
-ttccctgctgtcttagctttgtttgcagctagaggtgcaatggtagctggctcgggccaa
-gggcatctaagtgaagatatgcagagggagagagcaggaaacagacttctgacgaggttt
-tactttctgatagaaggtgacgggtccagctagtttggcccttcctcttcctccacccct
-ccttccttgaacgcagacatgattcttggggatacagcagccatcttgggaccatgaagt
-aacgagcactgagattaaggcaaaaggatccaagacgtgacccctaccttcgtggagttg
-ttgaaccaataccattagccacccatctccagaatccatgctatgtggaaaaacaatctt
-ctgtttgtttaaaccactgcaatcaaggttttcctttccttgcagctgaatgtagtccAT
-ATAAGAGGTTACATAGACAAAAATGCAGAGGGATCCTTGTCCTTGGGAATTTGGAGCCGG
-CAGCACGTGgctcttcaagcccatctctgttctccttctcggtaatgcttcaagggtaag
-gccatgatcctattgtcacagaggtgggaactggggctcccacactgtacagtgagtcca
-aggccttgtagctggtgagaggggtgcccagagtcagacccTCTCGCCAGGTGCAAAGAG
-AATGCACCCCTGCTATCCCTTCTGCATGGCCCAGCCTGCTGGAGGCCAGGTGTGTCTTCT
-GGGCTCTTGAAGGTGGCAGCAGGTGCCAAGGAGGCTGCTACTGCAAGTCTGGTGTGGATG
-CTCCCAGGTACACCCTTAGGTCTGAGAGAGTGGACTGGACAAGCTTGGCGGGGATGGTCT
-CTCGCTGCAGTTGCTGGTAGGCCGCGTAGCGGTGGCAGCCCCCAAAGGAGTAGAAGTAGT
-CACCTCCCTGGGCCCCTTTGATCCAGAGGACATCGATGGGGGGCACGCTGTCTGGGTCCT
-CCTGGGGAGAAGAGGCACAGAGTCAATGGACATGGTACAAGGCTTGAGAGTTTGTAAAGC
-AGACTTTGTCCACTTGTGCTGAGCTCCTTATAAGGTGATCACACTGGACTACTGTGAGAG
-ACAACTGTTAATTATCAGGAATTTTGTGAGCTGTTCgacatcaccttgtagcttgaaaat
-cagccatgggagagtatttacaccagagaaatggacagatgctacaaatcagggatttct
-cccacacatgtatcagcacaccacATGCACactatccagctggccctgttgtagaccctg
-ggaatacggtacagctggaatgtgactgaatcaggccctggcttcaaggggctccagtct
-agtggggcagatggaacaagaagtaaatattagagtgacaaatgctataatgacaataac
-acaggtgacaggacagagatgggGTCCACGAGGCCTCTCTGAGGTAAGAATGAAGCAGAG
-TACTTGGAAAGATAGAGAAGTGGggccgggcacggtggctcatgcctgtaatcccagaac
-tttgggaggccgaggcgggtggatcacctgaggtcaggagtttgagaccagcctggccaa
-aatggcacaaccctgtctctactaaaaatacaaaaattagctgggcatggtggtgtatgc
-ctgtaatcacagttactcaggaggctgaggcaggagaatcacttgaacccaggaggcgga
-ggttgcagtgagctgagatcgcaccattgcactccagcctcggcgatggaacgagaatcc
-atctcaaaaaaaaaaaaaaaagagagaaGTGGAATAGTTTCGATTAAgagctcaactgcc
-tgggttcaaatctagctctgctgcttaacagctatgtgatcttgggcaattcatcttttt
-gtgcctcagttgccccatctatcaaattggatggagataacagatccatctcatagaatt
-tttgggttaaatgggttaatatatataaagcacttcaaaccatgcttggcacacggaaag
-tgctcagtaatgtatgctgtgtatGACCTgagggaagaacgttccatgcaaagggaacag
-caaacgcaaaggacttgaaaccagagcacgttcactgtgtaggaggcacagcaaggagtt
-cactagagtggactccagggctccaggaatggtcagaaaggccagcaggagccagatggt
-gcaggtctgcttctgagagcagtgggtgggccctggagtgttggcaacaggggagggtga
-catgatctgatgcatgttctagaaagttgtcacaggagaacagacttggcagggtggaca
-gggcacagggctggaaggcagaggggaggcctctgcaggtattcagcagaagatgctggt
-ctggatgatggtgtggtggggacagggagaggtagacaggtttgggacacatttacgggg
-caggcccaaggggtctggcagaaggggtgaatccaagggcaagagaaaagggagaatcta
-agttgacttcctgttaggggcccacacagccaggtggagagtaggtcatcctctaaacag
-ggaaagtctggggcaggacgggtgcagggtagagCACTCTGGGGAGACCCCATTAAGTGT
-GAGCGGCGTGGAAGGCCTCCTGCTGCTGGTCCACGGGTTCTCTCTCATGATTCCACAAAT
-GATTATTCAgcagtaaggtgcagcagtcacaagcctgagctctggaacctggcacacctg
-actttggatctcagctcctctccacagcagctggggcacacagccctctgaacaccattc
-ctcacctgtaaactgggaataaaacatcctagagggctgctgatgaagagtcagtgagct
-gatgcCTACCGGGCATTAGTGGAGCACTAAGGAGGGCAGCCGTGCCAGGCAGGCCTTGTG
-CCGGGTACTGGAGGCACGATGGTGgatggccagaatgatggctcccaaagatgtccacgc
-ccgaatgcttctgaatgtgttaccttacatgggagaagggacttggcagacagaattaag
-gtaaggatcctgagatgcggaaattatccaaggttatctagatgggtcgaatgccattat
-cagggtccttaaaactggaagaggaagtagaggaagaggtcagagtgatgcgatgtgaga
-aggccttggcctgatgttgctggctttgaagacagaggaagaggccataagccaagcagt
-gtgggtggcgtctggaagctgggaaaggcgaggaaatggattctcccctagagcctacag
-aaagtagtgcagccctgcttggtgttagcccagtaagacccattttggacttctgaccat
-aaataaacctgtgttgttttaagccatcaactttgtggtaacttacagtggccccagaaa
-actaatacaGGTGTATGTAAGCAAAGGCAGAGCTGGTTCTGGCCCTCAGAGCCTACGGTT
-CTAGCACGGAAGGCAGGTGTCTAGACAGGACGTTAAAAGCCAGTGGGctgtaatcccagc
-actttgggaggccgaggtgggcagatcgcttgaggtctggagtttcagaccagcctggcc
-aacagggtgaaaccccatctctactaaaaatacaaaaattagccaggcgtggtggtgggc
-gcctgtaatcccagctacttgggaggctgaggcaggagaatggcttgaacccgggaggcg
-gaggttgcagtgagccaagatcgtgccactgcactccagccagggtgacagacccagaca
-acgtcttaaaaaaaaaaaaaaaaaGCCAGTGAGATCAGAGCTATGCAGGTGGGCACACAG
-GTGGCTGCAGGCCCACAGAAGCTCCTAACCCGGTAGGGATGGTCAGGGAAGATCCTGACA
-CTGAGACAGGAAGACCGAGAAAGAGTGAGAAACGACAAGGCAGAGATAGAAGAGGTTCTC
-AACGGGAGAAAAAGCCCAGTGGTGGGACAGGGCATGCATGGCAGATCCCTTCCCATCTCA
-gccaggcgccgtgctactattgtggcaacagataagatgggacgaggtcctcgcccttgt
-ggagtgcacgtgaggtcaggaagacagaaaataaaatgcaacacaaatagatgtataata
-taatttctggtggacataagtggtatcctgaaaaacatctcgggctaaggggagagctag
-agaggccagtgactctgaccaagggtgatcaaggaggcagagagctgaaccaggcagggg
-agcaggccctgtggttgtctggggaagtggctccaggcagtgaggacactagtgtaaaTA
-CTAGGACTGAAAGTTATCGGGGGTGGCTGTAGAGGTGCTGGGTGGGGCTTAGGGATCTCA
-TGTGCTCACCTTCCAAGGGTCGGGGGAAGGGGACACAACGTTATGTAGGCCTAACCTGAC
-ACCTGTTCTTGCGGGGCCCCCAAGTTCCTGCCAGAATCACTCCGGTATTCTTAACACCCT
-TCCTCAGTGGTGGAGCTGACCCTTGACCTCTCCCACTTCCCATTCAGACAAGGGCCTCCC
-AGCAGATATGACACACCTAGTCCCACTGTCACTGACTGTCACAGCCATGAGAGCCCACGG
-CTTATCTCCGGgtagtgcggtggccatgtgctgggcagtggggcccaggctgcctgggtg
-tgaattccagccgtgtcactttttaagcgcctgatcttagtcaagccgctgaaatcttcc
-ctgcctcagttctcgtctgcaaaagagccactatctacctcctagggttggcataggaaa
-ctgagggacttcctgcagttcctggaccactgcaagcactAGCGTTATAAGCGTTATCAT
-CACTactttaattatctcgcccaattccctccttgctcaagtgaggaaacagaggcccag
-agaggcccagctacttgctcaaggtcacacagcagaggctgagctccggctgggcccgga
-accagtccgtctcgcgtccaTCGCAGCGACCTCCCTCCTCCGGCAACCTCCCTCCTCCGA
-AGCCCTCCCTCCGGTTGGCTGGACTCCCCGAGGCCTCACCCGGATCGTGTCCACGAGGCT
-CTGCACCTTGGCGGGGTCCAACACGGACGGCAGCGGCCGGATGAGCACGCTCAGCGGCAC
-GTTGTGCACCGCGGCGATGCGGCCCGAGTGGATGCTgccgccctgcgcgccgccgctcgg
-cccgggcccctcgggcgccccccgacccgcgccggcccTGCCCAGCGTTCCTCCTGCACG
-CAGCCCCATCGTCGCCGCCGCCGCGGGACTCGCCGCCTCCCCCCGGCCTTAACTCCGGCC
-GGGCCATACCATTccgcgcggccgggggggggggcccgTGCCAGGGCAGCGCGCGTTTCT
-CCCCCGACCCCGCCGCGGTCCGGCCTCGACCCCGCGGTCCCCAGCCCGACTCCGGCTCCG
-CTCGCCAGGTGCCGCCAGACTCGCGCGGGGCTCAGGCTCTCCACCGGGGGGCGCCTCTCG
-CCTCCCCTGCGCCGCGCGGCGTCCGGGGAGTGGAAACGCCCGGGCGGGCTGACTCAGGGT
-GAGTTTGCAGGTCGCGGGGCGGGAGGGGCGCGGGTGACGCACCGGCCGGGCCGACTTAgg
-ccgcgggggcgggggcgggggAGAGCGCGGCGGACCTGCCCAGCCAGGGTGAGTCGGCAA
-AGCCCGCGGTGCGCTGCTGCCCCGCTGCTGGGGTTCCTAGCCAGCGAGGTTATGATCCCC
-ACCAGCGGTTCCACTTCCAGTCTGGCGCCGGCtgtgtctggagtcgttccgaacattttg
-cacgtgtattaacgtatctgaacctcaaaacaaccctgcaaggaaggtatgactgttatt
-cccattttacagaagaggagactgagacacaggtttaagtgatgtacccaagatcacgga
-actagtaagtggccgaatccgcgttcaaatccagacggtctggctccagagtccgccttc
-tACCCCACCGTTGGCTGCCTTGGTTCAGCAACAGTGACTGTCACACGGAGCCCTCAGGAG
-TCGCGCTGACAATGGGTGGGCCCTGCCTTCAAGTTCCACACTGTCTGTTTGTGTCATTAC
-AACACTACTGGAAGTAGGTGCAGTTATAGACCCGCTGTTCAAGGTCAGCTGAAATGAAAG
-TCAGGTCACACGAGTCCAAACTGTGGGGCCACTTAACCACCAACTCCAAGCAGGAAGGTG
-GACGATCCCAGACTCGGTCGAAGACAAGCATGTCTGGTTTGCTTGTCTTCCTTCTCAACC
-TGAATGGCACGAACATGGAGAAATGCATACTTACCCTGCCAGCTGGAGAAAACTGGAGAC
-GAAGGAGGGAGCCAGGAGTTTCTACTTTGccttccaccagttgctgacactttctgaacc
-ccgtctgtaaaatgaagtcatgctgcccatcactcaaagttgtgtgaattgagagagtgc
-tcatagtgctctgtgaattgcataacaTCCATTTTGCTGTTGAAGATCATTTATTTTGGG
-TTCTTAGTCTCTCACAAAACCTTAGAACACTGACACCAAGACTCCAGCCTTTCCCTTTCG
-AAACATAATTCCCGTGCGCACCTAAATGATACTTTATTTCAAGAAGTAGAACTGACACCC
-ACACCTCAGCCCCAGAATTATTCAGAATTAGAGAATTTCATCAAGAGGGAAGTTATCCCT
-TCTAAAACATCTTCCTCATTACAGGAAGTAAGAATGGCAGGATAACAGTTTCTAGAGTGG
-AAAAGTGGAGCTCTGGCCTGATTCTATCATCATGGTGTACCCAGGGAGGCCTCATTTCCT
-GGTATCAAATTCTCTGTGTTAAGATATCTATGGcccaattcaaaatggcttaagcaataa
-gaaggtttgttttctcacataataaaatgtttggaggtaggtatgtccaaggttggtaaa
-gaggcagttgaacaatgtgaccaaagactccagttctggctgggcccggtggctcacacc
-tgtaatcccagcactttggaaggctgaggcaggcgaatcacttgaggccaggagttcgag
-accagcctagccaacatagtgaaaccctgtctctaccaaaagtacaaaaattaggcaggc
-atggtggcgcgcgcctgtagtcccagttactccagaggctgagacaggagaattgcttga
-aaccgagaggcagaggttgcagtgagctgagatcatgccgttgcactacagcctgggtga
-gagagtgagactctctcagaaaaaaaagaccctggttctgtctatccttttgtgccatca
-tccttggtgttctgttatcctgcggtgtgcccctcatggtcccaagatggctactgtagc
-tcaaaacatcacatcattacatgcgaatgtccacaagtggaagttaggacatcccttcga
-gcctctttttaagagtgaagaaaccttcccTGGCTGGATGCAGTGGctcacaccttctga
-ccttccactcctcaagccccggagtcaactctagtcacactggcctccttgctgtgcctc
-ttccacagcgaatgtgtcctggcctcagaccctttacatttgctgttccctgtgcatgga
-acgctcttccctcaggtCATACatagcatacattactgagtgctctccatgtgcccagca
-tggtttgatgcgctttacatatattaactcatggaacctaacagctttatgagacgagtc
-tgttatctccatccccatttgatagatggggCATCCCTGTGGGAGCTCTGCCCATTCCAG
-AGGTGCCAGGCCATTCACTAATGGGGGCAGGAGCCGGTGAGTAAATGCCAGTCTTGTGCT
-GTCACAGGTGGACGATTCAGAGAGGTGTTCTAGACCATTCAGATCTTTCTGGAACCTTCT
-CAGAGACCAGAAGTACTCAGCCCTATTGCTACAACTGACTTCACTAACACACCctctgtc
-ccattcctcccaccccttacttctgcttccagggatcacctcccacataaacgacttaca
-ctcaagtctcagacttgctatcagggaaccaaaactaaaacaAAAGGGAAACTTGATACT
-GGGTCATCCCCTATAGTTCTGTACCTtgcctgggttaaaattgcactattttattagatg
-tgtgaccttgggccagtcacctgtctgtgcctgtttcctaatctgtaaaacggacataat
-gtcacctaattcacaggggtgttggaagagtgaagagagatggtgttaggtgaggtcctt
-aaaacagtgcacaacgcattataagtgctcaataaatgtttgctgttTGATTGCATTTTA
-AATTGTAACAGAGCTTGAACGTCTCTCCGTGTCTTCACTTTCAGACTAGGCTTGAtgtat
-tagtcaagacttttgtttgcaagtgacagaaagccaaagtgaattagcttaatgaaaatg
-gggatgcttggctattcccgtgactgaGGTGAAGCGGAGCCTCAGGGGAAAGTAAGTTGA
-GAGATTTCTTTTCTCTGCCCTCACTCAGCAGAGGGATTATCTCTACATGTCAGGAACATG
-ACTGTCAACAGCgatgatatttggctttaaataagggaaacctgacaacagagacttcat
-acaacttaaagtgtttcctctttaaaaaaaaaaacagtcgaggtaggaagtccatggctg
-ggatggctgctccatggtcactagtggcataggccctttctatcttgccgctccatcatt
-ttccagcagagttttcattctcagggtcacctcctattcaggattgctgctgaagtgcca
-gccgtctcatccaaattccaccctggaaagaggtggagaaatggaaaggcaaaggatatg
-acccctccccttttgaggatgctatctcagaagttttgtataacacttccccttgcatgt
-cattgactagaaattggtcacacggccacccctggctgcaagggcagctggatatgttgt
-cttcatccgtagcggtaatgtgctgagctaaaactggagttctcttactaaggaagaata
-gagattgataagtagctagcaatcggggccacaGCTCTCAAGTTACAGGCCTTATGGCAC
-AGAGACAGGGAGAGAGAGAAAATTTCCAAGTTCTAGTCAGATGCCTACATATGGACAAGC
-CAGCTATGGCATTGGGGGACACAGACTTTCTTAAAAGCATAAGCCACCATTATTTATTAT
-AATGACTTAAAGGTAAGGAGttcatttaaagataattactggtcacctgctattggctag
-gctagacccaggggatttagtgatcagcaaaaagacactaccaatctctgcattatgagg
-cttacagtgtagtggaggattcagataatgaccaaataatcacactggttaatggaaagt
-atacattggtagtgggtgctgcaaaagaaTGGCATGTGGTTCTGAGGAAGtgttttagtc
-ctttttggctgccatagcaataccatagactgggtggtttataaacaacagaactttgtc
-tcttacagttttaggggctgagaaatccaagatcaaggtgACtttgtatctccccaacat
-tcatatgttgaaatcccaacctccaggtgatggtgttgggaggtgggcctttgggaagtg
-attatgtcacggggttcatgggggtagagccctcatgaatgagattagtgtcctttttct
-ttcttttgagacagggtctcactttgtcacccaggctggagtgcagtagaactgtaaaga
-aaacttctaatttttaaaatcaggaacctgataataactaaggaatcctgaacagagtgt
-tggtagaaatacagatgaaaaaggccatttggatgaggaaatgaggaagatattattgga
-caatggaaaaaaggccatgttgttataaaatggcaaagaacttggctgaattatgtccac
-gttctagtgttttataggaggtagaacttgtgagcaatgaaacggaatatttagctaaag
-ctatttctaagcaaagtgttgaagctgtggcttggctcctcctgactgcttatagtaaaa
-tagaagcagaaagaaatgagttaaagatgtgacttttaagcgaataggaagcaaaacgta
-aagatttgaaaaattttcagcctatccatattgcaaagaatgagaaagaatgtttgggag
-aaaacaccaTAGTCTCCATAAGGAGACTGTAATGGTGATGAACGTAATCAGCCatcccag
-caggaaaactgccgtcttgaattgaaggggaaggagatgggaagggatgaggaaggaAAG
-CTGTCTGACTTCTTGGATTTTTCAGGACAAGACCAGAGTGCAAactcttcaagacaaggg
-aagaatgaccctgaaggcaattcagagatcatcaaggctatctcCTTGCTTTCAAAAGTC
-GGGAGCATTGCCTTGCATTCAGCAGGTTAGAGGGCCTCTGTCCAAAGCCATGGAGGAAGA
-GCTGCCCAGAGCTGTTGGTGTGGGGCTACCCAGAGCCCTGGGAACATGACTTCTGCGGGA
-TAGAGCTGGAGGGACAGGACCACCACCCCAGAGGGTACAGAGGGTGGGACCACCACCATT
-GTGGATCTGGAAGGCTGcctcagtgggcctggaagcagagcatttaatgaactaaaaatg
-atttttcttgagccttaagatctcatggagtttgccttgtagtttggatgtaatttggat
-ctgctattcctttcttctttcctatttctcccttttggaatggtctatcctatgcctgtc
-tcaccattgtattttggaagcagataacttgcttgatttcacaggctcaccgctggagaa
-caatttgccccaggatgcatcacaccttgagtctcagccatatctgacttagatgacact
-tagataataaaactttggattttagacttcagagttaatgctggaatgagttaaggcttt
-tggggctgttggaatgtaaggaatgaatgtattttgcatgtgagaaggatgtgaatttgg
-cggggGATGGGGACGGAGGCAGAAtgctatagactgaatgtttgtgttcctccaaaattc
-atgttaaaatcctaacccccagtatgatggtattaggaggtgggcttttgggaggCACGT
-TAAGGCCAGTTCATTTCATGGTCACAAGATGACATGCTTTTCTGTTCACACTGGAGGGGA
-AGAGGAACTGGACTTCCTTTCCTCTTAAGAAAAAGGAagcagcaaagttttccataccct
-tccagcaaccctctccttaagtctcattggccagaattgggtcatgtgcccatttctgaa
-cGATGGGAGATGTTAGTATTAGACCAGTAAAGACTACCTCTTAAGCTGATGTTCAGTCCC
-CAGATTGCGTGGTTGCTAATCCAGGAGAGAGGGGTGGGGTGGAATGGTTATTGGACCCAC
-ATAACTGGGCTGGATATGGCTGATGGAGACCCAGCATTCTTTCCCACCTCCCTCTAGGGT
-GCCTTCTAGATTGCCTAGTTGGAGAGTTAAAAACTCTATTTCTCAGATCTCTTTGCAGCA
-AAGATACTAACAGGGAATTAAGTTCTACCAGTTAGATGTACTTTCATGAGACATGGATGG
-CAGAGGTGGGCCGGGGCCATCTTCCATCTTTTGACTCTTGCTACTGTCAAGATTGTCTTG
-GAGGTGTTAAGATTTTCTGTAGCAGTGTTCCAGCATTGTGCCACCAGCACAGTGGGAGAC
-AGGAGATAGTTATAGAGGCAGTGGCAAGGGCCTGCTGATCCCTGGCTTGCACCTATGATG
-CGGTGTTCTGTATCTCAATAGTTCCAGGGCACCTTATTGACCACCACCAACCCCCACTCC
-GCACCCTCTCCCACCACTGACTGTGGAAGAGGCAGGTGCTGTCTCAGTGGCAGCAGTTCT
-GCAGTGGGGTTCTGGGGTCCAGCAGATGGCTCACTTCAGCCCTTACACAAATTTTGTCAG
-CAGCCAATTATTGAAGTATTAAATCCTTTCTCCTTCAAAGGAATTTAATACTTGTTTATA
-AAATCCTGTCTAGAGTGGTTTCTGTTCCTGGCACCTAAAACAAACATAATGGATCCAACA
-GCCAGTCACGGGCAGTGTATGTGGGTGGTTAAGGGATGCAGCAGATGCCTGGGTTTCTCA
-AAACCCCACTGGcgaggcgggcagatcacttgaggcaaggagttcgagaccagcctggcc
-aacatggcaaaaacctgtctctactaaaaatacaaaaattggctggacgcgggggctcac
-gcctgtaatcccagaacttggagaggccgaggcgcgcggatcacaaggtcaagagatcga
-gacaatcctggccaacatggtgaaaccctgtctctaccaaaaatagaaaaattagctggg
-catggtggcacatgcctgtagtcccagctacttgggaggctgaggcaggagaattgcctg
-aacccaggaggcggaggttgcagtgagccaagctcacaccactgcagcctggcaaggcag
-cgagactccatctcaaaaaaaaaaaaaaaaaaccaaaaacaaattagccgggcgtggtgg
-cacatgcctgtaattccagctacttgggaggctgaggcaggagaactgcttgaacccaga
-aggcagaagttgcagtgagctgagattgcgtcactgcactccagcctgggtgacacagca
-agactctgtctcaaaaaaaaaaacaacaagaaaCCACTGGAGATTTTGCAGAGTTGTGGG
-GAGGTTCCCACAACTGCTGCTGTCAAAAACAGCTAGCACATTGCTCAGGATGCAGCTGCT
-TGTCCAGAGGGGTGTGAAGGGAAGGCGGACAGGCACCAGGGAGGCAGTCTACAAACTGAG
-TGCACTGCTTACACAGGAGGAAACTGACAAAGAGGCCCCAGAGGAGGCAGATTCTAGCCT
-GCAGCTTCCCCATCCCTCAAAGCATGCAGGTTATGCTTCTTGGTAAGTCTGAGTTGAGGG
-TAGGTGGCAGGGGTTGGTGGTCCCCAGTGAAGTTTTTAGTAAGGTGAGACAGATTTGTAT
-CTTGAAGGATCACTAAGGCAGCTATCGAGGATGATGGATTGGTTGCcttgaacacttttg
-gtgacaggcagctcagaagctctaggggcaagtcactgtttttggacaactttccagctg
-agccaaagtcaacctttttgcctgcttccactcactgaATATGTGACCATATATGACTAG
-GCAGAGCAGTAGGGGGTGAACTGGGGAAGATTATAGGGGTTGTAAACTGGCTGTCAACAG
-ACACATGTGGACCACAGTTTTAACTGTTTGGTGGGTGTAGTTAATTTGAATCCTATTTCT
-CTAAGGTGAGACACTCTTTCCAATTAGTCACAGGCTTCACCTTCCCTAATGTCTTAAGGC
-AACTGGCTTCACTCACATGTTATTAATCTGGTTTTTAAACCCTTATTTGAGGAGTATTAA
-GGATTGAGGATGCCTGAGAACTTGTAAATGCCAAGGGACCCTTGGGGCTGTGTGACCCTT
-GGTGGCAGCTACAGGCTGGTCAGGCTACAGAGAGGAAAATGGAGTGGAAAAGTAGTATCT
-CTCAGATGCCCTCCCCTTCGTCTCATTCCCCCCCTTCATCCCCACCCCTTGCTCCAATCA
-GAAGGTCTAGAGGCGATGGTGAGTGGCCAAAGTCCCTTTAATATCCCTGAATTGCGTTAC
-AAGTAATACTGCTGGAGGTGGGGAAGGGATGGGGGTTTGGGGGTGAGTTGGGATAGGACG
-GAGGAGGAGCGCCAAGCGCTCATACAAAATATGGCCAAAAGGCTTAGCATGCATGGAAAA
-TTATTGCTGTCAGAAGTTGCTATTTACAGGGTCAACGCCTCCATAATTGCTTCTGCTACC
-CCTCTCCCTCCCACCATCCCTGCAGCCTCCCTTCCCGCTGGGCCTGGAGCTGAGCAAAGG
-CCCATTCACCCCTCTGGAGCCCTAGGGAAGTGCCCCTGCTGCAGGGGTGCCTCCAGTCTC
-CCCCCTCTTTTGTGGCTAAGAGGAGGGGAGAGGAGGATCTGAGAGTCCAGGACTCCTGCC
-CCCAAGCTGGCTGCAGAGCAATGGGGCAGAGGCGTGTGCTTAAAGCGGAGGGGGCCAGGG
-CCCGTGCGCGTGGAGGTGTGTGCTTCGGTCCTCGCCCGGGCATGCAAAAGCGCAGCGGAG
-GAGGTAGTGGCGGCCAACGGGCGGGTGGCTGGCAGCCCGGCCCCTCTGTCCGGGAGAGTT
-GCATAGACATGGCCGGGAGAGAGCGCCCCTCCCGGGGAGCAGGCCAGAGGCCCCAGCGGG
-TCCGGGGCTCAGTCGGTCCCTGGAACCTGGGGTCCCTCGGGAAGAAGAATAAACAGGAAA
-CAAATCGAAGAGGCTCCTCTCTCCGGGCCGCCTGGAGTGGCAGGGGAAGGTTCAGGAAGG
-TGGGGACCTGCCCCACGCCTGGACCTCCTGATGCTCCCTCACCCCCCCAGTTGAGGGTCA
-GCAAGCTGCCCCCCCATTCTCGAGTCCCCTTCCTTAGCGAGTGCAGGCTCTGAAGAGGGT
-GGGTTTCTCCCGAGACGCGGGGGTGTGTGTGGTGGGGGCAGCCCTCTGTGGCCTGTGCTG
-TCCCTCTCCTTGCCTGGCTTCCTGACCTCCCAGTCCAGCTGGGGAAGCCAGACGGTCCCT
-GGGTGAGGCCAAGAGATtaaatagaataataaatagataaataaataaatacacaaataa
-ataaCTGGAAGGACCCAGCCGGATGGGGGAAGGGCATTGGCGAGGTGCTCCAGACCTCCC
-CCCAACAAGTAAGGAAGGGGATCTGTGGCCCTGGGGATGGGGGAAAGTGCTCAGAGAATC
-TGGGGGTAGGGCAGCTCCAGACTGTGGAAGCCCAGGTTGTGCCGGGGTGAGAGAGGGGTT
-ACATTAGGGGGCAGGGCCCTGAAGTGCCCCTCAAGCCCCCTCCAGGTTAGGTAGACTCAG
-AGGGGTGAGAGCTGCTAGAGAGGTGAGGGCAGCTGGAGCTGGGGCTGGGAGTGGGTGATG
-AGATCCCCATGGACTGAAGACAGTAGGAACTGTGTGTGGGAGTGGGGTGTGGGGGTGTGT
-GTGTGTGTGAATGGCCAGACCTAAGGCCTGAGCATGGATGGGATCAGGGACAGATCGGAG
-ACTTCAAGAAGGGTGAAGATTAGATCCCCAGATGGACACACTCTGGGAGATTCAGCAGAG
-GCCAGAGGGATGGTCTGGGGTTGGACTGTGGTCTCAGGGCGGCAGGGCCTGCGTCCAGGT
-GTGGATGGGGAAACTGAGGCAGGTATGGGCGTCAAGGGTATAGGTTTGCGGCTTTCATTG
-GGGGCTCCAGTAGAGGAATGGTCAGAGAGATTCAGCTGAGAAGCGAGAGAAAAGATCTAG
-AAGTTAGAAGAGCAGCGCGGGGTCTGGGAGGGAGAAATTTCCGGCTCTGGGGCGCGGGAG
-AGGTGCGGACCTGGTGCCTGAGTTGGGAGCCTTGAAGGCGCGGACAGGGGGGTCAAGGTC
-CGAGGGATGGCCGGAAAGGATGAAGTGGGTCGGGGGACGCTGGGGAAGACGGTGTGGAAG
-TGAGTCGTGGGTTTGGGGGTTGGGGAGAAAAGTTCCGGGCCGGGCCGGGGGTCCCCACGA
-GAGGGTCATGGGCAGGGAAACGCAGCCGGGGCTGGGCGAGGGCGCTGCGGGCGCAGGTAG
-GGGGCCCGGGGCGCGTGGAGAGCGAGTTCCGGGCGCGAGGGCGAGGCGGAAGGCTCAGCT
-GGCCGGGCCGGCGGGGGTCGGCGGGGGTGGCTCGGCCGCCTTGGCGCAGGCCGCCTCGCA
-GTGCTTGTGGAGGTAGGACTTGAGCGCGAAGCTCTTGTCGCACTGGCGGCAGCGGTAGTG
-CTTGAAGGCCGAGTGCGTCTGCATGTGCGCGCGCAGGTTGGAGCGGTCGGCGAAGGCCTT
-GCCGCAGTGCGCGCAGCCGAACGGCTTTTCGCCGGTGTGCGAGCGCATGTGACCCTGCAG
-CAGCCAGGGCCGCGAGAAGGCCTTGCCGCAGACGCCGCACTTGTGGCGCAGGTTGTGCGT
-GAGCAGGTGCATGGCGAGCGCGGGCATGGACACGTAGGCCTTGCCGCACGTCGGGCATTT
-GCGCGCCAGCTGGCTGTCCAGGCTGCGGTGCGTCTGCTTGTGGCGGCTCAGGTTCGACGA
-CGTGGCGTAGGTCTTGCCGCACTCGGCGCACGCGTGCCGGTGcccgccgcccgcctgcgc
-ccccgcgcgccccgcgcgccccccggcgccccccgcgtctcccgagccccccgcgtcccc
-gccgcccccgccccgccgccgccGCGAGCGCCCGTCCGAGATGAAGAAGGCGTCCATGGA
-GTAGCTGTCGGTCACTGCCGCCTCCCCTCGGAAGTAGCGCGCCGACAGGCTCGACTGCGG
-GCTTTCGGGGTCGCTGTACTCCTCCGGCGCCGCCGGCGGGTACGCGGGCTCGGCCGGGGC
-CAGCTCCAGGCCCGGCTTCTGGTCCGCATCGTAGCTGCTCGGGGGCAGGCGGTGCGGGGC
-GTACCCTGGAGGGGGCGAGAAGTGGAGGGGCGGTGAGAGGAGGCGCCGAAGAGGGTTTCC
-CGCTTTGAGCGCGTCACCCTTTGCGCCTTCCAGCTTGGCGCCCCTGTGGCAGCTCCGACA
-GTGGTGGTCTCCGACCTGCACCTCAGCTCTTCCTGTCAGGCAGCCTGGGTTCAATTCCTT
-CCTCCATCGACGGCAGTGCAAATAGCCGCCACCCCAACCCACGGAGCATGGGGCCAGCAC
-GGTtgtacagagcgtaccttcactatccagtgctcacaaccgcggagtgatggtcttata
-atacccacgctacaggtagagaaactgaggcgcagagagatgcagcagtctaaccttaca
-gtcaggaagtgatggagcccttgccagtgtgaccctgaagcccatgctgtctctattcca
-acaacatgctgccGTTGCAGCCCTGtaacttctctggatctcagttttctcatctgcaaa
-atggagcttgtgattggacacctccttccagggtcgttggaaggactgagtaaagtgacg
-ataataagcgtgtgttaagctcttactgtttgccagactctgcctcggtgctttacgcat
-gttaactctaatcgtcacagacccaaggaagtcggcactattgtaatccccatttgatgt
-gtaaggaaatgaacaaagGTGGGGGAGCATACAGTAATTGCTATATAAATGTTAGCTATT
-ATAATTATGCTTTTTACTTGCTTGGAGATAGTTTCctcccccaccacactgtgagctccc
-catggttggatctgtgtgcccagcacatgcctggctcaaagtaggtgtgcgatgaataga
-tgttgcatgaaggaatCACAATCCAGTTAGACCCACCTGCCAGGGTTGCTGAAGCATTTA
-ACAGGGGTCAAGTGTGTGGCATGTAATAGGTGCTACAGAAAGGGGACTTCCTCGCACCTG
-CTCCCAAGCCTGCTCTAGAAGTCGTCGGAAGTCCGCAGTGAGAATTCCCCTCCCCCTCCT
-CCTCCCACTTAGCTGGAGTTGGACCAGGAATCCTGTCTGCCAAGGGTTTGAGTGATTGGT
-GGGTGGGCAGGCTGGGGTCTCCCTGGGGATTCCGTAGGGGATTCTCATGGGCAGGGGCCA
-TTCTGATTTGCCTCTGCCTCCCATGGCCTAGGCTGGTCCTAGCACCTTCCCTGAGACCCT
-GGGGGCTGGGCTCCCTGGAGAGTTTCTGGCAGACAAACTTTTCATCCTGGCACTTGATGG
-GCAAGTGATTCCATTGTTCTGTGATTCCACAGAACAATGAAGGTTAGGTCCGTTTGGGAG
-GTTTCCCACCTGGGGAGTGGGATTTGACCTTCTCCTGGTGACCCCTGAGACCTGTAACCA
-CTCCTCCTTCCCTCCTCCCCTAGCCTCCTTCACTGAAGTGAGCAGGTGGAGGAGGGTTTT
-GTAAGGGGAAACAGGGTTCAAGATGTTCAGACTTTTAGCTGGGTACTCTGGTCAGCTTTC
-GTTTCCCACACAGCCTGGCTGATTCAGCctccaggcctttgcctctcatctggagtttgg
-gatggacacagggtgaagtctgtgtgcccctgaaggcaagggtgtgcccttatttttacc
-tctgtcccttcagcagccagcacagggccctctgcacacagaagtcattgtggattatgg
-aagtggatgaCTCGGAAGCGGGGGGCTCTGTGGTTGGATGTAAAGGGGGATAGTGATAGT
-GGCAATTTTTTAATCTGGGGAGAGGAGATGCCCAGCCTCTCCGCACCCTATGTCTCCCGT
-CCCATCTGCCTGTGGTCTGGAGGTCCCCCTGCTTCCCACTCCGGGAACCAGGCCTGGTAC
-TCAGGTCCCAGAACATTCAGGAGTGTTGTTTCAGACTGAGTTAAATACCCGTCAGGCACT
-CCCAGACCCCCCTCCTTCTCCTTCTGTATTTCCTCACGTTGTAATTCCTGGTGATGataa
-taatagctaatattcactgagcacttactgtgtgcaccaggctctgtgctaagtgcttcg
-ctcccatcatctcactgaatcatcacaaaactactctcatcacagataaggaaactgagg
-gacagtgtggtgatggcacttgctccaggggtggagcaaggattggaatccactgccCCC
-TTGgtttcccacatactgggaggtcctccaggagggggctgtggctgagctgttcacctc
-ccattcccagggccctagctagtgggcacttaataagtatttgtggaatgagtgaTGATG
-ATTTGCGAGGCCAGCCTCACTCCCCAGCCTAGCAGGACCTGGTATAGACAGTCCTGTTCA
-CCTGGTCTCAGGGCAGGTCTGCATCTCATGTGTCTGGGGCCATGGAAGGGGAAGGGTGGT
-TTGGTTCTCCAACACAGATTCCAGCTGAGTGCCTTTGGGTGGGTTGTGCTTCAGGTCCTT
-TTTTTTTAAAATGGGATTTATCTGGAGGGGTGACTGATCACGTAACCAGTGCTTTGAGTT
-CTATTATTAAaggatgacatattggataagagtaaaactttggtgccagacggcctggat
-tgttttggctctaccattcccagcagtgtgaccttggccaaacgatttggcctctgtgtg
-actcTACCGTTTCAGTAAGGGGTCTGCCAGTAAACAGTATATAAACAaatgataaccagc
-actctcagagcactcctgtgtcaggcactcttacaagggctttccacacatgaaagcatt
-ctacccccatgacacacaaggtggtaggtacccttttatagaagaggaaaccaaggcaca
-aggaagctaagtaacaagcctaagattgtgcagctgataagttagagccaggattccagc
-tcagTGGCTGGCACATTTTAAATCCACCACGCATGTTGGCTGTTATTATGAACAATAATA
-ACAATCTCCCCAGATGGGTTTCTGTGCTGCAGCTTTCTTGGCATCTGCCCCAACACATCG
-TGCTGCTCCTCTCTGGGCCTCTGTTTCCTCACCCGGGATGTGTAATTTCTATTTCACGTT
-CTGATGGGAAAATATCTGGTGCATAGTAGGAGCTCCATCAGTGAACCAGAGCGTTCTCCA
-TGAGGTGCTCTGCCCATGGCGCCCTCTGCTGGTGGCCCTCAGCGCTGTTGACTTTCCTCC
-TGTTGCAAGGGGCTCTTTATGAAGAAATAGGGGTGCCTTCAACAAAGGCTGCTCATTTGC
-CTAGGGAGGGCTGCAGAAGTGTCTTCAGGATAGGAATTGTGAGCCCAGACCAGACACCCA
-GTCAGTGGATTTTGGCATGGGTTGAGAGCATCCTGTGAGAGTTTGTGTGGTCATGTTAGG
-AGGAGGTGGTTctaacttgctttgtgactgtggccaggttgcttaacctttctgggcgga
-atctatacatgacaaagatggactggaatggtctaaagaccctttctgcATCATGGCTGA
-ATCAGTCCCTCCATGATGCTCTTTGTCCCCTCCACTCCCAGCTCCTCCAATTCCACCCCG
-TTTTCCTCAGATTCACAGACATCTCCctaggcaaccttgggcaagttacttaacatcttt
-ctgccacacctgtataagggagttcataataaggctgaataaatgaatgcatgtaaagtg
-cttaggacaatgcctgacacataatagctgccctcttgagctgttattattGTTACTGGT
-AGTATTCCTGTGTTTCCTGGTGATATATCCTTCTAATCTGCCAGAGAGTAGGAGATACAC
-ATGGGTGTCTTAGGCTgctgtgtgaccttgagcaaaccacctcacctctctgagcctcaA
-CCCTGGAGACTCCTTTAGGACACTAAAAGCCATACTTTAACCTAATGCATGGAACCCAGA
-CAGGTACCTTCCTCTGCCCTAAGAGTGACTATAGAAGGCTGAGATACCTATCCTGCAACT
-GACAGGGTGAGACAGGACTCTTGTTTGGGTTCCCAcagagatagggatgagctgggattc
-agagaaaagagaatctcaggtgagatctctcatcctagcccttgaattcaggccgtagcc
-atgtgaccttgggtaagtcgcataacttatctgggctcaaatcctccatttgaggaatgt
-ggaccagaggcacccctgtcatgtagggatatggggaggGCCCAGAAATACTTTGGAGAT
-GTGCACATGTCACCTGGAAATGACTTTGGTTTTCCCTGCCCAAGAGTCTTGATATTTTAG
-ACTGAAGGTCCAGAATCTGTCTTTTTAAAAATCGGTACTCAAAGGAGTGGTGAAAGGGAA
-ATTTATGAGAACTAAGGTGCTGGGCCCTCTGCAGACACTGTCTCATTTAGCTGCCTGACC
-CCCTGCGGGGATGGAGGGGGATGTGTAACAAATACTGCTACTGCTACTGCTGGTGCTTCC
-AACTAGCACCAGCCTCCCTGTGAGCCAGACATTGCCCTGTGCCCAgaggcccagagaggg
-gagaggatttgcccaaggtcactgagagggaggcggcaggtttgaaaccctccaaggcct
-gtgttttttccaaaacaccaGAGAGGGCATGGAGACTTGCTGGGGAAGAGATCTTCAATT
-GGTAGGGGAAGGGGTGGTGCGTTTCCTCAAACACTCCCTAGTTAGCCTGTGGTGGGGTGG
-GTGGGGGCACGGGGTGGTGGGGGCATGGAGAAGCTGTTGTGGAAAATGCTTCAGCCTCTT
-GTAAGTATTTGTAAATCATACTTAATaacagtaatgcctatcacttactgagcacttact
-tggtgcaaggcatcctgctaaatgctttgtgcacattagctcatgtctaaggtcacttcc
-ctccatgcccttgttctgcagaagctgaagcccagacaaaggccttgacccacctcaggt
-cacaaaacaagttctcatcagagctgggttggcctccttttctttcctttttttcagtcc
-aggactcctttccccagtctctcccagACTCCCAAGGTGCCAAACTTTCTCCAGGGAATT
-CCTAGCCTCAGCCTCACCTCTCTGTCCTAAAATGGGCAGAAAAAGACAGGGGCCTGGTGG
-GGGGCCAGCTTCCCCGGCGGCCCACTTTCCTGAGGAGGGCTGGGCCCTGCTGGGTGGTAG
-GGGCTGGAGGAGCTGCTGTATGGGTATATTTAGAGCTGCTTCTTGCTGTGCCAGGGCCTC
-GGGCCTCGAGAATCAGCTCCAGCCAGCTGAGCAGAAAGCCAGGTCTGTCAGCAGCAAAGC
-GGGATAAAAATAGTTTCTCCTGTCTGCTCACAGAGCTGGGCAAAGGGGCTGGGTACCTCC
-CCCTCCCCTTATTATAGCATCTTTGTTAGCGGTTCCCTGGGCACTGGACCAGAAATGACA
-CCCACCTCCTCCAAAGGCCTGGCAGCTGGTACATCTGCCCACGGGGAGGAGGTCCCTGTG
-CCCAAATGAGCAGGGGACAGAGTGAGGTCTGGCCCAACATGACCAACGCTGCATGGCTTG
-GGGCTGATGCCCACTGACCCAGGCCCAAGGAACTTTGAGAGAATTTCAAGGCTTTTCCCC
-ACCACCCCCATCTCTTGGAATTCCCCACATTCTGGTCTTTCCTGACTGTGACCCAATTCC
-TGTGGCCTACAGGGAGGTCCAGAGCTCTGCAGGAATCAATAGGAAAGATTTTTCAGGGGG
-GTATGGAGATGAGAGTGAGTGGCTCAGGGTCTTCATTTGCCCAGCCTGGGTTCGTAGAGT
-TGCCTCCTGCTCCCTCGGGGGGGATCTCCAGTGGGCCCTTTCTGGGCCTCGTTCCGGAGA
-CTGGGTGTGTTGTGCAGTGCTCCACCTCTTCCCCCGGCCTCCTACTTTCTGCTCTGCCGC
-CTCTCTCTCTAGAAGGGTGCACTCAGAGGGCCCATTCCAAACCCCTCCCTATCCAAAGGC
-TGGCCTGGCAGTAGACGCTTCACTTCAGGGGAGTCCACAGCTGGGAAAGAGACCAAGAGG
-CCCGAGGGACCCCATCTCTCCCGGCAGAGGGCCTCCAGGCTGTGGGGGCCCCTAAAACCT
-GTGGATGTAGCACCCACTAGGGAGGTGTGACAGGGTGCACCGTTTATGCTCTtgtgactt
-tgggcaagtcacggcctctctgtgacctcagttttgcctctgtaggttggagtgaatCCT
-CCCCTGCCCCCCGCTGCCCTTTGCCCACTGTGGATTTGTGTGGCCAGAGAGTGCCTTTGG
-GATGTGTAGATTGCTGTACTGACATAAGGGACTTGGTGTACTCTCTGGCCCTCCTTCAGC
-AATCAAAGACTGAGACTATCTAAAGTGTGGAAGCTCAGCTCAGGACCCTCACGTCCCTCT
-CGTAACCCCAGGCTTTAGAGGAAATCAGGGGTTCCCAGATTCCATATCTCACATGGGCCT
-CATCATTCCACACTTCCACTGAGCCCTGTTAATTCACAGGAATATTAGATTTCTGGGTCC
-Ctagaaggtcaaagctgaaagagatcatattcaaccgtttgatattatgaaaggaaaaca
-gaggctgggaggagaggggagactaggccaaggccacacagaaggctaatggtgagtcta
-agacttgaactcagCCCAGCCTTGAGAGCGGATCTGGACAATGACCTTGGACTGGAAACT
-GGGCCTGAATCTTGATTCTGGACCCAGCACTTTGCCCTGGACCTGTTCATAGGTATTGAA
-ATTTGAAATTGGACATGGATTTGTCCTGGATAGCAGACCTGGACCTATAACCTCAGACAC
-TGACCTTGGACCTAGTCCTTGGACCTGGTCCTATACCTGAAGTTTGACGTAGGCATTGGA
-CTTGGACCTCAGATCTGTACTTGGATGTTGGACTGAATGTTGGACCTTGACCTAGACTTT
-GAACCTGGGCCTCTGACATGTCTTTAACCTGGACCTTGGACCTGGACCAAGGCCAAGTTA
-CCAGGGAAAGGGGTGGTTAGAGAAGACTCAGATGGGTCTGCTGTGTGTCCATGGGCACCT
-CCCCAGCCTTCTCTGTGCTTGCTCTTCCAAAAGACTGGGGAAGCCCTTTTGCATTGCTGC
-TCCCCAGAGGAGCTTTCTGAGGTGTGGAATGGATGTGTGGCAGCTGGGGACATTGGGCCG
-GGCTCCCGGGCTTGGCCTGGAGCGACTACCCGGCACCATCAGAGGGAGTGAGAGGAAGTG
-GGCGCTGGTTTAATGTGGTCAGCTAGATAAGCCCATGGGTAGAAGTAGGAGAGTTTCCTC
-AGCTTGCTGGGGGAGGCTTAATGTAGCTGCAGAGGGCAGACAACTGTGTTATTGGATTGG
-CATTGATCCCTCATCTGCCTGGGTTGGATGCACTCTGAGAGGGCAGGAGGGCAGGACAGG
-GCGGGGATGCAGAGGAAGGGGGGCCTGGCTCCAAGCTGGGGTTCGGAGTTAAGGTGGAGG
-GGAGGCAGACACTCCAGAAGATATTCTTGGCAGGGGCCCACAGAGACCACTGACATGCAT
-GTGGGTGGGCCACCTTCTTTGGGGTGGCTGAGAGTCCCAGTATCCTTCAGATGGGGGCCC
-CGGTCTGTGGGGAGGGCCTGGTGGAGTTGGAGGGTGAGGTTAGCAGAGGGTTAGGATGAT
-GTAAGTTGGCATCTCCCAGAAAGACTGAGTCTGTGCTCAGAATCACCCAGGGGAGAAGAG
-GGGAAGGGAAAGCAGTGGAGGAGCAAGAGAGGCATCTTACTTGAGGGGACAATGAAATTA
-GATCTATTCCCACTTATCAGGGAGCTCTGCAGAGAGACCTGGTGCTTTCTTCATTTGAGG
-GGCTCCCCTTCCCTGTTTAGGAGTTCTGTGGGCTTGGGGGGACCCTGGAGCACAGACAGA
-CTTGCTGCACCCTCTGTTCTGCCTGGCGGTAGAGGCTGAAAGGGAGTAGGAAGGCAAAGA
-AGAGCATTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgcgcgcgtgcgtgt
-gtgtgtatgGAGGAGGAGCAGGAGTCCTCCAGGAATTCTCCAGCATTCTCAGGCATTCCC
-AGAGCTGGGGTACACCTCTTTAATTTGGGGTTCTGCATCTTTATCAGCTAGGAGCTTGTG
-GTTTCTCTGACCTCCACATTCACAGGCTCCCCCAACCCCTGCTCCCCCGACCCAGGTTTC
-CCTCCCGCCAGCCTCATCCTGACCCTGCAGCCCGAGCTGCAGGAATGGCTTGTAAGAAGA
-TCTTTCTAATAACTGGAACTATCTCCAGCCCCAGGCCTCCcccgccctccctccctccct
-ctctccttccctccctcccttgcttctcctccctccctctcctcatcttccccccctccT
-CTCTTTCTCCTTGTTTACCCAGCACACTTACACACGCTGAGAGAGAAAAACGTCGGCTCA
-GCAATTTTTCACACTTCCCTCAAATGCTCAGCAAGGTTATTTCCGGCAGAGCGGAGACAA
-CGGGCCACCAGGAGCCGGCGGGCTCTCAGCAGACCCCCAGCACCCTCCACCCGCCCAGGG
-AATAAGGGATCCCTCACTGCCCAGTCTGGCCGCACCCCAGGGAGGGAAGAGGCCCCTGAA
-AACAAGACAAGGCAGACTTTGTATTTCCCAGTCATACCTAGGCTTGGTCTCTGGCACTGA
-CCGTCCACTGCAGACACTGCCAAGGTGGCCAGGCCAGGGTGCCTGTCCTCACTATGGGGT
-AGCCTACAGAGACCAAAGCCAAGAAAAGTGCCCGATCCCAGAAATGCCGCTACCCTCAGC
-CAGGTGGCGTATGTTCAGTGGAGCCCTAAGGAAACCCTGACAGTGGCCTCCCAGCATCCT
-GTTAGACCCCTGTGCAGGCATCTCCAGTGCCTGACATTCCATAGTTGACCTtcacagaag
-ctgagcttgtcaaagttggaaggatgcttagtttatgccatcaaaactctttcactgctg
-gggaggctgaggaccagagaagggaaggcacttgcccaaggtcacacagcatgtgagaga
-tctagagcccaggcctccaaatttcaggccaggtttctggctatcagcacagccTCAGGA
-TTCCTGAGAGGTGAGGGAGTTGGTCTGGAGACCCATGGGGAAGGGGACAAAGACAGAGGT
-GGTTCTAGGGTGTTAAACCCGGTGGAACCTCTGCAGAAACACCCTGCTGGTGGCTCTGCA
-CCCGCCCTGCTTCCCACTATTCACTCAGGGGCTCCTTTCAAAGCTTTTTTTTGGACTGAA
-TTCAAGGCAAGGCATTCTCTTGCCTCCCTCCTGAGGAACAGCCTGCAGTTTTGGCTGTGC
-ATGGGAAATTCTCTGGGCTTCTCTGGGTTTCCTCAGCTGGCCTGGGGACAGGACCAACGG
-GGCTTCAGGGGGTGGAATCCCAGAGCTTTGTGTCAGTGTCAGTCCCTTAAGAGATCCATA
-TCCCAAGCTTGCAGATATTTCAGTTTCTACCAGCTTTGAGCGCACACTCTCCAGCTTTGG
-CATGGCCCCAGGTCCACCCTCTGTCCTGCCAGCCCTCAGCCCTGCTCAGCCATGTCCCTG
-GGCTTCTGACCTCCACCTCAAGAGGCCCTGTGATCAAGAAAAGAGGACAGTAGAATAAGG
-GACATGTGGGCAGAGGAGAAGGGGTTTCTGTTAAGGGTCTGGGGGATGCCAGTGGATGAG
-GGGCTGTAGCTGTATCCCTGATCACTCTGTAACTTCTTTGACCTTGATGAGGTCACAAAG
-CCCTTTGCCCAGCACTCTCTCTCTCTCTACCTGGTGTGGCAGAGTGATGGAATGTGGGTG
-AAGTGCTTGGAAATCCCAGAGGTGGAAGCCCCCATCCTCCCAGGCTCCTGTCTTTGCCAT
-CTCAGTTCCCCCCTCATCCTCAGTCCTTTCTTTTCTCctctctcaatctccctctttctc
-tctctctctttccccacccccatctctctctctctctctctctcacacacacacacacac
-acacacacacacacacacacacacaACCCAAAGCTGCCACATGTGATGTCAGATCTCTCA
-CTACCAAAGGGACACCTCCTCTTCAGACACCTGCCCTGGTGGGGGCCATCAGGGGAGAAC
-CCCTTTGTGATCCCCTTGGTGGAGGATGGGATCCACAGAAGCAGTCTCCACTTTCCCCTG
-CCTTCCAGAGATCACCCCCTTCTGCACCTGAATGACTTCTCTTGTTCCTCAAACCCTTGT
-CCCTGCAGGAACTTGTTCTGAGAAGAGATGGAgtgtgtgtgtgtgtgtgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtatgtgtAGTGAGGAGGGGGCTTACGAGGAGCAGCAGGGTTGGTT
-CTGGAGGGGGTTGAGAAGCTGGGGATGGGGAAGGAGTGCAATCCAGGGGACCAGGAGCCA
-CTTTGGGGGAACCCCTCCCAGAAATCCTCTCTTTCTTGCAGTCCCCAGGACAGGCCCAGC
-CTTTGGCAGGCATGTGGCTGAGGGTAACAAAAGAGTTATTGAGAGAGGGGGTCTGAGAGC
-ACTTGTGTGACATCGGCAGGGGAGCAGGTTTGAAGGGAGGGAGGGCGCCCCCAGCCACCC
-CCAGGGAACCAACCCTGTCTCTCCAGGGACTGAACATCCAGGGCTCTTTACCTTCCCCCT
-TCCCGGGCAGCCAGCTTCTCTTCCTCAACGGGGGAGAGGGAACCCTCAAAGTGCCTTGTG
-CCTCAGTGCCCAGCGCTGGCCTTTCACGAGCAGCCCCGTCTGTGTTCTCTTGCCACCCCC
-TCACTCTAGCCCTATTTGAGGGCCACAACTTTCAAAGTCCCGGCTGGCGCGTGGCTGCGG
-GATGGGCCGACCCCGCGACTTTCCCTTTGTACGACCTAGCCCCTGCCCCGCCCGCACGGC
-CCTTGGAAAGCCCGGGAGGAGCCCACGGCCAGAGAGATCTCCTCCCGGGGGTTTCCTGTC
-GCACGCGCCCCTCCTCGTGGCCCAAGCTGGGGAGGGCCCCAGCTCCCCTCGCCTCTTCTC
-CCAACCCCCCGCCCCCGCCGGGTCCCACTCACCGTTGTCCCCGGGAGGCCCCCGGGCGCC
-AGGCAGCACGTAGGCTGTCTCCAAGGGGTGGTAGGTGGGGGCCGGCACCCCGCTGCACTG
-GAAGCCGTCCCCTTTGATCTTCTTTACCAGGAAGGAgcgcggcatggcgcggccggcgcg
-gggctcggtgcggggaggcggccggccgggcgcgATCGGCTGTGTCCGCGCGGGTTTTCA
-GCACTGGACAGCTCCCAGCGGGCTGGAGCGCGGGAGGCCGCTCGGAGCCGGCACCGGTGG
-CGGCGGCCCCGGCTCGGGCTCGGGCTTGGCGGCGGCGGCGCGCAGACAGGGGATCGCGGG
-AGCTGCGCTCAGCACTCCGGCTGCCGGCTTTATATGGGACGCAGGCTGGAGATCAGGTGG
-TCCCCTAGCAATGGAACCGCTCGGCGCTCTAATCCATCAAATGTCCCCCAGGACAATCGC
-TCCGCACACGTTCCCCTGAACCGGCGGCGGTGGGGGCAGGCCCGGAGCaggcaggagggg
-agaaagtgagggcgagaaaggcgcagagacagagagggacggagaaaggggagtgagggg
-ggcggggagaagaagagagactcggagaaagacagagacatacagggaaagagagacgca
-cacgctgagagaggtagaaatagaagcagagagaccaagataaggacaaaaagacacaag
-agagaaacagagagagaagaaagacagagaTGGAGAGAAGTAGCAACACACACACACCCA
-CGGGAGGAAAAGAGAAATCCAGGCACACAAAAAGGAAACCCCCCCAGGGATGCAAAGAAA
-GGGAAAGAAAAGTGCAAAAGAGAGGGGGAAGCCGAGGGGAACGGAGGGAAAGCGGTCCCG
-AGCAGGCGGGGTTCAGGCACATGGGGCCGCAGGGAAGGGGATGCAGAGGAAAGAGTGCGC
-ACTGGCCAGCGGCCACCCTCCCGCCTCCAGTCCTCTCCCTCTCCCCCAGTTCTGAAGTGG
-CCAGGGTGGACGCTCAGCTTTCACTAGAGTAAGTCTCCCCTCCCCCCTGCTCGGGCTCCC
-ACTGGAGCCCCCTGTTGGGTTTGGGGTTCAACTTTCTTCTTCCAGAACTGGTGGGGGGAG
-CAAGTCCCCCACGCCGATGCCTGGCCTTGCTCGGTTGGTCCTGTTCCGGTGCCTAGCTCA
-GGCGGGCGCTGCAAGAGGAAGTGAAAATCGTCCAGTAATTAATTTTCCTGCTGCCGGGGG
-GTGGTGGTTTTGACACATCCGAGGCAGTGTCTTTCCCTGAAGCGGGGAGCAGACAATAGA
-GACACGTGGACTgggaagggagaggggggaagggagggggagcgggGCTCCTGCTGGAAC
-TCTTTGCAGGTCAGCTCCTTTGTCTCTAAAAGGATCTGAGCAGACCCGCCACCCCCAGTC
-CGACCCAAACCTGGGGGAGCCCCCATATCTTGGCAGGACCAAGGAGCAGGAGAGCTCAGC
-CCCCTGCCCAGAGGGTGCTGGGCAAAGCCCCATGGTGGCGGACCTGCTTTAGCAAGTGTG
-GGATGGCCAGTGCACAAGAGTCCCAGAATCAGACTCTAGGAATTCCAGGCTCTCGCTGTC
-AATGGAATTCTGGTTATGAGATGCAAGGCTGGTGGAGTGGGGATGTCCTTTTGGGACTGG
-GTCATCCAATACCAGTTTGCAGGCTAAGACCTAGAGAGGGCTTGGAGGTGCTTGAGGTCA
-TGCAGTGAGTCAGCAGCAATTGCCAGAGACCTCAGTGGCCTCTGGGCACCACTGAATCAG
-GGCCTATCATGGTCCTTGAGGTGTAGCCCAGAAGTCTCAGAATAAAACTGGGGCCCCTcg
-tggtggttcaagcctgtaatcccagcattttgggaggctgaggcaggaggatcacttgag
-gtcaggagtttgagaccagcctgggcaacatagtgagaccttgtctctacaaatagttaa
-aaaaaaaaaaaaaattagccaggtgtggtggtgcacacatgtggccttagctacttggga
-ggatgtggtgggaggatcgcttgggcctgggagttcgaggctgcagtgagctgtaatggc
-accactgcgctccagcctggatgaaagagcgagaccctatctccaaaataataataataa
-taataataaGTTAGAGTTTCCAATGCAGGATCTGTTGGCCTTGAATATTTTCAAAAGACA
-TAAAGATGCAAGGATGTGGAAGCAGAAGGTTTGCCATTGAATTTGCCCTGTATGGTTTTA
-GATTGTTTTCCCTGACCGAAATAAGGAATTAAGGCAGTTTACTCCCTATATATAAACATT
-GAAAAACATTGCAGGTCCAAAACAATGGGGGCCCCTGATCTTGCCAAGGCCCTGCATGGT
-CTAGAGGTCCCCCACCATCTTTCCTGTTGCATTGCCTCATATCTTGCCCATGGGAAtttt
-ttttttttttgagatggagtttcgctctcgttgtccaggctggagtgcaatggcgcgatc
-acagcccactgcaacctccgcctcccaggttcaagtgattctcctgtctcagcctcctga
-atagctgggattacagggtgcgccaccatgcctggctaattttttgtctttttatcagag
-acggggtttcaccatgttgcccaTGGGACTTTTTTAAACCTCTGTCACTGAGAGTTGAAG
-TGACCACACCCTTGACTCATGGCACGcccatgcattctctgctccagccataggtgccta
-ctggtgctttgggcttgcagctctcttgacctgtataccatttccactgcccagagtcct
-tccctgcacttcaccctaggaaacccctacttgttctcaagactcagccgaggggtcact
-tcctccaggaggtgtccctgacttccatcattgcagactgggccaactcacccactggtc
-cctgagcttcatgaggacaaagactctgtcccatgtatggcttaacacACTCTTAACAGT
-GTGCATGAGGGTCttctagctcccctacttattagccataggtccttggacaagttactc
-aaccgctctgtgcctcaatttccccacttataaaatgggaataataattgtcactaccta
-agtgttgttgggagtgttagaagagttactacatataaagggcttggaatggtgactggc
-atatggtaggagttcaatGCTTGAGGGTTCTATATATGCAGTTTTGCCTGTAGCATGCAG
-CGCTCATTTGTTACATGTTAGTGGGATTctgtggaatgagtggtgaactaggcatctctg
-gtccctgctttcttgcagctgatcttgcagctgtccattcattgagtggatggacaccaa
-gcaagaaaatccttaaatcaacaatatattttcagatagttgaccagtgctgtgaggaac
-ataaaacagggtgagatgatggagagtgatggtgcctttaggcagggtgaccagcaaggg
-tctcctgggagaggtggcatgtgcacctagacttgagccagccatggaaggagcccagga
-aagagtgctccagccagaggcttcacaagttcaaaggctctgaggcaggaatgagcttga
-gcagctgaggacagcaagaaggGAAGGAAGATGAGTTCAACATGTTAGCAGGGCCAGACC
-CAGAGATTACTCCATAAATCCCAaatgaatgagtgaatgaaagaatgaatgaTTGTAGGG
-GTGAGATTCAGCCTATAACTATAGCTTACAACTGTGACTAAGTAGACCTATTGGTTGGAG
-AATAACTTTTCACTGTTTACATAGAGGAAGTTGCTTATTTGTTCAGTCATTGACAATTGT
-GGTATAGCCATATTTTTTAGTTTGTGCTGGGTACTTGGATCTCTGTCCTCTAGGGGTGCC
-TAGTTCACTGTGGGTAAATAAGGCAAGTGGGTGTCATCTAGCTCACCTCCACCTGCCTGA
-TGGTTCTACCTCTCCAACCTCACATCTAAGAGATGGCAAAACGGATCCCAGAGTCCTTAA
-AAAGGAATATAGGTCACAGCAACTTTTGACAGAGCTGGGACTGGACTGTTCTCACTGGGC
-AAGATAGTGATCCACCCCTTAACTGATCAAAGGAAGCCCCACAGAAATGGTGTATTAATA
-GGTCCTGCAGCCCACTAGTGTCGGGTTGAGGATAGAACCCCAGGTCTCTGACCACAGGTT
-GGAAGGTGGTGTGGGTGCATTTAGCATATGAGAAGAAGCCTTGAGCCCTGAAGATGAGGT
-TCCAAAATACCTTCAGAGGGGAGGAGGCCTTAAGTATGGATGAAATACACAATGGCCAGC
-AGAATTTCATCACTAGGACACCAGGAAGGGCCTTCTGTCCCCCAAACCTCCCCCCACCCC
-AGCTTACTGGTTTcaggaagttcactgtggggaattaatttctctaagtcacatgaaata
-aggaaataacttttattcccaaggatgttcgctgcagcatcagagatggtaataaaaacc
-ctgggttggagaaagcaaggagagggttgtgaagaagacgttcactccatgtagtattct
-gcagccattaaaaattctcatttggggagaaaagctcataaaatgtgttaagtgaggggt
-gcagaatacagaaacctctcacagcacgttcacaaccatgaaccaaaacaaaaataaaca
-cacacAAAAGAGTGAAATAAGGGTCTGGAACTATGGGGTTTCCCTCTCCCTTCTTTTTGT
-GTTTTCCAAAAAGATCATAAAATATTTCAGTTCagccaggtgcagtggctcacgcctgta
-atcccagtactttgggaggctgaggcgggtggatcacgaggtcaagagattgagaccatc
-ctggccaacattgtgaaaccccatctctactaaaaatacaaaaattagttgggcatggtg
-gcgcgcgactgtagtgtcagctactagggaggctgaggcaggagaatctcttgaacccag
-gaggtggaagttgcagtgagctgagatcgcgccactgcactccagccttgtgacagagca
-agactccatctcaggaaaaaaaaaaTAGTTCAACAAATATTTATCTTGAGCACTTGCTAA
-CTGTCACTTACTTCCAAATAGAAGAAATGCTGAAGTTTAGTAAACCATGTCAGGATATTC
-ACTATTCATTCTTCTGACTTTTGGGAAGTTGGCATTGTGAATTTCCCCAGTGGCAATAAT
-AATTATTAGTACATCGCCAGCAACATTACAGAGCCACCCCACAGGCCTGGCAGTGTGCTA
-AGCACTTTCCCTTTGAAGAAGGTGACCTTgcctggggctttagattgagggatttggagt
-cagcctattttcagtttaaattcctgctctgccatttcccgactgtgtaattctctgtgc
-ctccattttctcatctgtaaaatgggtgtataaattgggcctgtctcacaaggttgcagt
-gaggattaaatgataatataggcatcaagtgcttagagcagtgcctggcacacaataact
-tgataaatgttgacagttgctatttacatatcctcacttatctaagccttaccatggcct
-catgggagaaggtgctgttattGAAATGACTGGTTCATGGCTACATAGTCACTGTACAGA
-GGAGCTAAAGAGTGTCCCATGTCTTCATGGCCTACTGCCTTCCTGCCCAGGAGCCCCAGG
-TCTTGGCATAATAGGTCTAGCTGGCTGCAGGCTTAGCCCTCTCTGGCCTACCTCGTCTGC
-TCTGGCATCTTCCATATTTCAACTGTGCCCTGCCCATCAGGAAGAAGGGCAGTTCCCAGG
-GTCTAGGTGTGAGTCTCAGGGCTGTGTGACCCTAGGTGGCTGGCAGAGCCACCCTGGGCC
-TCACCCTGCACATCCATAAAGAGGGGTTGGGGCATCCTATGATTCACTGGCTTCACTCTA
-TGGGGTCAGgaaggagcactgacctgggagtcaggagcccagttccagccctgcttctgc
-tccctttgccctcccctttgggccccagctttcttgtctgtcaaatgggaatgggacaag
-atggtccctgagctgctgtccagACCCGGTAATGGAATTCTGTATGAATTCCAAGGAGGA
-GAGTAGCCACAAATGCATCCGCTCCACGCTGATGGGGCTCTCTCTCCGGTAAGCTTCACT
-TACTCTGCCATTTCTCCAGTGTATTTTATCAGACCCACCTCCTCTGAGCCAAAGAAAAGA
-GGGTAGGAGCAGGATGAAACAAACTCACAGCTCTGTTCATTCAGGCTCATCACAGAGATG
-ACTTGCCCAAGGGCATGTGGCAGGTCCTCTGAAATTTGAGGAAGGCTGTGTTTTCTTTtg
-tgtcactttggtcctccgggaagcagatgtgaaaatggaggtgtaagtgtaagagattta
-ttgagaaaacaccgtgagaaatggaggagagccttcagagagggatgcaggtctgatact
-gtgaaaggagaggtggaataaagaaagattggggaagaggagcctcaggccatggtgcag
-gtctaaggaagtcctagccaacccaacagggagctcctgtgcaaagatttcctgtagagg
-agtcccgtgctcgacagaagggcagaccctagtttcccaccatgctcagtcatcagccgg
-cctgtcctggaagagtggctgtgctgacaactatggcagattgcaaaggtgttgcagctg
-gaggctctcagtgactgtagtccagagaagatctgagtggcacctccctaaggctgccac
-aTGTTTTTCTTTATTCATTtaatagacacttacagaactctgggccatgtgccagttact
-gatctatgcactttacaaatattaccttagttaatccttaccctcgccttttgagacaga
-tggtatttttagccccattttatagagggagaaactgagcacaaagaggttaagtaagtt
-gcccaaggtttcacagccagtaggtgataagccacaaatccaacccaggcaagctgcttg
-gaggctctgctctgaccactccaccacactgCCTCCTCTCCAGCTGCAAATGCCTTGGTG
-GCAATTTCTGGGACCATTTCCATTTTCATTTTTCATTGGCTCAGGACCTCACAGCCTTAA
-CAGGAAGGGGCCTACTGTGGTGGCTGGGGGCATAGCAGGGTCCCAGCTCCCCCTGAAGCT
-TCTAccttgctccctcaaagacttccacctcaaagcctttgcatatattgttcccactgc
-ccagagcactcttccacccccttccttgcctaggtaacccctcctcCCATCGCTCCCTTG
-CCTGACCCCAGGATCTAGCCCAGGATAGGGGTGATATGTAGTGGAAAGGAGCTagttgac
-atttattgagcacttattatgtgctaggagccaagtccagccctttacatagattgcctc
-acttaaccatcataacaacctgtgagtgtggcccatggctatccccattttacagatgag
-gaaaccaaggctcacagatgcaaggtgacttgcccaaggagacccagctaggaatcagtg
-gtgtcagtatttaaaccaggctgcctggctacaaagtcctgatcttAAACCATGAGTCCT
-TCCCTCTAAGAGGGCAAAAGATACCAATGCTAGGGTGGGTAGGTGAGGGCCCTCCAAAGA
-ATGTCCCTCCCCTtccccctgccagggctgacagctccttgagtgggattccggatctgc
-tccattcattgccgcacctccatcgtctacccagagccgggtaaatagtaagtgctcagt
-aaatacatcaattgaatgaataaaCTAATGAGTGAAAAACCTTCTTGCGACCCGCAGTCA
-CCTTGGTCCCCTTTGACCAGAGCCAGGTTGACGTGTCAACCGTCAAGATATCCCTCTGTT
-TTGGGTGATAATTAGATTTCTATCTTGACTGTTACAGACATTGGTATTCCTCCATTAAAA
-TGTCTTTCTTTCAggccaggtccggtggctcacgcctgtaatcccaacactctggggggc
-cgaggcgggtggatcacctgagttcaggagttcgagaccagactggccaacatggtgaaa
-ccctgtctctactaaaaatacaaaaatcagctgggcatgatggggcgtgcctgtgatccc
-agctactcaggaggctgaggcatgagaatcgcttgaacctgggaggaggaggttgcagtg
-agccaagactgcgccactgcactccagcctaggtgatggagtgagactctgtcttaaaaa
-aaaaaaaaaaagaaagaaagaaaaGAAAAAAAGTCTTTCTTTCAAAGTTGGAGACATCCC
-TAAACATTCTAACTCCTGTCCCTGACAAGGTCCCATCTTAAGCAGGTCTCTGAAACCTCT
-GGAAGAAGGAATTGGCTATCAGGAGTCTGATCACCAGGCTGCCTGCGGGGTCAGGGTATT
-TGGGGTGGGCCTCTGGCATGGTTTAGCGGTGGGCTGGCCAAAAGCCCCTAGACAAGAGCC
-CACCATTCAAGCAAGTGGGATAACTCAGCGTTTGGGCCTGGGTCACCCTGAGCCAAGttt
-tattttttatttttattttgtagaggtagggtcttgctctcatccaggctgtagtgcagt
-gttgtgatcatggcttatggcagccttgaactcctggggtcaagtgatcctcctccctca
-gcctcctgagcagctgggactacaggtgcatgccaccatgccctggctaatttttaaact
-ctttgtagagatgggattttgctatacttcccagactggtctcaaactcttggcctcaag
-tgatcctcacgcctcggcctcctaaagtgctgggattatagatgtgagccactgtacctg
-gctgagccaaattttaatcctggctctgcctcttcaagctggttggccctgggcaagtta
-ctttgcctctttgcagctctatttcatctctgtaaacagaggccagtgggagcacctgct
-aagtagggctgtAGGGGGCTTCATGTATAGTCAGCCCTTGGTAAGTGGGAGCTCTActtg
-aagggcctttgagataacagcattgtctcctccccacccccatttgacagttgtggaacc
-tgaggcatgggacagggaaatgctttccctggaacattcaggctccctgccaagtcagga
-tgggcttcctcactccaaggtggcctctctTGCCTCCCTCTCTTCCCCACCAGCCGAGCT
-CAGAACCATGCCTGGGAGATGCTGAGGTGGCAATGGAGCTGCAGAGTTGGCATTTCCAGG
-CTCCCAGGACTCCTGGCACAGAGGAATCAACCCCTCTCAGCAGCCCCGGCTCTGCCTCCT
-GCTCCCTGCCTCTGCTCATATACCAGCTGGGACTCATCAGCTTCTAGAGAAAGCCAGGAG
-GTGGCCCAGGTGCATGGAGGCAGGGGGCTGTCAATATTGACCTGTGCTTGACCGCAGACT
-TTGCCAGTGGACAGGTTGCTAAGGAGTCAGAATGTCCACATGCCCCTAGTGCTCATCTTC
-CTAGCCTCCCATCTCACCTAGCTGCAGAGGGGGAGGGGgagcacaagagttgaaagcgtg
-gatgatctgggttcacttcggctgcttaccaacaagttacccagcctggggaagtttccc
-atcctctttttatctcagtttcttcaactgttacatgaggatgttgatactaatggctta
-tcttgaagggcagatggaagatgagtgaggtgtttgcacacagccagtgctcaataatat
-tggccattgttAATTCTGAGGCTATCCTCTTACAGTGACCTCTTGGGCCTTTCAGCCCCA
-AGGAGCCTCTCCTCTCTCTGACTCCTGTGGCTCTGTCAAGATCCTGCAATGAAATTCTTC
-TGGAACCCTATCCAGATGGTGAACTCTTCAAGGGCGGGGACCCCATACAGGTGCCCCATT
-ATAGGCCTGGTACACAACAGGTGCTCATGAAAAGGCCTGCTTGGCTGTGATACtacatga
-acttacagaaccctcacaactacttttggaggcatatgacatgattatccccttttataa
-aaagggggacagtgggtaacatcgaggtgaagaaattgcccaagcagctgggcgcgatgg
-ctcacgcctatagtcccaacactttgggaggctgaggtgggtggatcatttgaggccagg
-agttcaaggccagcctggccaacatggcgaaaccccatctctgctacaaatacaaataca
-aataataataataataataataataataataataataataataataatagccaggcatgc
-tggcatgcacctgtaatcccagctactgaggctgaggcatgagaatcatttgaaccggga
-ggcagaggtaagagggagccaagatcgggccactgcattccatcctgggtgacagagtaa
-gactctgtctcaagaaacaaacaaacaacaaacaaacaacaacaacaaagaaaaagaaag
-aaaaaaattgcccaggggctcacagctataaatctgcagatacttattgtgacctgccat
-gtgccagacactgtgctaagagctggggacacagcaatgaacaagacagagacctgctct
-catgtggcttacatcctgctgagccaagagtaggtagatatgccaatgtcctgtcataga
-aagcaccaggcagggaaatgggcaaagacagagagaggtggaggccgggcgcggtggctc
-acgcctgtaatcccagcactttgggaggccgaggcgggcggatcacgaggtcaggagatt
-gagaccatcctggctaacacggtgaaaccccgtctctactaaaaatacaaaaaatcagcc
-gggcgtggtagcaggcgcctgtaatctcagctactcgggaggctgaggcaggagaatggc
-gtgaacccgggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgg
-gcgacagagatagactccatctcaaaaaaaaaaaaaaaaagagaggtggagcgagagcca
-ttttagatagggtagtcaaggaagacctctctgaggaggtgacttttgtgtagagtccag
-aatgCAGCAAGTGCTGGGTGAAGCCTCAGGAAATCTGCTTTAGCATTGCTGTGGCAGATT
-CAGGGTGGAATCCAGGAGATCCCAGGACTGGTGGTGCCTAGAGCCCAGTTGGCTAGATCA
-ACTTCAGTGTGGATAAATGACTCCCCTGCCCCCGCGAACTTACCTTCCTGGAGCAGTTAA
-AAGAACGgggcacatgacctagattctctgagcttcacttttctcatctgtaaaatgggg
-attgaaaagcatagcttacaattctgagagctgagttgattaacagagatggtccatgta
-aaatgctgggctcagagctgggcTGACCAGATTCACCTAGTCCTTGGTGGCTGGAGTGGG
-CAGGTGACCTTCCTTTTGGCCGTCCAGCACCCTCCAACTCCTTGCTTCTGAGACCTCACC
-TCCCACTCATGGTATCATTGCTGGCCTTCCCAGCCCCGTCTTGGCCAGGGGGCAGTCAAG
-TGACCCAGATTAGCCTCGTGccattctgttgagggtgtggtggttgctacattgagtgtc
-cagaggtagcaaggactaaagtcctggtgtcagcatccagcgttggtgtcagcagcacga
-gctctgtcttggggacccgtggtgtcagcagtgaagtctccctcaggccagggctttggt
-ctgatttgagggcttttttcttttctggatatgaagcctgtaagccttctgaccctcctg
-gagatcctTCAGGCACGTCTGCAGCCATGGGTCCTGGATGATTTAGCAGCTCACGCCATT
-GTCTGGAAACTCCACTGGTACTATTTTTCTCATGTTCAGCTCTCTGTGCACAGACTCCAT
-CCTTCTGGCCCAGATGGCCCCTTGGGGATATGCACATACCAAGTTCTTTCCACTGTCCTC
-ACTTtgagggcaggggcctgggttgttcatttttgtgtccccagatcctagcacagagcg
-gctcagaggaaaggctcaatgcatgtccatggtgtcaacaaatCAGTGGcacaggataca
-gtttccacacatctccccatcctggttgcttccccgaaccattttccagtctgtcagtgt
-tcttctgaatatacaggatccagaactgagcacaaaactccagaaataggtgaatggagc
-tgagcagaatgaaactgtcacctcccttaccgtagataccggacttctaattacatgacc
-agacatttaataagcttgttttgTTTCCCTGGGTGGCATATATCAAGCTACTAGCAAGCG
-TTTTGTTTTCATGGTCCTCTACCCACATATTGTTGCAAAACCTCACTTTACTGCCCTTCT
-CCCTTAATTTCACGCTTATAATAGTATTGCCCCTCTCTCACTTCCcaggaatgccaagtc
-gattacagctcaagagcccaatcttgactggtccgtagcctggaacatggtgctgagata
-gatgctgtaactgagtttgggctcactgagaaagactgctgcaattgattaacgatgtct
-gccaAGCTGTGTAAAGTGAAGTAATGTCATTCCCTATCACAAGtcctaacctggggtcca
-tggaaagaatttagttggtctgtcattaacttggatagggaaagtattacatctttaatt
-tcattaacctctatctgaaacttatcattccttcaattatgaatgcaggcaacagaccac
-agtggtattagcaggacctgtgactttgtcaccaatagaaatcacagattttttaaaatg
-acattacagacgttccgcatatcttgaaatataatttacatgcactgtgacttggaaatg
-ataagttattTGCTAAGTactcatttacttactcacatttgtttagcgcctagtcaatag
-cctggtgacgtgccaggacctgggctgggtgctataggcaaaaggcagatgcgtaaggct
-cagtccttccctcaaaagagaaaagcagacagtgacaatggaaaggcttgatgctttgat
-gggggaagtacctgaggcccccaacccagcccagagggatcagggaaggcttcccagagg
-aagtggcctctcagatgagtaggaagtaaccagacccctgagtgctgagaaaaagtgttc
-agggagcagaaacagcatgagtaacgaagctaggaaagaaagagGACACAGGGCTTACAA
-AGTATTCCATGGCGGGGATGGGGAGGGGAGGAGAGAAGCGGGGAGATGGCTGGGGGGGTC
-AGGCAGGCCCCTGGAAGTCATGCTTGGCGGTACCCTGGTCGTGGGGGGGAAGGGGTGCTG
-GCGCTTGCTGCCCCATCTGTCTCAGTGGCATTGAGCTGTGACTTCAGTGGCCTGGGGAAG
-TTCAAGGTCACCTCTGGGGTGGAGGAGGTGGAGACATCTCACCAGGGCTGGCAAAGGCCA
-ACTGGGAAGCTGGGGCCGATACCTGCCCCTCACGGCAGCCACCACAAGGGGCCTTCTGCT
-CCGAAGGCCCAAGCACGCCCTGTTCCTTTATTTATGGGCCGTGTGAGCAATTTGCTGCTT
-GCTGGCCGGCTGGCTGGGTGTGCGATGCGGGGATTACTCACGCCCCAGTTGTGGTCCGGC
-CTCTGCAGGCTGCGGGGTAGTGAGTGAGGTAATTAAGTGTAAAAGATGGAGCAGGCAGGG
-GAGGGCTGAGGGCGGTGAGCAGTCACTGGTTCTTTTCAGGAGCAGGGGAGTGAGATAATG
-TAGGATAATAGCCTAGCCAAACCCTGCCCAGGCAGCCCGGCCTGTGCTGAGAGGTGCCCC
-CCAAACGGCCAAGACAATTCAGCCTTTTCAGGGAAAATGGGGGGGCTTGGGCAGGGCCTG
-GCTCCCAGGGACAGCTGTATGGAAATGACAGCTCCTCTCCTTCGTCCTGTCCTGTGTTGG
-CTCAGGGTAGGGGCAAGTGTAAGTGTCTTCAGCTGGGGATGAGGCCAGGGCAGGGGGCAG
-TAGATGGGACCAGGAAAGCTGGTGGGTGAGAGGAGGGATCCATGCGGGGCTGGGAGACTG
-ACCTGTGTATGTGGCACAGgcacagtggttcgtggcagcagactccagggcctgactcac
-ctggtggaaactgtggtgtggctttggctagctgtgtgacatcagcctagttgtggtcct
-tctctgagcctcaggactctcatctgtcaaatggggctgtcaaacaattcctacttcccg
-ggggtgtttggagaatGGTTCGTAGCGCCTGATGCACAGGGGCTACGAAATGCTTGACAT
-GGTGAAGTCCAGAATCAGAGTGCATTAGTCattcactcattcagtggataaatgtttatt
-gagtgcctaccatgttctaatggttcctgggaaagcagcagtgactagaacagagtccct
-ttcctcttggagatgacattctaagaggggagacagaccattaatcgtgaaacacataaG
-CATAAAAGGTCATAccagcaatcccacttctgaaaacttattctatagacatgtttgcat
-acatgtggaatgaatgcattcatggttatttattgcaattttgtttggcatagcaaaatc
-ttagtaatgatctaaatgcctgttacacatgggctgactgaagtatggaatattatatag
-ccattaaaaagggtgagaccatttctatTTCTgtttatttttatttactttttttagaga
-tgggatctcactatgttgaccaggctggtcttaaactcgtcactggtgaGACCATTTCTT
-ATGTACTGATATAGAAAGCTCCCTAAGATGTTTTGACAAATAAGAAAAGGAATGTGAAGG
-ATAGTTTCTGTAAAAGAGGAGACAATTTGAAAAATGTATTTCTATTAGCTTGTGTATATA
-TGAAACTAATAATAGTTGTTACCCAAGGAGAGGAGTAGGGTTGGAATGAGAGACAGGAAG
-GGGAGAGTTTCACTGTATACTTTTCTATAACTTTTATTTTTGTATGAAGTGAATGTATTA
-CTAGTTCAAAAAAGAGAAAATAAATATTCAGCTTCCTCTTTCCTCCTTTCCTTCCTCAGC
-ATTTGTTGGAGGTAGCTGTTGAGATTTGGGACTAAGCAACAAAGGCAGCTGAGTGAGGTG
-GTGGCTCAGTGTGCCTGGggattgaacaaacaggttcatatatcaaggataatgagagcc
-aggttgctcagcatcagagaagggaattacaagtatgaaaacaggaaaggctagaaagaa
-ccctgtggtgttagattggagttagaggaatcagtgtaaactcatagcttttgatatata
-tagttacataagcatgcatgcaagtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtg
-tgtgtgtgtgatgcatatgtgcatttcccagttctgtccaaaaagacagcaataatcaat
-acaccatgtagccacgaatacacctaacacctagatcttgggttttaaatactattctcc
-actgaaaggaactggggcttgggaaaatagtagatttgagggctggagcaggaaaagtgc
-cctgtgcctggtaccatggtacatgaaacatctagctgtgccatatgataggcaagtgct
-caagtaatgctgaggacatgtcaaaagaccaaggtgccaacttaaagggactcccaatgg
-ccaaatctgggacaacttgagtatcaaaataatgacagtaacagattataagccatgaaa
-tataaatagtcctgatatacagacacatacacgtattacatacacacatacatacataca
-cacatgtgcagaaagagaaagctctttcttacactagaatgcccaataataggtgtggaa
-ggaaggatgcaactagtatggtaataattgattcaaacaagaagcattactagatgctaa
-aactaaagccattgtgtgaaaatttgttgaggagtaggatatttacatagtcttaaagag
-tctttccacaagatacaatacctgcaaaaggaaggagagtgactttatagcgaagaaaca
-tggcagagactatcttagtcgagtgatcaaaggctgcatcactgttactggacaaactga
-catgaggctcctgatgggatgcacagggaagagtgaaaaatcacttctgtgatgttcctg
-ccagagatgcaaaactgaaatctaatcacgaggagccgtcacataaacccaatttgagga
-accttctacaaaacaactggcctgtaacctgggtaagtatcaaggtaatgaaaggcaaag
-aaaaactgagggaccgtcacagattagaggagactaaagagataagacaatgaaatacaa
-tgagtaattctggatggatctttttgtttattataaaggacattattattgagacaatgg
-acaatatttgactgggctctgaagattggatggtagtaatatatcaatgtcaatttcctg
-attttgatgattttattgtggttatgtaggagaatatacttgcttttaggaaatgtacac
-taaagtattccaggataacagggaatcaaattgacaatttactctcaaacaattcaaaga
-aaatctctctatatataaatctctaagagagaatgataaagcaaatatgtttaaatgtca
-atatttggggattctgggtaaacaatatatgagaattctttgtacaatgtttgcaactct
-tctgtaggtttaacattattttacaataaaGTTATTTACATGAAACTGaaaccatatgat
-gtcaagtaatgataagtgatatatagaaaaatcaagtgggcagaggaacagaaaatgagg
-gggtggtgctattctagatggtatggtccaggcaggcctctctaggggaggacctttgag
-cagagacctagtgggagggagggagtagctccatggatacttggggagagtctcaaaggc
-cgagggacccatctgagaaaaggcccagagtgggaccagcttggcctgtgtattagtgtc
-tattgctatgtaacaaatcatcaccaacttagtggcttcaaacaacagccatttagctca
-cagttctgtaagtcatcgtctggcacagagcaactgagttctttgctcaggatattacaa
-ggtagaaaccaaggtgtaggttgggcttagttcttatgtgaaggctctggggaaaaaatc
-cacttccaatttcattcttttcttttcttttttttctttttctttttttttttGTGCAGT
-TGCagagaggaaaggaggaaatttttcgatagaaaaatcttggagatcctgttgctgtca
-cccatcgggctgttggaagctggggttagtccagaagtcttcaggtaatgccagggtgtt
-gccctggccaggaactctcagttgcctctgaacttcttccagccccacatgatggctaag
-ctctccatgaaaggagaccagttggaaacaaagccaacattcccagcaccctgagggcac
-tgaaggattggctaagttctccccggcaagcctgttccctgagaaaatggaggacagagt
-ccttaaaatgaaagagctggggtctgtgcctatactcactctttcaatgaatctacgtcg
-gatcccaggcaggcccccacaatgaagtggtgttgttcaactgaggtaatacccaaggtt
-cgttgtctcatggccacagaaaactaggactcggacacaccagagtgaggttaagagcag
-aagtttaataggcaaaagaaagagaaaagctctctctgttgcagagagaggggtcctggc
-gaaaatgggttgcccccaagttcattcttgttgttcgcaatgttcagcgtcttgcggttg
-tgggactgaccgtaacagacgatttttttgttggctagaagccacctgcattccttgatg
-tgtggcccctccatcttcaagtgagcaatggtgttttgaatcctccttatgcttcatgtc
-tttgacttcctcttctgtgaccaaccgggaaaaactcactgctttaaaagggctcttagg
-attagatcaggtactgtgttagttcacttttgcattgctataaagaaatacctgaggctg
-ggtgatttataaagaaaagtggtttaattggctcatggctctgcaggctgtaccagcata
-gctctagcatctgcttctggtgaggcctcgggaagcttctaatcatggtagaaggtgaag
-ggagagcaagtggtgtcacatggtgagagccagagcaagagagagaaggggagggtgcca
-gattcttttattttttatttttgttttttgagacagagtcttgctctgttgcccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctccacctctcgggttcaagtgactcc
-catgcctcagcctcctgagcagctgggactacaggtgcacgccaccatgcccagctaatt
-tttttgcatttttgttagagatggagttttgccatgttgctcaggctggtctcgaactcc
-tgaactcaggcaatctgcccaccttggcctcccaaagtgctgggaattcaggcatgagac
-atggcgcctggccccagactcttttgaacaagcagatctgtgaactaaccgggtgagaac
-tcacttattaccaaggggatggtggtaaaccattcatgaggaatccgccccggtgatcca
-atacctcccgccaggcccacctccgacactgggaatcacatttcaacgtgagatttcaga
-agacacacatccaaaccgtatcaagcatacccagagattttccgtatcttaaggccattt
-atgccaaataacataagctgatcacaagagtaaacgccaccatattcacagcgcagggta
-ttttacaggacatgtacacaggatggggaggactgggctgaaatcctggaggccatctta
-gaatctgcctatcataGTtgccggggttgagaaacaagaaagccagtgtggctggagcac
-agtgaacaagggggtgcagggaggagagacagcagagTATCACAGGTGGAGAGACACATA
-TATACCACCTAGCCTGATGGGAGGCTGAAGGCCTGAAAGTCACCTTGTGCAATTTTGGTT
-CCTGAGGAAGGGGAGGGTCATGCGAGTTCCTCCATGGATTCACTTGCACTAAAAAGCACC
-CCTGGGGTGGGACCCAGTCGATGATGGAAGTCAATGGAATGCGTGTTGAAGAGTAGCCCT
-TGGAGAACCAGTGGGCTGCTGGGCATAGGTGATAAGTTCTGCTCTGTGCATTTGGCCCAG
-TAGGCACAATGCCAAGAAGCCATGGGCTCGTCAAGGATCCATGGAGAAGTCTGAAATCTA
-AAAAAGCTGGCTGGAAAAATATTTTAAAACTTTCCAAACTTGAAAGACTTAGTGAAGTGC
-CTACCAAGTAGCATTGTGTCAATGGGTCATGAGCAACGCCCAAGTCTCCTAATAGTTACA
-TATGCGTTCTATGTGATGTGACTGCATTTTGTTTCCATTTTAACATTATTGTATTTATTT
-TTTCGTAGTATCATGTGCAATGTACAAATAAAAAGGAACAAAAGGAGATGCCCTGAAAAG
-CAAGTCTCTCTCCCACCTCTGACCCCCAGCCACGCACCCTCTCCCCACTGAGGCGTttcc
-tgtactcaaaggtattttgtgcacatgctaatgaacatgtatatatacacctgactcctc
-cccttttcacaatggtggctgttctgcctgctttttttcttttttcttggcagtacatct
-tggagatgtttcctattggctcatgtggagctgcccattcttttgtacagcagcagagca
-gtctgttatttggatgaactgtcatttattaactagACATGCCCACAACCCTGCCACCTC
-TTTTCCTAACACACTGGGCAGTCTTGGCCTCTCCCAGGCTCCCTGGGAGGGTCACTACTT
-TCACAAAGATGATGCCCACTTCTGCCcatggaatctggcttgcccagtgactacctgaca
-gggttgagtgacaccacccagaagtgcaaagAAGGCAGTAAAGAAGAAAGAAGAATTTAT
-TAGGTGCCCGAGGAAGGGCTcaatcctgccagtctaaacattgttgtacatacctcctga
-tatgtttttctagaatgtctccaggaagggattgctgggaataagtgcaaaataatgccc
-aattgttctccagagtggttgtacaactgactcccttatcaccagtgtcaaggagtcctt
-gttccacataattgatcacatttggacttgtctagctttttaagttttgccaattgagta
-gacaggaaatgagcttttaatttggatttctctaattactcagaggttgagcatcttttc
-aaatgtttgttggctattcatgttttcgcttctctatgtctgtccaaatctttagtccat
-ttttctttttgattgtttgtccttgtcttattgaattgtaggggttctttatatatttgg
-gtgctaatctttgtcagttaaattgttacggacatcttctagcttgtgacttgtctttcc
-acttttaaaaaatggtgaactttgatgaacggtatcggttgtaatgtaactaatttatta
-atatatgcctttatggtttgtcctttctgtttcttgcttcaggaatcctttccaacccaa
-agccatCCCCATGtttctatgatgcacatgtatatatattatttatttatttattttttg
-agatggagtctcgttttgtcccccaggctggagtgcagtggcgcaatctcggctcactgc
-aagctccgcctcctgggttcacgccattctcctgcctcagcctccggagtagctgggact
-acaggcgcccgctaccatgcccggctattttttttgtattttttagtagagacagggttt
-caccatgttagccaggatggtctcgatctcctgacctcatgatctgcccacctcggcctc
-ccaaagttctgggattacaggcgtgagccaccacgcctggcacatgtatatatatatttt
-aaaaagatcatatgtgcatcctgttttgtagctacttttccacttacctaacatgaagga
-acattttttccatgtttaaatagtctacaacatctttggtaaatggttgcatagttttcc
-attgtatggaatatacagtctttatttactgaatcccctgtgatgaacatttaagttgct
-ttcagctttcatatgatcaataatgctgccaagaatatcctgaagctgttggggtccaca
-ttcatgatcatttctcttagataaagtcatagaaatgaaattgcccatagaatttaaggc
-ttcggatacatttgaccaaatttgccagaGGATCCACTTTTGATTCCTTTCCAAGAAGCA
-ATATGCCATTGTGTTCAATTGCCCTTCCCAAGAGTCTGGAATCAGCAAAGTAGGGGTCCT
-GGAGATGATGTTTTGAACTGGAGCTGTTAGCAGGCATGTTCTGTTGTGTGCAGAAATAGT
-TACTGTAGCAGTTAAAGATTTTCCCTGTCCTCTTCCTTCCTACCCTCTCCTGACTCCTGA
-CAGGTAAGATGCCATTATTAGTACTATTAAGAGAAAAGAGCCAAGAAATTAGGCCTGCTT
-TGGTAATGATTCTTGGCTAATTAATTGCATTTCCAATGGCCATAAGCTCCTGCTTCAACC
-AGCACCTCTATGTGTTGAAGGCAAGAAAAGGGGTCCACTACAGCTGCTACCTCCTGGGCT
-GGGCACATAACATTCTCATAAAAATGTTTGTCCAGTCAATGAAGGATTTCGGtttttttt
-aagagacagggtctcattctgttgcccaggctggagtgcagtgtcacgatcacggctcac
-gcagtcttgacctcctgggctcaaatgatcctcccacctcagcctcaaatgatcctccca
-cctcagcctcccgagtagctcggaccacgggcacatgccaccatgcctggctgatttttg
-tattttttgtagagatggggtttcgccatgttgatgaggctggtctcgaactcctggctc
-aagcaatccacgtgcctcggctttccaaaaagattacaggcatgagctaccgtgctcCCG
-GTCAGGAATCTTTTAAAAGTCTCCTGGGTTGTCTTGGATGAGAAAAATAAAAAGAAGTCT
-CCCAGAGAACTTGAAAGCCTTAGATCAGGATTCCCTTCCTTCAGAGGGGTAAGAGGTGGG
-TGCCAAGCATTTAATTCTTAAGCATTTATTTTAGCAAATATCAACATGTATAGTAATTGA
-TACTtttatagtaattgatattaattttcatgtatggcagcacaaagtttcccattagcg
-tgaactggctttttgtttttttaaatgaggctatttaaagaaaaatattaagtaaattgg
-tggaagatagcctgcagatgggggtggggaggaggtggtgtgattccgcccaaacttcga
-gaaacactgCTTCGGTGGAAACCGCTCCGTGAGGAAGGCCTTAAGCCAGGGCTGGGTTGG
-GTCAGGAGAAAGCAGGGCCTTGGGATTCCAGGCGGAGGGCACTGGGAGGCTCTGGAGGGT
-GCAGTGAGGCTGCCACAGTCAAAGGCCGGGCGGCTGGGAGGGGCTTTCGGAGCTCTTCCT
-GGTATTTAAATCATATTTAGGGATTATAAAGTGTGATCCTTCTCATTGTGtcatttgaca
-ctcacagcaactttgtggagtttcaggcaataaggagattgccttgtcagtttacagaag
-gaaacggaggcagagagagacgcagcaatttgcccagggtctcaggtgagtaaaaggcCT
-CAGTGGTGGGTGTGGGCAGCATGGCTGGAAGAAGCGGAATTTGGTGTGGAATTTGTGGAG
-ATGTGTCAGGAGTTGCACCTCTGGGACTAGGGCACTCACAGCCCTCTCCTAATAACaata
-acaaccaccattagcatttatggagtgctcgctgcgggctggctctgtgctgagcaactc
-tggctgtctcactgcacactttacactaacgcaatgggaggggaggtgtcattatccccC
-AGAAAGTGTCAAGGGCAGGAGTTATTGATTCATGgtgtctgctcttgtagaaatttgaat
-tccagtaagggagaggggagccagaaaataaccacgggaagacatcaatgaatgagataa
-tttcacataacgataaatgccagggagaaaaaacccacagggcaatgtgatatggcctct
-ggaggtggagaaggaactgctccagatgaggccatccgtgaaggcttctctgaggaggtg
-acattagagcCAGAGCCAGTAACGTCTGGACTTGAACCTGGGCTTGCGGCATGGGAGAGT
-CCTGCATCTGACTCCAAACTTCCCCTCCTCTGTCTCCTGTGGATCACAGAATGCTTTTGC
-CAGAGACTCAATCCCTTGTTAAGAATCATGGAGTTggccgggcacggtggttcatgcctg
-taatcctagcactttgggaggctgcggcgggtggatcacttgaggtcaggagttcaaaac
-cagcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaaattagcagggca
-tgatggtgcgagcctgtaatcccagctgctcaggaggctgaggcaggagaattgcttgaa
-cctgggaggtggaggttgcagtgagccgagatcccaccactgcactccagcctgggtgac
-agagctagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaTCATGGAGTCCTGGCTTA
-GGGAACGGAGTGTCCAGGAACTAGGGATGAAAGGATGGTAAGATATCCAAGCTGGAGAGA
-CCTCACCTGTGGTGCTGCCTTGTCCAACTCCAGGAGCTTCATGCACTTGCCGACAGTGGA
-GTTATGCCACGTTAGGGGTCACTCTAGATGATTCCCCTGGCCAAAGGGAAACCAAGTCCC
-AGAGACGAGATGGGTCCTGCCAAAGGCTGTAGCTTACAGCTGTGCAAGTTGTGCTGGGCT
-CCAGGGAGCCCAACTGGAGGCTAAGGGGATgccttgcatcccaccagggggctgcaccag
-gaagaaagggtacctgtttctaattcacacaaaggaatgctatgggctaggggtggccct
-gAGCCTCGTGGAGGATGGGGGCAGAGGTGAGATCCCCACATCGTTGTGCCATCCTTTTTC
-CCACCTCTCCTGCTTCCTGCTTTGTTCCTGCCAGTCCCTGGAGGGCAGGCGGGTGAGCAT
-CTTCACCATTGAGGGATGCCCCCTCCTTAATTGTGGCAAGGGGGGCCCTTTGCAGCCCAG
-TGCAGGCCTTATGGGACAGTGAAGAGGAAAAGAAGCAAGCTGGCCAGGATTCCCTGGGGT
-TTTTGTGGAGCTGACAGGCTGAGGAGTGGTTGGTTCCGGGGGCGGGGGTGGCCCAGAAGT
-GCCTTATCTCCTCTGGGCCAGTGTCAGCTCCTGTCCCCAGCCTGCAGCACAGGCTGGAGC
-TGCCAGCCTGGGGACTGCAGCAAATTTGCATTTATATTGGAGACTTCTGTTTCCAGGGCT
-TGGGGGGAGGAGGGGTGGCCACCACCATCAGCTGAGCAGAGATGCAGGAGAGGAGGGGCC
-TGCAGCCCTGTCCTGCCAGGGGCACAGGAAGTGGCCGATGGGCCCAGTCTGCCTGGCTGA
-GGGAACAGTGGCACAGAAGGTTCTCTGGGCACGCGGCCGGCCCCGACAGCCTGCCTGTCC
-ACCCTCCCAGACGCTCGCCAACATCAGCTGGGAGTTGGCTCTGCCCCCAGGCCTGGGAGA
-AAGGTCAGAGGCCGGTGCCAGCAAGGGACTAAGCAAGGCCAAAGCACTCCTGTGACAGGG
-TGCAACTGCGTGTCACCCGGTCTCAGCCCCACAAAATTGTAAATTGttttagccaagaaa
-acggaggctcagaggggcttagccattagctcaaggtgatccagctTATCATCCATGCCC
-CATGAGCCTCCCAGGAACACCCGGGATACTCACACACCCTGGATGCCATCTATACTTAGG
-GGACAAAGAGGAGTTGACACCCCTTTTCCAGCTAAGTTCTGGAGGGTCAAGGGAAGTTAT
-TGCAGGCTCGTGACACTGTTAGGGCTGGTTTTGTGACAGCTTAGGAATCATGTTTCTTTC
-TCtcttttctttcttttttttttttttttttagagacagtctcactcagctgcccaggct
-gaagtgtagtgcagtcatggctcactgcagcctcagcctcccgggcttaagagatcctcc
-cacctcagcctcctgagtagctgggaccacaggagcatgccaccatgcctggctaatttt
-ttaattttttattattagtagagactgggtctcgctctattgcccaggctggactggaac
-tcctggcctcaagggatcctctcgtcttggcctcccaaagtgctggTGTAAGTCATGGCT
-CCTGGCCTCATGTTTCGTTTTATGGTGAAATCCATAAAATGGGTTTTTTTAGGGCCAGGT
-TCAGGCCAGGTTTCCCCTTGTCTTTGGAGAATGTAGCTTCTCCCATCTGTGAGGTTCCAT
-GTGaagaaggaatggaaggaaggagagaagacaagaagggaaggaggggggacaggagga
-gggagaaatagggagtgaagTATAGAATAAATAAATAGAAGAGGGGggccgggcatggtg
-gctcatgcctgtaatcccagcacttcgggaggccaaggtgggcggttcacctgaggtcgg
-gaccagcccgaccaacatggagaaaccctgtctctactaaaagtacaaaattagccaggt
-gtggtggtgcatgcctgtaatcccagttactctggaggctgaggcaggagaatcgcttga
-actcgggaggcggaggttgctctccagcctgggcaacaagaatgaaactctgtctcaatc
-aatcaatcaatcaatcaGTAGAAGAGGGGATAgaaggaaggagtggaaggagggaaggaa
-gggagAGGGAGTAGATGAGAAGAGAAGATAGAGTCATCCTGCACCCCGCCCCCCAGGTGT
-GCTTGTTGCTGCTGGAAGTGCCCCCTCTGTGCCCTTTCCCTGGCTGTTGTATGGAATGGT
-GGTCCTCTCCCCATCCTCCTCACCCTACAGCTGAGACCTCCTGACCTCCAGTAGCAGGTG
-AGCCCTGCTCCAGGTGGGGGACCAGTGACAAGCTGGTTGGGGCTCCAGGAAGCAGAAGTT
-GGGGCCCTGTTGTGATCCCTGGGCTTTATTTCCATCCTCAGGGCTCAGCTGCCTCTGGAG
-GGGGCTCTGCCTTGCTCTTTGGGTTCTCTCCACACACTCCCTCCCCCACTCTTCCAGACG
-GAGGTCTTGGCCCCATTCCCCCAGCCTGTGGCTGTAGGCTTGCAGCTGACAAACCTCCTG
-GTCCTGGCTCTCCGTCCAGCAGAACAAGCCCTCCCTGTCTGTCACCAAACAGTCAGGACG
-GCCTGTTCCACCTGGCAGGCTGGACTATTGCCcagcttagtcttgggaagtgaggaccag
-ggctgacaacccactgcctgagttcaaatctttgctgtgcctctttctggctgtgtggcc
-ttgggcaagacccgttacctctctgagcttctggcttctcatccgtcaatgggcataatg
-ttaggatctgcctcttggattactgtatgaatgatacgagatcgttcatggaaagtgctt
-ggcttggtgcctggcacCAAGACATTTCAGCTTATATTATCCTAGCTGTATCCTTCAGTG
-TCTGTCTGGCCTAGGTGGGATGTCAGGTTCCAGGGACCTGTCCCCATGCTTCCTCCATTA
-ACCCCTTTATGACTAGTGTCACCTGATATGACTATTTCAACACACATAGGATTGAACCCT
-GGTACTATTATACCATTACTACTTCTCCTAGTTGTTGTATAAGTGCTTATGGGATCAGGC
-ACTGTTCAAGCCAttttaaaatatgactccacattcctttaaattcctctaatcaagaag
-tggggcctatgtcccctctcttgattgctcccaggaataaaatatggttagaaatgacca
-tgctggctgcgtgcggtggctcacgcctgtaatcccagcactttgggaggctgaggtggg
-cggaccacccgagggcaggagtttgagaccagcctggccaaccaacatggtgaaacccca
-tctctactaaaaatacaaaaaaattagccgggcgtggtagctgtaatcccagctactcgg
-gaggctgaggcgggagaatcacttgaacccgggaggcagaggttgcagtcagcctagatc
-gtgccactgcactctagcctgggcaacagagtaagactccttctcaaaataaataaataa
-ataaataaTAAAAAAAAtgaccatgccacttctgcttgagtctctggggacactcactct
-tggaactgttggaacccagcctgcatgctaggaggaagcccaggacccacggagaggcca
-ggtgtggatgttctggcctgcagtctccactgtgccactcctaactgccacacatgtgag
-gggaagacaattctagatgattctagtcccctgccttcaactcttttcagctgaggcccc
-agatactgtagaacagaaggaagccacccccatgtgctctgtctgaatctgtgagcataa
-gaaaatggttaacagtactacacgttggggttgttatgccacagtaaatcaccagaaTCC
-Ctgtgctgactcatttaagcttcacaacttaggaagtagctgttcttatcatctccattt
-catagatgaggaaattaagacccaaaatgctttagcaagctacctgagtccacagatctt
-ctaagaggaagagctgggattcgtgcccaTGGGTTTGAGCATTGAAGAATCAAGCAGGGC
-CCATGTCCTACAGGGCCTAGTGGGCCACATAGGTGACTGGATGTCATCTTGAGGGCCTTG
-GAGGGCTGTGGGAAGACACTGATGTGTGGAATTCACGAGGTCGGGAGAGGGCACTAAGAA
-GCTTGCTTAGGTGCAACGTGGAGGGTGGGTGAGAAGGGGCTGGAAGTGGCCCACGAGGAT
-GGACAGTGCCACCCTGCCATGGTCCACCATCCTCTCCATGTCCTGCTCCTCAAAGTTACG
-AGGGCAGCAGCAGGAGGCCTGGTCTCAGGCCCTAATGAGCTCTGCACCTATCAGAGCTTG
-GCCTAGCCGGAGATCCCAGCCAATTCCTTTGGGCTGACTTAGGCTGTGCCCTTGGACGGA
-CAGAGCTGGGCAGTCAGGGCTGGGAGCCTGACAGTGTGAACAGGAAGTTGACGGCCCAGG
-AGCATCCTCTGTTCCCTGCACATCAAGGTGGGCCACATAGCTCCAAGATCATCTGTGCCA
-ACtggatctactgggtttggagttggctgagagtggaagggagcccacaagaagagtgac
-ctaaagaggacagacactgatttctttttcttattaccaatctggaagcaggcagtcccg
-ggctggtataatggctctttgatcctcagggacccagactccttctatcttgttgttcca
-ccctcaacacttcatagtccaaggtggccgctcattctctggccatcatgtccacattcc
-agccagagggaaagaggaagaggcaaagaatgctctggtctctttaaggacccctcaccc
-ccaccgctcagaagttgtactcggtactccgtttacctcttcatggcaggaatgcagaca
-catggccacccctaactgcaagagaggctgggaagcgtggtctctgttctgccatccatt
-cacccagctaTATCGGTGGGGAGGGGGTTCTCATACTGCGGGACATGGCAAATCGCTTGG
-AATGCCAGCCACACCTGGCACCTGGAagccagagtgagtgttttgaaacttgaatcattt
-aacttcgttgcttaaaatgatcctgtagcactcactgctcccatgataaaggccaaatcc
-tcatctgacccccagggctgcctgatctcaccgtggctcacctctccagcctcatgccct
-ggttcccccagccccatcctccccaactcaccctaacATTGAAATTAAACCATGCCCACT
-CCATCCTCACCTTGGGTCTCCCTTTGTGCTCTGATATTTGGGTTCTCTTCATGCCACAGC
-TCCACCCAATGTGTGCTCTGCTTCCTTAGCTGTAAAAGGAGCTCCCCATAGTACCCACTG
-GGCACATAATAGGGTCACTTGCTTGGGTACAACGTGGCGGGTGGGTGAGAAGGGGATGGA
-AGTGGTCCACAAATAATGATTTGGGAGAACACAAATAATCAGACATAAAGAGCCACAGAG
-GCACTTACTGACTCTAAGGACTGTGGTTATAAAGCCCCTGCAATGTGCCAGGTTGGTACT
-ATGGGGAGCTCCTTTTATAGATAAGGAAACAGTGCATGCTGGGCGGAGCTGTGGTGTGAG
-GTCCTGCTGCACTGCCTTGCTGATGAGAAAAAACACTTATGGGCAGAGCGCTTTACACTG
-AGCAACTCTGTGCCTGCCTTTGTCTCAGGCAGTCCTCTAGCCATTGTGCCCCCCCCtttt
-tttttctgagatggagttttgctcttattgcccaggctggagtgcaatcgtgcaatcttg
-gctcaccgcactctccacctcccaggttcaagtgattctcctgcctcagcctcccaagta
-gctgggattacaggcatgcaccatgacacctggctaattttgggtttttattagagacgg
-agtttctccatgttggtcaggctggtctcgaactcctgacctcaggtgatccacccactt
-cggcttcccaaagtgctgggattacaggtatgagccaccacacctggccCactgtgcccc
-ttttgcacatgaggaaatgggagagggactgtgattctgtaaggtcatatagccaggtag
-tagccatgccttgactggaacccagctctgcctgccccttccctgctggcagttgcatca
-cctgccttctctgGGGAGTGAATGAGGACAAGCCAcacttgaccttccatggtcctgtag
-cagagattttaaagtccagcttttagagaggaacgtgaaagcccagagaggaaggaactt
-gcccttggtcctatactccatcaagcacaatgctgggaagggactcaggtctcctgactc
-ccagtccagagctcttgcacactttgctccttcatgcaacaaatatttattgagcatcta
-ctgtgtaccagcacagtgctagcccttgagaacacagcagcaaacacaacagacacaaaa
-ccctggccctgtggagtggacattccagggctgggtggaggagTGGGAGACCAATACGGA
-CCAAGTAAGTCAGCTGCAGCACTGTCTTTCCTCTTATTTATTTCCGGAAACAAATAATTA
-TGGAGAACTTTATTGCTataagacagacatggtcctgactctcctacagtgagaatatag
-tgttggagacaggcactcaatgagagacacataaataagcaaagttcagattgtgatcat
-agctgagaagaaaacaaggttgaagtgctagagagtaatggggatgcggtactggtagtt
-aacttcagatggggtggccaggaaaagcctctccaggaagtgactcttgagctgagaccc
-aaagcatgcaatggggcccaacagtgttccaggtggagggaacagcaagtgccagggtgc
-agaagtaggacagagcttggtgggagaaaggaacagagagaaggccaaggtggctggagc
-agggcgagagggggaggttggcaagagggagggggctggagaAAGTCCAGAGTGTCGTGG
-ATAGACACTGAATAAAGAGAAGGGATGACTAGCCCCCTACAGTTCACCCCTGGGTGGGGG
-TTGGGTAGTCGTCTTTGCATCTGATAATTTCCCAGCTAGACCCCCAAGGGGTGGGGGCCA
-AACACCTGCTGGCCTGGCACTGCCTGTCTCTGCAGAGATAAAGTTCCCTGCCCCCCGTTC
-ACCAGGACCCCGCTCTGTGGTGCCTCCACCTGCACAGTCAGGCAGGGCATTGTGTGTTCC
-GGCCGGCACACCTGGCATTCACCAGCCTGCTGGTTGCCTGATTTAGGGGCTCATCCTGCC
-TGGCTCAGGGGTCTGTTCCCTGGAGTCTACCAGCTGGGACTAGGCTGGCTGAGGAGGAAG
-ACACAGGCGCTGGTGGTGGCCACAAAGAAGGCACCCTTTACCGTTGCACGCCCATTGGAC
-CATGTTTGAAACCCCAGGCCTCCCTTTTCCAGCCATCCTTCCCTGGGTGGCAGAGTCTGG
-GCTTGGGCAGAAAGGTTCAAGGGGCAGTTTCACTgctgtgcttagaaattttctctccct
-ctctgggcctgtttcctcatctgtgcaacggaagggttgacctggataaactcATGGTGT
-Agactctagagccagactgcctgggtttgaacctttaccacgtagtgaccatatgaattt
-agctaagttactcaacctttcgttctcagtttacctacatgtaaaatggaggtacaataa
-taacacctatttcaagggctgcgggaggattaagtgaattatatatgtctggtgcttcaa
-acagtgcctgctctatggtaagtgctatatattttaactctgatcattattATTAACGTC
-TTTGGAAAACATTGCACTGGAAAGACTCAGTGGAGAAATCTGAGTTCATTTGTTTGCAAA
-CTTTTTGGTCTTTGTTTTTAACAGAGAAGCTCTGCATTGGTCAGGAGAAATTTTACTCAG
-AGCCCCAGCTGTTAGCAGGGGATTGAAGGGGGGCGCCTGCCCCACCTGCTTCCCCGTCTC
-TGTGTCTGCAGCCCCCAAGAGGCCTActggagcataacttgaaaatccctgctcagttta
-tctccttcagctcacagtcagggaaactgagactcagagaggagcagggatctgcccagt
-gagtggcccagcctagactagaacccagatctcctATTTTTCTCAATACAAGACAAGGGG
-CAGGGGCTAAGAGAGAAGCTAAGACCAGAAGCCTCTTAGGGGACTGGGTGCATTGTGTCG
-TCAAGTCATTAGCATGCAAATGATATGCAAATGAATGCAAAACAGCATGTTTTATGCTAA
-TTTGCAGAGTCGAGAGCGACGACATTTTTGGTAATAGGGCGGCAGTCCTGGTCCCTGGGC
-ATTGCCGAACACGCGTCCTTTTTTTCTTTTCTTCTTTCATTATTATGATCGGGCCCATAA
-ATCTTGGTTTGGCTGTGACTCCGCCCCTTCTTGCTTGAAAGCCTGGCTCCTATCATTCTC
-AAGGGCTCCCTTGCCAGTCCTCTGGTCCGGCCTGGGCCCAGGGACAGGCCTGAGCAGTGG
-GTCAGAGAACCAGGACTCAGGAGCCACCAGTCAGAGCTAGAGGGTGACCCCAGCTCTGGC
-CTGGAAGCCACTTCTGAAGGAGGGGACCGTGGCACTTCCTCTGAGCTCCCACAGCCACTG
-TGGCTTCTGTGCCATTGTCTGTTTGGGGCTGGCTTGCTCCTTTTCTTGTCAGGGCGCCCA
-GTACCTGGAACACAGGTTCAGGATGTGTTTGGTGTTTGAAGACTGAATCCATATATGGAG
-AGCTGGTGgtgtaccctagtgatgagcctgcagtctctgaaaacatgcagcttgagttaa
-aaccctggcaccactactttctGAGAAAATAGTAGTATGTACTCACAGCTAACCttttgt
-ttttgttttgttttgagacagggtctcattctgtggctcaggcatgagtgtagtggcatg
-attgcagctcactgcagcctcagccttctgggctcaatccatcctcccacctcagcctcc
-tgagtagctggcactacaggtgcacactgctaccatgcccagctaatttttttttttttt
-tttttttgtagagatggggtcttgccatgttgtccaggcaggtctcgaactcctgggctc
-aagccatccttctgcctcggcctaccaaagtgcagggattacaggtaagagccatcacac
-caggccCATAGCTAattgagcacctaccatgttccagggctctgctttgtaattgttgtg
-aacgctgtcactgataagagtatcctagaaggtgagtatcgttatcattgctctcatttt
-acagagagggttaaatgatttgcctgaggtcacacTCCCCAGGGTAATGGTAAAGGGGTA
-TTTATATTTACTAAGGATGAGTGCTTCATCAGGCAGGGGCCTTTAAGGCACTCAGCAAAG
-CTTCTGTCACAGGGTACCAGGGTCTCCACCTGTGCTATCAAGCCACTCTTTtgacaatgt
-taaactttacctgagccctgtgctcctgaaaaacagcgatggtccagaaatccccccaac
-tttttgttttctgaagtctccctaccttttctgttcagggaaatggcttagcaaaacgag
-ccacccttccccatatgactcagataagacgtagtcccctctttctagtgtatcctgtaa
-gactggaggatgactcccttgctggcctgtgatctttccccttttgctggaacctgctga
-caaggccaaggccaaggaccctcccacttcccattctttgtctcatggttgattagctga
-gatgagaactgtgtgtcctctctgaaactagctagacacagagatgaacatttcctcttc
-aatggactgatggagatatcccctatttgtaagacaatccccactttaaatccctcctgc
-tgtaacctgtctcctcacccctacaaaagtcaaaggcaaatccatcctgtccagacactc
-tgattttgggatctgggatgctctccctgttgcaatagcatgaataataccatcaacccc
-aattcttccgtgtattttgtctttGACCCTTTCCACCGTGCTGTTTTCCACCTAAggctc
-tgagctaggtaagagccctgtgaccttggagtacttctcgggcttctctgtaccttaggt
-ttaaaacggatgcgcacaggcgttatgtcctcaggttgtgagataaaaggagacgacgcc
-agggaaacgctcggtcgcttggcactgtgcccagcagcgtgagtgctccagaaatgtcaa
-ccattgtGAGTCCAGGAGAGGAGAGTGGCGCTCAGAGAGGGAACGGGACCTGCCGGGAGA
-CTCACAGCGGGAGGAAGGGGGAGTAGGGCGCACGTCTGGTGACCTCCGCCCCCAGCTGTG
-GGAGTGTGCCCTGTGACCCCCTCATCCTGCCTTTGGATCACGAGCTGGGGTCGGGGGAGG
-GGATGGTGGGGGGGACACTGCTCGGTCCTCCACTCCGTGTGCCCTGTGACCCCCTCATCC
-TGCCTTTGGATCACGAGCTGGGGTCGGGGGAGGGGATGGTGGGGGGGACACTGCTCGGTC
-CTCCGCTCCCCTCCGCCCGCCTTTGATTGTGGTGAGCAGCGAGTCGCGGAGCAAATTAAC
-TTTTCGCACACTTCATTATGCGCCGTCCCGCGTcccccggggccgaggcccgcgcccccg
-ccccgcgccgACAACTTGATTGGGCAATTAATCTTCGCGCCCCCCACACCCCCTCCCGGC
-CCCGGGCCTTTGTGCGCCCGAGCGTGGGCCGTgggcgccccccgggccgcccggTCTGCT
-GGCGCAGATAAGGCGCCCCTCGCCGCGCGGCCCCGCCTTTGTCAGGGCGCCCGCAGGCCC
-GGCCGCCGCGCTGCCGTCTCGCACCCCATCCGCGCGCCCCCGCCCCTTGGCTCGGTCCAT
-CTGTTTGAGCTTCACAATCCTCCAGCGGCCGGGGGCTGGGGGCGGGGTCTCGCTCTTGGG
-CAGGCAGCCAGCACCCCCTCCCCCCGGCCCCCCCACCCAGCCCCCAGACACGCGCGCGCA
-CGCCCACTCGCACGCGGGGCCGCCCTGTCAAGCAGTGCGGTATTAATTAAGAAGGTGGGG
-GGGAAGCACAGCAGCAGTTTGAAGAATTGTGGGGCGGAGGGTTCCCAGCGGTGTCCAGAA
-AAGAGGGGGACCCTGCCACCCATCTCGTACCGCAGGTGCTTAACGCCTGGTTATTGGCTT
-GGGGATCTACAGGCTCCCATGGCTGGGGGTGGGGGTTAGGGGAGGTGGGAGGTGGGAGGG
-AGAGGCCTGGGAATTTGCCTGACAGTGTCTCTTTGTGCATTTTTCTGGGGTTTTGCCAGC
-AGTTGACCCAGCCTCAGAAAGGTAGCCTGTGATTCAGGTAGTGTTGAAAACCAGAGGCCC
-AAAGGCAGGATAAATCTGGGCCTATTTTAGAGGCCAATAGCGTGGTGGTTCAGAAAGGGG
-TTCCAACAGTTCTCCCTACTCGCCGTTGAGGATTTGCGTCAGGTAACCACCCTGCGCCCG
-GGGCGGTGGAGGTGATGGGCTGAGACCGTGTTGGCGCAGTGCTGGGTACACGGTGAGTGC
-TCACAAGTGCTGGTTCTTGCTGTTTTCTGTGATTTTCCTTGGAGGGGCACAGGGAAAACC
-AAAAATGGCTGGTGCTGGAAAGAGGCCCTTGAGTTTCATCTCACAGCTGGCGGTAGGGTG
-AAGCTTGGCAAAAAACCTGTGGTCTGTGCTGAGCTTGGGGCTGGgtgtgtgtgtgtgtgt
-gtgtgtgtCTATGGTCTTTGAGAAGTGTCTTCATCAGCATATGACTTGTGTGAGTTTTTG
-GGTAGAGAAGGCACAGCCTTCACTAGTTTCTACAAGAAGGGTGTGATCCAGTGTGCGAAG
-AATCCCTGTGTGCAGGGCTGGGAAATCAGCTTCATCTCTTCCATCCAAGAACAGCATGGC
-TGGCACGCTTATTGTGTGCGGAGTCCACGGTAGCGTCCCTAGGTGCTAGGGACAACCGTG
-AGCAGAGCAGAGTTCTTGGCTGCCTTCACAGACTCGCAGTCTCCTTCGGAAGATGAATGA
-GAAATAAAATAAACATGTAAGACATGAGGTAGGTCACTAGGTGACATGAGCTTTAGATAA
-AAACAAAGCAGGGCACCTGATTAGGAGGGTGGGCCCTACTTGCCAGACCCCTACCCTCAT
-CCCCAATACAGTGTGTATCATTGCCTGGGCAGGAAAGGGCCACACTCCTGGGTCTAGGGA
-ACTAGGTCCCTAAGTAGCCTCATGTCCCCACCCACTAGGACCCAGCCTCCAGCCAGTTCT
-GTTGCATGGGGCAGGGTCCCTGGGAAGATGGGCAGGCCTCAGACTGCTGCAACCTCTGCC
-CCTAGCCCTGAGGTGGTGGCAGTAGTGTTTCCCTCTGATAATGACATACTCCAGTCTTGC
-ATGACCACGATGCCTCATGAGCCCACAGTCCAGAAGGGGCCTGGTGAGCAGGAGCTGAAT
-TAAAATGGAAAATACGGCCTCCCTTCCCCCCTTCCTGTTCCTCCCCACTTACTCCCTTCA
-TTCCTGCTGCTCCTGAAGCCATGGGTGAATAGTTTCTCAGTCTCTTTGCCTTGCTGAGCT
-GGGTTAGTTGGGTTAGCAGGATGGACATCTCCTTATGGATACTAGAGTTAGGAGACACCC
-AGAACCAGCAGGTGGGATTTTAGAAAGTGCTGTTTGGCTCTGACCAACCCCTACTCCCAC
-CCCATGCATAGCAGGGTTAGTTTCCTCATCAACTCTGGTCTCTGATTCTGATGTTCTGCC
-CCTAAGCATCCTACATTCTAACATTGTATTCTTCTGACTTTTTAGAATTTTCCCATCCTA
-TGCATCTTACACGAATATGGTGAAGTTCTGATTTCCGCCCTTATGTTCTAGATTGAGTCT
-TCAGTATTAATTTTGTTGGGGTCTACCCATTCAAATAACAATAGAGAAAGACTATGTGCA
-GAGTCACATAATACTAGTCATGATAGTAGCAATTAACATCCTTTTGACCTTGGTTTTATT
-TAACAGTTTTTTTTTTTGAGAATTTTCTAAGCGCCAGACACCATTCTAGACATTATACaa
-ataaatagataaaaatgaataaataaataaatGTTATTTTAGAAGGTGCAATTGAAATTG
-AGAGTCAAGGCAGGACTCACTAAGAAAGTGACAATattttctttctgctttcagttatgg
-agatttgaaatctcagttgataaggtggatttatttctccttgcaggtcattcacttttt
-ccttcatgtattttgaatctctgctattgggggcataaatatttagaattgttatatgct
-catgattaactgaccttttttttttttttttagatggagagtcttgctctgtcgcccagg
-ctggagtgcagtggcgcaatctcgactcactgcaacctccgcctcctgggctcaagagat
-tctctggcctcagcctcctgagtagctgggattacgggtgtgcaccaccacgcccagtta
-atatttgtatttttagtagagatggggtttcaccatgttggtcaggctggtctcaaactc
-ctgaccttgtgatccacctgccttggcttcccaaagtgctgggattacaggcgtgagcca
-ccgcacccagccttgacctttttaatcattataaaatgaccttatctttcctggtaatat
-tctttgctctgaaacaaacattgtctgatatgaaactagctactcctccagtgttatttt
-gattactgttactttccatctttgtacttttaacttgtgtgtttacacttaaggtgtgcc
-gttttgaaggttgggtcttattttttttttttaaaaaaaacaatatttgggtcttatttt
-tttaaaaaaatccaatctaacaatctctgctttttaattgagggtatttagaccatttac
-atttgatgtgatcattgacgtggttagatttaagtctatcatcttgctatttgttttatt
-tttgtcccatctgttctttgcttcctttttcttctttttctgtcttcttttgtataagct
-cagttttttttactatttcattttaactcctccttttttattatatcgttttaccttctc
-tgttggtttattaactgtaatgttttgtttgttatcttagtagttacattaggccttata
-agcctgggtacggtggctcacacctgtaatcccagcactttgggaggctgaggtgggcgg
-atcacctgaggtcaggagtttgagaccagcttgccaatatagtgaacccctgtctctact
-aaaaatacaaaaattagccaggcatggtggtgcatgcttacagtcccagctactcgggag
-gctgaggcaggagaattgcttgaacctgggaggcagaggttgcagtgagctgagatagca
-ctactacactccagcctgggtgacagagcaagactcaaaaagaaaatcatgtaatagtat
-actttcatttccttcctggccttcttgctgttgttgtcatacatacatatgtgtgacaga
-ctccacaaaatgttattatttttgtttaaatgctaagttatctttttttaaattaaataa
-tcagaaaagattttatatatttaactcatgtagttaacacttctggtgacctccattccc
-ttatgtagatccagatttccatctggtatcattttccttctgcctgaaggatttccttta
-tcacttcttgcagtgcagatctgttggtgacaaatgcattcagcttttgtatgtctgaaa
-tcatctttatttcatcttcatttttaaaagatattttaactgggtatagaattctagatc
-ggcaggttttttctttcattagcttaaaagatgttgttgcttcactattttcttccttaa
-attgtgtccaacaagaaatctgccattatccttatctttgtttctctatactttacaagg
-cttttctttctctgactgtttttaatatttatctgtttgtcactggttttgagcaattcg
-ttcatggtgggtaatttccttcctgtttcttgtgcttgaggttcgttaagcttcttggat
-ctgtgagtttatagtttatatcagatatgaaatattctcagccattaattttctatttcc
-tctcctttggggacttcaaagacacatatattaggcttcttgaagttgttccatagctcc
-taatactcttggttttttggattctttctttttctctgagtcgtcgattttgggtagttt
-ctattgctacatcttaaaattctctaatcttttcttctgtcacatcagcatatttttcat
-ttcagacatgtagttatcatttctagaagttcagtttgggtcattttatatcttccaagt
-ctctccttaacctttgaacatgcagaccatgaaatacaatttgaatacttattttaatgc
-tcttatctcctacttctgtatcagttctgggtcagtttcaattgattgattattattctt
-gtatgggccatgttttcttgcttatttacgtgcatggtaaactttggatgccaggcattg
-tgaacattacccttgttgggtgctgtacacttttatatttctataaatctccttcagttt
-tgctctaagatgcaattaagttacttggaaacagttttatccttcctagtcttgctttta
-taatttgttgagtgggtccagagcagtgctatctgttgagggctaattatataccactgt
-tgagaaaagaccttcctgagcactctacccagtaccccagaaattatgagggttttttct
-gtttattaatatttctggttttgtgtgagtgctgagcactgttctctaatcttatcagat
-gattttcacccctacttcagtgtagttttatcatacaaaagcaccaaccagtactcagtc
-taatactcaagggggactttcttcatatctctggaatagtctctctgtgcaactctttcc
-tcccaatactgtgtcctgcaaactctgccctctttgtccttcctggactctcaactctat
-ttccttaactcaggaagcctcctgggtgctgcctgggttcctcctccctgcactaggttc
-tgaaaactctctccaagcggcaaactgaggccatgatagggttcatcttatttcccactt
-ctcagggatcatgatcctttattgcctgttgcctagagtcttaaaaattacagtttcatg
-tattttgcctggtttggtttgtttgtttgattgtttcaagcaggagagtaaattcagttt
-ctgatactccatcttgggtggaagcagaTAtgagaaggtgacatttgaacacaaacttga
-aggagttgatggagtgaaccaagaggatatgggagtggggagaggaaggagattctaggc
-agtgtgaacagcaagtacaatggtctcctgcgtgtatagctgagagtgcgggtagtgtgt
-ttgaggaaggaagggagcacgtatggctggagcagagagttatgtggggaaagtggggag
-agggagggatgaggtgtcagcttgtgtaggaccttgcaggccatggagaggattttggct
-tttacaccaaatgaaatgggagccatgggaggattttgagcagagggaggacatctttta
-caggatctctgaatcgattggattaactgaaagggataagagggcaagagagaaagccag
-agacttgctgggaaccagtgcactaagccaggtgaatgctagtgactcagacACATGAAA
-GGACACACTACCAagggggtgaataactaggagcggggatgaaggaggcttctggggtgc
-tgtcggtgtcttgtatcttgatctgagggaggttacatcatctgctcactgtgtgaagat
-tcattgagctggatgtacacgtctaaattgtgTTCACAATTGAATTGAATACATGAATAT
-ATTACTATATAAATATACTATATACATATAAAACTTAGAAAACAAAGTAgggagatgaag
-gtggcttggactagactgttatcagtggaggtgggaagaactgtatgcattctagatctc
-ttttatatgtagatccaataagatttgcaaacagatctaatgttagatgtgaagacagag
-aatagtccaggataatgtcaagttctctggctgagctacagcaaagactgaggacctgct
-gtgtaccagagcttgggctaagctctattaacttctttaatcttcatgacaattctagga
-agtaagtCTGGCAAGAGCTGCTTctgaggtttttgtggggctactgggagcctttccacc
-agaagtgtagtttgtgtgatggattccagaggtagtggtggccacctttgcctccatgag
-gttacaggctgcctgagagtgaggcctacaagaaagaaatcaaagccatgatagagagag
-agacaggatcctcacagtaacatgtcagcacctggattcagccataacagaagccagtgc
-cctgggcttctcagttatataaattaataattacttttttttttatttctttcacttcta
-actgaagagtccagactgatacaACTTCTTCATATGTGTCCCCTGTCTGCACCATCCAAT
-GGACCATCAACAGCAGCTACATCCTCTCCTTACCGTTGCTTGCTTGCtttttttgagaca
-aggtctctttctgttgatcagactggagtgcagtggcataatcacagctcactgcagcct
-tgacctcttgggctcaagcagtccttctgcctcagcctcctaagtagctgggtctatagg
-tgcttgccatcatgcccagctatttttttttttttcatagagacagggtctcactatgct
-gtctaggctggtcttgaactcctggactcaagaaatcttcctgccttggcctcccaaagt
-agtgggattacaggcgtgagccaccgtgtttggccGTCCTTACCATTTCTAATGCCTGCT
-CTGCACTTTCTCTCTCTGGACCTTTGCTCCTACAGGTCCTCCTTTCCAGAATGCCTTTCC
-TCCCTTACCTTCTGCCCTCACATCAAAACCAGCCCCCTACTCAAAGCCATCCTAACTCCA
-CCAGCTGAAGGATGGAGCTGGCAGAGTGCTTAGATATCAATCCATTTTACAGATGGGAAT
-ACCAAGGTCACTGTGAGACAGGGCAGATTTGTGGTCAGGACTCCCGCGTTCTGACTCTCT
-GAGACTCTTTCCATGATCCTCCAGGACAGCCTTTTCTGTGCCCTCCCTTGCGTGGGGTTG
-AACAGTACTTTTCACAACAATTTACActctcccataccccaacccttgcacgtgctgttt
-cctcagtctgggatgccctattccattctgtccttccggaaagggtgccacttgaacttg
-gagattcaactcaaggatcagacttccagaagccttctctttttcccagggtggctctgt
-gtcctgcctggtactcccACAGCTGCCTCTGGTACCTCCATGAACCCATTTATCCATTTG
-TTTTTTAGGTGTCTGTTTCTTGTTTGCCTCACCTGTTAGGTAGGGGAACTGAGGCAGACC
-TCCTGGCCAAAGAAGGCTCCCAACTGATGTTTGTGAATCAACATAGAGTGAGAAAGAGCC
-CCGTGGAGTGGGGCGGGGGgtggagagccagcgctgggcgtggaggcaggacgcctgggc
-tccagtccagccaccaccactctagtgtgtggcctcatgcaagtcatgtcctctccttga
-gcctcaggcttttttggcagtaaaaagggcagaacatcatagtagttaatacctcaggca
-gcctggatttgaatcttggctgtgtgactttaggcagtttactccagctctctgtgcctg
-tttcctcatttgcaaaatgggggcaataaacatatctgcatcatagggtatttgtgagca
-ttaaatgagttaatgtttacaaagctttcaaaccatgcttgcttggcacatcataTAAGC
-ATCCCAGAGTGAGAACCATTAAACAAAAGAAACCCTTCCCTTCCTGAGAGGAGAGGAGAG
-CTTGACAAACTCTAAAGTGGCGTGTGAGTGAACTATGGTCACTctcagggggtaagctgc
-ctggaaaaggctgactctgacactgactagtgtgtgtctttggagaaatcatgtcacctc
-tctgggactcagcttccccatctatcaaatggaggagttggtctagcgcagttggagtta
-aagtgctttgtctctttgagttttatgtccatgtcagtagagtgggctgagagctgcatg
-tctgtcatgcgctcctggtgagaatgaaatacgatgatgggccggacgcggtggctcatg
-cctgtaatcccagcactttgggaggctgaggcgggtggatcacttgaggtcaggagttcg
-tgaccagcctggccaacatggtgaaaccctgtctctactaaaaatacaaaaattagccgg
-gtgtggtggcgggcgcctgtaatcccagctacttgggaggctgaggcaggagaatcgctt
-gaacccgggaggtggaggttgcagtggaaccaggattgagccactgcactccagcctggg
-caaaaaagtgagactctgtctcaaaacaaataaataaaataaaaaatataataataaata
-aataaatacaatgatgtctggagcacttgccagtcatgcctgccacatagcaagtaatcT
-GTCATAACTGTCACTGTTATTCTGGCCCTGACATTCCAGGGTTCCTTGAGGTGGGGCAGG
-ATGAGGGATGGGCTGGGCATCATGAAGGAAGGTGCTGATGTATCACCTACTGACAGTTTA
-GAAAAGGGAAGGCAGCCATGTGACCCACAGGCAGTGTCCCCCTGCCTGAGCCTTATTTGC
-AGGGCTGTGGCATCGGTGAGCAGGACAGGGACCACCACGCCCACTAGAGAAAGAAGCACG
-TGCTGCTTTTGTGAGTTCACAAAGGTCTTGGTTTTCCAGGGCCAACAGTGTCCCCGCCAC
-ACGTGACCACCTCAGAACCATCACCTGCCACCTGCCAGGGCCTGGGAGTTGGAATCTGAG
-Gtggaaggagagagcaggggccaactcctggctgctcccctctcttggtatgtgaccctg
-ggcaagcctctgcacctctgtcccctttgtcctctcttgtcacataatgaggttttgagt
-gtcttagatagggaggatgtcTCCCTATCTAAGGATAGGATAGGATagaaatggccaggc
-cctggtgcctctgctagctcagtctggctgggacgacctgggaagaacatggcctcagtt
-ccaaagccaaggcggctcctgggggagctgcagctggaggctgtcagcttgctgccctcc
-ttgctgctgaaggacaagctttttcttgaagataggatggataggatgtctcctatccat
-caGGAGATGCGATTATTGGCCTAGACTGGGCAGGGTCTCCACCTGGGCGACGGGTTGGGA
-GGCGGAAGTGAAGCTGGTGGCATGAACCATTCTCAGTGACCTTTCACCAGGGTGAGTGGG
-AAGTAGTTGGGAGCATCGAGGCCTCACTCTCCATCCTGAAGATGGAGCACAGACTGGCTG
-GCTGAGGCCGGGAGCTCATCACGGGATGGAGACAGATTGGCAGACAAAGAGGAGGCGGGC
-GGTTGGGGCTGGGTGCCCCTGGGGAGGAAGGCGGGGAGAGAGCGTAGGAGCAGGAGGAAA
-GAAGGCTGGGCTTATGTGCAGCCTCACAGACTGGGCCTGCAGAGTCTCCAGCTGGAGGTT
-GGGACTGGACCTTCCTCCTGAATGGGCAGGGAGGGAGGCTTGTTGGCCTAGCCCTCGGGG
-TTCTTGAAATAAATGAGGGAGGGCCTTGGGGGGTGGTAAATTGCTGAGGCTGTGATAAAC
-ATTCTCCCCTTCCCACAAAacacacacaggcacgtgtgcgtgcatacacatacacacaca
-cacCCTGGCCACACTGCTGTGCATATCTTACTGATTGTTGTCCTCTGTGAcagcagttct
-ccaagttgagtgcattggaaggatcagttaaaatgcagatttccaggcatttccatctct
-aaatgtagggtgtggcctgagaatgtgtatgtcttacaggatcctggttgatgctgatgc
-tgggggttctgggacacactttgagaaccactgCTCCATTGAGCAGCCtttcagtttggg
-tgcccctcggtgctggtgctgggagagagttaggagggcaagggggttagtgagggctgc
-tacctgtgaaacacaaagcaggagggaatggaattggccaggagagcctcagaccacagc
-ccgggcctgcagagtcaccctctaggggtctctggagtaaagattatccacagagaagcc
-ccacatggggcagaaatggccaggccctggtgcctctgctagctcagtctggctgggacg
-acctgggaagaacatggcctcagttccaaagccaaggcggctcctggaggagctgcagct
-ggaggctgtcaccttgctgccctccttgctgctgaaggacaagctttttcttgaagagag
-aCTGTGTCCCATCCACAACTGCCCCAGgcatctaccacatgccaggctctgtgcagagtg
-tttacctggatgaatgcagtttcagatcagagcaacctggccaagcaaatataatcgtcc
-ccatctaatagatggggaaaatgagggattaagtcatctgcccaGTGGTGGAGTCAAGAT
-TTATCCCCTCTTGTGCCTTAGcactcatccctgtcagcttccctgggtggtgaagaacat
-tagctccttttacacctgaggaatctgaggtgtggagaggtcagtgacttgcggtagagg
-tgggtagaggatccgggattccaaccctgctcatgccCCTCTTTTTAAATTTCAAGATGC
-TGTCCCTTGAGTACTTCTAGGGGGATGTAATGGCAGAAACTTGGGGCTGGAAGAAGCctc
-cctggcatttgacaggtgggtacactgaggcccagggaggcaaTCAGCCGTGCCTCAGTG
-CCTCTCTCTGCCCTGAAGGGGCTCCCTGTTGTGTGTGGGGTATAACCCCCCCGTAATTCA
-TGCATTCAGCACACACTGGTGGGCACCCATTGTGGGTCAGTCCCCCAAGCCAGAGTACTG
-TTGGTGAGTGGGAAGGCAGACGTGGGTGCAGAGGGTCTGTGCAGTGATTGGGGATGCACT
-GGGGATTGGAGGGGGCAGTTGACATGTGTGGGGTGCATGCAGGGAGGCTTCCTGGAGGAG
-ATAGTCTGAGAGAGGAGGAGGTGAGAAGGGTACTCAAGGATGAGAAAAGAACAGAAACAA
-AGGCTTGGAGGTGGGGGAAGTGATATTGCCTTTAGGAAATTGATAGAAAATCTGTAGCTG
-AGATAGTGTGGGGAAGGTATGGCCAGAAATGAGGTGGAAAGTGGAAGCTTGGCCTGGGGA
-AGTGGTGGAAAGCTCTGGACTTGAACCATGACCCTGGTTCTGTTCAAGGCAGGGCTACTC
-TCTGCAGGGCTCTGAATTCTCCAGATTTCCCTCTTACCTTTCCGAACTTCCTGCGGTGGC
-CAACCCCTAAAATAGCCCCCAGTAATCTTTGAGTCCTAAtaaccagtaggattttgtgga
-aatgacagagtgtgacttccaaggctggatcatagagtgtgttgcagcttctgccttggt
-ctctgggtttgatccccccggagaagccagctgccgggctgtgaagtcactcaagcagcc
-tgcagaaaggccacatggagagaaactgaggtcctgcctgcagccagcatggacttgcta
-gtcatatgactgagccaccttggaagtggatcctccagccccaggcaagccttcagatga
-cagcagcccagaatcacctagccaggcctgttctatattcctgacccagagaaactgaga
-cacactaaatgatcattgtgttgtacgtcactaagttttggggtcatttgccgtgcagca
-tcagataaTGAGGGCTTCTCTGTGCCCTTTCTTGGCTTCTTCTGTTGCTTCAGCTGCCAT
-CTGATGAAAGTCTGATGAAAACCAAAGGCCCTCCTCCAGAAAAGTTCAGGTACACCCAGA
-AAGAAATGGGGGTGCAATTTCAAAGGGATCACAGGCCATCTAAAACTAAACCTCAGACCT
-TCAGATCCCGGCCCCCAGTGGACATGGAACCTGAGTGAGGAATGAACAGTGTCTCAGTTG
-CTGAGCTGTGGGACATGGTGGCTGCTGCGGGGTCTTCAGCTTGGTCATGGCAGGGTGCCC
-ATGGCCTACATTCCTTTCTCCTCCTCTTCTCTGTGTCCTTGGCAGGCTGCCCCTGCAGAG
-GAGGACCGTGGGTGCCCAGACTGAGTAGGTAAGTTTAGCTCTAAGAGAACAGGTTGAGAG
-AGCCCATCGGTTGTGTACAGGCAACTTCTCAGCCAAGCTCTGCCAGTTGCTGGTGTTCAT
-ACTTGGCTGATGTCTCCACTTCAATACAGAGCCTGCAGGGGATGCAGGCTGTGAATGCAG
-TCCCTGGAACCAGACTGTGGGCTCagccatgagacctgggggatgtacttcaccttcctg
-acttgggcttttcaacttggaattggaggccagaagtccaccctgaagcgtggctgtggg
-gTGGAAACAGGCCCTCCAGCAGGGCAACAGCAGGGGCTCCTTGCCTGGCAGCCCCTCCGG
-TTCTTCAGCCCTTAGCCTCCCCTCTCTGGCTGTGGTCAGTGGCTGGCTCACCAGCCCCTC
-TTATGGCAGTCACTGCTCCAGAGTGCCAGGATTTCCCAGTATGGTGGCCAGGGCTGTCCG
-GAGCCCAGCACGCAGCTCAGGAAGCAGCTCAATGCAGGTGGGACGTCAGTGGGAGCAGAG
-GGCAGCCTCCCTCCCCAGACCCCTGAGGATGAGTCTGTCTCCCTCCTTGGTGCTAActtc
-tctctccttcttacatctccacttctttcttcttcctttatcttctctacctccttctct
-cttctaccttttcccttcttttccgctttttccttttttcatcttcattcttctcttttc
-tttcgtctttctcttcccctttcctcctctctttgtctagtccttcttccccctcacctc
-tccttttcctcctcttcCGTTTcataatgattaagagtatggcttctgatgtcagcctcc
-ctgggttcgaatccctgctgtgccacacactggctgcgtggcgttgggcaagccacttaa
-tttctctgtgctttggcttcctgagctgtacagtgggatgctaacagtgtctctcttgaa
-gggtGCCATGGGTGCCAGGTGAGCGTTAGCTGCTTATCATTCGTGTTCCTTCCTCCCCTC
-CTCTTCTTCTCCTCCTGGTCTTAGAAGTCTGTCTCCCTCCCTCTCTCCAAGCCCTGTGAC
-TCGCCTCTTACGTCTCTCTGCCCAGCATCTTGGGCCTGTCTCTGGCCCCTGCCCTGCTGC
-TTCATCCTCTCACTGCACGCACAGGAAGGAGAGCCCAGGCCTGGGGCCAGGTTGCCCCAT
-GAACAGTTGCTGAGCCAGGTGGCTGGAGCTCTTCCCTGGGGCCCCGCCCACGATGAGTTC
-AGGAGCTGCCTTTGTGCACCCGTGACAGCCTCTCCTGGCGCCTCATTTGGCAGAGCTGTG
-CATCTGGCCCAGTTACTGTGGTAGCCTTGGAAGGCAGAGTGCTCTGGGGCTTCCTTGTCA
-TCTACCTGCGTGACCCTGCATGAAGGGTATGCCCAGCCCTCAGCTGGACTGCCAGCCCCA
-CAGGCACCCTTGGTGCCCACCACACAGCAGGAGCTCATCCACAGATGGGCACAAATAGTG
-ATACCAGACAGTGCCTCtgagtccttgctgtgctaggcactgttctaagtgcaaattccg
-ttcatcttcacagcaacccttgcagtgggggctgttaaccccattttagagatgagcaaa
-ctgaaacacagaaaagcataggaaattgcccaaagttgaatgaatgaatgaatgaatACA
-ATGACAACTTAGGAAGGAAGGCATTTTACTGAAGagtgacaggcccacggtcacacagat
-agtaagtggaaaaaaatcagggctggaactcatgactccaaCATCACCTCCCACCTGTCC
-ATAAGCCCAGTGACAGCAAGGCTGGCACTCCCTCACACTTGGGGTTGAGGCCAGTAagag
-ctgcatttgtggaacactggccaaagcaaaccctctgtgctgagggcacttcagccagtg
-tctcaagcctgtctgcacttcttcttttttttttttttgagacagactctcactctgttg
-cccaggctggagtgcagtggcgcaatctcggctcactgaaacctctgcctccccggttca
-agccattctcctgcctcagcctcctgagtagctgggattacaggcacgtgccaccatgcc
-cggctaatttttgtatttttagtagagatggcattttgccatgttggccaggctggtctc
-aaactcctgacctcaggtgatctgcctgccttggcctcccaaagtgctgggattacaggc
-gtgagacaccatgcccagtcaactgaagttctttgagagtactgttcccattttccagat
-gaggagcctgaggcccagcgaaggcgagcaacatggccaaggtcacacagccagtaggtg
-TGATTCCAAAGTCCCACTTTCTGTCTTCCATCAGGTAGTACTATCTGCCTTCCACTATGG
-AGGGAATGTCCCATTGGGAGACGCCTAGGATGGGGGCTAAAGAAAGACAGGCAGGCCCGA
-CACCAGCCTCTCTCTCTTCTGTCTGCTGTCAACACTATATCTTGGTGCCATTCTGCCCAC
-TATTTGTAGAGAGGCCTGGGTACCAGCCTCTTCACTTTGTCCTGGAGGCCAGGCCAGGCA
-AGGATCACTGTACCCACTTttctttccttccttccttccctccctccctctctttctgcc
-ttTTTATTAAGGTATAAACCACACAAAATAAAGTACATAGagccaggtgtggtggctcac
-gcctgtaatcccagcactttgggaggccgaggGACCCCCCAGCCAAAGCCTGGAGCTCAG
-AACACAAATGCTCCCCTTGTTGAGAGTGGGGAAAAAAATCTCTTTTCAGGTGCCAGCCTT
-AAAAAGAAAGAACAAAAAAGGTAACTCACAGATGACCGTGATATGTGACGTGCATCTGAG
-CCCTTCACACAACCACAGAACTAACTGTCTGCAGCTGCCACAACAGCTGACCCCTCTGCC
-AGGCAGAGTTTGCTATCAACCAGTAACAGCTCCCAGAGGTTTTGTTATCCCTCTGTAGAA
-ATGGAGGCTTGAggccaggtgcagtggctcatgcctgtaatcccagtactttgggaggct
-gaggcaggcggataacctgaggtcgggagttcgagatcagcctgaccactatggagaaac
-cctgtttctactaaaaacaaaaaattagccaggcgtggtggcgcatgcctgtaatcccag
-ctaccagggaggctgaggcaggagaatcacttgaacctgggaggcggaggttgtggtgag
-ccgagatcgtgccattgcactccagcctgggcaacaagagcgaaagtccatctcaaaaaa
-aaaaaaaaaaaaaaaaaaagaaaTGAAGTCTTGATTGACTGAAGTAGGAGGAGCCAGCGC
-ACAGGCTTTGGAGGCAGAAGAGCTGGGACCAGCTCTGGAGGTTTGGGAACATGACTCCAC
-CTCCCCGAGCCTCGTACTGCTGACCAGATTGCTtttgcaagcattgtactacatcttcac
-acaatgctgggaggcagctgttaccaaccccatcttacagccggagaccctgaggctcag
-ggaggtaagggatgtgtgcagagacatgcaCAAAGTGGAAAAATGTGAAAACAGACCTCA
-TCGTGCAGTGTTATTGTGCAATTTGAATTGAATGAGGGATAAGAATGTGAATGGAtgcag
-tccacagtaggtgcttaagtcttgcatggggtctaatagccggtgagtggcaaaaggaga
-acttgtacccagatctgcctcaccccagagcccacctctgagcctctTCATCCATGGGAA
-GCCATCAtcagcatggtgcctggcaccgagtgagcctttgagaaagggtaactGGgtcaa
-aaattattttcagaaagttgaaaacatggatcttatacaaatgtatagtgagcacatgtc
-aaagtgttatttaactcattaaggatggaaccggtaggatggcaaagctgactcaaagga
-ggataaaatggcaaagttagctacgacataggttaatgtcttacagggcaccaaaaccat
-aagctttagcgttatttcttctacaggtcagaaatcatttgcaactcgtgcactttttac
-aagttaccaggtaactttgcttaggatcaggtgacccaggctcatcggacactgccttcg
-cttgatattgaaagggcacacagacaccctttttgtcttatttccaagttttggatattt
-tttctttaCAGTTATTATCATTCCACTTCTCTCTGACGAAAGGCTGTTCACAGGCCTCAC
-AGGTTCCCAGGAGCCCAGGGACACGCAGACCCCACCCCACCCATTCACACAAGGACTCAA
-GGACAGAGCCTCTACCCACAGATGAACTTGGGTGGTGCACAGGCACACGAGCTTGATGGC
-AGGGCACGCCCAGGCTGAAGGGGCCGGGTGGGAGCTAAAACGTGTGGTCTATGGTAGCCC
-AGCCTCTTTCCTCAGCAACCACGCCATGAAAAGATCCCTACATTATTTGTCAGGTAAAAT
-AAAGCGACCCGTAGCTAGTGGCGCGAGATTCTATCCAGCTTAATACGTGTGTATGTGCAG
-ACACATTTATGAGTGTGCATGCAGAGAAAACTCTCTGGGGAAATACCCCCTGAACTGACA
-GCCATGGGGAGTGAGGGTGAAGCGGAAACAATCTTGTAAAAGAAATTCAAAAACCGAAGC
-CCACTGCATTGTTTAAATTGGTTACGTCCAACTTGTTTTCCTGTGTTATCTGTCGCCTGT
-TAATACACACACACAAACACACACATAATAGAATGGGATAGAatatctatatatatctaa
-tatatataatatctaatatatataatatctaatatatataatatctaatatatataatat
-ctaatatatataatatatatatagagagagagagagagcgagagagagagagagagggag
-agacggagtttcgctcttgttgcccagactggagtgcaatggcgcgatctcggctcaccg
-caacctccgcctcccggcttcaagcgattctcctgcctcagcctcccgagtagctgggat
-tacaggcgtgcgccaccacgcctggctaaattttttttttttttttttaatttttagtag
-agacggggtttctccgtgttggccaggctggtctcgatctcccgacctcaggtgatccgc
-ccgcctcgacctcccaaagtgctgggattacaggcgggagccaccgcgcccggcGGGATA
-TTATATTTCCATAAGGCCCTCCGGGGGCCTGGGAACGGACTGGTGCTTGCGTGCGGGGCT
-TTTCCACTGGTTCCCTTCCGTACTCGGGCTTCCCCCGCTGTTGTTACTCCCTCAACGGGA
-ACACAACTCCACCGCCGCCTCCGGGACACACCCCCGCCGCGTGGGCCGGGGTCCGGGACG
-CGCGCTCAGCTCGGCCCCGCGGGGGCGGCGCAGGAGGGAAGGGGGTGCGGACCCCGGAGG
-CGCCGCAGGAAGCCCTCGCCCACCCTTCCCGGCCGGGCCGGGTCCGCAGCTGACGGTGGG
-GGTGGGGAGCAGACGGGCGGGGCGCCGGCCGGCTTGGGGGTCCCCTGGTCCCGTCCAGGG
-GGCTCGGGCCGACTCCGGGCCAGCTGCGGAGGCGGGGGAGGGGACCCCGCTTTCCATGGC
-AGTGCCGAGGCGGCGCGCACAAAGGCGCCGCGATCAGCGCTTCATCGGTTCGAGTCAATT
-ATCTGAGGCGCGGAGGCGGCGGGCGGGGCGAGGCGATTCCCCGGTGGGGCTGCGGAGCGC
-GGCGCCGAGACTCAGAGGAGGGGGCGCTGGGGAAGCGGCTTCTCCGTCTCCTGCTCCGCC
-CCGGGCTTCGTGGCGAGGCGCCGTCGCCCCCTGGTGGGGCCTCATCCATTCCTCGCTCAC
-TCGCTCGTTCACCTTTTTCTCAACCTTACAGCGGGTGGCTCTACGGTACGAGCTGAGGGT
-GAAGTGCTGAGAACAGGGCAAGCGGGCCGTACCTTTAAATGCCCTGTCGGGAGCTGGGCC
-CCTCTGAGTGGCCAACCTCACCAGGAAAGGGCGCTCAGCCTCGCGCTGCAGATGGACTTG
-GAAGCAGACCGTCAGAATGCAGCCCTCCCTGCACGTGATAGAGTAAGGGCCGCACAGGGG
-ATGAGGGCCCGGGGAGGCCCTTCGGGAGAGGAAGAGTCCCAGATGGCTCTCTGGAGGAAG
-TCTGGCCTAAGATGACCAGGTGAAGGGGTGGGGGTCCAGGGAGATGAGGGCGTTGCAGGT
-AGAGGTTTCAGCTATTGCAAAGGGGTTGCAGTACGGGCAAGTAAGGTGCACTCTGGGGAG
-AGTAACCTGTACTTACTGTGCGAGGGGAAGGGAGGTGATCAGTGAGGTAGGTAAGTGGGC
-CAGGGCCAGATGGCACAGGGCCACCTGCAAGCGTGGGCTGAGGGTGGGTTGTCAGGTCGT
-TTCATCATTTCCAGTTTATCCTTCTCCCCTTTAGATTTGGAGAGGATTTGGctgccctca
-cccttgtaagggtttaggcatcattcgcccttgactcctgtccagttgtctcactggtct
-ccctgtatcccttattttgcccttcaatctgcctgcacccatcctccaaaatgacctttt
-taaaagcaaagctcggtggcactacttttcaaaatcACAAATGCACAGGATCTGTAACCT
-GCTGGTTGCACATGACAGAAACCGCATAATAATCATGGGTTAggccgggtgtggtggctc
-aagcctgtaatcccagcactttgggagcctgaggcaagcggatcacttgagatcaggagt
-tcgagaccaggctggccaatatggtgaaaccctgtctctactaaaatacaaaactttgct
-gggcgtggtggtgtacaccagctactcaggaggctgaagcacgaggagaatcgcttgaac
-ccaggaggcagaggctgcagcgggctgagatcacaccactgcactccagcctaggtgaca
-gagcgaggctccttctaaaaaaaaaaagaaaataaaaaaaaaGTCCTGGTGTTAGAGGCA
-TTTTTCTTTtcctcctcctcctcctcctgctcctcctcctcctcctcttcttcttcttct
-tttctgagacagagtctccctttgtcacccaggctggagtgcaatggtgtgatcttggct
-cactgcaacctccacctcttgggttcaagcgattcttctgcctcagcctccagctaattt
-ttgtatttttagtagacatggggtttcaccatgttagccaggctggtcttgaactcctga
-cctcaggtgatccacccgccttggcctcccaaagtgctaggattacaggtgtgagccacc
-acactcagccAatagaggcatttttctgtcatgtaaataaagtctaaagcaggcagtcta
-aaactggcatggtgctctacggttcaggaacctaaactccttttgtcttattatgctacc
-ccctcagtacatggtttccacttcatggcccaacatggctgctcaaacagcagccctcac
-atctgcatccccagatggagagtctttttttttttttgagatggagtctccctctgtcac
-ccagcctggagtgcagtggcctgatcttcgctcactggaatctctgcctcccaggttcaa
-gtgattcccctgctcagcctcctgagtagctgggaccacaggcacgtgccaccacacctg
-gctaattttttgtatttttagtagagatggggtttcactgtgttagccaggatggtctcg
-atctcctgaccttgtgatccacccacctcggcctcccaaagtgctggggttacaggtgtg
-agccaccgcgcccagcccccagatggagagtcttttagtcattagaaaggagaaaggagc
-caaggagggagggaggttcccttaaagactctttcggaagtcacatacaatcttcttgtt
-gatgttccattggctaaacttgatcacatcactacactaagctacaaaggaggctgagaa
-atatgatctgtgttctaggcaccatgtgtccagatgaaaattgaggctcttatttcaaag
-aaaaagTTCAGTCCATggccaggcgtggtggctcatacctgtaatcccagcactttggga
-ggccgaggctagtggatcacctgaggtcaggagttcgagaccagcctgggtaacatggaa
-aaaccccgtctctactaaaaatacaaaaattagccgggtgtggtggcatgtgcctgtagt
-cccagctgctcaggaggctgaggcaggaaaattgcttgaatttgggaggcacaggttgca
-gtgagctgagatcacgccactgcactccagcctgggtgacagagcagaactctgtctcaa
-aaaaaaaaGTATCAGAAAAAGCGCAGTCTGGATATTGGGAAATGACCATCAGTCTATGCA
-TGctcaggagttccatgtctagcagtgtgtcctataggtttgcttaacccatgtgacatt
-tgacacgtttacaaggttattcactgcagcattgtgacagcaaaagactggaaacaacct
-aagtgtcctgtaataggggactggttaaacaaattatgggacatttatacaatggagaat
-gatggccacaaacacacatgaggaaactctcaatgcagtgatatgaaatggtatttaaga
-tgtTTcactttggaaaacagtttggcagtttcttatagagttaaacatacatctctccta
-tgacccagcaagttcacctctaggtttttgctcaaaataaaaatatatatgtatatatag
-ctccacaaggacttctatgcaaatgttcaacagagtttaacatgtgatagacaacaattg
-gaagtgacccaagatcgaacagccaatgaatggataaactggtgagtcaaatattacact
-ggagtttaaatgagtgatccaatgtctgcaaccacatggatgaatctcaaaacatgctga
-atgaaaacaagctggatacaaaaaatagcatgttgtaatgatgccgtttatatgaaattc
-tagaagaggcaaaacagaccaatctatgatgacagaaagcagagcagtggctgcctctgg
-ggtggagggatggactgggaaggagcataaaagaatttcttgggatgctggaaatgttct
-gtatcatgattggggtgttgattacacaggtgcatTTCACTGCATGTAAATTATACCTTG
-ATATTTTTAAAAAGCAGGGTGCAGAACAATGTTTAAATTATGGAATCCGGTATGTTTAAA
-AAGCAAGGAAATTTGCTTGTATCTGCATTGACTGTCTAGAAGAGACTTGTAATAGTGATT
-GTCGGTGGGAGAGGAACTGGGTAGCTGGGGGCTGGGGAAAAGGGACACTTTGGGCCATAC
-CCTGTTATACCTGTTGAATCTTAAACCAGTTGAATGTACTACCTAATTAAAAACTAAAAC
-TGAAAAGATCAGTTAGATGCACACGTGACATCACCACATTCATGTTTTAAATCTCCTAAT
-GGCTCTTCCCGGCAATCTGGACGAAGTTCAGACTCTGAGCTGTCCTGGCCTTATGTGGCC
-CCACTCAGGCAGCATCCTCTCCAACCACTTTTCTGTTCCCTGCAGAGACAGCTCAGTGCC
-TGGCTCCCTCTGGTTGGCCTAAGTGCATATGTGCCATTCCCTGAGTGCTCAGCTCCTCGG
-TGAATTCTCCCCAGCCCCCTGCCTGAGTTGGTCCCTCGGGTCTCACTGGACCTGCTGCAC
-TTTGCCTTCCCCCTTCCTCATCTATCAGATCAACACGTGTTTCCCAGAGCTCTCTGTGAG
-CTGGACCCCAGAGTCCTGGAGATGTGTGGGAGCCACTTTTATGGGGGAACCTGCTTCCTT
-GTTTCTGCTTCAGACAGCAGGCTTCTCCTGCCCTGAGACTCCCAGCAGCGTCTCCTCTTC
-CCAGGCCCAGATCTGGCCTGGGGTAGAAACTTTGATAAAATGTGCTGTCTTTAAGTTAAA
-TATGGCTCCATAAAGAATGCATTCCATGacaagaaccaacagagccctggtttcttagaa
-gatacagagaaaacacactgttgtgggagaattgtgtctgccaaaaagatacatcccagc
-tctaaccctgggacctgtgattgtgaccttatttggaaacagggtttaggcagatgtagt
-caggtcagggtgaggtaatactggattagagtgggctactccaatgactggtgcccttaa
-agagggaaacagacagaggagaacaccacgtgaccacagaggcgaagatgggagtgatgc
-atccacaagccaaagaaggccaaggaggcttgcagtcataaaagctggggagaagcgagg
-aagtgtcctcccttagggctttcagagagagcatggccttgccagcaccttgatttcaga
-cttttagcctccagcactgtgagaatacatttcagttgtcttaacctacctggtttgtgg
-ttatttgttctttttttaaattttttatttatttatttatttttgagacagagtctcact
-ctgtcacccaggctggagtgcaatggtgtgatcttggctcagtgtgacttccaccttctg
-agttcaagtgattctcctgcctcaggctctggagtagctgggattacaggcacctgccac
-cacacctggctaatttttgtattttcaatagagacgtggttccactgggttggccaggct
-ggttttgaactcctggtctcaactgatccgcctgtcttggcctcccaaagtgctgagatc
-acaggcatgagctaccgcacctggcctgtggttgttaactgtagtcccaggaaatgaata
-cacacacaaaaccagttaatacctaagacaattccagctagtggcaagtgctttggaaaa
-acaaaacaaaacaaaacaaaacaaaacaggtgagaagggcgtgggatagagagggactgg
-gaacggtgccacattagccagggtggtcagggaagccctcttggaggaggaggcatttca
-gtggagaGGAGAAGCCCAGCATGTGAGGACCAGGCAGAGGTGCTGGTGAGGGGGCACTTG
-GTGGGCGTGAAAGCTACTGGATGCAGCTCTGACGATGGAGGATACCTGACTGGGATTTTG
-GAGGAAGTCTCCAGGAATGAACCGGGAAGGGGCTATCCTCTCTTTGCCTCTGCAGGTCTC
-AGAACCTGCTGCATGGCTGCTGCAGGCTGTCCCTCGGCCTAGGCCGGCTGGCAGCCGATG
-AAGGAGGCCAGCCTCGCAGCTGACATGCTGCTCTCTAATTGTGATTAACTACCAAGTCCT
-CTCCTGCTCCGGCCTGAGGCCGCTGGTGTGACAGCTGCAGAGTGAATCAATGAGGCCAGG
-AAGGGGTTAATGGGCAGCCCCTCCATCTGAGCCCTTCAGACAATAAGGGGAGGTGGGGAG
-GCCTCTGGTGGGGGTGTGTGGCATCAGCTGGGGTGAGTGAATGGAGGGGACAGAGGCCTT
-GTCCCTGGGGACAGGGTGTGAGTGCTCTGTGGGGAGAGGGGTCAGACCCCCCTCCCATTA
-TTTTCATCCACCTCCATCGTCCTCTCCCCTCCCCCACCCAGCCAGAGCATCCCAGACAAC
-TGCCCTCTTGGCTCCAAAGTGTGCAGCATCTTCAGCCTTACGGAATTCTGAAGCAGAAAT
-TCTAAAAGCCAAAGAACTGCAGAATCGTGACATGTCACCGCTGTGGGAGAGTCCGTCTAG
-TCCTGTCATTCTGAAACTTTCTTTTGCAGTGGAACCCACAACTCCCACCCCAGCTCATTT
-CCCCCCAAAATAATAGTGCATTGATAACATTGAGAACAGACCCTGGTACCAGCCGGCCTC
-ATTCATCCTTCATTCAGCCCCGGTTCTACCACGTACAACTAGGGTAACTTGGGGGTATAA
-TGCATAGTTTATAGgtgtgtgtgtgtgtgtgtgtgtgtgtgtCTTCCCtagagacagagt
-cttgctatattgcccaggctggtcttgaactcctgggcacatgcagttctccagccttgg
-ccttctgagtggctggCTCACACCACCGTATTCAGTagttccgtaggttttgacaagttt
-gtaagttatgtaaccaccaccacaattaatatatagaacatttccatcgctgaaaaatgt
-tgcctcatgccccttgtagtcaatacccttcccTGTGTTACCTGATATGGTAGCATGAAT
-AAAGGTCATCTAGAGTTAGTGACTCTAggccgggcagggtggctcatacctataatccca
-gcattttgggacgccaaggtgggtggatcacttgaggccaggagtttgagaccagcctag
-ccaacatgacaaaaacccatctctactaaaaatacaaaaatgagccaggtgtggtgatgc
-acgcctataatcccagctactccggaggctgaggcaggagaattgcttgaacccaggagc
-tggaagttgcagtgatccgagatcacatgactgcactccagcctgggcaacagcaaggct
-ccgtctcaaaaaaataaaaaaaataaaaaaaTTAGTGAttctaatccttgaactgtgtaa
-atgttaccttatttggataaaggatctttgcagatgtaattaagaggcagaggttggagt
-gatgtggcccaaagcaaagaacaccaggaggctcccagaaccagaaggggcaaggaatgg
-attctgctctagagcctccagaggtagagtggctctgccaacaccttgatttcaaatgcc
-tggcttcagaactgaaagagaatacacttctgttgttttaagcctctcagtgtgtggtac
-ttttttacagtagtctttacaaacaaatatacctagcaaccaccatgccttgttttctat
-ctgtataagttttgcctttgcaaggatgttacatagacagaatcctgcagtatgaagctt
-ttgtgagtttggcttctttcactcagcataacacagttgagatgcatccatgctgttgca
-tgcatcagaagtctgttccttttggatgctgagtagtatttcactgctggatacaccaca
-gcttatccattcaccagttgaaaggcatttgggtcactcctaattgggagcattataaat
-aatgctgctatgaacatgtgtgtatagatctctgtgtggacatacactgtcatttctcca
-gagtagataccctggagtagaattactgggtcatattgtaagtgtatttataattttatc
-agaaattattacccgggcatggtggcatgcacctatagtgccagctacttgggaggctga
-ggcaggagaatcccttgaacccagtaggtggaggttgtagtgagccgagatcatgccact
-gcactccagcctgggcaacagagtaagactctgtctaaaaaaacccaaaaaaccaaagaa
-caaaaCTACAAAGAATCTGATgtggctcatgcctgtaatcccagcactttgggaggccga
-ggttggaggattgctggagctcaggagtctgagaccagcctgggcaacatggcaaaaccc
-gatctccactaaaagtacaaaaattagttgggcgtgatggtgagtgcctgtagtcccagg
-tacttgggaggctggggtaggaggatcacttgagggtgggaggcggaggttgcagtgagg
-tgagattgtgccaatgcactctagcctgggtgacaaagtgagaccctgcctaaaaaaaac
-cccaaaaaacagaaagaaactgacaaactgttttccagtgtagctataccattttgcatt
-ctctccagcaCTTAGTATTGTCAGGTTTTTAAAAATTTAGATATTTTAggccaggcgctg
-tggcttatgcctgtaatcccagcactttgggaggcagaggtgggcggatcacttgaggtc
-aggagttcgagacgagcttgaccaacagggagaaccagatacttgggaggttgaggcagg
-agaattgcttgaacctgggaggcagaggttgcagtgagctgagatcacaccattgcactc
-cagccctccagcctgggcatcaagagtgaaactctgtctcaaaaaaaaaaaaaaaTTAGA
-TATTTtaataggtatgtaacaatcatagggttattgtgagaatgaaatgaacatatctga
-gaatactgcctagcacatggCTCCTGGCTTGGAAGGGTAAGCTCCTCTTATTGCAATCAC
-TATGGGGTTATGTCCTGTCCAGGACAAAACCAGAGGTGAAAACTCAAAAAAAAACTCAGG
-TGGGCCAGGAGGAGGCTGTGGGGACCAGTGAGCTCATGTCCCATCttgaaggtcaaggtc
-ccgggaagcagctcctgagatggaaatctgcatgtgggtggttttccaggtagtgctctt
-aggatcttggaggagccagggaagcaggctcgggcagttgcaatagaggccttgaccagt
-cccatcaggagctgggccagcccttaggacatgtcacagcctgagacagggaggtcatgc
-ctctgtactctgcaagatcagactttggagtggttgcccacaggagagatgttattaata
-tcttgggtgaagcagcccttttaagctgGTGCCTTGATCCGGGTGATGGCTTTGAGGTgg
-aaaacaagcctgagtggtttcagctttcaacttttcaagagaagctatgtatctagattt
-tgatgttaactctccaaacttttttaaaatgctggaaattctagacttttcaaacctgct
-gtgaggggctcacatgccaggcacaagggctggagggggcctgaggctgcctgtCGATGC
-CCCTTGATATAAAACCAggctgggtgcagtgccttatgcctgtaatcccagcacttcggg
-aggccgaggtgggtggatcacttgaggtcaggagttcgagaccagcatggccaaagtggt
-aaaaccccgtctctactaaaaaatacaaaataataataataataataataataataataa
-taattagctgggtgtggtggctcacccctgtaatcccagctactcgggaggctgaagcag
-gagaattgcttgaacccgggaggcggaggttgcagtgagccgagatcgcgccattgcact
-ccagcctgggcaacaagagcaaaactctgtctcaaaaacaaaacaaaacaaaaacaaaaa
-caaaaaAGGAAAACCAAACAAAAAAACCCCCAAAACCTGCTGTGTCATCTGACATCACGC
-TAGTgtctggttgccgcactggagaggacaccccatggggcaggaatctttgggttttga
-tctccaccacatccccagcatgtagggcagggtccagGCCTGGATGCAGCACGAGAGAAG
-GAACGCAGGGCCCGAATGAGTAATTTGCCTCAGTGTGCAGGTCATTTAATTGCAAAGAGA
-GGAAAAACGACAACCAAaaacaaccaaatgaaaaaatgagcaaaggatttgaatagacat
-ttctccaaagatgtacaagtggccaataaacagaggaaaagatgctcagcgtcagtaatc
-attagggagatgcaaatcagaattgcaagcacgagataccgcttcacacctattaggatg
-cctattaaaaaacaaaaacaaaaaACAAAACAAAACAAAAAAATCAggcagagtgctgtg
-actcacacctgtaatcccagcactttgagaggctgaggtgggcggatcacctgaggcagg
-gagttcgagactagcctgaccaacatggagaaatcccgtctctactaaaagtacaaaatt
-agccgggcgtggtggcgcctgcctgtaatcccagctactcgggaggctgaggcaggagaa
-tcgcttgaacccaggaggtggaggttgcagtgagccgagaccacgccattgcactccagc
-ctgagcaacaagagcgaaactccgtctcaaaaaaaaaaaaaaaaaaaaaaaaaTCGCAGA
-Tctgactgtgtgaccttgggcaagttgcttgacctctcagtgcctccatttcctcctctg
-taacgtgagagtaaaaatactactcatacctacctcgtagggctgtcatgaggactgaat
-aagtgcataggtacagacatgcttaggacagtatcagcacatgcaggaattacatgggag
-ttggctgttaATATTATTACAGGAGTggatcaaatccatctctgccatggacttgctgtg
-tgacctagtgcaggtcactttgcctctcttggtccagttttctcacttgtaaaatgggac
-catactgccactctccatagggcaagtgtgcggattcgaggagctcatatgtgaaaggcC
-TCCTTCAGGCGCAAGGTTGGTCCTTGGTTATGCACGTATGTGAGCCTCTTGGCGTGCCTT
-CATATGTGGGGCATAGGCAAGCACTCAAGTGGCCTGGACTCCTATCTCGGCTCTCAATGT
-CCCCGCTTCCTGGCCTGGGATCAGCAGGACCTCAGTGGATCCACCATCCAGGCACATCCC
-TTTCTTTCCCTGCTTTTTTCCTGCTTCTTGGGCGGCACCACCACCTACTGGCCTAAAGCT
-ACATTGCAGCCAATGTGCACAGCGGGGCGGAGGGAAGGGAATATGGCCTTGGGCAGCTGC
-TGTGCGCAGAATATTTACCTCTGTACACGCTTAGGGTGCTGAGGCTTAGGGAGCTCACAC
-GGAGAGAGCCAGCTGTGAAGCTGGGGTTAGAATCCCTGTCTCCCTTTCACCTCACTCCAA
-ACACCCTCTTAGAATGGGAACTCAGTTCAGGTTCTGCCTTGGGCCCTAGACGATCCACCC
-CTCCCTTCTGAGCAGGGAGCCAGGAGCTGAAGTCCAGGGTCCTTGGAAGTATGTCAGGGT
-TGTCCCCCCAGGGTCCTGATTACAGAAGAAAGAACACTGGACTCAGAGTCCAGAGGTTGG
-GGGTCTAGCTTTGCCTTCCCTATCCCCAACTATCAGCAAAACAGCCTTTGGAAAATCCTC
-ACCCATTTATTCTAGCACTTGTCATTTCGAAATATATTTACTGTGGGAGAGCATTTAATG
-TGAGTGTTAGGTTCTAACGCAAGGAGAAAATTATAAAAATAAACAAAAACTTTTAAAGAA
-CTCCTAAAAATCCTTTAAGTCACTCATAAAGTATAATATGGGCAGTTTTCTAAATATAGT
-CCTTTGCAGCAATAAATGCACGGACCATAAAGAACAGCAGTATATGGTGGTGATTGCATG
-CATTTGCGAACTGTAATTTTAGGTTCTGTTCTCTCTCAGGGGTGTGTGGGATTCCGAGCT
-GTGGATCCACACCCCCACATCTCTCTCACAGCTGGGATCATGTCCAGGCAGAATCGCCCA
-CATTGTGTACATCATTCTCCCTTCTCTCTCTCTTTCTGAGCGCACATAGCTGCATTTCCG
-AAGTTACATAATaaaaacagctaacatttattgagctttcattatgtattaggcctgctc
-gcagccctttgctcacgcattaattcattaattcagataatcctcctaagaatgttatga
-ggtaggtatattattatctcttctctttacagatgaggaaactgaggcactgaatggtta
-agtaactagcccaaggtcaaatagTGTACCACCCAGCCCGAAGGCGTTCACCTTgttccc
-gggtaggatcgcagaactggttaagctaggttaccgatccgggtggtgtcagctgatccc
-tcagctgctgtagtgcaagatctgcaaaatatctcaagcactgatcttaggttttgcaat
-agtgacactgtccccaggaacaacttggggaggttcagacccttgctgtcagaggctgca
-cagcccctaaaccttgatttctaatcttgtagctaatttgttagtcttacaaaggcagac
-tggtccccgggcaagaagtggatcttttcaggaaagggctattgtcataatttcctcagt
-tacaatttttgcaaaggtggtttcaatagccagtgagtggtacagcctgaatttgaaggc
-aggaagtccgggacgagaacccacactcttgactggcatactTGCCACCTGAATGGAGGC
-TCCATAGAGCCACGCGTGCATGCTTGTGTACCTGTTGTCAGCCCGCAAGCTCCGTTAGGC
-AGGCTAGAACCTGATCCAGGTTAACTTTGCATCCTTAGTGCTGGTTCTTTCCATCCAGGG
-CCCCACTCAGGGTATATGCTCAGTGACTGTTGTACAAATGCATAAAGCTCAGTTTGCATA
-AAGCTCACTTCAGCTTCTGTATCTGTAAGACAAGAATCAGagccaggcacagtggttcat
-gcctataatcacagaactttgggaggctgaggcgggcggatcacgaggtcaggagttcca
-ggccagcctgtccaatatggtgaaaccccgtctgtagtaaaaatacaaaaattagccagg
-tgtggtggcacgcatctgtaatcccagatactcgggaggctgaggcagaagaatcacttg
-aacctgggaggcagagtttgcagtgagccgagatcatgccactgcactccagcctgggcg
-acagagcgagactccatctcaaaaaaaaaaaaaaaaaaagaaTCGAAATCAGCTCTTCAG
-ATTGCTGGAGGCTCCGACAAGCCCATTGGTGGGAAAATTCTCTTTAAAGACACTGATGTG
-ggctgggcacaatgactcatcctgtaatcccaacactttgggaggccaaggtggatggat
-cactagaggtcaggagtttgagaccagcctagccaacatggtgcaaccttgtctctacta
-aaaatacaaaaaattagccaggtgtggtgacatgaacccataatcccagctactcgggag
-gctgagatgggagaatcgcttgaacccaggaggcggaggttgcagtgagccaagattgca
-catctgcactccagcctgggcgacagagcaagactccatctgaaaacaaacaaacaaaca
-aaaCACtgatatagtttggatttgtttcccctcccaaatctcaggtggggttgtaatccc
-cagtgttggaaaaggggcctggtgggaggtgattggatcttgggggcaaacatccccctt
-gctgttcttgtgatagtgaatggattcttacgagatctgcttgtttaaaagtgtgtggca
-cctcctcctaccccgctccagccatgtagaacgtgcctgcctccccttcgccttctgcca
-tgattgtaagtttcctgaggcctccccagtcatgcttcctgtacagcctgcagaaccgtg
-agccaattaaacttctttttttaaatgaattacccagtctcagttcattataccaatgtg
-agaacaaacgaatacaGACACTAAATTCTCCTTTGCCCACCTCCTGCTTGGTCCCTTCTT
-GAATTTTCAAGCTGCTCAACCAAGTggcctgcaccagcttgggagagctaatcgtgtgta
-tctgtacccaactctacattcagtaacatcatgtttgtagctcgaaatcagcaatggtga
-gtatttacactatggcaattggcaaatgcttcaaacaggagttttcccctctagagatgt
-taaacgtttgccagGAGGAAATCAATCCTCTAATGGCCACCTTcaaggaggcaacacagt
-ggagtgatcatgcttgttggctctggagccagaacacctgggttcaaagtccagctctat
-cacttaccagctgtgtgaccttgttcagttacttaacctctctgagcctcattagtctca
-ttcatgaTTACGTATTTCATTGGGGACTCAATGCCATCTTCCATATAAGTGCTCTCTCAA
-TTAATGTTATATATTAATATTATCAATCAGCTTAAGAGGTGGGGAAACTTTCTTGTTTTC
-CATCCTAGGAAAGGGAGTGCTGAGGACAGGACTTGCAGTGTCAAAAAGGAACCTCAAAAA
-CGGCAATGTGTAACTGCAGGTCTGGGCCATTTTTGAGGGTCTCTTGAGCATTGGCAGACC
-AGATCTTTATGCCAACACAGGTTGTGCGTGTGGGGGTTAGAGGAGGAGAGGCCTTCTCAG
-TTCTTTGCAGGAAAGGCTACTGTTAGCTCTAGAGCCCAGAACAGATTTAGGGGGAGAGAT
-GATCTAACCAAACTTTCCCTCTGCCCTCGGCTTGCCAGTCTTCTCGCTAGTGAACACTCC
-CAGTGTGAGGTAGAGGGTTCCCTGTTCCACCTCCTTCCTCCCTCTGTAGAGGAGGTATGC
-ATTGGGGCAGGTGTGTGTAAGGCCCTCCTGGGGTACCCCTCCAGGGAATCTTCCCATCTT
-CTCCAGTACTGCCCCATCTGACATCCTGCCTGAAGCCACAGGTTTCCCTTGCAATCACTA
-AAGAAGCAGGAGGGAACCAGCAGAACTCCCTGCCCATGTGCACAGGAGGTGATCCAGAAA
-CTTCAAGGGGAAAAATCCTGCTCTCCACCCCAGCAGGCATTGATTTTTGGCTGCGAAGAT
-TACAGtctctctctctctctctctctctctctctctctctctctctctcacacacacaca
-cacacacacacacacacacTCCTGTGTGCCAGGAGGTTCCTAGAAGGTCCTCACTCCTCG
-CACTCAGGTGCTCCAGGGCTAGCCCACTCCTGGGAGGTGCCCACAACTGACCACGATGCC
-CACAAGACTGTGGGAAGGGTTGCCCCATGTGCCTTCGTGCCCCTCCCACTGGATCCCAAC
-gaaggctcttttcacaacaggaatcagagcatgtcactcccaacctgcctaaaccctcca
-atggctcccaccacttttgatcaagacctaaatcctttctgagtccaccccatccttaca
-gggtctaaccttgcttccatccctgtcttcaccccttattcctccctctgggctcctctt
-caggcccttgaggtgccaagctcactcctgccctgggcctttgctgctgctgtccccttg
-gcctggagcactcttcccTGTCCTTTTTGCCCATGTGAGGCTGAGAGGCAGACGGAATCA
-TGGTTGCTAGTGTAGAgaggccacactactggagtttgtatttcagttctgtcaccttga
-actgggtgacctcacccatctctgcctccctttcctccctctatacagtgggaaagataa
-tagcacctacatcttagggtgttgtgagactgattgagataatCTGTATGGTTTTtggca
-gtttctgaaatgcactgtaaactgtctggttctcctcccatcggaaggtgagaatctgac
-tgctccccttgactctgggtgagagggtagggcaacagcaatgctccatgatttcagagg
-ctgggtcataaaaacggtctgcaggggattcacttccagaacagtggagtgaggaacact
-gcagactgctttctggtgaaaacaactgatgatgatttctaaaaaacaatcatttgaagt
-ctctggaaattgtcctaagagcatacagcaagtgaagaaacacttattcaagaaaatcta
-ctaaatctaggtaagaacagtgagtttgtagaacttgagacacaatccactctctttctc
-ccctccattccattttactgttatggaaactcaactgtgagcagccagggccaagaagat
-gggagtcatttccccccaagctcctagtcgatggggtacagcatctccccaggaagggaa
-ggctgccagcatttgtcatcctcccaacagctatatcttacagaggctaaactccaggta
-ggtgtggctgggagactgggatcttccttcctctacccagtccccactcatagggtggtg
-gccacgccaagtgcagcaggctaaaaatattgaagccccagttgcttttgtcttagctta
-cttgttaaagcagaggttccatgcctggagatgcaagctgagaagaccagagactaagaa
-tactgccccaactcagccctgctcataaagcaagaaggttactctgggagaagtgaactg
-ttgtccctgcctccagctccagagcagtgtcacagatgctttgcccaagagagaggcagg
-tcataacaacacagatctttaaagttgtccataaaggaactgactttctttagaacagag
-tatgcagaaatttaagcctaagagtgccctcagaagcagtggcgattttggtagtgatca
-gggacccaaagttgctatactatatcatcttaaatgttcattttccagcaaagaatttca
-agacttgcaaagaaataaacacatgtgacccatacacagggaaagaccagtcaacagaaa
-ctacctgtgagagtgctcagaggtcagacttgcacggacttcaaagcaaccactgtaaat
-atgttcaaagaaataatggaagccatgcttaaagaataagggaaggtaggctgggtgcag
-tggctcatgcctgtaatccccgcactttgggaggccaagaggggtggatcacctgaggtc
-aggaatttgagaccagcctggccaacatggtgaaaccccatctctactaaaaatacaaaa
-attagctgggcatggtggcaggtgcctgtagtcccagctactcgggaggctgaggcatga
-gaatcacttgaacccaggaggcggaggttgcagtgagctgagattgtgccactgcccttc
-agcctgggtgacagagagagactccatctcaaaaagaaaaacaaaaacgaaaatcaagaa
-taagggaagcggtgatgactgtgtctcatgaacagagaatgtaaacaagaagatactatt
-ttaaaaaacttaatggaaattctggagttgaaaagtgcaaaagaaaaattcactagaggg
-gctcaacagtagacttgagccagcagaaggaagattcagtgaatctgaagacagatcaat
-agagatttcgcagtctgaagaacagagagaaaaatatgaagaaaaatgaacaaagccttg
-gagaaatgtgggacacagctaggtgcaccaacatatgcacaataacatatataacagaag
-gagagcaaagagagaaaggaacagaaaaaaatgtgcaaaaataatcactgaagcctttgc
-aaatttgatgagaaacatgaattatgcattgaagaagcttaatgaactccgagtagaaca
-aatgcaaagtggtcaacaaccagatacataaaaggaaaatgttgaaacccaaagataaaa
-agaaaatcttgaaagcaacaagagaaacacagctcatcacatataagggaacaccaaata
-agaccgacagcagatttctcatgtgaaacgatggaggccctaaggcagtgggacaacata
-ttcaaaatgcataaacaaaaactaccaagcaagaatcttacatccagcaaaattatcttt
-caaaagtgatgatgaaagagatatttccagataaacataaactgagaatttgttgccagg
-aaacttaccttacaataaatactaaaggaagttcttcagacagtaatttgaatccacaca
-cacaaaagccaaagtgctctgggaaaggcaagtagatcgttatgaaaggcagtaagaatg
-catatttattcaccttctcttaacagatttttaaaaataatttgtatataattgtattgt
-ggggccaagacatatagaaatgtaatatattttgataataatagcacacaggaggtgagt
-gggagcagagctgtattggattaagaaagtgagaccagatgggaactggaatccacagga
-acaaatgaagagaaccagaaattataagtaagaaagttaataaaacaaagtcttttaata
-tatacttgctctcctttcttctctcagcttcttcaaaagacataaaactatataaagtaa
-taattataacaaagtactgttggttttgtaacatatgtagatgtaatacatataaaaaga
-atagtgcaaagaggaagaagagagaatagtgctatataggagtcaccgggcacggtggct
-cacaactttaatcccagcactttgggaggccgaggcaggccagtcacttggggccaggag
-ttcaagaccagcctggccatgtatctctacatataatagattgaaaccatgtatctctac
-gtataatacaaaaattagccaggtgtggtgtcatgtgctggtaatcctagctactgggga
-ggctgaggagaattgcttaaacccaggaggtggaggttgcagtgaaccaagatcacgcca
-ccacactccagcctgggcaatagcacaaaaatctgccaaaaaaaaaaagatagaaatata
-taggagtaatatttctatatatcactggaattaagttactgtaaatctgaagtcaattct
-gataagttaaaacctatatagtaagcctaaactggtcattaagacaaacaaacagaacag
-tgaaaaagctattaaagaaatttaaggctgggcacggtggctcacacctgtaatctcaac
-actttgggaggctgaggtaggtggatcacctgaggtcaggagttcgagaccagcctggcc
-aacatggtgaaaccccctccctactgaaaatacaaaaaattaggtgggtgtggtggcagg
-cacctataatcccagctacttgggaggctgaggcaggagaattgtttgaacctgggaggt
-ggaggttgtagtgagccgagatcatgccattgcactccagcctgggtgacagaatgagat
-tctgtctcaaaaacaaaaacaaaaacaaaacaaacaaaaaatccaaaaaacagaaattta
-aataatacactagaaaatattcgtttagtgtaaaagatgtcaaggaagaaaagaggaaca
-aaaaagacatgagacatatagaaaataaaaagtcaaatgacagacataaatccaacttct
-ctcaatgatagcattaaatgtgattggatcaagtcaaaagggagagatttcctgactaaa
-taaaaagccaagatcaactatatactgtgtgcagaagatacactcaagattcaaaggtta
-aaagtaggttgggcgttaaaggctgaacaaaatatatcacgcaaacagcaaccataagaa
-aacttgatttgctatattaatatcaggaaaaagactttaaaatgaaatatgttacaaaag
-ataaagaggaacattttataatggtaaaaggatcaatcgatccattgggaagacataaaa
-attatagacagatatgcccctaacaacaaagccccaacatgtgtgaagcaaaaacagaaa
-gaattgaaggggcaaatagacaattcaaaaataatatttggagacttcaaaaccccactt
-ttaataatgaatagaacaactaaacagaagactaaagaaggcaatagaggctgggcgtgg
-tggctcatgcctgtaatcccagcactttgggaggcccaggcgggcagatcacctgaggtc
-aggagttcgagaccagcctgaccaacatggagaaaccccgtctctactgaaaatacaaaa
-ttagccaggtgtggtggcgcatgcctgtaatcccagctactcaggaggctgaggcaggag
-aatcacttgaacctgggaggcagaggtttccgtgagcccagatcacaccactgcagtcca
-gcctgggcaacaagtgcaaaactccgtctcaaaaaaaaaaaaaaaaaaaagaaaaaaaaa
-agaaggcaatagaagacttgaacaacactaaaccaacaagacctaaaagacatctataga
-acatttcacacaacaacaagataatacacattcttctcaagagtacgtgaaaaattattt
-aggacagactatatgttagaccacaaaacaaacatcaatgatttttttatcttttatttt
-tttttttaatatggagtcttgctctgttgcccaggctgaagtgcagtggcatgatctcag
-ctcactgcaacttcagcctcccgggttcaagcaattctcgtgcctcagcttccagagtag
-ctgggattacaggcacccaccactatacccagctaatttttatatttttgtagagacagg
-gtttcaccatgttcgctaggctggtcttgaactcctgacctcaagttatctgcctaagtc
-ggcctcccagagtgctgggattacaggtgtgagcaaccgtacctggacaataaattttaa
-aagattgaaatcatacaaagtaccttctctgactaaaatggaatgaagctagaaatcaat
-agaagaaaaccaagataattcacgaatatgtgaaaattaaaaacacactcaaacaactaa
-tgtgtcaaaatagaaatcacaagggaaattggaaaacaccatgagggaatgagaataaaa
-atataacataccaaaacttacgtgattcagtgaaagcagaaaaatttatagctgtaaaga
-cctgcactaaaaagggagaaaggggccaggcgtggtagctcactcctgtaatcccagcat
-tttgcgaggctgaggcaggcggatcacttgaggtcaggagtttgagaccagcctggccaa
-catggtgaaaccccatctctactaaaatataaaaattagctgggtatggtggcacatgcc
-tgtaatcccagctacttaggaggctgaggcgggagaatcgcttgaacgcaggaggcagag
-gttgcagtgagccgagagcgtgccactgcactctaacctgggtgacagagtaacactccg
-tctcaaaaaaataaaaaataaataaaaaaatttttttaaaaaggagaaaagtctcaaaac
-aaccacctaactctacaccttaaagaactaCAGAaagaatacaaaaattagccgggcatg
-gtgatgggcacctgtaatcccagctactctggaggctgaggcagagaatggcatgaacct
-gggaggcagagcttgcagtgagctgagatcgtgccactgcattccagcctgggcaacaga
-gcgagactccgtctcaaaaaaataaataaataaataaaaaataaaaagaactagagaaag
-aagcacagactaaacccaaagctagcagaagaaagaaaataattaagattggagtggaag
-taaacaaaatagagtatagaaaaacagtggtaaaaaaatcactgaagctgggcatggtgc
-cacatgcctataatcccagcactttggaaggcagaggcaggtggatcacttgaggccagc
-agttcaagaccagcttggctaacatggtgaaaccccatctctactaaaaacacaaaaatt
-agctgagcctggtggtggacacctgtaatcccagctatgcgggaggctgaggcaggagaa
-tcacttgaacctgggaggcagaagttgcagtgaactgagatcatgccactgcactgcagc
-ctgggcaacagagcaagaccctgtctcaaaaaaataaaaaataaaaaaataataaatcaa
-agaaacaaaaaattgatcaatcaaattgacaaacctttagctaaactggctaagaaaaga
-agattcaaattactaaaatcagaaatggaagttcggacagtactactgaacttacagaaa
-taaaaataattataagaaaatactatgaacaattgtgtaccagcaaattggagaacctag
-atgaaacggacaaattctggccaggcgtggtggctcacgcctgtattcccagcactttgg
-gaggcaaaggcaggcagatcacaaggtcaggagattgagaccatcctggctaacatggtg
-aaaccccgtctgtactaaaaatacaaaaaattagcctggcatggatggcacgtgcctgta
-gtcccagctactcaggaggctgagacaggagaattgcttgaacctgagagatggaggttg
-cagtgagccgagattgtgccactggactccagcctgggtgacagagcaagattctgtcaa
-aaaaaaaaaaaaagaaagaaaggaaagaaagaaagggacaagggacagattcctagatac
-acatgatataccaaaactgagtcatgaagaatggaaatctttatagacctgtaatgaagc
-agtgatcaaaagccatccaaaaaagaaaaacctttgacaagtccctggtgaattctacca
-gacatttaaagaagaactaacatcaatctttctcaaactcttccaaaaaatttaagagga
-gggTCGGGGGGCTGGGAGATCCAACATGACctcatccacatgactggcaattggtgctga
-ttgtcagcaggaatgtctgtgttctcctccttgcggtcactcttgctctgttaggtcaga
-catcatcccttacatagaggcccaagggtccaacggtccaagtccaagactgaagctgca
-aggtctcttgaggcagaggctctgaaaaccacatgatgtcacttctgtcacacgctattg
-gtcaaagcaagtcacatgcctcactcagcttcaagtcagtggagaaacagactccacctt
-ggatgggaagaatagcagagtcacattgcaaaggggtgtggataagggttgggaggaatg
-tgtagccattaatttacaCCAGATAATGTGAGTGTTTGCACTTTACAAGGTCCACAGGTC
-CACtgatacagtttggctctgtgtccctacccacatctcaccttgaattgtaataatacc
-cacgtgtcatgggagggaccccatgggaggtaattgaattatggggcgggtttttcttgt
-gctgttctcgtgataatgaagacatctcaagagatctgatgtttttatcggggggagttc
-ccttgcctgccaccatggaagatgtcccttgactcttccttcatcttcagccatgattgt
-gaggcctctccagccatgtggaacagtgagtccactaaacttgtttcctttataaattac
-ccagtctcaggtatgtctttattttattttattttattttattttattttattttatttt
-attttatttttgagacagagtcttgctctgtcacccaggctgaagtgcaagggcaccatc
-tcggctcactgcaacctccgcctcccacgttcaagagattcccctgcctcagcctcctga
-gtagctgggactacagtgcacgcctccacacccggctaatttttgtattttagtagagac
-agggtttcactatgttggccaggctagtgtcgaacttctgatctcatgatccacctgcct
-cggcctcccaaagtgctgggattacaggcatgagccaccatgcccggcctcaggtatgtc
-tttattagagcgagagaatagactaatacaTCCACCAACCCTAGGAAGTCAGTGGAAGGG
-TATTTCCGTATTTCATATGGAAGTCATTTCCATATGAAAATTTAGCCAGAGGATTTCATG
-CTGGTTGTCTGAAAGCCAGGAGCTTCTAAAAAACTTTCAGGGTAGCTGTCTAAGCATGac
-ctcatgtcatcctgttgtgagtactaaattagttaattcaggggaggcactcagaaaagt
-gAAGAAAGGGAAATCTTTCTTATATAAATCTTAGAAATCTCATAGAAATCTTAGGAAAgt
-gcctggcgtgcagtaaacacgtgatacatttcagttgttattatcttcacaataattttt
-ttgggtcaggcttgttattttccctgttttacagattaaggggcagagactcagagatgc
-gcagtaagtcgcctgagggttacgcagcaaataagcagggaagccagatgagaacctaCA
-TGACAGAGTCACCCATGTGTGAGACTCCAAAGCCTCATTCAGGTGCACAGAGAGGCGGTT
-GTGAGGACGttcactgctgcgttgccttcagtagcttaacatcagaaacagcgcagatgt
-ccaccaacaggggccacccagtaaaccccagcatgcccagccaaggagtgctttgtgctg
-gttacaagaaatgaggtcacgctatacataggacatgggatcatctccaagacattctgt
-tcagtaaaaagaacaTCTGAAAAAAAAGTTCCATAACCCACAGAAAATACTGCCAAATAT
-TCCAAAAAATCTAAGTCCAAGTGTGTGTGTATGTGACCTCTGGAGGCTGATCTGAAGCAA
-ATGTAGGTGAATTAAACAATAGGATCTATTTATAGGACTCTTCTTTTCCTACTTTTCTTT
-ATTTTTGTTGGATTTTGAAACATGTTCAAAGAAAAATTCAGAGTACAATAAAGTACCagt
-cgggcatggtggctcacgcctgtaatcccagcactttgggaggctgaggtgggtggacca
-cctgaggtcaggagttcgagatcagcctggccaatatggtgaaaccctgtctctgctaaa
-aatacaaaaattaggtgggtgtggtggcaggcacctgtaatcccagctactcgggaggct
-gaggcaggagaattgcttgaacccaggaggcaaaggttgcagtgagctgattgtgccact
-gcactccagcctgggcgacaagagtgagactgtgtctcaataaataaatgaaagaaagaa
-agaagaaagaaagaaagaaagaagaaagaaagaaaagaaagaaagaaagaaagaaagaaa
-gaaagaaagaaagaaagaaagaaaaagaaaaagaaccaagaagaaaaaataaTCACCGGA
-GATTCCtcccctcccctagagctaactaggctaacattttggtatatatctttccagtcc
-ggatcctgtgtgactgagtgtgtatatgcatatgtattattttCAACTGTtggctttctc
-cttgtggtccaagacagctgctccagatttagccattacatctgtttcctgccagcaaga
-aagggaaaatgggaagtagagggccttttaagtatacaacctagaatttacacacattat
-tctttatcacatctcatttctctaaatgtagtcgcatggccatcctggccagaaggaagc
-ctgggaaatgtggtctttcctctgggctgccttgtgcccagtgaaaagtcaggggttcta
-tgactatgaaagaaacaggagaatggatattgtggcaactagcagtGCTATTCACCTTTA
-TTCTCTCAATGGTAATATTTTTCCCCATCAAGAGGGGAAAATTTGTGTCTTACATTCTAA
-CCACTGAACTCCGAGAGAAGACACTGGCCTGTGCCAttctcttgcgatggagtttcgctc
-tgtcgcccaggctggagtgcagtggggtgatctcagctcactgcaacctccacctcctgg
-attcaagcaattctcaggcctcagcctcccgagtagctggaattacaggcacctgccagc
-acacccctttttagaccacatagggtagcttccgactgttgccatggcatttgtgaattg
-tcatgtgctggtgggagtgtctcttagcatgctaatatattataattagcatatatatta
-taatgagcagtgaggaggaccagaggttgctttcatcaccatcttggttttggcgggatc
-tggccagcttctttactgcatcctgtttgttttatcaataaggtctttgtgacatgtacc
-ttgtgAAACCAGTCCTGCCTAAGGGAGCGGGGCTGGCGGTTGTTCAGAGTGAACAATTCA
-AAGTCAGGTCCTCCCTCTTGGAGCTCAGAGACTTGAAGAGCAAGGACCACTGTCAGGACA
-CAACCCCATTTGCAAGGCCGGGGACACACATACAGACCCACAGGCCATTGTAGAGAAAGT
-GTTAAAAGATGGAAGTCAAGCCACGGCCACTGGAAGTGGTGTGCCCTGAGAGGCAGAGGG
-TTCTCCCTAAGCCAGGGAAGGACAAGGCAGGGCAAGACAGAAACTGGGCCTGGGGCCAGG
-ATTCCTGAGCTGGGGCTAGATTTGCCCAAATCTAGGGCAGGGCTGACTGGGTCAAGCACA
-GCAGGGAGCCAGGGTGGGTCGATCCCCCTGCCACAGGCTTCACTCTTCTGGCTCTGGTTT
-CCAGGCAGTTCTAAAAGCCTCCCAGTggcccagtgcagtggctaacgcctgtattcccaa
-cgctttgagaggccttaggcgagcagatcacttaaggccaggagttcgagaccagcctga
-ccaacatgtcaaaaccccgtctctactaaaaatacaaaaattagccaagcgtggtggcag
-tgcctgtaatcccagctacttgggaggctgaggcaggagaacccaggaggtggaggttgc
-agtgagctgagattgtgccactgcactccagcctgggtgatagagcaagactgcatctca
-aataaaataaaataaaaaaaTCAAATCAAATAAAATGTCTCCCAGAATACACCACCCCAG
-CAAAATGGCAGGAGGGAGTGTCACCTGGGGACCTCCACTTTGGAGGTTTGAGTGGGCAGC
-TTTAAGCTGGAACAGTCACTCTTGCTGTGGGTTCTCAGGGCGGAGACTGAGCCCCCACCC
-TGCCTCCTCAAATGCATTTCCTCTCAGCTCCCACCTGCCAGCCCAGGAGAGAGGGAGGGC
-CATTCTGTCCTTTTCCTGCAGAGTCCCTTTGTTCAGTTGGTGACCAACATCCTGAAAAAC
-ATTCTCAGGAGATCAAAAAGAAGAACATTTTGGTCTATGTGGTAGGTTGGCCCAGTGCAC
-CACGCCCAGTGCAGGTCCCTCTTGAAACCACCTTTGGGAAATTATGACTGAgacaccacc
-tttgcaaaattatgactgagacaatgagagatctttttttttttcctttgagacagagtt
-tcgctcttgttgcccaggctggagtgcaatggtgtgttctcggctcactgcaacctccac
-ctcctgggtttaagcgattctcctgcctcagcctcccgagtagctgggattacaggcacg
-cgccaccatgcctggctaatttttgtatttttagtagagacaggtttctccgtgttggtc
-aggctggcctcgaactcccaacctcacacctgaggttgcctcagcctcccaaagtgctgg
-gattacaggcgtgagccaccacgcctggcccacagtaagaggtcgaacttaacctactct
-atcttgcttctaacctccaagctgtccttgttcattcctgggcataagctgaactaacct
-tgggagaaacttagtttatactttaaacagccctttcccaaagcagacctccttcttgcc
-tggggactaagctgcctttgtaggactaacattagccacaaaattagaaattttggttta
-ggagtcatgcagctggaggctacaagatcctgaccctccctaaactactcctgacatcag
-ggcttgagatatttttcagaccctgcacttgatggatcagctggcatcacccacgtcaat
-aaactggctcatctgatcttgtggcccccacccaggaattgattcagctcaggaagacag
-cttggactccctgtgatttcaaccctgaccaatcagcactcctggtgcactggcttctcc
-ccacccaccaagttatccttaaaaactcttctccccaaatgctcggagagacagatttga
-gtcataaaactccagtctcccacgcagctggctctgtgtgaattactctttctctattgc
-atttctcctgtcttgatgaatcggctcttgatgaataggcagcctgcaaggtgaacccct
-tgggcggttccaCTCTTTGCCCAGGGTGATGTTATTTCTCTCCAGGATGGCTGCAGCGGC
-TTCTGAGCCTGCTTGCATCTGGTGTGGTCCCTTTCAATGTCACGCAGGCCAAAGCAGCCC
-TCCATCTCTCCATGATCTTGGCTTCCAAGGTACTCTGTCTCTCTCTCTGGGTCGCCATAC
-TGGCTTCCATCAGGCCCTGGAATGCATCCTGCTGGTTCTATCCCTTGGCCTTCAAAAGTG
-CGGTTTCCTCCTGGAAGGCACCTTCTGCCTTACCTCACACTTCCTTCCCTCCTACCTGCC
-TTGAGATACCAGCTTGCAGGGGCATTCTTGGGAAAGCCGACCCCTTGGACTGAGTCTGGA
-GTTTTGATCTCTCTCTCTCttttttttttttttggagatggagtttcactcttgataccc
-aagctggaattcaatggcgtggtctcggcttaccacaacctctgcctcccaggttcaagt
-gattctcctgcctcagcctcccaagtagctgggattacaggcatgtaccaccatgcctgg
-ctaattttgtatttttagtaaagatggagtttctccatgttgatcaggctggtctcgaac
-tcccaacctcaggtgatctacctgccttggcctcccaaagtgctgggattacaggcatga
-gccaccgtgcctggccttttttttttttttttttttgagatggcatctcactttgtcacc
-caggctggagtgcagtggcaccatcatggctcactgcagcattgaactcctgggctccag
-caatcctcccacctcagcctcttgagtagctgggatcacaggcatgtgccaccatgccta
-gctaatttttgtatttttttttgtagagacagggtctcattatgttgcccaggctggtct
-caaactcctgggctcaagcaatcctcctgcctcaacctcccaaaatactgggattacacg
-tgtaaaccaccacatccagccCTGATCTCATTCTTCAGAGAATTTACCTAGCTGGTCACT
-TGGTGTCTGTAGGAGCATCGCCTCTCAGGCCTGCCTCAAAACTGCATTTCAGTTGGGAGT
-GGGGCGGGGGGAGGGAGAGTGTAGTTTGGGGACATCAAGCGTCTGTGGTGGATCTCCTCC
-CAAAGTGAGACTGCTTTTTAATGatatttattgagcacttactgtttgccactgcggtgc
-taagcactttgcacatactagctcagtgcatccttacagcaatcctgggagggaggtgct
-tttctcatccgcatgtgctgacaaggctgagAAGAGCTGGGTCTTGCACGGTACCTTAAG
-GGCTAAAGACCTGCAAGGATGGTGCATGAAAGCAAAACCAGAGAGGCGCCTTTTCCAAAT
-GCCAATGCGCCCTCCACCCAGTCCTTCACAAACCACATCAGCATGGATAGCACCACACTC
-CACAGGCTTTTCTGCATCTCCTTTGTGTGTGTGCACATGTGTAATTAATTCTGGGGCAAC
-TTCCTACATCAGTACAGAGAAACTCCTTGATCATTATCCACTCCAACATCCTTCCTGGGA
-GGGACTGACTGGAAACCCAAATGCCCTtgtaagggcaaatacaaaaactaaaataattct
-ccctggtgcagaaaaaggaaagaaacctcccgtttcctgttcttaaacactctagagcaa
-acactttagaaaacttctcaattatttctctgttcctttaagatgtgtctttttaaaagc
-caggtgagcctcctgccagttttacaagccagggatgttttcccaaggacctaggagcca
-tctctttggaaggtaaacatcaagattgcacccttctcatccagtctccatgggcagata
-ggagcctaacttcagtgcttggctccaagttgcaaaacaatccatcgtctatcataaaga
-tgtgagtttatattttctctggataaagacaattagctaacacagatggccactccaatt
-accaggtgaattcgggatgaaataagttgcaaattgtgttgtgcagtcatctgactcgag
-aactatttttttttttttgagacagagtctcgctctgttgtccagtctggagtacagtgg
-tacgatctcagctcgctgcaacctctgcctctcaggttcaaacaattctcctgcctcagc
-ttcccgagctgggattacaggcgtgcactaccacacctggctaatttttgtatttttagt
-agagatggggttttgccatgttggccaagctggtctcgaacttctgactttaagtgatct
-gcccaccttggcctcccaaagagttgggattacaagcatgagccaccaccccggccctag
-ttattatttgaggacatgtatgcaataggttatacctgcttggttatataggaggacgaa
-atgtatttctctttgtaatctcttttgtggattgcctgtgatgcccactgcagtctggtt
-taacgcttatttaataataaaactgttttctcttctacttttgtggaaaggttttctgga
-ttagATCTTTAATTTTGTCTCCAGCATCTTCaaatgtctttctacagagggttggttaaa
-taaatgtggcatctccacaaaagagaatactgcacagtcatggcaaaaaaacaaggagcc
-tgttttcgttgttgaatgaaaagtgcaaggtgcacaacagtttactactttttctgtaaa
-aaaagaggTCTGAGAAGGCTGTATTTGCCATTTGTATAATCTCTGGAAGGGTAAACAGCG
-ACTGATAAAAGTGCTCgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtTAAGAGAAAC
-TGGGCAGATGAGGGAGAGGAAAGGGATGAAAACCTTTCTCTGTACACCTTATATTTTCTG
-ATTTTTTGAAACACGTGACTGTATTACCTATTCACAGTAAGTTAACAGGGATGGGAAGCA
-TGGTGGTGGCAAGCAAACGAAACCTCTAAAAAGAAGTCCCAGGggccgggcgcagtggct
-aactcttatgatcttagcgctttgagaggccaaggtgggcagattgcctgaactcaggag
-ttcgagaccagcctgggcaacatggtgagacctcgtctctactgaaaatacaaaaaatat
-gccaggtgtggtagtgcgcacctgtagtcccagctactccggagactgagaggcaggaga
-gtcacttaaacctgggaggcagaggttgcagtgagccgggatcacaccactgcactccag
-cctgagcaacaggcaggactctgcttccaaaaaaaaaaaattagccaggtgtggtggtgg
-gcacctgtaatcctagctactcaggaggctgaggcaggagaatcacttgaacctgggagg
-cagaggttgcagtgacctgagattgcgccacggcactccagcctgggtgacagagcaaga
-ctccatctcaaaacaaaaaaaGCCCCAGAACCAGACATCCTTAAGCACTTGATTCTGTTC
-ATTTCTGAGCTCAGCCTTGAGCTTAGAACCAAGTGAAAACTAATTACACATTTTCGGAGT
-TCACATTAAACttcttctttttaaaattattatttttgagacagaatcttgctctgtcac
-ccaggctggagggcagtggcacgatctcagctcactgcagcctccacctctggggttcaa
-gcaattctcagtctcctgagtagctgggactacaagcatgtgccaccatgaccagcaatt
-ttttgtatttttagtagagatgggtttttgccatgttggccaggctgatctcaaactcct
-ggcctcaagtgatctgcccgccttggcctcccaaagtgctgggattacaggtgtgagcca
-ctgtgccATGCCTGAACTTCTCCTTTGAAGGAAGATCTGAGTGTAAAAGCAGGGAATGCC
-TTTATTTAAAAAAATGAAAAACAGAAACTAAAACAAAATAACAATCACCTCTGTTGCCTC
-CATTTGAGAGAATACTTCCAGGGGCTCTGCATGTCTGGTCCCCAACCTGGTCGGGGAGTT
-CACTTTCAGAGGCTCAGGGATGGGCCTTCCCCAGCCCCACCAGCAAATCATCTCTCCCGG
-CTTCCAGGAGGGTACTTACTCTCCAACTAGTGGGCTTTATGGGCCAGGAAGGATGACAGG
-AAGGGGTGTGTGGGGTACTACGTCCCTCCACACTGAGAATCCGAAAGCCAAGATGCCCAA
-GATTCTATCGTTATCTGCTTGTCTTGTAGAAGCCCCTCTGTGAGACTGAGGGGCAAAGGA
-GAGAGGGCAGGGGCGTGTCTCAACCCTTCTGGCCACTTCTAGGTTGTGCAGACTGCCACT
-CTTGTTACTACGATGGACTGTCAGATCAGCAGGTGGCCCAGGAGGGCTTGCTTGATGCGG
-GCTGCTTTTTCCTTTTGCCTCCGTGCCATGcctgtgaggtagttggtacttactggaatc
-cccactgcatgcatgaagaaacaggcacagagaagccaaatgactttcccaaggtcacac
-agcctgaagggacagccggctgtcccagctgtttcccttctaacacccttgggcctgcct
-ccagctagatgctgcAAATCAGTCCTCTCTTGAGAGTCAAAGCAAAGGAGATCTGAGCTG
-GTCGTCACAGGTAGTGTGACACAGAGTTGGGGATAGAGCCGCACCTTGCATTTCCAGGTG
-CCATCTTCCCCACAGTCCCCAGTGGGCACTTGCGTTCATGATTCAATTACTCAGGCTCTG
-TCTCTCTGTTCCTGCCCCTTGCTCTGTGACCTGGCCTCTCTGGACCCCAGTTCCGTCCGT
-GAGCGATGGGGGCGGGGTCGGCGGCCTGCCTAGGCTGGACAGTGCAGATTGCAGAAGTCC
-GCGGACGAGAAGAGCCGCAGCACGTTGACCAGAGGGAACATGAGCAGCGCTCCGAGCAGC
-GAGCCCAGCTGCACCGCCGCCCCGCACCACAAGAGGGCGCTGCGGCTGAGGTCGCGCAGG
-ACCACGCCCAGCATCACCTTGACGTAACTGAGGCAGCCGCTGAAAAGCACCCACGAGGCC
-ACCTGCGGGGCCGGGAGGGAAGAGGTGCAGAGTCACGGGGCTTGCGGGGCGAGCGCCGGA
-GCAAAGAACTCTCACAGGGCTCAGGGGAACCCACGGAATACTCTCTAGGTGCGAGGAGCG
-CCTTCTGGGAGTGAGCCTGCGGGGCCGACGGGTCCCATGAGTTGGCCGCCCGGGGGCGAA
-GGAGAATCCAGTGGCTTTTCTGGGTTCACGTGCCCATGATCAGGGCAAGGGCCCTTGAGA
-GAAGGCCCCTGCTGAGGTACACATGGTGGGAAGAGGCCTACCAGTCACCTCGATTCCCTA
-AGCCTCCACTCCCAAATGAGGAAGGGGCGCTTCCCCCACCTGGGGCTTCCCGGGAGGGTC
-CCACAGACCCCGCTCGCTGGAAAGGGCCGCGCCCAAGCTCTCCCAGGCCTTGGCTAGGGG
-TGAGGGGTACGCAGCGGGAGCAGCCCCACCGGCCGGATACTCACAATGAGGACTTCCCCA
-CCCCAGTGGCCCTGCAAGAGGGGGCAGGGGCTCATCACCGCCATGGCCATGTTGTAGCCC
-CCAAAGCAGGTCCCAAGCACGGAGAGGACCCCCAGGAACAGCAGAGACCTAGAGGAAAGT
-AGGGGAGGTGAGTGGAGGTGAGAAGCCTGACCTCTGACCCCCCCGCCCCACTGGGCGGCA
-TGTGGATGGCCAGTGTCTCCATAGTTAGTTTAGACCCATGTGGAAAATTCCAGGTTGCCT
-GGCTCAAGTGGGTCAGGGAGGCTCCTGAGCAGGCAGGGCTGGCCTGAGTCATCCCCAGCA
-TTAACGGCAGGGCCTGGCACCCCGgcaagaaaaacataatggactctggcaccggatggt
-cctggttcaaatcccagttctactgtttaagctgAGACTCGCCTCTGAGCCTCCAAATCG
-GAGTTTTGCAAGGCTGCATGACCTCCAGGAGCAGAGCATGCAGGCCTGGCGCCGCTGTGG
-GCCCACCTGGTGTTTACCTGCTGGCATTTCCTCCTGCAACACACCCTCAGCCTCAGCCAG
-GAAGCTGAGTTGAAGTGAAGATGGCTGGATCGGGCATTGGCACAGTAGGGTTTGCTGTGC
-CTCCTCAGGAGACCCCTCCCCTTCTGGCCTCAGCTACCTGCCTCTGCAATGTGGAGTGTG
-CTGATCTCCAGGGGTCCTGGCAGCTGGCTTGTTGCTGCTAGGAGCATCTCTCTACAGGTG
-GCCTTCCATGCAAACCTACATCTGGGACCACTGTCCTTCCTCACAGGTCCTTGTCCCTGG
-GGTCCCAATCTCTAGAACCCCAAGACTGGTCCACGCCCTGGGTAAGAACAGACAGAGGTC
-TGCCTATACCCTTAAAGACTCTTTCTGCTCCAAGATTCTTGGATTCCATGACTCAGATTC
-TGTAATTCTAACATTTGGGGTTTCTTGGATTTGCAGGTCTGAGCCTTTGGTCCTGCTTCC
-CTCAAATCCTCCATCCTCTTTCCAGTTTCTAGGTCCCAAGGTAGAAAATCCAGCTTCCTG
-GCAAGCTTTCTGTCAAGCTCTTCTGTCCTCACTGTCCTTCTTCTGGGCTGGGAGAGTGGG
-TGTAAGCAGGCCAGTGAGGACAGGCAGGCCAGCGTGGATACGAGGCTGTAGGACCCACCT
-CAAATGTCAAGATCCCAAGGTGGTAGTTCTCCTACAGGGGTCTGAAGCCCCTGCCTCAGA
-ACCGTCTGGTTTCCTTACTAAAAATTGAAATCCCAGGTCCCAGTCTAGGCTGGTTCAATC
-TGCATTTTATCAACTTGCCCAGCCATTCTTCTAGAACTGTGGCTCTAAGGGAACCAGCAG
-GAGGTTAGAGGCAGGAAGGCAGGGCCGAAATCCTGGGAATTAGACCAGGTCAAGCTCTTT
-CTCCAAGCCTCAGGGTTTCCCCTTATAAACGGGAACCTCAGTGGCTATCTGCTCCTCCTC
-ATGGACTGATGACaatgatggtcaacgcttaggctggacctgccacgtgccaggcaccgc
-tccaagagctttatagaatcagctcatatcatgcttccagcagtcctaggaggtggaatg
-ttacactcccattttccgataaatatccctgaggcacagagaactgaagtgacttgtctt
-acacacagctgacaggtggcagagctgggatttggaccagggtgctccccaaacatgttc
-ttaaccactaCATGTACAGCCCAGTAGGTGCGTTTGGAATTCTGGGTTCTGAAATGAAGT
-GTTCCCCCACTAGGATTCCCTAGGACCAGATGAGGGCACACCTGTTAGGCAGGAACATGG
-AGACCAACGAGGCAAGAGGGTTGGCCACAATGCTGAGGGTGGCAGCCAGGTGGTAGGCAA
-CTGGCCCATAGGACAGGCAGGAGTAGGTCTGCACAGAGGGCAGCATGCCGTTGGTGAGCG
-CGTTGACGAAGGCCACCAGGGTATAGATGAAGGCCAGGTGCGCCGGGCAGCAGGGGGCTG
-CTTTCTCCTCTAGATACCCCTGGCCCTGGCTGCTGTCCACCGTGCCTGCAGGGCCCAAGT
-CATTCTCTTCCCGCGGCCGGATGGAGTGGAGGGTGACCTGGTCATTGAGGAGGTCTTCCA
-CGGAAGCCTCCCAGCACCTGGGTTGACGCTGGAGGACAAAGAACGCCACGAGGCAGCAGG
-CCATCATGATGGATAGGAGGAGGAAGAAGACCAGGGGTGAGAAGTGGGCGGGAAGGTAGC
-GGCTCTCCAGGTGGGACAAGGGTGCTTCCATTCCGGGGAGGGCGGACACCAAAGCTCTGG
-GAACTCCCTGCAAAGGACAAGACAGATCCCTGGTCAGGGGAGGGGATCAGGCTGCAGAAC
-AACAATCATGACAGTGATAACAGAATACAGATCACCTGTTATTATTAATGGATAATGAAT
-AAATAAACATAACTAACAAGGTGGCAAtaatgactgctcatactgactgcccactgagca
-cgggcactgtgcatggataagcccctatgcctcctaacagggctgcacagtgggcaccat
-catcccccattttagagggaactgaggtatcagaatgcttcgtcccttacctgagggtca
-cagggagaatgtggcaaagccagactccacctggtgctttctgacttggaagctacacct
-tttatcaccccacAGCAGTGGCAACCACAAACATGTTCAGAGGAGGAGCTAGCTGGAGAC
-TGAGCAGTGGAGCCGCCCACCTAAGAGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACC
-TAAGGGGAGAGCCCCCACCTAAGGGGAGAATCCCCCACCTAAGGGGAGAGCCCCCACCTA
-AGGAAGAACACTGCTCCACCCATCGTCTAGGAAATAAGGGCCTTcaggacatgccatccc
-aaaatatgactgtaggaggccagaatatgccaccccaaaattgacctattggcatatttt
-ttatttctagctggttattttgaaaaattgcaggctaaggagtagctctgaaaagttgcc
-attttgtaagataaatttacatctaaaggaaatttttattagtaaagctatcttatctgt
-accaagaaaaggtatctgtaccacgaaggggtatctgaaccaggaagagaaaggtgatgg
-cctttatcacccgaggaacttttatctgcataacagtgcaatgtttattcaccataagtt
-tcctcccttcactctcccataatttgtctccaccatcctgcagtagcctcaagcccctat
-tcccttttgtagctcaggatgctatagaagctgaaatcatctggcccttttttgagtctc
-atattttttggggactcccatgcgtatgtatgtaagtaattaaaatgagtttcctgctgt
-tgatctgccttatgtcagtttaactcataggccgaccaaagaacctagaaggatggaggt
-gagcagtttttccctcccctacaTTTGTGATAAAGCCAAGTGCTGAGATGGCTCCGGGTG
-ATGCTGGGTACCTGTGCGATGTCAGTCTCCCTCGTGGGTACAGGGCTTGGTACGCTGTCT
-GATATCTCAGTGACATTGACGCAGGTAGTGAGACCGGAGCCCTGGGCAAGAGCCACCAGG
-GCGGGCAAGAGGCCGCTGAGTCCTTCACCCACAAAGAAGGTGGTGAGGTAGTAGGTGGGC
-AGCCGGCTCATGAACGGCAGGAAGGTCACTGAAGAGGTGCAGTCCACCAGGGCCAGGAAG
-AAGGTGAGGACCAAGAAGGCGATGCTGTGGTGGCCGTCCAGCACCCAGGAGGTCATATTC
-CAGAGGAAGGCAAAGATGATGCAGGTGACGGTTCCCACGCCCAGCAGGGTGAAGATGATG
-GGCACTTCGGAAAGGCAGCTGGGCCGGAAGTGATGGAGCAGGGTGACCAGGAGGGGCCCG
-ATGTTGGCCAGCTGGATGACCACCGTGAGGTAGGAGGGCAGGTACCAGCCCTCGGGCAGC
-TCCATCACCAGCAGGGGCAGCTCTACCCAGAGCCCATTGATGGTCACCCAGGAGCCCATT
-CCGAAGACGCAGACCAGCAGGTGCATCAGGAAGGCCATGGCGGTATCTGCCCTGGGCCAG
-AGGCTTTCTCAGATCAGCCTGCAGCGGGGCTGGCAGAGAAGGACACCAGGTGAGTAATTC
-CAGCTTCACCACCTAGCAAGATGCTGGGACCTGGGGCCCAGAGTTTTCTCTTATTACTCC
-CCTTCCTGTGAACAAGCTGGCttttttttttttcctttgagacatagtttcactctttta
-gtccaggctggagtgcaatgggatgatctcggctcagtgaccctctgcctcctgggctca
-agtgattctcctgcctcagtttcccaaatagctgggattacaggtgcatgccaccatgcc
-agctaattttgtatttttagtggaaacagggtttccccacgttggtcaggctggtctcga
-actcctggcctcaggtgatccgcctgcctcggcctcccaaagtgctgggattacagtgtg
-agccaccacgcctggccCAAGCTGTCTTTTTATTAGCAGAAAACAAGAGAAGCCTTTCCT
-AACCGTGATTCATGAAAGAAAAGTTCAATCCGACACACAAAAGCaaacaaagcagcttct
-gcaaaagataccaacagcaaggtcaaaagttaaatgaaaacacggggaaaacatttgcca
-cataaatcacagacaaagggctcatcttccttgtcaggcctctgagcccaagcctgcgcg
-tgtacatccagatggcctgaagtaactgaagaatcacaaaagaagtgaaaatggccggtt
-cctgccttaactgatgatattaccttgtgaaattccttctcctggctcagaagctcccct
-actgagcaccttgtgacccccacccctgcccgccagggaacaaccccctttgactgtaat
-tttccactacctacccaaatcctataaaactgccccacccctatctcccttcgctgactc
-tcttttcggactcagcccgcctgcacccaggtgaaataaacagccttgttgctcacacaa
-agcctgtttgatggtctcttcacatggacgcgcgtgacattcctaatatataaagagttt
-ttaaaaatcaagaacaaagagaccccatatagaagagggccaaggatatgaacaattcag
-agaaaaaggtacaaataagctttaaacacatgaaaatattatcaccttcattcacaatag
-gaaaactactccaggtgccatttctcaccatgagattgtcccaaagcctgacaaaatgac
-tcatgttcaaggttattatagattgcgatcttgttggtaatagcaagttatgggaaattt
-tctcctgggtggctaccaacagagagggggctaattaaagggacctgctggaataccaca
-tacctgtttaaaggaataagaaataaggaaagcagatcttggtgactgataaggaaaggt
-ctccaggctataataataatcttgaaacaaaatcaaggcaggtaaatggaaccaggaaaa
-agtgtactgccttttggtcatagaagaggaggaaaaacaTGTTTTCTTTGCTTGTACTTG
-CACAAAGCAACCCTTGAAGGACACACAGGGACTGCAGGGATGTTGGTGATGCCTCTGTAT
-ATCttttttttttttcttgtgacagagtcttactctgtcaccaggctggagtgaagtggc
-acaatctcagctcactgcaacctctacctcccgggttcaagtgattctcctgcctcagcc
-tcccaagtagctgggactacaggcgcccaccactacgcccagctaattttttgtattttt
-attagagatggggtttctccgtgttagccaggatggtctcaatctcctgatcttgtgatc
-caccctcctcagcctcccaaagtgctgggattacaggcatgagccaccgctcctggccCT
-GCCTCTGTATATCTTTTAATAAGAGTTTTGATTTGTGAACCATGTAAACATATTACCTGA
-TGCAAATATATGGTTACCTGAAATAAGATTTCAATCTGGCTTTTTTTCCTCCTGAAATTA
-TATCACTCTCTACGTGGCCTTTGGAGACCACTTCCTCTAGCCCTCCAGAGCCATTCTGCC
-ATCTGTTTACCCCTTTGTCAGCTACCAGTGGCAGCCCACCTGTGCTGTTACTAACAACTT
-TCTTCTATCTATCCTTAGTCTGAGCAGTAATATGGGAGATGCCAGGAGTGAggctctgga
-gccagctgtttgagtttgaccctggctctgctgcttacaatctgggtgaccctgggcaag
-tggctttgcctctctctgcctcatctcctcatctgtaagtaggggatagtgatagtatga
-actccgtggtttgttgtgagatataaggatgctggtgagtttatgctgtttccaacagtc
-ccagcatagggtaagcacctctaagggttactgatcattATCGTGAAATGGCAGGTTTGG
-TGACATCGTTATTTTTGTCTAATTCACATGAGAATTAATACATGACTATGAAAATTTAAA
-AAAGGAAAAGATTCCCCTACTAGGTATCAAGTGAACTCACCAGTGGTATATGCACCTTTT
-TGTAGAGACACGCTAACTGGGCCAATCTTCACGTTTTGTAGATGGGAGACGAGGTCCGAA
-GGGGCAGAGGGGCTCTCCTGGGATCTGGACTGGATCCTCTGCAGCAAGCGGCCTGTCCGG
-GACTCCTCAGTTCACGCTGCAGTCTTTAACTCCATACTTCTTCCTTCTAGTACAAAGCAG
-GAGTGTCCGTTGTGGCCACGCCTCACCCAGGAAACTCCTGAATCCTGGCAGCTCCTCCCC
-ACGGTTCCCACACACGGAATTCCCTCACAGGGCTGGGACTTCCTTCCTCATACCTTCACT
-GAGCGAACCCAATGCTCAGTGGCCTTTCTGGTCACCTCCTTTTCCTCTCTGGGAGGAGCC
-ACTCCTGGGGTGTAACGCAGTCAGATCCCCTAGCAGTCCCGCTCTGCCCCCTCCCTTCTG
-GGGGCCTCAGACTCCATTCCCTCCCTTAGGAAGCTGACTTGACTAATAGCACAGGTGAGG
-CCCACTCCAGGCGTGCCAAGAGGACCCAAGGAGGGAGGGGAAGCTCCCAGACAGCAGTGG
-CACAcctttgcctgtgctgtcctcccagcctggagcaccagccccctctgctgtccacat
-ccaagctttctacaagactccgtcctccaggagacctctggctgcctcaccttctcaggc
-gtcctcaccagggcccatgaccccttcatttcaggttgttcttgtgtgggtgcatgcagg
-cacataccttgagactgaagctttttgagggcaggggctgCTTGGGAATCTGACATTTTG
-AAGGTGGAAGGGCCTTTCTCAATGACTTAGCTTAGGATTTGTAAATTGTTAACTCACTGG
-CCACTGCCAGACAGCAGATATATTACTTTGGTTTGCCCAGTGTGTTTAACAATTTGTTAC
-TGTAATCAGCAGTGGAGGGGATGGCAAGCAACCTTCAGCATTTCTGGCTTCTCAGGAATA
-TTTTGGAAGAAGTGGCCCCCCACTTTGGCCTCTTTCTCTGTTCTAGACTCGGGCCATCTT
-GGAGCTCTCCCCTGCGGTAACAtctggaaccagttgcctgggttcaaatcccagcttcaa
-cccttacaagctgagcaagtgacctaacctcctgtgcttcagagtcttctcttgcaaaac
-agctataggctgtcagtaccaacatcagaactgttgctaggaacatgcactaaagtgcta
-aaactgtgcctgccacatagtgagggctcaatgaaCCATCATTATAAGATTACTATTTCA
-GCAAACGTATCAGTTGCATTCAAAAACATGTAGTTATTggccaggcgcggtggctcacgt
-ctgtaatcctagcactttgggaggatgaggcgggcggatcccttgaggtcatgagtccga
-gactggcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaattagcccag
-catggtggcgcacacctgtaatcccagctactcaggaggctgaggccggagaacggctcc
-aacctgggaggtggaggttgcagtgagccgagatcatgccactgcactccagcctgggca
-acagagcgagactccatcttaaaaaagaaaaaataaaaaaaaGGCGCAGtttttgttaga
-caaatggccactcaactaaaggactacatttcccagccttctttgtagctgcacatggcc
-atgtcatcaagcacaggccaatgaattcaaatgcgactttgagtagtctccttagcccgt
-ttcctgtttagaaaaaaaagtgcagctcgttgccagcactcatttaattttatgtaaacg
-tgctatttgaggctgaagcaaatctgattctgactgctgttttttttttttttcttttga
-gacagagtcttactgtgtagcccaggctggactacagtggcttgatctcggctcacagca
-acctccgcctcccgagttcaagcagttctcgtgcctcagtctccttagtagctgggatta
-caggcgtgcaccacaatgtccggctaattttttatatttcttagtagagacggggtttct
-ccatgttgccaggctggtctcgaactcctgggttcaagtgatccccacgcctcagcctcc
-cagagtgctgggattgcaggcgtgagccaccaagcccagccctaaatctgactgattttc
-aatgtgaaaataacatgtaaaaactgtttttgaagttatttctaaccagaactaacatca
-gactcatctatttcagaaaaactggattcatcaaacgaatctttggtcaacaactgttca
-agaacaatgttaacatcacacataggaatgctaggatttgctattttcagcgatcgagaa
-ttactttgttttgtaaatggaaataccacgactaaaaccagaatgctacaaatagagtga
-tgtcttttgtttccaaagtcaatatactagagcaaggcaaaaataataataaaagcgagg
-tattttgtggcaaagttatcttggggtaaacactgcagtcacaagtgggtattccttctg
-gcaaacagggaaagagttaacaataagggagtgtgcccttctgctcttcctccatttggc
-tgtctggaatcagatgtgatggccagaactccagcaacgattttgtgctatgaggcatgt
-ggtgggggttagatgcatactaggctcctttgggattttgtggcagagagcacccatacc
-agccctgttttgcctgtgttgaactgttttgtttgtttgtttaatgttgttgttaaattg
-taaaagaaacttctatgttgtttaagtcactcttattttATGTACAACAAAAGTACTCAG
-Aggctgggtgcagtggctcactcgtataattccagcactttgggaggctgatgttggcag
-atcacttgaggtcaggagttcaagaccagcctccaactggtcaacatggtaaaaccctgt
-ctttaccaaaaacacaaaaaattagccaggtatggtggtgggcacctgtaattctagcta
-ctcgggaggctgaagcaggagaattgcttgaactcgggatgtggaggttgtagtgagcca
-agagcacgccagtgcactctagcctcggcgacaaagcaagactcttgtctcaaaaaacta
-aaagaaacaaacagacaaaaaCTACTCCATACTAAGTGCACAGAGATACACATTCCAGGA
-TATATATTGAAAGATTATAGTAACCAAAAACTAATGAATACATTTATCTCCTTTACCACC
-TACTTTCTGACTCTGAAACTTAGGTCCTGTCCCAACCAGGATTTGATCAAAAATCAAAAT
-TTAACAAAAGTAGTTGTTTAGACCCTTGGGGGCAAATGTCTTGCAGAGATATGAAAAAAA
-AAAAAAAAAGGAGAAGAGAGAAAGAGGGAGGAACAGAGGAACACAGAACCCTCCATATAG
-CATTTGGTACCAAAAGTATAAATTGAGACCAAGAGTCATTTCATATATCAAAACTCTAAT
-TCATAAAGGAGTCAAAATTGTAGTGACTATCTGTATTCTGAATATTTCCTGAAATAGCCT
-CAGACATTCCAGGAGAAATGGACAGAAGCACAGTCCAGCAGTACAGGCCTGACTCACCCT
-TCCAGGTCAAGACAGCAGACGAAGGTGCAAAATAAACAAGGATATAGCAAAAGCAATAAA
-TGATATACCTAGTAAAGAGGGCTAAGTCAGTAGTTAAGGGGAGTAGGCGAATTTGCAGAT
-GATGGTGACCTTTGCCATATGAAAAGCTATTAAACTAATGAGAGTGTCCAGTTAAACATT
-TACAAACATCAGTAGCTTTCCCACAGAGGGCTGGATGGGGAGATGAGGGCAGACAGGGCA
-GAAGTAGCCTCACTTTCTTGTATGTTCGACAACTCCTAAGCTCTGAACGCCTAAATCCCT
-GCTCCCCACAAAGACGAATTCTCTGGTTTTGACCCAGGTGCTACCACGGCTGTGTCACTT
-GAGGGATGGGATTTGGCTCCGGGGGTCTGTTTCCTTGTCTGGAAACCAGGCACAGTGGGG
-GTGTGTCCCCACGTGACCCATCTGCCCTATGGCCCTGGCCCACTCCCAAATTATCTCCTT
-CCTCAAAAGTGAGGTGTGCTTTTGGACCTCGGGGACACAGTGAGGAACAGTCATTAATGT
-CAATGAAGGGGATGTCTTAGGCAGAGGGAACTACATGTGCAAAAAGGCCCCAGAGAAAAG
-GAGAGACTCAGAATGGCTGGTGTTCGGAATGTGTTGGGATACTTTTAAAAGATGCATATC
-TGTATtttctgttttttttttttttgttgttgttgtttgtttgtttattttACAGTGACC
-TTGCAGTTCTTatttattcattttaaccagtatttcttgggcaccaactgtgtgctcaac
-cacAATCCCTGCTCTCAGGAAGTTGGAGGAAGCATTCACGAAGCAGAATAAAAAACAGAA
-ACATAGAGCAGGTCAGATGGTGGCAAGGACTCCGGAGGAAAGCAAAGCTCCTGAATGGGG
-AATGTGCCGCTGTCAAGGAGAGgacatgaagggagtgtgggagtgagctgtctgcagaaa
-gcacggtccaggggagaaaacagcaagtgaaaaggccctggggtgcggccacacctgctc
-tgtcccagaagtggattttgctgttcaaaggacagctaggaggccagtgtggccgcagca
-gcgggagccaggttggaggggaggagacagggcaggtcccctgtggccctgtggtgacag
-cttgggtgttttctctagagcaaaaagctccgtgagtgggcagaagagaccagctctaat
-ctagtttttaacaggatcgtgctggctgttgtgaggagaaacatgaggcgccagggagga
-agcaggagtaaaccttcggagggttaggaagctgtagcaAAAGAGCTAACAATCACCATG
-ACAACAGTGACAACCATagctgccactcctcagctatttattgtgccagaccctgtgcta
-agctctttgaacacattacctgtcaaatcttgttccacaatcctgaggctggcattatga
-ttatctccattttacagatgaggaaactgaggtttaaaagggaaataaatttgcctaggg
-tcatacagctgggagctgagctttacatccaggcatgcttgactGTGGACCCAGCCCTGA
-GAAAGGCCTCAGGGTGAAGGGGTTCTGAAGGGGCCATGGGGGTCAAGCTGAGCAGGATCT
-CTTTCTGCTCACAGATGGCCTCCCAAGACTTGGGCCAGAGAAAGAGAGAAATGGGGTACA
-GGCTCAGGAGAAGCTGAGAGAGGCTCTGAGACATATCTGCTTCCCAAGGATCCAGGACCC
-CTTATGTGATCACCAGAGACCAGAAACCTAAGGCTTCGCATGAGACAGTTAAGATGCCCC
-ATAATGCGTGGGCGACAGATAGAGAAGCTAGAAGGATCAGTTCCAGGCAAAGGTTTCTCT
-TTTGCATTCTTGCATCAAAAGCTGTGAGCCCCCAGCCCAAGAAAGTGAAGAGAATTGGGA
-GTGGGGTTCTGACCAGGGCCAGTGCACCGTCATTGTGTGGGCTGGGCCATCTCCTCCAGG
-GAGCTCAGGCAGCTTCCATCCCACCCAATGTCCCCCGCCCCCCTCCACATTCTCCTGCCC
-TCTGTTTTCCTCCATCAAAGTATTACTGACACCAGCTCAGTTACGGGAGTTTATCTGTGT
-CTATCTGTTGAGCGCTGGTCTCTCCCATTGGAGTGTAATCTCCATGTGAGCGGGGGCTTG
-TCCTCTCCCCCAGTGCCCAGGTGACCATCTGGCTTGCCACGGGCTGGGCCACCTGAGCTC
-CTGGCACCATGGCTGGGTTCTCGCTCTGCAGGGATAATCTGCCAGCTGGTAGGCACCTAG
-CCCTGTGGGCCAGACTGGAGGAAACCCGCCTCAGCTATGAGGGTTGTGTTGGCCAGGGTG
-ACCCCTGGGGCAGTGCCAGGTGGCAGCCTGACACTGGATACATCTCACTCCTGGGCAAGG
-GTCTGAGCCAATTCTTTCCTGGGTTCCAGGCTCCTGGAGAACTTAGTGAGGCCTGTAGGC
-GTCTACTTAGGGCCTGGCCTCACCCTCATGAGAGTGGGTAGGAATGGACTGACTTTGAGC
-CCATGAAGAAGGGAGGCTGAGAGGTCAAACCACAAAACCCACagggagagatgggggaga
-tgaaggggagtgagagagaagagactgagacaaagagacagaaagaaccgaaagctagaa
-gcagaaatggggagaaaggacaacagaggcacagagacagggaaaaatgagaAGCTGCGG
-CTGAGAGGGAGGCAGGGAGGTGCCAGGAGGCAGGAGGCAGCTGGGGCGCTGGGAGCCTGG
-CCTCAGCCACCCTCACTGTTCACAGCCACATGTAGCAGAAGGCCATCTCTACCTCTTGTT
-GCTGGGACCTCAGAGTTCccctgaaactcatcccaactcaatgtccctattgcacaggtg
-gggaaaccaaggcccagagaggagatagtgcttccccgaACCCTGCCCCACCCCTGATCT
-CAGGCTGTGGCAGACattcaggcctgtgctcaccggctgtgcaacctcaggtcagctgct
-caccctctctaggccttggtttctccatctgtgaaagggTCTGGGAATGCCCAGCCTTTC
-TGGGCTCAGCAGACCAGGAAAAAGGGAATGAGATAACAGGCGCTCAGCCTGGCCAGTAGA
-AGCGGACAGTGAGTTCTCTTCCCCCTTCTCCTCCCTCCCAAGGCCAGGAAGGGCTTCAGG
-CCTCCCATGGGGCTGACCTTGGTGGAGCAGCCTCCCCCAGGCCAGTTCCCCTCCCCTCCA
-CGTCCATCCCAACTCCCAGCCTCCTTCCCAGGCTCCTGCGGCTTCAGCCTGGTCAAGTTG
-TTCCGAGATAGCATGGAGATGGCCCTGGGTAAAGTCAGTGGGGGCCCAGTCttttttttt
-tttttttttttttttaagacaggatgtcgctctgtcacccaggctgaagtgctgtggcat
-gatctgagctcactgcagcctcaaccttcctggctcatgcgattctcccacctcagcctc
-tgagtagctgggactattaacccatgccaccacgtccgacctgggtaatttttgtatttt
-ttgtatagatggagtttcgccacgttgcccaggctggtcttgaactccctgagctcaagc
-gattcacctgcctcagtctccagaagtgctgggattacaggcgtgagccatgacacccag
-cATGGGCCCAGCCTTTTGGTCTGGAGGCACCAGGGGTCTGGAATTCACCTGGATGGCTCA
-GCCTGTCCCGACTCCAACATGCCAGCTGAGGAGGAAACCTTTCTTCCCTCCTGTCCCTTT
-GATCTTTCACCTGGATGGCTCAGCCTGTCCTGACTCCACATGCCAGCTGAGGAGGAAACC
-TTTCTTCCCTCCTATCTCTTTGGACTCTCCCGACATGGCAGCCTGAAACTAGGGGAAAGG
-CCACGGGACACCTGCTGGCTCCAGATAAGTGCCCCTGCCATATCCTGGTCAGTGTCCCAT
-GCTCCTAGCTAGCAGGCAGCCTTGGTAGCTGCAGCTGCACCCTCACAGGCCTGAGCCGCC
-CCGCTTTGCCCACTTACCTGCTGGTCCAGTTCCCCAGCCGCTCTGCATGGGAGGGGCCAG
-AGGCAGCTCGTTTTGTATAAAGCTGTCCCCGCCCAGAGCTCGGGGAAAGGCAGGCGGAGG
-GTGGGTGTGGCTCCCGGCAAGACCAGGCGCCTACTATGTGTCTCTGATCTGCCCTACAGC
-CCAGCTAGGAGGAGGATCCAGATGGTAGAACTGTATAATAAAGGGCTTGCTTTATTGAGG
-CTCTCTGCCACCCAGATTTCATGAGGGTTGATCCCCAGTTGACAAAAGCTATGTGCAAAC
-AGTTGGTTCTGGCATCACCCTGAGATCTCCATAATTCCTTTCACACAGGAAGAGAGTTCC
-CTGGAGCAAAAACAGTTCAAATACTGgtgcttcagtaagtcatgtggaaagcggggataa
-taatagtgccctcttcataggACAGAAATCCTAACTGCCAGTGTGCACTGAgctgactca
-gtgtcaggcatgttcttggggcttgagagaaattaatgcatttaatcttcatggcctttt
-ggagagatgctattactatccctattttccagatgaagaaacaggcccagagaagtcgag
-agccttgtgtaggtcacacaccttgtatatggcagaactggTCTCTGATGCACACTGAGC
-TACCCTGACAAATACtgtaaccacctgaggggttctttctgcccactgcataaagaaaga
-ccatgaggctggccatgccacaggggaaatgagtttgttcccaaatcatcttcaaagctt
-gtaggtgaggggtttttcaaaggcagtataggggaagagttgggggtggccaggtaacag
-gtgcttgctgctgattggttggggtggagatgaaatcatagggggttgaagctgtgctcc
-tacaggctgaatcgcttttggggggggggccacaggagcagggttggcggtcctggtgga
-gacatcaggtttaggtggagccatgggtgtcaaatctgcaaaaaacctggaaagatggcg
-gggcgtggtgggtcatgcctgtaatcccagcactttgggaggccgaggcgggtggattac
-ctgaggtcaggaattcaggaccagcctgaccaaaatggcgaaaccctgtctccactaaaa
-atacaaaaattagccgggcatgatggcggacacctgtaatcccagctactggagagactg
-aggcaggagaattgcttgagcccgggaggcggaggttgcagtgagccgagatcgcgccgt
-tgcactccagcctggacaatagagcaagactctgtctcaataaaaCAAaaacaaacaaac
-aaacaaacaaaaaacaaaaaaaaaacaccaactggaaagatatctcaaaaggccaacctg
-caacagtggtgttatttgcaggagtaattggggaagttgcatatcttataacctccagaa
-taatggctggcaatcatttatgtctacaccttaggaggacccaggctcctcttctttccc
-cagcctgatggcctctcattaactttacaaaagtggttGCTCACAGTGCTACGGCCTGTA
-AGTGCAGGGCCAGGATGTGAATGCAGACTCAAATTGGTGCCTCCatggatgtaaaacata
-ttgcacagattctgacacctagtaaatgctcagtGCATATTGACTTCTACAAATAATTCT
-GGCCTGCCTGTTGTGTTATTTTCCAAGACATTCATTTACTTAACAAGCAATCAATCACTC
-TCCAGGCTAATGCTTGGGGCGAGAGGTGAGCAGGCACTAGGGAAGGGGCCAGACCCCTCG
-CTTAGCAGGCAGGTGTTCAGGAAGTGTTGCCACtgttggggctcaggacatacacacccc
-caaaatatgactctgggaaaccagaatgtgccacccccaaatacacctctttgacatact
-ttgagctggttattcagagaaactgcagacacaggagtagctctggaaagctattctttg
-gtaaaagaaatttacatctatcaaggaaatctacattagtaaaggtgcctgtatcaggaa
-aaaggctgctccagaagaattaccctagagactttcttttttttttttttttttaagata
-caatttcacttttttttgcccaggctggagtgcaatgctgcaatctcggctcactgcagc
-ctccgcctcccgggttcaagtgattctcctgccacagcctcccaagtaactgggattata
-ggcgcacgccaccatgcccagctaattttgtatttgtagtagagacaaggtttcaccatg
-ttggccaggctggtcccgaactcctgacctcaggtgatcttcttgcctctgcctcccaaa
-gtgctgggattacaggcttgagccactacactggccaccagacagacttttatctgcaca
-ggaagacaaccattatttaccatacaataattcttcccctcaccctcccataactgtgtc
-tccgccaatcccccaaagccctaagaccctattccttaaacttcaatcatctgacccttc
-tttgagtctcatattttgtgggatttccacgcacagatatgtaattaaatatggtttctc
-tcctgttactcagtttcatgtcaatttaattcatagcccagccaaagaaccatgaaaggt
-ggagggaagccatgtttcccttctctataGTACCAAATACTTTGGATCTGTtaaaaaaaa
-attgcaggactctaaatttatgatgccaagggagaagttaagccttgcagagtgTGAGTT
-ATGTGGCTTGCAGGATGGCCACTTTCTtcttctttttttttttttttgagacggagtctc
-actctgtcgcccaggctggagtgcagcggccaggctggtctcgaactcctgacctcaggt
-gatctgcctgccttggtctcccaaagtgctgggattacaggcatgagccactgtgcctgg
-cCAcaatttcatacttatctctgccaaatactataaggtgtcaaaatttggcatagaggg
-tacaaaactataactcaatccaaacagaataatctttgcttgtataattttttaataatg
-aaacatcaatattggtttaataaaggcagctatatcttgaactatttagttaaataccct
-aacttctaatcctgtggccttaggaagtctagtctacagacgtgaaggaagtttctttag
-ggaaaggacttatcatctttgatattaaagaaaagagaatttatataaaaataatcttat
-atggtaaattcttgttctaaagtaaatgaattggttgtttaaaaagaaggatgtttacaa
-cgagtcagaaagttgaggcatgtcagagattgtgtaaattgtaaaaattttataaaaggg
-aatttatgcaagaaatgttgtacagtttaaaagtgatgagggggccgggcacggtggctc
-acgcctgtaatcccagcactttgggaggccaacgcgggtggatcacctcaggtcaggagt
-tggagaccagcctggccaacaagatgaaaccctgtctctactaaaaatacaaaaaattgg
-ctgggcatggtggtgggtgcctgtaatcccagctactcgggaggctgaggcagaatagct
-tgaacccagaggcagaggttgcagtaagctgagattgcaccactgcactccaggctgggc
-gacaagagtgacattccatctaaagaaaacaaaaacaagagcgactaggcctcctgaatg
-ctttataaaatgccaccataactcttaactgtacaacttgcctgctttgtagctgggtaa
-gacctagcacacatggagttaaatgctggaataagtcagaccttatctgcacttctgtct
-aggtcctaggctctacatctagtacataattacaatctcaaactgactaacaaaagtaaa
-agttgctaaaagttaacagtgtaacatgtattgttccatagaaagaatctaagataagac
-tgtaaagctgaggctagccgtggaattgtaccattaaatacctatgagtttcctcttgag
-gttgcaagataacctagggttcccggcctctcagaaagggcattctttgcttaccacaga
-tcagaagccctatacagggactgtgtacacaaaatataaggccagtttccaagggctttc
-ttggcttcgtaaatcaagtttgattccttaaaggaaagcataccattccagtcaaggcct
-tggtaaaaaaaccagtttttccaattgtgtcctgttacaaaagaaaacagattcttatta
-cacttgtgcaaataactatatcgccataacttaagaatactcacagatagtttccaaatt
-ctggagaaaatcagggagagagaaacaagtatgctacaaattttgttcatgggagtatac
-taaattgttaaaagctgttaatagctcaaaagaaaaatttcgaggccggatgcagtggct
-catgcctgtaatcccagcactttgggaggccgaggcgggcggatcgcctgaggtcgggag
-ttagagaccagcctgaccaacatggagaaaccccatctctactaaaaatgcaaaattggc
-tgggtgtggtggtggcacatgcctgtaatcccagctactcaggaggctgaggcaggagaa
-tcgcttgaacccaggaggaggaggttgtggtgagccgagactgcaccattgcactctggc
-ctgggcaacaagagcgaaactccgtctaaaaataaaataaaataaagaaaagtttctttg
-actttgaaaagcaaaacaaagtattagcaatattttaagcaaaatatcaaaaagatcact
-ccagtctcctattagttcagttcgtgcagttaattcctgtcctgcttgatattaatgaac
-attttagctaagagtcctaaccatttttcctgtattctgatgtcacaatctccaaattta
-tcagaaacctgcattcaagaacacctgttagagctttatagctgagtataaaacccttct
-aaagaggatcaaaacaagacaacaattgtttatggatgaccaaaagttttagggtagcca
-tagttaaagacacaattgacaaggaaatctgttacttctgtggcacacaataattttaac
-ataacaattataattactactgataacacacactaagacatatcagaattataggagtct
-cccataactttggaacacataccaataacatatttatacaaatatggcccaaagaaagcc
-aaacattattttatatttgacaatgcttcctgtatgacttcataccaaataagccaaatt
-ttacctttatattagtgtgttattaatgttaaactcaattttaatgttttgatcataagg
-tcagattttcatggacccttttttttttttgagacagagtctcgctctgtcgtgggcgac
-agagtgcagtggagcaatcttggctcactgcaacctccacctcctgggttcaagctattc
-ttctgcctcagcctcctgagtagctgggactacaggtgcccaccaccatgcctggctaat
-tttttgtgtttttagtagagatggggtttcaccgtgttagccaggatggtcttcatctcc
-tgacctcgtgatccgcctgcctcggcctcccaaagtgctgggattacaggcgtgagccat
-tgcggctggcctatagaccatttttaaccctttataatttttgtcaaagagcaggttagt
-gctttaagaaaaacccattgtgcttttattttaatactcaatttacagaaaaactggatg
-atacacctttaactttagccaagatgtttacacacagtatttcctttacaattaaccttc
-caaaagttgcttaaaccttcatttttattttattcaacttaaaacaattctttaaccttt
-taatctaggtaaaaatccacattctcatgcctccttataatctttttaccaaaagtatat
-gtaaactgttttttcaatagtcttaaatacatgttacactgttaacttttTTTTTTAAGG
-CCTACGTAACAAATAATTATTCTTggctgggtgtggtggctcacgcctgtagtcccagca
-ctttgggaggccgaggcaggtagatcacctgaggtcaggagtttgagacaagccttgcca
-acatggcaaaaccctgtctctacaaaaatacaaaaattagctgggcgtggtggtgggtgc
-ttgcaatcccacctactcgggaggctgaggcaggagaatcacttgaacccgggaggcaga
-ggttgcggtgagcttagattgcaccactgcactccagcctgggtgacaagagcgagactc
-catctTGGGGGGGAaaaaatgggaaactggagagagaaaattacatttcagaaactataa
-cacacctgttattaaattccagtgttgcctaatgttgttcaatttttattactttaaatt
-aaattctaatttttctgactacgagtttccaaaataagctttgttttcttaaagccctat
-gaactgaaaactagacgtttcagcaggcactgcctctaaacgccccccagccatcacagg
-aggaaacctcttcactgctggagctgacaactaataactgagcgtgcctggaatcctttg
-cccccacatctaataagtccatggaacccagggtaattgagatggcatctcttacaagaa
-tcaacttctgggtcaggtgcggtggctcacgcctgtaatcccaacactttgggaggccaa
-ggtgagtggatcacttgaggtcaggagtctgagaccagcctggccaacatggtgaaaccc
-catctctaccaaaaatataaaaaagttagctgggcatggtggtgcatgcctgtaatccca
-gttattcgggaggctgaggcatgataatcacttgaacccaggaggtggaagttgtggtga
-gccgagatcgcgccattgcactccagactggcgacagagcgagactccatcttaaaaaac
-gaaacaaaacaaaaaaacaggaatcaacatctggatacattacactcgagtcaaagcctg
-gaaagctgaggaagcaacccctgatagccaaaggaacatcctaaatatcagtgtaaagaa
-ataggaaattttaagctcataaaaggtaagtaactgagtgagaactacttatcttactca
-gtctcacccctacctcaccaaatacttttagatgttcctacctctccttttaagacaaat
-attaaaactttttaatggaaattattcactacaccaccattgtgggaactgctttacaca
-ctctattatttgcagtgggactatgtactacagcaccctcaggatggaatatcagacaga
-gaatctcaattatggtaccattttgcttaattattatcctcatagcaggaataacagtta
-ctaacagcaaataacacatgggcctttccagacatgtgcctctgcctgtcattgggtgag
-gaatgttgtttctatatcaaccaattaggcctagtaagaggtgctgttgaaaaacttaag
-gaaagggctataccaaaacaaccaaatagattcttggtttaggaacaaaatcatagcatg
-ggtcatcccattcctgggacctttcctaataatatgcctaggactaatgttcttaccctg
-cctaattaacctttttcaaagatttttaactgacaggatcatggccatttcacagacaac
-tacccaaaaacatccacagacagcgttactgctacagttaatccaagaccagaaaactct
-gtcccctcatcagcaggaagtagccagaaagaacaccctgcctttcatcctttttataac
-tataaggtctggattgacagagcaggagcattgccatcttggacaagcactgccattcta
-aagttccccttgatcaaaaaccacctaaatccaaagggcatcagcctaatggctaaggtc
-agcatgaccataaaccacaaatgacatctctgaccagaaacattccaaccataagttaaa
-gccctccccgaccagagacgtgccagccccaagataacctcccctccaggtggagagatg
-tcagccccaagataccgtcccttccaaccagagacattccaaccctcaatagacttctcc
-cctacacaggaacattccaagcctgtgataagctctcttacccagaaaccagtaaatacc
-cttagtatgtaagagagagcattcctgactgaaattggacagaggcccctctcaggttta
-ttcttcaaaataaacctgtctttgactgttgagcctcttttcatgtttctttcctctttc
-ttgaactcttacaACACCTTTGTTAGGCGCAAATtttcagtgctgcaaaagaaatagcac
-tcgaacataaatttaattttctcagcaaggcaattttacttctatagaagggtgtgactt
-gtggatggaacaatggtgagagcacacctgaacaagggaggggaaggggtttttattcct
-gatgcaggtagcccctactgctgtgtggttcccctgttgactaggattggaccacacagt
-ctaagctaattccgattggctgttttaaagagagcaggggtacgagtcggagtagcggag
-tgagtagtttggcgggaaggacagttaggaacaggtgactaaaggtgactcaggtcagtg
-caggtgaccaggggtgactcaagaaggagcaggtgatcaggggaatagatgtgaactact
-gattagaactggtggaaaaggttgtttactgaaactaggggcaaggaggcaaagagaatg
-agaaagttaaactttaaaatggagaacaaagaacaggggacctgaatatactcatacatt
-ggttccttggagaggatctcagaactcattgtacttaacaATTTACAGGCTGAAACATTT
-GAAAAGGAATTTGTTATATCCTACAatttccccctttcaattttcatagtacttcctctt
-caaactttttaaacatgtcttggcttagctgctcgacttaatcctctaaaagaaaaagct
-tatctgaataaggtggaggtgagttaaggaagattttagtaagtgctgcttttataagtc
-tttgcactagcccacagatgcatggtatgacataacacctaacaagaatgagtacagcta
-ttacggctgcaagagaagtaagaattgaggctgtgatttctttccatttactgaaccccc
-tttctagccaccctgagaaagggttatcgactccagaattttagctagttcattggatag
-agtggtaagtctttataaggcccttgttatgttcccagtgtgggcagtgttatttgggat
-aaaggtacaacactgagttttaatcataatacaaacaccactttttctgctaatatcata
-tctggtgccattctgttttcccaggccatctggctagtgggccccaattgttctgctatc
-cctttgacagcatccctggtgtaattaataaactgctgctgattataatagatgtaattt
-atccagtctacatttttattaatcgtcacccatgaaaatattgacttaaatcctgcagct
-atttgatctcgggctttaaattcatctggtactcctagtggaactccagtaatgtttata
-taaacatgggggtcaaacgactcatgtaaggcacttcttttacaattttcttttttatca
-tgttgacggaatgctagagtgaaagggatggccaattggactagagcacgagtgctgctc
-taattgcttggcagagtatccagcaatagtgcccctcaatgccaccacacacctgctcag
-ggatgaacaagggcagactgatgggtaagctcttgaaaaggcttggtttcaccgcaccct
-gttaagtctccaaggaatgctaacttttccccctgccgtgaaagggacaggtgaacttaa
-catcaggggctggaggctggatggccctccgggctgacccacagggctcttgacctcggg
-gaagagcagtgaaagcgaacagcagtgaaagagttttgcctgactcattgccccggctgt
-ggggttctggaagagagctaccatacagctcatgccctgtccatgagaggaccactcgag
-gggaaaggggacaatttgggtctctggcctgcctgtcgcacaagcagtcacttttgttta
-gcatgcgaacagaatatttaatccatttcagccaagcatttacatcctggtactctgttt
-caattgctatagtttgttttaaatctataacttctacaacagctactttggttttatcat
-tgggtatataacgaaagaagatctggttagtggagaacttaggagtgggagaagggggtg
-caggagttgaggaggcaatgaagcacatttcaaaggatcctctggggtccttccctgaga
-cttctgctcctataccatagaaacggtactctggggagcagaggtggtaatctgtactgg
-attacattggttcatctgacaatggggtggtccatccttgctccttggtagtccataagc
-cattagaccagctaaaagttctgttctaggagggcaagattcctagttcatactgggacc
-atcatcaatatcttcccagactaactgatcccagttaacagattttcagtctgaggagag
-ccaggaaggacaaagatacttttctgaaggggagagttgcctctggtttggcagatctcc
-acaggtcatcccaaggcaagcatcaaaagtaatagtttggggcgaacttgttacataaag
-aacgagaagactagcaatagaaggggaaaagaaagagatggaatgtaagaggatcaaacc
-cgttttagctttagcttggttggagttggccctggaatagctgtccatgattctggaggg
-ggtggtgctcttttgacctaggtgtgatgagtccatcctctttctgctgtttgaactgtg
-gtctcggtggttagaagcaacaggtagggtccttcccaagccagttcgagtttcccttcc
-ctccaacttttgacaaggacacagtccttaagctgatgttggtgtactggaaactgtagg
-ggtggtacctgttctaaaagacctttagttctgagggaagagaaagtggaaaataaacca
-agtatataatttctgagaaactcatcttttgttttgaacataggaatgtcagcagtggag
-tgtaaacagggcaacctacacaacatttcataaggggataagccaacatctctctgagga
-gcagttcagactctcaagagggcaatgggagagcatctatccatggcaaccgagtctcta
-agactaatttggttaggtggccttttttttttttttttttttttttttgagagggagtct
-cgctctgtcgcccaggctggagtgcaatggtgccatctgagctcactgcaacctccacct
-cccgggttcaagtgattcttctgcctcagcctccctagtagctgggactacaggcacgcg
-ccaccatgcctggctaatttttgtatttttagtagagatggggtttcaccatattggcca
-ggctggtctcgaactcctgacctcgtgatccacccgccttggcctcccaaagggcttttt
-ttttttttttttgacagggtctctctccgtagcccaggctggagcgcagtggcgcgatct
-cggctcactgcaagcaccgcctcccgggttcacgccattctcctgccaaagggctttttt
-aaaaaatagtttggttcattctttccactcttcttgatgaaggtaggtgccagggagtat
-gatattcccatgttatatccagtatctgggctaatttcttaatgacatgtacagtgaaat
-gagtcttattatctgaatcaatgttttctattaatctaaacttgagtataagattttcaa
-ctaatgccctgtctatgttattatcagttgtacttgaaaaggaaatagcttctatccaat
-gagtaaggtgatctactatactaataaatacttcagatgatcagttggaggcatctctgt
-gtagtcagtctggatactttggaatggccttaagcctggactccttcccccaaggggtaa
-tgttttactaaacaactgtctgtaacctgtttggccagggtataaatcctatgcacccat
-aaactctgatgaatgtgtcacacgaggcttggggcctccaatgggtcctttaatgcagtt
-ggaataagacttccctcataaggggtttggataacatttctctctggtctagcaatatcc
-attttccttctgaattctctttagcacctatttttattagtttttaaaccaaagaaagcc
-aaacaccattttatatttgataatgcttcctgtgtgattttataccagataagctaaatt
-tcacctttatattagtgtgctattaatgttaaactcaattttaataaaatcttgtagaca
-tatttattcaattttaatgtctgaccataaggtaaaattgttatagactctttctaacgc
-ttcataatttttgttaaagagcaggttagtactttaagaaaaacctgttgtgcttttatt
-ttaatgtccagttcacagaaaaactggatgacacccctttaactttagccaatatgttta
-cacacagaaattcctttacaattaacatttcaaaacttgcttaaaccttcaaaacaattt
-tttaaccttttaatgtaggtaaaaatccacattcttatgccttcttataatccttttacc
-aaaagtatattttactttccttacacgccttgaacataaactgtttcttcaatagtttta
-cattcaggaggcctaattacttttaaattatacaacatttcttgcataaattccctttta
-taacattttccacgactttcacagaccatctttgacatgacttaaatttctgacttgtga
-acattcctttctttaaacaaccagttaatttattttaggatgagaatttaccgtataaga
-ttctttttacataaattctccTTTTTTCTTAATGTcaaagatgataattgttttttccca
-aagcaaacttccctcatgtctgtggactagactgcctaaggccacaagattagaagttag
-gataatacatgttacactgttaacttttagcaaattttacttctgttgaaaaccttgtaa
-gtttggaattttaattaaaggaaggcttttttggtgtccggggacatggacaatagttat
-ttttttggcaactgaaggttatttaatacttgggtgattaattcctcgtggaccgggtct
-tgacctttgctattaataagacctggttcagtccaaatttttccacatgcatgagccact
-ccaaaggcacactgaaaattggtatagatggttccttcctggttctgtaagtactttaag
-gcttggctgagtgcaaacagctcacacgtttgagcagaccaattattaggcaattttcct
-aactctatctctacACCTTTAACCATTGTTCCCTATTTCTCATTCAAACTTGGACATAAC
-GGTATgtgaaaaagagcctcttgtgactgttacctctttacaatggaatgttaagcaacc
-cctcagaaagtagggagtagcaaatcaaatctttgtaactacatttcagcctttgccggt
-tgaaatgtcagagccccggcatcagaaagtggtcaactcaagggctgataagaagaattt
-accaacaacagtataggtttgaaaagtaaagttttattagaaagaaagaacattgcagaa
-gagtgcagcgaggtgcctcagcaagaggggactgagagggctgtggtggatattccttag
-gcgcatatatgaaccttaaggcaaaagcttgagggtaatttggagcatactagccacgta
-ggttatgataaatggttacatttgtagttattttggtgccttaatgtcagcaaggattgc
-acagtgagtttcgcatagaaattctggttactacaaaatttttgaaagacccctggaacc
-agatgccaactttagatatgtcgatgaagagtcaaactctgtaaaatatttgaagagatt
-tattttgggcgaaatacgagtgaccatggcccatgacacagcacttaggagatcctgaga
-acatgtgcccaaggtggttcgggcgcagcttggttttatacattttagagaggcacgagg
-catcaatcaaatacatttaagaaacacattggtttggtccagaaaggtgggacaactcaa
-agtgggaacttccagactataggtaaatttaaacattttctggttgacaattggttgaat
-ttgtctaaagacctgggatcaataggagggaaatgtttaggttaagataaaacattgtgg
-agaccaaggttcttttgaagtcttatagtggctgtccttagagacaatagatgacaaatg
-tttcctattcagacttttaaaagctgctagactcaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaggctgccagactcttagttaatctcagagggcctggaagaaaaagatctagctatat
-taatagagattatttacagatgcagatttccccccacaaaggacagctttgcagggccat
-ttcaagatatggcaaagaaacatgtttttgggtaaaatatttttgctttcttctttgtca
-cataatgttatgccagagtcagattggaaagcaagtcagatatataggtttaaataaaac
-ccatctgatgagaatttatggtttgtagggcatgactccccagaccccttagataggaat
-ttcagcaaaataaaaagatcagagcttagtcctcataatcaagaaataaccataaaaatg
-ggcaaccctatggagtagccattcttttattcctttactttactaataaattttcttttg
-ctttgcactgtgaacttgccctggattctttcttgtgtgagatccaagaaccctcttgtg
-gggtctggattgggacccctttccggtaacGATTAtacttctaaattcctcagataagga
-gtttttgtctcgggctgcttcagggtcaccaggtgatttttgctctcctcaCCCCTTTGT
-TCAGCTTCTCTGTTTTTGCCTATGTACACAACTCTCAGATTTGGCCACtggggagagcaa
-agttatacctggtgaccatcaagcagaccattcagagacaaaactccttatcagaactcc
-ttattcagaagcaattagacttccctattatctaaagcaggcatctcattccaggcttct
-ttcccccaaatttataagtaactagaatttctatgcatctctggaatgcatgcatatcaa
-aactcacggtgcTgaaaatttgcatctgtaaagaatctctattaacatagctggatcttt
-ttcttccaggccctcccaatcctgaagagattaactaagagtctaacaccttttgatggt
-ctgaataggaaacatttgccatctgttgtctctaagggcagcgaacataagacttcaaaa
-gaaccttggtctccacaatcttttatcataacctgaacatGAGTCTCTTGCTGATATTAA
-GGCATTGAAACCACCTTTGCAAAATTATTACAGACAGcatcattgcaggaatccaggaca
-ctggagtagaggatgttccatacctttgggttacaagccacccccaggaccttgtcctca
-ttgcaaacaagagggtcattgtgatatggaaggggggcaggggagtgctgggtacagaaa
-tgcagggttcctggtgagggctccacccttgggcctgtgcccacagacctaagtaagaac
-aggcactcctgttttcatgcctgaatgttgtattttccaagaccactctggcccaccaca
-tccccttcctgtgtccataTtgttaaatatgaattctaaatttctcttcaaagaattaat
-atgtcagtatgttcaattctttgacttctgcttttaaatttaacttcctcgtaaagcaac
-ctttttcgattacctgctccaccctgactcattccgattacctgctccaccctgactctt
-gcaggttacttgctacctgctccaccctgactaattattctccaccctgcataaccattt
-ttttttcccgccaaagcactcatcctgtcacactctttaaatctgccaattggaattagt
-ttagcctgtgcagtctaaccctagccaataggggaacgacacagcagcaggagccttgtg
-cattagggataagaacccctttccctcccttgtccaggtgtacactcaccattgctctac
-ctgtgagggtgcacccttctatagaagtaccttgccttgctgagaattaaaaagaaaatt
-ttatattcgagtgctatttcttttgcggcactgaaactttatatgtaacaatttgggggc
-tcgccctgattacatttccctctggggcagtctctggttctctcttgtgaggagcgctcc
-gccccctgtggcggcctcagccgggagaaatcagaacccacccagtgcgaggaacaaccc
-gagctgtcagcaacaggggggaagaaaactggccggcaacctagcttaaagaatcctcac
-atactgcagcgacgactctgcgcacagagcaaggaaggagaagccgcgggagctggtaaa
-gtatttccttggtggtcgggaccaaggtaagaaagccacgggggtggtgggcggtgaagt
-actccttggtcagggtggcttagaggttaaaaagaggtgagacatccccattggcggaga
-ttgaacctcacacaaacctccagtagtagaaaaggcaagaaatttccagtggggaaattg
-agcctcaccccaaaaggtaagaaatttccagtaagggaaagtgaaccttgaaccttatcc
-caaaaccatcaagatgggaaatatcccaagcaagacagggagcaagggggataaacatgg
-taacaaagatatccctccagatggccccctaggtctcatgctaaaacactggaaggataa
-tgaaaggatacacataggaaaaagcaacaaatggtaaaatattgctgttttatttggagt
-cagggacccatcctcagtccctcaatcttctggtcaaagtttgggtcaaatgagaatgta
-atgtgtcagcttctaatccgatacgttaatgataaaagtccagtgtctcaagaagaacta
-ggctatgccctttgttggaggcaaggacctgccctcctatttctcttaaaaataaatagg
-gaagaacccaatctggcacctcaaaatgaaaagtcagaggagccagctctcatgcctaaa
-gactccagtgctgcatggtatcccctagaccatcttcccccactcagtgtccccaaactt
-tcccctcagacagccactgccacctcagatcaccactgccacctcagatcctgttccaaa
-ttccccctctactcacgctatccctcctccttataaccctgactgttgggaattaccatc
-ccaccagcctgttctctcccaacctaaagacccctctctaaaaagactccagcgtgaggt
-agaacaatgtaaaaaagatattcagaatttcctatttccctccgtacctaagaggtcagc
-ccctaccctcttccctttgaaagaggtaccacaagttgggggcgggggggggggcattga
-ctttgtaaatgctcccttaatcagttcagaagtccagaattttacaaaggagcttaaact
-gctgctggacgacccttacagagtggcagaccaaattgaccaattcttagaacctcagtt
-atacacttgggtcaagttaatgtccatcttgggcatcctcttttcagggtaagaaaggag
-tatgattcttaggtctgctatggtagtttgggaatgtgagcaccctcccaatgaaaacgt
-tcctaccacggaccagaaattccccgcccaggaccccccatgggaaaataacaatgcaga
-tcaccgggaaaatatgcaggacctaagggagataataaaaggaattcaggaatcagtacc
-ctgaacccaaaatctttctaaagcatttgatatacaacaggaaaaagatgaagggcctat
-gagattcctagacagactgagggagcaaatgaggcaatatgcaggcctcaatttggatga
-tccccttgggcaaggaatgttgaaactccaatttttcactaaaagttggccagacatttg
-aaaaaaaaagttacaaaagatagacaattgggaagaccatcccttaagtgagcttctcag
-ggaagctcagaaagtgtatgtgaaaagggacaaagtaaaacgaaacaaaagacaaaactt
-atgtttttcaccttccaacagatggctccaaacccaggtacttctagatagagtttccag
-ggagccagaaactataaagggtccgaatcctcttttaaagaaccccagcctccatctgga
-ggaccagggtccttgtctaccaagccccctaaagagtatgggggagaagggttaaagaat
-cccagaactaaggggaggaaggacaaaataggtgctatagatgtggaagagcagaccact
-tcaggagaggatgttctgaactaagaaaggagaaagaagccctttcactcatgactttca
-aggaagaatagcggggtcaggggctctgtctcttttatcttgagtcccaccaggagccct
-tgataaatttgggggtgggacctaaacatgagcttatcacctttttagttgattcggggg
-ctgctcgctcctctgtttccccccatctaatgttgtctccttcttagaggaacttttagt
-ctccagggtaaaaggtgtaggattaagagcaaaaattttagaaagcactgaagttagata
-ccaggatcgctcagcttatattcagttcttgtttatccctgaagcaggaactaatttact
-ggggaggaatttaatgttaaagttgggcataggtctacaagtcagcccaagaggattcct
-cacctcattaaacctactcaccaccgcagatgaaaaatatattaatcctcatgtcttgac
-caaagaaggaaaccaagggaaactctaagtccctccgatccacatcaagctaaaaaaccc
-aggggaagtagtaagaaggaagcaataccctattcccctagaaggtaggatagtgttgaa
-acctataattgaaggccttatttaggatgggcttcttgagccctgtatgtctccttataa
-catcccaatcaagaatcaagaaatcaagactgctaccagccagtcaagaaattagatggg
-tcataccagctagtacaggaccttagagctatcaaccaaatagtccagagtacccaccct
-gttgtcaccaatccttacaccattcttagcaagattccatataatcatcaatggtttact
-ataataaatttgaaggatgctttttgggcatgtcccctggctgaagatagctgagatata
-tttgcttttgagtgggaggatccatactcagggtggaaacaacaatatcgatggaccgtc
-ttgccccaagggttcacagactcccctaaactttttggccaaattttagaagaagtacta
-gaaaaagttgtcatcccagaacaaatatgccttcttcagtacctggatgacattcttata
-tctggtgaagatctagagaaggtaactgacttctctacacatattcttaaccatctgcag
-tttgaggggctatgagtctcaaaaagaaagcttcagtatgtagagcctgaagttaaatat
-ttaggccacttaataagtgtaggcaagcgaataatagggcctgaatgaattgagggaatc
-gtgtccctacccttgcctcaaactaaacaagaactcaggaaatttttagggtcagtcaga
-cactgtcgctaatggattgactcatatacactgccccgtaaactgttctatcaaaaactt
-gcccaggagaagcctaaccgtctcctgtggacttctgaggaagttgatcaaatcgagagg
-ttggaggaaaggctcataactgcccctgttttaggcttaccctccctagaaaagccattc
-cacctttttgctaatgtggacagtagggtaccttcgggagtgctgactcaagaacacaga
-ggccgccagcagcccgtagccttcccatcaaaggtcttagacccagtcacttgtggatgg
-cctcaacgcatccagtccatcgctgctatggcaatactaggtgaggaaagcagaaaatta
-accttcggaggaaaattgacattaaacacgcctcaccaagttagaactatcttaaaccag
-agagcagtgagatggcttactgacttgagaatcttaaagtgtgaggccattctgttagaa
-aaggatgatttaacattgaccactgataattcactcaacccagcaggtttcctaacaggg
-aatccacatctaaggagggaacacacatgtttagatttaattgattaccatacaaaggtt
-tgaccagacctgggagaaacccccttctggactggacggcacttactcatagatggttcc
-tcccaggtgattgagggaaaaagacacaatgggtattcagtgattgttggagaaactctt
-gtagaaataaagtcaggaaaattgcccaacagttgatctgctcaaacgtgtgagctgttt
-gcactcagccaagccttaaagtacttacagaaccacatctatacagattccaggtatgcc
-tttggagtggcccatacatttgggaaaatttggactgaacgaggtctcattaatagtaaa
-ggtcaagaccttgttcacaaggagctgttcacccaagcattgaataatcttcagttgccg
-gaagaaatagctattgtccatgttcccggacaccagaaaagcctttcttttgaaagttga
-ggaaataacctagcagatcaggtagccaagcaggctgctgtgtcttctgaaatgcgtgtt
-tttcacttaactccctacctccctcctcctaccataatccccattttctcttccaccgaa
-aaagagaaactaataaaaataggtgctaaagagaattcagaaggaaagtagatactgcca
-gaccagagagaaatgttgtctaaaccctttatgagggaagtcgtatcccaactacatcag
-gggacccattttgggccccaggccatgtgtgacgcagttctcagagtttatggttgtata
-ggaatttataccctggcaaaacaggttacagatagttgcttagtatgtaagaaaactaat
-agacatactataaaatgattacctctcaggggaaggaatccaggctaaaggccattccaa
-agtatctaagttgattacacagaaatgcctctgatagatcatctaaaatatttactagtg
-atagtaggccacctcactccctgggtcgaagctatccccttttcaaatgcaacagccagt
-aatgtagttgaggccctaattgaaaatatagtacccaggtttcgactaacggaaaatact
-gactcagacaatggaactcatttcaccacacacattattaaaaagctattccaaaatatt
-agacattagatgggaacaccatactccctggcacccaccctcatcagggagagtagaaag
-aatgaattagactctaaagaaccacttaaccaaattagtcttacagacttggttgccatg
-gaccaagtatcttcctatcaccctgctgagaatttgaactgcaccatggaaagacattgg
-tctttctccttatgagatgctctatggattaccttatttgcactccactgttgatattcc
-tacctttgaaacaaatgatcaattccttaaaaattatatacttggtctatgttctacttt
-ctcctctcttaaaactaaaggtctattagcacaggcaccacccttggagttcctggtgca
-tcaacattagcctggggatcacgtcctcatcaagagctggaaagaggagaagcttgagcc
-agcctgggaaggtccttacttggtgctcctaactactgaaaccgcagtccgcacagcaga
-gagaggatggactcaccacacccaagtcaagaaagcaccgccccctccagagtcgtgggc
-catagtcccaggggaaaaccctactaaactaaagctaagaagaatttaactccctttcat
-ctattctattactcttttttctttcctcactctattgctgaccatatagttattaacata
-accaagtcaatttcacctcaactattgcatttgatgcttgccttgttatatcctgtgggg
-atttgtcaagccaaagaaagctctctacttcagatacctctgtccctcctggctctcctc
-agactaggcattagtgaatcgggaccatttaatctggggagatttctataaagatcccag
-tggcaaccaggagtcttcccccagtgatgtagagcttttaagccatagttggtccaaagt
-tctgtggaccattaaagagcaaggatggattgccccaaccagtttttgtaatttcctaaa
-ttcatacattcgttttactaaagggacagtgcccactaactctcagctaaaccagtgcaa
-ccctatacaggttattattttgagcccacaaaattcttcctcttttctaagctggttccc
-ttctttaagccagttttatggtatgggggctgaagtttcagggacagaccctattggatt
-ctttgaaatgcacttctttgatcccctgctgtctgcacctgcctctgagcctttttccaa
-aacctctcacaacggaaccattgttcctcctctatctaacgacaaggccaagatagcgat
-ggtagaagttaaagacttaaaacaaactggcaattgagacaggataccaagatgtaaatg
-tttggttggaatggatcaaatatttcatccacacgttaaacaaaagcaattgttatgctt
-gtgcgcacagcaggccagaggcccagattgtcccctttccactagggtggtcctccagtt
-gaccgggcatgggctgcatggtagctcttttccaggattctatagcctggggtaagaagt
-tgtgccaagctctctctctgctatatcccgaagtttgacaccttgtgggtcagcccccaa
-gggccatccagcttccatctcccaacactaagtttacttcgtgtctctcatgacagggag
-gaaacttagtgttccttggagacctgaagggatgcagtgagcttaagaacttttggccag
-gcgcggtggctcatgcctgtaatcccagcactttgggaggccgaggcaggcggatcacaa
-ggtcaggaaatcgagaccatcctggctaacacgatgaaaccccatctctactaaaaatac
-aaaaaaaaaaaaaaaaattagccaggcgtggcgtcatgcgcctgtagtctcagctacttg
-ggaggctgaggcaggaggatggcgtgaacccaggaggtggagcttgcagtgagccgagat
-cgtgccactgcactccagcctgggcgacagagcgagactctctctcgaaaaaaaagaaaa
-agaactttcaaaagcttaccaatcagccagcccttgttcatcccctagcagaagtgtggt
-ggtattgtggtggacctttactggacactctgccgaataactggattggcacttgtgctt
-tagtccaactagctatccctttcaccctggcatttcatcaaccagaggaaggaaaaataa
-gacatcgtaaagtgagagaagccccttatgggtctttagactctcacttctgtttagacg
-caattggggtcccatggagaatacaagatcaatttaaagtctggaatcaaatagctgcag
-gatttgagtcaatatcttggtgggtgacaattaataaacatgtagattggataaactaca
-tctattacaaccaacagtgatttagtaactacactagagatactgttagaggaatagctg
-agcaagtaggggctacaggccagatggcttgggaaaataggacagccttagacatgatat
-tagcagaaagaggaggggtttgcatcgtgactaaaactcaatgttacaccttcatcccaa
-acaacattgcccctaatggaagtataacaaaggcattgcaaggtctcactgctctatcca
-gtgagttagccagcagctcaggggtaaatgatccctttacaggatggctagaaaaatggt
-tcggtaaatggaaaggaataatagcctcaattcttacctccctcgtagctgtaataggtg
-tacttattcttgtcgggtgctgtgtcataccatgcatccgtgggttggtgcagaggctcg
-tagaaacggcacttgctaaaacctcccttaactatcctccaccttatccagagaagcttc
-ttcttttggaaaatcaagcagaacaactaagtcaagacatgttaaataagtttgaagaga
-aagccgtaagaaaaatgcaagaggaggaagttgttaaatatgaattctaaatttctcttc
-aaagaattagtatgtctgtatgttcaattctttgccttctacttttaaacttaatttcct
-cataaagcaacctttttcgattacctgctccaccctgactcactccgattacctgctcca
-ccctgactcactccgattacctgctccaccctgactcactccgattacctgctccaccct
-gactcattccgattacctgctccaccctgactcattattctctgccctgcataaccatta
-ttttcccgccaaagcactcaccccatcactctctttaaattagccaatcggaattagttt
-agcctgtgtggtctaaccctagccaataggggaatgacatagcagcaggggccacatcct
-tcagggataagaacccctttccttcccttgtccagatgtgtgctcaccattgctccatct
-gtgaggttgcacccttttatagaagtaccttgccttgctgagaattgaacagaaaatttt
-atattcgagtgctatttattttgaggcacagaaactttatatataacaatataaacccga
-gaccttggcgggcacacacacaagcagctgaatgtcaagaggaGTGGAGGAACGGAGTGG
-CAGAGAATGGCAGAGAGCGCTGGAGAGTGGCAGAGCAGCATGGCAGAGAGGGAGGGAAGA
-GGCGTCTGAACTTtggaagacacctccactcctcaataaagtctccgcatgtatcacttt
-tcaaacagttcatgtgacctgattaatccaggatgccagacaagaatctgggGAAgttaa
-cattcaggcatccctggatggcaaggctaaaggagcacactgtaacatatgcccacttgg
-gctccagcacctgtccatctgtgtgttcccccttccctcaggggtttgagcagtggggtg
-accaaacagacgagccacaccccctgttgcatgtcctgcaaggagaatcagggaactctc
-ctgtttcaGttggaagagcaagtgtccctctctctctcgtggtggggagacatctcttcc
-ttctgggctgtcacagccccaacctcaccaacctacctgacaagggagtctggcagaaca
-agggcaagggcagggagaagcacctctaactctattcctggataataatcaagtctctaa
-aagtcatcctggagccgggcacagtggctcatgcctgtaatcccagcactttgggaggct
-gaggcgggtggatcacctgatgtcaggagttcgagaccagcctggccaacatggtgaaaa
-cctaactctactaaaatacaaaaaaaattagctaggcatggtggcaggtgcctgtaatcc
-cacctacttgggtggctgaggcaggagaatcacttgaacctgggaggcggaggtcgcaat
-gagctgagactgtgccactatgctccagcctgggtgacagagagagactctgcctcaaat
-aaataaataaataaataaataaataaataaataaataaataaataaagtcatcctctagg
-gctttgaggccgttcaagcccctattttttccatctctgtggatgagcctctgttaaatc
-tgattgtggctgaacaagagataatgttcctaatagatacagggaccagttattcagctt
-taagtgtttattacagcccaatgtgctagtcctccatttcattacgggtattgataaact
-tcagtgaggctgtttcacactgccactcccttataaaatgaaaggctattcctttaccca
-ctcttcagtcctgccaagctgccctgtttctttattaggtcacaatttgctcacaaaatt
-acaagcgaatttacagttaagacctcacattctagctgtaattaactcacacttcaccaa
-aaaagttgctgcagtctatagaacatcacattttaaaacaagtgccggccaggcgcagtg
-gctcacgcctgtaatcccagcactttgggaggccaaggcgggtggatcacttgaggtcag
-gagtttgagaccagcctggtcaatatggcgaaaccccatccctactaaaaatacaaaaat
-tagctgggcatggtggcacacacctgtaatcccagctactcaggaggctgaggcagggga
-atcacttgaacctcggaggtggagattgcagtgagccaagatagtgccattgcactccag
-ccctggcaacaagagtgaaacgctgtctcaaaaaaaaaaaaaTTGTTCTTTTGTTTGCTT
-TTCTTTCACCCTGATTCCTCCTTCCCCCTTTGCCGTCTTCAGTACCAAGCTACAAAGCTA
-GGGGTGGCTGAGGACAGTAAACAGAGTGTGGtcttagctggctttttccctcctgggaag
-ttgttgtttaggatcctaattctagttcagaggtgcattctaaatagtcttctccattgc
-ctttccccccaaaattaatctcacacgttggcttgtgtgtgcattcacgtgaggaactga
-actgtcattttcatagataaataagagactgagtttccttagctccaaagagaaagggca
-ttttgctcctcccagcagaaaggtacccgagtgactggggggccttgcgggagtgttggg
-gggttgagcccccagcgacatgaagtgattctgcagggaactcacaacaaaattagtttt
-aaaaaggctcgtccaggaagcacatataggaactggtcactctgagttttgagccctctt
-ggaggtgctagacctccggagaaaacactgagacacctaagagggtggtggcaaggattc
-agtggtgacacactgtggagtctcatctgcaaccattacacttcgacctactccacaaaa
-accctaggccacagctcagttactccttaaaagaaagtgggaaacaaataatctaagaat
-aaggaaaaacaaggtgttgacgaaaagagttaaactgtgtaaaatagttgaagatattta
-ttcagagcccaatatgagtgactatggcccgtgacatagcccttaggaggtcctgagaac
-acgtgcctaaggtggtcggggctcagcttggttttgtatattttaggaaggcatgagaca
-tcaatcaaatacatttaagaaacacattggtttgattcagaaaggcgggacaattcaaag
-caggggtcagggtgagggtggcttccaggctataggctataggtaaatcggtaaatttaa
-actttttgttttgttttgtttttttgttttgagacagagactcactcttccacccaggct
-ggagtgaagtggcacaatctcaactcactgcaacctccgcccccatgggtttcaagtaat
-tctcctgcctcagcctcctgagtagctgggattacaggcacccaccaccacgcctggcta
-atttttgtatttttagtagaggcagggtttccccatgttggccagagtgatcttgaactc
-ctgacttcaggtgatccaccggcctcggcctcccaaagtgctaggattatgggtgtgagc
-caccttgcctggtctaaatttaaacattttctgattgacaattggttgagtttgtctaaa
-gacccgggatcaatagaaagtaaatgtttaggttaagataaaagactgtggagtccaagg
-ttcttttgaggtcttatattggctgcccttagagacaataggtgacaaatgtttcttatt
-cagacctttgaaaatgtgctagactattagttaatctcttcaggattgggagggcctaaa
-ataaaaagatctagctatgctaatagagattctttacagttgcaaattttcccccacaaa
-gtacagtttggcaggaccatttcaaaatatggcaaagaaacatgttttggggtaaaacaa
-ttgactttcttcttggtcatgtaatgttatgccagagtcagattggaaagtagtcatcat
-atataatgttaaataaaatccatctgatgagaatttatgatttgtagggcatgactcccc
-agaccccttagataggaatttaggcaagatagaaaaaatcagagcttagtcttctcacaa
-gagaatgaccctcttttaggtaccccattgattttacggcatctctactttgcaagtgtt
-tgtgtaaatggacatattatggtctctttgtgcacaattatgtcaaagacaatttagagc
-ttgaaggttgacctccagctgtaaagttcctaagttctctatctctctgctttcttttct
-gcctgttttaagtctgctattatttttctttctttttttgagacagagtcttgctctgtg
-cccaggttggagtgcagtggtgcaatctcagctcactacaacctctgcctcccaggttca
-agcagtcctcccacctcagcctcctgaatagctgggactacaggcatgtgccaccactct
-tggctaatttttttttttttttgagacagagtcttgctctgttgcccaggctggagtgca
-atggcatgatctcagcaaaccaacgagtttctattaatatctcatggctagagttctgag
-ataatagctataggatctttggttgtatgagtatgtatgtgtgtgtttatgcatacatac
-acttatttcattgtgttttctagccacaggtactgaattggcttaaagttaaagaatatt
-cataaattaataagcctaaatgcttttcaagttcatgtgacttaagtaaaatctttaata
-agctagctttaaaattattggtaaagtaatattagaaatgtcttaaaaattgttagcata
-aatttttgtttgcatttattgatcaagggacttcatatactgccaaatactgtaaggtgt
-caaaatttggcatagggtttgtaaaactacaaaaccgttcaaaacagaatgatttttgct
-tttgtaatttttgataaataagacattgatattggtttaatgaaaacagctaaatcatga
-attatttagtgaaataacaatatatttaatcttaaggtttttacttagcaaacacctgaa
-attcacaggctatcaaatgtttgacagggaaataactttaaatgatgactatcacagttt
-tcataactaacctgggtaaactattaaaataaaatatttaggtaaatgtaatgggataaa
-tacttgtagacaaagttgtcataatttaggatctaaagttatgttaaattaaacaataga
-tatttcattaactgggtttttttaattaaaaaagatattgcaggaaatcattttttttct
-aaaaaatgtgttcttgttaaaaggaggataatttttgtctaattcaaagcttatttaaag
-gttatatataaaataaggtaaaaagaaacaagaaaatatataaagaagttatagaaataa
-aaaagaatttttggtaagaaagcttaaagaaaaataattttacatgagaaagaaccttgt
-atggtacatttttgtcctagaataaaatgactggttgtttaagaaagaggaatgttcata
-caaaccagaaagtccaagcatgtcgtgaatggtctgtttaagttataataagagcattta
-tggaaaaagacccacaaactttcatataatcaagttgtctataattaaagggaaattatt
-tataatgatcttttgagagattgggttttgatattaaaaaacatttatacactaaagaat
-tcattagaacaacattttcttaaggtattgatttacttttaataaattacaagactatat
-atataatatattttttcctgcaaagttcaacttttattgcatctcactgttttcagcttt
-ctctccccttttaaagtacctgaaataataactctatctttcaactcatttttagctcct
-gtaagtttttttattttctcctttgtgttctaactgttgtggcctgacgctaataaatgt
-tttatctttgtggtctaaaggaaacattccttccaacataatatttcctgtagggaacag
-cggttgaaatgcagaaggtgttttgttttccctttgggaaattggcctaataaacagagt
-ttatgctttattgaaataattcctatgtcattattactaagttttggtttgtttagaaaa
-aaacccgagattaaattttttttaattaagattattacatacatgtaaccctctgtatgt
-gcttttaaagtccttgtgccattaagttacagagctttgagtccttggtctaaaaagaac
-accaagtcctgctaaatattaaacactgacagcagttaaaacctcattttctgacctggt
-agaagatgccaatcaaaataaactgtgttcatgagacagaaggccggaaattaaaacgat
-tcaactcctcaaggtctggagactatcaaagaagaggtgggtgcatgagattgtaagggc
-cgattttgagagatcaaatgattataaggccaattttgagagataaaataattgagtttc
-tctataaattaaccattaatctcaaaggcacactgatgcaagactagcatatgggctgct
-gtgtcacgttaacaaggttttcttggagaattaacccactccttaataaaaggttataaa
-agaggttataaaggttataaaaaaggcttgtggaatttttatcttgtggtcaggatgatt
-aaaattttatagattgtttatacattttgaaaaacaaatttaattggcctcgtttttatt
-agggcttattgtttaggcaattaagtcttctctctcaaagaatcaaggtttttgcctttt
-ttttgaaatctttgagttatcaagttgagtaaatgaaagacttattttacaatgacttga
-tctgtgatcctattttgtgatatcaagcattttatttatttatttatttatttttgagat
-ggagtcttactctgttgcccaggctggagtgcagtgctatgatcttggctcactgcaacc
-tccacctcctgggttcaagcgattctcctgcctcagcctcccgagtagctgagattacag
-gtgcctgccaccacacccggctaatttttgtatttttcatagagacagcatttaccatgt
-tggccaggctggtctagaactcctgacctcaggcgatccacccaccttggcctcccaaag
-ttttgggattacaggtatgaaccactgtgcccagccaaatcaagcattttaaacttttta
-tttttatttttaaaattttaatattttgagatggagtctctctctgtcactcaggctgga
-gtgcagtggtgcaatcttggctcactgcaacctctgcctcccaggttcaagcaattctca
-tgcctcagcctcatgaatagctgggattacaggcacttgccaccacacccagctaatttt
-tctatttttagtagtgacagggtttcaccatgttggccaggctggtcttgaactcctaac
-ctcaggtgatccacttgccttggcctcccaaagtgctgagattacaggtgtgaaaggtgt
-ttaaaggccactgtgcctggcctttaaactttttatatttgacaaactttccaaagtcaa
-attctaacttggttcctcaatgattttttgatattagtcccctgaagtccaaaagagaca
-cagtcagcttatttggcataaaaatcatacaggaagcattgtcaaatatgtaatagtgtt
-tggctttctttgggctgtatttgtataaatatgttattggcatatgttccaaaattatgg
-gaaaatcctataattatgaatgacttagtatatgttattaatcattatcattattatgta
-aaattattgtatgctacagaagtaaccaagtttctttgtcaattgtgtctttaagtatga
-cttttctaaaacttttgtcatccacagttgttttacttttatccttttcaaaaggatgat
-tttacaatcagcataggactctgacagttgctgttgaatacaggttttggagatagtgac
-actaaaatagagaaaaaaaatccaacactcccatagagagctgaaatatacatgaatagc
-aagcagaagaggagttaactgcatggactgaactaatagaagactgaaataatccttcta
-tgactttttgcttaaaacattgctaatcctttctttgtttttcagagccaagaaaacatt
-tattttgagcttttaaaaaatttattattattattattattaacaaataaataatcttct
-ttctttttttcttttatctttctctgcagggcaagttctgtatttatagcttttaacaat
-tgaggaaattatactcctataaacaaaatttggagcatatttctctctatctggtttctc
-taaaatttggaaactagttgggagtattcttaacttatagcaatatagttatctgcacaa
-gtacaataagaatctgttttcttttgtaagaggacataattggggacagtggtgatttta
-ccaaggttttgactggaacaacatgctatcagatgcagactcctttaaggaatcaaagtt
-gacttacagagctaataaaagcatcttgggaaagctggcctcctatcttgtctacacagt
-ccctgtacaggttcctgacctgtggtaagtaaagagtgtcactttctaacaggcccagga
-gcccaaagtcttcctgaggtgaggaattcatccaattaatacaggtatttgcaggcacag
-gccgggcttaagacattaaagtcgaatgtgagattacttatggaataaagttccagcaaa
-gccaattaaaaaaaaaacaaggagcctatatggcaaataattattcttgatgattttatg
-caaatactccagccaaatataataagacagaaacttattttgcaaatgaattttgttcta
-taatttgtcctcagtgaaaggggactggagagagaaaaaattatgtttcaaaatcaccta
-tagtacacctgttgttagattttagtctcacttagtgtttttaaatttttattattttct
-atagtttggactaaactctaaaatttttcctggtcacaagtccccaaaataatttttttc
-attttttttcttttttcctttccttttccccccacattttttcctgattagaaatcacca
-aacattaaactgtgctttcctaaagccctgtgaactaaagctagacaatctatttacata
-cataagctactttcatacctgcctactggtgtatgaacttcagagtaatatggcctatat
-tgatttcccaggattattgttgttgttgttgtttttctcctttcctcccccattttctct
-taggacgtgagacttcacaacctgctaaagcgagctttcctaataatgtggaacctacct
-gtctatgaataaactgtcctagtcatgagagatcagacaaaacctgagaccagaggctaa
-ttttcttctaaaatgcttttaaaaagaaaaggggggaaAtgtgaaaggaaaataaacttg
-ggaccctcaaatcactaagccaaaacgaaaagtcaagctgggaacggcatcgggcaaacc
-tgcctcccattctaatgggatagctaaataagatagctacaaagattttaaaaagctaca
-tacctccctcacaattttcccacaaggaaattccttgtgtacctagaacagacagaactc
-aaagtcatccctctgctcatgggagacaaatgcacatctgatggcttcctttgccctatt
-gcttcgctaagccagactaaggcataagtgactattcctgcaagttgcatattcagtgga
-gggctaatcagaaactcaaaagaatgtaacaatttgtcctttatctacctatgacctgga
-aaacccctccccacttcaggttgtctcacctttctggatggaattgatgtacatcttacg
-tatttgctgactgatgtctcatgtctccctaaaatgtataaaacctagctgtgccccaac
-taccttgggcacatgttatcaggacctcctatggctgtgtcactggtgtgtccttgacct
-tggtagaataaattttctaaattgattgagacttgtctcagataactcttgatttgcagt
-aagtagcatttctaaacatctctggaatgcatgcatattgaaactcattatgcaaccctt
-gctgacatcaaggcaggaaaatgtctacaaatgtaatcatttagcgtgacctatgtggct
-aatgtggaccaaattatccttaagctcctgctttaaggtgcataaatgcccctgaggaaa
-aatccaccttggcactctccatcctatcttgctgagattcttgcctgcactcttctacag
-agttctttctttctaataaaactttccttttttcaaaccaatactattatccataaattc
-ttcttctttttttgtttttttgaaacggaatctcactttgttgcccaggctggagtgcag
-tagcatgatcttggctcactgcaacctccacctcctgggctcaagtgagtctcctgcctc
-agcctccagagtagctgggattacagacgtccaccaccacgtccagctaatttttgtatt
-tttagtagagatgaggtttcaccatgttggccaggctggttttgaactcctgacctcaaa
-tgatccacctgccttggcctcccaaagtgctgggattataggtatgagccaccatgccca
-gcagtaaattctccttactaatccacgagtggaccactttccaatgctgaggctctgaca
-cctcgctgggcaGCCACTTTTGATTATTTTGGGTTGTCAGGGCTCAGGGACACAAGAACT
-TGCTCCTTAGGGGAGCTGGAGGTCTAGTAGGGATTGCTTGTTCTCCATCAGGCCCCTAGT
-AGGGAGGCCTCTCCTGTCCCCAATCCCTGACTCCCAGGGATGCTCCCCTCCAAACCACAG
-caggaagttcctccttaggtcagacccacagccctgatgctgtggtctCACTGCAGGTCA
-TAGTCTCACAGGGGCCTCTTATAttattttaattttaattttaattaaattaaattaatt
-ttttttttttagatggagtctcgctcttatcgcccaggctggagtgcggtggtgtgatct
-tggctcactgcaacttctgcctcccaggttcaagtgattctcctgcctcagccacctgag
-tagctgggattacaggcatccgccaccatgcctggctaatttttgtatttttagtagaga
-cagggttttgccatgttgaccaggctggtctcgaaatcctggcctcaagtgttctgcctg
-cctcagcctcccaaagtgctgggattacaggtgtgagccaccgtgcctggtcttatatta
-ttttaattttaaatttaaGAATACATTCTTAATATCAACCTTCAAAGACTCCCTGTTGCT
-TACCAAGTTAAGAAAACTACTTAAACCTCACATATAATTCCTTTCTCAACTGGGACCAAT
-AAACCGTGACAGCTTTATtgaagggggccagccccttcacacctgtgggtatttctcgtc
-aggtgggatgagagactgagaaaagaaatagacacagggacaaagtacagagaaagaaca
-gtgggcccagggcactggcgctcagcatacgaaggacccgcaccggcgccagcctctgag
-ttccctcagtatttattgatcatgatctttactatcttagcaaggggagtgtagcagggc
-aacaggtggggagaaggtcagcagggaaacatgtgagcaaaggaatctgtatcatgagta
-agttcaaggaaagatactgtgcccggatgtgcacgaaggctagatttatgtttctcttta
-cccaagtatctcagtgtagcaaagagcaacagagcagtattgctgccagcatatctcgcc
-tccagccacagggcggttttctcctatctcagaatagaatgaatgggaatggtcggcttt
-acacagagacattccattcccagggatgagcagagaagccttcctcttatctcaactgca
-aagaggcctccctctttcactcctcctcctcagcacagaccctttatgggtgtcgggctg
-ggggatggtaaggtctttcctttcccatgaggccatatctcaggctgtctcagttggggg
-aaacgttggacaatacccaggctttcttgggcagaggtccctgtggctttccacagtgca
-ttgtgtccttggttaacagagaatggagaatggcgatgacttttaccaagcatactgcct
-gcaaacatattaacaaggcacatcctgcacagtcctaaatccattaaactttgatccaat
-acagcacatgtttctgtgagcacagggttggggataaagttacaagttaacagcatctca
-aagcagaaacaatttttcttaatacagatcaaaatggagtttcttatgtttccttttcta
-catagacacagtaacaatctgatttctctttcttttccccacaCTTTCTCACGTGttctt
-tctttctttctttcttttcttttttgagatggagtctcgctttgttgcccaggctggagt
-gcagtggcgtaatctcagctcactgcaaactctgcctcccaggttcaagtgattctcgtg
-cctcagcctcccgagcagctgggattacaggcatgcaccatgacgcccagctaatttttg
-tattttcagtagagacgggtttcaccatcttggccaggctggtctcgaactcctgacctc
-aagtgatccacctacctcagcctcccaaattactgggatcatatgaatgagccaccatgc
-ctggccCATGTTTTTCTTGTACTTTAGGCTTTGCTACTTACAACCAGAACTGCTTACCAT
-TCtgtcagaagccttccaaccagggcaactccatcttgaataggggctgggtaaaataag
-gctgagacccactgaactgctttcccagaaggtcagacattcttagtcacaggatgggat
-aggagtttggcaggactggtatcacaagtacaggtcacaaagaccctgctgataaaacag
-gatgcagtaaaagaagccggccaaaatccaccaaaactacgatggggatgaaagtgacct
-cgattcgtcctcactgctcattatataggaattataatgcattcgcatgctaaaagacac
-tcccaccagcaccatgagaatttaccaatgccatggcaacgtcaggaagttaccctacat
-ggtctaaaaaggggacgaaccctcagttctgggaattgcccatccctttcctggtaaaac
-aatgaataatccaccccttgtttagcatacgatcaaggagtaactataagtatgttcagc
-tgagcagcccatgccactgccctgcctatggagtagccattattttattcctttactttc
-ttaaataaacttgctttcactttactctatggattcaccccaaattccttcttgtgtgag
-gtccagaaaccctgtcttggggtctggtttggtacccctttctggtaataATTCTGTAAG
-TATTTGTAGTACGTCTGAGCCACCAAAATTTCcatactgatccttccattagaatatcct
-ttctgcctgtctctttctggcaggatctgatccatatttcaaagccagtctcaaatgcca
-ccttttccaaagaaacctatcctTATATCTTTATCTAATACAAACAGTATATATTGGGAG
-CCTAAGAAATGCTTGTTGCATACATCAATGAATGAACCCCAAACCAATGTATTTCTCCCT
-TCCTTGTAATCTCCAGAAATGTTTATAAACTTTGTTGTTGTTTAtttgtttgttttattt
-ttatttttattttgagatggagttttgttcttgtcacccaggcgggagtgtaatggcgcg
-atctcggctcaccacaacctctgcctcctgggttcaagtgattctcctgtctcagcctcc
-cgagtagctgggattacaggtgtgcactaccatgcccagctaatttttgtggttttagta
-gaaatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcaggtgatcca
-cccgccttggcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccTGTT
-GCTATTTATTTAATATACTTTATTTTTTTGAGCGATTATAAGTTTATTtttatttattta
-tttatttatttatttatttttgagacagggtctcattgtcacctcttgcccaggctggag
-tgcagtggcacgatgttagctcactgcaacctctgcctcccagagtcaagtgatcctgcc
-acctcagcctcctgagtagttgggaccacagatgtgcaccaccacgctgggctactattt
-ttatatttttagtgcagatggggttttgccatgttgctcaggctgatcctgaactcctga
-gctcaagcaatctgcctgccttggcctcccaaagttctggaattacatgcgtgagctact
-gagcccggccTTAGGTTTACAGAACAGCATTCCACCCATGTTATTTATGCAGGGGAGCAC
-ACCACACACATCACTTTGCAGCTTCCTTTCTCCTCTTATATGTCTTACAGATCTTTCTGT
-GTTCTGTACATTGAGACACTCATTCATTGGCTTCACTCATTCATTTGAATTCattccttt
-gttcaacagatatttatcgtcagctctatgtcaggcactatgagaagtgcttgggatata
-aaactgaacaaaataaacaaagtcctttccattggagagatgacattctagtgtaaggag
-atagacaatagataataaatacaacaaataaataaatacatggtttagtatgttataaga
-tgctttctgtaggaaaaaagtgagagggacctggagtggagggaggaccgagtggggaca
-ggtgcagggtgggggcagccagtagagcccctctgaggaggAGTGGATCACAGGAGGATG
-ACTGGCAAGACCTAAAGGTGGCAAGCTGTCTCTGGTGCTGGCTCTGAGAGCAGGATAGCT
-GGAGTAGAGTGAGGGAAAGGCGAGGTCAGAGGTGAACCTGCAGGGCAGGTGGGGCTCCTT
-CCGCTAGCgcatggtgttccattatccagatgcaccaggacaaatgtcgcccactgccat
-tactaggtgcttaccatgtgccatcaagaacaataccgcaggccgggtgcggtggctcac
-gcctgtaatcccagcattttgggaggccaagatgggtggatcacttgaggtcaggagttc
-gagaccagcctggctaacatggtgaaacctggtctcgactagaaatctaaaattagccta
-gcgtggaggcgcactcctgtaaacccagctacttgggaggctgaggcaggagaatctatt
-gaacccaggaggcagaggttgcagtgagcctagatttcgccattgcactccaactgggca
-agagcaaaaatctgtctcaaaaaacaaacaaaaacaatactgcaataaacattctgtcag
-tctgtcattttgcccatggacagaatatctgcagaattaattcccggcagtgaacttgAG
-AGAGATCACCCAATTGCCTTCCAAAGGAGCTGTGCCTGGACCATGGGTTTCAGCACAAAG
-TGCTGCTCCCTCCAACTTGTAGACTCTTCTGGCAGGTCACGGTGGAGCTCACATTCTAGC
-GGGAGAGTGTCCAGGGCAGAGATATTCCATTCCGTGTCTTTTCTCCCAGGGCTCGCACAG
-AGAGGGTTCACGCGGTAGTCAGTAGGTGGGCAGTGCTTGGTGAAGGCATTGATGGGTGGA
-GGGATTGAAGGATGAATGAATGGATTAGGGGCTGACAGTGCCGCTGCAGTTACTCAAAGG
-AGCCACCAGGAGGCGCAGGGAGCCCACATTCTGGAGACAAACCTTTTAAAAAAAGCATCT
-GGTGACTTAACGACCTTTTCACCAATGGCTTGTGTGGGGCCTTAATGCTAGGGTGAGAAA
-AAGGTGGGAGATGGAAGAAAGGGGAGTGGGTAAAAGGACATGTGGGAGAAGAAGGCAGAG
-AGAGGGCCTTCTGAGGGGGCCTCCACGCCAGGTAAGGACCGTTTAGCTCCCCTAAGAGCC
-TGCAGCATTGATGCAGATCCCAGCAAAGCCAAAACCCCCTTATGCCCACAGTTGAGCCCA
-AAAGCCCAGAACAGAGGGGAAAAATAAATTTCAGGATAggccaggtgaagtggcttacgc
-ctgtaatcccaaaacttggcgaggtcaagtaatcccaagtactttgggaggctgacaggg
-gaaactctatctaaaaaaaaaaaataaGAAAAGGAATTTCCAGGATAAATATGTACAGTA
-TAATCCCATTTATGTGAAAAAAAAAATCTCCACAAATAAATTCCTTtgtgcgtgtgtgtg
-tgtgtgtgtgtgtgtgtgtttgtgtgtgacggagtctcagtctgtcgcccaggctgaagt
-gcagtggcacgttctcggctcactgcaacctccggctcccaggttcaagcaattctcctg
-cctcagcctcctgagtatctgggattacaggcgtgtgacaccacacccagctaatttttg
-tatttgtggtagagacggggtttcaccatgttggtcaggctggtctcgaactcctgacct
-cgtgatctgcccgcctcagcctcccaTAAATTCTACATATTAGTTTGGGGAGTGTGTATT
-TACCACATACACATCTACAGGGAAAATCTGGAAAGGTAAATGTCGAATTGACAACAGTGG
-TTACTTTTGTTATTGTGTGTGTAGAGAGGGGCAGGGGACAAAAAGGAAAATGAGGAGTGA
-TCAAAGGGGACTTTAATTTTCTTTTTTTTTTTTGAGACAGAGtctcagctcactgcaacc
-tctgtctcccaggttcaagtgattctcctgcctcagcctcccaggtagctgggattacag
-gcacccgccaccacgcctagctaatttttgtattttattttagtagagacagggtttcgg
-tttcaccatgttggccaggctggtctcaaactcctgacctcaggtgatctgcctgctgcg
-gcctcccaaagtgctgggattacaggcgtgagtcactgcaccgggccCCCAAAGGGGACT
-TTAGACTAAACTGAAACATTTTAACTTTCCAGGAATCTGTAACCCTGCTATTATATAACC
-ACAAATTAAAAATTACTTTaaaaaatgaaaaaaaaaaaaaaaaaaaaaaggctgggagcg
-gtggctcacacctgtaatcccagcactttgggaggctgaggcaggaggatcacgaggtca
-ggggtttgagaccagcctggccaaaacggtgaaaccctgcctctactaaaaagacaaaaa
-ttagcagagtgtggtggcacgtgcctgcagttccaactactcaggaggctgaggcaggag
-aatcgcttgaacttgggaggcagaggttgcagtgagcctagactgcgccattgcactcca
-gcctgggcaacagagcaagactccggctcaaagaaaaaaaaaaaaggaaaagagaaaaaA
-AAAGGAACAATAACAACAACaaaaattaaatgctatcttgtgttgcatcaatagaagtct
-tacgtgcagctcaagggaggtgacagccccctctgctctgctcagaccacacctgggacc
-tcctttcctcttcttggccctgtcccgtgagaagaataatgacagcctaaggcatgCTGG
-GGGTTGGAGATGGGGGGAGGCTGGGGCCATCTGCACATGATACAGATCCAGGAATAGTCC
-CTTTACCCAAGCGGGAGAAACTGGGCAGGTGAGCAGCTTCCAGGTGTGTGGATGGCAAAT
-GGATGCCAGACTTTAGGATAGGAATCCAGGGGTGCAGCGGATGGAAAGTCCAGCCCAGGA
-TGGGGCATAGTTTTCCCACCCAGCTAGGGAGGGAGGGTAGGGGCTACTCTGGGGTGTCAG
-GAGTGCCGAAGCCTGAGGTAGGCGCAAGCCAGGCAGCATGGCAGCATCCTTCCAGAGGGT
-GTTGTGCAGCTGTGGAAAACAATTGCTGGGAGGCCGGCAGGGGCAGTGGTGGAGGAGACC
-AGAGCTTAATTCTAGGTGAGTCACAATAGCCTCATCTGTAGAATGAGTGAGGGGTGGGGC
-GTAGTTTCAGAttttttttttttttttgacacgtagtttcgctcctgttgcccaggctgg
-agcgcaatggcgcaatctcggctcaccgcaacctccgcctcccgggttcaagcgactctc
-ctgcctcagcctcctgagtagctgggattacagccatgtgccaccatgcccggctaattt
-tgtatttttagtagagacggggtttctccatgttggtcaggctggtcttgaactcttgat
-ccgcccgccttggcctcccaaagtgctgggattacaggcgtcagccaccgtgcccCACCA
-GTTTCTGACTGAttttcttttttttttttttttgagacggagtcccgctctgtcgcccgg
-gcgaagtgcagtggcgcgatctcggctccctgcaagctccgcctcccgggttcacgccat
-tcccgggcctgggaccacaggcgccgccaccacgcccggctagtatctttttttattttt
-attttcaatagagacggggtttcaccgtgttagccaggacggtctcgatctcccgacctc
-gtgatccgcccgcctcggcctcccaaagtgccgggatcacaggcgtgagccaccgcgccg
-ggccCAGCTTCTGATTTTATGCAGCTGGCGGGATCTTGTTCTTGGTCCTTTAAGGCGACC
-GGAGGGATTGCAGTTTTAAAAACTCGCCAGCAGAGGTCGCCTTCTGACGGATTTGACCAA
-AAAATCCATTCCGGTGGGAAAGGGGAACCTGCGCCTGCGATtctctctctctccccctct
-ctccctctctctttctctccccccctctctctctctccctccctccctctctcctcctac
-tcctccctccctccctctctctgtctctccctccctccctcccgctctctcccccctccc
-cctctccccctccctccctcccttcctccctctctGtctctttctttgagacaaagtttc
-actctgtcacccaggctggagtgcagtggcacgatctccactcactgcaacctctgcctc
-ccggggttcgtgattctcatgcctcagcctcccgagtagctgggattacaggcgcccgcc
-accacgcccggctaatttttgtatttttagtagagacggggttttgccatgttggccagg
-ctggtctcaaactcctgacctcaagtgatctgcctgcctcggcctcccaaaCTAAGATTC
-ATTTGTTGACTAAGTGAATAAAAGGGGAGACATTGAAGAGGGGGACCCgactggatttgg
-gggtgaaggtggagttgagagtgactttgaggcttctgcttgagcaatgagtggagggtg
-cctctcctgagctggggaaactggggcagCACTGACGGAGGGGACACAGCTACAGAGGGG
-AGAACCCTCTCCTGCCGGGGCTGCGGGTTACAGCCTGCACTGCGATTCTCTGATCTCAGG
-GACCTCAGACTTCTGGGGCCCTGTCCCCTACCTCTGTGTATGACCCTAGCTGGCTGAGGG
-CTGAAGGCTTGCTGTTGGCTCTTTCTGCACCCTCAGCCTTCTCCTTCCTCTTCCCTCTGC
-AGGACTCTGTCCTGGGTCCTTAGGAAGAGTCCAGGCCCCAGGACAGGGAAGTTGGGTCAG
-GCCTGGACCTCACATTCCCTGCCTGTCCCATGAGGTGGACAGTGAGAGGACAAATGCCTG
-GACCCCTGGCCCCAAACCCAAGAGCAGATGTACCGGAGAAGAGCTTCTTAGAGCACCAGG
-TGCCAGGGCTGCGGTGGAGAATCAGGGGGGCCCAGGGGAAGGGGCTGCAGATGAGGGAGG
-AGATAGATACGGAGGGCCTGTGTGCCTCCCAGATACAGGGCTGGCTTTCCCAGCCCAGAA
-GGTTCTTTCTGCCTTTCCCAGTCTTCTTCCATTCTCATTTCATGTTCACACTTTTGGCCA
-TACCCAGGGTCAGCCATGAAGATTGTTCTCAGAATGTtttctttcttccttcctttctct
-ttcttttctttctttcttcctttctttctttcctttctttttctttcttctctttctttt
-tttcttttcttctttctctctctttctttctctctctctctctccttccttccttccttc
-ttttctttctttcttctttctttttttgaaacagagtctcactatgtcacccaggctgta
-gtgcattggcacgatcactgctcactgcagccttgacctcctgggctcaagtgatcctcc
-cgcctcagcctcctgagtagctgggaccacaggtatgcaccaccatgcccagctgatttt
-ttaattttttgtagagatgggggtctcactgtgttgctctggttggtcttaaactgctgg
-gctcaagtgatcctcccgccttggccttccagagtgttgggattacaagcaggagcagca
-cacctggccAATGTTTTATTTAAATCAACTCACTTAGGTTGAAttagaataattttagac
-acacagaagagtgtgtctatataattttgaattatatacccaacactcagatataacatt
-agcattttgccatatttgcttcatctatttctttctgaaatattttaatgtaaattacag
-atatcatgaattttcatccccaaatactttagtctgcatCAGTCAAAGATATCTAATATT
-TAATCCACAATGGATTTCCCCAGTGGCAATTCCCCTAAATTGTGTTTTACAGTTGACAGT
-GGatttattgtaaaaggaaactcgatataccaagtgacaagcaagttatcttctgttata
-aatagaaaggatccctggaaatggacacagtgtcaggcccagagctgtgggtggagacct
-gctctctgtttgacataaataggagatcagtggctactaaatctgaagacagggcagcag
-caaagaacattttctcacggatgtgatgagacttgaaagggactcagaaagggggtcact
-ttctccaggttggggtaactgttatttaagccagggttcatCTGCAGCGTGGGGAGCCAG
-AGGGTGACCCCTTCCCTAGGTGATGGAGGTGGCTGAGGCTCCAGAAGTTTCCAGAGAAAG
-ATCTGGTGTTCCTACAAGGCCAGTGGCAGGGGGAAGGGCACTAGACAGTGGGGCTGGAGG
-GTGTGGGCCTGTCCCTGCTCTGATTTTGGGCACTGCACTTTTGCCTGTAAGAAGGGGATA
-TGTGAGGCCAGGACAGGGTCTCCTACTCTGTCCCCACTCCCACGCCAAACAGGGCCTTGA
-GGACTCTCGCGACCTCCATGACCCAGCTTCCCTCCTACCCCAGCCCCAAGCCTGTTTTTG
-TTCCCCTCCCTCCctcctgcttgatctttgagcctcagccaggatgttacctcctcctag
-aagcctgccttggtccctggaatggattaagggactctctcctgggccccacagctgccc
-aggatcactcagcactgtagtgccctgttggcctttgcctccctccagctgtggacgtac
-aaagcagacagcgaatctgtcttgctcaccactgtacccccatcccctactgcagcacct
-ggcacatagcagtagtgcggcacacttgttgaatgaataaGGGATCATTACTACTACGCT
-TCCCACTCATAAATGTCTGCCTCTTCGGGGGGCTCAGAATGCACATTTGGTCCTTCATTA
-ACTCATTTACTCACAAttttttttttttttttttttttgagacggagtttcactcttgtc
-gcccaggctggagtgcaatggtgtgatctcggctcactgcaacctctgcctctcaggttc
-aagcgattctcctgcctcagcctcccgagtagctgggattacaggcgctagccaccatgc
-ctggctaatttttgtatttttagtagagatggggtttcaccatgttggccaggctggtct
-cgaactcctgacctctcaggtgattcacccacctcagcctcccaaagtgctgggattaca
-ggcatgagccaccgtgcctggctcatttactcacaaatatttactgagcacctactatgt
-cccaagcagtattctaggcactggaaatggggcaaggctgctgcctctgtggaacttata
-ctggggtgtgggaggcaaagaaaaacaagcaaacatacatatgaaataatttaagatgcc
-actcgtggtgggagggactgacaggagctgctgtggaagagagcattaggagggccttgc
-tgaggggtgactttatttcagctgagaggtggatgagaaggcacctgcaggggaagaaga
-accaggggaagggtgttcctgatggagcaacagcctgtgctaaggccccaaagtgagcac
-cagctgggcgctgagggacagaaccaggcacaggctcggttagaggaggtctgaggtccc
-agaggagacaagagaggggaaggatgggagggcaggcctgagccgcagaaggccagtgga
-aggttctgagtgggaagaggatgggataggagttatattctgaaaggtccgcctgtgctg
-ggtggaggatgggtggggacaggcaggagcagcccaggctctgatgcagcctccaggcag
-agatgGACCAGGGGAGCCCATTTCATATCCGGCCCCTGTGGAGGGTCTGAGGGTGTTGAG
-CAGACAGGCCCTGGCTTTGGAAGTCCTGGGTGTCTGGACCCGCCTGCCTGTGGGGCCCCA
-GCAGAGAGGAAGGGAGGCGGGGCTCCCAGTGCCTGTTGACTCATTTGCATCTGATTTGCA
-TGTGAAGCAGAGAGTCAGGTTGAAAGCTGGGAAGGCCTGTGCCAGCCCTGGGTAGAGGGT
-CTTGGGTGTTAGTTCCCACAAAGACTCTGTCCCAGGCCATGACCTTCCTGTTCAGGAGGG
-GCTCTGCCTTCCCTTGCCTCCAACGCCCCTCTGGCCTGGCCCTGCCATCTGGGGCTGGGC
-AGTGCCCACGGGGACAAGGTCGTTTCCTTTTAGGAGAGGTCTGCATGCTATGAGGACAAA
-GGCCAAATCCCCACCCTCGGGAACCTCCTTCCCCAGCAAAATCCCATCTGTCAGGCTCAG
-CCTCTGACCTTCGACCTCTCTGTCAGCACAGGCTGCAGTGTTGGGGAGGGGAGGGTCCCC
-ACCCCCAACCCTAGGGGAGACCCAAACCTCTCCCCCCAGCCTTCTCCATCTGTCCCCTTC
-GGCTtctgccacctgctccgtgtgatccaggccaggtcacctccgctttctgggccttgg
-ttcccccacgtgtccaatgtgggTTTCCCAAATACCAGTGACTTGTGTCAGTCCACTTTT
-GTAATTGTAGCCAACTCCacttactatttcttaagtgaacttactctccttcacttaaat
-agatttaatttaaaaagaaatgttataccagctctgtaaatggaaaaccagtttcatctg
-ccacaagtagaaacataataggaaaaaataatgaaatggaaataaaacaatgttactcta
-gtctagcCTCaagtgaaaaaagtcagacacaaaaggttacatttatatgattgtctagaa
-aatgcaaaactagagagaaagaaaacagaccactggttgccagggttggggagagggagc
-tgacaatatcaaggggtgcagaaactttttagggtgatccaaactgttttttgatgatga
-tggtggttacagattgtatacatttgccaaaaatcaccaaagtgtacattcaaagttggt
-gagttttattttatgtataaaccacctcaaaaagacaaaTTTTAGAGAAGAAAACAAAGA
-AAAATGCCGGTTTAGCCCCAAGTCTGAGGCTTCCTCTCTGTTAAACAAATTAGCAAATAG
-AAggccaggcatggtggctcatgcctgtaatcccagcactttgggaggctgaggcaggag
-gatcacttgaggtcaggagttcaagaccagccatggccaacatggtgaaatcctgtctct
-acaaaaaatacaaaaattagctgggcgtggtggcgcatgcttgtaattccagctactcag
-gaggctgaggcaggagaattgcttgaacctgggaggcggttgcagtgagccgagattgca
-ccaccgcactccaccctgagtaacagagcaagagactccatctcaaaaaacaaacaaaca
-aacaaggaagagaaAGAGGGATTTCTCTCTCTGTCTCTCACCAACTCTCTAACCCTCCCT
-AGTTCcatgcaccaaggaaaagctatgtgaggacataggagaaggtggccagccacaggc
-caagaagagagccttcaccagggactgaatcagctggcacctccatctggtacctctagg
-ctccagagctgtgagaaatagatgtgtgctgtttgagccacatagtctctgatattttgt
-tttggcagccggagcagactcatgcCCTCTGATCTCATCATTAGCATAATGCctgtttat
-agaaccatgctgtgggcaggctctgtgctaaaagctttgccagcatcatttcagagactt
-gatgtgacatcttacatcgtaggggaaattattgttcccattaaagatgggCCCACAGTG
-TGGCTAAGCCAGTGGGGCATGTCCTCAGACCTGGAGTGCTCCCATAGGAAGCTGGGCCCG
-ATTCTTTCTGAAGGTGTGAGCTGGAGGCAGTGATGGTGGTTTGAGAGGCACGGGCTGTGG
-GGAACTGGATACTGAGGGCAGTCCCTGTGTCCCAGGGGAAGCACTCTGTGCTTTCAAGGG
-GGGCACTGGCAGAGAAGGAAGTGTCCCTCATCACATCCTGGAGACCCACCCTCTGGAGAC
-AGTGTTTTCACGAtttcttttctttcttttttttttcagacagggtctcactctgtcacc
-caggctagagtgcagtggcacgatctcagctcactgcaacctctgccttctaggttcaag
-taattctcctacctcagcctcctgagtagctgggattacaggcacccgccaccacgccca
-gctcatttttatttttttatttttcgtagagacagggtttcaccacgttggccaggctgg
-tgtcaaactcctgacctcaaatgatctgcttgctttggcctcccaaagtgctgggattac
-aggcatgagccatcatgcctggccATGTTTTCACTATTTCTATGGACCGTTTCATAAGTG
-TTGTGTGGACATAGGgctccagggttaaatgtgtttgggaaatgtggtgtaagcaaagag
-aaagaagtttccactctaatacttctcagagactttaatgtggagataggcatggcgaat
-ctcTCACTGCGGGACAAgtgggcaagagaagtgtggatgctgccttctgggcactcacag
-ttggtggaggagacagccaacatgcaagcaggggccacaccacatgtctggaggttggaa
-cgctatgcagagagaccacaggaaccatgggggaagtggggagggatttcccagaggaga
-tgacatttgaacaaagatgcaaaggaagtgtggaaggaggtaagggagagctgtatgact
-gtctgggggaagagaaacccaagcagagggaacagcaagcacaaaggttctgaggctcaa
-ggttgcttggtgcatttgacaagcagaccagcgccattggctggagctagctgggccgag
-tgggagggtgataatggatgaggtTGACCACGGTCCGCTCCCAAAGGCCATGGAATTCAG
-AGCATACTGGAGAGCCCTTAGTGGGTTTGGACAGACAGTGATACCTTGGGACACACAGCC
-TCATGAGCTCATACTGACCAAACAAACCACCCAAAATAGCAGCAGAAACAACAGCCACAG
-GGTGCAGAGGGTCATTCAGGGTGcctctcacaagcctgggaagtaggcatgtgatatggt
-ttggctgtgtccccacccaaatctcatcttgttttgtaactgcttcaattcccatgtgtc
-gtgggaggaacccggtagggggtgattgaactgtgggggcaggtctttcctgcgctgttc
-ttgtgatagtgaaaatgggtctcacgagatctgatggttataaaaatcggagtttccctg
-cacaggctctcttttttgcctgccgccatccacgtaagatgtgacttactcctccttgcc
-ttcggtcatgattgtgaggcctccacagccttgtggaagtccattaaacttctttcattt
-gtaaattgcccagtctcgggtatgtttttatcaacagcgtgaaaacgaactaatacagca
-cggttaactcccattttacaggcgaggaagctgaagcttagaaagatgaaagaatttgcT
-TGTGACCCCGAACGTTCCCTCTGGCTGATGCATTGTTCCTACCTGCTCTGTTTCCTTGTT
-TATGAAGCTTGCAGGCTCCAtggtcctcaaccctggctgctacacactggaataacctgg
-ggtggcagactgtgtctccccaggatggccacaccaatacatctcacatcccacatgctt
-ggccaatagcatatgacagatgtgactgtgggttacttctaaagctaggccataatagcc
-atcgcaaccccaccgtgatctctgggattgctagttctgagggaagccagctgccatgtc
-ctgaggttactcaagaagccctgtggagtaggccatttggggagggactgaggcccccag
-gcaacatctgtcccaacttgccagtcatgttagtgaactacccttgtccagccttcagat
-gacACCTCATGAGAGGCCCTGAGAGAGTCTTATTGTCCCGTTCACCATTCCTGTTGCCCT
-GTGGCCAGCTAATCAGCTTGTGGTGGTTTTCATTTCTTTTTTCTTTTTGCCATTAATAGC
-AATGCCAggctgggctcagtggctcatgcctgtaatcccagcactttgggaggccgaggt
-gggtggatcacctgaggtcagaagtttgagacaagcctggctaacatggtgaaaccctgt
-ctctattaaaaatacaaaaattagccaggtgtgatggtgtgcgcctgtaatcctagctac
-ttctcccaagtagaagggcgtgattcttctcatgcctcatgctgaggcatgagaatcact
-tgaacccgggaggctgaggctgcagtgagcggtgtttgtgccactgcacttcagcctggg
-cgacagagtgagactatctcaaaaaaaaaaaaaaaaGTAGCAATGCCATAGTAAGTATTC
-TTCTAATTAAGCCCTTCTGAATCAGCTTAATTATTTGCTTAGGGTCAATTTCTAAATGCA
-CAGTTGCTGGATCAGAGTACAAGTCCACTGATACAGCATTTAATTTTTTCAAAGAATTGT
-GACTGggccgggcacggtggctcatgcctataatcccagcactttgggaggccaaggcgg
-gcggatcacctgaggttgggagttggagaccagtctgaccaacatggagaaaccccgtct
-ctactaaaaatacaaaattagctgggcatggtggtgcatgcgtgtaatcccagctacacg
-ggaggctgaggcaggagaattgcttgaacccgggaggcagaggttgcggtgagctgagag
-ggtgccagcttgggcaacaagagtgaaactccgtctcaaaaagaaaaaaaaaaaaaaaag
-aaTGTGACTATagctggccgtggtggctcatgcctgtaatcccagcactgtgggaggcaa
-gatggtcagattgcttgagtcaaggagtttcagaccagcctgggaaacatggcaaaaccc
-tgtctctacagaaaaattagctgcgcatgggggcagacacctgtagtcccagctacgtgg
-gaggctgaggtgggagcatcacctgagcctgggaagtcgaggctgtagtgagctgtgttt
-gcaccaccgcactccagcctgggcaacagagtgaggccttgtctcaaaaaaatttaaaaa
-ataaataaaTGTAACTATATTCTCCTTCAGTAGCAACATCTCAATTTACCTTCTCATGCA
-CAGTGTTTGGAAGGACATATTTTGGGATGAGTTTTCTTTTACTTCACTACCTTATTTTGT
-TCTTTCATAGAATGCCTTTAAAATGTTACTTTAAAAAAATAGATAATACCTTTACAAGGT
-ACAAAATCCAAAAGGTATAAAAATGttttctttttttttttggagacagagtttcgctct
-tgtcgcccaggctggagtgcaatggtgcgatcttggctcgctgaaacctccgcctcccgg
-gtttaggtgattctcctgcctcagcctcctgagtagctggaattacaggtgcccaccacc
-atgccctgctaatttttgtattattagtagagatggggtttcaccatgttggccaggctg
-gttttgacctcctgacttcaggtgatccacccaccttggcctcccaaagtactgggatca
-caggcataagccaccacgcccggccAAAAATATTTTATAAAAGTCTTTCCCCCACCCCTT
-TCCCCTCAGTCAGCACAAGTAGCCACCACTGGGACCAGTTTCTGGTGGATAAATCCAGAA
-AAGTTCAGGTGCAAGTAAACACACATAGAGAGAACACCCTTTAAATTAAATGAAACTAAA
-GAAAACAGAGCCATAGGTGCACAGGAGACAGAGAGCTGACATCTGGGGCTGATTGCATCT
-TGGTTTCGAGCTGAGTGGCAAAAATACTGCTAAGGTCAACGTTCTGAAGGAGGCAAAACC
-CACACGCAGAACCAGCCATAGGCCTGTCAACAAGGCGAGATGTTATCATTGCTCATGTGC
-TGGGTCAGGATAAGGCCATACAGACCGCCCAGTTCTCTCTGATCTGGGTGTAGTTAATGA
-CAGTTTATCCGCCTTTTTCTTCTCTCTCACCACTCCCCATGGTGGGGGAGGAGAAGGACT
-GGGAGGACTTGAATACTCTGAATTGGCACCAGGTGCTTAATATAGTCCTGAAAATAGAAG
-ACCAATATGCTGTTGGCACATAAAGATGCCCACAATTCTAGAATCTGAGTGCGCCCAGAT
-GATCTCTCTTTACATGGCCTAATTTGGGATCCTGACAAGTTCCTTCTGCCCTCTGCCTCA
-CTTTCTCAATCTAGGAATGGGCCTCTCGGTTTTTGTTTTGTCTAATTTTAAGCTCTCGGC
-TGTGCATGGCAGAGGCAAACTTGAAGACGCAAGGGTCAGTGAGCAGGGCCTTTATCCAGG
-TATCTCAAATATCTCCCAACCCTGATTAAAGTTACATATCTCAGAGAAGAATTTGGTCAA
-CACCATTGTTGTCATTCCTGGTTAATAACAGGGAAGTTGAGGTctgggaagcaccctagt
-gatgtgttcacatggccatgtgcttctgtaaaatttaccaatgtaaggcatcttaacctc
-attctgttaaaaccactatctcctttcattccaacttccctttgcatcagatgatgttgg
-ggttggtgtgagcagtttgggcatcttgctaaaaggaccttaacatttactttgggttta
-gtgggatatatttatattgtttccagtcacttttgtgaaaaattattactaactgacctg
-gtattgaaatggcttccaggaatatatccataccgagcatactgagctgactcaacttgt
-cgtggcatcaagattcaggatcagaggttatatctcaagatatatgaatggtcctacagc
-actcagttccacaagactgtgaaggagaggtttgaatgtatacacggagccagcagctag
-tttatggaaagtattacagatgtgtttgagacaggcagctaataaaaagaatgttatttt
-tctgcgttttgtaacgtttgtgcaatttctcttttttttttttttttttttggagacaag
-gtcttgctctgtcatctaggctggaatgcagtggtgaaatcatggcttactgcagcctca
-acctcctggtctcaagcaatcctccctctcagcctcctgagtagctgggactataggcac
-gtgccaccatgcctgactaatttcttttttccttttttttttttttttttgagacggagt
-ctcactgtcgtccagcttggagtgcagtggcacaatcttgactcactgcaacctctgcct
-cccagattcaagtgattctcctggctgagcctcccaagtagctgggattacaggtgccca
-ctaccacgtccagctaattttttgtatttttagtagagatgaggttctgccatgttgtct
-agattggtctcaaactcctgagctcaggtgatccaccagcctcggcctcccaaagtgcta
-ggattacaggtatgagccaccatgcctggccagctaatttctttttaaaatttttttgta
-gagctggggatctcgctttgttgcccaggctggtctgaagcccctgggctcaggcactcc
-ttccacctcgacctcccaaagtggtgggattacaggcatgagccaccttattgtggtttc
-ttgtctctttctaaccaaatcttcactttattacttaatttcatatctgtaattttttct
-taaagaggtctccctaGggctggacgtggtggctcacgcctgtaatcccagcactttggg
-aggccgaggtgggtggatcgcctgaggtcaggagttcaagaccagcctgaccaacatact
-gaaaccctgtctctactaaaaatacaaaaaattagcgggtatggtggcgggcacctgtaa
-tcccagctactcaggaggctaagacaggaaaatcacttgaacttgggaggcagaggttgc
-agggagctgagatcgtgccattgcattccagcctgggcgataagagtgaaactctgtctc
-aaaaaaaaaaaaaaaaaaaaaaaaagaaGTCTCCCTAGGCTGAAGCTACCTGCTCAATCT
-TCTCTTGTGTCTTATAGGATCACAGGATCCCCCTTGCCTTACCTCACTGTTACTCCCAAA
-CAGTTCTCACATGTTTACAAGGGAATGTAACAGAGTGGATCAGAGAATTCATTCTGGATC
-CAGACCGAccttagttttctcatctatataatgggaataatagcaggatctctcgcctta
-gatagtcatgaagtccaatgagatgatgtgtataaagccctaacacaatgTAGCAGAGGG
-CACAGGGCCAGGATTGATATTTAGCTGGTCCTCACGGATACAGCAGACTCCCTGTTTATG
-ACAGTGGTTGGCTCTGATTTGGTTGGTGTCCATGCCAGAGTGTACAATCATTATTAGCTA
-TTGATATATTATTAGCTCCCTCCCCTGCCCACCCAGGGGTTTACGCAGTAAGTTCTCAAT
-TATTGGCAATCCAAACAAAGAATAAAAGACACCAGCTGGAATGAAACAGAGAAGCTGGTT
-CCAAATTGAGCAATTCAGACTGACTGCTATAAAATTTCCTCACCTTAAAGGCCCTTAGAG
-TTAATTCATTCTAATCCCCCTAAAAATATACTTTTTTGACATGTTCAAGTATTGGAAATT
-TGGAAAATTCACAAAAACACAAAGAAGAAATTAACTGCTGTGATTATAGATGATTATACA
-CATATACATATGTATTTAATACATATTTATGCTGTACATAGTGTTTTGAAGCATACTGTA
-CTTCAAAAAAATTTGGGAGgggtgcattggcttatgcctgtaatcctagaaattcaggag
-gccaaagcaggaggatcacttgaggccaggagttctagactggcctggggcaacatagcg
-agacccgtagcttgacatggtgatgcgggcctgtagtcttagttactctggaggctgagg
-tgtgaggattgcttcaacctaggttacagtgagctatgattgcaccactgcactccaccc
-tgggcaacagagctagaccctgtctctaaaaaacataaataaaCCAATGTTTAATACTTA
-GCATTTCCCCCTATCTTTAAATATCTTCTAGCTACTTCACttttatttttatctttttga
-gatgatctcttgcccaggttggggtgcagtggcatgatctcagcttactgcatcccccac
-atcccaggttcaatctattctcctgcctcagcctcctgagtagctgggattacaggcatg
-tggcaccacgcctggctaatttttgtatttttagtagagacgaggtttcaccacgttggc
-caggctggtcttgaactcctgacttcaggtgatctggtcgcctcagcctcccaaagtgct
-gggattacaggtgtgagccactgctcctggTAGCTACTTCACTTTTAATGGCTGCATAAT
-ATTCCTCATCAGAAAGTGGGAAAAATTAggctaggtggcgtggctcatgcctgtaatcct
-agtactttgggaggctgagttggtagaattgctagagctcaggagtttaagatcagtctg
-ggcaacatggcaaaaccccatccctacaaaaaatacagaaaataccgggtgtggtggtgc
-acacctgtagtcccagctacttgggaggctgaggtgggaagattgcttgaccccaggaga
-ttgaggctgctgtgagctgagatcctgccactgcactccagcctgggcgacagagtgaga
-ctccatctcaaaaaaaaaaaaaaaaaaagaaaagaaaaaGATAAAGAAATAAATAAAGTG
-TTAATAATTAAAAGTACTTTTAGAGGGTTATGTCATAAGCCTTGACAAGACTTGTTCTGT
-AAAGCTACCCGGCATGCAAAAAGCTCAATTAAGTTAGCTCCTCCACAGGATGGAAttata
-taaccaatccctttcaagaggcattgaagttgtttccattattttgctatgatgaataag
-gctgagcaatattaatctttgctcatatctttggtcatttcctttgtaaatttcgggact
-gctgggtATGCACATTTTAAAATTAActcactcatcatcatgcagttaggagaacagaga
-aaggaaggggcttgcaccgggtcacatagggagttagcgtcaaagtcaggactaggaacc
-agccagggccctctaactGGAGCTCTTCCAGCTGGGGTCCTAGAGGAAGTCCCAGCTGGC
-CGCGGGAGGGAGGAGGAGGAAGGGAAAGAACCAGGCGCCGGGGCTGAAGCGGCGGCAGGA
-AGAAGGTGGGGCCGGCTGGGAGGAGCGGGCGGAGCTGCTGAGCAGCGCCTCTCCTTCGGG
-CGGGGGAAGCTAAGCGGTCGCCTGGCAACCCTGGCGGCGCGCCGTTCGAACGGAAGCGAG
-GAACCAATCAGGAAGTCCGGGGCGAACCATTCTGGTGTGAAGGGGGGCGGCGTGCTCACT
-TCCCCTTCCACGGCGCCCCAGGGACTTTCCCTGCGGTGGGGGCCTTCGACAGTGAGGGCC
-ACCCGCTCAGCTCGACCGCGGAGGGCAGCTCCAAAGGGGACCCCAAAGGTGCCCACGCGG
-GGCTGGGGCCTCCTGGGCGTCGTTGGGAGCGGCCACTACCGGCCCGGGTCCGAGCTGTCA
-GCCTCTCCAAAGCCTGCGCGAGAGGAGCCGGGACACGCCTAGCGCGGGCTCCAGGTGAGG
-GCGCGGGTGGGTCCGGGTGCGACCCCGGGTCTGGGGGCCCCGTTCCCCGAGCGTCTGCTG
-TCTGCTTTCTCCCCGCGTCGTACCTGCGTGTcatttcacagatgaggactctgaggctca
-gagaggcaagtgTCCCGGCCCGGCGAGCTCTGGCGGAGAATCCAGTTCAAGTCTTTCTGC
-CCCACCTCGCAGCCCCCTAGTCTAGTCACATCTGGACTTGCCTTGAGAGGCCCAGACGGG
-CAACTGGTAGTCATTTTCCCAGCGTTTTATCGGCAGGGACCTGTAGACCCCTGGCTGGAT
-CACATATCCCCGCGCCCCACACTGTCCTCGGGATACCCCCTTTGGGCGTCTGTCTTTCCT
-TCTCCGCAGTCCGGGGTTGGACTCGGCTCATTTGGCGCCTTTCTGTCTACGGGGACAGAG
-GACCACTCTTTGGGGATCGGACGGGACTGACATTTCTGGGCTGGATGCAGGGGCAGCAGA
-TTCTCCAGCCCCCAGAGCCGCTGCTGGCCTCTTGGGAATCATCCCCAGTTTGGGGAAGGG
-AATAGAGCCAGTCCCTAAACCAAAGCCACTAGTCACCAGAGACTTTGGAATTGGGAGTGG
-GGCCGGAATCCCCCCAGGTGGAGCAGCTGACCTAGGCCAGACCCTGCTGTGTCTCCtggg
-gacaccccctgccccctaggttgctattgtcagtctccttttgtaggtggggaaacggag
-gttctaagaagttaagccccttttcgaagtcacagtcagacaatgcagtggttagctcct
-agtccctctggcttcAATCTTAGAATCCTTGACACACAGAATCATGCATTTTGAGAGTCT
-TCAATCTCTTCATAAGGGAGTTACATATCCTCTCTCCTCTGGAGCCTGCCCCTGGCTTTG
-GGGGACAGGATCTCCGAGGACTCAGAAAGAAAACAAGGCTTTCTTTTATTCTTTCAACAA
-ATATTATTTATTGACTTCATAAGCCCTGCTCTGGTTCTTGCATGTTTTGGTTTTTTTACT
-TATTAGCAAATGTATCATCTTCTCCCACTGTGATGcaaggcaggggctgaggcaattgag
-ccagtgcaaaatttagggatgcccaaaacctcagtaatcaagaCTGAAACTAACGTTCAT
-GGACCATTTGTGTGTTCTGCAGGCAGGAGGTTAACTCACACAGCCTTCATGAAGTGCAGT
-CCTCCCAtctctctctctctctctctctctctctctctctctctatatatatatatacac
-acacacatatatacacacacacatatatgtatatatatgtatgtgtgtatatatgtatat
-atgtgtatatatatgcatatttataAATCATGAAACCACTgccctgtccctgagttgctc
-tgtgacattgagtaagtttcttcagtctctgggcTGAGCTAAGAAGTCATGATGGTGCAC
-TCAGGCCTGGGCAGAGGGCAGTCTAGGATAGGAAGTGGGCTTGGCTGTGGATCTGCCTCC
-CCCTCCCCTTTCTAATCctgcgtgccaggcccttccccaagaccttgcatgtgttatctt
-ccattctgtcctcactgcaaaatccttcatccccattttgcaacctcaagtgcagaccta
-ggcctagaagatcaaCTTGGTATCAGTGGGCCTAGATGTCCACATCCACACCCATTCCAC
-AGCCTACTCCCTTCTCCCTTCCTAATGTTAGTGCAAGGCCACCCTGAGCAAGGCTGACTC
-CTGGGCAGGCCAGGGCACCAGCGTCTGGGAGGCCTCCAGAAATAGCTCAGGGCCTGGTGT
-GGCTCTGGAGGTGGCCCAGCTGGGTGTCCCTGACCTGGACAGCTGGGCTGAAATTGAGCT
-GGGGCTGCCCTGCTGGCTGGCCCCTTGCCACTGCCTGGAGCCTTCCCAATCTCCTCTGGG
-GCAGGCAAGGGCCTCCCCAAATCTAGGCCAGGCTTCTGCTGAAGGGAAAGAAAGAAGCAG
-GTGGGAGGAAGGGGGCGGGTTGGGTGTAGAATGTCATGAAAATTATAACCTTTGGAAACC
-ACACCTCCCACCCCCTCACCAAAGAATaaaaatcactaacacctcttgagcatttactat
-gttctaagtactttacaagtatgaactcatttaattccctcaactctgtgatataaggta
-attactgctgttcttatttccatcttgcagaggggaaactgagcacaagagaggtttaat
-aatttgcataagataacctagaggtggagtttgaacccagagagtctggctctaaatttt
-acatttttTGGGGGGGGGGGTGGGGTGGGGCAGTGAATGAATtaaaatgtatataaaata
-aaatttaccattgtaaccacttttaagtatacagttcagtggcattaagtacattcccca
-ttgcctctccccccagtgcctggcaatcaccattctactttctgtttgagtgaatttgac
-tactttgggtacctctaggtattataaatggaatcataacagtatttgtcttgttgtgtc
-tggcttatttcacttagcataatgcctttaagtttcacccatgttgttgtatgtgttaga
-attttcttttttatggcggaataatctattctaatattctatgtatatgccacattctgt
-ttatccattcattccttgatggacacttggattgcttttggctgttgtgactaatgctgc
-tttgagcatgaatgtacaaatatctgtttgagttcctgtttttaattgttttgggtatac
-actcagaagtggaattgctgggtgatcctatggcaattctgtttaattttttgaggaact
-actttactgtgtttcacagtgactgcaccattttatgtgtccatcagcagtgcacaaagt
-gctaatttctcaacatcttcaccaacacttgttattttctgtttgtattttttttttggt
-aatggccatcttcaggggtgtgatgtggtgtctcattgtggttttaatttacatttccct
-aatgactaatggtgttgagcatcttttcctgtgcctgttggccatttgttatctttggag
-aaatgtctgttcaagtGACTCTGCAttgttttttttttttttttttttttttgagacaag
-agtttcgctctgtcgcccaggctggagtgcagtggcgccatctcggctcactgcaacctc
-tgtgtcccgggttcaaatgattctcctgcttcagcctcctgagtagctgggattataggc
-ccccgccaccatgctgggctaatttttatatttttagtagagacggggtttcatcatctt
-ggccagtctggtcttgaactcctgaccttgtgaaccacctgcctcagcctccaaagtgct
-gggattacaggcttgagccactgcacccagtcATGACTCTGCATTCTTAACCATTACCTG
-TGCTTCTCTTAGATTTGTAACCTCTGAGAATAGTGGATCAGCTTTCTGGGCTGATGAAGC
-CCTCCCTCAGGAGCTGGGCACTGGATGATCTATTTGGTTGAATAGTTATCATAGCCTGCA
-CTTTGGTGACATTTGTCATGCATGGACCTCATGCAGAgagggaggcactgttgtgagtcc
-tgttttgcagttagggaaactgagatatggagaagttgagtattttatccaaggtctcat
-agctaatcattggtggagctaggatttgaatgggttctggagtccatgctATACCTTACA
-GATAtggccagggggatggagtagtgaagaccactgcaggcagcagaaccagtgtgtgca
-gaggTTTGTATATGGTGGCTTTGGAGAAAGAACAGGACTTGGGTAGAAGTGGTCAGAGCC
-CAGCTTGAATGGGGGTGACTTGAAGTTGGAGGAAGAGTAGGACAGGTCTGGAAAGGCCAG
-GAGCACGGTGAGGGTTTGGGGAGGAGGCTTGGTGCTTAGGGACCCTGTCCTTTTTTTTTT
-TTCtcttctcacaagatatttattaattacaaagggaaaataataactgtacagtggaga
-aatttggcagatactgccttaaccaaggaattggctgatcactaagattaagacaaactg
-ttgttatgagtgggtgtggtaatgtacctatagtcccagccactcaggaggctgaggtgg
-caggattgcttcagcccatctatttgaggctgcagtgagctatggagtgcactccaacct
-gggcaacacagtgagacctcatttctaaaaaaagaaaaaagaagccttctgataccatgt
-actaagaaggacacaacatcacttttgtgttattcttgacagatatgtttaacttTCTCT
-CctttctttcttcctctctttctttcttctctctttcttACTGATATAAGAAAAAGCTTT
-ATACATTTAATATATACCTCTTGATGAGTGGCCTTGGCCTTTGAGGTGGGCTGGGTCCAG
-AACAGCCGGTTGTTCAACGGTATTTCCTCGTGTTTGGTCCCTGAAGGAAGAAAATTGGAA
-GGGTGTGATggagctcatggtccagtgggagagacaggaaacgagttatatttcctatcc
-tagataagagtatctaaaatgacaggatgtaatgagtgctcggaagggaataaaatgggt
-gaaattgctgagggggtctcttggaggagatgacatttgaaatgagatctgaagggggtg
-agggaagaggttccagacagagaacagctggtgcaaaagccctgaggcaggaaagacctt
-atgttcaggaacagcagggagggctttgtggccagagcaggaaagaggttggagataaga
-tgggagatttggacaaggactgagtcctggaaggcctgagggccaagtggggagcttggA
-ttttttttttttttttttttgagacagagtcttgctctgttgtccaggctggagtgcagt
-ggctcaatctcagctcactgcaggGAGCTTGGATTTTATTGTAAGGGAGCCACAGGAGGG
-TTTAAACACAGCAGTAATGAGACTTTATTTCTGCTGGGAAAACATtgccgttattgcccc
-cattttacagcagaggaaaccgagactcagaaccatgaccagggagtgcttcctaaggtG
-GTTTCTCCCTCTGGGGTCCAGCCGACGAGGCAGTAGATTCCTTGGGACTTCCTTGGGGGG
-CACATCTGGTGAGTGGCCAAAGCCCAACACTGAAAACACCGTCTCTTCCACCTCCCCTCC
-CCAGATGTGAgcctgggttccaatcctggctctaccattaatcagctgtgtaattttggg
-cacgtggccttacctcttggagcctcagttttctcatctgaaaatgggcataataatagt
-agccctcacagggtaggtgtgaggattaaattagttaacattttgtagagcttagaacag
-tgtctggtacaaagaaagtgctcagatgagatttgttcttTTCTTTTTTGGCTGTAAGTT
-TATTCAATGTGAAATAATCCTCTCCAATTTTATTGAGGTGGCTGACCACGTCCACGACCA
-CATCTGCCTCTAAACTGGAATTCGGTTGCTGACCCAGCCCCAGCCTCGGCTTTCTTGTCA
-GCACCAGGGGGCACAGAACACCGTCTGTAGGTATCTCTGTCAGCTTCCCGTCTTGTGAGT
-CTTGCAGGTCGCTTACCCTCCAGACCTTTAGGCCGAGGCCTGCCAGTCTCTGGACGGCTG
-CGGTGTAGGGTGGCAGGAACAATCTCCGGGGGCAGATGTAGGGTGGCAGGAACAATCTCT
-GGGGGCAGATGAAGGTAATCACGGAGATACTGGCTACCCTCATTGGTAAGGTACCAGTAG
-AAATGTCTCCAGGCAAACTGTTCCTTCACGCAGCCCCGGGACTTGAGAGACTGCATGGCC
-TTCATGACGTGAAGGTTGGGCACATTCTTGTCTGCCAGCTCCGGGTGCTTAGGCATGTGG
-ACATCCTTCTTGGCCACCATGACTCCCTCCTTAAAAAGGAGTTCATGAATGGCAATCCGG
-TTCTTCTTAGGCATCAGCATCTTGGCAGCTGTAGGGTCCGGGGCTGGGGCTGGAAAGGAA
-GGACTGTTCTTTTCTTTGCTATTACGAAAATCATTATTGTTGCTTTGCTGTTACTACTAT
-TAGCGCCTGAAGGAGCCTTCCCTCCCCATCCCCCATTTCTGCCTCCGTGGAGGGCTAGGC
-AGGGCTCAGCAGGCCATTTGGAGGATGAAGGACTTGTTGCCCCGTCCCCTGTAAAGTCAG
-GGACTGGAGGAGGCTGCAGTGCTGAGGGGGAAGGAAAGCTGATGTGCATCACTGCCGGTC
-TCCTCATGCCCTGTACCCTAGTCCTGGCCCAGCTCCCACAGGCACAGACATGGAACAGGA
-GCCTCTTCAGCCTGAGTGTGGCAGAGGGCTGGGGCTGAGGCCTGGGGGACAGCTCCTTCT
-CTGGGCCTCAGGATTCCCATGAAAAAATGGCCTATCAAATGTTCCTACCTGCAGTGAGTT
-ATAGGACTTGGGGTGGAAGAGGTGACAGTCACCTCCCTCTGGGAATTCCTTCCTGCAGGG
-CTGCAGTCTCATGGGATTAAATGAGGGGGCTCTGGGGATTTAAATGAGTATGGTGCCTGG
-CACCCCAAAATTCTAGTTATTGTTGTTACTATGACGGCTGTTGTTGCCGATGTTAACCGT
-TTTCACAAGGCAGCTGAGGCATGCTCAGGCTCAGCCTGTTCCAGAGGGATGGACTCTACA
-CGTGACAGCATGGAGCACCAGGAGGGTCCCGCAGCCTGGTCAGGGACACACAGCTAGAAA
-GTGGTGGCGTTAAGCCTTGGTCTGGAGGGAAAGTGCGCAGGCTGGACTCCCCAGAgtgat
-tttgggctagtgactcagcctctctcagcctcagtttaccattagtcaaatggggtaaca
-atagaactcaccagatagtgattgttgggaagattaaaatgggttacccgataccaagaa
-aaacactttcccgtgcctggcacaGTGAACATCACCTGGCGGTCGTTCTGAGTGTCAGGG
-AGCGGGGCTCAGTTTGTCCATCTCTAAGGTGGGTGCGCTTGCCTGCCAGAGCCACGGGGA
-CCCCGCGCGCCAGGTGTGCGGTGGGCGGGTCTCGGCTCCCGGAAGAACTTCCCTGGGTGG
-TCCTGGAGCGGGTCGGACCCAGTTCCTGAGCCAGGCCAGCTGCCGGCGGCCGGGGCTCGG
-GTTCTGGCCCCTGCCTGGCTTTCCTTACCCTTTTCGGGTAGTACCTGGACCAGCGGGTTC
-ACTTGCCCGCGGCCGCCGGAAGTTGCGCAAACTCAGCTTGCCGGAGCCCCAGGTGGGCCG
-GGCCGGAGGAGCGCAGGCCAGCGGCGCGGGCGCAGCCGGGTACGTGCGGACCGCGGCGGG
-GGGCGCCCAGCCGGGGTAGGGGGCGGCCCGAGCACCCCTCCACCCCAGGACGGCGGGAAC
-GGGGCAGGGATCTACCTTTCGGCTTCAAGAGGACCGCGGGGATGGTGCCGCTCTCTCCCT
-CATTTGAGAGCCAGGAGGGGCGGCGAGGGGCAAGGGTCACACAGCGCCCTGCTAGCCGAC
-CCCCCATCCCCCGCCACCGGGAGTCCTCAAGCTTTTCCGGAATTGAGGGAGAGCAAAAGC
-CAGCCTGGGGATCTGAGTTCCCCCCAGCCCTGCCCCGCGGCCTCTGGAGGCTGACGCTGG
-GGAGCTAGTGGGGAGGGGGCCAGGTGGGGATGCGCGCCCCCGGGATGCAAGCCAGAAGGG
-CCGGCGGTTGGGGGCATCCGTGGGAGGCATTTGAATCCGTGGGTGGGGCATTGGGCGGTG
-AGAGGAGGCCTCAGAGGGGACATTGAGTCGCGCTTGGGGACTTGGGACCCTGGCTTCACC
-TGGCGGGAGCCGCTGCACCTCCGTTTGCCCACCCGTGACGTGGGGCTGTTGAGGTCAGCT
-CACCGATCAGCCTCTGTCTTGGGCCTGCTTTGTCCGCGGTGTGGGCTGGGACAGACCCTC
-GTGGGGCTTGCTTAGAGACCCCTGCGTGGGGGTGGTCTGTGGACTTGGTTAGTCGAAATC
-TTCTTGAAGACCAGGAGCCTGGTTCGTGGCTCCGCctttttgccagatgccgaggaaagc
-cctcgacctgtttgatctctccatccttatcgtgacctggaggctcaggaaggtctattt
-ttaacctcgtttcacggataaggtaaccgagtctgtaaagaggcgaagctgcttgcgcaa
-ggcgcacagcgggcgggtgggcgagccGAAggccggcgggcccgcggcgccAAACCCGGG
-GTTGGCTCTCGCATCTGTCCCGGCCCCGCCAGAGGGGACCTCAGGGCCAGCAGATGGGGC
-CAGAGGGGCTGGGGGCCCGATCGGGGTCGTGCACGGGGTTTCTGCCCCGGCCCCGCCCGT
-CTGACCTCCTTCTCCCTCTTTATCCGGATGGTGCCCGCAAGGGAACTGCCACTGCGGACG
-GGTTGGACTGGTTTGGGAGGTGGCGGCCTGGGGGTGGGGCAGAGTTTGGCTGGCTCTGCT
-GTGCTCCTTTCCTGTCAGGTCCTTCCCACCTGAGGTCTCCTGGGGGTCGGCCCTGGTGGA
-GCGAGGCTTCCTTTCCCATCCACTCCATCTCTCCTGCCTTGGGAGCAGCACCCAAGGATC
-TATTCCCAACTCATGGCTGCTGCAGAGGTCTCCAGCTGGTGGTTGGGGGCCAGATGGAGG
-AGGAGGGGACAGATATGTTCGCAGACATATTTTGTTTGCTGTATATGCAATGTTTTAATC
-ATTATTATCGAATATGCTGACAGTTAAGAATCTAGAGTTTTTATGTACTCCTGGATTTCC
-AGCTTCCTGGAACAATACACCTACCACCTTGGACCCATATGCCTGCAGCAGGCAGGGTAC
-CTAGATGTCTAGTTCATCCCTGATCACCCAGTTCACATCTGGCTCCCATAAATATttcag
-ttcaataaatttttattgaatattctgccctagtatgtgtctagggcagtatcttgaaac
-tggggtatagtgaacaaaatagccaacccccgcccctacacacacacgcctgccctcatg
-gagctgatattttagggggatagagacaacaaagagtaaaacaaccatacacaaatagag
-tacttgtgcaggggataaggagaaaaggaatagtgccgggagggggtcaggagtgccggg
-gagaaacaggacgtggtattGAGATCAGTGCCTTatttatctattctgggacctgggaaa
-gccacttctctgagtctcagtttctccatctgcacaacgACCCACAGGCTTGTGGGAGGT
-TATAGGGAGGATGGCACCCAGCAGAGATCCCTGCCTCCCCACCCCAATCCAGACTCACTC
-CCTTCTGGATTTTTGGATGTCTAGGTGGGgctgtccaatgtagcttcctaccatggatgg
-aaatgctgtactctgtgctgccaaacacagtggcaactggccacatgtggctattgagaa
-cttgaaatgccactagtgtagctcaggaactgaattttatgtttttatttcatttaaatt
-taaagttaaggttgaatagccacatgtggctgctggctattgagctggacagcacggGTC
-TAGATGGCTTGAACTGTAAGCCTTCTTGGGGAACACCCAGATTAAGTACCCGCCCCCTCC
-ATTTTACAGATGAGAATGTTTGGGACTTGGTATGTGGGTTTTCTTCTGTCCCATCTCCAA
-GGGGCCTTGTGGGGTGACTCTGTGGGCTTGGCCCTTCCTTGGAAACAGGGTCAGGGTTGG
-CTTGATGTCTGGGGCATCAGGTCCTGACACTTGGGTGACCACGTAGACACTTGTGCATCC
-AGGTGTATGCCCTCCTCCCAGGTGAGTACCCATTCCATGGCTGCAGGCAGATCGAGGGTC
-TGCCGGATGCCTCCATGCAGGGCTGTGTGATTTTGGACATTTCCAGCTTCTCTCAGCACA
-GCATAGCTCAGGGCTGATGTTTCCACGTGACAGGCATTTGTGGATCACCGTGGGCCATCC
-AGTTCCATGCAGGAAGCTGACGGATGTCTGGACTCCACTGGGGCGCGGGTGGAGATTTTC
-TTTGCTCCTTCCCTATAAGCTCTGCCCTTTGCCTGGGGCCTGGCATGTCTAGGCGGGTGG
-ATGGCACAGGGCAGCTTCCTGCCTGGATGGGTGAGGGGTAGAGGTGGTACCAGGCTCCCT
-GTGGGGAGTCCAGGTGGGGTGTGGGGCTGGAGCCCTTTTTCTTGGTCATTTAACCCTACG
-CCCCGGTGCCAGCACCTTCCTTTTTGGTGGTCAGGGGCAGAgccacctactcgctgggtt
-aacttaagcaagttgtttgcctctctgggcttcagtttctccatccaaaaaacggggctg
-ttgagaggacctGAGGTTGAGTTGACTGGTGCGTAGCACAGAGCCTGGAGCCTCCCTTGC
-TCCCTTTAGCGCGTGCCTTGCCCTGTCTTTTCTGCTCAGGTTGCCCAGGTCGCCCAGGTC
-TTTTTTCTCTAGCACCTTTTTTCCTCTCTTGGTCTCAGCTGGGCCTGGTTCTCCCGGGGC
-AGGAGGGAGGGGGTGTGGGTGGGGCCTGAGGCCCCGCAGCTGCTGCCTTGTGCCTGCTGA
-TTGGCTCCTTGTGGAGGGGCGTGGTCTCTACCTTATAATAGGGAGGGCGTCTTATCCTCT
-CAGCCGCGGCTGAGCCTCTTTGTCTGAGCGCGCTCGGCTTTTTTTTTTTTTTCTCTCTCC
-TTCCCTGCAGCAGTGGCCGGTGTCCAGCTGCCTACTTTCTGCCCGGATCTCTGGCTCCTC
-ATCTCTCCGGTCTCCGCAGACTAAAGCCCTCGGGATATGCAGCAGCCATGCCTGTGCACA
-CGCTGAGCCCCGGAGCCCCGTCCGCCCCCGCCCTACCTTGCCGCCTGCGGACCAGGGTCC
-CTGGCTACCTGCTACGGGGGCCGGCAGATGGTGGAGCCCGGAAACCGAGCGCTGTGGAGC
-GCCTGGAGGCCGACAAGGCCAAGTACGTCAAGAGCCTGCACGTGGCCAACACCCGCCAGG
-AGCCTGTGCAGCCCCTGCTGTCCAAACAGCCGCTCTTTAGCCCTGAGACTCGCCGCACAG
-TGCTCACGCCCAGCCGCCGAGCCCTGCCTGGCCCCTGCCGACGGCCCCAGCTGGACCTGG
-ACATCCTCAGCAGCCTCATCGACTTGTGTGACAGCCCCGTGTCCCCTGCCGAGGCCAGCC
-GCACTCCTGGACGGGCCGAGGGAGCCGGCCGTCCTCCCCCAGCCACCCCTCCGCGACCGC
-CGCCCAGTACCTCTGCGGTCCGCCGGGTGGACGTccgccccctgcccgcctcgcctgccc
-ggccctgcccatcacccggccctgccgccgcctccagcccagcccggccGCCGGGTTTGC
-AACGCTCCAAGTCGGACTTGAGCGAGCGCTTTTCTAGGGCAGCCGCTGATCTCGAGCGCT
-TTTTTAACTTCTGCGGCCTGGACCCGGAGGAGGCGAGAGGGTTGGGTGTGGCCCACCTGG
-CACGGGCCAGCTCGGATATCGTGTCCCTGGCAGGGCCCAGTGCTGGGCCGGGCAGCTCTG
-AAGGGGGCTGCTCCCGCCGCAGCTCGGTGACTGTTGAGGAGCGGGCCCGGGAGCGCGTTC
-CCTATGGCGTGTCGGTGGTGGAGCGCAATGCCCGCGTGATCAAGTGGTTGTATGGGCTAA
-GGCAGGCTCGGGAGAGCCCAGCAGCTGAAGGCTAGGCGCCACTGGGCCTGGAATTCGCCA
-CAGGACGGATCTTACAGAGGCAAGTGGTCCCTGGACCTCTCTTGCATCCATTCTCTAGAC
-GGCCGTGTCAGAGGCTCCACCCTGTTGTGAACTTGGTATGGAGGCAAAGGCTTAGAGGCT
-GGACCAGCATTGTTGGGCAAGGACTGACTCTCCAAGGGTTTTGTTCTTGGCTTTGGACAC
-CTGAGAACCCCCTCCTCCCCTCCCCCAATACAAGGTTTTTGACATGAGTGTACTCCTGCT
-TAGTTCCTCTTGTGGGGCTGCATTTGCGGTGCTTTGCCCTCCCCACTGTGAGTGAGGGGC
-CAAGGGATCTCCTCAATCCTGTCTCCCCAGCGGCTCTGTTTCCTCCTTCCTTCCTTGGCC
-TCTGTCCTTTGCTGACTTCCTCTTCCTTACCCAGCAGAACTCACCCTGGGGTCGGGGCAG
-TGGGGAGGGGCCTATCCACTGCTCTTCCTAGTCCTTGGCAGCTGGCCTAGGTGGGCAGAC
-TATAGGAGGGACTGGTTAGGAGTCTGCATTGCTTTGACTTCCCTCTCCTTGGTTAATAAA
-CACAAATGCTTGTTTCTCAAGGGCTGGGCCTTCAGACTCTTCTGTGTTCACAAGAGAAAG
-GGTGAGAGAAGTCTTGGGGTGGGGCCATCAAAACAGTAATTGTTCACCCCGAGGTCTAGT
-GGTGGGGCATGATGATAGCGGCTGGCCTGGCTGGAGACATGTCCCCGTGGTGGGTTCTCA
-TAACTCTCCTGGAAGGCTAGCAGGCCTGCCTCATCGAGGAGGAAACTGAGATCCAGCCAT
-GAGTGAGCTGGAATAGAGCTGGGAGTAGGAATGGGGTCTTTCCCCTGCACCAGAAAGGGA
-GCCTGCAGGGGAAAGGCCGATGGGGTGCATAGACTCTCCCCAACCAGGAGTGTTCCATCC
-AAGCCCTGCCCAGTTCCCAAGGGGGCAGGAAGCTCGGAGAGGGCAAATCCTGAACTTGAG
-GTCACACAGACCATAGAGTGAGGATGAGAAGTGGGAGTTTTGGAGGAAGAGAGACTTGGG
-GTGGACGGCACAAAATGAGTGGCctccctggcgatcttggacaagccagtttccctctgg
-gcctcagtGGGAGAGTTAGGCAGCACAGTCCTCCTTGGGTTGGGGCACTGGTGCATTCTG
-GGCCCTTCATGCTATATTCCAATACCTGGGGAGAGGGGAAGGAAGGGGCTGGCACTGGGC
-TTCGAGGCCTCAGCTTCTTCCAGTCTCCCTCCAGGTCAGTTACCTACTAGGACACCCCAC
-CTTGGCTAGTGGAGCAGCTAGGGCTAGAGCTGGGCCTACAAAGGGCGAAAGCGGGGGTGG
-CCTCTCTGGTGCCCCACGGTGGGCGTGGAGAGGGGGTGGGTGGCGCTTCCTTTCACAGGC
-TGCCTTGGCTGCAGCACTCAGAAACAGGAAGCTCTAATGGGGGCCCTGGTGACAGGTTTG
-ATGTAGGTTTTATTTTAAGCATAAAGAGGAGATTTCCGTTGGACTGTTGACAAACATCCA
-CATCAGCCCAGCTGTCCATCTCTCTGTCTGTCTGCCTGTCTACAACTAGCCCCCAGGGGC
-CTGGGATGGGCCTGGGCAGTTTGGGGAAGGAAGGGAAAATTGGGTTCTAGAAGAAGATGG
-TGTTCCAGCTCATGAGACTGGAGCTCATGATACTGGTGGGGAGACAAGCATGAGGAGGGT
-GGTGACCTACCCACAACCCCCCATGGTGCCCAGCAGTTTTGACAATGCAGGAGCTGGGCC
-TCCAGGGTCCCCATGCTGAAGGAGTGATGGTGTCAGGAGAGAGAATCCAGGCAGGATCTG
-CAGACGTGGTGCCCTTTGAGGTGTCAAAGACTAGATTTCCTAGGCAACCCTGCTAGAATT
-CAGGGCTAGTCATTGCCCCTTGCTGTGACCTGGCAGcctccgagtaacccaagaaggtgg
-atgggctggctgcattttacatgtgaagaaattgaggttcagGTCACAGGACTGGTGGGT
-GACACCTTGTTTCTGAAGGAGGGTACAGTGCttgaatcctcaaggtagccttttgaggac
-cagatatattgtcagagcaggaggttgagctcagggaaggatagcgacttgtatactgtc
-acatagcaggtctgcaggacagcctggggtcacactcttgcctgccagacACATCGCAGT
-CTGGATTCCTGGTTCTCCCAGCATGTACCCCACCACTCTTCCTCATCTTGGCAGCCTTTT
-CTTCTGGTCACTTTATTACTGAGCATCTActgggtgcccagcagtggataagacagacat
-ggcccctgtcctagtctggagaagagaatgggcaactaaacattcagcacataaataatc
-atagaatgtAAAGCAGGTATACTTAGGGACTTCTGCCCTAAAACCAGAGCTGTTCCCAGG
-AGCTGGACCAGGGGATAGCTGAAAAGAGAACGCCTTTCCATAAATCCACTGGGAGGGTCT
-GTTGGGGAGAGAGCAGGGAGGGATTCTTGGAAGTGGGGAAGGTGCCAGATTGAGTCTTCT
-CCAATGGTTATGGCTTGGTCTTGGGAGGGCTCCCCCTGTTCCAGGATTCTGGAGCCTCCC
-GCCTTCCCTGCAGGCCTCTGTGGAGGGAGCAGGGCGGGGGGCTTTTGCACTCCTCCCTCC
-CCCAACCCTGCAGCCTTGGGGATCTGTGGAAACAGCCCCTCTATTGTTCTGCCTCCAGTT
-GGAGTGTGAGCCCTCGGAGGGCCTGCAGCTGCTGCCCTGTCTCCTGGGGCTGCCCAGCCC
-TCCGAAGCAGCTCCCCCAGGCCAGCCTGGCCCCAGCTGCCTAGCCCCTAATTAGGCAGAG
-ATGGGATCTGCTCTCTGATCCATTTCCCACCAGCTAATTATATACACGTGGATTtgggaa
-ccaggcaacctggctgctcacttctatcatgaaggtggatgggccctgggaaaggcagcc
-ccccccccacagacctcagtttacccttttggcagaggatggagtGTAGCTGCAGAGGCC
-TGTTCCCTGTCCTTGGTTAAATAGTTCTGTTCCTGCTACTGAAACATTTAAGGAGACCCC
-CCACCCCCATCTTACCTGATATCCTGTGTACAGGGGACCAGGAAAGGGTTGAGGAATTTG
-GCTATAGGTCCTTGACTCTAGGACCCCAGGGTAGGGTCATAGGATATAGATGAGAGCATG
-GCTGCAGCTGGCTGCCAATTAGATGTGCATATAGGAGGGCTTACAGTTGTGCTGGTCCAT
-CTGGGTGGCCTGAACACCCggccgggtgcggtggctcacgtctgtaatcccagcactttg
-ggaggccaaggcaggcggatcacttgaaaccaggagtttgagaccagcctggacaacgtg
-gtgaaatcccgtctctactaaaaatacaaaaattagctaggcatagtggcggacacctat
-aatcccagctacttgggaggctgaggcatgagattcgcttgaaccctggaggtggaggtt
-gcagtgagccaatatcatagcactgccctccagcctgggtgacaaagaaagactccctct
-caaaaaaaaaaaaaaaGGAGTGAACACCCCATCCAGGTTTTTAAAAaggtaatattggtt
-gatgggtacagcaaaccaccgtggcacatacatatctatgtaacaaacctgcacattctg
-cacatgtatctcagaacttaaagtagaataaaaataaaataaaaGGTAATATTATTTTTC
-AGATAATTCACTCATATATTTCTTCCAACAttttattaagaaaaatttcaaacatagagt
-tgaaagaattagacagtgaacattcatatacccacctactaatgcacacttgttaatatt
-tcactatatttgctctatcaggaatctacccatctctccatccATTAATACAACTTATTT
-TTTTAATACAACTTATTTTTTAATAAAGCTTTTCAAATTAAGTTGCATATATCAGTACAC
-TTCCCTTAAAGTCACTTTAGTGTGCATGCCATTAGCTAGAATTCAATATTTGTTTGTCTT
-GTTCCTCTCTaggtaacatttacatggaatgaaatgcacagatcttaaaggtgccatttg
-ctgaatttagacaaatgcatactgtaccccaaacccctatcagggtatcaagcattatca
-cctcagaaagtttccttgcatcgctctcctgccgattgctgcctgcccaCCATGGACATA
-TTTTTATATCCATATATATCAGTACTAACaagcagcatcccttgtcctttcctctacatc
-agcctcgctccccaaaagcaaccacttacaacttcttaaactatttcttctggtactttc
-ctccatatttttaaataacttgcttttcctgctgttttcttgatcaattttaggcataca
-cacacacacacacacacacacacacacacacacacacaTATATAtttattttttttttga
-gacagaatcttgctctgttgccccggctggagtgcagtggtgtgatcttggctcactgta
-acccctgcctcccaggttcaagcgattctcctgcctcagccacctaagtagctgggacta
-caggtgtgtgccaccacgcctggctaatttttgtattttttgtagagatggggtttcacc
-atgttgaccaggctggtcttgaattcctgacctcaagtgatccacccaccttggcttccc
-acagtgctgggattacaggcgtgagccagtgtgtctgaccAATTTTAGGCACATATTGAC
-TGACTTTCTGGTCTGATGTTttcatagtgtggcctccactgcctggctgcctggctttgg
-atcccagcccttcctctttctggctgtatgaccttgggcagtaacttaacctccttgggc
-ctcagttttctcatttgtaaaatgagggtgataataatagtgctgaggttattggattgt
-tatacggattcaagatgtaaaaggctgagaataatgaacatcacccagtgagtagtcaaA
-CTTTTTCTTCTCATAATCATTATTATCAAGAAAGATTTAGCTTTTGGTTCCCCCCTTTCA
-ATTGGCATTtatcacaattttttgtgaagtggattttagtgttatttatattatgactat
-gtaaatactgtttcctttcaagccaagtcatatattttggttacatttcctttcttgtac
-aactctttgttcttcctggagttactactcgctttgctttttttcatttgctgtttcctc
-ttaacccatccttaattcTCTTAATTCTTTGACACCCTCAGTCTCCCCATAGTTAACATT
-ACACATCCTGAAACTCTTCAAGTGCTTTTAAAGAAGCATCCCCATCCATTTAAAAAAAAC
-TGGAGCCAATTTTTAAAATAGAATCTCAAATACAATCTGTAAaataaagatttgtgagca
-tccactatgtgccaggagctgtgctaggcagagtgggaaggtagccaaataggggatatc
-cctgcccatgtggGTTTCCAAGAGGGATGAAAACTGAAGCTCCACACCCCCAGCCTCTGC
-ATTTACCGGGGAACACCTCAGCACCTCTAGGAATCTCAGGACCTCAGGGAGCCCAGATTT
-ACTTATTTGTAAAATGAGGATCATTTTGTCATTCTGCAATCACTCCTTAACCATGTTGTC
-TGGGGCTGTGTTGTGGCTGCTGGGTATAGAGCAATGATCTCCCCATCCCTTGAGGGGCTC
-ACAAGAGCTGTGGGATAGAGCGGAGGCTGTGGATTGCAGCGGAGCAATGGGAGCTGGGGA
-GCGGGTTTCCCAGAGGAAGTACCATAGGACGAAGAGGGTCTTGGTGGGTAAGGGCAGtaa
-acggctgttatgttccaagggctgtgcgaagaacttccatgtattgtcccatcaaatcct
-cccaaagacccattgaaaggggtcatatttttatcacaatttcatagatggggaaactaa
-ggccaggagagtccaaggccagggtcacacagctaataagcggcagaggcagtatttgaa
-cctatgcagttgggttcttaaccacacactgcactgtCTCTCACATCCAGATGCCCAGCT
-CCTGTCCCCACCTCATCCTGTATCTGCCTCGTCCTCTCCTGTCTACCCACTGGTGCTAAC
-CTCTGGCTCATTCCATGCCCTTCGCTTTATTCatccattcattcaacacaaatctactgg
-gcgccttttccacgcccaaccctgggctgggcagtgccagggacatagAGCTTGGGCAGT
-ATTGACTCACCCATTCCCAGATAGGCATTGACATTGACATGCAAGCGGCCAGGAAAGTTG
-TCTAAATAAAGGGGTGTTTGGGGTTGAGTGATGGCtgtgtgtatgtgtgtgtgtgtgtgG
-CCTGCAAGGGGTGTGTGTCAGTGTGGCAGCAACAGACTTTCTGTGGAGGCCATTTATGAA
-GGCATATCTGTGTACCCTTGAGAGTGTGTTGTCTGCAGAGGGTGTGTCCACCAGGTATGt
-ggatcagtgaggctctgctgcataacaaaccactctaagcccagaagcctaaaaccactt
-attagcctgtgtgaagtggcagtctggcctgggcttagctgggcagttctggttttacct
-gggttcacttgccttgctgcagtcagctgagggtgggggctctgggagggcttcactcac
-atgcttagcagttggcaggctgtttgctggggtgcctccatttgctttgatgaggctggc
-ttgggctcatgcttatggtgacctcagggttccacattcagcaagagaagataagctcca
-acgcacagtgcattttgagcctctacttgtgtcaagattataaatgtcctaatagcccaa
-gtgacatgtcaagtcagattcaaaggatggagaaatagactctctctctCTCTCTCTCGG
-TTGTGTTTTTGTTCTTTGAAAACAAGCCCGGCTTGCctggctccatcgcccaggctggag
-tgcagtggcgcgatcttggctcggtgcaacctccgcttcctggttcaagcaattctcctg
-cctcagcctcctgagtagttgggactacaggtgcgtgtcaccacgcccagctaatttttg
-tatttttagtagagatggggtttcaccatattggccagactggtctcgatctcttgacct
-catgatctgcccgccttggcctcccagagtgctgggattataggcatgaggcaccgcgcc
-tggctTAGAATCCATCTCTTagtcacattacacagggcatgagtacagatatggaggaat
-tattgtagctgattttcaaacaacttaccTGTGTGTGCAGGTAAAGAActagggacagtt
-ctcagttttggaaataaaaaaaactctgggctgcagtcctggctcttccgtccttgctgt
-ctgaccttagtcaagttgtctcattctctgagcttccgtaaattggataaaattgaatga
-aacgagatgatctttaTAAAGTGCTTGTGCTACTCATTTGTTTACAAACGcagcacatat
-ttattgaggcctcctatataccaactactggtcccaccccgaggatattgcagtgaacaa
-aatggaccaaaacacctgctcttgtgaagctcacagcctaggttgtagacagatgttaat
-tgatcatcctaataattgtatgaccattgagagtagattccggaaggagagattgctgac
-ctggccaggttgatctgagaagccaaagatatttaagctgagatgtgaagggtaggtagg
-agacaacgaggagaagaaagataggagtggaaaatgattctagatggagggcatgtgcaa
-aggccctgtggtgggaggagtagattccaggaacacagagaaggtgggtggggctggGCC
-TGAAGCACCAGGGCCAGATGGTGTGGGGCTGCTGGAGCCTTTGAACAATGTGAGGGTCTG
-TCTTGCCAGGCAGcctaaaataaaaccgaaaggcctaactgctccacaaggccctcatga
-tcggggaccttgttactcctccagtctcccctttacctactctgctgcagccatgctgcc
-tccttcctgttccaggaacaccctggacacattcccacctcagggcctttgcacttgcca
-ttgcctttactagtatcgaccctacccagatattctgatgactcattctgtcacttcatt
-tccatctctgcctcttcaaaggggccttccctaccaacccaccacaacccccctgcccct
-ccagctaagcagtcagcatccagcagtctctacttccctggcctggtttatttctcttcc
-tagcacatatcacctcctggcttatattaaccagaggccacattgtctgtttctcttctg
-gatctctcaccagagtgcagctcagcaggcagggacttggccttgctctaggctgtgtcc
-tcagcctcaggggaagagtaggcattccataaacatttgtgaataaagaaatGAGTGAAA
-ATGAGTGAGTGAATGCTGGAAAGAACTAGCTCctggaaattaggaggtctgggttcaagt
-tctagctGGGCGATCCTTTCTGTTCCTTGGTTTCTCCAGTTGAGCTGTGAGGCATTTGTG
-GTCTCTAGGGAGGTTCTAGGACAGGAAAGGAGTACTCCAGGCTGTGGAGGGGGCCTATGT
-AGGAAGAAGGGAGCTGGGGCCTTCCCTTTGGCCTTCTGGCGTTTGAAAATAGCCTAGCTC
-AGCCCCTAGCTTGGGCCCCTACCCTCCCTGGGGTGCCAAGCTGGAGCCAGGGGGCTCTGT
-CTGGAGCCTGCCAGCCTGGTGCCGGGCTGGGATCAAGGCCACCTGACAGCTGGGCCAGGC
-AGTCCTGGAAGGTTCTTAAGGGCAAACAGGGCATGCTGGATGTCCCAGACCTCCCTCCCC
-ACCTATTGTCCCTCCTCCCTCAGTGTCCACCGGCAGGATAAATCCCTTCATCCTCTACAG
-GCCTGCAGCCCTTGCAGCTTGCAAATCTTTTTCTTGGTTTGTTTCTAATTTCACCCCTGC
-TCAGTAGctactttactggtgaggacactgaggctcagagatgacaactgcctcactgag
-gttacgttgcagttatgattcaggcccaagtctTGCCCAGCCCTGTCCTGTCACCGCGTG
-CACgtgtgtgtgtttgtgtttgtgtgtgtgtgtgtgtgtgtgtgtgGTCTCACTATCAAA
-CAGTGCCCTCCCTTAACCACCAGTGCCCCGGGTCTCTGATAAGATGtgatgactatgagc
-acctggagccaggtggcctgggttcaaatcccacctttgctacttctatactgtgtgGAT
-TGCTGGGCCACCCCCACCTCAGTGTCTGCTAATAGGACAAATCCCTTAATCCTGGGCACT
-GGGGCACTATCAGGACTAGCATTGTATACATTGCACAGGTTTTAAAAAATGTAATCTGTA
-ggctgggcacagtggcttacacctgtaatcccagcattttgggaggcccaggtgggtgga
-tcatgaggtcaggagctcaagaccagcctggccaacatggtgaaaccccgtcactactaa
-aaatccaaaaattcaccaggcatggtggcgggcacctgtagtcccagctactcgggaggc
-tgaggcaggagaatcgcttgagcccagaagctgaggttgcactgagccgagattgtgcca
-ctgctctccagcctgggcaatagagcaagactccgtctcaaaaaaaaGGTAATTTGTTGT
-CAATATTTACACATCTAAACCATTGGAAGAATAATGTATATATAAACTAGCTAATGAACA
-CCTACCAAGCCCCAAGCACCAACTGTATGTCCAGTACAGAGCCAGCTGCTCCAGGGGAGT
-TCGTTCCTGGGAGGGGGCATCATGATGAAGTGGGCGTGGTTCCCATTTCCTCCAGCGTAG
-TCTCAGAAGCGGGAAGCCATGTGACTGAGGTTACAGCCAGGGAGGGCAGAGGCCCCCGGC
-ACTCACCCCTCTGGGGTCCAAGCCCCGCTGGCATGTGTTGTGTCCCTGGGTAGGTGTGTC
-ACTCCCTGTCTGTGTCTCCAGTGTTCCTGTTGGCAAATCAGGGGTGGGACGGAGGTAAAT
-GGAGAGGCCCTGCCCAGTCTGCTGTAATCCAGGATCTCGGACTTAGTGGGGCCAAAGCTT
-CCAAGTTCTCCTGATTAGTGAGGCTGCAAAAAATGTTTGGCATGTTATTCTCTCACCGTT
-TAAATGTGGGCAAGTAACAACTTACATGTAAAATTACCCCCATATACCAAGCATTTaagt
-tatttattatatcattgcttacaatagcaaataattggaaattatttgagaaatggctaa
-agaaactcaggcccaggtacgcaagggaatcctaggcagccctcaaaagatgtcctgcaa
-acacctgatgtggaatcacaagatacacaacacaggtcagtgaacaaaacaagttgtggc
-atgatacccacagtgtgctgctgcttgtggaagcaggaaCACATGTCCATGTACTCTTGT
-ACTGGCACAGAACCCTGGAGAATTATCCTGGGAACCCTGCATGCTGGCTGCCCCTGGGGA
-GGGGAACCCGAGGGTTGGGCTCAAGGGTGGGAGGCAAGACTCACTACTTTGCACACCTTT
-TGAATTTTGAATCATGTGAATGTGTTATCTGTGCAGAAAAAATAAAAATACATTTAAAGT
-AAAGTGAAAGTAGACAAGAAACCTGAAACAGAGACGGACAAGCAAGCCTGCAGGCCCAGC
-CAGCTACCGCCCCCGGGCAACCTCATGCCACACTGTGGGCTCTGCCCAGCTTGGTTTTGT
-GGCTCCACCCTCTACGGTCATATTTGGGTTTCCACACACACAGCACCCAAAGGAAATCCC
-AGCTAACGCACATCAGGTTCTGGGCTGGGCCACCCGCCAAGGTGGTTGGTGGGCATGACA
-CCGCCCCGGGAATGGCGTCGTCCAAATGCCTGAGCAATGACACGGCCTCAGATGGAATGA
-TGCCACTGCCCACAGTCTCACAGGCCCTCCCATCTCGCCTTTGTTCTGCAGCCTCCAGGT
-GGGTGTATGGACACTCCAAAACAGCCATCCCTGTCAATGAATCAGCCTGCAGGGACTGAA
-TTCattccttcattcatcaatatccattgagcacctactgtgtgccaaacactcttctag
-gaactgaagatgcaacagaaaacaaaacagataaaaatccctgccctcgaggagctgaca
-ttccagaggggacacagacaatacttgccagagtgaaaatgctaaggagaaaaatgaagc
-agggaaggatgggGAACTAGAGATTTTTTTTCCtttttttattgaggttgaattgataaa
-caataaaattggcccattttaggtgtacagttggatgcattttgacagttgtatggcact
-acagacaagtgctagaattcctgtatcatcccaccatgttccttcacgccccccacagtc
-agcccctgactcccacccgctcccacccgaagaaactacagatcagttttctttcactgt
-agatcagctttgtctttcccagagttcatgcaaatggaatctggcttctctcagtcagca
-tcatggacttggttgagattcgcccgtgttgctgagtgtatctgtagcttgttccttttt
-actgacgagtagtattccacagtgtggatgcactgtattttgtttattcatccaacttgt
-tgacggacatacaggttgttcccatttcttggctattacaaataaagctactataaacat
-ttgtgaacaactctttgtgtggatgcatattttcatttctcttgggtaactaccacggag
-tggaattgctggacctcgtggtaagggtagctttaTTAGAAGCAGATCTCATGCttttaa
-acaggatggtcagataaggtgtcaccggctcggtgatatttcaggagaggccagaaggag
-gtaaggggtgtctgcagggaagagtgttctgggctgaggaaacagagtcagtatgtgcct
-ggagtgtttgaggaacagcatggaggccatcaaggagggagtgaaggacgtgaggggaga
-gggctaggaggtgtgctccatgtggaatgaggctagatggtatagggtcacatacatcat
-ggtgaggacattggtatttttttcttttgacatggagtctcgctctgtcacccaggctgg
-agtgcagtgacacaatctcggctcactgcaacctccgcctcctgcattaaagtaattccc
-cggcttagcctcccaagtagctgggactacaggcacgtgcccccacgcccattttatatt
-tttgtagagatggggttttgccatgttgtccaggctggtctcaaatgcctgacgtcaggt
-gatccgcccacctcagcctcctgaagtgttgggattacaggtgagagccactgcacctgg
-ctgaggacattggtttttcctctgagaacccgtgggaggaatctgagcagaggtgggaca
-ggatcagacttgcattttaacaccttcccccatctccagctaccaagtggagaatgggct
-gcagggctgcagggaggaggctactgtaatagtcctggcaggagatgaaggagttggact
-ggggtggaggcggtgggggctgaggggtgtgggattctggatctttctggatctaccccg
-aatgtggagccaacaggggatgtattggacgtgggatgtggggaaagtagggacatgaaa
-gaaggctAGGACCCAAggtgacctctaggaactgagagtggccctccagctcccagctgg
-caaggaaacatgcatctcagaccggcaaccacaagaagttgaactgtgctgacaaccaaa
-ggaacttagagtggaccctgagccgcacaaaggatcacagcctagctgacacggtgattt
-cagcctggtgagacctaagcagagaagccaatcatttcatgccaggacttctgacctgca
-gaaactgtaagaaaataaatgggtgctaagtcactaagtttgtgataatttgttatgtag
-caatagatgactgatacGGGCATACtagaatcctacagtgtgagagctaaaagagtgctt
-agcaaccactaagcccaccccccccatgtacatatggggaaactgaggctcagagagcac
-agaggacttgAGGCGTGGTTCCTGAAGGGAGGCGACATCAGGCAGAAACTGTCCCAGCTC
-TGGAGGTGTCGCGAGTCCCAGCCTCTCCTCTCTTAGGAGGCTGTAGTACCTGCCCCTCTG
-CCAACCCCTGCTCATCAGGACTCCCAGAGAGCCAGCTCCTGGCTACCCACTATCTACCCT
-CGGCTCCCCAAGCAGCGAGTTCAGGCAGGCTCCCCACTGGTGCAGGCCCTCACCCCCACA
-GCAGAGCATGGGCCAAGGGTGCACGAGCCAGGCCTGAATCTGAGACCCCAGGGAAGagag
-gaaaaatcacaaccttgggcctggctagaatcccaactctgccactcaccagctatgtga
-ccctggttgagggactcccctttgctgagctgcagtgtccacatgtataagatgggagta
-gggatgctttcctccaatggtcaatgagctaatgaaggtgaaactcttggcGGGAGCACT
-GTAAATGCATGTATCCAACCTcttcctctgcatgggcctcagcttccccatctgctaaag
-ggtcttgtgttcttgatgtgtttgggggggcccttgcagctctaactatatgaggattca
-aattccggctctgcttctcactagctgtgtgaccttgaatatgttactcaagctctctga
-gtcccagttttctcacccataaaacggggctattaataatacctcctattacaggagaga
-tgcaggtcagatacctagtagagtgactgAGAAAATGTTAGCTAGTTGTGTTATCATCAT
-GATCACCATTTCTAGTGTGTGAGTTTGGTTGTGCCTGCTGGAAGGGGCAACAGGGCCGAG
-CCTCCCAGGGTGAGAAAGTTTGGTTTTCTTAGAGACAGACGTTTGTAGGCTGAGCAAGGC
-ATGCGTGCATTTCTGGGAAAACAAAATTAGTTCATTTCCCTCCAAATCCCTGCCTGTGCA
-ACCACCTAAAGCCAGGCTCTGAGTATCACAGTGCTTATAAGTGGTAAACCCACAGGCAGG
-TTTGTGAAAATGAAAATATGCATTTATTTCTGTTCCCAGTTCTGAGAACTACTTCCTGTT
-TCCCTCTAGAGGAAGGCAATGGCTTGTGCACATGCCTGGAGGTGGGAATGTGTGTCATGG
-ACACAAACTGGGGTGGTTATCACTGTGATGTTCCCACTGGCCATGTCTGAATTGTGCACG
-CAATCCTCTGACCATAGCTGATTCACTGGTGTTAACAGACACCTGACGGCAGGCTGGGCA
-CTCAACAGTCTCTATTGGAAATTTGAAACTTGAATGGGGCACACAGACAGAGAGTGGCTG
-GAGATGCATCATTCCTGGCCAGCACCCTAGAGAGGAAAGCCACAGGCCCTGCCCCTGAGC
-TCCCCAGAGATGCCTTTTCCTGTTCTTCCCACAAGAGTACTCGTTTTGGGGGTTTGCTCT
-TCCCTCATCCTGGAAATGCCTTTCAATAAATCCACTGCTGGGCTCCTTGGTTAGTCAGTT
-TTTCGGTGTTTGCCACCCAGTTCACCTTGGCCAATGTGGTGACTAGGGAGACAGCACTGC
-TGGGGGTTAAGGGGAGACTGTGCAATGGAGCAGTGGCCCTCTgtggagtagttctgggca
-gaaagagcactggacccagagtctggttcttcatgatgtactgccatgtgaccttgggca
-aatcacttaacttctctgTCTGGGATGGAACCAGGGGGCACCTTAGTAAGcagatgggga
-cactaaggatcagagagaggaaaggctttacttaaagccacacaacaggtttaggacaga
-cccgggagagctgggccctgcaaatcccagcccTCAGAGGGAAAATTTCCTGGGTTAGGA
-AGCTTATTTCTAATTATCACCAGGACCTGTTTACCCCAGGTGAACAGGGTCCCCAGGCAC
-TTGGCAGATCACAGATTTCTTTCCCAACCAATTGTCACATTTGGCCTTGGCAACAGCATC
-AATGGCCCAGGAGGGGGCtgagtaaactgagcccagagagggacagagtcttgtgcaggg
-tcataccacaagttcatggcagaactagagtctgggccagatctAAAAAAGTGTTGCTTT
-TTGCTCTAAATTTAAGGAGGGTGAATTGGGGGTAGTGGCTAATGAGTTCTCCAGAGGAAT
-TTTTAAACTGTTTGCTTTCATTTTGATGATAATCCTAAACATGTAACTCAAGCATATCAT
-GAATCATCTGCAGAGCCACAGGTAAGTCCTGCCTGAGCTTGCGTTTGGACTTGGGATCAC
-ACTGGCAGCAaataatagcatttgttgagaactaactatggcccaggcactacgctttgc
-attttttatctattttttaaaattttatttaatcctcacaacaaccctataagataaatg
-ccatcagcatccccatttcacagatcaggcagtcaaggtgcagagaggttaaggttaagt
-aacttgaagcaatgttaacagcgagCCTGTGATCTTGCCCACTACACTTTACCATTGTAA
-TCGGAGGAGAAAATGGCAGAGGTGGCTTTGATATGTAAAGATGAATTCCTGCTAAGTGAA
-GGCCAGTGATGCAGAAGTACAGGGTGGGGAGAAATTTCACCATGGGTGAAATGGTGCCAA
-ATGGTGGGAGAACAAAGCCATCATCAGCATGCAGAGTTGGGTGGAAGTGCGTGACAAACC
-CAAACAAAATGGCATCGCAATTGAGTGTCCCACATTCACACTGCTGGTGGCAACTCTGGT
-TTAGCAAAGCAACATCAACCATATCATTAATTAATTAATATTGTTGCATTGATGATATGG
-cagcatagcttaatgcttagggatgcaggcttaaaactcataatttctgacttcaaatgt
-gttttcctcttggcctagtcctcagactatgggcaaatcactcaacctctctaagcctca
-gttttgttcatctttaaaatggaattgtaatagcacctGATagactgctgattgcctatg
-caattcccttcttttcctgttttttgttgaccaaaccctgattttattcccgatggtgat
-atatctagctaagtaagactttattcccagcctctcttacagctactggtggccagcgag
-tggaagttattcagtgagagacttctgaggactatccctagagggggccaatgcatctgg
-gaggaaagcccatatactcttctttctccttcttcctatatggaactcaggcattatggc
-agcagccccagcagccatctaggatcaagaagtgaccttcaggatgaagacacatgataa
-ggatgaagcaacatgaggctggaaggaacctgaaacattgatgataccatagagactgca
-gcagccctgggctgactcttccctgacttttttttttttttttttttttttttaagtcag
-ccttttattttaggacaattttagatgtaagaatcattgcaaagatagtacagagagtgc
-ctgcataccccacacccagtttctcctattattaacatcttataggccaggcgaggtggc
-ttacacctgtaatcccagcactttgggagtccaaggtaggaggatcacttaaggccaaga
-gtttgagaccagcctgggcaacagagcaaggccctcttcctacaaaaataaaaataaaaa
-attgagctgggtgtcatggcataccagtagtcctagttactcaggaggctgaggtggaag
-gattacttgagcccaggagtttggggcttcagtgagctatgatcacaccactgtactcca
-gtgtgggtgacagagcaagaccctgtctgtaaaaaaacccgaaaaccaaaaccagaaaat
-cttatattagggtatgatacatattaaaaccaaaaaatcttatattagggcatggtacat
-atgtcacaatgaatgagccatactgtcattattaactgaaaagcccatacttcattcaga
-tttcctcagtttctccctaataccccttttctgttccaggatcccatccaggctcccaca
-ttacatttagttgtgtctccttaggctccacctggttgtgacggtttcaaagactttcct
-tgtttttgatgaacctcatagttttgaggacaactggtcaggtattttgtaacatgttcc
-tcaatagggatttttctggtgattttcttgtgattagacaggggtgatgtgtttagggag
-gaagaccgcagaggtgaagtgtcaatgtcatcgcttcagatggggggacattctatcaat
-acgacttctcactgtggatgttgaccttgattgctggcacgtttctccactgcaaaatca
-ctgtttctgtcctccattcaacgccatactctttggaagaaagtcactccatgcagcccg
-tgcttaaggagtgggagttatgttccacctcctggagggtgacgcacttaAGCTACTTAA
-GCTAATAAGTATTTTTTATGTAGCAAAAGCTAACAGATAAACAAACCCTTTTGTTTCGTA
-GATCTATGTTATTTGGGTTTTCTATTACATGCAGTCAAACCCAATTTTAAATGGATGCAG
-AATTTATTTCTCAGGGAGGTTGTGATAATTGAATCAGAGAGGCAGGGACAGTACCTACAG
-CAGTGTTTGGGTGAATAAACAGTAACAATAATCATCGTTggccaggtgtggtggctcatg
-cctataatcccagccctttgggaggccaaagccagtggactacttgagcccaggagtttg
-agaccagcctgggcaacttggcaaaaccctgtctctacaaaaaatacaaaagttacctgg
-gcatggtggcacatgtctctagtcccagctacttgggaggctgaggtgggaggatctatt
-gagcctggaaggcagaggttacagtgagctatgattgcatcactgcactccagcctgggt
-gacagagtgagaatctgtctcaaaaaaaaaaaTCATGattattaataacttaattataaa
-taataataattattattagttttataGTGCATTAGTATTTGATTGATAATTTTGTTTCAG
-TCTTTTTAGTTGTTTGGGAACTATAAGCCTAAGGAGTTGATAGCTCACTTCATGAATGCA
-CACAAATAAGTAGTTTACCgtcaatgccctcctaagggcctaagatcaacaggaatgcac
-ctgtagttaaacaagtggttctattactcactgggacaagaaagtgcacagcatggggaa
-ccttggaatgtcttagtgagagtgttagaaaaggcttattataggattggtctcgtgtta
-ggtgacttgaatagggtttgaggatgtggggtttttcttcagattggatgctctcaggaa
-gtgagggtaattatgcagttgcgatcttaacaagtcttgtctatagagaaggcagactct
-ggcaaggctaatgctgtcattgggaaagaagcagcggtcacttgtattagctgggactga
-ggggtgtttggtcattttcgtggcttggaaatgtgcatgatttgtctttgttcagacatg
-attacagagtgttccacttttcgtcttgattcatcaatcactgaggacctcatctgatgt
-tggtgttctggggaatcattaacattggacaggacataagctgttctctgtgcatgttgg
-gctgacttgcagcaacacccagtcctagctgatgactatccaggatggcccctggatgtc
-agggctgctttcctctttctcaATTTCAGTCAACATTAGTGGGTCTGAGAGGATCCCTTC
-CTCCTTTTAAAGCTCTCCATATATTAAGTTGGAGCAACAAGCTCATTCCTGCTCAAACTG
-GGCAGGCATTTTTAGATTCTTTTCTGCTCCCAGAAGTTTTCCTTTCCCATTATTTGGTCT
-TGAGCTGGTCTCAGGAAGAAGTAATGAAGGTGAGAGATCTGCAGTGGGATCCTGGGAAAG
-GTGGCACATGTGGATCACTGAGGCCTGGGCTCGGATGGTGAGGATTTGAAGATTCCCAAA
-GGCCACACCTAAGGGTCACCAGAGGGTgtccagcccccattatccagatgggggaactga
-gacccaggagggaagGGCTCTGTGTTGGGTCCCAAGGTGTGCCATTCCAATTATCAACTG
-CCCTCCCTTACCTGACTGGCAGAGTCCCTTTCTTCCAGTTTGACGGAAAATACTGTTTGG
-CTCTTTTTTTGTGGGATGGAGTGTAGAAATTGGGGAAAAGAAGAAAATATAAAATCTTAC
-ATTAAGCATCCTAAGCCAATTCATGTGGTCGAAGAagcagaaaagcagcagaaaagcagc
-agaaTGCGATGCCAAACACATCCTCTGTAGGCACGTGTGTTATACCAGGTTGCTGCGAGG
-GCCCAGAGGACACATCTGTTGTAGCTGAATAAGTTCCAGTGTTGAACCTCAGCACACACA
-TGCGCATCTGGGCACCTGTGCACAGAGCTTGTATGCACAGAGCAGGAACACATGCATGCT
-ACAAAAGGATCAAGAGTCAAACTCCAAACTGGCTGCCCTTATTGATAACTTCCAGCTGAT
-GGAAGGTGGAAAGGCGAAGGTAGATGTGTTTTGGATATAAAAGGTctgtcttctctgttt
-actgtctatgtgaccttgagcaaattgattgacctctctaagactcagttttctgcaata
-taatatggTTCTCTTCTCTCAGAGTAAGGATGGAGTTCAGTGAGGAAACAGAAATGTAAG
-CATtgcatcattcggaatgctctgggctgcaagtaacagaacaccaactccactggctta
-aatgaaaaagaaattgatcatctAGAGACAGGACTCAGGACCTCAATGATGTCAGTAAAG
-CTCCAGGCCCCTTCTGACCCTCCACTCAACCACTCACTCTCCCACCTCCCTGTCAGATTG
-GTCCCAAATGTGGTTCTCCTGGTGGTCCACACTGGAGTAGCATCCATGCTGTGTAGTGTC
-TTCTCCATCAACAGAAGAGAGAATCTTTGTttttcttttctttcttctttcttttttttt
-tagacagagtcttgctctgtcttctaggctggagtgcagtggtgcgatctcagctcacta
-taacctctgcctcctgtattcaagcaattcttgtgcttcagtctcccaagtagctgggat
-tatgggtgcctgccaccactcctggctgatttttgtatttttagtagagacagggtttca
-tcgtgttgaccaggctggtctcaaactcctgacctcaggtgatccacccgcctcagcctc
-ccaaagtgctgagattacaggcatgagccaccacgcccagccAGCAGAAGAGGTAACTTT
-TCTGTATCCCTGAAACGCTAAGTCTTCCTCTTTAGTATGAGTGAACTAATTGAAGTCACA
-TGACCAGCCCTGGCAGTAGGAACCATGGCCAGGGGAATATCATGTGCTGACTGGCTGCAG
-TTTTGGTCCCTGAACACATCAGTGGCTGGGGGACCCCTTCAGACTAAAGGACCTAGCCCT
-GCAGCTGGGGACTGATATTAGGAAGGGAAAGGGAAAGGGCATGATTCATGTCCCTCACTG
-CTCAGGGTCTTGCTGTGTAGCATCTCTTCTGAGATGTGGGTCAGACAGGGTGTTGGCCAT
-CGCTAGAAAGGACCCCTCCTACAAGGACAAGACTTGAACAGGGATCCTGAAGACTTCTGG
-GGTTTCTATCTAGAGTCCAAATGGGTCTCTAGAGTCAGCCTGTTGACAGGCTGAGTTGAG
-TGGCAGCATCTCTAGTGGATCTGGCTCTCTGCCTGTGACCACTTGTGTGCATGAGCAAGT
-GCCTCACAGACCTGCATGTGTACATGGAAGATGTATTTTTACCTCCATGTTTGCGTCTGT
-AGCAACAAGTATGAAATGCACATACATGTTCATGCACATGTCAATGTACGTGGCTACCAC
-ACAGTAGGTATACTGTACAGTGTAACCATACAGTGTTTCAAATAtgcatatatgttcata
-tatgtgcatatatgCAATATCTGGATAGATGTATATGGCATAATGGCATATTTATATATT
-AATAAATCAATCATTTTAGAGTATTAACTATATATGAGTTATATTATGCCTAAGATATAT
-Taataaaaacaatgtttgtcaagtacttgctatatgccaggtactattctaagcacatat
-gttctaaattaATATATGTATTACTTTAAGGATACATAACCTAGTGTCTTTTTGGGGTCC
-ATGGATGAAGTGTATCTTCACTCACCTTTAATTAAATTCGGTTGTTTCATTCTTCATTTG
-TGAATGTAGGGCATTCACAAATTCACaaattcattctttcaattgtgaatgtagggcaca
-agccacagtagtgtcaggagtgcctggaactttgtcaccattagaaatcatagctatttt
-tgtatcttgttataatgattatagatatctcaaaatattaacagtcatcatttgttttga
-cctaccactgatcttgttatttaatgtattagcaaagaagcatatatagtacaatatcaa
-aactgtgttctttaaAAAAAAAAAAAGTATATATATATATAtgtatatgtgtgtgtgtgt
-gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgatgaagtcttgctatgttgcccaaggt
-ggccttgaccccctgggctcaagtgatcctctcacttcagcctcccaagtaactgggacC
-CAGCTTAAAATATTTTGATGACAGTATATATATAttttttgagacagagtctcgctctgt
-cacccaggctggagtgcagtggcacaatctcagttcactgcaagctctgcctcctgggtt
-catgccattctcctgcctcagcctcccgagtagctgggactacagttgcccgccaccatg
-cctggctaacctttttttgtatttttactagagacggggtttcaccgtgttagccaggat
-ggtctcgatctcctgacctcgtgatccgcccgcctcggtctcctaaattgctgggattat
-aggcgtgagccaccgcgcccggccAatgactgtgtttttaatataatttgtttcattcat
-aatccaatgcatttaattttattttaagcatgtgaagacaccattctgaggaggggtcca
-tggcttcaccagatgccaaagacgcccatgccacagcaaagAAAaattcattgatcaatc
-cttcaatgaccccatgaagcagcagtgttaccagtttgctacagaggggaacctgaggca
-cagggaggttgtgcaacttgtttaaggtcacatagatatcgagtggTTGTGCATTATTAT
-ATCTGTCAGTTGTTTTTATAGCCTATGGGCTGATGTGGGCTTGTCCTTTGTGTCACATCA
-GAAAGCAAGTCTGGTCAATTATTTTCTTTCTCAAGGTTAAGTGAGATCAAGAAAAATAAT
-ACACATATATTGCATGGATTATTTGTGGTCATCATTTGCTAATCCTTATACCTGTGCCAT
-GTTGGATTAATTATTACAGCTTTGTGAGCTGCTTTATTAAGGAGGGGAAGTAGAGTGAAC
-AAATCATGGCAAGTCACTTCACCTCATCTTCTCATTTAAGGATGCTGATACTGGTGTTGC
-CAAGGCGACGCTGTCAGCTTTCGGAAGCATCTTTAAATGGGAGAGGCGAAGGCCCACACA
-GATCGAGGCGGAGGAAAACTCAGAAAAAAGGCTCAAATCCCTCGGCCGCAGAGACAAACC
-ATCCTGGTGGGGACCATCCCTCACCCCCCGCACATGGCCACTTTCTACCTCACCTGTGGT
-GGTTGTCTCTGGGGTGTACTCAGGGAACTCTCTCCCCAGTGTGGAAACTGCCTTTGCTGG
-GAACAACGCAGAGATCTCAGAAATGATGGATCCATCAAGTGCCAGTGGGAGAGACTGAGT
-GGTCTTGGAGGCCTTTCCAGGAAGTTCCTCCTGCCCTTGGTACACGAGTTTGGTGGTAGA
-TGCCCAGATGCCCAGAGTGCTCTGGGAGAGGAAGGCAGCTCACAAATGCAAATGCGCTGG
-AGGTGGTGCTtggctgtgctgccttggatgagaccctttccctctctgagccctaatttc
-ttttttctttttctttttcttttttttttttttttttgagacagagtctggttctatcgc
-ccaggctggagtgcagtgacaagatgtcggctcagtgcaacctccgcctcccggttcaag
-caattcttctgcctcaggctcctgaggagctggggctacaggcatgtgtcaccatgccca
-gctagtttttgtatctttagtagagatggggtttcaccatgttgcccagggtggtcttga
-acttctgagctcaggcaacccaccagccttggcctcccaaagtgctaggattacagacta
-ggagccactgtgcccggTGCCTAATTTCTTCATCACTGAAATGGGAAGAAAACTAACCTG
-GTGCAGGGAGAGGTGACAAGTGTTTTCCATAGGAACCCGCAGATGCAGGTATCCTAGAGG
-CTGGCACCTATGAGCTGTGGCCCCCAGGAGACCCAGTCTAGGCTCGAGACCACACCAGCC
-GTGCCCTCTACAGTGCCTTGTGCTGCCCAGGATCCTCAGGTTGGTCTTGTCTGCAGCCAT
-TGTGAGTCAGCCTCACTGTCAGAAGGGCTTTCAGAGGTTGCTAGGTGCTCTGTCCATGGG
-AAACTGAGGTTCAGAGAGGGCCAGGGGCTCTGATCCAATGGCAGAGCCAGACTGATAACA
-GGGTCTAATATTCCTGGGCAGGACACAGCTGTGCCCTTGATAGTCAGAGGCAATCTGGGA
-TGAACTGGATCCTGGGGTCAGGACCTGGGGACAGGGAGGCCGAGAGAGGGCACAGAGGTG
-GAGAGAAGAGAGATGAGAGCCAGGGACAGGGAACGAGGGAAGGCTGCCTAGCATCCCTGT
-TTCCTGAAGTCAtgacttgggtgtcactgaccccactgctggtgccaggcatgatcatga
-gaccgaggtctggtcaagcagagtaagagtgataagcatagggatggacacaagaccaat
-cctggctgcagaaaatcattcctttactggaatcatggagacgagggagctccccgggtc
-agggatgctgagctgggaggacatgagcctggggctgccagagccttcttgtgaggaaag
-atcctggctgagaatgaagtcaacggggcagatggaggggctgagaggtggagctgacat
-catttgagcctctggatctaacctcacttgcctttacccttagactttccagttatgtga
-gtcaatttattccttAGGGCTAGAATTTCTATCCCTTATACCTGAGTCCTGGCATGGAAG
-AGGAAGGAAGGTAAGAAAGAAGGATGAATATTTAAGAACAGGTGTCTGAggctgggtatg
-gtggctcatgcctgtaatcccagcactttgggaggctgaggcaggtggatcacatgaggc
-caggagtttgagaccagcctggccaacatggtgaaaacccgtttctactaaaaatacaaa
-agttttccgggcgtggtggtaggcgtctgtaatcccattactcaggaggctgaggtagga
-gaatcacttgaaccaggaggcagagattgcagtgatctgagatcatgccactgcactcca
-gcctgggtgacagagtgagactctgtctcaaaaaaataaaataaaaTTACATAAAGAACA
-GGTGTCTGAGGATAACTCAAATCAGCTTCCTGCCCCCTTATAAAATGGGAGTAGAGAGGG
-ACTTGGGCCTTCAACCCACCCAGAGGAGTTCTGTCCCTGGGCCTCACAGCTTTGCCCTGT
-CTCCTCTCTAGCTTGCAGTCAGCCTAGAAACTACAATAGAAAAATAAATGATGTGGATAC
-AAAAATAAAATGCCTTTTCCTCACCTGAGTGCAGGAGAAGGGGCGGCATGTGCTGGGGAA
-TGCCTTCCTCACCCCATTCTCCTCTTTGaggacaaacatttattaggcacctgcttcatg
-ccaggctctattaagaagatgacatacatggtctcatttcctccttgccatagcccagcc
-aggaaggaatattatcatctccattttacagatgggaaaactgaggctttgatgatgtga
-agataactggtgccttgagaggctgagccactggaccaaagtgtcagagctggagcaggt
-ttgtccgactccaaagccctgcccaccacaccacactgcACACAGTAGAGGCTAAATAAA
-GGTCTGCTGGGCAAATGCTGCTTAAGGCGATTTGAGCTCTCTGGGCAGCAATCTGCCCCT
-AAAGATTTCCCATCATGCCTGAAATGCCACCATTAGCAACCATGTCCTTTGAGTCTTGAA
-GGGGAAGAGTGCTAATTCCCAGGAATGAGATCAAAGTCAGTCTGTGCTGGGTTTACTCAG
-GGATCGGCTGAGAGTGGGACTCAGGGCTGGGGCGAGCCAGGGGGATGAAGGGGTCCCATT
-CCCATTGGCTCAGTCTCATCCAGGAGAAAACCTTCTGAGGACAGAGGTGTATCCTGGCGG
-TAGGGCAGGTGGGCTCCTGGCTATGCCTGGGTGTTGGCTGATGACAACAGGGCAGACAGC
-ATGACACAGTGATGGGGGCAGGTGACAGAGTAGCTGTGGATCCTTTCTGACTCCATCCTC
-TGAAAGAAGCTATGAGGGCCCTGGTCTCCCAAACTCAGGCAGAGGCCTTATCTCCTCCCC
-TGCAGCTCCCCACCTACCACCACAGAGGCAGCATCACTGCTGGATGGGGAAGGGAGGGAG
-GCTAGGGGTTAGGGCTTGGAGGCAGAGAGGATCTGGACTTGGAGACAGATGTCCTGCCTA
-ACAGTCCCTGTAATTGAGCCTGGGGGAGTTGAGGTTACAGGGAGTCCTAAGGGAAGCCAC
-CCAGGTAGAGATCAGCTTCCTGGGACTTGAAGGAGCCTTGGAGGACATGAGCCTATAACA
-CAGACAGGGACCTAGTTCTAGACCCTTCTTCAGGGATGGTATCTGTTTTAACTGAAAGGT
-TATTTCCAGTTGTTTTTAGAGGTTGTTTGAGGCTGTCACTGTGGCCCTTGTAGCCAAAAA
-GGGTGAGTATAGCTGGGGTGGGGATGGGGTCGTAGGGCTCCTCCTTATGCCAGGGGAGCA
-CTAGCTTTGTCCAAGAGCATCTACAGTCCTGTGAGATGCTCTGGGACAAACCGAGCCCAT
-TTTCAAATaagtaaatttggagaaagctgcccactctagccccttcatgggtagtcacaa
-ggcacttggccatattaaaggctctgatcagtcctgcagtgaagagtgcctgttcacttt
-gacttaacctgctgtttccTTTTCTCATTGCTCATAGGTACTTTTAGAGACAAGCCATAG
-TTATTCCCTGTGACACATCCTCTAGGACATGCTGGAGGTGAAGGAGCATGTCCTTTTGGG
-TCTCCTAAAGACCCTGAGCTCCAAACATTGGAGCCTAGAAGTGGTGAAGTGGTAAAGCCT
-AGAAGTGGTGAAGTCTAAAGACCCTGAGATCTAGGGTCATTAGAACCTAGAAGTGGTGAA
-GTGTGAAGGGGAAATAATGATTAACCCACCCACTAAGGGGTGGATGCAGCCCCTTCAGAC
-TTGAAAAGAAAGTTCAAGGACATCTCAAGACTAGAAAATCTTGGAACAGGAGCTTAGAAT
-GGGAGATGGCCTTCTTGCCAATCCAAGGGAGAGAACCTGGGCCATCTGGGCAGCTTCCGA
-TGTGCAAATACATTCCCACCTGCCTGCAACCCCACCATTGGTCATGGGAATCAAGTTTGG
-TCTGTTCTCAGCCCATTCAAGGTACTGTGACCCTCAGGCAGGGAGCCCCTGAAGGGGGAG
-GGAGAGAAGAGGGGCGAGGACTACATCAGAGGGATGGGCCCCGAACACCCTCCATGTCAC
-AGACGGAGGGGAGTTGGGGGGCAGATGACCCTTCTGGACTTCTGGGTCAAGGAGGGCTGG
-CTCAGGAAGCCCAGGGTGTCAGGGAAGGCGGTGGCACAGTGTCTTGCATCTGGGTCCAGG
-TTGTCCAGGAGTGCCAAGTCCGAGCTTCTCCTGTGTGGTCCAGCCTCTGGCACAGCTGCT
-CGTTAGATGTCCAAAGGCCGTATCATCATGCGAGAGGCACGCAGTGAGTAGCTGGGGCCC
-TTGAAGTAGTGCCAGCGGATGCCGTCCATCTTGTACTTGTTGTCGGGAGCGTGGTAGTAG
-ACGCCGTTGAGGTTTGACAGGCCACAGGCGTCAAACCACCACCCTGGTGGAAGAGGGAGG
-ACAGGCGCTTGGTGGAGGTGGGAGCCCAGCCAGTGGCAAGAGGGCAGCCCCTGTGTCCCA
-AAGAGAACAAAGACTAATCGGGGCTGTTGCCTCCTCTGGGAAGCCAGCTggctggggatg
-gggctgggtgggagtgggggtggggTGGACAACAGACCCTCTGCTCAGCCGGGGCCTCTA
-GAGGGCAGCAAGGGGCTCTGGCCACTCCTCGAGCCCCCTTGCTCCTCCCGGCCTTCTCCC
-TGAGCCCTTGGCGTCCCTGTCTTCCTCCCTCACTGAACCTGTCTTTCCAGCTCCCCAACC
-TCCCCTCATCGCTCTGCTCACTGCTTTCTAGTGgtctctgtcactctctctgagtctctc
-actctccaggttcatctctttctctcttatggtctctgtgcgtgggtctgtctctgtgtg
-tcccattgtgttcatctttctctgatggtctttgtccctctctgcctttcgtgtctctgg
-ccctCCCTTCCTCTGGGCCCCCATCTTTCACATGCTGTGTTTGTCTCCCGGCCTCTCCTT
-GGGCTAAGTCTTTCTCCCCCATCTCCCTCTGTACTTCTCTGCCCCAGTATAGCTCTCCAT
-CTGCTGCTCAATGACTCTGACAGCCTTGGtgtctctctctttctccatctgtcctctgtg
-tctcagaaggtctctccccctgtctctgttcttcttactttgtctctgtctcCCATTCAC
-CCCACTTCCTGTTCTCTGACCTCTGTGCCTACCAAGGAACACTGCCTGAGCCACAGCTGG
-TGTGGAGCTGCCCCTCTGCCTCCCTCTGGTCTCCTGATCCTGGTTCGGCTTGCCTGGGGT
-TGGGACTGATAGGGTATAGGGTGCCTCCCCCCCGGGGCCCTGCACTCAGTGTTTCTTTAG
-CCTTGTCTCTGAGGAAAACTGGTGGTGCCAGCTTTAGGAGGAGGTGAGACCTGGAGGGGA
-CTTCAAGGACTCAATGGGGGAAGGCACCGAAGGGGCACAGCCAGGTGAGCTTATGGGTGG
-GCAAGGCCCAGACCTGCACCCATCCTCCTGACAGCACCTGGGCGCACAAGAACCTGGGGA
-GGGAATGGGAGTGTCAATCTGGGTGAGCCTGTGGGTGGGCGGAGCTTCACCCCACCCTGC
-ACCTACCTCCAGACATCACTTGGGCACACTTGCAGAGACAGTGGTCGTTGTCTGAGTCAA
-GGGTGCTAAAGCTGGTGTTCTGCAGGACCAGGCTGCTCTGGCGCCCTGCTGAGCCGCTGT
-ACCCGACCACAGAAAGCCTGGAGGCCACCCAGAGGTGGTGGTGGCAGAAGGGCCCAGAGT
-CAGGTTGGGGCTGTGTCGAGCAAGAACTTCCCCAGTGGCTTTGTCCCAGGCTGGGCTTCC
-CCTCCAGGTGTTCTTGGAGGGACAGCCCCAGCCTGGGTGGAGTGCTTGGGCTGTTTCCCT
-TCCTGGATTGCCTTCCCTGCCTGCTGCCTCCCAGGGACAAAGCACTTACTGTATGCCAGG
-CCTCCCCTATCTCACTGAACCTGAGTCTTGGAGAGAAGTGATAATGGTCACAATAATGAT
-AATAATGGCTAATACATATACAtttttttctttagagacagcaacttgctctgttgccag
-gctggagtgcagtggcacaatcacggctcattacaaccttgacctcttgggctcaagcaa
-tcctcccacctcagtctcctgagtaaatgggacaataggcacgggccaccatgcccagct
-aatgtttgtattttttgtaaaatacaaacatagggtctcactatgttgcccaggctggtc
-ttgaacacctgagctcaagcagtctgcctgccttggcctcccaaagcactgggattacag
-atgtgagccaccgtgcccggcAACGTTTCTTTTTCTTTCTTTTTTTTCTATTCTTTGCAT
-CTACTATGtgttcaaagtgctttgcataggttaactcattctcctttaatcctcacaaca
-ccctatttccattttacacatgcgaaaacagaaatcccaagagccaaagaaacctgctca
-agtctcagaatgaatgagggtcagagccacatgccagcctagtgtggcctgacttgggag
-tctacgtgcatttTGTTCCCCAGCTGATGATGATCTGGCAACCCCAGCCCCATCGCACCT
-CCTCACATTCACCCACCTCTTCCAAGAAGCCTTCCCTGACTACACCAGCCCCCATGGATC
-TGGGCTCCAGGGCACCCCAGCTCTGCAGCTTCGACATCTGCTGCCAGCCAGGTGAGGATT
-TCTATTTCTTTGCCAGGCTCTGTGGCCTTGGTGGGCATGTCCAAGCCTgcctggtgatga
-agaccatgagatctgggggcagaaagcctggattcaaattccagctctaccacttagagc
-tgcatggccttggaggattggctcaccccactgagcctcagtttcttcatctgttccagt
-ggtaatgatagtgaaattagcagtgctgccctcgtttattattgatttggtgatgtcagt
-gtgtgaagtgtgcagagcagtgtcacggggtgagtgctcaacattcagtgcttgttatta
-ttTGGCCCTTGGCAGATGGCTGGGCCTGGTTGGAGAGAATGCGGGGTGTTTGTATGGCAG
-GGTTGGGGGAGGCTGCACTGGCAGCTGAAGTAGGGAGCCAATTTGGGAGCAATTAAGAAG
-GTCCTGCTGAggctgggtagggtggctcacgcctgtaatccccgcactttgggaggctga
-ggcaggctgattgcttgagcccaggagttcgagatcagcctgggcaacatagggaaaccc
-tgtttctataaaaaatacaaaaattagctgggcatggtggtgcatgcctgtaattccagc
-tacttgggaggctgaggtgggaaggtcactggtcactggagcctgggaggtctgggaggt
-cagggctgcagtgagctgtgatcatgccactgcactccagcctgggcaacagagtaagcc
-ctgtctcaaaaaaaaaaaaaaaaaaaaagaaGGTCTTGCTGGGTGGAGGCAAGTGGGTGG
-CAGATGTGGCCAGGGCAGCTCAAGGAAGCTCTTGTACCCTCAGGGCAGGGCCTGAGAAAT
-TCCCCAGTGGGAATTCAGAGGGAATACAGAGCCTGGGTATATGGTTGGCTCAGTCCCCAC
-ACCTCCAGTCATAGATTGTGTCTGTCGCCAGGGAAATGAGACTTAATTATTCTCTGTGTA
-GAAAAGACTTGGGAGGCTCCCTCAGCTTCCTTTTAGGCACTTACTATGTCTGGGGATGGG
-AACAGCCGTGCTCCCAGAAAGCAGTCCAGTCAAGGGTGTGAAAGGCTGCCACGAGACAGT
-GATCGTAAtattgtttgctgagcgtttactacatgccaggcactgtgttaatgcttcatg
-tgcagtatctcattcaggcctcatcacaccctttttgaggtaggtatgcctaaagcaccc
-attctacagatgaaaccgtgaagggacttgctcagggtcactcagggaagtagggatgga
-gtcgggatttaagccTTTGCTTTAGTGGCCAGTGGCTTAAATGGGACTCAGCATAGTGTT
-GTAGCTACTCACTGGTCAGGTGTGAGGAGTAGGGGGACATCCAGGGAATTTTTCATTCAG
-CTCTGGACCTTGCATTATCAGGTTGGTATGGATCCCATAAGGAGGGATGTCAGaacctgg
-gcaacatagggaaaccctgtttctataaaaaatacaaaaatcagctgggcatggtagtgc
-atgcctgtaatcccagctacttgggaggctgaggtgggaaggtcactggagcctgggagg
-tctgggaggtcaaggctacagtgagctgtgatcatgccactgcactccagcctgggcaac
-agagtgagaccctgcctcaaaaaaGCCTTTGCTTTGGTGGCCAGTGGCTTAAATGGGACT
-CAGCTGGAGGAAACAGTGGGGGCATATCACTGAGAAGTTCCCAGAAGTGGAATCAGGCAT
-AAAGTTCAGGAGGACAGAGAGTCATTCAGAGATTccttgtggggaagcgaccttcccacc
-agtggaggtattccagcacggctggatgatgattgcaactatggagggaatctatgaaga
-accagatgacacgtgagattttttgcagccctgtgagtgtgaatcCTGGTTCAGAGATAG
-CCAGGACCCAGGCTTATCTAAAAGATCCTTAAATTTCTCTgagaggcaatatcatgttgt
-ggagacatcatgagttttgacagcagggagatctgagttcaaattccagctcatttaact
-tgtaactttgggcaggatacttaaacttggcatctcagtttccatattactaaagtaggt
-acagtaatgcctacttcaaagtgttgtggggaagattaaatggaataatggtgcctggaa
-cacagtaggtgctcaataaatgctagttcCTTTTCCCAAATATACCAAGAACCAGGCTGA
-GGAAGGGGTGAGAAACCTTGATgatcttacaagatcgtcatgtttaagctcatcctgcta
-ttgaagaagcagaagctcagagaagccagactgacttgtccaagttcccaaagcaagctg
-gagcaaggccacaatgagtgcaggaatttcaacttctggcccagggacccttccacccag
-ccCCAGGGCATAGGACAGGCTGGGCAAGTCACCTCCTTTTGCTTCTGGGTCTCTGTAAAA
-AGGCTGACTTGGGGTGACTGACCTTGGAAGACCCCTTCTTGCTCCTCGGATGGCAGCACC
-AATGACATTCTTTCCACTCCACCCAGTGGCTAGGACATGCTGAGTGCTAACCAGCCACCT
-CCAGATCCCATGACGTGCACCCAAATGGGGGACAGATGGTAGGAACAGGAGACACCCAGA
-GACTGACCGTTGGAGCAGACTCTGTAGACACTAGCCTGGGGACCCCAGCCCGCCCACTAG
-CTGAAGACCCCAGCCCCCACAACGGCCTGGGCCCCGAACCCACCTGTATAGCTGGTTCTC
-ACTGCCCAGGTGGAAATGTTCGTACTGGGCATAGGCCTCGTGGCCTTCCCAGTCTTGCAG
-CTCCACACGCAGAGAGTAGGCTGCCCTTCTGGTGAGCTGGTGCACCACTTCATTGCCCAG
-CCAGTGCTCCCCAGCTGGGTCTCCGAAGCCCTATAGGGAGGGGAGCGTGGGGTGAGACTC
-ATGCTGAGGAGGAGGCCATGTCCCTGGCTGAGGAGCTGGGCTGGGCCAGGCTCCAGGGCT
-ACTTATACAAAACCACTGTGCTTAATGATCGAGTTCATAAGTACAGTGTAGGCAGGACTG
-GGAGTAGGAGCCCTCCACCTGCTAGAGGGAAAAGACTAAGGCTTTTGTAAGTGTAAAAGC
-CTGTTAAAAGTTATTGAAATCAcattcctctgaagttcaagaacaggaaaaagtaatatt
-tggtgactacctttggtggagtattgactgggagggggcacaaagtgggcttctggggtg
-ctgggagtgttgtacatctagcactgaatggtggtcacgtggttaaatacatatctaaag
-gctcactgagccttacactttatttgtgcgcttagacacatgtacgttaaacctcaacaa
-aaaTTAAATAAAATATTTCAATCAGCTACATAAATAGTAGAGCAAACTTTGTTCAGTGAC
-AGCGCAGCCACTGCAAGATTTCAGCAACACAGAAATGTAAAACTGAGAGTGTGGGGAATG
-TCATGTCCCAATGCCCTTGGACAGAACAAGAATTCAGCACCAAGGACAGGGGCACACCCA
-AGGCCCGCTCCCCAATTTAGTCACGATGCAATGCGGGTTAGCCTGATGGTTAATATTCAG
-GGTTCTTTTGTGTATTTCTGCACCTGGACACCCTATTCCTCCTTGCCATTTTAATGGTTG
-TTTAAAGCCCAATTAGTTCAAAACACTCATAACTTAATTTGGTATTTATTTTTAAGTATT
-CCTTAAATGAACAGCAAGCAGACGCAAATAATAGAACTGCTGTATCACTTTGTGGGTATC
-TTTTTCTATTTCTTTGGCTTTGAAAACTTTAAGAGCTTTTAAGTATTTTAAGTCAGCTTG
-GCAAAAAATCCTTTATTCAAAACCTAATTAAAAAATTGGAAAACAATCGGGCTTCTCATC
-TGATAAAATACATGTGATCTTTGGGCCTGCAATTCCTCGTTAATGAATCTCTCCTGCAGA
-TATGATCATAGACGTATGAAAAGACAAGAAACTTCATTAAAGCAACGCAGTCAGGGTTGA
-CTGGGGGGATTTTTATTCTGTCTCCTCCTTTGTATTCtttaaaaaattagaaatgtatat
-gtatttttttaaaaaaaattaaaacaaaaataaaGCTAAACTTTTTTTCTTAGAACATAT
-GTCAGAACTTTCAGAAAGAACATTCAAATTCAGGTGATGGGGTCCCATAAAGCAGATGTG
-CACTGTCAGCTTTAGATGAGTTGATTTTTTCTGGGGGAGGAATGAGGGCAAAGCAGTCCC
-CTTCCAACAGCCCAGCCCCAGCCCCAGGTTTCAGAGCAGAATGGCCCCTCCCCAAGGCAG
-CAGGGCTACCTGTTTGTAATCCTTCCAGTTCCGCTGAAAATTCACGGTGCCATTCTCACG
-GCGCTGGATGAGGGTCCACCTGCCTCCACTGCTCTGCAGGTCACAGAACACCTGGAGGGG
-GTGGGCAAGGCACAGCTGGGAGCCCTTGGAGGTAGCCAGAGGCCAGGCCTGTGCTAGCCC
-AAATGTGGCTAAGCAGACAGACCCCCACAGAGCAACAGGTgagcctgggggtcctgggca
-tcagaaagatccaggcttaaattccccacccattgtcatcatttttctaaagtggtgggt
-aaggaatgacctctcagagccttcctctcatttgtaaaatggagattcataccttaacct
-ctttgtgcctcagtctctcatctaccaactggggttgtgaaaattaaacgagatgagtca
-cgtaaagtgtttagaacagtgcctggcagtactaggtaaacggaagctcGACCTCTTTTT
-GTTGAAAGGAGAGGTTAGCAGGTGTGTGAGAAGTGTAAAAGACAACCTGGAGACAAACAG
-AGGCATTCTCCTTAGTATATTAAGAGGGGGTGAAAGGAAATAGAGCAATGgtaatactag
-caatttgagggccgaggagggaggatcgcttgagctcaggagtttcagaccagcctggga
-aacacagggagactttgtccctacaaaatgtttaaaaatattagccaggccatggtggca
-tgtgtctgtggtcccagctacttgggaggctgaggcaggaggatcactcgagcccaggag
-gtcaaggctgcagtgagctgtgatcatgccattgcactccagcctgggcaccagagcaag
-accctgtctcaaaaaaaaaaaGGGAATTATGAAGTAGGAATCTGCTAGTTGTTTCCcttc
-taggcctggctctcagaccctccctcctgacatccgtgctcttctctgtcacccttctta
-tcggatgacttgaccttaaattttaggacaaccttgggagccactgattgaaaatggtgg
-cacctctattagccctggtttctaatttcccacatggagcagaaccccaactcctgcctt
-caactggactatatgtaaactagaaagaaacgtctttgggctaaggccctggaattttgg
-gggttgtttgtaatatcagctatcatcatcttaaccaacacTGAACTATTTTGTGCTGTT
-CCAGTTAAAGCACCTCTGAAGTGATGCTGGTTAAGGATGCACTTCCAACTTTGGGAACTT
-CTGCTTATCCCCACAATCTGATCCCTGACTGCTGGGAAGTCAAAGCCACCCCTACACCTC
-TGGTATTTCAGATACTGGACAAAGCCTGATCCCGATGGGGTGCGGGGTGTCTGTTTGGGA
-AGCCCTTGGCTCAGCACCCTCTAACAGCCACAGTTCCCAGGGAGCCCCCTAACCTTCCTG
-GGCTTCGTTGCATTGGACACCTGGATGGTGTAGACACCACTGGCACTGGCCCCAGAGCGC
-TGGATCTCTGCACAGTCCTGGAACACCTGCTCACCTGCCATTATGAAGGCTGCAAAGGGA
-CAACACAAAAGTCAGTTGGAGGTGGGCAAGGAAAGAGAGAAGGGGCCAAGTGGGCATGCC
-TGCCTGCTTTGTGCCAGGTTCTGGGTTGGGAGGTGCTGGGGACAGGGAGATGAGTCAGAC
-CTgggaagatttcgtagaggaggtgacagtaagctggaacctgtgtaatgagcaggagtt
-gcccagtggagaaggggaaggtgttccaggcggaagaaacagcatatgcaaaggccccaa
-ggtaggaagggccctagtgtgtgcagaggacagGGCATGGGGAGGGGAACTAAGGCTGAG
-GCCAAGGAGAGGAAATGACTCACACCGTGAGAGAGGAGTTGAGACCAGGGAGGCTGCTTG
-CTGTATGATGCAACTGAGAGGGTAGAACAAGGCTGGCACAGAGAAGGTGGGGAAGGAAAA
-GGAGAGACGAAGCTGAGATTTCAGCAGGGCCAAGTCAGCCGTGAGTGCCAGGCTGCGGAG
-CCCAGATTCTCTGGGCTGagaaagagcactctgtccagagtgtggaggggggcctggagg
-ggatgagactcaaagctgggaggccagagaggaggctgctagagttttctgggagagagt
-tactggggcctgaacTCCAGTGAGGCActtcccatttcacagaccaggaaactgaggccc
-aagagtgaggcaactggcccaagggcacacagccaggtaaggcagaacCTTCCTTCTTTG
-GAGCTCCCTTGGGTGGGAAGCTGTGGGCTCCCCTTCATAGCCCACCCTTTTGGCTGTATC
-TCCCTGCTGCCCTGGGCATATGCTCCCTTATTCTGTCCTCCCTTGAAGCTGACTGCTGGC
-CTTAAAGGGCCCCTGTTTCTTCCCTCTGGACTACATGAGATCGGGATAGTATTAATGACT
-AAAACCTACCAGGGGTTTCTAGGCCTGGCCTGGAAAAAGTGACTGTTGACAAACAAAGTG
-CAGAGATTTAAAATCTCCTCTGTCTCAATTAGTGGAATCCAGTTAGAGGTTTGAACTATG
-ATTCTACCAGAATCCAATCTCTCTGGGTAGCCAGGTACCCAGGATGGGGCTAAAATTCCA
-GATGGATAGGTTGTCAACACCAGTGAGGAACCAGGAGGCTACCACAGGGTGGGACTTCCT
-GGTTTGGCTTTACATCTGAACTTCAGGGATCCCAGATCCTGGATCTGGGGCACTTGTCCA
-GAGAAGGCTATTGCTCTCATGTCACAAATGAGATGACTAAGACCCCCAAATCAATTCCAG
-TTCACTCACAAGCATTTCCTGGGCAGTGGAGACCCCTGCCCCACCTGTTGGCACCCCCTC
-AGCTCCCCACAGGGAATTGGAGTCCAGCCAAGCATGAGGAGGCTGTTGGCCTCAAGGTGA
-GCAGGGATGGGCTGAACCTCACCCAGTAAGGCAAGGACAGAGCCAGGGTTGGCCTGAGAT
-TTCCAGCCACCCTTTCCAAGGCTCTGCTCACTGTTATTTTCCTTAGTCTacaacaatatc
-aataacaataacaacaataatatcaacaCAAAAAGTGAAATACTCACCATGTATTGTAGT
-GTTTCCAAGGTGTCATGTAATGCCAGGGGTAGTTTGGGGCCAGGAAAAATATTTTTGGGA
-GGCATAAGAATAGGATGGACTGATATTGATATGCAACAGTTTGATCTGGTCCTCCTCTGA
-ATATCTGGGCTGGTAATTTGTACCAGTTTCCCTCGCTTTtgtgcataggcactgtgctga
-acccttttgtatgcatgaactcatccgattctctgtgcaagaactctatgagattattat
-tcccgttttacaagtaagaaaaattgaggctctgagaagttaaataaatgacttgtatga
-agttccagtgctaattaataagtgaaggagccagggcttgaactccggcccatctgactg
-caaagccagtgcccttcctcctacacATCTTCCTTTGGATTTCCACCACTGAGCATATGT
-AAGGTTGGGCAAACAGCCTGCATGAACAATCGCTGCTTTTATATCATGCACAAGTTTGGT
-CTTTTCTGCCTGTGCCCATGTCCTTGTAACCTTCTGAACCAAACTCCCCAGTGCCTGGGA
-ACATCAGAAGACTTGACTCTCTTCTCCTTTCACTAGCCTCCACCTGACTGGGACAAAGCC
-ATGCAGAGAGCTAGTGCTCCCTTCCTGCTAGACTTCAAGGATGCCTGGTTCCTGTGCCCC
-ATCTCCATCCAGCCCTCTCTTCTACACCTGGTGACTGAGCCTCTCCTTCAGTTTCTCCAT
-CCAGAAGGGGGTGAAAGCAACTGCCTAGTGTCCTTCCCTGGTGATAGTGGAGCACGGGGG
-ACAGGGTGTTTGGGCAAAAGGTGCCCAAGGTGAGGTGCCCAACACAACCTCCTACTCAGA
-CGATTGAGCAGACATTCAGCCTCATCTGGGGACTGGGTTACCAGTGGGTTAGTGGGAGGC
-ATTGGGCCCAGGCCCTGTGCCTTGGGCTGAGCTACAAGAAACCCACACATGGGATGAATT
-CAGGCAGCTCAAGGCCAGGTCTGTGCATACGCCAGTAATAGGTTCAGGTTAATCCACATG
-TCGCGATTTGGAAGGTGTCTACTTTTCCTACCTGTAGCTTCCTTAGGCCTCAAACCCCTA
-CTCAGCTGGGTCTGCCAGACTGAGATGGAGCCAGGGTGGAATCTTCTGCCCTCAAATCCC
-TGTCAGCCCTGGTGGTGCCGGGAGCGCCATCACTATTGGGTCTTAAAGGCTTTCCAGCCT
-TCCACTATGGATCCAGGAGCAGCAGTAGCCCCTTTGGTCTTTCTCTCTCATCAGGACATC
-TCCACTCATGGTTCCAGTCAGAGCTTCTTGAAAGTAGTCCCACTCTGTTCAAAAGCCTCC
-CATGCCCCCTGCTAGCCTCAGGCTAAGAGCCCTTCTCCTTCGCACAGCCTTTGGACCTGT
-CTATTTTTATGGTCTGGAAACTTCAGGAACACTGATAGCTGAGCATCTGGCACATATTAT
-GCACTCAAAAACCATGTATTTCTTTCTCCTTCCCTTTGGGACCCGTAAACCAGGGactgg
-acatttttgcaagagacaggagctgtgactgtgcattcactgctgtatccccagcaccca
-gcactgggcctgccacacagtaagtgcttagtaaatgtttgttgactgagtgaTTGCAGC
-TGGGGCCAAGAATGCCTTGGACACCCCAAGTAGGCCGTGTTAGAAGGAGTCAGTGAGAGC
-CTGGGAGCCCAGCCCAGAATTGTTTTCTTGACCCAGAAGCCAGGGCCAGGGATGCCTCTT
-CACTTCTGTTTGGCCCTCTTGGGCTTAGGGGCAGGGGCATTAAGATGAgagaggtccttg
-gggtgcattgagtctaacctcccagttcctcccattctacagccaggaaaactgaggccc
-agggaggggtaggacaagcccaagAAAGTGGGGCTGGAGAATGAATCCTGGAGACCAAAC
-TTGTCAGTCTGGATTGCTGTTGCCCTCATCCTCGCCTCCAAAACCCatgggtaaactgag
-gccaagagaggggcaggggcatgcccaaggtcacccatggaatcaggggacagggcctgg
-attgggaTTGTTGTTGACGCCATTATTACTGTTTATTGTTGTTTCTATTTCACAGATGGT
-CGGGGAGGGTGGGGCCCGCAATGGCTCCCAGGCGCCCAGAGACCCTGGAGGGTGAGCAGG
-GTCTCCCCTCCCCTCTCCTGCCCGTCTTTAGCCACACTGGGGCGCACACCGCTCACTCAC
-CCGGGGCCGAGGCGTTAGCCCTTTCTTGCACCAGGTGCCGCAACAACACCAGCAGCTGGC
-GCAGGCTGTGCTGCTGGTCCTGCAGGAGGCTGGAGTTGTGCCTGACACCGCGCAGGCCGC
-GCTCGATGTTGGTGAGGGCGGCGCTCTGGCGGCTCAGCGTGTTCAGCAGCTTCGCCTTCT
-TGCTGAGGATGCTGGCCAGCTCCTCCTGCTGCTTGGTCTCCAGGGCCTGCAACCGCTTCT
-CGAGCGCGCTGCGGGGTAGGGGGCGCACAGAGGTGAGCCTGGCATCCTCGCGAAGCACGC
-ACCCCCGCGCGCCTCCCCGGCCCTGGAGTCCCTGCAGCCCGACGATGAGACTCAAGTGTG
-GTGGAACGTCCTGTGCCCACTGTAGGCACAGATTGAGGAGGGGAGAAAAGAGATACCCGG
-CCCTGGAGTAATATAGATTGAGGTTTAGTGGAAGAAAGAGGTGGTGTGGGAGGGACACCA
-GCAACTGGGTAGCTATTATCAAATCCCAACTGTGCTTGCTTTTTGACCCAGCAGTCTACT
-CTCAGGAGTTATCCTCTAGGGAGCATGGTCAAGAATGGCCCTGGGGACTTGCTTGTAATA
-GAAAAACAAACTAACCAACCAACCAAAAAAGATATAGCCTAGATGCCCAAAAGCCAGGAC
-TGGCTGAATCCGTTGCGTTTTGGCGTCCCTGGAAATGTTCCGCAGTCATGAAGGAGGAGG
-CATTTGCACAGAATTGGAAAGATGCCCAGGACTTGGGGCACATCAAGCCTAACCCCATGT
-GTGGCAAGAGAAGAAAGAAAGTATTAATGTAAATAAAGAGAAATGGGGTGAACATATAGG
-AGAAGGCTGGAAAGACCGCAGTGGTGCCTGTGTTTGGGAAGAATATGAAAGAAATTCCCT
-CAAGTGCTGTGACTTCTGCAGAGCAGGTTTGAGTGGATGAAGATGGAGAGGAGGAAGATG
-GGGGCAGGATGGAGGGCCCAACTTTCACTTTTATTTTGTACAGGTTCCTGTTGTCCGATG
-ATATTATAATAATCAAGAGACATTTTTTGTAATGGATTTAGAAGCAAAGAGGAGTTTTTC
-AAAAGAAAGCCTTAGACTCAGCTCTTTCTTTTTGGACATTTTATCCTCCagatttactca
-catgtgtgtgaaatgagatatggaaatgttactcatcgtatcactggttggattagtaaa
-aggctggaagcaacctcaatatccattaactggggactggaggaataaaagcagggacca
-catatggtggagcattataaaggtggagaaaaaaatgagcaagcatgtcATGCAGTTATA
-GAATCTTTCCAAGGTAACTGAATAATAATTTGTAGAAACAAGGTATAAACAAGTAGTAGG
-CTACATTTGGGCTTAAAAAGGATAAAAATGGGAATGTAcagatgctccaaaatgtatgat
-ggggctatgtcctaataaagccatcgtaagttgaaaatgtcctaagtcaaaaactcattt
-aatacacctaacctgctgaacatcctagcttagcctagaccatcttaaacatgcttagaa
-cacttacattagcctgtgattgggcacgatcatctagcacaaaacctattttataacaaa
-atgttgagtagcttatgtaaggtattgatattgtactgaaagagaaaaaccgaatggttg
-tatgggtactcaaagtacggtttctactgcatgtgtatcactttcataccactgttaagt
-cacaaaattgtaagcccaaccattgtaagttagcaatcttctgTATGTATGTGTTTGCAT
-ATTCATAAGAAACCCTGGAATGTCAGCTTAtaggatgtcagcttcacgaggacaggggct
-tttgtctctttgttcacttctgtatccacagtgtctacaatagtgcctgacacatgaaaa
-gagtttgaaaaataattgttggttgaatgaatGGAAGGATACACAAGAAACTAGGAACAG
-TGGCTACCTCTGGCTTGGGTGGGTGGCTGAGAGACAGGGCTGGGAGGGAGACATTTTACT
-GTATATCCACTTGTGCCAACTCATTCTGCAGACTAAGAAATTGAGTCCAGCTAGGGCAGA
-AGAAATTTCCTCTGGACTCCCAATTATGCTGCAGGAAAAGAGAGAATTGGGGCACACTGA
-AATTCTAGAATTCCTGCCCTGTCTTCATGGGCCAAGAGTTTACCGATGACATCCTCCATC
-CTCACTGATTTCTAGACACCTAGTGTTAATTTAGAGTCATTGAAAGTGTCCCAGTCCTTG
-CCACTGAGACCTTGGGTTGGGAGAATAAGAAGATGGGCAGATTGTCATTAATTGCACCCA
-GATTAGAGAGAGCTGGGGGATCTTATGGCCTTATCCTGAACCGGCATGTGAACAACAACA
-TCTTGCCTGATTCACAGGCCTGTGGCTTGTTCAGTGGGTAGATTTTGCCTTCTCCAGAAC
-CCTGACTTTGGCAGCTTTTTTTCTTCACTCAGCTTGAAACTGAGGTGAAATCAGCCTTAG
-CTGCCAGATTTTTCTGCTTTATCTAAACCTCATGACCGCttttttttttttttttttgta
-atttaaaGGGTGTTCCCCTGATGCCCATTTGCTTATAAATGCAAAGACTCTCTGATAGTG
-TGGACAAGAACCTGGTAACTGTGGTTGTTTCTGGGAAAGGAATCGTAGATAGCACCAGAT
-TTATTTATTTGCAAAGAAGTAAAGCCAATAAAGTTTACCggatgaatagtatggtgggtg
-aattagatctcaataaagctgttaaaaTTTACGAGATAAATAaaagaaggaggaaggaag
-gaaggaaggaaggaaagggaaagaaagaaTCAGGGTGTCCTGGGCCCCAGGAAGATGCCT
-ATCCCCTGTCCCACCCAGTGCAGGGGCCAGGCAATGTGTTTGCCTGGCTCCTAGcccagc
-cccgtatccactctcatttccagcctcagtctagactccaaccctggtttcagtccttcc
-ccagcaggggctattcccagctctagtttcagccctaactccCAGGATACCTccttgccc
-caatcctaatccaagctcctaggtctggctgcaggccctatcccagacaccagcccacgt
-ccagcttccggtcctggctccagccccagtcctagccctggctctggtgcctgccctagg
-tcctaaacttgactccagccccagcccctgtcctagtcTGGTGCCAGGTGCCACACCCAC
-CTGTTTTGGCCCTGAAGCTGCTGGAGCTTCTGCCTCTGTAGCAGCAGCTGGTTCTCCAGC
-TTGTTGGTGGACAGAAAGGTCTCTGGCATCTGGGCATCCATTCTTGATGTCTGGTTCAGG
-AGCTGCCCCAGCAAGCAGAAGCAGGTAGGGGGCTGCGTAAGCGCTACAGGAGCCCTGCCC
-AACCACCCACCTGCCCACAGGCCCTGCCACTCCAGAAACTTACCCATTTCCACTCTCCCA
-GTCGTAGTTCCTGTGGTTACTCACTCACAGGCCCTGACTTAAGCTTATTacctgcttcct
-aaatttgcctttctccatcactgcaatggcagctccattctccctgatgcttaggcccca
-ggagctgtcaaccctgtcccccacatccaactcatctgcaggtcctgtcagccttgcctt
-ccaggtggcccctgaccacctctctcctgctctgtggccctcactctggccctggactgc
-tccctcattgcttgcaatctattctctactcagtagcctggggctgcctcttaaaacatg
-tttgctctgttcaaaagcttcctgtggctcccatctcatgtagcggaaatgccccagttc
-tcaccatggcctgcaaggccctatggtgtgatctgtccctatcacttctccagctccttg
-cctgccactctcctcctggtcactccagcatagtggtctcctgatgttcttgaacctgcc
-agcacgtccatcctccctccgggcctttgcacatgctgcatcccttgtctggagcactct
-ctgcagtaagcctggctgcagccctaccttctccatggcccttcctggccttgctgtatg
-agcttgcagctctcatccccccccaccactcccaatgcaccccctctcttgctctctctt
-ccatgctattttctccttagcgctgtcactggctaacatatgcagacatgtgttgcttaa
-tgacggaaagatgttgtaagaaagtcgtcatcatgcaatttcgtcattgtgcaaacatca
-tagtgtgtacttacacaaatctagatggtatagccgcctgcatacctaggctatatgaga
-cagcctattgctcctaagctacaaatccatacagcatgtgactgcacccaatactgtagg
-cagttataacacagtgggaagtatttgtgtatgcatatctaaacacagaaaaggtacaat
-aaaaacagcatacgatactcttatgggactgctgttgtctatgtggcaagttgttgactg
-gaacattaagcagtgcataaccatatatgtcacttatcttttcattttcaggggaagctt
-cacaggagtaggaatgtatgcctgctttgtttcctgctgtatactagacaccagtcttct
-caagcagtgcctggcacaCGGGGGATCAAACAAACAAATGGGCACAAACTTGTGTCTATT
-TGTTATTCACTTTTTCATCCACTGACTTCCCTACCCTTCATTTATTCACTAGTTCCTTCC
-CTGCTCTTTGCTGCTCAGATACCTCTTCTCTCCAAGTCCTTGGCCCCAGAGGCCCAGTGA
-Attgtttcttatccatcttcccctggcacattgtaagtcctctgagggcaagggagctgt
-gctactatacccctcattccagtgcccagcacagacccaggcactgaagttacagaggca
-gaaaagccaagcccagcatccaccccccagggctcatagcttggagagagatagttttat
-gacaagttcatcagggaggagggacccggggggctacaggcccagaggaggccttgaccc
-tactcagggtcagagatcaaggtaagatgactggggCTACGAACCAGCCTGGCCAGCCAC
-AGGCCCTCAGTGCCCACTCAGTCACCCTCTGTTACCTGAGCCTCCATGTCGGTCAGCTTG
-CGGATCTGGGCAGTGGTCTGGTTCAGGAGGCTGGTGCCCAGCTCTAGCATGGGGGCCGTC
-TGATTCTGGGCCATTTGCTGCTGGACCTGCTCCAGCTTCGACCTCAAGATCGTCTTGATG
-GCCCTCTCTAGCTGTGGGAGACCATGGGCTGGGGTCACGGGGGAGGGGCGGGGGAAGCCC
-CCTGTCCCTCCCACGTGTCACCATGGGAGGGCACTGAGCAGCCACTTGAGGCCTCCCTGG
-CTCAGAACATGCCGGGccaggtcaggccaccattacgtcttgcctggactatcccagtag
-atttttccctgggagggatttatatgcctgttttgtctgcctctctgcttccatctttgt
-cccctgcacagtccatcccccactaggcagccagagggatcctgctaaacctaagtcaag
-tcacactcctcctttgctcaaaatctttccagggttcctatctcacgcagaggaaaagcc
-atgactgcaggttcctccgtgactgggcctgccaccacactctcattcctctcctattcc
-cctctccctcactcacttcaatcccgatgcaatggctccatgacatccctctaacgaagc
-aagcatgtgcccacagctgttccctcactgttccctctggaatcctcccccAACCCTGAT
-CCGCATCTGCGTGGCACAcctcctcatgctgtttcagctttcttcataccacttatcacc
-acctgactttttaaaatcactatctctctttttatctgtctgttgtctgtttctctctct
-agaatgtcaattccatgaagccagggacttggttttgctcactgccttgtttctatgttt
-agcacaatgcatggtgcacagtgagtgctcataaatgcgcgttcaatgaattgatGAAAA
-AGGGGAAACAGCAAGGGTCAGAGCACAGCGCCCAATCACATGCCCCTTCACCAGCTTCCT
-CAGGGTGAGTCAGCCAGCAGGGAGTGGGAATGCATCTCTCCCTTGTACAAAGAGTTTGCA
-GGTCCAttggccaagctgtgttttctatcttcagatcccctctatctgccaaatggggct
-ggactggccagtctccaagggttctcccagctctgatgttctgggatcccaCATGCAAAT
-GTTCATTTCTTTGACAGGGCTGCTCTCTTTCCCAAGGGCAGGAGAGCTGGTCTGGCATGA
-CACCAGTATGCTGTTGTAAAGGTGAACAGTGTGTTCTCAGGGCTCGGTGCCTGCAGGCAG
-AGAGCCAGCTCCCCTCCACCATTGCCTCTCCATTCGGCACACATGCTGGCCTCTCACCAT
-GCCCCCCACCCCTGTCCCTGGCTCCTTCCCTTGCCCTCTCACTCAGTCTTTCAGAAGCCA
-GCTGGACAGCTCTCAGGGTCCTTGGGAAGATGGGTGCTCCCCAGGAGAGGTGGTGACCTT
-GGCTCGGGCCAGGCTCCAGCCACTTCCTCCTTCATCTCTTCTCCCTTCTTCCATCTTGAC
-TGTTCACTCCCATCCCTTCCTCACCCTGGAGTGTTTCAAAGGGAGCAAGTTCCATTATCA
-CATCCTGGAGCGGGTGCTTGTGGGCGGTAGTAGTACTGGTTAGAGCTgtgtttctccaag
-tgtggttcttccgtcagcatcagctgagctcattaaaaatgtgaatttccaggtcccacc
-gcagacctcctgaaccagaaactcttaatggtgcccagccaactgtggttaacaacaccc
-ctggctgagtcagatgcctgctcaagtgtgagagcccttgATGCAGAGTAGCAGCAGGGA
-CTGAAGACCAGAGAGACCCCCCTCCTTCTTTCCCTGCATCATCAGCCCACCCCCTCCCTG
-CAGCACACAAACATGCGCTAACAGCTTCCATCTAAAAACTAACTCCACAGCCTCTCTGGC
-TGCTTCTCCAGTTTCTCTGATCTCATCAACACAAAACTTCTACAAGTTGTCTCCATTTTC
-TCACCTTCATACCCACCCTCACTTAAAAAACAACAACAACAACATAACGTTAATAATAAA
-ATGATGTTACGTTTCACACATACAAAAAAGCATAGAggccaggtgcggtggctcacacct
-ataatcccagtactttggaaggctaaggagagtggatcatttgagcccaggagtttgaga
-ccagcctgggcaacatggtgaaactccatctctactaaaaatacaaaaattagccagcca
-tggtggcataagcctgtggtcttagctacccaggagactgaggcaggaggatcgctggag
-cctgggaggtggaggttgcggtgagctgagatgcaccactgcactccagcctgggtaaca
-gagtgagaccgtgtctcaaaaaaaaaaaaaaaGTATAGAGAATAAATATAGCCCATAGTG
-CTCATCCTCCTGTATACCTCCAGTCATGTCTCTCCATCCTGGGAGGTCCCTTTGCCTTTT
-GGCgtctcactgttgcccaggctggagtgcagtgatgtgatcacggctcactgcagcctg
-aaactactggcttcaaacaatcctcccacctcccaaatagctgggacgacaggcgagcac
-caccacgcgcagttCCCCCCTTCGCTCTTTAATTCACCTTGTCATAGATAGCCCTCCTTG
-ACACTGCCCTCAAGGGACActccatcttgcttgacatctcaggagcaatcacctggatgg
-ccactccctgttgctggacgacttccccccaatcctggtttcctcctagcccctaaccac
-ccactctctgactcctcctttacagactcctacacggcagggcccccatggcccagtcct
-gggtccttgtctctatgtacattcactctctaggtcaggggtccttaatgaagaagccac
-aggctccatgaacttgagtgagaaaaaaagatcacattttttgtccactaatctgcaatt
-aaaatttggcatttccttcaattatgagcctaggtcacaaaccacagccatactagcagg
-tcctgagagtcattaccaatagaaatcccaaatattttcatatcacaacacactcttacg
-gtatcttaaaacattgtttttactcaccgggactttggaattatagacatcacacccacc
-actggataatgctatgcctgatcacagattttatttttcatattttgcttatgatttcca
-tattactgagtgttcttatgctttgattttatgcatttctgagaaaggattattaagctt
-caccaggaccagatgccaagaggTCTGAGGATCCAAATGCATCAGGGCCCTGCCCCAGGG
-GCTGAGATCGGTCTTTGGACTTCCACATCCctctgtgctaatggagccatcaccatctcc
-cacccagacttctcccctgcatgtccccaactcgccatctctgcatggtttccaatgagc
-atctcaagcccagtgtgaaactcttcattcctcagctcccatcgcccctgtccctgtaac
-tcccaccccatgcttcgaaatctttcccatctcaggaaatggctccacccagttctgaag
-ccccaaacccagacctcaatcttaacttctctttttcttagcggccacactcaacccact
-agtaagtactgcccactgtgatcccaatttggatttcaaatctgtttactcgccttattc
-tgggccaggctgccctcctctcCATGGGTCTGCCTTTTGTGCCTTCCTGTCTTTAACCCC
-TCTGTCAGCTCCCAGGAGATTCTTTTTTTTTTTtgcagttgcaagatttaatagcatgaa
-atagagtgaaaacagagctcccatacaaagggaggggacccaaagggggttgctgttgct
-ggctcgaatgcctgggtttatatgccaatccttgtctctcccactgtgctctcaggcaat
-agatgattggctatttctttacctcccatttttgcctaattagcattttagtgagctctc
-tgattggttgggtgtgagctaagttgcaagccccgtgtttaaaggtggatgcggtcacct
-tcccagctaggcttagggattctaagttggcctaggaaatccagctagccctgtctctca
-GTccccctctcaacaggaaaacccaagtgctgttggggaggtcagctgatgaccgcacta
-actgcttcctgctgaattagggagtagtaggggtggtgcagttgagatttcctcgggagg
-ggtgccttcgatgtcattaacatcagagcatgggctagcaggctggtccgggggtccgtg
-gtaaatcttagtcatggactgcatgtgagctccCAGGAGATTCTAATGTGTGGCTGGCTG
-GGCCCACCAGCATGGATGAGGACAAATATAGCTGTATCGAGTTTGGTCTCAGACTTTTTC
-ATGCATCATTGACCTCCTAGAACCTAAATTAAAAAGCAGACATCCAGGTACTGAGCACCT
-GCTCCAAGTAGTCAAACAGCATATTCATGCCTGAGGTGAGACTTTCCCAGGcatcttccc
-caagcttctcatttgcctgaacatagacaaactgaggcccagaagtcttgcccaaggtca
-ccatctggcaggCTAGGCTCTAAGACTCCTTGCCTGAGGGCTGCAGAGCTGAGCTGGTGA
-TTCAGGGCAGCTCAGGGTCCCCTCAAGTGACTGGAGCTCCCCAAGCACCTCACTGGTCCC
-CCACTTGTCCTGTGGTTGCAAGTGGCTGGGCAGGGCAAAGGTTACCCACAGCTGGATCCC
-ATCACCCAGTTTGCCACACCCGCCCACCAGCACAGGCCCTGGGATGGATAATCTGGGCCA
-GATGGGCTCAGTTAGGCTGGGCTGGGCTCTGGAGACTAATATTGGCCTGGGTGGTGGGAG
-CTAGGTCTGGCCCATGGCTGAGGCACCAGCTGGAAGGGCAGGGAATGGATCCCAGTGGAG
-GAACTCACCCAGCGTGGGATCTACTTCTCTTGTTTTTTTGGATCTACTTCTCTCTATGCC
-GTGCACCGACTCCAGGATTAGACCTGCCCCTTCTCCATCACTCTCAGGCTGCCGAATTCT
-CAGGCCTATGATGGGGTACAAAGGCCTGACCTTTTGTCACCCTTCCAGCTGGCAAAGAGA
-CTGAGTTTTGGTCCCTGGTCTACTGCCCCATCCCCTTGGCcctgggtttgagttctggct
-ctgccacactttcattgtgggcccttggagactactgtgtttctctgagccccactttac
-agatctgggtcatgggTCAGCACACCCTGCTCCTTGCTGGGGAGAGGGCATTTGCAAAGG
-GTCTTGAAGGAAAAGAAAGAAATTTTCACAGGCAGGGGCTGGGGGAGAGGGGGTGATTCA
-GACAAATAACAGGTGCAGATCCGTGGATGAGCAGCCTCCGTGGCCGAGGAGATCTGCTCA
-AGCCTGCTTCTCTCCTGCATTATTTATATAaaatggacatcaattggtgaatggagaaac
-tgcagtccatccatgcagtggactccattgagcaataaaaaggaaagaaccattgatgtg
-tgcaaacacacagatgaacttcagatggatcatgagtgaaaaatatgcaactccaatggt
-tccatactgtaggagtctatttgtatgactctctaaaaatgtcagaatctgtgattgcca
-gggcctgggtccggggagggggtggggattgattgttaaaggacacaggggagctttttg
-ggatattggcaatgttctatgtcatgattttgctggtggttacataactgtatatgtctg
-tcaaaactcatggaactatatgtgaaaagggtagattttgctgtacgtgggtcatacctc
-agtaaaaaaCAACGCCCCCAACACAAGGTTCTATAAAATGCCGCAGATATACATATGTAA
-CATTAAATAGATCTCCTCCAGTGAACCCCCTCACCCTCTCTGAGTTTCATTCATGTGttc
-attcaggaattatttcttgagcacctactatgtgctcatcctgtattaggtattagataa
-tcagaaatgagcaaaattcgtaaagtttctgattccagggcacttctactaaatatatca
-gttgcattgaaatcttgatgaatgctatgaagaaaataagacagggtaatatgtggggtt
-ggaggcaagtttagccagtatgatggagaaagccccaccagagagggccatctgggctga
-gaggctgagaagaagcaaggtctgggagagtcaggagggagggaattccaggcagaggaa
-aaggcaagtgcagaggccttgaagtgggagcgtgtctggtatttgaggatcaaaatgaag
-ATGGTAACAATGATATGCCCTGCAGCTATCTCTCTTCCATGGAAAATGGTGCATGAGGTT
-CCTGTTTGGGAAATGCATCTTGTCAACTGCAGATAAAAATCAATgcagagagagtagtgc
-tttgtatggatgaagctgtgtgtgaatcacagctcttagcttactggctgtgtgacctta
-ggctggggcctctactggtgtctgagccttttctctaaaatgaagataatcatagctcct
-tcccctgggttgtagggagcattcctgagataaCTCTGGTTGTAGTTACATAATGAACGC
-ATGATAAATTCTGGTATGTCTGGGCCATATCTTACTATGtgtcaggactctgagcccaag
-cctgcgcgtatacatccagatggcctgatgcaactggagaaccacaaaagaagtgaaaat
-ggctggttcctgccttaacggatgacattaccttgtgacattccttctcctggacaataa
-gtctccgtagctccccaccaagcaccttgtgacccctgcccctgcccgccagagaacaac
-cccctttaactgtaattttccactacctacccaaatcctataaaactgcccaccccatct
-cctttttcagactcagtccacctgcacccaggtgattaaaaagctttattgctcacacaa
-agcctgtttggttcacatggacgtgcatgatatttggtgctgaagacccgggacaggagg
-actccttcaggagaccggtcccctgtccttgccctcattccatgaggagatccacctatg
-acctccgatcctcagatcaaacagcccaaggaacatctcaccaatttcaaattgagtaaa
-cggtcttttcactctcttcttcagcctctctcactacccttcaatctccctgtccttcca
-attcgggttcctttttctctctagtagagacaaaggagacacattttatccatggaccca
-aaactgcagcaccggtcatggactcaggaagacagtcttcccttggtgtttaatcactgc
-agggatgcctgccctgatcattcacccacattccattggtgtctgatcaccggggggaca
-cctgccttggtcattcacccACATTCCCTTGGTGGCATGTCAATTGCAGGGACACCTGCT
-TTGGCTGCTCACCCATATTACAGCCCAGGGCTGCTCACCGcccgcttctccgtgtctcta
-gctttctctttaaacttacctcttcactgtggtcaaccttccaccctgcattcccccttc
-ttctcccttagcctgtgttctcaagaacttaaaacctcttcaactcacacctgaactaaa
-acctaaatgccttattttcttctgcaatactgctaggccccagtacaaactcgacaattg
-ttctaaatggccagaaaacagcacttttgatttctccatcttacaagacctggatgattt
-tttgtcaaaaaatgggcaaatggtctgaggtgcctgatgtccaggcattctttcacacat
-tggtccctccctagtctctgctcccaaagcgactcatcccaaatctttttttttctctcc
-tgtctgtttccttccatctccaccccaagctctgagtcctttgaatccttcttttctacg
-gactcatctgacctctcccctcctccctgacgctgctcctcgccaggctgagccaggtcc
-caattcttcctcagcatctgctcccctaccctataatccttctatcacctcccctgctca
-cacccagtctggcttacagtttcgttctgcaactagccctcctcacctgcccaaaaattt
-cctcttaaaaaggtggcttgagctgaaggcacagtcaaggttaatgctcctttttcttta
-tctgacctctcccagatcagttagcatttaggctctttttcatcaaatataaaaacccag
-ccccgttcatggcccacttagcagctaccattagatgcttcacagccctagacccagagg
-ggccagaaggccaccttatccttaatatgtattttattacccaatctgctcccaacatta
-gaaaaagctccaaaaatgagattccggccctcaaaccccacaacaggacttaatgaacct
-tgccttcaaggtgtacaataatagagaagaggcagccaagtggcaacatatttctgagtt
-gcaattactcgcctctgctgtaagagaaaccccagccacatccagcacacaagaacttca
-aaacgcctaagccgcagcagacagttgttcctccaggacctcctcccacaggatcttgct
-tcaagtgctggaaatctggccactgggccaagaaatgtccacagcctgggattcctccta
-agccgtgtcccatctttgcgggaccccactggaaatccaactgtcccactcgcccaccaa
-ccacacccagagcccctggaaatctggcccaaggctgtctgactgactccttcccagatc
-ttctcttcttagctgctgaagactgacactgcctgattgcctcagaagcctcctggacca
-tcacagatgctttaggtaactcttacagtggagggtaagtctgtcccctttttaatcaat
-acagaggctacccactccacattacctacttttcaagggcctgtttcccttgcctccata
-actgttgcgggtattgacggccaggctgctagactccttaaaactccccagctttggtgc
-caactgggacaaaattttttttttttttgagatggagtctctctctattgcccaggctgg
-agtgcagtggcgcgatctcggctcactgcaagctccatctcccaggttcatgccattctc
-ctgcctcagcctcccgagtagctgggactacaggtgcctgccaccacgcctagctaattt
-ttttgtattttttttttagtagagacggggtttcaccgtgttagccaggatattctcgat
-ttcctgacctcgtgatttgcccgcctcggcctcccaaagtgctgggattacaggcatgaa
-ccaccgcccccggcctgggacaacattcttttatgcactcttttttaattatccccacct
-gcccagtacccttattaggccaagacattttaacccggacaagtcttacaggctggtcca
-agatcttcgccttatcaaccaaattgtcttgcctatccaccctgtggtgccaaacccata
-tactctcctatcctcaatacgcccctccacaacccattaatctgttctggatctcaaaga
-tgctttctttactattcctttgcatccttcatcccagcctctcttcggtttcacttggac
-tgaccctgacacccatcagcctcagcaacttacctgggctgtactgccacaaggcttcag
-ggacagcccctattacttcagtcaagccctttctcatgatttactttctttccatcactc
-ccacctactctcccactgaaacttccacctatcaatctcttcccacacaaggcaaatggt
-tcttggactaaggaaaattcctccttccagcctcacaggcccattccattctatcgtcct
-ttcataacctcttctatgtgggttacaagccaccagcccacctcttaaaacctctcattt
-cctttaagacatttaccttgtatttcactccatccttggctaccttccccttgctcttca
-gactctcctcccaggccctcttcttgtttgcttatacccagccctgtaaataacagtgaa
-tggttgcttgtagatactcgacgttttttcatgcaccatgaaaattgaacctcctcctct
-aggaagttaccccatcagtctccattacaacctctgacggctgccaccctagctggatcc
-ctaggagtctgggtacaagaaacctttagtactccttctcatctttttactttgcatttc
-cagttttgcctcgcacaaggtctcttcttcctctgtggatcctctacctacatgtgtcta
-cctgctaattggacaggcacatgcacacaagttttccttactcccaaaattcaatttgca
-aatgagaccgaagagttccctgttcccctcatgacaccaacaGTTCACTACTATTTTGTT
-TTGTTTTTCTTATTATTAATATAAAAAGACAGGAATaggccttgacttactcactgctga
-aaaaggaggactctgaatatttccaaatgaagaaggttgttttcacctaaatcaatctgg
-cctggtatatgacaacataaaaaaactcaaggacagagcccaaaaacttgccagtcaagc
-aaataattacactgaacccccttggacactctctaattggatgtcctaggtcctctcaat
-tcttggtcctttaatacctgtttttctccttctcttattcggaccttgtgacttccattt
-agtttctcaattcacacaaaactgcatccaggccatcaccaatcattctatacgacaaat
-gctccttctaacaaccccacaatgtcaccctttaccccaaaatctttcttcagtttactc
-tctcccactctaggttccgacattgctcctaatcctgctcgaagaagccctgagaaacat
-cacccattatctctccataccacctccaaaaattttcgccaccccaacacttcacctcta
-ttttgttttgtcccaacacttcaccactattttgttttgtttttcttattaatataagaa
-gacaggaatgtcaggcctctgagcccaagcctgcacgtgtacatccagatggcctgatgc
-aactggagaaccacaaaagaagtgaaaatggctggttcctgccttaactgatgacattac
-cttgtgacattccttctcctggacaatgagtctcagaagctcccccactgagcaccttgt
-gacccctgcccctgcccacaagagaacaaccccctttaacgtaattttccattacctacc
-caaatcctataaaactgccccaccccatctccctttgctgactcctttttcggactcagt
-ccacctgcactcaggtgattaaaaagctttattgctcacacaaagcctgtttggtggtct
-cttcacacggacgcacgtgacaCTATGTAGCTGTTAAAAACAATGAGGTTGATggctggg
-catggtggctcacacctgtaatcccatgactttgggaggccaaggtgggtggatcgctta
-agctcaggatttggagaccagcctgggtaacatggtgaaaccttgtgtctactaaaatca
-gaacaaaattagctgaaggtggtggtgcatgcctctagtctcagctacttgcggggctga
-ggcaggaggatggctttagcctaggaggtggttgcagtgagctctgatcatgccactgct
-ctccagcctgggcgacagagcaaaaccctatcttaaaacaaaacaaacaaacaagcaaga
-aTGAGGTTGAGCTACATCAGATGCTGATCTGAAAAGATGTCCCTGTCATGCTTATGAGTA
-AAAAAAGAAACCAAGAGGCAGAACACTATATACAATGTGGATCCATTTGTGTGTAAGAAT
-GATCCAAATGATGTATTTTTATACAAAAACCGAGAAGATCAAACTATTAACAGTAGCGAT
-TTGCTTCAGGGGAGGGGGTTTCAATAGGGTGATGGTGATGGCGTTTTCTTTTTACATTAC
-CTATATTGAAATTGTTTGGATTTTAAAAGTAGAATGAGAGTGTATACAGGTATAATTAAT
-AGAATATTTAACAACTAGTATATAAACACTAGGAGTCCCTAACTGATGTCCTGGACCCcc
-agggatctgtgaatagaattcaaggaacctgtaaacttgcattaaaaaaaaaaggacatg
-cttttcccactagtctctaactgatattaacttttcctgtggtagtgagtatatgccaca
-ggctattacagtggtgatagcagggcctgcagctttgtcactagtagaaaccgcagatac
-tctaatatctcattgcagtgattgcggatatctacgacacattgtgtatactcacctcag
-cctcaaaattatggaaggtacttgacccaccactcagtcttgttattttgtgcattaata
-cagaaataatataggactatatcagaaacctgttttctgttatgttgacatttgcatctc
-aaggcaatttgtttcctttataaatctatgcatttaattttacatttcaaaaaaaaattt
-ttttttctgagagagggtcaccggatgccaaaggaccccaaggtacaggaaaggttaaga
-cccctgAAGGCCTGTCCCACACAAGGTTCCTCACTGGTGTccccagtaggctaccaactc
-tgagagtgcaaggactttgcctgccttCTGGGGCCTGGAAGACTGTCTGGATATTTgtag
-gctctgctgttgaccccaattatagatgggcaaatggaggttcaggctcagagtcacttc
-cctgaggtcacccatcaagttgcagatgctagattcctcctcatgtctactgatttggaa
-ggctgGGAGGTCAGGTCTTGTGGGTGTAAGAGGGTCAAGGCGGGGGCTGGGCGGGTGAAA
-GTGGTGCTTCCCTCACCCAGGGTACGACCCAGGCTTTAGCCTTGCAGCCAGTGAGCCCAG
-AGGATGGGGTGAACCCTGCTGCTGGCTTCTGCCTGTTGACCCAGTTCCTGGGTCTCTGCC
-CAGACTTGTTCCAGAACCAGACCCAAAGCACCAAGGTTTCTGTGAATGGGGGTGGCAtta
-aggaaacttacccttctagttggtcagacccagcctctcagagctgccctgctttccttt
-gtctctctcacatcctgcatccaatctgttgtctctaccctcgggcgcatgcagaatctg
-accacttctgcccaaccttgccacttccaccccagtcccagcccccattgtctctagcag
-ggatcaaagcttccttgatactgtcagcatctgtcattgctccctgggcccccaggctat
-gctccacacatagccagtgacgtcctggtcaacctgtcagattatgaccccctctgctct
-aaaccctgccttgggtcccgtgtggcttagagaggaccaggactccttgcagATTCCTTT
-AGTGAAGAACAAAATTCTTTGCTTTGGAAACAGGTAAAACAGTCCCCAGTGAACAGAGTC
-CAAACCAGGCTGTACTGGGATGGTGTGGGAATTGGGATGAAGCCTGTTCTAGGTCCTAGG
-CTGAACCAAAGCCCCATGGCTGGGGTGGTGCAGGGTGTGGAGATTTGAGCCCGGCCTGAC
-GGTAAAAGGAAACGGGCTTTAGCAGGGATGCCCCAGGGGTAGGAGCCCAGGCAGGGAGAC
-ATCTGGGGAGCAAAGACTTAGTGAGGGGGAGACCTAAATGATGCTCTCagggacctctca
-gctcccatcccctccatttcacagatgggaaaactgaggtcccaatcaggaaaataaagt
-gccagaggctgtacacaggagctaatggccagatctggTGCAGACGTATGAAAATCTGGA
-GGGTCAGATCTTACCTAGCTGTGTGTGTGTGTTTCAACTTAAATGTAAATCTTTGTAATT
-TTATTTTTCGAATGGGTGATATAAACACATTGTTCAAAATTCCAAGGAACAAAAAGGAGT
-GAAGTGAAAAACAAATTTTTCTGTCCCTGCCTCAACCCACAGTTCCCTCCCTACAGGCCA
-CTGAGGGAGGTTCCTGGGTTTCCTTCCAGAGAAACGCTATGCATACTTCTACATCTGCAG
-TAACTGTGTTTCCATCCCACCACCTGCCCTTCAGGCTACAAAAACCTCAGCTTGccattc
-cacacctggcttccttttgcttaacattgttcatagcatgttccacattcatccaggtag
-acttgcctcagcattgtaagctgcttgaaattccatctatgggcctccattgtttgctca
-tctagtcccctctagctgggcctgtaggatgtttccaggctttaacatcaaaaacagggc
-tgctacaaatatccttgtacacctgtcacttaacattcccacaagtctatgtggggaata
-aatcctctgaagtagaattgcttcaaagtagagtgaaatcacacgtttttttggtccttt
-gttttttgaggcagagtcttgctttatcacccaggctggagtgcaatggtgtgatcatgg
-ctcactgcagccttgaattcccaggctcaagcgatcttcccacctcagcctcccaagtat
-ctgggactataggcatgtgccaccaggcccagccaatttttcagtatttttttgtagaga
-ccagggtcttgctttgttgcctcaggctggtctcaaactcctgagctcgagtgatcctcc
-cacctcacctcagcctcccaaaacagttgtgattttgactatcgttaacaaactgccctt
-ggcagaggttatgccTAGTGGTTTCTGCCCCTTTGGAGGAGAGGCCCTAGGGTCTGCAGA
-GGTGGCCACAGGAGCCACAGAGTTGCTTATTGCACCCCCTCCCAATACGCATCCACACCT
-CCCAATCTCAGTAGCACCAAAGCATCTCCCACCAGCTtccttctgacttctaggtctccc
-tgaaaatgtcacctcctctgagaagcattccctgaccacccccactctactccacctgtt
-tatcacagtgtgcactctggcttctacacagtacttcatgccatctgaaatcactttagt
-catttgtcatttgtccaattcccccacgagaagagccccaggagtgcagaggtttgtctg
-ccctgttcatgagcacatcctctatgcctagaatagggctaggcatatgagaggtcctcg
-ataaatatttgtggaaagagcagatGGGTCAGTTTTGTGTAAGGGGCACGAGATTTCCAC
-TGAATAGTTGTTTGGCAGCTAGAAGCAAGTTAGGAGCCTCGAGCCCAGGCCCAGCCACTG
-CTGGAGCCTGTGAGAGGCAAAGGCAGTGGAGACCACAGAGACCAGAGAACAGAGAGCTAA
-CTGGTGCCAGGGCAGAAAGAAAGGGGAAGAAACACCAGCACAGAGATGGGAGGGGCAGGA
-AGGAGGGTTCCCAGGAGGGAGGCCCATGGCAAGGGAGGGAGTCAGCTTGGGGTATCTGCA
-GGAGGAATGTTCTAGAAATGAACAAGACATAGTCTTGGTGCTCATttccttcctccaacc
-aactcattcagatgtgccgagacctgggcatggtgctggggatagagcagctaccagaac
-aggccaggctctgcactGCTGCTGCGGTCTCCCAAGGAAGATATCTAAAGGGCtactctg
-tcccaggcatgaccccaaggccctacaaatacagctcatttagtccttggtgctcccatt
-gtcaccattttacagatgaggaaaggaaggcattgagaagatgagcatcttgcctaagtg
-gcaaagactggatttaaatataggcctttggtctccagagaccacacccttagccactCG
-GTGGGCTGCTtgtggcagctagccttcaggatgaccccagggatcctggtgctcatgccc
-ttgtgtagtcccctctctcaacaagtcaggactggctggcatgactaattagatattgta
-gaaacgttagtgtgacttccttggctaaaccattgcattgtgtcttctgtcttgccctct
-cttggaccacacgctttagaggaagtaggccactatggcctgaggacccttaagcagccc
-ttgggaggaagccatctggaggggaactgaggccttctactcacagccagcgccagctca
-ccagccacaggaggccgagccccagcccaggtcaagccttcagatgagtgcagccctagc
-tgatacctgagtgcaaccacatgaaaaaaaccccaagtcggaactaccttgttaagttgc
-ttcagaattcctgaccctcagaaactatgaaagataagaaatgtttgttgttattttaag
-ctgctaaatgttttagggtaatttgttatgccacaatagataactaatataCTGCTTTTC
-CAGAGCTTATAGAGGTTTAACCCTCTTGCTTCTCTTCTCTGCCATCCCCAGGCCTCAGTT
-TCCTCATTTTGACAATGGGCTGACTTGTGATTTATGAGGGTTGGCCCCTCCTCCTCTGCC
-TTGCTTCTGTCCCCTGGGCCTGCACCAGGCCCTCACCCTGTGGCTCAATGCAGACTGAAA
-TGGTTTGTCTTGTCCTGTCTGAGCAGCTGGGCCCAAGCCTTCCTCATTGTTTTCCTCTCT
-GCAAGACATACTATTGCTTTTCTTCTGGGTCAGGCTCTGGGCAAGCACAGCCAGTGGGCT
-GAGAGCCAGGGGTAGAGAGACTTGGGGACCAACGGGCTCTCACGGAGGGATGAGCTTCTC
-AACCCTAGCTCAACCCTCAATTCTTTGACACAGGCCCAGCGTCTCCAAACATCcagtgtg
-gtctgggcctggagcactgcactgagagtcagcaagcttgctcaatagctttgccatttc
-ctttctctgccagtgatgagtttctctgaacctcagtggcctcattgtttcctccttgca
-gagcgcctggaaggaatagggaaatggccactgggacctgtgttctgtggatctgggcta
-ggattcttgtctgtctggttcatgaggcctagcacagtgcctggcacacagtagtgcctc
-ccatatttgtggaatATTTGGGACTTCCCTGGCTCCTGAGCCTCACCTTTCATGGGGTGG
-CAGGTCCAGTGTTCATCCCAGGTGAAAGGCCACAAGGAGAAGATGAGGAGTGTGGCGGAA
-AGGGCTGCAGAGGGAGGGGAGCAGGGCCTGCCTCTGCCATCTGGACTTGGGAGGGGCTGC
-CAGGGTCCCTGCCTCCTCAGGCTCAGGTATGCCTTTGGTGGTCGTCTATATTTCAACCTT
-GATCTTGGGAGGTGTTTGCGATCGCTCACCTCCCTGACACTTGAAAGTCACAGAATGGAG
-AGGTGTGTCCATTTTGCTTGGcaacatgcttattgaacagttattatgtggtcagcactg
-ttctaaccactaggtatatgaagtccttgcagccaccctccaaggtaggacctgttatcg
-acctattttacagacgaggcacagagaggttaaacaacttgtccaaggacaggtagctct
-tcacaggtgtaaccaggCGGTGCTTCTGCAAGGCCTCTTGGCTAGAGTGATCATGTGACA
-GCGCCCCTGCCCACCCCCCAACCTCACCTCAACTTTGGGAAAATAGGGCAAAGTATGTTC
-TAGACACAGGGAGGCTTTGCTGGGGTATCTCCCCACGTGGCACCAGGCCTTTCTGCCTGT
-ACGACTCCAGTGTGTACCTCttctcttattggatccccagcagcctggaggaaaagggtg
-attgttccccacacaaatgagtaaactaaggcccacaaaggccgagcattactcacagct
-ggtaaaggaagaTTTTTAACTTAATGGCTGAGCTCTTTCTATGTGCCTGTCTTGCCTTCT
-TGGTGGCTGAGGCTGATCCTGCAGATGGGGTGACAGGGATAAGATTAGGGTCAGACAAAG
-ATGGTGGAAGCTGGCTCAGAGGTCCACAGTCTATCAGAGAATGATCCTCAGTGAGGACAG
-GACAGAAAAGTGGCCACATCTCTTCCCAGTCTCCATGGTCCTCCACGGAGAACAGGGTCA
-GGACCAGGGACATCTGtctggctcctggtgagcactccagtctcatcttggccatgctct
-cctcgctctctgcactgtagacacactgaatgccttttgcttttggcccattctaccccc
-agggcctttgcacttgctgtcccgtgtgcctggaatgcttttgcttcctttccctgtctc
-gccactgccaacccagcctttagatctcagctctgtccttcttcctagtgcctccctccc
-tcaaggtcaggcacccattatccacccctagcatctctcggtccctccttcatggcacat
-atcatgattgatcgttgcacatgggaaatcactaggttagttacacccactgctccaggg
-gcaagggggaaggatggtcttccttgctcactactaaatccttgtcacttgcatggcgcc
-tggcgcattgtaagccctcaataaacagtggtggaagggacaaTTAAATGAATGCAGGAA
-TGAATATTCTTACCTGACAAACTAAGTTCAGAGTTGTGTATACACATTTGTGTTTGTGTG
-TGGTGGGGGGCAGGAGTCGGGGGTTGCACATCTACACATAGTCCCAGAATTGAAAGGATG
-CATGATTTTTTCATGACATTTATGGCATGCTATGTATCTTGTTGCCTCTGGAGAGGAGAA
-ACAGGGGTCTCAGctgggtgtcaggaaccctgggttctgggccaactcctgccaccgacc
-cttgggtgaatgtgattgagtcactcccttgcccaggcttagtgttcccatctgtaaaTG
-GTGGGCACAGAGAGGTGGTCTgtgtagtggttaagactgtgggttctggagccagtctgc
-ccgggtacgaactcacctccctcacttcttagctgtgtaaactccctgggcctccgtttc
-cccgcaataaatggggatcataacagtccccaccttttaggatgccacgaggtttatgag
-tcaatgtttataagacacatataaagtgcctggcccagagaaagTCCCATATGTGAATTC
-ACCCCAGCAAAGCACTTATCCCAGAAGACAGAGGAaacaatagtagcatctcctggttct
-ctgtgctggagcagtgccaggcacatcccctgaccagccatttgagcctcacagcaaacc
-caggcgatgtgtgtatcatcacctcaattttatagattgaaaaactgaagctcaggtctt
-tctcatagttacacagctaataaTCTCACAGATGTAAAGTTGAGGGAACAAAAGGAAACT
-ATAGTAAGATATGGATGGTACGACAGGATTCCTTCCTTGCACCGTGAATCCTGGAGTCTT
-Gacgtttactgagcacttactctctgccaggccctgtactgagccccacatgtgcattgc
-ctcatttaatctcctcaataacctgcaaagtagcttctgttagtgtcctcacttcacaga
-taaggaaaccgagtcacagagtggaaaagcaatggtctgagaaggcacagccagtaagca
-gtggagctgggattcagactgagtcaactgggactcagggcctacactcGGCTTCTGTGG
-GATTTGCCCCCAGGCCCTGGGCCAAGAATGGGGTGTGTAATTGTGGGGACACCCAGACTG
-AGCTTCTGGAGCCCCTTAGCTTTTCAGAACGGCCACAGCTGCCTGAGGCCCTACCTGAAT
-CATCCCTGGCAGAAAAGCCCTAGGGAGCCTTGGGCCAAGGGTTCCTGGGGGAAGAAAAAT
-CTAGTAGCTATGGATCTCCCCTTTGGGGACCAGGGTCCTCTATATTTTCCAGGTCCCAGC
-TAATGCCCAGGGACCCATCCACCATGGACATGGCTTATTTATTGGACAGAAAACTGGCTT
-AAGTTCtgagataataggttccggcatcagatggctgaatctgactttgcccttcttggc
-tgtaagatcttgggcaagtcacctaatctcttggtgcctcagtttcctcatctgttagtg
-gacaagcaatcttacttcactgggtcatggtgagaattaaatgccgtaacataaagcacc
-taggacagtgtgtggcatacagtaaatgctcactaaatgagtgcttactcattACGTCAT
-AACTGCTTtttcatcctccactcattctgggaggcacgagtattttgagttccactttag
-agaggagccaattgatatatgtggcttccccgggttcccatagctttgagtggtacccct
-gggacttgacctcctgaccccaaCTTGGTCCTCCCCAGACCCCACAGCCAACTCTCAGGG
-TTCATTCCTGACATTTCAGAGCTGGCTCTGAGGTTATGCAAACAAACTGCGGCCAGAGTC
-TGACTGGAGGTGCAGGCTTAGGGGGCAGACCTGGGGCCCGTTTTCTAACATTTCCTGCCC
-AAGGAGAAGGAGAAGAAGGTCTGTGTACATCCCAGCCTGGCTGAGCTCTAAGGCCAGGGA
-GGAGAGAACTAGAAACATGTGGCCCTGCCCTCTGTGGGATGGCTGGCCAAGCCAGTTGAA
-CAAATAAACCCGTCCTTTTGGGGGAAGTCGTCAGGGGGTCTGCTGCTGCTGGTGCCTGCC
-CTGCACCCCCACCTCATCCCAGGCATGAGCCAGCTGGTCATCCCCAGGCCGAGGGTATCT
-GTGCCAGCTGTTTCCAGGCCCCCTTCTTGGAAAAATCATCCCATTCCTCTAAGAAGCAGA
-TGCTGTTTCCCCCATCCCCCAGTCCCAAACTGCTTAGAAAGGAGCCAGCAGTGAGGTTAG
-GAAATCAAACCCCAAGATATTTTGTTCGGCACCGAGACTCATTTCTTGTTTGGATAACTG
-AAGGCTGAAAATGCCAAGAATTTGTGGGCAGCCTGGGAAGGCTGGGGCAACTGGAACCCT
-GACTCCCAAACCAGGTCAGTTTGGGAGGGTCTCAGGCTGGGCAAGGACCCCACCCTGGGT
-TCCTCCTTGGTGCTCTCTTGACCCACACCCAGTTAGGCAGGGCCTCACAACTGCCAGGCC
-GAGGGGCCCAGTTATTCTGAGGTTTGATGTCAGAGACCTGGAGCAAACAGCAGAGGCTGG
-GGCAGTGCCAGGTTGGGAGGCCCCTGCCCAGCCCCTGACCCCTCTCTGCTTGGCTTTGGG
-TGCAGAGGAGGAAGAGAAAGAGGCCTCGGCTGAGCAGCCAGCTGCAGGGTGGGCATTGGT
-CATTTGGCAGATGTGCCCTGGGTCTTCAGTGTGGACACTCGGGGAGGTAGAGGTGGGAGG
-GATGGCCTTGGGGTGAGAAAAGGAGGAGCTGAGAAAGAGACAGGAAAAGATGCAGGGAGT
-CACTTTGATAGCCAACCAGGAGAGAGAATCAGAGACAGAGACACCCACAGAGTTAGCAAC
-AGTGAGTCAGGGCCACCGCGAGAGCCCCAGGAGAGATCCACAGAGGCAGAGAGACTCAGA
-AATAGAGACAGgctgaccacagtggctcgtgtccgccgtcccagctacttggaagactga
-ggcgggaggatcgcttgagctcaggagttcaaggctgcagtgagctgtgattgcaccatt
-gcaccccagtgtggttgagagagtcagaccttgtctttaggagagagacagagagaggga
-gagagggacagagagagggagagagagacagagagagggagaaagagacagagacagaca
-gagatagacagggagataggcagagagagGGCTGCCATGGACCCCAGGCCAGCAGCTGCT
-GGCTGCTCCCTAAAGGTGAGAAAGTAGTTCTCACCTGCAGTTTCCAGGTGGGGTCAGCCC
-TGCCTCTGGGAGCTCAGAGACTGGGGAAGATGTGCTGCCCTCAGGTGGTGGGGGTGGGCC
-AGAGAGGCTGGGGCTTGTGTCTGGCCCTGGTTTTcctcattctcctcatctgtataatgg
-atcattctgtggggccatgaagagaaggCAGAGTATGGCACTTCTTGGATGGGACACCTG
-GGGCAACTGGGGGAATGGCAGTCACACACGGGAGCCCttattgagcacctgctgtgtgca
-gaggctttctctgctctgcttctcttgaccccacatcaaaggtcaggggtaggtgctgtc
-attctcctcccagcctccggattaggcactgagAGGGAAGGGCCAGCACTGGGTCCTAGA
-GGGAGGGCATGGTGGACAGAGGAGGTCATGTGACTAGCCACTGAGCTGCCCAGCCCAGCT
-AGAGATGCCTGCACTGCAGCCGGCTCTGTCCCCCAACCTCCTCAATATTCCTGCCTGCAG
-CTTCTCATCCATATGAGCGGGGTGGAGCAGAGCCCAGAGCTGACGTGCAGCCCCAGGAGC
-TGGCTCCAGATGGGAGTTACTGGGGCAGGGGCTTTCCaggagcgaggaggaggagagaga
-gggaggcagaaggagggggagagcagggagaagaaagggaaggggagtgcaggggaggag
-gagagtatgaaagaggagagagagagaagaggtgaggCCGGGGCTCTCCCCATGCCTGAT
-GAGCACTGGCAGTAGGACACAGCAAGCTGTATGCTAGGAAAGAGTGCGTATCTGGGGACT
-TGGAAACTCTGCAGTAGAAGGGAGCACCAAGAGCATCCCATCCTCTCTAGATCTTGCTTC
-CCTTGCCTCCTTGACACCTTCCAgagtcaggaaaaagtacctgcagtttgtagtgagaat
-ccagattggctttcactgctacatggctctggcaagtcactttccctctctggcctgttt
-cctcacctgtacactgggggaacaggaGGGGAGTTGGGGGCACAGGCTGAGCAGATGATG
-GCTTCTGGGATTCGCGACAGGAAGGATCTCCCCTGTGTCTGTCTAGATGAACAGAATCTT
-GCTGAGAGCTTGTTCATCCCTAATGGCAatggtgatgatggtgatgatgatgctgatggt
-gCCATTAGATGAGTATTTTAAAACTCTTTTTTTAACTTTTCTGAGATGTTAGAGAAAAAG
-CCAAAAAAAGGCTTTGAGTTTCAGAAGATCTGAGATATGCCTGGACCAAGAGAAGAACCA
-GAGGAAGGTCACAGCCACAGCCACAGAAGGTAGCAAGCACTCCCCACTGGGGACCAGGAG
-TGTCAGAGGGGGCAGAGAGAAATTATTGTTTACATGAACCAAGGGAGACCGAAACCTGCT
-CATCTGTAGCCATTTGGTAAGGAAGTACCTGCAGCCAGGTCAGCTGAACTCCCATATCAG
-AGATCTTAGGCCCTACGGCACTCTACGGTGACCTGACTGACCCTAGCTCAGAATTTTCAG
-GCTAGGTGAATGGATGCCTGGAGAGGACATTCCACCCCAAGCTGAGGCACTGGACCAGGT
-GACCTTCTGATCCTGCAAGCCATCAGTTCAAGCCATCAGCTCTCAGCCAATGTTTCCCAA
-GCATCCGACACCCAGGGGATTCAAAGATGGATGAGAGTGAGAGGTGAGACTTGGGGTAGG
-AGGCCCAGTGGGAGGTGATGACAGCATCCTGGGAAAGATGACGAGGCCTAAGCCAGAAAG
-ATGGACCATGAGAGAAGCCTAGGCCACAGGATGGGCTGGGCCAGCTGCCTGGGGGATAGG
-TGGGAGCCACAGGAAGCCCCCAGGGCACAGCCTGTGGCTGGGTGGTGGTGTCACCCTAAA
-CAGAGACAGACAGGCAGGAGGAGGGTGTTTGGAGAAGAGCAGGGAGTCGTCTCAGGCAGC
-TTTGGAGTTGAGACACCCATGGACCCTCAGGGAGGTGTTGGGGGAGATCCAGGTCATGGG
-TTTTGGGCTCAGGATCCCATCAATGCCAATTTTGTGTCATCACGGAGCAGGATGGAGACC
-TGGGACCTGAGAGATTGGAAGGACATTTATGCATTCATGCattcactcatgctacagaca
-tttattgagtacctactgtgtgttcggcactattctaggccctgggaacccagaagtgag
-caaaagagacatggcgcctgccctctgggagctcacacaccaaaagaaatgtttttaaga
-acattaggtagggataagttctaagaaaaaaaaacacaacaaagccagcagagggacaaa
-gggtggaagaggaaggtggttatttcgtacggggaggacaaggagggcctctggggagat
-ggcgctggagaggataggaggctggggtaagcaaagtgggagtctgggagagggaactcc
-agggagtaagggttcttgcttttattcggatgcatggttagccctgggaggagggagagg
-atgtaacttaggttttgatggggattctttggtctgctgcatggagaacaggaggtgggg
-gccgagtgttagcagggagccaggggggcagccaggacagctatcctgcctggagccaga
-ggtggttGTCAAGCTTGTCTGCTGTTTAATACCTTCTAAAACTCCAGGAATTAGTTCGCA
-TCCTTCATTCCTCAGTCATCGCCCAGACTGTCTCCTGGGTCCCTCTCCCTTTCCTTGGTA
-GCTCTCACTTAGGGACTCTGAAGAGTCCCATCTCAGACCCCCCAGGATGTCTCCTGTACC
-CTCATGCCCCGCCAGGGCCAAGCCTGCTTTGCACACCTCTGTAGTCAGTGCTTCTCCGAG
-GGTACACAATAGGTGCTCACACTGCTGAAAGACGAAAGCATGACAGGGCATTCTACAGCA
-GCCCTGGTcttgggccaaaaccacagtggcatcctcagctccttgcttcctcccactccg
-catccaattcaccagcagagctgatgggctctacctccagaacccaccagaatcttactg
-gccacaccccctcctagccccgttctgctccaggcctccggtaccttgcacctgatggct
-gcagcggccacctctttgggcttcttccttccaccctgcctcctacagtctatgctgttg
-aaatcgaatcacgggtgtctgtctctgctcacaaccttgcagtggctcccatgacactca
-gaacaaaagctgaagtccttccagtggccccccccccagctgcatggcctgccctgctgt
-cacctctcagacctccccgcacccttgctccctctcctctgctccagctacacaggcctt
-cgccccatggttctccaggcacacaccgctgcggatgcattccctcctcacggtcaaaat
-acatgcagctccctttgcagaacgttccctcaaatacctgcctggcccactctatcattt
-cccttgttctctgggttcaaatgtcacctcctctgagaagtactctctaatgatctgacc
-tcaagcagccacccagggccgccacttgccctctttcttcttcattttgcttcaccatct
-gacatagtagattatctcttactgcctctttcccctactagtccagagggagacatacta
-tactgtcgtatccccagcacccaggaaggcttggtccgttcagcccttggtcagggctga
-atggatttctgttggatgaatgaaGGGACGGCAGTTAAAGAGCCAGGTTGCCAGCTGACA
-TTGCCCAATCTTGCTGTGTGGCCTCAGACCCACCCCTGCCCCTCTTTGTGCAGCTCAGAG
-ACAGCCCTCTGTGCTCAGGGAAGGCCTCTTGGATGGACACTCCACCTGCTGATTGTGACA
-GACCCCAAAGCCGCCCTCTGCCCCCTGCAAACCTCCCATGCCCCGTACCTTCTTCAGCCA
-CTGCGTGTTGTTCTGCAGTGCCTGCTCCAGCTGTTTCACCTGCTGGGTGGGCAACTTCCC
-CAGGTGCAGTGGGTTGGCCAGTGATTCTCTCTGGAGGGTGTTGGAGTCCCTGGAGACCTC
-AGGCCCCGGAGGGCAGGGCTCAGACTTGGGCAGCAAGAAGGTGTAGCTACAGTGGCCGTG
-CTGGACTACAAGTGTCTCGCAGCCCCTATCCGCCTCCTGCCTTGTCTGTTGAGCCACAGA
-CATGGTGGCAACCACAAGGAGGAGGCTGCCCTGCAGCATGGCTAGCTGGGAGAGCATCTG
-AAGATGTGTCAATGGCGAGGGATGTCTGCTCAGAGCCCTAGGGGCTGTGCCTGGGATGTC
-CTGCTGCAGCCAACAGTGGCCAGGCTTGCCTGCAGCTGCAGCTACAAACCTCTGTCTGGC
-CGAGCTCTGTCCAGGCAGCTATTTATACTTGCTCTGAATACCACGGCTGCTCTGCTTGCT
-TCCTCTCACCGCCTCCCTCCGGCCCCACCCGACACCCTCTCACCTCTATTCTTCACTCCT
-TCCCTTCCTCCTTCCTCAGTCTTGGTGGCACGTCGCCCTTACCCTAAGCGTGCACCAACC
-TTGCTCTGTCTGCCTCACCTCTGAGCCCTCTGATTATCCAGTGAGGCCTGGCTTCCCTGC
-TGGAGGGGAGGGAAGAAAACAGcacacagacacgcgcacacactcatgcacacactcacg
-agcacacactcacacgcacgctgacacgcacacacattcatgtacacacaAACGCCAAGC
-TCCAATGCTGCCCGCTTTGGAAAACCAAATGCAACTTAACTCTCCCTTCCTGTCTCTGTC
-TTGGTCTCCCTCTTTCCCTCCACCCCCATCCCCTGCCCCCCAAGTCTAAGATCTCAAGTT
-TCAGTCCCGCTGCCATCCCCTTCTCTCCCCGCTGCACCTTCCTCCCTCTGGTTCCATGTT
-AGCGCTTGGAGTACAAGTGACCCCCGGAGAGAGCAGAGGGAGGGGAGGAGGCAGAGGGGT
-GAGGCTGGGGAGGGCCCAGCGAATCCACTTTGCCTCTGGAGACACAGAAAATCCTTCCAA
-GGTGGGGCAAGTGAGCAACCCAGCTGGGAGTTGCTTCCTGTCCTCTCTTCTCCCTCAGGG
-CCAGGGGAAAGTGGTATGCCCCAGGATGGCCCTGGCTTGGTTGCTTGTAACAGTAATGAG
-AAGTTGTCATGTCCTGGGGCAGATTGTCCTGGGGCTGCTGGAGTGGGGATGTGGAGAGGA
-Ggcagtggggagaggaggttggagtgccaggaggctaaccctagatctcgctccccgaca
-gctggccacgagacctagggtgggcagctgtgcctctctgggcctccacaccctgatctg
-taaactgggtaaaccttatctcttgcaggAGGAATGCGTGTGAGTCCTCAGCATGGGGAT
-GGAGAAGTTTTCAGCTTctgggttcaaatcctggctctaccatctaccagctgtatgact
-ttgagtaagtcacttaacctctctgtgccttcatttcctcctgaatgaggaaaataatac
-cacctacttcacatggcatgaaaattaggtgagttagagcaaggttggcacagagcgagc
-actaaataaatattTTCCGTTGTCAATgttatagttgtcattgcacctcccctcccacga
-cccactggagcataaactcctctagggcagggatttgtcCCTGGGGGACATGGTCTCCAG
-GCAGAAGGTGCCCAGGAGTTGGTGGGGCCTTTCCTGCATGGGCTGCCTTTATGTTCTGCC
-AGCTGTTTGGGCTTTTCCTCTCTCCCTGCTTGTTTCCTCAGAGTAGGGGCCAGTCTGGCT
-GTTTAGTATTTTCCTTTTTGTTCTCTCAAATCCCGATAGAGTTTTGAATTGGGGCAGGCT
-GCTTCTGGGCAGCTGTGAACTGTGGTCTCATCTGGGGACTGAGAACATTATACCAGGTGT
-GGGGCTTTTGCAGGCAAAGGAAAAGCAGCTGGTTATCAGCCTCCAGCCTCCCCTGAGCCT
-TCCCACATGCTCTGAGCTCTGCGTGCCCCGCTTGGCCCCAGTTGCCTCAGCTGTAAATGG
-GGTCATAGCACCCTGACCATGTGAGAGTAATGTGGACTGATAGCTTATCACAGCTCTGGG
-TGCAGAGAAGGGCAGTGTGAATGGTGGTCGTCATTATGATTGTCTTGACTGAGCTGCTTG
-ATAATCCCAACGAGgcagttacaccaggccccaagcttagatgggccccatgcttggttt
-acactctgccagcactgtcttgaaattcttaatacatttggaacaaagtactcagcactt
-gcattcttcattgagttccacaaattaggtagcaggccctgCCTGGGAAACATGAGGCTT
-CCCTCATCCCTCACTCTGCTCCTGACCTTACCATCCAATCAGACCTGTTCTTCCAACATG
-ATCCTTTAGATATTTCCCCCTCTGTCACCTCTTCACTACTCAGAATGCtggagccagcac
-atctggatcggaatcttggctttcctgaccccctatttgtgtgccttttgccaagttgcc
-taacctgtctctcagtttcctcttctgtcaaaatagtgatgttacagtggctaaaagacc
-gattcctgcagtgaggttaacacagagcctttcacataatacatgctcaaccagtgacag
-ctgtcatcattACTCCCtgctatgatatgaatgtttgtgtgcccccaaattgatctattg
-aaacttagtcaacaaggtgatggtattagaaggtggggcctttgggagtgaatagctcgt
-gaggactctgccttgggaatgagattaacgctcctatcaaacatgtcctagacagctggc
-cttcccttttgctaggtgacgttgcagtaagaaagcaccgtctatgaagcagggagctct
-caccagacaccagatcggctggtgccttgatcttggaattcccagcctccagaactgtga
-gaaataagtttctgttgtttataagccccccagcttagtgcattttgttatagcaacctg
-aatgggctaagacaCCCCACCATCACTCTCTTAGACCGGGGTGCTTCCTCTCTTGTAGGG
-AGAACAACAGCCTCAGAAGTGAACTCTGGTTAATTGGCCTTTGCTATTGCAACCAGAGTG
-Accttccttccttccttccttccttttttctttctttctttccttcttctctttctttct
-ttctttctccttttttttgacagagtcttgctctgttgtccaggctatagtgcagtggca
-tgatcttggctcactgcaacctccatctccccggttcgcgtgattctcctgcctcagctt
-ccccagtagctgggattacaggcatacgccaccatgcccaactaatttttgtatttttag
-tagagacggtgtttcactatgttgcccaggctggtctcaaactcctgacctcaggtgatc
-cacgcacctcggcctcccaaagttctaggattgcaggtgtgagtcaccatgcccagccca
-gagtgatttttctaagacacaatccagccctgacttctttgtttaaaattcttcagtttt
-gaactccaactctttctgtggtttacaagcccctgccggatgtggcctccattctcatca
-ctgtttccctggcactttataccttatcattTGGAATTGGTTTTACTCCCCCGCATGCTT
-TCCGCCTTCTGAGGCCTCAGTGTCTATGCTCCTAGCAGGAAACTtctgcttaaaaacttc
-cccccacctgtattgtcccagcttcgttctgcctgtcttttgatcttatctcagggatca
-cctcctctgggaaggctttctgcatctgtccctcccacttcaatgggagtaggccttctg
-cctctgggagctcaaaggcccctgcctgcctgtccctcaccaaagcactcatcctgcatt
-agaaaggcttgtttgcaggccttggtcaccgtctagactgaacactcttctaggtttgct
-gtcacactttccatttctgtgtttgttgcctgtcctaaggttaggctcacagtgggtcct
-catgagtgttatgttgaatgaatAGGAGCTGCAGGCCCAAAGCAGAGAGGAAGGCAGTCC
-CCTTTCCTCTCCAGCAGGGGCAGCAGGAAGTTCTGTGTGAGTTGTTCTGAGTGTCTGGCC
-TCCAAATCCTAAAAACAAACCAACCCATGTTGATTTTCCCATTGTCTGCTGCTACCATGG
-AGGTAGAGAACGGAGAATAAACTTATATCCACCTGGATACTTTGGCTTTTGTtcaaatag
-cttgggtaaaaagggaatttattggccaatttaactgaaaattttaggggtatcgagctt
-caggcatggctggatccaggtgctcaaatgatattagattttttttttttcctccaactc
-caggctcttattttccttcatttccttattttcctttgggttcattctgtaagagttccc
-accataatcaccaccactactggcaacagcagctccaatctatcaactcagtaacctctt
-ttaagagtgcctctttcctaatagttcttggaaaagttccagcttgagccgtacagtcat
-tcctgaaccaactattatagccagaggaaggagctactgtggatggtcaggctggatcct
-gtgtccaggcctggagccttggagcaggtcaacctcacaggatcggaagggactaagggt
-ggggtacagtgacgctcaagaaaacctggagtagaatgatcaggaggcgggtggagttgt
-tgggcaTAAAGCACCTGCCTGCCTGCACCCTGACTCTCCATCCCGCCACCCACCAAGTGA
-ACCCACCTCCCGCtcagagctgatggactcttggagtaactagagatgccatggaccctt
-accttgcatttcactcatgaggaaactgatactcagagagggaggccacttgcccagtgt
-tacaTGCTGGAATCTATTTTCCTGGAAGAACAGAACTTCCTGCTCCTAGGAGTGAAGGGT
-GGGAAAACAGGGTCATTCCGGGAGGACCACTTGCCAATTTGGGGTCCTGAAGTACCTGGA
-TCCAAAAGAAGAAGACTGTCCCCAGTCTGAATCTCCCACTCTGGGGAGAGGGTCACTCCT
-GGGTTGTTCCCACAATCCAGCCCTTCTGCCAGCCCCTCCCTTGGCAACTCCTTGCATTTC
-AACACCCTGGATGATCATTGAGGGTTGCACGTGGGGCAGCTGAAACAGACCCCAGGCCTC
-TGGTCCTGTGCTGCTCATGCCCCTGAGGACACTGCCTGGGCATCTCCCAGAGCTACTGAT
-GGCAACATGGCAAGAGCCTGGTGGGAAGCTGTGGGGCCATCGACAACCCCGGGGGATGGT
-CTGTGTGTCCTCAGAAGGTCTGGTGGTGAATCTTGTGCAGCAGACATCATGGTGGCCCCG
-TGAGCCTTTCCACCCAAGACAGAAGTCGGTTGACTGCCCTCCTCCACTTTCTACCAACCC
-AGACCTAGAGCCAAACAGAATTCCTGGATCACAAGGGGCCTAGGGTGGGTTTTGAGGTCA
-CCCTGTGACCCAGGCCCAGCTGTTAAGAGCCCCACATTCCTGATGCTCAATCTTGACTTC
-CCTTCAGTAGAtgagactcagtttcctcatctataacatggagaaaataatccctcactg
-ggaaggcggtggtgGTGGGGTCttccagttactgatactgtgtaacaaagtatccccaca
-tctagtggtttaaagcagtggcaacatctactttactcacaaatctgcaattgtggccag
-gttccctgggaaaagctcaactgtgctccattccgtgtcagctggagcaacttgcaggct
-ggggtttgcatccaaaactcatccactcacatatctgaaacctcagctggggcactcagc
-aaggacaactgcatatggcctcttcatgtggctaggggcttcctcatggcatggtggctg
-cttcccagagcaagcatctcaggagagagatttgggcagaaggtaggtgatctttatgac
-ctagcctcatggatcatgcagggccaagtcctctgtatctagtcaaagaagcaaccacaa
-agtcccactcaagttccaggggaggaagaacagactctacctcttgatgaggaggatcaa
-ggtttcagaagaaggtataggatgggggatagtgttgtggccatttttatttatttattt
-tgtttatttttaaatttttatttatttatttatttttgagaaagagtctccctctgttgc
-ccaggctggagggcagtggtgtgatctcagctcactctaacctctgcctcccgggttcaa
-gcaatgcccgtgcctcagcctcccaagtagttgggattacaggcacatgccaccaagtct
-ggctaatttttgtatttttagtagagacagggtttcaccgcattggccaggctggtctcg
-aactcctgacctcaagtgatccacctgcctcggcctcccaaagtgctggggttacaggta
-tgagccatagtgaccggccTGTTATGGCCATTTTTAGAAAATACAACTGGCCATGGGAGG
-GTCGGATGAGAAAATGCCATTTAAGTGTTTAGCATGTAAGTGCTTGATAGTTGGTAGCTG
-TTATTATTATCTTTGCGATTATTGGAAAGACCCAGCATCTCTTTGCATAAAAATATCCTT
-CAGAACCTGTGAGAGCTAAAGGTGCAGGAGGAAGCAGGATAATTTCCATCAGGGCTGCTG
-GAGAAATTGGCCCAGAAACCCACTGGATTTGTCCCAAGTCACCCAGTGTATCAGCAGCAC
-CCAGTCTGAGCAAGACTGGCCTGGGACATAGCTGCTTCTTCTGTTAGTAACGCTGTTACT
-ACTTCCTGGGGTATCTTCCTTGGCCTCAGCTTCCTCTCTGAACCATGAGAGCATCCTGGC
-TCTGCCTCCTCAGAGGCTGAGGGGATAAGGGCGGAGGACATGCATTCTCTTGGCTGTGCC
-CAGTCTGGGCCACCAGCCATGCCTGTTCTTTCTCAGGCCTGGGGAGCTCGGTTGCCTCTG
-AACCCACATCTGGCACTCCCTCCAGGATATGAAGAATAAGCCTGCCAGGTCAGAGGGCAG
-ATCTATTTTGGAACCTGGGACCCCATAAAGACCCAGAGGACCCTGTGACCGAGAAAACCA
-ACAGGCCCCTCTGTGttttgttttcattaaacaagcacaacatgtccctcatagaaaagc
-cagaaaatacatattggcaagaaagcgaaaataaatgttgcctgtgctctcaccagccag
-aggcaaaaaccatagctaacattttggagttttttccccccaaataattttcctctgcat
-atagatgcatattttttttggtagattttctagcaaaAAAAAAAAAAAATCAACAAACAA
-AGGAATATTGTCTCAACAATTTTTTAATTTTCTTTTACTTACTTTGGATTTTTCTTCTGG
-AAAAAAATTTAGAgccaggcacggtggctcatgcttggaatcccagcactttgggaggcc
-gaggtgggaggatcgcttgagctcaggagttcgagaccattctggccaacatggcaaaac
-cctgtctcttaaaaaaaaaaTACTGAAATCTCCAGACTTCCAATTGGAATTTATGTTggc
-cgggtgtggtggctcatgtctgtaatcccagcactttgggaggccgaggcaggtggatct
-attgaagccaggagttcaagaccagcctggccaacatggtgcaaccctatctctactaaa
-aatacaaaattagccaggcttggtggtacacgcctataatcccagcgactcagaagactg
-agacacgagaaatgcttgagcccaggaggcggaggttgcagtgagccgagatcatgccat
-tgcactccagcctgggagacagagggaaactatttctcaaaaaaaaaaaaaaaaaaaTCA
-GACAAGTGCACAGGATAACAAAATACACCCCCATATAGTCATCACTCCAAGTGGGCCCAT
-GTTAACATTTTGCATATTTGTCTTCGATTGTTAAAACAATGAAATATTACAGGAAATGTC
-AGTATTCCTTATAACTCCTTCTTGGTCTCATTTTCTCTCCCACCCTGCCCataggttcat
-atctaggtatataaataatgtataatatttttgtgttctcaaaacttaagtatatgctgt
-tatactgaatgcgacgtcctgcttatattatattttccagattgatataaatgacacata
-tagatcttgtgaccaaggacattttcttttcactgctgtgcagcattgcattatgtaatt
-tttaactctttatccagtttttggcagatggatatttaaattaattcagttatcttgtta
-ttcctgacaatactgctattaccatcttatatgggaatacttgtgcttacaagcaagggc
-tcctctggggaactaatccaggcatgctcctcctgggtcgtggaatatatgtgctgccag
-cctgaggcagttgccaaattgtgctccaagtctctctgtcgagttaattccagtagggtg
-ccggggtctccatcgctccgcacccctgccatcccttgagatggtcatgctttacctttg
-ttccaatctgatggctgtgaaatcgtacatgtaattacatagcctgctttccctacttaa
-tagtatattacggaactattttcctgtgcagaatattgttctatatgtgggtgtttcaag
-gtggcataagctgaaagcctccattggggtgttgctgggattttcttaaccaattcccta
-ttgttggacaacagggtttgtttTtgtggtaggattgcaaaactgaccacagatgctacc
-cacccctataagcatgctcctttgcagtgtgactctgcagttctccctattaagaggcaa
-agttcacttctccactcccttaatgctgacttgggccatgtgacttgctttggccaatgg
-gacattttcaagcagaggcttgaaaagggcttgtgctctggggcttgctctcttgctgca
-cctggggccctgagaccaccatgtgaatgagtcctggctagcctgagggatgatgagaca
-cacttggccaagtcatcctgtcatcccagctgatactaaaccatccaccagatttgtgag
-tgaggccatcctagaccatctatctagcccagccaaactggtgcggaccagaagcaaagt
-ccagttggcctgcagagatgtgaaaaataaatgttttaagccactaaattttagaggtgg
-tctgttagacagcaagcctgatacaGTTCCACCCAGCATTTtctttgctcaaccagttac
-tggctgggaaccttgggcaagttgctgagccttagttttctcctcagtacaatgggggat
-tacatacgcactcctcaaagtcgttgtgaagattggatgagatggcacctgtCAGTATCA
-CATGGCGGGGACCCCATAACCAGGGGTTCCTCTTTCACATCACGGTGGTCTTAGATGTGA
-CCTGTGACCTTTCTTATTGCTTCTTGGTTCTCCCTGCTGCCTCTTTCTCAAAAATGTACT
-CATCCTTCCAAGTTTTCTGGAGAGTATCAACATGTAAGTGTAAATCACAATCCCTAGTGC
-TCTCCAAGACTTGCAGGTATCTCCTCCTTCCAGGGCCTTCCCTCTTGAAATTAGGCATAG
-Tggctgtgtgcagtggctcatgcctgtaatacaagcactttgggaggccgaagcaggccg
-atcccatgaggccaggagttggagatcagcctggccaacagggcgaaactttgtctctac
-taaaaatacaaaaattcaccgagcgtggtggtgcatgcctgtaatcccagctactcagga
-ggcggaggcatgagaatcgcttgagtctgggaggcggaggtttcagtgagccaagatggc
-accactgcactccacactccagcaagacccggtctcaaaaaaaaaaaaaaagtaaggaaa
-agaaaaAGAAAAGaaaaggagtctccatccagaccccaagagagggtttcgtggatcttg
-cacaggaaagaattcaaggtgagttgcagagtgcactgagaagagatagtttattgaaag
-ctactcagttacagagaaggatgtcctcagaaagcaagaggaagaacgcactgtctttgt
-tttaaactcttctaatgtaggagtcttatctaagtaaaagctaagttatgtctttgtgca
-gacagaccgacagtgtgacagaatccattaccgttgacttaaagaaagttatccttggca
-ttttagtaagtacatcagatcacgacagtaattgttttgaaagcataaattgttatgtga
-tattggaacatctgggcattttgctgtcgtaagagtttactcttgcaggcattattgagc
-agcttccttagccataaacatcttatgactgtgggctgtgattagcaaggaatgtgtctt
-gctagttttaagatagagttgattttaaaatggtgtcaccctagctctcctatgctcctg
-tttcccaaacaTAAtcccccctctacttaagagagaaccctaaatcttaaggggagatga
-aaggtgaaggtcatttttctgtaacttattcctgctgacagtggACGTTGTTGACCTTTG
-GGAGAGAGTTCTCTCATAAGAGTTTGCAGAGAGCCTTGTAGGGAGCCGGGGAAACTCTTC
-ACTTGAATGACATCCCGATGATTTGGTTTAGTAAGTGTAGGGGCAGATAAGCTGCCAGAC
-TATTttatctccgtaatcccatgcaataagtgcaacagaagtaaaaagcacaataaccaa
-tagcaataagtgtgacaacacgaagcatgctaaaaaggaatgccttccaagtgctgggga
-gctggccaaactgtgctgttatgacaggaagtcaattgctgaggtatgagtctctaggga
-gttcatggcctgagatatattatgagagtgaccaggaatatagacacagtgttcagtctt
-gatcaatgcacagattttcccagggctgctgttaatatgtttaaagccatatggctttgt
-aaggacatttgtcttattcgggacgtttcttctgtcagacgggtgatcaccagatgagtg
-ttgttgaaagccacagcagtatgttttgctagggctcccacctgcgattcaacgtctata
-gatgttgcttaaagacagaatatgggcacaggatataaccaccaaaaagtttgtttctgt
-tgcctatcacagaccttgactacttcccagttggtggagagggaatccagatgtgtaagg
-atacatcctagaaggtagggatgaccccaagtgcatcatccagtcaaattgtaaggtgag
-tatggccaactatgagacccacatgcccataaccattcccaaggggaaggatagtcacct
-aaccatagagattcattttgccatcccatccacatttggtcaattgaaaggagagtctga
-ttgcattgttggggtggcagccatccgatactatagatgttggtttgggggtggttactg
-ttgatgaaaagagtcgaactctgtaaaatatttgaagagacttattctgagccaaatatg
-agtgaccatggcctgtgacacagccgtcaggaggtcctgagaacatgtgcccaaggtggt
-tggggcacagcttgattttatacattttagggaggcatgagacatcaatcaaatacattt
-aagaagtacattgatttagttcagaaaggcgggacaactcaaagcggtggggggaaggag
-aggcttccaggctataggtgaacttaaacattttctggttgacaattggttgagtttgtc
-taaagacctacgatcaatagaaaggaaatgtttaggttaagataaaagattgtggagacc
-aaggttcttttgaagtctcatagtagctgccctcagggacaatagatgacaaatatttcc
-tatttagacctttaaaaaggtgctagactcttacttaacctcttcaggattgggagggcc
-tggaagaaaaagatgtagctatgttaatagagattctttacagatgcacatttgtcccca
-caaaggacagctttgcaagaccatttcaaaatatagcaaagaaacatgttttcgggtaaa
-atattttaattttcttccttgtctcataacattatgccagggtcaggtcggaaagtaagt
-cacaatatgtagggttaaataaaacccatctgaggagaatttatggtttgtagggcatga
-ctcccagaccccttagataggaatttggacaagaaaaaaaaaaatcagagcctagtcctc
-ataaccattatgccttccaaggcataagggtactttgcctgataactgaatttggatacc
-tgtcaaccaactgagtccatcatgtatggtatagcctaaggtagggatgctattaagtta
-tttGGGATTAAATGAAGAAGGAATTTCTTGGTTTCGGTGGAGGAAGGGAAGAAAGAGTGG
-TGTGTGTCCTTTTGGAAAAAGGAGAGTACATATTTTCTGTACTCAAATTAGCTGATTGGA
-TATGCCAAGGTAAGCCCGAGGTTGACAAAGTTTGTACCCATTCTGCAAACAGATATCCTC
-CAACTCTATAATAGAGCAAGCTCAACATTAAAACCAGTGGTCTTATTTTCAGAGCATCAC
-TTATCCACTGGATAgctttttctggaagagaagccgtagatccactattggctcacagga
-gtattctggaatggtgatccctgcaccagatgcctgtgggacttcatgagagacaggttt
-aacttgggataaatgtacccaaatatgtaatcccttaagtttaactgtagtaggagtgcc
-tggaagtacatggtagggctctttctattttggggaaagctgatctgcaggggatccctc
-cttccaaggtttcaatagcatgaaatctcctggTCAAacaggagagaatatttatgaaga
-tggtcctgacacatgtatactgaacaaacatgcatgtaacatatgactctgttcacctta
-aggtggagacttaatccttgccaggcatggtcttagatcctgtttataatttgaaatctt
-cttgctataaagtttctattctatcagtcttatgatctctgttttaatgttaatgctggt
-tggttgtgcccgaattccaagagggagaattgtacagcaaggtgtgtttgaccccccagt
-ccctcttcccatcatggccagaaccagttgttcaggatttttaaaaaattattatttcct
-tttgccaagagagaggtccattctgttgggtggcttaggatatttgtttatttattagtt
-taGTTTATGGTATcccattttgtcgaggtgccagaggcagtattgaaggctaagctttta
-ttgtgtcccatatcaatgctggggtggtgtcctacttgccctggtccattacctcccttg
-gtggaacacttatggtcaaggaacttagagtcaaaagacttatagccaatcaaatgttct
-aggccagatgggaatggaggtgagcaggcactcattaaccttaaagcctctttaagcaac
-ataagagccaaaaatcaaaagccagaaggcaaggtataaaattggcttatttagaaattc
-tatgcaagagctactataatcttggtttgtggcaattagctatacaaactcaagaattat
-gtttagctatttagggatctgtgtgcctgtccttgatttggagtgtcagaattaatttta
-ttcctcaaaactggcccttacaatctcatgtgatagtccctgggcatggaggaattgaat
-agtttcaAATTTTGGAGGTAAAACAAAACATAAGGCATTAACAACATTTTAAACAAAAGG
-TCATAAGCCCTGCCTAGTTTTGAGAGTGACAGGAAAGGAAGTTCACAGGTAGCTAAACAT
-TTAAATTATTTAGTATCAAGACATAGAATAAATTATATTATTTCAGATAAAGGCAAAATT
-ATTAAATGAGTCTTAATGTTTTTGAATACAGGActgcctctgtgtcttatggaagcagtt
-tattttgattgtcacttttgtctaggtctaaagatgagactttggtcaacttgagtttgg
-tgtcagatactggcagaagtcagtgccttcttcttttttgggacagagtctcactctgtc
-acccaggctggagtgcagtggcatgatcctggctcactgcaacctccacttaccagcttt
-aagcaattctcatgtctcagccacgcaagcagctgggattacagatgtgcacgtaccacc
-acacctggctgatttttgtatttttagtagaaatagggtttcaccacgttggccaggctg
-gtctcaaactcctggcctcaagtgatctgtctgcctcagcctcccaaagtgataggatta
-taggcatgagacactgtgcctggcagtcagtgccttccttagatgagatattggacccag
-aagtcaaagccctgtaacttaacagcacaaggattagttaatagCACCTGATAAGGATAC
-TTTTGAGGGGGATAGAGTGAGCCCTTTAATTGATGTTCTTCCAATATATGTAATTATCAG
-GCTGGAGGTGGTGATCCTGGAGTTCATGGTCTGACTGGAAGCTGTGAAGACTTACAATCT
-TCAGTGCTTAATTTTTATGGCTTTAGTAAGCCCCAGCAATATGACtaagtcagagactta
-atttaggattttgattttgaagatgtttgttaaagatgttaaaaggctcaaaacatttga
-tcaaaacagaagcacagatcatggtaaaatagcatttactcatttacccaaagtgatcat
-cgaaatactttaaaggcaatacagaaggttacatggatgtaaaaaccttaacccttttaa
-aatctcagtttctttagcaatgaaaaacctaataaagacagcatagaaattatcttgata
-atacataaaatctcagttttttaagccatctactaaaaaagcaaaaaagccctactgcat
-tgtgactacttttacttattggaagctcatttagataaccaggaagtcaaacttgatgaa
-aaaagtgcttgaatttaatcagacacaggaagactgttttcaaggttatgaatatagcag
-gggaatacacgactcctaggaacagcatgagaagttttctgattgcatcaaaaatttaga
-catatcaagaaaagccagtgtacagaatgcagttatactagaggaaaacattgcttttct
-agacctccaagatgcaatatgttagcatttggccataataacagttagaaccagagcagg
-gagaaagttatagaagctgacagaaaaattaaaggagagagttgttatctcaagcattct
-caaagggagaaacagctgaaagctgtttttttcaacagcacagcaacagttgaacttttg
-agatatgattctgagaagttttaaaaagaaaaaggttataaaattaaaggtaagatttcc
-tataatttatttaaagagcatatcaatatcttaagaaaaccttgttttgatgtaagggac
-caatttttagacaaattattataaataatttttttataactaatgatatgcaaaatccct
-tttacaaattcccctttatgacttacatagaccatctacgacatgcttggactctctgac
-ttgtcctgaacttccctctttgctaaacaatcagtcattttactttaggacaaaaattta
-ccatataagactctttttcatataaaattattctcttttctttataacctttcttaccat
-aaatacatcttcatatttataactttctttacatctctctctctcccctacctactggtc
-cctttctaccttgtttcataagtaaacattttcaagttcgtaatttgaattgaccttcaa
-ttcagataacttctgaattagacaaaattatttttttctcagtaatactagatcttGGCA
-GGCTTTTGGCCTCTAACATCACCCAGAGAGAAGCCAAATTAAACAACCTAAGAAGCAAAA
-ATCATCAAGACCAGAAGGAAAATGTTAAGTGTAAACTTCAAAGCATGTGAGCGTAGGGCG
-ACATGTGTCACTACTGAGGCACAGACAGCAAATATGTAGTCATCAAAAGGGACAAGGGGA
-TCAAGAAGCAGTAGGTGCTGGAAAATATCCCTCTGAGCCTCAAACAGTTTATGCATCAGG
-GTGACACTGCAACCCTGGGCCCCTAATGGCAGAAAAACGCCACACAACAGGGTGGCAGCT
-GACCAGAAGGATCCCACAACTCCAGGCTCCCTAGCAGACACAGCCCAAAGGATCCAACAA
-CTCTGAGTGGGGGGCTCCAACCCCTGGGCCCTGAGAATATAAAGGAACATGAGTGTCCCT
-GTGTCTCCTGGGGCTCAGAAGGCTAGGCTGAAAAGTGACAACAAAGGGAAGGGCACTCAC
-CTGCCTGTGAATCCaaaactggaaaaagcaagaaatcctgagctgtttgtcagatgttag
-cattttatagataaagccattctataattttagaaacatgctttcccatatcataaactt
-ttcttaattggaaataacccagacatctgatgagtaatctaaggaaagctgtggaccaaa
-attttgggtaaagtggtctttatggaagttaaaaaaaaaaagatttaaaaaaagatttaa
-agattttttttttaaaGCCTggctgggcatgatggctcctgcctgtaatcccagcacttt
-gggaggccgaggcaggtggatctcttgagaccaggaatttgagagcagtatggggaacat
-agtgagactctgtctctataaaaaattaaaaaaattagctgggtgtggtggtgtgcacct
-gtggtcccgaatacttgggaggctgaggtaggaggatcacttgagcccaggaggttgagg
-ctgcagtgagctgtgattgtgccaccgcattccagcttgggtgacaaagcaaaaccctgt
-ctaaaaaaaaagagaaataaagaataaataaaaGAATACATGAaattaaattttaaaaaa
-gccttttccactttttttccttcagtgtcaaatgaacttctaatgtttccatttcatcta
-gaactgactgaactgcgttaagaaaaataaaatctccaagtagacttgaattagtaatac
-ataaacagtgagtcttatctcaacaccagcagcttaataacagcagatttaaagcaggca
-gaaaagaaaagggagaaatagataagagagctttagaagCAATAATCAGAGGCAAGCATG
-GAAAGTGAAAGTAGCAAACTTCTGGGCTGGCCATACAGAGCTGTCATAAGCCTGCAGTAA
-AGCAAAGGTAACAAGCTGGGAAACGATGAGAATTACAGCATTCCCATACCTGGCAAAGGG
-GACAATATGGATTAGTTCATAGCAAACATCTTGCAAAGCTACTTCCATTTTTCCAAATAT
-ACCCCAGGGGCTCTAACCCCATGGGTCTTTGGGCCTCTGATCTGAGTATTATACCCCAGG
-GCCTCCAACCCTGTGAGTTGGGCCTCTGACTCCATGGGCCAGGCCTCTAGCCTGAGTTTC
-TAGGCAAGTGTCCTTGCCTAAGCCTGACATAGTACACCaagatggacctcacttaccaga
-agcggccaattggtgctgcagactgaatttcttttgcatagggtctcgtcttatgcttcc
-ttcatggtcgctaggaagatgttgccagaaaaggggccatgattcaaaccttaaaaaagg
-gttcttaggcctcacacaagatggaagtcaaggcgagtctcaaagtgcattgagaacaga
-tagtttattgaaagctactcagttacagagaagggtgttctcagaaagcaagaggaggaa
-cacattgtctttgttttaaactcttcttatatatgagtcttattcatgtaaaagctaagc
-tatttctatgtgagtggactgacagtgtgacaaaatccatgactctgttgatttaaagaa
-agttatccttggcattttaatgtgtaagtacaccaaagcatgactataattattttaaaa
-gcacacattgttatgtgacatggaaacatctggacattttgctgtctaggagtttgtcct
-tgcaggtattattaagtggcttccttagctgtgaatatcttatgatcatgggttgtgatt
-gggaaggaatgtgccttgctaactttaagatagagttgattttaaaatggcatcaccctg
-gctctcctatgcttctgtttccctaacaAAGGAATGCCCCTTCCCTCCACACCCCAAGCC
-CCAACCAGCGGGACCTGGAGGTAGGGAAGACAGCATGGGAAGCCCAGCCTGGATTGGAAG
-CAGCAAACATTTGACCATCCCAGCCACAGGGCATGCCTACCCTCTTCTCTCCCTGGACCC
-TGGCCTCGCCTACCGTGGCCATCCTGCTCCCACACTAATCAGAAACTTTCCCCTGGAAAC
-CCGTCCTGGGCCCAGCCTTTGTTTCAGGTCCTCCTCAAGCCAAAGACTTCCTGATGCAAG
-CGCTTCCTCCCTCCAGCCAGGGTGAATTCTGCCCTGTCCTTAGTTGGCTTTTCACATTCA
-CGTTTCCTTGTGATGCTGCTACTCCGGCTATCAGAGTCGGGGGCAGCAGTGCTGAGGCCT
-CCCACCCAACCCCAAGGTGGCAGCAACATCCTTCAAGTTCCCTCCTTCCAGGAAACCATC
-TCTGGCCCCTCACTTCACAGCGTCCTCCCTCCTGTTCTGCACCTGGCATTTAACACATAC
-TGCCCCAATCACTGAGGATGTTGTCACTGTTGGTAATACAAGGAATAACAGCACTGACAA
-CAATCACAGGGTCAACTATGGGAGAGCAAGAGGTTGAGAAAAACAGACTCTGCAGTGATT
-GGATCTGGCTCAtctgagcctgagttttctcacctgtgaaatggggtcagtgtagcatct
-accagccttgtgtagctgctggcagataaaattagatcaatatatatcaccatcagcact
-cagagggctcagtccctggGGACAATTGTGGTTATTATTATTATTATTGTTGCTGCTACT
-ACAGGGAACACTTGCCAAGGCCTTCCTGTGGGCCACTAACTGTGCCCCCACTCTTCCAGA
-TTCACACCCAAAGGAACAGggtgctatgatacccattttgtggttgagaaaaactgagtt
-ccatcaaagtgaggagatgggttcaaggtaccacagttgggacctgaaaagccagCAATG
-CACTAAAGATGTGGGTGACACAAGGCTTGGACCCTAACAGAGCAGACTCTGAGCCCTGAG
-GGTGGAGATCCCAGCCTAGTTCACACTGCTGCACAACCTGGCTGCAGGAGGACAGCCAGT
-CTTGgggctctggcctcggacaacctgggctaatccttccaccttctagctgagtgaacc
-cgggaacatcacttaaccttcttgagctcagtttttgcctttggaaggtgaaataatggt
-ctctaccatgcagggggtgggggaggattagatgggtaagtggatggaaagcttgagccc
-agagcctatgcacagtgggctgctcaggaaggtagAATCATGCAAGCCCAGGCCTAGAAA
-TTCTAAAGGGCAGGCACAGGTTCCCCACAAACATGACCTTGGCAGAATCCGTTTCTGAGA
-GTTGGCAGCAAGAAGAAGTTGTATGGATGACAGAAATTCTCAAATTTGCCTATTTTCTTA
-AAGTGGACATTTAAAAAATTCCACATTGGGGCGGAGGAATGTTCTTAGCCCAGGGATTGC
-TATACATAGGTTCATGCATTTACTATGCGTTGGTTCATCTAAGCccaacctcagggtctt
-tgtatttgctgctccctctgcctggatcactgtttccccagtgggtctcttcctaacatt
-ctagtctaggcttaactatttgcccttcaagagatcttccctgggcaccctataaaaatg
-catccttcacataaactctttctccttttccctactttgtttattcatgctgcttttact
-atctggcatcatattctaaatttatttgtttatctgtttgttgactgccttcttgtctta
-gcctattcaggttggtataacaaattgtcatgaactgggtagtatataaacaacagaaat
-ttgggctgggcacagtggctcaagcctgtaatcccagcactttgagaggacaaggcttga
-ggtcacgagtttgagaccagcctggccaacatggtgaaactctatctccactagaataca
-aaaattagccaggtgtagtggtgcacacctggggtcccagctacttgggagggtgaggca
-gttgaatggcttgaacccgggaggtggaggttgcagtgagccaagatcgagccactgcac
-tccagcctgggcaactgagcgagactccatctcaaaaaaaaaaatttaaaaataaattta
-ttttcacagttctggaagctggaaagtctaaatcaggtcatgggtagattagatgcctac
-tgagggcctgctttctggctctgggagacttttagctgtgtctgcatatggtggaatggg
-taaggggctgctctggggcctctttcataagggcactaattccattcatgagggctccac
-tcccatgacgtggttccctcccaaagtccccacatcctaacactatgacatgggaattaa
-gtttcaacatataaatgttgggaagacgcaaacattcagaacatagcactttcccattag
-attgtgaggataaggactatatctaagccattcacttctatatccctgttgcccactata
-tacctagcatacagtaggtgcttaataaatgtttgaaaaatgggtgaatGAAATATTGTA
-CTTTCTAATTcaagcattttctgagcacctactgtgcaccagggcctgtgctatgggctg
-tatatacagaaatacatcagtgagagtcctcagccctAAGGCCATTGGTCTGAAGAAAAA
-AGAGAAATTGCAACAAGTGCCATAGCAAACACAGCTGGGAAATTCACtgatgtagtttgg
-aggtgtgtctctgctcaaatcatatattgaaatgtaatctgcagtgttggaggtagggcc
-tggtgggaggtgattggataatggaggaggatttctTTTTTTATATCTATcaggaatgca
-aaattaatttaataatcgaaaattactataattcacagactaagacaagaaaagccatac
-gattctctcaccagttgcagaaaaagcatatgatagaattaaacatctttttatgatttt
-ttaaaattatactttaaattctgggatacatgtgcagaatgtgtaggtttgttacatagg
-tatacatgtgccatgttggtttgctgcacccatcaacttgtcatttacattaggtatttc
-tcctaatgctatccctcccccagccccccaccccctgacaggccccagtgtgtaatgttc
-ccctccctgtgtccatgtgttctcattgttcaactcccacttatgagtgagaacatgtgg
-tgtttggttttctgtccttgtgatagtttgctgagaatggtggtttccagcttcatccat
-gtccctgcaaaggacttgaactcatccctttttatggctgcatagtattccatggtgtat
-atgtgccacattttctttatccagtctattattgatggacatttgggttggttccaagtc
-tttgctattgtgaatagtgccacactaagcatatgtgtgcatgtgtctttatagtagcat
-gatttataatcctttgggtatatactcagtaatgggattgctgggtcaaatggtatttct
-agttctagatccttgaggatttgccacggtgtcttccacaatggttgaactaatttacac
-ccccaccaacagtgtaaaagcgttcctatttctcatggaggaggatttctaatgaatggt
-ttcacaccatctccttggtactgtccccatgatagggagggagttcttgtaaaagctggt
-catttaaaagtgtgaggcccccaccgcctctttctcttgctcctgcttcaccaggtgatg
-tgcctgttccccctctgccttccaccaggattggaaacttcctgagacctccccagaagc
-tgatgccaccatgtttgctgtgcagcctacagaaccgtgagccaattaaacctcttttct
-ttataaatgacccagtctcaggtatttctttctggcaatgcaagaacagcctaacacaTT
-CACCTCCAGCTACTGCAAGCATTCATGGGGATGAGTGAAAGGAAGGAGAGAGGTGGCTGC
-TGTGTCGAGGGTTTGCTCTACGACAGGATGGTGCACTTGCCACCTCTGGCTCGATCCACA
-CACTAGcccattttacagattaggcattgggaactcagagaggtgaagtgacttgaccaa
-aagcaaactcatggcagaatgaagactgggaccagggaggcctaattccaaacattgtgt
-gttacctcctctaccacaaggcctctctTGCCCAAGAGAAAGAATAAAGTCCAGCTAAAG
-TGAGCTCAAGCAAAGAAGATATAGATATGTAATTATTATCATTGTTATTACTATTTTTTT
-ctcatgtaacagatacatcaaaaagtagaagccttcaggcatggctggatctagggtctc
-aaacactatcactagaactgctccattcttagAGAGGCTCTCAAGTCAAAGTGACAAGAC
-GGCTGCCTGCCATGCCAGCCTCCCCTCCCCTACTCCCAAAAGACCAAGTCCAGAGGGAAA
-AAGAATGCCTCATAGCAGGCCGTTGAGGTTGGCTAATCTGGCACCCATTCCCATCAGCCT
-CTTCCTGCTACAAAGGCTGTGCAGCCAAACGTccacctttctgaccctcctgcagctggg
-tggccacaggacacagttctggtcaatgagacataagctgaagtttgtggtgagggagag
-cttttgctcctctgataacaggagcagttgtggccagagctgccccttcccatgttgcct
-tgatcacagacatgatatttgaagcacagaccatcttgcaaccaggaggaaaggctgaga
-aaaaaaaagtcctcactattttttagccatgacattgttaagttgctggactcctaactt
-cagacttcttcctaagagaaaaataaacttccaatgttcaagccactgcattaaattcct
-tgttacttgtagctgaaagcattcctgactaatacaACTCTCTGTCTCAGGTCCCTATAA
-AAACCCTGGGAAGGCATCATATTGGTTCTAATGGGGTCATGCTGTCATTCTGCAATGGAC
-TGTGGTGGCCAGCAGAGATGGGATGTGCCAATTGACCACTCCAGTGGCCACCCTTACCAC
-ATAGGCTTCGAGTGGGTAGGGTTGTTCTCCAGCACAAAAGTTAGTAGAGTAGGGAAGTGG
-TGGCTACACTCCCTATACCTCTGAATCAGTGGAGGCAATAAATTCCCTGTTCTTGGCTTA
-AAGTTTCTTCCATCGTTTCCAGGAACATGAAGATATTGACTTATTTATCCTCCAGGATTT
-TTATTTGGAATGTGAGGGGAGGATAATTCAGTGAACAGTCCAAATAGGGGATCTTCCTGG
-GAAAAAAGGACAAGTCATAAAAACTGCATTGAATGCCAGTGTGCACAATGTCCTTTCTGT
-GCCCCAAGACAGTCTCCCTgcatgagttcttgagccagacagacctgagttcaaacccgt
-ctccatcatgcaagtgcgtgggcagcctcgccatgtcacctcacctctctgcacctgcgt
-ctcTAGAACCGGGGGTGGAAGGACCCACTTCAAGGACCCAGTCTTCAAGAAAGAGTGGAC
-CAAGTGCCTCCCCCATGGTGGCCCTTTGACCAGCAGCAACACCCAGAGTGCTTTCTCTGT
-GAACCCTTCCCTGATAATCCCAGAGTCCCAGGGAGAAAATCTGCTCCCATCTGAAGCAGG
-AACCATCCAGCAGTGAGTGaacccactgccatttcctcctgccatgtggctaggccatat
-tccacagcctcccttgcagtcaggagtggccacgtgccttagttccaatccactgcactc
-cttcccctttgatgggtttgatgcacacaggtctgaagacctcagcagccacagtggaag
-atggcagagctgcaggacaccaggagcttgggtcctgaaatctttgtgcgctagagctgc
-tcacttaccaggggcacccatgttgggcttttggtgagtaaggaaaaaacctctttggta
-tttggtgcatggtgcctcttgggcttACGAACGTTACCCACATGCACCGCTTGGGGGGCA
-CCTGTAAAAGTCTGCAGGACGGTCAGCCCGGGAGGACATTCCATGTGGGCACCAGCAAAG
-GCAGAGGGTGGGAGGTGAGGAGGCCTGAAGAGCCAACGGCAGCCACACTGTGGTGTTGGA
-ACCAGATTGTCCTTCAGTCCTCCCGCCTTGACTGCCAGAGAGCAGCCCATGATCACCATC
-ACATCAAGCCTGCAGGCAGGGTAAGAGATTAATAACAATACTAACAACAGTaataatagg
-aggctctgccaatattcaagagaacttaccactcaccagctgcgggctggtttcttccta
-ggcctgatctcatttaatcctcaccatggcccagcaatgaaggccctactgatgtcagtc
-ccattttacagacaagaatacagaggcccatgaggcgtcggaggacattctccaaagGGC
-ATGTTCTTGAGCTCAGCTTCCTTCCAGCACAGCCTTTCATCAGGGCTTGGACCTTCATcc
-cattatatgtccagcattattcataggctgaggacacagaagtgaacaaagtagatagaa
-atctggacctcgaggggctgcgactctagtgggagaaaatgggcaataaacacacaaaca
-cgtaaatatacaaaaggagtttggtgaaggatgagtgacatgaagacagcaggtcaggat
-gctgcggtgggtgaagggaggaggtggtgctgtgcatcttgaggttggaggaaacctctc
-tgacatggagctgaaagtgctgcagcaaacgagtgagccacgtgaagatctggggcaggc
-tgttcctggcagagggaacagcaagtgcaaagtgcaagtgctacggccctgaggctggaa
-ggagcttgtcatgttcaggaacagaaaggagagagcagtgtggctggagtggagtgatgg
-ggggtggggagggatgaggctgcagagggagtgggttgggacaagTGGCAAGTTTTGGTG
-GGCAATGGTGGCAGGGGTAGATGATCCTCCAAAAAGACTCATCTGGATGCCAGCTCTGGG
-GGGTGCAAGGAGGGTATTCCAATGAGGAGAGGAGACAGGGGTTTCAGCCCAAATTTGCCT
-CCCCACTCTCCACTTGACTTAAGCTGCTCCCctctcccttcctttctctcattccctctc
-tctttttctctctctcCAAGTGGAAGCTGGATCCCTAGGGAGGATGAGGCCCGGGCTTGA
-GTCCAGGCACCAACAAGAGCGCGTTCCCACCCTCCCGAAGGTCTGATGTGGAGCAGAGGA
-AAAGAATGGTCCTGATATCACcggaaaaagggtcttatcccatatcgcaagagtgggttc
-ttggatctcacatgggaaagaattcagggtgagttgcagagcatagtgaagttaagatag
-gattagagactaatcaatgacagagtagggcatcctcagaaagcaagaggagaacgtacc
-catttcaagtaccagtgcttgcttatataggcagttaagagtagtgtactctgggctcac
-ccctgtaatcccagcatgttgagcggccaaggcgggcggatcacttgaggctaggagttt
-gggaccagcctgaccaacataatgaaaccctgtctctactaaaaatacaaaaaactagct
-gggcatggtggcctgagcctgtggtcttagctacccaggaggctgaggcaggaggatcgc
-tggagccccgaaggtccaggttgcagtgagatggtgccactgcactccagcctgggtgac
-agagtgagactctgtctcaaaaaaaaaaaaaaaaaaaagaagagtagtgtattctgttac
-aaaggcttatgatcagcttgtgacaggctactagtattgctactttcctatgttactatt
-gattttagcaagaatttatgagtgtactattatctttaaagcaaaacctaTTATTTTATT
-TTTATTTATTTATTTATTTATTTtttgagatggagtcttgctccatcacccaggctggag
-tgcagtggcgcgctctcggctcgctgcaagctccacctcccgggttcacgccattctcct
-gcctcagcctcccgagaagctgggactacaggcacctaccaccacacctggctagttttt
-tttgtatttttagtagagacggggtttcaccgtgttagccaggatgttctcgatctcccg
-acctcaccatctgcctgcctcggcctcccaaagtgctggaattacaggtgtgagccaccg
-cgtccggccgaaacctgttcttaaactaagaatttttttttgttcttaagatattgggac
-attttcataagttctgcgtctttaagtaacatcattaactcgttccctcaaccatgaaca
-tcttgtaaccaagcacgtccacgcccctggaaatgtaacccagcaggtttggcttttctg
-cctttattcaatatggagtcagtctggttaggatgcctttgTCCctgagagtcagtgccc
-tcacagcccctgcccggcctctaacttgctgtgtgacctggagctgatcattcgctctgg
-gcttcccttttctcctctgtttgaggagggagctggtctggtgccaccattttccagctg
-tctgtccttaggcaaattattcagcatccctgtacctcagtttcctcatccatgaaatga
-ggatggcccagttccaggcttacggtgaggattaaatgCACAGTGCCTGGTCTCAGTGGC
-TGCTGGGAATTACCATCATTACTGTTGTTTTGCCATTCTATTGCTATTGCCAGTGTTGCT
-ATTAGTATTCAAAATGCAGATTGGTggctgggtgcagtggctcatgcctgtaatctcagc
-actttgggaggcagaggttagaggatcgcccaggggttcaagaccagcctgggcaacacg
-gtgaaacctgatctctacaaaaaaaaaaatacaaaaattagccaggcatggtggcacgta
-cctgtagaccttacctgaactcaggggggttgaggctgtagtgagctgtgatcgtgccac
-tgcactacagcctgggggacagagtgagacgctgtttaaagaggtttattctgagccaaa
-tgtaagtgatcaagacccgtgacacagccctaagagatcctgagaaaatgtgcccaaggt
-ggttgggttatagcttggttttatacattttatgggtacagaagttacaggcagacatta
-atcaatccatgtagggtgtacattggttttgtcgggaaaggcaggaagcttgaaaagtgg
-gcggcttccaggttataggtgaattcaaagattttctgatcagcaattggttgaaagagt
-taagttattatctaaagacctggaatcaataaaaaggaatgtctgggttaagataagggg
-ttttggagaccaaagttcttattatgcaaatgaagtctgcaggtagcagccttcagagag
-aatagagggtaaaggtcccagactctttgttaaatctctcctgcatcaggaaaagacctg
-gaaagggaaaaggattctctacaggatgtagattttctctacaagagacagagttgtagg
-gccatttcaaaaatatgtcaaagaaatatattttggggtaaaatacttcaatttctttca
-ggtcctgctatctgttgtgtgatgctatatgaggaatttggtatcttattgctacaaaga
-gcatgctttgtcagtcttaagctctctctctctttttttttttttttttttttgagacag
-tgtctctctctgttgcccaggctggagtgcagtggcactaccttggctcactgcagcctc
-cgcctcccaggttccagtgatactcctgcctcagcctcctgagtagctgggattacaggc
-gtgtgccacctcgcctggctaatttgtgtatttttagtagagatggggtttcaccatgtt
-ggccaggctggtcttgaactccgaccttaggtgatctgccgccgtcttggccttccaggc
-gtgagccaccacgacctgccaagctctctgttttcatgataatgctggtcaactgtgcct
-gaattccaaagggaggagggtatgaggcatgcctgatccccactttccatcatggcctga
-actagattttcagggtttgttgggtcccgttggccgagagggaggtccattcagtcagtt
-agggggcttgtaattttatttttggtttacaGTTCTGAGGCCCCTTCTGGCTTTCAGACT
-GGCCTGGTTGCTTCCCATCTGGTCACCTCTCTGTCAGTGTTGGGGATCAGCATTCATCTA
-CCCCACGGATGTTCTGCCTGGAGTGGGGGTGGGAAATGGGACTGGACCTCTCGCCATGGG
-ATGCAGCCAGGCCCTCTCTGCTCAAGCCTTCCAGTGCTCCTCACCCAGACACCCTTCTGC
-AGGGACCCCAGTTTTACTCCCCTGAAAAAGAAAGTTTCCATCAGTAGGAGAAGACAGGAC
-CTGAAATTGTCCCTGAGCCTACATGTCTACTAGGGTAGATATTTTGAAAGCCGGAGAGAG
-GAGGAAGCAGACAGGAAGGAGACGAAACCCCAGGACTGTCTGCTAACTCCAGGAGGACTG
-GTCTTCAGAACCCAGGGGCCCTCCGCATTCCTTCTGCCTCCCTATCTCATCGTAGCTCCT
-GCCCCATCCCCCCACCACTTCTCTCCCCTTTCCTAACTGCGTGCCCTTCTCTCCTCCAGT
-CCAGCCCAGCCCTACTGAAGAACAGCAACTTGAGCTGGTCTTTCTGTGCTCCGCTTGATT
-AAAATGTAGAAGGCACCTCTATCCAGAAGACTTGGCTTGGCCCTAATCACTCCCAGCCCC
-CTTGGCTGAGTGGCCACCCGCTGCTGGCTGCTGTCATCCCACATTGGAAGTGACGGAGGA
-GCAGAAGAACGAGTGGGTCACCAGCCGGTCTTCAGGCTCCCGGGCCAGCATTCAGACTGG
-GCAGGAGGTTTGTGGGTGGAAGGTGAGTTGGGCAGCCCGTCAGCCACTCCTCAGGGCTGG
-ACGGAAatagtgattaggagcatggggtttgatgtcagatggcctggggttgcagcctaa
-ctttgttatttactatctgtgagttaagccctctgggtttcagtttctccatttgtaaaa
-tgggactgatattggaagatgtcctacttagaatggcgcctgagccatcgtaagccctca
-gtgaatCCACTGTAAGACTTCAGCCCCCAGACTCCCACTGTTCCCTTGCCCCAGCTTCCC
-TGCACCTCTCCTGCCACTTCCCTCAAAGTTGCTCTCAGTCAGGCCTTGGGAGCCACAATC
-TGGGAACGAGGACCCTGACATCCCTCTTCACAGCTGTACCCAGCACCAAACAAGTCATCA
-GAGGTTCAAAACACGGAGCCCCTACCATGTGCCAGGCACGGCATGGCATGCCTGCTCTCT
-TTCTAATTTTGATACCGCAATGATTAATTCTGTGAAAAAAGTTCTAGAAGGATATAAGGC
-AAAGAATTAGGTTGTGTTCCGTCCATTCACTCACGGCTCTGCTCCCACGCATGGCTGCGc
-tatgcacactgccctgcagcttcctttgtctgctgcacaatgggctctggacggagccct
-gttggcgcaatgagtgagccctacatcaagcttcgtcatcgctgcatcgctttgcaccgt
-gtggctgggccgccatcagtacagccaactgcctctgatggacatctgggctgcagccag
-attcctcctaacagggcttcagggaaagtcctcctcagcgcctctttgtgcgcatggcac
-atttctctaaggcaggtttctggacatgagactgacgggcagcatgtgctccttacattt
-gggggtcctgtcaatcccctcctctcccgcaggctgttctagactccagcccccatgtga
-gaggatgcctgttgcccTCACTCTTCCATCCTGGCAGTCCCCAGCCTCCTTGCCTCTCTT
-GTTTTCTTGTTCCGATCAGTTCCAGGTGGCCAGAGGGTCGAGACTCATCTCACAGCCGTG
-CAATAGATGCGTGTCTCTCAGTCGGTCAGCTCTGGCTGGGATCAGTGTTTATCTTCATGT
-CGGTGGACACCATCACAGGCACCCGCAAGAATCAGCGATCGACGGGGAAGAGGTTTGGGT
-GCATGGAGGagtgctttgcagtgagggctttggagccttgtgccctgattcaaatcctgg
-ctgtgtcccctgccggttgtgtgacttcggataaattacttgatgtctctgagcataagc
-tgggtcatcagaaaagccaagctagtaagagcacgtagctcagaaggctgctgtaaagtt
-cagatgagttgatatatgctcagtgctggaaagggtgctgggcacattagctgttggtat
-tattTGGGCACCTCCAGCCCAAATAATAATAAAGAGACTAGGAGGGATGTTGGGAGATAT
-CAGATGTTGCTCATTGGAGGCTGTACTGAGTGTGCAGAGAGCTTCAGGGAACCTGGAGCT
-TTGAGAGGTAAAGGAACGTGCCAACTGGAACTAGAAACCCACTGCCGCCTGCAGCTCTCT
-GGGCTGTTTCTCCACATGCACCGTGGGGTTGTTCGGGTCCCACTGGGGAGGGTGGCTGGT
-ATGAGGGTGGCCTGGCCTGGATGTGAAGTGGGATTTCCAAGGCTGGCACTCAGTCCAGAG
-CACGAGCCTTGATGAGGAACAGATGCACTCACAGTCTGGGGTCGCCGCCCTCCCCTCCTC
-CACAGCCCAGGGTTGGGGTGGCGATAGCTTCCAGATGGGCTTGGCTCTTAGTGGGGCCTT
-AAATGACTCCCTCTGAGTCCCTGAGAGGTGGGACTTAGGGCCTCTTCCTTGGTTCTCAAC
-CCCCCTGGCCCTGGGGGATACCTGAGGTAGCTGGGTTCAGGCCAGgtgaccttgggaatg
-ccagccctgctccgagcctcagtttccccatctgagaaacaggcattCTCCATCAAGCTG
-GCTTGGCAGAGCCACTGTGTCCTGTGATAGCTAAAGAGAAACATGAAGGAGGACCAGGAA
-CCCCCAGGAAAGTAGGGTTTCTTTGGTTTTATTTTCTTTTTGTATTTACTTTCTGAATGT
-ATAGTACATATCCATAGCATAAAATTTCAAAGGTACAAAAGGGGTCATAGGTAACAGTAA
-GCCTGTCTCCCACCCCTGCCCTCCAGACACCCAGACCCCTCTTCCCCGAGGCAAAAACCC
-TGTCACCAATTTCTTGAGAATCTGCCCAGAGATACGGTATGCACACATAGGAAtttttta
-cccagtgatgacaaacttcacacacagtatttcacactgtccttttgttactttaacaat
-accctttagagatcttcctatgtcactccataaagtgcttcttttttttttttGGATGCT
-TGGCGAAGATGGTTTCAGAATATTACACAACTTTCAACTGACCAATCAGGATGGGCCCGA
-GCAGTGCACAACCCTACAGTAGTATATGGCTGCTAGCTGGATGCCAGCTCTGTGTCTTTA
-TGGTTCACCATTGCATAGATGGGCCAATTGCAGGGAtgggtaatttataaaggaaagagt
-tttaattgactcacagttccttgtaactggggaggcctcaggaaacctacaatcatggca
-gaaggggaagcaggcacatcttacatggcagcaggcgagagagtgtgtgaagaagcaaag
-ggggaagagccccttaaccagtcttcaagagatgagcaggggctgtttccaacattttgc
-tctttaaaggaaggttgcaatacatacccattttgtacatttgtaggagaatatatgtag
-aataactttctagaagtgaaattgcATTTTacatccatatgtttaaaaaaatatcaattt
-ccaccccctgccatatacaagaattaacttgaaatctaccataaatctaaacgtaaaact
-taaaactgtaaaacttccagacagcaacatggaagggaaatctttgtgaccttgagttag
-gcaaagatttttttaggtactacacaaaaagcataaaccgtaaaagaaaaaaagataaat
-ttgacttaatcaaaattcaaaacttctgctcttcaaatgatgctatcaagaaaatgaaaa
-gacaagccacagattaggtgaagatatttgcaaaagtcatatctgataaaagactcatat
-ccagaatatatattgagtgctttcacaactcaataataagaacaaataatccaataacaa
-atgagaaaaaggtttaaaaagacatttcacccaaaaacagatattgatggcaaaaacaca
-catgaaaagatactcaatgttatcagtcatcagggaaacatatattaaaaccacaacggg
-ctaccactacatacctgttagaagactaacatgaaaaataactgataatacctggagagg
-gtatctaacaactggaacttagaaaaacagtttggtaatttcttataaaatgacccagct
-gtcctactcttaggtacaaagagtaatgcaagagaagtttgtgttttaaaaagaaaaact
-gtaggcaaatatttacagcagcttttctcataatcaccaaaaactggaaataacTGCtgt
-atgagtctagtctcacacagctataaagagactactcgagatgggctaatttataaagta
-aagaggtttaattgactcatagttctgcatggctgggggggcatcaagaagcttacaatc
-atggcagaagggggaagcaggggaagcaggcacgtcttacatggcagcaggtgagagagc
-gtgtgaaggaggtgaaggggaaagagtcccttttaaaaccatcagatcttgtgagaactc
-actcactatcttgagaatagcatggaggaaactgcctccatgatccaatcacctcccgcc
-aggttccacccttgacatgtgggaattatggggattacaatttgagatgagatttgggtg
-aggcaggaggatcacttgaacccaggaggcagaggttgcagtgagctgagatcgtgccac
-tactctgcagcctgcagacagagtgagactgtctcaaaagaaaaaaaaaagaGGTaaaca
-ggtaaagaaaataattttagatcatgataagagttaggaagaaaacattttcaaggcact
-aaatagagaatgatttggagggggtacgatatttaaagaaggttatcagggaaagcctct
-ctgaagaggtaacatttgaactgagatgtagagggagagaaggaactagccatgtggaga
-tctgggggaggagcattccaggcagaggggatagcaagtgcatctgaagaggtaacattt
-gaactgagatgtagagggagagaaggaactagccatgtggagatctgggggaggagcatt
-ccaggcagaggggatagcaagtgcaagggccctgaggccagaatgagtttggtgttttta
-atgaaagaaaaaggccagtgggtggggcaaggaggagagggcaggaggtaaggtcagaga
-aggaatggggaaAGTCTAGCTTGCACCAGCCCTGACATGGGACGAGACACCCTCTATGCC
-CTCGGTCCTGGCGGCTCCTGCTTCCTCCTTTGTGTCCACTCAACATGATGGGTGGGCTTG
-GCCATCCGCAGACCCCTCTTGATGCCCCAGTACCTTCCCTGCCCCGCCCGACAGTGAGGT
-CCAGCCTCCTGAACAGCTCCTCTTGCTTGTCATTGGATTAATGGGCAGGAATTGCTTCTG
-CTTTTTCAAAGCCATTGCCCCCTACCACAGTCCCCTAAGATCATGAAGGTGCgagcaatc
-atacttgaactgttggatgatgaatgcatcactgttgatgtggaggaggctccccagtgt
-gaggactcagagcagggtctcggcctctcacagacctggctgtgtgcttggctccacctc
-ctacgacctagggccctgagcctcagttgcctcacctgtaaaatgcggcaaacaagcaag
-caacaagatgctcaacctcagtagtagtcggagaaacaagagctaaatagcagtgaggca
-caccctttacctccattccctggattagcaaatagtagagtcaggaacttccaagtattc
-atgagggtgtgggcgatgggaattccatgttctgctgctgggtgtttggactggtttagt
-acctaagagcctaagaaagagtatatctgatgacccaggcattttcctcttgagtgtata
-ccccagagaaattctcctgcagctccagaagGAGCCCATTCGAGGTCATGGGTCACTGTG
-ATGGTGTTTGAGGATGTGAGCAGTAGGTGAGAATCCATGTAGATGCCAGGAAAAGCAAAC
-TGCAGGGGCCTCTAAAAAATACCAGATAAGGGATgagtgcggtggctcatgcctgaatcc
-cagcactttgggaggctgaggcaggtgcatcatttgaggtcaggaattcaagaccaacct
-ggccaacacgatgagacccaatttctactaaaaatacaaaaattagccaggtgtggtggt
-gcgcacctattatcccagctactgaggaggctgaggcaggagaattgcttgaatctggga
-gactgaggctgctgtgagccaagatcacaccactgcactccagcctgggcgacagagtga
-gactccatctcaaaaaaataataaaaataaataaataaataaatacaagaataaaatgaa
-taaaaaaccagatgaaaaagaaaaccaaaaagtaaaaataaaaaACACCAGGTGCATGAG
-AGAAAAAAAAAATAGAAGACGGGGAAATCTGTAGCACACGACCATTTCTGTGAttttttt
-tttttttttttttttttttttttttttttgcgacagagtctcactttttcgcccaggctg
-cagtgcagtggcgcaatctcggctcactgcaacctccgcctcctgggttcaagcgattct
-cctgcctcagcctccggagtagttgagattacaggcatgcaccaccacgcccagctaatg
-tttgtatttttagtaaaaacggggtttcgccatgttggccaggctgaactcgaactcccg
-acctccggtgatccacccgcctcagcctttcaaagtgctgggatgacaagcgtgagccac
-caggcccggccCATTTCTATGAATGAAAAAAACTCACAAGCTACAGAACATCCCTACACG
-CGTTAAAAGGATTCACACACATTCAAGCCCAGAGAACAGACTCACAGGAGCAGATGCCTG
-GGGGGAGGGGGAGGGGAAAGGGCAGAAGAGCATCAAGAGCGAAATCCAATTCAATCCAAC
-TGTGCAACAGACAGTTTGCAGAATTGATGAGGATGTTTAACCCAGGTCTTGGCACCCTAA
-GTCCAAGTAAAAAAATAAATACGATACAGCAGGTAAAATGGGGGATGATGGAAGGGtggc
-gatagtagtgcctttctcatggggaaccctcgaggctccgatgagcgaaaccatgcagag
-tgctcagccaggtgcctggcacgcagcaagGTGTCCGGTGCACAGCAGGGCCGCCCAGCT
-GTGAGCGGTGCGTGTATTCTCTCCAGCCTTGAATTCAGGCCTGGCTCCTTCTGCTTCCTG
-GTCAGTGCCGCTCTCTTGTGGCCCATACAGTGACAGGACTTAGACTGAATAGAGATCTGC
-CATGGTCCAAGGTATCTGATGGCGCTTCGGAGGAGGGAAGGGAGGGAGTCACATGGGGGA
-GATAGGATCACCAGAGGCAGATGGGATCACAGGAGGGAGATGGGGTCACAGGAGGAAGAG
-TGACTTCCGATTGGGGAAGAGATGGCGGATCAGATAAGGCCTCCTGGAGAAGGAATGTCT
-AGGCTGAAGGACAGATTCGACTGGGGGTCAAGGGGATTGATGAGCAAATGAAAGAATGaa
-tggagttagaatattgagcatgagcattacttagccctactgtgtgccaaggctttacat
-gcctcatatcatttcgtcctctaccacccctgggaaggcgacttattgcttctgtctcct
-ttgcagctgcaaaaagggaggctcagtgggttagcgactcatccaaagtcaagccgccag
-ctgcacatagagctctgatacacacccaggtcgtgtgactTGCTGGGGGACTCTATCTTC
-TCCACTTTGGGGTGGACTGAGGGACCCCAGTGAGCATAGGTACAGACCACCCCTGAGTCT
-GTCTGGACCATGTGTTAGCAGAAGTTTAATACTACACCTGTGCAGCAGGTGGAGATGGGT
-GGGACCTGTGTGGACGAGAGGAAGTGGATCTTGGGACAGCTACAGCATGCAGCGGCTCAC
-CCCAGGGCTGGACCCTCACTCTTTGGCAGGCAGCTGGGGCACCACACCCAGGGGTTAAAT
-GTGGAGACTCACTTCTTAAGCTAAAGGATGTGTCTGTCTTCAAGGCACTCTCCGAAAAAT
-GCCTCATTTTGGAATTTATGTCAAAGCCATTTAAATCCTTATTAAGAGTATTTAAAGATC
-AGTTTTCAAAATGTCTCCTAAGTATTTCATTTTTGTTTTTCTCGACTTGGTAGTATATTC
-CCATGGCTAAAAATTCAAAAGGGACCAAAGATAAAGGTAAGcctcctctctttccatcca
-ctctaacctctccccacccagagccatcactgttactggtttctagagtgttttgtcacc
-tgtaggttttgtgcattcatgaatcgtacacacgtgtattttccctccttcccgtccccc
-cgcgtgggggcttactatgcgcgctgttctgcaacttgcttttttcacttggcaattcgt
-ctcagggactgccccgtcattgtgtcaaatccttcctcgtggtgcttctcggccatgcgg
-tgttgcactgagtgctgtgacattgtatcgcaatgcctgtcctctagatatttaggatgt
-ttccagcattttgtgatcatacacaggactgcagggaacagctgtgtaagcaggtacact
-tgttctgcagcatgtgggccaggctaattgttatttatttatttatttatttttgagaca
-gaatctcactctttcgcctaggcgggagtgcagtggcgctatctcagctcactgcaagct
-ctgcctcccaggttcacgccattctcctgcgtcagccttctgagtagctgggactacagg
-tgcccgccaccgtgcccggctaatttttttgtattttttaataaagacggggtttcacca
-tgttagccaggatggtctcgatctcctgacctcgtgatccgcctgcctcggcctcccaaa
-gtgctgggattacaggcgtgagccactgcgcctggccctgggccaggctaattggaggat
-gaatccctagaggtggattgctgggtcaggggacatgtgcgctgtgatttgaatagatgt
-caactcaccttctgtagaggctgggtcaagtcaccctctcctgaggaaggtaggggaggg
-tggcggcttacccccacccagcccaggccctgtggtttcattttctttttttttcttttt
-tatggctcttagccaatcagataggtggaaaatggtagctctgtgtggctttattgtcat
-ctaatttgagtaagggtgTTTGGAGTTCCTTTTCTGGATGAGGCATTTTTGCCACACGGG
-GACAGCGCTGAGCCGACGACACGGCAGTGCCGCTCTGGACACGCTGATTCTCCCTGAGGC
-TCATCTTCTCAGGCTGAGTGGGACTGTGCCTGTGGATGCCCGCTCATGGAGTAGTCGCCT
-GGTGGAGGGCAAGGGTTTTGAGTTCCCATTCCACtacttactttctgagcctcggattcc
-ccctctgtaaaaagtggaaagaataatagaacccacttcagatggctctgaggaggatga
-atttaagtttttaatgtgaaatgcttggcacagttcctggctcagagttagtgcttagga
-aatgtttgttGAATGAAGAAATGAAAGAGATataatcatcttaaaaattgtattgagtac
-ttattatgaagcctttctcatgtattcacgtattttaacttcacagtgacaccaagaggg
-gtacttttattatccccctttaaagacaagaaaactgggccgggtgcggtggctcacgcc
-tgtaatcccagcactttgggaggccaaggcaggcgatcacgaggtcagattgagaccagt
-ctggctaacacggtgaaaccccgtctctaccaaaaaatagaaaaaattagccgggcgtgg
-tggtgggcacctgtagtcccagctactcgggaggctgaggcaggagaatggcatgaaccc
-gggaggcggagcttgcagtgagccgagatcgcgccactgcactccagcctgggcgacaga
-gcgagattccgtctcaaaaaaaaaaaaaaaaaaaaaaagaagatgagaaaactgaggcac
-agggagagatacaggatcttgcctaaaggctcatagctggcgtcactggcggcgacggga
-ttcgtgatcttctgtctgctcttacccacctcacttccctgcctcccactCTAGGAGAGA
-GGTGCCACCATAAACCCCAttccagctgtccattgcatgaaacaacctcctcaacctcag
-aggcataaacaaacaaccattttatcatgttcctgggttctgtggatcaggagttcaggc
-aggataaggtggacagcttctctctgctgggccttcgatgggaggactctgtggctggga
-gggttctgcagtggggggtaaggaggggcagcgggtaaaacagcaaggactagaagaccc
-acttgcgagaaggcttcttcagctacaagtctggCTGGAGGATCCATTCCACCTTGTGGA
-TGGTAGGTTGGCTATGGCTATGGGTGAGGGTGGGAGTCATGGGGGGCTGAGTGGGAGCCA
-TCAGACCCCAGGGCTGAGTCCACATGTTCCAGGATCTGACAGCTTAGGAGGCTTAGCAAT
-TCCAGGGCTGGCGCCCCCATGAATAGCTTctccaggattttgcaagtgctgtttcctccc
-cctccccacccatctcattaacacctcgcactctttaattctcagcttggctatctggtc
-ctggaggaggagctccctaacccctgtatgccttagacaggatatgctagatcctgtcct
-catggaaggtcttatcacattgttggaattgactgtctgcagactgaacgcttggaggac
-aaggcagggtctttatcaccagcacccaggacagtaccaggcacacagtaggcactttat
-gcatattcacggaatgaatgaatGGGTGAGACTGATGGATTTTGAATGACTTGAACTTGA
-GCCTCAGTTTTTCCTCCTAGAAGTTAGCTGGCAACGTAGCTGTGAAGGTGGCAGGAGATA
-GGTGGGAAATGCGAGGTTAGTAAGAGGAATTGGTAGAAAAATGGTAGTTATGATTTATGC
-TGAAGAGAGAAAAGCAAAGGaaattagatattgcacctgaaatgcttagctatgtttggt
-gcagaataggtgctccataaatATAAGATGACGTCATCATCCTCATCCTCATCATTACTA
-TTATTTGTATTATAAGAATGCACATTTCCTGAGTTAGAAGGTCCACATACGATGGCTTGA
-AATTTTCCTCTGggctgggtgcggtcgctcacacctgtcatcccagtactttgggagact
-gaggcaggaggatcgcttgagcccaggagttcaagaccagtctgggcaacatagcaagac
-tctttctctacagataattttaaacatagctgggtattgtggtgtgcatctgtagtccca
-gttacttgggaggctgaggtgggaggatcaactgatccctgcaggtcgaggctgcagtga
-gccgggatcatgtcaccgacctccagtctgggcgatagagctattacccatcttaaaaaa
-caaacaaacaaagacagaaaaaaGAAATTTTCTTCCAAGCGAAAATGGAGAGGTGTAATC
-CCCATAGGTCACCTGGGCCAGATGTCTGGGCAGGAGGTCATGCTCTGAGTCAGATTTCCC
-TTCTGTGCAAGGAAGGACCTGGGACAGGGACCTCTGAGTCTGACACTCTCTGCACAGCTG
-AGAAGGCCATTCAGCTGAAGTCCCCATTGCAACTGTTGTCCTTCAGCCTGAGGCAGTCAG
-TCCTTCGGTCTGAGGCAGCCTGTCCCTTGCCCTCGGCTACCCTCCACCCTGCTCCAGTCC
-TGCTAGGAGAGAACCGCAACACGACCCCGTTTCAGAAATGCGCTCCTTGACAAGCCTGGC
-TGCGACCTGTTCCTGGTTGACTGCCGTCATCCGGTGGCAGCATGTGGGAATGACATGCAG
-GGCTGTGGTGAGGATGAGGATGGAGTGAGCGGGTGGGGGGAACTGCAGAGAGGGCCCTAG
-TGTGGCCCAGTTGGAAGCGGTGACAGGAAGAACCCACCAGGGATTCCTCAGCTCTGGCCA
-AGGGGTTGTTCTCTCCCTCTGGCATAGCATCCAGAAGGCCAATAGCAGCGGAACCTCCCC
-CTGGGCTCTGCCCAGACTGCCTCTCTTTGGCTGTGTGACCTCACCCTGTTTCTGAGCTTC
-TCTGTGAACTTCTCCAAGCTTGGCTTGTAAGAAGGGAGTGGGCGATGCCCACCTGACAGC
-AGAGTCTCCTTCCCAGAGAGGCCCCTCAATCCTCCAGAGAATGTGGGAGAGGCTGGGATT
-TGAAAGGATTGGAGCTGGGGGCAGGGAACGTCTGAGATGGAAAGGTTATAGGAGGGGCTT
-AGGCCCTGAAGAAATTTCATCCTGTAATTTGAAAATATTAAAAAACCACCACAGCCCCCA
-GCTGAGGACAGAGGACCAGGCCCCCCAAGAAGAAAGAACATGGCCAGGGAATTGCAGTAC
-TGGAAACTTCTACCCTTATGTTGGTCTTTTAGAATTGTGAAAATTAGAACGTTCAGCATC
-CTAAAACTGGAATCTTAACAGAAAACACTATATAGtgtatgtatgtgtgtgtgtgtgtgt
-gtgtgtatatatatatatatttatatatatatttatttatataGGggctgggtacagtgg
-ctcatgcctgtaatcccagcactttgggaggctgaggtgggaggatcatttgaggccagg
-agttcaaaactagcctgggtaacatattgagacccccatctctacaaaaaataaaaaatt
-agctgggtgtggtggtgtacacctgtagtcccagctacttgggaggctgaggcaagagga
-ttgcttgaggccaggagtttgaggctgcagtgagttgtgatcgtaccactgcactccaac
-ctgggtgacagatcaagaccctgccaaaaaaaaaaaaaaattaaaaaGATacacacacat
-acacacacacatacaGACTAAACTCTGTAGAATCAGATCATTGAGCCTTGAGGTCAGAAT
-CAGAATTGCAGCTGCAAATCTAGACTCAGCCCTCTGAGCTGGAAGTCATCTGAGAGCCAC
-CTCTCCCCTCAGCTTGTCCTGGAAAGAATGTTTGCTCTCACTGCCTGCTCCTAAACTTGT
-TTGCAATGaatagatctgggggagggccccaaaacctgaatttctaaaaggctccccagg
-ggattctgttgtTGGGTCTTCCAGATTTCGGCAATAGATTTAATTTAGCCAGGCTTcctc
-ttcatcacattcatcacatgggaaaactgaggccccggaaggggaagtgacttgacctgg
-accccatcagatagctggtgacaggctggagctcccacctgtgcctcccaatgccaaggc
-cactctcaccagcagcccagggtgtttAGATGGCCCCGTGGGACTGTCAACCTCCTAGGT
-ACCCCTGGTCCCTGAGACATCTGGTTCGTGAAACTGCGAGGTTCTGGGGATCGAGGTGTC
-ACCCTCTTCTGCCTCTGGCTGAGTCTGCTTCTTGAGAGTAGCCTGGAGGGGCTGAGGGCC
-CCTCCTCTTTTATCAGCTCCCCCCAAGCTGAAACCCCACCCCAATCCCCAATACACTCTG
-ACCCCTCTCAGCCCCAAGCATTCCTGTGAAAACCACTCCACATGTTTTAAATTCTGCTAC
-TCCAAACTCAGCAGTATCATGGTTTTGCAACACCCTCTTGATGCTCAAGAAGCATTTACA
-AGTTTCTTTTCCCTTTATTAAGAAAGTTTTAAAAAAAAGTTAGGGTCTTGAAACAATAAC
-AACGGAGCATTTCAGAGGCACAAACGTTTGCAGAAGAGAAGCTGGTGGCCTGGCCAGGCG
-GAGGAGGGGGCTCTAGCTGTTCTCGGGGAGGTGAGAGCAGGGAAGTCAGAGAGAGGGTGG
-GCCTGCTGGGAGGGGGGGGTTCAGGCCAGGGCTCCCCAGCTGCCAGGTGGAGGGCAGGTC
-TGAGGGTGGGTGCTCTCTTGGGGTCGGGAATGTAATATTTCATCACCTAGAGCCTCTCCC
-CCAGCCTGCTGACCATCTTCCTTCCCCAGGCCACCCCTGGGCCCCTTGGAGCTCCGACTC
-TTGCTTCTCCTGCCCATTCCTGTCCCAGTCACGGAGCCCTACGTGTTCAGGCCAACCAGT
-CACGGCAAATACAAATCCCGTTTCTGAGGATTCCGGGGAGCAGAGCAGGAAGGGGGTGTT
-ATGATGGCAGAAGGATAGGCAGTGAGGACAGACTTGCTTCCAAGCTGGGTCTGACCTGGA
-GACTCCTCCCAGCGTCGTTCCTGCCTAGGGCGAGGGGCGTCACAGCGAAGCACAGATGCT
-CAAGTCACtggtggtgggtgtgggcgagtgtggtggtgggtgtgggggagtgtggtggtg
-ggtgtggggcagtgtggtggtgggtgtgggcgagtgcggtgatgggtgtgggcaagtgtg
-ggggtgggtgtcagcgtgtgggggtgggtgtcagcgagtgtggtggtgggtgtggACGAG
-TGCACGGATCTTCCCTTGCTCCCCACCCACAATTCCCTACATTTCCCCCCTCAAGTGACC
-CCCAAATTCTCCTCTCCACCGTGAATGTGCTGAGCAGAGCCATCAGGCAGAAGCAGAGCC
-TGAAGGCTTCctgtgtgaccctgggcaagccccttccttctcagacctgtttccccaCAT
-GGGCAGGAAGCGCTGAGGTGGGGAACAGAGCTGCTGGATAATCTCAGCTTTCCTTTCCGT
-TTCAGTGGCCTCTTCTGGGCTGGGCAGGTGGATCCCCCAGCAGTGACAGCTCACCTGATC
-CGGCTTGGGAAAAAGGGGCATGGAACCCATGAGAGGGAGGCCTGTGGGGGAGTGCCGATG
-AGGGTGGCAGGCAGCTTGCAGAGGATGCCCTCCAGGGCTGGCTGCCCACCCAGAGGCCAG
-GTTGTGACCCTCCACGGCCAGCTGGGGGAGGTGTCCAAGCCAGGCCTCTGGAAGCCCTGG
-AGCCTTGTCCAGCCAGCTCCTCGGGGTGGCTGGTGGCTGAAGGCTGTGGAAATGGCCTCT
-GGGGACTGTCCAGAGAACCAGGTGCTCACAGCTCAGGGTCCTGGAGCCTCCCCCAGAGCA
-GAAGCAGGGCCTTCAGGATTCACCTGTGCTGTGTCCCAGCTTTGCCCTCTGGAAACCCTT
-TCTCTGCAAAGATGGGGTCAGGGAAAGGCCTGGGAAAAGATGTTTGCTTTCTTTAAGTTG
-TAGATAGAGAAAGCTGCAGGGGAGGGCACAGGCTCATGGTCCCTCTTAAAGTGTGTGTga
-gagggagacaagaggagggagagagagaaggatgcggtgaaggacaggaagaaacacagg
-aagaaagaaaaggaaagataaaagataagtgagaaagaagaggaaggaagggaaggaggg
-agggagaaaggAGAGGAGAATGGAGGTggaagaaataaaggaaataaaaaagaaaaagaa
-agggaaggtagactgacagaaaaatgatagaagggtggaaagaaagagaggaCAAATGGA
-GAAGACAgaggagaaagagtaagaggagaggaggagaaggagcaggaggaggTGTGCAGG
-GGCCGAGGACTAGGACCAGAGAGTCGGGAGAGCCGGCGGTCAGGGCTGCAGGCCGGGCTG
-GCGCGGCCTCACGTCCAGCCTGCGGTCCAGCTTCCTGTCCTTGCGTGGGCGCCGGTCCTT
-CCTGCCCTTCTTCTGGCCGGGGCTCCTCTCTGCAATGAGAGGACAGAGCCCGGTGACCAA
-GGCTGCAGGGCCAGTTAGGTCCTGGGAGCCTCCTCAGTCCTGAAAGACAAGGGTGCCCCA
-CCCACTCCCCAACAACGGGGCTCAGAACATTTGGGCACTGACCTTGCAGTCCCTCCTGTT
-GAGAGTTTGGACCGTGGGCTAAGGTACCCCAAACTGAACCTTTCTCTCTAGGTCTTCAGG
-GAGTGGCGAGGGCCACTAACTTGTTCAGGGCCTTCTTGTGCTGGACATCTGGCTCGGCCA
-GGCCTGCAGGTTCACCTGGGGCCCCCCAATCAGCATGTCGGGTGGCCTCATGGGAGTCCC
-CATGGCTTTCCCCGGCACACTCCTTCCATAGCTGAGCAGGCTCTGTGCTGGACGCTGGAC
-ACCTTTCATCTGTGTCCCTGCACCAACTTCTGCATAACACTGTGGCaacaatacttcagc
-atttagcaagcgctcactgtatgcaggccacagccccaagtgctttatgtatacgaaact
-cacaacagccgagagaggcaggtaGGGTCTGAGCCACACCCAGTCCCGTCTTCTCCAATT
-GTCCTCTCTTTCTCTCCACCCTTCTATCATTTTTCTGTGCCAGGCTACCTTTCCTTTCTT
-TTTCTTCTTTATTTCCTTTATTCCTTCCACCTCCACTCTGGCTGTGCCCGCTGCCCAGGG
-AGTTCTTCTGAGCAGTTGCCTGTCATTGTTATGGACAGGTGAGAAGACCACAGCATGGTT
-GGGAGCAAGGCCAGCCCTAAGTTTCTGCTTTACAAAGTGTCTCCACACCCAGGACATTCT
-CCTACATTGCTTGGGCCCCATTCAGTTCCCCGCAAGGAGCTGTGTGTCCATTTGAACACG
-ATGAACCTGAGGCTCCATGAGTCACTTTCTGAAGGTGCGCAGCGAGGCTGTTAGAGACCC
-TCTGAGCCTAGTGGCAAGGGGAGGGCAGTTTTATTCCTTGGGTGTCAACTATGTGCCCGT
-CTCCCCAAGAGTCAGGGCTGTGGCTCCAGTCCTGGCTCCTTCCTCTGCAGAGCAGAGTCA
-AGGAGCTAAGACCAGGCTACCCACCTCTGGGGCTCCCCACGCCCACTCTGAGCTCTTGGG
-GAGCACTGAGGCCAACTCCCACTCTGAGCTGCAGAGCTGACTGTGCAGGCCTCAGGTAGG
-ACAGCATCTGGAGATGGGGTGTGGGTGCTGCCTGAGTGGCCCTGCCGGCTCTGATGTGGG
-GGTGTGGGGGCCAGTGGCTTTGTGTCCCTACCCCTTCCCTAGGCCTGCCTGCCAGCTGCT
-CATGTacccatccagtcacccacccatccctccacctatttacccacctacacactcacc
-cacctattcacccatctactcacccacctCCATACCCAATGacccatccatccacctagg
-cacccacccatcacctatccatccacctgttcacctatctacctacctacccacccacct
-aatcatccacctacctactcatccacccacctaccctcccatctaccctcctatccaccc
-atctacctacccactcacccaccTGTGCATTCAGCCATCCatccactcatccaacaaata
-ttaactggataccgactatgtgccagactgtgttagaggcactagagagacagctgtgaa
-caaggcagataaagcccttgccgtcactggagatcacactccagtaaggaaaacagacgc
-tgaacaagcaaacacgagaatgagaaggctcatttcagaagggtgcaagtgctaccatgt
-gatatgatggaaaatgactccggggagggggactcctgggaagcctctctgaggaggagc
-cactgcagccaagacctgggtgatgcagggagctacagcggggttgttgcgaggattaga
-gtcatgtttcacagcactaagcacagccagcacatggtagatgctttatgaatgtttgca
-gttattgtGATTATTATTATCCAGGGGAAAAGCTTTCCCCTCATGATTCCCCAACAGCCA
-TTCACCCCCAGCTCTTGGAGCCATGAGAGGTGCCATGTGGTAATGAGTGCAGAAGAACTG
-TCTGCCTCCTGTGTGAGTCCTGCTCTGGCTCTGGGGTCTCTTAGGTTCTCTGGTTCCACC
-TCAACCTCACTCTGTCCTCACCTGCCCAACATGACTCCCAAAGGCTCCTATCTCTGCTAG
-CTGCACTCCCAACCCAAATAGCACAAGTCCTTCTGAAAGAGGAGTGTCcctgagttcaaa
-tcctggctccactatgtcccagctgggtgccccgggtggcctggttccaggtccctcatc
-cttcatcatgactttagattcctctttgcaTGACGAGTTACgtttgaattctaggtctac
-agctccctggctttgtgacccttaggtgagtgactcaacctttctgggcctcagtcccct
-catctgtaaaatggggatagtgctaataacacctaccgcatagcatcactgcgaagatta
-catgagttaacgattatagagaattcggcacagtgcccagTCAACACTGCCAATACTACT
-CACCGTTCACATCTTACCAAGCACACCCTGTGGCCTCTCTTCTATGTAAATCAGTGGTCC
-TTCATAgcccccagaaacattttggaaatacgtgtagtggtcttgaatggcacagtgaag
-ggggttcctgtggcattcagtggacggcaatcgggatccagcgtgggacagtcccccgca
-aagacgagctgtccccctgttccatccagttctctcacatcgtgccccaccctcacgtag
-ctgaaaagtctgcttgctgggagctgaattctgtttgactcatgaataccaattggtttc
-gaacacttccattcactgaagattctagggcactgtgagtgtggtgtcaatcagagatca
-attgggttggaccttactaatcattggtcactgttgggaaatcgcatctctgatggcgat
-gTGGCCACGTACTTGGGGCGCTGACCACGGCCGCGGTCCTCACTGGGATTGTACTTCCCT
-AAGTGTCTGTTGGTATGTTGGGCCAAGCGCTTCCATCAAGAAAtttcttttctttctcct
-ctatattacagttaggacactatactgataaaaaaaaattacctttgcaagtaggccaca
-ttctccatgaacttcattaagaatgataaagagggtattcccaaatccttcttattaaaa
-ggggggtgttcagtttgagagggttgggaactcctgGCCAGCTCAATTTTCCTAATGTAT
-TTGGGACTGAACCCAGCAAGGAAGGCCCTCCTTTGAAAGGACACCAGGGAAGGTGATGTG
-TACTCCACATGATAGTATGGCTAATGGTGGCCTTTCAGGCAGTCTCATAGATACTATTTG
-TGGGGCAGTGATCTGAGTCCGCCCTGTCCCTGTGGGCCTTTCCCACCGCAGCCTCGTGTG
-CCTGTCCTGGGGCTCACCTCCTGGGCAGGGCCTCTGGATGGGACATTTCCTTGACTCAGA
-AAGCACCTGGCAGGTGGCTGCCTCCTCATGCCCAGCCCGGCCAGCCTCTCGTACCCGGCT
-CTCCAGGCCCCAAGCCGAGCCGCAGGTCTTTCCATTGTGTGTGCAGGGGCTCCAGCCGCC
-CCAGGGACCCAGTTCACACTCCCCTGTGGGGTGAAAGGAGagacagacagacagacagac
-agGGTCAGCCGGCAGTGAGGGTCCTTCAGATCCAAGGGCAGGGTTTGAGGGGTTCAGTCC
-TCTGAAGACTGAAGACACCACTTCCACCTGCTAGGAGCAGAGTTATTTATAAGAGCCTGG
-AATGAGAGCGAAACGAATGCATGCACAGACTAATATGGGCCTGAAGCCAGAGCGGCCGAC
-TGTCTAGCTTTAAaggaaaggcttcctggaggaggtgatgtatgagttaaagggagagag
-gggagctcgtcaggtgagaagaaggaagcccattccaggcaggtgtgcaaagccttggga
-gcccggcccaccatgtttgggagatggggcagcctgagttgggagtcaagtctcaggaag
-gcggggacaggagaggaggctggaaggttgcctgggaaGCCCTCAGGACCAGGACACAGG
-TTTTAAACTTGATCATGTGTCTTTGATCAACTTTGGAAGGAAGAAAAAGGAGGCCATGGA
-CATAAAAGTTCTTCATAGGGGGTAATAAAAatacatatatacatgtatatatatatatac
-acacacacacacatatatatatacacatatatatacacacacacacatatatatacacat
-atatatacacacacacacacatatatatatacacatatatacacacatacacacacacac
-acacacacacacacatatatatatatatataCTTTGATTATTTTAAAAGTCCATGAGAAG
-TAGGCACAGAATATGggtagctatgaatactcctattttgtagatttggacactgagacc
-tagagcagaggtttgctaagggaacgcagcaagaggctcacacagcagacacagcaagct
-caagacacagtgggacccagaccttgctAGatacacacatttgacaagtaaagactgagc
-acccagtgtatgccaggtgctattctgggtgctgagggagcagcagcagacaagacagcc
-cagggtctgcaggcctcctggaattcaccatctggacaccgccgtgatgagggaagtgca
-ggcaccgtgggagcccagaagcagcatgggttgggttgtaggggaggaaacccctggact
-gggtcttgaagtgggggtgggatggcggggaaggggagcctagccaggctcagggaggga
-cgggaggtgctccaagtgagggcataaccccagcagagtcccCAGGATGATTTGGCCTGG
-AACTGGGCAAGCCGGAGAATAAGCTCAAACTGAGGAGGAAAAAAATGATGGGGGTGGAAA
-GGCTGGCAGATGGGACAGATTGCCCAGGGCCTGGGTGGGCTCCGCCCAAGGGCAGTggga
-gccactgaagggtcctgggaggaaaagaaattgagcagactatcattgtgaaatactccc
-tctgctgttgagtggagactgggctggagggactgagaaccaaggcgggagacgggcagg
-agctgtggccagaaccctggcgataggcagggggtggcaagagggtgggaagagggcggC
-ACAGAGGACAGAAACAAATGGGTGGGGAGAAAGGGATGAGCTGAATGGTGTGGGTTTGGG
-AGCTTCGTGctgcttcattttcaccccaaagttcttcctaccacccaaaatattatgcat
-ttgttctcaggtgtcgcttctgtctctccactgaaatgtcatgtccttgagtgcagaggc
-tttgtctgttttgttctgtaatgtgtctccagcacctaggaaagtgcctggccatagcag
-atgctctagtagatattttcagagtgaataaatGAACAGATTGGATTGAATATAGGGTGA
-GGGAGAGAGAAGAGTCAACAGCGATGTCTGCATCTCGCGCATGCCACCCAGGGATCAGGG
-AGCTGGTTATTGAAACCCAGAGGAAACCCAGAGGGAGCGTTAGGTGGGGGATGGTGGCAG
-TGGGAGTGGAAAGAAGGCACCCAGAGGGCAGTGGAGGTGAGGATCAGCTGCTCAGGGAGG
-CTGGAGACACGGAGTCAGGGGCCATCAGCAGCTGGAATGACCATGAATGTGAGCCCGGAG
-GGAATGCGTGGGCAGAGAGGCACAGTGTAGATGAGAATGCCAAGGAGCAGCCTAGTGCAG
-GAACGGGAGGGCTCACAGGCAGGAGTGTGACAAGGAGCTGTTAGGAAATAATCAGAGCAG
-TAATAACACTGATactgacacgtactgagcatctactgtgtgctggctgctgtactgagc
-actttaaattgtactaattcactttatcctcataacaattcctccccatgaggtaggctc
-tatgttctattgtctttttttttttctaacgtttggagaaaccgaaggacagagagctga
-ggtggtttgcttaagatcactaaagggtaaggtttagagctaggattggaccccaggcct
-gtcctattccaaaatcagtgctcagccaggtgtggtggctcatacctatactcccaatgc
-tttgggaggctgaggtgggaagaccgcttgagcccaggggcagcctgggcaacatagcaa
-gagcctgtctttacaaaaacataaacgcatagccagctgttgtggtacatgcctgtggtc
-ccagttactcgggaggctgaggcgggaggattctctgagcctaggagtttgaggctgcag
-tgagctatgatcatgccactgcactccagctgggcaacagagtgagaccctatctcaaac
-aaaacaagcaaacaagcaaacaaacaaacaaataaacaTCAGCGCTCTTCTTCTGCACTC
-TGCTGATTCCCTTGGCATTAATAACAATGCCAGTGTTGGTTGTAGTAGTAATCATAGTAA
-TGGCGGTTATGTTGGCTCTAGTGTTTTGCAGTTACTATGTGGAGGTACCCAGTGTACCTG
-ACATGGTGGTGCTGGGCCTTCCCTCACCATATGGCATTCTACTGTAATTTCTTCCAGGGC
-CCCTAACATCTCTCACCAAGCCCCCGCTCCAGGGAGAGGGGAGGGGCAGGGGCAGGGCGG
-GGAGGTCCCCACTCACCCTGGCACTCCCGTGTGTTCTGGTGGGCCAAAGTGCCCGGCGGG
-CAGGTGGGCAGACACTTCCCCTTGTACAAGTAAAACTGCCTCTTGCACCGGATGCAGAAG
-TCCTGGCTGAAGCAGCTCTCACAAGTGGCCCCACATTCTGTAATAGAGCCAGGGACACCC
-CAGGTGAGGGAGACTGCCAAGGATGGGGCCCACTGGGTCTGCCCGAGGTGGAAGGCCCTC
-TGGGTAGCTCCAGGCTTGGTAGCATTTGGGTCAGGACTCAGTGTCTCCTTTGAAGCCCAG
-ACTTGGCCAAGGTCAAACTGGGCTGCATGTGAAGAGAACActccctttctcatttgaggg
-gaggctcagagagagcgagtgacttgcttgaagtcacccgcaaaccagggctggagtgag
-gactccctgcttcttttTCACCTCAGAAATAGTGATAATTTGCCCAAAGTTACAGCAAAA
-ATTAGAGCTTGGAATTAGGACTCCTTTTCCTATTTGagctaagaccagagaaggtgagtt
-acatgcctaaggccacaccacaaactagggtagaAGTGAAAGTTGCCTGTTCTATTAGTG
-CTAATTAAGGCTGAGAGCGGACTGACTTGCCTCGGGCTGCGGAGTCAGCCTGGACACAGG
-CAGGTATCTCAGAGTCTGGGCTTAGACATGCACCTACTTCCCCTCTGTCTGTGCTGGGGT
-GAAAGGGTGGGATCTAAGCCCATGGTGTCTAGGAGCCCAGCACTAGCATAGAACAAGGGA
-GAAGCCACGTACTTTTGCACCTGTTGACCTCCTGGCCGCGGATGCCGAAGTACCCAGGGG
-GACAGTCGTGCAGGCACTTGCCGTACTGGCGGATGCCTTCCCGGCGGATGAACAGGAAGA
-GCCTCTGCTGGCAGGTGGAACAGCCGTTCTCCTCTGAGCAGATGATACAGCCTGTGCAGT
-TGCCCCCCAGGCCAGTGCCCACTGCCCACAAGACCAGGGCAGAAGGAGGGGGAAAGGGAG
-AGAGAGATGGTCAAACCATATATGCGAGCAGCTGAGATGGTCTCATTGGGATAGtaactg
-ggcacatggccacccaaacaaaagactacatttcccaccttcccttacaactagatatgg
-tcatgtgaccaacatctggccaatcagatgtaaggtaaagcagcatgtgacacttcaaga
-aagctgccttaaagggcaggggtgtgccccttgtcgtcccctcatcctttctgttgggtg
-gaatgtgaacgatggctggagcacaagcagccatttcagatcatgaggtggaaactatgt
-cccgtgaggcggtggaaaaatcagataaaaagcacctgggtgcctgaggaaggcagaact
-gctgtaccagctctagcctgcctgtgtagactgttacatgagagagaaatcaacatctat
-cttgcttaaatcactgttatttgaagttttccatcactcacaagcaaacttaatctttac
-CAAAGTAATGTGAATTTTTGAGTGTGTGTGGGTGCACATGATGAGTGGGGTGGGGTGAGA
-CCCTCACCCTCCTGCTGGGTTCCTGAACAATACTCAGCAATACTCCATTTCTCACTGTCA
-CCATCAGCAAGGGCTCCCACCATCATCAGGAATAGCAATGGGAGAAATTTTTTTAAGGAG
-AAAATTTTTTGTTACCCCAGAATTGGCACCCAGGAGCCAAAGCTGGGGAAAAAAGAGGTG
-GAAAATGCTCTAGAATCTTAAGTGAGCCTCTCCCAGGCTCATAAGGAGTCTCTGTTACCC
-TGACCATCACCCCAGGACCCTGATTAAGCTGAACACTTGCAGGGAGGGACTCATGGGAGT
-TAGGGATTGTCAGCCTggccaggcacagtggctcatgcctgtcatcccagcattttggga
-ggccaagatgggagaattgcttgagtccaggagtttgagaccagcctggacaatatggcg
-aggccctgtctctacaaaaaatacaaaaattagccgggtatggtggcacacacctgtagt
-cccagctacttgggaggctaaggtgggaggatcgcctgagcggggaaggctgcagtgagc
-tgtgtttgtgccactgtactccagtcggagagacagagtgaagccatgtttccaataaag
-aagaaaataaaaagaaGTGGACAGCCTAGGGAAGTGAGTTGTGGTGCTGTGACTTTTCCT
-CTGTTCCCAACCCTGCCAACGAAGTGAGGAGATGCCAGAGAAACTCACAAAGACAGGGGG
-TGCCTGCAAGAAGGTGCCAGCATCTCATGCCCTGCTTGGACATAAACTCATGTCCATAGC
-CCTGCGAATCTGCCCCCTTCCCATTCCTCTTTGAACAGAGAAAGGAGACCAGGAGACAGA
-AGGGCAGAGCTGAGGGGAAGAGTGTGATAGAAGAGCCTGCACATCCTTCCCGGCACGTGT
-GAGGGAGTTCTCAGTGGTAAGGGGCACCTTGGGAGCAGCCAGGCTTAGGTGGTATTCCTG
-CTGCCTGGCACAAGAAGGCTGGTTGCTGGGAGGTGCCCCAGCAGTAAGAGGCAGCAGGGG
-AGACCACTGGGAGTAGGAGGTGGGGGAGAGTCAGAAAATGACCAGGTGTCACTAAGTGAC
-AGGAAAGGATAGGGCAGCTTTTGAGAGGCAGCAATTGGGGAAACAGTAAATGGTTTCATG
-TTTATATGTCATTAGGGTCAGACTGGTTAATAATCCGGTTATACACCTTGATTCACCTGA
-GCCCCAAGACCACCCGGCAGGAAACATTCTTGGCTCTCCAGCTCTCAGATGCTCCCCTCT
-TCCTATTGGTGCCCCATCTCCCTTTTAGAGGAATTCCCCATTGTGCAAGGTCCTGATGAA
-ACACATCCTGGCACCTTCCCCCTGGAACAGAAACCAAAAGAGTTCTGGCCCTCCTTTAAG
-TTGGCAGCAGGTGAGAGCTAACGAAAGCCCGGTCAGATACACATTCTGGTGACTCCAGTC
-CTGGGAGTGGGACACAAGAGTGAGGGTCACACAGAAATGGGGTTCATGGTGGAGGCAGGG
-CAGGCTCTCTGCCCAGCCCTGGCTGAGGcctttctctctcccttccatccctcagtccct
-ctgttccttcctccctGCTCCAGCTCTCGGATGAGTACTGCTACTTCCCCAGTCCTCACC
-TTCTGTTCCTTAGATTCGGTGAGGCCCCACATCCTGCTGATAACCCTCTTTCTGTTGCTT
-ATAACTCAGGAGGCTTACTGATCCAGGGTCGTACGGAAGCACACAGTAACTAAAGTGTAC
-CCTGGGATGCTGTTCCCAAGCAAAGTTGGCATTGCCCTCAATTTTCTTGCCCTGGGATAA
-GAAACTGCAACAGGAGAGCAGAATAAAGATTTTTGTGCCTCTGGAGCTGTATACCTGGCA
-GGGATCTGAGGGCAGAGAGCAAGTGTGATGTTGTAAGGGAGATTCCCAGAGCCAGAGAAA
-TAAGAACATCCACTGAGAATTTAGCAGAGTCCGGACTTCTCACTCAgcaaaagattcaga
-ttctgatactacccagagctggcaagaatgagaggaaaccttcgctttttcaccttagat
-aggagtgtaaacttcggggaaaaatctagcagtacctaataaatttggagatGTCTCTTT
-TCTTTTTGTGTTAAAAAGtttttttgtttgttttgttttgttaagacaggatcttgctct
-gtcacccaggctccagtgcagtggcatgatcctaagctcactgcagcctcaaattcctgg
-gctcaagcaatcctcctgcctcagcctcctaagtagctgggactacaggcatgtcccacc
-acaccaagataattttttaaaaacttttgtacagatggtctctctctgtttcccaggctg
-gtcttgaactctggcctcaagtgatcttcctgcctcagggtcccaaagtgttgggattat
-aggcatgagccaccacgactggccTGATGTCTCTTCTAAATGTAACAATTTAGCTTCTGG
-TATATACCCTAGAGcggcagttctcaaactctggcgcacaacagcagctcctagagagct
-tgttagaatataggtccctgggttccacccctggtacgtctgattcagtaggtctgagaa
-tttgtatttctaacaggttcccaggtgatgctgatgctgctggtccagggaccatgctct
-cagaaacactgAcctagagaaacccttgtatatgtgtagaaagagacaaagatatttatt
-gcagcattatttaatagcaaacaactgcaaaaagctaaccctctgccaaaggaatagata
-aatacattgtggtatattcatacaccacagccagataccacatacacaacccagccatga
-taaatgactgaggtagctacagttatcattgtgggcacagctcaaagacggggctgagag
-gaaaaaagcaaggtgcacgatgaatcatatagtaagagccatttatataaagttcaagga
-cctgcaaagcaatattttgtAGCATTTGTGACTTGTAAATATGCATTCAGAGCAGAAGAC
-ATGGGACTAACCAACACTGAATTCAGGATCATGGCACACAAATGtttattatattatttt
-aaattCTTGACTGTAGGTTTGAAATAGTTCACCCTAAAAATGCATAAAGAACAAAAGAAT
-TTAGCCTCTACTGTGTCCTGGGGCAGGAGGAGGCCTACATTCTTTCTTCTCCTTCTCCAC
-TAGCTCCCCTCCCAAGCCCTGTCCCATCCTCAAGCTGAGGTCTTGAGCAGGGGAAGGTGA
-CAAATTCTGAAGACGTGGGACCCGGGTTCCAAGAGCAGTGGAGACTCGTGCCTCTGCACA
-CTttgcccctcgtccactctcccctcatcctcagtagtggaatcctgatttttattttat
-tttttgaggcaaggtcttgctctgccccccaggctgaagtgcagtggcacgaccttggct
-cactgcagcctagacttcccgggctcaagcaatcctccctcctcagcctccctagtagct
-aggactacaggcgtgcaccaccatgcccagctaatctgtgtatttttttgtagagaaatg
-gtttcaccatgtttcccaggccggtctaaaactcctgggctcaagcaatcctcctgtctc
-agactcccaaagtgctgggattacaggcctgagccacagcgcccggctggaaccctgata
-ttaagcggagtttatgtcctctaagactatatttcccaggccctttgcagctatatgtgg
-tcatgtgcttatgccctgaccaatgggatatgagcgggcatgccctgtacagcCCCTTAG
-GAAACGCTGGCACTGTTCTCCTCCCATTTTCCCTTATGCCTGCAGGAGTGCAGGCTTAAG
-AGTGGAGCCATGGCAGATCCAGGAGGCAGAGGGATCTTATAGAAAgacagcttggcgtgg
-ctgtattaacccagggctgcccaccgccgagattctttcctggggaagggaggaaagcat
-tgcccatcttgtttaggtcactgGGCCTTTCTGACGCACACATTGACTGATGATGTCGGG
-TTTTCCGCCATGCAAGGCAGCACAGAGTCATATCAGTGGAGACCAAGTTGCCCTGCGCTG
-TGCCTTGGCGCTGTGTAAGCCCACTGGGCCTGAGAGGCGACCCCACTACCAAAGAGCAAG
-GGGACCCTCAGTTGACTTGTGGTGATCTTTATCACCTGGCAGAATAGGACTTCAAATTAC
-AAATTAATTTAAATTACAGAAAAACAAAGTAGCATTTCCTGAAaaacgaatctgtggaca
-cagactcacaccctgacatggcgttgctgcccattttgcagctgagaaaaaccgagaatc
-aaggaggtgaaacgacatgtccagggtcacacagaattggcaggggtggacccacatcac
-tctgccccacgctgccctctTAGAGCATCTGTCCAGGGCCTCCTGTGTCAGGCAGAGCCT
-GGGGCCATGGGGGTGAGCCACGCATGGCCCCTACCCCTATAGGACAAACAGCCTGGTGGG
-AGGAATTGAAGCCCACAGAAGTGACAGCAAAGCAGGATGAGATAAGGGGTCAAGATGGAG
-ACAAAGCAAAGCTCTTACCACTCTtagaagagcttagaggtcactcagcacaactcctgc
-agtttcactggggacactgaggccagaaggggtggagctttccccaaagtcaggcagcca
-actGCAAAGAAGCCTCAGTCCTCAGTTAGAGTTATAGCACTAtttgttttttgtttgttt
-tattgtttgtttgtttgtttgtttgtttgtttttgagatggagcctcactctgttgccca
-gactggagtgtagtggtgcgatctcagctcactgcaaactccgtctcccaggttcaaacg
-attctcgtgcctcagtctcccgagcagctgggattacaggcacccccaccaagcctagct
-aaatttttttgtatttttagtagagacggggtttcgccatgttggccaggctggtctcga
-cctcctgacctcaAAAAGCTACAGTATATGCTGAAGGCCAAAGAACCCAACAAGCCCCTC
-CCAGGCCTCATAGAGTGCTGGCCCACTGGATGGTGCTTAGCATCCTTCAATACCCTGGTC
-TTTGAAGGTCAATACCCTGGTCTTTGAAGGGTAGTGGCTGTTTCTGGCCTCATCCTCGAC
-CCTGGCAGTTGGCTAGGATGCCCTCTTGTGCCTCTATGTTGTAATGGCACCTCTTGCTTT
-TTGACTTCCGGTAGCCTGTCTGGTGTTTCGTCATGTCTCTGTAACTCATTAGAAAAAGCA
-GTGCTACTGCCTCTCTCTACCCCCTGCCCTAAAGTCACGGGTGCAGGCGCTTGAATGTTC
-ATTCTGTGAATCATCAGTGATGACAAGAGTCTGTAGAGTGCTGCTCTAGAAAGATCCAAA
-CTTGAAGGTTCTTAAACTTGACTGTGATAACAATCTCCAGAGAGGCTTGTAAAGCGTCTG
-CTGTGGGCCAGGAATGTGCACTTTAACAAGTCCAAAATAAATGTAACAGAATTTTGGAAG
-TGTCTTCCCTGTTCACAGTTTCCTTTCCCTGAGAACTGGCCCCAGTAATCCTGTTTGTAG
-GGCATGACTCTGACCCTAACCAATGGCTGTCTCTTCCAGGATGGGCCAATTAGACCATCT
-CTCTCTGGGCTGATGGACAATGGTCTGCGCTGGCCTTGACCTAAGGCGATCTGCAGGTGG
-GAGGGTAGCCTGTTCCAATGCACATGTGTGAGAAGCCTTGGTGGGCACTAGCTAACAGAG
-GCTCTGCTCCTCTGcactctctggcattgaggttcgtgtgctgccatatccacccagatg
-cacttaacctgggcttggccaatcagagcatcaggtccccttgactacagtggttgtagg
-ttcagacacaggctcacatccccacaagagctagtcttggggtttttgctgaggtcaatg
-gatgtgtgtggagatgtgtgtgttttcctttcctctctttggatctaggaggatatagat
-cagagctggtgggtgccacatgagggaagagcctctggagaatggaggccatacagcaga
-aacagagccaagagacacagacaaagaccaaaaagagtcatctgtgcatgtggatccacc
-ctggggatccataaattctctttttttctcaggtcacattgagttaggttttctgtcact
-tgcaaccagatgattcccgactaatacaGAAGTAGAGAGAGAAAAATAAATCAGATGCAG
-AGAGAGAAGCAGCAACCAGAACCTCACGGGCTCCTTGAGACAGAAAAAATTTCTGACTGC
-CTCCCAGTCCTTCCCAAAGCTTGGCTTGTCCCATAGCTCCAAATCCAGTGACTTTTTCAC
-TTGAGCTGGTTTTCTTCTGTCAAATTACAATAAAAATGGATGTAGCTCACTAGACAGCGA
-ACAGATCACGGTGGAGCAGCGCTGCTTTGGCGCGGATGAGGAACCTGGAGCACCACCTAT
-CCAACCTGATCACCCTGGTGCTCCAGGGGACACTGAGGTTCCAGGGAGCACACTTTGAAA
-CCCCCTGGGTCCTTCTACACATCTTGGCCTCTGTCGCTGTCCTCTCCCAGCTGAGATGCA
-CATTTTAAAAGCATTCAAGCTCTAGTTGCAACCTCCCCAAGTTTTCTTGGGCCATCACAG
-TGGATGGCAGGCACCCCATGTAACTTCCATTAACAACTGTCTCCCATAATCAAGACCATC
-CTCCCTCAGTCAAAACACCAGTAGGCCACAAAAGCATGGCCCTGTGTTGCTCCAGCAGCT
-GGAGAGGCTTAGAATGAAATCTGAGTCACTCCATGTTTCCCCAAGCACCCGAGGGATGAG
-TCCAGATTTGGATGTCCATTTTATGGAGAATGAGAGTGGAATCAAACACACCAGATTTGA
-CAGTTTGCAAAGTGATAAAGGCTTATGACAACTCTGAATGCGTGCATTAACCCAGGGTTG
-AGTGATCCATTCATTCATTCATCGACCcattcattcaacaattactgagcccctattctg
-ggtaaggtccagtgctaggACTCAATGGTTATGAGCTTTGGGGCagttgtgtgaccttgg
-gcaaggtactttacctctacaagcctcagtttttccagctgtaaatggggataataatgc
-ttatcttgcagggctgttgtgattaaaggagatggtacgtgaaaaactgttagctcagac
-cacctgcagcaggcatctgataaactgaagctaccattattATATTGAGAATGATGTGTT
-TTCTGCCCTCAAGGGACTTAAAAATCTAAAGACGTGTAACAATGCAGGTTcccaggttga
-tatcctggccccatcactcattgaatgagatccctcgtctctgtgggcctcagtttcccc
-atctgaaaaattgtggcagcaattcctacctccacgtgatttgttatgagggatgtgcaa
-accagcaagcactggcacacagtaggtgctcCTCTGTAAACCTAGGTTCCCTCCCTGTTC
-CCTCACCATCATGACACACAGTGGGACTGTCAACCAACATCTGGACCCTTGTCCTCTTTC
-CCAGGTGAGCAAACAAAAGCCAGAGATGTTGGTGAGGCTGGAAGGAGGCCAGCAGGGTCC
-AGGGACATGGTCTTTTGCCCTCTGGATGGTGAAGTGCTCAGGGCAGAGATACTAGCCAGC
-AGCTTTGGTCCTAGGTGAAGGGCAGGCTTATTCCTTCTTTTGGGAATAGGGAATAACCTG
-TGCCCTTCAAATAAGGGTCCCTAAGCTCAGGTTCACCCACATCCTGAGAACTGCCCCAAG
-CACCTTGTTTCAACAGGAGTCAACGGCTCAACATGTGCAAGTGATCGCTGTATTTTTTTT
-TTCCATTTCAGGGTTTTGAGTGAACTTAGGGTCATCTCTGCCATATCATGCCTTCCATCT
-GCCTTCACTCTGCAGAACTTCCCTGAGGGGTCAAAAATGCAGGGTGACATCTGGGACGCT
-GAAAATGTCATGTTCTCCTAGGCAAGCTCGTCTCCTCAGTAGCCCAGTGAATCTGTCATT
-GAAATTTCCTTAATACCCAAGCCAGAAAGCCTAGCCCCATACATTTTTTTTAAAAAAAAC
-AAGACTAAtttggatagatttctagcatttaaaaaatcaagagatttcacattaaaaagc
-tggaatttgaacttctctggaaaaagtcagaacatctaccaacactgggtctgctgtcac
-agggcagtgagtggttagagttacataaataaggcatatgttccccaggttactgcagac
-cctaccCCTCCCTATTGTATTTCAGATACTGAGGGAAAAGGTCAGCTGCCCTATGTTATC
-ATCCTTGAGCTACATCTTAACACCCACTTCACTCACTCACAATAGAAAACAATGTAGAGc
-aggggttctcaaacttgggcatgcatcagattcacctagagagcctgttaaaaacacagg
-ctgctgggccttaccctagagttgctgattcattaggtctgggcagggcctgagaatccg
-cattgctaacaggttcccaggtgatgctgacctttgctggtcctgggcccacactttgag
-aactactAGTGTGGAACAGGGTTAAgagccagactggttggattgaaatttcagctctgc
-cccttacctttgccatgtgaccttgacccagtgccttaacctcactgtgcttcagttttc
-tcatctgtaaaacaagaatcctcctggctgacctcacaggtgtgctgtggggGCCTGGCA
-GGGCTGACAGTCAAGCGGGTCTCCATGACATCACTGTTACTACCATTATTATCACCACCT
-GCCCTGCCTGTGTTGGCATTTGTGATCCTGGAACTGCTTTGACAATCAGTGCAGAGTTTT
-TGGTTTTGATGCCAACATTTTTGGGGGTAGAGTTTCTTCATAATTGGGGTGTGCCCTGGG
-AAGTGTGTCTTGCATGAGAACATCATGTCATGGTGAACTAAGGATTTAATACAGCTGTCC
-TGGAGGACTCCCCAGGGCTAAGAAGGATGGGGAAAGAGAGAAAGACACCACTGCCCCTGC
-TGAGGTCCCTGCTCTGTCCTTGGGGAGGACCCAGAACCATGCAGGAGGGCCCTACACAGA
-CAGTGCTGGGCAGCGCATCCTCCGATGCCCGCCTGGCAGTGCAGGACGCATGTCACCGAT
-GACCAAGGGAAATAAAAAACATCTGGGCACCCGCCTGCCCACTCAGGCCTCCACATATGG
-GAGGCAGTCGCCACTGCTGGAGGCTTGCTCAGAAGATCCCCCAGCACATTTCTGCCTAGG
-GGTAGATTGCACCATCTCTAGCAAGGGGGTGGGCCCTGGAGATGACTCCCAGCTTAGAGA
-CTCCCTGGGATCAGGGCTAGAGGTCGCTAGCCCACTGGACCCTTCTCAGCACTCAGGAGG
-TGGGGGGACCAGCAGGGCAGAACATTCAGCAGAATGTTGaggttgccttggctttggggc
-ctgacaaaccaccacttcctagctgggtgatattgggcaagtggctttactgttctgagc
-cttggtcttctcttctgtaaaatggggacgatagtagcaaccacctcccaggcagttgtg
-gggatgccatgaactcatctgcgcaaagtgcttagcacagctcacggcagatgaatgagc
-actccattactacttgattCATGAGAGATGCTCCTTTGAGGGCTGGGCCCAGCTTGGCTT
-GCTCACCTTTAAATCCCCACGGCCCTGCACATTGTAGGTGCCCACTGACTACCCATTTGT
-GATTATACCCATTATGCCCATTCATTATTTCTTAAATGAATGCATGAACGGTGGCTCAAT
-AAAGGTTCTCAAAAACTGCTCTCAGGGGGCTCACAGCCTATTTGGGAGGACCAGGCCCAT
-ACGAATGTGGAGAAAGCTGATGACCTCTGCCCAGCAGGGCTCAGAGACAAGTGAAGGACC
-CAGGCAAGGTGGGAGTGAAAGTCCAGAGACTGGAGACATCAGGGGTGGTTTTCTAGGGAG
-GCAGATGTGGGGACAGAAGCTGAGGCCAGGAGCAGGACTAGTTTGTGTAGATGGAAGAAA
-GGTTTCTAAGAGAGGTGAGTACAAGATGATATTGTACTCATTTGGTAGAAAGGGAGGGGC
-TTGAGCAAGGAGCAGATGGCAAATCCCCGCTAAGGTGCCAATACAGGACACCTAAGGGGC
-TAATGGATAAGACCCTCAAAATACAGTAAGAATAGGCacacatccaaaatggaaactttt
-catcctttgccctccaaacctgcttctcctgtccatttcagtcaatggctactccactca
-gggccaaagacttcagcggcatccttgtctcttctctctccctcatatcctactattggc
-ccatcaggaatccggtcagttccacttctgaaatatgtctgggaataatttctccacctt
-tcctgtccctaccccgttccctgctcctgccctgtttccccaccactcaccttccctggc
-catgctggcctcatcctccatgttccccatctgccaagaccactcccaccacaggacctt
-tgcacttgctcttccttttgtctggaatgcccttcccacattcacccgcaaggctccctc
-cctcaaatgtctccttgtggggacaagagtgattccttcttagatactaatttgccacgt
-caactcctgactaaccctgagtccagtaatgcctccaagatgtctagctgaagcattact
-ctctacgtagaaacacttatttgctgcgggtttcacttttcctccaaaacaaaccttgat
-gctgctgcaggaagcataggctatgacacccatagcacaatgtcagtcacctgtgcactc
-ctcccagagcacgcagacctttctccccaagatatgtaagccctgggtctggagagttac
-agcttggagatctacctatcttgaggctgcccaaatcttgctctgttcaaaagttcccca
-actaataaccctttaccaacaaattggaattggctgcctcattctttggtttcccagctc
-cttctgcatttggggtcgctttatgtatacggccctttcacagaacaccccttccctgtg
-atgcccccagacctcttgcctgcagcagcaccacacctacaccctattcctctcccacgt
-cgctatgttcttcatgccatttattcccacctgataggttctaaatttggcaagtgctgt
-tgtctctttcccaccagtgaaagatgagttccaggaaggcagggaTGAGCCACGGCACAC
-TGGACCTTCTCACTTATGCAGCACCTGCCTTCTCACTTAACCAATTCTTTGTTTTATAGC
-TGCTTACCATTCCGCATAGaggggctgcaaaactcatttaggtgctattatcacacccat
-ttcagaaaggaggaaactgaggttcagagcaatgatgctgcttgcccgaggtcacttaat
-aagtggagcagatattcaaacccaggcagtgtgactctgaacctgagggttatcctcagg
-ttgccacactgcAGCCTGGCTACTCAACATATCCCTGTGCGCCTCCTCAGTCCTCCATGC
-AGAGTCCCTTACCTACTGACGCCTTGCTAAGTTCCCAGTGCTGTGCTGAGGCCTTCTTCG
-GTGTCCGCTTGACCTCACCTGAGACAGGAAATTGGCCAAATGGTGGCAGTGCAGGCTGCC
-CCAGGACTGAACATGCCCCCTCTGCATTCCTCATCCATCCTCCCCTCACCCCCAGTAGAG
-AGTGAGCAGATCAATAGGTGTGTGTTCAATCAAGGGGTGAAATGCCCACTCCGTCTCTCA
-AATTCTCCAGGAGTGAGTCTCCTGCCTCGCAGCTGGGACTTGGGGAGGATGAAGAAAAAT
-TACCTGCTAAGTTGCAGCCTCTGCTGGACATTCTGGCCAGAATCCTTTTTAGACGTTGAC
-CTATATGGGCTGGTTGCAGGGGTGGAGAGGGTGGTGGTAAAACCGGGGTTCAAACTCACA
-TTTGTTGATTTCATGGCcagtggtgatctcagatttcaatccccatcagaatcacctgag
-gctgcttattaaaaACAAGAGGTGCTGTCGCCTCTCGACACATGCGGTTGTTTTAACGTT
-TATGGTGTGCCCAGGGTTGTACGTGCATGAACTCAGAGATCTTCAAAAACTGTCCTGTGA
-GATCAGCCAGGgcttcccaaactgtaatatgcacacaaagggatttaactcagggatctt
-gggttaaaatgtagattttgatgctaaagttctggaatggggccagaggtgctgGCCCGA
-GAACTCACTTTAAGAAGCGAGGCGGgagatgctgttatcattcctcattttacggttcag
-gaagtgaaggctcaaagaccaacaattataggtggtggcattagatttaaacccacagct
-gatgaaaccccagactcattctactgtgtcacactgccTTACCCTGTTGGTCTGATGATG
-AACGTGGAGCGGGAAAATGGGAGTGATACTCAAAAGGGGCAACCTggccaggcacagtgg
-ctcacgcctgtaatcccagcacttagggaggctgaggcaggtagatcataggaggcccgg
-agttcgagaccagcctggccaacatggcaaaaccccgtctctactaaaaatacaaaaatc
-agctgggcgtggtggtgcacacctgtaatcccagctactcaggtggctgaggcatgagaa
-acgcttgaatccaggatgcggaggttgcatgagccaagattgcaccactgcactccagcc
-tgggcgacagagtgagacgctgtctcaaaaaagataagatataaaataaaataaaataaa
-aataaaataTCAAATGGGCAACCTGACTCCTTTCGCCACTCATAGGAGGGGCATTTCCCC
-AAGCAGCCTGAGTTGGGGACAGTCCCTGCCAGGCCCAGCATGGCAGAAAAAGGAAGGGCT
-GGGTTCATGTGTGCCCGACATGTGTGTGTTTGGGGGACAGGGGCAGGTATGTGCCGACAC
-ACGAGACCCCTGTCTAAAGGATCTGCCTGTCCCCACATTAAAGCATAGAGAAGGCCTGAG
-CCCCTGCCCTATGCTGGTCCTGCAGGGCTCGGCTGGGGCCCAAATCAGGGGTTGACACAG
-TGAGAACAGGCTGCTGGTGCCTGGCATCCCCCACTTCCCACCCCACATCAACCAAATCTC
-TGCTTCCCCATTCTCCTGGACCTGCCCTGGACCACATCTATTCTGCCCTCCATTAGCTAC
-TCATTAAGAGAAGTTACATTTGTGTTTCTGGTGGGAGCCCTGGGGGTGCTGAGCAGCCCA
-GAGCAACCACTGGTGACCTTCAGAAAAATCATATTAAAGAAAAAAGGGTTGTTTTTGGAT
-TCCTCATCATTCGGCAAGCTGTGCTGGGGGTAGAGCAGCCAGATGAGTTCGGGACCGGGG
-CAGAGAGTCTACCCTCCAGCTGGCTTCTCCAGACCCACCTGCCCAGAGCTAGTGCCCTGT
-TAGCCAGGAACACAGAACTGTCACAAAGCTGTCCTGAGCATGAAACTGTTACCAACCAAT
-CTGTCCGTGGAGTTGTTACAAAACTGTCTTGTGTGTGAAGGTGTCACAATGTTGTCAAGT
-ATGTGACCTTGTATAAGAAATTGTCATGCAATTGTCCTATAGGTAAAACTGCCATGAAGT
-TGTCAAGCATATGCAGTTGCCACTCATTTGAAAAACTACTGGAGAAGAGTTTCTTTTCTT
-TTCATGTATGAGGGACAGGTTTGCTGTGTGGGTGACTTTGAAAAAGTTGCTGACAGGCAC
-TGTGCTTGGCTGCTGCTCCTGTAATAacagcgcccggcacccagtaggtgctcagtgagt
-acttgccgaatgTCTCCTCAGGGCTGCAAAGTAGACTCAGACAGGTTCTGGTTCTTTCAG
-GTGCTGGCTTTGTCCCGTAGTGGGCTGGTCTGATGTGACCTCGGGTAGGTCTGTTGCCTC
-TCGCATCCTCTCTGAGCCTACTTTGGTTGTTGTAAAGTGCCCTGAGGCCTGTGTATGACG
-TGCCCAGCAATACTGGGGACAATAAATGCTGGCTGCTAATTCCCTCTCCCTCTTGTCGGG
-GGTTTATGATTCCTCAGGGCTCTTGATGGTAGCAGAGGCCTCTCGTGGCTCTTTGGGAGG
-CTGTGGAAGCTTCAGCTTTGGCTGAGTAGGACGTCTGCAGTGGCAGGACACCTCCAGCCA
-ATCAGGATGCTCAGTGTCACAGGGATTGGGGGCAACGCCCACCGCTACAAACCCAGGAGG
-CCTCCTCTGGGGAGGATGTGAGCTCCAGGATTCCAGGAAGGGTGGGAGGAAACCTTCTAA
-GGGGAGCTGAAAGCTCGTTGATTCCTAAGATGAGCCCGAGTGAGAAAGGTACCAGGTTTT
-GAAGTTTGTTCTGCAAACGACCTTCTTCACTTTTTTGTGAAGTCCTGCaatcaacagagc
-tcagggctaggaattaggacctttgctcctgtcccaccttggactcagactcattgtatg
-acctttggcagagcacctggagcttcCAAGGGGTGGCAGAGAGTTGGGAATGCAGTTTCC
-TATCGGAAAAGCAGAGCCTTGGTCTTGATAAAGAACTTTTGAACTTTTTCTTAGCCAAGG
-GAGCCTTCCTTTTTGCAAGATGAAATGTGACATGAGAGATCGATTCCTAAAATGAATGAG
-TTGAGCTGCTTTGGCTGAGGCCAGGATGGGGGTGAGGGTGAGCATCTTGAGCTGTCTTTT
-TGGTTTCCTTTGCCTACTTCTAGAGGCAGCCTCTGAGAGCTTGGATACCCCCTAAGGAAC
-CTTTGAACCCCAGAGTTCCACAGTGCTAATGGCTGCAAGGCAGGTGATATAATTTTGTGG
-GACTCTGGAGCCTGGGTTCATTCCCACACtagcttctctgagcattggttttcccgtctg
-taaatggggataacgactatgctcacatgttgtgacagtgtggtaagctggttttgtgtg
-tggcatgccaaaacagggtttggctgacatggggtgcacagcaatgtgggAGCTGCTAGC
-AGTTGTGGATCTCTTCTTTCACAGGCCAGACTGCCTcaacaatcctgcaagatgggtagt
-attatctggtcttgcggacaaggaagctaaggcacagagaaggtaagtaagttgcccaga
-tcccatagctggtgagtggcaaactcaaagccaggcagtctTAGTAACAGATAGTTATTA
-TTATTTTAAGTACTGGGGAGAGTCTAGGCCCCAGAATAGGTCCAAAATAAATACCCTCCT
-CACCTTACATAATTAAGCTCTAAGAAAGCTTAGAAATAggccaggcacggtggttcacac
-ctgtaatcccagcactttgggaggctgaggcgggtggatcatgaggtcaggagttcaaga
-ccagcctgaccaagacggtgaaaccccgtctctactaaaaacacaaaacacctgcaccag
-gtgtggtggtgcgcacctgtaatcccagctacttgggaggctgaggcaggagaatcactt
-gaacctgggcagcagaggttgcagtgagccgagatcatgccactacactccaccctgggc
-gacagagtgagactctgtctcagaaaaaaagaaaGCTGAGAAATATAATCAGCTCCCAGT
-GCTGAGAAGACTTGGGGCCCCACTGCCAGTGAGCATCAGGAAAGGGGGCCAGGTCTAAAA
-GTCAGCGCTGACTGAGGCAGGTCCTTGGTCAGTGTGTCCCTGCCAGTGTTCCTGGGAAAG
-CCCCAGTTCTTCTCAGCCAGCACCCTGGGTACCTGGAGCTTCCAAGGGGTGGCAGAGAGT
-TGGGAATGCAGTTTGGGCCTCCAGCCCAATGCTCCATGCTCCTTGCCCAGTAATCACACC
-TGGCACAAAGTGAGCATCTTCAAGGACCCTATTCTGGGTCTGGTCTCTCCCCATGGGCCT
-TCTTCAACACTCAAATCCTAGTAGTACAAGGGAGAGAGCCCCAGATGTGGACTcttgtcc
-agttctgtgtgtcctcaggcaagtgtctccctgtctctgggcttcagtttctccatctgt
-caaatggatggttaaactcagtgtttctaaaggcccACTGTTCACccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccccatccatccatccatccatccatccatccacccacccacccatctatccatcca
-ctcacccacccatctatccatccatccatccacccatccatccatccaccaacccatcta
-tccatccaatcacccacccatctatccatccaccaacccatctatccatccactcaccca
-cccatctatccatccatccatccacccacccactcatctatccatccatccatccatcca
-tccacccacccacctacccatctgcccacccatctatccatccccatccatccatccatc
-catccacccacccatatatccatccactcacccacccatctatccatccatccacccacc
-cactcatctatccatccatccatccatctatccacccacccacccatcatccacccaacc
-atctatccgtccatccatccattcagcagatatttcttgaatatcatctatgtgccaggA
-TCCTTTATTTATTAAAGTTAAAAGACAAATCACAGACCTGTAGAAACATTTTAGAAAGAC
-ATACAAAATCATACTGGATTGGAAATGTAAATTTCCCCAGGACttttgttcaccagtgac
-tctccaatgccatgcatggggccacatgtctactaggtgctctgtaaaatgtttattgga
-tgtaagaatGAATAGGACATATTTTGCTGTTCTAAAGAGAGCTGCCTCCGAGTCTGAGAT
-TGGAGTCAGACATCCTCTCTAGGACTTATTGAGAGGGGGCCAACTATCTTTGTCACCCCC
-ATCCCTGACCTGCCCCACTGCCTCCCCAGCCCATATAAGCCAGTTTCTAAAGAGGATCTA
-AGGAGGATTGGCCAGCAGTGACTGGGGCAGGGTAGGGCACGGCATGCCCCCAACTCCCAA
-GCCCAGGTGGGCTCATGGTTTGGAGGGGAGAAGCTATGAACCAGAGGGAAACAGGCATTC
-CATCCCTTGATTGAACTCACTCTTGTTGATCTGCCCTGTGTCCATTGGGAGTGAGTGGAG
-AATGAATGAGAAATGCAAAAGGGGTGGGGTCTGGCAGAGGCAGCCTGCATTGCCACCATT
-TGACCAATTTCCTGTCAATTTCCTATATTTGGTCAAGTGGACATTGAAGGAGGCTCTTGA
-GCTTAATCTAAGCCATGGTTTTCCAGCCCAAAGGGGCATGAGGCTGTTGAAGTGGGGATG
-GGGTAGTGAGGAAGCTAGGGTGATCTGAAGAGGTCAAGCTCGTGCTCCTTGCTCAGTAAT
-CACACCTGTGTACCAATTAGGCACCTGCCACACGTGGGAGAAAGGGGAGGGCATGGATGG
-AGGCAGAGGAACATTTAGTCCCAGTCCCTCCCTGCTGCTCACTGGTGATGGCCCCAGAGT
-TTTCTAACACCGGGAATTGTGGAGGCCACAGCAGCATCAGGGTAGTGACAGCTGTCTCTA
-TCCCCATTCCTTCTTCTGCTCCCCAACATACAGGGGAGAAATCAACCCAGAGGGAGGAGA
-GAAGAGAATGAGACAGCATGACATATCTCCCTACAGGGCAAATCAGTGGAGTCAGAAGCT
-GAGTCAGGCAGTGATGGGGAAGCAGTGATGGGAAAGGAGAGCTTCAAATCAGACCTGTAT
-TTTAAAAATTCAGCACTGGACTAGGCTTTTTAATAGCTGAAAGTTACCAGAAAGCTTTGA
-GATCTGCCCAAAGTTATTAAGGATTGGAGTTTAAAAATACGACTGTGCATTGGGGGTGGG
-GGGTGGGGGGTGCATGGAAAGCATGCCATGTTTGTAACCCTCTGTTACAACTTCAGTATC
-ATCATTAAGCCAGTTACACACAAAGTAAGCCAAGAAtatccttaatacacaacgagctcc
-tataaatcaataagaaaaaggggaatgatccaagtgtgtggagggagaatgggcaaagac
-attacaaggaatttaaaaaagaaagacaaataggacaataaccatacgcaaagctgttct
-acttccctaagaattttcaaattgaagatgagaacaagaatgaaataccaccatgaccta
-caagatacggaaactgtaaaagactCCGGCACCCTCTTTTGAGAAGGCAATTAGGCAGAG
-TCTATTATCTGTAGCCTGAGGTAGTAACAGcattttacaggaagtgtcctgagttgagag
-aggggtaggcacttgttagaagccacacagtgagtcatgggaggggaggagctagaactc
-agacctctggaTGGGCACCTTTGATTCTTTATCTCCAGCCAGCTGGTCCTCTCTGTCTGG
-GCTAGTGCACAGCCTGGCCCCTGGCCCCTGTCTGGGTAGCCCAGGTCTGCTACATCCATT
-GCTGCACCCTGCTCTGGGCCTGAGGATGGTTGGGGCACTGCTATTCCAAATGACACATCT
-CTTATGATTACCCTGTCCTTCCTAGACAGGAAGCTTTCAATTAGTCCTGCTGGGCAGCAG
-CCTTAGAGGgtagaggtaggactccaaggtttgggatgagacaaacctgttctcaaatcc
-cagccccacctttactccctgggacagttacttaacctcagtttgctcatttgtaaaaGG
-AACACTGTccaggtgcggtggctcacacctgtaatcccagcactttgggaggctgaggtg
-ggaggattacttaaggccaggaatttgagaccagcctgggcaacatagtgagacccttat
-ctctatgaaaataaaaaaaaaaaattagccaggcatggtgatgcgtgcctatagtcccag
-ctactcaggaggctgaggtgggaggactgcttgagcccaagaggtcaaggctgcaatgag
-ctaagatcgtgctattgccctccagtctgggtgacagagagagaccctgtctcaaaaaca
-aacaagattaaaaTGGACACAATCACCCACCCACTGAAAAGCttgttccttccacagata
-tttattgagggcctactatgtgccaggcacttttcaaggcactgcagatacatcagtgaa
-tgagacagaccttcccctcatgaagtttacatcctaagtgggagagggagatcatttcag
-agaacgacagggaattgaatttgggtacacagagtggcaggagggagggcctgggctgcc
-tggaagggcatctctgagatacacaagaaagcactcttggcggagggaccagtgggtaca
-aaagcccagaagcggcaaagaacgtggtgtggaagagagcagcaaggccagagtgcagtg
-actgaggggagagtggtgggtggtgaggtctggaggcagaggggccagacccccaggaca
-catggatgagtttggatggtgctggattttcctggaagtgagttgggaagccactgtggg
-ttgcaagccgaggagtgtctgccaccttgaaagcttctctggtgctgaggggaatggact
-gtggggcaggagtagaagctgggagctcagggtgtatgggctgtggtcattctggtggcc
-tggacgaggctggcagctatgagaagtgggtggatccagggagggtggacagacaagctc
-tgctcatgggttATCATGAAGATTAAAGGGTAAGTGACTCAGTCCACAGTGCAGCACATA
-GCACATGCTAGACAGATCTTAGCTGttttatttatgtatttatttatttttgagacacag
-tcttgctctgtcactcaggctggagtgcagtggtgtgatctcgactcagtgcaacctctg
-cctcccaggttcaagcaattctcctgcctcagcttccctagtagctgggattacaggcac
-ccaccaccatgcctggctaatttttgtaattttagtagagatggggtttcaccatgttag
-tcaggctggtcttgaactcctgacctcaagtgatccacccgactcagcctcccaaagtgc
-tgggataacaggcgagagccactgcgcccagccAGATCTCAGCTTTTAAGAGGCCTAGAC
-CTAGAATCCCATGACTGTGTCTACCCCACAGCCTCCTCCATAAATGCCCCAAATCGCTTC
-TGCCTCTCCTGGTCATTGGTTCAAAATGTGATTCCTTGACCTCTTGTTGCCTCTTGACTT
-TTGCAGCTGCTGGGATGAAGTACTTGTTCTGAGTTCCTCTAGTTGCTATTTTAAGCAGAC
-TGCATACCCTCCGGCCCCCATCTCCCAAGCTGGTGTGAAACCCAAGGCAGTATCTGGGTG
-GCTCCCTAAGTCGTTTTCCAAGTTGAGAATAGGTAGTAGAGTCACCTATTCTCACAACCG
-TGACATTCCACCCAGTCCAGGCTCCCAGACTAACTGCCCAGCCCCTGGAagtagagagat
-gggaggcagcaccaggcagcagggaacccaggtttgagtcccagctctgccaccttgacc
-ctaggaaggccctttgacctctctgagtctctgcacctcttctgcaaaataggaatgatg
-atattaaagaattgcttgcagggtaaagtgaggtaataacctgcggagcacctggctgtg
-tgcccagctcatatggcaaacactcaccaggtaggagGATCCTAAGGTTGTGGGCaatgc
-atacaaagcctctggtgcattgtaggtgctcaataaatggtagGATGCCAGTAGGGAGGA
-GTTGAATGAGAAAAGGGGAAAGAGACCCAGTGCATGGTGGGGGTGGCAGGAACACAGGGA
-GTTGGGGGCTCCACCTTGGAAACCTCTCCTGGCCCTGGGGGCACTATCTCCACCAAACCC
-AAATCCAGGCAGCTAGAGGGACCTGGGCCTGCACAGGCATGGAAATTCTGCACTCACTGT
-TAGtgggcctcagtttcctcatccgcgaagtggaaaccataacccttcttaccCAGTTAT
-AACCTGGATTCTGGGCTGGAACCAAGATAAGCAGCTACAGGCTGTCCTACCCCACCCCCA
-GCTGGAGACGCGGGCCTCTGGGAGCTCTGGCCGATTTTCAAAGGGACCAGAACTGCAAAA
-AACAGAACTAGGCTAATGCTGGCtgagtgttcacagtgtgccaggacctgtgccacccag
-gtccttgtactaaatcattaaaacttgccataaccccacaaggtgggggctacacttact
-ccattggcagggatgagaaaactgaggctcggagaggtaaagggcttggcccaagcattc
-acaggaggagccaggaggaatgcaaaactgagcccagctcctaactACTGGAGAGGAGCC
-TGCCTTGTGGTCCGTCACCCCTCCCTGCCAACCCCTGCCAGCTGGGCTTCCAAAGGCCGA
-CAAATGCTATTTAAAGTCATACGTCTCTCAGGTCCCGAGGCACACCAGGGATGGACCCTA
-AACTGTTTGTGGGGGCAGACAGGAGTTATATCAGCCAAGTGAAGGCAGGAGGGGAAGGCT
-ACTCCAAGTGCCTTTAGTCTGGAACTGTTTGCATTGCAGGGATGGAGCCCTTAGTAGCAA
-CCTCCAGACAGTCAAAAAAGCTGGCTTTGCACACAAACATCCCAAGTGTATGTTttcctt
-cattctttctctttctcttttctttttccttccttccttccttctttccttccttccctc
-cttctttccttcctccctccctccctccttccttcctttctttttctttcttctttcttt
-cTCAGtctctctctctctttccctctctctcttcctGGGGTGGGGAGTTGTTGATGCAAG
-AGAATGAGATGATCCACAAACTGAACTGGTTCAGCCAAAGCAGCCCTCAGCCAGGGGCGA
-GCGGGAAGTGTAAGCTGTTGGCTGAGGATTCTCCTTGTGGGGGATTTTGAGCCCCTGTGG
-GGTGTTGTTCAAGCCAATGTCACTCGCCTCCAGGGGCAGGGAGTCTCCAGCTGATGTCTC
-TCTTAGAGGAAAATTCACTGCTGTTGAGCTTACTACCTCCATCAGAGTAGGGGAAAGGGG
-ACCCCAAGGACAGGGTCTGGCTAGCAGCACATGCTCCGCAGATGCGTGCCAACTGCAGGC
-TGTGATCCTAGGGCACAGTCAGGAAGGGGCGTGGACAGAGGAGCATTGTCGCAACTGAGC
-GTCCCACTAGCGTCCTCAGGAAGGCCCGAGGGCTGCTGCAGCAGCACTAACACTTGGAAG
-AATCCCTCGCGGGAAGGGTGGTCCAATGTTGAGGAGTAGCAGATCCAAGCTCACACTCTG
-GAGTGTGACtttgcttgtttattttaaaagaaggggtctcaccacattgcccgggctggc
-ctcgaactcctgggctcaagccatcctcccacctcagccccgtgagtagctgggatttca
-ggcgagagtcaatgcacctggcTCTGGGGTGACTTCTTGTAAGACCTTCTCATACAGACT
-TTTTAATAAGATCAGAAAACCCAGACCATAAGGCAGAACAAGCCCCCTCTCCCCACTCAA
-AAACCAATGGATTTGACCACACTGACAGCATGGTAAGCAATGATTTCTACTCTCCAAAGG
-TGaggactctacaaagtcagattaaaaaagattttttttgtgtcaaaatgaacatgggat
-tgatatctaggtaatacaaggaagccctacaaattgacaagaaaaattcaggaattccaa
-ttttaaaagtgggaaaaataaaaataaaatgtttaaaaagtgaaaaaataaaatttaaaa
-ttaaaaatcaggtgaataagaattacatgattaaaacaaatttaaacagttaaaataaca
-ttcaaaaacgaaattaagtaacaaaataaaaatttaaaaataaggtataaaaataaagtg
-taaaaatccattcaaataaaaaatacatttgtaaaataatttaaatacattaaaattaat
-aaaaacaaaaatgttaaaaataaaagtaaaatgtttaagtgaaataaaatttaaaaatgt
-aagaatacatgaaagaatttttacgagtaaaataaaaaatcagctatttttaacaatcta
-aagaataaagaaaAACTAATAGAAACATCAAAGGAGAGCAAGGTCTTGCTAGATGGATGC
-TGATGATGTGCTGTGAATTAAGGAGTCCGATTGGCTCAAATGCCTGCAGGGAGGCGGGGG
-AAGTGAATGACGGGGGTGGTGTAGGGAGTGAGAGGGGACGAGGAAGTAAAAGCATGCCCG
-CAGGCAGCATCTGATTCGGTTTTTCCAGCCCGCTGTGGGCAGAGGGCAGGAAGTCAGGCC
-CCATCATGGCTTCCCCCCAAAATAGCCATCACATCATTTATGCATTTGTAATGTGCTGGC
-AACATACGCACACGCACACGGATGCATGTTACATCATCCCATCCTCACTGCCCCATCCTC
-ACTGCTGTCCTCTGAGGTCCACTTTCttttttttttttttttttttgagacggagtttcg
-ctcttgttgcccaggctCTGAGGTCCACtttcatagaggagtgaacagagactcagagag
-ggtgggtcactgtgccacagtcacacagcACTTAGGACCACCCTATCCTCTGAATCTGGC
-ATGCTCAAAATGACCTTCTTTGGATGAGTTAGGTCTGCTGAGCACTTTCAAACAGAGGCA
-GGGCCATCTCTGACATCAGGCTCGAACGTTCTGTACACTAGGAAGAGCCCAACCTCTCCC
-CCCATGACGCATGACAGTTATCaccattaaagaaacactgactgtcttccaggggcgtca
-catgcatagtcatcttgaaaaccatatgaggtagatgctcttattgtccccattgtattg
-acagacaacatcgagattcaggagtcaaatactgtcacccaagcatggcagtaacagaac
-tgggagctgagcccaggactgtccacagcccaaatctcacactccctgcgtggcaccagg
-cCCTTTTAACCGTCATTGATGAGCACTCCCTATGTACCAGCAATGCGTTTGTCTATGTTT
-CATGcctcattttgcaaattagccaacgggggcacagaagggagagatgacctgcccaag
-gtcactcagccagtaagtggcagagccCACAGCCTTCGTGACAGCCTGCCAAGCCCCCAG
-TGCTCATCCGGGACTTGCTAGAGACAGCTGTGCCCACTGGCCAACCCCAGATCAGGCTCA
-GAAGGGCAACTGTGACATTCCTTCTCTTCATGTCTCCACCCTGGCGGATGTGGGCTCTGC
-CATCGGGCTCCAGGGAAAGTGGAGGCTTCCAGTGAAAGGGAGTGGTTTCCCCATGTGGCC
-TGGGTCCTCTGGGCTTGGGAATGCCTCTGTTTTGAGCTGGTGAAACAGAATTTCCCACCC
-CCTCCGCAATGGCACATCAGAGCCCCCACTATGGGCCACAGAGCAAGGGCCCTATGAATC
-ATGCTGCATTACTGCAAGAAATCATTCCAGGGCAGGCAGTGGCGGCCCAGCATGGGACAG
-CAGTGTCCGGGTGGAGTTGGCGTCACCCATCCGGAGATGGGAAGCAGACCATTCCCGAAG
-GGATCTGGAAGAATCTCCGAGGGCGGGGCTGAGGGCAAATGTGTCCTGGATGCTGCTGTT
-CCACCgggctaggaaaaaaagctccagcccacagagacctgggagcacatcacgaccttt
-ccccagcctggctgtgtgtccttggcaagttgattcccctccctgaatgtggaaggcctc
-atctgtagaagagggagaataatagggtcaagccacttcatggggctataatgtgggtAG
-CCTGGGAGGAGGGCtggcatggtggttatggactcaggctttggaatcaattgtctggat
-ggaatcctggtttttgccaaacttactctgccaagctgtgGggtagaaacatgaaattgc
-taatatttggctgtttatgacctagaaaaatggcaactgcatatacttcaaTGAATGTGC
-CTctcttttaactgcttcctcctctgtaaaatgtgggtaataacaggcccctcagagggg
-tgctgtgaggatgaaataagGCTgggaggcaattaagttcagtagttagagctgggctct
-ggggcaaggaaggatttgaaccttggctgagtggccttgggcaaagttacttaaccttcc
-tgtgcctcagttttcttgtctgtaaaataggaatgctactgcccactgcacaggtttatt
-aaggtaatttaatcaattaatacatacaaagtacatagaacagtgtctgAAATTGTTACA
-TAAAAGAATGCAGGTAACATCTGGCATCTCCTGCACCCTCATGTCTACTCACATAAATGC
-TCAACCACGAAACAAAATCCAAAGTGACTTTTGTAAACCTTTGATGCCAATGAAAGTTAA
-GTATTTTTAAAGAAAAAATATGTTTTGGGGAACATACATGTGTGTAGAGATGTAGGTGAG
-GAGTGTGCTCCCCAGGGTCCACCCCCAGGGCTGTTCTATGTCCTGATGGTGCCTATAGCC
-CAAGACTCTGAGGACAGGACTAGCCTTGAGGCCATGATGGCCCCGTGGCTTGGTCTCTTT
-CACAAAATCACACAGCCAAACCTCAGACCCTATGGAGAGGCTCCACTTGCCTAGGTAACT
-CTAGAGGCCCTTAAGAGGCACCCAGCCCTGGGCTGGCCTCTGATTATTAAGAAATTCCTG
-CAGACAGCCTTGGATGTGCGAAAGCCCTCCAGCTTCCATCCTGTCTTAAtttttttttag
-acgaagtcttgttctgtcacccaggctagagtgcagcagtgcaatctcagctcactgcaa
-cctttgctttccaggttcaagtgattctcatgcctcagcctcctgagtagttggtagttg
-ggattacaggtgtgcactaacacacccagctaatttttgtatttttagtagagatggggt
-ttcaccatgttggccaggctggtctcgaactcctggcctcaggtgatctgcctgcctcag
-ccttccaaagtgctgggattacaggcgtgagccactgcgcctggctCCATCCTGTCTTCT
-GACATTTGTCCCAGCCCTGGGAAAAAAGGCAAAGCACACTGAGCATTTCCAAGTCACGCG
-GGGGGAAACTGAGGCTCTGAGAGGCTCTCAACCTATCAGGCTCTGGAGCAGGCTGCCTTC
-CTCTACCAATTCAAGTTTTGCCTTCACCGCTAGTCTCCTgaaccctcacttctactcaca
-gctgggtgaccttgagtaaggtacttccctgcttgagtctccaattttacaaggattggt
-ctcaaaggtctcacttggcctttttggccttatcacttcattattctaGAACCCTTCTCC
-AGAATTTCAGAGAGAAAATGAAAGCTGAATTGCTCTGCAAACTATAAAGTGCTACACAAA
-CAAGAAGGTGGTTAATGGCAGCATTAGATGGGTTTTCAGAAGTCTACCGTAGGCAGGATT
-TGCTGTgggttttggaattaagaagacccagctcacacatgtatttgcgacgttactttg
-gataagccagttcccctctctgaaccaacttccctcttctgtaagctggcggtagaggca
-tatccaccaggcaggactggggtgaggaccaaaggaaaggagcgtgcaaTGTCTGCCACG
-CCCTGGCCGAGCAGAGGTGTTTGATGCAGGAGGAGATTTAGGGCCCCGACACATCATTCC
-ACCTTCCAGGAGCTAAAATCCACACACCTGGGGAATGATGTAGCTGTCAGATTCAGGGCG
-ATTAGAAACAAGCATCTGAACTAAGGCAATTGTTTGgagctccagagacagactctctgg
-gcttacatcccagcacccctgtctgttgctataccacccactgggcctcagtctcctcat
-ctataatataaagatcctcctggaatctgccccttacagctgtcaggagggcctccatta
-ggccatgactgaaaggggctgagcacagAAGATGGGCTCAGCTGGTCCAGCAGCCTCCAC
-ACTATTTTGACAATGGTATCAGTAGACACAGTAGTacacacgtgcacatgcatgcacaca
-ctcacatacatccacatatatgtgcatgcacactcacCCactcatacacccattcacata
-tatgtgtaaactgaaacacatttctcaaaataatagttttcacacttgcaatgcactctg
-atatattctaaaaaggaggttggcaaaaatcgcagcctctggaccaaatttggatgtttt
-tgtgttgcctgtgagctaagaagagtggagtacatgacagattgtatgtggtttgcaagg
-cctaaagtatttactatctgacccttcgcaaaaaatgtttgctgaccccactctatttta
-gtcagtgctattccattccgttctgttccgttccattccattccgttaccattccattcc
-atttcattagaaaatgctggctattgctaaatttattgtcctcacctgctgatgcattgt
-aaacctcagcttggaaaacTTTAAACTAATGGGAGCTTCAGTTTTTTCACCAGATGGGAG
-GATGGATGAACAAACCGTATCCATGTGACACCTTAGCCAAGCAACCTCCCCTCTTTGTCT
-TGGATTCCTCGGCTGAGGCTGAGACCACCACCACCAGCCTGCTCTCAAGGGTGTGTTGAG
-GTGCAGCCTCAGAGGTCTTGTCCATGATGTTCTCATTGACGGATCTCaagagcccaatag
-taaatactttaggctttttgcaccacatacgatctgttgcctattcCAGTATTCTTAGCT
-TGAAGGCCATACAAAAATAGTCCTGTGGCGGCAGAAATGGAGGAACACCCAtctctgctg
-tccttttcaatacccagcccagggcctggcccacaggaaggacccaataagtatttcttC
-ATGGTGATGGTGACTGGAGAGTGGCACCCAAGGCCCTCCATGACGGGACTCTGGCCCAAT
-CTGCAATCAGAACTTCACTTCCTTCGGCCACGCAGTCCCTTGTCCCCTCCACCTGGCCAC
-ACTCTCTCCTCATCCTGCAGAGGTCCTCACCTTACTGCCACCTCTGCCTGACAAAATCCT
-AAATCCTACTCCCCCCGATGGGGTTCCTCTCAGACACTTACACCTTGCAGCCCTGGCAAA
-TCACTGGCATGATTCATTTCTATATCTATTgcacgggcttcggagcctccaaaactctgg
-gtccaggtcctggctcagcagctgtgagctctttggcaggccattgatgctttctgagcc
-tcagttcccgtgtctgggaaataggcataacaCAAGGCAGTGGCAGAGTGAGGACGCGCA
-GCCCCACCTGCACAGCTCCTGGCACATGGCCCGCCTCCCTCCTTCCTCAGTGGCCTCAAT
-CTCAGTGGCCTGAATCTCCTTCAGTGGCTGGGCAGGGGGGTTGGATGGTTTCCGTCCACA
-GGAGAGGGAGGTGGGGCCCCCCGTGGTGGGGCAATGGGATGGAAAAGCAGCATCTCTTTT
-GCACCCAGGCTTGGCTTCAGAACGCTGAGTGGAAGAAGGATGGCAAATGGAGCTCAATTG
-ATTGACCACCTACTATCTGCCAAGCATTCAGATTTCCATTTCTCAACCAGCCCCTATGCT
-ATGAAGAAACCGAAGCCGAGAGACCCAAGGTTACATTCTATTAAGACTCAGCGCCATTCC
-CTCAGCCCTCAATGTCCAGTCATTACCCACCCCTGCCCTGTAGGAATCCCTTTCAGAACT
-ACCCCTGCATCTAAACCTGGCTTCACCTGGATGCCAGCACTCAGGGGACATACTTTGTTC
-GTGCCCAGCGATGGCGCCTGCTTGCCCAGGGCCTGGTGCATCTGTCTGTGTACAGGAGAC
-AGtgctgtctgcctggccctccacaaggggctttgcaatttaaacggaagcatcatattc
-actccacataacaggcctctggagtgggcactgccacagtcaatttacaataaagaaaaa
-caagctcagagagaggagaaggtttgctccggatgcaccacaagcaagaggcagaggtga
-gcttaacccacgtgagaccccactcccttccggtccagggcatgtctgctctgcTGTAAA
-ATGGGAAGGGAAAGTGGTCAAATCCttatgaagcccctactgtgtgcctttggccccctt
-ccctcttggactgcagtaaatcttcccaattgctcagagaggtaggtgtaagttttccca
-tttcacagatggggaagcacggacgggagaaggcatgtggcctgcttaatgtcacatatc
-tagggcaggagagggctcaaggtttgatcccagggctcttcactTTGCCCCTTGCTTGCT
-CAGGTCTAGAAAGATCCAGAAGCTCCATGTGAATGTGGGGGTCCCTCCCCAGAAGGCCTT
-GGATGTCAGGGAAAGTCAGTCACAGGCTGGCATCTCCTCCTTGCCCAAATGGACCTCCAG
-ATCTAGGGATGCGAACCAGGGCCCCCTCACTCTGCCCTACTGTCCCATTGCCAGGACacc
-ccagcatgtttcaaaaaaatgtccccatctggttctgattcatttacacttcattaatca
-acatgctgttttgtaagagacacttgagatccaagaatctttctcaagtcttttacttca
-ttctttcttagaaacagaaaaattgggcttcattaagaCGCAGTGACGCCGGAGCCTGAG
-GAAGGATGGGCCTGTGGGAACCAGGCCTCAAGCAGGCTCAGAGAGGGCAGATGCCAGCCC
-AGCACCTCATTCCTCGGGATTGTGCAGACCTGGCCAAACGCTAAGGCCAAAGACTCAGGC
-ATGGGGGAGGCTGGAGAAAGGTGGGAAAGGGTCATccctctatgttggcagctccccaag
-gacaggcccagggctgctcacctgggtatctccaaggtccccaacacagagcctggcaca
-gaggctgccctgtgaaatgaacaagtgaatgaatgaaGCACTGCCAATACCCAGGTGTTT
-TCAGGACACATTCTCCTGCCAAAGTTAGATAAGGTCAAAGCTGGTAGGACCCTGAGGGAT
-TGTGTACAGAATTTTCCAAGCAGATGCCTTATGAGAAATGGTCTCTGATGTGTAATATGT
-TTGGGAAAGGTCACTCTCTCTCGCtctctttttttttttttttttttgagacagggtctg
-ctctgtcgcccaggctggggtgcagtggcacaatcacggctcactgcagccttgatgtct
-ttcctgggctgaagcgatcctcccacttcggcttcctaagtagctgggactacaggtgtg
-caccaccaccaacatgcctggctattttttgtatttttttatagagacaaaaaatgtatt
-ttttgtagagttttgccatgttgcccaggctggtctcgaactcctgagctcaagctatcc
-tcccatcttggcctcccaaagtgccaggattataggcttgagccatcgcacctggGTTAC
-ACTGTCTGTCTCCACCTCTTCAGCATgctctgataagtctcacagccaagaaatctgcta
-aacccagcatttcccaatctatttgaccagaactCCTGTGGCTGCCTTGCAAAATATGCT
-ACAGGAAGGGTTTATCTAGCTCTGGTCCCCACTGCAGTGCCAGTGGGAAACTGAGGCTAT
-GGGCGGGGGACAGAGAAAATCCACTCACCCAAGGTCACATGATACAACTGGGTCAGGGGT
-GTGACTGAAATCCAAGGCTATCTCCATTGTACCCCAACAAATAAATGGAGCCCTAAGCCT
-CTTCTGAAGATGCTAGGCAGGTGTGTGTCCCAGAGGCAAGAGATCAGGTACTGGAGGAGG
-GATGCTGAGAGCCCCTCACCAAATTGCGGCCATATCCCTACCTCCTCACTGAGCTCCTGG
-GGAGGTGGTGGTGAGCTGTAGATGGGGCGGGGGGCAAAAGGGGCAGGATAGGAATTTTTC
-ATTTTTCTTTAATTTTTTTGTCTTTTTTgagctgagaagcatcttaaagtcttctaaacc
-agctcctttttgttgttgttgttgttgttgagacagagtctcactctgacacccaggctg
-gagtgcagtggcatgatctcggctcactgcaacctctgcctcctgggttcaagcgactct
-cctgcctcagcctcccaagtagctggaattacaggcgcccgccaccacacccagctaatc
-attgtatttttagtaaagacagggtttcatcatgttagccaggctggtctcaaactcctg
-atctcaaatgatccgcctgccttggcctcccaaagtgctggtattacaggcgtgagccac
-cacacctggcctaaaccagctcctctttagatgaggaaactgaggctctgagaagggaag
-ACCAGCACACCTCAGAAGATATCTTCTCAGCATTATgtcaggcagattgggattcgagcc
-tgctttgctactcacctgctgtgcgaccttggacaagtcagtttccttctctgaacctca
-gttccctcatccagaaaacaagcatCTCTCCCCTCCCTCCACTAAGCCACTGTGAGTAGC
-CAAAGACACAGTGGACAGGAAATGAGAATGATTAATACTTACGAGCACCCATTAGGAGCC
-TGTGTCCTTAGCTACTCATCTTGCCCACAATCCTCCTTATGAGCAGGATACTTAAGTAAA
-AGATGGGTTGATGAAGGGAAAGGGGGTTTGTTTGATTTTTTGGTATTGTttagaatggag
-aaagatctcagagatcttctaaaggaccctcagatgggtaaagtgaggattggacaggca
-aagtgacttatccaaagtcactcagttggtaactggggaagctgggatttgaactcagtt
-gacctggctccagagcccatgcccctaactactaAACAAAGGCCATTCACAAAGGAGTGT
-CCCCATAGAGTCCCAAACTCACCCCAGCTCAGCTGAAAACCACACGCCTCTCTAGTCCCT
-TGTCCCACTGTCACAGCAAGAACTGGAGCCTCTTGGGCCACAGTCTCCCCAACCCCATCC
-AATCCCACCTCCCAATTCTCCCACAGCCTCTGTCTGCTTCCTGCTCCGTTCCAGGAGTGA
-CTGTGTCGCTGTAGGGCTTTCACACAAATGGAAGGCCCCAGAGGGCAACCCATCCTCTCT
-CATTTTCCTTCCCCTTTATCCTTGCTCAGACCCGATGCCAGGGCTGGAAAGAGAGAAGAC
-accagctggacaattcagcagttatttaaaccagtctgagccttggaatcccaggcttta
-ttaaaactggacgacccctatgtcatgagcatatagttgggatttgatgagctaggacat
-gaaaaacccgtggcatagtggctggcaTTCGGCTGCTGATCTTAAGAGTGGCACCTGGAG
-GCCAAAGGGCTGCCCAGCTCAGGCAGGCGATTTGCTCACTTGCTCACCCGCTTACCCTTC
-TCTGAGGCACAGGCTCTACCAACTCCTGCTCTGCAGGGACAGCCTCCAACCCACCTTCTG
-AGGATGTTCTGACTCTCACAGCGAGGCTGTGGCATAGGACTCCCAGGTGAGAGCGCATGC
-GGCCCCTGGTACATTTATAATCTGAACCTTGGCTCATCTTCCTAGTGGCCTGAGAGGTGA
-agatggaaaagctgaggctctctgaggggctggacttcttctaggtcatcccctattaga
-ataagtgaacctgaactcaggtctcaggtctggctgaactcaaCATAGGGGGGCCATGGA
-GGATCACTGCCCTCTGGGAGGTGACACCAGGAGTCAGGGTGAGTGATGAGGCTGGGACTG
-GGGCCTCTGGACGCCCAGCCCAAGGCTCTCTATGTCACTTCCTGGCCGAGCATGGATGCT
-TGGAATGGCTTCTACGCCACTGAGTCTGTCTCCTAGTCCCTGTGCCCCGCAGGCTGGCTC
-TTGAGTCTTCTGTCTCTGCACGAAGCCATCCTCCTTTCTGCTGACCATGCGGCTACTACA
-GAGAGCCCTGCTACCCTCTCCCTTCTGGGTGAGTCTCCTTGGCCCACCCTACTCAATGGC
-TCGCTCACTGGGTGCCCTGGAGCCTCAATCTCCCCATCTTAAGTGAGGTTGAGACTCGTC
-TGGAGGAGCGAAGGACCCAGGGCGCCAGGCACCAGGCAGATGCCCCCAGAGCCGCCGCCC
-CCGGTCCTCCGGCCCCCGGTCTGCCCCGCAGCGCCTGCCCGGCCGCCCTGCCCAGCCACC
-CCTTGTACCTTGCTTCTTCCTTCGGTTCAGGGCGAGCATGTCCACGGCGTGGGCGACGAG
-CAGGAGCAGGCAGAGTGGCGCCCGCATCTGGGCAGCCGGATCCGGGCTGGCGCTCCCCAG
-GCGGCCCGACGGCCCAAGGGCCCCACGTcccggcggcggcacggcgggcgcgggggcTGC
-TGTGGGCGCGCCGGGCGCATCCGCCAGGCGCGGGTCGGTCCGGCCGCCAGGTCTAGTGAG
-GGCGTTGGCGGAGCCGGGGCACTGCCCTGGCGGGGAGGAgccggcgcggcgggggcggcg
-cgTTAACCAGCTcggggcccgggagcgcgcgcggggagggggcgggggTCACCCGGGTCG
-GGGCCCTCGAGTTCGATCTGTCCCGCAGCCGGCGGTCTTGCGTCTTTCCCGCCCCCAGCA
-CTGCCCCCGAGCACGTGCACGTGCCCACCGCCAGCCACAGGTACGCACGCGCGCGCAGGT
-ACAGATGCGCGGACACCCGGAGACCCGTACGGTCCCCCGCGCCCTCTCAGCGCCTGTGAT
-TTTCTTTCCCTCCCCCCAGTCCCCTTTCTCTGTCTGTTCCTCCTTCTGGCCCTTAAGGAC
-AACTCCTTGTCTCCTGCTTTCTCGGTCTTTCCGCGGCCCGCGCTCCCCTGCTCTGCCCCC
-GACCCTGCCTGGCTGTTCCTGCATCCTTTACTCTTGCCGGCCGTCTCTCTCTCAGGCTCA
-CTGTCTGTGTCCTCCTGGCTGGGCCTCTGGTTCTCCCTTTTCTCTGTCTCTCCCTTCAAC
-CCCATCTCTCCCCTTCTCCCCTCCTGCAGGGTGGGGTGTTTGCGGGGCTCCTGCTGCCTG
-GCTTTCTCTTTTTCTCTCTACTCTGTCTCATTCTTTTAACAGAGGCCTGAGCCCCTTCTG
-GCCACTAACCCTGAATGTTTCCTGTGCAGTCTGCGGGGATCATCTACTCCGACTCAAAGT
-GACCAGCACCTCATAAATCCACTTGTGACAGGGCTGGGGACCTGGACTGTGTTTCCTCCA
-ACCTTATCACCAGGACTGGGAGCAGCTGGTTCAAGTTTAACCCTTTCAGAGCAAAATTCC
-TCCTTCAACCCGACAGCATGCTCACCTCTCCTGTCACTATAACCACCAAAAACAACAACA
-ATCATGCTagctatcatttgtgaggcatatatggtgggcattgctaagaacttgacatat
-actagagtcttcaaaacaacccaatggtttgggtttgtattctgagtaattccacttttc
-tggggagcaaagggaagctcagagaggccaagtgacttgcccaaggccacacagcaggtc
-agtggcCATTCTGGTCCAGTGCCTGCCCCTCTTAGCCACTTCTCAGGCACAGACTCATCA
-GAATGGAAGAGGCCTTGGAGGGAGGCCTAGAGAAACTTACAGTTGACACTCTCTTGCTGA
-ACAATTGTCCTTCCtttttcttttcttttttttttcttttttttgagatgggttttcact
-ctgtcacccaggctggagtgcaatggcgccatctcggctcactgcaacctctgcctcctg
-ggttcaagtgattctcctgcctcagcctcccaagtagctgggattacaggcacctgccac
-cacacccagctaatttttgtagtttttagtagagacggggtttcaccatgttggccaggc
-tggtcttgaactcctgacctcaagtgatccacctgcctcagcctcccaaagtgctgggac
-tacagacgtgagccaccccacccagccTGTCCTCTTTTTTCCTACATGTGGAGCTTGCTC
-CAAAAGAAATGGAAGGTAAATGCTGGTATCTCCTCCAGCTCCTTCTCCCAGTGCAATGAG
-GGACACTTGAAGGCATGGCAGGGGCAGGGGAAACACACAGAGAGTGTGGCAGCTGAAGGT
-ACAGCCCTGGCCTGGCCATTCTTTCTGTGGGGCCCCAAGAACGCTGGCAGACAACACGGa
-gaacttggtggaatgtcagagacagcccacccaaagtgctccatttcacagatgaggcca
-ctgagccttcaggactggggggtgcctagattaggccacccagtgagtcaaggactgagc
-tgacatgggcatccaggtgtccCATTGTGgtcatcaccatggcctgcaaggacctcttgt
-tctgatatctctgatctcagtctttcccactgccccacccctctctctttagccttagag
-atttcagcccttgaatatttcacaaacaccacaggcctctcacacctctgagcttttcat
-gttgtggggcctctccatggaataccatcctatatcctacctccttcttcactgcctctg
-ctccaggaagccttccctgattctcaggccaggtccagtgcctcctctgggcatccacaa
-tctctttatcacagctctgatcacatcaggtggtaacaatggatgtgtctgttctccttc
-caaactgccatctctttcaagccagagccagacacacagcggtgctcagaatgtttgcat
-aatgagtgcataaataaatgaatggtgaatgaatgaatTCTCCAGATGCACAAGTCTCCC
-AGCCTGTACATGGAATGCAGGTACTTGGAGAAATGAGGTGACCCCAGAAGATCAAGCCTT
-AGGAAAGCGGAGGTCATTCCCTTCCCCACTACCCCCAGTACTGGAGTCTCCAAAGTCCAA
-AGGGGACAGCTTCCATGTGAGCAGGGCCAGAGAGGTCCAATGTGCATTGTGAATTGacag
-ccagccacacggctctgcaggatgaagctgcttaccccttcttgaattttttcccctatt
-tattccccactgcctctgctctagctagcctcgtgtttctcagactcttgtcactcatcc
-tgcggtttttgctgttctctctgcctggaaagtctttccccagatttggggcttgtctcc
-cctcgatgttgcctcctcagagaggccccctgtgaccactccagtaaaacgcaccaccat
-gcactttatcctcttgtcttgctttaccctccgtagtacctgttcatgtctgtcagttcc
-tgtttgcttgtttgtgagttccatgaggacaggaatcttctattttgtccctatgtgcct
-tacactgcagtgattaagacatacttgtggaatggatttttttaaaaaatgagtgaatga
-atAAGCACTCATTCATccatagattcattgtgggacctcaagtactttctgttctcttag
-gctcaatttccccagttgttcaatggcacagatgggattttgtgttctgtgagagcccct
-ttagtgcttccagaattggatatttctagggttcTAAGGCCCAGAACTCAGGGCCCTTCA
-TACCCCAAGATGCTCAGAGGGTGTTTGGTTCTCTAACTATGGGGGCTGTCTGGGCATCTT
-GGCCTGTTATCCAGTTCCCCTACCCCAATACAGGTGCCCAGGGAGGCTAGTGATGCTGAT
-GGCATGCTCTGGCGGGGGGCGGGGAGGGGTGCACCCAAGGGTGTCAGTTAAGGCACCATT
-GTCACAAATAGATGAAGACAGGTATAATGGCTGAAACACACTAAGCTCACAGCATGTGTT
-CCTGATCAGCAGATCCTTCTCTGTGGGATAGCAGGAACTCAGATTCCTTTCAGCTTGTGT
-TCTGCCCTGTTCAGTACCTGGTTTAAAGCTCACCGAGaagggcagggcttatgggaagta
-cagagcctgtctacctatgtcccattggccagaactcagacacacggccacacctacctg
-caagggtgactgggaaatgtagtccagccatgtgccagacaacacacaggaggaaaagca
-agaatttggtgaacatctggccCATTGACCAACGTTGGgccaccctcatttcttgcccca
-gtcatgcagtagctccttcctgtgtctgctctgacccctacaagctcttcttaagcagcc
-agagGACATGTATTATTCATCGGGTGAAGACCAAATTTCTCCTCAGAGATGCAAGGGCTA
-CGTGATGGCCCCTACTAGGGGGCCATCTGCtagggtgaccagctgtctggtttgccaggg
-attgaggggcttcctaggatgCAACGTTGACCTGTGTGTAGCCTTGtataatacaaccac
-aatcaagatatttaaacatacttaaacaagatactaaaacatcatcacaagactccttca
-tggtatccatttatggctccaccctccctctccacttccagtcctaatccctagcaaccg
-ctaatctgttctccatctctgtaatgttttattttttgagacagggtcttgctgtgtcac
-ccaggctgaagtgcagtggcacgatcatggctcactgcagccttgacctcctgggctaaa
-gcttctcctgcctcagctgtgtagcctggactacaggtgcatgccaccatggctggctaa
-ttttttattttttgcagaggtgaggtttcgccatatttcccaggctggtcttgaactcct
-gggctcaagtgattcttccacctcggcttcccaaagtgctgggattataggtgtgaatca
-ccacgcctggcctcccatctctataactgtttttacataaatattgtataatggagtcat
-gcagtatgcatctttttgagatttggctttcttcactcagcacaatttgtttggagattc
-attttagttttgcatgtattagttatttgctttttactgctgagtagtattccaccgtat
-gaatgtaatatagtttgtttaaccattcacccactgaaggacatttgggtattttctagt
-ttttcattattaagaataaaggtgccatgctcacttgtgtataggtttctgtgtatcctc
-tttggtgaaatgtctgtgcatatctttcacacattttaaattggatttttacattactat
-tgtgttttaagagttctatgtatatattctatatagaagttctttgttggttacgtgatt
-tgcaaagcgtgagatttatgtcaaggttcattttgtatttttgtttatttttttatgttt
-ttgtttgtttatttttatgttcgtttttaatttttgtttatttcgaggttcattttttat
-ttttcgtctgcggatgtccaattgctccagtatgctttgatgtaaaagctttatcaaaaa
-ttaattgggcatattggcatggatttattttggggctgtctcctgtattccatgggctat
-gtgtctttctgtctaccaatactacactgtactgattactgtaactatataataaatctt
-gaaattgggtagatggatccttcccactttattcttctttttcaaaattattttagctat
-tctagttcctctgccttttcatatatattttagaataatcttgtttatatctaccaagaa
-tcttgctgtgagtttgattagaattgcattaaacatgtatatgaatttgggaagaattca
-catctttactatattgagtctttcaatccaaaaacatagtatgtctctccatttgtttag
-atcttctttgacttttttaaataaatgttttgtcattttcagcatacaactcctgtgcat
-gttttgttagatttatacctatttccttttttctcccttagaaattatacatggtattct
-attttaaattttgctgtccgtgtgttcattgctagcagatagaaatacaactgatgttcg
-tgtgttgatcttgtatcctagcaccttgctgaactcatatattagttctaggagtatttt
-tgtagatttttttgggttttgcaacattgacaatcatatcaactgcaaatagcgacagtt
-ttctttccttctgatcttgtgccttttgtttcctttacctgctttatcaaacttgctaga
-acttccagccatatgccgagtaagtgtgatgagcatagacatccttgttctcaatcttgc
-ctggttcccaatcttagtgggaaagcattcagtcattcactatgacattagactgtagga
-cttttgtagacactctatatcaccttgaggaagatcctctctattgctacttttctgagc
-attttttaaaattatgaatggctgttgaattttgtcaaatgtttttcctgcacattggta
-taatcatttaatgtttattctttagtctactgatacgatgtattacattgattgattttt
-aagtataaaaccaacctttcttcaatggaataagccccacttggccatggtgtaccattc
-tccattatatactgctgaattctacctactaatattttgctgaggatttttgtgtctaaa
-tccattaagaatattggtctatatttctcttttttgttctgtctttgtctggttttggta
-gcagggtaatgccagccccagtagcaccagaagaacaaggcttactagaatagaattgca
-agggttccaggccaagtgcggtggcctatgcctgtaatcccagcattttgggaggctgag
-gtgggcggatcacttgaggtcaggagttcgagaccagcctggccaacatggtgaaacccc
-atctctattaaaaatacaaaaattagccacgtgtggtggtgcatgccagtaatcccagct
-acttgggaggctgaggcaggagaatcacttgagccctggaggcagaggttgcagtgagcc
-aagatcgtgccattgcactccagtctgggtgacaagagcaagactcctctcaaaaaaaaa
-aaataaataaataattgcaagggttccaacaagtttactgtcattggacctaaagcccac
-aaaagtaaacgagaactcacatgctacatttaaacagggaaactgctgcctgctaaacta
-aagtatgaaataagacctgaagttccaactgatgctaatactaaaatgactcagatgttg
-aaattgtctgacaaggattttaaagcagtcatcataaaaatgctttggcaaggaattatg
-aaatctcttgaaacaaatgaaaacagaaaatctcagcaaagaaatggaagttatataaaa
-ggatcaaacagaaattttagaaatgaaaaataccataactgggggaaaaaactttgctaa
-tggactcattagtacagtggagaagTTCAGtgatggacaaataccccaactctctattga
-atgggcaggatggccggacacataaaacatgccacgctgtctcctgccacaattccccag
-ccctgccatgctgacttcagagggactgagcttcagttgcccacggtgctgtctgggtaa
-cctgtccttcatgggctgcctgcccttcctgtttcactccttatgctccatgctatgctt
-cttgggatcaattctcaaatcaatttcttgaactcaaatccttgtctcagggttggcttc
-tggcaaccccaaaccaagacTAATTCTTACTAATTCTCATGACAACCTATAAGGTATTAC
-AGGTAAAACATGGAACAGCACCTAACCCAGAGTAAGTTCTCACTGGTAACTTTCATGATT
-GGTGCCTCAGTTTTGTTATGTATAAGACAGAGGCATCGAACCCCTCACCCTCTTCCTCTG
-GACTTCTTCTTGTTCTCCTCTTAAATCAAAATCTCTGCAAACCCACCTTTGTTCTTTGTT
-TTACCTGTTCTTTCCCAAGGGAAGGCAAACAGCCTTCTCCCTGTAGGATGCTCAGGCAGA
-CAAAGGAGCTGCTTCAAGCCAGCGCCCCTCCCTCACCAACCCCAGTGGAATCCCAGCCTC
-CACAGTCAGTTGGGTTGTTGTTTTTTATAATACCAGTGTGAAATAAATTGAAAAATTACC
-CATAAAATACAGGTTTTCAGCAGCTGGCCTGAAATTTCTTTCCATAAACAAACAAGTTTA
-AAGAGATGCCTGATGCCACCCGCCAATCCCAAACTTTTATGTCCCCATGTGGCAGTGGGG
-TCTGCCGGGAGATTTGGCCTCCTGGGCAAAGGCAGGCTGCTGGGGGCCACAAGTCACCCC
-TAGGTCTTTGGGGCTGACTTGTACTTCTCAACCGTATCTGTCTGCTCCATGAAGAATCCC
-CCAGACTCATCCCTCATCCCCCAGCTCCTACACTCagcatagacttgggagccaaactgc
-ctggatttgaatcagagatttccacttattcagtgtgacttcaagcaagttacttaatct
-atctctgcctcagtttccccaactgataatgctgataatagtagtacctacttcatagga
-ttgtttgtggattaaattagttaaatatacatgaagttcttaggacatggcacaagacca
-tgctgtataactgttagctattattAGTCGTCCAGGAGGAAGAAAAACTAGGATGGAAGC
-TACAGCAGGAGGCCTAGTGACATTTTGATTTTCCCACAATAAGCTTTCTCTGGAGTTTCC
-TTCAGGGTGTTTACATAAATGCCTGTCCAACACTCTgcagtttgcaaagcttgctacatc
-tgctatctcatttggatcaacatttaagccatggaaggagttaggacagaggttgtgatt
-atccccattacccctagtttacagaagaggaaactgaggcccagtaggtgaattgacttg
-ctcatgatctcaagaaggggtagagccaggaCCCCATTTCTGTAGCTTGAGGATCCGGGA
-CGCATCTTGATTCTTGTCACACACTGAAAGCAGGTCAGAGCCCTCCTGATCCTGCATCGC
-ACACTGAAGCTTGAACCTCATCCTAGACCACAACATAACCCTGGTCTCAGGTGGGGCTCT
-GACCCCATGCTTGACCACAGACTGAAGCCCAGATTAAGCCTCAGTATCGGTTTGAGTCAG
-AACTCTGAATCTCGCTTCACACTAGGCCCTGACTCCAGCCTCAGACTGATTCCTGATCTT
-TGTTATAGGCTGAGTCCTAATCCAGGTCCCATATTGACTCATGATCGTGATTCCACACTG
-TGCCCTAACTCTGGCCCCAGACTGAGCCCCCAGTGGGAGCCTCTAACTTGGAACTCCATC
-TCTAACCCCATCTTGAATCTTTTGTATAAATCCAATTGCCCATCTTCCCCAGGCTTTGGT
-CCATCTACCTGAAAAACAGAGTAGGGAAGAAAGTGCTCAGCACCCTTTGGAGAAGGCCCA
-GGCACCAGAGCAGAATTTACAATCCACCACAGGAAGCAAGACCCTCATCTCATCTCCTGT
-GTTTGCAACTTCCTCCAACTCCACCCCAGCTGGGACAGCCTCAAAGACCCCAGTCCTCCT
-GACGCCAGAACTCTGAGGAGTTCTATTGTTTAGGTGGTTTTCGGTTTTGATTATTTAATA
-CAGTCATTTCTGGTTTTATATTCACAGCTTTGGTCAGCTGGGATAGGGTTTTTCTTCTTC
-CTGTGGTTGAAGTTGTAACACTATTTCAAACAAAGGAAAAATTTTAAAAACAACAGTGAA
-AATATTTTCAAAATATGTTCACAATCAAGTTAATTTCTTGGTAATTGGCTGGGGAAGAGA
-AGGGAAGGACAAAGAGAGATTTTTCATAATGAAGGGACAGCAGTTCTCTGGTGGGCTGGG
-GGACAGCAGGGTGGGGGCCAGCCTTGGGTCTCAGTCTACACAAAGGTGGTAATGGGCTGG
-GGGAGATAGGGATTGGGAGCTGGACCCAGGACAGTGGATGAGAAAAGCCAAGGTCAGGCC
-TCTAAATGTCCCACTCTGGAGGGAGTTAGGACCCGGAGCCTATTTTTCTCTGTGTGCCct
-taattctgggcctcacttttttcatctgtgaaatggattcaataacacctgcccaaggag
-gactcttgaaattaaaagacaaggtggctgcaaagcacccagcacaaggcctgacactga
-ggtgtacaagtaatagtagttGATGCCATCATTATTATTTGTATTCATGGTTTGCCAGCC
-CAGAGGCTgtagaacctggtggtacagggaagcctgagtcagacaacctggattcaagcc
-ccagttgtgccacttactacttatgtgacctccggcaagttgctgagcctctctgacctt
-tggttttctcatccataaaatggggatagtaactgagttgttgtgaggatcgaatgcatg
-actgcatgcaaagcacttagaactgtgcctagtgcatagtcagtgccaagtgtcagctac
-tactATCTGCTCAAAAATATTTCATGCATACCTACTACTTGCAGGTTGTGAATTGATTGA
-TTCTTTTTTCATTACTAAGCACTAACTGTGTGCCAGAGAGCAGTGAGAACCGAAGACACA
-GTAGCTTCTATCAAGGCCCTCATCGCCTGGTGGGAGACTGAGAAGGAAAGAAGGCAATGA
-TGACAAGGTCAAGTAAGTTCTAAAATCCAGGCACAGGGGAGGAGCTGTGGGAGCCTAGGG
-GCAAGGCCAGAGAAGGGTTCACAGGAGTTAAACattcattcattcaacaagtatctactg
-agcactggcccaaggctgaggattcagccaccaccaccacaggtccacatctggccttcc
-tggagcttgcagcctagccggggagacaggaacaatgaagacacacacacttagataaca
-tgatggtggtgatggtgagtgccgcgatgaaaaccaaagccaggggaggggatagagaat
-gacagacatggtcaggggaggcttctctgcaaggtgagcagagatttggataaagtgggg
-gaacgagtcctgtggaggtctggggagggcattccaggtggaggggcagtaaatgcagag
-gcccagaggcctctccatgggctaacgagggaggcagagggagggagggagtggagggag
-caagggtatgtgtaggagggaagcagggcagGAGTGGGAGCACAGTGACTCGCCTGCATG
-TATTCCCAAGGAGATGGGAAGGAGAGGCGAGCAGAGGGGTAAAGGAGAGGAAGCAGGAGC
-TGCCACTTTTGAGAAGCACTGAGAAGAGAAGCAGAGGTGGGTGGGGAGGGGGATGCAGGG
-CCAGGACTGGTGGGCAGGGGCCCTGCAAGCCCTGCTTACTGGAACGGGAGAAGGCTGGGG
-GAGGTGTTCCAACCTTCACAAGCCACAGGCAACCACCGAGTGACATTAGACAGGGAAGGG
-ATGAGATCAGACCCTGGCATTAGAAAGGCTGGAGTTCTGGGTCCTTCATGCTCTCTCCCT
-TAATTCTTACAAGAAcccatttcacaggtggggaaaatagaggtcccagagaggttcagt
-gacttgctccaggtcactctgaaaggacacagatctggctgcctccagctccccctgctc
-cttgagttccctgctgtcttccctggcctctgcctctGGGCCCAAGAACTCCCAGCCCTC
-AGCATCCATGGCCTCCCCCTGGCCCACGAAGTCCTCAGCCACCTCCTTCCTGGAGGGCTC
-AGCCAAAATCAGACTGAGGAAGAAGTGGTGGGCACCCACCTTCTGGCCTTCCTCAGCCCC
-TTATTCCTAGGACCAGTCCCCATCTAGGGGTCCTCACTGCCTCCCTGCAGCCCCTTGAAA
-CTTCTGATCATTCAGCTCCTGGGATGTCCTGGGCAAAGTTATCCAGGCCCAGGTCCCTGG
-CTCGTGGCTCTCCTCTCATTCCCTCAGTGGGTGCCCTGCCCACACCAGGATTGCATTCAC
-CATCCAGGTGCTTGCTGACTCGGgggcaggctgagtgctgatgagttaatgccccccagg
-agcacccctgagtggatgaggatgggagttggtggaaaaacatttcagtcccctcgcccc
-ttgggtgggacagttctgttgccagagttcccagtgggagggatgcccagttgccaacTT
-GATCCTTATCACACCTGTGCTTGCTTCTTTGGGACTGGCTTCCAGGGAATCTATTTGGAC
-GGGAATTCTTGTTTCCAGGTCTGCCAAGATAACTGCCAAGCCTAGTCCATTCTACCTGCA
-AAATAGCTCTCCAACCCTTGCCTCTGTGACTGCCAGGTCTGCCGCAGCCTCCTGCATCTC
-TGTTTGTACTCGTGTAAAGGCCCCCCAAGCTGTCCTCTTGTTTTGCCCTTGCAGTCTACC
-CCTCCTCCCTCCCAAGGAGCCAAAGGGGTTGGGTTTTAAGGAAAACCTGACCATGGCTGC
-CTGCTGTTCTCAGGCTAAACAGCACCCCTGCAAGGCCCACAGGCAGCCCACCTAACCGTT
-TCTCTACATctctgccccaagccacactggtcaccttcccatttttcaaacacatctact
-tatcaccttctcagggcctttgcacttgctgtctcctctggatggaacactcccagtctc
-ccatggttagctcattccaggcttcagttcaaatgtcacctcctcaaagaggccttccct
-gaccatgcgatggaaactcccatccttcaccactacgcttggcttagccctcttagcttt
-gcttcctctcctttgaactgtttcccatgatctgaactagccttgtttgtttgttGTGAT
-GACGATTGAGCCCCCCAAAGCAGAGAACTTGTCTGCACACACTGGGCATCTGGCTGGCTG
-CGGGTGTTGAGCTGTGAGATCGGCTATGTTCTTGCCCTGCTGCAGTTGACCGTCTGGTTG
-GACAGGGGCTGGAGGGATGAACCAGTTGTGGAAAATGCCACAAAGGAAGAGGAGTAACCG
-GCTGCAGGGAGAGTGGGAGGGCACACTCACTTGGGTGGGTGGATTCTGTGTAAGAACAGG
-GACCTAccaaggtgggcagatcacttgaggtcaggagttcaagaccaccctggccaacat
-ggtgaaaccccgtctccactaaaactacaaaaacattagctaggcgtggtggggcacgcc
-tgtgatcccagctacacgggagactgaggcaggagaatcgcttgaacctagaaggcagag
-gttgcagtgagccgcgatcatgccgctgccctccagcctgggtgacaagagtgaaactct
-atctcaaataaataaataaataaataaataaataaataaataaataaaataaaGTGCGGC
-TGCATTTGCCTCCCAGGGCAGCCCAGGTGTAAGCTATACAGCTTGGTGGAATGTCTCCAT
-GGCTTCTAGGGGATGGCCCAAGAGAGTTCCAAACACATCATATTCCAGTGAATGGGactg
-gtcagcccacagccacatggccatgtccagctgcaagggaggctgggaaatgtaatattc
-tgcaggccacccatgtgctcagataaaaataaagagaatattattcaagagaaagggaga
-cagagtgtgggggatgactgatgatccttgccataAGCATCAGCAGGAAACCACCAGCCC
-CCACTTCCCTGTTTCTGCATGTCTGTTATTTGGTCCTTCCTGTGTGTGATGGAGGGAAAG
-ATGGCTGTGTGTGATGGAAAAAAAGATGGTCCTGAATGAGCCTGATTCCACTTCTGGGTT
-CCCACACCCTCTGGTAATTCCCTCCTTTCCCCCGTTTCTGCCCTGTATCTCCTACAGTGT
-CTCCAGCCCTCCTTCACTCCATTTCTCCCTCTCATCATAGACTGTCTTGGAAGTTCTGCC
-TACAAATGTGGCAGCTGCTGTCCCACTCTTCTCTCCATCCCCTCTGGAAGCCTGGCCTCT
-CCCCAACTTCCTGCTCTGTTCTGTAGCTCACTCAGCGAGGACCAGTCCCTCTCTGTCATG
-AGATCCACTTTTTCTCTCCAACCTCCCTGTGGGCCTCTGTCCTGTCAACATCCCTCCTGA
-CACTCTCTGTGACATTTGACCACCTGCTGGAATCAAAGAATGTGGGCTCTGCAATCAGGC
-AGGACAGAAATGaagatgcttcccctttctcagcctcaatgatctcatctgtaaaatggt
-gtgaagaatgtccacTAACTAATTGAAACAAATTTTTATTTGCAGCCATGACATACCATG
-CATTTAAGTAAGCCCATATGAGCACATCTGAAGGCAGTGATAATACAATCAATAATACTA
-CTGGGAGTGCCTAGCTCTTACTGAGTGCTAAGCTCTTCAGCACGTCAGCTCAGAAATGTG
-GCCCCTCCCATGGCCCCGCCTGCACTCTTTTCTCCTTTTTTGCTTAACTTCCCTTTTGTT
-GCTTCTTTCTTGAGTCCATTTTTGGCTCTGTTCTCTCCTCATCTCTGCAGCTTTCCCAAA
-TTCTTTTTTAAAtttttatttatttatgtatgtatttattttgagactgagtttcactct
-tgttgcccagactggagtgcaatagcatgatctcggctcactgaaacctccacctcttgg
-gttcaagtgattcttctgcctcagcctcccaagtagctgggattacaggcgcacaccacc
-ctgctcagctaattactgtatttttagtagagacagggtttcatcatgttggccaggctg
-gtctctaactcctaacctcaggtgatccactcgcctcagcttcccaaagtgctgggatta
-caggcatgagataccacatccagccAGCTCTcccaaatccttttcccagctctgacatgt
-tgccacacttcatctacctggctggacacctccacttgaagtcctgtggacatctcaaac
-ccagggtgtctaaaatagaactcagcctcttcccctgcaggcttCCAACTCTGGAAAGGG
-CCCAACCACCTACCCGCTGGGTCTGTGAGCCAGGccttcctctcaggcccctcctctctt
-cccctggccccagcctccttccccacttccccacccttccccaccccAATGCACATACAG
-TTGCTCAATTGCTAGTCCTCACATACTGCATTGTGTCACCCCACCTGGTCATTGTCCTGC
-CCATGTCCTCTCAGCACTCACCTTTCCATGTCCAAGGAGTCTTCTGCAAACATCTGCAAC
-TGTCTGaagccaaggtgctggagaactaagagagagtccccaagcagccctcagccaatg
-accgatgggaggtggtggataaataccagccccctgccctgagttgggagacctgaggtg
-tgctcttcactgtctcaagaggacctcaatggggctgagctcccgttgcccatattagca
-attcacttattatgcatcagtggcttcagtggtttactgcagtgtcttcattgtctcTGG
-GCCACATAATTTTATGGAAGTCACAGCCCTTCTCTCTAAAGTCCATCTATGAAGCCACTT
-TACCTCTGTTTGAGAAGCACTGGTCTCCAGGATGACATCTATACCCCTTACCTGGCATTC
-AAGGTCAACCTGCTGACTCCACCATGTGTCTACCCTTCCATGctttgctcatgctcttcc
-ctcctgcctgaaatattcatcactttgcttaatgcttgtctgagttgcacctatccttca
-agactcagctcaagttcacttcctccgggaagcctttcAGACCACATTAATCCTTCGAGT
-GTTCCCCACAGCCCCAAGAATCTGCTCCCCACATGTGGCACAAATAGTGCCTTGGGTCTT
-ACCTGGtttgttccttcagcaaaccaaggttaagttagcattttctctgtgcaaggccct
-gagagctgggagagctggagacatgaggtgagtcaacacagaccctgctctgaggtctgg
-gcagtccagtcgaaagacGTCCAGGACATGGGGTTGGGCATTCCAGGCAAGACCATCAAC
-TCTACGAGGAAAGGGATGATTTTAATTCACTATGAGAAATGAGTGAATCATTTATTTTCT
-TAGCTTAAAACAGGGGGTGGACAAGAGACTGACtctggcccaccatctgtttttataaat
-aaagttttattgaaacacaactatatttcttcatgtatcacctatggcctttacactaca
-atgtacgagtaattgtgaaagagaccacgtggaccacaaacactaaaatatttactgttt
-ggacccttatagaagttccctggccctggcttgaaacactaatacttgtttattatttca
-cacagtttctgaaggccagaaatttgggagtggtttagctgggtggttctggctgagggt
-gtctcaggaggttgcagtccgcagggctgtctgagtctcatcataacacagcagctggtt
-tccccAGTGAAGACTTccatgctaggcacctcacacacagcctcatttaatcctcataaa
-catccttaaaggacagctatgattattacctacatttctcagctgaggaaaccagagctc
-agagagaggaagttatttccctaaggcaaggacagacctaggactggagctcaggttcct
-ctgcctccaaagccccgctcctaaccactgggctgtccttctgAGCACCACGGGGTCCCA
-GCAAATGATCTGTGGCTGGGGATCCAGGATCATTGTGATTTGACTCAGATGTCCCTTTGC
-CAGGGATATGGTCCTACTCTCCCTCCAGTTACCTGCTCCACAGGTGGGGTCCACCTTCTT
-TCAGACCCTCTATCAAGTGAGTCAATGGTACTGTCCAATTCCTTCCCAATATCTTTGCCA
-TCCACCCCCACTCTTTTCCAGCCCCACTGCTTCGGTCTTACCTCTGGCCGTCTGGGCTCC
-CATCTAGAGACAAAGTCAGGGGAGGTGATGCTTTCTGCTGATATTCCTTGATTTTTTCCA
-CCTGATTCACTTTCAGCTCTCCTCTGCCCATCCTCTCAGAAGATGGATATGCAAAAAATG
-ACCCCAGAGCCATAGGAAGGCCCCAAATGCATCCCAAAGTACTGCAGATGATACCTCCTG
-ATCAAGCCCTGCTGCTAATCAATCAATAGAATTAATATAATTATACAATTTCATTTATTC
-AGCCTTCTACCTTCACaaatgcctggaccttggtttcaggtaaactggctcgagttcctg
-cttggtctttgccaacatgtgtccatgggcaggtcttagtctttcctttggcctcagcct
-cctcatctcaggattgctagagggggttaaaGGACATTGCATTGTAATTTGCTTGTTTTC
-ACACTTGGTACATAATACTTGCTAGAACCATGATGCAAAGAGCAGTCAGTCCGCATGCTT
-ATAAGGGAAGCAAAGATGTTCAGCATTATAGAATGCATGGCTAACATGGCCCCAAGATGG
-TCCAATGGAAAGCTCTTCTTCTAATCAAATAGTGAACAATCCAGGAATAACCAAAGAAAA
-AGTtcatcttattatttgttttcacagcagctccatgaggcagaattaattttgtgtgtt
-ttgcagatacgggaacagtaggtgagagcatgagtaactcagctcaggtcacacagcagg
-tgggagagaactggaacaagaacccagtgctctttctgctctacccactgacccATCCTC
-TCACGCATCATACACCCATACTCccatccacccaccttcccattcatgcattcacccatt
-cacccaccttccatccatctaccatccaCCACGTACCTACACTCCCATCTACCATCCAAC
-CACATTtccattcacccatcctcccatccatcaaccctccaatccaccacccacagacct
-tcccatccattcatttacccatccacatattcacccaccctcccatccatccatcTACTG
-TCTATCACCTACTCATTTTCCCATCTGCTATTCACCCCCACCCTCCTatccatccattca
-accatccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccat
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-accctccacccaccctcccatccaatcatccactgtcccaaccatccaccatctacccac
-ctatccaccactcaccctttctttcattcactcatcctcccatcctcccatccaccatcc
-acccTCCACCcatttatttgacagttgctgagagcctactaaccaccaatcactattcca
-ggcactgagatatgactttgagctagacaaagtcttgcttcatggagctcacattttggc
-tgtgaatggcagcaacagacaaataaatacgtagtttacgtgaggtactgcaaagaaaaa
-ataaagcaggggagtgatgtcaggagtaactaaggcaggatggtagtcagggaggtcgtc
-tctgaaacgggacatttgagcagaagcctgaaggaagtgagctccctgacaacttgggag
-aagagaatttcaggcagagagaacagttgtacaaaggcccagtggtaggaatagaaacag
-cttgatgggattaagaatcaacaaaaaggtcattatggatgaagcagaatgagggaggaa
-acccaagccagctcgggcttgatcatggcaggctttgtcagtcactgtgagtaaccagac
-tttatttcaagtgagttggCCAACAGTGTCTCCCCAGTAGTAGAGTGATTGCTCGTCTGC
-CAGAAAAGGGGCACAGAGCTCTGGACATCAATACTTGCCGATCTCTCCTTCATCAGCCAC
-CCAACCCTGGCAACAGTTTTCAATTACACCTGTGAAAACTTGTGGGTTAAACAGCTGAGA
-TCCATGCCTCAGCTTCTATAGGTGATAAGCCTGTCCTTCCTTAGGTAAAGAAAGGAAGGG
-GCGAACCGTCAGtgagcaccattcacataccttagccggttcagcttcaccaccctctga
-aggtgccatcagcagctcccttttgctgaagagtaagcggaggcccagagaggtcatgtg
-gtgtgtgcttgaggtcacatggctgagaggtggcaccagatttgcccaactctcaagtcc
-catagtctaacgtttcactccacTCAGATTCAACCTCCcaagaaattatttgtttgagta
-cctactaggcaccagactcagagtgagaggcagttgcagattcactcagggccagttttg
-gaggccagcttcacaatcacccagcacagcccatctttctacttgtgaggaaacagaggc
-tcagtgaaggaatgcctttcagatcacagagaggatgaagccaggatattcaaacccagc
-ttattttACTACAACTCTATATGGTAGGAAAGAGAAAAGCGCCCATACAATTTCAGTGGC
-TTGACGTGGAGCCTGGCAACAGATGTGTTCTTGGACTGTTGGCTATAAGACAAACCAGCT
-TTCCCCACTGACTGTCACCGTGTTTTGGGAGACAAAGCCTAGGACTTTGGTGTGTCCACC
-GTGGGTCAATAAATGCCCCCAAACAAGCATATCTTGCAAAAGTGGGGACTTATTAATTCA
-TTGATTCGTTTCTTGATTGATCAATTGATTTATATGTCCCTGTTGGACAAAGGGTTTGAG
-GCAGCCTGGGAAGGAAGTGAAGTGTGGAAACTGGTCATCTTCTGTGCTTCTTACATTCCA
-CTCATTGGGAACATCAAAAAATGAAAAAAAAATCCAGCTGCTACATAGCTGGGGAACAAA
-TTCTTGGTATGGAAGTAATTCTGCTAAGGCTAGCCTCCTCAGAGTAATTCCAAATGCTTT
-TCCTATTTTCAAATTTAATTAGGAGACATTTCTGTAGTGTGAGTCATCATTTAATAATGG
-GGGGTGTTTATTAGGGAATGagtggaaagagaacaggacagctggataattcaaatccca
-gttcttcaagtctctggctgtgtgatcttgggtgagccacttcacctctctgaacatcag
-ttttcttgtctttaaattgatatttacctggcaaggtttggggaaggtctcaactagatt
-atgtacataacaagcttgccagtgttagtacataataggtgtttaataaatattaactGC
-CTTCTCTTCCCATTTATTTTCTTATTTGGTCTTCTAAACAACCTTGGGGACCATGATAGG
-TATGTTGTTTGCTTTCTCTAGCATGAAAACAGCCTCCCAGAAACTACTCAGCCAATCCTC
-TGAAATGGTATTTCCGGTCAAATCTGATGCACCTTCTGAGACTTTTTTTTTTTTGTCTTT
-TCCAGTAAAGCCAAGCACATAGTCATTGTTAGTTTTAAAAAATGTATTTGGATGGGGTAT
-GAAGTTCAGAAGAGAAAGACATTCCTGGTTGGGTTATTCAAGCAAGGATCCCTGAAGAAG
-AGATGCTAGCATTTGGCTAGGTGATAGGAAGGGGACAGGAAACAGCAAAAGGCAGGATGT
-GGAGGCAGAATGAGTTGAAAGATGCTGTTATTGAAGGCGATGGTGGTAGTTTATCCCTGA
-AAGCCACCAAGAGCTCAAGAGCAGGAGGGAAGAAGATGAGTTTCTGTTGAAGAAAGACCA
-AAGTCACTCACTGGCTGATTTGTGCTTGGGAGGAGCATCTCTTTCCCCTGCTGATTGGGA
-GTCTTTTGTTTCCCTGGGACAATAGGCACTGGTCACTGAAGAGTGTGTCTGTCCTCCACA
-CTTTCCCATGTTCCTGTCTCTGGGGAACTCCTCCCTGACTCCGAGAGACAGGATGGAGTT
-GTCAATCAAGATGTCTGTCACTTTGCCTACCAGGGGAGAGCTTTCCAAGTGGGGCCCTGT
-TTTTCTGCTGGGGCTATAGGGGAGGGTCTCCATCTTCATGtgtcaggatgtagccttggg
-gctgctggtgtcatatttatgccacatggaatgaagctgtctgaagcaggaaaggatgat
-attaccaagcaaaaagagatgcaaagctgagtgtggacggaggcctgcttctgatcctgt
-ccatgtacttggatcaaaccatgcctgaactccatttggtttgcaccttatggggcaata
-agggaataagtaattctctttgtttattcaacaggatttctgtcacttggcaattctgat
-taatacaGACTTCTGATTAATACAGTTGGCAAATGAGAGACAAGTGATCTCTTcagaaat
-ggacagagcaggaaaggaacccaccaagcatggagaggttgaatgagagtctcttcttcc
-ccattgactcactgcagccctggatcaggttgctgcccttctctgggactcagttttatc
-atctgtgaaatgggCTGCAGTGAGTGGGAAACAAAAtcatttatttatgcccaaccttgt
-tgcaaaaatgatttaagacagcttacaaatgtattaaagccagagattaggaaaagaaag
-agataatgaaattgtgagaagggggagaaaaggtgaactcaaggatgaggttaggttatt
-gaatgcctgctgtaaagttctggacagttgctaaaggtgaacagacaagtttgttctgag
-attctttgtagccaaagcaagaaaaagaaaatgcagttacgtggatttgtaggaaaaaaa
-aaaaaaacaacccggttcctgagaagaagcccaacttttcttagaataaaagtctgaaac
-aattttccttgtggttccccatcaaaaggactttgtgaaataccatgagcaaATATAAAA
-ACCAGAcaggttgagtatcccttatctggaatgcttggaaccagaagtgtttcagataac
-agattcttttggattatggaatatttgcatatacagtcctacctcgggtataggacccaa
-gtctaaacacagaattcattcatgtttcgtgtataccttatacaagttacctgaaggtaa
-ttttatttttctgtgtgttgtgcacctgcattttgactgcaacctgtcacgtgaggtcag
-gtatagagttctctacttgtggcatcatgttggtactcaaaaattttggattttggagca
-ttttcaatttcagattttcaaattacaggtgctcaacATTTAacaggctggggtaaatag
-ttgcaacatatttaatagtcggaggattaaaatccacaataaaataagagctcccacaaa
-tcaataaggacaaaggaaaaaaacactccatcaataaaatgggcaaaaagggataagaac
-acaattcacaataggggaaatAGctatcaaattagaaaaaaatatcagaagaatgggtaa
-tatcagtgttggtcacagtgtggggaaataggcatgctcagacacCttaacttactttta
-gcgtttctcgtcacctgacacaccatatatatacgtctctacgtgttggggatctctctc
-tctgaccagattgcaagttccatgagagtaaggactacctcctcatcactgctgaattcc
-cagaacctagaacagtgtgcccagaacagagtagatccttgataaatatttatcaagtat
-gtgagtCAATAAATAAATGAGTGAATGAATGGACAGTGTGTAAACTGGGGTCATATAttt
-ggcaggcaatttggcaacatttattagaatgaaaatgcacaaacactgatgcagacattc
-ctcctttagccatacgctcgactgagacatacaaatattcaaaggaatgggtcaaagagt
-gtttttgtagtgctgtttaaatggcaaaagttggaaatgacctaaatgccaaacaatact
-acactaataaagttatggtttattctgactgtgaaatattgtgtgttcttctttaaaaaa
-atagtgttttcatactgatgtggtcagatctccaagatacattatcaaaagaaaatagca
-agtcacagaacaataatatgtaacatttacggtaaaaaCAAAACAAACTTTccaggcgca
-gtggctcacgcctgtaatcctaacactttgggaggctgaggcgggtggatcacgaggtca
-ggagattgagactatcctggctaacacggtgaaacctgtctctactaaaaacacagaata
-tcagccaagtgtggtggcacgcacctgtaatcccagctactcgggaggctgaggcaggaa
-aatcacttgaactcgggaggcggaggttgcagtgagtcgagatcacgccactgcacccca
-gcctgggcgacagagagagactccatctcaaacaaacaaacaaaaacaaacaaacaaaaa
-acaccacaaacaaacaaacTCAGTCTGTCTGGTTAGCTAGCTActatctatccatctatc
-tatccatccatccaCTCGCTTACATTGGTCAACCTATCAGTATAAACAAATAGAAACATA
-TCTAGAAGGAAATACCAAGCTGTTAACAGTTCTTCAGAACAAGGGAATAAAATGTGGAGG
-TTTACACAAAGGGCTATTTTTACTTTAAAAATAtatttcagtataatatgcacttaatgt
-gcatagataggttggcaaatgataaagctttacaaactgtatttatccctgtcagcatca
-ctcagatgaagaaagagatatgaccagcaccccagcagccctactgttatcctctcaagg
-aaaactatcactgcccttctattacttttatcaccctagactagttttgctaatttttgg
-actttatataaatagaatcaaaaagtggatacaattttgtatctttcatctttggtgcaa
-tattctgtttatgtgaATATTGCCAAATGGCCTGACACTCCAACCAGTGTGGCAGAAGGC
-CTGTTCCCCCCATGCAGCCACCcaatacattttaactaacctgtagtctgtattttgttc
-agtcccagtaatgtcctttacagctttttttctagtttgggattacatgttgcatgtagt
-tgtcatgtctctttagtatcctttaatctggaacagtttctcagcctttctttgtctttc
-atgatgttggcctttaagaaaaatataggttagttgttttatggaatgtcacatccctca
-ctttgggtttgtgtgatgtctcctcatgattagactgaggttatgcattttgggcaggaa
-tatcttgtaaatgatgctgtgttcttctcagtctatcacattaagaggtacacaatgtca
-atttgtccctttattagtgttaactgatcatttggttaaggtgacatccagtttctccac
-tgtaaagttgtttactttttcttttgtaattaaaaagtaattttaggaagctactttaat
-atctttatctattaaatatccttttccttgtcaaaGCCATGGTATGTTTAAAATGTGaat
-ttctttctaagttcaggggtacatgtgcagatttgttacacaggtaaacatgtgccatgg
-gggtttgttgtacagattatttcattgcccaggtattaagcctagtacccattagttatt
-tttcctgatcctctccctcatcccacgctccaccctccagtaggccccagtgtgtgtcat
-tctcctctgtgtgtccatgtgttctcataatttacctcccacttatgagtgagaacttgt
-ggtatttggttttctgttcctgcattagtttgctaaggataacggcctccagctccatcc
-atgtccctgcaaaggacaggatctccccttttttatggctgcatagtattccatggtgta
-tatgtaccacattttatttatctagtctatcattgatgggcatttaggttgattccatgt
-ctttgatattagtgctgcaatgaacatacagttgcatgtgtcttcatcatagaacaattt
-atatttcttctttttttttgtttgagacagagtcttgctctgttgcccaggctggagtgc
-aatggcacaatctcagctcactgcaacctctgcctcttgggttcaagtgattctcctgca
-ccaccctcccaagtagctgggattacaggtgcccaccagcacttccggctaatttttgta
-tttttagcagaaacggggtttcaccatgttggccaggctagtctcaaattcctaacctca
-agtgatctgcctgccttggcctcccaaagtgttaggattacaggcgtgagccaccgcacc
-tggcctttacattcctttgggtatatacctagtaatgggattgctgggtcgaatgatctt
-tctgtctttaggtctttgaggaatcgccacactgtcttccataatggttgaactaattta
-tactcccaccaacagtgtactgagcattcctttttcttcacaaccctgctagcatctgtt
-attatttgattttttaatagtaaccatcctgactggtgtgagatggtatctcattgtggt
-tttgatttgcatttctctaatgagcaatgatgttgagctttttttcatataattgttggc
-tgcatgtatgtcttcttttgaaaaatgtctgttcatcttctttgctcacttttttaatgg
-ggtagttttcttgtaaatttaagatcctcatagatgctgggtattagactgtggtcagat
-gcataatttgcaaaatttttctcccattctgtaggttgtcactttgttgatagtttcttt
-tgctatgcagaagctctttagtttaattatgtcccatttgtcaatttttgctttcattgc
-aactgcttttggtgtcttcatcatgaaatacttgcccgtgcctatgtcctgaatggtatt
-gcctaagttgttttccaggatttttatagtttgtgttttataAAATGTGAATTTCTTAAT
-TGAGAGTAATGGGAAGCATTTATTCCTGTGCTCCTGAGTCACCGGTTTTCCTTTTTGATG
-AATTTTGATAATCATTTTTTCTCACTAAAATTTAAAGGTTTAATTTTTAAAAACTGAATG
-GTTTAAGCTTAGCCCTATAGTTCTTGAACCATGATTTTAATAATAATGATTTTTTAATCT
-TCATTGCTCTAGCACCTTTAAGAAGGATTCGTTTGAAAATTCACCTGTGTCTCAACCCAG
-GAATAGGCTTGGCCTTCCTTCTCTGATGGCAGCCAGGGAGCTTCCTCCCATATACCGTGC
-CCACGGGAAGGAACAGAAATGCTTCCTGTCACTCCCAGGGGTCTCCAGCTGTCATAAGCT
-GCCAGCTGGAGGTGGTCCAAGCCAAGATTACAGCCGGCCTTTATCCTATAGTTATCACCC
-ACAAATCACCCCCTATCCCCAACCCAGGGGAGTCTCTCTGTCCATTCCATACCCCGGATA
-CTGAACTCAGCTCCAGAACCAGGGACCTCCTGCCCATTCACGATGGCCTTGAGCTCCCAG
-TGCTGTCCCCACCACTCAAGATTGTCCCATACCACCTTTCCCACCCAGCCCAAACCTCAC
-AAGCCAGGTGCATGTGGTGGCCTCTAGGGAAATGAGGTTTCAAGGTATTTTAGCCACAGA
-TCTCTTTGCTCAAATAAAGCCCTACACAGAACCCCAGCCCATTCAACATTTCAAGGTGGA
-GCTGAAATCCTTTGTGGGTTCTATTTTTCTCTCTTTGCAAAGCATTTCCAGCTTGTGGGC
-TGATTGTCATATAATCTAGACAAGTGTTAATTAAAGAAATCACTCAGAGCCTGTATATAC
-AAAAGGTAAAAATTTTAAAATCTTTACAGCTAAAAATATATTTAATGTGGTACATTTAAA
-AATATTTGATACAAGGTGGGGATCCCAAACAAAGAGTGCCAGGGGCCTATGGTGAGCCAA
-CCTCCCACACCTCCCAAATAAATCAGTCATCTGGCTTTGTCTATCTCTACGCTCTTCCTA
-TGAGTGTTATCACACTCAAATTGCATATTGATGGGATTAACCCTTTAAGGTCTCTTTCAC
-TCCACCATTGGCTTAGTGAGGCAATCTAGTCCATCATTGTCTCCCCAGCTCTGAGAAGCG
-AGCACTATCATAAAAGAAAAGAACTATTATACAAGAAAAGATTGCTACAGTGAACTAGAT
-TAATGTTAACAGGCTCCTTGAGGTAAGATGCTAAAAAGCATCAGAATGAATGAGTGAGTC
-GATAAATGAGTGAATCCACACTGTTGCTTATGAGGTCTGTGGGTGATGACGCCCCATGTG
-CATGGCAGTTTCAGAAGGGCTTTCAGGGTTTAGATTCTGGGGAAAGGAATCCACTTCACA
-GACCCTGCTGGTGCCGAGCCACTTCTAAGAGACCAAGGAGCCTGGAGCCACCCCATTCCT
-CCCAGGGGGTGGGGTTAGTTGATGCTGTCTGGTGAGTGACCAATCGCATCAGCACCTCTG
-CTGACCCCATGGGACTCCGCTACCTTCTCTCCTGGACTCCTAAAACTGCCATTTCTCTGA
-GAGGGGGAGGAGGGCTTCTTGCTTCCAAAAGGACTAAGCAGGGTTCTGGCAATGGGGACA
-GGATAGTCGTTCCCTGTGGCAGGCTGATGTACAATGGGATGGTCCTGGGGCCACATCTGG
-GCACAGACCCCCATTATCTTTAATGGTGCTCTTGCCAGGGGGACACTGCAGAGAGGAGTC
-TACCACGAGGAGACCTGCTCTCCCCTCCCAAGCACTGGAGCAACCTTGGCCCTGCCCAga
-aaaaggcagctgtagggaaatggagctgagtttaaatgcccactgggcacttagtagcca
-tgtgaccttgtgtaggtgactcctcctcttcctctctgggcctgagtttcctcctccata
-aaatgaggcagtcatctttgcagctctgcacccacaaagtgccattgtgagggtcaaata
-agtggatgtaaaagggcttgcagagaaccctgcagatggaaggtgGACCTTTATAAGGGA
-GAAATAAAATCTTATTAAGGAGAAAATAAATTCCCAAGAATGAGCTGCCCAGCATCTTTA
-AAAGAAGACTGCAGAGTGGACAGTGCTCAtacctgaaatgttttttttattcctctacca
-gtcagcctcctacacatcccagaggaggcagtgccttccccagaaagccctgccaggctg
-cactctgtcctcccatcctgctgcctccagcacaatgctcatatctgactgtctgtctac
-ctgacatctcccccactggtctggtgctcctttgggaaggaactgtatctgatgcaacca
-ggaatttcagctcttagggcagagtctggcgcatctgaggcacacatcaatattCTGAGC
-CAGACTGACTGGCTAGAGTAGAGCTAATGGTAGAATGTCGGGGGCTGGTGCCTAAGGTTG
-GGGTAACTAAAGACGCAGGCAAGCCTCACACTCCCTTCCTAGAACCTTATCTGATTACTT
-TCTCCATCTAGGTTTGAGACGAGGTCTAGCCGATCCTGCCTACAGGCTGAGTGAAAGCTC
-TTTAAGGTAGgggtgaccagcttttcctggtctgctcaggactttcctggtttgagttct
-aaaacgtcccatttcccaggtaaaccagggcagttggtcatgctaCCTTAGTTACTAATT
-GATTCTCATAGTAGACATTGTAATTACTCACTGATTGTATATTACGCTTCTCCTTCCTCC
-CCCTTTCCCAGGCTGGCAGAGcccatctcttaggacagaggctgaaaacggaagatagtt
-tcccagcctctcttgtggtgaggggttgccatgtgaccgagttttggccaatgagacaaa
-agggaaagtctgctgggaacttctgggaaggggttttttctctctatctaccttcacccc
-ctctttcttcctgctttcggtcgtgagaatgtgatgattagagctgtgacagccatcttg
-tgaccacaaggaaacatccttaccacactctgaggggtaaaacgaaggacagtaaaagct
-cgacactttgatgacattgttgatcctctgaaCGACCCTAGGACttgaacaacattaaaa
-tgttacatgttgtttatcaaaagacatcattagaataacaaaaaggcagcctctgtgctg
-ggagatgatatttgaaatctctccttgaaaaggactcgtatacagaatactcaatgatag
-ataactcagttgttaaaaattggggcaaaacttgaaaagaaactctagaaaagagaaaat
-taaaatggccaataagcaaagcacacaaaaaggtctgaacatcattattcatcagggaaa
-tgcaaattaaaactacagtggggcccgggcctgttggctcatgcctgtaataccagcact
-ttgggaggccgaagcaggcatatcacctgaggttgggagtttgagaccagcccgaccaac
-ttggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtggcacatgcct
-gtaatcccagctacttgggaggctgaggcaggggaatcacttgaactcgggaggcagagg
-ttgcagtgagctgagatctcaccattgcactccagcctgggtaacaagagcaaaactcca
-tctaaaaaaaaaaaatacaatgggatacaatctcacacttaccagagtggctaaaattaa
-aaacactgaaaatacaaagtgtcggtgaggatgtggagaaactggaactctcatactcta
-gtaatactaataataggagtgtaaatttggacagttgctttggaaaactgctaagcaata
-gctactaaaactaaacacagacttacctgatgaccaggtatttacccaagaaaaataaaa
-acatgtccacaagaagatgtgtatgtagatgatcatagcagctttattcagaacagcaaa
-acacaagaaacaccgccaacgcctgtcaacaaaagaacagaaaagtaagttgtgatatat
-ccatacaatggatgtatatgttattttatgaatatataaaatggatatattggaaatact
-acatggataaaatagttactttttaaactacatagcagtgaaaaagaataaactactgac
-acgtagcaatatggatgaatcttaaaattatattgtgcaaaagaagctagacacaaaaga
-gtacatacagcatgattcatttctatgaagtttaagaatgggcaaaaccattctatgctg
-ttagaagttggttagtggttaccctttgcaatggcaggtggagcagtggggagcagtagc
-tgggaaggaggtatggggatgccaaatgggatgtcaagaatgttctacatcttgatctag
-atcatatacttgcaaaaaattccttcagccattacagctcaagattcgtgtgctttattt
-atgcaatacagcaatctaaaaCATTAAAAAATGAATAATCTCTATGGTTTAAGGCACATT
-TAATCGAGTATTCTGTTACTTGTAGCGAAAAGCACTCTAACACTCCTCAACACAATTTGG
-CGACAGAGGATGTTTGTTGGGTGAGTGATGGTAATACCCGTGGAATAGCATTCTTACAGG
-GAACAGGGCACATTCACGCcattaacacctgtcactctcacttcagtcccaccagggagg
-gtttgttagtttcctctaacagatgaggaaactgaggtccagagaatcgcactgacctgc
-tcagagtcacacaacgagctttttttttttttttttttgagatggagtctcactgtgttg
-cccaggctggagtgcagtggcatgatcttggctcactgcagcctccgcctcccaggttca
-agcaattctctgcctcagcctcccaagtagctgggattacaggtgcccgccaccatgccc
-agctattttttttttcttagtagagagaggttttgccatgttggccaggctggtcttgaa
-ctcctgacctcaagcaatccacctgcctcggtctcccaaagtgctgggattataggcatg
-agccactgtgcccagcctacacagtgagcttttgaccaatctagaatttgggcccaagat
-tgtttaatcccaaacccagtgctctttccgctacacttctctcaccctGGGCACATCCAC
-CAACAACATTTGTTGAACTCCTATTCTGTATACTTCAGGGAAACTTTATCTGGTCTCTAC
-TTCCACTGAGCTTGTGGTCTAGGAGAAGAACAAGAGTTTTATCTAACAATAATAATTGTA
-TTTTTAAGTGCTTACGTTTATTAAATACTTACTATCTCCTAGACCAGCCTTTTTCagtgg
-agtccatgtattgcagagtatactccactgggttgcaagaaaaacaattagtaattctat
-ctgtatatttgatctcatcttttaaaaattttcattttgtgtatatcatataagatgata
-atatattgattgataatatattatgtttttactttgtaaatgtacatattaaatatattg
-ggggcaatgttcaCTGACAAGAATGGGACACCTAAATCTTTAAAGACCCATTGGTCGCCT
-GATCACATGATCCCATCTGGCCCTCATGACACTCCTGAGGACCAGAttttttttgttgtt
-tttagagacagagtttgctatgtcactcaggctgggatgcagtggtacagtgatggctca
-ctgcagccttgaactcctgggctcaaatgttcttcctgcctcagcctcccaaagctctgg
-gattacgggcatgagccaccatgcGTGACTGAGAACCCGATGTGTTGCCCCATGTTACAT
-ATGAAgatacatctttaaggtaatgaatatcccaatcacccagatttaattcttaagcgt
-tgtatacaggtatcaaaatatcacatataccccccaaatatggccaactattgcatgatt
-aaaaaataaaagaaaaaaGAAAAAGAAACCATCTTTAGCAATACCCTTTTAAAAAGTgct
-ttttgtttgtttagctttctttgaacatttgacccaagtcttccctcactcagaaaacca
-ctctgtaaaacatccctcaacatgatttcctcacagacaaacctgtctgataatttaatg
-ctgctgccatttttttttctggagctctgaactttgatgcctatctggactagttttgct
-ctagacttggggcacagataccattaggaattcctttGTCTCTCCTGTGTTGAAACCACA
-GACTGCTATATCTCAGTTCATCATAGAAAATTTACAAAATAAAAGCCACAGAGATTCATT
-Cccctgcctgtgtctaagctcttgtccaagcccctctcacattgactctgggcttggtca
-cgtgacttgctttggccaatggcataatggcaaacatgacacaagcagcagctggaaaat
-tacttgtgcatatgagcctttgccctttcagctctggggaaccctgtgaccacaaccagg
-ctggcagcaaacccaggctggtttgctgaagtataagagaccgatggctaaatcatctct
-gttaccccagctgtgccaagccaaccagcatatatatgtgagtgaggccattgacgacca
-gctgacggcagacacaggagagaagccagccaagaccacatggagcccagcccacgccac
-tactgggctataggttcataagggaataaatggtggccgttttcaggcaatttgttacac
-aggaaaagctCATGGttcctcttcttggtttagttcctctttttggtggagcacagcccc
-tggtagcATGGAAGttttaaaacatgtgcaccaatcctttgacacttgtcccatcagcag
-atagggttcatgacaccttcccttgcttgggcctgtaccttagtaatgcagcaaaagtga
-catggcataacttctgaagataagttagaaaaggccctacagtttccacctggttctcct
-gggacactcactccggggtaagccagccattgaggaagaggtatgagatcaccgtgctgg
-aaaagctacatgtcaacacaccactcaacaatccagtcgagacagccttccagccatctg
-ggccaaaggagccagactggtgagtgatgtcatcttgggccctccagaccagctcatcca
-ccagctgaagaccactaagtgagctccatcaacaccacgtggaacagaatcatcacccag
-ttgcaccctccctcagtttttaacccacaaaattaatccactaattttggtgatggtttg
-tcatgcaacaatagataaccagaTTCTATGCCATGATGGGAAGTTCTGCAGTTTCATTGG
-GAAGTGGCAGGCATTCTGGGACAGAAAAAACTTGGGGTCATTTGTGCAATCTACTGCAca
-gatttttaatctctggtttcttactctctgttccttccagagagcttcttgttcacattt
-tactgctgcaatatctttatcactcaagggatattaattgtaggatttattttaagtttt
-ctcttgttccctggattcttttcttgaagaccttttaccccgccctcatggtttgctttg
-atctctgcacttcatgatagaaatttctaatgatccttggctgtctactcacattaccac
-tctggctggaaactgggtggggagggtggactggtaggcttttgtgtagggtccatgcag
-ggtggttgcatagggctggtgcaaaggggctggttggctttttctgtgatgcactctcct
-cccacccccaattaccgtatctttaggtctttgtcctggaagtggttctccagataattt
-tctgcctggggttggacattctagaatgagacgggtgaagggggctgaagatctcACCTT
-CTctgggcctgatgtttctagttttggagtttctttgttgcctttttttcagagaataaa
-cctccctttgcttgcccagaagtgagtggggttactacctggctgggcaggatgggggtt
-ggggacgtggaggtcccatgctccttgtacagattgctttcaatccccacttcaccagca
-gctcctccaagacctagtagcttcaatttttgaggcctttaggCAAATTGGCTTGTTTCT
-CTATGCAGCAATCCACCCACACAGCAGTCACCTACCCCATCCATTTAGCTTTGACTTTCT
-TCCTCTCGGTTATGTCACTGGCCACTTCATCCATTTCCCTCCTTTGTAGTTCAGGGTTAC
-AAATGTCTCTCGATTTCCTCAAAGACAGAGTTTTTGTTTCTGCTCCTTATTCTTGTTTTG
-GGGAAGTTTTTTGTTTGTTTTTTTCTTTTTTAAGAAGAGAAAAGGAATAGAAATGTCTTT
-AGTCTACTATCTTAAAGCCACCATTTCATTAGAGTTTTAAATGGAAAAAGCACCCTCTTA
-TATTGGACAGAAGTGTGTCAGCAATGTGGGTTTTGTGACTCTTACTGGAGTAAGAGCCTA
-CATTATACGCCAAGGTGGCTTCATGTTCTAGTTTTACAAATGCATTTGATACAGTTAATA
-AAATAGCAAATTATGTATTAAGGAGAATACAGATAAGTCATTGCTGGCTTGGCAGAGAGT
-GGAGAGCAGCCTTGACCAAAAAGCTTAGAGGAGGAAAAGTGGGGTGGAGGCATGAGGTTG
-ACCTGTCCCTGCTAAGTGCCACTGTTTTCAgctcacccctttccacctgcaggtccctgc
-tcagatgccacctccttggaggatccccacccacctgtcactttctctctactaacttgt
-tttatgtctgactgcctgccaatggatttgattgacttatttatctttaggtttgtcgac
-cccactagatcatgggctccatgaccagggggagctttgctttttcacctccatacactc
-ggtgcctgtgagcacctggtacatcagtagatgctcaataaagagttgttgagtgaacaa
-atGAATGAGCCAGTGATTGCGTGGATCCATGTTTTCTATGAGAAGGCAGAGCTCTGAGGA
-CAGACAGAGGCCCAGTGTGCATGAGAAAGTCCTGCTGGCCCAGGCAGTGGCCTAAGAGCT
-GCCTACCATGGCGGTCACTGTTCTTGGGGAACCACAGATGTTTCCCCTCTAATCCCTCCA
-TGGGGACCAGGGGGGCATGAGAATGGGAGAGAACACAAAGTCCCTTTATTCAGGGGAGTG
-GATTCCATCTCAAGACAAATTGTTACCTCCAAGGCCACCAGCCGCCCAGCCGGCCCATCA
-CCATGGCCTCCCTCTTAAGGATGTGGGCACAGGCCCGGCCAGAGCTGAAATTGCCCTGGA
-AACTAGTCTCCCCTTTAATTAACAGGGAGGGCGACCAGGCCTGCTAACGGGGTGGGGTAT
-GGAGTCGGGGTGGGGTCAAGTTCATAAAGTCCCCAAAGAATCAAGGCCTCCTTGTTTATT
-TTCCCGAAAATGTTCCCCATTACCCAGAACAGCATAGGGGCCAAGCAGGCCGCAGGCAGG
-GAAAAAGCTTTAACCTCCCCGCTGCTCAGCTCAGCACATCACTATTTGACTTGCATTTTA
-AAAATAATTACAAACTTAATGAAAAAATAACCTAACCCCCAAACAGGCCAGGGACTCATG
-GCCAGCATTGGCAGGAGCAAGCCCCTGGCAGCTGTGAGGATGAGATGCAAAGGGTATAGA
-GGAACCACTGGAAGACAGGGGACACCCTTTAGATGGACACTCCCTCTCTCTAGCGCCAGC
-TTTGGCTCCCTATTGCCCTTTGTGTCATGCCCAAATGTCTCAGCCCATGTCTTAGAGCCA
-GTTTTACTCAGGCCCTATGTGGAAGACACTGGAACCCAAAGAGGAAAGGAAGTTGCTCAG
-GTTGTGCATTGTGTGGGACCTGATGCAGGTAGTGAGGCTGGTTGGGATGGGTTCTCGGGG
-AAAGAGTGGAGGAAAGTGAGAATGTGTCTCTGTTACCATCTGAGCCCTGGCTGGGTATGG
-CCAACATGCCAGGTAAGCAGCCTTGGGAAGCAGGCACGATGATTATCCATCTTTAATATC
-CCAGGACTTGAGTCCAGGTCTGTCGGGCTTTTAGCCACCACACTAAGTGCTGTAAAAGGA
-GCTGGAGGTAGAAATGAAGTAACAACAATAATaataataagcagctttcatggattgtag
-actatgtgccgtgcactgtgccaagctctttaccatctcttttaatctttgcaataactt
-tatctggtaggtagtgttattgacccattttacaaacgacgcccagagcattggttcaag
-gttgtgcagctgggaaatggcCTGTACTCTTCTACCCTGAGAATAATGCTCTACAGTGAG
-TCAGGGAGTCTtgtgaggtctcaagaacagggaccttgtctgtcttattcacttgtgtgt
-cctcagagcccagaagagagactggcatataatagatatttaatatctgtgttgtgaata
-agaatgaaCAAATGCACCTGGACCTAGAAGTAACTTCCGATGAACCATCCCAGTTCTCCC
-TTCCCCATTCCGGATTATCTTTACTTACCTGGAAGTGAACAAGATATTAAGGGGCTCCAA
-AAGAACTGAGAAATAGAACTTGGTTTGAAAGACAGTAGGGAGCCACAGCAGGTCCTTCAG
-GAATGGAGTTCCAAGCTAGGGGAGTGATGGTCTTCCTGTGTCTTTATGGATTCCAGGAGC
-TAGTCAAGGTCAATGAGCCTTTAGCCAGAAGGTCAAGTTATCCCCAGTGGTAAGTGTTGG
-GGGAAGAGGAGGGCACTTCTCAGGAGTTGAGGGTCCCAAACTTGTCATGCTCATTGGTTT
-TGTGGCTGAGAGTGGCAGGTTCAGGCTGGCCAGCCAGCCTCTTCAGCTTGCCCATGGTAA
-ATCCCATGATCCTGGGTCAAGGACGCCCAAACATGGTATGTCCATAGCCAGCTGACAGAA
-TTCGTATGTCATTGAATCTTTCAACAATGGATTCTTTGAAACTTACAACTCTGGGGCCTT
-TGAGGTCCATCTCAGATTCTGAGGCTGTAGAAACTGTTCATTTTAGAATAATGATAGGTA
-CAAaacatttactgagtacttactactccagacattgtttacaaatatcaacgcctttaa
-tcctcacaaccaccccagaaggtagtaacaatgtgaccccccacttcacagatgtgaaga
-cggaggcactgaaaggtgtaacttgcccagggtcacTGGCCGCCTGGCTCTAAAGCACAC
-AGCACTGCCTCACAGACACTTAAAGTCGTTGAGACTTACACTCTTCAAATTTTAGAATCG
-TAGAAAGTCACAAGGTCAGGATCTTCAAGCCACAGAGTCTTAAAATCATAGCACTTTAGA
-ACCTGCCATCATTGACTCATCAAATTCTGCCGTCATAAAATCTGGGCATGTTATAATCCT
-GGAATTCCAGATTCTTGGGGACTTTTAAGTCAGAGAAGTTTAGatcctgggatattaggc
-ttggattacagaccctagcccagtcctctcatatagcacagggaaactgaggcccacaga
-agtgaCAGAAGTCCAAGAGAGGCAGAGCCTGGTGGATTCAGTGTCATGTTTGGAGGGAGA
-AATCGGAGTGAACAAAGAAAGCCCCTGGGCAGGCAGGAATCTGTTTGTGATTAGCAGTGG
-GTTTTAGTGTTGCCGAGGAATGTACCCAACGTTACCGTTACCCCCGCAGGTTGCTGCCTC
-CTTTCTTCCCCCTCAGATGCCCTCCTCAGAGCCCATCCTGGCCAGACTCAATATCCTGTT
-TCTACCACCAGCAAATTGAATTTTCAGAAGTTGGCCTCCTAACGAAGCCAGCTTAATACG
-TTGGAGGTTTTCTTTGCCTGCATTGCTATTTCTTGGTAGGATGCCTGCTCTTCAGGAGCC
-CAGAGAGGTTTTGCACACTCAAATCACAACGCCAGGAGGGATGAGGGACAGGAACTATGG
-GACAGGTGGCTGGGGGCTTAGATAGACCCAGAGGTGGGaatagaaatggcgtgtctcaag
-ggggaggtgacaggtccacagggacctccgtactgctcaggccacacctgggaatttggg
-ggccttcagtctttcagaaacattaaccaaatggggtttgtttagaggagggatggggag
-agatgggtgggaatcccatgCTCTGGGAGACCTTGAGCGTGGACTAGATGGAAAGAAGCA
-TGAATTCTAAAGTTCAGCCTCTCAGCTACTGCCCCCTTGAAGACAGACATGGGTGGAGCC
-CTGGGGTATAGACCTAAGATTGAATGGTGGAAACTCCATGAAGATTTTGGTTTTATCAAA
-ATCAGTGGTTCTCAggctgggcatggtggctcacacctgtaatcctgaggcgggcaggtc
-acttgagatcaggagttcaagaccagcctggccaacatggtgaaaccccatctctactaa
-aaatacaaaaattagctgggtgtggcatcagacacctgtagtcccagctgctcaggaggc
-tgaggtaggagaattgcatgaacatgggaagcagaggttccagtgagccgagattgcacc
-actgcactccagcctgggcaatagagcaagagcctgtctaaaaaaaaaaaaaaaaaaaaa
-Gcaatggttctcaaagtacagtacagtccagaatctgtggggttcctgagaccattccag
-ggcatccacatggtcaaaactatattcacaacaacactaagacattatttgttcttctaa
-ccctcagtggggttgtccaaagttgatatgacatgtgatgccaccatcactctgatagca
-atgaaaaaaattaatgcaaaaacattcatgatgaacaaaatactaaaactgtaaataaag
-agaagactaatactactgatttttcctttcatctcaggcttcagtgtgaatttttcaaaa
-tattgcattaaaatgtcctaattactgatatttttggcacacaaattttaaacctgaggc
-aagtgcctcgtttaactcactctagtcctggcTGtggatataatccacatcaacagaagc
-ttgttggggtcctcaataatttttaaggatataaagtgtgctgagatgaaaacatttgag
-ggtcactgataaaagggataatgttccatcagctcaaactatccaacaatggaggggatt
-atattccaaggtactgagttcccatcacaaggtgtgtacaaatgggggGATTAAAGGATT
-GGGTGTGGGGAAGAGGCCTAATGTGCAGCATCTCTTGCCCAGGTGCCTCCTGTGGTCCCA
-CCTACCTGGCATCCAATagatcttctcattttcccacttgaaagcttgcaatggtacccc
-actgtgctctgagcaaaaacccacctcttctccatggcctaccaggctctatgtgtcctg
-gccctgtctcccactcttttgcccctagcttgctctgctatccccaacctagcctctttc
-tatttcttcagcatgccaaactctttcttacctagggattttgcacacgctgttccctct
-gcctggaacatcttcctcttcactcttctcatggctgttccttgtatcttctgagtttca
-acttgactgttgcctccaggaaggcttccctgatcaccctatagtaagtaggatttctct
-gacatcatctctcaacctcttttttgcttccttcatggaagtcatcactgcttttttata
-tttacttgttggcatggatggttctcatctattctctccatgagaccatgagctcctcca
-gggcaggaagcctgactgttcagacatggggcctcagcacctgacccagcacctggcatg
-gaggaggcccttgagaagtgtttgttaagcaaataaaCAAATCCTTTatgaattagtgaa
-tgaatgagtaaatgaatgaaAGATTAAACAGAAAAGGCCTCTGACTGCTGATGCTCAGGC
-ACTCACCAGGAAACCCAAAGTAACACAGGTTGTTACTTTGATGAAACATCAGTAACCATG
-GCTGGATAGTGTGTGATGAAGTATTAAGCAGTAAGTGTTTGCCCACTACCCATCAGCGCT
-GATCAAGTTGGAGGAGAGGGAGACTGGCCTGGCTGCAGAAATCTTGGATGAGTTGGGGCT
-TGAACACAAGCCTTCAGGGCTTTGCCAAGGCAGGTTCCCCTGCCTAGTTTCTCTGAAGAT
-TCACATTGTATTCACTGTGAGGGCTCGGCTCAAATAACCCTGCCTCCTATGGCTCTTCCC
-TGACTCTTCTTGGGTAGGGTCGGAACACACCATCCTTGTTCTGGGTGTTATTGTATTAGG
-ATAACCACCCTTGTCTATCACTGATTTGAAGACATTAGCTTATAGAAATGTCCCGACAGT
-ATAGATGTTATCCCAGTTTAGAGATGAGAAAAGTAAAGGTCCCAGAAGAACTTACATTCC
-AGTGGAGGAGACTCATCACGGGCAAAAAACCAAACCCACGTGTTGTGAGTGATAAGAGTT
-AAGGTGAAGAATGTTGCCGCGGAAGAGGAGTGGGGAGACCTCTCTGAGGGATCAAAGAGA
-TGTGGGTACAAATTCCATCTAATAGTGTCAGCTAAAGTTCAGTTAACTGTTACCACTAAC
-AATGAGTTAGCtgttgcttccaggatgtctgtttcacgaggacagggactatgttcactt
-ttctgtccccagcacctagaacagtgaacaacacatagtaggtgttccatgtatggtgtg
-aggtgaataaaGGCCTGCctgcatcaggcgttgtatatgaattattttatttaatctcca
-tggtcagagaggtaagggttatcatccccattttgtagataaggaaatgagggcacagtg
-aagttaaagtctaatgacttacccaagaacacccagatagtaaatggtggagcccgagtt
-ggattcgaatccagtccaatctgtctcgtatcttagccactctcctacacAGccttattc
-tgctcactcactgtgtgaccagggcatattgcctaacctctcatccactgaggatgtcat
-tttctttagcttttgaaataatacccatgtcatagggttactgtgaaagtttggttcagg
-tagagctcttagattcctgtctggcacacagtgaCACCTCTTTTCAGGTGACCCATTCTC
-GTTTGATATTGTCAGCCATTGTGAAATAAGAGGGTATAGAGCAAAGCTTTCCAAATGGAA
-AAACCTGCTATGATTTCTAGAAAGTCTTGGGAAACTTTCTAGATCAGTTATGGAGGTTGC
-AGAGCAGAAGGCCTCAAGGACGAGATGCAAAAACAGCACCCATGCAAGTTGACTTGTAAA
-CTGCTTTCTTCATCCTTTAGGAGGAATTGCCCAagaggcagcatttatggggcatgccca
-gggtctccaggcactgtgctgagggctctgtatcccgtctgtcaatttttcccaactcta
-ttatacagatggcaccactgaggctcagagaggtgaagggacttgcccaaggcctcatag
-tgcatcagaaacagtcaggactcagctcaagaaaaggccccaaagcaagcactcccaacc
-acatgatctaAGACCAGGGAACAAGGGGACAATGAGAGTGAGGGCAGGAAAAACGCTGGA
-AGATGTACCAGAGACTTAGCACTTGACTGATGGCATCTTTCCAGGCCAGTGCCCACCCCT
-CCTCTCCTGGCCTTCTCTTCCACCTCCCACCCTCCTGGGTTCCTGCACCATTTTCTCACT
-GGAGCTCCTGCCATGCCTGTTATCTTCTgttggttcttgggaaaagactctgagatggag
-attggcgtgcagtgggtttattggggagagtgctcaggagtaagaccaatgcaggagtga
-ggaaaacaggcctgggaggagtgaacagctggcacaatggagttacaacagaaatctcag
-tgatcccacaggagctctggagcagagatggcccttcggagctgaaggatcgggtcaggc
-attttttatcatacaccaaccactctttggccacaggctgcacctggaacgaacgtgtcc
-ttgggcagggcaagtccctacagctgagggccattcccggctgggaaatatcagcagctg
-gcagtcccatcagctgggAAGGGTGTCTGATGAGGGAATCCATGCTAGCCCCCAGCCTCC
-TTTCCACCTGTCCACTGTTATCTGACAATAGCGATCATGCCACACTAGCTCACACCGGCA
-GAGCACTGTCTACCTCTCAGGCTCCCTACCACGTCGTGTGGTGTGtggattccctcattc
-catcctcatgacaaccatgagagggggacactttccacatgaggaaacggaggctcagtg
-agatgaagagcttgcccagagtcccaaggtgcaagaatgctgtagctggtattctcaccc
-aagcagtGGGACCTATGGGTCCTATCTTGGTCCCTTATAGAAACTCCTTCCTTTAATCCA
-ACTCGGCACTGAGTCCCCTGGagtcaaagctcctgccctccaaaagttcatcatccagtg
-ggggaagtcaagacatatacactggaaagataagggctggtaagtgctgtgatgagaggt
-gacctgagggtgggtgacagggatgtcctgcccaggaaggcaggtgagacaaagtcagtg
-agttcagcctcagtggatgaggagagtgctgtgggaaggatcggggcagggtgggcttct
-aggcagtgggagcacaggtgcaaagacagagagggtgaaagagAGGGGCCCTCCAGAAAT
-AGGGAGTGGTCTCCTGAGATGACATAGGGGTTTGGGGGAAGGAAAACAAGGTCATCAAGG
-TGGAGGGGCTCCAGCCTCAGGGCCCTGCATGATACAGTCCCTGCCCTTCCGTGAATATTT
-GCTGAACGAATGAATGGTTGGATGGGTGAATGAATCGCTGCTGTGGAGGGTGGATTGGAG
-GTTACAGAGACGGGCAGGGAGACCAGTGGGGGGTCCACAGCAAATGTCCAGGTAAGAGGA
-AATGGGCCCAACTTTGCAGGGACCACAGGGGTGAAGCGATGAGAGAGAGAAAGAGAGAGA
-GGAGCGGAACGCCGCTGGGTGTGGTGACCTAGAGCTTCTGTGGCCCATCTCTCAGTCTCA
-CCCTGTTCCACCTCCATGCCCTGCACCATGCTGCATCCCCTGCCTGGCAGCTTTTTCCTC
-TCCCTCTGCATCTGCAAGTTGCACTGGCTGCCCAAGCTCTGCTTCCTCTAGGAAGTCTTA
-TTGACCAATGCAGCTCTCCCTTACCGTGCAAGGTCACTTCCCATCTCCCTCACAGTTTAA
-CCCTAGCAAACTCCATTTGCAGAGGCCGGTGTTCAAAATGCAATTCTCCAATTTTTGAAT
-GCCAGGCCAACAGGGAAGCATTTAATGCCCTTCAGCAGGGGTATGATGGGATAAGTGTGA
-ATCCATGTATCCCGTACAGGTAGGACCTCTCTGCCCCCATAGTGCCTGCTCGTTAGCCCT
-CTAAGGGAGGCATCTGGTAAATCTGGGCTTGGAGTTTGGAGGATCGGAAACAGGAACGAC
-CTCTCTGGGGACAGTTCTTAAGTTCTAATGGAGCAACTCTTCACAGAGGGACTTGCAAAG
-CTCTTAATTAAAGTTACCATCAGAACAAAGACTCTCTGAAGCAAGAATTTGGACCCCAAT
-GGAGTCCTGAATCCAGGCAACCAAGCTTGCATAAGTGTGCAACACAAAGGCAAATGAGTC
-CCCAAGGAAGAAGAGGCTCCATCCTCAGCTTGCTGCCCTTGTCTGAGGGAAGCACCATGC
-CCTACAGCTGACATTTACTGAGTTTGCATCCGTTgactcttttggttgcagaaaactggc
-tcagacaaaaaggggatttgctggactgaaaaggccaggctggagctatggtgcagcagg
-atctaagggcttaagtgatgtctttagggtggggtttctctccatttttttctgctcagc
-atccttcagaatccacttcattcccagAGTCTATGAAGGTGGGGTGCACAGAGAGAGTCT
-GTTGGACCAGTGTGGTCACACACACACCCTGAACCAAGGAGCACAACACCTGAGTGGCTG
-AGGCTGCAGGGCACGTCCCAGATTACACTGACCAAAGAGTAGGAAAATGTTCCCCATCAG
-AAATTGGTAGAACAGGGAATGGATTCTGGGGAAGTAAGCAATGAACATTATCCGTAAGGG
-CCTActatatggtaagcagctattaatcgctttgccaatttatagttgaggaaacagcct
-cagagaggtgaagtcactctgacagccaggaagtagggaaaagcaagcttggaacgcagc
-tctgtctggtaccagagcTGAGGGTCTGGGGAGCTCCACCATCCTGCTTTCCAGGCAACA
-TCTTTACCCATCTCTGTTTTGGTCCAAGGCACAAAGCTGGTGTCAGATGGCTCTTGGATA
-AGCCTGTGTGGGAAGGACAGATAGATGGGGGTGTGTatggatgaatggattggtgaatgg
-atgaacagcggggtggatggatgggtaggtagaagggtggatggattgctggctgtgtgg
-tttactggctaggtgggtgggtaaattggtatatggttaggtggaagggtggatgtatgg
-ataggtgggtggatgCTTGGGTGAATAAATGAAATGGCAACTGAAAGGACAGGTGGAAGG
-ATGTGTGGGTAACTAGATGGGAGGGTGAATAGAATAATGCTGACATAAGCATTAACAATT
-ATGTCTAGCCTCTTGCCCCTCTCTTCCCAACTGCCTTTTCCAGTGGAAAAATTGAAAATC
-ATGGACCCGGGGAACACATTCCCCTGTGGTCTGTTAATAGAGGCCCAGCAAGGCCAGCCG
-AGGCTGTCAACTCACCCCCCACTAGGACCCTGTCATTAGCCACACTCCCCCAACCCTGCC
-CTTGGGTGGAAGTATGATCTGGTGGGCACTGAGGGGCTGGGCCCATCCAGGCCCCTTATT
-AAGCCTTATTAAGCCCACAGACGGGGAGCAAAAAGGGGAGAAGAACTTTCTCCCAAAGGT
-CAGCTGTTGGAAAAAGAAGGTACAGATGTCTCTGGGGTGGTCGTCTACTCtcaggccaca
-aggaatgtgaaagtttgcctggcccaatctgctctgctgtcttcttgcaggctgggaaac
-tgaggcccatacaggagacaggagggacacacagaagtcgggacagagccagactcaaac
-ctcaggccggctcacagaccatAGCCCAGCCTTTCCCTGAAACAGCCTCAGCATCAACAA
-TGGGGAGGGAAAGGAATGGGCATGAATGGGGCTCCTGCTATATGCCAGGCCCTTGAGCAA
-AGCATTTTCTGTTCATGGAGCCACTGGTCTCCTCTGTATCCCCATGAGTAAAATGGAAGT
-TATGCCTGTCCTGTCACGGattgaacaagcatttgttaaacatctgttatactgtgggcc
-aagcactggtctaggtgccaggaatatggcattaactagccaaacaaggtttctgctttc
-agagagcttactttctagacagtgatagagacagacaaataagtaggtagataaaatgtg
-atatgaagaaaattgaggagtggtatgagatgtacaaggatggaagggacgttctttgga
-tgagatggttgggaagggcctctctgagaaggtgaTCATGGTCAAGGTCATtaattgtcc
-accaagtccattctcccctttgctagtatgtgggcaaagcccacaagtggctgtccaggc
-agggtcaacatttcccagccctatttgcatgcaggtgtggccatgtgactagctcttacc
-aatagaatgggagcagaagtgatgagtgccacatccaggcctagcttttgagaagtgagg
-gagcttcccccatgttcttgttacttttcccctggctgaattcaaatgatggcaagaccc
-caagatagaggagccacaagattagaagagcctggattcctgcatcaccacatggaggag
-agccactcattgccctggcacatccattgcatgagtgagaaataaacttCAGGTGAGACC
-CAAAAGACATGTGATGAACTGGTTaggacattgcaggcagaggaaatagcatgtgcaaaa
-ggctcaaggcagaaccaagcttggcatgttggcacagaaaggataccaatgtggccagaa
-taaatggcacaagaggaggaaatgaggtgaaccatgcaggcagtggcctcagtcaggagt
-ctgtatttcaagtggccccagtggaggtggcgccatcagcagggaagaaataccatgtgg
-ttcatacttggaaaagatccctctggccactgtgcagagatgagttggaaggaggcagga
-atggacacaccagagaggagctggtgcagtcatcctagcctggatgaggctggggacata
-agagtgagtgaacagagtgggtttggatatattttcaagggcttgctgatgggttgtttg
-tggaaggtgaaggaaaCCAAATAACCCACAAGCCATTAAACAAAATCTAATGCAGAAGCC
-AATATATATTAGTAAACACTTTAGGGGTCTCTGTCTAGCTTCTAATCTTCCTTCCCTGAG
-AACCTCCCACTTATGCCTATCTGATAACTCTACTTATCTGATAAACTGGCCCCTCCCCTG
-CCCTAGCTCATGGAGCTGGAGATCGGTCCCTGACTGGGGCTCAGCCAATCAGATCATCCC
-TGGCTGTCAGACCCCAGTGTGTGGCTGGATGGGGAATAGGCTGGGCCCTAGCACTCTCTC
-CTTGATAGAGATGATGGGGTAGGGGGAAGGTCAGCAGCCCAGAAGCTGAGGAAGAATGAA
-CTCTCCAAGGACCACCTACCCATCCCATAGCAGGCGAAACATAGCTGCAAGTGGACTCAA
-CCACCCTCAACCACAATTGGAGCTGCCACCAGCCAAGTGTGGAAAGGGTTGGTCTTTGCA
-GAGCCCTGGACTGGAAGAGGAGAGTGGGTCTCCCAGGGCAGAAAATGGGAGTGGCCAGCT
-CCAATTCTGTGCCTCAGGTTGGGAGACATGATCCTCTGGGTTCTTTCCATACCCTAGACA
-AGGATATTCCTTGTCTGAGCCTAGACAAGTTATTCCCCTGGGAAGGAGGGAGGTGCTTCT
-GTTTCTCCATCTGTCAGGTGGCTGAGtataacagatttcatttccaaaaatggccacagc
-cccctgctcctcatgaaccctgccactctccatcaagagggagagtttatttctcctccc
-ctggagactggcaggactttgtgactgccttgatgaatagaacgcagcagaggtgactgt
-gtaacttccaagggtgggtaagaaaagacaatacagcttctctctggctctttgtcttga
-gacactcaccctgggaaccagacgaccacggtgtaaggaagcccaggccccctggaaaag
-ccagaggtaaatgttctggccgacatttacccagctggggtcccagccaacagtcagcat
-caaccaccagacccatgagggaatcagtccagcccctggccatcaagtcttccatctgag
-gccccagacaccgtggagcacagacaaatctacccactgtgcccttctggattcctgccc
-cacacaatatgtgaatgcaatgaatgactgtttgatgccagtgtgttcaggggtgatggg
-taacgcagcactagatacccagaacGCTGACTCAGGCAGACTCTGCCTCCATGACACCCT
-CCGTGCTAAGCATCTGTTCCATTTCCCCACTGTCCTGAAATTTCCAGACACTCCTCTTTG
-ACAAGCCAGGCTTGGCTATGAGCTGGGGCCTCTCAGGGATCTTCCAAAGATCAGCCGTGG
-AACAAGCCCTGCGGGGAGTTCACTCCCTGGTCAAGAACCTTTGCTAACTCCCCATTTCCC
-CCCATATCAAATCTCAGCTCTTCTACTAGGCTTCCCAGGCCTGTCCTAATCTCCTCCATC
-CTCATGTCTCCCTGAAATGGGCCACAATTCCTCCCTCTGCAGTGTATTAAGAGTGAGAAT
-GTGGGGTTAGATGAGGTGAGGGGAATCGCAGGCTCTGGGAGAGCTTTGAGAGCTAGGCCT
-GAAGCTTTAGAAGGCAGTCttccctcatttagcaaatattgagtcctagtgtgcactacg
-ttctatttacagtgctgggaatacacagctgcacctgctagacataatccctgtcctaaa
-cccatgaggatcatattctcttccacctcagggcctttgcacctgccattctcctaacct
-aaaatctatttcggaagatttgtgtacacctcatcctttatccttccagtctcaccttag
-aagggcctgcctggccaccctctctagtcatccccattgctaattccctttattattatt
-attttttttttgagacagagtctcactctgtcactgaggctggagtgcaatggcacaatc
-ttggctcactgcaacctctgcctcctgggttcaagtgattctcctgtctcagcctcccaa
-gtagctgggattaccggcacatgctgccacacctagctaattttttgtattttagtagag
-acagggtttcaccgtgttcaaggctggtcttgaacttctgagctcaggcaatccacccac
-ctctgcctcccaaggtgctaggattacaggtgtgagccaccatgcctggcctaattccct
-ttactcttaattatatctccctgttcattttctccctaagtcttgaacaacagtatataa
-tctgtgatggctgatttacttgatgtttgtctgacttcccctactagaagtgtcagctcc
-ctgaggcagggactgtgtctgtctcattcactgctgtgtgccagggcatggcacagggcc
-tggcacccaggggtgctctatgactattAAATGTGTGCAGTGTGATGCTGGCTGCACAGT
-GCCTGCTTGCAGCTGGGAAGCTCGCAGTAAGGGGTGATCCTCTCTTTCTCTTCTGCCCTG
-TCTGTGGACATGCCCCATAAACACTCAACAGACTCCCCTCTGTGCCAGGTTCCATGTGGG
-CACCAGCAGCATGTAAGGGCTCAAACACAGTCGCTGGTACTGAAGCAGCTCCCAAATACT
-GGGGCAGGAGACAGATATCCAGCCTGTACTGGATATCTGGGGACATAGTGTAGCTGGTAG
-GGAGAGACGGCACAAAAGTCAGGGCACCAGAGGTCTGCAGTGCCAAATTAGAGTGGAGTA
-AGGACTCCATGCTGAGTAAGGAAAGAAGATCAGGCAGGCACTGGGGAGTACATTGAGGAT
-GGAAAGGAGGGCGATGGAGGCCATCTGGAAGGACGAAAGCGAGTGGTAGCAGGAGAGGCA
-TCTTAGgtatgaccccgggcatgacacgcaacctctctgaatctgtgtccCTGTTGgtat
-aacattctgtgaagcacacaggtcctggagccttcctgggttcaaatcccaccctctgat
-tactcatgaccctcaataagttctttcaacttggtttcttcatctgtaaaatggagatga
-caataatagcacctccccactattgtttcatcaggatcacatgagttaatgcattgaaaa
-cacttagatcggtgccaggcacatggtaagtggtcagtcaacgtGAGCTAGCACTGAAGC
-AGGAGTCACAGTTGCAAAGCACAGACCAGTGCCTGCACGCGCACACAGCAGGCACTCATC
-AGTGAGACGGACCTTCTATCTGCCTCTTACGCTGtaacacatatcaccacccaacatggt
-atttttttgcttatgtgattattgtcccttgcctccaccagaatgtgagctcaatgaggg
-caggggttctgtctcttttgttcccttgcattatccccagagcccagggcagtacttgac
-acatagtaggtgctcagtaagtagttgctgaatgaattcatttctaatttttagttttgt
-gcttggtgcacagcaaatgctcaacaaatgctggtcctcttCACCCCTACCAGCCTCTCC
-ATCCCGTTTCTACCTGCTCCAGGAAGCCCTCTTGGGCCTCGCAGCATCCACCAACCGTCC
-TTCATCCCAGGCTAAGTTCCCCACAGACCCCCTTGGCCCACCTCCCATCTGCTTTATCAT
-GCCTGTGGAGCCAAGGTTCACCTTGTTCCCCGGCACTCCCGCCAGCGTGAGTAAGCATCA
-GCCAGGACCTGGAGAGTAGAACCCACCCAGAGAAGAGCCCCTGCTTCTCTGCCCACCCCA
-GGCCAGAAGTGCTCTTGCCCCTGGACTGGTTTGTCCAGGGAGGTTTTCCAAGTCACTGAG
-AGCCCCATGATCAGATGTCACCAGATCCTCCCACCCCGGCTGCAGGGGCTGCAGTACCAC
-CAGGGCCAGAGCCATCCCCATGCGTGATTTCAACATCTGTAATACTTTCCCCTCTCCTTG
-TGGAATTCCCCCTCCAAATTCCTCCTGCTTCattattagtatatataaaaaataaaaaaa
-ttaaGCTGTCTTAATCATTTTCCATATTAGCTGACAGCCGGTTCCCATATGCCTGGGAGT
-GAGACCACACCTCCTGTTCCCCCCCCCTCCCCGCCCTCTCTGCTGTTCCAAAATGACTAG
-CCCCAAACAAGGCCCAGTTACTGAAAACCCTCTATCTTACAGACTCCGCAGCCCTGACTC
-CTTGGAGTCCTGTCTGGCTGGTGTGGCCCAAGCCAAAAGCAAAGCAGGAAGATTCTCTTA
-TGTCCCCAAAAAGTGCAGACCTCAGGGCTGGGCTGATCAAGGTGCAAATCTCAGTGTCAT
-CACCTACAAACTGGAACTCCACAAACTGCTTTGTCCTGTCCAAgaaagggcacaaattct
-gaagcagacggatctgagttccatctctggaactcagctctgtcaccttgggcgagccag
-ttcaccactctgagcctgagtttcgtcatctgtaaaacggcagaaacaacagcagttacc
-tctcagtgtcacagtgaaaatcaaggagaCTTTGataacagcagtgaacatccactgatc
-ccactgtgtgccaggcactgagccaagccctccctgcctccccctcattgcatctgcaca
-acaacctgctttgcagacagaaacaaagggaccgagatattaaaaatttctccaggacaa
-agaacagggaggtggaggagcaccctgacccaggcccgGCATTTTCAGTTCCACTCGAGA
-GCCTGACCCCCTGGAGATACTCCACAAGTCCTCACCCTTTTCCCCCAGTTTCACCTTGGT
-CTTTCCTCCTCTCATGGTCTTGAGCATGGGCATCAGGGATTGGCAGCACTGTTGTGTCCT
-GTCCCCACTGCCCAACCCCAGTGCCAGGGCTGTGAGCATCAGGAGGGTCGGTAGGAGCCC
-GTGGCCCATGCATGGCAGACTCAGGTGGCCCAGCACCTTGCGGCTGCTCCTAAAAGCACA
-GACACCTGTATTGAAGAGAGGGAAGTTCTGGGTTGAACTTGAACTGATTGAGAATTCCCA
-AGCCAGAGGAGATAGACAACTATGCCAGACCTCAAACTTGAAGATTGTTTTTGTTTTTAT
-TTAACTGAACCAAACTGATTTTTTTCTTCCCCCCGAATTACGAGTGAATCAGTTCATAAT
-AGAAGCCCCCATTATATCTCCTAGATTTTTAACCAAAATATCCAAAAAGAATTGGGCTAA
-CATAGCCACACCATCTTGGAATATGTATATTTATAGTGACATGTCATAAAGACTTCTAGT
-ATTTTGTCTCTACTCTTGATCCAAACTCCAGTGGTTCcggtttctctatattaagtattc
-acgtgctttgcatgtgtcacttttcatccttcagcccttagagggaagtatcattcatct
-tcaacttacagatgaggaaactgagactcaacgtagttaaatgatctgtaagacaaggtt
-ctgaatttgaacataggtctcagctgcagagccatgttattgctaacacagcctctgtat
-ggttctccagaaggcccctgatcCACTAAGAAACAAACCTGTCCCCCAATGCCAGCTGAC
-CCTATCCATGAACCCTCCTCCCTCCAGCCAGACAGGCCTCTGCCCGGAGAGGCAGCATCA
-TCTCCAGCTGcctgtactctcatcccagttcagccattcgccaagcatgacaactcggac
-aagacctttccctcctcagcctgtttcctcctgtgctgaggagaaataaaatcctccatc
-tcccacgctgttctgtgaaatgaagcaatcatgtacctaaagtgcgagcacaTagctggg
-catggtggctcacacctgtaatcccagcactttgggaggctgaggcaggcgtatcacttg
-agcttaggagttcaagaccagcctggtcaacatggcaaaaatccaccacttgagactagg
-atttcaagaccagccgggccaacatggcaaaaacccatacaaaattagctgggcgtggtg
-gcacacacctgtaatcccagctactcaggaggctgaggcacgagaatcacttcaacccac
-gaggcagagcttgcagtgagctgagatggcaccactgcattctggcctgggtgacagagc
-aagactgtctcaaaaaccaaaaacaacaataacaaaaaaaaGGGCTAGCACTTATTTTAC
-TTCTAAACTCTCCAGCCTCAACCCAACGTAAGTGAGGTGCATATAATAGGTGCTCAAGAA
-TTACTCATTGATGATAAAAGCAAGCCTGGAACAacaaaaataagagactgggcagaaata
-ttacaaaacatcagaagtagatccctctggggtggaattatgggtgattttattgtcttc
-ttggtgattttttttttctattttccaaactctcAGCTTGGAAGTATGTTATACTGTGTT
-TTCTAATTGTATGACACTATGAACTATACAATGCACTGTACACCTAATAGCAGTTTTTGA
-GAGGAAAGAACAAAACTACTTCATTGGATTGTAAGACTTGTTCTGATTTTGGTAAAGTTA
-AACTCTGCAGGGCAGGAAGAGTAGAGAGGTGTTTTAGAATCAAGGAAATACATTTGTAAT
-CAAGCAATCAAAGTGGTGGTCTTGGGGGGAGGAGGCTAATAAAATTATTATTGTTAATGT
-TATTATTAtttttgagatggagtctccctctgttgcccaggctggggtgcagtggcatga
-tcttggctcactgtaacctccacctcccgaattcaagcaattatcctgcctcagcctccc
-aagtagctgggactacaggcgcacgccaccatgcctggctaattttttgtattttaggag
-agactgggtttcaccgtgttgctcaagctggtctcaaactcctgagctcaggcaatccac
-ccgcctcggcctccgaaagtgctgggattacaggcatgagccactgaacctggccATAGC
-ATTACTTTTTAAAGGAGGAAGAGGATACAGGCAACTTTTCATTGCTTCCAGAACCTGGAA
-CATCAGCTTAACCTTGCCGGCACACCcagctcacctgggatatttgaaaataaacacaga
-tggccaggccctgtcctggtctgaatggccagcatctctaggctggggcctgggagtctg
-tgttttaaGTGGACACAGCAGATCCTGGGCACTGTATAGTAAATaaatctcctcatccac
-tttctgtctcatcttacagatgggaaatcagaagtccaaccaggggaggtgTTTAGCACT
-CTCCTGCCTGAATGGTGAGGGTGGCCAATCTCTTCCTTCACCCCAAGGGCCTTTCTCAGT
-CCCTGTCACCATCTTACCTCTCCCAGTCCTAGCCCCTTCCCCAGCCTTGCTCTGCCAGCC
-TGGAGCTGTTTCTTCCTTTTCTCCCTAAGGGAGTGTTCCCTGTTCTTAATTAGGGAGACT
-CTGGGTATTTTTGTCTCTTTGAGTACTGCGTTCTGTTGCCAGCAAATAACTTTAAATAGA
-AAAAATATGCCCAAAATTAAACTAGAAAACAGAAATAAATAGGAAGGGGGTGGGCTGAGT
-GTCAGCCTGCCCTTGGTGGAGAGGGTGGGctctgggcctcctttcctgcatctctgccat
-ggagaccatcacagtacccaccttctggggtgctgtgcacatcagacaagaagaggcaca
-cagtacactttgcacagggtgtctAAGTGTCCATTAATATCCAAAGTTACTGGGCACACT
-CGTTGCTTGGATTTTGAGATAATTATGTAGAGAAAATGTCAAGGGGCTCAAAGTCCCCCA
-GTTGACATTTCCCTACCAAGAGCTACTTTTATAACATGCTGCCGGATGTCATTTTCTTAA
-TAGGTACAATTTTAAGAGCAtctctccaccttcttccctaccctagtccaactgttcaca
-gctgaaagagtgaccttccaaaagcctaactcagatcatatgattctttgcctctgaaat
-ttttcaaagctctccattgtctacgaaatgccggcctcagagcctttcaggataggggcc
-atgaagggtctcaaatttcaaatttcatcttcctctaccatcctcctgtcaccctccagc
-cacacagacctgccccttggtccccaaaTGGATGCCCACTTCCTTTTTCCCTAATTGAAA
-GCCAGGGCAGAGTTAGGTTAATCACATGCCTTAGCTCCAGCCACACTTTTGGCACCAGAG
-TGAGACCCCTCCCTTATTTTATGTGTCCCTTTCATGCctcatccctactctcatcccacc
-tctcatccctccctcATGTGGATACCCCCCTAACGTGTTTGGCGTGTGTCTTTAAACATG
-CACGTGCCCTTGGAAAATGTGCAATGTTGTTGTCTGTGTGTATGATTTTAATTTACATAA
-ATGCTATTCATATTATGGCTTCTTACCTTTTTTCCTTGACACTGTCTTGAGATCTAGCCT
-GCATATGTGTGGAATCATCACTTCCAACTGCAGAAGAGTCAGCCACAGGGGGTGTCCTCT
-GTGCTTCCCTGCCCATCGTTCTGGTGCTGGTGGCCTAGGCTACCTCTGACTCCCCACAAC
-AAACCTCTGACTGCTTCTTATGTAAGAGAACACAACGACAGCTCCTGCTTTTTGCATAAC
-GAGCCGTTGTTTAGTAACAAGGGGCAGATGCCTCACTCAAGTGGATTTAGACACAGAGAC
-AAAGAAAGTGTAGATCTAGGTGTTCACTAACTCCTCAGGCAGCTGTCTTTCTCCATCTTA
-TCAATTCCAAGATCCCAGCCTCCCACCTTGGCAACTGCAGGGGAAAAGAAGCTCCCGAAA
-CAGTCCCAGGTGACTTTCTGGACCATAGCCTTTGTGCTGTTTCTTTGACGGTGGGATCTG
-GTTTTGTCCTGGCTTCAGCCTTCCCAGATCCATGTGTTTCAGAGGAAGTGAACTCCAGTC
-TCGGGGtgttatggactgaattcgaaattgtgttgaaaccctaaagcccaatgtggctat
-attagaagacatggtctgaagggaggtaattcaagttaaaggaggtcacgagggtggtat
-ccagtaggactggtgtccttataagaggaagagacatcagagctctctcttcacatagac
-acacagagcagatgccacatgaggacacagtgaggaggtggccatctacaggccagaaag
-gcctcaccagaaaccaaacctgatgacaccttgatcttgaacttccagcctccagaacca
-ggaggaaataaatttctgttgctgaagacacccagtctgcagtattttgttatggtagcc
-caagcagactaatacaGGGAATGAACTGTGATTGGTCTAAGGcaatatttctccattttt
-ttttcattattacccctcattattgacctcctgaagagttgttttaagaatttttttctc
-ctaagagtgcctcccacaaaatatatatatactacagacatatctatttatgtagtgtgg
-tttcttggagggtcacaaacggttgtcatatctaagattttgtcataccttaacctaagc
-taatttttacagccttaggagcaatattgccccattgagaatgcaCTGCCTAAGGCAATG
-TACTTGGTCTgtgattggttagaacatgggcatgtgaggctaatgtagaccatagatgtg
-agagccacagaggaagaaattgtcccttttcacctttggtctttattatggatggacata
-atgcctggatctgcggcagctattttgtgactatgaggacaggctgatatgctttaaatg
-gccaactagtagataaaacctaggccattgttcatatatatatatatatttgagatggaa
-tttcactcttgtcacccaggctgaagttcagtggctcgatctcagttcactgcaacctct
-gcctggttcaagctattcccctgccagagccttcagagtatctgggattacaggcaccca
-ccaccactcccagctaatttttgtatttttagtagagacgacgtttcaccatgttggtca
-ggttggtctcaaactcctgacctcaggtgatccacccacctcggcctcccaaagtgctgg
-gattacatgtgtgagccaccacacccggcccactgatcatatttttgagcaataaaagta
-accagccctgaaactgccctaccacaaactcctccttatgtgaaatgatgcattttcaca
-tttcagcctgttcagctgtgtagtttttgtaattgcagctgaagacattctaacagaTCC
-TGTtctttttcccgtaagttgtaccaaatgttctgaggcagactggcagtgatgggcctg
-gttagtccatgagttcatccccaaaccaatcttgtggccagacttgaatcctgtgcccac
-ccacctttgtagctcagggatgggaaggggtcaaccccacctggactgagaactgggggc
-tgttcctccgagggagatgagggagatacttcccaaagggattgtgaatgctgagagggc
-agaaatgacagctgGGTTTCACATTCACACCATCCCTTCTACATGAAATACCCCATCTCC
-AGCCCAATATACTCCCTCTAGTGCAGCTCAGCATCTCCCTCTTCTGAAAGGTCTCCCCAA
-GACCATGTTGAAATTATCTCTTCTCTTCCAGGTGATGCTCACTGGGGCATTTGTAGTCTA
-CCTCTGCCCTTAAGAGGCCAGTCTTCATGGCATGCAATCattcatgcatccatctaccct
-ccaatcttaattagcaccttctgtagccatccctaggccttggggtgctaagcaagaaaa
-aggcataatttccatcctcaaggatctcacagtccaggggaggaagcaaaactcataggc
-attcatTCGACACACATTTATTCTCTGTATAGATATGAGTAAAATATTGCATATCCTCAA
-GGAAAGGGGGAACTCCCCAGCTAATGGGACAGACAGATGAAGAACAAGTAAGTACAGTGT
-ATAATGAGGTGACAGAAGCCACCACTCATTGCTCTGACTAGGAGGAAACAACAAGATGCC
-TTAGACTCTTTTGGCCAAGGAAAGACACACTAGCTGTGTGAATGCCAGGTGAGCTGGCAT
-CATTTGTCTGGGATAGGGTGCAGTGGAGGCTGTTGAGGCCTGACAGCTTCCCCCTTCACC
-TTACTCCATTGTTTGCCAGGCTCATGCCTGGGAGAACCATATGCATAAGAAGACCTGGAT
-CTTATAGGAAGAAGAAGTGGAAAAGCCAATACCTGACCTCCAGGAATCAGAATTTGtgtt
-gcaggttgggttctatgcaggcagacacgaagacagagtttaggtgcaaggtgtttatta
-ggaatcaatatctggaaaagaaaggggcaggaatcagggttgaggaggaggagatactta
-actgcaatgtgacccagtaaagcgttggtcaacatggtgaggaagttgggagcaagaatt
-atccctcgatagacaccccgttctacatgatgtaattattatgaattacatgcctgtatc
-aaaacatctcatgtaccccataaatatatatatacctactatgtacccacaaaaattaaa
-attaaaaagagttacccctcagagaatcccaaaagatatcaaaatatccagacttttgtc
-tcagccccttcattttgatagttcactattcaccaaatacaggttgccccaggaagggca
-tggcctgggatgaagtggccctctcaagctgaggctaaccttgaaggggctgaagctgaa
-ggctctctgctgaccatgcttccCCCGCCTTCAGCTGTCAAGTCCTTCAGGGTCAGCTCA
-GTTCTGAGTGCCACTTTACTTGGGGTCACTTCTTTGATTCCAAGCAGTTTAACATAATGG
-CAACCACAGTTAGGGAGACCTGTCCTGGTGGATCAGGGTGGCCCAAGCTAAGGTCTGGAG
-GAAAGACGACCCTCAAGAAAAGATGTCTCCTCTGTCCCTCCACCCCATTCATACTAAGGG
-CCATGGGTTCATGGAGAGGGTTTCAGATGGGCACATTATAGGGCTGAGGCTAAAAGTCTC
-TTTGAACCAACTCACACTTGTACAGAAGTGATGCTGTGAGGACTAATGAAaacaagtagc
-atctactgcatgcttaacatacaccaggcactattccaaattttttacccacattagtca
-tttaattctcacattaccctatcagaggaacaatgatGAGCATGGGTATGTAGACCAGAA
-GGAGCTAAAACCCTAGAACACAAGCAGAGGACACCAGTGAGCCCAGGAAAGGCCCTGGGC
-CCCTGGAAGCAGTCTCCTCATCCGCCTGCATGGGCCAGGGTTCAACAGAGGCACCATGTG
-GCTGCAAGAGGCAGAAATGGCTGCAGACTGAGCTCTACTAGTTCCTTCCACTTGATGTTT
-GAATAAAGTCCCTGGAAAACTTGGGGAGATGGGATGAGTATCTCAGCTGGGAACACACCA
-AGACTTCTTAATAAGGCATGGAGAGGCTCAAGCAATTGATTGGAAAGAAAAAAAAAAAAC
-AAAACTAACTCAAGTTGGTAGATTTTACCTGCCATGAGATGTTTGTGAATAGCAGAGCAC
-AGGGTAGAGAGGTCACTGCCAAAGAGCAACTCCCAGTCACCCTTGACATGTGGCATCCCC
-TCTCATGCCTCCACGTCTGCATAAGCTTGGTAATCTTGTGCCCTCTGACACCATTCTCCC
-ACCTGTCACCCCACTCCATTCTGCCCATCAGGATAATGCTGCCACATCCTCCAGGAAGCC
-TTCTCTGGCTGTCCTTCTCCATGACGCTAGGCTCCCCTTCCATCTTCCCACAACTTCATG
-TACCTCCCTCTATCATTTTATTTATCAATCATTCTAGATTTTATGTGTTTATGACTGACT
-TTCCTCCTAGATTATGAGGCAGTATGATTATATTATTTACCTTTCCCACTGTCATGCATT
-CCCATTTATCTCACTCGGCGATTGTCACAACAatgctgcaaactaactaccactaagctc
-agtggcttaaaacaataacttcttctcactcatgggtctgtaggtcagctgggattctgg
-tggtctagactgggctgggctccaggcatgcatgcggatctgctccacgcgtctctcatc
-ctccttgacccacagaagacagctggaagcaggcaggacctcataggctttagctcagag
-ctggtgtgctgtcacttctgcccatgttccatcagccagagcaagtcacatggccaagct
-caacatcaattagatgtggagaaaattgatgagtcatgtggcaaagggcatggatatagg
-aaaaggtgaaaattAGGAATAGTATGATTTACTGTGACACAGATGCTTTCTGGTGAACAC
-CAacctctccaaactcatttcaagacccttcctcatcagcccagtgctcaaggtcaattc
-ctgcaaccttcagccctttgtagcctttcagtcttttgaacacactgtactttttgtctg
-acatacacctttcccatccctttcagatctcagctgagatgtcatctcctcaaagaTTTG
-CATGGCTGTAGGCTTTGCCACCAGGAGATAGTGACCCAACAAACAAGCTTGTATGGGTGA
-GTCCCTGAATCCAAACCCAACCCTGcctggccttgccactcactgctgtgaggccctaag
-aaaatcttatcttttttctactgctgttttcttatctgccaaaagtaaataaaaacaTCT
-TCCCAtatcagttagaaatgcttgcagctgcaagtagcagaacccctaatagtagctaaa
-acaataatatctcacaaactagatgcctggaagcaagaagctccagggctggtttattgg
-ctcagtgatgtaaggacTAAGTGCTCACTCATACCCTCTCATTTCTCCTCCTTCCCTTTC
-CCCATTCTACtaggttggtgcaaaagtaattgtggtttttgccattactttcaatggcaa
-aTTGtggtgcaaaagtagttgtggtttttgccattactttcaatggaaaaaacagcaatt
-acttttgcaccaacagcaaaaacagcaattacttttgcaccaacctTAATATTTCCACAG
-TGTCTTCCCTAAAGTCTCACAGAAGGTTCCCTTTACATTTTACTGGGCAGACATGGATCA
-TATGGCCACTCTAGCAGGAAAGTGAAGTGGGAATGCCAATATCAGGGTTTTGTTGTTGTT
-GTTGTTCAGCCTCCTTTGGGGGAAGCAGCAAACGAGAAGGGGGTAAGAATTGGCTGCTGT
-GTAATCAACTCACAATATCTACTCCTGATCTAACTTTCTACCTCACAGAATTTTTGTGAA
-AATTTGGATTGCCAGTAGCACTCTGAAGGCCACAAGCTTATAAAATAATAATCTACTTTT
-ATTATTATTCATGACTTATTAAGAAAAAATCAATATTGGAAGAGAATAATACTTCGCATT
-TGTTCAACAATGAACTTTCCGAAGGTGAAAGGAAAAGCAATTACTGTCTGAGCCCAGCCT
-GAGTCCCAAGTCCATGCCAAGCGCAAGCCTGCAAGACCATTTCCTCCTCCAGGGACTTGC
-TTCGATTGTGctaaaacagcttctgccaagccaaccaggattgcatgctgccaaatccag
-tactcattttcctgatcttattttatttgaattccctgagcattcaatccagttggcagc
-accctccttgatacatgatcctgtctgggcttctgtatgctcacagccctggttgttcct
-cagtctcctctgctggcttctccccatctacctggtttctagatgccagctgactcagga
-ctcacatgtgagctcctctcctccttcccaccccctatgctctttctgtctcaGGTttct
-caaaccttagcatgcatcaccgtcacagggagggcttgttaacacatagattgctgggtc
-tcactcccacagtgtctgatttcatcgctctagggtgaaacctgaacacttgcatttcta
-acaatttctaggtgatggtgatgatgctggtcctgggaccaccccttgagaacctctCAC
-TGCTCTatctcaaccagtgttgagagccttgtttctcagccttggctgcaaattggaatc
-acccggggtgctttaaaatatggacaccaggatctcatcccccagagattctgattttaa
-tggtctgcattatatcctgggtacctagagttaaaaacctcccccaggtgacttcaacat
-gcaggtaaagttgaaagcccctaatttagatactacttaactgctagtaacacctacatt
-tatttccctctcccagacttgtcctctgagttttagcccagtatgcccaattattcactc
-gatatctccacttacgtgactcacaagcatctgagagttaacacacccaaagtggaagtc
-tgaatcttcacttccaaattgctacttctctatcttccccatctcagcaaacagcaactc
-catccatgtgctgtagtttattggggtaaaaaccttggagttatctttggctcctctctc
-ccctccatgacccatatataatcctttgacatagtctatcggttccacctacaaaacata
-tccctaaattctcctctctgcctgaactgctaacacctacatcagaatatcatcaactct
-ttcctgggtggtctctgcagcatcctcacctccctacttctattctttactccctcgcca
-atgcatcctccaaacagcagccagaatggtctcttaaaatcataaaccagatcatgatac
-accccgatttaaagtcttgcaaaacttcctgtcaccttgggcataaaatctcagctcttg
-ctcatggccagtgagatcctgtcctcttctcaaccttgtctattccgctctctccctggc
-ttagatactccaaacacactggccttccttctgtcccttaaatacattcagttatttctt
-gcatttactatttcattaacctggatttctgttccctttggactctgcttggccagctac
-ctctcatctttcaggtctgcttaagtgtcactgccttaaagtgtctccctgacccgcctg
-ttatgttctatcataagactctatattcttcttagcgcctatcagagttggtgatcattt
-gatttgtaaatatattggtttattatttgtctctctcactagactgtgtgctttgtgagg
-gcaggaaccatgcctgttttggtcacggttgacacctcagtgcccagaagagtgaatgag
-acatagtgggtattcaaaacatacttagggagggagagaaaagaggaagaaaaaggaggg
-aggagaaaggaaggTCTAGTAATACTCAGAGCCCAGGAATTACACACCAGATACCCCTTG
-CTTCTACCCAAGAGGTGGTTCAGATTAGAGATTAGATTTCAAGGCTCCAGCTTGCTAGCT
-CATAACTGCTTCTACTCAAGACGGTCTATTCATGTAGCAAAGTCaaaatgtgaacatgct
-tttaagttccttgacgacaggaattgtggcttgtttactcttctacctggcatttgcaca
-gagcctgggcctgaatgaaagttcagtaaatggttcatgaatgaTTTGAATGGCATTTGC
-CTGAAGGAAATCTAAGAAAGTCTTGCCTTGGTTTCCCCATTAAATGGGGCAAGCAATTCT
-TATCTCCCCTTCCAGAGAGCTGCTGCCAACACAGGGAATCCATCCTGGAAGAAAAGATTG
-GTGGCCACCTGCACCATCAGGTGGAGGGCATCTCTCAGCTGCCCTTGCCACATCTGCAGC
-CCTAAGCTTCCAGGTGACCCCAGTGGACCAGTCTGCCCAGAGCATATCATTAGTTAGGGG
-CACTCTGCAGGAGGATGCCTGCCTTTGCTAGTGCATAGCTAATGTCCCAGGGGGCTTCCT
-CTAATTAAAACCCAAACTGCAATTATAGTTGTGCCAAAGCATGTGCACATGGCGCCACTT
-AAAAGGGACAGATTGACAAGGCGTTAACAACTCCAGAGGCAGCATTGTCCCAGCACCAGG
-TGCTACCAATCATCAAAATTAGAACCAAATGAGTCACTGGGGCTCAAGATACAGTATCCA
-GTGCAGACTAATGGGTGATTCCAAGAAACTTATGAGGATTATTTAAaacacactaactat
-gctccttctacagggcctttgcacttactagtccctgtacttcttcttgcctaactctat
-ttgatctctctcaattatcacctcttctgagacacctgctttgatcacatgaatctctac
-cctgctttatttttcttcttagtgtttattatcatctgatattatatatttgtttTGCGA
-TTGATAGCCCaaaatatgttttaatattgtataaatgtaaaacatatataaatacacaaa
-attttataattttCTGCAATACATATGTATCAAGAAGATACAGCATACACACTAAGGAGG
-GTGTCTTCTTGGGGTTGGGGGTGGTGAGGCAGGGGAATAGAAAGACTGATTCAGAAAGAA
-GAGAGGAACAATAAAAGAACAAATGAGAATATTTATATATCCTGATGACAATAGTGGGCC
-ATTATTTGAAGAGTATGATAAACTTGAATTTTCCTTCCTATCACTTGGTAAACTTGAATT
-ATTCCTCCCTGAAGTTCTGTACTCTGGGAAAAttttcttttttttttttttttggagaca
-gagtcttgctctgtcaccaggctggagtacagtggcacgatctcggctcactgcaacctc
-tgcctcctgggttcaagtgattctcatgcctcagcctcccaagtagctgggattataggc
-acatgccaccacacccagctaatttttgtatttttagtagagacagggtttcaccatgtt
-ggccaggatggtctcgatctcctgacctcatgatctgcccaccttggcctcccagagtgc
-tgggattacaggtgtgagccaccatgcctggccACTCTGGGATAATTTTATTTTGGTTTT
-TAGAAATAACTTTATTGAATATTTTAGTACCAGTAATCTTGCGATAAATTTCAGCCCTGG
-TTTGGTTGTTGTTgttgttgtttttggtctaaagccatcttgattttgcctttatttttg
-aagagtatttttactagatatagaattctaagttgtcaattatgtatattttttcagcac
-tttataaatgttatttcattgtcttctggctttcatcatttctgttgaaaagtctaccat
-cagtcttattgttgctcttctgtaggtaatgtcatttacctctgactacttttaagattt
-ttctctttatttttgtttttcagcagtcttactatgatgttcctatgtataattttctta
-gtatttaccctgcttgggattgtcagagcttcttgagtctgtgggttgatatcttttatc
-agttttgaaaaaattcttagctcttatttctgcaaatattgttaattttgtattcttatc
-ctcaccttctaggactccaaataaatgtatattttttttactaggtcccacatatctatg
-acacattcgtgtattttctattatttttctatgtatactttagtttggacacttttcatt
-tttttaagtgtgctaatcctatcttccactgtatcaaatctctgttaatcccatctgatg
-aatttttgatttcagatattatattttctcattctagaggtatcattttttcttttttat
-agacgctaattttctgatgaaattctccatcttttcaaatattttgtgcatatttttctg
-ttttttaaCATATTAATCTTAGCATGTCAAAGTCATTATCATATACCTGTTTCTATTGTC
-TATTTTATTCTGTTTGTTTTCAGATATGTCCTAGCTTTGGCATAACTAATAATGTTAATA
-GAATGCCACTTATTATACATAATGTAGAGACTCCAGATGATATATTCTTCTAGAGAAGAT
-TTACCCTCTGCTAGGCACAGAGTGGGGCTTATCATCATAAACCAGTCAGGGATTGTACTG
-AGTCAAGACTGTAAGGTAACCCCAGGAAGGTCAGTTTCCCTGTGCTTCAGTCAGTCATAC
-ACTGAACACCTCTTCTCAGAGGCTTTATGCCAAGGTTTATAGCCTCCTGCACCAGGTATC
-CCAGAATCCAGCAAGTGTCTTGAGGGATTAATGAGCCCTCAAGTCTGCCAAAGGCTCTGC
-TGGTTTCTTCCACACTAGTCCAGTGCTGCATAAAACTTGGATTCTCAGCATTCTGCTTTT
-GCCTAGAATTGGAAAATGGTCTGGGGTAAAGAAGCTATATAATTCAGCTTACTCCCCTGC
-TGTTCATTCCTTTCCAGAATTTTAGCAAGTAGTATATTTTTTTCCAATCCTatgatatct
-gacaatgctactatatttctctagtcaatttactcttccatttcctgggcaaccatttca
-ctttctcttatttcttcacatctttgacaccttctttctctcctcacttctaactgacgg
-cttacaaatgaaagcaagtggaatgacaataactttttataaaaacttctacactagtcc
-atcaacacgtctctctaatacttctccctccctctctttctctctctccctttctctctc
-tccatgtgtctgctggatcccatcattctcatctaatcaaggactttgctcctataatca
-tccctccatgaatcattttcctctctctgctaaattattcccataagtggacaaatatac
-cattagtctcccatcttctaaaaagtatataccctcccttgtctcaatatctctgtgcag
-ctacccccacattttgtttcttcccatttgaagcaaaactcctcaaaaattgtatatatt
-cactatcttcattttctttccttctatgccaaacaggttttcctccttcaaagctactct
-catcagggtcaccaaatacctctgcattgccaaatccagaggtcagttcacagacctcgc
-cttacctgattgctcagaagcatttgacactgttctctttgctggttcttcctcatgttc
-tcgacatctgagtgttggagacccccaaaatcagtcctaggactctttcttttccttcta
-tatattccttttacgtgctttccttattctctttgtatataatttaatacctctactggg
-taatttacaaagaaaacaaacttatttctcacagttctagaagctggaaagtccaagatc
-aaggcagcagcatgttcagacgtgtggtgagggctgccctctgcttcctagatggtgcct
-tgatgctgttgtcctccagaggagaggaaatctgtaaattcacatagtggaagatacgga
-attatgaaaaaggaacaaactccctccatcaagctcttttatcagtaccttgatccattc
-tgccctcatggcttaaacacctttcaaaaggccccacttcaacactgttgcattggcaat
-taagtttccaacacacacattttggggaacacattcagaccatagcaacccttttgttca
-gtctcatgattttaaatatcatttatattttatgactctcaaatgattctagccagaaat
-tatctcatgagctctagactctctctacatacccacattaacaGCAACGAAAGCACATTT
-AATCAATTTAACCCAAGGAAGTAATACGATGAGCTCAGGTAATACAGACTGAGACTTCAT
-CCAAGATCACAAGGATGGTATGTGCTAGACTCCAAAGAGATGCCCAAGATTTTGTAAATA
-CCCTTCCCTTCCACAAGAATAGAGTTGTTATTTGGTGTGATTTCTCAGGGAGTTGGGGAG
-ATCTCTTATCAAACTCCCAAATTGCTCTCCAATCTGCTCAAGTTTTCTGAAATGTTGTTG
-tttctgggtcatagcatatgcacatacttactttggttaagttcagccaaattatttctc
-cagaatggctgttccagtctacattctttccagccatgcctgtgggctcttatctccaca
-tctttgccaggtattactagccttttagtttttgcctggttaataaatgtaaagtgctaa
-ttctctgatgttttatttatcatattactaattaatttgagcatctctcacttacttgtt
-ggcttgtttctttttccataaattggtatccatttctcttgccagttttttattatggag
-tatatatatattgccaatttaaaggacttctttgaatattctagTGATTTGTCCCCTGTC
-AATTTTAGAAATTGCAAACATCTCCTAATTTGTCATTAGTCTATTATCTTTGTCTTTATG
-TCTGTCATTTAAGAGAAATCATTTTCCTGTAAATGTTTTAAAActttttattgtaaaata
-aaacacattaaaaatctcacacggcaaatgtttaacttagtaaattattataaactgaac
-cctttaaagtattactcaagtcaagaatataactttgccggccattcagaagcccctccg
-tatgttctatcccaattatagctccctctcccctccaaaagcaatattaccctgactttc
-atatcaatcactttcttgcttcttttatcatccaagtgtgcacccccagacactatggtt
-tagtcttgccATTTAAAAAAATgtttatatgtattttgagtctcttttaatctacaggct
-ccctttccatctcttctctttctttaatattcatctgttgaagaacccaggccatttgac
-ctgtacagagtcccatagtttggaatttgctgattgcaagtcttggtgaagttcaagatt
-cctctgtttaacgtctttactgtaaatggacagctggtccagaggcttcatcaggctcag
-acgctgtgttattttatcatgtggcacattcctatctgggtgcttctctttgagaaggca
-gtgacacttaaagattagatctattgattcattgcggattggaaaaaggggatgttctaa
-ttccattttttttttcattttttttaactggaataattttataaagagacacttttctca
-ctcgccattggttattgttacgaactgaattgtatccctccccaaattcattcattcgtt
-gaaacctagcccccaatgtcactgtacttggatatagggccgctagggaggtagttgagg
-ttaaatgaggtcagaagggtagggtactaatccaataagactggtacccttagcaaacaa
-agagactccagtggtctgtgtccttctctccatacctgcaaagaggaaaggccatatgaa
-gacacaatgagaagtcagccctctgtaagccaggaaggaagactcaccagaaaccacatt
-ttgtggcaccttgattttggacttcccagcctccagaactgtgagaaaataaatttctgt
-tgtttaagccacccattcggcggtattttattttggcagccctagcaaactaacaccatt
-acccaagtggtataattaatacataaaagagaagataactgcttgattctctttatttac
-caggtttcgagataatgaatttgttcctgttatcctccaaaggctaccatttaaattctt
-ttgttattattaaatcatggatttaagtatagtttgtggttttcaatccattgcattttt
-attctaattgacaatcaagttgttccatctttgaacagtaggaagctctttggcttggct
-cctgaggccttttgacttatctcccttagtccttgaagcttctttgtatcttgaatgaca
-aaatattccaggcttgtcctaccttcatatcctgctttaaacctagaatcagccatttct
-tcaaggagtcctgggtccttctaatgagaaattttatttcaagactataatatgaatgct
-agagatgttcactgctcctgggctgctcattaagtctaggcttcttgagtgggcaaagct
-aatatacatatatgtatgtgtgtgtgtgtgtatatatatatatataactcatgaattcat
-actggttcaatgagttcagttctaacttagaactcagattgttcacttaacttcttttac
-actatatttgaatcttttttcttacattctgagaattctggttcttaatatcACAGGGAG
-TGATATAATTAGGATGTCAATAGTCTTTAATTATTTAATTTATCCCATGTTGTACACACA
-ACAATACTACCAATCCTAATTACTGACAACAGTTTAAAAAGTTTTGCATATGCTATTCCA
-TTCCCTCCCCATTTTTATATTTACATAATCAAATAATAAAGCCTTTAATATATAGTCTCT
-ttctggtcttagttccgcaagtgggtatatataaaggctcaaaatcaatctttatattga
-catctctctacttatttgtgttgtctgatgctcatattgt
diff --git a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta.fai b/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta.fai
deleted file mode 100644
index 04a438b..0000000
--- a/testdata/net/sf/picard/reference/Homo_sapiens_assembly18.trimmed.nodict.fasta.fai
+++ /dev/null
@@ -1,2 +0,0 @@
-chrM 16571 6 60 61
-chr20 1000000 16861 60 61
diff --git a/testdata/net/sf/picard/reference/testing.fai b/testdata/net/sf/picard/reference/testing.fai
deleted file mode 100644
index 65b7c02..0000000
--- a/testdata/net/sf/picard/reference/testing.fai
+++ /dev/null
@@ -1,7 +0,0 @@
-chrM 16571 6 50 51
-chr1;boat 247249719 16915 50 51
-chr2:money 242951149 252211635 50 51
-chr3::; 199501827 500021813 50 51
-;;;;;;;; 123 234 456 789
-file:gi|17981852|ref|NC_001807.4| 16571 2911876801 70 71
-
diff --git a/testdata/net/sf/picard/sam/Chromosome1to10.bam b/testdata/net/sf/picard/sam/Chromosome1to10.bam
deleted file mode 100755
index 671814e..0000000
Binary files a/testdata/net/sf/picard/sam/Chromosome1to10.bam and /dev/null differ
diff --git a/testdata/net/sf/picard/sam/Chromosome5to9.bam b/testdata/net/sf/picard/sam/Chromosome5to9.bam
deleted file mode 100755
index d32ab86..0000000
Binary files a/testdata/net/sf/picard/sam/Chromosome5to9.bam and /dev/null differ
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.dict b/testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.dict
deleted file mode 100644
index cf1c969..0000000
--- a/testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.dict
+++ /dev/null
@@ -1,2 +0,0 @@
- at HD VN:1.4 SO:unsorted
- at SQ SN:chr1 LN:1000 UR:file:testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.fasta M5:17522ddd273279f4595f50fea9864734
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case1/expected_output.sam b/testdata/net/sf/picard/sam/MergeSamFiles/case1/expected_output.sam
deleted file mode 100644
index e604911..0000000
--- a/testdata/net/sf/picard/sam/MergeSamFiles/case1/expected_output.sam
+++ /dev/null
@@ -1,13 +0,0 @@
- at HD VN:1.4 GO:none SO:coordinate
- at SQ SN:chrM LN:16571 AS:HG18 UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta M5:d2ed829b8a1628d16cbeee88e88e39eb SP:Homo sapiens
- at RG ID:1 PL:ILLUMINA SM:sample1
- at PG ID:1 PN:something
- at PG ID:1.1 PN:A
- at PG ID:1.1.2 PN:B
- at PG ID:2 PN:C PP:1.1
- at PG ID:2.1 PN:D PP:1.1.2
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case2/expected_output.sam b/testdata/net/sf/picard/sam/MergeSamFiles/case2/expected_output.sam
deleted file mode 100644
index 89ba32d..0000000
--- a/testdata/net/sf/picard/sam/MergeSamFiles/case2/expected_output.sam
+++ /dev/null
@@ -1,21 +0,0 @@
- at HD VN:1.4 GO:none SO:coordinate
- at SQ SN:chrM LN:16571 AS:HG18 UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta M5:d2ed829b8a1628d16cbeee88e88e39eb SP:Homo sapiens
- at RG ID:1 PL:ILLUMINA SM:sample1
- at RG ID:1.1 PL:ILLUMINA SM:sample2
- at RG ID:1.1.2 PL:ILLUMINA SM:sample3
- at PG ID:1 PN:A
- at PG ID:1.1 PN:X
- at PG ID:2 PN:B
- at PG ID:2.3 PN:B PP:1
- at PG ID:2.4 PN:B PP:1.1
- at PG ID:3 PN:C PP:1
- at PG ID:3.6 PN:Y PP:2.4
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1.1.1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACC [...]
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
-6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1.1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@ [...]
-6194MAAXX100108:2:55:3087:12679:BI 147 chrM 50678 0 101M = 50418 -360 TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT :99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9 RG:Z:1 E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
-6194MAAXX100108:2:55:3087:12679:BI 147 chrM 50678 0 101M = 50418 -360 TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT :99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9 RG:Z:1.1 E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCC [...]
-6194MAAXX100108:2:55:3087:12679:BI 147 chrM 50678 0 101M = 50418 -360 TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT :99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9 RG:Z:1 E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
-6194MAAXX100108:2:55:19789:20399:BI 73 chrM 50921 0 101M = 50921 0 CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN 97:>?A>>BB>@B@?@CA5@?5=C@############################################################################ RG:Z:1.1 E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??########################################################################### [...]
-6194MAAXX100108:2:55:19789:20399:BI 73 chrM 50921 0 101M = 50921 0 CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN 97:>?A>>BB>@B@?@CA5@?5=C@############################################################################ RG:Z:1 E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??############################################################################ [...]
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/bad_index.bai b/testdata/net/sf/picard/sam/ValidateSamFileTest/bad_index.bai
deleted file mode 100644
index bf4bc62..0000000
Binary files a/testdata/net/sf/picard/sam/ValidateSamFileTest/bad_index.bai and /dev/null differ
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/bad_index.bam b/testdata/net/sf/picard/sam/ValidateSamFileTest/bad_index.bam
deleted file mode 100644
index 8aa4751..0000000
Binary files a/testdata/net/sf/picard/sam/ValidateSamFileTest/bad_index.bam and /dev/null differ
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/buggyHeader.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/buggyHeader.sam
deleted file mode 100755
index 5d2b1b4..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/buggyHeader.sam
+++ /dev/null
@@ -1,30 +0,0 @@
- at HD VN:1.0 SO:coordinate
- at SQ SN:chr1 SN:chr123 LN:247249719 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:9ebc6df9496613f373e73396d5b3b6b6 SP:Homo sapiens
- at SQ SN:chr2 LN:242951149 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:b12c7373e3882120332983be99aeb18d SP:Homo sapiens
- at SQ SN:chr3 LN:199501827 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:4e390df72c70f259b074be639d8f9578 SP:Homo sapiens
- at SQ SN:chr4 LN:191273063 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:cf37020337904229dca8401907b626c2 SP:Homo sapiens
- at SQ SN:chr5 LN:180857866 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:031c851664e31b2c17337fd6f9004858 SP:Homo sapiens
- at SQ SN:chr6 LN:170899992 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:bfe8005c536131276d448ead33f1b583 SP:Homo sapiens
- at SQ SN:chr7 LN:158821424 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:74239c5ceee3b28f0038123d958114cb SP:Homo sapiens
- at SQ SN:chr8 LN:146274826 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:1eb00fe1ce26ce6701d2cd75c35b5ccb SP:Homo sapiens
- at SQ SN:chr9 LN:140273252 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:ea244473e525dde0393d353ef94f974b SP:Homo sapiens
- at SQ SN:chr10 LN:135374737 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:4ca41bf2d7d33578d2cd7ee9411e1533 SP:Homo sapiens
- at SQ SN:chr11 LN:134452384 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:425ba5eb6c95b60bafbf2874493a56c3 SP:Homo sapiens
- at SQ SN:chr12 LN:132349534 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:d17d70060c56b4578fa570117bf19716 SP:Homo sapiens
- at SQ SN:chr13 LN:114142980 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:c4f3084a20380a373bbbdb9ae30da587 SP:Homo sapiens
- at SQ SN:chr14 LN:106368585 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:c1ff5d44683831e9c7c1db23f93fbb45 SP:Homo sapiens
- at SQ SN:chr15 LN:100338915 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:5cd9622c459fe0a276b27f6ac06116d8 SP:Homo sapiens
- at SQ SN:chr16 LN:88827254 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:3e81884229e8dc6b7f258169ec8da246 SP:Homo sapiens
- at SQ SN:chr17 LN:78774742 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:2a5c95ed99c5298bb107f313c7044588 SP:Homo sapiens
- at SQ SN:chr18 LN:76117153 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:3d11df432bcdc1407835d5ef2ce62634 SP:Homo sapiens
- at SQ SN:chr19 LN:63811651 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:2f1a59077cfad51df907ac25723bff28 SP:Homo sapiens
- at SQ SN:chr20 LN:62435964 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:f126cdf8a6e0c7f379d618ff66beb2da SP:Homo sapiens
- at SQ SN:chr21 LN:46944323 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:f1b74b7f9f4cdbaeb6832ee86cb426c6 SP:Homo sapiens
- at SQ SN:chr22 LN:49691432 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:2041e6a0c914b48dd537922cca63acb8 SP:Homo sapiens
- at SQ SN:chrX LN:154913754 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:d7e626c80ad172a4d7c95aadb94d9040 SP:Homo sapiens
- at SQ SN:chrY LN:57772954 UR:file:/stornext/snfs1/next-gen/solid/reference/full_hsap36.fasta M5:62f69d0e82a12af74bad85e2e4a8bd91 SP:Homo sapiens
- at RG ID:A PL:solid PU:083_20090618_2_SL_notag LB:ANG_TCGA-OVA.09.T_000sA DT:2009-06-18T19:00:00-0500 SM:TCGA-09-0364-01A-02W-0370-010 CN:Baylor
- at RG ID:B PL:solid PU:083_20090618_2_SL_detag LB:ANG_TCGA-OVA.09.T_000sA DT:2009-06-18T19:00:00-0500 SM:TCGA-09-0364-01A-02W-0370-010 CN:Baylor
- at PG ID:0 VN:4.0r2.0 CL:/data/bucket2/corona_lite_v4.0r2.0 -t 50 or 30 -z 10 -e 6:50 or 3:30
- at CO Hi, Mom!
-1003_834_22 0 chr1 7330 255 50M * 0 0 CCCAGGCCTCCCGAGCCGAGCCATCCGTCACCCCCTGGCTCCTGGCCGCT @@@@@?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>9@@@?9<@@(((! RG:Z:0 CS:Z:T20012030220032230322301320312110000210322021030332 CQ:Z:499;=,4988 MD:Z:23C23TA1
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/duplicate_rg.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/duplicate_rg.sam
deleted file mode 100644
index 2558e9a..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/duplicate_rg.sam
+++ /dev/null
@@ -1,11 +0,0 @@
- at HD VN:1.4 SO:coordinate
- at SQ SN:chr1 LN:101 UR:merger.fasta M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ SN:chr2 LN:101 UR:merger.fasta M5:31c33e2155b3de5e2554b693c475b310
- at SQ SN:chr3 LN:101 UR:merger.fasta M5:631593c6dd2048ae88dcce2bd505d295
- at SQ SN:chr4 LN:101 UR:merger.fasta M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ SN:chr5 LN:101 UR:merger.fasta M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ SN:chr6 LN:101 UR:merger.fasta M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ SN:chr7 LN:404 UR:merger.fasta M5:da488fc432cdaf2c20c96da473a7b630
- at SQ SN:chr8 LN:202 UR:merger.fasta M5:d339678efce576d5546e88b49a487b63
- at RG ID:H7U2W.1 PU:H7U2WADXX140408.1.AAGTAGAG LB:Solexa-1 PI:0 DT:2014-04-08T00:00:00-0400 SM:K-562 CN:BI
- at RG ID:H7U2W.1 PU:H7U2WADXX140408.1.AAGTAGAG LB:Solexa-2 PI:0 DT:2014-04-08T00:00:00-0400 SM:K-562 CN:BI
\ No newline at end of file
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/hanging_tab.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/hanging_tab.sam
deleted file mode 100644
index a4a4331..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/hanging_tab.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD VN:1.0 SO:queryname
- at RG ID:0 PL:illumina PU:300TDAAXX090429.8 LB:Solexa-3536 DT:Wed Apr 29 00:00:00 EDT 2009 SM:CLONED Phi-X Control CN:broad
-300TDAAXX090429:8:100:0:1001#0 589 * 0 0 * * 0 0 NNNNNNNNNNNNNNNNNNNNNNNNN ######################### XN:i:1 RG:Z:0
\ No newline at end of file
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/inappropriate_mate_cigar_string.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/inappropriate_mate_cigar_string.sam
deleted file mode 100644
index 9500e48..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/inappropriate_mate_cigar_string.sam
+++ /dev/null
@@ -1,13 +0,0 @@
- at HD VN:1.4 SO:coordinate
- at SQ SN:chr1 LN:101 UR:merger.fasta M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ SN:chr2 LN:101 UR:merger.fasta M5:31c33e2155b3de5e2554b693c475b310
- at SQ SN:chr3 LN:101 UR:merger.fasta M5:631593c6dd2048ae88dcce2bd505d295
- at SQ SN:chr4 LN:101 UR:merger.fasta M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ SN:chr5 LN:101 UR:merger.fasta M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ SN:chr6 LN:101 UR:merger.fasta M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ SN:chr7 LN:404 UR:merger.fasta M5:da488fc432cdaf2c20c96da473a7b630
- at SQ SN:chr8 LN:202 UR:merger.fasta M5:d339678efce576d5546e88b49a487b63
- at RG ID:0 SM:Hi,Mom!
- at PG ID:0 PN:myAligner VN:1.0 CL:align!
-pair_read 73 chr7 3 9 6M = 3 0 CAACAG )'.*.+ MC:Z:* PG:Z:0 RG:Z:0 NM:i:4 UQ:i:33
-pair_read 133 chr7 3 0 * = 3 0 NCGCGG &/1544 MC:Z:6M PG:Z:0 RG:Z:0
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_mate_cigar_string.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_mate_cigar_string.sam
deleted file mode 100644
index b542d77..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_mate_cigar_string.sam
+++ /dev/null
@@ -1,19 +0,0 @@
- at HD VN:1.4 SO:coordinate
- at SQ SN:chr1 LN:101 UR:merger.fasta M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ SN:chr2 LN:101 UR:merger.fasta M5:31c33e2155b3de5e2554b693c475b310
- at SQ SN:chr3 LN:101 UR:merger.fasta M5:631593c6dd2048ae88dcce2bd505d295
- at SQ SN:chr4 LN:101 UR:merger.fasta M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ SN:chr5 LN:101 UR:merger.fasta M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ SN:chr6 LN:101 UR:merger.fasta M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ SN:chr7 LN:404 UR:merger.fasta M5:da488fc432cdaf2c20c96da473a7b630
- at SQ SN:chr8 LN:202 UR:merger.fasta M5:d339678efce576d5546e88b49a487b63
- at RG ID:0 SM:Hi,Mom!
- at PG ID:0 PN:myAligner VN:1.0 CL:align!
-pair_both_hit 65 chr7 1 100 101M = 120 120 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& MC:Z:99M PG:Z:0 RG:Z:0 NM:i:21 MQ:i:100 UQ:i:144
-pair_both_multihit 321 chr7 1 100 101M = 120 120 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& MC:Z:101M PG:Z:0 RG:Z:0 HI:i:0 NM:i:21 MQ:i:100 UQ:i:144
-pair_both_multihit 321 chr7 10 100 101M = 130 121 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& MC:Z:101M PG:Z:0 RG:Z:0 HI:i:1 NM:i:83 MQ:i:100 UQ:i:865
-pair_both_hit 129 chr7 120 100 101M = 1 -120 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 MC:Z:101M PG:Z:0 RG:Z:0 NM:i:73 MQ:i:100 UQ:i:944
-pair_both_multihit 385 chr7 120 100 101M = 1 -120 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 MC:Z:101M PG:Z:0 RG:Z:0 HI:i:0 NM:i:73 MQ:i:100 UQ:i:944
-pair_both_multihit 385 chr7 130 100 101M = 10 -121 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 MC:Z:101M PG:Z:0 RG:Z:0 HI:i:1 NM:i:84 MQ:i:100 UQ:i:1072
-pair_both_multihit 65 chr8 1 100 101M = 101 101 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& MC:Z:101M PG:Z:0 RG:Z:0 HI:i:2 NM:i:86 MQ:i:100 UQ:i:940
-pair_both_multihit 129 chr8 101 100 101M = 1 -101 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 MC:Z:101M PG:Z:0 RG:Z:0 HI:i:2 NM:i:81 MQ:i:100 UQ:i:1042
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_queryname_sort_order.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_queryname_sort_order.sam
deleted file mode 100644
index 553ec81..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_queryname_sort_order.sam
+++ /dev/null
@@ -1,27 +0,0 @@
- at HD VN:1.0 SO:queryname
- at SQ SN:chr1 LN:101
- at SQ SN:chr2 LN:101
- at SQ SN:chr3 LN:101
- at SQ SN:chr4 LN:101
- at SQ SN:chr5 LN:101
- at SQ SN:chr6 LN:101
- at SQ SN:chr7 LN:202
- at SQ SN:chr8 LN:202
-SL-XAV:1:1:0:764#0/1 89 chr1 1 255 101M * 0 0 TTCATGCTGANGCNCTCTTACGATCGTACAGATGCAAATATTAACANNCNTTNAAGNNCANNNNNNNNNCAATACAATANTAGAGTACGTNAACACTCCAN &/,&-.1/6/&&)&).)/,&0768)&/.,/874,&.4137572)&/&&,&1-&.0/&&*,&&&&&&&&&&18775799,&16:8775-56256/69::;0& RG:Z:0 XN:i:1
-SL-XAV:1:1:0:1668#0/2 153 chr2 1 255 101M * 0 0 CATCTCTACANGCGCGTCCTACCAGACGCGCTTCCGATCTGAGAGCATACTTTTCATTGGATTCCAGCACAACTCCATTTTTGATCCACTNGACACCTTTN (/,'-/'0////(1'&&1&&&&'2''-6/,/3-33653.6:1'.86/-++32.-4864653/5/583/346423203+28888644446688456/4880& RG:Z:0 XN:i:1
-SL-XAV:1:1:0:1914#0/2 153 chr3 1 255 101M * 0 0 CGTATGCGCTNTTTATGTCGCCCACAGTGCCTAGTATAGCCCCTGCTAATAAAAAGAGATGAATACGTTTACTTAAAAAACTGAAACTAGNAATGTGCAAN (0,7&&*/*0*,)10/).-*&.&*/6669.&-337599;3,&,6/.,5::999987893+387020775777547999::668997448:::9;999::0& RG:Z:0
-SL-XAV:1:1:0:1639#0/2 153 chr4 1 255 101M * 0 0 CGTGATACCANCTCATGTTCACAGCCAAAGCCTGAAGCTGTCTATTATATTTCTCAACCATAAACTTTTGCCTCAGGCATCCGCAGAATGNTTTGCAGCCN '.&.&&'.0+01'2(1'(''-)','+0041/.+032;:867115/5267-.0/)-5.&-26200224,,0+0/0275/5605688::646875568882*& RG:Z:0
-SL-XAV:1:1:0:68#0/2 137 chr5 1 255 101M * 0 0 NTCTCATTTANAAATGGTTATAAAAACATTTATGCTGAAAAGGTGAAGTTCATTAATGAACAGGCTGACTGTCTCACTATCGCGTTCGCANGACGTTATCT &1<<999;;;;<<<87579:556972789977444.'.023.&,7621/54.49.)/53055-22--''+(.'-))6-168/(3&&0(<).))*&&&&&'0 RG:Z:0
-SL-XAV:1:1:0:700#0/2 137 chr6 1 255 101M * 0 0 NAATTGTTCTNAGTTTCTCGGTTTATGTGCTCTTCCAGGTGGGTAACACAATAATGGCCTTCCAGATCGTAAGAGCGACGTGTGTTGCACNAGTGTCGATC &0::887::::6/646::838388811/679:87640&./2+/-4/28:3,536/4''&&.78/(/554/./02*)*',-(57()&.6(6:(0601'/(,* RG:Z:0
-SL-XAV:1:1:0:1721#0/1 83 chr7 1 255 101M = 102 40 CAACAGAAGGNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCGAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:0
-SL-XAV:1:1:0:1721#0/2 163 chr7 102 255 101M = 1 -40 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTCACTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:0
-SL-XAV:1:1:0:105#0/2 147 chr8 1 255 101M = 102 79 CACATCGTGANTCTTACAATCTGCGGTTTCAGATGTGGAGCGATGTGTGAGAGATTGAGCAACTGATCTGAAAAGCAGACACAGCTATTCNTAAGATGACN /))3--/&*()&)&&+'++.'-&,(.))'4,)&'&&,')8,&&*'.&*0'225/&)3-8//)*,5-*).7851453583.3568526:863688:::85.& RG:Z:0
-SL-XAV:1:1:0:105#0/1 99 chr8 102 255 101M = 1 -79 NCAGGTTCAANTGTGCAGCCCNTTTTGAGAGATNNNNNNNNTGNNCTGNAANANNGACACAGCTATTCCTAAGATGACAAGATCAGANAANAAGTCAAGCA &06665578::41.*/7577/&/77403-324.&&&&&&&&/.&&..&&.0&&&&',:9:/-/(55002020+3'12+2/&.2-&//&),&*&&&&&&&51 RG:Z:0
-SL-XAV:1:1:0:1300#0/1 77 * 0 0 * * 0 0 NAAACACAAGNNANAGTCTTANCNGCTATTCCNNNNNNNNNCTNNNCTNAGNANNACATACAACAGTATCCACACAAGTGTACTCGTNCANACATGTGAAC &*5535)*-,,&.&.*-1)*,&'&)&1&&.,)&&&&&&&&&)0&&&0'&&&&.&&*2'/4''0/**&)&,'-&*,&,&&&.0.&)&&&**&,.&&&')&&) RG:Z:0
-SL-XAV:1:1:0:1300#0/2 141 * 0 0 * * 0 0 NGATCATGGANGACTCTCCCCATCCCCCGCTCCAGCGCTCAGTTATATGCCTAGCCTCGGACACGTCACCAACATCTCACGCACTCTGCANAGTCTCTCAC &&'+''3*&-/)/1'26/*-2-/542-*&-&/'/*/&-'&)-')&.'-/&&2+122*'&+,(/-&)((,/-,,.'2(2'+)/&/&-66-&&/16&)&*&'3 RG:Z:0
-SL-XAV:1:1:0:1639#0/1 101 * 0 0 * chr1 1 0 NCCCTCTCAGNNTNTCTGCCANANCCTTAAGCNNNNNNNNNTANNNCTNAANCNNAAACTTTTGCCTCAGGCATCCGCAGAATGTTTNTCNGCCTATATCG &1::::::64/&/&0:3.280&/&087881,/&&&&&&&&&..&&&..&,,&-&&,265341-)/5680&-.5552-25/322/42/&)&&).421&-&-/ RG:Z:0
-SL-XAV:1:1:0:1668#0/1 101 * 0 0 * chr2 1 0 NATAGCATACNNTNCATTGGANTNCAGCACAANNNNNNNNNTGNNNCANTNNANNCCTTTGAGATCGGAAGAGCGGTTCAGCAGGAANNCNCAGACCGATC &1988998890&0&.8863//&.&.0-2875.&&&&&&&&&.)&&&..&.&&.&&.5782-2+262)&-0-0510*.332-2.-,0*&&*&'.&-2-)0., RG:Z:0
-SL-XAV:1:1:0:1914#0/1 101 * 0 0 * chr3 1 0 NTTTTTCTCCNNCNGTGCCTANTNTAGCCCCTNNNNNNNNNAANNNATNANNANNTTTACTTAAAAAACTGAAACTAGTAATGTGCANNANATCGNAAGAG &0::::<<;90&/&.244760&,&.414798/&&&&&&&&&00&&&0.&/&&-&&.4475687363504.&.557/.*)65.&/*./&&.&.+*)&..).& RG:Z:0
-SL-XAV:1:1:0:68#0/1 581 * 0 0 * chr4 1 0 NAATATTCATNNGNTCAGCCTNTNCATTAATTNNNNNNNNNTTNNNATNATNANNTTTTTTATAACCATTTATAAATGAGAGAGATCNTANCACAATATCA &0<<:::::</&&&.73'290&.&0;:::90&&&&&&&&&&..&&&0)&0-&0&&&.743799995253348597921.,.'050.*&.0&)*)&&&&*). RG:Z:0
-SL-XAV:1:1:0:700#0/1 581 * 0 0 * chr5 1 0 NGAAGCCCATNNTNGTGTTACNCNCCTGGAAGNNNNNNNNNACNNNGANACNTNNAACAATTCAGATCGGAAGAGCGGTTCAGCAGANNTNCCGAGACCGA &.88888:88/&0&,03189.&/&.8/))12/&&&&&&&&&./&&&&.&1.&)&&/35962/6432-3&),0&/2+0,),61&-6,&&&'&/,.0&...)0 RG:Z:0
-SL-XAV:1:1:0:764#0/2 165 * 0 0 * chr6 1 0 NACAGATGCANATATTAACAGGCTTTAAAGGACAGATGGACTGCAATACAATAATAGAGTACGTCAACACTCCACAGATCGCTAGAGCATNACATCGGTGT &/:5358::9999::99998255::7275,,/5567-'+387537857:54-4.51'31059547320;73/720+22.4(6.;((.;(;8()(''&&2&& RG:Z:0
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/missing_fields.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/missing_fields.sam
deleted file mode 100644
index a9c0bbf..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/missing_fields.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD VN:1.0 SO:queryname
- at RG ID:0 PL:illumina PU:300TDAAXX090429.8 LB:Solexa-3536 DT:Wed Apr 29 00:00:00 EDT 2009 SM:CLONED Phi-X Control CN:broad
-300TDAAXX090429:8:100:0:1001#0 589 * 0 0 * * 0
\ No newline at end of file
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/missing_platform_unit.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/missing_platform_unit.sam
deleted file mode 100644
index 5f644d2..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/missing_platform_unit.sam
+++ /dev/null
@@ -1,10 +0,0 @@
- at HD VN:1.4 SO:coordinate
- at SQ SN:chr1 LN:101 UR:merger.fasta M5:bd01f7e11515bb6beda8f7257902aa67
- at SQ SN:chr2 LN:101 UR:merger.fasta M5:31c33e2155b3de5e2554b693c475b310
- at SQ SN:chr3 LN:101 UR:merger.fasta M5:631593c6dd2048ae88dcce2bd505d295
- at SQ SN:chr4 LN:101 UR:merger.fasta M5:c60cb92f1ee5b78053c92bdbfa19abf1
- at SQ SN:chr5 LN:101 UR:merger.fasta M5:07ebc213c7611db0eacbb1590c3e9bda
- at SQ SN:chr6 LN:101 UR:merger.fasta M5:7be2f5e7ee39e60a6c3b5b6a41178c6d
- at SQ SN:chr7 LN:404 UR:merger.fasta M5:da488fc432cdaf2c20c96da473a7b630
- at SQ SN:chr8 LN:202 UR:merger.fasta M5:d339678efce576d5546e88b49a487b63
- at RG ID:H7U2W.1 PU:H7U2WADXX140408.1.AAGTAGAG LB:Solexa-219641 PI:0 DT:2014-04-08T00:00:00-0400 SM:K-562 CN:BI
\ No newline at end of file
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated.bam b/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated.bam
deleted file mode 100644
index bcef65a..0000000
Binary files a/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated.bam and /dev/null differ
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated_quals.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated_quals.sam
deleted file mode 100644
index 34bd776..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated_quals.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.0 SO:queryname
- at RG ID:0 PL:illumina PU:300TDAAXX090429.8 LB:Solexa-3536 DT:Wed Apr 29 00:00:00 EDT 2009 SM:CLONED Phi-X Control CN:broad
-300TDAAXX090429:8:100:0:1001#0 589 * 0 0 * * 0 0 NNNNNNNNNNNNNNNNNNNNNNNNN ######################### XN:i:1 RG:Z:0 SQ:H:07CCCBC186CA85D087CFC5D1D4CACCD6D3D1D0CDD30CD0D2D5
-300TDAAXX090429:8:100:0:1001#0 653 * 0 0 * * 0 0 NNNNNNNNNNNNNNNNNNNNNNNNN ######################
\ No newline at end of file
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated_tag.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated_tag.sam
deleted file mode 100644
index ef4def1..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/truncated_tag.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.0 SO:queryname
- at RG ID:0 PL:illumina PU:300TDAAXX090429.8 LB:Solexa-3536 DT:Wed Apr 29 00:00:00 EDT 2009 SM:CLONED Phi-X Control CN:broad
-300TDAAXX090429:8:100:0:1001#0 589 * 0 0 * * 0 0 NNNNNNNNNNNNNNNNNNNNNNNNN ######################### XN:i:1 RG:Z:0 SQ:H:07CCCBC186CA85D087CFC5D1D4CACCD6D3D1D0CDD30CD0D2D5
-300TDAAXX090429:8:100:0:1001#0 653 * 0 0 * * 0 0 NNNNNNNNNNNNNNNNNNNNNNNNN ######################### XN:i:
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/valid.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/valid.sam
deleted file mode 100644
index 3ac3ca8..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/valid.sam
+++ /dev/null
@@ -1,21 +0,0 @@
- at HD VN:1.0 SO:coordinate
- at SQ SN:chr1 LN:101
- at SQ SN:chr2 LN:101
- at SQ SN:chr3 LN:101
- at SQ SN:chr4 LN:101
- at SQ SN:chr5 LN:101
- at SQ SN:chr6 LN:101
- at SQ SN:chr7 LN:404
- at SQ SN:chr8 LN:202
- at RG ID:0 SM:Hi,Mom! LB:my-library PL:ILLUMINA
- at RG ID:1 SM:Hi,Mom! LB:my-library PL:ILLUMINA
- at RG ID:2 SM:Hi,Mom! LB:my-library PL:ILLUMINA
- at PG ID:1 PN:Hey! VN:2.0
-both_reads_align_clip_marked 1107 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:0 PG:Z:1 NM:i:0 MQ:i:255 XT:Z:foo OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_present_only_first_aligns 89 chr7 1 255 101M * 0 0 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:1 PG:Z:1 NM:i:3 MQ:i:255 XT:Z:foo OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-read_2_too_many_gaps 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:2 PG:Z:1 NM:i:8 MQ:i:255 XT:Z:foo2 OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_adapter 147 chr7 16 255 101M = 21 -96 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:1 PG:Z:1 NM:i:1 MQ:i:255 XT:Z:foo2 OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_adapter 99 chr7 21 255 101M = 16 96 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:1 PG:Z:1 NM:i:1 MQ:i:255 XT:Z:foo2 OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_align_clip_marked 163 chr7 302 255 101M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:0 PG:Z:1 NM:i:5 MQ:i:255 OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-read_2_too_many_gaps 163 chr7 302 255 10M1D10M5I76M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:2 PG:Z:1 NM:i:6 MQ:i:255 OQ:Z:11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-both_reads_present_only_first_aligns 165 * 0 0 * chr7 1 0 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:1 PG:Z:1
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/zero_length_read.sam b/testdata/net/sf/picard/sam/ValidateSamFileTest/zero_length_read.sam
deleted file mode 100644
index 50d2fe4..0000000
--- a/testdata/net/sf/picard/sam/ValidateSamFileTest/zero_length_read.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD VN:1.0 SO:queryname
- at RG ID:0 PL:illumina PU:300TDAAXX090429.8 LB:Solexa-3536 DT:Wed Apr 29 00:00:00 EDT 2009 SM:CLONED Phi-X Control CN:broad
-300TDAAXX090429:8:100:0:1001#0 589 * 0 0 * * 0 0
\ No newline at end of file
diff --git a/testdata/net/sf/picard/sam/bam2fastq/nonpaired/.gitignore b/testdata/net/sf/picard/sam/bam2fastq/nonpaired/.gitignore
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/0lines.txt b/testdata/net/sf/picard/sam/fastq2bam/bad-format/0lines.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/net/sf/picard/sam/mate_cigar_and_no_oqs.sam b/testdata/net/sf/picard/sam/mate_cigar_and_no_oqs.sam
deleted file mode 100755
index efe2be2..0000000
--- a/testdata/net/sf/picard/sam/mate_cigar_and_no_oqs.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.0 SO:queryname
- at SQ SN:REF LN:1000
-A 99 REF 100 50 10M = 200 100 CAACAGAAGC )'.*.+2,)) MC:Z:5M1I4M
-A 147 REF 200 50 5M1I4M = 100 -100 CAACAGAAGC )'.*.+2,)) MC:Z:10M
diff --git a/testdata/net/sf/picard/sam/mate_cigar_and_oqs.sam b/testdata/net/sf/picard/sam/mate_cigar_and_oqs.sam
deleted file mode 100755
index 3782ad7..0000000
--- a/testdata/net/sf/picard/sam/mate_cigar_and_oqs.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.0 SO:queryname
- at SQ SN:REF LN:1000
-A 99 REF 100 50 10M = 200 100 CAACAGAAGC )'.*.+2,)) MC:Z:5M1I4M OQ:Z:IIIIIIIIII
-A 147 REF 200 50 5M1I4M = 100 -100 CAACAGAAGC )'.*.+2,)) MC:Z:10M OQ:Z:IIIIIIIIII
diff --git a/testdata/net/sf/picard/sam/no_mate_cigar_and_no_oqs.sam b/testdata/net/sf/picard/sam/no_mate_cigar_and_no_oqs.sam
deleted file mode 100755
index 39211cc..0000000
--- a/testdata/net/sf/picard/sam/no_mate_cigar_and_no_oqs.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.0 SO:queryname
- at SQ SN:REF LN:1000
-A 99 REF 100 50 10M = 200 100 CAACAGAAGC )'.*.+2,))
-A 147 REF 200 50 5M1I4M = 100 -100 CAACAGAAGC )'.*.+2,))
diff --git a/testdata/net/sf/picard/sam/no_mate_cigar_and_oqs.sam b/testdata/net/sf/picard/sam/no_mate_cigar_and_oqs.sam
deleted file mode 100755
index 55d5533..0000000
--- a/testdata/net/sf/picard/sam/no_mate_cigar_and_oqs.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.0 SO:queryname
- at SQ SN:REF LN:1000
-A 99 REF 100 50 10M = 200 100 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
-A 147 REF 200 50 5M1I4M = 100 -100 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
diff --git a/testdata/net/sf/picard/sam/no_mates_and_no_oqs.sam b/testdata/net/sf/picard/sam/no_mates_and_no_oqs.sam
deleted file mode 100755
index 9de670f..0000000
--- a/testdata/net/sf/picard/sam/no_mates_and_no_oqs.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.0 SO:queryname
-A 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-B 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-C 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-D 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-E 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
diff --git a/testdata/net/sf/picard/sam/no_mates_and_no_oqs_in_first_four_records.sam b/testdata/net/sf/picard/sam/no_mates_and_no_oqs_in_first_four_records.sam
deleted file mode 100755
index c1eb683..0000000
--- a/testdata/net/sf/picard/sam/no_mates_and_no_oqs_in_first_four_records.sam
+++ /dev/null
@@ -1,7 +0,0 @@
- at HD VN:1.0 SO:queryname
-A 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-B 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-C 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-D 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,))
-E 79 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
-E 143 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
diff --git a/testdata/net/sf/picard/sam/no_mates_and_oqs.sam b/testdata/net/sf/picard/sam/no_mates_and_oqs.sam
deleted file mode 100755
index 345c3c2..0000000
--- a/testdata/net/sf/picard/sam/no_mates_and_oqs.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.0 SO:queryname
-A 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
-B 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
-C 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
-D 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
-E 4 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) OQ:Z:IIIIIIIIII
diff --git a/testdata/net/sf/picard/sam/readWithBadRname.sam b/testdata/net/sf/picard/sam/readWithBadRname.sam
deleted file mode 100644
index 71bafb9..0000000
--- a/testdata/net/sf/picard/sam/readWithBadRname.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.0 SO:coordinate
- at SQ SN:chr21 afterspace AS:HG18 LN:62435964
- at RG ID:L1 PU:SC_1_10 LB:SC_1 SM:NA12891 PL:ILLUMINA
- at RG ID:L2 PU:SC_2_12 LB:SC_2 SM:NA12891 PL:ILLUMINA
-read_28833_29006_6945 99 = 28833 20 10M1D25M = 28993 195 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< MF:i:130 Nm:i:1 H0:i:0 H1:i:0 RG:Z:L1
-read_28701_28881_323b 147 chr21 afterspace 28834 30 35M = 28701 -168 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 Nm:i:0 H0:i:1 H1:i:0 RG:Z:L2
diff --git a/testdata/net/sf/picard/sam/samHeaderProvider.sam b/testdata/net/sf/picard/sam/samHeaderProvider.sam
deleted file mode 100755
index 45b55e4..0000000
--- a/testdata/net/sf/picard/sam/samHeaderProvider.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD VN:1.4 SO:queryname
- at SQ SN:chr1 LN:101
- at SQ SN:chr2 LN:101
- at SQ SN:chr3 LN:101
- at SQ SN:chr4 LN:101
- at SQ SN:chr5 LN:101
- at SQ SN:chr6 LN:101
- at SQ SN:chr7 LN:404
- at SQ SN:chr8 LN:202
- at RG ID:0 SM:derpderp
- at PG ID:1 PN:blahblah VN:2.0
-both_reads_align_clip_marked 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:0
-both_reads_align_clip_marked 163 chr7 302 255 101M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:0
-read_2_too_many_gaps 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:0
-read_2_too_many_gaps 163 chr7 302 255 10M1D10M5I76M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:0
diff --git a/testdata/net/sf/picard/sam/sequenceWithSpace.bam b/testdata/net/sf/picard/sam/sequenceWithSpace.bam
deleted file mode 100755
index 74da758..0000000
Binary files a/testdata/net/sf/picard/sam/sequenceWithSpace.bam and /dev/null differ
diff --git a/testdata/net/sf/picard/sam/sequenceWithSpace.sam b/testdata/net/sf/picard/sam/sequenceWithSpace.sam
deleted file mode 100755
index 766bc67..0000000
--- a/testdata/net/sf/picard/sam/sequenceWithSpace.sam
+++ /dev/null
@@ -1,6 +0,0 @@
- at HD VN:1.0 SO:coordinate
- at SQ SN:chr21 afterspace AS:HG18 LN:62435964
- at RG ID:L1 PU:SC_1_10 LB:SC_1 SM:NA12891 PL:ILLUMINA
- at RG ID:L2 PU:SC_2_12 LB:SC_2 SM:NA12891 PL:ILLUMINA
-read_28833_29006_6945 99 chr21 afterspace 28833 20 10M1D25M = 28993 195 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< MF:i:130 Nm:i:1 H0:i:0 H1:i:0 RG:Z:L1
-read_28701_28881_323b 147 chr21 afterspace 28834 30 35M = 28701 -168 ACCTATATCTTGGCCTTGGCCGATGCGGCCTTGCA <<<<<;<<<<7;:<<<6;<<<<<<<<<<<<7<<<< MF:i:18 Nm:i:0 H0:i:1 H1:i:0 RG:Z:L2
diff --git a/testdata/net/sf/picard/util/QualityEncodingDetectorTest/illumina-as-standard.bam b/testdata/net/sf/picard/util/QualityEncodingDetectorTest/illumina-as-standard.bam
deleted file mode 100644
index a98d864..0000000
Binary files a/testdata/net/sf/picard/util/QualityEncodingDetectorTest/illumina-as-standard.bam and /dev/null differ
diff --git a/testdata/net/sf/picard/util/QualityEncodingDetectorTest/solexa-as-standard.bam b/testdata/net/sf/picard/util/QualityEncodingDetectorTest/solexa-as-standard.bam
deleted file mode 100644
index 7235dfa..0000000
Binary files a/testdata/net/sf/picard/util/QualityEncodingDetectorTest/solexa-as-standard.bam and /dev/null differ
diff --git a/testdata/net/sf/picard/util/scatterable.interval_list b/testdata/net/sf/picard/util/scatterable.interval_list
deleted file mode 100755
index b9c9e78..0000000
--- a/testdata/net/sf/picard/util/scatterable.interval_list
+++ /dev/null
@@ -1,89 +0,0 @@
- at HD VN:1.0 SO:coordinate
- at SQ SN:1 LN:249250621 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1b22b98cdeb4a9304cb5d48026a85128 SP:Homo Sapiens
- at SQ SN:2 LN:243199373 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:a0d9851da00400dec1098a9255ac712e SP:Homo Sapiens
- at SQ SN:3 LN:198022430 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fdfd811849cc2fadebc929bb925902e5 SP:Homo Sapiens
- at SQ SN:4 LN:191154276 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:23dccd106897542ad87d2765d28a19a1 SP:Homo Sapiens
- at SQ SN:5 LN:180915260 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:0740173db9ffd264d728f32784845cd7 SP:Homo Sapiens
- at SQ SN:6 LN:171115067 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1d3a93a248d92a729ee764823acbbc6b SP:Homo Sapiens
- at SQ SN:7 LN:159138663 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:618366e953d6aaad97dbe4777c29375e SP:Homo Sapiens
- at SQ SN:8 LN:146364022 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:96f514a9929e410c6651697bded59aec SP:Homo Sapiens
- at SQ SN:9 LN:141213431 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:3e273117f15e0a400f01055d9f393768 SP:Homo Sapiens
- at SQ SN:10 LN:135534747 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:988c28e000e84c26d552359af1ea2e1d SP:Homo Sapiens
- at SQ SN:11 LN:135006516 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:98c59049a2df285c76ffb1c6db8f8b96 SP:Homo Sapiens
- at SQ SN:12 LN:133851895 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:51851ac0e1a115847ad36449b0015864 SP:Homo Sapiens
- at SQ SN:13 LN:115169878 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:283f8d7892baa81b510a015719ca7b0b SP:Homo Sapiens
- at SQ SN:14 LN:107349540 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:98f3cae32b2a2e9524bc19813927542e SP:Homo Sapiens
- at SQ SN:15 LN:102531392 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:e5645a794a8238215b2cd77acb95a078 SP:Homo Sapiens
- at SQ SN:16 LN:90354753 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fc9b1a7b42b97a864f56b348b06095e6 SP:Homo Sapiens
- at SQ SN:17 LN:81195210 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:351f64d4f4f9ddd45b35336ad97aa6de SP:Homo Sapiens
- at SQ SN:18 LN:78077248 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:b15d4b2d29dde9d3e4f93d1d0f2cbc9c SP:Homo Sapiens
- at SQ SN:19 LN:59128983 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1aacd71f30db8e561810913e0b72636d SP:Homo Sapiens
- at SQ SN:20 LN:63025520 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:0dec9660ec1efaaf33281c0d5ea2560f SP:Homo Sapiens
- at SQ SN:21 LN:48129895 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:2979a6085bfe28e3ad6f552f361ed74d SP:Homo Sapiens
- at SQ SN:22 LN:51304566 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:a718acaa6135fdca8357d5bfe94211dd SP:Homo Sapiens
- at SQ SN:X LN:155270560 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7e0e2e580297b7764e31dbc80c2540dd SP:Homo Sapiens
- at SQ SN:Y LN:59373566 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1fa3474750af0948bdf97d5a0ee52e51 SP:Homo Sapiens
- at SQ SN:MT LN:16569 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:c68f52674c9fb33aef52dcf399755519 SP:Homo Sapiens
- at SQ SN:GL000207.1 LN:4262 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:f3814841f1939d3ca19072d9e89f3fd7 SP:Homo Sapiens
- at SQ SN:GL000226.1 LN:15008 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1c1b2cd1fccbc0a99b6a447fa24d1504 SP:Homo Sapiens
- at SQ SN:GL000229.1 LN:19913 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d0f40ec87de311d8e715b52e4c7062e1 SP:Homo Sapiens
- at SQ SN:GL000231.1 LN:27386 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:ba8882ce3a1efa2080e5d29b956568a4 SP:Homo Sapiens
- at SQ SN:GL000210.1 LN:27682 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:851106a74238044126131ce2a8e5847c SP:Homo Sapiens
- at SQ SN:GL000239.1 LN:33824 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:99795f15702caec4fa1c4e15f8a29c07 SP:Homo Sapiens
- at SQ SN:GL000235.1 LN:34474 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:118a25ca210cfbcdfb6c2ebb249f9680 SP:Homo Sapiens
- at SQ SN:GL000201.1 LN:36148 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:dfb7e7ec60ffdcb85cb359ea28454ee9 SP:Homo Sapiens
- at SQ SN:GL000247.1 LN:36422 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7de00226bb7df1c57276ca6baabafd15 SP:Homo Sapiens
- at SQ SN:GL000245.1 LN:36651 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:89bc61960f37d94abf0df2d481ada0ec SP:Homo Sapiens
- at SQ SN:GL000197.1 LN:37175 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6f5efdd36643a9b8c8ccad6f2f1edc7b SP:Homo Sapiens
- at SQ SN:GL000203.1 LN:37498 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:96358c325fe0e70bee73436e8bb14dbd SP:Homo Sapiens
- at SQ SN:GL000246.1 LN:38154 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:e4afcd31912af9d9c2546acf1cb23af2 SP:Homo Sapiens
- at SQ SN:GL000249.1 LN:38502 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1d78abec37c15fe29a275eb08d5af236 SP:Homo Sapiens
- at SQ SN:GL000196.1 LN:38914 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d92206d1bb4c3b4019c43c0875c06dc0 SP:Homo Sapiens
- at SQ SN:GL000248.1 LN:39786 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:5a8e43bec9be36c7b49c84d585107776 SP:Homo Sapiens
- at SQ SN:GL000244.1 LN:39929 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:0996b4475f353ca98bacb756ac479140 SP:Homo Sapiens
- at SQ SN:GL000238.1 LN:39939 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:131b1efc3270cc838686b54e7c34b17b SP:Homo Sapiens
- at SQ SN:GL000202.1 LN:40103 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:06cbf126247d89664a4faebad130fe9c SP:Homo Sapiens
- at SQ SN:GL000234.1 LN:40531 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:93f998536b61a56fd0ff47322a911d4b SP:Homo Sapiens
- at SQ SN:GL000232.1 LN:40652 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:3e06b6741061ad93a8587531307057d8 SP:Homo Sapiens
- at SQ SN:GL000206.1 LN:41001 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:43f69e423533e948bfae5ce1d45bd3f1 SP:Homo Sapiens
- at SQ SN:GL000240.1 LN:41933 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:445a86173da9f237d7bcf41c6cb8cc62 SP:Homo Sapiens
- at SQ SN:GL000236.1 LN:41934 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fdcd739913efa1fdc64b6c0cd7016779 SP:Homo Sapiens
- at SQ SN:GL000241.1 LN:42152 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:ef4258cdc5a45c206cea8fc3e1d858cf SP:Homo Sapiens
- at SQ SN:GL000243.1 LN:43341 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:cc34279a7e353136741c9fce79bc4396 SP:Homo Sapiens
- at SQ SN:GL000242.1 LN:43523 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:2f8694fc47576bc81b5fe9e7de0ba49e SP:Homo Sapiens
- at SQ SN:GL000230.1 LN:43691 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:b4eb71ee878d3706246b7c1dbef69299 SP:Homo Sapiens
- at SQ SN:GL000237.1 LN:45867 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:e0c82e7751df73f4f6d0ed30cdc853c0 SP:Homo Sapiens
- at SQ SN:GL000233.1 LN:45941 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7fed60298a8d62ff808b74b6ce820001 SP:Homo Sapiens
- at SQ SN:GL000204.1 LN:81310 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:efc49c871536fa8d79cb0a06fa739722 SP:Homo Sapiens
- at SQ SN:GL000198.1 LN:90085 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:868e7784040da90d900d2d1b667a1383 SP:Homo Sapiens
- at SQ SN:GL000208.1 LN:92689 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:aa81be49bf3fe63a79bdc6a6f279abf6 SP:Homo Sapiens
- at SQ SN:GL000191.1 LN:106433 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d75b436f50a8214ee9c2a51d30b2c2cc SP:Homo Sapiens
- at SQ SN:GL000227.1 LN:128374 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:a4aead23f8053f2655e468bcc6ecdceb SP:Homo Sapiens
- at SQ SN:GL000228.1 LN:129120 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:c5a17c97e2c1a0b6a9cc5a6b064b714f SP:Homo Sapiens
- at SQ SN:GL000214.1 LN:137718 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:46c2032c37f2ed899eb41c0473319a69 SP:Homo Sapiens
- at SQ SN:GL000221.1 LN:155397 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:3238fb74ea87ae857f9c7508d315babb SP:Homo Sapiens
- at SQ SN:GL000209.1 LN:159169 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:f40598e2a5a6b26e84a3775e0d1e2c81 SP:Homo Sapiens
- at SQ SN:GL000218.1 LN:161147 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1d708b54644c26c7e01c2dad5426d38c SP:Homo Sapiens
- at SQ SN:GL000220.1 LN:161802 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fc35de963c57bf7648429e6454f1c9db SP:Homo Sapiens
- at SQ SN:GL000213.1 LN:164239 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:9d424fdcc98866650b58f004080a992a SP:Homo Sapiens
- at SQ SN:GL000211.1 LN:166566 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7daaa45c66b288847b9b32b964e623d3 SP:Homo Sapiens
- at SQ SN:GL000199.1 LN:169874 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:569af3b73522fab4b40995ae4944e78e SP:Homo Sapiens
- at SQ SN:GL000217.1 LN:172149 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6d243e18dea1945fb7f2517615b8f52e SP:Homo Sapiens
- at SQ SN:GL000216.1 LN:172294 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:642a232d91c486ac339263820aef7fe0 SP:Homo Sapiens
- at SQ SN:GL000215.1 LN:172545 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:5eb3b418480ae67a997957c909375a73 SP:Homo Sapiens
- at SQ SN:GL000205.1 LN:174588 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d22441398d99caf673e9afb9a1908ec5 SP:Homo Sapiens
- at SQ SN:GL000219.1 LN:179198 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:f977edd13bac459cb2ed4a5457dba1b3 SP:Homo Sapiens
- at SQ SN:GL000224.1 LN:179693 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d5b2fc04f6b41b212a4198a07f450e20 SP:Homo Sapiens
- at SQ SN:GL000223.1 LN:180455 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:399dfa03bf32022ab52a846f7ca35b30 SP:Homo Sapiens
- at SQ SN:GL000195.1 LN:182896 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:5d9ec007868d517e73543b005ba48535 SP:Homo Sapiens
- at SQ SN:GL000212.1 LN:186858 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:563531689f3dbd691331fd6c5730a88b SP:Homo Sapiens
- at SQ SN:GL000222.1 LN:186861 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6fe9abac455169f50470f5a6b01d0f59 SP:Homo Sapiens
- at SQ SN:GL000200.1 LN:187035 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:75e4c8d17cd4addf3917d1703cacaf25 SP:Homo Sapiens
- at SQ SN:GL000193.1 LN:189789 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:dbb6e8ece0b5de29da56601613007c2a SP:Homo Sapiens
- at SQ SN:GL000194.1 LN:191469 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6ac8f815bf8e845bb3031b73f812c012 SP:Homo Sapiens
- at SQ SN:GL000225.1 LN:211173 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:63945c3e6962f28ffd469719a747e73c SP:Homo Sapiens
- at SQ SN:GL000192.1 LN:547496 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:325ba9e808f669dfeee210fdd7b470ac SP:Homo Sapiens
- at SQ SN:NC_007605 LN:171823 AS:NC_007605.1 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6743bd63b3ff2b5b8985d8933c53290a SP:Epstein-Barr virus
-1 30000 30098 + target_1
-1 30100 30150 + target_2
-1 30200 30249 + target_3
diff --git a/testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam b/testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam
deleted file mode 100644
index 8aa4751..0000000
Binary files a/testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam and /dev/null differ
diff --git a/testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam.bai b/testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam.bai
deleted file mode 100644
index 49b423e..0000000
Binary files a/testdata/net/sf/samtools/BAMFileIndexTest/index_test.bam.bai and /dev/null differ
diff --git a/testdata/net/sf/samtools/SAMIntegerTagTest/variousAttributes.bam b/testdata/net/sf/samtools/SAMIntegerTagTest/variousAttributes.bam
deleted file mode 100755
index ab0e1a2..0000000
Binary files a/testdata/net/sf/samtools/SAMIntegerTagTest/variousAttributes.bam and /dev/null differ
diff --git a/testdata/net/sf/samtools/SAMIntegerTagTest/variousAttributes.sam b/testdata/net/sf/samtools/SAMIntegerTagTest/variousAttributes.sam
deleted file mode 100644
index a1349e9..0000000
--- a/testdata/net/sf/samtools/SAMIntegerTagTest/variousAttributes.sam
+++ /dev/null
@@ -1,4 +0,0 @@
- at HD VN:1.0
- at SQ SN:chr20 AS:HG18 LN:62435964
-read_28833_29006_6945 99 chr20 28833 20 10M1D25M = 28993 195 AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG <<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<< MF:i:130 Nm:i:1 H0:i:0 H1:i:0 SB:i:-128 UB:i:129 SS:i:32767 US:i:65535 SI:i:2147483647 I2:i:-2147483647 UI:i:4294967295
-
diff --git a/testdata/net/sf/samtools/array_tags.sam b/testdata/net/sf/samtools/array_tags.sam
deleted file mode 100644
index be1f89b..0000000
--- a/testdata/net/sf/samtools/array_tags.sam
+++ /dev/null
@@ -1,3 +0,0 @@
- at HD VN:1.0 SO:unsorted
- at SQ SN:chr1 LN:101
-A 0 chr1 1 255 10M * 0 0 CAACAGAAGC )'.*.+2,))
\ No newline at end of file
diff --git a/testdata/net/sf/samtools/block_compressed.sam.gz b/testdata/net/sf/samtools/block_compressed.sam.gz
deleted file mode 100644
index d948382..0000000
Binary files a/testdata/net/sf/samtools/block_compressed.sam.gz and /dev/null differ
diff --git a/testdata/net/sf/samtools/compressed.bam b/testdata/net/sf/samtools/compressed.bam
deleted file mode 100644
index 9d20ade..0000000
Binary files a/testdata/net/sf/samtools/compressed.bam and /dev/null differ
diff --git a/testdata/net/sf/samtools/compressed.sam.gz b/testdata/net/sf/samtools/compressed.sam.gz
deleted file mode 100644
index bf84cd8..0000000
Binary files a/testdata/net/sf/samtools/compressed.sam.gz and /dev/null differ
diff --git a/testdata/net/sf/samtools/coordinate_sorted.sam b/testdata/net/sf/samtools/coordinate_sorted.sam
deleted file mode 100755
index 00942a9..0000000
--- a/testdata/net/sf/samtools/coordinate_sorted.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD VN:1.0 SO:coordinate
- at SQ SN:chr1 LN:101
- at SQ SN:chr2 LN:101
- at SQ SN:chr3 LN:101
- at RG ID:0 SM:Hi,Mom!
-B 99 chr1 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 99 chr1 2 255 10M = 15 30 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 147 chr1 15 255 10M = 2 -30 CAACAGAAGC )'.*.+2,)) RG:Z:0
-B 147 chr1 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-A 73 chr2 1 255 10M * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 99 chr2 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 147 chr2 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 99 chr3 1 255 10M = 25 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 147 chr3 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-A 133 * 0 0 * chr2 1 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
diff --git a/testdata/net/sf/samtools/empty.bai b/testdata/net/sf/samtools/empty.bai
deleted file mode 100755
index 237f2e5..0000000
Binary files a/testdata/net/sf/samtools/empty.bai and /dev/null differ
diff --git a/testdata/net/sf/samtools/empty.bam b/testdata/net/sf/samtools/empty.bam
deleted file mode 100644
index c8de04f..0000000
Binary files a/testdata/net/sf/samtools/empty.bam and /dev/null differ
diff --git a/testdata/net/sf/samtools/empty_no_empty_gzip_block.bai b/testdata/net/sf/samtools/empty_no_empty_gzip_block.bai
deleted file mode 100755
index 237f2e5..0000000
Binary files a/testdata/net/sf/samtools/empty_no_empty_gzip_block.bai and /dev/null differ
diff --git a/testdata/net/sf/samtools/empty_no_empty_gzip_block.bam b/testdata/net/sf/samtools/empty_no_empty_gzip_block.bam
deleted file mode 100644
index eeb875c..0000000
Binary files a/testdata/net/sf/samtools/empty_no_empty_gzip_block.bam and /dev/null differ
diff --git a/testdata/net/sf/samtools/queryname_sorted.sam b/testdata/net/sf/samtools/queryname_sorted.sam
deleted file mode 100755
index 068e7bc..0000000
--- a/testdata/net/sf/samtools/queryname_sorted.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD VN:1.0 SO:queryname
- at SQ SN:chr1 LN:101
- at SQ SN:chr2 LN:101
- at SQ SN:chr3 LN:101
- at RG ID:0 SM:Hi,Mom!
-A 73 chr2 1 255 10M * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
-A 133 * 0 0 * chr2 1 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
-B 99 chr1 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-B 147 chr1 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 99 chr2 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 147 chr2 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 99 chr3 1 255 10M = 25 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 147 chr3 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 99 chr1 2 255 10M = 15 30 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 147 chr1 15 255 10M = 2 -30 CAACAGAAGC )'.*.+2,)) RG:Z:0
diff --git a/testdata/net/sf/samtools/recordWithHexArrayAttribute.bam b/testdata/net/sf/samtools/recordWithHexArrayAttribute.bam
deleted file mode 100644
index f509785..0000000
Binary files a/testdata/net/sf/samtools/recordWithHexArrayAttribute.bam and /dev/null differ
diff --git a/testdata/net/sf/samtools/seekablestream/megabyteZeros.dat b/testdata/net/sf/samtools/seekablestream/megabyteZeros.dat
deleted file mode 100755
index 7c2624a..0000000
Binary files a/testdata/net/sf/samtools/seekablestream/megabyteZeros.dat and /dev/null differ
diff --git a/testdata/net/sf/samtools/uncompressed.sam b/testdata/net/sf/samtools/uncompressed.sam
deleted file mode 100644
index e3fe151..0000000
--- a/testdata/net/sf/samtools/uncompressed.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD VN:1.0 SO:unsorted
- at SQ SN:chr1 LN:101
- at SQ SN:chr2 LN:101
- at SQ SN:chr3 LN:101
- at RG ID:0 SM:Hi,Mom!
-A 73 chr2 1 255 10M * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
-A 133 * 0 0 * chr2 1 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
-B 99 chr1 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-B 147 chr1 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 99 chr2 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 147 chr2 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 99 chr3 1 255 10M = 25 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 147 chr3 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 99 chr1 2 255 10M = 15 30 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 147 chr1 15 255 10M = 2 -30 CAACAGAAGC )'.*.+2,)) RG:Z:0
diff --git a/testdata/net/sf/samtools/unsorted.sam b/testdata/net/sf/samtools/unsorted.sam
deleted file mode 100755
index e3fe151..0000000
--- a/testdata/net/sf/samtools/unsorted.sam
+++ /dev/null
@@ -1,15 +0,0 @@
- at HD VN:1.0 SO:unsorted
- at SQ SN:chr1 LN:101
- at SQ SN:chr2 LN:101
- at SQ SN:chr3 LN:101
- at RG ID:0 SM:Hi,Mom!
-A 73 chr2 1 255 10M * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
-A 133 * 0 0 * chr2 1 0 CAACAGAAGC )'.*.+2,)) RG:Z:0
-B 99 chr1 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-B 147 chr1 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 99 chr2 1 255 10M = 26 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-C 147 chr2 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 99 chr3 1 255 10M = 25 35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-D 147 chr3 26 255 10M = 1 -35 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 99 chr1 2 255 10M = 15 30 CAACAGAAGC )'.*.+2,)) RG:Z:0
-E 147 chr1 15 255 10M = 2 -30 CAACAGAAGC )'.*.+2,)) RG:Z:0
diff --git a/testdata/net/sf/samtools/util/broad_logo.gif b/testdata/net/sf/samtools/util/broad_logo.gif
deleted file mode 100644
index df6c728..0000000
Binary files a/testdata/net/sf/samtools/util/broad_logo.gif and /dev/null differ
diff --git a/testdata/net/sf/samtools/util/defective_bgzf.bam b/testdata/net/sf/samtools/util/defective_bgzf.bam
deleted file mode 100644
index 749b8e7..0000000
Binary files a/testdata/net/sf/samtools/util/defective_bgzf.bam and /dev/null differ
diff --git a/testdata/net/sf/samtools/util/no_bgzf_terminator.bam b/testdata/net/sf/samtools/util/no_bgzf_terminator.bam
deleted file mode 100644
index 0d9cbf7..0000000
Binary files a/testdata/net/sf/samtools/util/no_bgzf_terminator.bam and /dev/null differ
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.bait_bias_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.bait_bias_detail_metrics
new file mode 100644
index 0000000..4f0cb93
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.bait_bias_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_QUALITY_SCORE=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_bq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectS [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT FWD_CXT_REF_BASES FWD_CXT_ALT_BASES REV_CXT_REF_BASES REV_CXT_ALT_BASES FWD_ERROR_RATE REV_ERROR_RATE ERROR_RATE QSCORE
+sample1 library1 A C A 29 0 38 0 0 0 0 100
+sample1 library1 A G A 29 0 38 0 0 0 0 100
+sample1 library1 A T A 29 0 38 0 0 0 0 100
+sample1 library1 C A C 24 5 22 6 0.172414 0.214286 0 100
+sample1 library1 C G C 24 0 22 0 0 0 0 100
+sample1 library1 C T C 24 16 22 0 0.4 0 0.4 4
+sample1 library1 G A G 22 0 24 16 0 0.4 0 100
+sample1 library1 G C G 22 0 24 0 0 0 0 100
+sample1 library1 G T G 22 6 24 5 0.214286 0.172414 0.041872 14
+sample1 library1 T A T 38 0 29 0 0 0 0 100
+sample1 library1 T C T 38 0 29 0 0 0 0 100
+sample1 library1 T G T 38 0 29 0 0 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.bait_bias_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.bait_bias_summary_metrics
new file mode 100644
index 0000000..209c567
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.bait_bias_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_QUALITY_SCORE=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_bq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectS [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 Cref
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 4 C 4 C 4 C 4 NA
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 14 G 14 G 14 G 14 Gref
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.pre_adapter_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.pre_adapter_detail_metrics
new file mode 100644
index 0000000..dbe7395
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.pre_adapter_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_QUALITY_SCORE=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_bq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectS [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT PRO_REF_BASES PRO_ALT_BASES CON_REF_BASES CON_ALT_BASES ERROR_RATE QSCORE
+sample1 library1 A C A 31 0 36 0 0 100
+sample1 library1 A G A 31 0 36 0 0 100
+sample1 library1 A T A 31 0 36 0 0 100
+sample1 library1 C A C 31 0 15 11 0 100
+sample1 library1 C G C 31 0 15 0 0 100
+sample1 library1 C T C 31 8 15 8 0 100
+sample1 library1 G A G 15 8 31 8 0 100
+sample1 library1 G C G 15 0 31 0 0 100
+sample1 library1 G T G 15 11 31 0 0.192982 7
+sample1 library1 T A T 36 0 31 0 0 100
+sample1 library1 T C T 36 0 31 0 0 100
+sample1 library1 T G T 36 0 31 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.pre_adapter_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.pre_adapter_summary_metrics
new file mode 100644
index 0000000..bc45a68
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_bq_cutoff.pre_adapter_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_QUALITY_SCORE=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_bq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectS [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 NA
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 100 C 100 C 100 C 100 Deamination
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 7 G 7 G 7 G 7 OxoG
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.bait_bias_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.bait_bias_detail_metrics
new file mode 100644
index 0000000..0934913
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.bait_bias_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_MAPPING_QUALITY=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_mq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/Collec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT FWD_CXT_REF_BASES FWD_CXT_ALT_BASES REV_CXT_REF_BASES REV_CXT_ALT_BASES FWD_ERROR_RATE REV_ERROR_RATE ERROR_RATE QSCORE
+sample1 library1 A C A 30 0 38 0 0 0 0 100
+sample1 library1 A G A 30 0 38 0 0 0 0 100
+sample1 library1 A T A 30 0 38 0 0 0 0 100
+sample1 library1 C A C 27 5 23 6 0.15625 0.206897 0 100
+sample1 library1 C G C 27 0 23 0 0 0 0 100
+sample1 library1 C T C 27 16 23 0 0.372093 0 0.372093 4
+sample1 library1 G A G 23 0 27 16 0 0.372093 0 100
+sample1 library1 G C G 23 0 27 0 0 0 0 100
+sample1 library1 G T G 23 6 27 5 0.206897 0.15625 0.050647 13
+sample1 library1 T A T 38 0 30 0 0 0 0 100
+sample1 library1 T C T 38 0 30 0 0 0 0 100
+sample1 library1 T G T 38 0 30 0 0 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.bait_bias_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.bait_bias_summary_metrics
new file mode 100644
index 0000000..93b11c7
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.bait_bias_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_MAPPING_QUALITY=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_mq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/Collec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 Cref
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 4 C 4 C 4 C 4 NA
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 13 G 13 G 13 G 13 Gref
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.pre_adapter_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.pre_adapter_detail_metrics
new file mode 100644
index 0000000..28d0cde
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.pre_adapter_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_MAPPING_QUALITY=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_mq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/Collec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT PRO_REF_BASES PRO_ALT_BASES CON_REF_BASES CON_ALT_BASES ERROR_RATE QSCORE
+sample1 library1 A C A 32 0 36 0 0 100
+sample1 library1 A G A 32 0 36 0 0 100
+sample1 library1 A T A 32 0 36 0 0 100
+sample1 library1 C A C 34 0 16 11 0 100
+sample1 library1 C G C 34 0 16 0 0 100
+sample1 library1 C T C 34 8 16 8 0 100
+sample1 library1 G A G 16 8 34 8 0 100
+sample1 library1 G C G 16 0 34 0 0 100
+sample1 library1 G T G 16 11 34 0 0.180328 7
+sample1 library1 T A T 36 0 32 0 0 100
+sample1 library1 T C T 36 0 32 0 0 100
+sample1 library1 T G T 36 0 32 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.pre_adapter_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.pre_adapter_summary_metrics
new file mode 100644
index 0000000..df0dbf0
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/no_mq_cutoff.pre_adapter_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_MAPPING_QUALITY=0 MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/no_mq_cutoff REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/Collec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 NA
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 100 C 100 C 100 C 100 Deamination
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 7 G 7 G 7 G 7 OxoG
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.bait_bias_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.bait_bias_detail_metrics
new file mode 100644
index 0000000..107f6f3
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.bait_bias_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=0 MAXIMUM_INSERT_SIZE=0 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/unmapped_mate REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/ [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:02 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT FWD_CXT_REF_BASES FWD_CXT_ALT_BASES REV_CXT_REF_BASES REV_CXT_ALT_BASES FWD_ERROR_RATE REV_ERROR_RATE ERROR_RATE QSCORE
+sample1 library1 A C A 29 0 40 0 0 0 0 100
+sample1 library1 A G A 29 0 40 0 0 0 0 100
+sample1 library1 A T A 29 0 40 0 0 0 0 100
+sample1 library1 C A C 26 5 23 6 0.16129 0.206897 0 100
+sample1 library1 C G C 26 0 23 0 0 0 0 100
+sample1 library1 C T C 26 16 23 0 0.380952 0 0.380952 4
+sample1 library1 G A G 23 0 26 16 0 0.380952 0 100
+sample1 library1 G C G 23 0 26 0 0 0 0 100
+sample1 library1 G T G 23 6 26 5 0.206897 0.16129 0.045606 13
+sample1 library1 T A T 40 0 29 0 0 0 0 100
+sample1 library1 T C T 40 0 29 0 0 0 0 100
+sample1 library1 T G T 40 0 29 0 0 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.bait_bias_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.bait_bias_summary_metrics
new file mode 100644
index 0000000..d3e84bf
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.bait_bias_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=0 MAXIMUM_INSERT_SIZE=0 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/unmapped_mate REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/ [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:02 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 Cref
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 4 C 4 C 4 C 4 NA
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 13 G 13 G 13 G 13 Gref
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.pre_adapter_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.pre_adapter_detail_metrics
new file mode 100644
index 0000000..d111861
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.pre_adapter_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=0 MAXIMUM_INSERT_SIZE=0 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/unmapped_mate REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/ [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:02 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT PRO_REF_BASES PRO_ALT_BASES CON_REF_BASES CON_ALT_BASES ERROR_RATE QSCORE
+sample1 library1 A C A 31 0 38 0 0 100
+sample1 library1 A G A 31 0 38 0 0 100
+sample1 library1 A T A 31 0 38 0 0 100
+sample1 library1 C A C 33 0 16 11 0 100
+sample1 library1 C G C 33 0 16 0 0 100
+sample1 library1 C T C 33 8 16 8 0 100
+sample1 library1 G A G 16 8 33 8 0 100
+sample1 library1 G C G 16 0 33 0 0 100
+sample1 library1 G T G 16 11 33 0 0.183333 7
+sample1 library1 T A T 38 0 31 0 0 100
+sample1 library1 T C T 38 0 31 0 0 100
+sample1 library1 T G T 38 0 31 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.pre_adapter_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.pre_adapter_summary_metrics
new file mode 100644
index 0000000..1f97ea0
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/unmapped_mate.pre_adapter_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=0 MAXIMUM_INSERT_SIZE=0 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/unmapped_mate REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/ [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:02 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 NA
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 100 C 100 C 100 C 100 Deamination
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 7 G 7 G 7 G 7 OxoG
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.bait_bias_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.bait_bias_detail_metrics
new file mode 100644
index 0000000..a154521
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.bait_bias_detail_metrics
@@ -0,0 +1,201 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=1 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_context REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT FWD_CXT_REF_BASES FWD_CXT_ALT_BASES REV_CXT_REF_BASES REV_CXT_ALT_BASES FWD_ERROR_RATE REV_ERROR_RATE ERROR_RATE QSCORE
+sample1 library1 A C AAT 1 0 0 0 0 0 0 100
+sample1 library1 A C GAT 5 0 4 0 0 0 0 100
+sample1 library1 A C CAG 3 0 4 0 0 0 0 100
+sample1 library1 A C CAC 0 0 1 0 0 0 0 100
+sample1 library1 A C TAT 2 0 1 0 0 0 0 100
+sample1 library1 A C CAA 2 0 0 0 0 0 0 100
+sample1 library1 A C TAA 0 0 1 0 0 0 0 100
+sample1 library1 A C TAC 4 0 3 0 0 0 0 100
+sample1 library1 A C AAG 3 0 4 0 0 0 0 100
+sample1 library1 A C GAG 0 0 1 0 0 0 0 100
+sample1 library1 A C AAA 1 0 0 0 0 0 0 100
+sample1 library1 A C AAC 0 0 0 0 0 0 0 100
+sample1 library1 A C GAC 0 0 2 0 0 0 0 100
+sample1 library1 A C GAA 2 0 4 0 0 0 0 100
+sample1 library1 A C CAT 3 0 5 0 0 0 0 100
+sample1 library1 A C TAG 0 0 2 0 0 0 0 100
+sample1 library1 A G AAT 1 0 0 0 0 0 0 100
+sample1 library1 A G GAT 5 0 4 0 0 0 0 100
+sample1 library1 A G CAG 3 0 4 0 0 0 0 100
+sample1 library1 A G CAC 0 0 1 0 0 0 0 100
+sample1 library1 A G TAT 2 0 1 0 0 0 0 100
+sample1 library1 A G CAA 2 0 0 0 0 0 0 100
+sample1 library1 A G TAA 0 0 1 0 0 0 0 100
+sample1 library1 A G TAC 4 0 3 0 0 0 0 100
+sample1 library1 A G AAG 3 0 4 0 0 0 0 100
+sample1 library1 A G GAG 0 0 1 0 0 0 0 100
+sample1 library1 A G AAA 1 0 0 0 0 0 0 100
+sample1 library1 A G AAC 0 0 0 0 0 0 0 100
+sample1 library1 A G GAC 0 0 2 0 0 0 0 100
+sample1 library1 A G GAA 2 0 4 0 0 0 0 100
+sample1 library1 A G CAT 3 0 5 0 0 0 0 100
+sample1 library1 A G TAG 0 0 2 0 0 0 0 100
+sample1 library1 A T AAT 1 0 0 0 0 0 0 100
+sample1 library1 A T GAT 5 0 4 0 0 0 0 100
+sample1 library1 A T CAG 3 0 4 0 0 0 0 100
+sample1 library1 A T CAC 0 0 1 0 0 0 0 100
+sample1 library1 A T TAT 2 0 1 0 0 0 0 100
+sample1 library1 A T CAA 2 0 0 0 0 0 0 100
+sample1 library1 A T TAA 0 0 1 0 0 0 0 100
+sample1 library1 A T TAC 4 0 3 0 0 0 0 100
+sample1 library1 A T AAG 3 0 4 0 0 0 0 100
+sample1 library1 A T GAG 0 0 1 0 0 0 0 100
+sample1 library1 A T AAA 1 0 0 0 0 0 0 100
+sample1 library1 A T AAC 0 0 0 0 0 0 0 100
+sample1 library1 A T GAC 0 0 2 0 0 0 0 100
+sample1 library1 A T GAA 2 0 4 0 0 0 0 100
+sample1 library1 A T CAT 3 0 5 0 0 0 0 100
+sample1 library1 A T TAG 0 0 2 0 0 0 0 100
+sample1 library1 C A ACT 0 0 0 1 0 1 0 100
+sample1 library1 C A GCT 4 0 3 0 0 0 0 100
+sample1 library1 C A CCA 2 0 0 0 0 0 0 100
+sample1 library1 C A CCC 1 1 0 0 0.5 0 0.5 3
+sample1 library1 C A TCT 0 1 1 0 1 0 1 0
+sample1 library1 C A ACA 4 0 0 0 0 0 0 100
+sample1 library1 C A CCG 0 0 0 0 0 0 0 100
+sample1 library1 C A GCG 1 0 4 1 0 0.2 0 100
+sample1 library1 C A ACC 1 0 0 0 0 0 0 100
+sample1 library1 C A TCG 2 0 3 1 0 0.25 0 100
+sample1 library1 C A ACG 2 0 4 1 0 0.2 0 100
+sample1 library1 C A TCA 3 0 2 1 0 0.333333 0 100
+sample1 library1 C A GCC 2 1 0 0 0.333333 0 0.333333 5
+sample1 library1 C A TCC 0 0 0 0 0 0 0 100
+sample1 library1 C A CCT 0 1 0 0 1 0 1 0
+sample1 library1 C A GCA 0 1 4 1 1 0.2 0.8 1
+sample1 library1 C G ACT 0 0 0 0 0 0 0 100
+sample1 library1 C G GCT 4 0 3 0 0 0 0 100
+sample1 library1 C G CCA 2 0 0 0 0 0 0 100
+sample1 library1 C G CCC 1 0 0 0 0 0 0 100
+sample1 library1 C G TCT 0 0 1 0 0 0 0 100
+sample1 library1 C G ACA 4 0 0 0 0 0 0 100
+sample1 library1 C G CCG 0 0 0 0 0 0 0 100
+sample1 library1 C G GCG 1 0 4 0 0 0 0 100
+sample1 library1 C G ACC 1 0 0 0 0 0 0 100
+sample1 library1 C G TCG 2 0 3 0 0 0 0 100
+sample1 library1 C G ACG 2 0 4 0 0 0 0 100
+sample1 library1 C G TCA 3 0 2 0 0 0 0 100
+sample1 library1 C G GCC 2 0 0 0 0 0 0 100
+sample1 library1 C G TCC 0 0 0 0 0 0 0 100
+sample1 library1 C G CCT 0 0 0 0 0 0 0 100
+sample1 library1 C G GCA 0 0 4 0 0 0 0 100
+sample1 library1 C T ACT 0 0 0 0 0 0 0 100
+sample1 library1 C T GCT 4 2 3 0 0.333333 0 0.333333 5
+sample1 library1 C T CCA 2 0 0 0 0 0 0 100
+sample1 library1 C T CCC 1 0 0 0 0 0 0 100
+sample1 library1 C T TCT 0 2 1 0 1 0 1 0
+sample1 library1 C T ACA 4 0 0 0 0 0 0 100
+sample1 library1 C T CCG 0 2 0 0 1 0 1 0
+sample1 library1 C T GCG 1 4 4 0 0.8 0 0.8 1
+sample1 library1 C T ACC 1 0 0 0 0 0 0 100
+sample1 library1 C T TCG 2 0 3 0 0 0 0 100
+sample1 library1 C T ACG 2 0 4 0 0 0 0 100
+sample1 library1 C T TCA 3 0 2 0 0 0 0 100
+sample1 library1 C T GCC 2 0 0 0 0 0 0 100
+sample1 library1 C T TCC 0 4 0 0 1 0 1 0
+sample1 library1 C T CCT 0 2 0 0 1 0 1 0
+sample1 library1 C T GCA 0 0 4 0 0 0 0 100
+sample1 library1 G A AGA 1 0 0 2 0 1 0 100
+sample1 library1 G A CGA 3 0 2 0 0 0 0 100
+sample1 library1 G A GGA 0 0 0 4 0 1 0 100
+sample1 library1 G A CGC 4 0 1 4 0 0.8 0 100
+sample1 library1 G A GGC 0 0 2 0 0 0 0 100
+sample1 library1 G A AGC 3 0 4 2 0 0.333333 0 100
+sample1 library1 G A GGG 0 0 1 0 0 0 0 100
+sample1 library1 G A TGG 0 0 2 0 0 0 0 100
+sample1 library1 G A TGC 4 0 0 0 0 0 0 100
+sample1 library1 G A CGT 4 0 2 0 0 0 0 100
+sample1 library1 G A TGA 2 0 3 0 0 0 0 100
+sample1 library1 G A GGT 0 0 1 0 0 0 0 100
+sample1 library1 G A AGT 0 0 0 0 0 0 0 100
+sample1 library1 G A TGT 0 0 4 0 0 0 0 100
+sample1 library1 G A AGG 0 0 0 2 0 1 0 100
+sample1 library1 G A CGG 0 0 0 2 0 1 0 100
+sample1 library1 G C AGA 1 0 0 0 0 0 0 100
+sample1 library1 G C CGA 3 0 2 0 0 0 0 100
+sample1 library1 G C GGA 0 0 0 0 0 0 0 100
+sample1 library1 G C CGC 4 0 1 0 0 0 0 100
+sample1 library1 G C GGC 0 0 2 0 0 0 0 100
+sample1 library1 G C AGC 3 0 4 0 0 0 0 100
+sample1 library1 G C GGG 0 0 1 0 0 0 0 100
+sample1 library1 G C TGG 0 0 2 0 0 0 0 100
+sample1 library1 G C TGC 4 0 0 0 0 0 0 100
+sample1 library1 G C CGT 4 0 2 0 0 0 0 100
+sample1 library1 G C TGA 2 0 3 0 0 0 0 100
+sample1 library1 G C GGT 0 0 1 0 0 0 0 100
+sample1 library1 G C AGT 0 0 0 0 0 0 0 100
+sample1 library1 G C TGT 0 0 4 0 0 0 0 100
+sample1 library1 G C AGG 0 0 0 0 0 0 0 100
+sample1 library1 G C CGG 0 0 0 0 0 0 0 100
+sample1 library1 G T AGA 1 0 0 1 0 1 0 100
+sample1 library1 G T CGA 3 1 2 0 0.25 0 0.25 6
+sample1 library1 G T GGA 0 0 0 0 0 0 0 100
+sample1 library1 G T CGC 4 1 1 0 0.2 0 0.2 7
+sample1 library1 G T GGC 0 0 2 1 0 0.333333 0 100
+sample1 library1 G T AGC 3 0 4 0 0 0 0 100
+sample1 library1 G T GGG 0 0 1 1 0 0.5 0 100
+sample1 library1 G T TGG 0 0 2 0 0 0 0 100
+sample1 library1 G T TGC 4 1 0 1 0.2 1 0 100
+sample1 library1 G T CGT 4 1 2 0 0.2 0 0.2 7
+sample1 library1 G T TGA 2 1 3 0 0.333333 0 0.333333 5
+sample1 library1 G T GGT 0 0 1 0 0 0 0 100
+sample1 library1 G T AGT 0 1 0 0 1 0 1 0
+sample1 library1 G T TGT 0 0 4 0 0 0 0 100
+sample1 library1 G T AGG 0 0 0 1 0 1 0 100
+sample1 library1 G T CGG 0 0 0 0 0 0 0 100
+sample1 library1 T A GTC 2 0 0 0 0 0 0 100
+sample1 library1 T A ATG 5 0 3 0 0 0 0 100
+sample1 library1 T A TTC 4 0 2 0 0 0 0 100
+sample1 library1 T A GTA 3 0 4 0 0 0 0 100
+sample1 library1 T A TTA 1 0 0 0 0 0 0 100
+sample1 library1 T A ATC 4 0 5 0 0 0 0 100
+sample1 library1 T A TTG 0 0 2 0 0 0 0 100
+sample1 library1 T A GTG 1 0 0 0 0 0 0 100
+sample1 library1 T A GTT 0 0 0 0 0 0 0 100
+sample1 library1 T A CTG 4 0 3 0 0 0 0 100
+sample1 library1 T A CTA 2 0 0 0 0 0 0 100
+sample1 library1 T A TTT 0 0 1 0 0 0 0 100
+sample1 library1 T A CTC 1 0 0 0 0 0 0 100
+sample1 library1 T A ATA 1 0 2 0 0 0 0 100
+sample1 library1 T A ATT 0 0 1 0 0 0 0 100
+sample1 library1 T A CTT 4 0 3 0 0 0 0 100
+sample1 library1 T C GTC 2 0 0 0 0 0 0 100
+sample1 library1 T C ATG 5 0 3 0 0 0 0 100
+sample1 library1 T C TTC 4 0 2 0 0 0 0 100
+sample1 library1 T C GTA 3 0 4 0 0 0 0 100
+sample1 library1 T C TTA 1 0 0 0 0 0 0 100
+sample1 library1 T C ATC 4 0 5 0 0 0 0 100
+sample1 library1 T C TTG 0 0 2 0 0 0 0 100
+sample1 library1 T C GTG 1 0 0 0 0 0 0 100
+sample1 library1 T C GTT 0 0 0 0 0 0 0 100
+sample1 library1 T C CTG 4 0 3 0 0 0 0 100
+sample1 library1 T C CTA 2 0 0 0 0 0 0 100
+sample1 library1 T C TTT 0 0 1 0 0 0 0 100
+sample1 library1 T C CTC 1 0 0 0 0 0 0 100
+sample1 library1 T C ATA 1 0 2 0 0 0 0 100
+sample1 library1 T C ATT 0 0 1 0 0 0 0 100
+sample1 library1 T C CTT 4 0 3 0 0 0 0 100
+sample1 library1 T G GTC 2 0 0 0 0 0 0 100
+sample1 library1 T G ATG 5 0 3 0 0 0 0 100
+sample1 library1 T G TTC 4 0 2 0 0 0 0 100
+sample1 library1 T G GTA 3 0 4 0 0 0 0 100
+sample1 library1 T G TTA 1 0 0 0 0 0 0 100
+sample1 library1 T G ATC 4 0 5 0 0 0 0 100
+sample1 library1 T G TTG 0 0 2 0 0 0 0 100
+sample1 library1 T G GTG 1 0 0 0 0 0 0 100
+sample1 library1 T G GTT 0 0 0 0 0 0 0 100
+sample1 library1 T G CTG 4 0 3 0 0 0 0 100
+sample1 library1 T G CTA 2 0 0 0 0 0 0 100
+sample1 library1 T G TTT 0 0 1 0 0 0 0 100
+sample1 library1 T G CTC 1 0 0 0 0 0 0 100
+sample1 library1 T G ATA 1 0 2 0 0 0 0 100
+sample1 library1 T G ATT 0 0 1 0 0 0 0 100
+sample1 library1 T G CTT 4 0 3 0 0 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.bait_bias_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.bait_bias_summary_metrics
new file mode 100644
index 0000000..529a61e
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.bait_bias_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=1 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_context REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 AAT 100 GAN 100 NAG 100 NA
+sample1 library1 A G 100 AAT 100 GAN 100 NAG 100 NA
+sample1 library1 A T 100 AAT 100 GAN 100 NAG 100 NA
+sample1 library1 C A 100 TCT 0 CCN 4 NCC 5 Cref
+sample1 library1 C G 100 ACT 100 TCN 100 NCC 100 NA
+sample1 library1 C T 4 TCT 0 CCN 2 NCT 2 NA
+sample1 library1 G A 100 AGA 100 AGN 100 NGC 100 NA
+sample1 library1 G C 100 AGA 100 AGN 100 NGC 100 NA
+sample1 library1 G T 14 AGT 0 CGN 7 NGT 5 Gref
+sample1 library1 T A 100 GTC 100 CTN 100 NTC 100 NA
+sample1 library1 T C 100 GTC 100 CTN 100 NTC 100 NA
+sample1 library1 T G 100 GTC 100 CTN 100 NTC 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.pre_adapter_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.pre_adapter_detail_metrics
new file mode 100644
index 0000000..e70b6ed
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.pre_adapter_detail_metrics
@@ -0,0 +1,201 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=1 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_context REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT PRO_REF_BASES PRO_ALT_BASES CON_REF_BASES CON_ALT_BASES ERROR_RATE QSCORE
+sample1 library1 A C AAT 0 0 1 0 0 100
+sample1 library1 A C GAT 4 0 5 0 0 100
+sample1 library1 A C CAG 4 0 3 0 0 100
+sample1 library1 A C CAC 0 0 1 0 0 100
+sample1 library1 A C TAT 2 0 1 0 0 100
+sample1 library1 A C CAA 1 0 1 0 0 100
+sample1 library1 A C TAA 1 0 0 0 0 100
+sample1 library1 A C TAC 3 0 4 0 0 100
+sample1 library1 A C AAG 3 0 4 0 0 100
+sample1 library1 A C GAG 1 0 0 0 0 100
+sample1 library1 A C AAA 0 0 1 0 0 100
+sample1 library1 A C AAC 0 0 0 0 0 100
+sample1 library1 A C GAC 1 0 1 0 0 100
+sample1 library1 A C GAA 3 0 3 0 0 100
+sample1 library1 A C CAT 4 0 4 0 0 100
+sample1 library1 A C TAG 1 0 1 0 0 100
+sample1 library1 A G AAT 0 0 1 0 0 100
+sample1 library1 A G GAT 4 0 5 0 0 100
+sample1 library1 A G CAG 4 0 3 0 0 100
+sample1 library1 A G CAC 0 0 1 0 0 100
+sample1 library1 A G TAT 2 0 1 0 0 100
+sample1 library1 A G CAA 1 0 1 0 0 100
+sample1 library1 A G TAA 1 0 0 0 0 100
+sample1 library1 A G TAC 3 0 4 0 0 100
+sample1 library1 A G AAG 3 0 4 0 0 100
+sample1 library1 A G GAG 1 0 0 0 0 100
+sample1 library1 A G AAA 0 0 1 0 0 100
+sample1 library1 A G AAC 0 0 0 0 0 100
+sample1 library1 A G GAC 1 0 1 0 0 100
+sample1 library1 A G GAA 3 0 3 0 0 100
+sample1 library1 A G CAT 4 0 4 0 0 100
+sample1 library1 A G TAG 1 0 1 0 0 100
+sample1 library1 A T AAT 0 0 1 0 0 100
+sample1 library1 A T GAT 4 0 5 0 0 100
+sample1 library1 A T CAG 4 0 3 0 0 100
+sample1 library1 A T CAC 0 0 1 0 0 100
+sample1 library1 A T TAT 2 0 1 0 0 100
+sample1 library1 A T CAA 1 0 1 0 0 100
+sample1 library1 A T TAA 1 0 0 0 0 100
+sample1 library1 A T TAC 3 0 4 0 0 100
+sample1 library1 A T AAG 3 0 4 0 0 100
+sample1 library1 A T GAG 1 0 0 0 0 100
+sample1 library1 A T AAA 0 0 1 0 0 100
+sample1 library1 A T AAC 0 0 0 0 0 100
+sample1 library1 A T GAC 1 0 1 0 0 100
+sample1 library1 A T GAA 3 0 3 0 0 100
+sample1 library1 A T CAT 4 0 4 0 0 100
+sample1 library1 A T TAG 1 0 1 0 0 100
+sample1 library1 C A ACT 0 0 0 1 0 100
+sample1 library1 C A GCT 6 0 1 0 0 100
+sample1 library1 C A CCA 2 0 0 0 0 100
+sample1 library1 C A CCC 1 0 0 1 0 100
+sample1 library1 C A TCT 1 0 0 1 0 100
+sample1 library1 C A ACA 4 0 0 0 0 100
+sample1 library1 C A CCG 0 0 0 0 0 100
+sample1 library1 C A GCG 2 0 3 1 0 100
+sample1 library1 C A ACC 1 0 0 0 0 100
+sample1 library1 C A TCG 3 0 2 1 0 100
+sample1 library1 C A ACG 3 0 3 1 0 100
+sample1 library1 C A TCA 3 0 2 1 0 100
+sample1 library1 C A GCC 2 0 0 1 0 100
+sample1 library1 C A TCC 0 0 0 0 0 100
+sample1 library1 C A CCT 0 0 0 1 0 100
+sample1 library1 C A GCA 1 0 3 2 0 100
+sample1 library1 C G ACT 0 0 0 0 0 100
+sample1 library1 C G GCT 6 0 1 0 0 100
+sample1 library1 C G CCA 2 0 0 0 0 100
+sample1 library1 C G CCC 1 0 0 0 0 100
+sample1 library1 C G TCT 1 0 0 0 0 100
+sample1 library1 C G ACA 4 0 0 0 0 100
+sample1 library1 C G CCG 0 0 0 0 0 100
+sample1 library1 C G GCG 2 0 3 0 0 100
+sample1 library1 C G ACC 1 0 0 0 0 100
+sample1 library1 C G TCG 3 0 2 0 0 100
+sample1 library1 C G ACG 3 0 3 0 0 100
+sample1 library1 C G TCA 3 0 2 0 0 100
+sample1 library1 C G GCC 2 0 0 0 0 100
+sample1 library1 C G TCC 0 0 0 0 0 100
+sample1 library1 C G CCT 0 0 0 0 0 100
+sample1 library1 C G GCA 1 0 3 0 0 100
+sample1 library1 C T ACT 0 0 0 0 0 100
+sample1 library1 C T GCT 6 1 1 1 0 100
+sample1 library1 C T CCA 2 0 0 0 0 100
+sample1 library1 C T CCC 1 0 0 0 0 100
+sample1 library1 C T TCT 1 1 0 1 0 100
+sample1 library1 C T ACA 4 0 0 0 0 100
+sample1 library1 C T CCG 0 1 0 1 0 100
+sample1 library1 C T GCG 2 2 3 2 0 100
+sample1 library1 C T ACC 1 0 0 0 0 100
+sample1 library1 C T TCG 3 0 2 0 0 100
+sample1 library1 C T ACG 3 0 3 0 0 100
+sample1 library1 C T TCA 3 0 2 0 0 100
+sample1 library1 C T GCC 2 0 0 0 0 100
+sample1 library1 C T TCC 0 2 0 2 0 100
+sample1 library1 C T CCT 0 1 0 1 0 100
+sample1 library1 C T GCA 1 0 3 0 0 100
+sample1 library1 G A AGA 0 1 1 1 0 100
+sample1 library1 G A CGA 2 0 3 0 0 100
+sample1 library1 G A GGA 0 2 0 2 0 100
+sample1 library1 G A CGC 3 2 2 2 0 100
+sample1 library1 G A GGC 0 0 2 0 0 100
+sample1 library1 G A AGC 1 1 6 1 0 100
+sample1 library1 G A GGG 0 0 1 0 0 100
+sample1 library1 G A TGG 0 0 2 0 0 100
+sample1 library1 G A TGC 3 0 1 0 0 100
+sample1 library1 G A CGT 3 0 3 0 0 100
+sample1 library1 G A TGA 2 0 3 0 0 100
+sample1 library1 G A GGT 0 0 1 0 0 100
+sample1 library1 G A AGT 0 0 0 0 0 100
+sample1 library1 G A TGT 0 0 4 0 0 100
+sample1 library1 G A AGG 0 1 0 1 0 100
+sample1 library1 G A CGG 0 1 0 1 0 100
+sample1 library1 G C AGA 0 0 1 0 0 100
+sample1 library1 G C CGA 2 0 3 0 0 100
+sample1 library1 G C GGA 0 0 0 0 0 100
+sample1 library1 G C CGC 3 0 2 0 0 100
+sample1 library1 G C GGC 0 0 2 0 0 100
+sample1 library1 G C AGC 1 0 6 0 0 100
+sample1 library1 G C GGG 0 0 1 0 0 100
+sample1 library1 G C TGG 0 0 2 0 0 100
+sample1 library1 G C TGC 3 0 1 0 0 100
+sample1 library1 G C CGT 3 0 3 0 0 100
+sample1 library1 G C TGA 2 0 3 0 0 100
+sample1 library1 G C GGT 0 0 1 0 0 100
+sample1 library1 G C AGT 0 0 0 0 0 100
+sample1 library1 G C TGT 0 0 4 0 0 100
+sample1 library1 G C AGG 0 0 0 0 0 100
+sample1 library1 G C CGG 0 0 0 0 0 100
+sample1 library1 G T AGA 0 1 1 0 0.5 3
+sample1 library1 G T CGA 2 1 3 0 0.166667 8
+sample1 library1 G T GGA 0 0 0 0 0 100
+sample1 library1 G T CGC 3 1 2 0 0.166667 8
+sample1 library1 G T GGC 0 1 2 0 0.333333 5
+sample1 library1 G T AGC 1 0 6 0 0 100
+sample1 library1 G T GGG 0 1 1 0 0.5 3
+sample1 library1 G T TGG 0 0 2 0 0 100
+sample1 library1 G T TGC 3 2 1 0 0.333333 5
+sample1 library1 G T CGT 3 1 3 0 0.142857 8
+sample1 library1 G T TGA 2 1 3 0 0.166667 8
+sample1 library1 G T GGT 0 0 1 0 0 100
+sample1 library1 G T AGT 0 1 0 0 1 0
+sample1 library1 G T TGT 0 0 4 0 0 100
+sample1 library1 G T AGG 0 1 0 0 1 0
+sample1 library1 G T CGG 0 0 0 0 0 100
+sample1 library1 T A GTC 1 0 1 0 0 100
+sample1 library1 T A ATG 4 0 4 0 0 100
+sample1 library1 T A TTC 3 0 3 0 0 100
+sample1 library1 T A GTA 4 0 3 0 0 100
+sample1 library1 T A TTA 0 0 1 0 0 100
+sample1 library1 T A ATC 5 0 4 0 0 100
+sample1 library1 T A TTG 1 0 1 0 0 100
+sample1 library1 T A GTG 1 0 0 0 0 100
+sample1 library1 T A GTT 0 0 0 0 0 100
+sample1 library1 T A CTG 3 0 4 0 0 100
+sample1 library1 T A CTA 1 0 1 0 0 100
+sample1 library1 T A TTT 1 0 0 0 0 100
+sample1 library1 T A CTC 0 0 1 0 0 100
+sample1 library1 T A ATA 1 0 2 0 0 100
+sample1 library1 T A ATT 1 0 0 0 0 100
+sample1 library1 T A CTT 4 0 3 0 0 100
+sample1 library1 T C GTC 1 0 1 0 0 100
+sample1 library1 T C ATG 4 0 4 0 0 100
+sample1 library1 T C TTC 3 0 3 0 0 100
+sample1 library1 T C GTA 4 0 3 0 0 100
+sample1 library1 T C TTA 0 0 1 0 0 100
+sample1 library1 T C ATC 5 0 4 0 0 100
+sample1 library1 T C TTG 1 0 1 0 0 100
+sample1 library1 T C GTG 1 0 0 0 0 100
+sample1 library1 T C GTT 0 0 0 0 0 100
+sample1 library1 T C CTG 3 0 4 0 0 100
+sample1 library1 T C CTA 1 0 1 0 0 100
+sample1 library1 T C TTT 1 0 0 0 0 100
+sample1 library1 T C CTC 0 0 1 0 0 100
+sample1 library1 T C ATA 1 0 2 0 0 100
+sample1 library1 T C ATT 1 0 0 0 0 100
+sample1 library1 T C CTT 4 0 3 0 0 100
+sample1 library1 T G GTC 1 0 1 0 0 100
+sample1 library1 T G ATG 4 0 4 0 0 100
+sample1 library1 T G TTC 3 0 3 0 0 100
+sample1 library1 T G GTA 4 0 3 0 0 100
+sample1 library1 T G TTA 0 0 1 0 0 100
+sample1 library1 T G ATC 5 0 4 0 0 100
+sample1 library1 T G TTG 1 0 1 0 0 100
+sample1 library1 T G GTG 1 0 0 0 0 100
+sample1 library1 T G GTT 0 0 0 0 0 100
+sample1 library1 T G CTG 3 0 4 0 0 100
+sample1 library1 T G CTA 1 0 1 0 0 100
+sample1 library1 T G TTT 1 0 0 0 0 100
+sample1 library1 T G CTC 0 0 1 0 0 100
+sample1 library1 T G ATA 1 0 2 0 0 100
+sample1 library1 T G ATT 1 0 0 0 0 100
+sample1 library1 T G CTT 4 0 3 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.pre_adapter_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.pre_adapter_summary_metrics
new file mode 100644
index 0000000..068011b
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_context.pre_adapter_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=1 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_context REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 AAT 100 GAN 100 NAG 100 NA
+sample1 library1 A G 100 AAT 100 GAN 100 NAG 100 NA
+sample1 library1 A T 100 AAT 100 GAN 100 NAG 100 NA
+sample1 library1 C A 100 ACT 100 TCN 100 NCC 100 NA
+sample1 library1 C G 100 ACT 100 TCN 100 NCC 100 NA
+sample1 library1 C T 100 ACT 100 TCN 100 NCC 100 Deamination
+sample1 library1 G A 100 AGA 100 AGN 100 NGC 100 NA
+sample1 library1 G C 100 AGA 100 AGN 100 NGC 100 NA
+sample1 library1 G T 7 AGT 0 GGN 5 NGG 4 OxoG
+sample1 library1 T A 100 GTC 100 CTN 100 NTC 100 NA
+sample1 library1 T C 100 GTC 100 CTN 100 NTC 100 NA
+sample1 library1 T G 100 GTC 100 CTN 100 NTC 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.bait_bias_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.bait_bias_detail_metrics
new file mode 100644
index 0000000..c802eed
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.bait_bias_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics DB_SNP=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.dbsnp.vcf MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_dbsnp REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-p [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT FWD_CXT_REF_BASES FWD_CXT_ALT_BASES REV_CXT_REF_BASES REV_CXT_ALT_BASES FWD_ERROR_RATE REV_ERROR_RATE ERROR_RATE QSCORE
+sample1 library1 A C A 27 0 36 0 0 0 0 100
+sample1 library1 A G A 27 0 36 0 0 0 0 100
+sample1 library1 A T A 27 0 36 0 0 0 0 100
+sample1 library1 C A C 24 5 16 4 0.172414 0.2 0 100
+sample1 library1 C G C 24 0 16 0 0 0 0 100
+sample1 library1 C T C 24 12 16 0 0.333333 0 0.333333 5
+sample1 library1 G A G 16 0 24 12 0 0.333333 0 100
+sample1 library1 G C G 16 0 24 0 0 0 0 100
+sample1 library1 G T G 16 4 24 5 0.2 0.172414 0.027586 16
+sample1 library1 T A T 36 0 27 0 0 0 0 100
+sample1 library1 T C T 36 0 27 0 0 0 0 100
+sample1 library1 T G T 36 0 27 0 0 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.bait_bias_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.bait_bias_summary_metrics
new file mode 100644
index 0000000..0787767
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.bait_bias_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics DB_SNP=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.dbsnp.vcf MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_dbsnp REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-p [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 Cref
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 5 C 5 C 5 C 5 NA
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 16 G 16 G 16 G 16 Gref
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.pre_adapter_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.pre_adapter_detail_metrics
new file mode 100644
index 0000000..32e50e1
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.pre_adapter_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics DB_SNP=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.dbsnp.vcf MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_dbsnp REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-p [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT PRO_REF_BASES PRO_ALT_BASES CON_REF_BASES CON_ALT_BASES ERROR_RATE QSCORE
+sample1 library1 A C A 29 0 34 0 0 100
+sample1 library1 A G A 29 0 34 0 0 100
+sample1 library1 A T A 29 0 34 0 0 100
+sample1 library1 C A C 30 0 10 9 0 100
+sample1 library1 C G C 30 0 10 0 0 100
+sample1 library1 C T C 30 6 10 6 0 100
+sample1 library1 G A G 10 6 30 6 0 100
+sample1 library1 G C G 10 0 30 0 0 100
+sample1 library1 G T G 10 9 30 0 0.183673 7
+sample1 library1 T A T 34 0 29 0 0 100
+sample1 library1 T C T 34 0 29 0 0 100
+sample1 library1 T G T 34 0 29 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.pre_adapter_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.pre_adapter_summary_metrics
new file mode 100644
index 0000000..c8b546a
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_dbsnp.pre_adapter_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics DB_SNP=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.dbsnp.vcf MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_dbsnp REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projects/picard-p [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 NA
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 100 C 100 C 100 C 100 Deamination
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 7 G 7 G 7 G 7 OxoG
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.bait_bias_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.bait_bias_detail_metrics
new file mode 100644
index 0000000..5a5196f
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.bait_bias_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics INTERVALS=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.interval_list MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_intervals REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT FWD_CXT_REF_BASES FWD_CXT_ALT_BASES REV_CXT_REF_BASES REV_CXT_ALT_BASES FWD_ERROR_RATE REV_ERROR_RATE ERROR_RATE QSCORE
+sample1 library1 A C A 15 0 16 0 0 0 0 100
+sample1 library1 A G A 15 0 16 0 0 0 0 100
+sample1 library1 A T A 15 0 16 0 0 0 0 100
+sample1 library1 C A C 7 1 13 1 0.125 0.071429 0.053571 13
+sample1 library1 C G C 7 0 13 0 0 0 0 100
+sample1 library1 C T C 7 16 13 0 0.695652 0 0.695652 2
+sample1 library1 G A G 13 0 7 16 0 0.695652 0 100
+sample1 library1 G C G 13 0 7 0 0 0 0 100
+sample1 library1 G T G 13 1 7 1 0.071429 0.125 0 100
+sample1 library1 T A T 16 0 15 0 0 0 0 100
+sample1 library1 T C T 16 0 15 0 0 0 0 100
+sample1 library1 T G T 16 0 15 0 0 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.bait_bias_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.bait_bias_summary_metrics
new file mode 100644
index 0000000..410db24
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.bait_bias_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics INTERVALS=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.interval_list MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_intervals REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$BaitBiasSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 13 C 13 C 13 C 13 Cref
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 2 C 2 C 2 C 2 NA
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 100 G 100 G 100 G 100 Gref
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.pre_adapter_detail_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.pre_adapter_detail_metrics
new file mode 100644
index 0000000..91f0543
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.pre_adapter_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics INTERVALS=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.interval_list MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_intervals REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterDetailMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE CONTEXT PRO_REF_BASES PRO_ALT_BASES CON_REF_BASES CON_ALT_BASES ERROR_RATE QSCORE
+sample1 library1 A C A 16 0 15 0 0 100
+sample1 library1 A G A 16 0 15 0 0 100
+sample1 library1 A T A 16 0 15 0 0 100
+sample1 library1 C A C 13 0 7 2 0 100
+sample1 library1 C G C 13 0 7 0 0 100
+sample1 library1 C T C 13 8 7 8 0 100
+sample1 library1 G A G 7 8 13 8 0 100
+sample1 library1 G C G 7 0 13 0 0 100
+sample1 library1 G T G 7 2 13 0 0.090909 10
+sample1 library1 T A T 15 0 16 0 0 100
+sample1 library1 T C T 15 0 16 0 0 100
+sample1 library1 T G T 15 0 16 0 0 100
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.pre_adapter_summary_metrics b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.pre_adapter_summary_metrics
new file mode 100644
index 0000000..8ef4423
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/ExpectedMetricsOutput/with_intervals.pre_adapter_summary_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.analysis.artifacts.CollectSequencingArtifactMetrics INTERVALS=testdata/picard/analysis/CollectSequencingArtifactMetrics/test.interval_list MINIMUM_INSERT_SIZE=30 MAXIMUM_INSERT_SIZE=30 CONTEXT_SIZE=0 INPUT=/Users/msooknah/Documents/gp_projects/picard-private/Picard-public/testdata/picard/analysis/CollectSequencingArtifactMetrics/test.sam OUTPUT=/Users/msooknah/Documents/scratch/picardgroup/oxog/unit/tmp_output/with_intervals REFERENCE_SEQUENCE=/Users/msooknah/Documents/gp_projec [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Mar 19 17:31:03 EDT 2015
+
+## METRICS CLASS picard.analysis.artifacts.SequencingArtifactMetrics$PreAdapterSummaryMetrics
+SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE WORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
+sample1 library1 A C 100 A 100 A 100 A 100 NA
+sample1 library1 A G 100 A 100 A 100 A 100 NA
+sample1 library1 A T 100 A 100 A 100 A 100 NA
+sample1 library1 C A 100 C 100 C 100 C 100 NA
+sample1 library1 C G 100 C 100 C 100 C 100 NA
+sample1 library1 C T 100 C 100 C 100 C 100 Deamination
+sample1 library1 G A 100 G 100 G 100 G 100 NA
+sample1 library1 G C 100 G 100 G 100 G 100 NA
+sample1 library1 G T 10 G 10 G 10 G 10 OxoG
+sample1 library1 T A 100 T 100 T 100 T 100 NA
+sample1 library1 T C 100 T 100 T 100 T 100 NA
+sample1 library1 T G 100 T 100 T 100 T 100 NA
+
+
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/readme.txt b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/readme.txt
new file mode 100644
index 0000000..485ef5e
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/readme.txt
@@ -0,0 +1,24 @@
+Description of reads (may be out of order):
+
+perfect_fr/1 - read 1+ with no artifacts
+perfect_fr/2 - read 2- with no artifacts
+nbases_fr/1 - read 1+ with no artifacts, but some Ns in REFERENCE (contexts with an N _anywhere_ will be skipped)
+nbases_fr/2 - read 2- with no artifacts, but some Ns in READ (N sites will be skipped, but otherwise do not affect context)
+pro_oxog_fr/1 - read 1+ consistent with OxoG (G>T)
+pro_oxog_fr/2 - read 2- consistent with OxoG (G>T)
+pro_oxog_rf/1 - read 1- consistent with OxoG (C>A)
+pro_oxog_rf/2 - read 2+ consistent with OxoG (C>A)
+pro_ffpe_fr/1 - read 1+ consistent with FFPE (C>T)
+pro_ffpe_fr/2 - read 2- consistent with FFPE (C>T)
+con_ffpe_rf/1 - read 1- INconsistent with FFPE (C>T)
+con_ffpe_rf/2 - read 2+ INconsistent with FFPE (C>T)
+indel_oxog_fr/1 - read 1+ with insertion, deletion and OxoG artifact (indel sites will be skipped, but otherwise do not affect context)
+indel_oxog_fr/2 - read 2- with insertion, deletion and OxoG artifact (indel sites will be skipped, but otherwise do not affect context)
+unmapped_mate/1 - mapped read 1 with unmapped mate (may be filtered out)
+unmapped_mate/2 - unmapped read 2 with mapped mate (mate may be filtered out)
+duplicate/1 - duplicate (should always be filtered out)
+duplicate/2 - duplicate (should always be filtered out)
+non_primary/1 - non-primary alignment (should always be filtered out)
+non_primary/2 - non-primary alignment (should always be filtered out)
+low_quality/1 - has some low BASE qualities (those sites may be skipped)
+low_quality/2 - has a low MAPPING quality (may be filtered out)
\ No newline at end of file
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.dbsnp.vcf b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.dbsnp.vcf
new file mode 100644
index 0000000..c5d75a9
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.dbsnp.vcf
@@ -0,0 +1,6 @@
+##fileformat=VCFv4.2
+#CHROM POS ID REF ALT QUAL FILTER INFO
+chr1 6 oxog_snp_1 G T . PASS .
+chr1 9 oxog_snp_2 G T . PASS .
+chr2 15 insertion C CT . PASS .
+chr2 35 deletion CG C . PASS .
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.dbsnp.vcf.idx b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.dbsnp.vcf.idx
new file mode 100644
index 0000000..5a09aa3
Binary files /dev/null and b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.dbsnp.vcf.idx differ
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.fasta b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.fasta
new file mode 100644
index 0000000..054e2ab
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.fasta
@@ -0,0 +1,18 @@
+>chr1
+TTCATGCTGA
+AGCCCTCTTA
+CGATCGTACA
+GATGCAAATA
+TTAACAAACC
+>chr2
+CATNNNNACA
+AGCGCGTCCT
+ACCAGACGCG
+CTTCCGATCT
+GAGAGCATAC
+>chr3
+CGTATGCGCT
+TTTTATGTCG
+CCCACAGTGC
+CTAGTATAGC
+CCCTGCTAAT
\ No newline at end of file
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.interval_list b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.interval_list
new file mode 100644
index 0000000..8f171af
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.interval_list
@@ -0,0 +1,6 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chr1 LN:50
+ at SQ SN:chr2 LN:50
+ at SQ SN:chr3 LN:50
+chr1 25 50 + target_1
+chr2 10 50 + target_2
diff --git a/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.sam b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.sam
new file mode 100644
index 0000000..4dde356
--- /dev/null
+++ b/testdata/picard/analysis/artifacts/CollectSequencingArtifactMetrics/test.sam
@@ -0,0 +1,27 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chr1 LN:50
+ at SQ SN:chr2 LN:50
+ at SQ SN:chr3 LN:50
+ at RG ID:0 SM:sample1 LB:library1
+perfect_fr/1 99 chr1 1 40 10M chr1 21 30 TTCATGCTGA ?????????? RG:Z:0
+pro_oxog_fr/1 99 chr1 1 40 10M chr1 21 30 TTCATTCTTA ?????????? RG:Z:0
+unmapped_mate/1 73 chr1 1 40 10M * 0 0 TTCATGCTGA ?????????? RG:Z:0
+duplicate/1 1123 chr1 1 40 10M chr1 21 30 TTCATGCTGA ?????????? RG:Z:0
+non_primary/1 355 chr1 1 40 10M chr1 21 30 TTCATGCTGA ?????????? RG:Z:0
+low_quality/1 99 chr1 1 40 10M chr1 21 30 TTCATGCTGA ?!?!?!?!?! RG:Z:0
+pro_oxog_rf/1 83 chr1 11 40 10M chr1 31 30 AGAAATATTA ?????????? RG:Z:0
+perfect_fr/2 147 chr1 21 40 10M chr1 1 30 CGATCGTACA ?????????? RG:Z:0
+pro_oxog_fr/2 147 chr1 21 40 10M chr1 1 30 CTATCTTACA ?????????? RG:Z:0
+duplicate/2 1171 chr1 21 40 10M chr1 1 30 CGATCGTACA ?????????? RG:Z:0
+non_primary/2 403 chr1 21 40 10M chr1 1 30 CGATCGTACA ?????????? RG:Z:0
+low_quality/2 147 chr1 21 0 10M chr1 1 30 CGATCGTACA ?????????? RG:Z:0
+pro_oxog_rf/2 163 chr1 31 40 10M chr1 11 30 GATGAAAATA ?????????? RG:Z:0
+nbases_fr/1 99 chr2 1 40 10M chr2 21 30 CATAGCAACA ?????????? RG:Z:0
+pro_ffpe_fr/1 99 chr2 11 40 10M chr2 31 30 AGTGTGTTTT ?????????? RG:Z:0
+con_ffpe_rf/1 83 chr2 11 40 10M chr2 31 30 AGTGTGTTTT ?????????? RG:Z:0
+nbases_fr/2 147 chr2 21 40 10M chr2 1 30 ACCNNNNGCG ?????????? RG:Z:0
+pro_ffpe_fr/2 147 chr2 31 40 10M chr2 11 30 TTTTTGATTT ?????????? RG:Z:0
+con_ffpe_rf/2 163 chr2 31 40 10M chr2 11 30 TTTTTGATTT ?????????? RG:Z:0
+indel_oxog_fr/1 99 chr3 1 40 3M1I3M1D3M chr3 21 30 CGTAATGTCT ?????????? RG:Z:0
+indel_oxog_fr/2 147 chr3 21 40 3M1D3M1I3M chr3 1 30 CCCCATGTGC ?????????? RG:Z:0
+unmapped_mate/2 133 * 0 0 * chr1 1 0 CGATCGTACA ?????????? RG:Z:0
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
copy to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C1.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C1.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C1.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C1.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C10.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C10.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C10.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C10.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C100.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C100.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C100.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C100.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C101.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C101.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C101.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C101.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C102.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C102.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C102.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C102.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C103.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C103.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C103.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C103.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C104.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C104.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C104.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C104.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C105.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C105.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C105.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C105.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C106.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C106.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C106.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C106.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C107.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C107.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C107.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C107.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C108.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C108.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C108.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C108.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C109.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C109.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C109.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C109.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C11.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C11.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C11.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C11.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C110.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C110.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C110.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C110.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C111.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C111.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C111.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C111.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C112.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C112.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C112.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C112.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C113.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C113.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C113.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C113.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C114.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C114.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C114.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C114.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C115.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C115.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C115.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C115.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C116.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C116.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C116.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C116.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C117.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C117.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C117.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C117.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C118.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C118.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C118.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C118.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C119.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C119.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C119.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C119.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C12.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C12.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C12.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C12.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C120.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C120.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C120.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C120.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C121.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C121.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C121.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C121.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C122.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C122.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C122.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C122.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C123.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C123.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C123.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C123.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C124.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C124.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C124.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C124.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C125.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C125.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C125.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C125.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C126.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C126.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C126.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C126.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C127.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C127.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C127.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C127.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C128.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C128.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C128.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C128.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C129.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C129.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C129.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C129.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C13.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C13.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C13.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C13.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C130.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C130.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C130.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C130.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C131.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C131.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C131.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C131.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C132.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C132.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C132.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C132.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C133.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C133.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C133.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C133.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C134.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C134.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C134.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C134.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C135.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C135.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C135.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C135.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C136.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C136.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C136.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C136.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C137.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C137.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C137.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C137.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C138.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C138.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C138.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C138.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C139.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C139.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C139.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C139.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C14.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C14.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C14.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C14.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C140.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C140.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C140.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C140.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C141.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C141.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C141.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C141.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C142.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C142.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C142.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C142.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C143.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C143.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C143.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C143.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C144.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C144.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C144.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C144.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C145.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C145.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C145.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C145.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C146.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C146.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C146.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C146.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C147.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C147.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C147.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C147.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C148.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C148.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C148.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C148.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C149.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C149.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C149.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C149.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C15.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C15.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C15.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C15.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C150.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C150.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C150.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C150.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C151.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C151.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C151.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C151.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C152.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C152.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C152.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C152.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C153.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C153.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C153.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C153.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C154.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C154.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C154.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C154.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C155.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C155.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C155.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C155.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C156.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C156.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C156.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C156.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C157.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C157.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C157.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C157.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C158.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C158.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C158.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C158.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C159.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C159.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C159.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C159.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C16.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C16.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C16.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C16.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C160.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C160.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C160.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C160.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C161.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C161.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C161.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C161.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C162.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C162.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C162.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C162.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C163.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C163.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C163.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C163.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C164.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C164.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C164.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C164.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C165.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C165.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C165.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C165.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C166.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C166.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C166.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C166.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C167.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C167.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C167.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C167.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C168.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C168.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C168.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C168.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C169.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C169.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C169.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C169.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C17.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C17.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C17.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C17.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C170.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C170.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C170.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C170.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C171.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C171.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C171.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C171.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C172.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C172.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C172.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C172.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C173.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C173.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C173.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C173.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C174.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C174.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C174.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C174.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C175.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C175.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C175.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C175.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C176.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C176.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C176.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C176.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C177.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C177.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C177.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C177.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C178.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C178.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C178.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C178.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C179.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C179.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C179.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C179.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C18.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C18.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C18.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C18.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C180.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C180.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C180.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C180.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C181.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C181.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C181.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C181.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C182.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C182.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C182.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C182.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C183.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C183.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C183.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C183.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C184.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C184.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C184.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C184.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C185.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C185.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C185.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C185.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C186.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C186.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C186.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C186.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C187.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C187.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C187.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C187.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C188.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C188.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C188.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C188.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C189.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C189.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C189.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C189.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C19.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C19.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C19.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C19.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C190.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C190.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C190.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C190.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C191.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C191.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C191.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C191.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C192.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C192.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C192.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C192.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C193.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C193.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C193.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C193.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C194.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C194.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C194.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C194.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C195.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C195.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C195.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C195.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C196.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C196.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C196.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C196.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C197.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C197.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C197.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C197.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C198.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C198.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C198.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C198.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C199.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C199.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C199.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C199.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C2.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C2.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C2.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C2.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C20.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C20.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C20.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C20.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C200.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C200.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C200.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C200.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C201.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C201.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C201.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C201.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C202.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C202.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C202.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C202.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C203.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C203.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C203.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C203.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C204.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C204.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C204.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C204.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C205.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C205.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C205.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C205.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C206.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C206.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C206.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C206.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C207.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C207.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C207.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C207.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C208.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C208.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C208.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C208.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C209.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C209.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C209.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C209.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C21.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C21.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C21.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C21.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C210.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C210.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C210.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C210.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C211.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C211.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C211.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C211.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C212.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C212.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C212.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C212.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C213.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C213.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C213.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C213.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C214.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C214.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C214.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C214.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C215.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C215.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C215.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C215.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C216.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C216.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C216.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C216.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C217.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C217.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C217.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C217.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C218.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C218.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C218.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C218.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C219.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C219.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C219.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C219.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C22.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C22.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C22.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C22.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C220.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C220.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C220.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C220.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C221.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C221.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C221.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C221.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C222.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C222.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C222.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C222.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C223.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C223.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C223.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C223.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C224.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C224.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C224.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C224.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C225.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C225.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C225.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C225.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C226.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C226.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C226.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C226.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C227.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C227.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C227.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C227.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C228.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C228.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C228.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C228.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C229.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C229.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C229.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C229.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C23.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C23.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C23.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C23.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C230.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C230.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C230.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C230.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C231.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C231.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C231.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C231.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C232.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C232.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C232.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C232.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C233.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C233.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C233.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C233.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C234.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C234.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C234.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C234.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C235.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C235.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C235.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C235.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C236.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C236.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C236.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C236.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C237.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C237.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C237.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C237.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C238.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C238.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C238.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C238.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C239.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C239.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C239.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C239.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C24.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C24.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C24.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C24.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C240.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C240.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C240.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C240.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C241.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C241.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C241.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C241.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C242.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C242.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C242.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C242.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C243.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C243.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C243.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C243.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C244.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C244.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C244.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C244.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C245.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C245.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C245.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C245.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C246.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C246.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C246.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C246.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C247.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C247.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C247.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C247.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C248.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C248.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C248.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C248.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C249.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C249.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C249.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C249.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C25.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C25.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C25.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C25.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C250.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C250.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C250.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C250.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C26.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C26.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C26.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C26.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C27.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C27.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C27.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C27.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C28.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C28.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C28.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C28.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C29.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C29.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C29.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C29.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C3.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C3.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C3.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C3.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C30.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C30.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C30.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C30.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C31.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C31.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C31.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C31.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C32.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C32.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C32.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C32.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C33.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C33.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C33.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C33.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C34.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C34.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C34.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C34.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C35.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C35.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C35.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C35.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C36.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C36.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C36.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C36.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C37.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C37.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C37.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C37.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C38.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C38.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C38.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C38.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C39.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C39.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C39.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C39.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C4.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C4.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C4.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C4.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C40.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C40.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C40.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C40.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C41.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C41.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C41.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C41.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C42.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C42.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C42.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C42.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C43.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C43.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C43.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C43.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C44.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C44.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C44.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C44.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C45.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C45.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C45.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C45.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C46.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C46.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C46.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C46.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C47.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C47.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C47.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C47.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C48.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C48.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C48.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C48.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C49.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C49.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C49.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C49.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C5.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C5.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C5.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C5.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C50.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C50.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C50.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C50.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C51.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C51.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C51.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C51.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C52.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C52.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C52.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C52.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C53.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C53.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C53.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C53.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C54.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C54.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C54.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C54.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C55.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C55.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C55.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C55.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C56.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C56.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C56.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C56.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C57.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C57.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C57.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C57.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C58.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C58.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C58.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C58.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C59.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C59.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C59.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C59.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C6.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C6.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C6.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C6.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C60.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C60.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C60.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C60.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C61.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C61.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C61.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C61.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C62.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C62.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C62.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C62.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C63.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C63.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C63.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C63.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C64.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C64.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C64.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C64.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C65.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C65.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C65.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C65.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C66.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C66.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C66.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C66.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C67.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C67.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C67.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C67.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C68.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C68.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C68.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C68.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C69.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C69.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C69.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C69.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C7.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C7.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C7.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C7.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C70.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C70.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C70.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C70.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C71.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C71.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C71.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C71.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C72.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C72.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C72.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C72.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C73.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C73.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C73.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C73.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C74.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C74.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C74.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C74.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C75.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C75.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C75.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C75.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C76.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C76.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C76.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C76.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C77.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C77.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C77.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C77.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C78.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C78.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C78.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C78.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C79.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C79.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C79.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C79.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C8.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C8.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C8.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C8.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C80.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C80.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C80.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C80.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C81.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C81.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C81.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C81.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C82.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C82.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C82.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C82.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C83.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C83.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C83.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C83.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C84.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C84.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C84.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C84.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C85.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C85.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C85.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C85.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C86.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C86.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C86.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C86.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C87.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C87.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C87.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C87.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C88.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C88.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C88.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C88.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C89.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C89.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C89.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C89.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C9.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C9.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C9.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C9.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C90.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C90.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C90.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C90.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C91.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C91.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C91.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C91.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C92.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C92.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C92.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C92.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C93.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C93.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C93.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C93.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C94.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C94.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C94.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C94.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C95.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C95.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C95.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C95.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C96.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C96.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C96.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C96.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C97.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C97.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C97.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C97.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C98.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C98.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C98.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C98.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C99.1/s_2_1101.bcl b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C99.1/s_2_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C99.1/s_2_1101.bcl
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/C99.1/s_2_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/s_2_1101.filter b/testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/s_2_1101.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/s_2_1101.filter
rename to testdata/picard/illumina/125T125T/Data/Intensities/BaseCalls/L002/s_2_1101.filter
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs b/testdata/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs
similarity index 100%
copy from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs
copy to testdata/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/L002/s_2_1101.clocs b/testdata/picard/illumina/125T125T/Data/Intensities/L002/s_2_1101.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/L002/s_2_1101.clocs
rename to testdata/picard/illumina/125T125T/Data/Intensities/L002/s_2_1101.clocs
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1201.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1201.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1201.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1201.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_2101.bcl b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_2101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_2101.bcl
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_2101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1201.filter b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1201.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1201.filter
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1201.filter
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_2101.filter b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_2101.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_2101.filter
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_2101.filter
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1201_barcode.txt.gz b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1201_barcode.txt.gz
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1201_barcode.txt.gz
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1201_barcode.txt.gz
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_2101_barcode.txt.gz b/testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_2101_barcode.txt.gz
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_2101_barcode.txt.gz
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_2101_barcode.txt.gz
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1101.clocs b/testdata/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1101.clocs
similarity index 100%
copy from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1101.clocs
copy to testdata/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1101.clocs
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1201.clocs b/testdata/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1201.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1201.clocs
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1201.clocs
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_2101.clocs b/testdata/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_2101.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_2101.clocs
rename to testdata/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_2101.clocs
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAAAAA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AAAAAAAA.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAAAAA.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AAAAAAAA.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAAAAA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AAAAAAAA.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAAAAA.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AAAAAAAA.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAAAAA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AAAAAAAA.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAAAAA.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AAAAAAAA.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAGAAG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AAAAGAAG.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAGAAG.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AAAAGAAG.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAGAAG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AAAAGAAG.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAGAAG.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AAAAGAAG.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAGAAG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AAAAGAAG.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AAAAGAAG.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AAAAGAAG.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.1.fastq
new file mode 100644
index 0000000..a7b70ea
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1138:2141 1:N:0:AACAATGG
+NTTACCAAGGTTTTCTGTTTAGTGA
++
+#1=DDFFFHHFHHJJJIHJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1206:2126 1:N:0:AACAATGG
+NATTCTGCCATATTGGTCCGACAGT
++
+#1=DDFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1077:2139 1:N:0:AACAATGG
+CACAGGCTTCCACGGACTTAACGTC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1112:2245 1:N:0:AACAATGG
+TGCCATCTGCTCTGGGAAGCACCAG
++
+1:=DDDDDFBC:DEFIFFFIEF at BE
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.2.fastq
new file mode 100644
index 0000000..afac0c6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1138:2141 2:N:0:AACAATGG
+TCCGATCTGCTTCAGGTCGATCAGA
++
+CCCFFFFFHGHHHJJIGHIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1206:2126 2:N:0:AACAATGG
+ATCTGTCCAGTGGTGCACTGAATGT
++
+CCCFFFFFHHHHHHIIJJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1077:2139 2:N:0:AACAATGG
+NATTAGTTGGCGGATGAAGCAGATA
++
+#4=DFFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1112:2245 2:N:0:AACAATGG
+TCGTAGTGTTGTAATTTCGTCTTCT
++
+?8?DBDDDCCFCAACGGFFCBFFAE
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.barcode_1.fastq
new file mode 100644
index 0000000..82cdde4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AACAATGG.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1138:2141 :N:0:AACAATGG
+AACAATGG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1206:2126 :N:0:AACAATGG
+AACAATGG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1077:2139 :N:0:AACAATGG
+AACAATGG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1112:2245 :N:0:AACAATGG
+AACAATGG
++
+@@?BBDDD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.1.fastq
new file mode 100644
index 0000000..1c1c29f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1197:2200 1:N:0:AACGCATT
+GGGCGCCCCGTGAGGACCCAGTCCT
++
+ at C@FFADDFFCFCEHIIJIJJIEFC
+ at machine1:HiMom:abcdeACXX:1:1101:1308:2153 1:Y:0:AACGCATT
+TTTTGGAAGAGACCTCAATTACTGT
++
+???DDDDD?:22AE:A2<3,AF?3A
+ at machine1:HiMom:abcdeACXX:1:1101:1452:2132 1:N:0:AACGCATT
+NCGTCCTGGAAAACGGGGCGCGGCT
++
+#1=BDBDDFHHHHF at FHDHIGIIII
+ at machine1:HiMom:abcdeACXX:1:1201:1150:2161 1:N:0:AACGCATT
+AAGTCACCTAATATCTTTTTTTTTT
++
+@@<??;?D?CFD,A4CDDHFBIIID
+ at machine1:HiMom:abcdeACXX:1:2101:1240:2197 1:Y:0:AACGCATT
+ATAAAACATAGCAATATTTTCCTAT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1336:2109 1:N:0:AACGCATT
+NACTATCAGGATCGTGGCTATTTTG
++
+#1BDDFFFHHHHHJIJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1427:2081 1:N:0:AACGCATT
+NCGAGTGCCTAGTGGGCCACTTTTG
++
+#4=DDBDFHHHHFHIJJJJIJJJJI
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.2.fastq
new file mode 100644
index 0000000..6e43a81
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.2.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1197:2200 2:N:0:AACGCATT
+ATATTCCACTGGAACCACAGAACCC
++
+@@@FFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1308:2153 2:Y:0:AACGCATT
+TCTGTAAGGTAATCCCCGCATGTGT
++
+1?1=4===AFFDFFGFDGFB at CFB:
+ at machine1:HiMom:abcdeACXX:1:1101:1452:2132 2:N:0:AACGCATT
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHHHHJJJJJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1150:2161 2:N:0:AACGCATT
+TTCTCACTACTGTGATTGTGCCACT
++
+ at C@FFFFFGHHHHGIIIICEHCFGH
+ at machine1:HiMom:abcdeACXX:1:2101:1240:2197 2:Y:0:AACGCATT
+ACTGGAGATCCTTGTTACATGCCCA
++
+??+++A:DD?:ADEE@::C4:C<E:
+ at machine1:HiMom:abcdeACXX:1:2101:1336:2109 2:N:0:AACGCATT
+AGACCAGAACAGCTCCAGGTGCTCC
++
+CCCFFFFFHHHHHJJJJJJCGHIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1427:2081 2:N:0:AACGCATT
+CCGACTTCCATGGCCACCGTCCTGC
++
+CCCFFFFFHHHHHJJJIIGFIIJJI
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.barcode_1.fastq
new file mode 100644
index 0000000..8fa98a2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AACGCATT.barcode_1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1197:2200 :N:0:AACGCATT
+AACGCATT
++
+ at CCFDFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1308:2153 :Y:0:AACGCATT
+AACGCATT
++
+:?@B?@DD
+ at machine1:HiMom:abcdeACXX:1:1101:1452:2132 :N:0:AACGCATT
+AACGCATT
++
+ at CCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1150:2161 :N:0:AACGCATT
+AACGCATT
++
+@@@FDDDD
+ at machine1:HiMom:abcdeACXX:1:2101:1240:2197 :Y:0:AACGCATT
+AACGCATT
++
+88+AD@?8
+ at machine1:HiMom:abcdeACXX:1:2101:1336:2109 :N:0:AACGCATT
+AACGCATT
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1427:2081 :N:0:AACGCATT
+AACGCATT
++
+CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAAAATT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAAAATT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAAAATT.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACAAAATT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAAAATT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAAAATT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAAAATT.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACAAAATT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAAAATT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAAAATT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACAAAATT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACAAAATT.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.1.fastq
new file mode 100644
index 0000000..5fc0cdd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1236:2121 1:N:0:ACAGGTAT
+NGGTGCTTCATATCCCTCTAGAGGA
++
+#1=BDDFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1341:2116 1:N:0:ACAGGTAT
+NAGAAGCCCCAGGAGGAAGACAGTC
++
+#1=DDFFFHHHHHHHJIIJJJJJGI
+ at machine1:HiMom:abcdeACXX:1:2101:1063:2206 1:N:0:ACAGGTAT
+TCCTATTCGCCTACACAATTCTCCG
++
+CCCFFFFFHHHHHJJJJJJJHJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1325:2083 1:N:0:ACAGGTAT
+NCAGAAGAAAGGGCCTTGTCGGAGG
++
+#1=DDDDDHHFHDGI at EEHG:?FA8
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.2.fastq
new file mode 100644
index 0000000..a01d307
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1236:2121 2:N:0:ACAGGTAT
+TTGCGCTTACTTTGTAGCCTTCATC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1341:2116 2:N:0:ACAGGTAT
+ATAACAGCGAGACTGGCAACTTAAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1063:2206 2:N:0:ACAGGTAT
+NTGCTAGGATGAGGATGGATAGTAA
++
+#1=DDDFFHHHHHJHIIJHIIIHHJ
+ at machine1:HiMom:abcdeACXX:1:2101:1325:2083 2:N:0:ACAGGTAT
+TGTGCTCTTCCGATCTGGAGAAAAA
++
+#########################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.barcode_1.fastq
new file mode 100644
index 0000000..22e52fa
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACAGGTAT.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1236:2121 :N:0:ACAGGTAT
+ACAGGTAT
++
+CCCFFDDF
+ at machine1:HiMom:abcdeACXX:1:1201:1341:2116 :N:0:ACAGGTAT
+ACAGGTAT
++
+CCCFFBDD
+ at machine1:HiMom:abcdeACXX:1:2101:1063:2206 :N:0:ACAGGTAT
+ACAGGTAT
++
+CCCFFDFF
+ at machine1:HiMom:abcdeACXX:1:2101:1325:2083 :N:0:ACAGGTAT
+ACAGGTAT
++
+@@@BD=DD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.1.fastq
new file mode 100644
index 0000000..29bc1af
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:2101:1048:2238 1:N:0:ACAGTTGA
+NCTGCCGTGTCCTGACTTCTGGAAT
++
+#1:B?ADDACF<DCG;EG<FHH at CE
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2193 1:N:0:ACAGTTGA
+TTTTCTTGGCCTCTGTTTTTTTTTT
++
+BCCFDFFFHHFFHJIGIJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.2.fastq
new file mode 100644
index 0000000..572f8c2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:2101:1048:2238 2:N:0:ACAGTTGA
+NGTCACATCGTTGAAGCACTGGATC
++
+#11ADDDB<CFFHCHGDBHGIIIII
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2193 2:N:0:ACAGTTGA
+AGGCATGACACTGCATTTTAAATAC
++
+@@@DDDDDHFFHHGGDFHFHIIHGG
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.barcode_1.fastq
new file mode 100644
index 0000000..5c55767
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACAGTTGA.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:2101:1048:2238 :N:0:ACAGTTGA
+ACAGTTGA
++
+?@7DDDDA
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2193 :N:0:ACAGTTGA
+ACAGTTGA
++
+CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACCAGTTG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACCAGTTG.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACCAGTTG.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACCAGTTG.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACCAGTTG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACCAGTTG.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACCAGTTG.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACCAGTTG.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACCAGTTG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACCAGTTG.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACCAGTTG.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACCAGTTG.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACGAAATC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACGAAATC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACGAAATC.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACGAAATC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACGAAATC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACGAAATC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACGAAATC.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACGAAATC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACGAAATC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACGAAATC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACGAAATC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACGAAATC.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.1.fastq
new file mode 100644
index 0000000..0789790
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1259:2152 1:N:0:ACTAAGAC
+CACCTATAATCCCAGCTACTCCAGA
++
+CCCFFFFFHHHHHJJJJJJIJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1261:2127 1:Y:0:ACTAAGAC
+NTGAAATCTGGATAGGCTGGAGTTA
++
+#0-@@@###################
+ at machine1:HiMom:abcdeACXX:1:2101:1021:2209 1:N:0:ACTAAGAC
+NGGCCCCACCCTCCTCCAGCACGTC
++
+#1=DDFFFHHHHHJJJJJJHIIHFH
+ at machine1:HiMom:abcdeACXX:1:2101:1262:2128 1:Y:0:ACTAAGAC
+AGCAGAAGGGCAAAAGCTGGCTTGA
++
+9;<@:@###################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.2.fastq
new file mode 100644
index 0000000..2a6ad1b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1259:2152 2:N:0:ACTAAGAC
+ATTTTTATATTTTTTTAGACATAGG
++
+CCCFFFFFGHHHHJJJJIGIIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1261:2127 2:Y:0:ACTAAGAC
+TTTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFHGHHHJJIFDDDDDDDD
+ at machine1:HiMom:abcdeACXX:1:2101:1021:2209 2:N:0:ACTAAGAC
+NNGGAAGGCTGCTAGCTGGCCAGAG
++
+##08@>??@@??@?????????>?@
+ at machine1:HiMom:abcdeACXX:1:2101:1262:2128 2:Y:0:ACTAAGAC
+TCTTGTGGTAACTTTTCTGACACCT
++
+-(---9@;@?:8>?4:>?@######
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.barcode_1.fastq
new file mode 100644
index 0000000..e674b5f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACTAAGAC.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1259:2152 :N:0:ACTAAGAC
+ACTAAGAC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1261:2127 :Y:0:ACTAAGAC
+ACTAAGAC
++
+>7+ at A7A7
+ at machine1:HiMom:abcdeACXX:1:2101:1021:2209 :N:0:ACTAAGAC
+ACTAAGAC
++
+ at CCDFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1262:2128 :Y:0:ACTAAGAC
+ACTAAGAC
++
+1+8?ADD8
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTACC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTGTACC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTACC.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACTGTACC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTACC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTGTACC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTACC.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACTGTACC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTACC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTGTACC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/ACTGTACC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/ACTGTACC.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.1.fastq
new file mode 100644
index 0000000..b474248
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1458:2109 1:N:0:ACTGTATC
+NGAGACCATAGAGCGGATGCTTTCA
++
+#1=DDDFFHHGHGIJJIGIIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1105:2131 1:N:0:ACTGTATC
+TTGGAACACAGCGGGAATCACAGCA
++
+CCCFFFFFHHHHHJIJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1349:2084 1:N:0:ACTGTATC
+NCAAGTAGCAGTGTCACGCCTTAGC
++
+#1=DDBDDADFDDBEH at HC=CEGG@
+ at machine1:HiMom:abcdeACXX:1:2101:1365:2094 1:N:0:ACTGTATC
+NAAGGTGAAGGCCGGCGCGCTCGCC
++
+#1=BDDDFFHHHHJGGGIGFIHIIJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.2.fastq
new file mode 100644
index 0000000..0f0f127
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1458:2109 2:N:0:ACTGTATC
+GATACGAACACACAAGAACTTTTTT
++
+CCCFFFFFHHHHHJJJJJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1105:2131 2:N:0:ACTGTATC
+CAGCAGCAGCAACAGCAGAAACATG
++
+CCCFFFFFHHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1349:2084 2:N:0:ACTGTATC
+AGTCTGAATCATTGGTGTCTGAAGA
++
+<5;??=>=>>?##############
+ at machine1:HiMom:abcdeACXX:1:2101:1365:2094 2:N:0:ACTGTATC
+GCTCTTCCGATCTTGTGCTCTTCCG
++
+CCCFFFFDHFHHGJJIIJIJJIHII
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.barcode_1.fastq
new file mode 100644
index 0000000..6a8b924
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ACTGTATC.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1458:2109 :N:0:ACTGTATC
+ACTGTATC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1105:2131 :N:0:ACTGTATC
+ACTGTATC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1349:2084 :N:0:ACTGTATC
+ACTGTATC
++
+=;7+22<A
+ at machine1:HiMom:abcdeACXX:1:2101:1365:2094 :N:0:ACTGTATC
+ACTGTACC
++
+########
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGAAAAGA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGAAAAGA.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AGAAAAGA.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AGAAAAGA.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGAAAAGA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGAAAAGA.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AGAAAAGA.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AGAAAAGA.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/AGAAAAGA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGAAAAGA.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/AGAAAAGA.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/AGAAAAGA.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.1.fastq
new file mode 100644
index 0000000..014fee9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1406:2222 1:N:0:AGCATGGA
+CTCCCCCCGGGCTGAACCAGGGTAC
++
+CCCFFDDDDHDFHIIIIIIIII9DG
+ at machine1:HiMom:abcdeACXX:1:1201:1291:2158 1:N:0:AGCATGGA
+AGAAGGGGAAAGCCTTCATCTTGGC
++
+BCBFFFFFHHHHHJJJJJIIFIJIJ
+ at machine1:HiMom:abcdeACXX:1:2101:1370:2116 1:N:0:AGCATGGA
+NTGGTGGTCCATAGAGATTTGAAAC
++
+#1:4BD7DACF?FCA:4+<ACHIIH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.2.fastq
new file mode 100644
index 0000000..5df80ec
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.2.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1406:2222 2:N:0:AGCATGGA
+GGCTGGACTCCCCTGGTTCTGGGCA
++
+;?@DDDBD?FHDFGIIIGIGHHIII
+ at machine1:HiMom:abcdeACXX:1:1201:1291:2158 2:N:0:AGCATGGA
+CGTGTGCTCTTCCGATCTGATGGGC
++
+ at CCFFFDD?FHHFGEHHIIDHIIII
+ at machine1:HiMom:abcdeACXX:1:2101:1370:2116 2:N:0:AGCATGGA
+CACCATCTGACATCATGTTTGAAAG
++
+@@@DFFFDFFHDHIGBHHII<HEDB
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.barcode_1.fastq
new file mode 100644
index 0000000..75daae1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGCATGGA.barcode_1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1406:2222 :N:0:AGCATGGA
+AGCATGGA
++
+C@@DBFEF
+ at machine1:HiMom:abcdeACXX:1:1201:1291:2158 :N:0:AGCATGGA
+AGCATGGA
++
+ at CCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1370:2116 :N:0:AGCATGGA
+AGCATGGA
++
+?:8A?3:B
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.1.fastq
new file mode 100644
index 0000000..eeb6b90
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1263:2236 1:Y:0:AGGTAAGG
+CTTTGAAGACATTGTGAGATCTGTA
++
+<==A<42 at C+A4A?,2A@=4 at 7A??
+ at machine1:HiMom:abcdeACXX:1:2101:1054:2162 1:N:0:AGGTAAGG
+NCCAGGTGTCTTCCCGGGCCCTGCC
++
+#1=DDFBDFHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2203 1:N:0:AGGTAAGG
+TCTCCATGTGAAACAAGCAAAAAGA
++
+CCCFFFFFHHHHGJJJIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1249:2231 1:N:0:AGGTAAGG
+GTTATTGATAGGATACTGTACAAAC
++
+ at BCFFFFDHHHHFIJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.2.fastq
new file mode 100644
index 0000000..8047140
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1263:2236 2:Y:0:AGGTAAGG
+AGTTCTTCAGTAATTTTAGTACTGC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1054:2162 2:N:0:AGGTAAGG
+NGGACAGGGAAGGGAAGGAAGGGTG
++
+#4=DDFDFHHHHHJIJIIDHHGICG
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2203 2:N:0:AGGTAAGG
+TTGGTTCACTTATGTATTTATGAAT
++
+ at CCFDFFFHHHHHJHIIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1249:2231 2:N:0:AGGTAAGG
+TCTCTCGGCCTTCCACTCTAGCATA
++
+@@@FFFFFFHHGHIJJJGJIIJHIJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.barcode_1.fastq
new file mode 100644
index 0000000..19fae2f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGGTAAGG.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1263:2236 :Y:0:AGGTAAGG
+AGGTAAGG
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1054:2162 :N:0:AGGTAAGG
+AGGTAAGG
++
+B at BDDFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2203 :N:0:AGGTAAGG
+AGGTAAGG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1249:2231 :N:0:AGGTAAGG
+AGGTAAGG
++
+@@CBDFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.1.fastq
new file mode 100644
index 0000000..dbfde57
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1150:2228 1:N:0:AGGTCGCA
+GCTACTCAGTAGACAGTCCCACCCT
++
+@@CADDDDFCFHHIIIIGGIIGGGI
+ at machine1:HiMom:abcdeACXX:1:1101:1491:2120 1:N:0:AGGTCGCA
+NGGCAGGTGCCCCCACTTGACTCTC
++
+#1?DFFFFGHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1190:2194 1:N:0:AGGTCGCA
+AACCTGGCGCTAAACCATTCGTAGA
++
+CCCFFFFFHHHHHJJJJJJJJIJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1188:2195 1:N:0:AGGTCGCA
+TTAGACCGTCGTGAGACAGGTTAGT
++
+ at CCFFFFFHHHHHJJJJJIIEHIJH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.2.fastq
new file mode 100644
index 0000000..642b31a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1150:2228 2:N:0:AGGTCGCA
+ATGGGAGGCGATTCCTAGGGGGTTG
++
+8?=DD8;@BH6DHD<FGGGEIGHIG
+ at machine1:HiMom:abcdeACXX:1:1101:1491:2120 2:N:0:AGGTCGCA
+GGCCAGGCTGAACTTCTGAGCTGCT
++
+CCCFFFFFHHHGHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1190:2194 2:N:0:AGGTCGCA
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1188:2195 2:N:0:AGGTCGCA
+GCACATACACCAAATGTCTGAACCT
++
+CCCFFFFFHHHHHJJJHIJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.barcode_1.fastq
new file mode 100644
index 0000000..7bc729d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/AGGTCGCA.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1150:2228 :N:0:AGGTCGCA
+AGGTCGCA
++
+@@@DDFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1491:2120 :N:0:AGGTCGCA
+AGGTCGCA
++
+BCCDFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1190:2194 :N:0:AGGTCGCA
+AGGTCGCA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1188:2195 :N:0:AGGTCGCA
+AGGTCGCA
++
+BCCDFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.1.fastq
new file mode 100644
index 0000000..26ed061
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1100:2207 1:N:0:ATTATCAA
+ACGACAGACGTTCTTTCTTTGCTGC
++
+CCCFFFFFHHFHHJIJJJJJHIJJH
+ at machine1:HiMom:abcdeACXX:1:1101:1157:2135 1:N:0:ATTATCAA
+NGGACATTGTAATCATTTCTTACAA
++
+#1=DD?DDHHHHHGGHIIIIIIIII
+ at machine1:HiMom:abcdeACXX:1:1101:1269:2170 1:N:0:ATTATCAA
+ACAGTGTGGGAGGCAGACGAAGAGA
++
+@@@DDDDDFA:C at EGA?FD<FFHII
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2217 1:Y:0:ATTATCAA
+NTTTCTCTGGGCGCAAAGATGTTCA
++
+#07;8=8<<99(:=@@/@7>>6=?>
+ at machine1:HiMom:abcdeACXX:1:1201:1118:2198 1:N:0:ATTATCAA
+CAAGTGTACAGGATTAGACTGGGTT
++
+BCCFDEBDHHHHHIJJJGIIIJJGH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.2.fastq
new file mode 100644
index 0000000..d5035ff
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.2.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1100:2207 2:N:0:ATTATCAA
+AGGCTNNNNNNNNNNNNGNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1157:2135 2:N:0:ATTATCAA
+TTTAAAGTCTTAATCAAAGATGATA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1269:2170 2:N:0:ATTATCAA
+TTCCAAGCCTGTGCTTTAAGGAAAA
++
+@@<ADBDBDF8DDCFH at GIE@@GGH
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2217 2:Y:0:ATTATCAA
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1118:2198 2:N:0:ATTATCAA
+AATAAACTTTATTAAAGCAGTTAAA
++
+C at CFFFFFHDHHHGIIIJJJIJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.barcode_1.fastq
new file mode 100644
index 0000000..bfe2de2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ATTATCAA.barcode_1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1100:2207 :N:0:ATTATCAA
+ATTATCAA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1157:2135 :N:0:ATTATCAA
+ATTATCAA
++
+C at CFFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1269:2170 :N:0:ATTATCAA
+ATTATCAA
++
+@@@DDDF?
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2217 :Y:0:ATTATCAA
+ATTATCAA
++
+;<;:BBDD
+ at machine1:HiMom:abcdeACXX:1:1201:1118:2198 :N:0:ATTATCAA
+ATTATCAA
++
+@@@DDBDD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.1.fastq
new file mode 100644
index 0000000..ce65a9e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1309:2210 1:N:0:ATTCCTCT
+ACACCAACCACCCAACTATCTATAA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2133 1:N:0:ATTCCTCT
+NAAAACTTGAGGATGCTATGCAAGC
++
+#1:B:ADDDDDDDEEAEBF9FFEBF
+ at machine1:HiMom:abcdeACXX:1:1201:1073:2225 1:N:0:ATTCCTCT
+GGGGCTGAGACCTTTGCTGATGGTG
++
+@@@FFFFFHHHGHJJJJJIIIGICH
+ at machine1:HiMom:abcdeACXX:1:1201:1242:2207 1:N:0:ATTCCTCT
+ATGGCAAAGTGGTGTCTGAGACCAA
++
+BCCFFFFFGHHHHHIIIJFHIJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.2.fastq
new file mode 100644
index 0000000..f2fc1e5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1309:2210 2:N:0:ATTCCTCT
+AGTGGGCTAGGGCATTTTTAATCTT
++
+@@?DFFDFHHHDFHJIJJIJGIIIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2133 2:N:0:ATTCCTCT
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1073:2225 2:N:0:ATTCCTCT
+CGTGTGCTCTTCCGATCTGGAGGGT
++
+ at BBDFFFFHHHHHJJJJJJJJJJJ:
+ at machine1:HiMom:abcdeACXX:1:1201:1242:2207 2:N:0:ATTCCTCT
+ATCTTTTATTGGCCTCCTGCTCCCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.barcode_1.fastq
new file mode 100644
index 0000000..ea5fd93
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/ATTCCTCT.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1309:2210 :N:0:ATTCCTCT
+ATTCCTCT
++
+?@@ADEEF
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2133 :N:0:ATTCCTCT
+ATTCCTCT
++
+8??=BBBA
+ at machine1:HiMom:abcdeACXX:1:1201:1073:2225 :N:0:ATTCCTCT
+ATTCCTCT
++
+B@@BDEFF
+ at machine1:HiMom:abcdeACXX:1:1201:1242:2207 :N:0:ATTCCTCT
+ATTCCTCT
++
+?BBDDDFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.1.fastq
new file mode 100644
index 0000000..c48bd97
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1140:2120 1:N:0:CAACTCTC
+NCCCCAACATTCTAATTATGCCTCA
++
+#1:BDFFDHFFDFIJJJIIJIIIII
+ at machine1:HiMom:abcdeACXX:1:1101:1328:2225 1:N:0:CAACTCTC
+GAAATGCATCTGTCTTAGAAACTGG
++
+??@=BDDDFDD<<,<2:C<F:FFEA
+ at machine1:HiMom:abcdeACXX:1:1201:1127:2112 1:Y:0:CAACTCTC
+NGTCAAGGATGTTCGTCGTGGCAAC
++
+#1=BDDDDDDDDDID<AE?@<CEEE
+ at machine1:HiMom:abcdeACXX:1:1201:1452:2143 1:N:0:CAACTCTC
+TATCCCCTCTAAGACGGACCTGGGT
++
+CCCFFFFFHHHHHJJIIIJJJJJJG
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2146 1:Y:0:CAACTCTC
+GTTCTCTGTCCCCAGGTCCTGTCTC
++
+===A7<7222<<=C=?+<7>@?ACB
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.2.fastq
new file mode 100644
index 0000000..23880ee
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.2.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1140:2120 2:N:0:CAACTCTC
+TTTTTTTTTTTTTAACTTTGCAAAT
++
+@@@DDDDDHHHHFB at 9FHI@BFH@@
+ at machine1:HiMom:abcdeACXX:1:1101:1328:2225 2:N:0:CAACTCTC
+AGGAAATTAGGACTTACCTGACATA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1127:2112 2:Y:0:CAACTCTC
+TAATCACCTGAGCAGTGAAGCCAGC
++
+@<@?BDDDHD?FDBHI?AHGGGDFH
+ at machine1:HiMom:abcdeACXX:1:1201:1452:2143 2:N:0:CAACTCTC
+TTTTAGTCTTAGCATTTACTTTCCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2146 2:Y:0:CAACTCTC
+TTTTTTTTTTTTTTTTTTTTTGGGC
++
+<<<@??@??@???????########
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.barcode_1.fastq
new file mode 100644
index 0000000..052fd17
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAACTCTC.barcode_1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1140:2120 :N:0:CAACTCTC
+CAACTCTC
++
+@@@DDFDF
+ at machine1:HiMom:abcdeACXX:1:1101:1328:2225 :N:0:CAACTCTC
+CAACTCTC
++
+??;=A:B=
+ at machine1:HiMom:abcdeACXX:1:1201:1127:2112 :Y:0:CAACTCTC
+CAACTCTC
++
+=??BA?BD
+ at machine1:HiMom:abcdeACXX:1:1201:1452:2143 :N:0:CAACTCTC
+CAACTCTC
++
+BC at DDFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2146 :Y:0:CAACTCTC
+CAACTCTC
++
+?@@1:DBD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGAC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAATAGAC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGAC.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CAATAGAC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGAC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAATAGAC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGAC.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CAATAGAC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGAC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAATAGAC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CAATAGAC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CAATAGAC.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.1.fastq
new file mode 100644
index 0000000..3b0d15e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1316:2126 1:N:0:CAATAGTC
+NAAAAAAAAAAAAAAAAAAAAAAAA
++
+#1BDFFFFHHHHHJJJJFDDDDDDD
+ at machine1:HiMom:abcdeACXX:1:1101:1399:2128 1:N:0:CAATAGTC
+NTGCCCTTCGTCCTGGGAAACGGGG
++
+#1BDFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1054:2151 1:N:0:CAATAGTC
+NTAGTGCTGGGCACTAAGTAATACC
++
+#4=DDDFFHHHHHJJJJJHIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1345:2181 1:N:0:CAATAGTC
+GGATAATCCTATTTATTACCTCAGA
++
+BBBDDFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2184 1:N:0:CAATAGTC
+TTTCAGATTGGTCATTGTTAGTGTA
++
+??@BDDDEHBHADHHIIEHDHFHFF
+ at machine1:HiMom:abcdeACXX:1:2101:1172:2152 1:Y:0:CAATAGTC
+AACACGGACAAAGGAGTCTAACACG
++
+<<<??8@@#################
+ at machine1:HiMom:abcdeACXX:1:2101:1491:2093 1:N:0:CAATAGTC
+NCTATGCCGATCGGGTGTCCGCACT
++
+#1=DDDDDHHFHHIIEHHHBGHGII
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.2.fastq
new file mode 100644
index 0000000..64b8243
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.2.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1316:2126 2:N:0:CAATAGTC
+TCTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFHHHHHJJJJHFDDDDDD
+ at machine1:HiMom:abcdeACXX:1:1101:1399:2128 2:N:0:CAATAGTC
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHHHHIJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1054:2151 2:N:0:CAATAGTC
+GTCAGGCACTGAGAATATATGGGTG
++
+CBCFFFFFHHHHHJJJJJJJJJJEG
+ at machine1:HiMom:abcdeACXX:1:1201:1345:2181 2:N:0:CAATAGTC
+ATACGGATGTGTTTAGGAGTGGGAC
++
+CCCFFFFFHHHHHIIJJHJFHIJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2184 2:N:0:CAATAGTC
+ATCTTTATTCATTTGTATGATCTTA
++
+@@BFFFFFHFFHFHIHIIJIJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1172:2152 2:Y:0:CAATAGTC
+ATCGTTTCTGGGGACTAGTGAGGCG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1491:2093 2:N:0:CAATAGTC
+AGAGACGGGGTCTCGCTATGTTGCC
++
+BCCDFFFFHHHHHJIIJJJJIJIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.barcode_1.fastq
new file mode 100644
index 0000000..1b351d4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAATAGTC.barcode_1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1316:2126 :N:0:CAATAGTC
+CAATAGAC
++
+1>>7A###
+ at machine1:HiMom:abcdeACXX:1:1101:1399:2128 :N:0:CAATAGTC
+CAATAGTC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1054:2151 :N:0:CAATAGTC
+CAATAGTC
++
+CCCFFFDF
+ at machine1:HiMom:abcdeACXX:1:1201:1345:2181 :N:0:CAATAGTC
+CAATAGTC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2184 :N:0:CAATAGTC
+CAATAGTC
++
+ at CCFFDDE
+ at machine1:HiMom:abcdeACXX:1:2101:1172:2152 :Y:0:CAATAGTC
+CAATAGTC
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1491:2093 :N:0:CAATAGTC
+CAATAGTC
++
+@@@FDEBD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGAT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGAT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGAT.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CAGCGGAT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGAT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGAT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGAT.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CAGCGGAT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGAT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGAT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CAGCGGAT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CAGCGGAT.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.1.fastq
new file mode 100644
index 0000000..9053f51
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1420:2213 1:N:0:CAGCGGTA
+TACCTGGTTGATCCTGCCAGTAGCA
++
+@@CFFFFDDHHGHJGGHIJJIHGBH
+ at machine1:HiMom:abcdeACXX:1:1201:1364:2113 1:N:0:CAGCGGTA
+NCACTCATTTTCTTATGTGGGATAT
++
+#1=DDFDFHHHHHIJJIFHIIHHHI
+ at machine1:HiMom:abcdeACXX:1:2101:1072:2170 1:N:0:CAGCGGTA
+ATCACCGCACTCATTTCCCGCTTCC
++
+CCCFFFFFHHHACEEGHIIBHIIII
+ at machine1:HiMom:abcdeACXX:1:2101:1123:2095 1:N:0:CAGCGGTA
+NTGGACAACATGTTCGAGAGCTACA
++
+#1=BBDDDFFFFDGFGIG?F;HHFI
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2236 1:Y:0:CAGCGGTA
+TTAAAGAGGTTCAGGGATGCAGAGT
++
+#########################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.2.fastq
new file mode 100644
index 0000000..83ddb69
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.2.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1420:2213 2:N:0:CAGCGGTA
+TTCACTGTACCGGCCGTGCGTACTT
++
+ at CCFFFFDHHHFGIJJJJJJGHIGG
+ at machine1:HiMom:abcdeACXX:1:1201:1364:2113 2:N:0:CAGCGGTA
+TAAAGAGAGCCAGTGGAGTTACGAC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1072:2170 2:N:0:CAGCGGTA
+NGGGGAGACAGAGAGGATCAGAAGT
++
+#4=BDDFDHHDFHEGFEGGIJIIIG
+ at machine1:HiMom:abcdeACXX:1:2101:1123:2095 2:N:0:CAGCGGTA
+TCCGCCTCCAGCTTCAGCTTCTCCT
++
+@@@FDDFFHHHHHJHGGJIJJJEHH
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2236 2:Y:0:CAGCGGTA
+TTTGAAGCCTCTTTATCCTTGGCAT
++
+#########################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.barcode_1.fastq
new file mode 100644
index 0000000..b9b5bba
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CAGCGGTA.barcode_1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1420:2213 :N:0:CAGCGGTA
+CAGCGGTA
++
+ at C@FFFDF
+ at machine1:HiMom:abcdeACXX:1:1201:1364:2113 :N:0:CAGCGGTA
+CAGCGGTA
++
+C at CFFF@D
+ at machine1:HiMom:abcdeACXX:1:2101:1072:2170 :N:0:CAGCGGTA
+CAGCGGTA
++
+B@@DFDDF
+ at machine1:HiMom:abcdeACXX:1:2101:1123:2095 :N:0:CAGCGGTA
+CAGCGGTA
++
+@?@DDF@@
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2236 :Y:0:CAGCGGTA
+TAGCGGTA
++
+########
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.1.fastq
new file mode 100644
index 0000000..c27e9fd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1083:2193 1:N:0:CCAACATT
+TTCTACCTCACCTTAGGGAGAAGAC
++
+@@@DDBDDD>F><C<4CG?EHGHIG
+ at machine1:HiMom:abcdeACXX:1:1101:1175:2197 1:N:0:CCAACATT
+CCCCTGAGGACACCATCCCACTCCA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1138:2227 1:Y:0:CCAACATT
+GCTGACACAATCTCTTCCGCCTGGT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1260:2165 1:N:0:CCAACATT
+GGACACGGACAGGATTGACAGATTG
++
+BCBFFFFFHHHHHHIIJHIIIFHIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1281:2133 1:N:0:CCAACATT
+NGGAAATCCAGAAAACATAGAAGAT
++
+#1=DDFFFHHHHHIJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1331:2162 1:N:0:CCAACATT
+ACGCTCGGCTAATTTTTGTATTTTT
++
+ at CCFFFDFHHHHHIJJJJHIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1186:2093 1:N:0:CCAACATT
+NCGACCATAAACGATGCCGACCGGC
++
+#4=DFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.2.fastq
new file mode 100644
index 0000000..80f6eba
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.2.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1083:2193 2:N:0:CCAACATT
+AGGCTNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1175:2197 2:N:0:CCAACATT
+AAGAGCTGGGGAACATCCAGAAAGG
++
+BC at FFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1138:2227 2:Y:0:CCAACATT
+GACAAATATAGGAAATAGAAGCTAT
++
+=1=A=AAA,2?4>7C<<4<A+3<AB
+ at machine1:HiMom:abcdeACXX:1:1201:1260:2165 2:N:0:CCAACATT
+ATCTGATCTAAGTTGGGGGACGCCG
++
+@@@FFDFFHHHHHJJJIJIIIGIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1281:2133 2:N:0:CCAACATT
+GCAACAAAATTTCATATGACTTAGC
++
+CCCFFFFFHHHHHJJIIIHICHIIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1331:2162 2:N:0:CCAACATT
+TAATCCCAGTACTTTGGGAGGCCAA
++
+CCCFFFFFHHHHHJJJJIJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1186:2093 2:N:0:CCAACATT
+AATGTTGGGAGGACAATGATGGAAA
++
+#########################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.barcode_1.fastq
new file mode 100644
index 0000000..569551b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CCAACATT.barcode_1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1083:2193 :N:0:CCAACATT
+CCAACATT
++
+?@;DD?BD
+ at machine1:HiMom:abcdeACXX:1:1101:1175:2197 :N:0:CCAACATT
+CCAACATT
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1138:2227 :Y:0:CCAACATT
+CCAACATT
++
+########
+ at machine1:HiMom:abcdeACXX:1:1201:1260:2165 :N:0:CCAACATT
+CCAACATT
++
+C at CFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1281:2133 :N:0:CCAACATT
+CCAACATT
++
+C at CFFFDF
+ at machine1:HiMom:abcdeACXX:1:1201:1331:2162 :N:0:CCAACATT
+CCAACATT
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1186:2093 :N:0:CCAACATT
+CCAACATT
++
+CCCFFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.1.fastq
new file mode 100644
index 0000000..c070e32
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1212:2230 1:N:0:CCAGCACC
+TTTCTATTAGCTCTTAGTAAGATTA
++
+CCCFFFFFHHHHHJJJIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1204:2228 1:N:0:CCAGCACC
+CCGATACGCTGAGTGTGGTTTGCGG
++
+CCCFFFFFHHHFHEGGHIHIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1100:2085 1:N:0:CCAGCACC
+NCACATGGATGAGGAGAATGAGGAT
++
+#1=DDFFFFHHHHJHIGIHHHIJEH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.2.fastq
new file mode 100644
index 0000000..cfb3783
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.2.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1212:2230 2:N:0:CCAGCACC
+TTTTAGCTTTATTGGGGAGGGGGTG
++
+CCCFFFFFHHGHHJJJJGJJJJJDF
+ at machine1:HiMom:abcdeACXX:1:1201:1204:2228 2:N:0:CCAGCACC
+TCTTCTTGTCGATGAGGAACTTGGT
++
+@?@FFFFFDHHGHJIJJGHIIJJJH
+ at machine1:HiMom:abcdeACXX:1:2101:1100:2085 2:N:0:CCAGCACC
+ATCTTGATCTCCTCCTTCTTGGCCT
++
+@@@DDDDDHHFHFEIIIIHHBAHBG
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.barcode_1.fastq
new file mode 100644
index 0000000..07b0fae
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CCAGCACC.barcode_1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1212:2230 :N:0:CCAGCACC
+CCAGCACC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1204:2228 :N:0:CCAGCACC
+CCAGCACC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1100:2085 :N:0:CCAGCACC
+CCAGCACC
++
+CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCATGCGT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCATGCGT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CCATGCGT.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CCATGCGT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCATGCGT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCATGCGT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CCATGCGT.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CCATGCGT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CCATGCGT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CCATGCGT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CCATGCGT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CCATGCGT.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.1.fastq
new file mode 100644
index 0000000..ab2fd21
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1122:2227 1:N:0:CGCCTTCC
+AGAAGACGAGGCTGAGAGTGACATC
++
+@@@FFFFFHHHDHJGHGHCHHJJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1160:2109 1:N:0:CGCCTTCC
+NAGAAGCCTTTGCACCCTGGGAGGA
++
+#1=DDDFFHHHHHJJJJJJJJIIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.2.fastq
new file mode 100644
index 0000000..89bc5bc
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1122:2227 2:N:0:CGCCTTCC
+GTCATATAAGGCCCAGTCCAAGGAA
++
+@@@FFFFFHHHGGIJIGGIJFIJII
+ at machine1:HiMom:abcdeACXX:1:1201:1160:2109 2:N:0:CGCCTTCC
+ACATCCTTCCCATGCCACCAACTCG
++
+CCCFFFFFGHHHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.barcode_1.fastq
new file mode 100644
index 0000000..4c987f7
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CGCCTTCC.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1122:2227 :N:0:CGCCTTCC
+CGCCTTCC
++
+@@@DDFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1160:2109 :N:0:CGCCTTCC
+CGCCTTCC
++
+C at BFFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.1.fastq
new file mode 100644
index 0000000..22dfb08
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1291:2150 1:N:0:CGCTATGT
+CGTGGGGAACCTGGCGCTAAACCAT
++
+ at BBFFFFFHHHHHJJJJIJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1314:2233 1:N:0:CGCTATGT
+GTTTATTGGGGCATTCCTTATCCCA
++
+@??DDDDBDHF>FCHGGGBFAAED9
+ at machine1:HiMom:abcdeACXX:1:1101:1441:2148 1:N:0:CGCTATGT
+ACTTTCACCGCTACACGACCGGGGG
++
+CCCFFFFFHGFFHIIFIHJIGGII>
+ at machine1:HiMom:abcdeACXX:1:1201:1043:2246 1:N:0:CGCTATGT
+NTTCTCGGCTGTCATGTGCAACATT
++
+#1=DDBDFHHHDFFBHGHGHIIJEH
+ at machine1:HiMom:abcdeACXX:1:1201:1134:2144 1:N:0:CGCTATGT
+TGCCAGGAAGTGTTTTTTCTGGGTC
++
+ at CCFFEFFHHFFFGIJJJJJJJJGH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.2.fastq
new file mode 100644
index 0000000..c96fdb8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.2.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1291:2150 2:N:0:CGCTATGT
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHFHHIJJJIIIGIJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1314:2233 2:N:0:CGCTATGT
+AGGAAAGTTGGGCTGACCTGACAGA
++
+@@<DDD;=FBFADBCGDEH?F;FCG
+ at machine1:HiMom:abcdeACXX:1:1101:1441:2148 2:N:0:CGCTATGT
+TTTTGGCTCTAGAGGGGGTAGAGGG
++
+CCCFFFFFHHDFBHIIJJ1?FGHIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1043:2246 2:N:0:CGCTATGT
+NGCATCATTTCNNGCTTCTCTCTGT
++
+#0;@@??@=@>##22=;@??><@??
+ at machine1:HiMom:abcdeACXX:1:1201:1134:2144 2:N:0:CGCTATGT
+AGTGTGAGTAATGGTTGAGAGGTGG
++
+B@?DDDFFFHHGHJHHGFIHHIFGI
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.barcode_1.fastq
new file mode 100644
index 0000000..fbfd111
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CGCTATGT.barcode_1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1291:2150 :N:0:CGCTATGT
+CGCTATGT
++
+@@@FFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1314:2233 :N:0:CGCTATGT
+CGCTATGT
++
+@<@?B@;A
+ at machine1:HiMom:abcdeACXX:1:1101:1441:2148 :N:0:CGCTATGT
+CGCTATGT
++
+@@BFFDDD
+ at machine1:HiMom:abcdeACXX:1:1201:1043:2246 :N:0:CGCTATGT
+CGCTATGT
++
+@<?DD:B=
+ at machine1:HiMom:abcdeACXX:1:1201:1134:2144 :N:0:CGCTATGT
+CGCTATGT
++
+CCCFFFFD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.1.fastq
new file mode 100644
index 0000000..d0aacee
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1363:2138 1:N:0:CTAACTCG
+NGTCTGGCCTGCACAGACATCCTAC
++
+#1=DDFFFHHHHHJJJIJJIJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1393:2143 1:N:0:CTAACTCG
+TGGTTGATCCTGCCAGTAGCATATG
++
+@@@ADADDFHFFDBHE?G at HIIIEE
+ at machine1:HiMom:abcdeACXX:1:2101:1273:2119 1:Y:0:CTAACTCG
+NAGATAAGAGTCCACACAGTTGAGT
++
+#11AAAAA<A?4=C=7?733<ACA3
+ at machine1:HiMom:abcdeACXX:1:2101:1414:2098 1:N:0:CTAACTCG
+NAGGACATCGATAAAGGCGAGGTGT
++
+#1=DDFFFHHHHHJJJJJJJJJHHG
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.2.fastq
new file mode 100644
index 0000000..eda5373
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1363:2138 2:N:0:CTAACTCG
+GTTCTTAAACCTGTTAGAACTTCTG
++
+C@@FFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1393:2143 2:N:0:CTAACTCG
+GATAAATGCACGCATCCCCCCCGCG
++
+C at CFFFFFGGHHHHJJJJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1273:2119 2:Y:0:CTAACTCG
+ATGATGGATCTTCTCTAACTTGTCA
++
+>=><AAAAA+2AA?CB4@@ABB3?A
+ at machine1:HiMom:abcdeACXX:1:2101:1414:2098 2:N:0:CTAACTCG
+TTGGGGCCGGTGCCGTCGGGCCCAA
++
+CCCFFFFFHHHHGJJIJJJJJJJIJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.barcode_1.fastq
new file mode 100644
index 0000000..748b2b5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTAACTCG.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1363:2138 :N:0:CTAACTCG
+CTAACTCG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1393:2143 :N:0:CTAACTCG
+CTAACTCG
++
+@@CFDDFD
+ at machine1:HiMom:abcdeACXX:1:2101:1273:2119 :Y:0:CTAACTCG
+CTAACTCG
++
+=++==ADB
+ at machine1:HiMom:abcdeACXX:1:2101:1414:2098 :N:0:CTAACTCG
+CTAACTCG
++
+CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGC.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CTATGCGC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGC.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CTATGCGC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/CTATGCGC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/CTATGCGC.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.1.fastq
new file mode 100644
index 0000000..4ca668c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1083:2121 1:N:0:CTATGCGT
+NAGAACTGGCGCTGCGGGATGAACC
++
+#1=BDFFFHHHHHJJJJJHIJIJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1185:2143 1:N:0:CTATGCGT
+ATCTGCCTGGTTCGGCCCGCCTGCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1219:2115 1:N:0:CTATGCGT
+NTATAGTGGAGGCCGGAGCAGGAAC
++
+#1:DABADHHHFHIIIGGHGIIIII
+ at machine1:HiMom:abcdeACXX:1:1201:1472:2121 1:Y:0:CTATGCGT
+NTAAAGTGTGAACAAGGAAGGTCAT
++
+#07>@<9=@################
+ at machine1:HiMom:abcdeACXX:1:2101:1013:2146 1:N:0:CTATGCGT
+NACACTGCTGCAGATGACAAGCAGC
++
+#4BDFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1231:2208 1:N:0:CTATGCGT
+ACGCCGCAAGTCAGAGCCCCCCAGA
++
+@@@DDDFFFFB:DBBEBEFDHBDDB
+ at machine1:HiMom:abcdeACXX:1:2101:1233:2133 1:Y:0:CTATGCGT
+GAGAGAAGCACTCTTGAGCGGGATA
++
+0;(@((@)2@###############
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.2.fastq
new file mode 100644
index 0000000..62f18ff
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.2.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1083:2121 2:N:0:CTATGCGT
+ACACACAACACCACCGCCCTCCCCC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1185:2143 2:N:0:CTATGCGT
+GCTGAAGGCCCGTGGGCCAGAGGTG
++
+ at CCFFFFFHHHHHJJJJJJJJJJHI
+ at machine1:HiMom:abcdeACXX:1:1201:1219:2115 2:N:0:CTATGCGT
+TGGGAGTAGTTCCCTGCTAAGGGAG
++
+???DBDBDADDDDIEID:AFFD:?8
+ at machine1:HiMom:abcdeACXX:1:1201:1472:2121 2:Y:0:CTATGCGT
+GTGTGCTCTTCCGATCTGGAGGATG
++
+=+=??A4A==A at 7A<?#########
+ at machine1:HiMom:abcdeACXX:1:2101:1013:2146 2:N:0:CTATGCGT
+NNNNCGCTAGAACCAACTTATTCAT
++
+####24=?@@?@?@@?@@@@@@?@@
+ at machine1:HiMom:abcdeACXX:1:2101:1231:2208 2:N:0:CTATGCGT
+AGCCAGTGTTGGTGTGTTGACTGTT
++
+@@;1ADABCF;BF<AACGCHEBHC<
+ at machine1:HiMom:abcdeACXX:1:2101:1233:2133 2:Y:0:CTATGCGT
+TTTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFGHHHHJJJFDDDDDDDD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.barcode_1.fastq
new file mode 100644
index 0000000..e684e0e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTATGCGT.barcode_1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1083:2121 :N:0:CTATGCGT
+CTATGCGT
++
+CCCFFFFD
+ at machine1:HiMom:abcdeACXX:1:1201:1185:2143 :N:0:CTATGCGT
+CTATGCGT
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1219:2115 :N:0:CTATGCGT
+CCATGCGT
++
+??<DDA?D
+ at machine1:HiMom:abcdeACXX:1:1201:1472:2121 :Y:0:CTATGCGT
+CTATGCGC
++
+;?=D####
+ at machine1:HiMom:abcdeACXX:1:2101:1013:2146 :N:0:CTATGCGT
+CTATGCGT
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1231:2208 :N:0:CTATGCGT
+CTATGCGT
++
+@<@?D8 at D
+ at machine1:HiMom:abcdeACXX:1:2101:1233:2133 :Y:0:CTATGCGT
+CTATGCGT
++
+=??B####
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.1.fastq
new file mode 100644
index 0000000..4a7196d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:2101:1102:2221 1:N:0:CTGCGGAT
+TTTCATCTTATTTCATTGGTTTATA
++
+CCCFFFFFHHHHHJIJJJJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1126:2082 1:N:0:CTGCGGAT
+NGTTTTAGGGGTGCGCAGGAGTCAA
++
+#11=A=DD?DF at D@CCGHIEFH at BG
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2172 1:N:0:CTGCGGAT
+TTTCTTCGCAGGATTTTTCTGAGCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.2.fastq
new file mode 100644
index 0000000..d94dbfe
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.2.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:2101:1102:2221 2:N:0:CTGCGGAT
+ATAACTGACTCTACTCAGTAGATTA
++
+CCCFFFFFHHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1126:2082 2:N:0:CTGCGGAT
+TCTCTTTCCACCTTGGTCACCTTCC
++
+ at C@DDDFFHHHHHJEGGIHHIJGIH
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2172 2:N:0:CTGCGGAT
+GGACTTCTAGGGGATTTAGCGGGGT
++
+CCCFFFFFHHHHHJJJJJJJJJJJD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.barcode_1.fastq
new file mode 100644
index 0000000..92dcd7d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTGCGGAT.barcode_1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:2101:1102:2221 :N:0:CTGCGGAT
+CTGCGGAT
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1126:2082 :N:0:CTGCGGAT
+CTGCGGAT
++
+@@@FFFDA
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2172 :N:0:CTGCGGAT
+CAGCGGAT
++
+C at CFFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.1.fastq
new file mode 100644
index 0000000..243a935
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.1.fastq
@@ -0,0 +1,24 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1403:2194 1:N:0:CTGTAATC
+CTAAACAGAGAGAAGGTTTCTCTTT
++
+CCCFFFFFHHHHHJJJFHIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1045:2105 1:Y:0:CTGTAATC
+NTAAAGAGAAATCAAGAATACTATT
++
+#-4@?(@)@@###############
+ at machine1:HiMom:abcdeACXX:1:1201:1483:2126 1:Y:0:CTGTAATC
+NTGATAAGGTGTTGCTATGTTACCC
++
+#1:D?DDDDA??2:<CC4:AEDF>?
+ at machine1:HiMom:abcdeACXX:1:2101:1011:2102 1:N:0:CTGTAATC
+NAAACAAAACTGTAGAACTGTGTAT
++
+#1=DDFFFHHHHHJJIJJJIHHHJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1245:2154 1:N:0:CTGTAATC
+TCGTTAAGTATATTCTTAGGTATTT
++
+CCCFFDFFFHFHHIIJJJJJFJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1386:2105 1:N:0:CTGTAATC
+NTACTAAAGAAAAAGTTGAAGAACT
++
+#1=DDDFFHHHHHJJGHIJJJJIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.2.fastq
new file mode 100644
index 0000000..f07aa1e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.2.fastq
@@ -0,0 +1,24 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1403:2194 2:N:0:CTGTAATC
+ACATGGTGAAACCCTGTCTCTACTA
++
+CCCFFFDDHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1045:2105 2:Y:0:CTGTAATC
+NTTTTTTTTTTNNTTTTTTTTTTTT
++
+#0;@@@@@@@?##0:????????=<
+ at machine1:HiMom:abcdeACXX:1:1201:1483:2126 2:Y:0:CTGTAATC
+GCATGCAGCTGGGTGCTGTGATGCA
++
+@@@DDDBB<DD8F<<CGG?AA?A<F
+ at machine1:HiMom:abcdeACXX:1:2101:1011:2102 2:N:0:CTGTAATC
+NNNNNTCACACATAATTTTAAAATT
++
+#####22@?@@??@@@@@??@@@@@
+ at machine1:HiMom:abcdeACXX:1:2101:1245:2154 2:N:0:CTGTAATC
+ACCAATCAGTAGCACCACTATACAC
++
+CCCFFFFFHHHHHJJJJJJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1386:2105 2:N:0:CTGTAATC
+AGGAATTATTCTTCTGCCATAAGGT
++
+B@@DDFFFHGFHHIJJJJJGIGIJH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.barcode_1.fastq
new file mode 100644
index 0000000..152bcc2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/CTGTAATC.barcode_1.fastq
@@ -0,0 +1,24 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1403:2194 :N:0:CTGTAATC
+CTGTAATC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1045:2105 :Y:0:CTGTAATC
+CTGTAATC
++
+1112 at A##
+ at machine1:HiMom:abcdeACXX:1:1201:1483:2126 :Y:0:CTGTAATC
+CTGTAATC
++
+ at C<DD:B?
+ at machine1:HiMom:abcdeACXX:1:2101:1011:2102 :N:0:CTGTAATC
+CTGTAATC
++
+C at CFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1245:2154 :N:0:CTGTAATC
+CTGTAATC
++
+ at CCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1386:2105 :N:0:CTGTAATC
+CTGTAATC
++
+CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAAAAAA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAAAAAAA.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAAAAAA.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GAAAAAAA.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAAAAAA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAAAAAAA.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAAAAAA.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GAAAAAAA.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAAAAAA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAAAAAAA.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GAAAAAAA.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GAAAAAAA.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAACGAT..1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAACGAT..1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GAACGAT..1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GAACGAT..1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAACGAT..2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAACGAT..2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GAACGAT..2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GAACGAT..2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GAACGAT..barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAACGAT..barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GAACGAT..barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GAACGAT..barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.1.fastq
new file mode 100644
index 0000000..b55be00
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1338:2175 1:N:0:GAAGGAAG
+CCCACCTTCCGGCGGCCGAAGACAC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1028:2202 1:N:0:GAAGGAAG
+NTCCTGGGAAACGGGGCGCGGCTGG
++
+#4BDDDFFHHHHHIJIIJJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:2101:1084:2188 1:N:0:GAAGGAAG
+TTGCTGCATGGGTTAATTGAGAATA
++
+CCCFFFFFHHHHFHHIIJJIJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.2.fastq
new file mode 100644
index 0000000..20c71da
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.2.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1338:2175 2:N:0:GAAGGAAG
+GCTTGTTGGCTTTAACATCCACAAT
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1028:2202 2:N:0:GAAGGAAG
+NNAAACNCNTNNNNNNNGGNNTGNN
++
+##42@?###################
+ at machine1:HiMom:abcdeACXX:1:2101:1084:2188 2:N:0:GAAGGAAG
+TACAAGGTCAAAATCAGCAACAAGT
++
+CCCFFFFDHHHHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.barcode_1.fastq
new file mode 100644
index 0000000..f38597a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GAAGGAAG.barcode_1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1338:2175 :N:0:GAAGGAAG
+GAAGGAAG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1028:2202 :N:0:GAAGGAAG
+GAAGGAAG
++
+CCCFFDFF
+ at machine1:HiMom:abcdeACXX:1:2101:1084:2188 :N:0:GAAGGAAG
+GAAGGAAG
++
+ at B@FFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.1.fastq
new file mode 100644
index 0000000..41fcefa
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1089:2172 1:N:0:GACCAGGA
+TTCCAGCATGCGGTTTAAGTAGGAT
++
+ at CCFDFDBDFBF:<CEBHAFHHICH
+ at machine1:HiMom:abcdeACXX:1:1101:1347:2149 1:N:0:GACCAGGA
+GAGCAGATCGGAAGAGCACAGATCG
++
+@@@FFDDDHHHHHIJJBGGHJIHEG
+ at machine1:HiMom:abcdeACXX:1:1201:1095:2146 1:N:0:GACCAGGA
+GCTGAGTCATGTAGTAAGCCTGTGC
++
+BB at FDDDFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1123:2161 1:Y:0:GACCAGGA
+CACTAACTCCTGACCTCAAATAATC
++
+?7?=DD?DD+CDBE>E at EEF@+<CF
+ at machine1:HiMom:abcdeACXX:1:1201:1439:2156 1:N:0:GACCAGGA
+AGCCGCGAGGTGCTGGCGGACTTCC
++
+:;1BDDDAA88A<?<E1C:D#####
+ at machine1:HiMom:abcdeACXX:1:2101:1207:2084 1:Y:0:GACCAGGA
+NTAGATGACCAAAACTTGCAGGGCA
++
+#1:A<?@A+7A=?CBCCBCCBAAAA
+ at machine1:HiMom:abcdeACXX:1:2101:1312:2105 1:N:0:GACCAGGA
+NTTCCCTCAGGATAGCTGGCGCTCT
++
+#1=DDFFFGHGHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.2.fastq
new file mode 100644
index 0000000..46cd249
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.2.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1089:2172 2:N:0:GACCAGGA
+TCCGGNNNNNNNNNNNNNNNNNNNN
++
+:<<??####################
+ at machine1:HiMom:abcdeACXX:1:1101:1347:2149 2:N:0:GACCAGGA
+GCTCTTCCGATCTGTGCTCTTCCGA
++
+CCCFFFFFDFHHFIJDGIGGHGIGH
+ at machine1:HiMom:abcdeACXX:1:1201:1095:2146 2:N:0:GACCAGGA
+ACTGACAACACCAAATGCTGCTAAG
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1123:2161 2:Y:0:GACCAGGA
+CGTGTGCTCTTCCGATCTGCATACA
++
+===AAAA8AAAA<AAA)@CBA9>A#
+ at machine1:HiMom:abcdeACXX:1:1201:1439:2156 2:N:0:GACCAGGA
+GGAGATTATTTGCCTTGAAGTAAGC
++
+-;(22<>>@>8@>8;@#########
+ at machine1:HiMom:abcdeACXX:1:2101:1207:2084 2:Y:0:GACCAGGA
+TCACCACTCTTCTGGGCATCCCCTG
++
+@@@DDEDFHHHHHIJIHHGHGGJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1312:2105 2:N:0:GACCAGGA
+GTTGAGAATAGGTTGAGATCGTTTC
++
+ at CCFFFDFHHFHDHIJJJJJJJIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.barcode_1.fastq
new file mode 100644
index 0000000..3a43c99
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGA.barcode_1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1089:2172 :N:0:GACCAGGA
+GACCAGGA
++
+?@@FF;=B
+ at machine1:HiMom:abcdeACXX:1:1101:1347:2149 :N:0:GACCAGGA
+GACCAGGA
++
+CC at DFFFD
+ at machine1:HiMom:abcdeACXX:1:1201:1095:2146 :N:0:GACCAGGA
+GACCAGGA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1123:2161 :Y:0:GACCAGGA
+GACCAGGA
++
+?;@DFDFF
+ at machine1:HiMom:abcdeACXX:1:1201:1439:2156 :N:0:GACCAGGA
+GACCAGGC
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1207:2084 :Y:0:GACCAGGA
+GACCAGGA
++
+@@CDFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1312:2105 :N:0:GACCAGGA
+GACCAGGA
++
+CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGC.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GACCAGGC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGC.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GACCAGGC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCAGGC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/GACCAGGC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/GACCAGGC.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.1.fastq
new file mode 100644
index 0000000..2e2beb8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1218:2200 1:N:0:GACCGTTG
+GCACCGGAAGAGCACACAGATCGGA
++
+CCCFFFFDFHGHHJJIJIJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1257:2223 1:N:0:GACCGTTG
+TGTATTCGAGAGATCAAAGAGAGAG
++
+@@=DDBDD?FFHHEIDBDFCEDBAF
+ at machine1:HiMom:abcdeACXX:1:1201:1180:2119 1:N:0:GACCGTTG
+NTGAAAGATTTAGAGAGCTTACAAA
++
+#1=DDDDDHHHGHJJIIJJJJIJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1036:2087 1:N:0:GACCGTTG
+NTGTAGTTTCTTTAGGCAAATTTGT
++
+#4=BDDDFHHHHHJJJJJJIIJJJI
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.2.fastq
new file mode 100644
index 0000000..876a1af
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1218:2200 2:N:0:GACCGTTG
+GCTCTTCCGATCTATCTGCTCGTCC
++
+(-(=34???3;@#############
+ at machine1:HiMom:abcdeACXX:1:1101:1257:2223 2:N:0:GACCGTTG
+TGCTCTTCCGATCTTTTAGCAAAGC
++
+:?@DDBDDHFFHDGIGIIJJJGGGI
+ at machine1:HiMom:abcdeACXX:1:1201:1180:2119 2:N:0:GACCGTTG
+GCTCTAAATTTTGCTTTTCTACAGC
++
+CCCFFFFFHHHHHJJJJIJIJJIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1036:2087 2:N:0:GACCGTTG
+NGTCCACTTACGAAGCAAATACTTT
++
+#4=DDFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.barcode_1.fastq
new file mode 100644
index 0000000..fb6bf3f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCGTTG.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1218:2200 :N:0:GACCGTTG
+GACCGTTG
++
+ at CCFFDDF
+ at machine1:HiMom:abcdeACXX:1:1101:1257:2223 :N:0:GACCGTTG
+GACCGTTG
++
+;@@DD=DD
+ at machine1:HiMom:abcdeACXX:1:1201:1180:2119 :N:0:GACCGTTG
+GACCGTTG
++
+CCCFFDFF
+ at machine1:HiMom:abcdeACXX:1:2101:1036:2087 :N:0:GACCGTTG
+GACCGTTG
++
+B at CFFDFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.1.fastq
new file mode 100644
index 0000000..1f6b7ec
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1302:2244 1:N:0:GACCTAAC
+GGAAAAGACGGAAAGGTTCTATCTC
++
+ at C@DFFFDFHHHHJIJHHIJJJJJI
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.2.fastq
new file mode 100644
index 0000000..eb26829
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1302:2244 2:N:0:GACCTAAC
+TGAATACATATAACAAATGCAAAAA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.barcode_1.fastq
new file mode 100644
index 0000000..17c61fd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GACCTAAC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1302:2244 :N:0:GACCTAAC
+GACCTAAC
++
+CCCFFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.1.fastq
new file mode 100644
index 0000000..eca4c3a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1460:2176 1:N:0:GATATCCA
+AGTCCAGGCTGAGCCCAGGGAAGAA
++
+CCCFFFFFHHHHGJIJJIJJHIJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1031:2163 1:N:0:GATATCCA
+NTTTCCATGGCCGTCACCTTTGGGT
++
+#4=DDFFFHHHHHJJJJJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1226:2088 1:N:0:GATATCCA
+NGATCGGAAGAGCACACGTTTGACT
++
+#4=DAA=DDFHFHIIBFGHHIG>EG
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.2.fastq
new file mode 100644
index 0000000..33a2b39
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.2.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1460:2176 2:N:0:GATATCCA
+AGGAAAAAGACACAACAAGTCCAAC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1031:2163 2:N:0:GATATCCA
+NNACATTTGTCACCACTAGCCACCA
++
+##0<@?@@@@@@@@@@?@@@@@@@?
+ at machine1:HiMom:abcdeACXX:1:2101:1226:2088 2:N:0:GATATCCA
+GCTCTTCCGATCTAGGTAATAGCTA
++
+==?BDFFFDCDDHFFFAFHDHIJGJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.barcode_1.fastq
new file mode 100644
index 0000000..d27976c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GATATCCA.barcode_1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1460:2176 :N:0:GATATCCA
+GATATCCA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1031:2163 :N:0:GATATCCA
+GATATCCA
++
+B at BFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1226:2088 :N:0:GATATCCA
+GATATCCA
++
+@@@:DDDD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.1.fastq
new file mode 100644
index 0000000..3b50e29
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1111:2148 1:N:0:GCCGTCGA
+GTGGAGACCACCTCCGAGGCCTTGT
++
+BBCFFFFFHHHHHJJJIJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1221:2143 1:N:0:GCCGTCGA
+TTTGGTGGAAATTTTTTGTTATGAT
++
+CCCFFBDBHFD?FBFHIIGGIC at EF
+ at machine1:HiMom:abcdeACXX:1:1101:1327:2200 1:Y:0:GCCGTCGA
+AGGGGGATCCGCCGGGGGACCACAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1122:2136 1:N:0:GCCGTCGA
+GTAGGCGCTCAGCAAATACTTGTCG
++
+@@@DDDD8?<CACEHHBBHDAAFH@
+ at machine1:HiMom:abcdeACXX:1:2101:1459:2083 1:N:0:GCCGTCGA
+NCACACGCCACACGGAGCACACTTT
++
+#4=DDFFFHHHHHJJJJJJJJIIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.2.fastq
new file mode 100644
index 0000000..60f033c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.2.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1111:2148 2:N:0:GCCGTCGA
+GCGAANANNNNNNNNNNGGACGACN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1221:2143 2:N:0:GCCGTCGA
+CAATTGAATGTCTGCACAGCCGCTT
++
+@@@FFFFDHHHHHJJJIIIJGHIJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1327:2200 2:Y:0:GCCGTCGA
+GTCATCTGGGCTGTCGACAGGTGTC
++
+ at B@FFFFFHHHHGIJJJJJJIFHHI
+ at machine1:HiMom:abcdeACXX:1:2101:1122:2136 2:N:0:GCCGTCGA
+CTTGCCAGCCTGCAGGCCCCGCGGC
++
+???BBAABDD?DDIID)A:3<EADD
+ at machine1:HiMom:abcdeACXX:1:2101:1459:2083 2:N:0:GCCGTCGA
+ATTTCACCAAAATAATCAGAAGGCC
++
+CCCFFFFDBHGHHIGGIJFJJGGFH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.barcode_1.fastq
new file mode 100644
index 0000000..9b4fd3a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GCCGTCGA.barcode_1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1111:2148 :N:0:GCCGTCGA
+GCCGTCGA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1221:2143 :N:0:GCCGTCGA
+GCCGTCGA
++
+@@CDDDDF
+ at machine1:HiMom:abcdeACXX:1:1101:1327:2200 :Y:0:GCCGTCGA
+GCCGTCGA
++
+BCCFDFFD
+ at machine1:HiMom:abcdeACXX:1:2101:1122:2136 :N:0:GCCGTCGA
+GCCGTCGA
++
+?@<DDDD?
+ at machine1:HiMom:abcdeACXX:1:2101:1459:2083 :N:0:GCCGTCGA
+GCCGTCGA
++
+@@CFDDFD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.1.fastq
new file mode 100644
index 0000000..3c181dd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1165:2239 1:N:0:GCCTAGCC
+GGCGGAGGCAGCATTTCAGCTGTGA
++
+CCCFFDFFHHHHHIJJIGHHHJHHF
+ at machine1:HiMom:abcdeACXX:1:1101:1290:2225 1:N:0:GCCTAGCC
+CTTGGGCGCATGGTGAGGGAGGGAG
++
+@@@FFDDFHDFH??CBEBHHIGDCD
+ at machine1:HiMom:abcdeACXX:1:1201:1280:2179 1:N:0:GCCTAGCC
+TTCAAGGAATCGTCCTGCCTCAGCC
++
+BCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1300:2137 1:N:0:GCCTAGCC
+NTGTAATCCCAGCTCTCAGGGAGGC
++
+#1=ADDDDDDDBBA?@AE?E at FE8;
+ at machine1:HiMom:abcdeACXX:1:2101:1023:2237 1:Y:0:GCCTAGCC
+NTAAACAGCTTCTGCACAGCCAAAG
++
+#00@@?>=39>9;<412@?######
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.2.fastq
new file mode 100644
index 0000000..adc1c15
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.2.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1165:2239 2:N:0:GCCTAGCC
+ATGGAAGTCGAGACAGAAGTGAGAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1290:2225 2:N:0:GCCTAGCC
+TCAGTTCACTGGCAAAGACAGTCAC
++
+C@@FBEDDFHFHGIIICEHGDHBHE
+ at machine1:HiMom:abcdeACXX:1:1201:1280:2179 2:N:0:GCCTAGCC
+GAGGACTGCTTGAGTCCAGGAGTTC
++
+@@BFFDEFGHHHHIFGCHIJJJGGI
+ at machine1:HiMom:abcdeACXX:1:1201:1300:2137 2:N:0:GCCTAGCC
+GCTCTTCCGATCTTTTTTTTAATTT
++
+@@?DDDDDFDHADEHGIGGED3?FD
+ at machine1:HiMom:abcdeACXX:1:2101:1023:2237 2:Y:0:GCCTAGCC
+NNTTTGTTTGAGTTCCTTGTAGATT
++
+##0:=@?>?@???@:>?@??>?;?<
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.barcode_1.fastq
new file mode 100644
index 0000000..9920e3b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GCCTAGCC.barcode_1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1165:2239 :N:0:GCCTAGCC
+GCCTAGCC
++
+B@@DFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1290:2225 :N:0:GCCTAGCC
+GCCTAGCC
++
+?<@DFBBD
+ at machine1:HiMom:abcdeACXX:1:1201:1280:2179 :N:0:GCCTAGCC
+GCCTAGCC
++
+BCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1300:2137 :N:0:GCCTAGCC
+GCCTAGCC
++
+8?84B23?
+ at machine1:HiMom:abcdeACXX:1:2101:1023:2237 :Y:0:GCCTAGCC
+GCCTAGCC
++
+########
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.1.fastq
new file mode 100644
index 0000000..ad39be4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1188:2237 1:N:0:GTAACATC
+TCCCCCTCCCTTTTGCGCACACACC
++
+@?@DDADDHDHBDH<EFHIIHG?HF
+ at machine1:HiMom:abcdeACXX:1:2101:1208:2231 1:Y:0:GTAACATC
+TCACTAAACATCCAAACATCACTTT
++
+#########################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.2.fastq
new file mode 100644
index 0000000..a22dcdf
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1188:2237 2:N:0:GTAACATC
+GCTTCCTTCAAGACAGAAGTGAGAA
++
+CCCFFDDEFHHFFE at FDHHAIAFHG
+ at machine1:HiMom:abcdeACXX:1:2101:1208:2231 2:Y:0:GTAACATC
+CTTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFHHHHHJJJHFDDDDDDD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.barcode_1.fastq
new file mode 100644
index 0000000..e43e83f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GTAACATC.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1188:2237 :N:0:GTAACATC
+GTAACATC
++
+@@?DFFDF
+ at machine1:HiMom:abcdeACXX:1:2101:1208:2231 :Y:0:GTAACATC
+GTAACATC
++
+1+:A1A22
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.1.fastq
new file mode 100644
index 0000000..b48b617
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1069:2159 1:N:0:GTCCACAG
+TCCCTTACCATCAAATCAATTGNCC
++
+CCCFFFFFHHHHHJJJJJJJJJ#3A
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2109 1:N:0:GTCCACAG
+NCACCTCCTAGCCCCTCACTTCTGT
++
+#1=B;BDDHHHGFIIIIIIIIIGGG
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.2.fastq
new file mode 100644
index 0000000..5c3d1b5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1069:2159 2:N:0:GTCCACAG
+GACGTNNNNNNNNNNNNNNNNNNNN
++
+<<<@?####################
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2109 2:N:0:GTCCACAG
+ACGTGTGCTCTTCCCGATCTGTATA
++
+CCCFF?DDFBHHHJJIIDHJIJJJH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.barcode_1.fastq
new file mode 100644
index 0000000..8a71cab
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/GTCCACAG.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1069:2159 :N:0:GTCCACAG
+GTCCACAG
++
+ at BBFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2109 :N:0:GTCCACAG
+GTCCACAG
++
+CCCFFFFD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/N.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/N.1.fastq
new file mode 100644
index 0000000..aef9f77
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/N.1.fastq
@@ -0,0 +1,64 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1031:2224 1:Y:0:
+NAATANNNNNNNNNNNNTNNNNNNN
++
+#0;@@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1039:2147 1:Y:0:
+NCCAANGNNGGNNNNATGTAANNNN
++
+#4;@@#4##2<####43@@@@####
+ at machine1:HiMom:abcdeACXX:1:1101:1046:2175 1:Y:0:
+NTGCCNGNGTTNCGNGGTCTTNNNN
++
+#4;@@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1047:2122 1:Y:0:
+NCTAANGNACTNTGNGTGTGCNNNN
++
+#0;@@#4#3@@#3@#2<@@@@####
+ at machine1:HiMom:abcdeACXX:1:1101:1048:2197 1:Y:0:
+NCTCCNGNTCANCANGTGGAGNNNN
++
+#0;?@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1065:2193 1:N:0:
+GAAGTACGCCCTGCCCCTGGTTNGC
++
+?@@DAADAHHFHBEBEGGHG?####
+ at machine1:HiMom:abcdeACXX:1:1101:1162:2207 1:Y:0:
+ACCTTGAGGAGAACATAAGAGCAAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1159:2179 1:Y:0:
+GTTAGCACAGATATTGGATGAGTGA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1414:2174 1:Y:0:
+GCCAAAAAAAAGAACCAGCCCAAGG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1040:2208 1:Y:0:
+NATGCCCACCTCCCTCCTACGCACC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1059:2083 1:N:0:
+NAAGAGGGGTCAAGAGTTAAACTTA
++
+#1=DDFFFHFHHGIGHGHJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1143:2137 1:N:0:
+ATGCAGCAGCTGCCACGGAGCACCA
++
+CC at FFDFDFHFHHGIDHEHIGJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2182 1:Y:0:
+TTGTTTTGGCTTATAATGACAAGAA
++
+;;8-2).2())(<6=@8;?4??>>?
+ at machine1:HiMom:abcdeACXX:1:2101:1215:2110 1:N:0:
+NAATATAATTTGGAGACCCTTTGTT
++
+#1=DDDDDEDDDDIDDBB3ABAB##
+ at machine1:HiMom:abcdeACXX:1:2101:1285:2105 1:Y:0:
+NGCGGGGAGCCGGGCGTGGAATGCG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1450:2134 1:N:0:
+AGCACGCTGCCGCGGGACCTGCCCA
++
+?@@AD at DDHFH?DGIIIIG at FGFBF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/N.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/N.2.fastq
new file mode 100644
index 0000000..f044a63
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/N.2.fastq
@@ -0,0 +1,64 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1031:2224 2:Y:0:
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1039:2147 2:Y:0:
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1046:2175 2:Y:0:
+NNGGANNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1047:2122 2:Y:0:
+NNTCANNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1048:2197 2:Y:0:
+NNGTGNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1065:2193 2:N:0:
+NCTTGNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1162:2207 2:Y:0:
+TAAAACTGGGGAAGTTAGAGGAATG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1159:2179 2:Y:0:
+TTTTTTTTTATTTTTCTAAATACTT
++
+===AA####################
+ at machine1:HiMom:abcdeACXX:1:1201:1414:2174 2:Y:0:
+TTTTTTTTTTTTTTTTTTTTTTTTT
++
+@;@1BDADF????FFEB>B6=BBBB
+ at machine1:HiMom:abcdeACXX:1:2101:1040:2208 2:Y:0:
+NCTGATAGTCACTGAAATGAATTCA
++
+#-0=>(2 at .22@@############
+ at machine1:HiMom:abcdeACXX:1:2101:1059:2083 2:N:0:
+NGAATGTCTTAGAAGGATGCTTCTC
++
+#1=BDDDEHHGHHJJJJJIJJIIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1143:2137 2:N:0:
+GCTCTTCAGATCTAGGGGGAACAGC
++
+@@@DD?=DCAFFFHIIDG:EFHIII
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2182 2:Y:0:
+TTTTTTTTTTTTTTTTTTTTTTTTA
++
+9<<?@?@;5=?##############
+ at machine1:HiMom:abcdeACXX:1:2101:1215:2110 2:N:0:
+ATCTTTCCCCCATTAAGAACAGCAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1285:2105 2:Y:0:
+TGTCTATATCAACCAACACCTCTTC
++
+-(0(():94:9:???##########
+ at machine1:HiMom:abcdeACXX:1:2101:1450:2134 2:N:0:
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CC at FDFDFFDFHFGIIE1CGGHBGE
diff --git a/testdata/picard/illumina/25T8B25T/fastq/N.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/N.barcode_1.fastq
new file mode 100644
index 0000000..f9b35e3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/N.barcode_1.fastq
@@ -0,0 +1,64 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1031:2224 :Y:0:
+NNNNNNNN
++
+########
+ at machine1:HiMom:abcdeACXX:1:1101:1039:2147 :Y:0:
+NNNNNNNN
++
+########
+ at machine1:HiMom:abcdeACXX:1:1101:1046:2175 :Y:0:
+NNNNNNNN
++
+########
+ at machine1:HiMom:abcdeACXX:1:1101:1047:2122 :Y:0:
+NNNANNNN
++
+########
+ at machine1:HiMom:abcdeACXX:1:1101:1048:2197 :Y:0:
+NNNCNNNN
++
+########
+ at machine1:HiMom:abcdeACXX:1:1101:1065:2193 :N:0:
+GAACGATN
++
+########
+ at machine1:HiMom:abcdeACXX:1:1101:1162:2207 :Y:0:
+ACAAAATT
++
+########
+ at machine1:HiMom:abcdeACXX:1:1201:1159:2179 :Y:0:
+AAAAAAAA
++
+########
+ at machine1:HiMom:abcdeACXX:1:1201:1414:2174 :Y:0:
+AGAAAAGA
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1040:2208 :Y:0:
+ACGAAATC
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1059:2083 :N:0:
+TACCGTCT
++
+1:?D####
+ at machine1:HiMom:abcdeACXX:1:2101:1143:2137 :N:0:
+TCCGTCTA
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2182 :Y:0:
+GAAAAAAA
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1215:2110 :N:0:
+AAAAGAAG
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1285:2105 :Y:0:
+TATCTCGG
++
+########
+ at machine1:HiMom:abcdeACXX:1:2101:1450:2134 :N:0:
+ACCAGTTG
++
+ at C@DDDB?
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.1.fastq
new file mode 100644
index 0000000..11586af
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1064:2239 1:N:0:TAAGCACA
+CATGCAGCGCAAGTAGGTCTACAAG
++
+@@;DFAFFHHHHAHEGHFDGGFABG
+ at machine1:HiMom:abcdeACXX:1:2101:1258:2092 1:N:0:TAAGCACA
+NCACACACACACTCATTCACAGCTT
++
+#1=DDDFFHHHFHJJIJGGGIIGIJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.2.fastq
new file mode 100644
index 0000000..e1d510b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1064:2239 2:N:0:TAAGCACA
+GGGATGGGAGGGCGATGAGGACTAG
++
+8?@:DDDACC:FHHGIH<EGDDDFH
+ at machine1:HiMom:abcdeACXX:1:2101:1258:2092 2:N:0:TAAGCACA
+TTAGACAAAACACCAAAATAAAATA
++
+#########################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.barcode_1.fastq
new file mode 100644
index 0000000..c09def6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TAAGCACA.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1064:2239 :N:0:TAAGCACA
+TAAGCACA
++
+@@@FFADB
+ at machine1:HiMom:abcdeACXX:1:2101:1258:2092 :N:0:TAAGCACA
+TAAGCACA
++
+@@CDDFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TACCGTCT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TACCGTCT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TACCGTCT.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TACCGTCT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TACCGTCT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TACCGTCT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TACCGTCT.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TACCGTCT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TACCGTCT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TACCGTCT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TACCGTCT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TACCGTCT.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAGCGGTA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TAGCGGTA.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TAGCGGTA.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TAGCGGTA.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAGCGGTA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TAGCGGTA.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TAGCGGTA.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TAGCGGTA.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TAGCGGTA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TAGCGGTA.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TAGCGGTA.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TAGCGGTA.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCAGCC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCAGCC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCAGCC.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCAGCC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCAGCC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCAGCC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCAGCC.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCAGCC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCAGCC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCAGCC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCAGCC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCAGCC.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.1.fastq
new file mode 100644
index 0000000..db9ec5c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1071:2233 1:N:0:TATCCAGG
+TTTGACAGTCTCTGAATGAGAANGG
++
+CCCFFFFFHHHHHJIIIJJJIJ#4A
+ at machine1:HiMom:abcdeACXX:1:1201:1140:2125 1:N:0:TATCCAGG
+NTTTCAGTTCAGAGAACTGCAGAAT
++
+#1=DBDFDHHHHGJIJJJJJIIIJI
+ at machine1:HiMom:abcdeACXX:1:1201:1236:2187 1:N:0:TATCCAGG
+TTTAAATGGGTAAGAAGCCCGGCTC
++
+ at BCDDFEFHHDHHJJJJJIJJIJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1133:2239 1:N:0:TATCCAGG
+AGACAGAAGTACGGGAAGGCGAAGA
++
+@@@FFFFEHFHHHJJCGDHIIECD@
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.2.fastq
new file mode 100644
index 0000000..3cb85ea
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1071:2233 2:N:0:TATCCAGG
+GTTTGNNNNNNNNNNNNNNNNNNNN
++
+<<<@@####################
+ at machine1:HiMom:abcdeACXX:1:1201:1140:2125 2:N:0:TATCCAGG
+TTCATAAATTGGTCTTAGATGTTGC
++
+CC at FFFFFHHHHFGIJIIIJIJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1236:2187 2:N:0:TATCCAGG
+CTCCTTAGCGGATTCCGACTTCCAT
++
+CCCFFFFDHHHHGIJJIGIGIJJGG
+ at machine1:HiMom:abcdeACXX:1:2101:1133:2239 2:N:0:TATCCAGG
+AGCTTTTTGTTTCCTAGCTTGTCTT
++
+?@?DDFFFHHHHF4ACFHIJHHHGH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.barcode_1.fastq
new file mode 100644
index 0000000..743cd5c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TATCCAGG.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1071:2233 :N:0:TATCCAGG
+TATCCAGG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1140:2125 :N:0:TATCCAGG
+TATCCAGG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1236:2187 :N:0:TATCCAGG
+TATCCAGG
++
+@@BFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1133:2239 :N:0:TATCCAGG
+TATCCATG
++
+@@@BDDDF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCATG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCCATG.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCATG.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCCATG.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCATG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCCATG.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCATG.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCCATG.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCATG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCCATG.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCCATG.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCCATG.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTCGG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCTCGG.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTCGG.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCTCGG.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTCGG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCTCGG.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTCGG.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCTCGG.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTCGG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCTCGG.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TATCTCGG.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TATCTCGG.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.1.fastq
new file mode 100644
index 0000000..2635d7d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1267:2209 1:N:0:TATCTGCC
+GAGACGGAGGCCAACGGGGGCCTGG
++
+@@CFFFFD8FDHFHIGIBG?@BCDG
+ at machine1:HiMom:abcdeACXX:1:1101:1353:2226 1:N:0:TATCTGCC
+TTGCTTGTCTGTAAAGTATTTTATT
++
+ at C@DDFFDHHFHFHHIBGG>IHHII
+ at machine1:HiMom:abcdeACXX:1:1101:1435:2194 1:N:0:TATCTGCC
+GAGAAAGAACATGACTACAGAGATG
++
+CCCFFFFFHHHHHJJJJJJJJJHJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1084:2204 1:N:0:TATCTGCC
+GGCCCGTGGACGCCGCCGAAGAAGC
++
+CCCFFFFFHHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1142:2242 1:N:0:TATCTGCC
+TGTTGATAGTCCTTCTTATCTTAGT
++
+???DB?==CC2<AC:CC<CFEF<FF
+ at machine1:HiMom:abcdeACXX:1:1201:1187:2100 1:N:0:TATCTGCC
+NGCGGTAATTCCAGCTCCAATAGCG
++
+#1:BB2 at DHHFHHIIIIHHIIGHGG
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2109 1:N:0:TATCTGCC
+NCTGAAGAGGCCAAAGCGCCCTCCA
++
+#1=DDFFFHHHHHJJJJJJJJJJJI
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.2.fastq
new file mode 100644
index 0000000..4d90e31
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.2.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1267:2209 2:N:0:TATCTGCC
+GGCAGAGTCTCCAACAGCCCCGTAC
++
+=;?DDDD?CCFHAIIIGGIIGE at EG
+ at machine1:HiMom:abcdeACXX:1:1101:1353:2226 2:N:0:TATCTGCC
+GTGCTCTTCCGATCTTCAGGTTACC
++
+BBBFFFFFHHHHHJJJJJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1435:2194 2:N:0:TATCTGCC
+TTTTGTTTTCTTTTACTGAAGTGTA
++
+CCCFFDFFHHHHHJJJJIHIJHHHJ
+ at machine1:HiMom:abcdeACXX:1:1201:1084:2204 2:N:0:TATCTGCC
+TGGCTCCTCAGGCTCTCATCAGTTG
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1142:2242 2:N:0:TATCTGCC
+GTAAAATGTAAAATAATAAAAAATG
++
+?=?DDDD;AF<DF<FFFFIIIFF@<
+ at machine1:HiMom:abcdeACXX:1:1201:1187:2100 2:N:0:TATCTGCC
+AAAAAAGAGCCCGCATTGCCGAGAC
++
+=<=;AA###################
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2109 2:N:0:TATCTGCC
+GTCAGACAGGGGGATTTGGGCTGTG
++
+BBCFFFFFHHHHHHJJJHIJIJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.barcode_1.fastq
new file mode 100644
index 0000000..f396a3e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TATCTGCC.barcode_1.fastq
@@ -0,0 +1,28 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1267:2209 :N:0:TATCTGCC
+TATCAGCC
++
+?@@D;ADD
+ at machine1:HiMom:abcdeACXX:1:1101:1353:2226 :N:0:TATCTGCC
+TATCTGCC
++
+ at B@FFEFF
+ at machine1:HiMom:abcdeACXX:1:1101:1435:2194 :N:0:TATCTGCC
+TATCTGCC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1084:2204 :N:0:TATCTGCC
+TATCTGCC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1142:2242 :N:0:TATCTGCC
+TATCTGCC
++
+??<D?D83
+ at machine1:HiMom:abcdeACXX:1:1201:1187:2100 :N:0:TATCTGCC
+TATCTGCC
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2109 :N:0:TATCTGCC
+TATCTGCC
++
+CCCDF?DD
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCCGTCTA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCCGTCTA.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TCCGTCTA.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TCCGTCTA.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCCGTCTA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCCGTCTA.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TCCGTCTA.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TCCGTCTA.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/TCCGTCTA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCCGTCTA.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/TCCGTCTA.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/TCCGTCTA.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.1.fastq
new file mode 100644
index 0000000..25c9e17
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1143:2192 1:N:0:TCGCTAGA
+GGAGCGAGTCTGGGTCTCAGCCCCG
++
+CCCFFFFFHHHHHJGHIIIHJJJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1479:2221 1:N:0:TCGCTAGA
+TGTAAAGTATGCTGGCTCAGTGTAT
++
+BBBFDFFEHHHHHJJJJJJJIJHJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1312:2112 1:N:0:TCGCTAGA
+NTCCCAGCGAACCCGCGTGCAACCT
++
+#1=DFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1416:2128 1:N:0:TCGCTAGA
+NACAGGCGTGGAGGAGGCGGCGGCC
++
+#4=DDDFFHHHHHJIGJHFHHFFED
+ at machine1:HiMom:abcdeACXX:1:2101:1064:2242 1:N:0:TCGCTAGA
+ATGAACAAAGGAAGAATTATGCACG
++
+?;?D;DDDF?;:+<<CFFCHE433A
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.2.fastq
new file mode 100644
index 0000000..b8a3f3e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.2.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1143:2192 2:N:0:TCGCTAGA
+CGACAAGTCTGGCTTATCACTCATC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1479:2221 2:N:0:TCGCTAGA
+GGGGAAATCTATTTTTATGTAAAAA
++
+ at CCFFFFFHHHHHJIGIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1312:2112 2:N:0:TCGCTAGA
+ATTTGCAGGAGCCGGCGCAGGTGCA
++
+CCCFFFFFHHHHHJJJIJJJJGHIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1416:2128 2:N:0:TCGCTAGA
+TTGGTGTGGAGGCGGTGGCGGGATC
++
+@@@DDDDDHHFHHII:?GGHIIB6?
+ at machine1:HiMom:abcdeACXX:1:2101:1064:2242 2:N:0:TCGCTAGA
+NGGAAAAAGGTTGTCAAGCGTTAAA
++
+#########################
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.barcode_1.fastq
new file mode 100644
index 0000000..77b869b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TCGCTAGA.barcode_1.fastq
@@ -0,0 +1,20 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1143:2192 :N:0:TCGCTAGA
+TCGCTAGA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1101:1479:2221 :N:0:TCGCTAGA
+TCGCTAGA
++
+ at BCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1312:2112 :N:0:TCGCTAGA
+TCGCTAGA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1416:2128 :N:0:TCGCTAGA
+TCGCTAGA
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1064:2242 :N:0:TCGCTAGA
+TCGCTAGA
++
+;@<:AA at A
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.1.fastq
new file mode 100644
index 0000000..2b9e8b0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1042:2174 1:N:0:TCTGCAAG
+NGTTGGTGTCTTCATTTTATGTATA
++
+#1=DDFDFHHHHHJIJJJHIJHIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.2.fastq
new file mode 100644
index 0000000..0bb18cc
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1042:2174 2:N:0:TCTGCAAG
+NTCAGGAAGGCNNCAAAAAAAGAAA
++
+#0;@@@?@?<@##3<@@?@@?????
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.barcode_1.fastq
new file mode 100644
index 0000000..5f73cc8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TCTGCAAG.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1042:2174 :N:0:TCTGCAAG
+TCTGCAAG
++
+CCCFFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.1.fastq
new file mode 100644
index 0000000..45daf27
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1242:2170 1:N:0:TGCAAGTA
+ATGGCAGGGCAGAGTTCTGATGAGT
++
+CCCFFFFFHHGGGIFHEIIGIIII?
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2222 1:N:0:TGCAAGTA
+GAGCAGGCAAGGAGGACTTCTTGTT
++
+CCCFFFFFGHHHHJJHHIJJJJJIJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.2.fastq
new file mode 100644
index 0000000..3b8cc58
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1242:2170 2:N:0:TGCAAGTA
+GGAAGGAAAAGAAGCACAAGTACAT
++
+@@@DFDFFHHHGHHGIIGJJEHHIG
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2222 2:N:0:TGCAAGTA
+GAGCGATAATGGTTCTTTTCCTCAC
++
+@@@DFFFFHHHHHJJJJJJJIJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.barcode_1.fastq
new file mode 100644
index 0000000..c310ad9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGCAAGTA.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1242:2170 :N:0:TGCAAGTA
+TGCAAGTA
++
+@@CFFF?D
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2222 :N:0:TGCAAGTA
+TGCAAGTA
++
+CCCFFFEF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.1.fastq
new file mode 100644
index 0000000..56c58e4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1084:2136 1:N:0:TGCTGCTG
+NTCTCACTGTGAATTTGTGGTGGGC
++
+#1=DDFFFHHHHHJJJJGIJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1285:2100 1:N:0:TGCTGCTG
+NAATGACATGTTTAAAGATGGACTC
++
+#1:BDDFFHHFHHGIJIJIIIIGII
+ at machine1:HiMom:abcdeACXX:1:2101:1162:2139 1:N:0:TGCTGCTG
+AGAGGTGAAATTCTTGGACCGGCGC
++
+@@@DDDDDHFHHHDB:EFHHCAG?D
+ at machine1:HiMom:abcdeACXX:1:2101:1195:2150 1:N:0:TGCTGCTG
+CCGAGAGAGTGAGAGCGCTCCTGGG
++
+CCCFFFFFHFHHHJJJJIJJJJIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.2.fastq
new file mode 100644
index 0000000..1c81e60
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1084:2136 2:N:0:TGCTGCTG
+TTTCTNNNNNNNNNNNNNNNNNNNN
++
+<<<@@####################
+ at machine1:HiMom:abcdeACXX:1:1201:1285:2100 2:N:0:TGCTGCTG
+GATCTTTTTTGCTTTGTAGTTATAG
++
+@@@DFFFFHHHHHIIGIABCFFHBF
+ at machine1:HiMom:abcdeACXX:1:2101:1162:2139 2:N:0:TGCTGCTG
+ATCGTTTATGGTCGGAACTACGACG
++
+BCCFFFFFHHHHHIJJJJJJJIJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1195:2150 2:N:0:TGCTGCTG
+AATTGAACTTCACCACCCAGAGGAA
++
+CCCFFFFFHHHHHJJJJJJIJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.barcode_1.fastq
new file mode 100644
index 0000000..1d013d1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGCTGCTG.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1084:2136 :N:0:TGCTGCTG
+TGCTGCTG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1285:2100 :N:0:TGCTGCTG
+TGCTGCTG
++
+@@@FFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1162:2139 :N:0:TGCTGCTG
+TGCTGCTG
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:2101:1195:2150 :N:0:TGCTGCTG
+TGCTGCTG
++
+CCCFFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.1.fastq
new file mode 100644
index 0000000..17d82b7
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1421:2154 1:N:0:TGTAACTC
+TGTGTGTGTGGGTGTGTGTATATAT
++
+?@?DDFFFFFHH at GEFCCCHGIGJI
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.2.fastq
new file mode 100644
index 0000000..b94054c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1421:2154 2:N:0:TGTAACTC
+TGTGCTCTTCCGATCTTGTGCTCTT
++
+BC at DFFFFHHHHHJJJJFHIHHIJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.barcode_1.fastq
new file mode 100644
index 0000000..2ec05e5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGTAACTC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1201:1421:2154 :N:0:TGTAACTC
+TGTAACTC
++
+@@@FFFFF
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.1.fastq
new file mode 100644
index 0000000..3eb756e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1419:2119 1:N:0:TGTAATCA
+NATGACTATGGTAACTGAAAGAAAA
++
+#1:A1BDADBFFDFIIIEEHECACF
+ at machine1:HiMom:abcdeACXX:1:1201:1208:2132 1:N:0:TGTAATCA
+NCCTCAATGAGCGGCACTATGGGGG
++
+#1=DDFFFHHHHGJJIJJGHIJGIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1344:2147 1:N:0:TGTAATCA
+TATCCTCCCTACTATGCCTAGAAGG
++
+=?@DADEFHBHDFG>EFGDHGFGHD
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.2.fastq
new file mode 100644
index 0000000..57ba603
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.2.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1419:2119 2:N:0:TGTAATCA
+ACTTTCCTTTTTTGTTTTACTTTAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1208:2132 2:N:0:TGTAATCA
+CTGTAGAAAGGATGGTCGGGCTCCA
++
+@@CDFFFFGHFHHJIJJGJIBHJJG
+ at machine1:HiMom:abcdeACXX:1:1201:1344:2147 2:N:0:TGTAATCA
+ACGATTAGTTTTAGCATTGGAGTAG
++
+@<??DDDDFHHHFGGHHIIIGGAGH
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.barcode_1.fastq
new file mode 100644
index 0000000..13972ab
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TGTAATCA.barcode_1.fastq
@@ -0,0 +1,12 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1419:2119 :N:0:TGTAATCA
+TGTAATCA
++
+@@@DFDFD
+ at machine1:HiMom:abcdeACXX:1:1201:1208:2132 :N:0:TGTAATCA
+TGTAATCA
++
+CC at FFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1344:2147 :N:0:TGTAATCA
+TGTAATCA
++
+=?1AA:=D
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.1.fastq
new file mode 100644
index 0000000..b8f172c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1219:2164 1:N:0:TTGTCTAT
+TCAAGCAGGAGCAGCTAAGTCCTAA
++
+CCCFFFFFHHHHHJJJJJJHIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1103:2184 1:N:0:TTGTCTAT
+GTAAGAACTACCCTGGGTCCCCGTG
++
+@@BFFFFFHHHHHJJJJGIJJJJHI
+ at machine1:HiMom:abcdeACXX:1:1201:1107:2109 1:N:0:TTGTCTAT
+NGGGAACCTGGCGCTAAACCATTCG
++
+#1=DFFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1252:2141 1:N:0:TTGTCTAT
+NTTCCCCCCATGTAATTATTGTGAA
++
+#1=DDFFFHHHHHJJJJJJJJIJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.2.fastq
new file mode 100644
index 0000000..50cb39a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.2.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1219:2164 2:N:0:TTGTCTAT
+ATCTTATCCACTCCTTCCACTTTGG
++
+CCCFFFFFHHHHHJJIJJJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1103:2184 2:N:0:TTGTCTAT
+AGAAGTTTCAGAATTGTGGCCCCAT
++
+B at BFFDEFHHHHHJJJGHIJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1201:1107:2109 2:N:0:TTGTCTAT
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHGHHJJJJIIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1252:2141 2:N:0:TTGTCTAT
+AGTTATTTTGCCTATGTCCAACAAG
++
+BCBFFFFFGHHHHJIJJJJJJJJJJ
diff --git a/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.barcode_1.fastq
new file mode 100644
index 0000000..e53ec2d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/TTGTCTAT.barcode_1.fastq
@@ -0,0 +1,16 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1219:2164 :N:0:TTGTCTAT
+TTGTCTAT
++
+CCCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1103:2184 :N:0:TTGTCTAT
+TTGTCTAT
++
+ at CCFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1107:2109 :N:0:TTGTCTAT
+TTGTCTAT
++
+B at CFFFFF
+ at machine1:HiMom:abcdeACXX:1:1201:1252:2141 :N:0:TTGTCTAT
+TTGTCTAT
++
+CCCFFFFF
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/barcode.params b/testdata/picard/illumina/25T8B25T/fastq/barcode.params
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/barcode.params
rename to testdata/picard/illumina/25T8B25T/fastq/barcode.params
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/mp_barcode.params b/testdata/picard/illumina/25T8B25T/fastq/mp_barcode.params
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/mp_barcode.params
rename to testdata/picard/illumina/25T8B25T/fastq/mp_barcode.params
diff --git a/testdata/picard/illumina/25T8B25T/fastq/nonBarcoded.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/nonBarcoded.1.fastq
new file mode 100644
index 0000000..35c2406
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/nonBarcoded.1.fastq
@@ -0,0 +1,720 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1031:2224 1:Y:0:
+NAATANNNNNNNNNNNNTNNNNNNN
++
+#0;@@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1039:2147 1:Y:0:
+NCCAANGNNGGNNNNATGTAANNNN
++
+#4;@@#4##2<####43@@@@####
+ at machine1:HiMom:abcdeACXX:1:1101:1046:2175 1:Y:0:
+NTGCCNGNGTTNCGNGGTCTTNNNN
++
+#4;@@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1047:2122 1:Y:0:
+NCTAANGNACTNTGNGTGTGCNNNN
++
+#0;@@#4#3@@#3@#2<@@@@####
+ at machine1:HiMom:abcdeACXX:1:1101:1048:2197 1:Y:0:
+NCTCCNGNTCANCANGTGGAGNNNN
++
+#0;?@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1065:2193 1:N:0:
+GAAGTACGCCCTGCCCCTGGTTNGC
++
+?@@DAADAHHFHBEBEGGHG?####
+ at machine1:HiMom:abcdeACXX:1:1101:1069:2159 1:N:0:
+TCCCTTACCATCAAATCAATTGNCC
++
+CCCFFFFFHHHHHJJJJJJJJJ#3A
+ at machine1:HiMom:abcdeACXX:1:1101:1071:2233 1:N:0:
+TTTGACAGTCTCTGAATGAGAANGG
++
+CCCFFFFFHHHHHJIIIJJJIJ#4A
+ at machine1:HiMom:abcdeACXX:1:1101:1083:2193 1:N:0:
+TTCTACCTCACCTTAGGGAGAAGAC
++
+@@@DDBDDD>F><C<4CG?EHGHIG
+ at machine1:HiMom:abcdeACXX:1:1101:1084:2136 1:N:0:
+NTCTCACTGTGAATTTGTGGTGGGC
++
+#1=DDFFFHHHHHJJJJGIJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1089:2172 1:N:0:
+TTCCAGCATGCGGTTTAAGTAGGAT
++
+ at CCFDFDBDFBF:<CEBHAFHHICH
+ at machine1:HiMom:abcdeACXX:1:1101:1100:2207 1:N:0:
+ACGACAGACGTTCTTTCTTTGCTGC
++
+CCCFFFFFHHFHHJIJJJJJHIJJH
+ at machine1:HiMom:abcdeACXX:1:1101:1111:2148 1:N:0:
+GTGGAGACCACCTCCGAGGCCTTGT
++
+BBCFFFFFHHHHHJJJIJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1138:2141 1:N:0:
+NTTACCAAGGTTTTCTGTTTAGTGA
++
+#1=DDFFFHHFHHJJJIHJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1140:2120 1:N:0:
+NCCCCAACATTCTAATTATGCCTCA
++
+#1:BDFFDHFFDFIJJJIIJIIIII
+ at machine1:HiMom:abcdeACXX:1:1101:1143:2192 1:N:0:
+GGAGCGAGTCTGGGTCTCAGCCCCG
++
+CCCFFFFFHHHHHJGHIIIHJJJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1150:2228 1:N:0:
+GCTACTCAGTAGACAGTCCCACCCT
++
+@@CADDDDFCFHHIIIIGGIIGGGI
+ at machine1:HiMom:abcdeACXX:1:1101:1157:2135 1:N:0:
+NGGACATTGTAATCATTTCTTACAA
++
+#1=DD?DDHHHHHGGHIIIIIIIII
+ at machine1:HiMom:abcdeACXX:1:1101:1162:2207 1:Y:0:
+ACCTTGAGGAGAACATAAGAGCAAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1165:2239 1:N:0:
+GGCGGAGGCAGCATTTCAGCTGTGA
++
+CCCFFDFFHHHHHIJJIGHHHJHHF
+ at machine1:HiMom:abcdeACXX:1:1101:1175:2197 1:N:0:
+CCCCTGAGGACACCATCCCACTCCA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1188:2237 1:N:0:
+TCCCCCTCCCTTTTGCGCACACACC
++
+@?@DDADDHDHBDH<EFHIIHG?HF
+ at machine1:HiMom:abcdeACXX:1:1101:1197:2200 1:N:0:
+GGGCGCCCCGTGAGGACCCAGTCCT
++
+ at C@FFADDFFCFCEHIIJIJJIEFC
+ at machine1:HiMom:abcdeACXX:1:1101:1206:2126 1:N:0:
+NATTCTGCCATATTGGTCCGACAGT
++
+#1=DDFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1212:2230 1:N:0:
+TTTCTATTAGCTCTTAGTAAGATTA
++
+CCCFFFFFHHHHHJJJIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1218:2200 1:N:0:
+GCACCGGAAGAGCACACAGATCGGA
++
+CCCFFFFDFHGHHJJIJIJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1219:2164 1:N:0:
+TCAAGCAGGAGCAGCTAAGTCCTAA
++
+CCCFFFFFHHHHHJJJJJJHIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1221:2143 1:N:0:
+TTTGGTGGAAATTTTTTGTTATGAT
++
+CCCFFBDBHFD?FBFHIIGGIC at EF
+ at machine1:HiMom:abcdeACXX:1:1101:1236:2121 1:N:0:
+NGGTGCTTCATATCCCTCTAGAGGA
++
+#1=BDDFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1242:2170 1:N:0:
+ATGGCAGGGCAGAGTTCTGATGAGT
++
+CCCFFFFFHHGGGIFHEIIGIIII?
+ at machine1:HiMom:abcdeACXX:1:1101:1257:2223 1:N:0:
+TGTATTCGAGAGATCAAAGAGAGAG
++
+@@=DDBDD?FFHHEIDBDFCEDBAF
+ at machine1:HiMom:abcdeACXX:1:1101:1259:2152 1:N:0:
+CACCTATAATCCCAGCTACTCCAGA
++
+CCCFFFFFHHHHHJJJJJJIJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1261:2127 1:Y:0:
+NTGAAATCTGGATAGGCTGGAGTTA
++
+#0-@@@###################
+ at machine1:HiMom:abcdeACXX:1:1101:1263:2236 1:Y:0:
+CTTTGAAGACATTGTGAGATCTGTA
++
+<==A<42 at C+A4A?,2A@=4 at 7A??
+ at machine1:HiMom:abcdeACXX:1:1101:1267:2209 1:N:0:
+GAGACGGAGGCCAACGGGGGCCTGG
++
+@@CFFFFD8FDHFHIGIBG?@BCDG
+ at machine1:HiMom:abcdeACXX:1:1101:1269:2170 1:N:0:
+ACAGTGTGGGAGGCAGACGAAGAGA
++
+@@@DDDDDFA:C at EGA?FD<FFHII
+ at machine1:HiMom:abcdeACXX:1:1101:1290:2225 1:N:0:
+CTTGGGCGCATGGTGAGGGAGGGAG
++
+@@@FFDDFHDFH??CBEBHHIGDCD
+ at machine1:HiMom:abcdeACXX:1:1101:1291:2150 1:N:0:
+CGTGGGGAACCTGGCGCTAAACCAT
++
+ at BBFFFFFHHHHHJJJJIJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1302:2244 1:N:0:
+GGAAAAGACGGAAAGGTTCTATCTC
++
+ at C@DFFFDFHHHHJIJHHIJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1308:2153 1:Y:0:
+TTTTGGAAGAGACCTCAATTACTGT
++
+???DDDDD?:22AE:A2<3,AF?3A
+ at machine1:HiMom:abcdeACXX:1:1101:1309:2210 1:N:0:
+ACACCAACCACCCAACTATCTATAA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1314:2233 1:N:0:
+GTTTATTGGGGCATTCCTTATCCCA
++
+@??DDDDBDHF>FCHGGGBFAAED9
+ at machine1:HiMom:abcdeACXX:1:1101:1316:2126 1:N:0:
+NAAAAAAAAAAAAAAAAAAAAAAAA
++
+#1BDFFFFHHHHHJJJJFDDDDDDD
+ at machine1:HiMom:abcdeACXX:1:1101:1327:2200 1:Y:0:
+AGGGGGATCCGCCGGGGGACCACAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1328:2225 1:N:0:
+GAAATGCATCTGTCTTAGAAACTGG
++
+??@=BDDDFDD<<,<2:C<F:FFEA
+ at machine1:HiMom:abcdeACXX:1:1101:1338:2175 1:N:0:
+CCCACCTTCCGGCGGCCGAAGACAC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1347:2149 1:N:0:
+GAGCAGATCGGAAGAGCACAGATCG
++
+@@@FFDDDHHHHHIJJBGGHJIHEG
+ at machine1:HiMom:abcdeACXX:1:1101:1353:2226 1:N:0:
+TTGCTTGTCTGTAAAGTATTTTATT
++
+ at C@DDFFDHHFHFHHIBGG>IHHII
+ at machine1:HiMom:abcdeACXX:1:1101:1363:2138 1:N:0:
+NGTCTGGCCTGCACAGACATCCTAC
++
+#1=DDFFFHHHHHJJJIJJIJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1399:2128 1:N:0:
+NTGCCCTTCGTCCTGGGAAACGGGG
++
+#1BDFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1403:2194 1:N:0:
+CTAAACAGAGAGAAGGTTTCTCTTT
++
+CCCFFFFFHHHHHJJJFHIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1406:2222 1:N:0:
+CTCCCCCCGGGCTGAACCAGGGTAC
++
+CCCFFDDDDHDFHIIIIIIIII9DG
+ at machine1:HiMom:abcdeACXX:1:1101:1419:2119 1:N:0:
+NATGACTATGGTAACTGAAAGAAAA
++
+#1:A1BDADBFFDFIIIEEHECACF
+ at machine1:HiMom:abcdeACXX:1:1101:1420:2213 1:N:0:
+TACCTGGTTGATCCTGCCAGTAGCA
++
+@@CFFFFDDHHGHJGGHIJJIHGBH
+ at machine1:HiMom:abcdeACXX:1:1101:1435:2194 1:N:0:
+GAGAAAGAACATGACTACAGAGATG
++
+CCCFFFFFHHHHHJJJJJJJJJHJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1441:2148 1:N:0:
+ACTTTCACCGCTACACGACCGGGGG
++
+CCCFFFFFHGFFHIIFIHJIGGII>
+ at machine1:HiMom:abcdeACXX:1:1101:1452:2132 1:N:0:
+NCGTCCTGGAAAACGGGGCGCGGCT
++
+#1=BDBDDFHHHHF at FHDHIGIIII
+ at machine1:HiMom:abcdeACXX:1:1101:1460:2176 1:N:0:
+AGTCCAGGCTGAGCCCAGGGAAGAA
++
+CCCFFFFFHHHHGJIJJIJJHIJJI
+ at machine1:HiMom:abcdeACXX:1:1101:1479:2221 1:N:0:
+TGTAAAGTATGCTGGCTCAGTGTAT
++
+BBBFDFFEHHHHHJJJJJJJIJHJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1491:2120 1:N:0:
+NGGCAGGTGCCCCCACTTGACTCTC
++
+#1?DFFFFGHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2133 1:N:0:
+NAAAACTTGAGGATGCTATGCAAGC
++
+#1:B:ADDDDDDDEEAEBF9FFEBF
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2217 1:Y:0:
+NTTTCTCTGGGCGCAAAGATGTTCA
++
+#07;8=8<<99(:=@@/@7>>6=?>
+ at machine1:HiMom:abcdeACXX:1:1201:1028:2202 1:N:0:
+NTCCTGGGAAACGGGGCGCGGCTGG
++
+#4BDDDFFHHHHHIJIIJJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1042:2174 1:N:0:
+NGTTGGTGTCTTCATTTTATGTATA
++
+#1=DDFDFHHHHHJIJJJHIJHIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1043:2246 1:N:0:
+NTTCTCGGCTGTCATGTGCAACATT
++
+#1=DDBDFHHHDFFBHGHGHIIJEH
+ at machine1:HiMom:abcdeACXX:1:1201:1045:2105 1:Y:0:
+NTAAAGAGAAATCAAGAATACTATT
++
+#-4@?(@)@@###############
+ at machine1:HiMom:abcdeACXX:1:1201:1054:2151 1:N:0:
+NTAGTGCTGGGCACTAAGTAATACC
++
+#4=DDDFFHHHHHJJJJJHIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1064:2239 1:N:0:
+CATGCAGCGCAAGTAGGTCTACAAG
++
+@@;DFAFFHHHHAHEGHFDGGFABG
+ at machine1:HiMom:abcdeACXX:1:1201:1073:2225 1:N:0:
+GGGGCTGAGACCTTTGCTGATGGTG
++
+@@@FFFFFHHHGHJJJJJIIIGICH
+ at machine1:HiMom:abcdeACXX:1:1201:1083:2121 1:N:0:
+NAGAACTGGCGCTGCGGGATGAACC
++
+#1=BDFFFHHHHHJJJJJHIJIJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1084:2204 1:N:0:
+GGCCCGTGGACGCCGCCGAAGAAGC
++
+CCCFFFFFHHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1095:2146 1:N:0:
+GCTGAGTCATGTAGTAAGCCTGTGC
++
+BB at FDDDFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1103:2184 1:N:0:
+GTAAGAACTACCCTGGGTCCCCGTG
++
+@@BFFFFFHHHHHJJJJGIJJJJHI
+ at machine1:HiMom:abcdeACXX:1:1201:1107:2109 1:N:0:
+NGGGAACCTGGCGCTAAACCATTCG
++
+#1=DFFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1118:2198 1:N:0:
+CAAGTGTACAGGATTAGACTGGGTT
++
+BCCFDEBDHHHHHIJJJGIIIJJGH
+ at machine1:HiMom:abcdeACXX:1:1201:1122:2227 1:N:0:
+AGAAGACGAGGCTGAGAGTGACATC
++
+@@@FFFFFHHHDHJGHGHCHHJJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1123:2161 1:Y:0:
+CACTAACTCCTGACCTCAAATAATC
++
+?7?=DD?DD+CDBE>E at EEF@+<CF
+ at machine1:HiMom:abcdeACXX:1:1201:1127:2112 1:Y:0:
+NGTCAAGGATGTTCGTCGTGGCAAC
++
+#1=BDDDDDDDDDID<AE?@<CEEE
+ at machine1:HiMom:abcdeACXX:1:1201:1134:2144 1:N:0:
+TGCCAGGAAGTGTTTTTTCTGGGTC
++
+ at CCFFEFFHHFFFGIJJJJJJJJGH
+ at machine1:HiMom:abcdeACXX:1:1201:1138:2227 1:Y:0:
+GCTGACACAATCTCTTCCGCCTGGT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1140:2125 1:N:0:
+NTTTCAGTTCAGAGAACTGCAGAAT
++
+#1=DBDFDHHHHGJIJJJJJIIIJI
+ at machine1:HiMom:abcdeACXX:1:1201:1142:2242 1:N:0:
+TGTTGATAGTCCTTCTTATCTTAGT
++
+???DB?==CC2<AC:CC<CFEF<FF
+ at machine1:HiMom:abcdeACXX:1:1201:1150:2161 1:N:0:
+AAGTCACCTAATATCTTTTTTTTTT
++
+@@<??;?D?CFD,A4CDDHFBIIID
+ at machine1:HiMom:abcdeACXX:1:1201:1159:2179 1:Y:0:
+GTTAGCACAGATATTGGATGAGTGA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1160:2109 1:N:0:
+NAGAAGCCTTTGCACCCTGGGAGGA
++
+#1=DDDFFHHHHHJJJJJJJJIIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1180:2119 1:N:0:
+NTGAAAGATTTAGAGAGCTTACAAA
++
+#1=DDDDDHHHGHJJIIJJJJIJJI
+ at machine1:HiMom:abcdeACXX:1:1201:1185:2143 1:N:0:
+ATCTGCCTGGTTCGGCCCGCCTGCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1187:2100 1:N:0:
+NGCGGTAATTCCAGCTCCAATAGCG
++
+#1:BB2 at DHHFHHIIIIHHIIGHGG
+ at machine1:HiMom:abcdeACXX:1:1201:1190:2194 1:N:0:
+AACCTGGCGCTAAACCATTCGTAGA
++
+CCCFFFFFHHHHHJJJJJJJJIJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1204:2228 1:N:0:
+CCGATACGCTGAGTGTGGTTTGCGG
++
+CCCFFFFFHHHFHEGGHIHIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1208:2132 1:N:0:
+NCCTCAATGAGCGGCACTATGGGGG
++
+#1=DDFFFHHHHGJJIJJGHIJGIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1219:2115 1:N:0:
+NTATAGTGGAGGCCGGAGCAGGAAC
++
+#1:DABADHHHFHIIIGGHGIIIII
+ at machine1:HiMom:abcdeACXX:1:1201:1236:2187 1:N:0:
+TTTAAATGGGTAAGAAGCCCGGCTC
++
+ at BCDDFEFHHDHHJJJJJIJJIJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1242:2207 1:N:0:
+ATGGCAAAGTGGTGTCTGAGACCAA
++
+BCCFFFFFGHHHHHIIIJFHIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1252:2141 1:N:0:
+NTTCCCCCCATGTAATTATTGTGAA
++
+#1=DDFFFHHHHHJJJJJJJJIJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1260:2165 1:N:0:
+GGACACGGACAGGATTGACAGATTG
++
+BCBFFFFFHHHHHHIIJHIIIFHIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1280:2179 1:N:0:
+TTCAAGGAATCGTCCTGCCTCAGCC
++
+BCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1281:2133 1:N:0:
+NGGAAATCCAGAAAACATAGAAGAT
++
+#1=DDFFFHHHHHIJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1285:2100 1:N:0:
+NAATGACATGTTTAAAGATGGACTC
++
+#1:BDDFFHHFHHGIJIJIIIIGII
+ at machine1:HiMom:abcdeACXX:1:1201:1291:2158 1:N:0:
+AGAAGGGGAAAGCCTTCATCTTGGC
++
+BCBFFFFFHHHHHJJJJJIIFIJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1300:2137 1:N:0:
+NTGTAATCCCAGCTCTCAGGGAGGC
++
+#1=ADDDDDDDBBA?@AE?E at FE8;
+ at machine1:HiMom:abcdeACXX:1:1201:1312:2112 1:N:0:
+NTCCCAGCGAACCCGCGTGCAACCT
++
+#1=DFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1331:2162 1:N:0:
+ACGCTCGGCTAATTTTTGTATTTTT
++
+ at CCFFFDFHHHHHIJJJJHIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1341:2116 1:N:0:
+NAGAAGCCCCAGGAGGAAGACAGTC
++
+#1=DDFFFHHHHHHHJIIJJJJJGI
+ at machine1:HiMom:abcdeACXX:1:1201:1344:2147 1:N:0:
+TATCCTCCCTACTATGCCTAGAAGG
++
+=?@DADEFHBHDFG>EFGDHGFGHD
+ at machine1:HiMom:abcdeACXX:1:1201:1345:2181 1:N:0:
+GGATAATCCTATTTATTACCTCAGA
++
+BBBDDFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1364:2113 1:N:0:
+NCACTCATTTTCTTATGTGGGATAT
++
+#1=DDFDFHHHHHIJJIFHIIHHHI
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2109 1:N:0:
+NCTGAAGAGGCCAAAGCGCCCTCCA
++
+#1=DDFFFHHHHHJJJJJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2184 1:N:0:
+TTTCAGATTGGTCATTGTTAGTGTA
++
+??@BDDDEHBHADHHIIEHDHFHFF
+ at machine1:HiMom:abcdeACXX:1:1201:1393:2143 1:N:0:
+TGGTTGATCCTGCCAGTAGCATATG
++
+@@@ADADDFHFFDBHE?G at HIIIEE
+ at machine1:HiMom:abcdeACXX:1:1201:1414:2174 1:Y:0:
+GCCAAAAAAAAGAACCAGCCCAAGG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1416:2128 1:N:0:
+NACAGGCGTGGAGGAGGCGGCGGCC
++
+#4=DDDFFHHHHHJIGJHFHHFFED
+ at machine1:HiMom:abcdeACXX:1:1201:1421:2154 1:N:0:
+TGTGTGTGTGGGTGTGTGTATATAT
++
+?@?DDFFFFFHH at GEFCCCHGIGJI
+ at machine1:HiMom:abcdeACXX:1:1201:1439:2156 1:N:0:
+AGCCGCGAGGTGCTGGCGGACTTCC
++
+:;1BDDDAA88A<?<E1C:D#####
+ at machine1:HiMom:abcdeACXX:1:1201:1452:2143 1:N:0:
+TATCCCCTCTAAGACGGACCTGGGT
++
+CCCFFFFFHHHHHJJIIIJJJJJJG
+ at machine1:HiMom:abcdeACXX:1:1201:1458:2109 1:N:0:
+NGAGACCATAGAGCGGATGCTTTCA
++
+#1=DDDFFHHGHGIJJIGIIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1472:2121 1:Y:0:
+NTAAAGTGTGAACAAGGAAGGTCAT
++
+#07>@<9=@################
+ at machine1:HiMom:abcdeACXX:1:1201:1483:2126 1:Y:0:
+NTGATAAGGTGTTGCTATGTTACCC
++
+#1:D?DDDDA??2:<CC4:AEDF>?
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2109 1:N:0:
+NCACCTCCTAGCCCCTCACTTCTGT
++
+#1=B;BDDHHHGFIIIIIIIIIGGG
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2146 1:Y:0:
+GTTCTCTGTCCCCAGGTCCTGTCTC
++
+===A7<7222<<=C=?+<7>@?ACB
+ at machine1:HiMom:abcdeACXX:1:2101:1011:2102 1:N:0:
+NAAACAAAACTGTAGAACTGTGTAT
++
+#1=DDFFFHHHHHJJIJJJIHHHJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1013:2146 1:N:0:
+NACACTGCTGCAGATGACAAGCAGC
++
+#4BDFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1021:2209 1:N:0:
+NGGCCCCACCCTCCTCCAGCACGTC
++
+#1=DDFFFHHHHHJJJJJJHIIHFH
+ at machine1:HiMom:abcdeACXX:1:2101:1023:2237 1:Y:0:
+NTAAACAGCTTCTGCACAGCCAAAG
++
+#00@@?>=39>9;<412@?######
+ at machine1:HiMom:abcdeACXX:1:2101:1031:2163 1:N:0:
+NTTTCCATGGCCGTCACCTTTGGGT
++
+#4=DDFFFHHHHHJJJJJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1036:2087 1:N:0:
+NTGTAGTTTCTTTAGGCAAATTTGT
++
+#4=BDDDFHHHHHJJJJJJIIJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1040:2208 1:Y:0:
+NATGCCCACCTCCCTCCTACGCACC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1048:2238 1:N:0:
+NCTGCCGTGTCCTGACTTCTGGAAT
++
+#1:B?ADDACF<DCG;EG<FHH at CE
+ at machine1:HiMom:abcdeACXX:1:2101:1054:2162 1:N:0:
+NCCAGGTGTCTTCCCGGGCCCTGCC
++
+#1=DDFBDFHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1059:2083 1:N:0:
+NAAGAGGGGTCAAGAGTTAAACTTA
++
+#1=DDFFFHFHHGIGHGHJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1063:2206 1:N:0:
+TCCTATTCGCCTACACAATTCTCCG
++
+CCCFFFFFHHHHHJJJJJJJHJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1064:2242 1:N:0:
+ATGAACAAAGGAAGAATTATGCACG
++
+?;?D;DDDF?;:+<<CFFCHE433A
+ at machine1:HiMom:abcdeACXX:1:2101:1072:2170 1:N:0:
+ATCACCGCACTCATTTCCCGCTTCC
++
+CCCFFFFFHHHACEEGHIIBHIIII
+ at machine1:HiMom:abcdeACXX:1:2101:1077:2139 1:N:0:
+CACAGGCTTCCACGGACTTAACGTC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1084:2188 1:N:0:
+TTGCTGCATGGGTTAATTGAGAATA
++
+CCCFFFFFHHHHFHHIIJJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1100:2085 1:N:0:
+NCACATGGATGAGGAGAATGAGGAT
++
+#1=DDFFFFHHHHJHIGIHHHIJEH
+ at machine1:HiMom:abcdeACXX:1:2101:1102:2221 1:N:0:
+TTTCATCTTATTTCATTGGTTTATA
++
+CCCFFFFFHHHHHJIJJJJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1105:2131 1:N:0:
+TTGGAACACAGCGGGAATCACAGCA
++
+CCCFFFFFHHHHHJIJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1112:2245 1:N:0:
+TGCCATCTGCTCTGGGAAGCACCAG
++
+1:=DDDDDFBC:DEFIFFFIEF at BE
+ at machine1:HiMom:abcdeACXX:1:2101:1122:2136 1:N:0:
+GTAGGCGCTCAGCAAATACTTGTCG
++
+@@@DDDD8?<CACEHHBBHDAAFH@
+ at machine1:HiMom:abcdeACXX:1:2101:1123:2095 1:N:0:
+NTGGACAACATGTTCGAGAGCTACA
++
+#1=BBDDDFFFFDGFGIG?F;HHFI
+ at machine1:HiMom:abcdeACXX:1:2101:1126:2082 1:N:0:
+NGTTTTAGGGGTGCGCAGGAGTCAA
++
+#11=A=DD?DF at D@CCGHIEFH at BG
+ at machine1:HiMom:abcdeACXX:1:2101:1133:2239 1:N:0:
+AGACAGAAGTACGGGAAGGCGAAGA
++
+@@@FFFFEHFHHHJJCGDHIIECD@
+ at machine1:HiMom:abcdeACXX:1:2101:1143:2137 1:N:0:
+ATGCAGCAGCTGCCACGGAGCACCA
++
+CC at FFDFDFHFHHGIDHEHIGJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2182 1:Y:0:
+TTGTTTTGGCTTATAATGACAAGAA
++
+;;8-2).2())(<6=@8;?4??>>?
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2236 1:Y:0:
+TTAAAGAGGTTCAGGGATGCAGAGT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1162:2139 1:N:0:
+AGAGGTGAAATTCTTGGACCGGCGC
++
+@@@DDDDDHFHHHDB:EFHHCAG?D
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2203 1:N:0:
+TCTCCATGTGAAACAAGCAAAAAGA
++
+CCCFFFFFHHHHGJJJIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2222 1:N:0:
+GAGCAGGCAAGGAGGACTTCTTGTT
++
+CCCFFFFFGHHHHJJHHIJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:2101:1172:2152 1:Y:0:
+AACACGGACAAAGGAGTCTAACACG
++
+<<<??8@@#################
+ at machine1:HiMom:abcdeACXX:1:2101:1186:2093 1:N:0:
+NCGACCATAAACGATGCCGACCGGC
++
+#4=DFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1188:2195 1:N:0:
+TTAGACCGTCGTGAGACAGGTTAGT
++
+ at CCFFFFFHHHHHJJJJJIIEHIJH
+ at machine1:HiMom:abcdeACXX:1:2101:1195:2150 1:N:0:
+CCGAGAGAGTGAGAGCGCTCCTGGG
++
+CCCFFFFFHFHHHJJJJIJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1207:2084 1:Y:0:
+NTAGATGACCAAAACTTGCAGGGCA
++
+#1:A<?@A+7A=?CBCCBCCBAAAA
+ at machine1:HiMom:abcdeACXX:1:2101:1208:2231 1:Y:0:
+TCACTAAACATCCAAACATCACTTT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1215:2110 1:N:0:
+NAATATAATTTGGAGACCCTTTGTT
++
+#1=DDDDDEDDDDIDDBB3ABAB##
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2172 1:N:0:
+TTTCTTCGCAGGATTTTTCTGAGCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2193 1:N:0:
+TTTTCTTGGCCTCTGTTTTTTTTTT
++
+BCCFDFFFHHFFHJIGIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1226:2088 1:N:0:
+NGATCGGAAGAGCACACGTTTGACT
++
+#4=DAA=DDFHFHIIBFGHHIG>EG
+ at machine1:HiMom:abcdeACXX:1:2101:1231:2208 1:N:0:
+ACGCCGCAAGTCAGAGCCCCCCAGA
++
+@@@DDDFFFFB:DBBEBEFDHBDDB
+ at machine1:HiMom:abcdeACXX:1:2101:1233:2133 1:Y:0:
+GAGAGAAGCACTCTTGAGCGGGATA
++
+0;(@((@)2@###############
+ at machine1:HiMom:abcdeACXX:1:2101:1240:2197 1:Y:0:
+ATAAAACATAGCAATATTTTCCTAT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1245:2154 1:N:0:
+TCGTTAAGTATATTCTTAGGTATTT
++
+CCCFFDFFFHFHHIIJJJJJFJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1249:2231 1:N:0:
+GTTATTGATAGGATACTGTACAAAC
++
+ at BCFFFFDHHHHFIJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1258:2092 1:N:0:
+NCACACACACACTCATTCACAGCTT
++
+#1=DDDFFHHHFHJJIJGGGIIGIJ
+ at machine1:HiMom:abcdeACXX:1:2101:1262:2128 1:Y:0:
+AGCAGAAGGGCAAAAGCTGGCTTGA
++
+9;<@:@###################
+ at machine1:HiMom:abcdeACXX:1:2101:1273:2119 1:Y:0:
+NAGATAAGAGTCCACACAGTTGAGT
++
+#11AAAAA<A?4=C=7?733<ACA3
+ at machine1:HiMom:abcdeACXX:1:2101:1285:2105 1:Y:0:
+NGCGGGGAGCCGGGCGTGGAATGCG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1312:2105 1:N:0:
+NTTCCCTCAGGATAGCTGGCGCTCT
++
+#1=DDFFFGHGHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1325:2083 1:N:0:
+NCAGAAGAAAGGGCCTTGTCGGAGG
++
+#1=DDDDDHHFHDGI at EEHG:?FA8
+ at machine1:HiMom:abcdeACXX:1:2101:1336:2109 1:N:0:
+NACTATCAGGATCGTGGCTATTTTG
++
+#1BDDFFFHHHHHJIJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1349:2084 1:N:0:
+NCAAGTAGCAGTGTCACGCCTTAGC
++
+#1=DDBDDADFDDBEH at HC=CEGG@
+ at machine1:HiMom:abcdeACXX:1:2101:1365:2094 1:N:0:
+NAAGGTGAAGGCCGGCGCGCTCGCC
++
+#1=BDDDFFHHHHJGGGIGFIHIIJ
+ at machine1:HiMom:abcdeACXX:1:2101:1370:2116 1:N:0:
+NTGGTGGTCCATAGAGATTTGAAAC
++
+#1:4BD7DACF?FCA:4+<ACHIIH
+ at machine1:HiMom:abcdeACXX:1:2101:1386:2105 1:N:0:
+NTACTAAAGAAAAAGTTGAAGAACT
++
+#1=DDDFFHHHHHJJGHIJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1414:2098 1:N:0:
+NAGGACATCGATAAAGGCGAGGTGT
++
+#1=DDFFFHHHHHJJJJJJJJJHHG
+ at machine1:HiMom:abcdeACXX:1:2101:1427:2081 1:N:0:
+NCGAGTGCCTAGTGGGCCACTTTTG
++
+#4=DDBDFHHHHFHIJJJJIJJJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1450:2134 1:N:0:
+AGCACGCTGCCGCGGGACCTGCCCA
++
+?@@AD at DDHFH?DGIIIIG at FGFBF
+ at machine1:HiMom:abcdeACXX:1:2101:1459:2083 1:N:0:
+NCACACGCCACACGGAGCACACTTT
++
+#4=DDFFFHHHHHJJJJJJJJIIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1491:2093 1:N:0:
+NCTATGCCGATCGGGTGTCCGCACT
++
+#1=DDDDDHHFHHIIEHHHBGHGII
diff --git a/testdata/picard/illumina/25T8B25T/fastq/nonBarcoded.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/nonBarcoded.2.fastq
new file mode 100644
index 0000000..857ee76
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/fastq/nonBarcoded.2.fastq
@@ -0,0 +1,720 @@
+ at machine1:HiMom:abcdeACXX:1:1101:1031:2224 2:Y:0:
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1039:2147 2:Y:0:
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1046:2175 2:Y:0:
+NNGGANNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1047:2122 2:Y:0:
+NNTCANNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1048:2197 2:Y:0:
+NNGTGNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1065:2193 2:N:0:
+NCTTGNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1069:2159 2:N:0:
+GACGTNNNNNNNNNNNNNNNNNNNN
++
+<<<@?####################
+ at machine1:HiMom:abcdeACXX:1:1101:1071:2233 2:N:0:
+GTTTGNNNNNNNNNNNNNNNNNNNN
++
+<<<@@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1083:2193 2:N:0:
+AGGCTNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1084:2136 2:N:0:
+TTTCTNNNNNNNNNNNNNNNNNNNN
++
+<<<@@####################
+ at machine1:HiMom:abcdeACXX:1:1101:1089:2172 2:N:0:
+TCCGGNNNNNNNNNNNNNNNNNNNN
++
+:<<??####################
+ at machine1:HiMom:abcdeACXX:1:1101:1100:2207 2:N:0:
+AGGCTNNNNNNNNNNNNGNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1111:2148 2:N:0:
+GCGAANANNNNNNNNNNGGACGACN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1138:2141 2:N:0:
+TCCGATCTGCTTCAGGTCGATCAGA
++
+CCCFFFFFHGHHHJJIGHIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1140:2120 2:N:0:
+TTTTTTTTTTTTTAACTTTGCAAAT
++
+@@@DDDDDHHHHFB at 9FHI@BFH@@
+ at machine1:HiMom:abcdeACXX:1:1101:1143:2192 2:N:0:
+CGACAAGTCTGGCTTATCACTCATC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1150:2228 2:N:0:
+ATGGGAGGCGATTCCTAGGGGGTTG
++
+8?=DD8;@BH6DHD<FGGGEIGHIG
+ at machine1:HiMom:abcdeACXX:1:1101:1157:2135 2:N:0:
+TTTAAAGTCTTAATCAAAGATGATA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1162:2207 2:Y:0:
+TAAAACTGGGGAAGTTAGAGGAATG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1165:2239 2:N:0:
+ATGGAAGTCGAGACAGAAGTGAGAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1175:2197 2:N:0:
+AAGAGCTGGGGAACATCCAGAAAGG
++
+BC at FFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1188:2237 2:N:0:
+GCTTCCTTCAAGACAGAAGTGAGAA
++
+CCCFFDDEFHHFFE at FDHHAIAFHG
+ at machine1:HiMom:abcdeACXX:1:1101:1197:2200 2:N:0:
+ATATTCCACTGGAACCACAGAACCC
++
+@@@FFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1206:2126 2:N:0:
+ATCTGTCCAGTGGTGCACTGAATGT
++
+CCCFFFFFHHHHHHIIJJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1212:2230 2:N:0:
+TTTTAGCTTTATTGGGGAGGGGGTG
++
+CCCFFFFFHHGHHJJJJGJJJJJDF
+ at machine1:HiMom:abcdeACXX:1:1101:1218:2200 2:N:0:
+GCTCTTCCGATCTATCTGCTCGTCC
++
+(-(=34???3;@#############
+ at machine1:HiMom:abcdeACXX:1:1101:1219:2164 2:N:0:
+ATCTTATCCACTCCTTCCACTTTGG
++
+CCCFFFFFHHHHHJJIJJJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1221:2143 2:N:0:
+CAATTGAATGTCTGCACAGCCGCTT
++
+@@@FFFFDHHHHHJJJIIIJGHIJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1236:2121 2:N:0:
+TTGCGCTTACTTTGTAGCCTTCATC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1242:2170 2:N:0:
+GGAAGGAAAAGAAGCACAAGTACAT
++
+@@@DFDFFHHHGHHGIIGJJEHHIG
+ at machine1:HiMom:abcdeACXX:1:1101:1257:2223 2:N:0:
+TGCTCTTCCGATCTTTTAGCAAAGC
++
+:?@DDBDDHFFHDGIGIIJJJGGGI
+ at machine1:HiMom:abcdeACXX:1:1101:1259:2152 2:N:0:
+ATTTTTATATTTTTTTAGACATAGG
++
+CCCFFFFFGHHHHJJJJIGIIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1261:2127 2:Y:0:
+TTTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFHGHHHJJIFDDDDDDDD
+ at machine1:HiMom:abcdeACXX:1:1101:1263:2236 2:Y:0:
+AGTTCTTCAGTAATTTTAGTACTGC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1267:2209 2:N:0:
+GGCAGAGTCTCCAACAGCCCCGTAC
++
+=;?DDDD?CCFHAIIIGGIIGE at EG
+ at machine1:HiMom:abcdeACXX:1:1101:1269:2170 2:N:0:
+TTCCAAGCCTGTGCTTTAAGGAAAA
++
+@@<ADBDBDF8DDCFH at GIE@@GGH
+ at machine1:HiMom:abcdeACXX:1:1101:1290:2225 2:N:0:
+TCAGTTCACTGGCAAAGACAGTCAC
++
+C@@FBEDDFHFHGIIICEHGDHBHE
+ at machine1:HiMom:abcdeACXX:1:1101:1291:2150 2:N:0:
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHFHHIJJJIIIGIJIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1302:2244 2:N:0:
+TGAATACATATAACAAATGCAAAAA
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1308:2153 2:Y:0:
+TCTGTAAGGTAATCCCCGCATGTGT
++
+1?1=4===AFFDFFGFDGFB at CFB:
+ at machine1:HiMom:abcdeACXX:1:1101:1309:2210 2:N:0:
+AGTGGGCTAGGGCATTTTTAATCTT
++
+@@?DFFDFHHHDFHJIJJIJGIIIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1314:2233 2:N:0:
+AGGAAAGTTGGGCTGACCTGACAGA
++
+@@<DDD;=FBFADBCGDEH?F;FCG
+ at machine1:HiMom:abcdeACXX:1:1101:1316:2126 2:N:0:
+TCTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFHHHHHJJJJHFDDDDDD
+ at machine1:HiMom:abcdeACXX:1:1101:1327:2200 2:Y:0:
+GTCATCTGGGCTGTCGACAGGTGTC
++
+ at B@FFFFFHHHHGIJJJJJJIFHHI
+ at machine1:HiMom:abcdeACXX:1:1101:1328:2225 2:N:0:
+AGGAAATTAGGACTTACCTGACATA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1338:2175 2:N:0:
+GCTTGTTGGCTTTAACATCCACAAT
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1347:2149 2:N:0:
+GCTCTTCCGATCTGTGCTCTTCCGA
++
+CCCFFFFFDFHHFIJDGIGGHGIGH
+ at machine1:HiMom:abcdeACXX:1:1101:1353:2226 2:N:0:
+GTGCTCTTCCGATCTTCAGGTTACC
++
+BBBFFFFFHHHHHJJJJJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1363:2138 2:N:0:
+GTTCTTAAACCTGTTAGAACTTCTG
++
+C@@FFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1399:2128 2:N:0:
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHHHHIJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1403:2194 2:N:0:
+ACATGGTGAAACCCTGTCTCTACTA
++
+CCCFFFDDHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1406:2222 2:N:0:
+GGCTGGACTCCCCTGGTTCTGGGCA
++
+;?@DDDBD?FHDFGIIIGIGHHIII
+ at machine1:HiMom:abcdeACXX:1:1101:1419:2119 2:N:0:
+ACTTTCCTTTTTTGTTTTACTTTAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1420:2213 2:N:0:
+TTCACTGTACCGGCCGTGCGTACTT
++
+ at CCFFFFDHHHFGIJJJJJJGHIGG
+ at machine1:HiMom:abcdeACXX:1:1101:1435:2194 2:N:0:
+TTTTGTTTTCTTTTACTGAAGTGTA
++
+CCCFFDFFHHHHHJJJJIHIJHHHJ
+ at machine1:HiMom:abcdeACXX:1:1101:1441:2148 2:N:0:
+TTTTGGCTCTAGAGGGGGTAGAGGG
++
+CCCFFFFFHHDFBHIIJJ1?FGHIJ
+ at machine1:HiMom:abcdeACXX:1:1101:1452:2132 2:N:0:
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHHHHJJJJJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1460:2176 2:N:0:
+AGGAAAAAGACACAACAAGTCCAAC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:1479:2221 2:N:0:
+GGGGAAATCTATTTTTATGTAAAAA
++
+ at CCFFFFFHHHHHJIGIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1101:1491:2120 2:N:0:
+GGCCAGGCTGAACTTCTGAGCTGCT
++
+CCCFFFFFHHHGHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2133 2:N:0:
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1018:2217 2:Y:0:
+NNNNNNNNNNNNNNNNNNNNNNNNN
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1028:2202 2:N:0:
+NNAAACNCNTNNNNNNNGGNNTGNN
++
+##42@?###################
+ at machine1:HiMom:abcdeACXX:1:1201:1042:2174 2:N:0:
+NTCAGGAAGGCNNCAAAAAAAGAAA
++
+#0;@@@?@?<@##3<@@?@@?????
+ at machine1:HiMom:abcdeACXX:1:1201:1043:2246 2:N:0:
+NGCATCATTTCNNGCTTCTCTCTGT
++
+#0;@@??@=@>##22=;@??><@??
+ at machine1:HiMom:abcdeACXX:1:1201:1045:2105 2:Y:0:
+NTTTTTTTTTTNNTTTTTTTTTTTT
++
+#0;@@@@@@@?##0:????????=<
+ at machine1:HiMom:abcdeACXX:1:1201:1054:2151 2:N:0:
+GTCAGGCACTGAGAATATATGGGTG
++
+CBCFFFFFHHHHHJJJJJJJJJJEG
+ at machine1:HiMom:abcdeACXX:1:1201:1064:2239 2:N:0:
+GGGATGGGAGGGCGATGAGGACTAG
++
+8?@:DDDACC:FHHGIH<EGDDDFH
+ at machine1:HiMom:abcdeACXX:1:1201:1073:2225 2:N:0:
+CGTGTGCTCTTCCGATCTGGAGGGT
++
+ at BBDFFFFHHHHHJJJJJJJJJJJ:
+ at machine1:HiMom:abcdeACXX:1:1201:1083:2121 2:N:0:
+ACACACAACACCACCGCCCTCCCCC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1084:2204 2:N:0:
+TGGCTCCTCAGGCTCTCATCAGTTG
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1095:2146 2:N:0:
+ACTGACAACACCAAATGCTGCTAAG
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1103:2184 2:N:0:
+AGAAGTTTCAGAATTGTGGCCCCAT
++
+B at BFFDEFHHHHHJJJGHIJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1201:1107:2109 2:N:0:
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHGHHJJJJIIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1118:2198 2:N:0:
+AATAAACTTTATTAAAGCAGTTAAA
++
+C at CFFFFFHDHHHGIIIJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1122:2227 2:N:0:
+GTCATATAAGGCCCAGTCCAAGGAA
++
+@@@FFFFFHHHGGIJIGGIJFIJII
+ at machine1:HiMom:abcdeACXX:1:1201:1123:2161 2:Y:0:
+CGTGTGCTCTTCCGATCTGCATACA
++
+===AAAA8AAAA<AAA)@CBA9>A#
+ at machine1:HiMom:abcdeACXX:1:1201:1127:2112 2:Y:0:
+TAATCACCTGAGCAGTGAAGCCAGC
++
+@<@?BDDDHD?FDBHI?AHGGGDFH
+ at machine1:HiMom:abcdeACXX:1:1201:1134:2144 2:N:0:
+AGTGTGAGTAATGGTTGAGAGGTGG
++
+B@?DDDFFFHHGHJHHGFIHHIFGI
+ at machine1:HiMom:abcdeACXX:1:1201:1138:2227 2:Y:0:
+GACAAATATAGGAAATAGAAGCTAT
++
+=1=A=AAA,2?4>7C<<4<A+3<AB
+ at machine1:HiMom:abcdeACXX:1:1201:1140:2125 2:N:0:
+TTCATAAATTGGTCTTAGATGTTGC
++
+CC at FFFFFHHHHFGIJIIIJIJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1142:2242 2:N:0:
+GTAAAATGTAAAATAATAAAAAATG
++
+?=?DDDD;AF<DF<FFFFIIIFF@<
+ at machine1:HiMom:abcdeACXX:1:1201:1150:2161 2:N:0:
+TTCTCACTACTGTGATTGTGCCACT
++
+ at C@FFFFFGHHHHGIIIICEHCFGH
+ at machine1:HiMom:abcdeACXX:1:1201:1159:2179 2:Y:0:
+TTTTTTTTTATTTTTCTAAATACTT
++
+===AA####################
+ at machine1:HiMom:abcdeACXX:1:1201:1160:2109 2:N:0:
+ACATCCTTCCCATGCCACCAACTCG
++
+CCCFFFFFGHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1180:2119 2:N:0:
+GCTCTAAATTTTGCTTTTCTACAGC
++
+CCCFFFFFHHHHHJJJJIJIJJIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1185:2143 2:N:0:
+GCTGAAGGCCCGTGGGCCAGAGGTG
++
+ at CCFFFFFHHHHHJJJJJJJJJJHI
+ at machine1:HiMom:abcdeACXX:1:1201:1187:2100 2:N:0:
+AAAAAAGAGCCCGCATTGCCGAGAC
++
+=<=;AA###################
+ at machine1:HiMom:abcdeACXX:1:1201:1190:2194 2:N:0:
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1204:2228 2:N:0:
+TCTTCTTGTCGATGAGGAACTTGGT
++
+@?@FFFFFDHHGHJIJJGHIIJJJH
+ at machine1:HiMom:abcdeACXX:1:1201:1208:2132 2:N:0:
+CTGTAGAAAGGATGGTCGGGCTCCA
++
+@@CDFFFFGHFHHJIJJGJIBHJJG
+ at machine1:HiMom:abcdeACXX:1:1201:1219:2115 2:N:0:
+TGGGAGTAGTTCCCTGCTAAGGGAG
++
+???DBDBDADDDDIEID:AFFD:?8
+ at machine1:HiMom:abcdeACXX:1:1201:1236:2187 2:N:0:
+CTCCTTAGCGGATTCCGACTTCCAT
++
+CCCFFFFDHHHHGIJJIGIGIJJGG
+ at machine1:HiMom:abcdeACXX:1:1201:1242:2207 2:N:0:
+ATCTTTTATTGGCCTCCTGCTCCCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1252:2141 2:N:0:
+AGTTATTTTGCCTATGTCCAACAAG
++
+BCBFFFFFGHHHHJIJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1260:2165 2:N:0:
+ATCTGATCTAAGTTGGGGGACGCCG
++
+@@@FFDFFHHHHHJJJIJIIIGIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1280:2179 2:N:0:
+GAGGACTGCTTGAGTCCAGGAGTTC
++
+@@BFFDEFGHHHHIFGCHIJJJGGI
+ at machine1:HiMom:abcdeACXX:1:1201:1281:2133 2:N:0:
+GCAACAAAATTTCATATGACTTAGC
++
+CCCFFFFFHHHHHJJIIIHICHIIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1285:2100 2:N:0:
+GATCTTTTTTGCTTTGTAGTTATAG
++
+@@@DFFFFHHHHHIIGIABCFFHBF
+ at machine1:HiMom:abcdeACXX:1:1201:1291:2158 2:N:0:
+CGTGTGCTCTTCCGATCTGATGGGC
++
+ at CCFFFDD?FHHFGEHHIIDHIIII
+ at machine1:HiMom:abcdeACXX:1:1201:1300:2137 2:N:0:
+GCTCTTCCGATCTTTTTTTTAATTT
++
+@@?DDDDDFDHADEHGIGGED3?FD
+ at machine1:HiMom:abcdeACXX:1:1201:1312:2112 2:N:0:
+ATTTGCAGGAGCCGGCGCAGGTGCA
++
+CCCFFFFFHHHHHJJJIJJJJGHIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1331:2162 2:N:0:
+TAATCCCAGTACTTTGGGAGGCCAA
++
+CCCFFFFFHHHHHJJJJIJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1341:2116 2:N:0:
+ATAACAGCGAGACTGGCAACTTAAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1344:2147 2:N:0:
+ACGATTAGTTTTAGCATTGGAGTAG
++
+@<??DDDDFHHHFGGHHIIIGGAGH
+ at machine1:HiMom:abcdeACXX:1:1201:1345:2181 2:N:0:
+ATACGGATGTGTTTAGGAGTGGGAC
++
+CCCFFFFFHHHHHIIJJHJFHIJIJ
+ at machine1:HiMom:abcdeACXX:1:1201:1364:2113 2:N:0:
+TAAAGAGAGCCAGTGGAGTTACGAC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2109 2:N:0:
+GTCAGACAGGGGGATTTGGGCTGTG
++
+BBCFFFFFHHHHHHJJJHIJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1392:2184 2:N:0:
+ATCTTTATTCATTTGTATGATCTTA
++
+@@BFFFFFHFFHFHIHIIJIJJJJI
+ at machine1:HiMom:abcdeACXX:1:1201:1393:2143 2:N:0:
+GATAAATGCACGCATCCCCCCCGCG
++
+C at CFFFFFGGHHHHJJJJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1201:1414:2174 2:Y:0:
+TTTTTTTTTTTTTTTTTTTTTTTTT
++
+@;@1BDADF????FFEB>B6=BBBB
+ at machine1:HiMom:abcdeACXX:1:1201:1416:2128 2:N:0:
+TTGGTGTGGAGGCGGTGGCGGGATC
++
+@@@DDDDDHHFHHII:?GGHIIB6?
+ at machine1:HiMom:abcdeACXX:1:1201:1421:2154 2:N:0:
+TGTGCTCTTCCGATCTTGTGCTCTT
++
+BC at DFFFFHHHHHJJJJFHIHHIJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1439:2156 2:N:0:
+GGAGATTATTTGCCTTGAAGTAAGC
++
+-;(22<>>@>8@>8;@#########
+ at machine1:HiMom:abcdeACXX:1:1201:1452:2143 2:N:0:
+TTTTAGTCTTAGCATTTACTTTCCC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:1201:1458:2109 2:N:0:
+GATACGAACACACAAGAACTTTTTT
++
+CCCFFFFFHHHHHJJJJJJJJJJJI
+ at machine1:HiMom:abcdeACXX:1:1201:1472:2121 2:Y:0:
+GTGTGCTCTTCCGATCTGGAGGATG
++
+=+=??A4A==A at 7A<?#########
+ at machine1:HiMom:abcdeACXX:1:1201:1483:2126 2:Y:0:
+GCATGCAGCTGGGTGCTGTGATGCA
++
+@@@DDDBB<DD8F<<CGG?AA?A<F
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2109 2:N:0:
+ACGTGTGCTCTTCCCGATCTGTATA
++
+CCCFF?DDFBHHHJJIIDHJIJJJH
+ at machine1:HiMom:abcdeACXX:1:1201:1486:2146 2:Y:0:
+TTTTTTTTTTTTTTTTTTTTTGGGC
++
+<<<@??@??@???????########
+ at machine1:HiMom:abcdeACXX:1:2101:1011:2102 2:N:0:
+NNNNNTCACACATAATTTTAAAATT
++
+#####22@?@@??@@@@@??@@@@@
+ at machine1:HiMom:abcdeACXX:1:2101:1013:2146 2:N:0:
+NNNNCGCTAGAACCAACTTATTCAT
++
+####24=?@@?@?@@?@@@@@@?@@
+ at machine1:HiMom:abcdeACXX:1:2101:1021:2209 2:N:0:
+NNGGAAGGCTGCTAGCTGGCCAGAG
++
+##08@>??@@??@?????????>?@
+ at machine1:HiMom:abcdeACXX:1:2101:1023:2237 2:Y:0:
+NNTTTGTTTGAGTTCCTTGTAGATT
++
+##0:=@?>?@???@:>?@??>?;?<
+ at machine1:HiMom:abcdeACXX:1:2101:1031:2163 2:N:0:
+NNACATTTGTCACCACTAGCCACCA
++
+##0<@?@@@@@@@@@@?@@@@@@@?
+ at machine1:HiMom:abcdeACXX:1:2101:1036:2087 2:N:0:
+NGTCCACTTACGAAGCAAATACTTT
++
+#4=DDFFFHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1040:2208 2:Y:0:
+NCTGATAGTCACTGAAATGAATTCA
++
+#-0=>(2 at .22@@############
+ at machine1:HiMom:abcdeACXX:1:2101:1048:2238 2:N:0:
+NGTCACATCGTTGAAGCACTGGATC
++
+#11ADDDB<CFFHCHGDBHGIIIII
+ at machine1:HiMom:abcdeACXX:1:2101:1054:2162 2:N:0:
+NGGACAGGGAAGGGAAGGAAGGGTG
++
+#4=DDFDFHHHHHJIJIIDHHGICG
+ at machine1:HiMom:abcdeACXX:1:2101:1059:2083 2:N:0:
+NGAATGTCTTAGAAGGATGCTTCTC
++
+#1=BDDDEHHGHHJJJJJIJJIIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1063:2206 2:N:0:
+NTGCTAGGATGAGGATGGATAGTAA
++
+#1=DDDFFHHHHHJHIIJHIIIHHJ
+ at machine1:HiMom:abcdeACXX:1:2101:1064:2242 2:N:0:
+NGGAAAAAGGTTGTCAAGCGTTAAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1072:2170 2:N:0:
+NGGGGAGACAGAGAGGATCAGAAGT
++
+#4=BDDFDHHDFHEGFEGGIJIIIG
+ at machine1:HiMom:abcdeACXX:1:2101:1077:2139 2:N:0:
+NATTAGTTGGCGGATGAAGCAGATA
++
+#4=DFFFFHHHHHJJJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1084:2188 2:N:0:
+TACAAGGTCAAAATCAGCAACAAGT
++
+CCCFFFFDHHHHHJJJJJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1100:2085 2:N:0:
+ATCTTGATCTCCTCCTTCTTGGCCT
++
+@@@DDDDDHHFHFEIIIIHHBAHBG
+ at machine1:HiMom:abcdeACXX:1:2101:1102:2221 2:N:0:
+ATAACTGACTCTACTCAGTAGATTA
++
+CCCFFFFFHHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1105:2131 2:N:0:
+CAGCAGCAGCAACAGCAGAAACATG
++
+CCCFFFFFHHHHHJJJJJIJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1112:2245 2:N:0:
+TCGTAGTGTTGTAATTTCGTCTTCT
++
+?8?DBDDDCCFCAACGGFFCBFFAE
+ at machine1:HiMom:abcdeACXX:1:2101:1122:2136 2:N:0:
+CTTGCCAGCCTGCAGGCCCCGCGGC
++
+???BBAABDD?DDIID)A:3<EADD
+ at machine1:HiMom:abcdeACXX:1:2101:1123:2095 2:N:0:
+TCCGCCTCCAGCTTCAGCTTCTCCT
++
+@@@FDDFFHHHHHJHGGJIJJJEHH
+ at machine1:HiMom:abcdeACXX:1:2101:1126:2082 2:N:0:
+TCTCTTTCCACCTTGGTCACCTTCC
++
+ at C@DDDFFHHHHHJEGGIHHIJGIH
+ at machine1:HiMom:abcdeACXX:1:2101:1133:2239 2:N:0:
+AGCTTTTTGTTTCCTAGCTTGTCTT
++
+?@?DDFFFHHHHF4ACFHIJHHHGH
+ at machine1:HiMom:abcdeACXX:1:2101:1143:2137 2:N:0:
+GCTCTTCAGATCTAGGGGGAACAGC
++
+@@@DD?=DCAFFFHIIDG:EFHIII
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2182 2:Y:0:
+TTTTTTTTTTTTTTTTTTTTTTTTA
++
+9<<?@?@;5=?##############
+ at machine1:HiMom:abcdeACXX:1:2101:1151:2236 2:Y:0:
+TTTGAAGCCTCTTTATCCTTGGCAT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1162:2139 2:N:0:
+ATCGTTTATGGTCGGAACTACGACG
++
+BCCFFFFFHHHHHIJJJJJJJIJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2203 2:N:0:
+TTGGTTCACTTATGTATTTATGAAT
++
+ at CCFDFFFHHHHHJHIIJJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1163:2222 2:N:0:
+GAGCGATAATGGTTCTTTTCCTCAC
++
+@@@DFFFFHHHHHJJJJJJJIJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1172:2152 2:Y:0:
+ATCGTTTCTGGGGACTAGTGAGGCG
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1186:2093 2:N:0:
+AATGTTGGGAGGACAATGATGGAAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1188:2195 2:N:0:
+GCACATACACCAAATGTCTGAACCT
++
+CCCFFFFFHHHHHJJJHIJJJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1195:2150 2:N:0:
+AATTGAACTTCACCACCCAGAGGAA
++
+CCCFFFFFHHHHHJJJJJJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1207:2084 2:Y:0:
+TCACCACTCTTCTGGGCATCCCCTG
++
+@@@DDEDFHHHHHIJIHHGHGGJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1208:2231 2:Y:0:
+CTTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFHHHHHJJJHFDDDDDDD
+ at machine1:HiMom:abcdeACXX:1:2101:1215:2110 2:N:0:
+ATCTTTCCCCCATTAAGAACAGCAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2172 2:N:0:
+GGACTTCTAGGGGATTTAGCGGGGT
++
+CCCFFFFFHHHHHJJJJJJJJJJJD
+ at machine1:HiMom:abcdeACXX:1:2101:1216:2193 2:N:0:
+AGGCATGACACTGCATTTTAAATAC
++
+@@@DDDDDHFFHHGGDFHFHIIHGG
+ at machine1:HiMom:abcdeACXX:1:2101:1226:2088 2:N:0:
+GCTCTTCCGATCTAGGTAATAGCTA
++
+==?BDFFFDCDDHFFFAFHDHIJGJ
+ at machine1:HiMom:abcdeACXX:1:2101:1231:2208 2:N:0:
+AGCCAGTGTTGGTGTGTTGACTGTT
++
+@@;1ADABCF;BF<AACGCHEBHC<
+ at machine1:HiMom:abcdeACXX:1:2101:1233:2133 2:Y:0:
+TTTTTTTTTTTTTTTTTTTTTTTTT
++
+CCCFFFFFGHHHHJJJFDDDDDDDD
+ at machine1:HiMom:abcdeACXX:1:2101:1240:2197 2:Y:0:
+ACTGGAGATCCTTGTTACATGCCCA
++
+??+++A:DD?:ADEE@::C4:C<E:
+ at machine1:HiMom:abcdeACXX:1:2101:1245:2154 2:N:0:
+ACCAATCAGTAGCACCACTATACAC
++
+CCCFFFFFHHHHHJJJJJJIJJJJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1249:2231 2:N:0:
+TCTCTCGGCCTTCCACTCTAGCATA
++
+@@@FFFFFFHHGHIJJJGJIIJHIJ
+ at machine1:HiMom:abcdeACXX:1:2101:1258:2092 2:N:0:
+TTAGACAAAACACCAAAATAAAATA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1262:2128 2:Y:0:
+TCTTGTGGTAACTTTTCTGACACCT
++
+-(---9@;@?:8>?4:>?@######
+ at machine1:HiMom:abcdeACXX:1:2101:1273:2119 2:Y:0:
+ATGATGGATCTTCTCTAACTTGTCA
++
+>=><AAAAA+2AA?CB4@@ABB3?A
+ at machine1:HiMom:abcdeACXX:1:2101:1285:2105 2:Y:0:
+TGTCTATATCAACCAACACCTCTTC
++
+-(0(():94:9:???##########
+ at machine1:HiMom:abcdeACXX:1:2101:1312:2105 2:N:0:
+GTTGAGAATAGGTTGAGATCGTTTC
++
+ at CCFFFDFHHFHDHIJJJJJJJIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1325:2083 2:N:0:
+TGTGCTCTTCCGATCTGGAGAAAAA
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:2101:1336:2109 2:N:0:
+AGACCAGAACAGCTCCAGGTGCTCC
++
+CCCFFFFFHHHHHJJJJJJCGHIJJ
+ at machine1:HiMom:abcdeACXX:1:2101:1349:2084 2:N:0:
+AGTCTGAATCATTGGTGTCTGAAGA
++
+<5;??=>=>>?##############
+ at machine1:HiMom:abcdeACXX:1:2101:1365:2094 2:N:0:
+GCTCTTCCGATCTTGTGCTCTTCCG
++
+CCCFFFFDHFHHGJJIIJIJJIHII
+ at machine1:HiMom:abcdeACXX:1:2101:1370:2116 2:N:0:
+CACCATCTGACATCATGTTTGAAAG
++
+@@@DFFFDFFHDHIGBHHII<HEDB
+ at machine1:HiMom:abcdeACXX:1:2101:1386:2105 2:N:0:
+AGGAATTATTCTTCTGCCATAAGGT
++
+B@@DDFFFHGFHHIJJJJJGIGIJH
+ at machine1:HiMom:abcdeACXX:1:2101:1414:2098 2:N:0:
+TTGGGGCCGGTGCCGTCGGGCCCAA
++
+CCCFFFFFHHHHGJJIJJJJJJJIJ
+ at machine1:HiMom:abcdeACXX:1:2101:1427:2081 2:N:0:
+CCGACTTCCATGGCCACCGTCCTGC
++
+CCCFFFFFHHHHHJJJIIGFIIJJI
+ at machine1:HiMom:abcdeACXX:1:2101:1450:2134 2:N:0:
+ACAAACCCTTGTGTCGAGGGCTGAC
++
+CC at FDFDFFDFHFGIIE1CGGHBGE
+ at machine1:HiMom:abcdeACXX:1:2101:1459:2083 2:N:0:
+ATTTCACCAAAATAATCAGAAGGCC
++
+CCCFFFFDBHGHHIGGIJFJJGGFH
+ at machine1:HiMom:abcdeACXX:1:2101:1491:2093 2:N:0:
+AGAGACGGGGTCTCGCTATGTTGCC
++
+BCCDFFFFHHHHHJIIJJJJIJIJJ
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplex.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/testMultiplex.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplex.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/testMultiplex.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplex.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/testMultiplex.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplex.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/testMultiplex.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplexRH.1.fastq b/testdata/picard/illumina/25T8B25T/fastq/testMultiplexRH.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplexRH.1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/testMultiplexRH.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplexRH.2.fastq b/testdata/picard/illumina/25T8B25T/fastq/testMultiplexRH.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplexRH.2.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/testMultiplexRH.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplexRH.barcode_1.fastq b/testdata/picard/illumina/25T8B25T/fastq/testMultiplexRH.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/fastq/testMultiplexRH.barcode_1.fastq
rename to testdata/picard/illumina/25T8B25T/fastq/testMultiplexRH.barcode_1.fastq
diff --git a/testdata/picard/illumina/25T8B25T/sams/AAAAAAAA.sam b/testdata/picard/illumina/25T8B25T/sams/AAAAAAAA.sam
new file mode 100644
index 0000000..4882d35
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AAAAAAAA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AAAAAAAA LB:LN_AAAAAAAA PL:illumina PU:HiMom.1.AAAAAAAA CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/AAAAGAAG.sam b/testdata/picard/illumina/25T8B25T/sams/AAAAGAAG.sam
new file mode 100644
index 0000000..6446f79
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AAAAGAAG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AAAAGAAG LB:LN_AAAAGAAG PL:illumina PU:HiMom.1.AAAAGAAG CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/AACAATGG.sam b/testdata/picard/illumina/25T8B25T/sams/AACAATGG.sam
new file mode 100644
index 0000000..e081929
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AACAATGG.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AACAATGG LB:LN_AACAATGG PL:illumina PU:HiMom.1.AACAATGG CN:BI
+HiMom:1:1101:1138:2141 77 * 0 0 * * 0 0 .TTACCAAGGTTTTCTGTTTAGTGA #1=DDFFFHHFHHJJJIHJIJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1138:2141 141 * 0 0 * * 0 0 TCCGATCTGCTTCAGGTCGATCAGA CCCFFFFFHGHHHJJIGHIJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1206:2126 77 * 0 0 * * 0 0 .ATTCTGCCATATTGGTCCGACAGT #1=DDFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
+HiMom:1:1101:1206:2126 141 * 0 0 * * 0 0 ATCTGTCCAGTGGTGCACTGAATGT CCCFFFFFHHHHHHIIJJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1077:2139 77 * 0 0 * * 0 0 CACAGGCTTCCACGGACTTAACGTC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1077:2139 141 * 0 0 * * 0 0 .ATTAGTTGGCGGATGAAGCAGATA #4=DFFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
+HiMom:1:2101:1112:2245 77 * 0 0 * * 0 0 TGCCATCTGCTCTGGGAAGCACCAG 1:=DDDDDFBC:DEFIFFFIEF at BE RG:Z:HiMom.1
+HiMom:1:2101:1112:2245 141 * 0 0 * * 0 0 TCGTAGTGTTGTAATTTCGTCTTCT ?8?DBDDDCCFCAACGGFFCBFFAE RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/AACGCATT.sam b/testdata/picard/illumina/25T8B25T/sams/AACGCATT.sam
new file mode 100644
index 0000000..3d40a1f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AACGCATT.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AACGCATT LB:LN_AACGCATT PL:illumina PU:HiMom.1.AACGCATT CN:BI
+HiMom:1:1101:1197:2200 77 * 0 0 * * 0 0 GGGCGCCCCGTGAGGACCCAGTCCT @C at FFADDFFCFCEHIIJIJJIEFC RG:Z:HiMom.1
+HiMom:1:1101:1197:2200 141 * 0 0 * * 0 0 ATATTCCACTGGAACCACAGAACCC @@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1308:2153 589 * 0 0 * * 0 0 TTTTGGAAGAGACCTCAATTACTGT ???DDDDD?:22AE:A2<3,AF?3A RG:Z:HiMom.1
+HiMom:1:1101:1308:2153 653 * 0 0 * * 0 0 TCTGTAAGGTAATCCCCGCATGTGT 1?1=4===AFFDFFGFDGFB at CFB: RG:Z:HiMom.1
+HiMom:1:1101:1452:2132 77 * 0 0 * * 0 0 .CGTCCTGGAAAACGGGGCGCGGCT #1=BDBDDFHHHHF at FHDHIGIIII RG:Z:HiMom.1
+HiMom:1:1101:1452:2132 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1150:2161 77 * 0 0 * * 0 0 AAGTCACCTAATATCTTTTTTTTTT @@<??;?D?CFD,A4CDDHFBIIID RG:Z:HiMom.1
+HiMom:1:1201:1150:2161 141 * 0 0 * * 0 0 TTCTCACTACTGTGATTGTGCCACT @C at FFFFFGHHHHGIIIICEHCFGH RG:Z:HiMom.1
+HiMom:1:2101:1240:2197 589 * 0 0 * * 0 0 ATAAAACATAGCAATATTTTCCTAT ######################### RG:Z:HiMom.1
+HiMom:1:2101:1240:2197 653 * 0 0 * * 0 0 ACTGGAGATCCTTGTTACATGCCCA ??+++A:DD?:ADEE@::C4:C<E: RG:Z:HiMom.1
+HiMom:1:2101:1336:2109 77 * 0 0 * * 0 0 .ACTATCAGGATCGTGGCTATTTTG #1BDDFFFHHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1336:2109 141 * 0 0 * * 0 0 AGACCAGAACAGCTCCAGGTGCTCC CCCFFFFFHHHHHJJJJJJCGHIJJ RG:Z:HiMom.1
+HiMom:1:2101:1427:2081 77 * 0 0 * * 0 0 .CGAGTGCCTAGTGGGCCACTTTTG #4=DDBDFHHHHFHIJJJJIJJJJI RG:Z:HiMom.1
+HiMom:1:2101:1427:2081 141 * 0 0 * * 0 0 CCGACTTCCATGGCCACCGTCCTGC CCCFFFFFHHHHHJJJIIGFIIJJI RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACAAAATT.sam b/testdata/picard/illumina/25T8B25T/sams/ACAAAATT.sam
new file mode 100644
index 0000000..3cfd422
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACAAAATT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACAAAATT LB:LN_ACAAAATT PL:illumina PU:HiMom.1.ACAAAATT CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACAGGTAT.sam b/testdata/picard/illumina/25T8B25T/sams/ACAGGTAT.sam
new file mode 100644
index 0000000..aa9ca4d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACAGGTAT.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACAGGTAT LB:LN_ACAGGTAT PL:illumina PU:HiMom.1.ACAGGTAT CN:BI
+HiMom:1:1101:1236:2121 77 * 0 0 * * 0 0 .GGTGCTTCATATCCCTCTAGAGGA #1=BDDFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1236:2121 141 * 0 0 * * 0 0 TTGCGCTTACTTTGTAGCCTTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1341:2116 77 * 0 0 * * 0 0 .AGAAGCCCCAGGAGGAAGACAGTC #1=DDFFFHHHHHHHJIIJJJJJGI RG:Z:HiMom.1
+HiMom:1:1201:1341:2116 141 * 0 0 * * 0 0 ATAACAGCGAGACTGGCAACTTAAA ######################### RG:Z:HiMom.1
+HiMom:1:2101:1063:2206 77 * 0 0 * * 0 0 TCCTATTCGCCTACACAATTCTCCG CCCFFFFFHHHHHJJJJJJJHJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1063:2206 141 * 0 0 * * 0 0 .TGCTAGGATGAGGATGGATAGTAA #1=DDDFFHHHHHJHIIJHIIIHHJ RG:Z:HiMom.1
+HiMom:1:2101:1325:2083 77 * 0 0 * * 0 0 .CAGAAGAAAGGGCCTTGTCGGAGG #1=DDDDDHHFHDGI at EEHG:?FA8 RG:Z:HiMom.1
+HiMom:1:2101:1325:2083 141 * 0 0 * * 0 0 TGTGCTCTTCCGATCTGGAGAAAAA ######################### RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACAGTTGA.sam b/testdata/picard/illumina/25T8B25T/sams/ACAGTTGA.sam
new file mode 100644
index 0000000..69a1771
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACAGTTGA.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACAGTTGA LB:LN_ACAGTTGA PL:illumina PU:HiMom.1.ACAGTTGA CN:BI
+HiMom:1:2101:1048:2238 77 * 0 0 * * 0 0 .CTGCCGTGTCCTGACTTCTGGAAT #1:B?ADDACF<DCG;EG<FHH at CE RG:Z:HiMom.1
+HiMom:1:2101:1048:2238 141 * 0 0 * * 0 0 .GTCACATCGTTGAAGCACTGGATC #11ADDDB<CFFHCHGDBHGIIIII RG:Z:HiMom.1
+HiMom:1:2101:1216:2193 77 * 0 0 * * 0 0 TTTTCTTGGCCTCTGTTTTTTTTTT BCCFDFFFHHFFHJIGIJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1216:2193 141 * 0 0 * * 0 0 AGGCATGACACTGCATTTTAAATAC @@@DDDDDHFFHHGGDFHFHIIHGG RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACCAGTTG.sam b/testdata/picard/illumina/25T8B25T/sams/ACCAGTTG.sam
new file mode 100644
index 0000000..0df9571
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACCAGTTG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACCAGTTG LB:LN_ACCAGTTG PL:illumina PU:HiMom.1.ACCAGTTG CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACGAAATC.sam b/testdata/picard/illumina/25T8B25T/sams/ACGAAATC.sam
new file mode 100644
index 0000000..1fbb7b4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACGAAATC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACGAAATC LB:LN_ACGAAATC PL:illumina PU:HiMom.1.ACGAAATC CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACTAAGAC.sam b/testdata/picard/illumina/25T8B25T/sams/ACTAAGAC.sam
new file mode 100644
index 0000000..4be2063
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACTAAGAC.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACTAAGAC LB:LN_ACTAAGAC PL:illumina PU:HiMom.1.ACTAAGAC CN:BI
+HiMom:1:1101:1259:2152 77 * 0 0 * * 0 0 CACCTATAATCCCAGCTACTCCAGA CCCFFFFFHHHHHJJJJJJIJJJIJ RG:Z:HiMom.1
+HiMom:1:1101:1259:2152 141 * 0 0 * * 0 0 ATTTTTATATTTTTTTAGACATAGG CCCFFFFFGHHHHJJJJIGIIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1261:2127 589 * 0 0 * * 0 0 .TGAAATCTGGATAGGCTGGAGTTA #0-@@@################### RG:Z:HiMom.1
+HiMom:1:1101:1261:2127 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHGHHHJJIFDDDDDDDD RG:Z:HiMom.1
+HiMom:1:2101:1021:2209 77 * 0 0 * * 0 0 .GGCCCCACCCTCCTCCAGCACGTC #1=DDFFFHHHHHJJJJJJHIIHFH RG:Z:HiMom.1
+HiMom:1:2101:1021:2209 141 * 0 0 * * 0 0 ..GGAAGGCTGCTAGCTGGCCAGAG ##08@>??@@??@?????????>?@ RG:Z:HiMom.1
+HiMom:1:2101:1262:2128 589 * 0 0 * * 0 0 AGCAGAAGGGCAAAAGCTGGCTTGA 9;<@:@################### RG:Z:HiMom.1
+HiMom:1:2101:1262:2128 653 * 0 0 * * 0 0 TCTTGTGGTAACTTTTCTGACACCT -(---9@;@?:8>?4:>?@###### RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACTGTACC.sam b/testdata/picard/illumina/25T8B25T/sams/ACTGTACC.sam
new file mode 100644
index 0000000..bcf9179
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACTGTACC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACTGTACC LB:LN_ACTGTACC PL:illumina PU:HiMom.1.ACTGTACC CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/ACTGTATC.sam b/testdata/picard/illumina/25T8B25T/sams/ACTGTATC.sam
new file mode 100644
index 0000000..93a8856
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ACTGTATC.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACTGTATC LB:LN_ACTGTATC PL:illumina PU:HiMom.1.ACTGTATC CN:BI
+HiMom:1:1201:1458:2109 77 * 0 0 * * 0 0 .GAGACCATAGAGCGGATGCTTTCA #1=DDDFFHHGHGIJJIGIIJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1458:2109 141 * 0 0 * * 0 0 GATACGAACACACAAGAACTTTTTT CCCFFFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
+HiMom:1:2101:1105:2131 77 * 0 0 * * 0 0 TTGGAACACAGCGGGAATCACAGCA CCCFFFFFHHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1105:2131 141 * 0 0 * * 0 0 CAGCAGCAGCAACAGCAGAAACATG CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1349:2084 77 * 0 0 * * 0 0 .CAAGTAGCAGTGTCACGCCTTAGC #1=DDBDDADFDDBEH at HC=CEGG@ RG:Z:HiMom.1
+HiMom:1:2101:1349:2084 141 * 0 0 * * 0 0 AGTCTGAATCATTGGTGTCTGAAGA <5;??=>=>>?############## RG:Z:HiMom.1
+HiMom:1:2101:1365:2094 77 * 0 0 * * 0 0 .AAGGTGAAGGCCGGCGCGCTCGCC #1=BDDDFFHHHHJGGGIGFIHIIJ RG:Z:HiMom.1
+HiMom:1:2101:1365:2094 141 * 0 0 * * 0 0 GCTCTTCCGATCTTGTGCTCTTCCG CCCFFFFDHFHHGJJIIJIJJIHII RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/AGAAAAGA.sam b/testdata/picard/illumina/25T8B25T/sams/AGAAAAGA.sam
new file mode 100644
index 0000000..d40aec2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AGAAAAGA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGAAAAGA LB:LN_AGAAAAGA PL:illumina PU:HiMom.1.AGAAAAGA CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/AGCATGGA.sam b/testdata/picard/illumina/25T8B25T/sams/AGCATGGA.sam
new file mode 100644
index 0000000..2d65d5a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AGCATGGA.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGCATGGA LB:LN_AGCATGGA PL:illumina PU:HiMom.1.AGCATGGA CN:BI
+HiMom:1:1101:1406:2222 77 * 0 0 * * 0 0 CTCCCCCCGGGCTGAACCAGGGTAC CCCFFDDDDHDFHIIIIIIIII9DG RG:Z:HiMom.1
+HiMom:1:1101:1406:2222 141 * 0 0 * * 0 0 GGCTGGACTCCCCTGGTTCTGGGCA ;?@DDDBD?FHDFGIIIGIGHHIII RG:Z:HiMom.1
+HiMom:1:1201:1291:2158 77 * 0 0 * * 0 0 AGAAGGGGAAAGCCTTCATCTTGGC BCBFFFFFHHHHHJJJJJIIFIJIJ RG:Z:HiMom.1
+HiMom:1:1201:1291:2158 141 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGATGGGC @CCFFFDD?FHHFGEHHIIDHIIII RG:Z:HiMom.1
+HiMom:1:2101:1370:2116 77 * 0 0 * * 0 0 .TGGTGGTCCATAGAGATTTGAAAC #1:4BD7DACF?FCA:4+<ACHIIH RG:Z:HiMom.1
+HiMom:1:2101:1370:2116 141 * 0 0 * * 0 0 CACCATCTGACATCATGTTTGAAAG @@@DFFFDFFHDHIGBHHII<HEDB RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/AGGTAAGG.sam b/testdata/picard/illumina/25T8B25T/sams/AGGTAAGG.sam
new file mode 100644
index 0000000..cb7e319
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AGGTAAGG.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGGTAAGG LB:LN_AGGTAAGG PL:illumina PU:HiMom.1.AGGTAAGG CN:BI
+HiMom:1:1101:1263:2236 589 * 0 0 * * 0 0 CTTTGAAGACATTGTGAGATCTGTA <==A<42 at C+A4A?,2A@=4 at 7A?? RG:Z:HiMom.1
+HiMom:1:1101:1263:2236 653 * 0 0 * * 0 0 AGTTCTTCAGTAATTTTAGTACTGC ######################### RG:Z:HiMom.1
+HiMom:1:2101:1054:2162 77 * 0 0 * * 0 0 .CCAGGTGTCTTCCCGGGCCCTGCC #1=DDFBDFHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1054:2162 141 * 0 0 * * 0 0 .GGACAGGGAAGGGAAGGAAGGGTG #4=DDFDFHHHHHJIJIIDHHGICG RG:Z:HiMom.1
+HiMom:1:2101:1163:2203 77 * 0 0 * * 0 0 TCTCCATGTGAAACAAGCAAAAAGA CCCFFFFFHHHHGJJJIJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1163:2203 141 * 0 0 * * 0 0 TTGGTTCACTTATGTATTTATGAAT @CCFDFFFHHHHHJHIIJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1249:2231 77 * 0 0 * * 0 0 GTTATTGATAGGATACTGTACAAAC @BCFFFFDHHHHFIJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1249:2231 141 * 0 0 * * 0 0 TCTCTCGGCCTTCCACTCTAGCATA @@@FFFFFFHHGHIJJJGJIIJHIJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/AGGTCGCA.sam b/testdata/picard/illumina/25T8B25T/sams/AGGTCGCA.sam
new file mode 100644
index 0000000..01519a0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/AGGTCGCA.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGGTCGCA LB:LN_AGGTCGCA PL:illumina PU:HiMom.1.AGGTCGCA CN:BI
+HiMom:1:1101:1150:2228 77 * 0 0 * * 0 0 GCTACTCAGTAGACAGTCCCACCCT @@CADDDDFCFHHIIIIGGIIGGGI RG:Z:HiMom.1
+HiMom:1:1101:1150:2228 141 * 0 0 * * 0 0 ATGGGAGGCGATTCCTAGGGGGTTG 8?=DD8;@BH6DHD<FGGGEIGHIG RG:Z:HiMom.1
+HiMom:1:1101:1491:2120 77 * 0 0 * * 0 0 .GGCAGGTGCCCCCACTTGACTCTC #1?DFFFFGHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1491:2120 141 * 0 0 * * 0 0 GGCCAGGCTGAACTTCTGAGCTGCT CCCFFFFFHHHGHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1190:2194 77 * 0 0 * * 0 0 AACCTGGCGCTAAACCATTCGTAGA CCCFFFFFHHHHHJJJJJJJJIJJJ RG:Z:HiMom.1
+HiMom:1:1201:1190:2194 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1188:2195 77 * 0 0 * * 0 0 TTAGACCGTCGTGAGACAGGTTAGT @CCFFFFFHHHHHJJJJJIIEHIJH RG:Z:HiMom.1
+HiMom:1:2101:1188:2195 141 * 0 0 * * 0 0 GCACATACACCAAATGTCTGAACCT CCCFFFFFHHHHHJJJHIJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/ATTATCAA.sam b/testdata/picard/illumina/25T8B25T/sams/ATTATCAA.sam
new file mode 100644
index 0000000..ddfe625
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ATTATCAA.sam
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ATTATCAA LB:LN_ATTATCAA PL:illumina PU:HiMom.1.ATTATCAA CN:BI
+HiMom:1:1101:1100:2207 77 * 0 0 * * 0 0 ACGACAGACGTTCTTTCTTTGCTGC CCCFFFFFHHFHHJIJJJJJHIJJH RG:Z:HiMom.1
+HiMom:1:1101:1100:2207 141 * 0 0 * * 0 0 AGGCT............G....... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1157:2135 77 * 0 0 * * 0 0 .GGACATTGTAATCATTTCTTACAA #1=DD?DDHHHHHGGHIIIIIIIII RG:Z:HiMom.1
+HiMom:1:1101:1157:2135 141 * 0 0 * * 0 0 TTTAAAGTCTTAATCAAAGATGATA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1269:2170 77 * 0 0 * * 0 0 ACAGTGTGGGAGGCAGACGAAGAGA @@@DDDDDFA:C at EGA?FD<FFHII RG:Z:HiMom.1
+HiMom:1:1101:1269:2170 141 * 0 0 * * 0 0 TTCCAAGCCTGTGCTTTAAGGAAAA @@<ADBDBDF8DDCFH at GIE@@GGH RG:Z:HiMom.1
+HiMom:1:1201:1018:2217 589 * 0 0 * * 0 0 .TTTCTCTGGGCGCAAAGATGTTCA #07;8=8<<99(:=@@/@7>>6=?> RG:Z:HiMom.1
+HiMom:1:1201:1018:2217 653 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
+HiMom:1:1201:1118:2198 77 * 0 0 * * 0 0 CAAGTGTACAGGATTAGACTGGGTT BCCFDEBDHHHHHIJJJGIIIJJGH RG:Z:HiMom.1
+HiMom:1:1201:1118:2198 141 * 0 0 * * 0 0 AATAAACTTTATTAAAGCAGTTAAA C at CFFFFFHDHHHGIIIJJJIJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/ATTCCTCT.sam b/testdata/picard/illumina/25T8B25T/sams/ATTCCTCT.sam
new file mode 100644
index 0000000..b9d4d47
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/ATTCCTCT.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ATTCCTCT LB:LN_ATTCCTCT PL:illumina PU:HiMom.1.ATTCCTCT CN:BI
+HiMom:1:1101:1309:2210 77 * 0 0 * * 0 0 ACACCAACCACCCAACTATCTATAA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1309:2210 141 * 0 0 * * 0 0 AGTGGGCTAGGGCATTTTTAATCTT @@?DFFDFHHHDFHJIJJIJGIIIJ RG:Z:HiMom.1
+HiMom:1:1201:1018:2133 77 * 0 0 * * 0 0 .AAAACTTGAGGATGCTATGCAAGC #1:B:ADDDDDDDEEAEBF9FFEBF RG:Z:HiMom.1
+HiMom:1:1201:1018:2133 141 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
+HiMom:1:1201:1073:2225 77 * 0 0 * * 0 0 GGGGCTGAGACCTTTGCTGATGGTG @@@FFFFFHHHGHJJJJJIIIGICH RG:Z:HiMom.1
+HiMom:1:1201:1073:2225 141 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGGAGGGT @BBDFFFFHHHHHJJJJJJJJJJJ: RG:Z:HiMom.1
+HiMom:1:1201:1242:2207 77 * 0 0 * * 0 0 ATGGCAAAGTGGTGTCTGAGACCAA BCCFFFFFGHHHHHIIIJFHIJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1242:2207 141 * 0 0 * * 0 0 ATCTTTTATTGGCCTCCTGCTCCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CAACTCTC.sam b/testdata/picard/illumina/25T8B25T/sams/CAACTCTC.sam
new file mode 100644
index 0000000..0e95ec4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CAACTCTC.sam
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAACTCTC LB:LN_CAACTCTC PL:illumina PU:HiMom.1.CAACTCTC CN:BI
+HiMom:1:1101:1140:2120 77 * 0 0 * * 0 0 .CCCCAACATTCTAATTATGCCTCA #1:BDFFDHFFDFIJJJIIJIIIII RG:Z:HiMom.1
+HiMom:1:1101:1140:2120 141 * 0 0 * * 0 0 TTTTTTTTTTTTTAACTTTGCAAAT @@@DDDDDHHHHFB at 9FHI@BFH@@ RG:Z:HiMom.1
+HiMom:1:1101:1328:2225 77 * 0 0 * * 0 0 GAAATGCATCTGTCTTAGAAACTGG ??@=BDDDFDD<<,<2:C<F:FFEA RG:Z:HiMom.1
+HiMom:1:1101:1328:2225 141 * 0 0 * * 0 0 AGGAAATTAGGACTTACCTGACATA ######################### RG:Z:HiMom.1
+HiMom:1:1201:1127:2112 589 * 0 0 * * 0 0 .GTCAAGGATGTTCGTCGTGGCAAC #1=BDDDDDDDDDID<AE?@<CEEE RG:Z:HiMom.1
+HiMom:1:1201:1127:2112 653 * 0 0 * * 0 0 TAATCACCTGAGCAGTGAAGCCAGC @<@?BDDDHD?FDBHI?AHGGGDFH RG:Z:HiMom.1
+HiMom:1:1201:1452:2143 77 * 0 0 * * 0 0 TATCCCCTCTAAGACGGACCTGGGT CCCFFFFFHHHHHJJIIIJJJJJJG RG:Z:HiMom.1
+HiMom:1:1201:1452:2143 141 * 0 0 * * 0 0 TTTTAGTCTTAGCATTTACTTTCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1486:2146 589 * 0 0 * * 0 0 GTTCTCTGTCCCCAGGTCCTGTCTC ===A7<7222<<=C=?+<7>@?ACB RG:Z:HiMom.1
+HiMom:1:1201:1486:2146 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTGGGC <<<@??@??@???????######## RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CAATAGAC.sam b/testdata/picard/illumina/25T8B25T/sams/CAATAGAC.sam
new file mode 100644
index 0000000..f800d53
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CAATAGAC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAATAGAC LB:LN_CAATAGAC PL:illumina PU:HiMom.1.CAATAGAC CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/CAATAGTC.sam b/testdata/picard/illumina/25T8B25T/sams/CAATAGTC.sam
new file mode 100644
index 0000000..4787a24
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CAATAGTC.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAATAGTC LB:LN_CAATAGTC PL:illumina PU:HiMom.1.CAATAGTC CN:BI
+HiMom:1:1101:1316:2126 77 * 0 0 * * 0 0 .AAAAAAAAAAAAAAAAAAAAAAAA #1BDFFFFHHHHHJJJJFDDDDDDD RG:Z:HiMom.1 XN:i:1
+HiMom:1:1101:1316:2126 141 * 0 0 * * 0 0 TCTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJJHFDDDDDD RG:Z:HiMom.1
+HiMom:1:1101:1399:2128 77 * 0 0 * * 0 0 .TGCCCTTCGTCCTGGGAAACGGGG #1BDFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1399:2128 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHIJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1054:2151 77 * 0 0 * * 0 0 .TAGTGCTGGGCACTAAGTAATACC #4=DDDFFHHHHHJJJJJHIJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1054:2151 141 * 0 0 * * 0 0 GTCAGGCACTGAGAATATATGGGTG CBCFFFFFHHHHHJJJJJJJJJJEG RG:Z:HiMom.1
+HiMom:1:1201:1345:2181 77 * 0 0 * * 0 0 GGATAATCCTATTTATTACCTCAGA BBBDDFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
+HiMom:1:1201:1345:2181 141 * 0 0 * * 0 0 ATACGGATGTGTTTAGGAGTGGGAC CCCFFFFFHHHHHIIJJHJFHIJIJ RG:Z:HiMom.1
+HiMom:1:1201:1392:2184 77 * 0 0 * * 0 0 TTTCAGATTGGTCATTGTTAGTGTA ??@BDDDEHBHADHHIIEHDHFHFF RG:Z:HiMom.1
+HiMom:1:1201:1392:2184 141 * 0 0 * * 0 0 ATCTTTATTCATTTGTATGATCTTA @@BFFFFFHFFHFHIHIIJIJJJJI RG:Z:HiMom.1
+HiMom:1:2101:1172:2152 589 * 0 0 * * 0 0 AACACGGACAAAGGAGTCTAACACG <<<??8@@################# RG:Z:HiMom.1
+HiMom:1:2101:1172:2152 653 * 0 0 * * 0 0 ATCGTTTCTGGGGACTAGTGAGGCG ######################### RG:Z:HiMom.1
+HiMom:1:2101:1491:2093 77 * 0 0 * * 0 0 .CTATGCCGATCGGGTGTCCGCACT #1=DDDDDHHFHHIIEHHHBGHGII RG:Z:HiMom.1
+HiMom:1:2101:1491:2093 141 * 0 0 * * 0 0 AGAGACGGGGTCTCGCTATGTTGCC BCCDFFFFHHHHHJIIJJJJIJIJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CAGCGGAT.sam b/testdata/picard/illumina/25T8B25T/sams/CAGCGGAT.sam
new file mode 100644
index 0000000..c9d3cfe
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CAGCGGAT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAGCGGAT LB:LN_CAGCGGAT PL:illumina PU:HiMom.1.CAGCGGAT CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/CAGCGGTA.sam b/testdata/picard/illumina/25T8B25T/sams/CAGCGGTA.sam
new file mode 100644
index 0000000..9b44bd1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CAGCGGTA.sam
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAGCGGTA LB:LN_CAGCGGTA PL:illumina PU:HiMom.1.CAGCGGTA CN:BI
+HiMom:1:1101:1420:2213 77 * 0 0 * * 0 0 TACCTGGTTGATCCTGCCAGTAGCA @@CFFFFDDHHGHJGGHIJJIHGBH RG:Z:HiMom.1
+HiMom:1:1101:1420:2213 141 * 0 0 * * 0 0 TTCACTGTACCGGCCGTGCGTACTT @CCFFFFDHHHFGIJJJJJJGHIGG RG:Z:HiMom.1
+HiMom:1:1201:1364:2113 77 * 0 0 * * 0 0 .CACTCATTTTCTTATGTGGGATAT #1=DDFDFHHHHHIJJIFHIIHHHI RG:Z:HiMom.1
+HiMom:1:1201:1364:2113 141 * 0 0 * * 0 0 TAAAGAGAGCCAGTGGAGTTACGAC ######################### RG:Z:HiMom.1
+HiMom:1:2101:1072:2170 77 * 0 0 * * 0 0 ATCACCGCACTCATTTCCCGCTTCC CCCFFFFFHHHACEEGHIIBHIIII RG:Z:HiMom.1
+HiMom:1:2101:1072:2170 141 * 0 0 * * 0 0 .GGGGAGACAGAGAGGATCAGAAGT #4=BDDFDHHDFHEGFEGGIJIIIG RG:Z:HiMom.1
+HiMom:1:2101:1123:2095 77 * 0 0 * * 0 0 .TGGACAACATGTTCGAGAGCTACA #1=BBDDDFFFFDGFGIG?F;HHFI RG:Z:HiMom.1
+HiMom:1:2101:1123:2095 141 * 0 0 * * 0 0 TCCGCCTCCAGCTTCAGCTTCTCCT @@@FDDFFHHHHHJHGGJIJJJEHH RG:Z:HiMom.1
+HiMom:1:2101:1151:2236 589 * 0 0 * * 0 0 TTAAAGAGGTTCAGGGATGCAGAGT ######################### RG:Z:HiMom.1
+HiMom:1:2101:1151:2236 653 * 0 0 * * 0 0 TTTGAAGCCTCTTTATCCTTGGCAT ######################### RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CCAACATT.sam b/testdata/picard/illumina/25T8B25T/sams/CCAACATT.sam
new file mode 100644
index 0000000..cb583c2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CCAACATT.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCAACATT LB:LN_CCAACATT PL:illumina PU:HiMom.1.CCAACATT CN:BI
+HiMom:1:1101:1083:2193 77 * 0 0 * * 0 0 TTCTACCTCACCTTAGGGAGAAGAC @@@DDBDDD>F><C<4CG?EHGHIG RG:Z:HiMom.1
+HiMom:1:1101:1083:2193 141 * 0 0 * * 0 0 AGGCT.................... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1175:2197 77 * 0 0 * * 0 0 CCCCTGAGGACACCATCCCACTCCA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1175:2197 141 * 0 0 * * 0 0 AAGAGCTGGGGAACATCCAGAAAGG BC at FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1138:2227 589 * 0 0 * * 0 0 GCTGACACAATCTCTTCCGCCTGGT ######################### RG:Z:HiMom.1
+HiMom:1:1201:1138:2227 653 * 0 0 * * 0 0 GACAAATATAGGAAATAGAAGCTAT =1=A=AAA,2?4>7C<<4<A+3<AB RG:Z:HiMom.1
+HiMom:1:1201:1260:2165 77 * 0 0 * * 0 0 GGACACGGACAGGATTGACAGATTG BCBFFFFFHHHHHHIIJHIIIFHIJ RG:Z:HiMom.1
+HiMom:1:1201:1260:2165 141 * 0 0 * * 0 0 ATCTGATCTAAGTTGGGGGACGCCG @@@FFDFFHHHHHJJJIJIIIGIJJ RG:Z:HiMom.1
+HiMom:1:1201:1281:2133 77 * 0 0 * * 0 0 .GGAAATCCAGAAAACATAGAAGAT #1=DDFFFHHHHHIJJJJJJJJIJJ RG:Z:HiMom.1
+HiMom:1:1201:1281:2133 141 * 0 0 * * 0 0 GCAACAAAATTTCATATGACTTAGC CCCFFFFFHHHHHJJIIIHICHIIJ RG:Z:HiMom.1
+HiMom:1:1201:1331:2162 77 * 0 0 * * 0 0 ACGCTCGGCTAATTTTTGTATTTTT @CCFFFDFHHHHHIJJJJHIJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1331:2162 141 * 0 0 * * 0 0 TAATCCCAGTACTTTGGGAGGCCAA CCCFFFFFHHHHHJJJJIJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1186:2093 77 * 0 0 * * 0 0 .CGACCATAAACGATGCCGACCGGC #4=DFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1186:2093 141 * 0 0 * * 0 0 AATGTTGGGAGGACAATGATGGAAA ######################### RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CCAGCACC.sam b/testdata/picard/illumina/25T8B25T/sams/CCAGCACC.sam
new file mode 100644
index 0000000..11c6a98
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CCAGCACC.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCAGCACC LB:LN_CCAGCACC PL:illumina PU:HiMom.1.CCAGCACC CN:BI
+HiMom:1:1101:1212:2230 77 * 0 0 * * 0 0 TTTCTATTAGCTCTTAGTAAGATTA CCCFFFFFHHHHHJJJIJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1212:2230 141 * 0 0 * * 0 0 TTTTAGCTTTATTGGGGAGGGGGTG CCCFFFFFHHGHHJJJJGJJJJJDF RG:Z:HiMom.1
+HiMom:1:1201:1204:2228 77 * 0 0 * * 0 0 CCGATACGCTGAGTGTGGTTTGCGG CCCFFFFFHHHFHEGGHIHIJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1204:2228 141 * 0 0 * * 0 0 TCTTCTTGTCGATGAGGAACTTGGT @?@FFFFFDHHGHJIJJGHIIJJJH RG:Z:HiMom.1
+HiMom:1:2101:1100:2085 77 * 0 0 * * 0 0 .CACATGGATGAGGAGAATGAGGAT #1=DDFFFFHHHHJHIGIHHHIJEH RG:Z:HiMom.1
+HiMom:1:2101:1100:2085 141 * 0 0 * * 0 0 ATCTTGATCTCCTCCTTCTTGGCCT @@@DDDDDHHFHFEIIIIHHBAHBG RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CCATGCGT.sam b/testdata/picard/illumina/25T8B25T/sams/CCATGCGT.sam
new file mode 100644
index 0000000..29ae6d9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CCATGCGT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCATGCGT LB:LN_CCATGCGT PL:illumina PU:HiMom.1.CCATGCGT CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/CGCCTTCC.sam b/testdata/picard/illumina/25T8B25T/sams/CGCCTTCC.sam
new file mode 100644
index 0000000..2b93902
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CGCCTTCC.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CGCCTTCC LB:LN_CGCCTTCC PL:illumina PU:HiMom.1.CGCCTTCC CN:BI
+HiMom:1:1201:1122:2227 77 * 0 0 * * 0 0 AGAAGACGAGGCTGAGAGTGACATC @@@FFFFFHHHDHJGHGHCHHJJIJ RG:Z:HiMom.1
+HiMom:1:1201:1122:2227 141 * 0 0 * * 0 0 GTCATATAAGGCCCAGTCCAAGGAA @@@FFFFFHHHGGIJIGGIJFIJII RG:Z:HiMom.1
+HiMom:1:1201:1160:2109 77 * 0 0 * * 0 0 .AGAAGCCTTTGCACCCTGGGAGGA #1=DDDFFHHHHHJJJJJJJJIIJJ RG:Z:HiMom.1
+HiMom:1:1201:1160:2109 141 * 0 0 * * 0 0 ACATCCTTCCCATGCCACCAACTCG CCCFFFFFGHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CGCTATGT.sam b/testdata/picard/illumina/25T8B25T/sams/CGCTATGT.sam
new file mode 100644
index 0000000..b61429c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CGCTATGT.sam
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CGCTATGT LB:LN_CGCTATGT PL:illumina PU:HiMom.1.CGCTATGT CN:BI
+HiMom:1:1101:1291:2150 77 * 0 0 * * 0 0 CGTGGGGAACCTGGCGCTAAACCAT @BBFFFFFHHHHHJJJJIJJJJJIJ RG:Z:HiMom.1
+HiMom:1:1101:1291:2150 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHFHHIJJJIIIGIJIJ RG:Z:HiMom.1
+HiMom:1:1101:1314:2233 77 * 0 0 * * 0 0 GTTTATTGGGGCATTCCTTATCCCA @??DDDDBDHF>FCHGGGBFAAED9 RG:Z:HiMom.1
+HiMom:1:1101:1314:2233 141 * 0 0 * * 0 0 AGGAAAGTTGGGCTGACCTGACAGA @@<DDD;=FBFADBCGDEH?F;FCG RG:Z:HiMom.1
+HiMom:1:1101:1441:2148 77 * 0 0 * * 0 0 ACTTTCACCGCTACACGACCGGGGG CCCFFFFFHGFFHIIFIHJIGGII> RG:Z:HiMom.1
+HiMom:1:1101:1441:2148 141 * 0 0 * * 0 0 TTTTGGCTCTAGAGGGGGTAGAGGG CCCFFFFFHHDFBHIIJJ1?FGHIJ RG:Z:HiMom.1
+HiMom:1:1201:1043:2246 77 * 0 0 * * 0 0 .TTCTCGGCTGTCATGTGCAACATT #1=DDBDFHHHDFFBHGHGHIIJEH RG:Z:HiMom.1
+HiMom:1:1201:1043:2246 141 * 0 0 * * 0 0 .GCATCATTTC..GCTTCTCTCTGT #0;@@??@=@>##22=;@??><@?? RG:Z:HiMom.1
+HiMom:1:1201:1134:2144 77 * 0 0 * * 0 0 TGCCAGGAAGTGTTTTTTCTGGGTC @CCFFEFFHHFFFGIJJJJJJJJGH RG:Z:HiMom.1
+HiMom:1:1201:1134:2144 141 * 0 0 * * 0 0 AGTGTGAGTAATGGTTGAGAGGTGG B@?DDDFFFHHGHJHHGFIHHIFGI RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CTAACTCG.sam b/testdata/picard/illumina/25T8B25T/sams/CTAACTCG.sam
new file mode 100644
index 0000000..9a4405b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CTAACTCG.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTAACTCG LB:LN_CTAACTCG PL:illumina PU:HiMom.1.CTAACTCG CN:BI
+HiMom:1:1101:1363:2138 77 * 0 0 * * 0 0 .GTCTGGCCTGCACAGACATCCTAC #1=DDFFFHHHHHJJJIJJIJJJIJ RG:Z:HiMom.1
+HiMom:1:1101:1363:2138 141 * 0 0 * * 0 0 GTTCTTAAACCTGTTAGAACTTCTG C@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1393:2143 77 * 0 0 * * 0 0 TGGTTGATCCTGCCAGTAGCATATG @@@ADADDFHFFDBHE?G at HIIIEE RG:Z:HiMom.1
+HiMom:1:1201:1393:2143 141 * 0 0 * * 0 0 GATAAATGCACGCATCCCCCCCGCG C at CFFFFFGGHHHHJJJJJJJJJJI RG:Z:HiMom.1
+HiMom:1:2101:1273:2119 589 * 0 0 * * 0 0 .AGATAAGAGTCCACACAGTTGAGT #11AAAAA<A?4=C=7?733<ACA3 RG:Z:HiMom.1
+HiMom:1:2101:1273:2119 653 * 0 0 * * 0 0 ATGATGGATCTTCTCTAACTTGTCA >=><AAAAA+2AA?CB4@@ABB3?A RG:Z:HiMom.1
+HiMom:1:2101:1414:2098 77 * 0 0 * * 0 0 .AGGACATCGATAAAGGCGAGGTGT #1=DDFFFHHHHHJJJJJJJJJHHG RG:Z:HiMom.1
+HiMom:1:2101:1414:2098 141 * 0 0 * * 0 0 TTGGGGCCGGTGCCGTCGGGCCCAA CCCFFFFFHHHHGJJIJJJJJJJIJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CTATGCGC.sam b/testdata/picard/illumina/25T8B25T/sams/CTATGCGC.sam
new file mode 100644
index 0000000..2a5a21c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CTATGCGC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTATGCGC LB:LN_CTATGCGC PL:illumina PU:HiMom.1.CTATGCGC CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/CTATGCGT.sam b/testdata/picard/illumina/25T8B25T/sams/CTATGCGT.sam
new file mode 100644
index 0000000..673db9c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CTATGCGT.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTATGCGT LB:LN_CTATGCGT PL:illumina PU:HiMom.1.CTATGCGT CN:BI
+HiMom:1:1201:1083:2121 77 * 0 0 * * 0 0 .AGAACTGGCGCTGCGGGATGAACC #1=BDFFFHHHHHJJJJJHIJIJJJ RG:Z:HiMom.1
+HiMom:1:1201:1083:2121 141 * 0 0 * * 0 0 ACACACAACACCACCGCCCTCCCCC ######################### RG:Z:HiMom.1
+HiMom:1:1201:1185:2143 77 * 0 0 * * 0 0 ATCTGCCTGGTTCGGCCCGCCTGCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1185:2143 141 * 0 0 * * 0 0 GCTGAAGGCCCGTGGGCCAGAGGTG @CCFFFFFHHHHHJJJJJJJJJJHI RG:Z:HiMom.1
+HiMom:1:1201:1219:2115 77 * 0 0 * * 0 0 .TATAGTGGAGGCCGGAGCAGGAAC #1:DABADHHHFHIIIGGHGIIIII RG:Z:HiMom.1
+HiMom:1:1201:1219:2115 141 * 0 0 * * 0 0 TGGGAGTAGTTCCCTGCTAAGGGAG ???DBDBDADDDDIEID:AFFD:?8 RG:Z:HiMom.1
+HiMom:1:1201:1472:2121 589 * 0 0 * * 0 0 .TAAAGTGTGAACAAGGAAGGTCAT #07>@<9=@################ RG:Z:HiMom.1
+HiMom:1:1201:1472:2121 653 * 0 0 * * 0 0 GTGTGCTCTTCCGATCTGGAGGATG =+=??A4A==A at 7A<?######### RG:Z:HiMom.1
+HiMom:1:2101:1013:2146 77 * 0 0 * * 0 0 .ACACTGCTGCAGATGACAAGCAGC #4BDFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1013:2146 141 * 0 0 * * 0 0 ....CGCTAGAACCAACTTATTCAT ####24=?@@?@?@@?@@@@@@?@@ RG:Z:HiMom.1
+HiMom:1:2101:1231:2208 77 * 0 0 * * 0 0 ACGCCGCAAGTCAGAGCCCCCCAGA @@@DDDFFFFB:DBBEBEFDHBDDB RG:Z:HiMom.1
+HiMom:1:2101:1231:2208 141 * 0 0 * * 0 0 AGCCAGTGTTGGTGTGTTGACTGTT @@;1ADABCF;BF<AACGCHEBHC< RG:Z:HiMom.1
+HiMom:1:2101:1233:2133 589 * 0 0 * * 0 0 GAGAGAAGCACTCTTGAGCGGGATA 0;(@((@)2@############### RG:Z:HiMom.1
+HiMom:1:2101:1233:2133 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFGHHHHJJJFDDDDDDDD RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CTGCGGAT.sam b/testdata/picard/illumina/25T8B25T/sams/CTGCGGAT.sam
new file mode 100644
index 0000000..5356d30
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CTGCGGAT.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTGCGGAT LB:LN_CTGCGGAT PL:illumina PU:HiMom.1.CTGCGGAT CN:BI
+HiMom:1:2101:1102:2221 77 * 0 0 * * 0 0 TTTCATCTTATTTCATTGGTTTATA CCCFFFFFHHHHHJIJJJJIJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1102:2221 141 * 0 0 * * 0 0 ATAACTGACTCTACTCAGTAGATTA CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1126:2082 77 * 0 0 * * 0 0 .GTTTTAGGGGTGCGCAGGAGTCAA #11=A=DD?DF at D@CCGHIEFH at BG RG:Z:HiMom.1
+HiMom:1:2101:1126:2082 141 * 0 0 * * 0 0 TCTCTTTCCACCTTGGTCACCTTCC @C at DDDFFHHHHHJEGGIHHIJGIH RG:Z:HiMom.1
+HiMom:1:2101:1216:2172 77 * 0 0 * * 0 0 TTTCTTCGCAGGATTTTTCTGAGCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1216:2172 141 * 0 0 * * 0 0 GGACTTCTAGGGGATTTAGCGGGGT CCCFFFFFHHHHHJJJJJJJJJJJD RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/CTGTAATC.sam b/testdata/picard/illumina/25T8B25T/sams/CTGTAATC.sam
new file mode 100644
index 0000000..3cb932b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/CTGTAATC.sam
@@ -0,0 +1,14 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTGTAATC LB:LN_CTGTAATC PL:illumina PU:HiMom.1.CTGTAATC CN:BI
+HiMom:1:1101:1403:2194 77 * 0 0 * * 0 0 CTAAACAGAGAGAAGGTTTCTCTTT CCCFFFFFHHHHHJJJFHIJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1403:2194 141 * 0 0 * * 0 0 ACATGGTGAAACCCTGTCTCTACTA CCCFFFDDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1045:2105 589 * 0 0 * * 0 0 .TAAAGAGAAATCAAGAATACTATT #-4@?(@)@@############### RG:Z:HiMom.1
+HiMom:1:1201:1045:2105 653 * 0 0 * * 0 0 .TTTTTTTTTT..TTTTTTTTTTTT #0;@@@@@@@?##0:????????=< RG:Z:HiMom.1
+HiMom:1:1201:1483:2126 589 * 0 0 * * 0 0 .TGATAAGGTGTTGCTATGTTACCC #1:D?DDDDA??2:<CC4:AEDF>? RG:Z:HiMom.1
+HiMom:1:1201:1483:2126 653 * 0 0 * * 0 0 GCATGCAGCTGGGTGCTGTGATGCA @@@DDDBB<DD8F<<CGG?AA?A<F RG:Z:HiMom.1
+HiMom:1:2101:1011:2102 77 * 0 0 * * 0 0 .AAACAAAACTGTAGAACTGTGTAT #1=DDFFFHHHHHJJIJJJIHHHJJ RG:Z:HiMom.1
+HiMom:1:2101:1011:2102 141 * 0 0 * * 0 0 .....TCACACATAATTTTAAAATT #####22@?@@??@@@@@??@@@@@ RG:Z:HiMom.1
+HiMom:1:2101:1245:2154 77 * 0 0 * * 0 0 TCGTTAAGTATATTCTTAGGTATTT CCCFFDFFFHFHHIIJJJJJFJJJI RG:Z:HiMom.1
+HiMom:1:2101:1245:2154 141 * 0 0 * * 0 0 ACCAATCAGTAGCACCACTATACAC CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1386:2105 77 * 0 0 * * 0 0 .TACTAAAGAAAAAGTTGAAGAACT #1=DDDFFHHHHHJJGHIJJJJIJJ RG:Z:HiMom.1
+HiMom:1:2101:1386:2105 141 * 0 0 * * 0 0 AGGAATTATTCTTCTGCCATAAGGT B@@DDFFFHGFHHIJJJJJGIGIJH RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GAAAAAAA.sam b/testdata/picard/illumina/25T8B25T/sams/GAAAAAAA.sam
new file mode 100644
index 0000000..0bfb1f9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GAAAAAAA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GAAAAAAA LB:LN_GAAAAAAA PL:illumina PU:HiMom.1.GAAAAAAA CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/GAACGAT..sam b/testdata/picard/illumina/25T8B25T/sams/GAACGAT..sam
new file mode 100644
index 0000000..1636a99
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GAACGAT..sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GAACGAT. LB:LN_GAACGAT. PL:illumina PU:HiMom.1.GAACGAT. CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/GAAGGAAG.sam b/testdata/picard/illumina/25T8B25T/sams/GAAGGAAG.sam
new file mode 100644
index 0000000..8168f2c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GAAGGAAG.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GAAGGAAG LB:LN_GAAGGAAG PL:illumina PU:HiMom.1.GAAGGAAG CN:BI
+HiMom:1:1101:1338:2175 77 * 0 0 * * 0 0 CCCACCTTCCGGCGGCCGAAGACAC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1338:2175 141 * 0 0 * * 0 0 GCTTGTTGGCTTTAACATCCACAAT CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1028:2202 77 * 0 0 * * 0 0 .TCCTGGGAAACGGGGCGCGGCTGG #4BDDDFFHHHHHIJIIJJJJJJIJ RG:Z:HiMom.1
+HiMom:1:1201:1028:2202 141 * 0 0 * * 0 0 ..AAAC.C.T.......GG..TG.. ##42@?################### RG:Z:HiMom.1
+HiMom:1:2101:1084:2188 77 * 0 0 * * 0 0 TTGCTGCATGGGTTAATTGAGAATA CCCFFFFFHHHHFHHIIJJIJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1084:2188 141 * 0 0 * * 0 0 TACAAGGTCAAAATCAGCAACAAGT CCCFFFFDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GACCAGGA.sam b/testdata/picard/illumina/25T8B25T/sams/GACCAGGA.sam
new file mode 100644
index 0000000..43bfc6e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GACCAGGA.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GACCAGGA LB:LN_GACCAGGA PL:illumina PU:HiMom.1.GACCAGGA CN:BI
+HiMom:1:1101:1089:2172 77 * 0 0 * * 0 0 TTCCAGCATGCGGTTTAAGTAGGAT @CCFDFDBDFBF:<CEBHAFHHICH RG:Z:HiMom.1
+HiMom:1:1101:1089:2172 141 * 0 0 * * 0 0 TCCGG.................... :<<??#################### RG:Z:HiMom.1
+HiMom:1:1101:1347:2149 77 * 0 0 * * 0 0 GAGCAGATCGGAAGAGCACAGATCG @@@FFDDDHHHHHIJJBGGHJIHEG RG:Z:HiMom.1
+HiMom:1:1101:1347:2149 141 * 0 0 * * 0 0 GCTCTTCCGATCTGTGCTCTTCCGA CCCFFFFFDFHHFIJDGIGGHGIGH RG:Z:HiMom.1
+HiMom:1:1201:1095:2146 77 * 0 0 * * 0 0 GCTGAGTCATGTAGTAAGCCTGTGC BB at FDDDFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1095:2146 141 * 0 0 * * 0 0 ACTGACAACACCAAATGCTGCTAAG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1123:2161 589 * 0 0 * * 0 0 CACTAACTCCTGACCTCAAATAATC ?7?=DD?DD+CDBE>E at EEF@+<CF RG:Z:HiMom.1
+HiMom:1:1201:1123:2161 653 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGCATACA ===AAAA8AAAA<AAA)@CBA9>A# RG:Z:HiMom.1
+HiMom:1:1201:1439:2156 77 * 0 0 * * 0 0 AGCCGCGAGGTGCTGGCGGACTTCC :;1BDDDAA88A<?<E1C:D##### RG:Z:HiMom.1
+HiMom:1:1201:1439:2156 141 * 0 0 * * 0 0 GGAGATTATTTGCCTTGAAGTAAGC -;(22<>>@>8@>8;@######### RG:Z:HiMom.1
+HiMom:1:2101:1207:2084 589 * 0 0 * * 0 0 .TAGATGACCAAAACTTGCAGGGCA #1:A<?@A+7A=?CBCCBCCBAAAA RG:Z:HiMom.1
+HiMom:1:2101:1207:2084 653 * 0 0 * * 0 0 TCACCACTCTTCTGGGCATCCCCTG @@@DDEDFHHHHHIJIHHGHGGJJJ RG:Z:HiMom.1
+HiMom:1:2101:1312:2105 77 * 0 0 * * 0 0 .TTCCCTCAGGATAGCTGGCGCTCT #1=DDFFFGHGHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1312:2105 141 * 0 0 * * 0 0 GTTGAGAATAGGTTGAGATCGTTTC @CCFFFDFHHFHDHIJJJJJJJIJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GACCAGGC.sam b/testdata/picard/illumina/25T8B25T/sams/GACCAGGC.sam
new file mode 100644
index 0000000..71b9f20
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GACCAGGC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GACCAGGC LB:LN_GACCAGGC PL:illumina PU:HiMom.1.GACCAGGC CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/GACCGTTG.sam b/testdata/picard/illumina/25T8B25T/sams/GACCGTTG.sam
new file mode 100644
index 0000000..7cda666
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GACCGTTG.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GACCGTTG LB:LN_GACCGTTG PL:illumina PU:HiMom.1.GACCGTTG CN:BI
+HiMom:1:1101:1218:2200 77 * 0 0 * * 0 0 GCACCGGAAGAGCACACAGATCGGA CCCFFFFDFHGHHJJIJIJJJJJJI RG:Z:HiMom.1
+HiMom:1:1101:1218:2200 141 * 0 0 * * 0 0 GCTCTTCCGATCTATCTGCTCGTCC (-(=34???3;@############# RG:Z:HiMom.1
+HiMom:1:1101:1257:2223 77 * 0 0 * * 0 0 TGTATTCGAGAGATCAAAGAGAGAG @@=DDBDD?FFHHEIDBDFCEDBAF RG:Z:HiMom.1
+HiMom:1:1101:1257:2223 141 * 0 0 * * 0 0 TGCTCTTCCGATCTTTTAGCAAAGC :?@DDBDDHFFHDGIGIIJJJGGGI RG:Z:HiMom.1
+HiMom:1:1201:1180:2119 77 * 0 0 * * 0 0 .TGAAAGATTTAGAGAGCTTACAAA #1=DDDDDHHHGHJJIIJJJJIJJI RG:Z:HiMom.1
+HiMom:1:1201:1180:2119 141 * 0 0 * * 0 0 GCTCTAAATTTTGCTTTTCTACAGC CCCFFFFFHHHHHJJJJIJIJJIJJ RG:Z:HiMom.1
+HiMom:1:2101:1036:2087 77 * 0 0 * * 0 0 .TGTAGTTTCTTTAGGCAAATTTGT #4=BDDDFHHHHHJJJJJJIIJJJI RG:Z:HiMom.1
+HiMom:1:2101:1036:2087 141 * 0 0 * * 0 0 .GTCCACTTACGAAGCAAATACTTT #4=DDFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GACCTAAC.sam b/testdata/picard/illumina/25T8B25T/sams/GACCTAAC.sam
new file mode 100644
index 0000000..a6f236b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GACCTAAC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GACCTAAC LB:LN_GACCTAAC PL:illumina PU:HiMom.1.GACCTAAC CN:BI
+HiMom:1:1101:1302:2244 77 * 0 0 * * 0 0 GGAAAAGACGGAAAGGTTCTATCTC @C at DFFFDFHHHHJIJHHIJJJJJI RG:Z:HiMom.1
+HiMom:1:1101:1302:2244 141 * 0 0 * * 0 0 TGAATACATATAACAAATGCAAAAA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GATATCCA.sam b/testdata/picard/illumina/25T8B25T/sams/GATATCCA.sam
new file mode 100644
index 0000000..e38de8e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GATATCCA.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GATATCCA LB:LN_GATATCCA PL:illumina PU:HiMom.1.GATATCCA CN:BI
+HiMom:1:1101:1460:2176 77 * 0 0 * * 0 0 AGTCCAGGCTGAGCCCAGGGAAGAA CCCFFFFFHHHHGJIJJIJJHIJJI RG:Z:HiMom.1
+HiMom:1:1101:1460:2176 141 * 0 0 * * 0 0 AGGAAAAAGACACAACAAGTCCAAC ######################### RG:Z:HiMom.1
+HiMom:1:2101:1031:2163 77 * 0 0 * * 0 0 .TTTCCATGGCCGTCACCTTTGGGT #4=DDFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
+HiMom:1:2101:1031:2163 141 * 0 0 * * 0 0 ..ACATTTGTCACCACTAGCCACCA ##0<@?@@@@@@@@@@?@@@@@@@? RG:Z:HiMom.1
+HiMom:1:2101:1226:2088 77 * 0 0 * * 0 0 .GATCGGAAGAGCACACGTTTGACT #4=DAA=DDFHFHIIBFGHHIG>EG RG:Z:HiMom.1
+HiMom:1:2101:1226:2088 141 * 0 0 * * 0 0 GCTCTTCCGATCTAGGTAATAGCTA ==?BDFFFDCDDHFFFAFHDHIJGJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GCCGTCGA.sam b/testdata/picard/illumina/25T8B25T/sams/GCCGTCGA.sam
new file mode 100644
index 0000000..3a6a37e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GCCGTCGA.sam
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GCCGTCGA LB:LN_GCCGTCGA PL:illumina PU:HiMom.1.GCCGTCGA CN:BI
+HiMom:1:1101:1111:2148 77 * 0 0 * * 0 0 GTGGAGACCACCTCCGAGGCCTTGT BBCFFFFFHHHHHJJJIJJJJJJJI RG:Z:HiMom.1
+HiMom:1:1101:1111:2148 141 * 0 0 * * 0 0 GCGAA.A..........GGACGAC. ######################### RG:Z:HiMom.1
+HiMom:1:1101:1221:2143 77 * 0 0 * * 0 0 TTTGGTGGAAATTTTTTGTTATGAT CCCFFBDBHFD?FBFHIIGGIC at EF RG:Z:HiMom.1
+HiMom:1:1101:1221:2143 141 * 0 0 * * 0 0 CAATTGAATGTCTGCACAGCCGCTT @@@FFFFDHHHHHJJJIIIJGHIJJ RG:Z:HiMom.1
+HiMom:1:1101:1327:2200 589 * 0 0 * * 0 0 AGGGGGATCCGCCGGGGGACCACAA ######################### RG:Z:HiMom.1
+HiMom:1:1101:1327:2200 653 * 0 0 * * 0 0 GTCATCTGGGCTGTCGACAGGTGTC @B at FFFFFHHHHGIJJJJJJIFHHI RG:Z:HiMom.1
+HiMom:1:2101:1122:2136 77 * 0 0 * * 0 0 GTAGGCGCTCAGCAAATACTTGTCG @@@DDDD8?<CACEHHBBHDAAFH@ RG:Z:HiMom.1
+HiMom:1:2101:1122:2136 141 * 0 0 * * 0 0 CTTGCCAGCCTGCAGGCCCCGCGGC ???BBAABDD?DDIID)A:3<EADD RG:Z:HiMom.1
+HiMom:1:2101:1459:2083 77 * 0 0 * * 0 0 .CACACGCCACACGGAGCACACTTT #4=DDFFFHHHHHJJJJJJJJIIJJ RG:Z:HiMom.1
+HiMom:1:2101:1459:2083 141 * 0 0 * * 0 0 ATTTCACCAAAATAATCAGAAGGCC CCCFFFFDBHGHHIGGIJFJJGGFH RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GCCTAGCC.sam b/testdata/picard/illumina/25T8B25T/sams/GCCTAGCC.sam
new file mode 100644
index 0000000..4b6b8cd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GCCTAGCC.sam
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GCCTAGCC LB:LN_GCCTAGCC PL:illumina PU:HiMom.1.GCCTAGCC CN:BI
+HiMom:1:1101:1165:2239 77 * 0 0 * * 0 0 GGCGGAGGCAGCATTTCAGCTGTGA CCCFFDFFHHHHHIJJIGHHHJHHF RG:Z:HiMom.1
+HiMom:1:1101:1165:2239 141 * 0 0 * * 0 0 ATGGAAGTCGAGACAGAAGTGAGAA ######################### RG:Z:HiMom.1
+HiMom:1:1101:1290:2225 77 * 0 0 * * 0 0 CTTGGGCGCATGGTGAGGGAGGGAG @@@FFDDFHDFH??CBEBHHIGDCD RG:Z:HiMom.1
+HiMom:1:1101:1290:2225 141 * 0 0 * * 0 0 TCAGTTCACTGGCAAAGACAGTCAC C@@FBEDDFHFHGIIICEHGDHBHE RG:Z:HiMom.1
+HiMom:1:1201:1280:2179 77 * 0 0 * * 0 0 TTCAAGGAATCGTCCTGCCTCAGCC BCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1280:2179 141 * 0 0 * * 0 0 GAGGACTGCTTGAGTCCAGGAGTTC @@BFFDEFGHHHHIFGCHIJJJGGI RG:Z:HiMom.1
+HiMom:1:1201:1300:2137 77 * 0 0 * * 0 0 .TGTAATCCCAGCTCTCAGGGAGGC #1=ADDDDDDDBBA?@AE?E at FE8; RG:Z:HiMom.1
+HiMom:1:1201:1300:2137 141 * 0 0 * * 0 0 GCTCTTCCGATCTTTTTTTTAATTT @@?DDDDDFDHADEHGIGGED3?FD RG:Z:HiMom.1
+HiMom:1:2101:1023:2237 589 * 0 0 * * 0 0 .TAAACAGCTTCTGCACAGCCAAAG #00@@?>=39>9;<412@?###### RG:Z:HiMom.1
+HiMom:1:2101:1023:2237 653 * 0 0 * * 0 0 ..TTTGTTTGAGTTCCTTGTAGATT ##0:=@?>?@???@:>?@??>?;?< RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GTAACATC.sam b/testdata/picard/illumina/25T8B25T/sams/GTAACATC.sam
new file mode 100644
index 0000000..551ab21
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GTAACATC.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GTAACATC LB:LN_GTAACATC PL:illumina PU:HiMom.1.GTAACATC CN:BI
+HiMom:1:1101:1188:2237 77 * 0 0 * * 0 0 TCCCCCTCCCTTTTGCGCACACACC @?@DDADDHDHBDH<EFHIIHG?HF RG:Z:HiMom.1
+HiMom:1:1101:1188:2237 141 * 0 0 * * 0 0 GCTTCCTTCAAGACAGAAGTGAGAA CCCFFDDEFHHFFE at FDHHAIAFHG RG:Z:HiMom.1
+HiMom:1:2101:1208:2231 589 * 0 0 * * 0 0 TCACTAAACATCCAAACATCACTTT ######################### RG:Z:HiMom.1
+HiMom:1:2101:1208:2231 653 * 0 0 * * 0 0 CTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJHFDDDDDDD RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/GTCCACAG.sam b/testdata/picard/illumina/25T8B25T/sams/GTCCACAG.sam
new file mode 100644
index 0000000..bedd9a4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/GTCCACAG.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GTCCACAG LB:LN_GTCCACAG PL:illumina PU:HiMom.1.GTCCACAG CN:BI
+HiMom:1:1101:1069:2159 77 * 0 0 * * 0 0 TCCCTTACCATCAAATCAATTG.CC CCCFFFFFHHHHHJJJJJJJJJ#3A RG:Z:HiMom.1
+HiMom:1:1101:1069:2159 141 * 0 0 * * 0 0 GACGT.................... <<<@?#################### RG:Z:HiMom.1
+HiMom:1:1201:1486:2109 77 * 0 0 * * 0 0 .CACCTCCTAGCCCCTCACTTCTGT #1=B;BDDHHHGFIIIIIIIIIGGG RG:Z:HiMom.1
+HiMom:1:1201:1486:2109 141 * 0 0 * * 0 0 ACGTGTGCTCTTCCCGATCTGTATA CCCFF?DDFBHHHJJIIDHJIJJJH RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/N.sam b/testdata/picard/illumina/25T8B25T/sams/N.sam
new file mode 100644
index 0000000..05db02e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/N.sam
@@ -0,0 +1,34 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_N LB:LN_N PL:illumina PU:HiMom.1.N CN:BI
+HiMom:1:1101:1031:2224 589 * 0 0 * * 0 0 .AATA............T....... #0;@@#################### BC:Z:NNNNNNNN RG:Z:HiMom.1
+HiMom:1:1101:1031:2224 653 * 0 0 * * 0 0 ......................... ######################### BC:Z:NNNNNNNN RG:Z:HiMom.1 XN:i:1
+HiMom:1:1101:1039:2147 589 * 0 0 * * 0 0 .CCAA.G..GG....ATGTAA.... #4;@@#4##2<####43@@@@#### BC:Z:NNNNNNNN RG:Z:HiMom.1
+HiMom:1:1101:1039:2147 653 * 0 0 * * 0 0 ......................... ######################### BC:Z:NNNNNNNN RG:Z:HiMom.1 XN:i:1
+HiMom:1:1101:1046:2175 589 * 0 0 * * 0 0 .TGCC.G.GTT.CG.GGTCTT.... #4;@@#################### BC:Z:NNNNNNNN RG:Z:HiMom.1
+HiMom:1:1101:1046:2175 653 * 0 0 * * 0 0 ..GGA.................... ######################### BC:Z:NNNNNNNN RG:Z:HiMom.1
+HiMom:1:1101:1047:2122 589 * 0 0 * * 0 0 .CTAA.G.ACT.TG.GTGTGC.... #0;@@#4#3@@#3@#2<@@@@#### BC:Z:NNNANNNN RG:Z:HiMom.1
+HiMom:1:1101:1047:2122 653 * 0 0 * * 0 0 ..TCA.................... ######################### BC:Z:NNNANNNN RG:Z:HiMom.1
+HiMom:1:1101:1048:2197 589 * 0 0 * * 0 0 .CTCC.G.TCA.CA.GTGGAG.... #0;?@#################### BC:Z:NNNCNNNN RG:Z:HiMom.1
+HiMom:1:1101:1048:2197 653 * 0 0 * * 0 0 ..GTG.................... ######################### BC:Z:NNNCNNNN RG:Z:HiMom.1
+HiMom:1:1101:1065:2193 77 * 0 0 * * 0 0 GAAGTACGCCCTGCCCCTGGTT.GC ?@@DAADAHHFHBEBEGGHG?#### BC:Z:GAACGATN RG:Z:HiMom.1
+HiMom:1:1101:1065:2193 141 * 0 0 * * 0 0 .CTTG.................... ######################### BC:Z:GAACGATN RG:Z:HiMom.1
+HiMom:1:1101:1162:2207 589 * 0 0 * * 0 0 ACCTTGAGGAGAACATAAGAGCAAA ######################### BC:Z:ACAAAATT RG:Z:HiMom.1
+HiMom:1:1101:1162:2207 653 * 0 0 * * 0 0 TAAAACTGGGGAAGTTAGAGGAATG ######################### BC:Z:ACAAAATT RG:Z:HiMom.1
+HiMom:1:1201:1159:2179 589 * 0 0 * * 0 0 GTTAGCACAGATATTGGATGAGTGA ######################### BC:Z:AAAAAAAA RG:Z:HiMom.1
+HiMom:1:1201:1159:2179 653 * 0 0 * * 0 0 TTTTTTTTTATTTTTCTAAATACTT ===AA#################### BC:Z:AAAAAAAA RG:Z:HiMom.1
+HiMom:1:1201:1414:2174 589 * 0 0 * * 0 0 GCCAAAAAAAAGAACCAGCCCAAGG ######################### BC:Z:AGAAAAGA RG:Z:HiMom.1
+HiMom:1:1201:1414:2174 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT @;@1BDADF????FFEB>B6=BBBB BC:Z:AGAAAAGA RG:Z:HiMom.1
+HiMom:1:2101:1040:2208 589 * 0 0 * * 0 0 .ATGCCCACCTCCCTCCTACGCACC ######################### BC:Z:ACGAAATC RG:Z:HiMom.1
+HiMom:1:2101:1040:2208 653 * 0 0 * * 0 0 .CTGATAGTCACTGAAATGAATTCA #-0=>(2 at .22@@############ BC:Z:ACGAAATC RG:Z:HiMom.1
+HiMom:1:2101:1059:2083 77 * 0 0 * * 0 0 .AAGAGGGGTCAAGAGTTAAACTTA #1=DDFFFHFHHGIGHGHJJJJJJI BC:Z:TACCGTCT RG:Z:HiMom.1
+HiMom:1:2101:1059:2083 141 * 0 0 * * 0 0 .GAATGTCTTAGAAGGATGCTTCTC #1=BDDDEHHGHHJJJJJIJJIIJJ BC:Z:TACCGTCT RG:Z:HiMom.1
+HiMom:1:2101:1143:2137 77 * 0 0 * * 0 0 ATGCAGCAGCTGCCACGGAGCACCA CC at FFDFDFHFHHGIDHEHIGJJJJ BC:Z:TCCGTCTA RG:Z:HiMom.1
+HiMom:1:2101:1143:2137 141 * 0 0 * * 0 0 GCTCTTCAGATCTAGGGGGAACAGC @@@DD?=DCAFFFHIIDG:EFHIII BC:Z:TCCGTCTA RG:Z:HiMom.1
+HiMom:1:2101:1151:2182 589 * 0 0 * * 0 0 TTGTTTTGGCTTATAATGACAAGAA ;;8-2).2())(<6=@8;?4??>>? BC:Z:GAAAAAAA RG:Z:HiMom.1
+HiMom:1:2101:1151:2182 653 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTA 9<<?@?@;5=?############## BC:Z:GAAAAAAA RG:Z:HiMom.1
+HiMom:1:2101:1215:2110 77 * 0 0 * * 0 0 .AATATAATTTGGAGACCCTTTGTT #1=DDDDDEDDDDIDDBB3ABAB## BC:Z:AAAAGAAG RG:Z:HiMom.1
+HiMom:1:2101:1215:2110 141 * 0 0 * * 0 0 ATCTTTCCCCCATTAAGAACAGCAA ######################### BC:Z:AAAAGAAG RG:Z:HiMom.1
+HiMom:1:2101:1285:2105 589 * 0 0 * * 0 0 .GCGGGGAGCCGGGCGTGGAATGCG ######################### BC:Z:TATCTCGG RG:Z:HiMom.1
+HiMom:1:2101:1285:2105 653 * 0 0 * * 0 0 TGTCTATATCAACCAACACCTCTTC -(0(():94:9:???########## BC:Z:TATCTCGG RG:Z:HiMom.1
+HiMom:1:2101:1450:2134 77 * 0 0 * * 0 0 AGCACGCTGCCGCGGGACCTGCCCA ?@@AD at DDHFH?DGIIIIG at FGFBF BC:Z:ACCAGTTG RG:Z:HiMom.1
+HiMom:1:2101:1450:2134 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CC at FDFDFFDFHFGIIE1CGGHBGE BC:Z:ACCAGTTG RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TAAGCACA.sam b/testdata/picard/illumina/25T8B25T/sams/TAAGCACA.sam
new file mode 100644
index 0000000..ef939ee
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TAAGCACA.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TAAGCACA LB:LN_TAAGCACA PL:illumina PU:HiMom.1.TAAGCACA CN:BI
+HiMom:1:1201:1064:2239 77 * 0 0 * * 0 0 CATGCAGCGCAAGTAGGTCTACAAG @@;DFAFFHHHHAHEGHFDGGFABG RG:Z:HiMom.1
+HiMom:1:1201:1064:2239 141 * 0 0 * * 0 0 GGGATGGGAGGGCGATGAGGACTAG 8?@:DDDACC:FHHGIH<EGDDDFH RG:Z:HiMom.1
+HiMom:1:2101:1258:2092 77 * 0 0 * * 0 0 .CACACACACACTCATTCACAGCTT #1=DDDFFHHHFHJJIJGGGIIGIJ RG:Z:HiMom.1
+HiMom:1:2101:1258:2092 141 * 0 0 * * 0 0 TTAGACAAAACACCAAAATAAAATA ######################### RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TACCGTCT.sam b/testdata/picard/illumina/25T8B25T/sams/TACCGTCT.sam
new file mode 100644
index 0000000..04cf526
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TACCGTCT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TACCGTCT LB:LN_TACCGTCT PL:illumina PU:HiMom.1.TACCGTCT CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/TAGCGGTA.sam b/testdata/picard/illumina/25T8B25T/sams/TAGCGGTA.sam
new file mode 100644
index 0000000..3455237
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TAGCGGTA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TAGCGGTA LB:LN_TAGCGGTA PL:illumina PU:HiMom.1.TAGCGGTA CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/TATCAGCC.sam b/testdata/picard/illumina/25T8B25T/sams/TATCAGCC.sam
new file mode 100644
index 0000000..5f7c0e3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TATCAGCC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TATCAGCC LB:LN_TATCAGCC PL:illumina PU:HiMom.1.TATCAGCC CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/TATCCAGG.sam b/testdata/picard/illumina/25T8B25T/sams/TATCCAGG.sam
new file mode 100644
index 0000000..1e49919
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TATCCAGG.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TATCCAGG LB:LN_TATCCAGG PL:illumina PU:HiMom.1.TATCCAGG CN:BI
+HiMom:1:1101:1071:2233 77 * 0 0 * * 0 0 TTTGACAGTCTCTGAATGAGAA.GG CCCFFFFFHHHHHJIIIJJJIJ#4A RG:Z:HiMom.1
+HiMom:1:1101:1071:2233 141 * 0 0 * * 0 0 GTTTG.................... <<<@@#################### RG:Z:HiMom.1
+HiMom:1:1201:1140:2125 77 * 0 0 * * 0 0 .TTTCAGTTCAGAGAACTGCAGAAT #1=DBDFDHHHHGJIJJJJJIIIJI RG:Z:HiMom.1
+HiMom:1:1201:1140:2125 141 * 0 0 * * 0 0 TTCATAAATTGGTCTTAGATGTTGC CC at FFFFFHHHHFGIJIIIJIJIJJ RG:Z:HiMom.1
+HiMom:1:1201:1236:2187 77 * 0 0 * * 0 0 TTTAAATGGGTAAGAAGCCCGGCTC @BCDDFEFHHDHHJJJJJIJJIJJJ RG:Z:HiMom.1
+HiMom:1:1201:1236:2187 141 * 0 0 * * 0 0 CTCCTTAGCGGATTCCGACTTCCAT CCCFFFFDHHHHGIJJIGIGIJJGG RG:Z:HiMom.1
+HiMom:1:2101:1133:2239 77 * 0 0 * * 0 0 AGACAGAAGTACGGGAAGGCGAAGA @@@FFFFEHFHHHJJCGDHIIECD@ RG:Z:HiMom.1
+HiMom:1:2101:1133:2239 141 * 0 0 * * 0 0 AGCTTTTTGTTTCCTAGCTTGTCTT ?@?DDFFFHHHHF4ACFHIJHHHGH RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TATCCATG.sam b/testdata/picard/illumina/25T8B25T/sams/TATCCATG.sam
new file mode 100644
index 0000000..a5373e3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TATCCATG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TATCCATG LB:LN_TATCCATG PL:illumina PU:HiMom.1.TATCCATG CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/TATCTCGG.sam b/testdata/picard/illumina/25T8B25T/sams/TATCTCGG.sam
new file mode 100644
index 0000000..04096c5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TATCTCGG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TATCTCGG LB:LN_TATCTCGG PL:illumina PU:HiMom.1.TATCTCGG CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/TATCTGCC.sam b/testdata/picard/illumina/25T8B25T/sams/TATCTGCC.sam
new file mode 100644
index 0000000..4f8756c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TATCTGCC.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TATCTGCC LB:LN_TATCTGCC PL:illumina PU:HiMom.1.TATCTGCC CN:BI
+HiMom:1:1101:1267:2209 77 * 0 0 * * 0 0 GAGACGGAGGCCAACGGGGGCCTGG @@CFFFFD8FDHFHIGIBG?@BCDG RG:Z:HiMom.1
+HiMom:1:1101:1267:2209 141 * 0 0 * * 0 0 GGCAGAGTCTCCAACAGCCCCGTAC =;?DDDD?CCFHAIIIGGIIGE at EG RG:Z:HiMom.1
+HiMom:1:1101:1353:2226 77 * 0 0 * * 0 0 TTGCTTGTCTGTAAAGTATTTTATT @C at DDFFDHHFHFHHIBGG>IHHII RG:Z:HiMom.1
+HiMom:1:1101:1353:2226 141 * 0 0 * * 0 0 GTGCTCTTCCGATCTTCAGGTTACC BBBFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1435:2194 77 * 0 0 * * 0 0 GAGAAAGAACATGACTACAGAGATG CCCFFFFFHHHHHJJJJJJJJJHJJ RG:Z:HiMom.1
+HiMom:1:1101:1435:2194 141 * 0 0 * * 0 0 TTTTGTTTTCTTTTACTGAAGTGTA CCCFFDFFHHHHHJJJJIHIJHHHJ RG:Z:HiMom.1
+HiMom:1:1201:1084:2204 77 * 0 0 * * 0 0 GGCCCGTGGACGCCGCCGAAGAAGC CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1084:2204 141 * 0 0 * * 0 0 TGGCTCCTCAGGCTCTCATCAGTTG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1142:2242 77 * 0 0 * * 0 0 TGTTGATAGTCCTTCTTATCTTAGT ???DB?==CC2<AC:CC<CFEF<FF RG:Z:HiMom.1
+HiMom:1:1201:1142:2242 141 * 0 0 * * 0 0 GTAAAATGTAAAATAATAAAAAATG ?=?DDDD;AF<DF<FFFFIIIFF@< RG:Z:HiMom.1
+HiMom:1:1201:1187:2100 77 * 0 0 * * 0 0 .GCGGTAATTCCAGCTCCAATAGCG #1:BB2 at DHHFHHIIIIHHIIGHGG RG:Z:HiMom.1
+HiMom:1:1201:1187:2100 141 * 0 0 * * 0 0 AAAAAAGAGCCCGCATTGCCGAGAC =<=;AA################### RG:Z:HiMom.1
+HiMom:1:1201:1392:2109 77 * 0 0 * * 0 0 .CTGAAGAGGCCAAAGCGCCCTCCA #1=DDFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
+HiMom:1:1201:1392:2109 141 * 0 0 * * 0 0 GTCAGACAGGGGGATTTGGGCTGTG BBCFFFFFHHHHHHJJJHIJIJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TCCGTCTA.sam b/testdata/picard/illumina/25T8B25T/sams/TCCGTCTA.sam
new file mode 100644
index 0000000..8f5dbc6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TCCGTCTA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TCCGTCTA LB:LN_TCCGTCTA PL:illumina PU:HiMom.1.TCCGTCTA CN:BI
diff --git a/testdata/picard/illumina/25T8B25T/sams/TCGCTAGA.sam b/testdata/picard/illumina/25T8B25T/sams/TCGCTAGA.sam
new file mode 100644
index 0000000..ef93c7a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TCGCTAGA.sam
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TCGCTAGA LB:LN_TCGCTAGA PL:illumina PU:HiMom.1.TCGCTAGA CN:BI
+HiMom:1:1101:1143:2192 77 * 0 0 * * 0 0 GGAGCGAGTCTGGGTCTCAGCCCCG CCCFFFFFHHHHHJGHIIIHJJJJI RG:Z:HiMom.1
+HiMom:1:1101:1143:2192 141 * 0 0 * * 0 0 CGACAAGTCTGGCTTATCACTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1479:2221 77 * 0 0 * * 0 0 TGTAAAGTATGCTGGCTCAGTGTAT BBBFDFFEHHHHHJJJJJJJIJHJJ RG:Z:HiMom.1
+HiMom:1:1101:1479:2221 141 * 0 0 * * 0 0 GGGGAAATCTATTTTTATGTAAAAA @CCFFFFFHHHHHJIGIJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1312:2112 77 * 0 0 * * 0 0 .TCCCAGCGAACCCGCGTGCAACCT #1=DFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1312:2112 141 * 0 0 * * 0 0 ATTTGCAGGAGCCGGCGCAGGTGCA CCCFFFFFHHHHHJJJIJJJJGHIJ RG:Z:HiMom.1
+HiMom:1:1201:1416:2128 77 * 0 0 * * 0 0 .ACAGGCGTGGAGGAGGCGGCGGCC #4=DDDFFHHHHHJIGJHFHHFFED RG:Z:HiMom.1
+HiMom:1:1201:1416:2128 141 * 0 0 * * 0 0 TTGGTGTGGAGGCGGTGGCGGGATC @@@DDDDDHHFHHII:?GGHIIB6? RG:Z:HiMom.1
+HiMom:1:2101:1064:2242 77 * 0 0 * * 0 0 ATGAACAAAGGAAGAATTATGCACG ?;?D;DDDF?;:+<<CFFCHE433A RG:Z:HiMom.1
+HiMom:1:2101:1064:2242 141 * 0 0 * * 0 0 .GGAAAAAGGTTGTCAAGCGTTAAA ######################### RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TCTGCAAG.sam b/testdata/picard/illumina/25T8B25T/sams/TCTGCAAG.sam
new file mode 100644
index 0000000..aa99407
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TCTGCAAG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TCTGCAAG LB:LN_TCTGCAAG PL:illumina PU:HiMom.1.TCTGCAAG CN:BI
+HiMom:1:1201:1042:2174 77 * 0 0 * * 0 0 .GTTGGTGTCTTCATTTTATGTATA #1=DDFDFHHHHHJIJJJHIJHIJJ RG:Z:HiMom.1
+HiMom:1:1201:1042:2174 141 * 0 0 * * 0 0 .TCAGGAAGGC..CAAAAAAAGAAA #0;@@@?@?<@##3<@@?@@????? RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TGCAAGTA.sam b/testdata/picard/illumina/25T8B25T/sams/TGCAAGTA.sam
new file mode 100644
index 0000000..9e4d398
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TGCAAGTA.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGCAAGTA LB:LN_TGCAAGTA PL:illumina PU:HiMom.1.TGCAAGTA CN:BI
+HiMom:1:1101:1242:2170 77 * 0 0 * * 0 0 ATGGCAGGGCAGAGTTCTGATGAGT CCCFFFFFHHGGGIFHEIIGIIII? RG:Z:HiMom.1
+HiMom:1:1101:1242:2170 141 * 0 0 * * 0 0 GGAAGGAAAAGAAGCACAAGTACAT @@@DFDFFHHHGHHGIIGJJEHHIG RG:Z:HiMom.1
+HiMom:1:2101:1163:2222 77 * 0 0 * * 0 0 GAGCAGGCAAGGAGGACTTCTTGTT CCCFFFFFGHHHHJJHHIJJJJJIJ RG:Z:HiMom.1
+HiMom:1:2101:1163:2222 141 * 0 0 * * 0 0 GAGCGATAATGGTTCTTTTCCTCAC @@@DFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TGCTGCTG.sam b/testdata/picard/illumina/25T8B25T/sams/TGCTGCTG.sam
new file mode 100644
index 0000000..4713b3c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TGCTGCTG.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGCTGCTG LB:LN_TGCTGCTG PL:illumina PU:HiMom.1.TGCTGCTG CN:BI
+HiMom:1:1101:1084:2136 77 * 0 0 * * 0 0 .TCTCACTGTGAATTTGTGGTGGGC #1=DDFFFHHHHHJJJJGIJIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1084:2136 141 * 0 0 * * 0 0 TTTCT.................... <<<@@#################### RG:Z:HiMom.1
+HiMom:1:1201:1285:2100 77 * 0 0 * * 0 0 .AATGACATGTTTAAAGATGGACTC #1:BDDFFHHFHHGIJIJIIIIGII RG:Z:HiMom.1
+HiMom:1:1201:1285:2100 141 * 0 0 * * 0 0 GATCTTTTTTGCTTTGTAGTTATAG @@@DFFFFHHHHHIIGIABCFFHBF RG:Z:HiMom.1
+HiMom:1:2101:1162:2139 77 * 0 0 * * 0 0 AGAGGTGAAATTCTTGGACCGGCGC @@@DDDDDHFHHHDB:EFHHCAG?D RG:Z:HiMom.1
+HiMom:1:2101:1162:2139 141 * 0 0 * * 0 0 ATCGTTTATGGTCGGAACTACGACG BCCFFFFFHHHHHIJJJJJJJIJJI RG:Z:HiMom.1
+HiMom:1:2101:1195:2150 77 * 0 0 * * 0 0 CCGAGAGAGTGAGAGCGCTCCTGGG CCCFFFFFHFHHHJJJJIJJJJIJJ RG:Z:HiMom.1
+HiMom:1:2101:1195:2150 141 * 0 0 * * 0 0 AATTGAACTTCACCACCCAGAGGAA CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TGTAACTC.sam b/testdata/picard/illumina/25T8B25T/sams/TGTAACTC.sam
new file mode 100644
index 0000000..2571c37
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TGTAACTC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGTAACTC LB:LN_TGTAACTC PL:illumina PU:HiMom.1.TGTAACTC CN:BI
+HiMom:1:1201:1421:2154 77 * 0 0 * * 0 0 TGTGTGTGTGGGTGTGTGTATATAT ?@?DDFFFFFHH at GEFCCCHGIGJI RG:Z:HiMom.1
+HiMom:1:1201:1421:2154 141 * 0 0 * * 0 0 TGTGCTCTTCCGATCTTGTGCTCTT BC at DFFFFHHHHHJJJJFHIHHIJJ RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TGTAATCA.sam b/testdata/picard/illumina/25T8B25T/sams/TGTAATCA.sam
new file mode 100644
index 0000000..d44c1e0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TGTAATCA.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGTAATCA LB:LN_TGTAATCA PL:illumina PU:HiMom.1.TGTAATCA CN:BI
+HiMom:1:1101:1419:2119 77 * 0 0 * * 0 0 .ATGACTATGGTAACTGAAAGAAAA #1:A1BDADBFFDFIIIEEHECACF RG:Z:HiMom.1
+HiMom:1:1101:1419:2119 141 * 0 0 * * 0 0 ACTTTCCTTTTTTGTTTTACTTTAA ######################### RG:Z:HiMom.1
+HiMom:1:1201:1208:2132 77 * 0 0 * * 0 0 .CCTCAATGAGCGGCACTATGGGGG #1=DDFFFHHHHGJJIJJGHIJGIJ RG:Z:HiMom.1
+HiMom:1:1201:1208:2132 141 * 0 0 * * 0 0 CTGTAGAAAGGATGGTCGGGCTCCA @@CDFFFFGHFHHJIJJGJIBHJJG RG:Z:HiMom.1
+HiMom:1:1201:1344:2147 77 * 0 0 * * 0 0 TATCCTCCCTACTATGCCTAGAAGG =?@DADEFHBHDFG>EFGDHGFGHD RG:Z:HiMom.1
+HiMom:1:1201:1344:2147 141 * 0 0 * * 0 0 ACGATTAGTTTTAGCATTGGAGTAG @<??DDDDFHHHFGGHHIIIGGAGH RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B25T/sams/TTGTCTAT.sam b/testdata/picard/illumina/25T8B25T/sams/TTGTCTAT.sam
new file mode 100644
index 0000000..01ab259
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/TTGTCTAT.sam
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TTGTCTAT LB:LN_TTGTCTAT PL:illumina PU:HiMom.1.TTGTCTAT CN:BI
+HiMom:1:1101:1219:2164 77 * 0 0 * * 0 0 TCAAGCAGGAGCAGCTAAGTCCTAA CCCFFFFFHHHHHJJJJJJHIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1219:2164 141 * 0 0 * * 0 0 ATCTTATCCACTCCTTCCACTTTGG CCCFFFFFHHHHHJJIJJJJJJJIJ RG:Z:HiMom.1
+HiMom:1:1201:1103:2184 77 * 0 0 * * 0 0 GTAAGAACTACCCTGGGTCCCCGTG @@BFFFFFHHHHHJJJJGIJJJJHI RG:Z:HiMom.1
+HiMom:1:1201:1103:2184 141 * 0 0 * * 0 0 AGAAGTTTCAGAATTGTGGCCCCAT B at BFFDEFHHHHHJJJGHIJJJJJI RG:Z:HiMom.1
+HiMom:1:1201:1107:2109 77 * 0 0 * * 0 0 .GGGAACCTGGCGCTAAACCATTCG #1=DFFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
+HiMom:1:1201:1107:2109 141 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHGHHJJJJIIJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1252:2141 77 * 0 0 * * 0 0 .TTCCCCCCATGTAATTATTGTGAA #1=DDFFFHHHHHJJJJJJJJIJJJ RG:Z:HiMom.1
+HiMom:1:1201:1252:2141 141 * 0 0 * * 0 0 AGTTATTTTGCCTATGTCCAACAAG BCBFFFFFGHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/barcode.params b/testdata/picard/illumina/25T8B25T/sams/barcode.params
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/sams/barcode.params
rename to testdata/picard/illumina/25T8B25T/sams/barcode.params
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/sams/multiplexed_positive_rgtags.params b/testdata/picard/illumina/25T8B25T/sams/multiplexed_positive_rgtags.params
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/sams/multiplexed_positive_rgtags.params
rename to testdata/picard/illumina/25T8B25T/sams/multiplexed_positive_rgtags.params
diff --git a/testdata/picard/illumina/25T8B25T/sams/nonBarcoded.sam b/testdata/picard/illumina/25T8B25T/sams/nonBarcoded.sam
new file mode 100644
index 0000000..f1ffc0a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B25T/sams/nonBarcoded.sam
@@ -0,0 +1,182 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:HiDad LB:Hello, World PL:illumina PU:HiMom.1 CN:BI
+HiMom:1:1101:1031:2224 516 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
+HiMom:1:1101:1039:2147 516 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
+HiMom:1:1101:1046:2175 516 * 0 0 * * 0 0 ..GGA.................... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1047:2122 516 * 0 0 * * 0 0 ..TCA.................... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1048:2197 516 * 0 0 * * 0 0 ..GTG.................... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1065:2193 4 * 0 0 * * 0 0 .CTTG.................... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1069:2159 4 * 0 0 * * 0 0 GACGT.................... <<<@?#################### RG:Z:HiMom.1
+HiMom:1:1101:1071:2233 4 * 0 0 * * 0 0 GTTTG.................... <<<@@#################### RG:Z:HiMom.1
+HiMom:1:1101:1083:2193 4 * 0 0 * * 0 0 AGGCT.................... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1084:2136 4 * 0 0 * * 0 0 TTTCT.................... <<<@@#################### RG:Z:HiMom.1
+HiMom:1:1101:1089:2172 4 * 0 0 * * 0 0 TCCGG.................... :<<??#################### RG:Z:HiMom.1
+HiMom:1:1101:1100:2207 4 * 0 0 * * 0 0 AGGCT............G....... ######################### RG:Z:HiMom.1
+HiMom:1:1101:1111:2148 4 * 0 0 * * 0 0 GCGAA.A..........GGACGAC. ######################### RG:Z:HiMom.1
+HiMom:1:1101:1138:2141 4 * 0 0 * * 0 0 TCCGATCTGCTTCAGGTCGATCAGA CCCFFFFFHGHHHJJIGHIJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1140:2120 4 * 0 0 * * 0 0 TTTTTTTTTTTTTAACTTTGCAAAT @@@DDDDDHHHHFB at 9FHI@BFH@@ RG:Z:HiMom.1
+HiMom:1:1101:1143:2192 4 * 0 0 * * 0 0 CGACAAGTCTGGCTTATCACTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1150:2228 4 * 0 0 * * 0 0 ATGGGAGGCGATTCCTAGGGGGTTG 8?=DD8;@BH6DHD<FGGGEIGHIG RG:Z:HiMom.1
+HiMom:1:1101:1157:2135 4 * 0 0 * * 0 0 TTTAAAGTCTTAATCAAAGATGATA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1162:2207 516 * 0 0 * * 0 0 TAAAACTGGGGAAGTTAGAGGAATG ######################### RG:Z:HiMom.1
+HiMom:1:1101:1165:2239 4 * 0 0 * * 0 0 ATGGAAGTCGAGACAGAAGTGAGAA ######################### RG:Z:HiMom.1
+HiMom:1:1101:1175:2197 4 * 0 0 * * 0 0 AAGAGCTGGGGAACATCCAGAAAGG BC at FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1188:2237 4 * 0 0 * * 0 0 GCTTCCTTCAAGACAGAAGTGAGAA CCCFFDDEFHHFFE at FDHHAIAFHG RG:Z:HiMom.1
+HiMom:1:1101:1197:2200 4 * 0 0 * * 0 0 ATATTCCACTGGAACCACAGAACCC @@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1206:2126 4 * 0 0 * * 0 0 ATCTGTCCAGTGGTGCACTGAATGT CCCFFFFFHHHHHHIIJJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1212:2230 4 * 0 0 * * 0 0 TTTTAGCTTTATTGGGGAGGGGGTG CCCFFFFFHHGHHJJJJGJJJJJDF RG:Z:HiMom.1
+HiMom:1:1101:1218:2200 4 * 0 0 * * 0 0 GCTCTTCCGATCTATCTGCTCGTCC (-(=34???3;@############# RG:Z:HiMom.1
+HiMom:1:1101:1219:2164 4 * 0 0 * * 0 0 ATCTTATCCACTCCTTCCACTTTGG CCCFFFFFHHHHHJJIJJJJJJJIJ RG:Z:HiMom.1
+HiMom:1:1101:1221:2143 4 * 0 0 * * 0 0 CAATTGAATGTCTGCACAGCCGCTT @@@FFFFDHHHHHJJJIIIJGHIJJ RG:Z:HiMom.1
+HiMom:1:1101:1236:2121 4 * 0 0 * * 0 0 TTGCGCTTACTTTGTAGCCTTCATC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1242:2170 4 * 0 0 * * 0 0 GGAAGGAAAAGAAGCACAAGTACAT @@@DFDFFHHHGHHGIIGJJEHHIG RG:Z:HiMom.1
+HiMom:1:1101:1257:2223 4 * 0 0 * * 0 0 TGCTCTTCCGATCTTTTAGCAAAGC :?@DDBDDHFFHDGIGIIJJJGGGI RG:Z:HiMom.1
+HiMom:1:1101:1259:2152 4 * 0 0 * * 0 0 ATTTTTATATTTTTTTAGACATAGG CCCFFFFFGHHHHJJJJIGIIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1261:2127 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHGHHHJJIFDDDDDDDD RG:Z:HiMom.1
+HiMom:1:1101:1263:2236 516 * 0 0 * * 0 0 AGTTCTTCAGTAATTTTAGTACTGC ######################### RG:Z:HiMom.1
+HiMom:1:1101:1267:2209 4 * 0 0 * * 0 0 GGCAGAGTCTCCAACAGCCCCGTAC =;?DDDD?CCFHAIIIGGIIGE at EG RG:Z:HiMom.1
+HiMom:1:1101:1269:2170 4 * 0 0 * * 0 0 TTCCAAGCCTGTGCTTTAAGGAAAA @@<ADBDBDF8DDCFH at GIE@@GGH RG:Z:HiMom.1
+HiMom:1:1101:1290:2225 4 * 0 0 * * 0 0 TCAGTTCACTGGCAAAGACAGTCAC C@@FBEDDFHFHGIIICEHGDHBHE RG:Z:HiMom.1
+HiMom:1:1101:1291:2150 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHFHHIJJJIIIGIJIJ RG:Z:HiMom.1
+HiMom:1:1101:1302:2244 4 * 0 0 * * 0 0 TGAATACATATAACAAATGCAAAAA CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1308:2153 516 * 0 0 * * 0 0 TCTGTAAGGTAATCCCCGCATGTGT 1?1=4===AFFDFFGFDGFB at CFB: RG:Z:HiMom.1
+HiMom:1:1101:1309:2210 4 * 0 0 * * 0 0 AGTGGGCTAGGGCATTTTTAATCTT @@?DFFDFHHHDFHJIJJIJGIIIJ RG:Z:HiMom.1
+HiMom:1:1101:1314:2233 4 * 0 0 * * 0 0 AGGAAAGTTGGGCTGACCTGACAGA @@<DDD;=FBFADBCGDEH?F;FCG RG:Z:HiMom.1
+HiMom:1:1101:1316:2126 4 * 0 0 * * 0 0 TCTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJJHFDDDDDD RG:Z:HiMom.1
+HiMom:1:1101:1327:2200 516 * 0 0 * * 0 0 GTCATCTGGGCTGTCGACAGGTGTC @B at FFFFFHHHHGIJJJJJJIFHHI RG:Z:HiMom.1
+HiMom:1:1101:1328:2225 4 * 0 0 * * 0 0 AGGAAATTAGGACTTACCTGACATA ######################### RG:Z:HiMom.1
+HiMom:1:1101:1338:2175 4 * 0 0 * * 0 0 GCTTGTTGGCTTTAACATCCACAAT CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1347:2149 4 * 0 0 * * 0 0 GCTCTTCCGATCTGTGCTCTTCCGA CCCFFFFFDFHHFIJDGIGGHGIGH RG:Z:HiMom.1
+HiMom:1:1101:1353:2226 4 * 0 0 * * 0 0 GTGCTCTTCCGATCTTCAGGTTACC BBBFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1363:2138 4 * 0 0 * * 0 0 GTTCTTAAACCTGTTAGAACTTCTG C@@FFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1399:2128 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHIJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1403:2194 4 * 0 0 * * 0 0 ACATGGTGAAACCCTGTCTCTACTA CCCFFFDDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1406:2222 4 * 0 0 * * 0 0 GGCTGGACTCCCCTGGTTCTGGGCA ;?@DDDBD?FHDFGIIIGIGHHIII RG:Z:HiMom.1
+HiMom:1:1101:1419:2119 4 * 0 0 * * 0 0 ACTTTCCTTTTTTGTTTTACTTTAA ######################### RG:Z:HiMom.1
+HiMom:1:1101:1420:2213 4 * 0 0 * * 0 0 TTCACTGTACCGGCCGTGCGTACTT @CCFFFFDHHHFGIJJJJJJGHIGG RG:Z:HiMom.1
+HiMom:1:1101:1435:2194 4 * 0 0 * * 0 0 TTTTGTTTTCTTTTACTGAAGTGTA CCCFFDFFHHHHHJJJJIHIJHHHJ RG:Z:HiMom.1
+HiMom:1:1101:1441:2148 4 * 0 0 * * 0 0 TTTTGGCTCTAGAGGGGGTAGAGGG CCCFFFFFHHDFBHIIJJ1?FGHIJ RG:Z:HiMom.1
+HiMom:1:1101:1452:2132 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1460:2176 4 * 0 0 * * 0 0 AGGAAAAAGACACAACAAGTCCAAC ######################### RG:Z:HiMom.1
+HiMom:1:1101:1479:2221 4 * 0 0 * * 0 0 GGGGAAATCTATTTTTATGTAAAAA @CCFFFFFHHHHHJIGIJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1101:1491:2120 4 * 0 0 * * 0 0 GGCCAGGCTGAACTTCTGAGCTGCT CCCFFFFFHHHGHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1018:2133 4 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
+HiMom:1:1201:1018:2217 516 * 0 0 * * 0 0 ......................... ######################### RG:Z:HiMom.1 XN:i:1
+HiMom:1:1201:1028:2202 4 * 0 0 * * 0 0 ..AAAC.C.T.......GG..TG.. ##42@?################### RG:Z:HiMom.1
+HiMom:1:1201:1042:2174 4 * 0 0 * * 0 0 .TCAGGAAGGC..CAAAAAAAGAAA #0;@@@?@?<@##3<@@?@@????? RG:Z:HiMom.1
+HiMom:1:1201:1043:2246 4 * 0 0 * * 0 0 .GCATCATTTC..GCTTCTCTCTGT #0;@@??@=@>##22=;@??><@?? RG:Z:HiMom.1
+HiMom:1:1201:1045:2105 516 * 0 0 * * 0 0 .TTTTTTTTTT..TTTTTTTTTTTT #0;@@@@@@@?##0:????????=< RG:Z:HiMom.1
+HiMom:1:1201:1054:2151 4 * 0 0 * * 0 0 GTCAGGCACTGAGAATATATGGGTG CBCFFFFFHHHHHJJJJJJJJJJEG RG:Z:HiMom.1
+HiMom:1:1201:1064:2239 4 * 0 0 * * 0 0 GGGATGGGAGGGCGATGAGGACTAG 8?@:DDDACC:FHHGIH<EGDDDFH RG:Z:HiMom.1
+HiMom:1:1201:1073:2225 4 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGGAGGGT @BBDFFFFHHHHHJJJJJJJJJJJ: RG:Z:HiMom.1
+HiMom:1:1201:1083:2121 4 * 0 0 * * 0 0 ACACACAACACCACCGCCCTCCCCC ######################### RG:Z:HiMom.1
+HiMom:1:1201:1084:2204 4 * 0 0 * * 0 0 TGGCTCCTCAGGCTCTCATCAGTTG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1095:2146 4 * 0 0 * * 0 0 ACTGACAACACCAAATGCTGCTAAG CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1103:2184 4 * 0 0 * * 0 0 AGAAGTTTCAGAATTGTGGCCCCAT B at BFFDEFHHHHHJJJGHIJJJJJI RG:Z:HiMom.1
+HiMom:1:1201:1107:2109 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHGHHJJJJIIJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1118:2198 4 * 0 0 * * 0 0 AATAAACTTTATTAAAGCAGTTAAA C at CFFFFFHDHHHGIIIJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1122:2227 4 * 0 0 * * 0 0 GTCATATAAGGCCCAGTCCAAGGAA @@@FFFFFHHHGGIJIGGIJFIJII RG:Z:HiMom.1
+HiMom:1:1201:1123:2161 516 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGCATACA ===AAAA8AAAA<AAA)@CBA9>A# RG:Z:HiMom.1
+HiMom:1:1201:1127:2112 516 * 0 0 * * 0 0 TAATCACCTGAGCAGTGAAGCCAGC @<@?BDDDHD?FDBHI?AHGGGDFH RG:Z:HiMom.1
+HiMom:1:1201:1134:2144 4 * 0 0 * * 0 0 AGTGTGAGTAATGGTTGAGAGGTGG B@?DDDFFFHHGHJHHGFIHHIFGI RG:Z:HiMom.1
+HiMom:1:1201:1138:2227 516 * 0 0 * * 0 0 GACAAATATAGGAAATAGAAGCTAT =1=A=AAA,2?4>7C<<4<A+3<AB RG:Z:HiMom.1
+HiMom:1:1201:1140:2125 4 * 0 0 * * 0 0 TTCATAAATTGGTCTTAGATGTTGC CC at FFFFFHHHHFGIJIIIJIJIJJ RG:Z:HiMom.1
+HiMom:1:1201:1142:2242 4 * 0 0 * * 0 0 GTAAAATGTAAAATAATAAAAAATG ?=?DDDD;AF<DF<FFFFIIIFF@< RG:Z:HiMom.1
+HiMom:1:1201:1150:2161 4 * 0 0 * * 0 0 TTCTCACTACTGTGATTGTGCCACT @C at FFFFFGHHHHGIIIICEHCFGH RG:Z:HiMom.1
+HiMom:1:1201:1159:2179 516 * 0 0 * * 0 0 TTTTTTTTTATTTTTCTAAATACTT ===AA#################### RG:Z:HiMom.1
+HiMom:1:1201:1160:2109 4 * 0 0 * * 0 0 ACATCCTTCCCATGCCACCAACTCG CCCFFFFFGHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1180:2119 4 * 0 0 * * 0 0 GCTCTAAATTTTGCTTTTCTACAGC CCCFFFFFHHHHHJJJJIJIJJIJJ RG:Z:HiMom.1
+HiMom:1:1201:1185:2143 4 * 0 0 * * 0 0 GCTGAAGGCCCGTGGGCCAGAGGTG @CCFFFFFHHHHHJJJJJJJJJJHI RG:Z:HiMom.1
+HiMom:1:1201:1187:2100 4 * 0 0 * * 0 0 AAAAAAGAGCCCGCATTGCCGAGAC =<=;AA################### RG:Z:HiMom.1
+HiMom:1:1201:1190:2194 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1204:2228 4 * 0 0 * * 0 0 TCTTCTTGTCGATGAGGAACTTGGT @?@FFFFFDHHGHJIJJGHIIJJJH RG:Z:HiMom.1
+HiMom:1:1201:1208:2132 4 * 0 0 * * 0 0 CTGTAGAAAGGATGGTCGGGCTCCA @@CDFFFFGHFHHJIJJGJIBHJJG RG:Z:HiMom.1
+HiMom:1:1201:1219:2115 4 * 0 0 * * 0 0 TGGGAGTAGTTCCCTGCTAAGGGAG ???DBDBDADDDDIEID:AFFD:?8 RG:Z:HiMom.1
+HiMom:1:1201:1236:2187 4 * 0 0 * * 0 0 CTCCTTAGCGGATTCCGACTTCCAT CCCFFFFDHHHHGIJJIGIGIJJGG RG:Z:HiMom.1
+HiMom:1:1201:1242:2207 4 * 0 0 * * 0 0 ATCTTTTATTGGCCTCCTGCTCCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1252:2141 4 * 0 0 * * 0 0 AGTTATTTTGCCTATGTCCAACAAG BCBFFFFFGHHHHJIJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1260:2165 4 * 0 0 * * 0 0 ATCTGATCTAAGTTGGGGGACGCCG @@@FFDFFHHHHHJJJIJIIIGIJJ RG:Z:HiMom.1
+HiMom:1:1201:1280:2179 4 * 0 0 * * 0 0 GAGGACTGCTTGAGTCCAGGAGTTC @@BFFDEFGHHHHIFGCHIJJJGGI RG:Z:HiMom.1
+HiMom:1:1201:1281:2133 4 * 0 0 * * 0 0 GCAACAAAATTTCATATGACTTAGC CCCFFFFFHHHHHJJIIIHICHIIJ RG:Z:HiMom.1
+HiMom:1:1201:1285:2100 4 * 0 0 * * 0 0 GATCTTTTTTGCTTTGTAGTTATAG @@@DFFFFHHHHHIIGIABCFFHBF RG:Z:HiMom.1
+HiMom:1:1201:1291:2158 4 * 0 0 * * 0 0 CGTGTGCTCTTCCGATCTGATGGGC @CCFFFDD?FHHFGEHHIIDHIIII RG:Z:HiMom.1
+HiMom:1:1201:1300:2137 4 * 0 0 * * 0 0 GCTCTTCCGATCTTTTTTTTAATTT @@?DDDDDFDHADEHGIGGED3?FD RG:Z:HiMom.1
+HiMom:1:1201:1312:2112 4 * 0 0 * * 0 0 ATTTGCAGGAGCCGGCGCAGGTGCA CCCFFFFFHHHHHJJJIJJJJGHIJ RG:Z:HiMom.1
+HiMom:1:1201:1331:2162 4 * 0 0 * * 0 0 TAATCCCAGTACTTTGGGAGGCCAA CCCFFFFFHHHHHJJJJIJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1341:2116 4 * 0 0 * * 0 0 ATAACAGCGAGACTGGCAACTTAAA ######################### RG:Z:HiMom.1
+HiMom:1:1201:1344:2147 4 * 0 0 * * 0 0 ACGATTAGTTTTAGCATTGGAGTAG @<??DDDDFHHHFGGHHIIIGGAGH RG:Z:HiMom.1
+HiMom:1:1201:1345:2181 4 * 0 0 * * 0 0 ATACGGATGTGTTTAGGAGTGGGAC CCCFFFFFHHHHHIIJJHJFHIJIJ RG:Z:HiMom.1
+HiMom:1:1201:1364:2113 4 * 0 0 * * 0 0 TAAAGAGAGCCAGTGGAGTTACGAC ######################### RG:Z:HiMom.1
+HiMom:1:1201:1392:2109 4 * 0 0 * * 0 0 GTCAGACAGGGGGATTTGGGCTGTG BBCFFFFFHHHHHHJJJHIJIJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1392:2184 4 * 0 0 * * 0 0 ATCTTTATTCATTTGTATGATCTTA @@BFFFFFHFFHFHIHIIJIJJJJI RG:Z:HiMom.1
+HiMom:1:1201:1393:2143 4 * 0 0 * * 0 0 GATAAATGCACGCATCCCCCCCGCG C at CFFFFFGGHHHHJJJJJJJJJJI RG:Z:HiMom.1
+HiMom:1:1201:1414:2174 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT @;@1BDADF????FFEB>B6=BBBB RG:Z:HiMom.1
+HiMom:1:1201:1416:2128 4 * 0 0 * * 0 0 TTGGTGTGGAGGCGGTGGCGGGATC @@@DDDDDHHFHHII:?GGHIIB6? RG:Z:HiMom.1
+HiMom:1:1201:1421:2154 4 * 0 0 * * 0 0 TGTGCTCTTCCGATCTTGTGCTCTT BC at DFFFFHHHHHJJJJFHIHHIJJ RG:Z:HiMom.1
+HiMom:1:1201:1439:2156 4 * 0 0 * * 0 0 GGAGATTATTTGCCTTGAAGTAAGC -;(22<>>@>8@>8;@######### RG:Z:HiMom.1
+HiMom:1:1201:1452:2143 4 * 0 0 * * 0 0 TTTTAGTCTTAGCATTTACTTTCCC CCCFFFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:1201:1458:2109 4 * 0 0 * * 0 0 GATACGAACACACAAGAACTTTTTT CCCFFFFFHHHHHJJJJJJJJJJJI RG:Z:HiMom.1
+HiMom:1:1201:1472:2121 516 * 0 0 * * 0 0 GTGTGCTCTTCCGATCTGGAGGATG =+=??A4A==A at 7A<?######### RG:Z:HiMom.1
+HiMom:1:1201:1483:2126 516 * 0 0 * * 0 0 GCATGCAGCTGGGTGCTGTGATGCA @@@DDDBB<DD8F<<CGG?AA?A<F RG:Z:HiMom.1
+HiMom:1:1201:1486:2109 4 * 0 0 * * 0 0 ACGTGTGCTCTTCCCGATCTGTATA CCCFF?DDFBHHHJJIIDHJIJJJH RG:Z:HiMom.1
+HiMom:1:1201:1486:2146 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTGGGC <<<@??@??@???????######## RG:Z:HiMom.1
+HiMom:1:2101:1011:2102 4 * 0 0 * * 0 0 .....TCACACATAATTTTAAAATT #####22@?@@??@@@@@??@@@@@ RG:Z:HiMom.1
+HiMom:1:2101:1013:2146 4 * 0 0 * * 0 0 ....CGCTAGAACCAACTTATTCAT ####24=?@@?@?@@?@@@@@@?@@ RG:Z:HiMom.1
+HiMom:1:2101:1021:2209 4 * 0 0 * * 0 0 ..GGAAGGCTGCTAGCTGGCCAGAG ##08@>??@@??@?????????>?@ RG:Z:HiMom.1
+HiMom:1:2101:1023:2237 516 * 0 0 * * 0 0 ..TTTGTTTGAGTTCCTTGTAGATT ##0:=@?>?@???@:>?@??>?;?< RG:Z:HiMom.1
+HiMom:1:2101:1031:2163 4 * 0 0 * * 0 0 ..ACATTTGTCACCACTAGCCACCA ##0<@?@@@@@@@@@@?@@@@@@@? RG:Z:HiMom.1
+HiMom:1:2101:1036:2087 4 * 0 0 * * 0 0 .GTCCACTTACGAAGCAAATACTTT #4=DDFFFHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1040:2208 516 * 0 0 * * 0 0 .CTGATAGTCACTGAAATGAATTCA #-0=>(2 at .22@@############ RG:Z:HiMom.1
+HiMom:1:2101:1048:2238 4 * 0 0 * * 0 0 .GTCACATCGTTGAAGCACTGGATC #11ADDDB<CFFHCHGDBHGIIIII RG:Z:HiMom.1
+HiMom:1:2101:1054:2162 4 * 0 0 * * 0 0 .GGACAGGGAAGGGAAGGAAGGGTG #4=DDFDFHHHHHJIJIIDHHGICG RG:Z:HiMom.1
+HiMom:1:2101:1059:2083 4 * 0 0 * * 0 0 .GAATGTCTTAGAAGGATGCTTCTC #1=BDDDEHHGHHJJJJJIJJIIJJ RG:Z:HiMom.1
+HiMom:1:2101:1063:2206 4 * 0 0 * * 0 0 .TGCTAGGATGAGGATGGATAGTAA #1=DDDFFHHHHHJHIIJHIIIHHJ RG:Z:HiMom.1
+HiMom:1:2101:1064:2242 4 * 0 0 * * 0 0 .GGAAAAAGGTTGTCAAGCGTTAAA ######################### RG:Z:HiMom.1
+HiMom:1:2101:1072:2170 4 * 0 0 * * 0 0 .GGGGAGACAGAGAGGATCAGAAGT #4=BDDFDHHDFHEGFEGGIJIIIG RG:Z:HiMom.1
+HiMom:1:2101:1077:2139 4 * 0 0 * * 0 0 .ATTAGTTGGCGGATGAAGCAGATA #4=DFFFFHHHHHJJJJJJJJJIJJ RG:Z:HiMom.1
+HiMom:1:2101:1084:2188 4 * 0 0 * * 0 0 TACAAGGTCAAAATCAGCAACAAGT CCCFFFFDHHHHHJJJJJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1100:2085 4 * 0 0 * * 0 0 ATCTTGATCTCCTCCTTCTTGGCCT @@@DDDDDHHFHFEIIIIHHBAHBG RG:Z:HiMom.1
+HiMom:1:2101:1102:2221 4 * 0 0 * * 0 0 ATAACTGACTCTACTCAGTAGATTA CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1105:2131 4 * 0 0 * * 0 0 CAGCAGCAGCAACAGCAGAAACATG CCCFFFFFHHHHHJJJJJIJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1112:2245 4 * 0 0 * * 0 0 TCGTAGTGTTGTAATTTCGTCTTCT ?8?DBDDDCCFCAACGGFFCBFFAE RG:Z:HiMom.1
+HiMom:1:2101:1122:2136 4 * 0 0 * * 0 0 CTTGCCAGCCTGCAGGCCCCGCGGC ???BBAABDD?DDIID)A:3<EADD RG:Z:HiMom.1
+HiMom:1:2101:1123:2095 4 * 0 0 * * 0 0 TCCGCCTCCAGCTTCAGCTTCTCCT @@@FDDFFHHHHHJHGGJIJJJEHH RG:Z:HiMom.1
+HiMom:1:2101:1126:2082 4 * 0 0 * * 0 0 TCTCTTTCCACCTTGGTCACCTTCC @C at DDDFFHHHHHJEGGIHHIJGIH RG:Z:HiMom.1
+HiMom:1:2101:1133:2239 4 * 0 0 * * 0 0 AGCTTTTTGTTTCCTAGCTTGTCTT ?@?DDFFFHHHHF4ACFHIJHHHGH RG:Z:HiMom.1
+HiMom:1:2101:1143:2137 4 * 0 0 * * 0 0 GCTCTTCAGATCTAGGGGGAACAGC @@@DD?=DCAFFFHIIDG:EFHIII RG:Z:HiMom.1
+HiMom:1:2101:1151:2182 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTA 9<<?@?@;5=?############## RG:Z:HiMom.1
+HiMom:1:2101:1151:2236 516 * 0 0 * * 0 0 TTTGAAGCCTCTTTATCCTTGGCAT ######################### RG:Z:HiMom.1
+HiMom:1:2101:1162:2139 4 * 0 0 * * 0 0 ATCGTTTATGGTCGGAACTACGACG BCCFFFFFHHHHHIJJJJJJJIJJI RG:Z:HiMom.1
+HiMom:1:2101:1163:2203 4 * 0 0 * * 0 0 TTGGTTCACTTATGTATTTATGAAT @CCFDFFFHHHHHJHIIJJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1163:2222 4 * 0 0 * * 0 0 GAGCGATAATGGTTCTTTTCCTCAC @@@DFFFFHHHHHJJJJJJJIJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1172:2152 516 * 0 0 * * 0 0 ATCGTTTCTGGGGACTAGTGAGGCG ######################### RG:Z:HiMom.1
+HiMom:1:2101:1186:2093 4 * 0 0 * * 0 0 AATGTTGGGAGGACAATGATGGAAA ######################### RG:Z:HiMom.1
+HiMom:1:2101:1188:2195 4 * 0 0 * * 0 0 GCACATACACCAAATGTCTGAACCT CCCFFFFFHHHHHJJJHIJJJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1195:2150 4 * 0 0 * * 0 0 AATTGAACTTCACCACCCAGAGGAA CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1207:2084 516 * 0 0 * * 0 0 TCACCACTCTTCTGGGCATCCCCTG @@@DDEDFHHHHHIJIHHGHGGJJJ RG:Z:HiMom.1
+HiMom:1:2101:1208:2231 516 * 0 0 * * 0 0 CTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFHHHHHJJJHFDDDDDDD RG:Z:HiMom.1
+HiMom:1:2101:1215:2110 4 * 0 0 * * 0 0 ATCTTTCCCCCATTAAGAACAGCAA ######################### RG:Z:HiMom.1
+HiMom:1:2101:1216:2172 4 * 0 0 * * 0 0 GGACTTCTAGGGGATTTAGCGGGGT CCCFFFFFHHHHHJJJJJJJJJJJD RG:Z:HiMom.1
+HiMom:1:2101:1216:2193 4 * 0 0 * * 0 0 AGGCATGACACTGCATTTTAAATAC @@@DDDDDHFFHHGGDFHFHIIHGG RG:Z:HiMom.1
+HiMom:1:2101:1226:2088 4 * 0 0 * * 0 0 GCTCTTCCGATCTAGGTAATAGCTA ==?BDFFFDCDDHFFFAFHDHIJGJ RG:Z:HiMom.1
+HiMom:1:2101:1231:2208 4 * 0 0 * * 0 0 AGCCAGTGTTGGTGTGTTGACTGTT @@;1ADABCF;BF<AACGCHEBHC< RG:Z:HiMom.1
+HiMom:1:2101:1233:2133 516 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT CCCFFFFFGHHHHJJJFDDDDDDDD RG:Z:HiMom.1
+HiMom:1:2101:1240:2197 516 * 0 0 * * 0 0 ACTGGAGATCCTTGTTACATGCCCA ??+++A:DD?:ADEE@::C4:C<E: RG:Z:HiMom.1
+HiMom:1:2101:1245:2154 4 * 0 0 * * 0 0 ACCAATCAGTAGCACCACTATACAC CCCFFFFFHHHHHJJJJJJIJJJJJ RG:Z:HiMom.1
+HiMom:1:2101:1249:2231 4 * 0 0 * * 0 0 TCTCTCGGCCTTCCACTCTAGCATA @@@FFFFFFHHGHIJJJGJIIJHIJ RG:Z:HiMom.1
+HiMom:1:2101:1258:2092 4 * 0 0 * * 0 0 TTAGACAAAACACCAAAATAAAATA ######################### RG:Z:HiMom.1
+HiMom:1:2101:1262:2128 516 * 0 0 * * 0 0 TCTTGTGGTAACTTTTCTGACACCT -(---9@;@?:8>?4:>?@###### RG:Z:HiMom.1
+HiMom:1:2101:1273:2119 516 * 0 0 * * 0 0 ATGATGGATCTTCTCTAACTTGTCA >=><AAAAA+2AA?CB4@@ABB3?A RG:Z:HiMom.1
+HiMom:1:2101:1285:2105 516 * 0 0 * * 0 0 TGTCTATATCAACCAACACCTCTTC -(0(():94:9:???########## RG:Z:HiMom.1
+HiMom:1:2101:1312:2105 4 * 0 0 * * 0 0 GTTGAGAATAGGTTGAGATCGTTTC @CCFFFDFHHFHDHIJJJJJJJIJJ RG:Z:HiMom.1
+HiMom:1:2101:1325:2083 4 * 0 0 * * 0 0 TGTGCTCTTCCGATCTGGAGAAAAA ######################### RG:Z:HiMom.1
+HiMom:1:2101:1336:2109 4 * 0 0 * * 0 0 AGACCAGAACAGCTCCAGGTGCTCC CCCFFFFFHHHHHJJJJJJCGHIJJ RG:Z:HiMom.1
+HiMom:1:2101:1349:2084 4 * 0 0 * * 0 0 AGTCTGAATCATTGGTGTCTGAAGA <5;??=>=>>?############## RG:Z:HiMom.1
+HiMom:1:2101:1365:2094 4 * 0 0 * * 0 0 GCTCTTCCGATCTTGTGCTCTTCCG CCCFFFFDHFHHGJJIIJIJJIHII RG:Z:HiMom.1
+HiMom:1:2101:1370:2116 4 * 0 0 * * 0 0 CACCATCTGACATCATGTTTGAAAG @@@DFFFDFFHDHIGBHHII<HEDB RG:Z:HiMom.1
+HiMom:1:2101:1386:2105 4 * 0 0 * * 0 0 AGGAATTATTCTTCTGCCATAAGGT B@@DDFFFHGFHHIJJJJJGIGIJH RG:Z:HiMom.1
+HiMom:1:2101:1414:2098 4 * 0 0 * * 0 0 TTGGGGCCGGTGCCGTCGGGCCCAA CCCFFFFFHHHHGJJIJJJJJJJIJ RG:Z:HiMom.1
+HiMom:1:2101:1427:2081 4 * 0 0 * * 0 0 CCGACTTCCATGGCCACCGTCCTGC CCCFFFFFHHHHHJJJIIGFIIJJI RG:Z:HiMom.1
+HiMom:1:2101:1450:2134 4 * 0 0 * * 0 0 ACAAACCCTTGTGTCGAGGGCTGAC CC at FDFDFFDFHFGIIE1CGGHBGE RG:Z:HiMom.1
+HiMom:1:2101:1459:2083 4 * 0 0 * * 0 0 ATTTCACCAAAATAATCAGAAGGCC CCCFFFFDBHGHHIGGIJFJJGGFH RG:Z:HiMom.1
+HiMom:1:2101:1491:2093 4 * 0 0 * * 0 0 AGAGACGGGGTCTCGCTATGTTGCC BCCDFFFFHHHHHJIIJJJJIJIJJ RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/L001/s_1_1101.locs b/testdata/picard/illumina/25T8B8B25T/Data/Intensities/L001/s_1_1101.locs
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/Data/Intensities/L001/s_1_1101.locs
rename to testdata/picard/illumina/25T8B8B25T/Data/Intensities/L001/s_1_1101.locs
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq
new file mode 100644
index 0000000..c756fa1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14221:1451 1:Y:0:AACTTGACGCTCTCTT
+TTTTTTTTTCTTTTACTTTTTTTTT
++
+>1>1>111>0@@31311B21AAA##
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq
new file mode 100644
index 0000000..1620e96
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14221:1451 2:Y:0:AACTTGACGCTCTCTT
+TTTTTTTTTCTTTTTTTTCCTTTTT
++
+1111111>>0 at 331B00/011221A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_1.fastq
new file mode 100644
index 0000000..91a3610
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14221:1451 :Y:0:AACTTGACGCTCTCTT
+AACTTGAC
++
+11>AA11B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_2.fastq
new file mode 100644
index 0000000..8ff1eb4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AACTTGACGCTCTCTT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14221:1451 :Y:0:AACTTGACGCTCTCTT
+GCTCTCTT
++
+3>>>>DDD
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq
new file mode 100644
index 0000000..a3e8f48
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15405:1531 1:Y:0:AAGACACTAGTCACCT
+TTTCCTTCTTTTTTTTTTTTTTTAT
++
+11>11331 at 13111000A#######
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq
new file mode 100644
index 0000000..4051ec0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15405:1531 2:Y:0:AAGACACTAGTCACCT
+TTCTTTTTTCTTTTTCTTTGTTCTT
++
+11111@@11>1331B11333B03A3
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_1.fastq
new file mode 100644
index 0000000..c3beeb3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15405:1531 :Y:0:AAGACACTAGTCACCT
+AAGACACT
++
+111111>B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_2.fastq
new file mode 100644
index 0000000..8d1b1af
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCACCT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15405:1531 :Y:0:AAGACACTAGTCACCT
+AGTCTCCT
++
+11>11B11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AAGACACTAGTCTCCT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq
new file mode 100644
index 0000000..1433898
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14342:1520 1:Y:0:ACAGGTATCACTTCAT
+CTTTCTTTTCTCCTTTTTTTCTTTC
++
+11>>1@@@1313111311AA0BAAA
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq
new file mode 100644
index 0000000..76e9d08
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14342:1520 2:Y:0:ACAGGTATCACTTCAT
+TCGTGTTTTTTCTTTTTGCTTTCCC
++
+111>1>>>11111331A013A3111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_1.fastq
new file mode 100644
index 0000000..92aca3b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14342:1520 :Y:0:ACAGGTATCACTTCAT
+ACAGGTAT
++
+1>111B1B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_2.fastq
new file mode 100644
index 0000000..99130be
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGGTATCACTTCAT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14342:1520 :Y:0:ACAGGTATCACTTCAT
+CACTTCAT
++
+>1>>>B3@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq
new file mode 100644
index 0000000..3546dc8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14133:1507 1:Y:0:ACAGTTGAATCTTCTC
+TCCTCTTTGCTTTTTGCTATCACTC
++
+111>1B1 at 313131111A33A33D1
+ at machine1:HiMom:abcdeACXX:1:1101:14753:1450 1:Y:0:ACAGTTGAATCTTCTC
+CTTTTTCCTCTTTTTTTCTTTTGTT
++
+1>>>>@1131B1311100BA31100
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq
new file mode 100644
index 0000000..b7df2b5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14133:1507 2:Y:0:ACAGTTGAATCTTCTC
+TCCTTTATTATCTTTGTTCCTTTTT
++
+111>>313 at 333AAA3A1333331A
+ at machine1:HiMom:abcdeACXX:1:1101:14753:1450 2:Y:0:ACAGTTGAATCTTCTC
+TCCCTTTTTTTTCTTTTCTCTTTTT
++
+1111>@11@>1001331313331AA
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_1.fastq
new file mode 100644
index 0000000..7750c5d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14133:1507 :Y:0:ACAGTTGAATCTTCTC
+ACAGTTGA
++
+1>11>D13
+ at machine1:HiMom:abcdeACXX:1:1101:14753:1450 :Y:0:ACAGTTGAATCTTCTC
+ACAGTTGA
++
+1>11>B13
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_2.fastq
new file mode 100644
index 0000000..288e831
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACAGTTGAATCTTCTC.barcode_2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14133:1507 :Y:0:ACAGTTGAATCTTCTC
+ATCTTCTC
++
+3>AAADDD
+ at machine1:HiMom:abcdeACXX:1:1101:14753:1450 :Y:0:ACAGTTGAATCTTCTC
+ATCTTCTC
++
+3>>AAD@@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq
new file mode 100644
index 0000000..05b2493
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15221:1507 1:Y:0:ACCAACTGCATCACTT
+CTTTTTTCTTTCTTTGTTTTTGTAT
++
+1>1>1111@@33A3B3311000033
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq
new file mode 100644
index 0000000..eaaee6b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15221:1507 2:Y:0:ACCAACTGCATCACTT
+CTCTTTTTTTTCTCTCTTCTTTCCT
++
+111>13111>0013A11313B321A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_1.fastq
new file mode 100644
index 0000000..fa7b8a0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15221:1507 :Y:0:ACCAACTGCATCACTT
+ACCAACTG
++
+3>>33>C4
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_2.fastq
new file mode 100644
index 0000000..77ec08f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACCAACTGCATCACTT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15221:1507 :Y:0:ACCAACTGCATCACTT
+CATCACTT
++
+>1>A1BB@
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ACCTACTGCTTCCCTT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq
new file mode 100644
index 0000000..2f2f57b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17324:1480 1:Y:0:ACTAAGACGTCCTCAT
+TCTCTGTGTTTTTTTTTTTTTTACT
++
+>111>333 at 11111A000///A/1A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq
new file mode 100644
index 0000000..083e424
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17324:1480 2:Y:0:ACTAAGACGTCCTCAT
+CTTTTTTTTCTTCTCTTTCCTTCCT
++
+1>>1111>00 at 333133331AA101
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_1.fastq
new file mode 100644
index 0000000..be97eb5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17324:1480 :Y:0:ACTAAGACGTCCTCAT
+ACTAAGAC
++
+1>>1111B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_2.fastq
new file mode 100644
index 0000000..293c78d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ACTAAGACGTCCTCAT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17324:1480 :Y:0:ACTAAGACGTCCTCAT
+GTCCTCAT
++
+1>>>>D1B
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/AGGTCGCATTCCTTTC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq
new file mode 100644
index 0000000..92ef0f8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15634:1526 1:Y:0:AGGTGCGAGACATTAA
+TTTTTTTTTTCTTTGGTTATTTTAT
++
+1>>>>>AA00>11B100A1BBAB2A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq
new file mode 100644
index 0000000..8a55a69
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15634:1526 2:Y:0:AGGTGCGAGACATTAA
+CCTCTCTTCTTTTTTTCTCCTTTTT
++
+111>1>131 at 131110A1B1ABBA1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_1.fastq
new file mode 100644
index 0000000..400fa48
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15634:1526 :Y:0:AGGTGCGAGACATTAA
+AGGTGCGA
++
+111>1B11
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_2.fastq
new file mode 100644
index 0000000..d2a5552
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTGCGAGACATTAA.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15634:1526 :Y:0:AGGTGCGAGACATTAA
+GACATTAA
++
+11>1>B13
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq
new file mode 100644
index 0000000..fcc24db
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17862:1503 1:Y:0:AGGTTATCTTAGCCAG
+TTTTTTTCCTACTTTGCTTTAGTTT
++
+>1>1>1>1133113A11A1A1133A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq
new file mode 100644
index 0000000..2e49a53
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17862:1503 2:Y:0:AGGTTATCTTAGCCAG
+TCTTCCCCTTCTTTATTTATTTGCT
++
+1>1111111>1 at AA3A3B33AA333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_1.fastq
new file mode 100644
index 0000000..46f6a6f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17862:1503 :Y:0:AGGTTATCTTAGCCAG
+AGGTTATC
++
+111>>1DD
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_2.fastq
new file mode 100644
index 0000000..85a6503
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGGTTATCTTAGCCAG.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17862:1503 :Y:0:AGGTTATCTTAGCCAG
+TTAGCCAG
++
+>>11>B11
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq
new file mode 100644
index 0000000..96115d3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14369:1492 1:Y:0:AGTTGCTTTGACTTGG
+TTTCTTCTTTCTTTTTGTAAAGTTT
++
+1>>11333 at B3BB31111333333B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq
new file mode 100644
index 0000000..d9b5012
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14369:1492 2:Y:0:AGTTGCTTTGACTTGG
+TCCTTCTTTTTCTCTTTTTTTTCTT
++
+1>11>@1131111AAAAA1100011
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_1.fastq
new file mode 100644
index 0000000..286158c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14369:1492 :Y:0:AGTTGCTTTGACTTGG
+AGTTGCTT
++
+11>>1 at DF
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_2.fastq
new file mode 100644
index 0000000..f26dd32
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/AGTTGCTTTGACTTGG.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14369:1492 :Y:0:AGTTGCTTTGACTTGG
+TGACTTGG
++
+>33>>B at 4
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq
new file mode 100644
index 0000000..822517b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17049:1423 1:Y:0:ATAGCGTCTTGGTCTG
+CTCTTTTCTTTCTTTCTCTTCCTCT
++
+1>111 at 13@3333A33A3331111A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq
new file mode 100644
index 0000000..5b0ad89
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17049:1423 2:Y:0:ATAGCGTCTTGGTCTG
+TTTTCTCCTCCTCTTCCTCTTTTTT
++
+1111113111111111111113110
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq
new file mode 100644
index 0000000..5514576
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17049:1423 :Y:0:ATAGCGTCTTGGTCTG
+ATAGCGTC
++
+1>1111>>
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq
new file mode 100644
index 0000000..25bc368
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/ATAGCGTCTTGGTCTG.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17049:1423 :Y:0:ATAGCGTCTTGGTCTG
+TTGGTCTG
++
+>>11>BB1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTATCAACACCATAC.barcode_2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/ATTGTCTGGATTCACA.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq
new file mode 100644
index 0000000..ed32be3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15479:1337 1:Y:0:CAATAGTCCGACTCTC
+CTCTCTTTTTTTTCTTTTTTATTCT
++
+1111113311110013311001222
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq
new file mode 100644
index 0000000..6c2aa9d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15479:1337 2:Y:0:CAATAGTCCGACTCTC
+TTTTCCTTCCTTTCTCTTCCCTCCT
++
+111111 at 311133133331111111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_1.fastq
new file mode 100644
index 0000000..4316c87
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15479:1337 :Y:0:CAATAGTCCGACTCTC
+CAATAGTC
++
+>11>11B@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_2.fastq
new file mode 100644
index 0000000..1b76f9a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAATAGTCCGACTCTC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15479:1337 :Y:0:CAATAGTCCGACTCTC
+CGACTCTC
++
+>111>>@@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq
new file mode 100644
index 0000000..11355f0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17475:1506 1:Y:0:CAGCAAGGGCGATATT
+TCTTTTTTTTTCTCTCGTGTGTTGG
++
+>111>B11>0>013310A0A0BB##
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq
new file mode 100644
index 0000000..1c4d7ef
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17475:1506 2:Y:0:CAGCAAGGGCGATATT
+CCTTTTTCTTTTCTCTCCTCTTTCC
++
+11111111 at 33131331111A1331
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_1.fastq
new file mode 100644
index 0000000..a02cb15
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17475:1506 :Y:0:CAGCAAGGGCGATATT
+CAGCAAGG
++
+>11>1111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_2.fastq
new file mode 100644
index 0000000..ccc7016
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCAAGGGCGATATT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17475:1506 :Y:0:CAGCAAGGGCGATATT
+GCGATATT
++
+1>11>1>B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq
new file mode 100644
index 0000000..0e0de2d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13678:1483 1:Y:0:CAGCGGTAAGTACTGC
+TCTTTTCTTTTTTTTTTTCTTTTTT
++
+>1>>>131331111000A01AB###
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq
new file mode 100644
index 0000000..780f45b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13678:1483 2:Y:0:CAGCGGTAAGTACTGC
+TTTTTTTTCTTTCCTCTCTTTTTTT
++
+11111111013331A##########
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_1.fastq
new file mode 100644
index 0000000..490cbaf
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13678:1483 :Y:0:CAGCGGTAAGTACTGC
+CAGCGGTA
++
+>11111>1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_2.fastq
new file mode 100644
index 0000000..89a4fff
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTAAGTACTGC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13678:1483 :Y:0:CAGCGGTAAGTACTGC
+TGTACTGC
++
+11>11 at 31
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CAGCGGTATGTACTGC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq
new file mode 100644
index 0000000..3dabdd5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13947:1464 1:Y:0:CATGCTTATAGCATTG
+CTCCTTTTCTTCTTCTTCTCTTTTT
++
+1>11113 at 313331331331A3311
+ at machine1:HiMom:abcdeACXX:1:1101:17987:1524 1:Y:0:CATGCTTATAGCATTG
+CCTCTTTTTCTGTTTTTTTTGCTGG
++
+111>11 at 111133331110001B11
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq
new file mode 100644
index 0000000..4d91201
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13947:1464 2:Y:0:CATGCTTATAGCATTG
+TTTTTTTTTCCCTCCCCTTTCCCTT
++
+1111111100111000000111111
+ at machine1:HiMom:abcdeACXX:1:1101:17987:1524 2:Y:0:CATGCTTATAGCATTG
+TCTTCTTTTCTTTCTTCTTTATTTG
++
+111>13131313A3A33A1A33A33
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_1.fastq
new file mode 100644
index 0000000..57e7013
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13947:1464 :Y:0:CATGCTTATAGCATTG
+CATGCTTT
++
+11>1>B at 3
+ at machine1:HiMom:abcdeACXX:1:1101:17987:1524 :Y:0:CATGCTTATAGCATTG
+CATGCTTA
++
+A3>3>DF5
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_2.fastq
new file mode 100644
index 0000000..5d29115
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTG.barcode_2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13947:1464 :Y:0:CATGCTTATAGCATTG
+TAGCATTG
++
+>11>1 at 31
+ at machine1:HiMom:abcdeACXX:1:1101:17987:1524 :Y:0:CATGCTTATAGCATTG
+TAGCATTT
++
+>11>13B3
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTATAGCATTT.barcode_2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGCTTTTAGCATTG.barcode_2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.2.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_1.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_1.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_1.fastq
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_2.fastq
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_2.fastq
rename to testdata/picard/illumina/25T8B8B25T/fastq/CATGTTCGCGCCTTTT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq
new file mode 100644
index 0000000..5a772ba
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16357:1518 1:Y:0:CCAGAGCTCAACTGAT
+GTCTTCTGCTTCGCTCACGCTGGGT
++
+1>>>>3 at 113B311AA1111A0000
+ at machine1:HiMom:abcdeACXX:1:1101:17387:1497 1:Y:0:CCAGAGCTCAACTGAT
+CCCCTTTTTTGTTGTGCTTTAGCCT
++
+111>>111111111A01B3311111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq
new file mode 100644
index 0000000..2fcdfcb
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16357:1518 2:Y:0:CCAGAGCTCAACTGAT
+TCCTTCTCTCTTTTTTTTTAATTCT
++
+>1111111B at BB311AA0001ABAB
+ at machine1:HiMom:abcdeACXX:1:1101:17387:1497 2:Y:0:CCAGAGCTCAACTGAT
+CTTTTTGTCTTTCTTCCCCCTGCTT
++
+111>11113@@@3333111AA0011
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_1.fastq
new file mode 100644
index 0000000..52d307d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16357:1518 :Y:0:CCAGAGCTCAACTGAT
+CCAGAGCT
++
+>A3334>D
+ at machine1:HiMom:abcdeACXX:1:1101:17387:1497 :Y:0:CCAGAGCTCAACTGAT
+CCAGAGCT
++
+>>1111BD
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_2.fastq
new file mode 100644
index 0000000..f8ba99f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCAGAGCTCAACTGAT.barcode_2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16357:1518 :Y:0:CCAGAGCTCAACTGAT
+CAACTGAT
++
+>33AAB4B
+ at machine1:HiMom:abcdeACXX:1:1101:17387:1497 :Y:0:CCAGAGCTCAACTGAT
+CAACTGAT
++
+>11>>11@
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.1.fastq
diff --git a/src/tests/java/net/sf/picard/fastq/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.2.fastq
similarity index 100%
rename from src/tests/java/net/sf/picard/fastq/.gitignore
rename to testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.2.fastq
diff --git a/src/tests/java/net/sf/samtools/apps/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_1.fastq
similarity index 100%
rename from src/tests/java/net/sf/samtools/apps/.gitignore
rename to testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_1.fastq
diff --git a/src/tests/java/org/broad/tribble/source/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_2.fastq
similarity index 100%
rename from src/tests/java/org/broad/tribble/source/.gitignore
rename to testdata/picard/illumina/25T8B8B25T/fastq/CCCGATTTTCTCTCCC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq
new file mode 100644
index 0000000..c6a432a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17516:1540 1:Y:0:CCTATGCCAATTGGCC
+CTTTCGTTTTTCTTTCCTATACATC
++
+1>>1111B>1>1B3331B3A11333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq
new file mode 100644
index 0000000..9ae403b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17516:1540 2:Y:0:CCTATGCCAATTGGCC
+TTCTTTTTTTTCCCTTTCCCTTTTC
++
+1>111 at B@11>0111B11AA1A112
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_1.fastq
new file mode 100644
index 0000000..d626d78
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17516:1540 :Y:0:CCTATGCCAATTGGCC
+CCTATGCC
++
+AAA3>4 at B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_2.fastq
new file mode 100644
index 0000000..125925f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATGCCAATTGGCC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17516:1540 :Y:0:CCTATGCCAATTGGCC
+AATTGGCC
++
+11>>11>1
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTATTCTTCGTTTTC.barcode_2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTCTCTCGCTTT.barcode_2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTCTTTCTTCTGCTC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq
new file mode 100644
index 0000000..07e35ff
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15248:1531 1:Y:0:CCTTCGCAGAATCGAC
+CCCTACCTGTCTGCTATCCATCCCC
++
+111>11111B1311313A13B111A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq
new file mode 100644
index 0000000..ef2a6e6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15248:1531 2:Y:0:CCTTCGCAGAATCGAC
+TTCTCCTTCTATTTCTCTTGTCTTC
++
+11111@@B@@3333333331A1333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_1.fastq
new file mode 100644
index 0000000..555de11
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15248:1531 :Y:0:CCTTCGCAGAATCGAC
+CCTTCGCA
++
+AAAAA?A3
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_2.fastq
new file mode 100644
index 0000000..67c59b4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCGCAGAATCGAC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15248:1531 :Y:0:CCTTCGCAGAATCGAC
+GAATCGAC
++
+111>>11>
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CCTTCTTTTATCATTT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq
new file mode 100644
index 0000000..362c07e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17615:1538 1:Y:0:CGCTATGTTTCACCTT
+CTTTTTTTTTTTTCCTTTTTTTCTT
++
+>>>>11110000A011AA1A//0A1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq
new file mode 100644
index 0000000..5eb572b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17615:1538 2:Y:0:CGCTATGTTTCACCTT
+TTCTTTCCTTTTCTTTTTTCTGTTT
++
+11>1133133 at 131331111A3333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_1.fastq
new file mode 100644
index 0000000..80808e6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17615:1538 :Y:0:CGCTATGTTTCACCTT
+CGCTATGT
++
+>11>1>1B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_2.fastq
new file mode 100644
index 0000000..a4a7d14
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCACCTT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17615:1538 :Y:0:CGCTATGTTTCACCTT
+TTCTCCTT
++
+1>>11B at 1
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CGCTATGTTTCTCCTT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq
new file mode 100644
index 0000000..83df04f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14790:1540 1:Y:0:CTACCAGGTTCTTGGC
+TTCTCTCTTTTCTCTTTCTTGTTGT
++
+A>1>13113313A3AAAAAB11B1B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq
new file mode 100644
index 0000000..8fb5e29
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14790:1540 2:Y:0:CTACCAGGTTCTTGGC
+CTCTGTATTTTCCTTTTTCTTCTTT
++
+11111 at 33@@33133A1BB1A3A1B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_1.fastq
new file mode 100644
index 0000000..14fddf8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14790:1540 :Y:0:CTACCAGGTTCTTGGC
+CTACCAGG
++
+A>3AAB43
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_2.fastq
new file mode 100644
index 0000000..e90ecfa
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTACCAGGTTCTTGGC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14790:1540 :Y:0:CTACCAGGTTCTTGGC
+TTCTTGGC
++
+AAAAA5 at 4
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/CTCCCTCTTCCTTCTT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq
new file mode 100644
index 0000000..d641bdb
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15029:1349 1:Y:0:CTGTAATCCTATTAGC
+CTTCTCCTTTTCTTTTTTTTTTTTT
++
+1>11111113 at 313A##########
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq
new file mode 100644
index 0000000..febed18
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15029:1349 2:Y:0:CTGTAATCCTATTAGC
+TTTCTTTTTCTTTTTTCTTTCTTTT
++
+1111>3 at 111133111113333331
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_1.fastq
new file mode 100644
index 0000000..0b8eba2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15029:1349 :Y:0:CTGTAATCCTATTAGC
+CTGTAATC
++
+>>1>13B@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_2.fastq
new file mode 100644
index 0000000..c93740a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/CTGTAATCCTATTAGC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15029:1349 :Y:0:CTGTAATCCTATTAGC
+CTATTAGC
++
+111>>331
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq
new file mode 100644
index 0000000..bb7eb11
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16241:1505 1:Y:0:GACCAGGACCATCACA
+CTTCTTTTTTTTCTTCCCTTTGCTC
++
+11>1113 at 11100A331011A1111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq
new file mode 100644
index 0000000..c93d8d9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16241:1505 2:Y:0:GACCAGGACCATCACA
+CTGTGGTTTTTTTCTTGTCTTTTCC
++
+111>11111111001A111333AA1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_1.fastq
new file mode 100644
index 0000000..95ff9f4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16241:1505 :Y:0:GACCAGGACCATCACA
+GACCAGGA
++
+11>>1111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_2.fastq
new file mode 100644
index 0000000..0b266c6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GACCAGGACCATCACA.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16241:1505 :Y:0:GACCAGGACCATCACA
+CCATCACA
++
+1>1>>1B1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq
new file mode 100644
index 0000000..550d738
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13789:1486 1:Y:0:GCCGTCGAAGGTACCA
+CTTTTTTCTTCCTCTTTCTTTTTCT
++
+1111111113311AAB33333A10A
+ at machine1:HiMom:abcdeACXX:1:1101:14791:1400 1:Y:0:GCCGTCGAAGGTACCA
+TTTTTTTCTTTTTCTTTTTTTCTTT
++
+>>1>>111 at 3@@11A3B1BA001A1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq
new file mode 100644
index 0000000..cc6024a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13789:1486 2:Y:0:GCCGTCGAAGGTACCA
+TTTTTCTCTCCTTCTCTTCTCCTTC
++
+1111111331111111331311111
+ at machine1:HiMom:abcdeACXX:1:1101:14791:1400 2:Y:0:GCCGTCGAAGGTACCA
+TCCTTTTTCTTTCCTTTTCTTTTTT
++
+111>131 at 1133313331313311A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_1.fastq
new file mode 100644
index 0000000..cbe0f84
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13789:1486 :Y:0:GCCGTCGAAGGTACCA
+GCCGTCGA
++
+11>1>>11
+ at machine1:HiMom:abcdeACXX:1:1101:14791:1400 :Y:0:GCCGTCGAAGGTACCA
+GCCGTCGA
++
+1>>1>>11
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_2.fastq
new file mode 100644
index 0000000..41e5d45
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCA.barcode_2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13789:1486 :Y:0:GCCGTCGAAGGTACCA
+TGGTACCC
++
+111>1B at 1
+ at machine1:HiMom:abcdeACXX:1:1101:14791:1400 :Y:0:GCCGTCGAAGGTACCA
+AGGTACCC
++
+111>1 at B1
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGAAGGTACCC.barcode_2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCCGTCGATGGTACCC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq
new file mode 100644
index 0000000..7f3aa14
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14517:1469 1:Y:0:GCCTAGCCCTTGAATC
+TTTCTTTTTTTTCCCTTTCCTCTTT
++
+>111133111>001111111B1111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq
new file mode 100644
index 0000000..92202f9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14517:1469 2:Y:0:GCCTAGCCCTTGAATC
+CCTCCTTTTTCTTCTTTTCCTTTTT
++
+11111113111133AA3A313331A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_1.fastq
new file mode 100644
index 0000000..51a8036
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14517:1469 :Y:0:GCCTAGCCCTTGAATC
+GCCTAGCC
++
+11>>11 at B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_2.fastq
new file mode 100644
index 0000000..1f60765
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GCCTAGCCCTTGAATC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14517:1469 :Y:0:GCCTAGCCCTTGAATC
+CTTGAATC
++
+11>111 at 3
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GCTATCCACCTCCCCC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq
new file mode 100644
index 0000000..e53dde6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14857:1542 1:Y:0:GTATAACAAATTCAAC
+TTTTCTCTTTTTGTTTTTTTCTTCT
++
+1>>>1 at 33B3111ABB11AA01333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq
new file mode 100644
index 0000000..4f99c09
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14857:1542 2:Y:0:GTATAACAAATTCAAC
+TCTTCCTTTTTTTTTTTTCTTTCTT
++
+111111133@@110000/AB1122A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_1.fastq
new file mode 100644
index 0000000..589ab7a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14857:1542 :Y:0:GTATAACAAATTCAAC
+GTATAACA
++
+1>1>1311
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_2.fastq
new file mode 100644
index 0000000..16cbb30
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACAAATTCAAC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:14857:1542 :Y:0:GTATAACAAATTCAAC
+TATTCAAC
++
+11>>>33@
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTATAACATATTCAAC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq
new file mode 100644
index 0000000..ab4fa8d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16578:1461 1:Y:0:GTCTGATGGAACTTCG
+TTTTTTCTCTTTTTTTTGTTTCTGC
++
+>1>111113@@31A0A0000B2B21
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq
new file mode 100644
index 0000000..f9aec28
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16578:1461 2:Y:0:GTCTGATGGAACTTCG
+CTTTTTCTTTCTTTTTCTCTCTTCT
++
+111111>133333311113A11313
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_1.fastq
new file mode 100644
index 0000000..1470702
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16578:1461 :Y:0:GTCTGATGGAACTTCG
+GTCTGATG
++
+11>>11B1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_2.fastq
new file mode 100644
index 0000000..9f34935
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGGAACTTCG.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16578:1461 :Y:0:GTCTGATGGAACTTCG
+GAACTTCG
++
+111>>3B1
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/GTCTGATGTCACTTCC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/NN.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/NN.1.fastq
new file mode 100644
index 0000000..db54d41
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/NN.1.fastq
@@ -0,0 +1,76 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13743:1511 1:Y:0:
+TCCTTCTTTTCCCTCCCCTTTCCTT
++
+>11>111@@@3111A111ABA1133
+ at machine1:HiMom:abcdeACXX:1:1101:13844:1536 1:Y:0:
+TTTCTTTTTTCTTTTCCCTTTATTT
++
+1111>3311111331311B111333
+ at machine1:HiMom:abcdeACXX:1:1101:14281:1532 1:Y:0:
+CTTTTTTCCTTTTTTTCTTTTTTCT
++
+1>>11111133 at 1A00013311A01
+ at machine1:HiMom:abcdeACXX:1:1101:14340:1451 1:Y:0:
+TTTTTTCCTTCTCCCCTTTTTCCTT
++
+>11111113311111111111013A
+ at machine1:HiMom:abcdeACXX:1:1101:14809:1476 1:Y:0:
+TTTTTCCCTTTCTCTTTTCTTTTCT
++
+>1>>111111113333313AAA131
+ at machine1:HiMom:abcdeACXX:1:1101:14852:1366 1:Y:0:
+TTCTCTCCCTCTTTTTTTCTTCTTT
++
+111>1311111113A1AA0133313
+ at machine1:HiMom:abcdeACXX:1:1101:14927:1516 1:Y:0:
+CTCCTTTTCTCTTTTCCCCCTGTGC
++
+11111 at 3131333313111111111
+ at machine1:HiMom:abcdeACXX:1:1101:14943:1353 1:Y:0:
+TTTTTTTTTCTTTTTTTTTTTTTTT
++
+1>1>111100 at 33A###########
+ at machine1:HiMom:abcdeACXX:1:1101:15334:1365 1:Y:0:
+TTTTTTTCTTCTCTTTCTTTTCTTT
++
+111>111113331333333B13133
+ at machine1:HiMom:abcdeACXX:1:1101:15424:1475 1:Y:0:
+CTTTTTTCTTTTTCTTTTTTTTTCT
++
+1>>11 at 1113311113311000001
+ at machine1:HiMom:abcdeACXX:1:1101:15736:1478 1:Y:0:
+CCTCTCTTTTTTCCTTTCCCTGCCT
++
+1111111 at 3B1111A33111A1001
+ at machine1:HiMom:abcdeACXX:1:1101:15785:1528 1:Y:0:
+CTTTTTTTTTTCTCTCTTTTTTTTT
++
+11>111>100001221B########
+ at machine1:HiMom:abcdeACXX:1:1101:15865:1540 1:Y:0:
+GCTTTCCTTGTTTTCTGTCCCCTTC
++
+11111113311BB13A33A111B10
+ at machine1:HiMom:abcdeACXX:1:1101:15987:1510 1:Y:0:
+CTTTTTTTTTTTCCCTTTTTACCTT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:15998:1432 1:Y:0:
+TTCTTCCTCTTCTTCTTCTTCCTTT
++
+111>131111113133133A31133
+ at machine1:HiMom:abcdeACXX:1:1101:16070:1386 1:Y:0:
+TTTTTTTTTTTTTTTTCCTTCCTTT
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:16085:1467 1:Y:0:
+TTTTTTCCTTTTCTTTTCCTCTTCT
++
+1>>11>113B31313A13131111A
+ at machine1:HiMom:abcdeACXX:1:1101:16098:1529 1:Y:0:
+TTTTTTTTTTCTCTCCCTTTCTCTT
++
+1>1>>11100012210001112222
+ at machine1:HiMom:abcdeACXX:1:1101:16530:1425 1:Y:0:
+TTTTTTTTTTTTTTCTTTTTTTTTT
++
+1111>>110000A############
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/NN.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/NN.2.fastq
new file mode 100644
index 0000000..f4d71f1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/NN.2.fastq
@@ -0,0 +1,76 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13743:1511 2:Y:0:
+CCCCCTTCCCTCTTTTTTCCTTCCC
++
+1111111111 at 11131100133100
+ at machine1:HiMom:abcdeACXX:1:1101:13844:1536 2:Y:0:
+TCTTCTTTTTTTTTTTTCTTTTCCT
++
+111113131111A############
+ at machine1:HiMom:abcdeACXX:1:1101:14281:1532 2:Y:0:
+TTTCTCTTTTTTTTTCTCCCTTCCT
++
+>111133331111000121001001
+ at machine1:HiMom:abcdeACXX:1:1101:14340:1451 2:Y:0:
+TCCCTTCCTCCCCTCCTTCTTTTTC
++
+1111111111111111111113110
+ at machine1:HiMom:abcdeACXX:1:1101:14809:1476 2:Y:0:
+TCTCTTTTTCTTTTTTCTCCTTTCT
++
+>111133111133111113111313
+ at machine1:HiMom:abcdeACXX:1:1101:14852:1366 2:Y:0:
+TCCTTTTTCTTTTCTTTTCTTTTCC
++
+1111131111331313313133131
+ at machine1:HiMom:abcdeACXX:1:1101:14927:1516 2:Y:0:
+TTCCTCCCCCTCCTCCCCCTCCCTC
++
+11111111>1111111100000A00
+ at machine1:HiMom:abcdeACXX:1:1101:14943:1353 2:Y:0:
+CTCCCTTTTTTTTTTCTTCCTCTCT
++
+1111111111110000112111101
+ at machine1:HiMom:abcdeACXX:1:1101:15334:1365 2:Y:0:
+TCTCTCTTTCTTCTCTTTTTTTTTT
++
+1111111333333313331110000
+ at machine1:HiMom:abcdeACXX:1:1101:15424:1475 2:Y:0:
+TTCCTTCTTTCCTTCTCTCTTTCTT
++
+1111131113313311131133333
+ at machine1:HiMom:abcdeACXX:1:1101:15736:1478 2:Y:0:
+CTCTTCCCTTTCCCCCTCTTCTTCT
++
+111>111111111111A11113A33
+ at machine1:HiMom:abcdeACXX:1:1101:15785:1528 2:Y:0:
+TCTTCTCTTTCTCTTTTTCTTTTCT
++
+1111131 at 3@3333331A1133131
+ at machine1:HiMom:abcdeACXX:1:1101:15865:1540 2:Y:0:
+CTTTTTTATTTTCCTTTTGCATCCT
++
+11111111333 at 31333B1133301
+ at machine1:HiMom:abcdeACXX:1:1101:15987:1510 2:Y:0:
+TTCCCCTTCCCTTCTCTTTTCTTCT
++
+111111>1111 at 1111333131333
+ at machine1:HiMom:abcdeACXX:1:1101:15998:1432 2:Y:0:
+CTTTTTTTCTTTTCTCCTCCTTTTT
++
+11111 at 111@3313A31A000131A
+ at machine1:HiMom:abcdeACXX:1:1101:16070:1386 2:Y:0:
+TTTTTTTTCTCTCTTTTTTTTTTTT
++
+11111111013311331A#######
+ at machine1:HiMom:abcdeACXX:1:1101:16085:1467 2:Y:0:
+TTTTTTTTTTTTCCTCTTTTTTTCC
++
+#########################
+ at machine1:HiMom:abcdeACXX:1:1101:16098:1529 2:Y:0:
+CCCTCTCCACTTTTCTTTCCTCCCT
++
+11111>1111111331333131110
+ at machine1:HiMom:abcdeACXX:1:1101:16530:1425 2:Y:0:
+TTCTTTCCCTTTTCTTTTCCTTCTC
++
+1111133111111313313133111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/NN.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/NN.barcode_1.fastq
new file mode 100644
index 0000000..95cf678
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/NN.barcode_1.fastq
@@ -0,0 +1,76 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13743:1511 :Y:0:
+ATTATCAA
++
+1>>1>B33
+ at machine1:HiMom:abcdeACXX:1:1101:13844:1536 :Y:0:
+TCCCCGTT
++
+>1111111
+ at machine1:HiMom:abcdeACXX:1:1101:14281:1532 :Y:0:
+CCTTCTTT
++
+111111B3
+ at machine1:HiMom:abcdeACXX:1:1101:14340:1451 :Y:0:
+TTCCTCCT
++
+11111111
+ at machine1:HiMom:abcdeACXX:1:1101:14809:1476 :Y:0:
+GCTATCCA
++
+1111>>13
+ at machine1:HiMom:abcdeACXX:1:1101:14852:1366 :Y:0:
+AGGTCGCA
++
+111>>1>1
+ at machine1:HiMom:abcdeACXX:1:1101:14927:1516 :Y:0:
+GTCTGATG
++
+1>>111 at 1
+ at machine1:HiMom:abcdeACXX:1:1101:14943:1353 :Y:0:
+CTCCCTCT
++
+11111>11
+ at machine1:HiMom:abcdeACXX:1:1101:15334:1365 :Y:0:
+TGTATCTC
++
+11111333
+ at machine1:HiMom:abcdeACXX:1:1101:15424:1475 :Y:0:
+CCTCTTCT
++
+11111 at 1B
+ at machine1:HiMom:abcdeACXX:1:1101:15736:1478 :Y:0:
+ATTGTCTG
++
+1>>1>BD1
+ at machine1:HiMom:abcdeACXX:1:1101:15785:1528 :Y:0:
+CCCGATTT
++
+11111111
+ at machine1:HiMom:abcdeACXX:1:1101:15865:1540 :Y:0:
+TTCCCCAG
++
+111>11>1
+ at machine1:HiMom:abcdeACXX:1:1101:15987:1510 :Y:0:
+CCTCTTTC
++
+1111>13B
+ at machine1:HiMom:abcdeACXX:1:1101:15998:1432 :Y:0:
+CATGTTCG
++
+>1>11 at 31
+ at machine1:HiMom:abcdeACXX:1:1101:16070:1386 :Y:0:
+TGTCGGTT
++
+>1>1111>
+ at machine1:HiMom:abcdeACXX:1:1101:16085:1467 :Y:0:
+ACCTACTG
++
+1>>111 at 1
+ at machine1:HiMom:abcdeACXX:1:1101:16098:1529 :Y:0:
+TTCTCATC
++
+11>>1331
+ at machine1:HiMom:abcdeACXX:1:1101:16530:1425 :Y:0:
+CCTATTCT
++
+>1111333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/NN.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/NN.barcode_2.fastq
new file mode 100644
index 0000000..242af75
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/NN.barcode_2.fastq
@@ -0,0 +1,76 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13743:1511 :Y:0:
+CACCATAC
++
+11>>111>
+ at machine1:HiMom:abcdeACXX:1:1101:13844:1536 :Y:0:
+CCAACTTC
++
+>111>B13
+ at machine1:HiMom:abcdeACXX:1:1101:14281:1532 :Y:0:
+TATCATTT
++
+111>13B3
+ at machine1:HiMom:abcdeACXX:1:1101:14340:1451 :Y:0:
+CACCATCC
++
+11>111B1
+ at machine1:HiMom:abcdeACXX:1:1101:14809:1476 :Y:0:
+CCTCCCCC
++
+11>11>11
+ at machine1:HiMom:abcdeACXX:1:1101:14852:1366 :Y:0:
+TTCCTTTC
++
+1>>>>B31
+ at machine1:HiMom:abcdeACXX:1:1101:14927:1516 :Y:0:
+TCACTTCC
++
+111>>1B1
+ at machine1:HiMom:abcdeACXX:1:1101:14943:1353 :Y:0:
+TCCTTCTT
++
+1111>111
+ at machine1:HiMom:abcdeACXX:1:1101:15334:1365 :Y:0:
+TTACTCTT
++
+11111131
+ at machine1:HiMom:abcdeACXX:1:1101:15424:1475 :Y:0:
+CTCGCTTT
++
+11111111
+ at machine1:HiMom:abcdeACXX:1:1101:15736:1478 :Y:0:
+GATTCACA
++
+11>>>313
+ at machine1:HiMom:abcdeACXX:1:1101:15785:1528 :Y:0:
+TCTCTCCC
++
+11>11111
+ at machine1:HiMom:abcdeACXX:1:1101:15865:1540 :Y:0:
+TGCTTTTA
++
+1>111 at 13
+ at machine1:HiMom:abcdeACXX:1:1101:15987:1510 :Y:0:
+TTCTGCTC
++
+11111131
+ at machine1:HiMom:abcdeACXX:1:1101:15998:1432 :Y:0:
+CGCCTTTT
++
+111111 at B
+ at machine1:HiMom:abcdeACXX:1:1101:16070:1386 :Y:0:
+TTTTGCTT
++
+11>>11 at 1
+ at machine1:HiMom:abcdeACXX:1:1101:16085:1467 :Y:0:
+CTTCCCTT
++
+111>1B@@
+ at machine1:HiMom:abcdeACXX:1:1101:16098:1529 :Y:0:
+TTCCTTCC
++
+11111311
+ at machine1:HiMom:abcdeACXX:1:1101:16530:1425 :Y:0:
+TCGTTTTC
++
+1111>1>@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq
new file mode 100644
index 0000000..ccf328e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13898:1519 1:Y:0:TACTTAGCGTCTGCAC
+CCTTCTCTACTTTTTTTTCTATTTT
++
+111>111B31 at 33311A0A1333BA
+ at machine1:HiMom:abcdeACXX:1:1101:14983:1536 1:Y:0:TACTTAGCGTCTGCAC
+CCTTCTTCTTGTTCCCTCGCCAGGC
++
+11>>1113 at B11133AA111A0000
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq
new file mode 100644
index 0000000..a7b0794
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13898:1519 2:Y:0:TACTTAGCGTCTGCAC
+TTTTTTCTTTTCTCTTCCTCTTTTC
++
+11>11111 at 3131A3A111A11313
+ at machine1:HiMom:abcdeACXX:1:1101:14983:1536 2:Y:0:TACTTAGCGTCTGCAC
+TCCTTATCCTTTTTACTGCCCTGTA
++
+1111>331@@331A11A311111B3
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_1.fastq
new file mode 100644
index 0000000..fcc123f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13898:1519 :Y:0:TACTTAGCGTCTGCAC
+TACTTAGC
++
+A3>AA55B
+ at machine1:HiMom:abcdeACXX:1:1101:14983:1536 :Y:0:TACTTAGCGTCTGCAC
+TACTTAGC
++
+A3AAAB5@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_2.fastq
new file mode 100644
index 0000000..dabd706
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TACTTAGCGTCTGCAC.barcode_2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13898:1519 :Y:0:TACTTAGCGTCTGCAC
+GTCTGCAC
++
+1>>>113B
+ at machine1:HiMom:abcdeACXX:1:1101:14983:1536 :Y:0:TACTTAGCGTCTGCAC
+GTCTGCAC
++
+1>>>1 at 3C
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TCCCCGTTCCAACTTC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq
new file mode 100644
index 0000000..1df1bc8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17106:1463 1:Y:0:TCCTTGGTGCTGCACT
+TTTCTTTTTTTTCTTTTCTCTTCCT
++
+11>113 at 1111>0A3A131333111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq
new file mode 100644
index 0000000..c900a46
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17106:1463 2:Y:0:TCCTTGGTGCTGCACT
+TTCATTTTCTTCTTTTTCTTCCTCT
++
+1111133331333131111331111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_1.fastq
new file mode 100644
index 0000000..cfa95e2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17106:1463 :Y:0:TCCTTGGTGCTGCACT
+TCCTTGGT
++
+1>>>A111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_2.fastq
new file mode 100644
index 0000000..db635c4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCCTTGGTGCTGCACT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17106:1463 :Y:0:TCCTTGGTGCTGCACT
+GCTGCACT
++
+11>111 at 1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq
new file mode 100644
index 0000000..5414bf7
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15287:1512 1:Y:0:TCGCCTTGCCAACGCT
+CCTCCTCCTTTTATTTCTTTTCCCT
++
+111111>1B131333333331A111
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq
new file mode 100644
index 0000000..a114968
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15287:1512 2:Y:0:TCGCCTTGCCAACGCT
+CTTTTTTCTTTTTTTCGTCTTTCTT
++
+1111111113 at 111000000A2221
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_1.fastq
new file mode 100644
index 0000000..4760331
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15287:1512 :Y:0:TCGCCTTGCCAACGCT
+TCGCCTTG
++
+>A11>>A1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_2.fastq
new file mode 100644
index 0000000..182b659
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TCGCCTTGCCAACGCT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15287:1512 :Y:0:TCGCCTTGCCAACGCT
+CCAACGCT
++
+1>11>1>1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq
new file mode 100644
index 0000000..a8353bd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13416:1538 1:Y:0:TGCAAGTACGAACTTC
+TTTTGTCTATCACTTTGTTTATTCA
++
+>11>11333333311A13113BBA3
+ at machine1:HiMom:abcdeACXX:1:1101:16315:1534 1:Y:0:TGCAAGTACGAACTTC
+TTTCTGTTTTATTCTTTTCTTATGT
++
+>1>113333B333333AB31A331D
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq
new file mode 100644
index 0000000..eb6ca66
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13416:1538 2:Y:0:TGCAAGTACGAACTTC
+TTTTCTTCCCTTTCTTTCTCTGTTT
++
+111111331111B133A33333D33
+ at machine1:HiMom:abcdeACXX:1:1101:16315:1534 2:Y:0:TGCAAGTACGAACTTC
+TTTTTCTCCTCCTTTTTTTGTTCCT
++
+111111131 at 11A1A111000B333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_1.fastq
new file mode 100644
index 0000000..7e9bd93
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_1.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13416:1538 :Y:0:TGCAAGTACGAACTTC
+TGCAAGTA
++
+>1>111B3
+ at machine1:HiMom:abcdeACXX:1:1101:16315:1534 :Y:0:TGCAAGTACGAACTTC
+TGCAAGTA
++
+>1>111B3
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_2.fastq
new file mode 100644
index 0000000..ffbafdd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCAAGTACGAACTTC.barcode_2.fastq
@@ -0,0 +1,8 @@
+ at machine1:HiMom:abcdeACXX:1:1101:13416:1538 :Y:0:TGCAAGTACGAACTTC
+CGAACTTC
++
+>111>1 at B
+ at machine1:HiMom:abcdeACXX:1:1101:16315:1534 :Y:0:TGCAAGTACGAACTTC
+CGAACTTC
++
+1111>>@@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq
new file mode 100644
index 0000000..e1fa520
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15028:1491 1:Y:0:TGCTCGACTTCACAGA
+TTTTTTTTTTTTTTTTTTTTTTTTT
++
+>1>>111>>000/A###########
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq
new file mode 100644
index 0000000..5508876
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15028:1491 2:Y:0:TGCTCGACTTCACAGA
+TTCTTTTTTTTCTTTTTTTTTCTCT
++
+1111131111001331100//0A22
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_1.fastq
new file mode 100644
index 0000000..d02021c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15028:1491 :Y:0:TGCTCGACTTCACAGA
+TGCTCGAC
++
+>11>>11>
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_2.fastq
new file mode 100644
index 0000000..3d779e4
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGA.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15028:1491 :Y:0:TGCTCGACTTCACAGA
+TTCACAGT
++
+1>111311
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGCTCGACTTCACAGT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq
new file mode 100644
index 0000000..b68348b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15439:1540 1:Y:0:TGTAATCACCTCTAAC
+CTTCTTTCATATTCTTAAATTTGCA
++
+1>>11B333B333ABA331ABA333
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq
new file mode 100644
index 0000000..67f2373
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15439:1540 2:Y:0:TGTAATCACCTCTAAC
+TTTTGTTTGAGTGTTATAGAAACAG
++
+111>11BB111113B3333313110
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_1.fastq
new file mode 100644
index 0000000..98757e9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15439:1540 :Y:0:TGTAATCACCTCTAAC
+TGTAATCA
++
+A?A3?FF5
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_2.fastq
new file mode 100644
index 0000000..41aed6f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTAATCACCTCTAAC.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:15439:1540 :Y:0:TGTAATCACCTCTAAC
+CCTCTAAC
++
+AAAAA45D
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTATCTCTTACTCTT.barcode_2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TGTCGGTTTTTTGCTT.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq
new file mode 100644
index 0000000..cef18f7
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16256:1385 1:Y:0:TGTTCCGAAACCTCTT
+TTTCTCTTTTTTTTTCCTTTTTTTT
++
+>>11>3 at 3@@11AAA01A22AA0/A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq
new file mode 100644
index 0000000..6ad1938
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16256:1385 2:Y:0:TGTTCCGAAACCTCTT
+TCTTTTTCTTTTTTCTTTTCTCTTT
++
+11111111 at 33111113A13A3A33
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_1.fastq
new file mode 100644
index 0000000..3df350f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16256:1385 :Y:0:TGTTCCGAAACCTCTT
+TGTTCCGA
++
+>1>>>B11
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_2.fastq
new file mode 100644
index 0000000..be1b66f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TGTTCCGAAACCTCTT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16256:1385 :Y:0:TGTTCCGAAACCTCTT
+AACCTCTT
++
+11>>>>B1
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq
new file mode 100644
index 0000000..7ae78c5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17703:1479 1:Y:0:TTAATCAGCTGGTATT
+TTTTTTTTTTCCTCCTTTTTTTCCT
++
+111111110001110012A1//01A
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq
new file mode 100644
index 0000000..ed402db
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17703:1479 2:Y:0:TTAATCAGCTGGTATT
+TCTTTTTTCCTTCTCTTTTTTCTTT
++
+11111 at 1111331113331100133
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_1.fastq
new file mode 100644
index 0000000..a4181e1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17703:1479 :Y:0:TTAATCAGCTGGTATT
+TTAATCAG
++
+1>11>D31
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_2.fastq
new file mode 100644
index 0000000..c768204
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTAATCAGCTGGTATT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:17703:1479 :Y:0:TTAATCAGCTGGTATT
+CTGGTATT
++
+1111>1B@
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq
new file mode 100644
index 0000000..38b8cd1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16819:1536 1:Y:0:TTATATCTTCATGTCT
+TTTTTTTGTTTTGTCCTTTCTTCCT
++
+>1>111>1111>0A3AA33AAB31B
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq
new file mode 100644
index 0000000..2e704da
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16819:1536 2:Y:0:TTATATCTTCATGTCT
+TTTTTTTTTCATCCCTCTCTTCCCT
++
+1>1>>>>>>0333A010A0A2A101
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_1.fastq
new file mode 100644
index 0000000..afe05c5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16819:1536 :Y:0:TTATATCTTCATGTCT
+TTATATCT
++
+>A1>1BDD
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_2.fastq
new file mode 100644
index 0000000..489c307
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTATATCTTCATGTCT.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16819:1536 :Y:0:TTATATCTTCATGTCT
+TCATGTCT
++
+>>1>1BB3
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCCCAGTGCTTTTA.barcode_2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCCTCCTCACCATCC.barcode_2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.2.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_1.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_1.fastq
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_2.fastq
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/25T8B8B25T/fastq/TTCTCATCTTCCTTCC.barcode_2.fastq
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq
new file mode 100644
index 0000000..ed584bb
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16891:1545 1:Y:0:TTGAATAGATATCCGA
+CTTTTGCCTGTGTTTTTTCTCTCAT
++
+1>1>>11111B1BABA11AAA3A13
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq
new file mode 100644
index 0000000..d6ceb93
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16891:1545 2:Y:0:TTGAATAGATATCCGA
+CTTTTTTCTGACTTTCTTCTAGACT
++
+11>1>1>>13311A3AB3AB33313
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_1.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_1.fastq
new file mode 100644
index 0000000..05746c3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_1.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16891:1545 :Y:0:TTGAATAGATATCCGA
+TTGAATAG
++
+>A333B54
diff --git a/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_2.fastq b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_2.fastq
new file mode 100644
index 0000000..80faae5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/fastq/TTGAATAGATATCCGA.barcode_2.fastq
@@ -0,0 +1,4 @@
+ at machine1:HiMom:abcdeACXX:1:1101:16891:1545 :Y:0:TTGAATAGATATCCGA
+ATATCCGA
++
+1>>AAD11
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/fastq/barcode_double.params b/testdata/picard/illumina/25T8B8B25T/fastq/barcode_double.params
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/fastq/barcode_double.params
rename to testdata/picard/illumina/25T8B8B25T/fastq/barcode_double.params
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/library.params b/testdata/picard/illumina/25T8B8B25T/library.params
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/library.params
rename to testdata/picard/illumina/25T8B8B25T/library.params
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/AACTTGAC.sam b/testdata/picard/illumina/25T8B8B25T/sams/AACTTGAC.sam
new file mode 100644
index 0000000..1556879
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/AACTTGAC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AACTTGACGCTCTCTT LB:LN_AACTTGACGCTCTCTT PL:illumina PU:HiMom.1.AACTTGAC-GCTCTCTT CN:BI
+HiMom:1:1101:14221:1451 589 * 0 0 * * 0 0 TTTTTTTTTCTTTTACTTTTTTTTT >1>1>111>0@@31311B21AAA## RG:Z:HiMom.1
+HiMom:1:1101:14221:1451 653 * 0 0 * * 0 0 TTTTTTTTTCTTTTTTTTCCTTTTT 1111111>>0 at 331B00/011221A RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/AAGACACT.sam b/testdata/picard/illumina/25T8B8B25T/sams/AAGACACT.sam
new file mode 100644
index 0000000..1c0f8ab
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/AAGACACT.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AAGACACTAGTCTCCT LB:LN_AAGACACTAGTCTCCT PL:illumina PU:HiMom.1.AAGACACT-AGTCTCCT CN:BI
+HiMom:1:1101:15405:1531 589 * 0 0 * * 0 0 TTTCCTTCTTTTTTTTTTTTTTTAT 11>11331 at 13111000A####### RG:Z:HiMom.1
+HiMom:1:1101:15405:1531 653 * 0 0 * * 0 0 TTCTTTTTTCTTTTTCTTTGTTCTT 11111@@11>1331B11333B03A3 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam b/testdata/picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam
new file mode 100644
index 0000000..dc8c778
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ACAGGTAT.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACAGGTATCACTTCAT LB:LN_ACAGGTATCACTTCAT PL:illumina PU:HiMom.1.ACAGGTAT-CACTTCAT CN:BI
+HiMom:1:1101:14342:1520 589 * 0 0 * * 0 0 CTTTCTTTTCTCCTTTTTTTCTTTC 11>>1@@@1313111311AA0BAAA RG:Z:HiMom.1
+HiMom:1:1101:14342:1520 653 * 0 0 * * 0 0 TCGTGTTTTTTCTTTTTGCTTTCCC 111>1>>>11111331A013A3111 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam b/testdata/picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam
new file mode 100644
index 0000000..465a803
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ACAGTTGA.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACAGTTGAATCTTCTC LB:LN_ACAGTTGAATCTTCTC PL:illumina PU:HiMom.1.ACAGTTGA-ATCTTCTC CN:BI
+HiMom:1:1101:14133:1507 589 * 0 0 * * 0 0 TCCTCTTTGCTTTTTGCTATCACTC 111>1B1 at 313131111A33A33D1 RG:Z:HiMom.1
+HiMom:1:1101:14133:1507 653 * 0 0 * * 0 0 TCCTTTATTATCTTTGTTCCTTTTT 111>>313 at 333AAA3A1333331A RG:Z:HiMom.1
+HiMom:1:1101:14753:1450 589 * 0 0 * * 0 0 CTTTTTCCTCTTTTTTTCTTTTGTT 1>>>>@1131B1311100BA31100 RG:Z:HiMom.1
+HiMom:1:1101:14753:1450 653 * 0 0 * * 0 0 TCCCTTTTTTTTCTTTTCTCTTTTT 1111>@11@>1001331313331AA RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ACCAACTG.sam b/testdata/picard/illumina/25T8B8B25T/sams/ACCAACTG.sam
new file mode 100644
index 0000000..ffdcfc0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ACCAACTG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACCAACTGCATCACTT LB:LN_ACCAACTGCATCACTT PL:illumina PU:HiMom.1.ACCAACTG-CATCACTT CN:BI
+HiMom:1:1101:15221:1507 589 * 0 0 * * 0 0 CTTTTTTCTTTCTTTGTTTTTGTAT 1>1>1111@@33A3B3311000033 RG:Z:HiMom.1
+HiMom:1:1101:15221:1507 653 * 0 0 * * 0 0 CTCTTTTTTTTCTCTCTTCTTTCCT 111>13111>0013A11313B321A RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ACCTACTG.sam b/testdata/picard/illumina/25T8B8B25T/sams/ACCTACTG.sam
new file mode 100644
index 0000000..41a89b3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ACCTACTG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACCTACTGCTTCCCTT LB:LN_ACCTACTGCTTCCCTT PL:illumina PU:HiMom.1.ACCTACTG-CTTCCCTT CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam b/testdata/picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam
new file mode 100644
index 0000000..1e16dbc
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ACTAAGAC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ACTAAGACGTCCTCAT LB:LN_ACTAAGACGTCCTCAT PL:illumina PU:HiMom.1.ACTAAGAC-GTCCTCAT CN:BI
+HiMom:1:1101:17324:1480 589 * 0 0 * * 0 0 TCTCTGTGTTTTTTTTTTTTTTACT >111>333 at 11111A000///A/1A RG:Z:HiMom.1
+HiMom:1:1101:17324:1480 653 * 0 0 * * 0 0 CTTTTTTTTCTTCTCTTTCCTTCCT 1>>1111>00 at 333133331AA101 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam b/testdata/picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam
new file mode 100644
index 0000000..581566a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/AGGTCGCA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGGTCGCATTCCTTTC LB:LN_AGGTCGCATTCCTTTC PL:illumina PU:HiMom.1.AGGTCGCA-TTCCTTTC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam b/testdata/picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam
new file mode 100644
index 0000000..2f21d1f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/AGGTGCGA.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGGTGCGAGACATTAA LB:LN_AGGTGCGAGACATTAA PL:illumina PU:HiMom.1.AGGTGCGA-GACATTAA CN:BI
+HiMom:1:1101:15634:1526 589 * 0 0 * * 0 0 TTTTTTTTTTCTTTGGTTATTTTAT 1>>>>>AA00>11B100A1BBAB2A RG:Z:HiMom.1
+HiMom:1:1101:15634:1526 653 * 0 0 * * 0 0 CCTCTCTTCTTTTTTTCTCCTTTTT 111>1>131 at 131110A1B1ABBA1 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/AGGTTATC.sam b/testdata/picard/illumina/25T8B8B25T/sams/AGGTTATC.sam
new file mode 100644
index 0000000..19e26d9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/AGGTTATC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGGTTATCTTAGCCAG LB:LN_AGGTTATCTTAGCCAG PL:illumina PU:HiMom.1.AGGTTATC-TTAGCCAG CN:BI
+HiMom:1:1101:17862:1503 589 * 0 0 * * 0 0 TTTTTTTCCTACTTTGCTTTAGTTT >1>1>1>1133113A11A1A1133A RG:Z:HiMom.1
+HiMom:1:1101:17862:1503 653 * 0 0 * * 0 0 TCTTCCCCTTCTTTATTTATTTGCT 1>1111111>1 at AA3A3B33AA333 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam b/testdata/picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam
new file mode 100644
index 0000000..16e3b4d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/AGTTGCTT.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_AGTTGCTTTGACTTGG LB:LN_AGTTGCTTTGACTTGG PL:illumina PU:HiMom.1.AGTTGCTT-TGACTTGG CN:BI
+HiMom:1:1101:14369:1492 589 * 0 0 * * 0 0 TTTCTTCTTTCTTTTTGTAAAGTTT 1>>11333 at B3BB31111333333B RG:Z:HiMom.1
+HiMom:1:1101:14369:1492 653 * 0 0 * * 0 0 TCCTTCTTTTTCTCTTTTTTTTCTT 1>11>@1131111AAAAA1100011 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam b/testdata/picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam
new file mode 100644
index 0000000..725c111
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ATAGCGTC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ATAGCGTCTTGGTCTG LB:LN_ATAGCGTCTTGGTCTG PL:illumina PU:HiMom.1.ATAGCGTC-TTGGTCTG CN:BI
+HiMom:1:1101:17049:1423 589 * 0 0 * * 0 0 CTCTTTTCTTTCTTTCTCTTCCTCT 1>111 at 13@3333A33A3331111A RG:Z:HiMom.1
+HiMom:1:1101:17049:1423 653 * 0 0 * * 0 0 TTTTCTCCTCCTCTTCCTCTTTTTT 1111113111111111111113110 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ATTATCAA.sam b/testdata/picard/illumina/25T8B8B25T/sams/ATTATCAA.sam
new file mode 100644
index 0000000..97766f5
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ATTATCAA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ATTATCAACACCATAC LB:LN_ATTATCAACACCATAC PL:illumina PU:HiMom.1.ATTATCAA-CACCATAC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam b/testdata/picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam
new file mode 100644
index 0000000..d4382fd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/ATTGTCTG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_ATTGTCTGGATTCACA LB:LN_ATTGTCTGGATTCACA PL:illumina PU:HiMom.1.ATTGTCTG-GATTCACA CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CAATAGTC.sam b/testdata/picard/illumina/25T8B8B25T/sams/CAATAGTC.sam
new file mode 100644
index 0000000..e8c457c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CAATAGTC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAATAGTCCGACTCTC LB:LN_CAATAGTCCGACTCTC PL:illumina PU:HiMom.1.CAATAGTC-CGACTCTC CN:BI
+HiMom:1:1101:15479:1337 589 * 0 0 * * 0 0 CTCTCTTTTTTTTCTTTTTTATTCT 1111113311110013311001222 RG:Z:HiMom.1
+HiMom:1:1101:15479:1337 653 * 0 0 * * 0 0 TTTTCCTTCCTTTCTCTTCCCTCCT 111111 at 311133133331111111 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam b/testdata/picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam
new file mode 100644
index 0000000..18b177a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CAGCAAGG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAGCAAGGGCGATATT LB:LN_CAGCAAGGGCGATATT PL:illumina PU:HiMom.1.CAGCAAGG-GCGATATT CN:BI
+HiMom:1:1101:17475:1506 589 * 0 0 * * 0 0 TCTTTTTTTTTCTCTCGTGTGTTGG >111>B11>0>013310A0A0BB## RG:Z:HiMom.1
+HiMom:1:1101:17475:1506 653 * 0 0 * * 0 0 CCTTTTTCTTTTCTCTCCTCTTTCC 11111111 at 33131331111A1331 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam b/testdata/picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam
new file mode 100644
index 0000000..b053fdd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CAGCGGTA.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CAGCGGTAAGTACTGC LB:LN_CAGCGGTAAGTACTGC PL:illumina PU:HiMom.1.CAGCGGTA-AGTACTGC CN:BI
+HiMom:1:1101:13678:1483 589 * 0 0 * * 0 0 TCTTTTCTTTTTTTTTTTCTTTTTT >1>>>131331111000A01AB### RG:Z:HiMom.1
+HiMom:1:1101:13678:1483 653 * 0 0 * * 0 0 TTTTTTTTCTTTCCTCTCTTTTTTT 11111111013331A########## RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CATGCTTA.sam b/testdata/picard/illumina/25T8B8B25T/sams/CATGCTTA.sam
new file mode 100644
index 0000000..859b812
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CATGCTTA.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CATGCTTATAGCATTT LB:LN_CATGCTTATAGCATTT PL:illumina PU:HiMom.1.CATGCTTA-TAGCATTT CN:BI
+HiMom:1:1101:13947:1464 589 * 0 0 * * 0 0 CTCCTTTTCTTCTTCTTCTCTTTTT 1>11113 at 313331331331A3311 RG:Z:HiMom.1
+HiMom:1:1101:13947:1464 653 * 0 0 * * 0 0 TTTTTTTTTCCCTCCCCTTTCCCTT 1111111100111000000111111 RG:Z:HiMom.1
+HiMom:1:1101:17987:1524 589 * 0 0 * * 0 0 CCTCTTTTTCTGTTTTTTTTGCTGG 111>11 at 111133331110001B11 RG:Z:HiMom.1
+HiMom:1:1101:17987:1524 653 * 0 0 * * 0 0 TCTTCTTTTCTTTCTTCTTTATTTG 111>13131313A3A33A1A33A33 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CATGCTTT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CATGCTTT.sam
new file mode 100644
index 0000000..c2f9148
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CATGCTTT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CATGCTTTTAGCATTG LB:LN_CATGCTTTTAGCATTG PL:illumina PU:HiMom.1.CATGCTTT-TAGCATTG CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CATGTTCG.sam b/testdata/picard/illumina/25T8B8B25T/sams/CATGTTCG.sam
new file mode 100644
index 0000000..a936ac0
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CATGTTCG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CATGTTCGCGCCTTTT LB:LN_CATGTTCGCGCCTTTT PL:illumina PU:HiMom.1.CATGTTCG-CGCCTTTT CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam
new file mode 100644
index 0000000..c1c511b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCAGAGCT.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCAGAGCTCAACTGAT LB:LN_CCAGAGCTCAACTGAT PL:illumina PU:HiMom.1.CCAGAGCT-CAACTGAT CN:BI
+HiMom:1:1101:16357:1518 589 * 0 0 * * 0 0 GTCTTCTGCTTCGCTCACGCTGGGT 1>>>>3 at 113B311AA1111A0000 RG:Z:HiMom.1
+HiMom:1:1101:16357:1518 653 * 0 0 * * 0 0 TCCTTCTCTCTTTTTTTTTAATTCT >1111111B at BB311AA0001ABAB RG:Z:HiMom.1
+HiMom:1:1101:17387:1497 589 * 0 0 * * 0 0 CCCCTTTTTTGTTGTGCTTTAGCCT 111>>111111111A01B3311111 RG:Z:HiMom.1
+HiMom:1:1101:17387:1497 653 * 0 0 * * 0 0 CTTTTTGTCTTTCTTCCCCCTGCTT 111>11113@@@3333111AA0011 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCCGATTT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCCGATTT.sam
new file mode 100644
index 0000000..7d96b43
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCCGATTT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCCGATTTTCTCTCCC LB:LN_CCCGATTTTCTCTCCC PL:illumina PU:HiMom.1.CCCGATTT-TCTCTCCC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCTATGCC.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCTATGCC.sam
new file mode 100644
index 0000000..c15d757
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCTATGCC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCTATGCCAATTGGCC LB:LN_CCTATGCCAATTGGCC PL:illumina PU:HiMom.1.CCTATGCC-AATTGGCC CN:BI
+HiMom:1:1101:17516:1540 589 * 0 0 * * 0 0 CTTTCGTTTTTCTTTCCTATACATC 1>>1111B>1>1B3331B3A11333 RG:Z:HiMom.1
+HiMom:1:1101:17516:1540 653 * 0 0 * * 0 0 TTCTTTTTTTTCCCTTTCCCTTTTC 1>111 at B@11>0111B11AA1A112 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCTATTCT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCTATTCT.sam
new file mode 100644
index 0000000..66babdc
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCTATTCT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCTATTCTTCGTTTTC LB:LN_CCTATTCTTCGTTTTC PL:illumina PU:HiMom.1.CCTATTCT-TCGTTTTC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam
new file mode 100644
index 0000000..1dddfef
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCTCTTCT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCTCTTCTCTCGCTTT LB:LN_CCTCTTCTCTCGCTTT PL:illumina PU:HiMom.1.CCTCTTCT-CTCGCTTT CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam
new file mode 100644
index 0000000..26aaf96
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCTCTTTC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCTCTTTCTTCTGCTC LB:LN_CCTCTTTCTTCTGCTC PL:illumina PU:HiMom.1.CCTCTTTC-TTCTGCTC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam
new file mode 100644
index 0000000..59ccfc9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCTTCGCA.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCTTCGCAGAATCGAC LB:LN_CCTTCGCAGAATCGAC PL:illumina PU:HiMom.1.CCTTCGCA-GAATCGAC CN:BI
+HiMom:1:1101:15248:1531 589 * 0 0 * * 0 0 CCCTACCTGTCTGCTATCCATCCCC 111>11111B1311313A13B111A RG:Z:HiMom.1
+HiMom:1:1101:15248:1531 653 * 0 0 * * 0 0 TTCTCCTTCTATTTCTCTTGTCTTC 11111@@B@@3333333331A1333 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam
new file mode 100644
index 0000000..12ebcae
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CCTTCTTT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CCTTCTTTTATCATTT LB:LN_CCTTCTTTTATCATTT PL:illumina PU:HiMom.1.CCTTCTTT-TATCATTT CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CGCTATGT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CGCTATGT.sam
new file mode 100644
index 0000000..f533905
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CGCTATGT.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CGCTATGTTTCACCTT LB:LN_CGCTATGTTTCACCTT PL:illumina PU:HiMom.1.CGCTATGT-TTCACCTT CN:BI
+HiMom:1:1101:17615:1538 589 * 0 0 * * 0 0 CTTTTTTTTTTTTCCTTTTTTTCTT >>>>11110000A011AA1A//0A1 RG:Z:HiMom.1
+HiMom:1:1101:17615:1538 653 * 0 0 * * 0 0 TTCTTTCCTTTTCTTTTTTCTGTTT 11>1133133 at 131331111A3333 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CTACCAGG.sam b/testdata/picard/illumina/25T8B8B25T/sams/CTACCAGG.sam
new file mode 100644
index 0000000..69a8f31
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CTACCAGG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTACCAGGTTCTTGGC LB:LN_CTACCAGGTTCTTGGC PL:illumina PU:HiMom.1.CTACCAGG-TTCTTGGC CN:BI
+HiMom:1:1101:14790:1540 589 * 0 0 * * 0 0 TTCTCTCTTTTCTCTTTCTTGTTGT A>1>13113313A3AAAAAB11B1B RG:Z:HiMom.1
+HiMom:1:1101:14790:1540 653 * 0 0 * * 0 0 CTCTGTATTTTCCTTTTTCTTCTTT 11111 at 33@@33133A1BB1A3A1B RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam b/testdata/picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam
new file mode 100644
index 0000000..f6ea6a8
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CTCCCTCT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTCCCTCTTCCTTCTT LB:LN_CTCCCTCTTCCTTCTT PL:illumina PU:HiMom.1.CTCCCTCT-TCCTTCTT CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/CTGTAATC.sam b/testdata/picard/illumina/25T8B8B25T/sams/CTGTAATC.sam
new file mode 100644
index 0000000..24e6293
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/CTGTAATC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_CTGTAATCCTATTAGC LB:LN_CTGTAATCCTATTAGC PL:illumina PU:HiMom.1.CTGTAATC-CTATTAGC CN:BI
+HiMom:1:1101:15029:1349 589 * 0 0 * * 0 0 CTTCTCCTTTTCTTTTTTTTTTTTT 1>11111113 at 313A########## RG:Z:HiMom.1
+HiMom:1:1101:15029:1349 653 * 0 0 * * 0 0 TTTCTTTTTCTTTTTTCTTTCTTTT 1111>3 at 111133111113333331 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/GACCAGGA.sam b/testdata/picard/illumina/25T8B8B25T/sams/GACCAGGA.sam
new file mode 100644
index 0000000..7119fc3
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/GACCAGGA.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GACCAGGACCATCACA LB:LN_GACCAGGACCATCACA PL:illumina PU:HiMom.1.GACCAGGA-CCATCACA CN:BI
+HiMom:1:1101:16241:1505 589 * 0 0 * * 0 0 CTTCTTTTTTTTCTTCCCTTTGCTC 11>1113 at 11100A331011A1111 RG:Z:HiMom.1
+HiMom:1:1101:16241:1505 653 * 0 0 * * 0 0 CTGTGGTTTTTTTCTTGTCTTTTCC 111>11111111001A111333AA1 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam b/testdata/picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam
new file mode 100644
index 0000000..ca3948b
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/GCCGTCGA.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GCCGTCGATGGTACCC LB:LN_GCCGTCGATGGTACCC PL:illumina PU:HiMom.1.GCCGTCGA-TGGTACCC CN:BI
+HiMom:1:1101:13789:1486 589 * 0 0 * * 0 0 CTTTTTTCTTCCTCTTTCTTTTTCT 1111111113311AAB33333A10A RG:Z:HiMom.1
+HiMom:1:1101:13789:1486 653 * 0 0 * * 0 0 TTTTTCTCTCCTTCTCTTCTCCTTC 1111111331111111331311111 RG:Z:HiMom.1
+HiMom:1:1101:14791:1400 589 * 0 0 * * 0 0 TTTTTTTCTTTTTCTTTTTTTCTTT >>1>>111 at 3@@11A3B1BA001A1 RG:Z:HiMom.1
+HiMom:1:1101:14791:1400 653 * 0 0 * * 0 0 TCCTTTTTCTTTCCTTTTCTTTTTT 111>131 at 1133313331313311A RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam b/testdata/picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam
new file mode 100644
index 0000000..6c6165e
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/GCCTAGCC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GCCTAGCCCTTGAATC LB:LN_GCCTAGCCCTTGAATC PL:illumina PU:HiMom.1.GCCTAGCC-CTTGAATC CN:BI
+HiMom:1:1101:14517:1469 589 * 0 0 * * 0 0 TTTCTTTTTTTTCCCTTTCCTCTTT >111133111>001111111B1111 RG:Z:HiMom.1
+HiMom:1:1101:14517:1469 653 * 0 0 * * 0 0 CCTCCTTTTTCTTCTTTTCCTTTTT 11111113111133AA3A313331A RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/GCTATCCA.sam b/testdata/picard/illumina/25T8B8B25T/sams/GCTATCCA.sam
new file mode 100644
index 0000000..9b66c07
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/GCTATCCA.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GCTATCCACCTCCCCC LB:LN_GCTATCCACCTCCCCC PL:illumina PU:HiMom.1.GCTATCCA-CCTCCCCC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/GTATAACA.sam b/testdata/picard/illumina/25T8B8B25T/sams/GTATAACA.sam
new file mode 100644
index 0000000..d1afe76
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/GTATAACA.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GTATAACATATTCAAC LB:LN_GTATAACATATTCAAC PL:illumina PU:HiMom.1.GTATAACA-TATTCAAC CN:BI
+HiMom:1:1101:14857:1542 589 * 0 0 * * 0 0 TTTTCTCTTTTTGTTTTTTTCTTCT 1>>>1 at 33B3111ABB11AA01333 RG:Z:HiMom.1
+HiMom:1:1101:14857:1542 653 * 0 0 * * 0 0 TCTTCCTTTTTTTTTTTTCTTTCTT 111111133@@110000/AB1122A RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/GTCTGATG.sam b/testdata/picard/illumina/25T8B8B25T/sams/GTCTGATG.sam
new file mode 100644
index 0000000..ea4a566
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/GTCTGATG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_GTCTGATGTCACTTCC LB:LN_GTCTGATGTCACTTCC PL:illumina PU:HiMom.1.GTCTGATG-TCACTTCC CN:BI
+HiMom:1:1101:16578:1461 589 * 0 0 * * 0 0 TTTTTTCTCTTTTTTTTGTTTCTGC >1>111113@@31A0A0000B2B21 RG:Z:HiMom.1
+HiMom:1:1101:16578:1461 653 * 0 0 * * 0 0 CTTTTTCTTTCTTTTTCTCTCTTCT 111111>133333311113A11313 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/N.sam b/testdata/picard/illumina/25T8B8B25T/sams/N.sam
new file mode 100644
index 0000000..781baa9
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/N.sam
@@ -0,0 +1,40 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_N LB:LN_N PL:illumina PU:HiMom.1.N-N CN:BI
+HiMom:1:1101:13743:1511 589 * 0 0 * * 0 0 TCCTTCTTTTCCCTCCCCTTTCCTT >11>111@@@3111A111ABA1133 BC:Z:ATTATCAA-CACCATAC RG:Z:HiMom.1
+HiMom:1:1101:13743:1511 653 * 0 0 * * 0 0 CCCCCTTCCCTCTTTTTTCCTTCCC 1111111111 at 11131100133100 BC:Z:ATTATCAA-CACCATAC RG:Z:HiMom.1
+HiMom:1:1101:13844:1536 589 * 0 0 * * 0 0 TTTCTTTTTTCTTTTCCCTTTATTT 1111>3311111331311B111333 BC:Z:TCCCCGTT-CCAACTTC RG:Z:HiMom.1
+HiMom:1:1101:13844:1536 653 * 0 0 * * 0 0 TCTTCTTTTTTTTTTTTCTTTTCCT 111113131111A############ BC:Z:TCCCCGTT-CCAACTTC RG:Z:HiMom.1
+HiMom:1:1101:14281:1532 589 * 0 0 * * 0 0 CTTTTTTCCTTTTTTTCTTTTTTCT 1>>11111133 at 1A00013311A01 BC:Z:CCTTCTTT-TATCATTT RG:Z:HiMom.1
+HiMom:1:1101:14281:1532 653 * 0 0 * * 0 0 TTTCTCTTTTTTTTTCTCCCTTCCT >111133331111000121001001 BC:Z:CCTTCTTT-TATCATTT RG:Z:HiMom.1
+HiMom:1:1101:14340:1451 589 * 0 0 * * 0 0 TTTTTTCCTTCTCCCCTTTTTCCTT >11111113311111111111013A BC:Z:TTCCTCCT-CACCATCC RG:Z:HiMom.1
+HiMom:1:1101:14340:1451 653 * 0 0 * * 0 0 TCCCTTCCTCCCCTCCTTCTTTTTC 1111111111111111111113110 BC:Z:TTCCTCCT-CACCATCC RG:Z:HiMom.1
+HiMom:1:1101:14809:1476 589 * 0 0 * * 0 0 TTTTTCCCTTTCTCTTTTCTTTTCT >1>>111111113333313AAA131 BC:Z:GCTATCCA-CCTCCCCC RG:Z:HiMom.1
+HiMom:1:1101:14809:1476 653 * 0 0 * * 0 0 TCTCTTTTTCTTTTTTCTCCTTTCT >111133111133111113111313 BC:Z:GCTATCCA-CCTCCCCC RG:Z:HiMom.1
+HiMom:1:1101:14852:1366 589 * 0 0 * * 0 0 TTCTCTCCCTCTTTTTTTCTTCTTT 111>1311111113A1AA0133313 BC:Z:AGGTCGCA-TTCCTTTC RG:Z:HiMom.1
+HiMom:1:1101:14852:1366 653 * 0 0 * * 0 0 TCCTTTTTCTTTTCTTTTCTTTTCC 1111131111331313313133131 BC:Z:AGGTCGCA-TTCCTTTC RG:Z:HiMom.1
+HiMom:1:1101:14927:1516 589 * 0 0 * * 0 0 CTCCTTTTCTCTTTTCCCCCTGTGC 11111 at 3131333313111111111 BC:Z:GTCTGATG-TCACTTCC RG:Z:HiMom.1
+HiMom:1:1101:14927:1516 653 * 0 0 * * 0 0 TTCCTCCCCCTCCTCCCCCTCCCTC 11111111>1111111100000A00 BC:Z:GTCTGATG-TCACTTCC RG:Z:HiMom.1
+HiMom:1:1101:14943:1353 589 * 0 0 * * 0 0 TTTTTTTTTCTTTTTTTTTTTTTTT 1>1>111100 at 33A########### BC:Z:CTCCCTCT-TCCTTCTT RG:Z:HiMom.1
+HiMom:1:1101:14943:1353 653 * 0 0 * * 0 0 CTCCCTTTTTTTTTTCTTCCTCTCT 1111111111110000112111101 BC:Z:CTCCCTCT-TCCTTCTT RG:Z:HiMom.1
+HiMom:1:1101:15334:1365 589 * 0 0 * * 0 0 TTTTTTTCTTCTCTTTCTTTTCTTT 111>111113331333333B13133 BC:Z:TGTATCTC-TTACTCTT RG:Z:HiMom.1
+HiMom:1:1101:15334:1365 653 * 0 0 * * 0 0 TCTCTCTTTCTTCTCTTTTTTTTTT 1111111333333313331110000 BC:Z:TGTATCTC-TTACTCTT RG:Z:HiMom.1
+HiMom:1:1101:15424:1475 589 * 0 0 * * 0 0 CTTTTTTCTTTTTCTTTTTTTTTCT 1>>11 at 1113311113311000001 BC:Z:CCTCTTCT-CTCGCTTT RG:Z:HiMom.1
+HiMom:1:1101:15424:1475 653 * 0 0 * * 0 0 TTCCTTCTTTCCTTCTCTCTTTCTT 1111131113313311131133333 BC:Z:CCTCTTCT-CTCGCTTT RG:Z:HiMom.1
+HiMom:1:1101:15736:1478 589 * 0 0 * * 0 0 CCTCTCTTTTTTCCTTTCCCTGCCT 1111111 at 3B1111A33111A1001 BC:Z:ATTGTCTG-GATTCACA RG:Z:HiMom.1
+HiMom:1:1101:15736:1478 653 * 0 0 * * 0 0 CTCTTCCCTTTCCCCCTCTTCTTCT 111>111111111111A11113A33 BC:Z:ATTGTCTG-GATTCACA RG:Z:HiMom.1
+HiMom:1:1101:15785:1528 589 * 0 0 * * 0 0 CTTTTTTTTTTCTCTCTTTTTTTTT 11>111>100001221B######## BC:Z:CCCGATTT-TCTCTCCC RG:Z:HiMom.1
+HiMom:1:1101:15785:1528 653 * 0 0 * * 0 0 TCTTCTCTTTCTCTTTTTCTTTTCT 1111131 at 3@3333331A1133131 BC:Z:CCCGATTT-TCTCTCCC RG:Z:HiMom.1
+HiMom:1:1101:15865:1540 589 * 0 0 * * 0 0 GCTTTCCTTGTTTTCTGTCCCCTTC 11111113311BB13A33A111B10 BC:Z:TTCCCCAG-TGCTTTTA RG:Z:HiMom.1
+HiMom:1:1101:15865:1540 653 * 0 0 * * 0 0 CTTTTTTATTTTCCTTTTGCATCCT 11111111333 at 31333B1133301 BC:Z:TTCCCCAG-TGCTTTTA RG:Z:HiMom.1
+HiMom:1:1101:15987:1510 589 * 0 0 * * 0 0 CTTTTTTTTTTTCCCTTTTTACCTT ######################### BC:Z:CCTCTTTC-TTCTGCTC RG:Z:HiMom.1
+HiMom:1:1101:15987:1510 653 * 0 0 * * 0 0 TTCCCCTTCCCTTCTCTTTTCTTCT 111111>1111 at 1111333131333 BC:Z:CCTCTTTC-TTCTGCTC RG:Z:HiMom.1
+HiMom:1:1101:15998:1432 589 * 0 0 * * 0 0 TTCTTCCTCTTCTTCTTCTTCCTTT 111>131111113133133A31133 BC:Z:CATGTTCG-CGCCTTTT RG:Z:HiMom.1
+HiMom:1:1101:15998:1432 653 * 0 0 * * 0 0 CTTTTTTTCTTTTCTCCTCCTTTTT 11111 at 111@3313A31A000131A BC:Z:CATGTTCG-CGCCTTTT RG:Z:HiMom.1
+HiMom:1:1101:16070:1386 589 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTCCTTCCTTT ######################### BC:Z:TGTCGGTT-TTTTGCTT RG:Z:HiMom.1
+HiMom:1:1101:16070:1386 653 * 0 0 * * 0 0 TTTTTTTTCTCTCTTTTTTTTTTTT 11111111013311331A####### BC:Z:TGTCGGTT-TTTTGCTT RG:Z:HiMom.1
+HiMom:1:1101:16085:1467 589 * 0 0 * * 0 0 TTTTTTCCTTTTCTTTTCCTCTTCT 1>>11>113B31313A13131111A BC:Z:ACCTACTG-CTTCCCTT RG:Z:HiMom.1
+HiMom:1:1101:16085:1467 653 * 0 0 * * 0 0 TTTTTTTTTTTTCCTCTTTTTTTCC ######################### BC:Z:ACCTACTG-CTTCCCTT RG:Z:HiMom.1
+HiMom:1:1101:16098:1529 589 * 0 0 * * 0 0 TTTTTTTTTTCTCTCCCTTTCTCTT 1>1>>11100012210001112222 BC:Z:TTCTCATC-TTCCTTCC RG:Z:HiMom.1
+HiMom:1:1101:16098:1529 653 * 0 0 * * 0 0 CCCTCTCCACTTTTCTTTCCTCCCT 11111>1111111331333131110 BC:Z:TTCTCATC-TTCCTTCC RG:Z:HiMom.1
+HiMom:1:1101:16530:1425 589 * 0 0 * * 0 0 TTTTTTTTTTTTTTCTTTTTTTTTT 1111>>110000A############ BC:Z:CCTATTCT-TCGTTTTC RG:Z:HiMom.1
+HiMom:1:1101:16530:1425 653 * 0 0 * * 0 0 TTCTTTCCCTTTTCTTTTCCTTCTC 1111133111111313313133111 BC:Z:CCTATTCT-TCGTTTTC RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TACTTAGC.sam b/testdata/picard/illumina/25T8B8B25T/sams/TACTTAGC.sam
new file mode 100644
index 0000000..e807e7c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TACTTAGC.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TACTTAGCGTCTGCAC LB:LN_TACTTAGCGTCTGCAC PL:illumina PU:HiMom.1.TACTTAGC-GTCTGCAC CN:BI
+HiMom:1:1101:13898:1519 589 * 0 0 * * 0 0 CCTTCTCTACTTTTTTTTCTATTTT 111>111B31 at 33311A0A1333BA RG:Z:HiMom.1
+HiMom:1:1101:13898:1519 653 * 0 0 * * 0 0 TTTTTTCTTTTCTCTTCCTCTTTTC 11>11111 at 3131A3A111A11313 RG:Z:HiMom.1
+HiMom:1:1101:14983:1536 589 * 0 0 * * 0 0 CCTTCTTCTTGTTCCCTCGCCAGGC 11>>1113 at B11133AA111A0000 RG:Z:HiMom.1
+HiMom:1:1101:14983:1536 653 * 0 0 * * 0 0 TCCTTATCCTTTTTACTGCCCTGTA 1111>331@@331A11A311111B3 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam b/testdata/picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam
new file mode 100644
index 0000000..481acc1
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TCCCCGTT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TCCCCGTTCCAACTTC LB:LN_TCCCCGTTCCAACTTC PL:illumina PU:HiMom.1.TCCCCGTT-CCAACTTC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam b/testdata/picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam
new file mode 100644
index 0000000..3bb852d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TCCTTGGT.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TCCTTGGTGCTGCACT LB:LN_TCCTTGGTGCTGCACT PL:illumina PU:HiMom.1.TCCTTGGT-GCTGCACT CN:BI
+HiMom:1:1101:17106:1463 589 * 0 0 * * 0 0 TTTCTTTTTTTTCTTTTCTCTTCCT 11>113 at 1111>0A3A131333111 RG:Z:HiMom.1
+HiMom:1:1101:17106:1463 653 * 0 0 * * 0 0 TTCATTTTCTTCTTTTTCTTCCTCT 1111133331333131111331111 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam b/testdata/picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam
new file mode 100644
index 0000000..d928d2a
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TCGCCTTG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TCGCCTTGCCAACGCT LB:LN_TCGCCTTGCCAACGCT PL:illumina PU:HiMom.1.TCGCCTTG-CCAACGCT CN:BI
+HiMom:1:1101:15287:1512 589 * 0 0 * * 0 0 CCTCCTCCTTTTATTTCTTTTCCCT 111111>1B131333333331A111 RG:Z:HiMom.1
+HiMom:1:1101:15287:1512 653 * 0 0 * * 0 0 CTTTTTTCTTTTTTTCGTCTTTCTT 1111111113 at 111000000A2221 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam b/testdata/picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam
new file mode 100644
index 0000000..2570d6c
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TGCAAGTA.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGCAAGTACGAACTTC LB:LN_TGCAAGTACGAACTTC PL:illumina PU:HiMom.1.TGCAAGTA-CGAACTTC CN:BI
+HiMom:1:1101:13416:1538 589 * 0 0 * * 0 0 TTTTGTCTATCACTTTGTTTATTCA >11>11333333311A13113BBA3 RG:Z:HiMom.1
+HiMom:1:1101:13416:1538 653 * 0 0 * * 0 0 TTTTCTTCCCTTTCTTTCTCTGTTT 111111331111B133A33333D33 RG:Z:HiMom.1
+HiMom:1:1101:16315:1534 589 * 0 0 * * 0 0 TTTCTGTTTTATTCTTTTCTTATGT >1>113333B333333AB31A331D RG:Z:HiMom.1
+HiMom:1:1101:16315:1534 653 * 0 0 * * 0 0 TTTTTCTCCTCCTTTTTTTGTTCCT 111111131 at 11A1A111000B333 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam b/testdata/picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam
new file mode 100644
index 0000000..ed7ed3f
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TGCTCGAC.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGCTCGACTTCACAGT LB:LN_TGCTCGACTTCACAGT PL:illumina PU:HiMom.1.TGCTCGAC-TTCACAGT CN:BI
+HiMom:1:1101:15028:1491 589 * 0 0 * * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTT >1>>111>>000/A########### RG:Z:HiMom.1
+HiMom:1:1101:15028:1491 653 * 0 0 * * 0 0 TTCTTTTTTTTCTTTTTTTTTCTCT 1111131111001331100//0A22 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TGTAATCA.sam b/testdata/picard/illumina/25T8B8B25T/sams/TGTAATCA.sam
new file mode 100644
index 0000000..446b008
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TGTAATCA.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGTAATCACCTCTAAC LB:LN_TGTAATCACCTCTAAC PL:illumina PU:HiMom.1.TGTAATCA-CCTCTAAC CN:BI
+HiMom:1:1101:15439:1540 589 * 0 0 * * 0 0 CTTCTTTCATATTCTTAAATTTGCA 1>>11B333B333ABA331ABA333 RG:Z:HiMom.1
+HiMom:1:1101:15439:1540 653 * 0 0 * * 0 0 TTTTGTTTGAGTGTTATAGAAACAG 111>11BB111113B3333313110 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TGTATCTC.sam b/testdata/picard/illumina/25T8B8B25T/sams/TGTATCTC.sam
new file mode 100644
index 0000000..a92cd71
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TGTATCTC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGTATCTCTTACTCTT LB:LN_TGTATCTCTTACTCTT PL:illumina PU:HiMom.1.TGTATCTC-TTACTCTT CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam b/testdata/picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam
new file mode 100644
index 0000000..180e56d
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TGTCGGTT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGTCGGTTTTTTGCTT LB:LN_TGTCGGTTTTTTGCTT PL:illumina PU:HiMom.1.TGTCGGTT-TTTTGCTT CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam b/testdata/picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam
new file mode 100644
index 0000000..9310a53
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TGTTCCGA.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TGTTCCGAAACCTCTT LB:LN_TGTTCCGAAACCTCTT PL:illumina PU:HiMom.1.TGTTCCGA-AACCTCTT CN:BI
+HiMom:1:1101:16256:1385 589 * 0 0 * * 0 0 TTTCTCTTTTTTTTTCCTTTTTTTT >>11>3 at 3@@11AAA01A22AA0/A RG:Z:HiMom.1
+HiMom:1:1101:16256:1385 653 * 0 0 * * 0 0 TCTTTTTCTTTTTTCTTTTCTCTTT 11111111 at 33111113A13A3A33 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TTAATCAG.sam b/testdata/picard/illumina/25T8B8B25T/sams/TTAATCAG.sam
new file mode 100644
index 0000000..0ae05fd
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TTAATCAG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TTAATCAGCTGGTATT LB:LN_TTAATCAGCTGGTATT PL:illumina PU:HiMom.1.TTAATCAG-CTGGTATT CN:BI
+HiMom:1:1101:17703:1479 589 * 0 0 * * 0 0 TTTTTTTTTTCCTCCTTTTTTTCCT 111111110001110012A1//01A RG:Z:HiMom.1
+HiMom:1:1101:17703:1479 653 * 0 0 * * 0 0 TCTTTTTTCCTTCTCTTTTTTCTTT 11111 at 1111331113331100133 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TTATATCT.sam b/testdata/picard/illumina/25T8B8B25T/sams/TTATATCT.sam
new file mode 100644
index 0000000..fe46bad
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TTATATCT.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TTATATCTTCATGTCT LB:LN_TTATATCTTCATGTCT PL:illumina PU:HiMom.1.TTATATCT-TCATGTCT CN:BI
+HiMom:1:1101:16819:1536 589 * 0 0 * * 0 0 TTTTTTTGTTTTGTCCTTTCTTCCT >1>111>1111>0A3AA33AAB31B RG:Z:HiMom.1
+HiMom:1:1101:16819:1536 653 * 0 0 * * 0 0 TTTTTTTTTCATCCCTCTCTTCCCT 1>1>>>>>>0333A010A0A2A101 RG:Z:HiMom.1
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam b/testdata/picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam
new file mode 100644
index 0000000..79fe5f6
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TTCCCCAG.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TTCCCCAGTGCTTTTA LB:LN_TTCCCCAGTGCTTTTA PL:illumina PU:HiMom.1.TTCCCCAG-TGCTTTTA CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam b/testdata/picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam
new file mode 100644
index 0000000..0d123c2
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TTCCTCCT.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TTCCTCCTCACCATCC LB:LN_TTCCTCCTCACCATCC PL:illumina PU:HiMom.1.TTCCTCCT-CACCATCC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TTCTCATC.sam b/testdata/picard/illumina/25T8B8B25T/sams/TTCTCATC.sam
new file mode 100644
index 0000000..361dd15
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TTCTCATC.sam
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TTCTCATCTTCCTTCC LB:LN_TTCTCATCTTCCTTCC PL:illumina PU:HiMom.1.TTCTCATC-TTCCTTCC CN:BI
diff --git a/testdata/picard/illumina/25T8B8B25T/sams/TTGAATAG.sam b/testdata/picard/illumina/25T8B8B25T/sams/TTGAATAG.sam
new file mode 100644
index 0000000..40ff861
--- /dev/null
+++ b/testdata/picard/illumina/25T8B8B25T/sams/TTGAATAG.sam
@@ -0,0 +1,4 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:HiMom.1 SM:SA_TTGAATAGATATCCGA LB:LN_TTGAATAGATATCCGA PL:illumina PU:HiMom.1.TTGAATAG-ATATCCGA CN:BI
+HiMom:1:1101:16891:1545 589 * 0 0 * * 0 0 CTTTTGCCTGTGTTTTTTCTCTCAT 1>1>>11111B1BABA11AAA3A13 RG:Z:HiMom.1
+HiMom:1:1101:16891:1545 653 * 0 0 * * 0 0 CTTTTTTCTGACTTTCTTCTAGACT 11>1>1>>13311A3AB3AB33313 RG:Z:HiMom.1
diff --git a/testdata/net/sf/picard/illumina/25T8B8B25T/sams/barcode_double.params b/testdata/picard/illumina/25T8B8B25T/sams/barcode_double.params
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B8B25T/sams/barcode_double.params
rename to testdata/picard/illumina/25T8B8B25T/sams/barcode_double.params
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C171.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C172.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C173.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C174.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C175.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C176.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C177.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C178.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C179.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C180.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C181.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C182.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C183.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C184.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C185.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C186.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C187.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C188.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C189.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C190.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C191.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C192.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C193.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C194.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C195.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C196.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C197.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C198.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C199.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C200.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C201.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C202.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C203.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C204.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C205.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C206.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C207.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C208.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C209.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C210.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C211.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C212.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C213.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C214.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C215.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C216.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C217.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C218.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C219.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C220.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C221.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C222.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C223.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C224.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C225.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C226.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C227.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C228.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C229.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C230.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C231.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C232.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C233.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C234.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C235.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C236.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C237.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C238.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C239.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C240.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C241.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C242.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C243.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C244.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C245.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C246.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C247.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C248.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C249.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C250.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
diff --git a/testdata/net/sf/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/L001/s_1_1101.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/125T125T/Data/Intensities/L001/s_1_1101.clocs
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/125T125T/Data/Intensities/L001/s_1_1101.clocs
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/L001/s_1_1101.filter
diff --git a/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/barcodeData.1 b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/barcodeData.1
new file mode 100755
index 0000000..c8306ea
--- /dev/null
+++ b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/barcodeData.1
@@ -0,0 +1,6 @@
+barcode_name library_name barcode_sequence_1
+tagged_908 Xiaolan AGCATGGA
+tagged_741 Xiaolan AACGCATT
+tagged_117 Xiaolan AACAATGG
+tagged_630 Xiaolan ACTAAGAC
+tagged_375 Xiaolan ACAGGTAT
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
diff --git a/testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1101.clocs b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/L001/s_1_1101.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/25T8B25T/Data/Intensities/L001/s_1_1101.clocs
rename to testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/Data/Intensities/L001/s_1_1101.clocs
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/CollectIlluminaLaneMetrics/.gitignore
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/CollectIlluminaLaneMetrics/.gitignore
diff --git a/testdata/net/sf/picard/illumina/Homo_sapiens_assembly18.seqdict.sam b/testdata/picard/illumina/Homo_sapiens_assembly18.seqdict.sam
similarity index 100%
rename from testdata/net/sf/picard/illumina/Homo_sapiens_assembly18.seqdict.sam
rename to testdata/picard/illumina/Homo_sapiens_assembly18.seqdict.sam
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX.expected.lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX.expected.lane_metrics
new file mode 100644
index 0000000..4ff4378
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX.expected.lane_metrics
@@ -0,0 +1,13 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+737654.46522 1
+735432.634984 2
+680377.260114 3
+660771.043513 4
+580029.994205 5
+606170.798438 6
+669264.07396 7
+685863.936999 8
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX.illumina_lane_metrics
new file mode 100644
index 0000000..4ff4378
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX.illumina_lane_metrics
@@ -0,0 +1,13 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+737654.46522 1
+735432.634984 2
+680377.260114 3
+660771.043513 4
+580029.994205 5
+606170.798438 6
+669264.07396 7
+685863.936999 8
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..fe6a428
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130318_SL-HBB_0226_BFCC1WYMACXX/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130321_SL-MAK_0035_FC000000000-A306B.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130321_SL-MAK_0035_FC000000000-A306B.illumina_lane_metrics
new file mode 100644
index 0000000..a446238
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130321_SL-MAK_0035_FC000000000-A306B.illumina_lane_metrics
@@ -0,0 +1,6 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+705356.408747 1
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130321_SL-MAK_0035_FC000000000-A306B/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130321_SL-MAK_0035_FC000000000-A306B/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..082ccc9
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130321_SL-MAK_0035_FC000000000-A306B/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130401_SL-HAC_0022_BH07PBADXX.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130401_SL-HAC_0022_BH07PBADXX.illumina_lane_metrics
new file mode 100644
index 0000000..1fc5e85
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130401_SL-HAC_0022_BH07PBADXX.illumina_lane_metrics
@@ -0,0 +1,7 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+719577.231548 1
+697884.562621 2
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130401_SL-HAC_0022_BH07PBADXX/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130401_SL-HAC_0022_BH07PBADXX/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..d57208c
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/130401_SL-HAC_0022_BH07PBADXX/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/A67HY.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/A67HY.illumina_lane_metrics
new file mode 100644
index 0000000..eb075a3
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/A67HY.illumina_lane_metrics
@@ -0,0 +1,6 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+471143.26055 1
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/A67HY.illumina_phasing_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/A67HY.illumina_phasing_metrics
new file mode 100644
index 0000000..b28b04f
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/A67HY.illumina_phasing_metrics
@@ -0,0 +1,3 @@
+
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..7322b24
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/README b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/README
new file mode 100644
index 0000000..3a4c35d
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A67HY/README
@@ -0,0 +1 @@
+8B8B
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/A7LE0.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/A7LE0.illumina_lane_metrics
new file mode 100644
index 0000000..cede24b
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/A7LE0.illumina_lane_metrics
@@ -0,0 +1,6 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+716096.698529 1
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/A7LE0.illumina_phasing_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/A7LE0.illumina_phasing_metrics
new file mode 100644
index 0000000..910a07e
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/A7LE0.illumina_phasing_metrics
@@ -0,0 +1,7 @@
+
+## METRICS CLASS picard.illumina.IlluminaPhasingMetrics
+LANE TYPE_NAME PHASING_APPLIED PREPHASING_APPLIED
+1 FIRST 0.348826 0.102636
+1 SECOND 0.365592 0.120776
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..882c3c2
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/README b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/README
new file mode 100644
index 0000000..066a0e3
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/A7LE0/README
@@ -0,0 +1 @@
+25T8B8B25T
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/C2MFAACXX.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/C2MFAACXX.illumina_lane_metrics
new file mode 100644
index 0000000..a446299
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/C2MFAACXX.illumina_lane_metrics
@@ -0,0 +1,13 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+383203.749633 1
+372624.728072 2
+704229.985618 3
+869772.849553 4
+687219.739695 5
+700154.810984 6
+488271.673911 7
+472918.516587 8
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/C2MFAACXX.illumina_phasing_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/C2MFAACXX.illumina_phasing_metrics
new file mode 100644
index 0000000..db916df
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/C2MFAACXX.illumina_phasing_metrics
@@ -0,0 +1,21 @@
+
+## METRICS CLASS picard.illumina.IlluminaPhasingMetrics
+LANE TYPE_NAME PHASING_APPLIED PREPHASING_APPLIED
+1 FIRST 0.145376 0.236303
+1 SECOND 0.118807 0.259126
+2 FIRST 0.15119 0.225011
+2 SECOND 0.1244 0.257222
+3 FIRST 0.175504 0.213735
+3 SECOND 0.128604 0.254258
+4 FIRST 0.175155 0.179118
+4 SECOND 0.221506 0.201332
+5 FIRST 0.168341 0.213921
+5 SECOND 0.125947 0.258912
+6 FIRST 0.17095 0.210944
+6 SECOND 0.124301 0.262341
+7 FIRST 0.164955 0.214149
+7 SECOND 0.118581 0.24602
+8 FIRST 0.173663 0.22553
+8 SECOND 0.121349 0.24245
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..179f78b
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/README b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/README
new file mode 100644
index 0000000..d95bbfd
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/C2MFAACXX/README
@@ -0,0 +1 @@
+99T101T
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/H7BATADXX.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/H7BATADXX.illumina_lane_metrics
new file mode 100644
index 0000000..92aac81
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/H7BATADXX.illumina_lane_metrics
@@ -0,0 +1,7 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+993597.96782 1
+957767.642058 2
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/H7BATADXX.illumina_phasing_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/H7BATADXX.illumina_phasing_metrics
new file mode 100644
index 0000000..383a188
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/H7BATADXX.illumina_phasing_metrics
@@ -0,0 +1,9 @@
+
+## METRICS CLASS picard.illumina.IlluminaPhasingMetrics
+LANE TYPE_NAME PHASING_APPLIED PREPHASING_APPLIED
+1 FIRST 0.065596 0.102128
+1 SECOND 0.096622 0.134981
+2 FIRST 0.070056 0.244101
+2 SECOND 0.098111 0.224081
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..0cf15f8
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/README b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/README
new file mode 100644
index 0000000..f15619a
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7BATADXX/README
@@ -0,0 +1 @@
+76T8B76T
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/H7H7RADXX.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/H7H7RADXX.illumina_lane_metrics
new file mode 100644
index 0000000..e73104d
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/H7H7RADXX.illumina_lane_metrics
@@ -0,0 +1,7 @@
+
+## METRICS CLASS picard.illumina.IlluminaLaneMetrics
+CLUSTER_DENSITY LANE
+1014912.666555 1
+1010736.712377 2
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/H7H7RADXX.illumina_phasing_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/H7H7RADXX.illumina_phasing_metrics
new file mode 100644
index 0000000..64c322d
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/H7H7RADXX.illumina_phasing_metrics
@@ -0,0 +1,9 @@
+
+## METRICS CLASS picard.illumina.IlluminaPhasingMetrics
+LANE TYPE_NAME PHASING_APPLIED PREPHASING_APPLIED
+1 FIRST 0.106243 0.127359
+1 SECOND 0.118863 0.116667
+2 FIRST 0.108767 0.137311
+2 SECOND 0.122812 0.117224
+
+
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/InterOp/TileMetricsOut.bin
new file mode 100755
index 0000000..5988bd0
Binary files /dev/null and b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/InterOp/TileMetricsOut.bin differ
diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/README b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/README
new file mode 100644
index 0000000..29f96af
--- /dev/null
+++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/tileRuns/H7H7RADXX/README
@@ -0,0 +1,2 @@
+FLOWCELL: H7H7RADXX
+STRUCTURE: 101T8B8B101T
diff --git a/testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0001.filter b/testdata/picard/illumina/parserTests/filterParser/L001/s_1_0001.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0001.filter
rename to testdata/picard/illumina/parserTests/filterParser/L001/s_1_0001.filter
diff --git a/testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0002.filter b/testdata/picard/illumina/parserTests/filterParser/L001/s_1_0002.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0002.filter
rename to testdata/picard/illumina/parserTests/filterParser/L001/s_1_0002.filter
diff --git a/testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0003.filter b/testdata/picard/illumina/parserTests/filterParser/L001/s_1_0003.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0003.filter
rename to testdata/picard/illumina/parserTests/filterParser/L001/s_1_0003.filter
diff --git a/testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0004.filter b/testdata/picard/illumina/parserTests/filterParser/L001/s_1_0004.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/filterParser/L001/s_1_0004.filter
rename to testdata/picard/illumina/parserTests/filterParser/L001/s_1_0004.filter
diff --git a/testdata/net/sf/picard/illumina/parserTests/posParser/s_1_1_pos.txt b/testdata/picard/illumina/parserTests/posParser/s_1_1_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/posParser/s_1_1_pos.txt
rename to testdata/picard/illumina/parserTests/posParser/s_1_1_pos.txt
diff --git a/testdata/net/sf/picard/illumina/parserTests/posParser/s_1_2_pos.txt b/testdata/picard/illumina/parserTests/posParser/s_1_2_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/posParser/s_1_2_pos.txt
rename to testdata/picard/illumina/parserTests/posParser/s_1_2_pos.txt
diff --git a/testdata/net/sf/picard/illumina/parserTests/posParser/s_1_3_pos.txt b/testdata/picard/illumina/parserTests/posParser/s_1_3_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/posParser/s_1_3_pos.txt
rename to testdata/picard/illumina/parserTests/posParser/s_1_3_pos.txt
diff --git a/testdata/net/sf/picard/illumina/parserTests/posParser/s_9_3201_pos.txt b/testdata/picard/illumina/parserTests/posParser/s_9_3201_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/posParser/s_9_3201_pos.txt
rename to testdata/picard/illumina/parserTests/posParser/s_9_3201_pos.txt
diff --git a/testdata/net/sf/picard/illumina/parserTests/posParser/s_9_3202_pos.txt b/testdata/picard/illumina/parserTests/posParser/s_9_3202_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/parserTests/posParser/s_9_3202_pos.txt
rename to testdata/picard/illumina/parserTests/posParser/s_9_3202_pos.txt
diff --git a/testdata/net/sf/picard/illumina/readerTests/bcl_failing.bcl b/testdata/picard/illumina/readerTests/bcl_failing.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/bcl_failing.bcl
rename to testdata/picard/illumina/readerTests/bcl_failing.bcl
diff --git a/testdata/net/sf/picard/illumina/readerTests/bcl_failing2.bcl b/testdata/picard/illumina/readerTests/bcl_failing2.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/bcl_failing2.bcl
rename to testdata/picard/illumina/readerTests/bcl_failing2.bcl
diff --git a/testdata/net/sf/picard/illumina/readerTests/bcl_passing.bcl b/testdata/picard/illumina/readerTests/bcl_passing.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/bcl_passing.bcl
rename to testdata/picard/illumina/readerTests/bcl_passing.bcl
diff --git a/testdata/net/sf/picard/illumina/readerTests/bcl_tooLong.bcl b/testdata/picard/illumina/readerTests/bcl_tooLong.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/bcl_tooLong.bcl
rename to testdata/picard/illumina/readerTests/bcl_tooLong.bcl
diff --git a/testdata/net/sf/picard/illumina/readerTests/bcl_tooShort.bcl b/testdata/picard/illumina/readerTests/bcl_tooShort.bcl
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/bcl_tooShort.bcl
rename to testdata/picard/illumina/readerTests/bcl_tooShort.bcl
diff --git a/testdata/net/sf/picard/illumina/readerTests/binary_passing.bin b/testdata/picard/illumina/readerTests/binary_passing.bin
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/binary_passing.bin
rename to testdata/picard/illumina/readerTests/binary_passing.bin
diff --git a/testdata/net/sf/picard/illumina/readerTests/pf_badOpeningBytes.filter b/testdata/picard/illumina/readerTests/pf_badOpeningBytes.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pf_badOpeningBytes.filter
rename to testdata/picard/illumina/readerTests/pf_badOpeningBytes.filter
diff --git a/testdata/net/sf/picard/illumina/readerTests/pf_badVersionBytes.filter b/testdata/picard/illumina/readerTests/pf_badVersionBytes.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pf_badVersionBytes.filter
rename to testdata/picard/illumina/readerTests/pf_badVersionBytes.filter
diff --git a/testdata/net/sf/picard/illumina/readerTests/pf_failing1.filter b/testdata/picard/illumina/readerTests/pf_failing1.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pf_failing1.filter
rename to testdata/picard/illumina/readerTests/pf_failing1.filter
diff --git a/testdata/net/sf/picard/illumina/readerTests/pf_failing2.filter b/testdata/picard/illumina/readerTests/pf_failing2.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pf_failing2.filter
rename to testdata/picard/illumina/readerTests/pf_failing2.filter
diff --git a/testdata/net/sf/picard/illumina/readerTests/pf_passing.filter b/testdata/picard/illumina/readerTests/pf_passing.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pf_passing.filter
rename to testdata/picard/illumina/readerTests/pf_passing.filter
diff --git a/testdata/net/sf/picard/illumina/readerTests/pf_tooLarge.filter b/testdata/picard/illumina/readerTests/pf_tooLarge.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pf_tooLarge.filter
rename to testdata/picard/illumina/readerTests/pf_tooLarge.filter
diff --git a/testdata/net/sf/picard/illumina/readerTests/pf_tooShort.filter b/testdata/picard/illumina/readerTests/pf_tooShort.filter
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pf_tooShort.filter
rename to testdata/picard/illumina/readerTests/pf_tooShort.filter
diff --git a/testdata/net/sf/picard/illumina/readerTests/pos_failing1_pos.txt b/testdata/picard/illumina/readerTests/pos_failing1_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/pos_failing1_pos.txt
rename to testdata/picard/illumina/readerTests/pos_failing1_pos.txt
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_10.locs b/testdata/picard/illumina/readerTests/s_1_10.locs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_10.locs
rename to testdata/picard/illumina/readerTests/s_1_10.locs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_1101_pos.txt b/testdata/picard/illumina/readerTests/s_1_1101_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_1101_pos.txt
rename to testdata/picard/illumina/readerTests/s_1_1101_pos.txt
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_1102_pos.txt b/testdata/picard/illumina/readerTests/s_1_1102_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_1102_pos.txt
rename to testdata/picard/illumina/readerTests/s_1_1102_pos.txt
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_1103_pos.txt b/testdata/picard/illumina/readerTests/s_1_1103_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_1103_pos.txt
rename to testdata/picard/illumina/readerTests/s_1_1103_pos.txt
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/illumina/readerTests/s_1_1104_pos.txt
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/illumina/readerTests/s_1_1104_pos.txt
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_2106.clocs b/testdata/picard/illumina/readerTests/s_1_2106.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_2106.clocs
rename to testdata/picard/illumina/readerTests/s_1_2106.clocs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_6.locs b/testdata/picard/illumina/readerTests/s_1_6.locs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_6.locs
rename to testdata/picard/illumina/readerTests/s_1_6.locs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_7.locs b/testdata/picard/illumina/readerTests/s_1_7.locs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_7.locs
rename to testdata/picard/illumina/readerTests/s_1_7.locs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_8.locs b/testdata/picard/illumina/readerTests/s_1_8.locs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_8.locs
rename to testdata/picard/illumina/readerTests/s_1_8.locs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_1_9.locs b/testdata/picard/illumina/readerTests/s_1_9.locs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_1_9.locs
rename to testdata/picard/illumina/readerTests/s_1_9.locs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_2_1101.clocs b/testdata/picard/illumina/readerTests/s_2_1101.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_2_1101.clocs
rename to testdata/picard/illumina/readerTests/s_2_1101.clocs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_2_1101_pos.txt b/testdata/picard/illumina/readerTests/s_2_1101_pos.txt
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_2_1101_pos.txt
rename to testdata/picard/illumina/readerTests/s_2_1101_pos.txt
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_3_2102.clocs b/testdata/picard/illumina/readerTests/s_3_2102.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_3_2102.clocs
rename to testdata/picard/illumina/readerTests/s_3_2102.clocs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_3_2103.clocs b/testdata/picard/illumina/readerTests/s_3_2103.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_3_2103.clocs
rename to testdata/picard/illumina/readerTests/s_3_2103.clocs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_3_2104.clocs b/testdata/picard/illumina/readerTests/s_3_2104.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_3_2104.clocs
rename to testdata/picard/illumina/readerTests/s_3_2104.clocs
diff --git a/testdata/net/sf/picard/illumina/readerTests/s_3_2105.clocs b/testdata/picard/illumina/readerTests/s_3_2105.clocs
similarity index 100%
rename from testdata/net/sf/picard/illumina/readerTests/s_3_2105.clocs
rename to testdata/picard/illumina/readerTests/s_3_2105.clocs
diff --git a/testdata/picard/metrics/chrM.reference.fasta b/testdata/picard/metrics/chrM.reference.fasta
new file mode 100644
index 0000000..020e694
--- /dev/null
+++ b/testdata/picard/metrics/chrM.reference.fasta
@@ -0,0 +1,333 @@
+>chrM
+GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT
+TTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTG
+GAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATT
+CTATTATTTATCGCACCTACGTTCAATATTACAGGCGAACATACCTACTA
+AAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATAACAATTGAAT
+GTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
+AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGC
+CAAACCCCAAAAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAAT
+TTTATCTTTAGGCGGTATGCACTTTTAACAGTCACCCCCCAACTAACACA
+TTATTTTCCCCTCCCACTCCCATACTACTAATCTCATCAATACAACCCCC
+GCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCATACCCCGAAC
+CAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
+AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAA
+ATAGGTTTGGTCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGC
+AAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAG
+GGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGCC
+ACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAATAAACGAAAGT
+TTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
+GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTT
+TAGATCACCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAA
+CTCCAGTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAAC
+ACACAATAGCTAAGACCCAAACTGGGATTAGATACCCCACTATGCTTAGC
+CCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAGAACACTACGA
+GCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
+GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGC
+TCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGT
+AAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAGG
+TGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTT
+ATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGT
+GCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
+TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATA
+GAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACG
+AACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATTT
+CAACTTAACTTGACCGCTCTGAGCTAAACCTAGCCCCAAACCCACTCCAC
+CTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGG
+CGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
+TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTT
+CTGCATAATGAATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAA
+GACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCC
+GTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCT
+ACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTT
+TAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
+TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGA
+GTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGA
+AAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCCCAAACATATAACT
+GAACTCCTCACACCCAATTGGACCAATCTATCACCCTATAGAAGAACTAA
+TGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTCA
+GATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
+ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAG
+GAAAGGTTAAAAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTT
+TACCAAAAACATCACCTCTAGCATCACCAGTATTAGAGGCACCGCCTGCC
+CAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAaaggtagca
+taatcacttgttccttaaatagggacctgtatgaatggctccacgagggt
+tcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
+cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTA
+ATGCAAACAGTACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCA
+TTAAAAATTTCGGTTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCA
+GTACATGCTAAGACTTCACCAGTCAAAGCGAACTACTATACTCAATTGAT
+CCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATC
+CTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
+CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGA
+TTAAAGTCCTACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTT
+CTATCTACTTCAAATTCCTCCCTGTACGAAAGGACAAGAGAAATAAGGCC
+TACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTAT
+TATACCCACACCCACCCAAGAACAGGGTTTgttaagatggcagagcccgg
+taatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
+taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAA
+TCGCAATGGCATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATA
+CAACTACGCAAAGGCCCCAACGTTGTAGGCCCCTACGGGCTACTACAACC
+CTTCGCTGACGCCATAAAACTCTTCACCAAAGAGCCCCTAAAACCCGCCA
+CATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCATC
+GCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
+CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACT
+CAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGC
+GCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCAT
+CATTCTACTATCAACATTACTAATAAGTGGCTCCTTTAACCTCTCCACCC
+TTATCACAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTG
+GCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
+CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAAT
+ACGCCGCAGGCCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATT
+ATTATAATAAACACCCTCACCACTACAATCTTCCTAGGAACAACATATGA
+CGCACTCTCCCCTGAACTCTACACAACATATTTTGTCACCAAGACCCTAC
+TTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGC
+TACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
+AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTC
+CCCCTCAAACCTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGT
+AAATAATAGGAGCTTAAACCCCCTTATTTctaggactatgagaatcgaac
+ccatccctgagaatccaaaattctccgtgccacctatcacaccccatcct
+aAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTG
+GTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
+TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATT
+TTTTACCTGAGTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTC
+TAACCAAAAAAATAAACCCTCGTTCCACAGAAGCTGCCATCAAGTATTTC
+CTCACGCAAGCAACCGCATCCATAATCCTTCTAATAGCTATCCTCTTCAA
+CAATATACTCTCCGGACAATGAACCATAACCAATACTACCAATCAATACT
+CATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
+TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGG
+CCTGCTTCTTCTCACATGACAAAAACTAGCCCCCATCTCAATCATATACC
+AAATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTA
+TCCATCATAGCAGGCAGTTGAGGTGGATTAAACCAAACCCAGCTACGCAA
+AATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTC
+TACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
+CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGAC
+CCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAA
+TTCCATCCACCCTCCTCTCCCTAGGAGGCCTGCCCCCGCTAACCGGCTTT
+TTGCCCAAATGGGCCATTATCGAAGAATTCACAAAAAACAATAGCCTCAT
+CATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACC
+TACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
+GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCC
+CACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATAC
+TAATAATCTTATAGAAATTTAGGTTAAATACAGACCAAGAGCCTTCAAAG
+CCCTCAGTAAGTTGCAATACTTAATTTCTGCAACAGCTAAGGACTGCAAA
+ACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAA
+GCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
+TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAA
+AAAGGCGGGAGAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCA
+ATTCAATATGAAAATCACCTCGGAGCTGGTAAAAAGAGGCCTAACCCCTG
+TCTTTAGATTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCC
+ACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTG
+GAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
+CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGG
+TAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAA
+TCTTCTTCATAGTAATACCCATCATAATCGGAGGCTTTGGCAACTGACTA
+GTTCCCCTAATAATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAA
+CATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTG
+CTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
+GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTC
+CTTACACCTAGCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCA
+CAACAATTATCAATATAAAACCCCCTGCCATAACCCAATACCAAACGCCC
+CTCTTCGTCTGATCCGTCCTAATCACAGCAGTCCTACTTCTCCTATCTCT
+CCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCA
+ACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
+CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACC
+AGGCTTCGGAATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAG
+AACCATTTGGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTC
+CTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGT
+AGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCA
+CCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
+AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCAC
+CGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCG
+TACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCA
+ATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCT
+ATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATCCATTTCACTA
+TCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
+CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCAC
+ATGAAACATCCTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAA
+TATTAATAATTTTCATGATTTGAGAAGCCTTCGCTTCGAAGCGAAAAGTC
+CTAATAGTAGAAGAACCCTCCATAAACCTGGAGTGACTATATGGATGCCC
+CCCACCCTACCACACATTCGAAGAACCCGTATACATAAAATCTAGACAaa
+aaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
+ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGT
+CAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGC
+GCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCA
+CCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTC
+CTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACAT
+CTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
+TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGAC
+GAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTA
+CTGAACCTACGAGTACACCGACTACGGCGGACTAATCTTCAACTCCTACA
+TACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTT
+GACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTATAATAATTAC
+ATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
+CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGA
+CCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAG
+TTTCATGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAG
+GGCCCGTATTTACCCTATAGCACCCCCTCTACCCCCTCTAGAGCCCACTG
+TAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAAC
+ACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
+TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATA
+TTAAACACAAACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAA
+AAATTATAACAAACCCTGAGAACCAAAATGAACGAAAATCTGTTCGCTTC
+ATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTC
+TATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCATCAACAACCGA
+CTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
+AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCT
+TAATCATTTTTATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCA
+TTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATCCCCTT
+ATGAGCGGGCGCAGTGATTATAGGCTTTCGCTCTAAGATTAAAAATGCCC
+TAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTATCCCCATACTA
+GTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
+ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTG
+GAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATC
+ATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTT
+AATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACA
+ACACATAATGACCCACCAATCACATGCCTATCATATAGTAAAACCCAGCC
+CATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
+GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACT
+AACCAACACACTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAA
+GCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATAC
+GGGATAATCCTATTTATTACCTCAGAAGTTTTTTTCTTCGCAGGATTTTT
+CTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAACTAGGAGGGC
+ACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
+CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCA
+CCATAGTCTAATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTA
+TTACAATTTTACTGGGTCTCTATTTTACCCTCCTACAAGCCTCAGAGTAC
+TTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTT
+TGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCC
+TCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
+CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGT
+TTGACTATTTCTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTA
+GTATAAATAGTACCGTTAACTTCCAATTAACTAGTTTTGACAACATTCAA
+AAAAGAGTAATAAACTTCGCCTTAATTTTAATAATCAACACCCTCCTAGC
+CTTACTACTAATAATTATTACATTTTGACTACCACAACTCAACGGCTACA
+TAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
+CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATT
+ATTTGATCTAGAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAA
+CAACTAACCTGCCACTAATAGTTATGTCATCCCTCTTATTAATCATCATC
+CTAGCCCTAAGTCTGGCCTATGAGTGACTACAAAAAGGATTAGACTGAGC
+CGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGACTCATTAAATT
+ATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
+GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCAT
+ATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAG
+CTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCT
+ATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCT
+ACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAA
+ACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
+TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCAC
+AGCCTAATTATTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAA
+CAACCTATTTAGCTGTTCCCCAACCTTTTCCTCCGACCCCCTAACAACCC
+CCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGC
+CAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAACTCTACCTCTC
+TATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
+AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTG
+GCTATCATCACCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCAC
+ATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCAC
+TAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACTACTCACT
+CTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGACT
+AGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
+TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTA
+CTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCAC
+ACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTAC
+TATCCCTATGAGGCATAATTATAACAAGCTCCATCTGCCTACGACAAACA
+GACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGT
+AGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
+TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCA
+AACTCAAACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGG
+ACTTCAAACTCTACTCCCACTAATAGCTTTTTGATGACTTCTAGCAAGCC
+TCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCT
+GTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGG
+ACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
+CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTC
+ACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCT
+ATCCCTCAACCCCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTT
+TAACCAAAACATCAGATTGTGAATCTGACAACAGAGGCTTACGACCCCTT
+ATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTAA
+CAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
+GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACA
+CTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACC
+ACCCTCGTTAACCCTAACAAAAAAAACTCATACCCCCATTATGTAAAATC
+CATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCA
+TGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACC
+CAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
+ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCAC
+TGTGATATATAAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTA
+CTCATTTTCCTAATTACCATACTAATCTTAGTTACCGCTAACAACCTATT
+CCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCA
+TCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCA
+GTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
+ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAA
+ACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCA
+GGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGA
+AGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAG
+CAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCA
+CTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
+AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCT
+CCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAA
+CCACACCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCAT
+ACTATTTATGTGCTCCGGGTCCATCATCCACAACCTTAACAATGAACAAG
+ATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTCAACC
+TCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
+TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAA
+ACGCCTGAGCCCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCC
+TATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCC
+CACCCTTACTAACATTAACGAAAATAACCCCACCCTACTAAACCCCATTA
+AACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCATTACTAACAAC
+ATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
+CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCA
+ACTACCTAACCAACAAACTTAAAATAAAATCCCCACTATGCACATTTTAT
+TTCTCCAACATACTCGGATTCTACCCTAGCATCACACACCGCACAATCCC
+CTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCTCCTAGACC
+TAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCACCAAATC
+TCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
+CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAAC
+CTATTCCCCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGT
+TCAACCAGTAACCACTACTAATCAACGCCCATAATCATACAAAGCCCCCG
+CACCAATAGGATCCTCCCGAATCAACCCTGACCCCTCTCCTTCATAAATT
+ATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCACCCCATCATA
+CTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
+CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCA
+ATAGCCATCGCTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATA
+AATTAAAAAAACTATTAAACCCATATAACCTCCCCCAAAATTCAGAATAA
+TAACACACCCGACCACACCGCTAACAATCAGTACTAAACCCCCATAAATA
+GGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTAAACCCACACT
+CAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
+CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATG
+ACCCCAATACGCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATT
+CATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCT
+CACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTA
+GCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCA
+CATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
+ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGC
+CTATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTAT
+CCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGT
+GAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTATCC
+GCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTA
+CTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
+TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCAC
+GAAACGGGATCAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAAT
+CACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTACTTCTCT
+TCCTTCTCTCCTTAATGACATTAACACTATTCTCACCAGACCTCCTAGGC
+GACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCCCTCCCCACAT
+CAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
+CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTA
+GCAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATAATATTTCG
+CCCACTAAGCCAATCACTTTATTGACTCCTAGCCGCAGACCTCCTCATTC
+TAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGA
+CAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATACCAAC
+TATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
+TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAG
+GACAAATCAGAGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAA
+GATTCTAATTTAAACTATTCTCTGTTCTTTCATGGGGAAGCAGATTTGGG
+TACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTAC
+ATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAATACTTGACCA
+CCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
+TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAAC
+TCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTT
+AACAGTACATAGTACATAAAGTCATTTACCGTACATAGCACATTACAGTC
+AAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCTTG
+ACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCT
+CGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
+ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCC
+CTTAAATAAGACATCACGATG
diff --git a/testdata/picard/metrics/chrMReads.sam b/testdata/picard/metrics/chrMReads.sam
new file mode 100644
index 0000000..1a94f52
--- /dev/null
+++ b/testdata/picard/metrics/chrMReads.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:70:17903:4536 512 chrM 54 0 36M * 0 0 GTATTTTTGTCTGGGGGGTGTGTACGCGATAGTATT IIIIIIII#IIIIIIIIIIIIG#IIIIIIIIII#II RG:Z:62A40.2 ZL:i:135 NM:i:9 ZP:i:1 UQ:i:18
+62A40AAXX101028:2:52:4674:15453 512 chrM 6113 0 2M * 0 0 TG =3 RG:Z:62A40.2 ZL:i:164 NM:i:3 ZP:i:6113 UQ:i:84
+62A40AAXX101028:2:90:10278:1575 1024 chrM 6275 0 36M * 0 0 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:93:3981:7576 1024 chrM 6275 0 36M * 0 0 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
+62A40AAXX101028:2:70:17903:4536 512 chrM 54 0 36M * 0 0 GTATTTTTGTCTGGGGGGTGTGTACGCGATAGTATT IIIIIIIIHIIIIIIIIIIIIGIIIIIIIIIIIIII RG:Z:62A40.2 ZL:i:135 NM:i:9 ZP:i:1 UQ:i:18
diff --git a/testdata/picard/quality/chrM.part.intervallist b/testdata/picard/quality/chrM.part.intervallist
new file mode 100644
index 0000000..86ac9ca
--- /dev/null
+++ b/testdata/picard/quality/chrM.part.intervallist
@@ -0,0 +1,5 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+chrM 1 1000 + interval-1
+chrM 2001 3000 + interval-2
+
diff --git a/testdata/picard/quality/chrM.reference.fasta b/testdata/picard/quality/chrM.reference.fasta
new file mode 100644
index 0000000..020e694
--- /dev/null
+++ b/testdata/picard/quality/chrM.reference.fasta
@@ -0,0 +1,333 @@
+>chrM
+GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCAT
+TTGGTATTTTCGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTG
+GAGCCGGAGCACCCTATGTCGCAGTATCTGTCTTTGATTCCTGCCTCATT
+CTATTATTTATCGCACCTACGTTCAATATTACAGGCGAACATACCTACTA
+AAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATAACAATTGAAT
+GTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA
+AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGC
+CAAACCCCAAAAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAAT
+TTTATCTTTAGGCGGTATGCACTTTTAACAGTCACCCCCCAACTAACACA
+TTATTTTCCCCTCCCACTCCCATACTACTAATCTCATCAATACAACCCCC
+GCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCATACCCCGAAC
+CAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA
+AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAA
+ATAGGTTTGGTCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGC
+AAGCATCCCCGTTCCAGTGAGTTCACCCTCTAAATCACCACGATCAAAAG
+GGACAAGCATCAAGCACGCAGCAATGCAGCTCAAAACGCTTAGCCTAGCC
+ACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAATAAACGAAAGT
+TTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC
+GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTT
+TAGATCACCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAA
+CTCCAGTTGACACAAAATAGACTACGAAAGTGGCTTTAACATATCTGAAC
+ACACAATAGCTAAGACCCAAACTGGGATTAGATACCCCACTATGCTTAGC
+CCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAGAACACTACGA
+GCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA
+GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGC
+TCAGCCTATATACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGT
+AAGCGCAAGTACCCACGTAAAGACGTTAGGTCAAGGTGTAGCCCATGAGG
+TGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTT
+ATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTGAGAGTAGAGT
+GCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC
+TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATA
+GAGGAGACAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACG
+AACCAGAGTGTAGCTTAACACAAAGCACCCAACTTACACTTAGGAGATTT
+CAACTTAACTTGACCGCTCTGAGCTAAACCTAGCCCCAAACCCACTCCAC
+CTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGG
+CGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA
+TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTT
+CTGCATAATGAATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAA
+GACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCC
+GTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCT
+ACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTT
+TAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG
+TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGA
+GTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGA
+AAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCCCAAACATATAACT
+GAACTCCTCACACCCAATTGGACCAATCTATCACCCTATAGAAGAACTAA
+TGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAAGCCTGCGTCA
+GATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA
+ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAG
+GAAAGGTTAAAAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTT
+TACCAAAAACATCACCTCTAGCATCACCAGTATTAGAGGCACCGCCTGCC
+CAGTGACACATGTTTAACGGCCGCGGTACCCTAACCGTGCAaaggtagca
+taatcacttgttccttaaatagggacctgtatgaatggctccacgagggt
+tcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg
+cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTA
+ATGCAAACAGTACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCA
+TTAAAAATTTCGGTTGGGGCGACCTCGGAGCAGAACCCAACCTCCGAGCA
+GTACATGCTAAGACTTCACCAGTCAAAGCGAACTACTATACTCAATTGAT
+CCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATC
+CTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT
+CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGA
+TTAAAGTCCTACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTT
+CTATCTACTTCAAATTCCTCCCTGTACGAAAGGACAAGAGAAATAAGGCC
+TACTTCACAAAGCGCCTTCCCCCGTAAATGATATCATCTCAACTTAGTAT
+TATACCCACACCCACCCAAGAACAGGGTTTgttaagatggcagagcccgg
+taatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct
+taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAA
+TCGCAATGGCATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATA
+CAACTACGCAAAGGCCCCAACGTTGTAGGCCCCTACGGGCTACTACAACC
+CTTCGCTGACGCCATAAAACTCTTCACCAAAGAGCCCCTAAAACCCGCCA
+CATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGCTCTCACCATC
+GCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT
+CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACT
+CAATCCTCTGATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGC
+GCACTGCGAGCAGTAGCCCAAACAATCTCATATGAAGTCACCCTAGCCAT
+CATTCTACTATCAACATTACTAATAAGTGGCTCCTTTAACCTCTCCACCC
+TTATCACAACACAAGAACACCTCTGATTACTCCTGCCATCATGACCCTTG
+GCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT
+CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAAT
+ACGCCGCAGGCCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATT
+ATTATAATAAACACCCTCACCACTACAATCTTCCTAGGAACAACATATGA
+CGCACTCTCCCCTGAACTCTACACAACATATTTTGTCACCAAGACCCTAC
+TTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCCCCGATTCCGC
+TACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT
+AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTC
+CCCCTCAAACCTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGT
+AAATAATAGGAGCTTAAACCCCCTTATTTctaggactatgagaatcgaac
+ccatccctgagaatccaaaattctccgtgccacctatcacaccccatcct
+aAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTG
+GTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC
+TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATT
+TTTTACCTGAGTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTC
+TAACCAAAAAAATAAACCCTCGTTCCACAGAAGCTGCCATCAAGTATTTC
+CTCACGCAAGCAACCGCATCCATAATCCTTCTAATAGCTATCCTCTTCAA
+CAATATACTCTCCGGACAATGAACCATAACCAATACTACCAATCAATACT
+CATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC
+TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGG
+CCTGCTTCTTCTCACATGACAAAAACTAGCCCCCATCTCAATCATATACC
+AAATCTCTCCCTCACTAAACGTAAGCCTTCTCCTCACTCTCTCAATCTTA
+TCCATCATAGCAGGCAGTTGAGGTGGATTAAACCAAACCCAGCTACGCAA
+AATCTTAGCATACTCCTCAATTACCCACATAGGATGAATAATAGCAGTTC
+TACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC
+CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGAC
+CCTACTACTATCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAA
+TTCCATCCACCCTCCTCTCCCTAGGAGGCCTGCCCCCGCTAACCGGCTTT
+TTGCCCAAATGGGCCATTATCGAAGAATTCACAAAAAACAATAGCCTCAT
+CATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTCTACTTCTACC
+TACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC
+GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCC
+CACACTCATCGCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATAC
+TAATAATCTTATAGAAATTTAGGTTAAATACAGACCAAGAGCCTTCAAAG
+CCCTCAGTAAGTTGCAATACTTAATTTCTGCAACAGCTAAGGACTGCAAA
+ACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAA
+GCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC
+TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAA
+AAAGGCGGGAGAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCA
+ATTCAATATGAAAATCACCTCGGAGCTGGTAAAAAGAGGCCTAACCCCTG
+TCTTTAGATTTACAGTCCAATGCTTCACTCAGCCATTTTACCTCACCCCC
+ACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCACAAAGACATTG
+GAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT
+CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGG
+TAACGACCACATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAA
+TCTTCTTCATAGTAATACCCATCATAATCGGAGGCTTTGGCAACTGACTA
+GTTCCCCTAATAATCGGTGCCCCCGATATGGCGTTTCCCCGCATAAACAA
+CATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTGCTCGCATCTG
+CTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA
+GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTC
+CTTACACCTAGCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCA
+CAACAATTATCAATATAAAACCCCCTGCCATAACCCAATACCAAACGCCC
+CTCTTCGTCTGATCCGTCCTAATCACAGCAGTCCTACTTCTCCTATCTCT
+CCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGACCGCAACCTCA
+ACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA
+CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACC
+AGGCTTCGGAATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAG
+AACCATTTGGATACATAGGTATGGTCTGAGCTATGATATCAATTGGCTTC
+CTAGGGTTTATCGTGTGAGCACACCATATATTTACAGTAGGAATAGACGT
+AGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCA
+CCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG
+AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCAC
+CGTAGGTGGCCTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCG
+TACTACACGACACGTACTACGTTGTAGCTCACTTCCACTATGTCCTATCA
+ATAGGAGCTGTATTTGCCATCATAGGAGGCTTCATTCACTGATTTCCCCT
+ATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATCCATTTCACTA
+TCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC
+CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCAC
+ATGAAACATCCTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAA
+TATTAATAATTTTCATGATTTGAGAAGCCTTCGCTTCGAAGCGAAAAGTC
+CTAATAGTAGAAGAACCCTCCATAAACCTGGAGTGACTATATGGATGCCC
+CCCACCCTACCACACATTCGAAGAACCCGTATACATAAAATCTAGACAaa
+aaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc
+ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGT
+CAAAGTTAAATTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGC
+GCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTTATCA
+CCTTTCATGATCACGCCCTCATAATCATTTTCCTTATCTGCTTCCTAGTC
+CTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTAATACTAACAT
+CTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA
+TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGAC
+GAGGTCAACGATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTA
+CTGAACCTACGAGTACACCGACTACGGCGGACTAATCTTCAACTCCTACA
+TACTTCCCCCATTATTCCTAGAACCAGGCGACCTGCGACTCCTTGACGTT
+GACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTATAATAATTAC
+ATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA
+CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGA
+CCGGGGGTATACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAG
+TTTCATGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAG
+GGCCCGTATTTACCCTATAGCACCCCCTCTACCCCCTCTAGAGCCCACTG
+TAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAAC
+ACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA
+TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATA
+TTAAACACAAACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAA
+AAATTATAACAAACCCTGAGAACCAAAATGAACGAAAATCTGTTCGCTTC
+ATTCATTGCCCCCACAATCCTAGGCCTACCCGCCGCAGTACTGATCATTC
+TATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCATCAACAACCGA
+CTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT
+AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCT
+TAATCATTTTTATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCA
+TTTACACCAACCACCCAACTATCTATAAACCTAGCCATGGCCATCCCCTT
+ATGAGCGGGCGCAGTGATTATAGGCTTTCGCTCTAAGATTAAAAATGCCC
+TAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTATCCCCATACTA
+GTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT
+ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTG
+GAAGCGCCACCCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATC
+ATCTTCACAATTCTAATTCTACTGACTATCCTAGAAATCGCTGTCGCCTT
+AATCCAAGCCTACGTTTTCACACTTCTAGTAAGCCTCTACCTGCACGACA
+ACACATAATGACCCACCAATCACATGCCTATCATATAGTAAAACCCAGCC
+CATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA
+GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACT
+AACCAACACACTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAA
+GCACATACCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATAC
+GGGATAATCCTATTTATTACCTCAGAAGTTTTTTTCTTCGCAGGATTTTT
+CTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAACTAGGAGGGC
+ACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC
+CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCA
+CCATAGTCTAATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTA
+TTACAATTTTACTGGGTCTCTATTTTACCCTCCTACAAGCCTCAGAGTAC
+TTCGAGTCTCCCTTCACCATTTCCGACGGCATCTACGGCTCAACATTTTT
+TGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGCTCAACTTTCC
+TCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT
+CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGT
+TTGACTATTTCTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTA
+GTATAAATAGTACCGTTAACTTCCAATTAACTAGTTTTGACAACATTCAA
+AAAAGAGTAATAAACTTCGCCTTAATTTTAATAATCAACACCCTCCTAGC
+CTTACTACTAATAATTATTACATTTTGACTACCACAACTCAACGGCTACA
+TAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC
+CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATT
+ATTTGATCTAGAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAA
+CAACTAACCTGCCACTAATAGTTATGTCATCCCTCTTATTAATCATCATC
+CTAGCCCTAAGTCTGGCCTATGAGTGACTACAAAAAGGATTAGACTGAGC
+CGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGACTCATTAAATT
+ATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA
+GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCAT
+ATCCTCCCTACTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAG
+CTACTCTCATAACCCTCAACACCCACTCCCTCTTAGCCAATATTGTGCCT
+ATTGCCATACTAGTCTTTGCCGCCTGCGAAGCAGCGGTGGGCCTAGCCCT
+ACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTACATAACCTAA
+ACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC
+TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCAC
+AGCCTAATTATTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAA
+CAACCTATTTAGCTGTTCCCCAACCTTTTCCTCCGACCCCCTAACAACCC
+CCCTCCTAATACTAACTACCTGACTCCTACCCCTCACAATCATGGCAAGC
+CAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAACTCTACCTCTC
+TATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG
+AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTG
+GCTATCATCACCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCAC
+ATACTTCCTATTCTACACCCTAGTAGGCTCCCTTCCCCTACTCATCGCAC
+TAATTTACACTCACAACACCCTAGGCTCACTAAACATTCTACTACTCACT
+CTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACTTAATATGACT
+AGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT
+TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTA
+CTTGCCGCAGTACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCAC
+ACTCATTCTCAACCCCCTGACAAAACACATAGCCTACCCCTTCCTTGTAC
+TATCCCTATGAGGCATAATTATAACAAGCTCCATCTGCCTACGACAAACA
+GACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACATAGCCCTCGT
+AGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA
+TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCA
+AACTCAAACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGG
+ACTTCAAACTCTACTCCCACTAATAGCTTTTTGATGACTTCTAGCAAGCC
+TCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCT
+GTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGG
+ACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA
+CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTC
+ACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCT
+ATCCCTCAACCCCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTT
+TAACCAAAACATCAGATTGTGAATCTGACAACAGAGGCTTACGACCCCTT
+ATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCCCCATGTCTAA
+CAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA
+GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACA
+CTACTATAACCACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACC
+ACCCTCGTTAACCCTAACAAAAAAAACTCATACCCCCATTATGTAAAATC
+CATTGTCGCATCCACCTTTATTATCAGTCTCTTCCCCACAACAATATTCA
+TGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTGAGCCACAACC
+CAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT
+ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCAC
+TGTGATATATAAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTA
+CTCATTTTCCTAATTACCATACTAATCTTAGTTACCGCTAACAACCTATT
+CCAACTGTTCATCGGCTGAGAGGGCGTAGGAATTATATCCTTCTTGCTCA
+TCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGCCATTCAAGCA
+GTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG
+ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAA
+ACGCTAATCCAAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCA
+GGCAAATCAGCCCAATTAGGTCTCCACCCCTGACTCCCCTCAGCCATAGA
+AGGCCCCACCCCAGTCTCAGCCCTACTCCACTCAAGCACTATAGTTGTAG
+CAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGAAAATAGCCCA
+CTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC
+AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCT
+CCACTTCAAGTCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAA
+CCACACCTAGCATTCCTGCACATCTGTACCCACGCCTTCTTCAAAGCCAT
+ACTATTTATGTGCTCCGGGTCCATCATCCACAACCTTAACAATGAACAAG
+ATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCTCACTTCAACC
+TCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG
+TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAA
+ACGCCTGAGCCCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCC
+TATAGCACTCGAATAATTCTTCTCACCCTAACAGGTCAACCTCGCTTCCC
+CACCCTTACTAACATTAACGAAAATAACCCCACCCTACTAAACCCCATTA
+AACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCATTACTAACAAC
+ATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT
+CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCA
+ACTACCTAACCAACAAACTTAAAATAAAATCCCCACTATGCACATTTTAT
+TTCTCCAACATACTCGGATTCTACCCTAGCATCACACACCGCACAATCCC
+CTATCTAGGCCTTCTTACGAGCCAAAACCTGCCCCTACTCCTCCTAGACC
+TAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACAGCACCAAATC
+TCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT
+CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAAC
+CTATTCCCCCGAGCAATCTCAATTACAATATATACACCAACAAACAATGT
+TCAACCAGTAACCACTACTAATCAACGCCCATAATCATACAAAGCCCCCG
+CACCAATAGGATCCTCCCGAATCAACCCTGACCCCTCTCCTTCATAAATT
+ATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCACCCCATCATA
+CTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA
+CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCA
+ATAGCCATCGCTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATA
+AATTAAAAAAACTATTAAACCCATATAACCTCCCCCAAAATTCAGAATAA
+TAACACACCCGACCACACCGCTAACAATCAGTACTAAACCCCCATAAATA
+GGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTAAACCCACACT
+CAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA
+CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATG
+ACCCCAATACGCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATT
+CATCGACCTCCCCACCCCATCCAACATCTCCGCATGATGAAACTTCGGCT
+CACTCCTTGGCGCCTGCCTGATCCTCCAAATCACCACAGGACTATTCCTA
+GCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCATCAATCGCCCA
+CATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA
+ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGC
+CTATATTACGGATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTAT
+CCTCCTGCTTGCAACTATAGCAACAGCCTTCATAGGCTATGTCCTCCCGT
+GAGGCCAAATATCATTCTGAGGGGCCACAGTAATTACAAACTTACTATCC
+GCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGAGGCTA
+CTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT
+TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCAC
+GAAACGGGATCAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAAT
+CACCTTCCACCCTTACTACACAATCAAAGACGCCCTCGGCTTACTTCTCT
+TCCTTCTCTCCTTAATGACATTAACACTATTCTCACCAGACCTCCTAGGC
+GACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCCCTCCCCACAT
+CAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC
+CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTA
+GCAATAATCCCCATCCTCCATATATCCAAACAACAAAGCATAATATTTCG
+CCCACTAAGCCAATCACTTTATTGACTCCTAGCCGCAGACCTCCTCATTC
+TAACCTGAATCGGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGA
+CAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCCTAATACCAAC
+TATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA
+TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAG
+GACAAATCAGAGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAA
+GATTCTAATTTAAACTATTCTCTGTTCTTTCATGGGGAAGCAGATTTGGG
+TACCACCCAAGTATTGACTCACCCATCAACAACCGCTATGTATTTCGTAC
+ATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAATACTTGACCA
+CCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT
+TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAAC
+TCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTT
+AACAGTACATAGTACATAAAGTCATTTACCGTACATAGCACATTACAGTC
+AAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGGGGTCCCTTG
+ACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTGCTACTCTCCT
+CGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC
+ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCC
+CTTAAATAAGACATCACGATG
diff --git a/testdata/picard/quality/chrMReads.sam b/testdata/picard/quality/chrMReads.sam
new file mode 100644
index 0000000..03ad862
--- /dev/null
+++ b/testdata/picard/quality/chrMReads.sam
@@ -0,0 +1,8 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:70:17903:4536 512 chrM 54 0 36M * 0 0 GTATTTTTGTCTGGGGGGTGTGTACGCGATAGTATT IIIIIIII#IIIIIIIIIIIIG#IIIIIIIIII#II RG:Z:62A40.2 ZL:i:135 NM:i:9 ZP:i:1 UQ:i:18
+62A40AAXX101028:2:52:4674:15453 512 chrM 6113 0 36M * 0 0 GTATTTTTGTCTGGGGGGTGTGTACGCGATAGTATT IIIIIIII#IIIIIIIIIIIIG#IIIIIIIIII#II RG:Z:62A40.2 ZL:i:164 NM:i:3 ZP:i:6113 UQ:i:84
+62A40AAXX101028:2:90:10278:1575 1024 chrM 6275 0 36M * 0 0 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:93:3981:7576 1024 chrM 6275 0 36M * 0 0 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
+62A40AAXX101028:2:70:17903:4536 512 chrM 54 0 36M * 0 0 GTATTTTTGTCTGGGGGGTGTGTACGCGATAGTATT IIIIIIIIHIIIIIIIIIIIIGIIIIIIIIIIIIII RG:Z:62A40.2 ZL:i:135 NM:i:9 ZP:i:1 UQ:i:18
diff --git a/testdata/picard/quality/chrMReadsDiffereingLengths.sam b/testdata/picard/quality/chrMReadsDiffereingLengths.sam
new file mode 100644
index 0000000..630d49b
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsDiffereingLengths.sam
@@ -0,0 +1,5 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:93:3981:7576 99 chrM 100 0 36M chrM 130 66 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:93:3981:7576 147 chrM 130 0 35M chrM 100 -66 GGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIIIHIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
diff --git a/testdata/picard/quality/chrMReadsMateUnmapped.sam b/testdata/picard/quality/chrMReadsMateUnmapped.sam
new file mode 100644
index 0000000..90d3326
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsMateUnmapped.sam
@@ -0,0 +1,7 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:93:3981:7576 155 chrM 130 0 36M * 0 0 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
+62A40AAXX101028:2:90:10278:1575 153 chrM 131 0 36M * 0 0 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
+62A40AAXX101028:2:93:3981:7576 103 * 0 0 * chrM 130 0 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:90:10278:1575 101 * 0 0 * chrM 131 0 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
diff --git a/testdata/picard/quality/chrMReadsMated.sam b/testdata/picard/quality/chrMReadsMated.sam
new file mode 100644
index 0000000..56ad2f7
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsMated.sam
@@ -0,0 +1,5 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:93:3981:7576 99 chrM 100 0 36M chrM 130 66 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIAAAAAAAAAAAAAAAAA RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:93:3981:7576 147 chrM 130 0 36M chrM 100 -66 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA BBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCC RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
\ No newline at end of file
diff --git a/testdata/picard/quality/chrMReadsMatedRev.sam b/testdata/picard/quality/chrMReadsMatedRev.sam
new file mode 100644
index 0000000..f0bee71
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsMatedRev.sam
@@ -0,0 +1,5 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:90:10278:1575 99 chrM 130 0 36M chrM 100 -66 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT BBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCC RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:90:10278:1575 147 chrM 100 0 36M chrM 130 66 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIIIIIIIIIAAAAAAAAAAAAAAAAA RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
diff --git a/testdata/picard/quality/chrMReadsMatedRevOrder.sam b/testdata/picard/quality/chrMReadsMatedRevOrder.sam
new file mode 100644
index 0000000..044df49
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsMatedRevOrder.sam
@@ -0,0 +1,5 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:90:10278:1575 147 chrM 130 0 36M chrM 100 -66 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT BBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCC RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:90:10278:1575 99 chrM 100 0 36M chrM 130 66 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIIIIIIIIIAAAAAAAAAAAAAAAAA RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
diff --git a/testdata/picard/quality/chrMReadsMatedSameStrand.sam b/testdata/picard/quality/chrMReadsMatedSameStrand.sam
new file mode 100644
index 0000000..77d523a
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsMatedSameStrand.sam
@@ -0,0 +1,5 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:90:10278:1575 67 chrM 100 0 36M chrM 110 10 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:90:10278:1575 131 chrM 110 0 36M chrM 100 -10 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
diff --git a/testdata/picard/quality/chrMReadsSecondaryAlignSoft.sam b/testdata/picard/quality/chrMReadsSecondaryAlignSoft.sam
new file mode 100644
index 0000000..215ecbd
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsSecondaryAlignSoft.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:93:3981:7576 99 chrM 100 0 36M chrM 130 66 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:93:3981:7576 147 chrM 130 0 6S30M chrM 100 -66 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
+62A40AAXX101028:2:93:3981:7576 355 chrM 1300 0 6M30S chrM 100 -66 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
diff --git a/testdata/picard/quality/chrMReadsSupplementalAlignSoft.sam b/testdata/picard/quality/chrMReadsSupplementalAlignSoft.sam
new file mode 100644
index 0000000..223893c
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsSupplementalAlignSoft.sam
@@ -0,0 +1,6 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:93:3981:7576 99 chrM 100 0 36M chrM 130 66 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
+62A40AAXX101028:2:93:3981:7576 147 chrM 130 0 6S30M chrM 100 -66 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
+62A40AAXX101028:2:93:3981:7576 2147 chrM 1300 0 6M30S chrM 100 -66 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
diff --git a/testdata/picard/quality/chrMReadsUnMated.sam b/testdata/picard/quality/chrMReadsUnMated.sam
new file mode 100644
index 0000000..dfd6658
--- /dev/null
+++ b/testdata/picard/quality/chrMReadsUnMated.sam
@@ -0,0 +1,5 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16299 AS:mm9 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at RG ID:62A40.2 PL:illumina PU:62A40AAXX101028.2 LB:Solexa-45345 DT:2010-10-28T00:00:00-0400 SM:RRBS885 CN:BI
+62A40AAXX101028:2:93:3981:7576 0 chrM 130 0 36M * 0 0 CGGCGTTAAAGTATTTAGTTGATTCGTTATATTTTA IIIIIIIIIIIHIIIIIIIIIIIIFIIII at HIIIIG RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:196
+62A40AAXX101028:2:90:10278:1575 4 * 0 0 * * 0 0 TAGGTTGAATAGTTTATTTTTTTTTAGCAGGGAACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII RG:Z:62A40.2 ZL:i:116 NM:i:5 ZP:i:6275 UQ:i:199
diff --git a/testdata/net/sf/picard/sam/CleanSam/fits_with_deletion.sam b/testdata/picard/sam/CleanSam/fits_with_deletion.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CleanSam/fits_with_deletion.sam
rename to testdata/picard/sam/CleanSam/fits_with_deletion.sam
diff --git a/testdata/net/sf/picard/sam/CleanSam/long_trailing_insertion.sam b/testdata/picard/sam/CleanSam/long_trailing_insertion.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CleanSam/long_trailing_insertion.sam
rename to testdata/picard/sam/CleanSam/long_trailing_insertion.sam
diff --git a/testdata/net/sf/picard/sam/CleanSam/overhang_with_deletion.sam b/testdata/picard/sam/CleanSam/overhang_with_deletion.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CleanSam/overhang_with_deletion.sam
rename to testdata/picard/sam/CleanSam/overhang_with_deletion.sam
diff --git a/testdata/net/sf/picard/sam/CleanSam/simple_fits.sam b/testdata/picard/sam/CleanSam/simple_fits.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CleanSam/simple_fits.sam
rename to testdata/picard/sam/CleanSam/simple_fits.sam
diff --git a/testdata/net/sf/picard/sam/CleanSam/simple_overhang.sam b/testdata/picard/sam/CleanSam/simple_overhang.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CleanSam/simple_overhang.sam
rename to testdata/picard/sam/CleanSam/simple_overhang.sam
diff --git a/testdata/net/sf/picard/sam/CleanSam/trailing_insertion.sam b/testdata/picard/sam/CleanSam/trailing_insertion.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CleanSam/trailing_insertion.sam
rename to testdata/picard/sam/CleanSam/trailing_insertion.sam
diff --git a/testdata/picard/sam/CollectGcBiasMetrics/Mheader.dict b/testdata/picard/sam/CollectGcBiasMetrics/Mheader.dict
new file mode 100644
index 0000000..a61d88e
--- /dev/null
+++ b/testdata/picard/sam/CollectGcBiasMetrics/Mheader.dict
@@ -0,0 +1,2 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chrM LN:16903 UR:chrM.reference.fasta
\ No newline at end of file
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/bigger_seq_dict.sam b/testdata/picard/sam/CompareSAMs/bigger_seq_dict.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/bigger_seq_dict.sam
rename to testdata/picard/sam/CompareSAMs/bigger_seq_dict.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/chr21.sam b/testdata/picard/sam/CompareSAMs/chr21.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/chr21.sam
rename to testdata/picard/sam/CompareSAMs/chr21.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/diff_coords.sam b/testdata/picard/sam/CompareSAMs/diff_coords.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/diff_coords.sam
rename to testdata/picard/sam/CompareSAMs/diff_coords.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/example2.sam b/testdata/picard/sam/CompareSAMs/example2.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/example2.sam
rename to testdata/picard/sam/CompareSAMs/example2.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/genomic_sorted.sam b/testdata/picard/sam/CompareSAMs/genomic_sorted.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/genomic_sorted.sam
rename to testdata/picard/sam/CompareSAMs/genomic_sorted.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/genomic_sorted_5.sam b/testdata/picard/sam/CompareSAMs/genomic_sorted_5.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/genomic_sorted_5.sam
rename to testdata/picard/sam/CompareSAMs/genomic_sorted_5.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/genomic_sorted_5_plus.sam b/testdata/picard/sam/CompareSAMs/genomic_sorted_5_plus.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/genomic_sorted_5_plus.sam
rename to testdata/picard/sam/CompareSAMs/genomic_sorted_5_plus.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/group_same_coord.sam b/testdata/picard/sam/CompareSAMs/group_same_coord.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/group_same_coord.sam
rename to testdata/picard/sam/CompareSAMs/group_same_coord.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/group_same_coord_diff_order.sam b/testdata/picard/sam/CompareSAMs/group_same_coord_diff_order.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/group_same_coord_diff_order.sam
rename to testdata/picard/sam/CompareSAMs/group_same_coord_diff_order.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/has_non_primary.sam b/testdata/picard/sam/CompareSAMs/has_non_primary.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/has_non_primary.sam
rename to testdata/picard/sam/CompareSAMs/has_non_primary.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/unmapped_first.sam b/testdata/picard/sam/CompareSAMs/unmapped_first.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/unmapped_first.sam
rename to testdata/picard/sam/CompareSAMs/unmapped_first.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/unmapped_second.sam b/testdata/picard/sam/CompareSAMs/unmapped_second.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/unmapped_second.sam
rename to testdata/picard/sam/CompareSAMs/unmapped_second.sam
diff --git a/testdata/net/sf/picard/sam/CompareSAMs/unsorted.sam b/testdata/picard/sam/CompareSAMs/unsorted.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/CompareSAMs/unsorted.sam
rename to testdata/picard/sam/CompareSAMs/unsorted.sam
diff --git a/testdata/picard/sam/GatherBamFiles/indUnknownChrom.bam b/testdata/picard/sam/GatherBamFiles/indUnknownChrom.bam
new file mode 100644
index 0000000..08fee5e
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indUnknownChrom.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr1.bam b/testdata/picard/sam/GatherBamFiles/indchr1.bam
new file mode 100644
index 0000000..9560275
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr1.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr2.bam b/testdata/picard/sam/GatherBamFiles/indchr2.bam
new file mode 100644
index 0000000..81b2f70
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr2.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr3.bam b/testdata/picard/sam/GatherBamFiles/indchr3.bam
new file mode 100644
index 0000000..0d7ad8c
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr3.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr4.bam b/testdata/picard/sam/GatherBamFiles/indchr4.bam
new file mode 100644
index 0000000..aa27dab
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr4.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr5.bam b/testdata/picard/sam/GatherBamFiles/indchr5.bam
new file mode 100644
index 0000000..ea6a608
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr5.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr6.bam b/testdata/picard/sam/GatherBamFiles/indchr6.bam
new file mode 100644
index 0000000..ae4bb11
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr6.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr7.bam b/testdata/picard/sam/GatherBamFiles/indchr7.bam
new file mode 100644
index 0000000..a4eecd4
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr7.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/indchr8.bam b/testdata/picard/sam/GatherBamFiles/indchr8.bam
new file mode 100644
index 0000000..cf69d57
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/indchr8.bam differ
diff --git a/testdata/picard/sam/GatherBamFiles/orig.bam b/testdata/picard/sam/GatherBamFiles/orig.bam
new file mode 100644
index 0000000..ee7e9b5
Binary files /dev/null and b/testdata/picard/sam/GatherBamFiles/orig.bam differ
diff --git a/testdata/picard/sam/MarkDuplicates/markDuplicatesWithMateCigar.pairSet.swap.sam b/testdata/picard/sam/MarkDuplicates/markDuplicatesWithMateCigar.pairSet.swap.sam
new file mode 100644
index 0000000..63151fa
--- /dev/null
+++ b/testdata/picard/sam/MarkDuplicates/markDuplicatesWithMateCigar.pairSet.swap.sam
@@ -0,0 +1,42 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chrM LN:16299 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:11c8af2a2528b25f2c080ab7da42edda SP:Mus musculus
+ at SQ SN:chr1 LN:197195432 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:f05d753079c455c0e57af88eeda24493 SP:Mus musculus
+ at SQ SN:chr2 LN:181748087 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:9b9d64dc89ecc73d3288eb38af3f94bd SP:Mus musculus
+ at SQ SN:chr3 LN:159599783 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:0a692666a1b8526e1d1e799beb71b6d0 SP:Mus musculus
+ at SQ SN:chr4 LN:155630120 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:f5993a04396a06ed6b28fa42b2429be0 SP:Mus musculus
+ at SQ SN:chr5 LN:152537259 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:f90804fb8fe9cb06076d51a710fb4563 SP:Mus musculus
+ at SQ SN:chr6 LN:149517037 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:258a37e20815bb7e3f2e974b9d4dd295 SP:Mus musculus
+ at SQ SN:chr7 LN:152524553 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:e0d6cea6f72cb4d9f8d0efc1d29dd180 SP:Mus musculus
+ at SQ SN:chr8 LN:131738871 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:5f217cb8a9685b9879add3ae110cabd7 SP:Mus musculus
+ at SQ SN:chr9 LN:124076172 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:dde08574942fc18050195618cc3f35af SP:Mus musculus
+ at SQ SN:chr10 LN:129993255 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:be7e6a13cc6b9da7c1da7b7fc32c5506 SP:Mus musculus
+ at SQ SN:chr11 LN:121843856 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:e0099550b3d3943fb9bb7af6fa6952c1 SP:Mus musculus
+ at SQ SN:chr12 LN:121257530 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:1f9c11dc6f288f93e9fab56772a36e85 SP:Mus musculus
+ at SQ SN:chr13 LN:120284312 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:a7b4bb418aa21e0ec59d9e2a1fe1810b SP:Mus musculus
+ at SQ SN:chr14 LN:125194864 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:09d1c8449706a17d40934302a0a3b671 SP:Mus musculus
+ at SQ SN:chr15 LN:103494974 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:e41c8b42b0921378b1fdd5172f6be067 SP:Mus musculus
+ at SQ SN:chr16 LN:98319150 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:e051b3930c2557ade21d67db41f3a518 SP:Mus musculus
+ at SQ SN:chr17 LN:95272651 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:47eede15e5761fb9c2267627f18211e7 SP:Mus musculus
+ at SQ SN:chr18 LN:90772031 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:9f9d41cfdb9d91b62b928a3eb4eb6928 SP:Mus musculus
+ at SQ SN:chr19 LN:61342430 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:591f8486f82c22442bb8463595a18e0a SP:Mus musculus
+ at SQ SN:chrX LN:166650296 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:3d0d9df898d2c830b858f91255d8a1eb SP:Mus musculus
+ at SQ SN:chrY LN:15902555 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:5ff564f9fbc8cb87bcad6cfa6874902b SP:Mus musculus
+ at SQ SN:chr1_random LN:1231697 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:801e0bcd6ae33eeddfe2a4e6fc9f3d36 SP:Mus musculus
+ at SQ SN:chr3_random LN:41899 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:d6340e90da5796b7069708735f82ae3e SP:Mus musculus
+ at SQ SN:chr4_random LN:160594 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:af94651d419f27e242d0f82d6d5dbe67 SP:Mus musculus
+ at SQ SN:chr5_random LN:357350 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:c2db94dc571b1a7cd12eb98564c9fd1e SP:Mus musculus
+ at SQ SN:chr7_random LN:362490 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:b1f2189dd882e9c21cdbbf57ba85f4fe SP:Mus musculus
+ at SQ SN:chr8_random LN:849593 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:3b0dfe8c89728afd327e229037570f6e SP:Mus musculus
+ at SQ SN:chr9_random LN:449403 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:b9845732324c3c38b767a7652410068f SP:Mus musculus
+ at SQ SN:chr13_random LN:400311 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:0ef638f43ade721b3aed0386dc8aa4cf SP:Mus musculus
+ at SQ SN:chr16_random LN:3994 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:eb0fc598242fe03d53021929cea74c6b SP:Mus musculus
+ at SQ SN:chr17_random LN:628739 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:f5a3fcd550c795e0a1bc3f355bb54577 SP:Mus musculus
+ at SQ SN:chrX_random LN:1785075 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:3a45dd9ba2fbba51c13d600585ebed09 SP:Mus musculus
+ at SQ SN:chrY_random LN:58682461 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:5cbfdcc893c1417a651fc2f3c5732e6a SP:Mus musculus
+ at SQ SN:chrUn_random LN:5900358 UR:ftp://hgdownload.cse.ucsc.edu/goldenPath/Mus_musculus_assembly9/bigZips/chromFa.tar.gz AS:mm9 M5:933191e84e50e31ea6943a88e8bc6f61 SP:Mus musculus
+ at RG ID:00001.3 PL:illumina PU:00001ABXX101026.3.TTGAGCCT LB:Solexa-45924 DT:2010-10-26T00:00:00-0400 SM:stat2_120 CN:BI
+ at PG ID:00001ABXX.3 VN:0.7.1-9 CL:/seq/software/picard/current/3rd_party/maq/maq map
+00001ABXX101026:3:1:6530:123586 65 chrX 113054885 64 68M = 113054885 1 AGCCCTTTTTAAATACTGTAGATCACAAAGCAAAAAATAAAACTAAACATTAGGAAAAGAAAATGATA HHHHHHHHHHHHEHHHFCDC>B?EEEHE at HF;EEE at D@D@<9DEEB>E<FBD;@@<;C(?55?<B;6? MC:Z:68M PG:Z:00001ABXX.3 RG:Z:00001.3 NM:i:0 MQ:i:10 UQ:i:0 DS:i:136
+00001ABXX101026:3:1:6530:123586 129 chrX 113054885 10 68M = 113054885 -1 AGCCCTTTTTTTTTACTGTAGATCACAAAGGTAATTCTATAGTGTCTTTTCAGGATTCAAAGTCTTAG HHHHHGHGHHHFEHHHBEFEHEBCDEHEEBB5E=EHBHF=FF:FECF;BA?B at GCCGGGFFGCGF6EE MC:Z:68M PG:Z:00001ABXX.3 RG:Z:00001.3 NM:i:29 MQ:i:64 UQ:i:984 DS:i:136
+00001ABXX101026:3:1:6533:123569 1089 chrX 113054885 67 68M = 113054885 1 AGCCCTTTTTAAATACTGTAGATCACAAAGCAAAAAATAAAACTAAACATTAGGAAAAGAAAATGATA /HFHHHHFEFFHHHHHHHHHHHDHHHHHHHHHEHHHGHHHGHHFG?DHHHFHHFD at FFG?@EG at BHFG MC:Z:68M PG:Z:00001ABXX.3 RG:Z:00001.3 NM:i:0 MQ:i:10 UQ:i:0 DS:i:136
+00001ABXX101026:3:1:6533:123569 1153 chrX 113054885 10 68M = 113054885 -1 AGCCCTTTTTTTTTACTGTAGATCACAAAGGTAATTCTATAGTGTCTTTTCAGGATTCAAAGTCTTAG HHHHHHEHHHHHHG@=FGDBFDFDFFHFHFGCBC;DFCCEFD1C+D<D<?EB8FDEFCG.FGCFEB=D MC:Z:68M PG:Z:00001ABXX.3 RG:Z:00001.3 NM:i:29 MQ:i:67 UQ:i:964 DS:i:136
diff --git a/testdata/net/sf/picard/sam/MarkDuplicates/merge1.sam b/testdata/picard/sam/MarkDuplicates/merge1.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MarkDuplicates/merge1.sam
rename to testdata/picard/sam/MarkDuplicates/merge1.sam
diff --git a/testdata/net/sf/picard/sam/MarkDuplicates/merge2.sam b/testdata/picard/sam/MarkDuplicates/merge2.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MarkDuplicates/merge2.sam
rename to testdata/picard/sam/MarkDuplicates/merge2.sam
diff --git a/testdata/net/sf/picard/sam/MarkDuplicates/merge3.sam b/testdata/picard/sam/MarkDuplicates/merge3.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MarkDuplicates/merge3.sam
rename to testdata/picard/sam/MarkDuplicates/merge3.sam
diff --git a/testdata/picard/sam/MarkDuplicates/npe.perhaps.sam b/testdata/picard/sam/MarkDuplicates/npe.perhaps.sam
new file mode 100644
index 0000000..ae3ad2a
--- /dev/null
+++ b/testdata/picard/sam/MarkDuplicates/npe.perhaps.sam
@@ -0,0 +1,92 @@
+ at HD VN:1.5 GO:none SO:coordinate
+ at SQ SN:1 LN:249250621 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:1b22b98cdeb4a9304cb5d48026a85128 SP:Homo Sapiens
+ at SQ SN:2 LN:243199373 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:a0d9851da00400dec1098a9255ac712e SP:Homo Sapiens
+ at SQ SN:3 LN:198022430 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:fdfd811849cc2fadebc929bb925902e5 SP:Homo Sapiens
+ at SQ SN:4 LN:191154276 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:23dccd106897542ad87d2765d28a19a1 SP:Homo Sapiens
+ at SQ SN:5 LN:180915260 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:0740173db9ffd264d728f32784845cd7 SP:Homo Sapiens
+ at SQ SN:6 LN:171115067 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:1d3a93a248d92a729ee764823acbbc6b SP:Homo Sapiens
+ at SQ SN:7 LN:159138663 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:618366e953d6aaad97dbe4777c29375e SP:Homo Sapiens
+ at SQ SN:8 LN:146364022 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:96f514a9929e410c6651697bded59aec SP:Homo Sapiens
+ at SQ SN:9 LN:141213431 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:3e273117f15e0a400f01055d9f393768 SP:Homo Sapiens
+ at SQ SN:10 LN:135534747 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:988c28e000e84c26d552359af1ea2e1d SP:Homo Sapiens
+ at SQ SN:11 LN:135006516 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:98c59049a2df285c76ffb1c6db8f8b96 SP:Homo Sapiens
+ at SQ SN:12 LN:133851895 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:51851ac0e1a115847ad36449b0015864 SP:Homo Sapiens
+ at SQ SN:13 LN:115169878 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:283f8d7892baa81b510a015719ca7b0b SP:Homo Sapiens
+ at SQ SN:14 LN:107349540 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:98f3cae32b2a2e9524bc19813927542e SP:Homo Sapiens
+ at SQ SN:15 LN:102531392 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:e5645a794a8238215b2cd77acb95a078 SP:Homo Sapiens
+ at SQ SN:16 LN:90354753 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:fc9b1a7b42b97a864f56b348b06095e6 SP:Homo Sapiens
+ at SQ SN:17 LN:81195210 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:351f64d4f4f9ddd45b35336ad97aa6de SP:Homo Sapiens
+ at SQ SN:18 LN:78077248 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:b15d4b2d29dde9d3e4f93d1d0f2cbc9c SP:Homo Sapiens
+ at SQ SN:19 LN:59128983 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:1aacd71f30db8e561810913e0b72636d SP:Homo Sapiens
+ at SQ SN:20 LN:63025520 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:0dec9660ec1efaaf33281c0d5ea2560f SP:Homo Sapiens
+ at SQ SN:21 LN:48129895 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:2979a6085bfe28e3ad6f552f361ed74d SP:Homo Sapiens
+ at SQ SN:22 LN:51304566 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:a718acaa6135fdca8357d5bfe94211dd SP:Homo Sapiens
+ at SQ SN:X LN:155270560 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:7e0e2e580297b7764e31dbc80c2540dd SP:Homo Sapiens
+ at SQ SN:Y LN:59373566 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:1fa3474750af0948bdf97d5a0ee52e51 SP:Homo Sapiens
+ at SQ SN:MT LN:16569 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:c68f52674c9fb33aef52dcf399755519 SP:Homo Sapiens
+ at SQ SN:GL000207.1 LN:4262 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:f3814841f1939d3ca19072d9e89f3fd7 SP:Homo Sapiens
+ at SQ SN:GL000226.1 LN:15008 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:1c1b2cd1fccbc0a99b6a447fa24d1504 SP:Homo Sapiens
+ at SQ SN:GL000229.1 LN:19913 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:d0f40ec87de311d8e715b52e4c7062e1 SP:Homo Sapiens
+ at SQ SN:GL000231.1 LN:27386 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:ba8882ce3a1efa2080e5d29b956568a4 SP:Homo Sapiens
+ at SQ SN:GL000210.1 LN:27682 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:851106a74238044126131ce2a8e5847c SP:Homo Sapiens
+ at SQ SN:GL000239.1 LN:33824 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:99795f15702caec4fa1c4e15f8a29c07 SP:Homo Sapiens
+ at SQ SN:GL000235.1 LN:34474 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:118a25ca210cfbcdfb6c2ebb249f9680 SP:Homo Sapiens
+ at SQ SN:GL000201.1 LN:36148 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:dfb7e7ec60ffdcb85cb359ea28454ee9 SP:Homo Sapiens
+ at SQ SN:GL000247.1 LN:36422 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:7de00226bb7df1c57276ca6baabafd15 SP:Homo Sapiens
+ at SQ SN:GL000245.1 LN:36651 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:89bc61960f37d94abf0df2d481ada0ec SP:Homo Sapiens
+ at SQ SN:GL000197.1 LN:37175 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:6f5efdd36643a9b8c8ccad6f2f1edc7b SP:Homo Sapiens
+ at SQ SN:GL000203.1 LN:37498 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:96358c325fe0e70bee73436e8bb14dbd SP:Homo Sapiens
+ at SQ SN:GL000246.1 LN:38154 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:e4afcd31912af9d9c2546acf1cb23af2 SP:Homo Sapiens
+ at SQ SN:GL000249.1 LN:38502 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:1d78abec37c15fe29a275eb08d5af236 SP:Homo Sapiens
+ at SQ SN:GL000196.1 LN:38914 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:d92206d1bb4c3b4019c43c0875c06dc0 SP:Homo Sapiens
+ at SQ SN:GL000248.1 LN:39786 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:5a8e43bec9be36c7b49c84d585107776 SP:Homo Sapiens
+ at SQ SN:GL000244.1 LN:39929 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:0996b4475f353ca98bacb756ac479140 SP:Homo Sapiens
+ at SQ SN:GL000238.1 LN:39939 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:131b1efc3270cc838686b54e7c34b17b SP:Homo Sapiens
+ at SQ SN:GL000202.1 LN:40103 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:06cbf126247d89664a4faebad130fe9c SP:Homo Sapiens
+ at SQ SN:GL000234.1 LN:40531 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:93f998536b61a56fd0ff47322a911d4b SP:Homo Sapiens
+ at SQ SN:GL000232.1 LN:40652 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:3e06b6741061ad93a8587531307057d8 SP:Homo Sapiens
+ at SQ SN:GL000206.1 LN:41001 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:43f69e423533e948bfae5ce1d45bd3f1 SP:Homo Sapiens
+ at SQ SN:GL000240.1 LN:41933 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:445a86173da9f237d7bcf41c6cb8cc62 SP:Homo Sapiens
+ at SQ SN:GL000236.1 LN:41934 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:fdcd739913efa1fdc64b6c0cd7016779 SP:Homo Sapiens
+ at SQ SN:GL000241.1 LN:42152 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:ef4258cdc5a45c206cea8fc3e1d858cf SP:Homo Sapiens
+ at SQ SN:GL000243.1 LN:43341 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:cc34279a7e353136741c9fce79bc4396 SP:Homo Sapiens
+ at SQ SN:GL000242.1 LN:43523 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:2f8694fc47576bc81b5fe9e7de0ba49e SP:Homo Sapiens
+ at SQ SN:GL000230.1 LN:43691 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:b4eb71ee878d3706246b7c1dbef69299 SP:Homo Sapiens
+ at SQ SN:GL000237.1 LN:45867 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:e0c82e7751df73f4f6d0ed30cdc853c0 SP:Homo Sapiens
+ at SQ SN:GL000233.1 LN:45941 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:7fed60298a8d62ff808b74b6ce820001 SP:Homo Sapiens
+ at SQ SN:GL000204.1 LN:81310 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:efc49c871536fa8d79cb0a06fa739722 SP:Homo Sapiens
+ at SQ SN:GL000198.1 LN:90085 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:868e7784040da90d900d2d1b667a1383 SP:Homo Sapiens
+ at SQ SN:GL000208.1 LN:92689 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:aa81be49bf3fe63a79bdc6a6f279abf6 SP:Homo Sapiens
+ at SQ SN:GL000191.1 LN:106433 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:d75b436f50a8214ee9c2a51d30b2c2cc SP:Homo Sapiens
+ at SQ SN:GL000227.1 LN:128374 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:a4aead23f8053f2655e468bcc6ecdceb SP:Homo Sapiens
+ at SQ SN:GL000228.1 LN:129120 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:c5a17c97e2c1a0b6a9cc5a6b064b714f SP:Homo Sapiens
+ at SQ SN:GL000214.1 LN:137718 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:46c2032c37f2ed899eb41c0473319a69 SP:Homo Sapiens
+ at SQ SN:GL000221.1 LN:155397 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:3238fb74ea87ae857f9c7508d315babb SP:Homo Sapiens
+ at SQ SN:GL000209.1 LN:159169 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:f40598e2a5a6b26e84a3775e0d1e2c81 SP:Homo Sapiens
+ at SQ SN:GL000218.1 LN:161147 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:1d708b54644c26c7e01c2dad5426d38c SP:Homo Sapiens
+ at SQ SN:GL000220.1 LN:161802 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:fc35de963c57bf7648429e6454f1c9db SP:Homo Sapiens
+ at SQ SN:GL000213.1 LN:164239 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:9d424fdcc98866650b58f004080a992a SP:Homo Sapiens
+ at SQ SN:GL000211.1 LN:166566 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:7daaa45c66b288847b9b32b964e623d3 SP:Homo Sapiens
+ at SQ SN:GL000199.1 LN:169874 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:569af3b73522fab4b40995ae4944e78e SP:Homo Sapiens
+ at SQ SN:GL000217.1 LN:172149 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:6d243e18dea1945fb7f2517615b8f52e SP:Homo Sapiens
+ at SQ SN:GL000216.1 LN:172294 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:642a232d91c486ac339263820aef7fe0 SP:Homo Sapiens
+ at SQ SN:GL000215.1 LN:172545 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:5eb3b418480ae67a997957c909375a73 SP:Homo Sapiens
+ at SQ SN:GL000205.1 LN:174588 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:d22441398d99caf673e9afb9a1908ec5 SP:Homo Sapiens
+ at SQ SN:GL000219.1 LN:179198 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:f977edd13bac459cb2ed4a5457dba1b3 SP:Homo Sapiens
+ at SQ SN:GL000224.1 LN:179693 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:d5b2fc04f6b41b212a4198a07f450e20 SP:Homo Sapiens
+ at SQ SN:GL000223.1 LN:180455 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:399dfa03bf32022ab52a846f7ca35b30 SP:Homo Sapiens
+ at SQ SN:GL000195.1 LN:182896 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:5d9ec007868d517e73543b005ba48535 SP:Homo Sapiens
+ at SQ SN:GL000212.1 LN:186858 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:563531689f3dbd691331fd6c5730a88b SP:Homo Sapiens
+ at SQ SN:GL000222.1 LN:186861 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:6fe9abac455169f50470f5a6b01d0f59 SP:Homo Sapiens
+ at SQ SN:GL000200.1 LN:187035 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:75e4c8d17cd4addf3917d1703cacaf25 SP:Homo Sapiens
+ at SQ SN:GL000193.1 LN:189789 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:dbb6e8ece0b5de29da56601613007c2a SP:Homo Sapiens
+ at SQ SN:GL000194.1 LN:191469 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:6ac8f815bf8e845bb3031b73f812c012 SP:Homo Sapiens
+ at SQ SN:GL000225.1 LN:211173 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:63945c3e6962f28ffd469719a747e73c SP:Homo Sapiens
+ at SQ SN:GL000192.1 LN:547496 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:GRCh37 M5:325ba9e808f669dfeee210fdd7b470ac SP:Homo Sapiens
+ at SQ SN:NC_007605 LN:171823 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta AS:NC_007605.1 M5:6743bd63b3ff2b5b8985d8933c53290a SP:Epstein-Barr virus
+ at RG ID:00001.1 PL:illumina PU:00001ABXX101026.1.AACTTGAC LB:Solexa-38820 DT:2010-10-26T00:00:00-0400 SM:TCGA-44-2665-10A-01D-0969-08 CN:BI
+ at PG ID:GATK IndelRealigner VN:1.4-14-g3550ea7 CL:knownAlleles=[(RodBinding name=knownAlleles source=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.dbsnp.vcf), (RodBinding name=knownAlleles2 source=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.1kg_pilot_indels.vcf)] targetIntervals=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.indel_cleaner.intervals LODThresholdForCleaning=0.4 consensusDeterminationModel=KNOWNS_ONLY entropyThr [...]
+ at PG ID:MarkDuplicates PN:MarkDuplicates PP:bwa VN:1.464(1311) CL:net.sf.picard.sam.MarkDuplicates INPUT=[/seq/picardtemp3/mccowan/bqsr.final/00001ABXX/C1-144_2010-10-26_2012-12-27/1/Solexa-38820/00001ABXX.1.aligned.bam] OUTPUT=/seq/picardtemp3/mccowan/bqsr.final/00001ABXX/C1-144_2010-10-26_2012-12-27/1/Solexa-38820/00001ABXX.1.aligned.duplicates_marked.bam METRICS_FILE=/seq/picardtemp3/mccowan/bqsr.final/00001ABXX/C1-144_2010-10-26_2012-12-27/1/Solexa-38820/00001ABXX.1.duplicate_metrics [...]
+ at PG ID:bwa PN:bwa VN:0.5.9-tpx CL:bwa aln Homo_sapiens_assembly19.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f 00001ABXX.1.Solexa-38820.Homo_sapiens_assembly19.2.sai 00001ABXX.1.Solexa-38820.2.fastq.gz; bwa aln Homo_sapiens_assembly19.fasta -q 5 -l 32 -k 2 -t $NSLOTS -o 1 -f 00001ABXX.1.Solexa-38820.Homo_sapiens_assembly19.1.sai 00001ABXX.1.Solexa-38820.1.fastq.gz; bwa sampe -t $NSLOTS -T -P -f 00001ABXX.1.Solexa-38820.Homo_sapiens_assembly19.aligned_bwa.sam Homo_sapiens_assembly19.fasta 000 [...]
+00001ABXX101026:1:1:5213:130006 177 12 108855323 37 17S51M = 108855339 -1 GATGGAAAGCTGTCCAAACCATCCAAGAAATGAGATATTGAGCTAAACATTTCATTCTTCCTCATTTC ##################<68<97:;:?<6>>>:B=>?=9??=>>?2?B@@;=;;?@?A=>>>>==== MC:Z:33S35M MD:Z:51 PG:Z:MarkDuplicates RG:Z:00001.1 AM:i:37 NM:i:0 SM:i:37 MQ:i:37 OQ:Z:##################B7:A=6??BD?4EEEB>DEBC?@F?BEB*D<EDAC8BDAFEEEHFFGGEI UQ:i:0
+00001ABXX101026:1:1:5213:130006 113 12 108855339 37 33S35M = 108855323 1 TTTTGCTATTTTTCCAGTCCATCTAAGAAATGAGGTATTGAGCTAAACATTTCATTCTTCCTCATTTC ###################################################################/ MC:Z:17S51M MD:Z:1A33 PG:Z:MarkDuplicates RG:Z:00001.1 AM:i:37 NM:i:1 SM:i:37 MQ:i:37 OQ:Z:###################################################################? UQ:i:2
diff --git a/testdata/picard/sam/MarkDuplicates/optical_dupes.sam b/testdata/picard/sam/MarkDuplicates/optical_dupes.sam
new file mode 100644
index 0000000..587c69a
--- /dev/null
+++ b/testdata/picard/sam/MarkDuplicates/optical_dupes.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chr1 LN:101
+ at SQ SN:chr2 LN:101
+ at SQ SN:chr3 LN:101
+ at SQ SN:chr4 LN:101
+ at SQ SN:chr5 LN:101
+ at SQ SN:chr6 LN:101
+ at SQ SN:chr7 LN:404
+ at SQ SN:chr8 LN:202
+ at RG ID:1AAXX.1 SM:Hi,Mom! LB:mylib PL:ILLUMINA
+ at PG ID:MarkDuplicates PN:MarkDuplicates VN:1 CL:MarkDuplicates merge1.sam PP:bwa
+ at PG ID:bwa PN:bwa VN:1 CL:bwa aln
+C4N4WACXX140821:8:1112:2344:1984 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:1AAXX.1 PG:Z:MarkDuplicates
+C4N4WACXX140821:8:1112:2344:1985 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:1AAXX.1 PG:Z:MarkDuplicates
+C4N4WACXX140821:8:1112:2344:1984 163 chr7 302 255 101M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:1AAXX.1 PG:Z:MarkDuplicates
+C4N4WACXX140821:8:1112:2344:1985 163 chr7 302 255 101M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:1AAXX.1 PG:Z:MarkDuplicates
diff --git a/testdata/picard/sam/MarkDuplicates/optical_dupes_casava.sam b/testdata/picard/sam/MarkDuplicates/optical_dupes_casava.sam
new file mode 100644
index 0000000..d135320
--- /dev/null
+++ b/testdata/picard/sam/MarkDuplicates/optical_dupes_casava.sam
@@ -0,0 +1,16 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chr1 LN:101
+ at SQ SN:chr2 LN:101
+ at SQ SN:chr3 LN:101
+ at SQ SN:chr4 LN:101
+ at SQ SN:chr5 LN:101
+ at SQ SN:chr6 LN:101
+ at SQ SN:chr7 LN:404
+ at SQ SN:chr8 LN:202
+ at RG ID:1AAXX.1 SM:Hi,Mom! LB:mylib PL:ILLUMINA
+ at PG ID:MarkDuplicates PN:MarkDuplicates VN:1 CL:MarkDuplicates merge1.sam PP:bwa
+ at PG ID:bwa PN:bwa VN:1 CL:bwa aln
+instr:run:C4N4WACXX140821:8:1112:2344:1984 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:1AAXX.1 PG:Z:MarkDuplicates
+instr:run:C4N4WACXX140821:8:1112:2344:1985 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:1AAXX.1 PG:Z:MarkDuplicates
+instr:run:C4N4WACXX140821:8:1112:2344:1984 163 chr7 302 255 101M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:1AAXX.1 PG:Z:MarkDuplicates
+instr:run:C4N4WACXX140821:8:1112:2344:1985 163 chr7 302 255 101M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:1AAXX.1 PG:Z:MarkDuplicates
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/aligned.badorder.sam b/testdata/picard/sam/MergeBamAlignment/aligned.badorder.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/aligned.badorder.sam
rename to testdata/picard/sam/MergeBamAlignment/aligned.badorder.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/aligned.supplement.sam b/testdata/picard/sam/MergeBamAlignment/aligned.supplement.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/aligned.supplement.sam
rename to testdata/picard/sam/MergeBamAlignment/aligned.supplement.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/allread1.trimmed.aligned.sam b/testdata/picard/sam/MergeBamAlignment/allread1.trimmed.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/allread1.trimmed.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/allread1.trimmed.aligned.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/allread2.trimmed.aligned.sam b/testdata/picard/sam/MergeBamAlignment/allread2.trimmed.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/allread2.trimmed.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/allread2.trimmed.aligned.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.aligned.sam b/testdata/picard/sam/MergeBamAlignment/cliptest.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/cliptest.aligned.sam
diff --git a/testdata/picard/sam/MergeBamAlignment/cliptest.dict b/testdata/picard/sam/MergeBamAlignment/cliptest.dict
new file mode 100644
index 0000000..3b3f5d9
--- /dev/null
+++ b/testdata/picard/sam/MergeBamAlignment/cliptest.dict
@@ -0,0 +1,2 @@
+ at HD VN:1.5 SO:unsorted
+ at SQ SN:chr1 LN:1000 UR:file:testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.fasta M5:17522ddd273279f4595f50fea9864734
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.fasta b/testdata/picard/sam/MergeBamAlignment/cliptest.fasta
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.fasta
rename to testdata/picard/sam/MergeBamAlignment/cliptest.fasta
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.unmapped.sam b/testdata/picard/sam/MergeBamAlignment/cliptest.unmapped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/cliptest.unmapped.sam
rename to testdata/picard/sam/MergeBamAlignment/cliptest.unmapped.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/firsthalf.read1.trimmed.aligned.sam b/testdata/picard/sam/MergeBamAlignment/firsthalf.read1.trimmed.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/firsthalf.read1.trimmed.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/firsthalf.read1.trimmed.aligned.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/firsthalf.read2.trimmed.aligned.sam b/testdata/picard/sam/MergeBamAlignment/firsthalf.read2.trimmed.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/firsthalf.read2.trimmed.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/firsthalf.read2.trimmed.aligned.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/multihit.aligned.sam b/testdata/picard/sam/MergeBamAlignment/multihit.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/multihit.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/multihit.aligned.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/multihit.filter.fragment.unmapped.sam b/testdata/picard/sam/MergeBamAlignment/multihit.filter.fragment.unmapped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/multihit.filter.fragment.unmapped.sam
rename to testdata/picard/sam/MergeBamAlignment/multihit.filter.fragment.unmapped.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/multihit.filter.unmapped.sam b/testdata/picard/sam/MergeBamAlignment/multihit.filter.unmapped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/multihit.filter.unmapped.sam
rename to testdata/picard/sam/MergeBamAlignment/multihit.filter.unmapped.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/multihit.unmapped.sam b/testdata/picard/sam/MergeBamAlignment/multihit.unmapped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/multihit.unmapped.sam
rename to testdata/picard/sam/MergeBamAlignment/multihit.unmapped.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/secondhalf.read1.trimmed.aligned.sam b/testdata/picard/sam/MergeBamAlignment/secondhalf.read1.trimmed.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/secondhalf.read1.trimmed.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/secondhalf.read1.trimmed.aligned.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/secondhalf.read2.trimmed.aligned.sam b/testdata/picard/sam/MergeBamAlignment/secondhalf.read2.trimmed.aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/secondhalf.read2.trimmed.aligned.sam
rename to testdata/picard/sam/MergeBamAlignment/secondhalf.read2.trimmed.aligned.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/unmapped.badorder.sam b/testdata/picard/sam/MergeBamAlignment/unmapped.badorder.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/unmapped.badorder.sam
rename to testdata/picard/sam/MergeBamAlignment/unmapped.badorder.sam
diff --git a/testdata/net/sf/picard/sam/MergeBamAlignment/unmapped.sam b/testdata/picard/sam/MergeBamAlignment/unmapped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeBamAlignment/unmapped.sam
rename to testdata/picard/sam/MergeBamAlignment/unmapped.sam
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case1/chr11sub_file1.sam b/testdata/picard/sam/MergeSamFiles/case1/chr11sub_file1.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/case1/chr11sub_file1.sam
rename to testdata/picard/sam/MergeSamFiles/case1/chr11sub_file1.sam
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case1/chr11sub_file2.sam b/testdata/picard/sam/MergeSamFiles/case1/chr11sub_file2.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/case1/chr11sub_file2.sam
rename to testdata/picard/sam/MergeSamFiles/case1/chr11sub_file2.sam
diff --git a/testdata/picard/sam/MergeSamFiles/case1/expected_output.sam b/testdata/picard/sam/MergeSamFiles/case1/expected_output.sam
new file mode 100644
index 0000000..11b4dab
--- /dev/null
+++ b/testdata/picard/sam/MergeSamFiles/case1/expected_output.sam
@@ -0,0 +1,13 @@
+ at HD VN:1.5 GO:none SO:coordinate
+ at SQ SN:chrM LN:16571 AS:HG18 UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta M5:d2ed829b8a1628d16cbeee88e88e39eb SP:Homo sapiens
+ at RG ID:1 PL:ILLUMINA SM:sample1
+ at PG ID:1 PN:something
+ at PG ID:1.1 PN:A
+ at PG ID:1.1.2 PN:B
+ at PG ID:2 PN:C PP:1.1
+ at PG ID:2.1 PN:D PP:1.1.2
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file1.sam b/testdata/picard/sam/MergeSamFiles/case2/chr11sub_file1.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file1.sam
rename to testdata/picard/sam/MergeSamFiles/case2/chr11sub_file1.sam
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file2.sam b/testdata/picard/sam/MergeSamFiles/case2/chr11sub_file2.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file2.sam
rename to testdata/picard/sam/MergeSamFiles/case2/chr11sub_file2.sam
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file3.sam b/testdata/picard/sam/MergeSamFiles/case2/chr11sub_file3.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file3.sam
rename to testdata/picard/sam/MergeSamFiles/case2/chr11sub_file3.sam
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file4.sam b/testdata/picard/sam/MergeSamFiles/case2/chr11sub_file4.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/case2/chr11sub_file4.sam
rename to testdata/picard/sam/MergeSamFiles/case2/chr11sub_file4.sam
diff --git a/testdata/picard/sam/MergeSamFiles/case2/expected_output.sam b/testdata/picard/sam/MergeSamFiles/case2/expected_output.sam
new file mode 100644
index 0000000..6755f30
--- /dev/null
+++ b/testdata/picard/sam/MergeSamFiles/case2/expected_output.sam
@@ -0,0 +1,21 @@
+ at HD VN:1.5 GO:none SO:coordinate
+ at SQ SN:chrM LN:16571 AS:HG18 UR:/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta M5:d2ed829b8a1628d16cbeee88e88e39eb SP:Homo sapiens
+ at RG ID:1 PL:ILLUMINA SM:sample1
+ at RG ID:1.1 PL:ILLUMINA SM:sample2
+ at RG ID:1.1.2 PL:ILLUMINA SM:sample3
+ at PG ID:1 PN:A
+ at PG ID:1.1 PN:X
+ at PG ID:2 PN:B
+ at PG ID:2.3 PN:B PP:1
+ at PG ID:2.4 PN:B PP:1.1
+ at PG ID:3 PN:C PP:1
+ at PG ID:3.6 PN:Y PP:2.4
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1.1.1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACC [...]
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@@C [...]
+6194MAAXX100108:2:55:3087:12679:BI 99 chrM 50418 0 101M = 50678 360 TCAAACATAGTCAAAGAGAGGGAGATTTCTGGATAATCACTTAAGCCCATGGTTAAACATAAATGCAAATATGTTAATGTTTACTGAATAACTTATCTGTG 9<9 at A?A@?A=@BCCA at B@BAA at B@ABBACAA at A@C at ABACB@CBAA at BABA>BACCABAACDABABCCAA at B?BACAB>CCAABBACAAD?CB>?>?<9< RG:Z:1.1 E2:Z:CAGGGAGGGCGAGGGTGAGATTGTGGGGAGATGGGTGAGACGTTAAGACATTGATCCACATTTATACCCATAAGATTATGAATAATTTATTAGATATCTGT OQ:Z:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCCBCCCCCBCCCCCC at CCDCCDDCDACCC@ [...]
+6194MAAXX100108:2:55:3087:12679:BI 147 chrM 50678 0 101M = 50418 -360 TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT :99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9 RG:Z:1 E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
+6194MAAXX100108:2:55:3087:12679:BI 147 chrM 50678 0 101M = 50418 -360 TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT :99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9 RG:Z:1.1 E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCC [...]
+6194MAAXX100108:2:55:3087:12679:BI 147 chrM 50678 0 101M = 50418 -360 TATATATATAGAAAGAGAGAGAGGCAGAGATGTAAAGTAATTTATGGAGTTTGATGTTATGTCAGGGTAATTACATGATTATATAATTAACAGGTTTCTTT :99:=>?@>BABAAAC at CACAC@@BCACAAC;=BBC at AB@BB@@B@@CABBB@@B at C@@B@@AC@@@@A at B@>A at B@@B@@@@@A?A?@<?@=<>>;<=<9 RG:Z:1 E2:Z:ATATATATATTGGGAGTGTTTGTTACTCTTCTGTTCTGTTAGATGTTCTAGCTTCTGACCTCTCTTTGCCGCCACCTCCCCCCCCCCCCCACTTCCGACCC OQ:Z:CDCCCADCACCD at AC@CCCCCDCCCCCCCCCC;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCC [...]
+6194MAAXX100108:2:55:19789:20399:BI 73 chrM 50921 0 101M = 50921 0 CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN 97:>?A>>BB>@B@?@CA5@?5=C@############################################################################ RG:Z:1.1 E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??########################################################################### [...]
+6194MAAXX100108:2:55:19789:20399:BI 73 chrM 50921 0 101M = 50921 0 CAACCAGAAACCAGGCTGGGCGCTANAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAAGCTTACTGTCTAGAGGGCGAGGTACAAANNNNNN 97:>?A>>BB>@B@?@CA5@?5=C@############################################################################ RG:Z:1 E2:Z:ACCAAGTGGGAAGTTAGTTAAAAGGTCATTTTTTTTTTTTTTTTTTTGTTGTTTTGTTTTTTTCCCCAAAATACCATATTTTTTAAGATATTTTTTTTTGT OQ:Z:C>CCCC@@C@@CC@?CCC2@?8<??############################################################################ [...]
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/unsorted_input/1.sam b/testdata/picard/sam/MergeSamFiles/unsorted_input/1.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/unsorted_input/1.sam
rename to testdata/picard/sam/MergeSamFiles/unsorted_input/1.sam
diff --git a/testdata/net/sf/picard/sam/MergeSamFiles/unsorted_input/2.sam b/testdata/picard/sam/MergeSamFiles/unsorted_input/2.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/MergeSamFiles/unsorted_input/2.sam
rename to testdata/picard/sam/MergeSamFiles/unsorted_input/2.sam
diff --git a/testdata/picard/sam/PositionalDownsampleSam/header.dict b/testdata/picard/sam/PositionalDownsampleSam/header.dict
new file mode 100644
index 0000000..a932fee
--- /dev/null
+++ b/testdata/picard/sam/PositionalDownsampleSam/header.dict
@@ -0,0 +1,9 @@
+ at HD VN:1.0 SO:unsorted
+ at SQ SN:chr1 LN:10100 UR:header.fasta
+ at SQ SN:chr2 LN:10100 UR:header.fasta
+ at SQ SN:chr3 LN:10100 UR:header.fasta
+ at SQ SN:chr4 LN:10100 UR:header.fasta
+ at SQ SN:chr5 LN:10100 UR:header.fasta
+ at SQ SN:chr6 LN:10100 UR:header.fasta
+ at SQ SN:chr7 LN:40400 UR:header.fasta
+ at SQ SN:chr8 LN:20200 UR:header.fasta
diff --git a/testdata/picard/sam/SamFileConverterTest/unmapped.bam b/testdata/picard/sam/SamFileConverterTest/unmapped.bam
new file mode 100644
index 0000000..893e530
Binary files /dev/null and b/testdata/picard/sam/SamFileConverterTest/unmapped.bam differ
diff --git a/testdata/picard/sam/SamFileConverterTest/unmapped.cram b/testdata/picard/sam/SamFileConverterTest/unmapped.cram
new file mode 100644
index 0000000..c78d16f
Binary files /dev/null and b/testdata/picard/sam/SamFileConverterTest/unmapped.cram differ
diff --git a/testdata/picard/sam/SamFileConverterTest/unmapped.sam b/testdata/picard/sam/SamFileConverterTest/unmapped.sam
new file mode 100755
index 0000000..5dfafbc
--- /dev/null
+++ b/testdata/picard/sam/SamFileConverterTest/unmapped.sam
@@ -0,0 +1,14 @@
+ at HD VN:1.5 SO:queryname
+ at RG ID:0 PL:ILLUMINA SM:Hi,Mom!
+test:1 77 * 0 0 * * 0 0 GTACCCGGGGATCCCACTCTCTCCTTGCCCTTCATGATCTTGGCACTTTCGGAGTAATGGTCATAACATCAGTAAA ECEEEEEDDCCCDDDCDDDDEBDCCCCDBBD at DBCBCCCC:ACAA?CBCCCABCBBBBBBB?BBB?<?A?<7<<=9 RG:Z:0
+test:1 141 * 0 0 * * 0 0 TCGACTCTAGAGGATCCCACGAGTTTCACTGTTGTCACATATGCTGGAGTGCAGTGGTGCAATCTTGGCTTACTGC GGGGGGGGGGFGGGGGGGGGGGGFGGGGGGGFGGFGGDGEEE-:CECEECFEDE?FBCFD=@CBBADCF=CC:CCD RG:Z:0
+test:2 77 * 0 0 * * 0 0 GTACCCGGGGATCCCACGGTAACTGCTGACGGGAAGCTTGCTTTAAACCAGATTAGCCAGATCTCCATGAAGTCGC FDFFFFEDDDDCDFDDDFDBEEDCDEDDDDDCCCCDCCCCDCDCDBCEBCB at CAC=CCBCC?CAA at A@?@:?77<A RG:Z:0
+test:2 141 * 0 0 * * 0 0 TCGACTCTAGAGGATCCCACCCAGCCTAGGACCTAACACATAGCAAGTTCTCAGGAAAAACACACTAAGTGAATAA GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGFGGGEF<FFEECEEFGDDDGEGDGDBAFD?DC?=A=AD=A RG:Z:0
+test:3 589 * 0 0 * * 0 0 GTACCCGGGGATCCCACTGTTACCTCCTTCACTCCTCAAATCATCTCTTTGTAACAATGGACTGACATGGTCAACA A?AAA@???????@?@############################################################ RG:Z:0
+test:3 653 * 0 0 * * 0 0 TCGACTCTAGAGGATCCCACGCTCACACCACTGCATTCCCGCATGGGCGCCAGACTGCGCCTCTGCATCTAACGAC DDDDDDDDDDDCDDDDDDDD?:D=5*05A@*>AA5???###################################### RG:Z:0
+test:4 589 * 0 0 * * 0 0 GTACCCGGGGATCCCCCAGAGACTACGAAAAGGGGGGTGGAACAGTACTCTAAGAGAGACCATGTTCAACTCTGGG A?@@@@@@??????############################################################## RG:Z:0
+test:4 653 * 0 0 * * 0 0 TCGACTCTAGAGGATCCCCGGGCACAGATCGGACGAGCGTGGTGATGGGATAGAGTGTAGATGTCGTTGGTCGCTC BBBBBBBBBBBBBBBBBB########################################################## RG:Z:0
+test:5 77 * 0 0 * * 0 0 GTACCCGGGGATCCCACAGGAGGAGAAGCCAGAATTCCTCATCTGTGCCCAGGGCTGGGTCTGACAAACCAAAACT EEEEEEEEDDDEEEEEDD@@:B=B5??5=??:5=3=2===1,:80<?=???9+?###################### RG:Z:0
+test:5 141 * 0 0 * * 0 0 TCGACTCTAGAGGATCCCACGTCTGAAAGAAGAGCGGAGTGGTTGAAATGCAGAAAGTGAGGAGAAATGAACAGGA DDDDDDDDDDDDDDDDDDDD=BCD=C=ADD?A=BD?B???@52->B at B@C5BBBBB?@################## RG:Z:0
+test:6 77 * 0 0 * * 0 0 GTACCCGGGGATCCCACCCACCTTGTTTCCACTCTGGGGAGCAGAGCATGAGGCCTAGGCTAAGCTGGAGCCATAT GEGGGFAEDEDCEEEGGFEEEEGEFCEEDEDEDEDDCDBCDDDCDCDDDCCCBCC at CCBCCCBBCBBBBBCBBBBC RG:Z:0
+test:6 141 * 0 0 * * 0 0 TCGACTCTAGAGGATCCCACCAATGGGAGCCATTTCCTCATCTGTAAAAACAATAATATAGGCCTGTGGTTCAGAT CCCCC<EEEEDDDDDGGGGGGGGGFGGGDGGEDGGGGGGDFFCFDFFEFFGD at GACDFDDBDBDACBEBCC?-??# RG:Z:0
diff --git a/testdata/net/sf/picard/sam/aligned.sam b/testdata/picard/sam/aligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/aligned.sam
rename to testdata/picard/sam/aligned.sam
diff --git a/testdata/net/sf/picard/sam/aligned_queryname_sorted.bam b/testdata/picard/sam/aligned_queryname_sorted.bam
similarity index 100%
rename from testdata/net/sf/picard/sam/aligned_queryname_sorted.bam
rename to testdata/picard/sam/aligned_queryname_sorted.bam
diff --git a/testdata/net/sf/picard/sam/aligned_queryname_sorted.sam b/testdata/picard/sam/aligned_queryname_sorted.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/aligned_queryname_sorted.sam
rename to testdata/picard/sam/aligned_queryname_sorted.sam
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/sam/bam2fastq/nonpaired/.gitignore
similarity index 100%
copy from src/java/org/broad/tribble/util/ftp/.gitignore
copy to testdata/picard/sam/bam2fastq/nonpaired/.gitignore
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/bad/README.txt b/testdata/picard/sam/bam2fastq/paired/bad/README.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/bad/README.txt
rename to testdata/picard/sam/bam2fastq/paired/bad/README.txt
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/bad/grouped-unpaired-mate.sam b/testdata/picard/sam/bam2fastq/paired/bad/grouped-unpaired-mate.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/bad/grouped-unpaired-mate.sam
rename to testdata/picard/sam/bam2fastq/paired/bad/grouped-unpaired-mate.sam
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/bad/unpaired-mate.sam b/testdata/picard/sam/bam2fastq/paired/bad/unpaired-mate.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/bad/unpaired-mate.sam
rename to testdata/picard/sam/bam2fastq/paired/bad/unpaired-mate.sam
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/ok/README.txt b/testdata/picard/sam/bam2fastq/paired/ok/README.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/ok/README.txt
rename to testdata/picard/sam/bam2fastq/paired/ok/README.txt
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/ok/clipping_test.sam b/testdata/picard/sam/bam2fastq/paired/ok/clipping_test.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/ok/clipping_test.sam
rename to testdata/picard/sam/bam2fastq/paired/ok/clipping_test.sam
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/ok/first-mate-bof-last-mate-eof.sam b/testdata/picard/sam/bam2fastq/paired/ok/first-mate-bof-last-mate-eof.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/ok/first-mate-bof-last-mate-eof.sam
rename to testdata/picard/sam/bam2fastq/paired/ok/first-mate-bof-last-mate-eof.sam
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/ok/grouped-last-pair-mates-flipped.sam b/testdata/picard/sam/bam2fastq/paired/ok/grouped-last-pair-mates-flipped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/ok/grouped-last-pair-mates-flipped.sam
rename to testdata/picard/sam/bam2fastq/paired/ok/grouped-last-pair-mates-flipped.sam
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/ok/last-pair-mates-flipped.sam b/testdata/picard/sam/bam2fastq/paired/ok/last-pair-mates-flipped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/ok/last-pair-mates-flipped.sam
rename to testdata/picard/sam/bam2fastq/paired/ok/last-pair-mates-flipped.sam
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/ok/sorted-pair-no-rg.sam b/testdata/picard/sam/bam2fastq/paired/ok/sorted-pair-no-rg.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/ok/sorted-pair-no-rg.sam
rename to testdata/picard/sam/bam2fastq/paired/ok/sorted-pair-no-rg.sam
diff --git a/testdata/net/sf/picard/sam/bam2fastq/paired/ok/sorted-pair.sam b/testdata/picard/sam/bam2fastq/paired/ok/sorted-pair.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/bam2fastq/paired/ok/sorted-pair.sam
rename to testdata/picard/sam/bam2fastq/paired/ok/sorted-pair.sam
diff --git a/testdata/net/sf/picard/sam/basic.fasta b/testdata/picard/sam/basic.fasta
similarity index 100%
rename from testdata/net/sf/picard/sam/basic.fasta
rename to testdata/picard/sam/basic.fasta
diff --git a/testdata/net/sf/picard/sam/duplicate_sequence_names.fasta b/testdata/picard/sam/duplicate_sequence_names.fasta
similarity index 100%
rename from testdata/net/sf/picard/sam/duplicate_sequence_names.fasta
rename to testdata/picard/sam/duplicate_sequence_names.fasta
diff --git a/testdata/net/sf/picard/sam/fastq2bam/README.txt b/testdata/picard/sam/fastq2bam/README.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/README.txt
rename to testdata/picard/sam/fastq2bam/README.txt
diff --git a/src/java/org/broad/tribble/util/ftp/.gitignore b/testdata/picard/sam/fastq2bam/bad-format/0lines.txt
similarity index 100%
rename from src/java/org/broad/tribble/util/ftp/.gitignore
rename to testdata/picard/sam/fastq2bam/bad-format/0lines.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/1lines.txt b/testdata/picard/sam/fastq2bam/bad-format/1lines.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/1lines.txt
rename to testdata/picard/sam/fastq2bam/bad-format/1lines.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/2lines.txt b/testdata/picard/sam/fastq2bam/bad-format/2lines.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/2lines.txt
rename to testdata/picard/sam/fastq2bam/bad-format/2lines.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/3lines.txt b/testdata/picard/sam/fastq2bam/bad-format/3lines.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/3lines.txt
rename to testdata/picard/sam/fastq2bam/bad-format/3lines.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/bad-qual-header.txt b/testdata/picard/sam/fastq2bam/bad-format/bad-qual-header.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/bad-qual-header.txt
rename to testdata/picard/sam/fastq2bam/bad-format/bad-qual-header.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/bad-seq-header.txt b/testdata/picard/sam/fastq2bam/bad-format/bad-seq-header.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/bad-seq-header.txt
rename to testdata/picard/sam/fastq2bam/bad-format/bad-seq-header.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/extra-line.txt b/testdata/picard/sam/fastq2bam/bad-format/extra-line.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/extra-line.txt
rename to testdata/picard/sam/fastq2bam/bad-format/extra-line.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/too-many-quals.txt b/testdata/picard/sam/fastq2bam/bad-format/too-many-quals.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/too-many-quals.txt
rename to testdata/picard/sam/fastq2bam/bad-format/too-many-quals.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-format/tt b/testdata/picard/sam/fastq2bam/bad-format/tt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-format/tt
rename to testdata/picard/sam/fastq2bam/bad-format/tt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/dott b/testdata/picard/sam/fastq2bam/bad-paired/dott
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/dott
rename to testdata/picard/sam/fastq2bam/bad-paired/dott
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-a1.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair-a1.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-a1.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair-a1.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-a2.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair-a2.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-a2.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair-a2.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-b1.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair-b1.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-b1.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair-b1.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-b2.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair-b2.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair-b2.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair-b2.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-badnum.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair1-badnum.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-badnum.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair1-badnum.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-nonum.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair1-nonum.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-nonum.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair1-nonum.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-one-more-record.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair1-one-more-record.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-one-more-record.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair1-one-more-record.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-onetoken.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair1-onetoken.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair1-onetoken.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair1-onetoken.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair2-badnum.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair2-badnum.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair2-badnum.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair2-badnum.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair2-diff-name.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair2-diff-name.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair2-diff-name.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair2-diff-name.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair2-one-more-record.txt b/testdata/picard/sam/fastq2bam/bad-paired/pair2-one-more-record.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/bad-paired/pair2-one-more-record.txt
rename to testdata/picard/sam/fastq2bam/bad-paired/pair2-one-more-record.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/README.txt b/testdata/picard/sam/fastq2bam/fastq-illumina/README.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/README.txt
rename to testdata/picard/sam/fastq2bam/fastq-illumina/README.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/fastq-illumina/illumina-sanger_full_range_as_sanger-62.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/illumina-sanger_full_range_as_sanger-62.fastq
rename to testdata/picard/sam/fastq2bam/fastq-illumina/illumina-sanger_full_range_as_sanger-62.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/s_1_1_sequence.txt b/testdata/picard/sam/fastq2bam/fastq-illumina/s_1_1_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/s_1_1_sequence.txt
rename to testdata/picard/sam/fastq2bam/fastq-illumina/s_1_1_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/s_1_2_sequence.txt b/testdata/picard/sam/fastq2bam/fastq-illumina/s_1_2_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/s_1_2_sequence.txt
rename to testdata/picard/sam/fastq2bam/fastq-illumina/s_1_2_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/s_1_sequence.txt b/testdata/picard/sam/fastq2bam/fastq-illumina/s_1_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-illumina/s_1_sequence.txt
rename to testdata/picard/sam/fastq2bam/fastq-illumina/s_1_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq b/testdata/picard/sam/fastq2bam/fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq
rename to testdata/picard/sam/fastq2bam/fastq-sanger/5k-30BB2AAXX.3.aligned.sam.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/5k-v1-Rhodobacter_LW1.sam.fastq b/testdata/picard/sam/fastq2bam/fastq-sanger/5k-v1-Rhodobacter_LW1.sam.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/5k-v1-Rhodobacter_LW1.sam.fastq
rename to testdata/picard/sam/fastq2bam/fastq-sanger/5k-v1-Rhodobacter_LW1.sam.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/README.txt b/testdata/picard/sam/fastq2bam/fastq-sanger/README.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/README.txt
rename to testdata/picard/sam/fastq2bam/fastq-sanger/README.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/sanger_full_range_as_sanger-63.fastq b/testdata/picard/sam/fastq2bam/fastq-sanger/sanger_full_range_as_sanger-63.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-sanger/sanger_full_range_as_sanger-63.fastq
rename to testdata/picard/sam/fastq2bam/fastq-sanger/sanger_full_range_as_sanger-63.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/README.txt b/testdata/picard/sam/fastq2bam/fastq-solexa/README.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/README.txt
rename to testdata/picard/sam/fastq2bam/fastq-solexa/README.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/bad1.fastq b/testdata/picard/sam/fastq2bam/fastq-solexa/bad1.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/bad1.fastq
rename to testdata/picard/sam/fastq2bam/fastq-solexa/bad1.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/s_1_sequence.txt b/testdata/picard/sam/fastq2bam/fastq-solexa/s_1_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/s_1_sequence.txt
rename to testdata/picard/sam/fastq2bam/fastq-solexa/s_1_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_sanger.fastq b/testdata/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_sanger.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_sanger.fastq
rename to testdata/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_sanger.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_solexa.fastq b/testdata/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_solexa.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_solexa.fastq
rename to testdata/picard/sam/fastq2bam/fastq-solexa/solexa_full_range_as_solexa.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
similarity index 100%
copy from testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
copy to testdata/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/pair1.txt b/testdata/picard/sam/fastq2bam/ok-paired/pair1.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/ok-paired/pair1.txt
rename to testdata/picard/sam/fastq2bam/ok-paired/pair1.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/pair2.txt b/testdata/picard/sam/fastq2bam/ok-paired/pair2.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/ok-paired/pair2.txt
rename to testdata/picard/sam/fastq2bam/ok-paired/pair2.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/s_1_1_sequence.txt b/testdata/picard/sam/fastq2bam/ok-paired/s_1_1_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/ok-paired/s_1_1_sequence.txt
rename to testdata/picard/sam/fastq2bam/ok-paired/s_1_1_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/s_1_2_sequence.txt b/testdata/picard/sam/fastq2bam/ok-paired/s_1_2_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/ok-paired/s_1_2_sequence.txt
rename to testdata/picard/sam/fastq2bam/ok-paired/s_1_2_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/s_1_sequence.txt b/testdata/picard/sam/fastq2bam/ok-paired/s_1_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/ok-paired/s_1_sequence.txt
rename to testdata/picard/sam/fastq2bam/ok-paired/s_1_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/permissive-format/pair1.txt b/testdata/picard/sam/fastq2bam/permissive-format/pair1.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/permissive-format/pair1.txt
rename to testdata/picard/sam/fastq2bam/permissive-format/pair1.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/permissive-format/pair2.txt b/testdata/picard/sam/fastq2bam/permissive-format/pair2.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/permissive-format/pair2.txt
rename to testdata/picard/sam/fastq2bam/permissive-format/pair2.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/permissive-format/s_1_1_sequence.txt b/testdata/picard/sam/fastq2bam/permissive-format/s_1_1_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/permissive-format/s_1_1_sequence.txt
rename to testdata/picard/sam/fastq2bam/permissive-format/s_1_1_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/permissive-format/s_1_2_sequence.txt b/testdata/picard/sam/fastq2bam/permissive-format/s_1_2_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/permissive-format/s_1_2_sequence.txt
rename to testdata/picard/sam/fastq2bam/permissive-format/s_1_2_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/permissive-format/s_1_sequence.txt b/testdata/picard/sam/fastq2bam/permissive-format/s_1_sequence.txt
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/permissive-format/s_1_sequence.txt
rename to testdata/picard/sam/fastq2bam/permissive-format/s_1_sequence.txt
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/sequential-files/paired_end_R1_001.fastq
similarity index 100%
copy from testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
copy to testdata/picard/sam/fastq2bam/sequential-files/paired_end_R1_001.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/sequential-files/paired_end_R1_002.fastq
similarity index 100%
copy from testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
copy to testdata/picard/sam/fastq2bam/sequential-files/paired_end_R1_002.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/sequential-files/paired_end_R2_001.fastq
similarity index 100%
copy from testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
copy to testdata/picard/sam/fastq2bam/sequential-files/paired_end_R2_001.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/sequential-files/paired_end_R2_002.fastq
similarity index 100%
copy from testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
copy to testdata/picard/sam/fastq2bam/sequential-files/paired_end_R2_002.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/sequential-files/single_end_R1_001.fastq
similarity index 100%
copy from testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
copy to testdata/picard/sam/fastq2bam/sequential-files/single_end_R1_001.fastq
diff --git a/testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq b/testdata/picard/sam/fastq2bam/sequential-files/single_end_R1_002.fastq
similarity index 100%
rename from testdata/net/sf/picard/sam/fastq2bam/ok-paired/illumina-sanger_full_range_as_sanger-62.fastq
rename to testdata/picard/sam/fastq2bam/sequential-files/single_end_R1_002.fastq
diff --git a/testdata/net/sf/picard/sam/insert_size_metrics_test.sam b/testdata/picard/sam/insert_size_metrics_test.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/insert_size_metrics_test.sam
rename to testdata/picard/sam/insert_size_metrics_test.sam
diff --git a/testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_coord_sort_order.sam b/testdata/picard/sam/invalid_coord_sort_order.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/ValidateSamFileTest/invalid_coord_sort_order.sam
rename to testdata/picard/sam/invalid_coord_sort_order.sam
diff --git a/testdata/net/sf/picard/sam/merger.dict b/testdata/picard/sam/merger.dict
similarity index 100%
rename from testdata/net/sf/picard/sam/merger.dict
rename to testdata/picard/sam/merger.dict
diff --git a/testdata/net/sf/picard/sam/merger.fasta b/testdata/picard/sam/merger.fasta
similarity index 100%
rename from testdata/net/sf/picard/sam/merger.fasta
rename to testdata/picard/sam/merger.fasta
diff --git a/testdata/net/sf/picard/sam/onehalfaligned.sam b/testdata/picard/sam/onehalfaligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/onehalfaligned.sam
rename to testdata/picard/sam/onehalfaligned.sam
diff --git a/testdata/net/sf/picard/sam/otherhalfaligned.sam b/testdata/picard/sam/otherhalfaligned.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/otherhalfaligned.sam
rename to testdata/picard/sam/otherhalfaligned.sam
diff --git a/testdata/net/sf/picard/sam/revert_sam_basic.sam b/testdata/picard/sam/revert_sam_basic.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/revert_sam_basic.sam
rename to testdata/picard/sam/revert_sam_basic.sam
diff --git a/testdata/net/sf/picard/sam/revert_sam_negative.sam b/testdata/picard/sam/revert_sam_negative.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/revert_sam_negative.sam
rename to testdata/picard/sam/revert_sam_negative.sam
diff --git a/testdata/picard/sam/split_test.sam b/testdata/picard/sam/split_test.sam
new file mode 100755
index 0000000..7e79e48
--- /dev/null
+++ b/testdata/picard/sam/split_test.sam
@@ -0,0 +1,15 @@
+ at HD VN:1.0 SO:queryname
+ at RG ID:1 SM:foo LB:lib-1
+ at RG ID:2 SM:bar
+ at RG ID:3 SM:bar2 LB:lib-3
+ at RG ID:4 SM:bar2 LB:lib-1
+A 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
+A 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
+B 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:3
+B 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:3
+C 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:2
+C 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:2
+D 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
+D 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
+E 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:4
+E 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:4
diff --git a/testdata/picard/sam/split_test2.sam b/testdata/picard/sam/split_test2.sam
new file mode 100755
index 0000000..6b81e85
--- /dev/null
+++ b/testdata/picard/sam/split_test2.sam
@@ -0,0 +1,9 @@
+ at HD VN:1.0 SO:queryname
+ at RG ID:1 SM:foo LB:lib-1
+ at RG ID:3 SM:bar2 LB:lib-3
+A 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
+A 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
+B 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:3
+B 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:3
+D 77 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
+D 141 * 0 0 * * 0 0 CAACAGAAGC )'.*.+2,)) RG:Z:1
diff --git a/testdata/net/sf/picard/sam/summary_alignment_bisulfite_test.sam b/testdata/picard/sam/summary_alignment_bisulfite_test.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/summary_alignment_bisulfite_test.sam
rename to testdata/picard/sam/summary_alignment_bisulfite_test.sam
diff --git a/testdata/net/sf/picard/sam/summary_alignment_stats_test.fasta b/testdata/picard/sam/summary_alignment_stats_test.fasta
similarity index 100%
rename from testdata/net/sf/picard/sam/summary_alignment_stats_test.fasta
rename to testdata/picard/sam/summary_alignment_stats_test.fasta
diff --git a/testdata/net/sf/picard/sam/summary_alignment_stats_test.sam b/testdata/picard/sam/summary_alignment_stats_test.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/summary_alignment_stats_test.sam
rename to testdata/picard/sam/summary_alignment_stats_test.sam
diff --git a/testdata/net/sf/picard/sam/summary_alignment_stats_test2.sam b/testdata/picard/sam/summary_alignment_stats_test2.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/summary_alignment_stats_test2.sam
rename to testdata/picard/sam/summary_alignment_stats_test2.sam
diff --git a/testdata/net/sf/picard/sam/summary_alignment_stats_test_multiple.sam b/testdata/picard/sam/summary_alignment_stats_test_multiple.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/summary_alignment_stats_test_multiple.sam
rename to testdata/picard/sam/summary_alignment_stats_test_multiple.sam
diff --git a/testdata/net/sf/picard/sam/unmapped.sam b/testdata/picard/sam/unmapped.sam
similarity index 100%
rename from testdata/net/sf/picard/sam/unmapped.sam
rename to testdata/picard/sam/unmapped.sam
diff --git a/testdata/picard/sam/viewsam_intervals_test.interval_list b/testdata/picard/sam/viewsam_intervals_test.interval_list
new file mode 100644
index 0000000..5bd4626
--- /dev/null
+++ b/testdata/picard/sam/viewsam_intervals_test.interval_list
@@ -0,0 +1,7 @@
+ at HD VN:1.4 SO:coordinate
+ at SQ SN:chr1 LN:101
+ at SQ SN:chr6 LN:303
+ at SQ SN:chr7 LN:404
+chr1 500 502 + CHR1_NO_MATCH
+chr7 1 2 + CHR7_MATCH
+chr7 305 306 + CHR7_MATCH
\ No newline at end of file
diff --git a/testdata/picard/sam/viewsam_intervals_test.sam b/testdata/picard/sam/viewsam_intervals_test.sam
new file mode 100644
index 0000000..63bb3e6
--- /dev/null
+++ b/testdata/picard/sam/viewsam_intervals_test.sam
@@ -0,0 +1,9 @@
+ at HD VN:1.0 SO:queryname
+ at SQ SN:chr1 LN:101
+ at SQ SN:chr6 LN:303
+ at SQ SN:chr7 LN:404
+ at RG ID:0 SM:Hi,Momma! LB:whatever PU:me PL:ILLUMINA
+CHR1_SHOULD_NOT_MATCH 89 chr1 1 255 101M * 0 0 TTCATGCTGANGCNCTCTTACGATCGTACAGATGCAAATATTAACANNCNTTNAAGNNCANNNNNNNNNCAATACAATANTAGAGTACGTNAACACTCCAN &/,&-.1/6/&&)&).)/,&0768)&/.,/874,&.4137572)&/&&,&1-&.0/&&*,&&&&&&&&&&18775799,&16:8775-56256/69::;0& RG:Z:0 XN:i:1
+CHR7_SHOULD_MATCH 83 chr7 1 255 101M = 302 201 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:0
+CHR7_SHOULD_MATCH_2 163 chr7 302 255 10M1D10M5I76M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA &/15445666651/566666553+2/14/&/555512+3/)-'/-&-'*+))*''13+3)'//++''/'))/3+&*5++)&'2+&+/*&-&&*)&-./1'1 RG:Z:0
+CHR7_SHOULD_NOT_MATCH 99 chr7 21 255 101M = 16 96 CAACAGAAGCNGGNATCTGTGTTTGTGTTTCGGATTTCCTGCTGAANNGNTTNTCGNNTCNNNNNNNNATCCCGATTTCNTTCCGCAGCTNACCTCCCAAN )'.*.+2,))&&'&*/)-&*-)&.-)&)&),/-&&..)./.,.).*&&,&.&&-)&&&0*&&&&&&&&/32/,01460&&/6/*0*/2/283//36868/& RG:Z:0
\ No newline at end of file
diff --git a/testdata/picard/util/BedToIntervalListTest/end_after_chr.bed b/testdata/picard/util/BedToIntervalListTest/end_after_chr.bed
new file mode 100644
index 0000000..b4b3e1c
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/end_after_chr.bed
@@ -0,0 +1 @@
+chr1 0 1000001
diff --git a/testdata/picard/util/BedToIntervalListTest/end_before_chr.bed b/testdata/picard/util/BedToIntervalListTest/end_before_chr.bed
new file mode 100644
index 0000000..4391f24
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/end_before_chr.bed
@@ -0,0 +1 @@
+chr1 100 0
diff --git a/testdata/picard/util/BedToIntervalListTest/extended.bed b/testdata/picard/util/BedToIntervalListTest/extended.bed
new file mode 100644
index 0000000..1ca1b08
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/extended.bed
@@ -0,0 +1,2 @@
+chr1 100 2000 chr1_100_2000+ 11 +
+chr1 3000 4000 chr1_3000_4000- 12 -
diff --git a/testdata/picard/util/BedToIntervalListTest/extended.bed.interval_list b/testdata/picard/util/BedToIntervalListTest/extended.bed.interval_list
new file mode 100644
index 0000000..b81b162
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/extended.bed.interval_list
@@ -0,0 +1,11 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chr1 LN:1000000
+ at SQ SN:chr2 LN:1000000
+ at SQ SN:chr3 LN:1000000
+ at SQ SN:chr4 LN:1000000
+ at SQ SN:chr5 LN:1000000
+ at SQ SN:chr6 LN:1000000
+ at SQ SN:chr7 LN:1000000
+ at SQ SN:chr8 LN:1000000
+chr1 101 2000 + chr1_100_2000+
+chr1 3001 4000 - chr1_3000_4000-
diff --git a/testdata/picard/util/BedToIntervalListTest/header.sam b/testdata/picard/util/BedToIntervalListTest/header.sam
new file mode 100644
index 0000000..da6a803
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/header.sam
@@ -0,0 +1,9 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chr1 LN:1000000
+ at SQ SN:chr2 LN:1000000
+ at SQ SN:chr3 LN:1000000
+ at SQ SN:chr4 LN:1000000
+ at SQ SN:chr5 LN:1000000
+ at SQ SN:chr6 LN:1000000
+ at SQ SN:chr7 LN:1000000
+ at SQ SN:chr8 LN:1000000
diff --git a/testdata/picard/util/BedToIntervalListTest/missing_chr.bed b/testdata/picard/util/BedToIntervalListTest/missing_chr.bed
new file mode 100644
index 0000000..be175b0
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/missing_chr.bed
@@ -0,0 +1,2 @@
+chr1 3000 4000
+chrX 100 2000
diff --git a/testdata/picard/util/BedToIntervalListTest/off_by_one_interval.bed b/testdata/picard/util/BedToIntervalListTest/off_by_one_interval.bed
new file mode 100644
index 0000000..de9365b
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/off_by_one_interval.bed
@@ -0,0 +1 @@
+chr1 100 99
diff --git a/testdata/picard/util/BedToIntervalListTest/one_base_interval.bed b/testdata/picard/util/BedToIntervalListTest/one_base_interval.bed
new file mode 100644
index 0000000..1915c0d
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/one_base_interval.bed
@@ -0,0 +1 @@
+chr1 100 101
diff --git a/testdata/picard/util/BedToIntervalListTest/one_base_interval.bed.interval_list b/testdata/picard/util/BedToIntervalListTest/one_base_interval.bed.interval_list
new file mode 100644
index 0000000..8a81888
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/one_base_interval.bed.interval_list
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chr1 LN:1000000
+ at SQ SN:chr2 LN:1000000
+ at SQ SN:chr3 LN:1000000
+ at SQ SN:chr4 LN:1000000
+ at SQ SN:chr5 LN:1000000
+ at SQ SN:chr6 LN:1000000
+ at SQ SN:chr7 LN:1000000
+ at SQ SN:chr8 LN:1000000
+chr1 101 101 + .
diff --git a/testdata/picard/util/BedToIntervalListTest/overlapping.bed b/testdata/picard/util/BedToIntervalListTest/overlapping.bed
new file mode 100644
index 0000000..d2e83c4
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/overlapping.bed
@@ -0,0 +1,2 @@
+chr1 100 2000
+chr1 1000 4000
diff --git a/testdata/picard/util/BedToIntervalListTest/overlapping.bed.interval_list b/testdata/picard/util/BedToIntervalListTest/overlapping.bed.interval_list
new file mode 100644
index 0000000..364b28a
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/overlapping.bed.interval_list
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chr1 LN:1000000
+ at SQ SN:chr2 LN:1000000
+ at SQ SN:chr3 LN:1000000
+ at SQ SN:chr4 LN:1000000
+ at SQ SN:chr5 LN:1000000
+ at SQ SN:chr6 LN:1000000
+ at SQ SN:chr7 LN:1000000
+ at SQ SN:chr8 LN:1000000
+chr1 101 4000 + .
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.bed b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.bed
new file mode 100644
index 0000000..c7270d0
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.bed
@@ -0,0 +1,3 @@
+chr1 100 2000
+chr1 3000 4000
+chr8 500 600
\ No newline at end of file
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.bed.interval_list b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.bed.interval_list
new file mode 100644
index 0000000..56cdfc7
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.bed.interval_list
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chr1 LN:249250621 AS:b37
+ at SQ SN:chr2 LN:243199373 AS:b37
+ at SQ SN:chr3 LN:198022430 AS:b37
+ at SQ SN:chr4 LN:191154276 AS:b37
+ at SQ SN:chr5 LN:180915260 AS:b37
+ at SQ SN:chr6 LN:171115067 AS:b37
+ at SQ SN:chr7 LN:159138663 AS:b37
+ at SQ SN:chr8 LN:146364022 AS:b37
+chr1 101 2000 + .
+chr1 3001 4000 + .
+chr8 501 600 + .
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.bad b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.bad
new file mode 100644
index 0000000..1910281
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.bad
@@ -0,0 +1 @@
+foo
\ No newline at end of file
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.bad.vcf b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.bad.vcf
new file mode 100644
index 0000000..8019ba7
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.bad.vcf
@@ -0,0 +1,7 @@
+##fileformat=VCFv4.2
+##fileDate=20150406
+##source=bedToIntervalListTest
+##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
+##contig=<ID=chr1,length=249250621,assembly=b37>
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878
+chr1 109 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1019;Dels=0.00;HRun=0;HaplotypeScore=686.65;MQ=19.20;MQ0=288;OQ=2175.54;QD=2.13;SB=-1042.18 GT:AD:DP:GL:GQ 0/1:610,327:308:-316.30,-95.47,-803.03:99
\ No newline at end of file
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.dict b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.dict
new file mode 100644
index 0000000..22df212
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.dict
@@ -0,0 +1,9 @@
+ at HD VN:1.5 SO:unsorted
+ at SQ SN:chr1 LN:249250621 AS:b37
+ at SQ SN:chr2 LN:243199373 AS:b37
+ at SQ SN:chr3 LN:198022430 AS:b37
+ at SQ SN:chr4 LN:191154276 AS:b37
+ at SQ SN:chr5 LN:180915260 AS:b37
+ at SQ SN:chr6 LN:171115067 AS:b37
+ at SQ SN:chr7 LN:159138663 AS:b37
+ at SQ SN:chr8 LN:146364022 AS:b37
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.fasta b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.fasta
new file mode 100644
index 0000000..d8d60dc
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.fasta
@@ -0,0 +1,16 @@
+>chr1
+TTCATGCTGA
+>chr2
+AGCCCTCTTA
+>chr3
+CGATCGTACA
+>chr4
+GATGCAAATA
+>chr5
+TTAACAAACC
+>chr6
+CATNNNNACA
+>chr7
+AGCGCGTCCT
+>chr8
+ACCAGACGCG
\ No newline at end of file
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.interval_list b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.interval_list
new file mode 100644
index 0000000..56cdfc7
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.interval_list
@@ -0,0 +1,12 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chr1 LN:249250621 AS:b37
+ at SQ SN:chr2 LN:243199373 AS:b37
+ at SQ SN:chr3 LN:198022430 AS:b37
+ at SQ SN:chr4 LN:191154276 AS:b37
+ at SQ SN:chr5 LN:180915260 AS:b37
+ at SQ SN:chr6 LN:171115067 AS:b37
+ at SQ SN:chr7 LN:159138663 AS:b37
+ at SQ SN:chr8 LN:146364022 AS:b37
+chr1 101 2000 + .
+chr1 3001 4000 + .
+chr8 501 600 + .
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.sam b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.sam
new file mode 100644
index 0000000..85c21fa
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.sam
@@ -0,0 +1,9 @@
+ at HD VN:1.0 SO:coordinate
+ at SQ SN:chr1 LN:249250621 AS:b37
+ at SQ SN:chr2 LN:243199373 AS:b37
+ at SQ SN:chr3 LN:198022430 AS:b37
+ at SQ SN:chr4 LN:191154276 AS:b37
+ at SQ SN:chr5 LN:180915260 AS:b37
+ at SQ SN:chr6 LN:171115067 AS:b37
+ at SQ SN:chr7 LN:159138663 AS:b37
+ at SQ SN:chr8 LN:146364022 AS:b37
diff --git a/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.vcf b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.vcf
new file mode 100644
index 0000000..04e9ce0
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/seq_dict_test.dictionary.vcf
@@ -0,0 +1,14 @@
+##fileformat=VCFv4.2
+##fileDate=20150406
+##source=bedToIntervalListTest
+##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
+##contig=<ID=chr1,length=249250621,assembly=b37>
+##contig=<ID=chr2,length=243199373,assembly=b37>
+##contig=<ID=chr3,length=198022430,assembly=b37>
+##contig=<ID=chr4,length=191154276,assembly=b37>
+##contig=<ID=chr5,length=180915260,assembly=b37>
+##contig=<ID=chr6,length=171115067,assembly=b37>
+##contig=<ID=chr7,length=159138663,assembly=b37>
+##contig=<ID=chr8,length=146364022,assembly=b37>
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878
+chr1 109 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1019;Dels=0.00;HRun=0;HaplotypeScore=686.65;MQ=19.20;MQ0=288;OQ=2175.54;QD=2.13;SB=-1042.18 GT:AD:DP:GL:GQ 0/1:610,327:308:-316.30,-95.47,-803.03:99
\ No newline at end of file
diff --git a/testdata/picard/util/BedToIntervalListTest/simple.bed b/testdata/picard/util/BedToIntervalListTest/simple.bed
new file mode 100644
index 0000000..74cf130
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/simple.bed
@@ -0,0 +1,2 @@
+chr1 100 2000
+chr1 3000 4000
diff --git a/testdata/picard/util/BedToIntervalListTest/simple.bed.interval_list b/testdata/picard/util/BedToIntervalListTest/simple.bed.interval_list
new file mode 100644
index 0000000..23150ad
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/simple.bed.interval_list
@@ -0,0 +1,11 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chr1 LN:1000000
+ at SQ SN:chr2 LN:1000000
+ at SQ SN:chr3 LN:1000000
+ at SQ SN:chr4 LN:1000000
+ at SQ SN:chr5 LN:1000000
+ at SQ SN:chr6 LN:1000000
+ at SQ SN:chr7 LN:1000000
+ at SQ SN:chr8 LN:1000000
+chr1 101 2000 + .
+chr1 3001 4000 + .
diff --git a/testdata/picard/util/BedToIntervalListTest/start_after_chr.bed b/testdata/picard/util/BedToIntervalListTest/start_after_chr.bed
new file mode 100644
index 0000000..9a252ac
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/start_after_chr.bed
@@ -0,0 +1 @@
+chr1 1000001 10000
diff --git a/testdata/picard/util/BedToIntervalListTest/start_before_chr.bed b/testdata/picard/util/BedToIntervalListTest/start_before_chr.bed
new file mode 100644
index 0000000..e44f58a
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/start_before_chr.bed
@@ -0,0 +1 @@
+chr1 -1 10000
diff --git a/testdata/picard/util/BedToIntervalListTest/zero_base_interval.bed b/testdata/picard/util/BedToIntervalListTest/zero_base_interval.bed
new file mode 100644
index 0000000..a316cb9
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/zero_base_interval.bed
@@ -0,0 +1 @@
+chr1 100 100
diff --git a/testdata/picard/util/BedToIntervalListTest/zero_base_interval.bed.interval_list b/testdata/picard/util/BedToIntervalListTest/zero_base_interval.bed.interval_list
new file mode 100644
index 0000000..2d1c780
--- /dev/null
+++ b/testdata/picard/util/BedToIntervalListTest/zero_base_interval.bed.interval_list
@@ -0,0 +1,10 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:chr1 LN:1000000
+ at SQ SN:chr2 LN:1000000
+ at SQ SN:chr3 LN:1000000
+ at SQ SN:chr4 LN:1000000
+ at SQ SN:chr5 LN:1000000
+ at SQ SN:chr6 LN:1000000
+ at SQ SN:chr7 LN:1000000
+ at SQ SN:chr8 LN:1000000
+chr1 101 100 + .
diff --git a/testdata/net/sf/picard/util/all_ones_text_file.txt b/testdata/picard/util/all_ones_text_file.txt
similarity index 100%
rename from testdata/net/sf/picard/util/all_ones_text_file.txt
rename to testdata/picard/util/all_ones_text_file.txt
diff --git a/testdata/net/sf/picard/util/no_grouping_file.txt b/testdata/picard/util/no_grouping_file.txt
similarity index 100%
rename from testdata/net/sf/picard/util/no_grouping_file.txt
rename to testdata/picard/util/no_grouping_file.txt
diff --git a/testdata/picard/util/scatterable.interval_list b/testdata/picard/util/scatterable.interval_list
new file mode 100755
index 0000000..52e1712
--- /dev/null
+++ b/testdata/picard/util/scatterable.interval_list
@@ -0,0 +1,89 @@
+ at HD VN:1.5 SO:coordinate
+ at SQ SN:1 LN:249250621 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1b22b98cdeb4a9304cb5d48026a85128 SP:Homo Sapiens
+ at SQ SN:2 LN:243199373 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:a0d9851da00400dec1098a9255ac712e SP:Homo Sapiens
+ at SQ SN:3 LN:198022430 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fdfd811849cc2fadebc929bb925902e5 SP:Homo Sapiens
+ at SQ SN:4 LN:191154276 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:23dccd106897542ad87d2765d28a19a1 SP:Homo Sapiens
+ at SQ SN:5 LN:180915260 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:0740173db9ffd264d728f32784845cd7 SP:Homo Sapiens
+ at SQ SN:6 LN:171115067 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1d3a93a248d92a729ee764823acbbc6b SP:Homo Sapiens
+ at SQ SN:7 LN:159138663 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:618366e953d6aaad97dbe4777c29375e SP:Homo Sapiens
+ at SQ SN:8 LN:146364022 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:96f514a9929e410c6651697bded59aec SP:Homo Sapiens
+ at SQ SN:9 LN:141213431 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:3e273117f15e0a400f01055d9f393768 SP:Homo Sapiens
+ at SQ SN:10 LN:135534747 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:988c28e000e84c26d552359af1ea2e1d SP:Homo Sapiens
+ at SQ SN:11 LN:135006516 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:98c59049a2df285c76ffb1c6db8f8b96 SP:Homo Sapiens
+ at SQ SN:12 LN:133851895 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:51851ac0e1a115847ad36449b0015864 SP:Homo Sapiens
+ at SQ SN:13 LN:115169878 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:283f8d7892baa81b510a015719ca7b0b SP:Homo Sapiens
+ at SQ SN:14 LN:107349540 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:98f3cae32b2a2e9524bc19813927542e SP:Homo Sapiens
+ at SQ SN:15 LN:102531392 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:e5645a794a8238215b2cd77acb95a078 SP:Homo Sapiens
+ at SQ SN:16 LN:90354753 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fc9b1a7b42b97a864f56b348b06095e6 SP:Homo Sapiens
+ at SQ SN:17 LN:81195210 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:351f64d4f4f9ddd45b35336ad97aa6de SP:Homo Sapiens
+ at SQ SN:18 LN:78077248 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:b15d4b2d29dde9d3e4f93d1d0f2cbc9c SP:Homo Sapiens
+ at SQ SN:19 LN:59128983 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1aacd71f30db8e561810913e0b72636d SP:Homo Sapiens
+ at SQ SN:20 LN:63025520 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:0dec9660ec1efaaf33281c0d5ea2560f SP:Homo Sapiens
+ at SQ SN:21 LN:48129895 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:2979a6085bfe28e3ad6f552f361ed74d SP:Homo Sapiens
+ at SQ SN:22 LN:51304566 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:a718acaa6135fdca8357d5bfe94211dd SP:Homo Sapiens
+ at SQ SN:X LN:155270560 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7e0e2e580297b7764e31dbc80c2540dd SP:Homo Sapiens
+ at SQ SN:Y LN:59373566 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1fa3474750af0948bdf97d5a0ee52e51 SP:Homo Sapiens
+ at SQ SN:MT LN:16569 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:c68f52674c9fb33aef52dcf399755519 SP:Homo Sapiens
+ at SQ SN:GL000207.1 LN:4262 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:f3814841f1939d3ca19072d9e89f3fd7 SP:Homo Sapiens
+ at SQ SN:GL000226.1 LN:15008 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1c1b2cd1fccbc0a99b6a447fa24d1504 SP:Homo Sapiens
+ at SQ SN:GL000229.1 LN:19913 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d0f40ec87de311d8e715b52e4c7062e1 SP:Homo Sapiens
+ at SQ SN:GL000231.1 LN:27386 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:ba8882ce3a1efa2080e5d29b956568a4 SP:Homo Sapiens
+ at SQ SN:GL000210.1 LN:27682 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:851106a74238044126131ce2a8e5847c SP:Homo Sapiens
+ at SQ SN:GL000239.1 LN:33824 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:99795f15702caec4fa1c4e15f8a29c07 SP:Homo Sapiens
+ at SQ SN:GL000235.1 LN:34474 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:118a25ca210cfbcdfb6c2ebb249f9680 SP:Homo Sapiens
+ at SQ SN:GL000201.1 LN:36148 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:dfb7e7ec60ffdcb85cb359ea28454ee9 SP:Homo Sapiens
+ at SQ SN:GL000247.1 LN:36422 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7de00226bb7df1c57276ca6baabafd15 SP:Homo Sapiens
+ at SQ SN:GL000245.1 LN:36651 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:89bc61960f37d94abf0df2d481ada0ec SP:Homo Sapiens
+ at SQ SN:GL000197.1 LN:37175 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6f5efdd36643a9b8c8ccad6f2f1edc7b SP:Homo Sapiens
+ at SQ SN:GL000203.1 LN:37498 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:96358c325fe0e70bee73436e8bb14dbd SP:Homo Sapiens
+ at SQ SN:GL000246.1 LN:38154 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:e4afcd31912af9d9c2546acf1cb23af2 SP:Homo Sapiens
+ at SQ SN:GL000249.1 LN:38502 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1d78abec37c15fe29a275eb08d5af236 SP:Homo Sapiens
+ at SQ SN:GL000196.1 LN:38914 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d92206d1bb4c3b4019c43c0875c06dc0 SP:Homo Sapiens
+ at SQ SN:GL000248.1 LN:39786 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:5a8e43bec9be36c7b49c84d585107776 SP:Homo Sapiens
+ at SQ SN:GL000244.1 LN:39929 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:0996b4475f353ca98bacb756ac479140 SP:Homo Sapiens
+ at SQ SN:GL000238.1 LN:39939 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:131b1efc3270cc838686b54e7c34b17b SP:Homo Sapiens
+ at SQ SN:GL000202.1 LN:40103 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:06cbf126247d89664a4faebad130fe9c SP:Homo Sapiens
+ at SQ SN:GL000234.1 LN:40531 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:93f998536b61a56fd0ff47322a911d4b SP:Homo Sapiens
+ at SQ SN:GL000232.1 LN:40652 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:3e06b6741061ad93a8587531307057d8 SP:Homo Sapiens
+ at SQ SN:GL000206.1 LN:41001 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:43f69e423533e948bfae5ce1d45bd3f1 SP:Homo Sapiens
+ at SQ SN:GL000240.1 LN:41933 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:445a86173da9f237d7bcf41c6cb8cc62 SP:Homo Sapiens
+ at SQ SN:GL000236.1 LN:41934 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fdcd739913efa1fdc64b6c0cd7016779 SP:Homo Sapiens
+ at SQ SN:GL000241.1 LN:42152 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:ef4258cdc5a45c206cea8fc3e1d858cf SP:Homo Sapiens
+ at SQ SN:GL000243.1 LN:43341 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:cc34279a7e353136741c9fce79bc4396 SP:Homo Sapiens
+ at SQ SN:GL000242.1 LN:43523 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:2f8694fc47576bc81b5fe9e7de0ba49e SP:Homo Sapiens
+ at SQ SN:GL000230.1 LN:43691 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:b4eb71ee878d3706246b7c1dbef69299 SP:Homo Sapiens
+ at SQ SN:GL000237.1 LN:45867 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:e0c82e7751df73f4f6d0ed30cdc853c0 SP:Homo Sapiens
+ at SQ SN:GL000233.1 LN:45941 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7fed60298a8d62ff808b74b6ce820001 SP:Homo Sapiens
+ at SQ SN:GL000204.1 LN:81310 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:efc49c871536fa8d79cb0a06fa739722 SP:Homo Sapiens
+ at SQ SN:GL000198.1 LN:90085 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:868e7784040da90d900d2d1b667a1383 SP:Homo Sapiens
+ at SQ SN:GL000208.1 LN:92689 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:aa81be49bf3fe63a79bdc6a6f279abf6 SP:Homo Sapiens
+ at SQ SN:GL000191.1 LN:106433 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d75b436f50a8214ee9c2a51d30b2c2cc SP:Homo Sapiens
+ at SQ SN:GL000227.1 LN:128374 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:a4aead23f8053f2655e468bcc6ecdceb SP:Homo Sapiens
+ at SQ SN:GL000228.1 LN:129120 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:c5a17c97e2c1a0b6a9cc5a6b064b714f SP:Homo Sapiens
+ at SQ SN:GL000214.1 LN:137718 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:46c2032c37f2ed899eb41c0473319a69 SP:Homo Sapiens
+ at SQ SN:GL000221.1 LN:155397 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:3238fb74ea87ae857f9c7508d315babb SP:Homo Sapiens
+ at SQ SN:GL000209.1 LN:159169 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:f40598e2a5a6b26e84a3775e0d1e2c81 SP:Homo Sapiens
+ at SQ SN:GL000218.1 LN:161147 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:1d708b54644c26c7e01c2dad5426d38c SP:Homo Sapiens
+ at SQ SN:GL000220.1 LN:161802 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:fc35de963c57bf7648429e6454f1c9db SP:Homo Sapiens
+ at SQ SN:GL000213.1 LN:164239 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:9d424fdcc98866650b58f004080a992a SP:Homo Sapiens
+ at SQ SN:GL000211.1 LN:166566 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:7daaa45c66b288847b9b32b964e623d3 SP:Homo Sapiens
+ at SQ SN:GL000199.1 LN:169874 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:569af3b73522fab4b40995ae4944e78e SP:Homo Sapiens
+ at SQ SN:GL000217.1 LN:172149 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6d243e18dea1945fb7f2517615b8f52e SP:Homo Sapiens
+ at SQ SN:GL000216.1 LN:172294 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:642a232d91c486ac339263820aef7fe0 SP:Homo Sapiens
+ at SQ SN:GL000215.1 LN:172545 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:5eb3b418480ae67a997957c909375a73 SP:Homo Sapiens
+ at SQ SN:GL000205.1 LN:174588 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d22441398d99caf673e9afb9a1908ec5 SP:Homo Sapiens
+ at SQ SN:GL000219.1 LN:179198 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:f977edd13bac459cb2ed4a5457dba1b3 SP:Homo Sapiens
+ at SQ SN:GL000224.1 LN:179693 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:d5b2fc04f6b41b212a4198a07f450e20 SP:Homo Sapiens
+ at SQ SN:GL000223.1 LN:180455 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:399dfa03bf32022ab52a846f7ca35b30 SP:Homo Sapiens
+ at SQ SN:GL000195.1 LN:182896 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:5d9ec007868d517e73543b005ba48535 SP:Homo Sapiens
+ at SQ SN:GL000212.1 LN:186858 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:563531689f3dbd691331fd6c5730a88b SP:Homo Sapiens
+ at SQ SN:GL000222.1 LN:186861 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6fe9abac455169f50470f5a6b01d0f59 SP:Homo Sapiens
+ at SQ SN:GL000200.1 LN:187035 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:75e4c8d17cd4addf3917d1703cacaf25 SP:Homo Sapiens
+ at SQ SN:GL000193.1 LN:189789 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:dbb6e8ece0b5de29da56601613007c2a SP:Homo Sapiens
+ at SQ SN:GL000194.1 LN:191469 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6ac8f815bf8e845bb3031b73f812c012 SP:Homo Sapiens
+ at SQ SN:GL000225.1 LN:211173 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:63945c3e6962f28ffd469719a747e73c SP:Homo Sapiens
+ at SQ SN:GL000192.1 LN:547496 AS:GRCh37 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:325ba9e808f669dfeee210fdd7b470ac SP:Homo Sapiens
+ at SQ SN:NC_007605 LN:171823 AS:NC_007605.1 UR:http://www.broadinstitute.org/ftp/pub/seq/references/Homo_sapiens_assembly19.fasta M5:6743bd63b3ff2b5b8985d8933c53290a SP:Epstein-Barr virus
+1 30000 30098 + target_1
+1 30100 30150 + target_2
+1 30200 30249 + target_3
diff --git a/testdata/net/sf/picard/util/tabbed_text_file.txt b/testdata/picard/util/tabbed_text_file.txt
similarity index 100%
rename from testdata/net/sf/picard/util/tabbed_text_file.txt
rename to testdata/picard/util/tabbed_text_file.txt
diff --git a/testdata/net/sf/picard/util/whitepace_text_file.txt b/testdata/picard/util/whitespace_text_file.txt
similarity index 100%
rename from testdata/net/sf/picard/util/whitepace_text_file.txt
rename to testdata/picard/util/whitespace_text_file.txt
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-indels-bad-samples.vcf b/testdata/picard/vcf/CEUTrio-indels-bad-samples.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-indels-bad-samples.vcf
rename to testdata/picard/vcf/CEUTrio-indels-bad-samples.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-indels-bad-samples.vcf.idx b/testdata/picard/vcf/CEUTrio-indels-bad-samples.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-indels-bad-samples.vcf.idx
rename to testdata/picard/vcf/CEUTrio-indels-bad-samples.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf b/testdata/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf
rename to testdata/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf.idx b/testdata/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf.idx
rename to testdata/picard/vcf/CEUTrio-indels-dissimilar-contigs.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-indels-no-contigs.vcf b/testdata/picard/vcf/CEUTrio-indels-no-contigs.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-indels-no-contigs.vcf
rename to testdata/picard/vcf/CEUTrio-indels-no-contigs.vcf
diff --git a/testdata/picard/vcf/CEUTrio-indels-scrambled.1.vcf b/testdata/picard/vcf/CEUTrio-indels-scrambled.1.vcf
new file mode 100644
index 0000000..3caf356
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-indels-scrambled.1.vcf
@@ -0,0 +1,171 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+6 31390139 rs72548006 T TA 2159.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.491;DB;DP=257;FS=2.384;HaplotypeScore=26.8869;MLEAC=2;MLEAF=0.333;MQ=59.99;MQ0=0;MQRankSum=1.589;QD=12.85;RPA=5,6;RU=A;ReadPosRankSum=1.851;SB=-9.710e+02;STR;VQSLOD=5.5307;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,37:89:99:1076,0,1364:127 0|0:89,0:89:99:0,256,3112:127 1|0:41,38:79:99:1131,0,1103:127
+9 33446281 . C CT 31.72 VQSRTrancheINDEL99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.119;DP=178;FS=127.572;HaplotypeScore=21.5544;MLEAC=1;MLEAF=0.167;MQ=58.69;MQ0=0;MQRankSum=1.608;QD=0.62;RPA=2,3;RU=T;ReadPosRankSum=-5.268;SB=-4.493e+00;STR;VQSLOD=-10.5680;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:77,0:79:73:0,73,2094:6 0|0:46,0:48:5:0,5,958:6 0|1:35,15:51:75:75,0,1073:6
+10 46605359 . CT C 883.2 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.618;DP=136;FS=9.661;HaplotypeScore=4.7050;MLEAC=3;MLEAF=0.500;MQ=22.12;MQ0=1;MQRankSum=0.368;QD=8.57;RPA=7,6;RU=T;ReadPosRankSum=-1.076;SB=-1.190e+02;STR;VQSLOD=2.5501;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:33,0:32:90:0,90,1016:25 0|1:66,15:81:99:303,0,1810:25 0|1:2,19:20:0:634,54,0:25
+3 118367863 rs71617664 TAGATAGATTA T 12039 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.121;DB;DP=201;FS=9.449;HaplotypeScore=212.5016;MLEAC=6;MLEAF=1.00;MQ=55.55;MQ0=1;MQRankSum=1.584;QD=59.90;ReadPosRankSum=0.721;SB=-5.599e+03;VQSLOD=-0.4074;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:13,57:71:99:4299,164,0:127 1|1:60,4:64:99:3312,174,0:127 1|1:9,50:64:99:4428,177,0:127
+11 96559202 rs72048706 C CAA 373.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.796;DB;DP=121;FS=1.541;HaplotypeScore=64.5478;MLEAC=4;MLEAF=0.667;MQ=39.96;MQ0=6;MQRankSum=-0.539;QD=3.08;RPA=21,23;RU=A;ReadPosRankSum=-3.583;SB=-1.985e+02;STR;VQSLOD=1.3071;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:20,8:32:24:111,0,24:22 1|1:40,0:41:29:180,29,0:22 0|1:39,0:39:41:133,0,41:22
+4 152029268 . CT C 358.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.688;DP=199;FS=13.724;HaplotypeScore=32.5739;MLEAC=2;MLEAF=0.333;MQ=55.17;MQ0=0;MQRankSum=-0.915;QD=2.42;RPA=17,16;RU=T;ReadPosRankSum=0.548;SB=-1.419e+02;STR;VQSLOD=0.3925;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:50,15:75:99:301,0,225:38 1|0:56,11:72:99:105,0,209:38 0|0:46,2:51:38:0,38,284:38
+15 32615218 . G GA 82.61 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.361;DP=225;FS=0.000;HaplotypeScore=2.4894;MLEAC=4;MLEAF=0.667;MQ=5.76;MQ0=211;MQRankSum=-0.876;QD=0.56;RPA=9,10;RU=A;ReadPosRankSum=-1.159;SB=-1.330e-03;STR;VQSLOD=3.7374;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:41,19:3:9:88,9,0:5 1|0:62,24:5:44:44,0,77:5 1|0:76,0:1:2:0,3,31:5
+3 168108331 rs35075740 TA T 51.36 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.784;DB;DP=162;FS=3.973;HaplotypeScore=20.3755;MLEAC=3;MLEAF=0.500;MQ=55.92;MQ0=0;MQRankSum=3.470;QD=0.32;RPA=18,17;RU=A;ReadPosRankSum=1.956;SB=-7.120e+00;STR;VQSLOD=2.1011;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:46,5:53:16:16,0,313:15 0/1:46,12:60:61:61,0,267:15 0/1:40,6:47:22:22,0,255:15
+16 19633462 rs11371821 C CT 239.23 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.097;DB;DP=182;FS=1.344;HaplotypeScore=21.2638;MLEAC=4;MLEAF=0.667;MQ=50.55;MQ0=0;MQRankSum=-1.358;QD=1.31;RPA=22,23;RU=T;ReadPosRankSum=-3.963;SB=-9.798e+01;STR;VQSLOD=2.3127;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:61,0:63:45:70,0,45:24 1|1:44,15:58:28:192,28,0:24 0|1:52,0:60:28:28,0,37:24
+1 120811174 . C CA 74.77 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.393;DP=148;FS=0.000;HaplotypeScore=20.3510;MLEAC=5;MLEAF=0.833;MQ=15.79;MQ0=88;MQRankSum=-0.348;QD=0.51;RPA=24,25;RU=A;ReadPosRankSum=-1.044;SB=-1.531e+01;STR;VQSLOD=5.0896;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:47,5:9:11:53,11,0:3 1|0:51,0:15:5:37,0,5:3 1|1:43,0:8:6:32,6,0:3
+X 23948720 rs35152285 C CA 535.35 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.538;DB;DP=148;FS=0.000;HaplotypeScore=24.3157;MLEAC=3;MLEAF=0.500;MQ=53.02;MQ0=0;MQRankSum=0.234;QD=3.62;RPA=16,17;RU=A;ReadPosRankSum=-1.638;SB=-2.841e+02;STR;VQSLOD=3.0203;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:37,27:68:62:391,0,62:13 0/1:16,8:25:13:102,0,13:13 0/1:47,4:53:90:90,0,142:13
+6 63303894 rs34270846 T TC 7366 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.312;DB;DP=202;FS=2.807;HaplotypeScore=88.2916;MLEAC=5;MLEAF=0.833;MQ=61.10;MQ0=0;MQRankSum=-0.390;QD=36.47;ReadPosRankSum=-0.315;SB=-2.762e+03;VQSLOD=3.8558;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3885,265,0:127 1|0:29,25:54:99:999,0,1050:127 1|1:0,57:59:99:2482,169,0:127
+12 68921960 . TATTTTC T 803.22 VQSRTrancheINDEL99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=9.862;DP=270;FS=190.603;HaplotypeScore=223.0660;MLEAC=3;MLEAF=0.500;MQ=54.84;MQ0=1;MQRankSum=-4.552;QD=2.97;ReadPosRankSum=-6.674;SB=-1.330e-03;VQSLOD=-17.7657;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:69,22:95:99:394,0,4974:101 0/1:87,0:86:99:355,0,5072:101 0/1:83,0:84:99:102,0,5546:101
+11 3839556 rs5789310 CA C 803.1 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.138;DB;DP=170;FS=4.498;HaplotypeScore=36.6392;MLEAC=3;MLEAF=0.500;MQ=55.95;MQ0=2;MQRankSum=2.278;QD=4.72;RPA=17,16;RU=A;ReadPosRankSum=3.210;SB=-3.839e+02;STR;VQSLOD=1.8082;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:35,17:55:32:329,0,32:3 0/1:45,9:57:8:276,0,8:3 0/1:30,19:52:1:244,0,1:3
+1 25154033 rs55822956 GT G 743.25 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.321;DB;DP=214;FS=2.265;HaplotypeScore=77.3263;MLEAC=3;MLEAF=0.500;MQ=55.48;MQ0=0;MQRankSum=0.114;QD=3.47;RPA=19,18;RU=T;ReadPosRankSum=0.884;SB=-3.070e+02;STR;VQSLOD=2.0987;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:60,12:82:67:292,0,67:18 0/1:55,7:69:42:245,0,42:18 0/1:37,21:60:18:254,0,18:18
+1 36900350 rs72008966 C CA 137.53 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.837;DB;DP=139;FS=0.000;HaplotypeScore=32.7946;MLEAC=3;MLEAF=0.500;MQ=49.20;MQ0=3;MQRankSum=0.772;QD=0.99;RPA=22,23;RU=A;ReadPosRankSum=-3.220;SB=-4.273e+01;STR;VQSLOD=1.8721;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,7:44:41:70,0,41:9 0/1:48,0:47:20:20,0,41:9 0/1:32,12:42:9:95,0,9:9
+2 75490647 rs112304545 T TGG 1000.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.322;DB;DP=188;FS=0.785;HaplotypeScore=58.7199;MLEAC=4;MLEAF=0.667;MQ=57.19;MQ0=0;MQRankSum=-0.229;QD=5.32;RPA=10,12;RU=G;ReadPosRankSum=-2.534;SB=-4.650e+02;STR;VQSLOD=2.6886;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:33,35:76:57:976,57,0:56 1|0:39,3:49:38:38,0,730:56 1|0:50,4:63:37:37,0,900:56
+9 118670009 rs66523513 CT C 5633 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-0.066;DB;DP=222;FS=6.403;HaplotypeScore=30.7213;MLEAC=6;MLEAF=1.00;MQ=59.97;MQ0=0;MQRankSum=0.490;QD=25.37;RPA=11,10;RU=T;ReadPosRankSum=2.429;SB=-2.667e+03;STR;VQSLOD=3.3873;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:6,71:78:99:2079,216,0:120 1|1:10,54:65:99:1524,120,0:120 1|1:9,69:79:99:2030,209,0:120
+6 169196022 . T TG 229.23 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.887;DP=84;FS=7.129;HaplotypeScore=6.4344;MLEAC=2;MLEAF=0.333;MQ=39.46;MQ0=16;MQRankSum=2.277;QD=3.82;RPA=6,7;RU=G;ReadPosRankSum=-0.983;SB=-2.849e+01;STR;VQSLOD=1.3456;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:19,10:15:78:78,0,88:27 1|0:17,13:21:99:199,0,172:27 0|0:24,0:15:27:0,27,308:27
+17 75679403 . TGTG T 1024.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.617;DP=161;FS=1.686;HaplotypeScore=259.3227;MLEAC=2;MLEAF=0.333;MQ=51.57;MQ0=0;MQRankSum=-8.617;QD=9.48;ReadPosRankSum=-0.498;SB=-4.680e+02;VQSLOD=1.7645;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:29,19:58:99:711,0,1547:127 1|0:34,11:50:99:361,0,1922:127 0|0:53,0:53:99:0,157,3186:127
+16 77418810 rs71137811 T TG 7389 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.643;DB;DP=244;FS=2.246;HaplotypeScore=114.4097;MLEAC=5;MLEAF=0.833;MQ=61.09;MQ0=0;MQRankSum=2.492;QD=30.28;ReadPosRankSum=2.982;SB=-2.597e+03;VQSLOD=2.9140;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:8,84:93:99:3558,264,0:127 1|1:8,65:75:99:2723,179,0:127 1|0:42,32:76:99:1108,0,899:127
+14 28032147 rs67442200 AT A 9959 PASS AC=6;AF=1.00;AN=6;DB;DP=259;FS=0.000;HaplotypeScore=15.2854;MLEAC=6;MLEAF=1.00;MQ=60.66;MQ0=0;QD=38.45;RPA=3,2;RU=T;SB=-4.646e+03;STR;VQSLOD=6.0102;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:2,86:91:99:3493,259,0:127 1|1:3,76:79:99:3025,226,0:127 1|1:3,86:89:99:3441,256,0:127
+15 83241984 rs11336258 AT A 1748.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.821;DB;DP=199;FS=5.740;HaplotypeScore=29.9449;MLEAC=4;MLEAF=0.667;MQ=59.67;MQ0=0;MQRankSum=1.120;QD=8.78;RPA=15,14;RU=T;ReadPosRankSum=-1.763;SB=-7.830e+02;STR;VQSLOD=3.4938;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:41,27:72:99:434,0,434:118 0|1:36,26:66:99:470,0,275:118 1|1:11,44:61:99:895,118,0:118
+8 30862954 rs149290124 C CA 3883 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.321;DB;DP=261;FS=0.755;HaplotypeScore=37.2657;MLEAC=5;MLEAF=0.833;MQ=58.08;MQ0=0;MQRankSum=0.330;QD=14.88;RPA=11,12;RU=A;ReadPosRankSum=-0.578;SB=-1.926e+03;STR;VQSLOD=5.3659;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:21,76:105:99:1980,179,0:91 1|0:51,22:75:99:597,0,485:91 1|1:24,54:81:92:1306,92,0:91
+6 100462085 rs113348222 G GT 5284 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.046;DB;DP=285;FS=7.484;HaplotypeScore=252.0890;MLEAC=5;MLEAF=0.833;MQ=60.07;MQ0=0;MQRankSum=1.241;QD=18.54;RPA=10,11;RU=T;ReadPosRankSum=-2.539;SB=-2.505e+03;STR;VQSLOD=2.2089;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:8,79:94:99:2218,200,0:127 1|0:54,37:97:99:818,0,914:127 1|1:10,83:94:99:2248,221,0:127
+18 59836086 . A AT 575.46 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.815;DP=231;FS=20.458;HaplotypeScore=140.1975;MLEAC=3;MLEAF=0.500;MQ=56.52;MQ0=0;MQRankSum=1.203;QD=2.49;RPA=20,21;RU=T;ReadPosRankSum=-1.968;SB=-2.575e+02;STR;VQSLOD=-0.3166;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:52,29:86:11:309,0,11:9 0/1:72,2:82:63:109,0,63:9 0/1:31,24:63:15:205,0,15:9
+18 30361151 rs35024407 T TTG 9768 PASS AC=6;AF=1.00;AN=6;DB;DP=234;FS=0.000;HaplotypeScore=13.0982;MLEAC=6;MLEAF=1.00;MQ=60.40;MQ0=2;QD=41.74;RPA=3,4;RU=TG;SB=-4.721e+03;STR;VQSLOD=5.5040;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:7,80:86:99:3686,241,0:127 1|1:8,77:85:99:3454,229,0:127 1|1:3,58:61:99:2628,172,0:127
+7 20767781 rs150977587 TA T 2754.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.295;DB;DP=259;FS=0.000;HaplotypeScore=122.4991;MLEAC=4;MLEAF=0.667;MQ=59.41;MQ0=1;MQRankSum=-0.640;QD=10.63;RPA=13,12;RU=A;ReadPosRankSum=0.189;SB=-1.344e+03;STR;VQSLOD=3.3002;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:59,45:107:99:923,0,795:116 1|1:15,54:72:99:1313,116,0:116 0|1:44,31:79:99:569,0,617:116
+19 47012249 rs60424854 ATTTTT A 1121.22 VQSRTrancheINDEL99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.922;DB;DP=144;FS=61.853;HaplotypeScore=338.7352;MLEAC=2;MLEAF=0.333;MQ=44.50;MQ0=1;MQRankSum=-2.345;QD=10.29;RPA=16,11;RU=T;ReadPosRankSum=5.636;SB=-1.090e+02;STR;VQSLOD=-2.3986;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:30,9:43:99:371,0,961:89 1|0:44,15:63:99:798,0,1293:89 0|0:32,0:33:89:0,89,1424:89
+4 114869733 rs11381039 A AT 2798.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.957;DB;DP=267;FS=4.371;HaplotypeScore=26.3590;MLEAC=3;MLEAF=0.500;MQ=59.97;MQ0=0;MQRankSum=0.673;QD=10.48;RPA=8,9;RU=T;ReadPosRankSum=-1.351;SB=-1.173e+03;STR;VQSLOD=5.5505;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:47,41:89:99:994,0,1219:127 0/1:50,41:92:99:1063,0,1043:127 0/1:50,34:86:99:789,0,1153:127
+7 134269995 rs67235184 G GA 2917.2 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.835;DB;DP=219;FS=1.093;HaplotypeScore=39.1434;MLEAC=3;MLEAF=0.500;MQ=59.44;MQ0=0;MQRankSum=-0.037;QD=19.19;RPA=7,8;RU=A;ReadPosRankSum=-0.921;SB=-1.316e+03;STR;VQSLOD=5.1149;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:51,33:84:99:916,0,1151:127 1|1:2,65:68:99:2055,192,0:127 0|0:65,0:67:99:0,186,2051:127
+2 133338909 rs72548244 CT C 2103.21 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.444;DB;DP=212;FS=5.224;HaplotypeScore=27.6263;MLEAC=5;MLEAF=0.833;MQ=59.64;MQ0=0;MQRankSum=2.430;QD=9.92;RPA=15,14;RU=T;ReadPosRankSum=2.784;SB=-1.050e+03;STR;VQSLOD=2.6610;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:17,39:59:61:837,61,0:60 1|0:47,22:72:99:241,0,444:60 1|1:20,58:81:74:1076,74,0:60
+2 218911764 . TA T 229.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.591;DP=218;FS=1.761;HaplotypeScore=32.5745;MLEAC=3;MLEAF=0.500;MQ=57.41;MQ0=0;MQRankSum=1.792;QD=1.05;RPA=19,18;RU=A;ReadPosRankSum=0.676;SB=-1.060e+02;STR;VQSLOD=2.3065;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:56,5:65:99:101,0,313:70 0/1:59,18:82:99:105,0,395:70 0/1:64,4:70:71:71,0,263:70
+14 77813103 rs59474357 G GT 328.58 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.653;DB;DP=164;FS=5.220;HaplotypeScore=117.8567;MLEAC=5;MLEAF=0.833;MQ=52.18;MQ0=0;MQRankSum=1.259;QD=2.00;RPA=24,25;RU=T;ReadPosRankSum=-1.030;SB=-1.639e+02;STR;VQSLOD=2.1577;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:51,1:53:18:105,0,18:6 1|1:58,1:59:13:150,13,0:6 0|1:34,13:52:1:123,6,0:6
+22 24416101 rs66532277 C CTT 458.98 VQSRTrancheINDEL99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-4.190;DB;DP=251;FS=68.550;HaplotypeScore=55.3088;MLEAC=3;MLEAF=0.500;MQ=51.85;MQ0=3;MQRankSum=2.417;QD=1.83;RPA=23,25;RU=T;ReadPosRankSum=2.881;SB=-3.571e+01;STR;VQSLOD=-2.0279;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:68,20:91:65:207,0,65:3 0/1:84,0:83:0:184,0,0:3 0/1:72,0:72:83:114,0,83:3
+1 235750933 rs111686144 GA G 679.19 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.042;DB;DP=64;FS=7.388;HaplotypeScore=400.1973;MLEAC=4;MLEAF=0.667;MQ=32.98;MQ0=0;MQRankSum=-0.059;QD=10.61;ReadPosRankSum=2.445;SB=-1.575e+02;VQSLOD=-0.3140;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:12,0:12:6:110,0,6:6 1|1:9,9:19:31:491,31,0:6 0|1:31,0:32:99:128,0,160:6
+3 37334187 rs112182713 G GGTT 1235.2 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.420;DB;DP=233;FS=10.653;HaplotypeScore=68.3055;MLEAC=1;MLEAF=0.167;MQ=56.19;MQ0=0;MQRankSum=-1.868;QD=17.65;RPA=1,2;RU=GTT;ReadPosRankSum=1.383;SB=-4.490e+02;STR;VQSLOD=3.1411;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:83,0:83:99:0,244,4702:127 0|0:79,0:77:99:0,220,4149:127 0|1:40,23:68:99:1279,0,1696:127
+2 107234623 rs35291621 GTA G 7569 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.652;DB;DP=242;FS=7.837;HaplotypeScore=19.3113;MLEAC=4;MLEAF=0.667;MQ=60.04;MQ0=1;MQRankSum=-0.157;QD=31.28;ReadPosRankSum=1.661;SB=-3.633e+03;VQSLOD=4.2975;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:46,30:76:99:1290,0,2120:127 0|1:35,66:102:99:2998,0,1435:127 1|1:0,63:63:99:3281,190,0:127
+4 92648168 rs61329801 A ATTTG 7717 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.947;DB;DP=186;FS=8.292;HaplotypeScore=7.8810;MLEAC=4;MLEAF=0.667;MQ=56.58;MQ0=0;MQRankSum=-0.174;QD=41.49;ReadPosRankSum=-0.444;SB=-3.591e+03;VQSLOD=3.5165;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:45,35:80:99:2213,0,2213:127 1|1:3,59:62:99:4128,181,0:127 0|1:22,22:44:99:1376,0,1181:127
+9 9066127 rs57751104 ATATT A 4412 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.088;DB;DP=214;FS=8.470;HaplotypeScore=16.5868;MLEAC=2;MLEAF=0.333;MQ=58.75;MQ0=0;MQRankSum=0.462;QD=29.61;RPA=2,1;RU=TATT;ReadPosRankSum=1.377;SB=-1.837e+03;STR;VQSLOD=4.4209;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:41,36:79:99:2129,0,2123:127 1|0:32,38:70:99:2283,0,1679:127 0|0:65,0:65:99:0,184,4023:127
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-indels.vcf b/testdata/picard/vcf/CEUTrio-indels.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-indels.vcf
rename to testdata/picard/vcf/CEUTrio-indels.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-indels.vcf.idx b/testdata/picard/vcf/CEUTrio-indels.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-indels.vcf.idx
rename to testdata/picard/vcf/CEUTrio-indels.vcf.idx
diff --git a/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..6af55dc
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-indels.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-indels.vcf OUTPUT=testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:18 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12878 0 0 0 0 0
+INDEL NA12878 NA12878 34 22 0 0 3
+
+
diff --git a/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..7416654
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_detail_metrics
@@ -0,0 +1,12 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-indels.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-indels.vcf OUTPUT=testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:18 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+INDEL NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 22 TP,TN
+INDEL NA12878 NA12878 HOM_VAR1 HOM_VAR1 12 TP
+INDEL NA12878 NA12878 VC_FILTERED VC_FILTERED 3 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..35d2d19
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-indels.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-indels.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-indels_vs_CEUTrio-indels_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPR [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:02:45 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12878 ? ? ? ? ? ? ? ? ? ? ?
+INDEL NA12878 NA12878 1 1 ? 1 1 ? 1 1 1 1 1
+
+
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-merged-indels-snps.vcf b/testdata/picard/vcf/CEUTrio-merged-indels-snps.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-merged-indels-snps.vcf
rename to testdata/picard/vcf/CEUTrio-merged-indels-snps.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-merged-indels-snps.vcf.idx b/testdata/picard/vcf/CEUTrio-merged-indels-snps.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-merged-indels-snps.vcf.idx
rename to testdata/picard/vcf/CEUTrio-merged-indels-snps.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-0.vcf b/testdata/picard/vcf/CEUTrio-random-scatter-0.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-0.vcf
rename to testdata/picard/vcf/CEUTrio-random-scatter-0.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-0.vcf.idx b/testdata/picard/vcf/CEUTrio-random-scatter-0.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-0.vcf.idx
rename to testdata/picard/vcf/CEUTrio-random-scatter-0.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-1.vcf b/testdata/picard/vcf/CEUTrio-random-scatter-1.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-1.vcf
rename to testdata/picard/vcf/CEUTrio-random-scatter-1.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-1.vcf.idx b/testdata/picard/vcf/CEUTrio-random-scatter-1.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-1.vcf.idx
rename to testdata/picard/vcf/CEUTrio-random-scatter-1.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-2.vcf b/testdata/picard/vcf/CEUTrio-random-scatter-2.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-2.vcf
rename to testdata/picard/vcf/CEUTrio-random-scatter-2.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-2.vcf.idx b/testdata/picard/vcf/CEUTrio-random-scatter-2.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-2.vcf.idx
rename to testdata/picard/vcf/CEUTrio-random-scatter-2.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-3.vcf b/testdata/picard/vcf/CEUTrio-random-scatter-3.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-3.vcf
rename to testdata/picard/vcf/CEUTrio-random-scatter-3.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-3.vcf.idx b/testdata/picard/vcf/CEUTrio-random-scatter-3.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-3.vcf.idx
rename to testdata/picard/vcf/CEUTrio-random-scatter-3.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-4.vcf b/testdata/picard/vcf/CEUTrio-random-scatter-4.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-4.vcf
rename to testdata/picard/vcf/CEUTrio-random-scatter-4.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-4.vcf.idx b/testdata/picard/vcf/CEUTrio-random-scatter-4.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-4.vcf.idx
rename to testdata/picard/vcf/CEUTrio-random-scatter-4.vcf.idx
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-5.vcf b/testdata/picard/vcf/CEUTrio-random-scatter-5.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-5.vcf
rename to testdata/picard/vcf/CEUTrio-random-scatter-5.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-random-scatter-5.vcf.idx b/testdata/picard/vcf/CEUTrio-random-scatter-5.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-random-scatter-5.vcf.idx
rename to testdata/picard/vcf/CEUTrio-random-scatter-5.vcf.idx
diff --git a/testdata/picard/vcf/CEUTrio-snps-scrambled.1.vcf b/testdata/picard/vcf/CEUTrio-snps-scrambled.1.vcf
new file mode 100644
index 0000000..5d2c356
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps-scrambled.1.vcf
@@ -0,0 +1,406 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+9 69810010 rs113063015 A C 280.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.223;DB;DP=716;DS;Dels=0.00;FS=8.996;HaplotypeScore=39.8350;MLEAC=3;MLEAF=0.500;MQ=37.32;MQ0=64;MQRankSum=-3.574;QD=0.39;ReadPosRankSum=-0.897;SB=-1.065e-02;VQSLOD=-68.1677;culprit=DP GT:AD:DP:GQ:PL:TP "0/1:218,23:241:73:73,0,3591:70" "0/1:188,39:227:99:172,0,4233:70" "0/1:217,31:248:74:74,0,5042:70"
+5 144321895 rs35068704 A T 1535.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.048;DB;DP=203;Dels=0.00;FS=13.289;HaplotypeScore=0.5075;MLEAC=2;MLEAF=0.333;MQ=57.36;MQ0=0;MQRankSum=2.191;QD=11.37;ReadPosRankSum=-1.361;SB=-7.640e+02;VQSLOD=5.7211;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:34,25:59:99:595,0,976:127" "0|0:68,0:68:99:0,190,2435:127" "1|0:39,37:76:99:979,0,1274:127"
+7 101161506 rs2158739 C T 4522.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.698;DB;DP=172;Dels=0.00;FS=4.280;HaplotypeScore=1.5077;MLEAC=5;MLEAF=0.833;MQ=58.18;MQ0=0;MQRankSum=-0.295;QD=26.29;ReadPosRankSum=0.974;SB=-2.287e+03;VQSLOD=8.2831;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,72:73:99:2443,202,0:110" "1|0:23,26:50:99:711,0,586:110" "1|1:0,48:49:99:1368,111,0:110"
+11 113825129 rs1150234 G A 2441.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.977;DB;DP=210;Dels=0.00;FS=0.000;HaplotypeScore=2.0700;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=0.877;QD=11.63;ReadPosRankSum=0.262;SB=-1.513e+03;VQSLOD=9.0378;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:30,33:63:99:881,0,774:127" "0/1:46,33:80:99:726,0,1020:127" "0/1:32,35:67:99:873,0,759:127"
+1 243135892 rs7517403 C T 2313.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=7.051;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.5884;MLEAC=4;MLEAF=0.667;MQ=37.62;MQ0=11;MQRankSum=-5.659;QD=13.77;ReadPosRankSum=-0.977;SB=-9.200e+02;VQSLOD=2.2480;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:31,24:55:99:501,0,891:123" "1|1:0,58:58:99:1263,123,0:123" "0|1:28,27:55:99:591,0,714:123"
+12 130522866 rs1613499 C T 3975.01 PASS AC=6;AF=1.00;AN=6;DB;DP=130;Dels=0.00;FS=0.000;HaplotypeScore=0.6332;MLEAC=6;MLEAF=1.00;MQ=59.11;MQ0=0;QD=30.58;SB=-1.386e+03;VQSLOD=10.2250;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,57:57:99:1939,144,0:73" "1|1:0,34:34:75:990,75,0:73" "1|1:0,39:39:78:1046,78,0:73"
+13 74611546 rs73214804 C T 639.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.487;DB;DP=164;Dels=0.00;FS=0.000;HaplotypeScore=1.4071;MLEAC=1;MLEAF=0.167;MQ=58.95;MQ0=0;MQRankSum=0.902;QD=11.21;ReadPosRankSum=-0.541;SB=-3.000e+02;VQSLOD=8.8824;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:53,0:53:99:0,135,1773:110" "0|0:53,1:54:99:0,111,1440:110" "0|1:24,33:57:99:674,0,388:110"
+12 101460237 rs7965836 C T 3485.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.070;DB;DP=247;Dels=0.00;FS=2.895;HaplotypeScore=0.6556;MLEAC=3;MLEAF=0.500;MQ=59.83;MQ0=0;MQRankSum=-0.655;QD=14.11;ReadPosRankSum=-0.983;SB=-1.581e+03;VQSLOD=8.4872;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:40,43:83:99:1287,0,1179:127" "0/1:44,36:80:99:1068,0,1363:127" "0/1:43,41:84:99:1130,0,1321:127"
+4 177855678 rs1545090 A G 7065.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1696;MLEAC=6;MLEAF=1.00;MQ=59.50;MQ0=0;QD=30.85;SB=-3.799e+03;VQSLOD=11.0069;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,84:84:99:2701,235,0:127" "1|1:0,79:80:99:2401,211,0:127" "1|1:0,65:65:99:1963,165,0:127"
+17 44809197 rs116187585 A G 8703.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-0.554;DB;DP=254;Dels=0.00;FS=3.487;HaplotypeScore=4.0582;MLEAC=6;MLEAF=1.00;MQ=59.58;MQ0=0;MQRankSum=1.677;QD=34.26;ReadPosRankSum=1.483;SB=-4.228e+03;VQSLOD=6.6144;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,96:97:99:3470,268,0:127" "1|1:0,82:84:99:2846,220,0:127" "1|1:0,73:73:99:2387,184,0:127"
+8 14463368 rs1355302 T A 2523.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.793;DB;DP=236;Dels=0.00;FS=3.776;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=59.14;MQ0=0;MQRankSum=-0.381;QD=15.97;ReadPosRankSum=-0.045;SB=-1.421e+03;VQSLOD=7.6920;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:36,43:79:99:1332,0,1176:127" "0|0:78,0:78:99:0,214,2749:127" "1|0:35,44:79:99:1230,0,1162:127"
+3 128140891 rs73201490 C T 1315.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.394;DB;DP=142;Dels=0.00;FS=0.667;HaplotypeScore=3.4886;MLEAC=2;MLEAF=0.333;MQ=58.69;MQ0=0;MQRankSum=1.733;QD=14.30;ReadPosRankSum=0.758;SB=-6.400e+02;VQSLOD=6.7020;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:29,24:53:99:636,0,670:104" "0|0:50,0:50:99:0,105,1188:104" "1|0:12,27:39:99:718,0,250:104"
+18 41449098 rs2045671 C T 8380.01 PASS AC=6;AF=1.00;AN=6;DB;DP=237;Dels=0.00;FS=0.000;HaplotypeScore=1.3482;MLEAC=6;MLEAF=1.00;MQ=59.65;MQ0=0;QD=35.36;SB=-4.462e+03;VQSLOD=11.6464;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,76:76:99:2756,214,0:127" "1|1:0,75:75:99:2635,202,0:127" "1|1:0,86:86:99:2989,229,0:127"
+6 110345430 rs56272355 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.241;DB;DP=230;Dels=0.00;FS=2.159;HaplotypeScore=1.7615;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-0.200;QD=11.46;ReadPosRankSum=-0.480;SB=-5.580e+02;VQSLOD=8.9824;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:77,0:77:99:0,220,2860:127" "0|0:75,0:76:99:0,184,2321:127" "0|1:35,42:77:99:917,0,926:127"
+5 112750674 rs9716322 A C 598.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-0.293;DB;DP=199;Dels=0.00;FS=2.948;HaplotypeScore=0.3328;MLEAC=1;MLEAF=0.167;MQ=45.61;MQ0=2;MQRankSum=-2.398;QD=12.21;ReadPosRankSum=1.159;SB=-8.101e+01;VQSLOD=2.7717;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,196,2534:127" "0|1:23,26:49:99:633,0,479:127" "0|0:68,1:69:99:0,174,2191:127"
+10 74020452 rs72806301 C A 1116.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.155;DB;DP=135;Dels=0.00;FS=3.279;HaplotypeScore=0.8720;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=-0.818;QD=11.88;ReadPosRankSum=1.484;SB=-6.800e+02;VQSLOD=7.2668;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:20,27:47:99:658,0,446:104" "0|0:41,0:41:99:0,105,1324:104" "1|0:25,22:47:99:497,0,482:104"
+8 66327344 rs13282622 G A 3918.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.514;DB;DP=192;Dels=0.00;FS=3.531;HaplotypeScore=1.6541;MLEAC=4;MLEAF=0.667;MQ=58.91;MQ0=0;MQRankSum=0.706;QD=20.41;ReadPosRankSum=-0.327;SB=-2.091e+03;VQSLOD=8.6266;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:34,37:71:99:1137,0,923:127" "0|1:32,28:61:99:806,0,988:127" "1|1:0,60:60:99:1975,153,0:127"
+5 36740339 rs36676 T G 6995.01 PASS AC=6;AF=1.00;AN=6;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=2.0768;MLEAC=6;MLEAF=1.00;MQ=59.46;MQ0=0;QD=30.41;SB=-3.034e+03;VQSLOD=10.9208;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,75:75:99:2261,195,0:127" "1|1:0,83:83:99:2579,217,0:127" "1|1:0,71:72:99:2155,181,0:127"
+7 124589684 rs12113765 G C 4948.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.607;DB;DP=243;Dels=0.00;FS=1.040;HaplotypeScore=3.3790;MLEAC=4;MLEAF=0.667;MQ=58.74;MQ0=0;MQRankSum=1.246;QD=20.36;ReadPosRankSum=-0.387;SB=-2.411e+03;VQSLOD=7.0507;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:44,27:71:99:796,0,1350:127" "1|1:0,84:85:99:2760,217,0:127" "0|1:41,46:87:99:1392,0,1180:127"
+9 89010476 rs164937 T C 736.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-3.977;DB;DP=216;Dels=0.00;FS=1.481;HaplotypeScore=1.0649;MLEAC=1;MLEAF=0.167;MQ=39.79;MQ0=9;MQRankSum=-3.028;QD=9.56;ReadPosRankSum=0.542;SB=-4.240e+02;VQSLOD=2.0772;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:66,0:66:99:0,174,2097:127" "0|1:40,37:77:99:771,0,876:127" "0|0:73,0:73:99:0,183,2147:127"
+18 10010426 rs4797393 T C 4197.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.425;DB;DP=210;Dels=0.00;FS=1.132;HaplotypeScore=1.2660;MLEAC=4;MLEAF=0.667;MQ=59.43;MQ0=0;MQRankSum=-2.916;QD=19.99;ReadPosRankSum=0.379;SB=-2.001e+03;VQSLOD=7.0312;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "1|1:0,65:65:99:2247,181,0:127" "1|0:35,39:75:99:1170,0,967:127" "1|0:41,29:70:99:780,0,1052:127"
+12 21328424 rs4149040 G C 2565.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.888;DB;DP=252;Dels=0.00;FS=9.753;HaplotypeScore=0.6082;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=1.166;QD=15.18;ReadPosRankSum=0.966;SB=-1.181e+03;VQSLOD=7.5539;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:40,49:89:99:1534,0,1308:127" "0|0:83,0:83:99:0,241,3117:127" "1|0:45,35:80:99:1070,0,1402:127"
+11 44985620 rs7106313 C T 338.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.185;DB;DP=162;Dels=0.00;FS=4.840;HaplotypeScore=2.0046;MLEAC=1;MLEAF=0.167;MQ=56.94;MQ0=0;MQRankSum=2.019;QD=8.67;ReadPosRankSum=0.983;SB=-2.190e+02;VQSLOD=6.6624;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:79,0:80:99:0,174,2084:72" "0|0:43,0:43:72:0,72,877:72" "0|1:20,18:39:99:373,0,365:72"
+5 3276081 rs4866540 G A 3653.01 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=5.002;DB;DP=176;Dels=0.00;FS=2.778;HaplotypeScore=19.0040;MLEAC=4;MLEAF=0.667;MQ=57.74;MQ0=0;MQRankSum=-0.569;QD=20.76;ReadPosRankSum=1.308;SB=-6.610e+02;VQSLOD=3.1833;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,71:72:99:2337,175,0:127" "1|0:26,25:51:99:719,0,601:127" "1|0:26,27:53:99:597,0,662:127"
+13 92742124 rs2148446 G A 1884.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.340;DB;DP=213;Dels=0.00;FS=0.000;HaplotypeScore=0.3156;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=0;MQRankSum=-2.935;QD=12.99;ReadPosRankSum=-0.579;SB=-9.540e+02;VQSLOD=7.2833;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "0|1:38,38:76:99:1130,0,1190:127" "0|0:68,0:68:99:0,190,2454:127" "1|0:38,31:69:99:793,0,1094:127"
+3 8399330 rs6770171 G A 6816.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.689;DB;DP=253;Dels=0.00;FS=0.637;HaplotypeScore=1.2788;MLEAC=5;MLEAF=0.833;MQ=58.42;MQ0=0;MQRankSum=0.607;QD=26.94;ReadPosRankSum=-0.503;SB=-3.369e+03;VQSLOD=8.0141;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,106:106:99:3784,292,0:127" "1|1:0,72:72:99:2164,169,0:127" "1|0:42,33:75:99:868,0,1146:127"
+12 48120010 rs3829317 A C 4015.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.659;DB;DP=162;Dels=0.00;FS=1.828;HaplotypeScore=2.1844;MLEAC=5;MLEAF=0.833;MQ=59.48;MQ0=0;MQRankSum=0.154;QD=24.78;ReadPosRankSum=0.482;SB=-2.240e+03;VQSLOD=8.1337;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,63:63:99:2024,163,0:110" "1|0:24,27:51:99:550,0,540:110" "1|1:0,48:48:99:1441,111,0:110"
+8 140651779 rs1469039 G A 1879.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.189;DB;DP=145;Dels=0.00;FS=0.000;HaplotypeScore=1.7695;MLEAC=3;MLEAF=0.500;MQ=58.39;MQ0=0;MQRankSum=0.745;QD=12.96;ReadPosRankSum=-0.159;SB=-9.360e+02;VQSLOD=9.0059;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:23,24:47:99:612,0,740:127" "0/1:21,31:52:99:684,0,478:127" "0/1:20,26:46:99:622,0,367:127"
+21 18433036 rs969905 A G 781.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.610;DB;DP=229;Dels=0.00;FS=2.230;HaplotypeScore=1.2866;MLEAC=1;MLEAF=0.167;MQ=59.55;MQ0=0;MQRankSum=0.300;QD=10.15;ReadPosRankSum=-0.384;SB=-4.990e+02;VQSLOD=9.5768;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:62,0:63:99:0,181,2380:127" "0|0:89,0:89:99:0,244,3177:127" "0|1:39,38:77:99:816,0,1256:127"
+2 155726628 . T G 1351.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=0.207;DP=193;Dels=0.00;FS=9.246;HaplotypeScore=0.5220;MLEAC=6;MLEAF=1.00;MQ=16.17;MQ0=87;MQRankSum=2.396;QD=7.00;ReadPosRankSum=1.069;SB=-4.420e+02;VQSLOD=-2.7874;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:3,56:59:60:591,60,0:27" "1|1:8,49:57:27:245,27,0:27" "1|1:12,65:77:57:553,57,0:27"
+3 26960556 rs4422260 T C 878.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-2.140;DB;DP=220;Dels=0.00;FS=1.108;HaplotypeScore=1.7204;MLEAC=2;MLEAF=0.333;MQ=41.87;MQ0=3;MQRankSum=-6.679;QD=5.97;ReadPosRankSum=-0.031;SB=-4.600e+02;VQSLOD=0.7170;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:73,0:73:99:0,208,2660:127" "0|1:32,48:80:99:759,0,915:127" "0|1:37,30:67:99:158,0,1092:127"
+1 186656152 rs4422959 G A 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=7.230;DB;DP=270;Dels=0.00;FS=7.290;HaplotypeScore=1.1750;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=0.399;QD=17.21;ReadPosRankSum=-0.869;SB=-6.320e+02;VQSLOD=7.6734;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:99,0:99:99:0,283,3341:127" "0|0:93,0:93:99:0,256,3022:127" "0|1:33,45:78:99:1377,0,917:127"
+12 29935607 rs7305813 A C 810.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.307;DB;DP=203;Dels=0.00;FS=14.326;HaplotypeScore=1.9820;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.164;QD=12.86;ReadPosRankSum=-0.733;SB=-2.950e+02;VQSLOD=7.9009;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:71,0:71:99:0,193,2479:127" "0|0:69,0:69:99:0,196,2464:127" "0|1:28,35:63:99:845,0,847:127"
+10 19567676 rs61458006 G T 599.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.610;DB;DP=195;Dels=0.00;FS=0.844;HaplotypeScore=0.8795;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.191;QD=11.31;ReadPosRankSum=-1.635;SB=-2.780e+02;VQSLOD=9.3606;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:75,0:75:99:0,208,2645:127" "0|1:30,23:53:99:634,0,915:127" "0|0:67,0:67:99:0,199,2540:127"
+5 132377304 rs72801439 A T 858.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.113;DB;DP=219;Dels=0.00;FS=10.632;HaplotypeScore=0.6638;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.881;QD=11.29;ReadPosRankSum=0.435;SB=-3.050e+02;VQSLOD=7.6837;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:67,0:67:99:0,163,2149:127" "0|1:43,33:76:99:893,0,1280:127" "0|0:76,0:76:99:0,199,2553:127"
+2 177175707 rs7355385 A G 2590.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.866;DB;DP=206;Dels=0.00;FS=14.872;HaplotypeScore=0.3111;MLEAC=3;MLEAF=0.500;MQ=59.12;MQ0=0;MQRankSum=-0.937;QD=20.40;ReadPosRankSum=-0.287;SB=-8.970e+02;VQSLOD=6.8179;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:33,32:65:99:856,0,1069:127" "1|1:0,62:62:99:1779,150,0:127" "0|0:78,1:79:99:0,193,2411:127"
+10 116646860 rs4752347 T A 4159.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.459;DB;DP=197;Dels=0.00;FS=3.519;HaplotypeScore=0.6313;MLEAC=4;MLEAF=0.667;MQ=59.27;MQ0=0;MQRankSum=1.049;QD=21.11;ReadPosRankSum=-1.271;SB=-2.347e+03;VQSLOD=8.3322;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,63:63:99:2191,169,0:127" "1|0:31,35:66:99:1031,0,863:127" "1|0:31,37:68:99:937,0,774:127"
+8 123499998 rs9693135 T C 926.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.820;DB;DP=207;Dels=0.00;FS=2.678;HaplotypeScore=1.2574;MLEAC=2;MLEAF=0.333;MQ=56.08;MQ0=0;MQRankSum=-2.729;QD=6.34;ReadPosRankSum=-0.269;SB=-8.230e+02;VQSLOD=4.3016;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:61,0:61:99:0,172,2301:127" "0|1:37,35:72:99:622,0,769:127" "0|1:48,26:74:99:343,0,1280:127"
+5 70856663 rs157045 T C 2040.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.809;DB;DP=234;Dels=0.00;FS=1.824;HaplotypeScore=1.0544;MLEAC=2;MLEAF=0.333;MQ=58.65;MQ0=0;MQRankSum=0.989;QD=13.16;ReadPosRankSum=0.719;SB=-8.820e+02;VQSLOD=7.3513;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:44,41:85:99:1087,0,1448:127" "1|0:28,42:70:99:992,0,789:127" "0|0:79,0:79:99:0,181,2342:127"
+5 58243302 rs457566 A C 6237.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.663;DB;DP=233;Dels=0.00;FS=3.429;HaplotypeScore=0.8859;MLEAC=5;MLEAF=0.833;MQ=59.70;MQ0=0;MQRankSum=-0.232;QD=26.77;ReadPosRankSum=0.957;SB=-2.566e+03;VQSLOD=9.3537;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,87:87:99:2923,229,0:127" "1|0:36,50:86:99:1429,0,1006:127" "1|1:0,60:60:99:1885,147,0:127"
+14 87263523 rs2542229 A C 8104.01 PASS AC=6;AF=1.00;AN=6;DB;DP=239;Dels=0.00;FS=0.000;HaplotypeScore=0.6305;MLEAC=6;MLEAF=1.00;MQ=59.17;MQ0=0;QD=33.91;SB=-4.393e+03;VQSLOD=11.3001;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,77:77:99:2810,214,0:127" "1|1:0,85:85:99:2877,223,0:127" "1|1:0,77:77:99:2417,187,0:127"
+10 65355538 rs10733794 A G 2464.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.392;DB;DP=193;Dels=0.00;FS=7.473;HaplotypeScore=2.5434;MLEAC=3;MLEAF=0.500;MQ=58.06;MQ0=2;MQRankSum=0.999;QD=18.96;ReadPosRankSum=-1.229;SB=-1.065e+03;VQSLOD=6.3934;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:33,32:65:99:830,0,1039:127" "1|1:1,64:65:99:1679,153,0:127" "0|0:63,0:63:99:0,159,2042:127"
+5 49438828 rs137880658 G A 424.24 VQSRTrancheSNP99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-4.376;DB;DP=748;DS;Dels=0.00;FS=7.184;HaplotypeScore=20.6618;MLEAC=1;MLEAF=0.167;MQ=19.63;MQ0=158;MQRankSum=3.819;QD=1.70;ReadPosRankSum=1.191;SB=-2.220e+02;VQSLOD=-98.2155;culprit=DP GT:AD:DP:GQ:PL:TP "0|0:249,0:249:99:0,555,4848:127" "0|1:204,46:250:99:459,0,2894:127" "0|0:249,0:249:99:0,480,4326:127"
+2 167166899 . T A 1064.78 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=0.023;DP=278;Dels=0.00;FS=9.890;HaplotypeScore=0.2774;MLEAC=6;MLEAF=1.00;MQ=10.47;MQ0=239;MQRankSum=1.643;QD=3.83;ReadPosRankSum=0.347;SB=-1.083e-02;VQSLOD=-6.9449;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:174,12:186:36:401,36,0:4" "1|1:37,14:52:39:431,39,0:4" "1|0:31,9:40:3:271,0,3:4"
+15 100799787 rs4965610 C T 2133.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.373;DB;DP=230;Dels=0.00;FS=1.037;HaplotypeScore=0.5427;MLEAC=3;MLEAF=0.500;MQ=58.84;MQ0=0;MQRankSum=0.169;QD=9.28;ReadPosRankSum=-0.098;SB=-1.328e+03;VQSLOD=7.8802;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:40,36:76:99:948,0,701:127" "0/1:45,38:83:99:761,0,635:127" "0/1:35,36:71:99:463,0,706:127"
+2 187694833 rs10191094 T C 1006.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.181;DB;DP=236;Dels=0.00;FS=9.083;HaplotypeScore=2.2688;MLEAC=1;MLEAF=0.167;MQ=59.73;MQ0=0;MQRankSum=-0.218;QD=13.07;ReadPosRankSum=-0.877;SB=-5.830e+02;VQSLOD=7.6003;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:82,0:82:99:0,232,3021:127" "0|0:77,0:77:99:0,217,2790:127" "0|1:33,44:77:99:1041,0,988:127"
+10 125452232 rs7900707 A G 3211.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-6.610;DB;DP=189;Dels=0.00;FS=17.742;HaplotypeScore=0.0000;MLEAC=4;MLEAF=0.667;MQ=59.66;MQ0=0;MQRankSum=0.614;QD=16.99;ReadPosRankSum=-0.321;SB=-1.553e+03;VQSLOD=6.9018;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,61:61:99:1944,168,0:127" "1|0:44,26:70:99:627,0,1357:127" "1|0:29,29:58:99:682,0,862:127"
+GL000212.1 28454 . T C 2248.99 VQSRTrancheSNP99.00to99.90 AC=4;AF=1.00;AN=4;BaseQRankSum=1.691;DP=94;Dels=0.00;FS=3.274;HaplotypeScore=0.9622;MLEAC=4;MLEAF=1.00;MQ=36.99;MQ0=7;MQRankSum=-0.428;QD=24.18;ReadPosRankSum=-1.284;SB=-1.053e+03;VQSLOD=1.2364;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,29:29:63:755,63,0:63" ./. "1|1:1,63:64:99:1530,135,0:63"
+12 122942070 rs10744217 A G 1812.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.353;DB;DP=179;Dels=0.00;FS=0.663;HaplotypeScore=1.4184;MLEAC=3;MLEAF=0.500;MQ=58.69;MQ0=0;MQRankSum=0.992;QD=15.10;ReadPosRankSum=1.081;SB=-5.860e+02;VQSLOD=8.4750;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:35,36:71:99:762,0,1100:92" "1|1:0,48:49:93:1095,93,0:92" "0|0:59,0:59:99:0,120,1560:92"
+X 84165195 rs5923187 C A 1009.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.103;DB;DP=194;Dels=0.00;FS=3.070;HaplotypeScore=2.8168;MLEAC=1;MLEAF=0.167;MQ=59.31;MQ0=0;MQRankSum=-0.675;QD=12.01;ReadPosRankSum=-1.463;SB=-5.890e+02;VQSLOD=8.2395;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:79,1:80:99:0,223,2856:60" "0|0:30,0:30:60:0,60,764:60" "0|1:40,44:84:99:1044,0,1007:60"
+14 47568119 rs1952206 T C 3399.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-9.721;DB;DP=230;Dels=0.00;FS=0.483;HaplotypeScore=0.6577;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=-0.479;QD=14.78;ReadPosRankSum=1.261;SB=-1.667e+03;VQSLOD=9.1589;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0/1:41,43:84:99:1239,0,1315:127" "0/1:28,43:71:99:1178,0,816:127" "0/1:40,35:75:99:982,0,1314:127"
+1 110091282 rs1279195 C T 952.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.646;DB;DP=101;Dels=0.00;FS=19.666;HaplotypeScore=1.9160;MLEAC=2;MLEAF=0.333;MQ=56.72;MQ0=0;MQRankSum=-0.345;QD=12.37;ReadPosRankSum=0.567;SB=-5.350e+02;VQSLOD=4.1741;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:14,29:46:99:726,0,219:42" "1|0:13,12:31:99:265,0,298:42" "0|0:18,0:24:42:0,42,522:42"
+5 10958957 rs852590 T C 8430.01 PASS AC=6;AF=1.00;AN=6;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=1.8272;MLEAC=6;MLEAF=1.00;MQ=59.31;MQ0=0;QD=34.69;SB=-4.118e+03;VQSLOD=10.8702;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:1,96:97:99:3594,277,0:127" "1|1:1,73:74:99:2318,181,0:127" "1|1:0,72:72:99:2518,196,0:127"
+21 34546711 rs11701692 T C 1030.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.884;DB;DP=152;Dels=0.00;FS=8.325;HaplotypeScore=1.9325;MLEAC=2;MLEAF=0.333;MQ=57.61;MQ0=0;MQRankSum=-0.291;QD=10.51;ReadPosRankSum=0.258;SB=-4.600e+02;VQSLOD=6.4601;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:35,25:61:99:574,0,1137:127" "1|0:19,18:37:99:495,0,498:127" "0|0:54,0:54:99:0,141,1811:127"
+18 50973169 rs11661305 A G 5320.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=2.753;DB;DP=196;Dels=0.00;FS=2.568;HaplotypeScore=1.1306;MLEAC=5;MLEAF=0.833;MQ=57.73;MQ0=0;MQRankSum=0.246;QD=27.14;ReadPosRankSum=0.186;SB=-2.411e+03;VQSLOD=7.5009;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,74:74:99:2621,202,0:127" "1|0:30,37:67:99:1009,0,842:127" "1|1:0,55:55:99:1690,132,0:127"
+6 120734422 rs62424426 T C 1091.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.268;DB;DP=208;Dels=0.00;FS=4.347;HaplotypeScore=0.7034;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=-0.188;QD=14.36;ReadPosRankSum=-0.149;SB=-5.560e+02;VQSLOD=8.6529;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:70,1:71:99:0,205,2692:127" "0|0:61,0:61:99:0,175,2298:127" "0|1:39,37:76:99:1126,0,1140:127"
+3 86234718 rs2324883 T C 7655.01 PASS AC=6;AF=1.00;AN=6;DB;DP=234;Dels=0.00;FS=0.000;HaplotypeScore=0.6487;MLEAC=6;MLEAF=1.00;MQ=59.51;MQ0=0;QD=32.71;SB=-4.142e+03;VQSLOD=11.2111;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,80:80:99:2857,223,0:127" "1|1:0,76:77:99:2512,196,0:127" "1|1:0,77:77:99:2286,178,0:127"
+3 158557110 rs34445802 G A 2374.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.805;DB;DP=237;Dels=0.00;FS=1.025;HaplotypeScore=1.6572;MLEAC=2;MLEAF=0.333;MQ=57.48;MQ0=0;MQRankSum=0.558;QD=14.05;ReadPosRankSum=-1.147;SB=-1.505e+03;VQSLOD=7.1338;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:43,56:99:99:1624,0,1344:127" "1|0:33,37:70:99:789,0,916:127" "0|0:68,0:68:99:0,156,2014:127"
+14 68051087 rs11628035 G A 4028.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.928;DB;DP=236;Dels=0.00;FS=8.184;HaplotypeScore=1.3296;MLEAC=3;MLEAF=0.500;MQ=58.83;MQ0=0;MQRankSum=1.834;QD=25.49;ReadPosRankSum=2.590;SB=-1.989e+03;VQSLOD=6.7911;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:38,39:77:99:1265,0,1112:127" "1|1:0,81:81:99:2763,214,0:127" "0|0:78,0:78:99:0,208,2673:127"
+17 21547285 rs62049731 A C 1322.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.987;DB;DP=569;Dels=0.00;FS=2.322;HaplotypeScore=42.4511;MLEAC=3;MLEAF=0.500;MQ=44.59;MQ0=24;MQRankSum=-6.240;QD=2.32;ReadPosRankSum=-5.171;SB=-6.369e+02;VQSLOD=-39.5319;culprit=DP GT:AD:DP:GQ:PL:TP "0/1:146,28:174:99:217,0,4187:127" "0/1:162,56:218:99:804,0,4298:127" "0/1:139,38:177:99:340,0,3842:127"
+16 83153777 rs4395063 T C 3143.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.771;DB;DP=205;Dels=0.00;FS=1.805;HaplotypeScore=1.0370;MLEAC=4;MLEAF=0.667;MQ=59.55;MQ0=0;MQRankSum=-1.380;QD=15.33;ReadPosRankSum=0.424;SB=-2.104e+03;VQSLOD=8.8241;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:31,31:62:99:867,0,865:127" "0|1:45,28:73:99:412,0,801:127" "1|1:0,70:70:99:1906,150,0:127"
+11 132780959 rs61906922 C T 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.221;DB;DP=263;Dels=0.00;FS=0.601;HaplotypeScore=1.8444;MLEAC=1;MLEAF=0.167;MQ=59.58;MQ0=0;MQRankSum=0.997;QD=15.25;ReadPosRankSum=-0.746;SB=-6.890e+02;VQSLOD=8.8133;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|0:87,0:87:99:0,250,2877:127" "0|0:87,0:88:99:0,253,3009:127" "0|1:43,45:88:99:1377,0,1138:127"
+13 109990322 rs7328109 T C 7198.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.487;DB;DP=245;Dels=0.00;FS=5.887;HaplotypeScore=1.8793;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=-0.236;QD=29.38;ReadPosRankSum=0.136;SB=-3.593e+03;VQSLOD=8.8925;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,79:79:99:2825,220,0:127" "1|0:33,54:87:99:1591,0,933:127" "1|1:0,79:79:99:2782,214,0:127"
+19 3739001 rs56138006 C T 976.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.634;DB;DP=118;Dels=0.00;FS=3.676;HaplotypeScore=1.4356;MLEAC=2;MLEAF=0.333;MQ=58.66;MQ0=0;MQRankSum=0.753;QD=11.22;ReadPosRankSum=1.107;SB=-6.380e+02;VQSLOD=7.4541;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:30,22:52:99:612,0,559:45" "0|0:31,0:31:45:0,45,527:45" "1|0:12,23:35:93:403,0,93:45"
+20 51353834 rs241795 G A 6115.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=7.909;DB;DP=268;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=4;MLEAF=0.667;MQ=59.38;MQ0=0;MQRankSum=-0.518;QD=22.82;ReadPosRankSum=-0.253;SB=-3.328e+03;VQSLOD=8.3999;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:46,54:100:99:1663,0,1247:127" "1|1:0,91:91:99:3189,247,0:127" "0|1:36,41:77:99:1263,0,901:127"
+13 37484693 rs1571317 T C 971.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.315;DB;DP=229;Dels=0.00;FS=3.052;HaplotypeScore=0.6603;MLEAC=1;MLEAF=0.167;MQ=58.51;MQ0=0;MQRankSum=1.885;QD=12.78;ReadPosRankSum=-0.343;SB=-5.750e+02;VQSLOD=7.3064;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:94,0:94:99:0,253,3258:127" "0|1:35,41:76:99:1006,0,924:127" "0|0:59,0:59:99:0,147,1872:127"
+7 158686803 rs55765467 T C 200.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-10.112;DB;DP=310;Dels=0.00;FS=2.596;HaplotypeScore=1.2829;MLEAC=3;MLEAF=0.500;MQ=47.32;MQ0=0;MQRankSum=-4.959;QD=0.65;ReadPosRankSum=-10.956;SB=-1.206e+03;VQSLOD=-17.6411;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0/1:64,33:97:99:148,0,1949:32" "0/1:73,45:118:58:58,0,2287:32" "0/1:65,30:95:33:33,0,1910:32"
+16 34610294 rs72812776 C T 603.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.361;DB;DP=270;Dels=0.00;FS=6.065;HaplotypeScore=3.1650;MLEAC=1;MLEAF=0.167;MQ=59.66;MQ0=0;MQRankSum=1.603;QD=7.83;ReadPosRankSum=0.296;SB=-2.820e+02;VQSLOD=3.3685;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:123,0:123:99:0,343,4443:127" "0|0:69,1:70:99:0,184,2397:127" "0|1:48,29:77:99:638,0,1483:127"
+5 102962771 rs6866105 A G 5087.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.665;DB;DP=200;Dels=0.00;FS=8.083;HaplotypeScore=2.2837;MLEAC=5;MLEAF=0.833;MQ=58.71;MQ0=0;MQRankSum=-0.503;QD=25.44;ReadPosRankSum=-0.482;SB=-2.172e+03;VQSLOD=7.2212;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,75:75:99:2373,184,0:127" "1|1:0,59:59:99:1776,141,0:127" "1|0:31,35:66:99:938,0,803:127"
+X 116855730 rs980389 A G 2366.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.939;DB;DP=173;Dels=0.00;FS=3.510;HaplotypeScore=0.9076;MLEAC=3;MLEAF=0.500;MQ=59.87;MQ0=0;MQRankSum=0.653;QD=21.51;ReadPosRankSum=0.730;SB=-1.218e+03;VQSLOD=7.9588;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:37,33:70:99:965,0,1249:114" "1|1:0,40:40:99:1446,114,0:114" "0|0:63,0:63:99:0,175,2284:114"
+4 161180100 rs167176 G C 2497.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.811;DB;DP=191;Dels=0.00;FS=5.370;HaplotypeScore=0.7812;MLEAC=3;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=-0.584;QD=13.07;ReadPosRankSum=0.756;SB=-1.206e+03;VQSLOD=8.0012;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:32,36:68:99:1100,0,895:127" "0/1:41,35:76:99:987,0,1028:127" "0/1:29,17:47:99:449,0,820:127"
+X 42192093 rs58959554 T C 1058.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-5.464;DB;DP=190;Dels=0.00;FS=6.809;HaplotypeScore=1.8813;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.212;QD=15.34;ReadPosRankSum=-0.173;SB=-3.970e+02;VQSLOD=8.0569;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:70,1:71:99:0,182,2683:127" "0|0:50,0:50:99:0,138,1794:127" "0|1:31,38:69:99:1093,0,947:127"
+3 76722766 rs264537 C G 845.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=3.666;DB;DP=202;Dels=0.00;FS=0.000;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.79;MQ0=0;MQRankSum=-0.795;QD=13.21;ReadPosRankSum=1.049;SB=-2.910e+02;VQSLOD=8.5280;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:70,0:70:99:0,208,2570:127" "0|0:68,0:68:99:0,193,2332:127" "0|1:34,30:64:99:880,0,995:127"
+14 96490389 rs72702859 C G 3394.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.529;DB;DP=264;Dels=0.00;FS=2.746;HaplotypeScore=3.1300;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=-1.258;QD=18.25;ReadPosRankSum=-0.961;SB=-1.966e+03;VQSLOD=6.3356;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:34,52:86:99:1358,0,886:127" "1|1:0,100:100:99:2036,180,0:127" "0|0:78,0:78:99:0,184,2393:127"
+14 20313371 rs10137604 A C 2154.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.894;DB;DP=255;Dels=0.00;FS=0.000;HaplotypeScore=2.0503;MLEAC=2;MLEAF=0.333;MQ=56.32;MQ0=1;MQRankSum=1.608;QD=13.72;ReadPosRankSum=0.126;SB=-1.124e+03;VQSLOD=5.6223;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:40,48:88:99:1426,0,1229:127" "0|0:98,0:98:99:0,268,3527:127" "1|0:43,26:69:99:767,0,1284:127"
+3 108612711 rs2399252 T A 3430.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.783;DB;DP=239;Dels=0.00;FS=4.436;HaplotypeScore=0.6593;MLEAC=3;MLEAF=0.500;MQ=59.64;MQ0=0;MQRankSum=-0.269;QD=14.35;ReadPosRankSum=-0.701;SB=-1.733e+03;VQSLOD=8.5079;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:48,34:82:99:1066,0,1620:127" "0/1:45,43:88:99:1370,0,1452:127" "0/1:36,32:69:99:994,0,1128:127"
+2 36994439 rs11124542 A C 1302.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.406;DB;DP=191;Dels=0.00;FS=3.335;HaplotypeScore=2.1785;MLEAC=3;MLEAF=0.500;MQ=58.93;MQ0=0;MQRankSum=-0.725;QD=6.82;ReadPosRankSum=0.302;SB=-1.006e+03;VQSLOD=7.9479;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:32,28:60:99:710,0,1044:127" "0/1:34,25:59:99:309,0,772:127" "0/1:45,27:72:99:322,0,1096:127"
+4 82427976 rs6841516 G A 561.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.022;DB;DP=166;Dels=0.00;FS=0.000;HaplotypeScore=1.4715;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=-1.555;QD=11.00;ReadPosRankSum=0.016;SB=-3.880e+02;VQSLOD=8.0989;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:51,0:51:99:0,132,1705:127" "0|1:22,29:51:99:596,0,483:127" "0|0:64,0:64:99:0,135,1755:127"
+17 66991216 rs61697543 T C 738.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.530;DB;DP=252;Dels=0.00;FS=1.490;HaplotypeScore=1.7074;MLEAC=1;MLEAF=0.167;MQ=59.36;MQ0=0;MQRankSum=0.771;QD=10.86;ReadPosRankSum=-0.724;SB=-3.930e+02;VQSLOD=8.8864;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:95,0:95:99:0,268,3511:127" "0|0:89,0:89:99:0,235,3058:127" "0|1:33,35:68:99:773,0,965:127"
+5 29069162 rs658439 G A 499.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.981;DB;DP=199;Dels=0.00;FS=11.196;HaplotypeScore=1.6038;MLEAC=1;MLEAF=0.167;MQ=52.70;MQ0=0;MQRankSum=-0.608;QD=9.42;ReadPosRankSum=-1.103;SB=-2.310e+02;VQSLOD=4.0183;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:86,0:86:99:0,211,2509:110" "0|0:60,0:60:99:0,111,1240:110" "0|1:30,23:53:99:534,0,523:110"
+6 45421630 rs1343799 C T 5422.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.419;DB;DP=240;Dels=0.00;FS=10.689;HaplotypeScore=0.7979;MLEAC=4;MLEAF=0.667;MQ=59.46;MQ0=0;MQRankSum=1.089;QD=22.59;ReadPosRankSum=1.252;SB=-2.647e+03;VQSLOD=7.7035;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:29,43:72:99:1445,0,843:127" "0|1:43,37:80:99:1121,0,1302:127" "1|1:0,88:88:99:2856,220,0:127"
+21 25702950 rs2260875 C G 3462.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.156;DB;DP=237;Dels=0.00;FS=2.900;HaplotypeScore=1.5444;MLEAC=3;MLEAF=0.500;MQ=59.04;MQ0=0;MQRankSum=0.386;QD=14.61;ReadPosRankSum=-1.455;SB=-1.683e+03;VQSLOD=8.0501;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0/1:37,40:77:99:1282,0,1101:127" "0/1:43,36:79:99:1114,0,1317:127" "0/1:45,36:81:99:1066,0,1329:127"
+X 150239197 rs6627349 T C 4677.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.731;DB;DP=179;Dels=0.00;FS=0.000;HaplotypeScore=1.6094;MLEAC=5;MLEAF=0.833;MQ=59.69;MQ0=0;MQRankSum=0.676;QD=26.13;ReadPosRankSum=0.494;SB=-2.442e+03;VQSLOD=10.5525;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,66:66:99:2387,190,0:99" "1|1:0,40:40:99:1243,99,0:99" "1|0:36,37:73:99:1047,0,1039:99"
+11 26026566 rs7942277 T C 5414.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=58.89;MQ0=0;QD=30.76;SB=-2.812e+03;VQSLOD=11.0501;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,53:53:99:1707,132,0:122" "1|1:0,53:53:99:1581,123,0:122" "1|1:0,70:70:99:2126,163,0:122"
+3 60283791 rs10154846 T C 669.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.270;DB;DP=204;Dels=0.00;FS=1.585;HaplotypeScore=1.6639;MLEAC=1;MLEAF=0.167;MQ=59.39;MQ0=0;MQRankSum=0.370;QD=10.14;ReadPosRankSum=1.636;SB=-2.690e+02;VQSLOD=8.9468;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:63,0:63:99:0,190,2440:127" "0|1:34,32:66:99:704,0,1020:127" "0|0:74,0:75:99:0,190,2372:127"
+2 54408283 rs55993481 T G 2128.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.961;DB;DP=222;Dels=0.00;FS=1.744;HaplotypeScore=3.9553;MLEAC=2;MLEAF=0.333;MQ=59.69;MQ0=0;MQRankSum=0.670;QD=14.28;ReadPosRankSum=1.313;SB=-1.076e+03;VQSLOD=6.5064;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:35,46:81:99:1392,0,921:127" "1|0:35,33:68:99:775,0,878:127" "0|0:73,0:73:99:0,175,2164:127"
+14 56951735 rs1189276 G A 6939.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=3.878;DB;DP=235;Dels=0.00;FS=9.373;HaplotypeScore=0.9063;MLEAC=5;MLEAF=0.833;MQ=59.52;MQ0=0;MQRankSum=-0.550;QD=29.53;ReadPosRankSum=1.104;SB=-3.438e+03;VQSLOD=8.7592;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:1,92:93:99:3558,274,0:127" "1|1:0,60:60:99:2120,165,0:127" "1|0:40,42:82:99:1261,0,1194:127"
+15 53677501 . T G 770.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-8.969;DP=210;Dels=0.00;FS=347.467;HaplotypeScore=2.0911;MLEAC=3;MLEAF=0.500;MQ=58.31;MQ0=0;MQRankSum=0.438;QD=3.67;ReadPosRankSum=-6.409;SB=-5.499e-03;VQSLOD=-307.0964;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:59,20:79:94:94,0,1389:94" "0/1:41,31:72:99:438,0,721:94" "0/1:37,21:59:99:277,0,521:94"
+19 37226152 rs3108217 G C 2076.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.215;DB;DP=145;Dels=0.00;FS=2.159;HaplotypeScore=0.5869;MLEAC=4;MLEAF=0.667;MQ=58.59;MQ0=0;MQRankSum=1.160;QD=14.32;ReadPosRankSum=-0.725;SB=-1.027e+03;VQSLOD=7.4915;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:25,30:55:99:789,0,709:63" "1|1:0,29:29:63:772,63,0:63" "0|1:35,25:61:99:557,0,789:63"
+11 65339346 rs1194104 C T 1804.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.465;DB;DP=189;Dels=0.00;FS=8.432;HaplotypeScore=2.2718;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=-0.120;QD=13.67;ReadPosRankSum=-0.306;SB=-1.061e+03;VQSLOD=7.9509;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:57,0:57:99:0,157,2050:127" "0|1:30,35:65:99:781,0,822:127" "0|1:23,44:67:99:1062,0,690:127"
+1 59635894 rs331648 T A 839.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.038;DB;DP=211;Dels=0.00;FS=1.427;HaplotypeScore=1.5485;MLEAC=1;MLEAF=0.167;MQ=58.68;MQ0=0;MQRankSum=-0.422;QD=11.82;ReadPosRankSum=-0.180;SB=-5.520e+02;VQSLOD=7.9477;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,199,2578:127" "0|0:62,0:62:99:0,169,2205:127" "0|1:33,38:71:99:874,0,897:127"
+6 162459664 rs2849564 C T 1819.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.399;DB;DP=201;Dels=0.00;FS=3.295;HaplotypeScore=2.5591;MLEAC=2;MLEAF=0.333;MQ=59.38;MQ0=0;MQRankSum=1.792;QD=12.90;ReadPosRankSum=-1.045;SB=-1.068e+03;VQSLOD=8.1160;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:28,40:68:99:1007,0,793:120" "1|0:38,35:73:99:851,0,831:120" "0|0:60,0:60:99:0,120,1421:120"
+1 17032814 rs2773183 T C 2828.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879;DB;DP=322;Dels=0.00;FS=2.430;HaplotypeScore=15.4499;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.916;QD=8.78;ReadPosRankSum=-1.245;SB=-1.943e+03;VQSLOD=-1.4207;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:63,59:122:99:1434,0,1831:127" "0/1:53,56:109:99:910,0,871:127" "0/1:61,30:91:99:523,0,1257:127"
+2 237156689 rs13390270 G A 852.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.150;DB;DP=205;Dels=0.00;FS=0.710;HaplotypeScore=1.7295;MLEAC=1;MLEAF=0.167;MQ=59.06;MQ0=0;MQRankSum=-0.193;QD=11.67;ReadPosRankSum=1.262;SB=-4.790e+02;VQSLOD=8.4962;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:73,0:73:99:0,202,2606:108" "0|1:39,34:73:99:887,0,1027:108" "0|0:59,0:59:99:0,108,1384:108"
+6 55412503 rs12201934 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.280;DB;DP=182;Dels=0.00;FS=0.744;HaplotypeScore=0.3332;MLEAC=1;MLEAF=0.167;MQ=59.64;MQ0=0;MQRankSum=-0.765;QD=13.57;ReadPosRankSum=0.147;SB=-4.590e+02;VQSLOD=9.3766;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:61,0:61:99:0,181,2371:127" "0|1:35,30:65:99:917,0,1046:127" "0|0:56,0:56:99:0,150,1969:127"
+4 39062189 rs2566127 T C 2641.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.019;DB;DP=201;Dels=0.00;FS=1.101;HaplotypeScore=2.8834;MLEAC=3;MLEAF=0.500;MQ=58.96;MQ0=0;MQRankSum=0.932;QD=13.14;ReadPosRankSum=-0.596;SB=-1.401e+03;VQSLOD=7.9734;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:35,29:64:99:880,0,1168:127" "0/1:37,32:70:99:796,0,1021:127" "0/1:31,36:67:99:1004,0,877:127"
+13 28463938 rs954750 C T 2740.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.206;DB;DP=242;Dels=0.00;FS=0.000;HaplotypeScore=4.0078;MLEAC=2;MLEAF=0.333;MQ=59.46;MQ0=0;MQRankSum=0.880;QD=16.61;ReadPosRankSum=-0.617;SB=-1.312e+03;VQSLOD=6.7692;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:40,43:83:99:1362,0,1242:127" "1|0:35,47:82:99:1417,0,1010:127" "0|0:76,0:77:99:0,205,2635:127"
+7 38984187 rs118081099 A C 569.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.110;DB;DP=182;Dels=0.00;FS=6.196;HaplotypeScore=0.5533;MLEAC=1;MLEAF=0.167;MQ=54.22;MQ0=0;MQRankSum=1.675;QD=9.33;ReadPosRankSum=1.162;SB=-1.260e+02;VQSLOD=4.8877;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:72,0:72:99:0,196,2446:127" "0|1:38,23:61:99:604,0,1196:127" "0|0:48,1:49:99:0,138,1711:127"
+4 30898977 rs4386561 G A 2449.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.817;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.9382;MLEAC=2;MLEAF=0.333;MQ=58.94;MQ0=0;MQRankSum=0.173;QD=15.70;ReadPosRankSum=1.051;SB=-1.131e+03;VQSLOD=8.3611;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:33,46:79:99:1380,0,944:127" "0|0:75,0:75:99:0,202,2608:127" "1|0:43,34:77:99:1108,0,1335:127"
+20 3199373 rs2422861 G A 896.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.452;DB;DP=135;Dels=0.00;FS=0.664;HaplotypeScore=2.8371;MLEAC=3;MLEAF=0.500;MQ=58.47;MQ0=0;MQRankSum=-0.217;QD=6.64;ReadPosRankSum=0.111;SB=-6.080e+02;VQSLOD=7.7118;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:32,24:56:99:472,0,640:127" "0/1:25,15:40:99:229,0,603:127" "0/1:20,19:39:99:234,0,379:127"
+4 64522064 rs4860541 A G 5942.01 PASS AC=6;AF=1.00;AN=6;DB;DP=188;Dels=0.00;FS=0.000;HaplotypeScore=0.2889;MLEAC=6;MLEAF=1.00;MQ=56.20;MQ0=0;QD=31.61;SB=-3.348e+03;VQSLOD=8.5367;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,68:68:99:2119,169,0:127" "1|1:0,52:53:99:1661,132,0:127" "1|1:0,67:67:99:2162,172,0:127"
+12 90856710 rs825945 T C 1096.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.342;DB;DP=193;Dels=0.00;FS=2.164;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=2.071;QD=9.70;ReadPosRankSum=-1.697;SB=-5.710e+02;VQSLOD=7.3118;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:80,0:80:99:0,232,3042:127" "0|1:30,21:51:99:511,0,921:127" "0|1:36,26:62:99:624,0,1085:127"
+5 20435939 rs12697584 A C 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-5.396;DB;DP=246;Dels=0.00;FS=4.681;HaplotypeScore=0.8744;MLEAC=2;MLEAF=0.333;MQ=59.74;MQ0=0;MQRankSum=-0.850;QD=14.20;ReadPosRankSum=0.391;SB=-1.305e+03;VQSLOD=8.1327;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:85,0:85:99:0,241,3183:127" "0|1:41,37:78:99:1062,0,1304:127" "0|1:39,44:83:99:1263,0,1222:127"
+1 146610795 rs58742099 C T 2831.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.298;DB;DP=261;Dels=0.00;FS=7.033;HaplotypeScore=13.9060;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=0.753;QD=16.27;ReadPosRankSum=-1.405;SB=-1.481e+03;VQSLOD=3.4221;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:39,43:82:99:1329,0,1080:127" "1|0:40,52:92:99:1541,0,1241:127" "0|0:87,0:87:99:0,238,3098:127"
+18 67950442 rs62091919 T G 1779.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.517;DB;DP=195;Dels=0.00;FS=0.562;HaplotypeScore=1.5454;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.006;QD=12.89;ReadPosRankSum=-0.268;SB=-9.170e+02;VQSLOD=9.6268;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:40,32:72:99:967,0,1318:127" "0|0:55,2:57:99:0,141,1865:127" "1|0:36,30:66:99:851,0,1042:127"
+1 175207612 rs11484568 C T 1920.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.643;DB;DP=216;Dels=0.00;FS=0.537;HaplotypeScore=2.2467;MLEAC=2;MLEAF=0.333;MQ=58.99;MQ0=0;MQRankSum=0.383;QD=14.12;ReadPosRankSum=0.169;SB=-1.064e+03;VQSLOD=8.5912;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:34,40:74:99:1152,0,995:127" "0|0:80,0:80:99:0,208,2602:127" "1|0:34,28:62:99:807,0,998:127"
+13 56456878 rs2997102 C A 9454.01 PASS AC=6;AF=1.00;AN=6;DB;DP=257;Dels=0.00;FS=0.000;HaplotypeScore=0.9537;MLEAC=6;MLEAF=1.00;MQ=59.57;MQ0=0;QD=36.79;SB=-4.826e+03;VQSLOD=11.5149;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,99:99:99:3692,280,0:127" "1|1:0,88:88:99:3239,253,0:127" "1|1:0,70:70:99:2523,193,0:127"
+13 65275154 rs359338 G A 1963.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.733;DB;DP=173;Dels=0.00;FS=3.628;HaplotypeScore=0.9480;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=-0.676;QD=14.54;ReadPosRankSum=0.399;SB=-1.054e+03;VQSLOD=8.4489;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:31,28:59:99:883,0,990:108" "1|0:39,37:76:99:1119,0,1112:108" "0|0:38,0:38:99:0,108,1390:108"
+9 98491693 rs12337935 C A 1474.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.098;DB;DP=97;Dels=0.00;FS=14.282;HaplotypeScore=1.7726;MLEAC=4;MLEAF=0.667;MQ=58.64;MQ0=0;MQRankSum=-0.224;QD=15.20;ReadPosRankSum=1.166;SB=-6.430e+02;VQSLOD=5.7986;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:14,12:26:99:348,0,352:63" "1|1:0,28:29:63:781,63,0:63" "0|1:17,25:42:99:387,0,364:63"
+12 58867437 rs140632614 G T 829.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=1.409;DB;DP=144;Dels=0.00;FS=68.612;HaplotypeScore=0.8667;MLEAC=4;MLEAF=0.667;MQ=35.15;MQ0=16;MQRankSum=-7.440;QD=5.76;ReadPosRankSum=-0.245;SB=-1.011e+00;VQSLOD=-16.4891;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:34,24:58:99:291,0,1100:44" "0|1:42,8:50:61:61,0,1319:44" "1|1:1,35:36:45:519,45,0:44"
+4 12652343 rs13114660 G T 610.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.176;DB;DP=127;Dels=0.00;FS=0.000;HaplotypeScore=1.5681;MLEAC=1;MLEAF=0.167;MQ=58.86;MQ0=0;MQRankSum=-0.468;QD=16.06;ReadPosRankSum=1.246;SB=-3.060e+02;VQSLOD=7.8400;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:43,0:43:99:0,120,1561:102" "0|1:15,23:38:99:645,0,407:102" "0|0:44,1:46:99:0,103,1539:102"
+GL000215.1 142616 . T C 976.25 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DP=80;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=21.04;MQ0=42;QD=12.20;SB=-8.001e+01;VQSLOD=-0.4104;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,33:33:42:516,42,0:19" "1|1:0,21:21:24:272,24,0:19" "1|1:0,26:26:21:226,21,0:19"
+6 18687376 rs9383429 A T 1162.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.746;DB;DP=232;Dels=0.00;FS=0.638;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.42;MQ0=0;MQRankSum=-0.733;QD=15.71;ReadPosRankSum=-0.146;SB=-6.490e+02;VQSLOD=9.4317;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:82,0:82:99:0,241,3181:127" "0|0:76,0:76:99:0,217,2832:127" "0|1:33,41:74:99:1197,0,1008:127"
+10 95435201 rs2422323 C T 4017.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.438;DB;DP=203;Dels=0.00;FS=13.125;HaplotypeScore=3.2358;MLEAC=4;MLEAF=0.667;MQ=55.24;MQ0=0;MQRankSum=1.174;QD=19.79;ReadPosRankSum=-0.655;SB=-2.177e+03;VQSLOD=4.5957;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:38,45:83:99:1327,0,931:127" "1|1:1,63:64:99:1966,156,0:127" "0|1:30,25:56:99:724,0,807:127"
+6 89947117 rs9942462 A G 5019.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.654;DB;DP=181;Dels=0.00;FS=0.000;HaplotypeScore=3.3205;MLEAC=6;MLEAF=1.00;MQ=53.30;MQ0=0;MQRankSum=0.428;QD=27.73;ReadPosRankSum=1.090;SB=-3.151e+03;VQSLOD=5.6763;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,59:60:99:1715,138,0:92" "1|1:1,55:56:93:1401,93,0:92" "1|1:0,65:65:99:1903,153,0:92"
+5 174249229 rs11739079 C G 1613.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.540;DB;DP=190;Dels=0.00;FS=6.482;HaplotypeScore=2.0416;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-0.898;QD=11.86;ReadPosRankSum=0.601;SB=-8.320e+02;VQSLOD=7.7782;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:32,43:75:99:1069,0,928:123" "0|0:54,0:54:99:0,123,1554:123" "1|0:33,27:61:99:583,0,883:123"
+9 16302655 rs9298755 T G 1394.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.356;DB;DP=200;Dels=0.00;FS=0.000;HaplotypeScore=3.1863;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=0.586;QD=10.03;ReadPosRankSum=-0.771;SB=-8.720e+02;VQSLOD=7.7724;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:60,1:61:99:0,165,2004:127" "0|1:29,28:57:99:494,0,759:127" "0|1:41,40:82:99:939,0,1069:127"
+3 137840974 rs2622698 C A 6792.01 PASS AC=6;AF=1.00;AN=6;DB;DP=232;Dels=0.00;FS=0.000;HaplotypeScore=2.6477;MLEAC=6;MLEAF=1.00;MQ=59.04;MQ0=0;QD=29.28;SB=-3.999e+03;VQSLOD=9.7681;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,79:79:99:2640,205,0:127" "1|1:0,78:78:99:2229,178,0:127" "1|1:0,75:75:99:1923,153,0:127"
+8 78181000 rs1563030 A G 5178.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.030;DB;DP=192;Dels=0.00;FS=4.675;HaplotypeScore=2.9473;MLEAC=5;MLEAF=0.833;MQ=59.62;MQ0=0;MQRankSum=-0.467;QD=26.97;ReadPosRankSum=-0.855;SB=-2.617e+03;VQSLOD=7.3445;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,59:59:99:1954,150,0:127" "1|0:32,37:70:99:1198,0,888:127" "1|1:0,63:63:99:2026,156,0:127"
+19 54644879 rs36636 G A 1790.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.505;DB;DP=187;Dels=0.00;FS=4.408;HaplotypeScore=1.5043;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-1.266;QD=13.88;ReadPosRankSum=-1.226;SB=-1.081e+03;VQSLOD=7.8045;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:30,27:57:99:811,0,726:127" "1|0:31,41:72:99:1018,0,730:127" "0|0:58,0:58:99:0,144,1815:127"
+7 79508376 rs2525826 G T 716.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.152;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=0.8658;MLEAC=1;MLEAF=0.167;MQ=59.48;MQ0=0;MQRankSum=1.420;QD=13.51;ReadPosRankSum=0.263;SB=-4.080e+02;VQSLOD=9.5728;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:65,0:65:99:0,181,2312:127" "0|0:78,0:78:99:0,226,2916:127" "0|1:27,26:53:99:751,0,845:127"
+1 90146546 rs7512447 C T 8721.01 PASS AC=6;AF=1.00;AN=6;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.40;MQ0=0;QD=36.19;SB=-4.084e+03;VQSLOD=11.3217;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,71:71:99:2599,196,0:127" "1|1:0,86:86:99:3042,235,0:127" "1|1:0,84:84:99:3080,238,0:127"
+15 92857342 rs12101550 A G 2734.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.995;DB;DP=226;Dels=0.00;FS=3.761;HaplotypeScore=1.5682;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=0.761;QD=12.10;ReadPosRankSum=-0.587;SB=-1.469e+03;VQSLOD=9.1510;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:45,37:82:99:853,0,1356:127" "0/1:29,40:69:99:966,0,852:127" "0/1:38,37:75:99:954,0,1085:127"
+5 93119893 rs6879620 G A 4262.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.930;DB;DP=239;Dels=0.00;FS=1.050;HaplotypeScore=2.1583;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=0.891;QD=17.83;ReadPosRankSum=-2.670;SB=-2.596e+03;VQSLOD=7.0681;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:49,42:91:99:1098,0,1410:127" "0|1:36,38:74:99:890,0,1008:127" "1|1:0,74:74:99:2274,178,0:127"
+7 89752110 rs39232 T G 3944.01 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=1.4477;MLEAC=6;MLEAF=1.00;MQ=38.19;MQ0=21;QD=18.26;SB=-2.716e+03;VQSLOD=2.6638;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,70:70:99:1564,132,0:101" "1|1:0,79:79:99:1258,108,0:101" "1|1:0,66:66:99:1122,102,0:101"
+1 100763317 rs6681810 G C 5583.01 PASS AC=6;AF=1.00;AN=6;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=3.7201;MLEAC=6;MLEAF=1.00;MQ=58.52;MQ0=0;QD=28.48;SB=-2.737e+03;VQSLOD=7.9151;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,76:77:99:2211,192,0:127" "1|1:0,56:56:99:1593,141,0:127" "1|1:0,62:62:99:1779,156,0:127"
+16 5754758 rs11644707 C T 1012.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.777;DB;DP=161;Dels=0.00;FS=0.000;HaplotypeScore=2.4572;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=0.699;QD=9.64;ReadPosRankSum=2.624;SB=-5.580e+02;VQSLOD=7.0970;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:31,26:57:99:627,0,943:125" "0|0:56,0:56:99:0,126,1597:125" "1|0:32,16:48:99:424,0,785:125"
+5 154441640 rs467330 A C 1133.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.127;DB;DP=235;Dels=0.00;FS=2.103;HaplotypeScore=1.1893;MLEAC=1;MLEAF=0.167;MQ=59.65;MQ0=0;MQRankSum=0.766;QD=12.59;ReadPosRankSum=-0.535;SB=-6.500e+02;VQSLOD=9.8335;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:61,0:61:99:0,172,2172:127" "0|1:45,45:90:99:1168,0,1368:127" "0|0:82,1:84:99:0,226,2825:127"
+4 132671861 rs6856716 C G 2622.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=3.143;DB;DP=617;DS;Dels=0.00;FS=5.808;HaplotypeScore=34.4109;MLEAC=2;MLEAF=0.333;MQ=24.78;MQ0=42;MQRankSum=3.293;QD=5.89;ReadPosRankSum=-0.736;SB=-1.412e+03;VQSLOD=-77.3455;culprit=DP GT:AD:DP:GQ:PL:TP "0|1:125,98:223:99:1761,0,1486:127" "0|0:171,0:172:99:0,300,2641:127" "1|0:152,70:222:99:900,0,2086:127"
+6 35346891 . C T 483.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-6.402;DP=205;Dels=0.02;FS=214.154;HaplotypeScore=4.5086;MLEAC=3;MLEAF=0.500;MQ=51.07;MQ0=1;MQRankSum=-2.038;QD=2.36;ReadPosRankSum=-2.250;SB=-1.065e-02;VQSLOD=-116.9542;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:48,31:79:99:257,0,635:80" "0/1:40,22:62:99:185,0,308:80" "0/1:44,16:60:80:80,0,534:80"
+2 127445050 rs113647072 A G 1773.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.856;DB;DP=154;Dels=0.00;FS=4.202;HaplotypeScore=2.2701;MLEAC=4;MLEAF=0.667;MQ=59.16;MQ0=0;MQRankSum=0.759;QD=11.51;ReadPosRankSum=1.290;SB=-1.402e+03;VQSLOD=7.9185;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:26,28:54:99:652,0,472:78" "0|1:26,22:49:99:350,0,462:78" "1|1:0,50:51:78:813,78,0:78"
+11 103989190 rs1545865 T C 4915.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.030;DB;DP=219;Dels=0.00;FS=1.231;HaplotypeScore=1.2090;MLEAC=4;MLEAF=0.667;MQ=59.37;MQ0=0;MQRankSum=1.103;QD=22.44;ReadPosRankSum=0.773;SB=-2.213e+03;VQSLOD=8.9081;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:23,40:63:99:1203,0,669:127" "0|1:36,52:88:99:1433,0,1136:127" "1|1:0,68:68:99:2279,178,0:127"
+7 4683258 rs62450857 G A 1127.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.991;DB;DP=191;Dels=0.00;FS=3.236;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=57.16;MQ0=0;MQRankSum=1.297;QD=14.09;ReadPosRankSum=0.469;SB=-4.730e+02;VQSLOD=6.6182;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:66,0:66:99:0,196,2495:120" "0|1:38,42:80:99:1162,0,1016:120" "0|0:45,0:45:99:0,120,1531:120"
+9 138617823 rs55724592 C T 53.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.380;DB;DP=72;Dels=0.00;FS=8.078;HaplotypeScore=1.0225;MLEAC=1;MLEAF=0.167;MQ=58.90;MQ0=0;MQRankSum=0.851;QD=2.66;ReadPosRankSum=-0.344;SB=-9.096e+01;VQSLOD=4.2652;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:20,0:20:48:0,48,580:44" "0|0:32,0:32:48:0,48,577:44" "0|1:10,10:20:88:88,0,199:44"
+3 48757773 rs61137521 A G 3103.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.794;DB;DP=172;Dels=0.00;FS=0.000;HaplotypeScore=1.8954;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=-0.693;QD=18.04;ReadPosRankSum=-1.667;SB=-1.874e+03;VQSLOD=7.9241;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,50:51:99:1723,141,0:127" "1|0:31,34:65:99:745,0,814:127" "1|0:24,32:56:99:677,0,603:127"
+11 19325064 rs793250 G A 5752.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.080;DB;DP=203;Dels=0.00;FS=2.530;HaplotypeScore=0.8165;MLEAC=5;MLEAF=0.833;MQ=59.35;MQ0=0;MQRankSum=-0.061;QD=28.34;ReadPosRankSum=0.095;SB=-3.093e+03;VQSLOD=9.4617;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,71:71:99:2527,190,0:127" "1|1:0,78:78:99:2626,205,0:127" "1|0:32,22:54:99:599,0,768:127"
+15 42065422 rs2925337 A C 5231.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.68;MQ0=0;QD=29.72;SB=-3.112e+03;VQSLOD=11.0322;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,54:54:99:1770,138,0:127" "1|1:0,68:68:99:1750,138,0:127" "1|1:0,54:54:99:1711,132,0:127"
+3 189981901 . A G 179.25 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=2.258;DP=274;Dels=0.00;FS=73.736;HaplotypeScore=1.8333;MLEAC=1;MLEAF=0.167;MQ=54.08;MQ0=6;MQRankSum=-2.651;QD=1.97;ReadPosRankSum=-6.101;SB=-6.400e+01;VQSLOD=-18.1951;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:64,27:91:99:214,0,679:51" "1|0:78,10:88:0:0,21,1685:51" "0|0:86,9:95:74:0,74,1891:51"
+6 1620147 rs2569882 T C 252.3 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.862;DB;DP=38;Dels=0.00;FS=8.023;HaplotypeScore=0.2217;MLEAC=5;MLEAF=0.833;MQ=57.65;MQ0=0;MQRankSum=-0.918;QD=9.34;ReadPosRankSum=0.584;SB=-4.005e+01;VQSLOD=4.3258;culprit=DP GT:AD:DP:GQ:PL:TP "1|1:0,17:17:21:254,21,0:4" "1|0:3,8:11:2:0,3,40:4" "1|1:0,10:10:3:39,3,0:4"
+4 169085855 rs2251558 A G 1161.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.721;DB;DP=244;Dels=0.00;FS=5.247;HaplotypeScore=0.4893;MLEAC=1;MLEAF=0.167;MQ=59.91;MQ0=0;MQRankSum=1.574;QD=13.99;ReadPosRankSum=0.454;SB=-5.590e+02;VQSLOD=7.4222;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:77,0:77:99:0,226,2915:127" "0|1:43,40:83:99:1196,0,1294:127" "0|0:84,0:84:99:0,232,2950:127"
+15 62088952 rs35033959 A T 3546.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.220;DB;DP=241;Dels=0.00;FS=14.286;HaplotypeScore=0.2774;MLEAC=3;MLEAF=0.500;MQ=59.77;MQ0=0;MQRankSum=-1.969;QD=14.71;ReadPosRankSum=0.341;SB=-1.970e+03;VQSLOD=6.3785;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:45,44:89:99:1265,0,1533:127" "0/1:34,38:72:99:1133,0,1137:127" "0/1:41,39:80:99:1148,0,1303:127"
+10 29082980 . G C 42.53 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.216;DP=107;Dels=0.00;FS=60.979;HaplotypeScore=1.0911;MLEAC=3;MLEAF=0.500;MQ=55.72;MQ0=0;MQRankSum=-0.633;QD=0.40;ReadPosRankSum=-4.307;SB=-2.798e-01;VQSLOD=-11.1718;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:30,12:43:12:12,0,757:12" "0/1:19,11:30:35:35,0,429:12" "0/1:25,9:34:34:34,0,388:12"
+4 190538070 rs62323772 G A 106.69 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.099;DB;DP=19;Dels=0.00;FS=0.000;HaplotypeScore=4.3562;MLEAC=3;MLEAF=0.500;MQ=33.71;MQ0=0;MQRankSum=0.591;QD=5.93;ReadPosRankSum=-0.394;SB=-7.601e+01;VQSLOD=-1.3921;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:4,9:13:69:69,0,92:3" "0|0:1,0:1:3:0,3,33:3" "1|1:0,4:5:6:77,6,0:3"
+2 209758643 rs12992166 C T 1534.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.178;DB;DP=163;Dels=0.00;FS=8.813;HaplotypeScore=2.3636;MLEAC=2;MLEAF=0.333;MQ=58.93;MQ0=0;MQRankSum=1.988;QD=12.08;ReadPosRankSum=1.075;SB=-4.720e+02;VQSLOD=6.8226;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:35,22:59:99:610,0,886:93" "1|0:32,36:68:99:963,0,797:93" "0|0:36,0:36:93:0,93,1058:93"
+13 46407442 rs11147990 G A 2668.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.227;DB;DP=199;Dels=0.00;FS=0.530;HaplotypeScore=1.8025;MLEAC=3;MLEAF=0.500;MQ=58.99;MQ0=0;MQRankSum=0.023;QD=20.21;ReadPosRankSum=-0.452;SB=-1.651e+03;VQSLOD=9.2006;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:36,33:69:99:994,0,1056:127" "0|0:67,0:67:99:0,141,1821:127" "1|1:0,63:63:99:1719,135,0:127"
+Y 13265732 . C T 356.72 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=2.823;DP=142;Dels=0.00;FS=7.941;HaplotypeScore=19.8229;MLEAC=2;MLEAF=0.333;MQ=38.22;MQ0=11;MQRankSum=-2.145;QD=5.10;ReadPosRankSum=1.491;SB=-1.466e+00;VQSLOD=-14.4273;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:35,15:50:99:327,0,624:5" "0|0:65,7:72:4:0,4,1831:5" "1|0:15,5:20:67:67,0,227:5"
+6 71018445 rs1321063 C A 518.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.668;DB;DP=185;Dels=0.00;FS=1.618;HaplotypeScore=0.6919;MLEAC=1;MLEAF=0.167;MQ=58.93;MQ0=0;MQRankSum=0.355;QD=8.78;ReadPosRankSum=1.306;SB=-4.020e+02;VQSLOD=7.7510;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:67,0:67:99:0,184,2404:127" "0|0:59,0:59:99:0,160,2065:127" "0|1:29,30:59:99:553,0,809:127"
+18 75204349 rs9948476 C T 646.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.965;DB;DP=185;Dels=0.00;FS=0.817;HaplotypeScore=1.3995;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=0.276;QD=10.95;ReadPosRankSum=-0.158;SB=-3.210e+02;VQSLOD=9.3748;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:65,0:66:99:0,168,2026:127" "0|0:60,0:60:99:0,147,1768:127" "0|1:34,25:59:99:681,0,893:127"
+9 2072356 rs4741641 T G 2054.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.235;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=2.2089;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=1.166;QD=13.00;ReadPosRankSum=-0.475;SB=-1.004e+03;VQSLOD=9.0206;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:49,45:94:99:1245,0,1615:127" "0|0:85,0:85:99:0,217,2818:127" "1|0:32,32:64:99:848,0,936:127"
+13 21520045 rs9509464 A C 5103.01 PASS AC=6;AF=1.00;AN=6;DB;DP=195;Dels=0.00;FS=0.000;HaplotypeScore=1.6144;MLEAC=6;MLEAF=1.00;MQ=47.37;MQ0=0;QD=26.17;SB=-2.582e+03;VQSLOD=5.1918;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,71:71:99:2106,186,0:98" "1|1:0,78:78:99:1856,162,0:98" "1|1:0,46:46:99:1141,99,0:98"
+2 64848970 rs35473866 T C 655.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.263;DB;DP=218;Dels=0.00;FS=8.014;HaplotypeScore=2.5836;MLEAC=1;MLEAF=0.167;MQ=58.36;MQ0=0;MQRankSum=-0.168;QD=8.29;ReadPosRankSum=-0.307;SB=-3.420e+02;VQSLOD=5.9179;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,208,2627:127" "0|0:61,0:61:99:0,135,1725:127" "0|1:35,42:79:99:690,0,1042:127"
+7 29544610 rs6462145 A T 4020.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.326;DB;DP=189;Dels=0.00;FS=5.388;HaplotypeScore=1.2974;MLEAC=4;MLEAF=0.667;MQ=58.54;MQ0=0;MQRankSum=1.295;QD=21.27;ReadPosRankSum=-1.212;SB=-1.878e+03;VQSLOD=7.3155;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:27,49:77:99:1466,0,733:127" "1|1:0,64:64:99:1888,147,0:127" "0|1:18,27:48:99:666,0,410:127"
+5 121302662 . G T 143.72 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.413;DP=150;Dels=0.02;FS=161.482;HaplotypeScore=2.8631;MLEAC=3;MLEAF=0.500;MQ=35.76;MQ0=1;MQRankSum=0.422;QD=0.96;ReadPosRankSum=-5.675;SB=-1.466e+00;VQSLOD=-77.2440;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:32,21:53:99:120,0,251:5" "0/1:35,12:47:57:57,0,271:5" "0/1:35,12:47:4:4,0,259:5"
+2 28790711 rs34787802 T G 731.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.421;DB;DP=232;Dels=0.00;FS=2.403;HaplotypeScore=1.5189;MLEAC=1;MLEAF=0.167;MQ=57.98;MQ0=0;MQRankSum=0.447;QD=10.30;ReadPosRankSum=-1.833;SB=-4.550e+02;VQSLOD=6.8853;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,223,2877:127" "0|1:36,35:71:99:766,0,947:127" "0|0:79,0:80:99:0,205,2640:127"
+20 59978756 rs1892320 T C 3967.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.562;DB;DP=206;Dels=0.00;FS=14.249;HaplotypeScore=1.3838;MLEAC=4;MLEAF=0.667;MQ=59.89;MQ0=0;MQRankSum=-0.289;QD=19.26;ReadPosRankSum=0.221;SB=-2.292e+03;VQSLOD=7.6238;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,72:72:99:2337,181,0:127" "1|0:38,29:67:99:743,0,1180:127" "1|0:31,36:67:99:887,0,873:127"
+22 17351507 rs5748687 G A 4244.01 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=-0.224;DB;DP=261;Dels=0.00;FS=0.710;HaplotypeScore=1.7170;MLEAC=5;MLEAF=0.833;MQ=28.84;MQ0=57;MQRankSum=-7.852;QD=16.26;ReadPosRankSum=-1.243;SB=-2.174e+03;VQSLOD=-1.7101;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,92:92:99:1529,141,0:127" "1|0:34,49:83:99:727,0,1065:127" "1|1:0,86:86:99:1988,180,0:127"
+X 95868251 . G A 108.36 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=1.436;DP=90;Dels=0.00;FS=4.210;HaplotypeScore=4.9383;MLEAC=2;MLEAF=0.333;MQ=44.60;MQ0=8;MQRankSum=-2.939;QD=1.55;ReadPosRankSum=2.865;SB=-7.411e+01;VQSLOD=-3.2422;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:29,9:38:99:126,0,251:23" "0|0:20,0:20:24:0,24,266:23" "1|0:27,5:32:21:21,0,97:23"
+14 106085773 rs2955055 C T 2115.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.746;DB;DP=172;Dels=0.00;FS=18.420;HaplotypeScore=2.9489;MLEAC=3;MLEAF=0.500;MQ=35.68;MQ0=18;MQRankSum=3.251;QD=12.30;ReadPosRankSum=0.100;SB=-5.530e+02;VQSLOD=1.2866;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:32,33:65:99:600,0,554:80" "0/1:30,42:72:99:1001,0,400:80" "0/1:12,23:35:80:553,0,80:80"
+7 69334430 rs917719 C T 1223.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.841;DB;DP=193;Dels=0.00;FS=6.656;HaplotypeScore=0.8147;MLEAC=2;MLEAF=0.333;MQ=59.81;MQ0=0;MQRankSum=1.631;QD=9.63;ReadPosRankSum=1.458;SB=-7.370e+02;VQSLOD=7.0004;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:38,39:77:99:770,0,1258:127" "1|0:26,24:50:99:492,0,840:127" "0|0:66,0:66:99:0,172,2210:127"
+9 44998848 . C G 254.43 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=2.203;DP=193;Dels=0.00;FS=10.822;HaplotypeScore=0.2447;MLEAC=5;MLEAF=0.833;MQ=6.48;MQ0=163;MQRankSum=-1.206;QD=1.32;ReadPosRankSum=0.790;SB=-1.372e+02;VQSLOD=-6.6319;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:39,27:66:23:132,0,23:8" "1|1:36,16:52:15:118,15,0:8" "0|1:53,22:75:1:45,6,0:8"
+1 195392852 rs2119441 T G 5369.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.284;DB;DP=241;Dels=0.00;FS=3.312;HaplotypeScore=1.8710;MLEAC=4;MLEAF=0.667;MQ=58.35;MQ0=0;MQRankSum=-0.643;QD=22.28;ReadPosRankSum=0.178;SB=-2.332e+03;VQSLOD=7.8524;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:37,42:79:99:1233,0,1145:127" "1|1:0,84:84:99:2741,211,0:127" "0|1:31,47:78:99:1395,0,804:127"
+3 148344553 rs62274102 C A 3191.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.860;DB;DP=232;Dels=0.00;FS=12.061;HaplotypeScore=2.3659;MLEAC=3;MLEAF=0.500;MQ=59.32;MQ0=0;MQRankSum=-0.551;QD=19.58;ReadPosRankSum=2.411;SB=-1.757e+03;VQSLOD=6.2908;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:46,39:85:99:985,0,1339:127" "1|1:0,78:78:99:2251,175,0:127" "0|0:69,0:69:99:0,153,2018:127"
+6 143691852 rs17792267 C T 3641.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.465;DB;DP=203;Dels=0.00;FS=2.413;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=1.198;QD=27.17;ReadPosRankSum=-1.140;SB=-1.772e+03;VQSLOD=8.8712;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:29,33:62:99:1131,0,803:127" "1|1:0,72:72:99:2510,196,0:127" "0|0:69,0:69:99:0,190,2480:127"
+18 20025030 rs4800406 A G 1113.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.700;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=1.6804;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=1.643;QD=12.65;ReadPosRankSum=-1.166;SB=-6.160e+02;VQSLOD=8.6574;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,223,2978:127" "0|1:46,42:88:99:1148,0,1460:127" "0|0:64,0:64:99:0,175,2303:127"
+3 179020937 rs13082816 C T 1116.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.603;DB;DP=82;Dels=0.00;FS=0.000;HaplotypeScore=0.6358;MLEAC=4;MLEAF=0.667;MQ=54.57;MQ0=1;MQRankSum=0.374;QD=13.61;ReadPosRankSum=-0.037;SB=-2.010e+02;VQSLOD=6.0907;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:13,13:26:99:388,0,178:36" "1|1:0,24:24:36:442,36,0:36" "0|1:13,19:32:99:328,0,179:36"
+4 21819269 rs4285068 C G 7252.01 PASS AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=0.6511;MLEAC=6;MLEAF=1.00;MQ=55.91;MQ0=0;QD=33.57;SB=-3.284e+03;VQSLOD=8.5427;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,83:83:99:2859,226,0:127" "1|1:0,73:73:99:2413,193,0:127" "1|1:0,59:59:99:1980,156,0:127"
+4 71449060 rs60358213 G A 2269.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.704;DB;DP=227;Dels=0.00;FS=13.048;HaplotypeScore=20.1360;MLEAC=2;MLEAF=0.333;MQ=55.35;MQ0=0;MQRankSum=0.477;QD=13.19;ReadPosRankSum=2.295;SB=-8.910e+02;VQSLOD=1.8937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:60,40:100:99:1221,0,1476:127" "1|0:37,35:72:99:1087,0,987:127" "0|0:53,1:54:99:0,157,2026:127"
+16 88914235 rs12932521 C T 329.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.978;DB;DP=114;Dels=0.00;FS=1.931;HaplotypeScore=0.9402;MLEAC=1;MLEAF=0.167;MQ=58.60;MQ0=0;MQRankSum=0.854;QD=7.84;ReadPosRankSum=-0.339;SB=-2.970e+02;VQSLOD=8.1036;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:43,0:43:99:0,102,1192:39" "0|0:29,0:29:39:0,39,468:39" "0|1:15,26:42:99:364,0,105:39"
+17 55158811 rs7217371 G A 2849.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.616;DB;DP=206;Dels=0.00;FS=0.511;HaplotypeScore=1.0970;MLEAC=3;MLEAF=0.500;MQ=59.66;MQ0=0;MQRankSum=0.103;QD=13.83;ReadPosRankSum=0.958;SB=-1.448e+03;VQSLOD=9.9440;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:40,31:72:99:982,0,1147:127" "0/1:35,40:75:99:1236,0,984:127" "0/1:32,27:59:99:670,0,882:127"
+1 204945934 rs6657372 A G 1311.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.582;DB;DP=126;Dels=0.00;FS=0.000;HaplotypeScore=2.7088;MLEAC=3;MLEAF=0.500;MQ=58.78;MQ0=0;MQRankSum=0.480;QD=15.43;ReadPosRankSum=1.284;SB=-6.370e+02;VQSLOD=7.8448;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:22,28:50:99:629,0,675:68" "0|0:40,0:41:84:0,84,1057:68" "1|1:0,35:35:69:727,69,0:68"
+2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814;DB;DP=189;Dels=0.00;FS=5.611;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.579;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.8071;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:66,0:66:99:0,178,2264:127" "0|1:33,38:71:99:844,0,1024:127" "0|1:26,26:52:99:678,0,719:127"
+11 10741836 rs72853043 G A 175.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=0.127;DB;DP=174;Dels=0.00;FS=7.087;HaplotypeScore=7.4618;MLEAC=1;MLEAF=0.167;MQ=55.72;MQ0=1;MQRankSum=-1.291;QD=3.44;ReadPosRankSum=-1.185;SB=-2.220e+02;VQSLOD=1.6095;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,105,1278:65" "0|0:42,0:45:66:0,66,802:65" "0|1:21,29:51:99:210,0,469:65"
+20 12166868 rs7272217 C T 926.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.444;DB;DP=200;Dels=0.00;FS=2.627;HaplotypeScore=0.8413;MLEAC=1;MLEAF=0.167;MQ=58.94;MQ0=0;MQRankSum=-1.362;QD=13.23;ReadPosRankSum=-1.055;SB=-4.040e+02;VQSLOD=7.6219;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:68,0:68:99:0,190,2486:127" "0|0:62,0:62:99:0,169,2218:127" "0|1:33,37:70:99:961,0,870:127"
+4 57135985 rs1715504 G A 1213.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.549;DB;DP=173;Dels=0.00;FS=4.099;HaplotypeScore=1.6305;MLEAC=2;MLEAF=0.333;MQ=58.44;MQ0=0;MQRankSum=-1.006;QD=10.28;ReadPosRankSum=-0.933;SB=-4.500e+02;VQSLOD=7.4115;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:54,0:55:99:0,135,1546:127" "0|1:30,23:54:99:563,0,608:127" "0|1:35,28:64:99:689,0,562:127"
+6 154006585 rs7752561 G A 919.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.323;DB;DP=223;Dels=0.00;FS=0.000;HaplotypeScore=0.8254;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-0.749;QD=10.45;ReadPosRankSum=-0.155;SB=-5.260e+02;VQSLOD=8.8368;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:70,0:70:99:0,202,2601:127" "0|1:51,37:88:99:954,0,1475:127" "0|0:65,0:65:99:0,175,2269:127"
+16 11397080 rs1019552 T C 2295.44 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.01;FS=0.000;HaplotypeScore=8.2178;MLEAC=6;MLEAF=1.00;MQ=59.32;MQ0=0;QD=13.58;SB=-2.379e+03;VQSLOD=4.3801;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,71:71:96:1220,96,0:9" "1|1:0,48:48:9:78,9,0:9" "1|1:0,48:48:81:1035,81,0:9"
+3 68765638 rs1504297 C G 4623.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-5.561;DB;DP=225;Dels=0.00;FS=3.176;HaplotypeScore=0.8432;MLEAC=4;MLEAF=0.667;MQ=59.80;MQ0=0;MQRankSum=-0.619;QD=20.55;ReadPosRankSum=-1.001;SB=-2.371e+03;VQSLOD=8.7354;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:40,39:79:99:1220,0,1330:127" "1|1:0,75:75:99:2518,205,0:127" "0|1:37,34:71:99:885,0,1185:127"
+8 113376378 rs41340951 T C 4379.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.019;DB;DP=211;Dels=0.00;FS=1.826;HaplotypeScore=0.2629;MLEAC=4;MLEAF=0.667;MQ=59.85;MQ0=0;MQRankSum=1.273;QD=20.75;ReadPosRankSum=0.144;SB=-1.893e+03;VQSLOD=8.8374;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,67:67:99:2221,187,0:127" "1|0:32,37:69:99:1083,0,1066:127" "1|0:35,40:75:99:1075,0,1108:127"
+12 39118960 rs79977305 G A 1330.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.307;DB;DP=263;Dels=0.00;FS=0.597;HaplotypeScore=1.4583;MLEAC=1;MLEAF=0.167;MQ=58.83;MQ0=0;MQRankSum=1.925;QD=13.57;ReadPosRankSum=-0.548;SB=-7.360e+02;VQSLOD=7.3733;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,241,2869:127" "0|0:84,0:84:99:0,229,2712:127" "0|1:51,47:98:99:1365,0,1343:127"
+8 102355800 rs10103956 G T 1756.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.927;DB;DP=189;Dels=0.00;FS=5.921;HaplotypeScore=1.5445;MLEAC=2;MLEAF=0.333;MQ=59.66;MQ0=0;MQRankSum=-0.420;QD=13.41;ReadPosRankSum=-0.019;SB=-5.470e+02;VQSLOD=8.1563;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:32,38:70:99:1078,0,999:127" "1|0:35,26:61:99:717,0,1103:127" "0|0:57,0:58:99:0,156,2011:127"
+3 99106655 rs2623376 A G 1093.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.490;DB;DP=191;Dels=0.00;FS=2.283;HaplotypeScore=0.6267;MLEAC=2;MLEAF=0.333;MQ=59.76;MQ0=0;MQRankSum=-1.141;QD=9.51;ReadPosRankSum=0.079;SB=-5.610e+02;VQSLOD=8.1455;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:30,22:52:99:653,0,970:127" "0|0:76,0:76:99:0,193,2462:127" "1|0:44,19:63:99:479,0,1261:127"
+21 42833227 rs460904 T C 3179.23 PASS AC=6;AF=1.00;AN=6;DB;DP=155;Dels=0.00;FS=0.000;HaplotypeScore=2.4559;MLEAC=6;MLEAF=1.00;MQ=58.18;MQ0=0;QD=20.51;SB=-2.173e+03;VQSLOD=7.7042;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,60:60:90:1085,90,0:74" "1|1:0,54:54:96:1172,96,0:74" "1|1:0,41:41:75:960,75,0:74"
+22 43356130 rs6519353 A C 3526.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.809;DB;DP=228;Dels=0.00;FS=6.336;HaplotypeScore=1.6306;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.146;QD=22.46;ReadPosRankSum=2.034;SB=-1.954e+03;VQSLOD=8.5009;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:40,41:81:99:1020,0,1222:127" "1|1:0,76:76:99:2506,196,0:127" "0|0:71,0:71:99:0,165,2091:127"
+2 117966808 rs333847 C T 9037.01 PASS AC=6;AF=1.00;AN=6;DB;DP=269;Dels=0.00;FS=0.000;HaplotypeScore=3.7032;MLEAC=6;MLEAF=1.00;MQ=58.21;MQ0=0;QD=33.59;SB=-4.673e+03;VQSLOD=7.0546;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,78:78:99:2652,205,0:127" "1|1:0,101:101:99:3158,247,0:127" "1|1:0,89:90:99:3227,250,0:127"
+7 110843795 rs214455 A G 8548.01 PASS AC=6;AF=1.00;AN=6;DB;DP=258;Dels=0.00;FS=0.000;HaplotypeScore=2.3561;MLEAC=6;MLEAF=1.00;MQ=59.35;MQ0=0;QD=33.13;SB=-4.197e+03;VQSLOD=10.7627;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,106:106:99:3535,301,0:127" "1|1:0,66:66:99:2270,193,0:127" "1|1:0,86:86:99:2743,229,0:127"
+GL000214.1 115144 . C T 102.07 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=0.854;DP=103;Dels=0.00;FS=14.185;HaplotypeScore=14.9478;MLEAC=2;MLEAF=0.333;MQ=38.45;MQ0=1;MQRankSum=-2.314;QD=1.05;ReadPosRankSum=1.480;SB=-6.153e+01;VQSLOD=-14.7562;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:6,0:6:3:0,3,22:4" "0|1:9,11:20:16:81,0,16:4" "0|1:63,14:77:58:58,0,908:4"
+9 25201692 rs9408058 C T 8643.01 PASS AC=6;AF=1.00;AN=6;DB;DP=245;Dels=0.00;FS=0.000;HaplotypeScore=0.8982;MLEAC=6;MLEAF=1.00;MQ=59.13;MQ0=0;QD=35.28;SB=-4.398e+03;VQSLOD=12.1738;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,89:89:99:3312,256,0:127" "1|1:0,81:81:99:2771,223,0:127" "1|1:0,75:75:99:2560,202,0:127"
+7 144383888 rs73161092 T C 689.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.434;DB;DP=254;Dels=0.00;FS=8.629;HaplotypeScore=0.0000;MLEAC=1;MLEAF=0.167;MQ=59.54;MQ0=0;MQRankSum=0.163;QD=8.62;ReadPosRankSum=-1.802;SB=-3.560e+02;VQSLOD=6.4544;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:90,0:90:99:0,268,3553:127" "0|1:47,33:80:99:724,0,1392:127" "0|0:84,0:84:99:0,202,2644:127"
+8 21736923 rs13256921 G A 217.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=1.884;DB;DP=93;Dels=0.00;FS=5.533;HaplotypeScore=6.4995;MLEAC=1;MLEAF=0.167;MQ=42.13;MQ0=3;MQRankSum=0.517;QD=6.79;ReadPosRankSum=1.706;SB=-1.980e+02;VQSLOD=-2.6430;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:34,0:34:66:0,66,691:41" "0|1:15,17:32:99:252,0,211:41" "0|0:27,0:27:42:0,42,425:41"
+13 101976707 rs527328 A T 9240.01 PASS AC=6;AF=1.00;AN=6;DB;DP=259;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=53.28;MQ0=0;QD=35.68;SB=-4.696e+03;VQSLOD=7.5241;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,92:92:99:3410,262,0:127" "1|1:0,88:88:99:3195,247,0:127" "1|1:1,78:79:99:2635,202,0:127"
+Y 59024923 . A T 1977.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.838;DP=745;DS;Dels=0.00;FS=0.367;HaplotypeScore=8.2957;MLEAC=3;MLEAF=0.500;MQ=43.53;MQ0=19;MQRankSum=2.499;QD=2.65;ReadPosRankSum=0.098;SB=-9.720e+02;VQSLOD=-36.7578;culprit=DP GT:AD:DP:GQ:PL:TP "0/1:208,42:250:99:730,0,6428:127" "0/1:210,35:245:99:588,0,6218:127" "0/1:208,42:250:99:698,0,6060:127"
+2 85513238 rs62162679 C T 742.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.162;DB;DP=137;Dels=0.00;FS=4.474;HaplotypeScore=1.3905;MLEAC=2;MLEAF=0.333;MQ=57.50;MQ0=0;MQRankSum=0.479;QD=7.57;ReadPosRankSum=-0.272;SB=-5.520e+02;VQSLOD=7.1288;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:39,0:39:99:0,105,1267:104" "0|1:23,23:47:99:430,0,551:104" "0|1:31,20:51:99:351,0,633:104"
+10 132949760 rs10829924 A C 684.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.328;DB;DP=215;Dels=0.00;FS=15.464;HaplotypeScore=1.3183;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-1.053;QD=10.53;ReadPosRankSum=-2.893;SB=-2.920e+02;VQSLOD=5.8891;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|0:80,0:81:99:0,229,2999:127" "0|0:69,0:69:99:0,175,2268:127" "0|1:35,30:65:99:719,0,1046:127"
+8 90278211 rs11998540 A T 357.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.457;DB;DP=69;Dels=0.00;FS=1.289;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=1.415;QD=8.12;ReadPosRankSum=1.258;SB=-9.501e+01;VQSLOD=5.9584;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:12,7:19:99:185,0,416:60" "0|0:25,0:25:60:0,60,805:60" "1|0:16,9:25:99:211,0,500:60"
+1 47818917 rs12749507 A G 1285.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.707;DB;DP=252;Dels=0.00;FS=2.139;HaplotypeScore=0.6661;MLEAC=1;MLEAF=0.167;MQ=59.83;MQ0=0;MQRankSum=-0.467;QD=13.39;ReadPosRankSum=0.535;SB=-6.730e+02;VQSLOD=9.2738;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,241,3171:127" "0|1:53,42:96:99:1320,0,1615:127" "0|0:75,0:75:99:0,217,2762:127"
+2 228532558 rs6436725 G A 3484.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=7.160;DB;DP=263;Dels=0.00;FS=1.547;HaplotypeScore=4.9679;MLEAC=3;MLEAF=0.500;MQ=58.60;MQ0=0;MQRankSum=1.137;QD=21.91;ReadPosRankSum=-0.416;SB=-1.472e+03;VQSLOD=5.4377;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:42,47:89:99:1549,0,932:127" "0|0:104,0:104:99:0,247,2939:127" "1|1:0,69:70:99:1935,156,0:127"
+19 20782710 rs10413568 T C 6304.01 PASS AC=6;AF=1.00;AN=6;DB;DP=203;Dels=0.00;FS=0.000;HaplotypeScore=0.6919;MLEAC=6;MLEAF=1.00;MQ=59.56;MQ0=0;QD=31.05;SB=-2.367e+03;VQSLOD=10.7708;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,74:74:99:2375,214,0:127" "1|1:0,80:80:99:2480,217,0:127" "1|1:0,49:49:99:1449,129,0:127"
+22 50309915 rs9616205 A T 1712.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.936;DB;DP=162;Dels=0.00;FS=2.857;HaplotypeScore=2.1490;MLEAC=2;MLEAF=0.333;MQ=56.21;MQ0=5;MQRankSum=0.892;QD=13.92;ReadPosRankSum=-1.040;SB=-9.940e+02;VQSLOD=6.2766;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:39,33:72:99:777,0,994:78" "0|0:39,0:39:78:0,78,1010:78" "1|0:16,35:51:99:974,0,257:78"
+2 18016237 rs12710649 A T 3950.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.037;DB;DP=250;Dels=0.00;FS=2.158;HaplotypeScore=2.0804;MLEAC=3;MLEAF=0.500;MQ=59.14;MQ0=0;MQRankSum=0.494;QD=15.80;ReadPosRankSum=0.705;SB=-2.142e+03;VQSLOD=8.1407;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:46,59:105:99:1733,0,1505:127" "0/1:39,37:76:99:925,0,1164:127" "0/1:24,44:68:99:1292,0,628:127"
+11 75978490 rs655877 G C 2986.25 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.846;DB;DP=127;Dels=0.00;FS=5.433;HaplotypeScore=0.2629;MLEAC=5;MLEAF=0.833;MQ=59.42;MQ0=0;MQRankSum=0.026;QD=23.51;ReadPosRankSum=0.168;SB=-1.613e+03;VQSLOD=7.0404;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,50:50:99:1405,111,0:101" "1|1:0,45:46:99:1269,102,0:101" "1|0:17,14:31:99:354,0,469:101"
+9 78741390 rs7049138 G A 1797.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.235;DB;DP=168;Dels=0.00;FS=4.003;HaplotypeScore=1.0858;MLEAC=3;MLEAF=0.500;MQ=55.32;MQ0=2;MQRankSum=-1.673;QD=16.34;ReadPosRankSum=-0.626;SB=-7.740e+02;VQSLOD=5.1915;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:37,33:70:99:828,0,918:80" "1|1:0,40:40:81:1014,81,0:80" "0|0:58,0:58:99:0,129,1403:80"
+3 17501103 . T G 45.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-6.477;DP=156;Dels=0.00;FS=71.755;HaplotypeScore=1.5253;MLEAC=2;MLEAF=0.333;MQ=58.02;MQ0=0;MQRankSum=-0.156;QD=0.43;ReadPosRankSum=-3.974;SB=-1.474e-02;VQSLOD=-14.1451;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:43,8:51:99:0,114,1252:33" "0|1:22,24:46:34:34,0,492:33" "0|1:24,34:59:50:50,0,492:33"
+X 135282092 rs5974586 G C 2193.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.257;DB;DP=203;Dels=0.00;FS=0.540;HaplotypeScore=0.6589;MLEAC=2;MLEAF=0.333;MQ=59.47;MQ0=0;MQRankSum=1.000;QD=13.46;ReadPosRankSum=1.343;SB=-1.069e+03;VQSLOD=9.0929;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:47,33:80:99:1026,0,1466:116" "0|0:40,0:40:99:0,117,1486:116" "1|0:43,40:83:99:1206,0,1311:116"
+15 71657506 . A G 140.4 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.611;DP=133;Dels=0.00;FS=35.593;HaplotypeScore=4.0622;MLEAC=2;MLEAF=0.333;MQ=51.29;MQ0=1;MQRankSum=-3.344;QD=1.53;ReadPosRankSum=-3.999;SB=-5.015e+01;VQSLOD=-4.8050;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:46,11:57:93:93,0,851:15" "1|0:23,12:35:86:86,0,299:15" "0|0:33,8:41:15:0,15,503:15"
+2 144289763 rs7607879 C T 3308.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.386;DB;DP=225;Dels=0.00;FS=9.723;HaplotypeScore=1.4969;MLEAC=3;MLEAF=0.500;MQ=59.53;MQ0=0;MQRankSum=0.283;QD=14.70;ReadPosRankSum=1.392;SB=-1.760e+03;VQSLOD=8.2418;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:41,39:81:99:1190,0,1312:127" "0/1:28,36:64:99:1057,0,834:127" "0/1:44,36:80:99:1061,0,1275:127"
+10 38560911 rs80189231 T A 1072.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.103;DB;DP=356;Dels=0.00;FS=12.038;HaplotypeScore=5.4015;MLEAC=3;MLEAF=0.500;MQ=49.74;MQ0=6;MQRankSum=-2.686;QD=3.01;ReadPosRankSum=0.797;SB=-1.690e+02;VQSLOD=-3.5129;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:109,26:135:99:389,0,2879:127" "0/1:84,27:111:99:539,0,2214:127" "0/1:93,17:110:99:183,0,2277:127"
+11 86061661 rs11825046 T C 6014.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.250;DB;DP=282;Dels=0.00;FS=0.960;HaplotypeScore=1.6440;MLEAC=4;MLEAF=0.667;MQ=59.57;MQ0=0;MQRankSum=1.057;QD=21.33;ReadPosRankSum=-1.763;SB=-3.081e+03;VQSLOD=7.3485;culprit=DP GT:AD:DP:GQ:PL:TP "1|0:54,49:103:99:1498,0,1848:127" "1|1:0,83:83:99:2924,223,0:127" "0|1:44,52:96:99:1592,0,1380:127"
+20 21523349 rs73127889 A G 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.469;DB;DP=253;Dels=0.00;FS=3.735;HaplotypeScore=1.5402;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=0.821;QD=13.69;ReadPosRankSum=1.510;SB=-8.640e+02;VQSLOD=7.8358;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:44,48:92:99:1319,0,1356:127" "0|0:86,0:86:99:0,235,2994:127" "1|0:37,38:75:99:1006,0,1111:127"
+10 4588547 rs313427 C T 1985.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.695;DB;DP=204;Dels=0.00;FS=1.813;HaplotypeScore=0.6137;MLEAC=2;MLEAF=0.333;MQ=59.73;MQ0=0;MQRankSum=0.241;QD=14.18;ReadPosRankSum=0.717;SB=-1.082e+03;VQSLOD=9.7784;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:39,35:74:99:1029,0,1182:127" "1|0:32,34:66:99:995,0,1024:127" "0|0:64,0:64:99:0,175,2242:127"
+6 131725921 . G A 64.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=3.650;DP=182;Dels=0.00;FS=3.535;HaplotypeScore=2.2441;MLEAC=1;MLEAF=0.167;MQ=50.85;MQ0=1;MQRankSum=-6.039;QD=1.31;ReadPosRankSum=-1.757;SB=-4.901e+01;VQSLOD=-0.6667;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:59,0:60:99:0,168,1897:98" "0|1:33,16:49:99:99,0,790:98" "0|0:73,0:73:99:0,156,1824:98"
+4 103859292 rs7676943 C G 7573.01 PASS AC=6;AF=1.00;AN=6;DB;DP=235;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=58.63;MQ0=0;QD=32.23;SB=-3.953e+03;VQSLOD=10.3945;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,95:96:99:3289,256,0:127" "1|1:0,73:73:99:2137,166,0:127" "1|1:0,66:66:99:2147,166,0:127"
+10 11560326 rs4424580 C T 1027.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.178;DB;DP=207;Dels=0.00;FS=0.573;HaplotypeScore=2.1981;MLEAC=2;MLEAF=0.333;MQ=59.24;MQ0=0;MQRankSum=-0.988;QD=7.78;ReadPosRankSum=-0.492;SB=-7.450e+02;VQSLOD=8.4594;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:41,32:73:99:609,0,930:96" "1|0:29,30:59:99:457,0,570:96" "0|0:74,1:75:96:0,96,1185:96"
+10 56495833 rs6481118 G A 7633.01 PASS AC=6;AF=1.00;AN=6;DB;DP=212;Dels=0.00;FS=0.000;HaplotypeScore=0.3328;MLEAC=6;MLEAF=1.00;MQ=54.64;MQ0=0;QD=36.00;SB=-2.091e+03;VQSLOD=8.6651;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,62:62:99:2383,184,0:127" "1|1:1,67:68:99:2375,184,0:127" "1|1:0,82:82:99:2875,223,0:127"
+16 55910673 rs17265788 G C 2345.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.657;DB;DP=208;Dels=0.00;FS=3.162;HaplotypeScore=1.9213;MLEAC=3;MLEAF=0.500;MQ=59.67;MQ0=0;MQRankSum=-0.333;QD=16.63;ReadPosRankSum=-0.425;SB=-1.468e+03;VQSLOD=8.3665;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:33,33:66:99:769,0,761:122" "0|0:67,0:67:99:0,123,1506:122" "1|1:0,75:75:99:1621,132,0:122"
+14 38160457 rs2181345 A C 4683.01 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=2.5449;MLEAC=6;MLEAF=1.00;MQ=59.00;MQ0=0;QD=27.71;SB=-2.390e+03;VQSLOD=9.9888;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,56:56:99:1818,141,0:107" "1|1:0,58:58:99:1523,123,0:107" "1|1:0,53:55:99:1342,108,0:107"
+11 35980461 rs263087 A T 3494.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.701;DB;DP=186;Dels=0.00;FS=0.000;HaplotypeScore=2.9570;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=0.836;QD=18.79;ReadPosRankSum=0.007;SB=-1.535e+03;VQSLOD=7.6407;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:36,35:71:99:1001,0,1165:127" "0|1:30,26:56:99:710,0,796:127" "1|1:0,59:59:99:1783,144,0:127"
+1 69502962 rs12724640 T C 1868.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-1.732;DB;DP=110;Dels=0.00;FS=4.721;HaplotypeScore=1.9269;MLEAC=6;MLEAF=1.00;MQ=29.46;MQ0=22;MQRankSum=1.652;QD=16.98;ReadPosRankSum=-0.564;SB=-8.110e+02;VQSLOD=0.2103;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:5,23:29:63:693,63,0:50" "1|1:5,38:43:66:675,66,0:50" "1|1:9,29:38:51:538,51,0:50"
+20 29566945 rs6119037 C G 1427.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-3.826;DB;DP=271;Dels=0.00;FS=1.151;HaplotypeScore=2.7598;MLEAC=2;MLEAF=0.333;MQ=47.42;MQ0=21;MQRankSum=2.420;QD=8.06;ReadPosRankSum=0.363;SB=-7.560e+02;VQSLOD=1.7908;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:59,32:91:99:782,0,1210:127" "1|0:55,31:86:99:684,0,1422:127" "0|0:94,0:94:99:0,208,2592:127"
+11 55040918 rs187118824 A T 1019.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.079;DB;DP=65;Dels=0.02;FS=12.723;HaplotypeScore=0.9771;MLEAC=2;MLEAF=0.333;MQ=56.64;MQ0=1;MQRankSum=0.323;QD=25.48;ReadPosRankSum=0.873;SB=-2.060e+01;VQSLOD=4.4200;culprit=DP GT:AD:DP:GQ:PL:TP "0|1:2,9:11:48:325,0,48:50" "0|0:24,1:25:63:0,63,833:50" "1|0:6,22:28:51:733,0,51:50"
+7 56584972 rs34475770 C T 2465.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.103;DB;DP=255;Dels=0.00;FS=2.230;HaplotypeScore=0.8840;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=1.766;QD=15.03;ReadPosRankSum=1.126;SB=-1.412e+03;VQSLOD=6.5725;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:91,0:91:99:0,259,3369:127" "0|1:36,49:85:99:1444,0,1000:127" "0|1:38,41:79:99:1060,0,1084:127"
+8 56608897 rs57623198 C T 1911.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.515;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1327;MLEAC=2;MLEAF=0.333;MQ=59.80;MQ0=0;MQRankSum=0.336;QD=12.66;ReadPosRankSum=-2.326;SB=-9.730e+02;VQSLOD=8.5587;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,229,2989:127" "0|1:44,30:74:99:897,0,1444:127" "0|1:44,33:77:99:1053,0,1400:127"
+4 6333669 rs35678078 G T 2186.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.220;DB;DP=198;Dels=0.00;FS=1.754;HaplotypeScore=0.7779;MLEAC=3;MLEAF=0.500;MQ=59.27;MQ0=0;MQRankSum=-0.256;QD=11.04;ReadPosRankSum=-0.469;SB=-1.621e+03;VQSLOD=9.4086;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:33,34:67:99:875,0,848:127" "0/1:27,32:59:99:602,0,534:127" "0/1:33,38:72:99:748,0,676:127"
+3 1609737 rs2648459 A G 6492.01 PASS AC=6;AF=1.00;AN=6;DB;DP=187;Dels=0.00;FS=0.000;HaplotypeScore=1.1795;MLEAC=6;MLEAF=1.00;MQ=59.90;MQ0=0;QD=34.72;SB=-3.251e+03;VQSLOD=11.5033;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,53:53:99:1943,150,0:127" "1|1:0,62:62:99:2206,172,0:127" "1|1:0,72:72:99:2343,181,0:127"
+1 156248265 rs12038203 C T 643.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.311;DB;DP=145;Dels=0.00;FS=4.568;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.08;MQ0=0;MQRankSum=0.862;QD=12.86;ReadPosRankSum=0.177;SB=-3.450e+02;VQSLOD=7.5008;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:47,0:47:99:0,123,1604:110" "0|0:48,0:48:99:0,111,1433:110" "0|1:25,25:50:99:678,0,694:110"
+3 197056886 rs7612900 G A 7880.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=0.6106;MLEAC=6;MLEAF=1.00;MQ=59.18;MQ0=0;QD=34.41;SB=-3.459e+03;VQSLOD=11.8130;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,75:75:99:2786,214,0:127" "1|1:0,81:81:99:2598,202,0:127" "1|1:0,73:73:99:2496,193,0:127"
+6 79887872 rs6454101 C T 2130.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.355;DB;DP=204;Dels=0.00;FS=11.823;HaplotypeScore=2.3806;MLEAC=3;MLEAF=0.500;MQ=59.68;MQ0=0;MQRankSum=1.011;QD=10.44;ReadPosRankSum=-0.769;SB=-1.370e+03;VQSLOD=7.5187;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:31,31:62:99:806,0,990:127" "0/1:42,31:73:99:606,0,921:127" "0/1:29,40:69:99:757,0,749:127"
+17 5764764 rs2309483 C G 4071.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.237;DB;DP=154;Dels=0.00;FS=0.000;HaplotypeScore=4.4102;MLEAC=5;MLEAF=0.833;MQ=58.88;MQ0=0;MQRankSum=0.456;QD=26.44;ReadPosRankSum=0.385;SB=-1.791e+03;VQSLOD=6.9458;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,61:62:99:2049,165,0:107" "1|0:23,26:49:99:648,0,482:107" "1|1:0,43:43:99:1374,108,0:107"
+7 12502849 rs848025 C G 4109.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.809;DB;DP=220;Dels=0.00;FS=1.141;HaplotypeScore=1.8049;MLEAC=4;MLEAF=0.667;MQ=59.56;MQ0=0;MQRankSum=0.625;QD=18.68;ReadPosRankSum=-0.019;SB=-1.989e+03;VQSLOD=8.7123;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:47,45:92:99:1216,0,1501:127" "1|1:0,71:71:99:2145,184,0:127" "0|1:27,30:57:99:748,0,743:127"
+1 226163330 rs10915914 C G 747.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.123;DB;DP=121;Dels=0.00;FS=0.863;HaplotypeScore=0.8289;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=-0.478;QD=9.70;ReadPosRankSum=-0.134;SB=-2.780e+02;VQSLOD=8.0849;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:43,1:44:99:0,117,1447:116" "0|1:17,15:32:99:289,0,390:116" "0|1:26,19:45:99:497,0,677:116"
+18 1629264 rs5025369 A G 86.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.739;DB;DP=149;Dels=0.00;FS=15.359;HaplotypeScore=7.1355;MLEAC=2;MLEAF=0.333;MQ=39.72;MQ0=11;MQRankSum=-2.543;QD=0.81;ReadPosRankSum=0.088;SB=-3.380e+01;VQSLOD=-6.2052;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:51,15:66:50:50,0,1143:49" "0|0:37,5:42:81:0,81,941:49" "1|0:35,6:41:75:75,0,818:49"
+15 23743658 rs142070302 T A 1007.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.164;DB;DP=408;Dels=0.00;FS=166.853;HaplotypeScore=53.5447;MLEAC=3;MLEAF=0.500;MQ=38.96;MQ0=14;MQRankSum=-6.283;QD=2.47;ReadPosRankSum=2.486;SB=-1.079e-02;VQSLOD=-304.7942;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:104,39:143:99:365,0,2802:45" "0/1:99,40:139:99:636,0,2335:45" "0/1:97,28:126:45:45,0,2324:45"
+5 80900719 rs2917540 G T 4938.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.261;DB;DP=240;Dels=0.00;FS=0.489;HaplotypeScore=0.5959;MLEAC=4;MLEAF=0.667;MQ=59.63;MQ0=0;MQRankSum=-2.115;QD=20.58;ReadPosRankSum=0.288;SB=-2.548e+03;VQSLOD=8.4417;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:52,40:92:99:1207,0,1768:127" "0|1:37,33:70:99:960,0,1205:127" "1|1:0,78:78:99:2771,211,0:127"
+8 8974322 rs28440961 G A 1682.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.716;DB;DP=190;Dels=0.00;FS=0.579;HaplotypeScore=1.5434;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=-0.652;QD=12.65;ReadPosRankSum=0.746;SB=-7.040e+02;VQSLOD=9.3708;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:32,32:64:99:790,0,1002:125" "1|0:33,36:69:99:931,0,866:125" "0|0:57,0:57:99:0,126,1622:125"
+12 5922552 rs17786352 C G 1874.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.386;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.3053;MLEAC=2;MLEAF=0.333;MQ=54.49;MQ0=0;MQRankSum=2.656;QD=13.11;ReadPosRankSum=1.042;SB=-9.400e+02;VQSLOD=4.7495;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:44,35:79:99:897,0,1383:127" "1|0:28,36:64:99:1016,0,734:127" "0|0:88,0:88:99:0,238,3004:127"
+2 45429089 rs13418430 C A 2341.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.861;DB;DP=283;Dels=0.00;FS=2.854;HaplotypeScore=1.3288;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=-0.939;QD=12.52;ReadPosRankSum=-1.869;SB=-1.156e+03;VQSLOD=7.1503;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:60,49:109:99:1406,0,2061:127" "1|0:41,37:78:99:974,0,1238:127" "0|0:96,0:96:99:0,256,3312:127"
+17 33513649 rs3744366 A G 3743.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.729;DB;DP=213;Dels=0.00;FS=0.526;HaplotypeScore=2.9053;MLEAC=4;MLEAF=0.667;MQ=58.99;MQ0=0;MQRankSum=-0.152;QD=17.57;ReadPosRankSum=0.530;SB=-2.067e+03;VQSLOD=8.0191;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:44,40:84:99:1083,0,1341:127" "1|1:0,67:67:99:2074,162,0:127" "0|1:37,24:62:99:586,0,1015:127"
+7 62232046 . C T 1155.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.643;DP=230;Dels=0.00;FS=6.304;HaplotypeScore=12.7679;MLEAC=1;MLEAF=0.167;MQ=58.61;MQ0=3;MQRankSum=-0.697;QD=15.20;ReadPosRankSum=-1.202;SB=-4.440e+02;VQSLOD=2.5725;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:77,1:78:99:0,217,2824:127" "0|0:76,0:76:99:0,202,2604:127" "0|1:34,42:76:99:1190,0,994:127"
+1 216407409 rs3767692 A G 8820.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.803;DB;DP=295;Dels=0.00;FS=1.345;HaplotypeScore=2.5841;MLEAC=5;MLEAF=0.833;MQ=59.28;MQ0=0;MQRankSum=-0.375;QD=29.90;ReadPosRankSum=-0.363;SB=-4.445e+03;VQSLOD=7.0549;culprit=DP GT:AD:DP:GQ:PL:TP "1|1:1,115:116:99:4251,328,0:127" "1|0:39,51:90:99:1430,0,1275:127" "1|1:0,89:89:99:3139,241,0:127"
+2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.695;DB;DP=213;Dels=0.00;FS=7.834;HaplotypeScore=1.1897;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-0.097;SB=-1.991e+03;VQSLOD=9.1447;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:33,42:75:99:1400,0,1031:127" "0|0:67,0:67:99:0,178,2277:127" "1|1:0,71:71:99:2578,199,0:127"
+12 112830546 rs150699511 C A 487.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.014;DB;DP=179;Dels=0.00;FS=0.860;HaplotypeScore=2.3392;MLEAC=1;MLEAF=0.167;MQ=59.16;MQ0=0;MQRankSum=1.141;QD=8.86;ReadPosRankSum=0.950;SB=-2.870e+02;VQSLOD=8.1138;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:62,0:62:99:0,166,2141:127" "0|1:34,21:55:99:522,0,751:127" "0|0:62,0:62:99:0,141,1808:127"
+16 30509723 rs7193693 A G 497.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.054;DB;DP=167;Dels=0.00;FS=0.000;HaplotypeScore=1.1605;MLEAC=1;MLEAF=0.167;MQ=57.89;MQ0=0;MQRankSum=-0.545;QD=9.38;ReadPosRankSum=0.541;SB=-2.410e+02;VQSLOD=8.4265;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:57,0:57:99:0,153,2009:101" "0|0:57,0:57:99:0,102,1304:101" "0|1:26,27:53:99:532,0,526:101"
+10 85258657 rs4454662 C A 7638.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.716;DB;DP=223;Dels=0.00;FS=4.523;HaplotypeScore=1.1326;MLEAC=6;MLEAF=1.00;MQ=58.32;MQ0=0;MQRankSum=-1.230;QD=34.25;ReadPosRankSum=1.152;SB=-2.841e+03;VQSLOD=7.6461;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:1,64:65:99:2156,169,0:127" "1|1:0,89:89:99:2982,238,0:127" "1|1:0,69:69:99:2500,196,0:127"
+17 14096866 . C T 489.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=4.537;DP=181;Dels=0.00;FS=33.896;HaplotypeScore=1.0782;MLEAC=3;MLEAF=0.500;MQ=24.52;MQ0=71;MQRankSum=0.353;QD=2.70;ReadPosRankSum=0.385;SB=-1.450e+02;VQSLOD=-6.2174;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:48,17:66:99:228,0,822:63" "0/1:42,16:58:99:237,0,389:63" "0/1:44,13:57:63:63,0,523:63"
+22 34204930 rs13053313 T C 435.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.517;DB;DP=82;Dels=0.00;FS=5.843;HaplotypeScore=0.5328;MLEAC=1;MLEAF=0.167;MQ=58.65;MQ0=0;MQRankSum=1.117;QD=12.80;ReadPosRankSum=-1.270;SB=-1.170e+02;VQSLOD=6.4410;culprit=DP GT:AD:DP:GQ:PL:TP "0|0:12,0:12:27:0,27,360:27" "0|1:16,18:34:99:470,0,403:27" "0|0:36,0:36:93:0,93,1230:27"
+8 42044954 rs1058720 G A 2760.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.313;DB;DP=157;Dels=0.00;FS=0.000;HaplotypeScore=2.0979;MLEAC=4;MLEAF=0.667;MQ=58.82;MQ0=0;MQRankSum=-2.021;QD=17.58;ReadPosRankSum=-0.462;SB=-1.377e+03;VQSLOD=7.5777;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,56:56:99:1820,147,0:127" "1|0:24,27:51:99:555,0,233:127" "1|0:26,24:50:99:427,0,458:127"
+19 11730690 rs4804613 C T 2578.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=5.057;DB;DP=197;Dels=0.00;FS=0.529;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.36;MQ0=0;MQRankSum=0.416;QD=13.09;ReadPosRankSum=-0.554;SB=-1.389e+03;VQSLOD=9.3908;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:21,26:47:99:586,0,623:127" "0/1:42,45:87:99:1192,0,1055:127" "0/1:32,30:63:99:839,0,932:127"
+1 80481528 rs61774278 G C 1775.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.614;DB;DP=168;Dels=0.00;FS=8.292;HaplotypeScore=2.0470;MLEAC=3;MLEAF=0.500;MQ=54.28;MQ0=0;MQRankSum=-0.052;QD=16.75;ReadPosRankSum=1.544;SB=-1.133e+03;VQSLOD=4.7735;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:35,26:61:99:767,0,778:80" "0|0:62,0:62:84:0,84,1046:80" "1|1:0,45:45:84:1053,84,0:80"
+10 106444111 rs72813617 A G 632.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.838;DB;DP=197;Dels=0.00;FS=4.121;HaplotypeScore=1.8154;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-1.142;QD=12.40;ReadPosRankSum=-1.947;SB=-2.390e+02;VQSLOD=7.6230;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|0:84,0:84:99:0,241,3129:127" "0|0:62,0:62:99:0,159,2008:127" "0|1:27,24:51:99:667,0,584:127"
+X 4712340 rs5915814 C A 2233.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.784;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.4434;MLEAC=2;MLEAF=0.333;MQ=59.50;MQ0=0;MQRankSum=-1.782;QD=15.73;ReadPosRankSum=0.359;SB=-1.240e+03;VQSLOD=8.3937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:32,37:69:99:1114,0,859:81" "0|0:34,0:34:81:0,81,948:81" "1|0:32,41:73:99:1158,0,575:81"
+9 130235282 . A G 166.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=-8.543;DP=232;Dels=0.00;FS=233.037;HaplotypeScore=2.9977;MLEAC=2;MLEAF=0.333;MQ=59.04;MQ0=0;MQRankSum=-2.038;QD=1.15;ReadPosRankSum=-7.649;SB=-3.100e-03;VQSLOD=-139.8496;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:74,14:88:99:0,108,2160:59" "0|1:42,36:79:60:60,0,966:59" "0|1:47,18:65:99:145,0,922:59"
+6 26687649 . G C 1654.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=9.718;DP=410;Dels=0.00;FS=5.973;HaplotypeScore=5.0786;MLEAC=2;MLEAF=0.333;MQ=28.19;MQ0=32;MQRankSum=0.048;QD=6.17;ReadPosRankSum=0.408;SB=-5.110e+02;VQSLOD=-8.7346;culprit=DP GT:AD:DP:GQ:PL:TP "0|1:117,49:166:99:1013,0,2495:127" "0|0:141,1:142:99:0,244,2576:127" "1|0:70,32:102:99:680,0,1048:127"
+8 132727531 rs7000409 G A 2050.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.475;DB;DP=220;Dels=0.00;FS=5.203;HaplotypeScore=1.9424;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=1.230;QD=14.14;ReadPosRankSum=-0.871;SB=-1.080e+03;VQSLOD=7.7925;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:29,35:64:99:1215,0,785:127" "0|0:75,0:75:99:0,190,2423:127" "1|0:50,31:81:99:874,0,1611:127"
+7 48862174 rs965346 A G 877.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.250;DB;DP=194;Dels=0.00;FS=6.112;HaplotypeScore=0.6489;MLEAC=1;MLEAF=0.167;MQ=57.54;MQ0=0;MQRankSum=2.058;QD=16.25;ReadPosRankSum=-1.204;SB=-4.040e+02;VQSLOD=6.2372;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:82,0:82:99:0,232,3007:127" "0|0:58,0:58:99:0,160,2067:127" "0|1:22,32:54:99:912,0,686:127"
+4 122900130 rs4833786 C T 2361.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.390;DB;DP=244;Dels=0.00;FS=0.495;HaplotypeScore=0.5427;MLEAC=2;MLEAF=0.333;MQ=59.91;MQ0=0;MQRankSum=-0.628;QD=15.23;ReadPosRankSum=1.221;SB=-1.282e+03;VQSLOD=8.8105;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:89,0:89:99:0,250,3286:127" "0|1:42,44:86:99:1257,0,1325:127" "0|1:32,37:69:99:1143,0,941:127"
+6 9408051 rs11751621 C G 5140.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.350;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.6637;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=-0.205;QD=21.33;ReadPosRankSum=-0.033;SB=-2.552e+03;VQSLOD=8.9881;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:42,40:82:99:1156,0,1352:127" "0|1:36,45:81:99:1253,0,1134:127" "1|1:0,78:78:99:2731,214,0:127"
+2 96514373 rs10186946 C T 206.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=4.485;DB;DP=175;Dels=0.00;FS=2.805;HaplotypeScore=2.4200;MLEAC=2;MLEAF=0.333;MQ=39.07;MQ0=7;MQRankSum=-7.529;QD=1.61;ReadPosRankSum=0.813;SB=-2.501e+01;VQSLOD=-0.8655;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:35,23:58:62:62,0,484:61" "1|0:22,46:70:99:183,0,387:61" "0|0:46,0:47:99:0,99,1162:61"
+13 83670546 . G A 169.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.301;DP=178;Dels=0.00;FS=0.000;HaplotypeScore=36.5059;MLEAC=2;MLEAF=0.333;MQ=42.20;MQ0=11;MQRankSum=-6.654;QD=1.38;ReadPosRankSum=-0.761;SB=-1.340e+02;VQSLOD=-20.4053;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:37,16:53:99:139,0,523:90" "0|0:51,4:55:91:0,91,1393:90" "1|0:58,12:70:69:69,0,1214:90"
+19 28150587 rs4404191 A G 7419.01 PASS AC=6;AF=1.00;AN=6;DB;DP=209;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=59.61;MQ0=0;QD=35.50;SB=-3.717e+03;VQSLOD=11.9901;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,70:70:99:2584,202,0:127" "1|1:0,74:74:99:2509,193,0:127" "1|1:0,65:65:99:2326,181,0:127"
+4 184811263 rs2871379 A G 6376.01 PASS AC=6;AF=1.00;AN=6;DB;DP=211;Dels=0.00;FS=0.000;HaplotypeScore=0.5084;MLEAC=6;MLEAF=1.00;MQ=58.38;MQ0=0;QD=30.22;SB=-3.472e+03;VQSLOD=10.4879;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,78:78:99:2539,199,0:127" "1|1:0,67:67:99:2072,165,0:127" "1|1:0,66:66:99:1765,135,0:127"
+12 79238948 rs10778234 C T 3719.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.187;DB;DP=241;Dels=0.00;FS=7.073;HaplotypeScore=0.2447;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.381;QD=15.43;ReadPosRankSum=0.579;SB=-1.864e+03;VQSLOD=7.8136;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:42,35:77:99:1049,0,1213:127" "0/1:37,32:69:99:988,0,957:127" "0/1:42,53:95:99:1682,0,1062:127"
+11 123470819 rs1148095 T C 6964.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.850;DB;DP=242;Dels=0.00;FS=1.477;HaplotypeScore=1.3868;MLEAC=5;MLEAF=0.833;MQ=59.25;MQ0=0;MQRankSum=-1.734;QD=28.78;ReadPosRankSum=-0.749;SB=-3.242e+03;VQSLOD=8.7854;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "1|1:0,92:92:99:3408,265,0:127" "1|0:35,51:86:99:1520,0,1059:127" "1|1:0,64:64:99:2036,157,0:127"
+7 152208470 rs6464236 G C 4321.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.233;DB;DP=169;Dels=0.00;FS=1.635;HaplotypeScore=1.3568;MLEAC=5;MLEAF=0.833;MQ=57.18;MQ0=1;MQRankSum=1.907;QD=25.57;ReadPosRankSum=0.892;SB=-2.137e+03;VQSLOD=6.7602;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:1,56:57:99:1949,150,0:122" "1|1:0,54:54:99:1557,123,0:122" "1|0:30,28:58:99:815,0,715:122"
+16 65776985 rs72784548 T C 3527.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.439;DB;DP=195;Dels=0.00;FS=1.228;HaplotypeScore=0.8795;MLEAC=4;MLEAF=0.667;MQ=58.78;MQ0=0;MQRankSum=1.630;QD=18.09;ReadPosRankSum=1.358;SB=-1.904e+03;VQSLOD=7.6763;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,68:68:99:2351,181,0:127" "1|0:33,28:61:99:586,0,710:127" "1|0:31,35:66:99:590,0,468:127"
+1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.669;HaplotypeScore=3.3539;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-0.219;SB=-9.390e+02;VQSLOD=5.5346;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:23,28:51:99:681,0,668:127" "0/1:16,18:34:99:338,0,244:127" "0/1:24,22:46:99:560,0,323:127"
+8 4048009 rs7007410 C T 2713.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.954;DB;DP=197;Dels=0.00;FS=2.483;HaplotypeScore=0.7125;MLEAC=3;MLEAF=0.500;MQ=57.03;MQ0=0;MQRankSum=0.882;QD=13.77;ReadPosRankSum=-0.496;SB=-1.406e+03;VQSLOD=6.5035;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:38,30:68:99:847,0,1168:127" "0/1:30,30:60:99:916,0,921:127" "0/1:32,36:69:99:989,0,882:127"
+12 12560642 rs10772559 G T 501.28 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=0.747;DB;DP=229;Dels=0.04;FS=17.409;HaplotypeScore=19.6989;MLEAC=4;MLEAF=0.667;MQ=49.37;MQ0=0;MQRankSum=-3.656;QD=2.19;ReadPosRankSum=-5.397;SB=-2.196e+03;VQSLOD=-10.1992;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,66:66:24:273,24,0:24" "1|0:29,45:74:99:148,0,702:24" "1|0:33,46:80:99:122,0,781:24"
+1 165431906 rs7528908 G T 2381.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.008;DB;DP=259;Dels=0.00;FS=4.727;HaplotypeScore=0.9857;MLEAC=2;MLEAF=0.333;MQ=59.75;MQ0=0;MQRankSum=0.916;QD=14.34;ReadPosRankSum=-0.907;SB=-9.050e+02;VQSLOD=8.1270;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:48,40:88:99:1142,0,1428:127" "0|0:93,0:93:99:0,259,3166:127" "1|0:38,40:78:99:1278,0,1075:127"
+4 141514835 rs55984232 C T 1645.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=7.144;DB;DP=191;Dels=0.00;FS=2.756;HaplotypeScore=1.0735;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.726;QD=13.06;ReadPosRankSum=-0.789;SB=-8.550e+02;VQSLOD=8.9425;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:32,28:60:99:913,0,820:127" "0|0:65,0:65:99:0,156,1886:127" "1|0:34,32:66:99:771,0,750:127"
+9 109619207 rs4743032 A T 3810.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.859;DB;DP=214;Dels=0.00;FS=10.284;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=0.557;QD=25.07;ReadPosRankSum=-0.836;SB=-2.019e+03;VQSLOD=8.1399;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:37,39:76:99:1185,0,1225:127" "1|1:0,76:76:99:2625,202,0:127" "0|0:62,0:62:99:0,156,2049:127"
+2 198567638 rs12619333 C G 2201.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.028;DB;DP=240;Dels=0.00;FS=4.757;HaplotypeScore=1.3741;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=1;MQRankSum=0.131;QD=13.42;ReadPosRankSum=0.123;SB=-1.051e+03;VQSLOD=8.1261;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:38,45:84:99:1298,0,1249:127" "1|0:45,35:80:99:942,0,1493:127" "0|0:76,0:76:99:0,196,2542:127"
+5 164600452 rs7711548 C A 588.32 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-3.291;DB;DP=192;Dels=0.02;FS=2.319;HaplotypeScore=32.6662;MLEAC=6;MLEAF=1.00;MQ=57.55;MQ0=0;MQRankSum=1.536;QD=3.06;ReadPosRankSum=-1.533;SB=-2.085e+03;VQSLOD=-1.4325;culprit=QD GT:AD:DP:GQ:PL:TP "1|1:15,52:69:18:155,18,0:15" "1|1:11,55:66:36:296,36,0:15" "1|1:18,36:54:15:175,15,0:15"
+20 41560394 rs761027 A G 5634.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.444;DB;DP=222;Dels=0.00;FS=0.829;HaplotypeScore=1.1428;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=0.392;QD=25.38;ReadPosRankSum=-0.064;SB=-3.048e+03;VQSLOD=10.0362;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,72:72:99:2228,187,0:127" "1|1:0,82:82:99:2435,211,0:127" "1|0:25,43:68:99:971,0,567:127"
+4 48922864 rs7697262 G C 1383.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=100;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=20.20;MQ0=24;QD=13.83;SB=-3.860e+02;VQSLOD=-0.3210;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:3,38:41:57:625,57,0:32" "1|1:0,28:28:33:368,33,0:32" "1|1:2,29:31:39:428,39,0:32"
+X 66290558 rs1606094 C T 2602.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.169;DB;DP=213;Dels=0.00;FS=13.125;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=1.343;QD=18.86;ReadPosRankSum=2.274;SB=-1.122e+03;VQSLOD=5.9967;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:54,47:101:99:1381,0,1762:99" "1|1:0,37:37:99:1266,99,0:99" "0|0:75,0:75:99:0,205,2705:99"
+21 10750991 . C T 602.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=10.103;DP=735;DS;Dels=0.00;FS=27.020;HaplotypeScore=107.2731;MLEAC=2;MLEAF=0.333;MQ=44.40;MQ0=2;MQRankSum=-14.560;QD=1.24;ReadPosRankSum=0.063;SB=-8.430e+02;VQSLOD=-100.9480;culprit=DP GT:AD:DP:GQ:PL:TP "1|0:164,78:243:99:357,0,5193:103" "1|0:187,55:242:99:284,0,5252:103" "0|0:199,50:250:99:0,103,5864:103"
\ No newline at end of file
diff --git a/testdata/picard/vcf/CEUTrio-snps-scrambled.2.vcf b/testdata/picard/vcf/CEUTrio-snps-scrambled.2.vcf
new file mode 100644
index 0000000..10d1188
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps-scrambled.2.vcf
@@ -0,0 +1,406 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+18 75204349 rs9948476 C T 646.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.965;DB;DP=185;Dels=0.00;FS=0.817;HaplotypeScore=1.3995;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=0.276;QD=10.95;ReadPosRankSum=-0.158;SB=-3.210e+02;VQSLOD=9.3748;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:65,0:66:99:0,168,2026:127" "0|0:60,0:60:99:0,147,1768:127" "0|1:34,25:59:99:681,0,893:127"
+13 46407442 rs11147990 G A 2668.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.227;DB;DP=199;Dels=0.00;FS=0.530;HaplotypeScore=1.8025;MLEAC=3;MLEAF=0.500;MQ=58.99;MQ0=0;MQRankSum=0.023;QD=20.21;ReadPosRankSum=-0.452;SB=-1.651e+03;VQSLOD=9.2006;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:36,33:69:99:994,0,1056:127" "0|0:67,0:67:99:0,141,1821:127" "1|1:0,63:63:99:1719,135,0:127"
+15 42065422 rs2925337 A C 5231.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.68;MQ0=0;QD=29.72;SB=-3.112e+03;VQSLOD=11.0322;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,54:54:99:1770,138,0:127" "1|1:0,68:68:99:1750,138,0:127" "1|1:0,54:54:99:1711,132,0:127"
+6 35346891 . C T 483.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-6.402;DP=205;Dels=0.02;FS=214.154;HaplotypeScore=4.5086;MLEAC=3;MLEAF=0.500;MQ=51.07;MQ0=1;MQRankSum=-2.038;QD=2.36;ReadPosRankSum=-2.250;SB=-1.065e-02;VQSLOD=-116.9542;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:48,31:79:99:257,0,635:80" "0/1:40,22:62:99:185,0,308:80" "0/1:44,16:60:80:80,0,534:80"
+17 5764764 rs2309483 C G 4071.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.237;DB;DP=154;Dels=0.00;FS=0.000;HaplotypeScore=4.4102;MLEAC=5;MLEAF=0.833;MQ=58.88;MQ0=0;MQRankSum=0.456;QD=26.44;ReadPosRankSum=0.385;SB=-1.791e+03;VQSLOD=6.9458;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,61:62:99:2049,165,0:107" "1|0:23,26:49:99:648,0,482:107" "1|1:0,43:43:99:1374,108,0:107"
+12 48120010 rs3829317 A C 4015.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.659;DB;DP=162;Dels=0.00;FS=1.828;HaplotypeScore=2.1844;MLEAC=5;MLEAF=0.833;MQ=59.48;MQ0=0;MQRankSum=0.154;QD=24.78;ReadPosRankSum=0.482;SB=-2.240e+03;VQSLOD=8.1337;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,63:63:99:2024,163,0:110" "1|0:24,27:51:99:550,0,540:110" "1|1:0,48:48:99:1441,111,0:110"
+4 6333669 rs35678078 G T 2186.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.220;DB;DP=198;Dels=0.00;FS=1.754;HaplotypeScore=0.7779;MLEAC=3;MLEAF=0.500;MQ=59.27;MQ0=0;MQRankSum=-0.256;QD=11.04;ReadPosRankSum=-0.469;SB=-1.621e+03;VQSLOD=9.4086;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:33,34:67:99:875,0,848:127" "0/1:27,32:59:99:602,0,534:127" "0/1:33,38:72:99:748,0,676:127"
+2 18016237 rs12710649 A T 3950.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.037;DB;DP=250;Dels=0.00;FS=2.158;HaplotypeScore=2.0804;MLEAC=3;MLEAF=0.500;MQ=59.14;MQ0=0;MQRankSum=0.494;QD=15.80;ReadPosRankSum=0.705;SB=-2.142e+03;VQSLOD=8.1407;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:46,59:105:99:1733,0,1505:127" "0/1:39,37:76:99:925,0,1164:127" "0/1:24,44:68:99:1292,0,628:127"
+3 1609737 rs2648459 A G 6492.01 PASS AC=6;AF=1.00;AN=6;DB;DP=187;Dels=0.00;FS=0.000;HaplotypeScore=1.1795;MLEAC=6;MLEAF=1.00;MQ=59.90;MQ0=0;QD=34.72;SB=-3.251e+03;VQSLOD=11.5033;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,53:53:99:1943,150,0:127" "1|1:0,62:62:99:2206,172,0:127" "1|1:0,72:72:99:2343,181,0:127"
+5 29069162 rs658439 G A 499.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.981;DB;DP=199;Dels=0.00;FS=11.196;HaplotypeScore=1.6038;MLEAC=1;MLEAF=0.167;MQ=52.70;MQ0=0;MQRankSum=-0.608;QD=9.42;ReadPosRankSum=-1.103;SB=-2.310e+02;VQSLOD=4.0183;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:86,0:86:99:0,211,2509:110" "0|0:60,0:60:99:0,111,1240:110" "0|1:30,23:53:99:534,0,523:110"
+2 36994439 rs11124542 A C 1302.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.406;DB;DP=191;Dels=0.00;FS=3.335;HaplotypeScore=2.1785;MLEAC=3;MLEAF=0.500;MQ=58.93;MQ0=0;MQRankSum=-0.725;QD=6.82;ReadPosRankSum=0.302;SB=-1.006e+03;VQSLOD=7.9479;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:32,28:60:99:710,0,1044:127" "0/1:34,25:59:99:309,0,772:127" "0/1:45,27:72:99:322,0,1096:127"
+4 57135985 rs1715504 G A 1213.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.549;DB;DP=173;Dels=0.00;FS=4.099;HaplotypeScore=1.6305;MLEAC=2;MLEAF=0.333;MQ=58.44;MQ0=0;MQRankSum=-1.006;QD=10.28;ReadPosRankSum=-0.933;SB=-4.500e+02;VQSLOD=7.4115;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:54,0:55:99:0,135,1546:127" "0|1:30,23:54:99:563,0,608:127" "0|1:35,28:64:99:689,0,562:127"
+17 66991216 rs61697543 T C 738.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.530;DB;DP=252;Dels=0.00;FS=1.490;HaplotypeScore=1.7074;MLEAC=1;MLEAF=0.167;MQ=59.36;MQ0=0;MQRankSum=0.771;QD=10.86;ReadPosRankSum=-0.724;SB=-3.930e+02;VQSLOD=8.8864;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:95,0:95:99:0,268,3511:127" "0|0:89,0:89:99:0,235,3058:127" "0|1:33,35:68:99:773,0,965:127"
+5 20435939 rs12697584 A C 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-5.396;DB;DP=246;Dels=0.00;FS=4.681;HaplotypeScore=0.8744;MLEAC=2;MLEAF=0.333;MQ=59.74;MQ0=0;MQRankSum=-0.850;QD=14.20;ReadPosRankSum=0.391;SB=-1.305e+03;VQSLOD=8.1327;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:85,0:85:99:0,241,3183:127" "0|1:41,37:78:99:1062,0,1304:127" "0|1:39,44:83:99:1263,0,1222:127"
+11 26026566 rs7942277 T C 5414.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=58.89;MQ0=0;QD=30.76;SB=-2.812e+03;VQSLOD=11.0501;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,53:53:99:1707,132,0:122" "1|1:0,53:53:99:1581,123,0:122" "1|1:0,70:70:99:2126,163,0:122"
+9 2072356 rs4741641 T G 2054.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.235;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=2.2089;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=1.166;QD=13.00;ReadPosRankSum=-0.475;SB=-1.004e+03;VQSLOD=9.0206;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:49,45:94:99:1245,0,1615:127" "0|0:85,0:85:99:0,217,2818:127" "1|0:32,32:64:99:848,0,936:127"
+20 51353834 rs241795 G A 6115.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=7.909;DB;DP=268;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=4;MLEAF=0.667;MQ=59.38;MQ0=0;MQRankSum=-0.518;QD=22.82;ReadPosRankSum=-0.253;SB=-3.328e+03;VQSLOD=8.3999;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:46,54:100:99:1663,0,1247:127" "1|1:0,91:91:99:3189,247,0:127" "0|1:36,41:77:99:1263,0,901:127"
+9 78741390 rs7049138 G A 1797.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.235;DB;DP=168;Dels=0.00;FS=4.003;HaplotypeScore=1.0858;MLEAC=3;MLEAF=0.500;MQ=55.32;MQ0=2;MQRankSum=-1.673;QD=16.34;ReadPosRankSum=-0.626;SB=-7.740e+02;VQSLOD=5.1915;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:37,33:70:99:828,0,918:80" "1|1:0,40:40:81:1014,81,0:80" "0|0:58,0:58:99:0,129,1403:80"
+1 204945934 rs6657372 A G 1311.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.582;DB;DP=126;Dels=0.00;FS=0.000;HaplotypeScore=2.7088;MLEAC=3;MLEAF=0.500;MQ=58.78;MQ0=0;MQRankSum=0.480;QD=15.43;ReadPosRankSum=1.284;SB=-6.370e+02;VQSLOD=7.8448;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:22,28:50:99:629,0,675:68" "0|0:40,0:41:84:0,84,1057:68" "1|1:0,35:35:69:727,69,0:68"
+GL000215.1 142616 . T C 976.25 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DP=80;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=21.04;MQ0=42;QD=12.20;SB=-8.001e+01;VQSLOD=-0.4104;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,33:33:42:516,42,0:19" "1|1:0,21:21:24:272,24,0:19" "1|1:0,26:26:21:226,21,0:19"
+X 95868251 . G A 108.36 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=1.436;DP=90;Dels=0.00;FS=4.210;HaplotypeScore=4.9383;MLEAC=2;MLEAF=0.333;MQ=44.60;MQ0=8;MQRankSum=-2.939;QD=1.55;ReadPosRankSum=2.865;SB=-7.411e+01;VQSLOD=-3.2422;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:29,9:38:99:126,0,251:23" "0|0:20,0:20:24:0,24,266:23" "1|0:27,5:32:21:21,0,97:23"
+12 122942070 rs10744217 A G 1812.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.353;DB;DP=179;Dels=0.00;FS=0.663;HaplotypeScore=1.4184;MLEAC=3;MLEAF=0.500;MQ=58.69;MQ0=0;MQRankSum=0.992;QD=15.10;ReadPosRankSum=1.081;SB=-5.860e+02;VQSLOD=8.4750;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:35,36:71:99:762,0,1100:92" "1|1:0,48:49:93:1095,93,0:92" "0|0:59,0:59:99:0,120,1560:92"
+2 64848970 rs35473866 T C 655.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.263;DB;DP=218;Dels=0.00;FS=8.014;HaplotypeScore=2.5836;MLEAC=1;MLEAF=0.167;MQ=58.36;MQ0=0;MQRankSum=-0.168;QD=8.29;ReadPosRankSum=-0.307;SB=-3.420e+02;VQSLOD=5.9179;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,208,2627:127" "0|0:61,0:61:99:0,135,1725:127" "0|1:35,42:79:99:690,0,1042:127"
+5 154441640 rs467330 A C 1133.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.127;DB;DP=235;Dels=0.00;FS=2.103;HaplotypeScore=1.1893;MLEAC=1;MLEAF=0.167;MQ=59.65;MQ0=0;MQRankSum=0.766;QD=12.59;ReadPosRankSum=-0.535;SB=-6.500e+02;VQSLOD=9.8335;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:61,0:61:99:0,172,2172:127" "0|1:45,45:90:99:1168,0,1368:127" "0|0:82,1:84:99:0,226,2825:127"
+10 29082980 . G C 42.53 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.216;DP=107;Dels=0.00;FS=60.979;HaplotypeScore=1.0911;MLEAC=3;MLEAF=0.500;MQ=55.72;MQ0=0;MQRankSum=-0.633;QD=0.40;ReadPosRankSum=-4.307;SB=-2.798e-01;VQSLOD=-11.1718;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:30,12:43:12:12,0,757:12" "0/1:19,11:30:35:35,0,429:12" "0/1:25,9:34:34:34,0,388:12"
+7 62232046 . C T 1155.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.643;DP=230;Dels=0.00;FS=6.304;HaplotypeScore=12.7679;MLEAC=1;MLEAF=0.167;MQ=58.61;MQ0=3;MQRankSum=-0.697;QD=15.20;ReadPosRankSum=-1.202;SB=-4.440e+02;VQSLOD=2.5725;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:77,1:78:99:0,217,2824:127" "0|0:76,0:76:99:0,202,2604:127" "0|1:34,42:76:99:1190,0,994:127"
+13 65275154 rs359338 G A 1963.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.733;DB;DP=173;Dels=0.00;FS=3.628;HaplotypeScore=0.9480;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=-0.676;QD=14.54;ReadPosRankSum=0.399;SB=-1.054e+03;VQSLOD=8.4489;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:31,28:59:99:883,0,990:108" "1|0:39,37:76:99:1119,0,1112:108" "0|0:38,0:38:99:0,108,1390:108"
+10 19567676 rs61458006 G T 599.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.610;DB;DP=195;Dels=0.00;FS=0.844;HaplotypeScore=0.8795;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.191;QD=11.31;ReadPosRankSum=-1.635;SB=-2.780e+02;VQSLOD=9.3606;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:75,0:75:99:0,208,2645:127" "0|1:30,23:53:99:634,0,915:127" "0|0:67,0:67:99:0,199,2540:127"
+4 39062189 rs2566127 T C 2641.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.019;DB;DP=201;Dels=0.00;FS=1.101;HaplotypeScore=2.8834;MLEAC=3;MLEAF=0.500;MQ=58.96;MQ0=0;MQRankSum=0.932;QD=13.14;ReadPosRankSum=-0.596;SB=-1.401e+03;VQSLOD=7.9734;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:35,29:64:99:880,0,1168:127" "0/1:37,32:70:99:796,0,1021:127" "0/1:31,36:67:99:1004,0,877:127"
+9 109619207 rs4743032 A T 3810.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.859;DB;DP=214;Dels=0.00;FS=10.284;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=0.557;QD=25.07;ReadPosRankSum=-0.836;SB=-2.019e+03;VQSLOD=8.1399;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:37,39:76:99:1185,0,1225:127" "1|1:0,76:76:99:2625,202,0:127" "0|0:62,0:62:99:0,156,2049:127"
+2 177175707 rs7355385 A G 2590.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.866;DB;DP=206;Dels=0.00;FS=14.872;HaplotypeScore=0.3111;MLEAC=3;MLEAF=0.500;MQ=59.12;MQ0=0;MQRankSum=-0.937;QD=20.40;ReadPosRankSum=-0.287;SB=-8.970e+02;VQSLOD=6.8179;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:33,32:65:99:856,0,1069:127" "1|1:0,62:62:99:1779,150,0:127" "0|0:78,1:79:99:0,193,2411:127"
+14 20313371 rs10137604 A C 2154.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.894;DB;DP=255;Dels=0.00;FS=0.000;HaplotypeScore=2.0503;MLEAC=2;MLEAF=0.333;MQ=56.32;MQ0=1;MQRankSum=1.608;QD=13.72;ReadPosRankSum=0.126;SB=-1.124e+03;VQSLOD=5.6223;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:40,48:88:99:1426,0,1229:127" "0|0:98,0:98:99:0,268,3527:127" "1|0:43,26:69:99:767,0,1284:127"
+4 21819269 rs4285068 C G 7252.01 PASS AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=0.6511;MLEAC=6;MLEAF=1.00;MQ=55.91;MQ0=0;QD=33.57;SB=-3.284e+03;VQSLOD=8.5427;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,83:83:99:2859,226,0:127" "1|1:0,73:73:99:2413,193,0:127" "1|1:0,59:59:99:1980,156,0:127"
+8 123499998 rs9693135 T C 926.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.820;DB;DP=207;Dels=0.00;FS=2.678;HaplotypeScore=1.2574;MLEAC=2;MLEAF=0.333;MQ=56.08;MQ0=0;MQRankSum=-2.729;QD=6.34;ReadPosRankSum=-0.269;SB=-8.230e+02;VQSLOD=4.3016;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:61,0:61:99:0,172,2301:127" "0|1:37,35:72:99:622,0,769:127" "0|1:48,26:74:99:343,0,1280:127"
+19 11730690 rs4804613 C T 2578.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=5.057;DB;DP=197;Dels=0.00;FS=0.529;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.36;MQ0=0;MQRankSum=0.416;QD=13.09;ReadPosRankSum=-0.554;SB=-1.389e+03;VQSLOD=9.3908;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:21,26:47:99:586,0,623:127" "0/1:42,45:87:99:1192,0,1055:127" "0/1:32,30:63:99:839,0,932:127"
+2 96514373 rs10186946 C T 206.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=4.485;DB;DP=175;Dels=0.00;FS=2.805;HaplotypeScore=2.4200;MLEAC=2;MLEAF=0.333;MQ=39.07;MQ0=7;MQRankSum=-7.529;QD=1.61;ReadPosRankSum=0.813;SB=-2.501e+01;VQSLOD=-0.8655;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:35,23:58:62:62,0,484:61" "1|0:22,46:70:99:183,0,387:61" "0|0:46,0:47:99:0,99,1162:61"
+19 37226152 rs3108217 G C 2076.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.215;DB;DP=145;Dels=0.00;FS=2.159;HaplotypeScore=0.5869;MLEAC=4;MLEAF=0.667;MQ=58.59;MQ0=0;MQRankSum=1.160;QD=14.32;ReadPosRankSum=-0.725;SB=-1.027e+03;VQSLOD=7.4915;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:25,30:55:99:789,0,709:63" "1|1:0,29:29:63:772,63,0:63" "0|1:35,25:61:99:557,0,789:63"
+Y 59024923 . A T 1977.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.838;DP=745;DS;Dels=0.00;FS=0.367;HaplotypeScore=8.2957;MLEAC=3;MLEAF=0.500;MQ=43.53;MQ0=19;MQRankSum=2.499;QD=2.65;ReadPosRankSum=0.098;SB=-9.720e+02;VQSLOD=-36.7578;culprit=DP GT:AD:DP:GQ:PL:TP "0/1:208,42:250:99:730,0,6428:127" "0/1:210,35:245:99:588,0,6218:127" "0/1:208,42:250:99:698,0,6060:127"
+13 109990322 rs7328109 T C 7198.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.487;DB;DP=245;Dels=0.00;FS=5.887;HaplotypeScore=1.8793;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=-0.236;QD=29.38;ReadPosRankSum=0.136;SB=-3.593e+03;VQSLOD=8.8925;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,79:79:99:2825,220,0:127" "1|0:33,54:87:99:1591,0,933:127" "1|1:0,79:79:99:2782,214,0:127"
+2 209758643 rs12992166 C T 1534.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.178;DB;DP=163;Dels=0.00;FS=8.813;HaplotypeScore=2.3636;MLEAC=2;MLEAF=0.333;MQ=58.93;MQ0=0;MQRankSum=1.988;QD=12.08;ReadPosRankSum=1.075;SB=-4.720e+02;VQSLOD=6.8226;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:35,22:59:99:610,0,886:93" "1|0:32,36:68:99:963,0,797:93" "0|0:36,0:36:93:0,93,1058:93"
+2 117966808 rs333847 C T 9037.01 PASS AC=6;AF=1.00;AN=6;DB;DP=269;Dels=0.00;FS=0.000;HaplotypeScore=3.7032;MLEAC=6;MLEAF=1.00;MQ=58.21;MQ0=0;QD=33.59;SB=-4.673e+03;VQSLOD=7.0546;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,78:78:99:2652,205,0:127" "1|1:0,101:101:99:3158,247,0:127" "1|1:0,89:90:99:3227,250,0:127"
+7 38984187 rs118081099 A C 569.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.110;DB;DP=182;Dels=0.00;FS=6.196;HaplotypeScore=0.5533;MLEAC=1;MLEAF=0.167;MQ=54.22;MQ0=0;MQRankSum=1.675;QD=9.33;ReadPosRankSum=1.162;SB=-1.260e+02;VQSLOD=4.8877;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:72,0:72:99:0,196,2446:127" "0|1:38,23:61:99:604,0,1196:127" "0|0:48,1:49:99:0,138,1711:127"
+4 71449060 rs60358213 G A 2269.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.704;DB;DP=227;Dels=0.00;FS=13.048;HaplotypeScore=20.1360;MLEAC=2;MLEAF=0.333;MQ=55.35;MQ0=0;MQRankSum=0.477;QD=13.19;ReadPosRankSum=2.295;SB=-8.910e+02;VQSLOD=1.8937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:60,40:100:99:1221,0,1476:127" "1|0:37,35:72:99:1087,0,987:127" "0|0:53,1:54:99:0,157,2026:127"
+8 14463368 rs1355302 T A 2523.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.793;DB;DP=236;Dels=0.00;FS=3.776;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=59.14;MQ0=0;MQRankSum=-0.381;QD=15.97;ReadPosRankSum=-0.045;SB=-1.421e+03;VQSLOD=7.6920;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:36,43:79:99:1332,0,1176:127" "0|0:78,0:78:99:0,214,2749:127" "1|0:35,44:79:99:1230,0,1162:127"
+6 18687376 rs9383429 A T 1162.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.746;DB;DP=232;Dels=0.00;FS=0.638;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.42;MQ0=0;MQRankSum=-0.733;QD=15.71;ReadPosRankSum=-0.146;SB=-6.490e+02;VQSLOD=9.4317;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:82,0:82:99:0,241,3181:127" "0|0:76,0:76:99:0,217,2832:127" "0|1:33,41:74:99:1197,0,1008:127"
+3 128140891 rs73201490 C T 1315.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.394;DB;DP=142;Dels=0.00;FS=0.667;HaplotypeScore=3.4886;MLEAC=2;MLEAF=0.333;MQ=58.69;MQ0=0;MQRankSum=1.733;QD=14.30;ReadPosRankSum=0.758;SB=-6.400e+02;VQSLOD=6.7020;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:29,24:53:99:636,0,670:104" "0|0:50,0:50:99:0,105,1188:104" "1|0:12,27:39:99:718,0,250:104"
+11 10741836 rs72853043 G A 175.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=0.127;DB;DP=174;Dels=0.00;FS=7.087;HaplotypeScore=7.4618;MLEAC=1;MLEAF=0.167;MQ=55.72;MQ0=1;MQRankSum=-1.291;QD=3.44;ReadPosRankSum=-1.185;SB=-2.220e+02;VQSLOD=1.6095;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,105,1278:65" "0|0:42,0:45:66:0,66,802:65" "0|1:21,29:51:99:210,0,469:65"
+10 85258657 rs4454662 C A 7638.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.716;DB;DP=223;Dels=0.00;FS=4.523;HaplotypeScore=1.1326;MLEAC=6;MLEAF=1.00;MQ=58.32;MQ0=0;MQRankSum=-1.230;QD=34.25;ReadPosRankSum=1.152;SB=-2.841e+03;VQSLOD=7.6461;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:1,64:65:99:2156,169,0:127" "1|1:0,89:89:99:2982,238,0:127" "1|1:0,69:69:99:2500,196,0:127"
+17 55158811 rs7217371 G A 2849.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.616;DB;DP=206;Dels=0.00;FS=0.511;HaplotypeScore=1.0970;MLEAC=3;MLEAF=0.500;MQ=59.66;MQ0=0;MQRankSum=0.103;QD=13.83;ReadPosRankSum=0.958;SB=-1.448e+03;VQSLOD=9.9440;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:40,31:72:99:982,0,1147:127" "0/1:35,40:75:99:1236,0,984:127" "0/1:32,27:59:99:670,0,882:127"
+17 14096866 . C T 489.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=4.537;DP=181;Dels=0.00;FS=33.896;HaplotypeScore=1.0782;MLEAC=3;MLEAF=0.500;MQ=24.52;MQ0=71;MQRankSum=0.353;QD=2.70;ReadPosRankSum=0.385;SB=-1.450e+02;VQSLOD=-6.2174;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:48,17:66:99:228,0,822:63" "0/1:42,16:58:99:237,0,389:63" "0/1:44,13:57:63:63,0,523:63"
+5 58243302 rs457566 A C 6237.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.663;DB;DP=233;Dels=0.00;FS=3.429;HaplotypeScore=0.8859;MLEAC=5;MLEAF=0.833;MQ=59.70;MQ0=0;MQRankSum=-0.232;QD=26.77;ReadPosRankSum=0.957;SB=-2.566e+03;VQSLOD=9.3537;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,87:87:99:2923,229,0:127" "1|0:36,50:86:99:1429,0,1006:127" "1|1:0,60:60:99:1885,147,0:127"
+6 154006585 rs7752561 G A 919.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.323;DB;DP=223;Dels=0.00;FS=0.000;HaplotypeScore=0.8254;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-0.749;QD=10.45;ReadPosRankSum=-0.155;SB=-5.260e+02;VQSLOD=8.8368;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:70,0:70:99:0,202,2601:127" "0|1:51,37:88:99:954,0,1475:127" "0|0:65,0:65:99:0,175,2269:127"
+X 66290558 rs1606094 C T 2602.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.169;DB;DP=213;Dels=0.00;FS=13.125;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=1.343;QD=18.86;ReadPosRankSum=2.274;SB=-1.122e+03;VQSLOD=5.9967;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:54,47:101:99:1381,0,1762:99" "1|1:0,37:37:99:1266,99,0:99" "0|0:75,0:75:99:0,205,2705:99"
+8 90278211 rs11998540 A T 357.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.457;DB;DP=69;Dels=0.00;FS=1.289;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=1.415;QD=8.12;ReadPosRankSum=1.258;SB=-9.501e+01;VQSLOD=5.9584;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:12,7:19:99:185,0,416:60" "0|0:25,0:25:60:0,60,805:60" "1|0:16,9:25:99:211,0,500:60"
+4 82427976 rs6841516 G A 561.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.022;DB;DP=166;Dels=0.00;FS=0.000;HaplotypeScore=1.4715;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=-1.555;QD=11.00;ReadPosRankSum=0.016;SB=-3.880e+02;VQSLOD=8.0989;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:51,0:51:99:0,132,1705:127" "0|1:22,29:51:99:596,0,483:127" "0|0:64,0:64:99:0,135,1755:127"
+3 48757773 rs61137521 A G 3103.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.794;DB;DP=172;Dels=0.00;FS=0.000;HaplotypeScore=1.8954;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=-0.693;QD=18.04;ReadPosRankSum=-1.667;SB=-1.874e+03;VQSLOD=7.9241;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,50:51:99:1723,141,0:127" "1|0:31,34:65:99:745,0,814:127" "1|0:24,32:56:99:677,0,603:127"
+16 30509723 rs7193693 A G 497.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.054;DB;DP=167;Dels=0.00;FS=0.000;HaplotypeScore=1.1605;MLEAC=1;MLEAF=0.167;MQ=57.89;MQ0=0;MQRankSum=-0.545;QD=9.38;ReadPosRankSum=0.541;SB=-2.410e+02;VQSLOD=8.4265;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:57,0:57:99:0,153,2009:101" "0|0:57,0:57:99:0,102,1304:101" "0|1:26,27:53:99:532,0,526:101"
+3 158557110 rs34445802 G A 2374.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.805;DB;DP=237;Dels=0.00;FS=1.025;HaplotypeScore=1.6572;MLEAC=2;MLEAF=0.333;MQ=57.48;MQ0=0;MQRankSum=0.558;QD=14.05;ReadPosRankSum=-1.147;SB=-1.505e+03;VQSLOD=7.1338;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:43,56:99:99:1624,0,1344:127" "1|0:33,37:70:99:789,0,916:127" "0|0:68,0:68:99:0,156,2014:127"
+12 130522866 rs1613499 C T 3975.01 PASS AC=6;AF=1.00;AN=6;DB;DP=130;Dels=0.00;FS=0.000;HaplotypeScore=0.6332;MLEAC=6;MLEAF=1.00;MQ=59.11;MQ0=0;QD=30.58;SB=-1.386e+03;VQSLOD=10.2250;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,57:57:99:1939,144,0:73" "1|1:0,34:34:75:990,75,0:73" "1|1:0,39:39:78:1046,78,0:73"
+3 99106655 rs2623376 A G 1093.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.490;DB;DP=191;Dels=0.00;FS=2.283;HaplotypeScore=0.6267;MLEAC=2;MLEAF=0.333;MQ=59.76;MQ0=0;MQRankSum=-1.141;QD=9.51;ReadPosRankSum=0.079;SB=-5.610e+02;VQSLOD=8.1455;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:30,22:52:99:653,0,970:127" "0|0:76,0:76:99:0,193,2462:127" "1|0:44,19:63:99:479,0,1261:127"
+13 37484693 rs1571317 T C 971.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.315;DB;DP=229;Dels=0.00;FS=3.052;HaplotypeScore=0.6603;MLEAC=1;MLEAF=0.167;MQ=58.51;MQ0=0;MQRankSum=1.885;QD=12.78;ReadPosRankSum=-0.343;SB=-5.750e+02;VQSLOD=7.3064;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:94,0:94:99:0,253,3258:127" "0|1:35,41:76:99:1006,0,924:127" "0|0:59,0:59:99:0,147,1872:127"
+2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.695;DB;DP=213;Dels=0.00;FS=7.834;HaplotypeScore=1.1897;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-0.097;SB=-1.991e+03;VQSLOD=9.1447;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:33,42:75:99:1400,0,1031:127" "0|0:67,0:67:99:0,178,2277:127" "1|1:0,71:71:99:2578,199,0:127"
+14 87263523 rs2542229 A C 8104.01 PASS AC=6;AF=1.00;AN=6;DB;DP=239;Dels=0.00;FS=0.000;HaplotypeScore=0.6305;MLEAC=6;MLEAF=1.00;MQ=59.17;MQ0=0;QD=33.91;SB=-4.393e+03;VQSLOD=11.3001;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,77:77:99:2810,214,0:127" "1|1:0,85:85:99:2877,223,0:127" "1|1:0,77:77:99:2417,187,0:127"
+Y 13265732 . C T 356.72 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=2.823;DP=142;Dels=0.00;FS=7.941;HaplotypeScore=19.8229;MLEAC=2;MLEAF=0.333;MQ=38.22;MQ0=11;MQRankSum=-2.145;QD=5.10;ReadPosRankSum=1.491;SB=-1.466e+00;VQSLOD=-14.4273;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:35,15:50:99:327,0,624:5" "0|0:65,7:72:4:0,4,1831:5" "1|0:15,5:20:67:67,0,227:5"
+7 152208470 rs6464236 G C 4321.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.233;DB;DP=169;Dels=0.00;FS=1.635;HaplotypeScore=1.3568;MLEAC=5;MLEAF=0.833;MQ=57.18;MQ0=1;MQRankSum=1.907;QD=25.57;ReadPosRankSum=0.892;SB=-2.137e+03;VQSLOD=6.7602;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:1,56:57:99:1949,150,0:122" "1|1:0,54:54:99:1557,123,0:122" "1|0:30,28:58:99:815,0,715:122"
+11 35980461 rs263087 A T 3494.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.701;DB;DP=186;Dels=0.00;FS=0.000;HaplotypeScore=2.9570;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=0.836;QD=18.79;ReadPosRankSum=0.007;SB=-1.535e+03;VQSLOD=7.6407;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:36,35:71:99:1001,0,1165:127" "0|1:30,26:56:99:710,0,796:127" "1|1:0,59:59:99:1783,144,0:127"
+20 21523349 rs73127889 A G 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.469;DB;DP=253;Dels=0.00;FS=3.735;HaplotypeScore=1.5402;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=0.821;QD=13.69;ReadPosRankSum=1.510;SB=-8.640e+02;VQSLOD=7.8358;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:44,48:92:99:1319,0,1356:127" "0|0:86,0:86:99:0,235,2994:127" "1|0:37,38:75:99:1006,0,1111:127"
+5 93119893 rs6879620 G A 4262.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.930;DB;DP=239;Dels=0.00;FS=1.050;HaplotypeScore=2.1583;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=0.891;QD=17.83;ReadPosRankSum=-2.670;SB=-2.596e+03;VQSLOD=7.0681;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:49,42:91:99:1098,0,1410:127" "0|1:36,38:74:99:890,0,1008:127" "1|1:0,74:74:99:2274,178,0:127"
+6 71018445 rs1321063 C A 518.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.668;DB;DP=185;Dels=0.00;FS=1.618;HaplotypeScore=0.6919;MLEAC=1;MLEAF=0.167;MQ=58.93;MQ0=0;MQRankSum=0.355;QD=8.78;ReadPosRankSum=1.306;SB=-4.020e+02;VQSLOD=7.7510;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:67,0:67:99:0,184,2404:127" "0|0:59,0:59:99:0,160,2065:127" "0|1:29,30:59:99:553,0,809:127"
+13 21520045 rs9509464 A C 5103.01 PASS AC=6;AF=1.00;AN=6;DB;DP=195;Dels=0.00;FS=0.000;HaplotypeScore=1.6144;MLEAC=6;MLEAF=1.00;MQ=47.37;MQ0=0;QD=26.17;SB=-2.582e+03;VQSLOD=5.1918;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,71:71:99:2106,186,0:98" "1|1:0,78:78:99:1856,162,0:98" "1|1:0,46:46:99:1141,99,0:98"
+20 12166868 rs7272217 C T 926.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.444;DB;DP=200;Dels=0.00;FS=2.627;HaplotypeScore=0.8413;MLEAC=1;MLEAF=0.167;MQ=58.94;MQ0=0;MQRankSum=-1.362;QD=13.23;ReadPosRankSum=-1.055;SB=-4.040e+02;VQSLOD=7.6219;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:68,0:68:99:0,190,2486:127" "0|0:62,0:62:99:0,169,2218:127" "0|1:33,37:70:99:961,0,870:127"
+X 116855730 rs980389 A G 2366.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.939;DB;DP=173;Dels=0.00;FS=3.510;HaplotypeScore=0.9076;MLEAC=3;MLEAF=0.500;MQ=59.87;MQ0=0;MQRankSum=0.653;QD=21.51;ReadPosRankSum=0.730;SB=-1.218e+03;VQSLOD=7.9588;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:37,33:70:99:965,0,1249:114" "1|1:0,40:40:99:1446,114,0:114" "0|0:63,0:63:99:0,175,2284:114"
+22 34204930 rs13053313 T C 435.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.517;DB;DP=82;Dels=0.00;FS=5.843;HaplotypeScore=0.5328;MLEAC=1;MLEAF=0.167;MQ=58.65;MQ0=0;MQRankSum=1.117;QD=12.80;ReadPosRankSum=-1.270;SB=-1.170e+02;VQSLOD=6.4410;culprit=DP GT:AD:DP:GQ:PL:TP "0|0:12,0:12:27:0,27,360:27" "0|1:16,18:34:99:470,0,403:27" "0|0:36,0:36:93:0,93,1230:27"
+12 58867437 rs140632614 G T 829.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=1.409;DB;DP=144;Dels=0.00;FS=68.612;HaplotypeScore=0.8667;MLEAC=4;MLEAF=0.667;MQ=35.15;MQ0=16;MQRankSum=-7.440;QD=5.76;ReadPosRankSum=-0.245;SB=-1.011e+00;VQSLOD=-16.4891;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:34,24:58:99:291,0,1100:44" "0|1:42,8:50:61:61,0,1319:44" "1|1:1,35:36:45:519,45,0:44"
+12 29935607 rs7305813 A C 810.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.307;DB;DP=203;Dels=0.00;FS=14.326;HaplotypeScore=1.9820;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.164;QD=12.86;ReadPosRankSum=-0.733;SB=-2.950e+02;VQSLOD=7.9009;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:71,0:71:99:0,193,2479:127" "0|0:69,0:69:99:0,196,2464:127" "0|1:28,35:63:99:845,0,847:127"
+9 130235282 . A G 166.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=-8.543;DP=232;Dels=0.00;FS=233.037;HaplotypeScore=2.9977;MLEAC=2;MLEAF=0.333;MQ=59.04;MQ0=0;MQRankSum=-2.038;QD=1.15;ReadPosRankSum=-7.649;SB=-3.100e-03;VQSLOD=-139.8496;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:74,14:88:99:0,108,2160:59" "0|1:42,36:79:60:60,0,966:59" "0|1:47,18:65:99:145,0,922:59"
+6 1620147 rs2569882 T C 252.3 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.862;DB;DP=38;Dels=0.00;FS=8.023;HaplotypeScore=0.2217;MLEAC=5;MLEAF=0.833;MQ=57.65;MQ0=0;MQRankSum=-0.918;QD=9.34;ReadPosRankSum=0.584;SB=-4.005e+01;VQSLOD=4.3258;culprit=DP GT:AD:DP:GQ:PL:TP "1|1:0,17:17:21:254,21,0:4" "1|0:3,8:11:2:0,3,40:4" "1|1:0,10:10:3:39,3,0:4"
+8 21736923 rs13256921 G A 217.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=1.884;DB;DP=93;Dels=0.00;FS=5.533;HaplotypeScore=6.4995;MLEAC=1;MLEAF=0.167;MQ=42.13;MQ0=3;MQRankSum=0.517;QD=6.79;ReadPosRankSum=1.706;SB=-1.980e+02;VQSLOD=-2.6430;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:34,0:34:66:0,66,691:41" "0|1:15,17:32:99:252,0,211:41" "0|0:27,0:27:42:0,42,425:41"
+14 47568119 rs1952206 T C 3399.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-9.721;DB;DP=230;Dels=0.00;FS=0.483;HaplotypeScore=0.6577;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=-0.479;QD=14.78;ReadPosRankSum=1.261;SB=-1.667e+03;VQSLOD=9.1589;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0/1:41,43:84:99:1239,0,1315:127" "0/1:28,43:71:99:1178,0,816:127" "0/1:40,35:75:99:982,0,1314:127"
+10 56495833 rs6481118 G A 7633.01 PASS AC=6;AF=1.00;AN=6;DB;DP=212;Dels=0.00;FS=0.000;HaplotypeScore=0.3328;MLEAC=6;MLEAF=1.00;MQ=54.64;MQ0=0;QD=36.00;SB=-2.091e+03;VQSLOD=8.6651;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,62:62:99:2383,184,0:127" "1|1:1,67:68:99:2375,184,0:127" "1|1:0,82:82:99:2875,223,0:127"
+18 41449098 rs2045671 C T 8380.01 PASS AC=6;AF=1.00;AN=6;DB;DP=237;Dels=0.00;FS=0.000;HaplotypeScore=1.3482;MLEAC=6;MLEAF=1.00;MQ=59.65;MQ0=0;QD=35.36;SB=-4.462e+03;VQSLOD=11.6464;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,76:76:99:2756,214,0:127" "1|1:0,75:75:99:2635,202,0:127" "1|1:0,86:86:99:2989,229,0:127"
+10 132949760 rs10829924 A C 684.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.328;DB;DP=215;Dels=0.00;FS=15.464;HaplotypeScore=1.3183;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-1.053;QD=10.53;ReadPosRankSum=-2.893;SB=-2.920e+02;VQSLOD=5.8891;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|0:80,0:81:99:0,229,2999:127" "0|0:69,0:69:99:0,175,2268:127" "0|1:35,30:65:99:719,0,1046:127"
+4 64522064 rs4860541 A G 5942.01 PASS AC=6;AF=1.00;AN=6;DB;DP=188;Dels=0.00;FS=0.000;HaplotypeScore=0.2889;MLEAC=6;MLEAF=1.00;MQ=56.20;MQ0=0;QD=31.61;SB=-3.348e+03;VQSLOD=8.5367;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,68:68:99:2119,169,0:127" "1|1:0,52:53:99:1661,132,0:127" "1|1:0,67:67:99:2162,172,0:127"
+15 92857342 rs12101550 A G 2734.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.995;DB;DP=226;Dels=0.00;FS=3.761;HaplotypeScore=1.5682;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=0.761;QD=12.10;ReadPosRankSum=-0.587;SB=-1.469e+03;VQSLOD=9.1510;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:45,37:82:99:853,0,1356:127" "0/1:29,40:69:99:966,0,852:127" "0/1:38,37:75:99:954,0,1085:127"
+X 150239197 rs6627349 T C 4677.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.731;DB;DP=179;Dels=0.00;FS=0.000;HaplotypeScore=1.6094;MLEAC=5;MLEAF=0.833;MQ=59.69;MQ0=0;MQRankSum=0.676;QD=26.13;ReadPosRankSum=0.494;SB=-2.442e+03;VQSLOD=10.5525;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,66:66:99:2387,190,0:99" "1|1:0,40:40:99:1243,99,0:99" "1|0:36,37:73:99:1047,0,1039:99"
+5 144321895 rs35068704 A T 1535.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.048;DB;DP=203;Dels=0.00;FS=13.289;HaplotypeScore=0.5075;MLEAC=2;MLEAF=0.333;MQ=57.36;MQ0=0;MQRankSum=2.191;QD=11.37;ReadPosRankSum=-1.361;SB=-7.640e+02;VQSLOD=5.7211;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:34,25:59:99:595,0,976:127" "0|0:68,0:68:99:0,190,2435:127" "1|0:39,37:76:99:979,0,1274:127"
+1 59635894 rs331648 T A 839.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.038;DB;DP=211;Dels=0.00;FS=1.427;HaplotypeScore=1.5485;MLEAC=1;MLEAF=0.167;MQ=58.68;MQ0=0;MQRankSum=-0.422;QD=11.82;ReadPosRankSum=-0.180;SB=-5.520e+02;VQSLOD=7.9477;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,199,2578:127" "0|0:62,0:62:99:0,169,2205:127" "0|1:33,38:71:99:874,0,897:127"
+6 162459664 rs2849564 C T 1819.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.399;DB;DP=201;Dels=0.00;FS=3.295;HaplotypeScore=2.5591;MLEAC=2;MLEAF=0.333;MQ=59.38;MQ0=0;MQRankSum=1.792;QD=12.90;ReadPosRankSum=-1.045;SB=-1.068e+03;VQSLOD=8.1160;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:28,40:68:99:1007,0,793:120" "1|0:38,35:73:99:851,0,831:120" "0|0:60,0:60:99:0,120,1421:120"
+7 79508376 rs2525826 G T 716.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.152;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=0.8658;MLEAC=1;MLEAF=0.167;MQ=59.48;MQ0=0;MQRankSum=1.420;QD=13.51;ReadPosRankSum=0.263;SB=-4.080e+02;VQSLOD=9.5728;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:65,0:65:99:0,181,2312:127" "0|0:78,0:78:99:0,226,2916:127" "0|1:27,26:53:99:751,0,845:127"
+16 34610294 rs72812776 C T 603.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.361;DB;DP=270;Dels=0.00;FS=6.065;HaplotypeScore=3.1650;MLEAC=1;MLEAF=0.167;MQ=59.66;MQ0=0;MQRankSum=1.603;QD=7.83;ReadPosRankSum=0.296;SB=-2.820e+02;VQSLOD=3.3685;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:123,0:123:99:0,343,4443:127" "0|0:69,1:70:99:0,184,2397:127" "0|1:48,29:77:99:638,0,1483:127"
+3 68765638 rs1504297 C G 4623.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-5.561;DB;DP=225;Dels=0.00;FS=3.176;HaplotypeScore=0.8432;MLEAC=4;MLEAF=0.667;MQ=59.80;MQ0=0;MQRankSum=-0.619;QD=20.55;ReadPosRankSum=-1.001;SB=-2.371e+03;VQSLOD=8.7354;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:40,39:79:99:1220,0,1330:127" "1|1:0,75:75:99:2518,205,0:127" "0|1:37,34:71:99:885,0,1185:127"
+2 144289763 rs7607879 C T 3308.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.386;DB;DP=225;Dels=0.00;FS=9.723;HaplotypeScore=1.4969;MLEAC=3;MLEAF=0.500;MQ=59.53;MQ0=0;MQRankSum=0.283;QD=14.70;ReadPosRankSum=1.392;SB=-1.760e+03;VQSLOD=8.2418;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:41,39:81:99:1190,0,1312:127" "0/1:28,36:64:99:1057,0,834:127" "0/1:44,36:80:99:1061,0,1275:127"
+1 216407409 rs3767692 A G 8820.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.803;DB;DP=295;Dels=0.00;FS=1.345;HaplotypeScore=2.5841;MLEAC=5;MLEAF=0.833;MQ=59.28;MQ0=0;MQRankSum=-0.375;QD=29.90;ReadPosRankSum=-0.363;SB=-4.445e+03;VQSLOD=7.0549;culprit=DP GT:AD:DP:GQ:PL:TP "1|1:1,115:116:99:4251,328,0:127" "1|0:39,51:90:99:1430,0,1275:127" "1|1:0,89:89:99:3139,241,0:127"
+12 5922552 rs17786352 C G 1874.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.386;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.3053;MLEAC=2;MLEAF=0.333;MQ=54.49;MQ0=0;MQRankSum=2.656;QD=13.11;ReadPosRankSum=1.042;SB=-9.400e+02;VQSLOD=4.7495;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:44,35:79:99:897,0,1383:127" "1|0:28,36:64:99:1016,0,734:127" "0|0:88,0:88:99:0,238,3004:127"
+3 86234718 rs2324883 T C 7655.01 PASS AC=6;AF=1.00;AN=6;DB;DP=234;Dels=0.00;FS=0.000;HaplotypeScore=0.6487;MLEAC=6;MLEAF=1.00;MQ=59.51;MQ0=0;QD=32.71;SB=-4.142e+03;VQSLOD=11.2111;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,80:80:99:2857,223,0:127" "1|1:0,76:77:99:2512,196,0:127" "1|1:0,77:77:99:2286,178,0:127"
+17 21547285 rs62049731 A C 1322.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.987;DB;DP=569;Dels=0.00;FS=2.322;HaplotypeScore=42.4511;MLEAC=3;MLEAF=0.500;MQ=44.59;MQ0=24;MQRankSum=-6.240;QD=2.32;ReadPosRankSum=-5.171;SB=-6.369e+02;VQSLOD=-39.5319;culprit=DP GT:AD:DP:GQ:PL:TP "0/1:146,28:174:99:217,0,4187:127" "0/1:162,56:218:99:804,0,4298:127" "0/1:139,38:177:99:340,0,3842:127"
+10 74020452 rs72806301 C A 1116.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.155;DB;DP=135;Dels=0.00;FS=3.279;HaplotypeScore=0.8720;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=-0.818;QD=11.88;ReadPosRankSum=1.484;SB=-6.800e+02;VQSLOD=7.2668;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:20,27:47:99:658,0,446:104" "0|0:41,0:41:99:0,105,1324:104" "1|0:25,22:47:99:497,0,482:104"
+10 95435201 rs2422323 C T 4017.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.438;DB;DP=203;Dels=0.00;FS=13.125;HaplotypeScore=3.2358;MLEAC=4;MLEAF=0.667;MQ=55.24;MQ0=0;MQRankSum=1.174;QD=19.79;ReadPosRankSum=-0.655;SB=-2.177e+03;VQSLOD=4.5957;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:38,45:83:99:1327,0,931:127" "1|1:1,63:64:99:1966,156,0:127" "0|1:30,25:56:99:724,0,807:127"
+7 158686803 rs55765467 T C 200.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-10.112;DB;DP=310;Dels=0.00;FS=2.596;HaplotypeScore=1.2829;MLEAC=3;MLEAF=0.500;MQ=47.32;MQ0=0;MQRankSum=-4.959;QD=0.65;ReadPosRankSum=-10.956;SB=-1.206e+03;VQSLOD=-17.6411;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0/1:64,33:97:99:148,0,1949:32" "0/1:73,45:118:58:58,0,2287:32" "0/1:65,30:95:33:33,0,1910:32"
+5 102962771 rs6866105 A G 5087.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.665;DB;DP=200;Dels=0.00;FS=8.083;HaplotypeScore=2.2837;MLEAC=5;MLEAF=0.833;MQ=58.71;MQ0=0;MQRankSum=-0.503;QD=25.44;ReadPosRankSum=-0.482;SB=-2.172e+03;VQSLOD=7.2212;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,75:75:99:2373,184,0:127" "1|1:0,59:59:99:1776,141,0:127" "1|0:31,35:66:99:938,0,803:127"
+13 101976707 rs527328 A T 9240.01 PASS AC=6;AF=1.00;AN=6;DB;DP=259;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=53.28;MQ0=0;QD=35.68;SB=-4.696e+03;VQSLOD=7.5241;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,92:92:99:3410,262,0:127" "1|1:0,88:88:99:3195,247,0:127" "1|1:1,78:79:99:2635,202,0:127"
+6 45421630 rs1343799 C T 5422.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.419;DB;DP=240;Dels=0.00;FS=10.689;HaplotypeScore=0.7979;MLEAC=4;MLEAF=0.667;MQ=59.46;MQ0=0;MQRankSum=1.089;QD=22.59;ReadPosRankSum=1.252;SB=-2.647e+03;VQSLOD=7.7035;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:29,43:72:99:1445,0,843:127" "0|1:43,37:80:99:1121,0,1302:127" "1|1:0,88:88:99:2856,220,0:127"
+9 69810010 rs113063015 A C 280.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.223;DB;DP=716;DS;Dels=0.00;FS=8.996;HaplotypeScore=39.8350;MLEAC=3;MLEAF=0.500;MQ=37.32;MQ0=64;MQRankSum=-3.574;QD=0.39;ReadPosRankSum=-0.897;SB=-1.065e-02;VQSLOD=-68.1677;culprit=DP GT:AD:DP:GQ:PL:TP "0/1:218,23:241:73:73,0,3591:70" "0/1:188,39:227:99:172,0,4233:70" "0/1:217,31:248:74:74,0,5042:70"
+6 143691852 rs17792267 C T 3641.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.465;DB;DP=203;Dels=0.00;FS=2.413;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=1.198;QD=27.17;ReadPosRankSum=-1.140;SB=-1.772e+03;VQSLOD=8.8712;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:29,33:62:99:1131,0,803:127" "1|1:0,72:72:99:2510,196,0:127" "0|0:69,0:69:99:0,190,2480:127"
+14 38160457 rs2181345 A C 4683.01 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=2.5449;MLEAC=6;MLEAF=1.00;MQ=59.00;MQ0=0;QD=27.71;SB=-2.390e+03;VQSLOD=9.9888;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,56:56:99:1818,141,0:107" "1|1:0,58:58:99:1523,123,0:107" "1|1:0,53:55:99:1342,108,0:107"
+20 3199373 rs2422861 G A 896.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.452;DB;DP=135;Dels=0.00;FS=0.664;HaplotypeScore=2.8371;MLEAC=3;MLEAF=0.500;MQ=58.47;MQ0=0;MQRankSum=-0.217;QD=6.64;ReadPosRankSum=0.111;SB=-6.080e+02;VQSLOD=7.7118;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:32,24:56:99:472,0,640:127" "0/1:25,15:40:99:229,0,603:127" "0/1:20,19:39:99:234,0,379:127"
+3 137840974 rs2622698 C A 6792.01 PASS AC=6;AF=1.00;AN=6;DB;DP=232;Dels=0.00;FS=0.000;HaplotypeScore=2.6477;MLEAC=6;MLEAF=1.00;MQ=59.04;MQ0=0;QD=29.28;SB=-3.999e+03;VQSLOD=9.7681;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,79:79:99:2640,205,0:127" "1|1:0,78:78:99:2229,178,0:127" "1|1:0,75:75:99:1923,153,0:127"
+8 132727531 rs7000409 G A 2050.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.475;DB;DP=220;Dels=0.00;FS=5.203;HaplotypeScore=1.9424;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=1.230;QD=14.14;ReadPosRankSum=-0.871;SB=-1.080e+03;VQSLOD=7.7925;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:29,35:64:99:1215,0,785:127" "0|0:75,0:75:99:0,190,2423:127" "1|0:50,31:81:99:874,0,1611:127"
+8 113376378 rs41340951 T C 4379.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.019;DB;DP=211;Dels=0.00;FS=1.826;HaplotypeScore=0.2629;MLEAC=4;MLEAF=0.667;MQ=59.85;MQ0=0;MQRankSum=1.273;QD=20.75;ReadPosRankSum=0.144;SB=-1.893e+03;VQSLOD=8.8374;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,67:67:99:2221,187,0:127" "1|0:32,37:69:99:1083,0,1066:127" "1|0:35,40:75:99:1075,0,1108:127"
+5 36740339 rs36676 T G 6995.01 PASS AC=6;AF=1.00;AN=6;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=2.0768;MLEAC=6;MLEAF=1.00;MQ=59.46;MQ0=0;QD=30.41;SB=-3.034e+03;VQSLOD=10.9208;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,75:75:99:2261,195,0:127" "1|1:0,83:83:99:2579,217,0:127" "1|1:0,71:72:99:2155,181,0:127"
+5 3276081 rs4866540 G A 3653.01 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=5.002;DB;DP=176;Dels=0.00;FS=2.778;HaplotypeScore=19.0040;MLEAC=4;MLEAF=0.667;MQ=57.74;MQ0=0;MQRankSum=-0.569;QD=20.76;ReadPosRankSum=1.308;SB=-6.610e+02;VQSLOD=3.1833;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,71:72:99:2337,175,0:127" "1|0:26,25:51:99:719,0,601:127" "1|0:26,27:53:99:597,0,662:127"
+9 16302655 rs9298755 T G 1394.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.356;DB;DP=200;Dels=0.00;FS=0.000;HaplotypeScore=3.1863;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=0.586;QD=10.03;ReadPosRankSum=-0.771;SB=-8.720e+02;VQSLOD=7.7724;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:60,1:61:99:0,165,2004:127" "0|1:29,28:57:99:494,0,759:127" "0|1:41,40:82:99:939,0,1069:127"
+2 28790711 rs34787802 T G 731.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.421;DB;DP=232;Dels=0.00;FS=2.403;HaplotypeScore=1.5189;MLEAC=1;MLEAF=0.167;MQ=57.98;MQ0=0;MQRankSum=0.447;QD=10.30;ReadPosRankSum=-1.833;SB=-4.550e+02;VQSLOD=6.8853;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,223,2877:127" "0|1:36,35:71:99:766,0,947:127" "0|0:79,0:80:99:0,205,2640:127"
+1 243135892 rs7517403 C T 2313.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=7.051;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.5884;MLEAC=4;MLEAF=0.667;MQ=37.62;MQ0=11;MQRankSum=-5.659;QD=13.77;ReadPosRankSum=-0.977;SB=-9.200e+02;VQSLOD=2.2480;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:31,24:55:99:501,0,891:123" "1|1:0,58:58:99:1263,123,0:123" "0|1:28,27:55:99:591,0,714:123"
+21 25702950 rs2260875 C G 3462.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.156;DB;DP=237;Dels=0.00;FS=2.900;HaplotypeScore=1.5444;MLEAC=3;MLEAF=0.500;MQ=59.04;MQ0=0;MQRankSum=0.386;QD=14.61;ReadPosRankSum=-1.455;SB=-1.683e+03;VQSLOD=8.0501;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0/1:37,40:77:99:1282,0,1101:127" "0/1:43,36:79:99:1114,0,1317:127" "0/1:45,36:81:99:1066,0,1329:127"
+7 144383888 rs73161092 T C 689.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.434;DB;DP=254;Dels=0.00;FS=8.629;HaplotypeScore=0.0000;MLEAC=1;MLEAF=0.167;MQ=59.54;MQ0=0;MQRankSum=0.163;QD=8.62;ReadPosRankSum=-1.802;SB=-3.560e+02;VQSLOD=6.4544;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:90,0:90:99:0,268,3553:127" "0|1:47,33:80:99:724,0,1392:127" "0|0:84,0:84:99:0,202,2644:127"
+18 20025030 rs4800406 A G 1113.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.700;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=1.6804;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=1.643;QD=12.65;ReadPosRankSum=-1.166;SB=-6.160e+02;VQSLOD=8.6574;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,223,2978:127" "0|1:46,42:88:99:1148,0,1460:127" "0|0:64,0:64:99:0,175,2303:127"
+3 76722766 rs264537 C G 845.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=3.666;DB;DP=202;Dels=0.00;FS=0.000;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.79;MQ0=0;MQRankSum=-0.795;QD=13.21;ReadPosRankSum=1.049;SB=-2.910e+02;VQSLOD=8.5280;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:70,0:70:99:0,208,2570:127" "0|0:68,0:68:99:0,193,2332:127" "0|1:34,30:64:99:880,0,995:127"
+20 29566945 rs6119037 C G 1427.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-3.826;DB;DP=271;Dels=0.00;FS=1.151;HaplotypeScore=2.7598;MLEAC=2;MLEAF=0.333;MQ=47.42;MQ0=21;MQRankSum=2.420;QD=8.06;ReadPosRankSum=0.363;SB=-7.560e+02;VQSLOD=1.7908;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:59,32:91:99:782,0,1210:127" "1|0:55,31:86:99:684,0,1422:127" "0|0:94,0:94:99:0,208,2592:127"
+10 125452232 rs7900707 A G 3211.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-6.610;DB;DP=189;Dels=0.00;FS=17.742;HaplotypeScore=0.0000;MLEAC=4;MLEAF=0.667;MQ=59.66;MQ0=0;MQRankSum=0.614;QD=16.99;ReadPosRankSum=-0.321;SB=-1.553e+03;VQSLOD=6.9018;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,61:61:99:1944,168,0:127" "1|0:44,26:70:99:627,0,1357:127" "1|0:29,29:58:99:682,0,862:127"
+7 110843795 rs214455 A G 8548.01 PASS AC=6;AF=1.00;AN=6;DB;DP=258;Dels=0.00;FS=0.000;HaplotypeScore=2.3561;MLEAC=6;MLEAF=1.00;MQ=59.35;MQ0=0;QD=33.13;SB=-4.197e+03;VQSLOD=10.7627;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,106:106:99:3535,301,0:127" "1|1:0,66:66:99:2270,193,0:127" "1|1:0,86:86:99:2743,229,0:127"
+6 55412503 rs12201934 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.280;DB;DP=182;Dels=0.00;FS=0.744;HaplotypeScore=0.3332;MLEAC=1;MLEAF=0.167;MQ=59.64;MQ0=0;MQRankSum=-0.765;QD=13.57;ReadPosRankSum=0.147;SB=-4.590e+02;VQSLOD=9.3766;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:61,0:61:99:0,181,2371:127" "0|1:35,30:65:99:917,0,1046:127" "0|0:56,0:56:99:0,150,1969:127"
+10 11560326 rs4424580 C T 1027.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.178;DB;DP=207;Dels=0.00;FS=0.573;HaplotypeScore=2.1981;MLEAC=2;MLEAF=0.333;MQ=59.24;MQ0=0;MQRankSum=-0.988;QD=7.78;ReadPosRankSum=-0.492;SB=-7.450e+02;VQSLOD=8.4594;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:41,32:73:99:609,0,930:96" "1|0:29,30:59:99:457,0,570:96" "0|0:74,1:75:96:0,96,1185:96"
+1 175207612 rs11484568 C T 1920.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.643;DB;DP=216;Dels=0.00;FS=0.537;HaplotypeScore=2.2467;MLEAC=2;MLEAF=0.333;MQ=58.99;MQ0=0;MQRankSum=0.383;QD=14.12;ReadPosRankSum=0.169;SB=-1.064e+03;VQSLOD=8.5912;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:34,40:74:99:1152,0,995:127" "0|0:80,0:80:99:0,208,2602:127" "1|0:34,28:62:99:807,0,998:127"
+17 33513649 rs3744366 A G 3743.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.729;DB;DP=213;Dels=0.00;FS=0.526;HaplotypeScore=2.9053;MLEAC=4;MLEAF=0.667;MQ=58.99;MQ0=0;MQRankSum=-0.152;QD=17.57;ReadPosRankSum=0.530;SB=-2.067e+03;VQSLOD=8.0191;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:44,40:84:99:1083,0,1341:127" "1|1:0,67:67:99:2074,162,0:127" "0|1:37,24:62:99:586,0,1015:127"
+1 69502962 rs12724640 T C 1868.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-1.732;DB;DP=110;Dels=0.00;FS=4.721;HaplotypeScore=1.9269;MLEAC=6;MLEAF=1.00;MQ=29.46;MQ0=22;MQRankSum=1.652;QD=16.98;ReadPosRankSum=-0.564;SB=-8.110e+02;VQSLOD=0.2103;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:5,23:29:63:693,63,0:50" "1|1:5,38:43:66:675,66,0:50" "1|1:9,29:38:51:538,51,0:50"
+8 66327344 rs13282622 G A 3918.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.514;DB;DP=192;Dels=0.00;FS=3.531;HaplotypeScore=1.6541;MLEAC=4;MLEAF=0.667;MQ=58.91;MQ0=0;MQRankSum=0.706;QD=20.41;ReadPosRankSum=-0.327;SB=-2.091e+03;VQSLOD=8.6266;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:34,37:71:99:1137,0,923:127" "0|1:32,28:61:99:806,0,988:127" "1|1:0,60:60:99:1975,153,0:127"
+2 127445050 rs113647072 A G 1773.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.856;DB;DP=154;Dels=0.00;FS=4.202;HaplotypeScore=2.2701;MLEAC=4;MLEAF=0.667;MQ=59.16;MQ0=0;MQRankSum=0.759;QD=11.51;ReadPosRankSum=1.290;SB=-1.402e+03;VQSLOD=7.9185;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:26,28:54:99:652,0,472:78" "0|1:26,22:49:99:350,0,462:78" "1|1:0,50:51:78:813,78,0:78"
+11 75978490 rs655877 G C 2986.25 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.846;DB;DP=127;Dels=0.00;FS=5.433;HaplotypeScore=0.2629;MLEAC=5;MLEAF=0.833;MQ=59.42;MQ0=0;MQRankSum=0.026;QD=23.51;ReadPosRankSum=0.168;SB=-1.613e+03;VQSLOD=7.0404;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,50:50:99:1405,111,0:101" "1|1:0,45:46:99:1269,102,0:101" "1|0:17,14:31:99:354,0,469:101"
+14 68051087 rs11628035 G A 4028.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.928;DB;DP=236;Dels=0.00;FS=8.184;HaplotypeScore=1.3296;MLEAC=3;MLEAF=0.500;MQ=58.83;MQ0=0;MQRankSum=1.834;QD=25.49;ReadPosRankSum=2.590;SB=-1.989e+03;VQSLOD=6.7911;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:38,39:77:99:1265,0,1112:127" "1|1:0,81:81:99:2763,214,0:127" "0|0:78,0:78:99:0,208,2673:127"
+10 106444111 rs72813617 A G 632.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.838;DB;DP=197;Dels=0.00;FS=4.121;HaplotypeScore=1.8154;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-1.142;QD=12.40;ReadPosRankSum=-1.947;SB=-2.390e+02;VQSLOD=7.6230;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|0:84,0:84:99:0,241,3129:127" "0|0:62,0:62:99:0,159,2008:127" "0|1:27,24:51:99:667,0,584:127"
+X 42192093 rs58959554 T C 1058.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-5.464;DB;DP=190;Dels=0.00;FS=6.809;HaplotypeScore=1.8813;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.212;QD=15.34;ReadPosRankSum=-0.173;SB=-3.970e+02;VQSLOD=8.0569;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:70,1:71:99:0,182,2683:127" "0|0:50,0:50:99:0,138,1794:127" "0|1:31,38:69:99:1093,0,947:127"
+11 123470819 rs1148095 T C 6964.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.850;DB;DP=242;Dels=0.00;FS=1.477;HaplotypeScore=1.3868;MLEAC=5;MLEAF=0.833;MQ=59.25;MQ0=0;MQRankSum=-1.734;QD=28.78;ReadPosRankSum=-0.749;SB=-3.242e+03;VQSLOD=8.7854;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "1|1:0,92:92:99:3408,265,0:127" "1|0:35,51:86:99:1520,0,1059:127" "1|1:0,64:64:99:2036,157,0:127"
+14 106085773 rs2955055 C T 2115.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.746;DB;DP=172;Dels=0.00;FS=18.420;HaplotypeScore=2.9489;MLEAC=3;MLEAF=0.500;MQ=35.68;MQ0=18;MQRankSum=3.251;QD=12.30;ReadPosRankSum=0.100;SB=-5.530e+02;VQSLOD=1.2866;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:32,33:65:99:600,0,554:80" "0/1:30,42:72:99:1001,0,400:80" "0/1:12,23:35:80:553,0,80:80"
+4 48922864 rs7697262 G C 1383.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=100;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=20.20;MQ0=24;QD=13.83;SB=-3.860e+02;VQSLOD=-0.3210;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:3,38:41:57:625,57,0:32" "1|1:0,28:28:33:368,33,0:32" "1|1:2,29:31:39:428,39,0:32"
+X 135282092 rs5974586 G C 2193.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.257;DB;DP=203;Dels=0.00;FS=0.540;HaplotypeScore=0.6589;MLEAC=2;MLEAF=0.333;MQ=59.47;MQ0=0;MQRankSum=1.000;QD=13.46;ReadPosRankSum=1.343;SB=-1.069e+03;VQSLOD=9.0929;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:47,33:80:99:1026,0,1466:116" "0|0:40,0:40:99:0,117,1486:116" "1|0:43,40:83:99:1206,0,1311:116"
+11 103989190 rs1545865 T C 4915.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.030;DB;DP=219;Dels=0.00;FS=1.231;HaplotypeScore=1.2090;MLEAC=4;MLEAF=0.667;MQ=59.37;MQ0=0;MQRankSum=1.103;QD=22.44;ReadPosRankSum=0.773;SB=-2.213e+03;VQSLOD=8.9081;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:23,40:63:99:1203,0,669:127" "0|1:36,52:88:99:1433,0,1136:127" "1|1:0,68:68:99:2279,178,0:127"
+2 45429089 rs13418430 C A 2341.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.861;DB;DP=283;Dels=0.00;FS=2.854;HaplotypeScore=1.3288;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=-0.939;QD=12.52;ReadPosRankSum=-1.869;SB=-1.156e+03;VQSLOD=7.1503;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:60,49:109:99:1406,0,2061:127" "1|0:41,37:78:99:974,0,1238:127" "0|0:96,0:96:99:0,256,3312:127"
+7 56584972 rs34475770 C T 2465.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.103;DB;DP=255;Dels=0.00;FS=2.230;HaplotypeScore=0.8840;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=1.766;QD=15.03;ReadPosRankSum=1.126;SB=-1.412e+03;VQSLOD=6.5725;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:91,0:91:99:0,259,3369:127" "0|1:36,49:85:99:1444,0,1000:127" "0|1:38,41:79:99:1060,0,1084:127"
+4 190538070 rs62323772 G A 106.69 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.099;DB;DP=19;Dels=0.00;FS=0.000;HaplotypeScore=4.3562;MLEAC=3;MLEAF=0.500;MQ=33.71;MQ0=0;MQRankSum=0.591;QD=5.93;ReadPosRankSum=-0.394;SB=-7.601e+01;VQSLOD=-1.3921;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:4,9:13:69:69,0,92:3" "0|0:1,0:1:3:0,3,33:3" "1|1:0,4:5:6:77,6,0:3"
+16 55910673 rs17265788 G C 2345.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.657;DB;DP=208;Dels=0.00;FS=3.162;HaplotypeScore=1.9213;MLEAC=3;MLEAF=0.500;MQ=59.67;MQ0=0;MQRankSum=-0.333;QD=16.63;ReadPosRankSum=-0.425;SB=-1.468e+03;VQSLOD=8.3665;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:33,33:66:99:769,0,761:122" "0|0:67,0:67:99:0,123,1506:122" "1|1:0,75:75:99:1621,132,0:122"
+2 54408283 rs55993481 T G 2128.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.961;DB;DP=222;Dels=0.00;FS=1.744;HaplotypeScore=3.9553;MLEAC=2;MLEAF=0.333;MQ=59.69;MQ0=0;MQRankSum=0.670;QD=14.28;ReadPosRankSum=1.313;SB=-1.076e+03;VQSLOD=6.5064;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:35,46:81:99:1392,0,921:127" "1|0:35,33:68:99:775,0,878:127" "0|0:73,0:73:99:0,175,2164:127"
+16 83153777 rs4395063 T C 3143.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.771;DB;DP=205;Dels=0.00;FS=1.805;HaplotypeScore=1.0370;MLEAC=4;MLEAF=0.667;MQ=59.55;MQ0=0;MQRankSum=-1.380;QD=15.33;ReadPosRankSum=0.424;SB=-2.104e+03;VQSLOD=8.8241;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:31,31:62:99:867,0,865:127" "0|1:45,28:73:99:412,0,801:127" "1|1:0,70:70:99:1906,150,0:127"
+15 71657506 . A G 140.4 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.611;DP=133;Dels=0.00;FS=35.593;HaplotypeScore=4.0622;MLEAC=2;MLEAF=0.333;MQ=51.29;MQ0=1;MQRankSum=-3.344;QD=1.53;ReadPosRankSum=-3.999;SB=-5.015e+01;VQSLOD=-4.8050;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:46,11:57:93:93,0,851:15" "1|0:23,12:35:86:86,0,299:15" "0|0:33,8:41:15:0,15,503:15"
+18 67950442 rs62091919 T G 1779.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.517;DB;DP=195;Dels=0.00;FS=0.562;HaplotypeScore=1.5454;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.006;QD=12.89;ReadPosRankSum=-0.268;SB=-9.170e+02;VQSLOD=9.6268;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:40,32:72:99:967,0,1318:127" "0|0:55,2:57:99:0,141,1865:127" "1|0:36,30:66:99:851,0,1042:127"
+16 5754758 rs11644707 C T 1012.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.777;DB;DP=161;Dels=0.00;FS=0.000;HaplotypeScore=2.4572;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=0.699;QD=9.64;ReadPosRankSum=2.624;SB=-5.580e+02;VQSLOD=7.0970;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|1:31,26:57:99:627,0,943:125" "0|0:56,0:56:99:0,126,1597:125" "1|0:32,16:48:99:424,0,785:125"
+15 62088952 rs35033959 A T 3546.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.220;DB;DP=241;Dels=0.00;FS=14.286;HaplotypeScore=0.2774;MLEAC=3;MLEAF=0.500;MQ=59.77;MQ0=0;MQRankSum=-1.969;QD=14.71;ReadPosRankSum=0.341;SB=-1.970e+03;VQSLOD=6.3785;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:45,44:89:99:1265,0,1533:127" "0/1:34,38:72:99:1133,0,1137:127" "0/1:41,39:80:99:1148,0,1303:127"
+7 124589684 rs12113765 G C 4948.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.607;DB;DP=243;Dels=0.00;FS=1.040;HaplotypeScore=3.3790;MLEAC=4;MLEAF=0.667;MQ=58.74;MQ0=0;MQRankSum=1.246;QD=20.36;ReadPosRankSum=-0.387;SB=-2.411e+03;VQSLOD=7.0507;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:44,27:71:99:796,0,1350:127" "1|1:0,84:85:99:2760,217,0:127" "0|1:41,46:87:99:1392,0,1180:127"
+4 122900130 rs4833786 C T 2361.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.390;DB;DP=244;Dels=0.00;FS=0.495;HaplotypeScore=0.5427;MLEAC=2;MLEAF=0.333;MQ=59.91;MQ0=0;MQRankSum=-0.628;QD=15.23;ReadPosRankSum=1.221;SB=-1.282e+03;VQSLOD=8.8105;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:89,0:89:99:0,250,3286:127" "0|1:42,44:86:99:1257,0,1325:127" "0|1:32,37:69:99:1143,0,941:127"
+7 29544610 rs6462145 A T 4020.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.326;DB;DP=189;Dels=0.00;FS=5.388;HaplotypeScore=1.2974;MLEAC=4;MLEAF=0.667;MQ=58.54;MQ0=0;MQRankSum=1.295;QD=21.27;ReadPosRankSum=-1.212;SB=-1.878e+03;VQSLOD=7.3155;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:27,49:77:99:1466,0,733:127" "1|1:0,64:64:99:1888,147,0:127" "0|1:18,27:48:99:666,0,410:127"
+1 17032814 rs2773183 T C 2828.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879;DB;DP=322;Dels=0.00;FS=2.430;HaplotypeScore=15.4499;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.916;QD=8.78;ReadPosRankSum=-1.245;SB=-1.943e+03;VQSLOD=-1.4207;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:63,59:122:99:1434,0,1831:127" "0/1:53,56:109:99:910,0,871:127" "0/1:61,30:91:99:523,0,1257:127"
+13 74611546 rs73214804 C T 639.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.487;DB;DP=164;Dels=0.00;FS=0.000;HaplotypeScore=1.4071;MLEAC=1;MLEAF=0.167;MQ=58.95;MQ0=0;MQRankSum=0.902;QD=11.21;ReadPosRankSum=-0.541;SB=-3.000e+02;VQSLOD=8.8824;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:53,0:53:99:0,135,1773:110" "0|0:53,1:54:99:0,111,1440:110" "0|1:24,33:57:99:674,0,388:110"
+1 146610795 rs58742099 C T 2831.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.298;DB;DP=261;Dels=0.00;FS=7.033;HaplotypeScore=13.9060;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=0.753;QD=16.27;ReadPosRankSum=-1.405;SB=-1.481e+03;VQSLOD=3.4221;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:39,43:82:99:1329,0,1080:127" "1|0:40,52:92:99:1541,0,1241:127" "0|0:87,0:87:99:0,238,3098:127"
+16 65776985 rs72784548 T C 3527.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.439;DB;DP=195;Dels=0.00;FS=1.228;HaplotypeScore=0.8795;MLEAC=4;MLEAF=0.667;MQ=58.78;MQ0=0;MQRankSum=1.630;QD=18.09;ReadPosRankSum=1.358;SB=-1.904e+03;VQSLOD=7.6763;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,68:68:99:2351,181,0:127" "1|0:33,28:61:99:586,0,710:127" "1|0:31,35:66:99:590,0,468:127"
+6 79887872 rs6454101 C T 2130.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.355;DB;DP=204;Dels=0.00;FS=11.823;HaplotypeScore=2.3806;MLEAC=3;MLEAF=0.500;MQ=59.68;MQ0=0;MQRankSum=1.011;QD=10.44;ReadPosRankSum=-0.769;SB=-1.370e+03;VQSLOD=7.5187;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:31,31:62:99:806,0,990:127" "0/1:42,31:73:99:606,0,921:127" "0/1:29,40:69:99:757,0,749:127"
+20 41560394 rs761027 A G 5634.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.444;DB;DP=222;Dels=0.00;FS=0.829;HaplotypeScore=1.1428;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=0.392;QD=25.38;ReadPosRankSum=-0.064;SB=-3.048e+03;VQSLOD=10.0362;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,72:72:99:2228,187,0:127" "1|1:0,82:82:99:2435,211,0:127" "1|0:25,43:68:99:971,0,567:127"
+1 226163330 rs10915914 C G 747.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.123;DB;DP=121;Dels=0.00;FS=0.863;HaplotypeScore=0.8289;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=-0.478;QD=9.70;ReadPosRankSum=-0.134;SB=-2.780e+02;VQSLOD=8.0849;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:43,1:44:99:0,117,1447:116" "0|1:17,15:32:99:289,0,390:116" "0|1:26,19:45:99:497,0,677:116"
+5 174249229 rs11739079 C G 1613.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.540;DB;DP=190;Dels=0.00;FS=6.482;HaplotypeScore=2.0416;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-0.898;QD=11.86;ReadPosRankSum=0.601;SB=-8.320e+02;VQSLOD=7.7782;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:32,43:75:99:1069,0,928:123" "0|0:54,0:54:99:0,123,1554:123" "1|0:33,27:61:99:583,0,883:123"
+15 23743658 rs142070302 T A 1007.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.164;DB;DP=408;Dels=0.00;FS=166.853;HaplotypeScore=53.5447;MLEAC=3;MLEAF=0.500;MQ=38.96;MQ0=14;MQRankSum=-6.283;QD=2.47;ReadPosRankSum=2.486;SB=-1.079e-02;VQSLOD=-304.7942;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:104,39:143:99:365,0,2802:45" "0/1:99,40:139:99:636,0,2335:45" "0/1:97,28:126:45:45,0,2324:45"
+3 60283791 rs10154846 T C 669.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.270;DB;DP=204;Dels=0.00;FS=1.585;HaplotypeScore=1.6639;MLEAC=1;MLEAF=0.167;MQ=59.39;MQ0=0;MQRankSum=0.370;QD=10.14;ReadPosRankSum=1.636;SB=-2.690e+02;VQSLOD=8.9468;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:63,0:63:99:0,190,2440:127" "0|1:34,32:66:99:704,0,1020:127" "0|0:74,0:75:99:0,190,2372:127"
+15 100799787 rs4965610 C T 2133.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.373;DB;DP=230;Dels=0.00;FS=1.037;HaplotypeScore=0.5427;MLEAC=3;MLEAF=0.500;MQ=58.84;MQ0=0;MQRankSum=0.169;QD=9.28;ReadPosRankSum=-0.098;SB=-1.328e+03;VQSLOD=7.8802;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:40,36:76:99:948,0,701:127" "0/1:45,38:83:99:761,0,635:127" "0/1:35,36:71:99:463,0,706:127"
+21 10750991 . C T 602.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=10.103;DP=735;DS;Dels=0.00;FS=27.020;HaplotypeScore=107.2731;MLEAC=2;MLEAF=0.333;MQ=44.40;MQ0=2;MQRankSum=-14.560;QD=1.24;ReadPosRankSum=0.063;SB=-8.430e+02;VQSLOD=-100.9480;culprit=DP GT:AD:DP:GQ:PL:TP "1|0:164,78:243:99:357,0,5193:103" "1|0:187,55:242:99:284,0,5252:103" "0|0:199,50:250:99:0,103,5864:103"
+18 1629264 rs5025369 A G 86.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.739;DB;DP=149;Dels=0.00;FS=15.359;HaplotypeScore=7.1355;MLEAC=2;MLEAF=0.333;MQ=39.72;MQ0=11;MQRankSum=-2.543;QD=0.81;ReadPosRankSum=0.088;SB=-3.380e+01;VQSLOD=-6.2052;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:51,15:66:50:50,0,1143:49" "0|0:37,5:42:81:0,81,941:49" "1|0:35,6:41:75:75,0,818:49"
+X 84165195 rs5923187 C A 1009.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.103;DB;DP=194;Dels=0.00;FS=3.070;HaplotypeScore=2.8168;MLEAC=1;MLEAF=0.167;MQ=59.31;MQ0=0;MQRankSum=-0.675;QD=12.01;ReadPosRankSum=-1.463;SB=-5.890e+02;VQSLOD=8.2395;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:79,1:80:99:0,223,2856:60" "0|0:30,0:30:60:0,60,764:60" "0|1:40,44:84:99:1044,0,1007:60"
+14 56951735 rs1189276 G A 6939.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=3.878;DB;DP=235;Dels=0.00;FS=9.373;HaplotypeScore=0.9063;MLEAC=5;MLEAF=0.833;MQ=59.52;MQ0=0;MQRankSum=-0.550;QD=29.53;ReadPosRankSum=1.104;SB=-3.438e+03;VQSLOD=8.7592;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:1,92:93:99:3558,274,0:127" "1|1:0,60:60:99:2120,165,0:127" "1|0:40,42:82:99:1261,0,1194:127"
+2 155726628 . T G 1351.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=0.207;DP=193;Dels=0.00;FS=9.246;HaplotypeScore=0.5220;MLEAC=6;MLEAF=1.00;MQ=16.17;MQ0=87;MQRankSum=2.396;QD=7.00;ReadPosRankSum=1.069;SB=-4.420e+02;VQSLOD=-2.7874;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:3,56:59:60:591,60,0:27" "1|1:8,49:57:27:245,27,0:27" "1|1:12,65:77:57:553,57,0:27"
+5 49438828 rs137880658 G A 424.24 VQSRTrancheSNP99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-4.376;DB;DP=748;DS;Dels=0.00;FS=7.184;HaplotypeScore=20.6618;MLEAC=1;MLEAF=0.167;MQ=19.63;MQ0=158;MQRankSum=3.819;QD=1.70;ReadPosRankSum=1.191;SB=-2.220e+02;VQSLOD=-98.2155;culprit=DP GT:AD:DP:GQ:PL:TP "0|0:249,0:249:99:0,555,4848:127" "0|1:204,46:250:99:459,0,2894:127" "0|0:249,0:249:99:0,480,4326:127"
+9 98491693 rs12337935 C A 1474.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.098;DB;DP=97;Dels=0.00;FS=14.282;HaplotypeScore=1.7726;MLEAC=4;MLEAF=0.667;MQ=58.64;MQ0=0;MQRankSum=-0.224;QD=15.20;ReadPosRankSum=1.166;SB=-6.430e+02;VQSLOD=5.7986;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:14,12:26:99:348,0,352:63" "1|1:0,28:29:63:781,63,0:63" "0|1:17,25:42:99:387,0,364:63"
+8 140651779 rs1469039 G A 1879.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.189;DB;DP=145;Dels=0.00;FS=0.000;HaplotypeScore=1.7695;MLEAC=3;MLEAF=0.500;MQ=58.39;MQ0=0;MQRankSum=0.745;QD=12.96;ReadPosRankSum=-0.159;SB=-9.360e+02;VQSLOD=9.0059;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:23,24:47:99:612,0,740:127" "0/1:21,31:52:99:684,0,478:127" "0/1:20,26:46:99:622,0,367:127"
+3 197056886 rs7612900 G A 7880.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=0.6106;MLEAC=6;MLEAF=1.00;MQ=59.18;MQ0=0;QD=34.41;SB=-3.459e+03;VQSLOD=11.8130;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,75:75:99:2786,214,0:127" "1|1:0,81:81:99:2598,202,0:127" "1|1:0,73:73:99:2496,193,0:127"
+7 101161506 rs2158739 C T 4522.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.698;DB;DP=172;Dels=0.00;FS=4.280;HaplotypeScore=1.5077;MLEAC=5;MLEAF=0.833;MQ=58.18;MQ0=0;MQRankSum=-0.295;QD=26.29;ReadPosRankSum=0.974;SB=-2.287e+03;VQSLOD=8.2831;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,72:73:99:2443,202,0:110" "1|0:23,26:50:99:711,0,586:110" "1|1:0,48:49:99:1368,111,0:110"
+2 85513238 rs62162679 C T 742.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.162;DB;DP=137;Dels=0.00;FS=4.474;HaplotypeScore=1.3905;MLEAC=2;MLEAF=0.333;MQ=57.50;MQ0=0;MQRankSum=0.479;QD=7.57;ReadPosRankSum=-0.272;SB=-5.520e+02;VQSLOD=7.1288;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:39,0:39:99:0,105,1267:104" "0|1:23,23:47:99:430,0,551:104" "0|1:31,20:51:99:351,0,633:104"
+X 4712340 rs5915814 C A 2233.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.784;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.4434;MLEAC=2;MLEAF=0.333;MQ=59.50;MQ0=0;MQRankSum=-1.782;QD=15.73;ReadPosRankSum=0.359;SB=-1.240e+03;VQSLOD=8.3937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:32,37:69:99:1114,0,859:81" "0|0:34,0:34:81:0,81,948:81" "1|0:32,41:73:99:1158,0,575:81"
+22 17351507 rs5748687 G A 4244.01 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=-0.224;DB;DP=261;Dels=0.00;FS=0.710;HaplotypeScore=1.7170;MLEAC=5;MLEAF=0.833;MQ=28.84;MQ0=57;MQRankSum=-7.852;QD=16.26;ReadPosRankSum=-1.243;SB=-2.174e+03;VQSLOD=-1.7101;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,92:92:99:1529,141,0:127" "1|0:34,49:83:99:727,0,1065:127" "1|1:0,86:86:99:1988,180,0:127"
+6 120734422 rs62424426 T C 1091.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.268;DB;DP=208;Dels=0.00;FS=4.347;HaplotypeScore=0.7034;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=-0.188;QD=14.36;ReadPosRankSum=-0.149;SB=-5.560e+02;VQSLOD=8.6529;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:70,1:71:99:0,205,2692:127" "0|0:61,0:61:99:0,175,2298:127" "0|1:39,37:76:99:1126,0,1140:127"
+5 10958957 rs852590 T C 8430.01 PASS AC=6;AF=1.00;AN=6;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=1.8272;MLEAC=6;MLEAF=1.00;MQ=59.31;MQ0=0;QD=34.69;SB=-4.118e+03;VQSLOD=10.8702;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:1,96:97:99:3594,277,0:127" "1|1:1,73:74:99:2318,181,0:127" "1|1:0,72:72:99:2518,196,0:127"
+11 65339346 rs1194104 C T 1804.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.465;DB;DP=189;Dels=0.00;FS=8.432;HaplotypeScore=2.2718;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=-0.120;QD=13.67;ReadPosRankSum=-0.306;SB=-1.061e+03;VQSLOD=7.9509;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:57,0:57:99:0,157,2050:127" "0|1:30,35:65:99:781,0,822:127" "0|1:23,44:67:99:1062,0,690:127"
+1 80481528 rs61774278 G C 1775.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.614;DB;DP=168;Dels=0.00;FS=8.292;HaplotypeScore=2.0470;MLEAC=3;MLEAF=0.500;MQ=54.28;MQ0=0;MQRankSum=-0.052;QD=16.75;ReadPosRankSum=1.544;SB=-1.133e+03;VQSLOD=4.7735;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:35,26:61:99:767,0,778:80" "0|0:62,0:62:84:0,84,1046:80" "1|1:0,45:45:84:1053,84,0:80"
+12 90856710 rs825945 T C 1096.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.342;DB;DP=193;Dels=0.00;FS=2.164;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=2.071;QD=9.70;ReadPosRankSum=-1.697;SB=-5.710e+02;VQSLOD=7.3118;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:80,0:80:99:0,232,3042:127" "0|1:30,21:51:99:511,0,921:127" "0|1:36,26:62:99:624,0,1085:127"
+7 12502849 rs848025 C G 4109.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.809;DB;DP=220;Dels=0.00;FS=1.141;HaplotypeScore=1.8049;MLEAC=4;MLEAF=0.667;MQ=59.56;MQ0=0;MQRankSum=0.625;QD=18.68;ReadPosRankSum=-0.019;SB=-1.989e+03;VQSLOD=8.7123;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:47,45:92:99:1216,0,1501:127" "1|1:0,71:71:99:2145,184,0:127" "0|1:27,30:57:99:748,0,743:127"
+12 39118960 rs79977305 G A 1330.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.307;DB;DP=263;Dels=0.00;FS=0.597;HaplotypeScore=1.4583;MLEAC=1;MLEAF=0.167;MQ=58.83;MQ0=0;MQRankSum=1.925;QD=13.57;ReadPosRankSum=-0.548;SB=-7.360e+02;VQSLOD=7.3733;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,241,2869:127" "0|0:84,0:84:99:0,229,2712:127" "0|1:51,47:98:99:1365,0,1343:127"
+1 47818917 rs12749507 A G 1285.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.707;DB;DP=252;Dels=0.00;FS=2.139;HaplotypeScore=0.6661;MLEAC=1;MLEAF=0.167;MQ=59.83;MQ0=0;MQRankSum=-0.467;QD=13.39;ReadPosRankSum=0.535;SB=-6.730e+02;VQSLOD=9.2738;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,241,3171:127" "0|1:53,42:96:99:1320,0,1615:127" "0|0:75,0:75:99:0,217,2762:127"
+1 186656152 rs4422959 G A 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=7.230;DB;DP=270;Dels=0.00;FS=7.290;HaplotypeScore=1.1750;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=0.399;QD=17.21;ReadPosRankSum=-0.869;SB=-6.320e+02;VQSLOD=7.6734;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:99,0:99:99:0,283,3341:127" "0|0:93,0:93:99:0,256,3022:127" "0|1:33,45:78:99:1377,0,917:127"
+5 80900719 rs2917540 G T 4938.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.261;DB;DP=240;Dels=0.00;FS=0.489;HaplotypeScore=0.5959;MLEAC=4;MLEAF=0.667;MQ=59.63;MQ0=0;MQRankSum=-2.115;QD=20.58;ReadPosRankSum=0.288;SB=-2.548e+03;VQSLOD=8.4417;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:52,40:92:99:1207,0,1768:127" "0|1:37,33:70:99:960,0,1205:127" "1|1:0,78:78:99:2771,211,0:127"
+8 56608897 rs57623198 C T 1911.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.515;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1327;MLEAC=2;MLEAF=0.333;MQ=59.80;MQ0=0;MQRankSum=0.336;QD=12.66;ReadPosRankSum=-2.326;SB=-9.730e+02;VQSLOD=8.5587;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:78,0:78:99:0,229,2989:127" "0|1:44,30:74:99:897,0,1444:127" "0|1:44,33:77:99:1053,0,1400:127"
+11 132780959 rs61906922 C T 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.221;DB;DP=263;Dels=0.00;FS=0.601;HaplotypeScore=1.8444;MLEAC=1;MLEAF=0.167;MQ=59.58;MQ0=0;MQRankSum=0.997;QD=15.25;ReadPosRankSum=-0.746;SB=-6.890e+02;VQSLOD=8.8133;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "0|0:87,0:87:99:0,250,2877:127" "0|0:87,0:88:99:0,253,3009:127" "0|1:43,45:88:99:1377,0,1138:127"
+11 86061661 rs11825046 T C 6014.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.250;DB;DP=282;Dels=0.00;FS=0.960;HaplotypeScore=1.6440;MLEAC=4;MLEAF=0.667;MQ=59.57;MQ0=0;MQRankSum=1.057;QD=21.33;ReadPosRankSum=-1.763;SB=-3.081e+03;VQSLOD=7.3485;culprit=DP GT:AD:DP:GQ:PL:TP "1|0:54,49:103:99:1498,0,1848:127" "1|1:0,83:83:99:2924,223,0:127" "0|1:44,52:96:99:1592,0,1380:127"
+9 25201692 rs9408058 C T 8643.01 PASS AC=6;AF=1.00;AN=6;DB;DP=245;Dels=0.00;FS=0.000;HaplotypeScore=0.8982;MLEAC=6;MLEAF=1.00;MQ=59.13;MQ0=0;QD=35.28;SB=-4.398e+03;VQSLOD=12.1738;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,89:89:99:3312,256,0:127" "1|1:0,81:81:99:2771,223,0:127" "1|1:0,75:75:99:2560,202,0:127"
+5 132377304 rs72801439 A T 858.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.113;DB;DP=219;Dels=0.00;FS=10.632;HaplotypeScore=0.6638;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.881;QD=11.29;ReadPosRankSum=0.435;SB=-3.050e+02;VQSLOD=7.6837;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:67,0:67:99:0,163,2149:127" "0|1:43,33:76:99:893,0,1280:127" "0|0:76,0:76:99:0,199,2553:127"
+8 78181000 rs1563030 A G 5178.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.030;DB;DP=192;Dels=0.00;FS=4.675;HaplotypeScore=2.9473;MLEAC=5;MLEAF=0.833;MQ=59.62;MQ0=0;MQRankSum=-0.467;QD=26.97;ReadPosRankSum=-0.855;SB=-2.617e+03;VQSLOD=7.3445;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,59:59:99:1954,150,0:127" "1|0:32,37:70:99:1198,0,888:127" "1|1:0,63:63:99:2026,156,0:127"
+12 21328424 rs4149040 G C 2565.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.888;DB;DP=252;Dels=0.00;FS=9.753;HaplotypeScore=0.6082;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=1.166;QD=15.18;ReadPosRankSum=0.966;SB=-1.181e+03;VQSLOD=7.5539;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:40,49:89:99:1534,0,1308:127" "0|0:83,0:83:99:0,241,3117:127" "1|0:45,35:80:99:1070,0,1402:127"
+4 141514835 rs55984232 C T 1645.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=7.144;DB;DP=191;Dels=0.00;FS=2.756;HaplotypeScore=1.0735;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.726;QD=13.06;ReadPosRankSum=-0.789;SB=-8.550e+02;VQSLOD=8.9425;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:32,28:60:99:913,0,820:127" "0|0:65,0:65:99:0,156,1886:127" "1|0:34,32:66:99:771,0,750:127"
+2 198567638 rs12619333 C G 2201.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.028;DB;DP=240;Dels=0.00;FS=4.757;HaplotypeScore=1.3741;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=1;MQRankSum=0.131;QD=13.42;ReadPosRankSum=0.123;SB=-1.051e+03;VQSLOD=8.1261;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:38,45:84:99:1298,0,1249:127" "1|0:45,35:80:99:942,0,1493:127" "0|0:76,0:76:99:0,196,2542:127"
+12 101460237 rs7965836 C T 3485.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.070;DB;DP=247;Dels=0.00;FS=2.895;HaplotypeScore=0.6556;MLEAC=3;MLEAF=0.500;MQ=59.83;MQ0=0;MQRankSum=-0.655;QD=14.11;ReadPosRankSum=-0.983;SB=-1.581e+03;VQSLOD=8.4872;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:40,43:83:99:1287,0,1179:127" "0/1:44,36:80:99:1068,0,1363:127" "0/1:43,41:84:99:1130,0,1321:127"
+11 55040918 rs187118824 A T 1019.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.079;DB;DP=65;Dels=0.02;FS=12.723;HaplotypeScore=0.9771;MLEAC=2;MLEAF=0.333;MQ=56.64;MQ0=1;MQRankSum=0.323;QD=25.48;ReadPosRankSum=0.873;SB=-2.060e+01;VQSLOD=4.4200;culprit=DP GT:AD:DP:GQ:PL:TP "0|1:2,9:11:48:325,0,48:50" "0|0:24,1:25:63:0,63,833:50" "1|0:6,22:28:51:733,0,51:50"
+21 18433036 rs969905 A G 781.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.610;DB;DP=229;Dels=0.00;FS=2.230;HaplotypeScore=1.2866;MLEAC=1;MLEAF=0.167;MQ=59.55;MQ0=0;MQRankSum=0.300;QD=10.15;ReadPosRankSum=-0.384;SB=-4.990e+02;VQSLOD=9.5768;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:62,0:63:99:0,181,2380:127" "0|0:89,0:89:99:0,244,3177:127" "0|1:39,38:77:99:816,0,1256:127"
+8 102355800 rs10103956 G T 1756.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.927;DB;DP=189;Dels=0.00;FS=5.921;HaplotypeScore=1.5445;MLEAC=2;MLEAF=0.333;MQ=59.66;MQ0=0;MQRankSum=-0.420;QD=13.41;ReadPosRankSum=-0.019;SB=-5.470e+02;VQSLOD=8.1563;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:32,38:70:99:1078,0,999:127" "1|0:35,26:61:99:717,0,1103:127" "0|0:57,0:58:99:0,156,2011:127"
+5 70856663 rs157045 T C 2040.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.809;DB;DP=234;Dels=0.00;FS=1.824;HaplotypeScore=1.0544;MLEAC=2;MLEAF=0.333;MQ=58.65;MQ0=0;MQRankSum=0.989;QD=13.16;ReadPosRankSum=0.719;SB=-8.820e+02;VQSLOD=7.3513;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:44,41:85:99:1087,0,1448:127" "1|0:28,42:70:99:992,0,789:127" "0|0:79,0:79:99:0,181,2342:127"
+19 20782710 rs10413568 T C 6304.01 PASS AC=6;AF=1.00;AN=6;DB;DP=203;Dels=0.00;FS=0.000;HaplotypeScore=0.6919;MLEAC=6;MLEAF=1.00;MQ=59.56;MQ0=0;QD=31.05;SB=-2.367e+03;VQSLOD=10.7708;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,74:74:99:2375,214,0:127" "1|1:0,80:80:99:2480,217,0:127" "1|1:0,49:49:99:1449,129,0:127"
+22 50309915 rs9616205 A T 1712.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.936;DB;DP=162;Dels=0.00;FS=2.857;HaplotypeScore=2.1490;MLEAC=2;MLEAF=0.333;MQ=56.21;MQ0=5;MQRankSum=0.892;QD=13.92;ReadPosRankSum=-1.040;SB=-9.940e+02;VQSLOD=6.2766;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:39,33:72:99:777,0,994:78" "0|0:39,0:39:78:0,78,1010:78" "1|0:16,35:51:99:974,0,257:78"
+8 8974322 rs28440961 G A 1682.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.716;DB;DP=190;Dels=0.00;FS=0.579;HaplotypeScore=1.5434;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=-0.652;QD=12.65;ReadPosRankSum=0.746;SB=-7.040e+02;VQSLOD=9.3708;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:32,32:64:99:790,0,1002:125" "1|0:33,36:69:99:931,0,866:125" "0|0:57,0:57:99:0,126,1622:125"
+6 131725921 . G A 64.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=3.650;DP=182;Dels=0.00;FS=3.535;HaplotypeScore=2.2441;MLEAC=1;MLEAF=0.167;MQ=50.85;MQ0=1;MQRankSum=-6.039;QD=1.31;ReadPosRankSum=-1.757;SB=-4.901e+01;VQSLOD=-0.6667;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:59,0:60:99:0,168,1897:98" "0|1:33,16:49:99:99,0,790:98" "0|0:73,0:73:99:0,156,1824:98"
+10 65355538 rs10733794 A G 2464.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.392;DB;DP=193;Dels=0.00;FS=7.473;HaplotypeScore=2.5434;MLEAC=3;MLEAF=0.500;MQ=58.06;MQ0=2;MQRankSum=0.999;QD=18.96;ReadPosRankSum=-1.229;SB=-1.065e+03;VQSLOD=6.3934;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:33,32:65:99:830,0,1039:127" "1|1:1,64:65:99:1679,153,0:127" "0|0:63,0:63:99:0,159,2042:127"
+11 44985620 rs7106313 C T 338.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.185;DB;DP=162;Dels=0.00;FS=4.840;HaplotypeScore=2.0046;MLEAC=1;MLEAF=0.167;MQ=56.94;MQ0=0;MQRankSum=2.019;QD=8.67;ReadPosRankSum=0.983;SB=-2.190e+02;VQSLOD=6.6624;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:79,0:80:99:0,174,2084:72" "0|0:43,0:43:72:0,72,877:72" "0|1:20,18:39:99:373,0,365:72"
+1 90146546 rs7512447 C T 8721.01 PASS AC=6;AF=1.00;AN=6;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.40;MQ0=0;QD=36.19;SB=-4.084e+03;VQSLOD=11.3217;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,71:71:99:2599,196,0:127" "1|1:0,86:86:99:3042,235,0:127" "1|1:0,84:84:99:3080,238,0:127"
+16 88914235 rs12932521 C T 329.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.978;DB;DP=114;Dels=0.00;FS=1.931;HaplotypeScore=0.9402;MLEAC=1;MLEAF=0.167;MQ=58.60;MQ0=0;MQRankSum=0.854;QD=7.84;ReadPosRankSum=-0.339;SB=-2.970e+02;VQSLOD=8.1036;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:43,0:43:99:0,102,1192:39" "0|0:29,0:29:39:0,39,468:39" "0|1:15,26:42:99:364,0,105:39"
+13 28463938 rs954750 C T 2740.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.206;DB;DP=242;Dels=0.00;FS=0.000;HaplotypeScore=4.0078;MLEAC=2;MLEAF=0.333;MQ=59.46;MQ0=0;MQRankSum=0.880;QD=16.61;ReadPosRankSum=-0.617;SB=-1.312e+03;VQSLOD=6.7692;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:40,43:83:99:1362,0,1242:127" "1|0:35,47:82:99:1417,0,1010:127" "0|0:76,0:77:99:0,205,2635:127"
+17 44809197 rs116187585 A G 8703.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-0.554;DB;DP=254;Dels=0.00;FS=3.487;HaplotypeScore=4.0582;MLEAC=6;MLEAF=1.00;MQ=59.58;MQ0=0;MQRankSum=1.677;QD=34.26;ReadPosRankSum=1.483;SB=-4.228e+03;VQSLOD=6.6144;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,96:97:99:3470,268,0:127" "1|1:0,82:84:99:2846,220,0:127" "1|1:0,73:73:99:2387,184,0:127"
+6 26687649 . G C 1654.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=9.718;DP=410;Dels=0.00;FS=5.973;HaplotypeScore=5.0786;MLEAC=2;MLEAF=0.333;MQ=28.19;MQ0=32;MQRankSum=0.048;QD=6.17;ReadPosRankSum=0.408;SB=-5.110e+02;VQSLOD=-8.7346;culprit=DP GT:AD:DP:GQ:PL:TP "0|1:117,49:166:99:1013,0,2495:127" "0|0:141,1:142:99:0,244,2576:127" "1|0:70,32:102:99:680,0,1048:127"
+5 112750674 rs9716322 A C 598.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-0.293;DB;DP=199;Dels=0.00;FS=2.948;HaplotypeScore=0.3328;MLEAC=1;MLEAF=0.167;MQ=45.61;MQ0=2;MQRankSum=-2.398;QD=12.21;ReadPosRankSum=1.159;SB=-8.101e+01;VQSLOD=2.7717;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:81,0:81:99:0,196,2534:127" "0|1:23,26:49:99:633,0,479:127" "0|0:68,1:69:99:0,174,2191:127"
+9 138617823 rs55724592 C T 53.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.380;DB;DP=72;Dels=0.00;FS=8.078;HaplotypeScore=1.0225;MLEAC=1;MLEAF=0.167;MQ=58.90;MQ0=0;MQRankSum=0.851;QD=2.66;ReadPosRankSum=-0.344;SB=-9.096e+01;VQSLOD=4.2652;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:20,0:20:48:0,48,580:44" "0|0:32,0:32:48:0,48,577:44" "0|1:10,10:20:88:88,0,199:44"
+7 89752110 rs39232 T G 3944.01 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=1.4477;MLEAC=6;MLEAF=1.00;MQ=38.19;MQ0=21;QD=18.26;SB=-2.716e+03;VQSLOD=2.6638;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,70:70:99:1564,132,0:101" "1|1:0,79:79:99:1258,108,0:101" "1|1:0,66:66:99:1122,102,0:101"
+16 11397080 rs1019552 T C 2295.44 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.01;FS=0.000;HaplotypeScore=8.2178;MLEAC=6;MLEAF=1.00;MQ=59.32;MQ0=0;QD=13.58;SB=-2.379e+03;VQSLOD=4.3801;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,71:71:96:1220,96,0:9" "1|1:0,48:48:9:78,9,0:9" "1|1:0,48:48:81:1035,81,0:9"
+2 187694833 rs10191094 T C 1006.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.181;DB;DP=236;Dels=0.00;FS=9.083;HaplotypeScore=2.2688;MLEAC=1;MLEAF=0.167;MQ=59.73;MQ0=0;MQRankSum=-0.218;QD=13.07;ReadPosRankSum=-0.877;SB=-5.830e+02;VQSLOD=7.6003;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:82,0:82:99:0,232,3021:127" "0|0:77,0:77:99:0,217,2790:127" "0|1:33,44:77:99:1041,0,988:127"
+19 3739001 rs56138006 C T 976.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.634;DB;DP=118;Dels=0.00;FS=3.676;HaplotypeScore=1.4356;MLEAC=2;MLEAF=0.333;MQ=58.66;MQ0=0;MQRankSum=0.753;QD=11.22;ReadPosRankSum=1.107;SB=-6.380e+02;VQSLOD=7.4541;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:30,22:52:99:612,0,559:45" "0|0:31,0:31:45:0,45,527:45" "1|0:12,23:35:93:403,0,93:45"
+3 148344553 rs62274102 C A 3191.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.860;DB;DP=232;Dels=0.00;FS=12.061;HaplotypeScore=2.3659;MLEAC=3;MLEAF=0.500;MQ=59.32;MQ0=0;MQRankSum=-0.551;QD=19.58;ReadPosRankSum=2.411;SB=-1.757e+03;VQSLOD=6.2908;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:46,39:85:99:985,0,1339:127" "1|1:0,78:78:99:2251,175,0:127" "0|0:69,0:69:99:0,153,2018:127"
+8 4048009 rs7007410 C T 2713.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.954;DB;DP=197;Dels=0.00;FS=2.483;HaplotypeScore=0.7125;MLEAC=3;MLEAF=0.500;MQ=57.03;MQ0=0;MQRankSum=0.882;QD=13.77;ReadPosRankSum=-0.496;SB=-1.406e+03;VQSLOD=6.5035;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:38,30:68:99:847,0,1168:127" "0/1:30,30:60:99:916,0,921:127" "0/1:32,36:69:99:989,0,882:127"
+4 161180100 rs167176 G C 2497.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.811;DB;DP=191;Dels=0.00;FS=5.370;HaplotypeScore=0.7812;MLEAC=3;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=-0.584;QD=13.07;ReadPosRankSum=0.756;SB=-1.206e+03;VQSLOD=8.0012;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:32,36:68:99:1100,0,895:127" "0/1:41,35:76:99:987,0,1028:127" "0/1:29,17:47:99:449,0,820:127"
+4 184811263 rs2871379 A G 6376.01 PASS AC=6;AF=1.00;AN=6;DB;DP=211;Dels=0.00;FS=0.000;HaplotypeScore=0.5084;MLEAC=6;MLEAF=1.00;MQ=58.38;MQ0=0;QD=30.22;SB=-3.472e+03;VQSLOD=10.4879;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,78:78:99:2539,199,0:127" "1|1:0,67:67:99:2072,165,0:127" "1|1:0,66:66:99:1765,135,0:127"
+7 48862174 rs965346 A G 877.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.250;DB;DP=194;Dels=0.00;FS=6.112;HaplotypeScore=0.6489;MLEAC=1;MLEAF=0.167;MQ=57.54;MQ0=0;MQRankSum=2.058;QD=16.25;ReadPosRankSum=-1.204;SB=-4.040e+02;VQSLOD=6.2372;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:82,0:82:99:0,232,3007:127" "0|0:58,0:58:99:0,160,2067:127" "0|1:22,32:54:99:912,0,686:127"
+3 108612711 rs2399252 T A 3430.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.783;DB;DP=239;Dels=0.00;FS=4.436;HaplotypeScore=0.6593;MLEAC=3;MLEAF=0.500;MQ=59.64;MQ0=0;MQRankSum=-0.269;QD=14.35;ReadPosRankSum=-0.701;SB=-1.733e+03;VQSLOD=8.5079;culprit=MQ GT:AD:DP:GQ:PL:TP "0/1:48,34:82:99:1066,0,1620:127" "0/1:45,43:88:99:1370,0,1452:127" "0/1:36,32:69:99:994,0,1128:127"
+4 169085855 rs2251558 A G 1161.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.721;DB;DP=244;Dels=0.00;FS=5.247;HaplotypeScore=0.4893;MLEAC=1;MLEAF=0.167;MQ=59.91;MQ0=0;MQRankSum=1.574;QD=13.99;ReadPosRankSum=0.454;SB=-5.590e+02;VQSLOD=7.4222;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:77,0:77:99:0,226,2915:127" "0|1:43,40:83:99:1196,0,1294:127" "0|0:84,0:84:99:0,232,2950:127"
+13 92742124 rs2148446 G A 1884.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.340;DB;DP=213;Dels=0.00;FS=0.000;HaplotypeScore=0.3156;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=0;MQRankSum=-2.935;QD=12.99;ReadPosRankSum=-0.579;SB=-9.540e+02;VQSLOD=7.2833;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "0|1:38,38:76:99:1130,0,1190:127" "0|0:68,0:68:99:0,190,2454:127" "1|0:38,31:69:99:793,0,1094:127"
+19 54644879 rs36636 G A 1790.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.505;DB;DP=187;Dels=0.00;FS=4.408;HaplotypeScore=1.5043;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-1.266;QD=13.88;ReadPosRankSum=-1.226;SB=-1.081e+03;VQSLOD=7.8045;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:30,27:57:99:811,0,726:127" "1|0:31,41:72:99:1018,0,730:127" "0|0:58,0:58:99:0,144,1815:127"
+4 12652343 rs13114660 G T 610.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.176;DB;DP=127;Dels=0.00;FS=0.000;HaplotypeScore=1.5681;MLEAC=1;MLEAF=0.167;MQ=58.86;MQ0=0;MQRankSum=-0.468;QD=16.06;ReadPosRankSum=1.246;SB=-3.060e+02;VQSLOD=7.8400;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:43,0:43:99:0,120,1561:102" "0|1:15,23:38:99:645,0,407:102" "0|0:44,1:46:99:0,103,1539:102"
+21 42833227 rs460904 T C 3179.23 PASS AC=6;AF=1.00;AN=6;DB;DP=155;Dels=0.00;FS=0.000;HaplotypeScore=2.4559;MLEAC=6;MLEAF=1.00;MQ=58.18;MQ0=0;QD=20.51;SB=-2.173e+03;VQSLOD=7.7042;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,60:60:90:1085,90,0:74" "1|1:0,54:54:96:1172,96,0:74" "1|1:0,41:41:75:960,75,0:74"
+3 26960556 rs4422260 T C 878.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-2.140;DB;DP=220;Dels=0.00;FS=1.108;HaplotypeScore=1.7204;MLEAC=2;MLEAF=0.333;MQ=41.87;MQ0=3;MQRankSum=-6.679;QD=5.97;ReadPosRankSum=-0.031;SB=-4.600e+02;VQSLOD=0.7170;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:73,0:73:99:0,208,2660:127" "0|1:32,48:80:99:759,0,915:127" "0|1:37,30:67:99:158,0,1092:127"
+15 53677501 . T G 770.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-8.969;DP=210;Dels=0.00;FS=347.467;HaplotypeScore=2.0911;MLEAC=3;MLEAF=0.500;MQ=58.31;MQ0=0;MQRankSum=0.438;QD=3.67;ReadPosRankSum=-6.409;SB=-5.499e-03;VQSLOD=-307.0964;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:59,20:79:94:94,0,1389:94" "0/1:41,31:72:99:438,0,721:94" "0/1:37,21:59:99:277,0,521:94"
+7 4683258 rs62450857 G A 1127.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.991;DB;DP=191;Dels=0.00;FS=3.236;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=57.16;MQ0=0;MQRankSum=1.297;QD=14.09;ReadPosRankSum=0.469;SB=-4.730e+02;VQSLOD=6.6182;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:66,0:66:99:0,196,2495:120" "0|1:38,42:80:99:1162,0,1016:120" "0|0:45,0:45:99:0,120,1531:120"
+22 43356130 rs6519353 A C 3526.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.809;DB;DP=228;Dels=0.00;FS=6.336;HaplotypeScore=1.6306;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.146;QD=22.46;ReadPosRankSum=2.034;SB=-1.954e+03;VQSLOD=8.5009;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:40,41:81:99:1020,0,1222:127" "1|1:0,76:76:99:2506,196,0:127" "0|0:71,0:71:99:0,165,2091:127"
+19 28150587 rs4404191 A G 7419.01 PASS AC=6;AF=1.00;AN=6;DB;DP=209;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=59.61;MQ0=0;QD=35.50;SB=-3.717e+03;VQSLOD=11.9901;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,70:70:99:2584,202,0:127" "1|1:0,74:74:99:2509,193,0:127" "1|1:0,65:65:99:2326,181,0:127"
+13 83670546 . G A 169.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.301;DP=178;Dels=0.00;FS=0.000;HaplotypeScore=36.5059;MLEAC=2;MLEAF=0.333;MQ=42.20;MQ0=11;MQRankSum=-6.654;QD=1.38;ReadPosRankSum=-0.761;SB=-1.340e+02;VQSLOD=-20.4053;culprit=QD GT:AD:DP:GQ:PL:TP "0|1:37,16:53:99:139,0,523:90" "0|0:51,4:55:91:0,91,1393:90" "1|0:58,12:70:69:69,0,1214:90"
+3 8399330 rs6770171 G A 6816.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.689;DB;DP=253;Dels=0.00;FS=0.637;HaplotypeScore=1.2788;MLEAC=5;MLEAF=0.833;MQ=58.42;MQ0=0;MQRankSum=0.607;QD=26.94;ReadPosRankSum=-0.503;SB=-3.369e+03;VQSLOD=8.0141;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,106:106:99:3784,292,0:127" "1|1:0,72:72:99:2164,169,0:127" "1|0:42,33:75:99:868,0,1146:127"
+10 4588547 rs313427 C T 1985.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.695;DB;DP=204;Dels=0.00;FS=1.813;HaplotypeScore=0.6137;MLEAC=2;MLEAF=0.333;MQ=59.73;MQ0=0;MQRankSum=0.241;QD=14.18;ReadPosRankSum=0.717;SB=-1.082e+03;VQSLOD=9.7784;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:39,35:74:99:1029,0,1182:127" "1|0:32,34:66:99:995,0,1024:127" "0|0:64,0:64:99:0,175,2242:127"
+1 100763317 rs6681810 G C 5583.01 PASS AC=6;AF=1.00;AN=6;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=3.7201;MLEAC=6;MLEAF=1.00;MQ=58.52;MQ0=0;QD=28.48;SB=-2.737e+03;VQSLOD=7.9151;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,76:77:99:2211,192,0:127" "1|1:0,56:56:99:1593,141,0:127" "1|1:0,62:62:99:1779,156,0:127"
+18 50973169 rs11661305 A G 5320.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=2.753;DB;DP=196;Dels=0.00;FS=2.568;HaplotypeScore=1.1306;MLEAC=5;MLEAF=0.833;MQ=57.73;MQ0=0;MQRankSum=0.246;QD=27.14;ReadPosRankSum=0.186;SB=-2.411e+03;VQSLOD=7.5009;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,74:74:99:2621,202,0:127" "1|0:30,37:67:99:1009,0,842:127" "1|1:0,55:55:99:1690,132,0:127"
+12 12560642 rs10772559 G T 501.28 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=0.747;DB;DP=229;Dels=0.04;FS=17.409;HaplotypeScore=19.6989;MLEAC=4;MLEAF=0.667;MQ=49.37;MQ0=0;MQRankSum=-3.656;QD=2.19;ReadPosRankSum=-5.397;SB=-2.196e+03;VQSLOD=-10.1992;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,66:66:24:273,24,0:24" "1|0:29,45:74:99:148,0,702:24" "1|0:33,46:80:99:122,0,781:24"
+1 195392852 rs2119441 T G 5369.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.284;DB;DP=241;Dels=0.00;FS=3.312;HaplotypeScore=1.8710;MLEAC=4;MLEAF=0.667;MQ=58.35;MQ0=0;MQRankSum=-0.643;QD=22.28;ReadPosRankSum=0.178;SB=-2.332e+03;VQSLOD=7.8524;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:37,42:79:99:1233,0,1145:127" "1|1:0,84:84:99:2741,211,0:127" "0|1:31,47:78:99:1395,0,804:127"
+12 79238948 rs10778234 C T 3719.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.187;DB;DP=241;Dels=0.00;FS=7.073;HaplotypeScore=0.2447;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.381;QD=15.43;ReadPosRankSum=0.579;SB=-1.864e+03;VQSLOD=7.8136;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:42,35:77:99:1049,0,1213:127" "0/1:37,32:69:99:988,0,957:127" "0/1:42,53:95:99:1682,0,1062:127"
+2 228532558 rs6436725 G A 3484.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=7.160;DB;DP=263;Dels=0.00;FS=1.547;HaplotypeScore=4.9679;MLEAC=3;MLEAF=0.500;MQ=58.60;MQ0=0;MQRankSum=1.137;QD=21.91;ReadPosRankSum=-0.416;SB=-1.472e+03;VQSLOD=5.4377;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|1:42,47:89:99:1549,0,932:127" "0|0:104,0:104:99:0,247,2939:127" "1|1:0,69:70:99:1935,156,0:127"
+21 34546711 rs11701692 T C 1030.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.884;DB;DP=152;Dels=0.00;FS=8.325;HaplotypeScore=1.9325;MLEAC=2;MLEAF=0.333;MQ=57.61;MQ0=0;MQRankSum=-0.291;QD=10.51;ReadPosRankSum=0.258;SB=-4.600e+02;VQSLOD=6.4601;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:35,25:61:99:574,0,1137:127" "1|0:19,18:37:99:495,0,498:127" "0|0:54,0:54:99:0,141,1811:127"
+7 69334430 rs917719 C T 1223.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.841;DB;DP=193;Dels=0.00;FS=6.656;HaplotypeScore=0.8147;MLEAC=2;MLEAF=0.333;MQ=59.81;MQ0=0;MQRankSum=1.631;QD=9.63;ReadPosRankSum=1.458;SB=-7.370e+02;VQSLOD=7.0004;culprit=MQ GT:AD:DP:GQ:PL:TP "1|0:38,39:77:99:770,0,1258:127" "1|0:26,24:50:99:492,0,840:127" "0|0:66,0:66:99:0,172,2210:127"
+2 237156689 rs13390270 G A 852.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.150;DB;DP=205;Dels=0.00;FS=0.710;HaplotypeScore=1.7295;MLEAC=1;MLEAF=0.167;MQ=59.06;MQ0=0;MQRankSum=-0.193;QD=11.67;ReadPosRankSum=1.262;SB=-4.790e+02;VQSLOD=8.4962;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:73,0:73:99:0,202,2606:108" "0|1:39,34:73:99:887,0,1027:108" "0|0:59,0:59:99:0,108,1384:108"
+4 103859292 rs7676943 C G 7573.01 PASS AC=6;AF=1.00;AN=6;DB;DP=235;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=58.63;MQ0=0;QD=32.23;SB=-3.953e+03;VQSLOD=10.3945;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:1,95:96:99:3289,256,0:127" "1|1:0,73:73:99:2137,166,0:127" "1|1:0,66:66:99:2147,166,0:127"
+2 167166899 . T A 1064.78 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=0.023;DP=278;Dels=0.00;FS=9.890;HaplotypeScore=0.2774;MLEAC=6;MLEAF=1.00;MQ=10.47;MQ0=239;MQRankSum=1.643;QD=3.83;ReadPosRankSum=0.347;SB=-1.083e-02;VQSLOD=-6.9449;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:174,12:186:36:401,36,0:4" "1|1:37,14:52:39:431,39,0:4" "1|0:31,9:40:3:271,0,3:4"
+6 110345430 rs56272355 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.241;DB;DP=230;Dels=0.00;FS=2.159;HaplotypeScore=1.7615;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-0.200;QD=11.46;ReadPosRankSum=-0.480;SB=-5.580e+02;VQSLOD=8.9824;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:77,0:77:99:0,220,2860:127" "0|0:75,0:76:99:0,184,2321:127" "0|1:35,42:77:99:917,0,926:127"
+5 164600452 rs7711548 C A 588.32 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-3.291;DB;DP=192;Dels=0.02;FS=2.319;HaplotypeScore=32.6662;MLEAC=6;MLEAF=1.00;MQ=57.55;MQ0=0;MQRankSum=1.536;QD=3.06;ReadPosRankSum=-1.533;SB=-2.085e+03;VQSLOD=-1.4325;culprit=QD GT:AD:DP:GQ:PL:TP "1|1:15,52:69:18:155,18,0:15" "1|1:11,55:66:36:296,36,0:15" "1|1:18,36:54:15:175,15,0:15"
+4 132671861 rs6856716 C G 2622.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=3.143;DB;DP=617;DS;Dels=0.00;FS=5.808;HaplotypeScore=34.4109;MLEAC=2;MLEAF=0.333;MQ=24.78;MQ0=42;MQRankSum=3.293;QD=5.89;ReadPosRankSum=-0.736;SB=-1.412e+03;VQSLOD=-77.3455;culprit=DP GT:AD:DP:GQ:PL:TP "0|1:125,98:223:99:1761,0,1486:127" "0|0:171,0:172:99:0,300,2641:127" "1|0:152,70:222:99:900,0,2086:127"
+4 30898977 rs4386561 G A 2449.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.817;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.9382;MLEAC=2;MLEAF=0.333;MQ=58.94;MQ0=0;MQRankSum=0.173;QD=15.70;ReadPosRankSum=1.051;SB=-1.131e+03;VQSLOD=8.3611;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:33,46:79:99:1380,0,944:127" "0|0:75,0:75:99:0,202,2608:127" "1|0:43,34:77:99:1108,0,1335:127"
+6 9408051 rs11751621 C G 5140.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.350;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.6637;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=-0.205;QD=21.33;ReadPosRankSum=-0.033;SB=-2.552e+03;VQSLOD=8.9881;culprit=FS GT:AD:DP:GQ:PL:TP "0|1:42,40:82:99:1156,0,1352:127" "0|1:36,45:81:99:1253,0,1134:127" "1|1:0,78:78:99:2731,214,0:127"
+12 112830546 rs150699511 C A 487.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.014;DB;DP=179;Dels=0.00;FS=0.860;HaplotypeScore=2.3392;MLEAC=1;MLEAF=0.167;MQ=59.16;MQ0=0;MQRankSum=1.141;QD=8.86;ReadPosRankSum=0.950;SB=-2.870e+02;VQSLOD=8.1138;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:62,0:62:99:0,166,2141:127" "0|1:34,21:55:99:522,0,751:127" "0|0:62,0:62:99:0,141,1808:127"
+6 89947117 rs9942462 A G 5019.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.654;DB;DP=181;Dels=0.00;FS=0.000;HaplotypeScore=3.3205;MLEAC=6;MLEAF=1.00;MQ=53.30;MQ0=0;MQRankSum=0.428;QD=27.73;ReadPosRankSum=1.090;SB=-3.151e+03;VQSLOD=5.6763;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|1:0,59:60:99:1715,138,0:92" "1|1:1,55:56:93:1401,93,0:92" "1|1:0,65:65:99:1903,153,0:92"
+1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.669;HaplotypeScore=3.3539;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-0.219;SB=-9.390e+02;VQSLOD=5.5346;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0/1:23,28:51:99:681,0,668:127" "0/1:16,18:34:99:338,0,244:127" "0/1:24,22:46:99:560,0,323:127"
+2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814;DB;DP=189;Dels=0.00;FS=5.611;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.579;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.8071;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:66,0:66:99:0,178,2264:127" "0|1:33,38:71:99:844,0,1024:127" "0|1:26,26:52:99:678,0,719:127"
+20 59978756 rs1892320 T C 3967.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.562;DB;DP=206;Dels=0.00;FS=14.249;HaplotypeScore=1.3838;MLEAC=4;MLEAF=0.667;MQ=59.89;MQ0=0;MQRankSum=-0.289;QD=19.26;ReadPosRankSum=0.221;SB=-2.292e+03;VQSLOD=7.6238;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,72:72:99:2337,181,0:127" "1|0:38,29:67:99:743,0,1180:127" "1|0:31,36:67:99:887,0,873:127"
+GL000212.1 28454 . T C 2248.99 VQSRTrancheSNP99.00to99.90 AC=4;AF=1.00;AN=4;BaseQRankSum=1.691;DP=94;Dels=0.00;FS=3.274;HaplotypeScore=0.9622;MLEAC=4;MLEAF=1.00;MQ=36.99;MQ0=7;MQRankSum=-0.428;QD=24.18;ReadPosRankSum=-1.284;SB=-1.053e+03;VQSLOD=1.2364;culprit=MQ GT:AD:DP:GQ:PL:TP "1|1:0,29:29:63:755,63,0:63" ./. "1|1:1,63:64:99:1530,135,0:63"
+14 96490389 rs72702859 C G 3394.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.529;DB;DP=264;Dels=0.00;FS=2.746;HaplotypeScore=3.1300;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=-1.258;QD=18.25;ReadPosRankSum=-0.961;SB=-1.966e+03;VQSLOD=6.3356;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "1|0:34,52:86:99:1358,0,886:127" "1|1:0,100:100:99:2036,180,0:127" "0|0:78,0:78:99:0,184,2393:127"
+1 165431906 rs7528908 G T 2381.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.008;DB;DP=259;Dels=0.00;FS=4.727;HaplotypeScore=0.9857;MLEAC=2;MLEAF=0.333;MQ=59.75;MQ0=0;MQRankSum=0.916;QD=14.34;ReadPosRankSum=-0.907;SB=-9.050e+02;VQSLOD=8.1270;culprit=MQ GT:AD:DP:GQ:PL:TP "0|1:48,40:88:99:1142,0,1428:127" "0|0:93,0:93:99:0,259,3166:127" "1|0:38,40:78:99:1278,0,1075:127"
+9 89010476 rs164937 T C 736.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-3.977;DB;DP=216;Dels=0.00;FS=1.481;HaplotypeScore=1.0649;MLEAC=1;MLEAF=0.167;MQ=39.79;MQ0=9;MQRankSum=-3.028;QD=9.56;ReadPosRankSum=0.542;SB=-4.240e+02;VQSLOD=2.0772;culprit=MQ GT:AD:DP:GQ:PL:TP "0|0:66,0:66:99:0,174,2097:127" "0|1:40,37:77:99:771,0,876:127" "0|0:73,0:73:99:0,183,2147:127"
+3 189981901 . A G 179.25 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=2.258;DP=274;Dels=0.00;FS=73.736;HaplotypeScore=1.8333;MLEAC=1;MLEAF=0.167;MQ=54.08;MQ0=6;MQRankSum=-2.651;QD=1.97;ReadPosRankSum=-6.101;SB=-6.400e+01;VQSLOD=-18.1951;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|0:64,27:91:99:214,0,679:51" "1|0:78,10:88:0:0,21,1685:51" "0|0:86,9:95:74:0,74,1891:51"
+GL000214.1 115144 . C T 102.07 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=0.854;DP=103;Dels=0.00;FS=14.185;HaplotypeScore=14.9478;MLEAC=2;MLEAF=0.333;MQ=38.45;MQ0=1;MQRankSum=-2.314;QD=1.05;ReadPosRankSum=1.480;SB=-6.153e+01;VQSLOD=-14.7562;culprit=QD GT:AD:DP:GQ:PL:TP "0|0:6,0:6:3:0,3,22:4" "0|1:9,11:20:16:81,0,16:4" "0|1:63,14:77:58:58,0,908:4"
+9 44998848 . C G 254.43 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=2.203;DP=193;Dels=0.00;FS=10.822;HaplotypeScore=0.2447;MLEAC=5;MLEAF=0.833;MQ=6.48;MQ0=163;MQRankSum=-1.206;QD=1.32;ReadPosRankSum=0.790;SB=-1.372e+02;VQSLOD=-6.6319;culprit=QD GT:AD:DP:GQ:PL:TP "1|0:39,27:66:23:132,0,23:8" "1|1:36,16:52:15:118,15,0:8" "0|1:53,22:75:1:45,6,0:8"
+8 42044954 rs1058720 G A 2760.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.313;DB;DP=157;Dels=0.00;FS=0.000;HaplotypeScore=2.0979;MLEAC=4;MLEAF=0.667;MQ=58.82;MQ0=0;MQRankSum=-2.021;QD=17.58;ReadPosRankSum=-0.462;SB=-1.377e+03;VQSLOD=7.5777;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,56:56:99:1820,147,0:127" "1|0:24,27:51:99:555,0,233:127" "1|0:26,24:50:99:427,0,458:127"
+3 179020937 rs13082816 C T 1116.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.603;DB;DP=82;Dels=0.00;FS=0.000;HaplotypeScore=0.6358;MLEAC=4;MLEAF=0.667;MQ=54.57;MQ0=1;MQRankSum=0.374;QD=13.61;ReadPosRankSum=-0.037;SB=-2.010e+02;VQSLOD=6.0907;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:13,13:26:99:388,0,178:36" "1|1:0,24:24:36:442,36,0:36" "0|1:13,19:32:99:328,0,179:36"
+10 38560911 rs80189231 T A 1072.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.103;DB;DP=356;Dels=0.00;FS=12.038;HaplotypeScore=5.4015;MLEAC=3;MLEAF=0.500;MQ=49.74;MQ0=6;MQRankSum=-2.686;QD=3.01;ReadPosRankSum=0.797;SB=-1.690e+02;VQSLOD=-3.5129;culprit=QD GT:AD:DP:GQ:PL:TP "0/1:109,26:135:99:389,0,2879:127" "0/1:84,27:111:99:539,0,2214:127" "0/1:93,17:110:99:183,0,2277:127"
+18 10010426 rs4797393 T C 4197.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.425;DB;DP=210;Dels=0.00;FS=1.132;HaplotypeScore=1.2660;MLEAC=4;MLEAF=0.667;MQ=59.43;MQ0=0;MQRankSum=-2.916;QD=19.99;ReadPosRankSum=0.379;SB=-2.001e+03;VQSLOD=7.0312;culprit=MQRankSum GT:AD:DP:GQ:PL:TP "1|1:0,65:65:99:2247,181,0:127" "1|0:35,39:75:99:1170,0,967:127" "1|0:41,29:70:99:780,0,1052:127"
+1 156248265 rs12038203 C T 643.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.311;DB;DP=145;Dels=0.00;FS=4.568;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.08;MQ0=0;MQRankSum=0.862;QD=12.86;ReadPosRankSum=0.177;SB=-3.450e+02;VQSLOD=7.5008;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP "0|0:47,0:47:99:0,123,1604:110" "0|0:48,0:48:99:0,111,1433:110" "0|1:25,25:50:99:678,0,694:110"
+11 19325064 rs793250 G A 5752.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.080;DB;DP=203;Dels=0.00;FS=2.530;HaplotypeScore=0.8165;MLEAC=5;MLEAF=0.833;MQ=59.35;MQ0=0;MQRankSum=-0.061;QD=28.34;ReadPosRankSum=0.095;SB=-3.093e+03;VQSLOD=9.4617;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,71:71:99:2527,190,0:127" "1|1:0,78:78:99:2626,205,0:127" "1|0:32,22:54:99:599,0,768:127"
+13 56456878 rs2997102 C A 9454.01 PASS AC=6;AF=1.00;AN=6;DB;DP=257;Dels=0.00;FS=0.000;HaplotypeScore=0.9537;MLEAC=6;MLEAF=1.00;MQ=59.57;MQ0=0;QD=36.79;SB=-4.826e+03;VQSLOD=11.5149;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,99:99:99:3692,280,0:127" "1|1:0,88:88:99:3239,253,0:127" "1|1:0,70:70:99:2523,193,0:127"
+10 116646860 rs4752347 T A 4159.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.459;DB;DP=197;Dels=0.00;FS=3.519;HaplotypeScore=0.6313;MLEAC=4;MLEAF=0.667;MQ=59.27;MQ0=0;MQRankSum=1.049;QD=21.11;ReadPosRankSum=-1.271;SB=-2.347e+03;VQSLOD=8.3322;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP "1|1:0,63:63:99:2191,169,0:127" "1|0:31,35:66:99:1031,0,863:127" "1|0:31,37:68:99:937,0,774:127"
+1 110091282 rs1279195 C T 952.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.646;DB;DP=101;Dels=0.00;FS=19.666;HaplotypeScore=1.9160;MLEAC=2;MLEAF=0.333;MQ=56.72;MQ0=0;MQRankSum=-0.345;QD=12.37;ReadPosRankSum=0.567;SB=-5.350e+02;VQSLOD=4.1741;culprit=FS GT:AD:DP:GQ:PL:TP "1|0:14,29:46:99:726,0,219:42" "1|0:13,12:31:99:265,0,298:42" "0|0:18,0:24:42:0,42,522:42"
+3 17501103 . T G 45.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-6.477;DP=156;Dels=0.00;FS=71.755;HaplotypeScore=1.5253;MLEAC=2;MLEAF=0.333;MQ=58.02;MQ0=0;MQRankSum=-0.156;QD=0.43;ReadPosRankSum=-3.974;SB=-1.474e-02;VQSLOD=-14.1451;culprit=FS GT:AD:DP:GQ:PL:TP "0|0:43,8:51:99:0,114,1252:33" "0|1:22,24:46:34:34,0,492:33" "0|1:24,34:59:50:50,0,492:33"
+5 121302662 . G T 143.72 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.413;DP=150;Dels=0.02;FS=161.482;HaplotypeScore=2.8631;MLEAC=3;MLEAF=0.500;MQ=35.76;MQ0=1;MQRankSum=0.422;QD=0.96;ReadPosRankSum=-5.675;SB=-1.466e+00;VQSLOD=-77.2440;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:32,21:53:99:120,0,251:5" "0/1:35,12:47:57:57,0,271:5" "0/1:35,12:47:4:4,0,259:5"
+4 177855678 rs1545090 A G 7065.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1696;MLEAC=6;MLEAF=1.00;MQ=59.50;MQ0=0;QD=30.85;SB=-3.799e+03;VQSLOD=11.0069;culprit=FS GT:AD:DP:GQ:PL:TP "1|1:0,84:84:99:2701,235,0:127" "1|1:0,79:80:99:2401,211,0:127" "1|1:0,65:65:99:1963,165,0:127"
+11 113825129 rs1150234 G A 2441.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.977;DB;DP=210;Dels=0.00;FS=0.000;HaplotypeScore=2.0700;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=0.877;QD=11.63;ReadPosRankSum=0.262;SB=-1.513e+03;VQSLOD=9.0378;culprit=FS GT:AD:DP:GQ:PL:TP "0/1:30,33:63:99:881,0,774:127" "0/1:46,33:80:99:726,0,1020:127" "0/1:32,35:67:99:873,0,759:127"
\ No newline at end of file
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-snps.vcf b/testdata/picard/vcf/CEUTrio-snps.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-snps.vcf
rename to testdata/picard/vcf/CEUTrio-snps.vcf
diff --git a/testdata/net/sf/picard/vcf/CEUTrio-snps.vcf.idx b/testdata/picard/vcf/CEUTrio-snps.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/CEUTrio-snps.vcf.idx
rename to testdata/picard/vcf/CEUTrio-snps.vcf.idx
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..8b5c633
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps_del_line.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:20 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12878 162 104 0 1 40
+INDEL NA12878 NA12878 0 0 0 0 0
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..2bf1d65
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_detail_metrics
@@ -0,0 +1,13 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps_del_line.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:20 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 104 TP,TN
+SNP NA12878 NA12878 HOM_VAR1 MISSING 1 FN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR1 58 TP
+SNP NA12878 NA12878 VC_FILTERED VC_FILTERED 40 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..941314a
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_del_line.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_del_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRIC [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:04:55 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12878 1 1 ? 0.983051 1 ? 0.993865 1 1 1 1
+INDEL NA12878 NA12878 ? ? ? ? ? ? ? ? ? ? ?
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..ab82ddf
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps_first_line_diff.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:19 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12878 162 104 0 1 40
+INDEL NA12878 NA12878 0 0 0 0 0
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..0b94fa0
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_detail_metrics
@@ -0,0 +1,13 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps_first_line_diff.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:19 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12878 HET_REF_VAR1 HOM_REF 1 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 103 TP,TN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR1 59 TP
+SNP NA12878 NA12878 VC_FILTERED VC_FILTERED 40 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..65b94a1
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_first_line_diff.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_first_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGE [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:05:19 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12878 0.990385 1 ? 1 1 ? 0.993865 1 1 0.995074 0.993865
+INDEL NA12878 NA12878 ? ? ? ? ? ? ? ? ? ? ?
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..8ac9937
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps_last_line_diff.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:19 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12878 163 104 0 0 40
+INDEL NA12878 NA12878 0 0 0 0 0
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..a66d8f7
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_detail_metrics
@@ -0,0 +1,13 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps_last_line_diff.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:19 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 104 TP,TN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR1 59 TP
+SNP NA12878 NA12878 VC_FILTERED HOM_VAR1 1 EMPTY
+SNP NA12878 NA12878 VC_FILTERED VC_FILTERED 39 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..bc09f0e
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_last_line_diff.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_CEUTrio-snps_last_line_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENC [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:05:40 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12878 1 1 ? 1 1 ? 1 1 1 0.995074 0.993902
+INDEL NA12878 NA12878 ? ? ? ? ? ? ? ? ? ? ?
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_del_line.vcf b/testdata/picard/vcf/CEUTrio-snps_del_line.vcf
new file mode 100644
index 0000000..4545b1a
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_del_line.vcf
@@ -0,0 +1,405 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.669;HaplotypeScore=3.3539;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-0.219;SB=-9.390e+02;VQSLOD=5.5346;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
+1 17032814 rs2773183 T C 2828.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879;DB;DP=322;Dels=0.00;FS=2.430;HaplotypeScore=15.4499;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.916;QD=8.78;ReadPosRankSum=-1.245;SB=-1.943e+03;VQSLOD=-1.4207;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
+1 47818917 rs12749507 A G 1285.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.707;DB;DP=252;Dels=0.00;FS=2.139;HaplotypeScore=0.6661;MLEAC=1;MLEAF=0.167;MQ=59.83;MQ0=0;MQRankSum=-0.467;QD=13.39;ReadPosRankSum=0.535;SB=-6.730e+02;VQSLOD=9.2738;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,3171:127 0|1:53,42:96:99:1320,0,1615:127 0|0:75,0:75:99:0,217,2762:127
+1 59635894 rs331648 T A 839.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.038;DB;DP=211;Dels=0.00;FS=1.427;HaplotypeScore=1.5485;MLEAC=1;MLEAF=0.167;MQ=58.68;MQ0=0;MQRankSum=-0.422;QD=11.82;ReadPosRankSum=-0.180;SB=-5.520e+02;VQSLOD=7.9477;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,199,2578:127 0|0:62,0:62:99:0,169,2205:127 0|1:33,38:71:99:874,0,897:127
+1 69502962 rs12724640 T C 1868.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-1.732;DB;DP=110;Dels=0.00;FS=4.721;HaplotypeScore=1.9269;MLEAC=6;MLEAF=1.00;MQ=29.46;MQ0=22;MQRankSum=1.652;QD=16.98;ReadPosRankSum=-0.564;SB=-8.110e+02;VQSLOD=0.2103;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:5,23:29:63:693,63,0:50 1|1:5,38:43:66:675,66,0:50 1|1:9,29:38:51:538,51,0:50
+1 80481528 rs61774278 G C 1775.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.614;DB;DP=168;Dels=0.00;FS=8.292;HaplotypeScore=2.0470;MLEAC=3;MLEAF=0.500;MQ=54.28;MQ0=0;MQRankSum=-0.052;QD=16.75;ReadPosRankSum=1.544;SB=-1.133e+03;VQSLOD=4.7735;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,26:61:99:767,0,778:80 0|0:62,0:62:84:0,84,1046:80 1|1:0,45:45:84:1053,84,0:80
+1 90146546 rs7512447 C T 8721.01 PASS AC=6;AF=1.00;AN=6;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.40;MQ0=0;QD=36.19;SB=-4.084e+03;VQSLOD=11.3217;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2599,196,0:127 1|1:0,86:86:99:3042,235,0:127 1|1:0,84:84:99:3080,238,0:127
+1 100763317 rs6681810 G C 5583.01 PASS AC=6;AF=1.00;AN=6;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=3.7201;MLEAC=6;MLEAF=1.00;MQ=58.52;MQ0=0;QD=28.48;SB=-2.737e+03;VQSLOD=7.9151;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,76:77:99:2211,192,0:127 1|1:0,56:56:99:1593,141,0:127 1|1:0,62:62:99:1779,156,0:127
+1 110091282 rs1279195 C T 952.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.646;DB;DP=101;Dels=0.00;FS=19.666;HaplotypeScore=1.9160;MLEAC=2;MLEAF=0.333;MQ=56.72;MQ0=0;MQRankSum=-0.345;QD=12.37;ReadPosRankSum=0.567;SB=-5.350e+02;VQSLOD=4.1741;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,29:46:99:726,0,219:42 1|0:13,12:31:99:265,0,298:42 0|0:18,0:24:42:0,42,522:42
+1 146610795 rs58742099 C T 2831.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.298;DB;DP=261;Dels=0.00;FS=7.033;HaplotypeScore=13.9060;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=0.753;QD=16.27;ReadPosRankSum=-1.405;SB=-1.481e+03;VQSLOD=3.4221;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:39,43:82:99:1329,0,1080:127 1|0:40,52:92:99:1541,0,1241:127 0|0:87,0:87:99:0,238,3098:127
+1 156248265 rs12038203 C T 643.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.311;DB;DP=145;Dels=0.00;FS=4.568;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.08;MQ0=0;MQRankSum=0.862;QD=12.86;ReadPosRankSum=0.177;SB=-3.450e+02;VQSLOD=7.5008;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:47,0:47:99:0,123,1604:110 0|0:48,0:48:99:0,111,1433:110 0|1:25,25:50:99:678,0,694:110
+1 165431906 rs7528908 G T 2381.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.008;DB;DP=259;Dels=0.00;FS=4.727;HaplotypeScore=0.9857;MLEAC=2;MLEAF=0.333;MQ=59.75;MQ0=0;MQRankSum=0.916;QD=14.34;ReadPosRankSum=-0.907;SB=-9.050e+02;VQSLOD=8.1270;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:48,40:88:99:1142,0,1428:127 0|0:93,0:93:99:0,259,3166:127 1|0:38,40:78:99:1278,0,1075:127
+1 175207612 rs11484568 C T 1920.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.643;DB;DP=216;Dels=0.00;FS=0.537;HaplotypeScore=2.2467;MLEAC=2;MLEAF=0.333;MQ=58.99;MQ0=0;MQRankSum=0.383;QD=14.12;ReadPosRankSum=0.169;SB=-1.064e+03;VQSLOD=8.5912;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:34,40:74:99:1152,0,995:127 0|0:80,0:80:99:0,208,2602:127 1|0:34,28:62:99:807,0,998:127
+1 186656152 rs4422959 G A 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=7.230;DB;DP=270;Dels=0.00;FS=7.290;HaplotypeScore=1.1750;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=0.399;QD=17.21;ReadPosRankSum=-0.869;SB=-6.320e+02;VQSLOD=7.6734;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:99,0:99:99:0,283,3341:127 0|0:93,0:93:99:0,256,3022:127 0|1:33,45:78:99:1377,0,917:127
+1 195392852 rs2119441 T G 5369.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.284;DB;DP=241;Dels=0.00;FS=3.312;HaplotypeScore=1.8710;MLEAC=4;MLEAF=0.667;MQ=58.35;MQ0=0;MQRankSum=-0.643;QD=22.28;ReadPosRankSum=0.178;SB=-2.332e+03;VQSLOD=7.8524;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:37,42:79:99:1233,0,1145:127 1|1:0,84:84:99:2741,211,0:127 0|1:31,47:78:99:1395,0,804:127
+1 204945934 rs6657372 A G 1311.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.582;DB;DP=126;Dels=0.00;FS=0.000;HaplotypeScore=2.7088;MLEAC=3;MLEAF=0.500;MQ=58.78;MQ0=0;MQRankSum=0.480;QD=15.43;ReadPosRankSum=1.284;SB=-6.370e+02;VQSLOD=7.8448;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:22,28:50:99:629,0,675:68 0|0:40,0:41:84:0,84,1057:68 1|1:0,35:35:69:727,69,0:68
+1 216407409 rs3767692 A G 8820.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.803;DB;DP=295;Dels=0.00;FS=1.345;HaplotypeScore=2.5841;MLEAC=5;MLEAF=0.833;MQ=59.28;MQ0=0;MQRankSum=-0.375;QD=29.90;ReadPosRankSum=-0.363;SB=-4.445e+03;VQSLOD=7.0549;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:1,115:116:99:4251,328,0:127 1|0:39,51:90:99:1430,0,1275:127 1|1:0,89:89:99:3139,241,0:127
+1 226163330 rs10915914 C G 747.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.123;DB;DP=121;Dels=0.00;FS=0.863;HaplotypeScore=0.8289;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=-0.478;QD=9.70;ReadPosRankSum=-0.134;SB=-2.780e+02;VQSLOD=8.0849;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,1:44:99:0,117,1447:116 0|1:17,15:32:99:289,0,390:116 0|1:26,19:45:99:497,0,677:116
+1 243135892 rs7517403 C T 2313.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=7.051;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.5884;MLEAC=4;MLEAF=0.667;MQ=37.62;MQ0=11;MQRankSum=-5.659;QD=13.77;ReadPosRankSum=-0.977;SB=-9.200e+02;VQSLOD=2.2480;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:31,24:55:99:501,0,891:123 1|1:0,58:58:99:1263,123,0:123 0|1:28,27:55:99:591,0,714:123
+2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814;DB;DP=189;Dels=0.00;FS=5.611;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.579;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.8071;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
+2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.695;DB;DP=213;Dels=0.00;FS=7.834;HaplotypeScore=1.1897;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-0.097;SB=-1.991e+03;VQSLOD=9.1447;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,42:75:99:1400,0,1031:127 0|0:67,0:67:99:0,178,2277:127 1|1:0,71:71:99:2578,199,0:127
+2 18016237 rs12710649 A T 3950.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.037;DB;DP=250;Dels=0.00;FS=2.158;HaplotypeScore=2.0804;MLEAC=3;MLEAF=0.500;MQ=59.14;MQ0=0;MQRankSum=0.494;QD=15.80;ReadPosRankSum=0.705;SB=-2.142e+03;VQSLOD=8.1407;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:46,59:105:99:1733,0,1505:127 0/1:39,37:76:99:925,0,1164:127 0/1:24,44:68:99:1292,0,628:127
+2 28790711 rs34787802 T G 731.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.421;DB;DP=232;Dels=0.00;FS=2.403;HaplotypeScore=1.5189;MLEAC=1;MLEAF=0.167;MQ=57.98;MQ0=0;MQRankSum=0.447;QD=10.30;ReadPosRankSum=-1.833;SB=-4.550e+02;VQSLOD=6.8853;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,223,2877:127 0|1:36,35:71:99:766,0,947:127 0|0:79,0:80:99:0,205,2640:127
+2 36994439 rs11124542 A C 1302.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.406;DB;DP=191;Dels=0.00;FS=3.335;HaplotypeScore=2.1785;MLEAC=3;MLEAF=0.500;MQ=58.93;MQ0=0;MQRankSum=-0.725;QD=6.82;ReadPosRankSum=0.302;SB=-1.006e+03;VQSLOD=7.9479;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,28:60:99:710,0,1044:127 0/1:34,25:59:99:309,0,772:127 0/1:45,27:72:99:322,0,1096:127
+2 45429089 rs13418430 C A 2341.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.861;DB;DP=283;Dels=0.00;FS=2.854;HaplotypeScore=1.3288;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=-0.939;QD=12.52;ReadPosRankSum=-1.869;SB=-1.156e+03;VQSLOD=7.1503;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:60,49:109:99:1406,0,2061:127 1|0:41,37:78:99:974,0,1238:127 0|0:96,0:96:99:0,256,3312:127
+2 54408283 rs55993481 T G 2128.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.961;DB;DP=222;Dels=0.00;FS=1.744;HaplotypeScore=3.9553;MLEAC=2;MLEAF=0.333;MQ=59.69;MQ0=0;MQRankSum=0.670;QD=14.28;ReadPosRankSum=1.313;SB=-1.076e+03;VQSLOD=6.5064;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:35,46:81:99:1392,0,921:127 1|0:35,33:68:99:775,0,878:127 0|0:73,0:73:99:0,175,2164:127
+2 64848970 rs35473866 T C 655.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.263;DB;DP=218;Dels=0.00;FS=8.014;HaplotypeScore=2.5836;MLEAC=1;MLEAF=0.167;MQ=58.36;MQ0=0;MQRankSum=-0.168;QD=8.29;ReadPosRankSum=-0.307;SB=-3.420e+02;VQSLOD=5.9179;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,208,2627:127 0|0:61,0:61:99:0,135,1725:127 0|1:35,42:79:99:690,0,1042:127
+2 85513238 rs62162679 C T 742.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.162;DB;DP=137;Dels=0.00;FS=4.474;HaplotypeScore=1.3905;MLEAC=2;MLEAF=0.333;MQ=57.50;MQ0=0;MQRankSum=0.479;QD=7.57;ReadPosRankSum=-0.272;SB=-5.520e+02;VQSLOD=7.1288;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:39,0:39:99:0,105,1267:104 0|1:23,23:47:99:430,0,551:104 0|1:31,20:51:99:351,0,633:104
+2 96514373 rs10186946 C T 206.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=4.485;DB;DP=175;Dels=0.00;FS=2.805;HaplotypeScore=2.4200;MLEAC=2;MLEAF=0.333;MQ=39.07;MQ0=7;MQRankSum=-7.529;QD=1.61;ReadPosRankSum=0.813;SB=-2.501e+01;VQSLOD=-0.8655;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:35,23:58:62:62,0,484:61 1|0:22,46:70:99:183,0,387:61 0|0:46,0:47:99:0,99,1162:61
+2 117966808 rs333847 C T 9037.01 PASS AC=6;AF=1.00;AN=6;DB;DP=269;Dels=0.00;FS=0.000;HaplotypeScore=3.7032;MLEAC=6;MLEAF=1.00;MQ=58.21;MQ0=0;QD=33.59;SB=-4.673e+03;VQSLOD=7.0546;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2652,205,0:127 1|1:0,101:101:99:3158,247,0:127 1|1:0,89:90:99:3227,250,0:127
+2 127445050 rs113647072 A G 1773.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.856;DB;DP=154;Dels=0.00;FS=4.202;HaplotypeScore=2.2701;MLEAC=4;MLEAF=0.667;MQ=59.16;MQ0=0;MQRankSum=0.759;QD=11.51;ReadPosRankSum=1.290;SB=-1.402e+03;VQSLOD=7.9185;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:26,28:54:99:652,0,472:78 0|1:26,22:49:99:350,0,462:78 1|1:0,50:51:78:813,78,0:78
+2 144289763 rs7607879 C T 3308.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.386;DB;DP=225;Dels=0.00;FS=9.723;HaplotypeScore=1.4969;MLEAC=3;MLEAF=0.500;MQ=59.53;MQ0=0;MQRankSum=0.283;QD=14.70;ReadPosRankSum=1.392;SB=-1.760e+03;VQSLOD=8.2418;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:41,39:81:99:1190,0,1312:127 0/1:28,36:64:99:1057,0,834:127 0/1:44,36:80:99:1061,0,1275:127
+2 155726628 . T G 1351.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=0.207;DP=193;Dels=0.00;FS=9.246;HaplotypeScore=0.5220;MLEAC=6;MLEAF=1.00;MQ=16.17;MQ0=87;MQRankSum=2.396;QD=7.00;ReadPosRankSum=1.069;SB=-4.420e+02;VQSLOD=-2.7874;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,56:59:60:591,60,0:27 1|1:8,49:57:27:245,27,0:27 1|1:12,65:77:57:553,57,0:27
+2 167166899 . T A 1064.78 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=0.023;DP=278;Dels=0.00;FS=9.890;HaplotypeScore=0.2774;MLEAC=6;MLEAF=1.00;MQ=10.47;MQ0=239;MQRankSum=1.643;QD=3.83;ReadPosRankSum=0.347;SB=-1.083e-02;VQSLOD=-6.9449;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:174,12:186:36:401,36,0:4 1|1:37,14:52:39:431,39,0:4 1|0:31,9:40:3:271,0,3:4
+2 177175707 rs7355385 A G 2590.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.866;DB;DP=206;Dels=0.00;FS=14.872;HaplotypeScore=0.3111;MLEAC=3;MLEAF=0.500;MQ=59.12;MQ0=0;MQRankSum=-0.937;QD=20.40;ReadPosRankSum=-0.287;SB=-8.970e+02;VQSLOD=6.8179;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:856,0,1069:127 1|1:0,62:62:99:1779,150,0:127 0|0:78,1:79:99:0,193,2411:127
+2 187694833 rs10191094 T C 1006.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.181;DB;DP=236;Dels=0.00;FS=9.083;HaplotypeScore=2.2688;MLEAC=1;MLEAF=0.167;MQ=59.73;MQ0=0;MQRankSum=-0.218;QD=13.07;ReadPosRankSum=-0.877;SB=-5.830e+02;VQSLOD=7.6003;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3021:127 0|0:77,0:77:99:0,217,2790:127 0|1:33,44:77:99:1041,0,988:127
+2 198567638 rs12619333 C G 2201.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.028;DB;DP=240;Dels=0.00;FS=4.757;HaplotypeScore=1.3741;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=1;MQRankSum=0.131;QD=13.42;ReadPosRankSum=0.123;SB=-1.051e+03;VQSLOD=8.1261;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:38,45:84:99:1298,0,1249:127 1|0:45,35:80:99:942,0,1493:127 0|0:76,0:76:99:0,196,2542:127
+2 209758643 rs12992166 C T 1534.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.178;DB;DP=163;Dels=0.00;FS=8.813;HaplotypeScore=2.3636;MLEAC=2;MLEAF=0.333;MQ=58.93;MQ0=0;MQRankSum=1.988;QD=12.08;ReadPosRankSum=1.075;SB=-4.720e+02;VQSLOD=6.8226;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,22:59:99:610,0,886:93 1|0:32,36:68:99:963,0,797:93 0|0:36,0:36:93:0,93,1058:93
+2 228532558 rs6436725 G A 3484.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=7.160;DB;DP=263;Dels=0.00;FS=1.547;HaplotypeScore=4.9679;MLEAC=3;MLEAF=0.500;MQ=58.60;MQ0=0;MQRankSum=1.137;QD=21.91;ReadPosRankSum=-0.416;SB=-1.472e+03;VQSLOD=5.4377;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:42,47:89:99:1549,0,932:127 0|0:104,0:104:99:0,247,2939:127 1|1:0,69:70:99:1935,156,0:127
+2 237156689 rs13390270 G A 852.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.150;DB;DP=205;Dels=0.00;FS=0.710;HaplotypeScore=1.7295;MLEAC=1;MLEAF=0.167;MQ=59.06;MQ0=0;MQRankSum=-0.193;QD=11.67;ReadPosRankSum=1.262;SB=-4.790e+02;VQSLOD=8.4962;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,202,2606:108 0|1:39,34:73:99:887,0,1027:108 0|0:59,0:59:99:0,108,1384:108
+3 1609737 rs2648459 A G 6492.01 PASS AC=6;AF=1.00;AN=6;DB;DP=187;Dels=0.00;FS=0.000;HaplotypeScore=1.1795;MLEAC=6;MLEAF=1.00;MQ=59.90;MQ0=0;QD=34.72;SB=-3.251e+03;VQSLOD=11.5033;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1943,150,0:127 1|1:0,62:62:99:2206,172,0:127 1|1:0,72:72:99:2343,181,0:127
+3 8399330 rs6770171 G A 6816.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.689;DB;DP=253;Dels=0.00;FS=0.637;HaplotypeScore=1.2788;MLEAC=5;MLEAF=0.833;MQ=58.42;MQ0=0;MQRankSum=0.607;QD=26.94;ReadPosRankSum=-0.503;SB=-3.369e+03;VQSLOD=8.0141;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3784,292,0:127 1|1:0,72:72:99:2164,169,0:127 1|0:42,33:75:99:868,0,1146:127
+3 17501103 . T G 45.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-6.477;DP=156;Dels=0.00;FS=71.755;HaplotypeScore=1.5253;MLEAC=2;MLEAF=0.333;MQ=58.02;MQ0=0;MQRankSum=-0.156;QD=0.43;ReadPosRankSum=-3.974;SB=-1.474e-02;VQSLOD=-14.1451;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,8:51:99:0,114,1252:33 0|1:22,24:46:34:34,0,492:33 0|1:24,34:59:50:50,0,492:33
+3 26960556 rs4422260 T C 878.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-2.140;DB;DP=220;Dels=0.00;FS=1.108;HaplotypeScore=1.7204;MLEAC=2;MLEAF=0.333;MQ=41.87;MQ0=3;MQRankSum=-6.679;QD=5.97;ReadPosRankSum=-0.031;SB=-4.600e+02;VQSLOD=0.7170;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,208,2660:127 0|1:32,48:80:99:759,0,915:127 0|1:37,30:67:99:158,0,1092:127
+3 48757773 rs61137521 A G 3103.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.794;DB;DP=172;Dels=0.00;FS=0.000;HaplotypeScore=1.8954;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=-0.693;QD=18.04;ReadPosRankSum=-1.667;SB=-1.874e+03;VQSLOD=7.9241;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,50:51:99:1723,141,0:127 1|0:31,34:65:99:745,0,814:127 1|0:24,32:56:99:677,0,603:127
+3 60283791 rs10154846 T C 669.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.270;DB;DP=204;Dels=0.00;FS=1.585;HaplotypeScore=1.6639;MLEAC=1;MLEAF=0.167;MQ=59.39;MQ0=0;MQRankSum=0.370;QD=10.14;ReadPosRankSum=1.636;SB=-2.690e+02;VQSLOD=8.9468;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:63,0:63:99:0,190,2440:127 0|1:34,32:66:99:704,0,1020:127 0|0:74,0:75:99:0,190,2372:127
+3 68765638 rs1504297 C G 4623.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-5.561;DB;DP=225;Dels=0.00;FS=3.176;HaplotypeScore=0.8432;MLEAC=4;MLEAF=0.667;MQ=59.80;MQ0=0;MQRankSum=-0.619;QD=20.55;ReadPosRankSum=-1.001;SB=-2.371e+03;VQSLOD=8.7354;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:40,39:79:99:1220,0,1330:127 1|1:0,75:75:99:2518,205,0:127 0|1:37,34:71:99:885,0,1185:127
+3 76722766 rs264537 C G 845.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=3.666;DB;DP=202;Dels=0.00;FS=0.000;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.79;MQ0=0;MQRankSum=-0.795;QD=13.21;ReadPosRankSum=1.049;SB=-2.910e+02;VQSLOD=8.5280;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,208,2570:127 0|0:68,0:68:99:0,193,2332:127 0|1:34,30:64:99:880,0,995:127
+3 86234718 rs2324883 T C 7655.01 PASS AC=6;AF=1.00;AN=6;DB;DP=234;Dels=0.00;FS=0.000;HaplotypeScore=0.6487;MLEAC=6;MLEAF=1.00;MQ=59.51;MQ0=0;QD=32.71;SB=-4.142e+03;VQSLOD=11.2111;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,80:80:99:2857,223,0:127 1|1:0,76:77:99:2512,196,0:127 1|1:0,77:77:99:2286,178,0:127
+3 99106655 rs2623376 A G 1093.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.490;DB;DP=191;Dels=0.00;FS=2.283;HaplotypeScore=0.6267;MLEAC=2;MLEAF=0.333;MQ=59.76;MQ0=0;MQRankSum=-1.141;QD=9.51;ReadPosRankSum=0.079;SB=-5.610e+02;VQSLOD=8.1455;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:653,0,970:127 0|0:76,0:76:99:0,193,2462:127 1|0:44,19:63:99:479,0,1261:127
+3 108612711 rs2399252 T A 3430.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.783;DB;DP=239;Dels=0.00;FS=4.436;HaplotypeScore=0.6593;MLEAC=3;MLEAF=0.500;MQ=59.64;MQ0=0;MQRankSum=-0.269;QD=14.35;ReadPosRankSum=-0.701;SB=-1.733e+03;VQSLOD=8.5079;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:48,34:82:99:1066,0,1620:127 0/1:45,43:88:99:1370,0,1452:127 0/1:36,32:69:99:994,0,1128:127
+3 128140891 rs73201490 C T 1315.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.394;DB;DP=142;Dels=0.00;FS=0.667;HaplotypeScore=3.4886;MLEAC=2;MLEAF=0.333;MQ=58.69;MQ0=0;MQRankSum=1.733;QD=14.30;ReadPosRankSum=0.758;SB=-6.400e+02;VQSLOD=6.7020;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:29,24:53:99:636,0,670:104 0|0:50,0:50:99:0,105,1188:104 1|0:12,27:39:99:718,0,250:104
+3 137840974 rs2622698 C A 6792.01 PASS AC=6;AF=1.00;AN=6;DB;DP=232;Dels=0.00;FS=0.000;HaplotypeScore=2.6477;MLEAC=6;MLEAF=1.00;MQ=59.04;MQ0=0;QD=29.28;SB=-3.999e+03;VQSLOD=9.7681;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2640,205,0:127 1|1:0,78:78:99:2229,178,0:127 1|1:0,75:75:99:1923,153,0:127
+3 148344553 rs62274102 C A 3191.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.860;DB;DP=232;Dels=0.00;FS=12.061;HaplotypeScore=2.3659;MLEAC=3;MLEAF=0.500;MQ=59.32;MQ0=0;MQRankSum=-0.551;QD=19.58;ReadPosRankSum=2.411;SB=-1.757e+03;VQSLOD=6.2908;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:46,39:85:99:985,0,1339:127 1|1:0,78:78:99:2251,175,0:127 0|0:69,0:69:99:0,153,2018:127
+3 158557110 rs34445802 G A 2374.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.805;DB;DP=237;Dels=0.00;FS=1.025;HaplotypeScore=1.6572;MLEAC=2;MLEAF=0.333;MQ=57.48;MQ0=0;MQRankSum=0.558;QD=14.05;ReadPosRankSum=-1.147;SB=-1.505e+03;VQSLOD=7.1338;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:43,56:99:99:1624,0,1344:127 1|0:33,37:70:99:789,0,916:127 0|0:68,0:68:99:0,156,2014:127
+3 179020937 rs13082816 C T 1116.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.603;DB;DP=82;Dels=0.00;FS=0.000;HaplotypeScore=0.6358;MLEAC=4;MLEAF=0.667;MQ=54.57;MQ0=1;MQRankSum=0.374;QD=13.61;ReadPosRankSum=-0.037;SB=-2.010e+02;VQSLOD=6.0907;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:13,13:26:99:388,0,178:36 1|1:0,24:24:36:442,36,0:36 0|1:13,19:32:99:328,0,179:36
+3 189981901 . A G 179.25 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=2.258;DP=274;Dels=0.00;FS=73.736;HaplotypeScore=1.8333;MLEAC=1;MLEAF=0.167;MQ=54.08;MQ0=6;MQRankSum=-2.651;QD=1.97;ReadPosRankSum=-6.101;SB=-6.400e+01;VQSLOD=-18.1951;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:64,27:91:99:214,0,679:51 1|0:78,10:88:0:0,21,1685:51 0|0:86,9:95:74:0,74,1891:51
+3 197056886 rs7612900 G A 7880.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=0.6106;MLEAC=6;MLEAF=1.00;MQ=59.18;MQ0=0;QD=34.41;SB=-3.459e+03;VQSLOD=11.8130;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2786,214,0:127 1|1:0,81:81:99:2598,202,0:127 1|1:0,73:73:99:2496,193,0:127
+4 6333669 rs35678078 G T 2186.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.220;DB;DP=198;Dels=0.00;FS=1.754;HaplotypeScore=0.7779;MLEAC=3;MLEAF=0.500;MQ=59.27;MQ0=0;MQRankSum=-0.256;QD=11.04;ReadPosRankSum=-0.469;SB=-1.621e+03;VQSLOD=9.4086;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:33,34:67:99:875,0,848:127 0/1:27,32:59:99:602,0,534:127 0/1:33,38:72:99:748,0,676:127
+4 12652343 rs13114660 G T 610.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.176;DB;DP=127;Dels=0.00;FS=0.000;HaplotypeScore=1.5681;MLEAC=1;MLEAF=0.167;MQ=58.86;MQ0=0;MQRankSum=-0.468;QD=16.06;ReadPosRankSum=1.246;SB=-3.060e+02;VQSLOD=7.8400;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,120,1561:102 0|1:15,23:38:99:645,0,407:102 0|0:44,1:46:99:0,103,1539:102
+4 30898977 rs4386561 G A 2449.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.817;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.9382;MLEAC=2;MLEAF=0.333;MQ=58.94;MQ0=0;MQRankSum=0.173;QD=15.70;ReadPosRankSum=1.051;SB=-1.131e+03;VQSLOD=8.3611;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,46:79:99:1380,0,944:127 0|0:75,0:75:99:0,202,2608:127 1|0:43,34:77:99:1108,0,1335:127
+4 39062189 rs2566127 T C 2641.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.019;DB;DP=201;Dels=0.00;FS=1.101;HaplotypeScore=2.8834;MLEAC=3;MLEAF=0.500;MQ=58.96;MQ0=0;MQRankSum=0.932;QD=13.14;ReadPosRankSum=-0.596;SB=-1.401e+03;VQSLOD=7.9734;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,29:64:99:880,0,1168:127 0/1:37,32:70:99:796,0,1021:127 0/1:31,36:67:99:1004,0,877:127
+4 48922864 rs7697262 G C 1383.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=100;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=20.20;MQ0=24;QD=13.83;SB=-3.860e+02;VQSLOD=-0.3210;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,38:41:57:625,57,0:32 1|1:0,28:28:33:368,33,0:32 1|1:2,29:31:39:428,39,0:32
+4 57135985 rs1715504 G A 1213.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.549;DB;DP=173;Dels=0.00;FS=4.099;HaplotypeScore=1.6305;MLEAC=2;MLEAF=0.333;MQ=58.44;MQ0=0;MQRankSum=-1.006;QD=10.28;ReadPosRankSum=-0.933;SB=-4.500e+02;VQSLOD=7.4115;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:54,0:55:99:0,135,1546:127 0|1:30,23:54:99:563,0,608:127 0|1:35,28:64:99:689,0,562:127
+4 64522064 rs4860541 A G 5942.01 PASS AC=6;AF=1.00;AN=6;DB;DP=188;Dels=0.00;FS=0.000;HaplotypeScore=0.2889;MLEAC=6;MLEAF=1.00;MQ=56.20;MQ0=0;QD=31.61;SB=-3.348e+03;VQSLOD=8.5367;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2119,169,0:127 1|1:0,52:53:99:1661,132,0:127 1|1:0,67:67:99:2162,172,0:127
+4 71449060 rs60358213 G A 2269.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.704;DB;DP=227;Dels=0.00;FS=13.048;HaplotypeScore=20.1360;MLEAC=2;MLEAF=0.333;MQ=55.35;MQ0=0;MQRankSum=0.477;QD=13.19;ReadPosRankSum=2.295;SB=-8.910e+02;VQSLOD=1.8937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:60,40:100:99:1221,0,1476:127 1|0:37,35:72:99:1087,0,987:127 0|0:53,1:54:99:0,157,2026:127
+4 82427976 rs6841516 G A 561.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.022;DB;DP=166;Dels=0.00;FS=0.000;HaplotypeScore=1.4715;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=-1.555;QD=11.00;ReadPosRankSum=0.016;SB=-3.880e+02;VQSLOD=8.0989;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:51,0:51:99:0,132,1705:127 0|1:22,29:51:99:596,0,483:127 0|0:64,0:64:99:0,135,1755:127
+4 103859292 rs7676943 C G 7573.01 PASS AC=6;AF=1.00;AN=6;DB;DP=235;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=58.63;MQ0=0;QD=32.23;SB=-3.953e+03;VQSLOD=10.3945;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,95:96:99:3289,256,0:127 1|1:0,73:73:99:2137,166,0:127 1|1:0,66:66:99:2147,166,0:127
+4 122900130 rs4833786 C T 2361.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.390;DB;DP=244;Dels=0.00;FS=0.495;HaplotypeScore=0.5427;MLEAC=2;MLEAF=0.333;MQ=59.91;MQ0=0;MQRankSum=-0.628;QD=15.23;ReadPosRankSum=1.221;SB=-1.282e+03;VQSLOD=8.8105;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:89,0:89:99:0,250,3286:127 0|1:42,44:86:99:1257,0,1325:127 0|1:32,37:69:99:1143,0,941:127
+4 132671861 rs6856716 C G 2622.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=3.143;DB;DP=617;DS;Dels=0.00;FS=5.808;HaplotypeScore=34.4109;MLEAC=2;MLEAF=0.333;MQ=24.78;MQ0=42;MQRankSum=3.293;QD=5.89;ReadPosRankSum=-0.736;SB=-1.412e+03;VQSLOD=-77.3455;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:125,98:223:99:1761,0,1486:127 0|0:171,0:172:99:0,300,2641:127 1|0:152,70:222:99:900,0,2086:127
+4 141514835 rs55984232 C T 1645.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=7.144;DB;DP=191;Dels=0.00;FS=2.756;HaplotypeScore=1.0735;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.726;QD=13.06;ReadPosRankSum=-0.789;SB=-8.550e+02;VQSLOD=8.9425;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,28:60:99:913,0,820:127 0|0:65,0:65:99:0,156,1886:127 1|0:34,32:66:99:771,0,750:127
+4 161180100 rs167176 G C 2497.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.811;DB;DP=191;Dels=0.00;FS=5.370;HaplotypeScore=0.7812;MLEAC=3;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=-0.584;QD=13.07;ReadPosRankSum=0.756;SB=-1.206e+03;VQSLOD=8.0012;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,36:68:99:1100,0,895:127 0/1:41,35:76:99:987,0,1028:127 0/1:29,17:47:99:449,0,820:127
+4 169085855 rs2251558 A G 1161.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.721;DB;DP=244;Dels=0.00;FS=5.247;HaplotypeScore=0.4893;MLEAC=1;MLEAF=0.167;MQ=59.91;MQ0=0;MQRankSum=1.574;QD=13.99;ReadPosRankSum=0.454;SB=-5.590e+02;VQSLOD=7.4222;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,226,2915:127 0|1:43,40:83:99:1196,0,1294:127 0|0:84,0:84:99:0,232,2950:127
+4 177855678 rs1545090 A G 7065.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1696;MLEAC=6;MLEAF=1.00;MQ=59.50;MQ0=0;QD=30.85;SB=-3.799e+03;VQSLOD=11.0069;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,84:84:99:2701,235,0:127 1|1:0,79:80:99:2401,211,0:127 1|1:0,65:65:99:1963,165,0:127
+4 184811263 rs2871379 A G 6376.01 PASS AC=6;AF=1.00;AN=6;DB;DP=211;Dels=0.00;FS=0.000;HaplotypeScore=0.5084;MLEAC=6;MLEAF=1.00;MQ=58.38;MQ0=0;QD=30.22;SB=-3.472e+03;VQSLOD=10.4879;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2539,199,0:127 1|1:0,67:67:99:2072,165,0:127 1|1:0,66:66:99:1765,135,0:127
+4 190538070 rs62323772 G A 106.69 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.099;DB;DP=19;Dels=0.00;FS=0.000;HaplotypeScore=4.3562;MLEAC=3;MLEAF=0.500;MQ=33.71;MQ0=0;MQRankSum=0.591;QD=5.93;ReadPosRankSum=-0.394;SB=-7.601e+01;VQSLOD=-1.3921;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:4,9:13:69:69,0,92:3 0|0:1,0:1:3:0,3,33:3 1|1:0,4:5:6:77,6,0:3
+5 3276081 rs4866540 G A 3653.01 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=5.002;DB;DP=176;Dels=0.00;FS=2.778;HaplotypeScore=19.0040;MLEAC=4;MLEAF=0.667;MQ=57.74;MQ0=0;MQRankSum=-0.569;QD=20.76;ReadPosRankSum=1.308;SB=-6.610e+02;VQSLOD=3.1833;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,71:72:99:2337,175,0:127 1|0:26,25:51:99:719,0,601:127 1|0:26,27:53:99:597,0,662:127
+5 10958957 rs852590 T C 8430.01 PASS AC=6;AF=1.00;AN=6;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=1.8272;MLEAC=6;MLEAF=1.00;MQ=59.31;MQ0=0;QD=34.69;SB=-4.118e+03;VQSLOD=10.8702;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3594,277,0:127 1|1:1,73:74:99:2318,181,0:127 1|1:0,72:72:99:2518,196,0:127
+5 20435939 rs12697584 A C 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-5.396;DB;DP=246;Dels=0.00;FS=4.681;HaplotypeScore=0.8744;MLEAC=2;MLEAF=0.333;MQ=59.74;MQ0=0;MQRankSum=-0.850;QD=14.20;ReadPosRankSum=0.391;SB=-1.305e+03;VQSLOD=8.1327;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:85,0:85:99:0,241,3183:127 0|1:41,37:78:99:1062,0,1304:127 0|1:39,44:83:99:1263,0,1222:127
+5 29069162 rs658439 G A 499.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.981;DB;DP=199;Dels=0.00;FS=11.196;HaplotypeScore=1.6038;MLEAC=1;MLEAF=0.167;MQ=52.70;MQ0=0;MQRankSum=-0.608;QD=9.42;ReadPosRankSum=-1.103;SB=-2.310e+02;VQSLOD=4.0183;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:86,0:86:99:0,211,2509:110 0|0:60,0:60:99:0,111,1240:110 0|1:30,23:53:99:534,0,523:110
+5 36740339 rs36676 T G 6995.01 PASS AC=6;AF=1.00;AN=6;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=2.0768;MLEAC=6;MLEAF=1.00;MQ=59.46;MQ0=0;QD=30.41;SB=-3.034e+03;VQSLOD=10.9208;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2261,195,0:127 1|1:0,83:83:99:2579,217,0:127 1|1:0,71:72:99:2155,181,0:127
+5 49438828 rs137880658 G A 424.24 VQSRTrancheSNP99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-4.376;DB;DP=748;DS;Dels=0.00;FS=7.184;HaplotypeScore=20.6618;MLEAC=1;MLEAF=0.167;MQ=19.63;MQ0=158;MQRankSum=3.819;QD=1.70;ReadPosRankSum=1.191;SB=-2.220e+02;VQSLOD=-98.2155;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:249,0:249:99:0,555,4848:127 0|1:204,46:250:99:459,0,2894:127 0|0:249,0:249:99:0,480,4326:127
+5 58243302 rs457566 A C 6237.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.663;DB;DP=233;Dels=0.00;FS=3.429;HaplotypeScore=0.8859;MLEAC=5;MLEAF=0.833;MQ=59.70;MQ0=0;MQRankSum=-0.232;QD=26.77;ReadPosRankSum=0.957;SB=-2.566e+03;VQSLOD=9.3537;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,87:87:99:2923,229,0:127 1|0:36,50:86:99:1429,0,1006:127 1|1:0,60:60:99:1885,147,0:127
+5 70856663 rs157045 T C 2040.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.809;DB;DP=234;Dels=0.00;FS=1.824;HaplotypeScore=1.0544;MLEAC=2;MLEAF=0.333;MQ=58.65;MQ0=0;MQRankSum=0.989;QD=13.16;ReadPosRankSum=0.719;SB=-8.820e+02;VQSLOD=7.3513;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,41:85:99:1087,0,1448:127 1|0:28,42:70:99:992,0,789:127 0|0:79,0:79:99:0,181,2342:127
+5 80900719 rs2917540 G T 4938.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.261;DB;DP=240;Dels=0.00;FS=0.489;HaplotypeScore=0.5959;MLEAC=4;MLEAF=0.667;MQ=59.63;MQ0=0;MQRankSum=-2.115;QD=20.58;ReadPosRankSum=0.288;SB=-2.548e+03;VQSLOD=8.4417;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:52,40:92:99:1207,0,1768:127 0|1:37,33:70:99:960,0,1205:127 1|1:0,78:78:99:2771,211,0:127
+5 93119893 rs6879620 G A 4262.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.930;DB;DP=239;Dels=0.00;FS=1.050;HaplotypeScore=2.1583;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=0.891;QD=17.83;ReadPosRankSum=-2.670;SB=-2.596e+03;VQSLOD=7.0681;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:49,42:91:99:1098,0,1410:127 0|1:36,38:74:99:890,0,1008:127 1|1:0,74:74:99:2274,178,0:127
+5 102962771 rs6866105 A G 5087.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.665;DB;DP=200;Dels=0.00;FS=8.083;HaplotypeScore=2.2837;MLEAC=5;MLEAF=0.833;MQ=58.71;MQ0=0;MQRankSum=-0.503;QD=25.44;ReadPosRankSum=-0.482;SB=-2.172e+03;VQSLOD=7.2212;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2373,184,0:127 1|1:0,59:59:99:1776,141,0:127 1|0:31,35:66:99:938,0,803:127
+5 112750674 rs9716322 A C 598.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-0.293;DB;DP=199;Dels=0.00;FS=2.948;HaplotypeScore=0.3328;MLEAC=1;MLEAF=0.167;MQ=45.61;MQ0=2;MQRankSum=-2.398;QD=12.21;ReadPosRankSum=1.159;SB=-8.101e+01;VQSLOD=2.7717;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,196,2534:127 0|1:23,26:49:99:633,0,479:127 0|0:68,1:69:99:0,174,2191:127
+5 121302662 . G T 143.72 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.413;DP=150;Dels=0.02;FS=161.482;HaplotypeScore=2.8631;MLEAC=3;MLEAF=0.500;MQ=35.76;MQ0=1;MQRankSum=0.422;QD=0.96;ReadPosRankSum=-5.675;SB=-1.466e+00;VQSLOD=-77.2440;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:32,21:53:99:120,0,251:5 0/1:35,12:47:57:57,0,271:5 0/1:35,12:47:4:4,0,259:5
+5 132377304 rs72801439 A T 858.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.113;DB;DP=219;Dels=0.00;FS=10.632;HaplotypeScore=0.6638;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.881;QD=11.29;ReadPosRankSum=0.435;SB=-3.050e+02;VQSLOD=7.6837;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,163,2149:127 0|1:43,33:76:99:893,0,1280:127 0|0:76,0:76:99:0,199,2553:127
+5 144321895 rs35068704 A T 1535.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.048;DB;DP=203;Dels=0.00;FS=13.289;HaplotypeScore=0.5075;MLEAC=2;MLEAF=0.333;MQ=57.36;MQ0=0;MQRankSum=2.191;QD=11.37;ReadPosRankSum=-1.361;SB=-7.640e+02;VQSLOD=5.7211;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,25:59:99:595,0,976:127 0|0:68,0:68:99:0,190,2435:127 1|0:39,37:76:99:979,0,1274:127
+5 154441640 rs467330 A C 1133.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.127;DB;DP=235;Dels=0.00;FS=2.103;HaplotypeScore=1.1893;MLEAC=1;MLEAF=0.167;MQ=59.65;MQ0=0;MQRankSum=0.766;QD=12.59;ReadPosRankSum=-0.535;SB=-6.500e+02;VQSLOD=9.8335;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2172:127 0|1:45,45:90:99:1168,0,1368:127 0|0:82,1:84:99:0,226,2825:127
+5 164600452 rs7711548 C A 588.32 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-3.291;DB;DP=192;Dels=0.02;FS=2.319;HaplotypeScore=32.6662;MLEAC=6;MLEAF=1.00;MQ=57.55;MQ0=0;MQRankSum=1.536;QD=3.06;ReadPosRankSum=-1.533;SB=-2.085e+03;VQSLOD=-1.4325;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:15,52:69:18:155,18,0:15 1|1:11,55:66:36:296,36,0:15 1|1:18,36:54:15:175,15,0:15
+5 174249229 rs11739079 C G 1613.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.540;DB;DP=190;Dels=0.00;FS=6.482;HaplotypeScore=2.0416;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-0.898;QD=11.86;ReadPosRankSum=0.601;SB=-8.320e+02;VQSLOD=7.7782;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,43:75:99:1069,0,928:123 0|0:54,0:54:99:0,123,1554:123 1|0:33,27:61:99:583,0,883:123
+6 1620147 rs2569882 T C 252.30 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.862;DB;DP=38;Dels=0.00;FS=8.023;HaplotypeScore=0.2217;MLEAC=5;MLEAF=0.833;MQ=57.65;MQ0=0;MQRankSum=-0.918;QD=9.34;ReadPosRankSum=0.584;SB=-4.005e+01;VQSLOD=4.3258;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:0,17:17:21:254,21,0:4 1|0:3,8:11:2:0,3,40:4 1|1:0,10:10:3:39,3,0:4
+6 9408051 rs11751621 C G 5140.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.350;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.6637;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=-0.205;QD=21.33;ReadPosRankSum=-0.033;SB=-2.552e+03;VQSLOD=8.9881;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:42,40:82:99:1156,0,1352:127 0|1:36,45:81:99:1253,0,1134:127 1|1:0,78:78:99:2731,214,0:127
+6 18687376 rs9383429 A T 1162.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.746;DB;DP=232;Dels=0.00;FS=0.638;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.42;MQ0=0;MQRankSum=-0.733;QD=15.71;ReadPosRankSum=-0.146;SB=-6.490e+02;VQSLOD=9.4317;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,241,3181:127 0|0:76,0:76:99:0,217,2832:127 0|1:33,41:74:99:1197,0,1008:127
+6 26687649 . G C 1654.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=9.718;DP=410;Dels=0.00;FS=5.973;HaplotypeScore=5.0786;MLEAC=2;MLEAF=0.333;MQ=28.19;MQ0=32;MQRankSum=0.048;QD=6.17;ReadPosRankSum=0.408;SB=-5.110e+02;VQSLOD=-8.7346;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:117,49:166:99:1013,0,2495:127 0|0:141,1:142:99:0,244,2576:127 1|0:70,32:102:99:680,0,1048:127
+6 35346891 . C T 483.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-6.402;DP=205;Dels=0.02;FS=214.154;HaplotypeScore=4.5086;MLEAC=3;MLEAF=0.500;MQ=51.07;MQ0=1;MQRankSum=-2.038;QD=2.36;ReadPosRankSum=-2.250;SB=-1.065e-02;VQSLOD=-116.9542;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:48,31:79:99:257,0,635:80 0/1:40,22:62:99:185,0,308:80 0/1:44,16:60:80:80,0,534:80
+6 45421630 rs1343799 C T 5422.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.419;DB;DP=240;Dels=0.00;FS=10.689;HaplotypeScore=0.7979;MLEAC=4;MLEAF=0.667;MQ=59.46;MQ0=0;MQRankSum=1.089;QD=22.59;ReadPosRankSum=1.252;SB=-2.647e+03;VQSLOD=7.7035;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:29,43:72:99:1445,0,843:127 0|1:43,37:80:99:1121,0,1302:127 1|1:0,88:88:99:2856,220,0:127
+6 55412503 rs12201934 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.280;DB;DP=182;Dels=0.00;FS=0.744;HaplotypeScore=0.3332;MLEAC=1;MLEAF=0.167;MQ=59.64;MQ0=0;MQRankSum=-0.765;QD=13.57;ReadPosRankSum=0.147;SB=-4.590e+02;VQSLOD=9.3766;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,181,2371:127 0|1:35,30:65:99:917,0,1046:127 0|0:56,0:56:99:0,150,1969:127
+6 71018445 rs1321063 C A 518.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.668;DB;DP=185;Dels=0.00;FS=1.618;HaplotypeScore=0.6919;MLEAC=1;MLEAF=0.167;MQ=58.93;MQ0=0;MQRankSum=0.355;QD=8.78;ReadPosRankSum=1.306;SB=-4.020e+02;VQSLOD=7.7510;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,184,2404:127 0|0:59,0:59:99:0,160,2065:127 0|1:29,30:59:99:553,0,809:127
+6 79887872 rs6454101 C T 2130.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.355;DB;DP=204;Dels=0.00;FS=11.823;HaplotypeScore=2.3806;MLEAC=3;MLEAF=0.500;MQ=59.68;MQ0=0;MQRankSum=1.011;QD=10.44;ReadPosRankSum=-0.769;SB=-1.370e+03;VQSLOD=7.5187;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:31,31:62:99:806,0,990:127 0/1:42,31:73:99:606,0,921:127 0/1:29,40:69:99:757,0,749:127
+6 89947117 rs9942462 A G 5019.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.654;DB;DP=181;Dels=0.00;FS=0.000;HaplotypeScore=3.3205;MLEAC=6;MLEAF=1.00;MQ=53.30;MQ0=0;MQRankSum=0.428;QD=27.73;ReadPosRankSum=1.090;SB=-3.151e+03;VQSLOD=5.6763;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:60:99:1715,138,0:92 1|1:1,55:56:93:1401,93,0:92 1|1:0,65:65:99:1903,153,0:92
+6 110345430 rs56272355 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.241;DB;DP=230;Dels=0.00;FS=2.159;HaplotypeScore=1.7615;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-0.200;QD=11.46;ReadPosRankSum=-0.480;SB=-5.580e+02;VQSLOD=8.9824;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,220,2860:127 0|0:75,0:76:99:0,184,2321:127 0|1:35,42:77:99:917,0,926:127
+6 120734422 rs62424426 T C 1091.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.268;DB;DP=208;Dels=0.00;FS=4.347;HaplotypeScore=0.7034;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=-0.188;QD=14.36;ReadPosRankSum=-0.149;SB=-5.560e+02;VQSLOD=8.6529;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,205,2692:127 0|0:61,0:61:99:0,175,2298:127 0|1:39,37:76:99:1126,0,1140:127
+6 131725921 . G A 64.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=3.650;DP=182;Dels=0.00;FS=3.535;HaplotypeScore=2.2441;MLEAC=1;MLEAF=0.167;MQ=50.85;MQ0=1;MQRankSum=-6.039;QD=1.31;ReadPosRankSum=-1.757;SB=-4.901e+01;VQSLOD=-0.6667;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:59,0:60:99:0,168,1897:98 0|1:33,16:49:99:99,0,790:98 0|0:73,0:73:99:0,156,1824:98
+6 143691852 rs17792267 C T 3641.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.465;DB;DP=203;Dels=0.00;FS=2.413;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=1.198;QD=27.17;ReadPosRankSum=-1.140;SB=-1.772e+03;VQSLOD=8.8712;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:29,33:62:99:1131,0,803:127 1|1:0,72:72:99:2510,196,0:127 0|0:69,0:69:99:0,190,2480:127
+6 154006585 rs7752561 G A 919.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.323;DB;DP=223;Dels=0.00;FS=0.000;HaplotypeScore=0.8254;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-0.749;QD=10.45;ReadPosRankSum=-0.155;SB=-5.260e+02;VQSLOD=8.8368;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,202,2601:127 0|1:51,37:88:99:954,0,1475:127 0|0:65,0:65:99:0,175,2269:127
+6 162459664 rs2849564 C T 1819.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.399;DB;DP=201;Dels=0.00;FS=3.295;HaplotypeScore=2.5591;MLEAC=2;MLEAF=0.333;MQ=59.38;MQ0=0;MQRankSum=1.792;QD=12.90;ReadPosRankSum=-1.045;SB=-1.068e+03;VQSLOD=8.1160;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:28,40:68:99:1007,0,793:120 1|0:38,35:73:99:851,0,831:120 0|0:60,0:60:99:0,120,1421:120
+7 4683258 rs62450857 G A 1127.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.991;DB;DP=191;Dels=0.00;FS=3.236;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=57.16;MQ0=0;MQRankSum=1.297;QD=14.09;ReadPosRankSum=0.469;SB=-4.730e+02;VQSLOD=6.6182;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,196,2495:120 0|1:38,42:80:99:1162,0,1016:120 0|0:45,0:45:99:0,120,1531:120
+7 12502849 rs848025 C G 4109.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.809;DB;DP=220;Dels=0.00;FS=1.141;HaplotypeScore=1.8049;MLEAC=4;MLEAF=0.667;MQ=59.56;MQ0=0;MQRankSum=0.625;QD=18.68;ReadPosRankSum=-0.019;SB=-1.989e+03;VQSLOD=8.7123;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:47,45:92:99:1216,0,1501:127 1|1:0,71:71:99:2145,184,0:127 0|1:27,30:57:99:748,0,743:127
+7 29544610 rs6462145 A T 4020.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.326;DB;DP=189;Dels=0.00;FS=5.388;HaplotypeScore=1.2974;MLEAC=4;MLEAF=0.667;MQ=58.54;MQ0=0;MQRankSum=1.295;QD=21.27;ReadPosRankSum=-1.212;SB=-1.878e+03;VQSLOD=7.3155;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:27,49:77:99:1466,0,733:127 1|1:0,64:64:99:1888,147,0:127 0|1:18,27:48:99:666,0,410:127
+7 38984187 rs118081099 A C 569.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.110;DB;DP=182;Dels=0.00;FS=6.196;HaplotypeScore=0.5533;MLEAC=1;MLEAF=0.167;MQ=54.22;MQ0=0;MQRankSum=1.675;QD=9.33;ReadPosRankSum=1.162;SB=-1.260e+02;VQSLOD=4.8877;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:72,0:72:99:0,196,2446:127 0|1:38,23:61:99:604,0,1196:127 0|0:48,1:49:99:0,138,1711:127
+7 48862174 rs965346 A G 877.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.250;DB;DP=194;Dels=0.00;FS=6.112;HaplotypeScore=0.6489;MLEAC=1;MLEAF=0.167;MQ=57.54;MQ0=0;MQRankSum=2.058;QD=16.25;ReadPosRankSum=-1.204;SB=-4.040e+02;VQSLOD=6.2372;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3007:127 0|0:58,0:58:99:0,160,2067:127 0|1:22,32:54:99:912,0,686:127
+7 56584972 rs34475770 C T 2465.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.103;DB;DP=255;Dels=0.00;FS=2.230;HaplotypeScore=0.8840;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=1.766;QD=15.03;ReadPosRankSum=1.126;SB=-1.412e+03;VQSLOD=6.5725;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:91,0:91:99:0,259,3369:127 0|1:36,49:85:99:1444,0,1000:127 0|1:38,41:79:99:1060,0,1084:127
+7 62232046 . C T 1155.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.643;DP=230;Dels=0.00;FS=6.304;HaplotypeScore=12.7679;MLEAC=1;MLEAF=0.167;MQ=58.61;MQ0=3;MQRankSum=-0.697;QD=15.20;ReadPosRankSum=-1.202;SB=-4.440e+02;VQSLOD=2.5725;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:77,1:78:99:0,217,2824:127 0|0:76,0:76:99:0,202,2604:127 0|1:34,42:76:99:1190,0,994:127
+7 69334430 rs917719 C T 1223.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.841;DB;DP=193;Dels=0.00;FS=6.656;HaplotypeScore=0.8147;MLEAC=2;MLEAF=0.333;MQ=59.81;MQ0=0;MQRankSum=1.631;QD=9.63;ReadPosRankSum=1.458;SB=-7.370e+02;VQSLOD=7.0004;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:770,0,1258:127 1|0:26,24:50:99:492,0,840:127 0|0:66,0:66:99:0,172,2210:127
+7 79508376 rs2525826 G T 716.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.152;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=0.8658;MLEAC=1;MLEAF=0.167;MQ=59.48;MQ0=0;MQRankSum=1.420;QD=13.51;ReadPosRankSum=0.263;SB=-4.080e+02;VQSLOD=9.5728;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:65:99:0,181,2312:127 0|0:78,0:78:99:0,226,2916:127 0|1:27,26:53:99:751,0,845:127
+7 89752110 rs39232 T G 3944.01 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=1.4477;MLEAC=6;MLEAF=1.00;MQ=38.19;MQ0=21;QD=18.26;SB=-2.716e+03;VQSLOD=2.6638;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:1564,132,0:101 1|1:0,79:79:99:1258,108,0:101 1|1:0,66:66:99:1122,102,0:101
+7 101161506 rs2158739 C T 4522.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.698;DB;DP=172;Dels=0.00;FS=4.280;HaplotypeScore=1.5077;MLEAC=5;MLEAF=0.833;MQ=58.18;MQ0=0;MQRankSum=-0.295;QD=26.29;ReadPosRankSum=0.974;SB=-2.287e+03;VQSLOD=8.2831;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:73:99:2443,202,0:110 1|0:23,26:50:99:711,0,586:110 1|1:0,48:49:99:1368,111,0:110
+7 110843795 rs214455 A G 8548.01 PASS AC=6;AF=1.00;AN=6;DB;DP=258;Dels=0.00;FS=0.000;HaplotypeScore=2.3561;MLEAC=6;MLEAF=1.00;MQ=59.35;MQ0=0;QD=33.13;SB=-4.197e+03;VQSLOD=10.7627;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3535,301,0:127 1|1:0,66:66:99:2270,193,0:127 1|1:0,86:86:99:2743,229,0:127
+7 124589684 rs12113765 G C 4948.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.607;DB;DP=243;Dels=0.00;FS=1.040;HaplotypeScore=3.3790;MLEAC=4;MLEAF=0.667;MQ=58.74;MQ0=0;MQRankSum=1.246;QD=20.36;ReadPosRankSum=-0.387;SB=-2.411e+03;VQSLOD=7.0507;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,27:71:99:796,0,1350:127 1|1:0,84:85:99:2760,217,0:127 0|1:41,46:87:99:1392,0,1180:127
+7 144383888 rs73161092 T C 689.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.434;DB;DP=254;Dels=0.00;FS=8.629;HaplotypeScore=0.0000;MLEAC=1;MLEAF=0.167;MQ=59.54;MQ0=0;MQRankSum=0.163;QD=8.62;ReadPosRankSum=-1.802;SB=-3.560e+02;VQSLOD=6.4544;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:90,0:90:99:0,268,3553:127 0|1:47,33:80:99:724,0,1392:127 0|0:84,0:84:99:0,202,2644:127
+7 152208470 rs6464236 G C 4321.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.233;DB;DP=169;Dels=0.00;FS=1.635;HaplotypeScore=1.3568;MLEAC=5;MLEAF=0.833;MQ=57.18;MQ0=1;MQRankSum=1.907;QD=25.57;ReadPosRankSum=0.892;SB=-2.137e+03;VQSLOD=6.7602;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:1,56:57:99:1949,150,0:122 1|1:0,54:54:99:1557,123,0:122 1|0:30,28:58:99:815,0,715:122
+7 158686803 rs55765467 T C 200.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-10.112;DB;DP=310;Dels=0.00;FS=2.596;HaplotypeScore=1.2829;MLEAC=3;MLEAF=0.500;MQ=47.32;MQ0=0;MQRankSum=-4.959;QD=0.65;ReadPosRankSum=-10.956;SB=-1.206e+03;VQSLOD=-17.6411;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:64,33:97:99:148,0,1949:32 0/1:73,45:118:58:58,0,2287:32 0/1:65,30:95:33:33,0,1910:32
+8 4048009 rs7007410 C T 2713.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.954;DB;DP=197;Dels=0.00;FS=2.483;HaplotypeScore=0.7125;MLEAC=3;MLEAF=0.500;MQ=57.03;MQ0=0;MQRankSum=0.882;QD=13.77;ReadPosRankSum=-0.496;SB=-1.406e+03;VQSLOD=6.5035;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:38,30:68:99:847,0,1168:127 0/1:30,30:60:99:916,0,921:127 0/1:32,36:69:99:989,0,882:127
+8 8974322 rs28440961 G A 1682.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.716;DB;DP=190;Dels=0.00;FS=0.579;HaplotypeScore=1.5434;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=-0.652;QD=12.65;ReadPosRankSum=0.746;SB=-7.040e+02;VQSLOD=9.3708;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:32,32:64:99:790,0,1002:125 1|0:33,36:69:99:931,0,866:125 0|0:57,0:57:99:0,126,1622:125
+8 14463368 rs1355302 T A 2523.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.793;DB;DP=236;Dels=0.00;FS=3.776;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=59.14;MQ0=0;MQRankSum=-0.381;QD=15.97;ReadPosRankSum=-0.045;SB=-1.421e+03;VQSLOD=7.6920;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,43:79:99:1332,0,1176:127 0|0:78,0:78:99:0,214,2749:127 1|0:35,44:79:99:1230,0,1162:127
+8 21736923 rs13256921 G A 217.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=1.884;DB;DP=93;Dels=0.00;FS=5.533;HaplotypeScore=6.4995;MLEAC=1;MLEAF=0.167;MQ=42.13;MQ0=3;MQRankSum=0.517;QD=6.79;ReadPosRankSum=1.706;SB=-1.980e+02;VQSLOD=-2.6430;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:34,0:34:66:0,66,691:41 0|1:15,17:32:99:252,0,211:41 0|0:27,0:27:42:0,42,425:41
+8 42044954 rs1058720 G A 2760.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.313;DB;DP=157;Dels=0.00;FS=0.000;HaplotypeScore=2.0979;MLEAC=4;MLEAF=0.667;MQ=58.82;MQ0=0;MQRankSum=-2.021;QD=17.58;ReadPosRankSum=-0.462;SB=-1.377e+03;VQSLOD=7.5777;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1820,147,0:127 1|0:24,27:51:99:555,0,233:127 1|0:26,24:50:99:427,0,458:127
+8 56608897 rs57623198 C T 1911.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.515;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1327;MLEAC=2;MLEAF=0.333;MQ=59.80;MQ0=0;MQRankSum=0.336;QD=12.66;ReadPosRankSum=-2.326;SB=-9.730e+02;VQSLOD=8.5587;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,229,2989:127 0|1:44,30:74:99:897,0,1444:127 0|1:44,33:77:99:1053,0,1400:127
+8 66327344 rs13282622 G A 3918.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.514;DB;DP=192;Dels=0.00;FS=3.531;HaplotypeScore=1.6541;MLEAC=4;MLEAF=0.667;MQ=58.91;MQ0=0;MQRankSum=0.706;QD=20.41;ReadPosRankSum=-0.327;SB=-2.091e+03;VQSLOD=8.6266;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,37:71:99:1137,0,923:127 0|1:32,28:61:99:806,0,988:127 1|1:0,60:60:99:1975,153,0:127
+8 78181000 rs1563030 A G 5178.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.030;DB;DP=192;Dels=0.00;FS=4.675;HaplotypeScore=2.9473;MLEAC=5;MLEAF=0.833;MQ=59.62;MQ0=0;MQRankSum=-0.467;QD=26.97;ReadPosRankSum=-0.855;SB=-2.617e+03;VQSLOD=7.3445;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:59:99:1954,150,0:127 1|0:32,37:70:99:1198,0,888:127 1|1:0,63:63:99:2026,156,0:127
+8 90278211 rs11998540 A T 357.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.457;DB;DP=69;Dels=0.00;FS=1.289;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=1.415;QD=8.12;ReadPosRankSum=1.258;SB=-9.501e+01;VQSLOD=5.9584;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:12,7:19:99:185,0,416:60 0|0:25,0:25:60:0,60,805:60 1|0:16,9:25:99:211,0,500:60
+8 102355800 rs10103956 G T 1756.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.927;DB;DP=189;Dels=0.00;FS=5.921;HaplotypeScore=1.5445;MLEAC=2;MLEAF=0.333;MQ=59.66;MQ0=0;MQRankSum=-0.420;QD=13.41;ReadPosRankSum=-0.019;SB=-5.470e+02;VQSLOD=8.1563;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:32,38:70:99:1078,0,999:127 1|0:35,26:61:99:717,0,1103:127 0|0:57,0:58:99:0,156,2011:127
+8 113376378 rs41340951 T C 4379.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.019;DB;DP=211;Dels=0.00;FS=1.826;HaplotypeScore=0.2629;MLEAC=4;MLEAF=0.667;MQ=59.85;MQ0=0;MQRankSum=1.273;QD=20.75;ReadPosRankSum=0.144;SB=-1.893e+03;VQSLOD=8.8374;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,67:67:99:2221,187,0:127 1|0:32,37:69:99:1083,0,1066:127 1|0:35,40:75:99:1075,0,1108:127
+8 123499998 rs9693135 T C 926.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.820;DB;DP=207;Dels=0.00;FS=2.678;HaplotypeScore=1.2574;MLEAC=2;MLEAF=0.333;MQ=56.08;MQ0=0;MQRankSum=-2.729;QD=6.34;ReadPosRankSum=-0.269;SB=-8.230e+02;VQSLOD=4.3016;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2301:127 0|1:37,35:72:99:622,0,769:127 0|1:48,26:74:99:343,0,1280:127
+8 132727531 rs7000409 G A 2050.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.475;DB;DP=220;Dels=0.00;FS=5.203;HaplotypeScore=1.9424;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=1.230;QD=14.14;ReadPosRankSum=-0.871;SB=-1.080e+03;VQSLOD=7.7925;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:29,35:64:99:1215,0,785:127 0|0:75,0:75:99:0,190,2423:127 1|0:50,31:81:99:874,0,1611:127
+8 140651779 rs1469039 G A 1879.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.189;DB;DP=145;Dels=0.00;FS=0.000;HaplotypeScore=1.7695;MLEAC=3;MLEAF=0.500;MQ=58.39;MQ0=0;MQRankSum=0.745;QD=12.96;ReadPosRankSum=-0.159;SB=-9.360e+02;VQSLOD=9.0059;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:23,24:47:99:612,0,740:127 0/1:21,31:52:99:684,0,478:127 0/1:20,26:46:99:622,0,367:127
+9 2072356 rs4741641 T G 2054.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.235;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=2.2089;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=1.166;QD=13.00;ReadPosRankSum=-0.475;SB=-1.004e+03;VQSLOD=9.0206;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:49,45:94:99:1245,0,1615:127 0|0:85,0:85:99:0,217,2818:127 1|0:32,32:64:99:848,0,936:127
+9 16302655 rs9298755 T G 1394.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.356;DB;DP=200;Dels=0.00;FS=0.000;HaplotypeScore=3.1863;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=0.586;QD=10.03;ReadPosRankSum=-0.771;SB=-8.720e+02;VQSLOD=7.7724;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:60,1:61:99:0,165,2004:127 0|1:29,28:57:99:494,0,759:127 0|1:41,40:82:99:939,0,1069:127
+9 25201692 rs9408058 C T 8643.01 PASS AC=6;AF=1.00;AN=6;DB;DP=245;Dels=0.00;FS=0.000;HaplotypeScore=0.8982;MLEAC=6;MLEAF=1.00;MQ=59.13;MQ0=0;QD=35.28;SB=-4.398e+03;VQSLOD=12.1738;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3312,256,0:127 1|1:0,81:81:99:2771,223,0:127 1|1:0,75:75:99:2560,202,0:127
+9 44998848 . C G 254.43 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=2.203;DP=193;Dels=0.00;FS=10.822;HaplotypeScore=0.2447;MLEAC=5;MLEAF=0.833;MQ=6.48;MQ0=163;MQRankSum=-1.206;QD=1.32;ReadPosRankSum=0.790;SB=-1.372e+02;VQSLOD=-6.6319;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:39,27:66:23:132,0,23:8 1|1:36,16:52:15:118,15,0:8 0|1:53,22:75:1:45,6,0:8
+9 69810010 rs113063015 A C 280.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.223;DB;DP=716;DS;Dels=0.00;FS=8.996;HaplotypeScore=39.8350;MLEAC=3;MLEAF=0.500;MQ=37.32;MQ0=64;MQRankSum=-3.574;QD=0.39;ReadPosRankSum=-0.897;SB=-1.065e-02;VQSLOD=-68.1677;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:218,23:241:73:73,0,3591:70 0/1:188,39:227:99:172,0,4233:70 0/1:217,31:248:74:74,0,5042:70
+9 78741390 rs7049138 G A 1797.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.235;DB;DP=168;Dels=0.00;FS=4.003;HaplotypeScore=1.0858;MLEAC=3;MLEAF=0.500;MQ=55.32;MQ0=2;MQRankSum=-1.673;QD=16.34;ReadPosRankSum=-0.626;SB=-7.740e+02;VQSLOD=5.1915;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:828,0,918:80 1|1:0,40:40:81:1014,81,0:80 0|0:58,0:58:99:0,129,1403:80
+9 89010476 rs164937 T C 736.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-3.977;DB;DP=216;Dels=0.00;FS=1.481;HaplotypeScore=1.0649;MLEAC=1;MLEAF=0.167;MQ=39.79;MQ0=9;MQRankSum=-3.028;QD=9.56;ReadPosRankSum=0.542;SB=-4.240e+02;VQSLOD=2.0772;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,174,2097:127 0|1:40,37:77:99:771,0,876:127 0|0:73,0:73:99:0,183,2147:127
+9 98491693 rs12337935 C A 1474.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.098;DB;DP=97;Dels=0.00;FS=14.282;HaplotypeScore=1.7726;MLEAC=4;MLEAF=0.667;MQ=58.64;MQ0=0;MQRankSum=-0.224;QD=15.20;ReadPosRankSum=1.166;SB=-6.430e+02;VQSLOD=5.7986;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,12:26:99:348,0,352:63 1|1:0,28:29:63:781,63,0:63 0|1:17,25:42:99:387,0,364:63
+9 109619207 rs4743032 A T 3810.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.859;DB;DP=214;Dels=0.00;FS=10.284;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=0.557;QD=25.07;ReadPosRankSum=-0.836;SB=-2.019e+03;VQSLOD=8.1399;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:37,39:76:99:1185,0,1225:127 1|1:0,76:76:99:2625,202,0:127 0|0:62,0:62:99:0,156,2049:127
+9 130235282 . A G 166.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=-8.543;DP=232;Dels=0.00;FS=233.037;HaplotypeScore=2.9977;MLEAC=2;MLEAF=0.333;MQ=59.04;MQ0=0;MQRankSum=-2.038;QD=1.15;ReadPosRankSum=-7.649;SB=-3.100e-03;VQSLOD=-139.8496;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:74,14:88:99:0,108,2160:59 0|1:42,36:79:60:60,0,966:59 0|1:47,18:65:99:145,0,922:59
+9 138617823 rs55724592 C T 53.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.380;DB;DP=72;Dels=0.00;FS=8.078;HaplotypeScore=1.0225;MLEAC=1;MLEAF=0.167;MQ=58.90;MQ0=0;MQRankSum=0.851;QD=2.66;ReadPosRankSum=-0.344;SB=-9.096e+01;VQSLOD=4.2652;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:20,0:20:48:0,48,580:44 0|0:32,0:32:48:0,48,577:44 0|1:10,10:20:88:88,0,199:44
+10 4588547 rs313427 C T 1985.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.695;DB;DP=204;Dels=0.00;FS=1.813;HaplotypeScore=0.6137;MLEAC=2;MLEAF=0.333;MQ=59.73;MQ0=0;MQRankSum=0.241;QD=14.18;ReadPosRankSum=0.717;SB=-1.082e+03;VQSLOD=9.7784;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:39,35:74:99:1029,0,1182:127 1|0:32,34:66:99:995,0,1024:127 0|0:64,0:64:99:0,175,2242:127
+10 11560326 rs4424580 C T 1027.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.178;DB;DP=207;Dels=0.00;FS=0.573;HaplotypeScore=2.1981;MLEAC=2;MLEAF=0.333;MQ=59.24;MQ0=0;MQRankSum=-0.988;QD=7.78;ReadPosRankSum=-0.492;SB=-7.450e+02;VQSLOD=8.4594;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:41,32:73:99:609,0,930:96 1|0:29,30:59:99:457,0,570:96 0|0:74,1:75:96:0,96,1185:96
+10 19567676 rs61458006 G T 599.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.610;DB;DP=195;Dels=0.00;FS=0.844;HaplotypeScore=0.8795;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.191;QD=11.31;ReadPosRankSum=-1.635;SB=-2.780e+02;VQSLOD=9.3606;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:75,0:75:99:0,208,2645:127 0|1:30,23:53:99:634,0,915:127 0|0:67,0:67:99:0,199,2540:127
+10 29082980 . G C 42.53 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.216;DP=107;Dels=0.00;FS=60.979;HaplotypeScore=1.0911;MLEAC=3;MLEAF=0.500;MQ=55.72;MQ0=0;MQRankSum=-0.633;QD=0.40;ReadPosRankSum=-4.307;SB=-2.798e-01;VQSLOD=-11.1718;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,12:43:12:12,0,757:12 0/1:19,11:30:35:35,0,429:12 0/1:25,9:34:34:34,0,388:12
+10 38560911 rs80189231 T A 1072.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.103;DB;DP=356;Dels=0.00;FS=12.038;HaplotypeScore=5.4015;MLEAC=3;MLEAF=0.500;MQ=49.74;MQ0=6;MQRankSum=-2.686;QD=3.01;ReadPosRankSum=0.797;SB=-1.690e+02;VQSLOD=-3.5129;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:109,26:135:99:389,0,2879:127 0/1:84,27:111:99:539,0,2214:127 0/1:93,17:110:99:183,0,2277:127
+10 56495833 rs6481118 G A 7633.01 PASS AC=6;AF=1.00;AN=6;DB;DP=212;Dels=0.00;FS=0.000;HaplotypeScore=0.3328;MLEAC=6;MLEAF=1.00;MQ=54.64;MQ0=0;QD=36.00;SB=-2.091e+03;VQSLOD=8.6651;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,62:62:99:2383,184,0:127 1|1:1,67:68:99:2375,184,0:127 1|1:0,82:82:99:2875,223,0:127
+10 65355538 rs10733794 A G 2464.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.392;DB;DP=193;Dels=0.00;FS=7.473;HaplotypeScore=2.5434;MLEAC=3;MLEAF=0.500;MQ=58.06;MQ0=2;MQRankSum=0.999;QD=18.96;ReadPosRankSum=-1.229;SB=-1.065e+03;VQSLOD=6.3934;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:830,0,1039:127 1|1:1,64:65:99:1679,153,0:127 0|0:63,0:63:99:0,159,2042:127
+10 74020452 rs72806301 C A 1116.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.155;DB;DP=135;Dels=0.00;FS=3.279;HaplotypeScore=0.8720;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=-0.818;QD=11.88;ReadPosRankSum=1.484;SB=-6.800e+02;VQSLOD=7.2668;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:20,27:47:99:658,0,446:104 0|0:41,0:41:99:0,105,1324:104 1|0:25,22:47:99:497,0,482:104
+10 85258657 rs4454662 C A 7638.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.716;DB;DP=223;Dels=0.00;FS=4.523;HaplotypeScore=1.1326;MLEAC=6;MLEAF=1.00;MQ=58.32;MQ0=0;MQRankSum=-1.230;QD=34.25;ReadPosRankSum=1.152;SB=-2.841e+03;VQSLOD=7.6461;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,64:65:99:2156,169,0:127 1|1:0,89:89:99:2982,238,0:127 1|1:0,69:69:99:2500,196,0:127
+10 95435201 rs2422323 C T 4017.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.438;DB;DP=203;Dels=0.00;FS=13.125;HaplotypeScore=3.2358;MLEAC=4;MLEAF=0.667;MQ=55.24;MQ0=0;MQRankSum=1.174;QD=19.79;ReadPosRankSum=-0.655;SB=-2.177e+03;VQSLOD=4.5957;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:38,45:83:99:1327,0,931:127 1|1:1,63:64:99:1966,156,0:127 0|1:30,25:56:99:724,0,807:127
+10 106444111 rs72813617 A G 632.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.838;DB;DP=197;Dels=0.00;FS=4.121;HaplotypeScore=1.8154;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-1.142;QD=12.40;ReadPosRankSum=-1.947;SB=-2.390e+02;VQSLOD=7.6230;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:84,0:84:99:0,241,3129:127 0|0:62,0:62:99:0,159,2008:127 0|1:27,24:51:99:667,0,584:127
+10 116646860 rs4752347 T A 4159.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.459;DB;DP=197;Dels=0.00;FS=3.519;HaplotypeScore=0.6313;MLEAC=4;MLEAF=0.667;MQ=59.27;MQ0=0;MQRankSum=1.049;QD=21.11;ReadPosRankSum=-1.271;SB=-2.347e+03;VQSLOD=8.3322;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2191,169,0:127 1|0:31,35:66:99:1031,0,863:127 1|0:31,37:68:99:937,0,774:127
+10 125452232 rs7900707 A G 3211.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-6.610;DB;DP=189;Dels=0.00;FS=17.742;HaplotypeScore=0.0000;MLEAC=4;MLEAF=0.667;MQ=59.66;MQ0=0;MQRankSum=0.614;QD=16.99;ReadPosRankSum=-0.321;SB=-1.553e+03;VQSLOD=6.9018;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:61:99:1944,168,0:127 1|0:44,26:70:99:627,0,1357:127 1|0:29,29:58:99:682,0,862:127
+10 132949760 rs10829924 A C 684.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.328;DB;DP=215;Dels=0.00;FS=15.464;HaplotypeScore=1.3183;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-1.053;QD=10.53;ReadPosRankSum=-2.893;SB=-2.920e+02;VQSLOD=5.8891;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:80,0:81:99:0,229,2999:127 0|0:69,0:69:99:0,175,2268:127 0|1:35,30:65:99:719,0,1046:127
+11 10741836 rs72853043 G A 175.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=0.127;DB;DP=174;Dels=0.00;FS=7.087;HaplotypeScore=7.4618;MLEAC=1;MLEAF=0.167;MQ=55.72;MQ0=1;MQRankSum=-1.291;QD=3.44;ReadPosRankSum=-1.185;SB=-2.220e+02;VQSLOD=1.6095;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,105,1278:65 0|0:42,0:45:66:0,66,802:65 0|1:21,29:51:99:210,0,469:65
+11 19325064 rs793250 G A 5752.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.080;DB;DP=203;Dels=0.00;FS=2.530;HaplotypeScore=0.8165;MLEAC=5;MLEAF=0.833;MQ=59.35;MQ0=0;MQRankSum=-0.061;QD=28.34;ReadPosRankSum=0.095;SB=-3.093e+03;VQSLOD=9.4617;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2527,190,0:127 1|1:0,78:78:99:2626,205,0:127 1|0:32,22:54:99:599,0,768:127
+11 26026566 rs7942277 T C 5414.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=58.89;MQ0=0;QD=30.76;SB=-2.812e+03;VQSLOD=11.0501;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1707,132,0:122 1|1:0,53:53:99:1581,123,0:122 1|1:0,70:70:99:2126,163,0:122
+11 35980461 rs263087 A T 3494.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.701;DB;DP=186;Dels=0.00;FS=0.000;HaplotypeScore=2.9570;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=0.836;QD=18.79;ReadPosRankSum=0.007;SB=-1.535e+03;VQSLOD=7.6407;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,35:71:99:1001,0,1165:127 0|1:30,26:56:99:710,0,796:127 1|1:0,59:59:99:1783,144,0:127
+11 44985620 rs7106313 C T 338.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.185;DB;DP=162;Dels=0.00;FS=4.840;HaplotypeScore=2.0046;MLEAC=1;MLEAF=0.167;MQ=56.94;MQ0=0;MQRankSum=2.019;QD=8.67;ReadPosRankSum=0.983;SB=-2.190e+02;VQSLOD=6.6624;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:79,0:80:99:0,174,2084:72 0|0:43,0:43:72:0,72,877:72 0|1:20,18:39:99:373,0,365:72
+11 55040918 rs187118824 A T 1019.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.079;DB;DP=65;Dels=0.02;FS=12.723;HaplotypeScore=0.9771;MLEAC=2;MLEAF=0.333;MQ=56.64;MQ0=1;MQRankSum=0.323;QD=25.48;ReadPosRankSum=0.873;SB=-2.060e+01;VQSLOD=4.4200;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:2,9:11:48:325,0,48:50 0|0:24,1:25:63:0,63,833:50 1|0:6,22:28:51:733,0,51:50
+11 65339346 rs1194104 C T 1804.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.465;DB;DP=189;Dels=0.00;FS=8.432;HaplotypeScore=2.2718;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=-0.120;QD=13.67;ReadPosRankSum=-0.306;SB=-1.061e+03;VQSLOD=7.9509;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,157,2050:127 0|1:30,35:65:99:781,0,822:127 0|1:23,44:67:99:1062,0,690:127
+11 75978490 rs655877 G C 2986.25 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.846;DB;DP=127;Dels=0.00;FS=5.433;HaplotypeScore=0.2629;MLEAC=5;MLEAF=0.833;MQ=59.42;MQ0=0;MQRankSum=0.026;QD=23.51;ReadPosRankSum=0.168;SB=-1.613e+03;VQSLOD=7.0404;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,50:50:99:1405,111,0:101 1|1:0,45:46:99:1269,102,0:101 1|0:17,14:31:99:354,0,469:101
+11 86061661 rs11825046 T C 6014.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.250;DB;DP=282;Dels=0.00;FS=0.960;HaplotypeScore=1.6440;MLEAC=4;MLEAF=0.667;MQ=59.57;MQ0=0;MQRankSum=1.057;QD=21.33;ReadPosRankSum=-1.763;SB=-3.081e+03;VQSLOD=7.3485;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:54,49:103:99:1498,0,1848:127 1|1:0,83:83:99:2924,223,0:127 0|1:44,52:96:99:1592,0,1380:127
+11 103989190 rs1545865 T C 4915.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.030;DB;DP=219;Dels=0.00;FS=1.231;HaplotypeScore=1.2090;MLEAC=4;MLEAF=0.667;MQ=59.37;MQ0=0;MQRankSum=1.103;QD=22.44;ReadPosRankSum=0.773;SB=-2.213e+03;VQSLOD=8.9081;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:23,40:63:99:1203,0,669:127 0|1:36,52:88:99:1433,0,1136:127 1|1:0,68:68:99:2279,178,0:127
+11 113825129 rs1150234 G A 2441.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.977;DB;DP=210;Dels=0.00;FS=0.000;HaplotypeScore=2.0700;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=0.877;QD=11.63;ReadPosRankSum=0.262;SB=-1.513e+03;VQSLOD=9.0378;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,33:63:99:881,0,774:127 0/1:46,33:80:99:726,0,1020:127 0/1:32,35:67:99:873,0,759:127
+11 123470819 rs1148095 T C 6964.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.850;DB;DP=242;Dels=0.00;FS=1.477;HaplotypeScore=1.3868;MLEAC=5;MLEAF=0.833;MQ=59.25;MQ0=0;MQRankSum=-1.734;QD=28.78;ReadPosRankSum=-0.749;SB=-3.242e+03;VQSLOD=8.7854;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3408,265,0:127 1|0:35,51:86:99:1520,0,1059:127 1|1:0,64:64:99:2036,157,0:127
+11 132780959 rs61906922 C T 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.221;DB;DP=263;Dels=0.00;FS=0.601;HaplotypeScore=1.8444;MLEAC=1;MLEAF=0.167;MQ=59.58;MQ0=0;MQRankSum=0.997;QD=15.25;ReadPosRankSum=-0.746;SB=-6.890e+02;VQSLOD=8.8133;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:87,0:87:99:0,250,2877:127 0|0:87,0:88:99:0,253,3009:127 0|1:43,45:88:99:1377,0,1138:127
+12 5922552 rs17786352 C G 1874.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.386;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.3053;MLEAC=2;MLEAF=0.333;MQ=54.49;MQ0=0;MQRankSum=2.656;QD=13.11;ReadPosRankSum=1.042;SB=-9.400e+02;VQSLOD=4.7495;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,35:79:99:897,0,1383:127 1|0:28,36:64:99:1016,0,734:127 0|0:88,0:88:99:0,238,3004:127
+12 12560642 rs10772559 G T 501.28 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=0.747;DB;DP=229;Dels=0.04;FS=17.409;HaplotypeScore=19.6989;MLEAC=4;MLEAF=0.667;MQ=49.37;MQ0=0;MQRankSum=-3.656;QD=2.19;ReadPosRankSum=-5.397;SB=-2.196e+03;VQSLOD=-10.1992;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,66:66:24:273,24,0:24 1|0:29,45:74:99:148,0,702:24 1|0:33,46:80:99:122,0,781:24
+12 21328424 rs4149040 G C 2565.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.888;DB;DP=252;Dels=0.00;FS=9.753;HaplotypeScore=0.6082;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=1.166;QD=15.18;ReadPosRankSum=0.966;SB=-1.181e+03;VQSLOD=7.5539;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,49:89:99:1534,0,1308:127 0|0:83,0:83:99:0,241,3117:127 1|0:45,35:80:99:1070,0,1402:127
+12 29935607 rs7305813 A C 810.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.307;DB;DP=203;Dels=0.00;FS=14.326;HaplotypeScore=1.9820;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.164;QD=12.86;ReadPosRankSum=-0.733;SB=-2.950e+02;VQSLOD=7.9009;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:71,0:71:99:0,193,2479:127 0|0:69,0:69:99:0,196,2464:127 0|1:28,35:63:99:845,0,847:127
+12 39118960 rs79977305 G A 1330.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.307;DB;DP=263;Dels=0.00;FS=0.597;HaplotypeScore=1.4583;MLEAC=1;MLEAF=0.167;MQ=58.83;MQ0=0;MQRankSum=1.925;QD=13.57;ReadPosRankSum=-0.548;SB=-7.360e+02;VQSLOD=7.3733;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,2869:127 0|0:84,0:84:99:0,229,2712:127 0|1:51,47:98:99:1365,0,1343:127
+12 48120010 rs3829317 A C 4015.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.659;DB;DP=162;Dels=0.00;FS=1.828;HaplotypeScore=2.1844;MLEAC=5;MLEAF=0.833;MQ=59.48;MQ0=0;MQRankSum=0.154;QD=24.78;ReadPosRankSum=0.482;SB=-2.240e+03;VQSLOD=8.1337;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2024,163,0:110 1|0:24,27:51:99:550,0,540:110 1|1:0,48:48:99:1441,111,0:110
+12 58867437 rs140632614 G T 829.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=1.409;DB;DP=144;Dels=0.00;FS=68.612;HaplotypeScore=0.8667;MLEAC=4;MLEAF=0.667;MQ=35.15;MQ0=16;MQRankSum=-7.440;QD=5.76;ReadPosRankSum=-0.245;SB=-1.011e+00;VQSLOD=-16.4891;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,24:58:99:291,0,1100:44 0|1:42,8:50:61:61,0,1319:44 1|1:1,35:36:45:519,45,0:44
+12 79238948 rs10778234 C T 3719.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.187;DB;DP=241;Dels=0.00;FS=7.073;HaplotypeScore=0.2447;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.381;QD=15.43;ReadPosRankSum=0.579;SB=-1.864e+03;VQSLOD=7.8136;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:42,35:77:99:1049,0,1213:127 0/1:37,32:69:99:988,0,957:127 0/1:42,53:95:99:1682,0,1062:127
+12 90856710 rs825945 T C 1096.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.342;DB;DP=193;Dels=0.00;FS=2.164;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=2.071;QD=9.70;ReadPosRankSum=-1.697;SB=-5.710e+02;VQSLOD=7.3118;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:80,0:80:99:0,232,3042:127 0|1:30,21:51:99:511,0,921:127 0|1:36,26:62:99:624,0,1085:127
+12 101460237 rs7965836 C T 3485.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.070;DB;DP=247;Dels=0.00;FS=2.895;HaplotypeScore=0.6556;MLEAC=3;MLEAF=0.500;MQ=59.83;MQ0=0;MQRankSum=-0.655;QD=14.11;ReadPosRankSum=-0.983;SB=-1.581e+03;VQSLOD=8.4872;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,43:83:99:1287,0,1179:127 0/1:44,36:80:99:1068,0,1363:127 0/1:43,41:84:99:1130,0,1321:127
+12 112830546 rs150699511 C A 487.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.014;DB;DP=179;Dels=0.00;FS=0.860;HaplotypeScore=2.3392;MLEAC=1;MLEAF=0.167;MQ=59.16;MQ0=0;MQRankSum=1.141;QD=8.86;ReadPosRankSum=0.950;SB=-2.870e+02;VQSLOD=8.1138;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:62:99:0,166,2141:127 0|1:34,21:55:99:522,0,751:127 0|0:62,0:62:99:0,141,1808:127
+12 122942070 rs10744217 A G 1812.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.353;DB;DP=179;Dels=0.00;FS=0.663;HaplotypeScore=1.4184;MLEAC=3;MLEAF=0.500;MQ=58.69;MQ0=0;MQRankSum=0.992;QD=15.10;ReadPosRankSum=1.081;SB=-5.860e+02;VQSLOD=8.4750;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,36:71:99:762,0,1100:92 1|1:0,48:49:93:1095,93,0:92 0|0:59,0:59:99:0,120,1560:92
+12 130522866 rs1613499 C T 3975.01 PASS AC=6;AF=1.00;AN=6;DB;DP=130;Dels=0.00;FS=0.000;HaplotypeScore=0.6332;MLEAC=6;MLEAF=1.00;MQ=59.11;MQ0=0;QD=30.58;SB=-1.386e+03;VQSLOD=10.2250;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,57:57:99:1939,144,0:73 1|1:0,34:34:75:990,75,0:73 1|1:0,39:39:78:1046,78,0:73
+13 21520045 rs9509464 A C 5103.01 PASS AC=6;AF=1.00;AN=6;DB;DP=195;Dels=0.00;FS=0.000;HaplotypeScore=1.6144;MLEAC=6;MLEAF=1.00;MQ=47.37;MQ0=0;QD=26.17;SB=-2.582e+03;VQSLOD=5.1918;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2106,186,0:98 1|1:0,78:78:99:1856,162,0:98 1|1:0,46:46:99:1141,99,0:98
+13 28463938 rs954750 C T 2740.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.206;DB;DP=242;Dels=0.00;FS=0.000;HaplotypeScore=4.0078;MLEAC=2;MLEAF=0.333;MQ=59.46;MQ0=0;MQRankSum=0.880;QD=16.61;ReadPosRankSum=-0.617;SB=-1.312e+03;VQSLOD=6.7692;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:40,43:83:99:1362,0,1242:127 1|0:35,47:82:99:1417,0,1010:127 0|0:76,0:77:99:0,205,2635:127
+13 37484693 rs1571317 T C 971.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.315;DB;DP=229;Dels=0.00;FS=3.052;HaplotypeScore=0.6603;MLEAC=1;MLEAF=0.167;MQ=58.51;MQ0=0;MQRankSum=1.885;QD=12.78;ReadPosRankSum=-0.343;SB=-5.750e+02;VQSLOD=7.3064;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:94,0:94:99:0,253,3258:127 0|1:35,41:76:99:1006,0,924:127 0|0:59,0:59:99:0,147,1872:127
+13 46407442 rs11147990 G A 2668.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.227;DB;DP=199;Dels=0.00;FS=0.530;HaplotypeScore=1.8025;MLEAC=3;MLEAF=0.500;MQ=58.99;MQ0=0;MQRankSum=0.023;QD=20.21;ReadPosRankSum=-0.452;SB=-1.651e+03;VQSLOD=9.2006;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:36,33:69:99:994,0,1056:127 0|0:67,0:67:99:0,141,1821:127 1|1:0,63:63:99:1719,135,0:127
+13 56456878 rs2997102 C A 9454.01 PASS AC=6;AF=1.00;AN=6;DB;DP=257;Dels=0.00;FS=0.000;HaplotypeScore=0.9537;MLEAC=6;MLEAF=1.00;MQ=59.57;MQ0=0;QD=36.79;SB=-4.826e+03;VQSLOD=11.5149;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,99:99:99:3692,280,0:127 1|1:0,88:88:99:3239,253,0:127 1|1:0,70:70:99:2523,193,0:127
+13 65275154 rs359338 G A 1963.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.733;DB;DP=173;Dels=0.00;FS=3.628;HaplotypeScore=0.9480;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=-0.676;QD=14.54;ReadPosRankSum=0.399;SB=-1.054e+03;VQSLOD=8.4489;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:31,28:59:99:883,0,990:108 1|0:39,37:76:99:1119,0,1112:108 0|0:38,0:38:99:0,108,1390:108
+13 74611546 rs73214804 C T 639.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.487;DB;DP=164;Dels=0.00;FS=0.000;HaplotypeScore=1.4071;MLEAC=1;MLEAF=0.167;MQ=58.95;MQ0=0;MQRankSum=0.902;QD=11.21;ReadPosRankSum=-0.541;SB=-3.000e+02;VQSLOD=8.8824;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:53,0:53:99:0,135,1773:110 0|0:53,1:54:99:0,111,1440:110 0|1:24,33:57:99:674,0,388:110
+13 83670546 . G A 169.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.301;DP=178;Dels=0.00;FS=0.000;HaplotypeScore=36.5059;MLEAC=2;MLEAF=0.333;MQ=42.20;MQ0=11;MQRankSum=-6.654;QD=1.38;ReadPosRankSum=-0.761;SB=-1.340e+02;VQSLOD=-20.4053;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:37,16:53:99:139,0,523:90 0|0:51,4:55:91:0,91,1393:90 1|0:58,12:70:69:69,0,1214:90
+13 92742124 rs2148446 G A 1884.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.340;DB;DP=213;Dels=0.00;FS=0.000;HaplotypeScore=0.3156;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=0;MQRankSum=-2.935;QD=12.99;ReadPosRankSum=-0.579;SB=-9.540e+02;VQSLOD=7.2833;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|1:38,38:76:99:1130,0,1190:127 0|0:68,0:68:99:0,190,2454:127 1|0:38,31:69:99:793,0,1094:127
+13 101976707 rs527328 A T 9240.01 PASS AC=6;AF=1.00;AN=6;DB;DP=259;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=53.28;MQ0=0;QD=35.68;SB=-4.696e+03;VQSLOD=7.5241;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3410,262,0:127 1|1:0,88:88:99:3195,247,0:127 1|1:1,78:79:99:2635,202,0:127
+13 109990322 rs7328109 T C 7198.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.487;DB;DP=245;Dels=0.00;FS=5.887;HaplotypeScore=1.8793;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=-0.236;QD=29.38;ReadPosRankSum=0.136;SB=-3.593e+03;VQSLOD=8.8925;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2825,220,0:127 1|0:33,54:87:99:1591,0,933:127 1|1:0,79:79:99:2782,214,0:127
+14 20313371 rs10137604 A C 2154.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.894;DB;DP=255;Dels=0.00;FS=0.000;HaplotypeScore=2.0503;MLEAC=2;MLEAF=0.333;MQ=56.32;MQ0=1;MQRankSum=1.608;QD=13.72;ReadPosRankSum=0.126;SB=-1.124e+03;VQSLOD=5.6223;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,48:88:99:1426,0,1229:127 0|0:98,0:98:99:0,268,3527:127 1|0:43,26:69:99:767,0,1284:127
+14 38160457 rs2181345 A C 4683.01 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=2.5449;MLEAC=6;MLEAF=1.00;MQ=59.00;MQ0=0;QD=27.71;SB=-2.390e+03;VQSLOD=9.9888;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1818,141,0:107 1|1:0,58:58:99:1523,123,0:107 1|1:0,53:55:99:1342,108,0:107
+14 47568119 rs1952206 T C 3399.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-9.721;DB;DP=230;Dels=0.00;FS=0.483;HaplotypeScore=0.6577;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=-0.479;QD=14.78;ReadPosRankSum=1.261;SB=-1.667e+03;VQSLOD=9.1589;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:41,43:84:99:1239,0,1315:127 0/1:28,43:71:99:1178,0,816:127 0/1:40,35:75:99:982,0,1314:127
+14 56951735 rs1189276 G A 6939.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=3.878;DB;DP=235;Dels=0.00;FS=9.373;HaplotypeScore=0.9063;MLEAC=5;MLEAF=0.833;MQ=59.52;MQ0=0;MQRankSum=-0.550;QD=29.53;ReadPosRankSum=1.104;SB=-3.438e+03;VQSLOD=8.7592;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,92:93:99:3558,274,0:127 1|1:0,60:60:99:2120,165,0:127 1|0:40,42:82:99:1261,0,1194:127
+14 68051087 rs11628035 G A 4028.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.928;DB;DP=236;Dels=0.00;FS=8.184;HaplotypeScore=1.3296;MLEAC=3;MLEAF=0.500;MQ=58.83;MQ0=0;MQRankSum=1.834;QD=25.49;ReadPosRankSum=2.590;SB=-1.989e+03;VQSLOD=6.7911;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:1265,0,1112:127 1|1:0,81:81:99:2763,214,0:127 0|0:78,0:78:99:0,208,2673:127
+14 87263523 rs2542229 A C 8104.01 PASS AC=6;AF=1.00;AN=6;DB;DP=239;Dels=0.00;FS=0.000;HaplotypeScore=0.6305;MLEAC=6;MLEAF=1.00;MQ=59.17;MQ0=0;QD=33.91;SB=-4.393e+03;VQSLOD=11.3001;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,77:77:99:2810,214,0:127 1|1:0,85:85:99:2877,223,0:127 1|1:0,77:77:99:2417,187,0:127
+14 96490389 rs72702859 C G 3394.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.529;DB;DP=264;Dels=0.00;FS=2.746;HaplotypeScore=3.1300;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=-1.258;QD=18.25;ReadPosRankSum=-0.961;SB=-1.966e+03;VQSLOD=6.3356;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:34,52:86:99:1358,0,886:127 1|1:0,100:100:99:2036,180,0:127 0|0:78,0:78:99:0,184,2393:127
+14 106085773 rs2955055 C T 2115.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.746;DB;DP=172;Dels=0.00;FS=18.420;HaplotypeScore=2.9489;MLEAC=3;MLEAF=0.500;MQ=35.68;MQ0=18;MQRankSum=3.251;QD=12.30;ReadPosRankSum=0.100;SB=-5.530e+02;VQSLOD=1.2866;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,33:65:99:600,0,554:80 0/1:30,42:72:99:1001,0,400:80 0/1:12,23:35:80:553,0,80:80
+15 23743658 rs142070302 T A 1007.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.164;DB;DP=408;Dels=0.00;FS=166.853;HaplotypeScore=53.5447;MLEAC=3;MLEAF=0.500;MQ=38.96;MQ0=14;MQRankSum=-6.283;QD=2.47;ReadPosRankSum=2.486;SB=-1.079e-02;VQSLOD=-304.7942;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:104,39:143:99:365,0,2802:45 0/1:99,40:139:99:636,0,2335:45 0/1:97,28:126:45:45,0,2324:45
+15 42065422 rs2925337 A C 5231.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.68;MQ0=0;QD=29.72;SB=-3.112e+03;VQSLOD=11.0322;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,54:54:99:1770,138,0:127 1|1:0,68:68:99:1750,138,0:127 1|1:0,54:54:99:1711,132,0:127
+15 53677501 . T G 770.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-8.969;DP=210;Dels=0.00;FS=347.467;HaplotypeScore=2.0911;MLEAC=3;MLEAF=0.500;MQ=58.31;MQ0=0;MQRankSum=0.438;QD=3.67;ReadPosRankSum=-6.409;SB=-5.499e-03;VQSLOD=-307.0964;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:59,20:79:94:94,0,1389:94 0/1:41,31:72:99:438,0,721:94 0/1:37,21:59:99:277,0,521:94
+15 62088952 rs35033959 A T 3546.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.220;DB;DP=241;Dels=0.00;FS=14.286;HaplotypeScore=0.2774;MLEAC=3;MLEAF=0.500;MQ=59.77;MQ0=0;MQRankSum=-1.969;QD=14.71;ReadPosRankSum=0.341;SB=-1.970e+03;VQSLOD=6.3785;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:45,44:89:99:1265,0,1533:127 0/1:34,38:72:99:1133,0,1137:127 0/1:41,39:80:99:1148,0,1303:127
+15 71657506 . A G 140.40 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.611;DP=133;Dels=0.00;FS=35.593;HaplotypeScore=4.0622;MLEAC=2;MLEAF=0.333;MQ=51.29;MQ0=1;MQRankSum=-3.344;QD=1.53;ReadPosRankSum=-3.999;SB=-5.015e+01;VQSLOD=-4.8050;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:46,11:57:93:93,0,851:15 1|0:23,12:35:86:86,0,299:15 0|0:33,8:41:15:0,15,503:15
+15 92857342 rs12101550 A G 2734.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.995;DB;DP=226;Dels=0.00;FS=3.761;HaplotypeScore=1.5682;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=0.761;QD=12.10;ReadPosRankSum=-0.587;SB=-1.469e+03;VQSLOD=9.1510;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:45,37:82:99:853,0,1356:127 0/1:29,40:69:99:966,0,852:127 0/1:38,37:75:99:954,0,1085:127
+15 100799787 rs4965610 C T 2133.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.373;DB;DP=230;Dels=0.00;FS=1.037;HaplotypeScore=0.5427;MLEAC=3;MLEAF=0.500;MQ=58.84;MQ0=0;MQRankSum=0.169;QD=9.28;ReadPosRankSum=-0.098;SB=-1.328e+03;VQSLOD=7.8802;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:40,36:76:99:948,0,701:127 0/1:45,38:83:99:761,0,635:127 0/1:35,36:71:99:463,0,706:127
+16 5754758 rs11644707 C T 1012.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.777;DB;DP=161;Dels=0.00;FS=0.000;HaplotypeScore=2.4572;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=0.699;QD=9.64;ReadPosRankSum=2.624;SB=-5.580e+02;VQSLOD=7.0970;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:31,26:57:99:627,0,943:125 0|0:56,0:56:99:0,126,1597:125 1|0:32,16:48:99:424,0,785:125
+16 11397080 rs1019552 T C 2295.44 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.01;FS=0.000;HaplotypeScore=8.2178;MLEAC=6;MLEAF=1.00;MQ=59.32;MQ0=0;QD=13.58;SB=-2.379e+03;VQSLOD=4.3801;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:96:1220,96,0:9 1|1:0,48:48:9:78,9,0:9 1|1:0,48:48:81:1035,81,0:9
+16 30509723 rs7193693 A G 497.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.054;DB;DP=167;Dels=0.00;FS=0.000;HaplotypeScore=1.1605;MLEAC=1;MLEAF=0.167;MQ=57.89;MQ0=0;MQRankSum=-0.545;QD=9.38;ReadPosRankSum=0.541;SB=-2.410e+02;VQSLOD=8.4265;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,153,2009:101 0|0:57,0:57:99:0,102,1304:101 0|1:26,27:53:99:532,0,526:101
+16 34610294 rs72812776 C T 603.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.361;DB;DP=270;Dels=0.00;FS=6.065;HaplotypeScore=3.1650;MLEAC=1;MLEAF=0.167;MQ=59.66;MQ0=0;MQRankSum=1.603;QD=7.83;ReadPosRankSum=0.296;SB=-2.820e+02;VQSLOD=3.3685;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:123,0:123:99:0,343,4443:127 0|0:69,1:70:99:0,184,2397:127 0|1:48,29:77:99:638,0,1483:127
+16 55910673 rs17265788 G C 2345.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.657;DB;DP=208;Dels=0.00;FS=3.162;HaplotypeScore=1.9213;MLEAC=3;MLEAF=0.500;MQ=59.67;MQ0=0;MQRankSum=-0.333;QD=16.63;ReadPosRankSum=-0.425;SB=-1.468e+03;VQSLOD=8.3665;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:33,33:66:99:769,0,761:122 0|0:67,0:67:99:0,123,1506:122 1|1:0,75:75:99:1621,132,0:122
+16 65776985 rs72784548 T C 3527.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.439;DB;DP=195;Dels=0.00;FS=1.228;HaplotypeScore=0.8795;MLEAC=4;MLEAF=0.667;MQ=58.78;MQ0=0;MQRankSum=1.630;QD=18.09;ReadPosRankSum=1.358;SB=-1.904e+03;VQSLOD=7.6763;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2351,181,0:127 1|0:33,28:61:99:586,0,710:127 1|0:31,35:66:99:590,0,468:127
+16 83153777 rs4395063 T C 3143.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.771;DB;DP=205;Dels=0.00;FS=1.805;HaplotypeScore=1.0370;MLEAC=4;MLEAF=0.667;MQ=59.55;MQ0=0;MQRankSum=-1.380;QD=15.33;ReadPosRankSum=0.424;SB=-2.104e+03;VQSLOD=8.8241;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:31,31:62:99:867,0,865:127 0|1:45,28:73:99:412,0,801:127 1|1:0,70:70:99:1906,150,0:127
+16 88914235 rs12932521 C T 329.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.978;DB;DP=114;Dels=0.00;FS=1.931;HaplotypeScore=0.9402;MLEAC=1;MLEAF=0.167;MQ=58.60;MQ0=0;MQRankSum=0.854;QD=7.84;ReadPosRankSum=-0.339;SB=-2.970e+02;VQSLOD=8.1036;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,102,1192:39 0|0:29,0:29:39:0,39,468:39 0|1:15,26:42:99:364,0,105:39
+17 5764764 rs2309483 C G 4071.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.237;DB;DP=154;Dels=0.00;FS=0.000;HaplotypeScore=4.4102;MLEAC=5;MLEAF=0.833;MQ=58.88;MQ0=0;MQRankSum=0.456;QD=26.44;ReadPosRankSum=0.385;SB=-1.791e+03;VQSLOD=6.9458;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:62:99:2049,165,0:107 1|0:23,26:49:99:648,0,482:107 1|1:0,43:43:99:1374,108,0:107
+17 14096866 . C T 489.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=4.537;DP=181;Dels=0.00;FS=33.896;HaplotypeScore=1.0782;MLEAC=3;MLEAF=0.500;MQ=24.52;MQ0=71;MQRankSum=0.353;QD=2.70;ReadPosRankSum=0.385;SB=-1.450e+02;VQSLOD=-6.2174;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:48,17:66:99:228,0,822:63 0/1:42,16:58:99:237,0,389:63 0/1:44,13:57:63:63,0,523:63
+17 21547285 rs62049731 A C 1322.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.987;DB;DP=569;Dels=0.00;FS=2.322;HaplotypeScore=42.4511;MLEAC=3;MLEAF=0.500;MQ=44.59;MQ0=24;MQRankSum=-6.240;QD=2.32;ReadPosRankSum=-5.171;SB=-6.369e+02;VQSLOD=-39.5319;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:146,28:174:99:217,0,4187:127 0/1:162,56:218:99:804,0,4298:127 0/1:139,38:177:99:340,0,3842:127
+17 33513649 rs3744366 A G 3743.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.729;DB;DP=213;Dels=0.00;FS=0.526;HaplotypeScore=2.9053;MLEAC=4;MLEAF=0.667;MQ=58.99;MQ0=0;MQRankSum=-0.152;QD=17.57;ReadPosRankSum=0.530;SB=-2.067e+03;VQSLOD=8.0191;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,40:84:99:1083,0,1341:127 1|1:0,67:67:99:2074,162,0:127 0|1:37,24:62:99:586,0,1015:127
+17 44809197 rs116187585 A G 8703.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-0.554;DB;DP=254;Dels=0.00;FS=3.487;HaplotypeScore=4.0582;MLEAC=6;MLEAF=1.00;MQ=59.58;MQ0=0;MQRankSum=1.677;QD=34.26;ReadPosRankSum=1.483;SB=-4.228e+03;VQSLOD=6.6144;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3470,268,0:127 1|1:0,82:84:99:2846,220,0:127 1|1:0,73:73:99:2387,184,0:127
+17 55158811 rs7217371 G A 2849.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.616;DB;DP=206;Dels=0.00;FS=0.511;HaplotypeScore=1.0970;MLEAC=3;MLEAF=0.500;MQ=59.66;MQ0=0;MQRankSum=0.103;QD=13.83;ReadPosRankSum=0.958;SB=-1.448e+03;VQSLOD=9.9440;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,31:72:99:982,0,1147:127 0/1:35,40:75:99:1236,0,984:127 0/1:32,27:59:99:670,0,882:127
+17 66991216 rs61697543 T C 738.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.530;DB;DP=252;Dels=0.00;FS=1.490;HaplotypeScore=1.7074;MLEAC=1;MLEAF=0.167;MQ=59.36;MQ0=0;MQRankSum=0.771;QD=10.86;ReadPosRankSum=-0.724;SB=-3.930e+02;VQSLOD=8.8864;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:95,0:95:99:0,268,3511:127 0|0:89,0:89:99:0,235,3058:127 0|1:33,35:68:99:773,0,965:127
+18 1629264 rs5025369 A G 86.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.739;DB;DP=149;Dels=0.00;FS=15.359;HaplotypeScore=7.1355;MLEAC=2;MLEAF=0.333;MQ=39.72;MQ0=11;MQRankSum=-2.543;QD=0.81;ReadPosRankSum=0.088;SB=-3.380e+01;VQSLOD=-6.2052;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,15:66:50:50,0,1143:49 0|0:37,5:42:81:0,81,941:49 1|0:35,6:41:75:75,0,818:49
+18 10010426 rs4797393 T C 4197.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.425;DB;DP=210;Dels=0.00;FS=1.132;HaplotypeScore=1.2660;MLEAC=4;MLEAF=0.667;MQ=59.43;MQ0=0;MQRankSum=-2.916;QD=19.99;ReadPosRankSum=0.379;SB=-2.001e+03;VQSLOD=7.0312;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,65:65:99:2247,181,0:127 1|0:35,39:75:99:1170,0,967:127 1|0:41,29:70:99:780,0,1052:127
+18 20025030 rs4800406 A G 1113.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.700;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=1.6804;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=1.643;QD=12.65;ReadPosRankSum=-1.166;SB=-6.160e+02;VQSLOD=8.6574;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,223,2978:127 0|1:46,42:88:99:1148,0,1460:127 0|0:64,0:64:99:0,175,2303:127
+18 41449098 rs2045671 C T 8380.01 PASS AC=6;AF=1.00;AN=6;DB;DP=237;Dels=0.00;FS=0.000;HaplotypeScore=1.3482;MLEAC=6;MLEAF=1.00;MQ=59.65;MQ0=0;QD=35.36;SB=-4.462e+03;VQSLOD=11.6464;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,76:76:99:2756,214,0:127 1|1:0,75:75:99:2635,202,0:127 1|1:0,86:86:99:2989,229,0:127
+18 50973169 rs11661305 A G 5320.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=2.753;DB;DP=196;Dels=0.00;FS=2.568;HaplotypeScore=1.1306;MLEAC=5;MLEAF=0.833;MQ=57.73;MQ0=0;MQRankSum=0.246;QD=27.14;ReadPosRankSum=0.186;SB=-2.411e+03;VQSLOD=7.5009;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2621,202,0:127 1|0:30,37:67:99:1009,0,842:127 1|1:0,55:55:99:1690,132,0:127
+18 67950442 rs62091919 T G 1779.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.517;DB;DP=195;Dels=0.00;FS=0.562;HaplotypeScore=1.5454;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.006;QD=12.89;ReadPosRankSum=-0.268;SB=-9.170e+02;VQSLOD=9.6268;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:40,32:72:99:967,0,1318:127 0|0:55,2:57:99:0,141,1865:127 1|0:36,30:66:99:851,0,1042:127
+18 75204349 rs9948476 C T 646.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.965;DB;DP=185;Dels=0.00;FS=0.817;HaplotypeScore=1.3995;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=0.276;QD=10.95;ReadPosRankSum=-0.158;SB=-3.210e+02;VQSLOD=9.3748;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:66:99:0,168,2026:127 0|0:60,0:60:99:0,147,1768:127 0|1:34,25:59:99:681,0,893:127
+19 3739001 rs56138006 C T 976.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.634;DB;DP=118;Dels=0.00;FS=3.676;HaplotypeScore=1.4356;MLEAC=2;MLEAF=0.333;MQ=58.66;MQ0=0;MQRankSum=0.753;QD=11.22;ReadPosRankSum=1.107;SB=-6.380e+02;VQSLOD=7.4541;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:612,0,559:45 0|0:31,0:31:45:0,45,527:45 1|0:12,23:35:93:403,0,93:45
+19 11730690 rs4804613 C T 2578.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=5.057;DB;DP=197;Dels=0.00;FS=0.529;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.36;MQ0=0;MQRankSum=0.416;QD=13.09;ReadPosRankSum=-0.554;SB=-1.389e+03;VQSLOD=9.3908;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:21,26:47:99:586,0,623:127 0/1:42,45:87:99:1192,0,1055:127 0/1:32,30:63:99:839,0,932:127
+19 20782710 rs10413568 T C 6304.01 PASS AC=6;AF=1.00;AN=6;DB;DP=203;Dels=0.00;FS=0.000;HaplotypeScore=0.6919;MLEAC=6;MLEAF=1.00;MQ=59.56;MQ0=0;QD=31.05;SB=-2.367e+03;VQSLOD=10.7708;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2375,214,0:127 1|1:0,80:80:99:2480,217,0:127 1|1:0,49:49:99:1449,129,0:127
+19 28150587 rs4404191 A G 7419.01 PASS AC=6;AF=1.00;AN=6;DB;DP=209;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=59.61;MQ0=0;QD=35.50;SB=-3.717e+03;VQSLOD=11.9901;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:2584,202,0:127 1|1:0,74:74:99:2509,193,0:127 1|1:0,65:65:99:2326,181,0:127
+19 37226152 rs3108217 G C 2076.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.215;DB;DP=145;Dels=0.00;FS=2.159;HaplotypeScore=0.5869;MLEAC=4;MLEAF=0.667;MQ=58.59;MQ0=0;MQRankSum=1.160;QD=14.32;ReadPosRankSum=-0.725;SB=-1.027e+03;VQSLOD=7.4915;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:25,30:55:99:789,0,709:63 1|1:0,29:29:63:772,63,0:63 0|1:35,25:61:99:557,0,789:63
+19 54644879 rs36636 G A 1790.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.505;DB;DP=187;Dels=0.00;FS=4.408;HaplotypeScore=1.5043;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-1.266;QD=13.88;ReadPosRankSum=-1.226;SB=-1.081e+03;VQSLOD=7.8045;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:30,27:57:99:811,0,726:127 1|0:31,41:72:99:1018,0,730:127 0|0:58,0:58:99:0,144,1815:127
+20 3199373 rs2422861 G A 896.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.452;DB;DP=135;Dels=0.00;FS=0.664;HaplotypeScore=2.8371;MLEAC=3;MLEAF=0.500;MQ=58.47;MQ0=0;MQRankSum=-0.217;QD=6.64;ReadPosRankSum=0.111;SB=-6.080e+02;VQSLOD=7.7118;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,24:56:99:472,0,640:127 0/1:25,15:40:99:229,0,603:127 0/1:20,19:39:99:234,0,379:127
+20 12166868 rs7272217 C T 926.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.444;DB;DP=200;Dels=0.00;FS=2.627;HaplotypeScore=0.8413;MLEAC=1;MLEAF=0.167;MQ=58.94;MQ0=0;MQRankSum=-1.362;QD=13.23;ReadPosRankSum=-1.055;SB=-4.040e+02;VQSLOD=7.6219;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:68,0:68:99:0,190,2486:127 0|0:62,0:62:99:0,169,2218:127 0|1:33,37:70:99:961,0,870:127
+20 21523349 rs73127889 A G 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.469;DB;DP=253;Dels=0.00;FS=3.735;HaplotypeScore=1.5402;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=0.821;QD=13.69;ReadPosRankSum=1.510;SB=-8.640e+02;VQSLOD=7.8358;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:44,48:92:99:1319,0,1356:127 0|0:86,0:86:99:0,235,2994:127 1|0:37,38:75:99:1006,0,1111:127
+20 29566945 rs6119037 C G 1427.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-3.826;DB;DP=271;Dels=0.00;FS=1.151;HaplotypeScore=2.7598;MLEAC=2;MLEAF=0.333;MQ=47.42;MQ0=21;MQRankSum=2.420;QD=8.06;ReadPosRankSum=0.363;SB=-7.560e+02;VQSLOD=1.7908;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:59,32:91:99:782,0,1210:127 1|0:55,31:86:99:684,0,1422:127 0|0:94,0:94:99:0,208,2592:127
+20 41560394 rs761027 A G 5634.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.444;DB;DP=222;Dels=0.00;FS=0.829;HaplotypeScore=1.1428;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=0.392;QD=25.38;ReadPosRankSum=-0.064;SB=-3.048e+03;VQSLOD=10.0362;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2228,187,0:127 1|1:0,82:82:99:2435,211,0:127 1|0:25,43:68:99:971,0,567:127
+20 51353834 rs241795 G A 6115.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=7.909;DB;DP=268;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=4;MLEAF=0.667;MQ=59.38;MQ0=0;MQRankSum=-0.518;QD=22.82;ReadPosRankSum=-0.253;SB=-3.328e+03;VQSLOD=8.3999;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:46,54:100:99:1663,0,1247:127 1|1:0,91:91:99:3189,247,0:127 0|1:36,41:77:99:1263,0,901:127
+20 59978756 rs1892320 T C 3967.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.562;DB;DP=206;Dels=0.00;FS=14.249;HaplotypeScore=1.3838;MLEAC=4;MLEAF=0.667;MQ=59.89;MQ0=0;MQRankSum=-0.289;QD=19.26;ReadPosRankSum=0.221;SB=-2.292e+03;VQSLOD=7.6238;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2337,181,0:127 1|0:38,29:67:99:743,0,1180:127 1|0:31,36:67:99:887,0,873:127
+21 10750991 . C T 602.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=10.103;DP=735;DS;Dels=0.00;FS=27.020;HaplotypeScore=107.2731;MLEAC=2;MLEAF=0.333;MQ=44.40;MQ0=2;MQRankSum=-14.560;QD=1.24;ReadPosRankSum=0.063;SB=-8.430e+02;VQSLOD=-100.9480;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:164,78:243:99:357,0,5193:103 1|0:187,55:242:99:284,0,5252:103 0|0:199,50:250:99:0,103,5864:103
+21 18433036 rs969905 A G 781.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.610;DB;DP=229;Dels=0.00;FS=2.230;HaplotypeScore=1.2866;MLEAC=1;MLEAF=0.167;MQ=59.55;MQ0=0;MQRankSum=0.300;QD=10.15;ReadPosRankSum=-0.384;SB=-4.990e+02;VQSLOD=9.5768;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:63:99:0,181,2380:127 0|0:89,0:89:99:0,244,3177:127 0|1:39,38:77:99:816,0,1256:127
+21 25702950 rs2260875 C G 3462.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.156;DB;DP=237;Dels=0.00;FS=2.900;HaplotypeScore=1.5444;MLEAC=3;MLEAF=0.500;MQ=59.04;MQ0=0;MQRankSum=0.386;QD=14.61;ReadPosRankSum=-1.455;SB=-1.683e+03;VQSLOD=8.0501;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:37,40:77:99:1282,0,1101:127 0/1:43,36:79:99:1114,0,1317:127 0/1:45,36:81:99:1066,0,1329:127
+21 34546711 rs11701692 T C 1030.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.884;DB;DP=152;Dels=0.00;FS=8.325;HaplotypeScore=1.9325;MLEAC=2;MLEAF=0.333;MQ=57.61;MQ0=0;MQRankSum=-0.291;QD=10.51;ReadPosRankSum=0.258;SB=-4.600e+02;VQSLOD=6.4601;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,25:61:99:574,0,1137:127 1|0:19,18:37:99:495,0,498:127 0|0:54,0:54:99:0,141,1811:127
+21 42833227 rs460904 T C 3179.23 PASS AC=6;AF=1.00;AN=6;DB;DP=155;Dels=0.00;FS=0.000;HaplotypeScore=2.4559;MLEAC=6;MLEAF=1.00;MQ=58.18;MQ0=0;QD=20.51;SB=-2.173e+03;VQSLOD=7.7042;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,60:60:90:1085,90,0:74 1|1:0,54:54:96:1172,96,0:74 1|1:0,41:41:75:960,75,0:74
+22 17351507 rs5748687 G A 4244.01 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=-0.224;DB;DP=261;Dels=0.00;FS=0.710;HaplotypeScore=1.7170;MLEAC=5;MLEAF=0.833;MQ=28.84;MQ0=57;MQRankSum=-7.852;QD=16.26;ReadPosRankSum=-1.243;SB=-2.174e+03;VQSLOD=-1.7101;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:1529,141,0:127 1|0:34,49:83:99:727,0,1065:127 1|1:0,86:86:99:1988,180,0:127
+22 34204930 rs13053313 T C 435.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.517;DB;DP=82;Dels=0.00;FS=5.843;HaplotypeScore=0.5328;MLEAC=1;MLEAF=0.167;MQ=58.65;MQ0=0;MQRankSum=1.117;QD=12.80;ReadPosRankSum=-1.270;SB=-1.170e+02;VQSLOD=6.4410;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:12,0:12:27:0,27,360:27 0|1:16,18:34:99:470,0,403:27 0|0:36,0:36:93:0,93,1230:27
+22 43356130 rs6519353 A C 3526.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.809;DB;DP=228;Dels=0.00;FS=6.336;HaplotypeScore=1.6306;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.146;QD=22.46;ReadPosRankSum=2.034;SB=-1.954e+03;VQSLOD=8.5009;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:40,41:81:99:1020,0,1222:127 1|1:0,76:76:99:2506,196,0:127 0|0:71,0:71:99:0,165,2091:127
+22 50309915 rs9616205 A T 1712.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.936;DB;DP=162;Dels=0.00;FS=2.857;HaplotypeScore=2.1490;MLEAC=2;MLEAF=0.333;MQ=56.21;MQ0=5;MQRankSum=0.892;QD=13.92;ReadPosRankSum=-1.040;SB=-9.940e+02;VQSLOD=6.2766;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:39,33:72:99:777,0,994:78 0|0:39,0:39:78:0,78,1010:78 1|0:16,35:51:99:974,0,257:78
+X 4712340 rs5915814 C A 2233.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.784;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.4434;MLEAC=2;MLEAF=0.333;MQ=59.50;MQ0=0;MQRankSum=-1.782;QD=15.73;ReadPosRankSum=0.359;SB=-1.240e+03;VQSLOD=8.3937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:32,37:69:99:1114,0,859:81 0|0:34,0:34:81:0,81,948:81 1|0:32,41:73:99:1158,0,575:81
+X 42192093 rs58959554 T C 1058.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-5.464;DB;DP=190;Dels=0.00;FS=6.809;HaplotypeScore=1.8813;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.212;QD=15.34;ReadPosRankSum=-0.173;SB=-3.970e+02;VQSLOD=8.0569;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,182,2683:127 0|0:50,0:50:99:0,138,1794:127 0|1:31,38:69:99:1093,0,947:127
+X 66290558 rs1606094 C T 2602.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.169;DB;DP=213;Dels=0.00;FS=13.125;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=1.343;QD=18.86;ReadPosRankSum=2.274;SB=-1.122e+03;VQSLOD=5.9967;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:54,47:101:99:1381,0,1762:99 1|1:0,37:37:99:1266,99,0:99 0|0:75,0:75:99:0,205,2705:99
+X 84165195 rs5923187 C A 1009.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.103;DB;DP=194;Dels=0.00;FS=3.070;HaplotypeScore=2.8168;MLEAC=1;MLEAF=0.167;MQ=59.31;MQ0=0;MQRankSum=-0.675;QD=12.01;ReadPosRankSum=-1.463;SB=-5.890e+02;VQSLOD=8.2395;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:79,1:80:99:0,223,2856:60 0|0:30,0:30:60:0,60,764:60 0|1:40,44:84:99:1044,0,1007:60
+X 95868251 . G A 108.36 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=1.436;DP=90;Dels=0.00;FS=4.210;HaplotypeScore=4.9383;MLEAC=2;MLEAF=0.333;MQ=44.60;MQ0=8;MQRankSum=-2.939;QD=1.55;ReadPosRankSum=2.865;SB=-7.411e+01;VQSLOD=-3.2422;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:29,9:38:99:126,0,251:23 0|0:20,0:20:24:0,24,266:23 1|0:27,5:32:21:21,0,97:23
+X 116855730 rs980389 A G 2366.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.939;DB;DP=173;Dels=0.00;FS=3.510;HaplotypeScore=0.9076;MLEAC=3;MLEAF=0.500;MQ=59.87;MQ0=0;MQRankSum=0.653;QD=21.51;ReadPosRankSum=0.730;SB=-1.218e+03;VQSLOD=7.9588;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:965,0,1249:114 1|1:0,40:40:99:1446,114,0:114 0|0:63,0:63:99:0,175,2284:114
+X 135282092 rs5974586 G C 2193.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.257;DB;DP=203;Dels=0.00;FS=0.540;HaplotypeScore=0.6589;MLEAC=2;MLEAF=0.333;MQ=59.47;MQ0=0;MQRankSum=1.000;QD=13.46;ReadPosRankSum=1.343;SB=-1.069e+03;VQSLOD=9.0929;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:47,33:80:99:1026,0,1466:116 0|0:40,0:40:99:0,117,1486:116 1|0:43,40:83:99:1206,0,1311:116
+X 150239197 rs6627349 T C 4677.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.731;DB;DP=179;Dels=0.00;FS=0.000;HaplotypeScore=1.6094;MLEAC=5;MLEAF=0.833;MQ=59.69;MQ0=0;MQRankSum=0.676;QD=26.13;ReadPosRankSum=0.494;SB=-2.442e+03;VQSLOD=10.5525;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,66:66:99:2387,190,0:99 1|1:0,40:40:99:1243,99,0:99 1|0:36,37:73:99:1047,0,1039:99
+Y 13265732 . C T 356.72 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=2.823;DP=142;Dels=0.00;FS=7.941;HaplotypeScore=19.8229;MLEAC=2;MLEAF=0.333;MQ=38.22;MQ0=11;MQRankSum=-2.145;QD=5.10;ReadPosRankSum=1.491;SB=-1.466e+00;VQSLOD=-14.4273;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,15:50:99:327,0,624:5 0|0:65,7:72:4:0,4,1831:5 1|0:15,5:20:67:67,0,227:5
+Y 59024923 . A T 1977.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.838;DP=745;DS;Dels=0.00;FS=0.367;HaplotypeScore=8.2957;MLEAC=3;MLEAF=0.500;MQ=43.53;MQ0=19;MQRankSum=2.499;QD=2.65;ReadPosRankSum=0.098;SB=-9.720e+02;VQSLOD=-36.7578;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:208,42:250:99:730,0,6428:127 0/1:210,35:245:99:588,0,6218:127 0/1:208,42:250:99:698,0,6060:127
+GL000214.1 115144 . C T 102.07 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=0.854;DP=103;Dels=0.00;FS=14.185;HaplotypeScore=14.9478;MLEAC=2;MLEAF=0.333;MQ=38.45;MQ0=1;MQRankSum=-2.314;QD=1.05;ReadPosRankSum=1.480;SB=-6.153e+01;VQSLOD=-14.7562;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:6,0:6:3:0,3,22:4 0|1:9,11:20:16:81,0,16:4 0|1:63,14:77:58:58,0,908:4
+GL000215.1 142616 . T C 976.25 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DP=80;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=21.04;MQ0=42;QD=12.20;SB=-8.001e+01;VQSLOD=-0.4104;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,33:33:42:516,42,0:19 1|1:0,21:21:24:272,24,0:19 1|1:0,26:26:21:226,21,0:19
+GL000212.1 28454 . T C 2248.99 VQSRTrancheSNP99.00to99.90 AC=4;AF=1.00;AN=4;BaseQRankSum=1.691;DP=94;Dels=0.00;FS=3.274;HaplotypeScore=0.9622;MLEAC=4;MLEAF=1.00;MQ=36.99;MQ0=7;MQRankSum=-0.428;QD=24.18;ReadPosRankSum=-1.284;SB=-1.053e+03;VQSLOD=1.2364;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,29:29:63:755,63,0:63 ./. 1|1:1,63:64:99:1530,135,0:63
diff --git a/testdata/picard/vcf/CEUTrio-snps_first_line_diff.vcf b/testdata/picard/vcf/CEUTrio-snps_first_line_diff.vcf
new file mode 100644
index 0000000..20d2b85
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_first_line_diff.vcf
@@ -0,0 +1,406 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.669;HaplotypeScore=3.3539;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-0.219;SB=-9.390e+02;VQSLOD=5.5346;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/0:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
+1 17032814 rs2773183 T C 2828.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879;DB;DP=322;Dels=0.00;FS=2.430;HaplotypeScore=15.4499;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.916;QD=8.78;ReadPosRankSum=-1.245;SB=-1.943e+03;VQSLOD=-1.4207;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
+1 47818917 rs12749507 A G 1285.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.707;DB;DP=252;Dels=0.00;FS=2.139;HaplotypeScore=0.6661;MLEAC=1;MLEAF=0.167;MQ=59.83;MQ0=0;MQRankSum=-0.467;QD=13.39;ReadPosRankSum=0.535;SB=-6.730e+02;VQSLOD=9.2738;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,3171:127 0|1:53,42:96:99:1320,0,1615:127 0|0:75,0:75:99:0,217,2762:127
+1 59635894 rs331648 T A 839.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.038;DB;DP=211;Dels=0.00;FS=1.427;HaplotypeScore=1.5485;MLEAC=1;MLEAF=0.167;MQ=58.68;MQ0=0;MQRankSum=-0.422;QD=11.82;ReadPosRankSum=-0.180;SB=-5.520e+02;VQSLOD=7.9477;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,199,2578:127 0|0:62,0:62:99:0,169,2205:127 0|1:33,38:71:99:874,0,897:127
+1 69502962 rs12724640 T C 1868.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-1.732;DB;DP=110;Dels=0.00;FS=4.721;HaplotypeScore=1.9269;MLEAC=6;MLEAF=1.00;MQ=29.46;MQ0=22;MQRankSum=1.652;QD=16.98;ReadPosRankSum=-0.564;SB=-8.110e+02;VQSLOD=0.2103;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:5,23:29:63:693,63,0:50 1|1:5,38:43:66:675,66,0:50 1|1:9,29:38:51:538,51,0:50
+1 80481528 rs61774278 G C 1775.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.614;DB;DP=168;Dels=0.00;FS=8.292;HaplotypeScore=2.0470;MLEAC=3;MLEAF=0.500;MQ=54.28;MQ0=0;MQRankSum=-0.052;QD=16.75;ReadPosRankSum=1.544;SB=-1.133e+03;VQSLOD=4.7735;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,26:61:99:767,0,778:80 0|0:62,0:62:84:0,84,1046:80 1|1:0,45:45:84:1053,84,0:80
+1 90146546 rs7512447 C T 8721.01 PASS AC=6;AF=1.00;AN=6;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.40;MQ0=0;QD=36.19;SB=-4.084e+03;VQSLOD=11.3217;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2599,196,0:127 1|1:0,86:86:99:3042,235,0:127 1|1:0,84:84:99:3080,238,0:127
+1 100763317 rs6681810 G C 5583.01 PASS AC=6;AF=1.00;AN=6;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=3.7201;MLEAC=6;MLEAF=1.00;MQ=58.52;MQ0=0;QD=28.48;SB=-2.737e+03;VQSLOD=7.9151;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,76:77:99:2211,192,0:127 1|1:0,56:56:99:1593,141,0:127 1|1:0,62:62:99:1779,156,0:127
+1 110091282 rs1279195 C T 952.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.646;DB;DP=101;Dels=0.00;FS=19.666;HaplotypeScore=1.9160;MLEAC=2;MLEAF=0.333;MQ=56.72;MQ0=0;MQRankSum=-0.345;QD=12.37;ReadPosRankSum=0.567;SB=-5.350e+02;VQSLOD=4.1741;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,29:46:99:726,0,219:42 1|0:13,12:31:99:265,0,298:42 0|0:18,0:24:42:0,42,522:42
+1 146610795 rs58742099 C T 2831.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.298;DB;DP=261;Dels=0.00;FS=7.033;HaplotypeScore=13.9060;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=0.753;QD=16.27;ReadPosRankSum=-1.405;SB=-1.481e+03;VQSLOD=3.4221;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:39,43:82:99:1329,0,1080:127 1|0:40,52:92:99:1541,0,1241:127 0|0:87,0:87:99:0,238,3098:127
+1 156248265 rs12038203 C T 643.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.311;DB;DP=145;Dels=0.00;FS=4.568;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.08;MQ0=0;MQRankSum=0.862;QD=12.86;ReadPosRankSum=0.177;SB=-3.450e+02;VQSLOD=7.5008;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:47,0:47:99:0,123,1604:110 0|0:48,0:48:99:0,111,1433:110 0|1:25,25:50:99:678,0,694:110
+1 165431906 rs7528908 G T 2381.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.008;DB;DP=259;Dels=0.00;FS=4.727;HaplotypeScore=0.9857;MLEAC=2;MLEAF=0.333;MQ=59.75;MQ0=0;MQRankSum=0.916;QD=14.34;ReadPosRankSum=-0.907;SB=-9.050e+02;VQSLOD=8.1270;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:48,40:88:99:1142,0,1428:127 0|0:93,0:93:99:0,259,3166:127 1|0:38,40:78:99:1278,0,1075:127
+1 175207612 rs11484568 C T 1920.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.643;DB;DP=216;Dels=0.00;FS=0.537;HaplotypeScore=2.2467;MLEAC=2;MLEAF=0.333;MQ=58.99;MQ0=0;MQRankSum=0.383;QD=14.12;ReadPosRankSum=0.169;SB=-1.064e+03;VQSLOD=8.5912;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:34,40:74:99:1152,0,995:127 0|0:80,0:80:99:0,208,2602:127 1|0:34,28:62:99:807,0,998:127
+1 186656152 rs4422959 G A 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=7.230;DB;DP=270;Dels=0.00;FS=7.290;HaplotypeScore=1.1750;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=0.399;QD=17.21;ReadPosRankSum=-0.869;SB=-6.320e+02;VQSLOD=7.6734;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:99,0:99:99:0,283,3341:127 0|0:93,0:93:99:0,256,3022:127 0|1:33,45:78:99:1377,0,917:127
+1 195392852 rs2119441 T G 5369.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.284;DB;DP=241;Dels=0.00;FS=3.312;HaplotypeScore=1.8710;MLEAC=4;MLEAF=0.667;MQ=58.35;MQ0=0;MQRankSum=-0.643;QD=22.28;ReadPosRankSum=0.178;SB=-2.332e+03;VQSLOD=7.8524;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:37,42:79:99:1233,0,1145:127 1|1:0,84:84:99:2741,211,0:127 0|1:31,47:78:99:1395,0,804:127
+1 204945934 rs6657372 A G 1311.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.582;DB;DP=126;Dels=0.00;FS=0.000;HaplotypeScore=2.7088;MLEAC=3;MLEAF=0.500;MQ=58.78;MQ0=0;MQRankSum=0.480;QD=15.43;ReadPosRankSum=1.284;SB=-6.370e+02;VQSLOD=7.8448;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:22,28:50:99:629,0,675:68 0|0:40,0:41:84:0,84,1057:68 1|1:0,35:35:69:727,69,0:68
+1 216407409 rs3767692 A G 8820.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.803;DB;DP=295;Dels=0.00;FS=1.345;HaplotypeScore=2.5841;MLEAC=5;MLEAF=0.833;MQ=59.28;MQ0=0;MQRankSum=-0.375;QD=29.90;ReadPosRankSum=-0.363;SB=-4.445e+03;VQSLOD=7.0549;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:1,115:116:99:4251,328,0:127 1|0:39,51:90:99:1430,0,1275:127 1|1:0,89:89:99:3139,241,0:127
+1 226163330 rs10915914 C G 747.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.123;DB;DP=121;Dels=0.00;FS=0.863;HaplotypeScore=0.8289;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=-0.478;QD=9.70;ReadPosRankSum=-0.134;SB=-2.780e+02;VQSLOD=8.0849;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,1:44:99:0,117,1447:116 0|1:17,15:32:99:289,0,390:116 0|1:26,19:45:99:497,0,677:116
+1 243135892 rs7517403 C T 2313.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=7.051;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.5884;MLEAC=4;MLEAF=0.667;MQ=37.62;MQ0=11;MQRankSum=-5.659;QD=13.77;ReadPosRankSum=-0.977;SB=-9.200e+02;VQSLOD=2.2480;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:31,24:55:99:501,0,891:123 1|1:0,58:58:99:1263,123,0:123 0|1:28,27:55:99:591,0,714:123
+2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814;DB;DP=189;Dels=0.00;FS=5.611;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.579;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.8071;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
+2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.695;DB;DP=213;Dels=0.00;FS=7.834;HaplotypeScore=1.1897;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-0.097;SB=-1.991e+03;VQSLOD=9.1447;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,42:75:99:1400,0,1031:127 0|0:67,0:67:99:0,178,2277:127 1|1:0,71:71:99:2578,199,0:127
+2 18016237 rs12710649 A T 3950.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.037;DB;DP=250;Dels=0.00;FS=2.158;HaplotypeScore=2.0804;MLEAC=3;MLEAF=0.500;MQ=59.14;MQ0=0;MQRankSum=0.494;QD=15.80;ReadPosRankSum=0.705;SB=-2.142e+03;VQSLOD=8.1407;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:46,59:105:99:1733,0,1505:127 0/1:39,37:76:99:925,0,1164:127 0/1:24,44:68:99:1292,0,628:127
+2 28790711 rs34787802 T G 731.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.421;DB;DP=232;Dels=0.00;FS=2.403;HaplotypeScore=1.5189;MLEAC=1;MLEAF=0.167;MQ=57.98;MQ0=0;MQRankSum=0.447;QD=10.30;ReadPosRankSum=-1.833;SB=-4.550e+02;VQSLOD=6.8853;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,223,2877:127 0|1:36,35:71:99:766,0,947:127 0|0:79,0:80:99:0,205,2640:127
+2 36994439 rs11124542 A C 1302.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.406;DB;DP=191;Dels=0.00;FS=3.335;HaplotypeScore=2.1785;MLEAC=3;MLEAF=0.500;MQ=58.93;MQ0=0;MQRankSum=-0.725;QD=6.82;ReadPosRankSum=0.302;SB=-1.006e+03;VQSLOD=7.9479;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,28:60:99:710,0,1044:127 0/1:34,25:59:99:309,0,772:127 0/1:45,27:72:99:322,0,1096:127
+2 45429089 rs13418430 C A 2341.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.861;DB;DP=283;Dels=0.00;FS=2.854;HaplotypeScore=1.3288;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=-0.939;QD=12.52;ReadPosRankSum=-1.869;SB=-1.156e+03;VQSLOD=7.1503;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:60,49:109:99:1406,0,2061:127 1|0:41,37:78:99:974,0,1238:127 0|0:96,0:96:99:0,256,3312:127
+2 54408283 rs55993481 T G 2128.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.961;DB;DP=222;Dels=0.00;FS=1.744;HaplotypeScore=3.9553;MLEAC=2;MLEAF=0.333;MQ=59.69;MQ0=0;MQRankSum=0.670;QD=14.28;ReadPosRankSum=1.313;SB=-1.076e+03;VQSLOD=6.5064;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:35,46:81:99:1392,0,921:127 1|0:35,33:68:99:775,0,878:127 0|0:73,0:73:99:0,175,2164:127
+2 64848970 rs35473866 T C 655.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.263;DB;DP=218;Dels=0.00;FS=8.014;HaplotypeScore=2.5836;MLEAC=1;MLEAF=0.167;MQ=58.36;MQ0=0;MQRankSum=-0.168;QD=8.29;ReadPosRankSum=-0.307;SB=-3.420e+02;VQSLOD=5.9179;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,208,2627:127 0|0:61,0:61:99:0,135,1725:127 0|1:35,42:79:99:690,0,1042:127
+2 85513238 rs62162679 C T 742.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.162;DB;DP=137;Dels=0.00;FS=4.474;HaplotypeScore=1.3905;MLEAC=2;MLEAF=0.333;MQ=57.50;MQ0=0;MQRankSum=0.479;QD=7.57;ReadPosRankSum=-0.272;SB=-5.520e+02;VQSLOD=7.1288;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:39,0:39:99:0,105,1267:104 0|1:23,23:47:99:430,0,551:104 0|1:31,20:51:99:351,0,633:104
+2 96514373 rs10186946 C T 206.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=4.485;DB;DP=175;Dels=0.00;FS=2.805;HaplotypeScore=2.4200;MLEAC=2;MLEAF=0.333;MQ=39.07;MQ0=7;MQRankSum=-7.529;QD=1.61;ReadPosRankSum=0.813;SB=-2.501e+01;VQSLOD=-0.8655;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:35,23:58:62:62,0,484:61 1|0:22,46:70:99:183,0,387:61 0|0:46,0:47:99:0,99,1162:61
+2 117966808 rs333847 C T 9037.01 PASS AC=6;AF=1.00;AN=6;DB;DP=269;Dels=0.00;FS=0.000;HaplotypeScore=3.7032;MLEAC=6;MLEAF=1.00;MQ=58.21;MQ0=0;QD=33.59;SB=-4.673e+03;VQSLOD=7.0546;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2652,205,0:127 1|1:0,101:101:99:3158,247,0:127 1|1:0,89:90:99:3227,250,0:127
+2 127445050 rs113647072 A G 1773.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.856;DB;DP=154;Dels=0.00;FS=4.202;HaplotypeScore=2.2701;MLEAC=4;MLEAF=0.667;MQ=59.16;MQ0=0;MQRankSum=0.759;QD=11.51;ReadPosRankSum=1.290;SB=-1.402e+03;VQSLOD=7.9185;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:26,28:54:99:652,0,472:78 0|1:26,22:49:99:350,0,462:78 1|1:0,50:51:78:813,78,0:78
+2 144289763 rs7607879 C T 3308.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.386;DB;DP=225;Dels=0.00;FS=9.723;HaplotypeScore=1.4969;MLEAC=3;MLEAF=0.500;MQ=59.53;MQ0=0;MQRankSum=0.283;QD=14.70;ReadPosRankSum=1.392;SB=-1.760e+03;VQSLOD=8.2418;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:41,39:81:99:1190,0,1312:127 0/1:28,36:64:99:1057,0,834:127 0/1:44,36:80:99:1061,0,1275:127
+2 155726628 . T G 1351.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=0.207;DP=193;Dels=0.00;FS=9.246;HaplotypeScore=0.5220;MLEAC=6;MLEAF=1.00;MQ=16.17;MQ0=87;MQRankSum=2.396;QD=7.00;ReadPosRankSum=1.069;SB=-4.420e+02;VQSLOD=-2.7874;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,56:59:60:591,60,0:27 1|1:8,49:57:27:245,27,0:27 1|1:12,65:77:57:553,57,0:27
+2 167166899 . T A 1064.78 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=0.023;DP=278;Dels=0.00;FS=9.890;HaplotypeScore=0.2774;MLEAC=6;MLEAF=1.00;MQ=10.47;MQ0=239;MQRankSum=1.643;QD=3.83;ReadPosRankSum=0.347;SB=-1.083e-02;VQSLOD=-6.9449;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:174,12:186:36:401,36,0:4 1|1:37,14:52:39:431,39,0:4 1|0:31,9:40:3:271,0,3:4
+2 177175707 rs7355385 A G 2590.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.866;DB;DP=206;Dels=0.00;FS=14.872;HaplotypeScore=0.3111;MLEAC=3;MLEAF=0.500;MQ=59.12;MQ0=0;MQRankSum=-0.937;QD=20.40;ReadPosRankSum=-0.287;SB=-8.970e+02;VQSLOD=6.8179;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:856,0,1069:127 1|1:0,62:62:99:1779,150,0:127 0|0:78,1:79:99:0,193,2411:127
+2 187694833 rs10191094 T C 1006.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.181;DB;DP=236;Dels=0.00;FS=9.083;HaplotypeScore=2.2688;MLEAC=1;MLEAF=0.167;MQ=59.73;MQ0=0;MQRankSum=-0.218;QD=13.07;ReadPosRankSum=-0.877;SB=-5.830e+02;VQSLOD=7.6003;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3021:127 0|0:77,0:77:99:0,217,2790:127 0|1:33,44:77:99:1041,0,988:127
+2 198567638 rs12619333 C G 2201.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.028;DB;DP=240;Dels=0.00;FS=4.757;HaplotypeScore=1.3741;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=1;MQRankSum=0.131;QD=13.42;ReadPosRankSum=0.123;SB=-1.051e+03;VQSLOD=8.1261;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:38,45:84:99:1298,0,1249:127 1|0:45,35:80:99:942,0,1493:127 0|0:76,0:76:99:0,196,2542:127
+2 209758643 rs12992166 C T 1534.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.178;DB;DP=163;Dels=0.00;FS=8.813;HaplotypeScore=2.3636;MLEAC=2;MLEAF=0.333;MQ=58.93;MQ0=0;MQRankSum=1.988;QD=12.08;ReadPosRankSum=1.075;SB=-4.720e+02;VQSLOD=6.8226;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,22:59:99:610,0,886:93 1|0:32,36:68:99:963,0,797:93 0|0:36,0:36:93:0,93,1058:93
+2 228532558 rs6436725 G A 3484.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=7.160;DB;DP=263;Dels=0.00;FS=1.547;HaplotypeScore=4.9679;MLEAC=3;MLEAF=0.500;MQ=58.60;MQ0=0;MQRankSum=1.137;QD=21.91;ReadPosRankSum=-0.416;SB=-1.472e+03;VQSLOD=5.4377;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:42,47:89:99:1549,0,932:127 0|0:104,0:104:99:0,247,2939:127 1|1:0,69:70:99:1935,156,0:127
+2 237156689 rs13390270 G A 852.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.150;DB;DP=205;Dels=0.00;FS=0.710;HaplotypeScore=1.7295;MLEAC=1;MLEAF=0.167;MQ=59.06;MQ0=0;MQRankSum=-0.193;QD=11.67;ReadPosRankSum=1.262;SB=-4.790e+02;VQSLOD=8.4962;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,202,2606:108 0|1:39,34:73:99:887,0,1027:108 0|0:59,0:59:99:0,108,1384:108
+3 1609737 rs2648459 A G 6492.01 PASS AC=6;AF=1.00;AN=6;DB;DP=187;Dels=0.00;FS=0.000;HaplotypeScore=1.1795;MLEAC=6;MLEAF=1.00;MQ=59.90;MQ0=0;QD=34.72;SB=-3.251e+03;VQSLOD=11.5033;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1943,150,0:127 1|1:0,62:62:99:2206,172,0:127 1|1:0,72:72:99:2343,181,0:127
+3 8399330 rs6770171 G A 6816.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.689;DB;DP=253;Dels=0.00;FS=0.637;HaplotypeScore=1.2788;MLEAC=5;MLEAF=0.833;MQ=58.42;MQ0=0;MQRankSum=0.607;QD=26.94;ReadPosRankSum=-0.503;SB=-3.369e+03;VQSLOD=8.0141;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3784,292,0:127 1|1:0,72:72:99:2164,169,0:127 1|0:42,33:75:99:868,0,1146:127
+3 17501103 . T G 45.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-6.477;DP=156;Dels=0.00;FS=71.755;HaplotypeScore=1.5253;MLEAC=2;MLEAF=0.333;MQ=58.02;MQ0=0;MQRankSum=-0.156;QD=0.43;ReadPosRankSum=-3.974;SB=-1.474e-02;VQSLOD=-14.1451;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,8:51:99:0,114,1252:33 0|1:22,24:46:34:34,0,492:33 0|1:24,34:59:50:50,0,492:33
+3 26960556 rs4422260 T C 878.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-2.140;DB;DP=220;Dels=0.00;FS=1.108;HaplotypeScore=1.7204;MLEAC=2;MLEAF=0.333;MQ=41.87;MQ0=3;MQRankSum=-6.679;QD=5.97;ReadPosRankSum=-0.031;SB=-4.600e+02;VQSLOD=0.7170;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,208,2660:127 0|1:32,48:80:99:759,0,915:127 0|1:37,30:67:99:158,0,1092:127
+3 48757773 rs61137521 A G 3103.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.794;DB;DP=172;Dels=0.00;FS=0.000;HaplotypeScore=1.8954;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=-0.693;QD=18.04;ReadPosRankSum=-1.667;SB=-1.874e+03;VQSLOD=7.9241;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,50:51:99:1723,141,0:127 1|0:31,34:65:99:745,0,814:127 1|0:24,32:56:99:677,0,603:127
+3 60283791 rs10154846 T C 669.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.270;DB;DP=204;Dels=0.00;FS=1.585;HaplotypeScore=1.6639;MLEAC=1;MLEAF=0.167;MQ=59.39;MQ0=0;MQRankSum=0.370;QD=10.14;ReadPosRankSum=1.636;SB=-2.690e+02;VQSLOD=8.9468;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:63,0:63:99:0,190,2440:127 0|1:34,32:66:99:704,0,1020:127 0|0:74,0:75:99:0,190,2372:127
+3 68765638 rs1504297 C G 4623.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-5.561;DB;DP=225;Dels=0.00;FS=3.176;HaplotypeScore=0.8432;MLEAC=4;MLEAF=0.667;MQ=59.80;MQ0=0;MQRankSum=-0.619;QD=20.55;ReadPosRankSum=-1.001;SB=-2.371e+03;VQSLOD=8.7354;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:40,39:79:99:1220,0,1330:127 1|1:0,75:75:99:2518,205,0:127 0|1:37,34:71:99:885,0,1185:127
+3 76722766 rs264537 C G 845.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=3.666;DB;DP=202;Dels=0.00;FS=0.000;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.79;MQ0=0;MQRankSum=-0.795;QD=13.21;ReadPosRankSum=1.049;SB=-2.910e+02;VQSLOD=8.5280;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,208,2570:127 0|0:68,0:68:99:0,193,2332:127 0|1:34,30:64:99:880,0,995:127
+3 86234718 rs2324883 T C 7655.01 PASS AC=6;AF=1.00;AN=6;DB;DP=234;Dels=0.00;FS=0.000;HaplotypeScore=0.6487;MLEAC=6;MLEAF=1.00;MQ=59.51;MQ0=0;QD=32.71;SB=-4.142e+03;VQSLOD=11.2111;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,80:80:99:2857,223,0:127 1|1:0,76:77:99:2512,196,0:127 1|1:0,77:77:99:2286,178,0:127
+3 99106655 rs2623376 A G 1093.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.490;DB;DP=191;Dels=0.00;FS=2.283;HaplotypeScore=0.6267;MLEAC=2;MLEAF=0.333;MQ=59.76;MQ0=0;MQRankSum=-1.141;QD=9.51;ReadPosRankSum=0.079;SB=-5.610e+02;VQSLOD=8.1455;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:653,0,970:127 0|0:76,0:76:99:0,193,2462:127 1|0:44,19:63:99:479,0,1261:127
+3 108612711 rs2399252 T A 3430.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.783;DB;DP=239;Dels=0.00;FS=4.436;HaplotypeScore=0.6593;MLEAC=3;MLEAF=0.500;MQ=59.64;MQ0=0;MQRankSum=-0.269;QD=14.35;ReadPosRankSum=-0.701;SB=-1.733e+03;VQSLOD=8.5079;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:48,34:82:99:1066,0,1620:127 0/1:45,43:88:99:1370,0,1452:127 0/1:36,32:69:99:994,0,1128:127
+3 128140891 rs73201490 C T 1315.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.394;DB;DP=142;Dels=0.00;FS=0.667;HaplotypeScore=3.4886;MLEAC=2;MLEAF=0.333;MQ=58.69;MQ0=0;MQRankSum=1.733;QD=14.30;ReadPosRankSum=0.758;SB=-6.400e+02;VQSLOD=6.7020;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:29,24:53:99:636,0,670:104 0|0:50,0:50:99:0,105,1188:104 1|0:12,27:39:99:718,0,250:104
+3 137840974 rs2622698 C A 6792.01 PASS AC=6;AF=1.00;AN=6;DB;DP=232;Dels=0.00;FS=0.000;HaplotypeScore=2.6477;MLEAC=6;MLEAF=1.00;MQ=59.04;MQ0=0;QD=29.28;SB=-3.999e+03;VQSLOD=9.7681;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2640,205,0:127 1|1:0,78:78:99:2229,178,0:127 1|1:0,75:75:99:1923,153,0:127
+3 148344553 rs62274102 C A 3191.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.860;DB;DP=232;Dels=0.00;FS=12.061;HaplotypeScore=2.3659;MLEAC=3;MLEAF=0.500;MQ=59.32;MQ0=0;MQRankSum=-0.551;QD=19.58;ReadPosRankSum=2.411;SB=-1.757e+03;VQSLOD=6.2908;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:46,39:85:99:985,0,1339:127 1|1:0,78:78:99:2251,175,0:127 0|0:69,0:69:99:0,153,2018:127
+3 158557110 rs34445802 G A 2374.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.805;DB;DP=237;Dels=0.00;FS=1.025;HaplotypeScore=1.6572;MLEAC=2;MLEAF=0.333;MQ=57.48;MQ0=0;MQRankSum=0.558;QD=14.05;ReadPosRankSum=-1.147;SB=-1.505e+03;VQSLOD=7.1338;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:43,56:99:99:1624,0,1344:127 1|0:33,37:70:99:789,0,916:127 0|0:68,0:68:99:0,156,2014:127
+3 179020937 rs13082816 C T 1116.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.603;DB;DP=82;Dels=0.00;FS=0.000;HaplotypeScore=0.6358;MLEAC=4;MLEAF=0.667;MQ=54.57;MQ0=1;MQRankSum=0.374;QD=13.61;ReadPosRankSum=-0.037;SB=-2.010e+02;VQSLOD=6.0907;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:13,13:26:99:388,0,178:36 1|1:0,24:24:36:442,36,0:36 0|1:13,19:32:99:328,0,179:36
+3 189981901 . A G 179.25 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=2.258;DP=274;Dels=0.00;FS=73.736;HaplotypeScore=1.8333;MLEAC=1;MLEAF=0.167;MQ=54.08;MQ0=6;MQRankSum=-2.651;QD=1.97;ReadPosRankSum=-6.101;SB=-6.400e+01;VQSLOD=-18.1951;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:64,27:91:99:214,0,679:51 1|0:78,10:88:0:0,21,1685:51 0|0:86,9:95:74:0,74,1891:51
+3 197056886 rs7612900 G A 7880.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=0.6106;MLEAC=6;MLEAF=1.00;MQ=59.18;MQ0=0;QD=34.41;SB=-3.459e+03;VQSLOD=11.8130;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2786,214,0:127 1|1:0,81:81:99:2598,202,0:127 1|1:0,73:73:99:2496,193,0:127
+4 6333669 rs35678078 G T 2186.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.220;DB;DP=198;Dels=0.00;FS=1.754;HaplotypeScore=0.7779;MLEAC=3;MLEAF=0.500;MQ=59.27;MQ0=0;MQRankSum=-0.256;QD=11.04;ReadPosRankSum=-0.469;SB=-1.621e+03;VQSLOD=9.4086;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:33,34:67:99:875,0,848:127 0/1:27,32:59:99:602,0,534:127 0/1:33,38:72:99:748,0,676:127
+4 12652343 rs13114660 G T 610.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.176;DB;DP=127;Dels=0.00;FS=0.000;HaplotypeScore=1.5681;MLEAC=1;MLEAF=0.167;MQ=58.86;MQ0=0;MQRankSum=-0.468;QD=16.06;ReadPosRankSum=1.246;SB=-3.060e+02;VQSLOD=7.8400;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,120,1561:102 0|1:15,23:38:99:645,0,407:102 0|0:44,1:46:99:0,103,1539:102
+4 21819269 rs4285068 C G 7252.01 PASS AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=0.6511;MLEAC=6;MLEAF=1.00;MQ=55.91;MQ0=0;QD=33.57;SB=-3.284e+03;VQSLOD=8.5427;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,83:83:99:2859,226,0:127 1|1:0,73:73:99:2413,193,0:127 1|1:0,59:59:99:1980,156,0:127
+4 30898977 rs4386561 G A 2449.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.817;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.9382;MLEAC=2;MLEAF=0.333;MQ=58.94;MQ0=0;MQRankSum=0.173;QD=15.70;ReadPosRankSum=1.051;SB=-1.131e+03;VQSLOD=8.3611;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,46:79:99:1380,0,944:127 0|0:75,0:75:99:0,202,2608:127 1|0:43,34:77:99:1108,0,1335:127
+4 39062189 rs2566127 T C 2641.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.019;DB;DP=201;Dels=0.00;FS=1.101;HaplotypeScore=2.8834;MLEAC=3;MLEAF=0.500;MQ=58.96;MQ0=0;MQRankSum=0.932;QD=13.14;ReadPosRankSum=-0.596;SB=-1.401e+03;VQSLOD=7.9734;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,29:64:99:880,0,1168:127 0/1:37,32:70:99:796,0,1021:127 0/1:31,36:67:99:1004,0,877:127
+4 48922864 rs7697262 G C 1383.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=100;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=20.20;MQ0=24;QD=13.83;SB=-3.860e+02;VQSLOD=-0.3210;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,38:41:57:625,57,0:32 1|1:0,28:28:33:368,33,0:32 1|1:2,29:31:39:428,39,0:32
+4 57135985 rs1715504 G A 1213.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.549;DB;DP=173;Dels=0.00;FS=4.099;HaplotypeScore=1.6305;MLEAC=2;MLEAF=0.333;MQ=58.44;MQ0=0;MQRankSum=-1.006;QD=10.28;ReadPosRankSum=-0.933;SB=-4.500e+02;VQSLOD=7.4115;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:54,0:55:99:0,135,1546:127 0|1:30,23:54:99:563,0,608:127 0|1:35,28:64:99:689,0,562:127
+4 64522064 rs4860541 A G 5942.01 PASS AC=6;AF=1.00;AN=6;DB;DP=188;Dels=0.00;FS=0.000;HaplotypeScore=0.2889;MLEAC=6;MLEAF=1.00;MQ=56.20;MQ0=0;QD=31.61;SB=-3.348e+03;VQSLOD=8.5367;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2119,169,0:127 1|1:0,52:53:99:1661,132,0:127 1|1:0,67:67:99:2162,172,0:127
+4 71449060 rs60358213 G A 2269.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.704;DB;DP=227;Dels=0.00;FS=13.048;HaplotypeScore=20.1360;MLEAC=2;MLEAF=0.333;MQ=55.35;MQ0=0;MQRankSum=0.477;QD=13.19;ReadPosRankSum=2.295;SB=-8.910e+02;VQSLOD=1.8937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:60,40:100:99:1221,0,1476:127 1|0:37,35:72:99:1087,0,987:127 0|0:53,1:54:99:0,157,2026:127
+4 82427976 rs6841516 G A 561.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.022;DB;DP=166;Dels=0.00;FS=0.000;HaplotypeScore=1.4715;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=-1.555;QD=11.00;ReadPosRankSum=0.016;SB=-3.880e+02;VQSLOD=8.0989;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:51,0:51:99:0,132,1705:127 0|1:22,29:51:99:596,0,483:127 0|0:64,0:64:99:0,135,1755:127
+4 103859292 rs7676943 C G 7573.01 PASS AC=6;AF=1.00;AN=6;DB;DP=235;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=58.63;MQ0=0;QD=32.23;SB=-3.953e+03;VQSLOD=10.3945;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,95:96:99:3289,256,0:127 1|1:0,73:73:99:2137,166,0:127 1|1:0,66:66:99:2147,166,0:127
+4 122900130 rs4833786 C T 2361.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.390;DB;DP=244;Dels=0.00;FS=0.495;HaplotypeScore=0.5427;MLEAC=2;MLEAF=0.333;MQ=59.91;MQ0=0;MQRankSum=-0.628;QD=15.23;ReadPosRankSum=1.221;SB=-1.282e+03;VQSLOD=8.8105;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:89,0:89:99:0,250,3286:127 0|1:42,44:86:99:1257,0,1325:127 0|1:32,37:69:99:1143,0,941:127
+4 132671861 rs6856716 C G 2622.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=3.143;DB;DP=617;DS;Dels=0.00;FS=5.808;HaplotypeScore=34.4109;MLEAC=2;MLEAF=0.333;MQ=24.78;MQ0=42;MQRankSum=3.293;QD=5.89;ReadPosRankSum=-0.736;SB=-1.412e+03;VQSLOD=-77.3455;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:125,98:223:99:1761,0,1486:127 0|0:171,0:172:99:0,300,2641:127 1|0:152,70:222:99:900,0,2086:127
+4 141514835 rs55984232 C T 1645.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=7.144;DB;DP=191;Dels=0.00;FS=2.756;HaplotypeScore=1.0735;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.726;QD=13.06;ReadPosRankSum=-0.789;SB=-8.550e+02;VQSLOD=8.9425;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,28:60:99:913,0,820:127 0|0:65,0:65:99:0,156,1886:127 1|0:34,32:66:99:771,0,750:127
+4 161180100 rs167176 G C 2497.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.811;DB;DP=191;Dels=0.00;FS=5.370;HaplotypeScore=0.7812;MLEAC=3;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=-0.584;QD=13.07;ReadPosRankSum=0.756;SB=-1.206e+03;VQSLOD=8.0012;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,36:68:99:1100,0,895:127 0/1:41,35:76:99:987,0,1028:127 0/1:29,17:47:99:449,0,820:127
+4 169085855 rs2251558 A G 1161.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.721;DB;DP=244;Dels=0.00;FS=5.247;HaplotypeScore=0.4893;MLEAC=1;MLEAF=0.167;MQ=59.91;MQ0=0;MQRankSum=1.574;QD=13.99;ReadPosRankSum=0.454;SB=-5.590e+02;VQSLOD=7.4222;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,226,2915:127 0|1:43,40:83:99:1196,0,1294:127 0|0:84,0:84:99:0,232,2950:127
+4 177855678 rs1545090 A G 7065.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1696;MLEAC=6;MLEAF=1.00;MQ=59.50;MQ0=0;QD=30.85;SB=-3.799e+03;VQSLOD=11.0069;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,84:84:99:2701,235,0:127 1|1:0,79:80:99:2401,211,0:127 1|1:0,65:65:99:1963,165,0:127
+4 184811263 rs2871379 A G 6376.01 PASS AC=6;AF=1.00;AN=6;DB;DP=211;Dels=0.00;FS=0.000;HaplotypeScore=0.5084;MLEAC=6;MLEAF=1.00;MQ=58.38;MQ0=0;QD=30.22;SB=-3.472e+03;VQSLOD=10.4879;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2539,199,0:127 1|1:0,67:67:99:2072,165,0:127 1|1:0,66:66:99:1765,135,0:127
+4 190538070 rs62323772 G A 106.69 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.099;DB;DP=19;Dels=0.00;FS=0.000;HaplotypeScore=4.3562;MLEAC=3;MLEAF=0.500;MQ=33.71;MQ0=0;MQRankSum=0.591;QD=5.93;ReadPosRankSum=-0.394;SB=-7.601e+01;VQSLOD=-1.3921;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:4,9:13:69:69,0,92:3 0|0:1,0:1:3:0,3,33:3 1|1:0,4:5:6:77,6,0:3
+5 3276081 rs4866540 G A 3653.01 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=5.002;DB;DP=176;Dels=0.00;FS=2.778;HaplotypeScore=19.0040;MLEAC=4;MLEAF=0.667;MQ=57.74;MQ0=0;MQRankSum=-0.569;QD=20.76;ReadPosRankSum=1.308;SB=-6.610e+02;VQSLOD=3.1833;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,71:72:99:2337,175,0:127 1|0:26,25:51:99:719,0,601:127 1|0:26,27:53:99:597,0,662:127
+5 10958957 rs852590 T C 8430.01 PASS AC=6;AF=1.00;AN=6;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=1.8272;MLEAC=6;MLEAF=1.00;MQ=59.31;MQ0=0;QD=34.69;SB=-4.118e+03;VQSLOD=10.8702;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3594,277,0:127 1|1:1,73:74:99:2318,181,0:127 1|1:0,72:72:99:2518,196,0:127
+5 20435939 rs12697584 A C 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-5.396;DB;DP=246;Dels=0.00;FS=4.681;HaplotypeScore=0.8744;MLEAC=2;MLEAF=0.333;MQ=59.74;MQ0=0;MQRankSum=-0.850;QD=14.20;ReadPosRankSum=0.391;SB=-1.305e+03;VQSLOD=8.1327;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:85,0:85:99:0,241,3183:127 0|1:41,37:78:99:1062,0,1304:127 0|1:39,44:83:99:1263,0,1222:127
+5 29069162 rs658439 G A 499.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.981;DB;DP=199;Dels=0.00;FS=11.196;HaplotypeScore=1.6038;MLEAC=1;MLEAF=0.167;MQ=52.70;MQ0=0;MQRankSum=-0.608;QD=9.42;ReadPosRankSum=-1.103;SB=-2.310e+02;VQSLOD=4.0183;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:86,0:86:99:0,211,2509:110 0|0:60,0:60:99:0,111,1240:110 0|1:30,23:53:99:534,0,523:110
+5 36740339 rs36676 T G 6995.01 PASS AC=6;AF=1.00;AN=6;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=2.0768;MLEAC=6;MLEAF=1.00;MQ=59.46;MQ0=0;QD=30.41;SB=-3.034e+03;VQSLOD=10.9208;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2261,195,0:127 1|1:0,83:83:99:2579,217,0:127 1|1:0,71:72:99:2155,181,0:127
+5 49438828 rs137880658 G A 424.24 VQSRTrancheSNP99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-4.376;DB;DP=748;DS;Dels=0.00;FS=7.184;HaplotypeScore=20.6618;MLEAC=1;MLEAF=0.167;MQ=19.63;MQ0=158;MQRankSum=3.819;QD=1.70;ReadPosRankSum=1.191;SB=-2.220e+02;VQSLOD=-98.2155;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:249,0:249:99:0,555,4848:127 0|1:204,46:250:99:459,0,2894:127 0|0:249,0:249:99:0,480,4326:127
+5 58243302 rs457566 A C 6237.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.663;DB;DP=233;Dels=0.00;FS=3.429;HaplotypeScore=0.8859;MLEAC=5;MLEAF=0.833;MQ=59.70;MQ0=0;MQRankSum=-0.232;QD=26.77;ReadPosRankSum=0.957;SB=-2.566e+03;VQSLOD=9.3537;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,87:87:99:2923,229,0:127 1|0:36,50:86:99:1429,0,1006:127 1|1:0,60:60:99:1885,147,0:127
+5 70856663 rs157045 T C 2040.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.809;DB;DP=234;Dels=0.00;FS=1.824;HaplotypeScore=1.0544;MLEAC=2;MLEAF=0.333;MQ=58.65;MQ0=0;MQRankSum=0.989;QD=13.16;ReadPosRankSum=0.719;SB=-8.820e+02;VQSLOD=7.3513;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,41:85:99:1087,0,1448:127 1|0:28,42:70:99:992,0,789:127 0|0:79,0:79:99:0,181,2342:127
+5 80900719 rs2917540 G T 4938.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.261;DB;DP=240;Dels=0.00;FS=0.489;HaplotypeScore=0.5959;MLEAC=4;MLEAF=0.667;MQ=59.63;MQ0=0;MQRankSum=-2.115;QD=20.58;ReadPosRankSum=0.288;SB=-2.548e+03;VQSLOD=8.4417;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:52,40:92:99:1207,0,1768:127 0|1:37,33:70:99:960,0,1205:127 1|1:0,78:78:99:2771,211,0:127
+5 93119893 rs6879620 G A 4262.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.930;DB;DP=239;Dels=0.00;FS=1.050;HaplotypeScore=2.1583;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=0.891;QD=17.83;ReadPosRankSum=-2.670;SB=-2.596e+03;VQSLOD=7.0681;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:49,42:91:99:1098,0,1410:127 0|1:36,38:74:99:890,0,1008:127 1|1:0,74:74:99:2274,178,0:127
+5 102962771 rs6866105 A G 5087.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.665;DB;DP=200;Dels=0.00;FS=8.083;HaplotypeScore=2.2837;MLEAC=5;MLEAF=0.833;MQ=58.71;MQ0=0;MQRankSum=-0.503;QD=25.44;ReadPosRankSum=-0.482;SB=-2.172e+03;VQSLOD=7.2212;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2373,184,0:127 1|1:0,59:59:99:1776,141,0:127 1|0:31,35:66:99:938,0,803:127
+5 112750674 rs9716322 A C 598.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-0.293;DB;DP=199;Dels=0.00;FS=2.948;HaplotypeScore=0.3328;MLEAC=1;MLEAF=0.167;MQ=45.61;MQ0=2;MQRankSum=-2.398;QD=12.21;ReadPosRankSum=1.159;SB=-8.101e+01;VQSLOD=2.7717;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,196,2534:127 0|1:23,26:49:99:633,0,479:127 0|0:68,1:69:99:0,174,2191:127
+5 121302662 . G T 143.72 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.413;DP=150;Dels=0.02;FS=161.482;HaplotypeScore=2.8631;MLEAC=3;MLEAF=0.500;MQ=35.76;MQ0=1;MQRankSum=0.422;QD=0.96;ReadPosRankSum=-5.675;SB=-1.466e+00;VQSLOD=-77.2440;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:32,21:53:99:120,0,251:5 0/1:35,12:47:57:57,0,271:5 0/1:35,12:47:4:4,0,259:5
+5 132377304 rs72801439 A T 858.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.113;DB;DP=219;Dels=0.00;FS=10.632;HaplotypeScore=0.6638;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.881;QD=11.29;ReadPosRankSum=0.435;SB=-3.050e+02;VQSLOD=7.6837;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,163,2149:127 0|1:43,33:76:99:893,0,1280:127 0|0:76,0:76:99:0,199,2553:127
+5 144321895 rs35068704 A T 1535.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.048;DB;DP=203;Dels=0.00;FS=13.289;HaplotypeScore=0.5075;MLEAC=2;MLEAF=0.333;MQ=57.36;MQ0=0;MQRankSum=2.191;QD=11.37;ReadPosRankSum=-1.361;SB=-7.640e+02;VQSLOD=5.7211;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,25:59:99:595,0,976:127 0|0:68,0:68:99:0,190,2435:127 1|0:39,37:76:99:979,0,1274:127
+5 154441640 rs467330 A C 1133.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.127;DB;DP=235;Dels=0.00;FS=2.103;HaplotypeScore=1.1893;MLEAC=1;MLEAF=0.167;MQ=59.65;MQ0=0;MQRankSum=0.766;QD=12.59;ReadPosRankSum=-0.535;SB=-6.500e+02;VQSLOD=9.8335;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2172:127 0|1:45,45:90:99:1168,0,1368:127 0|0:82,1:84:99:0,226,2825:127
+5 164600452 rs7711548 C A 588.32 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-3.291;DB;DP=192;Dels=0.02;FS=2.319;HaplotypeScore=32.6662;MLEAC=6;MLEAF=1.00;MQ=57.55;MQ0=0;MQRankSum=1.536;QD=3.06;ReadPosRankSum=-1.533;SB=-2.085e+03;VQSLOD=-1.4325;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:15,52:69:18:155,18,0:15 1|1:11,55:66:36:296,36,0:15 1|1:18,36:54:15:175,15,0:15
+5 174249229 rs11739079 C G 1613.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.540;DB;DP=190;Dels=0.00;FS=6.482;HaplotypeScore=2.0416;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-0.898;QD=11.86;ReadPosRankSum=0.601;SB=-8.320e+02;VQSLOD=7.7782;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,43:75:99:1069,0,928:123 0|0:54,0:54:99:0,123,1554:123 1|0:33,27:61:99:583,0,883:123
+6 1620147 rs2569882 T C 252.30 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.862;DB;DP=38;Dels=0.00;FS=8.023;HaplotypeScore=0.2217;MLEAC=5;MLEAF=0.833;MQ=57.65;MQ0=0;MQRankSum=-0.918;QD=9.34;ReadPosRankSum=0.584;SB=-4.005e+01;VQSLOD=4.3258;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:0,17:17:21:254,21,0:4 1|0:3,8:11:2:0,3,40:4 1|1:0,10:10:3:39,3,0:4
+6 9408051 rs11751621 C G 5140.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.350;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.6637;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=-0.205;QD=21.33;ReadPosRankSum=-0.033;SB=-2.552e+03;VQSLOD=8.9881;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:42,40:82:99:1156,0,1352:127 0|1:36,45:81:99:1253,0,1134:127 1|1:0,78:78:99:2731,214,0:127
+6 18687376 rs9383429 A T 1162.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.746;DB;DP=232;Dels=0.00;FS=0.638;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.42;MQ0=0;MQRankSum=-0.733;QD=15.71;ReadPosRankSum=-0.146;SB=-6.490e+02;VQSLOD=9.4317;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,241,3181:127 0|0:76,0:76:99:0,217,2832:127 0|1:33,41:74:99:1197,0,1008:127
+6 26687649 . G C 1654.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=9.718;DP=410;Dels=0.00;FS=5.973;HaplotypeScore=5.0786;MLEAC=2;MLEAF=0.333;MQ=28.19;MQ0=32;MQRankSum=0.048;QD=6.17;ReadPosRankSum=0.408;SB=-5.110e+02;VQSLOD=-8.7346;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:117,49:166:99:1013,0,2495:127 0|0:141,1:142:99:0,244,2576:127 1|0:70,32:102:99:680,0,1048:127
+6 35346891 . C T 483.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-6.402;DP=205;Dels=0.02;FS=214.154;HaplotypeScore=4.5086;MLEAC=3;MLEAF=0.500;MQ=51.07;MQ0=1;MQRankSum=-2.038;QD=2.36;ReadPosRankSum=-2.250;SB=-1.065e-02;VQSLOD=-116.9542;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:48,31:79:99:257,0,635:80 0/1:40,22:62:99:185,0,308:80 0/1:44,16:60:80:80,0,534:80
+6 45421630 rs1343799 C T 5422.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.419;DB;DP=240;Dels=0.00;FS=10.689;HaplotypeScore=0.7979;MLEAC=4;MLEAF=0.667;MQ=59.46;MQ0=0;MQRankSum=1.089;QD=22.59;ReadPosRankSum=1.252;SB=-2.647e+03;VQSLOD=7.7035;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:29,43:72:99:1445,0,843:127 0|1:43,37:80:99:1121,0,1302:127 1|1:0,88:88:99:2856,220,0:127
+6 55412503 rs12201934 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.280;DB;DP=182;Dels=0.00;FS=0.744;HaplotypeScore=0.3332;MLEAC=1;MLEAF=0.167;MQ=59.64;MQ0=0;MQRankSum=-0.765;QD=13.57;ReadPosRankSum=0.147;SB=-4.590e+02;VQSLOD=9.3766;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,181,2371:127 0|1:35,30:65:99:917,0,1046:127 0|0:56,0:56:99:0,150,1969:127
+6 71018445 rs1321063 C A 518.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.668;DB;DP=185;Dels=0.00;FS=1.618;HaplotypeScore=0.6919;MLEAC=1;MLEAF=0.167;MQ=58.93;MQ0=0;MQRankSum=0.355;QD=8.78;ReadPosRankSum=1.306;SB=-4.020e+02;VQSLOD=7.7510;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,184,2404:127 0|0:59,0:59:99:0,160,2065:127 0|1:29,30:59:99:553,0,809:127
+6 79887872 rs6454101 C T 2130.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.355;DB;DP=204;Dels=0.00;FS=11.823;HaplotypeScore=2.3806;MLEAC=3;MLEAF=0.500;MQ=59.68;MQ0=0;MQRankSum=1.011;QD=10.44;ReadPosRankSum=-0.769;SB=-1.370e+03;VQSLOD=7.5187;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:31,31:62:99:806,0,990:127 0/1:42,31:73:99:606,0,921:127 0/1:29,40:69:99:757,0,749:127
+6 89947117 rs9942462 A G 5019.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.654;DB;DP=181;Dels=0.00;FS=0.000;HaplotypeScore=3.3205;MLEAC=6;MLEAF=1.00;MQ=53.30;MQ0=0;MQRankSum=0.428;QD=27.73;ReadPosRankSum=1.090;SB=-3.151e+03;VQSLOD=5.6763;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:60:99:1715,138,0:92 1|1:1,55:56:93:1401,93,0:92 1|1:0,65:65:99:1903,153,0:92
+6 110345430 rs56272355 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.241;DB;DP=230;Dels=0.00;FS=2.159;HaplotypeScore=1.7615;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-0.200;QD=11.46;ReadPosRankSum=-0.480;SB=-5.580e+02;VQSLOD=8.9824;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,220,2860:127 0|0:75,0:76:99:0,184,2321:127 0|1:35,42:77:99:917,0,926:127
+6 120734422 rs62424426 T C 1091.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.268;DB;DP=208;Dels=0.00;FS=4.347;HaplotypeScore=0.7034;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=-0.188;QD=14.36;ReadPosRankSum=-0.149;SB=-5.560e+02;VQSLOD=8.6529;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,205,2692:127 0|0:61,0:61:99:0,175,2298:127 0|1:39,37:76:99:1126,0,1140:127
+6 131725921 . G A 64.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=3.650;DP=182;Dels=0.00;FS=3.535;HaplotypeScore=2.2441;MLEAC=1;MLEAF=0.167;MQ=50.85;MQ0=1;MQRankSum=-6.039;QD=1.31;ReadPosRankSum=-1.757;SB=-4.901e+01;VQSLOD=-0.6667;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:59,0:60:99:0,168,1897:98 0|1:33,16:49:99:99,0,790:98 0|0:73,0:73:99:0,156,1824:98
+6 143691852 rs17792267 C T 3641.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.465;DB;DP=203;Dels=0.00;FS=2.413;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=1.198;QD=27.17;ReadPosRankSum=-1.140;SB=-1.772e+03;VQSLOD=8.8712;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:29,33:62:99:1131,0,803:127 1|1:0,72:72:99:2510,196,0:127 0|0:69,0:69:99:0,190,2480:127
+6 154006585 rs7752561 G A 919.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.323;DB;DP=223;Dels=0.00;FS=0.000;HaplotypeScore=0.8254;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-0.749;QD=10.45;ReadPosRankSum=-0.155;SB=-5.260e+02;VQSLOD=8.8368;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,202,2601:127 0|1:51,37:88:99:954,0,1475:127 0|0:65,0:65:99:0,175,2269:127
+6 162459664 rs2849564 C T 1819.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.399;DB;DP=201;Dels=0.00;FS=3.295;HaplotypeScore=2.5591;MLEAC=2;MLEAF=0.333;MQ=59.38;MQ0=0;MQRankSum=1.792;QD=12.90;ReadPosRankSum=-1.045;SB=-1.068e+03;VQSLOD=8.1160;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:28,40:68:99:1007,0,793:120 1|0:38,35:73:99:851,0,831:120 0|0:60,0:60:99:0,120,1421:120
+7 4683258 rs62450857 G A 1127.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.991;DB;DP=191;Dels=0.00;FS=3.236;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=57.16;MQ0=0;MQRankSum=1.297;QD=14.09;ReadPosRankSum=0.469;SB=-4.730e+02;VQSLOD=6.6182;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,196,2495:120 0|1:38,42:80:99:1162,0,1016:120 0|0:45,0:45:99:0,120,1531:120
+7 12502849 rs848025 C G 4109.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.809;DB;DP=220;Dels=0.00;FS=1.141;HaplotypeScore=1.8049;MLEAC=4;MLEAF=0.667;MQ=59.56;MQ0=0;MQRankSum=0.625;QD=18.68;ReadPosRankSum=-0.019;SB=-1.989e+03;VQSLOD=8.7123;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:47,45:92:99:1216,0,1501:127 1|1:0,71:71:99:2145,184,0:127 0|1:27,30:57:99:748,0,743:127
+7 29544610 rs6462145 A T 4020.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.326;DB;DP=189;Dels=0.00;FS=5.388;HaplotypeScore=1.2974;MLEAC=4;MLEAF=0.667;MQ=58.54;MQ0=0;MQRankSum=1.295;QD=21.27;ReadPosRankSum=-1.212;SB=-1.878e+03;VQSLOD=7.3155;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:27,49:77:99:1466,0,733:127 1|1:0,64:64:99:1888,147,0:127 0|1:18,27:48:99:666,0,410:127
+7 38984187 rs118081099 A C 569.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.110;DB;DP=182;Dels=0.00;FS=6.196;HaplotypeScore=0.5533;MLEAC=1;MLEAF=0.167;MQ=54.22;MQ0=0;MQRankSum=1.675;QD=9.33;ReadPosRankSum=1.162;SB=-1.260e+02;VQSLOD=4.8877;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:72,0:72:99:0,196,2446:127 0|1:38,23:61:99:604,0,1196:127 0|0:48,1:49:99:0,138,1711:127
+7 48862174 rs965346 A G 877.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.250;DB;DP=194;Dels=0.00;FS=6.112;HaplotypeScore=0.6489;MLEAC=1;MLEAF=0.167;MQ=57.54;MQ0=0;MQRankSum=2.058;QD=16.25;ReadPosRankSum=-1.204;SB=-4.040e+02;VQSLOD=6.2372;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3007:127 0|0:58,0:58:99:0,160,2067:127 0|1:22,32:54:99:912,0,686:127
+7 56584972 rs34475770 C T 2465.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.103;DB;DP=255;Dels=0.00;FS=2.230;HaplotypeScore=0.8840;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=1.766;QD=15.03;ReadPosRankSum=1.126;SB=-1.412e+03;VQSLOD=6.5725;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:91,0:91:99:0,259,3369:127 0|1:36,49:85:99:1444,0,1000:127 0|1:38,41:79:99:1060,0,1084:127
+7 62232046 . C T 1155.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.643;DP=230;Dels=0.00;FS=6.304;HaplotypeScore=12.7679;MLEAC=1;MLEAF=0.167;MQ=58.61;MQ0=3;MQRankSum=-0.697;QD=15.20;ReadPosRankSum=-1.202;SB=-4.440e+02;VQSLOD=2.5725;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:77,1:78:99:0,217,2824:127 0|0:76,0:76:99:0,202,2604:127 0|1:34,42:76:99:1190,0,994:127
+7 69334430 rs917719 C T 1223.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.841;DB;DP=193;Dels=0.00;FS=6.656;HaplotypeScore=0.8147;MLEAC=2;MLEAF=0.333;MQ=59.81;MQ0=0;MQRankSum=1.631;QD=9.63;ReadPosRankSum=1.458;SB=-7.370e+02;VQSLOD=7.0004;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:770,0,1258:127 1|0:26,24:50:99:492,0,840:127 0|0:66,0:66:99:0,172,2210:127
+7 79508376 rs2525826 G T 716.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.152;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=0.8658;MLEAC=1;MLEAF=0.167;MQ=59.48;MQ0=0;MQRankSum=1.420;QD=13.51;ReadPosRankSum=0.263;SB=-4.080e+02;VQSLOD=9.5728;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:65:99:0,181,2312:127 0|0:78,0:78:99:0,226,2916:127 0|1:27,26:53:99:751,0,845:127
+7 89752110 rs39232 T G 3944.01 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=1.4477;MLEAC=6;MLEAF=1.00;MQ=38.19;MQ0=21;QD=18.26;SB=-2.716e+03;VQSLOD=2.6638;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:1564,132,0:101 1|1:0,79:79:99:1258,108,0:101 1|1:0,66:66:99:1122,102,0:101
+7 101161506 rs2158739 C T 4522.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.698;DB;DP=172;Dels=0.00;FS=4.280;HaplotypeScore=1.5077;MLEAC=5;MLEAF=0.833;MQ=58.18;MQ0=0;MQRankSum=-0.295;QD=26.29;ReadPosRankSum=0.974;SB=-2.287e+03;VQSLOD=8.2831;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:73:99:2443,202,0:110 1|0:23,26:50:99:711,0,586:110 1|1:0,48:49:99:1368,111,0:110
+7 110843795 rs214455 A G 8548.01 PASS AC=6;AF=1.00;AN=6;DB;DP=258;Dels=0.00;FS=0.000;HaplotypeScore=2.3561;MLEAC=6;MLEAF=1.00;MQ=59.35;MQ0=0;QD=33.13;SB=-4.197e+03;VQSLOD=10.7627;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3535,301,0:127 1|1:0,66:66:99:2270,193,0:127 1|1:0,86:86:99:2743,229,0:127
+7 124589684 rs12113765 G C 4948.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.607;DB;DP=243;Dels=0.00;FS=1.040;HaplotypeScore=3.3790;MLEAC=4;MLEAF=0.667;MQ=58.74;MQ0=0;MQRankSum=1.246;QD=20.36;ReadPosRankSum=-0.387;SB=-2.411e+03;VQSLOD=7.0507;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,27:71:99:796,0,1350:127 1|1:0,84:85:99:2760,217,0:127 0|1:41,46:87:99:1392,0,1180:127
+7 144383888 rs73161092 T C 689.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.434;DB;DP=254;Dels=0.00;FS=8.629;HaplotypeScore=0.0000;MLEAC=1;MLEAF=0.167;MQ=59.54;MQ0=0;MQRankSum=0.163;QD=8.62;ReadPosRankSum=-1.802;SB=-3.560e+02;VQSLOD=6.4544;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:90,0:90:99:0,268,3553:127 0|1:47,33:80:99:724,0,1392:127 0|0:84,0:84:99:0,202,2644:127
+7 152208470 rs6464236 G C 4321.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.233;DB;DP=169;Dels=0.00;FS=1.635;HaplotypeScore=1.3568;MLEAC=5;MLEAF=0.833;MQ=57.18;MQ0=1;MQRankSum=1.907;QD=25.57;ReadPosRankSum=0.892;SB=-2.137e+03;VQSLOD=6.7602;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:1,56:57:99:1949,150,0:122 1|1:0,54:54:99:1557,123,0:122 1|0:30,28:58:99:815,0,715:122
+7 158686803 rs55765467 T C 200.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-10.112;DB;DP=310;Dels=0.00;FS=2.596;HaplotypeScore=1.2829;MLEAC=3;MLEAF=0.500;MQ=47.32;MQ0=0;MQRankSum=-4.959;QD=0.65;ReadPosRankSum=-10.956;SB=-1.206e+03;VQSLOD=-17.6411;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:64,33:97:99:148,0,1949:32 0/1:73,45:118:58:58,0,2287:32 0/1:65,30:95:33:33,0,1910:32
+8 4048009 rs7007410 C T 2713.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.954;DB;DP=197;Dels=0.00;FS=2.483;HaplotypeScore=0.7125;MLEAC=3;MLEAF=0.500;MQ=57.03;MQ0=0;MQRankSum=0.882;QD=13.77;ReadPosRankSum=-0.496;SB=-1.406e+03;VQSLOD=6.5035;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:38,30:68:99:847,0,1168:127 0/1:30,30:60:99:916,0,921:127 0/1:32,36:69:99:989,0,882:127
+8 8974322 rs28440961 G A 1682.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.716;DB;DP=190;Dels=0.00;FS=0.579;HaplotypeScore=1.5434;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=-0.652;QD=12.65;ReadPosRankSum=0.746;SB=-7.040e+02;VQSLOD=9.3708;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:32,32:64:99:790,0,1002:125 1|0:33,36:69:99:931,0,866:125 0|0:57,0:57:99:0,126,1622:125
+8 14463368 rs1355302 T A 2523.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.793;DB;DP=236;Dels=0.00;FS=3.776;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=59.14;MQ0=0;MQRankSum=-0.381;QD=15.97;ReadPosRankSum=-0.045;SB=-1.421e+03;VQSLOD=7.6920;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,43:79:99:1332,0,1176:127 0|0:78,0:78:99:0,214,2749:127 1|0:35,44:79:99:1230,0,1162:127
+8 21736923 rs13256921 G A 217.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=1.884;DB;DP=93;Dels=0.00;FS=5.533;HaplotypeScore=6.4995;MLEAC=1;MLEAF=0.167;MQ=42.13;MQ0=3;MQRankSum=0.517;QD=6.79;ReadPosRankSum=1.706;SB=-1.980e+02;VQSLOD=-2.6430;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:34,0:34:66:0,66,691:41 0|1:15,17:32:99:252,0,211:41 0|0:27,0:27:42:0,42,425:41
+8 42044954 rs1058720 G A 2760.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.313;DB;DP=157;Dels=0.00;FS=0.000;HaplotypeScore=2.0979;MLEAC=4;MLEAF=0.667;MQ=58.82;MQ0=0;MQRankSum=-2.021;QD=17.58;ReadPosRankSum=-0.462;SB=-1.377e+03;VQSLOD=7.5777;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1820,147,0:127 1|0:24,27:51:99:555,0,233:127 1|0:26,24:50:99:427,0,458:127
+8 56608897 rs57623198 C T 1911.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.515;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1327;MLEAC=2;MLEAF=0.333;MQ=59.80;MQ0=0;MQRankSum=0.336;QD=12.66;ReadPosRankSum=-2.326;SB=-9.730e+02;VQSLOD=8.5587;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,229,2989:127 0|1:44,30:74:99:897,0,1444:127 0|1:44,33:77:99:1053,0,1400:127
+8 66327344 rs13282622 G A 3918.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.514;DB;DP=192;Dels=0.00;FS=3.531;HaplotypeScore=1.6541;MLEAC=4;MLEAF=0.667;MQ=58.91;MQ0=0;MQRankSum=0.706;QD=20.41;ReadPosRankSum=-0.327;SB=-2.091e+03;VQSLOD=8.6266;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,37:71:99:1137,0,923:127 0|1:32,28:61:99:806,0,988:127 1|1:0,60:60:99:1975,153,0:127
+8 78181000 rs1563030 A G 5178.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.030;DB;DP=192;Dels=0.00;FS=4.675;HaplotypeScore=2.9473;MLEAC=5;MLEAF=0.833;MQ=59.62;MQ0=0;MQRankSum=-0.467;QD=26.97;ReadPosRankSum=-0.855;SB=-2.617e+03;VQSLOD=7.3445;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:59:99:1954,150,0:127 1|0:32,37:70:99:1198,0,888:127 1|1:0,63:63:99:2026,156,0:127
+8 90278211 rs11998540 A T 357.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.457;DB;DP=69;Dels=0.00;FS=1.289;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=1.415;QD=8.12;ReadPosRankSum=1.258;SB=-9.501e+01;VQSLOD=5.9584;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:12,7:19:99:185,0,416:60 0|0:25,0:25:60:0,60,805:60 1|0:16,9:25:99:211,0,500:60
+8 102355800 rs10103956 G T 1756.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.927;DB;DP=189;Dels=0.00;FS=5.921;HaplotypeScore=1.5445;MLEAC=2;MLEAF=0.333;MQ=59.66;MQ0=0;MQRankSum=-0.420;QD=13.41;ReadPosRankSum=-0.019;SB=-5.470e+02;VQSLOD=8.1563;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:32,38:70:99:1078,0,999:127 1|0:35,26:61:99:717,0,1103:127 0|0:57,0:58:99:0,156,2011:127
+8 113376378 rs41340951 T C 4379.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.019;DB;DP=211;Dels=0.00;FS=1.826;HaplotypeScore=0.2629;MLEAC=4;MLEAF=0.667;MQ=59.85;MQ0=0;MQRankSum=1.273;QD=20.75;ReadPosRankSum=0.144;SB=-1.893e+03;VQSLOD=8.8374;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,67:67:99:2221,187,0:127 1|0:32,37:69:99:1083,0,1066:127 1|0:35,40:75:99:1075,0,1108:127
+8 123499998 rs9693135 T C 926.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.820;DB;DP=207;Dels=0.00;FS=2.678;HaplotypeScore=1.2574;MLEAC=2;MLEAF=0.333;MQ=56.08;MQ0=0;MQRankSum=-2.729;QD=6.34;ReadPosRankSum=-0.269;SB=-8.230e+02;VQSLOD=4.3016;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2301:127 0|1:37,35:72:99:622,0,769:127 0|1:48,26:74:99:343,0,1280:127
+8 132727531 rs7000409 G A 2050.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.475;DB;DP=220;Dels=0.00;FS=5.203;HaplotypeScore=1.9424;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=1.230;QD=14.14;ReadPosRankSum=-0.871;SB=-1.080e+03;VQSLOD=7.7925;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:29,35:64:99:1215,0,785:127 0|0:75,0:75:99:0,190,2423:127 1|0:50,31:81:99:874,0,1611:127
+8 140651779 rs1469039 G A 1879.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.189;DB;DP=145;Dels=0.00;FS=0.000;HaplotypeScore=1.7695;MLEAC=3;MLEAF=0.500;MQ=58.39;MQ0=0;MQRankSum=0.745;QD=12.96;ReadPosRankSum=-0.159;SB=-9.360e+02;VQSLOD=9.0059;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:23,24:47:99:612,0,740:127 0/1:21,31:52:99:684,0,478:127 0/1:20,26:46:99:622,0,367:127
+9 2072356 rs4741641 T G 2054.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.235;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=2.2089;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=1.166;QD=13.00;ReadPosRankSum=-0.475;SB=-1.004e+03;VQSLOD=9.0206;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:49,45:94:99:1245,0,1615:127 0|0:85,0:85:99:0,217,2818:127 1|0:32,32:64:99:848,0,936:127
+9 16302655 rs9298755 T G 1394.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.356;DB;DP=200;Dels=0.00;FS=0.000;HaplotypeScore=3.1863;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=0.586;QD=10.03;ReadPosRankSum=-0.771;SB=-8.720e+02;VQSLOD=7.7724;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:60,1:61:99:0,165,2004:127 0|1:29,28:57:99:494,0,759:127 0|1:41,40:82:99:939,0,1069:127
+9 25201692 rs9408058 C T 8643.01 PASS AC=6;AF=1.00;AN=6;DB;DP=245;Dels=0.00;FS=0.000;HaplotypeScore=0.8982;MLEAC=6;MLEAF=1.00;MQ=59.13;MQ0=0;QD=35.28;SB=-4.398e+03;VQSLOD=12.1738;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3312,256,0:127 1|1:0,81:81:99:2771,223,0:127 1|1:0,75:75:99:2560,202,0:127
+9 44998848 . C G 254.43 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=2.203;DP=193;Dels=0.00;FS=10.822;HaplotypeScore=0.2447;MLEAC=5;MLEAF=0.833;MQ=6.48;MQ0=163;MQRankSum=-1.206;QD=1.32;ReadPosRankSum=0.790;SB=-1.372e+02;VQSLOD=-6.6319;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:39,27:66:23:132,0,23:8 1|1:36,16:52:15:118,15,0:8 0|1:53,22:75:1:45,6,0:8
+9 69810010 rs113063015 A C 280.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.223;DB;DP=716;DS;Dels=0.00;FS=8.996;HaplotypeScore=39.8350;MLEAC=3;MLEAF=0.500;MQ=37.32;MQ0=64;MQRankSum=-3.574;QD=0.39;ReadPosRankSum=-0.897;SB=-1.065e-02;VQSLOD=-68.1677;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:218,23:241:73:73,0,3591:70 0/1:188,39:227:99:172,0,4233:70 0/1:217,31:248:74:74,0,5042:70
+9 78741390 rs7049138 G A 1797.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.235;DB;DP=168;Dels=0.00;FS=4.003;HaplotypeScore=1.0858;MLEAC=3;MLEAF=0.500;MQ=55.32;MQ0=2;MQRankSum=-1.673;QD=16.34;ReadPosRankSum=-0.626;SB=-7.740e+02;VQSLOD=5.1915;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:828,0,918:80 1|1:0,40:40:81:1014,81,0:80 0|0:58,0:58:99:0,129,1403:80
+9 89010476 rs164937 T C 736.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-3.977;DB;DP=216;Dels=0.00;FS=1.481;HaplotypeScore=1.0649;MLEAC=1;MLEAF=0.167;MQ=39.79;MQ0=9;MQRankSum=-3.028;QD=9.56;ReadPosRankSum=0.542;SB=-4.240e+02;VQSLOD=2.0772;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,174,2097:127 0|1:40,37:77:99:771,0,876:127 0|0:73,0:73:99:0,183,2147:127
+9 98491693 rs12337935 C A 1474.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.098;DB;DP=97;Dels=0.00;FS=14.282;HaplotypeScore=1.7726;MLEAC=4;MLEAF=0.667;MQ=58.64;MQ0=0;MQRankSum=-0.224;QD=15.20;ReadPosRankSum=1.166;SB=-6.430e+02;VQSLOD=5.7986;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,12:26:99:348,0,352:63 1|1:0,28:29:63:781,63,0:63 0|1:17,25:42:99:387,0,364:63
+9 109619207 rs4743032 A T 3810.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.859;DB;DP=214;Dels=0.00;FS=10.284;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=0.557;QD=25.07;ReadPosRankSum=-0.836;SB=-2.019e+03;VQSLOD=8.1399;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:37,39:76:99:1185,0,1225:127 1|1:0,76:76:99:2625,202,0:127 0|0:62,0:62:99:0,156,2049:127
+9 130235282 . A G 166.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=-8.543;DP=232;Dels=0.00;FS=233.037;HaplotypeScore=2.9977;MLEAC=2;MLEAF=0.333;MQ=59.04;MQ0=0;MQRankSum=-2.038;QD=1.15;ReadPosRankSum=-7.649;SB=-3.100e-03;VQSLOD=-139.8496;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:74,14:88:99:0,108,2160:59 0|1:42,36:79:60:60,0,966:59 0|1:47,18:65:99:145,0,922:59
+9 138617823 rs55724592 C T 53.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.380;DB;DP=72;Dels=0.00;FS=8.078;HaplotypeScore=1.0225;MLEAC=1;MLEAF=0.167;MQ=58.90;MQ0=0;MQRankSum=0.851;QD=2.66;ReadPosRankSum=-0.344;SB=-9.096e+01;VQSLOD=4.2652;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:20,0:20:48:0,48,580:44 0|0:32,0:32:48:0,48,577:44 0|1:10,10:20:88:88,0,199:44
+10 4588547 rs313427 C T 1985.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.695;DB;DP=204;Dels=0.00;FS=1.813;HaplotypeScore=0.6137;MLEAC=2;MLEAF=0.333;MQ=59.73;MQ0=0;MQRankSum=0.241;QD=14.18;ReadPosRankSum=0.717;SB=-1.082e+03;VQSLOD=9.7784;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:39,35:74:99:1029,0,1182:127 1|0:32,34:66:99:995,0,1024:127 0|0:64,0:64:99:0,175,2242:127
+10 11560326 rs4424580 C T 1027.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.178;DB;DP=207;Dels=0.00;FS=0.573;HaplotypeScore=2.1981;MLEAC=2;MLEAF=0.333;MQ=59.24;MQ0=0;MQRankSum=-0.988;QD=7.78;ReadPosRankSum=-0.492;SB=-7.450e+02;VQSLOD=8.4594;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:41,32:73:99:609,0,930:96 1|0:29,30:59:99:457,0,570:96 0|0:74,1:75:96:0,96,1185:96
+10 19567676 rs61458006 G T 599.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.610;DB;DP=195;Dels=0.00;FS=0.844;HaplotypeScore=0.8795;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.191;QD=11.31;ReadPosRankSum=-1.635;SB=-2.780e+02;VQSLOD=9.3606;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:75,0:75:99:0,208,2645:127 0|1:30,23:53:99:634,0,915:127 0|0:67,0:67:99:0,199,2540:127
+10 29082980 . G C 42.53 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.216;DP=107;Dels=0.00;FS=60.979;HaplotypeScore=1.0911;MLEAC=3;MLEAF=0.500;MQ=55.72;MQ0=0;MQRankSum=-0.633;QD=0.40;ReadPosRankSum=-4.307;SB=-2.798e-01;VQSLOD=-11.1718;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,12:43:12:12,0,757:12 0/1:19,11:30:35:35,0,429:12 0/1:25,9:34:34:34,0,388:12
+10 38560911 rs80189231 T A 1072.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.103;DB;DP=356;Dels=0.00;FS=12.038;HaplotypeScore=5.4015;MLEAC=3;MLEAF=0.500;MQ=49.74;MQ0=6;MQRankSum=-2.686;QD=3.01;ReadPosRankSum=0.797;SB=-1.690e+02;VQSLOD=-3.5129;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:109,26:135:99:389,0,2879:127 0/1:84,27:111:99:539,0,2214:127 0/1:93,17:110:99:183,0,2277:127
+10 56495833 rs6481118 G A 7633.01 PASS AC=6;AF=1.00;AN=6;DB;DP=212;Dels=0.00;FS=0.000;HaplotypeScore=0.3328;MLEAC=6;MLEAF=1.00;MQ=54.64;MQ0=0;QD=36.00;SB=-2.091e+03;VQSLOD=8.6651;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,62:62:99:2383,184,0:127 1|1:1,67:68:99:2375,184,0:127 1|1:0,82:82:99:2875,223,0:127
+10 65355538 rs10733794 A G 2464.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.392;DB;DP=193;Dels=0.00;FS=7.473;HaplotypeScore=2.5434;MLEAC=3;MLEAF=0.500;MQ=58.06;MQ0=2;MQRankSum=0.999;QD=18.96;ReadPosRankSum=-1.229;SB=-1.065e+03;VQSLOD=6.3934;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:830,0,1039:127 1|1:1,64:65:99:1679,153,0:127 0|0:63,0:63:99:0,159,2042:127
+10 74020452 rs72806301 C A 1116.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.155;DB;DP=135;Dels=0.00;FS=3.279;HaplotypeScore=0.8720;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=-0.818;QD=11.88;ReadPosRankSum=1.484;SB=-6.800e+02;VQSLOD=7.2668;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:20,27:47:99:658,0,446:104 0|0:41,0:41:99:0,105,1324:104 1|0:25,22:47:99:497,0,482:104
+10 85258657 rs4454662 C A 7638.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.716;DB;DP=223;Dels=0.00;FS=4.523;HaplotypeScore=1.1326;MLEAC=6;MLEAF=1.00;MQ=58.32;MQ0=0;MQRankSum=-1.230;QD=34.25;ReadPosRankSum=1.152;SB=-2.841e+03;VQSLOD=7.6461;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,64:65:99:2156,169,0:127 1|1:0,89:89:99:2982,238,0:127 1|1:0,69:69:99:2500,196,0:127
+10 95435201 rs2422323 C T 4017.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.438;DB;DP=203;Dels=0.00;FS=13.125;HaplotypeScore=3.2358;MLEAC=4;MLEAF=0.667;MQ=55.24;MQ0=0;MQRankSum=1.174;QD=19.79;ReadPosRankSum=-0.655;SB=-2.177e+03;VQSLOD=4.5957;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:38,45:83:99:1327,0,931:127 1|1:1,63:64:99:1966,156,0:127 0|1:30,25:56:99:724,0,807:127
+10 106444111 rs72813617 A G 632.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.838;DB;DP=197;Dels=0.00;FS=4.121;HaplotypeScore=1.8154;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-1.142;QD=12.40;ReadPosRankSum=-1.947;SB=-2.390e+02;VQSLOD=7.6230;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:84,0:84:99:0,241,3129:127 0|0:62,0:62:99:0,159,2008:127 0|1:27,24:51:99:667,0,584:127
+10 116646860 rs4752347 T A 4159.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.459;DB;DP=197;Dels=0.00;FS=3.519;HaplotypeScore=0.6313;MLEAC=4;MLEAF=0.667;MQ=59.27;MQ0=0;MQRankSum=1.049;QD=21.11;ReadPosRankSum=-1.271;SB=-2.347e+03;VQSLOD=8.3322;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2191,169,0:127 1|0:31,35:66:99:1031,0,863:127 1|0:31,37:68:99:937,0,774:127
+10 125452232 rs7900707 A G 3211.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-6.610;DB;DP=189;Dels=0.00;FS=17.742;HaplotypeScore=0.0000;MLEAC=4;MLEAF=0.667;MQ=59.66;MQ0=0;MQRankSum=0.614;QD=16.99;ReadPosRankSum=-0.321;SB=-1.553e+03;VQSLOD=6.9018;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:61:99:1944,168,0:127 1|0:44,26:70:99:627,0,1357:127 1|0:29,29:58:99:682,0,862:127
+10 132949760 rs10829924 A C 684.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.328;DB;DP=215;Dels=0.00;FS=15.464;HaplotypeScore=1.3183;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-1.053;QD=10.53;ReadPosRankSum=-2.893;SB=-2.920e+02;VQSLOD=5.8891;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:80,0:81:99:0,229,2999:127 0|0:69,0:69:99:0,175,2268:127 0|1:35,30:65:99:719,0,1046:127
+11 10741836 rs72853043 G A 175.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=0.127;DB;DP=174;Dels=0.00;FS=7.087;HaplotypeScore=7.4618;MLEAC=1;MLEAF=0.167;MQ=55.72;MQ0=1;MQRankSum=-1.291;QD=3.44;ReadPosRankSum=-1.185;SB=-2.220e+02;VQSLOD=1.6095;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,105,1278:65 0|0:42,0:45:66:0,66,802:65 0|1:21,29:51:99:210,0,469:65
+11 19325064 rs793250 G A 5752.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.080;DB;DP=203;Dels=0.00;FS=2.530;HaplotypeScore=0.8165;MLEAC=5;MLEAF=0.833;MQ=59.35;MQ0=0;MQRankSum=-0.061;QD=28.34;ReadPosRankSum=0.095;SB=-3.093e+03;VQSLOD=9.4617;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2527,190,0:127 1|1:0,78:78:99:2626,205,0:127 1|0:32,22:54:99:599,0,768:127
+11 26026566 rs7942277 T C 5414.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=58.89;MQ0=0;QD=30.76;SB=-2.812e+03;VQSLOD=11.0501;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1707,132,0:122 1|1:0,53:53:99:1581,123,0:122 1|1:0,70:70:99:2126,163,0:122
+11 35980461 rs263087 A T 3494.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.701;DB;DP=186;Dels=0.00;FS=0.000;HaplotypeScore=2.9570;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=0.836;QD=18.79;ReadPosRankSum=0.007;SB=-1.535e+03;VQSLOD=7.6407;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,35:71:99:1001,0,1165:127 0|1:30,26:56:99:710,0,796:127 1|1:0,59:59:99:1783,144,0:127
+11 44985620 rs7106313 C T 338.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.185;DB;DP=162;Dels=0.00;FS=4.840;HaplotypeScore=2.0046;MLEAC=1;MLEAF=0.167;MQ=56.94;MQ0=0;MQRankSum=2.019;QD=8.67;ReadPosRankSum=0.983;SB=-2.190e+02;VQSLOD=6.6624;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:79,0:80:99:0,174,2084:72 0|0:43,0:43:72:0,72,877:72 0|1:20,18:39:99:373,0,365:72
+11 55040918 rs187118824 A T 1019.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.079;DB;DP=65;Dels=0.02;FS=12.723;HaplotypeScore=0.9771;MLEAC=2;MLEAF=0.333;MQ=56.64;MQ0=1;MQRankSum=0.323;QD=25.48;ReadPosRankSum=0.873;SB=-2.060e+01;VQSLOD=4.4200;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:2,9:11:48:325,0,48:50 0|0:24,1:25:63:0,63,833:50 1|0:6,22:28:51:733,0,51:50
+11 65339346 rs1194104 C T 1804.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.465;DB;DP=189;Dels=0.00;FS=8.432;HaplotypeScore=2.2718;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=-0.120;QD=13.67;ReadPosRankSum=-0.306;SB=-1.061e+03;VQSLOD=7.9509;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,157,2050:127 0|1:30,35:65:99:781,0,822:127 0|1:23,44:67:99:1062,0,690:127
+11 75978490 rs655877 G C 2986.25 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.846;DB;DP=127;Dels=0.00;FS=5.433;HaplotypeScore=0.2629;MLEAC=5;MLEAF=0.833;MQ=59.42;MQ0=0;MQRankSum=0.026;QD=23.51;ReadPosRankSum=0.168;SB=-1.613e+03;VQSLOD=7.0404;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,50:50:99:1405,111,0:101 1|1:0,45:46:99:1269,102,0:101 1|0:17,14:31:99:354,0,469:101
+11 86061661 rs11825046 T C 6014.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.250;DB;DP=282;Dels=0.00;FS=0.960;HaplotypeScore=1.6440;MLEAC=4;MLEAF=0.667;MQ=59.57;MQ0=0;MQRankSum=1.057;QD=21.33;ReadPosRankSum=-1.763;SB=-3.081e+03;VQSLOD=7.3485;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:54,49:103:99:1498,0,1848:127 1|1:0,83:83:99:2924,223,0:127 0|1:44,52:96:99:1592,0,1380:127
+11 103989190 rs1545865 T C 4915.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.030;DB;DP=219;Dels=0.00;FS=1.231;HaplotypeScore=1.2090;MLEAC=4;MLEAF=0.667;MQ=59.37;MQ0=0;MQRankSum=1.103;QD=22.44;ReadPosRankSum=0.773;SB=-2.213e+03;VQSLOD=8.9081;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:23,40:63:99:1203,0,669:127 0|1:36,52:88:99:1433,0,1136:127 1|1:0,68:68:99:2279,178,0:127
+11 113825129 rs1150234 G A 2441.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.977;DB;DP=210;Dels=0.00;FS=0.000;HaplotypeScore=2.0700;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=0.877;QD=11.63;ReadPosRankSum=0.262;SB=-1.513e+03;VQSLOD=9.0378;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,33:63:99:881,0,774:127 0/1:46,33:80:99:726,0,1020:127 0/1:32,35:67:99:873,0,759:127
+11 123470819 rs1148095 T C 6964.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.850;DB;DP=242;Dels=0.00;FS=1.477;HaplotypeScore=1.3868;MLEAC=5;MLEAF=0.833;MQ=59.25;MQ0=0;MQRankSum=-1.734;QD=28.78;ReadPosRankSum=-0.749;SB=-3.242e+03;VQSLOD=8.7854;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3408,265,0:127 1|0:35,51:86:99:1520,0,1059:127 1|1:0,64:64:99:2036,157,0:127
+11 132780959 rs61906922 C T 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.221;DB;DP=263;Dels=0.00;FS=0.601;HaplotypeScore=1.8444;MLEAC=1;MLEAF=0.167;MQ=59.58;MQ0=0;MQRankSum=0.997;QD=15.25;ReadPosRankSum=-0.746;SB=-6.890e+02;VQSLOD=8.8133;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:87,0:87:99:0,250,2877:127 0|0:87,0:88:99:0,253,3009:127 0|1:43,45:88:99:1377,0,1138:127
+12 5922552 rs17786352 C G 1874.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.386;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.3053;MLEAC=2;MLEAF=0.333;MQ=54.49;MQ0=0;MQRankSum=2.656;QD=13.11;ReadPosRankSum=1.042;SB=-9.400e+02;VQSLOD=4.7495;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,35:79:99:897,0,1383:127 1|0:28,36:64:99:1016,0,734:127 0|0:88,0:88:99:0,238,3004:127
+12 12560642 rs10772559 G T 501.28 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=0.747;DB;DP=229;Dels=0.04;FS=17.409;HaplotypeScore=19.6989;MLEAC=4;MLEAF=0.667;MQ=49.37;MQ0=0;MQRankSum=-3.656;QD=2.19;ReadPosRankSum=-5.397;SB=-2.196e+03;VQSLOD=-10.1992;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,66:66:24:273,24,0:24 1|0:29,45:74:99:148,0,702:24 1|0:33,46:80:99:122,0,781:24
+12 21328424 rs4149040 G C 2565.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.888;DB;DP=252;Dels=0.00;FS=9.753;HaplotypeScore=0.6082;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=1.166;QD=15.18;ReadPosRankSum=0.966;SB=-1.181e+03;VQSLOD=7.5539;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,49:89:99:1534,0,1308:127 0|0:83,0:83:99:0,241,3117:127 1|0:45,35:80:99:1070,0,1402:127
+12 29935607 rs7305813 A C 810.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.307;DB;DP=203;Dels=0.00;FS=14.326;HaplotypeScore=1.9820;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.164;QD=12.86;ReadPosRankSum=-0.733;SB=-2.950e+02;VQSLOD=7.9009;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:71,0:71:99:0,193,2479:127 0|0:69,0:69:99:0,196,2464:127 0|1:28,35:63:99:845,0,847:127
+12 39118960 rs79977305 G A 1330.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.307;DB;DP=263;Dels=0.00;FS=0.597;HaplotypeScore=1.4583;MLEAC=1;MLEAF=0.167;MQ=58.83;MQ0=0;MQRankSum=1.925;QD=13.57;ReadPosRankSum=-0.548;SB=-7.360e+02;VQSLOD=7.3733;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,2869:127 0|0:84,0:84:99:0,229,2712:127 0|1:51,47:98:99:1365,0,1343:127
+12 48120010 rs3829317 A C 4015.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.659;DB;DP=162;Dels=0.00;FS=1.828;HaplotypeScore=2.1844;MLEAC=5;MLEAF=0.833;MQ=59.48;MQ0=0;MQRankSum=0.154;QD=24.78;ReadPosRankSum=0.482;SB=-2.240e+03;VQSLOD=8.1337;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2024,163,0:110 1|0:24,27:51:99:550,0,540:110 1|1:0,48:48:99:1441,111,0:110
+12 58867437 rs140632614 G T 829.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=1.409;DB;DP=144;Dels=0.00;FS=68.612;HaplotypeScore=0.8667;MLEAC=4;MLEAF=0.667;MQ=35.15;MQ0=16;MQRankSum=-7.440;QD=5.76;ReadPosRankSum=-0.245;SB=-1.011e+00;VQSLOD=-16.4891;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,24:58:99:291,0,1100:44 0|1:42,8:50:61:61,0,1319:44 1|1:1,35:36:45:519,45,0:44
+12 79238948 rs10778234 C T 3719.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.187;DB;DP=241;Dels=0.00;FS=7.073;HaplotypeScore=0.2447;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.381;QD=15.43;ReadPosRankSum=0.579;SB=-1.864e+03;VQSLOD=7.8136;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:42,35:77:99:1049,0,1213:127 0/1:37,32:69:99:988,0,957:127 0/1:42,53:95:99:1682,0,1062:127
+12 90856710 rs825945 T C 1096.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.342;DB;DP=193;Dels=0.00;FS=2.164;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=2.071;QD=9.70;ReadPosRankSum=-1.697;SB=-5.710e+02;VQSLOD=7.3118;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:80,0:80:99:0,232,3042:127 0|1:30,21:51:99:511,0,921:127 0|1:36,26:62:99:624,0,1085:127
+12 101460237 rs7965836 C T 3485.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.070;DB;DP=247;Dels=0.00;FS=2.895;HaplotypeScore=0.6556;MLEAC=3;MLEAF=0.500;MQ=59.83;MQ0=0;MQRankSum=-0.655;QD=14.11;ReadPosRankSum=-0.983;SB=-1.581e+03;VQSLOD=8.4872;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,43:83:99:1287,0,1179:127 0/1:44,36:80:99:1068,0,1363:127 0/1:43,41:84:99:1130,0,1321:127
+12 112830546 rs150699511 C A 487.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.014;DB;DP=179;Dels=0.00;FS=0.860;HaplotypeScore=2.3392;MLEAC=1;MLEAF=0.167;MQ=59.16;MQ0=0;MQRankSum=1.141;QD=8.86;ReadPosRankSum=0.950;SB=-2.870e+02;VQSLOD=8.1138;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:62:99:0,166,2141:127 0|1:34,21:55:99:522,0,751:127 0|0:62,0:62:99:0,141,1808:127
+12 122942070 rs10744217 A G 1812.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.353;DB;DP=179;Dels=0.00;FS=0.663;HaplotypeScore=1.4184;MLEAC=3;MLEAF=0.500;MQ=58.69;MQ0=0;MQRankSum=0.992;QD=15.10;ReadPosRankSum=1.081;SB=-5.860e+02;VQSLOD=8.4750;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,36:71:99:762,0,1100:92 1|1:0,48:49:93:1095,93,0:92 0|0:59,0:59:99:0,120,1560:92
+12 130522866 rs1613499 C T 3975.01 PASS AC=6;AF=1.00;AN=6;DB;DP=130;Dels=0.00;FS=0.000;HaplotypeScore=0.6332;MLEAC=6;MLEAF=1.00;MQ=59.11;MQ0=0;QD=30.58;SB=-1.386e+03;VQSLOD=10.2250;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,57:57:99:1939,144,0:73 1|1:0,34:34:75:990,75,0:73 1|1:0,39:39:78:1046,78,0:73
+13 21520045 rs9509464 A C 5103.01 PASS AC=6;AF=1.00;AN=6;DB;DP=195;Dels=0.00;FS=0.000;HaplotypeScore=1.6144;MLEAC=6;MLEAF=1.00;MQ=47.37;MQ0=0;QD=26.17;SB=-2.582e+03;VQSLOD=5.1918;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2106,186,0:98 1|1:0,78:78:99:1856,162,0:98 1|1:0,46:46:99:1141,99,0:98
+13 28463938 rs954750 C T 2740.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.206;DB;DP=242;Dels=0.00;FS=0.000;HaplotypeScore=4.0078;MLEAC=2;MLEAF=0.333;MQ=59.46;MQ0=0;MQRankSum=0.880;QD=16.61;ReadPosRankSum=-0.617;SB=-1.312e+03;VQSLOD=6.7692;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:40,43:83:99:1362,0,1242:127 1|0:35,47:82:99:1417,0,1010:127 0|0:76,0:77:99:0,205,2635:127
+13 37484693 rs1571317 T C 971.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.315;DB;DP=229;Dels=0.00;FS=3.052;HaplotypeScore=0.6603;MLEAC=1;MLEAF=0.167;MQ=58.51;MQ0=0;MQRankSum=1.885;QD=12.78;ReadPosRankSum=-0.343;SB=-5.750e+02;VQSLOD=7.3064;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:94,0:94:99:0,253,3258:127 0|1:35,41:76:99:1006,0,924:127 0|0:59,0:59:99:0,147,1872:127
+13 46407442 rs11147990 G A 2668.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.227;DB;DP=199;Dels=0.00;FS=0.530;HaplotypeScore=1.8025;MLEAC=3;MLEAF=0.500;MQ=58.99;MQ0=0;MQRankSum=0.023;QD=20.21;ReadPosRankSum=-0.452;SB=-1.651e+03;VQSLOD=9.2006;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:36,33:69:99:994,0,1056:127 0|0:67,0:67:99:0,141,1821:127 1|1:0,63:63:99:1719,135,0:127
+13 56456878 rs2997102 C A 9454.01 PASS AC=6;AF=1.00;AN=6;DB;DP=257;Dels=0.00;FS=0.000;HaplotypeScore=0.9537;MLEAC=6;MLEAF=1.00;MQ=59.57;MQ0=0;QD=36.79;SB=-4.826e+03;VQSLOD=11.5149;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,99:99:99:3692,280,0:127 1|1:0,88:88:99:3239,253,0:127 1|1:0,70:70:99:2523,193,0:127
+13 65275154 rs359338 G A 1963.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.733;DB;DP=173;Dels=0.00;FS=3.628;HaplotypeScore=0.9480;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=-0.676;QD=14.54;ReadPosRankSum=0.399;SB=-1.054e+03;VQSLOD=8.4489;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:31,28:59:99:883,0,990:108 1|0:39,37:76:99:1119,0,1112:108 0|0:38,0:38:99:0,108,1390:108
+13 74611546 rs73214804 C T 639.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.487;DB;DP=164;Dels=0.00;FS=0.000;HaplotypeScore=1.4071;MLEAC=1;MLEAF=0.167;MQ=58.95;MQ0=0;MQRankSum=0.902;QD=11.21;ReadPosRankSum=-0.541;SB=-3.000e+02;VQSLOD=8.8824;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:53,0:53:99:0,135,1773:110 0|0:53,1:54:99:0,111,1440:110 0|1:24,33:57:99:674,0,388:110
+13 83670546 . G A 169.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.301;DP=178;Dels=0.00;FS=0.000;HaplotypeScore=36.5059;MLEAC=2;MLEAF=0.333;MQ=42.20;MQ0=11;MQRankSum=-6.654;QD=1.38;ReadPosRankSum=-0.761;SB=-1.340e+02;VQSLOD=-20.4053;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:37,16:53:99:139,0,523:90 0|0:51,4:55:91:0,91,1393:90 1|0:58,12:70:69:69,0,1214:90
+13 92742124 rs2148446 G A 1884.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.340;DB;DP=213;Dels=0.00;FS=0.000;HaplotypeScore=0.3156;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=0;MQRankSum=-2.935;QD=12.99;ReadPosRankSum=-0.579;SB=-9.540e+02;VQSLOD=7.2833;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|1:38,38:76:99:1130,0,1190:127 0|0:68,0:68:99:0,190,2454:127 1|0:38,31:69:99:793,0,1094:127
+13 101976707 rs527328 A T 9240.01 PASS AC=6;AF=1.00;AN=6;DB;DP=259;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=53.28;MQ0=0;QD=35.68;SB=-4.696e+03;VQSLOD=7.5241;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3410,262,0:127 1|1:0,88:88:99:3195,247,0:127 1|1:1,78:79:99:2635,202,0:127
+13 109990322 rs7328109 T C 7198.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.487;DB;DP=245;Dels=0.00;FS=5.887;HaplotypeScore=1.8793;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=-0.236;QD=29.38;ReadPosRankSum=0.136;SB=-3.593e+03;VQSLOD=8.8925;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2825,220,0:127 1|0:33,54:87:99:1591,0,933:127 1|1:0,79:79:99:2782,214,0:127
+14 20313371 rs10137604 A C 2154.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.894;DB;DP=255;Dels=0.00;FS=0.000;HaplotypeScore=2.0503;MLEAC=2;MLEAF=0.333;MQ=56.32;MQ0=1;MQRankSum=1.608;QD=13.72;ReadPosRankSum=0.126;SB=-1.124e+03;VQSLOD=5.6223;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,48:88:99:1426,0,1229:127 0|0:98,0:98:99:0,268,3527:127 1|0:43,26:69:99:767,0,1284:127
+14 38160457 rs2181345 A C 4683.01 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=2.5449;MLEAC=6;MLEAF=1.00;MQ=59.00;MQ0=0;QD=27.71;SB=-2.390e+03;VQSLOD=9.9888;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1818,141,0:107 1|1:0,58:58:99:1523,123,0:107 1|1:0,53:55:99:1342,108,0:107
+14 47568119 rs1952206 T C 3399.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-9.721;DB;DP=230;Dels=0.00;FS=0.483;HaplotypeScore=0.6577;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=-0.479;QD=14.78;ReadPosRankSum=1.261;SB=-1.667e+03;VQSLOD=9.1589;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:41,43:84:99:1239,0,1315:127 0/1:28,43:71:99:1178,0,816:127 0/1:40,35:75:99:982,0,1314:127
+14 56951735 rs1189276 G A 6939.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=3.878;DB;DP=235;Dels=0.00;FS=9.373;HaplotypeScore=0.9063;MLEAC=5;MLEAF=0.833;MQ=59.52;MQ0=0;MQRankSum=-0.550;QD=29.53;ReadPosRankSum=1.104;SB=-3.438e+03;VQSLOD=8.7592;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,92:93:99:3558,274,0:127 1|1:0,60:60:99:2120,165,0:127 1|0:40,42:82:99:1261,0,1194:127
+14 68051087 rs11628035 G A 4028.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.928;DB;DP=236;Dels=0.00;FS=8.184;HaplotypeScore=1.3296;MLEAC=3;MLEAF=0.500;MQ=58.83;MQ0=0;MQRankSum=1.834;QD=25.49;ReadPosRankSum=2.590;SB=-1.989e+03;VQSLOD=6.7911;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:1265,0,1112:127 1|1:0,81:81:99:2763,214,0:127 0|0:78,0:78:99:0,208,2673:127
+14 87263523 rs2542229 A C 8104.01 PASS AC=6;AF=1.00;AN=6;DB;DP=239;Dels=0.00;FS=0.000;HaplotypeScore=0.6305;MLEAC=6;MLEAF=1.00;MQ=59.17;MQ0=0;QD=33.91;SB=-4.393e+03;VQSLOD=11.3001;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,77:77:99:2810,214,0:127 1|1:0,85:85:99:2877,223,0:127 1|1:0,77:77:99:2417,187,0:127
+14 96490389 rs72702859 C G 3394.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.529;DB;DP=264;Dels=0.00;FS=2.746;HaplotypeScore=3.1300;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=-1.258;QD=18.25;ReadPosRankSum=-0.961;SB=-1.966e+03;VQSLOD=6.3356;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:34,52:86:99:1358,0,886:127 1|1:0,100:100:99:2036,180,0:127 0|0:78,0:78:99:0,184,2393:127
+14 106085773 rs2955055 C T 2115.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.746;DB;DP=172;Dels=0.00;FS=18.420;HaplotypeScore=2.9489;MLEAC=3;MLEAF=0.500;MQ=35.68;MQ0=18;MQRankSum=3.251;QD=12.30;ReadPosRankSum=0.100;SB=-5.530e+02;VQSLOD=1.2866;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,33:65:99:600,0,554:80 0/1:30,42:72:99:1001,0,400:80 0/1:12,23:35:80:553,0,80:80
+15 23743658 rs142070302 T A 1007.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.164;DB;DP=408;Dels=0.00;FS=166.853;HaplotypeScore=53.5447;MLEAC=3;MLEAF=0.500;MQ=38.96;MQ0=14;MQRankSum=-6.283;QD=2.47;ReadPosRankSum=2.486;SB=-1.079e-02;VQSLOD=-304.7942;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:104,39:143:99:365,0,2802:45 0/1:99,40:139:99:636,0,2335:45 0/1:97,28:126:45:45,0,2324:45
+15 42065422 rs2925337 A C 5231.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.68;MQ0=0;QD=29.72;SB=-3.112e+03;VQSLOD=11.0322;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,54:54:99:1770,138,0:127 1|1:0,68:68:99:1750,138,0:127 1|1:0,54:54:99:1711,132,0:127
+15 53677501 . T G 770.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-8.969;DP=210;Dels=0.00;FS=347.467;HaplotypeScore=2.0911;MLEAC=3;MLEAF=0.500;MQ=58.31;MQ0=0;MQRankSum=0.438;QD=3.67;ReadPosRankSum=-6.409;SB=-5.499e-03;VQSLOD=-307.0964;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:59,20:79:94:94,0,1389:94 0/1:41,31:72:99:438,0,721:94 0/1:37,21:59:99:277,0,521:94
+15 62088952 rs35033959 A T 3546.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.220;DB;DP=241;Dels=0.00;FS=14.286;HaplotypeScore=0.2774;MLEAC=3;MLEAF=0.500;MQ=59.77;MQ0=0;MQRankSum=-1.969;QD=14.71;ReadPosRankSum=0.341;SB=-1.970e+03;VQSLOD=6.3785;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:45,44:89:99:1265,0,1533:127 0/1:34,38:72:99:1133,0,1137:127 0/1:41,39:80:99:1148,0,1303:127
+15 71657506 . A G 140.40 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.611;DP=133;Dels=0.00;FS=35.593;HaplotypeScore=4.0622;MLEAC=2;MLEAF=0.333;MQ=51.29;MQ0=1;MQRankSum=-3.344;QD=1.53;ReadPosRankSum=-3.999;SB=-5.015e+01;VQSLOD=-4.8050;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:46,11:57:93:93,0,851:15 1|0:23,12:35:86:86,0,299:15 0|0:33,8:41:15:0,15,503:15
+15 92857342 rs12101550 A G 2734.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.995;DB;DP=226;Dels=0.00;FS=3.761;HaplotypeScore=1.5682;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=0.761;QD=12.10;ReadPosRankSum=-0.587;SB=-1.469e+03;VQSLOD=9.1510;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:45,37:82:99:853,0,1356:127 0/1:29,40:69:99:966,0,852:127 0/1:38,37:75:99:954,0,1085:127
+15 100799787 rs4965610 C T 2133.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.373;DB;DP=230;Dels=0.00;FS=1.037;HaplotypeScore=0.5427;MLEAC=3;MLEAF=0.500;MQ=58.84;MQ0=0;MQRankSum=0.169;QD=9.28;ReadPosRankSum=-0.098;SB=-1.328e+03;VQSLOD=7.8802;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:40,36:76:99:948,0,701:127 0/1:45,38:83:99:761,0,635:127 0/1:35,36:71:99:463,0,706:127
+16 5754758 rs11644707 C T 1012.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.777;DB;DP=161;Dels=0.00;FS=0.000;HaplotypeScore=2.4572;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=0.699;QD=9.64;ReadPosRankSum=2.624;SB=-5.580e+02;VQSLOD=7.0970;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:31,26:57:99:627,0,943:125 0|0:56,0:56:99:0,126,1597:125 1|0:32,16:48:99:424,0,785:125
+16 11397080 rs1019552 T C 2295.44 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.01;FS=0.000;HaplotypeScore=8.2178;MLEAC=6;MLEAF=1.00;MQ=59.32;MQ0=0;QD=13.58;SB=-2.379e+03;VQSLOD=4.3801;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:96:1220,96,0:9 1|1:0,48:48:9:78,9,0:9 1|1:0,48:48:81:1035,81,0:9
+16 30509723 rs7193693 A G 497.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.054;DB;DP=167;Dels=0.00;FS=0.000;HaplotypeScore=1.1605;MLEAC=1;MLEAF=0.167;MQ=57.89;MQ0=0;MQRankSum=-0.545;QD=9.38;ReadPosRankSum=0.541;SB=-2.410e+02;VQSLOD=8.4265;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,153,2009:101 0|0:57,0:57:99:0,102,1304:101 0|1:26,27:53:99:532,0,526:101
+16 34610294 rs72812776 C T 603.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.361;DB;DP=270;Dels=0.00;FS=6.065;HaplotypeScore=3.1650;MLEAC=1;MLEAF=0.167;MQ=59.66;MQ0=0;MQRankSum=1.603;QD=7.83;ReadPosRankSum=0.296;SB=-2.820e+02;VQSLOD=3.3685;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:123,0:123:99:0,343,4443:127 0|0:69,1:70:99:0,184,2397:127 0|1:48,29:77:99:638,0,1483:127
+16 55910673 rs17265788 G C 2345.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.657;DB;DP=208;Dels=0.00;FS=3.162;HaplotypeScore=1.9213;MLEAC=3;MLEAF=0.500;MQ=59.67;MQ0=0;MQRankSum=-0.333;QD=16.63;ReadPosRankSum=-0.425;SB=-1.468e+03;VQSLOD=8.3665;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:33,33:66:99:769,0,761:122 0|0:67,0:67:99:0,123,1506:122 1|1:0,75:75:99:1621,132,0:122
+16 65776985 rs72784548 T C 3527.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.439;DB;DP=195;Dels=0.00;FS=1.228;HaplotypeScore=0.8795;MLEAC=4;MLEAF=0.667;MQ=58.78;MQ0=0;MQRankSum=1.630;QD=18.09;ReadPosRankSum=1.358;SB=-1.904e+03;VQSLOD=7.6763;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2351,181,0:127 1|0:33,28:61:99:586,0,710:127 1|0:31,35:66:99:590,0,468:127
+16 83153777 rs4395063 T C 3143.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.771;DB;DP=205;Dels=0.00;FS=1.805;HaplotypeScore=1.0370;MLEAC=4;MLEAF=0.667;MQ=59.55;MQ0=0;MQRankSum=-1.380;QD=15.33;ReadPosRankSum=0.424;SB=-2.104e+03;VQSLOD=8.8241;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:31,31:62:99:867,0,865:127 0|1:45,28:73:99:412,0,801:127 1|1:0,70:70:99:1906,150,0:127
+16 88914235 rs12932521 C T 329.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.978;DB;DP=114;Dels=0.00;FS=1.931;HaplotypeScore=0.9402;MLEAC=1;MLEAF=0.167;MQ=58.60;MQ0=0;MQRankSum=0.854;QD=7.84;ReadPosRankSum=-0.339;SB=-2.970e+02;VQSLOD=8.1036;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,102,1192:39 0|0:29,0:29:39:0,39,468:39 0|1:15,26:42:99:364,0,105:39
+17 5764764 rs2309483 C G 4071.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.237;DB;DP=154;Dels=0.00;FS=0.000;HaplotypeScore=4.4102;MLEAC=5;MLEAF=0.833;MQ=58.88;MQ0=0;MQRankSum=0.456;QD=26.44;ReadPosRankSum=0.385;SB=-1.791e+03;VQSLOD=6.9458;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:62:99:2049,165,0:107 1|0:23,26:49:99:648,0,482:107 1|1:0,43:43:99:1374,108,0:107
+17 14096866 . C T 489.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=4.537;DP=181;Dels=0.00;FS=33.896;HaplotypeScore=1.0782;MLEAC=3;MLEAF=0.500;MQ=24.52;MQ0=71;MQRankSum=0.353;QD=2.70;ReadPosRankSum=0.385;SB=-1.450e+02;VQSLOD=-6.2174;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:48,17:66:99:228,0,822:63 0/1:42,16:58:99:237,0,389:63 0/1:44,13:57:63:63,0,523:63
+17 21547285 rs62049731 A C 1322.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.987;DB;DP=569;Dels=0.00;FS=2.322;HaplotypeScore=42.4511;MLEAC=3;MLEAF=0.500;MQ=44.59;MQ0=24;MQRankSum=-6.240;QD=2.32;ReadPosRankSum=-5.171;SB=-6.369e+02;VQSLOD=-39.5319;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:146,28:174:99:217,0,4187:127 0/1:162,56:218:99:804,0,4298:127 0/1:139,38:177:99:340,0,3842:127
+17 33513649 rs3744366 A G 3743.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.729;DB;DP=213;Dels=0.00;FS=0.526;HaplotypeScore=2.9053;MLEAC=4;MLEAF=0.667;MQ=58.99;MQ0=0;MQRankSum=-0.152;QD=17.57;ReadPosRankSum=0.530;SB=-2.067e+03;VQSLOD=8.0191;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,40:84:99:1083,0,1341:127 1|1:0,67:67:99:2074,162,0:127 0|1:37,24:62:99:586,0,1015:127
+17 44809197 rs116187585 A G 8703.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-0.554;DB;DP=254;Dels=0.00;FS=3.487;HaplotypeScore=4.0582;MLEAC=6;MLEAF=1.00;MQ=59.58;MQ0=0;MQRankSum=1.677;QD=34.26;ReadPosRankSum=1.483;SB=-4.228e+03;VQSLOD=6.6144;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3470,268,0:127 1|1:0,82:84:99:2846,220,0:127 1|1:0,73:73:99:2387,184,0:127
+17 55158811 rs7217371 G A 2849.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.616;DB;DP=206;Dels=0.00;FS=0.511;HaplotypeScore=1.0970;MLEAC=3;MLEAF=0.500;MQ=59.66;MQ0=0;MQRankSum=0.103;QD=13.83;ReadPosRankSum=0.958;SB=-1.448e+03;VQSLOD=9.9440;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,31:72:99:982,0,1147:127 0/1:35,40:75:99:1236,0,984:127 0/1:32,27:59:99:670,0,882:127
+17 66991216 rs61697543 T C 738.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.530;DB;DP=252;Dels=0.00;FS=1.490;HaplotypeScore=1.7074;MLEAC=1;MLEAF=0.167;MQ=59.36;MQ0=0;MQRankSum=0.771;QD=10.86;ReadPosRankSum=-0.724;SB=-3.930e+02;VQSLOD=8.8864;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:95,0:95:99:0,268,3511:127 0|0:89,0:89:99:0,235,3058:127 0|1:33,35:68:99:773,0,965:127
+18 1629264 rs5025369 A G 86.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.739;DB;DP=149;Dels=0.00;FS=15.359;HaplotypeScore=7.1355;MLEAC=2;MLEAF=0.333;MQ=39.72;MQ0=11;MQRankSum=-2.543;QD=0.81;ReadPosRankSum=0.088;SB=-3.380e+01;VQSLOD=-6.2052;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,15:66:50:50,0,1143:49 0|0:37,5:42:81:0,81,941:49 1|0:35,6:41:75:75,0,818:49
+18 10010426 rs4797393 T C 4197.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.425;DB;DP=210;Dels=0.00;FS=1.132;HaplotypeScore=1.2660;MLEAC=4;MLEAF=0.667;MQ=59.43;MQ0=0;MQRankSum=-2.916;QD=19.99;ReadPosRankSum=0.379;SB=-2.001e+03;VQSLOD=7.0312;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,65:65:99:2247,181,0:127 1|0:35,39:75:99:1170,0,967:127 1|0:41,29:70:99:780,0,1052:127
+18 20025030 rs4800406 A G 1113.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.700;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=1.6804;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=1.643;QD=12.65;ReadPosRankSum=-1.166;SB=-6.160e+02;VQSLOD=8.6574;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,223,2978:127 0|1:46,42:88:99:1148,0,1460:127 0|0:64,0:64:99:0,175,2303:127
+18 41449098 rs2045671 C T 8380.01 PASS AC=6;AF=1.00;AN=6;DB;DP=237;Dels=0.00;FS=0.000;HaplotypeScore=1.3482;MLEAC=6;MLEAF=1.00;MQ=59.65;MQ0=0;QD=35.36;SB=-4.462e+03;VQSLOD=11.6464;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,76:76:99:2756,214,0:127 1|1:0,75:75:99:2635,202,0:127 1|1:0,86:86:99:2989,229,0:127
+18 50973169 rs11661305 A G 5320.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=2.753;DB;DP=196;Dels=0.00;FS=2.568;HaplotypeScore=1.1306;MLEAC=5;MLEAF=0.833;MQ=57.73;MQ0=0;MQRankSum=0.246;QD=27.14;ReadPosRankSum=0.186;SB=-2.411e+03;VQSLOD=7.5009;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2621,202,0:127 1|0:30,37:67:99:1009,0,842:127 1|1:0,55:55:99:1690,132,0:127
+18 67950442 rs62091919 T G 1779.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.517;DB;DP=195;Dels=0.00;FS=0.562;HaplotypeScore=1.5454;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.006;QD=12.89;ReadPosRankSum=-0.268;SB=-9.170e+02;VQSLOD=9.6268;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:40,32:72:99:967,0,1318:127 0|0:55,2:57:99:0,141,1865:127 1|0:36,30:66:99:851,0,1042:127
+18 75204349 rs9948476 C T 646.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.965;DB;DP=185;Dels=0.00;FS=0.817;HaplotypeScore=1.3995;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=0.276;QD=10.95;ReadPosRankSum=-0.158;SB=-3.210e+02;VQSLOD=9.3748;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:66:99:0,168,2026:127 0|0:60,0:60:99:0,147,1768:127 0|1:34,25:59:99:681,0,893:127
+19 3739001 rs56138006 C T 976.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.634;DB;DP=118;Dels=0.00;FS=3.676;HaplotypeScore=1.4356;MLEAC=2;MLEAF=0.333;MQ=58.66;MQ0=0;MQRankSum=0.753;QD=11.22;ReadPosRankSum=1.107;SB=-6.380e+02;VQSLOD=7.4541;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:612,0,559:45 0|0:31,0:31:45:0,45,527:45 1|0:12,23:35:93:403,0,93:45
+19 11730690 rs4804613 C T 2578.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=5.057;DB;DP=197;Dels=0.00;FS=0.529;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.36;MQ0=0;MQRankSum=0.416;QD=13.09;ReadPosRankSum=-0.554;SB=-1.389e+03;VQSLOD=9.3908;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:21,26:47:99:586,0,623:127 0/1:42,45:87:99:1192,0,1055:127 0/1:32,30:63:99:839,0,932:127
+19 20782710 rs10413568 T C 6304.01 PASS AC=6;AF=1.00;AN=6;DB;DP=203;Dels=0.00;FS=0.000;HaplotypeScore=0.6919;MLEAC=6;MLEAF=1.00;MQ=59.56;MQ0=0;QD=31.05;SB=-2.367e+03;VQSLOD=10.7708;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2375,214,0:127 1|1:0,80:80:99:2480,217,0:127 1|1:0,49:49:99:1449,129,0:127
+19 28150587 rs4404191 A G 7419.01 PASS AC=6;AF=1.00;AN=6;DB;DP=209;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=59.61;MQ0=0;QD=35.50;SB=-3.717e+03;VQSLOD=11.9901;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:2584,202,0:127 1|1:0,74:74:99:2509,193,0:127 1|1:0,65:65:99:2326,181,0:127
+19 37226152 rs3108217 G C 2076.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.215;DB;DP=145;Dels=0.00;FS=2.159;HaplotypeScore=0.5869;MLEAC=4;MLEAF=0.667;MQ=58.59;MQ0=0;MQRankSum=1.160;QD=14.32;ReadPosRankSum=-0.725;SB=-1.027e+03;VQSLOD=7.4915;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:25,30:55:99:789,0,709:63 1|1:0,29:29:63:772,63,0:63 0|1:35,25:61:99:557,0,789:63
+19 54644879 rs36636 G A 1790.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.505;DB;DP=187;Dels=0.00;FS=4.408;HaplotypeScore=1.5043;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-1.266;QD=13.88;ReadPosRankSum=-1.226;SB=-1.081e+03;VQSLOD=7.8045;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:30,27:57:99:811,0,726:127 1|0:31,41:72:99:1018,0,730:127 0|0:58,0:58:99:0,144,1815:127
+20 3199373 rs2422861 G A 896.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.452;DB;DP=135;Dels=0.00;FS=0.664;HaplotypeScore=2.8371;MLEAC=3;MLEAF=0.500;MQ=58.47;MQ0=0;MQRankSum=-0.217;QD=6.64;ReadPosRankSum=0.111;SB=-6.080e+02;VQSLOD=7.7118;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,24:56:99:472,0,640:127 0/1:25,15:40:99:229,0,603:127 0/1:20,19:39:99:234,0,379:127
+20 12166868 rs7272217 C T 926.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.444;DB;DP=200;Dels=0.00;FS=2.627;HaplotypeScore=0.8413;MLEAC=1;MLEAF=0.167;MQ=58.94;MQ0=0;MQRankSum=-1.362;QD=13.23;ReadPosRankSum=-1.055;SB=-4.040e+02;VQSLOD=7.6219;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:68,0:68:99:0,190,2486:127 0|0:62,0:62:99:0,169,2218:127 0|1:33,37:70:99:961,0,870:127
+20 21523349 rs73127889 A G 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.469;DB;DP=253;Dels=0.00;FS=3.735;HaplotypeScore=1.5402;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=0.821;QD=13.69;ReadPosRankSum=1.510;SB=-8.640e+02;VQSLOD=7.8358;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:44,48:92:99:1319,0,1356:127 0|0:86,0:86:99:0,235,2994:127 1|0:37,38:75:99:1006,0,1111:127
+20 29566945 rs6119037 C G 1427.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-3.826;DB;DP=271;Dels=0.00;FS=1.151;HaplotypeScore=2.7598;MLEAC=2;MLEAF=0.333;MQ=47.42;MQ0=21;MQRankSum=2.420;QD=8.06;ReadPosRankSum=0.363;SB=-7.560e+02;VQSLOD=1.7908;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:59,32:91:99:782,0,1210:127 1|0:55,31:86:99:684,0,1422:127 0|0:94,0:94:99:0,208,2592:127
+20 41560394 rs761027 A G 5634.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.444;DB;DP=222;Dels=0.00;FS=0.829;HaplotypeScore=1.1428;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=0.392;QD=25.38;ReadPosRankSum=-0.064;SB=-3.048e+03;VQSLOD=10.0362;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2228,187,0:127 1|1:0,82:82:99:2435,211,0:127 1|0:25,43:68:99:971,0,567:127
+20 51353834 rs241795 G A 6115.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=7.909;DB;DP=268;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=4;MLEAF=0.667;MQ=59.38;MQ0=0;MQRankSum=-0.518;QD=22.82;ReadPosRankSum=-0.253;SB=-3.328e+03;VQSLOD=8.3999;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:46,54:100:99:1663,0,1247:127 1|1:0,91:91:99:3189,247,0:127 0|1:36,41:77:99:1263,0,901:127
+20 59978756 rs1892320 T C 3967.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.562;DB;DP=206;Dels=0.00;FS=14.249;HaplotypeScore=1.3838;MLEAC=4;MLEAF=0.667;MQ=59.89;MQ0=0;MQRankSum=-0.289;QD=19.26;ReadPosRankSum=0.221;SB=-2.292e+03;VQSLOD=7.6238;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2337,181,0:127 1|0:38,29:67:99:743,0,1180:127 1|0:31,36:67:99:887,0,873:127
+21 10750991 . C T 602.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=10.103;DP=735;DS;Dels=0.00;FS=27.020;HaplotypeScore=107.2731;MLEAC=2;MLEAF=0.333;MQ=44.40;MQ0=2;MQRankSum=-14.560;QD=1.24;ReadPosRankSum=0.063;SB=-8.430e+02;VQSLOD=-100.9480;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:164,78:243:99:357,0,5193:103 1|0:187,55:242:99:284,0,5252:103 0|0:199,50:250:99:0,103,5864:103
+21 18433036 rs969905 A G 781.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.610;DB;DP=229;Dels=0.00;FS=2.230;HaplotypeScore=1.2866;MLEAC=1;MLEAF=0.167;MQ=59.55;MQ0=0;MQRankSum=0.300;QD=10.15;ReadPosRankSum=-0.384;SB=-4.990e+02;VQSLOD=9.5768;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:63:99:0,181,2380:127 0|0:89,0:89:99:0,244,3177:127 0|1:39,38:77:99:816,0,1256:127
+21 25702950 rs2260875 C G 3462.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.156;DB;DP=237;Dels=0.00;FS=2.900;HaplotypeScore=1.5444;MLEAC=3;MLEAF=0.500;MQ=59.04;MQ0=0;MQRankSum=0.386;QD=14.61;ReadPosRankSum=-1.455;SB=-1.683e+03;VQSLOD=8.0501;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:37,40:77:99:1282,0,1101:127 0/1:43,36:79:99:1114,0,1317:127 0/1:45,36:81:99:1066,0,1329:127
+21 34546711 rs11701692 T C 1030.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.884;DB;DP=152;Dels=0.00;FS=8.325;HaplotypeScore=1.9325;MLEAC=2;MLEAF=0.333;MQ=57.61;MQ0=0;MQRankSum=-0.291;QD=10.51;ReadPosRankSum=0.258;SB=-4.600e+02;VQSLOD=6.4601;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,25:61:99:574,0,1137:127 1|0:19,18:37:99:495,0,498:127 0|0:54,0:54:99:0,141,1811:127
+21 42833227 rs460904 T C 3179.23 PASS AC=6;AF=1.00;AN=6;DB;DP=155;Dels=0.00;FS=0.000;HaplotypeScore=2.4559;MLEAC=6;MLEAF=1.00;MQ=58.18;MQ0=0;QD=20.51;SB=-2.173e+03;VQSLOD=7.7042;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,60:60:90:1085,90,0:74 1|1:0,54:54:96:1172,96,0:74 1|1:0,41:41:75:960,75,0:74
+22 17351507 rs5748687 G A 4244.01 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=-0.224;DB;DP=261;Dels=0.00;FS=0.710;HaplotypeScore=1.7170;MLEAC=5;MLEAF=0.833;MQ=28.84;MQ0=57;MQRankSum=-7.852;QD=16.26;ReadPosRankSum=-1.243;SB=-2.174e+03;VQSLOD=-1.7101;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:1529,141,0:127 1|0:34,49:83:99:727,0,1065:127 1|1:0,86:86:99:1988,180,0:127
+22 34204930 rs13053313 T C 435.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.517;DB;DP=82;Dels=0.00;FS=5.843;HaplotypeScore=0.5328;MLEAC=1;MLEAF=0.167;MQ=58.65;MQ0=0;MQRankSum=1.117;QD=12.80;ReadPosRankSum=-1.270;SB=-1.170e+02;VQSLOD=6.4410;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:12,0:12:27:0,27,360:27 0|1:16,18:34:99:470,0,403:27 0|0:36,0:36:93:0,93,1230:27
+22 43356130 rs6519353 A C 3526.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.809;DB;DP=228;Dels=0.00;FS=6.336;HaplotypeScore=1.6306;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.146;QD=22.46;ReadPosRankSum=2.034;SB=-1.954e+03;VQSLOD=8.5009;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:40,41:81:99:1020,0,1222:127 1|1:0,76:76:99:2506,196,0:127 0|0:71,0:71:99:0,165,2091:127
+22 50309915 rs9616205 A T 1712.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.936;DB;DP=162;Dels=0.00;FS=2.857;HaplotypeScore=2.1490;MLEAC=2;MLEAF=0.333;MQ=56.21;MQ0=5;MQRankSum=0.892;QD=13.92;ReadPosRankSum=-1.040;SB=-9.940e+02;VQSLOD=6.2766;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:39,33:72:99:777,0,994:78 0|0:39,0:39:78:0,78,1010:78 1|0:16,35:51:99:974,0,257:78
+X 4712340 rs5915814 C A 2233.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.784;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.4434;MLEAC=2;MLEAF=0.333;MQ=59.50;MQ0=0;MQRankSum=-1.782;QD=15.73;ReadPosRankSum=0.359;SB=-1.240e+03;VQSLOD=8.3937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:32,37:69:99:1114,0,859:81 0|0:34,0:34:81:0,81,948:81 1|0:32,41:73:99:1158,0,575:81
+X 42192093 rs58959554 T C 1058.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-5.464;DB;DP=190;Dels=0.00;FS=6.809;HaplotypeScore=1.8813;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.212;QD=15.34;ReadPosRankSum=-0.173;SB=-3.970e+02;VQSLOD=8.0569;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,182,2683:127 0|0:50,0:50:99:0,138,1794:127 0|1:31,38:69:99:1093,0,947:127
+X 66290558 rs1606094 C T 2602.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.169;DB;DP=213;Dels=0.00;FS=13.125;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=1.343;QD=18.86;ReadPosRankSum=2.274;SB=-1.122e+03;VQSLOD=5.9967;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:54,47:101:99:1381,0,1762:99 1|1:0,37:37:99:1266,99,0:99 0|0:75,0:75:99:0,205,2705:99
+X 84165195 rs5923187 C A 1009.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.103;DB;DP=194;Dels=0.00;FS=3.070;HaplotypeScore=2.8168;MLEAC=1;MLEAF=0.167;MQ=59.31;MQ0=0;MQRankSum=-0.675;QD=12.01;ReadPosRankSum=-1.463;SB=-5.890e+02;VQSLOD=8.2395;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:79,1:80:99:0,223,2856:60 0|0:30,0:30:60:0,60,764:60 0|1:40,44:84:99:1044,0,1007:60
+X 95868251 . G A 108.36 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=1.436;DP=90;Dels=0.00;FS=4.210;HaplotypeScore=4.9383;MLEAC=2;MLEAF=0.333;MQ=44.60;MQ0=8;MQRankSum=-2.939;QD=1.55;ReadPosRankSum=2.865;SB=-7.411e+01;VQSLOD=-3.2422;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:29,9:38:99:126,0,251:23 0|0:20,0:20:24:0,24,266:23 1|0:27,5:32:21:21,0,97:23
+X 116855730 rs980389 A G 2366.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.939;DB;DP=173;Dels=0.00;FS=3.510;HaplotypeScore=0.9076;MLEAC=3;MLEAF=0.500;MQ=59.87;MQ0=0;MQRankSum=0.653;QD=21.51;ReadPosRankSum=0.730;SB=-1.218e+03;VQSLOD=7.9588;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:965,0,1249:114 1|1:0,40:40:99:1446,114,0:114 0|0:63,0:63:99:0,175,2284:114
+X 135282092 rs5974586 G C 2193.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.257;DB;DP=203;Dels=0.00;FS=0.540;HaplotypeScore=0.6589;MLEAC=2;MLEAF=0.333;MQ=59.47;MQ0=0;MQRankSum=1.000;QD=13.46;ReadPosRankSum=1.343;SB=-1.069e+03;VQSLOD=9.0929;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:47,33:80:99:1026,0,1466:116 0|0:40,0:40:99:0,117,1486:116 1|0:43,40:83:99:1206,0,1311:116
+X 150239197 rs6627349 T C 4677.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.731;DB;DP=179;Dels=0.00;FS=0.000;HaplotypeScore=1.6094;MLEAC=5;MLEAF=0.833;MQ=59.69;MQ0=0;MQRankSum=0.676;QD=26.13;ReadPosRankSum=0.494;SB=-2.442e+03;VQSLOD=10.5525;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,66:66:99:2387,190,0:99 1|1:0,40:40:99:1243,99,0:99 1|0:36,37:73:99:1047,0,1039:99
+Y 13265732 . C T 356.72 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=2.823;DP=142;Dels=0.00;FS=7.941;HaplotypeScore=19.8229;MLEAC=2;MLEAF=0.333;MQ=38.22;MQ0=11;MQRankSum=-2.145;QD=5.10;ReadPosRankSum=1.491;SB=-1.466e+00;VQSLOD=-14.4273;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,15:50:99:327,0,624:5 0|0:65,7:72:4:0,4,1831:5 1|0:15,5:20:67:67,0,227:5
+Y 59024923 . A T 1977.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.838;DP=745;DS;Dels=0.00;FS=0.367;HaplotypeScore=8.2957;MLEAC=3;MLEAF=0.500;MQ=43.53;MQ0=19;MQRankSum=2.499;QD=2.65;ReadPosRankSum=0.098;SB=-9.720e+02;VQSLOD=-36.7578;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:208,42:250:99:730,0,6428:127 0/1:210,35:245:99:588,0,6218:127 0/1:208,42:250:99:698,0,6060:127
+GL000214.1 115144 . C T 102.07 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=0.854;DP=103;Dels=0.00;FS=14.185;HaplotypeScore=14.9478;MLEAC=2;MLEAF=0.333;MQ=38.45;MQ0=1;MQRankSum=-2.314;QD=1.05;ReadPosRankSum=1.480;SB=-6.153e+01;VQSLOD=-14.7562;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:6,0:6:3:0,3,22:4 0|1:9,11:20:16:81,0,16:4 0|1:63,14:77:58:58,0,908:4
+GL000215.1 142616 . T C 976.25 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DP=80;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=21.04;MQ0=42;QD=12.20;SB=-8.001e+01;VQSLOD=-0.4104;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,33:33:42:516,42,0:19 1|1:0,21:21:24:272,24,0:19 1|1:0,26:26:21:226,21,0:19
+GL000212.1 28454 . T C 2248.99 VQSRTrancheSNP99.00to99.90 AC=4;AF=1.00;AN=4;BaseQRankSum=1.691;DP=94;Dels=0.00;FS=3.274;HaplotypeScore=0.9622;MLEAC=4;MLEAF=1.00;MQ=36.99;MQ0=7;MQRankSum=-0.428;QD=24.18;ReadPosRankSum=-1.284;SB=-1.053e+03;VQSLOD=1.2364;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,29:29:63:755,63,0:63 ./. 1|1:1,63:64:99:1530,135,0:63
diff --git a/testdata/picard/vcf/CEUTrio-snps_last_line_diff.vcf b/testdata/picard/vcf/CEUTrio-snps_last_line_diff.vcf
new file mode 100644
index 0000000..0f9e380
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_last_line_diff.vcf
@@ -0,0 +1,406 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.669;HaplotypeScore=3.3539;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-0.219;SB=-9.390e+02;VQSLOD=5.5346;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
+1 17032814 rs2773183 T C 2828.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879;DB;DP=322;Dels=0.00;FS=2.430;HaplotypeScore=15.4499;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.916;QD=8.78;ReadPosRankSum=-1.245;SB=-1.943e+03;VQSLOD=-1.4207;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
+1 47818917 rs12749507 A G 1285.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.707;DB;DP=252;Dels=0.00;FS=2.139;HaplotypeScore=0.6661;MLEAC=1;MLEAF=0.167;MQ=59.83;MQ0=0;MQRankSum=-0.467;QD=13.39;ReadPosRankSum=0.535;SB=-6.730e+02;VQSLOD=9.2738;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,3171:127 0|1:53,42:96:99:1320,0,1615:127 0|0:75,0:75:99:0,217,2762:127
+1 59635894 rs331648 T A 839.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.038;DB;DP=211;Dels=0.00;FS=1.427;HaplotypeScore=1.5485;MLEAC=1;MLEAF=0.167;MQ=58.68;MQ0=0;MQRankSum=-0.422;QD=11.82;ReadPosRankSum=-0.180;SB=-5.520e+02;VQSLOD=7.9477;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,199,2578:127 0|0:62,0:62:99:0,169,2205:127 0|1:33,38:71:99:874,0,897:127
+1 69502962 rs12724640 T C 1868.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-1.732;DB;DP=110;Dels=0.00;FS=4.721;HaplotypeScore=1.9269;MLEAC=6;MLEAF=1.00;MQ=29.46;MQ0=22;MQRankSum=1.652;QD=16.98;ReadPosRankSum=-0.564;SB=-8.110e+02;VQSLOD=0.2103;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:5,23:29:63:693,63,0:50 1|1:5,38:43:66:675,66,0:50 1|1:9,29:38:51:538,51,0:50
+1 80481528 rs61774278 G C 1775.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.614;DB;DP=168;Dels=0.00;FS=8.292;HaplotypeScore=2.0470;MLEAC=3;MLEAF=0.500;MQ=54.28;MQ0=0;MQRankSum=-0.052;QD=16.75;ReadPosRankSum=1.544;SB=-1.133e+03;VQSLOD=4.7735;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,26:61:99:767,0,778:80 0|0:62,0:62:84:0,84,1046:80 1|1:0,45:45:84:1053,84,0:80
+1 90146546 rs7512447 C T 8721.01 PASS AC=6;AF=1.00;AN=6;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.40;MQ0=0;QD=36.19;SB=-4.084e+03;VQSLOD=11.3217;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2599,196,0:127 1|1:0,86:86:99:3042,235,0:127 1|1:0,84:84:99:3080,238,0:127
+1 100763317 rs6681810 G C 5583.01 PASS AC=6;AF=1.00;AN=6;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=3.7201;MLEAC=6;MLEAF=1.00;MQ=58.52;MQ0=0;QD=28.48;SB=-2.737e+03;VQSLOD=7.9151;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,76:77:99:2211,192,0:127 1|1:0,56:56:99:1593,141,0:127 1|1:0,62:62:99:1779,156,0:127
+1 110091282 rs1279195 C T 952.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.646;DB;DP=101;Dels=0.00;FS=19.666;HaplotypeScore=1.9160;MLEAC=2;MLEAF=0.333;MQ=56.72;MQ0=0;MQRankSum=-0.345;QD=12.37;ReadPosRankSum=0.567;SB=-5.350e+02;VQSLOD=4.1741;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,29:46:99:726,0,219:42 1|0:13,12:31:99:265,0,298:42 0|0:18,0:24:42:0,42,522:42
+1 146610795 rs58742099 C T 2831.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.298;DB;DP=261;Dels=0.00;FS=7.033;HaplotypeScore=13.9060;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=0.753;QD=16.27;ReadPosRankSum=-1.405;SB=-1.481e+03;VQSLOD=3.4221;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:39,43:82:99:1329,0,1080:127 1|0:40,52:92:99:1541,0,1241:127 0|0:87,0:87:99:0,238,3098:127
+1 156248265 rs12038203 C T 643.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.311;DB;DP=145;Dels=0.00;FS=4.568;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.08;MQ0=0;MQRankSum=0.862;QD=12.86;ReadPosRankSum=0.177;SB=-3.450e+02;VQSLOD=7.5008;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:47,0:47:99:0,123,1604:110 0|0:48,0:48:99:0,111,1433:110 0|1:25,25:50:99:678,0,694:110
+1 165431906 rs7528908 G T 2381.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.008;DB;DP=259;Dels=0.00;FS=4.727;HaplotypeScore=0.9857;MLEAC=2;MLEAF=0.333;MQ=59.75;MQ0=0;MQRankSum=0.916;QD=14.34;ReadPosRankSum=-0.907;SB=-9.050e+02;VQSLOD=8.1270;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:48,40:88:99:1142,0,1428:127 0|0:93,0:93:99:0,259,3166:127 1|0:38,40:78:99:1278,0,1075:127
+1 175207612 rs11484568 C T 1920.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.643;DB;DP=216;Dels=0.00;FS=0.537;HaplotypeScore=2.2467;MLEAC=2;MLEAF=0.333;MQ=58.99;MQ0=0;MQRankSum=0.383;QD=14.12;ReadPosRankSum=0.169;SB=-1.064e+03;VQSLOD=8.5912;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:34,40:74:99:1152,0,995:127 0|0:80,0:80:99:0,208,2602:127 1|0:34,28:62:99:807,0,998:127
+1 186656152 rs4422959 G A 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=7.230;DB;DP=270;Dels=0.00;FS=7.290;HaplotypeScore=1.1750;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=0.399;QD=17.21;ReadPosRankSum=-0.869;SB=-6.320e+02;VQSLOD=7.6734;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:99,0:99:99:0,283,3341:127 0|0:93,0:93:99:0,256,3022:127 0|1:33,45:78:99:1377,0,917:127
+1 195392852 rs2119441 T G 5369.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.284;DB;DP=241;Dels=0.00;FS=3.312;HaplotypeScore=1.8710;MLEAC=4;MLEAF=0.667;MQ=58.35;MQ0=0;MQRankSum=-0.643;QD=22.28;ReadPosRankSum=0.178;SB=-2.332e+03;VQSLOD=7.8524;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:37,42:79:99:1233,0,1145:127 1|1:0,84:84:99:2741,211,0:127 0|1:31,47:78:99:1395,0,804:127
+1 204945934 rs6657372 A G 1311.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.582;DB;DP=126;Dels=0.00;FS=0.000;HaplotypeScore=2.7088;MLEAC=3;MLEAF=0.500;MQ=58.78;MQ0=0;MQRankSum=0.480;QD=15.43;ReadPosRankSum=1.284;SB=-6.370e+02;VQSLOD=7.8448;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:22,28:50:99:629,0,675:68 0|0:40,0:41:84:0,84,1057:68 1|1:0,35:35:69:727,69,0:68
+1 216407409 rs3767692 A G 8820.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.803;DB;DP=295;Dels=0.00;FS=1.345;HaplotypeScore=2.5841;MLEAC=5;MLEAF=0.833;MQ=59.28;MQ0=0;MQRankSum=-0.375;QD=29.90;ReadPosRankSum=-0.363;SB=-4.445e+03;VQSLOD=7.0549;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:1,115:116:99:4251,328,0:127 1|0:39,51:90:99:1430,0,1275:127 1|1:0,89:89:99:3139,241,0:127
+1 226163330 rs10915914 C G 747.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.123;DB;DP=121;Dels=0.00;FS=0.863;HaplotypeScore=0.8289;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=-0.478;QD=9.70;ReadPosRankSum=-0.134;SB=-2.780e+02;VQSLOD=8.0849;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,1:44:99:0,117,1447:116 0|1:17,15:32:99:289,0,390:116 0|1:26,19:45:99:497,0,677:116
+1 243135892 rs7517403 C T 2313.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=7.051;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.5884;MLEAC=4;MLEAF=0.667;MQ=37.62;MQ0=11;MQRankSum=-5.659;QD=13.77;ReadPosRankSum=-0.977;SB=-9.200e+02;VQSLOD=2.2480;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:31,24:55:99:501,0,891:123 1|1:0,58:58:99:1263,123,0:123 0|1:28,27:55:99:591,0,714:123
+2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814;DB;DP=189;Dels=0.00;FS=5.611;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.579;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.8071;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
+2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.695;DB;DP=213;Dels=0.00;FS=7.834;HaplotypeScore=1.1897;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-0.097;SB=-1.991e+03;VQSLOD=9.1447;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,42:75:99:1400,0,1031:127 0|0:67,0:67:99:0,178,2277:127 1|1:0,71:71:99:2578,199,0:127
+2 18016237 rs12710649 A T 3950.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.037;DB;DP=250;Dels=0.00;FS=2.158;HaplotypeScore=2.0804;MLEAC=3;MLEAF=0.500;MQ=59.14;MQ0=0;MQRankSum=0.494;QD=15.80;ReadPosRankSum=0.705;SB=-2.142e+03;VQSLOD=8.1407;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:46,59:105:99:1733,0,1505:127 0/1:39,37:76:99:925,0,1164:127 0/1:24,44:68:99:1292,0,628:127
+2 28790711 rs34787802 T G 731.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.421;DB;DP=232;Dels=0.00;FS=2.403;HaplotypeScore=1.5189;MLEAC=1;MLEAF=0.167;MQ=57.98;MQ0=0;MQRankSum=0.447;QD=10.30;ReadPosRankSum=-1.833;SB=-4.550e+02;VQSLOD=6.8853;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,223,2877:127 0|1:36,35:71:99:766,0,947:127 0|0:79,0:80:99:0,205,2640:127
+2 36994439 rs11124542 A C 1302.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.406;DB;DP=191;Dels=0.00;FS=3.335;HaplotypeScore=2.1785;MLEAC=3;MLEAF=0.500;MQ=58.93;MQ0=0;MQRankSum=-0.725;QD=6.82;ReadPosRankSum=0.302;SB=-1.006e+03;VQSLOD=7.9479;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,28:60:99:710,0,1044:127 0/1:34,25:59:99:309,0,772:127 0/1:45,27:72:99:322,0,1096:127
+2 45429089 rs13418430 C A 2341.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.861;DB;DP=283;Dels=0.00;FS=2.854;HaplotypeScore=1.3288;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=-0.939;QD=12.52;ReadPosRankSum=-1.869;SB=-1.156e+03;VQSLOD=7.1503;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:60,49:109:99:1406,0,2061:127 1|0:41,37:78:99:974,0,1238:127 0|0:96,0:96:99:0,256,3312:127
+2 54408283 rs55993481 T G 2128.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.961;DB;DP=222;Dels=0.00;FS=1.744;HaplotypeScore=3.9553;MLEAC=2;MLEAF=0.333;MQ=59.69;MQ0=0;MQRankSum=0.670;QD=14.28;ReadPosRankSum=1.313;SB=-1.076e+03;VQSLOD=6.5064;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:35,46:81:99:1392,0,921:127 1|0:35,33:68:99:775,0,878:127 0|0:73,0:73:99:0,175,2164:127
+2 64848970 rs35473866 T C 655.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.263;DB;DP=218;Dels=0.00;FS=8.014;HaplotypeScore=2.5836;MLEAC=1;MLEAF=0.167;MQ=58.36;MQ0=0;MQRankSum=-0.168;QD=8.29;ReadPosRankSum=-0.307;SB=-3.420e+02;VQSLOD=5.9179;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,208,2627:127 0|0:61,0:61:99:0,135,1725:127 0|1:35,42:79:99:690,0,1042:127
+2 85513238 rs62162679 C T 742.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.162;DB;DP=137;Dels=0.00;FS=4.474;HaplotypeScore=1.3905;MLEAC=2;MLEAF=0.333;MQ=57.50;MQ0=0;MQRankSum=0.479;QD=7.57;ReadPosRankSum=-0.272;SB=-5.520e+02;VQSLOD=7.1288;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:39,0:39:99:0,105,1267:104 0|1:23,23:47:99:430,0,551:104 0|1:31,20:51:99:351,0,633:104
+2 96514373 rs10186946 C T 206.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=4.485;DB;DP=175;Dels=0.00;FS=2.805;HaplotypeScore=2.4200;MLEAC=2;MLEAF=0.333;MQ=39.07;MQ0=7;MQRankSum=-7.529;QD=1.61;ReadPosRankSum=0.813;SB=-2.501e+01;VQSLOD=-0.8655;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:35,23:58:62:62,0,484:61 1|0:22,46:70:99:183,0,387:61 0|0:46,0:47:99:0,99,1162:61
+2 117966808 rs333847 C T 9037.01 PASS AC=6;AF=1.00;AN=6;DB;DP=269;Dels=0.00;FS=0.000;HaplotypeScore=3.7032;MLEAC=6;MLEAF=1.00;MQ=58.21;MQ0=0;QD=33.59;SB=-4.673e+03;VQSLOD=7.0546;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2652,205,0:127 1|1:0,101:101:99:3158,247,0:127 1|1:0,89:90:99:3227,250,0:127
+2 127445050 rs113647072 A G 1773.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.856;DB;DP=154;Dels=0.00;FS=4.202;HaplotypeScore=2.2701;MLEAC=4;MLEAF=0.667;MQ=59.16;MQ0=0;MQRankSum=0.759;QD=11.51;ReadPosRankSum=1.290;SB=-1.402e+03;VQSLOD=7.9185;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:26,28:54:99:652,0,472:78 0|1:26,22:49:99:350,0,462:78 1|1:0,50:51:78:813,78,0:78
+2 144289763 rs7607879 C T 3308.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.386;DB;DP=225;Dels=0.00;FS=9.723;HaplotypeScore=1.4969;MLEAC=3;MLEAF=0.500;MQ=59.53;MQ0=0;MQRankSum=0.283;QD=14.70;ReadPosRankSum=1.392;SB=-1.760e+03;VQSLOD=8.2418;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:41,39:81:99:1190,0,1312:127 0/1:28,36:64:99:1057,0,834:127 0/1:44,36:80:99:1061,0,1275:127
+2 155726628 . T G 1351.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=0.207;DP=193;Dels=0.00;FS=9.246;HaplotypeScore=0.5220;MLEAC=6;MLEAF=1.00;MQ=16.17;MQ0=87;MQRankSum=2.396;QD=7.00;ReadPosRankSum=1.069;SB=-4.420e+02;VQSLOD=-2.7874;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,56:59:60:591,60,0:27 1|1:8,49:57:27:245,27,0:27 1|1:12,65:77:57:553,57,0:27
+2 167166899 . T A 1064.78 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=0.023;DP=278;Dels=0.00;FS=9.890;HaplotypeScore=0.2774;MLEAC=6;MLEAF=1.00;MQ=10.47;MQ0=239;MQRankSum=1.643;QD=3.83;ReadPosRankSum=0.347;SB=-1.083e-02;VQSLOD=-6.9449;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:174,12:186:36:401,36,0:4 1|1:37,14:52:39:431,39,0:4 1|0:31,9:40:3:271,0,3:4
+2 177175707 rs7355385 A G 2590.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.866;DB;DP=206;Dels=0.00;FS=14.872;HaplotypeScore=0.3111;MLEAC=3;MLEAF=0.500;MQ=59.12;MQ0=0;MQRankSum=-0.937;QD=20.40;ReadPosRankSum=-0.287;SB=-8.970e+02;VQSLOD=6.8179;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:856,0,1069:127 1|1:0,62:62:99:1779,150,0:127 0|0:78,1:79:99:0,193,2411:127
+2 187694833 rs10191094 T C 1006.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.181;DB;DP=236;Dels=0.00;FS=9.083;HaplotypeScore=2.2688;MLEAC=1;MLEAF=0.167;MQ=59.73;MQ0=0;MQRankSum=-0.218;QD=13.07;ReadPosRankSum=-0.877;SB=-5.830e+02;VQSLOD=7.6003;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3021:127 0|0:77,0:77:99:0,217,2790:127 0|1:33,44:77:99:1041,0,988:127
+2 198567638 rs12619333 C G 2201.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.028;DB;DP=240;Dels=0.00;FS=4.757;HaplotypeScore=1.3741;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=1;MQRankSum=0.131;QD=13.42;ReadPosRankSum=0.123;SB=-1.051e+03;VQSLOD=8.1261;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:38,45:84:99:1298,0,1249:127 1|0:45,35:80:99:942,0,1493:127 0|0:76,0:76:99:0,196,2542:127
+2 209758643 rs12992166 C T 1534.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.178;DB;DP=163;Dels=0.00;FS=8.813;HaplotypeScore=2.3636;MLEAC=2;MLEAF=0.333;MQ=58.93;MQ0=0;MQRankSum=1.988;QD=12.08;ReadPosRankSum=1.075;SB=-4.720e+02;VQSLOD=6.8226;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,22:59:99:610,0,886:93 1|0:32,36:68:99:963,0,797:93 0|0:36,0:36:93:0,93,1058:93
+2 228532558 rs6436725 G A 3484.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=7.160;DB;DP=263;Dels=0.00;FS=1.547;HaplotypeScore=4.9679;MLEAC=3;MLEAF=0.500;MQ=58.60;MQ0=0;MQRankSum=1.137;QD=21.91;ReadPosRankSum=-0.416;SB=-1.472e+03;VQSLOD=5.4377;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:42,47:89:99:1549,0,932:127 0|0:104,0:104:99:0,247,2939:127 1|1:0,69:70:99:1935,156,0:127
+2 237156689 rs13390270 G A 852.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.150;DB;DP=205;Dels=0.00;FS=0.710;HaplotypeScore=1.7295;MLEAC=1;MLEAF=0.167;MQ=59.06;MQ0=0;MQRankSum=-0.193;QD=11.67;ReadPosRankSum=1.262;SB=-4.790e+02;VQSLOD=8.4962;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,202,2606:108 0|1:39,34:73:99:887,0,1027:108 0|0:59,0:59:99:0,108,1384:108
+3 1609737 rs2648459 A G 6492.01 PASS AC=6;AF=1.00;AN=6;DB;DP=187;Dels=0.00;FS=0.000;HaplotypeScore=1.1795;MLEAC=6;MLEAF=1.00;MQ=59.90;MQ0=0;QD=34.72;SB=-3.251e+03;VQSLOD=11.5033;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1943,150,0:127 1|1:0,62:62:99:2206,172,0:127 1|1:0,72:72:99:2343,181,0:127
+3 8399330 rs6770171 G A 6816.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.689;DB;DP=253;Dels=0.00;FS=0.637;HaplotypeScore=1.2788;MLEAC=5;MLEAF=0.833;MQ=58.42;MQ0=0;MQRankSum=0.607;QD=26.94;ReadPosRankSum=-0.503;SB=-3.369e+03;VQSLOD=8.0141;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3784,292,0:127 1|1:0,72:72:99:2164,169,0:127 1|0:42,33:75:99:868,0,1146:127
+3 17501103 . T G 45.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-6.477;DP=156;Dels=0.00;FS=71.755;HaplotypeScore=1.5253;MLEAC=2;MLEAF=0.333;MQ=58.02;MQ0=0;MQRankSum=-0.156;QD=0.43;ReadPosRankSum=-3.974;SB=-1.474e-02;VQSLOD=-14.1451;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,8:51:99:0,114,1252:33 0|1:22,24:46:34:34,0,492:33 0|1:24,34:59:50:50,0,492:33
+3 26960556 rs4422260 T C 878.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-2.140;DB;DP=220;Dels=0.00;FS=1.108;HaplotypeScore=1.7204;MLEAC=2;MLEAF=0.333;MQ=41.87;MQ0=3;MQRankSum=-6.679;QD=5.97;ReadPosRankSum=-0.031;SB=-4.600e+02;VQSLOD=0.7170;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,208,2660:127 0|1:32,48:80:99:759,0,915:127 0|1:37,30:67:99:158,0,1092:127
+3 48757773 rs61137521 A G 3103.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.794;DB;DP=172;Dels=0.00;FS=0.000;HaplotypeScore=1.8954;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=-0.693;QD=18.04;ReadPosRankSum=-1.667;SB=-1.874e+03;VQSLOD=7.9241;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,50:51:99:1723,141,0:127 1|0:31,34:65:99:745,0,814:127 1|0:24,32:56:99:677,0,603:127
+3 60283791 rs10154846 T C 669.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.270;DB;DP=204;Dels=0.00;FS=1.585;HaplotypeScore=1.6639;MLEAC=1;MLEAF=0.167;MQ=59.39;MQ0=0;MQRankSum=0.370;QD=10.14;ReadPosRankSum=1.636;SB=-2.690e+02;VQSLOD=8.9468;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:63,0:63:99:0,190,2440:127 0|1:34,32:66:99:704,0,1020:127 0|0:74,0:75:99:0,190,2372:127
+3 68765638 rs1504297 C G 4623.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-5.561;DB;DP=225;Dels=0.00;FS=3.176;HaplotypeScore=0.8432;MLEAC=4;MLEAF=0.667;MQ=59.80;MQ0=0;MQRankSum=-0.619;QD=20.55;ReadPosRankSum=-1.001;SB=-2.371e+03;VQSLOD=8.7354;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:40,39:79:99:1220,0,1330:127 1|1:0,75:75:99:2518,205,0:127 0|1:37,34:71:99:885,0,1185:127
+3 76722766 rs264537 C G 845.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=3.666;DB;DP=202;Dels=0.00;FS=0.000;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.79;MQ0=0;MQRankSum=-0.795;QD=13.21;ReadPosRankSum=1.049;SB=-2.910e+02;VQSLOD=8.5280;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,208,2570:127 0|0:68,0:68:99:0,193,2332:127 0|1:34,30:64:99:880,0,995:127
+3 86234718 rs2324883 T C 7655.01 PASS AC=6;AF=1.00;AN=6;DB;DP=234;Dels=0.00;FS=0.000;HaplotypeScore=0.6487;MLEAC=6;MLEAF=1.00;MQ=59.51;MQ0=0;QD=32.71;SB=-4.142e+03;VQSLOD=11.2111;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,80:80:99:2857,223,0:127 1|1:0,76:77:99:2512,196,0:127 1|1:0,77:77:99:2286,178,0:127
+3 99106655 rs2623376 A G 1093.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.490;DB;DP=191;Dels=0.00;FS=2.283;HaplotypeScore=0.6267;MLEAC=2;MLEAF=0.333;MQ=59.76;MQ0=0;MQRankSum=-1.141;QD=9.51;ReadPosRankSum=0.079;SB=-5.610e+02;VQSLOD=8.1455;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:653,0,970:127 0|0:76,0:76:99:0,193,2462:127 1|0:44,19:63:99:479,0,1261:127
+3 108612711 rs2399252 T A 3430.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-0.783;DB;DP=239;Dels=0.00;FS=4.436;HaplotypeScore=0.6593;MLEAC=3;MLEAF=0.500;MQ=59.64;MQ0=0;MQRankSum=-0.269;QD=14.35;ReadPosRankSum=-0.701;SB=-1.733e+03;VQSLOD=8.5079;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:48,34:82:99:1066,0,1620:127 0/1:45,43:88:99:1370,0,1452:127 0/1:36,32:69:99:994,0,1128:127
+3 128140891 rs73201490 C T 1315.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.394;DB;DP=142;Dels=0.00;FS=0.667;HaplotypeScore=3.4886;MLEAC=2;MLEAF=0.333;MQ=58.69;MQ0=0;MQRankSum=1.733;QD=14.30;ReadPosRankSum=0.758;SB=-6.400e+02;VQSLOD=6.7020;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:29,24:53:99:636,0,670:104 0|0:50,0:50:99:0,105,1188:104 1|0:12,27:39:99:718,0,250:104
+3 137840974 rs2622698 C A 6792.01 PASS AC=6;AF=1.00;AN=6;DB;DP=232;Dels=0.00;FS=0.000;HaplotypeScore=2.6477;MLEAC=6;MLEAF=1.00;MQ=59.04;MQ0=0;QD=29.28;SB=-3.999e+03;VQSLOD=9.7681;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2640,205,0:127 1|1:0,78:78:99:2229,178,0:127 1|1:0,75:75:99:1923,153,0:127
+3 148344553 rs62274102 C A 3191.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.860;DB;DP=232;Dels=0.00;FS=12.061;HaplotypeScore=2.3659;MLEAC=3;MLEAF=0.500;MQ=59.32;MQ0=0;MQRankSum=-0.551;QD=19.58;ReadPosRankSum=2.411;SB=-1.757e+03;VQSLOD=6.2908;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:46,39:85:99:985,0,1339:127 1|1:0,78:78:99:2251,175,0:127 0|0:69,0:69:99:0,153,2018:127
+3 158557110 rs34445802 G A 2374.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.805;DB;DP=237;Dels=0.00;FS=1.025;HaplotypeScore=1.6572;MLEAC=2;MLEAF=0.333;MQ=57.48;MQ0=0;MQRankSum=0.558;QD=14.05;ReadPosRankSum=-1.147;SB=-1.505e+03;VQSLOD=7.1338;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:43,56:99:99:1624,0,1344:127 1|0:33,37:70:99:789,0,916:127 0|0:68,0:68:99:0,156,2014:127
+3 179020937 rs13082816 C T 1116.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.603;DB;DP=82;Dels=0.00;FS=0.000;HaplotypeScore=0.6358;MLEAC=4;MLEAF=0.667;MQ=54.57;MQ0=1;MQRankSum=0.374;QD=13.61;ReadPosRankSum=-0.037;SB=-2.010e+02;VQSLOD=6.0907;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:13,13:26:99:388,0,178:36 1|1:0,24:24:36:442,36,0:36 0|1:13,19:32:99:328,0,179:36
+3 189981901 . A G 179.25 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=2.258;DP=274;Dels=0.00;FS=73.736;HaplotypeScore=1.8333;MLEAC=1;MLEAF=0.167;MQ=54.08;MQ0=6;MQRankSum=-2.651;QD=1.97;ReadPosRankSum=-6.101;SB=-6.400e+01;VQSLOD=-18.1951;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:64,27:91:99:214,0,679:51 1|0:78,10:88:0:0,21,1685:51 0|0:86,9:95:74:0,74,1891:51
+3 197056886 rs7612900 G A 7880.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=0.6106;MLEAC=6;MLEAF=1.00;MQ=59.18;MQ0=0;QD=34.41;SB=-3.459e+03;VQSLOD=11.8130;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2786,214,0:127 1|1:0,81:81:99:2598,202,0:127 1|1:0,73:73:99:2496,193,0:127
+4 6333669 rs35678078 G T 2186.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.220;DB;DP=198;Dels=0.00;FS=1.754;HaplotypeScore=0.7779;MLEAC=3;MLEAF=0.500;MQ=59.27;MQ0=0;MQRankSum=-0.256;QD=11.04;ReadPosRankSum=-0.469;SB=-1.621e+03;VQSLOD=9.4086;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:33,34:67:99:875,0,848:127 0/1:27,32:59:99:602,0,534:127 0/1:33,38:72:99:748,0,676:127
+4 12652343 rs13114660 G T 610.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.176;DB;DP=127;Dels=0.00;FS=0.000;HaplotypeScore=1.5681;MLEAC=1;MLEAF=0.167;MQ=58.86;MQ0=0;MQRankSum=-0.468;QD=16.06;ReadPosRankSum=1.246;SB=-3.060e+02;VQSLOD=7.8400;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,120,1561:102 0|1:15,23:38:99:645,0,407:102 0|0:44,1:46:99:0,103,1539:102
+4 21819269 rs4285068 C G 7252.01 PASS AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=0.6511;MLEAC=6;MLEAF=1.00;MQ=55.91;MQ0=0;QD=33.57;SB=-3.284e+03;VQSLOD=8.5427;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,83:83:99:2859,226,0:127 1|1:0,73:73:99:2413,193,0:127 1|1:0,59:59:99:1980,156,0:127
+4 30898977 rs4386561 G A 2449.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.817;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.9382;MLEAC=2;MLEAF=0.333;MQ=58.94;MQ0=0;MQRankSum=0.173;QD=15.70;ReadPosRankSum=1.051;SB=-1.131e+03;VQSLOD=8.3611;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,46:79:99:1380,0,944:127 0|0:75,0:75:99:0,202,2608:127 1|0:43,34:77:99:1108,0,1335:127
+4 39062189 rs2566127 T C 2641.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.019;DB;DP=201;Dels=0.00;FS=1.101;HaplotypeScore=2.8834;MLEAC=3;MLEAF=0.500;MQ=58.96;MQ0=0;MQRankSum=0.932;QD=13.14;ReadPosRankSum=-0.596;SB=-1.401e+03;VQSLOD=7.9734;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,29:64:99:880,0,1168:127 0/1:37,32:70:99:796,0,1021:127 0/1:31,36:67:99:1004,0,877:127
+4 48922864 rs7697262 G C 1383.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=100;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=20.20;MQ0=24;QD=13.83;SB=-3.860e+02;VQSLOD=-0.3210;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,38:41:57:625,57,0:32 1|1:0,28:28:33:368,33,0:32 1|1:2,29:31:39:428,39,0:32
+4 57135985 rs1715504 G A 1213.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.549;DB;DP=173;Dels=0.00;FS=4.099;HaplotypeScore=1.6305;MLEAC=2;MLEAF=0.333;MQ=58.44;MQ0=0;MQRankSum=-1.006;QD=10.28;ReadPosRankSum=-0.933;SB=-4.500e+02;VQSLOD=7.4115;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:54,0:55:99:0,135,1546:127 0|1:30,23:54:99:563,0,608:127 0|1:35,28:64:99:689,0,562:127
+4 64522064 rs4860541 A G 5942.01 PASS AC=6;AF=1.00;AN=6;DB;DP=188;Dels=0.00;FS=0.000;HaplotypeScore=0.2889;MLEAC=6;MLEAF=1.00;MQ=56.20;MQ0=0;QD=31.61;SB=-3.348e+03;VQSLOD=8.5367;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2119,169,0:127 1|1:0,52:53:99:1661,132,0:127 1|1:0,67:67:99:2162,172,0:127
+4 71449060 rs60358213 G A 2269.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.704;DB;DP=227;Dels=0.00;FS=13.048;HaplotypeScore=20.1360;MLEAC=2;MLEAF=0.333;MQ=55.35;MQ0=0;MQRankSum=0.477;QD=13.19;ReadPosRankSum=2.295;SB=-8.910e+02;VQSLOD=1.8937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:60,40:100:99:1221,0,1476:127 1|0:37,35:72:99:1087,0,987:127 0|0:53,1:54:99:0,157,2026:127
+4 82427976 rs6841516 G A 561.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.022;DB;DP=166;Dels=0.00;FS=0.000;HaplotypeScore=1.4715;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=-1.555;QD=11.00;ReadPosRankSum=0.016;SB=-3.880e+02;VQSLOD=8.0989;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:51,0:51:99:0,132,1705:127 0|1:22,29:51:99:596,0,483:127 0|0:64,0:64:99:0,135,1755:127
+4 103859292 rs7676943 C G 7573.01 PASS AC=6;AF=1.00;AN=6;DB;DP=235;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=58.63;MQ0=0;QD=32.23;SB=-3.953e+03;VQSLOD=10.3945;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,95:96:99:3289,256,0:127 1|1:0,73:73:99:2137,166,0:127 1|1:0,66:66:99:2147,166,0:127
+4 122900130 rs4833786 C T 2361.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.390;DB;DP=244;Dels=0.00;FS=0.495;HaplotypeScore=0.5427;MLEAC=2;MLEAF=0.333;MQ=59.91;MQ0=0;MQRankSum=-0.628;QD=15.23;ReadPosRankSum=1.221;SB=-1.282e+03;VQSLOD=8.8105;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:89,0:89:99:0,250,3286:127 0|1:42,44:86:99:1257,0,1325:127 0|1:32,37:69:99:1143,0,941:127
+4 132671861 rs6856716 C G 2622.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=3.143;DB;DP=617;DS;Dels=0.00;FS=5.808;HaplotypeScore=34.4109;MLEAC=2;MLEAF=0.333;MQ=24.78;MQ0=42;MQRankSum=3.293;QD=5.89;ReadPosRankSum=-0.736;SB=-1.412e+03;VQSLOD=-77.3455;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:125,98:223:99:1761,0,1486:127 0|0:171,0:172:99:0,300,2641:127 1|0:152,70:222:99:900,0,2086:127
+4 141514835 rs55984232 C T 1645.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=7.144;DB;DP=191;Dels=0.00;FS=2.756;HaplotypeScore=1.0735;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.726;QD=13.06;ReadPosRankSum=-0.789;SB=-8.550e+02;VQSLOD=8.9425;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,28:60:99:913,0,820:127 0|0:65,0:65:99:0,156,1886:127 1|0:34,32:66:99:771,0,750:127
+4 161180100 rs167176 G C 2497.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.811;DB;DP=191;Dels=0.00;FS=5.370;HaplotypeScore=0.7812;MLEAC=3;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=-0.584;QD=13.07;ReadPosRankSum=0.756;SB=-1.206e+03;VQSLOD=8.0012;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,36:68:99:1100,0,895:127 0/1:41,35:76:99:987,0,1028:127 0/1:29,17:47:99:449,0,820:127
+4 169085855 rs2251558 A G 1161.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.721;DB;DP=244;Dels=0.00;FS=5.247;HaplotypeScore=0.4893;MLEAC=1;MLEAF=0.167;MQ=59.91;MQ0=0;MQRankSum=1.574;QD=13.99;ReadPosRankSum=0.454;SB=-5.590e+02;VQSLOD=7.4222;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,226,2915:127 0|1:43,40:83:99:1196,0,1294:127 0|0:84,0:84:99:0,232,2950:127
+4 177855678 rs1545090 A G 7065.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1696;MLEAC=6;MLEAF=1.00;MQ=59.50;MQ0=0;QD=30.85;SB=-3.799e+03;VQSLOD=11.0069;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,84:84:99:2701,235,0:127 1|1:0,79:80:99:2401,211,0:127 1|1:0,65:65:99:1963,165,0:127
+4 184811263 rs2871379 A G 6376.01 PASS AC=6;AF=1.00;AN=6;DB;DP=211;Dels=0.00;FS=0.000;HaplotypeScore=0.5084;MLEAC=6;MLEAF=1.00;MQ=58.38;MQ0=0;QD=30.22;SB=-3.472e+03;VQSLOD=10.4879;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2539,199,0:127 1|1:0,67:67:99:2072,165,0:127 1|1:0,66:66:99:1765,135,0:127
+4 190538070 rs62323772 G A 106.69 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.099;DB;DP=19;Dels=0.00;FS=0.000;HaplotypeScore=4.3562;MLEAC=3;MLEAF=0.500;MQ=33.71;MQ0=0;MQRankSum=0.591;QD=5.93;ReadPosRankSum=-0.394;SB=-7.601e+01;VQSLOD=-1.3921;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:4,9:13:69:69,0,92:3 0|0:1,0:1:3:0,3,33:3 1|1:0,4:5:6:77,6,0:3
+5 3276081 rs4866540 G A 3653.01 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=5.002;DB;DP=176;Dels=0.00;FS=2.778;HaplotypeScore=19.0040;MLEAC=4;MLEAF=0.667;MQ=57.74;MQ0=0;MQRankSum=-0.569;QD=20.76;ReadPosRankSum=1.308;SB=-6.610e+02;VQSLOD=3.1833;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,71:72:99:2337,175,0:127 1|0:26,25:51:99:719,0,601:127 1|0:26,27:53:99:597,0,662:127
+5 10958957 rs852590 T C 8430.01 PASS AC=6;AF=1.00;AN=6;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=1.8272;MLEAC=6;MLEAF=1.00;MQ=59.31;MQ0=0;QD=34.69;SB=-4.118e+03;VQSLOD=10.8702;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3594,277,0:127 1|1:1,73:74:99:2318,181,0:127 1|1:0,72:72:99:2518,196,0:127
+5 20435939 rs12697584 A C 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-5.396;DB;DP=246;Dels=0.00;FS=4.681;HaplotypeScore=0.8744;MLEAC=2;MLEAF=0.333;MQ=59.74;MQ0=0;MQRankSum=-0.850;QD=14.20;ReadPosRankSum=0.391;SB=-1.305e+03;VQSLOD=8.1327;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:85,0:85:99:0,241,3183:127 0|1:41,37:78:99:1062,0,1304:127 0|1:39,44:83:99:1263,0,1222:127
+5 29069162 rs658439 G A 499.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.981;DB;DP=199;Dels=0.00;FS=11.196;HaplotypeScore=1.6038;MLEAC=1;MLEAF=0.167;MQ=52.70;MQ0=0;MQRankSum=-0.608;QD=9.42;ReadPosRankSum=-1.103;SB=-2.310e+02;VQSLOD=4.0183;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:86,0:86:99:0,211,2509:110 0|0:60,0:60:99:0,111,1240:110 0|1:30,23:53:99:534,0,523:110
+5 36740339 rs36676 T G 6995.01 PASS AC=6;AF=1.00;AN=6;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=2.0768;MLEAC=6;MLEAF=1.00;MQ=59.46;MQ0=0;QD=30.41;SB=-3.034e+03;VQSLOD=10.9208;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2261,195,0:127 1|1:0,83:83:99:2579,217,0:127 1|1:0,71:72:99:2155,181,0:127
+5 49438828 rs137880658 G A 424.24 VQSRTrancheSNP99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-4.376;DB;DP=748;DS;Dels=0.00;FS=7.184;HaplotypeScore=20.6618;MLEAC=1;MLEAF=0.167;MQ=19.63;MQ0=158;MQRankSum=3.819;QD=1.70;ReadPosRankSum=1.191;SB=-2.220e+02;VQSLOD=-98.2155;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:249,0:249:99:0,555,4848:127 0|1:204,46:250:99:459,0,2894:127 0|0:249,0:249:99:0,480,4326:127
+5 58243302 rs457566 A C 6237.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.663;DB;DP=233;Dels=0.00;FS=3.429;HaplotypeScore=0.8859;MLEAC=5;MLEAF=0.833;MQ=59.70;MQ0=0;MQRankSum=-0.232;QD=26.77;ReadPosRankSum=0.957;SB=-2.566e+03;VQSLOD=9.3537;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,87:87:99:2923,229,0:127 1|0:36,50:86:99:1429,0,1006:127 1|1:0,60:60:99:1885,147,0:127
+5 70856663 rs157045 T C 2040.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.809;DB;DP=234;Dels=0.00;FS=1.824;HaplotypeScore=1.0544;MLEAC=2;MLEAF=0.333;MQ=58.65;MQ0=0;MQRankSum=0.989;QD=13.16;ReadPosRankSum=0.719;SB=-8.820e+02;VQSLOD=7.3513;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,41:85:99:1087,0,1448:127 1|0:28,42:70:99:992,0,789:127 0|0:79,0:79:99:0,181,2342:127
+5 80900719 rs2917540 G T 4938.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.261;DB;DP=240;Dels=0.00;FS=0.489;HaplotypeScore=0.5959;MLEAC=4;MLEAF=0.667;MQ=59.63;MQ0=0;MQRankSum=-2.115;QD=20.58;ReadPosRankSum=0.288;SB=-2.548e+03;VQSLOD=8.4417;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:52,40:92:99:1207,0,1768:127 0|1:37,33:70:99:960,0,1205:127 1|1:0,78:78:99:2771,211,0:127
+5 93119893 rs6879620 G A 4262.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.930;DB;DP=239;Dels=0.00;FS=1.050;HaplotypeScore=2.1583;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=0.891;QD=17.83;ReadPosRankSum=-2.670;SB=-2.596e+03;VQSLOD=7.0681;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:49,42:91:99:1098,0,1410:127 0|1:36,38:74:99:890,0,1008:127 1|1:0,74:74:99:2274,178,0:127
+5 102962771 rs6866105 A G 5087.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.665;DB;DP=200;Dels=0.00;FS=8.083;HaplotypeScore=2.2837;MLEAC=5;MLEAF=0.833;MQ=58.71;MQ0=0;MQRankSum=-0.503;QD=25.44;ReadPosRankSum=-0.482;SB=-2.172e+03;VQSLOD=7.2212;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2373,184,0:127 1|1:0,59:59:99:1776,141,0:127 1|0:31,35:66:99:938,0,803:127
+5 112750674 rs9716322 A C 598.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-0.293;DB;DP=199;Dels=0.00;FS=2.948;HaplotypeScore=0.3328;MLEAC=1;MLEAF=0.167;MQ=45.61;MQ0=2;MQRankSum=-2.398;QD=12.21;ReadPosRankSum=1.159;SB=-8.101e+01;VQSLOD=2.7717;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,196,2534:127 0|1:23,26:49:99:633,0,479:127 0|0:68,1:69:99:0,174,2191:127
+5 121302662 . G T 143.72 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.413;DP=150;Dels=0.02;FS=161.482;HaplotypeScore=2.8631;MLEAC=3;MLEAF=0.500;MQ=35.76;MQ0=1;MQRankSum=0.422;QD=0.96;ReadPosRankSum=-5.675;SB=-1.466e+00;VQSLOD=-77.2440;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:32,21:53:99:120,0,251:5 0/1:35,12:47:57:57,0,271:5 0/1:35,12:47:4:4,0,259:5
+5 132377304 rs72801439 A T 858.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.113;DB;DP=219;Dels=0.00;FS=10.632;HaplotypeScore=0.6638;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.881;QD=11.29;ReadPosRankSum=0.435;SB=-3.050e+02;VQSLOD=7.6837;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,163,2149:127 0|1:43,33:76:99:893,0,1280:127 0|0:76,0:76:99:0,199,2553:127
+5 144321895 rs35068704 A T 1535.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.048;DB;DP=203;Dels=0.00;FS=13.289;HaplotypeScore=0.5075;MLEAC=2;MLEAF=0.333;MQ=57.36;MQ0=0;MQRankSum=2.191;QD=11.37;ReadPosRankSum=-1.361;SB=-7.640e+02;VQSLOD=5.7211;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,25:59:99:595,0,976:127 0|0:68,0:68:99:0,190,2435:127 1|0:39,37:76:99:979,0,1274:127
+5 154441640 rs467330 A C 1133.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.127;DB;DP=235;Dels=0.00;FS=2.103;HaplotypeScore=1.1893;MLEAC=1;MLEAF=0.167;MQ=59.65;MQ0=0;MQRankSum=0.766;QD=12.59;ReadPosRankSum=-0.535;SB=-6.500e+02;VQSLOD=9.8335;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2172:127 0|1:45,45:90:99:1168,0,1368:127 0|0:82,1:84:99:0,226,2825:127
+5 164600452 rs7711548 C A 588.32 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-3.291;DB;DP=192;Dels=0.02;FS=2.319;HaplotypeScore=32.6662;MLEAC=6;MLEAF=1.00;MQ=57.55;MQ0=0;MQRankSum=1.536;QD=3.06;ReadPosRankSum=-1.533;SB=-2.085e+03;VQSLOD=-1.4325;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:15,52:69:18:155,18,0:15 1|1:11,55:66:36:296,36,0:15 1|1:18,36:54:15:175,15,0:15
+5 174249229 rs11739079 C G 1613.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.540;DB;DP=190;Dels=0.00;FS=6.482;HaplotypeScore=2.0416;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-0.898;QD=11.86;ReadPosRankSum=0.601;SB=-8.320e+02;VQSLOD=7.7782;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,43:75:99:1069,0,928:123 0|0:54,0:54:99:0,123,1554:123 1|0:33,27:61:99:583,0,883:123
+6 1620147 rs2569882 T C 252.30 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.862;DB;DP=38;Dels=0.00;FS=8.023;HaplotypeScore=0.2217;MLEAC=5;MLEAF=0.833;MQ=57.65;MQ0=0;MQRankSum=-0.918;QD=9.34;ReadPosRankSum=0.584;SB=-4.005e+01;VQSLOD=4.3258;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:0,17:17:21:254,21,0:4 1|0:3,8:11:2:0,3,40:4 1|1:0,10:10:3:39,3,0:4
+6 9408051 rs11751621 C G 5140.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.350;DB;DP=241;Dels=0.00;FS=0.000;HaplotypeScore=0.6637;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=-0.205;QD=21.33;ReadPosRankSum=-0.033;SB=-2.552e+03;VQSLOD=8.9881;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:42,40:82:99:1156,0,1352:127 0|1:36,45:81:99:1253,0,1134:127 1|1:0,78:78:99:2731,214,0:127
+6 18687376 rs9383429 A T 1162.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.746;DB;DP=232;Dels=0.00;FS=0.638;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=59.42;MQ0=0;MQRankSum=-0.733;QD=15.71;ReadPosRankSum=-0.146;SB=-6.490e+02;VQSLOD=9.4317;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,241,3181:127 0|0:76,0:76:99:0,217,2832:127 0|1:33,41:74:99:1197,0,1008:127
+6 26687649 . G C 1654.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=9.718;DP=410;Dels=0.00;FS=5.973;HaplotypeScore=5.0786;MLEAC=2;MLEAF=0.333;MQ=28.19;MQ0=32;MQRankSum=0.048;QD=6.17;ReadPosRankSum=0.408;SB=-5.110e+02;VQSLOD=-8.7346;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:117,49:166:99:1013,0,2495:127 0|0:141,1:142:99:0,244,2576:127 1|0:70,32:102:99:680,0,1048:127
+6 35346891 . C T 483.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-6.402;DP=205;Dels=0.02;FS=214.154;HaplotypeScore=4.5086;MLEAC=3;MLEAF=0.500;MQ=51.07;MQ0=1;MQRankSum=-2.038;QD=2.36;ReadPosRankSum=-2.250;SB=-1.065e-02;VQSLOD=-116.9542;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:48,31:79:99:257,0,635:80 0/1:40,22:62:99:185,0,308:80 0/1:44,16:60:80:80,0,534:80
+6 45421630 rs1343799 C T 5422.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.419;DB;DP=240;Dels=0.00;FS=10.689;HaplotypeScore=0.7979;MLEAC=4;MLEAF=0.667;MQ=59.46;MQ0=0;MQRankSum=1.089;QD=22.59;ReadPosRankSum=1.252;SB=-2.647e+03;VQSLOD=7.7035;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:29,43:72:99:1445,0,843:127 0|1:43,37:80:99:1121,0,1302:127 1|1:0,88:88:99:2856,220,0:127
+6 55412503 rs12201934 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.280;DB;DP=182;Dels=0.00;FS=0.744;HaplotypeScore=0.3332;MLEAC=1;MLEAF=0.167;MQ=59.64;MQ0=0;MQRankSum=-0.765;QD=13.57;ReadPosRankSum=0.147;SB=-4.590e+02;VQSLOD=9.3766;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,181,2371:127 0|1:35,30:65:99:917,0,1046:127 0|0:56,0:56:99:0,150,1969:127
+6 71018445 rs1321063 C A 518.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.668;DB;DP=185;Dels=0.00;FS=1.618;HaplotypeScore=0.6919;MLEAC=1;MLEAF=0.167;MQ=58.93;MQ0=0;MQRankSum=0.355;QD=8.78;ReadPosRankSum=1.306;SB=-4.020e+02;VQSLOD=7.7510;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,184,2404:127 0|0:59,0:59:99:0,160,2065:127 0|1:29,30:59:99:553,0,809:127
+6 79887872 rs6454101 C T 2130.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.355;DB;DP=204;Dels=0.00;FS=11.823;HaplotypeScore=2.3806;MLEAC=3;MLEAF=0.500;MQ=59.68;MQ0=0;MQRankSum=1.011;QD=10.44;ReadPosRankSum=-0.769;SB=-1.370e+03;VQSLOD=7.5187;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:31,31:62:99:806,0,990:127 0/1:42,31:73:99:606,0,921:127 0/1:29,40:69:99:757,0,749:127
+6 89947117 rs9942462 A G 5019.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.654;DB;DP=181;Dels=0.00;FS=0.000;HaplotypeScore=3.3205;MLEAC=6;MLEAF=1.00;MQ=53.30;MQ0=0;MQRankSum=0.428;QD=27.73;ReadPosRankSum=1.090;SB=-3.151e+03;VQSLOD=5.6763;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:60:99:1715,138,0:92 1|1:1,55:56:93:1401,93,0:92 1|1:0,65:65:99:1903,153,0:92
+6 110345430 rs56272355 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.241;DB;DP=230;Dels=0.00;FS=2.159;HaplotypeScore=1.7615;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-0.200;QD=11.46;ReadPosRankSum=-0.480;SB=-5.580e+02;VQSLOD=8.9824;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,220,2860:127 0|0:75,0:76:99:0,184,2321:127 0|1:35,42:77:99:917,0,926:127
+6 120734422 rs62424426 T C 1091.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.268;DB;DP=208;Dels=0.00;FS=4.347;HaplotypeScore=0.7034;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=-0.188;QD=14.36;ReadPosRankSum=-0.149;SB=-5.560e+02;VQSLOD=8.6529;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,205,2692:127 0|0:61,0:61:99:0,175,2298:127 0|1:39,37:76:99:1126,0,1140:127
+6 131725921 . G A 64.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=3.650;DP=182;Dels=0.00;FS=3.535;HaplotypeScore=2.2441;MLEAC=1;MLEAF=0.167;MQ=50.85;MQ0=1;MQRankSum=-6.039;QD=1.31;ReadPosRankSum=-1.757;SB=-4.901e+01;VQSLOD=-0.6667;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:59,0:60:99:0,168,1897:98 0|1:33,16:49:99:99,0,790:98 0|0:73,0:73:99:0,156,1824:98
+6 143691852 rs17792267 C T 3641.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.465;DB;DP=203;Dels=0.00;FS=2.413;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=1.198;QD=27.17;ReadPosRankSum=-1.140;SB=-1.772e+03;VQSLOD=8.8712;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:29,33:62:99:1131,0,803:127 1|1:0,72:72:99:2510,196,0:127 0|0:69,0:69:99:0,190,2480:127
+6 154006585 rs7752561 G A 919.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.323;DB;DP=223;Dels=0.00;FS=0.000;HaplotypeScore=0.8254;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-0.749;QD=10.45;ReadPosRankSum=-0.155;SB=-5.260e+02;VQSLOD=8.8368;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,202,2601:127 0|1:51,37:88:99:954,0,1475:127 0|0:65,0:65:99:0,175,2269:127
+6 162459664 rs2849564 C T 1819.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.399;DB;DP=201;Dels=0.00;FS=3.295;HaplotypeScore=2.5591;MLEAC=2;MLEAF=0.333;MQ=59.38;MQ0=0;MQRankSum=1.792;QD=12.90;ReadPosRankSum=-1.045;SB=-1.068e+03;VQSLOD=8.1160;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:28,40:68:99:1007,0,793:120 1|0:38,35:73:99:851,0,831:120 0|0:60,0:60:99:0,120,1421:120
+7 4683258 rs62450857 G A 1127.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.991;DB;DP=191;Dels=0.00;FS=3.236;HaplotypeScore=0.2774;MLEAC=1;MLEAF=0.167;MQ=57.16;MQ0=0;MQRankSum=1.297;QD=14.09;ReadPosRankSum=0.469;SB=-4.730e+02;VQSLOD=6.6182;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,196,2495:120 0|1:38,42:80:99:1162,0,1016:120 0|0:45,0:45:99:0,120,1531:120
+7 12502849 rs848025 C G 4109.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.809;DB;DP=220;Dels=0.00;FS=1.141;HaplotypeScore=1.8049;MLEAC=4;MLEAF=0.667;MQ=59.56;MQ0=0;MQRankSum=0.625;QD=18.68;ReadPosRankSum=-0.019;SB=-1.989e+03;VQSLOD=8.7123;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:47,45:92:99:1216,0,1501:127 1|1:0,71:71:99:2145,184,0:127 0|1:27,30:57:99:748,0,743:127
+7 29544610 rs6462145 A T 4020.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.326;DB;DP=189;Dels=0.00;FS=5.388;HaplotypeScore=1.2974;MLEAC=4;MLEAF=0.667;MQ=58.54;MQ0=0;MQRankSum=1.295;QD=21.27;ReadPosRankSum=-1.212;SB=-1.878e+03;VQSLOD=7.3155;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:27,49:77:99:1466,0,733:127 1|1:0,64:64:99:1888,147,0:127 0|1:18,27:48:99:666,0,410:127
+7 38984187 rs118081099 A C 569.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.110;DB;DP=182;Dels=0.00;FS=6.196;HaplotypeScore=0.5533;MLEAC=1;MLEAF=0.167;MQ=54.22;MQ0=0;MQRankSum=1.675;QD=9.33;ReadPosRankSum=1.162;SB=-1.260e+02;VQSLOD=4.8877;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:72,0:72:99:0,196,2446:127 0|1:38,23:61:99:604,0,1196:127 0|0:48,1:49:99:0,138,1711:127
+7 48862174 rs965346 A G 877.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.250;DB;DP=194;Dels=0.00;FS=6.112;HaplotypeScore=0.6489;MLEAC=1;MLEAF=0.167;MQ=57.54;MQ0=0;MQRankSum=2.058;QD=16.25;ReadPosRankSum=-1.204;SB=-4.040e+02;VQSLOD=6.2372;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3007:127 0|0:58,0:58:99:0,160,2067:127 0|1:22,32:54:99:912,0,686:127
+7 56584972 rs34475770 C T 2465.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.103;DB;DP=255;Dels=0.00;FS=2.230;HaplotypeScore=0.8840;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=1.766;QD=15.03;ReadPosRankSum=1.126;SB=-1.412e+03;VQSLOD=6.5725;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:91,0:91:99:0,259,3369:127 0|1:36,49:85:99:1444,0,1000:127 0|1:38,41:79:99:1060,0,1084:127
+7 62232046 . C T 1155.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.643;DP=230;Dels=0.00;FS=6.304;HaplotypeScore=12.7679;MLEAC=1;MLEAF=0.167;MQ=58.61;MQ0=3;MQRankSum=-0.697;QD=15.20;ReadPosRankSum=-1.202;SB=-4.440e+02;VQSLOD=2.5725;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:77,1:78:99:0,217,2824:127 0|0:76,0:76:99:0,202,2604:127 0|1:34,42:76:99:1190,0,994:127
+7 69334430 rs917719 C T 1223.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.841;DB;DP=193;Dels=0.00;FS=6.656;HaplotypeScore=0.8147;MLEAC=2;MLEAF=0.333;MQ=59.81;MQ0=0;MQRankSum=1.631;QD=9.63;ReadPosRankSum=1.458;SB=-7.370e+02;VQSLOD=7.0004;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:770,0,1258:127 1|0:26,24:50:99:492,0,840:127 0|0:66,0:66:99:0,172,2210:127
+7 79508376 rs2525826 G T 716.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.152;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=0.8658;MLEAC=1;MLEAF=0.167;MQ=59.48;MQ0=0;MQRankSum=1.420;QD=13.51;ReadPosRankSum=0.263;SB=-4.080e+02;VQSLOD=9.5728;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:65:99:0,181,2312:127 0|0:78,0:78:99:0,226,2916:127 0|1:27,26:53:99:751,0,845:127
+7 89752110 rs39232 T G 3944.01 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.000;HaplotypeScore=1.4477;MLEAC=6;MLEAF=1.00;MQ=38.19;MQ0=21;QD=18.26;SB=-2.716e+03;VQSLOD=2.6638;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:1564,132,0:101 1|1:0,79:79:99:1258,108,0:101 1|1:0,66:66:99:1122,102,0:101
+7 101161506 rs2158739 C T 4522.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.698;DB;DP=172;Dels=0.00;FS=4.280;HaplotypeScore=1.5077;MLEAC=5;MLEAF=0.833;MQ=58.18;MQ0=0;MQRankSum=-0.295;QD=26.29;ReadPosRankSum=0.974;SB=-2.287e+03;VQSLOD=8.2831;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:73:99:2443,202,0:110 1|0:23,26:50:99:711,0,586:110 1|1:0,48:49:99:1368,111,0:110
+7 110843795 rs214455 A G 8548.01 PASS AC=6;AF=1.00;AN=6;DB;DP=258;Dels=0.00;FS=0.000;HaplotypeScore=2.3561;MLEAC=6;MLEAF=1.00;MQ=59.35;MQ0=0;QD=33.13;SB=-4.197e+03;VQSLOD=10.7627;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3535,301,0:127 1|1:0,66:66:99:2270,193,0:127 1|1:0,86:86:99:2743,229,0:127
+7 124589684 rs12113765 G C 4948.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.607;DB;DP=243;Dels=0.00;FS=1.040;HaplotypeScore=3.3790;MLEAC=4;MLEAF=0.667;MQ=58.74;MQ0=0;MQRankSum=1.246;QD=20.36;ReadPosRankSum=-0.387;SB=-2.411e+03;VQSLOD=7.0507;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,27:71:99:796,0,1350:127 1|1:0,84:85:99:2760,217,0:127 0|1:41,46:87:99:1392,0,1180:127
+7 144383888 rs73161092 T C 689.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.434;DB;DP=254;Dels=0.00;FS=8.629;HaplotypeScore=0.0000;MLEAC=1;MLEAF=0.167;MQ=59.54;MQ0=0;MQRankSum=0.163;QD=8.62;ReadPosRankSum=-1.802;SB=-3.560e+02;VQSLOD=6.4544;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:90,0:90:99:0,268,3553:127 0|1:47,33:80:99:724,0,1392:127 0|0:84,0:84:99:0,202,2644:127
+7 152208470 rs6464236 G C 4321.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.233;DB;DP=169;Dels=0.00;FS=1.635;HaplotypeScore=1.3568;MLEAC=5;MLEAF=0.833;MQ=57.18;MQ0=1;MQRankSum=1.907;QD=25.57;ReadPosRankSum=0.892;SB=-2.137e+03;VQSLOD=6.7602;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:1,56:57:99:1949,150,0:122 1|1:0,54:54:99:1557,123,0:122 1|0:30,28:58:99:815,0,715:122
+7 158686803 rs55765467 T C 200.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-10.112;DB;DP=310;Dels=0.00;FS=2.596;HaplotypeScore=1.2829;MLEAC=3;MLEAF=0.500;MQ=47.32;MQ0=0;MQRankSum=-4.959;QD=0.65;ReadPosRankSum=-10.956;SB=-1.206e+03;VQSLOD=-17.6411;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:64,33:97:99:148,0,1949:32 0/1:73,45:118:58:58,0,2287:32 0/1:65,30:95:33:33,0,1910:32
+8 4048009 rs7007410 C T 2713.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.954;DB;DP=197;Dels=0.00;FS=2.483;HaplotypeScore=0.7125;MLEAC=3;MLEAF=0.500;MQ=57.03;MQ0=0;MQRankSum=0.882;QD=13.77;ReadPosRankSum=-0.496;SB=-1.406e+03;VQSLOD=6.5035;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:38,30:68:99:847,0,1168:127 0/1:30,30:60:99:916,0,921:127 0/1:32,36:69:99:989,0,882:127
+8 8974322 rs28440961 G A 1682.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.716;DB;DP=190;Dels=0.00;FS=0.579;HaplotypeScore=1.5434;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=-0.652;QD=12.65;ReadPosRankSum=0.746;SB=-7.040e+02;VQSLOD=9.3708;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:32,32:64:99:790,0,1002:125 1|0:33,36:69:99:931,0,866:125 0|0:57,0:57:99:0,126,1622:125
+8 14463368 rs1355302 T A 2523.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.793;DB;DP=236;Dels=0.00;FS=3.776;HaplotypeScore=0.3245;MLEAC=2;MLEAF=0.333;MQ=59.14;MQ0=0;MQRankSum=-0.381;QD=15.97;ReadPosRankSum=-0.045;SB=-1.421e+03;VQSLOD=7.6920;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,43:79:99:1332,0,1176:127 0|0:78,0:78:99:0,214,2749:127 1|0:35,44:79:99:1230,0,1162:127
+8 21736923 rs13256921 G A 217.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=1.884;DB;DP=93;Dels=0.00;FS=5.533;HaplotypeScore=6.4995;MLEAC=1;MLEAF=0.167;MQ=42.13;MQ0=3;MQRankSum=0.517;QD=6.79;ReadPosRankSum=1.706;SB=-1.980e+02;VQSLOD=-2.6430;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:34,0:34:66:0,66,691:41 0|1:15,17:32:99:252,0,211:41 0|0:27,0:27:42:0,42,425:41
+8 42044954 rs1058720 G A 2760.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.313;DB;DP=157;Dels=0.00;FS=0.000;HaplotypeScore=2.0979;MLEAC=4;MLEAF=0.667;MQ=58.82;MQ0=0;MQRankSum=-2.021;QD=17.58;ReadPosRankSum=-0.462;SB=-1.377e+03;VQSLOD=7.5777;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1820,147,0:127 1|0:24,27:51:99:555,0,233:127 1|0:26,24:50:99:427,0,458:127
+8 56608897 rs57623198 C T 1911.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.515;DB;DP=229;Dels=0.00;FS=0.000;HaplotypeScore=1.1327;MLEAC=2;MLEAF=0.333;MQ=59.80;MQ0=0;MQRankSum=0.336;QD=12.66;ReadPosRankSum=-2.326;SB=-9.730e+02;VQSLOD=8.5587;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,229,2989:127 0|1:44,30:74:99:897,0,1444:127 0|1:44,33:77:99:1053,0,1400:127
+8 66327344 rs13282622 G A 3918.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.514;DB;DP=192;Dels=0.00;FS=3.531;HaplotypeScore=1.6541;MLEAC=4;MLEAF=0.667;MQ=58.91;MQ0=0;MQRankSum=0.706;QD=20.41;ReadPosRankSum=-0.327;SB=-2.091e+03;VQSLOD=8.6266;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,37:71:99:1137,0,923:127 0|1:32,28:61:99:806,0,988:127 1|1:0,60:60:99:1975,153,0:127
+8 78181000 rs1563030 A G 5178.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.030;DB;DP=192;Dels=0.00;FS=4.675;HaplotypeScore=2.9473;MLEAC=5;MLEAF=0.833;MQ=59.62;MQ0=0;MQRankSum=-0.467;QD=26.97;ReadPosRankSum=-0.855;SB=-2.617e+03;VQSLOD=7.3445;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:59:99:1954,150,0:127 1|0:32,37:70:99:1198,0,888:127 1|1:0,63:63:99:2026,156,0:127
+8 90278211 rs11998540 A T 357.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.457;DB;DP=69;Dels=0.00;FS=1.289;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=1.415;QD=8.12;ReadPosRankSum=1.258;SB=-9.501e+01;VQSLOD=5.9584;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:12,7:19:99:185,0,416:60 0|0:25,0:25:60:0,60,805:60 1|0:16,9:25:99:211,0,500:60
+8 102355800 rs10103956 G T 1756.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.927;DB;DP=189;Dels=0.00;FS=5.921;HaplotypeScore=1.5445;MLEAC=2;MLEAF=0.333;MQ=59.66;MQ0=0;MQRankSum=-0.420;QD=13.41;ReadPosRankSum=-0.019;SB=-5.470e+02;VQSLOD=8.1563;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:32,38:70:99:1078,0,999:127 1|0:35,26:61:99:717,0,1103:127 0|0:57,0:58:99:0,156,2011:127
+8 113376378 rs41340951 T C 4379.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.019;DB;DP=211;Dels=0.00;FS=1.826;HaplotypeScore=0.2629;MLEAC=4;MLEAF=0.667;MQ=59.85;MQ0=0;MQRankSum=1.273;QD=20.75;ReadPosRankSum=0.144;SB=-1.893e+03;VQSLOD=8.8374;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,67:67:99:2221,187,0:127 1|0:32,37:69:99:1083,0,1066:127 1|0:35,40:75:99:1075,0,1108:127
+8 123499998 rs9693135 T C 926.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.820;DB;DP=207;Dels=0.00;FS=2.678;HaplotypeScore=1.2574;MLEAC=2;MLEAF=0.333;MQ=56.08;MQ0=0;MQRankSum=-2.729;QD=6.34;ReadPosRankSum=-0.269;SB=-8.230e+02;VQSLOD=4.3016;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2301:127 0|1:37,35:72:99:622,0,769:127 0|1:48,26:74:99:343,0,1280:127
+8 132727531 rs7000409 G A 2050.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.475;DB;DP=220;Dels=0.00;FS=5.203;HaplotypeScore=1.9424;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=1.230;QD=14.14;ReadPosRankSum=-0.871;SB=-1.080e+03;VQSLOD=7.7925;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:29,35:64:99:1215,0,785:127 0|0:75,0:75:99:0,190,2423:127 1|0:50,31:81:99:874,0,1611:127
+8 140651779 rs1469039 G A 1879.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.189;DB;DP=145;Dels=0.00;FS=0.000;HaplotypeScore=1.7695;MLEAC=3;MLEAF=0.500;MQ=58.39;MQ0=0;MQRankSum=0.745;QD=12.96;ReadPosRankSum=-0.159;SB=-9.360e+02;VQSLOD=9.0059;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:23,24:47:99:612,0,740:127 0/1:21,31:52:99:684,0,478:127 0/1:20,26:46:99:622,0,367:127
+9 2072356 rs4741641 T G 2054.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.235;DB;DP=243;Dels=0.00;FS=0.000;HaplotypeScore=2.2089;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=1.166;QD=13.00;ReadPosRankSum=-0.475;SB=-1.004e+03;VQSLOD=9.0206;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:49,45:94:99:1245,0,1615:127 0|0:85,0:85:99:0,217,2818:127 1|0:32,32:64:99:848,0,936:127
+9 16302655 rs9298755 T G 1394.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.356;DB;DP=200;Dels=0.00;FS=0.000;HaplotypeScore=3.1863;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=0.586;QD=10.03;ReadPosRankSum=-0.771;SB=-8.720e+02;VQSLOD=7.7724;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:60,1:61:99:0,165,2004:127 0|1:29,28:57:99:494,0,759:127 0|1:41,40:82:99:939,0,1069:127
+9 25201692 rs9408058 C T 8643.01 PASS AC=6;AF=1.00;AN=6;DB;DP=245;Dels=0.00;FS=0.000;HaplotypeScore=0.8982;MLEAC=6;MLEAF=1.00;MQ=59.13;MQ0=0;QD=35.28;SB=-4.398e+03;VQSLOD=12.1738;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3312,256,0:127 1|1:0,81:81:99:2771,223,0:127 1|1:0,75:75:99:2560,202,0:127
+9 44998848 . C G 254.43 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=2.203;DP=193;Dels=0.00;FS=10.822;HaplotypeScore=0.2447;MLEAC=5;MLEAF=0.833;MQ=6.48;MQ0=163;MQRankSum=-1.206;QD=1.32;ReadPosRankSum=0.790;SB=-1.372e+02;VQSLOD=-6.6319;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:39,27:66:23:132,0,23:8 1|1:36,16:52:15:118,15,0:8 0|1:53,22:75:1:45,6,0:8
+9 69810010 rs113063015 A C 280.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.223;DB;DP=716;DS;Dels=0.00;FS=8.996;HaplotypeScore=39.8350;MLEAC=3;MLEAF=0.500;MQ=37.32;MQ0=64;MQRankSum=-3.574;QD=0.39;ReadPosRankSum=-0.897;SB=-1.065e-02;VQSLOD=-68.1677;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:218,23:241:73:73,0,3591:70 0/1:188,39:227:99:172,0,4233:70 0/1:217,31:248:74:74,0,5042:70
+9 78741390 rs7049138 G A 1797.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.235;DB;DP=168;Dels=0.00;FS=4.003;HaplotypeScore=1.0858;MLEAC=3;MLEAF=0.500;MQ=55.32;MQ0=2;MQRankSum=-1.673;QD=16.34;ReadPosRankSum=-0.626;SB=-7.740e+02;VQSLOD=5.1915;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:828,0,918:80 1|1:0,40:40:81:1014,81,0:80 0|0:58,0:58:99:0,129,1403:80
+9 89010476 rs164937 T C 736.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-3.977;DB;DP=216;Dels=0.00;FS=1.481;HaplotypeScore=1.0649;MLEAC=1;MLEAF=0.167;MQ=39.79;MQ0=9;MQRankSum=-3.028;QD=9.56;ReadPosRankSum=0.542;SB=-4.240e+02;VQSLOD=2.0772;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,174,2097:127 0|1:40,37:77:99:771,0,876:127 0|0:73,0:73:99:0,183,2147:127
+9 98491693 rs12337935 C A 1474.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.098;DB;DP=97;Dels=0.00;FS=14.282;HaplotypeScore=1.7726;MLEAC=4;MLEAF=0.667;MQ=58.64;MQ0=0;MQRankSum=-0.224;QD=15.20;ReadPosRankSum=1.166;SB=-6.430e+02;VQSLOD=5.7986;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,12:26:99:348,0,352:63 1|1:0,28:29:63:781,63,0:63 0|1:17,25:42:99:387,0,364:63
+9 109619207 rs4743032 A T 3810.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.859;DB;DP=214;Dels=0.00;FS=10.284;HaplotypeScore=0.3222;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=0.557;QD=25.07;ReadPosRankSum=-0.836;SB=-2.019e+03;VQSLOD=8.1399;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:37,39:76:99:1185,0,1225:127 1|1:0,76:76:99:2625,202,0:127 0|0:62,0:62:99:0,156,2049:127
+9 130235282 . A G 166.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=-8.543;DP=232;Dels=0.00;FS=233.037;HaplotypeScore=2.9977;MLEAC=2;MLEAF=0.333;MQ=59.04;MQ0=0;MQRankSum=-2.038;QD=1.15;ReadPosRankSum=-7.649;SB=-3.100e-03;VQSLOD=-139.8496;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:74,14:88:99:0,108,2160:59 0|1:42,36:79:60:60,0,966:59 0|1:47,18:65:99:145,0,922:59
+9 138617823 rs55724592 C T 53.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.380;DB;DP=72;Dels=0.00;FS=8.078;HaplotypeScore=1.0225;MLEAC=1;MLEAF=0.167;MQ=58.90;MQ0=0;MQRankSum=0.851;QD=2.66;ReadPosRankSum=-0.344;SB=-9.096e+01;VQSLOD=4.2652;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:20,0:20:48:0,48,580:44 0|0:32,0:32:48:0,48,577:44 0|1:10,10:20:88:88,0,199:44
+10 4588547 rs313427 C T 1985.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.695;DB;DP=204;Dels=0.00;FS=1.813;HaplotypeScore=0.6137;MLEAC=2;MLEAF=0.333;MQ=59.73;MQ0=0;MQRankSum=0.241;QD=14.18;ReadPosRankSum=0.717;SB=-1.082e+03;VQSLOD=9.7784;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:39,35:74:99:1029,0,1182:127 1|0:32,34:66:99:995,0,1024:127 0|0:64,0:64:99:0,175,2242:127
+10 11560326 rs4424580 C T 1027.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.178;DB;DP=207;Dels=0.00;FS=0.573;HaplotypeScore=2.1981;MLEAC=2;MLEAF=0.333;MQ=59.24;MQ0=0;MQRankSum=-0.988;QD=7.78;ReadPosRankSum=-0.492;SB=-7.450e+02;VQSLOD=8.4594;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:41,32:73:99:609,0,930:96 1|0:29,30:59:99:457,0,570:96 0|0:74,1:75:96:0,96,1185:96
+10 19567676 rs61458006 G T 599.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.610;DB;DP=195;Dels=0.00;FS=0.844;HaplotypeScore=0.8795;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.191;QD=11.31;ReadPosRankSum=-1.635;SB=-2.780e+02;VQSLOD=9.3606;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:75,0:75:99:0,208,2645:127 0|1:30,23:53:99:634,0,915:127 0|0:67,0:67:99:0,199,2540:127
+10 29082980 . G C 42.53 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.216;DP=107;Dels=0.00;FS=60.979;HaplotypeScore=1.0911;MLEAC=3;MLEAF=0.500;MQ=55.72;MQ0=0;MQRankSum=-0.633;QD=0.40;ReadPosRankSum=-4.307;SB=-2.798e-01;VQSLOD=-11.1718;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,12:43:12:12,0,757:12 0/1:19,11:30:35:35,0,429:12 0/1:25,9:34:34:34,0,388:12
+10 38560911 rs80189231 T A 1072.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.103;DB;DP=356;Dels=0.00;FS=12.038;HaplotypeScore=5.4015;MLEAC=3;MLEAF=0.500;MQ=49.74;MQ0=6;MQRankSum=-2.686;QD=3.01;ReadPosRankSum=0.797;SB=-1.690e+02;VQSLOD=-3.5129;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:109,26:135:99:389,0,2879:127 0/1:84,27:111:99:539,0,2214:127 0/1:93,17:110:99:183,0,2277:127
+10 56495833 rs6481118 G A 7633.01 PASS AC=6;AF=1.00;AN=6;DB;DP=212;Dels=0.00;FS=0.000;HaplotypeScore=0.3328;MLEAC=6;MLEAF=1.00;MQ=54.64;MQ0=0;QD=36.00;SB=-2.091e+03;VQSLOD=8.6651;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,62:62:99:2383,184,0:127 1|1:1,67:68:99:2375,184,0:127 1|1:0,82:82:99:2875,223,0:127
+10 65355538 rs10733794 A G 2464.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.392;DB;DP=193;Dels=0.00;FS=7.473;HaplotypeScore=2.5434;MLEAC=3;MLEAF=0.500;MQ=58.06;MQ0=2;MQRankSum=0.999;QD=18.96;ReadPosRankSum=-1.229;SB=-1.065e+03;VQSLOD=6.3934;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:830,0,1039:127 1|1:1,64:65:99:1679,153,0:127 0|0:63,0:63:99:0,159,2042:127
+10 74020452 rs72806301 C A 1116.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.155;DB;DP=135;Dels=0.00;FS=3.279;HaplotypeScore=0.8720;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=-0.818;QD=11.88;ReadPosRankSum=1.484;SB=-6.800e+02;VQSLOD=7.2668;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:20,27:47:99:658,0,446:104 0|0:41,0:41:99:0,105,1324:104 1|0:25,22:47:99:497,0,482:104
+10 85258657 rs4454662 C A 7638.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.716;DB;DP=223;Dels=0.00;FS=4.523;HaplotypeScore=1.1326;MLEAC=6;MLEAF=1.00;MQ=58.32;MQ0=0;MQRankSum=-1.230;QD=34.25;ReadPosRankSum=1.152;SB=-2.841e+03;VQSLOD=7.6461;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,64:65:99:2156,169,0:127 1|1:0,89:89:99:2982,238,0:127 1|1:0,69:69:99:2500,196,0:127
+10 95435201 rs2422323 C T 4017.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.438;DB;DP=203;Dels=0.00;FS=13.125;HaplotypeScore=3.2358;MLEAC=4;MLEAF=0.667;MQ=55.24;MQ0=0;MQRankSum=1.174;QD=19.79;ReadPosRankSum=-0.655;SB=-2.177e+03;VQSLOD=4.5957;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:38,45:83:99:1327,0,931:127 1|1:1,63:64:99:1966,156,0:127 0|1:30,25:56:99:724,0,807:127
+10 106444111 rs72813617 A G 632.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.838;DB;DP=197;Dels=0.00;FS=4.121;HaplotypeScore=1.8154;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-1.142;QD=12.40;ReadPosRankSum=-1.947;SB=-2.390e+02;VQSLOD=7.6230;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:84,0:84:99:0,241,3129:127 0|0:62,0:62:99:0,159,2008:127 0|1:27,24:51:99:667,0,584:127
+10 116646860 rs4752347 T A 4159.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.459;DB;DP=197;Dels=0.00;FS=3.519;HaplotypeScore=0.6313;MLEAC=4;MLEAF=0.667;MQ=59.27;MQ0=0;MQRankSum=1.049;QD=21.11;ReadPosRankSum=-1.271;SB=-2.347e+03;VQSLOD=8.3322;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2191,169,0:127 1|0:31,35:66:99:1031,0,863:127 1|0:31,37:68:99:937,0,774:127
+10 125452232 rs7900707 A G 3211.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-6.610;DB;DP=189;Dels=0.00;FS=17.742;HaplotypeScore=0.0000;MLEAC=4;MLEAF=0.667;MQ=59.66;MQ0=0;MQRankSum=0.614;QD=16.99;ReadPosRankSum=-0.321;SB=-1.553e+03;VQSLOD=6.9018;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:61:99:1944,168,0:127 1|0:44,26:70:99:627,0,1357:127 1|0:29,29:58:99:682,0,862:127
+10 132949760 rs10829924 A C 684.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.328;DB;DP=215;Dels=0.00;FS=15.464;HaplotypeScore=1.3183;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-1.053;QD=10.53;ReadPosRankSum=-2.893;SB=-2.920e+02;VQSLOD=5.8891;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:80,0:81:99:0,229,2999:127 0|0:69,0:69:99:0,175,2268:127 0|1:35,30:65:99:719,0,1046:127
+11 10741836 rs72853043 G A 175.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=0.127;DB;DP=174;Dels=0.00;FS=7.087;HaplotypeScore=7.4618;MLEAC=1;MLEAF=0.167;MQ=55.72;MQ0=1;MQRankSum=-1.291;QD=3.44;ReadPosRankSum=-1.185;SB=-2.220e+02;VQSLOD=1.6095;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,105,1278:65 0|0:42,0:45:66:0,66,802:65 0|1:21,29:51:99:210,0,469:65
+11 19325064 rs793250 G A 5752.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.080;DB;DP=203;Dels=0.00;FS=2.530;HaplotypeScore=0.8165;MLEAC=5;MLEAF=0.833;MQ=59.35;MQ0=0;MQRankSum=-0.061;QD=28.34;ReadPosRankSum=0.095;SB=-3.093e+03;VQSLOD=9.4617;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2527,190,0:127 1|1:0,78:78:99:2626,205,0:127 1|0:32,22:54:99:599,0,768:127
+11 26026566 rs7942277 T C 5414.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=58.89;MQ0=0;QD=30.76;SB=-2.812e+03;VQSLOD=11.0501;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1707,132,0:122 1|1:0,53:53:99:1581,123,0:122 1|1:0,70:70:99:2126,163,0:122
+11 35980461 rs263087 A T 3494.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.701;DB;DP=186;Dels=0.00;FS=0.000;HaplotypeScore=2.9570;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=0.836;QD=18.79;ReadPosRankSum=0.007;SB=-1.535e+03;VQSLOD=7.6407;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,35:71:99:1001,0,1165:127 0|1:30,26:56:99:710,0,796:127 1|1:0,59:59:99:1783,144,0:127
+11 44985620 rs7106313 C T 338.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.185;DB;DP=162;Dels=0.00;FS=4.840;HaplotypeScore=2.0046;MLEAC=1;MLEAF=0.167;MQ=56.94;MQ0=0;MQRankSum=2.019;QD=8.67;ReadPosRankSum=0.983;SB=-2.190e+02;VQSLOD=6.6624;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:79,0:80:99:0,174,2084:72 0|0:43,0:43:72:0,72,877:72 0|1:20,18:39:99:373,0,365:72
+11 55040918 rs187118824 A T 1019.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.079;DB;DP=65;Dels=0.02;FS=12.723;HaplotypeScore=0.9771;MLEAC=2;MLEAF=0.333;MQ=56.64;MQ0=1;MQRankSum=0.323;QD=25.48;ReadPosRankSum=0.873;SB=-2.060e+01;VQSLOD=4.4200;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:2,9:11:48:325,0,48:50 0|0:24,1:25:63:0,63,833:50 1|0:6,22:28:51:733,0,51:50
+11 65339346 rs1194104 C T 1804.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.465;DB;DP=189;Dels=0.00;FS=8.432;HaplotypeScore=2.2718;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=-0.120;QD=13.67;ReadPosRankSum=-0.306;SB=-1.061e+03;VQSLOD=7.9509;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,157,2050:127 0|1:30,35:65:99:781,0,822:127 0|1:23,44:67:99:1062,0,690:127
+11 75978490 rs655877 G C 2986.25 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.846;DB;DP=127;Dels=0.00;FS=5.433;HaplotypeScore=0.2629;MLEAC=5;MLEAF=0.833;MQ=59.42;MQ0=0;MQRankSum=0.026;QD=23.51;ReadPosRankSum=0.168;SB=-1.613e+03;VQSLOD=7.0404;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,50:50:99:1405,111,0:101 1|1:0,45:46:99:1269,102,0:101 1|0:17,14:31:99:354,0,469:101
+11 86061661 rs11825046 T C 6014.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.250;DB;DP=282;Dels=0.00;FS=0.960;HaplotypeScore=1.6440;MLEAC=4;MLEAF=0.667;MQ=59.57;MQ0=0;MQRankSum=1.057;QD=21.33;ReadPosRankSum=-1.763;SB=-3.081e+03;VQSLOD=7.3485;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:54,49:103:99:1498,0,1848:127 1|1:0,83:83:99:2924,223,0:127 0|1:44,52:96:99:1592,0,1380:127
+11 103989190 rs1545865 T C 4915.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.030;DB;DP=219;Dels=0.00;FS=1.231;HaplotypeScore=1.2090;MLEAC=4;MLEAF=0.667;MQ=59.37;MQ0=0;MQRankSum=1.103;QD=22.44;ReadPosRankSum=0.773;SB=-2.213e+03;VQSLOD=8.9081;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:23,40:63:99:1203,0,669:127 0|1:36,52:88:99:1433,0,1136:127 1|1:0,68:68:99:2279,178,0:127
+11 113825129 rs1150234 G A 2441.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.977;DB;DP=210;Dels=0.00;FS=0.000;HaplotypeScore=2.0700;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=0.877;QD=11.63;ReadPosRankSum=0.262;SB=-1.513e+03;VQSLOD=9.0378;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,33:63:99:881,0,774:127 0/1:46,33:80:99:726,0,1020:127 0/1:32,35:67:99:873,0,759:127
+11 123470819 rs1148095 T C 6964.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.850;DB;DP=242;Dels=0.00;FS=1.477;HaplotypeScore=1.3868;MLEAC=5;MLEAF=0.833;MQ=59.25;MQ0=0;MQRankSum=-1.734;QD=28.78;ReadPosRankSum=-0.749;SB=-3.242e+03;VQSLOD=8.7854;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3408,265,0:127 1|0:35,51:86:99:1520,0,1059:127 1|1:0,64:64:99:2036,157,0:127
+11 132780959 rs61906922 C T 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.221;DB;DP=263;Dels=0.00;FS=0.601;HaplotypeScore=1.8444;MLEAC=1;MLEAF=0.167;MQ=59.58;MQ0=0;MQRankSum=0.997;QD=15.25;ReadPosRankSum=-0.746;SB=-6.890e+02;VQSLOD=8.8133;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:87,0:87:99:0,250,2877:127 0|0:87,0:88:99:0,253,3009:127 0|1:43,45:88:99:1377,0,1138:127
+12 5922552 rs17786352 C G 1874.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.386;DB;DP=231;Dels=0.00;FS=0.000;HaplotypeScore=0.3053;MLEAC=2;MLEAF=0.333;MQ=54.49;MQ0=0;MQRankSum=2.656;QD=13.11;ReadPosRankSum=1.042;SB=-9.400e+02;VQSLOD=4.7495;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,35:79:99:897,0,1383:127 1|0:28,36:64:99:1016,0,734:127 0|0:88,0:88:99:0,238,3004:127
+12 12560642 rs10772559 G T 501.28 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=0.747;DB;DP=229;Dels=0.04;FS=17.409;HaplotypeScore=19.6989;MLEAC=4;MLEAF=0.667;MQ=49.37;MQ0=0;MQRankSum=-3.656;QD=2.19;ReadPosRankSum=-5.397;SB=-2.196e+03;VQSLOD=-10.1992;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,66:66:24:273,24,0:24 1|0:29,45:74:99:148,0,702:24 1|0:33,46:80:99:122,0,781:24
+12 21328424 rs4149040 G C 2565.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.888;DB;DP=252;Dels=0.00;FS=9.753;HaplotypeScore=0.6082;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=1.166;QD=15.18;ReadPosRankSum=0.966;SB=-1.181e+03;VQSLOD=7.5539;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,49:89:99:1534,0,1308:127 0|0:83,0:83:99:0,241,3117:127 1|0:45,35:80:99:1070,0,1402:127
+12 29935607 rs7305813 A C 810.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.307;DB;DP=203;Dels=0.00;FS=14.326;HaplotypeScore=1.9820;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-0.164;QD=12.86;ReadPosRankSum=-0.733;SB=-2.950e+02;VQSLOD=7.9009;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:71,0:71:99:0,193,2479:127 0|0:69,0:69:99:0,196,2464:127 0|1:28,35:63:99:845,0,847:127
+12 39118960 rs79977305 G A 1330.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.307;DB;DP=263;Dels=0.00;FS=0.597;HaplotypeScore=1.4583;MLEAC=1;MLEAF=0.167;MQ=58.83;MQ0=0;MQRankSum=1.925;QD=13.57;ReadPosRankSum=-0.548;SB=-7.360e+02;VQSLOD=7.3733;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,2869:127 0|0:84,0:84:99:0,229,2712:127 0|1:51,47:98:99:1365,0,1343:127
+12 48120010 rs3829317 A C 4015.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.659;DB;DP=162;Dels=0.00;FS=1.828;HaplotypeScore=2.1844;MLEAC=5;MLEAF=0.833;MQ=59.48;MQ0=0;MQRankSum=0.154;QD=24.78;ReadPosRankSum=0.482;SB=-2.240e+03;VQSLOD=8.1337;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2024,163,0:110 1|0:24,27:51:99:550,0,540:110 1|1:0,48:48:99:1441,111,0:110
+12 58867437 rs140632614 G T 829.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=1.409;DB;DP=144;Dels=0.00;FS=68.612;HaplotypeScore=0.8667;MLEAC=4;MLEAF=0.667;MQ=35.15;MQ0=16;MQRankSum=-7.440;QD=5.76;ReadPosRankSum=-0.245;SB=-1.011e+00;VQSLOD=-16.4891;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,24:58:99:291,0,1100:44 0|1:42,8:50:61:61,0,1319:44 1|1:1,35:36:45:519,45,0:44
+12 79238948 rs10778234 C T 3719.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.187;DB;DP=241;Dels=0.00;FS=7.073;HaplotypeScore=0.2447;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.381;QD=15.43;ReadPosRankSum=0.579;SB=-1.864e+03;VQSLOD=7.8136;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:42,35:77:99:1049,0,1213:127 0/1:37,32:69:99:988,0,957:127 0/1:42,53:95:99:1682,0,1062:127
+12 90856710 rs825945 T C 1096.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.342;DB;DP=193;Dels=0.00;FS=2.164;HaplotypeScore=0.0000;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=2.071;QD=9.70;ReadPosRankSum=-1.697;SB=-5.710e+02;VQSLOD=7.3118;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:80,0:80:99:0,232,3042:127 0|1:30,21:51:99:511,0,921:127 0|1:36,26:62:99:624,0,1085:127
+12 101460237 rs7965836 C T 3485.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.070;DB;DP=247;Dels=0.00;FS=2.895;HaplotypeScore=0.6556;MLEAC=3;MLEAF=0.500;MQ=59.83;MQ0=0;MQRankSum=-0.655;QD=14.11;ReadPosRankSum=-0.983;SB=-1.581e+03;VQSLOD=8.4872;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,43:83:99:1287,0,1179:127 0/1:44,36:80:99:1068,0,1363:127 0/1:43,41:84:99:1130,0,1321:127
+12 112830546 rs150699511 C A 487.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.014;DB;DP=179;Dels=0.00;FS=0.860;HaplotypeScore=2.3392;MLEAC=1;MLEAF=0.167;MQ=59.16;MQ0=0;MQRankSum=1.141;QD=8.86;ReadPosRankSum=0.950;SB=-2.870e+02;VQSLOD=8.1138;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:62:99:0,166,2141:127 0|1:34,21:55:99:522,0,751:127 0|0:62,0:62:99:0,141,1808:127
+12 122942070 rs10744217 A G 1812.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.353;DB;DP=179;Dels=0.00;FS=0.663;HaplotypeScore=1.4184;MLEAC=3;MLEAF=0.500;MQ=58.69;MQ0=0;MQRankSum=0.992;QD=15.10;ReadPosRankSum=1.081;SB=-5.860e+02;VQSLOD=8.4750;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,36:71:99:762,0,1100:92 1|1:0,48:49:93:1095,93,0:92 0|0:59,0:59:99:0,120,1560:92
+12 130522866 rs1613499 C T 3975.01 PASS AC=6;AF=1.00;AN=6;DB;DP=130;Dels=0.00;FS=0.000;HaplotypeScore=0.6332;MLEAC=6;MLEAF=1.00;MQ=59.11;MQ0=0;QD=30.58;SB=-1.386e+03;VQSLOD=10.2250;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,57:57:99:1939,144,0:73 1|1:0,34:34:75:990,75,0:73 1|1:0,39:39:78:1046,78,0:73
+13 21520045 rs9509464 A C 5103.01 PASS AC=6;AF=1.00;AN=6;DB;DP=195;Dels=0.00;FS=0.000;HaplotypeScore=1.6144;MLEAC=6;MLEAF=1.00;MQ=47.37;MQ0=0;QD=26.17;SB=-2.582e+03;VQSLOD=5.1918;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2106,186,0:98 1|1:0,78:78:99:1856,162,0:98 1|1:0,46:46:99:1141,99,0:98
+13 28463938 rs954750 C T 2740.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.206;DB;DP=242;Dels=0.00;FS=0.000;HaplotypeScore=4.0078;MLEAC=2;MLEAF=0.333;MQ=59.46;MQ0=0;MQRankSum=0.880;QD=16.61;ReadPosRankSum=-0.617;SB=-1.312e+03;VQSLOD=6.7692;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:40,43:83:99:1362,0,1242:127 1|0:35,47:82:99:1417,0,1010:127 0|0:76,0:77:99:0,205,2635:127
+13 37484693 rs1571317 T C 971.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.315;DB;DP=229;Dels=0.00;FS=3.052;HaplotypeScore=0.6603;MLEAC=1;MLEAF=0.167;MQ=58.51;MQ0=0;MQRankSum=1.885;QD=12.78;ReadPosRankSum=-0.343;SB=-5.750e+02;VQSLOD=7.3064;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:94,0:94:99:0,253,3258:127 0|1:35,41:76:99:1006,0,924:127 0|0:59,0:59:99:0,147,1872:127
+13 46407442 rs11147990 G A 2668.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.227;DB;DP=199;Dels=0.00;FS=0.530;HaplotypeScore=1.8025;MLEAC=3;MLEAF=0.500;MQ=58.99;MQ0=0;MQRankSum=0.023;QD=20.21;ReadPosRankSum=-0.452;SB=-1.651e+03;VQSLOD=9.2006;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:36,33:69:99:994,0,1056:127 0|0:67,0:67:99:0,141,1821:127 1|1:0,63:63:99:1719,135,0:127
+13 56456878 rs2997102 C A 9454.01 PASS AC=6;AF=1.00;AN=6;DB;DP=257;Dels=0.00;FS=0.000;HaplotypeScore=0.9537;MLEAC=6;MLEAF=1.00;MQ=59.57;MQ0=0;QD=36.79;SB=-4.826e+03;VQSLOD=11.5149;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,99:99:99:3692,280,0:127 1|1:0,88:88:99:3239,253,0:127 1|1:0,70:70:99:2523,193,0:127
+13 65275154 rs359338 G A 1963.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.733;DB;DP=173;Dels=0.00;FS=3.628;HaplotypeScore=0.9480;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=-0.676;QD=14.54;ReadPosRankSum=0.399;SB=-1.054e+03;VQSLOD=8.4489;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:31,28:59:99:883,0,990:108 1|0:39,37:76:99:1119,0,1112:108 0|0:38,0:38:99:0,108,1390:108
+13 74611546 rs73214804 C T 639.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-0.487;DB;DP=164;Dels=0.00;FS=0.000;HaplotypeScore=1.4071;MLEAC=1;MLEAF=0.167;MQ=58.95;MQ0=0;MQRankSum=0.902;QD=11.21;ReadPosRankSum=-0.541;SB=-3.000e+02;VQSLOD=8.8824;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:53,0:53:99:0,135,1773:110 0|0:53,1:54:99:0,111,1440:110 0|1:24,33:57:99:674,0,388:110
+13 83670546 . G A 169.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.301;DP=178;Dels=0.00;FS=0.000;HaplotypeScore=36.5059;MLEAC=2;MLEAF=0.333;MQ=42.20;MQ0=11;MQRankSum=-6.654;QD=1.38;ReadPosRankSum=-0.761;SB=-1.340e+02;VQSLOD=-20.4053;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:37,16:53:99:139,0,523:90 0|0:51,4:55:91:0,91,1393:90 1|0:58,12:70:69:69,0,1214:90
+13 92742124 rs2148446 G A 1884.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.340;DB;DP=213;Dels=0.00;FS=0.000;HaplotypeScore=0.3156;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=0;MQRankSum=-2.935;QD=12.99;ReadPosRankSum=-0.579;SB=-9.540e+02;VQSLOD=7.2833;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|1:38,38:76:99:1130,0,1190:127 0|0:68,0:68:99:0,190,2454:127 1|0:38,31:69:99:793,0,1094:127
+13 101976707 rs527328 A T 9240.01 PASS AC=6;AF=1.00;AN=6;DB;DP=259;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=53.28;MQ0=0;QD=35.68;SB=-4.696e+03;VQSLOD=7.5241;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3410,262,0:127 1|1:0,88:88:99:3195,247,0:127 1|1:1,78:79:99:2635,202,0:127
+13 109990322 rs7328109 T C 7198.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.487;DB;DP=245;Dels=0.00;FS=5.887;HaplotypeScore=1.8793;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=-0.236;QD=29.38;ReadPosRankSum=0.136;SB=-3.593e+03;VQSLOD=8.8925;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2825,220,0:127 1|0:33,54:87:99:1591,0,933:127 1|1:0,79:79:99:2782,214,0:127
+14 20313371 rs10137604 A C 2154.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.894;DB;DP=255;Dels=0.00;FS=0.000;HaplotypeScore=2.0503;MLEAC=2;MLEAF=0.333;MQ=56.32;MQ0=1;MQRankSum=1.608;QD=13.72;ReadPosRankSum=0.126;SB=-1.124e+03;VQSLOD=5.6223;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,48:88:99:1426,0,1229:127 0|0:98,0:98:99:0,268,3527:127 1|0:43,26:69:99:767,0,1284:127
+14 38160457 rs2181345 A C 4683.01 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=2.5449;MLEAC=6;MLEAF=1.00;MQ=59.00;MQ0=0;QD=27.71;SB=-2.390e+03;VQSLOD=9.9888;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1818,141,0:107 1|1:0,58:58:99:1523,123,0:107 1|1:0,53:55:99:1342,108,0:107
+14 47568119 rs1952206 T C 3399.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-9.721;DB;DP=230;Dels=0.00;FS=0.483;HaplotypeScore=0.6577;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=-0.479;QD=14.78;ReadPosRankSum=1.261;SB=-1.667e+03;VQSLOD=9.1589;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:41,43:84:99:1239,0,1315:127 0/1:28,43:71:99:1178,0,816:127 0/1:40,35:75:99:982,0,1314:127
+14 56951735 rs1189276 G A 6939.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=3.878;DB;DP=235;Dels=0.00;FS=9.373;HaplotypeScore=0.9063;MLEAC=5;MLEAF=0.833;MQ=59.52;MQ0=0;MQRankSum=-0.550;QD=29.53;ReadPosRankSum=1.104;SB=-3.438e+03;VQSLOD=8.7592;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,92:93:99:3558,274,0:127 1|1:0,60:60:99:2120,165,0:127 1|0:40,42:82:99:1261,0,1194:127
+14 68051087 rs11628035 G A 4028.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.928;DB;DP=236;Dels=0.00;FS=8.184;HaplotypeScore=1.3296;MLEAC=3;MLEAF=0.500;MQ=58.83;MQ0=0;MQRankSum=1.834;QD=25.49;ReadPosRankSum=2.590;SB=-1.989e+03;VQSLOD=6.7911;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:1265,0,1112:127 1|1:0,81:81:99:2763,214,0:127 0|0:78,0:78:99:0,208,2673:127
+14 87263523 rs2542229 A C 8104.01 PASS AC=6;AF=1.00;AN=6;DB;DP=239;Dels=0.00;FS=0.000;HaplotypeScore=0.6305;MLEAC=6;MLEAF=1.00;MQ=59.17;MQ0=0;QD=33.91;SB=-4.393e+03;VQSLOD=11.3001;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,77:77:99:2810,214,0:127 1|1:0,85:85:99:2877,223,0:127 1|1:0,77:77:99:2417,187,0:127
+14 96490389 rs72702859 C G 3394.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.529;DB;DP=264;Dels=0.00;FS=2.746;HaplotypeScore=3.1300;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=-1.258;QD=18.25;ReadPosRankSum=-0.961;SB=-1.966e+03;VQSLOD=6.3356;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:34,52:86:99:1358,0,886:127 1|1:0,100:100:99:2036,180,0:127 0|0:78,0:78:99:0,184,2393:127
+14 106085773 rs2955055 C T 2115.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.746;DB;DP=172;Dels=0.00;FS=18.420;HaplotypeScore=2.9489;MLEAC=3;MLEAF=0.500;MQ=35.68;MQ0=18;MQRankSum=3.251;QD=12.30;ReadPosRankSum=0.100;SB=-5.530e+02;VQSLOD=1.2866;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,33:65:99:600,0,554:80 0/1:30,42:72:99:1001,0,400:80 0/1:12,23:35:80:553,0,80:80
+15 23743658 rs142070302 T A 1007.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.164;DB;DP=408;Dels=0.00;FS=166.853;HaplotypeScore=53.5447;MLEAC=3;MLEAF=0.500;MQ=38.96;MQ0=14;MQRankSum=-6.283;QD=2.47;ReadPosRankSum=2.486;SB=-1.079e-02;VQSLOD=-304.7942;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:104,39:143:99:365,0,2802:45 0/1:99,40:139:99:636,0,2335:45 0/1:97,28:126:45:45,0,2324:45
+15 42065422 rs2925337 A C 5231.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=59.68;MQ0=0;QD=29.72;SB=-3.112e+03;VQSLOD=11.0322;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,54:54:99:1770,138,0:127 1|1:0,68:68:99:1750,138,0:127 1|1:0,54:54:99:1711,132,0:127
+15 53677501 . T G 770.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-8.969;DP=210;Dels=0.00;FS=347.467;HaplotypeScore=2.0911;MLEAC=3;MLEAF=0.500;MQ=58.31;MQ0=0;MQRankSum=0.438;QD=3.67;ReadPosRankSum=-6.409;SB=-5.499e-03;VQSLOD=-307.0964;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:59,20:79:94:94,0,1389:94 0/1:41,31:72:99:438,0,721:94 0/1:37,21:59:99:277,0,521:94
+15 62088952 rs35033959 A T 3546.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.220;DB;DP=241;Dels=0.00;FS=14.286;HaplotypeScore=0.2774;MLEAC=3;MLEAF=0.500;MQ=59.77;MQ0=0;MQRankSum=-1.969;QD=14.71;ReadPosRankSum=0.341;SB=-1.970e+03;VQSLOD=6.3785;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:45,44:89:99:1265,0,1533:127 0/1:34,38:72:99:1133,0,1137:127 0/1:41,39:80:99:1148,0,1303:127
+15 71657506 . A G 140.40 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.611;DP=133;Dels=0.00;FS=35.593;HaplotypeScore=4.0622;MLEAC=2;MLEAF=0.333;MQ=51.29;MQ0=1;MQRankSum=-3.344;QD=1.53;ReadPosRankSum=-3.999;SB=-5.015e+01;VQSLOD=-4.8050;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:46,11:57:93:93,0,851:15 1|0:23,12:35:86:86,0,299:15 0|0:33,8:41:15:0,15,503:15
+15 92857342 rs12101550 A G 2734.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.995;DB;DP=226;Dels=0.00;FS=3.761;HaplotypeScore=1.5682;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=0.761;QD=12.10;ReadPosRankSum=-0.587;SB=-1.469e+03;VQSLOD=9.1510;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:45,37:82:99:853,0,1356:127 0/1:29,40:69:99:966,0,852:127 0/1:38,37:75:99:954,0,1085:127
+15 100799787 rs4965610 C T 2133.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.373;DB;DP=230;Dels=0.00;FS=1.037;HaplotypeScore=0.5427;MLEAC=3;MLEAF=0.500;MQ=58.84;MQ0=0;MQRankSum=0.169;QD=9.28;ReadPosRankSum=-0.098;SB=-1.328e+03;VQSLOD=7.8802;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:40,36:76:99:948,0,701:127 0/1:45,38:83:99:761,0,635:127 0/1:35,36:71:99:463,0,706:127
+16 5754758 rs11644707 C T 1012.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.777;DB;DP=161;Dels=0.00;FS=0.000;HaplotypeScore=2.4572;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=0.699;QD=9.64;ReadPosRankSum=2.624;SB=-5.580e+02;VQSLOD=7.0970;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:31,26:57:99:627,0,943:125 0|0:56,0:56:99:0,126,1597:125 1|0:32,16:48:99:424,0,785:125
+16 11397080 rs1019552 T C 2295.44 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.01;FS=0.000;HaplotypeScore=8.2178;MLEAC=6;MLEAF=1.00;MQ=59.32;MQ0=0;QD=13.58;SB=-2.379e+03;VQSLOD=4.3801;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:96:1220,96,0:9 1|1:0,48:48:9:78,9,0:9 1|1:0,48:48:81:1035,81,0:9
+16 30509723 rs7193693 A G 497.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.054;DB;DP=167;Dels=0.00;FS=0.000;HaplotypeScore=1.1605;MLEAC=1;MLEAF=0.167;MQ=57.89;MQ0=0;MQRankSum=-0.545;QD=9.38;ReadPosRankSum=0.541;SB=-2.410e+02;VQSLOD=8.4265;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,153,2009:101 0|0:57,0:57:99:0,102,1304:101 0|1:26,27:53:99:532,0,526:101
+16 34610294 rs72812776 C T 603.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.361;DB;DP=270;Dels=0.00;FS=6.065;HaplotypeScore=3.1650;MLEAC=1;MLEAF=0.167;MQ=59.66;MQ0=0;MQRankSum=1.603;QD=7.83;ReadPosRankSum=0.296;SB=-2.820e+02;VQSLOD=3.3685;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:123,0:123:99:0,343,4443:127 0|0:69,1:70:99:0,184,2397:127 0|1:48,29:77:99:638,0,1483:127
+16 55910673 rs17265788 G C 2345.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.657;DB;DP=208;Dels=0.00;FS=3.162;HaplotypeScore=1.9213;MLEAC=3;MLEAF=0.500;MQ=59.67;MQ0=0;MQRankSum=-0.333;QD=16.63;ReadPosRankSum=-0.425;SB=-1.468e+03;VQSLOD=8.3665;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:33,33:66:99:769,0,761:122 0|0:67,0:67:99:0,123,1506:122 1|1:0,75:75:99:1621,132,0:122
+16 65776985 rs72784548 T C 3527.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.439;DB;DP=195;Dels=0.00;FS=1.228;HaplotypeScore=0.8795;MLEAC=4;MLEAF=0.667;MQ=58.78;MQ0=0;MQRankSum=1.630;QD=18.09;ReadPosRankSum=1.358;SB=-1.904e+03;VQSLOD=7.6763;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2351,181,0:127 1|0:33,28:61:99:586,0,710:127 1|0:31,35:66:99:590,0,468:127
+16 83153777 rs4395063 T C 3143.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.771;DB;DP=205;Dels=0.00;FS=1.805;HaplotypeScore=1.0370;MLEAC=4;MLEAF=0.667;MQ=59.55;MQ0=0;MQRankSum=-1.380;QD=15.33;ReadPosRankSum=0.424;SB=-2.104e+03;VQSLOD=8.8241;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:31,31:62:99:867,0,865:127 0|1:45,28:73:99:412,0,801:127 1|1:0,70:70:99:1906,150,0:127
+16 88914235 rs12932521 C T 329.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.978;DB;DP=114;Dels=0.00;FS=1.931;HaplotypeScore=0.9402;MLEAC=1;MLEAF=0.167;MQ=58.60;MQ0=0;MQRankSum=0.854;QD=7.84;ReadPosRankSum=-0.339;SB=-2.970e+02;VQSLOD=8.1036;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,102,1192:39 0|0:29,0:29:39:0,39,468:39 0|1:15,26:42:99:364,0,105:39
+17 5764764 rs2309483 C G 4071.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.237;DB;DP=154;Dels=0.00;FS=0.000;HaplotypeScore=4.4102;MLEAC=5;MLEAF=0.833;MQ=58.88;MQ0=0;MQRankSum=0.456;QD=26.44;ReadPosRankSum=0.385;SB=-1.791e+03;VQSLOD=6.9458;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:62:99:2049,165,0:107 1|0:23,26:49:99:648,0,482:107 1|1:0,43:43:99:1374,108,0:107
+17 14096866 . C T 489.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=4.537;DP=181;Dels=0.00;FS=33.896;HaplotypeScore=1.0782;MLEAC=3;MLEAF=0.500;MQ=24.52;MQ0=71;MQRankSum=0.353;QD=2.70;ReadPosRankSum=0.385;SB=-1.450e+02;VQSLOD=-6.2174;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:48,17:66:99:228,0,822:63 0/1:42,16:58:99:237,0,389:63 0/1:44,13:57:63:63,0,523:63
+17 21547285 rs62049731 A C 1322.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-0.987;DB;DP=569;Dels=0.00;FS=2.322;HaplotypeScore=42.4511;MLEAC=3;MLEAF=0.500;MQ=44.59;MQ0=24;MQRankSum=-6.240;QD=2.32;ReadPosRankSum=-5.171;SB=-6.369e+02;VQSLOD=-39.5319;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:146,28:174:99:217,0,4187:127 0/1:162,56:218:99:804,0,4298:127 0/1:139,38:177:99:340,0,3842:127
+17 33513649 rs3744366 A G 3743.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.729;DB;DP=213;Dels=0.00;FS=0.526;HaplotypeScore=2.9053;MLEAC=4;MLEAF=0.667;MQ=58.99;MQ0=0;MQRankSum=-0.152;QD=17.57;ReadPosRankSum=0.530;SB=-2.067e+03;VQSLOD=8.0191;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,40:84:99:1083,0,1341:127 1|1:0,67:67:99:2074,162,0:127 0|1:37,24:62:99:586,0,1015:127
+17 44809197 rs116187585 A G 8703.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-0.554;DB;DP=254;Dels=0.00;FS=3.487;HaplotypeScore=4.0582;MLEAC=6;MLEAF=1.00;MQ=59.58;MQ0=0;MQRankSum=1.677;QD=34.26;ReadPosRankSum=1.483;SB=-4.228e+03;VQSLOD=6.6144;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3470,268,0:127 1|1:0,82:84:99:2846,220,0:127 1|1:0,73:73:99:2387,184,0:127
+17 55158811 rs7217371 G A 2849.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.616;DB;DP=206;Dels=0.00;FS=0.511;HaplotypeScore=1.0970;MLEAC=3;MLEAF=0.500;MQ=59.66;MQ0=0;MQRankSum=0.103;QD=13.83;ReadPosRankSum=0.958;SB=-1.448e+03;VQSLOD=9.9440;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,31:72:99:982,0,1147:127 0/1:35,40:75:99:1236,0,984:127 0/1:32,27:59:99:670,0,882:127
+17 66991216 rs61697543 T C 738.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.530;DB;DP=252;Dels=0.00;FS=1.490;HaplotypeScore=1.7074;MLEAC=1;MLEAF=0.167;MQ=59.36;MQ0=0;MQRankSum=0.771;QD=10.86;ReadPosRankSum=-0.724;SB=-3.930e+02;VQSLOD=8.8864;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:95,0:95:99:0,268,3511:127 0|0:89,0:89:99:0,235,3058:127 0|1:33,35:68:99:773,0,965:127
+18 1629264 rs5025369 A G 86.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.739;DB;DP=149;Dels=0.00;FS=15.359;HaplotypeScore=7.1355;MLEAC=2;MLEAF=0.333;MQ=39.72;MQ0=11;MQRankSum=-2.543;QD=0.81;ReadPosRankSum=0.088;SB=-3.380e+01;VQSLOD=-6.2052;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,15:66:50:50,0,1143:49 0|0:37,5:42:81:0,81,941:49 1|0:35,6:41:75:75,0,818:49
+18 10010426 rs4797393 T C 4197.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.425;DB;DP=210;Dels=0.00;FS=1.132;HaplotypeScore=1.2660;MLEAC=4;MLEAF=0.667;MQ=59.43;MQ0=0;MQRankSum=-2.916;QD=19.99;ReadPosRankSum=0.379;SB=-2.001e+03;VQSLOD=7.0312;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,65:65:99:2247,181,0:127 1|0:35,39:75:99:1170,0,967:127 1|0:41,29:70:99:780,0,1052:127
+18 20025030 rs4800406 A G 1113.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.700;DB;DP=230;Dels=0.00;FS=0.000;HaplotypeScore=1.6804;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=1.643;QD=12.65;ReadPosRankSum=-1.166;SB=-6.160e+02;VQSLOD=8.6574;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,223,2978:127 0|1:46,42:88:99:1148,0,1460:127 0|0:64,0:64:99:0,175,2303:127
+18 41449098 rs2045671 C T 8380.01 PASS AC=6;AF=1.00;AN=6;DB;DP=237;Dels=0.00;FS=0.000;HaplotypeScore=1.3482;MLEAC=6;MLEAF=1.00;MQ=59.65;MQ0=0;QD=35.36;SB=-4.462e+03;VQSLOD=11.6464;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,76:76:99:2756,214,0:127 1|1:0,75:75:99:2635,202,0:127 1|1:0,86:86:99:2989,229,0:127
+18 50973169 rs11661305 A G 5320.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=2.753;DB;DP=196;Dels=0.00;FS=2.568;HaplotypeScore=1.1306;MLEAC=5;MLEAF=0.833;MQ=57.73;MQ0=0;MQRankSum=0.246;QD=27.14;ReadPosRankSum=0.186;SB=-2.411e+03;VQSLOD=7.5009;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2621,202,0:127 1|0:30,37:67:99:1009,0,842:127 1|1:0,55:55:99:1690,132,0:127
+18 67950442 rs62091919 T G 1779.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.517;DB;DP=195;Dels=0.00;FS=0.562;HaplotypeScore=1.5454;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.006;QD=12.89;ReadPosRankSum=-0.268;SB=-9.170e+02;VQSLOD=9.6268;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:40,32:72:99:967,0,1318:127 0|0:55,2:57:99:0,141,1865:127 1|0:36,30:66:99:851,0,1042:127
+18 75204349 rs9948476 C T 646.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.965;DB;DP=185;Dels=0.00;FS=0.817;HaplotypeScore=1.3995;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=0.276;QD=10.95;ReadPosRankSum=-0.158;SB=-3.210e+02;VQSLOD=9.3748;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:66:99:0,168,2026:127 0|0:60,0:60:99:0,147,1768:127 0|1:34,25:59:99:681,0,893:127
+19 3739001 rs56138006 C T 976.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.634;DB;DP=118;Dels=0.00;FS=3.676;HaplotypeScore=1.4356;MLEAC=2;MLEAF=0.333;MQ=58.66;MQ0=0;MQRankSum=0.753;QD=11.22;ReadPosRankSum=1.107;SB=-6.380e+02;VQSLOD=7.4541;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:612,0,559:45 0|0:31,0:31:45:0,45,527:45 1|0:12,23:35:93:403,0,93:45
+19 11730690 rs4804613 C T 2578.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=5.057;DB;DP=197;Dels=0.00;FS=0.529;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.36;MQ0=0;MQRankSum=0.416;QD=13.09;ReadPosRankSum=-0.554;SB=-1.389e+03;VQSLOD=9.3908;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:21,26:47:99:586,0,623:127 0/1:42,45:87:99:1192,0,1055:127 0/1:32,30:63:99:839,0,932:127
+19 20782710 rs10413568 T C 6304.01 PASS AC=6;AF=1.00;AN=6;DB;DP=203;Dels=0.00;FS=0.000;HaplotypeScore=0.6919;MLEAC=6;MLEAF=1.00;MQ=59.56;MQ0=0;QD=31.05;SB=-2.367e+03;VQSLOD=10.7708;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2375,214,0:127 1|1:0,80:80:99:2480,217,0:127 1|1:0,49:49:99:1449,129,0:127
+19 28150587 rs4404191 A G 7419.01 PASS AC=6;AF=1.00;AN=6;DB;DP=209;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=6;MLEAF=1.00;MQ=59.61;MQ0=0;QD=35.50;SB=-3.717e+03;VQSLOD=11.9901;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:2584,202,0:127 1|1:0,74:74:99:2509,193,0:127 1|1:0,65:65:99:2326,181,0:127
+19 37226152 rs3108217 G C 2076.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.215;DB;DP=145;Dels=0.00;FS=2.159;HaplotypeScore=0.5869;MLEAC=4;MLEAF=0.667;MQ=58.59;MQ0=0;MQRankSum=1.160;QD=14.32;ReadPosRankSum=-0.725;SB=-1.027e+03;VQSLOD=7.4915;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:25,30:55:99:789,0,709:63 1|1:0,29:29:63:772,63,0:63 0|1:35,25:61:99:557,0,789:63
+19 54644879 rs36636 G A 1790.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.505;DB;DP=187;Dels=0.00;FS=4.408;HaplotypeScore=1.5043;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-1.266;QD=13.88;ReadPosRankSum=-1.226;SB=-1.081e+03;VQSLOD=7.8045;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:30,27:57:99:811,0,726:127 1|0:31,41:72:99:1018,0,730:127 0|0:58,0:58:99:0,144,1815:127
+20 3199373 rs2422861 G A 896.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.452;DB;DP=135;Dels=0.00;FS=0.664;HaplotypeScore=2.8371;MLEAC=3;MLEAF=0.500;MQ=58.47;MQ0=0;MQRankSum=-0.217;QD=6.64;ReadPosRankSum=0.111;SB=-6.080e+02;VQSLOD=7.7118;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,24:56:99:472,0,640:127 0/1:25,15:40:99:229,0,603:127 0/1:20,19:39:99:234,0,379:127
+20 12166868 rs7272217 C T 926.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.444;DB;DP=200;Dels=0.00;FS=2.627;HaplotypeScore=0.8413;MLEAC=1;MLEAF=0.167;MQ=58.94;MQ0=0;MQRankSum=-1.362;QD=13.23;ReadPosRankSum=-1.055;SB=-4.040e+02;VQSLOD=7.6219;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:68,0:68:99:0,190,2486:127 0|0:62,0:62:99:0,169,2218:127 0|1:33,37:70:99:961,0,870:127
+20 21523349 rs73127889 A G 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.469;DB;DP=253;Dels=0.00;FS=3.735;HaplotypeScore=1.5402;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=0.821;QD=13.69;ReadPosRankSum=1.510;SB=-8.640e+02;VQSLOD=7.8358;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:44,48:92:99:1319,0,1356:127 0|0:86,0:86:99:0,235,2994:127 1|0:37,38:75:99:1006,0,1111:127
+20 29566945 rs6119037 C G 1427.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-3.826;DB;DP=271;Dels=0.00;FS=1.151;HaplotypeScore=2.7598;MLEAC=2;MLEAF=0.333;MQ=47.42;MQ0=21;MQRankSum=2.420;QD=8.06;ReadPosRankSum=0.363;SB=-7.560e+02;VQSLOD=1.7908;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:59,32:91:99:782,0,1210:127 1|0:55,31:86:99:684,0,1422:127 0|0:94,0:94:99:0,208,2592:127
+20 41560394 rs761027 A G 5634.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.444;DB;DP=222;Dels=0.00;FS=0.829;HaplotypeScore=1.1428;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=0.392;QD=25.38;ReadPosRankSum=-0.064;SB=-3.048e+03;VQSLOD=10.0362;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2228,187,0:127 1|1:0,82:82:99:2435,211,0:127 1|0:25,43:68:99:971,0,567:127
+20 51353834 rs241795 G A 6115.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=7.909;DB;DP=268;Dels=0.00;FS=0.000;HaplotypeScore=0.2447;MLEAC=4;MLEAF=0.667;MQ=59.38;MQ0=0;MQRankSum=-0.518;QD=22.82;ReadPosRankSum=-0.253;SB=-3.328e+03;VQSLOD=8.3999;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:46,54:100:99:1663,0,1247:127 1|1:0,91:91:99:3189,247,0:127 0|1:36,41:77:99:1263,0,901:127
+20 59978756 rs1892320 T C 3967.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.562;DB;DP=206;Dels=0.00;FS=14.249;HaplotypeScore=1.3838;MLEAC=4;MLEAF=0.667;MQ=59.89;MQ0=0;MQRankSum=-0.289;QD=19.26;ReadPosRankSum=0.221;SB=-2.292e+03;VQSLOD=7.6238;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2337,181,0:127 1|0:38,29:67:99:743,0,1180:127 1|0:31,36:67:99:887,0,873:127
+21 10750991 . C T 602.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=10.103;DP=735;DS;Dels=0.00;FS=27.020;HaplotypeScore=107.2731;MLEAC=2;MLEAF=0.333;MQ=44.40;MQ0=2;MQRankSum=-14.560;QD=1.24;ReadPosRankSum=0.063;SB=-8.430e+02;VQSLOD=-100.9480;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:164,78:243:99:357,0,5193:103 1|0:187,55:242:99:284,0,5252:103 0|0:199,50:250:99:0,103,5864:103
+21 18433036 rs969905 A G 781.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.610;DB;DP=229;Dels=0.00;FS=2.230;HaplotypeScore=1.2866;MLEAC=1;MLEAF=0.167;MQ=59.55;MQ0=0;MQRankSum=0.300;QD=10.15;ReadPosRankSum=-0.384;SB=-4.990e+02;VQSLOD=9.5768;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:63:99:0,181,2380:127 0|0:89,0:89:99:0,244,3177:127 0|1:39,38:77:99:816,0,1256:127
+21 25702950 rs2260875 C G 3462.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.156;DB;DP=237;Dels=0.00;FS=2.900;HaplotypeScore=1.5444;MLEAC=3;MLEAF=0.500;MQ=59.04;MQ0=0;MQRankSum=0.386;QD=14.61;ReadPosRankSum=-1.455;SB=-1.683e+03;VQSLOD=8.0501;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:37,40:77:99:1282,0,1101:127 0/1:43,36:79:99:1114,0,1317:127 0/1:45,36:81:99:1066,0,1329:127
+21 34546711 rs11701692 T C 1030.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.884;DB;DP=152;Dels=0.00;FS=8.325;HaplotypeScore=1.9325;MLEAC=2;MLEAF=0.333;MQ=57.61;MQ0=0;MQRankSum=-0.291;QD=10.51;ReadPosRankSum=0.258;SB=-4.600e+02;VQSLOD=6.4601;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,25:61:99:574,0,1137:127 1|0:19,18:37:99:495,0,498:127 0|0:54,0:54:99:0,141,1811:127
+21 42833227 rs460904 T C 3179.23 PASS AC=6;AF=1.00;AN=6;DB;DP=155;Dels=0.00;FS=0.000;HaplotypeScore=2.4559;MLEAC=6;MLEAF=1.00;MQ=58.18;MQ0=0;QD=20.51;SB=-2.173e+03;VQSLOD=7.7042;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,60:60:90:1085,90,0:74 1|1:0,54:54:96:1172,96,0:74 1|1:0,41:41:75:960,75,0:74
+22 17351507 rs5748687 G A 4244.01 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=-0.224;DB;DP=261;Dels=0.00;FS=0.710;HaplotypeScore=1.7170;MLEAC=5;MLEAF=0.833;MQ=28.84;MQ0=57;MQRankSum=-7.852;QD=16.26;ReadPosRankSum=-1.243;SB=-2.174e+03;VQSLOD=-1.7101;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:1529,141,0:127 1|0:34,49:83:99:727,0,1065:127 1|1:0,86:86:99:1988,180,0:127
+22 34204930 rs13053313 T C 435.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.517;DB;DP=82;Dels=0.00;FS=5.843;HaplotypeScore=0.5328;MLEAC=1;MLEAF=0.167;MQ=58.65;MQ0=0;MQRankSum=1.117;QD=12.80;ReadPosRankSum=-1.270;SB=-1.170e+02;VQSLOD=6.4410;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:12,0:12:27:0,27,360:27 0|1:16,18:34:99:470,0,403:27 0|0:36,0:36:93:0,93,1230:27
+22 43356130 rs6519353 A C 3526.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.809;DB;DP=228;Dels=0.00;FS=6.336;HaplotypeScore=1.6306;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-0.146;QD=22.46;ReadPosRankSum=2.034;SB=-1.954e+03;VQSLOD=8.5009;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:40,41:81:99:1020,0,1222:127 1|1:0,76:76:99:2506,196,0:127 0|0:71,0:71:99:0,165,2091:127
+22 50309915 rs9616205 A T 1712.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.936;DB;DP=162;Dels=0.00;FS=2.857;HaplotypeScore=2.1490;MLEAC=2;MLEAF=0.333;MQ=56.21;MQ0=5;MQRankSum=0.892;QD=13.92;ReadPosRankSum=-1.040;SB=-9.940e+02;VQSLOD=6.2766;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:39,33:72:99:777,0,994:78 0|0:39,0:39:78:0,78,1010:78 1|0:16,35:51:99:974,0,257:78
+X 4712340 rs5915814 C A 2233.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.784;DB;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.4434;MLEAC=2;MLEAF=0.333;MQ=59.50;MQ0=0;MQRankSum=-1.782;QD=15.73;ReadPosRankSum=0.359;SB=-1.240e+03;VQSLOD=8.3937;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:32,37:69:99:1114,0,859:81 0|0:34,0:34:81:0,81,948:81 1|0:32,41:73:99:1158,0,575:81
+X 42192093 rs58959554 T C 1058.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-5.464;DB;DP=190;Dels=0.00;FS=6.809;HaplotypeScore=1.8813;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-0.212;QD=15.34;ReadPosRankSum=-0.173;SB=-3.970e+02;VQSLOD=8.0569;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,182,2683:127 0|0:50,0:50:99:0,138,1794:127 0|1:31,38:69:99:1093,0,947:127
+X 66290558 rs1606094 C T 2602.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.169;DB;DP=213;Dels=0.00;FS=13.125;HaplotypeScore=0.0000;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=1.343;QD=18.86;ReadPosRankSum=2.274;SB=-1.122e+03;VQSLOD=5.9967;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:54,47:101:99:1381,0,1762:99 1|1:0,37:37:99:1266,99,0:99 0|0:75,0:75:99:0,205,2705:99
+X 84165195 rs5923187 C A 1009.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.103;DB;DP=194;Dels=0.00;FS=3.070;HaplotypeScore=2.8168;MLEAC=1;MLEAF=0.167;MQ=59.31;MQ0=0;MQRankSum=-0.675;QD=12.01;ReadPosRankSum=-1.463;SB=-5.890e+02;VQSLOD=8.2395;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:79,1:80:99:0,223,2856:60 0|0:30,0:30:60:0,60,764:60 0|1:40,44:84:99:1044,0,1007:60
+X 95868251 . G A 108.36 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=1.436;DP=90;Dels=0.00;FS=4.210;HaplotypeScore=4.9383;MLEAC=2;MLEAF=0.333;MQ=44.60;MQ0=8;MQRankSum=-2.939;QD=1.55;ReadPosRankSum=2.865;SB=-7.411e+01;VQSLOD=-3.2422;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:29,9:38:99:126,0,251:23 0|0:20,0:20:24:0,24,266:23 1|0:27,5:32:21:21,0,97:23
+X 116855730 rs980389 A G 2366.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.939;DB;DP=173;Dels=0.00;FS=3.510;HaplotypeScore=0.9076;MLEAC=3;MLEAF=0.500;MQ=59.87;MQ0=0;MQRankSum=0.653;QD=21.51;ReadPosRankSum=0.730;SB=-1.218e+03;VQSLOD=7.9588;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:965,0,1249:114 1|1:0,40:40:99:1446,114,0:114 0|0:63,0:63:99:0,175,2284:114
+X 135282092 rs5974586 G C 2193.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.257;DB;DP=203;Dels=0.00;FS=0.540;HaplotypeScore=0.6589;MLEAC=2;MLEAF=0.333;MQ=59.47;MQ0=0;MQRankSum=1.000;QD=13.46;ReadPosRankSum=1.343;SB=-1.069e+03;VQSLOD=9.0929;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:47,33:80:99:1026,0,1466:116 0|0:40,0:40:99:0,117,1486:116 1|0:43,40:83:99:1206,0,1311:116
+X 150239197 rs6627349 T C 4677.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.731;DB;DP=179;Dels=0.00;FS=0.000;HaplotypeScore=1.6094;MLEAC=5;MLEAF=0.833;MQ=59.69;MQ0=0;MQRankSum=0.676;QD=26.13;ReadPosRankSum=0.494;SB=-2.442e+03;VQSLOD=10.5525;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,66:66:99:2387,190,0:99 1|1:0,40:40:99:1243,99,0:99 1|0:36,37:73:99:1047,0,1039:99
+Y 13265732 . C T 356.72 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=2.823;DP=142;Dels=0.00;FS=7.941;HaplotypeScore=19.8229;MLEAC=2;MLEAF=0.333;MQ=38.22;MQ0=11;MQRankSum=-2.145;QD=5.10;ReadPosRankSum=1.491;SB=-1.466e+00;VQSLOD=-14.4273;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,15:50:99:327,0,624:5 0|0:65,7:72:4:0,4,1831:5 1|0:15,5:20:67:67,0,227:5
+Y 59024923 . A T 1977.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.838;DP=745;DS;Dels=0.00;FS=0.367;HaplotypeScore=8.2957;MLEAC=3;MLEAF=0.500;MQ=43.53;MQ0=19;MQRankSum=2.499;QD=2.65;ReadPosRankSum=0.098;SB=-9.720e+02;VQSLOD=-36.7578;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:208,42:250:99:730,0,6428:127 0/1:210,35:245:99:588,0,6218:127 0/1:208,42:250:99:698,0,6060:127
+GL000214.1 115144 . C T 102.07 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=0.854;DP=103;Dels=0.00;FS=14.185;HaplotypeScore=14.9478;MLEAC=2;MLEAF=0.333;MQ=38.45;MQ0=1;MQRankSum=-2.314;QD=1.05;ReadPosRankSum=1.480;SB=-6.153e+01;VQSLOD=-14.7562;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:6,0:6:3:0,3,22:4 0|1:9,11:20:16:81,0,16:4 0|1:63,14:77:58:58,0,908:4
+GL000215.1 142616 . T C 976.25 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DP=80;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=6;MLEAF=1.00;MQ=21.04;MQ0=42;QD=12.20;SB=-8.001e+01;VQSLOD=-0.4104;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,33:33:42:516,42,0:19 1|1:0,21:21:24:272,24,0:19 1|1:0,26:26:21:226,21,0:19
+GL000212.1 28454 . T C 2248.99 PASS AC=4;AF=1.00;AN=4;BaseQRankSum=1.691;DP=94;Dels=0.00;FS=3.274;HaplotypeScore=0.9622;MLEAC=4;MLEAF=1.00;MQ=36.99;MQ0=7;MQRankSum=-0.428;QD=24.18;ReadPosRankSum=-1.284;SB=-1.053e+03;VQSLOD=1.2364;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,29:29:63:755,63,0:63 ./. 1|1:1,63:64:99:1530,135,0:63
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..1caf5a8
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:18 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12878 163 104 0 0 40
+INDEL NA12878 NA12878 0 0 0 0 0
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..ba81911
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_detail_metrics
@@ -0,0 +1,12 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:18 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 104 TP,TN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR1 59 TP
+SNP NA12878 NA12878 VC_FILTERED VC_FILTERED 40 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..fd2c926
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_L [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:01:26 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12878 1 1 ? 1 1 ? 1 1 1 1 1
+INDEL NA12878 NA12878 ? ? ? ? ? ? ? ? ? ? ?
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..2260f84
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 OUTPUT_ALL_ROWS=true INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:20 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12878 163 104 0 0 40
+INDEL NA12878 NA12878 0 0 0 0 0
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..8f34dfe
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_detail_metrics
@@ -0,0 +1,383 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 OUTPUT_ALL_ROWS=true INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRE [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Thu Jul 30 11:13:00 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12878 MISSING MISSING 0 NA
+SNP NA12878 NA12878 MISSING HOM_REF 0 TN
+SNP NA12878 NA12878 MISSING HET_REF_VAR1 0 FP,TN
+SNP NA12878 NA12878 MISSING HET_VAR1_VAR2 0 FP
+SNP NA12878 NA12878 MISSING HOM_VAR1 0 FP
+SNP NA12878 NA12878 MISSING HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 MISSING HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 MISSING HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 MISSING HET_VAR3_VAR4 0 FP
+SNP NA12878 NA12878 MISSING HOM_VAR2 0 NA
+SNP NA12878 NA12878 MISSING HOM_VAR3 0 NA
+SNP NA12878 NA12878 MISSING NO_CALL 0 EMPTY
+SNP NA12878 NA12878 MISSING LOW_GQ 0 EMPTY
+SNP NA12878 NA12878 MISSING LOW_DP 0 EMPTY
+SNP NA12878 NA12878 MISSING VC_FILTERED 0 EMPTY
+SNP NA12878 NA12878 MISSING GT_FILTERED 0 EMPTY
+SNP NA12878 NA12878 MISSING IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 HOM_REF MISSING 0 TN
+SNP NA12878 NA12878 HOM_REF HOM_REF 0 TN
+SNP NA12878 NA12878 HOM_REF HET_REF_VAR1 0 FP,TN
+SNP NA12878 NA12878 HOM_REF HET_VAR1_VAR2 0 FP
+SNP NA12878 NA12878 HOM_REF HOM_VAR1 0 FP
+SNP NA12878 NA12878 HOM_REF HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 HOM_REF HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 HOM_REF HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 HOM_REF HET_VAR3_VAR4 0 FP
+SNP NA12878 NA12878 HOM_REF HOM_VAR2 0 NA
+SNP NA12878 NA12878 HOM_REF HOM_VAR3 0 NA
+SNP NA12878 NA12878 HOM_REF NO_CALL 0 EMPTY
+SNP NA12878 NA12878 HOM_REF LOW_GQ 0 TN
+SNP NA12878 NA12878 HOM_REF LOW_DP 0 TN
+SNP NA12878 NA12878 HOM_REF VC_FILTERED 0 TN
+SNP NA12878 NA12878 HOM_REF GT_FILTERED 0 TN
+SNP NA12878 NA12878 HOM_REF IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 HET_REF_VAR1 MISSING 0 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 HOM_REF 0 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 104 TP,TN
+SNP NA12878 NA12878 HET_REF_VAR1 HET_VAR1_VAR2 0 TP,FP
+SNP NA12878 NA12878 HET_REF_VAR1 HOM_VAR1 0 TP,FP
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR2 0 FP,TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 HET_REF_VAR1 HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 HET_REF_VAR1 HET_VAR3_VAR4 0 FP,FN
+SNP NA12878 NA12878 HET_REF_VAR1 HOM_VAR2 0 FP,FN
+SNP NA12878 NA12878 HET_REF_VAR1 HOM_VAR3 0 NA
+SNP NA12878 NA12878 HET_REF_VAR1 NO_CALL 0 EMPTY
+SNP NA12878 NA12878 HET_REF_VAR1 LOW_GQ 0 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 LOW_DP 0 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 VC_FILTERED 0 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 GT_FILTERED 0 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 HET_VAR1_VAR2 MISSING 0 FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HOM_REF 0 FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HET_REF_VAR1 0 TP,FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HET_VAR1_VAR2 0 TP
+SNP NA12878 NA12878 HET_VAR1_VAR2 HOM_VAR1 0 TP,FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 HET_VAR1_VAR2 HET_REF_VAR3 0 FP,FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HET_VAR1_VAR3 0 TP,FP,FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HET_VAR3_VAR4 0 FP,FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HOM_VAR2 0 TP,FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 HOM_VAR3 0 FP,FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 NO_CALL 0 EMPTY
+SNP NA12878 NA12878 HET_VAR1_VAR2 LOW_GQ 0 FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 LOW_DP 0 FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 VC_FILTERED 0 FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 GT_FILTERED 0 FN
+SNP NA12878 NA12878 HET_VAR1_VAR2 IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 HOM_VAR1 MISSING 0 FN
+SNP NA12878 NA12878 HOM_VAR1 HOM_REF 0 FN
+SNP NA12878 NA12878 HOM_VAR1 HET_REF_VAR1 0 TP,FN
+SNP NA12878 NA12878 HOM_VAR1 HET_VAR1_VAR2 0 TP,FP,FN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR1 59 TP
+SNP NA12878 NA12878 HOM_VAR1 HET_REF_VAR2 0 FP,FN
+SNP NA12878 NA12878 HOM_VAR1 HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 HOM_VAR1 HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 HOM_VAR1 HET_VAR3_VAR4 0 FP,FN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR2 0 FP,FN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR3 0 NA
+SNP NA12878 NA12878 HOM_VAR1 NO_CALL 0 EMPTY
+SNP NA12878 NA12878 HOM_VAR1 LOW_GQ 0 FN
+SNP NA12878 NA12878 HOM_VAR1 LOW_DP 0 FN
+SNP NA12878 NA12878 HOM_VAR1 VC_FILTERED 0 FN
+SNP NA12878 NA12878 HOM_VAR1 GT_FILTERED 0 FN
+SNP NA12878 NA12878 HOM_VAR1 IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 NO_CALL MISSING 0 EMPTY
+SNP NA12878 NA12878 NO_CALL HOM_REF 0 EMPTY
+SNP NA12878 NA12878 NO_CALL HET_REF_VAR1 0 EMPTY
+SNP NA12878 NA12878 NO_CALL HET_VAR1_VAR2 0 EMPTY
+SNP NA12878 NA12878 NO_CALL HOM_VAR1 0 EMPTY
+SNP NA12878 NA12878 NO_CALL HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 NO_CALL HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 NO_CALL HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 NO_CALL HET_VAR3_VAR4 0 NA
+SNP NA12878 NA12878 NO_CALL HOM_VAR2 0 NA
+SNP NA12878 NA12878 NO_CALL HOM_VAR3 0 NA
+SNP NA12878 NA12878 NO_CALL NO_CALL 0 EMPTY
+SNP NA12878 NA12878 NO_CALL LOW_GQ 0 EMPTY
+SNP NA12878 NA12878 NO_CALL LOW_DP 0 EMPTY
+SNP NA12878 NA12878 NO_CALL VC_FILTERED 0 EMPTY
+SNP NA12878 NA12878 NO_CALL GT_FILTERED 0 EMPTY
+SNP NA12878 NA12878 NO_CALL IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ MISSING 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ HOM_REF 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ HET_REF_VAR1 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ HET_VAR1_VAR2 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ HOM_VAR1 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 LOW_GQ HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 LOW_GQ HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 LOW_GQ HET_VAR3_VAR4 0 NA
+SNP NA12878 NA12878 LOW_GQ HOM_VAR2 0 NA
+SNP NA12878 NA12878 LOW_GQ HOM_VAR3 0 NA
+SNP NA12878 NA12878 LOW_GQ NO_CALL 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ LOW_GQ 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ LOW_DP 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ VC_FILTERED 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ GT_FILTERED 0 EMPTY
+SNP NA12878 NA12878 LOW_GQ IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 LOW_DP MISSING 0 EMPTY
+SNP NA12878 NA12878 LOW_DP HOM_REF 0 EMPTY
+SNP NA12878 NA12878 LOW_DP HET_REF_VAR1 0 EMPTY
+SNP NA12878 NA12878 LOW_DP HET_VAR1_VAR2 0 EMPTY
+SNP NA12878 NA12878 LOW_DP HOM_VAR1 0 EMPTY
+SNP NA12878 NA12878 LOW_DP HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 LOW_DP HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 LOW_DP HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 LOW_DP HET_VAR3_VAR4 0 NA
+SNP NA12878 NA12878 LOW_DP HOM_VAR2 0 NA
+SNP NA12878 NA12878 LOW_DP HOM_VAR3 0 NA
+SNP NA12878 NA12878 LOW_DP NO_CALL 0 EMPTY
+SNP NA12878 NA12878 LOW_DP LOW_GQ 0 EMPTY
+SNP NA12878 NA12878 LOW_DP LOW_DP 0 EMPTY
+SNP NA12878 NA12878 LOW_DP VC_FILTERED 0 EMPTY
+SNP NA12878 NA12878 LOW_DP GT_FILTERED 0 EMPTY
+SNP NA12878 NA12878 LOW_DP IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED MISSING 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED HOM_REF 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED HET_REF_VAR1 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED HET_VAR1_VAR2 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED HOM_VAR1 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 VC_FILTERED HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 VC_FILTERED HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 VC_FILTERED HET_VAR3_VAR4 0 NA
+SNP NA12878 NA12878 VC_FILTERED HOM_VAR2 0 NA
+SNP NA12878 NA12878 VC_FILTERED HOM_VAR3 0 NA
+SNP NA12878 NA12878 VC_FILTERED NO_CALL 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED LOW_GQ 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED LOW_DP 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED VC_FILTERED 40 EMPTY
+SNP NA12878 NA12878 VC_FILTERED GT_FILTERED 0 EMPTY
+SNP NA12878 NA12878 VC_FILTERED IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED MISSING 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED HOM_REF 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED HET_REF_VAR1 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED HET_VAR1_VAR2 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED HOM_VAR1 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 GT_FILTERED HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 GT_FILTERED HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 GT_FILTERED HET_VAR3_VAR4 0 NA
+SNP NA12878 NA12878 GT_FILTERED HOM_VAR2 0 NA
+SNP NA12878 NA12878 GT_FILTERED HOM_VAR3 0 NA
+SNP NA12878 NA12878 GT_FILTERED NO_CALL 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED LOW_GQ 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED LOW_DP 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED VC_FILTERED 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED GT_FILTERED 0 EMPTY
+SNP NA12878 NA12878 GT_FILTERED IS_MIXED 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED MISSING 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED HOM_REF 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED HET_REF_VAR1 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED HET_VAR1_VAR2 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED HOM_VAR1 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED HET_REF_VAR2 0 NA
+SNP NA12878 NA12878 IS_MIXED HET_REF_VAR3 0 NA
+SNP NA12878 NA12878 IS_MIXED HET_VAR1_VAR3 0 NA
+SNP NA12878 NA12878 IS_MIXED HET_VAR3_VAR4 0 NA
+SNP NA12878 NA12878 IS_MIXED HOM_VAR2 0 NA
+SNP NA12878 NA12878 IS_MIXED HOM_VAR3 0 NA
+SNP NA12878 NA12878 IS_MIXED NO_CALL 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED LOW_GQ 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED LOW_DP 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED VC_FILTERED 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED GT_FILTERED 0 EMPTY
+SNP NA12878 NA12878 IS_MIXED IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 MISSING MISSING 0 NA
+INDEL NA12878 NA12878 MISSING HOM_REF 0 TN
+INDEL NA12878 NA12878 MISSING HET_REF_VAR1 0 FP,TN
+INDEL NA12878 NA12878 MISSING HET_VAR1_VAR2 0 FP
+INDEL NA12878 NA12878 MISSING HOM_VAR1 0 FP
+INDEL NA12878 NA12878 MISSING HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 MISSING HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 MISSING HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 MISSING HET_VAR3_VAR4 0 FP
+INDEL NA12878 NA12878 MISSING HOM_VAR2 0 NA
+INDEL NA12878 NA12878 MISSING HOM_VAR3 0 NA
+INDEL NA12878 NA12878 MISSING NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 MISSING LOW_GQ 0 EMPTY
+INDEL NA12878 NA12878 MISSING LOW_DP 0 EMPTY
+INDEL NA12878 NA12878 MISSING VC_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 MISSING GT_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 MISSING IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 HOM_REF MISSING 0 TN
+INDEL NA12878 NA12878 HOM_REF HOM_REF 0 TN
+INDEL NA12878 NA12878 HOM_REF HET_REF_VAR1 0 FP,TN
+INDEL NA12878 NA12878 HOM_REF HET_VAR1_VAR2 0 FP
+INDEL NA12878 NA12878 HOM_REF HOM_VAR1 0 FP
+INDEL NA12878 NA12878 HOM_REF HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 HOM_REF HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 HOM_REF HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 HOM_REF HET_VAR3_VAR4 0 FP
+INDEL NA12878 NA12878 HOM_REF HOM_VAR2 0 NA
+INDEL NA12878 NA12878 HOM_REF HOM_VAR3 0 NA
+INDEL NA12878 NA12878 HOM_REF NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 HOM_REF LOW_GQ 0 TN
+INDEL NA12878 NA12878 HOM_REF LOW_DP 0 TN
+INDEL NA12878 NA12878 HOM_REF VC_FILTERED 0 TN
+INDEL NA12878 NA12878 HOM_REF GT_FILTERED 0 TN
+INDEL NA12878 NA12878 HOM_REF IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 HET_REF_VAR1 MISSING 0 TN,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 HOM_REF 0 TN,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 0 TP,TN
+INDEL NA12878 NA12878 HET_REF_VAR1 HET_VAR1_VAR2 0 TP,FP
+INDEL NA12878 NA12878 HET_REF_VAR1 HOM_VAR1 0 TP,FP
+INDEL NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR2 0 FP,TN,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 HET_REF_VAR1 HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 HET_REF_VAR1 HET_VAR3_VAR4 0 FP,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 HOM_VAR2 0 FP,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 HOM_VAR3 0 NA
+INDEL NA12878 NA12878 HET_REF_VAR1 NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 HET_REF_VAR1 LOW_GQ 0 TN,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 LOW_DP 0 TN,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 VC_FILTERED 0 TN,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 GT_FILTERED 0 TN,FN
+INDEL NA12878 NA12878 HET_REF_VAR1 IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 HET_VAR1_VAR2 MISSING 0 FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HOM_REF 0 FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HET_REF_VAR1 0 TP,FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HET_VAR1_VAR2 0 TP
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HOM_VAR1 0 TP,FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HET_REF_VAR3 0 FP,FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HET_VAR1_VAR3 0 TP,FP,FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HET_VAR3_VAR4 0 FP,FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HOM_VAR2 0 TP,FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 HOM_VAR3 0 FP,FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 HET_VAR1_VAR2 LOW_GQ 0 FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 LOW_DP 0 FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 VC_FILTERED 0 FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 GT_FILTERED 0 FN
+INDEL NA12878 NA12878 HET_VAR1_VAR2 IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 HOM_VAR1 MISSING 0 FN
+INDEL NA12878 NA12878 HOM_VAR1 HOM_REF 0 FN
+INDEL NA12878 NA12878 HOM_VAR1 HET_REF_VAR1 0 TP,FN
+INDEL NA12878 NA12878 HOM_VAR1 HET_VAR1_VAR2 0 TP,FP,FN
+INDEL NA12878 NA12878 HOM_VAR1 HOM_VAR1 0 TP
+INDEL NA12878 NA12878 HOM_VAR1 HET_REF_VAR2 0 FP,FN
+INDEL NA12878 NA12878 HOM_VAR1 HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 HOM_VAR1 HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 HOM_VAR1 HET_VAR3_VAR4 0 FP,FN
+INDEL NA12878 NA12878 HOM_VAR1 HOM_VAR2 0 FP,FN
+INDEL NA12878 NA12878 HOM_VAR1 HOM_VAR3 0 NA
+INDEL NA12878 NA12878 HOM_VAR1 NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 HOM_VAR1 LOW_GQ 0 FN
+INDEL NA12878 NA12878 HOM_VAR1 LOW_DP 0 FN
+INDEL NA12878 NA12878 HOM_VAR1 VC_FILTERED 0 FN
+INDEL NA12878 NA12878 HOM_VAR1 GT_FILTERED 0 FN
+INDEL NA12878 NA12878 HOM_VAR1 IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL MISSING 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL HOM_REF 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL HET_REF_VAR1 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL HET_VAR1_VAR2 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL HOM_VAR1 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 NO_CALL HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 NO_CALL HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 NO_CALL HET_VAR3_VAR4 0 NA
+INDEL NA12878 NA12878 NO_CALL HOM_VAR2 0 NA
+INDEL NA12878 NA12878 NO_CALL HOM_VAR3 0 NA
+INDEL NA12878 NA12878 NO_CALL NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL LOW_GQ 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL LOW_DP 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL VC_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL GT_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 NO_CALL IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ MISSING 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ HOM_REF 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ HET_REF_VAR1 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ HET_VAR1_VAR2 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ HOM_VAR1 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 LOW_GQ HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 LOW_GQ HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 LOW_GQ HET_VAR3_VAR4 0 NA
+INDEL NA12878 NA12878 LOW_GQ HOM_VAR2 0 NA
+INDEL NA12878 NA12878 LOW_GQ HOM_VAR3 0 NA
+INDEL NA12878 NA12878 LOW_GQ NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ LOW_GQ 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ LOW_DP 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ VC_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ GT_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 LOW_GQ IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP MISSING 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP HOM_REF 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP HET_REF_VAR1 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP HET_VAR1_VAR2 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP HOM_VAR1 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 LOW_DP HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 LOW_DP HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 LOW_DP HET_VAR3_VAR4 0 NA
+INDEL NA12878 NA12878 LOW_DP HOM_VAR2 0 NA
+INDEL NA12878 NA12878 LOW_DP HOM_VAR3 0 NA
+INDEL NA12878 NA12878 LOW_DP NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP LOW_GQ 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP LOW_DP 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP VC_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP GT_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 LOW_DP IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED MISSING 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED HOM_REF 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED HET_REF_VAR1 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED HET_VAR1_VAR2 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED HOM_VAR1 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 VC_FILTERED HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 VC_FILTERED HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 VC_FILTERED HET_VAR3_VAR4 0 NA
+INDEL NA12878 NA12878 VC_FILTERED HOM_VAR2 0 NA
+INDEL NA12878 NA12878 VC_FILTERED HOM_VAR3 0 NA
+INDEL NA12878 NA12878 VC_FILTERED NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED LOW_GQ 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED LOW_DP 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED VC_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED GT_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 VC_FILTERED IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED MISSING 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED HOM_REF 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED HET_REF_VAR1 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED HET_VAR1_VAR2 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED HOM_VAR1 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 GT_FILTERED HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 GT_FILTERED HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 GT_FILTERED HET_VAR3_VAR4 0 NA
+INDEL NA12878 NA12878 GT_FILTERED HOM_VAR2 0 NA
+INDEL NA12878 NA12878 GT_FILTERED HOM_VAR3 0 NA
+INDEL NA12878 NA12878 GT_FILTERED NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED LOW_GQ 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED LOW_DP 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED VC_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED GT_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 GT_FILTERED IS_MIXED 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED MISSING 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED HOM_REF 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED HET_REF_VAR1 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED HET_VAR1_VAR2 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED HOM_VAR1 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED HET_REF_VAR2 0 NA
+INDEL NA12878 NA12878 IS_MIXED HET_REF_VAR3 0 NA
+INDEL NA12878 NA12878 IS_MIXED HET_VAR1_VAR3 0 NA
+INDEL NA12878 NA12878 IS_MIXED HET_VAR3_VAR4 0 NA
+INDEL NA12878 NA12878 IS_MIXED HOM_VAR2 0 NA
+INDEL NA12878 NA12878 IS_MIXED HOM_VAR3 0 NA
+INDEL NA12878 NA12878 IS_MIXED NO_CALL 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED LOW_GQ 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED LOW_DP 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED VC_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED GT_FILTERED 0 EMPTY
+INDEL NA12878 NA12878 IS_MIXED IS_MIXED 0 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..ce0ed9f
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_AllRows TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 OUTPUT_ALL_ROWS=true INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRE [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:06:56 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12878 1 1 ? 1 1 ? 1 1 1 1 1
+INDEL NA12878 NA12878 ? ? ? ? ? ? ? ? ? ? ?
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..b638158
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12891 MIN_DP=40 INTERSECT_INTERVALS=true MIN_GQ=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:23 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12891 124 109 47 51 56
+INDEL NA12878 NA12891 0 0 0 0 0
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..26fe562
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_detail_metrics
@@ -0,0 +1,21 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12891 MIN_DP=40 INTERSECT_INTERVALS=true MIN_GQ=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:23 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12891 HOM_REF HET_REF_VAR1 27 FP,TN
+SNP NA12878 NA12891 HOM_REF LOW_DP 2 TN
+SNP NA12878 NA12891 HET_REF_VAR1 HOM_REF 25 TN,FN
+SNP NA12878 NA12891 HET_REF_VAR1 HET_REF_VAR1 47 TP,TN
+SNP NA12878 NA12891 HET_REF_VAR1 HOM_VAR1 20 TP,FP
+SNP NA12878 NA12891 HET_REF_VAR1 LOW_DP 8 TN,FN
+SNP NA12878 NA12891 HOM_VAR1 HET_REF_VAR1 17 TP,FN
+SNP NA12878 NA12891 HOM_VAR1 HOM_VAR1 40 TP
+SNP NA12878 NA12891 HOM_VAR1 LOW_DP 1 FN
+SNP NA12878 NA12891 LOW_DP HET_REF_VAR1 1 EMPTY
+SNP NA12878 NA12891 LOW_DP LOW_DP 6 EMPTY
+SNP NA12878 NA12891 VC_FILTERED VC_FILTERED 49 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..6300e2b
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinDp TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12891 MIN_DP=40 INTERSECT_INTERVALS=true MIN_GQ=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRE [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:07:32 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12891 0.67 0.703297 ? 0.76 0.75 ? 0.708571 0.725146 0.698718 0.584362 0.467742
+INDEL NA12878 NA12891 ? ? ? ? ? ? ? ? ? ? ?
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_contingency_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..674c3bc
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12891 MIN_GQ=40 INTERSECT_INTERVALS=true MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:21 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12891 130 111 53 49 51
+INDEL NA12878 NA12891 0 0 0 0 0
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_detail_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..f0d7e0f
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_detail_metrics
@@ -0,0 +1,20 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12891 MIN_GQ=40 INTERSECT_INTERVALS=true MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Tue Nov 04 11:44:21 EST 2014
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12891 HOM_REF HET_REF_VAR1 30 FP,TN
+SNP NA12878 NA12891 HET_REF_VAR1 HOM_REF 30 TN,FN
+SNP NA12878 NA12891 HET_REF_VAR1 HET_REF_VAR1 50 TP,TN
+SNP NA12878 NA12891 HET_REF_VAR1 HOM_VAR1 23 TP,FP
+SNP NA12878 NA12891 HET_REF_VAR1 LOW_GQ 1 TN,FN
+SNP NA12878 NA12891 HOM_VAR1 HET_REF_VAR1 17 TP,FN
+SNP NA12878 NA12891 HOM_VAR1 HOM_VAR1 40 TP
+SNP NA12878 NA12891 HOM_VAR1 LOW_GQ 1 FN
+SNP NA12878 NA12891 LOW_GQ HET_REF_VAR1 1 EMPTY
+SNP NA12878 NA12891 LOW_GQ LOW_GQ 1 EMPTY
+SNP NA12878 NA12891 VC_FILTERED VC_FILTERED 49 EMPTY
+
+
diff --git a/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_summary_metrics b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..1c5d38e
--- /dev/null
+++ b/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps_vs_CEUTrio-snps_GtConcordanceDiff_MinGq TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12891 MIN_GQ=40 INTERSECT_INTERVALS=true MIN_DP=0 OUTPUT_ALL_ROWS=false USE_VCF_INDEX=false MISSING_SITES_HOM_REF=false VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRE [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:08:00 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12891 0.701923 0.690722 ? 0.76 0.732558 ? 0.726257 0.710383 0.676829 0.576132 0.466321
+INDEL NA12878 NA12891 ? ? ? ? ? ? ? ? ? ? ?
+
+
diff --git a/testdata/picard/vcf/IntervalList1PerChrom.interval_list b/testdata/picard/vcf/IntervalList1PerChrom.interval_list
new file mode 100644
index 0000000..60b3225
--- /dev/null
+++ b/testdata/picard/vcf/IntervalList1PerChrom.interval_list
@@ -0,0 +1,103 @@
+ at HD VN:1.4 SO:unsorted
+ at SQ SN:1 LN:249250621
+ at SQ SN:2 LN:243199373
+ at SQ SN:3 LN:198022430
+ at SQ SN:4 LN:191154276
+ at SQ SN:5 LN:180915260
+ at SQ SN:6 LN:171115067
+ at SQ SN:7 LN:159138663
+ at SQ SN:8 LN:146364022
+ at SQ SN:9 LN:141213431
+ at SQ SN:10 LN:135534747
+ at SQ SN:11 LN:135006516
+ at SQ SN:12 LN:133851895
+ at SQ SN:13 LN:115169878
+ at SQ SN:14 LN:107349540
+ at SQ SN:15 LN:102531392
+ at SQ SN:16 LN:90354753
+ at SQ SN:17 LN:81195210
+ at SQ SN:18 LN:78077248
+ at SQ SN:19 LN:59128983
+ at SQ SN:20 LN:63025520
+ at SQ SN:21 LN:48129895
+ at SQ SN:22 LN:51304566
+ at SQ SN:X LN:155270560
+ at SQ SN:Y LN:59373566
+ at SQ SN:MT LN:16569
+ at SQ SN:GL000207.1 LN:4262
+ at SQ SN:GL000226.1 LN:15008
+ at SQ SN:GL000229.1 LN:19913
+ at SQ SN:GL000231.1 LN:27386
+ at SQ SN:GL000210.1 LN:27682
+ at SQ SN:GL000239.1 LN:33824
+ at SQ SN:GL000235.1 LN:34474
+ at SQ SN:GL000201.1 LN:36148
+ at SQ SN:GL000247.1 LN:36422
+ at SQ SN:GL000245.1 LN:36651
+ at SQ SN:GL000197.1 LN:37175
+ at SQ SN:GL000203.1 LN:37498
+ at SQ SN:GL000246.1 LN:38154
+ at SQ SN:GL000249.1 LN:38502
+ at SQ SN:GL000196.1 LN:38914
+ at SQ SN:GL000248.1 LN:39786
+ at SQ SN:GL000244.1 LN:39929
+ at SQ SN:GL000238.1 LN:39939
+ at SQ SN:GL000202.1 LN:40103
+ at SQ SN:GL000234.1 LN:40531
+ at SQ SN:GL000232.1 LN:40652
+ at SQ SN:GL000206.1 LN:41001
+ at SQ SN:GL000240.1 LN:41933
+ at SQ SN:GL000236.1 LN:41934
+ at SQ SN:GL000241.1 LN:42152
+ at SQ SN:GL000243.1 LN:43341
+ at SQ SN:GL000242.1 LN:43523
+ at SQ SN:GL000230.1 LN:43691
+ at SQ SN:GL000237.1 LN:45867
+ at SQ SN:GL000233.1 LN:45941
+ at SQ SN:GL000204.1 LN:81310
+ at SQ SN:GL000198.1 LN:90085
+ at SQ SN:GL000208.1 LN:92689
+ at SQ SN:GL000191.1 LN:106433
+ at SQ SN:GL000227.1 LN:128374
+ at SQ SN:GL000228.1 LN:129120
+ at SQ SN:GL000214.1 LN:137718
+ at SQ SN:GL000221.1 LN:155397
+ at SQ SN:GL000209.1 LN:159169
+ at SQ SN:GL000218.1 LN:161147
+ at SQ SN:GL000220.1 LN:161802
+ at SQ SN:GL000213.1 LN:164239
+ at SQ SN:GL000211.1 LN:166566
+ at SQ SN:GL000199.1 LN:169874
+ at SQ SN:GL000217.1 LN:172149
+ at SQ SN:GL000216.1 LN:172294
+ at SQ SN:GL000215.1 LN:172545
+ at SQ SN:GL000205.1 LN:174588
+ at SQ SN:GL000219.1 LN:179198
+ at SQ SN:GL000224.1 LN:179693
+ at SQ SN:GL000223.1 LN:180455
+ at SQ SN:GL000195.1 LN:182896
+ at SQ SN:GL000212.1 LN:186858
+ at SQ SN:GL000222.1 LN:186861
+ at SQ SN:GL000200.1 LN:187035
+ at SQ SN:GL000193.1 LN:189789
+ at SQ SN:GL000194.1 LN:191469
+ at SQ SN:GL000225.1 LN:211173
+ at SQ SN:GL000192.1 LN:547496
+1 7000000 70000000 + .
+1 90146500 90146600 + .
+2 198567600 198567700 + .
+3 158557100 158557200 + .
+4 141514800 141514900 + .
+5 58243300 58243400 + .
+6 89947100 89947200 + .
+7 29544600 29544700 + .
+8 132727500 132727600 + .
+10 56495800 56495900 + .
+11 132781000 132781000 + .
+12 79238900 79239000 + .
+13 28463900 28464000 + .
+14 87263500 87263600 + .
+15 92857300 92857400 + .
+17 33513600 33513700 + .
+19 3739000 3739100 + .
+20 21523300 21523400 + .
\ No newline at end of file
diff --git a/testdata/picard/vcf/IntervalListChr1Small.interval_list b/testdata/picard/vcf/IntervalListChr1Small.interval_list
new file mode 100644
index 0000000..aeaf43b
--- /dev/null
+++ b/testdata/picard/vcf/IntervalListChr1Small.interval_list
@@ -0,0 +1,86 @@
+ at HD VN:1.5 SO:unsorted
+ at SQ SN:1 LN:249250621
+ at SQ SN:2 LN:243199373
+ at SQ SN:3 LN:198022430
+ at SQ SN:4 LN:191154276
+ at SQ SN:5 LN:180915260
+ at SQ SN:6 LN:171115067
+ at SQ SN:7 LN:159138663
+ at SQ SN:8 LN:146364022
+ at SQ SN:9 LN:141213431
+ at SQ SN:10 LN:135534747
+ at SQ SN:11 LN:135006516
+ at SQ SN:12 LN:133851895
+ at SQ SN:13 LN:115169878
+ at SQ SN:14 LN:107349540
+ at SQ SN:15 LN:102531392
+ at SQ SN:16 LN:90354753
+ at SQ SN:17 LN:81195210
+ at SQ SN:18 LN:78077248
+ at SQ SN:19 LN:59128983
+ at SQ SN:20 LN:63025520
+ at SQ SN:21 LN:48129895
+ at SQ SN:22 LN:51304566
+ at SQ SN:X LN:155270560
+ at SQ SN:Y LN:59373566
+ at SQ SN:MT LN:16569
+ at SQ SN:GL000207.1 LN:4262
+ at SQ SN:GL000226.1 LN:15008
+ at SQ SN:GL000229.1 LN:19913
+ at SQ SN:GL000231.1 LN:27386
+ at SQ SN:GL000210.1 LN:27682
+ at SQ SN:GL000239.1 LN:33824
+ at SQ SN:GL000235.1 LN:34474
+ at SQ SN:GL000201.1 LN:36148
+ at SQ SN:GL000247.1 LN:36422
+ at SQ SN:GL000245.1 LN:36651
+ at SQ SN:GL000197.1 LN:37175
+ at SQ SN:GL000203.1 LN:37498
+ at SQ SN:GL000246.1 LN:38154
+ at SQ SN:GL000249.1 LN:38502
+ at SQ SN:GL000196.1 LN:38914
+ at SQ SN:GL000248.1 LN:39786
+ at SQ SN:GL000244.1 LN:39929
+ at SQ SN:GL000238.1 LN:39939
+ at SQ SN:GL000202.1 LN:40103
+ at SQ SN:GL000234.1 LN:40531
+ at SQ SN:GL000232.1 LN:40652
+ at SQ SN:GL000206.1 LN:41001
+ at SQ SN:GL000240.1 LN:41933
+ at SQ SN:GL000236.1 LN:41934
+ at SQ SN:GL000241.1 LN:42152
+ at SQ SN:GL000243.1 LN:43341
+ at SQ SN:GL000242.1 LN:43523
+ at SQ SN:GL000230.1 LN:43691
+ at SQ SN:GL000237.1 LN:45867
+ at SQ SN:GL000233.1 LN:45941
+ at SQ SN:GL000204.1 LN:81310
+ at SQ SN:GL000198.1 LN:90085
+ at SQ SN:GL000208.1 LN:92689
+ at SQ SN:GL000191.1 LN:106433
+ at SQ SN:GL000227.1 LN:128374
+ at SQ SN:GL000228.1 LN:129120
+ at SQ SN:GL000214.1 LN:137718
+ at SQ SN:GL000221.1 LN:155397
+ at SQ SN:GL000209.1 LN:159169
+ at SQ SN:GL000218.1 LN:161147
+ at SQ SN:GL000220.1 LN:161802
+ at SQ SN:GL000213.1 LN:164239
+ at SQ SN:GL000211.1 LN:166566
+ at SQ SN:GL000199.1 LN:169874
+ at SQ SN:GL000217.1 LN:172149
+ at SQ SN:GL000216.1 LN:172294
+ at SQ SN:GL000215.1 LN:172545
+ at SQ SN:GL000205.1 LN:174588
+ at SQ SN:GL000219.1 LN:179198
+ at SQ SN:GL000224.1 LN:179693
+ at SQ SN:GL000223.1 LN:180455
+ at SQ SN:GL000195.1 LN:182896
+ at SQ SN:GL000212.1 LN:186858
+ at SQ SN:GL000222.1 LN:186861
+ at SQ SN:GL000200.1 LN:187035
+ at SQ SN:GL000193.1 LN:189789
+ at SQ SN:GL000194.1 LN:191469
+ at SQ SN:GL000225.1 LN:211173
+ at SQ SN:GL000192.1 LN:547496
+1 7000000 70000000 + .
diff --git a/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_contingency_metrics b/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_contingency_metrics
new file mode 100644
index 0000000..abe7d13
--- /dev/null
+++ b/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_contingency_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/NIST.selected.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERVALS=[/Users/kbergin/picard/testdata/picard/vcf/IntervalList1PerChrom.interval_list] MISSING_SITES_HOM_REF=true INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=fa [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:15:59 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceContingencyMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TP_COUNT TN_COUNT FP_COUNT FN_COUNT EMPTY_COUNT
+SNP NA12878 NA12878 16 63001609 1 5 0
+INDEL NA12878 NA12878 0 63001618 0 0 0
+
+
diff --git a/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_detail_metrics b/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_detail_metrics
new file mode 100644
index 0000000..93d39d4
--- /dev/null
+++ b/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_detail_metrics
@@ -0,0 +1,17 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/NIST.selected.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERVALS=[/Users/kbergin/picard/testdata/picard/vcf/IntervalList1PerChrom.interval_list] MISSING_SITES_HOM_REF=true INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=fa [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:15:59 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceDetailMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE TRUTH_STATE CALL_STATE COUNT CONTINGENCY_VALUES
+SNP NA12878 NA12878 MISSING MISSING 63001594 TN
+SNP NA12878 NA12878 MISSING HET_REF_VAR1 1 FP,TN
+SNP NA12878 NA12878 MISSING VC_FILTERED 2 TN
+SNP NA12878 NA12878 HET_REF_VAR1 MISSING 1 TN,FN
+SNP NA12878 NA12878 HET_REF_VAR1 HET_REF_VAR1 11 TP,TN
+SNP NA12878 NA12878 HOM_VAR1 MISSING 4 FN
+SNP NA12878 NA12878 HOM_VAR1 HOM_VAR1 5 TP
+INDEL NA12878 NA12878 MISSING MISSING 63001618 TN
+
+
diff --git a/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_summary_metrics b/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_summary_metrics
new file mode 100644
index 0000000..159e735
--- /dev/null
+++ b/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff.genotype_concordance_summary_metrics
@@ -0,0 +1,11 @@
+## htsjdk.samtools.metrics.StringHeader
+# picard.vcf.GenotypeConcordance TRUTH_VCF=/Users/kbergin/picard/testdata/picard/vcf/NIST.selected.vcf CALL_VCF=/Users/kbergin/picard/testdata/picard/vcf/CEUTrio-snps.vcf OUTPUT=/Users/kbergin/picard/testdata/picard/vcf/NIST-truth-snps_vs_CEUTrio-snps_GtConcordanceDiff TRUTH_SAMPLE=NA12878 CALL_SAMPLE=NA12878 INTERVALS=[/Users/kbergin/picard/testdata/picard/vcf/IntervalList1PerChrom.interval_list] MISSING_SITES_HOM_REF=true INTERSECT_INTERVALS=true MIN_GQ=0 MIN_DP=0 OUTPUT_ALL_ROWS=fa [...]
+## htsjdk.samtools.metrics.StringHeader
+# Started on: Wed Jul 29 14:15:59 EDT 2015
+
+## METRICS CLASS picard.vcf.GenotypeConcordanceSummaryMetrics
+VARIANT_TYPE TRUTH_SAMPLE CALL_SAMPLE HET_SENSITIVITY HET_PPV HET_SPECIFICITY HOMVAR_SENSITIVITY HOMVAR_PPV HOMVAR_SPECIFICITY VAR_SENSITIVITY VAR_PPV VAR_SPECIFICITY GENOTYPE_CONCORDANCE NON_REF_GENOTYPE_CONCORDANCE
+SNP NA12878 NA12878 0.916667 0.916667 ? 0.555556 1 ? 0.761905 0.941176 1 1 0.727273
+INDEL NA12878 NA12878 ? ? ? ? ? ? ? ? 1 1 ?
+
+
diff --git a/testdata/picard/vcf/NIST.selected.vcf b/testdata/picard/vcf/NIST.selected.vcf
new file mode 100644
index 0000000..d0c1102
--- /dev/null
+++ b/testdata/picard/vcf/NIST.selected.vcf
@@ -0,0 +1,195 @@
+##fileformat=VCFv4.1
+##FILTER=<ID=Uncertain,Description="Uncertain genotype due to reason in filter INFO field">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Total read depth summed across all datasets, excluding MQ0 reads">
+##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Net Genotype quality across all datasets, defined as difference between most likely and next most likely genotype likelihoods">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Net Genotype across all datasets">
+##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods summed across all unfiltered datasets for genotypes as defined in the VCF specification">
+##GATKCommandLine.SelectVariants=<ID=SelectVariants,Version=3.4-33-g9cd2cd4,Date="Wed Jun 24 13:34:15 EDT 2015",Epoch=1435167255521,CommandLineOptions="analysis_type=SelectVariants input_file=[] showFullBamList=false read_buffer_size=null phone_home=AWS gatk_key=null tag=NA read_filter=[] disable_read_filter=[] intervals=[/seq/tng/kbergin/genotype_concordance_tests/NIST_test.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_seq [...]
+##GATKCommandLine=<ID=CombineVariants,Version=3.3-112-g49c8efd,Date="Thu Jan 22 15:25:05 EST 2015",Epoch=1421958305028,CommandLineOptions="analysis_type=CombineVariants input_file=[] showFullBamList=false read_buffer_size=null phone_home=AWS gatk_key=null tag=NA read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/1kg/reference/human_g1k_v37.fasta nonDeterministicRandomSeed=false disableDithering=fa [...]
+##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=BasesToClosestVariant,Number=1,Type=Integer,Description="Number of bases to the closest variant in the file.">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
+##INFO=<ID=DPSum,Number=1,Type=Integer,Description="Total read depth summed across all datasets, excluding MQ0 reads">
+##INFO=<ID=Entropy,Number=1,Type=Float,Description="Shannon entropy of variant flanking regions, 12bp on both sides">
+##INFO=<ID=HRun,Number=1,Type=Integer,Description="Largest Contiguous Homopolymer Run of Variant Allele In Either Direction">
+##INFO=<ID=HapNoVar,Number=1,Type=Integer,Description="Number of datasets for which HaplotypeCaller called a variant within 35bp and did not call a variant at this location">
+##INFO=<ID=LEN,Number=A,Type=Integer,Description="allele length">
+##INFO=<ID=NoCG,Number=0,Type=Flag,Description="Present if no consensus reached, so looked at all datasets except Complete Genomics since it may have a different representation of complex variants">
+##INFO=<ID=NoPLTot,Number=1,Type=Integer,Description="Number of datasets with likelihood ratio > 20 for a genotype different from the called genotype">
+##INFO=<ID=PL454WG,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~16x 454 whole genome sequencing from 1000 Genomes Project, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLCG,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~73x Complete Genomics whole genome sequencing, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLHSWEx,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~66x 2x100bp Illumina exome sequencing from Broad Institute, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLHSWG,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~68x 2x100bp Illumina whole genome sequencing from Broad Institute, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLILL250,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~50x 2x250bp Illumina PCR-free whole genome sequencing from Broad Institute, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLILLCLIA,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~80x 2x100bp Illumina whole genome sequencing from Illumina CLIA lab, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLILLWEx,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~30x 2x54bp Illumina exome sequencing from Broad Institute, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLILLWG,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~39x 2x44bp Illumina whole genome sequencing from Broad Institute, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLIllPCRFree,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~56x 2x100bp Illumina PCR-free whole genome sequencing from Illumina Platinum Genomes Project, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLIonEx,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~80x mean 237bp Ion Torrent exome sequencing from Life Technologies, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLPlatGen,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~190x 2x100bp Illumina PCR-free whole genome sequencing from Illumina Platinum Genomes Project, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLXIll,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~37x 2x100bp Illumina whole genome sequencing from X Prize, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLXPSolWGLS,Number=.,Type=String,Description="Genotype likelihoods (PL) for ~24x 50bpx35bp SOLiD whole genome sequencing from X Prize, preceded by filtering info if this dataset was not used due to evidence of bias">
+##INFO=<ID=PLminsum,Number=1,Type=Integer,Description="Net Genotype quality across all datasets, defined as difference between most likely and next most likely genotype likelihoods">
+##INFO=<ID=PLminsumOverDP,Number=1,Type=Float,Description="Net Genotype quality across all datasets, defined as difference between most likely and next most likely genotype likelihoods, divided by the depth of coverage">
+##INFO=<ID=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=TYPE,Number=A,Type=String,Description="The type of allele, either snp, mnp, ins, del, or complex.">
+##INFO=<ID=TrancheABQDmin2,Number=1,Type=Float,Description="2nd lowest VQSR tranche for the called genotype for annotations associated with abnormal allele balance (AB and QD)">
+##INFO=<ID=TrancheAlignmin2,Number=1,Type=Float,Description="2nd lowest VQSR tranche for the called genotype for annotations associated with local alignment errors (distance from the end of the read and clipping)">
+##INFO=<ID=TrancheMapmin2,Number=1,Type=Float,Description="2nd lowest VQSR tranche for the called genotype for annotations associated with mapping errors (mapping quality and depth of coverage)">
+##INFO=<ID=TrancheSSEmin2,Number=1,Type=Float,Description="2nd lowest VQSR tranche for the called genotype for annotations associated with systematic sequencing errors (strand bias and neighboring base quality)">
+##INFO=<ID=YesPLtot,Number=1,Type=Integer,Description="Number of datasets with likelihood ratio > 20 for the called genotype">
+##INFO=<ID=allalts,Number=1,Type=Integer,Description="All ALT alleles originally considered at this position">
+##INFO=<ID=datasetcalls,Number=1,Type=Integer,Description="Number of datasets with any genotype call at this position">
+##INFO=<ID=filter,Number=1,Type=String,Description="Reason for filtering this genotype as uncertain">
+##INFO=<ID=geno,Number=1,Type=Integer,Description="Most probable genotype, corresponding to the minimum entry in the PL field (e.g., 1=0/0,2=0/1,3=1/1,4=0/2,etc)">
+##INFO=<ID=genoMapGood,Number=1,Type=Integer,Description="Number of datasets calling this genotype with VQSR mapping tranche <= 95">
+##INFO=<ID=platformbias,Number=.,Type=String,Description="Names of platforms that have at more than twice as many incorrect than correct genotypes at this location, indicating platform-specific bias (ill=Illumina,sol=SOLiD,454=454,ion=Ion Torrent,cg=Complete Genomics)">
+##INFO=<ID=platformnames,Number=.,Type=String,Description="Names of platforms that called this genotype (ill=Illumina,sol=SOLiD,454=454,ion=Ion Torrent,cg=Complete Genomics)">
+##INFO=<ID=platforms,Number=1,Type=Integer,Description="Number of different platforms that called this genotype">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##INFO=<ID=varType,Number=1,Type=String,Description="Type of variant">
+##SelectVariants="analysis_type=SelectVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/projects/scratch-data-backup/justin.zook/NA12878/bed/union13callableMQonlymerged_addcert_nouncert_excludesimplerep_excludesegdups_excludedecoy_excludeRepSeqSTRs_noCNVs_v2.18_2mindatasets_5minYesNoRatio.bed] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/projects/scratch-data-backup [...]
+##contig=<ID=1,length=249250621>
+##contig=<ID=2,length=243199373>
+##contig=<ID=3,length=198022430>
+##contig=<ID=4,length=191154276>
+##contig=<ID=5,length=180915260>
+##contig=<ID=6,length=171115067>
+##contig=<ID=7,length=159138663>
+##contig=<ID=8,length=146364022>
+##contig=<ID=9,length=141213431>
+##contig=<ID=10,length=135534747>
+##contig=<ID=11,length=135006516>
+##contig=<ID=12,length=133851895>
+##contig=<ID=13,length=115169878>
+##contig=<ID=14,length=107349540>
+##contig=<ID=15,length=102531392>
+##contig=<ID=16,length=90354753>
+##contig=<ID=17,length=81195210>
+##contig=<ID=18,length=78077248>
+##contig=<ID=19,length=59128983>
+##contig=<ID=20,length=63025520>
+##contig=<ID=21,length=48129895>
+##contig=<ID=22,length=51304566>
+##contig=<ID=X,length=155270560>
+##contig=<ID=Y,length=59373566>
+##contig=<ID=MT,length=16569>
+##contig=<ID=GL000207.1,length=4262>
+##contig=<ID=GL000226.1,length=15008>
+##contig=<ID=GL000229.1,length=19913>
+##contig=<ID=GL000231.1,length=27386>
+##contig=<ID=GL000210.1,length=27682>
+##contig=<ID=GL000239.1,length=33824>
+##contig=<ID=GL000235.1,length=34474>
+##contig=<ID=GL000201.1,length=36148>
+##contig=<ID=GL000247.1,length=36422>
+##contig=<ID=GL000245.1,length=36651>
+##contig=<ID=GL000197.1,length=37175>
+##contig=<ID=GL000203.1,length=37498>
+##contig=<ID=GL000246.1,length=38154>
+##contig=<ID=GL000249.1,length=38502>
+##contig=<ID=GL000196.1,length=38914>
+##contig=<ID=GL000248.1,length=39786>
+##contig=<ID=GL000244.1,length=39929>
+##contig=<ID=GL000238.1,length=39939>
+##contig=<ID=GL000202.1,length=40103>
+##contig=<ID=GL000234.1,length=40531>
+##contig=<ID=GL000232.1,length=40652>
+##contig=<ID=GL000206.1,length=41001>
+##contig=<ID=GL000240.1,length=41933>
+##contig=<ID=GL000236.1,length=41934>
+##contig=<ID=GL000241.1,length=42152>
+##contig=<ID=GL000243.1,length=43341>
+##contig=<ID=GL000242.1,length=43523>
+##contig=<ID=GL000230.1,length=43691>
+##contig=<ID=GL000237.1,length=45867>
+##contig=<ID=GL000233.1,length=45941>
+##contig=<ID=GL000204.1,length=81310>
+##contig=<ID=GL000198.1,length=90085>
+##contig=<ID=GL000208.1,length=92689>
+##contig=<ID=GL000191.1,length=106433>
+##contig=<ID=GL000227.1,length=128374>
+##contig=<ID=GL000228.1,length=129120>
+##contig=<ID=GL000214.1,length=137718>
+##contig=<ID=GL000221.1,length=155397>
+##contig=<ID=GL000209.1,length=159169>
+##contig=<ID=GL000218.1,length=161147>
+##contig=<ID=GL000220.1,length=161802>
+##contig=<ID=GL000213.1,length=164239>
+##contig=<ID=GL000211.1,length=166566>
+##contig=<ID=GL000199.1,length=169874>
+##contig=<ID=GL000217.1,length=172149>
+##contig=<ID=GL000216.1,length=172294>
+##contig=<ID=GL000215.1,length=172545>
+##contig=<ID=GL000205.1,length=174588>
+##contig=<ID=GL000219.1,length=179198>
+##contig=<ID=GL000224.1,length=179693>
+##contig=<ID=GL000223.1,length=180455>
+##contig=<ID=GL000195.1,length=182896>
+##contig=<ID=GL000212.1,length=186858>
+##contig=<ID=GL000222.1,length=186861>
+##contig=<ID=GL000200.1,length=187035>
+##contig=<ID=GL000193.1,length=189789>
+##contig=<ID=GL000194.1,length=191469>
+##contig=<ID=GL000225.1,length=211173>
+##contig=<ID=GL000192.1,length=547496>
+##fileDate=20130719
+##phasing=none
+##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta
+##source=SelectVariants
+##variants_justified=left
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878
+1 90146546 . C T 22132 PASS set=Intersection GT:GQ 1/1:99
+1 165431906 . G T 10461 PASS set=Intersection GT:GQ 0/1:99
+1 175207612 . C T 10310 PASS set=Intersection GT:GQ 0/1:99
+1 204945934 . A G 10817 PASS set=Intersection GT:GQ 0/1:99
+1 216407409 . A G 27263 PASS set=Intersection GT:GQ 1/1:99
+2 18016237 . A T 10777 PASS set=Intersection GT:GQ 0/1:99
+2 36994439 . A C 11382 PASS set=Intersection GT:GQ 0/1:99
+2 117966808 . C T 19486 PASS set=Intersection GT:GQ 1/1:99
+2 198567638 . C G 10926 PASS set=Intersection GT:GQ 0/1:99
+3 1609737 . A G 22117 PASS set=Intersection GT:GQ 1/1:99
+3 8399330 . G A 26241 PASS set=Intersection GT:GQ 1/1:99
+3 86234718 . T C 26189 PASS set=Intersection GT:GQ 1/1:99
+3 158557110 . G A 11082 PASS set=Intersection GT:GQ 0/1:99
+4 141514835 . C T 10121 PASS set=Intersection GT:GQ 0/1:99
+5 36740339 . T G 26764 PASS set=Intersection GT:GQ 1/1:99
+5 58243302 . A C 25714 PASS set=Intersection GT:GQ 1/1:99
+5 58243332 . A G 25595 PASS set=Intersection GT:GQ 1/1:99
+5 80900719 . G T 10479 PASS set=Intersection GT:GQ 0/1:99
+6 1620147 . T C 11746 PASS set=Intersection GT:GQ 1/1:99
+6 45421630 . C T 10594 PASS set=Intersection GT:GQ 0/1:99
+6 89947113 . T C 20994 PASS set=Intersection GT:GQ 1/1:99
+6 89947117 . A G 21732 PASS set=Intersection GT:GQ 1/1:99
+6 89947132 . T C 20282 PASS set=Intersection GT:GQ 1/1:99
+7 29544610 . A T 11708 PASS set=Intersection GT:GQ 0/1:99
+8 78181000 . A G 21324 PASS set=Intersection GT:GQ 1/1:99
+8 132727531 . G A 10322 PASS set=Intersection GT:GQ 0/1:99
+10 4588547 . C T 10251 PASS set=Intersection GT:GQ 0/1:99
+10 11560326 . C T 10908 PASS set=Intersection GT:GQ 0/1:99
+10 56495833 . G A 20583 PASS set=Intersection GT:GQ 1/1:99
+10 125452232 . A G 23683 PASS set=Intersection GT:GQ 1/1:99
+11 113825164 . A G 19625 PASS set=Intersection GT:GQ 1/1:99
+11 123470819 . T C 28494 PASS set=Intersection GT:GQ 1/1:99
+11 132781000 . A G 22301 PASS set=Intersection GT:GQ 1/1:99
+12 21328424 . G C 10421 PASS set=Intersection GT:GQ 0/1:99
+12 79238948 . C T 10286 PASS set=Intersection GT:GQ 0/1:99
+13 21520045 . A C 21480 PASS set=Intersection GT:GQ 1/1:99
+13 28463938 . C T 10331 PASS set=Intersection GT:GQ 0/1:99
+13 28463951 . T C 10701 PASS set=Intersection GT:GQ 0/1:99
+13 101976707 . A T 25942 PASS set=Intersection GT:GQ 1/1:99
+13 109990322 . T C 23492 PASS set=Intersection GT:GQ 1/1:99
+14 56951735 . G A 25351 PASS set=Intersection GT:GQ 1/1:99
+14 87263523 . A C 22724 PASS set=Intersection GT:GQ 1/1:99
+15 42065422 . A C 25928 PASS set=Intersection GT:GQ 1/1:99
+15 92857342 . A G 11592 PASS set=Intersection GT:GQ 0/1:99
+17 33513649 . A G 12636 PASS set=Intersection GT:GQ 0/1:99
+17 55158811 . G A 10653 PASS set=Intersection GT:GQ 0/1:99
+18 10010426 . T C 21171 PASS set=Intersection GT:GQ 1/1:99
+18 67950442 . T G 11593 PASS set=Intersection GT:GQ 0/1:99
+19 3739001 . C T 11767 PASS set=Intersection GT:GQ 0/1:99
+20 21523349 . A G 10349 PASS set=Intersection GT:GQ 0/1:99
+20 51353834 . G A 10496 PASS set=Intersection GT:GQ 0/1:99
diff --git a/testdata/picard/vcf/NIST.selected.vcf.idx b/testdata/picard/vcf/NIST.selected.vcf.idx
new file mode 100644
index 0000000..3a0f3d9
Binary files /dev/null and b/testdata/picard/vcf/NIST.selected.vcf.idx differ
diff --git a/testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf b/testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf
new file mode 100644
index 0000000..b80d059
--- /dev/null
+++ b/testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf
@@ -0,0 +1,171 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891
+1 10000000 mikes_made_up_variant GTTGTG G 743.25 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.321;DB;DP=214;FS=2.265;HaplotypeScore=77.3263;MLEAC=3;MLEAF=0.500;MQ=55.48;MQ0=0;MQRankSum=0.114;QD=3.47;RPA=19,18;RU=T;ReadPosRankSum=0.884;SB=-3.070e+02;STR;VQSLOD=2.0987;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:60,12:82:67:292,0,67:18 0/1:55,7:69:42:245,0,42:18
+1 36900350 rs72008966 C CA 137.53 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.837;DB;DP=139;FS=0.000;HaplotypeScore=32.7946;MLEAC=3;MLEAF=0.500;MQ=49.20;MQ0=3;MQRankSum=0.772;QD=0.99;RPA=22,23;RU=A;ReadPosRankSum=-3.220;SB=-4.273e+01;STR;VQSLOD=1.8721;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,7:44:41:70,0,41:9 0/1:48,0:47:20:20,0,41:9
+1 120811174 . C CA 74.77 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.393;DP=148;FS=0.000;HaplotypeScore=20.3510;MLEAC=5;MLEAF=0.833;MQ=15.79;MQ0=88;MQRankSum=-0.348;QD=0.51;RPA=24,25;RU=A;ReadPosRankSum=-1.044;SB=-1.531e+01;STR;VQSLOD=5.0896;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:47,5:9:11:53,11,0:3 1|0:51,0:15:5:37,0,5:3
+1 235750933 rs111686144 GA G 679.19 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.042;DB;DP=64;FS=7.388;HaplotypeScore=400.1973;MLEAC=4;MLEAF=0.667;MQ=32.98;MQ0=0;MQRankSum=-0.059;QD=10.61;ReadPosRankSum=2.445;SB=-1.575e+02;VQSLOD=-0.3140;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:12,0:12:6:110,0,6:6 1|1:9,9:19:31:491,31,0:6
+2 75490647 rs112304545 T TGG 1000.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.322;DB;DP=188;FS=0.785;HaplotypeScore=58.7199;MLEAC=4;MLEAF=0.667;MQ=57.19;MQ0=0;MQRankSum=-0.229;QD=5.32;RPA=10,12;RU=G;ReadPosRankSum=-2.534;SB=-4.650e+02;STR;VQSLOD=2.6886;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:33,35:76:57:976,57,0:56 1|0:39,3:49:38:38,0,730:56
+2 107234623 rs35291621 GTA G 7569 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.652;DB;DP=242;FS=7.837;HaplotypeScore=19.3113;MLEAC=4;MLEAF=0.667;MQ=60.04;MQ0=1;MQRankSum=-0.157;QD=31.28;ReadPosRankSum=1.661;SB=-3.633e+03;VQSLOD=4.2975;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:46,30:76:99:1290,0,2120:127 0|1:35,66:102:99:2998,0,1435:127
+2 133338909 rs72548244 CT C 2103.21 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.444;DB;DP=212;FS=5.224;HaplotypeScore=27.6263;MLEAC=5;MLEAF=0.833;MQ=59.64;MQ0=0;MQRankSum=2.430;QD=9.92;RPA=15,14;RU=T;ReadPosRankSum=2.784;SB=-1.050e+03;STR;VQSLOD=2.6610;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:17,39:59:61:837,61,0:60 1|0:47,22:72:99:241,0,444:60
+2 218911764 . TA T 229.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.591;DP=218;FS=1.761;HaplotypeScore=32.5745;MLEAC=3;MLEAF=0.500;MQ=57.41;MQ0=0;MQRankSum=1.792;QD=1.05;RPA=19,18;RU=A;ReadPosRankSum=0.676;SB=-1.060e+02;STR;VQSLOD=2.3065;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:56,5:65:99:101,0,313:70 0/1:59,18:82:99:105,0,395:70
+3 37334187 rs112182713 G GGTT 1235.20 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.420;DB;DP=233;FS=10.653;HaplotypeScore=68.3055;MLEAC=1;MLEAF=0.167;MQ=56.19;MQ0=0;MQRankSum=-1.868;QD=17.65;RPA=1,2;RU=GTT;ReadPosRankSum=1.383;SB=-4.490e+02;STR;VQSLOD=3.1411;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:83,0:83:99:0,244,4702:127 0|0:79,0:77:99:0,220,4149:127
+3 118367863 rs71617664 TAGATAGATTA T 12039 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.121;DB;DP=201;FS=9.449;HaplotypeScore=212.5016;MLEAC=6;MLEAF=1.00;MQ=55.55;MQ0=1;MQRankSum=1.584;QD=59.90;ReadPosRankSum=0.721;SB=-5.599e+03;VQSLOD=-0.4074;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:13,57:71:99:4299,164,0:127 1|1:60,4:64:99:3312,174,0:127
+3 168108331 rs35075740 TA T 51.36 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.784;DB;DP=162;FS=3.973;HaplotypeScore=20.3755;MLEAC=3;MLEAF=0.500;MQ=55.92;MQ0=0;MQRankSum=3.470;QD=0.32;RPA=18,17;RU=A;ReadPosRankSum=1.956;SB=-7.120e+00;STR;VQSLOD=2.1011;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:46,5:53:16:16,0,313:15 0/1:46,12:60:61:61,0,267:15
+4 92648168 rs61329801 A ATTTG 7717 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.947;DB;DP=186;FS=8.292;HaplotypeScore=7.8810;MLEAC=4;MLEAF=0.667;MQ=56.58;MQ0=0;MQRankSum=-0.174;QD=41.49;ReadPosRankSum=-0.444;SB=-3.591e+03;VQSLOD=3.5165;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:45,35:80:99:2213,0,2213:127 1|1:3,59:62:99:4128,181,0:127
+4 114869733 rs11381039 A AT 2798.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.957;DB;DP=267;FS=4.371;HaplotypeScore=26.3590;MLEAC=3;MLEAF=0.500;MQ=59.97;MQ0=0;MQRankSum=0.673;QD=10.48;RPA=8,9;RU=T;ReadPosRankSum=-1.351;SB=-1.173e+03;STR;VQSLOD=5.5505;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:47,41:89:99:994,0,1219:127 0/1:50,41:92:99:1063,0,1043:127
+4 152029268 . CT C 358.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.688;DP=199;FS=13.724;HaplotypeScore=32.5739;MLEAC=2;MLEAF=0.333;MQ=55.17;MQ0=0;MQRankSum=-0.915;QD=2.42;RPA=17,16;RU=T;ReadPosRankSum=0.548;SB=-1.419e+02;STR;VQSLOD=0.3925;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:50,15:75:99:301,0,225:38 1|0:56,11:72:99:105,0,209:38
+6 31390139 rs72548006 T TA 2159.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.491;DB;DP=257;FS=2.384;HaplotypeScore=26.8869;MLEAC=2;MLEAF=0.333;MQ=59.99;MQ0=0;MQRankSum=1.589;QD=12.85;RPA=5,6;RU=A;ReadPosRankSum=1.851;SB=-9.710e+02;STR;VQSLOD=5.5307;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,37:89:99:1076,0,1364:127 0|0:89,0:89:99:0,256,3112:127
+6 63303894 rs34270846 T TC 7366 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.312;DB;DP=202;FS=2.807;HaplotypeScore=88.2916;MLEAC=5;MLEAF=0.833;MQ=61.10;MQ0=0;MQRankSum=-0.390;QD=36.47;ReadPosRankSum=-0.315;SB=-2.762e+03;VQSLOD=3.8558;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3885,265,0:127 1|0:29,25:54:99:999,0,1050:127
+6 100462085 rs113348222 G GT 5284 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-0.046;DB;DP=285;FS=7.484;HaplotypeScore=252.0890;MLEAC=5;MLEAF=0.833;MQ=60.07;MQ0=0;MQRankSum=1.241;QD=18.54;RPA=10,11;RU=T;ReadPosRankSum=-2.539;SB=-2.505e+03;STR;VQSLOD=2.2089;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:8,79:94:99:2218,200,0:127 1|0:54,37:97:99:818,0,914:127
+6 169196022 . T TG 229.23 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.887;DP=84;FS=7.129;HaplotypeScore=6.4344;MLEAC=2;MLEAF=0.333;MQ=39.46;MQ0=16;MQRankSum=2.277;QD=3.82;RPA=6,7;RU=G;ReadPosRankSum=-0.983;SB=-2.849e+01;STR;VQSLOD=1.3456;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:19,10:15:78:78,0,88:27 1|0:17,13:21:99:199,0,172:27
+7 20767781 rs150977587 TA T 2754.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.295;DB;DP=259;FS=0.000;HaplotypeScore=122.4991;MLEAC=4;MLEAF=0.667;MQ=59.41;MQ0=1;MQRankSum=-0.640;QD=10.63;RPA=13,12;RU=A;ReadPosRankSum=0.189;SB=-1.344e+03;STR;VQSLOD=3.3002;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:59,45:107:99:923,0,795:116 1|1:15,54:72:99:1313,116,0:116
+7 134269995 rs67235184 G GA 2917.20 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.835;DB;DP=219;FS=1.093;HaplotypeScore=39.1434;MLEAC=3;MLEAF=0.500;MQ=59.44;MQ0=0;MQRankSum=-0.037;QD=19.19;RPA=7,8;RU=A;ReadPosRankSum=-0.921;SB=-1.316e+03;STR;VQSLOD=5.1149;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:51,33:84:99:916,0,1151:127 1|1:2,65:68:99:2055,192,0:127
+8 30862954 rs149290124 C CA 3883 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.321;DB;DP=261;FS=0.755;HaplotypeScore=37.2657;MLEAC=5;MLEAF=0.833;MQ=58.08;MQ0=0;MQRankSum=0.330;QD=14.88;RPA=11,12;RU=A;ReadPosRankSum=-0.578;SB=-1.926e+03;STR;VQSLOD=5.3659;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:21,76:105:99:1980,179,0:91 1|0:51,22:75:99:597,0,485:91
+9 9066127 rs57751104 ATATT A 4412 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-0.088;DB;DP=214;FS=8.470;HaplotypeScore=16.5868;MLEAC=2;MLEAF=0.333;MQ=58.75;MQ0=0;MQRankSum=0.462;QD=29.61;RPA=2,1;RU=TATT;ReadPosRankSum=1.377;SB=-1.837e+03;STR;VQSLOD=4.4209;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:41,36:79:99:2129,0,2123:127 1|0:32,38:70:99:2283,0,1679:127
+9 33446281 . C CT 31.72 VQSRTrancheINDEL99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.119;DP=178;FS=127.572;HaplotypeScore=21.5544;MLEAC=1;MLEAF=0.167;MQ=58.69;MQ0=0;MQRankSum=1.608;QD=0.62;RPA=2,3;RU=T;ReadPosRankSum=-5.268;SB=-4.493e+00;STR;VQSLOD=-10.5680;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:77,0:79:73:0,73,2094:6 0|0:46,0:48:5:0,5,958:6
+9 118670009 rs66523513 CT C 5633 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-0.066;DB;DP=222;FS=6.403;HaplotypeScore=30.7213;MLEAC=6;MLEAF=1.00;MQ=59.97;MQ0=0;MQRankSum=0.490;QD=25.37;RPA=11,10;RU=T;ReadPosRankSum=2.429;SB=-2.667e+03;STR;VQSLOD=3.3873;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:6,71:78:99:2079,216,0:120 1|1:10,54:65:99:1524,120,0:120
+10 46605359 . CT C 883.20 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.618;DP=136;FS=9.661;HaplotypeScore=4.7050;MLEAC=3;MLEAF=0.500;MQ=22.12;MQ0=1;MQRankSum=0.368;QD=8.57;RPA=7,6;RU=T;ReadPosRankSum=-1.076;SB=-1.190e+02;STR;VQSLOD=2.5501;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:33,0:32:90:0,90,1016:25 0|1:66,15:81:99:303,0,1810:25
+11 3839556 rs5789310 CA C 803.10 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.138;DB;DP=170;FS=4.498;HaplotypeScore=36.6392;MLEAC=3;MLEAF=0.500;MQ=55.95;MQ0=2;MQRankSum=2.278;QD=4.72;RPA=17,16;RU=A;ReadPosRankSum=3.210;SB=-3.839e+02;STR;VQSLOD=1.8082;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:35,17:55:32:329,0,32:3 0/1:45,9:57:8:276,0,8:3
+11 96559202 rs72048706 C CAA 373.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-0.796;DB;DP=121;FS=1.541;HaplotypeScore=64.5478;MLEAC=4;MLEAF=0.667;MQ=39.96;MQ0=6;MQRankSum=-0.539;QD=3.08;RPA=21,23;RU=A;ReadPosRankSum=-3.583;SB=-1.985e+02;STR;VQSLOD=1.3071;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:20,8:32:24:111,0,24:22 1|1:40,0:41:29:180,29,0:22
+12 68921960 . TATTTTC T 803.22 VQSRTrancheINDEL99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=9.862;DP=270;FS=190.603;HaplotypeScore=223.0660;MLEAC=3;MLEAF=0.500;MQ=54.84;MQ0=1;MQRankSum=-4.552;QD=2.97;ReadPosRankSum=-6.674;SB=-1.330e-03;VQSLOD=-17.7657;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:69,22:95:99:394,0,4974:101 0/1:87,0:86:99:355,0,5072:101
+14 28032147 rs67442200 AT A 9959 PASS AC=6;AF=1.00;AN=6;DB;DP=259;FS=0.000;HaplotypeScore=15.2854;MLEAC=6;MLEAF=1.00;MQ=60.66;MQ0=0;QD=38.45;RPA=3,2;RU=T;SB=-4.646e+03;STR;VQSLOD=6.0102;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:2,86:91:99:3493,259,0:127 1|1:3,76:79:99:3025,226,0:12
+14 77813103 rs59474357 G GT 328.58 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.653;DB;DP=164;FS=5.220;HaplotypeScore=117.8567;MLEAC=5;MLEAF=0.833;MQ=52.18;MQ0=0;MQRankSum=1.259;QD=2.00;RPA=24,25;RU=T;ReadPosRankSum=-1.030;SB=-1.639e+02;STR;VQSLOD=2.1577;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:51,1:53:18:105,0,18:6 1|1:58,1:59:13:150,13,0:6
+15 32615218 . G GA 82.61 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.361;DP=225;FS=0.000;HaplotypeScore=2.4894;MLEAC=4;MLEAF=0.667;MQ=5.76;MQ0=211;MQRankSum=-0.876;QD=0.56;RPA=9,10;RU=A;ReadPosRankSum=-1.159;SB=-1.330e-03;STR;VQSLOD=3.7374;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:41,19:3:9:88,9,0:5 1|0:62,24:5:44:44,0,77:5
+15 83241984 rs11336258 AT A 1748.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.821;DB;DP=199;FS=5.740;HaplotypeScore=29.9449;MLEAC=4;MLEAF=0.667;MQ=59.67;MQ0=0;MQRankSum=1.120;QD=8.78;RPA=15,14;RU=T;ReadPosRankSum=-1.763;SB=-7.830e+02;STR;VQSLOD=3.4938;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:41,27:72:99:434,0,434:118 0|1:36,26:66:99:470,0,275:118
+16 19633462 rs11371821 C CT 239.23 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.097;DB;DP=182;FS=1.344;HaplotypeScore=21.2638;MLEAC=4;MLEAF=0.667;MQ=50.55;MQ0=0;MQRankSum=-1.358;QD=1.31;RPA=22,23;RU=T;ReadPosRankSum=-3.963;SB=-9.798e+01;STR;VQSLOD=2.3127;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:61,0:63:45:70,0,45:24 1|1:44,15:58:28:192,28,0:24
+16 77418810 rs71137811 T TG 7389 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.643;DB;DP=244;FS=2.246;HaplotypeScore=114.4097;MLEAC=5;MLEAF=0.833;MQ=61.09;MQ0=0;MQRankSum=2.492;QD=30.28;ReadPosRankSum=2.982;SB=-2.597e+03;VQSLOD=2.9140;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:8,84:93:99:3558,264,0:127 1|1:8,65:75:99:2723,179,0:127
+17 75679403 . TGTG T 1024.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.617;DP=161;FS=1.686;HaplotypeScore=259.3227;MLEAC=2;MLEAF=0.333;MQ=51.57;MQ0=0;MQRankSum=-8.617;QD=9.48;ReadPosRankSum=-0.498;SB=-4.680e+02;VQSLOD=1.7645;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:29,19:58:99:711,0,1547:127 1|0:34,11:50:99:361,0,1922:127
+18 30361151 rs35024407 T TTG 9768 PASS AC=6;AF=1.00;AN=6;DB;DP=234;FS=0.000;HaplotypeScore=13.0982;MLEAC=6;MLEAF=1.00;MQ=60.40;MQ0=2;QD=41.74;RPA=3,4;RU=TG;SB=-4.721e+03;STR;VQSLOD=5.5040;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:7,80:86:99:3686,241,0:127 1|1:8,77:85:99:3454,229,0:127
+18 59836086 . A AT 575.46 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.815;DP=231;FS=20.458;HaplotypeScore=140.1975;MLEAC=3;MLEAF=0.500;MQ=56.52;MQ0=0;MQRankSum=1.203;QD=2.49;RPA=20,21;RU=T;ReadPosRankSum=-1.968;SB=-2.575e+02;STR;VQSLOD=-0.3166;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:52,29:86:11:309,0,11:9 0/1:72,2:82:63:109,0,63:9
+19 47012249 rs60424854 ATTTTT A 1121.22 VQSRTrancheINDEL99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.922;DB;DP=144;FS=61.853;HaplotypeScore=338.7352;MLEAC=2;MLEAF=0.333;MQ=44.50;MQ0=1;MQRankSum=-2.345;QD=10.29;RPA=16,11;RU=T;ReadPosRankSum=5.636;SB=-1.090e+02;STR;VQSLOD=-2.3986;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:30,9:43:99:371,0,961:89 1|0:44,15:63:99:798,0,1293:89
+22 24416101 rs66532277 C CTT 458.98 VQSRTrancheINDEL99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-4.190;DB;DP=251;FS=68.550;HaplotypeScore=55.3088;MLEAC=3;MLEAF=0.500;MQ=51.85;MQ0=3;MQRankSum=2.417;QD=1.83;RPA=23,25;RU=T;ReadPosRankSum=2.881;SB=-3.571e+01;STR;VQSLOD=-2.0279;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:68,20:91:65:207,0,65:3 0/1:84,0:83:0:184,0,0:3
+X 23948720 rs35152285 C CA 535.35 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.538;DB;DP=148;FS=0.000;HaplotypeScore=24.3157;MLEAC=3;MLEAF=0.500;MQ=53.02;MQ0=0;MQRankSum=0.234;QD=3.62;RPA=16,17;RU=A;ReadPosRankSum=-1.638;SB=-2.841e+02;STR;VQSLOD=3.0203;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:37,27:68:62:391,0,62:13 0/1:16,8:25:13:102,0,13:13
diff --git a/testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf.idx b/testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf.idx
new file mode 100644
index 0000000..2fb81fe
Binary files /dev/null and b/testdata/picard/vcf/chunking/multi_allelic_at_10M.vcf.idx differ
diff --git a/testdata/picard/vcf/filter/testFiltering.vcf b/testdata/picard/vcf/filter/testFiltering.vcf
new file mode 100644
index 0000000..c07e0f7
--- /dev/null
+++ b/testdata/picard/vcf/filter/testFiltering.vcf
@@ -0,0 +1,150 @@
+##fileformat=VCFv4.1
+##ALT=<ID=NON_REF,Description="Represents any possible alternative allele at this location">
+##FILTER=<ID=LowQual,Description="Low quality">
+##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=Integer,Description="Genotype Quality">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=MIN_DP,Number=1,Type=Integer,Description="Minimum DP observed within the GVCF block">
+##FORMAT=<ID=PGT,Number=1,Type=String,Description="Physical phasing haplotype information, describing how the alternate alleles are phased in relation to one another">
+##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
+##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
+##FORMAT=<ID=SB,Number=4,Type=Integer,Description="Per-sample component statistics which comprise the Fisher's Exact Test to detect strand bias.">
+##GATKCommandLine=<ID=GenotypeGVCFs,Version=3.2-77-gbf8aa36,Date="Fri Aug 29 09:15:21 EDT 2014",Epoch=1409318121531,CommandLineOptions="analysis_type=GenotypeGVCFs input_file=[] showFullBamList=false read_buffer_size=null phone_home=AWS gatk_key=null tag=NA read_filter=[] intervals=[/seq/references/Homo_sapiens_assembly19/v1/variant_calling/exome_calling_regions.v1.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq [...]
+##GATKCommandLine=<ID=HaplotypeCaller,Version=3.2-77-gbf8aa36,Date="Thu Aug 28 10:36:15 EDT 2014",Epoch=1409236575395,CommandLineOptions="analysis_type=HaplotypeCaller input_file=[RP697.NA12878.bam] showFullBamList=false read_buffer_size=null phone_home=AWS gatk_key=null tag=NA read_filter=[] intervals=[/seq/references/Homo_sapiens_assembly19/v1/variant_calling/exome_calling_regions.v1.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 re [...]
+##GVCFBlock=minGQ=0(inclusive),maxGQ=1(exclusive)
+##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=CCC,Number=1,Type=Integer,Description="Number of called chromosomes">
+##INFO=<ID=ClippingRankSum,Number=1,Type=Float,Description="Z-score From Wilcoxon rank sum test of Alt vs. Ref number of hard clipped bases">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##INFO=<ID=GQ_MEAN,Number=1,Type=Float,Description="Mean of all GQ values">
+##INFO=<ID=GQ_STDDEV,Number=1,Type=Float,Description="Standard deviation of all GQ values">
+##INFO=<ID=HWP,Number=1,Type=Float,Description="P value from test of Hardy Weinberg Equilibrium">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=NCC,Number=1,Type=Integer,Description="Number of no-called samples">
+##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">
+##INFO=<ID=SOR,Number=1,Type=Float,Description="Symmetric Odds Ratio of 2x2 contingency table to detect strand bias">
+##contig=<ID=1,length=249250621>
+##contig=<ID=2,length=243199373>
+##contig=<ID=3,length=198022430>
+##contig=<ID=4,length=191154276>
+##contig=<ID=5,length=180915260>
+##contig=<ID=6,length=171115067>
+##contig=<ID=7,length=159138663>
+##contig=<ID=8,length=146364022>
+##contig=<ID=9,length=141213431>
+##contig=<ID=10,length=135534747>
+##contig=<ID=11,length=135006516>
+##contig=<ID=12,length=133851895>
+##contig=<ID=13,length=115169878>
+##contig=<ID=14,length=107349540>
+##contig=<ID=15,length=102531392>
+##contig=<ID=16,length=90354753>
+##contig=<ID=17,length=81195210>
+##contig=<ID=18,length=78077248>
+##contig=<ID=19,length=59128983>
+##contig=<ID=20,length=63025520>
+##contig=<ID=21,length=48129895>
+##contig=<ID=22,length=51304566>
+##contig=<ID=X,length=155270560>
+##contig=<ID=Y,length=59373566>
+##contig=<ID=MT,length=16569>
+##contig=<ID=GL000207.1,length=4262>
+##contig=<ID=GL000226.1,length=15008>
+##contig=<ID=GL000229.1,length=19913>
+##contig=<ID=GL000231.1,length=27386>
+##contig=<ID=GL000210.1,length=27682>
+##contig=<ID=GL000239.1,length=33824>
+##contig=<ID=GL000235.1,length=34474>
+##contig=<ID=GL000201.1,length=36148>
+##contig=<ID=GL000247.1,length=36422>
+##contig=<ID=GL000245.1,length=36651>
+##contig=<ID=GL000197.1,length=37175>
+##contig=<ID=GL000203.1,length=37498>
+##contig=<ID=GL000246.1,length=38154>
+##contig=<ID=GL000249.1,length=38502>
+##contig=<ID=GL000196.1,length=38914>
+##contig=<ID=GL000248.1,length=39786>
+##contig=<ID=GL000244.1,length=39929>
+##contig=<ID=GL000238.1,length=39939>
+##contig=<ID=GL000202.1,length=40103>
+##contig=<ID=GL000234.1,length=40531>
+##contig=<ID=GL000232.1,length=40652>
+##contig=<ID=GL000206.1,length=41001>
+##contig=<ID=GL000240.1,length=41933>
+##contig=<ID=GL000236.1,length=41934>
+##contig=<ID=GL000241.1,length=42152>
+##contig=<ID=GL000243.1,length=43341>
+##contig=<ID=GL000242.1,length=43523>
+##contig=<ID=GL000230.1,length=43691>
+##contig=<ID=GL000237.1,length=45867>
+##contig=<ID=GL000233.1,length=45941>
+##contig=<ID=GL000204.1,length=81310>
+##contig=<ID=GL000198.1,length=90085>
+##contig=<ID=GL000208.1,length=92689>
+##contig=<ID=GL000191.1,length=106433>
+##contig=<ID=GL000227.1,length=128374>
+##contig=<ID=GL000228.1,length=129120>
+##contig=<ID=GL000214.1,length=137718>
+##contig=<ID=GL000221.1,length=155397>
+##contig=<ID=GL000209.1,length=159169>
+##contig=<ID=GL000218.1,length=161147>
+##contig=<ID=GL000220.1,length=161802>
+##contig=<ID=GL000213.1,length=164239>
+##contig=<ID=GL000211.1,length=166566>
+##contig=<ID=GL000199.1,length=169874>
+##contig=<ID=GL000217.1,length=172149>
+##contig=<ID=GL000216.1,length=172294>
+##contig=<ID=GL000215.1,length=172545>
+##contig=<ID=GL000205.1,length=174588>
+##contig=<ID=GL000219.1,length=179198>
+##contig=<ID=GL000224.1,length=179693>
+##contig=<ID=GL000223.1,length=180455>
+##contig=<ID=GL000195.1,length=182896>
+##contig=<ID=GL000212.1,length=186858>
+##contig=<ID=GL000222.1,length=186861>
+##contig=<ID=GL000200.1,length=187035>
+##contig=<ID=GL000193.1,length=189789>
+##contig=<ID=GL000194.1,length=191469>
+##contig=<ID=GL000225.1,length=211173>
+##contig=<ID=GL000192.1,length=547496>
+##contig=<ID=NC_007605,length=171823>
+##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878
+1 324822 tf1 A T 2213.77 . AC=2;AF=1.00;AN=2;DP=79;FS=0.000;GQ_MEAN=234.00;MLEAC=2;MLEAF=1.00;MQ=25.61;MQ0=0;NCC=0;QD=28.38;SOR=0.855 GT:AD:DP:GQ:PL 1/1:0,78:78:99:2242,234,0
+1 883899 rs72631890 T G 1315.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=3.58;ClippingRankSum=-1.034e+00;DB;DP=123;FS=0.000;GQ_MEAN=1344.00;MLEAC=1;MLEAF=0.500;MQ=57.87;MQ0=0;MQRankSum=-3.820e-01;NCC=0;QD=10.70;ReadPosRankSum=0.085;SOR=0.765 GT:AD:DP:GQ:PL 0/1:72,51:123:99:1344,0,1858
+1 899942 rs71509448 G A 172.80 . AC=2;AF=1.00;AN=2;DB;DP=11;FS=0.000;GQ_MEAN=21.00;MLEAC=2;MLEAF=1.00;MQ=50.96;MQ0=0;NCC=0;QD=15.71;SOR=4.977 GT:AD:DP:GQ:PGT:PID:PL 1/1:0,11:11:21:1|1:899928_G_C:201,21,0
+1 900298 rs71628926 C G 165.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-2.793e+00;ClippingRankSum=0.135;DB;DP=12;FS=0.000;GQ_MEAN=147.00;MLEAC=1;MLEAF=0.500;MQ=56.04;MQ0=0;MQRankSum=0.135;NCC=0;QD=13.81;ReadPosRankSum=0.135;SOR=1.022 GT:AD:DP:GQ:PL 0/1:5,7:12:99:194,0,147
+1 909419 rs28548431 C T 522.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=2.61;ClippingRankSum=-2.420e-01;DB;DP=54;FS=5.418;GQ_MEAN=551.00;MLEAC=1;MLEAF=0.500;MQ=60.00;MQ0=0;MQRankSum=1.28;NCC=0;QD=9.68;ReadPosRankSum=-5.110e-01;SOR=2.066 GT:AD:DP:GQ:PL 0/1:34,20:54:99:551,0,978
+1 912049 rs9803103 T C 336.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-1.522e+00;ClippingRankSum=-2.082e+00;DB;DP=41;FS=0.000;GQ_MEAN=365.00;MLEAC=1;MLEAF=0.500;MQ=58.87;MQ0=0;MQRankSum=0.612;NCC=0;QD=9.90;ReadPosRankSum=1.07;SOR=1.179 GT:AD:DP:GQ:PL 0/1:20,14:34:99:365,0,564
+1 914333 rs13302979 C G 151.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=1.23;ClippingRankSum=-2.130e+00;DB;DP=14;FS=0.000;GQ_MEAN=180.00;MLEAC=1;MLEAF=0.500;MQ=60.00;MQ0=0;MQRankSum=-9.680e-01;NCC=0;QD=10.84;ReadPosRankSum=-1.226e+00;SOR=0.412 GT:AD:DP:GQ:PL 0/1:8,6:14:99:180,0,224
+1 914414 tf2 CGAA C 97.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-9.030e-01;ClippingRankSum=-2.650e-01;DP=21;FS=0.000;GQ_MEAN=126.00;MLEAC=1;MLEAF=0.500;MQ=57.06;MQ0=0;MQRankSum=-2.650e-01;NCC=0;QD=5.43;ReadPosRankSum=-6.230e-01;SOR=0.892 GT:AD:DP:GQ:PL 0/1:14,4:18:99:126,0,575
+1 914852 rs13303368 G C 664.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-9.500e-02;ClippingRankSum=1.13;DB;DP=40;FS=3.468;GQ_MEAN=546.00;MLEAC=1;MLEAF=0.500;MQ=58.36;MQ0=0;MQRankSum=0.829;NCC=0;QD=16.62;ReadPosRankSum=-9.380e-01;SOR=2.019 GT:AD:DP:GQ:PL 0/1:18,22:40:99:693,0,546
+1 914876 rs13302983 T C 2241.77 . AC=2;AF=1.00;AN=2;DB;DP=61;FS=0.000;GQ_MEAN=189.00;MLEAC=2;MLEAF=1.00;MQ=59.62;MQ0=0;NCC=0;QD=30.09;SOR=2.948 GT:AD:DP:GQ:PL 1/1:0,61:61:99:2270,189,0
+1 914940 rs13303033 T C 1330.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=2.60;ClippingRankSum=-1.980e-01;DB;DP=98;FS=5.001;GQ_MEAN=1170.00;MLEAC=1;MLEAF=0.500;MQ=58.76;MQ0=0;MQRankSum=0.344;NCC=0;QD=13.86;ReadPosRankSum=2.22;SOR=0.603 GT:AD:DP:GQ:PL 0/1:47,49:96:99:1359,0,1170
+1 915227 rs13303355 A G 6323.77 . AC=2;AF=1.00;AN=2;DB;DP=168;FS=0.000;GQ_MEAN=508.00;MLEAC=2;MLEAF=1.00;MQ=59.73;MQ0=0;NCC=0;QD=31.26;SOR=3.456 GT:AD:DP:GQ:PL 1/1:0,168:168:99:6352,508,0
+1 916549 rs6660139 A G 1033.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=2.85;ClippingRankSum=0.722;DB;DP=98;FS=0.000;GQ_MEAN=1062.00;MLEAC=1;MLEAF=0.500;MQ=59.34;MQ0=0;MQRankSum=-3.550e-01;NCC=0;QD=10.66;ReadPosRankSum=-7.950e-01;SOR=0.773 GT:AD:DP:GQ:PL 0/1:57,40:97:99:1062,0,1626
+1 916590 rs28566954 G A 793.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-4.441e+00;ClippingRankSum=-1.191e+00;DB;DP=41;FS=0.000;GQ_MEAN=372.00;MLEAC=1;MLEAF=0.500;MQ=59.44;MQ0=0;MQRankSum=0.154;NCC=0;QD=19.36;ReadPosRankSum=0.042;SOR=0.346 GT:AD:DP:GQ:PL 0/1:13,28:41:99:822,0,372
+1 935222 rs2298214 C A 1381.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-6.667e+00;ClippingRankSum=-1.069e+00;DB;DP=104;FS=2.093;GQ_MEAN=1410.00;MLEAC=1;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=0.595;NCC=0;QD=13.29;ReadPosRankSum=1.23;SOR=1.673 GT:AD:DP:GQ:PL 0/1:52,52:104:99:1410,0,1574
+1 948921 rs15842 T C 1963.77 . AC=2;AF=1.00;AN=2;DB;DP=62;FS=0.000;GQ_MEAN=186.00;MLEAC=2;MLEAF=1.00;MQ=51.79;MQ0=0;NCC=0;QD=31.67;SOR=1.057 GT:AD:DP:GQ:PL 1/1:0,62:62:99:1992,186,0
+1 948929 tf3 GGCCCACA G 777.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=1.94;ClippingRankSum=-5.070e-01;DP=67;FS=0.000;GQ_MEAN=806.00;MLEAC=1;MLEAF=0.500;MQ=51.26;MQ0=0;MQRankSum=-4.852e+00;NCC=0;QD=6.94;ReadPosRankSum=0.209;SOR=0.730 GT:AD:DP:GQ:PL 0/1:26,22:48:99:806,0,981
+1 949608 rs1921 G A 1741.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-6.267e+00;ClippingRankSum=-4.930e-01;DB;DP=131;FS=3.479;GQ_MEAN=1770.00;MLEAC=1;MLEAF=0.500;MQ=58.32;MQ0=0;MQRankSum=-1.115e+00;NCC=0;QD=13.50;ReadPosRankSum=0.884;SOR=1.050 GT:AD:DP:GQ:PL 0/1:67,62:129:99:1770,0,2109
+1 949654 rs8997 A G 7066.77 . AC=2;AF=1.00;AN=2;DB;DP=201;FS=0.000;GQ_MEAN=596.00;MLEAC=2;MLEAF=1.00;MQ=59.03;MQ0=0;NCC=0;QD=29.00;SOR=1.863 GT:AD:DP:GQ:PL 1/1:0,198:198:99:7095,596,0
+1 977330 rs2799066 T C 1397.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=5.53;ClippingRankSum=0.116;DB;DP=128;FS=8.556;GQ_MEAN=1426.00;MLEAC=1;MLEAF=0.500;MQ=59.23;MQ0=0;MQRankSum=1.03;NCC=0;QD=11.75;ReadPosRankSum=2.08;SOR=1.516 GT:AD:DP:GQ:PL 0/1:69,50:119:99:1426,0,1861
+1 977570 rs2710876 G A 251.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-1.002e+00;ClippingRankSum=-7.660e-01;DB;DP=15;FS=0.000;GQ_MEAN=174.00;MLEAC=1;MLEAF=0.500;MQ=60.00;MQ0=0;MQRankSum=0.059;NCC=0;QD=16.78;ReadPosRankSum=-1.355e+00;SOR=1.112 GT:AD:DP:GQ:PL 0/1:6,9:15:99:280,0,174
+1 978603 rs138543546 CCT C 1281.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=-1.863e+00;ClippingRankSum=0.545;DB;DP=65;FS=0.000;GQ_MEAN=1253.00;MLEAC=1;MLEAF=0.500;MQ=58.98;MQ0=0;MQRankSum=-1.083e+00;NCC=0;QD=20.03;ReadPosRankSum=-2.830e-01;SOR=0.263 GT:AD:DP:GQ:PL 0/1:30,34:64:99:1310,0,1253
+1 981087 rs3128098 A G 712.77 . AC=1;AF=0.500;AN=2;BaseQRankSum=0.874;ClippingRankSum=-2.870e-01;DB;DP=69;FS=3.654;GQ_MEAN=741.00;MLEAC=1;MLEAF=0.500;MQ=59.39;MQ0=0;MQRankSum=0.336;NCC=0;QD=10.33;ReadPosRankSum=-1.770e-01;SOR=1.296 GT:AD:DP:GQ:PL 0/1:41,28:69:99:741,0,1074
diff --git a/testdata/picard/vcf/mini.dbsnp.vcf b/testdata/picard/vcf/mini.dbsnp.vcf
new file mode 100755
index 0000000..20fc3eb
--- /dev/null
+++ b/testdata/picard/vcf/mini.dbsnp.vcf
@@ -0,0 +1,639 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxR [...]
+##FILTER=<ID=Indel_FS,Description="FS>200.0">
+##FILTER=<ID=Indel_InbreedingCoeff,Description="InbreedingCoeff<-0.8">
+##FILTER=<ID=Indel_QD,Description="QD<2.0">
+##FILTER=<ID=Indel_ReadPosRankSum,Description="ReadPosRankSum<-20.0">
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheSNP98.50to98.60,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.6803 <= x < 0.8195">
+##FILTER=<ID=VQSRTrancheSNP98.60to98.80,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.391 <= x < 0.6803">
+##FILTER=<ID=VQSRTrancheSNP98.80to98.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.2076 <= x < 0.391">
+##FILTER=<ID=VQSRTrancheSNP98.90to99.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.0125 <= x < 0.2076">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.30,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -0.92 <= x < 0.0125">
+##FILTER=<ID=VQSRTrancheSNP99.30to99.50,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -2.0012 <= x < -0.92">
+##FILTER=<ID=VQSRTrancheSNP99.50to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -47.4391 <= x < -2.0012">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -3283.311">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -3283.311 <= x < -47.4391">
+##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=Integer,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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SNPEFF_AMINO_ACID_CHANGE,Number=1,Type=String,Description="Old/New amino acid for the highest-impact effect resulting from the current variant (in HGVS style)">
+##INFO=<ID=SNPEFF_CODON_CHANGE,Number=1,Type=String,Description="Old/New codon for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_EFFECT,Number=1,Type=String,Description="The highest-impact effect resulting from the current variant (or one of the highest-impact effects, if there is a tie)">
+##INFO=<ID=SNPEFF_EXON_ID,Number=1,Type=String,Description="Exon ID for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_FUNCTIONAL_CLASS,Number=1,Type=String,Description="Functional class of the highest-impact effect resulting from the current variant: [NONE, SILENT, MISSENSE, NONSENSE]">
+##INFO=<ID=SNPEFF_GENE_BIOTYPE,Number=1,Type=String,Description="Gene biotype for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_GENE_NAME,Number=1,Type=String,Description="Gene name for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_IMPACT,Number=1,Type=String,Description="Impact of the highest-impact effect resulting from the current variant [MODIFIER, LOW, MODERATE, HIGH]">
+##INFO=<ID=SNPEFF_TRANSCRIPT_ID,Number=1,Type=String,Description="Transcript ID for the highest-impact effect resulting from the current variant">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##OriginalSnpEffCmd="SnpEff eff -v -onlyCoding true -c /seq/references/Homo_sapiens_assembly19/v1/snpEff/Homo_sapiens_assembly19.snpEff.config -i vcf -o vcf GRCh37.64 /seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.unannotated.vcf "
+##OriginalSnpEffVersion="2.0.5 (build 2011-12-24), by Pablo Cingolani"
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.bam.list] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/scatter/temp_0001_of_50/scattered.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly1 [...]
+##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=50 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assemb [...]
+##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRun [...]
+##contig=<ID=1,length=249250621>
+##contig=<ID=2,length=243199373>
+##contig=<ID=3,length=198022430>
+##contig=<ID=4,length=191154276>
+##contig=<ID=5,length=180915260>
+##contig=<ID=6,length=171115067>
+##contig=<ID=7,length=159138663>
+##contig=<ID=8,length=146364022>
+##contig=<ID=9,length=141213431>
+##contig=<ID=10,length=135534747>
+##contig=<ID=11,length=135006516>
+##contig=<ID=12,length=133851895>
+##contig=<ID=13,length=115169878>
+##contig=<ID=14,length=107349540>
+##contig=<ID=15,length=102531392>
+##contig=<ID=16,length=90354753>
+##contig=<ID=17,length=81195210>
+##contig=<ID=18,length=78077248>
+##contig=<ID=19,length=59128983>
+##contig=<ID=20,length=63025520>
+##contig=<ID=21,length=48129895>
+##contig=<ID=22,length=51304566>
+##contig=<ID=X,length=155270560>
+##contig=<ID=Y,length=59373566>
+##contig=<ID=MT,length=16569>
+##contig=<ID=GL000207.1,length=4262>
+##contig=<ID=GL000226.1,length=15008>
+##contig=<ID=GL000229.1,length=19913>
+##contig=<ID=GL000231.1,length=27386>
+##contig=<ID=GL000210.1,length=27682>
+##contig=<ID=GL000239.1,length=33824>
+##contig=<ID=GL000235.1,length=34474>
+##contig=<ID=GL000201.1,length=36148>
+##contig=<ID=GL000247.1,length=36422>
+##contig=<ID=GL000245.1,length=36651>
+##contig=<ID=GL000197.1,length=37175>
+##contig=<ID=GL000203.1,length=37498>
+##contig=<ID=GL000246.1,length=38154>
+##contig=<ID=GL000249.1,length=38502>
+##contig=<ID=GL000196.1,length=38914>
+##contig=<ID=GL000248.1,length=39786>
+##contig=<ID=GL000244.1,length=39929>
+##contig=<ID=GL000238.1,length=39939>
+##contig=<ID=GL000202.1,length=40103>
+##contig=<ID=GL000234.1,length=40531>
+##contig=<ID=GL000232.1,length=40652>
+##contig=<ID=GL000206.1,length=41001>
+##contig=<ID=GL000240.1,length=41933>
+##contig=<ID=GL000236.1,length=41934>
+##contig=<ID=GL000241.1,length=42152>
+##contig=<ID=GL000243.1,length=43341>
+##contig=<ID=GL000242.1,length=43523>
+##contig=<ID=GL000230.1,length=43691>
+##contig=<ID=GL000237.1,length=45867>
+##contig=<ID=GL000233.1,length=45941>
+##contig=<ID=GL000204.1,length=81310>
+##contig=<ID=GL000198.1,length=90085>
+##contig=<ID=GL000208.1,length=92689>
+##contig=<ID=GL000191.1,length=106433>
+##contig=<ID=GL000227.1,length=128374>
+##contig=<ID=GL000228.1,length=129120>
+##contig=<ID=GL000214.1,length=137718>
+##contig=<ID=GL000221.1,length=155397>
+##contig=<ID=GL000209.1,length=159169>
+##contig=<ID=GL000218.1,length=161147>
+##contig=<ID=GL000220.1,length=161802>
+##contig=<ID=GL000213.1,length=164239>
+##contig=<ID=GL000211.1,length=166566>
+##contig=<ID=GL000199.1,length=169874>
+##contig=<ID=GL000217.1,length=172149>
+##contig=<ID=GL000216.1,length=172294>
+##contig=<ID=GL000215.1,length=172545>
+##contig=<ID=GL000205.1,length=174588>
+##contig=<ID=GL000219.1,length=179198>
+##contig=<ID=GL000224.1,length=179693>
+##contig=<ID=GL000223.1,length=180455>
+##contig=<ID=GL000195.1,length=182896>
+##contig=<ID=GL000212.1,length=186858>
+##contig=<ID=GL000222.1,length=186861>
+##contig=<ID=GL000200.1,length=187035>
+##contig=<ID=GL000193.1,length=189789>
+##contig=<ID=GL000194.1,length=191469>
+##contig=<ID=GL000225.1,length=211173>
+##contig=<ID=GL000192.1,length=547496>
+##contig=<ID=NC_007605,length=171823>
+##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00116 HG00123 HG00158 HG00160 HG00265 HG00311 HG00371 HG00380 HG00404 HG00551 HG00610 HG00628 HG00635 HG01048 HG01079 HG01094 HG01247 HG01256 HG01260 HG01461 HG01488 NA06989 NA11918 NA11919 NA12341 NA18510 NA18520 NA18522 NA18574 NA18634 NA18867 NA18960 NA18986 NA19004 NA19067 NA19092 NA19102 NA19474 NA19675 NA19703 NA19711 NA19725 NA19819 NA19908 NA19920 NA20787 NA20798 NA20801 NA20803 NA20805
+1 877831 rs6672356 T C 3102.44 PASS AC=68;AF=1.00;AN=68;DB;DP=94;Dels=0.00;FS=0.000;HaplotypeScore=0.0284;InbreedingCoeff=-0.1003;MLEAC=68;MLEAF=1.00;MQ=58.69;MQ0=0;QD=33.00;SNPEFF_AMINO_ACID_CHANGE=W343R;SNPEFF_CODON_CHANGE=Tgg/Cgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877790_877868;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=1.94;culprit=MQ GT:AD:DP:GQ: [...]
+1 878296 rs72902601 C G 55.37 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-0.120;DB;DP=230;Dels=0.00;FS=2.395;HaplotypeScore=0.1272;InbreedingCoeff=-0.0578;MLEAC=1;MLEAF=0.010;MQ=58.94;MQ0=1;MQRankSum=0.978;QD=13.84;ReadPosRankSum=0.647;SNPEFF_AMINO_ACID_CHANGE=P474;SNPEFF_CODON_CHANGE=ccC/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877939_878438;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 878314 rs142558220 G C 186.97 PASS AC=4;AF=0.042;AN=96;BaseQRankSum=1.858;DB;DP=216;Dels=0.00;FS=17.207;HaplotypeScore=0.2218;InbreedingCoeff=-0.0963;MLEAC=4;MLEAF=0.042;MQ=58.83;MQ0=1;MQRankSum=1.218;QD=10.39;ReadPosRankSum=-0.676;SNPEFF_AMINO_ACID_CHANGE=G480;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877939_878438;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 878325 rs114478480 C T 83.06 PASS AC=3;AF=0.031;AN=96;BaseQRankSum=-1.893;DB;DP=231;Dels=0.00;FS=4.104;HaplotypeScore=0.1668;InbreedingCoeff=-0.0829;MLEAC=3;MLEAF=0.031;MQ=58.89;MQ0=1;MQRankSum=-0.574;QD=4.15;ReadPosRankSum=-0.163;SNPEFF_AMINO_ACID_CHANGE=P484L;SNPEFF_CODON_CHANGE=cCc/cTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877939_878438;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 878474 rs183873661 C T 121.32 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.830;DB;DP=748;Dels=0.00;FS=1.693;HaplotypeScore=0.3639;InbreedingCoeff=-0.0159;MLEAC=1;MLEAF=0.010;MQ=58.79;MQ0=0;MQRankSum=0.174;QD=7.58;ReadPosRankSum=-0.713;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=5.77;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:54:0,54,635 0/0:20,0:20:57:0,5 [...]
+1 878744 rs138897766 G C 89.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.438;DB;DP=2067;Dels=0.00;FS=3.836;HaplotypeScore=0.4141;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.03;MQ0=0;MQRankSum=-0.098;QD=4.05;ReadPosRankSum=-0.621;SNPEFF_AMINO_ACID_CHANGE=G559A;SNPEFF_CODON_CHANGE=gGa/gCa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_878633_878757;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 878745 rs72902602 A C 100.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.454;DB;DP=1926;Dels=0.00;FS=3.888;HaplotypeScore=0.4593;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.01;MQ0=0;MQRankSum=0.858;QD=7.16;ReadPosRankSum=-0.443;SNPEFF_AMINO_ACID_CHANGE=G559;SNPEFF_CODON_CHANGE=ggA/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_878633_878757;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 878784 rs142929357 C G 270.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.915;DB;DP=1593;Dels=0.00;FS=1.545;HaplotypeScore=0.2502;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.73;MQ0=0;MQRankSum=0.339;QD=10.01;ReadPosRankSum=-2.756;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=6.04;culprit=MQ GT:AD:DP:GQ:PL 0/0:16,0:16:48:0,48,520 0/0:48,0:48:99:0, [...]
+1 879276 rs115454328 A G 151.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.178;DB;DP=2740;Dels=0.00;FS=3.247;HaplotypeScore=0.1855;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.08;MQ0=0;MQRankSum=0.941;QD=6.30;ReadPosRankSum=-1.171;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=6.84;culprit=QD GT:AD:DP:GQ:PL 0/0:44,0:44:99:0,132,1543 0/0:60,0:60:99: [...]
+1 879317 rs7523549 C T 4951.54 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-1.693;DB;DP=1892;Dels=0.00;FS=1.332;HaplotypeScore=0.2180;InbreedingCoeff=0.1848;MLEAC=8;MLEAF=0.080;MQ=58.70;MQ0=0;MQRankSum=0.898;QD=16.78;ReadPosRankSum=-3.262;SNPEFF_AMINO_ACID_CHANGE=Y610;SNPEFF_CODON_CHANGE=taC/taT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_879288_879955;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 879481 rs113383096 G C 504.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.767;DB;DP=3723;Dels=0.00;FS=2.965;HaplotypeScore=1.1122;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.21;MQ0=0;MQRankSum=0.926;QD=11.46;ReadPosRankSum=-2.192;SNPEFF_AMINO_ACID_CHANGE=G665A;SNPEFF_CODON_CHANGE=gGg/gCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_879288_879955;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 879482 rs149880798 G C 718.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.504;DB;DP=3666;Dels=0.00;FS=0.000;HaplotypeScore=1.0927;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.21;MQ0=0;MQRankSum=2.840;QD=10.88;ReadPosRankSum=-2.568;SNPEFF_AMINO_ACID_CHANGE=G665;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_879288_879955;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 879576 rs115979567 C T 185.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.148;DB;DP=1276;Dels=0.00;FS=1.725;HaplotypeScore=0.7692;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.90;MQ0=0;MQRankSum=1.288;QD=9.26;ReadPosRankSum=1.063;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=6.38;culprit=MQ GT:AD:DP:GQ:PL 0/0:23,0:23:69:0,69,851 0/0:34,0:34:84:0,8 [...]
+1 880390 rs3748593 C A 4237.18 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=-10.508;DB;DP=2405;Dels=0.00;FS=0.416;HaplotypeScore=0.2833;InbreedingCoeff=0.2319;MLEAC=7;MLEAF=0.070;MQ=59.37;MQ0=0;MQRankSum=0.217;QD=14.46;ReadPosRankSum=-0.126;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000496938;VQSLOD=6.83;culprit=FS GT:AD:DP:GQ:PL 0/0:44,0:44:99:0,132,1590 0/0:33,0:33:99: [...]
+1 881602 rs148962722 C T 978.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.505;DB;DP=2402;Dels=0.00;FS=0.603;HaplotypeScore=0.5423;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.26;MQ0=1;MQRankSum=1.118;QD=13.04;ReadPosRankSum=-1.738;SNPEFF_AMINO_ACID_CHANGE=R623H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_881553_881666;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 881627 rs2272757 G A 23520.38 PASS AC=51;AF=0.510;AN=100;BaseQRankSum=-4.753;DB;DP=1519;Dels=0.00;FS=5.729;HaplotypeScore=0.7095;InbreedingCoeff=0.3997;MLEAC=51;MLEAF=0.510;MQ=58.10;MQ0=1;MQRankSum=0.712;QD=25.93;ReadPosRankSum=0.192;SNPEFF_AMINO_ACID_CHANGE=L615;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_881553_881666;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 881687 . AG A 2168.07 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.090;DP=1778;FS=66.380;HaplotypeScore=12.4080;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=58.26;MQ0=0;MQRankSum=3.167;QD=14.26;RPA=3,2;RU=G;ReadPosRankSum=-1.383;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;STR GT:AD:DP:GQ:PL 0/0:35,0:35:99:0,105,1424 0/0:23,0:23:69:0,69,706 0/0:26,0:26:78:0,78, [...]
+1 881734 rs74045012 T C 2215.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=4.677;DB;DP=2256;Dels=0.00;FS=14.813;HaplotypeScore=0.7323;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=57.33;MQ0=0;MQRankSum=2.661;QD=12.38;ReadPosRankSum=-5.774;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=3.56;culprit=FS GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,135,1586 0/0:36,0:36:99:0,10 [...]
+1 881740 . G T 412.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.131;DP=2368;Dels=0.00;FS=7.786;HaplotypeScore=0.8197;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.22;MQ0=0;MQRankSum=1.662;QD=15.27;ReadPosRankSum=1.950;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=2.84;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:50,0:50:99:0,150,1890 0/0:38,0:38:99:0,114, [...]
+1 881876 . A C 50.32 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=100;BaseQRankSum=-7.198;DP=1572;Dels=0.00;FS=120.673;HaplotypeScore=0.2562;InbreedingCoeff=-0.0218;MLEAC=2;MLEAF=0.020;MQ=49.50;MQ0=10;MQRankSum=-0.486;QD=1.26;ReadPosRankSum=-5.281;SNPEFF_AMINO_ACID_CHANGE=V570G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_881782_881925;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MOD [...]
+1 897738 rs6696971 C T 6080.89 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-12.884;DB;DP=2318;Dels=0.00;FS=0.000;HaplotypeScore=2.7649;InbreedingCoeff=-0.1111;MLEAC=10;MLEAF=0.100;MQ=59.36;MQ0=0;MQRankSum=0.982;QD=12.67;ReadPosRankSum=-1.164;SNPEFF_AMINO_ACID_CHANGE=L115;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_897735_897851;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 897879 rs79008338 C T 1384.64 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-9.582;DB;DP=976;Dels=0.00;FS=14.068;HaplotypeScore=0.4332;InbreedingCoeff=-0.0665;MLEAC=6;MLEAF=0.060;MQ=59.14;MQ0=0;MQRankSum=0.349;QD=10.18;ReadPosRankSum=-3.450;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=5.27;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:42:0,42,516 0/0:13,0:13:39:0,39,4 [...]
+1 898119 rs79110607 C T 1074.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.682;DB;DP=1495;Dels=0.00;FS=0.000;HaplotypeScore=0.4314;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.08;MQ0=0;MQRankSum=1.532;QD=14.32;ReadPosRankSum=-2.202;SNPEFF_AMINO_ACID_CHANGE=R11;SNPEFF_CODON_CHANGE=cgC/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898084_898297;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 898323 rs6605071 T C 17653.25 PASS AC=93;AF=0.930;AN=100;BaseQRankSum=3.580;DB;DP=505;Dels=0.00;FS=1.868;HaplotypeScore=0.4755;InbreedingCoeff=0.1259;MLEAC=94;MLEAF=0.940;MQ=58.73;MQ0=0;MQRankSum=1.621;QD=35.17;ReadPosRankSum=1.496;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=3.83;culprit=MQ GT:AD:DP:GQ:PL 0/1:2,5:7:49:148,0,49 1/1:0,12:12:36:453,36,0 1 [...]
+1 898466 rs191140912 C T 171.28 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.481;DB;DP=687;Dels=0.00;FS=0.000;HaplotypeScore=0.3867;InbreedingCoeff=-0.0155;MLEAC=1;MLEAF=0.010;MQ=59.27;MQ0=0;MQRankSum=0.400;QD=10.08;ReadPosRankSum=0.449;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=7.92;culprit=FS GT:AD:DP:GQ:PL 0/0:11,0:11:33:0,33,421 0/0:7,0:7:21:0,21,248 0 [...]
+1 898467 rs41285808 C T 569.47 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-0.569;DB;DP=696;Dels=0.00;FS=7.160;HaplotypeScore=0.3633;InbreedingCoeff=0.2490;MLEAC=5;MLEAF=0.050;MQ=59.21;MQ0=0;MQRankSum=1.587;QD=11.86;ReadPosRankSum=0.640;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=5.29;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1:5,6:11:99:197,0,147 0/0:8,0:8:24:0,24, [...]
+1 898603 . C G 273.63 VQSRTrancheSNP99.50to99.90 AC=22;AF=0.220;AN=100;BaseQRankSum=-9.185;DP=665;Dels=0.00;FS=221.601;HaplotypeScore=1.0766;InbreedingCoeff=-0.2547;MLEAC=18;MLEAF=0.180;MQ=57.61;MQ0=0;MQRankSum=0.626;QD=1.13;ReadPosRankSum=-9.808;SNPEFF_AMINO_ACID_CHANGE=A109G;SNPEFF_CODON_CHANGE=gCg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898489_898633;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODERATE [...]
+1 898606 . T G 49.47 VQSRTrancheSNP99.50to99.90 AC=7;AF=0.070;AN=100;BaseQRankSum=-8.782;DP=638;Dels=0.00;FS=101.186;HaplotypeScore=1.2273;InbreedingCoeff=-0.0936;MLEAC=5;MLEAF=0.050;MQ=58.28;MQ0=0;MQRankSum=0.112;QD=0.85;ReadPosRankSum=-9.334;SNPEFF_AMINO_ACID_CHANGE=V110G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898489_898633;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODERATE;SN [...]
+1 898613 rs61746776 C T 95.25 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.379;DB;DP=656;Dels=0.00;FS=4.282;HaplotypeScore=0.7603;InbreedingCoeff=-0.0146;MLEAC=1;MLEAF=0.010;MQ=58.90;MQ0=0;MQRankSum=0.494;QD=10.58;ReadPosRankSum=-1.113;SNPEFF_AMINO_ACID_CHANGE=N112;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898489_898633;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 898852 rs117269332 C T 611.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.664;DB;DP=1798;Dels=0.00;FS=5.676;HaplotypeScore=0.1257;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.28;MQ0=0;MQRankSum=3.408;QD=14.22;ReadPosRankSum=-3.839;SNPEFF_AMINO_ACID_CHANGE=A164;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898717_898884;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 898914 rs114880602 G C 317.21 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.904;DB;DP=1250;Dels=0.00;FS=1.574;HaplotypeScore=0.2733;InbreedingCoeff=-0.0113;MLEAC=1;MLEAF=0.010;MQ=58.75;MQ0=0;MQRankSum=1.664;QD=13.22;ReadPosRankSum=-0.195;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=6.42;culprit=MQ GT:AD:DP:GQ:PL 0/0:20,0:20:60:0,60,723 0/0:23,0:23:69:0,69,85 [...]
+1 899928 rs6677386 G C 1232.27 VQSRTrancheSNP98.80to98.90 AC=57;AF=0.838;AN=68;BaseQRankSum=-1.435;DB;DP=68;Dels=0.00;FS=0.000;HaplotypeScore=0.2032;InbreedingCoeff=0.2608;MLEAC=50;MLEAF=0.735;MQ=43.71;MQ0=0;MQRankSum=-2.804;QD=22.00;ReadPosRankSum=1.097;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.210;culprit=MQ GT:AD:DP:GQ:PL ./. 1/1:0,1:1:3:33,3,0 1/ [...]
+1 899937 rs143296006 G T 918.93 VQSRTrancheSNP98.90to99.00 AC=47;AF=0.758;AN=62;BaseQRankSum=-1.521;DB;DP=47;Dels=0.00;FS=0.000;HaplotypeScore=0.3418;InbreedingCoeff=0.3113;MLEAC=47;MLEAF=0.758;MQ=46.89;MQ0=0;MQRankSum=-2.129;QD=27.03;ReadPosRankSum=3.477;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.203;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,27 1/1:0 [...]
+1 899938 rs147467971 G C 994.56 VQSRTrancheSNP98.90to99.00 AC=47;AF=0.758;AN=62;BaseQRankSum=0.617;DB;DP=48;Dels=0.00;FS=0.000;HaplotypeScore=0.2794;InbreedingCoeff=0.3163;MLEAC=47;MLEAF=0.758;MQ=46.89;MQ0=0;MQRankSum=-2.109;QD=28.42;ReadPosRankSum=3.344;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.175;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,36 1/1:0, [...]
+1 899942 rs71509448 G A 1074.04 VQSRTrancheSNP98.80to98.90 AC=51;AF=0.773;AN=66;BaseQRankSum=0.939;DB;DP=50;Dels=0.00;FS=0.000;HaplotypeScore=0.2033;InbreedingCoeff=0.1917;MLEAC=50;MLEAF=0.758;MQ=45.23;MQ0=0;MQRankSum=-1.565;QD=27.54;ReadPosRankSum=2.967;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.239;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,38 1/1:0, [...]
+1 899949 rs144694530 C T 175.27 VQSRTrancheSNP98.80to98.90 AC=10;AF=0.152;AN=66;BaseQRankSum=-3.029;DB;DP=54;Dels=0.00;FS=3.117;HaplotypeScore=0.3766;InbreedingCoeff=0.2800;MLEAC=9;MLEAF=0.136;MQ=44.25;MQ0=0;MQRankSum=2.310;QD=21.91;ReadPosRankSum=-2.697;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.291;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,40 0/0:3, [...]
+1 899960 . T C 52.99 VQSRTrancheSNP98.90to99.00 AC=6;AF=0.111;AN=54;BaseQRankSum=-2.225;DP=41;Dels=0.00;FS=0.000;HaplotypeScore=0.2410;InbreedingCoeff=0.0143;MLEAC=6;MLEAF=0.111;MQ=46.23;MQ0=0;MQRankSum=-1.492;QD=7.57;ReadPosRankSum=-0.514;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.177;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,38 0/0:2,0:2:6:0,6,61 0/ [...]
+1 900298 rs71628926 C G 161.47 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.988;DB;DP=513;Dels=0.00;FS=6.422;HaplotypeScore=0.4198;InbreedingCoeff=-0.0287;MLEAC=2;MLEAF=0.020;MQ=57.02;MQ0=0;MQRankSum=0.928;QD=10.76;ReadPosRankSum=0.395;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=3.32;culprit=MQ GT:AD:DP:GQ:PL 0/0:14,0:14:39:0,39,478 0/0:19,0:19:54:0,54,693 [...]
+1 900319 rs80351873 G A 2325.78 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-3.149;DB;DP=743;Dels=0.00;FS=12.818;HaplotypeScore=0.7728;InbreedingCoeff=-0.0900;MLEAC=8;MLEAF=0.080;MQ=57.30;MQ0=0;MQRankSum=1.723;QD=14.36;ReadPosRankSum=-0.558;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=4.11;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:20,0:20:57:0,57,693 0/0:25,0: [...]
+1 900397 rs111560052 C T 1077.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.621;DB;DP=2133;Dels=0.00;FS=6.242;HaplotypeScore=0.3667;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.38;MQ0=0;MQRankSum=1.853;QD=11.71;ReadPosRankSum=-2.552;SNPEFF_AMINO_ACID_CHANGE=N461;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 900427 rs115741058 G A 1296.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-6.326;DB;DP=3246;Dels=0.00;FS=9.839;HaplotypeScore=0.4884;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.46;MQ0=0;MQRankSum=2.823;QD=11.78;ReadPosRankSum=-0.507;SNPEFF_AMINO_ACID_CHANGE=E471;SNPEFF_CODON_CHANGE=gaG/gaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 900505 rs28705211 G C 5409.04 PASS AC=12;AF=0.120;AN=100;BaseQRankSum=1.477;DB;DP=1746;Dels=0.00;FS=0.000;HaplotypeScore=1.7312;InbreedingCoeff=0.2424;MLEAC=12;MLEAF=0.120;MQ=58.93;MQ0=0;MQRankSum=-1.383;QD=16.90;ReadPosRankSum=-2.250;SNPEFF_AMINO_ACID_CHANGE=V497;SNPEFF_CODON_CHANGE=gtG/gtC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 900557 . T C 450 VQSRTrancheSNP99.50to99.90 AC=18;AF=0.180;AN=100;BaseQRankSum=-10.340;DP=795;Dels=0.00;FS=174.326;HaplotypeScore=0.8661;InbreedingCoeff=-0.2301;MLEAC=17;MLEAF=0.170;MQ=57.67;MQ0=0;MQRankSum=-1.081;QD=1.81;ReadPosRankSum=0.678;SNPEFF_AMINO_ACID_CHANGE=S515P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODERATE;S [...]
+1 900560 rs188543688 A C 5889.86 VQSRTrancheSNP99.90to100.00 AC=42;AF=0.420;AN=100;BaseQRankSum=-14.853;DB;DP=1195;Dels=0.00;FS=671.452;HaplotypeScore=1.0796;InbreedingCoeff=-0.7377;MLEAC=43;MLEAF=0.430;MQ=57.06;MQ0=0;MQRankSum=-1.062;QD=5.48;ReadPosRankSum=-0.749;SNPEFF_AMINO_ACID_CHANGE=T516P;SNPEFF_CODON_CHANGE=Acc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPE [...]
+1 901919 . A C 75.68 VQSRTrancheSNP99.90to100.00 AC=9;AF=0.090;AN=100;BaseQRankSum=-11.755;DP=823;Dels=0.00;FS=637.319;HaplotypeScore=2.0002;InbreedingCoeff=-0.0995;MLEAC=6;MLEAF=0.060;MQ=59.06;MQ0=1;MQRankSum=-0.634;QD=0.49;ReadPosRankSum=-11.491;SNPEFF_AMINO_ACID_CHANGE=N3T;SNPEFF_CODON_CHANGE=aAc/aCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_901877_901994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE [...]
+1 901922 rs62639980 G A 492.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.416;DB;DP=1209;Dels=0.00;FS=2.971;HaplotypeScore=2.0709;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.99;MQ0=1;MQRankSum=0.498;QD=10.70;ReadPosRankSum=2.443;SNPEFF_AMINO_ACID_CHANGE=S4N;SNPEFF_CODON_CHANGE=aGc/aAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_901877_901994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 901923 rs149741186 C A 540.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.870;DB;DP=1246;Dels=0.00;FS=5.234;HaplotypeScore=2.1419;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.99;MQ0=1;MQRankSum=0.854;QD=11.49;ReadPosRankSum=2.199;SNPEFF_AMINO_ACID_CHANGE=S4R;SNPEFF_CODON_CHANGE=agC/agA;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_901877_901994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 902024 rs181910588 G A 177.78 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.925;DB;DP=366;Dels=0.00;FS=0.000;HaplotypeScore=0.4056;InbreedingCoeff=-0.0381;MLEAC=1;MLEAF=0.010;MQ=59.21;MQ0=0;MQRankSum=-0.015;QD=17.78;ReadPosRankSum=-2.279;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;VQSLOD=5.41;culprit=FS GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,303 0/0:9,0:9:27:0,27,332 0 [...]
+1 902025 rs186208904 C A,T 207.86 PASS AC=1,2;AF=0.010,0.020;AN=100;BaseQRankSum=2.579;DB;DP=347;Dels=0.00;FS=2.417;HaplotypeScore=0.2858;InbreedingCoeff=0.0268;MLEAC=1,1;MLEAF=0.010,0.010;MQ=59.17;MQ0=0;MQRankSum=0.418;QD=7.99;ReadPosRankSum=-2.442;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;VQSLOD=5.23;culprit=QD GT:AD:DP:GQ:PL 0/0:7,0,0:7:21:0,21,212,21,212, [...]
+1 909768 rs2340593 A G 153994.17 PASS AC=100;AF=1.00;AN=100;DB;DP=4084;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=-0.0000;MLEAC=100;MLEAF=1.00;MQ=59.89;MQ0=0;QD=37.71;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf170;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341290;VQSLOD=4.76;culprit=FS GT:AD:DP:GQ:PL 1/1:0,96:96:99:3468,289,0 1/1:0,72:72:99:2721,217,0 1/1:0,61:61:99:2256,184,0 1/1:0,84:84:99:3240, [...]
+1 934918 . C T 557.31 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.137;DP=635;Dels=0.00;FS=6.666;HaplotypeScore=0.4096;InbreedingCoeff=-0.0167;MLEAC=1;MLEAF=0.010;MQ=59.05;MQ0=0;MQRankSum=-0.319;QD=15.06;ReadPosRankSum=-0.276;SNPEFF_AMINO_ACID_CHANGE=V120M;SNPEFF_CODON_CHANGE=Gtg/Atg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_934906_934993;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 934990 . A G 135.42 VQSRTrancheSNP99.50to99.90 AC=10;AF=0.102;AN=98;BaseQRankSum=-9.706;DP=493;Dels=0.00;FS=132.442;HaplotypeScore=0.6505;InbreedingCoeff=-0.1225;MLEAC=8;MLEAF=0.082;MQ=57.58;MQ0=0;MQRankSum=1.060;QD=1.17;ReadPosRankSum=-7.855;SNPEFF_AMINO_ACID_CHANGE=S38P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_934906_934993;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 935046 rs113602214 G A 727.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.596;DB;DP=1581;Dels=0.00;FS=0.735;HaplotypeScore=0.6869;InbreedingCoeff=-0.0207;MLEAC=2;MLEAF=0.020;MQ=58.78;MQ0=0;MQRankSum=1.713;QD=9.09;ReadPosRankSum=-1.877;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000304952;VQSLOD=6.47;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,779 0/0:32,0:32:90:0,90,1127 0/0 [...]
+1 935222 rs2298214 C A 7220.31 PASS AC=54;AF=0.563;AN=96;BaseQRankSum=-7.782;DB;DP=433;Dels=0.00;FS=5.377;HaplotypeScore=0.2198;InbreedingCoeff=0.5158;MLEAC=55;MLEAF=0.573;MQ=57.88;MQ0=0;MQRankSum=1.735;QD=26.07;ReadPosRankSum=2.200;SNPEFF_AMINO_ACID_CHANGE=R44S;SNPEFF_CODON_CHANGE=agG/agT;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_935072_935552;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIP [...]
+1 948921 rs15842 T C 66632.77 PASS AC=87;AF=0.870;AN=100;BaseQRankSum=-1.000;DB;DP=2347;Dels=0.00;FS=19.732;HaplotypeScore=1.2466;InbreedingCoeff=0.0274;MLEAC=87;MLEAF=0.870;MQ=58.47;MQ0=0;MQRankSum=0.438;QD=29.41;ReadPosRankSum=0.831;SNPEFF_EFFECT=UTR_5_PRIME;SNPEFF_EXON_ID=exon_1_948803_948956;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379389;VQSLOD=3.32;culprit=HaplotypeScore GT:AD:DP:GQ:P [...]
+1 949422 rs143888043 G A 791.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.530;DB;DP=3475;Dels=0.00;FS=7.578;HaplotypeScore=0.0383;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.48;MQ0=0;MQRankSum=0.333;QD=10.55;ReadPosRankSum=-4.488;SNPEFF_AMINO_ACID_CHANGE=S21N;SNPEFF_CODON_CHANGE=aGc/aAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_949364_949920;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 949608 rs1921 G A 24069.41 PASS AC=29;AF=0.290;AN=100;BaseQRankSum=-14.730;DB;DP=3299;Dels=0.00;FS=1.209;HaplotypeScore=0.8114;InbreedingCoeff=0.1744;MLEAC=29;MLEAF=0.290;MQ=59.39;MQ0=0;MQRankSum=-0.491;QD=19.75;ReadPosRankSum=-2.856;SNPEFF_AMINO_ACID_CHANGE=S83N;SNPEFF_CODON_CHANGE=aGc/aAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_949364_949920;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 949654 rs8997 A G 93729.39 PASS AC=82;AF=0.820;AN=100;BaseQRankSum=18.995;DB;DP=3288;Dels=0.00;FS=20.351;HaplotypeScore=0.8710;InbreedingCoeff=0.4580;MLEAC=82;MLEAF=0.820;MQ=59.30;MQ0=0;MQRankSum=-0.403;QD=34.37;ReadPosRankSum=1.456;SNPEFF_AMINO_ACID_CHANGE=V98;SNPEFF_CODON_CHANGE=gtA/gtG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_949364_949920;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 949889 rs3829742 G A 666.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.032;DB;DP=1383;Dels=0.00;FS=1.503;HaplotypeScore=0.4451;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.13;MQ0=0;MQRankSum=1.923;QD=14.17;ReadPosRankSum=-1.208;SNPEFF_EFFECT=UTR_3_PRIME;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379389;VQSLOD=7.11;culprit=FS GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,814 0/0:32,0:32:96:0,96,123 [...]
+1 955597 rs115173026 G T 117.08 PASS AC=10;AF=0.278;AN=36;BaseQRankSum=1.445;DB;DP=25;Dels=0.00;FS=0.000;HaplotypeScore=0.0553;InbreedingCoeff=0.3411;MLEAC=9;MLEAF=0.250;MQ=56.16;MQ0=0;MQRankSum=1.528;QD=23.42;ReadPosRankSum=-0.124;SNPEFF_AMINO_ACID_CHANGE=P15;SNPEFF_CODON_CHANGE=ccG/ccT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_955503_955753;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0000 [...]
+1 957568 rs115704555 A G 882.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-7.119;DB;DP=5035;Dels=0.00;FS=0.000;HaplotypeScore=0.0195;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.33;MQ0=0;MQRankSum=0.747;QD=11.76;ReadPosRankSum=-4.449;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379370;VQSLOD=7.68;culprit=FS GT:AD:DP:GQ:PL 0/0:109,0:109:99:0,328,3938 0/0:108,0:108:99:0,325, [...]
+1 957640 rs6657048 C T 2004.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.658;DB;DP=6097;Dels=0.00;FS=1.366;HaplotypeScore=0.1112;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.46;MQ0=0;MQRankSum=1.866;QD=13.36;ReadPosRankSum=-5.575;SNPEFF_AMINO_ACID_CHANGE=D87;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_957581_957842;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 976514 rs79290478 C A 465.05 VQSRTrancheSNP98.60to98.80 AC=26;AF=0.929;AN=28;BaseQRankSum=-1.735;DB;DP=17;Dels=0.00;FS=0.000;HaplotypeScore=0.0712;InbreedingCoeff=0.0352;MLEAC=27;MLEAF=0.964;MQ=54.13;MQ0=0;MQRankSum=0.651;QD=31.00;ReadPosRankSum=-0.217;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477585;VQSLOD=0.457;culprit=MQ GT:AD:DP:GQ:PL ./. 1/1:0,1:1:3:28,3,0 ./. [...]
+1 976627 . G T 49.49 PASS AC=2;AF=0.032;AN=62;BaseQRankSum=-2.576;DP=60;Dels=0.00;FS=0.000;HaplotypeScore=0.0965;InbreedingCoeff=0.0539;MLEAC=1;MLEAF=0.016;MQ=58.16;MQ0=0;MQRankSum=-1.202;QD=16.50;ReadPosRankSum=-2.747;SNPEFF_AMINO_ACID_CHANGE=A268S;SNPEFF_CODON_CHANGE=Gcc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_976553_976777;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0000 [...]
+1 976629 rs113789806 C T 89.72 PASS AC=3;AF=0.047;AN=64;BaseQRankSum=0.487;DB;DP=64;Dels=0.00;FS=4.771;HaplotypeScore=0.0934;InbreedingCoeff=0.0068;MLEAC=3;MLEAF=0.047;MQ=57.45;MQ0=0;MQRankSum=-0.704;QD=17.94;ReadPosRankSum=0.541;SNPEFF_AMINO_ACID_CHANGE=A268;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_976553_976777;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000 [...]
+1 976808 . C T 41.19 PASS AC=1;AF=0.011;AN=88;BaseQRankSum=-2.132;DP=146;Dels=0.00;FS=0.000;HaplotypeScore=0.1023;InbreedingCoeff=-0.1019;MLEAC=1;MLEAF=0.011;MQ=56.91;MQ0=0;MQRankSum=0.703;QD=10.30;ReadPosRankSum=-0.967;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=2.70;culprit=MQ GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,59 0/0:2,0:2:6:0,6,64 0/0:2,0:2:6:0,6,76 0/0:3, [...]
+1 977028 rs138031468 G T 181.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.626;DB;DP=1523;Dels=0.00;FS=1.202;HaplotypeScore=0.5212;InbreedingCoeff=-0.0109;MLEAC=1;MLEAF=0.010;MQ=58.16;MQ0=1;MQRankSum=1.708;QD=7.25;ReadPosRankSum=-0.988;SNPEFF_AMINO_ACID_CHANGE=A375S;SNPEFF_CODON_CHANGE=Gcc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_976858_977082;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 977330 rs2799066 T C 47146.04 PASS AC=83;AF=0.830;AN=100;BaseQRankSum=15.170;DB;DP=1899;Dels=0.00;FS=0.000;HaplotypeScore=0.6567;InbreedingCoeff=0.3621;MLEAC=83;MLEAF=0.830;MQ=58.74;MQ0=0;MQRankSum=1.279;QD=31.49;ReadPosRankSum=1.596;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=4.05;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,30:30:90:1109,90,0 1/1:0,26:26:75:919,75, [...]
+1 977570 rs2710876 G A 11493.18 PASS AC=77;AF=0.770;AN=100;BaseQRankSum=-3.532;DB;DP=555;Dels=0.00;FS=6.674;HaplotypeScore=0.7412;InbreedingCoeff=0.4656;MLEAC=76;MLEAF=0.760;MQ=57.77;MQ0=0;MQRankSum=-1.243;QD=26.36;ReadPosRankSum=1.173;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=3.55;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,7:7:21:247,21,0 1/1:0,7:7:21: [...]
+1 978603 rs138543546 CCT C 9600.32 PASS AC=51;AF=0.510;AN=100;BaseQRankSum=-0.865;DB;DP=444;FS=32.481;HaplotypeScore=3.3877;InbreedingCoeff=0.4345;MLEAC=50;MLEAF=0.500;MQ=59.25;MQ0=0;MQRankSum=2.669;QD=37.50;ReadPosRankSum=-1.299;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403 GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,421 0/1:3,5:8:99:232,0,132 1/1:0,7:7:21:387,21,0 0/0:6,0:6 [...]
+1 978718 . C G 117.19 VQSRTrancheSNP99.50to99.90 AC=9;AF=0.090;AN=100;BaseQRankSum=-2.309;DP=424;Dels=0.00;FS=108.436;HaplotypeScore=0.3257;InbreedingCoeff=-0.1148;MLEAC=8;MLEAF=0.080;MQ=59.06;MQ0=0;MQRankSum=0.236;QD=1.92;ReadPosRankSum=-2.895;SNPEFF_AMINO_ACID_CHANGE=S495W;SNPEFF_CODON_CHANGE=tCg/tGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_978619_978837;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 978850 . T G 442.22 VQSRTrancheSNP99.50to99.90 AC=24;AF=0.240;AN=100;BaseQRankSum=-6.855;DP=511;Dels=0.00;FS=193.190;HaplotypeScore=0.9245;InbreedingCoeff=-0.3335;MLEAC=24;MLEAF=0.240;MQ=57.80;MQ0=0;MQRankSum=-0.677;QD=1.60;ReadPosRankSum=-9.883;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=-1.458e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:10,2:12:33:33,0,315 0/1:9 [...]
+1 978856 rs115191992 G A 382.31 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.120;DB;DP=567;Dels=0.00;FS=8.922;HaplotypeScore=1.6111;InbreedingCoeff=-0.0170;MLEAC=1;MLEAF=0.010;MQ=58.22;MQ0=0;MQRankSum=0.445;QD=15.29;ReadPosRankSum=0.158;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=3.18;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:11,0:11:33:0,33,389 0/0:16,0:16:4 [...]
+1 979245 . C T 117.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.312;DP=1817;Dels=0.00;FS=0.000;HaplotypeScore=0.6797;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.94;MQ0=0;MQRankSum=1.268;QD=6.89;ReadPosRankSum=-1.211;SNPEFF_AMINO_ACID_CHANGE=S614F;SNPEFF_CODON_CHANGE=tCc/tTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_979203_979403;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 979556 rs139886237 G A 936.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.964;DB;DP=5041;Dels=0.00;FS=3.185;HaplotypeScore=0.1048;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.89;MQ0=0;MQRankSum=1.962;QD=13.00;ReadPosRankSum=-6.007;SNPEFF_AMINO_ACID_CHANGE=Q689;SNPEFF_CODON_CHANGE=caG/caA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_979489_979637;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 979669 rs113671331 G A 717.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.158;DB;DP=2446;Dels=0.00;FS=19.190;HaplotypeScore=0.3423;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.52;MQ0=0;MQRankSum=0.833;QD=10.55;ReadPosRankSum=-2.181;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=5.58;culprit=FS GT:AD:DP:GQ:PL 0/0:36,0:36:99:0,108,1269 0/0:42,0:42:99:0,126 [...]
+1 979690 rs115413462 G A 1283.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-5.949;DB;DP=1925;Dels=0.00;FS=0.000;HaplotypeScore=0.3627;InbreedingCoeff=-0.0310;MLEAC=3;MLEAF=0.030;MQ=59.01;MQ0=0;MQRankSum=-0.548;QD=10.35;ReadPosRankSum=-4.800;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=6.13;culprit=FS GT:AD:DP:GQ:PL 0/0:33,0:33:99:0,99,1192 0/0:37,0:37:99:0,108 [...]
+1 979748 rs113288277 A T 963.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-4.154;DB;DP=1880;Dels=0.00;FS=3.164;HaplotypeScore=0.4187;InbreedingCoeff=-0.0527;MLEAC=5;MLEAF=0.050;MQ=59.23;MQ0=0;MQRankSum=1.849;QD=10.59;ReadPosRankSum=-2.048;SNPEFF_AMINO_ACID_CHANGE=E728V;SNPEFF_CODON_CHANGE=gAg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_979714_979819;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 979835 rs114389542 G A 637.50 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.599;DB;DP=617;Dels=0.00;FS=0.000;HaplotypeScore=0.3875;InbreedingCoeff=-0.0402;MLEAC=3;MLEAF=0.030;MQ=58.31;MQ0=0;MQRankSum=3.266;QD=15.55;ReadPosRankSum=1.104;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=4.93;culprit=FS GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,542 0/0:8,0:8:24:0,24,282 0/0 [...]
+1 980776 . C G 74.46 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-5.988;DP=439;Dels=0.00;FS=71.287;HaplotypeScore=0.8452;InbreedingCoeff=-0.1629;MLEAC=10;MLEAF=0.100;MQ=57.96;MQ0=0;MQRankSum=-0.107;QD=0.97;ReadPosRankSum=-3.005;SNPEFF_AMINO_ACID_CHANGE=G803;SNPEFF_CODON_CHANGE=ggC/ggG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_980739_980903;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 980784 . A C 80.26 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-6.659;DP=490;Dels=0.00;FS=103.640;HaplotypeScore=0.8030;InbreedingCoeff=-0.1257;MLEAC=8;MLEAF=0.080;MQ=58.29;MQ0=0;MQRankSum=0.878;QD=0.98;ReadPosRankSum=-2.250;SNPEFF_AMINO_ACID_CHANGE=D806A;SNPEFF_CODON_CHANGE=gAc/gCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_980739_980903;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 980824 rs112039851 G C 1069.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.331;DB;DP=1769;Dels=0.00;FS=5.595;HaplotypeScore=0.8300;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.91;MQ0=0;MQRankSum=2.172;QD=11.75;ReadPosRankSum=-2.279;SNPEFF_AMINO_ACID_CHANGE=G819;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_980739_980903;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 980955 rs139005472 AC A 694.11 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-0.461;DB;DP=979;FS=64.640;HaplotypeScore=7.7724;InbreedingCoeff=-0.0321;MLEAC=3;MLEAF=0.030;MQ=59.08;MQ0=0;MQRankSum=1.386;QD=9.92;RPA=5,4;RU=C;ReadPosRankSum=-0.725;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;STR GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,705 0/0:10,0:10:30:0,30,312 0/0:19,0:21:57: [...]
+1 981087 rs3128098 A G 71791.08 PASS AC=83;AF=0.830;AN=100;BaseQRankSum=-9.449;DB;DP=2837;Dels=0.00;FS=0.304;HaplotypeScore=0.6543;InbreedingCoeff=0.0787;MLEAC=83;MLEAF=0.830;MQ=59.38;MQ0=0;MQRankSum=0.669;QD=27.05;ReadPosRankSum=1.276;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=6.42;culprit=FS GT:AD:DP:GQ:PL 1/1:0,54:54:99:1755,162,0 1/1:0,50:50:99:1672,1 [...]
+1 981131 rs9697293 A G 2519.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-5.251;DB;DP=4516;Dels=0.00;FS=0.427;HaplotypeScore=0.6990;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.41;MQ0=0;MQRankSum=0.463;QD=11.40;ReadPosRankSum=-4.089;SNPEFF_AMINO_ACID_CHANGE=Q852R;SNPEFF_CODON_CHANGE=cAa/cGa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_981113_981256;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 981310 . C G 57.63 VQSRTrancheSNP99.90to100.00 AC=5;AF=0.050;AN=100;BaseQRankSum=-13.235;DP=1756;Dels=0.00;FS=661.835;HaplotypeScore=2.4875;InbreedingCoeff=-0.0545;MLEAC=4;MLEAF=0.040;MQ=57.94;MQ0=0;MQRankSum=-2.110;QD=0.29;ReadPosRankSum=-11.970;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=-1.365e+02;culprit=FS GT:AD:DP:GQ:PL 0/0:25,4:28:66:0,66,798 0/0: [...]
+1 981931 rs2465128 A G 25023.30 PASS AC=79;AF=0.790;AN=100;BaseQRankSum=0.003;DB;DP=1130;Dels=0.00;FS=3.119;HaplotypeScore=0.4877;InbreedingCoeff=0.4554;MLEAC=79;MLEAF=0.790;MQ=59.12;MQ0=0;MQRankSum=0.727;QD=27.17;ReadPosRankSum=-0.178;SNPEFF_AMINO_ACID_CHANGE=S1022;SNPEFF_CODON_CHANGE=tcA/tcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_981777_982115;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 982213 rs150132566 G C 241.08 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.122;DB;DP=335;Dels=0.00;FS=2.637;HaplotypeScore=0.2214;InbreedingCoeff=-0.0476;MLEAC=2;MLEAF=0.020;MQ=59.17;MQ0=0;MQRankSum=0.048;QD=12.05;ReadPosRankSum=-0.086;SNPEFF_AMINO_ACID_CHANGE=L1088F;SNPEFF_CODON_CHANGE=ttG/ttC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_982200_982337;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 982380 rs183929080 G T 103.95 PASS AC=3;AF=0.032;AN=94;BaseQRankSum=-2.624;DB;DP=214;Dels=0.00;FS=0.000;HaplotypeScore=0.0950;InbreedingCoeff=0.1828;MLEAC=2;MLEAF=0.021;MQ=59.30;MQ0=0;MQRankSum=1.767;QD=12.99;ReadPosRankSum=-1.767;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=5.26;culprit=FS GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,76 0/0:8,0:8:24:0,24,302 0/0:7,0:7 [...]
+1 982783 rs146358566 T C 1055.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.103;DB;DP=3310;Dels=0.00;FS=35.844;HaplotypeScore=0.3795;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.11;MQ0=0;MQRankSum=0.675;QD=14.07;ReadPosRankSum=-2.797;SNPEFF_AMINO_ACID_CHANGE=A1155;SNPEFF_CODON_CHANGE=gcT/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_982707_982834;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 982844 rs76264143 G C 1826.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-5.313;DB;DP=2660;Dels=0.00;FS=5.401;HaplotypeScore=0.4417;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.54;MQ0=0;MQRankSum=-0.660;QD=12.86;ReadPosRankSum=-3.444;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=7.29;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:58,0:58:99:0,175,2145 0/0:34, [...]
+1 982921 rs140939425 C T 303.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.832;DB;DP=1732;Dels=0.00;FS=6.485;HaplotypeScore=1.2241;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.14;MQ0=0;MQRankSum=1.190;QD=10.45;ReadPosRankSum=-0.639;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=5.13;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:24,0:24:72:0,72,802 0/0:18,0:18 [...]
+1 982941 rs3128102 T C 68937.62 PASS AC=78;AF=0.780;AN=100;BaseQRankSum=8.975;DB;DP=2796;Dels=0.00;FS=39.838;HaplotypeScore=1.0331;InbreedingCoeff=0.4172;MLEAC=78;MLEAF=0.780;MQ=59.43;MQ0=0;MQRankSum=0.281;QD=30.69;ReadPosRankSum=-1.070;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=0.959;culprit=FS GT:AD:DP:GQ:PL 1/1:0,53:53:99:1960,159,0 1/1:0,45:45:99:1701 [...]
+1 982994 rs10267 T C 108225.07 PASS AC=81;AF=0.810;AN=100;BaseQRankSum=14.669;DB;DP=3820;Dels=0.00;FS=16.758;HaplotypeScore=0.5747;InbreedingCoeff=0.2853;MLEAC=81;MLEAF=0.810;MQ=59.41;MQ0=0;MQRankSum=0.337;QD=32.22;ReadPosRankSum=0.569;SNPEFF_AMINO_ACID_CHANGE=F1186;SNPEFF_CODON_CHANGE=ttT/ttC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_982953_983067;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 983149 . T C 96.73 VQSRTrancheSNP99.50to99.90 AC=13;AF=0.130;AN=100;BaseQRankSum=-5.923;DP=496;Dels=0.00;FS=32.307;HaplotypeScore=0.2942;InbreedingCoeff=-0.1570;MLEAC=11;MLEAF=0.110;MQ=58.61;MQ0=0;MQRankSum=1.926;QD=1.01;ReadPosRankSum=-3.735;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=-3.018e+00;culprit=QD GT:AD:DP:GQ:PL 0/1:9,1:11:2:2,0,237 0/0:11,4:15 [...]
+1 983243 rs142620337 C T 58.51 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.123;DB;DP=456;Dels=0.00;FS=0.000;HaplotypeScore=0.3617;InbreedingCoeff=-0.0248;MLEAC=1;MLEAF=0.010;MQ=57.19;MQ0=0;MQRankSum=1.902;QD=5.85;ReadPosRankSum=-0.454;SNPEFF_AMINO_ACID_CHANGE=P1240L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_983156_983275;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 983274 rs138818746 T C 156.53 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.591;DB;DP=381;Dels=0.00;FS=0.000;HaplotypeScore=0.1397;InbreedingCoeff=-0.0279;MLEAC=1;MLEAF=0.010;MQ=57.42;MQ0=0;MQRankSum=1.871;QD=19.57;ReadPosRankSum=1.672;SNPEFF_AMINO_ACID_CHANGE=F1250;SNPEFF_CODON_CHANGE=ttT/ttC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_983156_983275;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 983506 rs139294803 C T 42.70 PASS AC=1;AF=0.011;AN=92;BaseQRankSum=0.220;DB;DP=215;Dels=0.00;FS=0.000;HaplotypeScore=0.3543;InbreedingCoeff=-0.0969;MLEAC=1;MLEAF=0.011;MQ=56.99;MQ0=0;MQRankSum=1.099;QD=3.88;ReadPosRankSum=0.767;SNPEFF_AMINO_ACID_CHANGE=P1289L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_983392_983745;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT [...]
+1 984302 rs9442391 T C 4145.31 PASS AC=55;AF=0.550;AN=100;BaseQRankSum=1.569;DB;DP=259;Dels=0.00;FS=1.672;HaplotypeScore=0.1354;InbreedingCoeff=0.4788;MLEAC=54;MLEAF=0.540;MQ=58.09;MQ0=0;MQRankSum=0.824;QD=27.64;ReadPosRankSum=-0.866;SNPEFF_AMINO_ACID_CHANGE=T1387;SNPEFF_CODON_CHANGE=acT/acC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984247_984439;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 984579 . C A 45.31 PASS AC=2;AF=0.023;AN=88;BaseQRankSum=-1.957;DP=179;Dels=0.00;FS=0.000;HaplotypeScore=0.1073;InbreedingCoeff=-0.0958;MLEAC=2;MLEAF=0.023;MQ=58.43;MQ0=0;MQRankSum=1.560;QD=3.78;ReadPosRankSum=-1.440;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=3.30;culprit=QD GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,116 0/0:4,0:4:12:0,12,145 0/0:1,0:1:3:0,3,39 0/0 [...]
+1 984660 . C T 253.76 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.379;DP=465;Dels=0.00;FS=3.325;HaplotypeScore=0.3265;InbreedingCoeff=-0.0356;MLEAC=1;MLEAF=0.010;MQ=58.83;MQ0=0;MQRankSum=0.520;QD=12.08;ReadPosRankSum=0.196;SNPEFF_AMINO_ACID_CHANGE=P1448L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984616_984831;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 984752 . G A 183.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.576;DP=1540;Dels=0.00;FS=0.000;HaplotypeScore=0.4200;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=59.24;MQ0=0;MQRankSum=2.697;QD=11.45;ReadPosRankSum=-0.897;SNPEFF_AMINO_ACID_CHANGE=E1479K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984616_984831;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 984847 rs112917612 G C 1861.40 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-7.130;DB;DP=1003;Dels=0.00;FS=2.687;HaplotypeScore=0.6865;InbreedingCoeff=-0.0444;MLEAC=4;MLEAF=0.040;MQ=59.28;MQ0=0;MQRankSum=3.864;QD=12.66;ReadPosRankSum=-1.407;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=5.75;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:29,0:29:87:0,87,1088 0/0:16,0: [...]
+1 985171 rs115019873 C T 267.76 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.523;DB;DP=463;Dels=0.00;FS=1.361;HaplotypeScore=0.2723;InbreedingCoeff=0.0246;MLEAC=2;MLEAF=0.020;MQ=58.30;MQ0=0;MQRankSum=0.881;QD=13.39;ReadPosRankSum=-1.194;SNPEFF_AMINO_ACID_CHANGE=R1580;SNPEFF_CODON_CHANGE=cgC/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984946_985175;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 985239 rs115192323 C T 1101.30 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.754;DB;DP=1161;Dels=0.00;FS=9.709;HaplotypeScore=0.3394;InbreedingCoeff=-0.0223;MLEAC=2;MLEAF=0.020;MQ=59.03;MQ0=0;MQRankSum=2.144;QD=13.60;ReadPosRankSum=-0.375;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=7.20;culprit=MQ GT:AD:DP:GQ:PL 0/0:10,0:10:30:0,30,360 0/0:10,0:10:30:0,30,35 [...]
+1 985266 rs2275813 C T 19151.74 PASS AC=51;AF=0.510;AN=100;BaseQRankSum=-2.655;DB;DP=1453;Dels=0.00;FS=1.032;HaplotypeScore=0.4190;InbreedingCoeff=0.2384;MLEAC=51;MLEAF=0.510;MQ=59.28;MQ0=0;MQRankSum=4.926;QD=22.35;ReadPosRankSum=-1.534;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=3.43;culprit=FS GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,759 1/1:0,11:11:33:410,33, [...]
+1 985377 rs113020870 C T 131.21 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.877;DB;DP=946;Dels=0.00;FS=0.000;HaplotypeScore=0.5711;InbreedingCoeff=-0.0114;MLEAC=1;MLEAF=0.010;MQ=59.35;MQ0=0;MQRankSum=1.294;QD=7.29;ReadPosRankSum=-2.187;SNPEFF_AMINO_ACID_CHANGE=C1613;SNPEFF_CODON_CHANGE=tgC/tgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985283_985417;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 985443 rs71576592 AG A 1666.26 PASS AC=56;AF=0.651;AN=86;BaseQRankSum=-0.304;DB;DP=179;FS=3.739;HaplotypeScore=13.0598;InbreedingCoeff=0.1155;MLEAC=60;MLEAF=0.698;MQ=53.87;MQ0=0;MQRankSum=-0.873;QD=11.34;RPA=15,14;RU=G;ReadPosRankSum=-0.534;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;STR GT:AD:DP:GQ:PL 1/1:0,3:5:9:73,9,0 0/0:0,0:4:0:0,0,1 0/0:0,0:3:1:0,1,1 0/1: [...]
+1 985446 rs2275812 G T 1019.88 PASS AC=23;AF=0.256;AN=90;BaseQRankSum=-6.476;DB;DP=176;Dels=0.00;FS=28.544;HaplotypeScore=2.2684;InbreedingCoeff=0.3262;MLEAC=21;MLEAF=0.233;MQ=51.95;MQ0=0;MQRankSum=2.575;QD=15.45;ReadPosRankSum=1.628;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=1.80;culprit=MQ GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,182 1/1:0,5:5:15:167,15,0 1/1:0 [...]
+1 985447 . G T 43.33 VQSRTrancheSNP98.90to99.00 AC=5;AF=0.054;AN=92;BaseQRankSum=-3.356;DP=174;Dels=0.00;FS=7.679;HaplotypeScore=2.1988;InbreedingCoeff=-0.1176;MLEAC=5;MLEAF=0.054;MQ=51.84;MQ0=0;MQRankSum=-2.494;QD=2.28;ReadPosRankSum=0.457;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=0.083;culprit=QD GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,217 0/0:5,0:5:15:0,15,1 [...]
+1 985449 rs56255212 G A 1749.09 PASS AC=43;AF=0.467;AN=92;BaseQRankSum=-7.334;DB;DP=175;Dels=0.00;FS=18.432;HaplotypeScore=1.0005;InbreedingCoeff=-0.1046;MLEAC=41;MLEAF=0.446;MQ=52.47;MQ0=0;MQRankSum=1.914;QD=13.56;ReadPosRankSum=-0.484;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=0.851;culprit=MQ GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,167 1/1:0,5:5:15:172,15,0 1 [...]
+1 985450 . G A 2316.82 PASS AC=47;AF=0.500;AN=94;BaseQRankSum=-7.697;DP=183;Dels=0.00;FS=11.816;HaplotypeScore=3.8258;InbreedingCoeff=-0.0235;MLEAC=49;MLEAF=0.521;MQ=52.73;MQ0=0;MQRankSum=1.234;QD=15.04;ReadPosRankSum=1.316;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=0.879;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:1,5:6:9:104,9,0 0/0:5,0:5:15:0,15,185 0/0: [...]
+1 985460 rs2275811 T C 2962.99 PASS AC=27;AF=0.270;AN=100;BaseQRankSum=5.374;DB;DP=280;Dels=0.00;FS=0.000;HaplotypeScore=1.3809;InbreedingCoeff=0.3112;MLEAC=29;MLEAF=0.290;MQ=54.31;MQ0=0;MQRankSum=-3.872;QD=19.89;ReadPosRankSum=-0.890;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=1.68;culprit=MQ GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,262 0/0:8,0:8:24:0,24,260 0/0: [...]
+1 985626 rs139400715 C T 788.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.990;DB;DP=3936;Dels=0.00;FS=3.913;HaplotypeScore=1.3126;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.26;MQ0=0;MQRankSum=1.831;QD=10.95;ReadPosRankSum=0.226;SNPEFF_AMINO_ACID_CHANGE=D1631;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985613_985709;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 985797 rs142286944 A G 572.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.785;DB;DP=1567;Dels=0.00;FS=5.649;HaplotypeScore=0.3128;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.32;MQ0=0;MQRankSum=1.849;QD=11.92;ReadPosRankSum=-0.687;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=8.00;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:28,0:28:84:0,84,1002 0/0:35,0: [...]
+1 985826 rs17160775 G A 2760.44 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-8.955;DB;DP=1611;Dels=0.00;FS=6.081;HaplotypeScore=0.4089;InbreedingCoeff=0.3684;MLEAC=5;MLEAF=0.050;MQ=59.33;MQ0=0;MQRankSum=-0.137;QD=14.23;ReadPosRankSum=0.527;SNPEFF_AMINO_ACID_CHANGE=V1666I;SNPEFF_CODON_CHANGE=Gtc/Atc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985807_985971;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 985900 rs17160776 C T 2924.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.587;DB;DP=2417;Dels=0.00;FS=2.340;HaplotypeScore=0.4268;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.25;MQ0=0;MQRankSum=-0.881;QD=13.17;ReadPosRankSum=-1.106;SNPEFF_AMINO_ACID_CHANGE=F1690;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985807_985971;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 985999 rs111726760 G T 2007.14 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-5.020;DB;DP=1342;Dels=0.00;FS=0.000;HaplotypeScore=0.5814;InbreedingCoeff=-0.0315;MLEAC=3;MLEAF=0.030;MQ=59.22;MQ0=0;MQRankSum=-0.141;QD=13.94;ReadPosRankSum=-1.586;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=7.27;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:48:0,48,564 0/0:23,0:23:69:0,69,8 [...]
+1 986010 rs116257587 T C 1466.45 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-5.826;DB;DP=1187;Dels=0.00;FS=0.695;HaplotypeScore=0.9650;InbreedingCoeff=0.3677;MLEAC=5;MLEAF=0.050;MQ=59.26;MQ0=0;MQRankSum=-1.433;QD=11.92;ReadPosRankSum=-2.805;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=4.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:20,0:20:60:0,60,687 0/0:21,0:2 [...]
+1 986056 rs28545735 C T 219.30 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.301;DB;DP=618;Dels=0.00;FS=8.387;HaplotypeScore=0.3670;InbreedingCoeff=-0.0163;MLEAC=1;MLEAF=0.010;MQ=58.85;MQ0=0;MQRankSum=-0.560;QD=10.44;ReadPosRankSum=-2.790;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=5.59;culprit=MQ GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,390 0/0:12,0:12:36:0,36,404 [...]
+1 986731 rs112073270 C T 168.52 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-0.026;DB;DP=251;Dels=0.00;FS=3.382;HaplotypeScore=0.5293;InbreedingCoeff=-0.0640;MLEAC=1;MLEAF=0.010;MQ=57.67;MQ0=0;MQRankSum=1.303;QD=14.04;ReadPosRankSum=-0.517;SNPEFF_AMINO_ACID_CHANGE=F127;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_986633_986749;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 986737 rs17160781 T C 466.10 PASS AC=4;AF=0.042;AN=96;BaseQRankSum=-0.523;DB;DP=232;Dels=0.00;FS=7.765;HaplotypeScore=0.5174;InbreedingCoeff=-0.1029;MLEAC=4;MLEAF=0.042;MQ=57.81;MQ0=0;MQRankSum=2.606;QD=16.07;ReadPosRankSum=-2.501;SNPEFF_AMINO_ACID_CHANGE=G129;SNPEFF_CODON_CHANGE=ggT/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_986633_986749;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 986885 . T G 441.47 VQSRTrancheSNP99.50to99.90 AC=19;AF=0.198;AN=96;BaseQRankSum=-7.503;DP=235;Dels=0.00;FS=141.555;HaplotypeScore=0.1373;InbreedingCoeff=-0.2318;MLEAC=21;MLEAF=0.219;MQ=59.05;MQ0=0;MQRankSum=2.350;QD=4.01;ReadPosRankSum=-7.910;SNPEFF_AMINO_ACID_CHANGE=V151G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_986833_987025;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SN [...]
+1 987076 rs143046493 C T 120.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.567;DB;DP=1311;Dels=0.00;FS=2.262;HaplotypeScore=0.3259;InbreedingCoeff=-0.0106;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=1.248;QD=7.51;ReadPosRankSum=-0.295;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=6.87;culprit=QD GT:AD:DP:GQ:PL 0/1:10,6:16:99:160,0,294 0/0:31,0:31:93:0,93,112 [...]
+1 987142 rs17778478 C T 928.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.711;DB;DP=2776;Dels=0.00;FS=1.468;HaplotypeScore=0.4996;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.28;MQ0=0;MQRankSum=1.557;QD=12.71;ReadPosRankSum=-0.092;SNPEFF_AMINO_ACID_CHANGE=T1866;SNPEFF_CODON_CHANGE=acC/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_987108_987195;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 987200 rs9803031 C T 39368.64 PASS AC=78;AF=0.780;AN=100;BaseQRankSum=7.389;DB;DP=1656;Dels=0.00;FS=10.170;HaplotypeScore=0.5690;InbreedingCoeff=0.3007;MLEAC=78;MLEAF=0.780;MQ=59.44;MQ0=0;MQRankSum=0.167;QD=27.63;ReadPosRankSum=2.023;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=5.59;culprit=FS GT:AD:DP:GQ:PL 1/1:0,25:25:75:881,75,0 1/1:0,35:35:99:1265,105 [...]
+1 990280 rs4275402 C T 2285.57 PASS AC=54;AF=0.600;AN=90;BaseQRankSum=3.564;DB;DP=149;Dels=0.00;FS=1.108;HaplotypeScore=0.2197;InbreedingCoeff=0.4198;MLEAC=53;MLEAF=0.589;MQ=58.20;MQ0=0;MQRankSum=0.621;QD=22.63;ReadPosRankSum=0.707;SNPEFF_AMINO_ACID_CHANGE=D2019;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_990204_991496;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 990380 rs3121561 C T 1289.03 PASS AC=38;AF=0.413;AN=92;BaseQRankSum=2.240;DB;DP=134;Dels=0.00;FS=9.245;HaplotypeScore=0.1459;InbreedingCoeff=0.4029;MLEAC=36;MLEAF=0.391;MQ=56.54;MQ0=0;MQRankSum=1.845;QD=21.48;ReadPosRankSum=1.141;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000461111;VQSLOD=3.77;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,5:5:15:172,15,0 0/0:2,0:2:6:0,6,59 0/0:1,0:1: [...]
+1 1019314 rs115613719 G T 80.45 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.398;DB;DP=380;Dels=0.00;FS=2.415;HaplotypeScore=0.1312;InbreedingCoeff=-0.0260;MLEAC=1;MLEAF=0.010;MQ=58.41;MQ0=0;MQRankSum=0.738;QD=8.04;ReadPosRankSum=-1.491;SNPEFF_AMINO_ACID_CHANGE=R194;SNPEFF_CODON_CHANGE=Cgg/Agg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1019295_1019391;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1019717 . C T 219.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.621;DP=1213;Dels=0.00;FS=6.649;HaplotypeScore=0.3895;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.42;MQ0=0;MQRankSum=0.405;QD=9.96;ReadPosRankSum=-1.859;SNPEFF_AMINO_ACID_CHANGE=R173H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1019295_1019763;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_I [...]
+1 1021249 rs61520960 G A 565.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.547;DB;DP=1236;Dels=0.00;FS=0.000;HaplotypeScore=0.4088;InbreedingCoeff=-0.0205;MLEAC=2;MLEAF=0.020;MQ=58.93;MQ0=0;MQRankSum=1.104;QD=12.03;ReadPosRankSum=-2.817;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000427787;VQSLOD=7.29;culprit=MQ GT:AD:DP:GQ:PL 0/0:25,0:25:75:0,75,812 0/0:30,0:30:90:0,90, [...]
+1 1021346 rs10907177 A G 14466.05 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=19.709;DB;DP=2081;Dels=0.00;FS=2.032;HaplotypeScore=0.6786;InbreedingCoeff=-0.0000;MLEAC=20;MLEAF=0.200;MQ=58.86;MQ0=0;MQRankSum=0.655;QD=17.35;ReadPosRankSum=-0.572;SNPEFF_AMINO_ACID_CHANGE=I119;SNPEFF_CODON_CHANGE=atT/atC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1021258_1021392;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1021408 rs11260587 G A 5476.87 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-10.418;DB;DP=1361;Dels=0.00;FS=2.722;HaplotypeScore=3.7841;InbreedingCoeff=0.1111;MLEAC=10;MLEAF=0.100;MQ=58.95;MQ0=0;MQRankSum=-0.507;QD=15.05;ReadPosRankSum=-0.885;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000427787;VQSLOD=2.01;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:18,0:18:51:0,51,631 0/0 [...]
+1 1021415 rs3737728 A G 31297.26 PASS AC=77;AF=0.770;AN=100;BaseQRankSum=4.762;DB;DP=1211;Dels=0.00;FS=14.650;HaplotypeScore=3.2284;InbreedingCoeff=-0.0702;MLEAC=77;MLEAF=0.770;MQ=59.03;MQ0=0;MQRankSum=-1.622;QD=26.86;ReadPosRankSum=0.942;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000427787;VQSLOD=1.56;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,18:18:51:619,51,0 1/1: [...]
+1 1115461 rs116383664 C T 216.43 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.632;DB;DP=558;Dels=0.00;FS=2.782;HaplotypeScore=0.2055;InbreedingCoeff=-0.0225;MLEAC=1;MLEAF=0.010;MQ=58.89;MQ0=0;MQRankSum=0.016;QD=8.66;ReadPosRankSum=-0.833;SNPEFF_AMINO_ACID_CHANGE=R10W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1115414_1115720;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1115503 rs111751804 T C 119.81 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-3.346;DB;DP=816;Dels=0.00;FS=6.651;HaplotypeScore=0.2278;InbreedingCoeff=-0.0298;MLEAC=2;MLEAF=0.020;MQ=59.15;MQ0=0;MQRankSum=-0.990;QD=3.00;ReadPosRankSum=-0.508;SNPEFF_AMINO_ACID_CHANGE=C24R;SNPEFF_CODON_CHANGE=Tgt/Cgt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1115414_1115720;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1115548 rs114390380 G A 44.30 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.321;DB;DP=616;Dels=0.00;FS=4.626;HaplotypeScore=0.1976;InbreedingCoeff=-0.0164;MLEAC=1;MLEAF=0.010;MQ=58.76;MQ0=0;MQRankSum=1.640;QD=4.92;ReadPosRankSum=0.271;SNPEFF_AMINO_ACID_CHANGE=G112R;SNPEFF_CODON_CHANGE=Gga/Aga;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1115414_1115720;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1115994 rs13376597 G A 1981.08 PASS AC=36;AF=0.400;AN=90;BaseQRankSum=0.825;DB;DP=155;Dels=0.00;FS=0.000;HaplotypeScore=0.0768;InbreedingCoeff=0.2755;MLEAC=36;MLEAF=0.400;MQ=59.41;MQ0=0;MQRankSum=0.543;QD=21.53;ReadPosRankSum=-0.106;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379288;VQSLOD=6.55;culprit=FS GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,97 0/0:4,0:4:12:0,12,130 0/0 [...]
+1 1116005 rs112517367 C T 78.65 PASS AC=4;AF=0.043;AN=92;BaseQRankSum=-1.231;DB;DP=169;Dels=0.00;FS=6.189;HaplotypeScore=0.0638;InbreedingCoeff=0.0473;MLEAC=3;MLEAF=0.033;MQ=59.02;MQ0=0;MQRankSum=0.337;QD=9.83;ReadPosRankSum=-0.619;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379288;VQSLOD=5.59;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,100 0/0:3,0:3:9:0,9 [...]
+1 1116189 rs137938349 G A 259.70 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=0.051;DB;DP=469;Dels=0.00;FS=1.585;HaplotypeScore=0.2633;InbreedingCoeff=-0.0302;MLEAC=1;MLEAF=0.010;MQ=58.77;MQ0=0;MQRankSum=0.355;QD=11.80;ReadPosRankSum=-1.003;SNPEFF_AMINO_ACID_CHANGE=R162Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1116111_1116240;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1116231 rs13374146 T C 1902.60 PASS AC=21;AF=0.228;AN=92;BaseQRankSum=3.944;DB;DP=220;Dels=0.00;FS=0.000;HaplotypeScore=0.5092;InbreedingCoeff=0.1624;MLEAC=22;MLEAF=0.239;MQ=58.70;MQ0=0;MQRankSum=0.514;QD=19.22;ReadPosRankSum=-1.908;SNPEFF_AMINO_ACID_CHANGE=V176A;SNPEFF_CODON_CHANGE=gTc/gCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1116111_1116240;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1117111 rs140479651 T C 201.36 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.436;DB;DP=471;Dels=0.00;FS=12.324;HaplotypeScore=0.1182;InbreedingCoeff=-0.0196;MLEAC=1;MLEAF=0.010;MQ=59.24;MQ0=0;MQRankSum=1.933;QD=8.75;ReadPosRankSum=-0.757;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=6.53;culprit=FS GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,154 0/0:11,0:11:27:0,2 [...]
+1 1117709 rs112895009 G A 1399.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.319;DB;DP=2759;Dels=0.00;FS=1.311;HaplotypeScore=0.4317;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.73;MQ0=0;MQRankSum=0.189;QD=14.73;ReadPosRankSum=-2.345;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=7.39;culprit=FS GT:AD:DP:GQ:PL 0/0:56,0:56:99:0,169,2117 0/0:54,0:54 [...]
+1 1118212 rs10907171 T C 4570.83 PASS AC=55;AF=0.573;AN=96;BaseQRankSum=1.399;DB;DP=225;Dels=0.00;FS=2.180;HaplotypeScore=0.0763;InbreedingCoeff=0.4741;MLEAC=56;MLEAF=0.583;MQ=59.00;MQ0=0;MQRankSum=0.957;QD=27.54;ReadPosRankSum=1.962;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=5.88;culprit=MQ GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,222 0/0:3,0:3:9:0,9,111 [...]
+1 1118275 rs61733845 C T 3765.19 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=-9.799;DB;DP=464;Dels=0.00;FS=10.169;HaplotypeScore=0.2958;InbreedingCoeff=0.3216;MLEAC=24;MLEAF=0.240;MQ=58.83;MQ0=0;MQRankSum=0.829;QD=21.27;ReadPosRankSum=-0.343;SNPEFF_AMINO_ACID_CHANGE=C239;SNPEFF_CODON_CHANGE=tgC/tgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1118256_1118427;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=LOW;SNPEFF_TRANS [...]
+1 1118475 . C G 95.18 PASS AC=2;AF=0.023;AN=86;BaseQRankSum=1.836;DP=135;Dels=0.00;FS=9.454;HaplotypeScore=0.2094;InbreedingCoeff=0.1015;MLEAC=1;MLEAF=0.012;MQ=58.64;MQ0=0;MQRankSum=-0.009;QD=19.04;ReadPosRankSum=1.508;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=3.75;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,31 0/0:3,0:3:9:0,9,90 0/0:2,0:2:6:0,6,79 [...]
+1 1119361 rs143930968 A G 831.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.139;DB;DP=6393;Dels=0.00;FS=6.831;HaplotypeScore=0.0316;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.99;MQ0=0;MQRankSum=0.961;QD=11.08;ReadPosRankSum=-4.052;SNPEFF_AMINO_ACID_CHANGE=I311V;SNPEFF_CODON_CHANGE=Att/Gtt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1119300_1119471;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;S [...]
+1 1120307 rs7539911 G A 1769.63 VQSRTrancheSNP99.00to99.30 AC=31;AF=0.316;AN=98;BaseQRankSum=9.676;DB;DP=592;Dels=0.00;FS=2.748;HaplotypeScore=0.1408;InbreedingCoeff=-0.0273;MLEAC=30;MLEAF=0.306;MQ=31.70;MQ0=88;MQRankSum=-0.795;QD=4.35;ReadPosRankSum=1.177;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460998;VQSLOD=-8.879e-01;culprit=MQ GT:AD:DP:GQ:PL 0/1:17,4:20: [...]
+1 1120370 rs74046640 C G 637.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.595;DB;DP=1533;Dels=0.00;FS=4.312;HaplotypeScore=0.4421;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=55.77;MQ0=0;MQRankSum=1.366;QD=10.80;ReadPosRankSum=0.970;SNPEFF_AMINO_ACID_CHANGE=L355V;SNPEFF_CODON_CHANGE=Ctg/Gtg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1120377 rs116321663 T A 220.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.263;DB;DP=1631;Dels=0.00;FS=0.000;HaplotypeScore=0.4840;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=55.37;MQ0=0;MQRankSum=2.741;QD=12.23;ReadPosRankSum=-0.441;SNPEFF_AMINO_ACID_CHANGE=M357K;SNPEFF_CODON_CHANGE=aTg/aAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1120431 rs1320571 G A 14417.02 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=-12.760;DB;DP=1876;Dels=0.00;FS=4.673;HaplotypeScore=0.3230;InbreedingCoeff=0.1250;MLEAC=20;MLEAF=0.200;MQ=56.40;MQ0=0;MQRankSum=3.518;QD=20.25;ReadPosRankSum=-2.166;SNPEFF_AMINO_ACID_CHANGE=S375N;SNPEFF_CODON_CHANGE=aGt/aAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE [...]
+1 1120488 rs74475385 A C 641.98 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-1.440;DB;DP=1912;Dels=0.00;FS=6.318;HaplotypeScore=0.5771;InbreedingCoeff=-0.0187;MLEAC=1;MLEAF=0.010;MQ=57.56;MQ0=0;MQRankSum=2.697;QD=8.02;ReadPosRankSum=-1.265;SNPEFF_AMINO_ACID_CHANGE=K394T;SNPEFF_CODON_CHANGE=aAg/aCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1120503 rs116251234 G A 305.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-6.195;DB;DP=1869;Dels=0.00;FS=8.945;HaplotypeScore=0.4827;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=57.84;MQ0=0;MQRankSum=1.103;QD=3.72;ReadPosRankSum=-1.793;SNPEFF_AMINO_ACID_CHANGE=C399Y;SNPEFF_CODON_CHANGE=tGc/tAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1120536 rs77950429 G A 2662.47 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.987;DB;DP=1475;Dels=0.00;FS=3.207;HaplotypeScore=0.3647;InbreedingCoeff=-0.0529;MLEAC=5;MLEAF=0.050;MQ=57.96;MQ0=0;MQRankSum=0.529;QD=13.80;ReadPosRankSum=-1.922;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460998;VQSLOD=4.94;culprit=MQ GT:AD:DP:GQ:PL 0/0:24,0:24:69:0,69,817 0/0:28,0:28:84 [...]
+1 1139202 rs2298213 T C 1239.37 PASS AC=16;AF=0.163;AN=98;BaseQRankSum=1.124;DB;DP=276;Dels=0.00;FS=2.200;HaplotypeScore=0.2314;InbreedingCoeff=0.1054;MLEAC=15;MLEAF=0.153;MQ=58.26;MQ0=0;MQRankSum=0.247;QD=11.37;ReadPosRankSum=-1.776;SNPEFF_AMINO_ACID_CHANGE=P179;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1138888_1139340;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1139498 rs11466693 C T 292.34 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.184;DB;DP=688;Dels=0.00;FS=4.192;HaplotypeScore=0.4994;InbreedingCoeff=-0.0240;MLEAC=2;MLEAF=0.020;MQ=59.41;MQ0=0;MQRankSum=-0.078;QD=9.74;ReadPosRankSum=0.429;SNPEFF_AMINO_ACID_CHANGE=V173M;SNPEFF_CODON_CHANGE=Gtg/Atg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139435_1139616;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1139547 . C T 31.26 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.063;DP=630;Dels=0.00;FS=2.593;HaplotypeScore=0.4362;InbreedingCoeff=-0.0144;MLEAC=1;MLEAF=0.010;MQ=58.81;MQ0=0;MQRankSum=1.373;QD=3.91;ReadPosRankSum=0.742;SNPEFF_AMINO_ACID_CHANGE=G156;SNPEFF_CODON_CHANGE=ggG/ggA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139435_1139616;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST000003792 [...]
+1 1139565 rs61761323 G A 567.31 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.312;DB;DP=745;Dels=0.00;FS=0.000;HaplotypeScore=0.3168;InbreedingCoeff=-0.0228;MLEAC=2;MLEAF=0.020;MQ=58.81;MQ0=0;MQRankSum=1.159;QD=13.19;ReadPosRankSum=1.412;SNPEFF_AMINO_ACID_CHANGE=N150;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139435_1139616;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1139862 rs11466691 T C 395.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.920;DB;DP=1988;Dels=0.00;FS=1.293;HaplotypeScore=0.3883;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.04;MQ0=0;MQRankSum=0.336;QD=15.20;ReadPosRankSum=-0.918;SNPEFF_AMINO_ACID_CHANGE=K105;SNPEFF_CODON_CHANGE=aaA/aaG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139779_1139866;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1141723 rs11466678 A G 112.49 PASS AC=4;AF=0.065;AN=62;BaseQRankSum=1.989;DB;DP=64;Dels=0.00;FS=5.756;HaplotypeScore=0.0000;InbreedingCoeff=-0.0243;MLEAC=4;MLEAF=0.065;MQ=58.28;MQ0=0;MQRankSum=0.057;QD=14.06;ReadPosRankSum=-0.663;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379236;VQSLOD=5.64;culprit=MQ GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,69 0/0:2,0:2:6:0,6,71 0/0:3,0:3: [...]
+1 1141824 rs11466676 G C 94.64 PASS AC=7;AF=0.113;AN=62;BaseQRankSum=0.022;DB;DP=55;Dels=0.00;FS=3.310;HaplotypeScore=0.0509;InbreedingCoeff=0.1317;MLEAC=6;MLEAF=0.097;MQ=58.44;MQ0=0;MQRankSum=-0.373;QD=9.46;ReadPosRankSum=1.076;SNPEFF_AMINO_ACID_CHANGE=T43R;SNPEFF_CODON_CHANGE=aCg/aGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1141765_1141951;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 1147108 . G C 452.93 VQSRTrancheSNP99.50to99.90 AC=23;AF=0.245;AN=94;BaseQRankSum=-5.961;DP=290;Dels=0.00;FS=54.941;HaplotypeScore=0.2645;InbreedingCoeff=-0.3669;MLEAC=24;MLEAF=0.255;MQ=57.70;MQ0=0;MQRankSum=1.865;QD=2.54;ReadPosRankSum=-1.650;SNPEFF_AMINO_ACID_CHANGE=P247A;SNPEFF_CODON_CHANGE=Ccc/Gcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1147084_1147212;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODERA [...]
+1 1147243 rs2298211 A C 721.18 PASS AC=14;AF=0.143;AN=98;BaseQRankSum=4.461;DB;DP=255;Dels=0.00;FS=5.837;HaplotypeScore=0.2488;InbreedingCoeff=0.3908;MLEAC=12;MLEAF=0.122;MQ=57.98;MQ0=0;MQRankSum=1.434;QD=20.03;ReadPosRankSum=-3.805;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379236;VQSLOD=4.26;culprit=MQ GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,71 0/0:7,0:7:21:0,21,244 0/0:6,0:6: [...]
+1 1147296 . C T 170.29 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.163;DP=331;Dels=0.00;FS=15.996;HaplotypeScore=0.3569;InbreedingCoeff=0.2751;MLEAC=2;MLEAF=0.020;MQ=58.06;MQ0=0;MQRankSum=0.454;QD=18.92;ReadPosRankSum=-0.262;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000360001;VQSLOD=2.99;culprit=FS GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,106 0/0:5,0:5:15:0,15,189 0/0:4,0:4:12:0,12, [...]
+1 1147297 rs2298212 G A 938.06 PASS AC=14;AF=0.140;AN=100;BaseQRankSum=2.937;DB;DP=337;Dels=0.00;FS=1.810;HaplotypeScore=0.3569;InbreedingCoeff=0.3434;MLEAC=12;MLEAF=0.120;MQ=58.13;MQ0=0;MQRankSum=1.579;QD=14.89;ReadPosRankSum=-0.993;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000360001;VQSLOD=5.19;culprit=MQ GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,167 0/0:5,0:5:15:0,15,162 0/0:4 [...]
+1 1147422 rs17568 C T 16834.05 PASS AC=40;AF=0.400;AN=100;BaseQRankSum=-12.108;DB;DP=1219;Dels=0.00;FS=0.942;HaplotypeScore=0.6440;InbreedingCoeff=0.2496;MLEAC=40;MLEAF=0.400;MQ=58.89;MQ0=0;MQRankSum=0.957;QD=22.57;ReadPosRankSum=-1.370;SNPEFF_AMINO_ACID_CHANGE=E178;SNPEFF_CODON_CHANGE=gaG/gaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1147322_1147518;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ [...]
+1 1147486 rs150220682 G A 964.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.199;DB;DP=1578;Dels=0.00;FS=1.348;HaplotypeScore=0.9890;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.43;MQ0=0;MQRankSum=2.785;QD=13.39;ReadPosRankSum=1.265;SNPEFF_AMINO_ACID_CHANGE=P157L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1147322_1147518;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1147983 rs11260559 C T 115.86 PASS AC=5;AF=0.100;AN=50;BaseQRankSum=-1.063;DB;DP=47;Dels=0.00;FS=0.000;HaplotypeScore=0.3581;InbreedingCoeff=0.1233;MLEAC=5;MLEAF=0.100;MQ=56.71;MQ0=0;MQRankSum=0.000;QD=19.31;ReadPosRankSum=-1.472;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=3.18;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 ./. ./. ./. ./. ./. ./. ./. [...]
+1 1147985 rs11260560 C A 167.52 PASS AC=5;AF=0.093;AN=54;BaseQRankSum=-2.503;DB;DP=52;Dels=0.00;FS=0.000;HaplotypeScore=0.2951;InbreedingCoeff=0.1304;MLEAC=5;MLEAF=0.093;MQ=57.06;MQ0=0;MQRankSum=1.669;QD=20.94;ReadPosRankSum=-1.283;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=3.68;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 0/0:2,0:2:6:0,6,74 ./. ./. . [...]
+1 1148100 rs34108055 G C 352.12 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-1.796;DB;DP=360;Dels=0.00;FS=1.079;HaplotypeScore=0.2761;InbreedingCoeff=-0.0482;MLEAC=2;MLEAF=0.020;MQ=58.23;MQ0=0;MQRankSum=-0.442;QD=14.08;ReadPosRankSum=-2.256;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=5.22;culprit=FS GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 0/0:7,0:7:21:0,21,265 0/0:8, [...]
+1 1148358 rs35033502 G A 895.54 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.649;DB;DP=756;Dels=0.00;FS=2.874;HaplotypeScore=0.6591;InbreedingCoeff=-0.0303;MLEAC=2;MLEAF=0.020;MQ=59.52;MQ0=0;MQRankSum=0.522;QD=13.99;ReadPosRankSum=-0.698;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=7.83;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,555 0/0:21,0:21: [...]
+1 1149316 rs35737009 C G 1416.42 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-4.698;DB;DP=389;Dels=0.00;FS=13.861;HaplotypeScore=0.3927;InbreedingCoeff=0.0899;MLEAC=8;MLEAF=0.080;MQ=58.25;MQ0=0;MQRankSum=1.010;QD=15.40;ReadPosRankSum=0.133;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=4.57;culprit=FS GT:AD:DP:GQ:PL 0/0:7,0:7:21:0,21,265 0/0:6,0:6:18:0,18,227 0/0: [...]
+1 1153009 rs116328547 G A 858.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.224;DB;DP=3871;Dels=0.00;FS=6.160;HaplotypeScore=0.2069;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=-0.494;QD=11.44;ReadPosRankSum=-2.576;SNPEFF_AMINO_ACID_CHANGE=A324;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152288_1153068;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1153039 rs139426313 G A 782.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.817;DB;DP=4234;Dels=0.00;FS=0.000;HaplotypeScore=0.3295;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.46;MQ0=0;MQRankSum=-0.799;QD=10.43;ReadPosRankSum=1.030;SNPEFF_AMINO_ACID_CHANGE=N314;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152288_1153068;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1153077 rs150377323 G A 648.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.125;DB;DP=3584;Dels=0.00;FS=9.107;HaplotypeScore=0.8191;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=-1.067;QD=10.45;ReadPosRankSum=-2.836;SNPEFF_AMINO_ACID_CHANGE=L340;SNPEFF_CODON_CHANGE=ctC/ctT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152311_1153184;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1153113 rs12036216 G A 7802.77 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=-2.491;DB;DP=1685;Dels=0.00;FS=2.703;HaplotypeScore=1.5024;InbreedingCoeff=0.0274;MLEAC=13;MLEAF=0.130;MQ=58.78;MQ0=0;MQRankSum=-0.128;QD=18.36;ReadPosRankSum=1.871;SNPEFF_AMINO_ACID_CHANGE=L328;SNPEFF_CODON_CHANGE=ctC/ctT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152311_1153184;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1154121 rs112680577 G A 490.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.690;DB;DP=3513;Dels=0.00;FS=1.344;HaplotypeScore=0.1529;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.67;MQ0=0;MQRankSum=-0.016;QD=12.57;ReadPosRankSum=-1.528;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000545427;VQSLOD=9.43;culprit=FS GT:AD:DP:GQ:PL 0/0:59,0:59:99:0,177,1917 0/0:71,0:71:99:0,214 [...]
+1 1154318 . C T 606.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.427;DP=4220;Dels=0.00;FS=1.794;HaplotypeScore=0.1369;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.80;MQ0=0;MQRankSum=2.357;QD=8.08;ReadPosRankSum=-2.836;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000545427;VQSLOD=6.53;culprit=QD GT:AD:DP:GQ:PL 0/0:94,0:94:99:0,283,3055 0/0:80,0:80:99:0,241,2600 0/0:80,0: [...]
+1 1158631 rs6603781 A G 87610.56 PASS AC=92;AF=0.920;AN=100;BaseQRankSum=-10.313;DB;DP=2899;Dels=0.00;FS=19.158;HaplotypeScore=0.5914;InbreedingCoeff=-0.0870;MLEAC=92;MLEAF=0.920;MQ=59.55;MQ0=0;MQRankSum=-0.875;QD=30.22;ReadPosRankSum=0.175;SNPEFF_AMINO_ACID_CHANGE=D190;SNPEFF_CODON_CHANGE=gaT/gaC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1158624_1158737;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 1158667 rs59813672 G A 705.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.231;DB;DP=4346;Dels=0.00;FS=0.000;HaplotypeScore=0.2481;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=1.458;QD=18.56;ReadPosRankSum=-2.507;SNPEFF_AMINO_ACID_CHANGE=A178;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1158624_1158737;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1163804 rs7515488 C T 3114.64 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=-8.635;DB;DP=629;Dels=0.00;FS=2.559;HaplotypeScore=1.6667;InbreedingCoeff=-0.1364;MLEAC=20;MLEAF=0.200;MQ=57.83;MQ0=0;MQRankSum=0.696;QD=11.71;ReadPosRankSum=1.175;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=4.12;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:13,0:14:36:0,36,433 0/0:18,0:18:54 [...]
+1 1163811 rs3831195 G GGACA 3714.19 PASS AC=16;AF=0.160;AN=100;BaseQRankSum=-3.663;DB;DP=741;FS=12.198;HaplotypeScore=14.1352;InbreedingCoeff=0.0859;MLEAC=15;MLEAF=0.150;MQ=58.09;MQ0=0;MQRankSum=-5.029;QD=19.86;RPA=1,2;RU=GACA;ReadPosRankSum=0.005;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;STR GT:AD:DP:GQ:PL 0/0:14,0:14:42:0,42,874 0/0:19,0:19:57:0,57,2026 0/0:11,0: [...]
+1 1163964 rs78548753 G A 1451.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=4.790;DB;DP=3750;Dels=0.00;FS=2.183;HaplotypeScore=0.0720;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.61;MQ0=0;MQRankSum=-0.132;QD=11.52;ReadPosRankSum=-1.228;SNPEFF_AMINO_ACID_CHANGE=D70;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1164031 rs61744664 A G 3294.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=10.935;DB;DP=4190;Dels=0.00;FS=0.000;HaplotypeScore=0.1389;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.19;MQ0=0;MQRankSum=0.384;QD=12.62;ReadPosRankSum=-3.406;SNPEFF_AMINO_ACID_CHANGE=V48A;SNPEFF_CODON_CHANGE=gTa/gCa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1164072 rs61745645 C T 2434.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=4.907;DB;DP=2634;Dels=0.00;FS=9.141;HaplotypeScore=0.1683;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.47;MQ0=0;MQRankSum=-0.446;QD=12.36;ReadPosRankSum=-3.326;SNPEFF_AMINO_ACID_CHANGE=A34;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1164090 rs61745652 T C 1875.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-4.382;DB;DP=1996;Dels=0.00;FS=5.493;HaplotypeScore=0.3177;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.72;MQ0=0;MQRankSum=0.417;QD=10.42;ReadPosRankSum=-4.229;SNPEFF_AMINO_ACID_CHANGE=A28;SNPEFF_CODON_CHANGE=gcA/gcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1164179 rs76230175 G A 1172.75 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-0.309;DB;DP=629;Dels=0.00;FS=0.000;HaplotypeScore=0.4909;InbreedingCoeff=-0.0514;MLEAC=4;MLEAF=0.040;MQ=58.59;MQ0=0;MQRankSum=1.204;QD=15.04;ReadPosRankSum=-1.439;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000459994;VQSLOD=6.14;culprit=MQ GT:AD:DP:GQ:PL 0/0:13,0:13:39:0,39,481 0/0:18,0:18:45:0,45,570 [...]
+1 1168180 rs12085009 G C 1325.78 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=1.659;DB;DP=262;Dels=0.00;FS=5.929;HaplotypeScore=0.0894;InbreedingCoeff=0.0222;MLEAC=11;MLEAF=0.110;MQ=58.65;MQ0=0;MQRankSum=3.434;QD=15.07;ReadPosRankSum=-0.612;SNPEFF_AMINO_ACID_CHANGE=E174D;SNPEFF_CODON_CHANGE=gaG/gaC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1167629_1170421;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=B3GALT6;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1177918 rs139102213 CT C 326.60 PASS AC=8;AF=0.091;AN=88;BaseQRankSum=-1.557;DB;DP=157;FS=19.564;HaplotypeScore=2.8667;InbreedingCoeff=0.1163;MLEAC=7;MLEAF=0.080;MQ=57.60;MQ0=0;MQRankSum=1.933;QD=17.19;ReadPosRankSum=-2.531;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000468365 GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,98 0/0:5,0:5:15:0,15,227 0/0:2,0:2:6:0,6,65 1/1:0,2:2:6 [...]
+1 1177981 rs59852185 C T 235.94 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-1.118;DB;DP=299;Dels=0.00;FS=1.607;HaplotypeScore=0.1710;InbreedingCoeff=-0.0718;MLEAC=3;MLEAF=0.030;MQ=58.77;MQ0=0;MQRankSum=1.351;QD=9.44;ReadPosRankSum=-1.332;SNPEFF_AMINO_ACID_CHANGE=V286I;SNPEFF_CODON_CHANGE=Gtc/Atc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1177833_1178026;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1178244 rs74511182 G C 1317.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=1.347;DB;DP=1516;Dels=0.00;FS=0.000;HaplotypeScore=1.9453;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.30;MQ0=0;MQRankSum=-0.331;QD=11.26;ReadPosRankSum=0.100;SNPEFF_AMINO_ACID_CHANGE=L261V;SNPEFF_CODON_CHANGE=Cta/Gta;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178215_1178293;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;S [...]
+1 1178245 rs11260566 C T 4707.77 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=1.821;DB;DP=1497;Dels=0.00;FS=2.148;HaplotypeScore=1.8178;InbreedingCoeff=0.0274;MLEAC=13;MLEAF=0.130;MQ=59.30;MQ0=0;MQRankSum=-0.888;QD=11.80;ReadPosRankSum=-1.408;SNPEFF_AMINO_ACID_CHANGE=T260;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178215_1178293;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1178266 rs77651834 C T 1361.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-6.912;DB;DP=1455;Dels=0.00;FS=2.693;HaplotypeScore=0.7635;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.61;MQ0=0;MQRankSum=1.230;QD=11.16;ReadPosRankSum=-0.554;SNPEFF_AMINO_ACID_CHANGE=E253;SNPEFF_CODON_CHANGE=gaG/gaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178215_1178293;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=LOW;SNPEFF_TRANS [...]
+1 1178482 rs78555129 A G 646.55 PASS AC=12;AF=0.120;AN=100;BaseQRankSum=3.052;DB;DP=366;Dels=0.00;FS=0.000;HaplotypeScore=0.2874;InbreedingCoeff=-0.0196;MLEAC=11;MLEAF=0.110;MQ=58.65;MQ0=0;MQRankSum=2.865;QD=7.61;ReadPosRankSum=-2.541;SNPEFF_AMINO_ACID_CHANGE=C231R;SNPEFF_CODON_CHANGE=Tgt/Cgt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178442_1178532;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1178925 rs12093154 G A 224.49 PASS AC=9;AF=0.098;AN=92;BaseQRankSum=-3.680;DB;DP=143;Dels=0.00;FS=0.000;HaplotypeScore=0.0867;InbreedingCoeff=0.0361;MLEAC=9;MLEAF=0.098;MQ=59.06;MQ0=0;MQRankSum=-0.020;QD=10.69;ReadPosRankSum=0.180;SNPEFF_AMINO_ACID_CHANGE=A180V;SNPEFF_CODON_CHANGE=gCc/gTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178824_1178932;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1179309 rs113164957 G A 762.33 PASS AC=9;AF=0.092;AN=98;BaseQRankSum=2.196;DB;DP=388;Dels=0.00;FS=0.826;HaplotypeScore=0.3006;InbreedingCoeff=0.0684;MLEAC=9;MLEAF=0.092;MQ=57.81;MQ0=0;MQRankSum=0.882;QD=11.05;ReadPosRankSum=0.346;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000486627;VQSLOD=4.70;culprit=MQ GT:AD:DP:GQ:PL 0/0:9,0:9:27:0,27,292 0/0:10,0:10:30:0,30, [...]
+1 1179416 . A C 452.21 VQSRTrancheSNP99.50to99.90 AC=20;AF=0.200;AN=100;BaseQRankSum=-7.343;DP=373;Dels=0.00;FS=263.651;HaplotypeScore=0.5212;InbreedingCoeff=-0.2857;MLEAC=20;MLEAF=0.200;MQ=57.68;MQ0=0;MQRankSum=-2.506;QD=2.43;ReadPosRankSum=-2.504;SNPEFF_AMINO_ACID_CHANGE=V150G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1179334_1179485;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPA [...]
+1 1179720 . G A 398.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.843;DP=1449;Dels=0.00;FS=0.000;HaplotypeScore=0.1730;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.32;MQ0=0;MQRankSum=0.759;QD=12.84;ReadPosRankSum=-0.811;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000330388;VQSLOD=7.66;culprit=FS GT:AD:DP:GQ:PL 0/0:25,0:25:75:0,75,945 0/0:29,0:29:87:0,87,1072 0/0:2 [...]
+1 1179747 rs139237071 C T 119.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.890;DB;DP=1386;Dels=0.00;FS=1.272;HaplotypeScore=0.1482;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=-0.214;QD=7.01;ReadPosRankSum=-1.629;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000330388;VQSLOD=7.54;culprit=QD GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,721 0/0:23,0:23:69:0,6 [...]
+1 1179800 rs115586508 G A 164.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.862;DB;DP=1304;Dels=0.00;FS=3.739;HaplotypeScore=0.3207;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=59.14;MQ0=0;MQRankSum=0.195;QD=10.95;ReadPosRankSum=0.915;SNPEFF_AMINO_ACID_CHANGE=G85;SNPEFF_CODON_CHANGE=ggC/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1179761_1179877;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1179887 . C T 769.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.251;DP=2822;Dels=0.00;FS=4.261;HaplotypeScore=0.3507;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.17;MQ0=0;MQRankSum=0.091;QD=10.39;ReadPosRankSum=0.804;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000330388;VQSLOD=6.55;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:43,0:43:99:0,129,1438 0/0:36,0:36:99:0, [...]
+1 1190685 rs41303853 G A 968.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.043;DB;DP=4078;Dels=0.00;FS=21.159;HaplotypeScore=0.0388;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.43;MQ0=0;MQRankSum=1.839;QD=13.08;ReadPosRankSum=-3.079;SNPEFF_AMINO_ACID_CHANGE=H174;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1189294_1190867;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1190772 rs142877043 G A 853.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.344;DB;DP=4939;Dels=0.00;FS=2.044;HaplotypeScore=0.0383;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.96;MQ0=0;MQRankSum=1.323;QD=11.38;ReadPosRankSum=-4.114;SNPEFF_AMINO_ACID_CHANGE=L145;SNPEFF_CODON_CHANGE=ctC/ctT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1189294_1190867;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1190913 rs35025185 CT C 5352.41 Indel_FS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.641;DB;DP=2103;FS=916.231;HaplotypeScore=3.2018;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=60.01;MQ0=0;MQRankSum=-0.789;QD=20.20;RPA=3,2;RU=T;ReadPosRankSum=-2.742;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000422076;STR GT:AD:DP:GQ:PL 0/0:58,0:58:99:0,175,2359 0/0:49,0:49:99:0, [...]
+1 1192515 rs7524470 A G 4166.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.197;DB;DP=4240;Dels=0.00;FS=0.393;HaplotypeScore=0.2293;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=58.70;MQ0=0;MQRankSum=3.687;QD=12.29;ReadPosRankSum=-4.441;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000422076;VQSLOD=6.12;culprit=MQ GT:AD:DP:GQ:PL 0/0:94,0:94:99:0,283,3396 0/0:87,0:8 [...]
+1 1203271 rs34496935 G A 2883.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=8.615;DB;DP=6182;Dels=0.00;FS=1.371;HaplotypeScore=0.0772;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.40;MQ0=0;MQRankSum=1.327;QD=12.81;ReadPosRankSum=-2.692;SNPEFF_AMINO_ACID_CHANGE=A34;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1203242_1203372;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=LOW;SNPEFF_TRANS [...]
+1 1203387 rs60981775 G A 6133.20 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=-3.383;DB;DP=5980;Dels=0.00;FS=6.158;HaplotypeScore=0.6739;InbreedingCoeff=-0.0753;MLEAC=7;MLEAF=0.070;MQ=59.68;MQ0=0;MQRankSum=0.617;QD=12.70;ReadPosRankSum=-1.401;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000347370;VQSLOD=5.98;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,447 [...]
+1 1219382 rs114582555 C G 88.07 PASS AC=1;AF=0.011;AN=90;BaseQRankSum=-0.452;DB;DP=190;Dels=0.00;FS=2.449;HaplotypeScore=0.1048;InbreedingCoeff=-0.0739;MLEAC=1;MLEAF=0.011;MQ=56.67;MQ0=0;MQRankSum=1.103;QD=12.58;ReadPosRankSum=-2.846;SNPEFF_AMINO_ACID_CHANGE=S29*;SNPEFF_CODON_CHANGE=tCa/tGa;SNPEFF_EFFECT=STOP_GAINED;SNPEFF_EXON_ID=exon_1_1219358_1219470;SNPEFF_FUNCTIONAL_CLASS=NONSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1219477 . T G 36.11 VQSRTrancheSNP98.60to98.80 AC=6;AF=0.077;AN=78;BaseQRankSum=0.033;DP=101;Dels=0.00;FS=0.000;HaplotypeScore=0.2421;InbreedingCoeff=-0.0718;MLEAC=6;MLEAF=0.077;MQ=56.11;MQ0=0;MQRankSum=-1.583;QD=1.90;ReadPosRankSum=-1.911;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000325425;VQSLOD=0.678;culprit=QD GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,74 0/0:1,0:1:3:0,3,33 0/0: [...]
+1 1221302 rs113398060 A G 106.79 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.035;DB;DP=328;Dels=0.00;FS=1.834;HaplotypeScore=0.1742;InbreedingCoeff=-0.0378;MLEAC=1;MLEAF=0.010;MQ=58.35;MQ0=0;MQRankSum=0.755;QD=11.87;ReadPosRankSum=-0.525;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467651;VQSLOD=6.36;culprit=MQ GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,108 0/0:14,0:14:42:0,42,506 0/ [...]
+1 1222267 rs11260579 G C 16654.33 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=10.931;DB;DP=2576;Dels=0.00;FS=17.053;HaplotypeScore=1.6904;InbreedingCoeff=0.3789;MLEAC=23;MLEAF=0.230;MQ=58.83;MQ0=0;MQRankSum=1.663;QD=19.23;ReadPosRankSum=-2.692;SNPEFF_AMINO_ACID_CHANGE=R180P;SNPEFF_CODON_CHANGE=cGc/cCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1222148_1222355;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1222598 rs74046669 C T 707.32 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=2.110;DB;DP=679;Dels=0.00;FS=0.000;HaplotypeScore=0.4005;InbreedingCoeff=-0.0364;MLEAC=3;MLEAF=0.030;MQ=59.14;MQ0=0;MQRankSum=0.423;QD=13.60;ReadPosRankSum=-2.986;SNPEFF_AMINO_ACID_CHANGE=A246V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1222489_1222679;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1222690 rs115316182 C T 149.71 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.632;DB;DP=486;Dels=0.00;FS=0.000;HaplotypeScore=0.7057;InbreedingCoeff=0.0582;MLEAC=2;MLEAF=0.020;MQ=58.09;MQ0=0;MQRankSum=1.446;QD=10.69;ReadPosRankSum=0.068;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467651;VQSLOD=4.27;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:3,6:9:7:148,0,7 0/0:16,0:16:48:0 [...]
+1 1222695 rs910556 G A,C 3136.58 PASS AC=1,30;AF=0.010,0.306;AN=98;BaseQRankSum=-8.335;DB;DP=399;Dels=0.00;FS=3.725;HaplotypeScore=0.5375;InbreedingCoeff=0.3717;MLEAC=1,27;MLEAF=0.010,0.276;MQ=58.47;MQ0=0;MQRankSum=3.912;QD=16.77;ReadPosRankSum=0.033;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467651;VQSLOD=3.00;culprit=MQ GT:AD:DP:GQ:PL 0/0:10,0,0:10:30:0,30,356,30,3 [...]
+1 1222958 rs111819661 C T 753.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.335;DB;DP=1554;Dels=0.00;FS=26.039;HaplotypeScore=0.5055;InbreedingCoeff=-0.0205;MLEAC=2;MLEAF=0.020;MQ=59.26;MQ0=0;MQRankSum=1.368;QD=13.70;ReadPosRankSum=-1.939;SNPEFF_AMINO_ACID_CHANGE=R297C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1222888_1222976;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1222979 . G C 537.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.388;DP=1361;Dels=0.00;FS=1.902;HaplotypeScore=1.6463;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.88;MQ0=0;MQRankSum=1.693;QD=9.26;ReadPosRankSum=1.479;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=2.96;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:57:0,57,671 0/0:24,0:24:66:0,66,819 0/0:19,0:19: [...]
+1 1223248 rs137916996 C T 49.24 PASS AC=1;AF=0.011;AN=94;BaseQRankSum=-2.383;DB;DP=183;Dels=0.00;FS=0.000;HaplotypeScore=0.0723;InbreedingCoeff=-0.0855;MLEAC=1;MLEAF=0.011;MQ=57.45;MQ0=0;MQRankSum=1.124;QD=9.85;ReadPosRankSum=-1.056;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=3.10;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 0/0:8,0:8:24:0,24,309 0/0:2,0: [...]
+1 1223385 rs75809000 G C 747.24 PASS AC=14;AF=0.194;AN=72;BaseQRankSum=1.485;DB;DP=108;Dels=0.00;FS=0.000;HaplotypeScore=0.1209;InbreedingCoeff=0.3797;MLEAC=14;MLEAF=0.194;MQ=56.31;MQ0=0;MQRankSum=0.767;QD=26.69;ReadPosRankSum=-1.386;SNPEFF_AMINO_ACID_CHANGE=E380Q;SNPEFF_CODON_CHANGE=Gag/Cag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1223319_1223417;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1223427 rs13306645 G A 68.49 PASS AC=2;AF=0.026;AN=76;BaseQRankSum=-0.709;DB;DP=108;Dels=0.00;FS=0.000;HaplotypeScore=0.1002;InbreedingCoeff=-0.1338;MLEAC=2;MLEAF=0.026;MQ=56.37;MQ0=0;MQRankSum=2.431;QD=7.61;ReadPosRankSum=0.174;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=4.18;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 0/0:1,0:1:3:0,3,40 0/0:3,0:3:9:0 [...]
+1 1226307 . G C 64.13 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-10.181;DP=627;Dels=0.00;FS=242.902;HaplotypeScore=0.5136;InbreedingCoeff=-0.1322;MLEAC=9;MLEAF=0.090;MQ=59.27;MQ0=0;MQRankSum=0.459;QD=0.59;ReadPosRankSum=-0.392;SNPEFF_AMINO_ACID_CHANGE=G486;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226275_1226333;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=LOW;SNPEFF_TR [...]
+1 1226512 rs114257304 G A 106.84 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-0.900;DB;DP=986;Dels=0.00;FS=0.000;HaplotypeScore=0.5586;InbreedingCoeff=-0.0187;MLEAC=1;MLEAF=0.010;MQ=59.69;MQ0=0;MQRankSum=-0.130;QD=5.09;ReadPosRankSum=-0.081;SNPEFF_AMINO_ACID_CHANGE=V518M;SNPEFF_CODON_CHANGE=Gtg/Atg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226445_1226520;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1226690 rs114720027 C T 351.49 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.773;DB;DP=550;Dels=0.00;FS=4.262;HaplotypeScore=0.1621;InbreedingCoeff=-0.0295;MLEAC=2;MLEAF=0.020;MQ=58.87;MQ0=0;MQRankSum=1.640;QD=11.34;ReadPosRankSum=-1.568;SNPEFF_AMINO_ACID_CHANGE=S539;SNPEFF_CODON_CHANGE=tcC/tcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1226757 rs6690013 G A 1749.79 PASS AC=15;AF=0.150;AN=100;BaseQRankSum=1.042;DB;DP=619;Dels=0.00;FS=12.041;HaplotypeScore=0.3167;InbreedingCoeff=-0.0313;MLEAC=15;MLEAF=0.150;MQ=58.25;MQ0=0;MQRankSum=-0.068;QD=11.82;ReadPosRankSum=-2.367;SNPEFF_AMINO_ACID_CHANGE=G562S;SNPEFF_CODON_CHANGE=Ggc/Agc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1226851 rs61730205 C T 630.15 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-1.472;DB;DP=1013;Dels=0.00;FS=0.834;HaplotypeScore=0.3216;InbreedingCoeff=0.0159;MLEAC=3;MLEAF=0.030;MQ=59.07;MQ0=0;MQRankSum=-0.293;QD=13.70;ReadPosRankSum=-0.829;SNPEFF_AMINO_ACID_CHANGE=P593L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1226889 rs609805 G A 5555.09 PASS AC=16;AF=0.160;AN=100;BaseQRankSum=5.838;DB;DP=1216;Dels=0.00;FS=0.359;HaplotypeScore=0.4783;InbreedingCoeff=0.1058;MLEAC=16;MLEAF=0.160;MQ=59.16;MQ0=0;MQRankSum=0.413;QD=16.63;ReadPosRankSum=-2.001;SNPEFF_AMINO_ACID_CHANGE=G606R;SNPEFF_CODON_CHANGE=Ggg/Agg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 1226971 rs75670559 T C 828.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=4.484;DB;DP=1649;Dels=0.00;FS=7.459;HaplotypeScore=0.3037;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.38;MQ0=0;MQRankSum=1.277;QD=13.80;ReadPosRankSum=-1.432;SNPEFF_AMINO_ACID_CHANGE=L633P;SNPEFF_CODON_CHANGE=cTt/cCt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 1233912 . A G 321.40 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.955;DP=656;Dels=0.00;FS=9.470;HaplotypeScore=0.4190;InbreedingCoeff=-0.0204;MLEAC=1;MLEAF=0.010;MQ=59.01;MQ0=0;MQRankSum=0.788;QD=11.08;ReadPosRankSum=-0.829;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=6.00;culprit=MQ GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,412 0/0:10,0:10:30:0,30,354 0/0:11,0:11: [...]
+1 1233921 . G A 573.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.298;DP=1114;Dels=0.00;FS=7.313;HaplotypeScore=0.4787;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=58.92;MQ0=0;MQRankSum=-0.852;QD=12.46;ReadPosRankSum=-1.628;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=5.37;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,663 0/0:19,0:19:57:0,57,606 0/0:13,0:1 [...]
+1 1233941 rs1739855 T C 37046.38 PASS AC=44;AF=0.440;AN=100;BaseQRankSum=6.371;DB;DP=2355;Dels=0.00;FS=1.559;HaplotypeScore=0.9307;InbreedingCoeff=0.4318;MLEAC=44;MLEAF=0.440;MQ=59.11;MQ0=0;MQRankSum=-1.651;QD=26.48;ReadPosRankSum=-0.024;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=4.50;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:50,0:50:99:0,150,1849 0/1:20 [...]
+1 1233955 rs140458556 T A 260.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.302;DB;DP=3190;Dels=0.00;FS=0.000;HaplotypeScore=0.8920;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.12;MQ0=0;MQRankSum=0.256;QD=9.29;ReadPosRankSum=0.208;SNPEFF_AMINO_ACID_CHANGE=T243;SNPEFF_CODON_CHANGE=acA/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1233947_1234059;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1234762 rs143899579 AG A 1858.62 PASS AC=18;AF=0.180;AN=100;BaseQRankSum=-1.186;DB;DP=401;FS=73.267;HaplotypeScore=3.2309;InbreedingCoeff=0.1907;MLEAC=16;MLEAF=0.160;MQ=59.58;MQ0=0;MQRankSum=0.302;QD=15.89;RPA=5,4;RU=G;ReadPosRankSum=-1.551;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;STR GT:AD:DP:GQ:PL 0/0:9,0:10:27:0,27,336 0/1:1,5:6:19:174,0,19 0/0:8,0:8:24: [...]
+1 1235511 rs144299532 G C 926.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.054;DB;DP=2389;Dels=0.00;FS=14.956;HaplotypeScore=0.2037;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.61;MQ0=0;MQRankSum=1.171;QD=11.87;ReadPosRankSum=-2.547;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=6.44;culprit=MQ GT:AD:DP:GQ:PL 0/0:41,0:41:99:0,123,1516 0/0:43,0:43:99:0,12 [...]
+1 1235604 rs75245886 G A 82.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.801;DB;DP=1222;Dels=0.00;FS=0.000;HaplotypeScore=0.3318;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.09;MQ0=0;MQRankSum=0.009;QD=8.22;ReadPosRankSum=-1.114;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=7.52;culprit=FS GT:AD:DP:GQ:PL 0/0:24,0:24:72:0,72,887 0/0:20,0:20:60:0,60,765 [...]
+1 1235845 rs60785581 C T 1897.26 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-2.520;DB;DP=1321;Dels=0.00;FS=0.877;HaplotypeScore=0.4379;InbreedingCoeff=0.4784;MLEAC=4;MLEAF=0.040;MQ=59.37;MQ0=0;MQRankSum=-0.404;QD=20.85;ReadPosRankSum=1.724;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=5.67;culprit=FS GT:AD:DP:GQ:PL 0/0:26,0:26:78:0,78,939 0/0:17,0:17:48:0,48,61 [...]
+1 1238492 rs12408158 G A 1233.58 PASS AC=13;AF=0.133;AN=98;BaseQRankSum=2.281;DB;DP=298;Dels=0.00;FS=5.926;HaplotypeScore=0.2458;InbreedingCoeff=0.0952;MLEAC=13;MLEAF=0.133;MQ=58.74;MQ0=0;MQRankSum=1.026;QD=18.14;ReadPosRankSum=-0.045;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000438966;VQSLOD=6.24;culprit=MQ GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,184 0/0:9,0:9:27:0,27,315 0/0 [...]
+1 1238583 rs145087137 G A 163.28 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.803;DB;DP=594;Dels=0.00;FS=9.862;HaplotypeScore=0.5034;InbreedingCoeff=-0.0156;MLEAC=1;MLEAF=0.010;MQ=59.18;MQ0=0;MQRankSum=0.540;QD=9.60;ReadPosRankSum=-0.464;SNPEFF_AMINO_ACID_CHANGE=R20C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1238542_1238661;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1244627 . C T 178.75 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.223;DP=364;Dels=0.00;FS=8.500;HaplotypeScore=0.4031;InbreedingCoeff=-0.0379;MLEAC=1;MLEAF=0.010;MQ=58.29;MQ0=0;MQRankSum=1.785;QD=11.17;ReadPosRankSum=-0.175;SNPEFF_AMINO_ACID_CHANGE=N99;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1244466_1244653;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0000037903 [...]
+1 1244638 rs12094447 G A 430.65 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.278;DB;DP=351;Dels=0.00;FS=0.000;HaplotypeScore=0.2510;InbreedingCoeff=-0.0648;MLEAC=3;MLEAF=0.030;MQ=58.49;MQ0=0;MQRankSum=1.055;QD=13.46;ReadPosRankSum=-0.559;SNPEFF_AMINO_ACID_CHANGE=R103Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1244466_1244653;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 1244924 . T G 44.87 VQSRTrancheSNP99.50to99.90 AC=9;AF=0.090;AN=100;BaseQRankSum=-4.592;DP=358;Dels=0.00;FS=87.843;HaplotypeScore=0.4217;InbreedingCoeff=-0.1319;MLEAC=8;MLEAF=0.080;MQ=58.51;MQ0=0;MQRankSum=2.155;QD=0.79;ReadPosRankSum=-3.434;SNPEFF_AMINO_ACID_CHANGE=C138W;SNPEFF_CODON_CHANGE=tgT/tgG;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1244834_1244983;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=MODERATE;S [...]
+1 1245176 rs34738574 C T 389.27 PASS AC=4;AF=0.044;AN=90;BaseQRankSum=0.969;DB;DP=196;Dels=0.00;FS=3.010;HaplotypeScore=0.1265;InbreedingCoeff=0.1584;MLEAC=4;MLEAF=0.044;MQ=57.81;MQ0=0;MQRankSum=0.817;QD=16.92;ReadPosRankSum=-3.533;SNPEFF_AMINO_ACID_CHANGE=R197W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1245061_1245231;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 1246004 rs2296474 A G 228650.47 PASS AC=94;AF=0.940;AN=100;BaseQRankSum=13.172;DB;DP=6275;Dels=0.00;FS=1.095;HaplotypeScore=0.3126;InbreedingCoeff=-0.0638;MLEAC=94;MLEAF=0.940;MQ=59.31;MQ0=0;MQRankSum=-2.817;QD=36.44;ReadPosRankSum=2.787;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000294579;VQSLOD=4.22;culprit=MQRankSum GT:AD:DP:GQ:PL 1/1:0,127:127:99:4800,382,0 0/1:4 [...]
+1 1246256 rs142589758 CGGCTCTGGGTCACAGGT C 722.20 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-0.990;DB;DP=4535;FS=184.849;HaplotypeScore=32.8539;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=49.49;MQ0=0;MQRankSum=2.223;QD=6.17;RPA=2,1;RU=GGCTCTGGGTCACAGGT;ReadPosRankSum=-3.495;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000294579;STR GT:AD:DP:GQ:PL 0/1:29,8:46:99:295,0,449 [...]
+1 1246303 rs41285824 G A 2870.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.171;DB;DP=5086;Dels=0.00;FS=4.676;HaplotypeScore=0.7060;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=50.88;MQ0=9;MQRankSum=5.683;QD=14.42;ReadPosRankSum=0.472;SNPEFF_AMINO_ACID_CHANGE=T238;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1246289_1246451;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1246487 rs78028248 G A 1800.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-10.302;DB;DP=2023;Dels=0.00;FS=3.829;HaplotypeScore=1.9729;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=57.79;MQ0=0;MQRankSum=4.543;QD=15.79;ReadPosRankSum=-4.889;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000294579;VQSLOD=3.43;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:42,0:42:99:0,126,1553 0/0: [...]
+1 1247494 rs12103 T C 3788.14 PASS AC=40;AF=0.400;AN=100;BaseQRankSum=-4.750;DB;DP=494;Dels=0.00;FS=4.386;HaplotypeScore=0.1702;InbreedingCoeff=0.3632;MLEAC=39;MLEAF=0.390;MQ=58.72;MQ0=0;MQRankSum=-0.625;QD=16.76;ReadPosRankSum=-0.103;SNPEFF_AMINO_ACID_CHANGE=P349;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1247398_1247527;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1247555 rs113412865 C T 508.19 PASS AC=5;AF=0.051;AN=98;BaseQRankSum=-2.750;DB;DP=248;Dels=0.00;FS=6.263;HaplotypeScore=0.3093;InbreedingCoeff=0.0758;MLEAC=4;MLEAF=0.041;MQ=59.17;MQ0=0;MQRankSum=1.717;QD=12.10;ReadPosRankSum=0.257;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000430786;VQSLOD=5.92;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,185 0/0:6,0:6:18:0,18, [...]
+1 1254841 rs10907179 C G 111191.07 PASS AC=69;AF=0.690;AN=100;BaseQRankSum=-3.024;DB;DP=4492;Dels=0.00;FS=3.636;HaplotypeScore=0.5490;InbreedingCoeff=0.4857;MLEAC=69;MLEAF=0.690;MQ=59.38;MQ0=0;MQRankSum=0.691;QD=31.88;ReadPosRankSum=-1.030;SNPEFF_AMINO_ACID_CHANGE=G100;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1254713_1254904;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1256507 . G GC 647.13 Indel_FS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.999;DP=1861;FS=218.924;HaplotypeScore=1.7167;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.32;MQ0=0;MQRankSum=-0.191;QD=11.16;RPA=6,7;RU=C;ReadPosRankSum=-2.162;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000530233;STR GT:AD:DP:GQ:PL 0/0:26,0:26:78:0,78,916 0/0:24,0:24:72:0,72,846 0/0:34,0:34:99:0 [...]
+1 1262276 rs113667133 C T 3467.10 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=2.521;DB;DP=2831;Dels=0.00;FS=4.811;HaplotypeScore=0.0710;InbreedingCoeff=0.6564;MLEAC=3;MLEAF=0.030;MQ=59.62;MQ0=0;MQRankSum=0.661;QD=26.27;ReadPosRankSum=-1.135;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464957;VQSLOD=6.78;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:54,0:54:99:0,162,1904 0 [...]
+1 1262571 rs147108733 C T 505.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.490;DB;DP=1250;Dels=0.00;FS=0.000;HaplotypeScore=0.5523;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=0.538;QD=11.75;ReadPosRankSum=1.730;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000343938;VQSLOD=6.66;culprit=FS GT:AD:DP:GQ:PL 0/0:22,0:22:60:0,60,720 0/0:38,0:38:99:0,10 [...]
+1 1262591 rs2296472 C T 22943.98 PASS AC=67;AF=0.670;AN=100;BaseQRankSum=-6.221;DB;DP=1285;Dels=0.00;FS=11.713;HaplotypeScore=0.8526;InbreedingCoeff=0.4136;MLEAC=67;MLEAF=0.670;MQ=59.47;MQ0=0;MQRankSum=-1.634;QD=23.95;ReadPosRankSum=0.808;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000343938;VQSLOD=4.03;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:1,24:26:72:761,72,0 0/1: [...]
+1 1262695 rs148629756 G A 750.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.914;DB;DP=1699;Dels=0.00;FS=3.457;HaplotypeScore=0.2702;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=59.54;MQ0=0;MQRankSum=1.397;QD=11.91;ReadPosRankSum=-2.277;SNPEFF_AMINO_ACID_CHANGE=R66H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1262621_1264277;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1262966 rs307349 C T 15751.52 PASS AC=71;AF=0.710;AN=100;BaseQRankSum=-7.103;DB;DP=741;Dels=0.00;FS=1.306;HaplotypeScore=0.2878;InbreedingCoeff=0.4231;MLEAC=71;MLEAF=0.710;MQ=59.01;MQ0=0;MQRankSum=-1.199;QD=28.03;ReadPosRankSum=0.530;SNPEFF_AMINO_ACID_CHANGE=R156;SNPEFF_CODON_CHANGE=cgC/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1262621_1264277;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1267651 rs111615792 G A 1183.78 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-1.023;DB;DP=637;Dels=0.00;FS=0.000;HaplotypeScore=0.4612;InbreedingCoeff=-0.0686;MLEAC=6;MLEAF=0.060;MQ=58.79;MQ0=0;MQRankSum=-1.028;QD=10.29;ReadPosRankSum=-0.120;SNPEFF_AMINO_ACID_CHANGE=R247H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1267993 . TGGA T 326.14 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.096;DP=1175;FS=29.175;HaplotypeScore=8.4510;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.35;MQ0=0;MQRankSum=0.370;QD=14.82;RPA=3,2;RU=GGA;ReadPosRankSum=-1.828;SNPEFF_AMINO_ACID_CHANGE=LE361L;SNPEFF_CODON_CHANGE=ctggag/ctg;SNPEFF_EFFECT=CODON_DELETION;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ [...]
+1 1268000 . G C 602.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.811;DP=1121;Dels=0.00;FS=0.997;HaplotypeScore=1.3484;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.36;MQ0=0;MQRankSum=0.325;QD=13.69;ReadPosRankSum=-0.411;SNPEFF_AMINO_ACID_CHANGE=E363D;SNPEFF_CODON_CHANGE=gaG/gaC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID [...]
+1 1268010 rs147600530 G T 290.29 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.409;DB;DP=1025;Dels=0.00;FS=8.338;HaplotypeScore=1.1633;InbreedingCoeff=-0.0145;MLEAC=1;MLEAF=0.010;MQ=59.36;MQ0=0;MQRankSum=-0.861;QD=10.75;ReadPosRankSum=0.634;SNPEFF_AMINO_ACID_CHANGE=G367C;SNPEFF_CODON_CHANGE=Ggc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1290581 rs189632301 G A 556.33 PASS AC=6;AF=0.075;AN=80;BaseQRankSum=-4.492;DB;DP=182;Dels=0.00;FS=7.387;HaplotypeScore=0.1711;InbreedingCoeff=-0.0299;MLEAC=6;MLEAF=0.075;MQ=56.07;MQ0=0;MQRankSum=-1.981;QD=12.36;ReadPosRankSum=-3.520;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=1.54;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:2,0:2:6:0,6,77 0/0:3,0:3:9:0,9,106 0 [...]
+1 1290592 . CGGGAGCTG C 1028.07 PASS AC=4;AF=0.043;AN=94;BaseQRankSum=0.814;DP=281;FS=0.000;HaplotypeScore=3.3594;InbreedingCoeff=-0.1121;MLEAC=4;MLEAF=0.043;MQ=55.90;MQ0=0;MQRankSum=-4.547;QD=23.91;ReadPosRankSum=0.564;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212 GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,219 0/0:5,0:5:15:0,15,372 0/0:3,0:3:9:0,9,328 0/0:3,0:3:9:0,9,328 0 [...]
+1 1291159 . GA G 519.73 PASS AC=24;AF=1.00;AN=24;DP=15;FS=0.000;HaplotypeScore=0.6904;InbreedingCoeff=-0.1855;MLEAC=24;MLEAF=1.00;MQ=57.16;MQ0=0;QD=37.12;RPA=2,1;RU=A;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;STR GT:AD:DP:GQ:PL ./. 1/1:0,1:1:3:42,3,0 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. 1/1:0,1:1:3:42,3,0 1/1:0,1:1:3:42,3,0 ./. ./. ./. ./. 1/1 [...]
+1 1291161 . A G 132.73 PASS AC=9;AF=0.409;AN=22;BaseQRankSum=0.696;DP=14;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.1996;MLEAC=9;MLEAF=0.409;MQ=56.95;MQ0=0;MQRankSum=0.978;QD=18.96;ReadPosRankSum=-2.163;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=3.22;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./ [...]
+1 1292131 rs141676214 A G 177.90 PASS AC=2;AF=0.020;AN=98;BaseQRankSum=-0.513;DB;DP=327;Dels=0.00;FS=1.439;HaplotypeScore=0.1625;InbreedingCoeff=-0.0669;MLEAC=2;MLEAF=0.020;MQ=59.46;MQ0=0;MQRankSum=1.984;QD=12.71;ReadPosRankSum=-1.192;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=5.77;culprit=FS GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,145 0/0:2,0:2:6:0,6,69 0/0: [...]
+1 1309185 rs111933693 T C 2421.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=7.758;DB;DP=2440;Dels=0.00;FS=3.905;HaplotypeScore=0.1768;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.81;MQ0=0;MQRankSum=-0.470;QD=13.68;ReadPosRankSum=-0.815;SNPEFF_AMINO_ACID_CHANGE=K199R;SNPEFF_CODON_CHANGE=aAa/aGa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309112_1309282;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1309405 rs150194697 T C 724.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.867;DB;DP=4072;Dels=0.00;FS=15.411;HaplotypeScore=0.3207;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.51;MQ0=0;MQRankSum=0.146;QD=12.07;ReadPosRankSum=-1.880;SNPEFF_AMINO_ACID_CHANGE=Q158R;SNPEFF_CODON_CHANGE=cAg/cGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309380_1309825;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1309458 rs8146 G A 2748.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-11.382;DB;DP=4713;Dels=0.00;FS=0.920;HaplotypeScore=0.1779;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.19;MQ0=0;MQRankSum=1.733;QD=13.15;ReadPosRankSum=-2.871;SNPEFF_AMINO_ACID_CHANGE=H140;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309380_1309825;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1309514 rs189539985 C T 104.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.552;DB;DP=4493;Dels=0.00;FS=2.446;HaplotypeScore=0.1300;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.78;MQ0=0;MQRankSum=-0.005;QD=1.39;ReadPosRankSum=0.053;SNPEFF_AMINO_ACID_CHANGE=A122T;SNPEFF_CODON_CHANGE=Gcg/Acg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309380_1309825;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1310074 rs2765035 C G 5721.05 PASS AC=81;AF=0.844;AN=96;BaseQRankSum=1.039;DB;DP=221;Dels=0.00;FS=1.775;HaplotypeScore=0.0840;InbreedingCoeff=0.0032;MLEAC=80;MLEAF=0.833;MQ=58.58;MQ0=0;MQRankSum=0.804;QD=27.91;ReadPosRankSum=1.578;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000321751;VQSLOD=3.99;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,2:2:6:77,6,0 0/0:3,0:3:9:0,9,111 1/1:0,4:4:1 [...]
+1 1310149 . G C 40.68 VQSRTrancheSNP99.50to99.90 AC=8;AF=0.121;AN=66;BaseQRankSum=-3.331;DP=86;Dels=0.00;FS=34.551;HaplotypeScore=0.1365;InbreedingCoeff=-0.1599;MLEAC=8;MLEAF=0.121;MQ=59.57;MQ0=0;MQRankSum=1.000;QD=1.23;ReadPosRankSum=-2.868;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000470457;VQSLOD=-2.846e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 ./. 0/0:1,0: [...]
+1 1310181 rs112533928 A G 512.39 PASS AC=13;AF=0.141;AN=92;BaseQRankSum=2.266;DB;DP=125;Dels=0.00;FS=0.000;HaplotypeScore=0.0217;InbreedingCoeff=0.3007;MLEAC=10;MLEAF=0.109;MQ=59.57;MQ0=0;MQRankSum=1.323;QD=23.29;ReadPosRankSum=0.612;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000321751;VQSLOD=6.09;culprit=FS GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,74 0/0:4,0:4:12:0,12,145 0/0:4,0: [...]
+1 1323143 rs141100746 CCT C 13311.34 PASS AC=45;AF=0.450;AN=100;BaseQRankSum=-1.765;DB;DP=629;FS=21.384;HaplotypeScore=5.6584;InbreedingCoeff=0.5423;MLEAC=45;MLEAF=0.450;MQ=59.47;MQ0=0;MQRankSum=-0.984;QD=42.39;ReadPosRankSum=-1.669;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000408918 GT:AD:DP:GQ:PL 1/1:0,23:23:69:1269,69,0 0/1:7,8:15:99:396,0,341 1/1:0,11:11:33:60 [...]
+1 1323143 . C G 157.57 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-3.824;DP=629;Dels=0.00;FS=6.116;HaplotypeScore=9.2030;InbreedingCoeff=-0.1264;MLEAC=9;MLEAF=0.090;MQ=59.47;MQ0=0;MQRankSum=-0.399;QD=1.19;ReadPosRankSum=-6.920;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000408918;VQSLOD=-2.575e+00;culprit=QD GT:AD:DP:GQ:PL 0/1:18,5:22:70:70,0,538 [...]
+1 1323393 rs145080018 C T 1347.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.383;DB;DP=5257;Dels=0.00;FS=7.366;HaplotypeScore=0.0653;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.79;MQ0=0;MQRankSum=0.583;QD=9.23;ReadPosRankSum=-3.717;SNPEFF_AMINO_ACID_CHANGE=K180;SNPEFF_CODON_CHANGE=aaG/aaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1323334_1323445;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1325990 rs147017832 G A 1953.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-10.170;DB;DP=2022;Dels=0.00;FS=3.580;HaplotypeScore=0.0892;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.66;MQ0=0;MQRankSum=1.750;QD=13.20;ReadPosRankSum=-2.037;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000408918;VQSLOD=7.72;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:49,0:49:99:0,147,1852 0/0: [...]
+1 1330726 rs1240746 A G 10759.94 PASS AC=59;AF=0.590;AN=100;BaseQRankSum=-5.597;DB;DP=529;Dels=0.00;FS=6.475;HaplotypeScore=0.3413;InbreedingCoeff=0.5729;MLEAC=61;MLEAF=0.610;MQ=58.80;MQ0=0;MQRankSum=0.420;QD=26.77;ReadPosRankSum=-0.470;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000497013;VQSLOD=6.10;culprit=MQ GT:AD:DP:GQ:PL 0/0:16,0:16:45:0,45,539 0/1:6,4:10:93:9 [...]
+1 1333597 rs190049110 G C 1129.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.787;DB;DP=3439;Dels=0.00;FS=0.000;HaplotypeScore=1.0137;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.68;MQ0=0;MQRankSum=0.918;QD=15.06;ReadPosRankSum=-2.925;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=6.18;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:96,0:96:99:0,289,3703 0/0:7 [...]
+1 1333598 rs35242196 C A 33118.31 PASS AC=29;AF=0.290;AN=100;BaseQRankSum=-13.526;DB;DP=3456;Dels=0.00;FS=0.496;HaplotypeScore=0.9537;InbreedingCoeff=0.6600;MLEAC=29;MLEAF=0.290;MQ=59.68;MQ0=0;MQRankSum=-0.103;QD=28.07;ReadPosRankSum=1.217;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=3.24;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:94,0:94:99:0,283,3553 0/0 [...]
+1 1334052 rs3831366 CTAGAG C 14597.42 Indel_FS AC=9;AF=0.090;AN=100;BaseQRankSum=-2.943;DB;DP=4458;FS=1675.569;HaplotypeScore=4.3498;InbreedingCoeff=-0.0989;MLEAC=9;MLEAF=0.090;MQ=52.32;MQ0=0;MQRankSum=-16.106;QD=24.87;ReadPosRankSum=-0.810;SNPEFF_EFFECT=SPLICE_SITE_ACCEPTOR;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000488340 GT:AD:DP:GQ:PL 0/0:98,0:98:99:0,295,7688 0/1:39,23:75:99:1599,0,294 [...]
+1 1334383 . G C 52.97 VQSRTrancheSNP98.80to98.90 AC=5;AF=0.057;AN=88;BaseQRankSum=-2.715;DP=193;Dels=0.00;FS=0.000;HaplotypeScore=0.1488;InbreedingCoeff=-0.1450;MLEAC=5;MLEAF=0.057;MQ=49.42;MQ0=0;MQRankSum=-0.363;QD=2.21;ReadPosRankSum=-3.279;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=0.234;culprit=QD GT:AD:DP:GQ:PL 0/0:3,0:3:6:0,6,64 0/0:3,0:3:9:0,9,92 [...]
+1 1334409 . C G 473.66 VQSRTrancheSNP99.00to99.30 AC=27;AF=0.300;AN=90;BaseQRankSum=-6.456;DP=177;Dels=0.00;FS=21.834;HaplotypeScore=0.3396;InbreedingCoeff=-0.2393;MLEAC=25;MLEAF=0.278;MQ=54.43;MQ0=0;MQRankSum=-3.607;QD=4.51;ReadPosRankSum=-6.896;SNPEFF_AMINO_ACID_CHANGE=R93P;SNPEFF_CODON_CHANGE=cGc/cCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1334399_1334692;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MO [...]
+1 1334412 . A G 62.06 VQSRTrancheSNP98.90to99.00 AC=8;AF=0.085;AN=94;BaseQRankSum=-1.658;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.2033;InbreedingCoeff=-0.0556;MLEAC=8;MLEAF=0.085;MQ=58.31;MQ0=0;MQRankSum=-0.750;QD=2.48;ReadPosRankSum=-3.998;SNPEFF_AMINO_ACID_CHANGE=L92P;SNPEFF_CODON_CHANGE=cTc/cCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1334399_1334692;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODERA [...]
+1 1334519 rs114112990 G C 871.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.348;DB;DP=2805;Dels=0.00;FS=1.586;HaplotypeScore=0.1594;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.63;MQ0=0;MQRankSum=2.248;QD=11.62;ReadPosRankSum=-0.067;SNPEFF_AMINO_ACID_CHANGE=D56E;SNPEFF_CODON_CHANGE=gaC/gaG;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1334399_1334692;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1334700 rs112789149 C T 208.53 PASS AC=2;AF=0.050;AN=40;BaseQRankSum=-2.069;DB;DP=58;Dels=0.00;FS=2.623;HaplotypeScore=0.1915;InbreedingCoeff=-0.1497;MLEAC=2;MLEAF=0.050;MQ=55.25;MQ0=0;MQRankSum=1.756;QD=18.96;ReadPosRankSum=-1.548;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=1.83;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 0/0:1,0:1:3:0,3,38 ./. . [...]
+1 1337527 . G A 665.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.247;DP=5818;Dels=0.00;FS=1.048;HaplotypeScore=0.0438;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.82;MQ0=0;MQRankSum=-1.059;QD=9.24;ReadPosRankSum=-3.629;SNPEFF_AMINO_ACID_CHANGE=A129V;SNPEFF_CODON_CHANGE=gCt/gTt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1337288_1337636;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID [...]
+1 1337592 . G C 1079.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.392;DP=3526;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.97;MQ0=0;MQRankSum=-0.053;QD=15.64;ReadPosRankSum=-4.160;SNPEFF_AMINO_ACID_CHANGE=I107M;SNPEFF_CODON_CHANGE=atC/atG;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1337288_1337636;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_I [...]
+1 1337687 rs141850625 G A 269.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.669;DB;DP=1105;Dels=0.00;FS=0.000;HaplotypeScore=0.1656;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=59.67;MQ0=0;MQRankSum=-0.661;QD=10.77;ReadPosRankSum=-1.696;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477686;VQSLOD=8.00;culprit=FS GT:AD:DP:GQ:PL 0/0:29,0:29:87:0,87,1096 0/0:37,0:37:99:0,1 [...]
+1 1341185 rs17160977 A G 873.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.963;DB;DP=5520;Dels=0.00;FS=1.020;HaplotypeScore=0.0385;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.58;MQ0=0;MQRankSum=2.761;QD=11.64;ReadPosRankSum=-1.514;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477686;VQSLOD=8.51;culprit=FS GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4696 0/0:126,0:126:99: [...]
+1 1342271 . TC T 304.13 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.667;DP=3006;FS=0.000;HaplotypeScore=7.2508;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.73;MQ0=0;MQRankSum=-0.821;QD=9.50;RPA=3,2;RU=C;ReadPosRankSum=-1.076;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;STR GT:AD:DP:GQ:PL 0/0:52,0:52:99:0,156,1596 0/0:59,0:62:99:0,178,2355 0/0:44,0:44:99:0,132,179 [...]
+1 1342394 rs11548045 G A 2793.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-8.131;DB;DP=5927;Dels=0.00;FS=0.000;HaplotypeScore=0.1339;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.40;MQ0=0;MQRankSum=2.753;QD=12.64;ReadPosRankSum=-4.290;SNPEFF_AMINO_ACID_CHANGE=F31;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1342289_1342399;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1342612 rs2275915 G C 3359.61 PASS AC=34;AF=0.347;AN=98;BaseQRankSum=-5.688;DB;DP=411;Dels=0.00;FS=0.716;HaplotypeScore=0.4018;InbreedingCoeff=0.5425;MLEAC=32;MLEAF=0.327;MQ=59.08;MQ0=0;MQRankSum=2.121;QD=22.10;ReadPosRankSum=-0.849;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477686;VQSLOD=5.99;culprit=FS GT:AD:DP:GQ:PL 0/1:4,2:6:53:53,0,93 0/0:8,0:8:24:0,24,275 0/0 [...]
+1 1372668 rs140319325 C T 351.23 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.878;DB;DP=699;Dels=0.00;FS=2.168;HaplotypeScore=0.2973;InbreedingCoeff=-0.0127;MLEAC=1;MLEAF=0.010;MQ=58.85;MQ0=0;MQRankSum=0.108;QD=12.54;ReadPosRankSum=-1.190;SNPEFF_AMINO_ACID_CHANGE=G145;SNPEFF_CODON_CHANGE=ggC/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1372307_1372864;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1374436 rs35368272 C T 141.23 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.370;DB;DP=770;Dels=0.00;FS=4.576;HaplotypeScore=0.4376;InbreedingCoeff=-0.0128;MLEAC=1;MLEAF=0.010;MQ=59.06;MQ0=0;MQRankSum=2.073;QD=12.84;ReadPosRankSum=0.268;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=7.18;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,431 0/0:10,0:10: [...]
+1 1374451 . C T 195.23 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.792;DP=852;Dels=0.00;FS=0.000;HaplotypeScore=0.4411;InbreedingCoeff=-0.0127;MLEAC=1;MLEAF=0.010;MQ=59.02;MQ0=0;MQRankSum=1.257;QD=11.48;ReadPosRankSum=-0.210;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=5.87;culprit=FS GT:AD:DP:GQ:PL 0/0:9,0:10:27:0,27,323 0/1:8,9:17:99:235,0,219 0/0:9,0 [...]
+1 1374762 . G A 47.10 PASS AC=3;AF=0.038;AN=80;BaseQRankSum=-1.087;DP=118;Dels=0.00;FS=0.000;HaplotypeScore=0.1537;InbreedingCoeff=0.0544;MLEAC=2;MLEAF=0.025;MQ=58.30;MQ0=0;MQRankSum=0.222;QD=11.77;ReadPosRankSum=0.296;SNPEFF_AMINO_ACID_CHANGE=S311;SNPEFF_CODON_CHANGE=tcG/tcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000476 [...]
+1 1374805 rs2275916 G C 124.32 PASS AC=6;AF=0.167;AN=36;BaseQRankSum=2.050;DB;DP=26;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.0155;MLEAC=6;MLEAF=0.167;MQ=59.44;MQ0=0;MQRankSum=-0.634;QD=13.81;ReadPosRankSum=1.528;SNPEFF_AMINO_ACID_CHANGE=A114P;SNPEFF_CODON_CHANGE=Gcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1374834 rs1892289 A G 499.07 PASS AC=27;AF=0.750;AN=36;BaseQRankSum=-1.858;DB;DP=26;Dels=0.00;FS=0.000;HaplotypeScore=0.0555;InbreedingCoeff=0.2144;MLEAC=21;MLEAF=0.583;MQ=58.64;MQ0=0;MQRankSum=0.289;QD=23.77;ReadPosRankSum=0.702;SNPEFF_AMINO_ACID_CHANGE=P123;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1375062 . C G 40.36 PASS AC=2;AF=0.067;AN=30;BaseQRankSum=1.302;DP=22;Dels=0.00;FS=0.000;HaplotypeScore=0.0664;InbreedingCoeff=0.1106;MLEAC=1;MLEAF=0.033;MQ=58.55;MQ0=0;MQRankSum=-0.434;QD=20.18;ReadPosRankSum=1.519;SNPEFF_AMINO_ACID_CHANGE=R199;SNPEFF_CODON_CHANGE=cgC/cgG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST000004047 [...]
+1 1375185 rs1240699 G C 285.09 PASS AC=15;AF=0.375;AN=40;BaseQRankSum=-0.673;DB;DP=32;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.3509;MLEAC=14;MLEAF=0.350;MQ=59.77;MQ0=0;MQRankSum=-0.439;QD=23.76;ReadPosRankSum=-0.966;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=4.61;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,71 0/0:1,0:1:3: [...]
+1 1375207 rs140247431 T C 55.74 PASS AC=4;AF=0.087;AN=46;BaseQRankSum=-0.043;DB;DP=46;Dels=0.00;FS=0.000;HaplotypeScore=0.0869;InbreedingCoeff=0.2174;MLEAC=3;MLEAF=0.065;MQ=59.80;MQ0=0;MQRankSum=-0.904;QD=18.58;ReadPosRankSum=-0.645;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=5.15;culprit=FS GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,63 0/0:1,0:1:3:0,3,39 ./. 0/ [...]
+1 1398008 rs189474682 G A 321.28 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=1.285;DB;DP=880;Dels=0.00;FS=1.026;HaplotypeScore=0.2535;InbreedingCoeff=-0.0217;MLEAC=2;MLEAF=0.020;MQ=58.94;MQ0=0;MQRankSum=0.944;QD=8.24;ReadPosRankSum=-1.912;SNPEFF_AMINO_ACID_CHANGE=G337R;SNPEFF_CODON_CHANGE=Ggg/Agg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1397980_1398088;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1398032 rs181068440 C G 180.27 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.357;DB;DP=885;Dels=0.00;FS=5.208;HaplotypeScore=0.3278;InbreedingCoeff=-0.0213;MLEAC=2;MLEAF=0.020;MQ=59.43;MQ0=0;MQRankSum=1.463;QD=7.21;ReadPosRankSum=-2.179;SNPEFF_AMINO_ACID_CHANGE=R345G;SNPEFF_CODON_CHANGE=Cgg/Ggg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1397980_1398088;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1398035 rs186498073 C T 436.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.900;DB;DP=886;Dels=0.00;FS=8.274;HaplotypeScore=0.2796;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.50;MQ0=0;MQRankSum=1.395;QD=14.54;ReadPosRankSum=1.157;SNPEFF_AMINO_ACID_CHANGE=L346;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1397980_1398088;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1403772 rs144333159 G A 583.19 VQSRTrancheSNP98.50to98.60 AC=1;AF=0.010;AN=100;BaseQRankSum=0.835;DB;DP=1170;Dels=0.00;FS=0.833;HaplotypeScore=0.7575;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=50.12;MQ0=7;MQRankSum=2.366;QD=12.41;ReadPosRankSum=1.580;SNPEFF_AMINO_ACID_CHANGE=A366;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW [...]
+1 1403814 rs146537972 C T 3054.93 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-0.791;DB;DP=1361;Dels=0.00;FS=3.107;HaplotypeScore=0.6870;InbreedingCoeff=-0.1113;MLEAC=10;MLEAF=0.100;MQ=52.14;MQ0=0;MQRankSum=-0.322;QD=10.76;ReadPosRankSum=-0.072;SNPEFF_AMINO_ACID_CHANGE=D380;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1403820 rs111835061 C T 343.32 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.080;DB;DP=1330;Dels=0.00;FS=2.170;HaplotypeScore=0.7434;InbreedingCoeff=-0.0149;MLEAC=1;MLEAF=0.010;MQ=52.20;MQ0=0;MQRankSum=-0.004;QD=13.73;ReadPosRankSum=-0.660;SNPEFF_AMINO_ACID_CHANGE=C382;SNPEFF_CODON_CHANGE=tgC/tgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1403887 rs149946098 G A 830.13 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-1.786;DB;DP=852;Dels=0.00;FS=0.704;HaplotypeScore=0.8035;InbreedingCoeff=-0.0314;MLEAC=3;MLEAF=0.030;MQ=47.17;MQ0=38;MQRankSum=1.012;QD=10.12;ReadPosRankSum=-0.411;SNPEFF_AMINO_ACID_CHANGE=E405K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1403894 rs145079480 A G 265.22 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.648;DB;DP=790;Dels=0.00;FS=4.077;HaplotypeScore=0.6679;InbreedingCoeff=-0.0120;MLEAC=1;MLEAF=0.010;MQ=44.58;MQ0=62;MQRankSum=-0.139;QD=10.20;ReadPosRankSum=-1.079;SNPEFF_AMINO_ACID_CHANGE=E407G;SNPEFF_CODON_CHANGE=gAg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1403972 rs111566296 C CG 6155.76 PASS AC=39;AF=0.390;AN=100;BaseQRankSum=1.303;DB;DP=677;FS=5.716;HaplotypeScore=8.2453;InbreedingCoeff=0.2320;MLEAC=39;MLEAF=0.390;MQ=26.73;MQ0=0;MQRankSum=-0.020;QD=13.24;RPA=2,3;RU=G;ReadPosRankSum=-0.860;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;STR GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,115 0/0:7,0:7:21:0,21,355 0/0:9,0:9:27:0,2 [...]
+1 1404001 rs149123833 G T 813.05 VQSRTrancheSNP98.50to98.60 AC=9;AF=0.090;AN=100;BaseQRankSum=3.894;DB;DP=751;Dels=0.00;FS=13.258;HaplotypeScore=0.4328;InbreedingCoeff=-0.1056;MLEAC=9;MLEAF=0.090;MQ=36.60;MQ0=162;MQRankSum=1.710;QD=5.69;ReadPosRankSum=-2.329;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;VQSLOD=0.725;culprit=MQ GT:AD:DP:GQ:PL 0/0:11,0:11:27:0,27,2 [...]
+1 1404016 rs12089719 G A 5585.21 VQSRTrancheSNP99.00to99.30 AC=22;AF=0.220;AN=100;BaseQRankSum=5.688;DB;DP=778;Dels=0.00;FS=46.403;HaplotypeScore=0.6541;InbreedingCoeff=0.3869;MLEAC=22;MLEAF=0.220;MQ=41.20;MQ0=108;MQRankSum=0.582;QD=16.10;ReadPosRankSum=-0.183;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;VQSLOD=-1.039e-01;culprit=FS GT:AD:DP:GQ:PL 0/0:13,0:13:30 [...]
+1 1404053 . C CG 39.94 Indel_QD AC=4;AF=0.040;AN=100;BaseQRankSum=3.636;DP=720;FS=53.688;HaplotypeScore=10.8209;InbreedingCoeff=-0.0568;MLEAC=3;MLEAF=0.030;MQ=48.68;MQ0=0;MQRankSum=1.313;QD=0.91;RPA=4,5;RU=G;ReadPosRankSum=-3.619;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;STR GT:AD:DP:GQ:PL 0/0:15,1:16:39:0,39,541 0/0:2,0:2:6:0,6,41 0/0:12,0:13:36:0,36,462 0/0 [...]
+1 1404076 . C A 243.31 VQSRTrancheSNP98.90to99.00 AC=1;AF=0.010;AN=100;BaseQRankSum=-3.635;DP=646;Dels=0.00;FS=1.469;HaplotypeScore=0.2198;InbreedingCoeff=-0.0169;MLEAC=1;MLEAF=0.010;MQ=42.78;MQ0=62;MQRankSum=1.530;QD=8.39;ReadPosRankSum=0.452;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;VQSLOD=0.142;culprit=MQ GT:AD:DP:GQ:PL 0/0:17,0:17:24:0,24,308 0/0:3,0:3:9: [...]
+1 1412659 rs146343349 G T 1349.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=5.456;DB;DP=1886;Dels=0.00;FS=0.000;HaplotypeScore=0.0934;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=57.05;MQ0=0;MQRankSum=2.018;QD=14.35;ReadPosRankSum=-4.364;SNPEFF_AMINO_ACID_CHANGE=A71S;SNPEFF_CODON_CHANGE=Gcc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1412654_1412730;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1412761 rs112572711 G A 573.24 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.363;DB;DP=1663;Dels=0.00;FS=5.913;HaplotypeScore=0.2278;InbreedingCoeff=-0.0126;MLEAC=1;MLEAF=0.010;MQ=56.91;MQ0=0;MQRankSum=2.675;QD=15.09;ReadPosRankSum=-1.983;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=4.74;culprit=MQ GT:AD:DP:GQ:PL 0/0:40,0:40:99:0,120,1456 0/0:26,0:26:78:0,78,936 [...]
+1 1416222 rs147329037 C T 951.69 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.031;AN=96;BaseQRankSum=-2.937;DB;DP=1817;Dels=0.00;FS=1.522;HaplotypeScore=0.2027;InbreedingCoeff=0.6251;MLEAC=3;MLEAF=0.031;MQ=22.90;MQ0=307;MQRankSum=0.808;QD=10.81;ReadPosRankSum=2.746;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-4.666e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:44,0:44:99:0,132, [...]
+1 1416235 . GCTT G 1256.99 PASS AC=4;AF=0.042;AN=96;BaseQRankSum=0.001;DP=2031;FS=25.307;HaplotypeScore=7.1005;InbreedingCoeff=0.4615;MLEAC=4;MLEAF=0.042;MQ=21.02;MQ0=0;MQRankSum=3.632;QD=6.35;RPA=2,1;RU=CTT;ReadPosRankSum=-1.166;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;STR GT:AD:DP:GQ:PL 0/0:49,0:49:99:0,147,1474 0/0:29,0:29:87:0,87,872 0/0:37,0:37:99:0,111,213 [...]
+1 1416236 rs192308564 C G 224.37 VQSRTrancheSNP99.50to99.90 AC=1;AF=0.010;AN=96;BaseQRankSum=1.162;DB;DP=2096;Dels=0.04;FS=0.000;HaplotypeScore=2.4425;InbreedingCoeff=-0.0113;MLEAC=1;MLEAF=0.010;MQ=21.00;MQ0=369;MQRankSum=2.565;QD=3.03;ReadPosRankSum=2.843;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-3.394e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:51,0:51:99:0,153,1 [...]
+1 1416358 . G A 216.80 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.031;AN=98;BaseQRankSum=-3.682;DP=1343;Dels=0.00;FS=0.000;HaplotypeScore=0.6448;InbreedingCoeff=0.4754;MLEAC=3;MLEAF=0.031;MQ=26.11;MQ0=162;MQRankSum=-1.791;QD=3.87;ReadPosRankSum=-2.273;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-3.925e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:47,0:47:99:0,141,1657 0/0:28, [...]
+1 1417662 rs143114169 A G 367.19 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=1.446;DB;DP=1370;Dels=0.00;FS=1.919;HaplotypeScore=0.4093;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=34.18;MQ0=71;MQRankSum=-2.257;QD=7.06;ReadPosRankSum=-0.090;SNPEFF_AMINO_ACID_CHANGE=Q114R;SNPEFF_CODON_CHANGE=cAg/cGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417654_1417683;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1417696 rs819970 C G 3427.28 VQSRTrancheSNP99.50to99.90 AC=73;AF=0.777;AN=94;BaseQRankSum=-2.326;DB;DP=481;Dels=0.00;FS=6.189;HaplotypeScore=0.2872;InbreedingCoeff=0.4787;MLEAC=72;MLEAF=0.766;MQ=30.06;MQ0=124;MQRankSum=-12.476;QD=9.96;ReadPosRankSum=-0.368;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-4.339e+00;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,2:2:6:63,6,0 0 [...]
+1 1417927 rs141143061 C T 581.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-0.647;DB;DP=4283;Dels=0.00;FS=6.388;HaplotypeScore=0.2720;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=35.90;MQ0=30;MQRankSum=-1.563;QD=7.75;ReadPosRankSum=1.461;SNPEFF_AMINO_ACID_CHANGE=T122M;SNPEFF_CODON_CHANGE=aCg/aTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417925_1417994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1418004 rs819972 T C 7985.23 VQSRTrancheSNP99.50to99.90 AC=41;AF=0.410;AN=100;BaseQRankSum=13.999;DB;DP=2489;Dels=0.00;FS=2.886;HaplotypeScore=0.5463;InbreedingCoeff=0.4485;MLEAC=41;MLEAF=0.410;MQ=36.07;MQ0=196;MQRankSum=-25.569;QD=7.17;ReadPosRankSum=3.163;SNPEFF_AMINO_ACID_CHANGE=F86L;SNPEFF_CODON_CHANGE=Ttc/Ctc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417925_1418042;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1418015 . G C 120.18 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=-5.372;DP=2151;Dels=0.00;FS=2.140;HaplotypeScore=0.5893;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=36.55;MQ0=168;MQRankSum=-4.142;QD=1.72;ReadPosRankSum=0.479;SNPEFF_AMINO_ACID_CHANGE=Q89H;SNPEFF_CODON_CHANGE=caG/caC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417925_1418042;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERAT [...]
+1 1420366 . C T 212.39 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.037;AN=54;BaseQRankSum=-0.522;DP=475;Dels=0.00;FS=5.209;HaplotypeScore=0.2966;InbreedingCoeff=-0.0907;MLEAC=2;MLEAF=0.037;MQ=14.97;MQ0=180;MQRankSum=0.293;QD=1.93;ReadPosRankSum=-1.452;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-4.575e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,115 0/0:5,0: [...]
+1 1420453 rs150679247 G A 37.68 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=98;BaseQRankSum=0.158;DB;DP=485;Dels=0.00;FS=7.172;HaplotypeScore=0.2560;InbreedingCoeff=-0.0267;MLEAC=1;MLEAF=0.010;MQ=31.75;MQ0=39;MQRankSum=0.526;QD=4.71;ReadPosRankSum=-1.128;SNPEFF_AMINO_ACID_CHANGE=V164I;SNPEFF_CODON_CHANGE=Gtc/Atc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1420396_1420551;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPAC [...]
+1 1420532 rs185762308 C T 1335.22 VQSRTrancheSNP99.00to99.30 AC=3;AF=0.030;AN=100;BaseQRankSum=-0.224;DB;DP=1361;Dels=0.00;FS=1.702;HaplotypeScore=0.7451;InbreedingCoeff=-0.0335;MLEAC=3;MLEAF=0.030;MQ=35.28;MQ0=20;MQRankSum=3.341;QD=9.08;ReadPosRankSum=1.472;SNPEFF_AMINO_ACID_CHANGE=A111V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1420396_1420551;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1420568 . G C 112.25 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-3.936;DP=953;Dels=0.00;FS=0.000;HaplotypeScore=1.3774;InbreedingCoeff=-0.0136;MLEAC=1;MLEAF=0.010;MQ=36.24;MQ0=27;MQRankSum=-1.313;QD=5.91;ReadPosRankSum=-2.790;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-5.889e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:17,0:17:51:0,51,567 0/0:1 [...]
+1 1421128 . T G 276.13 VQSRTrancheSNP99.50to99.90 AC=13;AF=0.130;AN=100;BaseQRankSum=-7.555;DP=393;Dels=0.00;FS=68.315;HaplotypeScore=0.7827;InbreedingCoeff=-0.1731;MLEAC=12;MLEAF=0.120;MQ=46.06;MQ0=8;MQRankSum=-4.746;QD=2.28;ReadPosRankSum=-9.849;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-2.256e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:7,0:7:21:0,21,236 0/0:4 [...]
+1 1421153 rs188705235 C T 77.20 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-1.657;DB;DP=1003;Dels=0.00;FS=3.683;HaplotypeScore=0.4801;InbreedingCoeff=-0.0111;MLEAC=1;MLEAF=0.010;MQ=46.73;MQ0=8;MQRankSum=0.753;QD=3.22;ReadPosRankSum=-0.643;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=0.343;culprit=QD GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,805 [...]
+1 1421188 rs112490584 C A 133.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.543;DB;DP=1647;Dels=0.00;FS=1.483;HaplotypeScore=1.1780;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=40.64;MQ0=46;MQRankSum=-1.252;QD=6.34;ReadPosRankSum=0.094;SNPEFF_AMINO_ACID_CHANGE=P126;SNPEFF_CODON_CHANGE=ccC/ccA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421162_1421224;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=L [...]
+1 1421248 rs145894390 T C 1684.45 VQSRTrancheSNP99.00to99.30 AC=6;AF=0.060;AN=100;BaseQRankSum=-0.183;DB;DP=1547;Dels=0.00;FS=19.153;HaplotypeScore=0.3628;InbreedingCoeff=0.2906;MLEAC=6;MLEAF=0.060;MQ=46.12;MQ0=10;MQRankSum=-5.604;QD=8.77;ReadPosRankSum=-2.781;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-6.542e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:27,0:27:81 [...]
+1 1421531 rs819976 C A 54816.70 VQSRTrancheSNP98.90to99.00 AC=46;AF=0.460;AN=100;BaseQRankSum=-18.634;DB;DP=3675;Dels=0.00;FS=7.754;HaplotypeScore=0.8461;InbreedingCoeff=0.2754;MLEAC=46;MLEAF=0.460;MQ=52.66;MQ0=8;MQRankSum=-6.282;QD=23.36;ReadPosRankSum=2.204;SNPEFF_AMINO_ACID_CHANGE=T152;SNPEFF_CODON_CHANGE=acC/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421490_1421615;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT= [...]
+1 1421579 rs142840431 T C 4065.26 VQSRTrancheSNP99.30to99.50 AC=4;AF=0.040;AN=100;BaseQRankSum=1.924;DB;DP=3196;Dels=0.00;FS=0.000;HaplotypeScore=0.6807;InbreedingCoeff=0.4792;MLEAC=4;MLEAF=0.040;MQ=53.43;MQ0=7;MQRankSum=-8.089;QD=19.54;ReadPosRankSum=-0.037;SNPEFF_AMINO_ACID_CHANGE=Y168;SNPEFF_CODON_CHANGE=taT/taC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421490_1421615;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=L [...]
+1 1421916 . T C 7110.06 VQSRTrancheSNP99.50to99.90 AC=31;AF=0.310;AN=100;BaseQRankSum=13.113;DP=3246;Dels=0.00;FS=174.485;HaplotypeScore=1.2890;InbreedingCoeff=-0.4526;MLEAC=31;MLEAF=0.310;MQ=25.28;MQ0=802;MQRankSum=-8.780;QD=3.13;ReadPosRankSum=2.018;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-1.532e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:52,23:72:99:294,0,9 [...]
+1 1421954 rs137911966 G A 305.25 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=100;BaseQRankSum=-6.408;DB;DP=2879;Dels=0.00;FS=0.000;HaplotypeScore=0.9177;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=17.92;MQ0=1278;MQRankSum=1.314;QD=2.21;ReadPosRankSum=-1.783;SNPEFF_AMINO_ACID_CHANGE=A191T;SNPEFF_CODON_CHANGE=Gcc/Acc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421924_1422048;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF [...]
+1 1421991 rs860213 G A 6436.80 VQSRTrancheSNP99.50to99.90 AC=35;AF=0.357;AN=98;BaseQRankSum=-7.502;DB;DP=2136;Dels=0.00;FS=1.101;HaplotypeScore=1.2296;InbreedingCoeff=0.0434;MLEAC=35;MLEAF=0.357;MQ=18.20;MQ0=842;MQRankSum=3.214;QD=4.48;ReadPosRankSum=0.116;SNPEFF_AMINO_ACID_CHANGE=R203Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421924_1422048;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMP [...]
+1 1423229 rs145173454 T C 746.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.642;DB;DP=4986;Dels=0.00;FS=0.770;HaplotypeScore=1.1541;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=55.56;MQ0=1;MQRankSum=-1.229;QD=9.95;ReadPosRankSum=2.322;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=1.83;culprit=MQ GT:AD:DP:GQ:PL 0/0:118,0:117:99:0,352,4347 0/0:107,0:106:99:0 [...]
+1 1423237 rs187809296 T C 843.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.239;DB;DP=5139;Dels=0.00;FS=0.000;HaplotypeScore=1.3000;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=55.76;MQ0=1;MQRankSum=-2.295;QD=11.24;ReadPosRankSum=0.151;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=0.876;culprit=MQ GT:AD:DP:GQ:PL 0/0:121,0:120:99:0,361,4379 0/0:110,0:109:99 [...]
+1 1423267 rs819977 A G 54080.08 VQSRTrancheSNP98.90to99.00 AC=47;AF=0.470;AN=100;BaseQRankSum=-15.475;DB;DP=3489;Dels=0.00;FS=0.655;HaplotypeScore=2.7184;InbreedingCoeff=0.3175;MLEAC=47;MLEAF=0.470;MQ=55.37;MQ0=1;MQRankSum=-5.926;QD=23.64;ReadPosRankSum=-11.494;SNPEFF_AMINO_ACID_CHANGE=A413;SNPEFF_CODON_CHANGE=gcA/gcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPAC [...]
+1 1423282 . GAAGC G 2049.23 Indel_FS AC=4;AF=0.040;AN=100;BaseQRankSum=-10.989;DP=2367;FS=555.690;HaplotypeScore=78.2953;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=55.17;MQ0=0;MQRankSum=-1.048;QD=8.20;ReadPosRankSum=-14.511;SNPEFF_EFFECT=FRAME_SHIFT;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000308647 GT:AD:DP:GQ:PL 0/0:48,0:49:99:0,144,3108 0/0:53,0:53:99: [...]
+1 1423286 . C G 17541.69 VQSRTrancheSNP99.90to100.00 AC=44;AF=0.440;AN=100;BaseQRankSum=-11.866;DP=2875;Dels=0.03;FS=3200.000;HaplotypeScore=10.9869;InbreedingCoeff=-0.7857;MLEAC=44;MLEAF=0.440;MQ=51.52;MQ0=16;MQRankSum=-14.757;QD=6.80;ReadPosRankSum=-24.129;SNPEFF_AMINO_ACID_CHANGE=R420G;SNPEFF_CODON_CHANGE=Cga/Gga;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1423294 rs142126053 T C 728.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-6.358;DB;DP=3390;Dels=0.00;FS=0.731;HaplotypeScore=7.3617;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=48.23;MQ0=34;MQRankSum=-3.379;QD=9.71;ReadPosRankSum=-1.079;SNPEFF_AMINO_ACID_CHANGE=T422;SNPEFF_CODON_CHANGE=acT/acC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT= [...]
+1 1424695 rs144622790 G A 1741.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-7.085;DB;DP=2938;Dels=0.00;FS=1.744;HaplotypeScore=0.3042;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.42;MQ0=0;MQRankSum=0.940;QD=13.60;ReadPosRankSum=-4.527;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=7.29;culprit=ReadPosRankSum GT:AD:DP:GQ:PL 0/0:51,0:51:99:0,153,1798 0/0:53,0: [...]
+1 1425667 rs61737193 T C 246.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.710;DB;DP=2740;Dels=0.00;FS=1.212;HaplotypeScore=0.9236;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.42;MQ0=0;MQRankSum=1.689;QD=9.12;ReadPosRankSum=-1.717;SNPEFF_AMINO_ACID_CHANGE=P259;SNPEFF_CODON_CHANGE=ccT/ccC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1425676 rs61737191 C T 512.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.098;DB;DP=2613;Dels=0.00;FS=7.843;HaplotypeScore=1.0466;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.51;MQ0=0;MQRankSum=0.165;QD=10.90;ReadPosRankSum=0.791;SNPEFF_AMINO_ACID_CHANGE=F262;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1425700 rs819980 T C 39181.08 PASS AC=47;AF=0.470;AN=100;BaseQRankSum=1.832;DB;DP=2230;Dels=0.00;FS=3.196;HaplotypeScore=1.0702;InbreedingCoeff=0.3175;MLEAC=47;MLEAF=0.470;MQ=58.58;MQ0=0;MQRankSum=-0.283;QD=24.46;ReadPosRankSum=-1.579;SNPEFF_AMINO_ACID_CHANGE=I270;SNPEFF_CODON_CHANGE=atT/atC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1425753 rs145313947 T C 419.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.727;DB;DP=2451;Dels=0.00;FS=0.832;HaplotypeScore=0.4628;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.86;MQ0=0;MQRankSum=0.888;QD=9.53;ReadPosRankSum=-1.852;SNPEFF_AMINO_ACID_CHANGE=V288A;SNPEFF_CODON_CHANGE=gTg/gCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1425816 rs149187984 G A 3510.90 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-8.599;DB;DP=1301;Dels=0.00;FS=3.484;HaplotypeScore=0.9964;InbreedingCoeff=-0.1112;MLEAC=10;MLEAF=0.100;MQ=56.72;MQ0=0;MQRankSum=2.741;QD=11.04;ReadPosRankSum=3.352;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=3.54;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:23,0:23:69:0,69,841 0/0:21,0:2 [...]
+1 1426002 . C T 177.26 VQSRTrancheSNP99.50to99.90 AC=1;AF=0.010;AN=100;BaseQRankSum=1.622;DP=937;Dels=0.00;FS=0.000;HaplotypeScore=0.4703;InbreedingCoeff=-0.0144;MLEAC=1;MLEAF=0.010;MQ=24.30;MQ0=278;MQRankSum=2.163;QD=2.57;ReadPosRankSum=0.181;SNPEFF_AMINO_ACID_CHANGE=T356M;SNPEFF_CODON_CHANGE=aCg/aTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425850_1426051;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE; [...]
+1 1426003 rs143153541 G A 1109.79 VQSRTrancheSNP99.50to99.90 AC=6;AF=0.060;AN=100;BaseQRankSum=-0.214;DB;DP=937;Dels=0.00;FS=2.936;HaplotypeScore=0.5164;InbreedingCoeff=0.2629;MLEAC=6;MLEAF=0.060;MQ=24.34;MQ0=278;MQRankSum=0.214;QD=6.73;ReadPosRankSum=0.746;SNPEFF_AMINO_ACID_CHANGE=T356;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425850_1426051;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LO [...]
+1 1426098 rs112579524 G A 228.99 VQSRTrancheSNP99.00to99.30 AC=3;AF=0.030;AN=100;BaseQRankSum=-2.982;DB;DP=371;Dels=0.00;FS=5.553;HaplotypeScore=0.1307;InbreedingCoeff=-0.0735;MLEAC=3;MLEAF=0.030;MQ=28.05;MQ0=115;MQRankSum=1.598;QD=6.03;ReadPosRankSum=0.061;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-3.431e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:7,0:7:6:0,6,69 0/ [...]
+1 1430971 rs147286181 C T 1276.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.820;DB;DP=2863;Dels=0.00;FS=11.733;HaplotypeScore=0.5863;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.96;MQ0=5;MQRankSum=0.396;QD=12.51;ReadPosRankSum=-2.546;SNPEFF_AMINO_ACID_CHANGE=A408V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1430985 rs139902189 C T 6084.89 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=6.004;DB;DP=2316;Dels=0.00;FS=0.393;HaplotypeScore=0.6138;InbreedingCoeff=-0.1111;MLEAC=10;MLEAF=0.100;MQ=59.05;MQ0=3;MQRankSum=2.105;QD=11.66;ReadPosRankSum=-0.895;SNPEFF_AMINO_ACID_CHANGE=R413C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1431007 rs149788676 C T 506.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.543;DB;DP=1759;Dels=0.00;FS=5.605;HaplotypeScore=0.8697;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.61;MQ0=0;MQRankSum=1.886;QD=12.05;ReadPosRankSum=-1.526;SNPEFF_AMINO_ACID_CHANGE=S420F;SNPEFF_CODON_CHANGE=tCc/tTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1431060 rs9792997 T C 124.99 VQSRTrancheSNP99.50to99.90 AC=13;AF=0.130;AN=100;BaseQRankSum=10.352;DB;DP=1340;Dels=0.00;FS=176.177;HaplotypeScore=0.7633;InbreedingCoeff=-0.1369;MLEAC=9;MLEAF=0.090;MQ=53.26;MQ0=39;MQRankSum=-14.396;QD=0.43;ReadPosRankSum=-0.769;SNPEFF_AMINO_ACID_CHANGE=Y438H;SNPEFF_CODON_CHANGE=Tac/Cac;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEF [...]
+1 1431075 rs79205801 G A 424.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.462;DB;DP=1597;Dels=0.00;FS=9.400;HaplotypeScore=0.7016;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=50.45;MQ0=45;MQRankSum=0.957;QD=10.88;ReadPosRankSum=-1.411;SNPEFF_AMINO_ACID_CHANGE=G443S;SNPEFF_CODON_CHANGE=Ggc/Agc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1431105 . A G 115.30 VQSRTrancheSNP99.30to99.50 AC=3;AF=0.030;AN=100;BaseQRankSum=7.242;DP=2265;Dels=0.00;FS=68.246;HaplotypeScore=1.8282;InbreedingCoeff=-0.0311;MLEAC=3;MLEAF=0.030;MQ=49.68;MQ0=41;MQRankSum=-5.059;QD=0.77;ReadPosRankSum=0.649;SNPEFF_AMINO_ACID_CHANGE=M453V;SNPEFF_CODON_CHANGE=Atg/Gtg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERAT [...]
+1 1431109 rs144198445 G A 273.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.337;DB;DP=2290;Dels=0.00;FS=4.834;HaplotypeScore=2.0661;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=49.72;MQ0=39;MQRankSum=1.426;QD=2.68;ReadPosRankSum=-0.727;SNPEFF_AMINO_ACID_CHANGE=G454E;SNPEFF_CODON_CHANGE=gGg/gAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1431163 rs140441570 G A 60.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.216;DB;DP=1722;Dels=0.00;FS=4.244;HaplotypeScore=2.5782;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=51.34;MQ0=59;MQRankSum=0.886;QD=3.17;ReadPosRankSum=-0.482;SNPEFF_AMINO_ACID_CHANGE=R472Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1431165 rs9792879 C T 8551.23 VQSRTrancheSNP99.00to99.30 AC=35;AF=0.350;AN=100;BaseQRankSum=-5.942;DB;DP=1681;Dels=0.00;FS=0.000;HaplotypeScore=2.3589;InbreedingCoeff=-0.5388;MLEAC=35;MLEAF=0.350;MQ=50.88;MQ0=57;MQRankSum=-3.121;QD=6.62;ReadPosRankSum=4.093;SNPEFF_AMINO_ACID_CHANGE=P473S;SNPEFF_CODON_CHANGE=Ccg/Tcg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_ [...]
+1 1447692 rs2274435 G A 214.71 PASS AC=9;AF=0.150;AN=60;BaseQRankSum=-2.637;DB;DP=75;Dels=0.00;FS=0.000;HaplotypeScore=0.3060;InbreedingCoeff=0.0818;MLEAC=9;MLEAF=0.150;MQ=43.83;MQ0=0;MQRankSum=-0.652;QD=9.34;ReadPosRankSum=-0.302;SNPEFF_AMINO_ACID_CHANGE=G15D;SNPEFF_CODON_CHANGE=gGc/gAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1447555_1447853;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 1447693 . C T 115.43 VQSRTrancheSNP99.00to99.30 AC=2;AF=0.036;AN=56;BaseQRankSum=0.116;DP=68;Dels=0.00;FS=0.000;HaplotypeScore=0.3041;InbreedingCoeff=0.0706;MLEAC=2;MLEAF=0.036;MQ=44.18;MQ0=0;MQRankSum=1.767;QD=23.09;ReadPosRankSum=-0.083;SNPEFF_AMINO_ACID_CHANGE=G15;SNPEFF_CODON_CHANGE=ggC/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1447555_1447853;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1451380 rs9439458 T C 31300.68 PASS AC=46;AF=0.460;AN=100;BaseQRankSum=6.904;DB;DP=1675;Dels=0.00;FS=10.137;HaplotypeScore=0.7101;InbreedingCoeff=0.3559;MLEAC=46;MLEAF=0.460;MQ=45.91;MQ0=11;MQRankSum=-1.905;QD=26.21;ReadPosRankSum=0.850;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378755;VQSLOD=1.31;culprit=MQ GT:AD:DP:GQ:PL 0/0:39,0:39:99:0,114,1437 0/0:32,0:32:96:0,96, [...]
+1 1451489 rs76717221 T C 9495.78 VQSRTrancheSNP99.00to99.30 AC=22;AF=0.220;AN=100;BaseQRankSum=12.478;DB;DP=1582;Dels=0.00;FS=1.129;HaplotypeScore=1.6089;InbreedingCoeff=0.0666;MLEAC=22;MLEAF=0.220;MQ=27.05;MQ0=285;MQRankSum=-1.239;QD=12.00;ReadPosRankSum=-0.069;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378755;VQSLOD=-5.066e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:30,0:30:87:0 [...]
+1 1451490 rs9439460 G A 8114.19 VQSRTrancheSNP99.00to99.30 AC=20;AF=0.200;AN=100;BaseQRankSum=-7.277;DB;DP=1587;Dels=0.00;FS=0.000;HaplotypeScore=1.5510;InbreedingCoeff=0.1230;MLEAC=20;MLEAF=0.200;MQ=27.16;MQ0=286;MQRankSum=-2.754;QD=11.86;ReadPosRankSum=-0.294;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378755;VQSLOD=-5.326e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:31,0:31:90:0, [...]
+1 1454272 rs10159059 T A 11008.01 VQSRTrancheSNP98.60to98.80 AC=16;AF=0.160;AN=100;BaseQRankSum=-11.336;DB;DP=3111;Dels=0.00;FS=11.158;HaplotypeScore=0.5487;InbreedingCoeff=0.2559;MLEAC=16;MLEAF=0.160;MQ=38.59;MQ0=137;MQRankSum=0.317;QD=13.71;ReadPosRankSum=1.177;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=0.569;culprit=MQ GT:AD:DP:GQ:PL 0/0:50,0:50:99:0 [...]
+1 1454412 . G A 716.18 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=-4.069;DP=2648;Dels=0.00;FS=0.000;HaplotypeScore=0.7287;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=34.00;MQ0=26;MQRankSum=-4.553;QD=10.53;ReadPosRankSum=1.449;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-1.465e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,108,1127 0/ [...]
+1 1455477 rs3128349 C T 145.09 VQSRTrancheSNP99.00to99.30 AC=4;AF=0.040;AN=100;BaseQRankSum=-2.805;DB;DP=394;Dels=0.00;FS=3.727;HaplotypeScore=0.1860;InbreedingCoeff=-0.0620;MLEAC=3;MLEAF=0.030;MQ=41.03;MQ0=16;MQRankSum=-3.505;QD=2.74;ReadPosRankSum=-0.492;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-1.674e-01;culprit=QD GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,97 [...]
+1 1455533 rs141500603 G A 385.39 VQSRTrancheSNP99.00to99.30 AC=2;AF=0.020;AN=100;BaseQRankSum=3.924;DB;DP=775;Dels=0.00;FS=6.987;HaplotypeScore=0.2125;InbreedingCoeff=-0.0258;MLEAC=2;MLEAF=0.020;MQ=31.79;MQ0=53;MQRankSum=1.658;QD=6.42;ReadPosRankSum=-0.813;SNPEFF_AMINO_ACID_CHANGE=R176Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1455521_1455686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMP [...]
+1 1455586 rs182976525 C T 473.26 VQSRTrancheSNP98.90to99.00 AC=1;AF=0.010;AN=100;BaseQRankSum=-0.136;DB;DP=960;Dels=0.00;FS=1.031;HaplotypeScore=0.7750;InbreedingCoeff=-0.0141;MLEAC=1;MLEAF=0.010;MQ=40.48;MQ0=47;MQRankSum=0.526;QD=17.53;ReadPosRankSum=-2.065;SNPEFF_AMINO_ACID_CHANGE=R115W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1455521_1455686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_I [...]
+1 1458255 rs28675990 T G 622.67 VQSRTrancheSNP99.50to99.90 AC=14;AF=0.140;AN=100;BaseQRankSum=7.122;DB;DP=1041;Dels=0.00;FS=39.354;HaplotypeScore=0.5928;InbreedingCoeff=0.3090;MLEAC=12;MLEAF=0.120;MQ=35.19;MQ0=149;MQRankSum=-7.184;QD=3.23;ReadPosRankSum=0.155;SNPEFF_AMINO_ACID_CHANGE=L215;SNPEFF_CODON_CHANGE=ctT/ctG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1458124_1458279;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT= [...]
+1 1458285 rs6675874 A G 1117.66 VQSRTrancheSNP99.50to99.90 AC=18;AF=0.188;AN=96;BaseQRankSum=5.914;DB;DP=843;Dels=0.00;FS=85.621;HaplotypeScore=0.5349;InbreedingCoeff=0.4162;MLEAC=17;MLEAF=0.177;MQ=41.07;MQ0=31;MQRankSum=-8.792;QD=6.24;ReadPosRankSum=0.569;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=-4.991e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:10,0:10:30:0,3 [...]
+1 1458857 . T G 336.58 VQSRTrancheSNP99.30to99.50 AC=20;AF=0.213;AN=94;BaseQRankSum=-3.780;DP=188;Dels=0.00;FS=68.446;HaplotypeScore=0.2355;InbreedingCoeff=-0.2761;MLEAC=22;MLEAF=0.234;MQ=56.56;MQ0=0;MQRankSum=-1.865;QD=3.47;ReadPosRankSum=-8.265;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=-1.730e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,167 0/0:2, [...]
+1 1458954 rs3737714 C T 4709.41 PASS AC=15;AF=0.150;AN=100;BaseQRankSum=3.673;DB;DP=1295;Dels=0.00;FS=0.000;HaplotypeScore=0.7616;InbreedingCoeff=0.0873;MLEAC=14;MLEAF=0.140;MQ=55.71;MQ0=2;MQRankSum=4.171;QD=13.34;ReadPosRankSum=-0.458;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=3.27;culprit=MQ GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,756 0/0:29,0:29:87:0,87,9 [...]
+1 1459352 . C T 728.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=3.978;DP=2702;Dels=0.00;FS=1.086;HaplotypeScore=0.1930;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=39.84;MQ0=54;MQRankSum=-2.708;QD=9.71;ReadPosRankSum=-1.300;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=-2.084e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:48,0:48:99:0,138,1531 0/0 [...]
+1 1460581 rs10465902 T C 1058.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=6.199;DB;DP=3356;Dels=0.00;FS=10.675;HaplotypeScore=0.2881;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.35;MQ0=0;MQRankSum=3.690;QD=14.11;ReadPosRankSum=-2.664;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=5.58;culprit=MQ GT:AD:DP:GQ:PL 0/0:66,0:66:99:0,199,2207 0/0:67,0:67:99:0,2 [...]
+1 1575836 rs72468213 C G 7320.75 VQSRTrancheSNP99.50to99.90 AC=39;AF=0.390;AN=100;BaseQRankSum=23.099;DB;DP=1984;Dels=0.00;FS=2.174;HaplotypeScore=0.8905;InbreedingCoeff=-0.6467;MLEAC=39;MLEAF=0.390;MQ=27.24;MQ0=265;MQRankSum=-0.617;QD=4.26;ReadPosRankSum=1.675;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-4.325e+00;culprit=MQ GT:AD:DP:GQ:PL 0 [...]
+1 1575863 rs142965371 A T 1920.72 VQSRTrancheSNP99.30to99.50 AC=12;AF=0.120;AN=100;BaseQRankSum=-10.826;DB;DP=1310;Dels=0.00;FS=2.776;HaplotypeScore=0.8060;InbreedingCoeff=-0.1410;MLEAC=12;MLEAF=0.120;MQ=29.88;MQ0=20;MQRankSum=-5.555;QD=4.19;ReadPosRankSum=0.122;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-1.961e+00;culprit=MQ GT:AD:DP:GQ:PL [...]
+1 1580524 . C T 186.26 VQSRTrancheSNP99.50to99.90 AC=8;AF=0.100;AN=80;BaseQRankSum=-2.944;DP=626;Dels=0.00;FS=0.000;HaplotypeScore=0.2064;InbreedingCoeff=-0.1295;MLEAC=8;MLEAF=0.100;MQ=15.29;MQ0=161;MQRankSum=-0.395;QD=1.51;ReadPosRankSum=-0.597;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-4.374e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:24,8:31:6:0,6 [...]
+1 1580738 rs149767621 T A 8238.16 VQSRTrancheSNP99.50to99.90 AC=45;AF=0.459;AN=98;BaseQRankSum=-20.476;DB;DP=1414;Dels=0.00;FS=4.533;HaplotypeScore=0.3951;InbreedingCoeff=-0.7670;MLEAC=45;MLEAF=0.459;MQ=23.99;MQ0=227;MQRankSum=0.402;QD=6.55;ReadPosRankSum=-0.255;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-5.630e+00;culprit=MQ GT:AD:DP:GQ:PL [...]
+1 1580748 . A G 157.41 VQSRTrancheSNP99.50to99.90 AC=1;AF=0.010;AN=98;BaseQRankSum=0.760;DP=971;Dels=0.00;FS=0.000;HaplotypeScore=0.2415;InbreedingCoeff=-0.0152;MLEAC=1;MLEAF=0.010;MQ=22.37;MQ0=242;MQRankSum=0.673;QD=6.05;ReadPosRankSum=-2.117;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-2.656e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:35,0:35:57:0,57 [...]
+1 1582106 rs79942991 T C 115843.77 VQSRTrancheSNP99.50to99.90 AC=89;AF=0.890;AN=100;BaseQRankSum=7.365;DB;DP=4103;Dels=0.00;FS=3.878;HaplotypeScore=0.3014;InbreedingCoeff=-0.1236;MLEAC=89;MLEAF=0.890;MQ=36.39;MQ0=114;MQRankSum=-18.692;QD=28.23;ReadPosRankSum=1.360;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-5.066e+00;culprit=MQRankSum GT:AD: [...]
+1 1582146 . T C 441.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.540;DP=7445;Dels=0.00;FS=4.249;HaplotypeScore=1.3339;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=40.58;MQ0=49;MQRankSum=-1.530;QD=5.88;ReadPosRankSum=1.450;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-5.753e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:201,0:201:99: [...]
+1 1582198 . C G 906.12 VQSRTrancheSNP99.30to99.50 AC=3;AF=0.030;AN=100;BaseQRankSum=-4.291;DP=3749;Dels=0.00;FS=2.432;HaplotypeScore=2.4143;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=32.93;MQ0=575;MQRankSum=2.067;QD=4.36;ReadPosRankSum=0.935;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-1.260e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:75,0:75:99:0, [...]
+1 1582302 rs191403755 C A 87.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-3.515;DB;DP=2944;Dels=0.00;FS=1.732;HaplotypeScore=0.0773;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=30.88;MQ0=30;MQRankSum=-0.500;QD=3.79;ReadPosRankSum=-0.961;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-7.997e-01;culprit=QD GT:AD:DP:GQ:PL 0/0: [...]
+1 1585597 rs7531938 A G 4359.96 PASS AC=55;AF=0.561;AN=98;BaseQRankSum=-1.073;DB;DP=302;Dels=0.00;FS=0.542;HaplotypeScore=0.1116;InbreedingCoeff=0.1130;MLEAC=53;MLEAF=0.541;MQ=58.81;MQ0=0;MQRankSum=0.214;QD=21.27;ReadPosRankSum=-0.558;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=5.84;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,5:5:15:167,15,0 0/1:5,6:11:9 [...]
+1 1585642 rs3936009 G T 3846.92 PASS AC=49;AF=0.544;AN=90;BaseQRankSum=-8.942;DB;DP=261;Dels=0.00;FS=2.337;HaplotypeScore=0.0881;InbreedingCoeff=0.0934;MLEAC=48;MLEAF=0.533;MQ=59.22;MQ0=0;MQRankSum=0.655;QD=21.25;ReadPosRankSum=0.621;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=6.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,11:11:33:388,33,0 [...]
+1 1586816 rs115880964 C T 568.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.917;DB;DP=1773;Dels=0.00;FS=0.824;HaplotypeScore=0.2600;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=48.37;MQ0=49;MQRankSum=-0.621;QD=12.63;ReadPosRankSum=-2.095;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=0.932;culprit=MQ GT:AD:DP:GQ:PL 0/0:51,0:51:99:0,153,1843 0/0 [...]
+1 1586953 rs145224189 G A 144.19 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=-4.645;DB;DP=1168;Dels=0.00;FS=0.000;HaplotypeScore=0.0598;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=29.08;MQ0=60;MQRankSum=-0.909;QD=4.37;ReadPosRankSum=-2.328;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-9.213e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0 [...]
+1 1634881 . G C 91.76 VQSRTrancheSNP99.50to99.90 AC=7;AF=0.206;AN=34;BaseQRankSum=-0.637;DP=202;Dels=0.00;FS=0.000;HaplotypeScore=0.2856;InbreedingCoeff=-0.2039;MLEAC=7;MLEAF=0.206;MQ=15.12;MQ0=85;MQRankSum=0.892;QD=2.29;ReadPosRankSum=-3.797;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=-4.313e+00;culprit=QD GT:AD:DP:GQ:PL ./. 0/0:3,0:3:3:0,3,33 ./. ./. 0 [...]
+1 1635004 rs874516 T C 8506.33 VQSRTrancheSNP99.00to99.30 AC=53;AF=0.564;AN=94;BaseQRankSum=8.473;DB;DP=634;Dels=0.00;FS=3.427;HaplotypeScore=0.4463;InbreedingCoeff=0.2369;MLEAC=52;MLEAF=0.553;MQ=38.87;MQ0=18;MQRankSum=-4.597;QD=18.95;ReadPosRankSum=2.567;SNPEFF_AMINO_ACID_CHANGE=K44;SNPEFF_CODON_CHANGE=aaA/aaG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LOW;S [...]
+1 1635011 rs1059811 A G 104.66 VQSRTrancheSNP99.30to99.50 AC=5;AF=0.053;AN=94;BaseQRankSum=3.424;DB;DP=656;Dels=0.00;FS=3.635;HaplotypeScore=0.4455;InbreedingCoeff=0.2754;MLEAC=3;MLEAF=0.032;MQ=39.37;MQ0=20;MQRankSum=-3.813;QD=2.91;ReadPosRankSum=0.378;SNPEFF_AMINO_ACID_CHANGE=V621A;SNPEFF_CODON_CHANGE=gTa/gCa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635063;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT= [...]
+1 1635022 rs1136978 A G 420.94 VQSRTrancheSNP99.50to99.90 AC=17;AF=0.170;AN=100;BaseQRankSum=-3.483;DB;DP=659;Dels=0.00;FS=15.735;HaplotypeScore=0.3202;InbreedingCoeff=0.4522;MLEAC=11;MLEAF=0.110;MQ=40.11;MQ0=6;MQRankSum=-4.414;QD=4.53;ReadPosRankSum=-2.463;SNPEFF_AMINO_ACID_CHANGE=S617;SNPEFF_CODON_CHANGE=agT/agC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635063;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LO [...]
+1 1635061 rs1136980 C A 55.49 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.973;DB;DP=446;Dels=0.00;FS=1.858;HaplotypeScore=0.1171;InbreedingCoeff=-0.0246;MLEAC=1;MLEAF=0.010;MQ=43.48;MQ0=5;MQRankSum=-2.673;QD=4.27;ReadPosRankSum=0.067;SNPEFF_AMINO_ACID_CHANGE=E604D;SNPEFF_CODON_CHANGE=gaG/gaT;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635063;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT [...]
+1 1635085 . A C 50.91 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.115;AN=96;BaseQRankSum=-4.622;DP=311;Dels=0.00;FS=116.218;HaplotypeScore=0.3479;InbreedingCoeff=-0.0539;MLEAC=9;MLEAF=0.094;MQ=38.48;MQ0=31;MQRankSum=-3.888;QD=0.73;ReadPosRankSum=-5.613;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=-4.963e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:13,1:14:16:0,16,446 0/0: [...]
+1 1635108 rs11488590 G A 934.35 VQSRTrancheSNP99.50to99.90 AC=14;AF=0.146;AN=96;BaseQRankSum=-1.891;DB;DP=472;Dels=0.00;FS=69.983;HaplotypeScore=0.2181;InbreedingCoeff=-0.0511;MLEAC=14;MLEAF=0.146;MQ=29.62;MQ0=109;MQRankSum=-1.492;QD=5.37;ReadPosRankSum=1.004;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=-3.114e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:39: [...]
+1 1635407 rs74045976 A G 4760.18 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=4.103;DB;DP=1853;Dels=0.00;FS=0.473;HaplotypeScore=0.4719;InbreedingCoeff=0.2319;MLEAC=7;MLEAF=0.070;MQ=55.05;MQ0=2;MQRankSum=-0.284;QD=17.90;ReadPosRankSum=-2.734;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=2.03;culprit=MQ GT:AD:DP:GQ:PL 0/0:42,0:42:99:0,126,1529 0/0:43,0:43:99:0,12 [...]
+1 1635421 rs72901761 G A 1037.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.736;DB;DP=1462;Dels=0.00;FS=0.652;HaplotypeScore=0.3273;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=53.53;MQ0=4;MQRankSum=-2.222;QD=11.65;ReadPosRankSum=-1.050;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=1.82;culprit=MQ GT:AD:DP:GQ:PL 0/0:39,0:39:99:0,117,1326 0/0:29,0:29:87:0, [...]
+1 1635439 . A G 362.18 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=0.964;DP=1238;Dels=0.00;FS=2.198;HaplotypeScore=0.3145;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=52.58;MQ0=4;MQRankSum=-3.064;QD=11.68;ReadPosRankSum=1.459;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.268;culprit=MQ GT:AD:DP:GQ:PL 0/1:14,17:30:99:402,0,395 0/0:22,0: [...]
+1 1635507 . G A 405.20 VQSRTrancheSNP98.60to98.80 AC=1;AF=0.010;AN=100;BaseQRankSum=2.584;DP=1298;Dels=0.00;FS=0.000;HaplotypeScore=0.5480;InbreedingCoeff=-0.0108;MLEAC=1;MLEAF=0.010;MQ=50.53;MQ0=5;MQRankSum=1.387;QD=10.39;ReadPosRankSum=-0.627;SNPEFF_AMINO_ACID_CHANGE=R555C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635478_1635585;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODERATE [...]
+1 1635565 rs11488591 C T 10687.11 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=-5.755;DB;DP=1407;Dels=0.00;FS=20.884;HaplotypeScore=0.8088;InbreedingCoeff=0.0782;MLEAC=17;MLEAF=0.170;MQ=50.79;MQ0=7;MQRankSum=1.284;QD=16.52;ReadPosRankSum=0.476;SNPEFF_AMINO_ACID_CHANGE=A535;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635478_1635585;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 1635617 rs115354721 C T 748.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.816;DB;DP=1547;Dels=0.00;FS=1.493;HaplotypeScore=1.5279;InbreedingCoeff=-0.0207;MLEAC=2;MLEAF=0.020;MQ=50.80;MQ0=0;MQRankSum=2.325;QD=7.56;ReadPosRankSum=-0.952;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=1.07;culprit=MQ GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,529 0/0:26,0:26:78:0,78,9 [...]
+1 1635619 rs2076329 T C 37299 PASS AC=65;AF=0.650;AN=100;BaseQRankSum=3.725;DB;DP=1683;Dels=0.00;FS=3.612;HaplotypeScore=1.6660;InbreedingCoeff=0.0769;MLEAC=65;MLEAF=0.650;MQ=50.64;MQ0=0;MQRankSum=-3.676;QD=24.55;ReadPosRankSum=0.233;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.839;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:54:0,54,650 1/1:0,30:30:90:1058,90 [...]
+1 1635749 rs55880629 C A 10910.33 VQSRTrancheSNP99.30to99.50 AC=47;AF=0.470;AN=100;BaseQRankSum=-15.926;DB;DP=1525;Dels=0.00;FS=7.922;HaplotypeScore=0.7731;InbreedingCoeff=0.0759;MLEAC=47;MLEAF=0.470;MQ=42.30;MQ0=40;MQRankSum=-10.985;QD=11.96;ReadPosRankSum=1.160;SNPEFF_AMINO_ACID_CHANGE=R499;SNPEFF_CODON_CHANGE=cgG/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635662_1635783;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMP [...]
+1 1635943 rs1534950 A C 1501.42 VQSRTrancheSNP98.80to98.90 AC=17;AF=0.170;AN=100;BaseQRankSum=6.957;DB;DP=426;Dels=0.00;FS=0.000;HaplotypeScore=0.1954;InbreedingCoeff=0.0437;MLEAC=17;MLEAF=0.170;MQ=45.75;MQ0=0;MQRankSum=-4.592;QD=9.69;ReadPosRankSum=-0.426;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.298;culprit=MQ GT:AD:DP:GQ:PL 0/0:7,0:7:21:0,21,240 0 [...]
+1 1635979 rs1534951 G C 3048.61 VQSRTrancheSNP98.90to99.00 AC=17;AF=0.170;AN=100;BaseQRankSum=5.210;DB;DP=673;Dels=0.00;FS=0.000;HaplotypeScore=0.5137;InbreedingCoeff=0.0713;MLEAC=17;MLEAF=0.170;MQ=44.90;MQ0=14;MQRankSum=-4.420;QD=12.19;ReadPosRankSum=0.530;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.107;culprit=MQ GT:AD:DP:GQ:PL 0/0:9,0:9:27:0,27,292 [...]
+1 1636044 rs1059822 G A 7368.94 VQSRTrancheSNP99.30to99.50 AC=61;AF=0.610;AN=100;BaseQRankSum=-0.556;DB;DP=714;Dels=0.00;FS=21.519;HaplotypeScore=0.3671;InbreedingCoeff=0.1238;MLEAC=61;MLEAF=0.610;MQ=41.21;MQ0=41;MQRankSum=-11.770;QD=14.36;ReadPosRankSum=0.096;SNPEFF_AMINO_ACID_CHANGE=Y469;SNPEFF_CODON_CHANGE=taC/taT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635989_1636094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT [...]
+1 1636112 rs4288535 G A 1456.58 VQSRTrancheSNP98.90to99.00 AC=16;AF=0.163;AN=98;BaseQRankSum=-8.473;DB;DP=582;Dels=0.00;FS=4.438;HaplotypeScore=0.4121;InbreedingCoeff=-0.0638;MLEAC=16;MLEAF=0.163;MQ=33.54;MQ0=98;MQRankSum=-2.009;QD=5.95;ReadPosRankSum=2.219;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.030;culprit=MQ GT:AD:DP:GQ:PL 0/0:16,0:16:33:0,33,36 [...]
+1 1636307 . T C 887.27 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=98;BaseQRankSum=5.066;DP=5425;Dels=0.00;FS=0.000;HaplotypeScore=1.1038;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=43.97;MQ0=22;MQRankSum=1.527;QD=11.83;ReadPosRankSum=-3.911;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.252;culprit=MQ GT:AD:DP:GQ:PL 0/0:236,0:236:99:0,710,8527 0/0:122 [...]
+1 1636352 rs141881351 G C 1618.40 VQSRTrancheSNP99.30to99.50 AC=2;AF=0.020;AN=98;BaseQRankSum=3.137;DB;DP=6223;Dels=0.00;FS=1.145;HaplotypeScore=1.6113;InbreedingCoeff=1.0000;MLEAC=2;MLEAF=0.020;MQ=44.84;MQ0=133;MQRankSum=2.388;QD=23.80;ReadPosRankSum=0.222;SNPEFF_AMINO_ACID_CHANGE=V449;SNPEFF_CODON_CHANGE=gtC/gtG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1636343_1636464;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LO [...]
+1 1636355 rs2377226 A G 987.40 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=98;BaseQRankSum=5.437;DB;DP=6036;Dels=0.00;FS=127.218;HaplotypeScore=1.5540;InbreedingCoeff=1.0000;MLEAC=2;MLEAF=0.020;MQ=44.72;MQ0=139;MQRankSum=-12.525;QD=13.91;ReadPosRankSum=-1.082;SNPEFF_AMINO_ACID_CHANGE=I448;SNPEFF_CODON_CHANGE=atT/atC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1636343_1636464;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT= [...]
+1 1636400 rs144690660 G A 282.20 VQSRTrancheSNP99.50to99.90 AC=4;AF=0.041;AN=98;BaseQRankSum=-3.052;DB;DP=5444;Dels=0.00;FS=169.855;HaplotypeScore=0.4806;InbreedingCoeff=-0.0507;MLEAC=4;MLEAF=0.041;MQ=37.94;MQ0=162;MQRankSum=-13.143;QD=0.94;ReadPosRankSum=2.063;SNPEFF_AMINO_ACID_CHANGE=S433;SNPEFF_CODON_CHANGE=tcC/tcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1636343_1636464;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPAC [...]
+1 1638897 . A G 68.27 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=2.422;DP=1826;Dels=0.00;FS=27.238;HaplotypeScore=0.6964;InbreedingCoeff=-0.0137;MLEAC=1;MLEAF=0.010;MQ=38.73;MQ0=13;MQRankSum=0.445;QD=1.95;ReadPosRankSum=-0.385;SNPEFF_AMINO_ACID_CHANGE=L365S;SNPEFF_CODON_CHANGE=tTg/tCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1638848_1639023;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODERATE [...]
+1 1638925 . C T 7081.97 VQSRTrancheSNP99.30to99.50 AC=17;AF=0.170;AN=100;BaseQRankSum=3.088;DP=1619;Dels=0.00;FS=0.609;HaplotypeScore=0.6107;InbreedingCoeff=0.0736;MLEAC=17;MLEAF=0.170;MQ=32.23;MQ0=230;MQRankSum=-1.352;QD=9.93;ReadPosRankSum=1.471;SNPEFF_AMINO_ACID_CHANGE=D356N;SNPEFF_CODON_CHANGE=Gac/Aac;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1638848_1639023;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODER [...]
+1 1638994 rs139262276 C T 3722.63 VQSRTrancheSNP99.50to99.90 AC=27;AF=0.276;AN=98;BaseQRankSum=4.165;DB;DP=1412;Dels=0.00;FS=43.176;HaplotypeScore=0.4009;InbreedingCoeff=0.4134;MLEAC=27;MLEAF=0.276;MQ=16.67;MQ0=641;MQRankSum=0.607;QD=4.58;ReadPosRankSum=-1.355;SNPEFF_AMINO_ACID_CHANGE=G333R;SNPEFF_CODON_CHANGE=Ggg/Agg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1638848_1639023;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF [...]
+1 1639046 rs138369165 C G 4405.12 VQSRTrancheSNP99.50to99.90 AC=47;AF=0.490;AN=96;BaseQRankSum=11.990;DB;DP=810;Dels=0.00;FS=21.488;HaplotypeScore=0.3049;InbreedingCoeff=0.4502;MLEAC=46;MLEAF=0.479;MQ=25.71;MQ0=218;MQRankSum=-3.993;QD=9.33;ReadPosRankSum=-4.570;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-3.258e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:24,0:24:69:0, [...]
+1 1639062 rs149613000 T C 747.63 VQSRTrancheSNP99.50to99.90 AC=21;AF=0.239;AN=88;BaseQRankSum=7.959;DB;DP=539;Dels=0.00;FS=14.404;HaplotypeScore=0.2679;InbreedingCoeff=0.5296;MLEAC=17;MLEAF=0.193;MQ=31.98;MQ0=38;MQRankSum=1.017;QD=6.80;ReadPosRankSum=-1.235;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-2.868e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:25,0:25:75:0,75,7 [...]
+1 1639073 . A T 175.81 VQSRTrancheSNP99.50to99.90 AC=9;AF=0.107;AN=84;BaseQRankSum=-2.705;DP=421;Dels=0.00;FS=0.000;HaplotypeScore=0.3008;InbreedingCoeff=0.4176;MLEAC=6;MLEAF=0.071;MQ=30.68;MQ0=36;MQRankSum=-0.024;QD=5.49;ReadPosRankSum=0.538;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-2.791e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,671 ./. 0/0:8,0: [...]
+1 1639570 rs141165289 C T 883.43 VQSRTrancheSNP99.50to99.90 AC=15;AF=0.250;AN=60;BaseQRankSum=-5.650;DB;DP=770;Dels=0.00;FS=0.678;HaplotypeScore=0.4057;InbreedingCoeff=-0.0481;MLEAC=15;MLEAF=0.250;MQ=14.16;MQ0=429;MQRankSum=-1.209;QD=2.39;ReadPosRankSum=-0.601;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-4.394e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:11,0:11:18:0,1 [...]
+1 1639608 . G A 58.98 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.032;AN=62;BaseQRankSum=-2.551;DP=1403;Dels=0.00;FS=1.326;HaplotypeScore=0.4675;InbreedingCoeff=-0.0735;MLEAC=2;MLEAF=0.032;MQ=11.11;MQ0=927;MQRankSum=1.280;QD=0.54;ReadPosRankSum=0.534;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-5.890e+00;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:40,0:40:9:0,9,78 0/0:26,0:2 [...]
+1 1639687 . G A 473.42 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.204;AN=54;BaseQRankSum=-11.169;DP=1398;Dels=0.00;FS=23.198;HaplotypeScore=0.2334;InbreedingCoeff=-0.2824;MLEAC=11;MLEAF=0.204;MQ=11.20;MQ0=898;MQRankSum=-1.547;QD=0.70;ReadPosRankSum=1.112;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-6.460e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:24,0:24:3:0,3,33 0/0:36,0 [...]
+1 1639702 . C T 110.94 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.060;AN=50;BaseQRankSum=-1.482;DP=1127;Dels=0.00;FS=3.889;HaplotypeScore=0.1458;InbreedingCoeff=-0.0818;MLEAC=3;MLEAF=0.060;MQ=10.55;MQ0=723;MQRankSum=1.431;QD=0.98;ReadPosRankSum=-0.782;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-5.670e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:19,0:19:3:0,3,33 0/0:24,0:24: [...]
+1 1647745 rs72634830 G A 17639.24 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=21.762;DB;DP=3417;Dels=0.00;FS=230.666;HaplotypeScore=1.6377;InbreedingCoeff=-0.9082;MLEAC=48;MLEAF=0.480;MQ=52.75;MQ0=0;MQRankSum=-34.123;QD=5.36;ReadPosRankSum=-8.152;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479362;VQSLOD=-2.883e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:50,25: [...]
+1 1647753 rs74045984 C T 19316.52 VQSRTrancheSNP99.50to99.90 AC=47;AF=0.470;AN=100;BaseQRankSum=-32.228;DB;DP=3494;Dels=0.00;FS=143.909;HaplotypeScore=1.4824;InbreedingCoeff=-0.8873;MLEAC=47;MLEAF=0.470;MQ=53.15;MQ0=0;MQRankSum=-32.262;QD=5.87;ReadPosRankSum=-7.739;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479362;VQSLOD=-1.945e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:53,22 [...]
+1 1647778 rs72901773 C G 25507.74 VQSRTrancheSNP99.50to99.90 AC=49;AF=0.490;AN=100;BaseQRankSum=-30.365;DB;DP=3670;Dels=0.00;FS=13.015;HaplotypeScore=1.8006;InbreedingCoeff=-0.9605;MLEAC=49;MLEAF=0.490;MQ=53.28;MQ0=0;MQRankSum=-27.906;QD=7.07;ReadPosRankSum=-5.158;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479362;VQSLOD=-1.367e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1 [...]
+1 1647814 rs72901775 T C 37323.72 VQSRTrancheSNP99.50to99.90 AC=49;AF=0.490;AN=100;BaseQRankSum=27.187;DB;DP=3738;Dels=0.00;FS=44.966;HaplotypeScore=1.1191;InbreedingCoeff=-0.9608;MLEAC=49;MLEAF=0.490;MQ=52.47;MQ0=0;MQRankSum=-26.757;QD=10.19;ReadPosRankSum=0.422;SNPEFF_AMINO_ACID_CHANGE=N9D;SNPEFF_CODON_CHANGE=Aat/Gat;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1647785_1647917;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEF [...]
+1 1647871 rs72909014 T C 24074.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=30.488;DB;DP=3314;Dels=0.00;FS=34.352;HaplotypeScore=2.3042;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=52.62;MQ0=0;MQRankSum=-28.834;QD=7.55;ReadPosRankSum=-1.891;SNPEFF_AMINO_ACID_CHANGE=R100;SNPEFF_CODON_CHANGE=cgA/cgG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1647785_1647917;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMP [...]
+1 1647873 . G T 326.30 VQSRTrancheSNP99.00to99.30 AC=4;AF=0.040;AN=100;BaseQRankSum=2.140;DP=3316;Dels=0.00;FS=0.546;HaplotypeScore=2.2918;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=52.23;MQ0=0;MQRankSum=-5.574;QD=1.17;ReadPosRankSum=-0.122;SNPEFF_AMINO_ACID_CHANGE=R100;SNPEFF_CODON_CHANGE=Cga/Aga;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1647785_1647917;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1650832 rs72909030 A G 45541.73 VQSRTrancheSNP99.50to99.90 AC=49;AF=0.490;AN=100;BaseQRankSum=23.916;DB;DP=3747;Dels=0.00;FS=18.898;HaplotypeScore=1.0621;InbreedingCoeff=-0.9608;MLEAC=49;MLEAF=0.490;MQ=54.25;MQ0=0;MQRankSum=-21.030;QD=12.40;ReadPosRankSum=-0.870;SNPEFF_AMINO_ACID_CHANGE=V63A;SNPEFF_CODON_CHANGE=gTt/gCt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650767_1650894;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNP [...]
+1 1650845 rs1059831 G A 43007.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=11.982;DB;DP=3824;Dels=0.00;FS=3.720;HaplotypeScore=0.8692;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=54.19;MQ0=0;MQRankSum=24.187;QD=11.95;ReadPosRankSum=0.117;SNPEFF_AMINO_ACID_CHANGE=R59W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650767_1650894;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_ [...]
+1 1650917 rs148518955 T C 307.18 VQSRTrancheSNP98.60to98.80 AC=1;AF=0.010;AN=100;BaseQRankSum=-0.768;DB;DP=3870;Dels=0.00;FS=1.094;HaplotypeScore=1.3740;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=51.37;MQ0=0;MQRankSum=5.296;QD=4.15;ReadPosRankSum=1.379;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=0.572;culprit=QD GT:AD:DP:GQ:PL 0/0:75,0:75:99:0,220,25 [...]
+1 1650920 rs36191908 G A 18368.04 VQSRTrancheSNP99.50to99.90 AC=39;AF=0.390;AN=100;BaseQRankSum=-16.414;DB;DP=3830;Dels=0.00;FS=40.941;HaplotypeScore=1.4810;InbreedingCoeff=-0.6438;MLEAC=39;MLEAF=0.390;MQ=51.23;MQ0=0;MQRankSum=-25.997;QD=6.36;ReadPosRankSum=-1.670;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-1.026e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1 [...]
+1 1650939 . G A 22870.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=-18.935;DP=3421;Dels=0.02;FS=60.007;HaplotypeScore=6.7725;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=51.35;MQ0=0;MQRankSum=-45.584;QD=6.95;ReadPosRankSum=14.146;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-2.814e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1:45,28:70:99 [...]
+1 1650940 rs74345479 G A 22714.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=-30.655;DB;DP=3446;Dels=0.02;FS=52.004;HaplotypeScore=6.8009;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=51.41;MQ0=0;MQRankSum=-45.783;QD=6.86;ReadPosRankSum=15.177;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-2.857e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1 [...]
+1 1850654 . G C 40.22 PASS AC=4;AF=0.080;AN=50;BaseQRankSum=0.167;DP=37;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=-0.0817;MLEAC=4;MLEAF=0.080;MQ=56.34;MQ0=0;MQRankSum=0.501;QD=5.75;ReadPosRankSum=-0.969;SNPEFF_AMINO_ACID_CHANGE=S15C;SNPEFF_CODON_CHANGE=tCc/tGc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1850484_1850697;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 1853863 rs28680721 T C 14790.08 PASS AC=19;AF=0.190;AN=100;BaseQRankSum=14.525;DB;DP=1741;Dels=0.00;FS=0.000;HaplotypeScore=0.7362;InbreedingCoeff=0.2851;MLEAC=19;MLEAF=0.190;MQ=58.07;MQ0=0;MQRankSum=1.097;QD=21.40;ReadPosRankSum=-3.808;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=4.14;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:39,0:39:99:0,117,1409 0/0:3 [...]
+1 1854109 rs2803348 A G 51305.44 PASS AC=50;AF=0.500;AN=100;BaseQRankSum=24.670;DB;DP=2880;Dels=0.00;FS=2.519;HaplotypeScore=1.1021;InbreedingCoeff=-0.2000;MLEAC=50;MLEAF=0.500;MQ=59.24;MQ0=0;MQRankSum=-0.088;QD=22.51;ReadPosRankSum=-0.904;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=5.12;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:24,34:55:99:1012,0,649 0/ [...]
+1 1854546 rs28633659 C T 12300.07 PASS AC=19;AF=0.190;AN=100;BaseQRankSum=-8.444;DB;DP=1617;Dels=0.00;FS=0.000;HaplotypeScore=0.5320;InbreedingCoeff=0.2852;MLEAC=19;MLEAF=0.190;MQ=59.21;MQ0=0;MQRankSum=2.435;QD=18.25;ReadPosRankSum=-2.346;SNPEFF_AMINO_ACID_CHANGE=E794K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1854424_1854554;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1854572 . G T 174.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.538;DP=1268;Dels=0.00;FS=0.000;HaplotypeScore=0.9881;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=58.77;MQ0=0;MQRankSum=1.477;QD=12.44;ReadPosRankSum=0.396;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=5.07;culprit=MQ GT:AD:DP:GQ:PL 0/0:19,0:19:48:0,48,607 0/0:24,0:24:72:0,72,905 0/0:18,0:18 [...]
+1 1854579 rs115047896 A G 222.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.037;DB;DP=1131;Dels=0.00;FS=0.000;HaplotypeScore=0.8070;InbreedingCoeff=-0.0207;MLEAC=2;MLEAF=0.020;MQ=58.75;MQ0=0;MQRankSum=-0.189;QD=10.10;ReadPosRankSum=0.028;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=6.42;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:48:0,48,612 0/0:26,0:26:78:0,78,96 [...]
+1 1854765 rs188186459 G A 187.21 PASS AC=1;AF=0.011;AN=90;BaseQRankSum=1.193;DB;DP=249;Dels=0.00;FS=1.872;HaplotypeScore=0.1355;InbreedingCoeff=-0.0475;MLEAC=1;MLEAF=0.011;MQ=57.94;MQ0=0;MQRankSum=1.012;QD=11.70;ReadPosRankSum=0.094;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=4.15;culprit=MQ GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,187 0/0:6,0:6:18:0,18,184 0/0:6 [...]
+1 1855319 rs2295362 C T 26718.41 PASS AC=18;AF=0.180;AN=100;BaseQRankSum=-9.177;DB;DP=3695;Dels=0.00;FS=3.377;HaplotypeScore=0.6567;InbreedingCoeff=0.3225;MLEAC=18;MLEAF=0.180;MQ=59.63;MQ0=0;MQRankSum=1.412;QD=23.58;ReadPosRankSum=-2.580;SNPEFF_AMINO_ACID_CHANGE=K711;SNPEFF_CODON_CHANGE=aaG/aaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1855214_1855368;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1857211 rs28521843 G A 670.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=5.451;DB;DP=1568;Dels=0.00;FS=10.997;HaplotypeScore=0.0752;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=59.66;MQ0=0;MQRankSum=1.004;QD=13.41;ReadPosRankSum=-1.863;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=7.74;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,663 0/0:34,0:3 [...]
+1 1887019 rs28548017 A G 150764.25 VQSRTrancheSNP99.50to99.90 AC=79;AF=0.790;AN=100;BaseQRankSum=18.762;DB;DP=4939;Dels=0.00;FS=92.030;HaplotypeScore=0.6975;InbreedingCoeff=-0.0247;MLEAC=79;MLEAF=0.790;MQ=59.70;MQ0=0;MQRankSum=1.805;QD=32.18;ReadPosRankSum=-7.436;SNPEFF_AMINO_ACID_CHANGE=*763Q;SNPEFF_CODON_CHANGE=Tag/Cag;SNPEFF_EFFECT=STOP_LOST;SNPEFF_EXON_ID=exon_1_1884752_1887289;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPAC [...]
+1 1887091 rs139735565 CG C 11461.89 Indel_FS AC=26;AF=0.260;AN=100;BaseQRankSum=-0.440;DB;DP=3493;FS=322.923;HaplotypeScore=20.3961;InbreedingCoeff=-0.0396;MLEAC=26;MLEAF=0.260;MQ=58.64;MQ0=0;MQRankSum=-3.052;QD=9.92;ReadPosRankSum=-2.824;SNPEFF_EFFECT=FRAME_SHIFT;SNPEFF_EXON_ID=exon_1_1884752_1887289;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000270720 GT:AD:DP:GQ:PL 1/1:0,27:28:81:1149,81,0 0/ [...]
+1 1887111 rs141242161 GC G 8958.88 Indel_FS AC=26;AF=0.260;AN=100;BaseQRankSum=3.014;DB;DP=3234;FS=424.686;HaplotypeScore=22.9125;InbreedingCoeff=-0.0395;MLEAC=26;MLEAF=0.260;MQ=57.82;MQ0=0;MQRankSum=0.421;QD=8.09;RPA=2,1;RU=C;ReadPosRankSum=-9.687;SNPEFF_EFFECT=FRAME_SHIFT;SNPEFF_EXON_ID=exon_1_1884752_1887289;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000270720;STR GT:AD:DP:GQ:PL 1/1:0,15:27:4 [...]
+1 1887245 rs28575980 G A 15682.54 PASS AC=25;AF=0.250;AN=100;BaseQRankSum=-0.390;DB;DP=2315;Dels=0.00;FS=4.788;HaplotypeScore=0.6817;InbreedingCoeff=-0.1200;MLEAC=25;MLEAF=0.250;MQ=58.68;MQ0=0;MQRankSum=-1.555;QD=16.07;ReadPosRankSum=1.024;SNPEFF_AMINO_ACID_CHANGE=A134;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1887150_1887289;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSC [...]
+1 1887300 rs115884258 G A 224.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.937;DB;DP=1592;Dels=0.00;FS=4.030;HaplotypeScore=0.3130;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.12;MQ0=0;MQRankSum=0.709;QD=8.97;ReadPosRankSum=-0.167;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=8.09;culprit=QD GT:AD:DP:GQ:PL 0/0:32,0:32:90:0,90,1101 0/0:33,0:33:99:0,99,1 [...]
+1 1888024 rs79784725 C G 940.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.079;DB;DP=1810;Dels=0.00;FS=9.030;HaplotypeScore=0.2720;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.19;MQ0=0;MQRankSum=0.316;QD=14.46;ReadPosRankSum=0.269;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=7.34;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,135,1626 0/0:31,0: [...]
+1 1888193 rs3820011 C A 8338.62 PASS AC=25;AF=0.250;AN=100;BaseQRankSum=6.606;DB;DP=1179;Dels=0.00;FS=0.000;HaplotypeScore=0.4560;InbreedingCoeff=-0.0142;MLEAC=25;MLEAF=0.250;MQ=59.30;MQ0=0;MQRankSum=0.157;QD=16.13;ReadPosRankSum=3.386;SNPEFF_AMINO_ACID_CHANGE=G628C;SNPEFF_CODON_CHANGE=Ggc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1888059_1888223;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1888237 rs139739570 T C 418.22 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.939;DB;DP=899;Dels=0.00;FS=1.100;HaplotypeScore=0.2628;InbreedingCoeff=-0.0122;MLEAC=1;MLEAF=0.010;MQ=59.60;MQ0=0;MQRankSum=0.003;QD=10.46;ReadPosRankSum=-1.338;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=7.99;culprit=FS GT:AD:DP:GQ:PL 0/0:14,0:14:42:0,42,481 0/0:14,0:14:39:0,39,49 [...]
+1 1888273 rs114981028 G T 376.29 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.990;DB;DP=627;Dels=0.00;FS=0.000;HaplotypeScore=0.2840;InbreedingCoeff=-0.0158;MLEAC=1;MLEAF=0.010;MQ=59.26;MQ0=0;MQRankSum=0.371;QD=12.54;ReadPosRankSum=-2.140;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=7.60;culprit=FS GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,181 0/0:14,0:14:39:0,39,490 [...]
+1 1890559 rs146150343 C T 1499.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.399;DB;DP=3082;Dels=0.00;FS=22.965;HaplotypeScore=0.4642;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.20;MQ0=0;MQRankSum=1.746;QD=11.27;ReadPosRankSum=-3.431;SNPEFF_AMINO_ACID_CHANGE=S617;SNPEFF_CODON_CHANGE=tcG/tcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1890559_1890648;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1890604 rs75297543 C T 709.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.631;DB;DP=4460;Dels=0.00;FS=6.550;HaplotypeScore=0.3434;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.16;MQ0=0;MQRankSum=0.792;QD=9.58;ReadPosRankSum=-0.776;SNPEFF_AMINO_ACID_CHANGE=T49;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1890559_1890648;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1891477 rs2748972 A G 7909.71 PASS AC=22;AF=0.220;AN=100;BaseQRankSum=14.325;DB;DP=1305;Dels=0.00;FS=5.023;HaplotypeScore=1.5993;InbreedingCoeff=0.0675;MLEAC=22;MLEAF=0.220;MQ=58.80;MQ0=0;MQRankSum=-0.664;QD=15.66;ReadPosRankSum=-1.079;SNPEFF_AMINO_ACID_CHANGE=S10P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1891403_1891504;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1891486 rs113160895 A G 1694.48 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=5.837;DB;DP=1152;Dels=0.00;FS=0.673;HaplotypeScore=1.7650;InbreedingCoeff=-0.0639;MLEAC=6;MLEAF=0.060;MQ=58.80;MQ0=0;MQRankSum=0.379;QD=12.02;ReadPosRankSum=-0.720;SNPEFF_AMINO_ACID_CHANGE=W7R;SNPEFF_CODON_CHANGE=Tgg/Cgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1891403_1891504;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1895177 rs7523728 C T 18866.39 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=2.316;DB;DP=3390;Dels=0.00;FS=0.546;HaplotypeScore=0.3873;InbreedingCoeff=0.0401;MLEAC=23;MLEAF=0.230;MQ=59.68;MQ0=0;MQRankSum=0.727;QD=18.05;ReadPosRankSum=-0.786;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=6.95;culprit=FS GT:AD:DP:GQ:PL 1/1:0,55:55:99:2079,166,0 0/0:62,0:62:99:0,18 [...]
+1 1896333 rs61734005 G A 4491.52 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-6.307;DB;DP=1697;Dels=0.00;FS=12.547;HaplotypeScore=0.4063;InbreedingCoeff=0.4565;MLEAC=8;MLEAF=0.080;MQ=58.32;MQ0=0;MQRankSum=1.282;QD=16.10;ReadPosRankSum=-0.673;SNPEFF_AMINO_ACID_CHANGE=H523;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1896327_1896500;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1896379 rs61734006 C T 483.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.623;DB;DP=1305;Dels=0.00;FS=4.694;HaplotypeScore=0.2476;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.31;MQ0=0;MQRankSum=1.250;QD=11.50;ReadPosRankSum=0.386;SNPEFF_AMINO_ACID_CHANGE=R508H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1896327_1896500;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1897889 rs61734007 G C 1841.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-8.826;DB;DP=1545;Dels=0.00;FS=0.000;HaplotypeScore=0.5198;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=58.62;MQ0=0;MQRankSum=2.410;QD=11.58;ReadPosRankSum=0.364;SNPEFF_AMINO_ACID_CHANGE=P441R;SNPEFF_CODON_CHANGE=cCc/cGc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1897810_1897965;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1897960 rs61734009 G A 69.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.744;DB;DP=1196;Dels=0.00;FS=2.361;HaplotypeScore=0.4735;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.04;MQ0=0;MQRankSum=0.756;QD=8.65;ReadPosRankSum=-2.117;SNPEFF_AMINO_ACID_CHANGE=Y417;SNPEFF_CODON_CHANGE=taC/taT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1897810_1897965;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1900024 rs56985589 TG T 34001.90 PASS AC=29;AF=0.290;AN=100;BaseQRankSum=-4.625;DB;DP=3473;FS=33.708;HaplotypeScore=19.1752;InbreedingCoeff=0.0680;MLEAC=29;MLEAF=0.290;MQ=58.34;MQ0=0;MQRankSum=-3.279;QD=23.43;ReadPosRankSum=-0.519;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720 GT:AD:DP:GQ:PL 1/1:0,69:69:99:3091,208,0 0/0:85,0:85:99:0,256,3014 0/1:35,33:71:99:1222 [...]
+1 1900083 rs61734010 C T 1026.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.513;DB;DP=4963;Dels=0.00;FS=0.626;HaplotypeScore=1.0971;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.40;MQ0=0;MQRankSum=3.504;QD=13.68;ReadPosRankSum=-0.731;SNPEFF_AMINO_ACID_CHANGE=T412;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1900106 rs61233860 T TCTC 53695.38 Indel_FS AC=29;AF=0.290;AN=100;BaseQRankSum=-4.539;DB;DP=5111;FS=1274.991;HaplotypeScore=15.3591;InbreedingCoeff=0.0772;MLEAC=29;MLEAF=0.290;MQ=56.96;MQ0=0;MQRankSum=-7.285;QD=29.91;ReadPosRankSum=-0.826;SNPEFF_AMINO_ACID_CHANGE=K404KR;SNPEFF_CODON_CHANGE=aag/aaGAGg;SNPEFF_EFFECT=CODON_INSERTION;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1900186 rs35269416 T C 26612.08 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=15.129;DB;DP=5644;Dels=0.00;FS=2.051;HaplotypeScore=0.9407;InbreedingCoeff=0.0787;MLEAC=17;MLEAF=0.170;MQ=58.60;MQ0=0;MQRankSum=2.639;QD=20.81;ReadPosRankSum=-1.035;SNPEFF_AMINO_ACID_CHANGE=K378R;SNPEFF_CODON_CHANGE=aAa/aGa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1900211 rs78791970 C T 850.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.317;DB;DP=5092;Dels=0.00;FS=0.000;HaplotypeScore=1.0293;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.63;MQ0=0;MQRankSum=2.381;QD=11.81;ReadPosRankSum=-0.996;SNPEFF_AMINO_ACID_CHANGE=E370K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1900225 rs72636304 C T 689.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.355;DB;DP=4850;Dels=0.00;FS=1.828;HaplotypeScore=1.5262;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.60;MQ0=0;MQRankSum=0.345;QD=13.25;ReadPosRankSum=0.779;SNPEFF_AMINO_ACID_CHANGE=R365Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1900232 rs16824588 T C 72609.14 PASS AC=47;AF=0.470;AN=100;BaseQRankSum=-13.056;DB;DP=4674;Dels=0.00;FS=4.915;HaplotypeScore=1.2678;InbreedingCoeff=0.0767;MLEAC=47;MLEAF=0.470;MQ=58.67;MQ0=0;MQRankSum=-0.362;QD=23.54;ReadPosRankSum=-1.796;SNPEFF_AMINO_ACID_CHANGE=I363V;SNPEFF_CODON_CHANGE=Atc/Gtc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE; [...]
+1 1900308 rs114206046 T C 1362.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=6.772;DB;DP=1287;Dels=0.00;FS=7.651;HaplotypeScore=0.6800;InbreedingCoeff=-0.0311;MLEAC=3;MLEAF=0.030;MQ=58.64;MQ0=0;MQRankSum=1.892;QD=13.10;ReadPosRankSum=-1.879;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=6.66;culprit=MQ GT:AD:DP:GQ:PL 0/0:39,1:39:99:0,111,1253 0/0:34,0:34:96:0,96 [...]
+1 1903373 rs117921686 C T 723.61 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.355;DB;DP=1241;Dels=0.00;FS=1.104;HaplotypeScore=1.0785;InbreedingCoeff=-0.0308;MLEAC=3;MLEAF=0.030;MQ=59.00;MQ0=0;MQRankSum=0.107;QD=11.67;ReadPosRankSum=-1.042;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=6.56;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:29,0:29:84:0,84,1042 0/0:28,0 [...]
+1 1903400 . T G 1066.92 VQSRTrancheSNP99.50to99.90 AC=31;AF=0.310;AN=100;BaseQRankSum=-15.042;DP=1110;Dels=0.00;FS=159.527;HaplotypeScore=1.0567;InbreedingCoeff=-0.4165;MLEAC=29;MLEAF=0.290;MQ=58.36;MQ0=0;MQRankSum=1.810;QD=1.48;ReadPosRankSum=-13.563;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=-1.156e+01;culprit=FS GT:AD:DP:GQ:PL 0/0:15,10:24:18:0,18,424 [...]
+1 1956362 rs2376805 G A 71015.04 PASS AC=83;AF=0.830;AN=100;BaseQRankSum=10.972;DB;DP=2501;Dels=0.00;FS=11.665;HaplotypeScore=0.3263;InbreedingCoeff=0.3621;MLEAC=83;MLEAF=0.830;MQ=59.05;MQ0=0;MQRankSum=0.640;QD=31.87;ReadPosRankSum=3.782;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=4.03;culprit=ReadPosRankSum GT:AD:DP:GQ:PL 0/1:21,13:32:99:382,0,479 1/1:0,30:3 [...]
+1 1956733 rs188089835 G A 868.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.998;DB;DP=2977;Dels=0.00;FS=1.871;HaplotypeScore=0.5884;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=0.654;QD=11.58;ReadPosRankSum=-3.335;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=6.16;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:60,0:60:99:0,181,2168 0/0:57,0:5 [...]
+1 1956850 . A C 664.91 VQSRTrancheSNP99.50to99.90 AC=22;AF=0.220;AN=100;BaseQRankSum=-21.336;DP=2255;Dels=0.00;FS=351.602;HaplotypeScore=2.1819;InbreedingCoeff=-0.2778;MLEAC=21;MLEAF=0.210;MQ=58.85;MQ0=0;MQRankSum=6.650;QD=0.58;ReadPosRankSum=-5.172;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=-3.563e+01;culprit=FS GT:AD:DP:GQ:PL 0/0:36,15:49:29:0,29,976 0/0:4 [...]
+1 1957037 rs2229110 T C 70543.40 PASS AC=64;AF=0.640;AN=100;BaseQRankSum=16.739;DB;DP=3212;Dels=0.00;FS=3.065;HaplotypeScore=2.3687;InbreedingCoeff=0.2187;MLEAC=64;MLEAF=0.640;MQ=59.26;MQ0=0;MQRankSum=-0.198;QD=27.04;ReadPosRankSum=0.465;SNPEFF_AMINO_ACID_CHANGE=G110;SNPEFF_CODON_CHANGE=ggT/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1956957_1957177;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1957219 rs140980040 CG C 3487.20 Indel_FS AC=12;AF=0.120;AN=100;BaseQRankSum=-0.962;DB;DP=873;FS=354.599;HaplotypeScore=4.0037;InbreedingCoeff=0.0497;MLEAC=12;MLEAF=0.120;MQ=58.78;MQ0=0;MQRankSum=1.434;QD=17.98;RPA=3,2;RU=G;ReadPosRankSum=-2.351;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;STR GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,895 0/0:23,0:23:69:0,69,926 0/1:9,7:1 [...]
+1 1958993 rs150102040 C T 122.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.968;DB;DP=911;Dels=0.00;FS=17.837;HaplotypeScore=0.2512;InbreedingCoeff=-0.0110;MLEAC=1;MLEAF=0.010;MQ=59.00;MQ0=0;MQRankSum=1.864;QD=7.64;ReadPosRankSum=-0.095;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=4.30;culprit=FS GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,703 0/0:21,0:21:63:0,63,794 0/ [...]
+1 1959121 rs3795279 T C 2677.48 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=9.933;DB;DP=1066;Dels=0.00;FS=4.101;HaplotypeScore=0.3335;InbreedingCoeff=-0.0530;MLEAC=5;MLEAF=0.050;MQ=59.22;MQ0=0;MQRankSum=0.944;QD=14.87;ReadPosRankSum=-1.734;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=7.15;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:23,0:23:69:0,69,811 0/0:27,0:27:81 [...]
+1 1959698 rs139300921 C T 112.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.525;DB;DP=1038;Dels=0.00;FS=2.291;HaplotypeScore=0.5319;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=58.91;MQ0=0;MQRankSum=0.884;QD=10.20;ReadPosRankSum=-0.322;SNPEFF_AMINO_ACID_CHANGE=R220C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1959594_1959731;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 1959699 rs41307846 G A 210.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.134;DB;DP=999;Dels=0.00;FS=0.000;HaplotypeScore=0.5319;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=58.80;MQ0=0;MQRankSum=1.468;QD=19.11;ReadPosRankSum=-1.548;SNPEFF_AMINO_ACID_CHANGE=R220H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1959594_1959731;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1960674 rs28408173 C T 2980.27 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=-7.583;DB;DP=410;Dels=0.00;FS=0.000;HaplotypeScore=0.2047;InbreedingCoeff=0.1983;MLEAC=22;MLEAF=0.220;MQ=58.36;MQ0=0;MQRankSum=2.906;QD=17.43;ReadPosRankSum=-1.056;SNPEFF_AMINO_ACID_CHANGE=S272;SNPEFF_CODON_CHANGE=agC/agT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1960550_1960705;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1960964 rs116197762 A G 2939.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=9.622;DB;DP=2005;Dels=0.00;FS=10.345;HaplotypeScore=0.5699;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=58.96;MQ0=0;MQRankSum=-0.092;QD=13.36;ReadPosRankSum=-2.028;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=6.71;culprit=MQ GT:AD:DP:GQ:PL 0/0:38,0:38:99:0,111,1314 0/0:43,0:43:99:0,123, [...]
+1 1961239 rs28507434 G A 181.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.178;DB;DP=1196;Dels=0.00;FS=2.212;HaplotypeScore=0.2632;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.68;MQ0=0;MQRankSum=-0.953;QD=15.10;ReadPosRankSum=-1.138;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=7.30;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,703 0/0:27,0:27:81:0,8 [...]
+1 1961408 rs28431879 C T 12677.23 PASS AC=21;AF=0.210;AN=100;BaseQRankSum=-0.060;DB;DP=2453;Dels=0.00;FS=9.731;HaplotypeScore=0.6274;InbreedingCoeff=0.0958;MLEAC=21;MLEAF=0.210;MQ=58.82;MQ0=0;MQRankSum=0.121;QD=15.50;ReadPosRankSum=-1.337;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=5.25;culprit=MQ GT:AD:DP:GQ:PL 0/1:23,22:43:99:645,0,560 0/1:19,13:31:99:373,0 [...]
+1 1961466 rs28398772 C T 3049.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=2.707;DB;DP=2245;Dels=0.00;FS=15.097;HaplotypeScore=0.6637;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=59.16;MQ0=0;MQRankSum=-0.078;QD=12.81;ReadPosRankSum=-2.229;SNPEFF_AMINO_ACID_CHANGE=A368;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1961422_1962192;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1986954 rs35271800 G A 626.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.370;DB;DP=1965;Dels=0.00;FS=1.853;HaplotypeScore=0.0984;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.68;MQ0=0;MQRankSum=0.301;QD=11.60;ReadPosRankSum=-2.289;SNPEFF_AMINO_ACID_CHANGE=R3H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1986880_1987001;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1987889 rs70937051 C T 286.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.998;DB;DP=1365;Dels=0.00;FS=0.000;HaplotypeScore=0.3534;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.62;MQ0=0;MQRankSum=-2.065;QD=11.45;ReadPosRankSum=-1.702;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484419;VQSLOD=6.69;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:27,0:27:81:0,81,998 0/0:19,0:19:51 [...]
+1 2234874 rs143561187 CG C 532.13 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.309;DB;DP=3338;FS=90.583;HaplotypeScore=17.7870;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.53;MQ0=0;MQRankSum=0.017;QD=12.98;RPA=5,4;RU=G;ReadPosRankSum=-2.092;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000478223;STR GT:AD:DP:GQ:PL 0/0:70,0:70:99:0,211,2619 0/0:70,0:73:99:0,211,2608 0/0:63,0: [...]
+1 2235451 . C G 226.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.707;DP=1158;Dels=0.00;FS=6.994;HaplotypeScore=0.9115;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.39;MQ0=0;MQRankSum=-0.169;QD=12.57;ReadPosRankSum=-1.595;SNPEFF_AMINO_ACID_CHANGE=P462A;SNPEFF_CODON_CHANGE=Cca/Gca;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2235279_2235541;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=E [...]
+1 2235477 rs150985728 C T 447.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.924;DB;DP=987;Dels=0.00;FS=0.000;HaplotypeScore=0.8674;InbreedingCoeff=-0.0108;MLEAC=1;MLEAF=0.010;MQ=58.91;MQ0=0;MQRankSum=0.361;QD=12.78;ReadPosRankSum=-0.484;SNPEFF_AMINO_ACID_CHANGE=P470;SNPEFF_CODON_CHANGE=ccC/ccT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2235279_2235541;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 2237614 . G A 63.78 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-0.828;DP=319;Dels=0.00;FS=0.000;HaplotypeScore=0.1893;InbreedingCoeff=-0.0338;MLEAC=1;MLEAF=0.010;MQ=59.16;MQ0=0;MQRankSum=0.368;QD=15.95;ReadPosRankSum=-0.476;SNPEFF_AMINO_ACID_CHANGE=L641;SNPEFF_CODON_CHANGE=ctG/ctA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2237459_2237689;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000378536;V [...]
+1 2238237 rs2230008 A T 83.67 PASS AC=6;AF=0.150;AN=40;BaseQRankSum=-0.106;DB;DP=28;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.2420;MLEAC=5;MLEAF=0.125;MQ=57.15;MQ0=0;MQRankSum=-1.694;QD=20.92;ReadPosRankSum=-0.529;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000478223;VQSLOD=3.72;culprit=MQ GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:1:3:0,3,34 ./ [...]
+1 2255489 rs3831908 CCAGA C 619.14 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.623;DB;DP=386;FS=0.000;HaplotypeScore=3.5051;InbreedingCoeff=0.4499;MLEAC=2;MLEAF=0.020;MQ=58.60;MQ0=0;MQRankSum=0.402;QD=56.29;ReadPosRankSum=-0.970;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MORN1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378531 GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,555 0/0:8,0:8:24:0,24,555 0/0:3,0:3:9:0,9,81 0/0:3,0:3:9:0,9,208 [...]
+1 2255633 rs3737639 G A 1457.31 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=-4.330;DB;DP=338;Dels=0.00;FS=7.069;HaplotypeScore=0.1797;InbreedingCoeff=0.1803;MLEAC=11;MLEAF=0.110;MQ=58.86;MQ0=0;MQRankSum=1.090;QD=16.01;ReadPosRankSum=-1.385;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MORN1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378531;VQSLOD=6.36;culprit=MQ GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,151 0/0:12,0:11:33:0,33,393 0/0: [...]
diff --git a/testdata/picard/vcf/mini.dbsnp.vcf.idx b/testdata/picard/vcf/mini.dbsnp.vcf.idx
new file mode 100644
index 0000000..710aa2f
Binary files /dev/null and b/testdata/picard/vcf/mini.dbsnp.vcf.idx differ
diff --git a/testdata/picard/vcf/mini.vcf b/testdata/picard/vcf/mini.vcf
new file mode 100755
index 0000000..45b9708
--- /dev/null
+++ b/testdata/picard/vcf/mini.vcf
@@ -0,0 +1,1000 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxR [...]
+##FILTER=<ID=Indel_FS,Description="FS>200.0">
+##FILTER=<ID=Indel_InbreedingCoeff,Description="InbreedingCoeff<-0.8">
+##FILTER=<ID=Indel_QD,Description="QD<2.0">
+##FILTER=<ID=Indel_ReadPosRankSum,Description="ReadPosRankSum<-20.0">
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheSNP98.50to98.60,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.6803 <= x < 0.8195">
+##FILTER=<ID=VQSRTrancheSNP98.60to98.80,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.391 <= x < 0.6803">
+##FILTER=<ID=VQSRTrancheSNP98.80to98.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.2076 <= x < 0.391">
+##FILTER=<ID=VQSRTrancheSNP98.90to99.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: 0.0125 <= x < 0.2076">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.30,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -0.92 <= x < 0.0125">
+##FILTER=<ID=VQSRTrancheSNP99.30to99.50,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -2.0012 <= x < -0.92">
+##FILTER=<ID=VQSRTrancheSNP99.50to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -47.4391 <= x < -2.0012">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -3283.311">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -3283.311 <= x < -47.4391">
+##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=Integer,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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SNPEFF_AMINO_ACID_CHANGE,Number=1,Type=String,Description="Old/New amino acid for the highest-impact effect resulting from the current variant (in HGVS style)">
+##INFO=<ID=SNPEFF_CODON_CHANGE,Number=1,Type=String,Description="Old/New codon for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_EFFECT,Number=1,Type=String,Description="The highest-impact effect resulting from the current variant (or one of the highest-impact effects, if there is a tie)">
+##INFO=<ID=SNPEFF_EXON_ID,Number=1,Type=String,Description="Exon ID for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_FUNCTIONAL_CLASS,Number=1,Type=String,Description="Functional class of the highest-impact effect resulting from the current variant: [NONE, SILENT, MISSENSE, NONSENSE]">
+##INFO=<ID=SNPEFF_GENE_BIOTYPE,Number=1,Type=String,Description="Gene biotype for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_GENE_NAME,Number=1,Type=String,Description="Gene name for the highest-impact effect resulting from the current variant">
+##INFO=<ID=SNPEFF_IMPACT,Number=1,Type=String,Description="Impact of the highest-impact effect resulting from the current variant [MODIFIER, LOW, MODERATE, HIGH]">
+##INFO=<ID=SNPEFF_TRANSCRIPT_ID,Number=1,Type=String,Description="Transcript ID for the highest-impact effect resulting from the current variant">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##OriginalSnpEffCmd="SnpEff eff -v -onlyCoding true -c /seq/references/Homo_sapiens_assembly19/v1/snpEff/Homo_sapiens_assembly19.snpEff.config -i vcf -o vcf GRCh37.64 /seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.unannotated.vcf "
+##OriginalSnpEffVersion="2.0.5 (build 2011-12-24), by Pablo Cingolani"
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.bam.list] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/scatter/temp_0001_of_50/scattered.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly1 [...]
+##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=50 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assemb [...]
+##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/tng/mccowan/VARIANT_CALLING_FAUXCELL/v1/VARIANT_CALLING_FAUXCELL.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRun [...]
+##contig=<ID=1,length=249250621>
+##contig=<ID=2,length=243199373>
+##contig=<ID=3,length=198022430>
+##contig=<ID=4,length=191154276>
+##contig=<ID=5,length=180915260>
+##contig=<ID=6,length=171115067>
+##contig=<ID=7,length=159138663>
+##contig=<ID=8,length=146364022>
+##contig=<ID=9,length=141213431>
+##contig=<ID=10,length=135534747>
+##contig=<ID=11,length=135006516>
+##contig=<ID=12,length=133851895>
+##contig=<ID=13,length=115169878>
+##contig=<ID=14,length=107349540>
+##contig=<ID=15,length=102531392>
+##contig=<ID=16,length=90354753>
+##contig=<ID=17,length=81195210>
+##contig=<ID=18,length=78077248>
+##contig=<ID=19,length=59128983>
+##contig=<ID=20,length=63025520>
+##contig=<ID=21,length=48129895>
+##contig=<ID=22,length=51304566>
+##contig=<ID=X,length=155270560>
+##contig=<ID=Y,length=59373566>
+##contig=<ID=MT,length=16569>
+##contig=<ID=GL000207.1,length=4262>
+##contig=<ID=GL000226.1,length=15008>
+##contig=<ID=GL000229.1,length=19913>
+##contig=<ID=GL000231.1,length=27386>
+##contig=<ID=GL000210.1,length=27682>
+##contig=<ID=GL000239.1,length=33824>
+##contig=<ID=GL000235.1,length=34474>
+##contig=<ID=GL000201.1,length=36148>
+##contig=<ID=GL000247.1,length=36422>
+##contig=<ID=GL000245.1,length=36651>
+##contig=<ID=GL000197.1,length=37175>
+##contig=<ID=GL000203.1,length=37498>
+##contig=<ID=GL000246.1,length=38154>
+##contig=<ID=GL000249.1,length=38502>
+##contig=<ID=GL000196.1,length=38914>
+##contig=<ID=GL000248.1,length=39786>
+##contig=<ID=GL000244.1,length=39929>
+##contig=<ID=GL000238.1,length=39939>
+##contig=<ID=GL000202.1,length=40103>
+##contig=<ID=GL000234.1,length=40531>
+##contig=<ID=GL000232.1,length=40652>
+##contig=<ID=GL000206.1,length=41001>
+##contig=<ID=GL000240.1,length=41933>
+##contig=<ID=GL000236.1,length=41934>
+##contig=<ID=GL000241.1,length=42152>
+##contig=<ID=GL000243.1,length=43341>
+##contig=<ID=GL000242.1,length=43523>
+##contig=<ID=GL000230.1,length=43691>
+##contig=<ID=GL000237.1,length=45867>
+##contig=<ID=GL000233.1,length=45941>
+##contig=<ID=GL000204.1,length=81310>
+##contig=<ID=GL000198.1,length=90085>
+##contig=<ID=GL000208.1,length=92689>
+##contig=<ID=GL000191.1,length=106433>
+##contig=<ID=GL000227.1,length=128374>
+##contig=<ID=GL000228.1,length=129120>
+##contig=<ID=GL000214.1,length=137718>
+##contig=<ID=GL000221.1,length=155397>
+##contig=<ID=GL000209.1,length=159169>
+##contig=<ID=GL000218.1,length=161147>
+##contig=<ID=GL000220.1,length=161802>
+##contig=<ID=GL000213.1,length=164239>
+##contig=<ID=GL000211.1,length=166566>
+##contig=<ID=GL000199.1,length=169874>
+##contig=<ID=GL000217.1,length=172149>
+##contig=<ID=GL000216.1,length=172294>
+##contig=<ID=GL000215.1,length=172545>
+##contig=<ID=GL000205.1,length=174588>
+##contig=<ID=GL000219.1,length=179198>
+##contig=<ID=GL000224.1,length=179693>
+##contig=<ID=GL000223.1,length=180455>
+##contig=<ID=GL000195.1,length=182896>
+##contig=<ID=GL000212.1,length=186858>
+##contig=<ID=GL000222.1,length=186861>
+##contig=<ID=GL000200.1,length=187035>
+##contig=<ID=GL000193.1,length=189789>
+##contig=<ID=GL000194.1,length=191469>
+##contig=<ID=GL000225.1,length=211173>
+##contig=<ID=GL000192.1,length=547496>
+##contig=<ID=NC_007605,length=171823>
+##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00116 HG00123 HG00158 HG00160 HG00265 HG00311 HG00371 HG00380 HG00404 HG00551 HG00610 HG00628 HG00635 HG01048 HG01079 HG01094 HG01247 HG01256 HG01260 HG01461 HG01488 NA06989 NA11918 NA11919 NA12341 NA18510 NA18520 NA18522 NA18574 NA18634 NA18867 NA18960 NA18986 NA19004 NA19067 NA19092 NA19102 NA19474 NA19675 NA19703 NA19711 NA19725 NA19819 NA19908 NA19920 NA20787 NA20798 NA20801 NA20803 NA20805
+1 69270 . A G 569.98 VQSRTrancheSNP99.50to99.90 AC=23;AF=0.767;AN=30;BaseQRankSum=-2.920;DP=4121;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.3609;MLEAC=24;MLEAF=0.800;MQ=3.91;MQ0=1518;MQRankSum=0.523;QD=0.55;ReadPosRankSum=-0.861;SNPEFF_AMINO_ACID_CHANGE=S108;SNPEFF_CODON_CHANGE=tcA/tcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69037_69829;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 69428 rs140739101 T G 1071.90 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.036;AN=56;BaseQRankSum=1.668;DB;DP=4947;Dels=0.00;FS=0.000;HaplotypeScore=0.0704;InbreedingCoeff=0.6789;MLEAC=2;MLEAF=0.036;MQ=18.90;MQ0=341;MQRankSum=-1.379;QD=20.61;ReadPosRankSum=1.363;SNPEFF_AMINO_ACID_CHANGE=F113C;SNPEFF_CODON_CHANGE=tTt/tGt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=M [...]
+1 69511 rs75062661 A G 21665.58 VQSRTrancheSNP99.50to99.90 AC=47;AF=0.904;AN=52;BaseQRankSum=8.056;DB;DP=1895;Dels=0.00;FS=2.126;HaplotypeScore=1.5401;InbreedingCoeff=0.3037;MLEAC=47;MLEAF=0.904;MQ=27.34;MQ0=178;MQRankSum=-9.596;QD=16.69;ReadPosRankSum=-3.561;SNPEFF_AMINO_ACID_CHANGE=T141A;SNPEFF_CODON_CHANGE=Aca/Gca;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPAC [...]
+1 69897 . T C 63.03 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.375;AN=8;BaseQRankSum=-0.684;DP=5111;Dels=0.00;FS=7.368;HaplotypeScore=0.1663;MLEAC=3;MLEAF=0.375;MQ=2.25;MQ0=1721;MQRankSum=0.322;QD=0.42;ReadPosRankSum=1.920;SNPEFF_AMINO_ACID_CHANGE=S269;SNPEFF_CODON_CHANGE=tcT/tcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000335137;VQSLOD= [...]
+1 865584 rs148711625 G A 281.07 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.940;DB;DP=330;Dels=0.00;FS=3.530;HaplotypeScore=0.2625;InbreedingCoeff=-0.0538;MLEAC=2;MLEAF=0.020;MQ=58.85;MQ0=0;MQRankSum=0.042;QD=10.41;ReadPosRankSum=-1.347;SNPEFF_AMINO_ACID_CHANGE=R41Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_865535_865716;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 865628 rs41285790 G A 196.36 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.599;DB;DP=594;Dels=0.00;FS=9.508;HaplotypeScore=0.3491;InbreedingCoeff=-0.0196;MLEAC=1;MLEAF=0.010;MQ=58.96;MQ0=0;MQRankSum=0.966;QD=16.36;ReadPosRankSum=0.286;SNPEFF_AMINO_ACID_CHANGE=G56S;SNPEFF_CODON_CHANGE=Ggt/Agt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_865535_865716;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 865662 rs140751899 G A 256.39 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.324;DB;DP=574;Dels=0.00;FS=0.000;HaplotypeScore=0.4317;InbreedingCoeff=-0.0190;MLEAC=1;MLEAF=0.010;MQ=58.98;MQ0=0;MQRankSum=0.719;QD=17.09;ReadPosRankSum=-2.664;SNPEFF_AMINO_ACID_CHANGE=R67Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_865535_865716;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 865694 rs9988179 C T 1322.83 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-6.966;DB;DP=570;Dels=0.00;FS=4.942;HaplotypeScore=0.3866;InbreedingCoeff=-0.0906;MLEAC=8;MLEAF=0.080;MQ=59.05;MQ0=0;MQRankSum=0.264;QD=11.92;ReadPosRankSum=-0.281;SNPEFF_AMINO_ACID_CHANGE=H78Y;SNPEFF_CODON_CHANGE=Cac/Tac;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_865535_865716;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 866422 rs139210662 C T 438.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.574;DB;DP=3979;Dels=0.00;FS=0.914;HaplotypeScore=0.1297;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.54;MQ0=0;MQRankSum=3.015;QD=7.55;ReadPosRankSum=-1.870;SNPEFF_AMINO_ACID_CHANGE=V86;SNPEFF_CODON_CHANGE=gtC/gtT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_866419_866469;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 866511 rs60722469 C CCCCT 15676.17 Indel_FS AC=56;AF=0.560;AN=100;BaseQRankSum=-1.522;DB;DP=1260;FS=441.806;HaplotypeScore=7.6647;InbreedingCoeff=0.0194;MLEAC=56;MLEAF=0.560;MQ=57.18;MQ0=0;MQRankSum=-1.263;QD=17.10;RPA=3,4;RU=CCCT;ReadPosRankSum=-2.911;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;STR GT:AD:DP:GQ:PL 1/1:0,6:17:18:334,18,0 0/1:6,1:12:42:42,0,274 1/1 [...]
+1 871129 . C T 830.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.859;DP=5520;Dels=0.00;FS=1.888;HaplotypeScore=0.0611;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.58;MQ0=0;MQRankSum=1.724;QD=11.37;ReadPosRankSum=-4.488;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=7.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:106,0:106:99:0,319,3920 0/0:127,0:127:99:0,382 [...]
+1 871215 rs28419423 C G 7238.56 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=16.371;DB;DP=3815;Dels=0.00;FS=9.061;HaplotypeScore=0.8732;InbreedingCoeff=-0.0870;MLEAC=8;MLEAF=0.080;MQ=59.54;MQ0=0;MQRankSum=-1.629;QD=14.45;ReadPosRankSum=-7.987;SNPEFF_AMINO_ACID_CHANGE=P123;SNPEFF_CODON_CHANGE=ccC/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_871152_871276;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 871229 rs149944086 G C 465.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.006;DB;DP=3174;Dels=0.00;FS=2.438;HaplotypeScore=0.8862;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.41;MQ0=0;MQRankSum=1.255;QD=13.29;ReadPosRankSum=0.621;SNPEFF_AMINO_ACID_CHANGE=R128P;SNPEFF_CODON_CHANGE=cGc/cCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_871152_871276;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 871239 rs147616064 C T 765.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.313;DB;DP=2598;Dels=0.00;FS=0.000;HaplotypeScore=0.8739;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.47;MQ0=0;MQRankSum=0.500;QD=13.66;ReadPosRankSum=-2.733;SNPEFF_AMINO_ACID_CHANGE=F131;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_871152_871276;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 871269 . A C 174.48 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=-4.684;DP=701;Dels=0.00;FS=4.083;HaplotypeScore=0.6184;InbreedingCoeff=-0.1097;MLEAC=6;MLEAF=0.060;MQ=59.29;MQ0=0;MQRankSum=0.486;QD=1.03;ReadPosRankSum=-1.798;SNPEFF_AMINO_ACID_CHANGE=R141;SNPEFF_CODON_CHANGE=cgA/cgC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_871152_871276;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000342066 [...]
+1 874665 rs74047413 G A 286.03 PASS AC=3;AF=0.031;AN=98;BaseQRankSum=-4.381;DB;DP=423;Dels=0.00;FS=0.000;HaplotypeScore=0.2324;InbreedingCoeff=-0.0476;MLEAC=3;MLEAF=0.031;MQ=58.60;MQ0=0;MQRankSum=0.197;QD=9.86;ReadPosRankSum=-0.087;SNPEFF_AMINO_ACID_CHANGE=L177;SNPEFF_CODON_CHANGE=ctG/ctA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_874655_874840;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 874816 . C CT 155.15 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.690;DP=1569;FS=2.369;HaplotypeScore=10.3381;InbreedingCoeff=-0.0109;MLEAC=1;MLEAF=0.010;MQ=56.17;MQ0=0;MQRankSum=-0.174;QD=6.75;ReadPosRankSum=0.958;SNPEFF_EFFECT=FRAME_SHIFT;SNPEFF_EXON_ID=exon_1_874655_874840;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000342066 GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,970 0/0:18,0:18:53:0,53,690 0/0:24,0:2 [...]
+1 874864 rs141512630 CT C 724.43 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=2.383;DB;DP=824;FS=6.340;HaplotypeScore=8.7541;InbreedingCoeff=-0.0758;MLEAC=6;MLEAF=0.060;MQ=54.92;MQ0=0;MQRankSum=-0.931;QD=4.24;ReadPosRankSum=-3.208;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044 GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,510 0/0:11,0:11:33:0,33,452 0/0:17,0:17:51:0,51,726 0/ [...]
+1 874878 . T C 79.06 VQSRTrancheSNP99.30to99.50 AC=11;AF=0.110;AN=100;BaseQRankSum=-8.603;DP=655;Dels=0.00;FS=95.933;HaplotypeScore=0.5290;InbreedingCoeff=-0.1283;MLEAC=8;MLEAF=0.080;MQ=55.06;MQ0=0;MQRankSum=4.367;QD=0.52;ReadPosRankSum=-3.160;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=-1.815e+00;culprit=FS GT:AD:DP:GQ:PL 0/1:8,2:10:23:23,0,247 0/0 [...]
+1 876499 rs4372192 A G 10242.08 PASS AC=90;AF=0.938;AN=96;BaseQRankSum=3.543;DB;DP=321;Dels=0.00;FS=2.156;HaplotypeScore=0.2158;InbreedingCoeff=0.1473;MLEAC=91;MLEAF=0.948;MQ=58.03;MQ0=0;MQRankSum=2.219;QD=32.72;ReadPosRankSum=-0.183;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=4.16;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,4:4:9:109,9,0 1/1:0,9:9:24:294,24,0 [...]
+1 877782 rs79037098 C G 63.89 PASS AC=5;AF=0.071;AN=70;BaseQRankSum=-1.733;DB;DP=80;Dels=0.00;FS=2.644;HaplotypeScore=0.0838;InbreedingCoeff=-0.1972;MLEAC=6;MLEAF=0.086;MQ=57.68;MQ0=0;MQRankSum=-0.559;QD=4.56;ReadPosRankSum=-2.077;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=3.07;culprit=InbreedingCoeff GT:AD:DP:GQ:PL ./. 0/0:2,0:2:6:0,6,61 0/0:2,0:2 [...]
+1 877831 rs6672356 T C 3102.44 PASS AC=68;AF=1.00;AN=68;DB;DP=94;Dels=0.00;FS=0.000;HaplotypeScore=0.0284;InbreedingCoeff=-0.1003;MLEAC=68;MLEAF=1.00;MQ=58.69;MQ0=0;QD=33.00;SNPEFF_AMINO_ACID_CHANGE=W343R;SNPEFF_CODON_CHANGE=Tgg/Cgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877790_877868;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=1.94;culprit=MQ GT:AD:DP:GQ: [...]
+1 878296 rs72902601 C G 55.37 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-0.120;DB;DP=230;Dels=0.00;FS=2.395;HaplotypeScore=0.1272;InbreedingCoeff=-0.0578;MLEAC=1;MLEAF=0.010;MQ=58.94;MQ0=1;MQRankSum=0.978;QD=13.84;ReadPosRankSum=0.647;SNPEFF_AMINO_ACID_CHANGE=P474;SNPEFF_CODON_CHANGE=ccC/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877939_878438;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 878314 rs142558220 G C 186.97 PASS AC=4;AF=0.042;AN=96;BaseQRankSum=1.858;DB;DP=216;Dels=0.00;FS=17.207;HaplotypeScore=0.2218;InbreedingCoeff=-0.0963;MLEAC=4;MLEAF=0.042;MQ=58.83;MQ0=1;MQRankSum=1.218;QD=10.39;ReadPosRankSum=-0.676;SNPEFF_AMINO_ACID_CHANGE=G480;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877939_878438;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 878325 rs114478480 C T 83.06 PASS AC=3;AF=0.031;AN=96;BaseQRankSum=-1.893;DB;DP=231;Dels=0.00;FS=4.104;HaplotypeScore=0.1668;InbreedingCoeff=-0.0829;MLEAC=3;MLEAF=0.031;MQ=58.89;MQ0=1;MQRankSum=-0.574;QD=4.15;ReadPosRankSum=-0.163;SNPEFF_AMINO_ACID_CHANGE=P484L;SNPEFF_CODON_CHANGE=cCc/cTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_877939_878438;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 878474 rs183873661 C T 121.32 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.830;DB;DP=748;Dels=0.00;FS=1.693;HaplotypeScore=0.3639;InbreedingCoeff=-0.0159;MLEAC=1;MLEAF=0.010;MQ=58.79;MQ0=0;MQRankSum=0.174;QD=7.58;ReadPosRankSum=-0.713;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=5.77;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:54:0,54,635 0/0:20,0:20:57:0,5 [...]
+1 878744 rs138897766 G C 89.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.438;DB;DP=2067;Dels=0.00;FS=3.836;HaplotypeScore=0.4141;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.03;MQ0=0;MQRankSum=-0.098;QD=4.05;ReadPosRankSum=-0.621;SNPEFF_AMINO_ACID_CHANGE=G559A;SNPEFF_CODON_CHANGE=gGa/gCa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_878633_878757;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 878745 rs72902602 A C 100.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.454;DB;DP=1926;Dels=0.00;FS=3.888;HaplotypeScore=0.4593;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.01;MQ0=0;MQRankSum=0.858;QD=7.16;ReadPosRankSum=-0.443;SNPEFF_AMINO_ACID_CHANGE=G559;SNPEFF_CODON_CHANGE=ggA/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_878633_878757;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 878784 rs142929357 C G 270.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.915;DB;DP=1593;Dels=0.00;FS=1.545;HaplotypeScore=0.2502;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.73;MQ0=0;MQRankSum=0.339;QD=10.01;ReadPosRankSum=-2.756;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=6.04;culprit=MQ GT:AD:DP:GQ:PL 0/0:16,0:16:48:0,48,520 0/0:48,0:48:99:0, [...]
+1 879276 rs115454328 A G 151.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.178;DB;DP=2740;Dels=0.00;FS=3.247;HaplotypeScore=0.1855;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.08;MQ0=0;MQRankSum=0.941;QD=6.30;ReadPosRankSum=-1.171;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=6.84;culprit=QD GT:AD:DP:GQ:PL 0/0:44,0:44:99:0,132,1543 0/0:60,0:60:99: [...]
+1 879317 rs7523549 C T 4951.54 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-1.693;DB;DP=1892;Dels=0.00;FS=1.332;HaplotypeScore=0.2180;InbreedingCoeff=0.1848;MLEAC=8;MLEAF=0.080;MQ=58.70;MQ0=0;MQRankSum=0.898;QD=16.78;ReadPosRankSum=-3.262;SNPEFF_AMINO_ACID_CHANGE=Y610;SNPEFF_CODON_CHANGE=taC/taT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_879288_879955;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 879481 rs113383096 G C 504.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.767;DB;DP=3723;Dels=0.00;FS=2.965;HaplotypeScore=1.1122;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.21;MQ0=0;MQRankSum=0.926;QD=11.46;ReadPosRankSum=-2.192;SNPEFF_AMINO_ACID_CHANGE=G665A;SNPEFF_CODON_CHANGE=gGg/gCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_879288_879955;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 879482 rs149880798 G C 718.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.504;DB;DP=3666;Dels=0.00;FS=0.000;HaplotypeScore=1.0927;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.21;MQ0=0;MQRankSum=2.840;QD=10.88;ReadPosRankSum=-2.568;SNPEFF_AMINO_ACID_CHANGE=G665;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_879288_879955;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 879576 rs115979567 C T 185.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.148;DB;DP=1276;Dels=0.00;FS=1.725;HaplotypeScore=0.7692;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.90;MQ0=0;MQRankSum=1.288;QD=9.26;ReadPosRankSum=1.063;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=6.38;culprit=MQ GT:AD:DP:GQ:PL 0/0:23,0:23:69:0,69,851 0/0:34,0:34:84:0,8 [...]
+1 880390 rs3748593 C A 4237.18 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=-10.508;DB;DP=2405;Dels=0.00;FS=0.416;HaplotypeScore=0.2833;InbreedingCoeff=0.2319;MLEAC=7;MLEAF=0.070;MQ=59.37;MQ0=0;MQRankSum=0.217;QD=14.46;ReadPosRankSum=-0.126;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000496938;VQSLOD=6.83;culprit=FS GT:AD:DP:GQ:PL 0/0:44,0:44:99:0,132,1590 0/0:33,0:33:99: [...]
+1 881602 rs148962722 C T 978.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.505;DB;DP=2402;Dels=0.00;FS=0.603;HaplotypeScore=0.5423;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.26;MQ0=1;MQRankSum=1.118;QD=13.04;ReadPosRankSum=-1.738;SNPEFF_AMINO_ACID_CHANGE=R623H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_881553_881666;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 881627 rs2272757 G A 23520.38 PASS AC=51;AF=0.510;AN=100;BaseQRankSum=-4.753;DB;DP=1519;Dels=0.00;FS=5.729;HaplotypeScore=0.7095;InbreedingCoeff=0.3997;MLEAC=51;MLEAF=0.510;MQ=58.10;MQ0=1;MQRankSum=0.712;QD=25.93;ReadPosRankSum=0.192;SNPEFF_AMINO_ACID_CHANGE=L615;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_881553_881666;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 881687 . AG A 2168.07 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.090;DP=1778;FS=66.380;HaplotypeScore=12.4080;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=58.26;MQ0=0;MQRankSum=3.167;QD=14.26;RPA=3,2;RU=G;ReadPosRankSum=-1.383;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;STR GT:AD:DP:GQ:PL 0/0:35,0:35:99:0,105,1424 0/0:23,0:23:69:0,69,706 0/0:26,0:26:78:0,78, [...]
+1 881734 rs74045012 T C 2215.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=4.677;DB;DP=2256;Dels=0.00;FS=14.813;HaplotypeScore=0.7323;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=57.33;MQ0=0;MQRankSum=2.661;QD=12.38;ReadPosRankSum=-5.774;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=3.56;culprit=FS GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,135,1586 0/0:36,0:36:99:0,10 [...]
+1 881740 . G T 412.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.131;DP=2368;Dels=0.00;FS=7.786;HaplotypeScore=0.8197;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.22;MQ0=0;MQRankSum=1.662;QD=15.27;ReadPosRankSum=1.950;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=2.84;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:50,0:50:99:0,150,1890 0/0:38,0:38:99:0,114, [...]
+1 881876 . A C 50.32 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=100;BaseQRankSum=-7.198;DP=1572;Dels=0.00;FS=120.673;HaplotypeScore=0.2562;InbreedingCoeff=-0.0218;MLEAC=2;MLEAF=0.020;MQ=49.50;MQ0=10;MQRankSum=-0.486;QD=1.26;ReadPosRankSum=-5.281;SNPEFF_AMINO_ACID_CHANGE=V570G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_881782_881925;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MOD [...]
+1 881918 rs35471880 G A 1686.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=1.860;DB;DP=2149;Dels=0.00;FS=10.576;HaplotypeScore=0.4374;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=55.41;MQ0=6;MQRankSum=4.809;QD=12.59;ReadPosRankSum=0.615;SNPEFF_AMINO_ACID_CHANGE=S556L;SNPEFF_CODON_CHANGE=tCg/tTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_881782_881925;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 883625 rs4970378 A G 13489.44 PASS AC=98;AF=1.00;AN=98;DB;DP=375;Dels=0.00;FS=0.000;HaplotypeScore=0.1752;InbreedingCoeff=-0.0230;MLEAC=98;MLEAF=1.00;MQ=56.66;MQ0=0;QD=35.97;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SAMD11;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000342066;VQSLOD=3.02;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,10:10:27:345,27,0 1/1:0,9:9:27:340,27,0 1/1:0,15:15:36:472,36,0 1/1:0,4:4:12:148,12,0 1/1:0,4:4:12: [...]
+1 886477 rs74045017 G A 207.51 PASS AC=3;AF=0.031;AN=98;BaseQRankSum=-2.158;DB;DP=247;Dels=0.00;FS=2.269;HaplotypeScore=0.1311;InbreedingCoeff=-0.0775;MLEAC=3;MLEAF=0.031;MQ=57.97;MQ0=0;MQRankSum=1.760;QD=13.83;ReadPosRankSum=0.226;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000487214;VQSLOD=4.81;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,79 0/0:5,0:5:15 [...]
+1 887471 rs114187206 G A 823.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.675;DB;DP=2519;Dels=0.00;FS=10.809;HaplotypeScore=0.0345;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.63;MQ0=0;MQRankSum=-0.222;QD=10.98;ReadPosRankSum=-1.139;SNPEFF_AMINO_ACID_CHANGE=L414;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_887380_887519;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 887537 rs74045020 C T 1588.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=4.351;DB;DP=1489;Dels=0.00;FS=5.624;HaplotypeScore=0.3670;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.25;MQ0=0;MQRankSum=1.300;QD=13.02;ReadPosRankSum=-2.245;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000487214;VQSLOD=7.74;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:38,0:38:99:0,105,1134 0/0:28,0 [...]
+1 887560 rs3748595 A C 45200.48 PASS AC=94;AF=0.940;AN=100;BaseQRankSum=9.552;DB;DP=1276;Dels=0.00;FS=5.173;HaplotypeScore=0.3777;InbreedingCoeff=-0.0639;MLEAC=94;MLEAF=0.940;MQ=59.39;MQ0=0;MQRankSum=-0.406;QD=35.42;ReadPosRankSum=2.078;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000487214;VQSLOD=5.43;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:16,7:22:99:170,0,536 1 [...]
+1 887801 rs3828047 A G 74274.21 PASS AC=93;AF=0.930;AN=100;BaseQRankSum=8.491;DB;DP=2142;Dels=0.00;FS=1.347;HaplotypeScore=0.4702;InbreedingCoeff=0.2319;MLEAC=93;MLEAF=0.930;MQ=54.98;MQ0=2;MQRankSum=-2.839;QD=34.95;ReadPosRankSum=1.490;SNPEFF_AMINO_ACID_CHANGE=T394;SNPEFF_CODON_CHANGE=acT/acC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_887792_887980;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 888639 rs3748596 T C 71471.47 VQSRTrancheSNP98.60to98.80 AC=94;AF=0.940;AN=100;BaseQRankSum=2.803;DB;DP=2048;Dels=0.00;FS=12.518;HaplotypeScore=0.2140;InbreedingCoeff=-0.0638;MLEAC=94;MLEAF=0.940;MQ=53.97;MQ0=2;MQRankSum=-3.618;QD=34.90;ReadPosRankSum=3.412;SNPEFF_AMINO_ACID_CHANGE=E306;SNPEFF_CODON_CHANGE=gaA/gaG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_888555_888668;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPA [...]
+1 888659 rs3748597 T C 56082.48 VQSRTrancheSNP98.60to98.80 AC=94;AF=0.940;AN=100;BaseQRankSum=8.813;DB;DP=1626;Dels=0.00;FS=9.209;HaplotypeScore=0.1726;InbreedingCoeff=-0.0640;MLEAC=94;MLEAF=0.940;MQ=54.84;MQ0=2;MQRankSum=-4.854;QD=34.49;ReadPosRankSum=3.067;SNPEFF_AMINO_ACID_CHANGE=I300V;SNPEFF_CODON_CHANGE=Atc/Gtc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_888555_888668;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEF [...]
+1 889131 rs3828048 A G 2073.61 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=6.344;DB;DP=996;Dels=0.00;FS=10.927;HaplotypeScore=0.5391;InbreedingCoeff=-0.0877;MLEAC=8;MLEAF=0.080;MQ=58.41;MQ0=0;MQRankSum=0.173;QD=12.06;ReadPosRankSum=-2.857;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=4.36;culprit=MQ GT:AD:DP:GQ:PL 0/0:17,0:17:51:0,51,592 0/0:24,0:24:72:0,7 [...]
+1 889158 rs56262069 G C 50255.20 PASS AC=93;AF=0.930;AN=100;BaseQRankSum=7.949;DB;DP=1539;Dels=0.00;FS=2.076;HaplotypeScore=0.8621;InbreedingCoeff=-0.0753;MLEAC=93;MLEAF=0.930;MQ=58.36;MQ0=0;MQRankSum=-0.051;QD=32.65;ReadPosRankSum=3.538;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=3.27;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:16,13:28:99:386,0,408 [...]
+1 889159 rs13302945 A C 51764.20 PASS AC=93;AF=0.930;AN=100;BaseQRankSum=7.263;DB;DP=1576;Dels=0.00;FS=1.447;HaplotypeScore=0.8933;InbreedingCoeff=-0.0753;MLEAC=93;MLEAF=0.930;MQ=58.40;MQ0=0;MQRankSum=-0.605;QD=32.85;ReadPosRankSum=4.262;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=3.06;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:16,13:28:99:389,0,408 [...]
+1 889238 rs3828049 G A 2010.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=3.547;DB;DP=2429;Dels=0.00;FS=3.924;HaplotypeScore=0.3188;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=59.41;MQ0=0;MQRankSum=0.790;QD=12.89;ReadPosRankSum=-0.826;SNPEFF_AMINO_ACID_CHANGE=A271V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_889162_889272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 889286 rs138652400 G A 2265.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-8.036;DB;DP=2910;Dels=0.00;FS=3.765;HaplotypeScore=0.2592;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.11;MQ0=0;MQRankSum=2.692;QD=12.18;ReadPosRankSum=-1.550;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=7.31;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:66,0:66:99:0,199,2492 0/0:59 [...]
+1 889450 rs58931985 C A 579.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.360;DB;DP=3289;Dels=0.00;FS=9.745;HaplotypeScore=0.2307;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.81;MQ0=0;MQRankSum=1.123;QD=15.65;ReadPosRankSum=-2.476;SNPEFF_AMINO_ACID_CHANGE=P237;SNPEFF_CODON_CHANGE=ccG/ccT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_889384_889462;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 889472 rs137873233 G C 1059.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.928;DB;DP=2794;Dels=0.00;FS=12.641;HaplotypeScore=0.1752;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.73;MQ0=0;MQRankSum=1.123;QD=15.81;ReadPosRankSum=-3.313;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=5.87;culprit=FS GT:AD:DP:GQ:PL 0/0:61,0:61:99:0,184,2150 0/0:51,0:51:9 [...]
+1 889513 rs191707067 G A 364.23 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.931;DB;DP=1333;Dels=0.00;FS=6.151;HaplotypeScore=0.3067;InbreedingCoeff=-0.0122;MLEAC=1;MLEAF=0.010;MQ=59.61;MQ0=0;MQRankSum=1.402;QD=13.01;ReadPosRankSum=-2.515;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=7.02;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:29,0:29:87:0,87,1096 0/ [...]
+1 891277 rs77608078 C T 763.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.689;DB;DP=1411;Dels=0.00;FS=0.000;HaplotypeScore=0.3319;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.15;MQ0=0;MQRankSum=2.865;QD=19.08;ReadPosRankSum=-1.149;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=5.59;culprit=FS GT:AD:DP:GQ:PL 0/0:26,0:26:78:0,78,943 0/0:32,0:32:96:0, [...]
+1 891401 rs148943976 G A 862.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.388;DB;DP=4801;Dels=0.00;FS=0.000;HaplotypeScore=0.0341;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.26;MQ0=0;MQRankSum=2.531;QD=11.50;ReadPosRankSum=-4.238;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=7.99;culprit=FS GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4246 0/0:98,0:98:9 [...]
+1 892231 . T C 296.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.371;DP=4701;Dels=0.00;FS=2.097;HaplotypeScore=0.3644;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.64;MQ0=0;MQRankSum=0.038;QD=10.21;ReadPosRankSum=-1.533;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=6.50;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:103,0:103:99:0,310,3775 0/0:91,0:91:9 [...]
+1 892460 rs41285802 G C 11897.54 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=6.973;DB;DP=6269;Dels=0.00;FS=4.261;HaplotypeScore=0.3955;InbreedingCoeff=0.1848;MLEAC=8;MLEAF=0.080;MQ=59.60;MQ0=0;MQRankSum=0.972;QD=20.66;ReadPosRankSum=-2.214;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=6.63;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4696 [...]
+1 892471 rs41285804 G A 641.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.236;DB;DP=6288;Dels=0.00;FS=7.367;HaplotypeScore=0.2694;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.60;MQ0=0;MQRankSum=1.314;QD=8.91;ReadPosRankSum=-1.135;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469563;VQSLOD=7.88;culprit=QD GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4363 0/0:127,0:127: [...]
+1 892569 rs41285806 C T 877.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.567;DB;DP=5705;Dels=0.00;FS=4.958;HaplotypeScore=0.0968;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.08;MQ0=0;MQRankSum=1.331;QD=11.70;ReadPosRankSum=-4.936;SNPEFF_AMINO_ACID_CHANGE=Q88;SNPEFF_CODON_CHANGE=caG/caA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_892479_892653;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 894565 . G A 187.21 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.294;DP=938;Dels=0.00;FS=2.962;HaplotypeScore=0.6090;InbreedingCoeff=-0.0118;MLEAC=1;MLEAF=0.010;MQ=57.54;MQ0=0;MQRankSum=0.069;QD=9.36;ReadPosRankSum=-1.214;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=2.73;culprit=MQ GT:AD:DP:GQ:PL 0/0:14,0:14:39:0,39,483 0/0:13,0:13:39:0,39,501 0/0:16,0:16 [...]
+1 894573 rs13303010 G A 14374.07 PASS AC=64;AF=0.640;AN=100;BaseQRankSum=3.664;DB;DP=877;Dels=0.00;FS=6.422;HaplotypeScore=0.4577;InbreedingCoeff=0.4801;MLEAC=64;MLEAF=0.640;MQ=57.55;MQ0=0;MQRankSum=0.803;QD=27.02;ReadPosRankSum=0.219;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000327044;VQSLOD=4.28;culprit=MQ GT:AD:DP:GQ:PL 0/1:1,9:10:7:298,0,7 1/1:0,11:11:33:416,33,0 [...]
+1 894613 . G C 127.40 VQSRTrancheSNP99.00to99.30 AC=8;AF=0.085;AN=94;BaseQRankSum=-3.199;DP=222;Dels=0.00;FS=20.789;HaplotypeScore=0.4203;InbreedingCoeff=-0.0425;MLEAC=7;MLEAF=0.074;MQ=57.66;MQ0=0;MQRankSum=0.321;QD=2.12;ReadPosRankSum=-0.967;SNPEFF_AMINO_ACID_CHANGE=A3G;SNPEFF_CODON_CHANGE=gCt/gGt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_894595_894670;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODERATE; [...]
+1 894646 . A T 166.59 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.726;DP=435;Dels=0.00;FS=0.000;HaplotypeScore=0.2778;InbreedingCoeff=-0.0307;MLEAC=1;MLEAF=0.010;MQ=58.24;MQ0=0;MQRankSum=0.581;QD=11.90;ReadPosRankSum=-0.917;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=NOC2L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000487214;VQSLOD=4.76;culprit=FS GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,207 0/0:7,0:7:21:0,21,253 0/0:9,0:9:2 [...]
+1 896950 rs74045023 C A 2043.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=3.857;DB;DP=2273;Dels=0.00;FS=1.018;HaplotypeScore=0.1320;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.41;MQ0=0;MQRankSum=0.479;QD=13.01;ReadPosRankSum=-1.514;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;VQSLOD=7.99;culprit=FS GT:AD:DP:GQ:PL 0/0:35,0:35:99:0,105,1170 0/0:44,0:44:99:0,132,155 [...]
+1 897325 rs4970441 G C 129103.21 PASS AC=87;AF=0.870;AN=100;BaseQRankSum=9.548;DB;DP=4017;Dels=0.00;FS=5.192;HaplotypeScore=0.8007;InbreedingCoeff=0.0262;MLEAC=87;MLEAF=0.870;MQ=59.50;MQ0=0;MQRankSum=-1.404;QD=32.63;ReadPosRankSum=0.634;SNPEFF_AMINO_ACID_CHANGE=A203;SNPEFF_CODON_CHANGE=gcG/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_897206_897427;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 897337 rs115985665 C T 656.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.457;DB;DP=3980;Dels=0.00;FS=1.738;HaplotypeScore=0.9428;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.48;MQ0=0;MQRankSum=1.127;QD=12.87;ReadPosRankSum=-0.713;SNPEFF_AMINO_ACID_CHANGE=S207;SNPEFF_CODON_CHANGE=agC/agT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_897206_897427;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 897475 . AGTCTTT A 360.41 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.561;DP=342;FS=25.032;HaplotypeScore=3.5490;InbreedingCoeff=-0.0657;MLEAC=1;MLEAF=0.010;MQ=58.87;MQ0=0;MQRankSum=-3.796;QD=32.76;RPA=2,1;RU=GTCTTT;ReadPosRankSum=0.089;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;STR GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,518 0/0:6,0:6:18:0,18,518 0/0:1,0:1:3:0,3,86 0/0: [...]
+1 897730 rs7549631 C T 4170.18 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=-10.740;DB;DP=2303;Dels=0.00;FS=7.022;HaplotypeScore=2.9911;InbreedingCoeff=0.2320;MLEAC=7;MLEAF=0.070;MQ=59.28;MQ0=0;MQRankSum=0.522;QD=14.18;ReadPosRankSum=1.158;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;VQSLOD=3.00;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:37,0:37:99:0,105,1280 0/0:38,0:38:9 [...]
+1 897738 rs6696971 C T 6080.89 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-12.884;DB;DP=2318;Dels=0.00;FS=0.000;HaplotypeScore=2.7649;InbreedingCoeff=-0.1111;MLEAC=10;MLEAF=0.100;MQ=59.36;MQ0=0;MQRankSum=0.982;QD=12.67;ReadPosRankSum=-1.164;SNPEFF_AMINO_ACID_CHANGE=L115;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_897735_897851;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 897879 rs79008338 C T 1384.64 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-9.582;DB;DP=976;Dels=0.00;FS=14.068;HaplotypeScore=0.4332;InbreedingCoeff=-0.0665;MLEAC=6;MLEAF=0.060;MQ=59.14;MQ0=0;MQRankSum=0.349;QD=10.18;ReadPosRankSum=-3.450;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=5.27;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:42:0,42,516 0/0:13,0:13:39:0,39,4 [...]
+1 898119 rs79110607 C T 1074.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.682;DB;DP=1495;Dels=0.00;FS=0.000;HaplotypeScore=0.4314;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.08;MQ0=0;MQRankSum=1.532;QD=14.32;ReadPosRankSum=-2.202;SNPEFF_AMINO_ACID_CHANGE=R11;SNPEFF_CODON_CHANGE=cgC/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898084_898297;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 898323 rs6605071 T C 17653.25 PASS AC=93;AF=0.930;AN=100;BaseQRankSum=3.580;DB;DP=505;Dels=0.00;FS=1.868;HaplotypeScore=0.4755;InbreedingCoeff=0.1259;MLEAC=94;MLEAF=0.940;MQ=58.73;MQ0=0;MQRankSum=1.621;QD=35.17;ReadPosRankSum=1.496;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=3.83;culprit=MQ GT:AD:DP:GQ:PL 0/1:2,5:7:49:148,0,49 1/1:0,12:12:36:453,36,0 1 [...]
+1 898466 rs191140912 C T 171.28 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.481;DB;DP=687;Dels=0.00;FS=0.000;HaplotypeScore=0.3867;InbreedingCoeff=-0.0155;MLEAC=1;MLEAF=0.010;MQ=59.27;MQ0=0;MQRankSum=0.400;QD=10.08;ReadPosRankSum=0.449;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=7.92;culprit=FS GT:AD:DP:GQ:PL 0/0:11,0:11:33:0,33,421 0/0:7,0:7:21:0,21,248 0 [...]
+1 898467 rs41285808 C T 569.47 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-0.569;DB;DP=696;Dels=0.00;FS=7.160;HaplotypeScore=0.3633;InbreedingCoeff=0.2490;MLEAC=5;MLEAF=0.050;MQ=59.21;MQ0=0;MQRankSum=1.587;QD=11.86;ReadPosRankSum=0.640;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=5.29;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1:5,6:11:99:197,0,147 0/0:8,0:8:24:0,24, [...]
+1 898603 . C G 273.63 VQSRTrancheSNP99.50to99.90 AC=22;AF=0.220;AN=100;BaseQRankSum=-9.185;DP=665;Dels=0.00;FS=221.601;HaplotypeScore=1.0766;InbreedingCoeff=-0.2547;MLEAC=18;MLEAF=0.180;MQ=57.61;MQ0=0;MQRankSum=0.626;QD=1.13;ReadPosRankSum=-9.808;SNPEFF_AMINO_ACID_CHANGE=A109G;SNPEFF_CODON_CHANGE=gCg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898489_898633;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODERATE [...]
+1 898606 . T G 49.47 VQSRTrancheSNP99.50to99.90 AC=7;AF=0.070;AN=100;BaseQRankSum=-8.782;DP=638;Dels=0.00;FS=101.186;HaplotypeScore=1.2273;InbreedingCoeff=-0.0936;MLEAC=5;MLEAF=0.050;MQ=58.28;MQ0=0;MQRankSum=0.112;QD=0.85;ReadPosRankSum=-9.334;SNPEFF_AMINO_ACID_CHANGE=V110G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898489_898633;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODERATE;SN [...]
+1 898613 rs61746776 C T 95.25 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.379;DB;DP=656;Dels=0.00;FS=4.282;HaplotypeScore=0.7603;InbreedingCoeff=-0.0146;MLEAC=1;MLEAF=0.010;MQ=58.90;MQ0=0;MQRankSum=0.494;QD=10.58;ReadPosRankSum=-1.113;SNPEFF_AMINO_ACID_CHANGE=N112;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898489_898633;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 898852 rs117269332 C T 611.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.664;DB;DP=1798;Dels=0.00;FS=5.676;HaplotypeScore=0.1257;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.28;MQ0=0;MQRankSum=3.408;QD=14.22;ReadPosRankSum=-3.839;SNPEFF_AMINO_ACID_CHANGE=A164;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_898717_898884;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 898914 rs114880602 G C 317.21 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.904;DB;DP=1250;Dels=0.00;FS=1.574;HaplotypeScore=0.2733;InbreedingCoeff=-0.0113;MLEAC=1;MLEAF=0.010;MQ=58.75;MQ0=0;MQRankSum=1.664;QD=13.22;ReadPosRankSum=-0.195;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=6.42;culprit=MQ GT:AD:DP:GQ:PL 0/0:20,0:20:60:0,60,723 0/0:23,0:23:69:0,69,85 [...]
+1 899928 rs6677386 G C 1232.27 VQSRTrancheSNP98.80to98.90 AC=57;AF=0.838;AN=68;BaseQRankSum=-1.435;DB;DP=68;Dels=0.00;FS=0.000;HaplotypeScore=0.2032;InbreedingCoeff=0.2608;MLEAC=50;MLEAF=0.735;MQ=43.71;MQ0=0;MQRankSum=-2.804;QD=22.00;ReadPosRankSum=1.097;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.210;culprit=MQ GT:AD:DP:GQ:PL ./. 1/1:0,1:1:3:33,3,0 1/ [...]
+1 899937 rs143296006 G T 918.93 VQSRTrancheSNP98.90to99.00 AC=47;AF=0.758;AN=62;BaseQRankSum=-1.521;DB;DP=47;Dels=0.00;FS=0.000;HaplotypeScore=0.3418;InbreedingCoeff=0.3113;MLEAC=47;MLEAF=0.758;MQ=46.89;MQ0=0;MQRankSum=-2.129;QD=27.03;ReadPosRankSum=3.477;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.203;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,27 1/1:0 [...]
+1 899938 rs147467971 G C 994.56 VQSRTrancheSNP98.90to99.00 AC=47;AF=0.758;AN=62;BaseQRankSum=0.617;DB;DP=48;Dels=0.00;FS=0.000;HaplotypeScore=0.2794;InbreedingCoeff=0.3163;MLEAC=47;MLEAF=0.758;MQ=46.89;MQ0=0;MQRankSum=-2.109;QD=28.42;ReadPosRankSum=3.344;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.175;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,36 1/1:0, [...]
+1 899942 rs71509448 G A 1074.04 VQSRTrancheSNP98.80to98.90 AC=51;AF=0.773;AN=66;BaseQRankSum=0.939;DB;DP=50;Dels=0.00;FS=0.000;HaplotypeScore=0.2033;InbreedingCoeff=0.1917;MLEAC=50;MLEAF=0.758;MQ=45.23;MQ0=0;MQRankSum=-1.565;QD=27.54;ReadPosRankSum=2.967;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.239;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,38 1/1:0, [...]
+1 899949 rs144694530 C T 175.27 VQSRTrancheSNP98.80to98.90 AC=10;AF=0.152;AN=66;BaseQRankSum=-3.029;DB;DP=54;Dels=0.00;FS=3.117;HaplotypeScore=0.3766;InbreedingCoeff=0.2800;MLEAC=9;MLEAF=0.136;MQ=44.25;MQ0=0;MQRankSum=2.310;QD=21.91;ReadPosRankSum=-2.697;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.291;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,40 0/0:3, [...]
+1 899960 . T C 52.99 VQSRTrancheSNP98.90to99.00 AC=6;AF=0.111;AN=54;BaseQRankSum=-2.225;DP=41;Dels=0.00;FS=0.000;HaplotypeScore=0.2410;InbreedingCoeff=0.0143;MLEAC=6;MLEAF=0.111;MQ=46.23;MQ0=0;MQRankSum=-1.492;QD=7.57;ReadPosRankSum=-0.514;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=0.177;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,38 0/0:2,0:2:6:0,6,61 0/ [...]
+1 900298 rs71628926 C G 161.47 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.988;DB;DP=513;Dels=0.00;FS=6.422;HaplotypeScore=0.4198;InbreedingCoeff=-0.0287;MLEAC=2;MLEAF=0.020;MQ=57.02;MQ0=0;MQRankSum=0.928;QD=10.76;ReadPosRankSum=0.395;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=3.32;culprit=MQ GT:AD:DP:GQ:PL 0/0:14,0:14:39:0,39,478 0/0:19,0:19:54:0,54,693 [...]
+1 900319 rs80351873 G A 2325.78 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-3.149;DB;DP=743;Dels=0.00;FS=12.818;HaplotypeScore=0.7728;InbreedingCoeff=-0.0900;MLEAC=8;MLEAF=0.080;MQ=57.30;MQ0=0;MQRankSum=1.723;QD=14.36;ReadPosRankSum=-0.558;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000463212;VQSLOD=4.11;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:20,0:20:57:0,57,693 0/0:25,0: [...]
+1 900397 rs111560052 C T 1077.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.621;DB;DP=2133;Dels=0.00;FS=6.242;HaplotypeScore=0.3667;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.38;MQ0=0;MQRankSum=1.853;QD=11.71;ReadPosRankSum=-2.552;SNPEFF_AMINO_ACID_CHANGE=N461;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 900427 rs115741058 G A 1296.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-6.326;DB;DP=3246;Dels=0.00;FS=9.839;HaplotypeScore=0.4884;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.46;MQ0=0;MQRankSum=2.823;QD=11.78;ReadPosRankSum=-0.507;SNPEFF_AMINO_ACID_CHANGE=E471;SNPEFF_CODON_CHANGE=gaG/gaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 900505 rs28705211 G C 5409.04 PASS AC=12;AF=0.120;AN=100;BaseQRankSum=1.477;DB;DP=1746;Dels=0.00;FS=0.000;HaplotypeScore=1.7312;InbreedingCoeff=0.2424;MLEAC=12;MLEAF=0.120;MQ=58.93;MQ0=0;MQRankSum=-1.383;QD=16.90;ReadPosRankSum=-2.250;SNPEFF_AMINO_ACID_CHANGE=V497;SNPEFF_CODON_CHANGE=gtG/gtC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 900557 . T C 450 VQSRTrancheSNP99.50to99.90 AC=18;AF=0.180;AN=100;BaseQRankSum=-10.340;DP=795;Dels=0.00;FS=174.326;HaplotypeScore=0.8661;InbreedingCoeff=-0.2301;MLEAC=17;MLEAF=0.170;MQ=57.67;MQ0=0;MQRankSum=-1.081;QD=1.81;ReadPosRankSum=0.678;SNPEFF_AMINO_ACID_CHANGE=S515P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODERATE;S [...]
+1 900560 rs188543688 A C 5889.86 VQSRTrancheSNP99.90to100.00 AC=42;AF=0.420;AN=100;BaseQRankSum=-14.853;DB;DP=1195;Dels=0.00;FS=671.452;HaplotypeScore=1.0796;InbreedingCoeff=-0.7377;MLEAC=43;MLEAF=0.430;MQ=57.06;MQ0=0;MQRankSum=-1.062;QD=5.48;ReadPosRankSum=-0.749;SNPEFF_AMINO_ACID_CHANGE=T516P;SNPEFF_CODON_CHANGE=Acc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_900343_901094;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPE [...]
+1 901919 . A C 75.68 VQSRTrancheSNP99.90to100.00 AC=9;AF=0.090;AN=100;BaseQRankSum=-11.755;DP=823;Dels=0.00;FS=637.319;HaplotypeScore=2.0002;InbreedingCoeff=-0.0995;MLEAC=6;MLEAF=0.060;MQ=59.06;MQ0=1;MQRankSum=-0.634;QD=0.49;ReadPosRankSum=-11.491;SNPEFF_AMINO_ACID_CHANGE=N3T;SNPEFF_CODON_CHANGE=aAc/aCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_901877_901994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE [...]
+1 901922 rs62639980 G A 492.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.416;DB;DP=1209;Dels=0.00;FS=2.971;HaplotypeScore=2.0709;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.99;MQ0=1;MQRankSum=0.498;QD=10.70;ReadPosRankSum=2.443;SNPEFF_AMINO_ACID_CHANGE=S4N;SNPEFF_CODON_CHANGE=aGc/aAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_901877_901994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 901923 rs149741186 C A 540.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.870;DB;DP=1246;Dels=0.00;FS=5.234;HaplotypeScore=2.1419;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.99;MQ0=1;MQRankSum=0.854;QD=11.49;ReadPosRankSum=2.199;SNPEFF_AMINO_ACID_CHANGE=S4R;SNPEFF_CODON_CHANGE=agC/agA;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_901877_901994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 902024 rs181910588 G A 177.78 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.925;DB;DP=366;Dels=0.00;FS=0.000;HaplotypeScore=0.4056;InbreedingCoeff=-0.0381;MLEAC=1;MLEAF=0.010;MQ=59.21;MQ0=0;MQRankSum=-0.015;QD=17.78;ReadPosRankSum=-2.279;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;VQSLOD=5.41;culprit=FS GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,303 0/0:9,0:9:27:0,27,332 0 [...]
+1 902025 rs186208904 C A,T 207.86 PASS AC=1,2;AF=0.010,0.020;AN=100;BaseQRankSum=2.579;DB;DP=347;Dels=0.00;FS=2.417;HaplotypeScore=0.2858;InbreedingCoeff=0.0268;MLEAC=1,1;MLEAF=0.010,0.010;MQ=59.17;MQ0=0;MQRankSum=0.418;QD=7.99;ReadPosRankSum=-2.442;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;VQSLOD=5.23;culprit=QD GT:AD:DP:GQ:PL 0/0:7,0,0:7:21:0,21,212,21,212, [...]
+1 902069 rs116147894 T C 700.79 PASS AC=6;AF=0.061;AN=98;BaseQRankSum=4.614;DB;DP=337;Dels=0.00;FS=0.945;HaplotypeScore=0.1625;InbreedingCoeff=0.0968;MLEAC=5;MLEAF=0.051;MQ=57.93;MQ0=0;MQRankSum=0.349;QD=19.47;ReadPosRankSum=-1.532;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=KLHL17;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000338591;VQSLOD=4.71;culprit=FS GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,193 0/0:5,0:5:15:0,15,193 0/0:6 [...]
+1 902108 rs62639981 C T 43.64 PASS AC=3;AF=0.033;AN=92;BaseQRankSum=1.610;DB;DP=196;Dels=0.00;FS=0.000;HaplotypeScore=0.1209;InbreedingCoeff=0.1451;MLEAC=2;MLEAF=0.022;MQ=58.31;MQ0=0;MQRankSum=-0.016;QD=8.73;ReadPosRankSum=-1.041;SNPEFF_AMINO_ACID_CHANGE=A36;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_902084_902183;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST000 [...]
+1 902128 rs28499371 C T 599.21 PASS AC=7;AF=0.083;AN=84;BaseQRankSum=-4.351;DB;DP=170;Dels=0.00;FS=0.000;HaplotypeScore=0.0826;InbreedingCoeff=-0.1304;MLEAC=7;MLEAF=0.083;MQ=58.43;MQ0=0;MQRankSum=0.128;QD=13.94;ReadPosRankSum=-0.563;SNPEFF_AMINO_ACID_CHANGE=A43V;SNPEFF_CODON_CHANGE=gCt/gTt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_902084_902183;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 906122 rs41285812 C T 410.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.729;DB;DP=3298;Dels=0.00;FS=9.974;HaplotypeScore=0.0200;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.28;MQ0=0;MQRankSum=0.295;QD=12.43;ReadPosRankSum=-2.496;SNPEFF_AMINO_ACID_CHANGE=H156;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_906066_906138;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 906272 rs28507236 A C 5776.82 PASS AC=22;AF=0.220;AN=100;BaseQRankSum=7.841;DB;DP=1005;Dels=0.00;FS=14.346;HaplotypeScore=0.8551;InbreedingCoeff=-0.1662;MLEAC=22;MLEAF=0.220;MQ=58.75;MQ0=0;MQRankSum=1.111;QD=12.61;ReadPosRankSum=-0.249;SNPEFF_AMINO_ACID_CHANGE=A166;SNPEFF_CODON_CHANGE=gcA/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_906259_906386;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 907622 rs59928984 G C 3990.79 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=2.432;DB;DP=1107;Dels=0.00;FS=0.385;HaplotypeScore=1.1346;InbreedingCoeff=-0.1238;MLEAC=11;MLEAF=0.110;MQ=58.72;MQ0=0;MQRankSum=0.498;QD=13.48;ReadPosRankSum=1.245;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf170;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341290;VQSLOD=2.80;culprit=MQ GT:AD:DP:GQ:PL 0/0:17,0:17:48:0,48,596 0/0:25,1:25:75:0,75 [...]
+1 907799 rs111909377 T C 153.70 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.056;DB;DP=326;Dels=0.00;FS=2.154;HaplotypeScore=0.2345;InbreedingCoeff=-0.0412;MLEAC=1;MLEAF=0.010;MQ=58.27;MQ0=0;MQRankSum=1.965;QD=11.82;ReadPosRankSum=-1.105;SNPEFF_AMINO_ACID_CHANGE=S333P;SNPEFF_CODON_CHANGE=Tcg/Ccg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_907668_907804;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 908275 rs145574509 G A 76.27 PASS AC=3;AF=0.032;AN=94;BaseQRankSum=-1.747;DB;DP=206;Dels=0.00;FS=0.000;HaplotypeScore=0.0978;InbreedingCoeff=0.1666;MLEAC=2;MLEAF=0.021;MQ=58.35;MQ0=0;MQRankSum=1.669;QD=12.71;ReadPosRankSum=1.415;SNPEFF_AMINO_ACID_CHANGE=G346D;SNPEFF_CODON_CHANGE=gGc/gAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_908241_908390;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 908322 . CGCA C 284.90 Indel_FS AC=12;AF=0.128;AN=94;BaseQRankSum=4.504;DP=203;FS=237.541;HaplotypeScore=3.7688;InbreedingCoeff=-0.2039;MLEAC=13;MLEAF=0.138;MQ=58.89;MQ0=0;MQRankSum=0.445;QD=4.75;ReadPosRankSum=-5.028;SNPEFF_AMINO_ACID_CHANGE=RT362P;SNPEFF_CODON_CHANGE=cgcacc/ccc;SNPEFF_EFFECT=CODON_CHANGE_PLUS_CODON_DELETION;SNPEFF_EXON_ID=exon_1_908241_908390;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 908323 rs61732689 G A,C 151.92 VQSRTrancheSNP99.50to99.90 AC=1,9;AF=0.011,0.096;AN=94;BaseQRankSum=1.165;DB;DP=199;Dels=0.04;FS=159.574;HaplotypeScore=0.5305;InbreedingCoeff=-0.0681;MLEAC=1,9;MLEAF=0.011,0.096;MQ=58.78;MQ0=0;MQRankSum=1.258;QD=3.62;ReadPosRankSum=-3.835;SNPEFF_AMINO_ACID_CHANGE=R362H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_908241_908390;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLE [...]
+1 908325 rs181207265 A C 226.31 VQSRTrancheSNP99.50to99.90 AC=13;AF=0.135;AN=96;BaseQRankSum=-3.162;DB;DP=222;Dels=0.03;FS=256.491;HaplotypeScore=0.5957;InbreedingCoeff=-0.2137;MLEAC=14;MLEAF=0.146;MQ=58.79;MQ0=0;MQRankSum=-0.253;QD=3.84;ReadPosRankSum=-4.790;SNPEFF_AMINO_ACID_CHANGE=T363P;SNPEFF_CODON_CHANGE=Acc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_908241_908390;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_I [...]
+1 908414 rs28504611 C T 1709.29 PASS AC=17;AF=0.173;AN=98;BaseQRankSum=2.882;DB;DP=420;Dels=0.00;FS=0.000;HaplotypeScore=0.1721;InbreedingCoeff=0.1705;MLEAC=17;MLEAF=0.173;MQ=59.03;MQ0=0;MQRankSum=-0.054;QD=13.57;ReadPosRankSum=0.145;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf170;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341290;VQSLOD=6.34;culprit=FS GT:AD:DP:GQ:PL 0/0:10,0:10:27:0,27,307 0/0:9,0:9:27:0,27,267 [...]
+1 908749 rs111919992 C T 392.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.015;DB;DP=1051;Dels=0.00;FS=0.000;HaplotypeScore=0.3382;InbreedingCoeff=-0.0106;MLEAC=1;MLEAF=0.010;MQ=59.40;MQ0=0;MQRankSum=0.124;QD=12.26;ReadPosRankSum=-2.440;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf170;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341290;VQSLOD=7.98;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:48:0,48,582 0/0:24,0:24:72:0,72, [...]
+1 909221 rs62639985 T C 1566.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=1.732;DB;DP=1587;Dels=0.00;FS=2.369;HaplotypeScore=2.5512;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=58.96;MQ0=0;MQRankSum=0.723;QD=15.66;ReadPosRankSum=-0.967;SNPEFF_AMINO_ACID_CHANGE=S446;SNPEFF_CODON_CHANGE=agT/agC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 909222 rs56185812 G A 1342.27 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-9.640;DB;DP=1592;Dels=0.00;FS=2.455;HaplotypeScore=2.5638;InbreedingCoeff=0.0472;MLEAC=3;MLEAF=0.030;MQ=58.97;MQ0=0;MQRankSum=-0.083;QD=12.91;ReadPosRankSum=0.550;SNPEFF_AMINO_ACID_CHANGE=A447T;SNPEFF_CODON_CHANGE=Gcc/Acc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 909238 rs3829740 G C 38081.79 PASS AC=68;AF=0.680;AN=100;BaseQRankSum=18.220;DB;DP=1634;Dels=0.00;FS=17.823;HaplotypeScore=6.3782;InbreedingCoeff=0.2647;MLEAC=68;MLEAF=0.680;MQ=58.89;MQ0=0;MQRankSum=0.785;QD=27.07;ReadPosRankSum=0.636;SNPEFF_AMINO_ACID_CHANGE=R452P;SNPEFF_CODON_CHANGE=cGt/cCt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 909242 rs3829739 A G 6612.81 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=10.280;DB;DP=1615;Dels=0.00;FS=23.439;HaplotypeScore=6.4656;InbreedingCoeff=-0.1495;MLEAC=13;MLEAF=0.130;MQ=58.89;MQ0=0;MQRankSum=-0.277;QD=12.89;ReadPosRankSum=0.631;SNPEFF_AMINO_ACID_CHANGE=G453;SNPEFF_CODON_CHANGE=ggA/ggG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 909309 rs3829738 T C 4240.79 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=8.541;DB;DP=1546;Dels=0.00;FS=0.000;HaplotypeScore=0.6199;InbreedingCoeff=-0.1495;MLEAC=13;MLEAF=0.130;MQ=59.39;MQ0=0;MQRankSum=0.982;QD=12.08;ReadPosRankSum=-2.253;SNPEFF_AMINO_ACID_CHANGE=S476P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 909326 rs61573829 C T 2749.49 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-8.226;DB;DP=1240;Dels=0.00;FS=4.104;HaplotypeScore=0.4291;InbreedingCoeff=0.2892;MLEAC=6;MLEAF=0.060;MQ=59.43;MQ0=0;MQRankSum=1.233;QD=17.29;ReadPosRankSum=-0.763;SNPEFF_AMINO_ACID_CHANGE=G481;SNPEFF_CODON_CHANGE=ggC/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 909363 rs62639990 A C 143.33 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.855;DB;DP=818;Dels=0.00;FS=0.000;HaplotypeScore=0.3826;InbreedingCoeff=-0.0235;MLEAC=2;MLEAF=0.020;MQ=59.37;MQ0=0;MQRankSum=0.763;QD=7.17;ReadPosRankSum=-2.094;SNPEFF_AMINO_ACID_CHANGE=R494;SNPEFF_CODON_CHANGE=Aga/Cga;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 909419 rs28548431 C T 1771.29 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=5.023;DB;DP=450;Dels=0.00;FS=1.945;HaplotypeScore=0.2123;InbreedingCoeff=0.0315;MLEAC=11;MLEAF=0.110;MQ=58.44;MQ0=0;MQRankSum=0.157;QD=17.54;ReadPosRankSum=-0.138;SNPEFF_AMINO_ACID_CHANGE=D512;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_909213_909431;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PLEKHN1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 909768 rs2340593 A G 153994.17 PASS AC=100;AF=1.00;AN=100;DB;DP=4084;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=-0.0000;MLEAC=100;MLEAF=1.00;MQ=59.89;MQ0=0;QD=37.71;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf170;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341290;VQSLOD=4.76;culprit=FS GT:AD:DP:GQ:PL 1/1:0,96:96:99:3468,289,0 1/1:0,72:72:99:2721,217,0 1/1:0,61:61:99:2256,184,0 1/1:0,84:84:99:3240, [...]
+1 934918 . C T 557.31 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.137;DP=635;Dels=0.00;FS=6.666;HaplotypeScore=0.4096;InbreedingCoeff=-0.0167;MLEAC=1;MLEAF=0.010;MQ=59.05;MQ0=0;MQRankSum=-0.319;QD=15.06;ReadPosRankSum=-0.276;SNPEFF_AMINO_ACID_CHANGE=V120M;SNPEFF_CODON_CHANGE=Gtg/Atg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_934906_934993;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 934990 . A G 135.42 VQSRTrancheSNP99.50to99.90 AC=10;AF=0.102;AN=98;BaseQRankSum=-9.706;DP=493;Dels=0.00;FS=132.442;HaplotypeScore=0.6505;InbreedingCoeff=-0.1225;MLEAC=8;MLEAF=0.082;MQ=57.58;MQ0=0;MQRankSum=1.060;QD=1.17;ReadPosRankSum=-7.855;SNPEFF_AMINO_ACID_CHANGE=S38P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_934906_934993;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 935046 rs113602214 G A 727.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.596;DB;DP=1581;Dels=0.00;FS=0.735;HaplotypeScore=0.6869;InbreedingCoeff=-0.0207;MLEAC=2;MLEAF=0.020;MQ=58.78;MQ0=0;MQRankSum=1.713;QD=9.09;ReadPosRankSum=-1.877;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000304952;VQSLOD=6.47;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,779 0/0:32,0:32:90:0,90,1127 0/0 [...]
+1 935222 rs2298214 C A 7220.31 PASS AC=54;AF=0.563;AN=96;BaseQRankSum=-7.782;DB;DP=433;Dels=0.00;FS=5.377;HaplotypeScore=0.2198;InbreedingCoeff=0.5158;MLEAC=55;MLEAF=0.573;MQ=57.88;MQ0=0;MQRankSum=1.735;QD=26.07;ReadPosRankSum=2.200;SNPEFF_AMINO_ACID_CHANGE=R44S;SNPEFF_CODON_CHANGE=agG/agT;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_935072_935552;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=HES4;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIP [...]
+1 948921 rs15842 T C 66632.77 PASS AC=87;AF=0.870;AN=100;BaseQRankSum=-1.000;DB;DP=2347;Dels=0.00;FS=19.732;HaplotypeScore=1.2466;InbreedingCoeff=0.0274;MLEAC=87;MLEAF=0.870;MQ=58.47;MQ0=0;MQRankSum=0.438;QD=29.41;ReadPosRankSum=0.831;SNPEFF_EFFECT=UTR_5_PRIME;SNPEFF_EXON_ID=exon_1_948803_948956;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379389;VQSLOD=3.32;culprit=HaplotypeScore GT:AD:DP:GQ:P [...]
+1 949422 rs143888043 G A 791.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.530;DB;DP=3475;Dels=0.00;FS=7.578;HaplotypeScore=0.0383;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.48;MQ0=0;MQRankSum=0.333;QD=10.55;ReadPosRankSum=-4.488;SNPEFF_AMINO_ACID_CHANGE=S21N;SNPEFF_CODON_CHANGE=aGc/aAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_949364_949920;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 949608 rs1921 G A 24069.41 PASS AC=29;AF=0.290;AN=100;BaseQRankSum=-14.730;DB;DP=3299;Dels=0.00;FS=1.209;HaplotypeScore=0.8114;InbreedingCoeff=0.1744;MLEAC=29;MLEAF=0.290;MQ=59.39;MQ0=0;MQRankSum=-0.491;QD=19.75;ReadPosRankSum=-2.856;SNPEFF_AMINO_ACID_CHANGE=S83N;SNPEFF_CODON_CHANGE=aGc/aAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_949364_949920;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 949654 rs8997 A G 93729.39 PASS AC=82;AF=0.820;AN=100;BaseQRankSum=18.995;DB;DP=3288;Dels=0.00;FS=20.351;HaplotypeScore=0.8710;InbreedingCoeff=0.4580;MLEAC=82;MLEAF=0.820;MQ=59.30;MQ0=0;MQRankSum=-0.403;QD=34.37;ReadPosRankSum=1.456;SNPEFF_AMINO_ACID_CHANGE=V98;SNPEFF_CODON_CHANGE=gtA/gtG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_949364_949920;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 949889 rs3829742 G A 666.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.032;DB;DP=1383;Dels=0.00;FS=1.503;HaplotypeScore=0.4451;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.13;MQ0=0;MQRankSum=1.923;QD=14.17;ReadPosRankSum=-1.208;SNPEFF_EFFECT=UTR_3_PRIME;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ISG15;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379389;VQSLOD=7.11;culprit=FS GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,814 0/0:32,0:32:96:0,96,123 [...]
+1 955597 rs115173026 G T 117.08 PASS AC=10;AF=0.278;AN=36;BaseQRankSum=1.445;DB;DP=25;Dels=0.00;FS=0.000;HaplotypeScore=0.0553;InbreedingCoeff=0.3411;MLEAC=9;MLEAF=0.250;MQ=56.16;MQ0=0;MQRankSum=1.528;QD=23.42;ReadPosRankSum=-0.124;SNPEFF_AMINO_ACID_CHANGE=P15;SNPEFF_CODON_CHANGE=ccG/ccT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_955503_955753;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0000 [...]
+1 957568 rs115704555 A G 882.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-7.119;DB;DP=5035;Dels=0.00;FS=0.000;HaplotypeScore=0.0195;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.33;MQ0=0;MQRankSum=0.747;QD=11.76;ReadPosRankSum=-4.449;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379370;VQSLOD=7.68;culprit=FS GT:AD:DP:GQ:PL 0/0:109,0:109:99:0,328,3938 0/0:108,0:108:99:0,325, [...]
+1 957640 rs6657048 C T 2004.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.658;DB;DP=6097;Dels=0.00;FS=1.366;HaplotypeScore=0.1112;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.46;MQ0=0;MQRankSum=1.866;QD=13.36;ReadPosRankSum=-5.575;SNPEFF_AMINO_ACID_CHANGE=D87;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_957581_957842;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 976514 rs79290478 C A 465.05 VQSRTrancheSNP98.60to98.80 AC=26;AF=0.929;AN=28;BaseQRankSum=-1.735;DB;DP=17;Dels=0.00;FS=0.000;HaplotypeScore=0.0712;InbreedingCoeff=0.0352;MLEAC=27;MLEAF=0.964;MQ=54.13;MQ0=0;MQRankSum=0.651;QD=31.00;ReadPosRankSum=-0.217;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477585;VQSLOD=0.457;culprit=MQ GT:AD:DP:GQ:PL ./. 1/1:0,1:1:3:28,3,0 ./. [...]
+1 976627 . G T 49.49 PASS AC=2;AF=0.032;AN=62;BaseQRankSum=-2.576;DP=60;Dels=0.00;FS=0.000;HaplotypeScore=0.0965;InbreedingCoeff=0.0539;MLEAC=1;MLEAF=0.016;MQ=58.16;MQ0=0;MQRankSum=-1.202;QD=16.50;ReadPosRankSum=-2.747;SNPEFF_AMINO_ACID_CHANGE=A268S;SNPEFF_CODON_CHANGE=Gcc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_976553_976777;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0000 [...]
+1 976629 rs113789806 C T 89.72 PASS AC=3;AF=0.047;AN=64;BaseQRankSum=0.487;DB;DP=64;Dels=0.00;FS=4.771;HaplotypeScore=0.0934;InbreedingCoeff=0.0068;MLEAC=3;MLEAF=0.047;MQ=57.45;MQ0=0;MQRankSum=-0.704;QD=17.94;ReadPosRankSum=0.541;SNPEFF_AMINO_ACID_CHANGE=A268;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_976553_976777;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000 [...]
+1 976808 . C T 41.19 PASS AC=1;AF=0.011;AN=88;BaseQRankSum=-2.132;DP=146;Dels=0.00;FS=0.000;HaplotypeScore=0.1023;InbreedingCoeff=-0.1019;MLEAC=1;MLEAF=0.011;MQ=56.91;MQ0=0;MQRankSum=0.703;QD=10.30;ReadPosRankSum=-0.967;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=2.70;culprit=MQ GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,59 0/0:2,0:2:6:0,6,64 0/0:2,0:2:6:0,6,76 0/0:3, [...]
+1 977028 rs138031468 G T 181.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.626;DB;DP=1523;Dels=0.00;FS=1.202;HaplotypeScore=0.5212;InbreedingCoeff=-0.0109;MLEAC=1;MLEAF=0.010;MQ=58.16;MQ0=1;MQRankSum=1.708;QD=7.25;ReadPosRankSum=-0.988;SNPEFF_AMINO_ACID_CHANGE=A375S;SNPEFF_CODON_CHANGE=Gcc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_976858_977082;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 977330 rs2799066 T C 47146.04 PASS AC=83;AF=0.830;AN=100;BaseQRankSum=15.170;DB;DP=1899;Dels=0.00;FS=0.000;HaplotypeScore=0.6567;InbreedingCoeff=0.3621;MLEAC=83;MLEAF=0.830;MQ=58.74;MQ0=0;MQRankSum=1.279;QD=31.49;ReadPosRankSum=1.596;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=4.05;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,30:30:90:1109,90,0 1/1:0,26:26:75:919,75, [...]
+1 977570 rs2710876 G A 11493.18 PASS AC=77;AF=0.770;AN=100;BaseQRankSum=-3.532;DB;DP=555;Dels=0.00;FS=6.674;HaplotypeScore=0.7412;InbreedingCoeff=0.4656;MLEAC=76;MLEAF=0.760;MQ=57.77;MQ0=0;MQRankSum=-1.243;QD=26.36;ReadPosRankSum=1.173;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=3.55;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,7:7:21:247,21,0 1/1:0,7:7:21: [...]
+1 978603 rs138543546 CCT C 9600.32 PASS AC=51;AF=0.510;AN=100;BaseQRankSum=-0.865;DB;DP=444;FS=32.481;HaplotypeScore=3.3877;InbreedingCoeff=0.4345;MLEAC=50;MLEAF=0.500;MQ=59.25;MQ0=0;MQRankSum=2.669;QD=37.50;ReadPosRankSum=-1.299;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403 GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,421 0/1:3,5:8:99:232,0,132 1/1:0,7:7:21:387,21,0 0/0:6,0:6 [...]
+1 978718 . C G 117.19 VQSRTrancheSNP99.50to99.90 AC=9;AF=0.090;AN=100;BaseQRankSum=-2.309;DP=424;Dels=0.00;FS=108.436;HaplotypeScore=0.3257;InbreedingCoeff=-0.1148;MLEAC=8;MLEAF=0.080;MQ=59.06;MQ0=0;MQRankSum=0.236;QD=1.92;ReadPosRankSum=-2.895;SNPEFF_AMINO_ACID_CHANGE=S495W;SNPEFF_CODON_CHANGE=tCg/tGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_978619_978837;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 978850 . T G 442.22 VQSRTrancheSNP99.50to99.90 AC=24;AF=0.240;AN=100;BaseQRankSum=-6.855;DP=511;Dels=0.00;FS=193.190;HaplotypeScore=0.9245;InbreedingCoeff=-0.3335;MLEAC=24;MLEAF=0.240;MQ=57.80;MQ0=0;MQRankSum=-0.677;QD=1.60;ReadPosRankSum=-9.883;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=-1.458e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:10,2:12:33:33,0,315 0/1:9 [...]
+1 978856 rs115191992 G A 382.31 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.120;DB;DP=567;Dels=0.00;FS=8.922;HaplotypeScore=1.6111;InbreedingCoeff=-0.0170;MLEAC=1;MLEAF=0.010;MQ=58.22;MQ0=0;MQRankSum=0.445;QD=15.29;ReadPosRankSum=0.158;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=3.18;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:11,0:11:33:0,33,389 0/0:16,0:16:4 [...]
+1 979245 . C T 117.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.312;DP=1817;Dels=0.00;FS=0.000;HaplotypeScore=0.6797;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.94;MQ0=0;MQRankSum=1.268;QD=6.89;ReadPosRankSum=-1.211;SNPEFF_AMINO_ACID_CHANGE=S614F;SNPEFF_CODON_CHANGE=tCc/tTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_979203_979403;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 979556 rs139886237 G A 936.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.964;DB;DP=5041;Dels=0.00;FS=3.185;HaplotypeScore=0.1048;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.89;MQ0=0;MQRankSum=1.962;QD=13.00;ReadPosRankSum=-6.007;SNPEFF_AMINO_ACID_CHANGE=Q689;SNPEFF_CODON_CHANGE=caG/caA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_979489_979637;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 979669 rs113671331 G A 717.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.158;DB;DP=2446;Dels=0.00;FS=19.190;HaplotypeScore=0.3423;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.52;MQ0=0;MQRankSum=0.833;QD=10.55;ReadPosRankSum=-2.181;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=5.58;culprit=FS GT:AD:DP:GQ:PL 0/0:36,0:36:99:0,108,1269 0/0:42,0:42:99:0,126 [...]
+1 979690 rs115413462 G A 1283.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-5.949;DB;DP=1925;Dels=0.00;FS=0.000;HaplotypeScore=0.3627;InbreedingCoeff=-0.0310;MLEAC=3;MLEAF=0.030;MQ=59.01;MQ0=0;MQRankSum=-0.548;QD=10.35;ReadPosRankSum=-4.800;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=6.13;culprit=FS GT:AD:DP:GQ:PL 0/0:33,0:33:99:0,99,1192 0/0:37,0:37:99:0,108 [...]
+1 979748 rs113288277 A T 963.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-4.154;DB;DP=1880;Dels=0.00;FS=3.164;HaplotypeScore=0.4187;InbreedingCoeff=-0.0527;MLEAC=5;MLEAF=0.050;MQ=59.23;MQ0=0;MQRankSum=1.849;QD=10.59;ReadPosRankSum=-2.048;SNPEFF_AMINO_ACID_CHANGE=E728V;SNPEFF_CODON_CHANGE=gAg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_979714_979819;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 979835 rs114389542 G A 637.50 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.599;DB;DP=617;Dels=0.00;FS=0.000;HaplotypeScore=0.3875;InbreedingCoeff=-0.0402;MLEAC=3;MLEAF=0.030;MQ=58.31;MQ0=0;MQRankSum=3.266;QD=15.55;ReadPosRankSum=1.104;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=4.93;culprit=FS GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,542 0/0:8,0:8:24:0,24,282 0/0 [...]
+1 980776 . C G 74.46 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-5.988;DP=439;Dels=0.00;FS=71.287;HaplotypeScore=0.8452;InbreedingCoeff=-0.1629;MLEAC=10;MLEAF=0.100;MQ=57.96;MQ0=0;MQRankSum=-0.107;QD=0.97;ReadPosRankSum=-3.005;SNPEFF_AMINO_ACID_CHANGE=G803;SNPEFF_CODON_CHANGE=ggC/ggG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_980739_980903;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 980784 . A C 80.26 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-6.659;DP=490;Dels=0.00;FS=103.640;HaplotypeScore=0.8030;InbreedingCoeff=-0.1257;MLEAC=8;MLEAF=0.080;MQ=58.29;MQ0=0;MQRankSum=0.878;QD=0.98;ReadPosRankSum=-2.250;SNPEFF_AMINO_ACID_CHANGE=D806A;SNPEFF_CODON_CHANGE=gAc/gCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_980739_980903;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 980824 rs112039851 G C 1069.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.331;DB;DP=1769;Dels=0.00;FS=5.595;HaplotypeScore=0.8300;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.91;MQ0=0;MQRankSum=2.172;QD=11.75;ReadPosRankSum=-2.279;SNPEFF_AMINO_ACID_CHANGE=G819;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_980739_980903;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 980955 rs139005472 AC A 694.11 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-0.461;DB;DP=979;FS=64.640;HaplotypeScore=7.7724;InbreedingCoeff=-0.0321;MLEAC=3;MLEAF=0.030;MQ=59.08;MQ0=0;MQRankSum=1.386;QD=9.92;RPA=5,4;RU=C;ReadPosRankSum=-0.725;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;STR GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,705 0/0:10,0:10:30:0,30,312 0/0:19,0:21:57: [...]
+1 981087 rs3128098 A G 71791.08 PASS AC=83;AF=0.830;AN=100;BaseQRankSum=-9.449;DB;DP=2837;Dels=0.00;FS=0.304;HaplotypeScore=0.6543;InbreedingCoeff=0.0787;MLEAC=83;MLEAF=0.830;MQ=59.38;MQ0=0;MQRankSum=0.669;QD=27.05;ReadPosRankSum=1.276;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=6.42;culprit=FS GT:AD:DP:GQ:PL 1/1:0,54:54:99:1755,162,0 1/1:0,50:50:99:1672,1 [...]
+1 981131 rs9697293 A G 2519.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-5.251;DB;DP=4516;Dels=0.00;FS=0.427;HaplotypeScore=0.6990;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.41;MQ0=0;MQRankSum=0.463;QD=11.40;ReadPosRankSum=-4.089;SNPEFF_AMINO_ACID_CHANGE=Q852R;SNPEFF_CODON_CHANGE=cAa/cGa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_981113_981256;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 981310 . C G 57.63 VQSRTrancheSNP99.90to100.00 AC=5;AF=0.050;AN=100;BaseQRankSum=-13.235;DP=1756;Dels=0.00;FS=661.835;HaplotypeScore=2.4875;InbreedingCoeff=-0.0545;MLEAC=4;MLEAF=0.040;MQ=57.94;MQ0=0;MQRankSum=-2.110;QD=0.29;ReadPosRankSum=-11.970;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000469403;VQSLOD=-1.365e+02;culprit=FS GT:AD:DP:GQ:PL 0/0:25,4:28:66:0,66,798 0/0: [...]
+1 981931 rs2465128 A G 25023.30 PASS AC=79;AF=0.790;AN=100;BaseQRankSum=0.003;DB;DP=1130;Dels=0.00;FS=3.119;HaplotypeScore=0.4877;InbreedingCoeff=0.4554;MLEAC=79;MLEAF=0.790;MQ=59.12;MQ0=0;MQRankSum=0.727;QD=27.17;ReadPosRankSum=-0.178;SNPEFF_AMINO_ACID_CHANGE=S1022;SNPEFF_CODON_CHANGE=tcA/tcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_981777_982115;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 982213 rs150132566 G C 241.08 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.122;DB;DP=335;Dels=0.00;FS=2.637;HaplotypeScore=0.2214;InbreedingCoeff=-0.0476;MLEAC=2;MLEAF=0.020;MQ=59.17;MQ0=0;MQRankSum=0.048;QD=12.05;ReadPosRankSum=-0.086;SNPEFF_AMINO_ACID_CHANGE=L1088F;SNPEFF_CODON_CHANGE=ttG/ttC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_982200_982337;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 982380 rs183929080 G T 103.95 PASS AC=3;AF=0.032;AN=94;BaseQRankSum=-2.624;DB;DP=214;Dels=0.00;FS=0.000;HaplotypeScore=0.0950;InbreedingCoeff=0.1828;MLEAC=2;MLEAF=0.021;MQ=59.30;MQ0=0;MQRankSum=1.767;QD=12.99;ReadPosRankSum=-1.767;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=5.26;culprit=FS GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,76 0/0:8,0:8:24:0,24,302 0/0:7,0:7 [...]
+1 982783 rs146358566 T C 1055.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.103;DB;DP=3310;Dels=0.00;FS=35.844;HaplotypeScore=0.3795;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.11;MQ0=0;MQRankSum=0.675;QD=14.07;ReadPosRankSum=-2.797;SNPEFF_AMINO_ACID_CHANGE=A1155;SNPEFF_CODON_CHANGE=gcT/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_982707_982834;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 982844 rs76264143 G C 1826.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-5.313;DB;DP=2660;Dels=0.00;FS=5.401;HaplotypeScore=0.4417;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.54;MQ0=0;MQRankSum=-0.660;QD=12.86;ReadPosRankSum=-3.444;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=7.29;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:58,0:58:99:0,175,2145 0/0:34, [...]
+1 982921 rs140939425 C T 303.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.832;DB;DP=1732;Dels=0.00;FS=6.485;HaplotypeScore=1.2241;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.14;MQ0=0;MQRankSum=1.190;QD=10.45;ReadPosRankSum=-0.639;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=5.13;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:24,0:24:72:0,72,802 0/0:18,0:18 [...]
+1 982941 rs3128102 T C 68937.62 PASS AC=78;AF=0.780;AN=100;BaseQRankSum=8.975;DB;DP=2796;Dels=0.00;FS=39.838;HaplotypeScore=1.0331;InbreedingCoeff=0.4172;MLEAC=78;MLEAF=0.780;MQ=59.43;MQ0=0;MQRankSum=0.281;QD=30.69;ReadPosRankSum=-1.070;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=0.959;culprit=FS GT:AD:DP:GQ:PL 1/1:0,53:53:99:1960,159,0 1/1:0,45:45:99:1701 [...]
+1 982994 rs10267 T C 108225.07 PASS AC=81;AF=0.810;AN=100;BaseQRankSum=14.669;DB;DP=3820;Dels=0.00;FS=16.758;HaplotypeScore=0.5747;InbreedingCoeff=0.2853;MLEAC=81;MLEAF=0.810;MQ=59.41;MQ0=0;MQRankSum=0.337;QD=32.22;ReadPosRankSum=0.569;SNPEFF_AMINO_ACID_CHANGE=F1186;SNPEFF_CODON_CHANGE=ttT/ttC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_982953_983067;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 983149 . T C 96.73 VQSRTrancheSNP99.50to99.90 AC=13;AF=0.130;AN=100;BaseQRankSum=-5.923;DP=496;Dels=0.00;FS=32.307;HaplotypeScore=0.2942;InbreedingCoeff=-0.1570;MLEAC=11;MLEAF=0.110;MQ=58.61;MQ0=0;MQRankSum=1.926;QD=1.01;ReadPosRankSum=-3.735;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479707;VQSLOD=-3.018e+00;culprit=QD GT:AD:DP:GQ:PL 0/1:9,1:11:2:2,0,237 0/0:11,4:15 [...]
+1 983243 rs142620337 C T 58.51 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.123;DB;DP=456;Dels=0.00;FS=0.000;HaplotypeScore=0.3617;InbreedingCoeff=-0.0248;MLEAC=1;MLEAF=0.010;MQ=57.19;MQ0=0;MQRankSum=1.902;QD=5.85;ReadPosRankSum=-0.454;SNPEFF_AMINO_ACID_CHANGE=P1240L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_983156_983275;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 983274 rs138818746 T C 156.53 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.591;DB;DP=381;Dels=0.00;FS=0.000;HaplotypeScore=0.1397;InbreedingCoeff=-0.0279;MLEAC=1;MLEAF=0.010;MQ=57.42;MQ0=0;MQRankSum=1.871;QD=19.57;ReadPosRankSum=1.672;SNPEFF_AMINO_ACID_CHANGE=F1250;SNPEFF_CODON_CHANGE=ttT/ttC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_983156_983275;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 983506 rs139294803 C T 42.70 PASS AC=1;AF=0.011;AN=92;BaseQRankSum=0.220;DB;DP=215;Dels=0.00;FS=0.000;HaplotypeScore=0.3543;InbreedingCoeff=-0.0969;MLEAC=1;MLEAF=0.011;MQ=56.99;MQ0=0;MQRankSum=1.099;QD=3.88;ReadPosRankSum=0.767;SNPEFF_AMINO_ACID_CHANGE=P1289L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_983392_983745;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT [...]
+1 984302 rs9442391 T C 4145.31 PASS AC=55;AF=0.550;AN=100;BaseQRankSum=1.569;DB;DP=259;Dels=0.00;FS=1.672;HaplotypeScore=0.1354;InbreedingCoeff=0.4788;MLEAC=54;MLEAF=0.540;MQ=58.09;MQ0=0;MQRankSum=0.824;QD=27.64;ReadPosRankSum=-0.866;SNPEFF_AMINO_ACID_CHANGE=T1387;SNPEFF_CODON_CHANGE=acT/acC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984247_984439;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 984579 . C A 45.31 PASS AC=2;AF=0.023;AN=88;BaseQRankSum=-1.957;DP=179;Dels=0.00;FS=0.000;HaplotypeScore=0.1073;InbreedingCoeff=-0.0958;MLEAC=2;MLEAF=0.023;MQ=58.43;MQ0=0;MQRankSum=1.560;QD=3.78;ReadPosRankSum=-1.440;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=3.30;culprit=QD GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,116 0/0:4,0:4:12:0,12,145 0/0:1,0:1:3:0,3,39 0/0 [...]
+1 984660 . C T 253.76 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.379;DP=465;Dels=0.00;FS=3.325;HaplotypeScore=0.3265;InbreedingCoeff=-0.0356;MLEAC=1;MLEAF=0.010;MQ=58.83;MQ0=0;MQRankSum=0.520;QD=12.08;ReadPosRankSum=0.196;SNPEFF_AMINO_ACID_CHANGE=P1448L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984616_984831;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 984752 . G A 183.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.576;DP=1540;Dels=0.00;FS=0.000;HaplotypeScore=0.4200;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=59.24;MQ0=0;MQRankSum=2.697;QD=11.45;ReadPosRankSum=-0.897;SNPEFF_AMINO_ACID_CHANGE=E1479K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984616_984831;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 984847 rs112917612 G C 1861.40 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-7.130;DB;DP=1003;Dels=0.00;FS=2.687;HaplotypeScore=0.6865;InbreedingCoeff=-0.0444;MLEAC=4;MLEAF=0.040;MQ=59.28;MQ0=0;MQRankSum=3.864;QD=12.66;ReadPosRankSum=-1.407;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=5.75;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:29,0:29:87:0,87,1088 0/0:16,0: [...]
+1 985171 rs115019873 C T 267.76 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.523;DB;DP=463;Dels=0.00;FS=1.361;HaplotypeScore=0.2723;InbreedingCoeff=0.0246;MLEAC=2;MLEAF=0.020;MQ=58.30;MQ0=0;MQRankSum=0.881;QD=13.39;ReadPosRankSum=-1.194;SNPEFF_AMINO_ACID_CHANGE=R1580;SNPEFF_CODON_CHANGE=cgC/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_984946_985175;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 985239 rs115192323 C T 1101.30 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.754;DB;DP=1161;Dels=0.00;FS=9.709;HaplotypeScore=0.3394;InbreedingCoeff=-0.0223;MLEAC=2;MLEAF=0.020;MQ=59.03;MQ0=0;MQRankSum=2.144;QD=13.60;ReadPosRankSum=-0.375;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=7.20;culprit=MQ GT:AD:DP:GQ:PL 0/0:10,0:10:30:0,30,360 0/0:10,0:10:30:0,30,35 [...]
+1 985266 rs2275813 C T 19151.74 PASS AC=51;AF=0.510;AN=100;BaseQRankSum=-2.655;DB;DP=1453;Dels=0.00;FS=1.032;HaplotypeScore=0.4190;InbreedingCoeff=0.2384;MLEAC=51;MLEAF=0.510;MQ=59.28;MQ0=0;MQRankSum=4.926;QD=22.35;ReadPosRankSum=-1.534;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=3.43;culprit=FS GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,759 1/1:0,11:11:33:410,33, [...]
+1 985377 rs113020870 C T 131.21 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.877;DB;DP=946;Dels=0.00;FS=0.000;HaplotypeScore=0.5711;InbreedingCoeff=-0.0114;MLEAC=1;MLEAF=0.010;MQ=59.35;MQ0=0;MQRankSum=1.294;QD=7.29;ReadPosRankSum=-2.187;SNPEFF_AMINO_ACID_CHANGE=C1613;SNPEFF_CODON_CHANGE=tgC/tgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985283_985417;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 985443 rs71576592 AG A 1666.26 PASS AC=56;AF=0.651;AN=86;BaseQRankSum=-0.304;DB;DP=179;FS=3.739;HaplotypeScore=13.0598;InbreedingCoeff=0.1155;MLEAC=60;MLEAF=0.698;MQ=53.87;MQ0=0;MQRankSum=-0.873;QD=11.34;RPA=15,14;RU=G;ReadPosRankSum=-0.534;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;STR GT:AD:DP:GQ:PL 1/1:0,3:5:9:73,9,0 0/0:0,0:4:0:0,0,1 0/0:0,0:3:1:0,1,1 0/1: [...]
+1 985446 rs2275812 G T 1019.88 PASS AC=23;AF=0.256;AN=90;BaseQRankSum=-6.476;DB;DP=176;Dels=0.00;FS=28.544;HaplotypeScore=2.2684;InbreedingCoeff=0.3262;MLEAC=21;MLEAF=0.233;MQ=51.95;MQ0=0;MQRankSum=2.575;QD=15.45;ReadPosRankSum=1.628;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=1.80;culprit=MQ GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,182 1/1:0,5:5:15:167,15,0 1/1:0 [...]
+1 985447 . G T 43.33 VQSRTrancheSNP98.90to99.00 AC=5;AF=0.054;AN=92;BaseQRankSum=-3.356;DP=174;Dels=0.00;FS=7.679;HaplotypeScore=2.1988;InbreedingCoeff=-0.1176;MLEAC=5;MLEAF=0.054;MQ=51.84;MQ0=0;MQRankSum=-2.494;QD=2.28;ReadPosRankSum=0.457;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=0.083;culprit=QD GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,217 0/0:5,0:5:15:0,15,1 [...]
+1 985449 rs56255212 G A 1749.09 PASS AC=43;AF=0.467;AN=92;BaseQRankSum=-7.334;DB;DP=175;Dels=0.00;FS=18.432;HaplotypeScore=1.0005;InbreedingCoeff=-0.1046;MLEAC=41;MLEAF=0.446;MQ=52.47;MQ0=0;MQRankSum=1.914;QD=13.56;ReadPosRankSum=-0.484;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=0.851;culprit=MQ GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,167 1/1:0,5:5:15:172,15,0 1 [...]
+1 985450 . G A 2316.82 PASS AC=47;AF=0.500;AN=94;BaseQRankSum=-7.697;DP=183;Dels=0.00;FS=11.816;HaplotypeScore=3.8258;InbreedingCoeff=-0.0235;MLEAC=49;MLEAF=0.521;MQ=52.73;MQ0=0;MQRankSum=1.234;QD=15.04;ReadPosRankSum=1.316;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=0.879;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:1,5:6:9:104,9,0 0/0:5,0:5:15:0,15,185 0/0: [...]
+1 985460 rs2275811 T C 2962.99 PASS AC=27;AF=0.270;AN=100;BaseQRankSum=5.374;DB;DP=280;Dels=0.00;FS=0.000;HaplotypeScore=1.3809;InbreedingCoeff=0.3112;MLEAC=29;MLEAF=0.290;MQ=54.31;MQ0=0;MQRankSum=-3.872;QD=19.89;ReadPosRankSum=-0.890;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=1.68;culprit=MQ GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,262 0/0:8,0:8:24:0,24,260 0/0: [...]
+1 985626 rs139400715 C T 788.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.990;DB;DP=3936;Dels=0.00;FS=3.913;HaplotypeScore=1.3126;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.26;MQ0=0;MQRankSum=1.831;QD=10.95;ReadPosRankSum=0.226;SNPEFF_AMINO_ACID_CHANGE=D1631;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985613_985709;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 985797 rs142286944 A G 572.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.785;DB;DP=1567;Dels=0.00;FS=5.649;HaplotypeScore=0.3128;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.32;MQ0=0;MQRankSum=1.849;QD=11.92;ReadPosRankSum=-0.687;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=8.00;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:28,0:28:84:0,84,1002 0/0:35,0: [...]
+1 985826 rs17160775 G A 2760.44 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-8.955;DB;DP=1611;Dels=0.00;FS=6.081;HaplotypeScore=0.4089;InbreedingCoeff=0.3684;MLEAC=5;MLEAF=0.050;MQ=59.33;MQ0=0;MQRankSum=-0.137;QD=14.23;ReadPosRankSum=0.527;SNPEFF_AMINO_ACID_CHANGE=V1666I;SNPEFF_CODON_CHANGE=Gtc/Atc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985807_985971;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 985900 rs17160776 C T 2924.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.587;DB;DP=2417;Dels=0.00;FS=2.340;HaplotypeScore=0.4268;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.25;MQ0=0;MQRankSum=-0.881;QD=13.17;ReadPosRankSum=-1.106;SNPEFF_AMINO_ACID_CHANGE=F1690;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_985807_985971;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 985999 rs111726760 G T 2007.14 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-5.020;DB;DP=1342;Dels=0.00;FS=0.000;HaplotypeScore=0.5814;InbreedingCoeff=-0.0315;MLEAC=3;MLEAF=0.030;MQ=59.22;MQ0=0;MQRankSum=-0.141;QD=13.94;ReadPosRankSum=-1.586;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=7.27;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:48:0,48,564 0/0:23,0:23:69:0,69,8 [...]
+1 986010 rs116257587 T C 1466.45 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-5.826;DB;DP=1187;Dels=0.00;FS=0.695;HaplotypeScore=0.9650;InbreedingCoeff=0.3677;MLEAC=5;MLEAF=0.050;MQ=59.26;MQ0=0;MQRankSum=-1.433;QD=11.92;ReadPosRankSum=-2.805;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=4.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:20,0:20:60:0,60,687 0/0:21,0:2 [...]
+1 986056 rs28545735 C T 219.30 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.301;DB;DP=618;Dels=0.00;FS=8.387;HaplotypeScore=0.3670;InbreedingCoeff=-0.0163;MLEAC=1;MLEAF=0.010;MQ=58.85;MQ0=0;MQRankSum=-0.560;QD=10.44;ReadPosRankSum=-2.790;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=5.59;culprit=MQ GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,390 0/0:12,0:12:36:0,36,404 [...]
+1 986731 rs112073270 C T 168.52 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-0.026;DB;DP=251;Dels=0.00;FS=3.382;HaplotypeScore=0.5293;InbreedingCoeff=-0.0640;MLEAC=1;MLEAF=0.010;MQ=57.67;MQ0=0;MQRankSum=1.303;QD=14.04;ReadPosRankSum=-0.517;SNPEFF_AMINO_ACID_CHANGE=F127;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_986633_986749;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 986737 rs17160781 T C 466.10 PASS AC=4;AF=0.042;AN=96;BaseQRankSum=-0.523;DB;DP=232;Dels=0.00;FS=7.765;HaplotypeScore=0.5174;InbreedingCoeff=-0.1029;MLEAC=4;MLEAF=0.042;MQ=57.81;MQ0=0;MQRankSum=2.606;QD=16.07;ReadPosRankSum=-2.501;SNPEFF_AMINO_ACID_CHANGE=G129;SNPEFF_CODON_CHANGE=ggT/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_986633_986749;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 986885 . T G 441.47 VQSRTrancheSNP99.50to99.90 AC=19;AF=0.198;AN=96;BaseQRankSum=-7.503;DP=235;Dels=0.00;FS=141.555;HaplotypeScore=0.1373;InbreedingCoeff=-0.2318;MLEAC=21;MLEAF=0.219;MQ=59.05;MQ0=0;MQRankSum=2.350;QD=4.01;ReadPosRankSum=-7.910;SNPEFF_AMINO_ACID_CHANGE=V151G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_986833_987025;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODERATE;SN [...]
+1 987076 rs143046493 C T 120.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.567;DB;DP=1311;Dels=0.00;FS=2.262;HaplotypeScore=0.3259;InbreedingCoeff=-0.0106;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=1.248;QD=7.51;ReadPosRankSum=-0.295;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=6.87;culprit=QD GT:AD:DP:GQ:PL 0/1:10,6:16:99:160,0,294 0/0:31,0:31:93:0,93,112 [...]
+1 987142 rs17778478 C T 928.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.711;DB;DP=2776;Dels=0.00;FS=1.468;HaplotypeScore=0.4996;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.28;MQ0=0;MQRankSum=1.557;QD=12.71;ReadPosRankSum=-0.092;SNPEFF_AMINO_ACID_CHANGE=T1866;SNPEFF_CODON_CHANGE=acC/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_987108_987195;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 987200 rs9803031 C T 39368.64 PASS AC=78;AF=0.780;AN=100;BaseQRankSum=7.389;DB;DP=1656;Dels=0.00;FS=10.170;HaplotypeScore=0.5690;InbreedingCoeff=0.3007;MLEAC=78;MLEAF=0.780;MQ=59.44;MQ0=0;MQRankSum=0.167;QD=27.63;ReadPosRankSum=2.023;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466223;VQSLOD=5.59;culprit=FS GT:AD:DP:GQ:PL 1/1:0,25:25:75:881,75,0 1/1:0,35:35:99:1265,105 [...]
+1 990280 rs4275402 C T 2285.57 PASS AC=54;AF=0.600;AN=90;BaseQRankSum=3.564;DB;DP=149;Dels=0.00;FS=1.108;HaplotypeScore=0.2197;InbreedingCoeff=0.4198;MLEAC=53;MLEAF=0.589;MQ=58.20;MQ0=0;MQRankSum=0.621;QD=22.63;ReadPosRankSum=0.707;SNPEFF_AMINO_ACID_CHANGE=D2019;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_990204_991496;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 990380 rs3121561 C T 1289.03 PASS AC=38;AF=0.413;AN=92;BaseQRankSum=2.240;DB;DP=134;Dels=0.00;FS=9.245;HaplotypeScore=0.1459;InbreedingCoeff=0.4029;MLEAC=36;MLEAF=0.391;MQ=56.54;MQ0=0;MQRankSum=1.845;QD=21.48;ReadPosRankSum=1.141;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AGRN;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000461111;VQSLOD=3.77;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,5:5:15:172,15,0 0/0:2,0:2:6:0,6,59 0/0:1,0:1: [...]
+1 1019314 rs115613719 G T 80.45 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.398;DB;DP=380;Dels=0.00;FS=2.415;HaplotypeScore=0.1312;InbreedingCoeff=-0.0260;MLEAC=1;MLEAF=0.010;MQ=58.41;MQ0=0;MQRankSum=0.738;QD=8.04;ReadPosRankSum=-1.491;SNPEFF_AMINO_ACID_CHANGE=R194;SNPEFF_CODON_CHANGE=Cgg/Agg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1019295_1019391;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1019717 . C T 219.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.621;DP=1213;Dels=0.00;FS=6.649;HaplotypeScore=0.3895;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.42;MQ0=0;MQRankSum=0.405;QD=9.96;ReadPosRankSum=-1.859;SNPEFF_AMINO_ACID_CHANGE=R173H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1019295_1019763;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_I [...]
+1 1021249 rs61520960 G A 565.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.547;DB;DP=1236;Dels=0.00;FS=0.000;HaplotypeScore=0.4088;InbreedingCoeff=-0.0205;MLEAC=2;MLEAF=0.020;MQ=58.93;MQ0=0;MQRankSum=1.104;QD=12.03;ReadPosRankSum=-2.817;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000427787;VQSLOD=7.29;culprit=MQ GT:AD:DP:GQ:PL 0/0:25,0:25:75:0,75,812 0/0:30,0:30:90:0,90, [...]
+1 1021346 rs10907177 A G 14466.05 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=19.709;DB;DP=2081;Dels=0.00;FS=2.032;HaplotypeScore=0.6786;InbreedingCoeff=-0.0000;MLEAC=20;MLEAF=0.200;MQ=58.86;MQ0=0;MQRankSum=0.655;QD=17.35;ReadPosRankSum=-0.572;SNPEFF_AMINO_ACID_CHANGE=I119;SNPEFF_CODON_CHANGE=atT/atC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1021258_1021392;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1021408 rs11260587 G A 5476.87 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-10.418;DB;DP=1361;Dels=0.00;FS=2.722;HaplotypeScore=3.7841;InbreedingCoeff=0.1111;MLEAC=10;MLEAF=0.100;MQ=58.95;MQ0=0;MQRankSum=-0.507;QD=15.05;ReadPosRankSum=-0.885;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000427787;VQSLOD=2.01;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:18,0:18:51:0,51,631 0/0 [...]
+1 1021415 rs3737728 A G 31297.26 PASS AC=77;AF=0.770;AN=100;BaseQRankSum=4.762;DB;DP=1211;Dels=0.00;FS=14.650;HaplotypeScore=3.2284;InbreedingCoeff=-0.0702;MLEAC=77;MLEAF=0.770;MQ=59.03;MQ0=0;MQRankSum=-1.622;QD=26.86;ReadPosRankSum=0.942;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=C1orf159;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000427787;VQSLOD=1.56;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,18:18:51:619,51,0 1/1: [...]
+1 1115461 rs116383664 C T 216.43 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.632;DB;DP=558;Dels=0.00;FS=2.782;HaplotypeScore=0.2055;InbreedingCoeff=-0.0225;MLEAC=1;MLEAF=0.010;MQ=58.89;MQ0=0;MQRankSum=0.016;QD=8.66;ReadPosRankSum=-0.833;SNPEFF_AMINO_ACID_CHANGE=R10W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1115414_1115720;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1115503 rs111751804 T C 119.81 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-3.346;DB;DP=816;Dels=0.00;FS=6.651;HaplotypeScore=0.2278;InbreedingCoeff=-0.0298;MLEAC=2;MLEAF=0.020;MQ=59.15;MQ0=0;MQRankSum=-0.990;QD=3.00;ReadPosRankSum=-0.508;SNPEFF_AMINO_ACID_CHANGE=C24R;SNPEFF_CODON_CHANGE=Tgt/Cgt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1115414_1115720;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1115548 rs114390380 G A 44.30 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.321;DB;DP=616;Dels=0.00;FS=4.626;HaplotypeScore=0.1976;InbreedingCoeff=-0.0164;MLEAC=1;MLEAF=0.010;MQ=58.76;MQ0=0;MQRankSum=1.640;QD=4.92;ReadPosRankSum=0.271;SNPEFF_AMINO_ACID_CHANGE=G112R;SNPEFF_CODON_CHANGE=Gga/Aga;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1115414_1115720;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1115994 rs13376597 G A 1981.08 PASS AC=36;AF=0.400;AN=90;BaseQRankSum=0.825;DB;DP=155;Dels=0.00;FS=0.000;HaplotypeScore=0.0768;InbreedingCoeff=0.2755;MLEAC=36;MLEAF=0.400;MQ=59.41;MQ0=0;MQRankSum=0.543;QD=21.53;ReadPosRankSum=-0.106;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379288;VQSLOD=6.55;culprit=FS GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,97 0/0:4,0:4:12:0,12,130 0/0 [...]
+1 1116005 rs112517367 C T 78.65 PASS AC=4;AF=0.043;AN=92;BaseQRankSum=-1.231;DB;DP=169;Dels=0.00;FS=6.189;HaplotypeScore=0.0638;InbreedingCoeff=0.0473;MLEAC=3;MLEAF=0.033;MQ=59.02;MQ0=0;MQRankSum=0.337;QD=9.83;ReadPosRankSum=-0.619;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379288;VQSLOD=5.59;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,100 0/0:3,0:3:9:0,9 [...]
+1 1116189 rs137938349 G A 259.70 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=0.051;DB;DP=469;Dels=0.00;FS=1.585;HaplotypeScore=0.2633;InbreedingCoeff=-0.0302;MLEAC=1;MLEAF=0.010;MQ=58.77;MQ0=0;MQRankSum=0.355;QD=11.80;ReadPosRankSum=-1.003;SNPEFF_AMINO_ACID_CHANGE=R162Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1116111_1116240;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1116231 rs13374146 T C 1902.60 PASS AC=21;AF=0.228;AN=92;BaseQRankSum=3.944;DB;DP=220;Dels=0.00;FS=0.000;HaplotypeScore=0.5092;InbreedingCoeff=0.1624;MLEAC=22;MLEAF=0.239;MQ=58.70;MQ0=0;MQRankSum=0.514;QD=19.22;ReadPosRankSum=-1.908;SNPEFF_AMINO_ACID_CHANGE=V176A;SNPEFF_CODON_CHANGE=gTc/gCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1116111_1116240;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1117111 rs140479651 T C 201.36 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.436;DB;DP=471;Dels=0.00;FS=12.324;HaplotypeScore=0.1182;InbreedingCoeff=-0.0196;MLEAC=1;MLEAF=0.010;MQ=59.24;MQ0=0;MQRankSum=1.933;QD=8.75;ReadPosRankSum=-0.757;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=6.53;culprit=FS GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,154 0/0:11,0:11:27:0,2 [...]
+1 1117709 rs112895009 G A 1399.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.319;DB;DP=2759;Dels=0.00;FS=1.311;HaplotypeScore=0.4317;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.73;MQ0=0;MQRankSum=0.189;QD=14.73;ReadPosRankSum=-2.345;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=7.39;culprit=FS GT:AD:DP:GQ:PL 0/0:56,0:56:99:0,169,2117 0/0:54,0:54 [...]
+1 1118212 rs10907171 T C 4570.83 PASS AC=55;AF=0.573;AN=96;BaseQRankSum=1.399;DB;DP=225;Dels=0.00;FS=2.180;HaplotypeScore=0.0763;InbreedingCoeff=0.4741;MLEAC=56;MLEAF=0.583;MQ=59.00;MQ0=0;MQRankSum=0.957;QD=27.54;ReadPosRankSum=1.962;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=5.88;culprit=MQ GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,222 0/0:3,0:3:9:0,9,111 [...]
+1 1118275 rs61733845 C T 3765.19 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=-9.799;DB;DP=464;Dels=0.00;FS=10.169;HaplotypeScore=0.2958;InbreedingCoeff=0.3216;MLEAC=24;MLEAF=0.240;MQ=58.83;MQ0=0;MQRankSum=0.829;QD=21.27;ReadPosRankSum=-0.343;SNPEFF_AMINO_ACID_CHANGE=C239;SNPEFF_CODON_CHANGE=tgC/tgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1118256_1118427;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=LOW;SNPEFF_TRANS [...]
+1 1118475 . C G 95.18 PASS AC=2;AF=0.023;AN=86;BaseQRankSum=1.836;DP=135;Dels=0.00;FS=9.454;HaplotypeScore=0.2094;InbreedingCoeff=0.1015;MLEAC=1;MLEAF=0.012;MQ=58.64;MQ0=0;MQRankSum=-0.009;QD=19.04;ReadPosRankSum=1.508;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000514695;VQSLOD=3.75;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,31 0/0:3,0:3:9:0,9,90 0/0:2,0:2:6:0,6,79 [...]
+1 1119361 rs143930968 A G 831.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.139;DB;DP=6393;Dels=0.00;FS=6.831;HaplotypeScore=0.0316;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.99;MQ0=0;MQRankSum=0.961;QD=11.08;ReadPosRankSum=-4.052;SNPEFF_AMINO_ACID_CHANGE=I311V;SNPEFF_CODON_CHANGE=Att/Gtt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1119300_1119471;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;S [...]
+1 1120307 rs7539911 G A 1769.63 VQSRTrancheSNP99.00to99.30 AC=31;AF=0.316;AN=98;BaseQRankSum=9.676;DB;DP=592;Dels=0.00;FS=2.748;HaplotypeScore=0.1408;InbreedingCoeff=-0.0273;MLEAC=30;MLEAF=0.306;MQ=31.70;MQ0=88;MQRankSum=-0.795;QD=4.35;ReadPosRankSum=1.177;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460998;VQSLOD=-8.879e-01;culprit=MQ GT:AD:DP:GQ:PL 0/1:17,4:20: [...]
+1 1120370 rs74046640 C G 637.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.595;DB;DP=1533;Dels=0.00;FS=4.312;HaplotypeScore=0.4421;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=55.77;MQ0=0;MQRankSum=1.366;QD=10.80;ReadPosRankSum=0.970;SNPEFF_AMINO_ACID_CHANGE=L355V;SNPEFF_CODON_CHANGE=Ctg/Gtg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1120377 rs116321663 T A 220.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.263;DB;DP=1631;Dels=0.00;FS=0.000;HaplotypeScore=0.4840;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=55.37;MQ0=0;MQRankSum=2.741;QD=12.23;ReadPosRankSum=-0.441;SNPEFF_AMINO_ACID_CHANGE=M357K;SNPEFF_CODON_CHANGE=aTg/aAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1120431 rs1320571 G A 14417.02 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=-12.760;DB;DP=1876;Dels=0.00;FS=4.673;HaplotypeScore=0.3230;InbreedingCoeff=0.1250;MLEAC=20;MLEAF=0.200;MQ=56.40;MQ0=0;MQRankSum=3.518;QD=20.25;ReadPosRankSum=-2.166;SNPEFF_AMINO_ACID_CHANGE=S375N;SNPEFF_CODON_CHANGE=aGt/aAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE [...]
+1 1120488 rs74475385 A C 641.98 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-1.440;DB;DP=1912;Dels=0.00;FS=6.318;HaplotypeScore=0.5771;InbreedingCoeff=-0.0187;MLEAC=1;MLEAF=0.010;MQ=57.56;MQ0=0;MQRankSum=2.697;QD=8.02;ReadPosRankSum=-1.265;SNPEFF_AMINO_ACID_CHANGE=K394T;SNPEFF_CODON_CHANGE=aAg/aCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1120503 rs116251234 G A 305.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-6.195;DB;DP=1869;Dels=0.00;FS=8.945;HaplotypeScore=0.4827;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=57.84;MQ0=0;MQRankSum=1.103;QD=3.72;ReadPosRankSum=-1.793;SNPEFF_AMINO_ACID_CHANGE=C399Y;SNPEFF_CODON_CHANGE=tGc/tAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1120349_1121244;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1120536 rs77950429 G A 2662.47 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.987;DB;DP=1475;Dels=0.00;FS=3.207;HaplotypeScore=0.3647;InbreedingCoeff=-0.0529;MLEAC=5;MLEAF=0.050;MQ=57.96;MQ0=0;MQRankSum=0.529;QD=13.80;ReadPosRankSum=-1.922;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=TTLL10;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460998;VQSLOD=4.94;culprit=MQ GT:AD:DP:GQ:PL 0/0:24,0:24:69:0,69,817 0/0:28,0:28:84 [...]
+1 1139202 rs2298213 T C 1239.37 PASS AC=16;AF=0.163;AN=98;BaseQRankSum=1.124;DB;DP=276;Dels=0.00;FS=2.200;HaplotypeScore=0.2314;InbreedingCoeff=0.1054;MLEAC=15;MLEAF=0.153;MQ=58.26;MQ0=0;MQRankSum=0.247;QD=11.37;ReadPosRankSum=-1.776;SNPEFF_AMINO_ACID_CHANGE=P179;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1138888_1139340;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1139498 rs11466693 C T 292.34 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.184;DB;DP=688;Dels=0.00;FS=4.192;HaplotypeScore=0.4994;InbreedingCoeff=-0.0240;MLEAC=2;MLEAF=0.020;MQ=59.41;MQ0=0;MQRankSum=-0.078;QD=9.74;ReadPosRankSum=0.429;SNPEFF_AMINO_ACID_CHANGE=V173M;SNPEFF_CODON_CHANGE=Gtg/Atg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139435_1139616;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1139547 . C T 31.26 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.063;DP=630;Dels=0.00;FS=2.593;HaplotypeScore=0.4362;InbreedingCoeff=-0.0144;MLEAC=1;MLEAF=0.010;MQ=58.81;MQ0=0;MQRankSum=1.373;QD=3.91;ReadPosRankSum=0.742;SNPEFF_AMINO_ACID_CHANGE=G156;SNPEFF_CODON_CHANGE=ggG/ggA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139435_1139616;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST000003792 [...]
+1 1139565 rs61761323 G A 567.31 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.312;DB;DP=745;Dels=0.00;FS=0.000;HaplotypeScore=0.3168;InbreedingCoeff=-0.0228;MLEAC=2;MLEAF=0.020;MQ=58.81;MQ0=0;MQRankSum=1.159;QD=13.19;ReadPosRankSum=1.412;SNPEFF_AMINO_ACID_CHANGE=N150;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139435_1139616;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1139862 rs11466691 T C 395.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.920;DB;DP=1988;Dels=0.00;FS=1.293;HaplotypeScore=0.3883;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.04;MQ0=0;MQRankSum=0.336;QD=15.20;ReadPosRankSum=-0.918;SNPEFF_AMINO_ACID_CHANGE=K105;SNPEFF_CODON_CHANGE=aaA/aaG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1139779_1139866;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1141723 rs11466678 A G 112.49 PASS AC=4;AF=0.065;AN=62;BaseQRankSum=1.989;DB;DP=64;Dels=0.00;FS=5.756;HaplotypeScore=0.0000;InbreedingCoeff=-0.0243;MLEAC=4;MLEAF=0.065;MQ=58.28;MQ0=0;MQRankSum=0.057;QD=14.06;ReadPosRankSum=-0.663;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379236;VQSLOD=5.64;culprit=MQ GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,69 0/0:2,0:2:6:0,6,71 0/0:3,0:3: [...]
+1 1141824 rs11466676 G C 94.64 PASS AC=7;AF=0.113;AN=62;BaseQRankSum=0.022;DB;DP=55;Dels=0.00;FS=3.310;HaplotypeScore=0.0509;InbreedingCoeff=0.1317;MLEAC=6;MLEAF=0.097;MQ=58.44;MQ0=0;MQRankSum=-0.373;QD=9.46;ReadPosRankSum=1.076;SNPEFF_AMINO_ACID_CHANGE=T43R;SNPEFF_CODON_CHANGE=aCg/aGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1141765_1141951;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF18;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 1147108 . G C 452.93 VQSRTrancheSNP99.50to99.90 AC=23;AF=0.245;AN=94;BaseQRankSum=-5.961;DP=290;Dels=0.00;FS=54.941;HaplotypeScore=0.2645;InbreedingCoeff=-0.3669;MLEAC=24;MLEAF=0.255;MQ=57.70;MQ0=0;MQRankSum=1.865;QD=2.54;ReadPosRankSum=-1.650;SNPEFF_AMINO_ACID_CHANGE=P247A;SNPEFF_CODON_CHANGE=Ccc/Gcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1147084_1147212;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODERA [...]
+1 1147243 rs2298211 A C 721.18 PASS AC=14;AF=0.143;AN=98;BaseQRankSum=4.461;DB;DP=255;Dels=0.00;FS=5.837;HaplotypeScore=0.2488;InbreedingCoeff=0.3908;MLEAC=12;MLEAF=0.122;MQ=57.98;MQ0=0;MQRankSum=1.434;QD=20.03;ReadPosRankSum=-3.805;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379236;VQSLOD=4.26;culprit=MQ GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,71 0/0:7,0:7:21:0,21,244 0/0:6,0:6: [...]
+1 1147296 . C T 170.29 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.163;DP=331;Dels=0.00;FS=15.996;HaplotypeScore=0.3569;InbreedingCoeff=0.2751;MLEAC=2;MLEAF=0.020;MQ=58.06;MQ0=0;MQRankSum=0.454;QD=18.92;ReadPosRankSum=-0.262;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000360001;VQSLOD=2.99;culprit=FS GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,106 0/0:5,0:5:15:0,15,189 0/0:4,0:4:12:0,12, [...]
+1 1147297 rs2298212 G A 938.06 PASS AC=14;AF=0.140;AN=100;BaseQRankSum=2.937;DB;DP=337;Dels=0.00;FS=1.810;HaplotypeScore=0.3569;InbreedingCoeff=0.3434;MLEAC=12;MLEAF=0.120;MQ=58.13;MQ0=0;MQRankSum=1.579;QD=14.89;ReadPosRankSum=-0.993;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000360001;VQSLOD=5.19;culprit=MQ GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,167 0/0:5,0:5:15:0,15,162 0/0:4 [...]
+1 1147422 rs17568 C T 16834.05 PASS AC=40;AF=0.400;AN=100;BaseQRankSum=-12.108;DB;DP=1219;Dels=0.00;FS=0.942;HaplotypeScore=0.6440;InbreedingCoeff=0.2496;MLEAC=40;MLEAF=0.400;MQ=58.89;MQ0=0;MQRankSum=0.957;QD=22.57;ReadPosRankSum=-1.370;SNPEFF_AMINO_ACID_CHANGE=E178;SNPEFF_CODON_CHANGE=gaG/gaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1147322_1147518;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ [...]
+1 1147486 rs150220682 G A 964.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.199;DB;DP=1578;Dels=0.00;FS=1.348;HaplotypeScore=0.9890;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.43;MQ0=0;MQRankSum=2.785;QD=13.39;ReadPosRankSum=1.265;SNPEFF_AMINO_ACID_CHANGE=P157L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1147322_1147518;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TNFRSF4;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1147983 rs11260559 C T 115.86 PASS AC=5;AF=0.100;AN=50;BaseQRankSum=-1.063;DB;DP=47;Dels=0.00;FS=0.000;HaplotypeScore=0.3581;InbreedingCoeff=0.1233;MLEAC=5;MLEAF=0.100;MQ=56.71;MQ0=0;MQRankSum=0.000;QD=19.31;ReadPosRankSum=-1.472;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=3.18;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 ./. ./. ./. ./. ./. ./. ./. [...]
+1 1147985 rs11260560 C A 167.52 PASS AC=5;AF=0.093;AN=54;BaseQRankSum=-2.503;DB;DP=52;Dels=0.00;FS=0.000;HaplotypeScore=0.2951;InbreedingCoeff=0.1304;MLEAC=5;MLEAF=0.093;MQ=57.06;MQ0=0;MQRankSum=1.669;QD=20.94;ReadPosRankSum=-1.283;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=3.68;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 0/0:2,0:2:6:0,6,74 ./. ./. . [...]
+1 1148100 rs34108055 G C 352.12 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-1.796;DB;DP=360;Dels=0.00;FS=1.079;HaplotypeScore=0.2761;InbreedingCoeff=-0.0482;MLEAC=2;MLEAF=0.020;MQ=58.23;MQ0=0;MQRankSum=-0.442;QD=14.08;ReadPosRankSum=-2.256;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=5.22;culprit=FS GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 0/0:7,0:7:21:0,21,265 0/0:8, [...]
+1 1148358 rs35033502 G A 895.54 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.649;DB;DP=756;Dels=0.00;FS=2.874;HaplotypeScore=0.6591;InbreedingCoeff=-0.0303;MLEAC=2;MLEAF=0.020;MQ=59.52;MQ0=0;MQRankSum=0.522;QD=13.99;ReadPosRankSum=-0.698;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=7.83;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,555 0/0:21,0:21: [...]
+1 1149316 rs35737009 C G 1416.42 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-4.698;DB;DP=389;Dels=0.00;FS=13.861;HaplotypeScore=0.3927;InbreedingCoeff=0.0899;MLEAC=8;MLEAF=0.080;MQ=58.25;MQ0=0;MQRankSum=1.010;QD=15.40;ReadPosRankSum=0.133;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=4.57;culprit=FS GT:AD:DP:GQ:PL 0/0:7,0:7:21:0,21,265 0/0:6,0:6:18:0,18,227 0/0: [...]
+1 1153009 rs116328547 G A 858.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.224;DB;DP=3871;Dels=0.00;FS=6.160;HaplotypeScore=0.2069;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=-0.494;QD=11.44;ReadPosRankSum=-2.576;SNPEFF_AMINO_ACID_CHANGE=A324;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152288_1153068;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1153039 rs139426313 G A 782.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.817;DB;DP=4234;Dels=0.00;FS=0.000;HaplotypeScore=0.3295;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.46;MQ0=0;MQRankSum=-0.799;QD=10.43;ReadPosRankSum=1.030;SNPEFF_AMINO_ACID_CHANGE=N314;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152288_1153068;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1153077 rs150377323 G A 648.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.125;DB;DP=3584;Dels=0.00;FS=9.107;HaplotypeScore=0.8191;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=-1.067;QD=10.45;ReadPosRankSum=-2.836;SNPEFF_AMINO_ACID_CHANGE=L340;SNPEFF_CODON_CHANGE=ctC/ctT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152311_1153184;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1153113 rs12036216 G A 7802.77 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=-2.491;DB;DP=1685;Dels=0.00;FS=2.703;HaplotypeScore=1.5024;InbreedingCoeff=0.0274;MLEAC=13;MLEAF=0.130;MQ=58.78;MQ0=0;MQRankSum=-0.128;QD=18.36;ReadPosRankSum=1.871;SNPEFF_AMINO_ACID_CHANGE=L328;SNPEFF_CODON_CHANGE=ctC/ctT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1152311_1153184;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1154121 rs112680577 G A 490.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.690;DB;DP=3513;Dels=0.00;FS=1.344;HaplotypeScore=0.1529;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.67;MQ0=0;MQRankSum=-0.016;QD=12.57;ReadPosRankSum=-1.528;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000545427;VQSLOD=9.43;culprit=FS GT:AD:DP:GQ:PL 0/0:59,0:59:99:0,177,1917 0/0:71,0:71:99:0,214 [...]
+1 1154318 . C T 606.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.427;DP=4220;Dels=0.00;FS=1.794;HaplotypeScore=0.1369;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.80;MQ0=0;MQRankSum=2.357;QD=8.08;ReadPosRankSum=-2.836;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000545427;VQSLOD=6.53;culprit=QD GT:AD:DP:GQ:PL 0/0:94,0:94:99:0,283,3055 0/0:80,0:80:99:0,241,2600 0/0:80,0: [...]
+1 1158631 rs6603781 A G 87610.56 PASS AC=92;AF=0.920;AN=100;BaseQRankSum=-10.313;DB;DP=2899;Dels=0.00;FS=19.158;HaplotypeScore=0.5914;InbreedingCoeff=-0.0870;MLEAC=92;MLEAF=0.920;MQ=59.55;MQ0=0;MQRankSum=-0.875;QD=30.22;ReadPosRankSum=0.175;SNPEFF_AMINO_ACID_CHANGE=D190;SNPEFF_CODON_CHANGE=gaT/gaC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1158624_1158737;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 1158667 rs59813672 G A 705.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.231;DB;DP=4346;Dels=0.00;FS=0.000;HaplotypeScore=0.2481;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=1.458;QD=18.56;ReadPosRankSum=-2.507;SNPEFF_AMINO_ACID_CHANGE=A178;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1158624_1158737;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1163804 rs7515488 C T 3114.64 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=-8.635;DB;DP=629;Dels=0.00;FS=2.559;HaplotypeScore=1.6667;InbreedingCoeff=-0.1364;MLEAC=20;MLEAF=0.200;MQ=57.83;MQ0=0;MQRankSum=0.696;QD=11.71;ReadPosRankSum=1.175;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;VQSLOD=4.12;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:13,0:14:36:0,36,433 0/0:18,0:18:54 [...]
+1 1163811 rs3831195 G GGACA 3714.19 PASS AC=16;AF=0.160;AN=100;BaseQRankSum=-3.663;DB;DP=741;FS=12.198;HaplotypeScore=14.1352;InbreedingCoeff=0.0859;MLEAC=15;MLEAF=0.150;MQ=58.09;MQ0=0;MQRankSum=-5.029;QD=19.86;RPA=1,2;RU=GACA;ReadPosRankSum=0.005;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263741;STR GT:AD:DP:GQ:PL 0/0:14,0:14:42:0,42,874 0/0:19,0:19:57:0,57,2026 0/0:11,0: [...]
+1 1163964 rs78548753 G A 1451.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=4.790;DB;DP=3750;Dels=0.00;FS=2.183;HaplotypeScore=0.0720;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.61;MQ0=0;MQRankSum=-0.132;QD=11.52;ReadPosRankSum=-1.228;SNPEFF_AMINO_ACID_CHANGE=D70;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1164031 rs61744664 A G 3294.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=10.935;DB;DP=4190;Dels=0.00;FS=0.000;HaplotypeScore=0.1389;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.19;MQ0=0;MQRankSum=0.384;QD=12.62;ReadPosRankSum=-3.406;SNPEFF_AMINO_ACID_CHANGE=V48A;SNPEFF_CODON_CHANGE=gTa/gCa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1164072 rs61745645 C T 2434.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=4.907;DB;DP=2634;Dels=0.00;FS=9.141;HaplotypeScore=0.1683;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.47;MQ0=0;MQRankSum=-0.446;QD=12.36;ReadPosRankSum=-3.326;SNPEFF_AMINO_ACID_CHANGE=A34;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1164090 rs61745652 T C 1875.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-4.382;DB;DP=1996;Dels=0.00;FS=5.493;HaplotypeScore=0.3177;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.72;MQ0=0;MQRankSum=0.417;QD=10.42;ReadPosRankSum=-4.229;SNPEFF_AMINO_ACID_CHANGE=A28;SNPEFF_CODON_CHANGE=gcA/gcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1163848_1164326;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1164179 rs76230175 G A 1172.75 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-0.309;DB;DP=629;Dels=0.00;FS=0.000;HaplotypeScore=0.4909;InbreedingCoeff=-0.0514;MLEAC=4;MLEAF=0.040;MQ=58.59;MQ0=0;MQRankSum=1.204;QD=15.04;ReadPosRankSum=-1.439;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SDF4;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000459994;VQSLOD=6.14;culprit=MQ GT:AD:DP:GQ:PL 0/0:13,0:13:39:0,39,481 0/0:18,0:18:45:0,45,570 [...]
+1 1168180 rs12085009 G C 1325.78 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=1.659;DB;DP=262;Dels=0.00;FS=5.929;HaplotypeScore=0.0894;InbreedingCoeff=0.0222;MLEAC=11;MLEAF=0.110;MQ=58.65;MQ0=0;MQRankSum=3.434;QD=15.07;ReadPosRankSum=-0.612;SNPEFF_AMINO_ACID_CHANGE=E174D;SNPEFF_CODON_CHANGE=gaG/gaC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1167629_1170421;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=B3GALT6;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1177918 rs139102213 CT C 326.60 PASS AC=8;AF=0.091;AN=88;BaseQRankSum=-1.557;DB;DP=157;FS=19.564;HaplotypeScore=2.8667;InbreedingCoeff=0.1163;MLEAC=7;MLEAF=0.080;MQ=57.60;MQ0=0;MQRankSum=1.933;QD=17.19;ReadPosRankSum=-2.531;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000468365 GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,98 0/0:5,0:5:15:0,15,227 0/0:2,0:2:6:0,6,65 1/1:0,2:2:6 [...]
+1 1177981 rs59852185 C T 235.94 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-1.118;DB;DP=299;Dels=0.00;FS=1.607;HaplotypeScore=0.1710;InbreedingCoeff=-0.0718;MLEAC=3;MLEAF=0.030;MQ=58.77;MQ0=0;MQRankSum=1.351;QD=9.44;ReadPosRankSum=-1.332;SNPEFF_AMINO_ACID_CHANGE=V286I;SNPEFF_CODON_CHANGE=Gtc/Atc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1177833_1178026;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;SNP [...]
+1 1178244 rs74511182 G C 1317.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=1.347;DB;DP=1516;Dels=0.00;FS=0.000;HaplotypeScore=1.9453;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.30;MQ0=0;MQRankSum=-0.331;QD=11.26;ReadPosRankSum=0.100;SNPEFF_AMINO_ACID_CHANGE=L261V;SNPEFF_CODON_CHANGE=Cta/Gta;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178215_1178293;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;S [...]
+1 1178245 rs11260566 C T 4707.77 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=1.821;DB;DP=1497;Dels=0.00;FS=2.148;HaplotypeScore=1.8178;InbreedingCoeff=0.0274;MLEAC=13;MLEAF=0.130;MQ=59.30;MQ0=0;MQRankSum=-0.888;QD=11.80;ReadPosRankSum=-1.408;SNPEFF_AMINO_ACID_CHANGE=T260;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178215_1178293;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1178266 rs77651834 C T 1361.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-6.912;DB;DP=1455;Dels=0.00;FS=2.693;HaplotypeScore=0.7635;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.61;MQ0=0;MQRankSum=1.230;QD=11.16;ReadPosRankSum=-0.554;SNPEFF_AMINO_ACID_CHANGE=E253;SNPEFF_CODON_CHANGE=gaG/gaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178215_1178293;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=LOW;SNPEFF_TRANS [...]
+1 1178482 rs78555129 A G 646.55 PASS AC=12;AF=0.120;AN=100;BaseQRankSum=3.052;DB;DP=366;Dels=0.00;FS=0.000;HaplotypeScore=0.2874;InbreedingCoeff=-0.0196;MLEAC=11;MLEAF=0.110;MQ=58.65;MQ0=0;MQRankSum=2.865;QD=7.61;ReadPosRankSum=-2.541;SNPEFF_AMINO_ACID_CHANGE=C231R;SNPEFF_CODON_CHANGE=Tgt/Cgt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178442_1178532;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1178925 rs12093154 G A 224.49 PASS AC=9;AF=0.098;AN=92;BaseQRankSum=-3.680;DB;DP=143;Dels=0.00;FS=0.000;HaplotypeScore=0.0867;InbreedingCoeff=0.0361;MLEAC=9;MLEAF=0.098;MQ=59.06;MQ0=0;MQRankSum=-0.020;QD=10.69;ReadPosRankSum=0.180;SNPEFF_AMINO_ACID_CHANGE=A180V;SNPEFF_CODON_CHANGE=gCc/gTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1178824_1178932;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1179309 rs113164957 G A 762.33 PASS AC=9;AF=0.092;AN=98;BaseQRankSum=2.196;DB;DP=388;Dels=0.00;FS=0.826;HaplotypeScore=0.3006;InbreedingCoeff=0.0684;MLEAC=9;MLEAF=0.092;MQ=57.81;MQ0=0;MQRankSum=0.882;QD=11.05;ReadPosRankSum=0.346;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000486627;VQSLOD=4.70;culprit=MQ GT:AD:DP:GQ:PL 0/0:9,0:9:27:0,27,292 0/0:10,0:10:30:0,30, [...]
+1 1179416 . A C 452.21 VQSRTrancheSNP99.50to99.90 AC=20;AF=0.200;AN=100;BaseQRankSum=-7.343;DP=373;Dels=0.00;FS=263.651;HaplotypeScore=0.5212;InbreedingCoeff=-0.2857;MLEAC=20;MLEAF=0.200;MQ=57.68;MQ0=0;MQRankSum=-2.506;QD=2.43;ReadPosRankSum=-2.504;SNPEFF_AMINO_ACID_CHANGE=V150G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1179334_1179485;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPA [...]
+1 1179720 . G A 398.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.843;DP=1449;Dels=0.00;FS=0.000;HaplotypeScore=0.1730;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.32;MQ0=0;MQRankSum=0.759;QD=12.84;ReadPosRankSum=-0.811;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000330388;VQSLOD=7.66;culprit=FS GT:AD:DP:GQ:PL 0/0:25,0:25:75:0,75,945 0/0:29,0:29:87:0,87,1072 0/0:2 [...]
+1 1179747 rs139237071 C T 119.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.890;DB;DP=1386;Dels=0.00;FS=1.272;HaplotypeScore=0.1482;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=-0.214;QD=7.01;ReadPosRankSum=-1.629;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000330388;VQSLOD=7.54;culprit=QD GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,721 0/0:23,0:23:69:0,6 [...]
+1 1179800 rs115586508 G A 164.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.862;DB;DP=1304;Dels=0.00;FS=3.739;HaplotypeScore=0.3207;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=59.14;MQ0=0;MQRankSum=0.195;QD=10.95;ReadPosRankSum=0.915;SNPEFF_AMINO_ACID_CHANGE=G85;SNPEFF_CODON_CHANGE=ggC/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1179761_1179877;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1179887 . C T 769.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.251;DP=2822;Dels=0.00;FS=4.261;HaplotypeScore=0.3507;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.17;MQ0=0;MQRankSum=0.091;QD=10.39;ReadPosRankSum=0.804;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=FAM132A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000330388;VQSLOD=6.55;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:43,0:43:99:0,129,1438 0/0:36,0:36:99:0, [...]
+1 1190685 rs41303853 G A 968.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.043;DB;DP=4078;Dels=0.00;FS=21.159;HaplotypeScore=0.0388;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.43;MQ0=0;MQRankSum=1.839;QD=13.08;ReadPosRankSum=-3.079;SNPEFF_AMINO_ACID_CHANGE=H174;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1189294_1190867;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1190772 rs142877043 G A 853.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.344;DB;DP=4939;Dels=0.00;FS=2.044;HaplotypeScore=0.0383;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.96;MQ0=0;MQRankSum=1.323;QD=11.38;ReadPosRankSum=-4.114;SNPEFF_AMINO_ACID_CHANGE=L145;SNPEFF_CODON_CHANGE=ctC/ctT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1189294_1190867;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1190913 rs35025185 CT C 5352.41 Indel_FS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.641;DB;DP=2103;FS=916.231;HaplotypeScore=3.2018;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=60.01;MQ0=0;MQRankSum=-0.789;QD=20.20;RPA=3,2;RU=T;ReadPosRankSum=-2.742;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000422076;STR GT:AD:DP:GQ:PL 0/0:58,0:58:99:0,175,2359 0/0:49,0:49:99:0, [...]
+1 1192515 rs7524470 A G 4166.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.197;DB;DP=4240;Dels=0.00;FS=0.393;HaplotypeScore=0.2293;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=58.70;MQ0=0;MQRankSum=3.687;QD=12.29;ReadPosRankSum=-4.441;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000422076;VQSLOD=6.12;culprit=MQ GT:AD:DP:GQ:PL 0/0:94,0:94:99:0,283,3396 0/0:87,0:8 [...]
+1 1203271 rs34496935 G A 2883.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=8.615;DB;DP=6182;Dels=0.00;FS=1.371;HaplotypeScore=0.0772;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.40;MQ0=0;MQRankSum=1.327;QD=12.81;ReadPosRankSum=-2.692;SNPEFF_AMINO_ACID_CHANGE=A34;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1203242_1203372;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=LOW;SNPEFF_TRANS [...]
+1 1203387 rs60981775 G A 6133.20 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=-3.383;DB;DP=5980;Dels=0.00;FS=6.158;HaplotypeScore=0.6739;InbreedingCoeff=-0.0753;MLEAC=7;MLEAF=0.070;MQ=59.68;MQ0=0;MQRankSum=0.617;QD=12.70;ReadPosRankSum=-1.401;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=nonsense_mediated_decay;SNPEFF_GENE_NAME=UBE2J2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000347370;VQSLOD=5.98;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,447 [...]
+1 1219382 rs114582555 C G 88.07 PASS AC=1;AF=0.011;AN=90;BaseQRankSum=-0.452;DB;DP=190;Dels=0.00;FS=2.449;HaplotypeScore=0.1048;InbreedingCoeff=-0.0739;MLEAC=1;MLEAF=0.011;MQ=56.67;MQ0=0;MQRankSum=1.103;QD=12.58;ReadPosRankSum=-2.846;SNPEFF_AMINO_ACID_CHANGE=S29*;SNPEFF_CODON_CHANGE=tCa/tGa;SNPEFF_EFFECT=STOP_GAINED;SNPEFF_EXON_ID=exon_1_1219358_1219470;SNPEFF_FUNCTIONAL_CLASS=NONSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1219477 . T G 36.11 VQSRTrancheSNP98.60to98.80 AC=6;AF=0.077;AN=78;BaseQRankSum=0.033;DP=101;Dels=0.00;FS=0.000;HaplotypeScore=0.2421;InbreedingCoeff=-0.0718;MLEAC=6;MLEAF=0.077;MQ=56.11;MQ0=0;MQRankSum=-1.583;QD=1.90;ReadPosRankSum=-1.911;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000325425;VQSLOD=0.678;culprit=QD GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,74 0/0:1,0:1:3:0,3,33 0/0: [...]
+1 1221302 rs113398060 A G 106.79 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.035;DB;DP=328;Dels=0.00;FS=1.834;HaplotypeScore=0.1742;InbreedingCoeff=-0.0378;MLEAC=1;MLEAF=0.010;MQ=58.35;MQ0=0;MQRankSum=0.755;QD=11.87;ReadPosRankSum=-0.525;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467651;VQSLOD=6.36;culprit=MQ GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,108 0/0:14,0:14:42:0,42,506 0/ [...]
+1 1222267 rs11260579 G C 16654.33 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=10.931;DB;DP=2576;Dels=0.00;FS=17.053;HaplotypeScore=1.6904;InbreedingCoeff=0.3789;MLEAC=23;MLEAF=0.230;MQ=58.83;MQ0=0;MQRankSum=1.663;QD=19.23;ReadPosRankSum=-2.692;SNPEFF_AMINO_ACID_CHANGE=R180P;SNPEFF_CODON_CHANGE=cGc/cCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1222148_1222355;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1222598 rs74046669 C T 707.32 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=2.110;DB;DP=679;Dels=0.00;FS=0.000;HaplotypeScore=0.4005;InbreedingCoeff=-0.0364;MLEAC=3;MLEAF=0.030;MQ=59.14;MQ0=0;MQRankSum=0.423;QD=13.60;ReadPosRankSum=-2.986;SNPEFF_AMINO_ACID_CHANGE=A246V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1222489_1222679;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1222690 rs115316182 C T 149.71 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.632;DB;DP=486;Dels=0.00;FS=0.000;HaplotypeScore=0.7057;InbreedingCoeff=0.0582;MLEAC=2;MLEAF=0.020;MQ=58.09;MQ0=0;MQRankSum=1.446;QD=10.69;ReadPosRankSum=0.068;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467651;VQSLOD=4.27;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:3,6:9:7:148,0,7 0/0:16,0:16:48:0 [...]
+1 1222695 rs910556 G A,C 3136.58 PASS AC=1,30;AF=0.010,0.306;AN=98;BaseQRankSum=-8.335;DB;DP=399;Dels=0.00;FS=3.725;HaplotypeScore=0.5375;InbreedingCoeff=0.3717;MLEAC=1,27;MLEAF=0.010,0.276;MQ=58.47;MQ0=0;MQRankSum=3.912;QD=16.77;ReadPosRankSum=0.033;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467651;VQSLOD=3.00;culprit=MQ GT:AD:DP:GQ:PL 0/0:10,0,0:10:30:0,30,356,30,3 [...]
+1 1222958 rs111819661 C T 753.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.335;DB;DP=1554;Dels=0.00;FS=26.039;HaplotypeScore=0.5055;InbreedingCoeff=-0.0205;MLEAC=2;MLEAF=0.020;MQ=59.26;MQ0=0;MQRankSum=1.368;QD=13.70;ReadPosRankSum=-1.939;SNPEFF_AMINO_ACID_CHANGE=R297C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1222888_1222976;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1222979 . G C 537.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.388;DP=1361;Dels=0.00;FS=1.902;HaplotypeScore=1.6463;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.88;MQ0=0;MQRankSum=1.693;QD=9.26;ReadPosRankSum=1.479;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=2.96;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:57:0,57,671 0/0:24,0:24:66:0,66,819 0/0:19,0:19: [...]
+1 1223248 rs137916996 C T 49.24 PASS AC=1;AF=0.011;AN=94;BaseQRankSum=-2.383;DB;DP=183;Dels=0.00;FS=0.000;HaplotypeScore=0.0723;InbreedingCoeff=-0.0855;MLEAC=1;MLEAF=0.011;MQ=57.45;MQ0=0;MQRankSum=1.124;QD=9.85;ReadPosRankSum=-1.056;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=3.10;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 0/0:8,0:8:24:0,24,309 0/0:2,0: [...]
+1 1223385 rs75809000 G C 747.24 PASS AC=14;AF=0.194;AN=72;BaseQRankSum=1.485;DB;DP=108;Dels=0.00;FS=0.000;HaplotypeScore=0.1209;InbreedingCoeff=0.3797;MLEAC=14;MLEAF=0.194;MQ=56.31;MQ0=0;MQRankSum=0.767;QD=26.69;ReadPosRankSum=-1.386;SNPEFF_AMINO_ACID_CHANGE=E380Q;SNPEFF_CODON_CHANGE=Gag/Cag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1223319_1223417;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1223427 rs13306645 G A 68.49 PASS AC=2;AF=0.026;AN=76;BaseQRankSum=-0.709;DB;DP=108;Dels=0.00;FS=0.000;HaplotypeScore=0.1002;InbreedingCoeff=-0.1338;MLEAC=2;MLEAF=0.026;MQ=56.37;MQ0=0;MQRankSum=2.431;QD=7.61;ReadPosRankSum=0.174;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=4.18;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 0/0:1,0:1:3:0,3,40 0/0:3,0:3:9:0 [...]
+1 1223465 rs138693320 GC G 330.34 PASS AC=12;AF=0.231;AN=52;BaseQRankSum=2.497;DB;DP=51;FS=29.179;HaplotypeScore=1.6007;InbreedingCoeff=0.2611;MLEAC=11;MLEAF=0.212;MQ=55.58;MQ0=0;MQRankSum=1.366;QD=23.60;RPA=2,1;RU=C;ReadPosRankSum=-2.183;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;STR GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,85 ./. 0/0:2,0:2:6:0,6,85 ./. ./. ./. ./. 0/0: [...]
+1 1225612 rs1570866 G A 6059.79 PASS AC=22;AF=0.220;AN=100;BaseQRankSum=6.651;DB;DP=1461;Dels=0.00;FS=5.069;HaplotypeScore=0.7979;InbreedingCoeff=-0.1657;MLEAC=22;MLEAF=0.220;MQ=57.31;MQ0=0;MQRankSum=4.309;QD=10.92;ReadPosRankSum=0.568;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=3.95;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:25,0:25:75:0,75,818 0/1:19,13 [...]
+1 1225641 rs2748384 C A 30492.68 PASS AC=46;AF=0.460;AN=100;BaseQRankSum=-16.000;DB;DP=1816;Dels=0.00;FS=1.320;HaplotypeScore=0.9545;InbreedingCoeff=0.3559;MLEAC=46;MLEAF=0.460;MQ=57.54;MQ0=0;MQRankSum=2.918;QD=24.41;ReadPosRankSum=-0.318;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=4.15;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:34,0:34:99:0,102,1287 0/1:2 [...]
+1 1225707 . C A 110.95 VQSRTrancheSNP99.50to99.90 AC=6;AF=0.060;AN=100;BaseQRankSum=-8.360;DP=1294;Dels=0.00;FS=275.202;HaplotypeScore=1.1456;InbreedingCoeff=-0.0635;MLEAC=4;MLEAF=0.040;MQ=56.84;MQ0=0;MQRankSum=2.351;QD=1.09;ReadPosRankSum=-8.895;SNPEFF_AMINO_ACID_CHANGE=Y409*;SNPEFF_CODON_CHANGE=taC/taA;SNPEFF_EFFECT=STOP_GAINED;SNPEFF_EXON_ID=exon_1_1225651_1225768;SNPEFF_FUNCTIONAL_CLASS=NONSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=HIGH;SNPEFF_TRAN [...]
+1 1225725 rs151184625 G A 527.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.880;DB;DP=1669;Dels=0.00;FS=3.113;HaplotypeScore=0.4579;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.28;MQ0=0;MQRankSum=0.845;QD=11.46;ReadPosRankSum=0.511;SNPEFF_AMINO_ACID_CHANGE=P415;SNPEFF_CODON_CHANGE=ccG/ccA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1225651_1225768;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1225807 . A C 897.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.597;DP=3314;Dels=0.00;FS=0.000;HaplotypeScore=2.0294;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.33;MQ0=0;MQRankSum=1.643;QD=13.80;ReadPosRankSum=1.391;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=2.55;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:31,33:63:99:937,0,901 0/0:60,0:60:99:0,181,2 [...]
+1 1225810 rs5772040 C CGG 2418.41 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=1.280;DB;DP=3310;FS=129.611;HaplotypeScore=12.4007;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=58.52;MQ0=0;MQRankSum=1.895;QD=8.23;RPA=6,8;RU=G;ReadPosRankSum=-4.470;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;STR GT:AD:DP:GQ:PL 0/0:59,0:65:99:0,178,2647 0/0:61,0:61:99:0,184,2759 0/0:53, [...]
+1 1225824 rs115732504 G A 772.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.797;DB;DP=3467;Dels=0.00;FS=2.828;HaplotypeScore=0.5985;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.77;MQ0=0;MQRankSum=-2.151;QD=6.83;ReadPosRankSum=-3.265;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=3.71;culprit=MQ GT:AD:DP:GQ:PL 0/0:74,0:74:99:0,210,2233 0/0:69,0:69:99:0,208 [...]
+1 1225945 rs79772714 G C 3977.47 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-5.335;DB;DP=2857;Dels=0.00;FS=51.712;HaplotypeScore=0.7129;InbreedingCoeff=-0.0638;MLEAC=6;MLEAF=0.060;MQ=58.95;MQ0=0;MQRankSum=-0.285;QD=12.28;ReadPosRankSum=-1.738;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=0.996;culprit=FS GT:AD:DP:GQ:PL 0/0:66,0:66:99:0,199,2441 0/0:67,0:67:99:0 [...]
+1 1225959 rs1570867 C G 49652.70 VQSRTrancheSNP98.80to98.90 AC=54;AF=0.540;AN=100;BaseQRankSum=11.168;DB;DP=2689;Dels=0.00;FS=82.204;HaplotypeScore=1.0724;InbreedingCoeff=0.2754;MLEAC=54;MLEAF=0.540;MQ=59.08;MQ0=0;MQRankSum=-1.083;QD=25.79;ReadPosRankSum=0.236;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=0.223;culprit=FS GT:AD:DP:GQ:PL 0/0:57,0:57:99:0,171 [...]
+1 1225986 rs13306650 G A 428.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.569;DB;DP=2962;Dels=0.00;FS=8.714;HaplotypeScore=1.6241;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.99;MQ0=0;MQRankSum=1.163;QD=7.65;ReadPosRankSum=-0.086;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=3.20;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:52,0:52:99:0,156,1739 0/0:63,0:6 [...]
+1 1225991 rs115582722 A G 386.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.565;DB;DP=2998;Dels=0.00;FS=0.000;HaplotypeScore=1.8031;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.04;MQ0=0;MQRankSum=1.252;QD=8.98;ReadPosRankSum=-2.537;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=2.98;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:50,0:50:99:0,150,1806 0/0:62,0 [...]
+1 1226102 rs2273274 G A 12467.30 PASS AC=24;AF=0.240;AN=100;BaseQRankSum=-11.211;DB;DP=1601;Dels=0.00;FS=0.000;HaplotypeScore=0.7788;InbreedingCoeff=0.2324;MLEAC=24;MLEAF=0.240;MQ=59.02;MQ0=0;MQRankSum=1.892;QD=18.39;ReadPosRankSum=-0.153;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=5.06;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:35,0:35:99:0,105,1234 0/0:3 [...]
+1 1226231 rs13306638 G A 1030.27 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-5.950;DB;DP=563;Dels=0.00;FS=1.368;HaplotypeScore=1.9117;InbreedingCoeff=-0.0955;MLEAC=8;MLEAF=0.080;MQ=58.43;MQ0=0;MQRankSum=2.423;QD=10.30;ReadPosRankSum=-0.588;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=4.10;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:17,0:17:51:0,51,632 0/0:21,0:2 [...]
+1 1226233 rs113099499 G A 532.74 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-4.137;DB;DP=559;Dels=0.00;FS=0.000;HaplotypeScore=1.1002;InbreedingCoeff=-0.0515;MLEAC=4;MLEAF=0.040;MQ=58.42;MQ0=0;MQRankSum=2.019;QD=10.05;ReadPosRankSum=0.211;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=3.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,541 0/0:20,0:20 [...]
+1 1226267 rs13306640 G A 890.18 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=2.523;DB;DP=722;Dels=0.00;FS=2.445;HaplotypeScore=0.5283;InbreedingCoeff=-0.0328;MLEAC=3;MLEAF=0.030;MQ=58.96;MQ0=0;MQRankSum=-0.552;QD=12.36;ReadPosRankSum=-0.873;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=7.06;culprit=MQ GT:AD:DP:GQ:PL 0/0:13,0:13:39:0,39,440 0/0:24,0:24:72:0,72,828 [...]
+1 1226292 rs2273276 G A 2155.27 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=2.053;DB;DP=575;Dels=0.00;FS=1.302;HaplotypeScore=0.4650;InbreedingCoeff=0.5299;MLEAC=13;MLEAF=0.130;MQ=59.05;MQ0=0;MQRankSum=0.725;QD=21.99;ReadPosRankSum=-1.288;SNPEFF_AMINO_ACID_CHANGE=T481;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226275_1226333;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1226307 . G C 64.13 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-10.181;DP=627;Dels=0.00;FS=242.902;HaplotypeScore=0.5136;InbreedingCoeff=-0.1322;MLEAC=9;MLEAF=0.090;MQ=59.27;MQ0=0;MQRankSum=0.459;QD=0.59;ReadPosRankSum=-0.392;SNPEFF_AMINO_ACID_CHANGE=G486;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226275_1226333;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=LOW;SNPEFF_TR [...]
+1 1226348 rs586965 C G 8426.55 PASS AC=49;AF=0.490;AN=100;BaseQRankSum=-4.884;DB;DP=534;Dels=0.00;FS=1.745;HaplotypeScore=0.9320;InbreedingCoeff=0.2932;MLEAC=49;MLEAF=0.490;MQ=59.15;MQ0=0;MQRankSum=-0.320;QD=23.34;ReadPosRankSum=0.426;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=4.54;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:9,0:9:24:0,24,301 0/1:7,8:15:99 [...]
+1 1226350 rs114416421 C T 630.48 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-3.227;DB;DP=560;Dels=0.00;FS=4.583;HaplotypeScore=0.9048;InbreedingCoeff=-0.0405;MLEAC=3;MLEAF=0.030;MQ=59.23;MQ0=0;MQRankSum=0.413;QD=14.33;ReadPosRankSum=-0.306;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=6.75;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:10,0:10:30:0,30,359 0/0:15,0:1 [...]
+1 1226418 . C T 62.24 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.875;DP=717;Dels=0.00;FS=0.000;HaplotypeScore=0.5164;InbreedingCoeff=-0.0137;MLEAC=1;MLEAF=0.010;MQ=59.29;MQ0=0;MQRankSum=0.353;QD=4.79;ReadPosRankSum=0.601;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=4.04;culprit=QD GT:AD:DP:GQ:PL 0/0:8,0:8:21:0,21,257 0/0:5,0:5:15:0,15,176 0/0:10,0:10:27:0,2 [...]
+1 1226419 . G A 51.22 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.129;DP=749;Dels=0.00;FS=2.886;HaplotypeScore=0.4541;InbreedingCoeff=-0.0124;MLEAC=1;MLEAF=0.010;MQ=59.24;MQ0=0;MQRankSum=1.689;QD=7.32;ReadPosRankSum=0.289;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=5.03;culprit=QD GT:AD:DP:GQ:PL 0/0:8,0:8:21:0,21,219 0/0:5,0:5:15:0,15,158 0/0:10,0:10:24:0,24 [...]
+1 1226423 rs12743218 T C 257 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=2.120;DB;DP=799;Dels=0.00;FS=0.000;HaplotypeScore=0.4344;InbreedingCoeff=0.6171;MLEAC=2;MLEAF=0.020;MQ=59.30;MQ0=0;MQRankSum=0.135;QD=16.06;ReadPosRankSum=1.529;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000353662;VQSLOD=4.24;culprit=FS GT:AD:DP:GQ:PL 0/0:9,0:9:24:0,24,300 0/0:8,0:8:24:0,24,296 0/0:10,0: [...]
+1 1226508 . G A 197.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.528;DP=1042;Dels=0.00;FS=3.316;HaplotypeScore=0.5013;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.75;MQ0=0;MQRankSum=0.292;QD=10.95;ReadPosRankSum=-1.764;SNPEFF_AMINO_ACID_CHANGE=A516;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226445_1226520;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0000033 [...]
+1 1226512 rs114257304 G A 106.84 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-0.900;DB;DP=986;Dels=0.00;FS=0.000;HaplotypeScore=0.5586;InbreedingCoeff=-0.0187;MLEAC=1;MLEAF=0.010;MQ=59.69;MQ0=0;MQRankSum=-0.130;QD=5.09;ReadPosRankSum=-0.081;SNPEFF_AMINO_ACID_CHANGE=V518M;SNPEFF_CODON_CHANGE=Gtg/Atg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226445_1226520;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1226690 rs114720027 C T 351.49 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.773;DB;DP=550;Dels=0.00;FS=4.262;HaplotypeScore=0.1621;InbreedingCoeff=-0.0295;MLEAC=2;MLEAF=0.020;MQ=58.87;MQ0=0;MQRankSum=1.640;QD=11.34;ReadPosRankSum=-1.568;SNPEFF_AMINO_ACID_CHANGE=S539;SNPEFF_CODON_CHANGE=tcC/tcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1226757 rs6690013 G A 1749.79 PASS AC=15;AF=0.150;AN=100;BaseQRankSum=1.042;DB;DP=619;Dels=0.00;FS=12.041;HaplotypeScore=0.3167;InbreedingCoeff=-0.0313;MLEAC=15;MLEAF=0.150;MQ=58.25;MQ0=0;MQRankSum=-0.068;QD=11.82;ReadPosRankSum=-2.367;SNPEFF_AMINO_ACID_CHANGE=G562S;SNPEFF_CODON_CHANGE=Ggc/Agc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1226851 rs61730205 C T 630.15 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-1.472;DB;DP=1013;Dels=0.00;FS=0.834;HaplotypeScore=0.3216;InbreedingCoeff=0.0159;MLEAC=3;MLEAF=0.030;MQ=59.07;MQ0=0;MQRankSum=-0.293;QD=13.70;ReadPosRankSum=-0.829;SNPEFF_AMINO_ACID_CHANGE=P593L;SNPEFF_CODON_CHANGE=cCg/cTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1226889 rs609805 G A 5555.09 PASS AC=16;AF=0.160;AN=100;BaseQRankSum=5.838;DB;DP=1216;Dels=0.00;FS=0.359;HaplotypeScore=0.4783;InbreedingCoeff=0.1058;MLEAC=16;MLEAF=0.160;MQ=59.16;MQ0=0;MQRankSum=0.413;QD=16.63;ReadPosRankSum=-2.001;SNPEFF_AMINO_ACID_CHANGE=G606R;SNPEFF_CODON_CHANGE=Ggg/Agg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 1226971 rs75670559 T C 828.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=4.484;DB;DP=1649;Dels=0.00;FS=7.459;HaplotypeScore=0.3037;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.38;MQ0=0;MQRankSum=1.277;QD=13.80;ReadPosRankSum=-1.432;SNPEFF_AMINO_ACID_CHANGE=L633P;SNPEFF_CODON_CHANGE=cTt/cCt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1226634_1227404;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SCNN1D;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 1229114 rs2281459 C A 180.39 PASS AC=5;AF=0.096;AN=52;BaseQRankSum=-2.513;DB;DP=71;Dels=0.00;FS=8.922;HaplotypeScore=0.2838;InbreedingCoeff=-0.0121;MLEAC=6;MLEAF=0.115;MQ=54.10;MQ0=3;MQRankSum=0.100;QD=9.02;ReadPosRankSum=-0.963;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379037;VQSLOD=2.04;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 0/0:2,0:2:6:0,6,80 ./. 0/0:4 [...]
+1 1229538 rs148138514 C T 49.97 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=0.185;DB;DP=337;Dels=0.00;FS=0.000;HaplotypeScore=0.1842;InbreedingCoeff=-0.0432;MLEAC=1;MLEAF=0.010;MQ=59.00;MQ0=0;MQRankSum=1.305;QD=6.25;ReadPosRankSum=-1.135;SNPEFF_AMINO_ACID_CHANGE=A652;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1229470_1229579;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1229770 rs6669227 T C 344.92 PASS AC=3;AF=0.032;AN=94;BaseQRankSum=0.348;DB;DP=230;Dels=0.00;FS=1.761;HaplotypeScore=0.2132;InbreedingCoeff=0.2016;MLEAC=3;MLEAF=0.032;MQ=58.68;MQ0=0;MQRankSum=1.304;QD=24.64;ReadPosRankSum=-1.017;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000379037;VQSLOD=5.97;culprit=MQ GT:AD:DP:GQ:PL 0/0:7,0:7:21:0,21,240 0/0:8,0:8:24:0,24,282 0/0:2,0 [...]
+1 1231334 rs74045416 A G 2239.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=5.291;DB;DP=2958;Dels=0.00;FS=0.000;HaplotypeScore=0.0581;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.33;MQ0=0;MQRankSum=1.917;QD=16.23;ReadPosRankSum=-3.308;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=6.95;culprit=FS GT:AD:DP:GQ:PL 0/0:59,0:59:99:0,178,2080 0/0:49,0:49:99:0,147 [...]
+1 1231507 rs619608 G A 4389.09 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=-8.367;DB;DP=1068;Dels=0.00;FS=12.775;HaplotypeScore=0.2660;InbreedingCoeff=0.0786;MLEAC=17;MLEAF=0.170;MQ=59.65;MQ0=0;MQRankSum=0.732;QD=15.13;ReadPosRankSum=-3.131;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=5.72;culprit=FS GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,759 0/1:7,7:14:99:222,0,1 [...]
+1 1231587 rs139600717 G A 236.35 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-1.876;DB;DP=427;Dels=0.00;FS=3.324;HaplotypeScore=0.1459;InbreedingCoeff=-0.0480;MLEAC=3;MLEAF=0.030;MQ=59.04;MQ0=0;MQRankSum=2.214;QD=8.15;ReadPosRankSum=-1.338;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=6.23;culprit=QD GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,289 0/0:9,0:9:27:0,27,312 0/0 [...]
+1 1231656 rs1749951 G A 748.97 PASS AC=8;AF=0.083;AN=96;BaseQRankSum=-0.808;DB;DP=271;Dels=0.00;FS=0.000;HaplotypeScore=0.1307;InbreedingCoeff=0.0346;MLEAC=7;MLEAF=0.073;MQ=58.76;MQ0=0;MQRankSum=-0.489;QD=14.69;ReadPosRankSum=-2.196;SNPEFF_AMINO_ACID_CHANGE=L406;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1231591_1231660;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 1233332 rs111910661 C T 236.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.292;DB;DP=922;Dels=0.00;FS=0.000;HaplotypeScore=0.2175;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=57.62;MQ0=0;MQRankSum=1.205;QD=11.25;ReadPosRankSum=-0.589;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=3.68;culprit=MQ GT:AD:DP:GQ:PL 0/0:15,0:15:42:0,42,442 0/0:16,0:16:48:0,48,520 [...]
+1 1233431 rs72896223 G A 526.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.918;DB;DP=1116;Dels=0.00;FS=0.000;HaplotypeScore=0.2622;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=59.01;MQ0=0;MQRankSum=1.370;QD=11.69;ReadPosRankSum=-0.414;SNPEFF_AMINO_ACID_CHANGE=I284;SNPEFF_CODON_CHANGE=atC/atT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1233393_1233493;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1233912 . A G 321.40 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.955;DP=656;Dels=0.00;FS=9.470;HaplotypeScore=0.4190;InbreedingCoeff=-0.0204;MLEAC=1;MLEAF=0.010;MQ=59.01;MQ0=0;MQRankSum=0.788;QD=11.08;ReadPosRankSum=-0.829;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=6.00;culprit=MQ GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,412 0/0:10,0:10:30:0,30,354 0/0:11,0:11: [...]
+1 1233921 . G A 573.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.298;DP=1114;Dels=0.00;FS=7.313;HaplotypeScore=0.4787;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=58.92;MQ0=0;MQRankSum=-0.852;QD=12.46;ReadPosRankSum=-1.628;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=5.37;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,663 0/0:19,0:19:57:0,57,606 0/0:13,0:1 [...]
+1 1233941 rs1739855 T C 37046.38 PASS AC=44;AF=0.440;AN=100;BaseQRankSum=6.371;DB;DP=2355;Dels=0.00;FS=1.559;HaplotypeScore=0.9307;InbreedingCoeff=0.4318;MLEAC=44;MLEAF=0.440;MQ=59.11;MQ0=0;MQRankSum=-1.651;QD=26.48;ReadPosRankSum=-0.024;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=4.50;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:50,0:50:99:0,150,1849 0/1:20 [...]
+1 1233955 rs140458556 T A 260.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.302;DB;DP=3190;Dels=0.00;FS=0.000;HaplotypeScore=0.8920;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.12;MQ0=0;MQRankSum=0.256;QD=9.29;ReadPosRankSum=0.208;SNPEFF_AMINO_ACID_CHANGE=T243;SNPEFF_CODON_CHANGE=acA/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1233947_1234059;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1234762 rs143899579 AG A 1858.62 PASS AC=18;AF=0.180;AN=100;BaseQRankSum=-1.186;DB;DP=401;FS=73.267;HaplotypeScore=3.2309;InbreedingCoeff=0.1907;MLEAC=16;MLEAF=0.160;MQ=59.58;MQ0=0;MQRankSum=0.302;QD=15.89;RPA=5,4;RU=G;ReadPosRankSum=-1.551;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;STR GT:AD:DP:GQ:PL 0/0:9,0:10:27:0,27,336 0/1:1,5:6:19:174,0,19 0/0:8,0:8:24: [...]
+1 1235511 rs144299532 G C 926.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.054;DB;DP=2389;Dels=0.00;FS=14.956;HaplotypeScore=0.2037;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.61;MQ0=0;MQRankSum=1.171;QD=11.87;ReadPosRankSum=-2.547;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=6.44;culprit=MQ GT:AD:DP:GQ:PL 0/0:41,0:41:99:0,123,1516 0/0:43,0:43:99:0,12 [...]
+1 1235604 rs75245886 G A 82.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.801;DB;DP=1222;Dels=0.00;FS=0.000;HaplotypeScore=0.3318;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.09;MQ0=0;MQRankSum=0.009;QD=8.22;ReadPosRankSum=-1.114;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=7.52;culprit=FS GT:AD:DP:GQ:PL 0/0:24,0:24:72:0,72,887 0/0:20,0:20:60:0,60,765 [...]
+1 1235845 rs60785581 C T 1897.26 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-2.520;DB;DP=1321;Dels=0.00;FS=0.877;HaplotypeScore=0.4379;InbreedingCoeff=0.4784;MLEAC=4;MLEAF=0.040;MQ=59.37;MQ0=0;MQRankSum=-0.404;QD=20.85;ReadPosRankSum=1.724;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000354980;VQSLOD=5.67;culprit=FS GT:AD:DP:GQ:PL 0/0:26,0:26:78:0,78,939 0/0:17,0:17:48:0,48,61 [...]
+1 1238492 rs12408158 G A 1233.58 PASS AC=13;AF=0.133;AN=98;BaseQRankSum=2.281;DB;DP=298;Dels=0.00;FS=5.926;HaplotypeScore=0.2458;InbreedingCoeff=0.0952;MLEAC=13;MLEAF=0.133;MQ=58.74;MQ0=0;MQRankSum=1.026;QD=18.14;ReadPosRankSum=-0.045;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000438966;VQSLOD=6.24;culprit=MQ GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,184 0/0:9,0:9:27:0,27,315 0/0 [...]
+1 1238583 rs145087137 G A 163.28 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.803;DB;DP=594;Dels=0.00;FS=9.862;HaplotypeScore=0.5034;InbreedingCoeff=-0.0156;MLEAC=1;MLEAF=0.010;MQ=59.18;MQ0=0;MQRankSum=0.540;QD=9.60;ReadPosRankSum=-0.464;SNPEFF_AMINO_ACID_CHANGE=R20C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1238542_1238661;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ACAP3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1244627 . C T 178.75 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.223;DP=364;Dels=0.00;FS=8.500;HaplotypeScore=0.4031;InbreedingCoeff=-0.0379;MLEAC=1;MLEAF=0.010;MQ=58.29;MQ0=0;MQRankSum=1.785;QD=11.17;ReadPosRankSum=-0.175;SNPEFF_AMINO_ACID_CHANGE=N99;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1244466_1244653;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0000037903 [...]
+1 1244638 rs12094447 G A 430.65 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.278;DB;DP=351;Dels=0.00;FS=0.000;HaplotypeScore=0.2510;InbreedingCoeff=-0.0648;MLEAC=3;MLEAF=0.030;MQ=58.49;MQ0=0;MQRankSum=1.055;QD=13.46;ReadPosRankSum=-0.559;SNPEFF_AMINO_ACID_CHANGE=R103Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1244466_1244653;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 1244924 . T G 44.87 VQSRTrancheSNP99.50to99.90 AC=9;AF=0.090;AN=100;BaseQRankSum=-4.592;DP=358;Dels=0.00;FS=87.843;HaplotypeScore=0.4217;InbreedingCoeff=-0.1319;MLEAC=8;MLEAF=0.080;MQ=58.51;MQ0=0;MQRankSum=2.155;QD=0.79;ReadPosRankSum=-3.434;SNPEFF_AMINO_ACID_CHANGE=C138W;SNPEFF_CODON_CHANGE=tgT/tgG;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1244834_1244983;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=MODERATE;S [...]
+1 1245176 rs34738574 C T 389.27 PASS AC=4;AF=0.044;AN=90;BaseQRankSum=0.969;DB;DP=196;Dels=0.00;FS=3.010;HaplotypeScore=0.1265;InbreedingCoeff=0.1584;MLEAC=4;MLEAF=0.044;MQ=57.81;MQ0=0;MQRankSum=0.817;QD=16.92;ReadPosRankSum=-3.533;SNPEFF_AMINO_ACID_CHANGE=R197W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1245061_1245231;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 1246004 rs2296474 A G 228650.47 PASS AC=94;AF=0.940;AN=100;BaseQRankSum=13.172;DB;DP=6275;Dels=0.00;FS=1.095;HaplotypeScore=0.3126;InbreedingCoeff=-0.0638;MLEAC=94;MLEAF=0.940;MQ=59.31;MQ0=0;MQRankSum=-2.817;QD=36.44;ReadPosRankSum=2.787;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000294579;VQSLOD=4.22;culprit=MQRankSum GT:AD:DP:GQ:PL 1/1:0,127:127:99:4800,382,0 0/1:4 [...]
+1 1246256 rs142589758 CGGCTCTGGGTCACAGGT C 722.20 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-0.990;DB;DP=4535;FS=184.849;HaplotypeScore=32.8539;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=49.49;MQ0=0;MQRankSum=2.223;QD=6.17;RPA=2,1;RU=GGCTCTGGGTCACAGGT;ReadPosRankSum=-3.495;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000294579;STR GT:AD:DP:GQ:PL 0/1:29,8:46:99:295,0,449 [...]
+1 1246303 rs41285824 G A 2870.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.171;DB;DP=5086;Dels=0.00;FS=4.676;HaplotypeScore=0.7060;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=50.88;MQ0=9;MQRankSum=5.683;QD=14.42;ReadPosRankSum=0.472;SNPEFF_AMINO_ACID_CHANGE=T238;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1246289_1246451;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1246438 rs115163464 G A 839.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.161;DB;DP=4467;Dels=0.00;FS=0.000;HaplotypeScore=0.7353;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.21;MQ0=0;MQRankSum=3.392;QD=11.50;ReadPosRankSum=-1.923;SNPEFF_AMINO_ACID_CHANGE=L283;SNPEFF_CODON_CHANGE=ctG/ctA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1246289_1246451;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1246444 . G T 618.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-6.051;DP=4216;Dels=0.00;FS=2.053;HaplotypeScore=0.8977;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.39;MQ0=0;MQRankSum=1.516;QD=8.47;ReadPosRankSum=-5.360;SNPEFF_AMINO_ACID_CHANGE=G285;SNPEFF_CODON_CHANGE=ggG/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1246289_1246451;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PUSL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST000003790 [...]
+1 1246484 rs112356049 T C 2099.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-8.047;DB;DP=2127;Dels=0.00;FS=0.653;HaplotypeScore=1.9599;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=57.79;MQ0=0;MQRankSum=0.814;QD=11.79;ReadPosRankSum=-2.848;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000294579;VQSLOD=3.86;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:42,0:42:99:0,126,1517 0/0: [...]
+1 1246487 rs78028248 G A 1800.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-10.302;DB;DP=2023;Dels=0.00;FS=3.829;HaplotypeScore=1.9729;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=57.79;MQ0=0;MQRankSum=4.543;QD=15.79;ReadPosRankSum=-4.889;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000294579;VQSLOD=3.43;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:42,0:42:99:0,126,1553 0/0: [...]
+1 1247494 rs12103 T C 3788.14 PASS AC=40;AF=0.400;AN=100;BaseQRankSum=-4.750;DB;DP=494;Dels=0.00;FS=4.386;HaplotypeScore=0.1702;InbreedingCoeff=0.3632;MLEAC=39;MLEAF=0.390;MQ=58.72;MQ0=0;MQRankSum=-0.625;QD=16.76;ReadPosRankSum=-0.103;SNPEFF_AMINO_ACID_CHANGE=P349;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1247398_1247527;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1247555 rs113412865 C T 508.19 PASS AC=5;AF=0.051;AN=98;BaseQRankSum=-2.750;DB;DP=248;Dels=0.00;FS=6.263;HaplotypeScore=0.3093;InbreedingCoeff=0.0758;MLEAC=4;MLEAF=0.041;MQ=59.17;MQ0=0;MQRankSum=1.717;QD=12.10;ReadPosRankSum=0.257;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000430786;VQSLOD=5.92;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,185 0/0:6,0:6:18:0,18, [...]
+1 1247578 rs70949570 TG TGGGGGG,T 530.77 PASS AC=11,9;AF=0.212,0.173;AN=52;BaseQRankSum=-1.410;DB;DP=140;FS=0.000;HaplotypeScore=3.7797;InbreedingCoeff=0.5288;MLEAC=9,9;MLEAF=0.173,0.173;MQ=57.47;MQ0=0;MQRankSum=0.902;QD=7.58;RPA=10,15,9;RU=G;ReadPosRankSum=-0.754;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000430786;STR GT:AD:DP:GQ:PL ./. 1/2:0,1,3:6:19:103,84,154,26,0 [...]
+1 1249187 rs12142199 G A 48424.78 PASS AC=39;AF=0.390;AN=100;BaseQRankSum=5.699;DB;DP=4320;Dels=0.00;FS=2.858;HaplotypeScore=0.4817;InbreedingCoeff=0.3695;MLEAC=39;MLEAF=0.390;MQ=59.47;MQ0=0;MQRankSum=-0.066;QD=24.06;ReadPosRankSum=0.317;SNPEFF_AMINO_ACID_CHANGE=F187;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1249112_1249301;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 1250228 rs2296473 G A 4417.23 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-0.086;DB;DP=2966;Dels=0.00;FS=0.000;HaplotypeScore=0.0499;InbreedingCoeff=1.0000;MLEAC=2;MLEAF=0.020;MQ=59.70;MQ0=0;MQRankSum=0.450;QD=34.78;ReadPosRankSum=1.636;SNPEFF_AMINO_ACID_CHANGE=H102;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1250207_1250342;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1250318 rs12095333 G A 2382.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-10.612;DB;DP=2544;Dels=0.00;FS=6.334;HaplotypeScore=0.3067;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.58;MQ0=0;MQRankSum=-0.572;QD=12.74;ReadPosRankSum=-1.631;SNPEFF_AMINO_ACID_CHANGE=R167;SNPEFF_CODON_CHANGE=cgC/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1250204_1250342;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1250957 rs34054191 G A 787.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.274;DB;DP=3028;Dels=0.00;FS=5.938;HaplotypeScore=0.1910;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.89;MQ0=0;MQRankSum=-0.727;QD=11.41;ReadPosRankSum=0.555;SNPEFF_AMINO_ACID_CHANGE=H128;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1250900_1250998;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1254841 rs10907179 C G 111191.07 PASS AC=69;AF=0.690;AN=100;BaseQRankSum=-3.024;DB;DP=4492;Dels=0.00;FS=3.636;HaplotypeScore=0.5490;InbreedingCoeff=0.4857;MLEAC=69;MLEAF=0.690;MQ=59.38;MQ0=0;MQRankSum=0.691;QD=31.88;ReadPosRankSum=-1.030;SNPEFF_AMINO_ACID_CHANGE=G100;SNPEFF_CODON_CHANGE=ggG/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1254713_1254904;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1256507 . G GC 647.13 Indel_FS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.999;DP=1861;FS=218.924;HaplotypeScore=1.7167;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.32;MQ0=0;MQRankSum=-0.191;QD=11.16;RPA=6,7;RU=C;ReadPosRankSum=-2.162;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=CPSF3L;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000530233;STR GT:AD:DP:GQ:PL 0/0:26,0:26:78:0,78,916 0/0:24,0:24:72:0,72,846 0/0:34,0:34:99:0 [...]
+1 1262276 rs113667133 C T 3467.10 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=2.521;DB;DP=2831;Dels=0.00;FS=4.811;HaplotypeScore=0.0710;InbreedingCoeff=0.6564;MLEAC=3;MLEAF=0.030;MQ=59.62;MQ0=0;MQRankSum=0.661;QD=26.27;ReadPosRankSum=-1.135;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464957;VQSLOD=6.78;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:54,0:54:99:0,162,1904 0 [...]
+1 1262571 rs147108733 C T 505.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.490;DB;DP=1250;Dels=0.00;FS=0.000;HaplotypeScore=0.5523;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=0.538;QD=11.75;ReadPosRankSum=1.730;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000343938;VQSLOD=6.66;culprit=FS GT:AD:DP:GQ:PL 0/0:22,0:22:60:0,60,720 0/0:38,0:38:99:0,10 [...]
+1 1262591 rs2296472 C T 22943.98 PASS AC=67;AF=0.670;AN=100;BaseQRankSum=-6.221;DB;DP=1285;Dels=0.00;FS=11.713;HaplotypeScore=0.8526;InbreedingCoeff=0.4136;MLEAC=67;MLEAF=0.670;MQ=59.47;MQ0=0;MQRankSum=-1.634;QD=23.95;ReadPosRankSum=0.808;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000343938;VQSLOD=4.03;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:1,24:26:72:761,72,0 0/1: [...]
+1 1262695 rs148629756 G A 750.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.914;DB;DP=1699;Dels=0.00;FS=3.457;HaplotypeScore=0.2702;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=59.54;MQ0=0;MQRankSum=1.397;QD=11.91;ReadPosRankSum=-2.277;SNPEFF_AMINO_ACID_CHANGE=R66H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1262621_1264277;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1262966 rs307349 C T 15751.52 PASS AC=71;AF=0.710;AN=100;BaseQRankSum=-7.103;DB;DP=741;Dels=0.00;FS=1.306;HaplotypeScore=0.2878;InbreedingCoeff=0.4231;MLEAC=71;MLEAF=0.710;MQ=59.01;MQ0=0;MQRankSum=-1.199;QD=28.03;ReadPosRankSum=0.530;SNPEFF_AMINO_ACID_CHANGE=R156;SNPEFF_CODON_CHANGE=cgC/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1262621_1264277;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1263144 rs307350 G A 61577.11 PASS AC=81;AF=0.810;AN=100;BaseQRankSum=-7.493;DB;DP=2366;Dels=0.00;FS=0.000;HaplotypeScore=0.5978;InbreedingCoeff=0.0253;MLEAC=81;MLEAF=0.810;MQ=59.20;MQ0=0;MQRankSum=-0.798;QD=26.88;ReadPosRankSum=-1.953;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000488011;VQSLOD=5.43;culprit=FS GT:AD:DP:GQ:PL 1/1:0,26:26:78:917,78,0 0/1:26,26:52: [...]
+1 1263194 . G A 402.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.657;DP=1430;Dels=0.00;FS=0.000;HaplotypeScore=0.4640;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=59.71;MQ0=0;MQRankSum=0.634;QD=14.36;ReadPosRankSum=0.564;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=GLTPD1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000488011;VQSLOD=5.37;culprit=FS GT:AD:DP:GQ:PL 0/0:24,0:24:72:0,72,846 0/0:23,0:23:69:0,69,833 0/0: [...]
+1 1266738 rs76755863 G A 321.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.891;DB;DP=1409;Dels=0.00;FS=0.000;HaplotypeScore=0.4947;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=59.27;MQ0=0;MQRankSum=0.793;QD=7.65;ReadPosRankSum=-0.075;SNPEFF_AMINO_ACID_CHANGE=A5T;SNPEFF_CODON_CHANGE=Gct/Act;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1266694_1266916;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 1266740 rs141430443 T A 392.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.086;DB;DP=1420;Dels=0.00;FS=0.000;HaplotypeScore=0.4761;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=59.26;MQ0=0;MQRankSum=0.586;QD=9.34;ReadPosRankSum=-0.509;SNPEFF_AMINO_ACID_CHANGE=A5;SNPEFF_CODON_CHANGE=gcT/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1266694_1266916;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1267325 . G GC 7409.93 Indel_FS AC=21;AF=0.210;AN=100;BaseQRankSum=-1.327;DP=1251;FS=497.083;HaplotypeScore=6.8430;InbreedingCoeff=0.5697;MLEAC=20;MLEAF=0.200;MQ=59.15;MQ0=0;MQRankSum=0.920;QD=19.05;RPA=6,7;RU=C;ReadPosRankSum=-3.890;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263743;STR GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,529 0/0:31,0:31:93:0,93,1392 0/0:21,0:21:63:0, [...]
+1 1267332 . A C 168.13 VQSRTrancheSNP99.30to99.50 AC=5;AF=0.050;AN=100;BaseQRankSum=4.858;DP=1288;Dels=0.00;FS=25.392;HaplotypeScore=4.3986;InbreedingCoeff=-0.0569;MLEAC=5;MLEAF=0.050;MQ=59.00;MQ0=0;MQRankSum=-0.292;QD=1.32;ReadPosRankSum=-6.418;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263743;VQSLOD=-1.073e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,635 0/0:31, [...]
+1 1267651 rs111615792 G A 1183.78 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-1.023;DB;DP=637;Dels=0.00;FS=0.000;HaplotypeScore=0.4612;InbreedingCoeff=-0.0686;MLEAC=6;MLEAF=0.060;MQ=58.79;MQ0=0;MQRankSum=-1.028;QD=10.29;ReadPosRankSum=-0.120;SNPEFF_AMINO_ACID_CHANGE=R247H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1267993 . TGGA T 326.14 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.096;DP=1175;FS=29.175;HaplotypeScore=8.4510;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.35;MQ0=0;MQRankSum=0.370;QD=14.82;RPA=3,2;RU=GGA;ReadPosRankSum=-1.828;SNPEFF_AMINO_ACID_CHANGE=LE361L;SNPEFF_CODON_CHANGE=ctggag/ctg;SNPEFF_EFFECT=CODON_DELETION;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ [...]
+1 1268000 . G C 602.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.811;DP=1121;Dels=0.00;FS=0.997;HaplotypeScore=1.3484;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.36;MQ0=0;MQRankSum=0.325;QD=13.69;ReadPosRankSum=-0.411;SNPEFF_AMINO_ACID_CHANGE=E363D;SNPEFF_CODON_CHANGE=gaG/gaC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID [...]
+1 1268010 rs147600530 G T 290.29 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.409;DB;DP=1025;Dels=0.00;FS=8.338;HaplotypeScore=1.1633;InbreedingCoeff=-0.0145;MLEAC=1;MLEAF=0.010;MQ=59.36;MQ0=0;MQRankSum=-0.861;QD=10.75;ReadPosRankSum=0.634;SNPEFF_AMINO_ACID_CHANGE=G367C;SNPEFF_CODON_CHANGE=Ggc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1268017 rs143359998 G A 286.21 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.905;DB;DP=960;Dels=0.00;FS=2.709;HaplotypeScore=0.5907;InbreedingCoeff=-0.0115;MLEAC=1;MLEAF=0.010;MQ=59.77;MQ0=0;MQRankSum=0.016;QD=11.45;ReadPosRankSum=-0.961;SNPEFF_AMINO_ACID_CHANGE=R369H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1268051 . C T 144.21 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.139;DP=879;Dels=0.00;FS=1.544;HaplotypeScore=0.3612;InbreedingCoeff=-0.0114;MLEAC=1;MLEAF=0.010;MQ=59.46;MQ0=0;MQRankSum=0.027;QD=14.42;ReadPosRankSum=-2.357;SNPEFF_AMINO_ACID_CHANGE=N380;SNPEFF_CODON_CHANGE=aaC/aaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST000003393 [...]
+1 1268159 rs3813210 C T 6718.03 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=-0.934;DB;DP=1366;Dels=0.00;FS=27.328;HaplotypeScore=0.8998;InbreedingCoeff=0.1250;MLEAC=20;MLEAF=0.200;MQ=59.18;MQ0=0;MQRankSum=-0.415;QD=13.82;ReadPosRankSum=-1.526;SNPEFF_AMINO_ACID_CHANGE=P416;SNPEFF_CODON_CHANGE=ccC/ccT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1267404_1268186;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 1268195 rs3813211 G A 5562.50 PASS AC=18;AF=0.180;AN=100;BaseQRankSum=-1.330;DB;DP=1099;Dels=0.00;FS=13.361;HaplotypeScore=0.6632;InbreedingCoeff=0.1864;MLEAC=18;MLEAF=0.180;MQ=59.03;MQ0=0;MQRankSum=-0.338;QD=15.49;ReadPosRankSum=0.704;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263743;VQSLOD=4.54;culprit=FS GT:AD:DP:GQ:PL 0/0:27,0:27:75:0,75,848 0/0:17,0:17:51:0,51,6 [...]
+1 1268348 rs111703380 G A 780.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=3.310;DB;DP=1481;Dels=0.00;FS=2.499;HaplotypeScore=1.2066;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.91;MQ0=0;MQRankSum=-0.488;QD=10.69;ReadPosRankSum=1.568;SNPEFF_AMINO_ACID_CHANGE=P441;SNPEFF_CODON_CHANGE=ccG/ccA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268301_1268504;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1268462 rs138915131 G A 82.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.037;DB;DP=1172;Dels=0.00;FS=0.000;HaplotypeScore=0.4810;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.22;MQ0=0;MQRankSum=-0.386;QD=5.48;ReadPosRankSum=-1.225;SNPEFF_AMINO_ACID_CHANGE=R479;SNPEFF_CODON_CHANGE=agG/agA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268301_1268504;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1268550 rs61766206 C T 296.29 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.770;DB;DP=551;Dels=0.00;FS=3.105;HaplotypeScore=0.3878;InbreedingCoeff=-0.0163;MLEAC=1;MLEAF=0.010;MQ=58.96;MQ0=0;MQRankSum=0.460;QD=12.88;ReadPosRankSum=-0.272;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263743;VQSLOD=6.66;culprit=MQ GT:AD:DP:GQ:PL 0/0:10,0:10:30:0,30,327 0/0:13,0:13:39:0,39,422 0 [...]
+1 1268847 rs307378 T G 62834.20 PASS AC=93;AF=0.930;AN=100;BaseQRankSum=10.235;DB;DP=1783;Dels=0.00;FS=0.598;HaplotypeScore=0.4196;InbreedingCoeff=-0.0753;MLEAC=93;MLEAF=0.930;MQ=59.49;MQ0=1;MQRankSum=0.451;QD=35.24;ReadPosRankSum=1.530;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263743;VQSLOD=5.66;culprit=FS GT:AD:DP:GQ:PL 1/1:0,38:38:99:1405,114,0 0/1:12,12:24:99:391, [...]
+1 1269004 rs140035477 C T 446.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.471;DB;DP=1432;Dels=0.00;FS=2.169;HaplotypeScore=0.1274;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.98;MQ0=0;MQRankSum=0.910;QD=21.25;ReadPosRankSum=-1.511;SNPEFF_AMINO_ACID_CHANGE=L573;SNPEFF_CODON_CHANGE=ctC/ctT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268886_1270686;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1269076 rs148260692 A C 182.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.654;DB;DP=1016;Dels=0.00;FS=0.000;HaplotypeScore=0.2893;InbreedingCoeff=-0.0108;MLEAC=1;MLEAF=0.010;MQ=58.87;MQ0=0;MQRankSum=1.027;QD=9.59;ReadPosRankSum=0.741;SNPEFF_AMINO_ACID_CHANGE=P597;SNPEFF_CODON_CHANGE=ccA/ccC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268886_1270686;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1269432 rs147441599 C A 45.29 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.608;DB;DP=763;Dels=0.00;FS=0.000;HaplotypeScore=0.3492;InbreedingCoeff=-0.0155;MLEAC=1;MLEAF=0.010;MQ=58.44;MQ0=0;MQRankSum=0.085;QD=5.66;ReadPosRankSum=-0.535;SNPEFF_AMINO_ACID_CHANGE=T716K;SNPEFF_CODON_CHANGE=aCg/aAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268886_1270686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 1269488 rs112507608 G A 474.53 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.648;DB;DP=437;Dels=0.00;FS=2.915;HaplotypeScore=0.2120;InbreedingCoeff=-0.0708;MLEAC=5;MLEAF=0.050;MQ=58.50;MQ0=0;MQRankSum=-0.889;QD=9.13;ReadPosRankSum=-0.766;SNPEFF_AMINO_ACID_CHANGE=A735T;SNPEFF_CODON_CHANGE=Gcc/Acc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268886_1270686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1269554 rs307377 T C 16502.08 PASS AC=93;AF=0.930;AN=100;BaseQRankSum=1.110;DB;DP=508;Dels=0.00;FS=25.352;HaplotypeScore=0.3549;InbreedingCoeff=-0.0867;MLEAC=93;MLEAF=0.930;MQ=58.90;MQ0=0;MQRankSum=-1.026;QD=32.48;ReadPosRankSum=1.238;SNPEFF_AMINO_ACID_CHANGE=C757R;SNPEFF_CODON_CHANGE=Tgc/Cgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268886_1270686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1269675 . C T 167.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.920;DP=1204;Dels=0.00;FS=8.321;HaplotypeScore=0.3420;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.40;MQ0=0;MQRankSum=-0.521;QD=10.45;ReadPosRankSum=0.952;SNPEFF_AMINO_ACID_CHANGE=A797V;SNPEFF_CODON_CHANGE=gCc/gTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1268886_1270686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID [...]
+1 1269888 rs139522421 C A 191.64 PASS AC=4;AF=0.043;AN=94;BaseQRankSum=0.967;DB;DP=231;Dels=0.00;FS=4.036;HaplotypeScore=0.0721;InbreedingCoeff=0.4148;MLEAC=3;MLEAF=0.032;MQ=59.30;MQ0=0;MQRankSum=0.098;QD=21.29;ReadPosRankSum=-0.098;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263743;VQSLOD=5.71;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,1:1:3:32,3,0 0/0:6,0:6:18:0,18,1 [...]
+1 1271636 rs34935417 G A 56.84 PASS AC=3;AF=0.031;AN=96;BaseQRankSum=-1.900;DB;DP=223;Dels=0.00;FS=12.430;HaplotypeScore=0.3484;InbreedingCoeff=-0.0864;MLEAC=3;MLEAF=0.031;MQ=58.23;MQ0=0;MQRankSum=2.787;QD=3.55;ReadPosRankSum=0.145;SNPEFF_AMINO_ACID_CHANGE=P316;SNPEFF_CODON_CHANGE=ccC/ccT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1270659_1271895;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 1271853 rs113005319 G C 86.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.913;DB;DP=991;Dels=0.00;FS=0.000;HaplotypeScore=0.5224;InbreedingCoeff=-0.0111;MLEAC=1;MLEAF=0.010;MQ=59.03;MQ0=0;MQRankSum=0.678;QD=5.75;ReadPosRankSum=-1.559;SNPEFF_AMINO_ACID_CHANGE=P244R;SNPEFF_CODON_CHANGE=cCg/cGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1270659_1271895;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1271924 rs140192690 G A 56.34 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.447;DB;DP=696;Dels=0.00;FS=0.000;HaplotypeScore=0.6160;InbreedingCoeff=-0.0183;MLEAC=1;MLEAF=0.010;MQ=58.35;MQ0=0;MQRankSum=0.018;QD=2.68;ReadPosRankSum=-0.243;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000339381;VQSLOD=1.42;culprit=QD GT:AD:DP:GQ:PL 0/0:10,0:10:30:0,30,344 0/0:5,0:5:15:0,15,190 0 [...]
+1 1271940 rs149812757 C T 93.38 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.380;DB;DP=642;Dels=0.00;FS=1.887;HaplotypeScore=0.7596;InbreedingCoeff=-0.0196;MLEAC=1;MLEAF=0.010;MQ=58.69;MQ0=0;MQRankSum=-1.778;QD=8.49;ReadPosRankSum=0.088;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000339381;VQSLOD=3.95;culprit=MQ GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,296 0/0:4,0:4:12:0,12,141 0/0 [...]
+1 1271942 rs111315662 C T 2820.16 PASS AC=16;AF=0.160;AN=100;BaseQRankSum=4.139;DB;DP=610;Dels=0.00;FS=0.502;HaplotypeScore=0.7802;InbreedingCoeff=0.0742;MLEAC=16;MLEAF=0.160;MQ=58.66;MQ0=0;MQRankSum=0.383;QD=14.39;ReadPosRankSum=-1.620;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TAS1R3;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000339381;VQSLOD=3.37;culprit=MQ GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,260 0/0:4,0:4:12:0,12,130 [...]
+1 1273621 rs137945460 C T 1441.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.928;DB;DP=1001;Dels=0.00;FS=14.362;HaplotypeScore=0.6691;InbreedingCoeff=-0.0108;MLEAC=1;MLEAF=0.010;MQ=58.24;MQ0=0;MQRankSum=3.877;QD=19.22;ReadPosRankSum=-1.143;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472445;VQSLOD=3.20;culprit=FS GT:AD:DP:GQ:PL 0/0:14,0:14:36:0,36,446 0/0:20,0:20:60:0,60, [...]
+1 1273703 . T A 836.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.975;DP=2566;Dels=0.00;FS=3.399;HaplotypeScore=0.3857;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.84;MQ0=0;MQRankSum=0.426;QD=11.78;ReadPosRankSum=-1.822;SNPEFF_AMINO_ACID_CHANGE=N143Y;SNPEFF_CODON_CHANGE=Aac/Tac;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1273649_1273816;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1273874 rs186806059 C T 188.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.853;DB;DP=1592;Dels=0.00;FS=8.213;HaplotypeScore=0.2724;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.35;MQ0=0;MQRankSum=0.825;QD=11.76;ReadPosRankSum=-1.283;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472445;VQSLOD=7.11;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:23,0:23:69:0,69,811 0/0:35,0: [...]
+1 1274972 rs139346691 G A 837.14 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=2.678;DB;DP=982;Dels=0.00;FS=1.640;HaplotypeScore=0.4300;InbreedingCoeff=-0.0316;MLEAC=3;MLEAF=0.030;MQ=59.30;MQ0=0;MQRankSum=0.374;QD=10.46;ReadPosRankSum=0.088;SNPEFF_AMINO_ACID_CHANGE=T31;SNPEFF_CODON_CHANGE=acC/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1274962_1275192;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1275082 . T C 642.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.242;DP=1330;Dels=0.00;FS=0.000;HaplotypeScore=0.2949;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=58.65;MQ0=0;MQRankSum=1.142;QD=11.68;ReadPosRankSum=0.652;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472445;VQSLOD=5.58;culprit=MQ GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,776 0/0:25,0:25:75:0,75,924 0/0:11,0:11:3 [...]
+1 1275688 rs139844875 G A 129.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.341;DB;DP=2734;Dels=0.00;FS=0.000;HaplotypeScore=0.5069;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.30;MQ0=0;MQRankSum=1.145;QD=4.45;ReadPosRankSum=-0.452;SNPEFF_AMINO_ACID_CHANGE=S236;SNPEFF_CODON_CHANGE=tcC/tcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1275627_1275696;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1275716 rs112871502 T A 5261.46 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=7.334;DB;DP=1743;Dels=0.00;FS=6.841;HaplotypeScore=0.7649;InbreedingCoeff=-0.1285;MLEAC=11;MLEAF=0.110;MQ=59.26;MQ0=0;MQRankSum=0.791;QD=13.29;ReadPosRankSum=-2.510;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472445;VQSLOD=4.83;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:26,0:26:78:0,78,917 0/0:38, [...]
+1 1275730 rs147874931 G A 651.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.138;DB;DP=1329;Dels=0.00;FS=3.299;HaplotypeScore=1.0273;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.22;MQ0=0;MQRankSum=0.440;QD=12.06;ReadPosRankSum=-0.547;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472445;VQSLOD=6.96;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,753 0/0:26,0:2 [...]
+1 1275739 . C T 440.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.215;DP=1138;Dels=0.00;FS=10.836;HaplotypeScore=0.8347;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.34;MQ0=0;MQRankSum=0.002;QD=13.76;ReadPosRankSum=0.111;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472445;VQSLOD=5.52;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:18,0:18:54:0,54,631 0/0:26,0:26:78:0,78,853 [...]
+1 1275797 . G C 308.52 VQSRTrancheSNP99.50to99.90 AC=17;AF=0.170;AN=100;BaseQRankSum=-8.650;DP=555;Dels=0.00;FS=334.274;HaplotypeScore=0.5644;InbreedingCoeff=-0.2104;MLEAC=15;MLEAF=0.150;MQ=57.66;MQ0=0;MQRankSum=-2.377;QD=1.52;ReadPosRankSum=-6.578;SNPEFF_AMINO_ACID_CHANGE=A231G;SNPEFF_CODON_CHANGE=gCg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1275790_1275883;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODERA [...]
+1 1275888 . G A 220.31 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.282;DP=625;Dels=0.00;FS=0.000;HaplotypeScore=0.2270;InbreedingCoeff=-0.0166;MLEAC=1;MLEAF=0.010;MQ=59.17;MQ0=0;MQRankSum=1.831;QD=18.36;ReadPosRankSum=-0.033;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472445;VQSLOD=5.48;culprit=FS GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,454 0/0:8,0:8:24:0,24,283 0/0:15,0:15:45 [...]
+1 1277183 rs61735963 C T 797.99 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=-0.404;DB;DP=503;Dels=0.00;FS=0.768;HaplotypeScore=0.5298;InbreedingCoeff=-0.0626;MLEAC=5;MLEAF=0.050;MQ=57.30;MQ0=0;MQRankSum=2.684;QD=10.78;ReadPosRankSum=-0.724;SNPEFF_AMINO_ACID_CHANGE=A157T;SNPEFF_CODON_CHANGE=Gcc/Acc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1277047_1277185;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 1277184 . G A 56.34 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.258;DP=496;Dels=0.00;FS=0.000;HaplotypeScore=0.5907;InbreedingCoeff=-0.0181;MLEAC=1;MLEAF=0.010;MQ=57.44;MQ0=0;MQRankSum=1.086;QD=14.09;ReadPosRankSum=0.314;SNPEFF_AMINO_ACID_CHANGE=A156;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1277047_1277185;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000345100; [...]
+1 1277469 . G A 80.39 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.161;DP=471;Dels=0.00;FS=0.000;HaplotypeScore=0.2602;InbreedingCoeff=-0.0211;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=-0.161;QD=8.04;ReadPosRankSum=0.084;SNPEFF_AMINO_ACID_CHANGE=R144W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1277433_1277536;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 1277533 rs307362 T C 7137.94 PASS AC=96;AF=0.980;AN=98;BaseQRankSum=-2.633;DB;DP=219;Dels=0.00;FS=10.003;HaplotypeScore=0.0900;InbreedingCoeff=-0.0745;MLEAC=97;MLEAF=0.990;MQ=59.15;MQ0=0;MQRankSum=0.774;QD=32.59;ReadPosRankSum=-0.195;SNPEFF_AMINO_ACID_CHANGE=P122;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1277433_1277536;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1277832 . C T 57.31 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.919;DP=573;Dels=0.00;FS=9.693;HaplotypeScore=0.1662;InbreedingCoeff=-0.0172;MLEAC=1;MLEAF=0.010;MQ=58.87;MQ0=0;MQRankSum=0.430;QD=8.19;ReadPosRankSum=-0.864;SNPEFF_AMINO_ACID_CHANGE=A91;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1277743_1277864;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000345100;VQ [...]
+1 1278047 rs143423496 G A 450.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.833;DB;DP=1684;Dels=0.00;FS=3.121;HaplotypeScore=0.2475;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.44;MQ0=0;MQRankSum=0.641;QD=9.00;ReadPosRankSum=-1.705;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=DVL1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000263743;VQSLOD=8.82;culprit=QD GT:AD:DP:GQ:PL 0/0:38,0:38:99:0,111,1339 0/0:33,0:33:99:0,99,1247 [...]
+1 1284490 rs150789461 G A 5156.89 PASS AC=70;AF=0.814;AN=86;BaseQRankSum=-0.503;DB;DP=203;Dels=0.00;FS=0.000;HaplotypeScore=0.1698;InbreedingCoeff=0.4197;MLEAC=68;MLEAF=0.791;MQ=59.35;MQ0=0;MQRankSum=-0.445;QD=33.27;ReadPosRankSum=-2.781;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=3.68;culprit=FS GT:AD:DP:GQ:PL 1/1:0,2:2:6:76,6,0 1/1:0,2:2:6:77,6,0 [...]
+1 1289205 . C T 68.87 PASS AC=2;AF=0.020;AN=98;BaseQRankSum=-1.260;DP=390;Dels=0.00;FS=0.000;HaplotypeScore=0.1612;InbreedingCoeff=0.5284;MLEAC=1;MLEAF=0.010;MQ=58.59;MQ0=0;MQRankSum=-1.487;QD=17.22;ReadPosRankSum=1.522;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460473;VQSLOD=2.96;culprit=MQ GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,222 0/0:16,0:16:48:0,48,605 0/0:6,0:6: [...]
+1 1289367 rs138188378 CTG C 43221.37 PASS AC=77;AF=0.770;AN=100;BaseQRankSum=0.046;DB;DP=1223;FS=58.559;HaplotypeScore=9.4698;InbreedingCoeff=0.1525;MLEAC=77;MLEAF=0.770;MQ=58.71;MQ0=0;MQRankSum=-0.571;QD=39.44;ReadPosRankSum=1.137;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460473 GT:AD:DP:GQ:PL 1/1:0,17:18:51:941,51,0 0/1:13,13:27:99:637,0,667 1/1:0,20:20:60:10 [...]
+1 1289911 rs4970365 G A 38815.38 PASS AC=77;AF=0.770;AN=100;BaseQRankSum=-9.461;DB;DP=1447;Dels=0.00;FS=4.512;HaplotypeScore=0.9114;InbreedingCoeff=0.1529;MLEAC=77;MLEAF=0.770;MQ=59.01;MQ0=0;MQRankSum=-0.369;QD=28.77;ReadPosRankSum=1.904;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460473;VQSLOD=4.85;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,29:29:87:1096,87,0 0 [...]
+1 1290089 . A G 145.93 VQSRTrancheSNP99.50to99.90 AC=12;AF=0.136;AN=88;BaseQRankSum=-4.365;DP=217;Dels=0.00;FS=53.192;HaplotypeScore=0.2784;InbreedingCoeff=-0.2228;MLEAC=12;MLEAF=0.136;MQ=56.45;MQ0=0;MQRankSum=0.680;QD=1.70;ReadPosRankSum=-5.666;SNPEFF_AMINO_ACID_CHANGE=S207P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1290062_1290532;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MO [...]
+1 1290408 rs147996767 A G 1363.49 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=3.898;DB;DP=587;Dels=0.00;FS=5.213;HaplotypeScore=0.5114;InbreedingCoeff=-0.0783;MLEAC=6;MLEAF=0.060;MQ=57.97;MQ0=0;MQRankSum=2.047;QD=9.60;ReadPosRankSum=-2.372;SNPEFF_AMINO_ACID_CHANGE=A100;SNPEFF_CODON_CHANGE=gcT/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1290062_1290532;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1290556 rs183729313 G C 133.71 PASS AC=1;AF=0.024;AN=42;BaseQRankSum=0.283;DB;DP=132;Dels=0.00;FS=0.000;HaplotypeScore=0.3929;InbreedingCoeff=-0.0950;MLEAC=1;MLEAF=0.024;MQ=58.79;MQ0=0;MQRankSum=0.731;QD=13.37;ReadPosRankSum=-0.244;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=4.70;culprit=MQ GT:AD:DP:GQ:PL ./. ./. 0/0:1,0:1:3:0,3,40 ./. ./. 0/0:1,0:1:3 [...]
+1 1290581 rs189632301 G A 556.33 PASS AC=6;AF=0.075;AN=80;BaseQRankSum=-4.492;DB;DP=182;Dels=0.00;FS=7.387;HaplotypeScore=0.1711;InbreedingCoeff=-0.0299;MLEAC=6;MLEAF=0.075;MQ=56.07;MQ0=0;MQRankSum=-1.981;QD=12.36;ReadPosRankSum=-3.520;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=1.54;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:2,0:2:6:0,6,77 0/0:3,0:3:9:0,9,106 0 [...]
+1 1290592 . CGGGAGCTG C 1028.07 PASS AC=4;AF=0.043;AN=94;BaseQRankSum=0.814;DP=281;FS=0.000;HaplotypeScore=3.3594;InbreedingCoeff=-0.1121;MLEAC=4;MLEAF=0.043;MQ=55.90;MQ0=0;MQRankSum=-4.547;QD=23.91;ReadPosRankSum=0.564;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212 GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,219 0/0:5,0:5:15:0,15,372 0/0:3,0:3:9:0,9,328 0/0:3,0:3:9:0,9,328 0 [...]
+1 1291159 . GA G 519.73 PASS AC=24;AF=1.00;AN=24;DP=15;FS=0.000;HaplotypeScore=0.6904;InbreedingCoeff=-0.1855;MLEAC=24;MLEAF=1.00;MQ=57.16;MQ0=0;QD=37.12;RPA=2,1;RU=A;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;STR GT:AD:DP:GQ:PL ./. 1/1:0,1:1:3:42,3,0 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. 1/1:0,1:1:3:42,3,0 1/1:0,1:1:3:42,3,0 ./. ./. ./. ./. 1/1 [...]
+1 1291161 . A G 132.73 PASS AC=9;AF=0.409;AN=22;BaseQRankSum=0.696;DP=14;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.1996;MLEAC=9;MLEAF=0.409;MQ=56.95;MQ0=0;MQRankSum=0.978;QD=18.96;ReadPosRankSum=-2.163;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=3.22;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./ [...]
+1 1292131 rs141676214 A G 177.90 PASS AC=2;AF=0.020;AN=98;BaseQRankSum=-0.513;DB;DP=327;Dels=0.00;FS=1.439;HaplotypeScore=0.1625;InbreedingCoeff=-0.0669;MLEAC=2;MLEAF=0.020;MQ=59.46;MQ0=0;MQRankSum=1.984;QD=12.71;ReadPosRankSum=-1.192;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=MXRA8;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000309212;VQSLOD=5.77;culprit=FS GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,145 0/0:2,0:2:6:0,6,69 0/0: [...]
+1 1309185 rs111933693 T C 2421.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=7.758;DB;DP=2440;Dels=0.00;FS=3.905;HaplotypeScore=0.1768;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.81;MQ0=0;MQRankSum=-0.470;QD=13.68;ReadPosRankSum=-0.815;SNPEFF_AMINO_ACID_CHANGE=K199R;SNPEFF_CODON_CHANGE=aAa/aGa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309112_1309282;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1309405 rs150194697 T C 724.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.867;DB;DP=4072;Dels=0.00;FS=15.411;HaplotypeScore=0.3207;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.51;MQ0=0;MQRankSum=0.146;QD=12.07;ReadPosRankSum=-1.880;SNPEFF_AMINO_ACID_CHANGE=Q158R;SNPEFF_CODON_CHANGE=cAg/cGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309380_1309825;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1309458 rs8146 G A 2748.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-11.382;DB;DP=4713;Dels=0.00;FS=0.920;HaplotypeScore=0.1779;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.19;MQ0=0;MQRankSum=1.733;QD=13.15;ReadPosRankSum=-2.871;SNPEFF_AMINO_ACID_CHANGE=H140;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309380_1309825;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1309514 rs189539985 C T 104.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.552;DB;DP=4493;Dels=0.00;FS=2.446;HaplotypeScore=0.1300;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.78;MQ0=0;MQRankSum=-0.005;QD=1.39;ReadPosRankSum=0.053;SNPEFF_AMINO_ACID_CHANGE=A122T;SNPEFF_CODON_CHANGE=Gcg/Acg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1309380_1309825;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1310074 rs2765035 C G 5721.05 PASS AC=81;AF=0.844;AN=96;BaseQRankSum=1.039;DB;DP=221;Dels=0.00;FS=1.775;HaplotypeScore=0.0840;InbreedingCoeff=0.0032;MLEAC=80;MLEAF=0.833;MQ=58.58;MQ0=0;MQRankSum=0.804;QD=27.91;ReadPosRankSum=1.578;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000321751;VQSLOD=3.99;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,2:2:6:77,6,0 0/0:3,0:3:9:0,9,111 1/1:0,4:4:1 [...]
+1 1310149 . G C 40.68 VQSRTrancheSNP99.50to99.90 AC=8;AF=0.121;AN=66;BaseQRankSum=-3.331;DP=86;Dels=0.00;FS=34.551;HaplotypeScore=0.1365;InbreedingCoeff=-0.1599;MLEAC=8;MLEAF=0.121;MQ=59.57;MQ0=0;MQRankSum=1.000;QD=1.23;ReadPosRankSum=-2.868;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000470457;VQSLOD=-2.846e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 ./. 0/0:1,0: [...]
+1 1310181 rs112533928 A G 512.39 PASS AC=13;AF=0.141;AN=92;BaseQRankSum=2.266;DB;DP=125;Dels=0.00;FS=0.000;HaplotypeScore=0.0217;InbreedingCoeff=0.3007;MLEAC=10;MLEAF=0.109;MQ=59.57;MQ0=0;MQRankSum=1.323;QD=23.29;ReadPosRankSum=0.612;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=AURKAIP1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000321751;VQSLOD=6.09;culprit=FS GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,74 0/0:4,0:4:12:0,12,145 0/0:4,0: [...]
+1 1323143 rs141100746 CCT C 13311.34 PASS AC=45;AF=0.450;AN=100;BaseQRankSum=-1.765;DB;DP=629;FS=21.384;HaplotypeScore=5.6584;InbreedingCoeff=0.5423;MLEAC=45;MLEAF=0.450;MQ=59.47;MQ0=0;MQRankSum=-0.984;QD=42.39;ReadPosRankSum=-1.669;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000408918 GT:AD:DP:GQ:PL 1/1:0,23:23:69:1269,69,0 0/1:7,8:15:99:396,0,341 1/1:0,11:11:33:60 [...]
+1 1323143 . C G 157.57 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.110;AN=100;BaseQRankSum=-3.824;DP=629;Dels=0.00;FS=6.116;HaplotypeScore=9.2030;InbreedingCoeff=-0.1264;MLEAC=9;MLEAF=0.090;MQ=59.47;MQ0=0;MQRankSum=-0.399;QD=1.19;ReadPosRankSum=-6.920;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000408918;VQSLOD=-2.575e+00;culprit=QD GT:AD:DP:GQ:PL 0/1:18,5:22:70:70,0,538 [...]
+1 1323393 rs145080018 C T 1347.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.383;DB;DP=5257;Dels=0.00;FS=7.366;HaplotypeScore=0.0653;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.79;MQ0=0;MQRankSum=0.583;QD=9.23;ReadPosRankSum=-3.717;SNPEFF_AMINO_ACID_CHANGE=K180;SNPEFF_CODON_CHANGE=aaG/aaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1323334_1323445;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1325990 rs147017832 G A 1953.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-10.170;DB;DP=2022;Dels=0.00;FS=3.580;HaplotypeScore=0.0892;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.66;MQ0=0;MQRankSum=1.750;QD=13.20;ReadPosRankSum=-2.037;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000408918;VQSLOD=7.72;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:49,0:49:99:0,147,1852 0/0: [...]
+1 1330726 rs1240746 A G 10759.94 PASS AC=59;AF=0.590;AN=100;BaseQRankSum=-5.597;DB;DP=529;Dels=0.00;FS=6.475;HaplotypeScore=0.3413;InbreedingCoeff=0.5729;MLEAC=61;MLEAF=0.610;MQ=58.80;MQ0=0;MQRankSum=0.420;QD=26.77;ReadPosRankSum=-0.470;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000497013;VQSLOD=6.10;culprit=MQ GT:AD:DP:GQ:PL 0/0:16,0:16:45:0,45,539 0/1:6,4:10:93:9 [...]
+1 1333597 rs190049110 G C 1129.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.787;DB;DP=3439;Dels=0.00;FS=0.000;HaplotypeScore=1.0137;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.68;MQ0=0;MQRankSum=0.918;QD=15.06;ReadPosRankSum=-2.925;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=6.18;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:96,0:96:99:0,289,3703 0/0:7 [...]
+1 1333598 rs35242196 C A 33118.31 PASS AC=29;AF=0.290;AN=100;BaseQRankSum=-13.526;DB;DP=3456;Dels=0.00;FS=0.496;HaplotypeScore=0.9537;InbreedingCoeff=0.6600;MLEAC=29;MLEAF=0.290;MQ=59.68;MQ0=0;MQRankSum=-0.103;QD=28.07;ReadPosRankSum=1.217;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=3.24;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:94,0:94:99:0,283,3553 0/0 [...]
+1 1334052 rs3831366 CTAGAG C 14597.42 Indel_FS AC=9;AF=0.090;AN=100;BaseQRankSum=-2.943;DB;DP=4458;FS=1675.569;HaplotypeScore=4.3498;InbreedingCoeff=-0.0989;MLEAC=9;MLEAF=0.090;MQ=52.32;MQ0=0;MQRankSum=-16.106;QD=24.87;ReadPosRankSum=-0.810;SNPEFF_EFFECT=SPLICE_SITE_ACCEPTOR;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000488340 GT:AD:DP:GQ:PL 0/0:98,0:98:99:0,295,7688 0/1:39,23:75:99:1599,0,294 [...]
+1 1334383 . G C 52.97 VQSRTrancheSNP98.80to98.90 AC=5;AF=0.057;AN=88;BaseQRankSum=-2.715;DP=193;Dels=0.00;FS=0.000;HaplotypeScore=0.1488;InbreedingCoeff=-0.1450;MLEAC=5;MLEAF=0.057;MQ=49.42;MQ0=0;MQRankSum=-0.363;QD=2.21;ReadPosRankSum=-3.279;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=0.234;culprit=QD GT:AD:DP:GQ:PL 0/0:3,0:3:6:0,6,64 0/0:3,0:3:9:0,9,92 [...]
+1 1334409 . C G 473.66 VQSRTrancheSNP99.00to99.30 AC=27;AF=0.300;AN=90;BaseQRankSum=-6.456;DP=177;Dels=0.00;FS=21.834;HaplotypeScore=0.3396;InbreedingCoeff=-0.2393;MLEAC=25;MLEAF=0.278;MQ=54.43;MQ0=0;MQRankSum=-3.607;QD=4.51;ReadPosRankSum=-6.896;SNPEFF_AMINO_ACID_CHANGE=R93P;SNPEFF_CODON_CHANGE=cGc/cCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1334399_1334692;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MO [...]
+1 1334412 . A G 62.06 VQSRTrancheSNP98.90to99.00 AC=8;AF=0.085;AN=94;BaseQRankSum=-1.658;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=0.2033;InbreedingCoeff=-0.0556;MLEAC=8;MLEAF=0.085;MQ=58.31;MQ0=0;MQRankSum=-0.750;QD=2.48;ReadPosRankSum=-3.998;SNPEFF_AMINO_ACID_CHANGE=L92P;SNPEFF_CODON_CHANGE=cTc/cCc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1334399_1334692;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODERA [...]
+1 1334519 rs114112990 G C 871.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.348;DB;DP=2805;Dels=0.00;FS=1.586;HaplotypeScore=0.1594;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.63;MQ0=0;MQRankSum=2.248;QD=11.62;ReadPosRankSum=-0.067;SNPEFF_AMINO_ACID_CHANGE=D56E;SNPEFF_CODON_CHANGE=gaC/gaG;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1334399_1334692;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=CCNL2;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1334700 rs112789149 C T 208.53 PASS AC=2;AF=0.050;AN=40;BaseQRankSum=-2.069;DB;DP=58;Dels=0.00;FS=2.623;HaplotypeScore=0.1915;InbreedingCoeff=-0.1497;MLEAC=2;MLEAF=0.050;MQ=55.25;MQ0=0;MQRankSum=1.756;QD=18.96;ReadPosRankSum=-1.548;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;VQSLOD=1.83;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:1,0:1:3:0,3,39 0/0:1,0:1:3:0,3,38 ./. . [...]
+1 1337527 . G A 665.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.247;DP=5818;Dels=0.00;FS=1.048;HaplotypeScore=0.0438;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.82;MQ0=0;MQRankSum=-1.059;QD=9.24;ReadPosRankSum=-3.629;SNPEFF_AMINO_ACID_CHANGE=A129V;SNPEFF_CODON_CHANGE=gCt/gTt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1337288_1337636;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID [...]
+1 1337592 . G C 1079.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.392;DP=3526;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.97;MQ0=0;MQRankSum=-0.053;QD=15.64;ReadPosRankSum=-4.160;SNPEFF_AMINO_ACID_CHANGE=I107M;SNPEFF_CODON_CHANGE=atC/atG;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1337288_1337636;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_I [...]
+1 1337687 rs141850625 G A 269.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.669;DB;DP=1105;Dels=0.00;FS=0.000;HaplotypeScore=0.1656;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=59.67;MQ0=0;MQRankSum=-0.661;QD=10.77;ReadPosRankSum=-1.696;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477686;VQSLOD=8.00;culprit=FS GT:AD:DP:GQ:PL 0/0:29,0:29:87:0,87,1096 0/0:37,0:37:99:0,1 [...]
+1 1341185 rs17160977 A G 873.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.963;DB;DP=5520;Dels=0.00;FS=1.020;HaplotypeScore=0.0385;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.58;MQ0=0;MQRankSum=2.761;QD=11.64;ReadPosRankSum=-1.514;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477686;VQSLOD=8.51;culprit=FS GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4696 0/0:126,0:126:99: [...]
+1 1342271 . TC T 304.13 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.667;DP=3006;FS=0.000;HaplotypeScore=7.2508;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.73;MQ0=0;MQRankSum=-0.821;QD=9.50;RPA=3,2;RU=C;ReadPosRankSum=-1.076;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000344843;STR GT:AD:DP:GQ:PL 0/0:52,0:52:99:0,156,1596 0/0:59,0:62:99:0,178,2355 0/0:44,0:44:99:0,132,179 [...]
+1 1342394 rs11548045 G A 2793.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-8.131;DB;DP=5927;Dels=0.00;FS=0.000;HaplotypeScore=0.1339;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.40;MQ0=0;MQRankSum=2.753;QD=12.64;ReadPosRankSum=-4.290;SNPEFF_AMINO_ACID_CHANGE=F31;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1342289_1342399;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1342612 rs2275915 G C 3359.61 PASS AC=34;AF=0.347;AN=98;BaseQRankSum=-5.688;DB;DP=411;Dels=0.00;FS=0.716;HaplotypeScore=0.4018;InbreedingCoeff=0.5425;MLEAC=32;MLEAF=0.327;MQ=59.08;MQ0=0;MQRankSum=2.121;QD=22.10;ReadPosRankSum=-0.849;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MRPL20;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000477686;VQSLOD=5.99;culprit=FS GT:AD:DP:GQ:PL 0/1:4,2:6:53:53,0,93 0/0:8,0:8:24:0,24,275 0/0 [...]
+1 1372668 rs140319325 C T 351.23 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.878;DB;DP=699;Dels=0.00;FS=2.168;HaplotypeScore=0.2973;InbreedingCoeff=-0.0127;MLEAC=1;MLEAF=0.010;MQ=58.85;MQ0=0;MQRankSum=0.108;QD=12.54;ReadPosRankSum=-1.190;SNPEFF_AMINO_ACID_CHANGE=G145;SNPEFF_CODON_CHANGE=ggC/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1372307_1372864;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1374436 rs35368272 C T 141.23 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.370;DB;DP=770;Dels=0.00;FS=4.576;HaplotypeScore=0.4376;InbreedingCoeff=-0.0128;MLEAC=1;MLEAF=0.010;MQ=59.06;MQ0=0;MQRankSum=2.073;QD=12.84;ReadPosRankSum=0.268;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=7.18;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,431 0/0:10,0:10: [...]
+1 1374451 . C T 195.23 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.792;DP=852;Dels=0.00;FS=0.000;HaplotypeScore=0.4411;InbreedingCoeff=-0.0127;MLEAC=1;MLEAF=0.010;MQ=59.02;MQ0=0;MQRankSum=1.257;QD=11.48;ReadPosRankSum=-0.210;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=5.87;culprit=FS GT:AD:DP:GQ:PL 0/0:9,0:10:27:0,27,323 0/1:8,9:17:99:235,0,219 0/0:9,0 [...]
+1 1374762 . G A 47.10 PASS AC=3;AF=0.038;AN=80;BaseQRankSum=-1.087;DP=118;Dels=0.00;FS=0.000;HaplotypeScore=0.1537;InbreedingCoeff=0.0544;MLEAC=2;MLEAF=0.025;MQ=58.30;MQ0=0;MQRankSum=0.222;QD=11.77;ReadPosRankSum=0.296;SNPEFF_AMINO_ACID_CHANGE=S311;SNPEFF_CODON_CHANGE=tcG/tcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000476 [...]
+1 1374805 rs2275916 G C 124.32 PASS AC=6;AF=0.167;AN=36;BaseQRankSum=2.050;DB;DP=26;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.0155;MLEAC=6;MLEAF=0.167;MQ=59.44;MQ0=0;MQRankSum=-0.634;QD=13.81;ReadPosRankSum=1.528;SNPEFF_AMINO_ACID_CHANGE=A114P;SNPEFF_CODON_CHANGE=Gcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1374834 rs1892289 A G 499.07 PASS AC=27;AF=0.750;AN=36;BaseQRankSum=-1.858;DB;DP=26;Dels=0.00;FS=0.000;HaplotypeScore=0.0555;InbreedingCoeff=0.2144;MLEAC=21;MLEAF=0.583;MQ=58.64;MQ0=0;MQRankSum=0.289;QD=23.77;ReadPosRankSum=0.702;SNPEFF_AMINO_ACID_CHANGE=P123;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1375062 . C G 40.36 PASS AC=2;AF=0.067;AN=30;BaseQRankSum=1.302;DP=22;Dels=0.00;FS=0.000;HaplotypeScore=0.0664;InbreedingCoeff=0.1106;MLEAC=1;MLEAF=0.033;MQ=58.55;MQ0=0;MQRankSum=-0.434;QD=20.18;ReadPosRankSum=1.519;SNPEFF_AMINO_ACID_CHANGE=R199;SNPEFF_CODON_CHANGE=cgC/cgG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1374461_1378262;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST000004047 [...]
+1 1375185 rs1240699 G C 285.09 PASS AC=15;AF=0.375;AN=40;BaseQRankSum=-0.673;DB;DP=32;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.3509;MLEAC=14;MLEAF=0.350;MQ=59.77;MQ0=0;MQRankSum=-0.439;QD=23.76;ReadPosRankSum=-0.966;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=4.61;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,71 0/0:1,0:1:3: [...]
+1 1375207 rs140247431 T C 55.74 PASS AC=4;AF=0.087;AN=46;BaseQRankSum=-0.043;DB;DP=46;Dels=0.00;FS=0.000;HaplotypeScore=0.0869;InbreedingCoeff=0.2174;MLEAC=3;MLEAF=0.065;MQ=59.80;MQ0=0;MQRankSum=-0.904;QD=18.58;ReadPosRankSum=-0.645;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=VWA1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000471398;VQSLOD=5.15;culprit=FS GT:AD:DP:GQ:PL 0/0:2,0:2:6:0,6,63 0/0:1,0:1:3:0,3,39 ./. 0/ [...]
+1 1398008 rs189474682 G A 321.28 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=1.285;DB;DP=880;Dels=0.00;FS=1.026;HaplotypeScore=0.2535;InbreedingCoeff=-0.0217;MLEAC=2;MLEAF=0.020;MQ=58.94;MQ0=0;MQRankSum=0.944;QD=8.24;ReadPosRankSum=-1.912;SNPEFF_AMINO_ACID_CHANGE=G337R;SNPEFF_CODON_CHANGE=Ggg/Agg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1397980_1398088;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1398032 rs181068440 C G 180.27 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.357;DB;DP=885;Dels=0.00;FS=5.208;HaplotypeScore=0.3278;InbreedingCoeff=-0.0213;MLEAC=2;MLEAF=0.020;MQ=59.43;MQ0=0;MQRankSum=1.463;QD=7.21;ReadPosRankSum=-2.179;SNPEFF_AMINO_ACID_CHANGE=R345G;SNPEFF_CODON_CHANGE=Cgg/Ggg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1397980_1398088;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1398035 rs186498073 C T 436.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.900;DB;DP=886;Dels=0.00;FS=8.274;HaplotypeScore=0.2796;InbreedingCoeff=-0.0107;MLEAC=1;MLEAF=0.010;MQ=59.50;MQ0=0;MQRankSum=1.395;QD=14.54;ReadPosRankSum=1.157;SNPEFF_AMINO_ACID_CHANGE=L346;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1397980_1398088;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1403772 rs144333159 G A 583.19 VQSRTrancheSNP98.50to98.60 AC=1;AF=0.010;AN=100;BaseQRankSum=0.835;DB;DP=1170;Dels=0.00;FS=0.833;HaplotypeScore=0.7575;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=50.12;MQ0=7;MQRankSum=2.366;QD=12.41;ReadPosRankSum=1.580;SNPEFF_AMINO_ACID_CHANGE=A366;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW [...]
+1 1403814 rs146537972 C T 3054.93 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-0.791;DB;DP=1361;Dels=0.00;FS=3.107;HaplotypeScore=0.6870;InbreedingCoeff=-0.1113;MLEAC=10;MLEAF=0.100;MQ=52.14;MQ0=0;MQRankSum=-0.322;QD=10.76;ReadPosRankSum=-0.072;SNPEFF_AMINO_ACID_CHANGE=D380;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1403820 rs111835061 C T 343.32 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.080;DB;DP=1330;Dels=0.00;FS=2.170;HaplotypeScore=0.7434;InbreedingCoeff=-0.0149;MLEAC=1;MLEAF=0.010;MQ=52.20;MQ0=0;MQRankSum=-0.004;QD=13.73;ReadPosRankSum=-0.660;SNPEFF_AMINO_ACID_CHANGE=C382;SNPEFF_CODON_CHANGE=tgC/tgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1403887 rs149946098 G A 830.13 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-1.786;DB;DP=852;Dels=0.00;FS=0.704;HaplotypeScore=0.8035;InbreedingCoeff=-0.0314;MLEAC=3;MLEAF=0.030;MQ=47.17;MQ0=38;MQRankSum=1.012;QD=10.12;ReadPosRankSum=-0.411;SNPEFF_AMINO_ACID_CHANGE=E405K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1403894 rs145079480 A G 265.22 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.648;DB;DP=790;Dels=0.00;FS=4.077;HaplotypeScore=0.6679;InbreedingCoeff=-0.0120;MLEAC=1;MLEAF=0.010;MQ=44.58;MQ0=62;MQRankSum=-0.139;QD=10.20;ReadPosRankSum=-1.079;SNPEFF_AMINO_ACID_CHANGE=E407G;SNPEFF_CODON_CHANGE=gAg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1403764_1405538;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1403972 rs111566296 C CG 6155.76 PASS AC=39;AF=0.390;AN=100;BaseQRankSum=1.303;DB;DP=677;FS=5.716;HaplotypeScore=8.2453;InbreedingCoeff=0.2320;MLEAC=39;MLEAF=0.390;MQ=26.73;MQ0=0;MQRankSum=-0.020;QD=13.24;RPA=2,3;RU=G;ReadPosRankSum=-0.860;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;STR GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,115 0/0:7,0:7:21:0,21,355 0/0:9,0:9:27:0,2 [...]
+1 1404001 rs149123833 G T 813.05 VQSRTrancheSNP98.50to98.60 AC=9;AF=0.090;AN=100;BaseQRankSum=3.894;DB;DP=751;Dels=0.00;FS=13.258;HaplotypeScore=0.4328;InbreedingCoeff=-0.1056;MLEAC=9;MLEAF=0.090;MQ=36.60;MQ0=162;MQRankSum=1.710;QD=5.69;ReadPosRankSum=-2.329;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;VQSLOD=0.725;culprit=MQ GT:AD:DP:GQ:PL 0/0:11,0:11:27:0,27,2 [...]
+1 1404016 rs12089719 G A 5585.21 VQSRTrancheSNP99.00to99.30 AC=22;AF=0.220;AN=100;BaseQRankSum=5.688;DB;DP=778;Dels=0.00;FS=46.403;HaplotypeScore=0.6541;InbreedingCoeff=0.3869;MLEAC=22;MLEAF=0.220;MQ=41.20;MQ0=108;MQRankSum=0.582;QD=16.10;ReadPosRankSum=-0.183;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;VQSLOD=-1.039e-01;culprit=FS GT:AD:DP:GQ:PL 0/0:13,0:13:30 [...]
+1 1404053 . C CG 39.94 Indel_QD AC=4;AF=0.040;AN=100;BaseQRankSum=3.636;DP=720;FS=53.688;HaplotypeScore=10.8209;InbreedingCoeff=-0.0568;MLEAC=3;MLEAF=0.030;MQ=48.68;MQ0=0;MQRankSum=1.313;QD=0.91;RPA=4,5;RU=G;ReadPosRankSum=-3.619;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;STR GT:AD:DP:GQ:PL 0/0:15,1:16:39:0,39,541 0/0:2,0:2:6:0,6,41 0/0:12,0:13:36:0,36,462 0/0 [...]
+1 1404076 . C A 243.31 VQSRTrancheSNP98.90to99.00 AC=1;AF=0.010;AN=100;BaseQRankSum=-3.635;DP=646;Dels=0.00;FS=1.469;HaplotypeScore=0.2198;InbreedingCoeff=-0.0169;MLEAC=1;MLEAF=0.010;MQ=42.78;MQ0=62;MQRankSum=1.530;QD=8.39;ReadPosRankSum=0.452;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3C;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484537;VQSLOD=0.142;culprit=MQ GT:AD:DP:GQ:PL 0/0:17,0:17:24:0,24,308 0/0:3,0:3:9: [...]
+1 1412659 rs146343349 G T 1349.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=5.456;DB;DP=1886;Dels=0.00;FS=0.000;HaplotypeScore=0.0934;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=57.05;MQ0=0;MQRankSum=2.018;QD=14.35;ReadPosRankSum=-4.364;SNPEFF_AMINO_ACID_CHANGE=A71S;SNPEFF_CODON_CHANGE=Gcc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1412654_1412730;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1412761 rs112572711 G A 573.24 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.363;DB;DP=1663;Dels=0.00;FS=5.913;HaplotypeScore=0.2278;InbreedingCoeff=-0.0126;MLEAC=1;MLEAF=0.010;MQ=56.91;MQ0=0;MQRankSum=2.675;QD=15.09;ReadPosRankSum=-1.983;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=4.74;culprit=MQ GT:AD:DP:GQ:PL 0/0:40,0:40:99:0,120,1456 0/0:26,0:26:78:0,78,936 [...]
+1 1416222 rs147329037 C T 951.69 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.031;AN=96;BaseQRankSum=-2.937;DB;DP=1817;Dels=0.00;FS=1.522;HaplotypeScore=0.2027;InbreedingCoeff=0.6251;MLEAC=3;MLEAF=0.031;MQ=22.90;MQ0=307;MQRankSum=0.808;QD=10.81;ReadPosRankSum=2.746;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-4.666e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:44,0:44:99:0,132, [...]
+1 1416235 . GCTT G 1256.99 PASS AC=4;AF=0.042;AN=96;BaseQRankSum=0.001;DP=2031;FS=25.307;HaplotypeScore=7.1005;InbreedingCoeff=0.4615;MLEAC=4;MLEAF=0.042;MQ=21.02;MQ0=0;MQRankSum=3.632;QD=6.35;RPA=2,1;RU=CTT;ReadPosRankSum=-1.166;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;STR GT:AD:DP:GQ:PL 0/0:49,0:49:99:0,147,1474 0/0:29,0:29:87:0,87,872 0/0:37,0:37:99:0,111,213 [...]
+1 1416236 rs192308564 C G 224.37 VQSRTrancheSNP99.50to99.90 AC=1;AF=0.010;AN=96;BaseQRankSum=1.162;DB;DP=2096;Dels=0.04;FS=0.000;HaplotypeScore=2.4425;InbreedingCoeff=-0.0113;MLEAC=1;MLEAF=0.010;MQ=21.00;MQ0=369;MQRankSum=2.565;QD=3.03;ReadPosRankSum=2.843;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-3.394e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:51,0:51:99:0,153,1 [...]
+1 1416358 . G A 216.80 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.031;AN=98;BaseQRankSum=-3.682;DP=1343;Dels=0.00;FS=0.000;HaplotypeScore=0.6448;InbreedingCoeff=0.4754;MLEAC=3;MLEAF=0.031;MQ=26.11;MQ0=162;MQRankSum=-1.791;QD=3.87;ReadPosRankSum=-2.273;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-3.925e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:47,0:47:99:0,141,1657 0/0:28, [...]
+1 1417662 rs143114169 A G 367.19 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=1.446;DB;DP=1370;Dels=0.00;FS=1.919;HaplotypeScore=0.4093;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=34.18;MQ0=71;MQRankSum=-2.257;QD=7.06;ReadPosRankSum=-0.090;SNPEFF_AMINO_ACID_CHANGE=Q114R;SNPEFF_CODON_CHANGE=cAg/cGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417654_1417683;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1417696 rs819970 C G 3427.28 VQSRTrancheSNP99.50to99.90 AC=73;AF=0.777;AN=94;BaseQRankSum=-2.326;DB;DP=481;Dels=0.00;FS=6.189;HaplotypeScore=0.2872;InbreedingCoeff=0.4787;MLEAC=72;MLEAF=0.766;MQ=30.06;MQ0=124;MQRankSum=-12.476;QD=9.96;ReadPosRankSum=-0.368;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-4.339e+00;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,2:2:6:63,6,0 0 [...]
+1 1417927 rs141143061 C T 581.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-0.647;DB;DP=4283;Dels=0.00;FS=6.388;HaplotypeScore=0.2720;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=35.90;MQ0=30;MQRankSum=-1.563;QD=7.75;ReadPosRankSum=1.461;SNPEFF_AMINO_ACID_CHANGE=T122M;SNPEFF_CODON_CHANGE=aCg/aTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417925_1417994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1418004 rs819972 T C 7985.23 VQSRTrancheSNP99.50to99.90 AC=41;AF=0.410;AN=100;BaseQRankSum=13.999;DB;DP=2489;Dels=0.00;FS=2.886;HaplotypeScore=0.5463;InbreedingCoeff=0.4485;MLEAC=41;MLEAF=0.410;MQ=36.07;MQ0=196;MQRankSum=-25.569;QD=7.17;ReadPosRankSum=3.163;SNPEFF_AMINO_ACID_CHANGE=F86L;SNPEFF_CODON_CHANGE=Ttc/Ctc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417925_1418042;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1418015 . G C 120.18 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=-5.372;DP=2151;Dels=0.00;FS=2.140;HaplotypeScore=0.5893;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=36.55;MQ0=168;MQRankSum=-4.142;QD=1.72;ReadPosRankSum=0.479;SNPEFF_AMINO_ACID_CHANGE=Q89H;SNPEFF_CODON_CHANGE=caG/caC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1417925_1418042;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERAT [...]
+1 1420366 . C T 212.39 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.037;AN=54;BaseQRankSum=-0.522;DP=475;Dels=0.00;FS=5.209;HaplotypeScore=0.2966;InbreedingCoeff=-0.0907;MLEAC=2;MLEAF=0.037;MQ=14.97;MQ0=180;MQRankSum=0.293;QD=1.93;ReadPosRankSum=-1.452;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-4.575e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,115 0/0:5,0: [...]
+1 1420453 rs150679247 G A 37.68 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=98;BaseQRankSum=0.158;DB;DP=485;Dels=0.00;FS=7.172;HaplotypeScore=0.2560;InbreedingCoeff=-0.0267;MLEAC=1;MLEAF=0.010;MQ=31.75;MQ0=39;MQRankSum=0.526;QD=4.71;ReadPosRankSum=-1.128;SNPEFF_AMINO_ACID_CHANGE=V164I;SNPEFF_CODON_CHANGE=Gtc/Atc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1420396_1420551;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPAC [...]
+1 1420532 rs185762308 C T 1335.22 VQSRTrancheSNP99.00to99.30 AC=3;AF=0.030;AN=100;BaseQRankSum=-0.224;DB;DP=1361;Dels=0.00;FS=1.702;HaplotypeScore=0.7451;InbreedingCoeff=-0.0335;MLEAC=3;MLEAF=0.030;MQ=35.28;MQ0=20;MQRankSum=3.341;QD=9.08;ReadPosRankSum=1.472;SNPEFF_AMINO_ACID_CHANGE=A111V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1420396_1420551;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1420568 . G C 112.25 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-3.936;DP=953;Dels=0.00;FS=0.000;HaplotypeScore=1.3774;InbreedingCoeff=-0.0136;MLEAC=1;MLEAF=0.010;MQ=36.24;MQ0=27;MQRankSum=-1.313;QD=5.91;ReadPosRankSum=-2.790;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-5.889e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:17,0:17:51:0,51,567 0/0:1 [...]
+1 1421128 . T G 276.13 VQSRTrancheSNP99.50to99.90 AC=13;AF=0.130;AN=100;BaseQRankSum=-7.555;DP=393;Dels=0.00;FS=68.315;HaplotypeScore=0.7827;InbreedingCoeff=-0.1731;MLEAC=12;MLEAF=0.120;MQ=46.06;MQ0=8;MQRankSum=-4.746;QD=2.28;ReadPosRankSum=-9.849;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-2.256e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:7,0:7:21:0,21,236 0/0:4 [...]
+1 1421153 rs188705235 C T 77.20 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-1.657;DB;DP=1003;Dels=0.00;FS=3.683;HaplotypeScore=0.4801;InbreedingCoeff=-0.0111;MLEAC=1;MLEAF=0.010;MQ=46.73;MQ0=8;MQRankSum=0.753;QD=3.22;ReadPosRankSum=-0.643;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=0.343;culprit=QD GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,805 [...]
+1 1421188 rs112490584 C A 133.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.543;DB;DP=1647;Dels=0.00;FS=1.483;HaplotypeScore=1.1780;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=40.64;MQ0=46;MQRankSum=-1.252;QD=6.34;ReadPosRankSum=0.094;SNPEFF_AMINO_ACID_CHANGE=P126;SNPEFF_CODON_CHANGE=ccC/ccA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421162_1421224;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=L [...]
+1 1421248 rs145894390 T C 1684.45 VQSRTrancheSNP99.00to99.30 AC=6;AF=0.060;AN=100;BaseQRankSum=-0.183;DB;DP=1547;Dels=0.00;FS=19.153;HaplotypeScore=0.3628;InbreedingCoeff=0.2906;MLEAC=6;MLEAF=0.060;MQ=46.12;MQ0=10;MQRankSum=-5.604;QD=8.77;ReadPosRankSum=-2.781;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-6.542e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:27,0:27:81 [...]
+1 1421531 rs819976 C A 54816.70 VQSRTrancheSNP98.90to99.00 AC=46;AF=0.460;AN=100;BaseQRankSum=-18.634;DB;DP=3675;Dels=0.00;FS=7.754;HaplotypeScore=0.8461;InbreedingCoeff=0.2754;MLEAC=46;MLEAF=0.460;MQ=52.66;MQ0=8;MQRankSum=-6.282;QD=23.36;ReadPosRankSum=2.204;SNPEFF_AMINO_ACID_CHANGE=T152;SNPEFF_CODON_CHANGE=acC/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421490_1421615;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT= [...]
+1 1421579 rs142840431 T C 4065.26 VQSRTrancheSNP99.30to99.50 AC=4;AF=0.040;AN=100;BaseQRankSum=1.924;DB;DP=3196;Dels=0.00;FS=0.000;HaplotypeScore=0.6807;InbreedingCoeff=0.4792;MLEAC=4;MLEAF=0.040;MQ=53.43;MQ0=7;MQRankSum=-8.089;QD=19.54;ReadPosRankSum=-0.037;SNPEFF_AMINO_ACID_CHANGE=Y168;SNPEFF_CODON_CHANGE=taT/taC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421490_1421615;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=L [...]
+1 1421916 . T C 7110.06 VQSRTrancheSNP99.50to99.90 AC=31;AF=0.310;AN=100;BaseQRankSum=13.113;DP=3246;Dels=0.00;FS=174.485;HaplotypeScore=1.2890;InbreedingCoeff=-0.4526;MLEAC=31;MLEAF=0.310;MQ=25.28;MQ0=802;MQRankSum=-8.780;QD=3.13;ReadPosRankSum=2.018;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=-1.532e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:52,23:72:99:294,0,9 [...]
+1 1421954 rs137911966 G A 305.25 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=100;BaseQRankSum=-6.408;DB;DP=2879;Dels=0.00;FS=0.000;HaplotypeScore=0.9177;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=17.92;MQ0=1278;MQRankSum=1.314;QD=2.21;ReadPosRankSum=-1.783;SNPEFF_AMINO_ACID_CHANGE=A191T;SNPEFF_CODON_CHANGE=Gcc/Acc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421924_1422048;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF [...]
+1 1421991 rs860213 G A 6436.80 VQSRTrancheSNP99.50to99.90 AC=35;AF=0.357;AN=98;BaseQRankSum=-7.502;DB;DP=2136;Dels=0.00;FS=1.101;HaplotypeScore=1.2296;InbreedingCoeff=0.0434;MLEAC=35;MLEAF=0.357;MQ=18.20;MQ0=842;MQRankSum=3.214;QD=4.48;ReadPosRankSum=0.116;SNPEFF_AMINO_ACID_CHANGE=R203Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1421924_1422048;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMP [...]
+1 1423229 rs145173454 T C 746.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.642;DB;DP=4986;Dels=0.00;FS=0.770;HaplotypeScore=1.1541;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=55.56;MQ0=1;MQRankSum=-1.229;QD=9.95;ReadPosRankSum=2.322;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=1.83;culprit=MQ GT:AD:DP:GQ:PL 0/0:118,0:117:99:0,352,4347 0/0:107,0:106:99:0 [...]
+1 1423237 rs187809296 T C 843.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.239;DB;DP=5139;Dels=0.00;FS=0.000;HaplotypeScore=1.3000;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=55.76;MQ0=1;MQRankSum=-2.295;QD=11.24;ReadPosRankSum=0.151;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378736;VQSLOD=0.876;culprit=MQ GT:AD:DP:GQ:PL 0/0:121,0:120:99:0,361,4379 0/0:110,0:109:99 [...]
+1 1423267 rs819977 A G 54080.08 VQSRTrancheSNP98.90to99.00 AC=47;AF=0.470;AN=100;BaseQRankSum=-15.475;DB;DP=3489;Dels=0.00;FS=0.655;HaplotypeScore=2.7184;InbreedingCoeff=0.3175;MLEAC=47;MLEAF=0.470;MQ=55.37;MQ0=1;MQRankSum=-5.926;QD=23.64;ReadPosRankSum=-11.494;SNPEFF_AMINO_ACID_CHANGE=A413;SNPEFF_CODON_CHANGE=gcA/gcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPAC [...]
+1 1423282 . GAAGC G 2049.23 Indel_FS AC=4;AF=0.040;AN=100;BaseQRankSum=-10.989;DP=2367;FS=555.690;HaplotypeScore=78.2953;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=55.17;MQ0=0;MQRankSum=-1.048;QD=8.20;ReadPosRankSum=-14.511;SNPEFF_EFFECT=FRAME_SHIFT;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000308647 GT:AD:DP:GQ:PL 0/0:48,0:49:99:0,144,3108 0/0:53,0:53:99: [...]
+1 1423286 . C G 17541.69 VQSRTrancheSNP99.90to100.00 AC=44;AF=0.440;AN=100;BaseQRankSum=-11.866;DP=2875;Dels=0.03;FS=3200.000;HaplotypeScore=10.9869;InbreedingCoeff=-0.7857;MLEAC=44;MLEAF=0.440;MQ=51.52;MQ0=16;MQRankSum=-14.757;QD=6.80;ReadPosRankSum=-24.129;SNPEFF_AMINO_ACID_CHANGE=R420G;SNPEFF_CODON_CHANGE=Cga/Gga;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_I [...]
+1 1423294 rs142126053 T C 728.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-6.358;DB;DP=3390;Dels=0.00;FS=0.731;HaplotypeScore=7.3617;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=48.23;MQ0=34;MQRankSum=-3.379;QD=9.71;ReadPosRankSum=-1.079;SNPEFF_AMINO_ACID_CHANGE=T422;SNPEFF_CODON_CHANGE=acT/acC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1423243_1423294;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT= [...]
+1 1424695 rs144622790 G A 1741.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-7.085;DB;DP=2938;Dels=0.00;FS=1.744;HaplotypeScore=0.3042;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.42;MQ0=0;MQRankSum=0.940;QD=13.60;ReadPosRankSum=-4.527;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=7.29;culprit=ReadPosRankSum GT:AD:DP:GQ:PL 0/0:51,0:51:99:0,153,1798 0/0:53,0: [...]
+1 1425667 rs61737193 T C 246.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.710;DB;DP=2740;Dels=0.00;FS=1.212;HaplotypeScore=0.9236;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.42;MQ0=0;MQRankSum=1.689;QD=9.12;ReadPosRankSum=-1.717;SNPEFF_AMINO_ACID_CHANGE=P259;SNPEFF_CODON_CHANGE=ccT/ccC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1425676 rs61737191 C T 512.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.098;DB;DP=2613;Dels=0.00;FS=7.843;HaplotypeScore=1.0466;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.51;MQ0=0;MQRankSum=0.165;QD=10.90;ReadPosRankSum=0.791;SNPEFF_AMINO_ACID_CHANGE=F262;SNPEFF_CODON_CHANGE=ttC/ttT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1425700 rs819980 T C 39181.08 PASS AC=47;AF=0.470;AN=100;BaseQRankSum=1.832;DB;DP=2230;Dels=0.00;FS=3.196;HaplotypeScore=1.0702;InbreedingCoeff=0.3175;MLEAC=47;MLEAF=0.470;MQ=58.58;MQ0=0;MQRankSum=-0.283;QD=24.46;ReadPosRankSum=-1.579;SNPEFF_AMINO_ACID_CHANGE=I270;SNPEFF_CODON_CHANGE=atT/atC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1425753 rs145313947 T C 419.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.727;DB;DP=2451;Dels=0.00;FS=0.832;HaplotypeScore=0.4628;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.86;MQ0=0;MQRankSum=0.888;QD=9.53;ReadPosRankSum=-1.852;SNPEFF_AMINO_ACID_CHANGE=V288A;SNPEFF_CODON_CHANGE=gTg/gCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425634_1425804;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1425816 rs149187984 G A 3510.90 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-8.599;DB;DP=1301;Dels=0.00;FS=3.484;HaplotypeScore=0.9964;InbreedingCoeff=-0.1112;MLEAC=10;MLEAF=0.100;MQ=56.72;MQ0=0;MQRankSum=2.741;QD=11.04;ReadPosRankSum=3.352;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=3.54;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:23,0:23:69:0,69,841 0/0:21,0:2 [...]
+1 1426002 . C T 177.26 VQSRTrancheSNP99.50to99.90 AC=1;AF=0.010;AN=100;BaseQRankSum=1.622;DP=937;Dels=0.00;FS=0.000;HaplotypeScore=0.4703;InbreedingCoeff=-0.0144;MLEAC=1;MLEAF=0.010;MQ=24.30;MQ0=278;MQRankSum=2.163;QD=2.57;ReadPosRankSum=0.181;SNPEFF_AMINO_ACID_CHANGE=T356M;SNPEFF_CODON_CHANGE=aCg/aTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425850_1426051;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE; [...]
+1 1426003 rs143153541 G A 1109.79 VQSRTrancheSNP99.50to99.90 AC=6;AF=0.060;AN=100;BaseQRankSum=-0.214;DB;DP=937;Dels=0.00;FS=2.936;HaplotypeScore=0.5164;InbreedingCoeff=0.2629;MLEAC=6;MLEAF=0.060;MQ=24.34;MQ0=278;MQRankSum=0.214;QD=6.73;ReadPosRankSum=0.746;SNPEFF_AMINO_ACID_CHANGE=T356;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1425850_1426051;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=LO [...]
+1 1426098 rs112579524 G A 228.99 VQSRTrancheSNP99.00to99.30 AC=3;AF=0.030;AN=100;BaseQRankSum=-2.982;DB;DP=371;Dels=0.00;FS=5.553;HaplotypeScore=0.1307;InbreedingCoeff=-0.0735;MLEAC=3;MLEAF=0.030;MQ=28.05;MQ0=115;MQRankSum=1.598;QD=6.03;ReadPosRankSum=0.061;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000308647;VQSLOD=-3.431e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:7,0:7:6:0,6,69 0/ [...]
+1 1430971 rs147286181 C T 1276.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=2.820;DB;DP=2863;Dels=0.00;FS=11.733;HaplotypeScore=0.5863;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.96;MQ0=5;MQRankSum=0.396;QD=12.51;ReadPosRankSum=-2.546;SNPEFF_AMINO_ACID_CHANGE=A408V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1430985 rs139902189 C T 6084.89 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=6.004;DB;DP=2316;Dels=0.00;FS=0.393;HaplotypeScore=0.6138;InbreedingCoeff=-0.1111;MLEAC=10;MLEAF=0.100;MQ=59.05;MQ0=3;MQRankSum=2.105;QD=11.66;ReadPosRankSum=-0.895;SNPEFF_AMINO_ACID_CHANGE=R413C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1431007 rs149788676 C T 506.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.543;DB;DP=1759;Dels=0.00;FS=5.605;HaplotypeScore=0.8697;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.61;MQ0=0;MQRankSum=1.886;QD=12.05;ReadPosRankSum=-1.526;SNPEFF_AMINO_ACID_CHANGE=S420F;SNPEFF_CODON_CHANGE=tCc/tTc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1431060 rs9792997 T C 124.99 VQSRTrancheSNP99.50to99.90 AC=13;AF=0.130;AN=100;BaseQRankSum=10.352;DB;DP=1340;Dels=0.00;FS=176.177;HaplotypeScore=0.7633;InbreedingCoeff=-0.1369;MLEAC=9;MLEAF=0.090;MQ=53.26;MQ0=39;MQRankSum=-14.396;QD=0.43;ReadPosRankSum=-0.769;SNPEFF_AMINO_ACID_CHANGE=Y438H;SNPEFF_CODON_CHANGE=Tac/Cac;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEF [...]
+1 1431075 rs79205801 G A 424.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.462;DB;DP=1597;Dels=0.00;FS=9.400;HaplotypeScore=0.7016;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=50.45;MQ0=45;MQRankSum=0.957;QD=10.88;ReadPosRankSum=-1.411;SNPEFF_AMINO_ACID_CHANGE=G443S;SNPEFF_CODON_CHANGE=Ggc/Agc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1431105 . A G 115.30 VQSRTrancheSNP99.30to99.50 AC=3;AF=0.030;AN=100;BaseQRankSum=7.242;DP=2265;Dels=0.00;FS=68.246;HaplotypeScore=1.8282;InbreedingCoeff=-0.0311;MLEAC=3;MLEAF=0.030;MQ=49.68;MQ0=41;MQRankSum=-5.059;QD=0.77;ReadPosRankSum=0.649;SNPEFF_AMINO_ACID_CHANGE=M453V;SNPEFF_CODON_CHANGE=Atg/Gtg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERAT [...]
+1 1431109 rs144198445 G A 273.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.337;DB;DP=2290;Dels=0.00;FS=4.834;HaplotypeScore=2.0661;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=49.72;MQ0=39;MQRankSum=1.426;QD=2.68;ReadPosRankSum=-0.727;SNPEFF_AMINO_ACID_CHANGE=G454E;SNPEFF_CODON_CHANGE=gGg/gAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1431163 rs140441570 G A 60.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.216;DB;DP=1722;Dels=0.00;FS=4.244;HaplotypeScore=2.5782;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=51.34;MQ0=59;MQRankSum=0.886;QD=3.17;ReadPosRankSum=-0.482;SNPEFF_AMINO_ACID_CHANGE=R472Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1431165 rs9792879 C T 8551.23 VQSRTrancheSNP99.00to99.30 AC=35;AF=0.350;AN=100;BaseQRankSum=-5.942;DB;DP=1681;Dels=0.00;FS=0.000;HaplotypeScore=2.3589;InbreedingCoeff=-0.5388;MLEAC=35;MLEAF=0.350;MQ=50.88;MQ0=57;MQRankSum=-3.121;QD=6.62;ReadPosRankSum=4.093;SNPEFF_AMINO_ACID_CHANGE=P473S;SNPEFF_CODON_CHANGE=Ccg/Tcg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1430865_1431581;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3B;SNPEFF_ [...]
+1 1447692 rs2274435 G A 214.71 PASS AC=9;AF=0.150;AN=60;BaseQRankSum=-2.637;DB;DP=75;Dels=0.00;FS=0.000;HaplotypeScore=0.3060;InbreedingCoeff=0.0818;MLEAC=9;MLEAF=0.150;MQ=43.83;MQ0=0;MQRankSum=-0.652;QD=9.34;ReadPosRankSum=-0.302;SNPEFF_AMINO_ACID_CHANGE=G15D;SNPEFF_CODON_CHANGE=gGc/gAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1447555_1447853;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 1447693 . C T 115.43 VQSRTrancheSNP99.00to99.30 AC=2;AF=0.036;AN=56;BaseQRankSum=0.116;DP=68;Dels=0.00;FS=0.000;HaplotypeScore=0.3041;InbreedingCoeff=0.0706;MLEAC=2;MLEAF=0.036;MQ=44.18;MQ0=0;MQRankSum=1.767;QD=23.09;ReadPosRankSum=-0.083;SNPEFF_AMINO_ACID_CHANGE=G15;SNPEFF_CODON_CHANGE=ggC/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1447555_1447853;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1451380 rs9439458 T C 31300.68 PASS AC=46;AF=0.460;AN=100;BaseQRankSum=6.904;DB;DP=1675;Dels=0.00;FS=10.137;HaplotypeScore=0.7101;InbreedingCoeff=0.3559;MLEAC=46;MLEAF=0.460;MQ=45.91;MQ0=11;MQRankSum=-1.905;QD=26.21;ReadPosRankSum=0.850;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378755;VQSLOD=1.31;culprit=MQ GT:AD:DP:GQ:PL 0/0:39,0:39:99:0,114,1437 0/0:32,0:32:96:0,96, [...]
+1 1451489 rs76717221 T C 9495.78 VQSRTrancheSNP99.00to99.30 AC=22;AF=0.220;AN=100;BaseQRankSum=12.478;DB;DP=1582;Dels=0.00;FS=1.129;HaplotypeScore=1.6089;InbreedingCoeff=0.0666;MLEAC=22;MLEAF=0.220;MQ=27.05;MQ0=285;MQRankSum=-1.239;QD=12.00;ReadPosRankSum=-0.069;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378755;VQSLOD=-5.066e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:30,0:30:87:0 [...]
+1 1451490 rs9439460 G A 8114.19 VQSRTrancheSNP99.00to99.30 AC=20;AF=0.200;AN=100;BaseQRankSum=-7.277;DB;DP=1587;Dels=0.00;FS=0.000;HaplotypeScore=1.5510;InbreedingCoeff=0.1230;MLEAC=20;MLEAF=0.200;MQ=27.16;MQ0=286;MQRankSum=-2.754;QD=11.86;ReadPosRankSum=-0.294;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378755;VQSLOD=-5.326e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:31,0:31:90:0, [...]
+1 1454272 rs10159059 T A 11008.01 VQSRTrancheSNP98.60to98.80 AC=16;AF=0.160;AN=100;BaseQRankSum=-11.336;DB;DP=3111;Dels=0.00;FS=11.158;HaplotypeScore=0.5487;InbreedingCoeff=0.2559;MLEAC=16;MLEAF=0.160;MQ=38.59;MQ0=137;MQRankSum=0.317;QD=13.71;ReadPosRankSum=1.177;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=0.569;culprit=MQ GT:AD:DP:GQ:PL 0/0:50,0:50:99:0 [...]
+1 1454412 . G A 716.18 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=-4.069;DP=2648;Dels=0.00;FS=0.000;HaplotypeScore=0.7287;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=34.00;MQ0=26;MQRankSum=-4.553;QD=10.53;ReadPosRankSum=1.449;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-1.465e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,108,1127 0/ [...]
+1 1455477 rs3128349 C T 145.09 VQSRTrancheSNP99.00to99.30 AC=4;AF=0.040;AN=100;BaseQRankSum=-2.805;DB;DP=394;Dels=0.00;FS=3.727;HaplotypeScore=0.1860;InbreedingCoeff=-0.0620;MLEAC=3;MLEAF=0.030;MQ=41.03;MQ0=16;MQRankSum=-3.505;QD=2.74;ReadPosRankSum=-0.492;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-1.674e-01;culprit=QD GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,97 [...]
+1 1455533 rs141500603 G A 385.39 VQSRTrancheSNP99.00to99.30 AC=2;AF=0.020;AN=100;BaseQRankSum=3.924;DB;DP=775;Dels=0.00;FS=6.987;HaplotypeScore=0.2125;InbreedingCoeff=-0.0258;MLEAC=2;MLEAF=0.020;MQ=31.79;MQ0=53;MQRankSum=1.658;QD=6.42;ReadPosRankSum=-0.813;SNPEFF_AMINO_ACID_CHANGE=R176Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1455521_1455686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMP [...]
+1 1455586 rs182976525 C T 473.26 VQSRTrancheSNP98.90to99.00 AC=1;AF=0.010;AN=100;BaseQRankSum=-0.136;DB;DP=960;Dels=0.00;FS=1.031;HaplotypeScore=0.7750;InbreedingCoeff=-0.0141;MLEAC=1;MLEAF=0.010;MQ=40.48;MQ0=47;MQRankSum=0.526;QD=17.53;ReadPosRankSum=-2.065;SNPEFF_AMINO_ACID_CHANGE=R115W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1455521_1455686;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_I [...]
+1 1455698 rs12065730 C T 408.25 VQSRTrancheSNP99.00to99.30 AC=2;AF=0.020;AN=100;BaseQRankSum=2.764;DB;DP=1901;Dels=0.00;FS=2.458;HaplotypeScore=0.8946;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=41.71;MQ0=39;MQRankSum=3.827;QD=3.85;ReadPosRankSum=0.010;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-5.950e-02;culprit=QD GT:AD:DP:GQ:PL 0/0:35,0:35:99:0,10 [...]
+1 1455710 rs45605537 C T 357.25 VQSRTrancheSNP99.00to99.30 AC=2;AF=0.020;AN=100;BaseQRankSum=3.592;DB;DP=1838;Dels=0.00;FS=1.967;HaplotypeScore=0.9073;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=38.17;MQ0=41;MQRankSum=-0.395;QD=6.16;ReadPosRankSum=-2.127;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-1.526e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:40,0:40:99:0, [...]
+1 1456039 rs2002374 G A 904.25 VQSRTrancheSNP99.00to99.30 AC=2;AF=0.020;AN=100;BaseQRankSum=-5.601;DB;DP=1479;Dels=0.00;FS=0.000;HaplotypeScore=0.3116;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=37.32;MQ0=28;MQRankSum=-1.993;QD=10.39;ReadPosRankSum=-1.750;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-4.850e-02;culprit=MQ GT:AD:DP:GQ:PL 0/0:32,0:32:96:0 [...]
+1 1458073 rs3118507 A G 1423.02 VQSRTrancheSNP99.00to99.30 AC=11;AF=0.110;AN=100;BaseQRankSum=6.575;DB;DP=1343;Dels=0.00;FS=0.600;HaplotypeScore=0.4303;InbreedingCoeff=0.0777;MLEAC=11;MLEAF=0.110;MQ=46.28;MQ0=9;MQRankSum=-8.146;QD=9.36;ReadPosRankSum=-1.642;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=-5.554e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:26,0:26:78:0, [...]
+1 1458109 rs185493637 G A 264.19 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.956;DB;DP=1710;Dels=0.00;FS=8.142;HaplotypeScore=0.5425;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=41.63;MQ0=50;MQRankSum=1.685;QD=12.01;ReadPosRankSum=-1.531;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000439513;VQSLOD=0.312;culprit=MQ GT:AD:DP:GQ:PL 0/0:29,0:29:63:0,63, [...]
+1 1458150 rs1135025 T C 430.25 VQSRTrancheSNP98.60to98.80 AC=2;AF=0.020;AN=100;BaseQRankSum=-3.306;DB;DP=1338;Dels=0.00;FS=0.000;HaplotypeScore=1.5888;InbreedingCoeff=-0.0205;MLEAC=2;MLEAF=0.020;MQ=49.60;MQ0=1;MQRankSum=-1.679;QD=6.83;ReadPosRankSum=1.663;SNPEFF_AMINO_ACID_CHANGE=V141;SNPEFF_CODON_CHANGE=gtT/gtC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1458124_1458160;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=LOW; [...]
+1 1458237 rs138532467 G A 1185.54 VQSRTrancheSNP99.00to99.30 AC=4;AF=0.040;AN=100;BaseQRankSum=-2.489;DB;DP=1035;Dels=0.00;FS=11.747;HaplotypeScore=0.4739;InbreedingCoeff=0.4584;MLEAC=4;MLEAF=0.040;MQ=33.91;MQ0=167;MQRankSum=1.814;QD=12.75;ReadPosRankSum=-0.277;SNPEFF_AMINO_ACID_CHANGE=T209;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1458124_1458279;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPAC [...]
+1 1458255 rs28675990 T G 622.67 VQSRTrancheSNP99.50to99.90 AC=14;AF=0.140;AN=100;BaseQRankSum=7.122;DB;DP=1041;Dels=0.00;FS=39.354;HaplotypeScore=0.5928;InbreedingCoeff=0.3090;MLEAC=12;MLEAF=0.120;MQ=35.19;MQ0=149;MQRankSum=-7.184;QD=3.23;ReadPosRankSum=0.155;SNPEFF_AMINO_ACID_CHANGE=L215;SNPEFF_CODON_CHANGE=ctT/ctG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1458124_1458279;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT= [...]
+1 1458285 rs6675874 A G 1117.66 VQSRTrancheSNP99.50to99.90 AC=18;AF=0.188;AN=96;BaseQRankSum=5.914;DB;DP=843;Dels=0.00;FS=85.621;HaplotypeScore=0.5349;InbreedingCoeff=0.4162;MLEAC=17;MLEAF=0.177;MQ=41.07;MQ0=31;MQRankSum=-8.792;QD=6.24;ReadPosRankSum=0.569;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=-4.991e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:10,0:10:30:0,3 [...]
+1 1458857 . T G 336.58 VQSRTrancheSNP99.30to99.50 AC=20;AF=0.213;AN=94;BaseQRankSum=-3.780;DP=188;Dels=0.00;FS=68.446;HaplotypeScore=0.2355;InbreedingCoeff=-0.2761;MLEAC=22;MLEAF=0.234;MQ=56.56;MQ0=0;MQRankSum=-1.865;QD=3.47;ReadPosRankSum=-8.265;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=-1.730e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,167 0/0:2, [...]
+1 1458954 rs3737714 C T 4709.41 PASS AC=15;AF=0.150;AN=100;BaseQRankSum=3.673;DB;DP=1295;Dels=0.00;FS=0.000;HaplotypeScore=0.7616;InbreedingCoeff=0.0873;MLEAC=14;MLEAF=0.140;MQ=55.71;MQ0=2;MQRankSum=4.171;QD=13.34;ReadPosRankSum=-0.458;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=3.27;culprit=MQ GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,756 0/0:29,0:29:87:0,87,9 [...]
+1 1459352 . C T 728.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=3.978;DP=2702;Dels=0.00;FS=1.086;HaplotypeScore=0.1930;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=39.84;MQ0=54;MQRankSum=-2.708;QD=9.71;ReadPosRankSum=-1.300;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=-2.084e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:48,0:48:99:0,138,1531 0/0 [...]
+1 1460581 rs10465902 T C 1058.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=6.199;DB;DP=3356;Dels=0.00;FS=10.675;HaplotypeScore=0.2881;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.35;MQ0=0;MQRankSum=3.690;QD=14.11;ReadPosRankSum=-2.664;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=5.58;culprit=MQ GT:AD:DP:GQ:PL 0/0:66,0:66:99:0,199,2207 0/0:67,0:67:99:0,2 [...]
+1 1460614 rs112869160 T C 782.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=6.572;DB;DP=4702;Dels=0.00;FS=5.972;HaplotypeScore=0.2182;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.42;MQ0=0;MQRankSum=-3.192;QD=10.43;ReadPosRankSum=-2.758;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=1.57;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:94,0:94:99:0,283,3396 0/0:99,0:99 [...]
+1 1460703 . G A 866.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.218;DP=3264;Dels=0.00;FS=1.199;HaplotypeScore=0.0873;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.71;MQ0=0;MQRankSum=0.701;QD=11.55;ReadPosRankSum=-1.799;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000429957;VQSLOD=3.21;culprit=MQ GT:AD:DP:GQ:PL 0/0:58,0:58:99:0,175,2145 0/0:52,0:52:99:0,156,1965 0/0:6 [...]
+1 1469263 rs6681228 G T 3003.62 VQSRTrancheSNP99.30to99.50 AC=25;AF=0.250;AN=100;BaseQRankSum=-10.664;DB;DP=693;Dels=0.00;FS=0.000;HaplotypeScore=0.3343;InbreedingCoeff=0.3902;MLEAC=25;MLEAF=0.250;MQ=32.83;MQ0=94;MQRankSum=-0.095;QD=12.21;ReadPosRankSum=2.361;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000400830;VQSLOD=-1.539e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:10,0:10:30: [...]
+1 1469289 rs28370384 G C 10059.26 VQSRTrancheSNP99.50to99.90 AC=47;AF=0.470;AN=100;BaseQRankSum=-1.836;DB;DP=906;Dels=0.00;FS=109.391;HaplotypeScore=0.6061;InbreedingCoeff=0.3928;MLEAC=47;MLEAF=0.470;MQ=42.98;MQ0=5;MQRankSum=-7.096;QD=19.49;ReadPosRankSum=1.899;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000400830;VQSLOD=-4.335e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:4 [...]
+1 1469341 rs141883472 C T 1471.25 VQSRTrancheSNP98.90to99.00 AC=2;AF=0.020;AN=100;BaseQRankSum=0.403;DB;DP=2122;Dels=0.00;FS=3.739;HaplotypeScore=0.5763;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=40.95;MQ0=80;MQRankSum=1.115;QD=9.81;ReadPosRankSum=0.183;SNPEFF_AMINO_ACID_CHANGE=T227;SNPEFF_CODON_CHANGE=acC/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1469306_1470064;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=LO [...]
+1 1469412 rs145341309 C T 1650.25 VQSRTrancheSNP98.50to98.60 AC=2;AF=0.020;AN=100;BaseQRankSum=2.060;DB;DP=2849;Dels=0.00;FS=2.371;HaplotypeScore=0.2823;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=49.22;MQ0=2;MQRankSum=-2.005;QD=12.22;ReadPosRankSum=-0.798;SNPEFF_AMINO_ACID_CHANGE=A251V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1469306_1470064;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_ [...]
+1 1469427 rs117930150 G A 605.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.577;DB;DP=2599;Dels=0.00;FS=0.804;HaplotypeScore=0.2501;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=48.74;MQ0=1;MQRankSum=0.934;QD=12.61;ReadPosRankSum=-1.442;SNPEFF_AMINO_ACID_CHANGE=R256H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1469306_1470064;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1469472 rs115508211 G C 2196.23 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=100;BaseQRankSum=-0.702;DB;DP=1799;Dels=0.00;FS=0.000;HaplotypeScore=0.1760;InbreedingCoeff=0.9978;MLEAC=2;MLEAF=0.020;MQ=49.27;MQ0=1;MQRankSum=-0.247;QD=36.00;ReadPosRankSum=1.712;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=ATAD3A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000400830;VQSLOD=-2.006e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:25,0:25:75:0 [...]
+1 1479231 . G A 829.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.421;DP=3807;Dels=0.00;FS=9.608;HaplotypeScore=1.2141;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.62;MQ0=0;MQRankSum=2.143;QD=11.06;ReadPosRankSum=-1.010;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SSU72;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378725;VQSLOD=3.01;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:82,0:82:99:0,241,2686 0/0:64,0:64:99:0,193 [...]
+1 1479240 rs188372356 G C 1363.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-1.672;DB;DP=3839;Dels=0.00;FS=20.626;HaplotypeScore=1.1578;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=57.77;MQ0=0;MQRankSum=0.394;QD=11.27;ReadPosRankSum=-1.388;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SSU72;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378725;VQSLOD=2.34;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:84,0:84:99:0,250,3043 0/0:6 [...]
+1 1479333 rs7533 A G 60021.35 PASS AC=59;AF=0.590;AN=100;BaseQRankSum=-4.594;DB;DP=2845;Dels=0.00;FS=2.645;HaplotypeScore=0.5403;InbreedingCoeff=0.1319;MLEAC=59;MLEAF=0.590;MQ=58.46;MQ0=0;MQRankSum=-0.451;QD=25.50;ReadPosRankSum=6.130;SNPEFF_AMINO_ACID_CHANGE=P133;SNPEFF_CODON_CHANGE=ccT/ccC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1479249_1479367;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SSU72;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1480226 rs116703397 C T 6204.20 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=-9.059;DB;DP=4151;Dels=0.00;FS=1.000;HaplotypeScore=0.4236;InbreedingCoeff=-0.0753;MLEAC=7;MLEAF=0.070;MQ=59.74;MQ0=0;MQRankSum=0.785;QD=12.64;ReadPosRankSum=-3.144;SNPEFF_AMINO_ACID_CHANGE=A127;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1480018_1480382;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SSU72;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1509825 rs6666293 A G 9439.48 PASS AC=62;AF=0.620;AN=100;BaseQRankSum=-6.948;DB;DP=459;Dels=0.00;FS=0.000;HaplotypeScore=0.3034;InbreedingCoeff=0.0876;MLEAC=62;MLEAF=0.620;MQ=58.97;MQ0=0;MQRankSum=0.176;QD=23.08;ReadPosRankSum=-0.208;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SSU72;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000291386;VQSLOD=5.79;culprit=MQ GT:AD:DP:GQ:PL 0/1:6,4:10:94:94,0,160 0/0:4,0:4:12:0,12,142 1/1:0 [...]
+1 1551927 rs7418389 T C 6794.27 PASS AC=55;AF=0.550;AN=100;BaseQRankSum=5.713;DB;DP=379;Dels=0.00;FS=2.082;HaplotypeScore=0.5005;InbreedingCoeff=0.0873;MLEAC=56;MLEAF=0.560;MQ=58.96;MQ0=0;MQRankSum=-1.273;QD=22.57;ReadPosRankSum=0.594;SNPEFF_AMINO_ACID_CHANGE=F15L;SNPEFF_CODON_CHANGE=Ttc/Ctc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1551888_1551994;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1558792 rs12755088 T C 14375.35 PASS AC=78;AF=0.796;AN=98;BaseQRankSum=-0.296;DB;DP=621;Dels=0.00;FS=12.259;HaplotypeScore=0.6382;InbreedingCoeff=0.2079;MLEAC=78;MLEAF=0.796;MQ=57.72;MQ0=0;MQRankSum=1.818;QD=24.91;ReadPosRankSum=0.301;SNPEFF_AMINO_ACID_CHANGE=M1T;SNPEFF_CODON_CHANGE=aTg/aCg;SNPEFF_EFFECT=START_LOST;SNPEFF_EXON_ID=exon_1_1558769_1559079;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 1559209 rs28681667 G T 341.33 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.495;DB;DP=886;Dels=0.00;FS=4.827;HaplotypeScore=0.4186;InbreedingCoeff=-0.0235;MLEAC=2;MLEAF=0.020;MQ=58.98;MQ0=0;MQRankSum=-0.667;QD=8.53;ReadPosRankSum=-1.247;SNPEFF_AMINO_ACID_CHANGE=G101;SNPEFF_CODON_CHANGE=ggG/ggT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1559154_1559325;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1559227 rs28414017 T C 110.32 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.797;DB;DP=916;Dels=0.00;FS=3.895;HaplotypeScore=0.5123;InbreedingCoeff=-0.0230;MLEAC=2;MLEAF=0.020;MQ=59.12;MQ0=0;MQRankSum=0.422;QD=5.52;ReadPosRankSum=-0.153;SNPEFF_AMINO_ACID_CHANGE=R107;SNPEFF_CODON_CHANGE=cgT/cgC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1559154_1559325;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1560351 . G T 355.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.716;DP=1996;Dels=0.00;FS=0.000;HaplotypeScore=0.4526;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.48;MQ0=0;MQRankSum=0.581;QD=16.14;ReadPosRankSum=-1.743;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000502470;VQSLOD=5.61;culprit=FS GT:AD:DP:GQ:PL 0/0:32,0:32:96:0,96,1156 0/0:30,0:30:90:0,90,1109 0/0:35,0: [...]
+1 1560569 rs148874530 T G 1106.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=4.856;DB;DP=2021;Dels=0.00;FS=2.291;HaplotypeScore=0.2710;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.72;MQ0=0;MQRankSum=-0.062;QD=13.49;ReadPosRankSum=-3.836;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000502470;VQSLOD=5.66;culprit=MQ GT:AD:DP:GQ:PL 0/0:41,0:41:99:0,120,1397 0/0:34,0:34:99:0,10 [...]
+1 1560751 rs182928518 T C 153.47 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-1.852;DB;DP=453;Dels=0.00;FS=1.466;HaplotypeScore=0.2913;InbreedingCoeff=0.7409;MLEAC=1;MLEAF=0.010;MQ=58.39;MQ0=0;MQRankSum=1.039;QD=19.18;ReadPosRankSum=-1.258;SNPEFF_AMINO_ACID_CHANGE=T204;SNPEFF_CODON_CHANGE=acT/acC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1560666_1560808;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1560778 . C G 36.75 VQSRTrancheSNP99.50to99.90 AC=5;AF=0.050;AN=100;BaseQRankSum=-2.184;DP=275;Dels=0.00;FS=51.291;HaplotypeScore=0.1524;InbreedingCoeff=-0.0819;MLEAC=4;MLEAF=0.040;MQ=58.79;MQ0=0;MQRankSum=2.082;QD=1.08;ReadPosRankSum=-3.669;SNPEFF_AMINO_ACID_CHANGE=G213;SNPEFF_CODON_CHANGE=ggC/ggG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1560666_1560808;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1560844 rs72897888 C T 33.02 PASS AC=2;AF=0.021;AN=96;BaseQRankSum=-1.773;DB;DP=238;Dels=0.00;FS=1.775;HaplotypeScore=0.1074;InbreedingCoeff=-0.0624;MLEAC=2;MLEAF=0.021;MQ=57.78;MQ0=0;MQRankSum=0.984;QD=4.13;ReadPosRankSum=-1.475;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000502470;VQSLOD=3.94;culprit=QD GT:AD:DP:GQ:PL 0/0:8,0:8:21:0,21,257 0/0:2,0:2:6:0,6,79 0/0:6,0:6: [...]
+1 1560858 rs72897889 C T 99.47 PASS AC=2;AF=0.022;AN=92;BaseQRankSum=0.955;DB;DP=221;Dels=0.00;FS=0.000;HaplotypeScore=0.0982;InbreedingCoeff=-0.0670;MLEAC=2;MLEAF=0.022;MQ=57.84;MQ0=0;MQRankSum=1.039;QD=11.05;ReadPosRankSum=-1.345;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000502470;VQSLOD=4.69;culprit=MQ GT:AD:DP:GQ:PL 0/0:7,0:7:18:0,18,202 0/0:2,0:2:6:0,6,79 0/0:6,0:6: [...]
+1 1562072 rs184093072 G A 61.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.006;DB;DP=1065;Dels=0.00;FS=0.000;HaplotypeScore=0.7494;InbreedingCoeff=-0.0108;MLEAC=1;MLEAF=0.010;MQ=58.14;MQ0=0;MQRankSum=0.976;QD=3.40;ReadPosRankSum=0.213;SNPEFF_AMINO_ACID_CHANGE=D274N;SNPEFF_CODON_CHANGE=Gac/Aac;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1562030_1562134;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 1562128 . G T 155.58 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-2.833;DP=510;Dels=0.00;FS=0.000;HaplotypeScore=0.3063;InbreedingCoeff=-0.0254;MLEAC=1;MLEAF=0.010;MQ=58.63;MQ0=0;MQRankSum=0.009;QD=17.29;ReadPosRankSum=0.055;SNPEFF_AMINO_ACID_CHANGE=M292I;SNPEFF_CODON_CHANGE=atG/atT;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1562030_1562134;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1562153 . C T 154.28 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.305;DP=323;Dels=0.00;FS=1.653;HaplotypeScore=0.3263;InbreedingCoeff=-0.0577;MLEAC=1;MLEAF=0.010;MQ=57.22;MQ0=0;MQRankSum=1.754;QD=19.29;ReadPosRankSum=0.388;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467597;VQSLOD=3.14;culprit=MQ GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,176 0/0:6,0:6:18:0,18,222 0/0:1,0:1:3:0,3,3 [...]
+1 1562437 rs28510084 C G 5400.19 PASS AC=33;AF=0.344;AN=96;BaseQRankSum=-8.127;DB;DP=500;Dels=0.00;FS=2.557;HaplotypeScore=0.2929;InbreedingCoeff=0.1084;MLEAC=33;MLEAF=0.344;MQ=58.56;MQ0=0;MQRankSum=-0.003;QD=18.95;ReadPosRankSum=-1.399;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467597;VQSLOD=5.94;culprit=MQ GT:AD:DP:GQ:PL 0/1:3,3:6:73:73,0,83 0/0:9,0:9:27:0,27,350 0/0 [...]
+1 1562536 rs11544452 G A 1007.91 PASS AC=13;AF=0.130;AN=100;BaseQRankSum=-0.180;DB;DP=474;Dels=0.00;FS=5.546;HaplotypeScore=0.5387;InbreedingCoeff=0.1626;MLEAC=12;MLEAF=0.120;MQ=58.19;MQ0=0;MQRankSum=1.309;QD=12.44;ReadPosRankSum=-1.003;SNPEFF_AMINO_ACID_CHANGE=A376;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1562454_1562587;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1562548 rs143944834 A G 151.42 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.489;DB;DP=451;Dels=0.00;FS=6.120;HaplotypeScore=0.4829;InbreedingCoeff=-0.0223;MLEAC=1;MLEAF=0.010;MQ=58.39;MQ0=0;MQRankSum=0.802;QD=12.62;ReadPosRankSum=-3.043;SNPEFF_AMINO_ACID_CHANGE=A380;SNPEFF_CODON_CHANGE=gcA/gcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1562454_1562587;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1562573 . A G 92.28 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.276;DP=606;Dels=0.00;FS=2.294;HaplotypeScore=0.3420;InbreedingCoeff=-0.0157;MLEAC=1;MLEAF=0.010;MQ=59.01;MQ0=0;MQRankSum=0.508;QD=9.23;ReadPosRankSum=-0.071;SNPEFF_AMINO_ACID_CHANGE=R389G;SNPEFF_CODON_CHANGE=Agg/Ggg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1562454_1562587;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST0 [...]
+1 1562677 . T G 79.84 VQSRTrancheSNP99.50to99.90 AC=7;AF=0.070;AN=100;BaseQRankSum=-14.207;DP=1651;Dels=0.00;FS=109.892;HaplotypeScore=1.4497;InbreedingCoeff=-0.0775;MLEAC=6;MLEAF=0.060;MQ=58.48;MQ0=0;MQRankSum=0.290;QD=0.30;ReadPosRankSum=-11.142;SNPEFF_AMINO_ACID_CHANGE=V394G;SNPEFF_CODON_CHANGE=gTg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1562676_1562824;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERAT [...]
+1 1562702 rs75147751 C T 239.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.427;DB;DP=2039;Dels=0.00;FS=1.258;HaplotypeScore=1.0287;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.71;MQ0=0;MQRankSum=1.468;QD=9.97;ReadPosRankSum=-0.248;SNPEFF_AMINO_ACID_CHANGE=T402;SNPEFF_CODON_CHANGE=acC/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1562676_1562824;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1562852 . G A 136.38 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.567;DP=830;Dels=0.00;FS=0.000;HaplotypeScore=0.6748;InbreedingCoeff=-0.0200;MLEAC=1;MLEAF=0.010;MQ=51.74;MQ0=16;MQRankSum=2.321;QD=5.68;ReadPosRankSum=-0.864;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467597;VQSLOD=0.262;culprit=MQ GT:AD:DP:GQ:PL 0/0:16,0:16:39:0,39,493 0/0:14,0:14:4 [...]
+1 1563100 rs76957527 C T 70.36 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.576;DB;DP=589;Dels=0.00;FS=0.000;HaplotypeScore=0.5085;InbreedingCoeff=-0.0227;MLEAC=1;MLEAF=0.010;MQ=58.77;MQ0=0;MQRankSum=-0.568;QD=7.04;ReadPosRankSum=-0.432;SNPEFF_AMINO_ACID_CHANGE=A459V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1563053_1563209;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1563105 rs74808013 G A 93.43 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.343;DB;DP=595;Dels=0.00;FS=4.080;HaplotypeScore=0.4613;InbreedingCoeff=-0.0223;MLEAC=1;MLEAF=0.010;MQ=58.98;MQ0=0;MQRankSum=0.988;QD=9.34;ReadPosRankSum=-0.042;SNPEFF_AMINO_ACID_CHANGE=A461T;SNPEFF_CODON_CHANGE=Gcc/Acc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1563053_1563209;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 1563401 rs74047812 C T 262.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.182;DB;DP=1859;Dels=0.00;FS=0.000;HaplotypeScore=0.4129;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.43;MQ0=0;MQRankSum=0.103;QD=8.19;ReadPosRankSum=-0.696;SNPEFF_AMINO_ACID_CHANGE=D496;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1563399_1563559;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1563434 . C T 104.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.992;DP=1850;Dels=0.00;FS=6.011;HaplotypeScore=0.2732;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=1.462;QD=3.59;ReadPosRankSum=-0.724;SNPEFF_AMINO_ACID_CHANGE=I507;SNPEFF_CODON_CHANGE=atC/atT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1563399_1563559;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0000037871 [...]
+1 1563702 rs142836393 A G 711.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.782;DB;DP=1132;Dels=0.00;FS=7.552;HaplotypeScore=0.4248;InbreedingCoeff=-0.0105;MLEAC=1;MLEAF=0.010;MQ=59.50;MQ0=0;MQRankSum=0.401;QD=14.22;ReadPosRankSum=-0.049;SNPEFF_AMINO_ACID_CHANGE=K566E;SNPEFF_CODON_CHANGE=Aag/Gag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1563653_1563779;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1563789 rs74892851 C A 3708.51 PASS AC=19;AF=0.190;AN=100;BaseQRankSum=8.254;DB;DP=920;Dels=0.00;FS=1.263;HaplotypeScore=0.4106;InbreedingCoeff=-0.2358;MLEAC=19;MLEAF=0.190;MQ=58.69;MQ0=0;MQRankSum=1.368;QD=12.36;ReadPosRankSum=0.529;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000467597;VQSLOD=5.24;culprit=MQ GT:AD:DP:GQ:PL 0/0:12,0:12:36:0,36,401 0/1:9,8:17:99:248,0,244 [...]
+1 1564641 . C T 261.95 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.092;DP=368;Dels=0.00;FS=0.000;HaplotypeScore=0.1732;InbreedingCoeff=-0.0451;MLEAC=1;MLEAF=0.010;MQ=59.07;MQ0=0;MQRankSum=1.059;QD=10.48;ReadPosRankSum=-3.759;SNPEFF_AMINO_ACID_CHANGE=A712;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1564513_1564691;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST0000037871 [...]
+1 1564712 rs61774907 G T 650.21 PASS AC=14;AF=0.149;AN=94;BaseQRankSum=-5.247;DB;DP=301;Dels=0.00;FS=9.243;HaplotypeScore=0.4423;InbreedingCoeff=0.1087;MLEAC=14;MLEAF=0.149;MQ=58.42;MQ0=0;MQRankSum=3.194;QD=12.27;ReadPosRankSum=-0.970;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464570;VQSLOD=4.70;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,33 0/1:1,1:2:26:26,0,34 0/0:3,0: [...]
+1 1564769 . C T 49.10 PASS AC=1;AF=0.013;AN=80;BaseQRankSum=0.070;DP=164;Dels=0.00;FS=0.000;HaplotypeScore=0.1680;InbreedingCoeff=-0.0923;MLEAC=1;MLEAF=0.013;MQ=58.21;MQ0=0;MQRankSum=1.150;QD=9.82;ReadPosRankSum=-0.750;SNPEFF_AMINO_ACID_CHANGE=R760W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1564765_1564946;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 1564952 rs112177324 TG T 1418.76 PASS AC=22;AF=0.224;AN=98;BaseQRankSum=-0.564;DB;DP=323;FS=7.516;HaplotypeScore=4.1421;InbreedingCoeff=0.1477;MLEAC=19;MLEAF=0.194;MQ=60.04;MQ0=0;MQRankSum=2.617;QD=16.12;RPA=6,5;RU=G;ReadPosRankSum=-1.605;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464570;STR GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,74 0/1:2,5:8:50:163,0,50 0/1:3,1:4:17:17,0,95 [...]
+1 1565942 rs116306698 C G 557.79 PASS AC=2;AF=0.020;AN=98;BaseQRankSum=6.996;DB;DP=394;Dels=0.00;FS=0.000;HaplotypeScore=0.1004;InbreedingCoeff=-0.0614;MLEAC=2;MLEAF=0.020;MQ=59.00;MQ0=0;MQRankSum=0.626;QD=14.68;ReadPosRankSum=-1.012;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464570;VQSLOD=6.43;culprit=FS GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,201 0/0:4,0:4:12:0,12,129 0/0:4 [...]
+1 1569784 . C G 35.69 VQSRTrancheSNP99.50to99.90 AC=7;AF=0.140;AN=50;BaseQRankSum=2.233;DP=127;Dels=0.00;FS=6.842;HaplotypeScore=0.1196;InbreedingCoeff=0.0972;MLEAC=6;MLEAF=0.120;MQ=28.09;MQ0=20;MQRankSum=-1.916;QD=1.37;ReadPosRankSum=-1.251;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MIB2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000355826;VQSLOD=-2.110e+00;culprit=QD GT:AD:DP:GQ:PL ./. 0/0:4,0:4:12:0,12,155 1/1:0,1:1 [...]
+1 1571660 . C G 40.73 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.027;AN=74;BaseQRankSum=-1.263;DP=417;Dels=0.00;FS=0.000;HaplotypeScore=0.3899;InbreedingCoeff=0.1904;MLEAC=1;MLEAF=0.014;MQ=18.02;MQ0=239;MQRankSum=-0.816;QD=4.07;ReadPosRankSum=0.863;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-4.305e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:12,0:12:12:0,12,134 0/0:8,0: [...]
+1 1571661 . G C 495.47 VQSRTrancheSNP99.50to99.90 AC=22;AF=0.379;AN=58;BaseQRankSum=-1.358;DP=316;Dels=0.00;FS=0.000;HaplotypeScore=0.4288;InbreedingCoeff=0.0333;MLEAC=22;MLEAF=0.379;MQ=15.96;MQ0=191;MQRankSum=1.153;QD=3.51;ReadPosRankSum=-4.144;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-4.086e+00;culprit=MQ GT:AD:DP:GQ:PL 1/1:7,1:8:3:33,3,0 ./. 1/1:4, [...]
+1 1571802 rs116527252 G A 102.28 VQSRTrancheSNP98.90to99.00 AC=1;AF=0.010;AN=100;BaseQRankSum=-1.382;DB;DP=1148;Dels=0.00;FS=6.513;HaplotypeScore=0.4852;InbreedingCoeff=-0.0150;MLEAC=1;MLEAF=0.010;MQ=42.99;MQ0=10;MQRankSum=-1.164;QD=3.01;ReadPosRankSum=-1.157;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=0.017;culprit=QD GT:AD:DP:GQ:PL 0/0:32,0:32:96:0,96, [...]
+1 1571829 rs147836863 A G 1091.87 VQSRTrancheSNP99.00to99.30 AC=14;AF=0.140;AN=100;BaseQRankSum=9.140;DB;DP=896;Dels=0.00;FS=27.714;HaplotypeScore=0.4002;InbreedingCoeff=-0.1647;MLEAC=14;MLEAF=0.140;MQ=43.86;MQ0=12;MQRankSum=-5.083;QD=2.74;ReadPosRankSum=-3.941;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-3.691e-01;culprit=QD GT:AD:DP:GQ:PL 0/0:26,0:26:7 [...]
+1 1571841 rs150949339 A C 105.98 VQSRTrancheSNP99.30to99.50 AC=6;AF=0.060;AN=100;BaseQRankSum=5.936;DB;DP=718;Dels=0.00;FS=30.375;HaplotypeScore=0.3256;InbreedingCoeff=-0.0744;MLEAC=4;MLEAF=0.040;MQ=44.58;MQ0=11;MQRankSum=-7.291;QD=0.76;ReadPosRankSum=-2.858;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-1.065e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:21,0:21:63:0 [...]
+1 1571865 . A C 200.36 VQSRTrancheSNP99.50to99.90 AC=18;AF=0.180;AN=100;BaseQRankSum=-6.695;DP=502;Dels=0.00;FS=200.401;HaplotypeScore=0.3255;InbreedingCoeff=-0.2185;MLEAC=15;MLEAF=0.150;MQ=39.87;MQ0=41;MQRankSum=-7.440;QD=1.00;ReadPosRankSum=-8.681;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-1.388e+01;culprit=FS GT:AD:DP:GQ:PL 0/0:14,4:18:32:0,32,367 0 [...]
+1 1571888 . G A 97.09 VQSRTrancheSNP99.50to99.90 AC=5;AF=0.050;AN=100;BaseQRankSum=-5.574;DP=739;Dels=0.00;FS=61.390;HaplotypeScore=0.5499;InbreedingCoeff=-0.0735;MLEAC=5;MLEAF=0.050;MQ=30.99;MQ0=135;MQRankSum=-0.378;QD=0.92;ReadPosRankSum=-2.327;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-3.143e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:24,0:24:51:0,51,603 0/0: [...]
+1 1572035 rs74047814 C T 445.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.945;DB;DP=2577;Dels=0.00;FS=0.000;HaplotypeScore=0.3019;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.20;MQ0=0;MQRankSum=-1.069;QD=13.91;ReadPosRankSum=-0.994;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=4.86;culprit=FS GT:AD:DP:GQ:PL 0/0:71,0:71:99:0,208,2577 0/0:45,0:45:99:0,1 [...]
+1 1572125 . A G 1123.25 VQSRTrancheSNP98.80to98.90 AC=2;AF=0.020;AN=100;BaseQRankSum=8.997;DP=3765;Dels=0.00;FS=0.698;HaplotypeScore=0.0906;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=53.30;MQ0=3;MQRankSum=-4.966;QD=11.35;ReadPosRankSum=-2.103;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=0.242;culprit=MQ GT:AD:DP:GQ:PL 0/0:115,0:115:99:0,346,3951 0/0:6 [...]
+1 1572241 . C CA 752.15 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.093;DP=1448;FS=71.784;HaplotypeScore=6.7056;InbreedingCoeff=-0.0113;MLEAC=1;MLEAF=0.010;MQ=52.70;MQ0=0;MQRankSum=3.032;QD=15.67;RPA=1,2;RU=A;ReadPosRankSum=-2.991;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;STR GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,135,1887 0/0:35,0:35:99:0,105,1933 0/0:18,0:18:54:0,54 [...]
+1 1572255 rs191114998 T G 331.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.525;DB;DP=1420;Dels=0.00;FS=1.039;HaplotypeScore=0.2458;InbreedingCoeff=-0.0109;MLEAC=1;MLEAF=0.010;MQ=51.34;MQ0=8;MQRankSum=-0.697;QD=13.80;ReadPosRankSum=-1.839;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=1.04;culprit=MQ GT:AD:DP:GQ:PL 0/0:42,0:42:99:0,117,1340 0/0:30,0:30:90:0, [...]
+1 1572287 . C T 300.18 VQSRTrancheSNP98.60to98.80 AC=1;AF=0.010;AN=100;BaseQRankSum=0.864;DP=1493;Dels=0.00;FS=0.964;HaplotypeScore=0.2735;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=52.01;MQ0=4;MQRankSum=2.514;QD=6.13;ReadPosRankSum=-1.718;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=0.545;culprit=MQ GT:AD:DP:GQ:PL 0/1:33,16:47:99:340,0,884 0/0:29,0:2 [...]
+1 1572384 rs146043578 C T 815.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.015;DB;DP=1735;Dels=0.00;FS=1.630;HaplotypeScore=0.3277;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=52.70;MQ0=1;MQRankSum=2.094;QD=12.54;ReadPosRankSum=-0.913;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=1.12;culprit=MQ GT:AD:DP:GQ:PL 0/0:51,0:51:99:0,153,1798 0/0:22,0:22:66:0,6 [...]
+1 1572417 rs188330435 G T 402.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.511;DB;DP=2011;Dels=0.00;FS=0.937;HaplotypeScore=0.2597;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=50.14;MQ0=12;MQRankSum=-1.055;QD=11.17;ReadPosRankSum=1.247;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=0.870;culprit=MQ GT:AD:DP:GQ:PL 0/0:48,0:48:99:0,144,1775 0/0:35,0:35:99:0 [...]
+1 1572893 . G A 93.34 VQSRTrancheSNP99.30to99.50 AC=5;AF=0.050;AN=100;BaseQRankSum=-6.548;DP=757;Dels=0.00;FS=0.693;HaplotypeScore=0.3418;InbreedingCoeff=-0.0699;MLEAC=4;MLEAF=0.040;MQ=32.58;MQ0=86;MQRankSum=-5.014;QD=0.82;ReadPosRankSum=0.472;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-1.905e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:14,0:14:42:0,42,516 0/0:14, [...]
+1 1573078 . A G 459.12 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.030;AN=100;BaseQRankSum=-7.275;DP=5460;Dels=0.00;FS=0.000;HaplotypeScore=0.5645;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=41.19;MQ0=54;MQRankSum=-8.777;QD=2.04;ReadPosRankSum=-0.901;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-2.119e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4588 [...]
+1 1573178 rs117061368 C G 920.18 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=2.374;DB;DP=5438;Dels=0.00;FS=1.406;HaplotypeScore=1.4722;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=40.75;MQ0=63;MQRankSum=-2.251;QD=12.27;ReadPosRankSum=-1.262;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=0.318;culprit=MQ GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,3 [...]
+1 1573181 rs138980727 C A 156.26 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=100;BaseQRankSum=5.896;DB;DP=5407;Dels=0.00;FS=4.339;HaplotypeScore=1.3657;InbreedingCoeff=-0.0210;MLEAC=2;MLEAF=0.020;MQ=40.36;MQ0=72;MQRankSum=-13.238;QD=1.04;ReadPosRankSum=-0.075;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000356026;VQSLOD=-3.694e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:127,0:127:9 [...]
+1 1575616 rs80012316 T C 6681.50 VQSRTrancheSNP99.50to99.90 AC=83;AF=0.847;AN=98;BaseQRankSum=6.586;DB;DP=724;Dels=0.00;FS=95.690;HaplotypeScore=0.3152;InbreedingCoeff=0.1467;MLEAC=84;MLEAF=0.857;MQ=30.23;MQ0=141;MQRankSum=-17.027;QD=10.83;ReadPosRankSum=0.692;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MMP23B;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000490017;VQSLOD=-7.700e+00;culprit=FS GT:AD:DP:GQ:PL 1/1:0,17:17:21 [...]
+1 1575784 . C T 640.70 VQSRTrancheSNP99.50to99.90 AC=12;AF=0.120;AN=100;BaseQRankSum=3.053;DP=2036;Dels=0.00;FS=27.053;HaplotypeScore=0.6394;InbreedingCoeff=-0.1439;MLEAC=11;MLEAF=0.110;MQ=16.56;MQ0=814;MQRankSum=-0.445;QD=0.87;ReadPosRankSum=0.444;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-5.260e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:18,0:18:54 [...]
+1 1575836 rs72468213 C G 7320.75 VQSRTrancheSNP99.50to99.90 AC=39;AF=0.390;AN=100;BaseQRankSum=23.099;DB;DP=1984;Dels=0.00;FS=2.174;HaplotypeScore=0.8905;InbreedingCoeff=-0.6467;MLEAC=39;MLEAF=0.390;MQ=27.24;MQ0=265;MQRankSum=-0.617;QD=4.26;ReadPosRankSum=1.675;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-4.325e+00;culprit=MQ GT:AD:DP:GQ:PL 0 [...]
+1 1575863 rs142965371 A T 1920.72 VQSRTrancheSNP99.30to99.50 AC=12;AF=0.120;AN=100;BaseQRankSum=-10.826;DB;DP=1310;Dels=0.00;FS=2.776;HaplotypeScore=0.8060;InbreedingCoeff=-0.1410;MLEAC=12;MLEAF=0.120;MQ=29.88;MQ0=20;MQRankSum=-5.555;QD=4.19;ReadPosRankSum=0.122;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-1.961e+00;culprit=MQ GT:AD:DP:GQ:PL [...]
+1 1580524 . C T 186.26 VQSRTrancheSNP99.50to99.90 AC=8;AF=0.100;AN=80;BaseQRankSum=-2.944;DP=626;Dels=0.00;FS=0.000;HaplotypeScore=0.2064;InbreedingCoeff=-0.1295;MLEAC=8;MLEAF=0.100;MQ=15.29;MQ0=161;MQRankSum=-0.395;QD=1.51;ReadPosRankSum=-0.597;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-4.374e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:24,8:31:6:0,6 [...]
+1 1580738 rs149767621 T A 8238.16 VQSRTrancheSNP99.50to99.90 AC=45;AF=0.459;AN=98;BaseQRankSum=-20.476;DB;DP=1414;Dels=0.00;FS=4.533;HaplotypeScore=0.3951;InbreedingCoeff=-0.7670;MLEAC=45;MLEAF=0.459;MQ=23.99;MQ0=227;MQRankSum=0.402;QD=6.55;ReadPosRankSum=-0.255;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-5.630e+00;culprit=MQ GT:AD:DP:GQ:PL [...]
+1 1580748 . A G 157.41 VQSRTrancheSNP99.50to99.90 AC=1;AF=0.010;AN=98;BaseQRankSum=0.760;DP=971;Dels=0.00;FS=0.000;HaplotypeScore=0.2415;InbreedingCoeff=-0.0152;MLEAC=1;MLEAF=0.010;MQ=22.37;MQ0=242;MQRankSum=0.673;QD=6.05;ReadPosRankSum=-2.117;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-2.656e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:35,0:35:57:0,57 [...]
+1 1582106 rs79942991 T C 115843.77 VQSRTrancheSNP99.50to99.90 AC=89;AF=0.890;AN=100;BaseQRankSum=7.365;DB;DP=4103;Dels=0.00;FS=3.878;HaplotypeScore=0.3014;InbreedingCoeff=-0.1236;MLEAC=89;MLEAF=0.890;MQ=36.39;MQ0=114;MQRankSum=-18.692;QD=28.23;ReadPosRankSum=1.360;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-5.066e+00;culprit=MQRankSum GT:AD: [...]
+1 1582146 . T C 441.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.540;DP=7445;Dels=0.00;FS=4.249;HaplotypeScore=1.3339;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=40.58;MQ0=49;MQRankSum=-1.530;QD=5.88;ReadPosRankSum=1.450;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-5.753e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:201,0:201:99: [...]
+1 1582198 . C G 906.12 VQSRTrancheSNP99.30to99.50 AC=3;AF=0.030;AN=100;BaseQRankSum=-4.291;DP=3749;Dels=0.00;FS=2.432;HaplotypeScore=2.4143;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=32.93;MQ0=575;MQRankSum=2.067;QD=4.36;ReadPosRankSum=0.935;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-1.260e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:75,0:75:99:0, [...]
+1 1582302 rs191403755 C A 87.18 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-3.515;DB;DP=2944;Dels=0.00;FS=1.732;HaplotypeScore=0.0773;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=30.88;MQ0=30;MQRankSum=-0.500;QD=3.79;ReadPosRankSum=-0.961;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-7.997e-01;culprit=QD GT:AD:DP:GQ:PL 0/0: [...]
+1 1585597 rs7531938 A G 4359.96 PASS AC=55;AF=0.561;AN=98;BaseQRankSum=-1.073;DB;DP=302;Dels=0.00;FS=0.542;HaplotypeScore=0.1116;InbreedingCoeff=0.1130;MLEAC=53;MLEAF=0.541;MQ=58.81;MQ0=0;MQRankSum=0.214;QD=21.27;ReadPosRankSum=-0.558;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=5.84;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,5:5:15:167,15,0 0/1:5,6:11:9 [...]
+1 1585642 rs3936009 G T 3846.92 PASS AC=49;AF=0.544;AN=90;BaseQRankSum=-8.942;DB;DP=261;Dels=0.00;FS=2.337;HaplotypeScore=0.0881;InbreedingCoeff=0.0934;MLEAC=48;MLEAF=0.533;MQ=59.22;MQ0=0;MQRankSum=0.655;QD=21.25;ReadPosRankSum=0.621;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=6.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL 1/1:0,11:11:33:388,33,0 [...]
+1 1586816 rs115880964 C T 568.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.917;DB;DP=1773;Dels=0.00;FS=0.824;HaplotypeScore=0.2600;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=48.37;MQ0=49;MQRankSum=-0.621;QD=12.63;ReadPosRankSum=-2.095;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=0.932;culprit=MQ GT:AD:DP:GQ:PL 0/0:51,0:51:99:0,153,1843 0/0 [...]
+1 1586953 rs145224189 G A 144.19 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=-4.645;DB;DP=1168;Dels=0.00;FS=0.000;HaplotypeScore=0.0598;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=29.08;MQ0=60;MQRankSum=-0.909;QD=4.37;ReadPosRankSum=-2.328;SNPEFF_EFFECT=TRANSCRIPT;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=unprocessed_pseudogene;SNPEFF_GENE_NAME=AL691432.2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000317673;VQSLOD=-9.213e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0 [...]
+1 1634881 . G C 91.76 VQSRTrancheSNP99.50to99.90 AC=7;AF=0.206;AN=34;BaseQRankSum=-0.637;DP=202;Dels=0.00;FS=0.000;HaplotypeScore=0.2856;InbreedingCoeff=-0.2039;MLEAC=7;MLEAF=0.206;MQ=15.12;MQ0=85;MQRankSum=0.892;QD=2.29;ReadPosRankSum=-3.797;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=-4.313e+00;culprit=QD GT:AD:DP:GQ:PL ./. 0/0:3,0:3:3:0,3,33 ./. ./. 0 [...]
+1 1635004 rs874516 T C 8506.33 VQSRTrancheSNP99.00to99.30 AC=53;AF=0.564;AN=94;BaseQRankSum=8.473;DB;DP=634;Dels=0.00;FS=3.427;HaplotypeScore=0.4463;InbreedingCoeff=0.2369;MLEAC=52;MLEAF=0.553;MQ=38.87;MQ0=18;MQRankSum=-4.597;QD=18.95;ReadPosRankSum=2.567;SNPEFF_AMINO_ACID_CHANGE=K44;SNPEFF_CODON_CHANGE=aaA/aaG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LOW;S [...]
+1 1635011 rs1059811 A G 104.66 VQSRTrancheSNP99.30to99.50 AC=5;AF=0.053;AN=94;BaseQRankSum=3.424;DB;DP=656;Dels=0.00;FS=3.635;HaplotypeScore=0.4455;InbreedingCoeff=0.2754;MLEAC=3;MLEAF=0.032;MQ=39.37;MQ0=20;MQRankSum=-3.813;QD=2.91;ReadPosRankSum=0.378;SNPEFF_AMINO_ACID_CHANGE=V621A;SNPEFF_CODON_CHANGE=gTa/gCa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635063;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT= [...]
+1 1635022 rs1136978 A G 420.94 VQSRTrancheSNP99.50to99.90 AC=17;AF=0.170;AN=100;BaseQRankSum=-3.483;DB;DP=659;Dels=0.00;FS=15.735;HaplotypeScore=0.3202;InbreedingCoeff=0.4522;MLEAC=11;MLEAF=0.110;MQ=40.11;MQ0=6;MQRankSum=-4.414;QD=4.53;ReadPosRankSum=-2.463;SNPEFF_AMINO_ACID_CHANGE=S617;SNPEFF_CODON_CHANGE=agT/agC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635063;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LO [...]
+1 1635061 rs1136980 C A 55.49 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.973;DB;DP=446;Dels=0.00;FS=1.858;HaplotypeScore=0.1171;InbreedingCoeff=-0.0246;MLEAC=1;MLEAF=0.010;MQ=43.48;MQ0=5;MQRankSum=-2.673;QD=4.27;ReadPosRankSum=0.067;SNPEFF_AMINO_ACID_CHANGE=E604D;SNPEFF_CODON_CHANGE=gaG/gaT;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1634915_1635063;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT [...]
+1 1635085 . A C 50.91 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.115;AN=96;BaseQRankSum=-4.622;DP=311;Dels=0.00;FS=116.218;HaplotypeScore=0.3479;InbreedingCoeff=-0.0539;MLEAC=9;MLEAF=0.094;MQ=38.48;MQ0=31;MQRankSum=-3.888;QD=0.73;ReadPosRankSum=-5.613;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=-4.963e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:13,1:14:16:0,16,446 0/0: [...]
+1 1635108 rs11488590 G A 934.35 VQSRTrancheSNP99.50to99.90 AC=14;AF=0.146;AN=96;BaseQRankSum=-1.891;DB;DP=472;Dels=0.00;FS=69.983;HaplotypeScore=0.2181;InbreedingCoeff=-0.0511;MLEAC=14;MLEAF=0.146;MQ=29.62;MQ0=109;MQRankSum=-1.492;QD=5.37;ReadPosRankSum=1.004;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=-3.114e+00;culprit=FS GT:AD:DP:GQ:PL 0/0:16,0:16:39: [...]
+1 1635407 rs74045976 A G 4760.18 PASS AC=7;AF=0.070;AN=100;BaseQRankSum=4.103;DB;DP=1853;Dels=0.00;FS=0.473;HaplotypeScore=0.4719;InbreedingCoeff=0.2319;MLEAC=7;MLEAF=0.070;MQ=55.05;MQ0=2;MQRankSum=-0.284;QD=17.90;ReadPosRankSum=-2.734;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=2.03;culprit=MQ GT:AD:DP:GQ:PL 0/0:42,0:42:99:0,126,1529 0/0:43,0:43:99:0,12 [...]
+1 1635421 rs72901761 G A 1037.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.736;DB;DP=1462;Dels=0.00;FS=0.652;HaplotypeScore=0.3273;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=53.53;MQ0=4;MQRankSum=-2.222;QD=11.65;ReadPosRankSum=-1.050;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=1.82;culprit=MQ GT:AD:DP:GQ:PL 0/0:39,0:39:99:0,117,1326 0/0:29,0:29:87:0, [...]
+1 1635439 . A G 362.18 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=100;BaseQRankSum=0.964;DP=1238;Dels=0.00;FS=2.198;HaplotypeScore=0.3145;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=52.58;MQ0=4;MQRankSum=-3.064;QD=11.68;ReadPosRankSum=1.459;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.268;culprit=MQ GT:AD:DP:GQ:PL 0/1:14,17:30:99:402,0,395 0/0:22,0: [...]
+1 1635507 . G A 405.20 VQSRTrancheSNP98.60to98.80 AC=1;AF=0.010;AN=100;BaseQRankSum=2.584;DP=1298;Dels=0.00;FS=0.000;HaplotypeScore=0.5480;InbreedingCoeff=-0.0108;MLEAC=1;MLEAF=0.010;MQ=50.53;MQ0=5;MQRankSum=1.387;QD=10.39;ReadPosRankSum=-0.627;SNPEFF_AMINO_ACID_CHANGE=R555C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635478_1635585;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODERATE [...]
+1 1635565 rs11488591 C T 10687.11 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=-5.755;DB;DP=1407;Dels=0.00;FS=20.884;HaplotypeScore=0.8088;InbreedingCoeff=0.0782;MLEAC=17;MLEAF=0.170;MQ=50.79;MQ0=7;MQRankSum=1.284;QD=16.52;ReadPosRankSum=0.476;SNPEFF_AMINO_ACID_CHANGE=A535;SNPEFF_CODON_CHANGE=gcG/gcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635478_1635585;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT [...]
+1 1635617 rs115354721 C T 748.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.816;DB;DP=1547;Dels=0.00;FS=1.493;HaplotypeScore=1.5279;InbreedingCoeff=-0.0207;MLEAC=2;MLEAF=0.020;MQ=50.80;MQ0=0;MQRankSum=2.325;QD=7.56;ReadPosRankSum=-0.952;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=1.07;culprit=MQ GT:AD:DP:GQ:PL 0/0:15,0:15:45:0,45,529 0/0:26,0:26:78:0,78,9 [...]
+1 1635619 rs2076329 T C 37299 PASS AC=65;AF=0.650;AN=100;BaseQRankSum=3.725;DB;DP=1683;Dels=0.00;FS=3.612;HaplotypeScore=1.6660;InbreedingCoeff=0.0769;MLEAC=65;MLEAF=0.650;MQ=50.64;MQ0=0;MQRankSum=-3.676;QD=24.55;ReadPosRankSum=0.233;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.839;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:54:0,54,650 1/1:0,30:30:90:1058,90 [...]
+1 1635749 rs55880629 C A 10910.33 VQSRTrancheSNP99.30to99.50 AC=47;AF=0.470;AN=100;BaseQRankSum=-15.926;DB;DP=1525;Dels=0.00;FS=7.922;HaplotypeScore=0.7731;InbreedingCoeff=0.0759;MLEAC=47;MLEAF=0.470;MQ=42.30;MQ0=40;MQRankSum=-10.985;QD=11.96;ReadPosRankSum=1.160;SNPEFF_AMINO_ACID_CHANGE=R499;SNPEFF_CODON_CHANGE=cgG/cgT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635662_1635783;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMP [...]
+1 1635943 rs1534950 A C 1501.42 VQSRTrancheSNP98.80to98.90 AC=17;AF=0.170;AN=100;BaseQRankSum=6.957;DB;DP=426;Dels=0.00;FS=0.000;HaplotypeScore=0.1954;InbreedingCoeff=0.0437;MLEAC=17;MLEAF=0.170;MQ=45.75;MQ0=0;MQRankSum=-4.592;QD=9.69;ReadPosRankSum=-0.426;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.298;culprit=MQ GT:AD:DP:GQ:PL 0/0:7,0:7:21:0,21,240 0 [...]
+1 1635979 rs1534951 G C 3048.61 VQSRTrancheSNP98.90to99.00 AC=17;AF=0.170;AN=100;BaseQRankSum=5.210;DB;DP=673;Dels=0.00;FS=0.000;HaplotypeScore=0.5137;InbreedingCoeff=0.0713;MLEAC=17;MLEAF=0.170;MQ=44.90;MQ0=14;MQRankSum=-4.420;QD=12.19;ReadPosRankSum=0.530;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.107;culprit=MQ GT:AD:DP:GQ:PL 0/0:9,0:9:27:0,27,292 [...]
+1 1636044 rs1059822 G A 7368.94 VQSRTrancheSNP99.30to99.50 AC=61;AF=0.610;AN=100;BaseQRankSum=-0.556;DB;DP=714;Dels=0.00;FS=21.519;HaplotypeScore=0.3671;InbreedingCoeff=0.1238;MLEAC=61;MLEAF=0.610;MQ=41.21;MQ0=41;MQRankSum=-11.770;QD=14.36;ReadPosRankSum=0.096;SNPEFF_AMINO_ACID_CHANGE=Y469;SNPEFF_CODON_CHANGE=taC/taT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1635989_1636094;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT [...]
+1 1636112 rs4288535 G A 1456.58 VQSRTrancheSNP98.90to99.00 AC=16;AF=0.163;AN=98;BaseQRankSum=-8.473;DB;DP=582;Dels=0.00;FS=4.438;HaplotypeScore=0.4121;InbreedingCoeff=-0.0638;MLEAC=16;MLEAF=0.163;MQ=33.54;MQ0=98;MQRankSum=-2.009;QD=5.95;ReadPosRankSum=2.219;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.030;culprit=MQ GT:AD:DP:GQ:PL 0/0:16,0:16:33:0,33,36 [...]
+1 1636307 . T C 887.27 VQSRTrancheSNP98.80to98.90 AC=1;AF=0.010;AN=98;BaseQRankSum=5.066;DP=5425;Dels=0.00;FS=0.000;HaplotypeScore=1.1038;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=43.97;MQ0=22;MQRankSum=1.527;QD=11.83;ReadPosRankSum=-3.911;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378635;VQSLOD=0.252;culprit=MQ GT:AD:DP:GQ:PL 0/0:236,0:236:99:0,710,8527 0/0:122 [...]
+1 1636352 rs141881351 G C 1618.40 VQSRTrancheSNP99.30to99.50 AC=2;AF=0.020;AN=98;BaseQRankSum=3.137;DB;DP=6223;Dels=0.00;FS=1.145;HaplotypeScore=1.6113;InbreedingCoeff=1.0000;MLEAC=2;MLEAF=0.020;MQ=44.84;MQ0=133;MQRankSum=2.388;QD=23.80;ReadPosRankSum=0.222;SNPEFF_AMINO_ACID_CHANGE=V449;SNPEFF_CODON_CHANGE=gtC/gtG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1636343_1636464;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LO [...]
+1 1636355 rs2377226 A G 987.40 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.020;AN=98;BaseQRankSum=5.437;DB;DP=6036;Dels=0.00;FS=127.218;HaplotypeScore=1.5540;InbreedingCoeff=1.0000;MLEAC=2;MLEAF=0.020;MQ=44.72;MQ0=139;MQRankSum=-12.525;QD=13.91;ReadPosRankSum=-1.082;SNPEFF_AMINO_ACID_CHANGE=I448;SNPEFF_CODON_CHANGE=atT/atC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1636343_1636464;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT= [...]
+1 1636400 rs144690660 G A 282.20 VQSRTrancheSNP99.50to99.90 AC=4;AF=0.041;AN=98;BaseQRankSum=-3.052;DB;DP=5444;Dels=0.00;FS=169.855;HaplotypeScore=0.4806;InbreedingCoeff=-0.0507;MLEAC=4;MLEAF=0.041;MQ=37.94;MQ0=162;MQRankSum=-13.143;QD=0.94;ReadPosRankSum=2.063;SNPEFF_AMINO_ACID_CHANGE=S433;SNPEFF_CODON_CHANGE=tcC/tcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1636343_1636464;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPAC [...]
+1 1638897 . A G 68.27 VQSRTrancheSNP99.30to99.50 AC=1;AF=0.010;AN=100;BaseQRankSum=2.422;DP=1826;Dels=0.00;FS=27.238;HaplotypeScore=0.6964;InbreedingCoeff=-0.0137;MLEAC=1;MLEAF=0.010;MQ=38.73;MQ0=13;MQRankSum=0.445;QD=1.95;ReadPosRankSum=-0.385;SNPEFF_AMINO_ACID_CHANGE=L365S;SNPEFF_CODON_CHANGE=tTg/tCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1638848_1639023;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODERATE [...]
+1 1638925 . C T 7081.97 VQSRTrancheSNP99.30to99.50 AC=17;AF=0.170;AN=100;BaseQRankSum=3.088;DP=1619;Dels=0.00;FS=0.609;HaplotypeScore=0.6107;InbreedingCoeff=0.0736;MLEAC=17;MLEAF=0.170;MQ=32.23;MQ0=230;MQRankSum=-1.352;QD=9.93;ReadPosRankSum=1.471;SNPEFF_AMINO_ACID_CHANGE=D356N;SNPEFF_CODON_CHANGE=Gac/Aac;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1638848_1639023;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODER [...]
+1 1638994 rs139262276 C T 3722.63 VQSRTrancheSNP99.50to99.90 AC=27;AF=0.276;AN=98;BaseQRankSum=4.165;DB;DP=1412;Dels=0.00;FS=43.176;HaplotypeScore=0.4009;InbreedingCoeff=0.4134;MLEAC=27;MLEAF=0.276;MQ=16.67;MQ0=641;MQRankSum=0.607;QD=4.58;ReadPosRankSum=-1.355;SNPEFF_AMINO_ACID_CHANGE=G333R;SNPEFF_CODON_CHANGE=Ggg/Agg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1638848_1639023;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF [...]
+1 1639046 rs138369165 C G 4405.12 VQSRTrancheSNP99.50to99.90 AC=47;AF=0.490;AN=96;BaseQRankSum=11.990;DB;DP=810;Dels=0.00;FS=21.488;HaplotypeScore=0.3049;InbreedingCoeff=0.4502;MLEAC=46;MLEAF=0.479;MQ=25.71;MQ0=218;MQRankSum=-3.993;QD=9.33;ReadPosRankSum=-4.570;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-3.258e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:24,0:24:69:0, [...]
+1 1639062 rs149613000 T C 747.63 VQSRTrancheSNP99.50to99.90 AC=21;AF=0.239;AN=88;BaseQRankSum=7.959;DB;DP=539;Dels=0.00;FS=14.404;HaplotypeScore=0.2679;InbreedingCoeff=0.5296;MLEAC=17;MLEAF=0.193;MQ=31.98;MQ0=38;MQRankSum=1.017;QD=6.80;ReadPosRankSum=-1.235;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-2.868e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:25,0:25:75:0,75,7 [...]
+1 1639073 . A T 175.81 VQSRTrancheSNP99.50to99.90 AC=9;AF=0.107;AN=84;BaseQRankSum=-2.705;DP=421;Dels=0.00;FS=0.000;HaplotypeScore=0.3008;InbreedingCoeff=0.4176;MLEAC=6;MLEAF=0.071;MQ=30.68;MQ0=36;MQRankSum=-0.024;QD=5.49;ReadPosRankSum=0.538;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-2.791e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,671 ./. 0/0:8,0: [...]
+1 1639570 rs141165289 C T 883.43 VQSRTrancheSNP99.50to99.90 AC=15;AF=0.250;AN=60;BaseQRankSum=-5.650;DB;DP=770;Dels=0.00;FS=0.678;HaplotypeScore=0.4057;InbreedingCoeff=-0.0481;MLEAC=15;MLEAF=0.250;MQ=14.16;MQ0=429;MQRankSum=-1.209;QD=2.39;ReadPosRankSum=-0.601;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-4.394e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:11,0:11:18:0,1 [...]
+1 1639608 . G A 58.98 VQSRTrancheSNP99.50to99.90 AC=2;AF=0.032;AN=62;BaseQRankSum=-2.551;DP=1403;Dels=0.00;FS=1.326;HaplotypeScore=0.4675;InbreedingCoeff=-0.0735;MLEAC=2;MLEAF=0.032;MQ=11.11;MQ0=927;MQRankSum=1.280;QD=0.54;ReadPosRankSum=0.534;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-5.890e+00;culprit=MQ GT:AD:DP:GQ:PL ./. 0/0:40,0:40:9:0,9,78 0/0:26,0:2 [...]
+1 1639687 . G A 473.42 VQSRTrancheSNP99.50to99.90 AC=11;AF=0.204;AN=54;BaseQRankSum=-11.169;DP=1398;Dels=0.00;FS=23.198;HaplotypeScore=0.2334;InbreedingCoeff=-0.2824;MLEAC=11;MLEAF=0.204;MQ=11.20;MQ0=898;MQRankSum=-1.547;QD=0.70;ReadPosRankSum=1.112;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-6.460e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:24,0:24:3:0,3,33 0/0:36,0 [...]
+1 1639702 . C T 110.94 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.060;AN=50;BaseQRankSum=-1.482;DP=1127;Dels=0.00;FS=3.889;HaplotypeScore=0.1458;InbreedingCoeff=-0.0818;MLEAC=3;MLEAF=0.060;MQ=10.55;MQ0=723;MQRankSum=1.431;QD=0.98;ReadPosRankSum=-0.782;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341028;VQSLOD=-5.670e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:19,0:19:3:0,3,33 0/0:24,0:24: [...]
+1 1647745 rs72634830 G A 17639.24 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=21.762;DB;DP=3417;Dels=0.00;FS=230.666;HaplotypeScore=1.6377;InbreedingCoeff=-0.9082;MLEAC=48;MLEAF=0.480;MQ=52.75;MQ0=0;MQRankSum=-34.123;QD=5.36;ReadPosRankSum=-8.152;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479362;VQSLOD=-2.883e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:50,25: [...]
+1 1647753 rs74045984 C T 19316.52 VQSRTrancheSNP99.50to99.90 AC=47;AF=0.470;AN=100;BaseQRankSum=-32.228;DB;DP=3494;Dels=0.00;FS=143.909;HaplotypeScore=1.4824;InbreedingCoeff=-0.8873;MLEAC=47;MLEAF=0.470;MQ=53.15;MQ0=0;MQRankSum=-32.262;QD=5.87;ReadPosRankSum=-7.739;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479362;VQSLOD=-1.945e+01;culprit=FS GT:AD:DP:GQ:PL 0/1:53,22 [...]
+1 1647778 rs72901773 C G 25507.74 VQSRTrancheSNP99.50to99.90 AC=49;AF=0.490;AN=100;BaseQRankSum=-30.365;DB;DP=3670;Dels=0.00;FS=13.015;HaplotypeScore=1.8006;InbreedingCoeff=-0.9605;MLEAC=49;MLEAF=0.490;MQ=53.28;MQ0=0;MQRankSum=-27.906;QD=7.07;ReadPosRankSum=-5.158;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000479362;VQSLOD=-1.367e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1 [...]
+1 1647814 rs72901775 T C 37323.72 VQSRTrancheSNP99.50to99.90 AC=49;AF=0.490;AN=100;BaseQRankSum=27.187;DB;DP=3738;Dels=0.00;FS=44.966;HaplotypeScore=1.1191;InbreedingCoeff=-0.9608;MLEAC=49;MLEAF=0.490;MQ=52.47;MQ0=0;MQRankSum=-26.757;QD=10.19;ReadPosRankSum=0.422;SNPEFF_AMINO_ACID_CHANGE=N9D;SNPEFF_CODON_CHANGE=Aat/Gat;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1647785_1647917;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEF [...]
+1 1647871 rs72909014 T C 24074.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=30.488;DB;DP=3314;Dels=0.00;FS=34.352;HaplotypeScore=2.3042;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=52.62;MQ0=0;MQRankSum=-28.834;QD=7.55;ReadPosRankSum=-1.891;SNPEFF_AMINO_ACID_CHANGE=R100;SNPEFF_CODON_CHANGE=cgA/cgG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1647785_1647917;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMP [...]
+1 1647873 . G T 326.30 VQSRTrancheSNP99.00to99.30 AC=4;AF=0.040;AN=100;BaseQRankSum=2.140;DP=3316;Dels=0.00;FS=0.546;HaplotypeScore=2.2918;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=52.23;MQ0=0;MQRankSum=-5.574;QD=1.17;ReadPosRankSum=-0.122;SNPEFF_AMINO_ACID_CHANGE=R100;SNPEFF_CODON_CHANGE=Cga/Aga;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1647785_1647917;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LOW;SNPEFF_TRAN [...]
+1 1647893 . C CTTTCTT 29503.61 Indel_InbreedingCoeff AC=50;AF=0.500;AN=100;BaseQRankSum=7.438;DP=2880;FS=123.827;HaplotypeScore=74.0717;InbreedingCoeff=-0.9998;MLEAC=50;MLEAF=0.500;MQ=52.58;MQ0=0;MQRankSum=-24.719;QD=10.24;RPA=1,2;RU=TTTCTT;ReadPosRankSum=-3.813;SNPEFF_AMINO_ACID_CHANGE=-117KK;SNPEFF_CODON_CHANGE=-/AAGAAA;SNPEFF_EFFECT=CODON_INSERTION;SNPEFF_EXON_ID=exon_1_1647785_1647917;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPAC [...]
+1 1647928 rs1883424 A G 16401.62 VQSRTrancheSNP99.00to99.30 AC=27;AF=0.270;AN=100;BaseQRankSum=23.253;DB;DP=2545;Dels=0.00;FS=8.254;HaplotypeScore=0.8474;InbreedingCoeff=-0.3699;MLEAC=27;MLEAF=0.270;MQ=52.19;MQ0=0;MQRankSum=13.729;QD=11.95;ReadPosRankSum=-1.511;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000496482;VQSLOD=-3.286e-01;culprit=MQ GT:AD:DP:GQ:PL 0/1:30,42:69: [...]
+1 1650787 rs1137003 T C 29321.65 VQSRTrancheSNP99.50to99.90 AC=50;AF=0.500;AN=100;BaseQRankSum=-19.649;DB;DP=3566;Dels=0.00;FS=51.506;HaplotypeScore=1.7889;InbreedingCoeff=-1.0000;MLEAC=50;MLEAF=0.500;MQ=54.54;MQ0=0;MQRankSum=-23.847;QD=8.22;ReadPosRankSum=-4.337;SNPEFF_AMINO_ACID_CHANGE=H112R;SNPEFF_CODON_CHANGE=cAt/cGt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650767_1650894;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNP [...]
+1 1650797 rs1059830 A G 39627.65 VQSRTrancheSNP99.50to99.90 AC=50;AF=0.500;AN=100;BaseQRankSum=-11.681;DB;DP=3738;Dels=0.00;FS=0.000;HaplotypeScore=8.3174;InbreedingCoeff=-1.0000;MLEAC=50;MLEAF=0.500;MQ=54.19;MQ0=0;MQRankSum=-22.448;QD=10.60;ReadPosRankSum=-7.769;SNPEFF_AMINO_ACID_CHANGE=W109R;SNPEFF_CODON_CHANGE=Tgg/Cgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650797_1650894;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNP [...]
+1 1650801 rs1137004 T C 43899.65 VQSRTrancheSNP99.50to99.90 AC=50;AF=0.500;AN=100;BaseQRankSum=15.445;DB;DP=3737;Dels=0.00;FS=2.311;HaplotypeScore=8.2322;InbreedingCoeff=-1.0000;MLEAC=50;MLEAF=0.500;MQ=54.20;MQ0=0;MQRankSum=-21.513;QD=11.75;ReadPosRankSum=-7.922;SNPEFF_AMINO_ACID_CHANGE=E107;SNPEFF_CODON_CHANGE=gaA/gaG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650797_1650894;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPA [...]
+1 1650807 rs1137005 T C 47319.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=28.791;DB;DP=3729;Dels=0.00;FS=4.101;HaplotypeScore=6.7523;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=54.53;MQ0=0;MQRankSum=22.620;QD=13.21;ReadPosRankSum=3.828;SNPEFF_AMINO_ACID_CHANGE=R105;SNPEFF_CODON_CHANGE=agA/agG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650797_1650894;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT [...]
+1 1650832 rs72909030 A G 45541.73 VQSRTrancheSNP99.50to99.90 AC=49;AF=0.490;AN=100;BaseQRankSum=23.916;DB;DP=3747;Dels=0.00;FS=18.898;HaplotypeScore=1.0621;InbreedingCoeff=-0.9608;MLEAC=49;MLEAF=0.490;MQ=54.25;MQ0=0;MQRankSum=-21.030;QD=12.40;ReadPosRankSum=-0.870;SNPEFF_AMINO_ACID_CHANGE=V63A;SNPEFF_CODON_CHANGE=gTt/gCt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650767_1650894;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNP [...]
+1 1650845 rs1059831 G A 43007.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=11.982;DB;DP=3824;Dels=0.00;FS=3.720;HaplotypeScore=0.8692;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=54.19;MQ0=0;MQRankSum=24.187;QD=11.95;ReadPosRankSum=0.117;SNPEFF_AMINO_ACID_CHANGE=R59W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1650767_1650894;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_ [...]
+1 1650917 rs148518955 T C 307.18 VQSRTrancheSNP98.60to98.80 AC=1;AF=0.010;AN=100;BaseQRankSum=-0.768;DB;DP=3870;Dels=0.00;FS=1.094;HaplotypeScore=1.3740;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=51.37;MQ0=0;MQRankSum=5.296;QD=4.15;ReadPosRankSum=1.379;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=0.572;culprit=QD GT:AD:DP:GQ:PL 0/0:75,0:75:99:0,220,25 [...]
+1 1650920 rs36191908 G A 18368.04 VQSRTrancheSNP99.50to99.90 AC=39;AF=0.390;AN=100;BaseQRankSum=-16.414;DB;DP=3830;Dels=0.00;FS=40.941;HaplotypeScore=1.4810;InbreedingCoeff=-0.6438;MLEAC=39;MLEAF=0.390;MQ=51.23;MQ0=0;MQRankSum=-25.997;QD=6.36;ReadPosRankSum=-1.670;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-1.026e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1 [...]
+1 1650939 . G A 22870.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=-18.935;DP=3421;Dels=0.02;FS=60.007;HaplotypeScore=6.7725;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=51.35;MQ0=0;MQRankSum=-45.584;QD=6.95;ReadPosRankSum=14.146;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-2.814e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1:45,28:70:99 [...]
+1 1650940 rs74345479 G A 22714.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=-30.655;DB;DP=3446;Dels=0.02;FS=52.004;HaplotypeScore=6.8009;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=51.41;MQ0=0;MQRankSum=-45.783;QD=6.86;ReadPosRankSum=15.177;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-2.857e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1 [...]
+1 1650942 rs75972011 A G 22621.97 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.480;AN=100;BaseQRankSum=35.443;DB;DP=3465;Dels=0.00;FS=68.250;HaplotypeScore=6.8826;InbreedingCoeff=-0.9231;MLEAC=48;MLEAF=0.480;MQ=51.49;MQ0=0;MQRankSum=-45.726;QD=6.79;ReadPosRankSum=17.400;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-2.959e+01;culprit=MQRankSum GT:AD:DP:GQ:PL 0/1: [...]
+1 1653004 rs36039898 T C 25911.51 VQSRTrancheSNP99.50to99.90 AC=82;AF=0.820;AN=100;BaseQRankSum=14.196;DB;DP=1348;Dels=0.00;FS=4.023;HaplotypeScore=0.8196;InbreedingCoeff=0.0507;MLEAC=82;MLEAF=0.820;MQ=39.48;MQ0=75;MQRankSum=-18.492;QD=20.81;ReadPosRankSum=3.813;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-4.216e+00;culprit=MQRankSum GT:AD:DP:GQ:PL 1/1:0 [...]
+1 1653026 rs184721773 T A 322.18 VQSRTrancheSNP98.90to99.00 AC=1;AF=0.010;AN=100;BaseQRankSum=4.677;DB;DP=2021;Dels=0.00;FS=0.000;HaplotypeScore=0.8118;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=42.11;MQ0=59;MQRankSum=-0.125;QD=7.86;ReadPosRankSum=-0.936;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=0.207;culprit=MQ GT:AD:DP:GQ:PL 0/0:44,0:44:99:0,132, [...]
+1 1653028 rs16825265 C T 49197.45 VQSRTrancheSNP99.50to99.90 AC=82;AF=0.820;AN=100;BaseQRankSum=0.506;DB;DP=2119;Dels=0.00;FS=2.019;HaplotypeScore=0.8833;InbreedingCoeff=0.0515;MLEAC=82;MLEAF=0.820;MQ=42.84;MQ0=54;MQRankSum=-13.690;QD=24.91;ReadPosRankSum=1.481;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-2.223e+00;culprit=MQRankSum GT:AD:DP:GQ:PL 1/1:0, [...]
+1 1654007 . A T 109 VQSRTrancheSNP99.00to99.30 AC=9;AF=0.096;AN=94;BaseQRankSum=-1.124;DP=1298;Dels=0.00;FS=10.111;HaplotypeScore=0.3449;InbreedingCoeff=-0.1697;MLEAC=10;MLEAF=0.106;MQ=45.56;MQ0=23;MQRankSum=-4.240;QD=3.89;ReadPosRankSum=-3.572;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-3.358e-01;culprit=QD GT:AD:DP:GQ:PL 0/1:4,1:5:18:18,0,106 0/0:2,0: [...]
+1 1654013 rs74045997 C G 4090.45 VQSRTrancheSNP99.50to99.90 AC=63;AF=0.656;AN=96;BaseQRankSum=-1.915;DB;DP=1293;Dels=0.00;FS=20.320;HaplotypeScore=0.3046;InbreedingCoeff=0.5967;MLEAC=49;MLEAF=0.510;MQ=45.71;MQ0=14;MQRankSum=-10.599;QD=20.05;ReadPosRankSum=-8.422;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-2.286e+00;culprit=ReadPosRankSum GT:AD:DP:GQ:PL [...]
+1 1654038 rs61777494 G A 3401.91 VQSRTrancheSNP99.50to99.90 AC=49;AF=0.510;AN=96;BaseQRankSum=-12.791;DB;DP=1512;Dels=0.00;FS=102.915;HaplotypeScore=0.2656;InbreedingCoeff=0.3615;MLEAC=45;MLEAF=0.469;MQ=33.56;MQ0=312;MQRankSum=-13.932;QD=10.06;ReadPosRankSum=5.224;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-7.709e+00;culprit=FS GT:AD:DP:GQ:PL 1/1:6,4:10 [...]
+1 1654058 rs61777495 C T 3639.35 VQSRTrancheSNP99.50to99.90 AC=46;AF=0.489;AN=94;BaseQRankSum=-11.748;DB;DP=1567;Dels=0.00;FS=144.517;HaplotypeScore=0.0869;InbreedingCoeff=0.3278;MLEAC=43;MLEAF=0.457;MQ=28.10;MQ0=483;MQRankSum=-12.183;QD=8.16;ReadPosRankSum=5.418;SNPEFF_EFFECT=START_GAINED;SNPEFF_EXON_ID=exon_1_1654027_1654270;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000356200;VQSLOD=-1.138e+01;cu [...]
+1 1654064 . A T 3160.59 VQSRTrancheSNP99.50to99.90 AC=48;AF=0.500;AN=96;BaseQRankSum=-8.714;DP=1549;Dels=0.00;FS=99.554;HaplotypeScore=0.1477;InbreedingCoeff=0.2331;MLEAC=44;MLEAF=0.458;MQ=27.68;MQ0=509;MQRankSum=-5.629;QD=6.48;ReadPosRankSum=1.100;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096;VQSLOD=-6.566e+00;culprit=FS GT:AD:DP:GQ:PL 1/1:15,6:20:15:167,15,0 0/ [...]
+1 1654065 rs35174499 AGCG A 7398.04 PASS AC=59;AF=0.590;AN=100;BaseQRankSum=16.032;DB;DP=1573;FS=16.220;HaplotypeScore=26.4475;InbreedingCoeff=0.0438;MLEAC=56;MLEAF=0.560;MQ=27.55;MQ0=0;MQRankSum=-4.436;QD=8.15;ReadPosRankSum=-0.436;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CDK11A;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000401096 GT:AD:DP:GQ:PL 1/1:0,6:6:18:334,18,0 0/1:2,7:9:99:417,0,104 0/1:2,2:4:99:119,0,119 0/1 [...]
+1 1663851 rs2294486 G C 3567.82 PASS AC=24;AF=0.240;AN=100;BaseQRankSum=-3.299;DB;DP=436;Dels=0.00;FS=12.316;HaplotypeScore=0.1548;InbreedingCoeff=-0.1289;MLEAC=24;MLEAF=0.240;MQ=58.21;MQ0=0;MQRankSum=1.638;QD=18.30;ReadPosRankSum=1.629;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000355439;VQSLOD=3.08;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:5,2:7:58:58,0,164 0/0:10,0:10: [...]
+1 1663861 rs2294487 G A 4215.91 PASS AC=24;AF=0.240;AN=100;BaseQRankSum=11.359;DB;DP=518;Dels=0.00;FS=0.699;HaplotypeScore=0.3234;InbreedingCoeff=-0.1262;MLEAC=24;MLEAF=0.240;MQ=58.69;MQ0=0;MQRankSum=-0.064;QD=17.28;ReadPosRankSum=1.907;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000355439;VQSLOD=4.83;culprit=MQ GT:AD:DP:GQ:PL 0/1:6,2:8:56:56,0,138 0/0:10,0:10:30:0,30,325 0 [...]
+1 1666167 rs146479779 C T 57.62 VQSRTrancheSNP99.50to99.90 AC=1;AF=0.011;AN=92;BaseQRankSum=-2.845;DB;DP=2313;Dels=0.00;FS=2.222;HaplotypeScore=0.7519;InbreedingCoeff=-0.0153;MLEAC=1;MLEAF=0.011;MQ=14.66;MQ0=1154;MQRankSum=-0.403;QD=1.60;ReadPosRankSum=1.318;SNPEFF_AMINO_ACID_CHANGE=V232I;SNPEFF_CODON_CHANGE=Gta/Ata;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1666129_1666274;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_ [...]
+1 1666175 rs61777509 C T 995.42 VQSRTrancheSNP99.50to99.90 AC=25;AF=0.266;AN=94;BaseQRankSum=-9.577;DB;DP=2376;Dels=0.00;FS=80.566;HaplotypeScore=0.7276;InbreedingCoeff=-0.3795;MLEAC=25;MLEAF=0.266;MQ=15.15;MQ0=1134;MQRankSum=-7.539;QD=0.76;ReadPosRankSum=-0.718;SNPEFF_AMINO_ACID_CHANGE=R229H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1666129_1666274;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNP [...]
+1 1666251 rs77655487 G A 2010.72 VQSRTrancheSNP99.90to100.00 AC=22;AF=0.220;AN=100;BaseQRankSum=-4.281;DB;DP=3474;Dels=0.00;FS=617.622;HaplotypeScore=0.9335;InbreedingCoeff=-0.2819;MLEAC=22;MLEAF=0.220;MQ=27.54;MQ0=493;MQRankSum=3.013;QD=1.59;ReadPosRankSum=-2.129;SNPEFF_AMINO_ACID_CHANGE=R204W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1666129_1666274;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;S [...]
+1 1666303 rs114928632 T C 847.30 VQSRTrancheSNP99.50to99.90 AC=4;AF=0.040;AN=100;BaseQRankSum=-14.446;DB;DP=2563;Dels=0.00;FS=4.535;HaplotypeScore=0.5398;InbreedingCoeff=-0.0422;MLEAC=4;MLEAF=0.040;MQ=32.46;MQ0=470;MQRankSum=-16.357;QD=4.24;ReadPosRankSum=-9.345;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000246421;VQSLOD=-4.776e+00;culprit=ReadPosRankSum GT:AD:DP:GQ:PL 0/0 [...]
+1 1669726 rs144330443 C T 193.36 VQSRTrancheSNP99.00to99.30 AC=1;AF=0.010;AN=100;BaseQRankSum=-3.217;DB;DP=719;Dels=0.00;FS=1.857;HaplotypeScore=0.4298;InbreedingCoeff=-0.0161;MLEAC=1;MLEAF=0.010;MQ=35.45;MQ0=69;MQRankSum=-0.078;QD=8.79;ReadPosRankSum=-0.758;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000246421;VQSLOD=-3.425e-01;culprit=MQ GT:AD:DP:GQ:PL 0/0:15,0:15:36:0,36 [...]
+1 1669734 rs80140081 G T 13632.61 VQSRTrancheSNP99.00to99.30 AC=46;AF=0.460;AN=100;BaseQRankSum=-17.392;DB;DP=929;Dels=0.00;FS=0.000;HaplotypeScore=0.5257;InbreedingCoeff=0.0367;MLEAC=46;MLEAF=0.460;MQ=36.58;MQ0=45;MQRankSum=1.231;QD=20.20;ReadPosRankSum=3.362;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000246421;VQSLOD=-6.116e-01;culprit=MQ GT:AD:DP:GQ:PL 0/1:6,11:17:99:34 [...]
+1 1669748 rs115554296 A G 4726.11 VQSRTrancheSNP99.00to99.30 AC=25;AF=0.250;AN=100;BaseQRankSum=-8.276;DB;DP=1168;Dels=0.00;FS=6.425;HaplotypeScore=0.8387;InbreedingCoeff=-0.0192;MLEAC=25;MLEAF=0.250;MQ=36.75;MQ0=22;MQRankSum=-2.273;QD=9.95;ReadPosRankSum=-1.059;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000246421;VQSLOD=-4.300e-01;culprit=MQ GT:AD:DP:GQ:PL 0/1:19,6:24:57: [...]
+1 1670537 . C T 122.25 VQSRTrancheSNP99.30to99.50 AC=2;AF=0.020;AN=100;BaseQRankSum=-3.237;DP=1649;Dels=0.00;FS=1.098;HaplotypeScore=1.8725;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=29.35;MQ0=158;MQRankSum=0.505;QD=0.95;ReadPosRankSum=-1.385;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000246421;VQSLOD=-1.668e+00;culprit=QD GT:AD:DP:GQ:PL 0/0:30,0:30:90:0,90,770 0/0:47, [...]
+1 1670546 . G A 704.25 VQSRTrancheSNP99.30to99.50 AC=2;AF=0.020;AN=100;BaseQRankSum=-7.620;DP=1595;Dels=0.00;FS=0.937;HaplotypeScore=1.6971;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=29.89;MQ0=162;MQRankSum=3.539;QD=9.03;ReadPosRankSum=1.057;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000246421;VQSLOD=-1.636e+00;culprit=MQ GT:AD:DP:GQ:PL 0/0:26,0:26:78:0,78,668 0/0:43,0 [...]
+1 1670958 rs146637450 C G 74.91 VQSRTrancheSNP99.50to99.90 AC=3;AF=0.750;AN=4;BaseQRankSum=-2.637;DB;DP=864;Dels=0.00;FS=0.000;HaplotypeScore=0.3325;MLEAC=3;MLEAF=0.750;MQ=5.32;MQ0=107;MQRankSum=0.000;QD=0.76;ReadPosRankSum=-0.929;SNPEFF_AMINO_ACID_CHANGE=L13;SNPEFF_CODON_CHANGE=ctG/ctC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1670675_1671143;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SLC35E2;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1684311 rs148074846 C T 212.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.642;DB;DP=1378;Dels=0.00;FS=0.000;HaplotypeScore=0.5565;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.02;MQ0=0;MQRankSum=0.146;QD=15.16;ReadPosRankSum=-1.046;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000400922;VQSLOD=6.62;culprit=FS GT:AD:DP:GQ:PL 0/0:35,0:34:99:0,102,1131 0/0:27,0:27:81:0,81,8 [...]
+1 1684322 rs141226719 G C 509.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.312;DB;DP=1214;Dels=0.00;FS=1.081;HaplotypeScore=0.6775;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=58.81;MQ0=0;MQRankSum=1.444;QD=14.98;ReadPosRankSum=-2.788;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000400922;VQSLOD=5.46;culprit=MQ GT:AD:DP:GQ:PL 0/0:34,0:33:99:0,99,1179 0/0:22,0:22:57:0,57,7 [...]
+1 1684347 rs112506726 CCCT C,CCCTCCT 3443.37 PASS AC=10,32;AF=0.100,0.320;AN=100;BaseQRankSum=-0.332;DB;DP=811;FS=67.848;HaplotypeScore=6.4272;InbreedingCoeff=0.1268;MLEAC=9,29;MLEAF=0.090,0.290;MQ=58.99;MQ0=0;MQRankSum=2.827;QD=6.14;RPA=9,8,10;RU=CCT;ReadPosRankSum=-2.297;SNPEFF_AMINO_ACID_CHANGE=EG413G;SNPEFF_CODON_CHANGE=gagggc/ggc;SNPEFF_EFFECT=CODON_CHANGE_PLUS_CODON_DELETION;SNPEFF_EXON_ID=exon_1_1683910_1684499;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF [...]
+1 1684472 rs7407 C T 6064.99 PASS AC=28;AF=0.280;AN=100;BaseQRankSum=-4.551;DB;DP=975;Dels=0.00;FS=3.454;HaplotypeScore=0.5177;InbreedingCoeff=-0.1940;MLEAC=28;MLEAF=0.280;MQ=58.44;MQ0=0;MQRankSum=0.933;QD=12.64;ReadPosRankSum=0.125;SNPEFF_AMINO_ACID_CHANGE=P372;SNPEFF_CODON_CHANGE=ccG/ccA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1683910_1684499;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1685959 rs116741728 C T 1979.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.129;DB;DP=2130;Dels=0.00;FS=1.994;HaplotypeScore=1.1019;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=54.24;MQ0=0;MQRankSum=5.347;QD=15.11;ReadPosRankSum=0.624;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000400922;VQSLOD=1.90;culprit=MQ GT:AD:DP:GQ:PL 0/0:35,0:35:99:0,105,1232 0/0:45,0:45:99:0,132 [...]
+1 1686040 rs4751 G T 50317.91 PASS AC=42;AF=0.420;AN=100;BaseQRankSum=27.740;DB;DP=3685;Dels=0.00;FS=0.600;HaplotypeScore=3.4769;InbreedingCoeff=0.0148;MLEAC=42;MLEAF=0.420;MQ=58.61;MQ0=0;MQRankSum=3.368;QD=22.01;ReadPosRankSum=1.862;SNPEFF_AMINO_ACID_CHANGE=N230K;SNPEFF_CODON_CHANGE=aaC/aaA;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1685983_1686137;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1686081 rs75816936 G A 4607.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=5.562;DB;DP=4880;Dels=0.00;FS=0.299;HaplotypeScore=1.2781;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=58.94;MQ0=0;MQRankSum=2.082;QD=13.09;ReadPosRankSum=-3.051;SNPEFF_AMINO_ACID_CHANGE=R217W;SNPEFF_CODON_CHANGE=Cgg/Tgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1685983_1686137;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1686769 rs76477378 G A 3034.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=4.707;DB;DP=6941;Dels=0.00;FS=20.156;HaplotypeScore=0.1307;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.81;MQ0=0;MQRankSum=-1.387;QD=13.55;ReadPosRankSum=-2.394;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460602;VQSLOD=6.51;culprit=FS GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4127 0/0:125,0:125:99: [...]
+1 1686943 rs2072929 T C 56242.19 PASS AC=53;AF=0.530;AN=100;BaseQRankSum=-21.513;DB;DP=3641;Dels=0.00;FS=6.442;HaplotypeScore=1.3969;InbreedingCoeff=-0.0839;MLEAC=53;MLEAF=0.530;MQ=59.40;MQ0=0;MQRankSum=1.324;QD=20.05;ReadPosRankSum=0.492;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460602;VQSLOD=4.34;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:39,33:70:99:827,0,1058 0/1:3 [...]
+1 1686958 rs74046213 C T 1340.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-7.488;DB;DP=2846;Dels=0.00;FS=0.000;HaplotypeScore=2.5767;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.33;MQ0=0;MQRankSum=-0.585;QD=12.89;ReadPosRankSum=-2.553;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460602;VQSLOD=3.42;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:64,0:64:99:0,193,2305 0/0:58, [...]
+1 1686962 rs2076327 C T 44196.50 PASS AC=51;AF=0.510;AN=100;BaseQRankSum=19.679;DB;DP=2859;Dels=0.00;FS=0.000;HaplotypeScore=2.3341;InbreedingCoeff=-0.0804;MLEAC=51;MLEAF=0.510;MQ=59.38;MQ0=0;MQRankSum=-0.661;QD=20.30;ReadPosRankSum=2.455;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460602;VQSLOD=3.45;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:39,30:66:99:857,0,945 0/1:31 [...]
+1 1687791 rs72634840 C T 1423.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-10.927;DB;DP=3181;Dels=0.00;FS=1.045;HaplotypeScore=0.1503;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.61;MQ0=0;MQRankSum=1.998;QD=11.29;ReadPosRankSum=-2.415;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460602;VQSLOD=7.58;culprit=FS GT:AD:DP:GQ:PL 0/0:69,0:69:99:0,208,2662 0/0:66,0:66:99:0,19 [...]
+1 1687828 rs34258219 C T 3408.45 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=-7.857;DB;DP=1835;Dels=0.00;FS=2.386;HaplotypeScore=0.2249;InbreedingCoeff=0.2907;MLEAC=6;MLEAF=0.060;MQ=59.46;MQ0=0;MQRankSum=1.913;QD=14.82;ReadPosRankSum=-1.271;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000460602;VQSLOD=6.37;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:40,0:40:99:0,120,1479 0/0:37,0:37:99 [...]
+1 1688096 rs72634841 C T 144.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.350;DB;DP=1262;Dels=0.00;FS=0.000;HaplotypeScore=0.3415;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.61;MQ0=0;MQRankSum=2.373;QD=11.09;ReadPosRankSum=-1.161;SNPEFF_AMINO_ACID_CHANGE=P260;SNPEFF_CODON_CHANGE=ccG/ccA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1687942_1688096;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1688579 rs116006782 C A 39.89 PASS AC=3;AF=0.039;AN=76;BaseQRankSum=-1.494;DB;DP=135;Dels=0.00;FS=0.000;HaplotypeScore=0.1657;InbreedingCoeff=0.0594;MLEAC=2;MLEAF=0.026;MQ=58.14;MQ0=0;MQRankSum=-0.940;QD=7.98;ReadPosRankSum=0.530;SNPEFF_AMINO_ACID_CHANGE=G249V;SNPEFF_CODON_CHANGE=gGa/gTa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1688546_1688749;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCR [...]
+1 1689762 rs2235537 T C 30571.82 PASS AC=54;AF=0.540;AN=100;BaseQRankSum=19.205;DB;DP=1843;Dels=0.00;FS=12.970;HaplotypeScore=1.1693;InbreedingCoeff=-0.2077;MLEAC=54;MLEAF=0.540;MQ=59.25;MQ0=0;MQRankSum=-0.480;QD=20.41;ReadPosRankSum=-2.437;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464373;VQSLOD=3.83;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:20,17:36:99:495,0,549 0/1 [...]
+1 1690544 rs116344604 T C 266.01 PASS AC=4;AF=0.045;AN=88;BaseQRankSum=1.059;DB;DP=162;Dels=0.00;FS=0.000;HaplotypeScore=0.0406;InbreedingCoeff=0.1353;MLEAC=4;MLEAF=0.045;MQ=59.76;MQ0=0;MQRankSum=0.115;QD=22.17;ReadPosRankSum=-2.108;SNPEFF_AMINO_ACID_CHANGE=T191A;SNPEFF_CODON_CHANGE=Act/Gct;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1690540_1690682;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 1690661 . C T 76.67 PASS AC=1;AF=0.010;AN=96;BaseQRankSum=-1.686;DP=390;Dels=0.00;FS=0.000;HaplotypeScore=0.1080;InbreedingCoeff=-0.0251;MLEAC=1;MLEAF=0.010;MQ=59.49;MQ0=0;MQRankSum=1.283;QD=9.58;ReadPosRankSum=1.329;SNPEFF_AMINO_ACID_CHANGE=A152T;SNPEFF_CODON_CHANGE=Gcg/Acg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1690540_1690682;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 1691139 . C A 40.40 PASS AC=3;AF=0.033;AN=90;BaseQRankSum=-1.920;DP=157;Dels=0.00;FS=0.000;HaplotypeScore=0.0663;InbreedingCoeff=0.0889;MLEAC=2;MLEAF=0.022;MQ=59.22;MQ0=0;MQRankSum=-0.755;QD=8.08;ReadPosRankSum=1.232;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464373;VQSLOD=3.19;culprit=FS GT:AD:DP:GQ:PL 0/0:3,0:3:9:0,9,116 0/0:5,0:5:15:0,15,180 0/0:6,0:5:15:0,15,188 [...]
+1 1691176 rs143521678 T G 48.61 PASS AC=2;AF=0.023;AN=86;BaseQRankSum=-1.192;DB;DP=188;Dels=0.00;FS=0.000;HaplotypeScore=0.1684;InbreedingCoeff=-0.0762;MLEAC=2;MLEAF=0.023;MQ=59.13;MQ0=0;MQRankSum=0.144;QD=6.94;ReadPosRankSum=-0.076;SNPEFF_AMINO_ACID_CHANGE=E143D;SNPEFF_CODON_CHANGE=gaA/gaC;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1691173_1691341;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSC [...]
+1 1696620 rs188820597 T C 1102.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.984;DB;DP=3527;Dels=0.00;FS=0.000;HaplotypeScore=0.2788;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.45;MQ0=0;MQRankSum=0.198;QD=14.70;ReadPosRankSum=-2.285;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341426;VQSLOD=8.31;culprit=FS GT:AD:DP:GQ:PL 0/0:67,0:67:99:0,202,2362 0/0:53,0:53:99:0,159,191 [...]
+1 1696659 rs75906779 A G 129350.75 PASS AC=87;AF=0.870;AN=100;BaseQRankSum=-9.340;DB;DP=4343;Dels=0.00;FS=0.276;HaplotypeScore=0.3141;InbreedingCoeff=0.2042;MLEAC=87;MLEAF=0.870;MQ=59.49;MQ0=0;MQRankSum=-0.237;QD=31.37;ReadPosRankSum=0.070;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=NADK;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000341426;VQSLOD=6.79;culprit=FS GT:AD:DP:GQ:PL 1/1:0,89:89:99:3057,268,0 1/1:0,75:75:99:2576,2 [...]
+1 1720547 rs151315046 A G 830.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.997;DB;DP=3798;Dels=0.00;FS=1.672;HaplotypeScore=0.0686;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.83;MQ0=0;MQRankSum=1.013;QD=11.37;ReadPosRankSum=-4.690;SNPEFF_AMINO_ACID_CHANGE=A187;SNPEFF_CODON_CHANGE=gcT/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1720492_1720708;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GNB1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 1722048 rs76013166 C T 949.28 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=3.867;DB;DP=1249;Dels=0.00;FS=5.308;HaplotypeScore=0.2243;InbreedingCoeff=-0.0217;MLEAC=2;MLEAF=0.020;MQ=58.79;MQ0=0;MQRankSum=1.270;QD=11.87;ReadPosRankSum=-2.964;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GNB1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378606;VQSLOD=7.44;culprit=MQ GT:AD:DP:GQ:PL 0/0:34,0:34:99:0,99,1075 0/0:32,0:32:96:0,96,1040 0/ [...]
+1 1724719 rs77027087 G A 467.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-5.620;DB;DP=1624;Dels=0.00;FS=1.764;HaplotypeScore=0.3679;InbreedingCoeff=-0.0205;MLEAC=2;MLEAF=0.020;MQ=59.38;MQ0=0;MQRankSum=0.664;QD=6.77;ReadPosRankSum=-1.311;SNPEFF_AMINO_ACID_CHANGE=D154;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1724684_1724750;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GNB1;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 1737895 rs77354509 G A 1633.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-5.937;DB;DP=1805;Dels=0.00;FS=5.868;HaplotypeScore=0.1227;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.39;MQ0=0;MQRankSum=0.732;QD=13.73;ReadPosRankSum=-2.274;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GNB1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378606;VQSLOD=7.65;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,135,1701 0/0:39,0:39 [...]
+1 1737900 rs17363334 C T 1671.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-7.672;DB;DP=1905;Dels=0.00;FS=5.296;HaplotypeScore=0.1387;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.28;MQ0=0;MQRankSum=-0.330;QD=13.06;ReadPosRankSum=-1.960;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GNB1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378606;VQSLOD=7.47;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:47,0:47:99:0,141,1776 0/0:43,0:4 [...]
+1 1749224 rs143149194 G A 125.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.000;DB;DP=1280;Dels=0.00;FS=2.902;HaplotypeScore=0.1914;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.75;MQ0=0;MQRankSum=0.872;QD=7.82;ReadPosRankSum=-0.998;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GNB1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378606;VQSLOD=8.66;culprit=QD GT:AD:DP:GQ:PL 0/0:33,0:33:99:0,99,1041 0/0:26,0:26:78:0,78,820 0/0 [...]
+1 1756864 rs76273614 T C 16811.40 VQSRTrancheSNP99.90to100.00 AC=49;AF=0.490;AN=100;BaseQRankSum=-43.471;DB;DP=3747;Dels=0.00;FS=3200.000;HaplotypeScore=2.4214;InbreedingCoeff=-0.9516;MLEAC=49;MLEAF=0.490;MQ=58.81;MQ0=0;MQRankSum=4.692;QD=4.58;ReadPosRankSum=-40.435;SNPEFF_AMINO_ACID_CHANGE=E10G;SNPEFF_CODON_CHANGE=gAg/gGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1756836_1756938;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GNB1;SNP [...]
+1 1846710 rs140034981 G C 147.28 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=1.139;DB;DP=305;Dels=0.00;FS=0.000;HaplotypeScore=0.1919;InbreedingCoeff=-0.0519;MLEAC=2;MLEAF=0.020;MQ=59.06;MQ0=0;MQRankSum=-1.210;QD=7.01;ReadPosRankSum=0.352;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000310991;VQSLOD=4.90;culprit=QD GT:AD:DP:GQ:PL 0/0:3,0:3:6:0,6,79 0/0:10,0:10:24:0,24,322 0/0: [...]
+1 1846765 rs2247560 G A 2024.64 PASS AC=31;AF=0.310;AN=100;BaseQRankSum=-0.214;DB;DP=256;Dels=0.00;FS=0.000;HaplotypeScore=0.1116;InbreedingCoeff=0.0048;MLEAC=30;MLEAF=0.300;MQ=58.30;MQ0=0;MQRankSum=1.514;QD=17.16;ReadPosRankSum=0.331;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000310991;VQSLOD=5.53;culprit=FS GT:AD:DP:GQ:PL 0/1:1,2:3:30:70,0,30 0/1:4,6:10:99:176,0,101 0 [...]
+1 1847181 rs112170912 C T 712.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.558;DB;DP=1720;Dels=0.00;FS=13.291;HaplotypeScore=0.3365;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.96;MQ0=0;MQRankSum=1.414;QD=11.30;ReadPosRankSum=-3.188;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000310991;VQSLOD=5.80;culprit=FS GT:AD:DP:GQ:PL 0/0:30,0:30:90:0,90,1152 0/0:29,0:29:87:0,8 [...]
+1 1847856 rs2748986 G T 3725.01 PASS AC=49;AF=0.500;AN=98;BaseQRankSum=-7.579;DB;DP=245;Dels=0.00;FS=3.632;HaplotypeScore=0.2157;InbreedingCoeff=-0.1298;MLEAC=50;MLEAF=0.510;MQ=58.94;MQ0=0;MQRankSum=0.710;QD=18.17;ReadPosRankSum=0.760;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000310991;VQSLOD=5.79;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:4,1:5:22:22,0,140 0/1:8,4:12: [...]
+1 1847886 rs75687095 C T 99.12 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-0.608;DB;DP=303;Dels=0.00;FS=7.850;HaplotypeScore=0.1561;InbreedingCoeff=-0.0477;MLEAC=1;MLEAF=0.010;MQ=58.82;MQ0=0;MQRankSum=-0.298;QD=12.39;ReadPosRankSum=-0.481;SNPEFF_AMINO_ACID_CHANGE=R12C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1847880_1848054;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CALML6;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 1847979 rs28581776 T C 8266.07 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=9.385;DB;DP=1324;Dels=0.00;FS=1.561;HaplotypeScore=0.4855;InbreedingCoeff=0.2202;MLEAC=17;MLEAF=0.170;MQ=59.08;MQ0=0;MQRankSum=0.595;QD=17.51;ReadPosRankSum=-1.205;SNPEFF_AMINO_ACID_CHANGE=W43R;SNPEFF_CODON_CHANGE=Tgg/Cgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1847880_1848054;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CALML6;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1848071 . A G 1458.59 VQSRTrancheSNP99.50to99.90 AC=20;AF=0.200;AN=100;BaseQRankSum=-16.189;DP=2005;Dels=0.00;FS=198.357;HaplotypeScore=3.9687;InbreedingCoeff=-0.2771;MLEAC=20;MLEAF=0.200;MQ=57.13;MQ0=0;MQRankSum=1.237;QD=1.93;ReadPosRankSum=-12.529;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000310991;VQSLOD=-1.345e+01;culprit=FS GT:AD:DP:GQ:PL 0/0:46,12:56:28:0,28,10 [...]
+1 1848160 rs28634421 A G 27719.06 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=-6.974;DB;DP=6442;Dels=0.00;FS=17.393;HaplotypeScore=1.2565;InbreedingCoeff=0.2204;MLEAC=17;MLEAF=0.170;MQ=59.47;MQ0=0;MQRankSum=-0.725;QD=20.87;ReadPosRankSum=-3.501;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000310991;VQSLOD=3.95;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:145,0:145:99:0,430,5162 [...]
+1 1848197 rs74773083 G C 935.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-6.513;DB;DP=6650;Dels=0.00;FS=0.623;HaplotypeScore=0.3801;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.24;MQ0=0;MQRankSum=0.412;QD=12.47;ReadPosRankSum=-0.170;SNPEFF_AMINO_ACID_CHANGE=G70A;SNPEFF_CODON_CHANGE=gGg/gCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1848191_1848335;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CALML6;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 1848225 rs35971167 A G 2788.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.074;DB;DP=6357;Dels=0.00;FS=6.317;HaplotypeScore=0.7386;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.37;MQ0=0;MQRankSum=1.470;QD=12.39;ReadPosRankSum=0.276;SNPEFF_AMINO_ACID_CHANGE=A79;SNPEFF_CODON_CHANGE=gcA/gcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1848191_1848335;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CALML6;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1848231 . G A 820.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.441;DP=6275;Dels=0.00;FS=5.955;HaplotypeScore=0.9101;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.39;MQ0=0;MQRankSum=-0.088;QD=10.94;ReadPosRankSum=0.730;SNPEFF_AMINO_ACID_CHANGE=M81I;SNPEFF_CODON_CHANGE=atG/atA;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1848191_1848335;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CALML6;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID= [...]
+1 1848243 rs75157634 T C 835.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.151;DB;DP=6196;Dels=0.00;FS=0.687;HaplotypeScore=0.2217;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.55;MQ0=0;MQRankSum=0.853;QD=11.14;ReadPosRankSum=-2.385;SNPEFF_AMINO_ACID_CHANGE=H102;SNPEFF_CODON_CHANGE=caT/caC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1848191_1848335;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CALML6;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1848398 . C T 262.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.301;DP=2231;Dels=0.00;FS=3.127;HaplotypeScore=0.0779;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.73;MQ0=0;MQRankSum=0.716;QD=10.08;ReadPosRankSum=-1.576;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000464311;VQSLOD=7.94;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:50,0:50:99:0,150,1578 0/0:46,0:46:99:0, [...]
+1 1848601 rs111582404 T C 290.33 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.613;DB;DP=531;Dels=0.00;FS=2.834;HaplotypeScore=0.1893;InbreedingCoeff=-0.0178;MLEAC=1;MLEAF=0.010;MQ=58.79;MQ0=0;MQRankSum=-0.310;QD=13.20;ReadPosRankSum=0.058;SNPEFF_AMINO_ACID_CHANGE=M155T;SNPEFF_CODON_CHANGE=aTg/aCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1848586_1848733;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=CALML6;SNPEFF_IMPACT=MODERATE;SNPEFF_T [...]
+1 1849529 rs28640257 A G 30026.74 VQSRTrancheSNP98.90to99.00 AC=30;AF=0.300;AN=100;BaseQRankSum=17.195;DB;DP=3580;Dels=0.00;FS=6.847;HaplotypeScore=8.4133;InbreedingCoeff=-0.1429;MLEAC=30;MLEAF=0.300;MQ=59.52;MQ0=0;MQRankSum=1.694;QD=17.07;ReadPosRankSum=0.946;SNPEFF_AMINO_ACID_CHANGE=M126T;SNPEFF_CODON_CHANGE=aTg/aCg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1849029_1849601;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF [...]
+1 1849530 rs4459050 T C 19900.06 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=-17.682;DB;DP=3577;Dels=0.00;FS=3.515;HaplotypeScore=8.4831;InbreedingCoeff=0.2204;MLEAC=17;MLEAF=0.170;MQ=59.53;MQ0=0;MQRankSum=-1.114;QD=19.06;ReadPosRankSum=-0.110;SNPEFF_AMINO_ACID_CHANGE=M126V;SNPEFF_CODON_CHANGE=Atg/Gtg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1849029_1849601;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1849744 rs1884455 G A 14423.06 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=2.735;DB;DP=2283;Dels=0.00;FS=2.098;HaplotypeScore=1.3198;InbreedingCoeff=0.2204;MLEAC=17;MLEAF=0.170;MQ=59.00;MQ0=0;MQRankSum=0.027;QD=18.68;ReadPosRankSum=-1.454;SNPEFF_AMINO_ACID_CHANGE=D84;SNPEFF_CODON_CHANGE=gaC/gaT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1849692_1850236;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1850597 . G A 52.03 PASS AC=1;AF=0.013;AN=80;BaseQRankSum=-0.129;DP=149;Dels=0.00;FS=2.707;HaplotypeScore=0.1246;InbreedingCoeff=-0.0916;MLEAC=1;MLEAF=0.013;MQ=57.04;MQ0=0;MQRankSum=0.472;QD=8.67;ReadPosRankSum=-2.501;SNPEFF_AMINO_ACID_CHANGE=S34L;SNPEFF_CODON_CHANGE=tCg/tTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1850484_1850697;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST [...]
+1 1850654 . G C 40.22 PASS AC=4;AF=0.080;AN=50;BaseQRankSum=0.167;DP=37;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=-0.0817;MLEAC=4;MLEAF=0.080;MQ=56.34;MQ0=0;MQRankSum=0.501;QD=5.75;ReadPosRankSum=-0.969;SNPEFF_AMINO_ACID_CHANGE=S15C;SNPEFF_CODON_CHANGE=tCc/tGc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1850484_1850697;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=TMEM52;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=ENST00 [...]
+1 1853863 rs28680721 T C 14790.08 PASS AC=19;AF=0.190;AN=100;BaseQRankSum=14.525;DB;DP=1741;Dels=0.00;FS=0.000;HaplotypeScore=0.7362;InbreedingCoeff=0.2851;MLEAC=19;MLEAF=0.190;MQ=58.07;MQ0=0;MQRankSum=1.097;QD=21.40;ReadPosRankSum=-3.808;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=4.14;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:39,0:39:99:0,117,1409 0/0:3 [...]
+1 1854109 rs2803348 A G 51305.44 PASS AC=50;AF=0.500;AN=100;BaseQRankSum=24.670;DB;DP=2880;Dels=0.00;FS=2.519;HaplotypeScore=1.1021;InbreedingCoeff=-0.2000;MLEAC=50;MLEAF=0.500;MQ=59.24;MQ0=0;MQRankSum=-0.088;QD=22.51;ReadPosRankSum=-0.904;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=5.12;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:24,34:55:99:1012,0,649 0/ [...]
+1 1854546 rs28633659 C T 12300.07 PASS AC=19;AF=0.190;AN=100;BaseQRankSum=-8.444;DB;DP=1617;Dels=0.00;FS=0.000;HaplotypeScore=0.5320;InbreedingCoeff=0.2852;MLEAC=19;MLEAF=0.190;MQ=59.21;MQ0=0;MQRankSum=2.435;QD=18.25;ReadPosRankSum=-2.346;SNPEFF_AMINO_ACID_CHANGE=E794K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1854424_1854554;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1854572 . G T 174.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.538;DP=1268;Dels=0.00;FS=0.000;HaplotypeScore=0.9881;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=58.77;MQ0=0;MQRankSum=1.477;QD=12.44;ReadPosRankSum=0.396;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=5.07;culprit=MQ GT:AD:DP:GQ:PL 0/0:19,0:19:48:0,48,607 0/0:24,0:24:72:0,72,905 0/0:18,0:18 [...]
+1 1854579 rs115047896 A G 222.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=0.037;DB;DP=1131;Dels=0.00;FS=0.000;HaplotypeScore=0.8070;InbreedingCoeff=-0.0207;MLEAC=2;MLEAF=0.020;MQ=58.75;MQ0=0;MQRankSum=-0.189;QD=10.10;ReadPosRankSum=0.028;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=6.42;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:48:0,48,612 0/0:26,0:26:78:0,78,96 [...]
+1 1854765 rs188186459 G A 187.21 PASS AC=1;AF=0.011;AN=90;BaseQRankSum=1.193;DB;DP=249;Dels=0.00;FS=1.872;HaplotypeScore=0.1355;InbreedingCoeff=-0.0475;MLEAC=1;MLEAF=0.011;MQ=57.94;MQ0=0;MQRankSum=1.012;QD=11.70;ReadPosRankSum=0.094;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=4.15;culprit=MQ GT:AD:DP:GQ:PL 0/0:6,0:6:18:0,18,187 0/0:6,0:6:18:0,18,184 0/0:6 [...]
+1 1855319 rs2295362 C T 26718.41 PASS AC=18;AF=0.180;AN=100;BaseQRankSum=-9.177;DB;DP=3695;Dels=0.00;FS=3.377;HaplotypeScore=0.6567;InbreedingCoeff=0.3225;MLEAC=18;MLEAF=0.180;MQ=59.63;MQ0=0;MQRankSum=1.412;QD=23.58;ReadPosRankSum=-2.580;SNPEFF_AMINO_ACID_CHANGE=K711;SNPEFF_CODON_CHANGE=aaG/aaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1855214_1855368;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1857211 rs28521843 G A 670.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=5.451;DB;DP=1568;Dels=0.00;FS=10.997;HaplotypeScore=0.0752;InbreedingCoeff=-0.0206;MLEAC=2;MLEAF=0.020;MQ=59.66;MQ0=0;MQRankSum=1.004;QD=13.41;ReadPosRankSum=-1.863;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000493964;VQSLOD=7.74;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:21,0:21:63:0,63,663 0/0:34,0:3 [...]
+1 1887019 rs28548017 A G 150764.25 VQSRTrancheSNP99.50to99.90 AC=79;AF=0.790;AN=100;BaseQRankSum=18.762;DB;DP=4939;Dels=0.00;FS=92.030;HaplotypeScore=0.6975;InbreedingCoeff=-0.0247;MLEAC=79;MLEAF=0.790;MQ=59.70;MQ0=0;MQRankSum=1.805;QD=32.18;ReadPosRankSum=-7.436;SNPEFF_AMINO_ACID_CHANGE=*763Q;SNPEFF_CODON_CHANGE=Tag/Cag;SNPEFF_EFFECT=STOP_LOST;SNPEFF_EXON_ID=exon_1_1884752_1887289;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPAC [...]
+1 1887091 rs139735565 CG C 11461.89 Indel_FS AC=26;AF=0.260;AN=100;BaseQRankSum=-0.440;DB;DP=3493;FS=322.923;HaplotypeScore=20.3961;InbreedingCoeff=-0.0396;MLEAC=26;MLEAF=0.260;MQ=58.64;MQ0=0;MQRankSum=-3.052;QD=9.92;ReadPosRankSum=-2.824;SNPEFF_EFFECT=FRAME_SHIFT;SNPEFF_EXON_ID=exon_1_1884752_1887289;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000270720 GT:AD:DP:GQ:PL 1/1:0,27:28:81:1149,81,0 0/ [...]
+1 1887111 rs141242161 GC G 8958.88 Indel_FS AC=26;AF=0.260;AN=100;BaseQRankSum=3.014;DB;DP=3234;FS=424.686;HaplotypeScore=22.9125;InbreedingCoeff=-0.0395;MLEAC=26;MLEAF=0.260;MQ=57.82;MQ0=0;MQRankSum=0.421;QD=8.09;RPA=2,1;RU=C;ReadPosRankSum=-9.687;SNPEFF_EFFECT=FRAME_SHIFT;SNPEFF_EXON_ID=exon_1_1884752_1887289;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=HIGH;SNPEFF_TRANSCRIPT_ID=ENST00000270720;STR GT:AD:DP:GQ:PL 1/1:0,15:27:4 [...]
+1 1887245 rs28575980 G A 15682.54 PASS AC=25;AF=0.250;AN=100;BaseQRankSum=-0.390;DB;DP=2315;Dels=0.00;FS=4.788;HaplotypeScore=0.6817;InbreedingCoeff=-0.1200;MLEAC=25;MLEAF=0.250;MQ=58.68;MQ0=0;MQRankSum=-1.555;QD=16.07;ReadPosRankSum=1.024;SNPEFF_AMINO_ACID_CHANGE=A134;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1887150_1887289;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSC [...]
+1 1887300 rs115884258 G A 224.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.937;DB;DP=1592;Dels=0.00;FS=4.030;HaplotypeScore=0.3130;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.12;MQ0=0;MQRankSum=0.709;QD=8.97;ReadPosRankSum=-0.167;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=8.09;culprit=QD GT:AD:DP:GQ:PL 0/0:32,0:32:90:0,90,1101 0/0:33,0:33:99:0,99,1 [...]
+1 1888024 rs79784725 C G 940.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.079;DB;DP=1810;Dels=0.00;FS=9.030;HaplotypeScore=0.2720;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.19;MQ0=0;MQRankSum=0.316;QD=14.46;ReadPosRankSum=0.269;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=7.34;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:45,0:45:99:0,135,1626 0/0:31,0: [...]
+1 1888193 rs3820011 C A 8338.62 PASS AC=25;AF=0.250;AN=100;BaseQRankSum=6.606;DB;DP=1179;Dels=0.00;FS=0.000;HaplotypeScore=0.4560;InbreedingCoeff=-0.0142;MLEAC=25;MLEAF=0.250;MQ=59.30;MQ0=0;MQRankSum=0.157;QD=16.13;ReadPosRankSum=3.386;SNPEFF_AMINO_ACID_CHANGE=G628C;SNPEFF_CODON_CHANGE=Ggc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1888059_1888223;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1888237 rs139739570 T C 418.22 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.939;DB;DP=899;Dels=0.00;FS=1.100;HaplotypeScore=0.2628;InbreedingCoeff=-0.0122;MLEAC=1;MLEAF=0.010;MQ=59.60;MQ0=0;MQRankSum=0.003;QD=10.46;ReadPosRankSum=-1.338;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=7.99;culprit=FS GT:AD:DP:GQ:PL 0/0:14,0:14:42:0,42,481 0/0:14,0:14:39:0,39,49 [...]
+1 1888273 rs114981028 G T 376.29 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.990;DB;DP=627;Dels=0.00;FS=0.000;HaplotypeScore=0.2840;InbreedingCoeff=-0.0158;MLEAC=1;MLEAF=0.010;MQ=59.26;MQ0=0;MQRankSum=0.371;QD=12.54;ReadPosRankSum=-2.140;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=7.60;culprit=FS GT:AD:DP:GQ:PL 0/0:5,0:5:15:0,15,181 0/0:14,0:14:39:0,39,490 [...]
+1 1890559 rs146150343 C T 1499.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.399;DB;DP=3082;Dels=0.00;FS=22.965;HaplotypeScore=0.4642;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.20;MQ0=0;MQRankSum=1.746;QD=11.27;ReadPosRankSum=-3.431;SNPEFF_AMINO_ACID_CHANGE=S617;SNPEFF_CODON_CHANGE=tcG/tcA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1890559_1890648;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1890604 rs75297543 C T 709.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.631;DB;DP=4460;Dels=0.00;FS=6.550;HaplotypeScore=0.3434;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.16;MQ0=0;MQRankSum=0.792;QD=9.58;ReadPosRankSum=-0.776;SNPEFF_AMINO_ACID_CHANGE=T49;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1890559_1890648;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1891477 rs2748972 A G 7909.71 PASS AC=22;AF=0.220;AN=100;BaseQRankSum=14.325;DB;DP=1305;Dels=0.00;FS=5.023;HaplotypeScore=1.5993;InbreedingCoeff=0.0675;MLEAC=22;MLEAF=0.220;MQ=58.80;MQ0=0;MQRankSum=-0.664;QD=15.66;ReadPosRankSum=-1.079;SNPEFF_AMINO_ACID_CHANGE=S10P;SNPEFF_CODON_CHANGE=Tcc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1891403_1891504;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPE [...]
+1 1891486 rs113160895 A G 1694.48 PASS AC=6;AF=0.060;AN=100;BaseQRankSum=5.837;DB;DP=1152;Dels=0.00;FS=0.673;HaplotypeScore=1.7650;InbreedingCoeff=-0.0639;MLEAC=6;MLEAF=0.060;MQ=58.80;MQ0=0;MQRankSum=0.379;QD=12.02;ReadPosRankSum=-0.720;SNPEFF_AMINO_ACID_CHANGE=W7R;SNPEFF_CODON_CHANGE=Tgg/Cgg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1891403_1891504;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1895177 rs7523728 C T 18866.39 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=2.316;DB;DP=3390;Dels=0.00;FS=0.546;HaplotypeScore=0.3873;InbreedingCoeff=0.0401;MLEAC=23;MLEAF=0.230;MQ=59.68;MQ0=0;MQRankSum=0.727;QD=18.05;ReadPosRankSum=-0.786;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=6.95;culprit=FS GT:AD:DP:GQ:PL 1/1:0,55:55:99:2079,166,0 0/0:62,0:62:99:0,18 [...]
+1 1896333 rs61734005 G A 4491.52 PASS AC=8;AF=0.080;AN=100;BaseQRankSum=-6.307;DB;DP=1697;Dels=0.00;FS=12.547;HaplotypeScore=0.4063;InbreedingCoeff=0.4565;MLEAC=8;MLEAF=0.080;MQ=58.32;MQ0=0;MQRankSum=1.282;QD=16.10;ReadPosRankSum=-0.673;SNPEFF_AMINO_ACID_CHANGE=H523;SNPEFF_CODON_CHANGE=caC/caT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1896327_1896500;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1896379 rs61734006 C T 483.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.623;DB;DP=1305;Dels=0.00;FS=4.694;HaplotypeScore=0.2476;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.31;MQ0=0;MQRankSum=1.250;QD=11.50;ReadPosRankSum=0.386;SNPEFF_AMINO_ACID_CHANGE=R508H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1896327_1896500;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1896440 rs16824585 G A 9521.71 PASS AC=29;AF=0.290;AN=100;BaseQRankSum=-6.015;DB;DP=1326;Dels=0.00;FS=4.692;HaplotypeScore=0.3370;InbreedingCoeff=-0.0146;MLEAC=29;MLEAF=0.290;MQ=59.06;MQ0=0;MQRankSum=0.301;QD=17.28;ReadPosRankSum=-2.158;SNPEFF_AMINO_ACID_CHANGE=L488;SNPEFF_CODON_CHANGE=Ctg/Ttg;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1896327_1896500;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCR [...]
+1 1897822 . G T 89.86 VQSRTrancheSNP99.90to100.00 AC=9;AF=0.090;AN=100;BaseQRankSum=-20.355;DP=1874;Dels=0.00;FS=1931.320;HaplotypeScore=1.6794;InbreedingCoeff=-0.0913;MLEAC=6;MLEAF=0.060;MQ=58.79;MQ0=0;MQRankSum=4.459;QD=0.34;ReadPosRankSum=-22.255;SNPEFF_AMINO_ACID_CHANGE=Y463*;SNPEFF_CODON_CHANGE=taC/taA;SNPEFF_EFFECT=STOP_GAINED;SNPEFF_EXON_ID=exon_1_1897810_1897965;SNPEFF_FUNCTIONAL_CLASS=NONSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=HIGH;SNPEF [...]
+1 1897832 rs144739795 T C 756.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=5.168;DB;DP=1828;Dels=0.00;FS=0.000;HaplotypeScore=0.8664;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.77;MQ0=0;MQRankSum=0.622;QD=12.82;ReadPosRankSum=-0.824;SNPEFF_AMINO_ACID_CHANGE=N460S;SNPEFF_CODON_CHANGE=aAt/aGt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1897810_1897965;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1897889 rs61734007 G C 1841.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-8.826;DB;DP=1545;Dels=0.00;FS=0.000;HaplotypeScore=0.5198;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=58.62;MQ0=0;MQRankSum=2.410;QD=11.58;ReadPosRankSum=0.364;SNPEFF_AMINO_ACID_CHANGE=P441R;SNPEFF_CODON_CHANGE=cCc/cGc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1897810_1897965;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1897960 rs61734009 G A 69.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.744;DB;DP=1196;Dels=0.00;FS=2.361;HaplotypeScore=0.4735;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=58.04;MQ0=0;MQRankSum=0.756;QD=8.65;ReadPosRankSum=-2.117;SNPEFF_AMINO_ACID_CHANGE=Y417;SNPEFF_CODON_CHANGE=taC/taT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1897810_1897965;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1900024 rs56985589 TG T 34001.90 PASS AC=29;AF=0.290;AN=100;BaseQRankSum=-4.625;DB;DP=3473;FS=33.708;HaplotypeScore=19.1752;InbreedingCoeff=0.0680;MLEAC=29;MLEAF=0.290;MQ=58.34;MQ0=0;MQRankSum=-3.279;QD=23.43;ReadPosRankSum=-0.519;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720 GT:AD:DP:GQ:PL 1/1:0,69:69:99:3091,208,0 0/0:85,0:85:99:0,256,3014 0/1:35,33:71:99:1222 [...]
+1 1900083 rs61734010 C T 1026.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-0.513;DB;DP=4963;Dels=0.00;FS=0.626;HaplotypeScore=1.0971;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=57.40;MQ0=0;MQRankSum=3.504;QD=13.68;ReadPosRankSum=-0.731;SNPEFF_AMINO_ACID_CHANGE=T412;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1900106 rs61233860 T TCTC 53695.38 Indel_FS AC=29;AF=0.290;AN=100;BaseQRankSum=-4.539;DB;DP=5111;FS=1274.991;HaplotypeScore=15.3591;InbreedingCoeff=0.0772;MLEAC=29;MLEAF=0.290;MQ=56.96;MQ0=0;MQRankSum=-7.285;QD=29.91;ReadPosRankSum=-0.826;SNPEFF_AMINO_ACID_CHANGE=K404KR;SNPEFF_CODON_CHANGE=aag/aaGAGg;SNPEFF_EFFECT=CODON_INSERTION;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF [...]
+1 1900186 rs35269416 T C 26612.08 PASS AC=17;AF=0.170;AN=100;BaseQRankSum=15.129;DB;DP=5644;Dels=0.00;FS=2.051;HaplotypeScore=0.9407;InbreedingCoeff=0.0787;MLEAC=17;MLEAF=0.170;MQ=58.60;MQ0=0;MQRankSum=2.639;QD=20.81;ReadPosRankSum=-1.035;SNPEFF_AMINO_ACID_CHANGE=K378R;SNPEFF_CODON_CHANGE=aAa/aGa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SN [...]
+1 1900211 rs78791970 C T 850.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-5.317;DB;DP=5092;Dels=0.00;FS=0.000;HaplotypeScore=1.0293;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.63;MQ0=0;MQRankSum=2.381;QD=11.81;ReadPosRankSum=-0.996;SNPEFF_AMINO_ACID_CHANGE=E370K;SNPEFF_CODON_CHANGE=Gag/Aag;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEF [...]
+1 1900225 rs72636304 C T 689.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=3.355;DB;DP=4850;Dels=0.00;FS=1.828;HaplotypeScore=1.5262;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.60;MQ0=0;MQRankSum=0.345;QD=13.25;ReadPosRankSum=0.779;SNPEFF_AMINO_ACID_CHANGE=R365Q;SNPEFF_CODON_CHANGE=cGg/cAg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF_ [...]
+1 1900232 rs16824588 T C 72609.14 PASS AC=47;AF=0.470;AN=100;BaseQRankSum=-13.056;DB;DP=4674;Dels=0.00;FS=4.915;HaplotypeScore=1.2678;InbreedingCoeff=0.0767;MLEAC=47;MLEAF=0.470;MQ=58.67;MQ0=0;MQRankSum=-0.362;QD=23.54;ReadPosRankSum=-1.796;SNPEFF_AMINO_ACID_CHANGE=I363V;SNPEFF_CODON_CHANGE=Atc/Gtc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1900074_1900272;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE; [...]
+1 1900308 rs114206046 T C 1362.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=6.772;DB;DP=1287;Dels=0.00;FS=7.651;HaplotypeScore=0.6800;InbreedingCoeff=-0.0311;MLEAC=3;MLEAF=0.030;MQ=58.64;MQ0=0;MQRankSum=1.892;QD=13.10;ReadPosRankSum=-1.879;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=6.66;culprit=MQ GT:AD:DP:GQ:PL 0/0:39,1:39:99:0,111,1253 0/0:34,0:34:96:0,96 [...]
+1 1903373 rs117921686 C T 723.61 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=-2.355;DB;DP=1241;Dels=0.00;FS=1.104;HaplotypeScore=1.0785;InbreedingCoeff=-0.0308;MLEAC=3;MLEAF=0.030;MQ=59.00;MQ0=0;MQRankSum=0.107;QD=11.67;ReadPosRankSum=-1.042;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=6.56;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/0:29,0:29:84:0,84,1042 0/0:28,0 [...]
+1 1903400 . T G 1066.92 VQSRTrancheSNP99.50to99.90 AC=31;AF=0.310;AN=100;BaseQRankSum=-15.042;DP=1110;Dels=0.00;FS=159.527;HaplotypeScore=1.0567;InbreedingCoeff=-0.4165;MLEAC=29;MLEAF=0.290;MQ=58.36;MQ0=0;MQRankSum=1.810;QD=1.48;ReadPosRankSum=-13.563;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=-1.156e+01;culprit=FS GT:AD:DP:GQ:PL 0/0:15,10:24:18:0,18,424 [...]
+1 1903408 rs116259649 C T 178.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.299;DB;DP=992;Dels=0.00;FS=1.460;HaplotypeScore=1.5170;InbreedingCoeff=-0.0112;MLEAC=1;MLEAF=0.010;MQ=58.72;MQ0=0;MQRankSum=0.361;QD=11.88;ReadPosRankSum=-0.791;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=4.09;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:48:0,48,578 0/0:18,0:18:48:0,48,52 [...]
+1 1903470 rs144786593 C T 633.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.969;DB;DP=3533;Dels=0.00;FS=19.228;HaplotypeScore=0.5360;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.99;MQ0=0;MQRankSum=0.480;QD=10.38;ReadPosRankSum=1.252;SNPEFF_AMINO_ACID_CHANGE=R279;SNPEFF_CODON_CHANGE=agG/agA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1903419_1903521;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1904357 rs143627362 C T 676.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.431;DB;DP=1574;Dels=0.00;FS=0.000;HaplotypeScore=0.2661;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.89;MQ0=0;MQRankSum=1.468;QD=11.27;ReadPosRankSum=-2.624;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=7.53;culprit=MQ GT:AD:DP:GQ:PL 0/0:24,0:24:72:0,72,862 0/0:25,0:25:75:0,75,9 [...]
+1 1905556 rs61733994 C T 1950.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=0.222;DB;DP=2127;Dels=0.00;FS=10.164;HaplotypeScore=1.5441;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=58.70;MQ0=0;MQRankSum=0.448;QD=14.23;ReadPosRankSum=-0.221;SNPEFF_AMINO_ACID_CHANGE=T194;SNPEFF_CODON_CHANGE=acG/acA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1905464_1905637;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIP [...]
+1 1905565 rs77196972 C T 1745.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-3.508;DB;DP=2354;Dels=0.00;FS=1.188;HaplotypeScore=1.7448;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=58.55;MQ0=0;MQRankSum=-0.361;QD=14.31;ReadPosRankSum=-0.283;SNPEFF_AMINO_ACID_CHANGE=V191;SNPEFF_CODON_CHANGE=gtG/gtA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1905464_1905637;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRI [...]
+1 1916782 rs3795282 C A 8233.83 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-13.977;DB;DP=2297;Dels=0.00;FS=0.000;HaplotypeScore=0.3487;InbreedingCoeff=0.5556;MLEAC=10;MLEAF=0.100;MQ=59.41;MQ0=0;MQRankSum=0.258;QD=21.22;ReadPosRankSum=-1.990;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378590;VQSLOD=6.36;culprit=FS GT:AD:DP:GQ:PL 0/0:57,0:57:99:0,172,2108 0/0:44,0:44:99 [...]
+1 1916806 rs3795281 C T 12040.83 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-3.466;DB;DP=3132;Dels=0.00;FS=6.201;HaplotypeScore=0.4590;InbreedingCoeff=0.5556;MLEAC=10;MLEAF=0.100;MQ=59.06;MQ0=0;MQRankSum=0.460;QD=24.67;ReadPosRankSum=-0.128;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378590;VQSLOD=6.27;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:68,0:68:99:0,205,2457 0 [...]
+1 1916855 . G A 72.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.246;DP=3838;Dels=0.00;FS=0.000;HaplotypeScore=0.8434;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.25;MQ0=0;MQRankSum=1.732;QD=0.96;ReadPosRankSum=-1.504;SNPEFF_AMINO_ACID_CHANGE=S157L;SNPEFF_CODON_CHANGE=tCg/tTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1916825_1916929;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_I [...]
+1 1916890 rs3795280 C T 50541.72 PASS AC=46;AF=0.460;AN=100;BaseQRankSum=-25.470;DB;DP=3695;Dels=0.00;FS=10.106;HaplotypeScore=0.7583;InbreedingCoeff=0.1948;MLEAC=46;MLEAF=0.460;MQ=59.20;MQ0=0;MQRankSum=0.175;QD=21.57;ReadPosRankSum=-0.665;SNPEFF_AMINO_ACID_CHANGE=L145;SNPEFF_CODON_CHANGE=ctG/ctA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1916825_1916929;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=LOW;SNPEFF_TRANSC [...]
+1 1916959 rs74594142 G A 573.25 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-4.181;DB;DP=1422;Dels=0.00;FS=0.000;HaplotypeScore=0.2665;InbreedingCoeff=-0.0204;MLEAC=2;MLEAF=0.020;MQ=59.28;MQ0=0;MQRankSum=-0.068;QD=9.55;ReadPosRankSum=-1.486;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378590;VQSLOD=8.46;culprit=FS GT:AD:DP:GQ:PL 0/0:27,0:27:81:0,81,978 0/0:23,0:23:69:0,6 [...]
+1 1918362 rs144006794 C T 869.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-6.130;DB;DP=4633;Dels=0.00;FS=7.545;HaplotypeScore=0.9887;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.69;MQ0=0;MQRankSum=1.612;QD=11.91;ReadPosRankSum=1.321;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378590;VQSLOD=5.13;culprit=MQ GT:AD:DP:GQ:PL 0/0:107,0:107:99:0,316,3912 0/0:94,0:94:99 [...]
+1 1918368 . C G 612.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.139;DP=4684;Dels=0.00;FS=0.000;HaplotypeScore=1.0328;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.68;MQ0=0;MQRankSum=0.412;QD=13.03;ReadPosRankSum=0.283;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378590;VQSLOD=4.76;culprit=MQ GT:AD:DP:GQ:PL 0/0:102,0:102:99:0,304,3721 0/0:97,0:97:99:0,292,3666 0 [...]
+1 1918488 rs4350140 A G 66193.72 PASS AC=67;AF=0.670;AN=100;BaseQRankSum=20.807;DB;DP=2739;Dels=0.00;FS=0.753;HaplotypeScore=1.0616;InbreedingCoeff=-0.0403;MLEAC=67;MLEAF=0.670;MQ=59.28;MQ0=0;MQRankSum=1.448;QD=26.46;ReadPosRankSum=1.038;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378590;VQSLOD=5.13;culprit=HaplotypeScore GT:AD:DP:GQ:PL 0/1:28,28:56:99:822,0,764 0/ [...]
+1 1920434 rs144487103 TA T 3352.64 PASS AC=39;AF=0.390;AN=100;BaseQRankSum=1.147;DB;DP=1874;FS=2.258;HaplotypeScore=10.7985;InbreedingCoeff=-0.6358;MLEAC=39;MLEAF=0.390;MQ=59.32;MQ0=0;MQRankSum=0.475;QD=2.21;RPA=14,13;RU=A;ReadPosRankSum=0.826;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;STR GT:AD:DP:GQ:PL 0/0:0,0:36:10:0,10,320 0/1:0,0:42:40:40,0,457 0/1:0,0:18: [...]
+1 1922303 rs13303195 C T 52962.72 PASS AC=70;AF=0.700;AN=100;BaseQRankSum=-8.284;DB;DP=2098;Dels=0.00;FS=6.763;HaplotypeScore=0.3122;InbreedingCoeff=-0.0477;MLEAC=70;MLEAF=0.700;MQ=59.64;MQ0=0;MQRankSum=-0.363;QD=26.74;ReadPosRankSum=-0.540;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=retained_intron;SNPEFF_GENE_NAME=C1orf222;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000270720;VQSLOD=5.13;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:19,28:45:99:842,0,552 1/ [...]
+1 1956362 rs2376805 G A 71015.04 PASS AC=83;AF=0.830;AN=100;BaseQRankSum=10.972;DB;DP=2501;Dels=0.00;FS=11.665;HaplotypeScore=0.3263;InbreedingCoeff=0.3621;MLEAC=83;MLEAF=0.830;MQ=59.05;MQ0=0;MQRankSum=0.640;QD=31.87;ReadPosRankSum=3.782;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=4.03;culprit=ReadPosRankSum GT:AD:DP:GQ:PL 0/1:21,13:32:99:382,0,479 1/1:0,30:3 [...]
+1 1956733 rs188089835 G A 868.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.998;DB;DP=2977;Dels=0.00;FS=1.871;HaplotypeScore=0.5884;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.31;MQ0=0;MQRankSum=0.654;QD=11.58;ReadPosRankSum=-3.335;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=6.16;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:60,0:60:99:0,181,2168 0/0:57,0:5 [...]
+1 1956850 . A C 664.91 VQSRTrancheSNP99.50to99.90 AC=22;AF=0.220;AN=100;BaseQRankSum=-21.336;DP=2255;Dels=0.00;FS=351.602;HaplotypeScore=2.1819;InbreedingCoeff=-0.2778;MLEAC=21;MLEAF=0.210;MQ=58.85;MQ0=0;MQRankSum=6.650;QD=0.58;ReadPosRankSum=-5.172;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=-3.563e+01;culprit=FS GT:AD:DP:GQ:PL 0/0:36,15:49:29:0,29,976 0/0:4 [...]
+1 1957037 rs2229110 T C 70543.40 PASS AC=64;AF=0.640;AN=100;BaseQRankSum=16.739;DB;DP=3212;Dels=0.00;FS=3.065;HaplotypeScore=2.3687;InbreedingCoeff=0.2187;MLEAC=64;MLEAF=0.640;MQ=59.26;MQ0=0;MQRankSum=-0.198;QD=27.04;ReadPosRankSum=0.465;SNPEFF_AMINO_ACID_CHANGE=G110;SNPEFF_CODON_CHANGE=ggT/ggC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1956957_1957177;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1957219 rs140980040 CG C 3487.20 Indel_FS AC=12;AF=0.120;AN=100;BaseQRankSum=-0.962;DB;DP=873;FS=354.599;HaplotypeScore=4.0037;InbreedingCoeff=0.0497;MLEAC=12;MLEAF=0.120;MQ=58.78;MQ0=0;MQRankSum=1.434;QD=17.98;RPA=3,2;RU=G;ReadPosRankSum=-2.351;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;STR GT:AD:DP:GQ:PL 0/0:22,0:22:66:0,66,895 0/0:23,0:23:69:0,69,926 0/1:9,7:1 [...]
+1 1958993 rs150102040 C T 122.20 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.968;DB;DP=911;Dels=0.00;FS=17.837;HaplotypeScore=0.2512;InbreedingCoeff=-0.0110;MLEAC=1;MLEAF=0.010;MQ=59.00;MQ0=0;MQRankSum=1.864;QD=7.64;ReadPosRankSum=-0.095;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=4.30;culprit=FS GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,703 0/0:21,0:21:63:0,63,794 0/ [...]
+1 1959121 rs3795279 T C 2677.48 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=9.933;DB;DP=1066;Dels=0.00;FS=4.101;HaplotypeScore=0.3335;InbreedingCoeff=-0.0530;MLEAC=5;MLEAF=0.050;MQ=59.22;MQ0=0;MQRankSum=0.944;QD=14.87;ReadPosRankSum=-1.734;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=7.15;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:23,0:23:69:0,69,811 0/0:27,0:27:81 [...]
+1 1959698 rs139300921 C T 112.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.525;DB;DP=1038;Dels=0.00;FS=2.291;HaplotypeScore=0.5319;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=58.91;MQ0=0;MQRankSum=0.884;QD=10.20;ReadPosRankSum=-0.322;SNPEFF_AMINO_ACID_CHANGE=R220C;SNPEFF_CODON_CHANGE=Cgc/Tgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1959594_1959731;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODERATE;SNPEFF_TR [...]
+1 1959699 rs41307846 G A 210.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.134;DB;DP=999;Dels=0.00;FS=0.000;HaplotypeScore=0.5319;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=58.80;MQ0=0;MQRankSum=1.468;QD=19.11;ReadPosRankSum=-1.548;SNPEFF_AMINO_ACID_CHANGE=R220H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1959594_1959731;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODERATE;SNPEFF_TRA [...]
+1 1960674 rs28408173 C T 2980.27 PASS AC=23;AF=0.230;AN=100;BaseQRankSum=-7.583;DB;DP=410;Dels=0.00;FS=0.000;HaplotypeScore=0.2047;InbreedingCoeff=0.1983;MLEAC=22;MLEAF=0.220;MQ=58.36;MQ0=0;MQRankSum=2.906;QD=17.43;ReadPosRankSum=-1.056;SNPEFF_AMINO_ACID_CHANGE=S272;SNPEFF_CODON_CHANGE=agC/agT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1960550_1960705;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID [...]
+1 1960964 rs116197762 A G 2939.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=9.622;DB;DP=2005;Dels=0.00;FS=10.345;HaplotypeScore=0.5699;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=58.96;MQ0=0;MQRankSum=-0.092;QD=13.36;ReadPosRankSum=-2.028;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=6.71;culprit=MQ GT:AD:DP:GQ:PL 0/0:38,0:38:99:0,111,1314 0/0:43,0:43:99:0,123, [...]
+1 1961239 rs28507434 G A 181.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.178;DB;DP=1196;Dels=0.00;FS=2.212;HaplotypeScore=0.2632;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.68;MQ0=0;MQRankSum=-0.953;QD=15.10;ReadPosRankSum=-1.138;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=7.30;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,703 0/0:27,0:27:81:0,8 [...]
+1 1961408 rs28431879 C T 12677.23 PASS AC=21;AF=0.210;AN=100;BaseQRankSum=-0.060;DB;DP=2453;Dels=0.00;FS=9.731;HaplotypeScore=0.6274;InbreedingCoeff=0.0958;MLEAC=21;MLEAF=0.210;MQ=58.82;MQ0=0;MQRankSum=0.121;QD=15.50;ReadPosRankSum=-1.337;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378585;VQSLOD=5.25;culprit=MQ GT:AD:DP:GQ:PL 0/1:23,22:43:99:645,0,560 0/1:19,13:31:99:373,0 [...]
+1 1961466 rs28398772 C T 3049.46 PASS AC=5;AF=0.050;AN=100;BaseQRankSum=2.707;DB;DP=2245;Dels=0.00;FS=15.097;HaplotypeScore=0.6637;InbreedingCoeff=-0.0526;MLEAC=5;MLEAF=0.050;MQ=59.16;MQ0=0;MQRankSum=-0.078;QD=12.81;ReadPosRankSum=-2.229;SNPEFF_AMINO_ACID_CHANGE=A368;SNPEFF_CODON_CHANGE=gcC/gcT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1961422_1962192;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=GABRD;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 1986954 rs35271800 G A 626.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.370;DB;DP=1965;Dels=0.00;FS=1.853;HaplotypeScore=0.0984;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.68;MQ0=0;MQRankSum=0.301;QD=11.60;ReadPosRankSum=-2.289;SNPEFF_AMINO_ACID_CHANGE=R3H;SNPEFF_CODON_CHANGE=cGt/cAt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1986880_1987001;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 1987889 rs70937051 C T 286.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.998;DB;DP=1365;Dels=0.00;FS=0.000;HaplotypeScore=0.3534;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.62;MQ0=0;MQRankSum=-2.065;QD=11.45;ReadPosRankSum=-1.702;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484419;VQSLOD=6.69;culprit=MQRankSum GT:AD:DP:GQ:PL 0/0:27,0:27:81:0,81,998 0/0:19,0:19:51 [...]
+1 1987993 rs12184 T C 57473.70 PASS AC=66;AF=0.660;AN=100;BaseQRankSum=-7.941;DB;DP=2388;Dels=0.00;FS=0.833;HaplotypeScore=0.6716;InbreedingCoeff=0.2870;MLEAC=66;MLEAF=0.660;MQ=59.33;MQ0=0;MQRankSum=1.022;QD=28.16;ReadPosRankSum=-0.012;SNPEFF_AMINO_ACID_CHANGE=D42;SNPEFF_CODON_CHANGE=gaT/gaC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1987923_1988012;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 1988044 rs3820005 G C 2910.92 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=-11.091;DB;DP=1213;Dels=0.00;FS=0.000;HaplotypeScore=0.6194;InbreedingCoeff=0.1102;MLEAC=10;MLEAF=0.100;MQ=59.57;MQ0=0;MQRankSum=0.904;QD=14.85;ReadPosRankSum=-0.951;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000484419;VQSLOD=6.64;culprit=FS GT:AD:DP:GQ:PL 0/1:12,15:26:99:381,0,345 0/0:23,0:23:66:0,6 [...]
+1 1991013 . C T 764.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.967;DP=2590;Dels=0.00;FS=13.418;HaplotypeScore=2.5785;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.34;MQ0=0;MQRankSum=-0.170;QD=13.41;ReadPosRankSum=3.457;SNPEFF_AMINO_ACID_CHANGE=P106L;SNPEFF_CODON_CHANGE=cCa/cTa;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1990980_1991030;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID [...]
+1 1991014 rs1878745 A G 17582.73 PASS AC=30;AF=0.300;AN=100;BaseQRankSum=-0.494;DB;DP=2599;Dels=0.00;FS=0.000;HaplotypeScore=2.5845;InbreedingCoeff=-0.0477;MLEAC=30;MLEAF=0.300;MQ=58.34;MQ0=0;MQRankSum=1.880;QD=14.08;ReadPosRankSum=0.017;SNPEFF_AMINO_ACID_CHANGE=P106;SNPEFF_CODON_CHANGE=ccA/ccG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_1990980_1991030;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_I [...]
+1 2002807 rs113197144 C T 55.63 PASS AC=1;AF=0.011;AN=94;BaseQRankSum=-0.619;DB;DP=175;Dels=0.00;FS=5.392;HaplotypeScore=0.1374;InbreedingCoeff=-0.0827;MLEAC=1;MLEAF=0.011;MQ=58.76;MQ0=0;MQRankSum=0.081;QD=9.27;ReadPosRankSum=-0.153;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378567;VQSLOD=4.50;culprit=MQ GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,25 0/0:4,0:4:12:0,12,148 0/0:2,0:2:6: [...]
+1 2075814 rs3128303 C T 161.76 PASS AC=7;AF=0.080;AN=88;BaseQRankSum=0.381;DB;DP=115;Dels=0.00;FS=6.310;HaplotypeScore=0.0659;InbreedingCoeff=-0.0583;MLEAC=7;MLEAF=0.080;MQ=58.55;MQ0=0;MQRankSum=0.381;QD=10.11;ReadPosRankSum=0.883;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378567;VQSLOD=5.37;culprit=MQ GT:AD:DP:GQ:PL 0/1:1,1:2:20:20,0,28 0/0:2,0:2:6:0,6,59 0/0:2,0:2:6:0,6 [...]
+1 2077490 . C G 935.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.410;DP=3482;Dels=0.00;FS=4.801;HaplotypeScore=0.1840;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.87;MQ0=0;MQRankSum=0.476;QD=12.47;ReadPosRankSum=-0.060;SNPEFF_AMINO_ACID_CHANGE=P10A;SNPEFF_CODON_CHANGE=Cct/Gct;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2077466_2077547;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=EN [...]
+1 2082184 rs11583093 G A 813.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=5.161;DB;DP=2360;Dels=0.00;FS=9.924;HaplotypeScore=0.3601;InbreedingCoeff=-0.0309;MLEAC=3;MLEAF=0.030;MQ=59.39;MQ0=0;MQRankSum=-0.381;QD=11.62;ReadPosRankSum=-2.780;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000466352;VQSLOD=7.44;culprit=FS GT:AD:DP:GQ:PL 0/0:43,0:43:99:0,129,1397 0/0:72,0:72:99:0,217 [...]
+1 2082458 rs262670 C T 7277.27 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=10.145;DB;DP=1091;Dels=0.00;FS=9.590;HaplotypeScore=0.3189;InbreedingCoeff=0.1515;MLEAC=20;MLEAF=0.200;MQ=59.05;MQ0=0;MQRankSum=-0.140;QD=19.10;ReadPosRankSum=-2.059;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000419838;VQSLOD=6.08;culprit=MQ GT:AD:DP:GQ:PL 0/0:28,0:28:81:0,81,869 0/1:12,16:27:99:421,0 [...]
+1 2087413 . A C 1052.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=6.334;DP=5739;Dels=0.00;FS=1.203;HaplotypeScore=0.0200;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.96;MQ0=0;MQRankSum=0.900;QD=14.03;ReadPosRankSum=-4.895;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000470986;VQSLOD=7.55;culprit=FS GT:AD:DP:GQ:PL 0/0:127,0:127:99:0,382,4588 0/0:127,0:127:99:0,382,4696 0/ [...]
+1 2087557 rs3123592 T C 8611.89 PASS AC=10;AF=0.100;AN=100;BaseQRankSum=20.045;DB;DP=3575;Dels=0.00;FS=3.905;HaplotypeScore=0.2225;InbreedingCoeff=-0.1111;MLEAC=10;MLEAF=0.100;MQ=59.64;MQ0=0;MQRankSum=1.037;QD=15.41;ReadPosRankSum=-1.766;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000486681;VQSLOD=6.76;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/1:46,25:68:99:789,0,1305 0/0: [...]
+1 2101059 rs3737633 C G 249.09 PASS AC=7;AF=0.088;AN=80;BaseQRankSum=4.500;DB;DP=93;Dels=0.00;FS=5.055;HaplotypeScore=0.0748;InbreedingCoeff=0.0682;MLEAC=7;MLEAF=0.088;MQ=57.69;MQ0=0;MQRankSum=2.360;QD=15.57;ReadPosRankSum=-1.039;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378567;VQSLOD=4.81;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,2:2:6:76,6,0 0/0:5,0:5:15:0,15,172 ./. ./. 0/1:1,1 [...]
+1 2101091 rs113136694 T C 34.22 PASS AC=1;AF=0.015;AN=66;BaseQRankSum=-0.667;DB;DP=69;Dels=0.00;FS=7.533;HaplotypeScore=0.1098;InbreedingCoeff=-0.1420;MLEAC=1;MLEAF=0.015;MQ=58.23;MQ0=0;MQRankSum=-0.489;QD=8.56;ReadPosRankSum=-2.447;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378567;VQSLOD=3.17;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:1,0:1:3:0,3,39 0/0:3,0:3:9:0,9,113 0 [...]
+1 2103506 rs2280272 C G 1654.28 PASS AC=4;AF=0.040;AN=100;BaseQRankSum=-2.301;DB;DP=2170;Dels=0.00;FS=8.345;HaplotypeScore=0.2935;InbreedingCoeff=-0.0417;MLEAC=4;MLEAF=0.040;MQ=59.42;MQ0=0;MQRankSum=2.739;QD=10.47;ReadPosRankSum=-1.244;SNPEFF_AMINO_ACID_CHANGE=A175;SNPEFF_CODON_CHANGE=gcC/gcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2103494_2103629;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 2105477 rs114496009 C T 683.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.391;DB;DP=2112;Dels=0.00;FS=2.851;HaplotypeScore=0.4955;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.29;MQ0=0;MQRankSum=0.221;QD=10.51;ReadPosRankSum=-1.444;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472017;VQSLOD=6.34;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:52,0:52:99:0,156,1739 0/0:43, [...]
+1 2106679 . TCGGCTG T 265.12 Indel_QD AC=11;AF=0.110;AN=100;BaseQRankSum=-5.312;DP=1987;FS=138.344;HaplotypeScore=9.0959;InbreedingCoeff=-0.1292;MLEAC=10;MLEAF=0.100;MQ=58.20;MQ0=0;MQRankSum=-0.022;QD=0.54;ReadPosRankSum=-10.941;SNPEFF_AMINO_ACID_CHANGE=LGC318L;SNPEFF_CODON_CHANGE=ctcggctgc/ctc;SNPEFF_EFFECT=CODON_DELETION;SNPEFF_EXON_ID=exon_1_2106663_2106752;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_I [...]
+1 2106681 . G C 143.25 VQSRTrancheSNP99.90to100.00 AC=9;AF=0.090;AN=100;BaseQRankSum=-7.761;DP=1223;Dels=0.02;FS=691.230;HaplotypeScore=3.5897;InbreedingCoeff=-0.1087;MLEAC=8;MLEAF=0.080;MQ=59.12;MQ0=0;MQRankSum=0.620;QD=0.80;ReadPosRankSum=-13.164;SNPEFF_AMINO_ACID_CHANGE=G319R;SNPEFF_CODON_CHANGE=Ggc/Cgc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2106663_2106752;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODER [...]
+1 2106762 rs262640 C A 1773.23 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.243;DB;DP=1324;Dels=0.00;FS=0.000;HaplotypeScore=0.2332;InbreedingCoeff=0.9929;MLEAC=2;MLEAF=0.020;MQ=58.15;MQ0=0;MQRankSum=0.264;QD=34.10;ReadPosRankSum=-0.403;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472017;VQSLOD=3.80;culprit=InbreedingCoeff GT:AD:DP:GQ:PL 0/0:19,0:19:57:0,57,718 0/0:22,0:22 [...]
+1 2106763 rs112493944 A G 726.12 PASS AC=3;AF=0.030;AN=100;BaseQRankSum=5.441;DB;DP=1312;Dels=0.00;FS=3.149;HaplotypeScore=0.1935;InbreedingCoeff=-0.0311;MLEAC=3;MLEAF=0.030;MQ=58.16;MQ0=0;MQRankSum=0.834;QD=15.13;ReadPosRankSum=0.457;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000472017;VQSLOD=5.42;culprit=MQ GT:AD:DP:GQ:PL 0/0:18,0:18:54:0,54,635 0/0:22,0:22:66:0,66,759 [...]
+1 2116002 . TCTC T 1008.13 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-4.465;DP=1094;FS=0.000;HaplotypeScore=6.4704;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=59.00;MQ0=0;MQRankSum=-2.182;QD=31.50;ReadPosRankSum=-1.665;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=C1orf86;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378543 GT:AD:DP:GQ:PL 0/0:20,0:20:60:0,60,1213 0/0:23,0:24:69:0,69,1201 0/0:21,0:21:63:0,63,1274 0/0 [...]
+1 2116175 rs185563823 C T 139.32 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.340;DB;DP=615;Dels=0.00;FS=5.693;HaplotypeScore=0.2492;InbreedingCoeff=-0.0168;MLEAC=1;MLEAF=0.010;MQ=59.15;MQ0=0;MQRankSum=0.607;QD=9.29;ReadPosRankSum=0.189;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=C1orf86;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378543;VQSLOD=7.31;culprit=QD GT:AD:DP:GQ:PL 0/0:14,0:14:42:0,42,449 0/0:13,0:13:39:0, [...]
+1 2116433 rs116408566 C T 362.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.713;DB;DP=1164;Dels=0.00;FS=0.000;HaplotypeScore=0.3164;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=59.28;MQ0=0;MQRankSum=0.905;QD=12.07;ReadPosRankSum=-1.699;SNPEFF_AMINO_ACID_CHANGE=T405;SNPEFF_CODON_CHANGE=acC/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2116361_2116832;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=PRKCZ;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID= [...]
+1 2121118 rs2503701 C T 19913.98 PASS AC=60;AF=0.600;AN=100;BaseQRankSum=-1.412;DB;DP=988;Dels=0.00;FS=2.297;HaplotypeScore=0.6282;InbreedingCoeff=0.1563;MLEAC=60;MLEAF=0.600;MQ=58.31;MQ0=0;MQRankSum=2.004;QD=24.95;ReadPosRankSum=0.642;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=C1orf86;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000497675;VQSLOD=4.91;culprit=MQ GT:AD:DP:GQ:PL 1/1:0,13:13:36:449,36,0 0/1:4,6:10:90: [...]
+1 2125086 rs114983157 G C 1086.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.729;DB;DP=2380;Dels=0.00;FS=2.270;HaplotypeScore=0.3220;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.99;MQ0=0;MQRankSum=0.293;QD=14.48;ReadPosRankSum=-1.515;SNPEFF_AMINO_ACID_CHANGE=S109W;SNPEFF_CODON_CHANGE=tCg/tGg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2125078_2125349;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=C1orf86;SNPEFF_IMPACT=MODERATE; [...]
+1 2125172 rs1058411 G A 9823.05 PASS AC=20;AF=0.200;AN=100;BaseQRankSum=-12.550;DB;DP=1429;Dels=0.00;FS=6.427;HaplotypeScore=0.5441;InbreedingCoeff=0.1249;MLEAC=20;MLEAF=0.200;MQ=59.20;MQ0=0;MQRankSum=0.412;QD=17.54;ReadPosRankSum=-0.649;SNPEFF_AMINO_ACID_CHANGE=P126S;SNPEFF_CODON_CHANGE=Ccc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2125078_2125349;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=C1orf86;SNPEFF_IMPACT=MODERATE [...]
+1 2125205 . C A 958.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.979;DP=1359;Dels=0.00;FS=4.384;HaplotypeScore=0.5383;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.02;MQ0=0;MQRankSum=-0.530;QD=13.31;ReadPosRankSum=-1.699;SNPEFF_AMINO_ACID_CHANGE=A115S;SNPEFF_CODON_CHANGE=Gcc/Tcc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2125078_2125349;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=processed_transcript;SNPEFF_GENE_NAME=C1orf86;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANS [...]
+1 2160223 . C G 43.29 PASS AC=5;AF=0.208;AN=24;BaseQRankSum=-1.606;DP=16;Dels=0.00;FS=0.000;HaplotypeScore=0.0554;InbreedingCoeff=0.0852;MLEAC=5;MLEAF=0.208;MQ=55.11;MQ0=0;MQRankSum=0.423;QD=10.82;ReadPosRankSum=-1.437;SNPEFF_AMINO_ACID_CHANGE=G6;SNPEFF_CODON_CHANGE=ggC/ggG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2160134_2161174;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000378536;VQSLO [...]
+1 2160499 rs115746142 C T 174.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-1.732;DB;DP=1206;Dels=0.00;FS=0.000;HaplotypeScore=0.3051;InbreedingCoeff=-0.0103;MLEAC=1;MLEAF=0.010;MQ=59.39;MQ0=0;MQRankSum=-0.257;QD=12.44;ReadPosRankSum=-2.448;SNPEFF_AMINO_ACID_CHANGE=T98;SNPEFF_CODON_CHANGE=acC/acT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2160134_2161174;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=E [...]
+1 2161016 . A C 440.97 VQSRTrancheSNP99.90to100.00 AC=14;AF=0.140;AN=100;BaseQRankSum=-5.760;DP=1089;Dels=0.01;FS=970.095;HaplotypeScore=2.2183;InbreedingCoeff=-0.1826;MLEAC=13;MLEAF=0.130;MQ=58.89;MQ0=0;MQRankSum=-0.442;QD=1.54;ReadPosRankSum=-11.824;SNPEFF_AMINO_ACID_CHANGE=T271P;SNPEFF_CODON_CHANGE=Acc/Ccc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2160134_2161174;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODE [...]
+1 2234681 rs184459808 G T 1966.97 VQSRTrancheSNP99.90to100.00 AC=14;AF=0.140;AN=100;BaseQRankSum=-24.744;DB;DP=3064;Dels=0.00;FS=466.420;HaplotypeScore=3.3634;InbreedingCoeff=-0.1602;MLEAC=13;MLEAF=0.130;MQ=57.44;MQ0=0;MQRankSum=-3.204;QD=2.30;ReadPosRankSum=-23.739;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000508416;VQSLOD=-7.287e+01;culprit=FS GT:AD:DP:GQ:PL 0/0:51,7:56 [...]
+1 2234791 rs75280988 C T 1085.18 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=4.037;DB;DP=6933;Dels=0.00;FS=0.000;HaplotypeScore=0.3779;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=59.00;MQ0=0;MQRankSum=0.841;QD=15.28;ReadPosRankSum=-2.588;SNPEFF_AMINO_ACID_CHANGE=A388V;SNPEFF_CODON_CHANGE=gCg/gTg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2234724_2234839;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODERATE;SNPEFF_TRAN [...]
+1 2234850 rs115186522 G C 154.37 VQSRTrancheSNP99.00to99.30 AC=3;AF=0.030;AN=100;BaseQRankSum=-8.115;DB;DP=2388;Dels=0.00;FS=22.346;HaplotypeScore=1.3928;InbreedingCoeff=-0.0339;MLEAC=3;MLEAF=0.030;MQ=57.93;MQ0=0;MQRankSum=0.803;QD=1.16;ReadPosRankSum=-4.880;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000478223;VQSLOD=-3.415e-01;culprit=QD GT:AD:DP:GQ:PL 0/0:39,0:39:99:0,11 [...]
+1 2234874 rs143561187 CG C 532.13 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.309;DB;DP=3338;FS=90.583;HaplotypeScore=17.7870;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=58.53;MQ0=0;MQRankSum=0.017;QD=12.98;RPA=5,4;RU=G;ReadPosRankSum=-2.092;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000478223;STR GT:AD:DP:GQ:PL 0/0:70,0:70:99:0,211,2619 0/0:70,0:73:99:0,211,2608 0/0:63,0: [...]
+1 2235451 . C G 226.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-2.707;DP=1158;Dels=0.00;FS=6.994;HaplotypeScore=0.9115;InbreedingCoeff=-0.0104;MLEAC=1;MLEAF=0.010;MQ=59.39;MQ0=0;MQRankSum=-0.169;QD=12.57;ReadPosRankSum=-1.595;SNPEFF_AMINO_ACID_CHANGE=P462A;SNPEFF_CODON_CHANGE=Cca/Gca;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2235279_2235541;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODERATE;SNPEFF_TRANSCRIPT_ID=E [...]
+1 2235477 rs150985728 C T 447.19 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.924;DB;DP=987;Dels=0.00;FS=0.000;HaplotypeScore=0.8674;InbreedingCoeff=-0.0108;MLEAC=1;MLEAF=0.010;MQ=58.91;MQ0=0;MQRankSum=0.361;QD=12.78;ReadPosRankSum=-0.484;SNPEFF_AMINO_ACID_CHANGE=P470;SNPEFF_CODON_CHANGE=ccC/ccT;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2235279_2235541;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENS [...]
+1 2237614 . G A 63.78 PASS AC=1;AF=0.010;AN=98;BaseQRankSum=-0.828;DP=319;Dels=0.00;FS=0.000;HaplotypeScore=0.1893;InbreedingCoeff=-0.0338;MLEAC=1;MLEAF=0.010;MQ=59.16;MQ0=0;MQRankSum=0.368;QD=15.95;ReadPosRankSum=-0.476;SNPEFF_AMINO_ACID_CHANGE=L641;SNPEFF_CODON_CHANGE=ctG/ctA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_2237459_2237689;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=LOW;SNPEFF_TRANSCRIPT_ID=ENST00000378536;V [...]
+1 2238237 rs2230008 A T 83.67 PASS AC=6;AF=0.150;AN=40;BaseQRankSum=-0.106;DB;DP=28;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;InbreedingCoeff=0.2420;MLEAC=5;MLEAF=0.125;MQ=57.15;MQ0=0;MQRankSum=-1.694;QD=20.92;ReadPosRankSum=-0.529;SNPEFF_EFFECT=DOWNSTREAM;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=SKI;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000478223;VQSLOD=3.72;culprit=MQ GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:1:3:0,3,34 ./ [...]
+1 2255489 rs3831908 CCAGA C 619.14 PASS AC=2;AF=0.020;AN=100;BaseQRankSum=-2.623;DB;DP=386;FS=0.000;HaplotypeScore=3.5051;InbreedingCoeff=0.4499;MLEAC=2;MLEAF=0.020;MQ=58.60;MQ0=0;MQRankSum=0.402;QD=56.29;ReadPosRankSum=-0.970;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MORN1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378531 GT:AD:DP:GQ:PL 0/0:8,0:8:24:0,24,555 0/0:8,0:8:24:0,24,555 0/0:3,0:3:9:0,9,81 0/0:3,0:3:9:0,9,208 [...]
+1 2255633 rs3737639 G A 1457.31 PASS AC=11;AF=0.110;AN=100;BaseQRankSum=-4.330;DB;DP=338;Dels=0.00;FS=7.069;HaplotypeScore=0.1797;InbreedingCoeff=0.1803;MLEAC=11;MLEAF=0.110;MQ=58.86;MQ0=0;MQRankSum=1.090;QD=16.01;ReadPosRankSum=-1.385;SNPEFF_EFFECT=INTRON;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=MORN1;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000378531;VQSLOD=6.36;culprit=MQ GT:AD:DP:GQ:PL 0/0:4,0:4:12:0,12,151 0/0:12,0:11:33:0,33,393 0/0: [...]
diff --git a/testdata/picard/vcf/mini.vcf.idx b/testdata/picard/vcf/mini.vcf.idx
new file mode 100644
index 0000000..14f1ba5
Binary files /dev/null and b/testdata/picard/vcf/mini.vcf.idx differ
diff --git a/testdata/picard/vcf/vcfFormatTest.bad_dict.vcf b/testdata/picard/vcf/vcfFormatTest.bad_dict.vcf
new file mode 100644
index 0000000..bd1e303
--- /dev/null
+++ b/testdata/picard/vcf/vcfFormatTest.bad_dict.vcf
@@ -0,0 +1,444 @@
+##fileformat=VCFv4.2
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
+1 17032814 rs2773183 T C 2828.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
+1 25154033 rs55822956 GT G 743.25 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.32;DB;DP=214;FS=2.27;HaplotypeScore=77.33;MLEAC=3;MLEAF=0.500;MQ=55.48;MQ0=0;MQRankSum=0.114;QD=3.47;RPA=19,18;RU=T;ReadPosRankSum=0.884;SB=-3.070e+02;STR;VQSLOD=2.10;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:60,12:82:67:292,0,67:18 0/1:55,7:69:42:245,0,42:18 0/1:37,21:60:18:254,0,18:18
+1 36900350 rs72008966 C CA 137.53 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.837e+00;DB;DP=139;FS=0.00;HaplotypeScore=32.79;MLEAC=3;MLEAF=0.500;MQ=49.20;MQ0=3;MQRankSum=0.772;QD=0.990;RPA=22,23;RU=A;ReadPosRankSum=-3.220e+00;SB=-4.273e+01;STR;VQSLOD=1.87;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,7:44:41:70,0,41:9 0/1:48,0:47:20:20,0,41:9 0/1:32,12:42:9:95,0,9:9
+1 47818917 rs12749507 A G 1285.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.707e+00;DB;DP=252;Dels=0.00;FS=2.14;HaplotypeScore=0.666;MLEAC=1;MLEAF=0.167;MQ=59.83;MQ0=0;MQRankSum=-4.670e-01;QD=13.39;ReadPosRankSum=0.535;SB=-6.730e+02;VQSLOD=9.27;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,3171:127 0|1:53,42:96:99:1320,0,1615:127 0|0:75,0:75:99:0,217,2762:127
+1 59635894 rs331648 T A 839.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.038e+00;DB;DP=211;Dels=0.00;FS=1.43;HaplotypeScore=1.55;MLEAC=1;MLEAF=0.167;MQ=58.68;MQ0=0;MQRankSum=-4.220e-01;QD=11.82;ReadPosRankSum=-1.800e-01;SB=-5.520e+02;VQSLOD=7.95;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,199,2578:127 0|0:62,0:62:99:0,169,2205:127 0|1:33,38:71:99:874,0,897:127
+1 69502962 rs12724640 T C 1868.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-1.732e+00;DB;DP=110;Dels=0.00;FS=4.72;HaplotypeScore=1.93;MLEAC=6;MLEAF=1.00;MQ=29.46;MQ0=22;MQRankSum=1.65;QD=16.98;ReadPosRankSum=-5.640e-01;SB=-8.110e+02;VQSLOD=0.210;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:5,23:29:63:693,63,0:50 1|1:5,38:43:66:675,66,0:50 1|1:9,29:38:51:538,51,0:50
+1 80481528 rs61774278 G C 1775.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.614e+00;DB;DP=168;Dels=0.00;FS=8.29;HaplotypeScore=2.05;MLEAC=3;MLEAF=0.500;MQ=54.28;MQ0=0;MQRankSum=-5.200e-02;QD=16.75;ReadPosRankSum=1.54;SB=-1.133e+03;VQSLOD=4.77;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,26:61:99:767,0,778:80 0|0:62,0:62:84:0,84,1046:80 1|1:0,45:45:84:1053,84,0:80
+1 90146546 rs7512447 C T 8721.01 PASS AC=6;AF=1.00;AN=6;DB;DP=241;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=59.40;MQ0=0;QD=36.19;SB=-4.084e+03;VQSLOD=11.32;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2599,196,0:127 1|1:0,86:86:99:3042,235,0:127 1|1:0,84:84:99:3080,238,0:127
+1 100763317 rs6681810 G C 5583.01 PASS AC=6;AF=1.00;AN=6;DB;DP=196;Dels=0.00;FS=0.00;HaplotypeScore=3.72;MLEAC=6;MLEAF=1.00;MQ=58.52;MQ0=0;QD=28.48;SB=-2.737e+03;VQSLOD=7.92;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,76:77:99:2211,192,0:127 1|1:0,56:56:99:1593,141,0:127 1|1:0,62:62:99:1779,156,0:127
+1 110091282 rs1279195 C T 952.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.65;DB;DP=101;Dels=0.00;FS=19.67;HaplotypeScore=1.92;MLEAC=2;MLEAF=0.333;MQ=56.72;MQ0=0;MQRankSum=-3.450e-01;QD=12.37;ReadPosRankSum=0.567;SB=-5.350e+02;VQSLOD=4.17;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,29:46:99:726,0,219:42 1|0:13,12:31:99:265,0,298:42 0|0:18,0:24:42:0,42,522:42
+1 120811174 . C CA 74.77 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.393e+00;DP=148;FS=0.00;HaplotypeScore=20.35;MLEAC=5;MLEAF=0.833;MQ=15.79;MQ0=88;MQRankSum=-3.480e-01;QD=0.510;RPA=24,25;RU=A;ReadPosRankSum=-1.044e+00;SB=-1.531e+01;STR;VQSLOD=5.09;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:47,5:9:11:53,11,0:3 1|0:51,0:15:5:37,0,5:3 1|1:43,0:8:6:32,6,0:3
+1 146610795 rs58742099 C T 2831.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.30;DB;DP=261;Dels=0.00;FS=7.03;HaplotypeScore=13.91;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=0.753;QD=16.27;ReadPosRankSum=-1.405e+00;SB=-1.481e+03;VQSLOD=3.42;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:39,43:82:99:1329,0,1080:127 1|0:40,52:92:99:1541,0,1241:127 0|0:87,0:87:99:0,238,3098:127
+1 156248265 rs12038203 C T 643.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.110e-01;DB;DP=145;Dels=0.00;FS=4.57;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=59.08;MQ0=0;MQRankSum=0.862;QD=12.86;ReadPosRankSum=0.177;SB=-3.450e+02;VQSLOD=7.50;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:47,0:47:99:0,123,1604:110 0|0:48,0:48:99:0,111,1433:110 0|1:25,25:50:99:678,0,694:110
+1 165431906 rs7528908 G T 2381.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.01;DB;DP=259;Dels=0.00;FS=4.73;HaplotypeScore=0.986;MLEAC=2;MLEAF=0.333;MQ=59.75;MQ0=0;MQRankSum=0.916;QD=14.34;ReadPosRankSum=-9.070e-01;SB=-9.050e+02;VQSLOD=8.13;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:48,40:88:99:1142,0,1428:127 0|0:93,0:93:99:0,259,3166:127 1|0:38,40:78:99:1278,0,1075:127
+1 175207612 rs11484568 C T 1920.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.64;DB;DP=216;Dels=0.00;FS=0.537;HaplotypeScore=2.25;MLEAC=2;MLEAF=0.333;MQ=58.99;MQ0=0;MQRankSum=0.383;QD=14.12;ReadPosRankSum=0.169;SB=-1.064e+03;VQSLOD=8.59;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:34,40:74:99:1152,0,995:127 0|0:80,0:80:99:0,208,2602:127 1|0:34,28:62:99:807,0,998:127
+1 186656152 rs4422959 G A 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=7.23;DB;DP=270;Dels=0.00;FS=7.29;HaplotypeScore=1.17;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=0.399;QD=17.21;ReadPosRankSum=-8.690e-01;SB=-6.320e+02;VQSLOD=7.67;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:99,0:99:99:0,283,3341:127 0|0:93,0:93:99:0,256,3022:127 0|1:33,45:78:99:1377,0,917:127
+1 195392852 rs2119441 T G 5369.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.284e+00;DB;DP=241;Dels=0.00;FS=3.31;HaplotypeScore=1.87;MLEAC=4;MLEAF=0.667;MQ=58.35;MQ0=0;MQRankSum=-6.430e-01;QD=22.28;ReadPosRankSum=0.178;SB=-2.332e+03;VQSLOD=7.85;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:37,42:79:99:1233,0,1145:127 1|1:0,84:84:99:2741,211,0:127 0|1:31,47:78:99:1395,0,804:127
+1 204945934 rs6657372 A G 1311.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.582e+00;DB;DP=126;Dels=0.00;FS=0.00;HaplotypeScore=2.71;MLEAC=3;MLEAF=0.500;MQ=58.78;MQ0=0;MQRankSum=0.480;QD=15.43;ReadPosRankSum=1.28;SB=-6.370e+02;VQSLOD=7.84;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:22,28:50:99:629,0,675:68 0|0:40,0:41:84:0,84,1057:68 1|1:0,35:35:69:727,69,0:68
+1 216407409 rs3767692 A G 8820.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-8.030e-01;DB;DP=295;Dels=0.00;FS=1.35;HaplotypeScore=2.58;MLEAC=5;MLEAF=0.833;MQ=59.28;MQ0=0;MQRankSum=-3.750e-01;QD=29.90;ReadPosRankSum=-3.630e-01;SB=-4.445e+03;VQSLOD=7.05;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:1,115:116:99:4251,328,0:127 1|0:39,51:90:99:1430,0,1275:127 1|1:0,89:89:99:3139,241,0:127
+1 226163330 rs10915914 C G 747.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.123e+00;DB;DP=121;Dels=0.00;FS=0.863;HaplotypeScore=0.829;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=-4.780e-01;QD=9.70;ReadPosRankSum=-1.340e-01;SB=-2.780e+02;VQSLOD=8.08;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,1:44:99:0,117,1447:116 0|1:17,15:32:99:289,0,390:116 0|1:26,19:45:99:497,0,677:116
+1 235750933 rs111686144 GA G 679.19 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.04;DB;DP=64;FS=7.39;HaplotypeScore=400.20;MLEAC=4;MLEAF=0.667;MQ=32.98;MQ0=0;MQRankSum=-5.900e-02;QD=10.61;ReadPosRankSum=2.44;SB=-1.575e+02;VQSLOD=-3.140e-01;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:12,0:12:6:110,0,6:6 1|1:9,9:19:31:491,31,0:6 0|1:31,0:32:99:128,0,160:6
+1 243135892 rs7517403 C T 2313.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=7.05;DB;DP=168;Dels=0.00;FS=0.00;HaplotypeScore=0.588;MLEAC=4;MLEAF=0.667;MQ=37.62;MQ0=11;MQRankSum=-5.659e+00;QD=13.77;ReadPosRankSum=-9.770e-01;SB=-9.200e+02;VQSLOD=2.25;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:31,24:55:99:501,0,891:123 1|1:0,58:58:99:1263,123,0:123 0|1:28,27:55:99:591,0,714:123
+2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
+2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.70;DB;DP=213;Dels=0.00;FS=7.83;HaplotypeScore=1.19;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-9.700e-02;SB=-1.991e+03;VQSLOD=9.14;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,42:75:99:1400,0,1031:127 0|0:67,0:67:99:0,178,2277:127 1|1:0,71:71:99:2578,199,0:127
+2 18016237 rs12710649 A T 3950.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.700e-02;DB;DP=250;Dels=0.00;FS=2.16;HaplotypeScore=2.08;MLEAC=3;MLEAF=0.500;MQ=59.14;MQ0=0;MQRankSum=0.494;QD=15.80;ReadPosRankSum=0.705;SB=-2.142e+03;VQSLOD=8.14;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:46,59:105:99:1733,0,1505:127 0/1:39,37:76:99:925,0,1164:127 0/1:24,44:68:99:1292,0,628:127
+2 28790711 rs34787802 T G 731.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.421e+00;DB;DP=232;Dels=0.00;FS=2.40;HaplotypeScore=1.52;MLEAC=1;MLEAF=0.167;MQ=57.98;MQ0=0;MQRankSum=0.447;QD=10.30;ReadPosRankSum=-1.833e+00;SB=-4.550e+02;VQSLOD=6.89;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,223,2877:127 0|1:36,35:71:99:766,0,947:127 0|0:79,0:80:99:0,205,2640:127
+2 36994439 rs11124542 A C 1302.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.406e+00;DB;DP=191;Dels=0.00;FS=3.34;HaplotypeScore=2.18;MLEAC=3;MLEAF=0.500;MQ=58.93;MQ0=0;MQRankSum=-7.250e-01;QD=6.82;ReadPosRankSum=0.302;SB=-1.006e+03;VQSLOD=7.95;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,28:60:99:710,0,1044:127 0/1:34,25:59:99:309,0,772:127 0/1:45,27:72:99:322,0,1096:127
+2 45429089 rs13418430 C A 2341.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.861;DB;DP=283;Dels=0.00;FS=2.85;HaplotypeScore=1.33;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=-9.390e-01;QD=12.52;ReadPosRankSum=-1.869e+00;SB=-1.156e+03;VQSLOD=7.15;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:60,49:109:99:1406,0,2061:127 1|0:41,37:78:99:974,0,1238:127 0|0:96,0:96:99:0,256,3312:127
+2 54408283 rs55993481 T G 2128.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.96;DB;DP=222;Dels=0.00;FS=1.74;HaplotypeScore=3.96;MLEAC=2;MLEAF=0.333;MQ=59.69;MQ0=0;MQRankSum=0.670;QD=14.28;ReadPosRankSum=1.31;SB=-1.076e+03;VQSLOD=6.51;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:35,46:81:99:1392,0,921:127 1|0:35,33:68:99:775,0,878:127 0|0:73,0:73:99:0,175,2164:127
+2 64848970 rs35473866 T C 655.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.263;DB;DP=218;Dels=0.00;FS=8.01;HaplotypeScore=2.58;MLEAC=1;MLEAF=0.167;MQ=58.36;MQ0=0;MQRankSum=-1.680e-01;QD=8.29;ReadPosRankSum=-3.070e-01;SB=-3.420e+02;VQSLOD=5.92;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,208,2627:127 0|0:61,0:61:99:0,135,1725:127 0|1:35,42:79:99:690,0,1042:127
+2 75490647 rs112304545 T TGG 1000.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.322;DB;DP=188;FS=0.785;HaplotypeScore=58.72;MLEAC=4;MLEAF=0.667;MQ=57.19;MQ0=0;MQRankSum=-2.290e-01;QD=5.32;RPA=10,12;RU=G;ReadPosRankSum=-2.534e+00;SB=-4.650e+02;STR;VQSLOD=2.69;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:33,35:76:57:976,57,0:56 1|0:39,3:49:38:38,0,730:56 1|0:50,4:63:37:37,0,900:56
+2 85513238 rs62162679 C T 742.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.16;DB;DP=137;Dels=0.00;FS=4.47;HaplotypeScore=1.39;MLEAC=2;MLEAF=0.333;MQ=57.50;MQ0=0;MQRankSum=0.479;QD=7.57;ReadPosRankSum=-2.720e-01;SB=-5.520e+02;VQSLOD=7.13;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:39,0:39:99:0,105,1267:104 0|1:23,23:47:99:430,0,551:104 0|1:31,20:51:99:351,0,633:104
+2 96514373 rs10186946 C T 206.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=4.49;DB;DP=175;Dels=0.00;FS=2.81;HaplotypeScore=2.42;MLEAC=2;MLEAF=0.333;MQ=39.07;MQ0=7;MQRankSum=-7.529e+00;QD=1.61;ReadPosRankSum=0.813;SB=-2.501e+01;VQSLOD=-8.655e-01;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:35,23:58:62:62,0,484:61 1|0:22,46:70:99:183,0,387:61 0|0:46,0:47:99:0,99,1162:61
+2 107234623 rs35291621 GTA G 7569 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.65;DB;DP=242;FS=7.84;HaplotypeScore=19.31;MLEAC=4;MLEAF=0.667;MQ=60.04;MQ0=1;MQRankSum=-1.570e-01;QD=31.28;ReadPosRankSum=1.66;SB=-3.633e+03;VQSLOD=4.30;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:46,30:76:99:1290,0,2120:127 0|1:35,66:102:99:2998,0,1435:127 1|1:0,63:63:99:3281,190,0:127
+2 117966808 rs333847 C T 9037.01 PASS AC=6;AF=1.00;AN=6;DB;DP=269;Dels=0.00;FS=0.00;HaplotypeScore=3.70;MLEAC=6;MLEAF=1.00;MQ=58.21;MQ0=0;QD=33.59;SB=-4.673e+03;VQSLOD=7.05;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2652,205,0:127 1|1:0,101:101:99:3158,247,0:127 1|1:0,89:90:99:3227,250,0:127
+2 127445050 rs113647072 A G 1773.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.856e+00;DB;DP=154;Dels=0.00;FS=4.20;HaplotypeScore=2.27;MLEAC=4;MLEAF=0.667;MQ=59.16;MQ0=0;MQRankSum=0.759;QD=11.51;ReadPosRankSum=1.29;SB=-1.402e+03;VQSLOD=7.92;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:26,28:54:99:652,0,472:78 0|1:26,22:49:99:350,0,462:78 1|1:0,50:51:78:813,78,0:78
+2 133338909 rs72548244 CT C 2103.21 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.444;DB;DP=212;FS=5.22;HaplotypeScore=27.63;MLEAC=5;MLEAF=0.833;MQ=59.64;MQ0=0;MQRankSum=2.43;QD=9.92;RPA=15,14;RU=T;ReadPosRankSum=2.78;SB=-1.050e+03;STR;VQSLOD=2.66;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:17,39:59:61:837,61,0:60 1|0:47,22:72:99:241,0,444:60 1|1:20,58:81:74:1076,74,0:60
+2 144289763 rs7607879 C T 3308.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.39;DB;DP=225;Dels=0.00;FS=9.72;HaplotypeScore=1.50;MLEAC=3;MLEAF=0.500;MQ=59.53;MQ0=0;MQRankSum=0.283;QD=14.70;ReadPosRankSum=1.39;SB=-1.760e+03;VQSLOD=8.24;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:41,39:81:99:1190,0,1312:127 0/1:28,36:64:99:1057,0,834:127 0/1:44,36:80:99:1061,0,1275:127
+2 155726628 . T G 1351.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=0.207;DP=193;Dels=0.00;FS=9.25;HaplotypeScore=0.522;MLEAC=6;MLEAF=1.00;MQ=16.17;MQ0=87;MQRankSum=2.40;QD=7.00;ReadPosRankSum=1.07;SB=-4.420e+02;VQSLOD=-2.787e+00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,56:59:60:591,60,0:27 1|1:8,49:57:27:245,27,0:27 1|1:12,65:77:57:553,57,0:27
+2 167166899 . T A 1064.78 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=0.023;DP=278;Dels=0.00;FS=9.89;HaplotypeScore=0.277;MLEAC=6;MLEAF=1.00;MQ=10.47;MQ0=239;MQRankSum=1.64;QD=3.83;ReadPosRankSum=0.347;SB=-1.083e-02;VQSLOD=-6.945e+00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:174,12:186:36:401,36,0:4 1|1:37,14:52:39:431,39,0:4 1|0:31,9:40:3:271,0,3:4
+2 177175707 rs7355385 A G 2590.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.660e-01;DB;DP=206;Dels=0.00;FS=14.87;HaplotypeScore=0.311;MLEAC=3;MLEAF=0.500;MQ=59.12;MQ0=0;MQRankSum=-9.370e-01;QD=20.40;ReadPosRankSum=-2.870e-01;SB=-8.970e+02;VQSLOD=6.82;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:856,0,1069:127 1|1:0,62:62:99:1779,150,0:127 0|0:78,1:79:99:0,193,2411:127
+2 187694833 rs10191094 T C 1006.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.181e+00;DB;DP=236;Dels=0.00;FS=9.08;HaplotypeScore=2.27;MLEAC=1;MLEAF=0.167;MQ=59.73;MQ0=0;MQRankSum=-2.180e-01;QD=13.07;ReadPosRankSum=-8.770e-01;SB=-5.830e+02;VQSLOD=7.60;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3021:127 0|0:77,0:77:99:0,217,2790:127 0|1:33,44:77:99:1041,0,988:127
+2 198567638 rs12619333 C G 2201.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.800e-02;DB;DP=240;Dels=0.00;FS=4.76;HaplotypeScore=1.37;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=1;MQRankSum=0.131;QD=13.42;ReadPosRankSum=0.123;SB=-1.051e+03;VQSLOD=8.13;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:38,45:84:99:1298,0,1249:127 1|0:45,35:80:99:942,0,1493:127 0|0:76,0:76:99:0,196,2542:127
+2 209758643 rs12992166 C T 1534.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.18;DB;DP=163;Dels=0.00;FS=8.81;HaplotypeScore=2.36;MLEAC=2;MLEAF=0.333;MQ=58.93;MQ0=0;MQRankSum=1.99;QD=12.08;ReadPosRankSum=1.08;SB=-4.720e+02;VQSLOD=6.82;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,22:59:99:610,0,886:93 1|0:32,36:68:99:963,0,797:93 0|0:36,0:36:93:0,93,1058:93
+2 218911764 . TA T 229.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.591;DP=218;FS=1.76;HaplotypeScore=32.57;MLEAC=3;MLEAF=0.500;MQ=57.41;MQ0=0;MQRankSum=1.79;QD=1.05;RPA=19,18;RU=A;ReadPosRankSum=0.676;SB=-1.060e+02;STR;VQSLOD=2.31;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:56,5:65:99:101,0,313:70 0/1:59,18:82:99:105,0,395:70 0/1:64,4:70:71:71,0,263:70
+2 228532558 rs6436725 G A 3484.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=7.16;DB;DP=263;Dels=0.00;FS=1.55;HaplotypeScore=4.97;MLEAC=3;MLEAF=0.500;MQ=58.60;MQ0=0;MQRankSum=1.14;QD=21.91;ReadPosRankSum=-4.160e-01;SB=-1.472e+03;VQSLOD=5.44;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:42,47:89:99:1549,0,932:127 0|0:104,0:104:99:0,247,2939:127 1|1:0,69:70:99:1935,156,0:127
+2 237156689 rs13390270 G A 852.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.150e+00;DB;DP=205;Dels=0.00;FS=0.710;HaplotypeScore=1.73;MLEAC=1;MLEAF=0.167;MQ=59.06;MQ0=0;MQRankSum=-1.930e-01;QD=11.67;ReadPosRankSum=1.26;SB=-4.790e+02;VQSLOD=8.50;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,202,2606:108 0|1:39,34:73:99:887,0,1027:108 0|0:59,0:59:99:0,108,1384:108
+3 1609737 rs2648459 A G 6492.01 PASS AC=6;AF=1.00;AN=6;DB;DP=187;Dels=0.00;FS=0.00;HaplotypeScore=1.18;MLEAC=6;MLEAF=1.00;MQ=59.90;MQ0=0;QD=34.72;SB=-3.251e+03;VQSLOD=11.50;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1943,150,0:127 1|1:0,62:62:99:2206,172,0:127 1|1:0,72:72:99:2343,181,0:127
+3 8399330 rs6770171 G A 6816.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.69;DB;DP=253;Dels=0.00;FS=0.637;HaplotypeScore=1.28;MLEAC=5;MLEAF=0.833;MQ=58.42;MQ0=0;MQRankSum=0.607;QD=26.94;ReadPosRankSum=-5.030e-01;SB=-3.369e+03;VQSLOD=8.01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3784,292,0:127 1|1:0,72:72:99:2164,169,0:127 1|0:42,33:75:99:868,0,1146:127
+3 17501103 . T G 45.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-6.477e+00;DP=156;Dels=0.00;FS=71.75;HaplotypeScore=1.53;MLEAC=2;MLEAF=0.333;MQ=58.02;MQ0=0;MQRankSum=-1.560e-01;QD=0.430;ReadPosRankSum=-3.974e+00;SB=-1.474e-02;VQSLOD=-1.415e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,8:51:99:0,114,1252:33 0|1:22,24:46:34:34,0,492:33 0|1:24,34:59:50:50,0,492:33
+3 26960556 rs4422260 T C 878.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-2.140e+00;DB;DP=220;Dels=0.00;FS=1.11;HaplotypeScore=1.72;MLEAC=2;MLEAF=0.333;MQ=41.87;MQ0=3;MQRankSum=-6.679e+00;QD=5.97;ReadPosRankSum=-3.100e-02;SB=-4.600e+02;VQSLOD=0.717;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,208,2660:127 0|1:32,48:80:99:759,0,915:127 0|1:37,30:67:99:158,0,1092:127
+3 37334187 rs112182713 G GGTT 1235.20 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.420;DB;DP=233;FS=10.65;HaplotypeScore=68.31;MLEAC=1;MLEAF=0.167;MQ=56.19;MQ0=0;MQRankSum=-1.868e+00;QD=17.65;RPA=1,2;RU=GTT;ReadPosRankSum=1.38;SB=-4.490e+02;STR;VQSLOD=3.14;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:83,0:83:99:0,244,4702:127 0|0:79,0:77:99:0,220,4149:127 0|1:40,23:68:99:1279,0,1696:127
+3 48757773 rs61137521 A G 3103.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-7.940e-01;DB;DP=172;Dels=0.00;FS=0.00;HaplotypeScore=1.90;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=-6.930e-01;QD=18.04;ReadPosRankSum=-1.667e+00;SB=-1.874e+03;VQSLOD=7.92;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,50:51:99:1723,141,0:127 1|0:31,34:65:99:745,0,814:127 1|0:24,32:56:99:677,0,603:127
+3 60283791 rs10154846 T C 669.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.270e+00;DB;DP=204;Dels=0.00;FS=1.59;HaplotypeScore=1.66;MLEAC=1;MLEAF=0.167;MQ=59.39;MQ0=0;MQRankSum=0.370;QD=10.14;ReadPosRankSum=1.64;SB=-2.690e+02;VQSLOD=8.95;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:63,0:63:99:0,190,2440:127 0|1:34,32:66:99:704,0,1020:127 0|0:74,0:75:99:0,190,2372:127
+3 68765638 rs1504297 C G 4623.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-5.561e+00;DB;DP=225;Dels=0.00;FS=3.18;HaplotypeScore=0.843;MLEAC=4;MLEAF=0.667;MQ=59.80;MQ0=0;MQRankSum=-6.190e-01;QD=20.55;ReadPosRankSum=-1.001e+00;SB=-2.371e+03;VQSLOD=8.74;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:40,39:79:99:1220,0,1330:127 1|1:0,75:75:99:2518,205,0:127 0|1:37,34:71:99:885,0,1185:127
+3 76722766 rs264537 C G 845.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=3.67;DB;DP=202;Dels=0.00;FS=0.00;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=59.79;MQ0=0;MQRankSum=-7.950e-01;QD=13.21;ReadPosRankSum=1.05;SB=-2.910e+02;VQSLOD=8.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,208,2570:127 0|0:68,0:68:99:0,193,2332:127 0|1:34,30:64:99:880,0,995:127
+3 86234718 rs2324883 T C 7655.01 PASS AC=6;AF=1.00;AN=6;DB;DP=234;Dels=0.00;FS=0.00;HaplotypeScore=0.649;MLEAC=6;MLEAF=1.00;MQ=59.51;MQ0=0;QD=32.71;SB=-4.142e+03;VQSLOD=11.21;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,80:80:99:2857,223,0:127 1|1:0,76:77:99:2512,196,0:127 1|1:0,77:77:99:2286,178,0:127
+3 99106655 rs2623376 A G 1093.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.49;DB;DP=191;Dels=0.00;FS=2.28;HaplotypeScore=0.627;MLEAC=2;MLEAF=0.333;MQ=59.76;MQ0=0;MQRankSum=-1.141e+00;QD=9.51;ReadPosRankSum=0.079;SB=-5.610e+02;VQSLOD=8.15;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:653,0,970:127 0|0:76,0:76:99:0,193,2462:127 1|0:44,19:63:99:479,0,1261:127
+3 108612711 rs2399252 T A 3430.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.830e-01;DB;DP=239;Dels=0.00;FS=4.44;HaplotypeScore=0.659;MLEAC=3;MLEAF=0.500;MQ=59.64;MQ0=0;MQRankSum=-2.690e-01;QD=14.35;ReadPosRankSum=-7.010e-01;SB=-1.733e+03;VQSLOD=8.51;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:48,34:82:99:1066,0,1620:127 0/1:45,43:88:99:1370,0,1452:127 0/1:36,32:69:99:994,0,1128:127
+3 118367863 rs71617664 TAGATAGATTA T 12039 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.12;DB;DP=201;FS=9.45;HaplotypeScore=212.50;MLEAC=6;MLEAF=1.00;MQ=55.55;MQ0=1;MQRankSum=1.58;QD=59.90;ReadPosRankSum=0.721;SB=-5.599e+03;VQSLOD=-4.074e-01;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:13,57:71:99:4299,164,0:127 1|1:60,4:64:99:3312,174,0:127 1|1:9,50:64:99:4428,177,0:127
+3 128140891 rs73201490 C T 1315.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.39;DB;DP=142;Dels=0.00;FS=0.667;HaplotypeScore=3.49;MLEAC=2;MLEAF=0.333;MQ=58.69;MQ0=0;MQRankSum=1.73;QD=14.30;ReadPosRankSum=0.758;SB=-6.400e+02;VQSLOD=6.70;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:29,24:53:99:636,0,670:104 0|0:50,0:50:99:0,105,1188:104 1|0:12,27:39:99:718,0,250:104
+3 137840974 rs2622698 C A 6792.01 PASS AC=6;AF=1.00;AN=6;DB;DP=232;Dels=0.00;FS=0.00;HaplotypeScore=2.65;MLEAC=6;MLEAF=1.00;MQ=59.04;MQ0=0;QD=29.28;SB=-3.999e+03;VQSLOD=9.77;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2640,205,0:127 1|1:0,78:78:99:2229,178,0:127 1|1:0,75:75:99:1923,153,0:127
+3 148344553 rs62274102 C A 3191.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.860e+00;DB;DP=232;Dels=0.00;FS=12.06;HaplotypeScore=2.37;MLEAC=3;MLEAF=0.500;MQ=59.32;MQ0=0;MQRankSum=-5.510e-01;QD=19.58;ReadPosRankSum=2.41;SB=-1.757e+03;VQSLOD=6.29;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:46,39:85:99:985,0,1339:127 1|1:0,78:78:99:2251,175,0:127 0|0:69,0:69:99:0,153,2018:127
+3 158557110 rs34445802 G A 2374.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.80;DB;DP=237;Dels=0.00;FS=1.02;HaplotypeScore=1.66;MLEAC=2;MLEAF=0.333;MQ=57.48;MQ0=0;MQRankSum=0.558;QD=14.05;ReadPosRankSum=-1.147e+00;SB=-1.505e+03;VQSLOD=7.13;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:43,56:99:99:1624,0,1344:127 1|0:33,37:70:99:789,0,916:127 0|0:68,0:68:99:0,156,2014:127
+3 168108331 rs35075740 TA T 51.36 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.78;DB;DP=162;FS=3.97;HaplotypeScore=20.38;MLEAC=3;MLEAF=0.500;MQ=55.92;MQ0=0;MQRankSum=3.47;QD=0.320;RPA=18,17;RU=A;ReadPosRankSum=1.96;SB=-7.120e+00;STR;VQSLOD=2.10;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:46,5:53:16:16,0,313:15 0/1:46,12:60:61:61,0,267:15 0/1:40,6:47:22:22,0,255:15
+3 179020937 rs13082816 C T 1116.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.60;DB;DP=82;Dels=0.00;FS=0.00;HaplotypeScore=0.636;MLEAC=4;MLEAF=0.667;MQ=54.57;MQ0=1;MQRankSum=0.374;QD=13.61;ReadPosRankSum=-3.700e-02;SB=-2.010e+02;VQSLOD=6.09;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:13,13:26:99:388,0,178:36 1|1:0,24:24:36:442,36,0:36 0|1:13,19:32:99:328,0,179:36
+3 189981901 . A G 179.25 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=2.26;DP=274;Dels=0.00;FS=73.74;HaplotypeScore=1.83;MLEAC=1;MLEAF=0.167;MQ=54.08;MQ0=6;MQRankSum=-2.651e+00;QD=1.97;ReadPosRankSum=-6.101e+00;SB=-6.400e+01;VQSLOD=-1.820e+01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:64,27:91:99:214,0,679:51 1|0:78,10:88:0:0,21,1685:51 0|0:86,9:95:74:0,74,1891:51
+3 197056886 rs7612900 G A 7880.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.00;HaplotypeScore=0.611;MLEAC=6;MLEAF=1.00;MQ=59.18;MQ0=0;QD=34.41;SB=-3.459e+03;VQSLOD=11.81;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2786,214,0:127 1|1:0,81:81:99:2598,202,0:127 1|1:0,73:73:99:2496,193,0:127
+4 6333669 rs35678078 G T 2186.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.22;DB;DP=198;Dels=0.00;FS=1.75;HaplotypeScore=0.778;MLEAC=3;MLEAF=0.500;MQ=59.27;MQ0=0;MQRankSum=-2.560e-01;QD=11.04;ReadPosRankSum=-4.690e-01;SB=-1.621e+03;VQSLOD=9.41;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:33,34:67:99:875,0,848:127 0/1:27,32:59:99:602,0,534:127 0/1:33,38:72:99:748,0,676:127
+4 12652343 rs13114660 G T 610.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.176e+00;DB;DP=127;Dels=0.00;FS=0.00;HaplotypeScore=1.57;MLEAC=1;MLEAF=0.167;MQ=58.86;MQ0=0;MQRankSum=-4.680e-01;QD=16.06;ReadPosRankSum=1.25;SB=-3.060e+02;VQSLOD=7.84;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,120,1561:102 0|1:15,23:38:99:645,0,407:102 0|0:44,1:46:99:0,103,1539:102
+4 21819269 rs4285068 C G 7252.01 PASS AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.00;HaplotypeScore=0.651;MLEAC=6;MLEAF=1.00;MQ=55.91;MQ0=0;QD=33.57;SB=-3.284e+03;VQSLOD=8.54;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,83:83:99:2859,226,0:127 1|1:0,73:73:99:2413,193,0:127 1|1:0,59:59:99:1980,156,0:127
+4 30898977 rs4386561 G A 2449.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.82;DB;DP=231;Dels=0.00;FS=0.00;HaplotypeScore=0.938;MLEAC=2;MLEAF=0.333;MQ=58.94;MQ0=0;MQRankSum=0.173;QD=15.70;ReadPosRankSum=1.05;SB=-1.131e+03;VQSLOD=8.36;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,46:79:99:1380,0,944:127 0|0:75,0:75:99:0,202,2608:127 1|0:43,34:77:99:1108,0,1335:127
+4 39062189 rs2566127 T C 2641.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.019e+00;DB;DP=201;Dels=0.00;FS=1.10;HaplotypeScore=2.88;MLEAC=3;MLEAF=0.500;MQ=58.96;MQ0=0;MQRankSum=0.932;QD=13.14;ReadPosRankSum=-5.960e-01;SB=-1.401e+03;VQSLOD=7.97;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,29:64:99:880,0,1168:127 0/1:37,32:70:99:796,0,1021:127 0/1:31,36:67:99:1004,0,877:127
+4 48922864 rs7697262 G C 1383.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=100;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=20.20;MQ0=24;QD=13.83;SB=-3.860e+02;VQSLOD=-3.210e-01;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,38:41:57:625,57,0:32 1|1:0,28:28:33:368,33,0:32 1|1:2,29:31:39:428,39,0:32
+4 57135985 rs1715504 G A 1213.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.55;DB;DP=173;Dels=0.00;FS=4.10;HaplotypeScore=1.63;MLEAC=2;MLEAF=0.333;MQ=58.44;MQ0=0;MQRankSum=-1.006e+00;QD=10.28;ReadPosRankSum=-9.330e-01;SB=-4.500e+02;VQSLOD=7.41;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:54,0:55:99:0,135,1546:127 0|1:30,23:54:99:563,0,608:127 0|1:35,28:64:99:689,0,562:127
+4 64522064 rs4860541 A G 5942.01 PASS AC=6;AF=1.00;AN=6;DB;DP=188;Dels=0.00;FS=0.00;HaplotypeScore=0.289;MLEAC=6;MLEAF=1.00;MQ=56.20;MQ0=0;QD=31.61;SB=-3.348e+03;VQSLOD=8.54;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2119,169,0:127 1|1:0,52:53:99:1661,132,0:127 1|1:0,67:67:99:2162,172,0:127
+4 71449060 rs60358213 G A 2269.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.70;DB;DP=227;Dels=0.00;FS=13.05;HaplotypeScore=20.14;MLEAC=2;MLEAF=0.333;MQ=55.35;MQ0=0;MQRankSum=0.477;QD=13.19;ReadPosRankSum=2.30;SB=-8.910e+02;VQSLOD=1.89;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:60,40:100:99:1221,0,1476:127 1|0:37,35:72:99:1087,0,987:127 0|0:53,1:54:99:0,157,2026:127
+4 82427976 rs6841516 G A 561.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.022e+00;DB;DP=166;Dels=0.00;FS=0.00;HaplotypeScore=1.47;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=-1.555e+00;QD=11.00;ReadPosRankSum=0.016;SB=-3.880e+02;VQSLOD=8.10;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:51,0:51:99:0,132,1705:127 0|1:22,29:51:99:596,0,483:127 0|0:64,0:64:99:0,135,1755:127
+4 92648168 rs61329801 A ATTTG 7717 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.947;DB;DP=186;FS=8.29;HaplotypeScore=7.88;MLEAC=4;MLEAF=0.667;MQ=56.58;MQ0=0;MQRankSum=-1.740e-01;QD=41.49;ReadPosRankSum=-4.440e-01;SB=-3.591e+03;VQSLOD=3.52;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:45,35:80:99:2213,0,2213:127 1|1:3,59:62:99:4128,181,0:127 0|1:22,22:44:99:1376,0,1181:127
+4 103859292 rs7676943 C G 7573.01 PASS AC=6;AF=1.00;AN=6;DB;DP=235;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=58.63;MQ0=0;QD=32.23;SB=-3.953e+03;VQSLOD=10.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,95:96:99:3289,256,0:127 1|1:0,73:73:99:2137,166,0:127 1|1:0,66:66:99:2147,166,0:127
+4 114869733 rs11381039 A AT 2798.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.957;DB;DP=267;FS=4.37;HaplotypeScore=26.36;MLEAC=3;MLEAF=0.500;MQ=59.97;MQ0=0;MQRankSum=0.673;QD=10.48;RPA=8,9;RU=T;ReadPosRankSum=-1.351e+00;SB=-1.173e+03;STR;VQSLOD=5.55;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:47,41:89:99:994,0,1219:127 0/1:50,41:92:99:1063,0,1043:127 0/1:50,34:86:99:789,0,1153:127
+4 122900130 rs4833786 C T 2361.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.900e-01;DB;DP=244;Dels=0.00;FS=0.495;HaplotypeScore=0.543;MLEAC=2;MLEAF=0.333;MQ=59.91;MQ0=0;MQRankSum=-6.280e-01;QD=15.23;ReadPosRankSum=1.22;SB=-1.282e+03;VQSLOD=8.81;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:89,0:89:99:0,250,3286:127 0|1:42,44:86:99:1257,0,1325:127 0|1:32,37:69:99:1143,0,941:127
+4 132671861 rs6856716 C G 2622.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=3.14;DB;DP=617;DS;Dels=0.00;FS=5.81;HaplotypeScore=34.41;MLEAC=2;MLEAF=0.333;MQ=24.78;MQ0=42;MQRankSum=3.29;QD=5.89;ReadPosRankSum=-7.360e-01;SB=-1.412e+03;VQSLOD=-7.735e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:125,98:223:99:1761,0,1486:127 0|0:171,0:172:99:0,300,2641:127 1|0:152,70:222:99:900,0,2086:127
+4 141514835 rs55984232 C T 1645.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=7.14;DB;DP=191;Dels=0.00;FS=2.76;HaplotypeScore=1.07;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.726;QD=13.06;ReadPosRankSum=-7.890e-01;SB=-8.550e+02;VQSLOD=8.94;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,28:60:99:913,0,820:127 0|0:65,0:65:99:0,156,1886:127 1|0:34,32:66:99:771,0,750:127
+4 152029268 . CT C 358.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.69;DP=199;FS=13.72;HaplotypeScore=32.57;MLEAC=2;MLEAF=0.333;MQ=55.17;MQ0=0;MQRankSum=-9.150e-01;QD=2.42;RPA=17,16;RU=T;ReadPosRankSum=0.548;SB=-1.419e+02;STR;VQSLOD=0.393;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:50,15:75:99:301,0,225:38 1|0:56,11:72:99:105,0,209:38 0|0:46,2:51:38:0,38,284:38
+4 161180100 rs167176 G C 2497.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.81;DB;DP=191;Dels=0.00;FS=5.37;HaplotypeScore=0.781;MLEAC=3;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=-5.840e-01;QD=13.07;ReadPosRankSum=0.756;SB=-1.206e+03;VQSLOD=8.00;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,36:68:99:1100,0,895:127 0/1:41,35:76:99:987,0,1028:127 0/1:29,17:47:99:449,0,820:127
+4 169085855 rs2251558 A G 1161.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.721;DB;DP=244;Dels=0.00;FS=5.25;HaplotypeScore=0.489;MLEAC=1;MLEAF=0.167;MQ=59.91;MQ0=0;MQRankSum=1.57;QD=13.99;ReadPosRankSum=0.454;SB=-5.590e+02;VQSLOD=7.42;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,226,2915:127 0|1:43,40:83:99:1196,0,1294:127 0|0:84,0:84:99:0,232,2950:127
+4 177855678 rs1545090 A G 7065.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.00;HaplotypeScore=1.17;MLEAC=6;MLEAF=1.00;MQ=59.50;MQ0=0;QD=30.85;SB=-3.799e+03;VQSLOD=11.01;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,84:84:99:2701,235,0:127 1|1:0,79:80:99:2401,211,0:127 1|1:0,65:65:99:1963,165,0:127
+4 184811263 rs2871379 A G 6376.01 PASS AC=6;AF=1.00;AN=6;DB;DP=211;Dels=0.00;FS=0.00;HaplotypeScore=0.508;MLEAC=6;MLEAF=1.00;MQ=58.38;MQ0=0;QD=30.22;SB=-3.472e+03;VQSLOD=10.49;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2539,199,0:127 1|1:0,67:67:99:2072,165,0:127 1|1:0,66:66:99:1765,135,0:127
+4 190538070 rs62323772 G A 106.69 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.099;DB;DP=19;Dels=0.00;FS=0.00;HaplotypeScore=4.36;MLEAC=3;MLEAF=0.500;MQ=33.71;MQ0=0;MQRankSum=0.591;QD=5.93;ReadPosRankSum=-3.940e-01;SB=-7.601e+01;VQSLOD=-1.392e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:4,9:13:69:69,0,92:3 0|0:1,0:1:3:0,3,33:3 1|1:0,4:5:6:77,6,0:3
+5 3276081 rs4866540 G A 3653.01 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=5.00;DB;DP=176;Dels=0.00;FS=2.78;HaplotypeScore=19.00;MLEAC=4;MLEAF=0.667;MQ=57.74;MQ0=0;MQRankSum=-5.690e-01;QD=20.76;ReadPosRankSum=1.31;SB=-6.610e+02;VQSLOD=3.18;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,71:72:99:2337,175,0:127 1|0:26,25:51:99:719,0,601:127 1|0:26,27:53:99:597,0,662:127
+5 10958957 rs852590 T C 8430.01 PASS AC=6;AF=1.00;AN=6;DB;DP=243;Dels=0.00;FS=0.00;HaplotypeScore=1.83;MLEAC=6;MLEAF=1.00;MQ=59.31;MQ0=0;QD=34.69;SB=-4.118e+03;VQSLOD=10.87;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3594,277,0:127 1|1:1,73:74:99:2318,181,0:127 1|1:0,72:72:99:2518,196,0:127
+5 20435939 rs12697584 A C 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-5.396e+00;DB;DP=246;Dels=0.00;FS=4.68;HaplotypeScore=0.874;MLEAC=2;MLEAF=0.333;MQ=59.74;MQ0=0;MQRankSum=-8.500e-01;QD=14.20;ReadPosRankSum=0.391;SB=-1.305e+03;VQSLOD=8.13;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:85,0:85:99:0,241,3183:127 0|1:41,37:78:99:1062,0,1304:127 0|1:39,44:83:99:1263,0,1222:127
+5 29069162 rs658439 G A 499.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.98;DB;DP=199;Dels=0.00;FS=11.20;HaplotypeScore=1.60;MLEAC=1;MLEAF=0.167;MQ=52.70;MQ0=0;MQRankSum=-6.080e-01;QD=9.42;ReadPosRankSum=-1.103e+00;SB=-2.310e+02;VQSLOD=4.02;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:86,0:86:99:0,211,2509:110 0|0:60,0:60:99:0,111,1240:110 0|1:30,23:53:99:534,0,523:110
+5 36740339 rs36676 T G 6995.01 PASS AC=6;AF=1.00;AN=6;DB;DP=230;Dels=0.00;FS=0.00;HaplotypeScore=2.08;MLEAC=6;MLEAF=1.00;MQ=59.46;MQ0=0;QD=30.41;SB=-3.034e+03;VQSLOD=10.92;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2261,195,0:127 1|1:0,83:83:99:2579,217,0:127 1|1:0,71:72:99:2155,181,0:127
+5 49438828 rs137880658 G A 424.24 VQSRTrancheSNP99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-4.376e+00;DB;DP=748;DS;Dels=0.00;FS=7.18;HaplotypeScore=20.66;MLEAC=1;MLEAF=0.167;MQ=19.63;MQ0=158;MQRankSum=3.82;QD=1.70;ReadPosRankSum=1.19;SB=-2.220e+02;VQSLOD=-9.822e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:249,0:249:99:0,555,4848:127 0|1:204,46:250:99:459,0,2894:127 0|0:249,0:249:99:0,480,4326:127
+5 58243302 rs457566 A C 6237.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.663e+00;DB;DP=233;Dels=0.00;FS=3.43;HaplotypeScore=0.886;MLEAC=5;MLEAF=0.833;MQ=59.70;MQ0=0;MQRankSum=-2.320e-01;QD=26.77;ReadPosRankSum=0.957;SB=-2.566e+03;VQSLOD=9.35;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,87:87:99:2923,229,0:127 1|0:36,50:86:99:1429,0,1006:127 1|1:0,60:60:99:1885,147,0:127
+5 70856663 rs157045 T C 2040.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.809e+00;DB;DP=234;Dels=0.00;FS=1.82;HaplotypeScore=1.05;MLEAC=2;MLEAF=0.333;MQ=58.65;MQ0=0;MQRankSum=0.989;QD=13.16;ReadPosRankSum=0.719;SB=-8.820e+02;VQSLOD=7.35;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,41:85:99:1087,0,1448:127 1|0:28,42:70:99:992,0,789:127 0|0:79,0:79:99:0,181,2342:127
+5 80900719 rs2917540 G T 4938.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.26;DB;DP=240;Dels=0.00;FS=0.489;HaplotypeScore=0.596;MLEAC=4;MLEAF=0.667;MQ=59.63;MQ0=0;MQRankSum=-2.115e+00;QD=20.58;ReadPosRankSum=0.288;SB=-2.548e+03;VQSLOD=8.44;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:52,40:92:99:1207,0,1768:127 0|1:37,33:70:99:960,0,1205:127 1|1:0,78:78:99:2771,211,0:127
+5 93119893 rs6879620 G A 4262.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.93;DB;DP=239;Dels=0.00;FS=1.05;HaplotypeScore=2.16;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=0.891;QD=17.83;ReadPosRankSum=-2.670e+00;SB=-2.596e+03;VQSLOD=7.07;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:49,42:91:99:1098,0,1410:127 0|1:36,38:74:99:890,0,1008:127 1|1:0,74:74:99:2274,178,0:127
+5 102962771 rs6866105 A G 5087.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.665e+00;DB;DP=200;Dels=0.00;FS=8.08;HaplotypeScore=2.28;MLEAC=5;MLEAF=0.833;MQ=58.71;MQ0=0;MQRankSum=-5.030e-01;QD=25.44;ReadPosRankSum=-4.820e-01;SB=-2.172e+03;VQSLOD=7.22;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2373,184,0:127 1|1:0,59:59:99:1776,141,0:127 1|0:31,35:66:99:938,0,803:127
+5 112750674 rs9716322 A C 598.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.930e-01;DB;DP=199;Dels=0.00;FS=2.95;HaplotypeScore=0.333;MLEAC=1;MLEAF=0.167;MQ=45.61;MQ0=2;MQRankSum=-2.398e+00;QD=12.21;ReadPosRankSum=1.16;SB=-8.101e+01;VQSLOD=2.77;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,196,2534:127 0|1:23,26:49:99:633,0,479:127 0|0:68,1:69:99:0,174,2191:127
+5 121302662 . G T 143.72 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.41;DP=150;Dels=0.020;FS=161.48;HaplotypeScore=2.86;MLEAC=3;MLEAF=0.500;MQ=35.76;MQ0=1;MQRankSum=0.422;QD=0.960;ReadPosRankSum=-5.675e+00;SB=-1.466e+00;VQSLOD=-7.724e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:32,21:53:99:120,0,251:5 0/1:35,12:47:57:57,0,271:5 0/1:35,12:47:4:4,0,259:5
+5 132377304 rs72801439 A T 858.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.113e+00;DB;DP=219;Dels=0.00;FS=10.63;HaplotypeScore=0.664;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-8.810e-01;QD=11.29;ReadPosRankSum=0.435;SB=-3.050e+02;VQSLOD=7.68;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,163,2149:127 0|1:43,33:76:99:893,0,1280:127 0|0:76,0:76:99:0,199,2553:127
+5 144321895 rs35068704 A T 1535.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.05;DB;DP=203;Dels=0.00;FS=13.29;HaplotypeScore=0.507;MLEAC=2;MLEAF=0.333;MQ=57.36;MQ0=0;MQRankSum=2.19;QD=11.37;ReadPosRankSum=-1.361e+00;SB=-7.640e+02;VQSLOD=5.72;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,25:59:99:595,0,976:127 0|0:68,0:68:99:0,190,2435:127 1|0:39,37:76:99:979,0,1274:127
+5 154441640 rs467330 A C 1133.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.127e+00;DB;DP=235;Dels=0.00;FS=2.10;HaplotypeScore=1.19;MLEAC=1;MLEAF=0.167;MQ=59.65;MQ0=0;MQRankSum=0.766;QD=12.59;ReadPosRankSum=-5.350e-01;SB=-6.500e+02;VQSLOD=9.83;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2172:127 0|1:45,45:90:99:1168,0,1368:127 0|0:82,1:84:99:0,226,2825:127
+5 164600452 rs7711548 C A 588.32 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-3.291e+00;DB;DP=192;Dels=0.020;FS=2.32;HaplotypeScore=32.67;MLEAC=6;MLEAF=1.00;MQ=57.55;MQ0=0;MQRankSum=1.54;QD=3.06;ReadPosRankSum=-1.533e+00;SB=-2.085e+03;VQSLOD=-1.433e+00;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:15,52:69:18:155,18,0:15 1|1:11,55:66:36:296,36,0:15 1|1:18,36:54:15:175,15,0:15
+5 174249229 rs11739079 C G 1613.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.540e+00;DB;DP=190;Dels=0.00;FS=6.48;HaplotypeScore=2.04;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-8.980e-01;QD=11.86;ReadPosRankSum=0.601;SB=-8.320e+02;VQSLOD=7.78;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,43:75:99:1069,0,928:123 0|0:54,0:54:99:0,123,1554:123 1|0:33,27:61:99:583,0,883:123
+6 1620147 rs2569882 T C 252.30 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.620e-01;DB;DP=38;Dels=0.00;FS=8.02;HaplotypeScore=0.222;MLEAC=5;MLEAF=0.833;MQ=57.65;MQ0=0;MQRankSum=-9.180e-01;QD=9.34;ReadPosRankSum=0.584;SB=-4.005e+01;VQSLOD=4.33;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:0,17:17:21:254,21,0:4 1|0:3,8:11:2:0,3,40:4 1|1:0,10:10:3:39,3,0:4
+6 9408051 rs11751621 C G 5140.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.350e+00;DB;DP=241;Dels=0.00;FS=0.00;HaplotypeScore=0.664;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=-2.050e-01;QD=21.33;ReadPosRankSum=-3.300e-02;SB=-2.552e+03;VQSLOD=8.99;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:42,40:82:99:1156,0,1352:127 0|1:36,45:81:99:1253,0,1134:127 1|1:0,78:78:99:2731,214,0:127
+6 18687376 rs9383429 A T 1162.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.746e+00;DB;DP=232;Dels=0.00;FS=0.638;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=59.42;MQ0=0;MQRankSum=-7.330e-01;QD=15.71;ReadPosRankSum=-1.460e-01;SB=-6.490e+02;VQSLOD=9.43;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,241,3181:127 0|0:76,0:76:99:0,217,2832:127 0|1:33,41:74:99:1197,0,1008:127
+6 26687649 . G C 1654.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=9.72;DP=410;Dels=0.00;FS=5.97;HaplotypeScore=5.08;MLEAC=2;MLEAF=0.333;MQ=28.19;MQ0=32;MQRankSum=0.048;QD=6.17;ReadPosRankSum=0.408;SB=-5.110e+02;VQSLOD=-8.735e+00;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:117,49:166:99:1013,0,2495:127 0|0:141,1:142:99:0,244,2576:127 1|0:70,32:102:99:680,0,1048:127
+6 31390139 rs72548006 T TA 2159.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.491;DB;DP=257;FS=2.38;HaplotypeScore=26.89;MLEAC=2;MLEAF=0.333;MQ=59.99;MQ0=0;MQRankSum=1.59;QD=12.85;RPA=5,6;RU=A;ReadPosRankSum=1.85;SB=-9.710e+02;STR;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,37:89:99:1076,0,1364:127 0|0:89,0:89:99:0,256,3112:127 1|0:41,38:79:99:1131,0,1103:127
+6 35346891 . C T 483.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-6.402e+00;DP=205;Dels=0.020;FS=214.15;HaplotypeScore=4.51;MLEAC=3;MLEAF=0.500;MQ=51.07;MQ0=1;MQRankSum=-2.038e+00;QD=2.36;ReadPosRankSum=-2.250e+00;SB=-1.065e-02;VQSLOD=-1.170e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:48,31:79:99:257,0,635:80 0/1:40,22:62:99:185,0,308:80 0/1:44,16:60:80:80,0,534:80
+6 45421630 rs1343799 C T 5422.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.42;DB;DP=240;Dels=0.00;FS=10.69;HaplotypeScore=0.798;MLEAC=4;MLEAF=0.667;MQ=59.46;MQ0=0;MQRankSum=1.09;QD=22.59;ReadPosRankSum=1.25;SB=-2.647e+03;VQSLOD=7.70;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:29,43:72:99:1445,0,843:127 0|1:43,37:80:99:1121,0,1302:127 1|1:0,88:88:99:2856,220,0:127
+6 55412503 rs12201934 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.280e+00;DB;DP=182;Dels=0.00;FS=0.744;HaplotypeScore=0.333;MLEAC=1;MLEAF=0.167;MQ=59.64;MQ0=0;MQRankSum=-7.650e-01;QD=13.57;ReadPosRankSum=0.147;SB=-4.590e+02;VQSLOD=9.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,181,2371:127 0|1:35,30:65:99:917,0,1046:127 0|0:56,0:56:99:0,150,1969:127
+6 63303894 rs34270846 T TC 7366 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.31;DB;DP=202;FS=2.81;HaplotypeScore=88.29;MLEAC=5;MLEAF=0.833;MQ=61.10;MQ0=0;MQRankSum=-3.900e-01;QD=36.47;ReadPosRankSum=-3.150e-01;SB=-2.762e+03;VQSLOD=3.86;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3885,265,0:127 1|0:29,25:54:99:999,0,1050:127 1|1:0,57:59:99:2482,169,0:127
+6 71018445 rs1321063 C A 518.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.67;DB;DP=185;Dels=0.00;FS=1.62;HaplotypeScore=0.692;MLEAC=1;MLEAF=0.167;MQ=58.93;MQ0=0;MQRankSum=0.355;QD=8.78;ReadPosRankSum=1.31;SB=-4.020e+02;VQSLOD=7.75;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,184,2404:127 0|0:59,0:59:99:0,160,2065:127 0|1:29,30:59:99:553,0,809:127
+6 79887872 rs6454101 C T 2130.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.355e+00;DB;DP=204;Dels=0.00;FS=11.82;HaplotypeScore=2.38;MLEAC=3;MLEAF=0.500;MQ=59.68;MQ0=0;MQRankSum=1.01;QD=10.44;ReadPosRankSum=-7.690e-01;SB=-1.370e+03;VQSLOD=7.52;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:31,31:62:99:806,0,990:127 0/1:42,31:73:99:606,0,921:127 0/1:29,40:69:99:757,0,749:127
+6 89947117 rs9942462 A G 5019.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.65;DB;DP=181;Dels=0.00;FS=0.00;HaplotypeScore=3.32;MLEAC=6;MLEAF=1.00;MQ=53.30;MQ0=0;MQRankSum=0.428;QD=27.73;ReadPosRankSum=1.09;SB=-3.151e+03;VQSLOD=5.68;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:60:99:1715,138,0:92 1|1:1,55:56:93:1401,93,0:92 1|1:0,65:65:99:1903,153,0:92
+6 100462085 rs113348222 G GT 5284 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.600e-02;DB;DP=285;FS=7.48;HaplotypeScore=252.09;MLEAC=5;MLEAF=0.833;MQ=60.07;MQ0=0;MQRankSum=1.24;QD=18.54;RPA=10,11;RU=T;ReadPosRankSum=-2.539e+00;SB=-2.505e+03;STR;VQSLOD=2.21;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:8,79:94:99:2218,200,0:127 1|0:54,37:97:99:818,0,914:127 1|1:10,83:94:99:2248,221,0:127
+6 110345430 rs56272355 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.241e+00;DB;DP=230;Dels=0.00;FS=2.16;HaplotypeScore=1.76;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-2.000e-01;QD=11.46;ReadPosRankSum=-4.800e-01;SB=-5.580e+02;VQSLOD=8.98;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,220,2860:127 0|0:75,0:76:99:0,184,2321:127 0|1:35,42:77:99:917,0,926:127
+6 120734422 rs62424426 T C 1091.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.268e+00;DB;DP=208;Dels=0.00;FS=4.35;HaplotypeScore=0.703;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=-1.880e-01;QD=14.36;ReadPosRankSum=-1.490e-01;SB=-5.560e+02;VQSLOD=8.65;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,205,2692:127 0|0:61,0:61:99:0,175,2298:127 0|1:39,37:76:99:1126,0,1140:127
+6 131725921 . G A 64.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=3.65;DP=182;Dels=0.00;FS=3.54;HaplotypeScore=2.24;MLEAC=1;MLEAF=0.167;MQ=50.85;MQ0=1;MQRankSum=-6.039e+00;QD=1.31;ReadPosRankSum=-1.757e+00;SB=-4.901e+01;VQSLOD=-6.667e-01;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:59,0:60:99:0,168,1897:98 0|1:33,16:49:99:99,0,790:98 0|0:73,0:73:99:0,156,1824:98
+6 143691852 rs17792267 C T 3641.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.465e+00;DB;DP=203;Dels=0.00;FS=2.41;HaplotypeScore=0.322;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=1.20;QD=27.17;ReadPosRankSum=-1.140e+00;SB=-1.772e+03;VQSLOD=8.87;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:29,33:62:99:1131,0,803:127 1|1:0,72:72:99:2510,196,0:127 0|0:69,0:69:99:0,190,2480:127
+6 154006585 rs7752561 G A 919.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.323e+00;DB;DP=223;Dels=0.00;FS=0.00;HaplotypeScore=0.825;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-7.490e-01;QD=10.45;ReadPosRankSum=-1.550e-01;SB=-5.260e+02;VQSLOD=8.84;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,202,2601:127 0|1:51,37:88:99:954,0,1475:127 0|0:65,0:65:99:0,175,2269:127
+6 162459664 rs2849564 C T 1819.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.40;DB;DP=201;Dels=0.00;FS=3.30;HaplotypeScore=2.56;MLEAC=2;MLEAF=0.333;MQ=59.38;MQ0=0;MQRankSum=1.79;QD=12.90;ReadPosRankSum=-1.045e+00;SB=-1.068e+03;VQSLOD=8.12;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:28,40:68:99:1007,0,793:120 1|0:38,35:73:99:851,0,831:120 0|0:60,0:60:99:0,120,1421:120
+6 169196022 . T TG 229.23 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.887;DP=84;FS=7.13;HaplotypeScore=6.43;MLEAC=2;MLEAF=0.333;MQ=39.46;MQ0=16;MQRankSum=2.28;QD=3.82;RPA=6,7;RU=G;ReadPosRankSum=-9.830e-01;SB=-2.849e+01;STR;VQSLOD=1.35;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:19,10:15:78:78,0,88:27 1|0:17,13:21:99:199,0,172:27 0|0:24,0:15:27:0,27,308:27
+7 4683258 rs62450857 G A 1127.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-9.910e-01;DB;DP=191;Dels=0.00;FS=3.24;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=57.16;MQ0=0;MQRankSum=1.30;QD=14.09;ReadPosRankSum=0.469;SB=-4.730e+02;VQSLOD=6.62;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,196,2495:120 0|1:38,42:80:99:1162,0,1016:120 0|0:45,0:45:99:0,120,1531:120
+7 12502849 rs848025 C G 4109.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.809e+00;DB;DP=220;Dels=0.00;FS=1.14;HaplotypeScore=1.80;MLEAC=4;MLEAF=0.667;MQ=59.56;MQ0=0;MQRankSum=0.625;QD=18.68;ReadPosRankSum=-1.900e-02;SB=-1.989e+03;VQSLOD=8.71;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:47,45:92:99:1216,0,1501:127 1|1:0,71:71:99:2145,184,0:127 0|1:27,30:57:99:748,0,743:127
+7 20767781 rs150977587 TA T 2754.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.30;DB;DP=259;FS=0.00;HaplotypeScore=122.50;MLEAC=4;MLEAF=0.667;MQ=59.41;MQ0=1;MQRankSum=-6.400e-01;QD=10.63;RPA=13,12;RU=A;ReadPosRankSum=0.189;SB=-1.344e+03;STR;VQSLOD=3.30;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:59,45:107:99:923,0,795:116 1|1:15,54:72:99:1313,116,0:116 0|1:44,31:79:99:569,0,617:116
+7 29544610 rs6462145 A T 4020.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.326;DB;DP=189;Dels=0.00;FS=5.39;HaplotypeScore=1.30;MLEAC=4;MLEAF=0.667;MQ=58.54;MQ0=0;MQRankSum=1.29;QD=21.27;ReadPosRankSum=-1.212e+00;SB=-1.878e+03;VQSLOD=7.32;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:27,49:77:99:1466,0,733:127 1|1:0,64:64:99:1888,147,0:127 0|1:18,27:48:99:666,0,410:127
+7 38984187 rs118081099 A C 569.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.100e-01;DB;DP=182;Dels=0.00;FS=6.20;HaplotypeScore=0.553;MLEAC=1;MLEAF=0.167;MQ=54.22;MQ0=0;MQRankSum=1.67;QD=9.33;ReadPosRankSum=1.16;SB=-1.260e+02;VQSLOD=4.89;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:72,0:72:99:0,196,2446:127 0|1:38,23:61:99:604,0,1196:127 0|0:48,1:49:99:0,138,1711:127
+7 48862174 rs965346 A G 877.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.250e+00;DB;DP=194;Dels=0.00;FS=6.11;HaplotypeScore=0.649;MLEAC=1;MLEAF=0.167;MQ=57.54;MQ0=0;MQRankSum=2.06;QD=16.25;ReadPosRankSum=-1.204e+00;SB=-4.040e+02;VQSLOD=6.24;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3007:127 0|0:58,0:58:99:0,160,2067:127 0|1:22,32:54:99:912,0,686:127
+7 56584972 rs34475770 C T 2465.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.030e-01;DB;DP=255;Dels=0.00;FS=2.23;HaplotypeScore=0.884;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=1.77;QD=15.03;ReadPosRankSum=1.13;SB=-1.412e+03;VQSLOD=6.57;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:91,0:91:99:0,259,3369:127 0|1:36,49:85:99:1444,0,1000:127 0|1:38,41:79:99:1060,0,1084:127
+7 62232046 . C T 1155.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.643e+00;DP=230;Dels=0.00;FS=6.30;HaplotypeScore=12.77;MLEAC=1;MLEAF=0.167;MQ=58.61;MQ0=3;MQRankSum=-6.970e-01;QD=15.20;ReadPosRankSum=-1.202e+00;SB=-4.440e+02;VQSLOD=2.57;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:77,1:78:99:0,217,2824:127 0|0:76,0:76:99:0,202,2604:127 0|1:34,42:76:99:1190,0,994:127
+7 69334430 rs917719 C T 1223.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.84;DB;DP=193;Dels=0.00;FS=6.66;HaplotypeScore=0.815;MLEAC=2;MLEAF=0.333;MQ=59.81;MQ0=0;MQRankSum=1.63;QD=9.63;ReadPosRankSum=1.46;SB=-7.370e+02;VQSLOD=7.00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:770,0,1258:127 1|0:26,24:50:99:492,0,840:127 0|0:66,0:66:99:0,172,2210:127
+7 79508376 rs2525826 G T 716.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.15;DB;DP=196;Dels=0.00;FS=0.00;HaplotypeScore=0.866;MLEAC=1;MLEAF=0.167;MQ=59.48;MQ0=0;MQRankSum=1.42;QD=13.51;ReadPosRankSum=0.263;SB=-4.080e+02;VQSLOD=9.57;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:65:99:0,181,2312:127 0|0:78,0:78:99:0,226,2916:127 0|1:27,26:53:99:751,0,845:127
+7 89752110 rs39232 T G 3944.01 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.00;HaplotypeScore=1.45;MLEAC=6;MLEAF=1.00;MQ=38.19;MQ0=21;QD=18.26;SB=-2.716e+03;VQSLOD=2.66;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:1564,132,0:101 1|1:0,79:79:99:1258,108,0:101 1|1:0,66:66:99:1122,102,0:101
+7 101161506 rs2158739 C T 4522.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.70;DB;DP=172;Dels=0.00;FS=4.28;HaplotypeScore=1.51;MLEAC=5;MLEAF=0.833;MQ=58.18;MQ0=0;MQRankSum=-2.950e-01;QD=26.29;ReadPosRankSum=0.974;SB=-2.287e+03;VQSLOD=8.28;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:73:99:2443,202,0:110 1|0:23,26:50:99:711,0,586:110 1|1:0,48:49:99:1368,111,0:110
+7 110843795 rs214455 A G 8548.01 PASS AC=6;AF=1.00;AN=6;DB;DP=258;Dels=0.00;FS=0.00;HaplotypeScore=2.36;MLEAC=6;MLEAF=1.00;MQ=59.35;MQ0=0;QD=33.13;SB=-4.197e+03;VQSLOD=10.76;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3535,301,0:127 1|1:0,66:66:99:2270,193,0:127 1|1:0,86:86:99:2743,229,0:127
+7 124589684 rs12113765 G C 4948.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.607e+00;DB;DP=243;Dels=0.00;FS=1.04;HaplotypeScore=3.38;MLEAC=4;MLEAF=0.667;MQ=58.74;MQ0=0;MQRankSum=1.25;QD=20.36;ReadPosRankSum=-3.870e-01;SB=-2.411e+03;VQSLOD=7.05;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,27:71:99:796,0,1350:127 1|1:0,84:85:99:2760,217,0:127 0|1:41,46:87:99:1392,0,1180:127
+7 134269995 rs67235184 G GA 2917.20 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.835;DB;DP=219;FS=1.09;HaplotypeScore=39.14;MLEAC=3;MLEAF=0.500;MQ=59.44;MQ0=0;MQRankSum=-3.700e-02;QD=19.19;RPA=7,8;RU=A;ReadPosRankSum=-9.210e-01;SB=-1.316e+03;STR;VQSLOD=5.11;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:51,33:84:99:916,0,1151:127 1|1:2,65:68:99:2055,192,0:127 0|0:65,0:67:99:0,186,2051:127
+7 144383888 rs73161092 T C 689.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.434e+00;DB;DP=254;Dels=0.00;FS=8.63;HaplotypeScore=0.00;MLEAC=1;MLEAF=0.167;MQ=59.54;MQ0=0;MQRankSum=0.163;QD=8.62;ReadPosRankSum=-1.802e+00;SB=-3.560e+02;VQSLOD=6.45;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:90,0:90:99:0,268,3553:127 0|1:47,33:80:99:724,0,1392:127 0|0:84,0:84:99:0,202,2644:127
+7 152208470 rs6464236 G C 4321.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.23;DB;DP=169;Dels=0.00;FS=1.63;HaplotypeScore=1.36;MLEAC=5;MLEAF=0.833;MQ=57.18;MQ0=1;MQRankSum=1.91;QD=25.57;ReadPosRankSum=0.892;SB=-2.137e+03;VQSLOD=6.76;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:1,56:57:99:1949,150,0:122 1|1:0,54:54:99:1557,123,0:122 1|0:30,28:58:99:815,0,715:122
+7 158686803 rs55765467 T C 200.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.011e+01;DB;DP=310;Dels=0.00;FS=2.60;HaplotypeScore=1.28;MLEAC=3;MLEAF=0.500;MQ=47.32;MQ0=0;MQRankSum=-4.959e+00;QD=0.650;ReadPosRankSum=-1.096e+01;SB=-1.206e+03;VQSLOD=-1.764e+01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:64,33:97:99:148,0,1949:32 0/1:73,45:118:58:58,0,2287:32 0/1:65,30:95:33:33,0,1910:32
+8 4048009 rs7007410 C T 2713.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.954;DB;DP=197;Dels=0.00;FS=2.48;HaplotypeScore=0.712;MLEAC=3;MLEAF=0.500;MQ=57.03;MQ0=0;MQRankSum=0.882;QD=13.77;ReadPosRankSum=-4.960e-01;SB=-1.406e+03;VQSLOD=6.50;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:38,30:68:99:847,0,1168:127 0/1:30,30:60:99:916,0,921:127 0/1:32,36:69:99:989,0,882:127
+8 8974322 rs28440961 G A 1682.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.72;DB;DP=190;Dels=0.00;FS=0.579;HaplotypeScore=1.54;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=-6.520e-01;QD=12.65;ReadPosRankSum=0.746;SB=-7.040e+02;VQSLOD=9.37;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:32,32:64:99:790,0,1002:125 1|0:33,36:69:99:931,0,866:125 0|0:57,0:57:99:0,126,1622:125
+8 14463368 rs1355302 T A 2523.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.79;DB;DP=236;Dels=0.00;FS=3.78;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=59.14;MQ0=0;MQRankSum=-3.810e-01;QD=15.97;ReadPosRankSum=-4.500e-02;SB=-1.421e+03;VQSLOD=7.69;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,43:79:99:1332,0,1176:127 0|0:78,0:78:99:0,214,2749:127 1|0:35,44:79:99:1230,0,1162:127
+8 21736923 rs13256921 G A 217.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=1.88;DB;DP=93;Dels=0.00;FS=5.53;HaplotypeScore=6.50;MLEAC=1;MLEAF=0.167;MQ=42.13;MQ0=3;MQRankSum=0.517;QD=6.79;ReadPosRankSum=1.71;SB=-1.980e+02;VQSLOD=-2.643e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:34,0:34:66:0,66,691:41 0|1:15,17:32:99:252,0,211:41 0|0:27,0:27:42:0,42,425:41
+8 30862954 rs149290124 C CA 3883 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.321e+00;DB;DP=261;FS=0.755;HaplotypeScore=37.27;MLEAC=5;MLEAF=0.833;MQ=58.08;MQ0=0;MQRankSum=0.330;QD=14.88;RPA=11,12;RU=A;ReadPosRankSum=-5.780e-01;SB=-1.926e+03;STR;VQSLOD=5.37;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:21,76:105:99:1980,179,0:91 1|0:51,22:75:99:597,0,485:91 1|1:24,54:81:92:1306,92,0:91
+8 42044954 rs1058720 G A 2760.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.31;DB;DP=157;Dels=0.00;FS=0.00;HaplotypeScore=2.10;MLEAC=4;MLEAF=0.667;MQ=58.82;MQ0=0;MQRankSum=-2.021e+00;QD=17.58;ReadPosRankSum=-4.620e-01;SB=-1.377e+03;VQSLOD=7.58;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1820,147,0:127 1|0:24,27:51:99:555,0,233:127 1|0:26,24:50:99:427,0,458:127
+8 56608897 rs57623198 C T 1911.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.515e+00;DB;DP=229;Dels=0.00;FS=0.00;HaplotypeScore=1.13;MLEAC=2;MLEAF=0.333;MQ=59.80;MQ0=0;MQRankSum=0.336;QD=12.66;ReadPosRankSum=-2.326e+00;SB=-9.730e+02;VQSLOD=8.56;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,229,2989:127 0|1:44,30:74:99:897,0,1444:127 0|1:44,33:77:99:1053,0,1400:127
+8 66327344 rs13282622 G A 3918.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.51;DB;DP=192;Dels=0.00;FS=3.53;HaplotypeScore=1.65;MLEAC=4;MLEAF=0.667;MQ=58.91;MQ0=0;MQRankSum=0.706;QD=20.41;ReadPosRankSum=-3.270e-01;SB=-2.091e+03;VQSLOD=8.63;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,37:71:99:1137,0,923:127 0|1:32,28:61:99:806,0,988:127 1|1:0,60:60:99:1975,153,0:127
+8 78181000 rs1563030 A G 5178.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-3.000e-02;DB;DP=192;Dels=0.00;FS=4.68;HaplotypeScore=2.95;MLEAC=5;MLEAF=0.833;MQ=59.62;MQ0=0;MQRankSum=-4.670e-01;QD=26.97;ReadPosRankSum=-8.550e-01;SB=-2.617e+03;VQSLOD=7.34;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:59:99:1954,150,0:127 1|0:32,37:70:99:1198,0,888:127 1|1:0,63:63:99:2026,156,0:127
+8 90278211 rs11998540 A T 357.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.457e+00;DB;DP=69;Dels=0.00;FS=1.29;HaplotypeScore=0.00;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=1.41;QD=8.12;ReadPosRankSum=1.26;SB=-9.501e+01;VQSLOD=5.96;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:12,7:19:99:185,0,416:60 0|0:25,0:25:60:0,60,805:60 1|0:16,9:25:99:211,0,500:60
+8 102355800 rs10103956 G T 1756.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.927;DB;DP=189;Dels=0.00;FS=5.92;HaplotypeScore=1.54;MLEAC=2;MLEAF=0.333;MQ=59.66;MQ0=0;MQRankSum=-4.200e-01;QD=13.41;ReadPosRankSum=-1.900e-02;SB=-5.470e+02;VQSLOD=8.16;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:32,38:70:99:1078,0,999:127 1|0:35,26:61:99:717,0,1103:127 0|0:57,0:58:99:0,156,2011:127
+8 113376378 rs41340951 T C 4379.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.019e+00;DB;DP=211;Dels=0.00;FS=1.83;HaplotypeScore=0.263;MLEAC=4;MLEAF=0.667;MQ=59.85;MQ0=0;MQRankSum=1.27;QD=20.75;ReadPosRankSum=0.144;SB=-1.893e+03;VQSLOD=8.84;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,67:67:99:2221,187,0:127 1|0:32,37:69:99:1083,0,1066:127 1|0:35,40:75:99:1075,0,1108:127
+8 123499998 rs9693135 T C 926.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.820e+00;DB;DP=207;Dels=0.00;FS=2.68;HaplotypeScore=1.26;MLEAC=2;MLEAF=0.333;MQ=56.08;MQ0=0;MQRankSum=-2.729e+00;QD=6.34;ReadPosRankSum=-2.690e-01;SB=-8.230e+02;VQSLOD=4.30;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2301:127 0|1:37,35:72:99:622,0,769:127 0|1:48,26:74:99:343,0,1280:127
+8 132727531 rs7000409 G A 2050.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.47;DB;DP=220;Dels=0.00;FS=5.20;HaplotypeScore=1.94;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=1.23;QD=14.14;ReadPosRankSum=-8.710e-01;SB=-1.080e+03;VQSLOD=7.79;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:29,35:64:99:1215,0,785:127 0|0:75,0:75:99:0,190,2423:127 1|0:50,31:81:99:874,0,1611:127
+8 140651779 rs1469039 G A 1879.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.189e+00;DB;DP=145;Dels=0.00;FS=0.00;HaplotypeScore=1.77;MLEAC=3;MLEAF=0.500;MQ=58.39;MQ0=0;MQRankSum=0.745;QD=12.96;ReadPosRankSum=-1.590e-01;SB=-9.360e+02;VQSLOD=9.01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:23,24:47:99:612,0,740:127 0/1:21,31:52:99:684,0,478:127 0/1:20,26:46:99:622,0,367:127
+9 2072356 rs4741641 T G 2054.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.235e+00;DB;DP=243;Dels=0.00;FS=0.00;HaplotypeScore=2.21;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=1.17;QD=13.00;ReadPosRankSum=-4.750e-01;SB=-1.004e+03;VQSLOD=9.02;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:49,45:94:99:1245,0,1615:127 0|0:85,0:85:99:0,217,2818:127 1|0:32,32:64:99:848,0,936:127
+9 9066127 rs57751104 ATATT A 4412 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-8.800e-02;DB;DP=214;FS=8.47;HaplotypeScore=16.59;MLEAC=2;MLEAF=0.333;MQ=58.75;MQ0=0;MQRankSum=0.462;QD=29.61;RPA=2,1;RU=TATT;ReadPosRankSum=1.38;SB=-1.837e+03;STR;VQSLOD=4.42;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:41,36:79:99:2129,0,2123:127 1|0:32,38:70:99:2283,0,1679:127 0|0:65,0:65:99:0,184,4023:127
+9 16302655 rs9298755 T G 1394.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.36;DB;DP=200;Dels=0.00;FS=0.00;HaplotypeScore=3.19;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=0.586;QD=10.03;ReadPosRankSum=-7.710e-01;SB=-8.720e+02;VQSLOD=7.77;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:60,1:61:99:0,165,2004:127 0|1:29,28:57:99:494,0,759:127 0|1:41,40:82:99:939,0,1069:127
+9 25201692 rs9408058 C T 8643.01 PASS AC=6;AF=1.00;AN=6;DB;DP=245;Dels=0.00;FS=0.00;HaplotypeScore=0.898;MLEAC=6;MLEAF=1.00;MQ=59.13;MQ0=0;QD=35.28;SB=-4.398e+03;VQSLOD=12.17;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3312,256,0:127 1|1:0,81:81:99:2771,223,0:127 1|1:0,75:75:99:2560,202,0:127
+9 33446281 . C CT 31.72 VQSRTrancheINDEL99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.119e+00;DP=178;FS=127.57;HaplotypeScore=21.55;MLEAC=1;MLEAF=0.167;MQ=58.69;MQ0=0;MQRankSum=1.61;QD=0.620;RPA=2,3;RU=T;ReadPosRankSum=-5.268e+00;SB=-4.493e+00;STR;VQSLOD=-1.057e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:77,0:79:73:0,73,2094:6 0|0:46,0:48:5:0,5,958:6 0|1:35,15:51:75:75,0,1073:6
+9 44998848 . C G 254.43 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=2.20;DP=193;Dels=0.00;FS=10.82;HaplotypeScore=0.245;MLEAC=5;MLEAF=0.833;MQ=6.48;MQ0=163;MQRankSum=-1.206e+00;QD=1.32;ReadPosRankSum=0.790;SB=-1.372e+02;VQSLOD=-6.632e+00;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:39,27:66:23:132,0,23:8 1|1:36,16:52:15:118,15,0:8 0|1:53,22:75:1:45,6,0:8
+9 69810010 rs113063015 A C 280.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.223e+00;DB;DP=716;DS;Dels=0.00;FS=9.00;HaplotypeScore=39.83;MLEAC=3;MLEAF=0.500;MQ=37.32;MQ0=64;MQRankSum=-3.574e+00;QD=0.390;ReadPosRankSum=-8.970e-01;SB=-1.065e-02;VQSLOD=-6.817e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:218,23:241:73:73,0,3591:70 0/1:188,39:227:99:172,0,4233:70 0/1:217,31:248:74:74,0,5042:70
+9 78741390 rs7049138 G A 1797.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.24;DB;DP=168;Dels=0.00;FS=4.00;HaplotypeScore=1.09;MLEAC=3;MLEAF=0.500;MQ=55.32;MQ0=2;MQRankSum=-1.673e+00;QD=16.34;ReadPosRankSum=-6.260e-01;SB=-7.740e+02;VQSLOD=5.19;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:828,0,918:80 1|1:0,40:40:81:1014,81,0:80 0|0:58,0:58:99:0,129,1403:80
+9 89010476 rs164937 T C 736.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-3.977e+00;DB;DP=216;Dels=0.00;FS=1.48;HaplotypeScore=1.06;MLEAC=1;MLEAF=0.167;MQ=39.79;MQ0=9;MQRankSum=-3.028e+00;QD=9.56;ReadPosRankSum=0.542;SB=-4.240e+02;VQSLOD=2.08;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,174,2097:127 0|1:40,37:77:99:771,0,876:127 0|0:73,0:73:99:0,183,2147:127
+9 98491693 rs12337935 C A 1474.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.10;DB;DP=97;Dels=0.00;FS=14.28;HaplotypeScore=1.77;MLEAC=4;MLEAF=0.667;MQ=58.64;MQ0=0;MQRankSum=-2.240e-01;QD=15.20;ReadPosRankSum=1.17;SB=-6.430e+02;VQSLOD=5.80;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,12:26:99:348,0,352:63 1|1:0,28:29:63:781,63,0:63 0|1:17,25:42:99:387,0,364:63
+9 109619207 rs4743032 A T 3810.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.859e+00;DB;DP=214;Dels=0.00;FS=10.28;HaplotypeScore=0.322;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=0.557;QD=25.07;ReadPosRankSum=-8.360e-01;SB=-2.019e+03;VQSLOD=8.14;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:37,39:76:99:1185,0,1225:127 1|1:0,76:76:99:2625,202,0:127 0|0:62,0:62:99:0,156,2049:127
+9 118670009 rs66523513 CT C 5633 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-6.600e-02;DB;DP=222;FS=6.40;HaplotypeScore=30.72;MLEAC=6;MLEAF=1.00;MQ=59.97;MQ0=0;MQRankSum=0.490;QD=25.37;RPA=11,10;RU=T;ReadPosRankSum=2.43;SB=-2.667e+03;STR;VQSLOD=3.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:6,71:78:99:2079,216,0:120 1|1:10,54:65:99:1524,120,0:120 1|1:9,69:79:99:2030,209,0:120
+9 130235282 . A G 166.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=-8.543e+00;DP=232;Dels=0.00;FS=233.04;HaplotypeScore=3.00;MLEAC=2;MLEAF=0.333;MQ=59.04;MQ0=0;MQRankSum=-2.038e+00;QD=1.15;ReadPosRankSum=-7.649e+00;SB=-3.100e-03;VQSLOD=-1.398e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:74,14:88:99:0,108,2160:59 0|1:42,36:79:60:60,0,966:59 0|1:47,18:65:99:145,0,922:59
+9 138617823 rs55724592 C T 53.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.800e-01;DB;DP=72;Dels=0.00;FS=8.08;HaplotypeScore=1.02;MLEAC=1;MLEAF=0.167;MQ=58.90;MQ0=0;MQRankSum=0.851;QD=2.66;ReadPosRankSum=-3.440e-01;SB=-9.096e+01;VQSLOD=4.27;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:20,0:20:48:0,48,580:44 0|0:32,0:32:48:0,48,577:44 0|1:10,10:20:88:88,0,199:44
+10 4588547 rs313427 C T 1985.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.69;DB;DP=204;Dels=0.00;FS=1.81;HaplotypeScore=0.614;MLEAC=2;MLEAF=0.333;MQ=59.73;MQ0=0;MQRankSum=0.241;QD=14.18;ReadPosRankSum=0.717;SB=-1.082e+03;VQSLOD=9.78;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:39,35:74:99:1029,0,1182:127 1|0:32,34:66:99:995,0,1024:127 0|0:64,0:64:99:0,175,2242:127
+10 11560326 rs4424580 C T 1027.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.780e-01;DB;DP=207;Dels=0.00;FS=0.573;HaplotypeScore=2.20;MLEAC=2;MLEAF=0.333;MQ=59.24;MQ0=0;MQRankSum=-9.880e-01;QD=7.78;ReadPosRankSum=-4.920e-01;SB=-7.450e+02;VQSLOD=8.46;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:41,32:73:99:609,0,930:96 1|0:29,30:59:99:457,0,570:96 0|0:74,1:75:96:0,96,1185:96
+10 19567676 rs61458006 G T 599.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.610e+00;DB;DP=195;Dels=0.00;FS=0.844;HaplotypeScore=0.879;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-1.910e-01;QD=11.31;ReadPosRankSum=-1.635e+00;SB=-2.780e+02;VQSLOD=9.36;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:75,0:75:99:0,208,2645:127 0|1:30,23:53:99:634,0,915:127 0|0:67,0:67:99:0,199,2540:127
+10 29082980 . G C 42.53 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.216e+00;DP=107;Dels=0.00;FS=60.98;HaplotypeScore=1.09;MLEAC=3;MLEAF=0.500;MQ=55.72;MQ0=0;MQRankSum=-6.330e-01;QD=0.400;ReadPosRankSum=-4.307e+00;SB=-2.798e-01;VQSLOD=-1.117e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,12:43:12:12,0,757:12 0/1:19,11:30:35:35,0,429:12 0/1:25,9:34:34:34,0,388:12
+10 38560911 rs80189231 T A 1072.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.103;DB;DP=356;Dels=0.00;FS=12.04;HaplotypeScore=5.40;MLEAC=3;MLEAF=0.500;MQ=49.74;MQ0=6;MQRankSum=-2.686e+00;QD=3.01;ReadPosRankSum=0.797;SB=-1.690e+02;VQSLOD=-3.513e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:109,26:135:99:389,0,2879:127 0/1:84,27:111:99:539,0,2214:127 0/1:93,17:110:99:183,0,2277:127
+10 46605359 . CT C 883.20 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.62;DP=136;FS=9.66;HaplotypeScore=4.70;MLEAC=3;MLEAF=0.500;MQ=22.12;MQ0=1;MQRankSum=0.368;QD=8.57;RPA=7,6;RU=T;ReadPosRankSum=-1.076e+00;SB=-1.190e+02;STR;VQSLOD=2.55;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:33,0:32:90:0,90,1016:25 0|1:66,15:81:99:303,0,1810:25 0|1:2,19:20:0:634,54,0:25
+10 56495833 rs6481118 G A 7633.01 PASS AC=6;AF=1.00;AN=6;DB;DP=212;Dels=0.00;FS=0.00;HaplotypeScore=0.333;MLEAC=6;MLEAF=1.00;MQ=54.64;MQ0=0;QD=36.00;SB=-2.091e+03;VQSLOD=8.67;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,62:62:99:2383,184,0:127 1|1:1,67:68:99:2375,184,0:127 1|1:0,82:82:99:2875,223,0:127
+10 65355538 rs10733794 A G 2464.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.392e+00;DB;DP=193;Dels=0.00;FS=7.47;HaplotypeScore=2.54;MLEAC=3;MLEAF=0.500;MQ=58.06;MQ0=2;MQRankSum=0.999;QD=18.96;ReadPosRankSum=-1.229e+00;SB=-1.065e+03;VQSLOD=6.39;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:830,0,1039:127 1|1:1,64:65:99:1679,153,0:127 0|0:63,0:63:99:0,159,2042:127
+10 74020452 rs72806301 C A 1116.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.155e+00;DB;DP=135;Dels=0.00;FS=3.28;HaplotypeScore=0.872;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=-8.180e-01;QD=11.88;ReadPosRankSum=1.48;SB=-6.800e+02;VQSLOD=7.27;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:20,27:47:99:658,0,446:104 0|0:41,0:41:99:0,105,1324:104 1|0:25,22:47:99:497,0,482:104
+10 85258657 rs4454662 C A 7638.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.72;DB;DP=223;Dels=0.00;FS=4.52;HaplotypeScore=1.13;MLEAC=6;MLEAF=1.00;MQ=58.32;MQ0=0;MQRankSum=-1.230e+00;QD=34.25;ReadPosRankSum=1.15;SB=-2.841e+03;VQSLOD=7.65;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,64:65:99:2156,169,0:127 1|1:0,89:89:99:2982,238,0:127 1|1:0,69:69:99:2500,196,0:127
+10 95435201 rs2422323 C T 4017.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.44;DB;DP=203;Dels=0.00;FS=13.13;HaplotypeScore=3.24;MLEAC=4;MLEAF=0.667;MQ=55.24;MQ0=0;MQRankSum=1.17;QD=19.79;ReadPosRankSum=-6.550e-01;SB=-2.177e+03;VQSLOD=4.60;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:38,45:83:99:1327,0,931:127 1|1:1,63:64:99:1966,156,0:127 0|1:30,25:56:99:724,0,807:127
+10 106444111 rs72813617 A G 632.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-8.380e-01;DB;DP=197;Dels=0.00;FS=4.12;HaplotypeScore=1.82;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-1.142e+00;QD=12.40;ReadPosRankSum=-1.947e+00;SB=-2.390e+02;VQSLOD=7.62;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:84,0:84:99:0,241,3129:127 0|0:62,0:62:99:0,159,2008:127 0|1:27,24:51:99:667,0,584:127
+10 116646860 rs4752347 T A 4159.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.459e+00;DB;DP=197;Dels=0.00;FS=3.52;HaplotypeScore=0.631;MLEAC=4;MLEAF=0.667;MQ=59.27;MQ0=0;MQRankSum=1.05;QD=21.11;ReadPosRankSum=-1.271e+00;SB=-2.347e+03;VQSLOD=8.33;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2191,169,0:127 1|0:31,35:66:99:1031,0,863:127 1|0:31,37:68:99:937,0,774:127
+10 125452232 rs7900707 A G 3211.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-6.610e+00;DB;DP=189;Dels=0.00;FS=17.74;HaplotypeScore=0.00;MLEAC=4;MLEAF=0.667;MQ=59.66;MQ0=0;MQRankSum=0.614;QD=16.99;ReadPosRankSum=-3.210e-01;SB=-1.553e+03;VQSLOD=6.90;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:61:99:1944,168,0:127 1|0:44,26:70:99:627,0,1357:127 1|0:29,29:58:99:682,0,862:127
+10 132949760 rs10829924 A C 684.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.328e+00;DB;DP=215;Dels=0.00;FS=15.46;HaplotypeScore=1.32;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-1.053e+00;QD=10.53;ReadPosRankSum=-2.893e+00;SB=-2.920e+02;VQSLOD=5.89;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:80,0:81:99:0,229,2999:127 0|0:69,0:69:99:0,175,2268:127 0|1:35,30:65:99:719,0,1046:127
+11 3839556 rs5789310 CA C 803.10 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.138;DB;DP=170;FS=4.50;HaplotypeScore=36.64;MLEAC=3;MLEAF=0.500;MQ=55.95;MQ0=2;MQRankSum=2.28;QD=4.72;RPA=17,16;RU=A;ReadPosRankSum=3.21;SB=-3.839e+02;STR;VQSLOD=1.81;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:35,17:55:32:329,0,32:3 0/1:45,9:57:8:276,0,8:3 0/1:30,19:52:1:244,0,1:3
+11 10741836 rs72853043 G A 175.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=0.127;DB;DP=174;Dels=0.00;FS=7.09;HaplotypeScore=7.46;MLEAC=1;MLEAF=0.167;MQ=55.72;MQ0=1;MQRankSum=-1.291e+00;QD=3.44;ReadPosRankSum=-1.185e+00;SB=-2.220e+02;VQSLOD=1.61;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,105,1278:65 0|0:42,0:45:66:0,66,802:65 0|1:21,29:51:99:210,0,469:65
+11 19325064 rs793250 G A 5752.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.08;DB;DP=203;Dels=0.00;FS=2.53;HaplotypeScore=0.817;MLEAC=5;MLEAF=0.833;MQ=59.35;MQ0=0;MQRankSum=-6.100e-02;QD=28.34;ReadPosRankSum=0.095;SB=-3.093e+03;VQSLOD=9.46;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2527,190,0:127 1|1:0,78:78:99:2626,205,0:127 1|0:32,22:54:99:599,0,768:127
+11 26026566 rs7942277 T C 5414.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=6;MLEAF=1.00;MQ=58.89;MQ0=0;QD=30.76;SB=-2.812e+03;VQSLOD=11.05;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1707,132,0:122 1|1:0,53:53:99:1581,123,0:122 1|1:0,70:70:99:2126,163,0:122
+11 35980461 rs263087 A T 3494.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-7.010e-01;DB;DP=186;Dels=0.00;FS=0.00;HaplotypeScore=2.96;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=0.836;QD=18.79;ReadPosRankSum=7.000e-03;SB=-1.535e+03;VQSLOD=7.64;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,35:71:99:1001,0,1165:127 0|1:30,26:56:99:710,0,796:127 1|1:0,59:59:99:1783,144,0:127
+11 44985620 rs7106313 C T 338.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.18;DB;DP=162;Dels=0.00;FS=4.84;HaplotypeScore=2.00;MLEAC=1;MLEAF=0.167;MQ=56.94;MQ0=0;MQRankSum=2.02;QD=8.67;ReadPosRankSum=0.983;SB=-2.190e+02;VQSLOD=6.66;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:79,0:80:99:0,174,2084:72 0|0:43,0:43:72:0,72,877:72 0|1:20,18:39:99:373,0,365:72
+11 55040918 rs187118824 A T 1019.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.08;DB;DP=65;Dels=0.020;FS=12.72;HaplotypeScore=0.977;MLEAC=2;MLEAF=0.333;MQ=56.64;MQ0=1;MQRankSum=0.323;QD=25.48;ReadPosRankSum=0.873;SB=-2.060e+01;VQSLOD=4.42;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:2,9:11:48:325,0,48:50 0|0:24,1:25:63:0,63,833:50 1|0:6,22:28:51:733,0,51:50
+11 65339346 rs1194104 C T 1804.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.465e+00;DB;DP=189;Dels=0.00;FS=8.43;HaplotypeScore=2.27;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=-1.200e-01;QD=13.67;ReadPosRankSum=-3.060e-01;SB=-1.061e+03;VQSLOD=7.95;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,157,2050:127 0|1:30,35:65:99:781,0,822:127 0|1:23,44:67:99:1062,0,690:127
+11 75978490 rs655877 G C 2986.25 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-8.460e-01;DB;DP=127;Dels=0.00;FS=5.43;HaplotypeScore=0.263;MLEAC=5;MLEAF=0.833;MQ=59.42;MQ0=0;MQRankSum=0.026;QD=23.51;ReadPosRankSum=0.168;SB=-1.613e+03;VQSLOD=7.04;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,50:50:99:1405,111,0:101 1|1:0,45:46:99:1269,102,0:101 1|0:17,14:31:99:354,0,469:101
+11 86061661 rs11825046 T C 6014.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.250e+00;DB;DP=282;Dels=0.00;FS=0.960;HaplotypeScore=1.64;MLEAC=4;MLEAF=0.667;MQ=59.57;MQ0=0;MQRankSum=1.06;QD=21.33;ReadPosRankSum=-1.763e+00;SB=-3.081e+03;VQSLOD=7.35;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:54,49:103:99:1498,0,1848:127 1|1:0,83:83:99:2924,223,0:127 0|1:44,52:96:99:1592,0,1380:127
+11 96559202 rs72048706 C CAA 373.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-7.960e-01;DB;DP=121;FS=1.54;HaplotypeScore=64.55;MLEAC=4;MLEAF=0.667;MQ=39.96;MQ0=6;MQRankSum=-5.390e-01;QD=3.08;RPA=21,23;RU=A;ReadPosRankSum=-3.583e+00;SB=-1.985e+02;STR;VQSLOD=1.31;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:20,8:32:24:111,0,24:22 1|1:40,0:41:29:180,29,0:22 0|1:39,0:39:41:133,0,41:22
+11 103989190 rs1545865 T C 4915.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.030e+00;DB;DP=219;Dels=0.00;FS=1.23;HaplotypeScore=1.21;MLEAC=4;MLEAF=0.667;MQ=59.37;MQ0=0;MQRankSum=1.10;QD=22.44;ReadPosRankSum=0.773;SB=-2.213e+03;VQSLOD=8.91;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:23,40:63:99:1203,0,669:127 0|1:36,52:88:99:1433,0,1136:127 1|1:0,68:68:99:2279,178,0:127
+11 113825129 rs1150234 G A 2441.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.98;DB;DP=210;Dels=0.00;FS=0.00;HaplotypeScore=2.07;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=0.877;QD=11.63;ReadPosRankSum=0.262;SB=-1.513e+03;VQSLOD=9.04;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,33:63:99:881,0,774:127 0/1:46,33:80:99:726,0,1020:127 0/1:32,35:67:99:873,0,759:127
+11 123470819 rs1148095 T C 6964.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-8.500e-01;DB;DP=242;Dels=0.00;FS=1.48;HaplotypeScore=1.39;MLEAC=5;MLEAF=0.833;MQ=59.25;MQ0=0;MQRankSum=-1.734e+00;QD=28.78;ReadPosRankSum=-7.490e-01;SB=-3.242e+03;VQSLOD=8.79;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3408,265,0:127 1|0:35,51:86:99:1520,0,1059:127 1|1:0,64:64:99:2036,157,0:127
+11 132780959 rs61906922 C T 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.22;DB;DP=263;Dels=0.00;FS=0.601;HaplotypeScore=1.84;MLEAC=1;MLEAF=0.167;MQ=59.58;MQ0=0;MQRankSum=0.997;QD=15.25;ReadPosRankSum=-7.460e-01;SB=-6.890e+02;VQSLOD=8.81;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:87,0:87:99:0,250,2877:127 0|0:87,0:88:99:0,253,3009:127 0|1:43,45:88:99:1377,0,1138:127
+12 5922552 rs17786352 C G 1874.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.386e+00;DB;DP=231;Dels=0.00;FS=0.00;HaplotypeScore=0.305;MLEAC=2;MLEAF=0.333;MQ=54.49;MQ0=0;MQRankSum=2.66;QD=13.11;ReadPosRankSum=1.04;SB=-9.400e+02;VQSLOD=4.75;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,35:79:99:897,0,1383:127 1|0:28,36:64:99:1016,0,734:127 0|0:88,0:88:99:0,238,3004:127
+12 12560642 rs10772559 G T 501.28 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=0.747;DB;DP=229;Dels=0.040;FS=17.41;HaplotypeScore=19.70;MLEAC=4;MLEAF=0.667;MQ=49.37;MQ0=0;MQRankSum=-3.656e+00;QD=2.19;ReadPosRankSum=-5.397e+00;SB=-2.196e+03;VQSLOD=-1.020e+01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,66:66:24:273,24,0:24 1|0:29,45:74:99:148,0,702:24 1|0:33,46:80:99:122,0,781:24
+12 21328424 rs4149040 G C 2565.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.888;DB;DP=252;Dels=0.00;FS=9.75;HaplotypeScore=0.608;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=1.17;QD=15.18;ReadPosRankSum=0.966;SB=-1.181e+03;VQSLOD=7.55;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,49:89:99:1534,0,1308:127 0|0:83,0:83:99:0,241,3117:127 1|0:45,35:80:99:1070,0,1402:127
+12 29935607 rs7305813 A C 810.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.307;DB;DP=203;Dels=0.00;FS=14.33;HaplotypeScore=1.98;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-1.640e-01;QD=12.86;ReadPosRankSum=-7.330e-01;SB=-2.950e+02;VQSLOD=7.90;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:71,0:71:99:0,193,2479:127 0|0:69,0:69:99:0,196,2464:127 0|1:28,35:63:99:845,0,847:127
+12 39118960 rs79977305 G A 1330.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.31;DB;DP=263;Dels=0.00;FS=0.597;HaplotypeScore=1.46;MLEAC=1;MLEAF=0.167;MQ=58.83;MQ0=0;MQRankSum=1.92;QD=13.57;ReadPosRankSum=-5.480e-01;SB=-7.360e+02;VQSLOD=7.37;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,2869:127 0|0:84,0:84:99:0,229,2712:127 0|1:51,47:98:99:1365,0,1343:127
+12 48120010 rs3829317 A C 4015.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.66;DB;DP=162;Dels=0.00;FS=1.83;HaplotypeScore=2.18;MLEAC=5;MLEAF=0.833;MQ=59.48;MQ0=0;MQRankSum=0.154;QD=24.78;ReadPosRankSum=0.482;SB=-2.240e+03;VQSLOD=8.13;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2024,163,0:110 1|0:24,27:51:99:550,0,540:110 1|1:0,48:48:99:1441,111,0:110
+12 58867437 rs140632614 G T 829.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=1.41;DB;DP=144;Dels=0.00;FS=68.61;HaplotypeScore=0.867;MLEAC=4;MLEAF=0.667;MQ=35.15;MQ0=16;MQRankSum=-7.440e+00;QD=5.76;ReadPosRankSum=-2.450e-01;SB=-1.011e+00;VQSLOD=-1.649e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,24:58:99:291,0,1100:44 0|1:42,8:50:61:61,0,1319:44 1|1:1,35:36:45:519,45,0:44
+12 68921960 . TATTTTC T 803.22 VQSRTrancheINDEL99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=9.86;DP=270;FS=190.60;HaplotypeScore=223.07;MLEAC=3;MLEAF=0.500;MQ=54.84;MQ0=1;MQRankSum=-4.552e+00;QD=2.97;ReadPosRankSum=-6.674e+00;SB=-1.330e-03;VQSLOD=-1.777e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:69,22:95:99:394,0,4974:101 0/1:87,0:86:99:355,0,5072:101 0/1:83,0:84:99:102,0,5546:101
+12 79238948 rs10778234 C T 3719.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.19;DB;DP=241;Dels=0.00;FS=7.07;HaplotypeScore=0.245;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-3.810e-01;QD=15.43;ReadPosRankSum=0.579;SB=-1.864e+03;VQSLOD=7.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:42,35:77:99:1049,0,1213:127 0/1:37,32:69:99:988,0,957:127 0/1:42,53:95:99:1682,0,1062:127
+12 90856710 rs825945 T C 1096.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.342e+00;DB;DP=193;Dels=0.00;FS=2.16;HaplotypeScore=0.00;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=2.07;QD=9.70;ReadPosRankSum=-1.697e+00;SB=-5.710e+02;VQSLOD=7.31;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:80,0:80:99:0,232,3042:127 0|1:30,21:51:99:511,0,921:127 0|1:36,26:62:99:624,0,1085:127
+12 101460237 rs7965836 C T 3485.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.070e+00;DB;DP=247;Dels=0.00;FS=2.89;HaplotypeScore=0.656;MLEAC=3;MLEAF=0.500;MQ=59.83;MQ0=0;MQRankSum=-6.550e-01;QD=14.11;ReadPosRankSum=-9.830e-01;SB=-1.581e+03;VQSLOD=8.49;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,43:83:99:1287,0,1179:127 0/1:44,36:80:99:1068,0,1363:127 0/1:43,41:84:99:1130,0,1321:127
+12 112830546 rs150699511 C A 487.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.014e+00;DB;DP=179;Dels=0.00;FS=0.860;HaplotypeScore=2.34;MLEAC=1;MLEAF=0.167;MQ=59.16;MQ0=0;MQRankSum=1.14;QD=8.86;ReadPosRankSum=0.950;SB=-2.870e+02;VQSLOD=8.11;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:62:99:0,166,2141:127 0|1:34,21:55:99:522,0,751:127 0|0:62,0:62:99:0,141,1808:127
+12 122942070 rs10744217 A G 1812.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.353e+00;DB;DP=179;Dels=0.00;FS=0.663;HaplotypeScore=1.42;MLEAC=3;MLEAF=0.500;MQ=58.69;MQ0=0;MQRankSum=0.992;QD=15.10;ReadPosRankSum=1.08;SB=-5.860e+02;VQSLOD=8.48;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,36:71:99:762,0,1100:92 1|1:0,48:49:93:1095,93,0:92 0|0:59,0:59:99:0,120,1560:92
+12 130522866 rs1613499 C T 3975.01 PASS AC=6;AF=1.00;AN=6;DB;DP=130;Dels=0.00;FS=0.00;HaplotypeScore=0.633;MLEAC=6;MLEAF=1.00;MQ=59.11;MQ0=0;QD=30.58;SB=-1.386e+03;VQSLOD=10.23;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,57:57:99:1939,144,0:73 1|1:0,34:34:75:990,75,0:73 1|1:0,39:39:78:1046,78,0:73
+13 21520045 rs9509464 A C 5103.01 PASS AC=6;AF=1.00;AN=6;DB;DP=195;Dels=0.00;FS=0.00;HaplotypeScore=1.61;MLEAC=6;MLEAF=1.00;MQ=47.37;MQ0=0;QD=26.17;SB=-2.582e+03;VQSLOD=5.19;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2106,186,0:98 1|1:0,78:78:99:1856,162,0:98 1|1:0,46:46:99:1141,99,0:98
+13 28463938 rs954750 C T 2740.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.21;DB;DP=242;Dels=0.00;FS=0.00;HaplotypeScore=4.01;MLEAC=2;MLEAF=0.333;MQ=59.46;MQ0=0;MQRankSum=0.880;QD=16.61;ReadPosRankSum=-6.170e-01;SB=-1.312e+03;VQSLOD=6.77;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:40,43:83:99:1362,0,1242:127 1|0:35,47:82:99:1417,0,1010:127 0|0:76,0:77:99:0,205,2635:127
+13 37484693 rs1571317 T C 971.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.315e+00;DB;DP=229;Dels=0.00;FS=3.05;HaplotypeScore=0.660;MLEAC=1;MLEAF=0.167;MQ=58.51;MQ0=0;MQRankSum=1.88;QD=12.78;ReadPosRankSum=-3.430e-01;SB=-5.750e+02;VQSLOD=7.31;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:94,0:94:99:0,253,3258:127 0|1:35,41:76:99:1006,0,924:127 0|0:59,0:59:99:0,147,1872:127
+13 46407442 rs11147990 G A 2668.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.23;DB;DP=199;Dels=0.00;FS=0.530;HaplotypeScore=1.80;MLEAC=3;MLEAF=0.500;MQ=58.99;MQ0=0;MQRankSum=0.023;QD=20.21;ReadPosRankSum=-4.520e-01;SB=-1.651e+03;VQSLOD=9.20;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:36,33:69:99:994,0,1056:127 0|0:67,0:67:99:0,141,1821:127 1|1:0,63:63:99:1719,135,0:127
+13 56456878 rs2997102 C A 9454.01 PASS AC=6;AF=1.00;AN=6;DB;DP=257;Dels=0.00;FS=0.00;HaplotypeScore=0.954;MLEAC=6;MLEAF=1.00;MQ=59.57;MQ0=0;QD=36.79;SB=-4.826e+03;VQSLOD=11.51;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,99:99:99:3692,280,0:127 1|1:0,88:88:99:3239,253,0:127 1|1:0,70:70:99:2523,193,0:127
+13 65275154 rs359338 G A 1963.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.73;DB;DP=173;Dels=0.00;FS=3.63;HaplotypeScore=0.948;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=-6.760e-01;QD=14.54;ReadPosRankSum=0.399;SB=-1.054e+03;VQSLOD=8.45;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:31,28:59:99:883,0,990:108 1|0:39,37:76:99:1119,0,1112:108 0|0:38,0:38:99:0,108,1390:108
+13 74611546 rs73214804 C T 639.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.870e-01;DB;DP=164;Dels=0.00;FS=0.00;HaplotypeScore=1.41;MLEAC=1;MLEAF=0.167;MQ=58.95;MQ0=0;MQRankSum=0.902;QD=11.21;ReadPosRankSum=-5.410e-01;SB=-3.000e+02;VQSLOD=8.88;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:53,0:53:99:0,135,1773:110 0|0:53,1:54:99:0,111,1440:110 0|1:24,33:57:99:674,0,388:110
+13 83670546 . G A 169.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.30;DP=178;Dels=0.00;FS=0.00;HaplotypeScore=36.51;MLEAC=2;MLEAF=0.333;MQ=42.20;MQ0=11;MQRankSum=-6.654e+00;QD=1.38;ReadPosRankSum=-7.610e-01;SB=-1.340e+02;VQSLOD=-2.041e+01;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:37,16:53:99:139,0,523:90 0|0:51,4:55:91:0,91,1393:90 1|0:58,12:70:69:69,0,1214:90
+13 92742124 rs2148446 G A 1884.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.340e+00;DB;DP=213;Dels=0.00;FS=0.00;HaplotypeScore=0.316;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=0;MQRankSum=-2.935e+00;QD=12.99;ReadPosRankSum=-5.790e-01;SB=-9.540e+02;VQSLOD=7.28;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|1:38,38:76:99:1130,0,1190:127 0|0:68,0:68:99:0,190,2454:127 1|0:38,31:69:99:793,0,1094:127
+13 101976707 rs527328 A T 9240.01 PASS AC=6;AF=1.00;AN=6;DB;DP=259;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=6;MLEAF=1.00;MQ=53.28;MQ0=0;QD=35.68;SB=-4.696e+03;VQSLOD=7.52;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3410,262,0:127 1|1:0,88:88:99:3195,247,0:127 1|1:1,78:79:99:2635,202,0:127
+13 109990322 rs7328109 T C 7198.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.487e+00;DB;DP=245;Dels=0.00;FS=5.89;HaplotypeScore=1.88;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=-2.360e-01;QD=29.38;ReadPosRankSum=0.136;SB=-3.593e+03;VQSLOD=8.89;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2825,220,0:127 1|0:33,54:87:99:1591,0,933:127 1|1:0,79:79:99:2782,214,0:127
+14 20313371 rs10137604 A C 2154.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.894e+00;DB;DP=255;Dels=0.00;FS=0.00;HaplotypeScore=2.05;MLEAC=2;MLEAF=0.333;MQ=56.32;MQ0=1;MQRankSum=1.61;QD=13.72;ReadPosRankSum=0.126;SB=-1.124e+03;VQSLOD=5.62;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,48:88:99:1426,0,1229:127 0|0:98,0:98:99:0,268,3527:127 1|0:43,26:69:99:767,0,1284:127
+14 28032147 rs67442200 AT A 9959 PASS AC=6;AF=1.00;AN=6;DB;DP=259;FS=0.00;HaplotypeScore=15.29;MLEAC=6;MLEAF=1.00;MQ=60.66;MQ0=0;QD=38.45;RPA=3,2;RU=T;SB=-4.646e+03;STR;VQSLOD=6.01;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:2,86:91:99:3493,259,0:127 1|1:3,76:79:99:3025,226,0:127 1|1:3,86:89:99:3441,256,0:127
+14 38160457 rs2181345 A C 4683.01 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.00;FS=0.00;HaplotypeScore=2.54;MLEAC=6;MLEAF=1.00;MQ=59.00;MQ0=0;QD=27.71;SB=-2.390e+03;VQSLOD=9.99;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1818,141,0:107 1|1:0,58:58:99:1523,123,0:107 1|1:0,53:55:99:1342,108,0:107
+14 47568119 rs1952206 T C 3399.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-9.721e+00;DB;DP=230;Dels=0.00;FS=0.483;HaplotypeScore=0.658;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=-4.790e-01;QD=14.78;ReadPosRankSum=1.26;SB=-1.667e+03;VQSLOD=9.16;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:41,43:84:99:1239,0,1315:127 0/1:28,43:71:99:1178,0,816:127 0/1:40,35:75:99:982,0,1314:127
+14 56951735 rs1189276 G A 6939.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=3.88;DB;DP=235;Dels=0.00;FS=9.37;HaplotypeScore=0.906;MLEAC=5;MLEAF=0.833;MQ=59.52;MQ0=0;MQRankSum=-5.500e-01;QD=29.53;ReadPosRankSum=1.10;SB=-3.438e+03;VQSLOD=8.76;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,92:93:99:3558,274,0:127 1|1:0,60:60:99:2120,165,0:127 1|0:40,42:82:99:1261,0,1194:127
+14 68051087 rs11628035 G A 4028.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.93;DB;DP=236;Dels=0.00;FS=8.18;HaplotypeScore=1.33;MLEAC=3;MLEAF=0.500;MQ=58.83;MQ0=0;MQRankSum=1.83;QD=25.49;ReadPosRankSum=2.59;SB=-1.989e+03;VQSLOD=6.79;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:1265,0,1112:127 1|1:0,81:81:99:2763,214,0:127 0|0:78,0:78:99:0,208,2673:127
+14 77813103 rs59474357 G GT 328.58 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.653e+00;DB;DP=164;FS=5.22;HaplotypeScore=117.86;MLEAC=5;MLEAF=0.833;MQ=52.18;MQ0=0;MQRankSum=1.26;QD=2.00;RPA=24,25;RU=T;ReadPosRankSum=-1.030e+00;SB=-1.639e+02;STR;VQSLOD=2.16;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:51,1:53:18:105,0,18:6 1|1:58,1:59:13:150,13,0:6 0|1:34,13:52:1:123,6,0:6
+14 87263523 rs2542229 A C 8104.01 PASS AC=6;AF=1.00;AN=6;DB;DP=239;Dels=0.00;FS=0.00;HaplotypeScore=0.631;MLEAC=6;MLEAF=1.00;MQ=59.17;MQ0=0;QD=33.91;SB=-4.393e+03;VQSLOD=11.30;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,77:77:99:2810,214,0:127 1|1:0,85:85:99:2877,223,0:127 1|1:0,77:77:99:2417,187,0:127
+14 96490389 rs72702859 C G 3394.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.529e+00;DB;DP=264;Dels=0.00;FS=2.75;HaplotypeScore=3.13;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=-1.258e+00;QD=18.25;ReadPosRankSum=-9.610e-01;SB=-1.966e+03;VQSLOD=6.34;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:34,52:86:99:1358,0,886:127 1|1:0,100:100:99:2036,180,0:127 0|0:78,0:78:99:0,184,2393:127
+14 106085773 rs2955055 C T 2115.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-7.460e-01;DB;DP=172;Dels=0.00;FS=18.42;HaplotypeScore=2.95;MLEAC=3;MLEAF=0.500;MQ=35.68;MQ0=18;MQRankSum=3.25;QD=12.30;ReadPosRankSum=0.100;SB=-5.530e+02;VQSLOD=1.29;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,33:65:99:600,0,554:80 0/1:30,42:72:99:1001,0,400:80 0/1:12,23:35:80:553,0,80:80
+15 23743658 rs142070302 T A 1007.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.164e+00;DB;DP=408;Dels=0.00;FS=166.85;HaplotypeScore=53.54;MLEAC=3;MLEAF=0.500;MQ=38.96;MQ0=14;MQRankSum=-6.283e+00;QD=2.47;ReadPosRankSum=2.49;SB=-1.079e-02;VQSLOD=-3.048e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:104,39:143:99:365,0,2802:45 0/1:99,40:139:99:636,0,2335:45 0/1:97,28:126:45:45,0,2324:45
+15 32615218 . G GA 82.61 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.361;DP=225;FS=0.00;HaplotypeScore=2.49;MLEAC=4;MLEAF=0.667;MQ=5.76;MQ0=211;MQRankSum=-8.760e-01;QD=0.560;RPA=9,10;RU=A;ReadPosRankSum=-1.159e+00;SB=-1.330e-03;STR;VQSLOD=3.74;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:41,19:3:9:88,9,0:5 1|0:62,24:5:44:44,0,77:5 1|0:76,0:1:2:0,3,31:5
+15 42065422 rs2925337 A C 5231.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=59.68;MQ0=0;QD=29.72;SB=-3.112e+03;VQSLOD=11.03;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,54:54:99:1770,138,0:127 1|1:0,68:68:99:1750,138,0:127 1|1:0,54:54:99:1711,132,0:127
+15 53677501 . T G 770.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-8.969e+00;DP=210;Dels=0.00;FS=347.47;HaplotypeScore=2.09;MLEAC=3;MLEAF=0.500;MQ=58.31;MQ0=0;MQRankSum=0.438;QD=3.67;ReadPosRankSum=-6.409e+00;SB=-5.499e-03;VQSLOD=-3.071e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:59,20:79:94:94,0,1389:94 0/1:41,31:72:99:438,0,721:94 0/1:37,21:59:99:277,0,521:94
+15 62088952 rs35033959 A T 3546.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.220e+00;DB;DP=241;Dels=0.00;FS=14.29;HaplotypeScore=0.277;MLEAC=3;MLEAF=0.500;MQ=59.77;MQ0=0;MQRankSum=-1.969e+00;QD=14.71;ReadPosRankSum=0.341;SB=-1.970e+03;VQSLOD=6.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:45,44:89:99:1265,0,1533:127 0/1:34,38:72:99:1133,0,1137:127 0/1:41,39:80:99:1148,0,1303:127
+15 71657506 . A G 140.40 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.611e+00;DP=133;Dels=0.00;FS=35.59;HaplotypeScore=4.06;MLEAC=2;MLEAF=0.333;MQ=51.29;MQ0=1;MQRankSum=-3.344e+00;QD=1.53;ReadPosRankSum=-3.999e+00;SB=-5.015e+01;VQSLOD=-4.805e+00;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:46,11:57:93:93,0,851:15 1|0:23,12:35:86:86,0,299:15 0|0:33,8:41:15:0,15,503:15
+15 83241984 rs11336258 AT A 1748.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.821e+00;DB;DP=199;FS=5.74;HaplotypeScore=29.94;MLEAC=4;MLEAF=0.667;MQ=59.67;MQ0=0;MQRankSum=1.12;QD=8.78;RPA=15,14;RU=T;ReadPosRankSum=-1.763e+00;SB=-7.830e+02;STR;VQSLOD=3.49;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:41,27:72:99:434,0,434:118 0|1:36,26:66:99:470,0,275:118 1|1:11,44:61:99:895,118,0:118
+15 92857342 rs12101550 A G 2734.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.995e+00;DB;DP=226;Dels=0.00;FS=3.76;HaplotypeScore=1.57;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=0.761;QD=12.10;ReadPosRankSum=-5.870e-01;SB=-1.469e+03;VQSLOD=9.15;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:45,37:82:99:853,0,1356:127 0/1:29,40:69:99:966,0,852:127 0/1:38,37:75:99:954,0,1085:127
+15 100799787 rs4965610 C T 2133.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.37;DB;DP=230;Dels=0.00;FS=1.04;HaplotypeScore=0.543;MLEAC=3;MLEAF=0.500;MQ=58.84;MQ0=0;MQRankSum=0.169;QD=9.28;ReadPosRankSum=-9.800e-02;SB=-1.328e+03;VQSLOD=7.88;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:40,36:76:99:948,0,701:127 0/1:45,38:83:99:761,0,635:127 0/1:35,36:71:99:463,0,706:127
+16 5754758 rs11644707 C T 1012.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.78;DB;DP=161;Dels=0.00;FS=0.00;HaplotypeScore=2.46;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=0.699;QD=9.64;ReadPosRankSum=2.62;SB=-5.580e+02;VQSLOD=7.10;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:31,26:57:99:627,0,943:125 0|0:56,0:56:99:0,126,1597:125 1|0:32,16:48:99:424,0,785:125
+16 11397080 rs1019552 T C 2295.44 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=1.000e-02;FS=0.00;HaplotypeScore=8.22;MLEAC=6;MLEAF=1.00;MQ=59.32;MQ0=0;QD=13.58;SB=-2.379e+03;VQSLOD=4.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:96:1220,96,0:9 1|1:0,48:48:9:78,9,0:9 1|1:0,48:48:81:1035,81,0:9
+16 19633462 rs11371821 C CT 239.23 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.097e+00;DB;DP=182;FS=1.34;HaplotypeScore=21.26;MLEAC=4;MLEAF=0.667;MQ=50.55;MQ0=0;MQRankSum=-1.358e+00;QD=1.31;RPA=22,23;RU=T;ReadPosRankSum=-3.963e+00;SB=-9.798e+01;STR;VQSLOD=2.31;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:61,0:63:45:70,0,45:24 1|1:44,15:58:28:192,28,0:24 0|1:52,0:60:28:28,0,37:24
+16 30509723 rs7193693 A G 497.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.054e+00;DB;DP=167;Dels=0.00;FS=0.00;HaplotypeScore=1.16;MLEAC=1;MLEAF=0.167;MQ=57.89;MQ0=0;MQRankSum=-5.450e-01;QD=9.38;ReadPosRankSum=0.541;SB=-2.410e+02;VQSLOD=8.43;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,153,2009:101 0|0:57,0:57:99:0,102,1304:101 0|1:26,27:53:99:532,0,526:101
+16 34610294 rs72812776 C T 603.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.361e+00;DB;DP=270;Dels=0.00;FS=6.07;HaplotypeScore=3.16;MLEAC=1;MLEAF=0.167;MQ=59.66;MQ0=0;MQRankSum=1.60;QD=7.83;ReadPosRankSum=0.296;SB=-2.820e+02;VQSLOD=3.37;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:123,0:123:99:0,343,4443:127 0|0:69,1:70:99:0,184,2397:127 0|1:48,29:77:99:638,0,1483:127
+16 55910673 rs17265788 G C 2345.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.66;DB;DP=208;Dels=0.00;FS=3.16;HaplotypeScore=1.92;MLEAC=3;MLEAF=0.500;MQ=59.67;MQ0=0;MQRankSum=-3.330e-01;QD=16.63;ReadPosRankSum=-4.250e-01;SB=-1.468e+03;VQSLOD=8.37;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:33,33:66:99:769,0,761:122 0|0:67,0:67:99:0,123,1506:122 1|1:0,75:75:99:1621,132,0:122
+16 65776985 rs72784548 T C 3527.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.44;DB;DP=195;Dels=0.00;FS=1.23;HaplotypeScore=0.879;MLEAC=4;MLEAF=0.667;MQ=58.78;MQ0=0;MQRankSum=1.63;QD=18.09;ReadPosRankSum=1.36;SB=-1.904e+03;VQSLOD=7.68;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2351,181,0:127 1|0:33,28:61:99:586,0,710:127 1|0:31,35:66:99:590,0,468:127
+16 77418810 rs71137811 T TG 7389 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.643;DB;DP=244;FS=2.25;HaplotypeScore=114.41;MLEAC=5;MLEAF=0.833;MQ=61.09;MQ0=0;MQRankSum=2.49;QD=30.28;ReadPosRankSum=2.98;SB=-2.597e+03;VQSLOD=2.91;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:8,84:93:99:3558,264,0:127 1|1:8,65:75:99:2723,179,0:127 1|0:42,32:76:99:1108,0,899:127
+16 83153777 rs4395063 T C 3143.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.771e+00;DB;DP=205;Dels=0.00;FS=1.80;HaplotypeScore=1.04;MLEAC=4;MLEAF=0.667;MQ=59.55;MQ0=0;MQRankSum=-1.380e+00;QD=15.33;ReadPosRankSum=0.424;SB=-2.104e+03;VQSLOD=8.82;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:31,31:62:99:867,0,865:127 0|1:45,28:73:99:412,0,801:127 1|1:0,70:70:99:1906,150,0:127
+16 88914235 rs12932521 C T 329.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.98;DB;DP=114;Dels=0.00;FS=1.93;HaplotypeScore=0.940;MLEAC=1;MLEAF=0.167;MQ=58.60;MQ0=0;MQRankSum=0.854;QD=7.84;ReadPosRankSum=-3.390e-01;SB=-2.970e+02;VQSLOD=8.10;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,102,1192:39 0|0:29,0:29:39:0,39,468:39 0|1:15,26:42:99:364,0,105:39
+17 5764764 rs2309483 C G 4071.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.24;DB;DP=154;Dels=0.00;FS=0.00;HaplotypeScore=4.41;MLEAC=5;MLEAF=0.833;MQ=58.88;MQ0=0;MQRankSum=0.456;QD=26.44;ReadPosRankSum=0.385;SB=-1.791e+03;VQSLOD=6.95;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:62:99:2049,165,0:107 1|0:23,26:49:99:648,0,482:107 1|1:0,43:43:99:1374,108,0:107
+17 14096866 . C T 489.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=4.54;DP=181;Dels=0.00;FS=33.90;HaplotypeScore=1.08;MLEAC=3;MLEAF=0.500;MQ=24.52;MQ0=71;MQRankSum=0.353;QD=2.70;ReadPosRankSum=0.385;SB=-1.450e+02;VQSLOD=-6.217e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:48,17:66:99:228,0,822:63 0/1:42,16:58:99:237,0,389:63 0/1:44,13:57:63:63,0,523:63
+17 21547285 rs62049731 A C 1322.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-9.870e-01;DB;DP=569;Dels=0.00;FS=2.32;HaplotypeScore=42.45;MLEAC=3;MLEAF=0.500;MQ=44.59;MQ0=24;MQRankSum=-6.240e+00;QD=2.32;ReadPosRankSum=-5.171e+00;SB=-6.369e+02;VQSLOD=-3.953e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:146,28:174:99:217,0,4187:127 0/1:162,56:218:99:804,0,4298:127 0/1:139,38:177:99:340,0,3842:127
+17 33513649 rs3744366 A G 3743.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.729e+00;DB;DP=213;Dels=0.00;FS=0.526;HaplotypeScore=2.91;MLEAC=4;MLEAF=0.667;MQ=58.99;MQ0=0;MQRankSum=-1.520e-01;QD=17.57;ReadPosRankSum=0.530;SB=-2.067e+03;VQSLOD=8.02;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,40:84:99:1083,0,1341:127 1|1:0,67:67:99:2074,162,0:127 0|1:37,24:62:99:586,0,1015:127
+17 44809197 rs116187585 A G 8703.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-5.540e-01;DB;DP=254;Dels=0.00;FS=3.49;HaplotypeScore=4.06;MLEAC=6;MLEAF=1.00;MQ=59.58;MQ0=0;MQRankSum=1.68;QD=34.26;ReadPosRankSum=1.48;SB=-4.228e+03;VQSLOD=6.61;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3470,268,0:127 1|1:0,82:84:99:2846,220,0:127 1|1:0,73:73:99:2387,184,0:127
+17 55158811 rs7217371 G A 2849.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.62;DB;DP=206;Dels=0.00;FS=0.511;HaplotypeScore=1.10;MLEAC=3;MLEAF=0.500;MQ=59.66;MQ0=0;MQRankSum=0.103;QD=13.83;ReadPosRankSum=0.958;SB=-1.448e+03;VQSLOD=9.94;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,31:72:99:982,0,1147:127 0/1:35,40:75:99:1236,0,984:127 0/1:32,27:59:99:670,0,882:127
+17 66991216 rs61697543 T C 738.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.530e+00;DB;DP=252;Dels=0.00;FS=1.49;HaplotypeScore=1.71;MLEAC=1;MLEAF=0.167;MQ=59.36;MQ0=0;MQRankSum=0.771;QD=10.86;ReadPosRankSum=-7.240e-01;SB=-3.930e+02;VQSLOD=8.89;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:95,0:95:99:0,268,3511:127 0|0:89,0:89:99:0,235,3058:127 0|1:33,35:68:99:773,0,965:127
+17 75679403 . TGTG T 1024.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.62;DP=161;FS=1.69;HaplotypeScore=259.32;MLEAC=2;MLEAF=0.333;MQ=51.57;MQ0=0;MQRankSum=-8.617e+00;QD=9.48;ReadPosRankSum=-4.980e-01;SB=-4.680e+02;VQSLOD=1.76;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:29,19:58:99:711,0,1547:127 1|0:34,11:50:99:361,0,1922:127 0|0:53,0:53:99:0,157,3186:127
+18 1629264 rs5025369 A G 86.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.739e+00;DB;DP=149;Dels=0.00;FS=15.36;HaplotypeScore=7.14;MLEAC=2;MLEAF=0.333;MQ=39.72;MQ0=11;MQRankSum=-2.543e+00;QD=0.810;ReadPosRankSum=0.088;SB=-3.380e+01;VQSLOD=-6.205e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,15:66:50:50,0,1143:49 0|0:37,5:42:81:0,81,941:49 1|0:35,6:41:75:75,0,818:49
+18 10010426 rs4797393 T C 4197.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.425;DB;DP=210;Dels=0.00;FS=1.13;HaplotypeScore=1.27;MLEAC=4;MLEAF=0.667;MQ=59.43;MQ0=0;MQRankSum=-2.916e+00;QD=19.99;ReadPosRankSum=0.379;SB=-2.001e+03;VQSLOD=7.03;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,65:65:99:2247,181,0:127 1|0:35,39:75:99:1170,0,967:127 1|0:41,29:70:99:780,0,1052:127
+18 20025030 rs4800406 A G 1113.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.700e+00;DB;DP=230;Dels=0.00;FS=0.00;HaplotypeScore=1.68;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=1.64;QD=12.65;ReadPosRankSum=-1.166e+00;SB=-6.160e+02;VQSLOD=8.66;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,223,2978:127 0|1:46,42:88:99:1148,0,1460:127 0|0:64,0:64:99:0,175,2303:127
+18 30361151 rs35024407 T TTG 9768 PASS AC=6;AF=1.00;AN=6;DB;DP=234;FS=0.00;HaplotypeScore=13.10;MLEAC=6;MLEAF=1.00;MQ=60.40;MQ0=2;QD=41.74;RPA=3,4;RU=TG;SB=-4.721e+03;STR;VQSLOD=5.50;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:7,80:86:99:3686,241,0:127 1|1:8,77:85:99:3454,229,0:127 1|1:3,58:61:99:2628,172,0:127
+18 41449098 rs2045671 C T 8380.01 PASS AC=6;AF=1.00;AN=6;DB;DP=237;Dels=0.00;FS=0.00;HaplotypeScore=1.35;MLEAC=6;MLEAF=1.00;MQ=59.65;MQ0=0;QD=35.36;SB=-4.462e+03;VQSLOD=11.65;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,76:76:99:2756,214,0:127 1|1:0,75:75:99:2635,202,0:127 1|1:0,86:86:99:2989,229,0:127
+18 50973169 rs11661305 A G 5320.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=2.75;DB;DP=196;Dels=0.00;FS=2.57;HaplotypeScore=1.13;MLEAC=5;MLEAF=0.833;MQ=57.73;MQ0=0;MQRankSum=0.246;QD=27.14;ReadPosRankSum=0.186;SB=-2.411e+03;VQSLOD=7.50;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2621,202,0:127 1|0:30,37:67:99:1009,0,842:127 1|1:0,55:55:99:1690,132,0:127
+18 59836086 . A AT 575.46 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.815e+00;DP=231;FS=20.46;HaplotypeScore=140.20;MLEAC=3;MLEAF=0.500;MQ=56.52;MQ0=0;MQRankSum=1.20;QD=2.49;RPA=20,21;RU=T;ReadPosRankSum=-1.968e+00;SB=-2.575e+02;STR;VQSLOD=-3.166e-01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:52,29:86:11:309,0,11:9 0/1:72,2:82:63:109,0,63:9 0/1:31,24:63:15:205,0,15:9
+18 67950442 rs62091919 T G 1779.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.517e+00;DB;DP=195;Dels=0.00;FS=0.562;HaplotypeScore=1.55;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=6.000e-03;QD=12.89;ReadPosRankSum=-2.680e-01;SB=-9.170e+02;VQSLOD=9.63;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:40,32:72:99:967,0,1318:127 0|0:55,2:57:99:0,141,1865:127 1|0:36,30:66:99:851,0,1042:127
+18 75204349 rs9948476 C T 646.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.97;DB;DP=185;Dels=0.00;FS=0.817;HaplotypeScore=1.40;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=0.276;QD=10.95;ReadPosRankSum=-1.580e-01;SB=-3.210e+02;VQSLOD=9.37;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:66:99:0,168,2026:127 0|0:60,0:60:99:0,147,1768:127 0|1:34,25:59:99:681,0,893:127
+19 3739001 rs56138006 C T 976.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.63;DB;DP=118;Dels=0.00;FS=3.68;HaplotypeScore=1.44;MLEAC=2;MLEAF=0.333;MQ=58.66;MQ0=0;MQRankSum=0.753;QD=11.22;ReadPosRankSum=1.11;SB=-6.380e+02;VQSLOD=7.45;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:612,0,559:45 0|0:31,0:31:45:0,45,527:45 1|0:12,23:35:93:403,0,93:45
+19 11730690 rs4804613 C T 2578.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=5.06;DB;DP=197;Dels=0.00;FS=0.529;HaplotypeScore=0.00;MLEAC=3;MLEAF=0.500;MQ=59.36;MQ0=0;MQRankSum=0.416;QD=13.09;ReadPosRankSum=-5.540e-01;SB=-1.389e+03;VQSLOD=9.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:21,26:47:99:586,0,623:127 0/1:42,45:87:99:1192,0,1055:127 0/1:32,30:63:99:839,0,932:127
+19 20782710 rs10413568 T C 6304.01 PASS AC=6;AF=1.00;AN=6;DB;DP=203;Dels=0.00;FS=0.00;HaplotypeScore=0.692;MLEAC=6;MLEAF=1.00;MQ=59.56;MQ0=0;QD=31.05;SB=-2.367e+03;VQSLOD=10.77;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2375,214,0:127 1|1:0,80:80:99:2480,217,0:127 1|1:0,49:49:99:1449,129,0:127
+19 28150587 rs4404191 A G 7419.01 PASS AC=6;AF=1.00;AN=6;DB;DP=209;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=6;MLEAF=1.00;MQ=59.61;MQ0=0;QD=35.50;SB=-3.717e+03;VQSLOD=11.99;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:2584,202,0:127 1|1:0,74:74:99:2509,193,0:127 1|1:0,65:65:99:2326,181,0:127
+19 37226152 rs3108217 G C 2076.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.215;DB;DP=145;Dels=0.00;FS=2.16;HaplotypeScore=0.587;MLEAC=4;MLEAF=0.667;MQ=58.59;MQ0=0;MQRankSum=1.16;QD=14.32;ReadPosRankSum=-7.250e-01;SB=-1.027e+03;VQSLOD=7.49;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:25,30:55:99:789,0,709:63 1|1:0,29:29:63:772,63,0:63 0|1:35,25:61:99:557,0,789:63
+19 47012249 rs60424854 ATTTTT A 1121.22 VQSRTrancheINDEL99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.922e+00;DB;DP=144;FS=61.85;HaplotypeScore=338.74;MLEAC=2;MLEAF=0.333;MQ=44.50;MQ0=1;MQRankSum=-2.345e+00;QD=10.29;RPA=16,11;RU=T;ReadPosRankSum=5.64;SB=-1.090e+02;STR;VQSLOD=-2.399e+00;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:30,9:43:99:371,0,961:89 1|0:44,15:63:99:798,0,1293:89 0|0:32,0:33:89:0,89,1424:89
+19 54644879 rs36636 G A 1790.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.51;DB;DP=187;Dels=0.00;FS=4.41;HaplotypeScore=1.50;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-1.266e+00;QD=13.88;ReadPosRankSum=-1.226e+00;SB=-1.081e+03;VQSLOD=7.80;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:30,27:57:99:811,0,726:127 1|0:31,41:72:99:1018,0,730:127 0|0:58,0:58:99:0,144,1815:127
+20 3199373 rs2422861 G A 896.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.452;DB;DP=135;Dels=0.00;FS=0.664;HaplotypeScore=2.84;MLEAC=3;MLEAF=0.500;MQ=58.47;MQ0=0;MQRankSum=-2.170e-01;QD=6.64;ReadPosRankSum=0.111;SB=-6.080e+02;VQSLOD=7.71;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,24:56:99:472,0,640:127 0/1:25,15:40:99:229,0,603:127 0/1:20,19:39:99:234,0,379:127
+20 12166868 rs7272217 C T 926.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.444e+00;DB;DP=200;Dels=0.00;FS=2.63;HaplotypeScore=0.841;MLEAC=1;MLEAF=0.167;MQ=58.94;MQ0=0;MQRankSum=-1.362e+00;QD=13.23;ReadPosRankSum=-1.055e+00;SB=-4.040e+02;VQSLOD=7.62;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:68,0:68:99:0,190,2486:127 0|0:62,0:62:99:0,169,2218:127 0|1:33,37:70:99:961,0,870:127
+20 21523349 rs73127889 A G 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.469e+00;DB;DP=253;Dels=0.00;FS=3.73;HaplotypeScore=1.54;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=0.821;QD=13.69;ReadPosRankSum=1.51;SB=-8.640e+02;VQSLOD=7.84;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:44,48:92:99:1319,0,1356:127 0|0:86,0:86:99:0,235,2994:127 1|0:37,38:75:99:1006,0,1111:127
+20 29566945 rs6119037 C G 1427.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-3.826e+00;DB;DP=271;Dels=0.00;FS=1.15;HaplotypeScore=2.76;MLEAC=2;MLEAF=0.333;MQ=47.42;MQ0=21;MQRankSum=2.42;QD=8.06;ReadPosRankSum=0.363;SB=-7.560e+02;VQSLOD=1.79;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:59,32:91:99:782,0,1210:127 1|0:55,31:86:99:684,0,1422:127 0|0:94,0:94:99:0,208,2592:127
+20 41560394 rs761027 A G 5634.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.444e+00;DB;DP=222;Dels=0.00;FS=0.829;HaplotypeScore=1.14;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=0.392;QD=25.38;ReadPosRankSum=-6.400e-02;SB=-3.048e+03;VQSLOD=10.04;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2228,187,0:127 1|1:0,82:82:99:2435,211,0:127 1|0:25,43:68:99:971,0,567:127
+20 51353834 rs241795 G A 6115.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=7.91;DB;DP=268;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=4;MLEAF=0.667;MQ=59.38;MQ0=0;MQRankSum=-5.180e-01;QD=22.82;ReadPosRankSum=-2.530e-01;SB=-3.328e+03;VQSLOD=8.40;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:46,54:100:99:1663,0,1247:127 1|1:0,91:91:99:3189,247,0:127 0|1:36,41:77:99:1263,0,901:127
+20 59978756 rs1892320 T C 3967.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.562e+00;DB;DP=206;Dels=0.00;FS=14.25;HaplotypeScore=1.38;MLEAC=4;MLEAF=0.667;MQ=59.89;MQ0=0;MQRankSum=-2.890e-01;QD=19.26;ReadPosRankSum=0.221;SB=-2.292e+03;VQSLOD=7.62;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2337,181,0:127 1|0:38,29:67:99:743,0,1180:127 1|0:31,36:67:99:887,0,873:127
+21 10750991 . C T 602.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=10.10;DP=735;DS;Dels=0.00;FS=27.02;HaplotypeScore=107.27;MLEAC=2;MLEAF=0.333;MQ=44.40;MQ0=2;MQRankSum=-1.456e+01;QD=1.24;ReadPosRankSum=0.063;SB=-8.430e+02;VQSLOD=-1.009e+02;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:164,78:243:99:357,0,5193:103 1|0:187,55:242:99:284,0,5252:103 0|0:199,50:250:99:0,103,5864:103
+21 18433036 rs969905 A G 781.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.610e+00;DB;DP=229;Dels=0.00;FS=2.23;HaplotypeScore=1.29;MLEAC=1;MLEAF=0.167;MQ=59.55;MQ0=0;MQRankSum=0.300;QD=10.15;ReadPosRankSum=-3.840e-01;SB=-4.990e+02;VQSLOD=9.58;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:63:99:0,181,2380:127 0|0:89,0:89:99:0,244,3177:127 0|1:39,38:77:99:816,0,1256:127
+21 25702950 rs2260875 C G 3462.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.156;DB;DP=237;Dels=0.00;FS=2.90;HaplotypeScore=1.54;MLEAC=3;MLEAF=0.500;MQ=59.04;MQ0=0;MQRankSum=0.386;QD=14.61;ReadPosRankSum=-1.455e+00;SB=-1.683e+03;VQSLOD=8.05;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:37,40:77:99:1282,0,1101:127 0/1:43,36:79:99:1114,0,1317:127 0/1:45,36:81:99:1066,0,1329:127
+21 34546711 rs11701692 T C 1030.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.884e+00;DB;DP=152;Dels=0.00;FS=8.32;HaplotypeScore=1.93;MLEAC=2;MLEAF=0.333;MQ=57.61;MQ0=0;MQRankSum=-2.910e-01;QD=10.51;ReadPosRankSum=0.258;SB=-4.600e+02;VQSLOD=6.46;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,25:61:99:574,0,1137:127 1|0:19,18:37:99:495,0,498:127 0|0:54,0:54:99:0,141,1811:127
+21 42833227 rs460904 T C 3179.23 PASS AC=6;AF=1.00;AN=6;DB;DP=155;Dels=0.00;FS=0.00;HaplotypeScore=2.46;MLEAC=6;MLEAF=1.00;MQ=58.18;MQ0=0;QD=20.51;SB=-2.173e+03;VQSLOD=7.70;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,60:60:90:1085,90,0:74 1|1:0,54:54:96:1172,96,0:74 1|1:0,41:41:75:960,75,0:74
+22 17351507 rs5748687 G A 4244.01 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=-2.240e-01;DB;DP=261;Dels=0.00;FS=0.710;HaplotypeScore=1.72;MLEAC=5;MLEAF=0.833;MQ=28.84;MQ0=57;MQRankSum=-7.852e+00;QD=16.26;ReadPosRankSum=-1.243e+00;SB=-2.174e+03;VQSLOD=-1.710e+00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:1529,141,0:127 1|0:34,49:83:99:727,0,1065:127 1|1:0,86:86:99:1988,180,0:127
+22 24416101 rs66532277 C CTT 458.98 VQSRTrancheINDEL99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-4.190e+00;DB;DP=251;FS=68.55;HaplotypeScore=55.31;MLEAC=3;MLEAF=0.500;MQ=51.85;MQ0=3;MQRankSum=2.42;QD=1.83;RPA=23,25;RU=T;ReadPosRankSum=2.88;SB=-3.571e+01;STR;VQSLOD=-2.028e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:68,20:91:65:207,0,65:3 0/1:84,0:83:0:184,0,0:3 0/1:72,0:72:83:114,0,83:3
+22 34204930 rs13053313 T C 435.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.517e+00;DB;DP=82;Dels=0.00;FS=5.84;HaplotypeScore=0.533;MLEAC=1;MLEAF=0.167;MQ=58.65;MQ0=0;MQRankSum=1.12;QD=12.80;ReadPosRankSum=-1.270e+00;SB=-1.170e+02;VQSLOD=6.44;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:12,0:12:27:0,27,360:27 0|1:16,18:34:99:470,0,403:27 0|0:36,0:36:93:0,93,1230:27
+22 43356130 rs6519353 A C 3526.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.809;DB;DP=228;Dels=0.00;FS=6.34;HaplotypeScore=1.63;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-1.460e-01;QD=22.46;ReadPosRankSum=2.03;SB=-1.954e+03;VQSLOD=8.50;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:40,41:81:99:1020,0,1222:127 1|1:0,76:76:99:2506,196,0:127 0|0:71,0:71:99:0,165,2091:127
+22 50309915 rs9616205 A T 1712.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-9.360e-01;DB;DP=162;Dels=0.00;FS=2.86;HaplotypeScore=2.15;MLEAC=2;MLEAF=0.333;MQ=56.21;MQ0=5;MQRankSum=0.892;QD=13.92;ReadPosRankSum=-1.040e+00;SB=-9.940e+02;VQSLOD=6.28;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:39,33:72:99:777,0,994:78 0|0:39,0:39:78:0,78,1010:78 1|0:16,35:51:99:974,0,257:78
+X 4712340 rs5915814 C A 2233.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.78;DB;DP=176;Dels=0.00;FS=0.00;HaplotypeScore=0.443;MLEAC=2;MLEAF=0.333;MQ=59.50;MQ0=0;MQRankSum=-1.782e+00;QD=15.73;ReadPosRankSum=0.359;SB=-1.240e+03;VQSLOD=8.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:32,37:69:99:1114,0,859:81 0|0:34,0:34:81:0,81,948:81 1|0:32,41:73:99:1158,0,575:81
+X 23948720 rs35152285 C CA 535.35 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.538e+00;DB;DP=148;FS=0.00;HaplotypeScore=24.32;MLEAC=3;MLEAF=0.500;MQ=53.02;MQ0=0;MQRankSum=0.234;QD=3.62;RPA=16,17;RU=A;ReadPosRankSum=-1.638e+00;SB=-2.841e+02;STR;VQSLOD=3.02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:37,27:68:62:391,0,62:13 0/1:16,8:25:13:102,0,13:13 0/1:47,4:53:90:90,0,142:13
+X 42192093 rs58959554 T C 1058.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-5.464e+00;DB;DP=190;Dels=0.00;FS=6.81;HaplotypeScore=1.88;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-2.120e-01;QD=15.34;ReadPosRankSum=-1.730e-01;SB=-3.970e+02;VQSLOD=8.06;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,182,2683:127 0|0:50,0:50:99:0,138,1794:127 0|1:31,38:69:99:1093,0,947:127
+X 66290558 rs1606094 C T 2602.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.17;DB;DP=213;Dels=0.00;FS=13.13;HaplotypeScore=0.00;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=1.34;QD=18.86;ReadPosRankSum=2.27;SB=-1.122e+03;VQSLOD=6.00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:54,47:101:99:1381,0,1762:99 1|1:0,37:37:99:1266,99,0:99 0|0:75,0:75:99:0,205,2705:99
+X 84165195 rs5923187 C A 1009.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.103e+00;DB;DP=194;Dels=0.00;FS=3.07;HaplotypeScore=2.82;MLEAC=1;MLEAF=0.167;MQ=59.31;MQ0=0;MQRankSum=-6.750e-01;QD=12.01;ReadPosRankSum=-1.463e+00;SB=-5.890e+02;VQSLOD=8.24;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:79,1:80:99:0,223,2856:60 0|0:30,0:30:60:0,60,764:60 0|1:40,44:84:99:1044,0,1007:60
+X 95868251 . G A 108.36 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=1.44;DP=90;Dels=0.00;FS=4.21;HaplotypeScore=4.94;MLEAC=2;MLEAF=0.333;MQ=44.60;MQ0=8;MQRankSum=-2.939e+00;QD=1.55;ReadPosRankSum=2.87;SB=-7.411e+01;VQSLOD=-3.242e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:29,9:38:99:126,0,251:23 0|0:20,0:20:24:0,24,266:23 1|0:27,5:32:21:21,0,97:23
+X 116855730 rs980389 A G 2366.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.939e+00;DB;DP=173;Dels=0.00;FS=3.51;HaplotypeScore=0.908;MLEAC=3;MLEAF=0.500;MQ=59.87;MQ0=0;MQRankSum=0.653;QD=21.51;ReadPosRankSum=0.730;SB=-1.218e+03;VQSLOD=7.96;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:965,0,1249:114 1|1:0,40:40:99:1446,114,0:114 0|0:63,0:63:99:0,175,2284:114
+X 135282092 rs5974586 G C 2193.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.26;DB;DP=203;Dels=0.00;FS=0.540;HaplotypeScore=0.659;MLEAC=2;MLEAF=0.333;MQ=59.47;MQ0=0;MQRankSum=1.00;QD=13.46;ReadPosRankSum=1.34;SB=-1.069e+03;VQSLOD=9.09;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:47,33:80:99:1026,0,1466:116 0|0:40,0:40:99:0,117,1486:116 1|0:43,40:83:99:1206,0,1311:116
+X 150239197 rs6627349 T C 4677.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.731;DB;DP=179;Dels=0.00;FS=0.00;HaplotypeScore=1.61;MLEAC=5;MLEAF=0.833;MQ=59.69;MQ0=0;MQRankSum=0.676;QD=26.13;ReadPosRankSum=0.494;SB=-2.442e+03;VQSLOD=10.55;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,66:66:99:2387,190,0:99 1|1:0,40:40:99:1243,99,0:99 1|0:36,37:73:99:1047,0,1039:99
+Y 13265732 . C T 356.72 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=2.82;DP=142;Dels=0.00;FS=7.94;HaplotypeScore=19.82;MLEAC=2;MLEAF=0.333;MQ=38.22;MQ0=11;MQRankSum=-2.145e+00;QD=5.10;ReadPosRankSum=1.49;SB=-1.466e+00;VQSLOD=-1.443e+01;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,15:50:99:327,0,624:5 0|0:65,7:72:4:0,4,1831:5 1|0:15,5:20:67:67,0,227:5
+Y 59024923 . A T 1977.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.84;DP=745;DS;Dels=0.00;FS=0.367;HaplotypeScore=8.30;MLEAC=3;MLEAF=0.500;MQ=43.53;MQ0=19;MQRankSum=2.50;QD=2.65;ReadPosRankSum=0.098;SB=-9.720e+02;VQSLOD=-3.676e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:208,42:250:99:730,0,6428:127 0/1:210,35:245:99:588,0,6218:127 0/1:208,42:250:99:698,0,6060:127
+GL000214.1 115144 . C T 102.07 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=0.854;DP=103;Dels=0.00;FS=14.19;HaplotypeScore=14.95;MLEAC=2;MLEAF=0.333;MQ=38.45;MQ0=1;MQRankSum=-2.314e+00;QD=1.05;ReadPosRankSum=1.48;SB=-6.153e+01;VQSLOD=-1.476e+01;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:6,0:6:3:0,3,22:4 0|1:9,11:20:16:81,0,16:4 0|1:63,14:77:58:58,0,908:4
+GL000215.1 142616 . T C 976.25 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DP=80;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=21.04;MQ0=42;QD=12.20;SB=-8.001e+01;VQSLOD=-4.104e-01;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,33:33:42:516,42,0:19 1|1:0,21:21:24:272,24,0:19 1|1:0,26:26:21:226,21,0:19
+GL000212.1 28454 . T C 2248.99 VQSRTrancheSNP99.00to99.90 AC=4;AF=1.00;AN=4;BaseQRankSum=1.69;DP=94;Dels=0.00;FS=3.27;HaplotypeScore=0.962;MLEAC=4;MLEAF=1.00;MQ=36.99;MQ0=7;MQRankSum=-4.280e-01;QD=24.18;ReadPosRankSum=-1.284e+00;SB=-1.053e+03;VQSLOD=1.24;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,29:29:63:755,63,0:63 ./. 1|1:1,63:64:99:1530,135,0:63
diff --git a/testdata/net/sf/picard/vcf/vcfFormatTest.bcf b/testdata/picard/vcf/vcfFormatTest.bcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/vcfFormatTest.bcf
rename to testdata/picard/vcf/vcfFormatTest.bcf
diff --git a/testdata/net/sf/picard/vcf/vcfFormatTest.bcf.idx b/testdata/picard/vcf/vcfFormatTest.bcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/vcfFormatTest.bcf.idx
rename to testdata/picard/vcf/vcfFormatTest.bcf.idx
diff --git a/testdata/picard/vcf/vcfFormatTest.scrambled.vcf b/testdata/picard/vcf/vcfFormatTest.scrambled.vcf
new file mode 100644
index 0000000..e188ad2
--- /dev/null
+++ b/testdata/picard/vcf/vcfFormatTest.scrambled.vcf
@@ -0,0 +1,446 @@
+##fileformat=VCFv4.1
+##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null do [...]
+##CombineVariants="analysis_type=CombineVariants 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null use [...]
+##FILTER=<ID=LowQual,Description="Low quality">
+##FILTER=<ID=VQSRTrancheINDEL99.00to99.90,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -4.1718 <= x < -0.8611">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00+,Description="Truth sensitivity tranche level for INDEL model at VQS Lod < -727.2136">
+##FILTER=<ID=VQSRTrancheINDEL99.90to100.00,Description="Truth sensitivity tranche level for INDEL model at VQS Lod: -727.2136 <= x < -4.1718">
+##FILTER=<ID=VQSRTrancheSNP99.00to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -25.4561 <= x < 3.2489">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -38672.7015">
+##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -38672.7015 <= x < -25.4561">
+##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=Integer,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">
+##FORMAT=<ID=TP,Number=1,Type=Integer,Description="Phred score of the genotype combination and phase given that the genotypes are correct">
+##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=END,Number=1,Type=Integer,Description="Stop position of the interval">
+##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
+##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
+##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
+##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
+##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
+##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
+##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
+##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
+##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
+##PhaseByTransmission="analysis_type=PhaseByTransmission 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 interval_padding=0 reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog= [...]
+##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/gsa-hpprojects/NA12878Collection/bams/CEUTrio.HiSeq.WGS.b37.list] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/broad/hptmp/ami/tmp/queueScatterGather/.qlog/CEUTrio.indelcall-sg/temp_020_of_300/scatter.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_s [...]
+##contig=<ID=1,length=249250621,assembly=b37>
+##contig=<ID=2,length=243199373,assembly=b37>
+##contig=<ID=3,length=198022430,assembly=b37>
+##contig=<ID=4,length=191154276,assembly=b37>
+##contig=<ID=5,length=180915260,assembly=b37>
+##contig=<ID=6,length=171115067,assembly=b37>
+##contig=<ID=7,length=159138663,assembly=b37>
+##contig=<ID=8,length=146364022,assembly=b37>
+##contig=<ID=9,length=141213431,assembly=b37>
+##contig=<ID=10,length=135534747,assembly=b37>
+##contig=<ID=11,length=135006516,assembly=b37>
+##contig=<ID=12,length=133851895,assembly=b37>
+##contig=<ID=13,length=115169878,assembly=b37>
+##contig=<ID=14,length=107349540,assembly=b37>
+##contig=<ID=15,length=102531392,assembly=b37>
+##contig=<ID=16,length=90354753,assembly=b37>
+##contig=<ID=17,length=81195210,assembly=b37>
+##contig=<ID=18,length=78077248,assembly=b37>
+##contig=<ID=19,length=59128983,assembly=b37>
+##contig=<ID=20,length=63025520,assembly=b37>
+##contig=<ID=21,length=48129895,assembly=b37>
+##contig=<ID=22,length=51304566,assembly=b37>
+##contig=<ID=X,length=155270560,assembly=b37>
+##contig=<ID=Y,length=59373566,assembly=b37>
+##contig=<ID=MT,length=16569,assembly=b37>
+##contig=<ID=GL000207.1,length=4262,assembly=b37>
+##contig=<ID=GL000226.1,length=15008,assembly=b37>
+##contig=<ID=GL000229.1,length=19913,assembly=b37>
+##contig=<ID=GL000231.1,length=27386,assembly=b37>
+##contig=<ID=GL000210.1,length=27682,assembly=b37>
+##contig=<ID=GL000239.1,length=33824,assembly=b37>
+##contig=<ID=GL000235.1,length=34474,assembly=b37>
+##contig=<ID=GL000201.1,length=36148,assembly=b37>
+##contig=<ID=GL000247.1,length=36422,assembly=b37>
+##contig=<ID=GL000245.1,length=36651,assembly=b37>
+##contig=<ID=GL000197.1,length=37175,assembly=b37>
+##contig=<ID=GL000203.1,length=37498,assembly=b37>
+##contig=<ID=GL000246.1,length=38154,assembly=b37>
+##contig=<ID=GL000249.1,length=38502,assembly=b37>
+##contig=<ID=GL000196.1,length=38914,assembly=b37>
+##contig=<ID=GL000248.1,length=39786,assembly=b37>
+##contig=<ID=GL000244.1,length=39929,assembly=b37>
+##contig=<ID=GL000238.1,length=39939,assembly=b37>
+##contig=<ID=GL000202.1,length=40103,assembly=b37>
+##contig=<ID=GL000234.1,length=40531,assembly=b37>
+##contig=<ID=GL000232.1,length=40652,assembly=b37>
+##contig=<ID=GL000206.1,length=41001,assembly=b37>
+##contig=<ID=GL000240.1,length=41933,assembly=b37>
+##contig=<ID=GL000236.1,length=41934,assembly=b37>
+##contig=<ID=GL000241.1,length=42152,assembly=b37>
+##contig=<ID=GL000243.1,length=43341,assembly=b37>
+##contig=<ID=GL000242.1,length=43523,assembly=b37>
+##contig=<ID=GL000230.1,length=43691,assembly=b37>
+##contig=<ID=GL000237.1,length=45867,assembly=b37>
+##contig=<ID=GL000233.1,length=45941,assembly=b37>
+##contig=<ID=GL000204.1,length=81310,assembly=b37>
+##contig=<ID=GL000198.1,length=90085,assembly=b37>
+##contig=<ID=GL000208.1,length=92689,assembly=b37>
+##contig=<ID=GL000191.1,length=106433,assembly=b37>
+##contig=<ID=GL000227.1,length=128374,assembly=b37>
+##contig=<ID=GL000228.1,length=129120,assembly=b37>
+##contig=<ID=GL000214.1,length=137718,assembly=b37>
+##contig=<ID=GL000221.1,length=155397,assembly=b37>
+##contig=<ID=GL000209.1,length=159169,assembly=b37>
+##contig=<ID=GL000218.1,length=161147,assembly=b37>
+##contig=<ID=GL000220.1,length=161802,assembly=b37>
+##contig=<ID=GL000213.1,length=164239,assembly=b37>
+##contig=<ID=GL000211.1,length=166566,assembly=b37>
+##contig=<ID=GL000199.1,length=169874,assembly=b37>
+##contig=<ID=GL000217.1,length=172149,assembly=b37>
+##contig=<ID=GL000216.1,length=172294,assembly=b37>
+##contig=<ID=GL000215.1,length=172545,assembly=b37>
+##contig=<ID=GL000205.1,length=174588,assembly=b37>
+##contig=<ID=GL000219.1,length=179198,assembly=b37>
+##contig=<ID=GL000224.1,length=179693,assembly=b37>
+##contig=<ID=GL000223.1,length=180455,assembly=b37>
+##contig=<ID=GL000195.1,length=182896,assembly=b37>
+##contig=<ID=GL000212.1,length=186858,assembly=b37>
+##contig=<ID=GL000222.1,length=186861,assembly=b37>
+##contig=<ID=GL000200.1,length=187035,assembly=b37>
+##contig=<ID=GL000193.1,length=189789,assembly=b37>
+##contig=<ID=GL000194.1,length=191469,assembly=b37>
+##contig=<ID=GL000225.1,length=211173,assembly=b37>
+##contig=<ID=GL000192.1,length=547496,assembly=b37>
+##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
+##source=PhaseByTransmission
+#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
+X 135282092 rs5974586 G C 2193.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.26;DB;DP=203;Dels=0.00;FS=0.540;HaplotypeScore=0.659;MLEAC=2;MLEAF=0.333;MQ=59.47;MQ0=0;MQRankSum=1.00;QD=13.46;ReadPosRankSum=1.34;SB=-1.069e+03;VQSLOD=9.09;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:47,33:80:99:1026,0,1466:116 0|0:40,0:40:99:0,117,1486:116 1|0:43,40:83:99:1206,0,1311:116
+3 68765638 rs1504297 C G 4623.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-5.561e+00;DB;DP=225;Dels=0.00;FS=3.18;HaplotypeScore=0.843;MLEAC=4;MLEAF=0.667;MQ=59.80;MQ0=0;MQRankSum=-6.190e-01;QD=20.55;ReadPosRankSum=-1.001e+00;SB=-2.371e+03;VQSLOD=8.74;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:40,39:79:99:1220,0,1330:127 1|1:0,75:75:99:2518,205,0:127 0|1:37,34:71:99:885,0,1185:127
+12 48120010 rs3829317 A C 4015.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.66;DB;DP=162;Dels=0.00;FS=1.83;HaplotypeScore=2.18;MLEAC=5;MLEAF=0.833;MQ=59.48;MQ0=0;MQRankSum=0.154;QD=24.78;ReadPosRankSum=0.482;SB=-2.240e+03;VQSLOD=8.13;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2024,163,0:110 1|0:24,27:51:99:550,0,540:110 1|1:0,48:48:99:1441,111,0:110
+11 65339346 rs1194104 C T 1804.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.465e+00;DB;DP=189;Dels=0.00;FS=8.43;HaplotypeScore=2.27;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=-1.200e-01;QD=13.67;ReadPosRankSum=-3.060e-01;SB=-1.061e+03;VQSLOD=7.95;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,157,2050:127 0|1:30,35:65:99:781,0,822:127 0|1:23,44:67:99:1062,0,690:127
+4 152029268 . CT C 358.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.69;DP=199;FS=13.72;HaplotypeScore=32.57;MLEAC=2;MLEAF=0.333;MQ=55.17;MQ0=0;MQRankSum=-9.150e-01;QD=2.42;RPA=17,16;RU=T;ReadPosRankSum=0.548;SB=-1.419e+02;STR;VQSLOD=0.393;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:50,15:75:99:301,0,225:38 1|0:56,11:72:99:105,0,209:38 0|0:46,2:51:38:0,38,284:38
+2 1143476 rs4998209 C T 1483.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.814e+00;DB;DP=189;Dels=0.00;FS=5.61;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=58.36;MQ0=0;MQRankSum=1.58;QD=12.06;ReadPosRankSum=0.326;SB=-9.320e+02;VQSLOD=6.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,178,2264:127 0|1:33,38:71:99:844,0,1024:127 0|1:26,26:52:99:678,0,719:127
+14 38160457 rs2181345 A C 4683.01 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=0.00;FS=0.00;HaplotypeScore=2.54;MLEAC=6;MLEAF=1.00;MQ=59.00;MQ0=0;QD=27.71;SB=-2.390e+03;VQSLOD=9.99;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1818,141,0:107 1|1:0,58:58:99:1523,123,0:107 1|1:0,53:55:99:1342,108,0:107
+2 198567638 rs12619333 C G 2201.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.800e-02;DB;DP=240;Dels=0.00;FS=4.76;HaplotypeScore=1.37;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=1;MQRankSum=0.131;QD=13.42;ReadPosRankSum=0.123;SB=-1.051e+03;VQSLOD=8.13;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:38,45:84:99:1298,0,1249:127 1|0:45,35:80:99:942,0,1493:127 0|0:76,0:76:99:0,196,2542:127
+5 80900719 rs2917540 G T 4938.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.26;DB;DP=240;Dels=0.00;FS=0.489;HaplotypeScore=0.596;MLEAC=4;MLEAF=0.667;MQ=59.63;MQ0=0;MQRankSum=-2.115e+00;QD=20.58;ReadPosRankSum=0.288;SB=-2.548e+03;VQSLOD=8.44;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:52,40:92:99:1207,0,1768:127 0|1:37,33:70:99:960,0,1205:127 1|1:0,78:78:99:2771,211,0:127
+11 10741836 rs72853043 G A 175.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=0.127;DB;DP=174;Dels=0.00;FS=7.09;HaplotypeScore=7.46;MLEAC=1;MLEAF=0.167;MQ=55.72;MQ0=1;MQRankSum=-1.291e+00;QD=3.44;ReadPosRankSum=-1.185e+00;SB=-2.220e+02;VQSLOD=1.61;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,105,1278:65 0|0:42,0:45:66:0,66,802:65 0|1:21,29:51:99:210,0,469:65
+7 158686803 rs55765467 T C 200.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.011e+01;DB;DP=310;Dels=0.00;FS=2.60;HaplotypeScore=1.28;MLEAC=3;MLEAF=0.500;MQ=47.32;MQ0=0;MQRankSum=-4.959e+00;QD=0.650;ReadPosRankSum=-1.096e+01;SB=-1.206e+03;VQSLOD=-1.764e+01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:64,33:97:99:148,0,1949:32 0/1:73,45:118:58:58,0,2287:32 0/1:65,30:95:33:33,0,1910:32
+1 59635894 rs331648 T A 839.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.038e+00;DB;DP=211;Dels=0.00;FS=1.43;HaplotypeScore=1.55;MLEAC=1;MLEAF=0.167;MQ=58.68;MQ0=0;MQRankSum=-4.220e-01;QD=11.82;ReadPosRankSum=-1.800e-01;SB=-5.520e+02;VQSLOD=7.95;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,199,2578:127 0|0:62,0:62:99:0,169,2205:127 0|1:33,38:71:99:874,0,897:127
+8 113376378 rs41340951 T C 4379.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.019e+00;DB;DP=211;Dels=0.00;FS=1.83;HaplotypeScore=0.263;MLEAC=4;MLEAF=0.667;MQ=59.85;MQ0=0;MQRankSum=1.27;QD=20.75;ReadPosRankSum=0.144;SB=-1.893e+03;VQSLOD=8.84;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,67:67:99:2221,187,0:127 1|0:32,37:69:99:1083,0,1066:127 1|0:35,40:75:99:1075,0,1108:127
+8 56608897 rs57623198 C T 1911.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.515e+00;DB;DP=229;Dels=0.00;FS=0.00;HaplotypeScore=1.13;MLEAC=2;MLEAF=0.333;MQ=59.80;MQ0=0;MQRankSum=0.336;QD=12.66;ReadPosRankSum=-2.326e+00;SB=-9.730e+02;VQSLOD=8.56;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,229,2989:127 0|1:44,30:74:99:897,0,1444:127 0|1:44,33:77:99:1053,0,1400:127
+8 14463368 rs1355302 T A 2523.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.79;DB;DP=236;Dels=0.00;FS=3.78;HaplotypeScore=0.324;MLEAC=2;MLEAF=0.333;MQ=59.14;MQ0=0;MQRankSum=-3.810e-01;QD=15.97;ReadPosRankSum=-4.500e-02;SB=-1.421e+03;VQSLOD=7.69;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,43:79:99:1332,0,1176:127 0|0:78,0:78:99:0,214,2749:127 1|0:35,44:79:99:1230,0,1162:127
+20 51353834 rs241795 G A 6115.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=7.91;DB;DP=268;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=4;MLEAF=0.667;MQ=59.38;MQ0=0;MQRankSum=-5.180e-01;QD=22.82;ReadPosRankSum=-2.530e-01;SB=-3.328e+03;VQSLOD=8.40;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:46,54:100:99:1663,0,1247:127 1|1:0,91:91:99:3189,247,0:127 0|1:36,41:77:99:1263,0,901:127
+3 99106655 rs2623376 A G 1093.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.49;DB;DP=191;Dels=0.00;FS=2.28;HaplotypeScore=0.627;MLEAC=2;MLEAF=0.333;MQ=59.76;MQ0=0;MQRankSum=-1.141e+00;QD=9.51;ReadPosRankSum=0.079;SB=-5.610e+02;VQSLOD=8.15;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:653,0,970:127 0|0:76,0:76:99:0,193,2462:127 1|0:44,19:63:99:479,0,1261:127
+6 26687649 . G C 1654.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=9.72;DP=410;Dels=0.00;FS=5.97;HaplotypeScore=5.08;MLEAC=2;MLEAF=0.333;MQ=28.19;MQ0=32;MQRankSum=0.048;QD=6.17;ReadPosRankSum=0.408;SB=-5.110e+02;VQSLOD=-8.735e+00;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:117,49:166:99:1013,0,2495:127 0|0:141,1:142:99:0,244,2576:127 1|0:70,32:102:99:680,0,1048:127
+2 133338909 rs72548244 CT C 2103.21 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.444;DB;DP=212;FS=5.22;HaplotypeScore=27.63;MLEAC=5;MLEAF=0.833;MQ=59.64;MQ0=0;MQRankSum=2.43;QD=9.92;RPA=15,14;RU=T;ReadPosRankSum=2.78;SB=-1.050e+03;STR;VQSLOD=2.66;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:17,39:59:61:837,61,0:60 1|0:47,22:72:99:241,0,444:60 1|1:20,58:81:74:1076,74,0:60
+1 25154033 rs55822956 GT G 743.25 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.32;DB;DP=214;FS=2.27;HaplotypeScore=77.33;MLEAC=3;MLEAF=0.500;MQ=55.48;MQ0=0;MQRankSum=0.114;QD=3.47;RPA=19,18;RU=T;ReadPosRankSum=0.884;SB=-3.070e+02;STR;VQSLOD=2.10;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:60,12:82:67:292,0,67:18 0/1:55,7:69:42:245,0,42:18 0/1:37,21:60:18:254,0,18:18
+7 79508376 rs2525826 G T 716.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.15;DB;DP=196;Dels=0.00;FS=0.00;HaplotypeScore=0.866;MLEAC=1;MLEAF=0.167;MQ=59.48;MQ0=0;MQRankSum=1.42;QD=13.51;ReadPosRankSum=0.263;SB=-4.080e+02;VQSLOD=9.57;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:65:99:0,181,2312:127 0|0:78,0:78:99:0,226,2916:127 0|1:27,26:53:99:751,0,845:127
+15 100799787 rs4965610 C T 2133.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.37;DB;DP=230;Dels=0.00;FS=1.04;HaplotypeScore=0.543;MLEAC=3;MLEAF=0.500;MQ=58.84;MQ0=0;MQRankSum=0.169;QD=9.28;ReadPosRankSum=-9.800e-02;SB=-1.328e+03;VQSLOD=7.88;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:40,36:76:99:948,0,701:127 0/1:45,38:83:99:761,0,635:127 0/1:35,36:71:99:463,0,706:127
+3 189981901 . A G 179.25 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=2.26;DP=274;Dels=0.00;FS=73.74;HaplotypeScore=1.83;MLEAC=1;MLEAF=0.167;MQ=54.08;MQ0=6;MQRankSum=-2.651e+00;QD=1.97;ReadPosRankSum=-6.101e+00;SB=-6.400e+01;VQSLOD=-1.820e+01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:64,27:91:99:214,0,679:51 1|0:78,10:88:0:0,21,1685:51 0|0:86,9:95:74:0,74,1891:51
+5 102962771 rs6866105 A G 5087.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.665e+00;DB;DP=200;Dels=0.00;FS=8.08;HaplotypeScore=2.28;MLEAC=5;MLEAF=0.833;MQ=58.71;MQ0=0;MQRankSum=-5.030e-01;QD=25.44;ReadPosRankSum=-4.820e-01;SB=-2.172e+03;VQSLOD=7.22;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2373,184,0:127 1|1:0,59:59:99:1776,141,0:127 1|0:31,35:66:99:938,0,803:127
+22 34204930 rs13053313 T C 435.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.517e+00;DB;DP=82;Dels=0.00;FS=5.84;HaplotypeScore=0.533;MLEAC=1;MLEAF=0.167;MQ=58.65;MQ0=0;MQRankSum=1.12;QD=12.80;ReadPosRankSum=-1.270e+00;SB=-1.170e+02;VQSLOD=6.44;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:12,0:12:27:0,27,360:27 0|1:16,18:34:99:470,0,403:27 0|0:36,0:36:93:0,93,1230:27
+12 29935607 rs7305813 A C 810.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.307;DB;DP=203;Dels=0.00;FS=14.33;HaplotypeScore=1.98;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-1.640e-01;QD=12.86;ReadPosRankSum=-7.330e-01;SB=-2.950e+02;VQSLOD=7.90;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:71,0:71:99:0,193,2479:127 0|0:69,0:69:99:0,196,2464:127 0|1:28,35:63:99:845,0,847:127
+20 41560394 rs761027 A G 5634.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.444e+00;DB;DP=222;Dels=0.00;FS=0.829;HaplotypeScore=1.14;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=0.392;QD=25.38;ReadPosRankSum=-6.400e-02;SB=-3.048e+03;VQSLOD=10.04;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2228,187,0:127 1|1:0,82:82:99:2435,211,0:127 1|0:25,43:68:99:971,0,567:127
+4 39062189 rs2566127 T C 2641.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.019e+00;DB;DP=201;Dels=0.00;FS=1.10;HaplotypeScore=2.88;MLEAC=3;MLEAF=0.500;MQ=58.96;MQ0=0;MQRankSum=0.932;QD=13.14;ReadPosRankSum=-5.960e-01;SB=-1.401e+03;VQSLOD=7.97;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,29:64:99:880,0,1168:127 0/1:37,32:70:99:796,0,1021:127 0/1:31,36:67:99:1004,0,877:127
+10 19567676 rs61458006 G T 599.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.610e+00;DB;DP=195;Dels=0.00;FS=0.844;HaplotypeScore=0.879;MLEAC=1;MLEAF=0.167;MQ=59.57;MQ0=0;MQRankSum=-1.910e-01;QD=11.31;ReadPosRankSum=-1.635e+00;SB=-2.780e+02;VQSLOD=9.36;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:75,0:75:99:0,208,2645:127 0|1:30,23:53:99:634,0,915:127 0|0:67,0:67:99:0,199,2540:127
+1 110091282 rs1279195 C T 952.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.65;DB;DP=101;Dels=0.00;FS=19.67;HaplotypeScore=1.92;MLEAC=2;MLEAF=0.333;MQ=56.72;MQ0=0;MQRankSum=-3.450e-01;QD=12.37;ReadPosRankSum=0.567;SB=-5.350e+02;VQSLOD=4.17;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,29:46:99:726,0,219:42 1|0:13,12:31:99:265,0,298:42 0|0:18,0:24:42:0,42,522:42
+7 12502849 rs848025 C G 4109.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.809e+00;DB;DP=220;Dels=0.00;FS=1.14;HaplotypeScore=1.80;MLEAC=4;MLEAF=0.667;MQ=59.56;MQ0=0;MQRankSum=0.625;QD=18.68;ReadPosRankSum=-1.900e-02;SB=-1.989e+03;VQSLOD=8.71;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:47,45:92:99:1216,0,1501:127 1|1:0,71:71:99:2145,184,0:127 0|1:27,30:57:99:748,0,743:127
+8 4048009 rs7007410 C T 2713.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.954;DB;DP=197;Dels=0.00;FS=2.48;HaplotypeScore=0.712;MLEAC=3;MLEAF=0.500;MQ=57.03;MQ0=0;MQRankSum=0.882;QD=13.77;ReadPosRankSum=-4.960e-01;SB=-1.406e+03;VQSLOD=6.50;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:38,30:68:99:847,0,1168:127 0/1:30,30:60:99:916,0,921:127 0/1:32,36:69:99:989,0,882:127
+19 28150587 rs4404191 A G 7419.01 PASS AC=6;AF=1.00;AN=6;DB;DP=209;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=6;MLEAF=1.00;MQ=59.61;MQ0=0;QD=35.50;SB=-3.717e+03;VQSLOD=11.99;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:2584,202,0:127 1|1:0,74:74:99:2509,193,0:127 1|1:0,65:65:99:2326,181,0:127
+2 144289763 rs7607879 C T 3308.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.39;DB;DP=225;Dels=0.00;FS=9.72;HaplotypeScore=1.50;MLEAC=3;MLEAF=0.500;MQ=59.53;MQ0=0;MQRankSum=0.283;QD=14.70;ReadPosRankSum=1.39;SB=-1.760e+03;VQSLOD=8.24;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:41,39:81:99:1190,0,1312:127 0/1:28,36:64:99:1057,0,834:127 0/1:44,36:80:99:1061,0,1275:127
+18 50973169 rs11661305 A G 5320.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=2.75;DB;DP=196;Dels=0.00;FS=2.57;HaplotypeScore=1.13;MLEAC=5;MLEAF=0.833;MQ=57.73;MQ0=0;MQRankSum=0.246;QD=27.14;ReadPosRankSum=0.186;SB=-2.411e+03;VQSLOD=7.50;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2621,202,0:127 1|0:30,37:67:99:1009,0,842:127 1|1:0,55:55:99:1690,132,0:127
+20 29566945 rs6119037 C G 1427.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-3.826e+00;DB;DP=271;Dels=0.00;FS=1.15;HaplotypeScore=2.76;MLEAC=2;MLEAF=0.333;MQ=47.42;MQ0=21;MQRankSum=2.42;QD=8.06;ReadPosRankSum=0.363;SB=-7.560e+02;VQSLOD=1.79;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:59,32:91:99:782,0,1210:127 1|0:55,31:86:99:684,0,1422:127 0|0:94,0:94:99:0,208,2592:127
+1 8216712 rs11121115 A G 1540.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.917;DB;DP=131;Dels=0.00;FS=11.67;HaplotypeScore=3.35;MLEAC=3;MLEAF=0.500;MQ=57.74;MQ0=1;MQRankSum=0.427;QD=11.76;ReadPosRankSum=-2.190e-01;SB=-9.390e+02;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:23,28:51:99:681,0,668:127 0/1:16,18:34:99:338,0,244:127 0/1:24,22:46:99:560,0,323:127
+6 1620147 rs2569882 T C 252.3 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-8.620e-01;DB;DP=38;Dels=0.00;FS=8.02;HaplotypeScore=0.222;MLEAC=5;MLEAF=0.833;MQ=57.65;MQ0=0;MQRankSum=-9.180e-01;QD=9.34;ReadPosRankSum=0.584;SB=-4.005e+01;VQSLOD=4.33;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:0,17:17:21:254,21,0:4 1|0:3,8:11:2:0,3,40:4 1|1:0,10:10:3:39,3,0:4
+15 71657506 . A G 140.4 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.611e+00;DP=133;Dels=0.00;FS=35.59;HaplotypeScore=4.06;MLEAC=2;MLEAF=0.333;MQ=51.29;MQ0=1;MQRankSum=-3.344e+00;QD=1.53;ReadPosRankSum=-3.999e+00;SB=-5.015e+01;VQSLOD=-4.805e+00;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:46,11:57:93:93,0,851:15 1|0:23,12:35:86:86,0,299:15 0|0:33,8:41:15:0,15,503:15
+10 116646860 rs4752347 T A 4159.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.459e+00;DB;DP=197;Dels=0.00;FS=3.52;HaplotypeScore=0.631;MLEAC=4;MLEAF=0.667;MQ=59.27;MQ0=0;MQRankSum=1.05;QD=21.11;ReadPosRankSum=-1.271e+00;SB=-2.347e+03;VQSLOD=8.33;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,63:63:99:2191,169,0:127 1|0:31,35:66:99:1031,0,863:127 1|0:31,37:68:99:937,0,774:127
+1 226163330 rs10915914 C G 747.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.123e+00;DB;DP=121;Dels=0.00;FS=0.863;HaplotypeScore=0.829;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=-4.780e-01;QD=9.70;ReadPosRankSum=-1.340e-01;SB=-2.780e+02;VQSLOD=8.08;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,1:44:99:0,117,1447:116 0|1:17,15:32:99:289,0,390:116 0|1:26,19:45:99:497,0,677:116
+10 29082980 . G C 42.53 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.216e+00;DP=107;Dels=0.00;FS=60.98;HaplotypeScore=1.09;MLEAC=3;MLEAF=0.500;MQ=55.72;MQ0=0;MQRankSum=-6.330e-01;QD=0.400;ReadPosRankSum=-4.307e+00;SB=-2.798e-01;VQSLOD=-1.117e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,12:43:12:12,0,757:12 0/1:19,11:30:35:35,0,429:12 0/1:25,9:34:34:34,0,388:12
+8 102355800 rs10103956 G T 1756.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.927;DB;DP=189;Dels=0.00;FS=5.92;HaplotypeScore=1.54;MLEAC=2;MLEAF=0.333;MQ=59.66;MQ0=0;MQRankSum=-4.200e-01;QD=13.41;ReadPosRankSum=-1.900e-02;SB=-5.470e+02;VQSLOD=8.16;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:32,38:70:99:1078,0,999:127 1|0:35,26:61:99:717,0,1103:127 0|0:57,0:58:99:0,156,2011:127
+7 38984187 rs118081099 A C 569.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.100e-01;DB;DP=182;Dels=0.00;FS=6.20;HaplotypeScore=0.553;MLEAC=1;MLEAF=0.167;MQ=54.22;MQ0=0;MQRankSum=1.67;QD=9.33;ReadPosRankSum=1.16;SB=-1.260e+02;VQSLOD=4.89;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:72,0:72:99:0,196,2446:127 0|1:38,23:61:99:604,0,1196:127 0|0:48,1:49:99:0,138,1711:127
+7 4683258 rs62450857 G A 1127.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-9.910e-01;DB;DP=191;Dels=0.00;FS=3.24;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=57.16;MQ0=0;MQRankSum=1.30;QD=14.09;ReadPosRankSum=0.469;SB=-4.730e+02;VQSLOD=6.62;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,196,2495:120 0|1:38,42:80:99:1162,0,1016:120 0|0:45,0:45:99:0,120,1531:120
+7 101161506 rs2158739 C T 4522.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.70;DB;DP=172;Dels=0.00;FS=4.28;HaplotypeScore=1.51;MLEAC=5;MLEAF=0.833;MQ=58.18;MQ0=0;MQRankSum=-2.950e-01;QD=26.29;ReadPosRankSum=0.974;SB=-2.287e+03;VQSLOD=8.28;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,72:73:99:2443,202,0:110 1|0:23,26:50:99:711,0,586:110 1|1:0,48:49:99:1368,111,0:110
+2 228532558 rs6436725 G A 3484.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=7.16;DB;DP=263;Dels=0.00;FS=1.55;HaplotypeScore=4.97;MLEAC=3;MLEAF=0.500;MQ=58.60;MQ0=0;MQRankSum=1.14;QD=21.91;ReadPosRankSum=-4.160e-01;SB=-1.472e+03;VQSLOD=5.44;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:42,47:89:99:1549,0,932:127 0|0:104,0:104:99:0,247,2939:127 1|1:0,69:70:99:1935,156,0:127
+3 76722766 rs264537 C G 845.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=3.67;DB;DP=202;Dels=0.00;FS=0.00;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=59.79;MQ0=0;MQRankSum=-7.950e-01;QD=13.21;ReadPosRankSum=1.05;SB=-2.910e+02;VQSLOD=8.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,208,2570:127 0|0:68,0:68:99:0,193,2332:127 0|1:34,30:64:99:880,0,995:127
+9 78741390 rs7049138 G A 1797.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.24;DB;DP=168;Dels=0.00;FS=4.00;HaplotypeScore=1.09;MLEAC=3;MLEAF=0.500;MQ=55.32;MQ0=2;MQRankSum=-1.673e+00;QD=16.34;ReadPosRankSum=-6.260e-01;SB=-7.740e+02;VQSLOD=5.19;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:828,0,918:80 1|1:0,40:40:81:1014,81,0:80 0|0:58,0:58:99:0,129,1403:80
+17 21547285 rs62049731 A C 1322.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-9.870e-01;DB;DP=569;Dels=0.00;FS=2.32;HaplotypeScore=42.45;MLEAC=3;MLEAF=0.500;MQ=44.59;MQ0=24;MQRankSum=-6.240e+00;QD=2.32;ReadPosRankSum=-5.171e+00;SB=-6.369e+02;VQSLOD=-3.953e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:146,28:174:99:217,0,4187:127 0/1:162,56:218:99:804,0,4298:127 0/1:139,38:177:99:340,0,3842:127
+1 100763317 rs6681810 G C 5583.01 PASS AC=6;AF=1.00;AN=6;DB;DP=196;Dels=0.00;FS=0.00;HaplotypeScore=3.72;MLEAC=6;MLEAF=1.00;MQ=58.52;MQ0=0;QD=28.48;SB=-2.737e+03;VQSLOD=7.92;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,76:77:99:2211,192,0:127 1|1:0,56:56:99:1593,141,0:127 1|1:0,62:62:99:1779,156,0:127
+1 235750933 rs111686144 GA G 679.19 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.04;DB;DP=64;FS=7.39;HaplotypeScore=400.20;MLEAC=4;MLEAF=0.667;MQ=32.98;MQ0=0;MQRankSum=-5.900e-02;QD=10.61;ReadPosRankSum=2.44;SB=-1.575e+02;VQSLOD=-3.140e-01;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:12,0:12:6:110,0,6:6 1|1:9,9:19:31:491,31,0:6 0|1:31,0:32:99:128,0,160:6
+18 67950442 rs62091919 T G 1779.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.517e+00;DB;DP=195;Dels=0.00;FS=0.562;HaplotypeScore=1.55;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=6.000e-03;QD=12.89;ReadPosRankSum=-2.680e-01;SB=-9.170e+02;VQSLOD=9.63;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:40,32:72:99:967,0,1318:127 0|0:55,2:57:99:0,141,1865:127 1|0:36,30:66:99:851,0,1042:127
+2 96514373 rs10186946 C T 206.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=4.49;DB;DP=175;Dels=0.00;FS=2.81;HaplotypeScore=2.42;MLEAC=2;MLEAF=0.333;MQ=39.07;MQ0=7;MQRankSum=-7.529e+00;QD=1.61;ReadPosRankSum=0.813;SB=-2.501e+01;VQSLOD=-8.655e-01;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:35,23:58:62:62,0,484:61 1|0:22,46:70:99:183,0,387:61 0|0:46,0:47:99:0,99,1162:61
+13 28463938 rs954750 C T 2740.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.21;DB;DP=242;Dels=0.00;FS=0.00;HaplotypeScore=4.01;MLEAC=2;MLEAF=0.333;MQ=59.46;MQ0=0;MQRankSum=0.880;QD=16.61;ReadPosRankSum=-6.170e-01;SB=-1.312e+03;VQSLOD=6.77;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:40,43:83:99:1362,0,1242:127 1|0:35,47:82:99:1417,0,1010:127 0|0:76,0:77:99:0,205,2635:127
+5 132377304 rs72801439 A T 858.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.113e+00;DB;DP=219;Dels=0.00;FS=10.63;HaplotypeScore=0.664;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-8.810e-01;QD=11.29;ReadPosRankSum=0.435;SB=-3.050e+02;VQSLOD=7.68;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,163,2149:127 0|1:43,33:76:99:893,0,1280:127 0|0:76,0:76:99:0,199,2553:127
+19 54644879 rs36636 G A 1790.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=2.51;DB;DP=187;Dels=0.00;FS=4.41;HaplotypeScore=1.50;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-1.266e+00;QD=13.88;ReadPosRankSum=-1.226e+00;SB=-1.081e+03;VQSLOD=7.80;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:30,27:57:99:811,0,726:127 1|0:31,41:72:99:1018,0,730:127 0|0:58,0:58:99:0,144,1815:127
+9 130235282 . A G 166.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=-8.543e+00;DP=232;Dels=0.00;FS=233.04;HaplotypeScore=3.00;MLEAC=2;MLEAF=0.333;MQ=59.04;MQ0=0;MQRankSum=-2.038e+00;QD=1.15;ReadPosRankSum=-7.649e+00;SB=-3.100e-03;VQSLOD=-1.398e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:74,14:88:99:0,108,2160:59 0|1:42,36:79:60:60,0,966:59 0|1:47,18:65:99:145,0,922:59
+6 162459664 rs2849564 C T 1819.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.40;DB;DP=201;Dels=0.00;FS=3.30;HaplotypeScore=2.56;MLEAC=2;MLEAF=0.333;MQ=59.38;MQ0=0;MQRankSum=1.79;QD=12.90;ReadPosRankSum=-1.045e+00;SB=-1.068e+03;VQSLOD=8.12;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:28,40:68:99:1007,0,793:120 1|0:38,35:73:99:851,0,831:120 0|0:60,0:60:99:0,120,1421:120
+12 112830546 rs150699511 C A 487.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.014e+00;DB;DP=179;Dels=0.00;FS=0.860;HaplotypeScore=2.34;MLEAC=1;MLEAF=0.167;MQ=59.16;MQ0=0;MQRankSum=1.14;QD=8.86;ReadPosRankSum=0.950;SB=-2.870e+02;VQSLOD=8.11;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:62:99:0,166,2141:127 0|1:34,21:55:99:522,0,751:127 0|0:62,0:62:99:0,141,1808:127
+4 122900130 rs4833786 C T 2361.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-3.900e-01;DB;DP=244;Dels=0.00;FS=0.495;HaplotypeScore=0.543;MLEAC=2;MLEAF=0.333;MQ=59.91;MQ0=0;MQRankSum=-6.280e-01;QD=15.23;ReadPosRankSum=1.22;SB=-1.282e+03;VQSLOD=8.81;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:89,0:89:99:0,250,3286:127 0|1:42,44:86:99:1257,0,1325:127 0|1:32,37:69:99:1143,0,941:127
+11 86061661 rs11825046 T C 6014.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.250e+00;DB;DP=282;Dels=0.00;FS=0.960;HaplotypeScore=1.64;MLEAC=4;MLEAF=0.667;MQ=59.57;MQ0=0;MQRankSum=1.06;QD=21.33;ReadPosRankSum=-1.763e+00;SB=-3.081e+03;VQSLOD=7.35;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:54,49:103:99:1498,0,1848:127 1|1:0,83:83:99:2924,223,0:127 0|1:44,52:96:99:1592,0,1380:127
+7 62232046 . C T 1155.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.643e+00;DP=230;Dels=0.00;FS=6.30;HaplotypeScore=12.77;MLEAC=1;MLEAF=0.167;MQ=58.61;MQ0=3;MQRankSum=-6.970e-01;QD=15.20;ReadPosRankSum=-1.202e+00;SB=-4.440e+02;VQSLOD=2.57;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:77,1:78:99:0,217,2824:127 0|0:76,0:76:99:0,202,2604:127 0|1:34,42:76:99:1190,0,994:127
+14 87263523 rs2542229 A C 8104.01 PASS AC=6;AF=1.00;AN=6;DB;DP=239;Dels=0.00;FS=0.00;HaplotypeScore=0.631;MLEAC=6;MLEAF=1.00;MQ=59.17;MQ0=0;QD=33.91;SB=-4.393e+03;VQSLOD=11.30;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,77:77:99:2810,214,0:127 1|1:0,85:85:99:2877,223,0:127 1|1:0,77:77:99:2417,187,0:127
+9 16302655 rs9298755 T G 1394.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.36;DB;DP=200;Dels=0.00;FS=0.00;HaplotypeScore=3.19;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=0.586;QD=10.03;ReadPosRankSum=-7.710e-01;SB=-8.720e+02;VQSLOD=7.77;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:60,1:61:99:0,165,2004:127 0|1:29,28:57:99:494,0,759:127 0|1:41,40:82:99:939,0,1069:127
+9 138617823 rs55724592 C T 53.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.800e-01;DB;DP=72;Dels=0.00;FS=8.08;HaplotypeScore=1.02;MLEAC=1;MLEAF=0.167;MQ=58.90;MQ0=0;MQRankSum=0.851;QD=2.66;ReadPosRankSum=-3.440e-01;SB=-9.096e+01;VQSLOD=4.27;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:20,0:20:48:0,48,580:44 0|0:32,0:32:48:0,48,577:44 0|1:10,10:20:88:88,0,199:44
+2 75490647 rs112304545 T TGG 1000.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.322;DB;DP=188;FS=0.785;HaplotypeScore=58.72;MLEAC=4;MLEAF=0.667;MQ=57.19;MQ0=0;MQRankSum=-2.290e-01;QD=5.32;RPA=10,12;RU=G;ReadPosRankSum=-2.534e+00;SB=-4.650e+02;STR;VQSLOD=2.69;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:33,35:76:57:976,57,0:56 1|0:39,3:49:38:38,0,730:56 1|0:50,4:63:37:37,0,900:56
+4 161180100 rs167176 G C 2497.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=6.81;DB;DP=191;Dels=0.00;FS=5.37;HaplotypeScore=0.781;MLEAC=3;MLEAF=0.500;MQ=59.78;MQ0=0;MQRankSum=-5.840e-01;QD=13.07;ReadPosRankSum=0.756;SB=-1.206e+03;VQSLOD=8.00;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,36:68:99:1100,0,895:127 0/1:41,35:76:99:987,0,1028:127 0/1:29,17:47:99:449,0,820:127
+4 48922864 rs7697262 G C 1383.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=100;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=20.20;MQ0=24;QD=13.83;SB=-3.860e+02;VQSLOD=-3.210e-01;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,38:41:57:625,57,0:32 1|1:0,28:28:33:368,33,0:32 1|1:2,29:31:39:428,39,0:32
+19 3739001 rs56138006 C T 976.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=4.63;DB;DP=118;Dels=0.00;FS=3.68;HaplotypeScore=1.44;MLEAC=2;MLEAF=0.333;MQ=58.66;MQ0=0;MQRankSum=0.753;QD=11.22;ReadPosRankSum=1.11;SB=-6.380e+02;VQSLOD=7.45;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:30,22:52:99:612,0,559:45 0|0:31,0:31:45:0,45,527:45 1|0:12,23:35:93:403,0,93:45
+1 204945934 rs6657372 A G 1311.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.582e+00;DB;DP=126;Dels=0.00;FS=0.00;HaplotypeScore=2.71;MLEAC=3;MLEAF=0.500;MQ=58.78;MQ0=0;MQRankSum=0.480;QD=15.43;ReadPosRankSum=1.28;SB=-6.370e+02;VQSLOD=7.84;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:22,28:50:99:629,0,675:68 0|0:40,0:41:84:0,84,1057:68 1|1:0,35:35:69:727,69,0:68
+12 101460237 rs7965836 C T 3485.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.070e+00;DB;DP=247;Dels=0.00;FS=2.89;HaplotypeScore=0.656;MLEAC=3;MLEAF=0.500;MQ=59.83;MQ0=0;MQRankSum=-6.550e-01;QD=14.11;ReadPosRankSum=-9.830e-01;SB=-1.581e+03;VQSLOD=8.49;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,43:83:99:1287,0,1179:127 0/1:44,36:80:99:1068,0,1363:127 0/1:43,41:84:99:1130,0,1321:127
+22 24416101 rs66532277 C CTT 458.98 VQSRTrancheINDEL99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-4.190e+00;DB;DP=251;FS=68.55;HaplotypeScore=55.31;MLEAC=3;MLEAF=0.500;MQ=51.85;MQ0=3;MQRankSum=2.42;QD=1.83;RPA=23,25;RU=T;ReadPosRankSum=2.88;SB=-3.571e+01;STR;VQSLOD=-2.028e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:68,20:91:65:207,0,65:3 0/1:84,0:83:0:184,0,0:3 0/1:72,0:72:83:114,0,83:3
+13 83670546 . G A 169.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.30;DP=178;Dels=0.00;FS=0.00;HaplotypeScore=36.51;MLEAC=2;MLEAF=0.333;MQ=42.20;MQ0=11;MQRankSum=-6.654e+00;QD=1.38;ReadPosRankSum=-7.610e-01;SB=-1.340e+02;VQSLOD=-2.041e+01;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:37,16:53:99:139,0,523:90 0|0:51,4:55:91:0,91,1393:90 1|0:58,12:70:69:69,0,1214:90
+Y 59024923 . A T 1977.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.84;DP=745;DS;Dels=0.00;FS=0.367;HaplotypeScore=8.30;MLEAC=3;MLEAF=0.500;MQ=43.53;MQ0=19;MQRankSum=2.50;QD=2.65;ReadPosRankSum=0.098;SB=-9.720e+02;VQSLOD=-3.676e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:208,42:250:99:730,0,6428:127 0/1:210,35:245:99:588,0,6218:127 0/1:208,42:250:99:698,0,6060:127
+12 90856710 rs825945 T C 1096.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.342e+00;DB;DP=193;Dels=0.00;FS=2.16;HaplotypeScore=0.00;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=2.07;QD=9.70;ReadPosRankSum=-1.697e+00;SB=-5.710e+02;VQSLOD=7.31;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:80,0:80:99:0,232,3042:127 0|1:30,21:51:99:511,0,921:127 0|1:36,26:62:99:624,0,1085:127
+3 168108331 rs35075740 TA T 51.36 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.78;DB;DP=162;FS=3.97;HaplotypeScore=20.38;MLEAC=3;MLEAF=0.500;MQ=55.92;MQ0=0;MQRankSum=3.47;QD=0.320;RPA=18,17;RU=A;ReadPosRankSum=1.96;SB=-7.120e+00;STR;VQSLOD=2.10;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:46,5:53:16:16,0,313:15 0/1:46,12:60:61:61,0,267:15 0/1:40,6:47:22:22,0,255:15
+3 60283791 rs10154846 T C 669.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.270e+00;DB;DP=204;Dels=0.00;FS=1.59;HaplotypeScore=1.66;MLEAC=1;MLEAF=0.167;MQ=59.39;MQ0=0;MQRankSum=0.370;QD=10.14;ReadPosRankSum=1.64;SB=-2.690e+02;VQSLOD=8.95;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:63,0:63:99:0,190,2440:127 0|1:34,32:66:99:704,0,1020:127 0|0:74,0:75:99:0,190,2372:127
+19 37226152 rs3108217 G C 2076.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.215;DB;DP=145;Dels=0.00;FS=2.16;HaplotypeScore=0.587;MLEAC=4;MLEAF=0.667;MQ=58.59;MQ0=0;MQRankSum=1.16;QD=14.32;ReadPosRankSum=-7.250e-01;SB=-1.027e+03;VQSLOD=7.49;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:25,30:55:99:789,0,709:63 1|1:0,29:29:63:772,63,0:63 0|1:35,25:61:99:557,0,789:63
+3 1609737 rs2648459 A G 6492.01 PASS AC=6;AF=1.00;AN=6;DB;DP=187;Dels=0.00;FS=0.00;HaplotypeScore=1.18;MLEAC=6;MLEAF=1.00;MQ=59.90;MQ0=0;QD=34.72;SB=-3.251e+03;VQSLOD=11.50;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1943,150,0:127 1|1:0,62:62:99:2206,172,0:127 1|1:0,72:72:99:2343,181,0:127
+13 37484693 rs1571317 T C 971.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.315e+00;DB;DP=229;Dels=0.00;FS=3.05;HaplotypeScore=0.660;MLEAC=1;MLEAF=0.167;MQ=58.51;MQ0=0;MQRankSum=1.88;QD=12.78;ReadPosRankSum=-3.430e-01;SB=-5.750e+02;VQSLOD=7.31;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:94,0:94:99:0,253,3258:127 0|1:35,41:76:99:1006,0,924:127 0|0:59,0:59:99:0,147,1872:127
+3 108612711 rs2399252 T A 3430.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.830e-01;DB;DP=239;Dels=0.00;FS=4.44;HaplotypeScore=0.659;MLEAC=3;MLEAF=0.500;MQ=59.64;MQ0=0;MQRankSum=-2.690e-01;QD=14.35;ReadPosRankSum=-7.010e-01;SB=-1.733e+03;VQSLOD=8.51;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:48,34:82:99:1066,0,1620:127 0/1:45,43:88:99:1370,0,1452:127 0/1:36,32:69:99:994,0,1128:127
+4 190538070 rs62323772 G A 106.69 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.099;DB;DP=19;Dels=0.00;FS=0.00;HaplotypeScore=4.36;MLEAC=3;MLEAF=0.500;MQ=33.71;MQ0=0;MQRankSum=0.591;QD=5.93;ReadPosRankSum=-3.940e-01;SB=-7.601e+01;VQSLOD=-1.392e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:4,9:13:69:69,0,92:3 0|0:1,0:1:3:0,3,33:3 1|1:0,4:5:6:77,6,0:3
+15 32615218 . G GA 82.61 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.361;DP=225;FS=0.00;HaplotypeScore=2.49;MLEAC=4;MLEAF=0.667;MQ=5.76;MQ0=211;MQRankSum=-8.760e-01;QD=0.560;RPA=9,10;RU=A;ReadPosRankSum=-1.159e+00;SB=-1.330e-03;STR;VQSLOD=3.74;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:41,19:3:9:88,9,0:5 1|0:62,24:5:44:44,0,77:5 1|0:76,0:1:2:0,3,31:5
+8 132727531 rs7000409 G A 2050.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.47;DB;DP=220;Dels=0.00;FS=5.20;HaplotypeScore=1.94;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=1.23;QD=14.14;ReadPosRankSum=-8.710e-01;SB=-1.080e+03;VQSLOD=7.79;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:29,35:64:99:1215,0,785:127 0|0:75,0:75:99:0,190,2423:127 1|0:50,31:81:99:874,0,1611:127
+5 70856663 rs157045 T C 2040.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.809e+00;DB;DP=234;Dels=0.00;FS=1.82;HaplotypeScore=1.05;MLEAC=2;MLEAF=0.333;MQ=58.65;MQ0=0;MQRankSum=0.989;QD=13.16;ReadPosRankSum=0.719;SB=-8.820e+02;VQSLOD=7.35;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,41:85:99:1087,0,1448:127 1|0:28,42:70:99:992,0,789:127 0|0:79,0:79:99:0,181,2342:127
+1 69502962 rs12724640 T C 1868.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-1.732e+00;DB;DP=110;Dels=0.00;FS=4.72;HaplotypeScore=1.93;MLEAC=6;MLEAF=1.00;MQ=29.46;MQ0=22;MQRankSum=1.65;QD=16.98;ReadPosRankSum=-5.640e-01;SB=-8.110e+02;VQSLOD=0.210;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:5,23:29:63:693,63,0:50 1|1:5,38:43:66:675,66,0:50 1|1:9,29:38:51:538,51,0:50
+4 141514835 rs55984232 C T 1645.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=7.14;DB;DP=191;Dels=0.00;FS=2.76;HaplotypeScore=1.07;MLEAC=2;MLEAF=0.333;MQ=59.26;MQ0=0;MQRankSum=0.726;QD=13.06;ReadPosRankSum=-7.890e-01;SB=-8.550e+02;VQSLOD=8.94;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,28:60:99:913,0,820:127 0|0:65,0:65:99:0,156,1886:127 1|0:34,32:66:99:771,0,750:127
+1 195392852 rs2119441 T G 5369.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.284e+00;DB;DP=241;Dels=0.00;FS=3.31;HaplotypeScore=1.87;MLEAC=4;MLEAF=0.667;MQ=58.35;MQ0=0;MQRankSum=-6.430e-01;QD=22.28;ReadPosRankSum=0.178;SB=-2.332e+03;VQSLOD=7.85;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:37,42:79:99:1233,0,1145:127 1|1:0,84:84:99:2741,211,0:127 0|1:31,47:78:99:1395,0,804:127
+Y 13265732 . C T 356.72 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=2.82;DP=142;Dels=0.00;FS=7.94;HaplotypeScore=19.82;MLEAC=2;MLEAF=0.333;MQ=38.22;MQ0=11;MQRankSum=-2.145e+00;QD=5.10;ReadPosRankSum=1.49;SB=-1.466e+00;VQSLOD=-1.443e+01;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,15:50:99:327,0,624:5 0|0:65,7:72:4:0,4,1831:5 1|0:15,5:20:67:67,0,227:5
+5 174249229 rs11739079 C G 1613.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.540e+00;DB;DP=190;Dels=0.00;FS=6.48;HaplotypeScore=2.04;MLEAC=2;MLEAF=0.333;MQ=59.51;MQ0=0;MQRankSum=-8.980e-01;QD=11.86;ReadPosRankSum=0.601;SB=-8.320e+02;VQSLOD=7.78;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:32,43:75:99:1069,0,928:123 0|0:54,0:54:99:0,123,1554:123 1|0:33,27:61:99:583,0,883:123
+1 80481528 rs61774278 G C 1775.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.614e+00;DB;DP=168;Dels=0.00;FS=8.29;HaplotypeScore=2.05;MLEAC=3;MLEAF=0.500;MQ=54.28;MQ0=0;MQRankSum=-5.200e-02;QD=16.75;ReadPosRankSum=1.54;SB=-1.133e+03;VQSLOD=4.77;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:35,26:61:99:767,0,778:80 0|0:62,0:62:84:0,84,1046:80 1|1:0,45:45:84:1053,84,0:80
+9 2072356 rs4741641 T G 2054.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.235e+00;DB;DP=243;Dels=0.00;FS=0.00;HaplotypeScore=2.21;MLEAC=2;MLEAF=0.333;MQ=59.64;MQ0=0;MQRankSum=1.17;QD=13.00;ReadPosRankSum=-4.750e-01;SB=-1.004e+03;VQSLOD=9.02;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:49,45:94:99:1245,0,1615:127 0|0:85,0:85:99:0,217,2818:127 1|0:32,32:64:99:848,0,936:127
+12 58867437 rs140632614 G T 829.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=1.41;DB;DP=144;Dels=0.00;FS=68.61;HaplotypeScore=0.867;MLEAC=4;MLEAF=0.667;MQ=35.15;MQ0=16;MQRankSum=-7.440e+00;QD=5.76;ReadPosRankSum=-2.450e-01;SB=-1.011e+00;VQSLOD=-1.649e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,24:58:99:291,0,1100:44 0|1:42,8:50:61:61,0,1319:44 1|1:1,35:36:45:519,45,0:44
+4 64522064 rs4860541 A G 5942.01 PASS AC=6;AF=1.00;AN=6;DB;DP=188;Dels=0.00;FS=0.00;HaplotypeScore=0.289;MLEAC=6;MLEAF=1.00;MQ=56.20;MQ0=0;QD=31.61;SB=-3.348e+03;VQSLOD=8.54;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2119,169,0:127 1|1:0,52:53:99:1661,132,0:127 1|1:0,67:67:99:2162,172,0:127
+8 66327344 rs13282622 G A 3918.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.51;DB;DP=192;Dels=0.00;FS=3.53;HaplotypeScore=1.65;MLEAC=4;MLEAF=0.667;MQ=58.91;MQ0=0;MQRankSum=0.706;QD=20.41;ReadPosRankSum=-3.270e-01;SB=-2.091e+03;VQSLOD=8.63;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,37:71:99:1137,0,923:127 0|1:32,28:61:99:806,0,988:127 1|1:0,60:60:99:1975,153,0:127
+8 78181000 rs1563030 A G 5178.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-3.000e-02;DB;DP=192;Dels=0.00;FS=4.68;HaplotypeScore=2.95;MLEAC=5;MLEAF=0.833;MQ=59.62;MQ0=0;MQRankSum=-4.670e-01;QD=26.97;ReadPosRankSum=-8.550e-01;SB=-2.617e+03;VQSLOD=7.34;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:59:99:1954,150,0:127 1|0:32,37:70:99:1198,0,888:127 1|1:0,63:63:99:2026,156,0:127
+9 9066127 rs57751104 ATATT A 4412 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-8.800e-02;DB;DP=214;FS=8.47;HaplotypeScore=16.59;MLEAC=2;MLEAF=0.333;MQ=58.75;MQ0=0;MQRankSum=0.462;QD=29.61;RPA=2,1;RU=TATT;ReadPosRankSum=1.38;SB=-1.837e+03;STR;VQSLOD=4.42;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:41,36:79:99:2129,0,2123:127 1|0:32,38:70:99:2283,0,1679:127 0|0:65,0:65:99:0,184,4023:127
+6 169196022 . T TG 229.23 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.887;DP=84;FS=7.13;HaplotypeScore=6.43;MLEAC=2;MLEAF=0.333;MQ=39.46;MQ0=16;MQRankSum=2.28;QD=3.82;RPA=6,7;RU=G;ReadPosRankSum=-9.830e-01;SB=-2.849e+01;STR;VQSLOD=1.35;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:19,10:15:78:78,0,88:27 1|0:17,13:21:99:199,0,172:27 0|0:24,0:15:27:0,27,308:27
+2 117966808 rs333847 C T 9037.01 PASS AC=6;AF=1.00;AN=6;DB;DP=269;Dels=0.00;FS=0.00;HaplotypeScore=3.70;MLEAC=6;MLEAF=1.00;MQ=58.21;MQ0=0;QD=33.59;SB=-4.673e+03;VQSLOD=7.05;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2652,205,0:127 1|1:0,101:101:99:3158,247,0:127 1|1:0,89:90:99:3227,250,0:127
+X 95868251 . G A 108.36 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=1.44;DP=90;Dels=0.00;FS=4.21;HaplotypeScore=4.94;MLEAC=2;MLEAF=0.333;MQ=44.60;MQ0=8;MQRankSum=-2.939e+00;QD=1.55;ReadPosRankSum=2.87;SB=-7.411e+01;VQSLOD=-3.242e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0|1:29,9:38:99:126,0,251:23 0|0:20,0:20:24:0,24,266:23 1|0:27,5:32:21:21,0,97:23
+7 134269995 rs67235184 G GA 2917.2 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.835;DB;DP=219;FS=1.09;HaplotypeScore=39.14;MLEAC=3;MLEAF=0.500;MQ=59.44;MQ0=0;MQRankSum=-3.700e-02;QD=19.19;RPA=7,8;RU=A;ReadPosRankSum=-9.210e-01;SB=-1.316e+03;STR;VQSLOD=5.11;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:51,33:84:99:916,0,1151:127 1|1:2,65:68:99:2055,192,0:127 0|0:65,0:67:99:0,186,2051:127
+1 36900350 rs72008966 C CA 137.53 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.837e+00;DB;DP=139;FS=0.00;HaplotypeScore=32.79;MLEAC=3;MLEAF=0.500;MQ=49.20;MQ0=3;MQRankSum=0.772;QD=0.990;RPA=22,23;RU=A;ReadPosRankSum=-3.220e+00;SB=-4.273e+01;STR;VQSLOD=1.87;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:35,7:44:41:70,0,41:9 0/1:48,0:47:20:20,0,41:9 0/1:32,12:42:9:95,0,9:9
+5 29069162 rs658439 G A 499.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.98;DB;DP=199;Dels=0.00;FS=11.20;HaplotypeScore=1.60;MLEAC=1;MLEAF=0.167;MQ=52.70;MQ0=0;MQRankSum=-6.080e-01;QD=9.42;ReadPosRankSum=-1.103e+00;SB=-2.310e+02;VQSLOD=4.02;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:86,0:86:99:0,211,2509:110 0|0:60,0:60:99:0,111,1240:110 0|1:30,23:53:99:534,0,523:110
+7 48862174 rs965346 A G 877.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.250e+00;DB;DP=194;Dels=0.00;FS=6.11;HaplotypeScore=0.649;MLEAC=1;MLEAF=0.167;MQ=57.54;MQ0=0;MQRankSum=2.06;QD=16.25;ReadPosRankSum=-1.204e+00;SB=-4.040e+02;VQSLOD=6.24;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3007:127 0|0:58,0:58:99:0,160,2067:127 0|1:22,32:54:99:912,0,686:127
+11 75978490 rs655877 G C 2986.25 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-8.460e-01;DB;DP=127;Dels=0.00;FS=5.43;HaplotypeScore=0.263;MLEAC=5;MLEAF=0.833;MQ=59.42;MQ0=0;MQRankSum=0.026;QD=23.51;ReadPosRankSum=0.168;SB=-1.613e+03;VQSLOD=7.04;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,50:50:99:1405,111,0:101 1|1:0,45:46:99:1269,102,0:101 1|0:17,14:31:99:354,0,469:101
+6 120734422 rs62424426 T C 1091.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.268e+00;DB;DP=208;Dels=0.00;FS=4.35;HaplotypeScore=0.703;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=-1.880e-01;QD=14.36;ReadPosRankSum=-1.490e-01;SB=-5.560e+02;VQSLOD=8.65;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,205,2692:127 0|0:61,0:61:99:0,175,2298:127 0|1:39,37:76:99:1126,0,1140:127
+17 44809197 rs116187585 A G 8703.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-5.540e-01;DB;DP=254;Dels=0.00;FS=3.49;HaplotypeScore=4.06;MLEAC=6;MLEAF=1.00;MQ=59.58;MQ0=0;MQRankSum=1.68;QD=34.26;ReadPosRankSum=1.48;SB=-4.228e+03;VQSLOD=6.61;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3470,268,0:127 1|1:0,82:84:99:2846,220,0:127 1|1:0,73:73:99:2387,184,0:127
+X 42192093 rs58959554 T C 1058.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-5.464e+00;DB;DP=190;Dels=0.00;FS=6.81;HaplotypeScore=1.88;MLEAC=1;MLEAF=0.167;MQ=59.41;MQ0=0;MQRankSum=-2.120e-01;QD=15.34;ReadPosRankSum=-1.730e-01;SB=-3.970e+02;VQSLOD=8.06;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,1:71:99:0,182,2683:127 0|0:50,0:50:99:0,138,1794:127 0|1:31,38:69:99:1093,0,947:127
+5 49438828 rs137880658 G A 424.24 VQSRTrancheSNP99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-4.376e+00;DB;DP=748;DS;Dels=0.00;FS=7.18;HaplotypeScore=20.66;MLEAC=1;MLEAF=0.167;MQ=19.63;MQ0=158;MQRankSum=3.82;QD=1.70;ReadPosRankSum=1.19;SB=-2.220e+02;VQSLOD=-9.822e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0|0:249,0:249:99:0,555,4848:127 0|1:204,46:250:99:459,0,2894:127 0|0:249,0:249:99:0,480,4326:127
+6 89947117 rs9942462 A G 5019.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.65;DB;DP=181;Dels=0.00;FS=0.00;HaplotypeScore=3.32;MLEAC=6;MLEAF=1.00;MQ=53.30;MQ0=0;MQRankSum=0.428;QD=27.73;ReadPosRankSum=1.09;SB=-3.151e+03;VQSLOD=5.68;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,59:60:99:1715,138,0:92 1|1:1,55:56:93:1401,93,0:92 1|1:0,65:65:99:1903,153,0:92
+12 5922552 rs17786352 C G 1874.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.386e+00;DB;DP=231;Dels=0.00;FS=0.00;HaplotypeScore=0.305;MLEAC=2;MLEAF=0.333;MQ=54.49;MQ0=0;MQRankSum=2.66;QD=13.11;ReadPosRankSum=1.04;SB=-9.400e+02;VQSLOD=4.75;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:44,35:79:99:897,0,1383:127 1|0:28,36:64:99:1016,0,734:127 0|0:88,0:88:99:0,238,3004:127
+4 184811263 rs2871379 A G 6376.01 PASS AC=6;AF=1.00;AN=6;DB;DP=211;Dels=0.00;FS=0.00;HaplotypeScore=0.508;MLEAC=6;MLEAF=1.00;MQ=58.38;MQ0=0;QD=30.22;SB=-3.472e+03;VQSLOD=10.49;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,78:78:99:2539,199,0:127 1|1:0,67:67:99:2072,165,0:127 1|1:0,66:66:99:1765,135,0:127
+7 110843795 rs214455 A G 8548.01 PASS AC=6;AF=1.00;AN=6;DB;DP=258;Dels=0.00;FS=0.00;HaplotypeScore=2.36;MLEAC=6;MLEAF=1.00;MQ=59.35;MQ0=0;QD=33.13;SB=-4.197e+03;VQSLOD=10.76;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3535,301,0:127 1|1:0,66:66:99:2270,193,0:127 1|1:0,86:86:99:2743,229,0:127
+2 107234623 rs35291621 GTA G 7569 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.65;DB;DP=242;FS=7.84;HaplotypeScore=19.31;MLEAC=4;MLEAF=0.667;MQ=60.04;MQ0=1;MQRankSum=-1.570e-01;QD=31.28;ReadPosRankSum=1.66;SB=-3.633e+03;VQSLOD=4.30;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:46,30:76:99:1290,0,2120:127 0|1:35,66:102:99:2998,0,1435:127 1|1:0,63:63:99:3281,190,0:127
+9 44998848 . C G 254.43 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=2.20;DP=193;Dels=0.00;FS=10.82;HaplotypeScore=0.245;MLEAC=5;MLEAF=0.833;MQ=6.48;MQ0=163;MQRankSum=-1.206e+00;QD=1.32;ReadPosRankSum=0.790;SB=-1.372e+02;VQSLOD=-6.632e+00;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:39,27:66:23:132,0,23:8 1|1:36,16:52:15:118,15,0:8 0|1:53,22:75:1:45,6,0:8
+18 20025030 rs4800406 A G 1113.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.700e+00;DB;DP=230;Dels=0.00;FS=0.00;HaplotypeScore=1.68;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=1.64;QD=12.65;ReadPosRankSum=-1.166e+00;SB=-6.160e+02;VQSLOD=8.66;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,223,2978:127 0|1:46,42:88:99:1148,0,1460:127 0|0:64,0:64:99:0,175,2303:127
+18 1629264 rs5025369 A G 86.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.739e+00;DB;DP=149;Dels=0.00;FS=15.36;HaplotypeScore=7.14;MLEAC=2;MLEAF=0.333;MQ=39.72;MQ0=11;MQRankSum=-2.543e+00;QD=0.810;ReadPosRankSum=0.088;SB=-3.380e+01;VQSLOD=-6.205e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,15:66:50:50,0,1143:49 0|0:37,5:42:81:0,81,941:49 1|0:35,6:41:75:75,0,818:49
+5 164600452 rs7711548 C A 588.32 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=-3.291e+00;DB;DP=192;Dels=0.020;FS=2.32;HaplotypeScore=32.67;MLEAC=6;MLEAF=1.00;MQ=57.55;MQ0=0;MQRankSum=1.54;QD=3.06;ReadPosRankSum=-1.533e+00;SB=-2.085e+03;VQSLOD=-1.433e+00;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:15,52:69:18:155,18,0:15 1|1:11,55:66:36:296,36,0:15 1|1:18,36:54:15:175,15,0:15
+10 11560326 rs4424580 C T 1027.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.780e-01;DB;DP=207;Dels=0.00;FS=0.573;HaplotypeScore=2.20;MLEAC=2;MLEAF=0.333;MQ=59.24;MQ0=0;MQRankSum=-9.880e-01;QD=7.78;ReadPosRankSum=-4.920e-01;SB=-7.450e+02;VQSLOD=8.46;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:41,32:73:99:609,0,930:96 1|0:29,30:59:99:457,0,570:96 0|0:74,1:75:96:0,96,1185:96
+X 84165195 rs5923187 C A 1009.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.103e+00;DB;DP=194;Dels=0.00;FS=3.07;HaplotypeScore=2.82;MLEAC=1;MLEAF=0.167;MQ=59.31;MQ0=0;MQRankSum=-6.750e-01;QD=12.01;ReadPosRankSum=-1.463e+00;SB=-5.890e+02;VQSLOD=8.24;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:79,1:80:99:0,223,2856:60 0|0:30,0:30:60:0,60,764:60 0|1:40,44:84:99:1044,0,1007:60
+13 109990322 rs7328109 T C 7198.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.487e+00;DB;DP=245;Dels=0.00;FS=5.89;HaplotypeScore=1.88;MLEAC=5;MLEAF=0.833;MQ=59.60;MQ0=0;MQRankSum=-2.360e-01;QD=29.38;ReadPosRankSum=0.136;SB=-3.593e+03;VQSLOD=8.89;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2825,220,0:127 1|0:33,54:87:99:1591,0,933:127 1|1:0,79:79:99:2782,214,0:127
+6 18687376 rs9383429 A T 1162.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.746e+00;DB;DP=232;Dels=0.00;FS=0.638;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=59.42;MQ0=0;MQRankSum=-7.330e-01;QD=15.71;ReadPosRankSum=-1.460e-01;SB=-6.490e+02;VQSLOD=9.43;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,241,3181:127 0|0:76,0:76:99:0,217,2832:127 0|1:33,41:74:99:1197,0,1008:127
+X 66290558 rs1606094 C T 2602.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.17;DB;DP=213;Dels=0.00;FS=13.13;HaplotypeScore=0.00;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=1.34;QD=18.86;ReadPosRankSum=2.27;SB=-1.122e+03;VQSLOD=6.00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:54,47:101:99:1381,0,1762:99 1|1:0,37:37:99:1266,99,0:99 0|0:75,0:75:99:0,205,2705:99
+2 177175707 rs7355385 A G 2590.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.660e-01;DB;DP=206;Dels=0.00;FS=14.87;HaplotypeScore=0.311;MLEAC=3;MLEAF=0.500;MQ=59.12;MQ0=0;MQRankSum=-9.370e-01;QD=20.40;ReadPosRankSum=-2.870e-01;SB=-8.970e+02;VQSLOD=6.82;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:856,0,1069:127 1|1:0,62:62:99:1779,150,0:127 0|0:78,1:79:99:0,193,2411:127
+3 148344553 rs62274102 C A 3191.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.860e+00;DB;DP=232;Dels=0.00;FS=12.06;HaplotypeScore=2.37;MLEAC=3;MLEAF=0.500;MQ=59.32;MQ0=0;MQRankSum=-5.510e-01;QD=19.58;ReadPosRankSum=2.41;SB=-1.757e+03;VQSLOD=6.29;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:46,39:85:99:985,0,1339:127 1|1:0,78:78:99:2251,175,0:127 0|0:69,0:69:99:0,153,2018:127
+2 28790711 rs34787802 T G 731.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.421e+00;DB;DP=232;Dels=0.00;FS=2.40;HaplotypeScore=1.52;MLEAC=1;MLEAF=0.167;MQ=57.98;MQ0=0;MQRankSum=0.447;QD=10.30;ReadPosRankSum=-1.833e+00;SB=-4.550e+02;VQSLOD=6.89;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,223,2877:127 0|1:36,35:71:99:766,0,947:127 0|0:79,0:80:99:0,205,2640:127
+2 9240279 rs56249990 A G 3978.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.70;DB;DP=213;Dels=0.00;FS=7.83;HaplotypeScore=1.19;MLEAC=3;MLEAF=0.500;MQ=59.40;MQ0=0;MQRankSum=0.143;QD=27.25;ReadPosRankSum=-9.700e-02;SB=-1.991e+03;VQSLOD=9.14;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,42:75:99:1400,0,1031:127 0|0:67,0:67:99:0,178,2277:127 1|1:0,71:71:99:2578,199,0:127
+5 58243302 rs457566 A C 6237.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.663e+00;DB;DP=233;Dels=0.00;FS=3.43;HaplotypeScore=0.886;MLEAC=5;MLEAF=0.833;MQ=59.70;MQ0=0;MQRankSum=-2.320e-01;QD=26.77;ReadPosRankSum=0.957;SB=-2.566e+03;VQSLOD=9.35;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,87:87:99:2923,229,0:127 1|0:36,50:86:99:1429,0,1006:127 1|1:0,60:60:99:1885,147,0:127
+6 71018445 rs1321063 C A 518.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.67;DB;DP=185;Dels=0.00;FS=1.62;HaplotypeScore=0.692;MLEAC=1;MLEAF=0.167;MQ=58.93;MQ0=0;MQRankSum=0.355;QD=8.78;ReadPosRankSum=1.31;SB=-4.020e+02;VQSLOD=7.75;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:67,0:67:99:0,184,2404:127 0|0:59,0:59:99:0,160,2065:127 0|1:29,30:59:99:553,0,809:127
+8 42044954 rs1058720 G A 2760.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.31;DB;DP=157;Dels=0.00;FS=0.00;HaplotypeScore=2.10;MLEAC=4;MLEAF=0.667;MQ=58.82;MQ0=0;MQRankSum=-2.021e+00;QD=17.58;ReadPosRankSum=-4.620e-01;SB=-1.377e+03;VQSLOD=7.58;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,56:56:99:1820,147,0:127 1|0:24,27:51:99:555,0,233:127 1|0:26,24:50:99:427,0,458:127
+15 23743658 rs142070302 T A 1007.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.164e+00;DB;DP=408;Dels=0.00;FS=166.85;HaplotypeScore=53.54;MLEAC=3;MLEAF=0.500;MQ=38.96;MQ0=14;MQRankSum=-6.283e+00;QD=2.47;ReadPosRankSum=2.49;SB=-1.079e-02;VQSLOD=-3.048e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:104,39:143:99:365,0,2802:45 0/1:99,40:139:99:636,0,2335:45 0/1:97,28:126:45:45,0,2324:45
+6 45421630 rs1343799 C T 5422.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=3.42;DB;DP=240;Dels=0.00;FS=10.69;HaplotypeScore=0.798;MLEAC=4;MLEAF=0.667;MQ=59.46;MQ0=0;MQRankSum=1.09;QD=22.59;ReadPosRankSum=1.25;SB=-2.647e+03;VQSLOD=7.70;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:29,43:72:99:1445,0,843:127 0|1:43,37:80:99:1121,0,1302:127 1|1:0,88:88:99:2856,220,0:127
+4 177855678 rs1545090 A G 7065.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.00;HaplotypeScore=1.17;MLEAC=6;MLEAF=1.00;MQ=59.50;MQ0=0;QD=30.85;SB=-3.799e+03;VQSLOD=11.01;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,84:84:99:2701,235,0:127 1|1:0,79:80:99:2401,211,0:127 1|1:0,65:65:99:1963,165,0:127
+4 92648168 rs61329801 A ATTTG 7717 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.947;DB;DP=186;FS=8.29;HaplotypeScore=7.88;MLEAC=4;MLEAF=0.667;MQ=56.58;MQ0=0;MQRankSum=-1.740e-01;QD=41.49;ReadPosRankSum=-4.440e-01;SB=-3.591e+03;VQSLOD=3.52;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:45,35:80:99:2213,0,2213:127 1|1:3,59:62:99:4128,181,0:127 0|1:22,22:44:99:1376,0,1181:127
+12 79238948 rs10778234 C T 3719.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.19;DB;DP=241;Dels=0.00;FS=7.07;HaplotypeScore=0.245;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-3.810e-01;QD=15.43;ReadPosRankSum=0.579;SB=-1.864e+03;VQSLOD=7.81;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:42,35:77:99:1049,0,1213:127 0/1:37,32:69:99:988,0,957:127 0/1:42,53:95:99:1682,0,1062:127
+2 64848970 rs35473866 T C 655.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.263;DB;DP=218;Dels=0.00;FS=8.01;HaplotypeScore=2.58;MLEAC=1;MLEAF=0.167;MQ=58.36;MQ0=0;MQRankSum=-1.680e-01;QD=8.29;ReadPosRankSum=-3.070e-01;SB=-3.420e+02;VQSLOD=5.92;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:78,0:78:99:0,208,2627:127 0|0:61,0:61:99:0,135,1725:127 0|1:35,42:79:99:690,0,1042:127
+13 21520045 rs9509464 A C 5103.01 PASS AC=6;AF=1.00;AN=6;DB;DP=195;Dels=0.00;FS=0.00;HaplotypeScore=1.61;MLEAC=6;MLEAF=1.00;MQ=47.37;MQ0=0;QD=26.17;SB=-2.582e+03;VQSLOD=5.19;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2106,186,0:98 1|1:0,78:78:99:1856,162,0:98 1|1:0,46:46:99:1141,99,0:98
+14 106085773 rs2955055 C T 2115.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-7.460e-01;DB;DP=172;Dels=0.00;FS=18.42;HaplotypeScore=2.95;MLEAC=3;MLEAF=0.500;MQ=35.68;MQ0=18;MQRankSum=3.25;QD=12.30;ReadPosRankSum=0.100;SB=-5.530e+02;VQSLOD=1.29;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:32,33:65:99:600,0,554:80 0/1:30,42:72:99:1001,0,400:80 0/1:12,23:35:80:553,0,80:80
+16 77418810 rs71137811 T TG 7389 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.643;DB;DP=244;FS=2.25;HaplotypeScore=114.41;MLEAC=5;MLEAF=0.833;MQ=61.09;MQ0=0;MQRankSum=2.49;QD=30.28;ReadPosRankSum=2.98;SB=-2.597e+03;VQSLOD=2.91;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:8,84:93:99:3558,264,0:127 1|1:8,65:75:99:2723,179,0:127 1|0:42,32:76:99:1108,0,899:127
+3 118367863 rs71617664 TAGATAGATTA T 12039 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.12;DB;DP=201;FS=9.45;HaplotypeScore=212.50;MLEAC=6;MLEAF=1.00;MQ=55.55;MQ0=1;MQRankSum=1.58;QD=59.90;ReadPosRankSum=0.721;SB=-5.599e+03;VQSLOD=-4.074e-01;culprit=QD GT:AD:DP:GQ:PL:TP 1|1:13,57:71:99:4299,164,0:127 1|1:60,4:64:99:3312,174,0:127 1|1:9,50:64:99:4428,177,0:127
+12 21328424 rs4149040 G C 2565.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.888;DB;DP=252;Dels=0.00;FS=9.75;HaplotypeScore=0.608;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=1.17;QD=15.18;ReadPosRankSum=0.966;SB=-1.181e+03;VQSLOD=7.55;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,49:89:99:1534,0,1308:127 0|0:83,0:83:99:0,241,3117:127 1|0:45,35:80:99:1070,0,1402:127
+3 8399330 rs6770171 G A 6816.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.69;DB;DP=253;Dels=0.00;FS=0.637;HaplotypeScore=1.28;MLEAC=5;MLEAF=0.833;MQ=58.42;MQ0=0;MQRankSum=0.607;QD=26.94;ReadPosRankSum=-5.030e-01;SB=-3.369e+03;VQSLOD=8.01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,106:106:99:3784,292,0:127 1|1:0,72:72:99:2164,169,0:127 1|0:42,33:75:99:868,0,1146:127
+1 17032814 rs2773183 T C 2828.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=-3.879e+00;DB;DP=322;Dels=0.00;FS=2.43;HaplotypeScore=15.45;MLEAC=3;MLEAF=0.500;MQ=56.86;MQ0=0;MQRankSum=2.92;QD=8.78;ReadPosRankSum=-1.245e+00;SB=-1.943e+03;VQSLOD=-1.421e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:63,59:122:99:1434,0,1831:127 0/1:53,56:109:99:910,0,871:127 0/1:61,30:91:99:523,0,1257:127
+11 44985620 rs7106313 C T 338.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=2.18;DB;DP=162;Dels=0.00;FS=4.84;HaplotypeScore=2.00;MLEAC=1;MLEAF=0.167;MQ=56.94;MQ0=0;MQRankSum=2.02;QD=8.67;ReadPosRankSum=0.983;SB=-2.190e+02;VQSLOD=6.66;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:79,0:80:99:0,174,2084:72 0|0:43,0:43:72:0,72,877:72 0|1:20,18:39:99:373,0,365:72
+20 21523349 rs73127889 A G 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-6.469e+00;DB;DP=253;Dels=0.00;FS=3.73;HaplotypeScore=1.54;MLEAC=2;MLEAF=0.333;MQ=59.31;MQ0=0;MQRankSum=0.821;QD=13.69;ReadPosRankSum=1.51;SB=-8.640e+02;VQSLOD=7.84;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:44,48:92:99:1319,0,1356:127 0|0:86,0:86:99:0,235,2994:127 1|0:37,38:75:99:1006,0,1111:127
+13 65275154 rs359338 G A 1963.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.73;DB;DP=173;Dels=0.00;FS=3.63;HaplotypeScore=0.948;MLEAC=2;MLEAF=0.333;MQ=59.49;MQ0=0;MQRankSum=-6.760e-01;QD=14.54;ReadPosRankSum=0.399;SB=-1.054e+03;VQSLOD=8.45;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:31,28:59:99:883,0,990:108 1|0:39,37:76:99:1119,0,1112:108 0|0:38,0:38:99:0,108,1390:108
+5 93119893 rs6879620 G A 4262.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=4.93;DB;DP=239;Dels=0.00;FS=1.05;HaplotypeScore=2.16;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=0.891;QD=17.83;ReadPosRankSum=-2.670e+00;SB=-2.596e+03;VQSLOD=7.07;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:49,42:91:99:1098,0,1410:127 0|1:36,38:74:99:890,0,1008:127 1|1:0,74:74:99:2274,178,0:127
+1 216407409 rs3767692 A G 8820.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-8.030e-01;DB;DP=295;Dels=0.00;FS=1.35;HaplotypeScore=2.58;MLEAC=5;MLEAF=0.833;MQ=59.28;MQ0=0;MQRankSum=-3.750e-01;QD=29.90;ReadPosRankSum=-3.630e-01;SB=-4.445e+03;VQSLOD=7.05;culprit=DP GT:AD:DP:GQ:PL:TP 1|1:1,115:116:99:4251,328,0:127 1|0:39,51:90:99:1430,0,1275:127 1|1:0,89:89:99:3139,241,0:127
+X 116855730 rs980389 A G 2366.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.939e+00;DB;DP=173;Dels=0.00;FS=3.51;HaplotypeScore=0.908;MLEAC=3;MLEAF=0.500;MQ=59.87;MQ0=0;MQRankSum=0.653;QD=21.51;ReadPosRankSum=0.730;SB=-1.218e+03;VQSLOD=7.96;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:37,33:70:99:965,0,1249:114 1|1:0,40:40:99:1446,114,0:114 0|0:63,0:63:99:0,175,2284:114
+13 92742124 rs2148446 G A 1884.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.340e+00;DB;DP=213;Dels=0.00;FS=0.00;HaplotypeScore=0.316;MLEAC=2;MLEAF=0.333;MQ=59.37;MQ0=0;MQRankSum=-2.935e+00;QD=12.99;ReadPosRankSum=-5.790e-01;SB=-9.540e+02;VQSLOD=7.28;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|1:38,38:76:99:1130,0,1190:127 0|0:68,0:68:99:0,190,2454:127 1|0:38,31:69:99:793,0,1094:127
+10 38560911 rs80189231 T A 1072.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=0.103;DB;DP=356;Dels=0.00;FS=12.04;HaplotypeScore=5.40;MLEAC=3;MLEAF=0.500;MQ=49.74;MQ0=6;MQRankSum=-2.686e+00;QD=3.01;ReadPosRankSum=0.797;SB=-1.690e+02;VQSLOD=-3.513e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:109,26:135:99:389,0,2879:127 0/1:84,27:111:99:539,0,2214:127 0/1:93,17:110:99:183,0,2277:127
+X 23948720 rs35152285 C CA 535.35 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.538e+00;DB;DP=148;FS=0.00;HaplotypeScore=24.32;MLEAC=3;MLEAF=0.500;MQ=53.02;MQ0=0;MQRankSum=0.234;QD=3.62;RPA=16,17;RU=A;ReadPosRankSum=-1.638e+00;SB=-2.841e+02;STR;VQSLOD=3.02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:37,27:68:62:391,0,62:13 0/1:16,8:25:13:102,0,13:13 0/1:47,4:53:90:90,0,142:13
+6 79887872 rs6454101 C T 2130.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.355e+00;DB;DP=204;Dels=0.00;FS=11.82;HaplotypeScore=2.38;MLEAC=3;MLEAF=0.500;MQ=59.68;MQ0=0;MQRankSum=1.01;QD=10.44;ReadPosRankSum=-7.690e-01;SB=-1.370e+03;VQSLOD=7.52;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:31,31:62:99:806,0,990:127 0/1:42,31:73:99:606,0,921:127 0/1:29,40:69:99:757,0,749:127
+9 33446281 . C CT 31.72 VQSRTrancheINDEL99.90to100.00 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.119e+00;DP=178;FS=127.57;HaplotypeScore=21.55;MLEAC=1;MLEAF=0.167;MQ=58.69;MQ0=0;MQRankSum=1.61;QD=0.620;RPA=2,3;RU=T;ReadPosRankSum=-5.268e+00;SB=-4.493e+00;STR;VQSLOD=-1.057e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:77,0:79:73:0,73,2094:6 0|0:46,0:48:5:0,5,958:6 0|1:35,15:51:75:75,0,1073:6
+21 34546711 rs11701692 T C 1030.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.884e+00;DB;DP=152;Dels=0.00;FS=8.32;HaplotypeScore=1.93;MLEAC=2;MLEAF=0.333;MQ=57.61;MQ0=0;MQRankSum=-2.910e-01;QD=10.51;ReadPosRankSum=0.258;SB=-4.600e+02;VQSLOD=6.46;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,25:61:99:574,0,1137:127 1|0:19,18:37:99:495,0,498:127 0|0:54,0:54:99:0,141,1811:127
+7 20767781 rs150977587 TA T 2754.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.30;DB;DP=259;FS=0.00;HaplotypeScore=122.50;MLEAC=4;MLEAF=0.667;MQ=59.41;MQ0=1;MQRankSum=-6.400e-01;QD=10.63;RPA=13,12;RU=A;ReadPosRankSum=0.189;SB=-1.344e+03;STR;VQSLOD=3.30;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:59,45:107:99:923,0,795:116 1|1:15,54:72:99:1313,116,0:116 0|1:44,31:79:99:569,0,617:116
+11 26026566 rs7942277 T C 5414.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=6;MLEAF=1.00;MQ=58.89;MQ0=0;QD=30.76;SB=-2.812e+03;VQSLOD=11.05;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,53:53:99:1707,132,0:122 1|1:0,53:53:99:1581,123,0:122 1|1:0,70:70:99:2126,163,0:122
+9 69810010 rs113063015 A C 280.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-1.223e+00;DB;DP=716;DS;Dels=0.00;FS=9.00;HaplotypeScore=39.83;MLEAC=3;MLEAF=0.500;MQ=37.32;MQ0=64;MQRankSum=-3.574e+00;QD=0.390;ReadPosRankSum=-8.970e-01;SB=-1.065e-02;VQSLOD=-6.817e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0/1:218,23:241:73:73,0,3591:70 0/1:188,39:227:99:172,0,4233:70 0/1:217,31:248:74:74,0,5042:70
+1 90146546 rs7512447 C T 8721.01 PASS AC=6;AF=1.00;AN=6;DB;DP=241;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=59.40;MQ0=0;QD=36.19;SB=-4.084e+03;VQSLOD=11.32;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2599,196,0:127 1|1:0,86:86:99:3042,235,0:127 1|1:0,84:84:99:3080,238,0:127
+20 3199373 rs2422861 G A 896.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.452;DB;DP=135;Dels=0.00;FS=0.664;HaplotypeScore=2.84;MLEAC=3;MLEAF=0.500;MQ=58.47;MQ0=0;MQRankSum=-2.170e-01;QD=6.64;ReadPosRankSum=0.111;SB=-6.080e+02;VQSLOD=7.71;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,24:56:99:472,0,640:127 0/1:25,15:40:99:229,0,603:127 0/1:20,19:39:99:234,0,379:127
+16 11397080 rs1019552 T C 2295.44 PASS AC=6;AF=1.00;AN=6;DB;DP=169;Dels=1.000e-02;FS=0.00;HaplotypeScore=8.22;MLEAC=6;MLEAF=1.00;MQ=59.32;MQ0=0;QD=13.58;SB=-2.379e+03;VQSLOD=4.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,71:71:96:1220,96,0:9 1|1:0,48:48:9:78,9,0:9 1|1:0,48:48:81:1035,81,0:9
+16 5754758 rs11644707 C T 1012.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.78;DB;DP=161;Dels=0.00;FS=0.00;HaplotypeScore=2.46;MLEAC=2;MLEAF=0.333;MQ=59.71;MQ0=0;MQRankSum=0.699;QD=9.64;ReadPosRankSum=2.62;SB=-5.580e+02;VQSLOD=7.10;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:31,26:57:99:627,0,943:125 0|0:56,0:56:99:0,126,1597:125 1|0:32,16:48:99:424,0,785:125
+3 86234718 rs2324883 T C 7655.01 PASS AC=6;AF=1.00;AN=6;DB;DP=234;Dels=0.00;FS=0.00;HaplotypeScore=0.649;MLEAC=6;MLEAF=1.00;MQ=59.51;MQ0=0;QD=32.71;SB=-4.142e+03;VQSLOD=11.21;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,80:80:99:2857,223,0:127 1|1:0,76:77:99:2512,196,0:127 1|1:0,77:77:99:2286,178,0:127
+2 85513238 rs62162679 C T 742.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.16;DB;DP=137;Dels=0.00;FS=4.47;HaplotypeScore=1.39;MLEAC=2;MLEAF=0.333;MQ=57.50;MQ0=0;MQRankSum=0.479;QD=7.57;ReadPosRankSum=-2.720e-01;SB=-5.520e+02;VQSLOD=7.13;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:39,0:39:99:0,105,1267:104 0|1:23,23:47:99:430,0,551:104 0|1:31,20:51:99:351,0,633:104
+5 3276081 rs4866540 G A 3653.01 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=5.00;DB;DP=176;Dels=0.00;FS=2.78;HaplotypeScore=19.00;MLEAC=4;MLEAF=0.667;MQ=57.74;MQ0=0;MQRankSum=-5.690e-01;QD=20.76;ReadPosRankSum=1.31;SB=-6.610e+02;VQSLOD=3.18;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,71:72:99:2337,175,0:127 1|0:26,25:51:99:719,0,601:127 1|0:26,27:53:99:597,0,662:127
+19 11730690 rs4804613 C T 2578.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=5.06;DB;DP=197;Dels=0.00;FS=0.529;HaplotypeScore=0.00;MLEAC=3;MLEAF=0.500;MQ=59.36;MQ0=0;MQRankSum=0.416;QD=13.09;ReadPosRankSum=-5.540e-01;SB=-1.389e+03;VQSLOD=9.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:21,26:47:99:586,0,623:127 0/1:42,45:87:99:1192,0,1055:127 0/1:32,30:63:99:839,0,932:127
+13 56456878 rs2997102 C A 9454.01 PASS AC=6;AF=1.00;AN=6;DB;DP=257;Dels=0.00;FS=0.00;HaplotypeScore=0.954;MLEAC=6;MLEAF=1.00;MQ=59.57;MQ0=0;QD=36.79;SB=-4.826e+03;VQSLOD=11.51;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,99:99:99:3692,280,0:127 1|1:0,88:88:99:3239,253,0:127 1|1:0,70:70:99:2523,193,0:127
+3 48757773 rs61137521 A G 3103.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-7.940e-01;DB;DP=172;Dels=0.00;FS=0.00;HaplotypeScore=1.90;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=-6.930e-01;QD=18.04;ReadPosRankSum=-1.667e+00;SB=-1.874e+03;VQSLOD=7.92;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,50:51:99:1723,141,0:127 1|0:31,34:65:99:745,0,814:127 1|0:24,32:56:99:677,0,603:127
+4 71449060 rs60358213 G A 2269.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=5.70;DB;DP=227;Dels=0.00;FS=13.05;HaplotypeScore=20.14;MLEAC=2;MLEAF=0.333;MQ=55.35;MQ0=0;MQRankSum=0.477;QD=13.19;ReadPosRankSum=2.30;SB=-8.910e+02;VQSLOD=1.89;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:60,40:100:99:1221,0,1476:127 1|0:37,35:72:99:1087,0,987:127 0|0:53,1:54:99:0,157,2026:127
+19 20782710 rs10413568 T C 6304.01 PASS AC=6;AF=1.00;AN=6;DB;DP=203;Dels=0.00;FS=0.00;HaplotypeScore=0.692;MLEAC=6;MLEAF=1.00;MQ=59.56;MQ0=0;QD=31.05;SB=-2.367e+03;VQSLOD=10.77;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,74:74:99:2375,214,0:127 1|1:0,80:80:99:2480,217,0:127 1|1:0,49:49:99:1449,129,0:127
+3 37334187 rs112182713 G GGTT 1235.2 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.420;DB;DP=233;FS=10.65;HaplotypeScore=68.31;MLEAC=1;MLEAF=0.167;MQ=56.19;MQ0=0;MQRankSum=-1.868e+00;QD=17.65;RPA=1,2;RU=GTT;ReadPosRankSum=1.38;SB=-4.490e+02;STR;VQSLOD=3.14;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:83,0:83:99:0,244,4702:127 0|0:79,0:77:99:0,220,4149:127 0|1:40,23:68:99:1279,0,1696:127
+1 175207612 rs11484568 C T 1920.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.64;DB;DP=216;Dels=0.00;FS=0.537;HaplotypeScore=2.25;MLEAC=2;MLEAF=0.333;MQ=58.99;MQ0=0;MQRankSum=0.383;QD=14.12;ReadPosRankSum=0.169;SB=-1.064e+03;VQSLOD=8.59;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:34,40:74:99:1152,0,995:127 0|0:80,0:80:99:0,208,2602:127 1|0:34,28:62:99:807,0,998:127
+2 209758643 rs12992166 C T 1534.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.18;DB;DP=163;Dels=0.00;FS=8.81;HaplotypeScore=2.36;MLEAC=2;MLEAF=0.333;MQ=58.93;MQ0=0;MQRankSum=1.99;QD=12.08;ReadPosRankSum=1.08;SB=-4.720e+02;VQSLOD=6.82;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,22:59:99:610,0,886:93 1|0:32,36:68:99:963,0,797:93 0|0:36,0:36:93:0,93,1058:93
+4 82427976 rs6841516 G A 561.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.022e+00;DB;DP=166;Dels=0.00;FS=0.00;HaplotypeScore=1.47;MLEAC=1;MLEAF=0.167;MQ=59.56;MQ0=0;MQRankSum=-1.555e+00;QD=11.00;ReadPosRankSum=0.016;SB=-3.880e+02;VQSLOD=8.10;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:51,0:51:99:0,132,1705:127 0|1:22,29:51:99:596,0,483:127 0|0:64,0:64:99:0,135,1755:127
+3 26960556 rs4422260 T C 878.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-2.140e+00;DB;DP=220;Dels=0.00;FS=1.11;HaplotypeScore=1.72;MLEAC=2;MLEAF=0.333;MQ=41.87;MQ0=3;MQRankSum=-6.679e+00;QD=5.97;ReadPosRankSum=-3.100e-02;SB=-4.600e+02;VQSLOD=0.717;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,208,2660:127 0|1:32,48:80:99:759,0,915:127 0|1:37,30:67:99:158,0,1092:127
+17 14096866 . C T 489.26 VQSRTrancheSNP99.00to99.90 AC=3;AF=0.500;AN=6;BaseQRankSum=4.54;DP=181;Dels=0.00;FS=33.90;HaplotypeScore=1.08;MLEAC=3;MLEAF=0.500;MQ=24.52;MQ0=71;MQRankSum=0.353;QD=2.70;ReadPosRankSum=0.385;SB=-1.450e+02;VQSLOD=-6.217e+00;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:48,17:66:99:228,0,822:63 0/1:42,16:58:99:237,0,389:63 0/1:44,13:57:63:63,0,523:63
+11 96559202 rs72048706 C CAA 373.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-7.960e-01;DB;DP=121;FS=1.54;HaplotypeScore=64.55;MLEAC=4;MLEAF=0.667;MQ=39.96;MQ0=6;MQRankSum=-5.390e-01;QD=3.08;RPA=21,23;RU=A;ReadPosRankSum=-3.583e+00;SB=-1.985e+02;STR;VQSLOD=1.31;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:20,8:32:24:111,0,24:22 1|1:40,0:41:29:180,29,0:22 0|1:39,0:39:41:133,0,41:22
+GL000215.1 142616 . T C 976.25 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DP=80;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=21.04;MQ0=42;QD=12.20;SB=-8.001e+01;VQSLOD=-4.104e-01;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,33:33:42:516,42,0:19 1|1:0,21:21:24:272,24,0:19 1|1:0,26:26:21:226,21,0:19
+21 18433036 rs969905 A G 781.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-6.610e+00;DB;DP=229;Dels=0.00;FS=2.23;HaplotypeScore=1.29;MLEAC=1;MLEAF=0.167;MQ=59.55;MQ0=0;MQRankSum=0.300;QD=10.15;ReadPosRankSum=-3.840e-01;SB=-4.990e+02;VQSLOD=9.58;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:62,0:63:99:0,181,2380:127 0|0:89,0:89:99:0,244,3177:127 0|1:39,38:77:99:816,0,1256:127
+14 20313371 rs10137604 A C 2154.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-4.894e+00;DB;DP=255;Dels=0.00;FS=0.00;HaplotypeScore=2.05;MLEAC=2;MLEAF=0.333;MQ=56.32;MQ0=1;MQRankSum=1.61;QD=13.72;ReadPosRankSum=0.126;SB=-1.124e+03;VQSLOD=5.62;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:40,48:88:99:1426,0,1229:127 0|0:98,0:98:99:0,268,3527:127 1|0:43,26:69:99:767,0,1284:127
+10 74020452 rs72806301 C A 1116.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-2.155e+00;DB;DP=135;Dels=0.00;FS=3.28;HaplotypeScore=0.872;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=-8.180e-01;QD=11.88;ReadPosRankSum=1.48;SB=-6.800e+02;VQSLOD=7.27;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:20,27:47:99:658,0,446:104 0|0:41,0:41:99:0,105,1324:104 1|0:25,22:47:99:497,0,482:104
+3 17501103 . T G 45.26 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-6.477e+00;DP=156;Dels=0.00;FS=71.75;HaplotypeScore=1.53;MLEAC=2;MLEAF=0.333;MQ=58.02;MQ0=0;MQRankSum=-1.560e-01;QD=0.430;ReadPosRankSum=-3.974e+00;SB=-1.474e-02;VQSLOD=-1.415e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,8:51:99:0,114,1252:33 0|1:22,24:46:34:34,0,492:33 0|1:24,34:59:50:50,0,492:33
+9 109619207 rs4743032 A T 3810.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.859e+00;DB;DP=214;Dels=0.00;FS=10.28;HaplotypeScore=0.322;MLEAC=3;MLEAF=0.500;MQ=59.59;MQ0=0;MQRankSum=0.557;QD=25.07;ReadPosRankSum=-8.360e-01;SB=-2.019e+03;VQSLOD=8.14;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:37,39:76:99:1185,0,1225:127 1|1:0,76:76:99:2625,202,0:127 0|0:62,0:62:99:0,156,2049:127
+1 156248265 rs12038203 C T 643.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.110e-01;DB;DP=145;Dels=0.00;FS=4.57;HaplotypeScore=0.277;MLEAC=1;MLEAF=0.167;MQ=59.08;MQ0=0;MQRankSum=0.862;QD=12.86;ReadPosRankSum=0.177;SB=-3.450e+02;VQSLOD=7.50;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:47,0:47:99:0,123,1604:110 0|0:48,0:48:99:0,111,1433:110 0|1:25,25:50:99:678,0,694:110
+3 128140891 rs73201490 C T 1315.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.39;DB;DP=142;Dels=0.00;FS=0.667;HaplotypeScore=3.49;MLEAC=2;MLEAF=0.333;MQ=58.69;MQ0=0;MQRankSum=1.73;QD=14.30;ReadPosRankSum=0.758;SB=-6.400e+02;VQSLOD=6.70;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:29,24:53:99:636,0,670:104 0|0:50,0:50:99:0,105,1188:104 1|0:12,27:39:99:718,0,250:104
+10 65355538 rs10733794 A G 2464.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-8.392e+00;DB;DP=193;Dels=0.00;FS=7.47;HaplotypeScore=2.54;MLEAC=3;MLEAF=0.500;MQ=58.06;MQ0=2;MQRankSum=0.999;QD=18.96;ReadPosRankSum=-1.229e+00;SB=-1.065e+03;VQSLOD=6.39;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:33,32:65:99:830,0,1039:127 1|1:1,64:65:99:1679,153,0:127 0|0:63,0:63:99:0,159,2042:127
+12 68921960 . TATTTTC T 803.22 VQSRTrancheINDEL99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=9.86;DP=270;FS=190.60;HaplotypeScore=223.07;MLEAC=3;MLEAF=0.500;MQ=54.84;MQ0=1;MQRankSum=-4.552e+00;QD=2.97;ReadPosRankSum=-6.674e+00;SB=-1.330e-03;VQSLOD=-1.777e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:69,22:95:99:394,0,4974:101 0/1:87,0:86:99:355,0,5072:101 0/1:83,0:84:99:102,0,5546:101
+16 83153777 rs4395063 T C 3143.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.771e+00;DB;DP=205;Dels=0.00;FS=1.80;HaplotypeScore=1.04;MLEAC=4;MLEAF=0.667;MQ=59.55;MQ0=0;MQRankSum=-1.380e+00;QD=15.33;ReadPosRankSum=0.424;SB=-2.104e+03;VQSLOD=8.82;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:31,31:62:99:867,0,865:127 0|1:45,28:73:99:412,0,801:127 1|1:0,70:70:99:1906,150,0:127
+16 65776985 rs72784548 T C 3527.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.44;DB;DP=195;Dels=0.00;FS=1.23;HaplotypeScore=0.879;MLEAC=4;MLEAF=0.667;MQ=58.78;MQ0=0;MQRankSum=1.63;QD=18.09;ReadPosRankSum=1.36;SB=-1.904e+03;VQSLOD=7.68;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,68:68:99:2351,181,0:127 1|0:33,28:61:99:586,0,710:127 1|0:31,35:66:99:590,0,468:127
+10 132949760 rs10829924 A C 684.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.328e+00;DB;DP=215;Dels=0.00;FS=15.46;HaplotypeScore=1.32;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-1.053e+00;QD=10.53;ReadPosRankSum=-2.893e+00;SB=-2.920e+02;VQSLOD=5.89;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:80,0:81:99:0,229,2999:127 0|0:69,0:69:99:0,175,2268:127 0|1:35,30:65:99:719,0,1046:127
+17 66991216 rs61697543 T C 738.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.530e+00;DB;DP=252;Dels=0.00;FS=1.49;HaplotypeScore=1.71;MLEAC=1;MLEAF=0.167;MQ=59.36;MQ0=0;MQRankSum=0.771;QD=10.86;ReadPosRankSum=-7.240e-01;SB=-3.930e+02;VQSLOD=8.89;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:95,0:95:99:0,268,3511:127 0|0:89,0:89:99:0,235,3058:127 0|1:33,35:68:99:773,0,965:127
+7 152208470 rs6464236 G C 4321.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.23;DB;DP=169;Dels=0.00;FS=1.63;HaplotypeScore=1.36;MLEAC=5;MLEAF=0.833;MQ=57.18;MQ0=1;MQRankSum=1.91;QD=25.57;ReadPosRankSum=0.892;SB=-2.137e+03;VQSLOD=6.76;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:1,56:57:99:1949,150,0:122 1|1:0,54:54:99:1557,123,0:122 1|0:30,28:58:99:815,0,715:122
+18 41449098 rs2045671 C T 8380.01 PASS AC=6;AF=1.00;AN=6;DB;DP=237;Dels=0.00;FS=0.00;HaplotypeScore=1.35;MLEAC=6;MLEAF=1.00;MQ=59.65;MQ0=0;QD=35.36;SB=-4.462e+03;VQSLOD=11.65;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,76:76:99:2756,214,0:127 1|1:0,75:75:99:2635,202,0:127 1|1:0,86:86:99:2989,229,0:127
+9 89010476 rs164937 T C 736.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-3.977e+00;DB;DP=216;Dels=0.00;FS=1.48;HaplotypeScore=1.06;MLEAC=1;MLEAF=0.167;MQ=39.79;MQ0=9;MQRankSum=-3.028e+00;QD=9.56;ReadPosRankSum=0.542;SB=-4.240e+02;VQSLOD=2.08;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:66,0:66:99:0,174,2097:127 0|1:40,37:77:99:771,0,876:127 0|0:73,0:73:99:0,183,2147:127
+17 75679403 . TGTG T 1024.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.62;DP=161;FS=1.69;HaplotypeScore=259.32;MLEAC=2;MLEAF=0.333;MQ=51.57;MQ0=0;MQRankSum=-8.617e+00;QD=9.48;ReadPosRankSum=-4.980e-01;SB=-4.680e+02;VQSLOD=1.76;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:29,19:58:99:711,0,1547:127 1|0:34,11:50:99:361,0,1922:127 0|0:53,0:53:99:0,157,3186:127
+6 35346891 . C T 483.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-6.402e+00;DP=205;Dels=0.020;FS=214.15;HaplotypeScore=4.51;MLEAC=3;MLEAF=0.500;MQ=51.07;MQ0=1;MQRankSum=-2.038e+00;QD=2.36;ReadPosRankSum=-2.250e+00;SB=-1.065e-02;VQSLOD=-1.170e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:48,31:79:99:257,0,635:80 0/1:40,22:62:99:185,0,308:80 0/1:44,16:60:80:80,0,534:80
+3 179020937 rs13082816 C T 1116.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=5.60;DB;DP=82;Dels=0.00;FS=0.00;HaplotypeScore=0.636;MLEAC=4;MLEAF=0.667;MQ=54.57;MQ0=1;MQRankSum=0.374;QD=13.61;ReadPosRankSum=-3.700e-02;SB=-2.010e+02;VQSLOD=6.09;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:13,13:26:99:388,0,178:36 1|1:0,24:24:36:442,36,0:36 0|1:13,19:32:99:328,0,179:36
+22 50309915 rs9616205 A T 1712.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-9.360e-01;DB;DP=162;Dels=0.00;FS=2.86;HaplotypeScore=2.15;MLEAC=2;MLEAF=0.333;MQ=56.21;MQ0=5;MQRankSum=0.892;QD=13.92;ReadPosRankSum=-1.040e+00;SB=-9.940e+02;VQSLOD=6.28;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:39,33:72:99:777,0,994:78 0|0:39,0:39:78:0,78,1010:78 1|0:16,35:51:99:974,0,257:78
+2 36994439 rs11124542 A C 1302.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.406e+00;DB;DP=191;Dels=0.00;FS=3.34;HaplotypeScore=2.18;MLEAC=3;MLEAF=0.500;MQ=58.93;MQ0=0;MQRankSum=-7.250e-01;QD=6.82;ReadPosRankSum=0.302;SB=-1.006e+03;VQSLOD=7.95;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:32,28:60:99:710,0,1044:127 0/1:34,25:59:99:309,0,772:127 0/1:45,27:72:99:322,0,1096:127
+14 77813103 rs59474357 G GT 328.58 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-2.653e+00;DB;DP=164;FS=5.22;HaplotypeScore=117.86;MLEAC=5;MLEAF=0.833;MQ=52.18;MQ0=0;MQRankSum=1.26;QD=2.00;RPA=24,25;RU=T;ReadPosRankSum=-1.030e+00;SB=-1.639e+02;STR;VQSLOD=2.16;culprit=QD GT:AD:DP:GQ:PL:TP 1|0:51,1:53:18:105,0,18:6 1|1:58,1:59:13:150,13,0:6 0|1:34,13:52:1:123,6,0:6
+21 10750991 . C T 602.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=10.10;DP=735;DS;Dels=0.00;FS=27.02;HaplotypeScore=107.27;MLEAC=2;MLEAF=0.333;MQ=44.40;MQ0=2;MQRankSum=-1.456e+01;QD=1.24;ReadPosRankSum=0.063;SB=-8.430e+02;VQSLOD=-1.009e+02;culprit=DP GT:AD:DP:GQ:PL:TP 1|0:164,78:243:99:357,0,5193:103 1|0:187,55:242:99:284,0,5252:103 0|0:199,50:250:99:0,103,5864:103
+3 137840974 rs2622698 C A 6792.01 PASS AC=6;AF=1.00;AN=6;DB;DP=232;Dels=0.00;FS=0.00;HaplotypeScore=2.65;MLEAC=6;MLEAF=1.00;MQ=59.04;MQ0=0;QD=29.28;SB=-3.999e+03;VQSLOD=9.77;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,79:79:99:2640,205,0:127 1|1:0,78:78:99:2229,178,0:127 1|1:0,75:75:99:1923,153,0:127
+11 19325064 rs793250 G A 5752.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=5.08;DB;DP=203;Dels=0.00;FS=2.53;HaplotypeScore=0.817;MLEAC=5;MLEAF=0.833;MQ=59.35;MQ0=0;MQRankSum=-6.100e-02;QD=28.34;ReadPosRankSum=0.095;SB=-3.093e+03;VQSLOD=9.46;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,71:71:99:2527,190,0:127 1|1:0,78:78:99:2626,205,0:127 1|0:32,22:54:99:599,0,768:127
+11 35980461 rs263087 A T 3494.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-7.010e-01;DB;DP=186;Dels=0.00;FS=0.00;HaplotypeScore=2.96;MLEAC=4;MLEAF=0.667;MQ=59.34;MQ0=0;MQRankSum=0.836;QD=18.79;ReadPosRankSum=7.000e-03;SB=-1.535e+03;VQSLOD=7.64;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:36,35:71:99:1001,0,1165:127 0|1:30,26:56:99:710,0,796:127 1|1:0,59:59:99:1783,144,0:127
+16 55910673 rs17265788 G C 2345.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=2.66;DB;DP=208;Dels=0.00;FS=3.16;HaplotypeScore=1.92;MLEAC=3;MLEAF=0.500;MQ=59.67;MQ0=0;MQRankSum=-3.330e-01;QD=16.63;ReadPosRankSum=-4.250e-01;SB=-1.468e+03;VQSLOD=8.37;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:33,33:66:99:769,0,761:122 0|0:67,0:67:99:0,123,1506:122 1|1:0,75:75:99:1621,132,0:122
+11 3839556 rs5789310 CA C 803.1 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.138;DB;DP=170;FS=4.50;HaplotypeScore=36.64;MLEAC=3;MLEAF=0.500;MQ=55.95;MQ0=2;MQRankSum=2.28;QD=4.72;RPA=17,16;RU=A;ReadPosRankSum=3.21;SB=-3.839e+02;STR;VQSLOD=1.81;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:35,17:55:32:329,0,32:3 0/1:45,9:57:8:276,0,8:3 0/1:30,19:52:1:244,0,1:3
+20 12166868 rs7272217 C T 926.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.444e+00;DB;DP=200;Dels=0.00;FS=2.63;HaplotypeScore=0.841;MLEAC=1;MLEAF=0.167;MQ=58.94;MQ0=0;MQRankSum=-1.362e+00;QD=13.23;ReadPosRankSum=-1.055e+00;SB=-4.040e+02;VQSLOD=7.62;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:68,0:68:99:0,190,2486:127 0|0:62,0:62:99:0,169,2218:127 0|1:33,37:70:99:961,0,870:127
+10 46605359 . CT C 883.2 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.62;DP=136;FS=9.66;HaplotypeScore=4.70;MLEAC=3;MLEAF=0.500;MQ=22.12;MQ0=1;MQRankSum=0.368;QD=8.57;RPA=7,6;RU=T;ReadPosRankSum=-1.076e+00;SB=-1.190e+02;STR;VQSLOD=2.55;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:33,0:32:90:0,90,1016:25 0|1:66,15:81:99:303,0,1810:25 0|1:2,19:20:0:634,54,0:25
+2 45429089 rs13418430 C A 2341.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.861;DB;DP=283;Dels=0.00;FS=2.85;HaplotypeScore=1.33;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=-9.390e-01;QD=12.52;ReadPosRankSum=-1.869e+00;SB=-1.156e+03;VQSLOD=7.15;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:60,49:109:99:1406,0,2061:127 1|0:41,37:78:99:974,0,1238:127 0|0:96,0:96:99:0,256,3312:127
+4 21819269 rs4285068 C G 7252.01 PASS AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.00;HaplotypeScore=0.651;MLEAC=6;MLEAF=1.00;MQ=55.91;MQ0=0;QD=33.57;SB=-3.284e+03;VQSLOD=8.54;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,83:83:99:2859,226,0:127 1|1:0,73:73:99:2413,193,0:127 1|1:0,59:59:99:1980,156,0:127
+18 30361151 rs35024407 T TTG 9768 PASS AC=6;AF=1.00;AN=6;DB;DP=234;FS=0.00;HaplotypeScore=13.10;MLEAC=6;MLEAF=1.00;MQ=60.40;MQ0=2;QD=41.74;RPA=3,4;RU=TG;SB=-4.721e+03;STR;VQSLOD=5.50;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:7,80:86:99:3686,241,0:127 1|1:8,77:85:99:3454,229,0:127 1|1:3,58:61:99:2628,172,0:127
+20 59978756 rs1892320 T C 3967.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.562e+00;DB;DP=206;Dels=0.00;FS=14.25;HaplotypeScore=1.38;MLEAC=4;MLEAF=0.667;MQ=59.89;MQ0=0;MQRankSum=-2.890e-01;QD=19.26;ReadPosRankSum=0.221;SB=-2.292e+03;VQSLOD=7.62;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,72:72:99:2337,181,0:127 1|0:38,29:67:99:743,0,1180:127 1|0:31,36:67:99:887,0,873:127
+2 54408283 rs55993481 T G 2128.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.96;DB;DP=222;Dels=0.00;FS=1.74;HaplotypeScore=3.96;MLEAC=2;MLEAF=0.333;MQ=59.69;MQ0=0;MQRankSum=0.670;QD=14.28;ReadPosRankSum=1.31;SB=-1.076e+03;VQSLOD=6.51;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:35,46:81:99:1392,0,921:127 1|0:35,33:68:99:775,0,878:127 0|0:73,0:73:99:0,175,2164:127
+8 30862954 rs149290124 C CA 3883 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.321e+00;DB;DP=261;FS=0.755;HaplotypeScore=37.27;MLEAC=5;MLEAF=0.833;MQ=58.08;MQ0=0;MQRankSum=0.330;QD=14.88;RPA=11,12;RU=A;ReadPosRankSum=-5.780e-01;SB=-1.926e+03;STR;VQSLOD=5.37;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:21,76:105:99:1980,179,0:91 1|0:51,22:75:99:597,0,485:91 1|1:24,54:81:92:1306,92,0:91
+13 74611546 rs73214804 C T 639.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.870e-01;DB;DP=164;Dels=0.00;FS=0.00;HaplotypeScore=1.41;MLEAC=1;MLEAF=0.167;MQ=58.95;MQ0=0;MQRankSum=0.902;QD=11.21;ReadPosRankSum=-5.410e-01;SB=-3.000e+02;VQSLOD=8.88;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:53,0:53:99:0,135,1773:110 0|0:53,1:54:99:0,111,1440:110 0|1:24,33:57:99:674,0,388:110
+2 167166899 . T A 1064.78 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=0.023;DP=278;Dels=0.00;FS=9.89;HaplotypeScore=0.277;MLEAC=6;MLEAF=1.00;MQ=10.47;MQ0=239;MQRankSum=1.64;QD=3.83;ReadPosRankSum=0.347;SB=-1.083e-02;VQSLOD=-6.945e+00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:174,12:186:36:401,36,0:4 1|1:37,14:52:39:431,39,0:4 1|0:31,9:40:3:271,0,3:4
+2 218911764 . TA T 229.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.591;DP=218;FS=1.76;HaplotypeScore=32.57;MLEAC=3;MLEAF=0.500;MQ=57.41;MQ0=0;MQRankSum=1.79;QD=1.05;RPA=19,18;RU=A;ReadPosRankSum=0.676;SB=-1.060e+02;STR;VQSLOD=2.31;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:56,5:65:99:101,0,313:70 0/1:59,18:82:99:105,0,395:70 0/1:64,4:70:71:71,0,263:70
+8 123499998 rs9693135 T C 926.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-7.820e+00;DB;DP=207;Dels=0.00;FS=2.68;HaplotypeScore=1.26;MLEAC=2;MLEAF=0.333;MQ=56.08;MQ0=0;MQRankSum=-2.729e+00;QD=6.34;ReadPosRankSum=-2.690e-01;SB=-8.230e+02;VQSLOD=4.30;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2301:127 0|1:37,35:72:99:622,0,769:127 0|1:48,26:74:99:343,0,1280:127
+15 83241984 rs11336258 AT A 1748.21 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-1.821e+00;DB;DP=199;FS=5.74;HaplotypeScore=29.94;MLEAC=4;MLEAF=0.667;MQ=59.67;MQ0=0;MQRankSum=1.12;QD=8.78;RPA=15,14;RU=T;ReadPosRankSum=-1.763e+00;SB=-7.830e+02;STR;VQSLOD=3.49;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:41,27:72:99:434,0,434:118 0|1:36,26:66:99:470,0,275:118 1|1:11,44:61:99:895,118,0:118
+15 42065422 rs2925337 A C 5231.01 PASS AC=6;AF=1.00;AN=6;DB;DP=176;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=59.68;MQ0=0;QD=29.72;SB=-3.112e+03;VQSLOD=11.03;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,54:54:99:1770,138,0:127 1|1:0,68:68:99:1750,138,0:127 1|1:0,54:54:99:1711,132,0:127
+11 103989190 rs1545865 T C 4915.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.030e+00;DB;DP=219;Dels=0.00;FS=1.23;HaplotypeScore=1.21;MLEAC=4;MLEAF=0.667;MQ=59.37;MQ0=0;MQRankSum=1.10;QD=22.44;ReadPosRankSum=0.773;SB=-2.213e+03;VQSLOD=8.91;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:23,40:63:99:1203,0,669:127 0|1:36,52:88:99:1433,0,1136:127 1|1:0,68:68:99:2279,178,0:127
+6 143691852 rs17792267 C T 3641.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.465e+00;DB;DP=203;Dels=0.00;FS=2.41;HaplotypeScore=0.322;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=1.20;QD=27.17;ReadPosRankSum=-1.140e+00;SB=-1.772e+03;VQSLOD=8.87;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:29,33:62:99:1131,0,803:127 1|1:0,72:72:99:2510,196,0:127 0|0:69,0:69:99:0,190,2480:127
+17 55158811 rs7217371 G A 2849.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=8.62;DB;DP=206;Dels=0.00;FS=0.511;HaplotypeScore=1.10;MLEAC=3;MLEAF=0.500;MQ=59.66;MQ0=0;MQRankSum=0.103;QD=13.83;ReadPosRankSum=0.958;SB=-1.448e+03;VQSLOD=9.94;culprit=MQ GT:AD:DP:GQ:PL:TP 0/1:40,31:72:99:982,0,1147:127 0/1:35,40:75:99:1236,0,984:127 0/1:32,27:59:99:670,0,882:127
+10 95435201 rs2422323 C T 4017.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=6.44;DB;DP=203;Dels=0.00;FS=13.13;HaplotypeScore=3.24;MLEAC=4;MLEAF=0.667;MQ=55.24;MQ0=0;MQRankSum=1.17;QD=19.79;ReadPosRankSum=-6.550e-01;SB=-2.177e+03;VQSLOD=4.60;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:38,45:83:99:1327,0,931:127 1|1:1,63:64:99:1966,156,0:127 0|1:30,25:56:99:724,0,807:127
+2 127445050 rs113647072 A G 1773.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.856e+00;DB;DP=154;Dels=0.00;FS=4.20;HaplotypeScore=2.27;MLEAC=4;MLEAF=0.667;MQ=59.16;MQ0=0;MQRankSum=0.759;QD=11.51;ReadPosRankSum=1.29;SB=-1.402e+03;VQSLOD=7.92;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:26,28:54:99:652,0,472:78 0|1:26,22:49:99:350,0,462:78 1|1:0,50:51:78:813,78,0:78
+22 17351507 rs5748687 G A 4244.01 VQSRTrancheSNP99.00to99.90 AC=5;AF=0.833;AN=6;BaseQRankSum=-2.240e-01;DB;DP=261;Dels=0.00;FS=0.710;HaplotypeScore=1.72;MLEAC=5;MLEAF=0.833;MQ=28.84;MQ0=57;MQRankSum=-7.852e+00;QD=16.26;ReadPosRankSum=-1.243e+00;SB=-2.174e+03;VQSLOD=-1.710e+00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:1529,141,0:127 1|0:34,49:83:99:727,0,1065:127 1|1:0,86:86:99:1988,180,0:127
+2 18016237 rs12710649 A T 3950.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.700e-02;DB;DP=250;Dels=0.00;FS=2.16;HaplotypeScore=2.08;MLEAC=3;MLEAF=0.500;MQ=59.14;MQ0=0;MQRankSum=0.494;QD=15.80;ReadPosRankSum=0.705;SB=-2.142e+03;VQSLOD=8.14;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:46,59:105:99:1733,0,1505:127 0/1:39,37:76:99:925,0,1164:127 0/1:24,44:68:99:1292,0,628:127
+6 63303894 rs34270846 T TC 7366 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=1.31;DB;DP=202;FS=2.81;HaplotypeScore=88.29;MLEAC=5;MLEAF=0.833;MQ=61.10;MQ0=0;MQRankSum=-3.900e-01;QD=36.47;ReadPosRankSum=-3.150e-01;SB=-2.762e+03;VQSLOD=3.86;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3885,265,0:127 1|0:29,25:54:99:999,0,1050:127 1|1:0,57:59:99:2482,169,0:127
+6 31390139 rs72548006 T TA 2159.22 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=0.491;DB;DP=257;FS=2.38;HaplotypeScore=26.89;MLEAC=2;MLEAF=0.333;MQ=59.99;MQ0=0;MQRankSum=1.59;QD=12.85;RPA=5,6;RU=A;ReadPosRankSum=1.85;SB=-9.710e+02;STR;VQSLOD=5.53;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:51,37:89:99:1076,0,1364:127 0|0:89,0:89:99:0,256,3112:127 1|0:41,38:79:99:1131,0,1103:127
+6 55412503 rs12201934 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.280e+00;DB;DP=182;Dels=0.00;FS=0.744;HaplotypeScore=0.333;MLEAC=1;MLEAF=0.167;MQ=59.64;MQ0=0;MQRankSum=-7.650e-01;QD=13.57;ReadPosRankSum=0.147;SB=-4.590e+02;VQSLOD=9.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,181,2371:127 0|1:35,30:65:99:917,0,1046:127 0|0:56,0:56:99:0,150,1969:127
+4 6333669 rs35678078 G T 2186.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.22;DB;DP=198;Dels=0.00;FS=1.75;HaplotypeScore=0.778;MLEAC=3;MLEAF=0.500;MQ=59.27;MQ0=0;MQRankSum=-2.560e-01;QD=11.04;ReadPosRankSum=-4.690e-01;SB=-1.621e+03;VQSLOD=9.41;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:33,34:67:99:875,0,848:127 0/1:27,32:59:99:602,0,534:127 0/1:33,38:72:99:748,0,676:127
+15 53677501 . T G 770.26 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=-8.969e+00;DP=210;Dels=0.00;FS=347.47;HaplotypeScore=2.09;MLEAC=3;MLEAF=0.500;MQ=58.31;MQ0=0;MQRankSum=0.438;QD=3.67;ReadPosRankSum=-6.409e+00;SB=-5.499e-03;VQSLOD=-3.071e+02;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:59,20:79:94:94,0,1389:94 0/1:41,31:72:99:438,0,721:94 0/1:37,21:59:99:277,0,521:94
+X 4712340 rs5915814 C A 2233.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=8.78;DB;DP=176;Dels=0.00;FS=0.00;HaplotypeScore=0.443;MLEAC=2;MLEAF=0.333;MQ=59.50;MQ0=0;MQRankSum=-1.782e+00;QD=15.73;ReadPosRankSum=0.359;SB=-1.240e+03;VQSLOD=8.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:32,37:69:99:1114,0,859:81 0|0:34,0:34:81:0,81,948:81 1|0:32,41:73:99:1158,0,575:81
+16 19633462 rs11371821 C CT 239.23 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-4.097e+00;DB;DP=182;FS=1.34;HaplotypeScore=21.26;MLEAC=4;MLEAF=0.667;MQ=50.55;MQ0=0;MQRankSum=-1.358e+00;QD=1.31;RPA=22,23;RU=T;ReadPosRankSum=-3.963e+00;SB=-9.798e+01;STR;VQSLOD=2.31;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:61,0:63:45:70,0,45:24 1|1:44,15:58:28:192,28,0:24 0|1:52,0:60:28:28,0,37:24
+6 110345430 rs56272355 T C 882.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.241e+00;DB;DP=230;Dels=0.00;FS=2.16;HaplotypeScore=1.76;MLEAC=1;MLEAF=0.167;MQ=59.70;MQ0=0;MQRankSum=-2.000e-01;QD=11.46;ReadPosRankSum=-4.800e-01;SB=-5.580e+02;VQSLOD=8.98;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,220,2860:127 0|0:75,0:76:99:0,184,2321:127 0|1:35,42:77:99:917,0,926:127
+9 98491693 rs12337935 C A 1474.25 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=2.10;DB;DP=97;Dels=0.00;FS=14.28;HaplotypeScore=1.77;MLEAC=4;MLEAF=0.667;MQ=58.64;MQ0=0;MQRankSum=-2.240e-01;QD=15.20;ReadPosRankSum=1.17;SB=-6.430e+02;VQSLOD=5.80;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:14,12:26:99:348,0,352:63 1|1:0,28:29:63:781,63,0:63 0|1:17,25:42:99:387,0,364:63
+10 125452232 rs7900707 A G 3211.24 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-6.610e+00;DB;DP=189;Dels=0.00;FS=17.74;HaplotypeScore=0.00;MLEAC=4;MLEAF=0.667;MQ=59.66;MQ0=0;MQRankSum=0.614;QD=16.99;ReadPosRankSum=-3.210e-01;SB=-1.553e+03;VQSLOD=6.90;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:61:99:1944,168,0:127 1|0:44,26:70:99:627,0,1357:127 1|0:29,29:58:99:682,0,862:127
+6 131725921 . G A 64.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=3.65;DP=182;Dels=0.00;FS=3.54;HaplotypeScore=2.24;MLEAC=1;MLEAF=0.167;MQ=50.85;MQ0=1;MQRankSum=-6.039e+00;QD=1.31;ReadPosRankSum=-1.757e+00;SB=-4.901e+01;VQSLOD=-6.667e-01;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:59,0:60:99:0,168,1897:98 0|1:33,16:49:99:99,0,790:98 0|0:73,0:73:99:0,156,1824:98
+6 100462085 rs113348222 G GT 5284 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-4.600e-02;DB;DP=285;FS=7.48;HaplotypeScore=252.09;MLEAC=5;MLEAF=0.833;MQ=60.07;MQ0=0;MQRankSum=1.24;QD=18.54;RPA=10,11;RU=T;ReadPosRankSum=-2.539e+00;SB=-2.505e+03;STR;VQSLOD=2.21;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:8,79:94:99:2218,200,0:127 1|0:54,37:97:99:818,0,914:127 1|1:10,83:94:99:2248,221,0:127
+7 89752110 rs39232 T G 3944.01 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;DB;DP=216;Dels=0.00;FS=0.00;HaplotypeScore=1.45;MLEAC=6;MLEAF=1.00;MQ=38.19;MQ0=21;QD=18.26;SB=-2.716e+03;VQSLOD=2.66;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,70:70:99:1564,132,0:101 1|1:0,79:79:99:1258,108,0:101 1|1:0,66:66:99:1122,102,0:101
+11 113825129 rs1150234 G A 2441.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.98;DB;DP=210;Dels=0.00;FS=0.00;HaplotypeScore=2.07;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=0.877;QD=11.63;ReadPosRankSum=0.262;SB=-1.513e+03;VQSLOD=9.04;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:30,33:63:99:881,0,774:127 0/1:46,33:80:99:726,0,1020:127 0/1:32,35:67:99:873,0,759:127
+10 4588547 rs313427 C T 1985.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.69;DB;DP=204;Dels=0.00;FS=1.81;HaplotypeScore=0.614;MLEAC=2;MLEAF=0.333;MQ=59.73;MQ0=0;MQRankSum=0.241;QD=14.18;ReadPosRankSum=0.717;SB=-1.082e+03;VQSLOD=9.78;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:39,35:74:99:1029,0,1182:127 1|0:32,34:66:99:995,0,1024:127 0|0:64,0:64:99:0,175,2242:127
+4 169085855 rs2251558 A G 1161.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=0.721;DB;DP=244;Dels=0.00;FS=5.25;HaplotypeScore=0.489;MLEAC=1;MLEAF=0.167;MQ=59.91;MQ0=0;MQRankSum=1.57;QD=13.99;ReadPosRankSum=0.454;SB=-5.590e+02;VQSLOD=7.42;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:77,0:77:99:0,226,2915:127 0|1:43,40:83:99:1196,0,1294:127 0|0:84,0:84:99:0,232,2950:127
+4 132671861 rs6856716 C G 2622.26 VQSRTrancheSNP99.90to100.00 AC=2;AF=0.333;AN=6;BaseQRankSum=3.14;DB;DP=617;DS;Dels=0.00;FS=5.81;HaplotypeScore=34.41;MLEAC=2;MLEAF=0.333;MQ=24.78;MQ0=42;MQRankSum=3.29;QD=5.89;ReadPosRankSum=-7.360e-01;SB=-1.412e+03;VQSLOD=-7.735e+01;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:125,98:223:99:1761,0,1486:127 0|0:171,0:172:99:0,300,2641:127 1|0:152,70:222:99:900,0,2086:127
+16 30509723 rs7193693 A G 497.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-4.054e+00;DB;DP=167;Dels=0.00;FS=0.00;HaplotypeScore=1.16;MLEAC=1;MLEAF=0.167;MQ=57.89;MQ0=0;MQRankSum=-5.450e-01;QD=9.38;ReadPosRankSum=0.541;SB=-2.410e+02;VQSLOD=8.43;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:57,0:57:99:0,153,2009:101 0|0:57,0:57:99:0,102,1304:101 0|1:26,27:53:99:532,0,526:101
+12 122942070 rs10744217 A G 1812.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.353e+00;DB;DP=179;Dels=0.00;FS=0.663;HaplotypeScore=1.42;MLEAC=3;MLEAF=0.500;MQ=58.69;MQ0=0;MQRankSum=0.992;QD=15.10;ReadPosRankSum=1.08;SB=-5.860e+02;VQSLOD=8.48;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:35,36:71:99:762,0,1100:92 1|1:0,48:49:93:1095,93,0:92 0|0:59,0:59:99:0,120,1560:92
+14 28032147 rs67442200 AT A 9959 PASS AC=6;AF=1.00;AN=6;DB;DP=259;FS=0.00;HaplotypeScore=15.29;MLEAC=6;MLEAF=1.00;MQ=60.66;MQ0=0;QD=38.45;RPA=3,2;RU=T;SB=-4.646e+03;STR;VQSLOD=6.01;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:2,86:91:99:3493,259,0:127 1|1:3,76:79:99:3025,226,0:127 1|1:3,86:89:99:3441,256,0:127
+19 47012249 rs60424854 ATTTTT A 1121.22 VQSRTrancheINDEL99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=-1.922e+00;DB;DP=144;FS=61.85;HaplotypeScore=338.74;MLEAC=2;MLEAF=0.333;MQ=44.50;MQ0=1;MQRankSum=-2.345e+00;QD=10.29;RPA=16,11;RU=T;ReadPosRankSum=5.64;SB=-1.090e+02;STR;VQSLOD=-2.399e+00;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:30,9:43:99:371,0,961:89 1|0:44,15:63:99:798,0,1293:89 0|0:32,0:33:89:0,89,1424:89
+1 146610795 rs58742099 C T 2831.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.30;DB;DP=261;Dels=0.00;FS=7.03;HaplotypeScore=13.91;MLEAC=2;MLEAF=0.333;MQ=59.62;MQ0=0;MQRankSum=0.753;QD=16.27;ReadPosRankSum=-1.405e+00;SB=-1.481e+03;VQSLOD=3.42;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:39,43:82:99:1329,0,1080:127 1|0:40,52:92:99:1541,0,1241:127 0|0:87,0:87:99:0,238,3098:127
+1 120811174 . C CA 74.77 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-1.393e+00;DP=148;FS=0.00;HaplotypeScore=20.35;MLEAC=5;MLEAF=0.833;MQ=15.79;MQ0=88;MQRankSum=-3.480e-01;QD=0.510;RPA=24,25;RU=A;ReadPosRankSum=-1.044e+00;SB=-1.531e+01;STR;VQSLOD=5.09;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:47,5:9:11:53,11,0:3 1|0:51,0:15:5:37,0,5:3 1|1:43,0:8:6:32,6,0:3
+1 186656152 rs4422959 G A 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=7.23;DB;DP=270;Dels=0.00;FS=7.29;HaplotypeScore=1.17;MLEAC=1;MLEAF=0.167;MQ=59.71;MQ0=0;MQRankSum=0.399;QD=17.21;ReadPosRankSum=-8.690e-01;SB=-6.320e+02;VQSLOD=7.67;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:99,0:99:99:0,283,3341:127 0|0:93,0:93:99:0,256,3022:127 0|1:33,45:78:99:1377,0,917:127
+2 237156689 rs13390270 G A 852.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.150e+00;DB;DP=205;Dels=0.00;FS=0.710;HaplotypeScore=1.73;MLEAC=1;MLEAF=0.167;MQ=59.06;MQ0=0;MQRankSum=-1.930e-01;QD=11.67;ReadPosRankSum=1.26;SB=-4.790e+02;VQSLOD=8.50;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:73,0:73:99:0,202,2606:108 0|1:39,34:73:99:887,0,1027:108 0|0:59,0:59:99:0,108,1384:108
+4 114869733 rs11381039 A AT 2798.22 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.957;DB;DP=267;FS=4.37;HaplotypeScore=26.36;MLEAC=3;MLEAF=0.500;MQ=59.97;MQ0=0;MQRankSum=0.673;QD=10.48;RPA=8,9;RU=T;ReadPosRankSum=-1.351e+00;SB=-1.173e+03;STR;VQSLOD=5.55;culprit=QD GT:AD:DP:GQ:PL:TP 0/1:47,41:89:99:994,0,1219:127 0/1:50,41:92:99:1063,0,1043:127 0/1:50,34:86:99:789,0,1153:127
+5 112750674 rs9716322 A C 598.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=-2.930e-01;DB;DP=199;Dels=0.00;FS=2.95;HaplotypeScore=0.333;MLEAC=1;MLEAF=0.167;MQ=45.61;MQ0=2;MQRankSum=-2.398e+00;QD=12.21;ReadPosRankSum=1.16;SB=-8.101e+01;VQSLOD=2.77;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,196,2534:127 0|1:23,26:49:99:633,0,479:127 0|0:68,1:69:99:0,174,2191:127
+15 62088952 rs35033959 A T 3546.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-3.220e+00;DB;DP=241;Dels=0.00;FS=14.29;HaplotypeScore=0.277;MLEAC=3;MLEAF=0.500;MQ=59.77;MQ0=0;MQRankSum=-1.969e+00;QD=14.71;ReadPosRankSum=0.341;SB=-1.970e+03;VQSLOD=6.38;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0/1:45,44:89:99:1265,0,1533:127 0/1:34,38:72:99:1133,0,1137:127 0/1:41,39:80:99:1148,0,1303:127
+18 75204349 rs9948476 C T 646.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.97;DB;DP=185;Dels=0.00;FS=0.817;HaplotypeScore=1.40;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=0.276;QD=10.95;ReadPosRankSum=-1.580e-01;SB=-3.210e+02;VQSLOD=9.37;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:65,0:66:99:0,168,2026:127 0|0:60,0:60:99:0,147,1768:127 0|1:34,25:59:99:681,0,893:127
+22 43356130 rs6519353 A C 3526.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.809;DB;DP=228;Dels=0.00;FS=6.34;HaplotypeScore=1.63;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=-1.460e-01;QD=22.46;ReadPosRankSum=2.03;SB=-1.954e+03;VQSLOD=8.50;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:40,41:81:99:1020,0,1222:127 1|1:0,76:76:99:2506,196,0:127 0|0:71,0:71:99:0,165,2091:127
+5 154441640 rs467330 A C 1133.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.127e+00;DB;DP=235;Dels=0.00;FS=2.10;HaplotypeScore=1.19;MLEAC=1;MLEAF=0.167;MQ=59.65;MQ0=0;MQRankSum=0.766;QD=12.59;ReadPosRankSum=-5.350e-01;SB=-6.500e+02;VQSLOD=9.83;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:61,0:61:99:0,172,2172:127 0|1:45,45:90:99:1168,0,1368:127 0|0:82,1:84:99:0,226,2825:127
+9 25201692 rs9408058 C T 8643.01 PASS AC=6;AF=1.00;AN=6;DB;DP=245;Dels=0.00;FS=0.00;HaplotypeScore=0.898;MLEAC=6;MLEAF=1.00;MQ=59.13;MQ0=0;QD=35.28;SB=-4.398e+03;VQSLOD=12.17;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,89:89:99:3312,256,0:127 1|1:0,81:81:99:2771,223,0:127 1|1:0,75:75:99:2560,202,0:127
+8 140651779 rs1469039 G A 1879.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-2.189e+00;DB;DP=145;Dels=0.00;FS=0.00;HaplotypeScore=1.77;MLEAC=3;MLEAF=0.500;MQ=58.39;MQ0=0;MQRankSum=0.745;QD=12.96;ReadPosRankSum=-1.590e-01;SB=-9.360e+02;VQSLOD=9.01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:23,24:47:99:612,0,740:127 0/1:21,31:52:99:684,0,478:127 0/1:20,26:46:99:622,0,367:127
+21 42833227 rs460904 T C 3179.23 PASS AC=6;AF=1.00;AN=6;DB;DP=155;Dels=0.00;FS=0.00;HaplotypeScore=2.46;MLEAC=6;MLEAF=1.00;MQ=58.18;MQ0=0;QD=20.51;SB=-2.173e+03;VQSLOD=7.70;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,60:60:90:1085,90,0:74 1|1:0,54:54:96:1172,96,0:74 1|1:0,41:41:75:960,75,0:74
+GL000212.1 28454 . T C 2248.99 VQSRTrancheSNP99.00to99.90 AC=4;AF=1.00;AN=4;BaseQRankSum=1.69;DP=94;Dels=0.00;FS=3.27;HaplotypeScore=0.962;MLEAC=4;MLEAF=1.00;MQ=36.99;MQ0=7;MQRankSum=-4.280e-01;QD=24.18;ReadPosRankSum=-1.284e+00;SB=-1.053e+03;VQSLOD=1.24;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:0,29:29:63:755,63,0:63 ./. 1|1:1,63:64:99:1530,135,0:63
+10 56495833 rs6481118 G A 7633.01 PASS AC=6;AF=1.00;AN=6;DB;DP=212;Dels=0.00;FS=0.00;HaplotypeScore=0.333;MLEAC=6;MLEAF=1.00;MQ=54.64;MQ0=0;QD=36.00;SB=-2.091e+03;VQSLOD=8.67;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,62:62:99:2383,184,0:127 1|1:1,67:68:99:2375,184,0:127 1|1:0,82:82:99:2875,223,0:127
+10 106444111 rs72813617 A G 632.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-8.380e-01;DB;DP=197;Dels=0.00;FS=4.12;HaplotypeScore=1.82;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-1.142e+00;QD=12.40;ReadPosRankSum=-1.947e+00;SB=-2.390e+02;VQSLOD=7.62;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:84,0:84:99:0,241,3129:127 0|0:62,0:62:99:0,159,2008:127 0|1:27,24:51:99:667,0,584:127
+11 132780959 rs61906922 C T 1342.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.22;DB;DP=263;Dels=0.00;FS=0.601;HaplotypeScore=1.84;MLEAC=1;MLEAF=0.167;MQ=59.58;MQ0=0;MQRankSum=0.997;QD=15.25;ReadPosRankSum=-7.460e-01;SB=-6.890e+02;VQSLOD=8.81;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|0:87,0:87:99:0,250,2877:127 0|0:87,0:88:99:0,253,3009:127 0|1:43,45:88:99:1377,0,1138:127
+15 92857342 rs12101550 A G 2734.26 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-7.995e+00;DB;DP=226;Dels=0.00;FS=3.76;HaplotypeScore=1.57;MLEAC=3;MLEAF=0.500;MQ=59.41;MQ0=0;MQRankSum=0.761;QD=12.10;ReadPosRankSum=-5.870e-01;SB=-1.469e+03;VQSLOD=9.15;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:45,37:82:99:853,0,1356:127 0/1:29,40:69:99:966,0,852:127 0/1:38,37:75:99:954,0,1085:127
+12 39118960 rs79977305 G A 1330.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=6.31;DB;DP=263;Dels=0.00;FS=0.597;HaplotypeScore=1.46;MLEAC=1;MLEAF=0.167;MQ=58.83;MQ0=0;MQRankSum=1.92;QD=13.57;ReadPosRankSum=-5.480e-01;SB=-7.360e+02;VQSLOD=7.37;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,2869:127 0|0:84,0:84:99:0,229,2712:127 0|1:51,47:98:99:1365,0,1343:127
+5 144321895 rs35068704 A T 1535.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.05;DB;DP=203;Dels=0.00;FS=13.29;HaplotypeScore=0.507;MLEAC=2;MLEAF=0.333;MQ=57.36;MQ0=0;MQRankSum=2.19;QD=11.37;ReadPosRankSum=-1.361e+00;SB=-7.640e+02;VQSLOD=5.72;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:34,25:59:99:595,0,976:127 0|0:68,0:68:99:0,190,2435:127 1|0:39,37:76:99:979,0,1274:127
+14 56951735 rs1189276 G A 6939.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=3.88;DB;DP=235;Dels=0.00;FS=9.37;HaplotypeScore=0.906;MLEAC=5;MLEAF=0.833;MQ=59.52;MQ0=0;MQRankSum=-5.500e-01;QD=29.53;ReadPosRankSum=1.10;SB=-3.438e+03;VQSLOD=8.76;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,92:93:99:3558,274,0:127 1|1:0,60:60:99:2120,165,0:127 1|0:40,42:82:99:1261,0,1194:127
+1 47818917 rs12749507 A G 1285.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.707e+00;DB;DP=252;Dels=0.00;FS=2.14;HaplotypeScore=0.666;MLEAC=1;MLEAF=0.167;MQ=59.83;MQ0=0;MQRankSum=-4.670e-01;QD=13.39;ReadPosRankSum=0.535;SB=-6.730e+02;VQSLOD=9.27;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:81,0:81:99:0,241,3171:127 0|1:53,42:96:99:1320,0,1615:127 0|0:75,0:75:99:0,217,2762:127
+5 10958957 rs852590 T C 8430.01 PASS AC=6;AF=1.00;AN=6;DB;DP=243;Dels=0.00;FS=0.00;HaplotypeScore=1.83;MLEAC=6;MLEAF=1.00;MQ=59.31;MQ0=0;QD=34.69;SB=-4.118e+03;VQSLOD=10.87;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,96:97:99:3594,277,0:127 1|1:1,73:74:99:2318,181,0:127 1|1:0,72:72:99:2518,196,0:127
+21 25702950 rs2260875 C G 3462.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=0.156;DB;DP=237;Dels=0.00;FS=2.90;HaplotypeScore=1.54;MLEAC=3;MLEAF=0.500;MQ=59.04;MQ0=0;MQRankSum=0.386;QD=14.61;ReadPosRankSum=-1.455e+00;SB=-1.683e+03;VQSLOD=8.05;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:37,40:77:99:1282,0,1101:127 0/1:43,36:79:99:1114,0,1317:127 0/1:45,36:81:99:1066,0,1329:127
+2 187694833 rs10191094 T C 1006.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.181e+00;DB;DP=236;Dels=0.00;FS=9.08;HaplotypeScore=2.27;MLEAC=1;MLEAF=0.167;MQ=59.73;MQ0=0;MQRankSum=-2.180e-01;QD=13.07;ReadPosRankSum=-8.770e-01;SB=-5.830e+02;VQSLOD=7.60;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:82,0:82:99:0,232,3021:127 0|0:77,0:77:99:0,217,2790:127 0|1:33,44:77:99:1041,0,988:127
+7 56584972 rs34475770 C T 2465.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.030e-01;DB;DP=255;Dels=0.00;FS=2.23;HaplotypeScore=0.884;MLEAC=2;MLEAF=0.333;MQ=58.76;MQ0=0;MQRankSum=1.77;QD=15.03;ReadPosRankSum=1.13;SB=-1.412e+03;VQSLOD=6.57;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:91,0:91:99:0,259,3369:127 0|1:36,49:85:99:1444,0,1000:127 0|1:38,41:79:99:1060,0,1084:127
+5 20435939 rs12697584 A C 2286.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-5.396e+00;DB;DP=246;Dels=0.00;FS=4.68;HaplotypeScore=0.874;MLEAC=2;MLEAF=0.333;MQ=59.74;MQ0=0;MQRankSum=-8.500e-01;QD=14.20;ReadPosRankSum=0.391;SB=-1.305e+03;VQSLOD=8.13;culprit=MQ GT:AD:DP:GQ:PL:TP 0|0:85,0:85:99:0,241,3183:127 0|1:41,37:78:99:1062,0,1304:127 0|1:39,44:83:99:1263,0,1222:127
+7 144383888 rs73161092 T C 689.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-7.434e+00;DB;DP=254;Dels=0.00;FS=8.63;HaplotypeScore=0.00;MLEAC=1;MLEAF=0.167;MQ=59.54;MQ0=0;MQRankSum=0.163;QD=8.62;ReadPosRankSum=-1.802e+00;SB=-3.560e+02;VQSLOD=6.45;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:90,0:90:99:0,268,3553:127 0|1:47,33:80:99:724,0,1392:127 0|0:84,0:84:99:0,202,2644:127
+9 118670009 rs66523513 CT C 5633 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=-6.600e-02;DB;DP=222;FS=6.40;HaplotypeScore=30.72;MLEAC=6;MLEAF=1.00;MQ=59.97;MQ0=0;MQRankSum=0.490;QD=25.37;RPA=11,10;RU=T;ReadPosRankSum=2.43;SB=-2.667e+03;STR;VQSLOD=3.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:6,71:78:99:2079,216,0:120 1|1:10,54:65:99:1524,120,0:120 1|1:9,69:79:99:2030,209,0:120
+4 12652343 rs13114660 G T 610.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-3.176e+00;DB;DP=127;Dels=0.00;FS=0.00;HaplotypeScore=1.57;MLEAC=1;MLEAF=0.167;MQ=58.86;MQ0=0;MQRankSum=-4.680e-01;QD=16.06;ReadPosRankSum=1.25;SB=-3.060e+02;VQSLOD=7.84;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,120,1561:102 0|1:15,23:38:99:645,0,407:102 0|0:44,1:46:99:0,103,1539:102
+14 47568119 rs1952206 T C 3399.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-9.721e+00;DB;DP=230;Dels=0.00;FS=0.483;HaplotypeScore=0.658;MLEAC=3;MLEAF=0.500;MQ=59.54;MQ0=0;MQRankSum=-4.790e-01;QD=14.78;ReadPosRankSum=1.26;SB=-1.667e+03;VQSLOD=9.16;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0/1:41,43:84:99:1239,0,1315:127 0/1:28,43:71:99:1178,0,816:127 0/1:40,35:75:99:982,0,1314:127
+4 57135985 rs1715504 G A 1213.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.55;DB;DP=173;Dels=0.00;FS=4.10;HaplotypeScore=1.63;MLEAC=2;MLEAF=0.333;MQ=58.44;MQ0=0;MQRankSum=-1.006e+00;QD=10.28;ReadPosRankSum=-9.330e-01;SB=-4.500e+02;VQSLOD=7.41;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:54,0:55:99:0,135,1546:127 0|1:30,23:54:99:563,0,608:127 0|1:35,28:64:99:689,0,562:127
+6 154006585 rs7752561 G A 919.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-2.323e+00;DB;DP=223;Dels=0.00;FS=0.00;HaplotypeScore=0.825;MLEAC=1;MLEAF=0.167;MQ=59.35;MQ0=0;MQRankSum=-7.490e-01;QD=10.45;ReadPosRankSum=-1.550e-01;SB=-5.260e+02;VQSLOD=8.84;culprit=FS GT:AD:DP:GQ:PL:TP 0|0:70,0:70:99:0,202,2601:127 0|1:51,37:88:99:954,0,1475:127 0|0:65,0:65:99:0,175,2269:127
+GL000214.1 115144 . C T 102.07 VQSRTrancheSNP99.00to99.90 AC=2;AF=0.333;AN=6;BaseQRankSum=0.854;DP=103;Dels=0.00;FS=14.19;HaplotypeScore=14.95;MLEAC=2;MLEAF=0.333;MQ=38.45;MQ0=1;MQRankSum=-2.314e+00;QD=1.05;ReadPosRankSum=1.48;SB=-6.153e+01;VQSLOD=-1.476e+01;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:6,0:6:3:0,3,22:4 0|1:9,11:20:16:81,0,16:4 0|1:63,14:77:58:58,0,908:4
+8 90278211 rs11998540 A T 357.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=-1.457e+00;DB;DP=69;Dels=0.00;FS=1.29;HaplotypeScore=0.00;MLEAC=2;MLEAF=0.333;MQ=58.96;MQ0=0;MQRankSum=1.41;QD=8.12;ReadPosRankSum=1.26;SB=-9.501e+01;VQSLOD=5.96;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|1:12,7:19:99:185,0,416:60 0|0:25,0:25:60:0,60,805:60 1|0:16,9:25:99:211,0,500:60
+8 8974322 rs28440961 G A 1682.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.72;DB;DP=190;Dels=0.00;FS=0.579;HaplotypeScore=1.54;MLEAC=2;MLEAF=0.333;MQ=59.33;MQ0=0;MQRankSum=-6.520e-01;QD=12.65;ReadPosRankSum=0.746;SB=-7.040e+02;VQSLOD=9.37;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:32,32:64:99:790,0,1002:125 1|0:33,36:69:99:931,0,866:125 0|0:57,0:57:99:0,126,1622:125
+16 34610294 rs72812776 C T 603.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=-1.361e+00;DB;DP=270;Dels=0.00;FS=6.07;HaplotypeScore=3.16;MLEAC=1;MLEAF=0.167;MQ=59.66;MQ0=0;MQRankSum=1.60;QD=7.83;ReadPosRankSum=0.296;SB=-2.820e+02;VQSLOD=3.37;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:123,0:123:99:0,343,4443:127 0|0:69,1:70:99:0,184,2397:127 0|1:48,29:77:99:638,0,1483:127
+11 55040918 rs187118824 A T 1019.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.08;DB;DP=65;Dels=0.020;FS=12.72;HaplotypeScore=0.977;MLEAC=2;MLEAF=0.333;MQ=56.64;MQ0=1;MQRankSum=0.323;QD=25.48;ReadPosRankSum=0.873;SB=-2.060e+01;VQSLOD=4.42;culprit=DP GT:AD:DP:GQ:PL:TP 0|1:2,9:11:48:325,0,48:50 0|0:24,1:25:63:0,63,833:50 1|0:6,22:28:51:733,0,51:50
+12 12560642 rs10772559 G T 501.28 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=0.747;DB;DP=229;Dels=0.040;FS=17.41;HaplotypeScore=19.70;MLEAC=4;MLEAF=0.667;MQ=49.37;MQ0=0;MQRankSum=-3.656e+00;QD=2.19;ReadPosRankSum=-5.397e+00;SB=-2.196e+03;VQSLOD=-1.020e+01;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|1:0,66:66:24:273,24,0:24 1|0:29,45:74:99:148,0,702:24 1|0:33,46:80:99:122,0,781:24
+7 29544610 rs6462145 A T 4020.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.326;DB;DP=189;Dels=0.00;FS=5.39;HaplotypeScore=1.30;MLEAC=4;MLEAF=0.667;MQ=58.54;MQ0=0;MQRankSum=1.29;QD=21.27;ReadPosRankSum=-1.212e+00;SB=-1.878e+03;VQSLOD=7.32;culprit=FS GT:AD:DP:GQ:PL:TP 1|0:27,49:77:99:1466,0,733:127 1|1:0,64:64:99:1888,147,0:127 0|1:18,27:48:99:666,0,410:127
+8 21736923 rs13256921 G A 217.24 VQSRTrancheSNP99.00to99.90 AC=1;AF=0.167;AN=6;BaseQRankSum=1.88;DB;DP=93;Dels=0.00;FS=5.53;HaplotypeScore=6.50;MLEAC=1;MLEAF=0.167;MQ=42.13;MQ0=3;MQRankSum=0.517;QD=6.79;ReadPosRankSum=1.71;SB=-1.980e+02;VQSLOD=-2.643e+00;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 0|0:34,0:34:66:0,66,691:41 0|1:15,17:32:99:252,0,211:41 0|0:27,0:27:42:0,42,425:41
+4 30898977 rs4386561 G A 2449.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=3.82;DB;DP=231;Dels=0.00;FS=0.00;HaplotypeScore=0.938;MLEAC=2;MLEAF=0.333;MQ=58.94;MQ0=0;MQRankSum=0.173;QD=15.70;ReadPosRankSum=1.05;SB=-1.131e+03;VQSLOD=8.36;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:33,46:79:99:1380,0,944:127 0|0:75,0:75:99:0,202,2608:127 1|0:43,34:77:99:1108,0,1335:127
+6 9408051 rs11751621 C G 5140.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.350e+00;DB;DP=241;Dels=0.00;FS=0.00;HaplotypeScore=0.664;MLEAC=4;MLEAF=0.667;MQ=59.81;MQ0=0;MQRankSum=-2.050e-01;QD=21.33;ReadPosRankSum=-3.300e-02;SB=-2.552e+03;VQSLOD=8.99;culprit=FS GT:AD:DP:GQ:PL:TP 0|1:42,40:82:99:1156,0,1352:127 0|1:36,45:81:99:1253,0,1134:127 1|1:0,78:78:99:2731,214,0:127
+11 123470819 rs1148095 T C 6964.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=-8.500e-01;DB;DP=242;Dels=0.00;FS=1.48;HaplotypeScore=1.39;MLEAC=5;MLEAF=0.833;MQ=59.25;MQ0=0;MQRankSum=-1.734e+00;QD=28.78;ReadPosRankSum=-7.490e-01;SB=-3.242e+03;VQSLOD=8.79;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3408,265,0:127 1|0:35,51:86:99:1520,0,1059:127 1|1:0,64:64:99:2036,157,0:127
+2 155726628 . T G 1351.23 VQSRTrancheSNP99.00to99.90 AC=6;AF=1.00;AN=6;BaseQRankSum=0.207;DP=193;Dels=0.00;FS=9.25;HaplotypeScore=0.522;MLEAC=6;MLEAF=1.00;MQ=16.17;MQ0=87;MQRankSum=2.40;QD=7.00;ReadPosRankSum=1.07;SB=-4.420e+02;VQSLOD=-2.787e+00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|1:3,56:59:60:591,60,0:27 1|1:8,49:57:27:245,27,0:27 1|1:12,65:77:57:553,57,0:27
+12 130522866 rs1613499 C T 3975.01 PASS AC=6;AF=1.00;AN=6;DB;DP=130;Dels=0.00;FS=0.00;HaplotypeScore=0.633;MLEAC=6;MLEAF=1.00;MQ=59.11;MQ0=0;QD=30.58;SB=-1.386e+03;VQSLOD=10.23;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,57:57:99:1939,144,0:73 1|1:0,34:34:75:990,75,0:73 1|1:0,39:39:78:1046,78,0:73
+7 69334430 rs917719 C T 1223.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=5.84;DB;DP=193;Dels=0.00;FS=6.66;HaplotypeScore=0.815;MLEAC=2;MLEAF=0.333;MQ=59.81;MQ0=0;MQRankSum=1.63;QD=9.63;ReadPosRankSum=1.46;SB=-7.370e+02;VQSLOD=7.00;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:770,0,1258:127 1|0:26,24:50:99:492,0,840:127 0|0:66,0:66:99:0,172,2210:127
+3 158557110 rs34445802 G A 2374.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=1.80;DB;DP=237;Dels=0.00;FS=1.02;HaplotypeScore=1.66;MLEAC=2;MLEAF=0.333;MQ=57.48;MQ0=0;MQRankSum=0.558;QD=14.05;ReadPosRankSum=-1.147e+00;SB=-1.505e+03;VQSLOD=7.13;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:43,56:99:99:1624,0,1344:127 1|0:33,37:70:99:789,0,916:127 0|0:68,0:68:99:0,156,2014:127
+5 36740339 rs36676 T G 6995.01 PASS AC=6;AF=1.00;AN=6;DB;DP=230;Dels=0.00;FS=0.00;HaplotypeScore=2.08;MLEAC=6;MLEAF=1.00;MQ=59.46;MQ0=0;QD=30.41;SB=-3.034e+03;VQSLOD=10.92;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2261,195,0:127 1|1:0,83:83:99:2579,217,0:127 1|1:0,71:72:99:2155,181,0:127
+17 5764764 rs2309483 C G 4071.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=4.24;DB;DP=154;Dels=0.00;FS=0.00;HaplotypeScore=4.41;MLEAC=5;MLEAF=0.833;MQ=58.88;MQ0=0;MQRankSum=0.456;QD=26.44;ReadPosRankSum=0.385;SB=-1.791e+03;VQSLOD=6.95;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,61:62:99:2049,165,0:107 1|0:23,26:49:99:648,0,482:107 1|1:0,43:43:99:1374,108,0:107
+3 197056886 rs7612900 G A 7880.01 PASS AC=6;AF=1.00;AN=6;DB;DP=229;Dels=0.00;FS=0.00;HaplotypeScore=0.611;MLEAC=6;MLEAF=1.00;MQ=59.18;MQ0=0;QD=34.41;SB=-3.459e+03;VQSLOD=11.81;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,75:75:99:2786,214,0:127 1|1:0,81:81:99:2598,202,0:127 1|1:0,73:73:99:2496,193,0:127
+18 59836086 . A AT 575.46 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-1.815e+00;DP=231;FS=20.46;HaplotypeScore=140.20;MLEAC=3;MLEAF=0.500;MQ=56.52;MQ0=0;MQRankSum=1.20;QD=2.49;RPA=20,21;RU=T;ReadPosRankSum=-1.968e+00;SB=-2.575e+02;STR;VQSLOD=-3.166e-01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:52,29:86:11:309,0,11:9 0/1:72,2:82:63:109,0,63:9 0/1:31,24:63:15:205,0,15:9
+1 243135892 rs7517403 C T 2313.25 VQSRTrancheSNP99.00to99.90 AC=4;AF=0.667;AN=6;BaseQRankSum=7.05;DB;DP=168;Dels=0.00;FS=0.00;HaplotypeScore=0.588;MLEAC=4;MLEAF=0.667;MQ=37.62;MQ0=11;MQRankSum=-5.659e+00;QD=13.77;ReadPosRankSum=-9.770e-01;SB=-9.200e+02;VQSLOD=2.25;culprit=MQ GT:AD:DP:GQ:PL:TP 1|0:31,24:55:99:501,0,891:123 1|1:0,58:58:99:1263,123,0:123 0|1:28,27:55:99:591,0,714:123
+5 121302662 . G T 143.72 VQSRTrancheSNP99.90to100.00 AC=3;AF=0.500;AN=6;BaseQRankSum=1.41;DP=150;Dels=0.020;FS=161.48;HaplotypeScore=2.86;MLEAC=3;MLEAF=0.500;MQ=35.76;MQ0=1;MQRankSum=0.422;QD=0.960;ReadPosRankSum=-5.675e+00;SB=-1.466e+00;VQSLOD=-7.724e+01;culprit=FS GT:AD:DP:GQ:PL:TP 0/1:32,21:53:99:120,0,251:5 0/1:35,12:47:57:57,0,271:5 0/1:35,12:47:4:4,0,259:5
+4 103859292 rs7676943 C G 7573.01 PASS AC=6;AF=1.00;AN=6;DB;DP=235;Dels=0.00;FS=0.00;HaplotypeScore=0.00;MLEAC=6;MLEAF=1.00;MQ=58.63;MQ0=0;QD=32.23;SB=-3.953e+03;VQSLOD=10.39;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:1,95:96:99:3289,256,0:127 1|1:0,73:73:99:2137,166,0:127 1|1:0,66:66:99:2147,166,0:127
+X 150239197 rs6627349 T C 4677.01 PASS AC=5;AF=0.833;AN=6;BaseQRankSum=0.731;DB;DP=179;Dels=0.00;FS=0.00;HaplotypeScore=1.61;MLEAC=5;MLEAF=0.833;MQ=59.69;MQ0=0;MQRankSum=0.676;QD=26.13;ReadPosRankSum=0.494;SB=-2.442e+03;VQSLOD=10.55;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:0,66:66:99:2387,190,0:99 1|1:0,40:40:99:1243,99,0:99 1|0:36,37:73:99:1047,0,1039:99
+14 96490389 rs72702859 C G 3394.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=-6.529e+00;DB;DP=264;Dels=0.00;FS=2.75;HaplotypeScore=3.13;MLEAC=3;MLEAF=0.500;MQ=59.49;MQ0=0;MQRankSum=-1.258e+00;QD=18.25;ReadPosRankSum=-9.610e-01;SB=-1.966e+03;VQSLOD=6.34;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:34,52:86:99:1358,0,886:127 1|1:0,100:100:99:2036,180,0:127 0|0:78,0:78:99:0,184,2393:127
+1 165431906 rs7528908 G T 2381.26 PASS AC=2;AF=0.333;AN=6;BaseQRankSum=6.01;DB;DP=259;Dels=0.00;FS=4.73;HaplotypeScore=0.986;MLEAC=2;MLEAF=0.333;MQ=59.75;MQ0=0;MQRankSum=0.916;QD=14.34;ReadPosRankSum=-9.070e-01;SB=-9.050e+02;VQSLOD=8.13;culprit=MQ GT:AD:DP:GQ:PL:TP 0|1:48,40:88:99:1142,0,1428:127 0|0:93,0:93:99:0,259,3166:127 1|0:38,40:78:99:1278,0,1075:127
+17 33513649 rs3744366 A G 3743.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-3.729e+00;DB;DP=213;Dels=0.00;FS=0.526;HaplotypeScore=2.91;MLEAC=4;MLEAF=0.667;MQ=58.99;MQ0=0;MQRankSum=-1.520e-01;QD=17.57;ReadPosRankSum=0.530;SB=-2.067e+03;VQSLOD=8.02;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,40:84:99:1083,0,1341:127 1|1:0,67:67:99:2074,162,0:127 0|1:37,24:62:99:586,0,1015:127
+13 46407442 rs11147990 G A 2668.24 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=1.23;DB;DP=199;Dels=0.00;FS=0.530;HaplotypeScore=1.80;MLEAC=3;MLEAF=0.500;MQ=58.99;MQ0=0;MQRankSum=0.023;QD=20.21;ReadPosRankSum=-4.520e-01;SB=-1.651e+03;VQSLOD=9.20;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 0|1:36,33:69:99:994,0,1056:127 0|0:67,0:67:99:0,141,1821:127 1|1:0,63:63:99:1719,135,0:127
+7 124589684 rs12113765 G C 4948.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=-2.607e+00;DB;DP=243;Dels=0.00;FS=1.04;HaplotypeScore=3.38;MLEAC=4;MLEAF=0.667;MQ=58.74;MQ0=0;MQRankSum=1.25;QD=20.36;ReadPosRankSum=-3.870e-01;SB=-2.411e+03;VQSLOD=7.05;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|0:44,27:71:99:796,0,1350:127 1|1:0,84:85:99:2760,217,0:127 0|1:41,46:87:99:1392,0,1180:127
+16 88914235 rs12932521 C T 329.24 PASS AC=1;AF=0.167;AN=6;BaseQRankSum=1.98;DB;DP=114;Dels=0.00;FS=1.93;HaplotypeScore=0.940;MLEAC=1;MLEAF=0.167;MQ=58.60;MQ0=0;MQRankSum=0.854;QD=7.84;ReadPosRankSum=-3.390e-01;SB=-2.970e+02;VQSLOD=8.10;culprit=QD GT:AD:DP:GQ:PL:TP 0|0:43,0:43:99:0,102,1192:39 0|0:29,0:29:39:0,39,468:39 0|1:15,26:42:99:364,0,105:39
+13 101976707 rs527328 A T 9240.01 PASS AC=6;AF=1.00;AN=6;DB;DP=259;Dels=0.00;FS=0.00;HaplotypeScore=0.245;MLEAC=6;MLEAF=1.00;MQ=53.28;MQ0=0;QD=35.68;SB=-4.696e+03;VQSLOD=7.52;culprit=HaplotypeScore GT:AD:DP:GQ:PL:TP 1|1:0,92:92:99:3410,262,0:127 1|1:0,88:88:99:3195,247,0:127 1|1:1,78:79:99:2635,202,0:127
+14 68051087 rs11628035 G A 4028.01 PASS AC=3;AF=0.500;AN=6;BaseQRankSum=3.93;DB;DP=236;Dels=0.00;FS=8.18;HaplotypeScore=1.33;MLEAC=3;MLEAF=0.500;MQ=58.83;MQ0=0;MQRankSum=1.83;QD=25.49;ReadPosRankSum=2.59;SB=-1.989e+03;VQSLOD=6.79;culprit=ReadPosRankSum GT:AD:DP:GQ:PL:TP 1|0:38,39:77:99:1265,0,1112:127 1|1:0,81:81:99:2763,214,0:127 0|0:78,0:78:99:0,208,2673:127
+18 10010426 rs4797393 T C 4197.01 PASS AC=4;AF=0.667;AN=6;BaseQRankSum=0.425;DB;DP=210;Dels=0.00;FS=1.13;HaplotypeScore=1.27;MLEAC=4;MLEAF=0.667;MQ=59.43;MQ0=0;MQRankSum=-2.916e+00;QD=19.99;ReadPosRankSum=0.379;SB=-2.001e+03;VQSLOD=7.03;culprit=MQRankSum GT:AD:DP:GQ:PL:TP 1|1:0,65:65:99:2247,181,0:127 1|0:35,39:75:99:1170,0,967:127 1|0:41,29:70:99:780,0,1052:127
+10 85258657 rs4454662 C A 7638.01 PASS AC=6;AF=1.00;AN=6;BaseQRankSum=1.72;DB;DP=223;Dels=0.00;FS=4.52;HaplotypeScore=1.13;MLEAC=6;MLEAF=1.00;MQ=58.32;MQ0=0;MQRankSum=-1.230e+00;QD=34.25;ReadPosRankSum=1.15;SB=-2.841e+03;VQSLOD=7.65;culprit=FS GT:AD:DP:GQ:PL:TP 1|1:1,64:65:99:2156,169,0:127 1|1:0,89:89:99:2982,238,0:127 1|1:0,69:69:99:2500,196,0:127
diff --git a/testdata/net/sf/picard/vcf/vcfFormatTest.vcf b/testdata/picard/vcf/vcfFormatTest.vcf
similarity index 100%
rename from testdata/net/sf/picard/vcf/vcfFormatTest.vcf
rename to testdata/picard/vcf/vcfFormatTest.vcf
diff --git a/testdata/net/sf/picard/vcf/vcfFormatTest.vcf.idx b/testdata/picard/vcf/vcfFormatTest.vcf.idx
similarity index 100%
rename from testdata/net/sf/picard/vcf/vcfFormatTest.vcf.idx
rename to testdata/picard/vcf/vcfFormatTest.vcf.idx
diff --git a/testdata/tribble/Tb.vcf.idx b/testdata/tribble/Tb.vcf.idx
deleted file mode 100644
index daf3430..0000000
Binary files a/testdata/tribble/Tb.vcf.idx and /dev/null differ
diff --git a/testdata/tribble/basicDbSNP.dbsnp b/testdata/tribble/basicDbSNP.dbsnp
deleted file mode 100644
index fd1fc5e..0000000
--- a/testdata/tribble/basicDbSNP.dbsnp
+++ /dev/null
@@ -1,43 +0,0 @@
-#bin chrom chromStart chromEnd name score strand refNCBI refUCSC observed molType class valid avHet avHetSE func locType weight
-585 1 259 260 rs72477211 0 + C C A/G genomic single unknown 0 0 unknown exact 3
-585 1 433 433 rs56289060 0 + - - -/C genomic insertion unknown 0 0 unknown between 1
-585 1 491 492 rs55998931 0 + C C C/T genomic single unknown 0 0 unknown exact 1
-585 1 518 519 rs62636508 0 + G G C/G genomic single unknown 0 0 unknown exact 1
-585 1 582 583 rs58108140 0 + G G A/G genomic single unknown 0 0 unknown exact 1
-585 1 690 691 rs10218492 0 + G G A/G genomic single by-cluster 0 0 unknown exact 1
-585 1 766 767 rs10218493 0 + G G A/G genomic single by-cluster 0 0 unknown exact 1
-585 1 789 790 rs10218527 0 + A A A/G genomic single by-cluster 0 0 unknown exact 1
-585 1 800 801 rs28853987 0 + G G A/G genomic single unknown 0 0 unknown exact 1
-585 1 876 877 rs28484712 0 + G G A/G genomic single unknown 0 0 unknown exact 1
-585 1 884 885 rs28775022 0 + G G A/G genomic single unknown 0 0 unknown exact 1
-585 1 884 885 rs62636509 0 + G G A/G genomic single unknown 0 0 unknown exact 3
-585 1 943 944 rs10218495 0 + G G G/T genomic single by-cluster 0 0 unknown exact 3
-585 1 1016 1017 rs62635278 0 + A A A/C genomic single unknown 0 0 unknown exact 3
-585 1 1029 1030 rs62635279 0 + C C A/C genomic single unknown 0 0 unknown exact 3
-585 1 1271 1272 rs2441671 0 - A A C/T genomic single unknown 0 0 unknown exact 3
-585 1 1271 1272 rs9803797 0 + A A A/G genomic single by-cluster 0 0 unknown exact 3
-585 1 1319 1320 rs2758124 0 - C C C/G genomic single unknown 0 0 unknown exact 3
-585 1 1332 1333 rs3950659 0 - G G C/T genomic single unknown 0 0 unknown exact 3
-585 1 1370 1371 rs3877545 0 - A A C/T genomic single unknown 0 0 unknown exact 3
-585 1 1404 1405 rs2758123 0 - A A A/T genomic single unknown 0 0 unknown exact 3
-585 1 1427 1428 rs2691333 0 - G G A/C genomic single unknown 0 0 unknown exact 3
-585 1 1468 1469 rs62162368 0 - A A C/T genomic single unknown 0 0 unknown exact 3
-585 1 1539 1540 rs4030196 0 - G G C/G genomic single unknown 0 0 unknown exact 3
-585 1 1554 1555 rs2363296 0 - A A G/T genomic single unknown 0 0 unknown exact 3
-585 1 1591 1592 rs4592209 0 + T T C/T genomic single unknown 0 0 unknown exact 3
-585 1 1643 1644 rs61427470 0 - C C A/G genomic single unknown 0 0 unknown exact 3
-585 1 1643 1644 rs62162367 0 - C C A/G genomic single unknown 0 0 unknown exact 3
-585 1 1649 1650 rs57905273 0 - T T -/A genomic deletion unknown 0 0 unknown exact 3
-585 1 1665 1666 rs62162366 0 - T T A/G genomic single unknown 0 0 unknown exact 3
-585 1 1730 1731 rs11510383 0 - C C A/G genomic single unknown 0 0 unknown exact 3
-585 1 1757 1758 rs4030194 0 - G G C/T genomic single unknown 0 0 unknown exact 3
-585 1 1783 1784 rs57442816 0 - T T A/G genomic single unknown 0 0 unknown exact 3
-585 1 1808 1809 rs4849250 0 - C C A/G genomic single by-2hit-2allele 0 0 unknown exact 3
-585 1 1809 1810 rs7564627 0 - G G C/T genomic single by-cluster 0 0 unknown exact 3
-585 1 1822 1823 rs71234145 0 + C C C/T genomic single unknown 0 0 unknown exact 3
-585 1 1823 1824 rs2981848 0 - G G C/T genomic single unknown 0 0 unknown exact 3
-585 1 1825 1826 rs2462500 0 - G G A/C genomic single by-cluster 0 0 unknown exact 3
-585 1 1832 1833 rs7357973 0 - A A C/T genomic single by-cluster 0 0 unknown exact 3
-585 1 1863 1864 rs62028714 0 + C C C/G genomic single unknown 0 0 unknown exact 3
-585 1 1911 1912 rs7357889 0 - C C C/G genomic single by-cluster 0 0 unknown exact 3
-585 1 1936 1937 rs11510263 0 - T T A/G genomic single unknown 0 0 unknown exact 3
diff --git a/testdata/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed b/testdata/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed
deleted file mode 100644
index 36959bb..0000000
--- a/testdata/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19.bed
+++ /dev/null
@@ -1,35 +0,0 @@
-#comment
-1 25592413 25657872
-1 35101420 35111976
-1 110226277 110241477
-1 152555536 152587611
-2 34695828 34736559
-3 65188868 65214748
-3 162512133 162626335
-3 192875328 192885405
-4 10210770 10234599
-4 70130411 70231411
-4 116166903 116177179
-5 104432112 104503671
-6 55825956 55846709
-6 67008726 67048918
-6 78967153 79036479
-6 103737463 103762885
-7 141767909 141785939
-8 24972431 24990943
-8 39232073 39387227
-8 144700483 144714692
-9 23362800 23377775
-9 44242964 44280939
-10 53203675 53214217
-10 71281002 71291092
-11 51341924 51362954
-11 55366389 55376449
-11 55388020 55431449
-11 55445865 55456751
-14 73996607 74025282
-16 19945549 19967579
-19 20595809 20717976
-19 52133806 52150233
-20 1560965 1594435
-20 52647063 52658002
diff --git a/testdata/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed b/testdata/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed
deleted file mode 100644
index ea34a83..0000000
--- a/testdata/tribble/bed/NA12878.deletions.10kbp.het.gq99.hand_curated.hg19_fixed.bed
+++ /dev/null
@@ -1,36 +0,0 @@
-##########
-1 25592413 25657872
-1 35101420 35111976
-1 110226277 110241477
-1 152555536 152587611
-2 34695828 34736559
-3 65188868 65214748
-3 162512133 162626335
-3 192875328 192885405
-4 10210770 10234599
-4 70130411 70231411
-4 116166903 116177179
-5 104432112 104503671
-6 55825956 55846709
-6 67008726 67048918
-6 78967153 79036479
-6 103737463 103762885
-#########
-7 141767909 141785939
-8 24972431 24990943
-8 39232073 39387227
-8 144700483 144714692
-9 23362800 23377775
-9 44242964 44280939
-10 53203675 53214217
-10 71281002 71291092
-11 51341924 51362954
-11 55366389 55376449
-11 55388020 55431449
-11 55445865 55456751
-14 73996607 74025282
-16 19945549 19967579
-19 20595809 20717976
-19 52133806 52150233
-20 1560965 1594435
-20 52647063 52658002
diff --git a/testdata/tribble/bed/Unigene.sample.bed b/testdata/tribble/bed/Unigene.sample.bed
deleted file mode 100644
index 1628199..0000000
--- a/testdata/tribble/bed/Unigene.sample.bed
+++ /dev/null
@@ -1,72 +0,0 @@
-chr2 1 200000000 LONG_FEATURE 0 + 178707289 178707561 0 3 85,177,8, 0,87,264,
-chr2 178707289 178707561 Hs.666133 0 + 178707289 178707561 0 3 85,177,8, 0,87,264,
-chr2 178709699 178711955 Hs.377257 0 + 178709699 178711955 0 1 2256, 0,
-chr2 178711404 178712057 Hs.688767 0 - 178711404 178712057 0 1 653, 0,
-chr2 178777793 178778272 Hs.541631 0 - 178777793 178778272 0 1 479, 0,
-chr2 178908612 178916376 Hs.318775 0 + 178908612 178916376 0 4 2644,3067,464,1588, 0,2645,5712,6176,
-chr2 178969501 178972156 Hs.593061 0 + 178969501 178972156 0 2 1262,1393, 0,1262,
-chr2 178969902 178971077 Hs.712020 0 - 178969902 178971077 0 1 1175, 0,
-chr2 178973806 178974450 Hs.634282 0 + 178973806 178974450 0 1 644, 0,
-chr2 178974749 178975493 Hs.323349 0 + 178974749 178975493 0 4 337,389,4,13, 0,337,726,731,
-chr2 179004517 179006503 Hs.632540 0 - 179004517 179006503 0 1 1986, 0,
-chr2 179004764 179005050 Hs.625283 0 + 179004764 179005050 0 2 9,276, 0,10,
-chr2 179007083 179007837 Hs.684082 0 + 179007083 179007837 0 5 28,30,20,226,79, 0,72,117,449,675,
-chr2 179008250 179008984 Hs.685223 0 + 179008250 179008984 0 1 734, 0,
-chr2 179008373 179013032 Hs.570274 0 + 179008373 179013032 0 3 2710,583,1365, 0,2711,3294,
-chr2 179011106 179011819 Hs.662660 0 + 179011106 179011819 0 8 556,6,22,98,12,6,6,5, 0,558,564,586,684,696,702,708,
-chr2 179012189 179013184 Hs.658781 0 - 179012189 179013184 0 7 5,9,22,99,844,4,6, 0,6,16,39,139,984,989,
-chr2 179018046 179018564 Hs.633180 0 - 179018046 179018564 0 1 518, 0,
-chr2 179020446 179020899 Hs.605693 0 - 179020446 179020899 0 1 453, 0,
-chr2 179026223 179034260 Hs.87734 0 + 179026223 179034260 0 5 1276,142,118,99,306, 0,2759,5259,7097,7731,
-chr2 179033863 179034261 Hs.607684 0 - 179033863 179034261 0 1 398, 0,
-chr2 179036643 179037341 Hs.645700 0 + 179036643 179037341 0 2 678,19, 0,679,
-chr2 179037911 179051526 Hs.410378 0 - 179037911 179051526 0 5 813,179,134,152,275, 0,814,4713,12123,13340,
-chr2 179052287 179052856 Hs.560940 0 - 179052287 179052856 0 2 291,277, 0,292,
-chr2 179053444 179078029 Hs.41086 0 + 179053444 179078029 0 8 438,117,156,137,165,44,116,1297, 0,5169,10187,13381,15024,18739,20589,23288,
-chr2 179053611 179058730 Hs.560270 0 + 179053611 179058730 0 7 105,37,4,23,99,9,107, 0,105,144,148,172,5002,5012,
-chr2 179078066 179078770 Hs.600801 0 - 179078066 179078770 0 2 350,8, 0,696,
-chr2 179078529 179079064 Hs.541630 0 + 179078529 179079064 0 1 535, 0,
-chr2 179087076 179087882 Hs.560768 0 + 179087076 179087882 0 11 586,90,17,10,22,7,14,23,8,13,10, 0,586,680,697,708,730,738,752,775,783,796,
-chr2 179088297 179088941 Hs.612551 0 + 179088297 179088941 0 7 383,4,214,16,6,5,12, 0,384,389,603,620,626,632,
-chr2 179088778 179089441 Hs.712123 0 - 179088778 179089441 0 8 7,6,8,7,9,12,17,588, 0,9,17,26,34,44,57,75,
-chr2 179088997 179089435 Hs.470769 0 - 179088997 179089435 0 1 438, 0,
-chr2 179095799 179178377 Hs.714450 0 + 179095799 179178377 0 17 34,185,97,331,1193,63,140,135,191,398,421,176,86,118,157,192,675, 0,625,12905,14534,15871,17280,19395,59745,60164,60697,61746,68312,74768,75728,76766,77648,81903,
-chr2 179098961 179380395 Hs.134602 0 - 179098961 179380395 0 314 1319,303,154,692,157,5609,594,306,576,300,306,585,303,303,300,288,594,282,306,306,297,291,306,303,2067,300,288,294,1767,306,303,300,288,297,303,588,297,17106,303,588,297,198,105,588,288,291,288,306,303,297,288,300,303,300,276,303,300,285,321,2967,294,300,282,309,303,300,282,303,303,38,243,151,149,315,300,295,27,292,300,130,33,149,309,430,191,309,300,294,285,297,300,303,363,303,300,279,306,197,106,300,300,116,187,297,288,122 [...]
-chr2 179114097 179114772 Hs.596354 0 - 179114097 179114772 0 1 675, 0,
-chr2 179115873 179116818 Hs.622912 0 - 179115873 179116818 0 2 67,603, 0,342,
-chr2 179121907 179122356 Hs.609542 0 - 179121907 179122356 0 2 224,224, 0,225,
-chr2 179122873 179123656 Hs.621944 0 - 179122873 179123656 0 1 783, 0,
-chr2 179123897 179124349 Hs.619377 0 - 179123897 179124349 0 1 452, 0,
-chr2 179127533 179131939 Hs.640473 0 + 179127533 179131939 0 1 4406, 0,
-chr2 179150961 179151480 Hs.609295 0 - 179150961 179151480 0 1 519, 0,
-chr2 179189619 179190087 Hs.710694 0 + 179189619 179190087 0 12 33,37,18,29,11,179,33,13,34,16,5,52, 0,34,72,91,120,131,311,344,358,393,409,416,
-chr2 179204887 179205401 Hs.661496 0 - 179204887 179205401 0 2 16,498, 0,16,
-chr2 179209546 179287210 Hs.620337 0 - 179209546 179287210 0 5 124,358,6,11,109, 0,77179,77537,77544,77555,
-chr2 179217688 179218151 Hs.603086 0 - 179217688 179218151 0 1 463, 0,
-chr2 179227481 179235392 Hs.678928 0 - 179227481 179235392 0 12 6,15,2,11,72,85,5,79,81,73,8,83, 0,7,23,235,247,402,990,7254,7438,7632,7705,7828,
-chr2 179266309 179266748 Hs.609465 0 - 179266309 179266748 0 1 439, 0,
-chr2 179296428 179300012 Hs.623987 0 + 179296428 179300012 0 1 3584, 0,
-chr2 179302952 179303488 Hs.594545 0 - 179302952 179303488 0 1 536, 0,
-chr2 179305908 179308754 Hs.595834 0 + 179305908 179308754 0 6 121,194,124,4,13,40, 0,701,1567,1691,2793,2806,
-chr2 179315565 179317384 Hs.628418 0 - 179315565 179317384 0 1 1819, 0,
-chr2 179315565 179316076 Hs.670754 0 + 179315565 179316076 0 1 511, 0,
-chr2 179317750 179337584 Hs.589824 0 + 179317750 179337584 0 6 64,57,54,75,373,53, 0,11487,14212,16161,19407,19781,
-chr2 179349897 179352934 Hs.570275 0 + 179349897 179352934 0 2 1830,125, 0,2912,
-chr2 179360386 179361066 Hs.711672 0 + 179360386 179361066 0 1 680, 0,
-chr2 179405591 179445166 Hs.324341 0 - 179405591 179445166 0 13 1821,236,352,117,113,184,195,141,150,180,189,126,62, 0,4274,4773,13006,17429,20821,22727,23637,33147,35406,36497,38807,39513,
-chr2 179433849 179434307 Hs.663044 0 - 179433849 179434307 0 1 458, 0,
-chr2 179445992 179623031 Hs.591627 0 - 179445992 179623031 0 19 283,2269,402,296,353,208,10,1299,192,120,142,173,195,117,254,109,192,123,220, 0,283,2553,2955,3252,3605,3813,3824,11880,13731,15506,32308,45692,71514,88209,102036,105463,174263,176819,
-chr2 179531336 179531470 Hs.610180 0 + 179531336 179531470 0 1 134, 0,
-chr2 179531674 179531995 Hs.610180 0 + 179531674 179531995 0 4 6,17,164,130, 0,10,27,191,
-chr2 179674663 179837595 Hs.30977 0 - 179674663 179837595 0 18 8337,122,192,123,82,160,115,195,123,212,56,98,114,114,91,109,80,125, 0,11032,13373,14976,15840,20078,22023,22672,30612,41900,44710,47605,49586,70428,74756,81388,90095,162807,
-chr2 179675396 179681310 Hs.714518 0 + 179675396 179681310 0 2 435,41, 0,5873,
-chr2 179675483 179675797 Hs.609408 0 + 179675483 179675797 0 1 314, 0,
-chr2 179698890 179699454 Hs.667783 0 - 179698890 179699454 0 2 436,125, 0,439,
-chr2 179702362 179702797 Hs.602509 0 + 179702362 179702797 0 1 435, 0,
-chr2 179714478 179714731 Hs.679403 0 - 179714478 179714731 0 1 253, 0,
-chr2 179720333 179721089 Hs.686454 0 + 179720333 179721089 0 1 756, 0,
-chr2 179820582 179821132 Hs.671087 0 + 179820582 179821132 0 1 550, 0,
-chr2 179820805 179821282 Hs.621019 0 - 179820805 179821282 0 2 264,205, 0,272,
-chr2 179908392 179909870 Hs.516555 0 - 179908392 179909870 0 3 227,147,6, 0,1115,1472,
-chr2 179929123 179929744 Hs.541629 0 - 179929123 179929744 0 4 18,41,385,164, 0,30,71,457,
-chr2 179972131 179973464 Hs.179697 0 - 179972131 179973464 0 3 4,1011,317, 0,5,1016,
diff --git a/testdata/tribble/bed/disconcontigs.bed b/testdata/tribble/bed/disconcontigs.bed
deleted file mode 100644
index 9f3334b..0000000
--- a/testdata/tribble/bed/disconcontigs.bed
+++ /dev/null
@@ -1,5 +0,0 @@
-chr2 178707289 178707561 Hs.666133 0 + 178707289 178707561 0 3 85,177,8, 0,87,264,
-chr1 178709699 178711955 Hs.377257 0 + 178709699 178711955 0 1 2256, 0,
-chr1 178711404 178712057 Hs.688767 0 - 178711404 178712057 0 1 653, 0,
-chr2 178777793 178778272 Hs.541631 0 - 178777793 178778272 0 1 479, 0,
-chr2 178908612 178916376 Hs.318775 0 + 178908612 178916376 0 4 2644,3067,464,1588, 0,2645,5712,6176,
\ No newline at end of file
diff --git a/testdata/tribble/bed/unsorted.bed b/testdata/tribble/bed/unsorted.bed
deleted file mode 100644
index 42500d8..0000000
--- a/testdata/tribble/bed/unsorted.bed
+++ /dev/null
@@ -1,5 +0,0 @@
-chr2 178707289 178707561 Hs.666133 0 + 178707289 178707561 0 3 85,177,8, 0,87,264,
-chr2 178709699 178711955 Hs.377257 0 + 178709699 178711955 0 1 2256, 0,
-chr2 178711404 178712057 Hs.688767 0 - 178711404 178712057 0 1 653, 0,
-chr2 178908612 178916376 Hs.318775 0 + 178908612 178916376 0 4 2644,3067,464,1588, 0,2645,5712,6176,
-chr2 178777793 178778272 Hs.541631 0 - 178777793 178778272 0 1 479, 0,
\ No newline at end of file
diff --git a/testdata/tribble/complexExample.vcf b/testdata/tribble/complexExample.vcf
deleted file mode 100644
index fb76a8d..0000000
--- a/testdata/tribble/complexExample.vcf
+++ /dev/null
@@ -1,23 +0,0 @@
-##format=VCRv3.3
-##source=ArbitrarySource
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##reference=human_b36_both.fasta
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
-1 10001292 testid1 G A 12.22 0 AF=0.50;AlleleBalance=0.57;DoC=23;HomopolymerRun=0;MAPQ0=8;NS=1;RMSMAPQ=46.31;SB=-24.92;SpanningDeletions=0 GT:DP:GQ 1/0:23:19.27 ./. ./.
-1 10002963 . C G 22.22 . AF=0.50;AlleleBalance=0.47;DoC=30;HomopolymerRun=0;MAPQ0=0;NS=1;RMSMAPQ=81.91;SB=-41.73;SpanningDeletions=0 GT:DP:GQ 0/1:30:33.07 ./. ./.
-1 10005008 . A T,C 123.78 0 AF=1.00;DoC=30;HomopolymerRun=6;MAPQ0=2;NS=1;RMSMAPQ=61.05;SB=-75.45;SpanningDeletions=1 GT:DP:GQ 1/1:27:4.03 0/1:26:3.0 0/0:16:2.0
-1 10006296 . C T 42.23 0 AF=0.50;AlleleBalance=0.33;DoC=7;HomopolymerRun=0;MAPQ0=11;NS=1;RMSMAPQ=46.62;SB=-0.04;SpanningDeletions=0 GT:DP:GQ 0/1:7:2000000 ./. ./.
-1 10023478 . G C,A,T 84.23 . AF=1.00;DoC=27;HomopolymerRun=1;MAPQ0=10;NS=1;RMSMAPQ=42.16;SB=-48.38;SpanningDeletions=0 GT:DP:GQ 1/1:27:4.03 2/2:26:3.0 0/3:16:2.0
-1 10029362 . T C 52.22 . AF=0.50;AlleleBalance=0.52;DoC=44;HomopolymerRun=0;MAPQ0=0;NS=1;RMSMAPQ=81.28;SB=-42.22;SpanningDeletions=0 GT:DP:GQ ./. 1/0:-1:36.62 ./.
-1 10042312 . G C 31.81 . AF=0.50;AlleleBalance=0.70;DoC=24;HomopolymerRun=1;MAPQ0=0;NS=1;RMSMAPQ=85.07;SB=0.00;SpanningDeletions=0 GT:DP:GQ 1/0::5.85 0/0:: 0/1:4:
-1 10044557 . C T 62.22 . AF=0.50;AlleleBalance=0.68;DoC=31;HomopolymerRun=16;MAPQ0=0;NS=1;RMSMAPQ=85.34;SB=-0.00;SpanningDeletions=0 GT:DP:GQ ./. ./. 0/1:31:15.01
-1 10045603 . A D3 40.26 0 AF=0.50 GT:DP:GQ 0/1:15:7.94 0/0:15:7.94 1/1:15:7.94
-1 10045604 . A ICAT 41.26 0 AF=0.50 GT:DP:GQ 1/1:14:6.94 0/0:15:7.94 1/0:15:7.94
-1 10048142 . A G 126.81 foo AF=1.00;DoC=36;HomopolymerRun=4;MAPQ0=0;NS=1;RMSMAPQ=82.11;SB=-85.45;SpanningDeletions=0 GT:DP:GQ 0/1:15:7.94 0/0:15:7.94 1/1:15:7.94
-1 10048580 . T A 72.22 bar;baz AF=0.50;AlleleBalance=0.69;DoC=33;HomopolymerRun=6;MAPQ0=0;NS=1;RMSMAPQ=84.45;SB=-27.41;SpanningDeletions=0 GT:DP:GQ 0/1:15:7.94 0/0:15:7.94 1/1:15:7.94
diff --git a/testdata/tribble/fakeBed.bed b/testdata/tribble/fakeBed.bed
deleted file mode 100644
index 0c46b81..0000000
--- a/testdata/tribble/fakeBed.bed
+++ /dev/null
@@ -1,51 +0,0 @@
-chrM 1 1 TITLE
-chr1 1 1 TITLE
-chr1 101 101 TITLE
-chr1 201 201 TITLE
-chr1 301 301 TITLE
-chr1 401 401 TITLE
-chr1 501 501 TITLE
-chr1 601 601 TITLE
-chr1 701 701 TITLE
-chr1 801 801 TITLE
-chr1 901 901 TITLE
-chr1 1001 1001 TITLE
-chr1 1101 1101 TITLE
-chr1 1201 1201 TITLE
-chr1 1301 1301 TITLE
-chr1 1401 1401 TITLE
-chr1 1501 1501 TITLE
-chr1 1601 1601 TITLE
-chr1 1701 1701 TITLE
-chr1 1801 1801 TITLE
-chr1 1901 1901 TITLE
-chr1 2001 2001 TITLE
-chr1 2101 2101 TITLE
-chr1 2201 2201 TITLE
-chr1 2301 2301 TITLE
-chr1 2401 2401 TITLE
-chr1 2501 2501 TITLE
-chr1 2601 2601 TITLE
-chr1 2701 2701 TITLE
-chr1 2801 2801 TITLE
-chr1 2901 2901 TITLE
-chr1 3001 3001 TITLE
-chr1 3101 3101 TITLE
-chr1 3201 3201 TITLE
-chr1 3301 3301 TITLE
-chr1 3401 3401 TITLE
-chr1 3501 3501 TITLE
-chr1 3601 3601 TITLE
-chr1 3701 3701 TITLE
-chr1 3801 3801 TITLE
-chr1 3901 3901 TITLE
-chr1 4001 4001 TITLE
-chr1 4101 4101 TITLE
-chr1 4201 4201 TITLE
-chr1 4301 4301 TITLE
-chr1 4401 4401 TITLE
-chr1 4501 4501 TITLE
-chr1 4601 4601 TITLE
-chr1 4701 4701 TITLE
-chr1 4801 4801 TITLE
-chr1 4901 4901 TITLE
diff --git a/testdata/tribble/fakeVCF.vcf.gz b/testdata/tribble/fakeVCF.vcf.gz
deleted file mode 100644
index e8c7465..0000000
Binary files a/testdata/tribble/fakeVCF.vcf.gz and /dev/null differ
diff --git a/testdata/tribble/fakeVCF.vcf.gz.tbi b/testdata/tribble/fakeVCF.vcf.gz.tbi
deleted file mode 100644
index 0f71973..0000000
Binary files a/testdata/tribble/fakeVCF.vcf.gz.tbi and /dev/null differ
diff --git a/testdata/tribble/gwas/smallp.gwas b/testdata/tribble/gwas/smallp.gwas
deleted file mode 100644
index 0344a98..0000000
--- a/testdata/tribble/gwas/smallp.gwas
+++ /dev/null
@@ -1,20 +0,0 @@
-SNP CHR BP P
-rs1233367 6 29622220 2.28235e-32
-rs29228 6 29623739 0.931148124684
-rs29228 6 29623739 1.70737e-89
-rs3130250 6 29625001 7.18775027174e-05
-rs2535260 6 29628883 0.00246256208471
-rs3129063 6 29645613 3.32185e-97
-rs387642 6 29645634 8.0006e-123
-rs385492 6 29649547 7.60380647336e-12
-rs3129045 6 29652576 4.16094765754e-07
-rs3129090 6 29664131 9.31671032411e-06
-rs3131886 6 29664452 1.85639e-21
-rs3129190 6 29669443 6.50202338003e-05
-rs6456993 6 29670536 5.71059057921e-05
-rs3129046 6 29670652 8.48154e-66
-rs3116788 6 29674197 2.1088206692e-07
-rs3131862 6 29675227 1.81790802347e-05
-rs1610584 6 29675615 7.97182551082e-08
-rs1610585 6 29675676 1.44138539548e-07
-rs9258126 6 29675791 0.000193925445894
\ No newline at end of file
diff --git a/testdata/tribble/index/chrY_Y4_small.bed b/testdata/tribble/index/chrY_Y4_small.bed
deleted file mode 100644
index b85a841..0000000
--- a/testdata/tribble/index/chrY_Y4_small.bed
+++ /dev/null
@@ -1,5000 +0,0 @@
-track name="chrY_Y4 Sequences" description="Illumina bowtie-aligned reads - Y4" visibility=4 priority=10 itemRgb="On"
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770199 2770251 CATGGCCCGGGGCCCCAAGAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCA 0 + 2770199 2770251 255,0,0
-chrY 2770217 2770269 GAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGCCAAACT 0 + 2770217 2770269 255,0,0
-chrY 2770217 2770269 GAAGCACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGCTGCTTGACAAATT 0 + 2770217 2770269 255,0,0
-chrY 2770220 2770272 GCNCTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAAC 0 + 2770220 2770272 255,0,0
-chrY 2770220 2770272 GCACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAAATAAC 0 + 2770220 2770272 255,0,0
-chrY 2770222 2770274 ACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGG 0 + 2770222 2770274 255,0,0
-chrY 2770222 2770274 ACTTAAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGG 0 + 2770222 2770274 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770226 2770278 AAAGCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGTGT 0 + 2770226 2770278 255,0,0
-chrY 2770229 2770281 GCGTGTTGCAGCGCCGAAGCATTGGATGCTTGACAAACTAACGGGGGTATT 0 + 2770229 2770281 255,0,0
-chrY 2772150 2772202 GGAATGTCTTCCTCTGATCGTCTTCCTCAGGAATAGGCTCAAGTATGCGTG 0 - 2772150 2772202 0,0,255
-chrY 2772150 2772202 GGAAGGTCTTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTG 0 - 2772150 2772202 0,0,255
-chrY 2772157 2772209 CTTCCTCTGATCGTCTTCCTCAGGAATCGACTCAAGTATGCGTTGACTGGA 0 + 2772157 2772209 255,0,0
-chrY 2772157 2772209 CCTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGA 0 + 2772157 2772209 255,0,0
-chrY 2772157 2772209 CTTCCTCTGATGGTCTTCCCCGGGAATAGACTCAAGTATGCGTTGACTGGA 0 + 2772157 2772209 255,0,0
-chrY 2772157 2772209 CTTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGG 0 + 2772157 2772209 255,0,0
-chrY 2772158 2772210 TTCCTCTGATCGGCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAG 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGGCTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGATTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772158 2772210 TTCCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAA 0 - 2772158 2772210 0,0,255
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772160 2772212 TCTCTGATCGTCTTCCTCAGGAATAGACTCAAGTATGCGTTGACTGGAGAT 0 + 2772160 2772212 255,0,0
-chrY 2772187 2772239 CTCAAGCATGCGTTGACTGGAGATGAGGAAAAGAAGATATGTATGCAACGT 0 + 2772187 2772239 255,0,0
-chrY 2772201 2772253 GACCGGAGATGAGGTAAAGAAGATATGTATGCAACGTTTCATCAAAATTGA 0 - 2772201 2772253 0,0,255
-chrY 2772214 2772266 GTAAAGAAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGATCGA 0 + 2772214 2772266 255,0,0
-chrY 2772214 2772266 GTAAAGACGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGA 0 + 2772214 2772266 255,0,0
-chrY 2772215 2772267 AAAAGAAGATATGTATGCAACGTTTCATCAAAATAGATGGCAAGGTTCGAG 0 - 2772215 2772267 0,0,255
-chrY 2772215 2772267 TAAAGAAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCTAG 0 - 2772215 2772267 0,0,255
-chrY 2772215 2772267 TAAAGAAGATATGTATGCAACGTTTCATCAAAATTGGTGGCAAGGTTCGAG 0 - 2772215 2772267 0,0,255
-chrY 2772215 2772267 TAAAGAGGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAG 0 - 2772215 2772267 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGACGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAATGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTAGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGAGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATAGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 + 2772220 2772272 255,0,0
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772220 2772272 AAGATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGAT 0 - 2772220 2772272 0,0,255
-chrY 2772223 2772275 ATATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTC 0 - 2772223 2772275 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772224 2772276 TATGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCA 0 - 2772224 2772276 0,0,255
-chrY 2772226 2772278 TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA 0 + 2772226 2772278 255,0,0
-chrY 2772226 2772278 TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA 0 + 2772226 2772278 255,0,0
-chrY 2772226 2772278 TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA 0 + 2772226 2772278 255,0,0
-chrY 2772226 2772278 TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA 0 + 2772226 2772278 255,0,0
-chrY 2772226 2772278 TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA 0 + 2772226 2772278 255,0,0
-chrY 2772226 2772278 TGTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACA 0 + 2772226 2772278 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAGGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGCCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 NTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGATTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772227 2772279 GTATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACAT 0 + 2772227 2772279 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAAGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGGCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772229 2772281 ATGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATAC 0 + 2772229 2772281 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772230 2772282 TGCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACC 0 + 2772230 2772282 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772231 2772283 GCAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCC 0 + 2772231 2772283 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGTATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGAGGATGTCACATACCAT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGCTGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCG 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCT 0 + 2772232 2772284 255,0,0
-chrY 2772232 2772284 CAACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCC 0 - 2772232 2772284 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772233 2772285 AACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTG 0 - 2772233 2772285 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATCGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGN 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772234 2772286 ACGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGC 0 - 2772234 2772286 0,0,255
-chrY 2772235 2772287 CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG 0 - 2772235 2772287 0,0,255
-chrY 2772235 2772287 CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG 0 - 2772235 2772287 0,0,255
-chrY 2772235 2772287 CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG 0 - 2772235 2772287 0,0,255
-chrY 2772235 2772287 CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCG 0 - 2772235 2772287 0,0,255
-chrY 2772235 2772287 CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCT 0 + 2772235 2772287 255,0,0
-chrY 2772235 2772287 CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCT 0 + 2772235 2772287 255,0,0
-chrY 2772235 2772287 CGTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCT 0 + 2772235 2772287 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772236 2772288 GTTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTG 0 + 2772236 2772288 255,0,0
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772237 2772289 TTTCATCAAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGG 0 - 2772237 2772289 0,0,255
-chrY 2772244 2772296 AAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGAGTCATG 0 - 2772244 2772296 0,0,255
-chrY 2772244 2772296 AAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCGGGATTCATG 0 - 2772244 2772296 0,0,255
-chrY 2772244 2772296 AAAAGTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGATTCATG 0 - 2772244 2772296 0,0,255
-chrY 2772244 2772296 AAAAGTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGATTCATG 0 - 2772244 2772296 0,0,255
-chrY 2772244 2772296 AAAAGTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGATTCATG 0 - 2772244 2772296 0,0,255
-chrY 2772244 2772296 AAAATTGATGGCAAGGTTCGAGTGGATGTCACATACCCTGCTGGCTTCATG 0 + 2772244 2772296 255,0,0
-chrY 2772244 2772296 AAAATTGATGGCAAGGTTCGAGTGGATGTCACATGCCCTGCTGGATTCATG 0 - 2772244 2772296 0,0,255
-chrY 2772245 2772297 AAATTGATGGCAAGGTTCGAGTGGATGTCACGTACCCTGCTGGATTCATGG 0 + 2772245 2772297 255,0,0
-chrY 2772245 2772297 AAATTGATGGCAAGGTTTGAGTGGATGTCACATACCCTGCTGGATTCATGG 0 + 2772245 2772297 255,0,0
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTTGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 GTCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ANCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773689 2773741 ATCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAG 0 - 2773689 2773741 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCACGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 + 2773690 2773742 255,0,0
-chrY 2773690 2773742 TCAGCATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGG 0 - 2773690 2773742 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGAGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCG 0 - 2773694 2773746 0,0,255
-chrY 2773694 2773746 CATCGAGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCA 0 - 2773694 2773746 0,0,255
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTTTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773699 2773751 AGAAGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTG 0 + 2773699 2773751 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 GGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773702 2773754 AGACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTG 0 + 2773702 2773754 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773703 2773755 GACAGGTGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGT 0 + 2773703 2773755 255,0,0
-chrY 2773709 2773761 TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG 0 + 2773709 2773761 255,0,0
-chrY 2773709 2773761 TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG 0 + 2773709 2773761 255,0,0
-chrY 2773709 2773761 TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG 0 + 2773709 2773761 255,0,0
-chrY 2773709 2773761 TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG 0 + 2773709 2773761 255,0,0
-chrY 2773709 2773761 TGAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCG 0 + 2773709 2773761 255,0,0
-chrY 2773710 2773762 GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC 0 - 2773710 2773762 0,0,255
-chrY 2773710 2773762 GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC 0 - 2773710 2773762 0,0,255
-chrY 2773710 2773762 GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC 0 - 2773710 2773762 0,0,255
-chrY 2773710 2773762 GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC 0 - 2773710 2773762 0,0,255
-chrY 2773710 2773762 GAACATTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGC 0 - 2773710 2773762 0,0,255
-chrY 2773715 2773767 TTTCCNCCTGGTCTATGACACCAAGGGCCGTTTTGCNGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773715 2773767 TTTCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCAC 0 + 2773715 2773767 255,0,0
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCATTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCATTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773717 2773769 TCCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAG 0 - 2773717 2773769 0,0,255
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTTCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773718 2773770 CCGCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGT 0 + 2773718 2773770 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773720 2773772 GCCTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGG 0 + 2773720 2773772 255,0,0
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773722 2773774 CTGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAA 0 - 2773722 2773774 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773723 2773775 TGGTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAG 0 - 2773723 2773775 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACGAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773725 2773777 GTCTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAG 0 - 2773725 2773777 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773727 2773779 CTATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGC 0 - 2773727 2773779 0,0,255
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCNNGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCNA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTCCTGTTCACCGCATCCCAGTGGAAGAGCCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAA 0 + 2773729 2773781 255,0,0
-chrY 2773729 2773781 ATGACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGCCAA 0 + 2773729 2773781 255,0,0
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773731 2773783 GACACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAG 0 - 2773731 2773783 0,0,255
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2773733 2773785 CACCAAGGGCCGTTTTGCTGTTCACCGCATCACAGTGGAAGAGGCAAAGTA 0 + 2773733 2773785 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTATGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774693 2774745 TTCGCCCACAGGAGGTACTTTGTTTTAGATGATAGGAACTAGGCCTTGAAT 0 + 2774693 2774745 255,0,0
-chrY 2774811 2774863 AAATCAAAGCTGATGACTGGTTTCTGCTTTTGTATGGAATTTGGATCTCAA 0 - 2774811 2774863 0,0,255
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCCGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGACCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGNGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCTGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCCGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2774930 2774982 CTGGAGTGTTGTTAATACCTAGTACTGGCCCTACCAGATTGGCCAGCCAGG 0 + 2774930 2774982 255,0,0
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 TCGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCAGTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775049 2775101 ACGGTATTGGCCTTATCCTTGTGTAACAGGTGAGAGACTTGGGAAGTTTTG 0 - 2775049 2775101 0,0,255
-chrY 2775260 2775312 CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG 0 + 2775260 2775312 255,0,0
-chrY 2775260 2775312 CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG 0 + 2775260 2775312 255,0,0
-chrY 2775260 2775312 CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG 0 + 2775260 2775312 255,0,0
-chrY 2775260 2775312 CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG 0 + 2775260 2775312 255,0,0
-chrY 2775260 2775312 CAGGGAGCCTTTTCATAGTTTATTAATCCACCAGGTAGCATAGGTTAGTGG 0 + 2775260 2775312 255,0,0
-chrY 2775362 2775414 GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT 0 - 2775362 2775414 0,0,255
-chrY 2775362 2775414 GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT 0 - 2775362 2775414 0,0,255
-chrY 2775362 2775414 GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT 0 - 2775362 2775414 0,0,255
-chrY 2775362 2775414 GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT 0 - 2775362 2775414 0,0,255
-chrY 2775362 2775414 GTGGTATTTTGTGGGTCTTGGGAAAACAGCCTGATGGATTTCAGACATAAT 0 - 2775362 2775414 0,0,255
-chrY 2776928 2776980 GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT 0 + 2776928 2776980 255,0,0
-chrY 2776928 2776980 GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT 0 + 2776928 2776980 255,0,0
-chrY 2776928 2776980 GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT 0 + 2776928 2776980 255,0,0
-chrY 2776928 2776980 GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT 0 + 2776928 2776980 255,0,0
-chrY 2776928 2776980 GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT 0 + 2776928 2776980 255,0,0
-chrY 2776928 2776980 GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT 0 + 2776928 2776980 255,0,0
-chrY 2776928 2776980 GTGTAGTTATTTTTATCCCTGGCCCCCTCCCAACCTCCCTCATCTGGGTCT 0 + 2776928 2776980 255,0,0
-chrY 2777048 2777100 ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT 0 - 2777048 2777100 0,0,255
-chrY 2777048 2777100 ACTCATAGCAAGATGGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT 0 - 2777048 2777100 0,0,255
-chrY 2777048 2777100 ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT 0 - 2777048 2777100 0,0,255
-chrY 2777048 2777100 ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT 0 - 2777048 2777100 0,0,255
-chrY 2777048 2777100 ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT 0 - 2777048 2777100 0,0,255
-chrY 2777048 2777100 ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT 0 - 2777048 2777100 0,0,255
-chrY 2777048 2777100 ACTCATAGCAAGATAGGGGTTTTGGTTTTCCACTCCTGTGTTATTTCACTT 0 - 2777048 2777100 0,0,255
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777447 2777499 CTCAATCCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTA 0 + 2777447 2777499 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCGCATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777453 2777505 CCGAACTCTGATTCCTTTACCACATAGAGGCTGAGCCCCATACTAGGAACT 0 + 2777453 2777505 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777539 2777591 CATTGTTGTGCCTTTCTCACTTGCCAGTGGTGACTCAGAGGGCCCTACAGT 0 + 2777539 2777591 255,0,0
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGGCGCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGTGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777561 2777613 GCCAGGGGTGACTCAGAGGGCCCTACAGTCTTTGGGAGTCTTGGGGCTGGA 0 - 2777561 2777613 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777581 2777633 CCCTACAGTCTTTGGGAGTCTTGGGGCTGGAGGACAGAAGGTGATGGGGTG 0 - 2777581 2777633 0,0,255
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTAAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTTACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777631 2777683 GTCACATCTTTAAAATCTGAAGACAGTCTTTTCAGCTGTGGGACAGAGGAA 0 + 2777631 2777683 255,0,0
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAGTTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 CGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGCGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777667 2777719 TGTGGGACAGAGGAAAAATAATTGGTTTTCTGCAGATGTTGAGGCTACCCC 0 - 2777667 2777719 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2777745 2777797 AGTTCCCCTCATGATATGGCCAGTCTTACCCTTAGTGAACCTCTAGTTTCC 0 - 2777745 2777797 0,0,255
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTATTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778418 2778470 AAAGTTTTTACTTGTTTTGTTTTTGCTGTCTTTCTCCTGACTGTCAGCAGT 0 + 2778418 2778470 255,0,0
-chrY 2778697 2778749 TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA 0 + 2778697 2778749 255,0,0
-chrY 2778697 2778749 TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA 0 + 2778697 2778749 255,0,0
-chrY 2778697 2778749 TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA 0 + 2778697 2778749 255,0,0
-chrY 2778697 2778749 TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA 0 + 2778697 2778749 255,0,0
-chrY 2778697 2778749 TTAGAATCACCCAAGTAGGTTCAGGATGTCACATACAAAAAATGTGGAGGA 0 + 2778697 2778749 255,0,0
-chrY 2778798 2778850 TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC 0 - 2778798 2778850 0,0,255
-chrY 2778798 2778850 TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC 0 - 2778798 2778850 0,0,255
-chrY 2778798 2778850 TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC 0 - 2778798 2778850 0,0,255
-chrY 2778798 2778850 TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC 0 - 2778798 2778850 0,0,255
-chrY 2778798 2778850 TCATGAAGTTGGAGGGGCAGAGGTAGAGAGCTTGCATTTCAGAGTTCTTTC 0 - 2778798 2778850 0,0,255
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779169 2779221 CCGCGCCCGGCCCAGAGGGTTTCTTATATCTAGCGTGGAGTAGAGCTGGAG 0 + 2779169 2779221 255,0,0
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779277 2779329 GTGGTCACTGGATTGGTACTGATGATTGGATAGCACATTTTAAAGGTAAAG 0 - 2779277 2779329 0,0,255
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779315 2779367 TTTAAAGGTAAAGTGCAAGTTACTCTTTTAAATGAGGATGGAAGAGTGAAG 0 + 2779315 2779367 255,0,0
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAAGGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTGTGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779428 2779480 TTTCTTATGGTTTGGTCCCAGGGCTTCGGGAGGTATAAGGGGAAAATGTGT 0 - 2779428 2779480 0,0,255
-chrY 2779683 2779735 ATCCCTCTGTGCCCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTG 0 + 2779683 2779735 255,0,0
-chrY 2779683 2779735 ATCCCTCTGTGCCCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTG 0 + 2779683 2779735 255,0,0
-chrY 2779683 2779735 ATCCCTCTGTGCCCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTG 0 + 2779683 2779735 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779695 2779747 CCTTGTTATATCATTTATTGTCTGAGGCAGTTCTGCTTGGCTGCTTAGTGA 0 + 2779695 2779747 255,0,0
-chrY 2779735 2779787 CTGCTTAGTGAACCTCCTTTCAGTACCCTGGACACTCTGTGTCTGTGTCCA 0 - 2779735 2779787 0,0,255
-chrY 2779735 2779787 CTGCTTAGTGAACCTCCTTTCAGTACCCTGGACACTCTGTGTCTGTGTCCA 0 - 2779735 2779787 0,0,255
-chrY 2779735 2779787 CTGCTTAGTGAACCTCCTTTCAGTACCCTGGACACTCTGTGTCTGTGTCCA 0 - 2779735 2779787 0,0,255
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779789 2779841 TCTCCCTCTGCCTCATCTCACGTAAGTATTTTGCCTACTGTAGCACCACAG 0 + 2779789 2779841 255,0,0
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779810 2779862 GTAAGTATTTTGCCTACTGTAGCACCACAGCTTGATGATTTTCTGTTCTGG 0 - 2779810 2779862 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2779899 2779951 TCTGTCTTCTCTTATGGGGATGTTTATACCTGATTGGAAGGAATGTGCCAA 0 - 2779899 2779951 0,0,255
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780254 2780306 ATTGTCCTTTAGGGCCAAGTTCTGGACCCAAAGGCATTCCTAAAGTTAATT 0 + 2780254 2780306 255,0,0
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780385 2780437 TCAGCCTAATTGTCCCTTGAAGTGCTTCCAACTTTTCTTTTAAGAGCTTTA 0 - 2780385 2780437 0,0,255
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAACGCTGGCAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780563 2780615 GCAGCTTTCAATTCTTTGCTTAACTCACTGGCCAGGAAAGCTGGAAATGAT 0 + 2780563 2780615 255,0,0
-chrY 2780640 2780692 AAATATGAGGTGGTGGTGGCAAACAAACTGACCACTCATTGGAGAATGCCT 0 + 2780640 2780692 255,0,0
-chrY 2780640 2780692 AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT 0 + 2780640 2780692 255,0,0
-chrY 2780640 2780692 AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT 0 + 2780640 2780692 255,0,0
-chrY 2780640 2780692 AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT 0 + 2780640 2780692 255,0,0
-chrY 2780640 2780692 AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT 0 + 2780640 2780692 255,0,0
-chrY 2780640 2780692 AAATATGAGGTGGTGGTGGCAAACAAACTGAACACTCATTGGAGAATGCCT 0 + 2780640 2780692 255,0,0
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2780701 2780753 GTCAACTGTGAAGTTTTGATTTGAAGAGCGTGCTCTCATTAGATTGACTGC 0 - 2780701 2780753 0,0,255
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781475 2781527 CAAAGCTGAAAGAAAACCCACTTTGTCACTTCTGAGCGGTGACAGTCCATG 0 + 2781475 2781527 255,0,0
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTGGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781572 2781624 TATGTTTGTTTGAGATTACATAGTGTACCATTTGAATCTCCTGAAAATTGC 0 - 2781572 2781624 0,0,255
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781670 2781722 CTTGGTATGAGACATTTTGAACTCCTCCTGCTGATAGATGTCACGAGCAAC 0 + 2781670 2781722 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781743 2781795 AAGGAATAAAGCAAGTAGTTAATGGGTTGTGCCATTTAAAAATGAGATGAG 0 + 2781743 2781795 255,0,0
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781797 2781849 GAGCAGCATTGTGTACAGAAAGCATGTAGCTGGCCGAGACAGCTGTTTTAC 0 - 2781797 2781849 0,0,255
-chrY 2781864 2781916 AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA 0 - 2781864 2781916 0,0,255
-chrY 2781864 2781916 AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA 0 - 2781864 2781916 0,0,255
-chrY 2781864 2781916 AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA 0 - 2781864 2781916 0,0,255
-chrY 2781864 2781916 AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA 0 - 2781864 2781916 0,0,255
-chrY 2781864 2781916 AGCCTCATGATTTTTTTTTTTTTTGAGACAGAGTTTCACTCTTGTTGCCCA 0 - 2781864 2781916 0,0,255
-chrY 2781973 2782025 CGACTTTCCTGCCTCAGCCTCCCGAGTAGGTGGGATTACAGGCTTGTGCCC 0 + 2781973 2782025 255,0,0
-chrY 2782189 2782241 GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC 0 - 2782189 2782241 0,0,255
-chrY 2782189 2782241 GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC 0 - 2782189 2782241 0,0,255
-chrY 2782189 2782241 GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC 0 - 2782189 2782241 0,0,255
-chrY 2782189 2782241 GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC 0 - 2782189 2782241 0,0,255
-chrY 2782189 2782241 GTTCTTAGTAGTGGTAGAGTTAAGTTTGTCTCTGGGGCTCTTTGTTACCAC 0 - 2782189 2782241 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCCGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782506 2782558 GTTTTTCCCAAGAGCACTCCTTCTCTGACCGAGGAAATGCTGGAAATCGAT 0 - 2782506 2782558 0,0,255
-chrY 2782528 2782580 CTCTGACCGAGGAAATGCTGGAAATCGATGGGATAAGTAATGTCTGGGTGA 0 + 2782528 2782580 255,0,0
-chrY 2782537 2782589 AGGAAATGCTGGAAATCGATGGGATAAGTAATGTCTGGGTGACTGCTTTAG 0 - 2782537 2782589 0,0,255
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782582 2782634 CTTTAGGCTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTT 0 + 2782582 2782634 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782589 2782641 CTGGCTTTGTGTTTACATATTGAATTGATTTTCCTTGCTGTGTTTATAGTA 0 + 2782589 2782641 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 ACAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782632 2782684 GCAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGA 0 + 2782632 2782684 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGCACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782633 2782685 CAAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAA 0 + 2782633 2782685 255,0,0
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGTAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782634 2782686 AAAGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTCGGAGTGAAGGGAAT 0 - 2782634 2782686 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTCGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782636 2782688 AGTACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCC 0 - 2782636 2782688 0,0,255
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782638 2782690 TACAAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCT 0 + 2782638 2782690 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782641 2782693 AAGTTGTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCAC 0 + 2782641 2782693 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGTTTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782646 2782698 GTGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGT 0 + 2782646 2782698 255,0,0
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782647 2782699 TGCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTG 0 - 2782647 2782699 0,0,255
-chrY 2782648 2782700 GCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGA 0 + 2782648 2782700 255,0,0
-chrY 2782648 2782700 GCAAAGTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGA 0 + 2782648 2782700 255,0,0
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782653 2782705 GTGAGGAAGATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCAT 0 - 2782653 2782705 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782661 2782713 GATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCG 0 - 2782661 2782713 0,0,255
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACCCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGAGTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782662 2782714 ATTACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGA 0 + 2782662 2782714 255,0,0
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782664 2782716 TACTGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAAC 0 - 2782664 2782716 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782667 2782719 TGTGGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCAC 0 - 2782667 2782719 0,0,255
-chrY 2782670 2782722 GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG 0 + 2782670 2782722 255,0,0
-chrY 2782670 2782722 GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG 0 + 2782670 2782722 255,0,0
-chrY 2782670 2782722 GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG 0 - 2782670 2782722 0,0,255
-chrY 2782670 2782722 GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG 0 - 2782670 2782722 0,0,255
-chrY 2782670 2782722 GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG 0 - 2782670 2782722 0,0,255
-chrY 2782670 2782722 GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG 0 - 2782670 2782722 0,0,255
-chrY 2782670 2782722 GGGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCG 0 - 2782670 2782722 0,0,255
-chrY 2782671 2782723 GATCTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGCGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782671 2782723 GGAGTGAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGC 0 - 2782671 2782723 0,0,255
-chrY 2782676 2782728 GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC 0 + 2782676 2782728 255,0,0
-chrY 2782676 2782728 GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC 0 + 2782676 2782728 255,0,0
-chrY 2782676 2782728 GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC 0 + 2782676 2782728 255,0,0
-chrY 2782676 2782728 GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC 0 - 2782676 2782728 0,0,255
-chrY 2782676 2782728 GAAGGGAATCCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCC 0 + 2782676 2782728 255,0,0
-chrY 2782685 2782737 CCCTCACCTGGTGACTCATCATGCTCGAACCATCCGCTACCCAGATCCTGT 0 + 2782685 2782737 255,0,0
-chrY 2782685 2782737 CCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCCAGATCCTGT 0 + 2782685 2782737 255,0,0
-chrY 2782685 2782737 CCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCCAGATCCTGT 0 + 2782685 2782737 255,0,0
-chrY 2782685 2782737 CCCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTACCCAGATCCTGT 0 + 2782685 2782737 255,0,0
-chrY 2782686 2782738 CCTCACCTGGTGACTCATGATGCTCGAACCATCCGCTATCCAGATCCTGTC 0 + 2782686 2782738 255,0,0
-chrY 2782690 2782742 CCCTGGTGACTCATGATGCTCGACCCATCCGCTACCCAGATCCTGTCATCA 0 - 2782690 2782742 0,0,255
-chrY 2782710 2782762 CAACCCATCCGCTACCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG 0 - 2782710 2782762 0,0,255
-chrY 2782710 2782762 CAACCCATCCGCTACCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG 0 - 2782710 2782762 0,0,255
-chrY 2782710 2782762 CCACCCACCCGCTACCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG 0 - 2782710 2782762 0,0,255
-chrY 2782710 2782762 AGACCCATCCGCTCCCCAGATCCTGTCATCAAGGTGAACGATACTGTGCAG 0 - 2782710 2782762 0,0,255
-chrY 2782716 2782768 ATCCGCTACCCAGATCCTGTCATCAAGGTGAACGAAACTGTGCAGATTTAT 0 + 2782716 2782768 255,0,0
-chrY 2782718 2782770 CCGCCACCCAGATCCTGTCATCAAGGTGAACGATACCGTGCAGCTTGATTT 0 + 2782718 2782770 255,0,0
-chrY 2782755 2782807 GTGCAGATTGAATTAGGGGCTGGCAAGATAATCAACTTTATCAAATTTGAT 0 - 2782755 2782807 0,0,255
-chrY 2782755 2782807 GTGTAGATTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGAT 0 - 2782755 2782807 0,0,255
-chrY 2782756 2782808 TGCAGATTGATTTAGGGACTGGCAAGATAAACAACTTTATCAAATTTGATA 0 + 2782756 2782808 255,0,0
-chrY 2782760 2782812 GATTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAAGTTGATACAGG 0 - 2782760 2782812 0,0,255
-chrY 2782760 2782812 GATTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACTGG 0 - 2782760 2782812 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782762 2782814 TTGATTTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCG 0 - 2782762 2782814 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2782767 2782819 TTAGGGACTGGCAAGATAATCAACTTTATCAAATTTGATACAGGCAATTTG 0 - 2782767 2782819 0,0,255
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTGGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2789679 2789731 GTTTCATTCTTGTTGCCTAGGCTGGACTGCAGTGGTGACATCTCTGCTCAC 0 + 2789679 2789731 255,0,0
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2790238 2790290 GTGCCACCATGCCTAGCTGTGATCCACTGCAGTAGAAAATTTTGTTTTCAC 0 - 2790238 2790290 0,0,255
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793126 2793178 GCAATTTGTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGA 0 + 2793126 2793178 255,0,0
-chrY 2793133 2793185 GTGTATGGTGATTGGTGGAGCCAACCTCGGTCGTGTTGGTGTGATCACCAA 0 + 2793133 2793185 255,0,0
-chrY 2793144 2793196 TGTGTGGGGCCAACCTCGGTCGTGTTGGTGTGATCACCAACAGGGAAAGAC 0 - 2793144 2793196 0,0,255
-chrY 2793144 2793196 TTGGGGGAGCCAACCTCGGTCGTGTTGGTGTGATCACCAACAGGGAAAGAC 0 - 2793144 2793196 0,0,255
-chrY 2793144 2793196 TGGGTGGAGCCAACCTCGGTCGTGTTGGTGTGATCACCAACAGGGAAAGAC 0 - 2793144 2793196 0,0,255
-chrY 2793150 2793202 GAGCCTGCCTCGGTCGTGTTGGTGTGATCTCCAACAGGGAAAGACATCCTG 0 - 2793150 2793202 0,0,255
-chrY 2793150 2793202 GAGCCAACCTCGGTCGTGTTGGTGTGATCAACAAAAGGGAAAGACATCCTG 0 + 2793150 2793202 255,0,0
-chrY 2793150 2793202 GAGCCAACCTCGGTCGCGTTGGTGTGATCACCAACAGGGAACGACATCCTG 0 + 2793150 2793202 255,0,0
-chrY 2793159 2793211 TCGGTCGTGTTGGTGTGATCCCCAACAGGGAAAGACATCCTGGTTCTTTTG 0 - 2793159 2793211 0,0,255
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGATCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793170 2793222 GGTGTGATCACCAACAGGGAAAGACAACCTGGTTCTTTTGATGTGGTGCAT 0 + 2793170 2793222 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCGCCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 - 2793173 2793225 0,0,255
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793173 2793225 GTGATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTG 0 + 2793173 2793225 255,0,0
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACGGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAN 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793175 2793227 GATCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAA 0 - 2793175 2793227 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATATGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793177 2793229 TCACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGG 0 - 2793177 2793229 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 - 2793178 2793230 0,0,255
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCANGTGANGGA 0 + 2793178 2793230 255,0,0
-chrY 2793178 2793230 CACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGA 0 + 2793178 2793230 255,0,0
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATACTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793179 2793231 ACCAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGAT 0 - 2793179 2793231 0,0,255
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGCAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 NAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793181 2793233 CAACAGGGAAAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGC 0 + 2793181 2793233 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793190 2793242 AAGACATCCTGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAA 0 + 2793190 2793242 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793199 2793251 TGGTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGC 0 + 2793199 2793251 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GCTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGATGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 + 2793201 2793253 255,0,0
-chrY 2793201 2793253 GTTCTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCA 0 - 2793201 2793253 0,0,255
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCAAGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793204 2793256 CTTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGA 0 + 2793204 2793256 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATCGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 - 2793205 2793257 0,0,255
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 - 2793205 2793257 0,0,255
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 - 2793205 2793257 0,0,255
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCACTGGCAACAGCTTTGCCACGCG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCAACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793205 2793257 TTTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAG 0 + 2793205 2793257 255,0,0
-chrY 2793206 2793258 TTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGG 0 + 2793206 2793258 255,0,0
-chrY 2793206 2793258 TTTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGG 0 + 2793206 2793258 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TCGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGACAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793207 2793259 TTGATGTGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGC 0 + 2793207 2793259 255,0,0
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793213 2793265 TGGTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCA 0 - 2793213 2793265 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGTCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAATAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 + 2793215 2793267 255,0,0
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793215 2793267 GTGCATGTGAAGGATGCCAATGGCAACAGCTTTGCCACGAGGCTTTCCAAC 0 - 2793215 2793267 0,0,255
-chrY 2793221 2793273 GTGAAGGATGCCAATGAAAACAGCTTTGCCACGAGGATTTCCAACATTTTT 0 + 2793221 2793273 255,0,0
-chrY 2793223 2793275 GAAGGATGCCAATGGCAACAGCTTTGCCACGGGGCTTTCCAACATTTTTGT 0 + 2793223 2793275 255,0,0
-chrY 2793231 2793283 CCAATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATCGGCA 0 - 2793231 2793283 0,0,255
-chrY 2793232 2793284 CAATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAN 0 - 2793232 2793284 0,0,255
-chrY 2793232 2793284 CAATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCGTTGGCAA 0 - 2793232 2793284 0,0,255
-chrY 2793232 2793284 CAATGGCAACAGCTTTGCCACGAGGCTTTCGAACATTTTTGTCATTGGCAA 0 - 2793232 2793284 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGCCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793233 2793285 AATGGCAACAGCTTTGCCACGAGGCTTTCCAACATTTTTGTCATTGGCAAC 0 - 2793233 2793285 0,0,255
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793336 2793388 ATAAAGACCTGCATCCACTACTGGTGTTTGTCTGTTTGTTCTTTTTCCAGT 0 + 2793336 2793388 255,0,0
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGAGCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAACCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793447 2793499 AGATCTAGAGCCTTACACCTGCCTCTTCAGGTGGTCTGTGTGAGATGCCAG 0 - 2793447 2793499 0,0,255
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAGGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793566 2793618 GCTGGATTAAGGTCACTGGCTCCAATCCTGGTAGTGCTGTGCCCCCTTAAT 0 + 2793566 2793618 255,0,0
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793684 2793736 ATGGAGATTGATGCAAGGGGGCTATGAGTGAGTTGCTAATTTGAGAATAAG 0 - 2793684 2793736 0,0,255
-chrY 2793788 2793840 CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG 0 + 2793788 2793840 255,0,0
-chrY 2793788 2793840 CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG 0 + 2793788 2793840 255,0,0
-chrY 2793788 2793840 CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG 0 + 2793788 2793840 255,0,0
-chrY 2793788 2793840 CTCTGGGATCTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATG 0 + 2793788 2793840 255,0,0
-chrY 2793797 2793849 CTTTTGAGACCTTTTCAGTGAAGGAGCACCTCTGAAATCATGCAGTATCCT 0 + 2793797 2793849 255,0,0
-chrY 2793868 2793920 CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT 0 + 2793868 2793920 255,0,0
-chrY 2793868 2793920 CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT 0 + 2793868 2793920 255,0,0
-chrY 2793868 2793920 CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT 0 + 2793868 2793920 255,0,0
-chrY 2793868 2793920 CAAGACTTAAGGAAAGGGCAACGGACATAATTGAAAAGGCTTTTTATTTTT 0 + 2793868 2793920 255,0,0
-chrY 2793894 2793946 ATAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGG 0 - 2793894 2793946 0,0,255
-chrY 2793895 2793947 TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA 0 - 2793895 2793947 0,0,255
-chrY 2793895 2793947 TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA 0 - 2793895 2793947 0,0,255
-chrY 2793895 2793947 TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA 0 - 2793895 2793947 0,0,255
-chrY 2793895 2793947 TAATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGA 0 - 2793895 2793947 0,0,255
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2793897 2793949 ATTGAAAAGGCTTTTTATTTTTATTTATTTATTTATTTTTTGAGACGGAAT 0 + 2793897 2793949 255,0,0
-chrY 2794051 2794103 CTGGGACTAAGGCGCCCGCCACCAGACCTGGCTAATTTCTTTTTGTATTTT 0 + 2794051 2794103 255,0,0
-chrY 2794051 2794103 CTGGGACTAAGGCGCCCGCCACCAGACCTGGCTAATTTCTTTTTGTATTTT 0 + 2794051 2794103 255,0,0
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATATCCTGACCTGGTGATCAACCAGCTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794124 2794176 TGTTAGCCAGGATGGTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGC 0 - 2794124 2794176 0,0,255
-chrY 2794138 2794190 GTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGCCTCCCAAAGTGCAG 0 - 2794138 2794190 0,0,255
-chrY 2794138 2794190 GTTTCGATCTCCTGACCTGGTGATCACCCAACTTGGCCTCCCAAAGTGCAG 0 - 2794138 2794190 0,0,255
-chrY 2794216 2794268 GGCCAACTGAAAAGCTTTTCATCAAGCTATTCAGCCCCGGGAGCAGCATCT 0 + 2794216 2794268 255,0,0
-chrY 2794216 2794268 GGCCAACTGAAAAGCTTTTCATCAAGCTATTCAGCCCCGGGAGCAGCATCT 0 + 2794216 2794268 255,0,0
-chrY 2794297 2794349 TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG 0 + 2794297 2794349 255,0,0
-chrY 2794297 2794349 TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG 0 + 2794297 2794349 255,0,0
-chrY 2794297 2794349 TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG 0 + 2794297 2794349 255,0,0
-chrY 2794297 2794349 TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG 0 + 2794297 2794349 255,0,0
-chrY 2794297 2794349 TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG 0 + 2794297 2794349 255,0,0
-chrY 2794297 2794349 TTTGAGAGAAGTGGTACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTG 0 + 2794297 2794349 255,0,0
-chrY 2794312 2794364 ACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTGCCACTCAGAAGCTCT 0 - 2794312 2794364 0,0,255
-chrY 2794312 2794364 ACAGAGGCGAAGCCTGCTGTTGTTTTTTTGGCTGTGCCACTCAGAAGCTCT 0 - 2794312 2794364 0,0,255
-chrY 2794400 2794452 AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG 0 - 2794400 2794452 0,0,255
-chrY 2794400 2794452 AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG 0 - 2794400 2794452 0,0,255
-chrY 2794400 2794452 AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG 0 - 2794400 2794452 0,0,255
-chrY 2794400 2794452 AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG 0 - 2794400 2794452 0,0,255
-chrY 2794400 2794452 AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG 0 - 2794400 2794452 0,0,255
-chrY 2794400 2794452 AAACCTCAGTTTATACCTTTGAAAGCAGGGGATCAGGGAAGTGAGTAAATG 0 - 2794400 2794452 0,0,255
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTAAGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794517 2794569 CTGAAGTTAGTGGCCTTGCCTTTAAAGATGCTTATGAAAAACTTGTTGGCT 0 + 2794517 2794569 255,0,0
-chrY 2794573 2794625 CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA 0 + 2794573 2794625 255,0,0
-chrY 2794573 2794625 CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA 0 + 2794573 2794625 255,0,0
-chrY 2794573 2794625 CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA 0 + 2794573 2794625 255,0,0
-chrY 2794573 2794625 CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA 0 + 2794573 2794625 255,0,0
-chrY 2794573 2794625 CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA 0 + 2794573 2794625 255,0,0
-chrY 2794573 2794625 CTTCACATAAAATAGAAGCAGGAAGACCTTTATTTAGCAGCTCAGCAGTGA 0 + 2794573 2794625 255,0,0
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794627 2794679 GTGGGAGGGACTGTGAGAGGCAGATAACCTCTCAGGAGACATGTATAAGGA 0 - 2794627 2794679 0,0,255
-chrY 2794667 2794719 ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG 0 - 2794667 2794719 0,0,255
-chrY 2794667 2794719 ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG 0 - 2794667 2794719 0,0,255
-chrY 2794667 2794719 ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTGTGTTGGGTGGTGGTCTG 0 - 2794667 2794719 0,0,255
-chrY 2794667 2794719 ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG 0 - 2794667 2794719 0,0,255
-chrY 2794667 2794719 ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG 0 - 2794667 2794719 0,0,255
-chrY 2794667 2794719 ATGTATAAGGAAGTGTTTATTTTGTTTTAGATTTTGTTGGGTGGTGGTCTG 0 - 2794667 2794719 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794704 2794756 TGGGTGGTGGTCTGTTAGCTGGCTATTAATGTGAAGGAAGGTATGAGGCAT 0 - 2794704 2794756 0,0,255
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794727 2794779 TATTAATGTGAAGGAAGGTATGAGGCATGTGTGTTTTGGTGGGATGTTGTT 0 + 2794727 2794779 255,0,0
-chrY 2794759 2794811 GTTTTGGTGGGATGTTGTTTTTCTCTCCTCCCTTTCTTTCTGTACTTACTT 0 + 2794759 2794811 255,0,0
-chrY 2794759 2794811 GTTTTGGTGGGATGTTGTTTTTCTCTCCTCCCTTTCTTTCTGTACTTACTT 0 + 2794759 2794811 255,0,0
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794845 2794897 GATTTCCCTGCCCAGGGGAAAGGGCATTCGACTTACTGTCTCTGAAGAGAG 0 - 2794845 2794897 0,0,255
-chrY 2794852 2794904 TTGCCCAGGGGAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAG 0 - 2794852 2794904 0,0,255
-chrY 2794858 2794910 AGGGGAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTA 0 - 2794858 2794910 0,0,255
-chrY 2794862 2794914 GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA 0 - 2794862 2794914 0,0,255
-chrY 2794862 2794914 GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA 0 - 2794862 2794914 0,0,255
-chrY 2794862 2794914 GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA 0 - 2794862 2794914 0,0,255
-chrY 2794862 2794914 GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA 0 - 2794862 2794914 0,0,255
-chrY 2794862 2794914 GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA 0 - 2794862 2794914 0,0,255
-chrY 2794862 2794914 GAAAGGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCA 0 - 2794862 2794914 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794866 2794918 GGGCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAA 0 - 2794866 2794918 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794868 2794920 GCATTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAAC 0 - 2794868 2794920 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794871 2794923 TTCGACTTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGA 0 - 2794871 2794923 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794877 2794929 TTACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTG 0 - 2794877 2794929 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794878 2794930 TACTGTTGCTGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGG 0 - 2794878 2794930 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 GGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794887 2794939 TGAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGC 0 - 2794887 2794939 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAAAGGTTGGCCACCAAACAAAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794888 2794940 GAAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCA 0 - 2794888 2794940 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794889 2794941 AAGAGAGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAG 0 - 2794889 2794941 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCA 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794894 2794946 AGAGATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCC 0 - 2794894 2794946 0,0,255
-chrY 2794897 2794949 GATAAGAGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCG 0 - 2794897 2794949 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794903 2794955 AGGCTGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTT 0 - 2794903 2794955 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794907 2794959 TGGCCACCAAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTT 0 - 2794907 2794959 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGAAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794915 2794967 AAACAGAGCAGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCA 0 - 2794915 2794967 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATGGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794924 2794976 AGTGGCTAAATTGCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAAC 0 - 2794924 2794976 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTCTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GNAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCG 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2794936 2794988 GCAGTAGCAGCATATCTTTTTTTCTTTGCACAAATAAACAGTGAATTCTCA 0 - 2794936 2794988 0,0,255
-chrY 2857835 2857887 TTCAACGTGAAATTCTAAGACAAAACTCATAGGCTGGCCAGCATGTGAGAA 0 + 2857835 2857887 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTCGCTCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863491 2863543 CCCGCGTGCCCCCGCGGCCGCGGGGCCTAGTGCGCGCGCAGTAACCTGTTT 0 + 2863491 2863543 255,0,0
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TGTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCGCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCGGGTCGGCGTCCCGGAGGGCGCCCTCCCGCGCTAGGCCGGAC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTTGTGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863539 2863591 TTGGGGGCCTGGTCGGCGTCCCGTAGGGCGCCCTCCCGCGCTAGGCCGGCC 0 - 2863539 2863591 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CGGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2863606 2863658 CCGAACAGGCCCCGAGGAGGCCGCAGTTAGGCCTAGTGATTATCCAGTTGC 0 - 2863606 2863658 0,0,255
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAC 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865129 2865181 CACACCTCAGTTTATGCTGAGCTCTGGCTGCAGCTGTTACAAAAGTTTAAA 0 + 2865129 2865181 255,0,0
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865241 2865293 CAAGAAGGTAGCTGTTTTTTGGCCAGGTGCGGTGACTCACGCCTGTAATCC 0 - 2865241 2865293 0,0,255
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865316 2865368 GCGGATCACCCGAGGTCAGGAGTTCGAATCCAGCTCGAGACCAGCTGGAGA 0 + 2865316 2865368 255,0,0
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCGGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2865423 2865475 CGGCGCGCGCCTGTAATCCCAGGTACTTTGAAGGCGGAGGTTGCAGTGAGC 0 - 2865423 2865475 0,0,255
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866382 2866434 CTTGCTAAGGGGTCAGCATAAACTGTAGAGGTAGTTGCCTTATATCTTGAC 0 + 2866382 2866434 255,0,0
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2866472 2866524 CAGTACAGCAGCTGTAGATGTTCCAGTACATCAGCAGTGGATGTGCAAAAA 0 - 2866472 2866524 0,0,255
-chrY 2871012 2871064 CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA 0 + 2871012 2871064 255,0,0
-chrY 2871012 2871064 CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA 0 + 2871012 2871064 255,0,0
-chrY 2871012 2871064 CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA 0 + 2871012 2871064 255,0,0
-chrY 2871012 2871064 CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA 0 + 2871012 2871064 255,0,0
-chrY 2871012 2871064 CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA 0 + 2871012 2871064 255,0,0
-chrY 2871012 2871064 CAAAAAGTTATACTTACCAGTTGTTGTAATTTATAATAGAAATCCTATTGA 0 + 2871012 2871064 255,0,0
-chrY 2871111 2871163 GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT 0 - 2871111 2871163 0,0,255
-chrY 2871111 2871163 GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT 0 - 2871111 2871163 0,0,255
-chrY 2871111 2871163 GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT 0 - 2871111 2871163 0,0,255
-chrY 2871111 2871163 GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT 0 - 2871111 2871163 0,0,255
-chrY 2871111 2871163 GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT 0 - 2871111 2871163 0,0,255
-chrY 2871111 2871163 GAGATGTATAAATCTTCATATTTTAGCACTTCTAAAATCTGAATGTATTTT 0 - 2871111 2871163 0,0,255
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTGAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876103 2876155 GTGAAACAACTGAAACTAGAGAATAAGGAATTAAAAGATTAAAAAATAAGT 0 + 2876103 2876155 255,0,0
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2876229 2876281 CTTGGTGGTTTGACACCATAAATGAAAGATCTTCTTTTGCCATAGTGTGTC 0 - 2876229 2876281 0,0,255
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGNNACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880278 2880330 TTTTATTAGAACTAATGAAATTGCTGTTTTTAGGAAAATTGGAAGGTCACT 0 + 2880278 2880330 255,0,0
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 ATAAGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2880395 2880447 TTATGCAGAGAAGATTAGTTTGCATTTATAATTTTATAATTACATTTTTTT 0 - 2880395 2880447 0,0,255
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2881985 2882037 ATGAATTTGAATTGCAGCCACAAGAGCCAAACTCATTTTTTGATGGAATAG 0 + 2881985 2882037 255,0,0
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2889166 2889218 CAGTTTTTGTTTCTAATATTGTGGATTCTGACATAACTGTGCATAACTTTG 0 - 2889166 2889218 0,0,255
-chrY 2890047 2890099 TTTCCCCTTTTTTTCTACCTTATTGTCCGTTTTCTCTTTAAGTAATGATTT 0 + 2890047 2890099 255,0,0
-chrY 2890134 2890186 AAATCTAGTGAATTCTCTGAAATACAGTGGTCTCACCAAGACCATCAACCG 0 - 2890134 2890186 0,0,255
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898706 2898758 CAGACATCCTTCTCATTTCCTCACCTCTCCCTTTCGTAGCTGATTGGCTTG 0 + 2898706 2898758 255,0,0
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2898850 2898902 TAGGTTAATTTGTGAATTCTTTCTTGCCCCTGCCTTAAATTGTAATCTCAC 0 - 2898850 2898902 0,0,255
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2902594 2902646 TTGTATTCAGAAGTACTGAATGTTAGGTAATGCTCATAAAATATATTAGGA 0 + 2902594 2902646 255,0,0
-chrY 2904753 2904805 GAGAGGAGGATGCTGCTGTTGCAGCAGCAGCAGCTGCTGTGCATGAGCAGC 0 + 2904753 2904805 255,0,0
-chrY 2904753 2904805 GAGAGGAGGATGCTGCTGTTGCAGCAGCAGCAGCTGCTGTGCCTGAGCCGC 0 + 2904753 2904805 255,0,0
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907254 2907306 TCATATTTGTGTGGAGTGTGGTAAAGGTTTCCGACACCCGTCGGAACTGAG 0 - 2907254 2907306 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCCTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2907629 2907681 CAGGCCTTCAGAACTTAAGAAACATGTGGCTGTCCACAAAGGTAAAAAAAT 0 - 2907629 2907681 0,0,255
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2908968 2909020 TTTGAGGTGAATAATTAAAAAGAAAAGGACATTAGGAGAGTGAAAATCTTC 0 + 2908968 2909020 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCGAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909010 2909062 AAAATCTTCTCTTCAAATAATCTTTGATAGATAAAAATGGAAGGTAAGATG 0 + 2909010 2909062 255,0,0
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909109 2909161 TTTCTGGAAAGCTATTTCAGACATAGATTTCATAGTATTTTTCTGAGAATC 0 - 2909109 2909161 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTCGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909135 2909187 ATTTCATAGTATTTTTCTGAGAATCCTGTGAAGGAACGCTGTCTCTTTGCA 0 - 2909135 2909187 0,0,255
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909455 2909507 TATAAATTGAATTCATATAATTAAAAAGAATTTGGTTAATAAGAATTTGGA 0 + 2909455 2909507 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTTTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909485 2909537 TTTGGTTAATAAGAATTTGGAGAATGGAAAATACATTTCTAGGTTCCTTAA 0 + 2909485 2909537 255,0,0
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCNTCTNGCTTTAGTATGGTAGTGCTTCATNCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909596 2909648 ACATTACAGCTACCTTCTAGCTTTAGTATGGTAGTGCTTCATTCAACTTTT 0 - 2909596 2909648 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGCTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 ATAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909618 2909670 TTAGTATGGTAGTGCTTCATTCAACTTTTGCTGTCAGGTTTTTATTTTCAC 0 - 2909618 2909670 0,0,255
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909655 2909707 GTTTTTATTTTCACCTTTTTCTGTGCCACCAATTCAAAAGTTATAGGATTA 0 + 2909655 2909707 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909735 2909787 CAGCCTCTGAAATGTTAGATTAATTTGATCTAGTTCTAAAGTGCTTTAGTC 0 + 2909735 2909787 255,0,0
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909760 2909812 TGATCTAGTTCTAAAGTGCTTTAGTCATATATGAATTTAAACCTAGTACCA 0 - 2909760 2909812 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2909842 2909894 GTTAGGCCTTCTTAGCCTTTATACATGTCCCTACCTGATTTTTACTGTCCG 0 - 2909842 2909894 0,0,255
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGNN 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATACTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910075 2910127 AAAAAACGTGACACTTTACATATTTCATATTTTTCATATAGTCTGGAGGTA 0 + 2910075 2910127 255,0,0
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910182 2910234 ATTTGGTCAAGTAAATATAGAACATTTGTATAAAGAAAGAAATGAAATTGT 0 - 2910182 2910234 0,0,255
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGGTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTACAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910224 2910276 TGAAATTGTGCTTAATGTTATATACTGTTATTATTTGCAGGCTGGTTTTAA 0 + 2910224 2910276 255,0,0
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910330 2910382 AGAGGTACAAAATCTTACAAGGACATAAATTATTATTTGGTTGAAAAATAG 0 - 2910330 2910382 0,0,255
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTCTGAAGCATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 2910400 2910452 CCCTTCCTCTGTACAAATTGTAAAATACTTAAAATAACTATGAAGAATTCA 0 + 2910400 2910452 255,0,0
-chrY 3547861 3547913 CACACCTGGCTAATTTTTTATATTTTTAGTGGAGACAGGGCTCCACCGTGC 0 - 3547861 3547913 0,0,255
-chrY 3547861 3547913 CACACCTGGCTAATTTTTTATATTTTTAGTGGAGACAGGGCTCCACCGTGC 0 - 3547861 3547913 0,0,255
diff --git a/testdata/tribble/large.txt b/testdata/tribble/large.txt
deleted file mode 100644
index 5f4e1d4..0000000
--- a/testdata/tribble/large.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-##fileformat=VCFv4.1
-##ApplyRecalibration="analysis_type=ApplyRecalibration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES down [...]
-##CombineVariants="analysis_type=CombineVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES downsampli [...]
-##FILTER=<ID=Indel_FS,Description="FS>200.0">
-##FILTER=<ID=Indel_InbreedingCoeff,Description="InbreedingCoeff<-0.8">
-##FILTER=<ID=Indel_QD,Description="QD<2.0">
-##FILTER=<ID=Indel_ReadPosRankSum,Description="ReadPosRankSum<-20.0">
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=VQSRTrancheSNP98.50to98.60,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -0.9687 <= x < -0.8298">
-##FILTER=<ID=VQSRTrancheSNP98.60to98.80,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -1.2821 <= x < -0.9687">
-##FILTER=<ID=VQSRTrancheSNP98.80to98.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -1.5011 <= x < -1.2821">
-##FILTER=<ID=VQSRTrancheSNP98.90to99.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -1.7494 <= x < -1.5011">
-##FILTER=<ID=VQSRTrancheSNP99.00to99.30,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -2.9782 <= x < -1.7494">
-##FILTER=<ID=VQSRTrancheSNP99.30to99.50,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -4.7694 <= x < -2.9782">
-##FILTER=<ID=VQSRTrancheSNP99.50to99.90,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -15.7985 <= x < -4.7694">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00+,Description="Truth sensitivity tranche level for SNP model at VQS Lod < -4789.109">
-##FILTER=<ID=VQSRTrancheSNP99.90to100.00,Description="Truth sensitivity tranche level for SNP model at VQS Lod: -4789.109 <= x < -15.7985">
-##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=Integer,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=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##INFO=<ID=FS,Number=1,Type=Float,Description="Phred-scaled p-value using Fisher's exact test to detect strand bias">
-##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=MLEAC,Number=A,Type=Integer,Description="Maximum likelihood expectation (MLE) for the allele counts (not necessarily the same as the AC), for each ALT allele, in the same order as listed">
-##INFO=<ID=MLEAF,Number=A,Type=Float,Description="Maximum likelihood expectation (MLE) for the allele frequency (not necessarily the same as the AF), for each ALT allele, in the same order as listed">
-##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=RPA,Number=.,Type=Integer,Description="Number of times tandem repeat unit is repeated, for each allele (including reference)">
-##INFO=<ID=RU,Number=1,Type=String,Description="Tandem repeat unit (bases)">
-##INFO=<ID=ReadPosRankSum,Number=1,Type=Float,Description="Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias">
-##INFO=<ID=SNPEFF_AMINO_ACID_CHANGE,Number=1,Type=String,Description="Old/New amino acid for the highest-impact effect resulting from the current variant (in HGVS style)">
-##INFO=<ID=SNPEFF_CODON_CHANGE,Number=1,Type=String,Description="Old/New codon for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_EFFECT,Number=1,Type=String,Description="The highest-impact effect resulting from the current variant (or one of the highest-impact effects, if there is a tie)">
-##INFO=<ID=SNPEFF_EXON_ID,Number=1,Type=String,Description="Exon ID for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_FUNCTIONAL_CLASS,Number=1,Type=String,Description="Functional class of the highest-impact effect resulting from the current variant: [NONE, SILENT, MISSENSE, NONSENSE]">
-##INFO=<ID=SNPEFF_GENE_BIOTYPE,Number=1,Type=String,Description="Gene biotype for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_GENE_NAME,Number=1,Type=String,Description="Gene name for the highest-impact effect resulting from the current variant">
-##INFO=<ID=SNPEFF_IMPACT,Number=1,Type=String,Description="Impact of the highest-impact effect resulting from the current variant [MODIFIER, LOW, MODERATE, HIGH]">
-##INFO=<ID=SNPEFF_TRANSCRIPT_ID,Number=1,Type=String,Description="Transcript ID for the highest-impact effect resulting from the current variant">
-##INFO=<ID=STR,Number=0,Type=Flag,Description="Variant is a short tandem repeat">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##OriginalSnpEffCmd="SnpEff eff -v -onlyCoding true -c /seq/references/Homo_sapiens_assembly19/v1/snpEff/Homo_sapiens_assembly19.snpEff.config -i vcf -o vcf GRCh37.64 /seq/dax/t2d_genes/v1/t2d_genes.unannotated.vcf "
-##OriginalSnpEffVersion="2.0.5 (build 2011-12-24), by Pablo Cingolani"
-##SelectVariants="analysis_type=SelectVariants input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES downsampling [...]
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/seq/dax/t2d_genes/v1/t2d_genes.bam.list] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/scatter/temp_0001_of_2500/scattered.intervals] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomizati [...]
-##VariantAnnotator="analysis_type=VariantAnnotator input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/references/HybSelOligos/whole_exome_agilent_1.1_refseq_plus_3_boosters/whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=50 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assemb [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null phone_home=STANDARD gatk_key=null tag=NA read_filter=[] intervals=[/seq/dax/t2d_genes/v1/t2d_genes.padded.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta nonDeterministicRandomSeed=false disableRandomization=false maxRuntime=-1 maxRuntimeUnits=MINUTES downsa [...]
-##contig=<ID=1,length=249250621>
-##contig=<ID=2,length=243199373>
-##contig=<ID=3,length=198022430>
-##contig=<ID=4,length=191154276>
-##contig=<ID=5,length=180915260>
-##contig=<ID=6,length=171115067>
-##contig=<ID=7,length=159138663>
-##contig=<ID=8,length=146364022>
-##contig=<ID=9,length=141213431>
-##contig=<ID=10,length=135534747>
-##contig=<ID=11,length=135006516>
-##contig=<ID=12,length=133851895>
-##contig=<ID=13,length=115169878>
-##contig=<ID=14,length=107349540>
-##contig=<ID=15,length=102531392>
-##contig=<ID=16,length=90354753>
-##contig=<ID=17,length=81195210>
-##contig=<ID=18,length=78077248>
-##contig=<ID=19,length=59128983>
-##contig=<ID=20,length=63025520>
-##contig=<ID=21,length=48129895>
-##contig=<ID=22,length=51304566>
-##contig=<ID=X,length=155270560>
-##contig=<ID=Y,length=59373566>
-##contig=<ID=MT,length=16569>
-##contig=<ID=GL000207.1,length=4262>
-##contig=<ID=GL000226.1,length=15008>
-##contig=<ID=GL000229.1,length=19913>
-##contig=<ID=GL000231.1,length=27386>
-##contig=<ID=GL000210.1,length=27682>
-##contig=<ID=GL000239.1,length=33824>
-##contig=<ID=GL000235.1,length=34474>
-##contig=<ID=GL000201.1,length=36148>
-##contig=<ID=GL000247.1,length=36422>
-##contig=<ID=GL000245.1,length=36651>
-##contig=<ID=GL000197.1,length=37175>
-##contig=<ID=GL000203.1,length=37498>
-##contig=<ID=GL000246.1,length=38154>
-##contig=<ID=GL000249.1,length=38502>
-##contig=<ID=GL000196.1,length=38914>
-##contig=<ID=GL000248.1,length=39786>
-##contig=<ID=GL000244.1,length=39929>
-##contig=<ID=GL000238.1,length=39939>
-##contig=<ID=GL000202.1,length=40103>
-##contig=<ID=GL000234.1,length=40531>
-##contig=<ID=GL000232.1,length=40652>
-##contig=<ID=GL000206.1,length=41001>
-##contig=<ID=GL000240.1,length=41933>
-##contig=<ID=GL000236.1,length=41934>
-##contig=<ID=GL000241.1,length=42152>
-##contig=<ID=GL000243.1,length=43341>
-##contig=<ID=GL000242.1,length=43523>
-##contig=<ID=GL000230.1,length=43691>
-##contig=<ID=GL000237.1,length=45867>
-##contig=<ID=GL000233.1,length=45941>
-##contig=<ID=GL000204.1,length=81310>
-##contig=<ID=GL000198.1,length=90085>
-##contig=<ID=GL000208.1,length=92689>
-##contig=<ID=GL000191.1,length=106433>
-##contig=<ID=GL000227.1,length=128374>
-##contig=<ID=GL000228.1,length=129120>
-##contig=<ID=GL000214.1,length=137718>
-##contig=<ID=GL000221.1,length=155397>
-##contig=<ID=GL000209.1,length=159169>
-##contig=<ID=GL000218.1,length=161147>
-##contig=<ID=GL000220.1,length=161802>
-##contig=<ID=GL000213.1,length=164239>
-##contig=<ID=GL000211.1,length=166566>
-##contig=<ID=GL000199.1,length=169874>
-##contig=<ID=GL000217.1,length=172149>
-##contig=<ID=GL000216.1,length=172294>
-##contig=<ID=GL000215.1,length=172545>
-##contig=<ID=GL000205.1,length=174588>
-##contig=<ID=GL000219.1,length=179198>
-##contig=<ID=GL000224.1,length=179693>
-##contig=<ID=GL000223.1,length=180455>
-##contig=<ID=GL000195.1,length=182896>
-##contig=<ID=GL000212.1,length=186858>
-##contig=<ID=GL000222.1,length=186861>
-##contig=<ID=GL000200.1,length=187035>
-##contig=<ID=GL000193.1,length=189789>
-##contig=<ID=GL000194.1,length=191469>
-##contig=<ID=GL000225.1,length=211173>
-##contig=<ID=GL000192.1,length=547496>
-##contig=<ID=NC_007605,length=171823>
-##reference=file:///seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta
-##source=SelectVariants
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT 100 1000-10D 1001 1001-10D 10018 1002-10D 10029 1003-10D 10032 1004-10D 10046 10049 1005 1005-10D 10050 10059 1006-10D 10069 1007-10BD 1008-10D 10088 1009-10D 10090 1010-10D 10105 10109 1011-10D 10110 10114 10118 1012-10D 1013-10D 1014-10D 10148 1015-10D 1016-10D 1018-10D 1019-10D 10191 10194 10196 1020-10D 10204.0 1021-10D 10210 10211.0 10221 10268 1028 10282 10304 10326 10330 10339 10356 10371 10376 10388.0 10397 10402 10434 10447 10451 104 [...]
-1 69270 . A G 67802.61 VQSRTrancheSNP99.50to99.90 AC=4763;AF=0.736;AN=6468;BaseQRankSum=-29.966;DP=1452155;Dels=0.00;FS=0.000;HaplotypeScore=0.0519;InbreedingCoeff=0.3564;MLEAC=3470;MLEAF=0.536;MQ=2.72;MQ0=522186;MQRankSum=17.776;QD=0.32;ReadPosRankSum=-9.274;SNPEFF_AMINO_ACID_CHANGE=S108;SNPEFF_CODON_CHANGE=tcA/tcG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69037_69829;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW;S [...]
-1 69335 . G A 97.21 VQSRTrancheSNP99.90to100.00 AC=1;AF=6.701e-05;AN=14924;BaseQRankSum=3.221;DP=1123713;Dels=0.00;FS=0.000;HaplotypeScore=0.0941;InbreedingCoeff=-0.0589;MLEAC=1;MLEAF=6.701e-05;MQ=4.99;MQ0=459016;MQRankSum=0.427;QD=1.30;ReadPosRankSum=-1.122;SNPEFF_AMINO_ACID_CHANGE=R130H;SNPEFF_CODON_CHANGE=cGc/cAc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69037_69829;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT [...]
-1 69366 . T G 871.42 VQSRTrancheSNP99.50to99.90 AC=2;AF=1.239e-04;AN=16146;BaseQRankSum=-1.719;DP=990333;Dels=0.00;FS=0.000;HaplotypeScore=0.0933;InbreedingCoeff=-0.0247;MLEAC=2;MLEAF=1.239e-04;MQ=5.96;MQ0=407294;MQRankSum=0.001;QD=21.25;ReadPosRankSum=0.517;SNPEFF_AMINO_ACID_CHANGE=V140;SNPEFF_CODON_CHANGE=gtT/gtG;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69037_69829;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW;SN [...]
-1 69409 . A G 4406.28 VQSRTrancheSNP99.50to99.90 AC=8;AF=4.147e-04;AN=19290;BaseQRankSum=13.621;DP=1362430;Dels=0.00;FS=26.031;HaplotypeScore=0.1448;InbreedingCoeff=0.0053;MLEAC=8;MLEAF=4.147e-04;MQ=11.68;MQ0=219922;MQRankSum=5.323;QD=9.71;ReadPosRankSum=-9.497;SNPEFF_AMINO_ACID_CHANGE=I107V;SNPEFF_CODON_CHANGE=Atc/Gtc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMP [...]
-1 69428 rs140739101 T G 419908.06 VQSRTrancheSNP99.50to99.90 AC=453;AF=0.022;AN=20242;BaseQRankSum=49.526;DB;DP=1394601;Dels=0.00;FS=975.380;HaplotypeScore=0.1195;InbreedingCoeff=0.2461;MLEAC=334;MLEAF=0.017;MQ=16.42;MQ0=138676;MQRankSum=-2.177;QD=17.57;ReadPosRankSum=-10.322;SNPEFF_AMINO_ACID_CHANGE=F113C;SNPEFF_CODON_CHANGE=tTt/tGt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=O [...]
-1 69438 . T C 3107.59 VQSRTrancheSNP99.50to99.90 AC=2;AF=9.729e-05;AN=20558;BaseQRankSum=-2.899;DP=1379680;Dels=0.00;FS=8.925;HaplotypeScore=0.1499;InbreedingCoeff=0.0001;MLEAC=2;MLEAF=9.729e-05;MQ=22.72;MQ0=95489;MQRankSum=0.850;QD=24.66;ReadPosRankSum=-0.870;SNPEFF_AMINO_ACID_CHANGE=Y116;SNPEFF_CODON_CHANGE=taT/taC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW; [...]
-1 69453 rs142004627 G A 923.30 VQSRTrancheSNP99.00to99.30 AC=141;AF=7.059e-03;AN=19974;BaseQRankSum=-19.711;DB;DP=1292464;Dels=0.00;FS=234.751;HaplotypeScore=0.2262;InbreedingCoeff=0.1247;MLEAC=44;MLEAF=2.203e-03;MQ=31.12;MQ0=15075;MQRankSum=-11.276;QD=1.14;ReadPosRankSum=-4.900;SNPEFF_AMINO_ACID_CHANGE=K121;SNPEFF_CODON_CHANGE=aaG/aaA;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5 [...]
-1 69478 . T C 625.46 VQSRTrancheSNP99.50to99.90 AC=2;AF=9.713e-05;AN=20590;BaseQRankSum=-5.701;DP=1224140;Dels=0.00;FS=9.248;HaplotypeScore=0.1621;InbreedingCoeff=-0.0073;MLEAC=1;MLEAF=4.857e-05;MQ=28.40;MQ0=31089;MQRankSum=-0.497;QD=7.19;ReadPosRankSum=-4.289;SNPEFF_AMINO_ACID_CHANGE=C130R;SNPEFF_CODON_CHANGE=Tgt/Cgt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPA [...]
-1 69489 . A C 1035.55 VQSRTrancheSNP99.50to99.90 AC=3;AF=1.469e-04;AN=20422;BaseQRankSum=4.705;DP=1117540;Dels=0.00;FS=2.442;HaplotypeScore=0.1773;InbreedingCoeff=-0.0003;MLEAC=2;MLEAF=9.793e-05;MQ=28.74;MQ0=29993;MQRankSum=-1.170;QD=12.78;ReadPosRankSum=-2.427;SNPEFF_AMINO_ACID_CHANGE=A133;SNPEFF_CODON_CHANGE=gcA/gcC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT=LOW [...]
-1 69496 rs150690004 G A 74883.53 VQSRTrancheSNP99.00to99.30 AC=33;AF=1.628e-03;AN=20272;BaseQRankSum=-5.450;DB;DP=993841;Dels=0.00;FS=22.218;HaplotypeScore=0.2924;InbreedingCoeff=0.0259;MLEAC=17;MLEAF=8.386e-04;MQ=29.16;MQ0=27895;MQRankSum=10.649;QD=70.12;ReadPosRankSum=0.884;SNPEFF_AMINO_ACID_CHANGE=G136S;SNPEFF_CODON_CHANGE=Ggc/Agc;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=O [...]
-1 69496 . GGCATTATGGCTGTCA G 555413.58 Indel_FS AC=2988;AF=0.148;AN=20226;BaseQRankSum=43.899;DP=993841;FS=Infinity;HaplotypeScore=20.7358;InbreedingCoeff=0.7977;MLEAC=3420;MLEAF=0.169;MQ=29.16;MQ0=0;MQRankSum=-13.694;QD=3.63;ReadPosRankSum=37.478;SNPEFF_AMINO_ACID_CHANGE=GIMAVT136A;SNPEFF_CODON_CHANGE=ggcattatggctgtcaca/gca;SNPEFF_EFFECT=CODON_CHANGE_PLUS_CODON_DELETION;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4 [...]
-1 69502 . A G 509.73 VQSRTrancheSNP99.50to99.90 AC=2;AF=9.975e-05;AN=20050;BaseQRankSum=6.603;DP=919807;Dels=0.00;FS=1.954;HaplotypeScore=0.3679;InbreedingCoeff=-0.0070;MLEAC=1;MLEAF=4.988e-05;MQ=29.88;MQ0=25457;MQRankSum=-2.320;QD=6.22;ReadPosRankSum=-2.827;SNPEFF_AMINO_ACID_CHANGE=M138V;SNPEFF_CODON_CHANGE=Atg/Gtg;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT [...]
-1 69511 rs75062661 A G 31383854.34 VQSRTrancheSNP99.50to99.90 AC=16694;AF=0.858;AN=19460;BaseQRankSum=60.147;DB;DP=773705;Dels=0.00;FS=138.417;HaplotypeScore=0.2818;InbreedingCoeff=0.5035;MLEAC=16887;MLEAF=0.868;MQ=31.39;MQ0=16811;MQRankSum=-164.893;QD=52.42;ReadPosRankSum=-36.782;SNPEFF_AMINO_ACID_CHANGE=T141A;SNPEFF_CODON_CHANGE=Aca/Gca;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_N [...]
-1 69521 . T C 722.77 VQSRTrancheSNP99.50to99.90 AC=2;AF=1.011e-04;AN=19776;BaseQRankSum=2.538;DP=915452;Dels=0.00;FS=1.110;HaplotypeScore=0.2063;InbreedingCoeff=-0.0088;MLEAC=2;MLEAF=1.011e-04;MQ=34.73;MQ0=15188;MQRankSum=-1.312;QD=4.82;ReadPosRankSum=-4.246;SNPEFF_AMINO_ACID_CHANGE=I144T;SNPEFF_CODON_CHANGE=aTt/aCt;SNPEFF_EFFECT=NON_SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=MISSENSE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5;SNPEFF_IMPACT [...]
-1 69534 rs190717287 T C 10791.59 VQSRTrancheSNP99.50to99.90 AC=14;AF=7.034e-04;AN=19902;BaseQRankSum=15.572;DB;DP=1059436;Dels=0.00;FS=1.036;HaplotypeScore=0.1863;InbreedingCoeff=-0.0037;MLEAC=14;MLEAF=7.034e-04;MQ=35.59;MQ0=12762;MQRankSum=-2.121;QD=11.54;ReadPosRankSum=-6.516;SNPEFF_AMINO_ACID_CHANGE=H148;SNPEFF_CODON_CHANGE=caT/caC;SNPEFF_EFFECT=SYNONYMOUS_CODING;SNPEFF_EXON_ID=exon_1_69091_70008;SNPEFF_FUNCTIONAL_CLASS=SILENT;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=OR4F5; [...]
diff --git a/testdata/tribble/seekTest.txt b/testdata/tribble/seekTest.txt
deleted file mode 100644
index 194e3be..0000000
--- a/testdata/tribble/seekTest.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-aaaaaaaaa
-bbbbbbbbb
-ccccccccc
-ddddddddd
-eeeeeeeee
diff --git a/testdata/tribble/sites.bed b/testdata/tribble/sites.bed
deleted file mode 100644
index 3750b3f..0000000
--- a/testdata/tribble/sites.bed
+++ /dev/null
@@ -1,1000 +0,0 @@
-chr1 1245 1425 chr1.1 348 0.0432341
-chr1 1578 1818 chr1.2 430 0.314475
-chr1 2018 2318 chr1.3 345 0.038427
-chr1 10665 11465 chr1.4 478 0.589475
-chr1 18100 19780 chr1.5 558 1.22721
-chr1 81011 81491 chr1.6 460 0.474365
-chr1 227342 227822 chr1.7 415 0.245863
-chr1 409247 409627 chr1.8 349 0.045556
-chr1 481720 482000 chr1.9 415 0.245863
-chr1 501569 502049 chr1.10 415 0.245863
-chr1 580608 580888 chr1.11 465 0.502745
-chr1 580906 581246 chr1.12 418 0.256501
-chr1 604472 604712 chr1.13 446 0.395281
-chr1 604748 607828 chr1.14 564 1.28828
-chr1 607863 610103 chr1.15 558 1.2282
-chr1 613316 613496 chr1.16 380 0.118186
-chr1 613539 613919 chr1.17 415 0.245863
-chr1 659767 660147 chr1.18 349 0.045555
-chr1 753372 753552 chr1.19 430 0.312979
-chr1 753620 754600 chr1.20 773 4.13035
-chr1 763942 764200 chr1.21 442 0.372517
-chr1 766594 766939 chr1.22 546 1.11774
-chr1 792467 793007 chr1.23 433 0.330713
-chr1 801766 802806 chr1.24 580 1.44576
-chr1 802807 803681 chr1.25 575 1.39455
-chr1 815798 816776 chr1.26 447 0.398158
-chr1 817006 818146 chr1.27 520 0.897849
-chr1 819524 820204 chr1.28 488 0.65421
-chr1 832980 834171 chr1.29 520 0.897575
-chr1 834220 834309 chr1.30 346 0.0402192
-chr1 845033 845448 chr1.31 497 0.71717
-chr1 847812 848512 chr1.32 478 0.589475
-chr1 864905 865029 chr1.33 461 0.481443
-chr1 874965 875487 chr1.34 423 0.278914
-chr1 879344 880327 chr1.35 699 2.94227
-chr1 880399 880708 chr1.36 495 0.706021
-chr1 880819 881023 chr1.37 383 0.127674
-chr1 881317 881911 chr1.38 418 0.256617
-chr1 883868 883904 chr1.39 312 0.002659
-chr1 896391 896556 chr1.40 385 0.135142
-chr1 898579 898621 chr1.41 355 0.0577104
-chr1 898899 899244 chr1.42 465 0.502855
-chr1 899766 899825 chr1.43 370 0.090538
-chr1 900065 900365 chr1.44 380 0.120379
-chr1 915757 916630 chr1.46 503 0.763638
-chr1 916730 917500 chr1.47 497 0.717085
-chr1 918108 918284 chr1.48 364 0.076574
-chr1 933354 933459 chr1.49 334 0.022302
-chr1 934187 936901 chr1.50 633 2.05262
-chr1 941632 942976 chr1.51 724 3.32186
-chr1 950199 950539 chr1.52 379 0.116623
-chr1 950732 950911 chr1.53 397 0.173826
-chr1 951480 952193 chr1.54 540 1.06184
-chr1 959185 959967 chr1.55 547 1.1301
-chr1 974506 974514 chr1.56 464 0.498756
-chr1 974607 975915 chr1.57 511 0.820906
-chr1 976014 976607 chr1.58 520 0.896575
-chr1 977283 977586 chr1.59 476 0.570696
-chr1 977654 977656 chr1.60 321 0.00827205
-chr1 980210 980408 chr1.61 362 0.070928
-chr1 988439 989479 chr1.62 683 2.70895
-chr1 994719 995751 chr1.63 695 2.88776
-chr1 995982 996106 chr1.64 343 0.0347552
-chr1 1007846 1009215 chr1.65 543 1.09033
-chr1 1015954 1016662 chr1.66 844 5.46574
-chr1 1034335 1034386 chr1.67 352 0.0505361
-chr1 1034434 1035191 chr1.68 639 2.12808
-chr1 1035857 1035864 chr1.69 316 0.005078
-chr1 1038865 1039724 chr1.70 632 2.03877
-chr1 1043743 1045133 chr1.71 703 3.00446
-chr1 1045399 1045565 chr1.72 356 0.05951
-chr1 1051338 1055456 chr1.73 562 1.27378
-chr1 1066992 1067071 chr1.74 396 0.170616
-chr1 1074179 1074787 chr1.75 439 0.358819
-chr1 1074991 1075171 chr1.76 399 0.180898
-chr1 1090923 1092369 chr1.77 788 4.3897
-chr1 1092391 1092445 chr1.78 488 0.656287
-chr1 1097165 1097971 chr1.79 708 3.07697
-chr1 1109347 1109587 chr1.80 354 0.054381
-chr1 1111706 1111715 chr1.81 355 0.056866
-chr1 1112293 1113013 chr1.82 609 1.76339
-chr1 1114276 1114340 chr1.83 312 0.00306007
-chr1 1114376 1115977 chr1.84 557 1.22389
-chr1 1116001 1116077 chr1.85 356 0.0594875
-chr1 1116556 1116778 chr1.86 485 0.636473
-chr1 1119001 1120315 chr1.87 692 2.84254
-chr1 1132538 1133672 chr1.88 660 2.39289
-chr1 1147188 1147624 chr1.89 447 0.400542
-chr1 1148692 1149412 chr1.90 593 1.59091
-chr1 1150502 1150712 chr1.91 395 0.166746
-chr1 1175365 1175776 chr1.92 397 0.175746
-chr1 1175855 1175965 chr1.93 390 0.152057
-chr1 1175988 1176265 chr1.94 373 0.100502
-chr1 1176365 1177189 chr1.95 705 3.0325
-chr1 1179837 1179888 chr1.96 317 0.005669
-chr1 1181827 1181950 chr1.97 331 0.0186511
-chr1 1182204 1182342 chr1.98 372 0.096425
-chr1 1183309 1184620 chr1.99 596 1.62052
-chr1 1186006 1186106 chr1.100 387 0.141911
-chr1 1187635 1189712 chr1.101 466 0.512313
-chr1 1190211 1190243 chr1.102 341 0.0312
-chr1 1192080 1192764 chr1.103 514 0.847194
-chr1 1194721 1194953 chr1.104 413 0.23692
-chr1 1206466 1207907 chr1.105 964 8.1342
-chr1 1225896 1226676 chr1.106 677 2.62722
-chr1 1248823 1249818 chr1.107 679 2.65973
-chr1 1259437 1259474 chr1.108 373 0.099368
-chr1 1267142 1267455 chr1.109 467 0.518669
-chr1 1280573 1281286 chr1.110 546 1.12306
-chr1 1282929 1284571 chr1.111 782 4.2808
-chr1 1299611 1300483 chr1.113 508 0.80183
-chr1 1324330 1325361 chr1.114 655 2.33046
-chr1 1330452 1330468 chr1.115 334 0.0224878
-chr1 1330481 1331143 chr1.116 431 0.316867
-chr1 1346249 1347613 chr1.117 532 0.991835
-chr1 1347713 1347813 chr1.118 347 0.0411966
-chr1 1349983 1351025 chr1.119 545 1.10701
-chr1 1419517 1420926 chr1.120 629 1.99595
-chr1 1427488 1428398 chr1.121 525 0.935949
-chr1 1448100 1448474 chr1.122 470 0.536396
-chr1 1452780 1453180 chr1.123 364 0.076725
-chr1 1455704 1455804 chr1.124 345 0.03843
-chr1 1461588 1461788 chr1.125 402 0.193601
-chr1 1491957 1492840 chr1.126 539 1.05258
-chr1 1525496 1525636 chr1.127 366 0.081578
-chr1 1531949 1533247 chr1.128 799 4.59657
-chr1 1560514 1561514 chr1.129 619 1.87645
-chr1 1590384 1590764 chr1.130 410 0.223637
-chr1 1590893 1591133 chr1.131 421 0.273791
-chr1 1594138 1596142 chr1.132 778 4.21174
-chr1 1655537 1655677 chr1.133 377 0.109362
-chr1 1655705 1657274 chr1.134 561 1.26111
-chr1 1663663 1663999 chr1.135 364 0.076725
-chr1 1687411 1688491 chr1.136 608 1.75721
-chr1 1688694 1688834 chr1.137 354 0.054312
-chr1 1691755 1692664 chr1.138 526 0.947746
-chr1 1708812 1708952 chr1.139 377 0.109362
-chr1 1708980 1710540 chr1.140 557 1.22281
-chr1 1740616 1741256 chr1.141 419 0.264632
-chr1 1741318 1741356 chr1.142 319 0.00727334
-chr1 1741824 1743156 chr1.143 772 4.11305
-chr1 1743330 1744816 chr1.144 694 2.86169
-chr1 1746429 1746901 chr1.145 466 0.512036
-chr1 1747199 1747370 chr1.146 366 0.080847
-chr1 1807202 1807442 chr1.147 357 0.061208
-chr1 1808587 1808927 chr1.148 398 0.179818
-chr1 1822336 1822611 chr1.149 464 0.501034
-chr1 1844627 1844854 chr1.150 373 0.099617
-chr1 1852389 1852529 chr1.151 404 0.201567
-chr1 1852929 1853169 chr1.152 382 0.126305
-chr1 1853350 1855972 chr1.153 745 3.66134
-chr1 1869830 1869840 chr1.154 332 0.0200274
-chr1 1869854 1870110 chr1.155 421 0.2737
-chr1 1872207 1873215 chr1.157 847 5.52993
-chr1 1882469 1883811 chr1.158 882 6.24189
-chr1 1907330 1908222 chr1.159 558 1.23049
-chr1 1923744 1923940 chr1.160 390 0.152416
-chr1 1923977 1924078 chr1.161 448 0.405503
-chr1 1959820 1960149 chr1.162 410 0.225941
-chr1 1982813 1983428 chr1.163 494 0.69409
-chr1 1984368 1984428 chr1.164 362 0.071593
-chr1 1989288 1989779 chr1.165 470 0.535642
-chr1 2007586 2007647 chr1.166 400 0.185196
-chr1 2008131 2008215 chr1.167 433 0.328356
-chr1 2008217 2008948 chr1.168 605 1.71627
-chr1 2010135 2010260 chr1.169 350 0.047398
-chr1 2013529 2014584 chr1.170 979 8.49978
-chr1 2055212 2055259 chr1.171 382 0.124886
-chr1 2068581 2068781 chr1.172 381 0.122871
-chr1 2086746 2087226 chr1.173 418 0.25753
-chr1 2090656 2091256 chr1.174 414 0.242561
-chr1 2095779 2096421 chr1.175 536 1.03316
-chr1 2096481 2097513 chr1.176 878 6.17002
-chr1 2103292 2103757 chr1.177 412 0.231373
-chr1 2103804 2103951 chr1.178 390 0.151735
-chr1 2109803 2110443 chr1.179 466 0.507647
-chr1 2112092 2113186 chr1.180 628 1.98414
-chr1 2116483 2116895 chr1.181 556 1.21258
-chr1 2134155 2134284 chr1.182 359 0.064291
-chr1 2137988 2137998 chr1.183 333 0.0212074
-chr1 2138022 2138316 chr1.184 430 0.315656
-chr1 2152859 2153858 chr1.185 721 3.27329
-chr1 2158055 2159299 chr1.186 711 3.11241
-chr1 2162443 2163421 chr1.187 721 3.27972
-chr1 2168224 2169293 chr1.188 809 4.78985
-chr1 2175799 2176777 chr1.189 542 1.08667
-chr1 2190263 2190275 chr1.190 308 0.001444
-chr1 2190962 2191887 chr1.191 945 7.67556
-chr1 2191916 2192099 chr1.192 448 0.408285
-chr1 2192279 2192298 chr1.193 459 0.470934
-chr1 2192819 2196309 chr1.194 666 2.47055
-chr1 2196880 2196980 chr1.195 409 0.221254
-chr1 2197480 2198620 chr1.196 597 1.63065
-chr1 2200780 2201425 chr1.197 516 0.865186
-chr1 2201461 2201525 chr1.198 322 0.00900521
-chr1 2203957 2204865 chr1.199 495 0.703671
-chr1 2218787 2220327 chr1.200 629 2.00121
-chr1 2222381 2223142 chr1.201 508 0.799448
-chr1 2240080 2240229 chr1.202 336 0.024456
-chr1 2242187 2242252 chr1.203 339 0.028898
-chr1 2251956 2252371 chr1.204 470 0.533144
-chr1 2253682 2255082 chr1.205 631 2.01952
-chr1 2263846 2265446 chr1.206 802 4.65529
-chr1 2274218 2274318 chr1.207 394 0.16333
-chr1 2274518 2274818 chr1.208 400 0.184861
-chr1 2274918 2275118 chr1.209 405 0.205095
-chr1 2275146 2275641 chr1.210 462 0.489108
-chr1 2277948 2279581 chr1.211 694 2.86896
-chr1 2281005 2281170 chr1.212 355 0.057667
-chr1 2345305 2345741 chr1.213 584 1.48807
-chr1 2345971 2345977 chr1.214 463 0.493836
-chr1 2354701 2355774 chr1.215 899 6.63001
-chr1 2374003 2374258 chr1.216 379 0.116116
-chr1 2375777 2377035 chr1.217 948 7.74791
-chr1 2377735 2378575 chr1.218 692 2.84491
-chr1 2378809 2378949 chr1.219 406 0.207187
-chr1 2378999 2379885 chr1.220 504 0.768902
-chr1 2379906 2380606 chr1.221 541 1.07024
-chr1 2397286 2397294 chr1.222 348 0.042792
-chr1 2413260 2413261 chr1.223 438 0.352263
-chr1 2430347 2431135 chr1.224 441 0.367269
-chr1 2431624 2431978 chr1.225 424 0.284169
-chr1 2457576 2457707 chr1.226 346 0.039385
-chr1 2459172 2460272 chr1.227 552 1.17653
-chr1 2463388 2463823 chr1.228 417 0.253052
-chr1 2470454 2470461 chr1.229 390 0.150899
-chr1 2486936 2488236 chr1.230 636 2.09041
-chr1 2489257 2490776 chr1.231 817 4.93949
-chr1 2492492 2492761 chr1.232 364 0.0760051
-chr1 2493101 2493146 chr1.233 469 0.531862
-chr1 2493326 2493347 chr1.235 461 0.482003
-chr1 2494419 2494642 chr1.236 341 0.031532
-chr1 2507151 2507330 chr1.237 387 0.141125
-chr1 2509159 2512197 chr1.238 772 4.11993
-chr1 2512208 2512756 chr1.239 642 2.16565
-chr1 2512807 2513247 chr1.240 516 0.860853
-chr1 2528188 2529907 chr1.241 690 2.80766
-chr1 2530087 2530368 chr1.242 432 0.324825
-chr1 2541499 2541739 chr1.243 437 0.346076
-chr1 2541759 2542339 chr1.244 578 1.4257
-chr1 2547635 2548035 chr1.245 549 1.14232
-chr1 2548806 2551026 chr1.246 937 7.48971
-chr1 2592434 2592526 chr1.247 336 0.024189
-chr1 2598191 2598791 chr1.248 445 0.388726
-chr1 2605620 2607520 chr1.249 834 5.268
-chr1 2664089 2664689 chr1.250 471 0.543906
-chr1 2665089 2665155 chr1.251 323 0.0105816
-chr1 2665189 2665259 chr1.252 374 0.103334
-chr1 2665289 2665989 chr1.253 524 0.925015
-chr1 2726150 2726886 chr1.254 549 1.14798
-chr1 2741401 2741593 chr1.255 397 0.174468
-chr1 2761650 2762004 chr1.256 464 0.497814
-chr1 2779686 2780556 chr1.257 750 3.73479
-chr1 2787864 2787900 chr1.258 346 0.04022
-chr1 2803409 2803859 chr1.259 375 0.105857
-chr1 2807226 2807228 chr1.260 308 0.001362
-chr1 2825483 2825625 chr1.261 435 0.34042
-chr1 2834138 2834756 chr1.262 538 1.04609
-chr1 2838065 2838157 chr1.263 345 0.038829
-chr1 2861188 2862281 chr1.264 548 1.13627
-chr1 2952115 2952560 chr1.265 418 0.258463
-chr1 2972843 2973318 chr1.266 411 0.230882
-chr1 2989768 2989968 chr1.267 386 0.137707
-chr1 3009017 3009062 chr1.268 390 0.15157
-chr1 3017175 3017575 chr1.269 456 0.451931
-chr1 3100471 3100558 chr1.270 335 0.023096
-chr1 3100898 3100998 chr1.271 338 0.0268333
-chr1 3101023 3101198 chr1.272 379 0.115724
-chr1 3105089 3105689 chr1.273 448 0.406987
-chr1 3190046 3190546 chr1.274 391 0.155685
-chr1 3364248 3364299 chr1.275 337 0.0257644
-chr1 3364410 3364646 chr1.276 398 0.18047
-chr1 3392559 3393373 chr1.277 587 1.51733
-chr1 3393741 3393850 chr1.278 430 0.314211
-chr1 3394031 3394804 chr1.279 409 0.222675
-chr1 3395156 3395206 chr1.280 353 0.0526742
-chr1 3395208 3395317 chr1.281 385 0.135351
-chr1 3398334 3398339 chr1.282 320 0.00753599
-chr1 3416964 3417115 chr1.283 521 0.904628
-chr1 3423248 3424044 chr1.284 530 0.9811
-chr1 3430716 3431581 chr1.285 656 2.3428
-chr1 3441703 3441928 chr1.286 426 0.295677
-chr1 3470113 3471947 chr1.287 1000 11.4006
-chr1 3475465 3475504 chr1.288 374 0.101467
-chr1 3504471 3505271 chr1.289 527 0.953672
-chr1 3511697 3512037 chr1.290 459 0.466982
-chr1 3512150 3512990 chr1.291 537 1.04137
-chr1 3522919 3523619 chr1.292 433 0.326354
-chr1 3536918 3537783 chr1.293 633 2.04946
-chr1 3550327 3550461 chr1.294 330 0.0169024
-chr1 3550933 3551686 chr1.295 571 1.35693
-chr1 3558392 3559167 chr1.296 563 1.27809
-chr1 3563409 3563437 chr1.297 324 0.0106548
-chr1 3563440 3565944 chr1.298 1000 11.196
-chr1 3588610 3590407 chr1.300 768 4.04642
-chr1 3590997 3591377 chr1.301 376 0.107667
-chr1 3591959 3592119 chr1.302 338 0.0268488
-chr1 3592147 3592218 chr1.303 474 0.558572
-chr1 3596509 3596651 chr1.304 374 0.102515
-chr1 3635398 3635663 chr1.305 583 1.47628
-chr1 3643823 3643991 chr1.306 374 0.103457
-chr1 3663878 3664519 chr1.307 534 1.01189
-chr1 3686655 3687421 chr1.308 750 3.73117
-chr1 3711401 3713059 chr1.309 824 5.07398
-chr1 3715204 3715280 chr1.310 339 0.0290495
-chr1 3715304 3715504 chr1.311 390 0.151907
-chr1 3715577 3716104 chr1.312 540 1.06776
-chr1 3723440 3723532 chr1.313 320 0.00791382
-chr1 3723732 3724032 chr1.314 436 0.341917
-chr1 3724132 3724232 chr1.315 355 0.0573958
-chr1 3727297 3727730 chr1.316 424 0.285042
-chr1 3735696 3736832 chr1.317 824 5.06396
-chr1 3790191 3790391 chr1.318 397 0.173633
-chr1 3790591 3790791 chr1.319 377 0.111306
-chr1 3790891 3790991 chr1.320 363 0.074843
-chr1 3796408 3797763 chr1.321 980 8.53863
-chr1 3830679 3831134 chr1.322 430 0.315135
-chr1 3839363 3841336 chr1.323 781 4.26183
-chr1 3841840 3843168 chr1.324 588 1.52897
-chr1 4046527 4046867 chr1.325 447 0.399924
-chr1 4046958 4047138 chr1.326 414 0.24036
-chr1 4179552 4179952 chr1.327 416 0.249199
-chr1 4263232 4263472 chr1.328 394 0.16575
-chr1 4273382 4273755 chr1.329 746 3.66676
-chr1 4495319 4495376 chr1.330 343 0.03471
-chr1 4604953 4605053 chr1.331 369 0.088698
-chr1 4622971 4623877 chr1.332 552 1.178
-chr1 4744712 4745512 chr1.333 533 1.00327
-chr1 4940852 4941152 chr1.334 396 0.170009
-chr1 5047636 5047838 chr1.335 351 0.048973
-chr1 5048038 5048138 chr1.336 339 0.0282311
-chr1 5056002 5056102 chr1.337 362 0.072234
-chr1 5119853 5119944 chr1.338 330 0.016646
-chr1 5295783 5295854 chr1.339 340 0.030582
-chr1 5299567 5300031 chr1.340 462 0.484579
-chr1 5304398 5305198 chr1.341 521 0.90563
-chr1 5308358 5308368 chr1.342 318 0.006299
-chr1 5314173 5314313 chr1.343 359 0.06435
-chr1 5317356 5317596 chr1.344 412 0.231594
-chr1 5336290 5336503 chr1.345 341 0.032255
-chr1 5417389 5418189 chr1.346 489 0.662748
-chr1 5429980 5430720 chr1.347 501 0.747305
-chr1 5463124 5463804 chr1.348 438 0.352774
-chr1 5476109 5476633 chr1.349 485 0.633405
-chr1 5504277 5504573 chr1.350 433 0.329133
-chr1 5508837 5509421 chr1.351 562 1.26653
-chr1 5631634 5631785 chr1.352 380 0.118948
-chr1 5661217 5661497 chr1.353 384 0.131985
-chr1 5661536 5662716 chr1.354 544 1.09861
-chr1 5664507 5664525 chr1.355 409 0.219854
-chr1 5681109 5681436 chr1.356 358 0.062922
-chr1 5707550 5707830 chr1.357 418 0.258635
-chr1 5707893 5708339 chr1.358 411 0.230736
-chr1 5810885 5811785 chr1.359 487 0.646923
-chr1 5845657 5845897 chr1.360 383 0.128835
-chr1 5905304 5906204 chr1.361 540 1.06385
-chr1 5907432 5907824 chr1.362 470 0.538406
-chr1 5909947 5910847 chr1.363 558 1.2354
-chr1 5953137 5953377 chr1.364 384 0.130998
-chr1 5969567 5970207 chr1.365 435 0.33689
-chr1 5985436 5989627 chr1.366 937 7.48701
-chr1 6020073 6023367 chr1.367 763 3.95216
-chr1 6025268 6025914 chr1.369 416 0.250311
-chr1 6047083 6047181 chr1.370 381 0.123346
-chr1 6051121 6051151 chr1.371 349 0.045605
-chr1 6065059 6065145 chr1.372 367 0.084044
-chr1 6103157 6103198 chr1.373 393 0.160523
-chr1 6103280 6103514 chr1.374 400 0.184768
-chr1 6110849 6110906 chr1.375 322 0.00935
-chr1 6121907 6122607 chr1.376 566 1.3095
-chr1 6139611 6139786 chr1.377 350 0.047781
-chr1 6142543 6142589 chr1.378 347 0.0410937
-chr1 6142845 6143478 chr1.379 507 0.796213
-chr1 6174913 6174926 chr1.380 322 0.00919397
-chr1 6175613 6175672 chr1.381 344 0.037
-chr1 6179651 6179851 chr1.382 371 0.093017
-chr1 6193230 6194465 chr1.383 825 5.09165
-chr1 6194589 6194769 chr1.384 361 0.0694778
-chr1 6199507 6199764 chr1.385 542 1.08144
-chr1 6199776 6199845 chr1.386 470 0.532812
-chr1 6200213 6201182 chr1.387 470 0.532765
-chr1 6203569 6203691 chr1.388 326 0.013056
-chr1 6203924 6204029 chr1.389 427 0.298376
-chr1 6229736 6230720 chr1.390 663 2.43144
-chr1 6230962 6231102 chr1.391 397 0.175743
-chr1 6239308 6239343 chr1.392 490 0.671257
-chr1 6239348 6239881 chr1.393 609 1.76614
-chr1 6240252 6240434 chr1.394 359 0.0644718
-chr1 6240452 6241652 chr1.395 667 2.48376
-chr1 6254059 6254762 chr1.396 619 1.88495
-chr1 6255114 6255608 chr1.397 595 1.61068
-chr1 6276001 6276541 chr1.398 425 0.291287
-chr1 6342254 6343584 chr1.399 612 1.80057
-chr1 6353019 6354469 chr1.400 556 1.21155
-chr1 6359423 6359670 chr1.401 426 0.292977
-chr1 6387410 6388963 chr1.403 833 5.24564
-chr1 6398989 6399799 chr1.404 565 1.29732
-chr1 6408661 6409101 chr1.405 435 0.336793
-chr1 6413979 6414449 chr1.406 415 0.244244
-chr1 6414720 6414782 chr1.407 418 0.258695
-chr1 6417717 6419744 chr1.408 615 1.83352
-chr1 6431850 6432707 chr1.409 534 1.01216
-chr1 6434544 6435100 chr1.410 604 1.70279
-chr1 6441530 6442436 chr1.411 487 0.644963
-chr1 6443498 6444188 chr1.412 421 0.272466
-chr1 6444808 6444908 chr1.413 397 0.174494
-chr1 6453802 6455542 chr1.414 796 4.54512
-chr1 6458957 6460910 chr1.415 715 3.17974
-chr1 6469556 6470536 chr1.416 670 2.53514
-chr1 6479822 6480051 chr1.417 464 0.500152
-chr1 6480191 6481291 chr1.418 606 1.7329
-chr1 6484026 6485952 chr1.419 642 2.16671
-chr1 6485996 6486113 chr1.420 347 0.0424213
-chr1 6487684 6487830 chr1.421 375 0.104822
-chr1 6491298 6492410 chr1.422 690 2.80757
-chr1 6515040 6515180 chr1.423 329 0.016359
-chr1 6539345 6539585 chr1.424 439 0.358308
-chr1 6539609 6540252 chr1.425 549 1.14281
-chr1 6548511 6549715 chr1.426 713 3.1525
-chr1 6573604 6575104 chr1.427 805 4.70201
-chr1 6585740 6585839 chr1.428 354 0.054151
-chr1 6593261 6594397 chr1.429 564 1.28992
-chr1 6595174 6596474 chr1.430 693 2.85379
-chr1 6596574 6596606 chr1.431 335 0.0227389
-chr1 6596789 6598555 chr1.433 656 2.34421
-chr1 6606848 6609592 chr1.434 856 5.71167
-chr1 6618971 6620258 chr1.435 727 3.36245
-chr1 6640224 6640764 chr1.436 524 0.925278
-chr1 6640789 6641228 chr1.437 546 1.11628
-chr1 6645301 6645401 chr1.438 358 0.062647
-chr1 6645465 6645501 chr1.439 316 0.00506949
-chr1 6695708 6696512 chr1.440 700 2.9551
-chr1 6714442 6714554 chr1.441 356 0.059668
-chr1 6721933 6722127 chr1.442 369 0.089852
-chr1 6728819 6729659 chr1.443 523 0.919928
-chr1 6736584 6736598 chr1.444 319 0.007138
-chr1 6737420 6737700 chr1.445 444 0.384274
-chr1 6737762 6738402 chr1.446 485 0.633369
-chr1 6778180 6780361 chr1.447 924 7.17666
-chr1 6780589 6781263 chr1.448 432 0.325742
-chr1 6956891 6957167 chr1.449 397 0.174899
-chr1 6957391 6957964 chr1.450 504 0.769395
-chr1 7113515 7114155 chr1.451 440 0.363658
-chr1 7212679 7212780 chr1.452 336 0.024595
-chr1 7231995 7232034 chr1.453 314 0.004009
-chr1 7459398 7459598 chr1.454 372 0.096016
-chr1 7641508 7641952 chr1.455 553 1.18241
-chr1 7661729 7662412 chr1.456 530 0.979164
-chr1 7663793 7664125 chr1.457 452 0.430045
-chr1 7664193 7665093 chr1.458 492 0.679594
-chr1 7671588 7671988 chr1.459 396 0.172629
-chr1 7674459 7675524 chr1.460 582 1.47493
-chr1 7698392 7699989 chr1.461 672 2.55111
-chr1 7703712 7704052 chr1.462 338 0.027123
-chr1 7719286 7719826 chr1.463 436 0.343389
-chr1 7719860 7719966 chr1.464 318 0.00611124
-chr1 7720728 7721328 chr1.465 405 0.203769
-chr1 7727749 7728266 chr1.466 379 0.116645
-chr1 7730905 7731605 chr1.467 378 0.1146
-chr1 7746847 7747449 chr1.468 459 0.467609
-chr1 7761778 7761876 chr1.469 331 0.018436
-chr1 7764993 7765980 chr1.470 764 3.96799
-chr1 7776325 7776328 chr1.471 311 0.002269
-chr1 7777665 7779419 chr1.472 858 5.75116
-chr1 7821343 7822543 chr1.473 549 1.14715
-chr1 7880838 7881078 chr1.474 335 0.023662
-chr1 7897160 7897302 chr1.475 380 0.119257
-chr1 7897330 7897335 chr1.476 331 0.0180441
-chr1 7925170 7925557 chr1.477 462 0.485144
-chr1 7936502 7937182 chr1.478 539 1.06055
-chr1 7937244 7937484 chr1.479 421 0.272625
-chr1 7943310 7943950 chr1.480 537 1.04177
-chr1 7947986 7949355 chr1.481 660 2.39798
-chr1 7955338 7957402 chr1.482 824 5.07687
-chr1 7976547 7977227 chr1.483 536 1.03135
-chr1 8009415 8009785 chr1.484 428 0.305295
-chr1 8018822 8021099 chr1.485 612 1.80179
-chr1 8041607 8042107 chr1.486 376 0.10901
-chr1 8107706 8107849 chr1.487 372 0.096754
-chr1 8132243 8132543 chr1.488 382 0.125108
-chr1 8143554 8143894 chr1.489 433 0.327808
-chr1 8143933 8144213 chr1.490 480 0.597669
-chr1 8146312 8146674 chr1.491 439 0.358509
-chr1 8146925 8147810 chr1.492 582 1.47331
-chr1 8148073 8148653 chr1.493 499 0.732333
-chr1 8163643 8165099 chr1.494 652 2.28248
-chr1 8176501 8177381 chr1.495 624 1.93584
-chr1 8188192 8188532 chr1.496 425 0.289221
-chr1 8188549 8188889 chr1.497 403 0.197338
-chr1 8226358 8227023 chr1.498 493 0.690844
-chr1 8227114 8227294 chr1.499 431 0.318179
-chr1 8308676 8308954 chr1.500 430 0.315372
-chr1 8311985 8312979 chr1.501 709 3.08172
-chr1 8343035 8343828 chr1.502 627 1.97195
-chr1 8365384 8365684 chr1.503 399 0.180655
-chr1 8367944 8368781 chr1.504 392 0.158363
-chr1 8377207 8377958 chr1.505 485 0.633445
-chr1 8378241 8378299 chr1.506 319 0.00705539
-chr1 8389754 8391034 chr1.507 582 1.47437
-chr1 8391225 8391458 chr1.508 427 0.300652
-chr1 8391775 8392255 chr1.509 506 0.785274
-chr1 8392257 8392497 chr1.510 451 0.425152
-chr1 8401847 8401987 chr1.511 411 0.229506
-chr1 8401988 8403428 chr1.512 582 1.47017
-chr1 8403494 8403828 chr1.513 426 0.295087
-chr1 8406765 8406965 chr1.514 365 0.077851
-chr1 8413105 8413405 chr1.515 392 0.157024
-chr1 8415222 8415722 chr1.516 416 0.248503
-chr1 8416622 8419418 chr1.517 615 1.83419
-chr1 8421702 8422460 chr1.518 525 0.933497
-chr1 8443136 8443793 chr1.519 490 0.667712
-chr1 8445710 8446070 chr1.520 406 0.20897
-chr1 8455610 8455710 chr1.521 393 0.162064
-chr1 8455810 8456023 chr1.522 352 0.0506586
-chr1 8457410 8458110 chr1.523 481 0.60741
-chr1 8467012 8467112 chr1.524 392 0.15691
-chr1 8467212 8467289 chr1.525 309 0.00179666
-chr1 8473205 8473445 chr1.526 402 0.194979
-chr1 8504074 8505261 chr1.527 639 2.12098
-chr1 8505309 8505549 chr1.528 457 0.455829
-chr1 8518014 8521014 chr1.529 638 2.11
-chr1 8539553 8539588 chr1.530 308 0.001211
-chr1 8555596 8556022 chr1.531 407 0.211031
-chr1 8556483 8556583 chr1.532 338 0.027828
-chr1 8596816 8597258 chr1.533 505 0.774181
-chr1 8597269 8597809 chr1.534 540 1.06175
-chr1 8598776 8598916 chr1.535 402 0.193151
-chr1 8598936 8599276 chr1.536 431 0.316757
-chr1 8617713 8618353 chr1.537 421 0.272994
-chr1 8626317 8627317 chr1.538 549 1.14922
-chr1 8632762 8632902 chr1.539 385 0.133882
-chr1 8661178 8661718 chr1.540 438 0.353218
-chr1 8664366 8664706 chr1.541 407 0.211497
-chr1 8665732 8665919 chr1.542 372 0.096127
-chr1 8695228 8696331 chr1.543 715 3.176
-chr1 8697421 8698862 chr1.544 585 1.50209
-chr1 8698906 8699146 chr1.545 425 0.287892
-chr1 8706288 8707511 chr1.546 569 1.3331
-chr1 8731775 8731915 chr1.547 377 0.110385
-chr1 8731995 8732575 chr1.548 466 0.509635
-chr1 8809256 8809314 chr1.549 359 0.065604
-chr1 8810776 8813089 chr1.550 850 5.58414
-chr1 8824007 8824219 chr1.551 395 0.167879
-chr1 8843233 8843545 chr1.552 497 0.718104
-chr1 8853785 8854065 chr1.553 413 0.237218
-chr1 8855301 8855801 chr1.554 367 0.084444
-chr1 8868031 8868671 chr1.555 447 0.398462
-chr1 8872166 8873910 chr1.556 798 4.57685
-chr1 8894251 8894279 chr1.557 392 0.158434
-chr1 8894282 8894552 chr1.558 475 0.567848
-chr1 8907813 8908393 chr1.559 416 0.252026
-chr1 8912501 8912881 chr1.560 502 0.754464
-chr1 8920942 8921307 chr1.561 381 0.122501
-chr1 8939414 8940401 chr1.562 492 0.681736
-chr1 8957412 8957500 chr1.563 368 0.085716
-chr1 8961522 8961662 chr1.564 346 0.0405167
-chr1 8961759 8962339 chr1.565 448 0.408565
-chr1 8964588 8964813 chr1.566 416 0.248209
-chr1 8965060 8965759 chr1.567 592 1.57161
-chr1 8980485 8980585 chr1.568 326 0.012831
-chr1 8981022 8981340 chr1.569 424 0.287339
-chr1 8981392 8981424 chr1.570 402 0.193757
-chr1 8981992 8982827 chr1.571 545 1.1102
-chr1 8999149 8999943 chr1.572 580 1.44595
-chr1 9096355 9096448 chr1.573 349 0.044431
-chr1 9104051 9104214 chr1.574 333 0.021132
-chr1 9105039 9105050 chr1.575 322 0.00894791
-chr1 9105071 9105545 chr1.576 496 0.713335
-chr1 9116162 9116802 chr1.577 532 0.998398
-chr1 9122811 9124711 chr1.578 876 6.11381
-chr1 9136473 9136935 chr1.579 495 0.706033
-chr1 9175634 9176189 chr1.580 547 1.13023
-chr1 9176362 9176368 chr1.581 317 0.00586586
-chr1 9176450 9176468 chr1.582 331 0.018376
-chr1 9176470 9176541 chr1.583 325 0.0121209
-chr1 9177287 9177603 chr1.584 420 0.266916
-chr1 9190382 9191375 chr1.585 623 1.92201
-chr1 9195449 9196089 chr1.586 428 0.302592
-chr1 9228264 9229757 chr1.587 796 4.53492
-chr1 9229896 9229910 chr1.588 304 0.000402749
-chr1 9233829 9234632 chr1.589 525 0.934048
-chr1 9261379 9261919 chr1.590 519 0.889613
-chr1 9270017 9270163 chr1.591 490 0.66517
-chr1 9278539 9278796 chr1.592 454 0.438251
-chr1 9283189 9283674 chr1.593 456 0.452064
-chr1 9283688 9283928 chr1.594 394 0.166216
-chr1 9284257 9285108 chr1.595 431 0.320773
-chr1 9286721 9287687 chr1.596 650 2.25714
-chr1 9287823 9287962 chr1.597 492 0.679897
-chr1 9288179 9288206 chr1.598 347 0.0421743
-chr1 9288642 9289182 chr1.599 468 0.525884
-chr1 9289184 9289282 chr1.600 358 0.0623004
-chr1 9394854 9394931 chr1.601 333 0.020678
-chr1 9406782 9407951 chr1.602 539 1.05838
-chr1 9411837 9412817 chr1.603 579 1.43638
-chr1 9420268 9421248 chr1.604 679 2.64855
-chr1 9422600 9423877 chr1.605 717 3.21228
-chr1 9449753 9449853 chr1.606 341 0.0322128
-chr1 9449953 9450569 chr1.607 573 1.37542
-chr1 9467097 9467337 chr1.608 392 0.15655
-chr1 9467637 9467837 chr1.609 368 0.0858662
-chr1 9485361 9485821 chr1.610 513 0.840315
-chr1 9489645 9489876 chr1.611 413 0.235815
-chr1 9489953 9490033 chr1.612 415 0.247304
-chr1 9533273 9535021 chr1.613 709 3.08609
-chr1 9553064 9553181 chr1.614 350 0.0477783
-chr1 9553783 9554331 chr1.615 437 0.347944
-chr1 9568019 9568099 chr1.616 330 0.016923
-chr1 9582594 9583420 chr1.617 903 6.69798
-chr1 9583449 9584334 chr1.618 506 0.787083
-chr1 9610065 9610145 chr1.619 342 0.032849
-chr1 9610260 9610283 chr1.620 373 0.09963
-chr1 9621183 9621955 chr1.622 691 2.82618
-chr1 9622147 9622287 chr1.623 401 0.191001
-chr1 9622579 9624821 chr1.624 696 2.89883
-chr1 9645580 9646153 chr1.625 442 0.371898
-chr1 9646271 9648303 chr1.626 646 2.21344
-chr1 9648349 9649129 chr1.627 520 0.898129
-chr1 9649348 9650028 chr1.628 455 0.4443
-chr1 9681057 9681092 chr1.629 335 0.0229328
-chr1 9681190 9682723 chr1.630 582 1.47354
-chr1 9683237 9684175 chr1.631 732 3.45277
-chr1 9708410 9709147 chr1.632 562 1.27224
-chr1 9709689 9710489 chr1.633 529 0.968673
-chr1 9710538 9710589 chr1.634 343 0.0341791
-chr1 9711289 9711317 chr1.635 332 0.0199725
-chr1 9711389 9712729 chr1.636 770 4.0696
-chr1 9712751 9712891 chr1.637 398 0.178471
-chr1 9716067 9716402 chr1.638 429 0.309362
-chr1 9719049 9719682 chr1.639 549 1.14888
-chr1 9722503 9724028 chr1.640 651 2.27965
-chr1 9724115 9724128 chr1.641 309 0.0015425
-chr1 9766728 9766968 chr1.642 386 0.137728
-chr1 9778793 9779291 chr1.643 463 0.490789
-chr1 9782028 9782274 chr1.644 443 0.381381
-chr1 9817059 9817732 chr1.645 448 0.408183
-chr1 9817953 9820336 chr1.646 868 5.94748
-chr1 9820415 9820651 chr1.647 439 0.359755
-chr1 9830856 9831496 chr1.648 496 0.712757
-chr1 9844382 9845378 chr1.649 558 1.22972
-chr1 9861218 9862258 chr1.650 583 1.47632
-chr1 9868810 9869815 chr1.651 631 2.01853
-chr1 9876719 9877271 chr1.652 477 0.580527
-chr1 9903639 9905821 chr1.653 981 8.54314
-chr1 9926380 9926459 chr1.654 357 0.060471
-chr1 9936538 9938255 chr1.655 642 2.1585
-chr1 9944645 9945128 chr1.656 542 1.08591
-chr1 9991451 9991619 chr1.657 362 0.0722512
-chr1 9991905 9992075 chr1.658 430 0.312042
-chr1 10026446 10027898 chr1.659 901 6.66041
-chr1 10152497 10152897 chr1.660 415 0.244103
-chr1 10203931 10205596 chr1.661 844 5.46755
-chr1 10252928 10253558 chr1.662 453 0.436453
-chr1 10267847 10268147 chr1.663 398 0.179382
-chr1 10302008 10302908 chr1.664 555 1.20448
-chr1 10340217 10340457 chr1.665 380 0.118807
-chr1 10340474 10340654 chr1.666 353 0.0524881
-chr1 10368060 10368099 chr1.667 339 0.028562
-chr1 10392571 10395144 chr1.668 908 6.82367
-chr1 10422302 10422338 chr1.669 363 0.0739107
-chr1 10422348 10422721 chr1.670 535 1.02426
-chr1 10424138 10425705 chr1.671 776 4.17679
-chr1 10430996 10431476 chr1.672 414 0.242571
-chr1 10465584 10466024 chr1.673 422 0.276309
-chr1 10466142 10467509 chr1.674 701 2.9744
-chr1 10468986 10469846 chr1.675 639 2.11803
-chr1 10488894 10490094 chr1.676 637 2.09619
-chr1 10492577 10492817 chr1.677 354 0.054395
-chr1 10501511 10502108 chr1.678 445 0.390985
-chr1 10502491 10502504 chr1.679 348 0.042946
-chr1 10504244 10504584 chr1.680 431 0.318759
-chr1 10504616 10506302 chr1.681 680 2.67308
-chr1 10513400 10513700 chr1.682 395 0.167584
-chr1 10538500 10538537 chr1.683 308 0.00122817
-chr1 10538741 10538822 chr1.684 327 0.013649
-chr1 10589375 10589975 chr1.685 449 0.410125
-chr1 10632536 10633579 chr1.686 570 1.34375
-chr1 10646692 10646717 chr1.687 382 0.124599
-chr1 10661090 10661197 chr1.688 397 0.175384
-chr1 10686500 10689884 chr1.689 1000 9.21871
-chr1 10690597 10690937 chr1.690 347 0.041224
-chr1 10749912 10750903 chr1.691 614 1.81912
-chr1 10772740 10773080 chr1.692 377 0.109684
-chr1 10778350 10778391 chr1.693 318 0.005996
-chr1 10786017 10786025 chr1.694 324 0.010846
-chr1 10861097 10861213 chr1.695 444 0.384366
-chr1 10861380 10862435 chr1.696 640 2.1315
-chr1 10866122 10866302 chr1.697 371 0.095126
-chr1 10882982 10883087 chr1.698 426 0.294169
-chr1 10891540 10891604 chr1.699 320 0.007629
-chr1 10898133 10899553 chr1.700 514 0.849986
-chr1 10904157 10904210 chr1.701 410 0.224514
-chr1 10904269 10904564 chr1.702 469 0.528286
-chr1 10911375 10911665 chr1.703 431 0.316975
-chr1 10912049 10912921 chr1.704 516 0.861241
-chr1 10926584 10926733 chr1.705 359 0.065068
-chr1 10933863 10935019 chr1.706 510 0.817714
-chr1 10936200 10936966 chr1.707 506 0.786559
-chr1 10955303 10955741 chr1.708 543 1.09428
-chr1 10959321 10959801 chr1.709 477 0.583446
-chr1 10960104 10960341 chr1.710 425 0.290026
-chr1 10990398 10990778 chr1.711 405 0.206693
-chr1 11006124 11006152 chr1.712 338 0.0274196
-chr1 11006373 11008013 chr1.713 765 3.99066
-chr1 11018515 11019115 chr1.714 405 0.203476
-chr1 11024710 11024910 chr1.715 397 0.174439
-chr1 11031646 11032526 chr1.716 674 2.57742
-chr1 11032603 11032843 chr1.717 438 0.354543
-chr1 11053181 11053281 chr1.718 324 0.0114404
-chr1 11053875 11055539 chr1.719 935 7.44763
-chr1 11093526 11094719 chr1.720 760 3.90018
-chr1 11138750 11139150 chr1.721 452 0.428346
-chr1 11207178 11207878 chr1.722 487 0.64576
-chr1 11221841 11222026 chr1.723 380 0.1194
-chr1 11236089 11236216 chr1.724 452 0.429745
-chr1 11240175 11241255 chr1.725 549 1.14549
-chr1 11256285 11257525 chr1.726 833 5.23514
-chr1 11266912 11267010 chr1.727 440 0.363964
-chr1 11267052 11268289 chr1.728 720 3.26155
-chr1 11275264 11275760 chr1.729 511 0.826675
-chr1 11288942 11289089 chr1.730 364 0.076249
-chr1 11306190 11306330 chr1.732 391 0.153405
-chr1 11306357 11306597 chr1.733 454 0.438669
-chr1 11306897 11306997 chr1.734 331 0.0179042
-chr1 11314602 11314779 chr1.735 365 0.078178
-chr1 11331880 11331885 chr1.736 329 0.0160068
-chr1 11331990 11332094 chr1.737 354 0.053898
-chr1 11333774 11333923 chr1.738 403 0.197859
-chr1 11348931 11349031 chr1.739 359 0.0657591
-chr1 11349331 11349631 chr1.740 447 0.401474
-chr1 11378211 11378740 chr1.741 439 0.356991
-chr1 11472644 11473841 chr1.742 605 1.71862
-chr1 11474475 11474725 chr1.743 545 1.10582
-chr1 11532620 11532693 chr1.744 338 0.026821
-chr1 11548123 11548303 chr1.745 370 0.0902696
-chr1 11548367 11548507 chr1.746 391 0.154725
-chr1 11636532 11637090 chr1.747 528 0.962523
-chr1 11640057 11640342 chr1.748 545 1.11199
-chr1 11643261 11643263 chr1.749 454 0.442281
-chr1 11643310 11643450 chr1.750 372 0.0964662
-chr1 11644166 11645286 chr1.751 631 2.02555
-chr1 11648139 11648395 chr1.752 374 0.10208
-chr1 11648444 11649651 chr1.753 535 1.02368
-chr1 11649814 11649862 chr1.754 439 0.360995
-chr1 11658259 11659370 chr1.755 680 2.66911
-chr1 11674833 11676363 chr1.756 755 3.81803
-chr1 11685899 11685963 chr1.757 348 0.0427532
-chr1 11686103 11686203 chr1.758 386 0.137489
-chr1 11686723 11686803 chr1.759 358 0.0624899
-chr1 11687143 11687225 chr1.760 347 0.0419641
-chr1 11687275 11687853 chr1.761 421 0.270193
-chr1 11700314 11700321 chr1.762 320 0.007512
-chr1 11705512 11705965 chr1.763 454 0.440738
-chr1 11713519 11714464 chr1.764 641 2.14917
-chr1 11724399 11724538 chr1.765 324 0.0111745
-chr1 11724656 11725336 chr1.766 531 0.98641
-chr1 11730045 11731533 chr1.767 644 2.19209
-chr1 11734375 11735216 chr1.768 503 0.765884
-chr1 11735248 11735477 chr1.769 393 0.159503
-chr1 11743298 11743951 chr1.770 589 1.54117
-chr1 11756894 11757005 chr1.771 403 0.199074
-chr1 11797494 11798391 chr1.772 666 2.46757
-chr1 11798736 11799516 chr1.773 589 1.54157
-chr1 11799528 11801368 chr1.774 876 6.12942
-chr1 11832726 11833584 chr1.775 654 2.31091
-chr1 11839882 11840382 chr1.776 461 0.479399
-chr1 11853568 11854246 chr1.777 502 0.757542
-chr1 11888103 11888671 chr1.778 548 1.13601
-chr1 11900015 11900148 chr1.779 366 0.0825749
-chr1 11900247 11900335 chr1.780 400 0.18488
-chr1 11901991 11902909 chr1.781 608 1.7513
-chr1 11902976 11903612 chr1.782 711 3.12403
-chr1 11903696 11904564 chr1.783 518 0.882039
-chr1 11904863 11905003 chr1.784 396 0.170739
-chr1 11919310 11919389 chr1.785 352 0.050833
-chr1 11920555 11921134 chr1.786 637 2.09438
-chr1 11928312 11929587 chr1.787 706 3.04291
-chr1 11973919 11975541 chr1.788 778 4.21722
-chr1 11975727 11975967 chr1.789 434 0.332081
-chr1 12013365 12014345 chr1.790 869 5.96891
-chr1 12041403 12042004 chr1.791 453 0.435287
-chr1 12058298 12059198 chr1.792 505 0.780643
-chr1 12060328 12060406 chr1.793 321 0.00834494
-chr1 12060419 12060530 chr1.794 375 0.105754
-chr1 12072388 12072482 chr1.795 309 0.001827
-chr1 12081725 12083553 chr1.796 529 0.973503
-chr1 12083592 12084172 chr1.797 473 0.552283
-chr1 12100660 12100749 chr1.798 339 0.0294
-chr1 12112953 12113194 chr1.799 434 0.331642
-chr1 12119325 12119399 chr1.800 378 0.112809
-chr1 12127227 12127737 chr1.801 571 1.35524
-chr1 12137135 12138575 chr1.802 516 0.860251
-chr1 12144761 12145329 chr1.803 504 0.773191
-chr1 12146431 12146852 chr1.804 370 0.092743
-chr1 12147573 12148060 chr1.805 426 0.29298
-chr1 12152020 12152520 chr1.807 457 0.455083
-chr1 12154183 12154374 chr1.808 398 0.17961
-chr1 12155721 12155925 chr1.809 362 0.070915
-chr1 12156003 12156605 chr1.810 505 0.780809
-chr1 12160994 12161705 chr1.811 491 0.678695
-chr1 12162251 12162338 chr1.812 367 0.083161
-chr1 12166143 12166283 chr1.813 386 0.137527
-chr1 12166483 12166623 chr1.814 390 0.152242
-chr1 12166685 12166825 chr1.815 367 0.0831564
-chr1 12167125 12167365 chr1.816 365 0.0779965
-chr1 12167457 12168531 chr1.817 665 2.45889
-chr1 12171747 12172044 chr1.818 435 0.336281
-chr1 12172089 12173870 chr1.819 626 1.95922
-chr1 12183907 12183974 chr1.820 344 0.035861
-chr1 12197940 12198104 chr1.821 394 0.164764
-chr1 12198287 12199067 chr1.822 551 1.16823
-chr1 12202922 12203798 chr1.823 586 1.51165
-chr1 12204860 12205296 chr1.824 582 1.4676
-chr1 12223965 12223992 chr1.825 357 0.0617072
-chr1 12224082 12224704 chr1.826 776 4.18161
-chr1 12225014 12225192 chr1.827 360 0.0667278
-chr1 12225392 12225556 chr1.828 334 0.022319
-chr1 12237712 12238106 chr1.830 394 0.162787
-chr1 12238306 12238406 chr1.831 374 0.102884
-chr1 12250439 12251019 chr1.832 430 0.314475
-chr1 12296646 12296833 chr1.833 374 0.102431
-chr1 12308740 12309003 chr1.834 382 0.123975
-chr1 12332362 12333062 chr1.835 449 0.41104
-chr1 12336091 12336191 chr1.836 395 0.167755
-chr1 12336391 12336891 chr1.837 496 0.70959
-chr1 12338572 12340898 chr1.838 600 1.65857
-chr1 12379179 12380859 chr1.839 573 1.38276
-chr1 12402071 12402250 chr1.840 372 0.095808
-chr1 12404145 12404785 chr1.841 439 0.357204
-chr1 12427890 12428967 chr1.842 549 1.14903
-chr1 12429946 12430557 chr1.843 452 0.430647
-chr1 12430657 12430757 chr1.844 332 0.0193219
-chr1 12432758 12433138 chr1.845 450 0.419825
-chr1 12442728 12444136 chr1.846 576 1.40849
-chr1 12447658 12448191 chr1.847 393 0.159936
-chr1 12456074 12456274 chr1.849 381 0.123171
-chr1 12466961 12468243 chr1.850 579 1.44035
-chr1 12468308 12468343 chr1.851 317 0.00565047
-chr1 12469713 12470813 chr1.852 577 1.42181
-chr1 12472613 12473713 chr1.853 592 1.57865
-chr1 12474674 12475574 chr1.854 499 0.732854
-chr1 12504326 12505648 chr1.855 694 2.86522
-chr1 12507812 12508452 chr1.856 460 0.476398
-chr1 12589337 12590109 chr1.857 527 0.95416
-chr1 12595533 12595885 chr1.858 538 1.04484
-chr1 12595964 12596007 chr1.859 381 0.122329
-chr1 12598333 12599059 chr1.860 634 2.0554
-chr1 12602441 12602921 chr1.861 437 0.347268
-chr1 12609975 12615062 chr1.862 681 2.67612
-chr1 12628983 12629038 chr1.863 328 0.01499
-chr1 12653139 12653750 chr1.864 585 1.49641
-chr1 12709964 12710204 chr1.865 392 0.158386
-chr1 13536563 13536663 chr1.866 365 0.079255
-chr1 13648290 13648564 chr1.867 396 0.170599
-chr1 13648630 13648930 chr1.868 394 0.164951
-chr1 13662441 13662743 chr1.869 376 0.106974
-chr1 13664935 13665135 chr1.870 385 0.136126
-chr1 13737241 13738053 chr1.871 550 1.15861
-chr1 13771156 13773437 chr1.872 602 1.68301
-chr1 13774089 13774979 chr1.873 568 1.32514
-chr1 13802090 13803586 chr1.874 669 2.51079
-chr1 13805063 13805403 chr1.875 469 0.529197
-chr1 13805417 13805657 chr1.876 408 0.21799
-chr1 13806857 13807057 chr1.877 402 0.194273
-chr1 13807157 13807258 chr1.878 366 0.0805917
-chr1 13820234 13821790 chr1.879 863 5.85212
-chr1 13860441 13860681 chr1.881 405 0.206331
-chr1 13860716 13860994 chr1.882 425 0.289412
-chr1 13866367 13866907 chr1.883 419 0.263851
-chr1 13869148 13870002 chr1.884 499 0.730528
-chr1 14032227 14032506 chr1.885 412 0.232528
-chr1 14111264 14111804 chr1.886 402 0.192342
-chr1 14175862 14176462 chr1.887 401 0.190955
-chr1 14261116 14261256 chr1.888 348 0.043671
-chr1 14377545 14378045 chr1.889 447 0.398278
-chr1 14606946 14607186 chr1.890 354 0.054381
-chr1 14778554 14778888 chr1.891 414 0.240023
-chr1 14906714 14907214 chr1.892 434 0.333813
-chr1 14995701 14996075 chr1.893 565 1.3023
-chr1 14996277 14996382 chr1.894 466 0.512972
-chr1 15040834 15041229 chr1.895 431 0.319072
-chr1 15090292 15090325 chr1.896 331 0.018017
-chr1 15136259 15136736 chr1.897 448 0.404303
-chr1 15162138 15162749 chr1.898 409 0.221743
-chr1 15172653 15172993 chr1.899 443 0.377085
-chr1 15173052 15173192 chr1.900 393 0.160083
-chr1 15173226 15173392 chr1.901 352 0.0515823
-chr1 15200339 15200879 chr1.902 543 1.08883
-chr1 15209631 15210311 chr1.903 486 0.641895
-chr1 15257215 15257749 chr1.904 388 0.144293
-chr1 15276886 15277426 chr1.905 449 0.409087
-chr1 15394922 15395202 chr1.906 453 0.432337
-chr1 15395205 15395885 chr1.907 517 0.869571
-chr1 15395960 15396200 chr1.908 417 0.254147
-chr1 15404605 15405145 chr1.909 472 0.549452
-chr1 15413596 15414121 chr1.910 426 0.294237
-chr1 15417888 15418021 chr1.911 367 0.082711
-chr1 15480449 15480689 chr1.912 440 0.364072
-chr1 15480762 15483101 chr1.913 657 2.35582
-chr1 15483501 15484141 chr1.914 451 0.420121
-chr1 15488902 15489744 chr1.915 527 0.95526
-chr1 15502704 15503364 chr1.916 604 1.70467
-chr1 15523081 15523221 chr1.917 380 0.119752
-chr1 15595510 15597650 chr1.918 922 7.1369
-chr1 15597865 15599193 chr1.919 750 3.74345
-chr1 15649465 15650083 chr1.920 490 0.667183
-chr1 15650330 15651770 chr1.921 670 2.52282
-chr1 15655458 15655571 chr1.922 330 0.017011
-chr1 15656213 15656968 chr1.923 611 1.79092
-chr1 15674755 15675864 chr1.924 788 4.39598
-chr1 15688133 15690546 chr1.925 724 3.31213
-chr1 15733832 15734032 chr1.926 375 0.106116
-chr1 15755232 15755432 chr1.928 411 0.229849
-chr1 15755792 15757966 chr1.929 723 3.30323
-chr1 15768518 15769498 chr1.930 615 1.83402
-chr1 15769591 15769971 chr1.931 443 0.378344
-chr1 15812858 15813715 chr1.932 620 1.88854
-chr1 15828323 15828328 chr1.933 310 0.002096
-chr1 15829882 15830047 chr1.934 441 0.36691
-chr1 15830227 15830286 chr1.935 445 0.389135
-chr1 15830395 15830629 chr1.936 529 0.972392
-chr1 15863863 15864128 chr1.937 458 0.465222
-chr1 15875248 15875369 chr1.938 366 0.080629
-chr1 15887454 15887600 chr1.939 385 0.135358
-chr1 15905267 15905365 chr1.940 339 0.0289332
-chr1 15905461 15908288 chr1.941 827 5.1255
-chr1 15918864 15922205 chr1.942 738 3.54094
-chr1 15958522 15958769 chr1.943 419 0.264563
-chr1 15996735 15997035 chr1.944 414 0.239623
-chr1 16021081 16022481 chr1.945 707 3.05552
-chr1 16022581 16023617 chr1.946 452 0.430443
-chr1 16037778 16038658 chr1.947 505 0.776284
-chr1 16047135 16048662 chr1.948 774 4.14074
-chr1 16066441 16066479 chr1.949 331 0.018547
-chr1 16080746 16081381 chr1.950 441 0.371092
-chr1 16084523 16084632 chr1.951 456 0.450871
-chr1 16084650 16084783 chr1.952 344 0.0365067
-chr1 16127613 16128489 chr1.953 678 2.6351
-chr1 16142110 16142395 chr1.954 480 0.603216
-chr1 16145119 16145707 chr1.955 699 2.9408
-chr1 16145724 16145764 chr1.956 468 0.521564
-chr1 16150588 16151175 chr1.957 595 1.60769
-chr1 16215862 16216336 chr1.958 441 0.369728
-chr1 16226595 16227829 chr1.959 583 1.48114
-chr1 16229788 16230117 chr1.960 487 0.64524
-chr1 16231910 16232110 chr1.961 368 0.085952
-chr1 16233262 16233351 chr1.962 427 0.297411
-chr1 16233531 16234692 chr1.963 623 1.93145
-chr1 16239119 16240074 chr1.964 604 1.71212
-chr1 16259549 16259795 chr1.965 424 0.284513
-chr1 16259815 16259883 chr1.966 459 0.471239
-chr1 16277952 16279335 chr1.967 772 4.10972
-chr1 16287820 16289983 chr1.968 719 3.23859
-chr1 16307757 16309643 chr1.969 701 2.963
-chr1 16316085 16316553 chr1.970 459 0.469429
-chr1 16335846 16336486 chr1.971 442 0.372348
-chr1 16385123 16385373 chr1.972 375 0.105099
-chr1 16385463 16385803 chr1.973 369 0.0889854
-chr1 16423272 16424769 chr1.974 754 3.80381
-chr1 16424803 16425083 chr1.975 498 0.722923
-chr1 16438330 16440076 chr1.976 711 3.11638
-chr1 16448707 16448947 chr1.977 376 0.108169
-chr1 16458706 16458814 chr1.978 401 0.189876
-chr1 16459154 16459289 chr1.979 371 0.0930393
-chr1 16459554 16459754 chr1.980 372 0.0972496
-chr1 16492328 16492973 chr1.981 564 1.29202
-chr1 16511879 16513759 chr1.982 716 3.19559
-chr1 16524480 16524580 chr1.983 370 0.091235
-chr1 16567461 16567841 chr1.984 349 0.045555
-chr1 16570611 16571718 chr1.985 689 2.79814
-chr1 16584704 16585284 chr1.986 529 0.9694
-chr1 16585413 16586501 chr1.987 591 1.55995
-chr1 16586544 16587124 chr1.988 552 1.178
-chr1 16592295 16593134 chr1.989 526 0.945032
-chr1 16605956 16607226 chr1.990 578 1.42612
-chr1 16607330 16607426 chr1.991 331 0.018543
-chr1 16650721 16651561 chr1.992 495 0.703933
-chr1 16657017 16657717 chr1.993 447 0.399027
-chr1 16663475 16664375 chr1.994 538 1.05196
-chr1 16684068 16686560 chr1.995 820 4.99284
-chr1 16687546 16687708 chr1.996 348 0.043704
-chr1 16692836 16692860 chr1.997 395 0.16956
-chr1 16692903 16693329 chr1.998 557 1.21841
-chr1 16694833 16694937 chr1.999 372 0.097097
-chr1 16696709 16696711 chr1.1000 315 0.00459888
-chr1 16696773 16697030 chr1.1001 471 0.543454
-chr1 16703861 16703878 chr1.1003 312 0.002797
-chr1 16715636 16715735 chr1.1004 370 0.092628
-chr1 16715776 16717338 chr1.1005 868 5.95332
-chr1 16719238 16720038 chr1.1006 545 1.11388
-chr1 16724525 16725049 chr1.1007 379 0.116114
-chr1 16733239 16733339 chr1.1008 329 0.016083
-chr1 16737378 16737958 chr1.1009 536 1.02924
-chr1 16738014 16738594 chr1.1010 536 1.02924
-chr1 16738684 16739164 chr1.1011 512 0.83069
-chr1 16739206 16739786 chr1.1012 536 1.02924
-chr1 16770909 16770930 chr1.1013 376 0.108583
-chr1 16771358 16771728 chr1.1014 539 1.05694
-chr1 16771773 16772096 chr1.1015 373 0.0984549
-chr1 16772128 16773528 chr1.1016 617 1.85105
diff --git a/testdata/tribble/soapsnp.txt b/testdata/tribble/soapsnp.txt
deleted file mode 100644
index 906408c..0000000
--- a/testdata/tribble/soapsnp.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-chr1 00024553502 C T 8 T 34 2 2 C 0 0 0 2 2 1.00000 1.00000 1
-chr1 00032906555 T Y 0 C 34 1 1 T 0 0 0 1 1 0.00000 1.00000 1
-chr1 00043851998 T C 11 C 34 1 1 T 0 0 0 1 1 1.00000 1.00000 1
-chr1 00085336726 A G 9 G 34 1 1 A 0 0 0 1 1 1.00000 1.00000 1
-chr1 00089619960 G T 15 T 34 1 1 G 0 0 0 1 1 1.00000 1.00000 1
-chr1 00150459311 T C 25 C 18 2 2 T 0 0 0 2 2 1.00000 1.00000 1
-chr1 00150542507 C M 0 C 34 1 1 G 0 0 0 1 1 0.00000 1.00000 1
-chr1 00155208036 T G 8 G 34 2 2 T 0 0 0 2 2 1.00000 1.00000 1
-chr1 00159060586 G C 15 C 34 2 2 G 0 0 0 2 2 1.00000 1.00000 1
-chr1 00159279214 G A 4 A 34 1 1 G 0 0 0 1 1 1.00000 1.00000 1
-chr1 00173313412 A G 10 G 35 1 1 A 0 0 0 1 1 1.00000 1.00000 1
-chr1 00184407924 G A 12 A 34 1 1 G 0 0 0 1 1 1.00000 1.00000 1
-chr1 00205302577 G A 2 A 34 1 1 G 0 0 0 1 1 1.00000 1.00000 1
-chr2 00057129003 G A 1 A 35 1 1 G 0 0 0 1 1 1.00000 1.00000 1
-chr2 00068399444 T G 14 G 32 1 1 T 0 0 0 1 1 1.00000 1.00000 1
-chr2 00068399489 C G 4 G 2 2 2 C 0 0 0 2 2 1.00000 1.00000 1
-chr2 00074039384 A T 11 T 34 1 1 A 0 0 0 1 1 1.00000 1.00000 1
-chr2 00099388952 C A 2 A 34 2 2 C 0 0 0 2 2 1.00000 1.00000 0
-chr2 00129970560 G A 2 A 34 2 2 G 0 0 0 2 2 1.00000 1.00000 0
-chr2 00172106557 T C 20 C 33 2 2 T 0 0 0 2 2 1.00000 1.00000 1
-chr2 00190398016 G A 6 A 34 1 1 G 0 0 0 1 1 1.00000 1.00000 1
-chr2 00202177606 C T 32 T 32 1 1 C 0 0 0 1 1 1.00000 1.00000 1
-chr2 00230378724 C A 2 A 31 2 2 C 0 0 0 2 2 1.00000 1.00000 0
-chr2 00239133677 G A 0 A 33 1 1 G 0 0 0 1 1 1.00000 1.00000 1
diff --git a/testdata/tribble/split/test.bin.part1 b/testdata/tribble/split/test.bin.part1
deleted file mode 100644
index a128411..0000000
Binary files a/testdata/tribble/split/test.bin.part1 and /dev/null differ
diff --git a/testdata/tribble/split/test.bin.part2 b/testdata/tribble/split/test.bin.part2
deleted file mode 100644
index 011fd79..0000000
Binary files a/testdata/tribble/split/test.bin.part2 and /dev/null differ
diff --git a/testdata/tribble/split/test.bin.part3 b/testdata/tribble/split/test.bin.part3
deleted file mode 100644
index b8aa567..0000000
Binary files a/testdata/tribble/split/test.bin.part3 and /dev/null differ
diff --git a/testdata/tribble/split/test.bin.split b/testdata/tribble/split/test.bin.split
deleted file mode 100644
index 8d0fb5a..0000000
--- a/testdata/tribble/split/test.bin.split
+++ /dev/null
@@ -1,3 +0,0 @@
-test.bin.part1 4000
-test.bin.part2 4000
-test.bin.part3 4000
\ No newline at end of file
diff --git a/testdata/tribble/tabix/bigger.vcf.gz.tbi b/testdata/tribble/tabix/bigger.vcf.gz.tbi
deleted file mode 100644
index 232a1a2..0000000
Binary files a/testdata/tribble/tabix/bigger.vcf.gz.tbi and /dev/null differ
diff --git a/testdata/tribble/tabix/trioDup.vcf b/testdata/tribble/tabix/trioDup.vcf
deleted file mode 100644
index 39e4b90..0000000
--- a/testdata/tribble/tabix/trioDup.vcf
+++ /dev/null
@@ -1,75 +0,0 @@
-##fileformat=VCFv3.3
-##FILTER=GATK_STANDARD,"AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10"
-##FILTER=HARD_TO_VALIDATE,"MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1)"
-##FILTER=SnpCluster,"SNPs found in clusters,SNPs found in clusters,SNPs found in clusters"
-##FILTER=match-0,"(set eq 'Intersection' || set eq 'filteredInBoth')"
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AC,1,Integer,"Allele count in genotypes, for each ALT allele, in the same order as listed"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=AN,1,Integer,"Total number of alleles in called genotypes"
-##INFO=DB,1,Integer,"dbSNP membership"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##INFO=HRun,1,Integer,"Largest Contiguous Homopolymer Run of Variant Allele In Either Direction"
-##INFO=MQ,1,Float,"RMS Mapping Quality"
-##INFO=MQ0,1,Integer,"Total Mapping Quality Zero Reads"
-##INFO=QD,1,Float,"Variant Confidence/Quality by Depth"
-##INFO=SB,1,Float,"Strand Bias"
-##NA19238=../depthFilter/filtered.NA19238.chromX.SLX.maq.SRP000032.2009_07.glf
-##NA19239=../depthFilter/filtered.NA19239.chromX.SLX.maq.SRP000032.2009_11.glf
-##NA19240=../merged/NA19240.chromX.merged.glf
-##UG_assume_single_sample_reads=null
-##UG_base_model=EMPIRICAL
-##UG_genotype=false
-##UG_genotype_model=JOINT_ESTIMATE
-##UG_heterozygosity=0.0010
-##UG_include_experimental_annotations=false
-##UG_max_deletion_fraction=0.05
-##UG_max_mismatches_in_40bp_window=3
-##UG_min_base_quality_score=10
-##UG_min_confidence_threshold=50.0
-##UG_min_mapping_quality_score=10
-##UG_noSLOD=false
-##UG_output_all_callable_bases=false
-##UG_platform=SOLID
-##UG_poolSize=0
-##UG_use_reads_with_bad_mates=false
-##maxTotalDepth=1000
-##minMapQuality=30
-##minPosterior=0.9990
-##minTotalDepth=0
-##program=glfTrio
-##reference=human_b36_both.fasta
-##source=UnifiedGenotyper
-##source=VariantFiltration
-##source=VariantSelect
-##versionDate=Sun Sep 20 17:38:54 2009
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA19238 NA19239 NA19240
-1 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-2 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-3 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-4 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-4 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-5 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-6 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-7 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-8 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-9 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-10 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-11 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-12 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-13 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-14 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-15 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-16 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-17 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-18 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-19 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-20 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-21 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-22 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-X 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-Y 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
diff --git a/testdata/tribble/tabix/trioDup.vcf.gz b/testdata/tribble/tabix/trioDup.vcf.gz
deleted file mode 100644
index ccda746..0000000
Binary files a/testdata/tribble/tabix/trioDup.vcf.gz and /dev/null differ
diff --git a/testdata/tribble/tabix/trioDup.vcf.gz.tbi b/testdata/tribble/tabix/trioDup.vcf.gz.tbi
deleted file mode 100644
index 6bc4be2..0000000
Binary files a/testdata/tribble/tabix/trioDup.vcf.gz.tbi and /dev/null differ
diff --git a/testdata/tribble/test.bed b/testdata/tribble/test.bed
deleted file mode 100644
index 2a68645..0000000
--- a/testdata/tribble/test.bed
+++ /dev/null
@@ -1,9 +0,0 @@
-track name="test bed"
-#a comment
-chr1 100 101
-chr1 200 201
-chr1 300 301
-chr1 100000 100010
-chr1 100020 100040
-chr2 1 10
-chr2 20 30
diff --git a/testdata/tribble/test.gff b/testdata/tribble/test.gff
deleted file mode 100644
index 6a24793..0000000
--- a/testdata/tribble/test.gff
+++ /dev/null
@@ -1,9 +0,0 @@
-#header
-#cont
-chr1 100 101
-chr1 200 201
-chr1 300 301
-chr1 100000 100010
-chr1 100020 100040
-chr2 1 10
-chr2 20 30
\ No newline at end of file
diff --git a/testdata/tribble/test.tabix.bed.gz b/testdata/tribble/test.tabix.bed.gz
deleted file mode 100644
index 7c3b419..0000000
Binary files a/testdata/tribble/test.tabix.bed.gz and /dev/null differ
diff --git a/testdata/tribble/test.tabix.bed.gz.tbi b/testdata/tribble/test.tabix.bed.gz.tbi
deleted file mode 100644
index b9d16c8..0000000
Binary files a/testdata/tribble/test.tabix.bed.gz.tbi and /dev/null differ
diff --git a/testdata/tribble/testGeliText.txt b/testdata/tribble/testGeliText.txt
deleted file mode 100644
index 6c3d5cc..0000000
--- a/testdata/tribble/testGeliText.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-22 14438070 A 0 0 GG 33.2618 33.2618 0 0 0 0 0 0 0 33.2618 0 0
-22 14438200 G 0 0 AA 1.1886 1.1886 1.1886 0 0 0 0 0 0 0 0 0
-22 14441250 T 0 0 CC 53.483 53.483 0 0 0 0 53.483 0 0 0 0 0
-22 14447887 G 0 0 AA 12.4813 12.4813 12.4813 0 0 0 0 0 0 0 0 0
-22 14457860 C 0 0 AA 12.4084 12.4084 12.4084 0 0 0 0 0 0 0 0 0
-22 14458514 C 0 0 TT 7.5213 7.5213 0 0 0 0 0 0 0 0 0 7.5213
-22 14461115 T 0 0 AA 16.8074 16.8074 16.8074 0 0 0 0 0 0 0 0 0
-22 14461207 G 0 0 AA 16.2602 16.2602 16.2602 0 0 0 0 0 0 0 0 0
-22 14461877 G 0 0 CC 38.4419 38.4419 0 0 0 0 38.4419 0 0 0 0 0
-22 14477581 G 0 0 CC 100.1684 100.1684 0 0 0 0 100.1684 0 0 0 0 0
-22 14478631 C 0 0 GG 183.3861 183.3861 0 0 0 0 0 0 0 183.3861 0 0
-22 14481814 T 0 0 CC 85.2846 85.2846 0 0 0 0 85.2846 0 0 0 0 0
-22 14483033 G 0 0 AA 31.8788 31.8788 31.8788 0 0 0 0 0 0 0 0 0
-22 14483299 A 0 0 GG 77.8744 77.8744 0 0 0 0 0 0 0 77.8744 0 0
-22 14485386 T 0 0 CC 74.4269 74.4269 0 0 0 0 74.4269 0 0 0 0 0
-22 14485626 C 0 0 TT 113.7914 113.7914 0 0 0 0 0 0 0 0 0 113.7914
-22 14493000 C 0 0 AA 80.076 80.076 80.076 0 0 0 0 0 0 0 0 0
-22 14493115 T 0 0 CC 13.3876 13.3876 0 0 0 0 13.3876 0 0 0 0 0
-22 14493547 C 0 0 AA 66.7446 66.7446 66.7446 0 0 0 0 0 0 0 0 0
-22 14498096 C 0 0 TT 22.2114 22.2114 0 0 0 0 0 0 0 0 0 22.2114
-22 14500486 A 0 0 CC 40.1737 40.1737 0 0 0 0 40.1737 0 0 0 0 0
-22 14500558 C 0 0 AA 9.7267 9.7267 9.7267 0 0 0 0 0 0 0 0 0
-22 14513510 T 0 0 CC 0.371 0.371 0 0 0 0 0.371 0 0 0 0 0
-22 14515016 C 0 0 TT 18.3656 18.3656 0 0 0 0 0 0 0 0 0 18.3656
-22 14515375 C 0 0 AA 8.0465 8.0465 8.0465 0 0 0 0 0 0 0 0 0
-22 14518569 T 0 0 CC 7.0936 7.0936 0 0 0 0 7.0936 0 0 0 0 0
-22 14521164 G 0 0 AA 14.6779 14.6779 14.6779 0 0 0 0 0 0 0 0 0
-22 14521784 T 0 0 AA 103.5567 103.5567 103.5567 0 0 0 0 0 0 0 0 0
-22 14523455 G 0 0 AA 111.3576 111.3576 111.3576 0 0 0 0 0 0 0 0 0
-22 14523946 A 0 0 GG 557.6265 557.6265 0 0 0 0 0 0 0 557.6265 0 0
-22 14524113 T 0 0 CC 13.5924 13.5924 0 0 0 0 13.5924 0 0 0 0 0
-22 14529743 T 0 0 AA 14.9931 14.9931 14.9931 0 0 0 0 0 0 0 0 0
-22 14529851 G 0 0 AA 36.2328 36.2328 36.2328 0 0 0 0 0 0 0 0 0
-22 14530198 C 0 0 TT 10.9314 10.9314 0 0 0 0 0 0 0 0 0 10.9314
-22 14530589 C 0 0 AA 5.7191 5.7191 5.7191 0 0 0 0 0 0 0 0 0
-22 14532450 A 0 0 GG 36.3551 36.3551 0 0 0 0 0 0 0 36.3551 0 0
-22 14532603 G 0 0 CC 1.1431 1.1431 0 0 0 0 1.1431 0 0 0 0 0
-22 14533615 A 0 0 CC 76.6265 76.6265 0 0 0 0 76.6265 0 0 0 0 0
-22 14535726 A 0 0 GG 16.5307 16.5307 0 0 0 0 0 0 0 16.5307 0 0
-22 14537455 G 0 0 TT 8.0559 8.0559 0 0 0 0 0 0 0 0 0 8.0559
-22 14539060 G 0 0 AA 11.4875 11.4875 11.4875 0 0 0 0 0 0 0 0 0
-22 14539158 A 0 0 GG 8.9543 8.9543 0 0 0 0 0 0 0 8.9543 0 0
-22 14541357 T 0 0 CC 2.2916 2.2916 0 0 0 0 2.2916 0 0 0 0 0
-22 14543758 C 0 0 TT 5.108 5.108 0 0 0 0 0 0 0 0 0 5.108
-22 14556926 T 0 0 AA 101.0105 101.0105 101.0105 0 0 0 0 0 0 0 0 0
-22 14561744 T 0 0 CC 2.4103 2.4103 0 0 0 0 2.4103 0 0 0 0 0
-22 14579503 C 0 0 TT 49.7801 49.7801 0 0 0 0 0 0 0 0 0 49.7801
-22 14582170 C 0 0 TT 37.9647 37.9647 0 0 0 0 0 0 0 0 0 37.9647
-22 14591631 T 0 0 CC 2.5744 2.5744 0 0 0 0 2.5744 0 0 0 0 0
-22 14592250 A 0 0 GG 16.8241 16.8241 0 0 0 0 0 0 0 16.8241 0 0
diff --git a/testdata/tribble/testIntervalList.list b/testdata/tribble/testIntervalList.list
deleted file mode 100644
index 304d8fb..0000000
--- a/testdata/tribble/testIntervalList.list
+++ /dev/null
@@ -1,6 +0,0 @@
-chr1:1-100
-chr1:200-300
-chr1:500-600
-chr1:700-800
-chr1:900-1001
-chr1:1001-1002
diff --git a/testdata/tribble/tmp/.gitignore b/testdata/tribble/tmp/.gitignore
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/tribble/trio.vcf b/testdata/tribble/trio.vcf
deleted file mode 100644
index 8a24fb2..0000000
--- a/testdata/tribble/trio.vcf
+++ /dev/null
@@ -1,100 +0,0 @@
-##fileformat=VCFv3.2
-##fileformat=VCFv3.3
-##FILTER=GATK_STANDARD,"AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10"
-##FILTER=HARD_TO_VALIDATE,"MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1)"
-##FILTER=SnpCluster,"SNPs found in clusters,SNPs found in clusters,SNPs found in clusters"
-##FILTER=match-0,"(set eq 'Intersection' || set eq 'filteredInBoth')"
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AC,1,Integer,"Allele count in genotypes, for each ALT allele, in the same order as listed"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=AN,1,Integer,"Total number of alleles in called genotypes"
-##INFO=DB,1,Integer,"dbSNP membership"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##INFO=HRun,1,Integer,"Largest Contiguous Homopolymer Run of Variant Allele In Either Direction"
-##INFO=MQ,1,Float,"RMS Mapping Quality"
-##INFO=MQ0,1,Integer,"Total Mapping Quality Zero Reads"
-##INFO=QD,1,Float,"Variant Confidence/Quality by Depth"
-##INFO=SB,1,Float,"Strand Bias"
-##NA19238=../depthFilter/filtered.NA19238.chromX.SLX.maq.SRP000032.2009_07.glf
-##NA19239=../depthFilter/filtered.NA19239.chromX.SLX.maq.SRP000032.2009_11.glf
-##NA19240=../merged/NA19240.chromX.merged.glf
-##UG_assume_single_sample_reads=null
-##UG_base_model=EMPIRICAL
-##UG_genotype=false
-##UG_genotype_model=JOINT_ESTIMATE
-##UG_heterozygosity=0.0010
-##UG_include_experimental_annotations=false
-##UG_max_deletion_fraction=0.05
-##UG_max_mismatches_in_40bp_window=3
-##UG_min_base_quality_score=10
-##UG_min_confidence_threshold=50.0
-##UG_min_mapping_quality_score=10
-##UG_noSLOD=false
-##UG_output_all_callable_bases=false
-##UG_platform=SOLID
-##UG_poolSize=0
-##UG_use_reads_with_bad_mates=false
-##maxTotalDepth=1000
-##minMapQuality=30
-##minPosterior=0.9990
-##minTotalDepth=0
-##program=glfTrio
-##reference=human_b36_both.fasta
-##source=UnifiedGenotyper
-##source=VariantFiltration
-##source=VariantSelect
-##versionDate=Sun Sep 20 17:38:54 2009
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA19238 NA19239 NA19240
-1 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-1 4793 rs6682385 A G 1687.16 GATK_STANDARD;HARD_TO_VALIDATE AB=0.54;AC=3;AF=0.50;AN=6;DB=1;DP=242;Dels=0.00;HRun=0;MQ=77.94;MQ0=43;QD=6.97;SB=-891.19;set=filteredInBoth GT:DP:GQ 0/1:15:4.94 0/1:58:99.00 0/1:73:99.00
-1 45162 rs10399749 C T 634.21 HARD_TO_VALIDATE AB=0.63;AC=3;AF=0.50;AN=6;DB=1;DP=67;Dels=0.00;HRun=0;MQ=115.93;MQ0=7;QD=12.44;SB=-359.74;set=filteredInBoth GT:DP:GQ 1/1:6:18.05 0/0:12:35.94 0/1:35:99.00
-1 48677 . G A 1049.06 HARD_TO_VALIDATE AB=0.48;AC=2;AF=0.33;AN=6;DB=0;DP=88;Dels=0.00;HRun=1;MQ=120.08;MQ0=12;QD=14.78;SB=-423.81;set=filteredInBoth GT:DP:GQ 1/0:16:99.00 0/0:12:36.07 1/0:42:99.00
-1 56724 rs28375825 C T 65.41 GATK_STANDARD;HARD_TO_VALIDATE AB=0.88;AC=1;AF=0.50;AN=2;DB=1;DP=145;Dels=0.00;HRun=0;MQ=42.19;MQ0=140;QD=1.01;SB=-44.70;set=filteredInBoth GT:DP:GQ ./. ./. 0/1:4:16.39
-1 61969 . T C 98.69 GATK_STANDARD;HARD_TO_VALIDATE AC=2;AF=1.00;AN=2;DB=0;DP=83;Dels=0.00;HRun=0;MQ=62.34;MQ0=78;QD=2.30;SB=-40.43;set=filteredInBoth GT:DP:GQ ./. ./. 1/1:5:15.00
-1 66069 rs6672770 T C 129.77 GATK_STANDARD;HARD_TO_VALIDATE AB=0.79;AC=1;AF=0.50;AN=2;DB=1;DP=81;Dels=0.00;HRun=1;MQ=79.82;MQ0=72;QD=3.24;SB=-34.43;set=filteredInBoth GT:DP:GQ ./. ./. 1/0:8:49.36
-1 72824 . C T 442.04 HARD_TO_VALIDATE AB=0.64;AC=2;AF=0.33;AN=6;DB=0;DP=77;Dels=0.00;HRun=1;MQ=110.14;MQ0=34;QD=7.76;SB=-223.18;set=filteredInBoth GT:DP:GQ 0/1:8:45.25 0/0:6:17.89 0/1:19:99.00
-1 77053 rs1524602 G A 550.09 GATK_STANDARD;HARD_TO_VALIDATE AC=4;AF=0.67;AN=6;DB=1;DP=79;Dels=0.00;HRun=0;MQ=107.50;MQ0=42;QD=9.02;SB=-259.27;set=filteredInBoth GT:DP:GQ 1/1:1:3.00 0/0:8:23.91 1/1:15:45.14
-1 77999 rs59529791 G A 405.10 GATK_STANDARD;HARD_TO_VALIDATE AB=0.54;AC=1;AF=0.50;AN=2;DB=1;DP=149;Dels=0.00;HRun=0;MQ=97.90;MQ0=125;QD=4.82;SB=-212.96;set=filteredInBoth GT:DP:GQ ./. ./. 1/0:18:99.00
-1 78032 rs940550 C T 326.66 GATK_STANDARD;HARD_TO_VALIDATE AB=0.62;AC=2;AF=0.33;AN=6;DB=1;DP=166;Dels=0.00;HRun=0;MQ=106.31;MQ0=90;QD=2.68;SB=-159.68;set=filteredInBoth GT:DP:GQ 0/1:9:55.54 0/0:13:19.59 0/1:36:99.00
-1 78201 rs55700207 G A 727.51 HARD_TO_VALIDATE AB=0.69;AC=2;AF=0.33;AN=6;DB=1;DP=156;Dels=0.00;HRun=1;MQ=123.99;MQ0=18;QD=6.11;SB=-313.22;set=filteredInBoth GT:DP:GQ 1/0:15:71.23 0/0:30:89.75 1/0:76:99.00
-1 79870 rs6600761 G A 446.08 GATK_STANDARD;HARD_TO_VALIDATE AB=0.79;AC=5;AF=0.83;AN=6;DB=1;DP=144;Dels=0.00;HRun=0;MQ=63.25;MQ0=120;QD=3.10;SB=-207.47;set=filteredInBoth GT:DP:GQ 1/1:1:3.01 1/0:4:39.73 1/1:16:1.78
-1 79914 rs7545609 C T 330.71 GATK_STANDARD;HARD_TO_VALIDATE AB=0.43;AC=3;AF=0.75;AN=4;DB=1;DP=113;Dels=0.00;HRun=1;MQ=52.52;MQ0=95;QD=3.31;SB=-87.43;set=filteredInBoth GT:DP:GQ ./. 1/1:3:8.99 0/1:11:15.70
-1 81468 rs13328714 C T 1069.45 GATK_STANDARD;HARD_TO_VALIDATE AB=0.62;AC=3;AF=0.50;AN=6;DB=1;DP=140;Dels=0.00;HRun=0;MQ=54.71;MQ0=81;QD=7.64;SB=-475.44;set=filteredInBoth GT:DP:GQ 0/1:10:34.30 0/1:6:59.37 0/1:31:84.17
-1 98093 rs9726668 C T 112.02 GATK_STANDARD;HARD_TO_VALIDATE AC=2;AF=1.00;AN=2;DB=1;DP=129;Dels=0.00;HRun=1;MQ=44.79;MQ0=116;QD=2.15;SB=-79.41;set=filteredInBoth GT:DP:GQ ./. ./. 1/1:4:12.04
-1 130294 . A T 197.39 GATK_STANDARD;HARD_TO_VALIDATE AB=0.86;AC=1;AF=0.50;AN=2;DB=0;DP=103;Dels=0.00;HRun=0;MQ=90.59;MQ0=90;QD=3.72;SB=-106.74;set=filteredInBoth GT:DP:GQ ./. ./. 0/1:11:99.00
-1 235923 . G A 594.00 HARD_TO_VALIDATE AB=0.60;AC=2;AF=0.33;AN=6;DB=0;DP=109;Dels=0.00;HRun=2;MQ=79.25;MQ0=18;QD=6.91;SB=-296.81;set=filteredInBoth GT:DP:GQ 0/0:18:52.41 1/0:21:99.00 1/0:38:99.00
-1 526849 rs9918921 G T 729.63 GATK_STANDARD;HARD_TO_VALIDATE AB=0.70;AC=3;AF=0.50;AN=6;DB=1;DP=144;Dels=0.00;HRun=1;MQ=58.35;MQ0=63;QD=5.07;SB=-386.25;set=filteredInBoth GT:DP:GQ 0/1:22:99.00 0/1:9:5.72 0/1:32:99.00
-1 554535 rs2792856 A C 460.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.98;AC=2;AF=0.33;AN=6;DB=1;DP=5992;Dels=0.00;HRun=0;MQ=24.07;MQ0=3765;QD=0.17;SB=-263.03;set=filteredInBoth GT:DP:GQ 0/1:11:11.51 0/0:1904:99.00 0/1:49:99.00
-1 555454 rs7416152 C T 337.28 GATK_STANDARD;HARD_TO_VALIDATE AB=0.69;AC=1;AF=0.17;AN=6;DB=1;DP=613;Dels=0.00;HRun=0;MQ=69.04;MQ0=411;QD=1.44;SB=-37.69;set=filteredInBoth GT:DP:GQ 0/0:28:10.08 0/0:15:44.56 0/1:45:99.00
-1 556655 rs9283152 T C 271.50 HARD_TO_VALIDATE AB=0.56;AC=3;AF=0.50;AN=6;DB=1;DP=143;Dels=0.00;HRun=0;MQ=113.17;MQ0=28;QD=1.90;SB=-150.20;set=filteredInBoth GT:DP:GQ 1/0:15:11.69 1/0:6:0.60 1/0:43:99.00
-1 556738 rs2185539 C T 969.07 GATK_STANDARD;HARD_TO_VALIDATE AB=0.98;AC=2;AF=0.33;AN=6;DB=1;DP=6824;Dels=0.00;HRun=0;MQ=14.67;MQ0=6699;QD=0.19;SB=-473.67;set=filteredInBoth GT:DP:GQ 0/1:12:41.37 0/0:10:29.98 0/1:49:99.00
-1 557239 rs1972376 G A 206.76 GATK_STANDARD;HARD_TO_VALIDATE AB=0.99;AC=2;AF=0.33;AN=6;DB=1;DP=9777;Dels=0.00;HRun=0;MQ=14.50;MQ0=9698;QD=0.03;SB=-116.61;set=filteredInBoth GT:DP:GQ 0/0:12:35.59 1/0:6:3.58 1/0:34:99.00
-1 558119 rs4098612 C T 883.08 GATK_STANDARD;HARD_TO_VALIDATE AB=0.68;AC=3;AF=0.50;AN=6;DB=1;DP=846;Dels=0.00;HRun=0;MQ=61.17;MQ0=599;QD=1.04;SB=-257.60;set=filteredInBoth GT:DP:GQ 0/1:38:99.00 0/1:29:99.00 0/1:89:99.00
-1 558554 rs8179256 T C 148.11 GATK_STANDARD;HARD_TO_VALIDATE AB=0.83;AC=2;AF=0.33;AN=6;DB=1;DP=203;Dels=0.00;HRun=1;MQ=120.71;MQ0=124;QD=0.87;SB=-66.34;set=filteredInBoth GT:DP:GQ 1/0:4:18.64 0/0:5:15.05 1/0:51:99.00
-1 558581 rs7417964 C T 290.58 GATK_STANDARD;HARD_TO_VALIDATE AB=0.82;AC=2;AF=0.33;AN=6;DB=1;DP=265;Dels=0.00;HRun=0;MQ=111.81;MQ0=79;QD=1.49;SB=-93.95;set=filteredInBoth GT:DP:GQ 0/1:13:14.08 0/0:22:47.05 0/1:77:99.00
-1 588696 . T C 218.82 GATK_STANDARD;HARD_TO_VALIDATE AB=0.54;AC=2;AF=0.33;AN=6;DB=0;DP=134;Dels=0.00;HRun=0;MQ=83.72;MQ0=47;QD=2.77;SB=-104.66;set=filteredInBoth GT:DP:GQ 1/0:24:61.33 1/0:20:99.00 0/0:26:78.22
-1 593378 . C A 251.81 GATK_STANDARD;HARD_TO_VALIDATE AB=0.79;AC=3;AF=0.50;AN=6;DB=0;DP=87;Dels=0.00;HRun=0;MQ=89.00;MQ0=57;QD=3.87;SB=-90.25;set=filteredInBoth GT:DP:GQ 0/0:1:3.01 1/1:2:6.01 1/0:18:99.00
-1 593379 . C A 264.50 GATK_STANDARD;HARD_TO_VALIDATE AB=0.80;AC=3;AF=0.50;AN=6;DB=0;DP=88;Dels=0.00;HRun=0;MQ=88.49;MQ0=59;QD=4.01;SB=-90.26;set=filteredInBoth GT:DP:GQ 0/0:2:6.02 1/1:2:6.02 1/0:17:99.00
-1 625979 rs3871845 G C 930.94 GATK_STANDARD;HARD_TO_VALIDATE AC=6;AF=1.00;AN=6;DB=1;DP=107;Dels=0.00;HRun=0;MQ=52.60;MQ0=65;QD=8.70;SB=-330.39;set=filteredInBoth GT:DP:GQ 1/1:2:6.02 1/1:13:3.64 1/1:13:39.08
-1 658074 . G A 158.20 GATK_STANDARD;HARD_TO_VALIDATE AB=0.85;AC=1;AF=0.50;AN=2;DB=0;DP=128;Dels=0.00;HRun=1;MQ=107.95;MQ0=103;QD=2.11;SB=-62.45;set=filteredInBoth GT:DP:GQ ./. ./. 1/0:18:99.00
-1 670109 . G A 261.26 SnpCluster;HARD_TO_VALIDATE AB=0.64;AC=3;AF=0.50;AN=6;DB=0;DP=50;Dels=0.00;HRun=0;MQ=57.55;MQ0=22;QD=7.92;SB=-162.18;set=filteredInBoth GT:DP:GQ 0/0:6:17.87 1/1:4:12.03 1/0:10:99.00
-1 670115 . A G 95.67 SnpCluster;HARD_TO_VALIDATE AB=0.47;AC=1;AF=0.17;AN=6;DB=0;DP=49;Dels=0.00;HRun=0;MQ=45.30;MQ0=22;QD=6.38;SB=-48.65;set=filteredInBoth GT:DP:GQ 0/1:6:17.65 0/0:4:12.03 0/0:9:27.08
-1 695744 . C T 287.83 0 AB=0.53;AC=2;AF=0.33;AN=6;DB=0;DP=115;Dels=0.00;HRun=0;MQ=134.37;MQ0=4;QD=8.72;SB=-139.69;set=Intersection GT:DP:GQ 0/1:6:39.04 0/1:17:99.00 0/0:67:99.00
-1 705134 . G C 479.55 HARD_TO_VALIDATE AB=0.46;AC=2;AF=0.33;AN=6;DB=0;DP=115;Dels=0.00;HRun=0;MQ=103.92;MQ0=31;QD=8.56;SB=-251.32;set=filteredInBoth GT:DP:GQ 1/0:7:14.41 1/0:20:99.00 0/0:40:99.00
-1 713682 rs11804171 T A 146.13 0 AB=0.49;AC=2;AF=0.33;AN=6;DB=1;DP=137;Dels=0.00;HRun=1;MQ=162.31;MQ0=7;QD=3.32;SB=-73.71;set=Intersection GT:DP:GQ 1/0:10:99.00 1/0:23:78.43 0/0:80:99.00
-1 714613 . T A 128.46 GATK_STANDARD;HARD_TO_VALIDATE AB=0.85;AC=1;AF=0.17;AN=6;DB=0;DP=312;Dels=0.00;HRun=0;MQ=62.11;MQ0=223;QD=1.01;SB=-96.00;set=filteredInBoth GT:DP:GQ 0/0:8:23.94 0/0:8:24.02 1/0:30:99.00
-1 714914 . G C 1014.25 GATK_STANDARD;HARD_TO_VALIDATE AB=0.89;AC=3;AF=0.50;AN=6;DB=0;DP=1105;Dels=0.00;HRun=0;MQ=40.04;MQ0=802;QD=0.92;SB=-342.49;set=filteredInBoth GT:DP:GQ 1/0:19:99.00 1/0:63:99.00 1/0:121:99.00
-1 714919 . C T 182.40 GATK_STANDARD;HARD_TO_VALIDATE AB=0.93;AC=2;AF=0.33;AN=6;DB=0;DP=1718;Dels=0.00;HRun=1;MQ=31.70;MQ0=1407;QD=0.14;SB=-70.23;set=filteredInBoth GT:DP:GQ 0/0:16:13.44 0/1:47:99.00 0/1:116:71.35
-1 715102 . C T 464.73 SnpCluster;GATK_STANDARD;HARD_TO_VALIDATE AB=0.91;AC=2;AF=0.33;AN=6;DB=0;DP=1683;Dels=0.00;HRun=1;MQ=35.16;MQ0=913;QD=0.40;SB=-83.11;set=filteredInBoth GT:DP:GQ 0/0:84:37.60 0/1:133:36.77 0/1:137:99.00
-1 715843 . C T 246.91 SnpCluster;GATK_STANDARD;HARD_TO_VALIDATE AB=0.57;AC=3;AF=0.75;AN=4;DB=0;DP=573;Dels=0.00;HRun=1;MQ=54.60;MQ0=530;QD=0.60;SB=-78.54;set=filteredInBoth GT:DP:GQ ./. 1/1:2:6.00 0/1:21:99.00
-1 716461 . A T 15831.28 GATK_STANDARD;HARD_TO_VALIDATE AB=0.39;AC=3;AF=0.50;AN=6;DB=0;DP=4568;Dels=0.00;HRun=1;MQ=25.76;MQ0=2971;QD=3.47;SB=-4224.71;set=filteredInBoth GT:DP:GQ 0/1:198:99.00 0/1:47:99.00 0/1:355:99.00
-1 716471 . A T 63.29 GATK_STANDARD;HARD_TO_VALIDATE AB=0.84;AC=2;AF=0.33;AN=6;DB=0;DP=1752;Dels=0.00;HRun=1;MQ=26.79;MQ0=1662;QD=0.05;SB=-6.09;set=filteredInBoth GT:DP:GQ 0/1:2:22.36 0/0:5:15.04 0/1:31:67.13
-1 716513 . G T 355.52 GATK_STANDARD;HARD_TO_VALIDATE AB=0.87;AC=1;AF=0.17;AN=6;DB=0;DP=432;Dels=0.00;HRun=1;MQ=67.96;MQ0=365;QD=1.74;SB=-22.88;set=filteredInBoth GT:DP:GQ 0/0:5:15.03 0/0:9:26.77 0/1:37:99.00
-1 716514 . C A 297.66 GATK_STANDARD;HARD_TO_VALIDATE AB=0.90;AC=1;AF=0.17;AN=6;DB=0;DP=384;Dels=0.00;HRun=1;MQ=72.11;MQ0=313;QD=1.60;SB=-30.31;set=filteredInBoth GT:DP:GQ 0/0:6:9.42 0/0:11:24.43 1/0:38:99.00
-1 716758 . A G 95.95 GATK_STANDARD;HARD_TO_VALIDATE AB=0.51;AC=2;AF=0.33;AN=6;DB=0;DP=484;Dels=0.00;HRun=1;MQ=36.47;MQ0=449;QD=0.26;SB=-91.54;set=filteredInBoth GT:DP:GQ 0/0:1:3.01 0/1:4:18.64 0/1:17:99.00
-1 723728 . A G 314.08 GATK_STANDARD;HARD_TO_VALIDATE AB=0.56;AC=2;AF=0.33;AN=6;DB=0;DP=87;Dels=0.00;HRun=2;MQ=78.26;MQ0=55;QD=4.69;SB=-169.71;set=filteredInBoth GT:DP:GQ 0/0:3:8.98 0/1:5:19.54 0/1:16:99.00
-1 726158 . A T 365.11 0 AB=0.53;AC=2;AF=0.33;AN=6;DB=0;DP=73;Dels=0.01;HRun=6;MQ=84.48;MQ0=0;QD=8.11;SB=-183.35;set=Intersection GT:DP:GQ 0/1:17:99.00 0/1:23:99.00 0/0:26:75.17
diff --git a/testdata/tribble/trio.vcf.idx b/testdata/tribble/trio.vcf.idx
deleted file mode 100644
index b3aaaff..0000000
Binary files a/testdata/tribble/trio.vcf.idx and /dev/null differ
diff --git a/testdata/tribble/trioDup.vcf b/testdata/tribble/trioDup.vcf
deleted file mode 100644
index 39e4b90..0000000
--- a/testdata/tribble/trioDup.vcf
+++ /dev/null
@@ -1,75 +0,0 @@
-##fileformat=VCFv3.3
-##FILTER=GATK_STANDARD,"AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10,AB > 0.75 || DP > 360 || MQ0 > 40 || SB > -0.10"
-##FILTER=HARD_TO_VALIDATE,"MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1),MQ0 >= 4 && ((MQ0 / (1.0 * DP)) > 0.1)"
-##FILTER=SnpCluster,"SNPs found in clusters,SNPs found in clusters,SNPs found in clusters"
-##FILTER=match-0,"(set eq 'Intersection' || set eq 'filteredInBoth')"
-##FORMAT=DP,1,Integer,"Read Depth (only filtered reads used for calling)"
-##FORMAT=GQ,1,Integer,"Genotype Quality"
-##FORMAT=GT,1,String,"Genotype"
-##INFO=AB,1,Float,"Allele Balance for hets (ref/(ref+alt))"
-##INFO=AC,1,Integer,"Allele count in genotypes, for each ALT allele, in the same order as listed"
-##INFO=AF,1,Float,"Allele Frequency"
-##INFO=AN,1,Integer,"Total number of alleles in called genotypes"
-##INFO=DB,1,Integer,"dbSNP membership"
-##INFO=DP,1,Integer,"Total Depth"
-##INFO=Dels,1,Float,"Fraction of Reads Containing Spanning Deletions"
-##INFO=HRun,1,Integer,"Largest Contiguous Homopolymer Run of Variant Allele In Either Direction"
-##INFO=MQ,1,Float,"RMS Mapping Quality"
-##INFO=MQ0,1,Integer,"Total Mapping Quality Zero Reads"
-##INFO=QD,1,Float,"Variant Confidence/Quality by Depth"
-##INFO=SB,1,Float,"Strand Bias"
-##NA19238=../depthFilter/filtered.NA19238.chromX.SLX.maq.SRP000032.2009_07.glf
-##NA19239=../depthFilter/filtered.NA19239.chromX.SLX.maq.SRP000032.2009_11.glf
-##NA19240=../merged/NA19240.chromX.merged.glf
-##UG_assume_single_sample_reads=null
-##UG_base_model=EMPIRICAL
-##UG_genotype=false
-##UG_genotype_model=JOINT_ESTIMATE
-##UG_heterozygosity=0.0010
-##UG_include_experimental_annotations=false
-##UG_max_deletion_fraction=0.05
-##UG_max_mismatches_in_40bp_window=3
-##UG_min_base_quality_score=10
-##UG_min_confidence_threshold=50.0
-##UG_min_mapping_quality_score=10
-##UG_noSLOD=false
-##UG_output_all_callable_bases=false
-##UG_platform=SOLID
-##UG_poolSize=0
-##UG_use_reads_with_bad_mates=false
-##maxTotalDepth=1000
-##minMapQuality=30
-##minPosterior=0.9990
-##minTotalDepth=0
-##program=glfTrio
-##reference=human_b36_both.fasta
-##source=UnifiedGenotyper
-##source=VariantFiltration
-##source=VariantSelect
-##versionDate=Sun Sep 20 17:38:54 2009
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA19238 NA19239 NA19240
-1 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-2 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-3 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-4 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-4 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-5 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-6 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-7 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-8 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-9 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-10 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-11 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-12 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-13 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-14 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-15 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-16 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-17 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-18 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-19 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-20 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-21 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-22 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-X 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
-Y 327 . T C 666.18 GATK_STANDARD;HARD_TO_VALIDATE AB=0.74;AC=3;AF=0.50;AN=6;DB=0;DP=936;Dels=0.00;HRun=3;MQ=34.66;MQ0=728;QD=0.71;SB=-268.74;set=filteredInBoth GT:DP:GQ 1/0:10:62.65 1/0:37:99.00 1/0:53:99.00
diff --git a/testdata/tribble/vcfexample.vcf b/testdata/tribble/vcfexample.vcf
deleted file mode 100644
index 5d482c9..0000000
--- a/testdata/tribble/vcfexample.vcf
+++ /dev/null
@@ -1,12 +0,0 @@
-##format=VCRv3.2
-##fileDate=20090805
-##source=myImputationProgramV3.1
-##reference=1000GenomesPilot-NCBI36
-##phasing=partial
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
-20 14370 rs6054257 G A 29 0 NS=58;DP=258;AF=0.786 GT:GQ:DP:HQ 0|0:48:1:51,51 1|0:48:8:51,51 1/1:43:5
-20 15330 . T A 3 q10 NS=55;DP=202;AF=0.024 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3
-20 111096 rs6040355 A G 67 0 NS=55;DP=276;AF=0.421,0.579;AA=T GT:GQ:DP:HQ 1|0:21:6:23,27 0|1:2:0:18,2 0/0:35:4
-20 120237 . T . 47 0 NS=57;DP=257;AA=T GT:GQ:DP:HQ 0|0:54:7:56,60 0|0:48:4:51,51 0/0:61:2
-20 123456 microsat1 G D4 50 0 NS=55;DP=250;AA=G GT:GQ:DP 0/1:35:4 0/1:17:2 1/1:40:3
-20 123457 microsat1 G IGA 50 0 NS=55;DP=250;AA=G GT:GQ:DP 0/1:35:4 0/1:17:2 1/1:40:3
diff --git a/testdata/tribble/vcfexample.vcf.gz b/testdata/tribble/vcfexample.vcf.gz
deleted file mode 100644
index 9d2b1d0..0000000
Binary files a/testdata/tribble/vcfexample.vcf.gz and /dev/null differ
diff --git a/testdata/tribble/vcfexample.vcf.gz.tbi b/testdata/tribble/vcfexample.vcf.gz.tbi
deleted file mode 100644
index 194073c..0000000
Binary files a/testdata/tribble/vcfexample.vcf.gz.tbi and /dev/null differ
diff --git a/testdata/variant/HiSeq.10000.vcf b/testdata/variant/HiSeq.10000.vcf
deleted file mode 100644
index a304ba2..0000000
--- a/testdata/variant/HiSeq.10000.vcf
+++ /dev/null
@@ -1,10001 +0,0 @@
-##fileformat=VCFv4.0
-##FILTER=<ID=ABFilter,Description="AB 0.75 && DP 40">
-##FILTER=<ID=DPFilter,Description="DP 120 || SB -0.10">
-##FILTER=<ID=FDRtranche0.00to0.10,Description="FDR tranche level at qual 0.06">
-##FILTER=<ID=FDRtranche0.10to1.00,Description="FDR tranche level at qual 0.03">
-##FILTER=<ID=FDRtranche1.00to2.00,Description="FDR tranche level at qual 0.02">
-##FILTER=<ID=FDRtranche2.00to10.00+,Description="FDR tranche level at qual > 0.06">
-##FILTER=<ID=FDRtranche2.00to10.00,Description="FDR tranche level at qual unknown">
-##FILTER=<ID=HARD_TO_VALIDATE,Description="MQ0 = 4 && ((MQ0 / (1.0 * DP)) 0.1)">
-##FILTER=<ID=Indel,Description="Overlaps a user-input mask">
-##FILTER=<ID=LowQual,Description="Low quality">
-##FILTER=<ID=LowQual,Description="QUAL 50.0">
-##FILTER=<ID=SnpCluster,Description="SNPs found in clusters">
-##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="Read Depth (only filtered reads used for calling)">
-##FORMAT=<ID=GL,Number=3,Type=Float,Description="Log-scaled likelihoods for AA,AB,BB genotypes where A=ref and B=alt; not applicable if site is not biallelic">
-##FORMAT=<ID=GQ,Number=1,Type=Float,Description="Genotype Quality">
-##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
-##INFO=<ID=AC,Number=.,Type=Integer,Description="Allele count in genotypes, for each ALT allele, in the same order as listed">
-##INFO=<ID=AF,Number=.,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=DB,Number=0,Type=Flag,Description="dbSNP Membership">
-##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
-##INFO=<ID=Dels,Number=1,Type=Float,Description="Fraction of Reads Containing Spanning Deletions">
-##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 two (and only two) segregating haplotypes">
-##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=OQ,Number=1,Type=Float,Description="The original variant quality score">
-##INFO=<ID=QD,Number=1,Type=Float,Description="Variant Confidence/Quality by Depth">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##UnifiedGenotyper="analysis_type=UnifiedGenotyper input_file=[/humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-23/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-24/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessingPapers/scriptsToMakeBams/Q-2970 at gsa2-1-temp-5/NA12878.HiSeq.WGS.bwa.cleaned.recal.bam, /humgen/1kg/analysis/bamsForDataProcessi [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null read_filter=[] intervals=null excludeIntervals=[chrM, chrY] reference_sequence=/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta rodBind=[variant,VCF,wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.vcf, mask,Bed,wgs.v9/HiSeq.WGS.cleaned.indels.10.mask] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null hapmap=null hapmap_chip=null out=wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.in [...]
-##VariantFiltration="analysis_type=VariantFiltration input_file=[] read_buffer_size=null read_filter=[] intervals=null excludeIntervals=[chrM, chrY] reference_sequence=/seq/references/Homo_sapiens_assembly18/v0/Homo_sapiens_assembly18.fasta rodBind=[variant,VCF,wgs.v9/HiSeq.WGS.cleaned.ug.vcf] rodToIntervalTrackName=null BTI_merge_rule=UNION DBSNP=null hapmap=null hapmap_chip=null out=wgs.v9/HiSeq.WGS.cleaned.ug.snpfiltered.vcf err=null outerr=null filterZeroMappingQualityReads=false dow [...]
-##source=VariantOptimizer
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878
-chr1 109 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1019;Dels=0.00;HRun=0;HaplotypeScore=686.65;MQ=19.20;MQ0=288;OQ=2175.54;QD=2.13;SB=-1042.18 GT:AD:DP:GL:GQ 0/1:610,327:308:-316.30,-95.47,-803.03:99
-chr1 147 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=348;Dels=0.01;HRun=2;HaplotypeScore=268.66;MQ=20.23;MQ0=105;OQ=196.24;QD=0.56;SB=-76.48 GT:AD:DP:GL:GQ 0/1:294,49:118:-57.87,-34.96,-338.46:99
-chr1 177 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=432;Dels=0.02;HRun=2;HaplotypeScore=404.17;MQ=17.76;MQ0=153;OQ=697.20;QD=1.61;SB=-140.54 GT:AD:DP:GL:GQ 0/1:283,140:122:-108.58,-35.57,-292.84:99
-chr1 180 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=630;Dels=0.01;HRun=2;HaplotypeScore=495.41;MQ=14.22;MQ0=327;OQ=885.33;QD=1.41;SB=-412.44 GT:AD:DP:GL:GQ 0/1:466,154:104:-122.27,-30.46,-246.17:99
-chr1 234 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=336;Dels=0.00;HRun=1;HaplotypeScore=423.95;MQ=19.45;MQ0=111;OQ=596.60;QD=1.78;SB=-230.12 GT:AD:DP:GL:GQ 0/1:267,67:106:-94.87,-31.93,-297.68:99
-chr1 235 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=326;Dels=0.00;HRun=2;HaplotypeScore=391.04;MQ=19.68;MQ0=106;OQ=580.03;QD=1.78;SB=-219.50 GT:AD:DP:GL:GQ 0/1:274,47:105:-99.60,-38.31,-293.27:99
-chr1 250 . A C 22.88 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=182;Dels=0.01;HRun=3;HaplotypeScore=244.83;MQ=21.91;MQ0=52;QD=0.13;SB=-23.67 GT:AD:DP:GL:GQ 0/1:148,33:70:-26.66,-21.09,-215.78:55.69
-chr1 291 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=284.50;MQ=20.72;MQ0=39;OQ=529.94;QD=3.93;SB=-160.31 GT:AD:DP:GL:GQ 0/1:87,43:32:-69.55,-13.28,-54.44:99
-chr1 297 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=214.52;MQ=20.93;MQ0=36;OQ=101.21;QD=0.82;SB=-38.97 GT:AD:DP:GL:GQ 0/1:98,15:30:-33.20,-19.79,-87.91:99
-chr1 309 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=153.70;MQ=21.12;MQ0=35;OQ=53.98;QD=0.46;SB=-50.01 GT:AD:DP:GL:GQ 0/1:103,9:32:-18.33,-9.64,-96.32:86.82
-chr1 321 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=612.30;MQ=19.11;MQ0=29;OQ=136.39;QD=0.67;SB=-61.25 GT:AD:DP:GL:GQ 0/1:171,23:33:-33.14,-16.22,-92.98:99
-chr1 327 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=3;HaplotypeScore=227.75;MQ=19.74;MQ0=24;OQ=143.34;QD=0.69;SB=-63.56 GT:AD:DP:GL:GQ 0/1:183,21:38:-34.61,-16.99,-113.13:99
-chr1 352 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=325;Dels=0.00;HRun=1;HaplotypeScore=437.89;MQ=18.90;MQ0=142;OQ=774.23;QD=2.38;SB=-355.54 GT:AD:DP:GL:GQ 0/1:238,84:81:-104.82,-24.11,-183.81:99
-chr1 354 . C A 24.89 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=486;Dels=0.01;HRun=1;HaplotypeScore=281.11;MQ=16.12;MQ0=261;QD=0.05;SB=17.54 GT:AD:DP:GL:GQ 0/1:459,24:90:-32.28,-26.51,-269.47:57.71
-chr1 469 . C A 22.04 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=82.51;MQ=26.50;MQ0=12;QD=0.39;SB=-7.00 GT:AD:DP:GL:GQ 0/1:34,21:20:-11.52,-6.03,-45.07:54.85
-chr1 664 . C G 30.66 PASS AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=50.85;QD=25.42;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-8.49,-0.60,-0.00:6.02
-chr1 666 . C G 10.99 LowQual AC=1;AF=0.50;AN=2;DP=1;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=10.99;SB=-10.00 GT:AD:DP:GL:GQ 0/1:0,1:1:-4.35,-0.30,-0.00:1.76
-chr1 2646 rs62635284 G A 0.15 PASS AC=2;AF=1.00;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=9.27;MQ=6.23;MQ0=107;OQ=89.13;QD=0.70;SB=-10.00 GT:AD:DP:GL:GQ 1/1:53,75:3:-12.40,-0.90,-0.00:9.03
-chr1 2979 rs62635286 T G 83.67 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=11.99;MQ0=41;OQ=300.29;QD=4.77;SB=-10.00 GT:AD:DP:GL:GQ 1/1:31,32:9:-33.61,-2.71,-0.00:27.09
-chr1 2981 rs62028691 A G 14.69 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=11.89;MQ0=42;OQ=285.31;QD=4.46;SB=-10.00 GT:AD:DP:GL:GQ 1/1:31,33:9:-32.12,-2.71,-0.00:27.08
-chr1 3759 . C A 0.19 PASS AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=9.71;MQ0=116;OQ=458.45;QD=3.14;SB=-211.61 GT:AD:DP:GL:GQ 0/1:106,40:25:-56.66,-7.53,-33.77:99
-chr1 4536 rs11582131 G C 0.18 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=9.63;MQ=12.37;MQ0=52;OQ=335.66;QD=4.48;SB=8.06 GT:AD:DP:GL:GQ 0/1:42,33:16:-41.67,-4.82,-26.29:99
-chr1 4540 . G A 47.71 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=2;HaplotypeScore=11.12;MQ=11.52;MQ0=49;QD=0.67;SB=8.05 GT:AD:DP:GL:GQ 0/1:66,5:13:-11.97,-3.92,-35.35:80.54
-chr1 4562 rs11490464 C G 0.14 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=2.62;MQ=11.28;MQ0=37;OQ=136.40;QD=2.44;SB=-10.00 GT:AD:DP:GL:GQ 0/1:26,30:9:-19.64,-2.72,-14.87:99
-chr1 4770 rs6682375 A G 0.32 PASS AC=2;AF=1.00;AN=2;DB;DP=121;Dels=0.00;HRun=1;HaplotypeScore=1.93;MQ=26.23;MQ0=31;OQ=2992.25;QD=24.73;SB=-1410.84 GT:AD:DP:GL:GQ 1/1:9,111:84:-306.27,-28.58,-3.46:99
-chr1 4793 rs6682385 A G 0.15 PASS AC=2;AF=1.00;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=8.98;MQ=29.61;MQ0=5;OQ=3517.41;QD=29.56;SB=-1722.01 GT:AD:DP:GL:GQ 1/1:4,115:109:-350.74,-32.88,-0.10:99
-chr1 5074 rs11586607 T G 0.01 FDRtranche2.00to10.00 AC=2;AF=1.00;AN=2;DB;DP=126;Dels=0.00;HRun=1;HaplotypeScore=24.34;MQ=21.42;MQ0=68;OQ=1230.02;QD=9.76;SB=-234.94 GT:AD:DP:GL:GQ 1/1:29,97:39:-130.41,-11.75,-3.82:79.31
-chr1 5137 rs62636497 A T 140.49 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=21.69;MQ0=25;OQ=1453.92;QD=17.73;SB=-222.33 GT:AD:DP:GL:GQ 1/1:0,74:39:-148.99,-11.75,-0.01:99
-chr1 5966 . T G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=129;Dels=0.18;HRun=5;HaplotypeScore=140.84;MQ=21.40;MQ0=8;OQ=1764.68;QD=13.68;SB=-234.42 GT:AD:DP:GL:GQ 1/1:0,106:53:-180.07,-15.66,-0.02:99
-chr1 6092 . C A 11.16 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=9.08;MQ=27.90;MQ0=10;QD=0.08;SB=14.05 GT:AD:DP:GL:GQ 0/1:125,11:94:-32.68,-28.32,-307.61:43.65
-chr1 6120 rs11489794 G C 0.46 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=3.83;MQ=27.31;MQ0=11;OQ=181.15;QD=2.01;SB=8.06 GT:AD:DP:GL:GQ 0/1:73,17:66:-41.29,-19.89,-251.91:99
-chr1 6151 rs62028673 C G 0.34 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=22.13;MQ0=10;OQ=58.79;QD=1.73;SB=-6.99 GT:AD:DP:GL:GQ 0/1:24,10:14:-13.38,-4.22,-45.26:91.62
-chr1 6241 rs17041382 T C 5.47 PASS AC=1;AF=0.50;AN=2;DB;DP=138;Dels=0.00;HRun=0;HaplotypeScore=4.98;MQ=14.62;MQ0=74;OQ=755.36;QD=5.47;SB=-258.37 GT:AD:DP:GL:GQ 0/1:39,99:33:-88.77,-9.95,-20.05:99
-chr1 6358 rs3210724 G C 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=174;Dels=0.00;HRun=0;HaplotypeScore=19.20;MQ=25.41;MQ0=15;OQ=678.86;QD=3.90;SB=-150.77 GT:AD:DP:GL:GQ 0/1:131,42:113:-105.24,-34.07,-360.44:99
-chr1 6360 rs7359297 A G 49.26 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=2;HaplotypeScore=19.20;MQ=25.54;MQ0=15;QD=0.29;SB=20.10 GT:AD:DP:GL:GQ 0/1:155,16:111:-41.64,-33.43,-398.12:82.10
-chr1 6397 rs15642 C T 157.37 PASS AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=21.39;MQ0=24;OQ=850.53;QD=7.88;SB=-122.64 GT:AD:DP:GL:GQ 0/1:45,63:33:-98.28,-9.94,-33.57:99
-chr1 7270 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=0;HaplotypeScore=18.12;MQ=8.37;MQ0=128;OQ=66.01;QD=0.43;SB=-47.55 GT:AD:DP:GL:GQ 0/1:137,16:8:-12.30,-2.42,-14.38:98.84
-chr1 7558 rs7357853 G A 28.66 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=11.88;MQ0=88;QD=0.23;SB=-10.00 GT:AD:DP:GL:GQ 0/1:113,10:21:-12.48,-6.33,-62.63:61.49
-chr1 7609 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=4.53;MQ=19.87;MQ0=60;OQ=69.47;QD=0.58;SB=-10.00 GT:AD:DP:GL:GQ 0/1:98,22:48:-24.69,-14.46,-166.38:99
-chr1 7766 . C T 24.46 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=9.88;MQ=9.94;MQ0=60;QD=0.35;SB=-10.00 GT:AD:DP:GL:GQ 0/1:66,3:7:-7.84,-2.11,-15.08:57.28
-chr1 9089 rs28609851 T A 1.71 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=14.01;MQ0=34;OQ=172.68;QD=2.93;SB=-37.66 GT:AD:DP:GL:GQ 0/1:50,9:19:-26.28,-5.72,-45.27:99
-chr1 9185 rs2974813 C T 45.14 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=3.92;MQ0=67;QD=0.65;SB=-47.56 GT:AD:DP:GL:GQ 1/1:67,2:2:-7.92,-0.60,-0.00:6.02
-chr1 9721 rs12354145 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=2;HaplotypeScore=26.09;MQ=12.03;MQ0=77;OQ=197.90;QD=1.55;SB=-10.00 GT:AD:DP:GL:GQ 0/1:97,31:18:-28.50,-5.42,-36.05:99
-chr1 9805 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=10.83;MQ0=134;OQ=142.73;QD=0.73;SB=-10.00 GT:AD:DP:GL:GQ 0/1:171,24:24:-24.81,-7.25,-68.77:99
-chr1 9993 rs7354882 G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=155;Dels=0.00;HRun=0;HaplotypeScore=22.48;MQ=21.20;MQ0=19;OQ=727.76;QD=4.70;SB=-285.16 GT:AD:DP:GL:GQ 0/1:126,29:124:-113.46,-37.39,-308.40:99
-chr1 10108 rs6682921 G A 129.70 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=249;Dels=0.00;HRun=1;HaplotypeScore=98.13;MQ=8.71;MQ0=185;QD=0.52;SB=-64.03 GT:AD:DP:GL:GQ 0/1:175,74:25:-23.78,-7.53,-70.54:99
-chr1 10113 rs11490226 T C 60.45 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=252;Dels=0.00;HRun=0;HaplotypeScore=99.00;MQ=8.29;MQ0=191;QD=0.24;SB=-6.56 GT:AD:DP:GL:GQ 0/1:200,52:22:-15.96,-6.63,-68.61:93.28
-chr1 10117 . G A 27.78 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=251;Dels=0.00;HRun=0;HaplotypeScore=92.18;MQ=8.29;MQ0=191;QD=0.11;SB=-12.58 GT:AD:DP:GL:GQ 0/1:210,41:21:-12.39,-6.33,-58.67:60.61
-chr1 10375 rs6683179 G T 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=229;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=7.78;MQ0=173;OQ=50.55;QD=0.22;SB=-10.00 GT:AD:DP:GL:GQ 0/1:152,76:16:-13.16,-4.82,-44.89:83.39
-chr1 10410 rs11489908 A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=236;Dels=0.00;HRun=2;HaplotypeScore=3.67;MQ=7.06;MQ0=196;OQ=84.39;QD=0.36;SB=-10.00 GT:AD:DP:GL:GQ 0/1:188,48:18:-17.15,-5.42,-52.83:99
-chr1 16862 rs376349 A G 0.50 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=2.47;MQ=20.73;MQ0=3;OQ=399.27;QD=24.95;SB=-188.41 GT:AD:DP:GL:GQ 1/1:2,14:12:-43.52,-3.61,-0.00:36.11
-chr1 18110 rs4413987 G A 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=114;Dels=0.00;HRun=0;HaplotypeScore=6.99;MQ=6.98;MQ0=101;OQ=80.12;QD=0.70;SB=-10.00 GT:AD:DP:GL:GQ 0/1:95,19:5:-12.80,-1.51,-7.39:58.87
-chr1 18357 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=8.76;MQ=5.01;MQ0=96;OQ=60.18;QD=0.60;SB=-6.99 GT:AD:DP:GL:GQ 0/1:80,21:4:-10.51,-1.20,-3.97:27.63
-chr1 18421 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=23.14;MQ=14.44;MQ0=48;OQ=339.38;QD=4.35;SB=-90.89 GT:AD:DP:GL:GQ 0/1:55,23:25:-44.76,-7.53,-46.87:99
-chr1 18426 rs4099234 A G 0.05 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=22.14;MQ=14.77;MQ0=46;OQ=857.23;QD=11.13;SB=-429.56 GT:AD:DP:GL:GQ 1/1:24,53:25:-89.32,-7.53,-0.01:75.22
-chr1 18451 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=15;HaplotypeScore=19.76;MQ=19.64;MQ0=16;OQ=152.23;QD=2.67;SB=-85.40 GT:AD:DP:GL:GQ 0/1:45,12:33:-28.45,-9.95,-82.12:99
-chr1 18454 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=47.13;MQ=19.20;MQ0=19;OQ=58.45;QD=0.99;SB=-20.71 GT:AD:DP:GL:GQ 0/1:53,6:35:-19.67,-10.55,-115.15:91.28
-chr1 18526 rs2418705 T A 37.69 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=4.16;MQ0=59;QD=0.62;SB=-10.00 GT:AD:DP:GL:GQ 1/1:52,9:2:-7.18,-0.60,-0.00:6.02
-chr1 18698 rs3871714 A G 0.86 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=9.06;MQ0=38;OQ=98.37;QD=2.19;SB=-10.00 GT:AD:DP:GL:GQ 1/1:27,18:4:-13.37,-1.21,-0.00:12.03
-chr1 18726 rs16924801 C A 45.81 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=3.57;MQ=10.40;MQ0=25;QD=1.27;SB=-10.00 GT:AD:DP:GL:GQ 1/1:31,5:2:-7.99,-0.60,-0.00:6.02
-chr1 20391 rs4248192 C T 0.40 PASS AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=17.17;MQ0=74;OQ=114.21;QD=1.08;SB=-10.00 GT:AD:DP:GL:GQ 0/1:95,11:32:-24.34,-9.64,-88.28:99
-chr1 20411 rs62028215 T G 8.08 PASS AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=3.84;MQ=18.51;MQ0=71;OQ=573.84;QD=5.26;SB=-10.00 GT:AD:DP:GL:GQ 0/1:56,53:38:-72.12,-11.45,-46.57:99
-chr1 20723 rs28673882 G C 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=113;Dels=0.00;HRun=0;HaplotypeScore=9.28;MQ=29.99;MQ0=37;OQ=163.32;QD=1.45;SB=40.84 GT:AD:DP:GL:GQ 0/1:100,13:69:-40.42,-20.80,-251.48:99
-chr1 20786 rs806731 G T 139.58 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=34.31;MQ0=5;OQ=1407.60;QD=31.99;SB=-624.57 GT:AD:DP:GL:GQ 1/1:0,44:38:-144.35,-11.44,-0.01:99
-chr1 21158 rs806729 A C 233.61 PASS AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.41;MQ0=5;OQ=71.14;QD=7.90;SB=-10.00 GT:AD:DP:GL:GQ 1/1:6,3:3:-10.60,-0.90,-0.00:9.03
-chr1 30569 rs62101646 G A 24.23 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=13.59;MQ0=55;QD=0.37;SB=-0.99 GT:AD:DP:GL:GQ 0/1:53,12:8:-8.12,-2.41,-18.79:57.05
-chr1 30757 rs56954914 G A 38.24 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=7.79;MQ0=81;QD=0.44;SB=-10.00 GT:AD:DP:GL:GQ 0/1:56,30:4:-8.31,-1.20,-6.94:57.33
-chr1 30916 . C T 44.25 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=6.25;MQ0=41;QD=1.03;SB=-10.00 GT:AD:DP:GL:GQ 1/1:40,3:2:-7.83,-0.60,-0.00:6.02
-chr1 41536 rs2531251 T C 28.51 LowQual AC=1;AF=0.50;AN=2;DB;DP=6;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=19.20;MQ0=3;QD=4.75;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,2:3:-7.04,-0.90,-3.46:25.52
-chr1 41761 . C A 0.43 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.86;MQ=27.62;MQ0=8;OQ=172.06;QD=5.55;SB=14.07 GT:AD:DP:GL:GQ 0/1:17,14:19:-26.21,-5.72,-39.58:99
-chr1 41791 . G A 3.24 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.83;MQ=30.13;MQ0=12;OQ=368.88;QD=8.20;SB=14.07 GT:AD:DP:GL:GQ 0/1:28,17:31:-49.51,-9.34,-69.71:99
-chr1 42101 rs2691277 T G 379.72 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.14;MQ0=8;OQ=1117.45;QD=27.25;SB=-498.06 GT:AD:DP:GL:GQ 1/1:0,41:32:-115.34,-9.64,-0.01:96.29
-chr1 44243 rs2691279 T C 13.38 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=44.42;MQ0=2;QD=0.32;SB=29.13 GT:AD:DP:GL:GQ 0/1:35,7:40:-16.65,-12.05,-143.10:46.01
-chr1 44449 . T C 10.02 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=30.96;MQ0=0;QD=0.25;SB=38.15 GT:AD:DP:GL:GQ 0/1:31,9:34:-14.48,-10.24,-121.45:42.40
-chr1 44539 rs2462492 C T 2.85 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=48.14;MQ0=0;OQ=219.90;QD=4.40;SB=-111.03 GT:AD:DP:GL:GQ 0/1:40,10:50:-40.33,-15.06,-146.68:99
-chr1 44571 . G C 349.91 SnpCluster AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=22.88;MQ=46.02;MQ0=0;QD=5.74;SB=-120.67 GT:AD:DP:GL:GQ 0/1:43,18:49:-53.04,-14.77,-155.67:99
-chr1 44573 . A T 77.97 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=5;HaplotypeScore=28.86;MQ=46.27;MQ0=0;QD=1.22;SB=18.79 GT:AD:DP:GL:GQ 0/1:55,9:53:-27.05,-15.97,-167.03:99
-chr1 44575 . T C 100.77 SnpCluster AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=36.58;MQ=45.60;MQ0=1;QD=1.53;SB=-17.16 GT:AD:DP:GL:GQ 0/1:57,9:54:-29.63,-16.27,-179.47:99
-chr1 44579 . C T 185.88 SnpCluster AC=1;AF=0.50;AN=2;DP=83;Dels=0.04;HRun=5;HaplotypeScore=85.91;MQ=43.82;MQ0=2;QD=2.24;SB=-100.05 GT:AD:DP:GL:GQ 0/1:66,14:58:-39.34,-17.47,-169.22:99
-chr1 44707 . G A 14.95 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=25.67;MQ0=14;OQ=285.82;QD=6.35;SB=-102.92 GT:AD:DP:GL:GQ 0/1:29,16:26:-39.70,-7.83,-56.06:99
-chr1 44948 . T A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=3.69;MQ=36.35;MQ0=4;OQ=152.52;QD=2.99;SB=0.17 GT:AD:DP:GL:GQ 0/1:39,12:36:-29.38,-10.84,-106.91:99
-chr1 45027 rs3091274 C A 22.40 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=21.32;MQ0=9;OQ=324.14;QD=13.51;SB=-88.90 GT:AD:DP:GL:GQ 1/1:0,24:10:-36.00,-3.01,-0.00:30.09
-chr1 45162 rs10399749 C T 268.24 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=27.59;MQ0=3;OQ=1749.04;QD=37.21;SB=-889.19 GT:AD:DP:GL:GQ 1/1:1,46:44:-178.50,-13.25,-0.01:99
-chr1 45189 rs3107975 T C 528.74 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.64;MQ0=0;OQ=1690.04;QD=36.74;SB=-682.96 GT:AD:DP:GL:GQ 1/1:0,46:46:-172.60,-13.85,-0.01:99
-chr1 45408 rs28396308 C T 25.10 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=23.65;MQ0=4;OQ=659.03;QD=19.97;SB=-174.67 GT:AD:DP:GL:GQ 1/1:0,33:17:-69.49,-5.12,-0.00:51.17
-chr1 46501 rs2691308 C T 1.65 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=36.83;MQ0=2;OQ=218.70;QD=3.22;SB=47.17 GT:AD:DP:GL:GQ 0/1:55,13:65:-44.73,-19.58,-190.42:99
-chr1 46662 rs2691309 T C 45.27 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=41.65;MQ0=3;QD=1.29;SB=26.11 GT:AD:DP:GL:GQ 0/1:27,8:32:-17.45,-9.64,-107.04:78.10
-chr1 46896 rs2691311 T C 94.73 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=47.00;MQ0=0;OQ=492.79;QD=6.48;SB=-211.35 GT:AD:DP:GL:GQ 0/1:55,21:75:-75.15,-22.59,-219.09:99
-chr1 46927 rs2548884 G A 0.20 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=44.33;MQ0=0;OQ=115.48;QD=1.89;SB=-71.32 GT:AD:DP:GL:GQ 0/1:53,8:60:-32.90,-18.07,-195.48:99
-chr1 47021 rs6658003 G C 0.57 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=8.74;MQ0=44;OQ=79.96;QD=1.45;SB=-46.90 GT:AD:DP:GL:GQ 0/1:36,19:6:-13.09,-1.81,-12.99:99
-chr1 47109 rs2691313 C G 35.94 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=36.99;MQ0=0;OQ=346.71;QD=6.80;SB=47.18 GT:AD:DP:GL:GQ 0/1:38,13:51:-53.32,-15.37,-164.95:99
-chr1 47155 . C T 135.45 PASS AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=34.92;MQ0=10;OQ=1281.86;QD=17.56;SB=-510.08 GT:AD:DP:GL:GQ 0/1:34,39:60:-149.57,-18.10,-69.03:99
-chr1 47239 rs2854673 C T 32.39 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=43.73;MQ0=3;OQ=244.39;QD=4.61;SB=47.16 GT:AD:DP:GL:GQ 0/1:39,14:49:-42.48,-14.76,-140.73:99
-chr1 47719 . T A 0.78 PASS AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=2;HaplotypeScore=3.14;MQ=19.08;MQ0=29;OQ=670.79;QD=8.49;SB=-194.63 GT:AD:DP:GL:GQ 0/1:47,32:46:-84.22,-13.86,-89.29:99
-chr1 48074 rs2691335 A G 2.10 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.51;MQ0=2;OQ=156.22;QD=22.32;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:5:-19.18,-1.51,-0.00:15.05
-chr1 48634 . T C 2.39 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.66;MQ=33.49;MQ0=8;OQ=733.26;QD=12.22;SB=-133.25 GT:AD:DP:GL:GQ 0/1:32,28:50:-91.67,-15.06,-103.96:99
-chr1 50195 rs62637816 T C 137.58 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=17.45;MQ0=31;OQ=544.88;QD=7.46;SB=-273.42 GT:AD:DP:GL:GQ 0/1:46,26:42:-70.43,-12.65,-88.66:99
-chr1 50884 rs3844232 G A 43.24 PASS AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.69;MQ0=8;OQ=74.12;QD=4.12;SB=-10.00 GT:AD:DP:GL:GQ 0/1:11,7:6:-12.50,-1.81,-9.19:73.80
-chr1 51151 . T A 30.50 LowQual AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.43;MQ0=2;QD=5.08;SB=-37.96 GT:AD:DP:GL:GQ 0/1:4,2:4:-7.54,-1.20,-7.68:63.33
-chr1 51152 . A G 76.91 PASS AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.59;MQ0=2;OQ=62.44;QD=8.92;SB=-39.93 GT:AD:DP:GL:GQ 0/1:4,3:5:-11.03,-1.51,-8.33:68.29
-chr1 51305 rs2531261 A G 318.95 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.94;MQ0=3;OQ=1035.37;QD=25.88;SB=-471.86 GT:AD:DP:GL:GQ 1/1:0,40:29:-107.13,-8.73,-0.01:87.27
-chr1 51850 . A G 82.68 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=39.81;MQ0=7;OQ=720.99;QD=12.22;SB=-171.50 GT:AD:DP:GL:GQ 0/1:32,27:50:-90.45,-15.06,-94.52:99
-chr1 51852 . G C 25.49 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=40.15;MQ0=6;OQ=1021.36;QD=17.61;SB=-245.09 GT:AD:DP:GL:GQ 0/1:31,27:50:-120.48,-15.06,-101.09:99
-chr1 52066 rs28402963 T C 139.56 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=39.80;MQ0=3;OQ=684.28;QD=9.50;SB=-320.22 GT:AD:DP:GL:GQ 0/1:42,30:68:-92.19,-20.48,-169.52:99
-chr1 52134 rs28599927 A G 180.85 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=31.13;MQ0=5;OQ=314.17;QD=8.73;SB=-124.71 GT:AD:DP:GL:GQ 0/1:23,13:30:-43.74,-9.04,-73.62:99
-chr1 52441 rs2531315 G A 15.83 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.89;MQ0=7;OQ=286.62;QD=17.91;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,16:8:-32.24,-2.41,-0.00:24.08
-chr1 52640 rs3844233 A T 1.57 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=20.92;MQ0=32;OQ=114.33;QD=2.04;SB=-23.31 GT:AD:DP:GL:GQ 0/1:45,11:17:-19.84,-5.12,-46.79:99
-chr1 53560 . T C 39.15 PASS AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=25.49;MQ0=11;OQ=919.76;QD=11.22;SB=-454.58 GT:AD:DP:GL:GQ 0/1:47,35:69:-116.05,-20.79,-145.77:99
-chr1 54476 rs1627939 T A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=2;HaplotypeScore=1.16;MQ=27.48;MQ0=38;OQ=233.94;QD=2.36;SB=-139.05 GT:AD:DP:GL:GQ 0/1:84,15:50:-41.74,-15.06,-148.46:99
-chr1 54790 rs996010 G T 31.78 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=23.12;MQ0=20;QD=0.47;SB=29.08 GT:AD:DP:GL:GQ 0/1:55,13:40:-18.51,-12.05,-121.17:64.61
-chr1 54839 rs2854687 C T 10.60 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=27.08;MQ0=0;OQ=1633.87;QD=34.04;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,48:40:-166.98,-12.05,-0.01:99
-chr1 55660 . T C 47.12 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=8.71;MQ0=70;QD=0.52;SB=-10.00 GT:AD:DP:GL:GQ 0/1:73,17:9:-10.71,-2.71,-24.43:79.96
-chr1 55735 . T G 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=7.24;MQ0=61;OQ=58.14;QD=0.81;SB=-10.00 GT:AD:DP:GL:GQ 0/1:55,17:5:-10.60,-1.51,-6.69:51.83
-chr1 56025 rs62639105 A T 0.18 PASS AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=3;HaplotypeScore=1.00;MQ=23.00;MQ0=0;OQ=377.29;QD=31.44;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,11:12:-44.38,-3.61,-3.44:2.23
-chr1 60591 . C T 1.69 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=14.15;MQ0=46;OQ=324.67;QD=4.39;SB=-159.64 GT:AD:DP:GL:GQ 0/1:50,24:28:-44.18,-8.43,-61.59:99
-chr1 60624 . T C 29.51 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=5.38;MQ0=69;QD=0.40;SB=-6.99 GT:AD:DP:GL:GQ 0/1:53,20:3:-7.14,-0.90,-3.77:28.64
-chr1 63704 rs3020697 C T 122.92 PASS AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.04;MQ=34.36;MQ0=1;OQ=168.10;QD=12.93;SB=-51.56 GT:AD:DP:GL:GQ 1/1:0,13:6:-20.39,-1.81,-0.01:18.05
-chr1 64418 . A G 43.84 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=98;Dels=0.00;HRun=1;HaplotypeScore=8.82;MQ=6.47;MQ0=82;QD=0.45;SB=-10.00 GT:AD:DP:GL:GQ 1/1:82,16:2:-7.79,-0.60,-0.00:6.02
-chr1 64433 . T A 31.10 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=7.92;MQ0=71;QD=0.33;SB=-10.00 GT:AD:DP:GL:GQ 0/1:82,12:3:-7.30,-0.90,-3.84:29.36
-chr1 64544 rs13328683 G T 4.16 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.57;MQ=18.78;MQ0=9;OQ=435.52;QD=13.61;SB=-10.00 GT:AD:DP:GL:GQ 1/1:10,22:12:-47.14,-3.61,-0.00:36.12
-chr1 67325 rs2462497 G A 48.02 LowQual AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.51;MQ0=2;QD=12.01;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,4:2:-8.21,-0.60,-0.00:6.02
-chr1 72009 . A G 32.65 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=5.60;MQ=18.28;MQ0=7;QD=1.72;SB=-38.67 GT:AD:DP:GL:GQ 0/1:14,5:11:-9.86,-3.31,-31.53:65.48
-chr1 72112 rs1851945 A G 1.46 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=25.77;MQ0=4;OQ=504.38;QD=26.55;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,15:15:-54.03,-4.52,-0.00:45.14
-chr1 72166 rs2907073 T C 81.98 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.95;MQ0=1;OQ=468.64;QD=33.47;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,14:13:-50.45,-3.91,-0.00:39.13
-chr1 72179 rs2260604 A C 22.50 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.51;MQ0=4;OQ=244.12;QD=17.44;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,10:10:-28.01,-3.01,-0.01:30.03
-chr1 72195 . T C 61.39 PASS AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.33;MQ0=10;OQ=206.79;QD=10.34;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,7:10:-26.97,-3.01,-11.90:88.90
-chr1 73690 . A G 59.97 Indel AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=8.93;MQ=23.64;MQ0=3;QD=4.28;SB=-6.99 GT:AD:DP:GL:GQ 0/1:7,7:8:-11.69,-2.41,-21.22:92.80
-chr1 73692 . G A 71.09 Indel AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=3;HaplotypeScore=9.93;MQ=23.64;MQ0=3;QD=5.08;SB=-6.99 GT:AD:DP:GL:GQ 0/1:7,7:8:-12.80,-2.41,-18.45:99
-chr1 73996 . A T 22.55 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=27.59;MQ0=22;OQ=466.23;QD=7.40;SB=-57.87 GT:AD:DP:GL:GQ 0/1:36,27:38:-61.35,-11.44,-82.94:99
-chr1 74170 rs4118012 C A 85.72 PASS AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=197.97;QD=32.99;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,6:6:-23.37,-1.81,-0.00:18.06
-chr1 74355 rs3871778 C G 11.43 PASS AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.46;MQ0=2;OQ=92.52;QD=18.50;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:3:-12.74,-0.90,-0.00:9.03
-chr1 74885 . G A 80.42 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=18.46;MQ0=14;OQ=538.01;QD=13.12;SB=-187.68 GT:AD:DP:GL:GQ 0/1:20,21:26:-64.92,-7.83,-36.63:99
-chr1 80719 . G A 41.54 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=8.20;MQ0=31;QD=1.19;SB=-10.00 GT:AD:DP:GL:GQ 0/1:32,2:3:-8.34,-0.91,-2.50:15.90
-chr1 81004 rs4245761 G T 39.81 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=13.75;MQ0=7;QD=3.32;SB=-10.00 GT:AD:DP:GL:GQ 1/1:7,5:2:-7.39,-0.60,-0.00:6.02
-chr1 81077 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=13;HaplotypeScore=2.26;MQ=18.21;MQ0=7;OQ=85.86;QD=5.05;SB=-62.92 GT:AD:DP:GL:GQ 0/1:11,6:5:-13.38,-1.51,-3.74:22.35
-chr1 81199 rs4245763 A T 30.68 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=13.70;MQ0=7;QD=3.07;SB=-10.00 GT:AD:DP:GL:GQ 1/1:6,4:2:-6.48,-0.60,-0.00:6.01
-chr1 81378 . A C 3.99 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=33.30;MQ0=0;OQ=188.72;QD=4.72;SB=-114.61 GT:AD:DP:GL:GQ 0/1:31,9:34:-32.39,-10.24,-89.64:99
-chr1 81399 rs6702460 G T 307.92 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=32.81;MQ0=0;OQ=1379.58;QD=33.65;SB=-370.87 GT:AD:DP:GL:GQ 1/1:0,41:37:-141.55,-11.14,-0.01:99
-chr1 81444 rs1524604 G A 325.75 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.68;MQ0=1;OQ=1101.93;QD=36.73;SB=-340.44 GT:AD:DP:GL:GQ 1/1:0,30:28:-113.78,-8.43,-0.01:84.28
-chr1 81611 rs4256762 C T 100.30 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=17.29;MQ0=34;OQ=684.35;QD=12.01;SB=-10.00 GT:AD:DP:GL:GQ 1/1:14,43:19:-75.91,-5.72,-3.90:18.23
-chr1 82517 . T C 0.75 PASS AC=2;AF=1.00;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=13.00;MQ0=6;OQ=70.17;QD=3.19;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,22:3:-10.51,-0.90,-0.00:9.03
-chr1 86134 . C G 0.28 PASS AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=17.64;MQ0=31;OQ=214.58;QD=2.38;SB=-33.05 GT:AD:DP:GL:GQ 0/1:81,9:51:-40.11,-15.36,-187.83:99
-chr1 88546 . G A 0.08 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.25;MQ0=8;OQ=736.28;QD=19.90;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,24:26:-84.74,-7.83,-23.08:99
-chr1 88616 rs4504463 T C 1.95 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.27;MQ0=29;OQ=80.37;QD=1.55;SB=-10.00 GT:AD:DP:GL:GQ 0/1:43,9:21:-17.65,-6.33,-64.09:99
-chr1 88704 . G A 26.43 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=13.14;MQ0=25;QD=0.76;SB=-10.00 GT:AD:DP:GL:GQ 0/1:33,2:8:-8.34,-2.41,-22.88:59.26
-chr1 88715 . A G 0.29 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=13.96;MQ0=21;OQ=53.96;QD=1.74;SB=-10.00 GT:AD:DP:GL:GQ 0/1:28,3:8:-11.09,-2.41,-20.54:86.80
-chr1 88808 . C T 3.03 PASS AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.56;MQ0=9;OQ=459.05;QD=18.36;SB=-49.56 GT:AD:DP:GL:GQ 1/1:1,24:12:-49.49,-3.61,-0.00:36.12
-chr1 88856 rs1851939 G A 178.37 HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=30.10;MQ0=10;QD=3.64;SB=-37.62 GT:AD:DP:GL:GQ 0/1:36,12:37:-32.26,-11.14,-102.50:99
-chr1 88918 . C A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=6.89;MQ=32.20;MQ0=8;OQ=309.74;QD=3.64;SB=-68.70 GT:AD:DP:GL:GQ 0/1:64,21:74:-56.55,-22.29,-199.33:99
-chr1 88963 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=30.09;MQ=26.41;MQ0=31;OQ=291.13;QD=2.62;SB=-116.74 GT:AD:DP:GL:GQ 0/1:88,23:71:-53.80,-21.40,-203.68:99
-chr1 88966 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=24.42;MQ=26.07;MQ0=32;OQ=253.10;QD=2.32;SB=-149.24 GT:AD:DP:GL:GQ 0/1:88,21:67:-48.78,-20.19,-197.64:99
-chr1 89000 . A G 0.14 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=15.31;MQ0=39;OQ=157.34;QD=2.76;SB=-51.84 GT:AD:DP:GL:GQ 0/1:48,9:10:-22.04,-3.02,-12.09:90.71
-chr1 89029 . C T 23.46 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.84;MQ=12.16;MQ0=50;QD=0.36;SB=5.02 GT:AD:DP:GL:GQ 0/1:50,16:9:-8.34,-2.71,-21.03:56.28
-chr1 89043 . T C 25.04 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=9.57;MQ0=58;QD=0.36;SB=-0.97 GT:AD:DP:GL:GQ 0/1:54,16:6:-7.59,-1.81,-16.33:57.86
-chr1 89188 . C T 0.06 PASS AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=2.43;MQ=17.90;MQ0=10;OQ=61.10;QD=3.39;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,3:7:-11.50,-2.11,-14.49:93.93
-chr1 89528 . C T 1.15 PASS AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.04;MQ0=0;OQ=168.19;QD=24.03;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,6:5:-20.38,-1.51,-0.00:15.05
-chr1 90974 rs62639107 G T 14.16 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=10.20;MQ0=34;QD=0.33;SB=-0.97 GT:AD:DP:GL:GQ 0/1:33,10:6:-6.49,-1.81,-14.67:46.83
-chr1 91131 . G A 0.50 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=10.39;MQ0=55;OQ=206.73;QD=2.79;SB=-10.00 GT:AD:DP:GL:GQ 0/1:41,33:9:-26.67,-2.71,-7.60:48.84
-chr1 91212 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=134;Dels=0.01;HRun=13;HaplotypeScore=35.68;MQ=19.40;MQ0=63;OQ=147.19;QD=1.10;SB=-6.99 GT:AD:DP:GL:GQ 0/1:107,25:41:-30.37,-12.37,-109.55:99
-chr1 91252 . A C 43.23 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=1;HaplotypeScore=36.75;MQ=16.93;MQ0=85;QD=0.29;SB=-10.00 GT:AD:DP:GL:GQ 0/1:138,10:43:-20.56,-12.95,-127.64:76.06
-chr1 91549 . A G 49.47 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=209;Dels=0.00;HRun=0;HaplotypeScore=15.98;MQ=27.81;MQ0=39;QD=0.24;SB=65.80 GT:AD:DP:GL:GQ 0/1:179,30:144:-51.61,-43.38,-519.29:82.31
-chr1 91758 . G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=22.49;MQ0=25;OQ=143.40;QD=2.17;SB=15.64 GT:AD:DP:GL:GQ 0/1:56,10:34:-27.86,-10.24,-97.22:99
-chr1 91835 . T C 60.94 PASS AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.01;MQ0=36;OQ=785.45;QD=10.47;SB=-10.00 GT:AD:DP:GL:GQ 0/1:43,32:33:-91.79,-9.96,-12.24:22.78
-chr1 91851 rs4109800 G C 35.73 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.96;MQ0=33;OQ=1198.57;QD=15.98;SB=-10.00 GT:AD:DP:GL:GQ 0/1:41,34:33:-133.08,-9.94,-16.89:69.53
-chr1 91938 . G A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=2.53;MQ=14.92;MQ0=47;OQ=298.50;QD=3.21;SB=-10.00 GT:AD:DP:GL:GQ 0/1:77,15:21:-39.46,-6.32,-39.15:99
-chr1 92459 rs3912701 G A 1.57 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=1.98;MQ=17.65;MQ0=34;OQ=809.52;QD=14.99;SB=-10.00 GT:AD:DP:GL:GQ 1/1:30,24:20:-84.54,-6.02,-0.00:60.20
-chr1 92527 rs4618909 A G 1.05 PASS AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=1;HaplotypeScore=7.26;MQ=22.11;MQ0=40;OQ=1083.35;QD=10.62;SB=-10.00 GT:AD:DP:GL:GQ 0/1:55,47:51:-126.98,-15.36,-75.91:99
-chr1 92632 rs3872168 C A 251.56 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.40;MQ0=16;OQ=274.62;QD=10.98;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,25:9:-31.05,-2.71,-0.00:27.07
-chr1 92814 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=1;HaplotypeScore=9.83;MQ=30.05;MQ0=21;OQ=659.75;QD=3.88;SB=-292.33 GT:AD:DP:GL:GQ 0/1:135,35:144:-112.64,-43.38,-415.54:99
-chr1 93070 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=1;HaplotypeScore=8.90;MQ=17.00;MQ0=65;OQ=190.64;QD=1.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:83,17:34:-32.59,-10.25,-92.04:99
-chr1 93104 rs62642109 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=0;HaplotypeScore=24.91;MQ=20.20;MQ0=60;OQ=819.40;QD=6.83;SB=-0.98 GT:AD:DP:GL:GQ 0/1:72,48:57:-102.42,-17.19,-99.00:99
-chr1 93113 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=17.60;MQ=21.02;MQ0=51;OQ=474.12;QD=4.23;SB=5.03 GT:AD:DP:GL:GQ 0/1:79,33:56:-67.57,-16.87,-129.01:99
-chr1 93181 . T C 7.86 PASS AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=15.97;MQ0=67;OQ=759.85;QD=7.17;SB=20.10 GT:AD:DP:GL:GQ 0/1:53,53:35:-89.81,-10.54,-44.53:99
-chr1 93248 rs62639110 G A 30.22 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=8.07;MQ0=76;QD=0.36;SB=-10.00 GT:AD:DP:GL:GQ 0/1:62,22:6:-8.11,-1.81,-14.17:63.05
-chr1 93307 . G A 47.02 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=5.80;MQ0=48;QD=0.94;SB=-10.00 GT:AD:DP:GL:GQ 1/1:44,6:2:-8.11,-0.60,-0.00:6.02
-chr1 93757 . T C 30.28 LowQual AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=10.09;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,2:2:-6.44,-0.60,-0.00:6.01
-chr1 93896 rs4287120 T C 0.17 PASS AC=2;AF=1.00;AN=2;DB;DP=174;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=4.84;MQ0=151;OQ=128.63;QD=0.74;SB=-81.37 GT:AD:DP:GL:GQ 1/1:41,133:5:-16.43,-1.51,-0.00:15.04
-chr1 93971 rs4492556 A G 12.01 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=2.58;MQ=7.18;MQ0=71;QD=0.15;SB=-31.93 GT:AD:DP:GL:GQ 0/1:47,34:7:-6.57,-2.11,-19.60:44.57
-chr1 94001 . G T 0.94 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=16.11;MQ0=45;OQ=194.11;QD=3.35;SB=-41.38 GT:AD:DP:GL:GQ 0/1:51,7:13:-26.61,-3.91,-21.51:99
-chr1 94049 rs4288537 T C 0.39 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=10.96;MQ=20.93;MQ0=24;OQ=438.79;QD=10.45;SB=-71.88 GT:AD:DP:GL:GQ 0/1:18,24:17:-52.28,-5.12,-8.24:31.18
-chr1 94088 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.06;MQ=13.40;MQ0=57;OQ=79.42;QD=1.15;SB=-38.36 GT:AD:DP:GL:GQ 0/1:64,5:10:-14.24,-3.02,-19.96:99
-chr1 94312 . C A 18.04 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=10.70;MQ0=65;QD=0.24;SB=-10.00 GT:AD:DP:GL:GQ 0/1:72,2:9:-7.79,-2.71,-24.60:50.81
-chr1 98160 rs4109806 A C 199.96 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.46;MQ0=21;OQ=505.68;QD=12.97;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,39:15:-54.16,-4.52,-0.00:45.14
-chr1 98173 . T C 2.30 PASS AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=16.05;MQ0=20;OQ=109.74;QD=3.05;SB=-45.95 GT:AD:DP:GL:GQ 0/1:14,22:12:-17.87,-3.61,-27.89:99
-chr1 98191 rs4109805 A G 15.99 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=16.84;MQ0=14;QD=0.50;SB=5.05 GT:AD:DP:GL:GQ 0/1:28,4:15:-9.39,-4.52,-49.05:48.72
-chr1 98276 rs4457511 T G 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=9.15;MQ=5.64;MQ0=97;OQ=125.84;QD=1.20;SB=-67.98 GT:AD:DP:GL:GQ 0/1:81,24:6:-17.67,-1.81,-3.90:20.89
-chr1 99188 . T C 0.10 PASS AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=8.00;MQ0=82;OQ=57.15;QD=0.64;SB=-10.00 GT:AD:DP:GL:GQ 0/1:85,4:6:-10.81,-1.81,-11.97:89.99
-chr1 99237 . G A 48.25 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=4.41;MQ0=117;QD=0.40;SB=-10.00 GT:AD:DP:GL:GQ 1/1:114,6:2:-8.23,-0.60,-0.00:6.02
-chr1 99503 rs4126043 T A 232.13 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.79;MQ0=3;OQ=79.29;QD=11.33;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:3:-11.42,-0.90,-0.00:9.03
-chr1 110568 rs4117992 T C 36.28 LowQual AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=12.09;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:2:-7.04,-0.60,-0.00:6.02
-chr1 110846 . C T 29.97 PASS AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=21.24;MQ0=9;OQ=175.53;QD=12.54;SB=-93.11 GT:AD:DP:GL:GQ 1/1:6,8:5:-21.11,-1.51,-0.00:15.05
-chr1 110872 rs1851943 C T 61.13 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.59;MQ0=3;OQ=127.11;QD=18.16;SB=-91.11 GT:AD:DP:GL:GQ 1/1:0,7:4:-16.25,-1.20,-0.00:12.04
-chr1 117436 . G A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=9.09;MQ0=104;OQ=195.33;QD=1.58;SB=-97.57 GT:AD:DP:GL:GQ 0/1:100,24:19:-28.54,-5.73,-40.13:99
-chr1 119192 . C G 13.29 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=6.87;MQ0=19;QD=0.58;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,8:1:-4.59,-0.30,-0.00:1.76
-chr1 125911 rs11531330 C T 87.12 PASS AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=18.40;MQ0=3;OQ=89.79;QD=11.22;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,3:3:-12.47,-0.90,-0.00:9.03
-chr1 217782 . A T 46.88 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.40;MQ0=4;QD=5.86;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:2:-8.10,-0.60,-0.00:6.02
-chr1 219536 rs6678242 A C 214.27 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.88;MQ0=9;OQ=112.38;QD=6.61;SB=-45.01 GT:AD:DP:GL:GQ 1/1:0,17:4:-14.77,-1.20,-0.00:12.04
-chr1 219731 . C T 12.21 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.96;MQ0=44;QD=0.17;SB=38.14 GT:AD:DP:GL:GQ 0/1:62,9:27:-12.61,-8.14,-82.06:44.77
-chr1 219921 rs12239119 T G 63.08 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.26;MQ0=4;OQ=606.74;QD=25.28;SB=-312.56 GT:AD:DP:GL:GQ 1/1:0,24:18:-64.26,-5.42,-0.01:54.16
-chr1 221068 rs10047119 T A 39.88 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=254;Dels=0.00;HRun=1;HaplotypeScore=6.12;MQ=8.79;MQ0=135;QD=0.16;SB=-10.00 GT:AD:DP:GL:GQ 1/1:167,87:2:-7.40,-0.60,-0.00:6.02
-chr1 221077 rs10047174 C A 38.69 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=271;Dels=0.00;HRun=0;HaplotypeScore=6.64;MQ=8.55;MQ0=150;QD=0.14;SB=-10.00 GT:AD:DP:GL:GQ 1/1:181,90:2:-7.28,-0.60,-0.00:6.02
-chr1 221092 rs10047175 C A 39.69 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=283;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=7.57;MQ0=174;QD=0.14;SB=-10.00 GT:AD:DP:GL:GQ 1/1:201,82:2:-7.38,-0.60,-0.00:6.02
-chr1 221109 rs10047121 T C 34.28 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=275;Dels=0.00;HRun=0;HaplotypeScore=3.23;MQ=7.06;MQ0=184;QD=0.12;SB=-10.00 GT:AD:DP:GL:GQ 1/1:197,78:2:-6.84,-0.60,-0.00:6.02
-chr1 221318 . T A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=241;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=19.94;MQ0=85;OQ=462.52;QD=1.92;SB=39.55 GT:AD:DP:GL:GQ 0/1:212,29:108:-82.07,-32.53,-323.83:99
-chr1 221343 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=261;Dels=0.00;HRun=0;HaplotypeScore=2.12;MQ=22.79;MQ0=47;OQ=408.64;QD=1.57;SB=-215.29 GT:AD:DP:GL:GQ 0/1:222,38:157:-91.46,-47.31,-595.18:99
-chr1 221367 rs10047230 G A 0.14 PASS AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=11.19;MQ=25.20;MQ0=11;OQ=1571.46;QD=5.65;SB=-527.77 GT:AD:DP:GL:GQ 0/1:197,80:212:-224.34,-63.91,-509.11:99
-chr1 221389 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=260;Dels=0.00;HRun=1;HaplotypeScore=1.74;MQ=24.37;MQ0=22;OQ=840.34;QD=3.23;SB=-412.02 GT:AD:DP:GL:GQ 0/1:209,50:201:-147.86,-60.54,-597.88:99
-chr1 221420 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=1;HaplotypeScore=4.60;MQ=20.04;MQ0=77;OQ=83.18;QD=0.40;SB=26.98 GT:AD:DP:GL:GQ 0/1:192,14:117:-46.84,-35.24,-385.27:99
-chr1 222364 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=186;Dels=0.03;HRun=0;HaplotypeScore=32.96;MQ=22.76;MQ0=12;OQ=2072.95;QD=11.14;SB=59.21 GT:AD:DP:GL:GQ 0/1:70,111:137:-251.84,-41.26,-268.25:99
-chr1 222793 . C G 25.72 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=260;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=16.62;MQ0=87;QD=0.10;SB=81.54 GT:AD:DP:GL:GQ 0/1:230,30:110:-38.99,-33.14,-447.79:58.55
-chr1 223336 . C G 28.20 PASS AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=35.25;MQ0=2;OQ=1925.92;QD=21.40;SB=-854.31 GT:AD:DP:GL:GQ 0/1:39,51:87:-222.09,-26.21,-160.96:99
-chr1 224095 rs8179512 G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=229;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=15.51;MQ0=125;OQ=91.58;QD=0.40;SB=-45.96 GT:AD:DP:GL:GQ 0/1:203,26:89:-39.28,-26.84,-255.40:99
-chr1 224171 rs7195389 A G 40.71 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=269;Dels=0.00;HRun=0;HaplotypeScore=47.18;MQ=22.11;MQ0=18;QD=0.15;SB=122.50 GT:AD:DP:GL:GQ 0/1:232,36:234:-77.87,-70.51,-842.48:73.55
-chr1 224176 rs56055731 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=276;Dels=0.00;HRun=1;HaplotypeScore=39.67;MQ=21.41;MQ0=32;OQ=545.76;QD=1.98;SB=-248.71 GT:AD:DP:GL:GQ 0/1:242,34:226:-125.93,-68.07,-709.89:99
-chr1 224241 rs62053733 A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.00;HRun=0;HaplotypeScore=20.29;MQ=17.49;MQ0=74;OQ=1752.30;QD=8.11;SB=-714.08 GT:AD:DP:GL:GQ 0/1:103,113:104:-209.87,-31.36,-152.51:99
-chr1 224344 rs8179403 T A 166.23 PASS AC=1;AF=0.50;AN=2;DB;DP=163;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=23.92;MQ0=45;OQ=2824.26;QD=17.33;SB=-725.16 GT:AD:DP:GL:GQ 0/1:38,125:108:-318.26,-32.55,-66.31:99
-chr1 224419 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=1;HaplotypeScore=18.87;MQ=14.35;MQ0=100;OQ=127.03;QD=0.68;SB=8.05 GT:AD:DP:GL:GQ 0/1:161,26:49:-30.75,-14.76,-153.48:99
-chr1 224472 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=261;Dels=0.00;HRun=1;HaplotypeScore=6.53;MQ=15.44;MQ0=125;OQ=992.61;QD=3.80;SB=-39.67 GT:AD:DP:GL:GQ 0/1:177,84:84:-127.86,-25.32,-192.69:99
-chr1 224623 rs7548182 A T 1.19 PASS AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=3;HaplotypeScore=1.37;MQ=26.54;MQ0=23;OQ=863.08;QD=8.07;SB=50.19 GT:AD:DP:GL:GQ 0/1:39,68:64:-108.87,-19.28,-138.61:99
-chr1 225707 rs6603780 C G 0.19 PASS AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=6.28;MQ=15.73;MQ0=150;OQ=1742.87;QD=6.27;SB=-566.38 GT:AD:DP:GL:GQ 0/1:147,131:57:-194.74,-17.17,-58.86:99
-chr1 225839 rs6422503 C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=215;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=34.58;MQ0=26;OQ=4599.62;QD=21.39;SB=-1688.57 GT:AD:DP:GL:GQ 0/1:70,145:162:-458.96,-48.79,-124.49:99
-chr1 226216 . T C 24.03 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=3.20;MQ=9.23;MQ0=93;QD=0.13;SB=-10.00 GT:AD:DP:GL:GQ 0/1:162,19:7:-7.79,-2.11,-21.54:56.85
-chr1 227048 . C A 43.64 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=9.30;MQ0=121;QD=0.28;SB=-44.79 GT:AD:DP:GL:GQ 0/1:134,21:22:-14.27,-6.63,-62.25:76.48
-chr1 227333 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=5.51;MQ=14.65;MQ0=59;OQ=58.63;QD=0.42;SB=-10.00 GT:AD:DP:GL:GQ 0/1:125,16:25:-16.68,-7.54,-70.62:91.47
-chr1 227353 . C A 20.49 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=1;HaplotypeScore=4.94;MQ=14.92;MQ0=62;QD=0.15;SB=-10.00 GT:AD:DP:GL:GQ 0/1:122,18:29:-14.07,-8.74,-90.83:53.29
-chr1 227461 rs28618397 A G 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=144;Dels=0.00;HRun=0;HaplotypeScore=6.94;MQ=8.17;MQ0=115;OQ=63.90;QD=0.44;SB=-10.00 GT:AD:DP:GL:GQ 0/1:131,13:8:-12.09,-2.41,-14.97:96.73
-chr1 227626 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=4.92;MQ=20.49;MQ0=18;OQ=315.55;QD=1.73;SB=-168.42 GT:AD:DP:GL:GQ 0/1:163,19:138:-76.40,-41.57,-437.40:99
-chr1 227735 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=14.30;MQ=17.08;MQ0=35;OQ=66.90;QD=0.75;SB=20.77 GT:AD:DP:GL:GQ 0/1:78,11:41:-22.33,-12.35,-159.24:99
-chr1 230298 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=1;HaplotypeScore=4.58;MQ=24.72;MQ0=17;OQ=319.24;QD=2.47;SB=-97.27 GT:AD:DP:GL:GQ 0/1:109,19:104:-66.59,-31.38,-356.71:99
-chr1 230890 . G A 0.28 PASS AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=4.05;MQ=28.42;MQ0=10;OQ=452.11;QD=3.77;SB=-186.08 GT:AD:DP:GL:GQ 0/1:99,21:95:-77.11,-28.62,-272.62:99
-chr1 231027 rs1917217 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=16;HaplotypeScore=20.40;MQ=32.62;MQ0=10;OQ=363.52;QD=5.05;SB=32.11 GT:AD:DP:GL:GQ 0/1:47,24:50:-54.70,-15.07,-118.26:99
-chr1 231044 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=16;HaplotypeScore=28.71;MQ=27.06;MQ0=9;OQ=128.09;QD=1.69;SB=39.29 GT:AD:DP:GL:GQ 0/1:63,12:57:-36.63,-20.54,-166.03:99
-chr1 231045 . A T 16.10 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=26.04;MQ=26.31;MQ0=9;QD=0.22;SB=44.16 GT:AD:DP:GL:GQ 0/1:63,8:54:-21.15,-16.27,-182.36:48.82
-chr1 231183 . A G 0.09 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=8.45;MQ=28.02;MQ0=10;OQ=325.16;QD=6.25;SB=-110.63 GT:AD:DP:GL:GQ 0/1:19,32:27:-43.95,-8.15,-48.50:99
-chr1 231232 rs11490246 C T 142.56 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=27.55;MQ0=9;OQ=1010.69;QD=16.84;SB=-258.84 GT:AD:DP:GL:GQ 1/1:0,59:26:-104.66,-7.83,-0.01:78.25
-chr1 234887 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=0;HaplotypeScore=14.30;MQ=23.11;MQ0=12;OQ=591.52;QD=2.82;SB=-248.32 GT:AD:DP:GL:GQ 0/1:173,36:184:-117.86,-55.42,-542.00:99
-chr1 235002 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=3;HaplotypeScore=1.45;MQ=7.75;MQ0=92;OQ=65.10;QD=0.63;SB=-6.99 GT:AD:DP:GL:GQ 0/1:88,15:7:-11.90,-2.11,-15.26:97.93
-chr1 235268 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=1;HaplotypeScore=31.21;MQ=26.04;MQ0=17;OQ=96.26;QD=2.53;SB=-57.31 GT:AD:DP:GL:GQ 0/1:24,12:15:-17.43,-4.52,-39.23:99
-chr1 235318 . C G 0.88 PASS AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=31.66;MQ0=1;OQ=172.25;QD=9.57;SB=-27.84 GT:AD:DP:GL:GQ 0/1:12,6:17:-25.63,-5.12,-44.90:99
-chr1 237291 rs62639107 G T 22.08 PASS AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=12.32;MQ0=83;OQ=830.85;QD=6.59;SB=-342.75 GT:AD:DP:GL:GQ 0/1:51,75:34:-96.61,-10.24,-28.48:99
-chr1 237573 . T C 21.25 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=174;Dels=0.00;HRun=0;HaplotypeScore=8.41;MQ=14.44;MQ0=98;QD=0.12;SB=17.09 GT:AD:DP:GL:GQ 0/1:155,19:37:-16.55,-11.15,-125.38:54.05
-chr1 238151 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=9.86;MQ0=83;OQ=59.88;QD=0.63;SB=-10.00 GT:AD:DP:GL:GQ 0/1:91,4:10:-12.29,-3.01,-24.61:92.72
-chr1 238167 rs4109800 G C 1.40 PASS AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=9.69;MQ0=81;OQ=122.76;QD=1.31;SB=-10.00 GT:AD:DP:GL:GQ 0/1:83,11:9:-18.27,-2.71,-21.24:99
-chr1 238254 . G A 14.34 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=10.94;MQ0=73;QD=0.13;SB=-10.00 GT:AD:DP:GL:GQ 0/1:101,9:10:-7.71,-3.01,-28.55:47.01
-chr1 242992 rs4109808 G C 0.33 PASS AC=1;AF=0.50;AN=2;DB;DP=205;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=17.96;MQ0=77;OQ=316.33;QD=1.54;SB=11.07 GT:AD:DP:GL:GQ 0/1:143,62:81:-59.32,-24.40,-284.11:99
-chr1 244543 rs62639119 A G 39.09 PASS AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=13.13;MQ0=71;OQ=645.60;QD=5.98;SB=-100.72 GT:AD:DP:GL:GQ 0/1:56,52:34:-78.09,-10.25,-42.39:99
-chr1 244959 rs4096710 C T 45.82 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=3.93;MQ=13.07;MQ0=59;QD=0.54;SB=-26.62 GT:AD:DP:GL:GQ 0/1:74,11:15:-12.39,-4.52,-39.32:78.66
-chr1 245030 rs4247528 T G 34.76 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=14.80;MQ0=42;QD=0.49;SB=8.04 GT:AD:DP:GL:GQ 0/1:62,9:14:-10.98,-4.22,-38.66:67.59
-chr1 245496 . A G 44.84 LowQual AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.49;MQ0=2;QD=7.47;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:2:-7.89,-0.60,-0.00:6.02
-chr1 314685 . A T 13.26 PASS AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.75;MQ=14.76;MQ0=13;OQ=314.43;QD=11.65;SB=-42.39 GT:AD:DP:GL:GQ 1/1:12,15:9:-35.03,-2.71,-0.00:27.09
-chr1 314938 . G C 1.97 PASS AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=12.45;MQ0=16;OQ=80.86;QD=3.23;SB=-10.00 GT:AD:DP:GL:GQ 1/1:16,9:3:-11.58,-0.91,-0.00:9.03
-chr1 314990 . T C 42.83 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=12.15;MQ0=12;QD=2.14;SB=-10.00 GT:AD:DP:GL:GQ 1/1:10,10:2:-7.69,-0.60,-0.00:6.02
-chr1 354114 rs3905534 G T 4.20 PASS AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=1.96;MQ=17.14;MQ0=8;OQ=149.39;QD=8.30;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,8:10:-21.23,-3.01,-14.53:99
-chr1 374336 rs4959767 C G 48.85 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=9.01;MQ=5.04;MQ0=75;QD=0.57;SB=-10.00 GT:AD:DP:GL:GQ 1/1:78,7:2:-8.29,-0.60,-0.00:6.02
-chr1 374388 rs4120938 C T 0.16 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=7.85;MQ=3.88;MQ0=74;OQ=50.25;QD=0.61;SB=-10.00 GT:AD:DP:GL:GQ 1/1:76,7:2:-8.43,-0.60,-0.00:6.02
-chr1 374916 . A C 6.13 PASS AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.92;MQ0=3;OQ=209.71;QD=17.48;SB=-40.56 GT:AD:DP:GL:GQ 1/1:2,10:8:-24.56,-2.41,-0.01:24.03
-chr1 391491 . T G 33.28 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=1;HaplotypeScore=4.00;MQ=5.85;MQ0=67;QD=0.45;SB=-10.00 GT:AD:DP:GL:GQ 0/1:70,4:3:-7.51,-0.90,-3.44:25.36
-chr1 394166 . C T 0.46 PASS AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=7.89;MQ0=95;OQ=178.49;QD=1.75;SB=-10.00 GT:AD:DP:GL:GQ 0/1:96,6:7:-23.23,-2.11,-3.57:14.61
-chr1 394272 . T G 16.31 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=17.93;MQ0=35;OQ=484.03;QD=7.81;SB=-10.00 GT:AD:DP:GL:GQ 0/1:39,23:22:-58.31,-6.63,-19.38:99
-chr1 394291 rs12121306 C T 153.03 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=16.59;MQ0=30;OQ=364.11;QD=7.75;SB=-10.00 GT:AD:DP:GL:GQ 0/1:31,16:14:-43.91,-4.22,-11.01:67.92
-chr1 394310 . C T 0.18 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=12.47;MQ0=36;OQ=147.86;QD=3.21;SB=-10.00 GT:AD:DP:GL:GQ 0/1:41,5:8:-20.48,-2.41,-10.61:81.97
-chr1 394537 . G A 2.58 PASS AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=6.78;MQ=23.70;MQ0=52;OQ=1238.38;QD=11.79;SB=-421.21 GT:AD:DP:GL:GQ 0/1:65,40:50:-142.19,-15.07,-44.99:99
-chr1 394765 . A G 0.18 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=7.43;MQ0=57;OQ=65.19;QD=1.07;SB=-10.00 GT:AD:DP:GL:GQ 0/1:58,3:4:-11.01,-1.20,-3.46:22.51
-chr1 394834 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=7.99;MQ=12.79;MQ0=47;OQ=202.79;QD=3.56;SB=-10.00 GT:AD:DP:GL:GQ 0/1:49,8:10:-26.57,-3.01,-12.50:94.91
-chr1 394837 . A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=7.99;MQ=12.80;MQ0=51;OQ=216.52;QD=3.49;SB=-10.00 GT:AD:DP:GL:GQ 0/1:48,14:11:-28.25,-3.31,-11.97:86.56
-chr1 404035 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=20.45;MQ=17.63;MQ0=51;OQ=155.60;QD=2.22;SB=-84.79 GT:AD:DP:GL:GQ 0/1:62,8:17:-23.97,-5.12,-38.73:99
-chr1 511466 rs3902909 G A 114.88 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.37;MQ0=1;OQ=299.83;QD=6.00;SB=-10.00 GT:AD:DP:GL:GQ 0/1:35,15:40:-45.34,-12.07,-85.80:99
-chr1 513688 rs61767343 C T 0.33 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=5.41;MQ=21.22;MQ0=15;OQ=264.79;QD=2.88;SB=32.01 GT:AD:DP:GL:GQ 0/1:78,14:66:-49.68,-19.91,-161.21:99
-chr1 522943 . G A 31.72 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=14;HaplotypeScore=31.16;MQ=21.11;MQ0=30;QD=0.33;SB=74.23 GT:AD:DP:GL:GQ 0/1:84,11:55:-23.03,-16.58,-166.54:64.56
-chr1 523155 . C T 20.46 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=7.86;MQ=11.23;MQ0=37;QD=0.34;SB=-10.00 GT:AD:DP:GL:GQ 0/1:56,5:10:-8.34,-3.02,-25.17:53.26
-chr1 523163 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=7.11;MQ=11.49;MQ0=30;OQ=99.30;QD=1.99;SB=-10.00 GT:AD:DP:GL:GQ 0/1:37,13:9:-15.92,-2.71,-17.34:99
-chr1 523812 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=9.50;MQ=11.52;MQ0=31;OQ=145.45;QD=2.05;SB=-10.00 GT:AD:DP:GL:GQ 0/1:61,10:10:-20.85,-3.02,-13.58:99
-chr1 523821 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=9.21;MQ=15.64;MQ0=25;OQ=121.38;QD=1.84;SB=-10.00 GT:AD:DP:GL:GQ 0/1:57,9:12:-19.04,-3.62,-21.78:99
-chr1 523868 . G A 13.34 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.79;MQ0=4;OQ=177.69;QD=5.08;SB=-10.00 GT:AD:DP:GL:GQ 0/1:21,14:15:-25.58,-4.53,-24.67:99
-chr1 524029 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=26.24;MQ0=29;OQ=72.18;QD=0.99;SB=-17.85 GT:AD:DP:GL:GQ 0/1:58,15:34:-20.75,-10.24,-100.17:99
-chr1 524055 rs6680723 C T 0.11 PASS AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=2;HaplotypeScore=11.94;MQ=30.97;MQ0=23;OQ=525.09;QD=5.30;SB=-269.67 GT:AD:DP:GL:GQ 0/1:68,31:65:-75.37,-19.58,-166.45:99
-chr1 524061 rs6680725 C T 44.53 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=14.45;MQ=31.89;MQ0=22;QD=0.42;SB=98.20 GT:AD:DP:GL:GQ 0/1:92,13:70:-28.85,-21.11,-204.21:77.37
-chr1 524105 rs2792879 C T 49.58 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=35.66;MQ0=5;QD=0.40;SB=82.58 GT:AD:DP:GL:GQ 0/1:106,18:95:-36.89,-28.65,-274.71:82.42
-chr1 524187 . G T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=13.69;MQ=38.72;MQ0=2;OQ=392.49;QD=8.18;SB=-133.62 GT:AD:DP:GL:GQ 0/1:25,22:25:-49.77,-7.23,-31.06:99
-chr1 524410 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=27.66;MQ=40.25;MQ0=9;OQ=582.52;QD=5.34;SB=-205.05 GT:AD:DP:GL:GQ 0/1:82,27:83:-86.53,-25.00,-225.34:99
-chr1 524592 rs61767348 C T 0.12 PASS AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=35.17;MQ0=0;OQ=230.33;QD=1.84;SB=-71.36 GT:AD:DP:GL:GQ 0/1:109,16:125:-63.96,-37.65,-391.79:99
-chr1 524704 . C G 0.30 PASS AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=15.62;MQ0=42;OQ=247.71;QD=3.26;SB=-10.00 GT:AD:DP:GL:GQ 0/1:63,13:16:-32.88,-4.82,-37.64:99
-chr1 525671 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=0;HaplotypeScore=16.72;MQ=18.80;MQ0=44;OQ=189.70;QD=1.52;SB=-93.64 GT:AD:DP:GL:GQ 0/1:113,12:40:-34.30,-12.05,-118.97:99
-chr1 525779 . A G 0.63 PASS AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=22.14;MQ0=11;OQ=348.30;QD=4.15;SB=-47.83 GT:AD:DP:GL:GQ 0/1:66,18:49:-52.88,-14.76,-137.92:99
-chr1 525958 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=25.63;MQ=21.45;MQ0=28;OQ=60.59;QD=0.61;SB=-44.97 GT:AD:DP:GL:GQ 0/1:86,13:50:-24.43,-15.08,-139.15:93.42
-chr1 526007 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=23.90;MQ=27.74;MQ0=20;OQ=72.77;QD=0.52;SB=-61.14 GT:AD:DP:GL:GQ 0/1:119,22:81:-34.97,-24.41,-279.63:99
-chr1 526679 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=6.10;MQ=15.23;MQ0=50;OQ=159.06;QD=1.64;SB=-10.00 GT:AD:DP:GL:GQ 0/1:72,25:19:-24.93,-5.74,-37.85:99
-chr1 526910 . C T 33.12 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=15.09;MQ=12.21;MQ0=78;QD=0.31;SB=8.05 GT:AD:DP:GL:GQ 0/1:95,11:28:-15.03,-8.43,-86.21:65.95
-chr1 527066 rs1109924 C T 18.08 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.21;MQ=24.80;MQ0=20;QD=0.22;SB=56.20 GT:AD:DP:GL:GQ 0/1:74,8:55:-21.66,-16.57,-168.07:50.84
-chr1 527350 rs1105044 C T 0.77 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=5.45;MQ=30.46;MQ0=9;OQ=109.38;QD=3.91;SB=5.03 GT:AD:DP:GL:GQ 0/1:19,9:14:-18.45,-4.22,-27.73:99
-chr1 527399 . C G 0.15 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.45;MQ=22.48;MQ0=26;OQ=195.21;QD=3.42;SB=2.03 GT:AD:DP:GL:GQ 0/1:49,8:23:-29.74,-6.93,-66.80:99
-chr1 527400 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=5.09;MQ=22.50;MQ0=26;OQ=149.94;QD=2.50;SB=3.82 GT:AD:DP:GL:GQ 0/1:51,8:23:-28.15,-9.87,-58.83:99
-chr1 527445 . C G 0.06 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=15.27;MQ0=33;OQ=120.74;QD=2.05;SB=-43.89 GT:AD:DP:GL:GQ 0/1:47,12:21:-21.68,-6.33,-71.74:99
-chr1 530476 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=20.30;MQ0=34;OQ=101.99;QD=0.68;SB=16.46 GT:AD:DP:GL:GQ 0/1:135,15:110:-46.63,-33.14,-338.24:99
-chr1 534258 rs61769278 G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=121;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=9.91;MQ0=64;OQ=75.11;QD=0.62;SB=-10.00 GT:AD:DP:GL:GQ 0/1:81,40:6:-12.60,-1.81,-10.89:90.82
-chr1 534650 rs61769279 G C 10.23 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=22.82;MQ0=11;OQ=171.47;QD=4.76;SB=-10.00 GT:AD:DP:GL:GQ 0/1:26,10:21:-26.76,-6.33,-62.71:99
-chr1 536560 rs12025928 A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=3;HaplotypeScore=20.90;MQ=24.04;MQ0=6;OQ=206.19;QD=3.49;SB=8.06 GT:AD:DP:GL:GQ 0/1:26,33:37:-35.06,-11.16,-99.03:99
-chr1 536665 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=53.76;MQ=25.56;MQ0=32;OQ=200.39;QD=1.71;SB=-106.47 GT:AD:DP:GL:GQ 0/1:92,25:66:-43.22,-19.90,-241.56:99
-chr1 536668 rs61769283 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=116;Dels=0.00;HRun=0;HaplotypeScore=52.49;MQ=25.44;MQ0=31;OQ=176.14;QD=1.52;SB=-101.57 GT:AD:DP:GL:GQ 0/1:89,25:62:-39.59,-18.70,-187.95:99
-chr1 536745 rs9438485 T C 0.12 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=10.16;MQ=22.38;MQ0=21;OQ=208.92;QD=2.37;SB=-117.20 GT:AD:DP:GL:GQ 0/1:59,28:39:-35.93,-11.75,-108.78:99
-chr1 536815 rs9438487 T C 0.71 PASS AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=5.65;MQ=26.07;MQ0=22;OQ=487.78;QD=3.81;SB=-195.14 GT:AD:DP:GL:GQ 0/1:76,52:82:-76.77,-24.71,-234.35:99
-chr1 536828 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=25.55;MQ0=22;OQ=75.76;QD=0.57;SB=28.89 GT:AD:DP:GL:GQ 0/1:122,12:82:-35.59,-24.73,-235.80:99
-chr1 537100 . G A 12.85 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=13.16;MQ0=46;QD=0.12;SB=-7.00 GT:AD:DP:GL:GQ 0/1:81,22:25:-12.08,-7.53,-73.93:45.46
-chr1 537113 . C T 31 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=12.14;MQ0=51;QD=0.29;SB=-6.99 GT:AD:DP:GL:GQ 0/1:84,22:18:-11.81,-5.42,-56.12:63.83
-chr1 537596 . G A 46.75 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=0;HaplotypeScore=23.62;MQ=12.88;MQ0=95;QD=0.28;SB=83.26 GT:AD:DP:GL:GQ 0/1:155,15:50:-23.03,-15.07,-148.87:79.59
-chr1 537643 rs9438495 T C 0.24 PASS AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=12.92;MQ0=56;OQ=64.59;QD=0.65;SB=29.12 GT:AD:DP:GL:GQ 0/1:83,15:29:-18.49,-8.74,-88.70:97.43
-chr1 540378 . T C 1.66 PASS AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=10.44;MQ0=61;OQ=250.82;QD=2.82;SB=-10.00 GT:AD:DP:GL:GQ 0/1:69,20:17:-33.49,-5.12,-26.69:99
-chr1 543605 . G A 0.71 PASS AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=19.26;MQ0=44;OQ=534.14;QD=4.38;SB=-165.55 GT:AD:DP:GL:GQ 0/1:95,27:72:-78.41,-21.71,-168.45:99
-chr1 544671 rs4120954 G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=1;HaplotypeScore=17.61;MQ=20.21;MQ0=40;OQ=184.77;QD=1.55;SB=-112.49 GT:AD:DP:GL:GQ 0/1:103,16:61:-40.15,-18.39,-172.29:99
-chr1 549231 . A G 0.07 PASS AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=3.12;MQ=20.37;MQ0=37;OQ=179.14;QD=2.21;SB=30.55 GT:AD:DP:GL:GQ 0/1:67,14:40:-33.25,-12.05,-121.81:99
-chr1 549235 . C G 0.42 PASS AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=21.34;MQ0=35;OQ=329.96;QD=4.12;SB=-9.65 GT:AD:DP:GL:GQ 0/1:65,15:43:-49.24,-12.96,-142.49:99
-chr1 549756 . G A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=4.27;MQ=22.29;MQ0=22;OQ=255.07;QD=4.40;SB=-111.11 GT:AD:DP:GL:GQ 0/1:45,13:33:-38.73,-9.94,-83.62:99
-chr1 551019 . T G 0.10 PASS AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=26.98;MQ0=20;OQ=197.80;QD=2.50;SB=4.26 GT:AD:DP:GL:GQ 0/1:67,12:53:-39.03,-15.96,-159.29:99
-chr1 551526 rs3908981 C A 0.27 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=9.51;MQ0=72;OQ=83.63;QD=0.93;SB=-10.00 GT:AD:DP:GL:GQ 0/1:72,18:8:-14.06,-2.41,-15.23:99
-chr1 552065 . T G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=19.90;MQ0=42;OQ=77.24;QD=1.04;SB=-15.93 GT:AD:DP:GL:GQ 0/1:68,6:22:-17.64,-6.63,-61.21:99
-chr1 553226 . C T 0.19 PASS AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=3;HaplotypeScore=1.62;MQ=24.97;MQ0=44;OQ=605.74;QD=6.51;SB=-203.18 GT:AD:DP:GL:GQ 0/1:67,26:42:-76.51,-12.65,-84.24:99
-chr1 553488 . T C 0.79 PASS AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=309.81;QD=34.42;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:9:-34.57,-2.71,-0.00:27.09
-chr1 555282 rs55668158 C G 1.90 PASS AC=1;AF=0.50;AN=2;DB;DP=111;Dels=0.00;HRun=0;HaplotypeScore=7.94;MQ=40.12;MQ0=17;OQ=1152.38;QD=10.38;SB=-595.15 GT:AD:DP:GL:GQ 0/1:77,33:92:-146.24,-27.72,-249.40:99
-chr1 555454 rs7416152 C T 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=134;Dels=0.00;HRun=0;HaplotypeScore=6.80;MQ=46.34;MQ0=10;OQ=133.21;QD=0.99;SB=31.52 GT:AD:DP:GL:GQ 0/1:100,33:107:-48.84,-32.23,-339.95:99
-chr1 555839 rs9283151 C T 3.01 PASS AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=45.60;MQ0=9;OQ=549.78;QD=4.07;SB=-291.62 GT:AD:DP:GL:GQ 0/1:100,35:123:-95.32,-37.06,-353.94:99
-chr1 555911 rs6421780 G A 0.18 PASS AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=39.59;MQ0=14;OQ=584.19;QD=4.56;SB=-299.10 GT:AD:DP:GL:GQ 0/1:90,32:104:-93.03,-31.32,-293.74:99
-chr1 557751 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=2961;Dels=0.00;HRun=2;HaplotypeScore=55.38;MQ=12.90;MQ0=2051;OQ=15633.32;QD=5.28;SB=59.42 GT:AD:DP:GL:GQ 0/1:109,2851:490:-1562.33,-147.66,-305.00:99
-chr1 558077 . C T 9.05 PASS AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=45.73;MQ0=8;OQ=1080.95;QD=8.72;SB=-436.58 GT:AD:DP:GL:GQ 0/1:87,37:109:-144.24,-32.87,-230.68:99
-chr1 559290 rs55665739 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=606;Dels=0.00;HRun=3;HaplotypeScore=17.31;MQ=15.96;MQ0=469;OQ=1033.33;QD=1.71;SB=-487.92 GT:AD:DP:GL:GQ 0/1:561,45:103:-137.67,-31.06,-222.34:99
-chr1 559575 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=286;Dels=0.00;HRun=0;HaplotypeScore=67.59;MQ=29.40;MQ0=143;OQ=1081.89;QD=3.78;SB=-504.88 GT:AD:DP:GL:GQ 0/1:248,38:131:-150.96,-39.49,-301.87:99
-chr1 560501 rs3912527 T C 0.59 PASS AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=42.53;MQ0=1;OQ=256.32;QD=2.44;SB=101.36 GT:AD:DP:GL:GQ 0/1:81,24:98:-58.45,-29.53,-320.39:99
-chr1 561486 rs4951848 T G 0.07 PASS AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=3;HaplotypeScore=1.10;MQ=14.41;MQ0=91;OQ=408.98;QD=3.27;SB=-10.00 GT:AD:DP:GL:GQ 0/1:75,49:28:-52.62,-8.43,-47.04:99
-chr1 561492 rs4951847 T C 0.48 PASS AC=1;AF=0.50;AN=2;DB;DP=117;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=12.50;MQ0=93;OQ=266.80;QD=2.28;SB=-10.00 GT:AD:DP:GL:GQ 0/1:73,44:19:-35.69,-5.72,-37.10:99
-chr1 561756 rs4092521 C A 0.10 PASS AC=1;AF=0.50;AN=2;DB;DP=234;Dels=0.00;HRun=0;HaplotypeScore=3.92;MQ=28.08;MQ0=93;OQ=133.54;QD=0.57;SB=-15.37 GT:AD:DP:GL:GQ 0/1:211,23:136:-57.61,-40.97,-421.13:99
-chr1 574427 rs4317776 G T 26.75 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=197;Dels=0.00;HRun=9;HaplotypeScore=3.53;MQ=6.95;MQ0=179;QD=0.14;SB=-30.89 GT:AD:DP:GL:GQ 0/1:180,17:17:-11.08,-5.12,-48.02:59.57
-chr1 575363 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=0;HaplotypeScore=13.77;MQ=11.89;MQ0=66;OQ=93.79;QD=0.87;SB=-10.00 GT:AD:DP:GL:GQ 0/1:97,11:18:-18.09,-5.43,-51.57:99
-chr1 575571 . A G 44.95 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=12.50;MQ0=35;QD=0.49;SB=-7.00 GT:AD:DP:GL:GQ 0/1:88,3:9:-10.49,-2.71,-23.69:77.78
-chr1 575656 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=0;HaplotypeScore=17.86;MQ=21.34;MQ0=33;OQ=102.29;QD=0.86;SB=-15.11 GT:AD:DP:GL:GQ 0/1:101,18:60:-31.59,-18.08,-183.63:99
-chr1 577203 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=2;HaplotypeScore=18.06;MQ=18.60;MQ0=50;OQ=68.56;QD=0.90;SB=-15.46 GT:AD:DP:GL:GQ 0/1:71,5:16:-14.96,-4.82,-42.28:99
-chr1 578945 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=108;Dels=0.01;HRun=3;HaplotypeScore=26.60;MQ=35.12;MQ0=11;OQ=422.46;QD=3.91;SB=-212.09 GT:AD:DP:GL:GQ 0/1:86,21:88:-72.04,-26.51,-252.61:99
-chr1 581862 rs428603 C T 12.84 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=117;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=16.17;MQ0=62;QD=0.11;SB=5.04 GT:AD:DP:GL:GQ 0/1:112,5:25:-12.07,-7.53,-76.64:45.44
-chr1 582131 rs2808300 G T 0.12 PASS AC=1;AF=0.50;AN=2;DB;DP=133;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=20.19;MQ0=60;OQ=103.03;QD=0.77;SB=74.25 GT:AD:DP:GL:GQ 0/1:113,20:71:-34.97,-21.38,-223.52:99
-chr1 590341 . G A 2.32 PASS AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=31.66;MQ0=1;OQ=697.92;QD=5.91;SB=-148.83 GT:AD:DP:GL:GQ 0/1:88,30:101:-103.52,-30.45,-248.69:99
-chr1 591004 . C T 96.57 PASS AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=34.15;MQ0=0;OQ=697.04;QD=7.58;SB=-276.23 GT:AD:DP:GL:GQ 0/1:66,26:89:-99.83,-26.84,-204.19:99
-chr1 591498 rs2531322 C A 0.53 PASS AC=1;AF=0.50;AN=2;DB;DP=129;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=32.80;MQ0=0;OQ=356.51;QD=2.76;SB=131.06 GT:AD:DP:GL:GQ 0/1:108,21:125:-76.61,-37.67,-331.80:99
-chr1 592316 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=5.89;MQ=8.09;MQ0=42;OQ=58.17;QD=0.88;SB=-10.00 GT:AD:DP:GL:GQ 0/1:52,12:5:-10.61,-1.51,-6.31:48.04
-chr1 592508 rs2686868 C T 15.96 PASS AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=1;HaplotypeScore=3.16;MQ=34.52;MQ0=0;OQ=1500.76;QD=12.61;SB=-645.23 GT:AD:DP:GL:GQ 0/1:71,48:113:-187.40,-34.04,-240.50:99
-chr1 616184 rs2808330 A G 13.87 PASS AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.61;MQ0=5;OQ=348.18;QD=3.38;SB=86.31 GT:AD:DP:GL:GQ 0/1:75,28:95:-66.73,-28.63,-299.16:99
-chr1 625884 rs3857304 G A 2.14 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=6.38;MQ0=48;OQ=115.97;QD=2.23;SB=-51.67 GT:AD:DP:GL:GQ 1/1:47,5:4:-15.13,-1.21,-0.00:12.03
-chr1 625907 rs4030160 G A 213.52 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=11.50;MQ0=27;OQ=320.38;QD=8.90;SB=-93.34 GT:AD:DP:GL:GQ 1/1:25,11:9:-35.62,-2.71,-0.00:27.09
-chr1 625979 rs3871845 G C 249.04 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=11.96;MQ0=27;OQ=358.10;QD=9.68;SB=-129.40 GT:AD:DP:GL:GQ 1/1:26,11:9:-39.40,-2.71,-0.00:27.09
-chr1 626181 rs3873089 G A 177.45 PASS AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.43;MQ0=3;OQ=376.84;QD=28.99;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,13:10:-41.27,-3.01,-0.00:30.10
-chr1 638976 . C T 0.12 PASS AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=4.06;MQ=23.85;MQ0=8;OQ=648.49;QD=24.02;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,27:17:-68.44,-5.12,-0.00:51.17
-chr1 640686 . A G 25.04 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=6.84;MQ0=102;QD=0.23;SB=-10.00 GT:AD:DP:GL:GQ 0/1:98,10:6:-7.60,-1.81,-15.47:57.87
-chr1 641012 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=157;Dels=0.00;HRun=1;HaplotypeScore=5.72;MQ=12.45;MQ0=138;OQ=282.66;QD=1.80;SB=-113.62 GT:AD:DP:GL:GQ 0/1:142,15:18:-36.97,-5.42,-32.71:99
-chr1 647651 . G C 91.46 PASS AC=2;AF=1.00;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=15.14;MQ0=31;OQ=441.56;QD=9.39;SB=-238.61 GT:AD:DP:GL:GQ 1/1:28,19:11:-47.74,-3.31,-0.00:33.11
-chr1 652720 rs62639125 G A 47.02 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=8.82;MQ0=19;QD=1.42;SB=-10.00 GT:AD:DP:GL:GQ 1/1:13,20:2:-8.11,-0.60,-0.00:6.02
-chr1 652960 rs61769340 G C 105.13 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=20.58;MQ0=11;OQ=1522.59;QD=27.68;SB=-684.47 GT:AD:DP:GL:GQ 1/1:10,45:39:-155.88,-11.77,-0.03:99
-chr1 656406 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=11.93;MQ0=83;OQ=127.34;QD=1.14;SB=-0.98 GT:AD:DP:GL:GQ 0/1:95,17:17:-21.14,-5.12,-45.67:99
-chr1 662072 . G A 11.72 PASS AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=27.50;MQ0=7;OQ=1481.48;QD=11.06;SB=-511.41 GT:AD:DP:GL:GQ 0/1:80,54:118:-187.00,-35.57,-233.79:99
-chr1 662535 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=1;HaplotypeScore=4.63;MQ=12.94;MQ0=86;OQ=221.86;QD=1.71;SB=-10.00 GT:AD:DP:GL:GQ 0/1:117,13:31:-34.81,-9.34,-77.61:99
-chr1 664297 . A T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=1;HaplotypeScore=8.91;MQ=25.89;MQ0=44;OQ=139.99;QD=0.72;SB=29.32 GT:AD:DP:GL:GQ 0/1:135,59:118:-52.83,-35.54,-396.03:99
-chr1 664319 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=1;HaplotypeScore=4.98;MQ=25.84;MQ0=39;OQ=562.89;QD=2.86;SB=-70.36 GT:AD:DP:GL:GQ 0/1:152,44:131:-101.81,-42.24,-385.33:99
-chr1 665009 . G A 0.15 PASS AC=2;AF=1.00;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=7.66;MQ=13.29;MQ0=30;OQ=394.21;QD=6.36;SB=-10.00 GT:AD:DP:GL:GQ 1/1:20,42:11:-43.01,-3.32,-0.01:33.10
-chr1 665981 . C T 314.88 PASS AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.49;MQ0=9;OQ=1228.86;QD=15.36;SB=-521.03 GT:AD:DP:GL:GQ 0/1:42,38:68:-146.65,-20.48,-114.04:99
-chr1 678857 . T C 37.39 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=9.96;MQ0=52;QD=0.58;SB=-41.94 GT:AD:DP:GL:GQ 0/1:58,5:10:-10.04,-3.02,-24.70:70.23
-chr1 681407 . T A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=56;Dels=0.00;HRun=13;HaplotypeScore=8.39;MQ=28.14;MQ0=23;OQ=991.49;QD=17.71;SB=-487.41 GT:AD:DP:GL:GQ 1/1:17,39:33:-109.19,-9.95,-6.46:34.91
-chr1 681927 . C G 40.97 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=4.89;MQ=4.61;MQ0=72;QD=0.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:72,2:3:-8.29,-0.90,-4.05:31.44
-chr1 684740 rs1829739 A C 31.20 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=3;HaplotypeScore=24.15;MQ=12.41;MQ0=41;QD=0.60;SB=-34.97 GT:AD:DP:GL:GQ 0/1:47,5:9:-9.12,-2.71,-21.21:64.03
-chr1 684742 . C A 14.57 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=37.61;MQ=12.41;MQ0=41;QD=0.28;SB=-31.35 GT:AD:DP:GL:GQ 0/1:46,6:9:-7.44,-2.71,-24.53:47.25
-chr1 684781 . C T 48.14 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.66;MQ=4.69;MQ0=46;QD=1.00;SB=-49.56 GT:AD:DP:GL:GQ 1/1:40,8:2:-8.22,-0.60,-0.00:6.02
-chr1 684978 . A T 38.37 PASS AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.29;MQ0=2;OQ=86.08;QD=14.35;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,6:3:-12.10,-0.90,-0.00:9.03
-chr1 690691 rs6685320 T A 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=41.41;MQ0=1;OQ=71.22;QD=0.76;SB=149.48 GT:AD:DP:GL:GQ 0/1:83,11:90:-37.51,-27.11,-298.94:99
-chr1 692785 . C T 0.89 PASS AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.63;MQ0=14;OQ=282.72;QD=2.30;SB=-80.41 GT:AD:DP:GL:GQ 0/1:107,16:98:-61.07,-29.52,-300.46:99
-chr1 692834 . C T 2.02 PASS AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=26.70;MQ0=10;OQ=722.71;QD=6.12;SB=-381.76 GT:AD:DP:GL:GQ 0/1:89,29:108:-108.08,-32.53,-294.03:99
-chr1 692878 rs12124557 G C 71.38 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.28;MQ0=34;OQ=350.61;QD=4.61;SB=-168.38 GT:AD:DP:GL:GQ 0/1:61,15:41:-50.70,-12.35,-126.27:99
-chr1 694230 rs9727436 T C 8.89 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=32.48;MQ0=2;OQ=333.56;QD=17.56;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,18:12:-36.95,-3.62,-0.01:36.08
-chr1 695745 . G A 102.02 PASS AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=41.82;MQ0=0;OQ=1169.68;QD=16.02;SB=-501.47 GT:AD:DP:GL:GQ 0/1:36,37:71:-141.66,-21.41,-112.07:99
-chr1 696231 rs12029736 A G 92.82 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=39.21;MQ0=1;OQ=1205.31;QD=20.78;SB=-587.73 GT:AD:DP:GL:GQ 0/1:5,53:49:-138.60,-14.79,-16.39:15.94
-chr1 696641 . G A 0.05 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=11.92;MQ=21.76;MQ0=28;OQ=1527.01;QD=18.18;SB=-47.56 GT:AD:DP:GL:GQ 1/1:26,58:39:-156.30,-11.75,-0.02:99
-chr1 704290 rs12028261 G A 67.98 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.14;MQ=38.97;MQ0=0;OQ=1407.21;QD=35.18;SB=-656.37 GT:AD:DP:GL:GQ 1/1:0,40:36:-144.32,-10.85,-0.01:99
-chr1 705211 rs3131984 T G 181.58 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=48.59;MQ0=0;OQ=1797.71;QD=32.69;SB=-808.10 GT:AD:DP:GL:GQ 1/1:0,55:52:-183.37,-15.66,-0.02:99
-chr1 705859 rs4614203 A T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=9;HaplotypeScore=9.09;MQ=20.66;MQ0=19;OQ=690.18;QD=13.80;SB=-46.39 GT:AD:DP:GL:GQ 1/1:1,48:20:-72.61,-6.03,-0.01:60.18
-chr1 708249 rs10900602 A G 1.62 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.93;MQ=25.93;MQ0=21;OQ=1118.18;QD=17.47;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,63:38:-115.46,-11.48,-0.05:99
-chr1 708418 rs10751453 T C 415.24 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.69;MQ0=5;OQ=1667.51;QD=27.79;SB=-566.12 GT:AD:DP:GL:GQ 1/1:4,56:54:-174.43,-16.28,-4.09:99
-chr1 710103 rs3121393 T C 439.85 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.62;MQ0=19;OQ=1791.16;QD=20.59;SB=-717.22 GT:AD:DP:GL:GQ 1/1:0,87:51:-182.72,-15.36,-0.02:99
-chr1 710660 rs3115846 G A 23.98 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=32.94;MQ0=7;OQ=1843.21;QD=32.91;SB=-738.02 GT:AD:DP:GL:GQ 1/1:0,56:47:-187.92,-14.16,-0.01:99
-chr1 713754 rs2977670 G C 680.35 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.16;MQ0=0;OQ=1954.35;QD=36.87;SB=-819.16 GT:AD:DP:GL:GQ 1/1:0,53:49:-199.05,-14.78,-0.03:99
-chr1 714052 . G A 38.81 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=1;HaplotypeScore=27.06;MQ=47.82;MQ0=13;QD=0.40;SB=-19.66 GT:AD:DP:GL:GQ 0/1:88,9:69:-27.95,-20.79,-220.66:71.64
-chr1 714724 rs12123401 G A 77.21 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=38.16;MQ=32.18;MQ0=19;QD=1.19;SB=53.18 GT:AD:DP:GL:GQ 0/1:50,14:32:-20.64,-9.64,-97.41:99
-chr1 714732 rs12735556 C A 597.50 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=35.96;MQ=32.37;MQ0=15;QD=9.34;SB=-186.20 GT:AD:DP:GL:GQ 0/1:31,30:31:-72.37,-9.34,-42.36:99
-chr1 714734 rs12735557 C G 606.51 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=32.96;MQ=32.01;MQ0=15;QD=9.48;SB=-232.37 GT:AD:DP:GL:GQ 0/1:31,33:32:-73.58,-9.64,-63.94:99
-chr1 714811 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=1;HaplotypeScore=105.18;MQ=32.80;MQ0=13;OQ=394.82;QD=4.11;SB=-25.79 GT:AD:DP:GL:GQ 0/1:48,48:42:-55.42,-12.65,-93.88:99
-chr1 714830 . G A 44.58 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=2;HaplotypeScore=123.02;MQ=32.55;MQ0=17;QD=0.46;SB=2.03 GT:AD:DP:GL:GQ 0/1:60,27:26:-15.57,-7.83,-82.81:77.42
-chr1 714865 . G A 118.87 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=2;HaplotypeScore=72.07;MQ=36.16;MQ0=17;QD=1.19;SB=45.52 GT:AD:DP:GL:GQ 0/1:83,11:39:-26.94,-11.77,-99.77:99
-chr1 714869 . G A 210.22 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=70.54;MQ=36.82;MQ0=18;QD=2.08;SB=89.30 GT:AD:DP:GL:GQ 0/1:78,22:52:-39.97,-15.66,-154.79:99
-chr1 714870 . G C 132.10 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=64.77;MQ=36.96;MQ0=18;QD=1.33;SB=86.32 GT:AD:DP:GL:GQ 0/1:81,18:51:-31.86,-15.37,-195.72:99
-chr1 714885 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=11.63;MQ=42.34;MQ0=19;OQ=59.67;QD=0.80;SB=57.28 GT:AD:DP:GL:GQ 0/1:59,16:42:-21.91,-12.66,-130.29:92.50
-chr1 714965 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.06;HRun=0;HaplotypeScore=109.90;MQ=37.50;MQ0=15;OQ=104.38;QD=1.12;SB=93.07 GT:AD:DP:GL:GQ 0/1:76,7:50:-34.61,-20.89,-189.48:99
-chr1 714987 . A T 75.82 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=80;Dels=0.03;HRun=1;HaplotypeScore=85.54;MQ=37.34;MQ0=12;QD=0.95;SB=77.28 GT:AD:DP:GL:GQ 0/1:70,6:44:-26.77,-15.90,-141.85:99
-chr1 714990 . A G 169.75 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=75;Dels=0.04;HRun=1;HaplotypeScore=76.84;MQ=38.08;MQ0=11;QD=2.26;SB=1.07 GT:AD:DP:GL:GQ 0/1:50,19:44:-36.22,-15.96,-136.58:99
-chr1 714991 . A G 49.83 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=75;Dels=0.01;HRun=0;HaplotypeScore=63.75;MQ=38.08;MQ0=11;QD=0.66;SB=86.30 GT:AD:DP:GL:GQ 0/1:68,6:44:-21.52,-13.26,-154.68:82.67
-chr1 714995 . C A 39.02 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=2;HaplotypeScore=68.11;MQ=38.07;MQ0=12;QD=0.54;SB=48.86 GT:AD:DP:GL:GQ 0/1:52,10:39:-31.66,-24.48,-125.33:71.86
-chr1 715012 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=28.31;MQ=43.81;MQ0=11;OQ=81.07;QD=1.33;SB=77.26 GT:AD:DP:GL:GQ 0/1:50,6:42:-27.43,-16.04,-129.03:99
-chr1 715014 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=28.31;MQ=44.76;MQ0=10;OQ=135.00;QD=2.29;SB=80.30 GT:AD:DP:GL:GQ 0/1:48,10:43:-29.74,-12.96,-149.46:99
-chr1 715704 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=1;HaplotypeScore=25.25;MQ=54.80;MQ0=2;OQ=145.06;QD=1.23;SB=-43.38 GT:AD:DP:GL:GQ 0/1:97,21:107:-50.01,-32.22,-342.89:99
-chr1 716048 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=178;Dels=0.00;HRun=1;HaplotypeScore=18.47;MQ=39.54;MQ0=8;OQ=52.50;QD=0.29;SB=34.27 GT:AD:DP:GL:GQ 0/1:78,99:81:-32.94,-24.40,-274.16:85.34
-chr1 716061 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=21.67;MQ=39.51;MQ0=6;OQ=115.15;QD=0.62;SB=43.85 GT:AD:DP:GL:GQ 0/1:135,49:85:-40.41,-25.61,-331.38:99
-chr1 716222 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=2;HaplotypeScore=139.36;MQ=31.95;MQ0=27;OQ=92.92;QD=0.79;SB=-50.76 GT:AD:DP:GL:GQ 0/1:103,13:47:-26.73,-14.16,-149.22:99
-chr1 716344 rs3131980 T G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=39.71;MQ=55.45;MQ0=6;OQ=2415.81;QD=31.79;SB=-1086.51 GT:AD:DP:GL:GQ 1/1:2,74:68:-245.18,-20.48,-0.02:99
-chr1 716802 rs4520358 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=160;Dels=0.00;HRun=0;HaplotypeScore=127.95;MQ=28.01;MQ0=48;OQ=1542.52;QD=9.64;SB=-717.92 GT:AD:DP:GL:GQ 0/1:109,49:76:-180.46,-22.93,-134.20:99
-chr1 716807 rs3131979 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.00;HRun=1;HaplotypeScore=146.45;MQ=27.53;MQ0=52;OQ=2520.74;QD=14.92;SB=-1257.54 GT:AD:DP:GL:GQ 0/1:69,89:79:-286.20,-30.85,-56.55:99
-chr1 717392 . A G 3.52 PASS AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.37;MQ=24.74;MQ0=13;OQ=554.36;QD=8.66;SB=-175.95 GT:AD:DP:GL:GQ 0/1:36,28:38:-70.17,-11.45,-77.18:99
-chr1 717776 . A G 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=36.84;MQ0=8;OQ=198.21;QD=1.82;SB=-48.31 GT:AD:DP:GL:GQ 0/1:82,26:93:-51.12,-28.02,-315.62:99
-chr1 717825 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=45.12;MQ0=3;OQ=93.24;QD=0.90;SB=-41.95 GT:AD:DP:GL:GQ 0/1:87,17:97:-41.83,-29.22,-341.26:99
-chr1 718022 rs3131978 C T 227.01 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=24.78;MQ0=12;OQ=2206.38;QD=27.93;SB=-528.20 GT:AD:DP:GL:GQ 1/1:0,79:55:-224.24,-16.57,-0.01:99
-chr1 718105 rs3131977 C G 701.77 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.42;MQ0=9;OQ=2564.24;QD=33.30;SB=-886.52 GT:AD:DP:GL:GQ 1/1:0,77:61:-260.03,-18.38,-0.02:99
-chr1 718468 rs2977661 C A 0.97 PASS AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=44.88;MQ0=1;OQ=306.65;QD=3.13;SB=125.41 GT:AD:DP:GL:GQ 0/1:81,17:92:-61.67,-27.72,-254.10:99
-chr1 719542 rs4951859 C G 20.03 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=0.73;MQ=51.87;MQ0=0;OQ=2314.11;QD=40.60;SB=-1158.05 GT:AD:DP:GL:GQ 1/1:0,57:55:-235.02,-16.58,-0.02:99
-chr1 722635 . G A 178.90 PASS AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.65;MQ0=17;OQ=703.25;QD=9.38;SB=-329.31 GT:AD:DP:GL:GQ 0/1:40,35:48:-88.07,-14.46,-95.92:99
-chr1 723861 rs3094321 C T 2.53 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=4.03;MQ=14.10;MQ0=13;OQ=171.30;QD=5.53;SB=-52.67 GT:AD:DP:GL:GQ 1/1:0,31:5:-20.69,-1.51,-0.00:15.05
-chr1 723905 rs3115866 G A 435.39 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.45;MQ0=11;OQ=1488.74;QD=31.02;SB=-417.55 GT:AD:DP:GL:GQ 1/1:0,48:37:-152.47,-11.14,-0.01:99
-chr1 724152 rs2427932 G A 28.59 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=40.65;MQ0=10;OQ=544.36;QD=7.78;SB=29.11 GT:AD:DP:GL:GQ 0/1:46,24:57:-74.91,-17.19,-123.40:99
-chr1 724325 rs12564807 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.02;HRun=14;HaplotypeScore=12.95;MQ=25.23;MQ0=25;OQ=486.84;QD=10.36;SB=-195.27 GT:AD:DP:GL:GQ 0/1:7,39:20:-57.99,-6.03,-17.33:99
-chr1 724354 rs7518433 T C 213.81 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=16.24;MQ0=8;OQ=108.50;QD=7.23;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:4:-14.38,-1.21,-0.00:12.04
-chr1 724429 . G A 5.67 PASS AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=39.71;MQ0=12;OQ=1919.08;QD=16.26;SB=-856.39 GT:AD:DP:GL:GQ 0/1:56,62:102:-225.91,-30.72,-172.49:99
-chr1 724483 rs2427930 A G 156.88 PASS AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=45.92;MQ0=8;OQ=1015.40;QD=8.46;SB=-368.74 GT:AD:DP:GL:GQ 0/1:73,47:110:-137.96,-33.13,-289.42:99
-chr1 724814 rs61770166 A G 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.01;HRun=0;HaplotypeScore=8.00;MQ=38.81;MQ0=11;OQ=57.16;QD=0.57;SB=101.37 GT:AD:DP:GL:GQ 0/1:74,25:85:-34.30,-25.30,-302.54:90
-chr1 725289 rs10900603 G A 319.30 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.84;MQ0=12;OQ=1308.47;QD=22.56;SB=-614.32 GT:AD:DP:GL:GQ 1/1:0,58:33:-134.44,-9.94,-0.01:99
-chr1 727603 rs3893479 G A 3.33 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=20.83;MQ0=35;OQ=241.46;QD=3.71;SB=-122.11 GT:AD:DP:GL:GQ 0/1:49,15:27:-35.56,-8.14,-65.14:99
-chr1 729005 rs2340527 T A 17.56 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=11;HaplotypeScore=0.00;MQ=42.93;MQ0=12;QD=0.18;SB=2.25 GT:AD:DP:GL:GQ 0/1:70,25:68:-25.52,-20.49,-222.57:50.31
-chr1 729073 rs2427917 A G 0.66 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=3;HaplotypeScore=1.32;MQ=36.83;MQ0=11;OQ=1725.34;QD=25.00;SB=-386.59 GT:AD:DP:GL:GQ 1/1:8,61:54:-180.20,-16.27,-4.08:99
-chr1 729289 rs3131973 A G 242.97 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.01;MQ0=22;OQ=768.10;QD=13.48;SB=-48.96 GT:AD:DP:GL:GQ 1/1:0,57:23:-80.40,-6.93,-0.01:69.20
-chr1 729391 rs3094317 G A 25.41 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=29.31;MQ0=14;OQ=1050.45;QD=23.87;SB=-501.02 GT:AD:DP:GL:GQ 1/1:0,44:27:-108.64,-8.13,-0.01:81.26
-chr1 731442 rs3115865 T C 10.98 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=14.78;MQ0=18;OQ=257.65;QD=3.79;SB=-147.73 GT:AD:DP:GL:GQ 1/1:0,68:9:-29.35,-2.71,-0.01:27.07
-chr1 732688 . A G 132.94 PASS AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=40.79;MQ0=0;OQ=1231.30;QD=15.02;SB=-638.22 GT:AD:DP:GL:GQ 0/1:40,42:81:-150.81,-24.40,-157.55:99
-chr1 732884 rs2488925 T C 45.12 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=12.78;MQ0=54;QD=0.47;SB=-0.97 GT:AD:DP:GL:GQ 0/1:72,25:9:-10.51,-2.71,-24.07:77.96
-chr1 732935 rs2488505 C A 405.73 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=25.42;MQ0=21;OQ=984.68;QD=12.62;SB=-456.35 GT:AD:DP:GL:GQ 1/1:10,68:28:-102.06,-8.43,-0.01:84.26
-chr1 734986 rs61823337 A C 21.52 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=121;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=22.23;MQ0=45;QD=0.18;SB=23.10 GT:AD:DP:GL:GQ 0/1:104,17:71:-26.81,-21.38,-234.10:54.33
-chr1 735210 rs2488501 T C 0.42 PASS AC=1;AF=0.50;AN=2;DB;DP=117;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=29.20;MQ0=16;OQ=204.37;QD=1.75;SB=-126.97 GT:AD:DP:GL:GQ 0/1:101,16:100:-53.85,-30.13,-340.21:99
-chr1 736231 rs3925106 C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=38.77;MQ0=4;OQ=87.62;QD=1.33;SB=28.85 GT:AD:DP:GL:GQ 0/1:58,8:62:-30.72,-18.67,-192.09:99
-chr1 736257 rs28622890 G A 34.58 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=41.58;MQ0=5;QD=0.43;SB=53.57 GT:AD:DP:GL:GQ 0/1:73,8:73:-28.75,-22.01,-217.76:67.42
-chr1 737271 rs2427896 G A 1.34 PASS AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.89;MQ0=27;OQ=95.91;QD=0.96;SB=26.10 GT:AD:DP:GL:GQ 0/1:78,22:62:-31.55,-18.68,-198.47:99
-chr1 737583 rs2488922 A G 0.48 PASS AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=42.10;MQ0=2;OQ=266.56;QD=2.17;SB=-121.05 GT:AD:DP:GL:GQ 0/1:92,31:105:-61.60,-31.66,-333.56:99
-chr1 738741 rs2519043 G T 42.42 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=26.82;MQ0=11;OQ=2109.65;QD=29.30;SB=-875.26 GT:AD:DP:GL:GQ 1/1:7,65:57:-214.56,-17.17,-0.01:99
-chr1 739128 rs2519041 G A 43.02 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=8.37;MQ0=49;QD=0.61;SB=-10.00 GT:AD:DP:GL:GQ 1/1:19,51:2:-7.71,-0.60,-0.00:6.02
-chr1 739546 rs12184332 C T 184.94 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=12.22;MQ0=29;OQ=412.05;QD=9.81;SB=-172.22 GT:AD:DP:GL:GQ 1/1:0,15:11:-44.79,-3.31,-0.00:33.11
-chr1 739719 rs12409679 C T 476.33 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.16;MQ0=31;OQ=1249.90;QD=19.53;SB=-559.74 GT:AD:DP:GL:GQ 1/1:9,55:32:-128.58,-9.64,-0.01:96.31
-chr1 739852 rs12409693 C T 32.23 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=4;HaplotypeScore=0.83;MQ=11.24;MQ0=16;QD=1.29;SB=-3.98 GT:AD:DP:GL:GQ 0/1:9,16:4:-7.71,-1.20,-7.59:63.88
-chr1 739860 rs12410209 A G 6.46 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=11.03;MQ0=14;OQ=69.01;QD=3.14;SB=-6.99 GT:AD:DP:GL:GQ 0/1:7,15:4:-11.39,-1.20,-4.06:28.52
-chr1 742429 rs3094315 G A 709.48 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.17;MQ0=0;OQ=3081.43;QD=40.02;SB=-1319.35 GT:AD:DP:GL:GQ 1/1:0,77:77:-311.75,-23.19,-0.02:99
-chr1 742584 rs3131972 A G 25.55 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=43.52;MQ0=0;OQ=2970.98;QD=35.37;SB=-1399.49 GT:AD:DP:GL:GQ 1/1:0,84:83:-300.71,-25.00,-0.02:99
-chr1 742757 rs3131971 T C 41.65 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.21;MQ=23.17;MQ0=17;OQ=516.07;QD=12.59;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,37:19:-55.23,-5.74,-0.04:57.08
-chr1 743132 rs3115861 C G 14.67 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=27.06;MQ0=17;OQ=1234.23;QD=26.26;SB=-15.29 GT:AD:DP:GL:GQ 1/1:0,46:29:-129.86,-11.46,-2.85:86.17
-chr1 743268 rs3115860 C A 75.43 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.75;MQ0=7;OQ=486.16;QD=22.10;SB=-153.55 GT:AD:DP:GL:GQ 1/1:0,22:14:-52.20,-4.22,-0.00:42.13
-chr1 743288 rs3131970 T C 362.63 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.31;MQ0=12;OQ=231.44;QD=11.57;SB=-100.85 GT:AD:DP:GL:GQ 1/1:0,20:8:-26.73,-2.41,-0.01:24.06
-chr1 743337 rs2073814 C G 1.55 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=4;HaplotypeScore=1.47;MQ=27.30;MQ0=10;OQ=1125.84;QD=30.43;SB=-429.30 GT:AD:DP:GL:GQ 1/1:1,36:27:-116.18,-8.13,-0.01:81.27
-chr1 743712 rs56101360 G T 37.36 PASS AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=10.96;MQ0=18;OQ=73.40;QD=3.50;SB=-44.39 GT:AD:DP:GL:GQ 1/1:0,21:3:-10.83,-0.90,-0.00:9.03
-chr1 744045 rs3131969 A G 233.56 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.14;MQ0=6;OQ=1104.31;QD=23.50;SB=-502.19 GT:AD:DP:GL:GQ 1/1:0,47:36:-114.05,-10.86,-0.03:99
-chr1 744055 rs3131968 A G 489.63 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.65;MQ0=5;OQ=1245.81;QD=27.08;SB=-566.90 GT:AD:DP:GL:GQ 1/1:0,46:40:-128.20,-12.07,-0.04:99
-chr1 744197 rs3131967 T C 119.26 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=53.80;MQ0=2;OQ=2119.16;QD=28.26;SB=-841.48 GT:AD:DP:GL:GQ 1/1:1,74:67:-215.56,-20.21,-0.06:99
-chr1 744366 rs3115859 G A 143.80 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.48;MQ0=0;OQ=2152.98;QD=37.77;SB=-958.79 GT:AD:DP:GL:GQ 1/1:0,55:55:-218.90,-16.57,-0.02:99
-chr1 744827 rs3131966 C T 120.29 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=47.82;MQ0=1;OQ=2882.74;QD=38.96;SB=-1406.06 GT:AD:DP:GL:GQ 1/1:1,73:72:-291.88,-21.69,-0.02:99
-chr1 745638 rs3131965 A G 37.34 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=59.56;MQ0=0;OQ=1308.09;QD=25.16;SB=-645.91 GT:AD:DP:GL:GQ 1/1:2,50:45:-138.61,-13.58,-4.21:93.63
-chr1 745750 rs3131964 C G 3.97 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=53.42;MQ0=0;OQ=1959.71;QD=42.60;SB=-541.05 GT:AD:DP:GL:GQ 1/1:0,46:45:-199.57,-13.56,-0.01:99
-chr1 745753 rs3115858 A T 53.72 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=52.51;MQ0=0;OQ=1749.78;QD=37.23;SB=-548.77 GT:AD:DP:GL:GQ 1/1:0,47:47:-178.57,-14.15,-0.01:99
-chr1 745791 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=2;HaplotypeScore=18.24;MQ=43.86;MQ0=9;OQ=50.05;QD=0.65;SB=68.26 GT:AD:DP:GL:GQ 0/1:71,6:65:-27.87,-19.59,-256.05:82.88
-chr1 745803 rs3115857 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=56.59;MQ=40.14;MQ0=10;OQ=1678.77;QD=22.69;SB=-752.72 GT:AD:DP:GL:GQ 0/1:24,50:53:-187.11,-15.98,-16.89:9.18
-chr1 745905 . G C 40.04 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=109.46;MQ=39.52;MQ0=1;QD=0.47;SB=41.16 GT:AD:DP:GL:GQ 0/1:44,42:46:-21.15,-13.87,-174.52:72.88
-chr1 745926 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=71.25;MQ=39.59;MQ0=1;OQ=190.93;QD=2.22;SB=53.16 GT:AD:DP:GL:GQ 0/1:47,39:55:-38.95,-16.57,-157.39:99
-chr1 745944 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=34.08;MQ=37.55;MQ0=2;OQ=183.15;QD=2.23;SB=41.15 GT:AD:DP:GL:GQ 0/1:68,13:63:-40.58,-18.98,-189.40:99
-chr1 745947 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=35.45;MQ=37.64;MQ0=2;OQ=144.60;QD=1.76;SB=41.13 GT:AD:DP:GL:GQ 0/1:61,21:63:-36.72,-18.98,-195.32:99
-chr1 745969 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=26.39;MQ=43.31;MQ0=1;OQ=191.12;QD=2.62;SB=65.24 GT:AD:DP:GL:GQ 0/1:56,17:62:-41.07,-18.68,-205.74:99
-chr1 745970 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=53.14;MQ=43.05;MQ0=1;OQ=181.87;QD=2.46;SB=65.22 GT:AD:DP:GL:GQ 0/1:57,13:62:-40.15,-18.68,-186.08:99
-chr1 746120 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=2;HaplotypeScore=45.83;MQ=41.92;MQ0=5;OQ=178.43;QD=2.66;SB=1.10 GT:AD:DP:GL:GQ 0/1:36,31:38:-32.58,-11.45,-99.35:99
-chr1 746127 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=64.18;MQ=39.79;MQ0=5;OQ=90.17;QD=1.29;SB=23.10 GT:AD:DP:GL:GQ 0/1:61,9:40:-24.35,-12.05,-113.93:99
-chr1 746131 rs12567639 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=86.22;MQ=40.15;MQ0=5;OQ=1193.97;QD=14.74;SB=-198.46 GT:AD:DP:GL:GQ 0/1:23,47:41:-137.40,-14.72,-24.14:94.15
-chr1 746140 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=67.36;MQ=39.96;MQ0=6;OQ=451.51;QD=4.47;SB=-226.37 GT:AD:DP:GL:GQ 0/1:64,37:56:-65.31,-16.87,-128.04:99
-chr1 746183 rs61768169 G A 45.64 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=15.14;MQ=43.93;MQ0=4;QD=0.48;SB=0.06 GT:AD:DP:GL:GQ 0/1:84,10:80:-31.96,-24.11,-251.75:78.48
-chr1 746197 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=9.62;MQ=45.83;MQ0=2;OQ=266.46;QD=3.10;SB=-143.52 GT:AD:DP:GL:GQ 0/1:62,24:69:-50.72,-20.79,-191.84:99
-chr1 746210 . C G 29.36 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=1;HaplotypeScore=12.28;MQ=48.57;MQ0=1;QD=0.39;SB=83.30 GT:AD:DP:GL:GQ 0/1:61,15:60:-24.30,-18.08,-232.38:62.19
-chr1 746211 . A C 19.28 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=12.28;MQ=48.88;MQ0=1;QD=0.26;SB=56.68 GT:AD:DP:GL:GQ 0/1:55,20:60:-23.28,-18.07,-191.05:52.07
-chr1 746241 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=1;HaplotypeScore=37.04;MQ=43.41;MQ0=2;OQ=460.88;QD=4.90;SB=-102.94 GT:AD:DP:GL:GQ 0/1:66,28:77:-72.58,-23.21,-260.56:99
-chr1 746243 rs3131963 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=38.28;MQ=42.00;MQ0=2;OQ=2225.83;QD=20.61;SB=-986.67 GT:AD:DP:GL:GQ 0/1:37,71:77:-249.07,-23.20,-37.48:99
-chr1 746259 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=53.13;MQ=42.82;MQ0=2;OQ=115.63;QD=1.04;SB=-45.40 GT:AD:DP:GL:GQ 0/1:89,21:81:-39.28,-24.43,-223.64:99
-chr1 746271 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=0;HaplotypeScore=62.70;MQ=43.89;MQ0=1;OQ=73.67;QD=0.68;SB=-12.36 GT:AD:DP:GL:GQ 0/1:82,19:79:-37.12,-26.47,-271.48:99
-chr1 746467 rs3131962 A G 256.08 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.92;MQ0=2;OQ=1247.82;QD=23.54;SB=-557.88 GT:AD:DP:GL:GQ 1/1:1,52:40:-128.40,-12.06,-0.04:99
-chr1 747503 rs3115853 G A 25.12 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=3.30;MQ=58.23;MQ0=2;OQ=3098.30;QD=37.78;SB=-1549.56 GT:AD:DP:GL:GQ 1/1:0,81:79:-317.18,-27.31,-3.76:99
-chr1 747597 rs4951929 C T 626.13 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=2652.10;QD=38.44;SB=-1324.28 GT:AD:DP:GL:GQ 1/1:0,69:67:-268.81,-20.18,-0.02:99
-chr1 747799 rs4951862 C A 77.67 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=57.90;MQ0=0;OQ=1743.44;QD=32.90;SB=-442.30 GT:AD:DP:GL:GQ 1/1:0,53:51:-177.95,-15.36,-0.02:99
-chr1 748007 rs3131956 A G 613.10 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=1973.59;QD=34.03;SB=-931.61 GT:AD:DP:GL:GQ 1/1:0,58:58:-200.97,-17.48,-0.03:99
-chr1 748187 rs3131955 T C 137.90 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=57.23;MQ0=0;OQ=1684.65;QD=30.08;SB=-868.87 GT:AD:DP:GL:GQ 1/1:0,56:51:-172.08,-15.37,-0.03:99
-chr1 748489 rs3131954 C T 606.26 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.38;MQ0=0;OQ=1957.02;QD=37.63;SB=-957.97 GT:AD:DP:GL:GQ 1/1:0,52:51:-199.31,-15.37,-0.02:99
-chr1 749563 rs3115852 T C 295.01 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.43;MQ0=19;OQ=1638.73;QD=24.46;SB=-694.62 GT:AD:DP:GL:GQ 1/1:0,67:46:-167.47,-13.85,-0.01:99
-chr1 749700 rs3115851 T A 246.72 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=37.92;MQ0=12;OQ=2113.34;QD=28.18;SB=-566.84 GT:AD:DP:GL:GQ 1/1:0,75:55:-214.93,-16.56,-0.01:99
-chr1 750775 rs1048488 C T 147.65 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=55.79;MQ0=0;OQ=2544.23;QD=37.42;SB=-1282.72 GT:AD:DP:GL:GQ 1/1:0,68:64:-258.02,-19.28,-0.02:99
-chr1 751010 rs3115850 T C 532.65 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.77;MQ0=0;OQ=2501.23;QD=35.73;SB=-1116.81 GT:AD:DP:GL:GQ 1/1:0,70:69:-253.73,-20.78,-0.02:99
-chr1 751595 rs2286139 C T 599.50 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=41.46;MQ0=7;OQ=1283.06;QD=32.08;SB=-543.21 GT:AD:DP:GL:GQ 1/1:0,40:32:-131.90,-9.64,-0.01:96.32
-chr1 751615 rs1057213 C T 31.34 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=31.78;MQ0=12;OQ=906.27;QD=25.17;SB=-453.10 GT:AD:DP:GL:GQ 1/1:0,36:23:-94.22,-6.93,-0.00:69.23
-chr1 751674 rs1057212 G A 293.40 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=15.73;MQ0=12;OQ=176.65;QD=10.39;SB=-51.56 GT:AD:DP:GL:GQ 1/1:0,17:5:-21.22,-1.51,-0.00:15.05
-chr1 752136 rs3115849 G A 60.54 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.04;MQ0=8;OQ=733.35;QD=26.19;SB=-160.21 GT:AD:DP:GL:GQ 1/1:0,28:19:-76.93,-5.73,-0.01:57.18
-chr1 752452 rs3115848 G C 110.74 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=44.19;MQ0=1;OQ=1521.80;QD=34.59;SB=-621.54 GT:AD:DP:GL:GQ 1/1:1,43:40:-155.80,-12.08,-0.04:99
-chr1 752455 rs3131950 C G 3.82 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=4.46;MQ=42.62;MQ0=2;OQ=1386.15;QD=32.24;SB=-555.07 GT:AD:DP:GL:GQ 1/1:1,42:36:-142.24,-10.87,-0.04:99
-chr1 752464 rs3131949 T C 84.88 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=40.87;MQ0=2;OQ=1077.25;QD=28.35;SB=-454.51 GT:AD:DP:GL:GQ 1/1:1,37:32:-111.32,-9.64,-0.01:96.27
-chr1 752495 rs3131948 T A 77.80 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=37.91;MQ0=2;OQ=926.17;QD=28.94;SB=-390.81 GT:AD:DP:GL:GQ 1/1:1,31:26:-96.21,-7.83,-0.01:78.23
-chr1 753257 rs3115847 G A 0.46 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=27.21;MQ0=9;OQ=840.10;QD=24.71;SB=-20.92 GT:AD:DP:GL:GQ 1/1:5,28:22:-89.90,-8.89,-2.30:65.88
-chr1 755968 rs2519015 T A 366.75 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.21;MQ0=48;OQ=1019.18;QD=12.90;SB=-121.94 GT:AD:DP:GL:GQ 1/1:23,56:29:-105.51,-8.74,-0.01:87.26
-chr1 757643 rs2905042 G A 71.81 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=34.85;MQ0=1;OQ=1607.55;QD=32.81;SB=-663.38 GT:AD:DP:GL:GQ 1/1:0,49:41:-164.35,-12.35,-0.01:99
-chr1 758116 rs2977608 A C 58.89 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=47.69;MQ0=11;OQ=2396.98;QD=30.34;SB=-914.67 GT:AD:DP:GL:GQ 1/1:4,75:68:-243.30,-20.48,-0.02:99
-chr1 759692 rs2977607 C A 65.29 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=47.39;MQ0=6;OQ=1539.69;QD=31.42;SB=-733.73 GT:AD:DP:GL:GQ 1/1:0,49:42:-157.56,-12.65,-0.01:99
-chr1 759938 rs2977606 C T 514.72 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.63;MQ0=7;OQ=1693.07;QD=33.20;SB=-574.34 GT:AD:DP:GL:GQ 1/1:0,51:44:-172.91,-13.26,-0.01:99
-chr1 760431 rs3131943 A G 213.11 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=31.32;MQ0=2;OQ=527.61;QD=27.77;SB=-87.92 GT:AD:DP:GL:GQ 1/1:0,19:16:-56.35,-4.82,-0.00:48.14
-chr1 760781 rs3095826 T G 40.05 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=15.14;MQ0=8;QD=3.64;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,11:2:-7.41,-0.60,-0.00:6.02
-chr1 761273 rs2519006 C T 29.93 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.96;MQ=27.71;MQ0=20;OQ=1719.34;QD=22.33;SB=-558.69 GT:AD:DP:GL:GQ 1/1:18,59:45:-179.00,-13.55,-3.48:99
-chr1 761686 rs2977605 T C 284.90 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.99;MQ0=4;OQ=744.87;QD=26.60;SB=-283.54 GT:AD:DP:GL:GQ 1/1:0,28:24:-78.09,-7.24,-0.02:72.16
-chr1 762618 rs2905039 A C 494.84 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.90;MQ0=0;OQ=1864.52;QD=29.13;SB=-798.77 GT:AD:DP:GL:GQ 1/1:0,64:60:-190.09,-18.09,-0.06:99
-chr1 764599 rs28830877 A C 154.63 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=49.78;MQ0=3;OQ=2217.13;QD=30.37;SB=-1008.12 GT:AD:DP:GL:GQ 1/1:0,73:64:-225.32,-19.28,-0.02:99
-chr1 764648 rs28873693 G A 193.89 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=40.27;MQ0=2;OQ=1900.97;QD=32.22;SB=-951.98 GT:AD:DP:GL:GQ 1/1:0,59:49:-193.70,-14.76,-0.02:99
-chr1 764732 rs55994826 G A 15.73 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=36.88;MQ0=1;QD=0.58;SB=17.08 GT:AD:DP:GL:GQ 0/1:24,3:23:-11.77,-6.93,-72.32:48.45
-chr1 764737 rs28810152 A C 715.74 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=38.33;MQ0=0;QD=28.63;SB=-297.55 GT:AD:DP:GL:GQ 1/1:0,25:22:-75.17,-6.63,-0.01:66.18
-chr1 764742 . A T 46.72 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=39.13;MQ0=0;QD=2.03;SB=-38.86 GT:AD:DP:GL:GQ 0/1:19,4:18:-13.38,-5.42,-51.11:79.56
-chr1 764746 . G A 393.33 SnpCluster AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=40.70;MQ0=1;QD=17.88;SB=-221.92 GT:AD:DP:GL:GQ 0/1:8,14:19:-48.34,-5.72,-22.76:99
-chr1 764763 rs28797844 C G 118.37 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=44.74;MQ0=1;OQ=234.91;QD=8.39;SB=-89.25 GT:AD:DP:GL:GQ 0/1:20,8:26:-34.62,-7.84,-73.94:99
-chr1 764786 rs28769076 G C 293.91 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=38.71;MQ0=4;OQ=1154.38;QD=32.98;SB=-346.74 GT:AD:DP:GL:GQ 1/1:0,35:27:-119.03,-8.14,-0.01:81.27
-chr1 765119 . T G 7.65 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=15.72;MQ0=15;OQ=87.25;QD=4.15;SB=-66.98 GT:AD:DP:GL:GQ 0/1:15,6:6:-13.82,-1.81,-7.64:58.28
-chr1 765289 rs2905037 G A 284.46 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=48.40;MQ0=0;OQ=3000.65;QD=37.51;SB=-1455.38 GT:AD:DP:GL:GQ 1/1:0,80:75:-303.67,-22.59,-0.02:99
-chr1 765522 rs2905035 A G 84.99 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=40.77;MQ0=3;OQ=2096.78;QD=30.39;SB=-645.26 GT:AD:DP:GL:GQ 1/1:0,68:58:-213.28,-17.47,-0.02:99
-chr1 766409 rs12124819 A G 273.30 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=3.66;MQ=51.01;MQ0=0;OQ=1354.31;QD=15.75;SB=-621.86 GT:AD:DP:GL:GQ 0/1:41,45:85:-164.32,-25.60,-163.76:99
-chr1 766985 rs2980319 A T 684.18 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.93;MQ0=0;OQ=2347.43;QD=37.26;SB=-849.94 GT:AD:DP:GL:GQ 1/1:0,63:62:-238.35,-18.68,-0.02:99
-chr1 768432 rs2977615 A G 315.81 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.80;MQ0=5;OQ=1414.86;QD=25.27;SB=-618.23 GT:AD:DP:GL:GQ 1/1:0,56:46:-145.13,-13.88,-0.05:99
-chr1 769890 rs2977613 G T 314.36 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=53.23;MQ0=0;OQ=2549.06;QD=34.45;SB=-1034.15 GT:AD:DP:GL:GQ 1/1:0,74:70:-258.51,-21.09,-0.02:99
-chr1 770648 rs2977612 T A 316.89 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=55.02;MQ0=0;OQ=2471.78;QD=34.81;SB=-1070.63 GT:AD:DP:GL:GQ 1/1:1,70:68:-253.32,-20.49,-2.56:99
-chr1 773167 rs2980295 T C 625.67 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.46;MQ0=0;OQ=2479.28;QD=34.43;SB=-1064.87 GT:AD:DP:GL:GQ 1/1:0,72:71:-251.54,-21.39,-0.02:99
-chr1 774913 rs2905062 G A 647.91 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.25;MQ0=0;OQ=2057.09;QD=38.09;SB=-793.69 GT:AD:DP:GL:GQ 1/1:0,54:52:-209.31,-15.66,-0.01:99
-chr1 775852 rs2980300 T C 398.92 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.91;MQ0=0;OQ=1925.83;QD=36.34;SB=-289.45 GT:AD:DP:GL:GQ 1/1:0,53:52:-196.18,-15.66,-0.01:99
-chr1 776110 rs59319764 G A 135.46 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.95;MQ0=5;OQ=708.27;QD=21.46;SB=-330.44 GT:AD:DP:GL:GQ 1/1:5,28:18:-74.41,-5.42,-0.00:54.18
-chr1 776673 rs2905061 G A 271.44 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.77;MQ0=2;OQ=243.21;QD=12.80;SB=-51.67 GT:AD:DP:GL:GQ 1/1:0,19:7:-27.90,-2.11,-0.00:21.07
-chr1 776882 rs2905060 C T 28.05 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.47;MQ0=13;OQ=680.11;QD=21.25;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,32:18:-71.60,-5.42,-0.01:54.17
-chr1 776908 . C G 26.94 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=23.04;MQ0=7;QD=1.35;SB=-10.00 GT:AD:DP:GL:GQ 0/1:11,8:6:-7.79,-1.82,-13.09:59.77
-chr1 776998 rs28753393 A G 1.62 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=22.78;MQ0=8;OQ=492.59;QD=20.52;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,24:14:-52.85,-4.22,-0.00:42.13
-chr1 777048 rs2905058 G A 64.34 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=17.04;MQ0=12;OQ=310.80;QD=12.43;SB=-128.67 GT:AD:DP:GL:GQ 1/1:0,25:9:-34.67,-2.71,-0.01:27.08
-chr1 777068 rs2905057 G A 256.67 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=15.61;MQ0=17;OQ=265.15;QD=9.14;SB=-131.67 GT:AD:DP:GL:GQ 1/1:0,29:8:-30.10,-2.41,-0.01:24.07
-chr1 777125 rs2905056 C G 369.51 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=42.20;MQ0=14;OQ=1716.63;QD=32.39;SB=-514.60 GT:AD:DP:GL:GQ 1/1:0,53:39:-175.26,-11.75,-0.01:99
-chr1 777262 rs2905055 G T 436.57 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=43.93;MQ0=5;OQ=1457.00;QD=33.11;SB=-678.96 GT:AD:DP:GL:GQ 1/1:0,44:39:-149.29,-11.74,-0.01:99
-chr1 777290 . C T 29.42 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=32.80;MQ0=5;OQ=855.45;QD=17.11;SB=-308.80 GT:AD:DP:GL:GQ 0/1:21,29:44:-102.09,-13.26,-62.10:99
-chr1 777548 rs2905054 G T 500.83 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.40;MQ0=0;OQ=2267.93;QD=36.00;SB=-851.89 GT:AD:DP:GL:GQ 1/1:0,63:62:-230.39,-18.67,-0.01:99
-chr1 777707 rs2905053 C T 334.21 PASS AC=2;AF=1.00;AN=2;DB;DP=100;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=44.44;MQ0=2;OQ=3957.07;QD=39.57;SB=-1940.72 GT:AD:DP:GL:GQ 1/1:0,100:95:-394.71,-28.61,-0.02:99
-chr1 778576 rs2980306 T C 128.68 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=33.51;MQ0=34;OQ=1562.02;QD=19.05;SB=-268.41 GT:AD:DP:GL:GQ 1/1:13,69:45:-159.81,-13.56,-0.02:99
-chr1 778703 rs10157303 T C 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=3;HaplotypeScore=7.41;MQ=38.85;MQ0=14;OQ=444.81;QD=5.30;SB=-42.81 GT:AD:DP:GL:GQ 0/1:40,44:57:-64.95,-17.19,-138.39:99
-chr1 778707 rs10159337 C G 0.38 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=6.67;MQ=39.47;MQ0=14;OQ=423.04;QD=5.29;SB=32.36 GT:AD:DP:GL:GQ 0/1:47,33:53:-61.57,-15.98,-162.13:99
-chr1 778752 rs10159341 C T 0.26 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=43.79;MQ0=4;OQ=82.84;QD=1.45;SB=53.17 GT:AD:DP:GL:GQ 0/1:50,7:44:-24.83,-13.27,-122.87:99
-chr1 778808 . G C 4.86 PASS AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=23.40;MQ0=13;OQ=99.43;QD=5.52;SB=-51.47 GT:AD:DP:GL:GQ 1/1:11,7:3:-13.43,-0.90,-0.00:9.03
-chr1 778958 . C G 0.12 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=6.83;MQ=13.77;MQ0=12;OQ=373.21;QD=7.46;SB=-3.98 GT:AD:DP:GL:GQ 0/1:40,10:17:-45.73,-5.12,-29.92:99
-chr1 778962 rs10158938 G A 0.10 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=6.77;MQ=13.74;MQ0=12;OQ=114.14;QD=2.24;SB=-77.09 GT:AD:DP:GL:GQ 0/1:17,34:17:-19.83,-5.13,-36.56:99
-chr1 779001 . C G 62.18 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=43.25;MQ=17.50;MQ0=24;QD=0.60;SB=-3.98 GT:AD:DP:GL:GQ 0/1:92,11:44:-22.76,-13.26,-160.88:95.02
-chr1 779004 . G C 379.18 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=41.31;MQ=17.52;MQ0=26;QD=3.61;SB=-3.98 GT:AD:DP:GL:GQ 0/1:83,21:42:-55.98,-14.78,-128.84:99
-chr1 779007 . G C 125.98 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=41.47;MQ=17.84;MQ0=24;QD=1.21;SB=-3.98 GT:AD:DP:GL:GQ 0/1:82,22:45:-29.45,-13.56,-167.32:99
-chr1 779046 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=13.36;MQ=16.85;MQ0=30;OQ=85.18;QD=0.76;SB=-0.98 GT:AD:DP:GL:GQ 0/1:103,9:39:-23.55,-11.75,-110.84:99
-chr1 779119 rs3131939 T C 14.51 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=38.97;MQ0=6;OQ=1691.71;QD=26.03;SB=-847.52 GT:AD:DP:GL:GQ 1/1:0,65:53:-172.80,-15.99,-0.05:99
-chr1 782126 rs1044922 A G 199.05 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=35.10;MQ0=8;OQ=1304.52;QD=20.38;SB=-463.86 GT:AD:DP:GL:GQ 1/1:3,61:42:-134.08,-12.67,-0.04:99
-chr1 782343 rs2905036 C T 605.33 PASS AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=44.88;MQ0=2;OQ=3789.97;QD=39.07;SB=-1780.39 GT:AD:DP:GL:GQ 1/1:0,97:94:-378.00,-28.32,-0.03:99
-chr1 783071 rs2905029 C G 4.69 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=24.02;MQ0=7;OQ=636.50;QD=15.91;SB=29.13 GT:AD:DP:GL:GQ 0/1:20,20:32:-76.58,-9.64,-67.00:99
-chr1 783292 rs2519067 T C 14.72 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=32.87;MQ0=7;OQ=1046.72;QD=28.29;SB=-162.84 GT:AD:DP:GL:GQ 1/1:5,32:30:-108.26,-9.03,-0.01:90.27
-chr1 785455 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=20;HaplotypeScore=3.33;MQ=47.34;MQ0=4;OQ=246.17;QD=4.48;SB=-56.75 GT:AD:DP:GL:GQ 0/1:43,12:47:-42.06,-14.16,-132.17:99
-chr1 786397 . T C 0.59 PASS AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=41.18;MQ0=9;OQ=325.37;QD=4.52;SB=-24.72 GT:AD:DP:GL:GQ 0/1:50,22:59:-53.59,-17.77,-179.67:99
-chr1 786590 rs2909612 G T 160.63 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=27.34;MQ0=10;OQ=1960.56;QD=30.63;SB=-1001.80 GT:AD:DP:GL:GQ 1/1:0,64:54:-199.65,-16.26,-0.01:99
-chr1 786630 rs12076540 G A 0.40 PASS AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=7.41;MQ=41.01;MQ0=13;OQ=2659.94;QD=26.60;SB=-1327.51 GT:AD:DP:GL:GQ 0/1:23,77:83:-294.28,-25.01,-36.59:99
-chr1 786634 rs2909613 T C 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=7.24;MQ=42.00;MQ0=12;OQ=84.11;QD=0.83;SB=12.37 GT:AD:DP:GL:GQ 0/1:80,21:85:-37.30,-25.61,-300.66:99
-chr1 786902 . A G 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=48.19;MQ0=15;OQ=198.92;QD=1.55;SB=-72.06 GT:AD:DP:GL:GQ 0/1:96,32:111:-56.61,-33.43,-385.87:99
-chr1 787026 . G A 14.82 LowQual AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=46.76;MQ0=8;QD=0.17;SB=-27.80 GT:AD:DP:GL:GQ 0/1:74,15:80:-28.85,-24.10,-261.80:47.51
-chr1 787041 . A T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=44.71;MQ0=13;OQ=84.25;QD=0.90;SB=-23.86 GT:AD:DP:GL:GQ 0/1:71,22:80:-37.92,-26.21,-271.06:99
-chr1 787889 rs4951864 C T 266.17 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=45.78;MQ0=1;OQ=2714.18;QD=38.77;SB=-989.31 GT:AD:DP:GL:GQ 1/1:1,69:67:-275.02,-20.18,-0.01:99
-chr1 789326 rs4245756 T C 211.89 PASS AC=2;AF=1.00;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=58.75;MQ0=0;OQ=3107.92;QD=34.53;SB=-1502.55 GT:AD:DP:GL:GQ 1/1:0,90:89:-314.41,-26.81,-0.04:99
-chr1 789870 rs6681049 T C 615.97 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=47.06;MQ0=1;OQ=2660.56;QD=34.55;SB=-1115.14 GT:AD:DP:GL:GQ 1/1:0,77:73:-269.66,-21.99,-0.02:99
-chr1 790246 rs4951931 C T 190.77 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=47.97;MQ0=4;OQ=2808.35;QD=36.95;SB=-1258.17 GT:AD:DP:GL:GQ 1/1:1,75:70:-284.44,-21.09,-0.02:99
-chr1 791806 rs7516866 C T 78.65 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=49.91;MQ0=4;OQ=2127.43;QD=34.88;SB=-1017.37 GT:AD:DP:GL:GQ 1/1:0,61:56:-216.36,-16.88,-0.03:99
-chr1 791858 rs7553084 G A 0.25 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=36.92;MQ0=13;OQ=63.33;QD=1.47;SB=-33.64 GT:AD:DP:GL:GQ 0/1:29,14:21:-15.95,-6.33,-55.40:96.17
-chr1 791869 rs9700144 T C 36.55 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=30.98;MQ0=16;OQ=499.95;QD=11.90;SB=-156.35 GT:AD:DP:GL:GQ 0/1:18,24:19:-59.00,-5.72,-11.19:54.70
-chr1 791956 rs7553197 G A 67.79 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=36.93;MQ0=8;OQ=1294.09;QD=27.53;SB=-402.66 GT:AD:DP:GL:GQ 1/1:3,44:34:-133.00,-10.24,-0.01:99
-chr1 792054 . G A 0.09 PASS AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=2.92;MQ=30.80;MQ0=19;OQ=223.16;QD=2.37;SB=-57.50 GT:AD:DP:GL:GQ 0/1:66,28:40:-37.67,-12.07,-95.70:99
-chr1 792085 rs61768213 G A 0.10 PASS AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=11.76;MQ=27.41;MQ0=19;OQ=204.34;QD=1.93;SB=-8.44 GT:AD:DP:GL:GQ 0/1:88,18:55:-40.31,-16.60,-140.17:99
-chr1 792094 rs59334306 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=46.76;MQ=26.45;MQ0=20;OQ=280.32;QD=2.64;SB=-7.86 GT:AD:DP:GL:GQ 0/1:75,30:53:-47.28,-15.96,-151.37:99
-chr1 792103 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=25.85;MQ=29.18;MQ0=20;OQ=339.53;QD=3.09;SB=-172.66 GT:AD:DP:GL:GQ 0/1:84,26:61:-55.65,-18.41,-142.90:99
-chr1 792163 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=94;Dels=0.02;HRun=3;HaplotypeScore=9.77;MQ=36.34;MQ0=8;OQ=472.25;QD=5.02;SB=-153.68 GT:AD:DP:GL:GQ 0/1:49,43:64:-69.50,-18.99,-156.72:99
-chr1 792183 . G A 7.22 PASS AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=4.86;MQ=42.20;MQ0=9;OQ=1359.41;QD=15.27;SB=-245.27 GT:AD:DP:GL:GQ 0/1:36,53:59:-157.01,-17.79,-57.64:99
-chr1 792201 . G A 0.06 PASS AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=43.46;MQ0=8;OQ=234.21;QD=2.47;SB=6.27 GT:AD:DP:GL:GQ 0/1:68,27:69:-47.53,-20.82,-170.85:99
-chr1 792244 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=3.46;MQ=47.18;MQ0=4;OQ=75.38;QD=1.05;SB=92.33 GT:AD:DP:GL:GQ 0/1:49,23:53:-26.79,-15.97,-181.50:99
-chr1 793978 rs9725068 G A 105.15 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.47;MQ0=13;OQ=1474.93;QD=26.34;SB=-321.42 GT:AD:DP:GL:GQ 1/1:0,56:37:-151.09,-11.15,-0.01:99
-chr1 794403 rs11240778 T C 115.53 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.32;MQ0=0;OQ=2475.68;QD=30.95;SB=-1150.98 GT:AD:DP:GL:GQ 1/1:0,80:77:-251.22,-23.23,-0.07:99
-chr1 797375 rs10751454 A G 614.93 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.93;MQ0=1;OQ=2184.15;QD=34.67;SB=-971.41 GT:AD:DP:GL:GQ 1/1:0,63:61:-222.02,-18.37,-0.02:99
-chr1 797624 rs4951932 C A 532.14 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.69;MQ0=0;OQ=2699.27;QD=36.48;SB=-1270.15 GT:AD:DP:GL:GQ 1/1:0,74:72:-273.52,-21.68,-0.01:99
-chr1 798086 rs4951933 G C 74.24 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=48.23;MQ0=3;OQ=1918.57;QD=25.24;SB=-881.14 GT:AD:DP:GL:GQ 1/1:5,71:54:-198.81,-16.33,-3.37:99
-chr1 798494 rs11240779 G A 160.91 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=54.32;MQ0=0;OQ=2346.63;QD=37.85;SB=-859.15 GT:AD:DP:GL:GQ 1/1:0,62:60:-238.27,-18.08,-0.02:99
-chr1 798785 rs6594027 G A 211.91 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.48;MQ=43.75;MQ0=6;OQ=1743.42;QD=29.06;SB=-625.73 GT:AD:DP:GL:GQ 1/1:3,57:47:-180.84,-14.16,-2.92:99
-chr1 798791 rs11240780 C T 1.58 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.98;MQ=44.87;MQ0=5;OQ=1874.68;QD=30.73;SB=-625.19 GT:AD:DP:GL:GQ 1/1:3,58:49:-194.73,-14.76,-3.68:99
-chr1 801153 rs6683530 G C 58.35 Indel AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=47.12;MQ0=0;QD=7.29;SB=-48.46 GT:AD:DP:GL:GQ 0/1:3,5:6:-10.93,-1.81,-12.15:91.19
-chr1 801443 . G C 0.04 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=38.48;MQ0=1;OQ=52.85;QD=17.62;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:2:-8.69,-0.60,-0.00:6.02
-chr1 801493 . G A 49.74 LowQual AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=43.23;MQ0=0;QD=5.53;SB=-18.25 GT:AD:DP:GL:GQ 0/1:2,4:4:-12.63,-4.37,-6.30:19.25
-chr1 801563 . C G 14.05 LowQual AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=3.71;MQ=42.60;MQ0=0;QD=1.40;SB=-3.98 GT:AD:DP:GL:GQ 0/1:8,2:7:-6.79,-2.12,-21.33:46.71
-chr1 801598 . T C 10.44 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=49.26;MQ0=0;OQ=130.47;QD=6.21;SB=-25.63 GT:AD:DP:GL:GQ 0/1:13,8:15:-20.85,-4.52,-36.05:99
-chr1 801628 . C T 6.09 PASS AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=52.56;MQ0=0;OQ=245.60;QD=14.45;SB=-39.65 GT:AD:DP:GL:GQ 0/1:7,10:12:-31.46,-3.62,-11.96:83.42
-chr1 802130 rs7541694 A G 69.50 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.34;MQ=55.65;MQ0=0;OQ=1955.23;QD=29.18;SB=-933.35 GT:AD:DP:GL:GQ 1/1:0,67:63:-199.17,-19.00,-0.06:99
-chr1 802147 rs7545373 C G 33.64 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=3.57;MQ=55.54;MQ0=0;OQ=2348.31;QD=37.27;SB=-1198.48 GT:AD:DP:GL:GQ 1/1:2,61:60:-246.74,-18.09,-8.33:97.66
-chr1 802165 . G A 18.16 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.79;MQ=55.42;MQ0=0;QD=0.31;SB=71.21 GT:AD:DP:GL:GQ 0/1:51,8:51:-20.46,-15.37,-155.58:50.93
-chr1 802175 . C T 26.53 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=55.08;MQ0=0;QD=0.48;SB=56.20 GT:AD:DP:GL:GQ 0/1:46,8:48:-20.39,-14.46,-154.35:59.35
-chr1 802189 . G A 11.38 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=55.49;MQ0=0;QD=0.20;SB=56.19 GT:AD:DP:GL:GQ 0/1:49,8:51:-19.75,-15.37,-163.52:43.89
-chr1 802470 . T C 21.38 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=54.38;MQ0=1;QD=0.34;SB=62.23 GT:AD:DP:GL:GQ 0/1:57,6:59:-23.19,-17.77,-210.98:54.19
-chr1 802488 . G T 29.03 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=53.89;MQ0=1;QD=0.53;SB=65.21 GT:AD:DP:GL:GQ 0/1:49,6:52:-21.85,-15.66,-163.62:61.86
-chr1 802614 rs4246500 T C 405.83 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1600.84;QD=34.80;SB=-568.88 GT:AD:DP:GL:GQ 1/1:0,46:45:-163.68,-13.56,-0.02:99
-chr1 803503 rs16973606 A G 11.51 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.56;MQ=28.75;MQ0=1;OQ=1669.54;QD=28.30;SB=-566.93 GT:AD:DP:GL:GQ 1/1:0,58:52:-170.59,-15.68,-0.05:99
-chr1 803610 rs4970388 G A 620.03 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.63;MQ0=0;OQ=2297.43;QD=38.94;SB=-1171.71 GT:AD:DP:GL:GQ 1/1:0,59:58:-233.34,-17.47,-0.02:99
-chr1 803950 . C A 24.11 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=7.91;MQ=35.01;MQ0=10;QD=0.32;SB=59.14 GT:AD:DP:GL:GQ 0/1:54,21:50:-20.76,-15.06,-152.32:56.93
-chr1 803957 rs61768235 A G 0.17 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=7.75;MQ=34.03;MQ0=10;OQ=322.16;QD=4.30;SB=35.12 GT:AD:DP:GL:GQ 0/1:42,30:47:-49.67,-14.18,-120.05:99
-chr1 803968 . C T 1.63 PASS AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=30.80;MQ0=12;OQ=418.55;QD=4.81;SB=59.13 GT:AD:DP:GL:GQ 0/1:53,34:61:-63.53,-18.39,-146.32:99
-chr1 804010 rs4268301 G C 0.65 PASS AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=6.53;MQ=32.14;MQ0=12;OQ=1062.36;QD=10.84;SB=53.20 GT:AD:DP:GL:GQ 0/1:43,55:71:-130.91,-21.39,-167.36:99
-chr1 804023 . C G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=2;HaplotypeScore=7.44;MQ=36.24;MQ0=5;OQ=967.44;QD=10.63;SB=62.24 GT:AD:DP:GL:GQ 0/1:48,43:70:-121.12,-21.09,-190.26:99
-chr1 804036 . A T 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=7.15;MQ=36.45;MQ0=7;OQ=717.66;QD=8.34;SB=65.21 GT:AD:DP:GL:GQ 0/1:47,38:68:-95.53,-20.48,-155.46:99
-chr1 804078 rs4468103 A G 426.89 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=12.81;MQ=43.94;MQ0=3;QD=5.62;SB=77.26 GT:AD:DP:GL:GQ 0/1:53,23:63:-64.96,-18.98,-178.46:99
-chr1 804080 rs34234497 C A 381.14 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=12.71;MQ=43.70;MQ0=3;QD=4.95;SB=89.27 GT:AD:DP:GL:GQ 0/1:53,24:67:-61.57,-20.18,-178.60:99
-chr1 804083 . C A 27.31 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=12.71;MQ=43.58;MQ0=4;QD=0.34;SB=86.24 GT:AD:DP:GL:GQ 0/1:70,11:67:-26.19,-20.18,-214.42:60.14
-chr1 804127 rs4571914 C T 3.06 PASS AC=2;AF=1.00;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=47.10;MQ0=4;OQ=2988.66;QD=31.13;SB=-1433.34 GT:AD:DP:GL:GQ 1/1:3,93:75:-302.47,-22.59,-0.02:99
-chr1 804160 . T A 1.44 PASS AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=46.18;MQ0=5;OQ=470.49;QD=4.06;SB=48.91 GT:AD:DP:GL:GQ 0/1:72,44:82:-75.03,-24.70,-237.11:99
-chr1 804163 . T A 0.61 PASS AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=45.72;MQ0=5;OQ=536.43;QD=4.62;SB=45.90 GT:AD:DP:GL:GQ 0/1:71,45:81:-81.32,-24.40,-231.88:99
-chr1 804176 . C T 0.11 PASS AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=42.84;MQ0=5;OQ=284.28;QD=2.41;SB=31.59 GT:AD:DP:GL:GQ 0/1:90,28:84:-57.01,-25.30,-251.94:99
-chr1 804255 rs61768236 C T 415.82 PASS AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.82;MQ0=7;OQ=1235.94;QD=11.44;SB=-464.41 GT:AD:DP:GL:GQ 0/1:49,59:70:-147.96,-21.08,-123.48:99
-chr1 804268 rs61768237 T C 267.05 PASS AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.38;MQ0=8;OQ=1449.21;QD=11.32;SB=-624.62 GT:AD:DP:GL:GQ 0/1:53,75:88:-174.71,-26.51,-156.34:99
-chr1 804322 . T C 170.65 PASS AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.67;MQ0=9;OQ=1734.45;QD=11.19;SB=-540.49 GT:AD:DP:GL:GQ 0/1:72,83:118:-212.27,-35.54,-249.66:99
-chr1 804353 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=4;HaplotypeScore=24.21;MQ=44.77;MQ0=2;OQ=299.39;QD=2.32;SB=-27.46 GT:AD:DP:GL:GQ 0/1:106,23:112:-66.96,-33.74,-330.98:99
-chr1 804358 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=1;HaplotypeScore=23.14;MQ=46.13;MQ0=0;OQ=958.19;QD=8.33;SB=-257.80 GT:AD:DP:GL:GQ 0/1:68,47:100:-129.23,-30.12,-232.16:99
-chr1 804472 . A T 0.19 PASS AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=48.14;MQ0=4;OQ=798.74;QD=6.89;SB=107.38 GT:AD:DP:GL:GQ 0/1:75,41:98:-112.67,-29.52,-266.53:99
-chr1 804474 . A C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=2;HaplotypeScore=5.00;MQ=47.90;MQ0=4;OQ=704.41;QD=6.18;SB=101.34 GT:AD:DP:GL:GQ 0/1:73,41:96:-102.63,-28.91,-247.09:99
-chr1 804544 . A T 0.11 PASS AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=3.62;MQ=40.45;MQ0=6;OQ=406.04;QD=3.15;SB=95.34 GT:AD:DP:GL:GQ 0/1:99,30:89:-70.69,-26.81,-271.16:99
-chr1 804557 . A C 0.23 PASS AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=3.14;MQ=40.10;MQ0=5;OQ=416.51;QD=3.82;SB=86.28 GT:AD:DP:GL:GQ 0/1:65,43:73:-66.93,-21.99,-180.79:99
-chr1 804573 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=8.85;MQ=43.02;MQ0=4;OQ=579.16;QD=6.16;SB=83.29 GT:AD:DP:GL:GQ 0/1:56,38:69:-81.99,-20.79,-176.35:99
-chr1 804594 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=7.80;MQ=47.78;MQ0=4;OQ=294.82;QD=3.04;SB=104.36 GT:AD:DP:GL:GQ 0/1:66,31:74:-55.06,-22.29,-235.53:99
-chr1 804605 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=13.95;MQ=49.87;MQ0=3;OQ=284.24;QD=2.81;SB=113.40 GT:AD:DP:GL:GQ 0/1:73,28:82:-56.44,-24.73,-279.54:99
-chr1 804976 . T C 11.87 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=17.62;MQ=47.74;MQ0=10;QD=0.07;SB=128.44 GT:AD:DP:GL:GQ 0/1:107,52:112:-38.18,-33.74,-401.64:44.42
-chr1 805001 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=241;Dels=0.00;HRun=1;HaplotypeScore=76.93;MQ=42.40;MQ0=12;OQ=1246.68;QD=5.17;SB=146.50 GT:AD:DP:GL:GQ 0/1:129,112:153:-174.09,-46.14,-468.17:99
-chr1 805002 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=75.93;MQ=42.40;MQ0=13;OQ=1673.16;QD=6.89;SB=-6.76 GT:AD:DP:GL:GQ 0/1:105,138:154:-217.01,-46.41,-335.99:99
-chr1 805021 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=298;Dels=0.00;HRun=1;HaplotypeScore=153.68;MQ=38.48;MQ0=13;OQ=1337.90;QD=4.49;SB=-19.37 GT:AD:DP:GL:GQ 0/1:146,152:156:-184.06,-46.99,-421.14:99
-chr1 805031 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=318;Dels=0.00;HRun=0;HaplotypeScore=207.07;MQ=37.99;MQ0=12;OQ=1684.06;QD=5.30;SB=131.37 GT:AD:DP:GL:GQ 0/1:175,143:165:-221.39,-49.70,-405.98:99
-chr1 805042 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=340;Dels=0.00;HRun=0;HaplotypeScore=155.12;MQ=37.32;MQ0=17;OQ=677.06;QD=1.99;SB=140.48 GT:AD:DP:GL:GQ 0/1:285,55:199:-130.92,-59.93,-605.02:99
-chr1 805044 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=339;Dels=0.00;HRun=1;HaplotypeScore=156.13;MQ=36.94;MQ0=19;OQ=889.27;QD=2.62;SB=-0.09 GT:AD:DP:GL:GQ 0/1:243,95:179:-146.12,-53.91,-499.80:99
-chr1 805060 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=354;Dels=0.00;HRun=0;HaplotypeScore=82.46;MQ=36.20;MQ0=28;OQ=262.53;QD=0.74;SB=131.47 GT:AD:DP:GL:GQ 0/1:269,85:206:-91.58,-62.05,-725.20:99
-chr1 805070 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=335;Dels=0.00;HRun=0;HaplotypeScore=72.27;MQ=36.04;MQ0=29;OQ=243.31;QD=0.73;SB=122.43 GT:AD:DP:GL:GQ 0/1:284,51:196:-86.65,-59.04,-686.22:99
-chr1 805096 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=276;Dels=0.00;HRun=1;HaplotypeScore=49.35;MQ=36.73;MQ0=27;OQ=2126.16;QD=7.70;SB=101.36 GT:AD:DP:GL:GQ 0/1:81,194:152:-261.68,-45.78,-320.28:99
-chr1 805097 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=277;Dels=0.00;HRun=0;HaplotypeScore=50.14;MQ=36.84;MQ0=27;OQ=2166.21;QD=7.82;SB=104.34 GT:AD:DP:GL:GQ 0/1:80,196:153:-269.55,-49.64,-287.57:99
-chr1 805200 . G T 14.62 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=163;Dels=0.00;HRun=0;HaplotypeScore=25.70;MQ=44.88;MQ0=22;QD=0.09;SB=134.45 GT:AD:DP:GL:GQ 0/1:137,26:122:-41.47,-36.74,-399.49:47.31
-chr1 805236 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=3;HaplotypeScore=58.62;MQ=48.88;MQ0=19;OQ=385.49;QD=2.77;SB=18.48 GT:AD:DP:GL:GQ 0/1:87,52:105:-73.46,-31.63,-322.22:99
-chr1 805261 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=234;Dels=0.00;HRun=0;HaplotypeScore=375.75;MQ=40.95;MQ0=20;OQ=701.87;QD=3.00;SB=-184.24 GT:AD:DP:GL:GQ 0/1:132,101:136:-114.44,-40.97,-420.32:99
-chr1 805262 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=0;HaplotypeScore=355.61;MQ=40.41;MQ0=21;OQ=112.78;QD=0.47;SB=-10.32 GT:AD:DP:GL:GQ 0/1:195,42:136:-62.96,-48.40,-549.49:99
-chr1 805283 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=350;Dels=0.00;HRun=0;HaplotypeScore=86.54;MQ=35.73;MQ0=32;OQ=70.17;QD=0.20;SB=7.66 GT:AD:DP:GL:GQ 0/1:314,35:208:-72.95,-62.65,-681.33:99
-chr1 805284 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=355;Dels=0.00;HRun=0;HaplotypeScore=88.37;MQ=35.41;MQ0=32;OQ=4656.41;QD=13.12;SB=-1324.68 GT:AD:DP:GL:GQ 0/1:83,272:209:-464.64,-62.96,-333.94:99
-chr1 805326 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=520;Dels=0.00;HRun=0;HaplotypeScore=98.56;MQ=31.27;MQ0=33;OQ=692.81;QD=1.33;SB=-240.64 GT:AD:DP:GL:GQ 0/1:439,81:305:-164.43,-91.87,-1058.15:99
-chr1 805332 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=545;Dels=0.00;HRun=2;HaplotypeScore=105.70;MQ=31.02;MQ0=35;OQ=141.69;QD=0.26;SB=-23.90 GT:AD:DP:GL:GQ 0/1:483,62:326:-115.64,-98.18,-1059.59:99
-chr1 805355 . A G 982.52 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=566;Dels=0.00;HRun=0;HaplotypeScore=511.67;MQ=31.08;MQ0=42;QD=1.74;SB=-163.90 GT:AD:DP:GL:GQ 0/1:444,82:337:-230.52,-128.98,-1164.43:99
-chr1 805360 . A G 1795.44 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=565;Dels=0.00;HRun=0;HaplotypeScore=478.07;MQ=31.09;MQ0=46;QD=3.18;SB=-791.73 GT:AD:DP:GL:GQ 0/1:432,132:335:-287.21,-104.38,-1038.16:99
-chr1 805365 . T C 1655.74 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=542;Dels=0.00;HRun=0;HaplotypeScore=449.89;MQ=31.32;MQ0=44;QD=3.05;SB=-765.34 GT:AD:DP:GL:GQ 0/1:385,157:321:-265.54,-96.68,-1024.45:99
-chr1 805383 rs61768238 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=498;Dels=0.00;HRun=3;HaplotypeScore=98.26;MQ=31.16;MQ0=41;OQ=7913.78;QD=15.89;SB=-2299.71 GT:AD:DP:GL:GQ 0/1:75,423:268:-790.38,-80.71,-278.68:99
-chr1 805386 rs61768239 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=483;Dels=0.00;HRun=1;HaplotypeScore=91.10;MQ=31.39;MQ0=41;OQ=3141.51;QD=6.50;SB=-667.16 GT:AD:DP:GL:GQ 0/1:227,256:265:-397.24,-79.81,-626.74:99
-chr1 805419 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=411;Dels=0.00;HRun=1;HaplotypeScore=30.13;MQ=32.93;MQ0=34;OQ=719.57;QD=1.75;SB=-330.57 GT:AD:DP:GL:GQ 0/1:225,186:205:-136.99,-61.75,-686.74:99
-chr1 805436 rs61768240 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=352;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=34.71;MQ0=24;OQ=2408.76;QD=6.84;SB=-1167.64 GT:AD:DP:GL:GQ 0/1:93,259:163:-293.26,-49.10,-323.35:99
-chr1 805464 . T C 90.93 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=2;HaplotypeScore=145.78;MQ=37.92;MQ0=13;QD=0.36;SB=50.70 GT:AD:DP:GL:GQ 0/1:218,34:131:-51.84,-39.46,-473.80:99
-chr1 805469 . G A 411.01 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=0;HaplotypeScore=129.65;MQ=39.23;MQ0=10;QD=1.77;SB=-144.72 GT:AD:DP:GL:GQ 0/1:163,68:125:-82.03,-37.65,-380.30:99
-chr1 805474 . C T 980.44 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=4;HaplotypeScore=70.79;MQ=41.63;MQ0=7;QD=4.83;SB=-326.68 GT:AD:DP:GL:GQ 0/1:87,114:116:-136.29,-34.97,-264.49:99
-chr1 805480 . G T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=1;HaplotypeScore=5.97;MQ=42.07;MQ0=5;OQ=803.65;QD=4.10;SB=-259.91 GT:AD:DP:GL:GQ 0/1:87,109:116:-118.58,-34.93,-301.30:99
-chr1 805558 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=0;HaplotypeScore=21.59;MQ=45.69;MQ0=3;OQ=812.25;QD=4.51;SB=-279.67 GT:AD:DP:GL:GQ 0/1:110,69:130:-123.67,-39.16,-392.54:99
-chr1 805591 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=34.23;MQ=41.40;MQ0=5;OQ=1850.17;QD=8.49;SB=-635.41 GT:AD:DP:GL:GQ 0/1:84,134:148:-232.88,-44.58,-338.13:99
-chr1 805603 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=0;HaplotypeScore=49.54;MQ=40.33;MQ0=6;OQ=1757.35;QD=7.35;SB=-559.93 GT:AD:DP:GL:GQ 0/1:109,130:154:-225.41,-46.39,-351.31:99
-chr1 805620 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=274;Dels=0.00;HRun=0;HaplotypeScore=50.16;MQ=37.51;MQ0=8;OQ=230.26;QD=0.84;SB=134.91 GT:AD:DP:GL:GQ 0/1:246,28:171:-77.81,-51.50,-552.70:99
-chr1 805666 . G A 1332.87 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=339;Dels=0.00;HRun=0;HaplotypeScore=203.60;MQ=35.75;MQ0=0;QD=3.93;SB=119.41 GT:AD:DP:GL:GQ 0/1:281,58:223:-203.73,-67.16,-610.84:99
-chr1 805667 . T G 1225.05 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=341;Dels=0.00;HRun=2;HaplotypeScore=286.55;MQ=35.76;MQ0=2;QD=3.59;SB=122.41 GT:AD:DP:GL:GQ 0/1:261,66:222:-230.10,-104.31,-623.63:99
-chr1 805699 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=311;Dels=0.00;HRun=0;HaplotypeScore=73.71;MQ=35.76;MQ0=12;OQ=1765.48;QD=5.68;SB=-47.39 GT:AD:DP:GL:GQ 0/1:139,171:182:-234.66,-54.83,-454.10:99
-chr1 805716 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=281;Dels=0.00;HRun=1;HaplotypeScore=131.75;MQ=37.99;MQ0=12;OQ=2170.35;QD=7.72;SB=-121.23 GT:AD:DP:GL:GQ 0/1:87,193:163:-269.41,-49.09,-357.63:99
-chr1 805720 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=145.61;MQ=38.29;MQ0=13;OQ=527.98;QD=1.87;SB=137.43 GT:AD:DP:GL:GQ 0/1:237,44:165:-105.78,-49.70,-509.42:99
-chr1 805742 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=47.83;MQ=40.90;MQ0=15;OQ=1225.89;QD=5.11;SB=-296.81 GT:AD:DP:GL:GQ 0/1:97,143:138:-167.44,-41.57,-348.72:99
-chr1 805786 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=3.15;MQ=44.26;MQ0=7;OQ=155.59;QD=0.86;SB=-81.22 GT:AD:DP:GL:GQ 0/1:95,86:108:-51.37,-32.53,-383.93:99
-chr1 805792 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=9.50;MQ=44.61;MQ0=6;OQ=192.56;QD=1.10;SB=-88.24 GT:AD:DP:GL:GQ 0/1:93,82:108:-55.07,-32.53,-377.29:99
-chr1 805825 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=46.58;MQ0=3;OQ=327.36;QD=1.98;SB=-101.34 GT:AD:DP:GL:GQ 0/1:95,70:115:-70.67,-34.65,-378.60:99
-chr1 805831 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=0;HaplotypeScore=10.96;MQ=47.14;MQ0=3;OQ=324.94;QD=2.11;SB=-17.64 GT:AD:DP:GL:GQ 0/1:97,57:110:-68.91,-33.13,-331.34:99
-chr1 805897 . G T 104.51 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=35.45;MQ=51.05;MQ0=2;QD=0.74;SB=119.34 GT:AD:DP:GL:GQ 0/1:121,19:121:-50.18,-36.44,-386.79:99
-chr1 805898 . C A 129.42 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=35.61;MQ=51.05;MQ0=2;QD=0.91;SB=116.38 GT:AD:DP:GL:GQ 0/1:123,19:121:-52.67,-36.45,-375.35:99
-chr1 805905 . T G 13.51 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=25.14;MQ=52.44;MQ0=2;QD=0.10;SB=92.42 GT:AD:DP:GL:GQ 0/1:98,32:107:-36.84,-32.23,-356.89:46.15
-chr1 806044 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=16.71;MQ=40.59;MQ0=35;OQ=921.37;QD=5.06;SB=-438.60 GT:AD:DP:GL:GQ 0/1:71,111:106:-127.34,-31.92,-261.51:99
-chr1 806066 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=250;Dels=0.00;HRun=1;HaplotypeScore=9.43;MQ=37.37;MQ0=38;OQ=287.57;QD=1.15;SB=103.29 GT:AD:DP:GL:GQ 0/1:214,36:146:-76.01,-43.97,-467.77:99
-chr1 806081 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=255;Dels=0.00;HRun=0;HaplotypeScore=39.62;MQ=37.88;MQ0=27;OQ=908.24;QD=3.56;SB=97.71 GT:AD:DP:GL:GQ 0/1:178,77:158:-141.71,-47.60,-556.49:99
-chr1 806157 . T C 806.81 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=0;HaplotypeScore=71.06;MQ=40.64;MQ0=4;QD=3.75;SB=110.40 GT:AD:DP:GL:GQ 0/1:92,123:126:-121.92,-37.95,-368.73:99
-chr1 806159 . A C 141.17 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=219;Dels=0.00;HRun=0;HaplotypeScore=72.96;MQ=40.68;MQ0=4;QD=0.64;SB=110.38 GT:AD:DP:GL:GQ 0/1:166,49:128:-59.78,-42.38,-415.09:99
-chr1 806180 . A G 18.74 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=200;Dels=0.00;HRun=0;HaplotypeScore=59.33;MQ=41.65;MQ0=4;QD=0.09;SB=116.41 GT:AD:DP:GL:GQ 0/1:140,60:110:-38.29,-33.13,-408.92:51.52
-chr1 806197 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=1;HaplotypeScore=58.42;MQ=43.62;MQ0=5;OQ=190.94;QD=0.95;SB=134.47 GT:AD:DP:GL:GQ 0/1:110,91:116:-57.32,-34.94,-409.71:99
-chr1 806222 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=4;HaplotypeScore=6.94;MQ=47.96;MQ0=4;OQ=291.81;QD=1.80;SB=146.43 GT:AD:DP:GL:GQ 0/1:98,64:114:-66.80,-34.33,-354.69:99
-chr1 806232 . T A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=1;HaplotypeScore=11.98;MQ=49.02;MQ0=3;OQ=233.87;QD=1.55;SB=140.48 GT:AD:DP:GL:GQ 0/1:96,55:110:-59.80,-33.13,-362.79:99
-chr1 806258 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=0;HaplotypeScore=10.30;MQ=50.03;MQ0=8;OQ=407.17;QD=2.51;SB=100.40 GT:AD:DP:GL:GQ 0/1:106,56:126:-81.95,-37.95,-384.61:99
-chr1 806268 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=1;HaplotypeScore=25.82;MQ=48.78;MQ0=9;OQ=670.14;QD=4.09;SB=84.39 GT:AD:DP:GL:GQ 0/1:109,55:126:-108.24,-37.95,-362.57:99
-chr1 806273 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=0;HaplotypeScore=24.82;MQ=48.14;MQ0=9;OQ=549.55;QD=3.23;SB=88.59 GT:AD:DP:GL:GQ 0/1:119,51:130:-97.39,-39.15,-372.33:99
-chr1 806316 . T G 0.95 PASS AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=0;HaplotypeScore=6.00;MQ=41.01;MQ0=11;OQ=1685.25;QD=7.49;SB=-248.74 GT:AD:DP:GL:GQ 0/1:86,139:148:-216.38,-44.57,-322.16:99
-chr1 806332 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=267;Dels=0.00;HRun=0;HaplotypeScore=118.47;MQ=40.66;MQ0=10;OQ=669.93;QD=2.51;SB=-242.01 GT:AD:DP:GL:GQ 0/1:204,61:176:-123.31,-53.03,-632.31:99
-chr1 806338 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=0;HaplotypeScore=122.42;MQ=40.64;MQ0=8;OQ=2439.01;QD=9.17;SB=-856.79 GT:AD:DP:GL:GQ 0/1:98,144:180:-333.38,-86.20,-389.89:99
-chr1 806349 . G A 3132.30 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=280;Dels=0.07;HRun=0;HaplotypeScore=186.48;MQ=39.25;MQ0=4;QD=11.19;SB=-1153.15 GT:AD:DP:GL:GQ 0/1:91,170:182:-371.34,-54.83,-329.61:99
-chr1 806378 rs61768241 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=371;Dels=0.00;HRun=0;HaplotypeScore=37.20;MQ=35.74;MQ0=10;OQ=1136.07;QD=3.06;SB=-392.71 GT:AD:DP:GL:GQ 0/1:284,87:244:-190.38,-73.49,-742.15:99
-chr1 806405 . A T 171.83 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=402;Dels=0.02;HRun=5;HaplotypeScore=383.28;MQ=34.90;MQ0=14;QD=0.43;SB=-100.81 GT:AD:DP:GL:GQ 0/1:350,43:240:-91.25,-70.78,-803.92:99
-chr1 806411 . A T 5745.19 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=405;Dels=0.00;HRun=5;HaplotypeScore=552.66;MQ=35.31;MQ0=14;QD=14.19;SB=-2306.85 GT:AD:DP:GL:GQ 0/1:102,301:243:-573.52,-72.58,-344.41:99
-chr1 806412 . A T 2395.75 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=407;Dels=0.00;HRun=0;HaplotypeScore=506.57;MQ=35.27;MQ0=14;QD=5.89;SB=-1049.34 GT:AD:DP:GL:GQ 0/1:219,186:244:-315.74,-72.89,-600.57:99
-chr1 806419 . G T 930.64 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=433;Dels=0.00;HRun=4;HaplotypeScore=220.68;MQ=34.42;MQ0=17;QD=2.15;SB=-419.01 GT:AD:DP:GL:GQ 0/1:342,91:258:-174.05,-77.70,-758.54:99
-chr1 806424 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=450;Dels=0.00;HRun=4;HaplotypeScore=249.41;MQ=33.94;MQ0=20;OQ=971.28;QD=2.16;SB=-437.51 GT:AD:DP:GL:GQ 0/1:358,92:263:-179.62,-79.21,-806.78:99
-chr1 806430 rs61768242 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=441;Dels=0.01;HRun=1;HaplotypeScore=160.65;MQ=34.18;MQ0=22;OQ=1511.20;QD=3.43;SB=-624.36 GT:AD:DP:GL:GQ 0/1:304,134:257:-231.81,-77.41,-730.64:99
-chr1 806460 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=368;Dels=0.01;HRun=0;HaplotypeScore=18.13;MQ=35.78;MQ0=21;OQ=826.67;QD=2.25;SB=-89.07 GT:AD:DP:GL:GQ 0/1:306,59:217:-150.70,-64.75,-660.76:99
-chr1 806471 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=38.11;MQ0=12;OQ=2295.87;QD=7.92;SB=-836.85 GT:AD:DP:GL:GQ 0/1:88,202:166:-282.86,-49.99,-314.28:99
-chr1 806472 . T G 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=38.55;MQ0=12;OQ=2108.07;QD=7.42;SB=-683.52 GT:AD:DP:GL:GQ 0/1:91,193:165:-263.78,-49.69,-338.75:99
-chr1 806498 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=2;HaplotypeScore=28.30;MQ=42.69;MQ0=9;OQ=436.81;QD=2.11;SB=-20.91 GT:AD:DP:GL:GQ 0/1:161,46:144:-90.38,-43.41,-400.65:99
-chr1 806543 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=1;HaplotypeScore=100.50;MQ=43.92;MQ0=14;OQ=975.93;QD=5.00;SB=-107.11 GT:AD:DP:GL:GQ 0/1:89,101:124:-149.49,-48.61,-281.82:99
-chr1 806545 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=211;Dels=0.00;HRun=0;HaplotypeScore=104.33;MQ=43.14;MQ0=16;OQ=1451.12;QD=6.88;SB=-262.10 GT:AD:DP:GL:GQ 0/1:103,108:137:-189.66,-41.27,-324.56:99
-chr1 806559 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=338;Dels=0.00;HRun=5;HaplotypeScore=96.33;MQ=38.72;MQ0=24;OQ=1155.72;QD=3.42;SB=-374.82 GT:AD:DP:GL:GQ 0/1:243,83:209:-199.57,-80.72,-560.52:99
-chr1 806579 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=382;Dels=0.00;HRun=0;HaplotypeScore=77.21;MQ=36.57;MQ0=25;OQ=319.95;QD=0.84;SB=31.35 GT:AD:DP:GL:GQ 0/1:306,63:241:-152.76,-117.48,-790.42:99
-chr1 806588 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=408;Dels=0.00;HRun=0;HaplotypeScore=158.67;MQ=35.58;MQ0=25;OQ=4390.20;QD=10.76;SB=-833.37 GT:AD:DP:GL:GQ 0/1:156,252:245:-438.02,-73.80,-510.93:99
-chr1 806591 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=423;Dels=0.00;HRun=0;HaplotypeScore=153.73;MQ=35.14;MQ0=25;OQ=116.80;QD=0.28;SB=22.12 GT:AD:DP:GL:GQ 0/1:359,64:250:-90.26,-75.29,-922.92:99
-chr1 806599 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=465;Dels=0.00;HRun=3;HaplotypeScore=92.78;MQ=34.88;MQ0=25;OQ=533.96;QD=1.15;SB=-62.62 GT:AD:DP:GL:GQ 0/1:398,67:259:-134.68,-78.00,-790.36:99
-chr1 806614 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=552;Dels=0.00;HRun=4;HaplotypeScore=128.97;MQ=33.43;MQ0=27;OQ=171.34;QD=0.31;SB=81.53 GT:AD:DP:GL:GQ 0/1:512,39:328:-122.57,-102.16,-1083.77:99
-chr1 806616 . A C 48.77 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=560;Dels=0.00;HRun=0;HaplotypeScore=145.79;MQ=33.35;MQ0=27;QD=0.09;SB=125.19 GT:AD:DP:GL:GQ 0/1:521,38:333:-108.15,-99.99,-1104.08:81.61
-chr1 806647 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=500;Dels=0.00;HRun=1;HaplotypeScore=106.37;MQ=33.16;MQ0=15;OQ=6479.54;QD=12.96;SB=-2653.75 GT:AD:DP:GL:GQ 0/1:87,413:252:-646.95,-75.89,-317.53:99
-chr1 806652 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=463;Dels=0.00;HRun=0;HaplotypeScore=119.18;MQ=33.47;MQ0=16;OQ=6167.91;QD=13.32;SB=-2596.35 GT:AD:DP:GL:GQ 0/1:76,386:224:-615.79,-67.46,-279.43:99
-chr1 806659 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=412;Dels=0.00;HRun=0;HaplotypeScore=138.09;MQ=33.68;MQ0=14;OQ=4821.66;QD=11.70;SB=-2064.94 GT:AD:DP:GL:GQ 0/1:127,285:208:-481.17,-62.64,-276.81:99
-chr1 806663 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=403;Dels=0.00;HRun=1;HaplotypeScore=116.74;MQ=34.29;MQ0=14;OQ=4902.23;QD=12.16;SB=-2019.44 GT:AD:DP:GL:GQ 0/1:76,327:212:-489.22,-63.85,-279.67:99
-chr1 806698 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=346;Dels=0.00;HRun=0;HaplotypeScore=104.08;MQ=36.06;MQ0=23;OQ=205.16;QD=0.59;SB=41.51 GT:AD:DP:GL:GQ 0/1:305,41:216:-88.85,-65.05,-740.73:99
-chr1 806719 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=0;HaplotypeScore=400.08;MQ=40.22;MQ0=20;OQ=582.43;QD=2.75;SB=89.75 GT:AD:DP:GL:GQ 0/1:145,66:134:-101.59,-40.07,-419.05:99
-chr1 806735 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=24.14;MQ=41.77;MQ0=24;OQ=129.16;QD=0.59;SB=143.49 GT:AD:DP:GL:GQ 0/1:169,49:138:-57.78,-41.58,-482.40:99
-chr1 806755 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=0;HaplotypeScore=72.66;MQ=42.05;MQ0=23;OQ=1702.34;QD=7.99;SB=-97.29 GT:AD:DP:GL:GQ 0/1:86,127:148:-218.09,-44.57,-348.93:99
-chr1 806758 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=0;HaplotypeScore=66.82;MQ=42.51;MQ0=24;OQ=101.05;QD=0.48;SB=140.48 GT:AD:DP:GL:GQ 0/1:180,31:147:-57.67,-44.28,-533.12:99
-chr1 806774 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=33.98;MQ=43.76;MQ0=28;OQ=1370.17;QD=7.29;SB=4.43 GT:AD:DP:GL:GQ 0/1:94,94:136:-181.26,-40.96,-326.53:99
-chr1 806807 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=247;Dels=0.00;HRun=1;HaplotypeScore=84.17;MQ=41.43;MQ0=32;OQ=1901.04;QD=7.70;SB=-364.66 GT:AD:DP:GL:GQ 0/1:93,133:161:-255.61,-62.23,-399.73:99
-chr1 806819 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=264;Dels=0.00;HRun=1;HaplotypeScore=51.78;MQ=39.46;MQ0=35;OQ=117.55;QD=0.45;SB=-52.87 GT:AD:DP:GL:GQ 0/1:235,29:167:-65.33,-50.29,-569.53:99
-chr1 806835 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=24.93;MQ=38.15;MQ0=32;OQ=3184.79;QD=11.46;SB=-1086.54 GT:AD:DP:GL:GQ 0/1:75,203:179:-375.67,-53.91,-276.38:99
-chr1 806857 . A G 426.69 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=388;Dels=0.00;HRun=0;HaplotypeScore=416.26;MQ=36.42;MQ0=33;QD=1.10;SB=-205.00 GT:AD:DP:GL:GQ 0/1:336,52:260:-124.27,-78.32,-915.07:99
-chr1 806858 . A C 2180.12 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=390;Dels=0.00;HRun=1;HaplotypeScore=419.10;MQ=36.36;MQ0=33;QD=5.59;SB=-410.18 GT:AD:DP:GL:GQ 0/1:135,134:259:-523.35,-302.06,-691.29:99
-chr1 806860 . T C 364.40 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=414;Dels=0.02;HRun=1;HaplotypeScore=391.10;MQ=36.35;MQ0=33;QD=0.88;SB=-200.49 GT:AD:DP:GL:GQ 0/1:360,44:277:-126.33,-86.61,-1004.70:99
-chr1 806864 . G A 1874.70 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=430;Dels=0.00;HRun=0;HaplotypeScore=443.75;MQ=36.02;MQ0=32;QD=4.36;SB=-378.35 GT:AD:DP:GL:GQ 0/1:340,90:284:-276.29,-85.54,-766.79:99
-chr1 806872 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=439;Dels=0.00;HRun=3;HaplotypeScore=61.91;MQ=35.95;MQ0=27;OQ=241.94;QD=0.55;SB=-56.85 GT:AD:DP:GL:GQ 0/1:394,45:294:-116.03,-88.55,-994.05:99
-chr1 806914 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=433;Dels=0.00;HRun=1;HaplotypeScore=82.84;MQ=36.13;MQ0=15;OQ=91.45;QD=0.21;SB=145.33 GT:AD:DP:GL:GQ 0/1:380,53:292:-100.38,-87.95,-1073.99:99
-chr1 806929 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=394;Dels=0.00;HRun=1;HaplotypeScore=53.78;MQ=36.16;MQ0=12;OQ=628.62;QD=1.60;SB=165.96 GT:AD:DP:GL:GQ 0/1:300,94:257:-143.55,-77.40,-778.57:99
-chr1 806933 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=384;Dels=0.00;HRun=1;HaplotypeScore=52.56;MQ=36.30;MQ0=13;OQ=624.21;QD=1.63;SB=148.11 GT:AD:DP:GL:GQ 0/1:298,86:253:-141.91,-76.20,-801.85:99
-chr1 807097 rs4970387 A T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=141;Dels=0.00;HRun=4;HaplotypeScore=35.71;MQ=49.47;MQ0=9;OQ=3569.50;QD=25.32;SB=-1647.14 GT:AD:DP:GL:GQ 1/1:0,141:95:-355.95,-28.62,-0.03:99
-chr1 807120 . C T 28.74 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=5;HaplotypeScore=8.47;MQ=47.00;MQ0=10;QD=0.19;SB=107.30 GT:AD:DP:GL:GQ 0/1:82,66:90:-33.27,-27.11,-295.41:61.57
-chr1 807127 . C G 240.31 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=32.57;MQ=46.64;MQ0=10;QD=1.61;SB=107.38 GT:AD:DP:GL:GQ 0/1:80,69:92:-55.04,-27.72,-340.23:99
-chr1 807132 . T C 652.10 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=1;HaplotypeScore=41.20;MQ=46.24;MQ0=10;QD=4.29;SB=107.38 GT:AD:DP:GL:GQ 0/1:77,75:102:-99.22,-30.73,-310.86:99
-chr1 807136 . C A 59.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=2;HaplotypeScore=75.46;MQ=45.64;MQ0=10;QD=0.36;SB=6.21 GT:AD:DP:GL:GQ 0/1:135,27:108:-41.72,-32.53,-330.47:91.87
-chr1 807137 . T G 132.15 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=74.46;MQ=45.79;MQ0=10;QD=0.83;SB=113.39 GT:AD:DP:GL:GQ 0/1:140,19:114:-50.84,-34.34,-356.98:99
-chr1 807144 . G C 321.19 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=33.44;MQ=44.89;MQ0=10;QD=1.96;SB=17.66 GT:AD:DP:GL:GQ 0/1:131,27:122:-82.39,-46.99,-445.41:99
-chr1 807168 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=236.47;MQ=42.45;MQ0=9;OQ=1209.57;QD=6.91;SB=-394.74 GT:AD:DP:GL:GQ 0/1:124,51:131:-163.71,-39.47,-414.74:99
-chr1 807169 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=262.45;MQ=42.56;MQ0=9;OQ=108.48;QD=0.61;SB=74.80 GT:AD:DP:GL:GQ 0/1:162,17:135:-54.79,-40.66,-456.43:99
-chr1 807188 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=186;Dels=0.01;HRun=8;HaplotypeScore=227.66;MQ=43.88;MQ0=1;OQ=1264.52;QD=6.80;SB=-460.79 GT:AD:DP:GL:GQ 0/1:118,67:149:-174.32,-44.58,-377.47:99
-chr1 807190 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=246.34;MQ=43.75;MQ0=1;OQ=529.31;QD=2.86;SB=137.46 GT:AD:DP:GL:GQ 0/1:148,37:145:-99.89,-43.67,-443.33:99
-chr1 807204 . A C 36.37 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=12.98;MQ=42.45;MQ0=6;QD=0.19;SB=109.90 GT:AD:DP:GL:GQ 0/1:167,21:153:-53.00,-46.08,-519.54:69.21
-chr1 807245 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=1;HaplotypeScore=17.90;MQ=38.97;MQ0=18;OQ=1145.58;QD=6.94;SB=-550.34 GT:AD:DP:GL:GQ 0/1:87,78:121:-154.28,-36.44,-312.35:99
-chr1 807259 . G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=39.36;MQ0=20;OQ=646.71;QD=4.25;SB=-192.93 GT:AD:DP:GL:GQ 0/1:96,56:108:-100.48,-32.53,-300.21:99
-chr1 807350 rs4082611 G A 0.14 PASS AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=9.97;MQ=44.42;MQ0=8;OQ=866.67;QD=5.70;SB=98.31 GT:AD:DP:GL:GQ 0/1:80,69:106:-125.51,-35.56,-282.07:99
-chr1 807353 . C A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=8.92;MQ=43.77;MQ0=8;OQ=867.33;QD=5.45;SB=95.29 GT:AD:DP:GL:GQ 0/1:76,83:108:-122.54,-32.52,-265.26:99
-chr1 807384 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=0;HaplotypeScore=61.52;MQ=40.31;MQ0=13;OQ=503.09;QD=2.47;SB=116.39 GT:AD:DP:GL:GQ 0/1:145,57:132:-93.37,-39.78,-338.75:99
-chr1 807385 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=1;HaplotypeScore=61.52;MQ=40.32;MQ0=13;OQ=1779.01;QD=8.76;SB=73.73 GT:AD:DP:GL:GQ 0/1:76,126:131:-220.64,-39.46,-278.09:99
-chr1 807400 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=1;HaplotypeScore=26.31;MQ=38.88;MQ0=12;OQ=2472.80;QD=10.18;SB=76.74 GT:AD:DP:GL:GQ 0/1:81,162:155:-297.25,-46.69,-297.33:99
-chr1 807412 rs4082610 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=262;Dels=0.00;HRun=4;HaplotypeScore=30.19;MQ=38.31;MQ0=9;OQ=2516.42;QD=9.60;SB=119.38 GT:AD:DP:GL:GQ 0/1:109,153:168:-305.53,-50.60,-311.50:99
-chr1 807432 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=262;Dels=0.00;HRun=0;HaplotypeScore=25.55;MQ=38.32;MQ0=6;OQ=4433.84;QD=16.92;SB=-160.81 GT:AD:DP:GL:GQ 0/1:80,182:176:-442.38,-53.03,-343.20:99
-chr1 807469 . C T 416.75 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=0;HaplotypeScore=92.28;MQ=41.14;MQ0=1;QD=1.98;SB=-49.34 GT:AD:DP:GL:GQ 0/1:84,126:97:-74.18,-29.22,-280.73:99
-chr1 807471 . A C 318.15 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=2;HaplotypeScore=90.45;MQ=41.29;MQ0=1;QD=1.49;SB=-31.35 GT:AD:DP:GL:GQ 0/1:85,128:99:-64.91,-29.81,-297.50:99
-chr1 807475 . C T 356.15 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=0;HaplotypeScore=174.77;MQ=40.93;MQ0=2;QD=1.67;SB=-36.29 GT:AD:DP:GL:GQ 0/1:85,128:101:-69.35,-30.45,-273.00:99
-chr1 807484 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=1;HaplotypeScore=266.19;MQ=40.31;MQ0=2;OQ=100.09;QD=0.47;SB=95.09 GT:AD:DP:GL:GQ 0/1:168,47:127:-51.55,-38.26,-450.15:99
-chr1 807508 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=1;HaplotypeScore=7.00;MQ=41.28;MQ0=4;OQ=211.72;QD=1.14;SB=90.69 GT:AD:DP:GL:GQ 0/1:142,43:119:-60.30,-35.84,-379.49:99
-chr1 807527 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=161;Dels=0.00;HRun=2;HaplotypeScore=9.95;MQ=41.68;MQ0=7;OQ=177.85;QD=1.10;SB=146.44 GT:AD:DP:GL:GQ 0/1:119,42:108:-53.60,-32.53,-346.10:99
-chr1 807556 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=1;HaplotypeScore=66.91;MQ=41.77;MQ0=6;OQ=532.40;QD=3.89;SB=-236.01 GT:AD:DP:GL:GQ 0/1:68,69:85:-82.13,-25.60,-230.23:99
-chr1 807561 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=0;HaplotypeScore=70.93;MQ=41.65;MQ0=7;OQ=124.65;QD=0.89;SB=101.32 GT:AD:DP:GL:GQ 0/1:96,44:87:-41.95,-26.20,-282.69:99
-chr1 807571 rs34106744 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=3;HaplotypeScore=33.63;MQ=41.31;MQ0=9;OQ=377.46;QD=2.80;SB=-157.65 GT:AD:DP:GL:GQ 0/1:62,73:80:-65.12,-24.09,-230.06:99
-chr1 807588 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=29.86;MQ=39.35;MQ0=12;OQ=1527.96;QD=9.32;SB=-255.65 GT:AD:DP:GL:GQ 0/1:60,104:105:-187.72,-31.65,-191.88:99
-chr1 807611 . G C 0.98 PASS AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=7.78;MQ=38.64;MQ0=13;OQ=1984.90;QD=11.81;SB=-213.08 GT:AD:DP:GL:GQ 0/1:60,108:111:-235.21,-33.44,-245.33:99
-chr1 807628 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=0;HaplotypeScore=15.09;MQ=38.17;MQ0=13;OQ=1889.96;QD=9.74;SB=-59.93 GT:AD:DP:GL:GQ 0/1:68,126:123:-229.33,-37.05,-239.27:99
-chr1 807662 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=324;Dels=0.00;HRun=0;HaplotypeScore=5.25;MQ=35.02;MQ0=24;OQ=5029.36;QD=15.52;SB=-1355.57 GT:AD:DP:GL:GQ 0/1:79,245:206:-501.94,-62.04,-299.38:99
-chr1 807698 rs61768243 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=413;Dels=0.00;HRun=1;HaplotypeScore=119.83;MQ=33.65;MQ0=41;OQ=7356.92;QD=17.81;SB=-2911.42 GT:AD:DP:GL:GQ 0/1:85,328:252:-734.69,-75.92,-368.28:99
-chr1 807726 rs61768244 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=451;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=33.55;MQ0=36;OQ=2315.76;QD=5.13;SB=-928.19 GT:AD:DP:GL:GQ 0/1:303,148:263:-314.08,-79.22,-727.35:99
-chr1 807759 rs4034377 A C 755.20 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=336;Dels=0.00;HRun=0;HaplotypeScore=236.06;MQ=33.74;MQ0=39;QD=2.25;SB=-109.97 GT:AD:DP:GL:GQ 0/1:260,76:175:-131.50,-52.70,-521.92:99
-chr1 807761 . A G 2451.79 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=328;Dels=0.00;HRun=0;HaplotypeScore=310.08;MQ=33.84;MQ0=39;QD=7.47;SB=-739.45 GT:AD:DP:GL:GQ 0/1:164,163:171:-299.96,-51.50,-359.62:99
-chr1 807766 rs3969819 A C 564.07 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=320;Dels=0.00;HRun=0;HaplotypeScore=284.38;MQ=33.76;MQ0=45;QD=1.76;SB=-303.05 GT:AD:DP:GL:GQ 0/1:266,53:164:-109.08,-49.39,-509.36:99
-chr1 807787 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=301;Dels=0.00;HRun=1;HaplotypeScore=10.94;MQ=35.09;MQ0=34;OQ=678.04;QD=2.25;SB=50.87 GT:AD:DP:GL:GQ 0/1:179,122:124:-108.43,-37.34,-358.12:99
-chr1 807799 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=330;Dels=0.00;HRun=1;HaplotypeScore=46.01;MQ=35.31;MQ0=34;OQ=1300.39;QD=3.94;SB=-358.87 GT:AD:DP:GL:GQ 0/1:191,139:161:-181.81,-48.48,-410.83:99
-chr1 807817 rs4034379 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=305;Dels=0.00;HRun=0;HaplotypeScore=40.59;MQ=36.43;MQ0=47;OQ=1097.69;QD=3.60;SB=-508.19 GT:AD:DP:GL:GQ 0/1:205,100:154:-159.44,-46.39,-521.49:99
-chr1 807831 rs4034380 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=324;Dels=0.00;HRun=0;HaplotypeScore=53.25;MQ=36.07;MQ0=54;OQ=860.18;QD=2.65;SB=-52.35 GT:AD:DP:GL:GQ 0/1:235,89:165:-139.00,-49.70,-477.57:99
-chr1 807843 rs61768247 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=340;Dels=0.00;HRun=3;HaplotypeScore=25.24;MQ=35.61;MQ0=59;OQ=2917.98;QD=8.58;SB=-1176.92 GT:AD:DP:GL:GQ 0/1:93,247:179:-348.99,-53.91,-340.62:99
-chr1 807878 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=340;Dels=0.00;HRun=3;HaplotypeScore=1.68;MQ=33.99;MQ0=59;OQ=2636.13;QD=7.75;SB=-1148.59 GT:AD:DP:GL:GQ 0/1:141,199:182:-321.71,-54.82,-379.20:99
-chr1 807900 rs61768248 A G 107.46 PASS AC=1;AF=0.50;AN=2;DB;DP=254;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=36.51;MQ0=52;OQ=2423.92;QD=9.54;SB=-510.71 GT:AD:DP:GL:GQ 0/1:72,182:155:-292.36,-46.69,-288.83:99
-chr1 807921 rs4034381 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=238;Dels=0.00;HRun=0;HaplotypeScore=52.91;MQ=37.12;MQ0=38;OQ=730.38;QD=3.07;SB=87.15 GT:AD:DP:GL:GQ 0/1:169,69:152:-122.12,-45.80,-464.61:99
-chr1 807923 rs2311679 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=238;Dels=0.00;HRun=1;HaplotypeScore=53.91;MQ=36.90;MQ0=37;OQ=150.90;QD=0.63;SB=114.49 GT:AD:DP:GL:GQ 0/1:205,33:149:-63.25,-44.87,-483.89:99
-chr1 807940 rs61768249 C T 132.32 PASS AC=1;AF=0.50;AN=2;DB;DP=201;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=39.52;MQ0=18;OQ=2365.28;QD=11.77;SB=-227.57 GT:AD:DP:GL:GQ 0/1:70,131:135:-280.47,-40.66,-242.20:99
-chr1 807969 . G T 0.34 PASS AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=3.99;MQ=40.13;MQ0=16;OQ=852.49;QD=4.24;SB=25.59 GT:AD:DP:GL:GQ 0/1:139,62:138:-130.10,-41.57,-369.51:99
-chr1 807986 . G A 410.65 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=0;HaplotypeScore=37.75;MQ=40.61;MQ0=11;QD=2.15;SB=32.93 GT:AD:DP:GL:GQ 0/1:73,117:91:-71.78,-27.44,-235.41:99
-chr1 807989 . A G 41.79 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=1;HaplotypeScore=63.74;MQ=41.32;MQ0=11;QD=0.24;SB=71.44 GT:AD:DP:GL:GQ 0/1:71,104:80:-31.56,-24.09,-295.20:74.62
-chr1 807990 . G T 63.48 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=1;HaplotypeScore=63.74;MQ=41.32;MQ0=11;QD=0.36;SB=71.41 GT:AD:DP:GL:GQ 0/1:71,104:79:-33.42,-23.79,-250.10:96.32
-chr1 808001 rs2311681 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=186;Dels=0.00;HRun=1;HaplotypeScore=145.95;MQ=39.96;MQ0=12;OQ=189.55;QD=1.02;SB=-28.87 GT:AD:DP:GL:GQ 0/1:68,100:81:-53.53,-31.29,-271.83:99
-chr1 808002 . C T 30.08 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=1;HaplotypeScore=147.95;MQ=39.81;MQ0=12;QD=0.16;SB=5.97 GT:AD:DP:GL:GQ 0/1:124,64:83:-31.29,-25.00,-266.30:62.91
-chr1 808027 rs3969820 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=178;Dels=0.00;HRun=0;HaplotypeScore=57.38;MQ=38.17;MQ0=19;OQ=723.18;QD=4.06;SB=-165.45 GT:AD:DP:GL:GQ 0/1:134,44:108:-108.14,-32.53,-287.08:99
-chr1 808030 . A G 1086.71 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=0;HaplotypeScore=42.92;MQ=38.47;MQ0=18;QD=6.51;SB=-568.31 GT:AD:DP:GL:GQ 0/1:57,109:99:-141.80,-29.84,-220.97:99
-chr1 808043 . A G 970.86 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=1;HaplotypeScore=39.52;MQ=39.24;MQ0=20;QD=6.11;SB=-490.82 GT:AD:DP:GL:GQ 0/1:58,101:92:-128.08,-27.71,-229.15:99
-chr1 808058 rs4068670 A G 19.55 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=148;Dels=0.00;HRun=0;HaplotypeScore=41.67;MQ=39.19;MQ0=26;QD=0.13;SB=-33.62 GT:AD:DP:GL:GQ 0/1:54,74:61:-37.68,-32.44,-211.21:52.34
-chr1 808064 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=1;HaplotypeScore=40.55;MQ=38.61;MQ0=24;OQ=246.33;QD=1.85;SB=-81.77 GT:AD:DP:GL:GQ 0/1:48,85:54:-44.19,-16.27,-162.59:99
-chr1 808071 . C T 20.12 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=40.24;MQ=40.16;MQ0=22;QD=0.15;SB=14.54 GT:AD:DP:GL:GQ 0/1:54,82:58:-22.76,-17.47,-182.75:52.91
-chr1 808112 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=227;Dels=0.00;HRun=2;HaplotypeScore=125.36;MQ=37.91;MQ0=32;OQ=1776.62;QD=7.83;SB=-160.46 GT:AD:DP:GL:GQ 0/1:73,153:125:-218.60,-37.66,-274.51:99
-chr1 808131 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=257;Dels=0.00;HRun=1;HaplotypeScore=46.49;MQ=37.72;MQ0=22;OQ=2127.72;QD=8.28;SB=-282.13 GT:AD:DP:GL:GQ 0/1:106,150:146:-260.04,-43.99,-307.83:99
-chr1 808143 rs2871830 A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=266;Dels=0.00;HRun=0;HaplotypeScore=22.61;MQ=37.96;MQ0=21;OQ=255.61;QD=0.96;SB=23.44 GT:AD:DP:GL:GQ 0/1:214,51:151:-74.35,-45.50,-504.23:99
-chr1 808170 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=251;Dels=0.00;HRun=1;HaplotypeScore=39.92;MQ=39.75;MQ0=13;OQ=386.02;QD=1.54;SB=116.39 GT:AD:DP:GL:GQ 0/1:201,50:155:-88.58,-46.69,-468.07:99
-chr1 808187 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=220;Dels=0.00;HRun=7;HaplotypeScore=162.06;MQ=41.27;MQ0=11;OQ=363.00;QD=1.65;SB=17.72 GT:AD:DP:GL:GQ 0/1:176,44:136:-80.56,-40.98,-399.39:99
-chr1 808189 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=0;HaplotypeScore=288.29;MQ=41.39;MQ0=11;OQ=708.25;QD=3.28;SB=-149.01 GT:AD:DP:GL:GQ 0/1:142,53:138:-146.61,-72.50,-410.59:99
-chr1 808297 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=0;HaplotypeScore=21.45;MQ=38.78;MQ0=17;OQ=1228.84;QD=6.27;SB=-563.99 GT:AD:DP:GL:GQ 0/1:75,120:104:-157.52,-31.35,-213.62:99
-chr1 808336 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=1;HaplotypeScore=34.12;MQ=34.50;MQ0=28;OQ=414.84;QD=1.47;SB=-185.55 GT:AD:DP:GL:GQ 0/1:228,54:155:-91.47,-46.70,-585.75:99
-chr1 808347 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=78.29;MQ=34.29;MQ0=30;OQ=600.10;QD=2.16;SB=-67.28 GT:AD:DP:GL:GQ 0/1:221,39:151:-138.41,-75.12,-545.71:99
-chr1 808349 rs61768250 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=274;Dels=0.00;HRun=0;HaplotypeScore=172.09;MQ=34.47;MQ0=30;OQ=2858.46;QD=10.43;SB=-822.44 GT:AD:DP:GL:GQ 0/1:82,190:149:-334.02,-44.89,-232.77:99
-chr1 808359 . C T 950.38 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=269;Dels=0.00;HRun=0;HaplotypeScore=192.43;MQ=34.52;MQ0=31;QD=3.53;SB=-243.11 GT:AD:DP:GL:GQ 0/1:178,83:148:-142.90,-44.58,-399.15:99
-chr1 808362 . G A 76.04 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=113.80;MQ=34.64;MQ0=30;QD=0.28;SB=96.15 GT:AD:DP:GL:GQ 0/1:234,29:151:-56.37,-45.49,-495.71:99
-chr1 808363 . C A 14.91 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=113.80;MQ=34.60;MQ0=34;QD=0.05;SB=125.29 GT:AD:DP:GL:GQ 0/1:250,29:157:-52.05,-47.29,-518.11:47.61
-chr1 808367 . G A 731.54 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=120.25;MQ=34.34;MQ0=33;QD=2.52;SB=-82.29 GT:AD:DP:GL:GQ 0/1:229,61:165:-126.14,-49.70,-491.32:99
-chr1 808394 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=235;Dels=0.00;HRun=0;HaplotypeScore=10.16;MQ=37.74;MQ0=26;OQ=126.55;QD=0.54;SB=56.98 GT:AD:DP:GL:GQ 0/1:188,47:147:-60.25,-44.31,-434.17:99
-chr1 808413 . T G 317.98 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=2;HaplotypeScore=72.86;MQ=40.13;MQ0=20;QD=1.94;SB=-24.43 GT:AD:DP:GL:GQ 0/1:121,43:105:-66.71,-31.62,-317.98:99
-chr1 808417 . G A 68.93 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=67.03;MQ=42.13;MQ0=16;QD=0.46;SB=83.26 GT:AD:DP:GL:GQ 0/1:135,13:103:-41.21,-31.03,-340.99:99
-chr1 808421 . G A 1042.35 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=46.56;MQ=44.72;MQ0=15;QD=7.72;SB=-112.51 GT:AD:DP:GL:GQ 0/1:67,68:99:-137.34,-29.83,-234.94:99
-chr1 808447 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=2;HaplotypeScore=11.26;MQ=49.75;MQ0=9;OQ=392.50;QD=3.54;SB=-21.38 GT:AD:DP:GL:GQ 0/1:71,40:86:-68.46,-25.93,-223.10:99
-chr1 808451 . A T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=1;HaplotypeScore=9.78;MQ=50.21;MQ0=9;OQ=368.72;QD=3.29;SB=-63.61 GT:AD:DP:GL:GQ 0/1:73,39:88:-66.66,-26.51,-263.45:99
-chr1 808566 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=42.07;MQ=40.72;MQ0=9;OQ=262.25;QD=1.45;SB=83.19 GT:AD:DP:GL:GQ 0/1:73,108:86:-55.43,-25.93,-233.09:99
-chr1 808594 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=0;HaplotypeScore=18.85;MQ=37.64;MQ0=16;OQ=690.50;QD=2.77;SB=110.37 GT:AD:DP:GL:GQ 0/1:80,169:110:-105.47,-33.14,-280.23:99
-chr1 808641 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=283;Dels=0.00;HRun=1;HaplotypeScore=21.83;MQ=33.64;MQ0=19;OQ=2063.93;QD=7.29;SB=28.04 GT:AD:DP:GL:GQ 0/1:72,211:133:-249.73,-40.06,-265.59:99
-chr1 808664 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=245;Dels=0.00;HRun=1;HaplotypeScore=236.43;MQ=34.77;MQ0=16;OQ=159.51;QD=0.65;SB=12.22 GT:AD:DP:GL:GQ 0/1:197,22:147:-105.83,-86.60,-492.17:99
-chr1 808677 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=233;Dels=0.00;HRun=0;HaplotypeScore=83.64;MQ=35.28;MQ0=11;OQ=206.00;QD=0.88;SB=113.55 GT:AD:DP:GL:GQ 0/1:190,43:144:-67.26,-43.38,-499.53:99
-chr1 808728 . C A 203.60 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=1;HaplotypeScore=31.96;MQ=45.04;MQ0=12;QD=1.82;SB=15.39 GT:AD:DP:GL:GQ 0/1:87,25:80:-47.74,-24.10,-238.32:99
-chr1 808731 . C T 444.24 SnpCluster AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=24.97;MQ=46.65;MQ0=11;QD=4.04;SB=-165.40 GT:AD:DP:GL:GQ 0/1:69,41:86:-73.64,-25.93,-224.50:99
-chr1 808732 . G A 408.16 SnpCluster AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=24.97;MQ=46.65;MQ0=11;QD=3.71;SB=-130.98 GT:AD:DP:GL:GQ 0/1:69,41:85:-69.72,-25.62,-220.30:99
-chr1 808802 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=47.94;MQ=46.85;MQ0=10;OQ=50.85;QD=0.45;SB=55.37 GT:AD:DP:GL:GQ 0/1:67,39:74:-30.66,-22.29,-262.89:83.69
-chr1 808813 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=9.12;MQ=42.90;MQ0=8;OQ=68.22;QD=0.48;SB=65.92 GT:AD:DP:GL:GQ 0/1:121,22:85:-35.73,-25.62,-328.85:99
-chr1 808837 . A G 640.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=0;HaplotypeScore=190.29;MQ=37.94;MQ0=4;QD=3.42;SB=66.67 GT:AD:DP:GL:GQ 0/1:64,123:88:-93.80,-26.51,-252.52:99
-chr1 808839 . G A 725.93 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=188;Dels=0.01;HRun=3;HaplotypeScore=118.63;MQ=37.90;MQ0=4;QD=3.86;SB=63.76 GT:AD:DP:GL:GQ 0/1:65,112:89:-102.68,-26.81,-229.73:99
-chr1 808842 . A G 234.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=1;HaplotypeScore=215.12;MQ=37.45;MQ0=5;QD=1.20;SB=62.67 GT:AD:DP:GL:GQ 0/1:152,43:87:-52.93,-26.20,-300.50:99
-chr1 808844 . C A 211.39 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=1;HaplotypeScore=139.43;MQ=37.30;MQ0=5;QD=1.09;SB=62.33 GT:AD:DP:GL:GQ 0/1:151,43:87:-50.63,-26.20,-257.94:99
-chr1 808878 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=228;Dels=0.00;HRun=0;HaplotypeScore=11.87;MQ=35.54;MQ0=6;OQ=484.59;QD=2.13;SB=67.42 GT:AD:DP:GL:GQ 0/1:69,159:88:-78.25,-26.50,-268.80:99
-chr1 808900 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=211;Dels=0.00;HRun=0;HaplotypeScore=53.01;MQ=34.26;MQ0=7;OQ=319.52;QD=1.51;SB=101.36 GT:AD:DP:GL:GQ 0/1:68,143:78:-58.73,-23.49,-234.89:99
-chr1 808952 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=8.99;MQ=30.36;MQ0=16;OQ=684.75;QD=4.08;SB=-303.13 GT:AD:DP:GL:GQ 0/1:69,99:91:-99.17,-27.41,-260.34:99
-chr1 808969 rs57185426 C T 0.56 PASS AC=1;AF=0.50;AN=2;DB;DP=167;Dels=0.00;HRun=0;HaplotypeScore=6.98;MQ=27.19;MQ0=22;OQ=1308.35;QD=7.83;SB=-543.36 GT:AD:DP:GL:GQ 0/1:64,103:97:-163.35,-29.23,-183.79:99
-chr1 809028 rs61768251 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=24.74;MQ=37.22;MQ0=19;OQ=1197.89;QD=7.88;SB=-487.91 GT:AD:DP:GL:GQ 0/1:69,83:107:-155.31,-32.23,-252.53:99
-chr1 809058 . T C 0.11 PASS AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=4.46;MQ=47.89;MQ0=8;OQ=300.60;QD=2.95;SB=-111.38 GT:AD:DP:GL:GQ 0/1:71,31:84:-58.65,-25.31,-262.00:99
-chr1 809087 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=12.78;MQ=44.45;MQ0=38;OQ=174.63;QD=1.20;SB=29.35 GT:AD:DP:GL:GQ 0/1:79,66:90:-47.85,-27.11,-283.45:99
-chr1 809147 . A G 708.22 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=385;Dels=0.00;HRun=0;HaplotypeScore=142.43;MQ=32.08;MQ0=67;QD=1.84;SB=-338.08 GT:AD:DP:GL:GQ 0/1:273,112:167:-124.42,-50.31,-531.00:99
-chr1 809152 . A G 2828.87 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=380;Dels=0.00;HRun=0;HaplotypeScore=142.28;MQ=32.36;MQ0=64;QD=7.44;SB=-821.16 GT:AD:DP:GL:GQ 0/1:76,304:165:-335.87,-49.70,-295.78:99
-chr1 809155 . G A 906.28 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=379;Dels=0.00;HRun=1;HaplotypeScore=107.83;MQ=32.25;MQ0=64;QD=2.39;SB=-437.76 GT:AD:DP:GL:GQ 0/1:271,108:165:-143.61,-49.69,-484.11:99
-chr1 809196 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=2;HaplotypeScore=63.80;MQ=34.67;MQ0=22;OQ=1194.90;QD=4.80;SB=-269.68 GT:AD:DP:GL:GQ 0/1:67,182:101:-153.20,-30.42,-236.52:99
-chr1 809260 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=41.08;MQ0=8;OQ=376.66;QD=3.30;SB=116.36 GT:AD:DP:GL:GQ 0/1:80,34:93:-68.96,-28.01,-266.36:99
-chr1 809273 . T C 463.34 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=8.66;MQ=40.73;MQ0=7;QD=3.83;SB=119.42 GT:AD:DP:GL:GQ 0/1:85,36:100:-79.74,-30.12,-319.61:99
-chr1 809278 . T A 448.40 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=0;HaplotypeScore=9.66;MQ=40.70;MQ0=10;QD=3.59;SB=128.40 GT:AD:DP:GL:GQ 0/1:95,30:101:-78.54,-30.42,-301.76:99
-chr1 809279 . C A 472.08 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=9.66;MQ=40.57;MQ0=10;QD=3.72;SB=128.43 GT:AD:DP:GL:GQ 0/1:97,30:103:-81.51,-31.02,-300.46:99
-chr1 809374 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=40.85;MQ=49.25;MQ0=14;OQ=274.74;QD=2.18;SB=128.46 GT:AD:DP:GL:GQ 0/1:85,41:95:-59.38,-28.62,-356.10:99
-chr1 809396 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=153;Dels=0.03;HRun=0;HaplotypeScore=81.33;MQ=46.63;MQ0=11;OQ=370.18;QD=2.42;SB=128.42 GT:AD:DP:GL:GQ 0/1:90,59:107:-71.93,-31.63,-311.43:99
-chr1 809418 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=0;HaplotypeScore=18.59;MQ=42.45;MQ0=17;OQ=1574.87;QD=7.57;SB=-383.90 GT:AD:DP:GL:GQ 0/1:84,123:141:-203.25,-42.48,-331.17:99
-chr1 809463 . T C 270.15 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=113.69;MQ=41.23;MQ0=17;QD=1.24;SB=22.33 GT:AD:DP:GL:GQ 0/1:180,37:141:-72.78,-42.48,-486.18:99
-chr1 809466 . G A 91.66 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=2;HaplotypeScore=122.84;MQ=41.24;MQ0=16;QD=0.43;SB=110.32 GT:AD:DP:GL:GQ 0/1:181,32:144:-55.83,-43.38,-458.71:99
-chr1 809470 . T C 630.75 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=2;HaplotypeScore=238.78;MQ=41.40;MQ0=14;QD=3.03;SB=-114.41 GT:AD:DP:GL:GQ 0/1:153,55:135:-107.03,-40.67,-427.65:99
-chr1 809480 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=103.82;MQ=41.73;MQ0=11;OQ=1974.03;QD=10.79;SB=-338.07 GT:AD:DP:GL:GQ 0/1:66,116:122:-237.45,-36.76,-206.62:99
-chr1 809721 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=3;HaplotypeScore=9.02;MQ=53.95;MQ0=4;OQ=80.85;QD=0.86;SB=59.35 GT:AD:DP:GL:GQ 0/1:75,18:84:-36.67,-25.30,-283.82:99
-chr1 809780 rs6605057 A G 0.76 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=11.81;MQ=56.13;MQ0=2;OQ=3054.85;QD=32.85;SB=-1362.55 GT:AD:DP:GL:GQ 1/1:0,93:85:-309.09,-25.60,-0.02:99
-chr1 809879 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=0;HaplotypeScore=59.97;MQ=40.35;MQ0=14;OQ=622.51;QD=3.19;SB=42.71 GT:AD:DP:GL:GQ 0/1:76,119:98:-95.05,-29.52,-272.29:99
-chr1 809895 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=1;HaplotypeScore=66.59;MQ=38.60;MQ0=19;OQ=465.46;QD=2.28;SB=92.30 GT:AD:DP:GL:GQ 0/1:110,94:92:-77.54,-27.71,-254.54:99
-chr1 809906 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=107.86;MQ=38.19;MQ0=19;OQ=204.28;QD=1.02;SB=98.35 GT:AD:DP:GL:GQ 0/1:163,38:93:-51.72,-28.01,-294.59:99
-chr1 810152 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=23.45;MQ=46.60;MQ0=18;OQ=256.17;QD=1.80;SB=89.22 GT:AD:DP:GL:GQ 0/1:80,62:93:-56.93,-28.03,-260.32:99
-chr1 810179 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=166;Dels=0.00;HRun=0;HaplotypeScore=40.97;MQ=43.29;MQ0=18;OQ=423.48;QD=2.55;SB=-10.82 GT:AD:DP:GL:GQ 0/1:90,76:99:-75.44,-29.81,-289.52:99
-chr1 810200 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=157;Dels=0.00;HRun=0;HaplotypeScore=91.89;MQ=44.44;MQ0=8;OQ=93.53;QD=0.60;SB=79.37 GT:AD:DP:GL:GQ 0/1:113,44:97:-41.85,-29.21,-309.84:99
-chr1 810211 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=3;HaplotypeScore=28.81;MQ=44.83;MQ0=8;OQ=438.48;QD=2.67;SB=-23.86 GT:AD:DP:GL:GQ 0/1:92,72:104:-78.46,-31.33,-303.09:99
-chr1 810249 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=0;HaplotypeScore=54.95;MQ=45.56;MQ0=5;OQ=532.92;QD=3.29;SB=-263.19 GT:AD:DP:GL:GQ 0/1:92,70:108:-89.11,-32.53,-336.39:99
-chr1 810266 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=0;HaplotypeScore=6.95;MQ=49.31;MQ0=7;OQ=320.58;QD=2.31;SB=3.34 GT:AD:DP:GL:GQ 0/1:87,51:105:-66.97,-31.63,-352.01:99
-chr1 810282 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=2;HaplotypeScore=2.11;MQ=50.38;MQ0=7;OQ=214.82;QD=1.51;SB=75.99 GT:AD:DP:GL:GQ 0/1:98,44:111:-58.20,-33.43,-338.53:99
-chr1 810326 . T C 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.92;MQ0=10;OQ=89.69;QD=0.81;SB=59.40 GT:AD:DP:GL:GQ 0/1:87,24:95:-40.87,-28.62,-338.92:99
-chr1 810564 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=14.88;MQ=44.23;MQ0=6;OQ=498.14;QD=2.90;SB=-150.99 GT:AD:DP:GL:GQ 0/1:102,70:118:-88.65,-35.55,-364.99:99
-chr1 810629 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=38.71;MQ=50.61;MQ0=2;OQ=253.97;QD=2.29;SB=-143.03 GT:AD:DP:GL:GQ 0/1:83,27:94:-56.99,-28.31,-290.69:99
-chr1 810683 . T C 21.46 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=45.49;MQ0=13;QD=0.17;SB=104.38 GT:AD:DP:GL:GQ 0/1:80,50:88:-31.93,-26.50,-325.33:54.27
-chr1 810696 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=0;HaplotypeScore=34.97;MQ=44.00;MQ0=14;OQ=294.30;QD=1.91;SB=110.32 GT:AD:DP:GL:GQ 0/1:85,69:98:-62.23,-29.52,-298.08:99
-chr1 810711 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=44.23;MQ=40.46;MQ0=17;OQ=839.07;QD=4.51;SB=107.39 GT:AD:DP:GL:GQ 0/1:81,105:106:-119.13,-31.94,-347.53:99
-chr1 810733 . C A 43.01 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=1;HaplotypeScore=56.61;MQ=40.22;MQ0=16;QD=0.19;SB=125.38 GT:AD:DP:GL:GQ 0/1:192,33:131:-47.04,-39.45,-426.81:75.84
-chr1 810794 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=3;HaplotypeScore=52.64;MQ=44.21;MQ0=2;OQ=1066.68;QD=5.73;SB=31.06 GT:AD:DP:GL:GQ 0/1:92,94:128:-148.50,-38.55,-332.75:99
-chr1 810798 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=60.51;MQ=44.84;MQ0=1;OQ=1224.15;QD=6.69;SB=34.50 GT:AD:DP:GL:GQ 0/1:93,90:127:-163.96,-38.27,-393.95:99
-chr1 810830 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=3;HaplotypeScore=77.56;MQ=44.23;MQ0=2;OQ=74.26;QD=0.42;SB=98.47 GT:AD:DP:GL:GQ 0/1:145,25:125:-59.06,-48.35,-399.04:99
-chr1 810842 . C G 7.71 PASS AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=44.02;MQ0=3;OQ=1687.26;QD=9.37;SB=-373.48 GT:AD:DP:GL:GQ 0/1:84,96:131:-211.48,-39.47,-372.20:99
-chr1 810901 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=0;HaplotypeScore=76.75;MQ=45.85;MQ0=4;OQ=1193.00;QD=8.40;SB=-508.15 GT:AD:DP:GL:GQ 0/1:72,70:110:-155.72,-33.14,-263.20:99
-chr1 810906 . T C 38.41 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=84.75;MQ=46.22;MQ0=3;QD=0.29;SB=-42.29 GT:AD:DP:GL:GQ 0/1:104,29:99:-36.95,-29.82,-359.79:71.24
-chr1 810914 rs2871831 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=29.97;MQ=47.06;MQ0=6;OQ=781.68;QD=6.20;SB=-314.19 GT:AD:DP:GL:GQ 0/1:70,55:96:-110.36,-28.91,-259.38:99
-chr1 810923 . A T 0.10 PASS AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=1;HaplotypeScore=7.81;MQ=46.94;MQ0=8;OQ=838.41;QD=6.60;SB=-348.34 GT:AD:DP:GL:GQ 0/1:70,57:101:-117.55,-30.42,-266.19:99
-chr1 810974 rs61768253 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=159;Dels=0.00;HRun=0;HaplotypeScore=90.96;MQ=39.12;MQ0=31;OQ=376.97;QD=2.37;SB=-131.06 GT:AD:DP:GL:GQ 0/1:90,68:97:-70.20,-29.22,-313.33:99
-chr1 810984 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=2;HaplotypeScore=97.32;MQ=34.90;MQ0=35;OQ=108.00;QD=0.52;SB=94.23 GT:AD:DP:GL:GQ 0/1:166,41:109:-46.91,-32.83,-360.50:99
-chr1 810998 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=0;HaplotypeScore=73.35;MQ=33.36;MQ0=43;OQ=73.40;QD=0.31;SB=-50.06 GT:AD:DP:GL:GQ 0/1:185,54:123:-47.67,-37.04,-404.38:99
-chr1 811006 rs61768254 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=248;Dels=0.00;HRun=1;HaplotypeScore=66.91;MQ=33.49;MQ0=48;OQ=832.91;QD=3.36;SB=-277.39 GT:AD:DP:GL:GQ 0/1:106,142:128:-125.13,-38.56,-331.35:99
-chr1 811069 rs35186927 T A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=481;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=31.63;MQ0=35;OQ=1139.00;QD=2.37;SB=-237.78 GT:AD:DP:GL:GQ 0/1:346,135:257:-194.59,-77.40,-784.30:99
-chr1 811112 rs2311684 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=350;Dels=0.00;HRun=0;HaplotypeScore=77.41;MQ=35.82;MQ0=8;OQ=2362.85;QD=6.75;SB=-654.92 GT:AD:DP:GL:GQ 0/1:216,134:219:-305.59,-66.02,-466.00:99
-chr1 811131 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=248;Dels=0.00;HRun=0;HaplotypeScore=87.33;MQ=41.16;MQ0=2;OQ=4074.75;QD=16.43;SB=-1430.41 GT:AD:DP:GL:GQ 0/1:100,147:200:-406.47,-62.90,-355.42:99
-chr1 811184 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=2;HaplotypeScore=27.77;MQ=43.71;MQ0=0;OQ=460.52;QD=3.74;SB=149.45 GT:AD:DP:GL:GQ 0/1:91,32:108:-81.87,-32.53,-317.70:99
-chr1 811205 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=2;HaplotypeScore=18.01;MQ=44.82;MQ0=0;OQ=329.41;QD=2.86;SB=146.50 GT:AD:DP:GL:GQ 0/1:87,28:104:-67.56,-31.33,-345.48:99
-chr1 811285 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=37.25;MQ=40.88;MQ0=3;OQ=828.79;QD=5.53;SB=-15.76 GT:AD:DP:GL:GQ 0/1:66,84:93:-114.20,-28.04,-207.99:99
-chr1 811292 . G C 33.11 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=58.15;MQ=39.23;MQ0=3;QD=0.21;SB=95.35 GT:AD:DP:GL:GQ 0/1:79,14:72:-31.92,-25.33,-286.41:65.95
-chr1 811309 . A C 218.07 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=0;HaplotypeScore=95.42;MQ=36.77;MQ0=3;QD=1.21;SB=75.78 GT:AD:DP:GL:GQ 0/1:95,84:77:-48.28,-23.19,-225.41:99
-chr1 811313 . C A 77.35 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=190;Dels=0.00;HRun=1;HaplotypeScore=126.41;MQ=36.87;MQ0=1;QD=0.41;SB=64.94 GT:AD:DP:GL:GQ 0/1:128,61:85:-36.63,-25.61,-260.99:99
-chr1 811315 . G A 900.17 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=189;Dels=0.00;HRun=1;HaplotypeScore=96.44;MQ=36.96;MQ0=1;QD=4.76;SB=64.69 GT:AD:DP:GL:GQ 0/1:57,131:88:-122.19,-28.89,-207.10:99
-chr1 811336 . T C 533.21 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=37.36;MQ0=1;QD=2.63;SB=59.62 GT:AD:DP:GL:GQ 0/1:62,140:81:-81.01,-24.41,-227.12:99
-chr1 811339 . T C 458.52 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=200;Dels=0.00;HRun=1;HaplotypeScore=44.80;MQ=38.07;MQ0=1;QD=2.29;SB=92.33 GT:AD:DP:GL:GQ 0/1:65,135:85:-74.74,-25.60,-261.77:99
-chr1 811347 . T G 278.98 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=226;Dels=0.00;HRun=3;HaplotypeScore=134.53;MQ=37.01;MQ0=0;QD=1.23;SB=83.27 GT:AD:DP:GL:GQ 0/1:65,161:80:-55.28,-24.10,-233.47:99
-chr1 811354 . C T 677.91 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=233;Dels=0.00;HRun=0;HaplotypeScore=163.01;MQ=36.31;MQ0=0;QD=2.91;SB=83.23 GT:AD:DP:GL:GQ 0/1:63,170:82:-95.80,-24.72,-187.92:99
-chr1 811362 . C T 454.65 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=226.76;MQ=36.80;MQ0=0;QD=1.97;SB=83.14 GT:AD:DP:GL:GQ 0/1:64,167:80:-72.88,-24.13,-190.51:99
-chr1 811364 . T C 196.31 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=1;HaplotypeScore=66.22;MQ=36.51;MQ0=0;QD=0.85;SB=79.92 GT:AD:DP:GL:GQ 0/1:84,145:75:-47.99,-25.07,-244.42:99
-chr1 811375 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=93.49;MQ=37.41;MQ0=0;OQ=1696.08;QD=7.34;SB=71.11 GT:AD:DP:GL:GQ 0/1:93,137:119:-208.77,-35.88,-209.62:99
-chr1 811378 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=1;HaplotypeScore=193.97;MQ=37.86;MQ0=0;OQ=1149.75;QD=4.81;SB=77.23 GT:AD:DP:GL:GQ 0/1:188,51:123:-155.31,-37.05,-314.47:99
-chr1 811386 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=227;Dels=0.00;HRun=2;HaplotypeScore=163.58;MQ=38.25;MQ0=0;OQ=516.99;QD=2.28;SB=29.28 GT:AD:DP:GL:GQ 0/1:149,78:121:-91.43,-36.45,-384.88:99
-chr1 811400 . C T 562.85 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=209;Dels=0.00;HRun=0;HaplotypeScore=151.19;MQ=39.64;MQ0=0;QD=2.69;SB=23.60 GT:AD:DP:GL:GQ 0/1:96,113:102:-90.30,-30.73,-291.44:99
-chr1 811402 . C T 93.97 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=1;HaplotypeScore=101.45;MQ=39.46;MQ0=1;QD=0.46;SB=62.16 GT:AD:DP:GL:GQ 0/1:188,18:99:-42.50,-29.82,-326.30:99
-chr1 811408 . G T 250.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=192;Dels=0.00;HRun=0;HaplotypeScore=79.23;MQ=40.75;MQ0=2;QD=1.30;SB=59.20 GT:AD:DP:GL:GQ 0/1:111,80:98:-57.85,-29.52,-298.59:99
-chr1 811413 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=67.52;MQ=40.58;MQ0=2;OQ=77.44;QD=0.41;SB=62.19 GT:AD:DP:GL:GQ 0/1:97,91:86:-36.94,-25.92,-277.54:99
-chr1 811430 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=4;HaplotypeScore=58.87;MQ=40.65;MQ0=2;OQ=63.77;QD=0.39;SB=65.24 GT:AD:DP:GL:GQ 0/1:88,76:92:-37.38,-27.72,-324.79:96.61
-chr1 811435 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=19.26;MQ=40.95;MQ0=1;OQ=266.78;QD=1.72;SB=71.27 GT:AD:DP:GL:GQ 0/1:84,71:100:-60.08,-30.12,-340.43:99
-chr1 811443 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=2;HaplotypeScore=30.32;MQ=41.18;MQ0=1;OQ=189.19;QD=1.39;SB=77.28 GT:AD:DP:GL:GQ 0/1:79,56:91:-52.39,-30.19,-304.45:99
-chr1 811635 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=82.21;MQ=40.79;MQ0=16;OQ=141.45;QD=0.98;SB=-89.35 GT:AD:DP:GL:GQ 0/1:111,34:74:-39.73,-22.30,-281.80:99
-chr1 811650 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=95.82;MQ=42.47;MQ0=12;OQ=224.58;QD=1.65;SB=-61.36 GT:AD:DP:GL:GQ 0/1:66,70:76:-48.64,-22.89,-228.84:99
-chr1 811656 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=71.17;MQ=43.15;MQ0=11;OQ=112.09;QD=0.87;SB=-75.98 GT:AD:DP:GL:GQ 0/1:102,27:76:-37.39,-22.90,-238.94:99
-chr1 811750 rs6677354 A G 0.61 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=4.05;MQ=50.03;MQ0=0;OQ=1811.37;QD=31.78;SB=-810.16 GT:AD:DP:GL:GQ 1/1:0,56:52:-184.74,-15.66,-0.02:99
-chr1 811789 rs35660652 C G 23.26 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=4.89;MQ=49.27;MQ0=1;OQ=933.21;QD=16.97;SB=-483.19 GT:AD:DP:GL:GQ 0/1:25,30:48:-111.08,-14.47,-94.44:99
-chr1 811811 rs6671445 T C 60.28 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=51.17;MQ0=1;OQ=1096.50;QD=26.11;SB=-519.10 GT:AD:DP:GL:GQ 1/1:0,42:35:-113.27,-10.56,-0.03:99
-chr1 811899 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=32.15;MQ=43.49;MQ0=20;OQ=124.06;QD=1.01;SB=92.32 GT:AD:DP:GL:GQ 0/1:62,60:72:-37.38,-21.69,-248.07:99
-chr1 812359 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=23.61;MQ=48.84;MQ0=1;OQ=66.32;QD=0.77;SB=71.21 GT:AD:DP:GL:GQ 0/1:52,34:57:-27.09,-17.17,-171.46:99
-chr1 812367 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=15.11;MQ=47.39;MQ0=1;OQ=182.54;QD=1.77;SB=-16.56 GT:AD:DP:GL:GQ 0/1:55,46:66:-41.42,-19.89,-213.25:99
-chr1 812395 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=147;Dels=0.00;HRun=0;HaplotypeScore=16.89;MQ=44.59;MQ0=4;OQ=290.02;QD=1.97;SB=-35.46 GT:AD:DP:GL:GQ 0/1:75,71:87:-58.50,-26.21,-278.39:99
-chr1 812396 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=12.57;MQ=44.24;MQ0=4;OQ=510.01;QD=3.40;SB=-121.97 GT:AD:DP:GL:GQ 0/1:77,73:89:-81.09,-26.81,-250.00:99
-chr1 812452 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=237;Dels=0.00;HRun=1;HaplotypeScore=44.19;MQ=38.30;MQ0=6;OQ=174.18;QD=0.73;SB=140.46 GT:AD:DP:GL:GQ 0/1:178,59:128:-59.25,-38.55,-429.97:99
-chr1 812470 . G A 3027.24 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=2;HaplotypeScore=95.67;MQ=37.00;MQ0=5;QD=11.38;SB=-136.01 GT:AD:DP:GL:GQ 0/1:72,177:161:-375.45,-69.45,-279.59:99
-chr1 812474 . A G 225.39 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=98.08;MQ=36.45;MQ0=4;QD=0.80;SB=107.36 GT:AD:DP:GL:GQ 0/1:225,57:173:-77.95,-52.13,-605.26:99
-chr1 812476 . G A 4194.86 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=1;HaplotypeScore=148.97;MQ=36.56;MQ0=4;QD=14.98;SB=-125.96 GT:AD:DP:GL:GQ 0/1:71,208:172:-418.49,-51.81,-254.37:99
-chr1 812496 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=383;Dels=0.00;HRun=3;HaplotypeScore=110.05;MQ=34.24;MQ0=3;OQ=4072.28;QD=10.63;SB=-60.38 GT:AD:DP:GL:GQ 0/1:191,192:229:-406.23,-68.97,-420.64:99
-chr1 812509 . A G 1306.01 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=390;Dels=0.00;HRun=0;HaplotypeScore=338.39;MQ=34.90;MQ0=4;QD=3.35;SB=113.39 GT:AD:DP:GL:GQ 0/1:88,302:134:-174.25,-40.36,-354.14:99
-chr1 812511 . C T 253.04 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=392;Dels=0.00;HRun=1;HaplotypeScore=342.27;MQ=34.93;MQ0=3;QD=0.65;SB=107.37 GT:AD:DP:GL:GQ 0/1:210,181:105:-60.21,-31.62,-326.58:99
-chr1 812536 . C T 6216.93 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=431;Dels=0.00;HRun=0;HaplotypeScore=21.13;MQ=33.82;MQ0=5;QD=14.42;SB=89.30 GT:AD:DP:GL:GQ 0/1:86,345:239:-620.69,-71.99,-300.06:99
-chr1 812546 . A T 6301.61 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=411;Dels=0.00;HRun=5;HaplotypeScore=527.01;MQ=34.23;MQ0=5;QD=15.33;SB=95.32 GT:AD:DP:GL:GQ 0/1:107,219:261:-629.16,-251.98,-546.86:99
-chr1 812557 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=384;Dels=0.00;HRun=0;HaplotypeScore=98.60;MQ=34.24;MQ0=5;OQ=4742.49;QD=12.35;SB=92.31 GT:AD:DP:GL:GQ 0/1:201,182:235:-473.25,-70.78,-414.34:99
-chr1 812581 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=273;Dels=0.00;HRun=0;HaplotypeScore=142.64;MQ=35.76;MQ0=4;OQ=1205.24;QD=4.41;SB=74.26 GT:AD:DP:GL:GQ 0/1:167,71:149:-175.85,-52.04,-375.17:99
-chr1 812582 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=267;Dels=0.00;HRun=0;HaplotypeScore=141.33;MQ=35.99;MQ0=4;OQ=1716.18;QD=6.43;SB=71.26 GT:AD:DP:GL:GQ 0/1:103,164:146:-218.89,-43.99,-346.52:99
-chr1 812608 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=1;HaplotypeScore=67.91;MQ=41.17;MQ0=4;OQ=693.18;QD=4.20;SB=50.19 GT:AD:DP:GL:GQ 0/1:102,63:97:-101.82,-29.21,-294.33:99
-chr1 812623 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=28.33;MQ=46.60;MQ0=1;OQ=165.38;QD=1.61;SB=41.15 GT:AD:DP:GL:GQ 0/1:59,44:68:-40.30,-20.48,-216.18:99
-chr1 812625 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=1;HaplotypeScore=28.33;MQ=46.70;MQ0=1;OQ=134.52;QD=1.27;SB=44.17 GT:AD:DP:GL:GQ 0/1:60,46:69:-37.52,-20.78,-218.11:99
-chr1 812637 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=0;HaplotypeScore=37.48;MQ=47.73;MQ0=2;OQ=214.50;QD=1.87;SB=-61.85 GT:AD:DP:GL:GQ 0/1:67,48:77:-47.94,-23.20,-220.91:99
-chr1 812655 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=33.89;MQ=47.71;MQ0=3;OQ=405.95;QD=3.35;SB=-136.06 GT:AD:DP:GL:GQ 0/1:68,53:87:-70.08,-26.20,-247.74:99
-chr1 812661 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=2;HaplotypeScore=21.84;MQ=47.58;MQ0=5;OQ=365.64;QD=2.95;SB=-168.82 GT:AD:DP:GL:GQ 0/1:87,37:88:-66.35,-26.51,-263.64:99
-chr1 812666 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=21.15;MQ=47.18;MQ0=5;OQ=451.13;QD=3.67;SB=-190.13 GT:AD:DP:GL:GQ 0/1:65,57:86:-74.30,-25.91,-260.71:99
-chr1 812725 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=2;HaplotypeScore=17.99;MQ=47.07;MQ0=7;OQ=51.25;QD=0.37;SB=36.23 GT:AD:DP:GL:GQ 0/1:99,33:95:-37.06,-28.65,-279.36:84.09
-chr1 812740 . T A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=2;HaplotypeScore=10.99;MQ=47.57;MQ0=4;OQ=391.52;QD=3.08;SB=-178.55 GT:AD:DP:GL:GQ 0/1:69,58:85:-68.04,-25.60,-259.04:99
-chr1 812742 . A T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=11.99;MQ=46.41;MQ0=4;OQ=355.87;QD=2.58;SB=-160.38 GT:AD:DP:GL:GQ 0/1:72,66:89:-65.67,-26.80,-277.85:99
-chr1 812772 . C A 4524.81 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=340;Dels=0.00;HRun=1;HaplotypeScore=205.36;MQ=35.68;MQ0=5;QD=13.31;SB=-1151.01 GT:AD:DP:GL:GQ 0/1:83,257:202:-451.48,-60.83,-296.00:99
-chr1 812774 . G A 5465.17 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=359;Dels=0.00;HRun=1;HaplotypeScore=230.04;MQ=35.29;MQ0=5;QD=15.22;SB=-1392.69 GT:AD:DP:GL:GQ 0/1:83,276:217:-545.52,-65.36,-295.35:99
-chr1 812778 . A C 2967.60 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=395;Dels=0.00;HRun=0;HaplotypeScore=217.58;MQ=34.63;MQ0=8;QD=7.51;SB=-725.51 GT:AD:DP:GL:GQ 0/1:219,176:242:-372.92,-72.88,-512.65:99
-chr1 812823 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=734;Dels=0.00;HRun=0;HaplotypeScore=134.36;MQ=30.02;MQ0=41;OQ=617.75;QD=0.84;SB=-157.33 GT:AD:DP:GL:GQ 0/1:653,81:442:-198.19,-133.13,-1425.62:99
-chr1 812838 rs657923 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=716;Dels=0.00;HRun=1;HaplotypeScore=212.74;MQ=29.97;MQ0=41;OQ=1388.92;QD=1.94;SB=-7.94 GT:AD:DP:GL:GQ 0/1:599,117:439:-274.39,-132.21,-1407.52:99
-chr1 812875 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=465;Dels=0.00;HRun=0;HaplotypeScore=110.91;MQ=32.05;MQ0=37;OQ=83.36;QD=0.18;SB=55.37 GT:AD:DP:GL:GQ 0/1:398,67:296:-100.77,-89.15,-980.63:99
-chr1 812885 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=346;Dels=0.00;HRun=1;HaplotypeScore=111.42;MQ=33.27;MQ0=30;OQ=5208.47;QD=15.05;SB=-2233.36 GT:AD:DP:GL:GQ 0/1:69,277:208:-519.85,-62.65,-238.95:99
-chr1 812886 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=335;Dels=0.00;HRun=1;HaplotypeScore=55.46;MQ=33.49;MQ0=30;OQ=451.06;QD=1.35;SB=-154.07 GT:AD:DP:GL:GQ 0/1:302,33:200:-108.62,-60.23,-633.51:99
-chr1 812900 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=14.94;MQ=39.79;MQ0=13;OQ=813.81;QD=4.45;SB=92.87 GT:AD:DP:GL:GQ 0/1:73,110:100:-114.78,-30.12,-260.13:99
-chr1 812923 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=27.88;MQ=50.22;MQ0=2;OQ=306.33;QD=2.95;SB=-30.81 GT:AD:DP:GL:GQ 0/1:70,34:81:-58.31,-24.40,-238.03:99
-chr1 812935 . G A 2.07 PASS AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=2.66;MQ=47.53;MQ0=2;OQ=744.11;QD=5.55;SB=-223.02 GT:AD:DP:GL:GQ 0/1:69,65:96:-106.61,-28.92,-247.13:99
-chr1 812951 . G T 11.25 PASS AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=43.90;MQ0=5;OQ=1351.36;QD=8.72;SB=-400.31 GT:AD:DP:GL:GQ 0/1:63,92:108:-170.95,-32.53,-225.30:99
-chr1 812975 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=0;HaplotypeScore=28.65;MQ=40.87;MQ0=15;OQ=1862.55;QD=9.36;SB=-484.23 GT:AD:DP:GL:GQ 0/1:66,132:123:-230.20,-40.66,-212.95:99
-chr1 812981 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=1;HaplotypeScore=40.75;MQ=39.82;MQ0=15;OQ=1797.82;QD=8.86;SB=-460.63 GT:AD:DP:GL:GQ 0/1:63,140:120:-219.20,-36.14,-217.08:99
-chr1 812999 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=293;Dels=0.00;HRun=3;HaplotypeScore=112.34;MQ=35.70;MQ0=17;OQ=746.50;QD=2.55;SB=103.46 GT:AD:DP:GL:GQ 0/1:201,92:175:-130.64,-52.71,-522.15:99
-chr1 813018 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=409;Dels=0.00;HRun=4;HaplotypeScore=24.00;MQ=34.51;MQ0=18;OQ=2503.76;QD=6.12;SB=-85.25 GT:AD:DP:GL:GQ 0/1:266,142:285:-339.49,-85.83,-765.92:99
-chr1 813030 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=463;Dels=0.00;HRun=0;HaplotypeScore=48.87;MQ=34.17;MQ0=19;OQ=2316.95;QD=5.00;SB=-56.40 GT:AD:DP:GL:GQ 0/1:312,151:338:-336.77,-101.79,-911.65:99
-chr1 813038 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=491;Dels=0.00;HRun=0;HaplotypeScore=299.82;MQ=33.86;MQ0=19;OQ=574.58;QD=1.17;SB=49.00 GT:AD:DP:GL:GQ 0/1:442,49:363:-170.06,-109.32,-1157.10:99
-chr1 813041 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=493;Dels=0.00;HRun=0;HaplotypeScore=391.76;MQ=34.08;MQ0=19;OQ=10262.92;QD=20.82;SB=-1216.69 GT:AD:DP:GL:GQ 0/1:84,408:369:-1025.29,-114.38,-315.19:99
-chr1 813055 . T G 5105.47 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=534;Dels=0.00;HRun=1;HaplotypeScore=573.54;MQ=33.39;MQ0=15;QD=9.56;SB=-804.21 GT:AD:DP:GL:GQ 0/1:355,179:410:-509.55,-123.48,-999.47:99
-chr1 813070 . G T 1334.14 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=573;Dels=0.00;HRun=1;HaplotypeScore=588.05;MQ=33.10;MQ0=9;QD=2.33;SB=-193.13 GT:AD:DP:GL:GQ 0/1:472,101:440:-269.21,-132.51,-1306.87:99
-chr1 813073 . C G 2805.72 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=592;Dels=0.00;HRun=1;HaplotypeScore=532.94;MQ=33.08;MQ0=8;QD=4.74;SB=-566.71 GT:AD:DP:GL:GQ 0/1:469,123:455:-420.94,-137.09,-1553.33:99
-chr1 813077 . G A 139.61 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=606;Dels=0.00;HRun=1;HaplotypeScore=787.16;MQ=33.34;MQ0=7;QD=0.23;SB=20.29 GT:AD:DP:GL:GQ 0/1:564,42:462:-156.39,-139.14,-1597.16:99
-chr1 813078 . C G 7856.82 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=607;Dels=0.00;HRun=1;HaplotypeScore=894.22;MQ=33.34;MQ0=7;QD=12.94;SB=-567.18 GT:AD:DP:GL:GQ 0/1:367,165:476:-784.68,-363.52,-1514.16:99
-chr1 813086 . C G 6412.49 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=625;Dels=0.00;HRun=0;HaplotypeScore=667.82;MQ=33.46;MQ0=7;QD=10.26;SB=-767.41 GT:AD:DP:GL:GQ 0/1:438,186:509:-640.25,-153.35,-1590.01:99
-chr1 813088 . G A 7116.40 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=627;Dels=0.00;HRun=1;HaplotypeScore=625.87;MQ=33.36;MQ0=7;QD=11.35;SB=-863.76 GT:AD:DP:GL:GQ 0/1:405,186:507:-710.64,-256.24,-1344.66:99
-chr1 813094 . C T 2968.23 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=620;Dels=0.00;HRun=0;HaplotypeScore=211.21;MQ=33.22;MQ0=9;QD=4.79;SB=-1023.50 GT:AD:DP:GL:GQ 0/1:481,139:495:-449.19,-149.09,-1385.37:99
-chr1 813107 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=546;Dels=0.00;HRun=0;HaplotypeScore=55.14;MQ=33.11;MQ0=20;OQ=871.93;QD=1.60;SB=-175.62 GT:AD:DP:GL:GQ 0/1:477,69:368:-201.32,-110.84,-1286.63:99
-chr1 813112 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=540;Dels=0.00;HRun=1;HaplotypeScore=215.40;MQ=33.46;MQ0=24;OQ=633.86;QD=1.17;SB=-102.54 GT:AD:DP:GL:GQ 0/1:489,51:349:-171.78,-105.11,-1109.57:99
-chr1 813120 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=452;Dels=0.00;HRun=0;HaplotypeScore=223.96;MQ=34.07;MQ0=26;OQ=8026.64;QD=17.76;SB=-2723.00 GT:AD:DP:GL:GQ 0/1:104,348:294:-801.66,-88.56,-349.63:99
-chr1 813123 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=449;Dels=0.00;HRun=0;HaplotypeScore=337.04;MQ=33.84;MQ0=28;OQ=7271.87;QD=16.20;SB=-2574.23 GT:AD:DP:GL:GQ 0/1:72,377:266:-726.19,-80.11,-257.87:99
-chr1 813133 . G C 2818.75 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=399;Dels=0.00;HRun=0;HaplotypeScore=373.63;MQ=34.21;MQ0=30;QD=7.06;SB=-1307.24 GT:AD:DP:GL:GQ 0/1:279,119:209:-348.13,-62.97,-562.66:99
-chr1 813135 . A G 6195.50 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=391;Dels=0.00;HRun=0;HaplotypeScore=305.70;MQ=34.41;MQ0=29;QD=15.85;SB=-2650.19 GT:AD:DP:GL:GQ 0/1:69,321:237:-618.55,-71.38,-275.07:99
-chr1 813142 . T C 345.82 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=364;Dels=0.00;HRun=1;HaplotypeScore=286.54;MQ=33.82;MQ0=33;QD=0.95;SB=-108.69 GT:AD:DP:GL:GQ 0/1:317,47:188:-94.49,-56.62,-663.95:99
-chr1 813148 . C A 1435.04 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=349;Dels=0.00;HRun=2;HaplotypeScore=161.77;MQ=34.46;MQ0=34;QD=4.11;SB=-365.32 GT:AD:DP:GL:GQ 0/1:282,67:257:-224.19,-77.40,-705.20:99
-chr1 813156 . T A 297.72 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=0;HaplotypeScore=111.01;MQ=35.71;MQ0=35;QD=0.97;SB=9.92 GT:AD:DP:GL:GQ 0/1:276,32:221:-99.61,-66.55,-759.37:99
-chr1 813157 . G C 549.74 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=111.01;MQ=35.86;MQ0=35;QD=1.79;SB=-210.25 GT:AD:DP:GL:GQ 0/1:247,59:221:-124.85,-66.59,-828.88:99
-chr1 813168 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=254;Dels=0.00;HRun=2;HaplotypeScore=4.86;MQ=37.54;MQ0=37;OQ=984.94;QD=3.88;SB=44.86 GT:AD:DP:GL:GQ 0/1:209,45:173:-153.88,-52.11,-496.83:99
-chr1 813186 . G C 76.25 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=160;Dels=0.00;HRun=0;HaplotypeScore=72.20;MQ=40.71;MQ0=36;QD=0.48;SB=71.95 GT:AD:DP:GL:GQ 0/1:148,12:83:-35.91,-25.01,-332.34:99
-chr1 813187 . A G 513.33 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=147;Dels=0.00;HRun=1;HaplotypeScore=71.20;MQ=41.66;MQ0=35;QD=3.49;SB=-73.38 GT:AD:DP:GL:GQ 0/1:75,50:94:-82.93,-28.31,-287.29:99
-chr1 813188 . C A 79.88 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=1;HaplotypeScore=71.20;MQ=41.50;MQ0=35;QD=0.55;SB=44.61 GT:AD:DP:GL:GQ 0/1:120,26:78:-34.77,-23.49,-243.41:99
-chr1 813189 . C A 521.18 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=67.21;MQ=41.65;MQ0=35;QD=3.62;SB=-1.36 GT:AD:DP:GL:GQ 0/1:108,26:91:-101.37,-45.97,-249.59:99
-chr1 813208 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=2;HaplotypeScore=18.83;MQ=43.26;MQ0=23;OQ=418.24;QD=3.37;SB=-54.23 GT:AD:DP:GL:GQ 0/1:61,63:76:-68.00,-22.89,-206.10:99
-chr1 813240 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=2;HaplotypeScore=43.28;MQ=41.04;MQ0=25;OQ=943.89;QD=6.13;SB=-68.91 GT:AD:DP:GL:GQ 0/1:64,90:92:-125.38,-27.71,-227.61:99
-chr1 813250 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=195;Dels=0.00;HRun=0;HaplotypeScore=62.53;MQ=37.95;MQ0=22;OQ=226.25;QD=1.16;SB=14.99 GT:AD:DP:GL:GQ 0/1:153,42:96:-54.82,-28.92,-298.56:99
-chr1 813271 . T C 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=0;HaplotypeScore=8.46;MQ=34.98;MQ0=19;OQ=1147.61;QD=4.61;SB=-134.40 GT:AD:DP:GL:GQ 0/1:63,186:103:-149.07,-31.02,-256.47:99
-chr1 813292 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=382;Dels=0.00;HRun=2;HaplotypeScore=102.43;MQ=30.92;MQ0=23;OQ=1986.60;QD=5.20;SB=-566.46 GT:AD:DP:GL:GQ 0/1:105,277:133:-242.00,-40.06,-276.00:99
-chr1 813307 . A G 32.13 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=535;Dels=0.00;HRun=0;HaplotypeScore=181.84;MQ=30.25;MQ0=27;QD=0.06;SB=46.55 GT:AD:DP:GL:GQ 0/1:504,31:255:-83.31,-76.81,-935.22:64.97
-chr1 813316 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=619;Dels=0.00;HRun=2;HaplotypeScore=75.11;MQ=29.97;MQ0=27;OQ=3157.81;QD=5.10;SB=-1462.71 GT:AD:DP:GL:GQ 0/1:382,237:331:-418.76,-99.69,-846.79:99
-chr1 813335 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=826;Dels=0.00;HRun=1;HaplotypeScore=136.91;MQ=30.11;MQ0=21;OQ=7119.57;QD=8.62;SB=-2280.77 GT:AD:DP:GL:GQ 0/1:537,288:549:-710.96,-165.36,-1364.58:99
-chr1 813362 . A G 16357.98 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=920;Dels=0.00;HRun=1;HaplotypeScore=446.32;MQ=30.10;MQ0=24;QD=17.78;SB=-5014.09 GT:AD:DP:GL:GQ 0/1:273,494:683:-1634.80,-554.43,-1400.88:99
-chr1 813367 . T C 20902.62 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=914;Dels=0.00;HRun=0;HaplotypeScore=426.41;MQ=30.28;MQ0=24;QD=22.87;SB=-7448.46 GT:AD:DP:GL:GQ 0/1:141,716:687:-2089.26,-358.04,-691.48:99
-chr1 813368 rs13302980 T C 206.93 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=916;Dels=0.00;HRun=0;HaplotypeScore=426.41;MQ=30.25;MQ0=24;QD=0.23;SB=-118.41 GT:AD:DP:GL:GQ 0/1:843,73:685:-230.32,-206.34,-2521.41:99
-chr1 813385 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=888;Dels=0.00;HRun=0;HaplotypeScore=40.71;MQ=30.82;MQ0=25;OQ=1088.75;QD=1.23;SB=-408.14 GT:AD:DP:GL:GQ 0/1:783,105:699:-322.70,-210.54,-2232.26:99
-chr1 813404 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=750;Dels=0.00;HRun=2;HaplotypeScore=134.73;MQ=32.26;MQ0=17;OQ=670.55;QD=0.89;SB=-191.51 GT:AD:DP:GL:GQ 0/1:685,65:613:-254.96,-184.62,-2037.75:99
-chr1 813405 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=741;Dels=0.00;HRun=2;HaplotypeScore=133.74;MQ=32.36;MQ0=17;OQ=1633.92;QD=2.21;SB=-672.01 GT:AD:DP:GL:GQ 0/1:597,144:607:-349.50,-182.82,-2122.95:99
-chr1 813418 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=590;Dels=0.00;HRun=0;HaplotypeScore=47.11;MQ=33.33;MQ0=15;OQ=65.79;QD=0.11;SB=206.84 GT:AD:DP:GL:GQ 0/1:544,46:476:-153.22,-143.35,-1574.37:98.63
-chr1 813443 . T G 3848.11 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=0;HaplotypeScore=38.86;MQ=37.99;MQ0=5;QD=13.99;SB=-1241.58 GT:AD:DP:GL:GQ 0/1:79,195:186:-383.81,-56.02,-279.85:99
-chr1 813451 . C T 1033.45 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=197;Dels=0.01;HRun=0;HaplotypeScore=22.13;MQ=41.75;MQ0=4;QD=5.25;SB=-217.95 GT:AD:DP:GL:GQ 0/1:81,115:114:-140.97,-34.34,-279.86:99
-chr1 813452 . A G 765.89 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=186;Dels=0.01;HRun=0;HaplotypeScore=26.12;MQ=42.21;MQ0=4;QD=4.12;SB=-130.38 GT:AD:DP:GL:GQ 0/1:79,106:109:-112.71,-32.84,-316.56:99
-chr1 813514 rs61768255 T A 0.19 PASS AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=40.18;MQ0=52;OQ=194.92;QD=1.28;SB=-18.62 GT:AD:DP:GL:GQ 0/1:64,87:75:-45.36,-22.59,-238.39:99
-chr1 813576 . G T 36.42 DPFilter;Indel;LowQual AC=1;AF=0.50;AN=2;DP=256;Dels=0.00;HRun=0;HaplotypeScore=114.90;MQ=32.12;MQ0=13;QD=0.14;SB=80.27 GT:AD:DP:GL:GQ 0/1:231,25:108:-39.45,-32.53,-355.25:69.25
-chr1 813577 . C T 12.25 DPFilter;Indel;LowQual AC=1;AF=0.50;AN=2;DP=253;Dels=0.00;HRun=0;HaplotypeScore=118.76;MQ=32.29;MQ0=11;QD=0.05;SB=83.28 GT:AD:DP:GL:GQ 0/1:222,24:110:-47.87,-43.39,-370.50:44.82
-chr1 813595 . G A 14.36 DPFilter;Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=304;Dels=0.02;HRun=3;HaplotypeScore=679.47;MQ=32.56;MQ0=1;QD=0.05;SB=59.22 GT:AD:DP:GL:GQ 0/1:279,19:122:-44.63,-39.92,-398.76:47.04
-chr1 813600 . G A 274.89 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=326;Dels=0.00;HRun=2;HaplotypeScore=874.07;MQ=32.03;MQ0=1;QD=0.84;SB=65.24 GT:AD:DP:GL:GQ 0/1:247,78:142:-73.54,-42.77,-440.28:99
-chr1 813603 . G A 897.36 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=326;Dels=0.00;HRun=2;HaplotypeScore=1015.89;MQ=31.94;MQ0=0;QD=2.75;SB=17.55 GT:AD:DP:GL:GQ 0/1:201,125:138:-134.59,-41.57,-374.40:99
-chr1 813618 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=385;Dels=0.01;HRun=2;HaplotypeScore=1064.00;MQ=30.68;MQ0=0;OQ=4144.71;QD=10.77;SB=-60.77 GT:AD:DP:GL:GQ 0/1:139,193:174:-413.47,-52.40,-263.62:99
-chr1 813640 . G A 6008.25 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=492;Dels=0.03;HRun=2;HaplotypeScore=778.76;MQ=30.34;MQ0=0;QD=12.21;SB=-280.67 GT:AD:DP:GL:GQ 0/1:225,249:279:-599.83,-82.23,-444.10:99
-chr1 813644 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=499;Dels=0.00;HRun=2;HaplotypeScore=589.76;MQ=30.13;MQ0=0;OQ=1319.59;QD=2.64;SB=-65.34 GT:AD:DP:GL:GQ 0/1:370,128:286:-221.39,-86.15,-815.48:99
-chr1 813653 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=493;Dels=0.00;HRun=1;HaplotypeScore=439.06;MQ=30.75;MQ0=0;OQ=617.48;QD=1.25;SB=-157.65 GT:AD:DP:GL:GQ 0/1:455,38:256:-142.14,-77.10,-775.99:99
-chr1 813667 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=450;Dels=0.03;HRun=0;HaplotypeScore=1087.09;MQ=31.84;MQ0=0;OQ=612.31;QD=1.36;SB=24.15 GT:AD:DP:GL:GQ 0/1:310,99:290:-203.97,-139.46,-953.68:99
-chr1 813680 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=385;Dels=0.03;HRun=2;HaplotypeScore=1191.21;MQ=32.81;MQ0=0;OQ=1213.04;QD=3.15;SB=-10.63 GT:AD:DP:GL:GQ 0/1:276,97:229:-193.56,-68.97,-645.40:99
-chr1 813720 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=252;Dels=0.06;HRun=1;HaplotypeScore=327.60;MQ=37.03;MQ0=0;OQ=194.28;QD=0.77;SB=110.38 GT:AD:DP:GL:GQ 0/1:205,33:146:-66.38,-43.67,-457.57:99
-chr1 813729 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=0;HaplotypeScore=373.81;MQ=39.70;MQ0=0;OQ=281.23;QD=1.50;SB=15.00 GT:AD:DP:GL:GQ 0/1:127,60:111:-64.84,-33.43,-345.95:99
-chr1 813820 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=81;Dels=0.05;HRun=2;HaplotypeScore=42.41;MQ=49.74;MQ0=3;OQ=162.06;QD=2.00;SB=-100.42 GT:AD:DP:GL:GQ 0/1:56,21:59:-37.26,-17.77,-183.03:99
-chr1 813869 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=73.61;MQ=47.62;MQ0=2;OQ=155.20;QD=1.94;SB=41.14 GT:AD:DP:GL:GQ 0/1:71,9:54:-35.07,-16.26,-160.29:99
-chr1 813877 . G A 25.05 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=66.85;MQ=49.86;MQ0=1;QD=0.34;SB=32.11 GT:AD:DP:GL:GQ 0/1:64,9:51:-21.15,-15.36,-169.54:57.88
-chr1 813907 . G A 23.05 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=73;Dels=0.04;HRun=1;HaplotypeScore=56.30;MQ=49.27;MQ0=1;QD=0.32;SB=38.13 GT:AD:DP:GL:GQ 0/1:63,7:54:-21.25,-15.66,-171.08:55.87
-chr1 813910 . G A 12.29 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=61.37;MQ=49.27;MQ0=1;QD=0.17;SB=35.12 GT:AD:DP:GL:GQ 0/1:63,10:55:-21.06,-16.57,-179.39:44.87
-chr1 813923 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=75;Dels=0.03;HRun=2;HaplotypeScore=23.38;MQ=50.12;MQ0=1;OQ=138.74;QD=1.85;SB=-24.20 GT:AD:DP:GL:GQ 0/1:50,23:55:-33.43,-16.28,-173.24:99
-chr1 813957 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=2;HaplotypeScore=18.68;MQ=43.32;MQ0=1;OQ=871.71;QD=6.86;SB=-275.74 GT:AD:DP:GL:GQ 0/1:65,62:85:-116.06,-25.61,-200.91:99
-chr1 813978 . A C 0.71 PASS AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=39.28;MQ0=4;OQ=705.69;QD=4.77;SB=-252.74 GT:AD:DP:GL:GQ 0/1:54,94:80:-97.95,-24.09,-193.62:99
-chr1 814078 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=6.42;MQ=36.79;MQ0=24;OQ=486.46;QD=2.55;SB=-267.20 GT:AD:DP:GL:GQ 0/1:63,128:82:-76.63,-24.70,-247.64:99
-chr1 814121 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=39.43;MQ=40.45;MQ0=17;OQ=289.94;QD=1.73;SB=-38.08 GT:AD:DP:GL:GQ 0/1:70,98:82:-56.99,-24.71,-295.92:99
-chr1 814147 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=0;HaplotypeScore=14.17;MQ=45.92;MQ0=13;OQ=964.78;QD=6.39;SB=-366.58 GT:AD:DP:GL:GQ 0/1:82,69:112:-133.50,-33.74,-285.66:99
-chr1 814171 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=1;HaplotypeScore=20.78;MQ=44.66;MQ0=14;OQ=904.13;QD=5.38;SB=-364.51 GT:AD:DP:GL:GQ 0/1:83,85:118:-129.23,-35.54,-305.53:99
-chr1 814202 . C A 1692.96 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=197;Dels=0.09;HRun=0;HaplotypeScore=162.31;MQ=41.97;MQ0=8;QD=8.59;SB=-578.48 GT:AD:DP:GL:GQ 0/1:79,100:139:-213.84,-41.26,-286.69:99
-chr1 814220 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=0;HaplotypeScore=50.82;MQ=39.65;MQ0=8;OQ=329.14;QD=1.52;SB=-86.50 GT:AD:DP:GL:GQ 0/1:161,56:136:-77.16,-40.96,-423.94:99
-chr1 814233 . G A 2067.86 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=0;HaplotypeScore=147.47;MQ=38.66;MQ0=13;QD=9.23;SB=-544.97 GT:AD:DP:GL:GQ 0/1:105,119:132:-249.86,-39.79,-228.63:99
-chr1 814239 . A G 1315.30 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=220;Dels=0.00;HRun=1;HaplotypeScore=123.50;MQ=38.45;MQ0=13;QD=5.98;SB=-142.40 GT:AD:DP:GL:GQ 0/1:70,150:114:-169.16,-34.34,-278.17:99
-chr1 814242 . A G 554.64 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=125.56;MQ=38.13;MQ0=16;QD=2.40;SB=-155.01 GT:AD:DP:GL:GQ 0/1:172,59:130:-97.91,-39.16,-422.03:99
-chr1 814256 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=245;Dels=0.00;HRun=0;HaplotypeScore=21.41;MQ=37.07;MQ0=15;OQ=2324.45;QD=9.49;SB=-360.77 GT:AD:DP:GL:GQ 0/1:68,177:144:-279.11,-43.38,-270.96:99
-chr1 814273 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=59.92;MQ=36.71;MQ0=15;OQ=51.68;QD=0.19;SB=122.32 GT:AD:DP:GL:GQ 0/1:221,49:163:-60.05,-51.60,-506.38:84.51
-chr1 814274 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=269;Dels=0.00;HRun=0;HaplotypeScore=59.77;MQ=36.62;MQ0=15;OQ=1850.48;QD=6.88;SB=-407.81 GT:AD:DP:GL:GQ 0/1:149,120:153:-234.45,-46.12,-315.76:99
-chr1 814294 . A G 2410.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=2;HaplotypeScore=103.79;MQ=37.05;MQ0=15;QD=9.06;SB=-443.47 GT:AD:DP:GL:GQ 0/1:75,191:153:-290.38,-46.10,-295.34:99
-chr1 814296 . G A 1211.04 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=274;Dels=0.00;HRun=0;HaplotypeScore=219.20;MQ=36.82;MQ0=15;QD=4.42;SB=-351.23 GT:AD:DP:GL:GQ 0/1:200,74:158:-171.99,-47.60,-420.58:99
-chr1 814301 . A G 978.34 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=274;Dels=0.00;HRun=0;HaplotypeScore=220.77;MQ=36.41;MQ0=15;QD=3.57;SB=-180.08 GT:AD:DP:GL:GQ 0/1:73,201:110:-134.26,-33.14,-291.65:99
-chr1 814305 . T C 45.78 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=232.83;MQ=35.76;MQ0=15;QD=0.16;SB=-43.14 GT:AD:DP:GL:GQ 0/1:206,71:102:-38.59,-30.73,-365.14:78.61
-chr1 814318 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=0;HaplotypeScore=167.17;MQ=36.26;MQ0=13;OQ=2113.99;QD=7.60;SB=-387.55 GT:AD:DP:GL:GQ 0/1:72,191:148:-269.75,-55.07,-295.63:99
-chr1 814320 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=0;HaplotypeScore=167.17;MQ=36.49;MQ0=13;OQ=746.17;QD=2.66;SB=-108.14 GT:AD:DP:GL:GQ 0/1:218,62:140:-120.08,-42.18,-412.31:99
-chr1 814333 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=285;Dels=0.00;HRun=0;HaplotypeScore=281.15;MQ=35.53;MQ0=9;OQ=1990.33;QD=6.98;SB=-447.96 GT:AD:DP:GL:GQ 0/1:95,190:142:-245.09,-42.77,-288.22:99
-chr1 814346 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=251;Dels=0.00;HRun=0;HaplotypeScore=225.23;MQ=36.32;MQ0=4;OQ=1683.84;QD=6.71;SB=-421.88 GT:AD:DP:GL:GQ 0/1:107,144:128:-210.24,-38.57,-269.23:99
-chr1 814360 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=2;HaplotypeScore=149.83;MQ=38.08;MQ0=4;OQ=172.19;QD=0.77;SB=51.61 GT:AD:DP:GL:GQ 0/1:195,28:117:-55.74,-35.24,-362.13:99
-chr1 814384 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=1;HaplotypeScore=42.51;MQ=45.49;MQ0=3;OQ=551.67;QD=3.70;SB=-145.33 GT:AD:DP:GL:GQ 0/1:76,73:99:-88.27,-29.82,-286.26:99
-chr1 814428 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=10.58;MQ=49.14;MQ0=17;OQ=342.52;QD=2.63;SB=-111.49 GT:AD:DP:GL:GQ 0/1:82,48:99:-67.35,-29.82,-298.71:99
-chr1 814439 . C T 20.82 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=47.72;MQ0=20;QD=0.14;SB=152.46 GT:AD:DP:GL:GQ 0/1:137,12:115:-40.00,-34.64,-383.60:53.62
-chr1 814456 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=1;HaplotypeScore=15.28;MQ=46.84;MQ0=26;OQ=753.94;QD=4.65;SB=-138.63 GT:AD:DP:GL:GQ 0/1:92,70:122:-115.43,-36.75,-321.50:99
-chr1 814470 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=189;Dels=0.00;HRun=1;HaplotypeScore=31.58;MQ=44.82;MQ0=39;OQ=884.58;QD=4.68;SB=-229.69 GT:AD:DP:GL:GQ 0/1:97,92:121:-128.25,-36.50,-368.74:99
-chr1 814488 . C A 76.03 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=247;Dels=0.00;HRun=0;HaplotypeScore=105.09;MQ=41.14;MQ0=41;QD=0.31;SB=176.55 GT:AD:DP:GL:GQ 0/1:229,16:148:-55.47,-44.58,-476.50:99
-chr1 814489 . C G 69.13 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=248;Dels=0.00;HRun=0;HaplotypeScore=89.81;MQ=41.12;MQ0=41;QD=0.28;SB=176.62 GT:AD:DP:GL:GQ 0/1:231,17:149:-55.10,-44.90,-596.57:99
-chr1 814495 . T C 1858.16 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=258;Dels=0.00;HRun=0;HaplotypeScore=56.93;MQ=40.44;MQ0=47;QD=7.20;SB=-760.45 GT:AD:DP:GL:GQ 0/1:92,166:157:-236.40,-47.30,-370.00:99
-chr1 814529 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=433;Dels=0.00;HRun=0;HaplotypeScore=120.51;MQ=38.11;MQ0=39;OQ=500.57;QD=1.16;SB=-243.42 GT:AD:DP:GL:GQ 0/1:383,50:261:-131.95,-78.61,-806.43:99
-chr1 814534 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=446;Dels=0.00;HRun=0;HaplotypeScore=107.63;MQ=38.32;MQ0=36;OQ=359.59;QD=0.81;SB=-173.49 GT:AD:DP:GL:GQ 0/1:401,44:272:-121.18,-81.93,-841.90:99
-chr1 814540 . A G 36.54 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=477;Dels=0.00;HRun=1;HaplotypeScore=62.33;MQ=38.25;MQ0=37;QD=0.08;SB=123.17 GT:AD:DP:GL:GQ 0/1:445,32:265:-86.76,-79.83,-986.21:69.37
-chr1 814554 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=529;Dels=0.00;HRun=0;HaplotypeScore=89.36;MQ=37.97;MQ0=32;OQ=9731.93;QD=18.40;SB=-1976.66 GT:AD:DP:GL:GQ 0/1:80,449:318:-972.19,-95.79,-281.92:99
-chr1 814557 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=552;Dels=0.00;HRun=0;HaplotypeScore=97.56;MQ=38.01;MQ0=31;OQ=8661.84;QD=15.69;SB=-1680.73 GT:AD:DP:GL:GQ 0/1:195,357:340:-865.18,-102.42,-472.42:99
-chr1 814572 rs564838 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=625;Dels=0.00;HRun=1;HaplotypeScore=63.63;MQ=38.08;MQ0=27;OQ=2371.32;QD=3.79;SB=-326.77 GT:AD:DP:GL:GQ 0/1:480,145:413:-364.80,-124.39,-1136.05:99
-chr1 814627 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=504;Dels=0.00;HRun=1;HaplotypeScore=183.33;MQ=39.27;MQ0=14;OQ=10984.00;QD=21.79;SB=-1265.89 GT:AD:DP:GL:GQ 0/1:67,203:343:-1097.40,-537.50,-676.52:99
-chr1 814675 . G A 2732.90 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=265;Dels=0.00;HRun=1;HaplotypeScore=261.45;MQ=41.69;MQ0=11;QD=10.31;SB=-108.93 GT:AD:DP:GL:GQ 0/1:161,102:166:-330.09,-53.51,-314.61:99
-chr1 814679 . A G 2402.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=237;Dels=0.00;HRun=1;HaplotypeScore=135.51;MQ=41.79;MQ0=13;QD=10.14;SB=-20.34 GT:AD:DP:GL:GQ 0/1:70,167:146:-287.52,-43.99,-273.83:99
-chr1 814680 . C T 2092.18 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=238;Dels=0.00;HRun=0;HaplotypeScore=134.51;MQ=41.43;MQ0=17;QD=8.79;SB=-7.62 GT:AD:DP:GL:GQ 0/1:151,86:144:-255.88,-43.38,-283.23:99
-chr1 814701 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=219;Dels=0.00;HRun=0;HaplotypeScore=51.82;MQ=41.75;MQ0=19;OQ=1622.55;QD=7.41;SB=-75.48 GT:AD:DP:GL:GQ 0/1:87,132:141:-208.02,-42.48,-267.24:99
-chr1 814708 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=0;HaplotypeScore=76.68;MQ=40.68;MQ0=25;OQ=2028.26;QD=9.14;SB=-58.81 GT:AD:DP:GL:GQ 0/1:84,138:144:-249.49,-43.38,-267.28:99
-chr1 814713 rs563211 T C 1374.69 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=232;Dels=0.00;HRun=0;HaplotypeScore=105.58;MQ=40.40;MQ0=29;QD=5.93;SB=29.72 GT:AD:DP:GL:GQ 0/1:146,86:143:-183.83,-43.08,-359.04:99
-chr1 814720 . T C 689.97 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=108.11;MQ=39.59;MQ0=32;QD=2.84;SB=46.65 GT:AD:DP:GL:GQ 0/1:85,157:115:-106.92,-34.64,-346.63:99
-chr1 814722 . C G 183.01 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=254;Dels=0.00;HRun=0;HaplotypeScore=126.09;MQ=39.61;MQ0=33;QD=0.72;SB=68.61 GT:AD:DP:GL:GQ 0/1:217,37:122:-58.35,-36.76,-472.38:99
-chr1 814737 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=30.86;MQ=38.18;MQ0=38;OQ=2218.82;QD=7.42;SB=-36.77 GT:AD:DP:GL:GQ 0/1:186,113:186:-281.20,-56.03,-416.78:99
-chr1 814767 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=365;Dels=0.00;HRun=2;HaplotypeScore=49.56;MQ=35.63;MQ0=43;OQ=5264.89;QD=14.42;SB=-427.42 GT:AD:DP:GL:GQ 0/1:96,269:216:-525.49,-65.13,-366.09:99
-chr1 814784 . A G 211.71 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=402;Dels=0.00;HRun=0;HaplotypeScore=324.91;MQ=34.66;MQ0=41;QD=0.53;SB=-28.05 GT:AD:DP:GL:GQ 0/1:357,45:243:-97.65,-73.19,-885.32:99
-chr1 814787 . A G 1988.10 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=404;Dels=0.00;HRun=0;HaplotypeScore=288.76;MQ=34.45;MQ0=41;QD=4.92;SB=-448.31 GT:AD:DP:GL:GQ 0/1:239,165:199:-262.08,-59.99,-467.56:99
-chr1 814790 . G A 2076.12 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=406;Dels=0.00;HRun=0;HaplotypeScore=289.81;MQ=34.38;MQ0=42;QD=5.11;SB=-426.20 GT:AD:DP:GL:GQ 0/1:294,112:245:-284.69,-73.80,-651.34:99
-chr1 814794 . G C 5521.90 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=400;Dels=0.00;HRun=0;HaplotypeScore=359.70;MQ=34.34;MQ0=40;QD=13.80;SB=-919.83 GT:AD:DP:GL:GQ 0/1:77,252:207:-551.19,-211.22,-478.27:99
-chr1 814804 . C T 88.70 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=434;Dels=0.00;HRun=1;HaplotypeScore=347.22;MQ=35.87;MQ0=35;QD=0.20;SB=-33.30 GT:AD:DP:GL:GQ 0/1:387,47:188:-68.79,-56.64,-599.68:99
-chr1 814807 . A C 912.16 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=446;Dels=0.00;HRun=1;HaplotypeScore=302.12;MQ=36.31;MQ0=35;QD=2.05;SB=-348.23 GT:AD:DP:GL:GQ 0/1:319,127:242:-167.40,-72.90,-690.79:99
-chr1 814811 . C T 8629.57 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=472;Dels=0.00;HRun=2;HaplotypeScore=321.44;MQ=36.81;MQ0=35;QD=18.28;SB=-2662.56 GT:AD:DP:GL:GQ 0/1:133,339:310:-861.96,-93.38,-350.61:99
-chr1 814815 . G A 1219.97 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=497;Dels=0.00;HRun=1;HaplotypeScore=253.88;MQ=37.19;MQ0=33;QD=2.45;SB=-308.28 GT:AD:DP:GL:GQ 0/1:414,82:332:-225.30,-100.02,-991.58:99
-chr1 814833 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=552;Dels=0.00;HRun=0;HaplotypeScore=30.66;MQ=38.93;MQ0=25;OQ=13138.69;QD=23.80;SB=-5564.86 GT:AD:DP:GL:GQ 0/1:68,484:387:-1312.87,-116.58,-241.99:99
-chr1 814846 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=600;Dels=0.00;HRun=1;HaplotypeScore=69.54;MQ=39.19;MQ0=23;OQ=3136.64;QD=5.23;SB=-1237.78 GT:AD:DP:GL:GQ 0/1:435,165:409:-440.13,-123.18,-1039.78:99
-chr1 814879 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=693;Dels=0.00;HRun=0;HaplotypeScore=388.69;MQ=39.91;MQ0=7;OQ=8125.01;QD=11.72;SB=-2578.04 GT:AD:DP:GL:GQ 0/1:409,284:467:-811.50,-140.66,-960.39:99
-chr1 814880 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=692;Dels=0.00;HRun=2;HaplotypeScore=381.90;MQ=39.95;MQ0=7;OQ=2413.57;QD=3.49;SB=-960.49 GT:AD:DP:GL:GQ 0/1:533,158:465:-387.57,-142.93,-1289.43:99
-chr1 814900 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=699;Dels=0.00;HRun=0;HaplotypeScore=119.56;MQ=39.22;MQ0=14;OQ=14541.95;QD=20.80;SB=-4000.09 GT:AD:DP:GL:GQ 0/1:90,605:445:-1453.20,-134.09,-272.14:99
-chr1 814929 . C T 1261.33 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=562;Dels=0.00;HRun=0;HaplotypeScore=644.78;MQ=37.11;MQ0=29;QD=2.24;SB=-29.99 GT:AD:DP:GL:GQ 0/1:384,176:313:-223.70,-94.28,-953.66:99
-chr1 814931 . T C 7350.11 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=554;Dels=0.00;HRun=4;HaplotypeScore=616.85;MQ=36.93;MQ0=28;QD=13.27;SB=-1896.86 GT:AD:DP:GL:GQ 0/1:148,405:309:-734.01,-93.08,-440.40:99
-chr1 814932 rs4475692 G A 10783.24 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=554;Dels=0.00;HRun=0;HaplotypeScore=621.95;MQ=36.79;MQ0=29;QD=19.46;SB=-2129.22 GT:AD:DP:GL:GQ 0/1:174,298:306:-1077.32,-380.57,-459.91:99
-chr1 814939 . G A 1306.21 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=568;Dels=0.00;HRun=1;HaplotypeScore=479.84;MQ=36.20;MQ0=35;QD=2.30;SB=-170.45 GT:AD:DP:GL:GQ 0/1:402,165:327:-232.39,-98.48,-986.51:99
-chr1 814952 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=543;Dels=0.00;HRun=0;HaplotypeScore=51.53;MQ=35.74;MQ0=35;OQ=140.17;QD=0.26;SB=144.16 GT:AD:DP:GL:GQ 0/1:482,61:349:-122.41,-105.11,-1207.38:99
-chr1 814967 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=541;Dels=0.00;HRun=0;HaplotypeScore=312.71;MQ=35.10;MQ0=40;OQ=7468.20;QD=13.80;SB=-2338.34 GT:AD:DP:GL:GQ 0/1:256,284:360:-745.82,-108.45,-622.35:99
-chr1 814975 . C T 35.90 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=483;Dels=0.00;HRun=0;HaplotypeScore=80.80;MQ=34.88;MQ0=44;QD=0.07;SB=387.40 GT:AD:DP:GL:GQ 0/1:418,42:326:-167.53,-160.66,-1098.08:68.73
-chr1 815007 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=591;Dels=0.00;HRun=1;HaplotypeScore=71.67;MQ=32.27;MQ0=41;OQ=5134.52;QD=8.69;SB=-1587.17 GT:AD:DP:GL:GQ 0/1:388,203:408:-512.45,-122.89,-966.60:99
-chr1 815060 rs7417801 G A 11239.90 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=650;Dels=0.00;HRun=0;HaplotypeScore=316.82;MQ=33.42;MQ0=19;QD=17.29;SB=-4737.34 GT:AD:DP:GL:GQ 0/1:178,470:421:-1122.99,-126.87,-458.77:99
-chr1 815061 . C T 1691.04 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=650;Dels=0.00;HRun=1;HaplotypeScore=315.98;MQ=33.65;MQ0=19;QD=2.60;SB=-738.44 GT:AD:DP:GL:GQ 0/1:537,113:421:-299.19,-126.80,-1266.58:99
-chr1 815070 rs61768257 T C 12258.60 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=631;Dels=0.00;HRun=0;HaplotypeScore=343.15;MQ=33.97;MQ0=16;QD=19.43;SB=-5504.71 GT:AD:DP:GL:GQ 0/1:80,551:412:-1224.86,-124.09,-309.22:99
-chr1 815113 rs61768258 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=470;Dels=0.00;HRun=0;HaplotypeScore=109.35;MQ=33.63;MQ0=24;OQ=6584.76;QD=14.01;SB=-2185.39 GT:AD:DP:GL:GQ 0/1:114,356:254:-657.48,-76.51,-273.29:99
-chr1 815129 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=382;Dels=0.00;HRun=3;HaplotypeScore=48.33;MQ=33.58;MQ0=23;OQ=4485.00;QD=11.74;SB=-986.12 GT:AD:DP:GL:GQ 0/1:120,260:190:-447.50,-57.26,-260.95:99
-chr1 815155 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=321;Dels=0.00;HRun=2;HaplotypeScore=58.38;MQ=34.02;MQ0=21;OQ=1737.47;QD=5.41;SB=15.00 GT:AD:DP:GL:GQ 0/1:189,132:155:-223.72,-46.69,-361.30:99
-chr1 815170 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=270;Dels=0.00;HRun=0;HaplotypeScore=137.94;MQ=34.80;MQ0=19;OQ=2424.70;QD=8.98;SB=14.59 GT:AD:DP:GL:GQ 0/1:64,205:125:-283.44,-37.69,-171.56:99
-chr1 815209 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=4;HaplotypeScore=80.30;MQ=38.66;MQ0=0;OQ=2224.65;QD=10.44;SB=11.50 GT:AD:DP:GL:GQ 0/1:67,146:136:-266.72,-40.97,-258.01:99
-chr1 815222 . C G 180.27 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=2;HaplotypeScore=142.18;MQ=38.40;MQ0=0;QD=0.81;SB=9.29 GT:AD:DP:GL:GQ 0/1:186,36:136:-62.35,-41.04,-500.13:99
-chr1 815223 . G T 2117.77 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=1;HaplotypeScore=129.82;MQ=38.70;MQ0=0;QD=9.80;SB=21.09 GT:AD:DP:GL:GQ 0/1:67,149:140:-257.24,-42.18,-220.42:99
-chr1 815225 . C A 1105.29 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=2;HaplotypeScore=129.82;MQ=38.83;MQ0=0;QD=5.09;SB=62.22 GT:AD:DP:GL:GQ 0/1:119,82:139:-174.62,-60.81,-341.62:99
-chr1 815273 rs13303179 G A 2565.92 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=228;Dels=0.03;HRun=0;HaplotypeScore=354.84;MQ=39.22;MQ0=2;QD=11.25;SB=-1159.78 GT:AD:DP:GL:GQ 0/1:137,80:90:-286.39,-26.51,-60.11:99
-chr1 815278 . G T 761.09 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=623.87;MQ=38.93;MQ0=0;QD=3.17;SB=80.36 GT:AD:DP:GL:GQ 0/1:181,48:118:-132.78,-53.39,-296.79:99
-chr1 815284 . A T 612.72 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=234;Dels=0.01;HRun=0;HaplotypeScore=131.40;MQ=39.54;MQ0=0;QD=2.62;SB=-4.85 GT:AD:DP:GL:GQ 0/1:70,108:89:-96.12,-31.56,-237.53:99
-chr1 815299 . C T 462.61 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=1;HaplotypeScore=228.02;MQ=37.95;MQ0=1;QD=1.71;SB=107.29 GT:AD:DP:GL:GQ 0/1:137,134:104:-80.88,-31.33,-296.80:99
-chr1 815300 . A G 825.50 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=268;Dels=0.00;HRun=0;HaplotypeScore=227.74;MQ=37.73;MQ0=1;QD=3.08;SB=104.37 GT:AD:DP:GL:GQ 0/1:110,156:125:-123.50,-37.66,-346.20:99
-chr1 815308 . A G 1233.06 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=264;Dels=0.00;HRun=0;HaplotypeScore=419.76;MQ=37.40;MQ0=1;QD=4.67;SB=68.40 GT:AD:DP:GL:GQ 0/1:127,137:154:-172.99,-46.40,-402.39:99
-chr1 815312 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=276;Dels=0.00;HRun=0;HaplotypeScore=183.65;MQ=36.17;MQ0=1;OQ=3931.91;QD=14.25;SB=-32.81 GT:AD:DP:GL:GQ 0/1:62,214:156:-392.19,-47.02,-185.37:99
-chr1 815328 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=297;Dels=0.00;HRun=0;HaplotypeScore=61.42;MQ=35.05;MQ0=1;OQ=1563.62;QD=5.26;SB=37.57 GT:AD:DP:GL:GQ 0/1:210,87:190:-216.89,-57.25,-456.11:99
-chr1 815333 . A G 262.79 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=239.02;MQ=35.16;MQ0=1;QD=0.88;SB=12.36 GT:AD:DP:GL:GQ 0/1:257,42:214:-94.06,-64.49,-716.97:99
-chr1 815339 . G A 1298.73 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=1;HaplotypeScore=174.26;MQ=34.74;MQ0=1;QD=4.57;SB=28.57 GT:AD:DP:GL:GQ 0/1:213,70:192:-191.01,-57.85,-488.27:99
-chr1 815340 . C A 157.45 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=166.11;MQ=34.52;MQ0=1;QD=0.56;SB=56.17 GT:AD:DP:GL:GQ 0/1:238,39:195:-77.77,-58.74,-595.87:99
-chr1 815347 . C T 431.68 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=149.67;MQ=34.21;MQ0=1;QD=1.59;SB=13.61 GT:AD:DP:GL:GQ 0/1:219,52:183:-101.60,-55.14,-567.56:99
-chr1 815356 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=134.05;MQ=33.48;MQ0=1;OQ=648.64;QD=2.30;SB=53.15 GT:AD:DP:GL:GQ 0/1:240,42:173:-120.28,-52.13,-519.88:99
-chr1 815363 . G A 778.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=288;Dels=0.00;HRun=0;HaplotypeScore=145.91;MQ=33.47;MQ0=1;QD=2.70;SB=9.52 GT:AD:DP:GL:GQ 0/1:221,66:188:-137.76,-56.63,-540.20:99
-chr1 815371 . T A 4591.13 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=0;HaplotypeScore=258.43;MQ=32.98;MQ0=1;QD=16.70;SB=38.12 GT:AD:DP:GL:GQ 0/1:49,226:171:-458.11,-51.51,-170.42:99
-chr1 815373 . A T 533.41 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=286;Dels=0.00;HRun=2;HaplotypeScore=261.79;MQ=33.03;MQ0=1;QD=1.87;SB=35.14 GT:AD:DP:GL:GQ 0/1:246,39:154:-103.02,-46.39,-455.31:99
-chr1 815376 . C A 1170.34 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=282;Dels=0.00;HRun=0;HaplotypeScore=127.10;MQ=33.82;MQ0=1;QD=4.15;SB=38.15 GT:AD:DP:GL:GQ 0/1:188,94:146:-164.30,-43.98,-347.79:99
-chr1 815381 . G A 252.28 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=149.34;MQ=33.65;MQ0=1;QD=0.84;SB=44.17 GT:AD:DP:GL:GQ 0/1:261,37:167:-78.82,-50.30,-512.70:99
-chr1 815393 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=2;HaplotypeScore=32.62;MQ=34.43;MQ0=1;OQ=361.63;QD=1.32;SB=59.23 GT:AD:DP:GL:GQ 0/1:214,61:130:-78.62,-39.18,-425.44:99
-chr1 815401 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=262;Dels=0.00;HRun=0;HaplotypeScore=139.53;MQ=35.48;MQ0=0;OQ=534.52;QD=2.04;SB=65.23 GT:AD:DP:GL:GQ 0/1:204,58:105:-88.37,-31.63,-309.51:99
-chr1 815405 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=256;Dels=0.00;HRun=0;HaplotypeScore=139.38;MQ=35.34;MQ0=0;OQ=1047.66;QD=4.09;SB=65.23 GT:AD:DP:GL:GQ 0/1:61,195:95:-136.67,-28.62,-215.61:99
-chr1 815412 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=227;Dels=0.00;HRun=1;HaplotypeScore=225.15;MQ=36.20;MQ0=0;OQ=276.35;QD=1.22;SB=65.25 GT:AD:DP:GL:GQ 0/1:61,166:74:-53.21,-22.29,-232.02:99
-chr1 815417 rs4970337 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=202;Dels=0.00;HRun=1;HaplotypeScore=585.49;MQ=36.06;MQ0=0;OQ=1433.41;QD=7.10;SB=-630.86 GT:AD:DP:GL:GQ 1/1:20,53:52:-158.74,-15.68,-11.81:38.71
-chr1 815425 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=183;Dels=0.00;HRun=0;HaplotypeScore=313.15;MQ=35.48;MQ0=0;OQ=58.46;QD=0.32;SB=65.13 GT:AD:DP:GL:GQ 0/1:47,51:54:-25.40,-16.27,-162.78:91.30
-chr1 815458 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=13.84;MQ=40.96;MQ0=1;OQ=53.27;QD=0.51;SB=62.22 GT:AD:DP:GL:GQ 0/1:68,36:55:-25.19,-16.58,-184.48:86.11
-chr1 815470 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=23.44;MQ=43.10;MQ0=1;OQ=126.81;QD=1.44;SB=62.23 GT:AD:DP:GL:GQ 0/1:44,44:50:-31.03,-15.06,-165.46:99
-chr1 815557 . T C 22.78 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=22.31;MQ=51.18;MQ0=1;QD=0.27;SB=2.47 GT:AD:DP:GL:GQ 0/1:71,13:68:-26.06,-20.50,-237.08:55.60
-chr1 815639 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=2;HaplotypeScore=38.60;MQ=52.07;MQ0=2;OQ=197.56;QD=2.27;SB=80.29 GT:AD:DP:GL:GQ 0/1:75,12:73:-45.07,-22.03,-247.37:99
-chr1 815714 rs4549984 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=282;Dels=0.00;HRun=0;HaplotypeScore=45.55;MQ=35.23;MQ0=6;OQ=3065.05;QD=10.87;SB=-490.50 GT:AD:DP:GL:GQ 0/1:131,151:198:-369.43,-59.64,-380.00:99
-chr1 815740 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=388;Dels=0.00;HRun=1;HaplotypeScore=91.19;MQ=33.31;MQ0=8;OQ=203.81;QD=0.53;SB=46.30 GT:AD:DP:GL:GQ 0/1:351,35:273:-111.13,-87.46,-857.56:99
-chr1 815759 . A T 981.66 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=425;Dels=0.00;HRun=0;HaplotypeScore=319.89;MQ=33.30;MQ0=16;QD=2.31;SB=-282.31 GT:AD:DP:GL:GQ 0/1:309,70:292:-258.47,-157.02,-944.68:99
-chr1 815760 . C A 1978.15 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=424;Dels=0.00;HRun=3;HaplotypeScore=319.89;MQ=33.21;MQ0=16;QD=4.67;SB=-361.60 GT:AD:DP:GL:GQ 0/1:311,113:290:-288.45,-87.35,-755.50:99
-chr1 815761 . C A 1757.71 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=422;Dels=0.00;HRun=1;HaplotypeScore=319.47;MQ=33.03;MQ0=16;QD=4.17;SB=-393.48 GT:AD:DP:GL:GQ 0/1:295,112:286:-275.36,-96.30,-763.46:99
-chr1 815762 . A G 1602.96 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=423;Dels=0.00;HRun=0;HaplotypeScore=319.57;MQ=33.04;MQ0=16;QD=3.79;SB=-325.52 GT:AD:DP:GL:GQ 0/1:273,113:288:-310.25,-146.67,-857.16:99
-chr1 815765 . G A 2936.95 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=427;Dels=0.00;HRun=3;HaplotypeScore=320.41;MQ=33.17;MQ0=17;QD=6.88;SB=-566.97 GT:AD:DP:GL:GQ 0/1:277,150:291:-384.73,-87.75,-614.82:99
-chr1 815777 . C T 24.19 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=434;Dels=0.00;HRun=0;HaplotypeScore=73.54;MQ=32.97;MQ0=17;QD=0.06;SB=99.73 GT:AD:DP:GL:GQ 0/1:393,41:292:-93.65,-87.95,-958.63:57.01
-chr1 815780 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=432;Dels=0.00;HRun=1;HaplotypeScore=75.21;MQ=32.79;MQ0=17;OQ=115.11;QD=0.27;SB=79.01 GT:AD:DP:GL:GQ 0/1:399,33:289:-101.84,-87.05,-1076.94:99
-chr1 815810 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=3;HaplotypeScore=40.23;MQ=35.68;MQ0=17;OQ=207.08;QD=0.78;SB=-57.21 GT:AD:DP:GL:GQ 0/1:229,35:180:-78.22,-54.22,-636.76:99
-chr1 815845 . C G 0.13 PASS AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=5.72;MQ=49.45;MQ0=9;OQ=487.79;QD=4.69;SB=-262.79 GT:AD:DP:GL:GQ 0/1:68,36:85:-77.68,-25.61,-285.79:99
-chr1 815857 . T A 21.33 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=5.01;MQ=54.04;MQ0=5;QD=0.23;SB=16.48 GT:AD:DP:GL:GQ 0/1:77,14:82:-30.11,-24.70,-281.02:54.14
-chr1 815931 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=2;HaplotypeScore=25.80;MQ=41.76;MQ0=34;OQ=413.34;QD=2.70;SB=-90.95 GT:AD:DP:GL:GQ 0/1:89,64:100:-74.74,-30.13,-291.31:99
-chr1 815936 . T G 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=41.51;MQ0=35;OQ=307.08;QD=1.93;SB=-87.61 GT:AD:DP:GL:GQ 0/1:91,68:101:-64.41,-30.42,-308.26:99
-chr1 815949 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=1;HaplotypeScore=25.06;MQ=39.71;MQ0=34;OQ=456.33;QD=2.82;SB=-102.31 GT:AD:DP:GL:GQ 0/1:134,28:100:-79.04,-30.12,-319.08:99
-chr1 815979 . A G 1177.05 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=1;HaplotypeScore=140.50;MQ=42.13;MQ0=3;QD=7.18;SB=-203.16 GT:AD:DP:GL:GQ 0/1:88,76:129:-159.86,-38.87,-326.00:99
-chr1 815980 . T C 32.10 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=144.97;MQ=42.03;MQ0=3;QD=0.19;SB=-40.00 GT:AD:DP:GL:GQ 0/1:145,23:122:-43.25,-36.76,-439.68:64.94
-chr1 815986 . A G 296.02 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=2;HaplotypeScore=92.41;MQ=40.86;MQ0=3;QD=1.64;SB=-47.33 GT:AD:DP:GL:GQ 0/1:153,28:121:-69.34,-36.45,-404.50:99
-chr1 816000 . G A 125.95 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=173;Dels=0.00;HRun=1;HaplotypeScore=82.29;MQ=39.25;MQ0=3;QD=0.73;SB=53.66 GT:AD:DP:GL:GQ 0/1:159,14:109:-48.71,-32.83,-348.18:99
-chr1 816001 . G A 216.96 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=171;Dels=0.00;HRun=0;HaplotypeScore=91.06;MQ=39.38;MQ0=3;QD=1.27;SB=50.65 GT:AD:DP:GL:GQ 0/1:127,38:117:-81.21,-56.23,-367.68:99
-chr1 816004 . G A 219.09 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=92.89;MQ=39.19;MQ0=0;QD=1.27;SB=56.64 GT:AD:DP:GL:GQ 0/1:125,47:119:-61.04,-35.85,-362.44:99
-chr1 816007 . G A 88.79 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=173;Dels=0.02;HRun=1;HaplotypeScore=88.30;MQ=38.80;MQ0=0;QD=0.51;SB=95.33 GT:AD:DP:GL:GQ 0/1:131,39:117:-47.40,-35.24,-375.36:99
-chr1 816018 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=1;HaplotypeScore=112.53;MQ=36.89;MQ0=0;OQ=274.62;QD=1.40;SB=-52.14 GT:AD:DP:GL:GQ 0/1:173,23:109:-63.59,-32.85,-401.41:99
-chr1 816026 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=509.63;MQ=37.96;MQ0=0;OQ=1247.86;QD=6.86;SB=56.18 GT:AD:DP:GL:GQ 0/1:108,73:128:-166.63,-38.56,-316.49:99
-chr1 816043 . A G 1178.79 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=281;Dels=0.00;HRun=0;HaplotypeScore=614.45;MQ=34.94;MQ0=1;QD=4.19;SB=56.21 GT:AD:DP:GL:GQ 0/1:198,83:191:-178.71,-57.55,-539.60:99
-chr1 816057 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=287;Dels=0.00;HRun=0;HaplotypeScore=198.13;MQ=34.34;MQ0=4;OQ=1603.81;QD=5.59;SB=62.23 GT:AD:DP:GL:GQ 0/1:144,109:196:-293.22,-129.56,-512.85:99
-chr1 816072 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=0;HaplotypeScore=33.06;MQ=33.48;MQ0=15;OQ=115.32;QD=0.37;SB=71.18 GT:AD:DP:GL:GQ 0/1:282,15:160:-71.44,-56.63,-531.53:99
-chr1 816077 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=299;Dels=0.00;HRun=0;HaplotypeScore=55.33;MQ=33.49;MQ0=15;OQ=4794.59;QD=16.04;SB=68.22 GT:AD:DP:GL:GQ 0/1:81,218:173:-478.46,-52.11,-201.39:99
-chr1 816088 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=278;Dels=0.00;HRun=1;HaplotypeScore=51.57;MQ=34.30;MQ0=16;OQ=4463.53;QD=16.06;SB=62.23 GT:AD:DP:GL:GQ 0/1:58,220:169:-445.35,-50.90,-214.04:99
-chr1 816103 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=237;Dels=0.00;HRun=0;HaplotypeScore=38.99;MQ=36.26;MQ0=16;OQ=1889.47;QD=7.97;SB=68.20 GT:AD:DP:GL:GQ 0/1:61,152:117:-237.42,-45.19,-199.18:99
-chr1 816115 . C T 1441.66 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=202;Dels=0.00;HRun=0;HaplotypeScore=145.73;MQ=37.27;MQ0=15;QD=7.14;SB=68.18 GT:AD:DP:GL:GQ 0/1:132,70:112:-181.22,-33.77,-214.53:99
-chr1 816118 . A T 125.43 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=0;HaplotypeScore=164.12;MQ=38.34;MQ0=15;QD=0.66;SB=77.28 GT:AD:DP:GL:GQ 0/1:145,37:109:-58.41,-42.58,-369.08:99
-chr1 816122 . G C 132.11 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=159.96;MQ=38.91;MQ0=15;QD=0.73;SB=80.30 GT:AD:DP:GL:GQ 0/1:155,27:96:-45.43,-28.94,-364.83:99
-chr1 816123 . A G 766.79 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=157.96;MQ=38.91;MQ0=14;QD=4.28;SB=80.30 GT:AD:DP:GL:GQ 0/1:86,89:106:-121.93,-41.97,-306.67:99
-chr1 816140 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=2;HaplotypeScore=35.96;MQ=45.77;MQ0=9;OQ=496.37;QD=3.82;SB=92.32 GT:AD:DP:GL:GQ 0/1:81,49:95:-81.53,-28.61,-273.48:99
-chr1 817130 rs2879698 C T 1.75 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=7.86;MQ=52.69;MQ0=4;OQ=2390.21;QD=32.30;SB=-1172.34 GT:AD:DP:GL:GQ 1/1:5,69:61:-242.62,-18.38,-0.02:99
-chr1 817140 rs4246498 T C 134.82 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=52.12;MQ0=4;OQ=2043.04;QD=29.61;SB=-1026.82 GT:AD:DP:GL:GQ 1/1:0,69:59:-207.91,-17.78,-0.03:99
-chr1 817186 rs4970386 C T 31.13 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.56;MQ=51.33;MQ0=3;OQ=2194.13;QD=35.39;SB=-970.28 GT:AD:DP:GL:GQ 1/1:3,59:55:-223.01,-16.57,-0.01:99
-chr1 819196 rs9778019 G A 567.53 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.32;MQ0=0;OQ=1941.14;QD=39.62;SB=-968.30 GT:AD:DP:GL:GQ 1/1:0,49:49:-197.71,-14.76,-0.01:99
-chr1 819500 rs4437820 C T 68.03 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=47.44;MQ0=2;OQ=2599.35;QD=37.13;SB=-1006.03 GT:AD:DP:GL:GQ 1/1:0,70:64:-263.53,-19.28,-0.01:99
-chr1 819787 . G A 25.28 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=51.75;MQ0=1;QD=0.29;SB=104.31 GT:AD:DP:GL:GQ 0/1:80,8:75:-28.42,-22.61,-220.79:58.10
-chr1 820044 rs28444699 A G 2.65 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=5.59;MQ=55.18;MQ0=2;OQ=1994.05;QD=28.49;SB=-1022.00 GT:AD:DP:GL:GQ 1/1:9,61:60:-210.82,-18.07,-7.83:99
-chr1 820670 rs6422669 G C 266.94 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=1;OQ=1743.26;QD=40.54;SB=-467.22 GT:AD:DP:GL:GQ 1/1:1,42:42:-177.93,-12.66,-0.02:99
-chr1 821139 rs4024798 C T 0.11 PASS AC=1;AF=0.50;AN=2;DB;DP=239;Dels=0.00;HRun=1;HaplotypeScore=9.98;MQ=39.26;MQ0=24;OQ=434.25;QD=1.82;SB=23.91 GT:AD:DP:GL:GQ 0/1:189,50:167:-97.03,-50.32,-487.12:99
-chr1 821171 rs477080 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=308;Dels=0.00;HRun=0;HaplotypeScore=33.10;MQ=34.56;MQ0=43;OQ=282.37;QD=0.92;SB=137.47 GT:AD:DP:GL:GQ 0/1:233,75:190:-88.75,-57.23,-688.44:99
-chr1 821352 rs4970385 C T 0.69 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=12.93;MQ=49.51;MQ0=5;OQ=2978.23;QD=32.02;SB=-1308.26 GT:AD:DP:GL:GQ 1/1:14,79:78:-308.32,-23.50,-6.91:99
-chr1 821772 rs9697642 C T 1.09 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=6.48;MQ=53.07;MQ0=1;OQ=2639.96;QD=38.26;SB=-935.74 GT:AD:DP:GL:GQ 1/1:1,68:65:-267.59,-19.58,-0.01:99
-chr1 821923 rs9697378 G A 628.11 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.85;MQ0=2;OQ=2615.06;QD=34.87;SB=-1164.40 GT:AD:DP:GL:GQ 1/1:9,66:67:-268.90,-20.18,-3.81:99
-chr1 821929 rs9697380 G C 204.81 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=46.00;MQ0=2;OQ=2952.34;QD=37.85;SB=-1375.91 GT:AD:DP:GL:GQ 1/1:9,69:70:-303.53,-21.09,-4.71:99
-chr1 821975 rs9697725 T C 60.31 PASS AC=2;AF=1.00;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=42.31;MQ0=7;OQ=2446.13;QD=25.75;SB=-880.44 GT:AD:DP:GL:GQ 1/1:20,75:74:-256.35,-22.29,-8.15:99
-chr1 822041 rs13302934 A G 54.22 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=37.41;MQ0=11;OQ=2291.03;QD=26.64;SB=-1047.92 GT:AD:DP:GL:GQ 1/1:17,69:67:-236.77,-20.18,-4.08:99
-chr1 822181 rs4500250 C A 165.39 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.49;MQ0=0;OQ=2287.58;QD=33.15;SB=-1055.56 GT:AD:DP:GL:GQ 1/1:2,67:63:-232.36,-18.97,-0.02:99
-chr1 822261 rs4553118 T C 105.61 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=53.16;MQ0=0;OQ=2074.16;QD=32.41;SB=-1031.91 GT:AD:DP:GL:GQ 1/1:0,64:58:-211.02,-17.47,-0.02:99
-chr1 827077 . G C 11.08 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1103.43;QD=20.06;SB=-557.74 GT:AD:DP:GL:GQ 0/1:23,32:50:-128.70,-15.07,-86.51:99
-chr1 832688 rs7519340 A G 206.11 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.92;MQ0=0;OQ=2256.38;QD=34.19;SB=-897.99 GT:AD:DP:GL:GQ 1/1:0,66:64:-229.25,-19.28,-0.02:99
-chr1 833268 rs11516185 A G 180.02 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.49;MQ=58.03;MQ0=0;OQ=720.81;QD=12.65;SB=-270.98 GT:AD:DP:GL:GQ 0/1:24,33:50:-90.45,-15.09,-82.68:99
-chr1 834163 rs61769713 C G 7.44 PASS AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=34.66;MQ0=0;OQ=386.18;QD=32.18;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,12:11:-42.22,-3.32,-0.01:33.11
-chr1 834187 rs61769714 G A 6.81 PASS AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=34.17;MQ0=0;OQ=258.44;QD=25.84;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:8:-29.44,-2.42,-0.01:24.06
-chr1 834206 rs61769715 A G 21 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=32.88;MQ0=0;OQ=98.47;QD=14.07;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:4:-13.38,-1.21,-0.00:12.03
-chr1 834961 . T G 0.56 PASS AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=16.23;MQ0=3;OQ=70.14;QD=6.38;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,10:3:-10.50,-0.90,-0.00:9.03
-chr1 835146 rs7366404 G T 7.38 PASS AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=37.00;MQ0=0;OQ=260.28;QD=32.54;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:8:-29.61,-2.41,-0.00:24.08
-chr1 836201 rs4970334 A G 56.75 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=57.95;MQ0=0;OQ=1280.53;QD=26.68;SB=-522.83 GT:AD:DP:GL:GQ 1/1:0,47:43:-131.69,-12.98,-0.05:99
-chr1 836352 rs4970333 T C 54.39 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=58.58;MQ0=0;OQ=1607.31;QD=32.80;SB=-789.15 GT:AD:DP:GL:GQ 1/1:0,49:46:-164.33,-13.86,-0.02:99
-chr1 837113 rs7416129 G A 502.58 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=3431.98;QD=39.91;SB=-1125.99 GT:AD:DP:GL:GQ 1/1:0,85:84:-342.20,-25.31,-0.02:99
-chr1 839861 rs13303222 A G 170.66 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.09;MQ0=0;OQ=2748.15;QD=33.51;SB=-1203.79 GT:AD:DP:GL:GQ 1/1:0,81:78:-278.43,-23.50,-0.03:99
-chr1 840081 rs6664536 T A 113.50 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=58.64;MQ0=0;OQ=1837.58;QD=35.34;SB=-814.88 GT:AD:DP:GL:GQ 1/1:0,52:50:-187.36,-15.06,-0.02:99
-chr1 840234 rs6679046 G T 614.25 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.48;MQ0=0;OQ=2550.23;QD=33.56;SB=-1032.51 GT:AD:DP:GL:GQ 1/1:0,76:73:-258.64,-22.00,-0.04:99
-chr1 840643 rs6657440 C T 589.62 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2334.22;QD=36.47;SB=-836.99 GT:AD:DP:GL:GQ 1/1:0,64:61:-237.03,-18.38,-0.02:99
-chr1 841253 . G T 87.70 PASS AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=59.70;MQ0=0;OQ=1174.44;QD=15.25;SB=-547.82 GT:AD:DP:GL:GQ 0/1:37,40:75:-143.32,-22.59,-125.03:99
-chr1 841362 rs4970465 A G 15.40 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=2.07;MQ=60.00;MQ0=0;OQ=1972.18;QD=30.34;SB=-856.55 GT:AD:DP:GL:GQ 1/1:0,65:61:-200.85,-18.39,-0.05:99
-chr1 841500 . G C 11.73 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=3;HaplotypeScore=11.47;MQ=56.60;MQ0=0;QD=0.26;SB=59.23 GT:AD:DP:GL:GQ 0/1:36,10:33:-14.38,-9.96,-126.72:44.27
-chr1 841620 rs62677860 A G 51.10 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=1201.63;QD=27.31;SB=-317.48 GT:AD:DP:GL:GQ 1/1:0,43:38:-123.78,-11.46,-0.03:99
-chr1 841900 rs4970463 G A 437.16 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=1176.31;QD=36.76;SB=-508.18 GT:AD:DP:GL:GQ 1/1:0,32:31:-121.23,-9.34,-0.01:93.29
-chr1 841926 rs28436996 G A 99.38 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=58.05;MQ0=0;OQ=1247.42;QD=34.65;SB=-580.28 GT:AD:DP:GL:GQ 1/1:0,35:33:-128.34,-9.94,-0.01:99
-chr1 841996 rs7518702 C T 517.92 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1573.23;QD=37.46;SB=-692.34 GT:AD:DP:GL:GQ 1/1:0,41:40:-160.92,-12.05,-0.01:99
-chr1 842738 rs13303369 C T 76.16 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.63;MQ=58.47;MQ0=0;OQ=2145.17;QD=36.99;SB=-908.72 GT:AD:DP:GL:GQ 1/1:0,58:57:-218.13,-17.18,-0.03:99
-chr1 842827 rs4970461 T G 8.55 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.36;MQ=59.03;MQ0=0;OQ=1414.13;QD=29.46;SB=-684.25 GT:AD:DP:GL:GQ 1/1:0,48:47:-145.05,-14.17,-0.05:99
-chr1 843817 rs1806509 C A 190.21 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.61;MQ0=0;OQ=1993.99;QD=33.80;SB=-878.64 GT:AD:DP:GL:GQ 1/1:0,59:57:-203.01,-17.17,-0.02:99
-chr1 844640 rs13303019 A G 51.99 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.20;MQ0=0;OQ=644.86;QD=22.24;SB=-345.42 GT:AD:DP:GL:GQ 1/1:0,29:23:-68.11,-6.95,-0.04:69.10
-chr1 844841 rs13303057 A C 5.18 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=58.36;MQ0=0;OQ=1059.33;QD=26.48;SB=-412.87 GT:AD:DP:GL:GQ 1/1:0,40:35:-109.55,-10.55,-0.04:99
-chr1 844938 rs6673914 C G 24.53 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.27;MQ0=0;OQ=1048.92;QD=37.46;SB=-371.18 GT:AD:DP:GL:GQ 1/1:0,28:26:-108.49,-7.84,-0.02:78.26
-chr1 847591 rs6689107 T G 181.31 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.19;MQ0=0;OQ=1848.72;QD=32.43;SB=-803.49 GT:AD:DP:GL:GQ 1/1:0,57:54:-188.48,-16.27,-0.02:99
-chr1 848664 rs7418179 A G 160.64 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=1692.05;QD=34.53;SB=-783.00 GT:AD:DP:GL:GQ 1/1:0,49:48:-172.81,-14.46,-0.02:99
-chr1 850279 rs61464428 G A 12.90 PASS AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.66;MQ0=0;OQ=337.99;QD=33.80;SB=-134.01 GT:AD:DP:GL:GQ 1/1:0,10:10:-37.39,-3.02,-0.01:30.09
-chr1 850324 rs57465118 G A 8.27 PASS AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=54.65;MQ0=0;OQ=218.19;QD=24.24;SB=-48.67 GT:AD:DP:GL:GQ 1/1:0,9:7:-25.40,-2.11,-0.00:21.06
-chr1 850384 rs57924093 C A 117.02 PASS AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.88;MQ0=0;OQ=151.15;QD=25.19;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:5:-18.67,-1.51,-0.00:15.05
-chr1 850551 rs60837925 G A 175.87 PASS AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=188.60;QD=31.43;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,6:6:-22.43,-1.81,-0.00:18.06
-chr1 850660 . G T 32.80 LowQual AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=65.19;MQ0=0;QD=16.40;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-6.69,-0.60,-0.00:6.02
-chr1 850717 rs57816555 T C 168.04 PASS AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.96;MQ0=0;OQ=139.82;QD=27.96;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:5:-17.54,-1.51,-0.00:15.04
-chr1 850871 rs28521172 G C 136.83 PASS AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=409.27;QD=34.11;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,12:11:-44.52,-3.32,-0.00:33.11
-chr1 851493 rs2879816 G A 181.32 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=58.51;MQ0=0;OQ=1761.97;QD=35.24;SB=-837.99 GT:AD:DP:GL:GQ 1/1:0,50:46:-179.80,-13.86,-0.02:99
-chr1 851671 rs13302982 A G 540.86 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.19;MQ0=0;OQ=1746.20;QD=30.64;SB=-800.68 GT:AD:DP:GL:GQ 1/1:0,57:56:-178.25,-16.89,-0.05:99
-chr1 851956 rs13303291 T C 0.63 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=5;HaplotypeScore=0.79;MQ=59.54;MQ0=0;OQ=1647.69;QD=32.95;SB=-763.57 GT:AD:DP:GL:GQ 1/1:0,50:48:-168.38,-14.46,-0.02:99
-chr1 851987 rs13303101 A G 75.91 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=58.42;MQ0=0;OQ=1718.71;QD=29.13;SB=-814.55 GT:AD:DP:GL:GQ 1/1:0,59:55:-175.51,-16.59,-0.06:99
-chr1 852246 rs6680268 C T 87.18 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.89;MQ0=0;OQ=1535.86;QD=36.57;SB=-649.38 GT:AD:DP:GL:GQ 1/1:0,42:40:-157.19,-12.05,-0.02:99
-chr1 852252 rs6693546 A G 8.74 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=57.97;MQ0=0;OQ=1460.23;QD=31.74;SB=-743.12 GT:AD:DP:GL:GQ 1/1:0,45:42:-149.63,-12.66,-0.02:99
-chr1 852729 rs3892970 C T 119.55 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=1397.63;QD=34.09;SB=-551.29 GT:AD:DP:GL:GQ 1/1:0,41:38:-143.37,-11.46,-0.02:99
-chr1 852987 rs4040604 G T 33.76 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=59.28;MQ0=0;OQ=1900.46;QD=32.77;SB=-758.90 GT:AD:DP:GL:GQ 1/1:0,58:55:-193.66,-16.57,-0.02:99
-chr1 853374 rs28626846 T C 176.60 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=56.72;MQ0=0;OQ=383.16;QD=9.12;SB=-198.44 GT:AD:DP:GL:GQ 0/1:24,18:39:-53.37,-11.77,-80.00:99
-chr1 853419 rs7410998 G A 181.10 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=49.05;MQ0=1;OQ=787.22;QD=31.49;SB=-167.67 GT:AD:DP:GL:GQ 1/1:1,24:21:-82.31,-6.33,-0.01:63.20
-chr1 853425 rs7417972 A C 3.94 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=51.24;MQ0=1;OQ=853.26;QD=25.86;SB=-413.26 GT:AD:DP:GL:GQ 1/1:1,32:29:-88.94,-8.74,-0.03:87.12
-chr1 853552 rs7417994 A G 58.67 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=47.89;MQ0=0;OQ=1045.12;QD=27.50;SB=-347.41 GT:AD:DP:GL:GQ 1/1:0,38:34:-108.13,-10.26,-0.03:99
-chr1 854589 rs2340590 T A 319.49 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.35;MQ0=0;OQ=1082.41;QD=34.92;SB=-267.73 GT:AD:DP:GL:GQ 1/1:0,31:30:-111.84,-9.04,-0.02:90.27
-chr1 854618 rs2340589 A G 2.04 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1104.04;QD=28.31;SB=-284.44 GT:AD:DP:GL:GQ 1/1:0,39:37:-114.04,-11.17,-0.05:99
-chr1 854620 rs2340588 G A 306.13 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1407.34;QD=36.09;SB=-288.88 GT:AD:DP:GL:GQ 1/1:0,39:36:-144.33,-10.85,-0.01:99
-chr1 854801 . G A 27.13 PASS AC=2;AF=1.00;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.52;MQ0=0;OQ=1814.99;QD=37.81;SB=-848.99 GT:AD:DP:GL:GQ 1/1:0,48:46:-185.10,-13.86,-0.01:99
-chr1 856182 rs9988021 G A 414.08 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=1807.60;QD=37.66;SB=-511.65 GT:AD:DP:GL:GQ 1/1:0,48:47:-184.36,-14.16,-0.02:99
-chr1 856756 rs2880024 T C 439.96 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.61;MQ0=0;OQ=1661.89;QD=33.92;SB=-660.32 GT:AD:DP:GL:GQ 1/1:0,49:47:-169.79,-14.16,-0.01:99
-chr1 856783 rs2341361 A G 391.16 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=1555.14;QD=34.56;SB=-535.20 GT:AD:DP:GL:GQ 1/1:0,45:44:-159.12,-13.26,-0.02:99
-chr1 857447 rs2341360 A T 453.14 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1951.43;QD=37.53;SB=-755.79 GT:AD:DP:GL:GQ 1/1:0,51:51:-198.74,-15.36,-0.01:99
-chr1 858192 rs2341359 A C 117.47 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=55.20;MQ0=0;OQ=1194.83;QD=30.64;SB=-603.64 GT:AD:DP:GL:GQ 1/1:0,39:36:-123.08,-10.85,-0.02:99
-chr1 858267 rs13302914 C T 413.34 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.75;MQ0=0;OQ=1181.60;QD=33.76;SB=-589.79 GT:AD:DP:GL:GQ 1/1:0,35:32:-121.76,-9.65,-0.02:96.30
-chr1 858654 rs13303003 C T 431.96 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=892.14;QD=35.69;SB=-459.35 GT:AD:DP:GL:GQ 1/1:1,24:23:-92.80,-6.93,-0.01:69.23
-chr1 858754 rs13303066 A G 117.57 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.96;MQ0=0;OQ=1127.68;QD=32.22;SB=-537.22 GT:AD:DP:GL:GQ 1/1:0,35:32:-116.36,-9.64,-0.01:96.29
-chr1 858844 rs13303037 C T 239.71 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.36;MQ0=0;OQ=920.18;QD=35.39;SB=-178.71 GT:AD:DP:GL:GQ 1/1:0,26:25:-95.62,-7.54,-0.02:75.23
-chr1 859186 rs13303207 T C 5.25 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=1.75;MQ=49.46;MQ0=0;OQ=860.62;QD=31.87;SB=-321.13 GT:AD:DP:GL:GQ 1/1:0,27:25:-89.66,-7.53,-0.01:75.22
-chr1 859220 . G T 15.33 LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=44.47;MQ0=0;QD=0.73;SB=-4.00 GT:AD:DP:GL:GQ 0/1:18,3:16:-9.63,-4.82,-45.13:48.04
-chr1 859232 rs13303328 G T 26.22 PASS AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=42.12;MQ0=0;OQ=238.10;QD=15.87;SB=-41.94 GT:AD:DP:GL:GQ 0/1:4,11:12:-30.71,-3.62,-8.58:49.58
-chr1 859236 rs13303330 G C 2.57 PASS AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=42.12;MQ0=0;OQ=289.97;QD=19.33;SB=-45.46 GT:AD:DP:GL:GQ 0/1:4,11:11:-35.60,-3.32,-10.54:72.26
-chr1 859264 rs13303353 G C 17.54 PASS AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=37.87;MQ0=1;OQ=164.66;QD=13.72;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,7:8:-22.16,-2.41,-12.54:99
-chr1 859992 . G C 97.38 PASS AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.96;MQ0=0;OQ=93.52;QD=10.39;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:3:-12.84,-0.90,-0.00:9.03
-chr1 860032 . G T 37.54 PASS AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.43;MQ0=0;OQ=70.96;QD=5.46;SB=-10.00 GT:AD:DP:GL:GQ 1/1:8,5:3:-10.58,-0.90,-0.00:9.03
-chr1 860180 rs28451560 G A 12.62 PASS AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.95;MQ0=0;OQ=73.11;QD=18.28;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,3:3:-10.80,-0.90,-0.00:9.03
-chr1 860766 rs13303094 T C 16.65 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.17;MQ0=0;OQ=826.94;QD=29.53;SB=-125.69 GT:AD:DP:GL:GQ 1/1:0,28:25:-86.29,-7.54,-0.02:75.20
-chr1 861197 rs4072383 G T 400.06 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.63;MQ0=0;OQ=731.30;QD=30.47;SB=-355.85 GT:AD:DP:GL:GQ 1/1:0,24:22:-76.73,-6.63,-0.01:66.18
-chr1 861546 rs4504834 G A 1.38 PASS AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=53.70;MQ0=0;OQ=257.15;QD=25.71;SB=-133.67 GT:AD:DP:GL:GQ 1/1:0,10:8:-29.30,-2.41,-0.01:24.07
-chr1 863421 rs1110052 G T 380.03 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1308.42;QD=32.71;SB=-530.08 GT:AD:DP:GL:GQ 1/1:0,40:39:-134.45,-11.76,-0.03:99
-chr1 865499 . C T 29.46 LowQual AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;QD=4.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,2:5:-7.74,-1.51,-8.99:62.30
-chr1 865506 rs7411115 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=5;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=55.21;MQ0=0;OQ=112.00;QD=22.40;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,4:5:-15.99,-1.51,-3.39:18.84
-chr1 866063 . G C 0.28 PASS AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.80;MQ=60.00;MQ0=0;OQ=689.42;QD=21.54;SB=-257.43 GT:AD:DP:GL:GQ 0/1:12,20:31:-81.58,-9.35,-46.59:99
-chr1 866362 rs4372192 A G 0.01 FDRtranche2.00to10.00 AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=6;HaplotypeScore=0.89;MQ=56.86;MQ0=0;OQ=933.15;QD=29.16;SB=-432.49 GT:AD:DP:GL:GQ 1/1:0,31:29:-96.92,-8.74,-0.02:87.21
-chr1 867578 rs6605066 C G 7.06 PASS AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=93.52;QD=31.17;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:3:-12.84,-0.90,-0.00:9.03
-chr1 867694 rs6672356 T C 3.72 PASS AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=52.96;QD=17.65;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:3:-8.79,-0.91,-0.01:9.01
-chr1 868792 . G C 15.78 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=42;Dels=0.02;HRun=2;HaplotypeScore=22.45;MQ=51.57;MQ0=2;QD=0.38;SB=59.22 GT:AD:DP:GL:GQ 0/1:36,4:34:-14.81,-9.96,-119.24:48.50
-chr1 869539 rs6605067 G A 19.27 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=0.58;MQ=56.16;MQ0=0;OQ=2221.47;QD=39.67;SB=-1054.70 GT:AD:DP:GL:GQ 1/1:0,56:55:-225.74,-16.57,-0.01:99
-chr1 869550 rs2839 T C 133.50 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=56.64;MQ0=0;OQ=2001.68;QD=34.51;SB=-1024.77 GT:AD:DP:GL:GQ 1/1:0,58:57:-203.78,-17.17,-0.02:99
-chr1 870101 rs3748592 A G 495.56 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.39;MQ0=0;OQ=1890.23;QD=34.37;SB=-862.36 GT:AD:DP:GL:GQ 1/1:0,55:54:-192.63,-16.27,-0.02:99
-chr1 871490 rs2272757 G A 6.94 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.19;MQ=57.04;MQ0=0;OQ=1394.54;QD=37.69;SB=-510.64 GT:AD:DP:GL:GQ 1/1:0,37:36:-143.05,-10.85,-0.01:99
-chr1 872666 rs2340582 A G 42.12 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.34;MQ=59.14;MQ0=0;OQ=1872.55;QD=34.68;SB=-917.03 GT:AD:DP:GL:GQ 1/1:0,54:54:-190.86,-16.27,-0.02:99
-chr1 873488 rs4970378 A G 248.98 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=1449.35;QD=35.35;SB=-732.23 GT:AD:DP:GL:GQ 1/1:0,41:41:-148.53,-12.35,-0.01:99
-chr1 873762 . T G 3.38 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=3.82;MQ=57.58;MQ0=0;OQ=623.05;QD=12.98;SB=-319.82 GT:AD:DP:GL:GQ 0/1:24,24:47:-79.75,-14.16,-84.17:99
-chr1 873892 . A C 58.62 SnpCluster AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=53.03;MQ0=0;QD=2.09;SB=-41.91 GT:AD:DP:GL:GQ 0/1:23,5:28:-17.58,-8.43,-82.84:91.46
-chr1 873894 . C T 82.90 SnpCluster AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.03;MQ0=0;QD=2.96;SB=-56.23 GT:AD:DP:GL:GQ 0/1:23,5:28:-20.01,-8.43,-84.10:99
-chr1 873895 . C T 48.24 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=51.20;MQ0=0;QD=1.56;SB=-25.58 GT:AD:DP:GL:GQ 0/1:26,5:28:-16.54,-8.43,-88.26:81.07
-chr1 873901 . T G 115.57 SnpCluster AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.52;MQ0=0;QD=3.50;SB=-81.81 GT:AD:DP:GL:GQ 0/1:26,7:33:-24.78,-9.94,-99.02:99
-chr1 873954 rs7522415 C G 8.33 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.52;MQ=43.40;MQ0=0;OQ=1100.42;QD=22.93;SB=-415.98 GT:AD:DP:GL:GQ 0/1:16,32:45:-126.89,-13.56,-66.90:99
-chr1 873964 rs4970455 A C 1.05 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=3;HaplotypeScore=2.44;MQ=43.46;MQ0=0;OQ=358.55;QD=6.77;SB=-63.88 GT:AD:DP:GL:GQ 0/1:38,15:50:-54.21,-15.07,-122.51:99
-chr1 874630 . G A 13.69 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=47.61;MQ0=0;OQ=1000.31;QD=21.75;SB=-485.51 GT:AD:DP:GL:GQ 0/1:17,29:46:-117.17,-13.86,-57.54:99
-chr1 874678 rs4246503 A G 158.46 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=55.11;MQ0=0;OQ=1771.59;QD=30.03;SB=-814.69 GT:AD:DP:GL:GQ 1/1:0,59:55:-180.79,-16.58,-0.04:99
-chr1 875539 rs4970377 C A 535.35 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.40;MQ0=0;OQ=2636.42;QD=36.12;SB=-1177.36 GT:AD:DP:GL:GQ 1/1:1,72:71:-267.24,-21.38,-0.02:99
-chr1 875552 rs4970452 G A 0.79 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=56.01;MQ0=0;OQ=2730.82;QD=37.93;SB=-1364.34 GT:AD:DP:GL:GQ 1/1:1,71:70:-276.69,-21.09,-0.03:99
-chr1 875562 rs4970376 A G 1.74 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=9.96;MQ=55.41;MQ0=0;OQ=2063.84;QD=30.35;SB=-1045.24 GT:AD:DP:GL:GQ 1/1:1,67:64:-210.02,-19.30,-0.05:99
-chr1 875869 rs4970375 T C 458.99 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.16;MQ0=0;OQ=1904.11;QD=35.26;SB=-492.54 GT:AD:DP:GL:GQ 1/1:0,54:53:-194.01,-15.96,-0.01:99
-chr1 876651 rs10465242 G A 37.22 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=58.78;MQ0=0;OQ=1853.33;QD=37.07;SB=-743.49 GT:AD:DP:GL:GQ 1/1:0,50:47:-188.93,-14.16,-0.01:99
-chr1 876680 rs10465241 C T 139.09 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1420.84;QD=37.39;SB=-598.99 GT:AD:DP:GL:GQ 1/1:0,38:38:-145.68,-11.45,-0.02:99
-chr1 877423 rs3748595 A C 60.20 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.73;MQ0=0;OQ=1913.10;QD=31.88;SB=-946.06 GT:AD:DP:GL:GQ 1/1:0,60:56:-194.92,-16.87,-0.02:99
-chr1 877664 rs3828047 A G 27.25 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.38;MQ0=0;OQ=1254.26;QD=33.90;SB=-513.49 GT:AD:DP:GL:GQ 1/1:0,37:36:-129.02,-10.84,-0.01:99
-chr1 878502 rs3748596 T C 69.46 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=55.26;MQ0=0;OQ=1390.46;QD=33.11;SB=-577.30 GT:AD:DP:GL:GQ 1/1:0,42:41:-142.65,-12.35,-0.02:99
-chr1 878522 rs3748597 T C 420.43 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.43;MQ0=0;OQ=1101.61;QD=31.47;SB=-433.56 GT:AD:DP:GL:GQ 1/1:0,35:33:-113.76,-9.94,-0.02:99
-chr1 879021 rs56262069 G C 15.32 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1649.51;QD=39.27;SB=-490.55 GT:AD:DP:GL:GQ 1/1:0,42:39:-168.56,-11.76,-0.02:99
-chr1 879022 rs13302945 A C 102.46 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1299.59;QD=30.94;SB=-461.34 GT:AD:DP:GL:GQ 1/1:0,42:39:-133.56,-11.75,-0.02:99
-chr1 879501 rs13303206 G C 38.13 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.78;MQ0=0;OQ=1536.75;QD=40.44;SB=-636.90 GT:AD:DP:GL:GQ 1/1:0,38:37:-157.27,-11.15,-0.01:99
-chr1 879576 rs13303051 C A 192.55 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.48;MQ=59.05;MQ0=0;OQ=1663.22;QD=33.94;SB=-850.81 GT:AD:DP:GL:GQ 1/1:1,48:46:-169.92,-13.85,-0.01:99
-chr1 880884 rs13302957 G A 138.98 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=59.32;MQ0=0;OQ=2228.59;QD=40.52;SB=-1097.37 GT:AD:DP:GL:GQ 1/1:0,55:55:-226.45,-16.57,-0.01:99
-chr1 880922 rs13303065 C T 237.80 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2022.89;QD=39.66;SB=-914.68 GT:AD:DP:GL:GQ 1/1:0,51:51:-205.89,-15.36,-0.01:99
-chr1 881808 rs13303106 A G 3.31 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.33;MQ=59.21;MQ0=0;OQ=1343.98;QD=25.36;SB=-644.88 GT:AD:DP:GL:GQ 1/1:0,53:43:-138.03,-12.97,-0.04:99
-chr1 882608 rs13303227 G A 569.43 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2091.00;QD=38.72;SB=-899.68 GT:AD:DP:GL:GQ 1/1:0,54:53:-212.70,-15.97,-0.01:99
-chr1 883143 rs4970371 G A 143.48 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=57.73;MQ0=0;OQ=2249.45;QD=37.49;SB=-940.26 GT:AD:DP:GL:GQ 1/1:0,60:57:-228.55,-17.17,-0.02:99
-chr1 883494 rs6605069 A G 58.53 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=58.62;MQ0=0;OQ=2094.43;QD=32.73;SB=-870.68 GT:AD:DP:GL:GQ 1/1:0,64:60:-213.05,-18.07,-0.02:99
-chr1 883582 rs4970445 G A 189.37 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.14;MQ0=0;OQ=1807.99;QD=33.48;SB=-798.52 GT:AD:DP:GL:GQ 1/1:1,53:49:-184.42,-14.78,-0.04:99
-chr1 884436 rs13303010 G A 1.14 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=58.63;MQ0=0;OQ=585.11;QD=34.42;SB=-52.67 GT:AD:DP:GL:GQ 1/1:0,17:16:-62.10,-4.82,-0.01:48.15
-chr1 885569 rs13303327 G A 161.74 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=61.07;MQ0=0;OQ=743.89;QD=37.19;SB=-245.00 GT:AD:DP:GL:GQ 1/1:0,20:20:-77.98,-6.03,-0.01:60.19
-chr1 887188 rs4970441 G C 2.34 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=753.54;QD=39.66;SB=-289.25 GT:AD:DP:GL:GQ 1/1:0,19:18:-78.95,-5.42,-0.01:54.18
-chr1 887427 rs13303229 T C 257.67 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1210.82;QD=33.63;SB=-286.61 GT:AD:DP:GL:GQ 1/1:0,36:36:-124.69,-10.85,-0.02:99
-chr1 888186 rs6605071 T C 17.61 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=3.35;MQ=58.67;MQ0=0;OQ=1185.73;QD=33.88;SB=-618.22 GT:AD:DP:GL:GQ 1/1:0,35:34:-122.17,-10.24,-0.01:99
-chr1 889791 rs6677386 G C 245.35 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=39.71;MQ0=0;QD=16.36;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:8:-28.14,-2.43,-0.02:24.07
-chr1 889800 . G T 344.36 SnpCluster AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.12;MQ0=0;QD=28.70;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,12:11:-38.03,-3.31,-0.01:33.08
-chr1 889801 . G C 465.29 SnpCluster AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=39.12;MQ0=0;QD=38.77;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,12:11:-50.12,-3.31,-0.00:33.11
-chr1 889805 . G A 501.88 SnpCluster AC=2;AF=1.00;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.71;MQ0=0;QD=33.46;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:14:-53.78,-4.22,-0.01:42.13
-chr1 889852 rs6669071 A C 11.50 PASS AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=44.10;MQ0=0;OQ=318.72;QD=26.56;SB=-44.57 GT:AD:DP:GL:GQ 1/1:0,12:11:-35.46,-3.31,-0.01:33.07
-chr1 889864 rs28754834 G A 283.84 Indel AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=44.79;MQ0=0;QD=31.54;SB=-93.34 GT:AD:DP:GL:GQ 1/1:0,9:8:-31.97,-2.41,-0.00:24.08
-chr1 889872 rs6704181 C G 264.94 Indel AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=42.50;MQ0=0;QD=33.12;SB=-56.93 GT:AD:DP:GL:GQ 1/1:0,8:7:-30.07,-2.11,-0.00:21.07
-chr1 890148 rs4970435 C T 1.99 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=54.37;MQ0=0;OQ=1059.65;QD=35.32;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,29:28:-109.56,-8.43,-0.01:84.27
-chr1 890149 rs4970434 A G 1.27 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=54.37;MQ0=0;OQ=1048.98;QD=34.97;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,30:29:-108.49,-8.74,-0.01:87.27
-chr1 890161 . C G 0.39 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.89;MQ=54.80;MQ0=0;OQ=464.33;QD=12.55;SB=-10.00 GT:AD:DP:GL:GQ 0/1:16,21:31:-59.09,-9.37,-60.44:99
-chr1 890593 rs3935066 G A 1827.67 Indel AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=54.80;MQ0=0;QD=38.08;SB=-380.50 GT:AD:DP:GL:GQ 1/1:0,48:46:-186.37,-13.86,-0.02:99
-chr1 890835 rs9697711 T G 5.70 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.09;MQ=57.77;MQ0=0;OQ=1087.73;QD=27.19;SB=-563.56 GT:AD:DP:GL:GQ 1/1:0,40:34:-112.38,-10.25,-0.03:99
-chr1 890886 rs13303351 T C 4.74 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=56.17;MQ0=0;OQ=1868.96;QD=27.89;SB=-762.95 GT:AD:DP:GL:GQ 1/1:0,67:61:-190.56,-18.41,-0.08:99
-chr1 891422 rs13303160 G A 335.14 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1009.81;QD=38.84;SB=-456.35 GT:AD:DP:GL:GQ 1/1:0,26:26:-104.57,-7.83,-0.01:78.26
-chr1 891470 rs13302996 C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1288.09;QD=33.03;SB=-383.20 GT:AD:DP:GL:GQ 1/1:0,39:34:-132.43,-10.27,-0.04:99
-chr1 891515 rs2879814 A G 4.78 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.80;MQ=59.05;MQ0=0;OQ=1360.05;QD=30.91;SB=-420.15 GT:AD:DP:GL:GQ 1/1:0,44:40:-139.61,-12.06,-0.03:99
-chr1 892627 rs28416780 C G 985.40 Indel AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.73;MQ=60.94;MQ0=0;QD=29.86;SB=-516.60 GT:AD:DP:GL:GQ 1/1:0,33:26:-102.16,-7.86,-0.03:78.25
-chr1 892860 rs7524174 G A 607.69 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2039.21;QD=35.78;SB=-884.69 GT:AD:DP:GL:GQ 1/1:0,57:52:-207.52,-15.67,-0.02:99
-chr1 893108 rs28690976 A G 19.77 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.31;MQ=59.50;MQ0=0;OQ=1221.87;QD=33.02;SB=-508.55 GT:AD:DP:GL:GQ 1/1:0,37:34:-125.78,-10.24,-0.01:99
-chr1 893184 rs6669800 G A 536.30 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1821.94;QD=35.04;SB=-645.66 GT:AD:DP:GL:GQ 1/1:0,52:47:-185.80,-14.16,-0.02:99
-chr1 895023 rs7555426 C T 0.47 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.03;HRun=0;HaplotypeScore=12.36;MQ=55.36;MQ0=0;OQ=2346.52;QD=37.25;SB=-860.64 GT:AD:DP:GL:GQ 1/1:0,60:62:-238.26,-18.08,-0.02:99
-chr1 895028 rs7522959 A G 167.42 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=55.43;MQ0=0;OQ=2120.68;QD=33.14;SB=-824.97 GT:AD:DP:GL:GQ 1/1:0,63:62:-215.68,-18.68,-0.03:99
-chr1 899282 rs28548431 C T 198.63 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.43;MQ0=0;OQ=508.80;QD=15.42;SB=-237.75 GT:AD:DP:GL:GQ 0/1:15,18:31:-63.51,-9.35,-46.57:99
-chr1 899418 rs2340594 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=1231.29;QD=30.03;SB=-602.23 GT:AD:DP:GL:GQ 1/1:0,41:40:-126.75,-12.06,-0.03:99
-chr1 899631 rs2340593 A G 106.26 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1110.83;QD=35.83;SB=-387.48 GT:AD:DP:GL:GQ 1/1:0,31:31:-114.68,-9.34,-0.01:93.28
-chr1 900257 rs28477686 C T 200.51 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=716.99;QD=16.30;SB=-337.87 GT:AD:DP:GL:GQ 0/1:20,24:40:-87.03,-12.05,-62.41:99
-chr1 900301 rs6685581 A G 61.67 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=58.90;MQ0=0;OQ=1025.59;QD=26.99;SB=-469.48 GT:AD:DP:GL:GQ 1/1:0,38:34:-106.18,-10.26,-0.04:99
-chr1 900766 rs4970429 T C 21.40 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=1255.50;QD=27.90;SB=-520.11 GT:AD:DP:GL:GQ 1/1:0,45:41:-129.18,-12.37,-0.04:99
-chr1 901458 rs7417106 A G 62.69 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=56.69;MQ0=0;OQ=1131.68;QD=22.63;SB=-392.29 GT:AD:DP:GL:GQ 1/1:0,48:37:-116.79,-11.16,-0.04:99
-chr1 901912 rs9803103 T C 68.99 PASS AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.16;MQ0=0;OQ=72.78;QD=4.85;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,5:15:-15.08,-4.52,-39.48:99
-chr1 901966 rs9803017 G A 5.21 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=48.89;MQ0=0;OQ=164.19;QD=23.46;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,5:5:-19.98,-1.51,-0.00:15.05
-chr1 903262 . C T 47.02 LowQual AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.12;MQ0=0;QD=23.51;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-8.11,-0.60,-0.00:6.02
-chr1 903752 rs2340596 G A 213.15 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=58.63;MQ0=0;OQ=437.08;QD=12.86;SB=-239.73 GT:AD:DP:GL:GQ 0/1:19,15:34:-57.25,-10.26,-59.16:99
-chr1 904055 rs2340595 G C 462.22 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1540.41;QD=36.68;SB=-743.79 GT:AD:DP:GL:GQ 1/1:0,42:38:-157.65,-11.46,-0.02:99
-chr1 904196 rs13302979 C G 14.38 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=60.00;MQ0=0;OQ=238.96;QD=11.95;SB=-110.33 GT:AD:DP:GL:GQ 0/1:12,8:19:-32.91,-5.73,-43.20:99
-chr1 904715 rs13303368 G C 150.50 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=58.83;MQ0=0;OQ=429.52;QD=11.93;SB=-165.16 GT:AD:DP:GL:GQ 0/1:21,15:34:-56.48,-10.25,-87.94:99
-chr1 904739 rs13302983 T C 1.98 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=3.25;MQ=59.49;MQ0=0;OQ=1146.65;QD=25.48;SB=-382.24 GT:AD:DP:GL:GQ 1/1:0,45:37:-118.29,-11.16,-0.04:99
-chr1 904803 rs13303033 T C 97.04 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=3.63;MQ=59.44;MQ0=0;OQ=505.70;QD=12.33;SB=-138.55 GT:AD:DP:GL:GQ 0/1:20,21:40:-65.92,-12.07,-67.38:99
-chr1 905090 rs13303355 A G 1.94 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=8.34;MQ=56.14;MQ0=0;OQ=1675.03;QD=29.39;SB=-822.95 GT:AD:DP:GL:GQ 1/1:1,56:50:-171.12,-15.07,-0.03:99
-chr1 906412 rs6660139 A G 108.89 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=506.06;QD=14.88;SB=-146.57 GT:AD:DP:GL:GQ 0/1:14,20:33:-63.84,-9.95,-51.10:99
-chr1 906453 rs28566954 G A 282.05 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.36;MQ0=0;OQ=491.61;QD=13.66;SB=-253.24 GT:AD:DP:GL:GQ 0/1:20,16:35:-62.99,-10.55,-63.70:99
-chr1 906697 rs6694632 G A 262.48 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.25;MQ0=0;OQ=424.41;QD=13.69;SB=-233.73 GT:AD:DP:GL:GQ 0/1:16,15:29:-54.46,-8.74,-53.31:99
-chr1 906923 rs6605058 C G 4.01 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.45;MQ0=0;OQ=1718.51;QD=40.92;SB=-739.75 GT:AD:DP:GL:GQ 1/1:0,42:41:-175.45,-12.36,-0.02:99
-chr1 907503 rs41285816 G A 149.42 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.47;MQ0=0;OQ=650.11;QD=15.12;SB=-327.85 GT:AD:DP:GL:GQ 0/1:21,22:41:-80.65,-12.35,-76.53:99
-chr1 908101 rs28552711 C G 269.46 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.03;MQ0=0;OQ=561.89;QD=11.71;SB=-234.09 GT:AD:DP:GL:GQ 0/1:27,21:45:-73.04,-13.57,-111.91:99
-chr1 908247 rs13303118 G T 75.04 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.58;MQ0=0;OQ=378.28;QD=8.60;SB=-112.78 GT:AD:DP:GL:GQ 0/1:27,17:40:-53.17,-12.06,-75.89:99
-chr1 908436 rs2341354 A G 288.04 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.09;MQ0=0;OQ=687.85;QD=13.49;SB=-217.36 GT:AD:DP:GL:GQ 0/1:22,29:47:-86.23,-14.17,-83.30:99
-chr1 908990 rs28469033 T C 203.63 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=58.06;MQ0=0;OQ=712.75;QD=12.29;SB=-242.27 GT:AD:DP:GL:GQ 0/1:29,28:55:-91.13,-16.57,-114.97:99
-chr1 909282 rs6605059 T C 230.41 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=181.71;QD=7.57;SB=-100.01 GT:AD:DP:GL:GQ 0/1:13,11:22:-28.09,-6.63,-51.27:99
-chr1 909352 rs61606412 C T 41.71 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=53.76;MQ0=0;OQ=576.99;QD=16.03;SB=-77.09 GT:AD:DP:GL:GQ 0/1:16,19:32:-70.62,-9.64,-54.85:99
-chr1 909718 . G A 32.42 PASS AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.35;MQ0=0;OQ=82.61;QD=6.35;SB=-28.51 GT:AD:DP:GL:GQ 0/1:9,4:13:-15.46,-3.92,-29.36:99
-chr1 909851 . C T 379.69 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=14.99;MQ=38.66;MQ0=0;QD=8.44;SB=-209.86 GT:AD:DP:GL:GQ 0/1:32,13:38:-52.70,-11.44,-90.66:99
-chr1 909854 . C A 33.53 Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=23.31;MQ=39.61;MQ0=0;QD=0.73;SB=-35.83 GT:AD:DP:GL:GQ 0/1:41,3:18:-18.90,-12.26,-52.66:66.37
-chr1 909858 . T A 34.25 Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=85.24;MQ=39.71;MQ0=0;QD=0.69;SB=-24.32 GT:AD:DP:GL:GQ 0/1:46,4:25:-14.24,-7.53,-79.28:67.09
-chr1 909861 rs2341357 A C 442.96 Indel;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=92.23;MQ=37.93;MQ0=0;QD=9.23;SB=-187.18 GT:AD:DP:GL:GQ 0/1:13,31:32:-70.70,-23.12,-57.83:99
-chr1 909862 . T C 28.94 Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=90.34;MQ=37.54;MQ0=1;QD=0.59;SB=-27.89 GT:AD:DP:GL:GQ 0/1:45,4:23:-13.11,-6.93,-76.03:61.77
-chr1 909865 rs55746336 A C 368.04 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=65.88;MQ=38.28;MQ0=1;QD=7.51;SB=-150.94 GT:AD:DP:GL:GQ 0/1:20,29:28:-48.52,-8.43,-49.13:99
-chr1 910511 rs6677020 T C 126.81 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=58.99;MQ0=0;OQ=1842.74;QD=30.71;SB=-555.07 GT:AD:DP:GL:GQ 1/1:0,60:57:-187.90,-17.18,-0.04:99
-chr1 910596 rs6677131 T C 281.37 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=1029.24;QD=25.10;SB=-459.07 GT:AD:DP:GL:GQ 1/1:0,41:35:-106.55,-10.56,-0.04:99
-chr1 911433 rs6662128 T C 65.09 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=42.74;MQ0=0;OQ=1332.64;QD=27.76;SB=-494.18 GT:AD:DP:GL:GQ 1/1:0,48:43:-136.89,-12.97,-0.04:99
-chr1 911523 rs6703008 C T 253.53 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.87;MQ0=0;OQ=592.10;QD=14.44;SB=-247.55 GT:AD:DP:GL:GQ 0/1:21,20:40:-74.55,-12.06,-68.34:99
-chr1 911579 rs13303278 C A 321.21 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=57.82;MQ0=0;OQ=846.22;QD=16.27;SB=-412.14 GT:AD:DP:GL:GQ 0/1:22,30:49:-102.67,-14.76,-65.25:99
-chr1 911872 rs6693747 G A 247.15 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=57.81;MQ0=0;OQ=692.72;QD=11.94;SB=-247.55 GT:AD:DP:GL:GQ 0/1:34,24:51:-87.93,-15.37,-94.90:99
-chr1 912939 rs6605060 A G 422.47 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1569.95;QD=29.62;SB=-431.82 GT:AD:DP:GL:GQ 1/1:0,53:52:-160.64,-15.69,-0.06:99
-chr1 913322 rs9442609 A G 120.23 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=58.95;MQ0=0;OQ=1780.01;QD=28.25;SB=-752.61 GT:AD:DP:GL:GQ 1/1:0,63:58:-181.64,-17.49,-0.06:99
-chr1 913612 rs9442610 T C 76.57 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.45;MQ0=1;OQ=2496.82;QD=28.70;SB=-1150.17 GT:AD:DP:GL:GQ 1/1:1,86:79:-253.33,-23.82,-0.07:99
-chr1 913974 rs28447224 T A 288.86 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.45;MQ0=0;OQ=731.87;QD=12.20;SB=-322.51 GT:AD:DP:GL:GQ 0/1:33,27:58:-93.94,-17.47,-123.87:99
-chr1 914034 . A T 3.99 PASS AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.53;MQ0=0;OQ=328.12;QD=3.57;SB=-36.46 GT:AD:DP:GL:GQ 0/1:74,18:90:-63.21,-27.12,-275.61:99
-chr1 914043 . A T 0.15 PASS AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=53.25;MQ0=0;OQ=310.60;QD=3.20;SB=-88.90 GT:AD:DP:GL:GQ 0/1:71,26:82:-59.05,-24.71,-248.58:99
-chr1 914057 rs36034299 T A 46.78 PASS AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=52.48;MQ0=0;OQ=1254.45;QD=10.20;SB=-515.06 GT:AD:DP:GL:GQ 0/1:78,44:120:-164.87,-36.14,-292.57:99
-chr1 914062 rs34208189 G T 4.13 PASS AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=1;HaplotypeScore=4.71;MQ=52.50;MQ0=0;OQ=1304.79;QD=10.87;SB=-551.46 GT:AD:DP:GL:GQ 0/1:72,47:118:-172.13,-38.37,-252.01:99
-chr1 914098 rs28489602 G A 178.03 PASS AC=1;AF=0.50;AN=2;DB;DP=123;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=53.92;MQ0=0;OQ=1142.45;QD=9.29;SB=-414.29 GT:AD:DP:GL:GQ 0/1:80,43:115:-152.18,-34.65,-273.57:99
-chr1 914111 . T G 3.17 PASS AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=54.02;MQ0=0;OQ=717.31;QD=5.56;SB=-222.67 GT:AD:DP:GL:GQ 0/1:95,34:128:-113.56,-38.55,-355.41:99
-chr1 914118 rs59424352 T G 15.06 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=131;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=54.89;MQ0=0;QD=0.11;SB=-22.32 GT:AD:DP:GL:GQ 0/1:103,28:116:-39.71,-34.94,-387.42:47.76
-chr1 914126 rs28607403 A T 0.47 PASS AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=56.46;MQ0=0;OQ=177.88;QD=1.41;SB=-25.34 GT:AD:DP:GL:GQ 0/1:106,20:118:-56.62,-35.55,-387.33:99
-chr1 914231 rs35562283 C T 2.83 PASS AC=2;AF=1.00;AN=2;DB;DP=100;Dels=0.00;HRun=2;HaplotypeScore=2.10;MQ=59.39;MQ0=0;OQ=4072.19;QD=40.72;SB=-2034.20 GT:AD:DP:GL:GQ 1/1:0,100:100:-406.22,-30.12,-0.03:99
-chr1 914391 rs34712273 C A 51.10 PASS AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=5.23;MQ=56.94;MQ0=0;OQ=1123.83;QD=11.59;SB=-531.23 GT:AD:DP:GL:GQ 0/1:55,42:95:-144.28,-28.62,-196.31:99
-chr1 914466 rs28422907 T C 454.63 PASS AC=2;AF=1.00;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=3679.99;QD=36.08;SB=-1782.71 GT:AD:DP:GL:GQ 1/1:0,102:101:-367.00,-30.42,-0.03:99
-chr1 914492 rs28622096 A G 82.91 PASS AC=2;AF=1.00;AN=2;DB;DP=92;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=2947.74;QD=32.04;SB=-1451.63 GT:AD:DP:GL:GQ 1/1:0,92:91:-298.43,-27.44,-0.07:99
-chr1 914761 rs6665000 C A 607.33 PASS AC=2;AF=1.00;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3789.11;QD=37.15;SB=-1446.45 GT:AD:DP:GL:GQ 1/1:0,101:101:-377.91,-33.59,-3.42:99
-chr1 915547 rs6605061 T C 196.60 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=57.81;MQ0=0;OQ=1982.79;QD=33.05;SB=-855.97 GT:AD:DP:GL:GQ 1/1:0,60:57:-201.89,-17.17,-0.03:99
-chr1 916214 rs6671243 C T 469.30 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2468.85;QD=39.82;SB=-737.98 GT:AD:DP:GL:GQ 1/1:0,62:61:-250.48,-18.37,-0.01:99
-chr1 916294 rs4970403 A T 304.51 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.55;MQ=59.43;MQ0=0;OQ=2680.54;QD=36.72;SB=-1154.05 GT:AD:DP:GL:GQ 1/1:1,72:71:-271.66,-21.39,-0.02:99
-chr1 916484 rs4970351 A C 485.68 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1740.98;QD=35.53;SB=-550.05 GT:AD:DP:GL:GQ 1/1:0,49:49:-177.70,-14.76,-0.01:99
-chr1 917172 rs2341362 T C 555.17 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1855.09;QD=30.92;SB=-890.64 GT:AD:DP:GL:GQ 1/1:0,60:59:-189.15,-17.80,-0.06:99
-chr1 917604 rs6665587 G A 343.04 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=746.63;QD=16.23;SB=-250.74 GT:AD:DP:GL:GQ 0/1:23,23:45:-91.50,-13.55,-86.19:99
-chr1 918279 . G A 19.72 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=64.12;MQ0=0;OQ=347.49;QD=8.91;SB=-127.57 GT:AD:DP:GL:GQ 0/1:25,14:32:-47.68,-9.65,-62.78:99
-chr1 918383 rs35002855 A G 36.80 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.30;MQ0=0;OQ=923.20;QD=27.98;SB=-310.47 GT:AD:DP:GL:GQ 1/1:0,33:30:-95.93,-9.05,-0.03:90.20
-chr1 918441 rs28394749 G A 367.26 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=1345.86;QD=38.45;SB=-480.97 GT:AD:DP:GL:GQ 1/1:0,35:35:-138.18,-10.55,-0.01:99
-chr1 918699 rs9777703 C T 463.81 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.88;MQ0=0;OQ=1525.43;QD=38.14;SB=-621.02 GT:AD:DP:GL:GQ 1/1:0,40:39:-156.14,-11.75,-0.01:99
-chr1 919053 rs9777939 A G 223.28 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1351.32;QD=33.78;SB=-678.95 GT:AD:DP:GL:GQ 1/1:0,40:38:-138.73,-11.45,-0.01:99
-chr1 919179 rs9777893 C T 85.58 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=55.86;MQ0=0;OQ=1631.07;QD=35.46;SB=-540.88 GT:AD:DP:GL:GQ 1/1:0,46:44:-166.72,-13.27,-0.03:99
-chr1 919184 rs13302916 A C 0.11 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=5;HaplotypeScore=2.13;MQ=54.60;MQ0=0;OQ=1536.74;QD=31.36;SB=-480.03 GT:AD:DP:GL:GQ 1/1:0,49:45:-157.28,-13.56,-0.02:99
-chr1 919190 rs13302924 A G 46.51 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=54.92;MQ0=0;OQ=1263.79;QD=24.30;SB=-518.21 GT:AD:DP:GL:GQ 1/1:0,52:42:-130.02,-12.68,-0.06:99
-chr1 919921 . C A 110.32 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=58.99;MQ0=0;OQ=1041.89;QD=15.10;SB=-490.89 GT:AD:DP:GL:GQ 0/1:34,35:65:-127.06,-19.58,-99.23:99
-chr1 920192 rs3128108 C T 194.44 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.69;MQ0=0;OQ=711.37;QD=14.23;SB=-187.15 GT:AD:DP:GL:GQ 0/1:24,26:47:-88.59,-14.17,-77.59:99
-chr1 920240 rs3128109 C T 215.53 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.70;MQ0=0;OQ=1131.05;QD=17.95;SB=-367.88 GT:AD:DP:GL:GQ 0/1:29,34:63:-135.38,-18.99,-92.17:99
-chr1 920396 rs3128110 C G 210.15 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=58.26;MQ0=0;OQ=1157.59;QD=14.84;SB=-599.54 GT:AD:DP:GL:GQ 0/1:41,37:77:-142.27,-23.22,-177.91:99
-chr1 920430 rs3121574 A G 364.31 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.06;MQ0=0;OQ=652.89;QD=9.60;SB=-349.53 GT:AD:DP:GL:GQ 0/1:41,27:65:-88.16,-19.59,-156.95:99
-chr1 920614 rs3128111 C G 139.72 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=58.99;MQ0=0;OQ=1461.73;QD=21.18;SB=-736.36 GT:AD:DP:GL:GQ 0/1:28,41:68:-169.95,-20.49,-124.60:99
-chr1 920786 rs2710882 A G 12.29 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.97;MQ=49.62;MQ0=0;OQ=1291.93;QD=28.71;SB=-670.84 GT:AD:DP:GL:GQ 1/1:0,45:41:-132.82,-12.37,-0.04:99
-chr1 920877 rs2710881 A G 324.40 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=0;OQ=966.43;QD=26.85;SB=-364.34 GT:AD:DP:GL:GQ 1/1:0,36:31:-100.25,-9.35,-0.03:93.22
-chr1 921029 rs2710880 A G 58.88 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.24;MQ=56.56;MQ0=0;OQ=562.50;QD=14.06;SB=-270.38 GT:AD:DP:GL:GQ 0/1:15,25:36:-70.39,-10.85,-55.63:99
-chr1 921225 rs2799060 G A 150.73 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.04;MQ=54.08;MQ0=0;OQ=614.91;QD=17.08;SB=-332.87 GT:AD:DP:GL:GQ 0/1:15,21:29:-73.51,-8.74,-35.50:99
-chr1 921371 rs2799061 T A 126.55 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=52.82;MQ0=0;OQ=1479.30;QD=33.62;SB=-589.54 GT:AD:DP:GL:GQ 1/1:0,44:41:-151.53,-12.35,-0.02:99
-chr1 921411 rs2799062 G T 122.68 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=53.36;MQ0=0;OQ=738.91;QD=16.06;SB=-235.96 GT:AD:DP:GL:GQ 0/1:19,27:43:-90.13,-12.95,-62.40:99
-chr1 921593 rs2005437 A G 3.88 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=3.71;MQ=50.61;MQ0=0;OQ=1146.23;QD=32.75;SB=-497.46 GT:AD:DP:GL:GQ 1/1:0,35:33:-118.22,-9.94,-0.01:99
-chr1 921666 rs1891908 C T 2.08 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.85;MQ=32.06;MQ0=2;OQ=160.89;QD=4.35;SB=-6.43 GT:AD:DP:GL:GQ 0/1:19,17:19:-25.09,-5.72,-45.39:99
-chr1 921743 rs2710878 G A 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=13.34;MQ=30.42;MQ0=11;OQ=92.22;QD=1.77;SB=38.12 GT:AD:DP:GL:GQ 0/1:43,9:31:-21.85,-9.35,-87.56:99
-chr1 921798 rs59581901 T C 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=13.36;MQ=44.02;MQ0=2;OQ=265.71;QD=4.66;SB=-27.22 GT:AD:DP:GL:GQ 0/1:37,20:42:-42.52,-12.66,-114.67:99
-chr1 921802 rs13303155 G A 0.11 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=12.88;MQ=43.29;MQ0=2;OQ=165.28;QD=2.85;SB=-96.56 GT:AD:DP:GL:GQ 0/1:44,13:47:-33.98,-14.17,-116.58:99
-chr1 921917 rs13302969 G T 74.55 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.19;MQ=21.41;MQ0=5;OQ=283.37;QD=8.86;SB=-65.73 GT:AD:DP:GL:GQ 0/1:6,26:13:-35.54,-3.92,-11.08:71.59
-chr1 921950 rs4350142 T G 3.51 PASS AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=16.76;MQ0=5;OQ=77.67;QD=4.32;SB=-39.55 GT:AD:DP:GL:GQ 0/1:13,5:9:-13.76,-2.71,-16.22:99
-chr1 922320 rs1891910 G A 55.08 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=54.96;MQ0=0;OQ=908.58;QD=18.93;SB=-365.40 GT:AD:DP:GL:GQ 0/1:20,28:47:-108.30,-14.16,-73.49:99
-chr1 922481 rs3128112 C G 140.23 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.00;MQ0=0;OQ=2826.91;QD=42.19;SB=-1373.36 GT:AD:DP:GL:GQ 1/1:0,67:66:-286.30,-19.89,-0.02:99
-chr1 923653 rs9442392 G A 34.86 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.66;MQ0=0;OQ=346.01;QD=17.30;SB=-99.62 GT:AD:DP:GL:GQ 0/1:8,12:18:-43.31,-5.43,-22.69:99
-chr1 923962 rs2710867 G C 179.76 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.52;MQ0=0;OQ=491.87;QD=30.74;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,16:14:-52.79,-4.24,-0.02:42.13
-chr1 923969 rs2799063 A G 177.71 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.52;MQ0=0;OQ=467.35;QD=31.16;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:15:-50.33,-4.52,-0.01:45.12
-chr1 923984 rs2488989 G A 4.47 PASS AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=52.45;MQ0=0;OQ=54.72;QD=4.21;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,4:12:-12.37,-3.61,-31.32:87.56
-chr1 924007 rs9697551 C G 2.08 PASS AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=52.65;MQ0=0;OQ=378.82;QD=37.88;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,10:10:-41.47,-3.01,-0.00:30.10
-chr1 925085 rs2298214 C A 41.67 PASS AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=126.82;QD=15.85;SB=-10.00 GT:AD:DP:GL:GQ 0/1:3,5:8:-18.37,-2.41,-10.50:80.94
-chr1 925696 rs3128115 C G 0.04 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=341.24;QD=28.44;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,12:10:-37.72,-3.03,-0.02:30.09
-chr1 925974 rs1936360 C T 39.87 PASS AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=58.35;MQ0=0;OQ=214.61;QD=12.62;SB=-42.53 GT:AD:DP:GL:GQ 0/1:9,8:14:-28.97,-4.22,-22.12:99
-chr1 926057 rs3121570 A G 2.88 PASS AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=311.77;QD=28.34;SB=-100.02 GT:AD:DP:GL:GQ 1/1:0,11:11:-34.77,-3.32,-0.01:33.06
-chr1 926073 rs3121569 C A 189.59 PASS AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=295.10;QD=26.83;SB=-77.88 GT:AD:DP:GL:GQ 1/1:0,11:10:-33.10,-3.01,-0.01:30.07
-chr1 927551 rs2489000 T C 23.57 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.20;MQ0=0;OQ=869.96;QD=30.00;SB=-383.48 GT:AD:DP:GL:GQ 1/1:0,29:26:-90.60,-7.84,-0.01:78.21
-chr1 927679 . G T 11.95 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=20;HaplotypeScore=4.44;MQ=51.49;MQ0=1;QD=0.30;SB=29.12 GT:AD:DP:GL:GQ 0/1:35,5:33:-14.39,-9.94,-101.16:44.50
-chr1 927979 rs2710869 T G 68.27 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=52.06;MQ0=0;OQ=1400.53;QD=31.83;SB=-711.32 GT:AD:DP:GL:GQ 1/1:0,44:41:-143.66,-12.35,-0.02:99
-chr1 927988 rs2710868 G A 255.30 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.36;MQ0=0;OQ=410.87;QD=10.02;SB=-73.54 GT:AD:DP:GL:GQ 0/1:27,14:38:-55.83,-11.46,-75.32:99
-chr1 928076 rs2799058 A G 513.54 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.12;MQ0=1;OQ=1982.35;QD=34.78;SB=-956.40 GT:AD:DP:GL:GQ 1/1:0,57:56:-201.84,-16.87,-0.02:99
-chr1 929868 rs2799056 A G 83.40 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=60.00;MQ0=0;OQ=292.67;QD=13.30;SB=-94.98 GT:AD:DP:GL:GQ 0/1:10,12:19:-38.28,-5.73,-31.90:99
-chr1 929959 rs4503294 C T 66.68 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=59.48;MQ0=0;OQ=871.55;QD=19.81;SB=-434.84 GT:AD:DP:GL:GQ 0/1:17,27:40:-102.50,-12.06,-44.62:99
-chr1 931147 rs3128116 C T 186.46 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=58.74;MQ0=0;OQ=584.87;QD=15.81;SB=-318.85 GT:AD:DP:GL:GQ 0/1:17,20:34:-72.02,-10.25,-50.30:99
-chr1 931197 rs57683598 G A 242.64 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.63;MQ0=0;OQ=443.86;QD=13.05;SB=-202.91 GT:AD:DP:GL:GQ 0/1:19,15:33:-57.62,-9.95,-57.41:99
-chr1 931402 rs9778087 C T 103.12 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.28;MQ=58.18;MQ0=0;OQ=521.73;QD=14.49;SB=-147.61 GT:AD:DP:GL:GQ 0/1:17,19:30:-64.50,-9.04,-41.68:99
-chr1 933113 rs3121568 C T 81.24 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=27.66;MQ0=1;OQ=764.02;QD=34.73;SB=-301.68 GT:AD:DP:GL:GQ 1/1:1,21:20:-79.99,-6.02,-0.00:60.20
-chr1 933331 rs3121567 T C 90.20 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=52.92;MQ0=0;OQ=1930.66;QD=28.39;SB=-605.93 GT:AD:DP:GL:GQ 1/1:0,67:59:-196.69,-17.79,-0.04:99
-chr1 933550 rs2465140 G C 10.53 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=52.98;MQ0=0;OQ=1826.77;QD=24.04;SB=-482.83 GT:AD:DP:GL:GQ 0/1:29,47:76:-208.87,-22.91,-115.72:99
-chr1 933770 rs2488992 C G 622.99 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2496.05;QD=39.00;SB=-1249.63 GT:AD:DP:GL:GQ 1/1:1,63:62:-253.23,-18.70,-0.04:99
-chr1 933831 rs13303313 C T 77.45 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=54.98;MQ0=1;OQ=1022.40;QD=21.30;SB=-421.46 GT:AD:DP:GL:GQ 0/1:17,31:46:-119.39,-13.87,-49.73:99
-chr1 934427 rs3128117 T C 70.90 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.79;MQ=59.48;MQ0=0;OQ=1012.81;QD=12.50;SB=-424.88 GT:AD:DP:GL:GQ 0/1:46,35:81:-128.96,-24.40,-186.84:99
-chr1 934959 rs3135457 C T 611.86 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.45;MQ0=0;OQ=2185.20;QD=35.82;SB=-904.70 GT:AD:DP:GL:GQ 1/1:0,61:55:-222.12,-16.57,-0.02:99
-chr1 934974 rs13303172 C T 140.68 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=58.59;MQ0=0;OQ=2216.02;QD=34.63;SB=-887.19 GT:AD:DP:GL:GQ 1/1:0,63:58:-225.21,-17.48,-0.03:99
-chr1 935337 rs3121566 C T 64.84 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=57.82;MQ0=0;OQ=2650.36;QD=37.33;SB=-1265.29 GT:AD:DP:GL:GQ 1/1:0,71:68:-268.65,-20.49,-0.03:99
-chr1 935475 rs3121565 C T 3.95 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=5.58;MQ=54.82;MQ0=0;OQ=1712.26;QD=33.57;SB=-826.14 GT:AD:DP:GL:GQ 1/1:0,51:46:-174.83,-13.86,-0.02:99
-chr1 935997 rs2341364 T G 377.30 Indel AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=10.97;MQ=57.32;MQ0=2;QD=7.12;SB=-202.78 GT:AD:DP:GL:GQ 0/1:37,16:48:-55.47,-14.46,-118.77:99
-chr1 935998 rs9723307 T G 915.61 Indel AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=11.45;MQ=57.32;MQ0=2;QD=17.28;SB=-353.60 GT:AD:DP:GL:GQ 0/1:21,32:48:-109.30,-14.46,-57.43:99
-chr1 936897 rs2465126 G A 228.15 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.52;MQ0=0;OQ=1823.18;QD=37.98;SB=-798.06 GT:AD:DP:GL:GQ 1/1:0,48:47:-185.92,-14.16,-0.02:99
-chr1 937401 rs2465125 C T 186.23 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.20;MQ0=0;OQ=2163.80;QD=37.31;SB=-987.00 GT:AD:DP:GL:GQ 1/1:0,58:56:-219.99,-16.88,-0.02:99
-chr1 938555 rs2341365 G A 140.11 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.55;MQ0=0;OQ=1650.26;QD=34.38;SB=-693.43 GT:AD:DP:GL:GQ 1/1:0,47:44:-168.63,-13.26,-0.02:99
-chr1 938733 rs4615788 C G 63.76 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=59.05;MQ0=0;OQ=1777.68;QD=37.82;SB=-661.48 GT:AD:DP:GL:GQ 1/1:0,47:45:-181.39,-13.58,-0.03:99
-chr1 938784 rs15842 T C 63.77 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=51.15;MQ0=0;OQ=1180.61;QD=25.67;SB=-593.57 GT:AD:DP:GL:GQ 1/1:0,46:38:-121.68,-11.46,-0.04:99
-chr1 939098 rs2465124 G A 101.68 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.32;MQ0=0;OQ=1385.28;QD=35.52;SB=-635.85 GT:AD:DP:GL:GQ 1/1:0,39:36:-142.13,-10.85,-0.02:99
-chr1 939471 rs1921 G A 210.99 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=59.46;MQ0=0;OQ=818.95;QD=19.05;SB=-428.80 GT:AD:DP:GL:GQ 0/1:17,25:41:-97.53,-12.36,-57.36:99
-chr1 939517 rs8997 A G 93.12 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.52;MQ=58.71;MQ0=0;OQ=1127.57;QD=31.32;SB=-511.18 GT:AD:DP:GL:GQ 1/1:0,36:33:-116.36,-9.94,-0.02:99
-chr1 939788 rs2799070 C T 122.12 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=60.00;MQ0=0;OQ=1513.64;QD=36.92;SB=-701.35 GT:AD:DP:GL:GQ 1/1:0,40:39:-154.96,-11.75,-0.01:99
-chr1 940106 rs1891906 A C 58.36 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.38;MQ0=0;OQ=496.04;QD=13.41;SB=-49.04 GT:AD:DP:GL:GQ 0/1:19,18:37:-64.03,-11.14,-68.15:99
-chr1 940540 rs9331223 T C 228.94 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=58.40;MQ0=0;OQ=564.77;QD=13.45;SB=-287.31 GT:AD:DP:GL:GQ 0/1:17,25:39:-71.52,-11.76,-66.74:99
-chr1 940579 rs2799069 A T 132.14 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=57.66;MQ0=0;OQ=1217.27;QD=32.90;SB=-595.76 GT:AD:DP:GL:GQ 1/1:0,37:34:-125.32,-10.24,-0.01:99
-chr1 941146 rs9442363 C T 200.29 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=29.19;MQ0=1;OQ=502.68;QD=12.89;SB=-262.28 GT:AD:DP:GL:GQ 0/1:16,22:28:-61.99,-8.44,-37.57:99
-chr1 941158 rs9442388 C T 75.76 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.38;MQ=27.92;MQ0=1;OQ=496.98;QD=10.80;SB=-155.64 GT:AD:DP:GL:GQ 0/1:24,22:37:-64.14,-11.16,-65.52:99
-chr1 941185 rs9697362 C T 0.27 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=4;HaplotypeScore=0.96;MQ=26.62;MQ0=0;OQ=1253.78;QD=25.59;SB=-636.34 GT:AD:DP:GL:GQ 1/1:0,49:34:-128.98,-10.25,-0.02:99
-chr1 941193 rs9697717 G A 313.44 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.36;MQ0=0;OQ=1030.78;QD=25.77;SB=-468.62 GT:AD:DP:GL:GQ 1/1:0,40:27:-106.67,-8.14,-0.01:81.26
-chr1 941427 rs2465141 A G 200.39 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.01;MQ=50.56;MQ0=1;OQ=585.65;QD=10.65;SB=-303.21 GT:AD:DP:GL:GQ 0/1:29,26:48:-76.32,-14.47,-98.65:99
-chr1 941491 . A T 28.08 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=45.78;MQ0=3;QD=0.52;SB=41.14 GT:AD:DP:GL:GQ 0/1:46,8:45:-19.65,-13.56,-148.74:60.91
-chr1 941866 rs3128118 G A 182.23 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.48;MQ=58.42;MQ0=1;OQ=769.91;QD=13.27;SB=-278.19 GT:AD:DP:GL:GQ 0/1:30,27:54:-96.56,-16.28,-93.17:99
-chr1 942291 rs9442611 G A 158.27 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=58.27;MQ0=0;OQ=928.32;QD=19.34;SB=-479.01 GT:AD:DP:GL:GQ 0/1:19,29:48:-110.59,-14.48,-59.61:99
-chr1 943087 rs4970390 C T 107.20 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=50.43;MQ0=1;OQ=376.23;QD=6.60;SB=-175.84 GT:AD:DP:GL:GQ 0/1:38,19:49:-55.68,-14.78,-111.95:99
-chr1 943217 rs61766298 G A 33.08 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=54.66;MQ0=1;OQ=355.20;QD=4.80;SB=-58.95 GT:AD:DP:GL:GQ 0/1:57,16:65:-58.41,-19.60,-158.72:99
-chr1 943541 rs2952918 T C 3.09 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=5.78;MQ=53.39;MQ0=0;OQ=348.13;QD=8.70;SB=-186.61 GT:AD:DP:GL:GQ 0/1:24,16:38:-49.55,-11.46,-86.70:99
-chr1 943815 rs9442612 G A 205.15 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=57.73;MQ0=0;OQ=533.79;QD=13.02;SB=-257.75 GT:AD:DP:GL:GQ 0/1:22,19:39:-68.42,-11.76,-70.56:99
-chr1 944640 rs61766299 C A 104.63 PASS AC=1;AF=0.50;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=57.66;MQ0=0;OQ=76.34;QD=7.63;SB=-34.38 GT:AD:DP:GL:GQ 0/1:6,4:9:-13.63,-2.71,-15.11:99
-chr1 946715 rs9777931 C T 99.84 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=313.20;QD=12.05;SB=-129.12 GT:AD:DP:GL:GQ 0/1:14,11:22:-41.23,-6.63,-41.31:99
-chr1 949018 rs3845291 G A 42.15 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=1.63;MQ=59.54;MQ0=0;OQ=843.29;QD=16.87;SB=-349.52 GT:AD:DP:GL:GQ 0/1:23,27:47:-101.78,-14.17,-66.18:99
-chr1 949032 rs3845292 G C 180 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.52;MQ0=0;OQ=777.11;QD=16.19;SB=-360.45 GT:AD:DP:GL:GQ 0/1:22,26:45:-94.57,-13.58,-90.66:99
-chr1 949094 rs4039721 G A 273.59 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.09;MQ0=0;OQ=688.73;QD=16.80;SB=-366.42 GT:AD:DP:GL:GQ 0/1:19,22:36:-83.01,-10.86,-46.17:99
-chr1 950272 rs4970392 G C 3.67 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=3;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=405.25;QD=17.62;SB=-227.38 GT:AD:DP:GL:GQ 0/1:10,13:21:-50.14,-6.33,-36.47:99
-chr1 951690 rs3121556 G A 175.37 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=59.49;MQ0=0;OQ=541.95;QD=12.04;SB=-261.27 GT:AD:DP:GL:GQ 0/1:25,20:39:-69.24,-11.76,-65.32:99
-chr1 952469 rs4970393 G A 53.25 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=4.24;MQ=58.80;MQ0=0;OQ=631.93;QD=18.06;SB=-331.90 GT:AD:DP:GL:GQ 0/1:14,21:33:-76.42,-9.95,-42.13:99
-chr1 952754 rs4970394 C T 113.27 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=59.23;MQ0=0;OQ=488.22;QD=16.27;SB=-210.21 GT:AD:DP:GL:GQ 0/1:14,15:29:-60.84,-8.74,-49.96:99
-chr1 953112 rs2710870 C T 198.18 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.50;MQ=60.00;MQ0=0;OQ=692.82;QD=14.74;SB=-280.19 GT:AD:DP:GL:GQ 0/1:24,23:46:-86.43,-13.86,-83.87:99
-chr1 953580 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=16;HaplotypeScore=1.95;MQ=42.79;MQ0=0;OQ=89.92;QD=8.17;SB=-0.97 GT:AD:DP:GL:GQ 0/1:7,4:8:-14.69,-2.41,-16.44:99
-chr1 953584 rs2465127 T C 0.45 PASS AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=3;HaplotypeScore=3.77;MQ=52.61;MQ0=0;OQ=94.29;QD=7.86;SB=-65.34 GT:AD:DP:GL:GQ 0/1:4,8:9:-15.43,-2.71,-16.16:99
-chr1 954093 . G A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=9.68;MQ=33.26;MQ0=5;OQ=209.72;QD=5.67;SB=-3.99 GT:AD:DP:GL:GQ 0/1:21,12:15:-28.78,-4.52,-24.72:99
-chr1 954161 rs61766303 C G 18.49 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=31.02;MQ0=1;OQ=184.53;QD=5.27;SB=-0.98 GT:AD:DP:GL:GQ 0/1:19,16:16:-26.57,-4.83,-37.31:99
-chr1 954252 rs4970397 C T 103.23 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=32.94;MQ0=3;OQ=204.52;QD=7.57;SB=-35.64 GT:AD:DP:GL:GQ 0/1:17,10:18:-29.16,-5.43,-34.74:99
-chr1 954703 rs4970343 T C 2.35 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=6.47;MQ=58.52;MQ0=0;OQ=457.55;QD=14.30;SB=-98.71 GT:AD:DP:GL:GQ 0/1:14,18:30:-58.08,-9.04,-50.50:99
-chr1 954711 rs4970344 A T 37.45 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.43;MQ0=0;OQ=626.99;QD=19.00;SB=-168.81 GT:AD:DP:GL:GQ 0/1:12,21:33:-75.92,-9.94,-45.13:99
-chr1 954872 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=20.43;MQ=48.78;MQ0=1;OQ=116.04;QD=3.14;SB=-52.28 GT:AD:DP:GL:GQ 0/1:25,12:25:-22.42,-7.54,-71.63:99
-chr1 955038 rs28373660 A G 250.76 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=55.30;MQ0=0;OQ=611.00;QD=13.28;SB=-229.46 GT:AD:DP:GL:GQ 0/1:20,26:39:-76.13,-11.75,-66.91:99
-chr1 955106 . A G 23.39 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=10.05;MQ=39.47;MQ0=7;QD=0.46;SB=-5.58 GT:AD:DP:GL:GQ 0/1:38,13:31:-14.97,-9.35,-98.23:56.21
-chr1 955141 rs28433148 T C 0.11 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.04;HRun=0;HaplotypeScore=16.86;MQ=40.85;MQ0=6;OQ=407.46;QD=7.41;SB=-215.36 GT:AD:DP:GL:GQ 0/1:25,28:41:-56.09,-12.06,-84.28:99
-chr1 955386 rs4970404 A G 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.02;HRun=0;HaplotypeScore=18.83;MQ=42.69;MQ0=11;OQ=218.68;QD=3.58;SB=-113.62 GT:AD:DP:GL:GQ 0/1:39,21:33:-35.11,-9.95,-82.73:99
-chr1 955467 rs4970345 C T 151.03 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=44.49;MQ0=2;OQ=398.93;QD=9.73;SB=-192.19 GT:AD:DP:GL:GQ 0/1:19,21:26:-51.01,-7.84,-42.93:99
-chr1 955802 rs4970398 A T 97.51 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=47.03;MQ0=2;OQ=550.07;QD=10.19;SB=-184.73 GT:AD:DP:GL:GQ 0/1:27,27:47:-72.45,-14.16,-100.00:99
-chr1 955812 rs4970399 A G 52.54 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.02;HRun=0;HaplotypeScore=3.69;MQ=45.58;MQ0=2;OQ=418.21;QD=7.47;SB=-156.96 GT:AD:DP:GL:GQ 0/1:27,28:43:-57.78,-12.67,-88.06:99
-chr1 955927 . T C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.47;MQ=51.74;MQ0=5;OQ=79.40;QD=1.80;SB=-44.68 GT:AD:DP:GL:GQ 0/1:30,14:34:-21.47,-10.25,-106.58:99
-chr1 955942 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=21.62;MQ=50.59;MQ0=7;OQ=96.72;QD=1.97;SB=-71.62 GT:AD:DP:GL:GQ 0/1:29,17:31:-22.31,-9.35,-90.50:99
-chr1 956010 . A G 17.59 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=45.86;MQ0=9;QD=0.35;SB=1.17 GT:AD:DP:GL:GQ 0/1:36,13:34:-15.29,-10.25,-111.87:50.35
-chr1 957521 rs4970349 C T 109.68 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.54;MQ=59.65;MQ0=0;OQ=696.48;QD=12.90;SB=-243.23 GT:AD:DP:GL:GQ 0/1:30,24:51:-88.30,-15.37,-100.68:99
-chr1 960023 . C T 7.39 PASS AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=53.50;MQ0=0;OQ=70.28;QD=5.86;SB=-0.98 GT:AD:DP:GL:GQ 0/1:7,5:10:-13.33,-3.02,-17.80:99
-chr1 960078 rs9442364 G C 190.47 PASS AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=59.38;QD=8.48;SB=-32.42 GT:AD:DP:GL:GQ 0/1:3,4:6:-11.04,-1.82,-11.54:92.22
-chr1 961087 rs2799055 A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=6;HaplotypeScore=0.98;MQ=59.32;MQ0=0;OQ=442.07;QD=13.00;SB=-186.63 GT:AD:DP:GL:GQ 0/1:16,18:32:-57.14,-9.65,-55.82:99
-chr1 961230 rs2710883 T C 342.64 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=662.38;QD=14.09;SB=-345.94 GT:AD:DP:GL:GQ 0/1:23,24:47:-83.68,-14.16,-90.90:99
-chr1 961997 rs3121575 C T 135.78 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=582.22;QD=15.32;SB=-286.19 GT:AD:DP:GL:GQ 0/1:17,20:35:-72.05,-10.55,-56.30:99
-chr1 962043 rs4970350 G A 118.77 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=762.03;QD=19.05;SB=-359.38 GT:AD:DP:GL:GQ 0/1:16,24:38:-90.95,-11.46,-47.96:99
-chr1 963199 rs2488993 A G 276.26 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=691.22;QD=14.71;SB=-269.95 GT:AD:DP:GL:GQ 0/1:22,25:46:-86.26,-13.86,-87.86:99
-chr1 963240 rs2465129 G A 277.94 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.66;MQ=58.44;MQ0=0;OQ=598.48;QD=15.35;SB=-309.81 GT:AD:DP:GL:GQ 0/1:19,20:36:-73.98,-10.85,-56.47:99
-chr1 963321 rs2465130 C T 51.96 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=517.87;QD=11.26;SB=-211.85 GT:AD:DP:GL:GQ 0/1:28,18:43:-68.02,-12.95,-92.79:99
-chr1 963531 rs2488994 A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=4;HaplotypeScore=7.50;MQ=58.37;MQ0=0;OQ=421.46;QD=9.80;SB=-94.66 GT:AD:DP:GL:GQ 0/1:26,17:40:-57.48,-12.05,-93.15:99
-chr1 964043 rs3121577 G T 194.69 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=59.29;MQ0=0;OQ=740.60;QD=11.39;SB=-370.98 GT:AD:DP:GL:GQ 0/1:36,29:64:-96.63,-19.29,-128.48:99
-chr1 964062 rs2465131 C T 262.80 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.28;MQ0=0;OQ=941.69;QD=14.71;SB=-361.86 GT:AD:DP:GL:GQ 0/1:34,30:62:-116.13,-18.68,-116.79:99
-chr1 964088 rs2488995 A G 204.47 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=60.00;MQ0=0;OQ=709.06;QD=12.66;SB=-311.29 GT:AD:DP:GL:GQ 0/1:29,27:55:-90.77,-16.58,-108.13:99
-chr1 964159 rs2488996 A G 168.04 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=59.09;MQ0=0;OQ=732.05;QD=15.91;SB=-365.63 GT:AD:DP:GL:GQ 0/1:18,28:43:-89.45,-12.96,-67.34:99
-chr1 964218 rs2488997 G A 8.67 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.51;MQ=58.80;MQ0=0;OQ=657.04;QD=18.77;SB=-348.46 GT:AD:DP:GL:GQ 0/1:15,20:35:-79.53,-10.55,-53.54:99
-chr1 964219 rs2465132 T C 152.74 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=58.80;MQ0=0;OQ=438.83;QD=12.54;SB=-221.28 GT:AD:DP:GL:GQ 0/1:15,20:33:-57.12,-9.95,-56.00:99
-chr1 964357 rs2465133 G T 31.32 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=5.89;MQ=58.66;MQ0=0;OQ=971.31;QD=14.72;SB=-505.87 GT:AD:DP:GL:GQ 0/1:30,36:62:-119.10,-18.68,-97.98:99
-chr1 964433 rs2465134 T G 140.23 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=2.32;MQ=58.54;MQ0=0;OQ=578.70;QD=12.58;SB=-251.93 GT:AD:DP:GL:GQ 0/1:22,23:38:-72.60,-11.45,-62.23:99
-chr1 964525 rs2465135 G T 124.08 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=58.59;MQ0=0;OQ=621.72;QD=18.84;SB=-320.48 GT:AD:DP:GL:GQ 0/1:13,20:32:-75.10,-9.64,-38.41:99
-chr1 964757 rs3121578 C T 344.84 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.81;MQ0=0;OQ=283.06;QD=10.11;SB=-156.67 GT:AD:DP:GL:GQ 0/1:18,10:26:-39.43,-7.84,-52.76:99
-chr1 964996 rs3121579 T A 109.73 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.40;MQ0=0;OQ=475.63;QD=15.34;SB=-146.82 GT:AD:DP:GL:GQ 0/1:15,16:30:-59.88,-9.04,-53.03:99
-chr1 965565 rs9331224 A G 58.24 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=1.21;MQ=58.67;MQ0=0;OQ=414.04;QD=11.83;SB=-233.27 GT:AD:DP:GL:GQ 0/1:19,16:32:-54.33,-9.64,-64.60:99
-chr1 967066 rs3121552 G C 40.51 LowQual AC=1;AF=0.50;AN=2;DB;DP=5;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=8.10;SB=-43.44 GT:AD:DP:GL:GQ 0/1:3,2:4:-8.54,-1.21,-8.39:71.79
-chr1 967193 rs2799066 T C 15.85 LowQual AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.05;MQ0=0;QD=1.98;SB=-24.63 GT:AD:DP:GL:GQ 0/1:6,2:8:-7.27,-2.41,-22.53:48.57
-chr1 967433 rs2710876 G A 2.15 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=7.34;MQ=57.29;MQ0=0;OQ=207.99;QD=8.00;SB=-101.60 GT:AD:DP:GL:GQ 0/1:14,12:21:-30.42,-6.34,-38.59:99
-chr1 967643 rs2710875 C T 1.07 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=57.25;MQ0=0;OQ=665.34;QD=21.46;SB=-289.34 GT:AD:DP:GL:GQ 0/1:11,20:28:-78.26,-8.44,-23.82:99
-chr1 970323 rs3128097 G A 1.18 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=9.72;MQ=59.47;MQ0=0;OQ=926.21;QD=16.84;SB=-308.84 GT:AD:DP:GL:GQ 0/1:24,31:51:-111.27,-15.36,-80.98:99
-chr1 970950 rs3128098 A G 264.56 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=57.28;MQ0=0;OQ=593.17;QD=14.83;SB=-270.38 GT:AD:DP:GL:GQ 0/1:15,24:36:-73.46,-10.85,-50.98:99
-chr1 971794 rs2465128 A G 68.21 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=60.00;MQ0=0;OQ=206.80;QD=7.66;SB=-83.65 GT:AD:DP:GL:GQ 0/1:13,14:23:-30.90,-6.93,-51.94:99
-chr1 972307 rs3128099 A G 0.33 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=7.82;MQ=57.77;MQ0=0;OQ=622.11;QD=14.81;SB=-282.64 GT:AD:DP:GL:GQ 0/1:15,25:37:-76.65,-11.15,-58.34:99
-chr1 972325 rs3128100 T C 8.29 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=4.33;MQ=57.56;MQ0=0;OQ=1298.64;QD=27.06;SB=-459.21 GT:AD:DP:GL:GQ 1/1:0,48:42:-133.49,-12.67,-0.04:99
-chr1 972376 rs3128101 T C 10.73 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=5.66;MQ=56.76;MQ0=0;OQ=571.56;QD=13.94;SB=-141.55 GT:AD:DP:GL:GQ 0/1:15,25:36:-73.37,-12.93,-53.37:99
-chr1 972804 rs3128102 T C 4.22 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=3.75;MQ=59.50;MQ0=0;OQ=547.08;QD=11.89;SB=-200.60 GT:AD:DP:GL:GQ 0/1:23,23:37:-69.14,-11.15,-71.89:99
-chr1 972857 rs10267 T C 1.79 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.51;MQ=58.63;MQ0=0;OQ=633.32;QD=18.63;SB=-175.96 GT:AD:DP:GL:GQ 0/1:12,21:33:-76.56,-9.94,-48.12:99
-chr1 974010 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=20;HaplotypeScore=11.22;MQ=50.83;MQ0=0;OQ=57.83;QD=3.04;SB=2.03 GT:AD:DP:GL:GQ 0/1:15,4:17:-14.19,-5.12,-41.74:90.67
-chr1 974165 rs9442391 T C 32.20 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=57.07;MQ0=0;OQ=302.47;QD=11.63;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,13:22:-40.16,-6.63,-43.34:99
-chr1 975129 rs2275813 C T 11.79 PASS AC=1;AF=0.50;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.16;MQ0=0;OQ=102.58;QD=20.52;SB=-45.66 GT:AD:DP:GL:GQ 0/1:1,4:5:-15.04,-1.51,-2.70:11.90
-chr1 975309 rs2275812 G T 1.40 PASS AC=1;AF=0.50;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=7.77;MQ=59.16;MQ0=0;OQ=108.56;QD=9.87;SB=-36.92 GT:AD:DP:GL:GQ 0/1:5,6:10:-17.15,-3.01,-16.77:99
-chr1 975312 rs56255212 G A 0.19 PASS AC=1;AF=0.50;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=7.96;MQ=57.00;MQ0=0;OQ=248.84;QD=22.62;SB=-118.97 GT:AD:DP:GL:GQ 0/1:2,9:10:-31.18,-3.01,-6.57:35.54
-chr1 976306 rs2710887 C T 180.42 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=498.86;QD=13.13;SB=-206.20 GT:AD:DP:GL:GQ 0/1:21,17:37:-64.33,-11.16,-66.50:99
-chr1 977063 rs9803031 C T 254.02 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=585.89;QD=18.90;SB=-309.86 GT:AD:DP:GL:GQ 0/1:13,18:30:-70.92,-9.05,-35.55:99
-chr1 977533 rs13303287 T G 495.76 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=796.56;QD=13.73;SB=-424.70 GT:AD:DP:GL:GQ 0/1:25,33:58:-100.42,-17.48,-92.24:99
-chr1 978366 rs2799071 A T 261.84 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=849.34;QD=16.33;SB=-440.60 GT:AD:DP:GL:GQ 0/1:23,29:48:-102.68,-14.47,-71.41:99
-chr1 978795 rs2710871 G C 22.28 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.83;MQ=58.33;MQ0=0;OQ=743.65;QD=17.71;SB=-370.12 GT:AD:DP:GL:GQ 0/1:18,24:36:-88.51,-10.86,-57.89:99
-chr1 980143 rs4275402 C T 40.06 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=58.13;MQ0=0;OQ=896.64;QD=35.87;SB=-438.31 GT:AD:DP:GL:GQ 1/1:0,25:24:-93.26,-7.23,-0.01:72.23
-chr1 980380 rs2710872 C T 78.16 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=549.92;QD=18.33;SB=-189.29 GT:AD:DP:GL:GQ 0/1:12,18:27:-66.42,-8.14,-30.90:99
-chr1 980636 rs2799072 C T 101.12 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=60.00;MQ0=0;OQ=1104.80;QD=20.09;SB=-396.92 GT:AD:DP:GL:GQ 0/1:22,33:54:-130.03,-16.27,-75.12:99
-chr1 980669 rs2799073 G A 136.86 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=60.00;MQ0=0;OQ=1001.06;QD=20.02;SB=-407.16 GT:AD:DP:GL:GQ 0/1:17,32:47:-117.55,-14.17,-57.43:99
-chr1 980847 rs8014 G A 99.13 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=656.29;QD=17.27;SB=-261.26 GT:AD:DP:GL:GQ 0/1:18,20:38:-80.37,-11.45,-56.60:99
-chr1 981587 rs3121562 C T 350.10 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.79;MQ0=0;OQ=354.87;QD=13.14;SB=-164.15 GT:AD:DP:GL:GQ 0/1:12,15:25:-46.32,-7.55,-37.60:99
-chr1 981840 rs4970400 G A 115.33 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=38.45;MQ=54.81;MQ0=0;QD=3.04;SB=-51.02 GT:AD:DP:GL:GQ 0/1:30,8:33:-24.78,-9.96,-81.20:99
-chr1 981844 rs13303259 A G 138.38 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=33.28;MQ=55.32;MQ0=0;QD=3.29;SB=-90.63 GT:AD:DP:GL:GQ 0/1:32,10:37:-28.28,-11.16,-110.43:99
-chr1 981845 rs2710885 T C 325.46 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=29.31;MQ=55.32;MQ0=0;QD=7.75;SB=-95.70 GT:AD:DP:GL:GQ 0/1:24,18:34:-46.08,-10.25,-78.60:99
-chr1 981905 rs3121564 C T 503.25 Indel AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.81;MQ=56.07;MQ0=0;QD=13.24;SB=-230.23 GT:AD:DP:GL:GQ 0/1:19,19:34:-63.86,-10.25,-57.54:99
-chr1 981947 rs2710886 T C 139.57 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.81;MQ=57.30;MQ0=0;OQ=454.51;QD=9.88;SB=-191.43 GT:AD:DP:GL:GQ 0/1:25,21:45:-62.31,-13.57,-94.53:99
-chr1 981957 rs2799074 T C 39.32 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=57.39;MQ0=0;OQ=362.93;QD=6.48;SB=-127.51 GT:AD:DP:GL:GQ 0/1:32,23:44:-52.84,-13.27,-101.58:99
-chr1 982190 rs2245754 C T 115.77 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.93;MQ=56.87;MQ0=0;OQ=667.97;QD=12.60;SB=-322.42 GT:AD:DP:GL:GQ 0/1:29,24:49:-84.84,-14.76,-98.05:99
-chr1 982682 rs9331226 G A 139.28 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=47.23;MQ0=0;OQ=1563.99;QD=20.85;SB=-791.90 GT:AD:DP:GL:GQ 0/1:29,46:74:-181.97,-22.29,-107.08:99
-chr1 983223 rs13303240 C A 201.17 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.32;MQ0=0;OQ=838.66;QD=15.82;SB=-290.67 GT:AD:DP:GL:GQ 0/1:25,28:52:-102.82,-15.67,-74.49:99
-chr1 984254 rs2488991 G T 204.10 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=58.59;MQ0=0;OQ=458.34;QD=13.89;SB=-201.49 GT:AD:DP:GL:GQ 0/1:13,19:30:-58.16,-9.04,-45.43:99
-chr1 985344 rs9442393 T G 429.35 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=599.53;QD=14.99;SB=-298.50 GT:AD:DP:GL:GQ 0/1:18,22:39:-74.98,-11.75,-60.16:99
-chr1 987271 rs28397086 T C 29.44 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.90;MQ0=0;OQ=513.69;QD=32.11;SB=-117.05 GT:AD:DP:GL:GQ 1/1:0,16:15:-54.96,-4.52,-0.01:45.13
-chr1 988258 rs7526076 A G 181.81 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.56;MQ0=0;OQ=852.42;QD=16.08;SB=-332.31 GT:AD:DP:GL:GQ 0/1:24,29:52:-104.19,-15.67,-91.85:99
-chr1 988445 rs3813194 G C 229.28 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.48;MQ0=0;OQ=676.17;QD=16.90;SB=-324.02 GT:AD:DP:GL:GQ 0/1:19,21:38:-82.36,-11.46,-78.97:99
-chr1 990019 rs11584349 C T 5.80 PASS AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=221.74;QD=18.48;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,7:12:-29.08,-3.62,-14.98:99
-chr1 991040 rs4970401 G C 199.01 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1348.36;QD=21.75;SB=-452.37 GT:AD:DP:GL:GQ 0/1:27,35:61:-156.51,-18.39,-101.07:99
-chr1 992297 rs11260596 C T 126.12 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.11;MQ0=0;OQ=235.14;QD=11.76;SB=-75.09 GT:AD:DP:GL:GQ 0/1:10,10:18:-32.23,-5.43,-30.14:99
-chr1 992795 rs4246502 C G 1.88 PASS AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.20;MQ0=0;OQ=331.32;QD=25.49;SB=-10.00 GT:AD:DP:GL:GQ 0/1:3,10:12:-40.03,-3.62,-11.85:82.27
-chr1 992916 rs4074992 C T 64.57 PASS AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.96;MQ0=0;OQ=236.09;QD=13.12;SB=-45.65 GT:AD:DP:GL:GQ 0/1:9,9:18:-32.32,-5.43,-28.25:99
-chr1 993492 rs4075116 C T 510.01 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=697.41;QD=15.16;SB=-277.76 GT:AD:DP:GL:GQ 0/1:23,23:43:-85.98,-12.96,-73.34:99
-chr1 994820 rs4073176 G A 10.79 PASS AC=1;AF=0.50;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=141.42;QD=15.71;SB=-0.98 GT:AD:DP:GL:GQ 0/1:4,5:9:-20.14,-2.71,-13.80:99
-chr1 994843 rs4073177 G A 1.13 PASS AC=1;AF=0.50;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=225.74;QD=20.52;SB=-3.99 GT:AD:DP:GL:GQ 0/1:4,7:11:-29.17,-3.31,-13.13:98.16
-chr1 995932 rs55918415 G A 129.98 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=57.98;MQ0=1;OQ=500.10;QD=13.89;SB=-124.09 GT:AD:DP:GL:GQ 0/1:20,16:33:-63.24,-9.94,-54.88:99
-chr1 996086 rs9442394 G A 160.48 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=2.17;MQ=59.51;MQ0=0;OQ=685.95;QD=14.59;SB=-304.81 GT:AD:DP:GL:GQ 0/1:25,22:45:-85.44,-13.56,-78.07:99
-chr1 996853 rs4326571 G A 22.99 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.32;MQ=58.90;MQ0=0;OQ=529.40;QD=13.93;SB=-35.65 GT:AD:DP:GL:GQ 0/1:21,17:38:-67.68,-11.45,-66.25:99
-chr1 999097 rs9442366 T C 69.15 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.30;MQ0=0;OQ=217.52;QD=6.59;SB=-81.95 GT:AD:DP:GL:GQ 0/1:21,12:31:-34.38,-9.34,-81.07:99
-chr1 999304 . G A 28.33 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=57.94;MQ0=0;OQ=327.19;QD=9.62;SB=-182.19 GT:AD:DP:GL:GQ 0/1:21,13:31:-45.35,-9.34,-65.26:99
-chr1 999341 rs9442367 G C 25.99 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=2;HaplotypeScore=0.81;MQ=58.59;MQ0=0;OQ=590.30;QD=17.89;SB=-256.14 GT:AD:DP:GL:GQ 0/1:14,19:30:-71.37,-9.06,-48.75:99
-chr1 1000580 rs9442368 C T 47.69 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=4.96;MQ=54.71;MQ0=0;OQ=650.78;QD=15.49;SB=-262.79 GT:AD:DP:GL:GQ 0/1:21,21:39:-80.11,-11.75,-60.91:99
-chr1 1000958 rs11810785 A G 695.93 Indel AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=6;HaplotypeScore=2.96;MQ=54.24;MQ0=1;QD=26.77;SB=-339.63 GT:AD:DP:GL:GQ 1/1:0,26:21:-73.19,-6.33,-0.01:63.17
-chr1 1001394 . T C 34.95 LowQual AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=41.30;MQ0=1;QD=3.88;SB=-6.99 GT:AD:DP:GL:GQ 0/1:6,3:8:-9.19,-2.41,-20.53:67.78
-chr1 1001500 . A T 20.13 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=16.78;MQ0=8;QD=0.81;SB=-10.00 GT:AD:DP:GL:GQ 0/1:19,5:9:-8.01,-2.72,-22.07:52.92
-chr1 1002064 . G C 10.08 LowQual AC=1;AF=0.50;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.77;MQ0=0;QD=5.04;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,1:1:-4.25,-0.30,-0.00:1.76
-chr1 1002464 . A T 1.23 PASS AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=18.46;MQ0=3;OQ=57.47;QD=3.59;SB=-37.37 GT:AD:DP:GL:GQ 0/1:8,7:4:-10.24,-1.21,-3.80:25.95
-chr1 1002488 . A T 34.11 LowQual AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=7.23;MQ=19.96;MQ0=3;QD=2.27;SB=-4.00 GT:AD:DP:GL:GQ 0/1:9,6:4:-7.90,-1.21,-5.60:43.89
-chr1 1002494 . A T 35.11 LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=4.75;MQ=19.72;MQ0=3;QD=2.51;SB=-7.00 GT:AD:DP:GL:GQ 0/1:7,7:3:-7.70,-0.90,-3.30:23.95
-chr1 1002516 . G A 46.02 LowQual AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=18.44;MQ0=1;QD=4.60;SB=-10.00 GT:AD:DP:GL:GQ 1/1:5,5:2:-8.01,-0.60,-0.00:6.02
-chr1 1002856 . T G 12.29 PASS AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.33;MQ0=1;OQ=106.33;QD=5.32;SB=-21.95 GT:AD:DP:GL:GQ 0/1:10,10:13:-17.84,-3.92,-27.80:99
-chr1 1003100 . C T 26.46 LowQual AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=39.70;MQ0=0;QD=2.65;SB=-3.99 GT:AD:DP:GL:GQ 0/1:8,2:6:-7.74,-1.81,-13.13:59.28
-chr1 1003243 . G C 4.11 PASS AC=2;AF=1.00;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.94;MQ=27.95;MQ0=9;OQ=330.47;QD=13.77;SB=-94.94 GT:AD:DP:GL:GQ 1/1:14,10:9:-36.64,-2.72,-0.01:27.09
-chr1 1003514 . C A 42.25 LowQual AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.30;MQ0=1;QD=7.04;SB=-46.39 GT:AD:DP:GL:GQ 1/1:0,6:2:-7.63,-0.60,-0.00:6.02
-chr1 1003557 . T A 0.08 PASS AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=5.02;MQ=17.13;MQ0=14;OQ=71.49;QD=2.98;SB=-43.38 GT:AD:DP:GL:GQ 0/1:21,3:4:-11.64,-1.20,-3.64:24.35
-chr1 1003864 . G C 10.99 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=9.87;MQ=5.60;MQ0=15;QD=0.58;SB=-10.00 GT:AD:DP:GL:GQ 0/1:17,2:1:-4.35,-0.30,-0.00:1.76
-chr1 1004168 . A T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=12.18;MQ=19.95;MQ0=11;OQ=53.86;QD=2.56;SB=-37.95 GT:AD:DP:GL:GQ 0/1:14,6:6:-10.48,-1.81,-11.22:86.70
-chr1 1004254 . G C 33.05 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=6.90;MQ=13.09;MQ0=11;QD=1.32;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,12:4:-7.80,-1.21,-8.59:65.89
-chr1 1004313 . G C 21.04 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=11.38;MQ0=14;QD=0.84;SB=-3.98 GT:AD:DP:GL:GQ 0/1:23,2:6:-7.19,-1.81,-17.58:53.84
-chr1 1004699 rs12401605 A G 193.45 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=54.82;MQ0=0;OQ=256.92;QD=8.56;SB=-154.32 GT:AD:DP:GL:GQ 0/1:17,12:28:-37.42,-8.44,-63.53:99
-chr1 1004727 rs12411041 T A 29.53 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=54.35;MQ0=0;OQ=225.92;QD=6.11;SB=-72.06 GT:AD:DP:GL:GQ 0/1:25,11:32:-35.52,-9.65,-76.83:99
-chr1 1004989 rs36027499 A G 65.38 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=54.55;MQ0=0;OQ=184.41;QD=7.38;SB=-109.60 GT:AD:DP:GL:GQ 0/1:16,9:24:-28.96,-7.24,-58.60:99
-chr1 1005120 rs9442369 A G 5.28 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=59.36;MQ0=0;OQ=146.76;QD=4.08;SB=-64.75 GT:AD:DP:GL:GQ 0/1:26,10:34:-28.21,-10.25,-99.59:99
-chr1 1005414 rs9442370 C T 185.20 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.23;MQ0=0;OQ=413.23;QD=13.77;SB=-165.25 GT:AD:DP:GL:GQ 0/1:14,16:26:-52.45,-7.84,-38.57:99
-chr1 1005680 rs12746483 G A 50.56 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=2.06;MQ=55.16;MQ0=0;OQ=462.98;QD=16.54;SB=-241.55 GT:AD:DP:GL:GQ 0/1:13,15:28:-58.02,-8.44,-44.58:99
-chr1 1007033 rs3766193 C G 206.38 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=57.65;MQ0=0;OQ=606.89;QD=15.97;SB=-241.40 GT:AD:DP:GL:GQ 0/1:19,19:36:-74.82,-10.85,-77.35:99
-chr1 1007060 rs3766192 C T 263.39 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=59.03;MQ0=0;OQ=740.51;QD=17.22;SB=-335.87 GT:AD:DP:GL:GQ 0/1:19,24:42:-90.01,-12.67,-54.97:99
-chr1 1007204 rs1133647 G T 220.81 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.63;MQ0=0;OQ=352.30;QD=10.36;SB=-144.83 GT:AD:DP:GL:GQ 0/1:20,14:34:-48.76,-10.25,-68.42:99
-chr1 1008007 rs9442395 T C 79.76 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.17;MQ=58.20;MQ0=0;OQ=515.12;QD=11.71;SB=-260.59 GT:AD:DP:GL:GQ 0/1:23,21:43:-67.76,-12.96,-87.04:99
-chr1 1008425 rs9442371 C T 263.64 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=58.95;MQ0=0;OQ=629.69;QD=14.31;SB=-217.52 GT:AD:DP:GL:GQ 0/1:24,20:39:-78.01,-11.76,-59.01:99
-chr1 1008567 rs9442372 A G 252.74 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.72;MQ=58.97;MQ0=0;OQ=538.45;QD=11.97;SB=-254.34 GT:AD:DP:GL:GQ 0/1:20,24:42:-69.79,-12.66,-79.04:99
-chr1 1009038 rs2298215 C G 217.10 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=60.00;MQ0=0;OQ=687.91;QD=14.95;SB=-237.07 GT:AD:DP:GL:GQ 0/1:26,20:46:-85.94,-13.87,-107.64:99
-chr1 1009043 rs9442396 T C 432.81 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=537.22;QD=11.94;SB=-291.59 GT:AD:DP:GL:GQ 0/1:24,21:42:-69.65,-12.65,-93.39:99
-chr1 1010269 rs9442397 T C 3.22 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.96;MQ=59.38;MQ0=0;OQ=202.19;QD=5.46;SB=-53.82 GT:AD:DP:GL:GQ 0/1:25,12:35:-34.05,-10.54,-100.39:99
-chr1 1011278 rs3737728 A G 36.30 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=58.01;MQ0=0;OQ=401.40;QD=7.72;SB=-209.34 GT:AD:DP:GL:GQ 0/1:32,20:49:-58.20,-14.77,-121.11:99
-chr1 1011558 rs9442398 A G 416.42 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.92;MQ0=0;OQ=544.78;QD=12.67;SB=-280.28 GT:AD:DP:GL:GQ 0/1:17,25:38:-69.23,-11.47,-56.30:99
-chr1 1011900 rs6701114 C T 240.77 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=59.30;MQ0=0;OQ=587.87;QD=17.81;SB=-314.84 GT:AD:DP:GL:GQ 0/1:13,20:30:-71.11,-9.04,-40.79:99
-chr1 1013307 rs9442399 C G 25.25 PASS AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=338.37;QD=37.60;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:9:-37.42,-2.71,-0.00:27.09
-chr1 1015133 . C T 6.55 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.91;MQ=59.48;MQ0=0;OQ=504.60;QD=11.47;SB=-145.62 GT:AD:DP:GL:GQ 0/1:26,18:38:-65.20,-11.46,-67.24:99
-chr1 1015164 rs9442400 T C 212.54 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.61;MQ0=0;OQ=1416.80;QD=29.52;SB=-594.18 GT:AD:DP:GL:GQ 1/1:0,48:47:-145.32,-14.18,-0.06:99
-chr1 1016570 rs4074137 C A 81.77 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=60.00;MQ0=0;OQ=196.23;QD=6.33;SB=-112.43 GT:AD:DP:GL:GQ 0/1:22,9:30:-31.95,-9.04,-69.97:99
-chr1 1016664 rs4562563 T A 69.49 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=58.99;MQ0=0;OQ=428.33;QD=18.62;SB=-222.84 GT:AD:DP:GL:GQ 0/1:8,15:23:-53.05,-6.93,-28.44:99
-chr1 1021403 rs9651273 A G 292.85 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=648.57;QD=9.40;SB=-308.20 GT:AD:DP:GL:GQ 0/1:44,25:69:-88.92,-20.78,-180.93:99
-chr1 1022047 rs9651272 A G 123.66 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=59.58;MQ0=0;OQ=389.06;QD=8.84;SB=-195.60 GT:AD:DP:GL:GQ 0/1:25,19:42:-54.85,-12.66,-100.05:99
-chr1 1023862 rs4970353 C T 10.88 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=5;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=971.03;QD=16.18;SB=-472.48 GT:AD:DP:GL:GQ 0/1:30,30:59:-118.16,-17.77,-101.63:99
-chr1 1025668 rs12759295 G A 84.62 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=59.60;MQ0=0;OQ=2089.51;QD=36.03;SB=-522.67 GT:AD:DP:GL:GQ 1/1:0,58:54:-212.56,-16.27,-0.02:99
-chr1 1026680 rs61766341 T C 205.76 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=959.29;QD=13.51;SB=-415.84 GT:AD:DP:GL:GQ 0/1:32,39:68:-119.71,-20.50,-125.74:99
-chr1 1026910 rs12134754 C T 210.31 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.33;MQ0=0;OQ=1080.76;QD=17.43;SB=-366.87 GT:AD:DP:GL:GQ 0/1:30,32:60:-129.44,-18.08,-89.78:99
-chr1 1027893 . T A 15.04 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=20;HaplotypeScore=5.87;MQ=44.25;MQ0=4;QD=0.40;SB=32.13 GT:AD:DP:GL:GQ 0/1:33,5:23:-11.70,-6.93,-76.52:47.73
-chr1 1037844 rs11584392 G A 163.44 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.82;MQ0=0;OQ=608.74;QD=14.16;SB=-241.74 GT:AD:DP:GL:GQ 0/1:22,21:40:-76.22,-12.06,-65.82:99
-chr1 1043248 rs4970408 C T 441.42 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.36;MQ0=0;OQ=945.52;QD=17.51;SB=-425.94 GT:AD:DP:GL:GQ 0/1:25,29:54:-114.11,-16.27,-86.23:99
-chr1 1050037 rs7548798 C T 114.73 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=3.36;MQ=58.61;MQ0=0;OQ=733.89;QD=15.61;SB=-330.30 GT:AD:DP:GL:GQ 0/1:24,23:47:-90.84,-14.17,-83.86:99
-chr1 1050038 rs7556082 T C 10.07 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=4;HaplotypeScore=2.36;MQ=58.61;MQ0=0;OQ=528.95;QD=11.25;SB=-283.60 GT:AD:DP:GL:GQ 0/1:24,23:46:-70.05,-13.87,-95.38:99
-chr1 1050218 rs12567855 G C 18.84 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=1.10;MQ=59.48;MQ0=0;OQ=549.12;QD=15.25;SB=-150.55 GT:AD:DP:GL:GQ 0/1:19,17:33:-68.15,-9.95,-68.62:99
-chr1 1050923 . C G 38.31 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=7.12;MQ=59.57;MQ0=0;QD=0.71;SB=62.24 GT:AD:DP:GL:GQ 0/1:40,14:36:-17.98,-10.86,-134.66:71.15
-chr1 1051029 rs11807848 T C 153.72 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.10;MQ=60.00;MQ0=0;OQ=328.64;QD=9.39;SB=-171.94 GT:AD:DP:GL:GQ 0/1:21,14:34:-46.39,-10.24,-82.90:99
-chr1 1051657 rs34530354 A G 139.07 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.25;MQ0=0;OQ=341.50;QD=11.02;SB=-128.73 GT:AD:DP:GL:GQ 0/1:17,14:30:-46.47,-9.04,-63.98:99
-chr1 1051711 rs35207507 A G 157.75 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=57.36;MQ0=0;OQ=232.59;QD=9.30;SB=-75.78 GT:AD:DP:GL:GQ 0/1:12,13:22:-33.17,-6.63,-47.34:99
-chr1 1051888 rs9329411 A G 8.12 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=3;HaplotypeScore=0.32;MQ=58.95;MQ0=0;OQ=307.14;QD=13.96;SB=-152.31 GT:AD:DP:GL:GQ 0/1:10,12:20:-40.02,-6.03,-35.33:99
-chr1 1052501 rs9442373 C A 218.78 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.03;MQ0=0;OQ=1229.67;QD=18.35;SB=-293.35 GT:AD:DP:GL:GQ 0/1:29,38:65:-145.84,-19.58,-78.11:99
-chr1 1052907 rs7545801 A G 1.69 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=2.49;MQ=60.00;MQ0=0;OQ=935.67;QD=29.24;SB=-247.57 GT:AD:DP:GL:GQ 1/1:0,32:30:-97.17,-9.04,-0.02:90.21
-chr1 1053104 rs4970413 G T 111.15 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.50;MQ=59.42;MQ0=0;OQ=637.82;QD=15.95;SB=-209.62 GT:AD:DP:GL:GQ 0/1:16,24:36:-77.92,-10.85,-38.08:99
-chr1 1053355 rs55945496 G A 154.74 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=58.97;MQ0=0;OQ=692.26;QD=15.38;SB=-240.56 GT:AD:DP:GL:GQ 0/1:24,21:40:-84.57,-12.06,-60.15:99
-chr1 1054398 rs6682475 G C 62.97 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=3.35;MQ=57.20;MQ0=0;OQ=522.88;QD=16.34;SB=-284.57 GT:AD:DP:GL:GQ 0/1:16,16:32:-65.22,-9.65,-67.94:99
-chr1 1054533 rs7547403 C G 0.36 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=4;HaplotypeScore=0.79;MQ=59.42;MQ0=0;OQ=1637.77;QD=40.94;SB=-672.45 GT:AD:DP:GL:GQ 1/1:0,40:39:-167.38,-11.75,-0.02:99
-chr1 1054665 rs2298216 T C 152.44 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=59.60;MQ0=0;OQ=1938.74;QD=34.01;SB=-772.11 GT:AD:DP:GL:GQ 1/1:0,57:57:-197.48,-17.17,-0.02:99
-chr1 1055159 rs4072537 T C 138.47 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.50;MQ0=0;OQ=1817.15;QD=30.80;SB=-665.83 GT:AD:DP:GL:GQ 1/1:0,59:56:-185.34,-16.89,-0.04:99
-chr1 1055460 rs9442357 C A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.04;HRun=20;HaplotypeScore=17.31;MQ=48.11;MQ0=2;OQ=1123.16;QD=23.90;SB=-311.46 GT:AD:DP:GL:GQ 1/1:9,36:37:-122.62,-11.15,-6.72:44.32
-chr1 1056122 rs4072496 G C 273.90 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=828.08;QD=31.85;SB=-146.57 GT:AD:DP:GL:GQ 1/1:0,26:22:-86.41,-6.64,-0.02:66.21
-chr1 1056145 rs10907181 A G 65.29 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=60.00;MQ0=0;OQ=849.61;QD=28.32;SB=-350.43 GT:AD:DP:GL:GQ 1/1:0,30:29:-88.58,-8.75,-0.04:87.15
-chr1 1056266 rs10907182 T C 152.84 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.47;MQ0=0;OQ=1343.61;QD=29.86;SB=-493.15 GT:AD:DP:GL:GQ 1/1:0,45:43:-137.99,-12.97,-0.04:99
-chr1 1056679 . A G 17.68 PASS AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.92;MQ0=0;OQ=622.64;QD=23.06;SB=-77.91 GT:AD:DP:GL:GQ 1/1:0,27:19:-65.86,-5.72,-0.01:57.16
-chr1 1056682 rs7513297 A G 4.15 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=33.92;MQ0=0;OQ=613.60;QD=22.73;SB=-73.89 GT:AD:DP:GL:GQ 1/1:0,27:19:-64.96,-5.73,-0.01:57.15
-chr1 1056691 rs7553878 C G 182.98 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=38.04;MQ0=0;OQ=986.57;QD=30.83;SB=-182.68 GT:AD:DP:GL:GQ 1/1:0,32:25:-102.26,-7.54,-0.01:75.24
-chr1 1056809 rs7513404 A G 1483.16 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=11.12;MQ=36.69;MQ0=3;QD=26.02;SB=-571.97 GT:AD:DP:GL:GQ 1/1:2,55:47:-151.94,-14.18,-0.04:99
-chr1 1056815 rs7513405 A G 1422.20 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=12.03;MQ=35.94;MQ0=3;QD=26.83;SB=-591.02 GT:AD:DP:GL:GQ 1/1:4,49:44:-145.84,-13.27,-0.03:99
-chr1 1056816 rs7516160 T C 1466.09 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=12.03;MQ=36.53;MQ0=3;QD=27.15;SB=-727.28 GT:AD:DP:GL:GQ 1/1:3,50:47:-150.24,-14.18,-0.04:99
-chr1 1057725 rs9442374 T G 13.34 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=58.50;MQ0=0;OQ=951.55;QD=30.70;SB=-471.37 GT:AD:DP:GL:GQ 1/1:0,31:29:-98.75,-8.74,-0.01:87.23
-chr1 1057728 rs9442358 A C 4.18 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=0.48;MQ=58.50;MQ0=0;OQ=931.22;QD=30.04;SB=-418.04 GT:AD:DP:GL:GQ 1/1:1,30:28:-96.72,-8.44,-0.02:84.22
-chr1 1059288 rs9442375 C A 11.97 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=37.62;MQ0=0;OQ=1307.51;QD=33.53;SB=-359.86 GT:AD:DP:GL:GQ 1/1:0,39:37:-134.35,-11.15,-0.01:99
-chr1 1059306 rs9442376 G A 317.82 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=30.41;MQ0=0;OQ=1189.43;QD=32.15;SB=-404.66 GT:AD:DP:GL:GQ 1/1:0,37:31:-122.54,-9.34,-0.01:93.30
-chr1 1059314 rs9442377 G A 1.90 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=4.82;MQ=29.14;MQ0=0;OQ=1298.78;QD=30.92;SB=-496.01 GT:AD:DP:GL:GQ 1/1:0,42:35:-133.48,-10.55,-0.02:99
-chr1 1059991 rs9442378 T G 44.61 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.34;MQ0=0;OQ=1111.12;QD=31.75;SB=-500.92 GT:AD:DP:GL:GQ 1/1:0,35:33:-114.71,-9.94,-0.02:99
-chr1 1060304 rs9442379 C T 128.73 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1793.65;QD=37.37;SB=-715.98 GT:AD:DP:GL:GQ 1/1:0,48:46:-182.96,-13.86,-0.01:99
-chr1 1060981 rs10907183 G C 289 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.17;MQ=58.88;MQ0=0;OQ=1986.90;QD=34.26;SB=-998.16 GT:AD:DP:GL:GQ 1/1:0,58:51:-202.32,-15.40,-0.05:99
-chr1 1061055 rs6604971 T C 165.65 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=59.35;MQ0=0;OQ=1959.28;QD=30.61;SB=-872.00 GT:AD:DP:GL:GQ 1/1:0,64:62:-199.57,-18.70,-0.06:99
-chr1 1062361 rs9442360 G C 41.74 LowQual AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.77;MQ0=0;QD=13.91;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:2:-7.58,-0.60,-0.00:6.02
-chr1 1063812 . C A 39.60 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=20;HaplotypeScore=10.99;MQ=49.89;MQ0=1;QD=0.94;SB=53.19 GT:AD:DP:GL:GQ 0/1:34,7:30:-16.28,-9.04,-89.71:72.44
-chr1 1064433 . T C 21.13 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=43.11;MQ0=1;QD=1.11;SB=5.04 GT:AD:DP:GL:GQ 0/1:14,5:14:-9.62,-4.23,-37.37:53.93
-chr1 1064508 . A G 48.32 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=5;HaplotypeScore=5.11;MQ=25.52;MQ0=20;QD=0.93;SB=-10.00 GT:AD:DP:GL:GQ 0/1:42,6:27:-16.25,-8.14,-83.13:81.15
-chr1 1064534 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=5.91;MQ=22.24;MQ0=19;OQ=77.81;QD=1.62;SB=-10.00 GT:AD:DP:GL:GQ 0/1:26,22:23:-17.99,-6.93,-63.10:99
-chr1 1064544 . G A 18.70 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=9.26;MQ=23.84;MQ0=13;QD=0.45;SB=-10.00 GT:AD:DP:GL:GQ 0/1:39,3:23:-12.08,-6.93,-67.67:51.47
-chr1 1064666 . G A 28.24 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=17.49;MQ0=7;QD=1.34;SB=-10.00 GT:AD:DP:GL:GQ 0/1:19,2:4:-7.31,-1.21,-6.24:50.32
-chr1 1064676 . G A 32.25 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=15.31;MQ0=8;QD=1.61;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,4:3:-7.41,-0.90,-3.57:26.65
-chr1 1064678 . A G 13.68 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=15.31;MQ0=8;QD=0.68;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,5:3:-5.54,-0.90,-4.06:31.54
-chr1 1065083 . T G 0.75 PASS AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=13.28;MQ0=6;OQ=72.14;QD=8.02;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,7:3:-10.70,-0.90,-0.00:9.03
-chr1 1065545 . A T 15.58 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=6.82;MQ=15.84;MQ0=10;QD=0.78;SB=-20.32 GT:AD:DP:GL:GQ 0/1:16,4:8:-7.24,-2.41,-23.49:48.29
-chr1 1065754 . T G 10.50 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=3;HaplotypeScore=0.98;MQ=26.23;MQ0=5;QD=0.50;SB=-7.00 GT:AD:DP:GL:GQ 0/1:10,11:9:-7.00,-2.71,-25.01:42.93
-chr1 1065788 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=4;HaplotypeScore=1.91;MQ=35.15;MQ0=3;OQ=426.85;QD=16.42;SB=-65.33 GT:AD:DP:GL:GQ 0/1:10,16:20:-52.00,-6.03,-21.27:99
-chr1 1065876 rs34294086 G T 14.09 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.05;MQ=16.68;MQ0=19;QD=0.25;SB=-0.98 GT:AD:DP:GL:GQ 0/1:47,10:18:-10.10,-5.43,-46.58:46.75
-chr1 1065896 rs34976191 A G 3.15 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=5.11;MQ=25.24;MQ0=16;OQ=221.06;QD=5.02;SB=-47.30 GT:AD:DP:GL:GQ 0/1:32,12:17:-30.51,-5.13,-29.81:99
-chr1 1065898 rs35853231 G A 14.06 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=25.42;MQ0=15;OQ=228.24;QD=5.43;SB=-22.49 GT:AD:DP:GL:GQ 0/1:33,9:15:-30.63,-4.52,-21.87:99
-chr1 1066927 rs4970357 C A 263.23 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=704.25;QD=32.01;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,22:21:-74.02,-6.32,-0.01:63.19
-chr1 1067825 rs55750860 C T 23.40 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.51;MQ=58.95;MQ0=0;OQ=1494.41;QD=37.36;SB=-613.01 GT:AD:DP:GL:GQ 1/1:0,40:39:-153.04,-11.75,-0.01:99
-chr1 1070149 rs1539638 G A 498.18 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1278.23;QD=37.59;SB=-657.67 GT:AD:DP:GL:GQ 1/1:0,34:33:-131.42,-9.94,-0.01:99
-chr1 1070766 . C G 0.10 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=47.59;MQ0=0;OQ=113.71;QD=2.58;SB=-2.32 GT:AD:DP:GL:GQ 0/1:34,9:39:-26.42,-11.76,-133.80:99
-chr1 1070768 . C T 0.13 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=46.93;MQ0=0;OQ=115.95;QD=2.64;SB=-32.19 GT:AD:DP:GL:GQ 0/1:34,10:38:-26.33,-11.45,-104.66:99
-chr1 1070788 rs1539637 G C 8.38 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=2.86;MQ=44.98;MQ0=0;OQ=574.54;QD=14.73;SB=-154.58 GT:AD:DP:GL:GQ 0/1:22,17:37:-71.91,-11.17,-77.14:99
-chr1 1070790 rs4512588 T C 118.97 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.33;MQ=44.52;MQ0=0;OQ=439.51;QD=11.57;SB=-120.73 GT:AD:DP:GL:GQ 0/1:20,18:36:-58.08,-10.85,-73.14:99
-chr1 1070804 . T C 317.73 Indel AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=43.50;MQ0=0;QD=8.83;SB=-125.65 GT:AD:DP:GL:GQ 0/1:20,16:34:-45.31,-10.25,-78.50:99
-chr1 1070810 . T C 59.59 Indel AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=42.56;MQ0=0;QD=1.92;SB=-21.88 GT:AD:DP:GL:GQ 0/1:21,10:26:-17.08,-7.83,-82.36:92.43
-chr1 1070825 . C T 12.15 LowQual AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=46.99;MQ0=0;QD=0.45;SB=-5.49 GT:AD:DP:GL:GQ 0/1:24,3:26:-12.31,-7.84,-75.55:44.71
-chr1 1070828 . C T 17.92 LowQual AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=46.99;MQ0=0;QD=0.66;SB=-11.45 GT:AD:DP:GL:GQ 0/1:24,3:24:-12.30,-7.23,-73.32:50.69
-chr1 1074807 . T G 14.10 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=4;HaplotypeScore=1.72;MQ=58.59;MQ0=0;QD=0.43;SB=59.21 GT:AD:DP:GL:GQ 0/1:24,8:27:-12.81,-8.13,-82.30:46.77
-chr1 1075432 . C T 38.87 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.24;MQ=57.97;MQ0=0;OQ=818.81;QD=17.80;SB=-345.86 GT:AD:DP:GL:GQ 0/1:20,26:46:-99.04,-13.88,-63.69:99
-chr1 1077546 rs9442380 T C 202.60 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=2295.26;QD=29.81;SB=-1162.13 GT:AD:DP:GL:GQ 1/1:0,76:73:-233.18,-22.02,-0.07:99
-chr1 1079125 rs4970358 A G 12.32 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=5.70;MQ=59.35;MQ0=0;OQ=2374.58;QD=33.44;SB=-995.95 GT:AD:DP:GL:GQ 1/1:0,69:68:-244.00,-23.26,-2.96:99
-chr1 1079873 rs9442361 C A 5.87 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=1.89;MQ=53.07;MQ0=0;OQ=1204.88;QD=33.47;SB=-532.76 GT:AD:DP:GL:GQ 1/1:0,36:34:-124.08,-10.24,-0.01:99
-chr1 1080440 rs6604972 A G 531.63 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=1807.70;QD=30.64;SB=-735.76 GT:AD:DP:GL:GQ 1/1:0,59:56:-184.40,-16.89,-0.04:99
-chr1 1082462 rs56863140 G C 99.95 PASS AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=146.93;QD=24.49;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,6:5:-18.26,-1.52,-0.01:15.05
-chr1 1084348 rs4970360 C T 64.65 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.36;MQ=58.41;MQ0=0;OQ=1613.83;QD=36.68;SB=-777.04 GT:AD:DP:GL:GQ 1/1:0,44:42:-164.99,-12.66,-0.02:99
-chr1 1084535 rs4970361 A C 88.25 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=58.78;MQ0=1;OQ=1424.16;QD=32.37;SB=-688.05 GT:AD:DP:GL:GQ 1/1:1,43:41:-146.01,-12.35,-0.01:99
-chr1 1084601 rs4970362 A G 229.75 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.71;MQ=59.53;MQ0=0;OQ=1464.98;QD=29.90;SB=-668.84 GT:AD:DP:GL:GQ 1/1:0,49:47:-150.13,-14.18,-0.04:99
-chr1 1084842 rs7538773 G A 9.80 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.13;MQ0=0;OQ=1279.59;QD=36.56;SB=-199.76 GT:AD:DP:GL:GQ 1/1:0,33:33:-131.55,-9.94,-0.01:99
-chr1 1085246 rs6604973 G A 85.72 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.42;MQ0=0;OQ=1511.71;QD=37.79;SB=-646.86 GT:AD:DP:GL:GQ 1/1:0,40:38:-154.76,-11.45,-0.01:99
-chr1 1085482 rs4970419 C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=7;HaplotypeScore=2.24;MQ=59.45;MQ0=0;OQ=1670.84;QD=39.78;SB=-828.31 GT:AD:DP:GL:GQ 1/1:0,42:40:-170.69,-12.06,-0.02:99
-chr1 1085874 rs9442381 C G 314.67 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.11;MQ0=0;OQ=1195.39;QD=38.56;SB=-412.65 GT:AD:DP:GL:GQ 1/1:0,31:28:-123.13,-8.44,-0.01:84.28
-chr1 1086061 rs9442382 C T 139.37 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=990.01;QD=38.08;SB=-164.21 GT:AD:DP:GL:GQ 1/1:0,26:26:-102.60,-7.84,-0.01:78.25
-chr1 1086771 rs1539636 T C 148.49 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=60.00;MQ0=0;OQ=1262.30;QD=33.22;SB=-642.89 GT:AD:DP:GL:GQ 1/1:0,38:37:-129.83,-11.15,-0.02:99
-chr1 1086955 rs1539635 G A 48.48 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.31;MQ=56.37;MQ0=0;OQ=1687.66;QD=35.91;SB=-612.00 GT:AD:DP:GL:GQ 1/1:0,47:43:-172.36,-12.95,-0.01:99
-chr1 1086963 rs1539634 C T 83.45 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.95;MQ0=0;OQ=1761.33;QD=36.69;SB=-642.86 GT:AD:DP:GL:GQ 1/1:0,48:45:-179.73,-13.56,-0.02:99
-chr1 1087150 rs9442384 T C 36.04 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=59.81;MQ0=0;OQ=1429.90;QD=29.79;SB=-636.25 GT:AD:DP:GL:GQ 1/1:0,48:46:-146.63,-13.88,-0.05:99
-chr1 1087198 rs9442385 T G 89.37 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=57.84;MQ0=0;OQ=1240.37;QD=26.39;SB=-556.87 GT:AD:DP:GL:GQ 1/1:0,47:40:-127.66,-12.06,-0.04:99
-chr1 1087800 rs1891907 A G 2.98 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=57.36;MQ0=0;OQ=810.89;QD=32.44;SB=-193.80 GT:AD:DP:GL:GQ 1/1:0,25:24:-84.68,-7.23,-0.01:72.21
-chr1 1088284 rs12135382 C T 198.45 PASS AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=312.05;QD=28.37;SB=-50.56 GT:AD:DP:GL:GQ 1/1:0,11:9:-34.79,-2.71,-0.00:27.09
-chr1 1088577 rs4379629 C G 8.91 PASS AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=217.53;QD=24.17;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:7:-25.35,-2.12,-0.02:21.06
-chr1 1089205 rs9660710 A C 62.17 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=60.00;MQ0=0;OQ=1253.07;QD=26.66;SB=-477.88 GT:AD:DP:GL:GQ 1/1:0,47:40:-128.93,-12.06,-0.03:99
-chr1 1090080 rs1891905 C T 107.83 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=58.89;MQ0=0;OQ=1593.75;QD=37.95;SB=-678.31 GT:AD:DP:GL:GQ 1/1:0,42:41:-162.97,-12.35,-0.01:99
-chr1 1090182 rs1891904 C A 413.02 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=739.19;QD=30.80;SB=-375.45 GT:AD:DP:GL:GQ 1/1:0,24:22:-77.51,-6.63,-0.01:66.17
-chr1 1090866 rs7549819 C T 73.60 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=59.25;MQ0=0;OQ=998.72;QD=32.22;SB=-450.59 GT:AD:DP:GL:GQ 1/1:1,30:27:-103.47,-8.14,-0.02:81.25
-chr1 1091932 rs9442386 A G 1.23 PASS AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=172.84;QD=21.61;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:7:-20.87,-2.12,-0.01:21.04
-chr1 1093405 rs7518873 T C 57.10 PASS AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.77;MQ0=0;OQ=646.68;QD=30.79;SB=-268.71 GT:AD:DP:GL:GQ 1/1:0,21:20:-68.26,-6.03,-0.01:60.16
-chr1 1093821 rs7521584 T G 116.26 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.95;MQ0=0;OQ=1316.49;QD=29.92;SB=-587.88 GT:AD:DP:GL:GQ 1/1:0,44:43:-135.27,-12.96,-0.04:99
-chr1 1095101 rs9442362 T C 65.07 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.90;MQ=60.00;MQ0=0;OQ=375.39;QD=7.99;SB=-207.86 GT:AD:DP:GL:GQ 0/1:27,20:44:-54.09,-13.27,-100.76:99
-chr1 1095924 rs6656236 G A 130.43 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=57.77;MQ0=0;OQ=609.61;QD=16.04;SB=-273.30 GT:AD:DP:GL:GQ 0/1:18,20:34:-74.49,-10.25,-50.31:99
-chr1 1096647 rs4442317 T C 203.56 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=59.13;MQ0=0;OQ=506.89;QD=10.56;SB=-244.47 GT:AD:DP:GL:GQ 0/1:29,19:48:-68.44,-14.47,-111.87:99
-chr1 1114401 rs11577350 G A 483.74 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1009.34;QD=13.28;SB=-463.05 GT:AD:DP:GL:GQ 0/1:45,31:75:-126.83,-22.61,-139.35:99
-chr1 1114613 rs6702156 T C 467.81 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.71;MQ0=0;OQ=978.73;QD=12.23;SB=-374.99 GT:AD:DP:GL:GQ 0/1:42,38:78:-124.66,-23.50,-162.90:99
-chr1 1127805 . C T 17.93 LowQual AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.76;MQ=47.96;MQ0=1;QD=0.48;SB=-4.44 GT:AD:DP:GL:GQ 0/1:29,6:21:-11.40,-6.33,-63.23:50.69
-chr1 1133298 rs55945303 G A 59.18 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=925.55;QD=21.52;SB=-252.58 GT:AD:DP:GL:GQ 0/1:14,29:40:-107.89,-12.05,-42.24:99
-chr1 1139524 rs35878953 C T 131.94 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=58.24;MQ0=0;OQ=799.98;QD=18.60;SB=-423.99 GT:AD:DP:GL:GQ 0/1:17,25:37:-94.44,-11.16,-36.66:99
-chr1 1148494 rs6603781 A G 136.52 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.05;MQ0=0;OQ=1330.48;QD=27.15;SB=-433.29 GT:AD:DP:GL:GQ 1/1:0,49:42:-136.66,-12.66,-0.03:99
-chr1 1149380 rs6702268 T C 227.72 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.80;MQ0=0;OQ=961.17;QD=27.46;SB=-122.75 GT:AD:DP:GL:GQ 1/1:0,35:31:-99.73,-9.35,-0.03:93.18
-chr1 1152189 rs4970423 A G 15.48 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=59.39;MQ0=0;OQ=1088.52;QD=28.65;SB=-378.40 GT:AD:DP:GL:GQ 1/1:0,38:34:-112.46,-10.25,-0.02:99
-chr1 1161280 rs6603782 C T 102.99 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=59.00;MQ0=0;OQ=708.75;QD=16.88;SB=-201.20 GT:AD:DP:GL:GQ 0/1:20,22:40:-86.21,-12.05,-64.42:99
-chr1 1162770 rs715643 C T 309.12 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.45;MQ=57.65;MQ0=0;OQ=561.34;QD=14.77;SB=-301.32 GT:AD:DP:GL:GQ 0/1:18,19:36:-70.27,-10.85,-55.47:99
-chr1 1171665 . C T 4.62 PASS AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.39;MQ0=0;OQ=105.76;QD=11.75;SB=-6.99 GT:AD:DP:GL:GQ 0/1:5,4:9:-16.57,-2.71,-16.65:99
-chr1 1178813 . G C 27.28 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=10.95;MQ=55.60;MQ0=0;QD=0.43;SB=74.28 GT:AD:DP:GL:GQ 0/1:46,17:41:-18.38,-12.37,-155.87:60.10
-chr1 1182131 . G A 44.09 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.04;HRun=20;HaplotypeScore=11.11;MQ=50.33;MQ0=0;QD=0.85;SB=65.22 GT:AD:DP:GL:GQ 0/1:38,12:42:-20.05,-12.36,-125.30:76.92
-chr1 1183574 . T C 30.78 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=5;HaplotypeScore=13.00;MQ=56.93;MQ0=0;QD=0.83;SB=23.10 GT:AD:DP:GL:GQ 0/1:22,15:21:-12.69,-6.33,-67.62:63.61
-chr1 1186726 rs6659787 T C 444.24 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1920.21;QD=33.11;SB=-425.81 GT:AD:DP:GL:GQ 1/1:0,58:55:-195.63,-16.57,-0.02:99
-chr1 1194535 . A G 16.67 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=6.08;MQ=52.52;MQ0=1;QD=0.32;SB=29.11 GT:AD:DP:GL:GQ 0/1:42,10:39:-16.70,-11.76,-128.34:49.41
-chr1 1204684 rs34258594 C T 26.14 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=41.53;MQ0=1;OQ=534.60;QD=15.27;SB=-99.92 GT:AD:DP:GL:GQ 0/1:16,19:32:-66.39,-9.65,-50.26:99
-chr1 1206810 . C A 15.67 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=59.17;MQ0=0;QD=0.56;SB=17.05 GT:AD:DP:GL:GQ 0/1:19,7:21:-11.17,-6.33,-52.97:48.38
-chr1 1212553 . C T 5.74 PASS AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=5.06;MQ=57.97;MQ0=0;OQ=298.13;QD=12.96;SB=-173.70 GT:AD:DP:GL:GQ 0/1:12,11:19:-38.83,-5.73,-27.23:99
-chr1 1213523 . A T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=15.57;MQ=33.50;MQ0=4;OQ=59.03;QD=3.28;SB=2.04 GT:AD:DP:GL:GQ 0/1:9,9:9:-11.90,-2.71,-23.47:91.86
-chr1 1213617 . C T 7.11 PASS AC=2;AF=1.00;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=3.14;MQ=18.72;MQ0=10;OQ=134.34;QD=6.72;SB=-10.00 GT:AD:DP:GL:GQ 1/1:5,15:4:-16.97,-1.20,-0.00:12.04
-chr1 1213622 . T C 11.33 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=3.30;MQ=19.74;MQ0=10;QD=0.49;SB=-3.98 GT:AD:DP:GL:GQ 0/1:20,3:7:-6.49,-2.11,-18.92:43.83
-chr1 1213635 . C T 23.33 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=18.06;MQ0=13;QD=0.75;SB=-33.62 GT:AD:DP:GL:GQ 0/1:24,7:9:-8.33,-2.71,-24.32:56.15
-chr1 1213653 . C T 47.94 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=17.89;MQ0=21;QD=1.00;SB=-23.48 GT:AD:DP:GL:GQ 0/1:37,11:13:-11.99,-3.92,-35.04:80.78
-chr1 1213671 . C T 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=22.77;MQ0=22;OQ=90.19;QD=1.80;SB=-17.46 GT:AD:DP:GL:GQ 0/1:28,22:20:-18.33,-6.03,-51.67:99
-chr1 1213694 . T C 39.97 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=2;HaplotypeScore=8.39;MQ=23.73;MQ0=21;QD=0.73;SB=-15.88 GT:AD:DP:GL:GQ 0/1:51,4:21:-13.61,-6.33,-64.53:72.80
-chr1 1213750 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=7.03;MQ=25.74;MQ0=11;OQ=59.44;QD=1.56;SB=-49.23 GT:AD:DP:GL:GQ 0/1:22,16:17:-14.35,-5.12,-45.82:92.28
-chr1 1213763 . C T 47.85 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.61;MQ0=8;QD=1.65;SB=-29.61 GT:AD:DP:GL:GQ 0/1:21,8:13:-11.99,-3.92,-33.55:80.68
-chr1 1213781 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=3.20;MQ=28.82;MQ0=7;OQ=70.59;QD=2.82;SB=-20.63 GT:AD:DP:GL:GQ 0/1:21,4:13:-14.26,-3.92,-34.86:99
-chr1 1213884 . C T 18.32 PASS AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=20.52;MQ0=9;OQ=123.88;QD=9.53;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,11:4:-15.92,-1.20,-0.00:12.04
-chr1 1213994 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=2;HaplotypeScore=2.99;MQ=9.42;MQ0=22;OQ=67.77;QD=1.94;SB=-42.68 GT:AD:DP:GL:GQ 0/1:31,4:4:-11.26,-1.21,-2.97:17.61
-chr1 1214386 . C T 18.53 PASS AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=12.80;MQ0=7;OQ=79.89;QD=6.15;SB=-52.67 GT:AD:DP:GL:GQ 1/1:3,10:3:-11.48,-0.90,-0.00:9.03
-chr1 1214538 . C T 13.99 PASS AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.76;MQ0=3;OQ=222.41;QD=22.24;SB=-119.99 GT:AD:DP:GL:GQ 1/1:1,9:7:-25.82,-2.11,-0.00:21.06
-chr1 1214556 . C T 78.88 PASS AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.62;MQ0=3;OQ=125.22;QD=13.91;SB=-42.55 GT:AD:DP:GL:GQ 1/1:2,7:4:-16.06,-1.21,-0.00:12.04
-chr1 1214569 . C T 4.09 PASS AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=21.21;MQ0=3;OQ=121.10;QD=17.30;SB=-81.10 GT:AD:DP:GL:GQ 1/1:3,4:4:-15.65,-1.21,-0.00:12.04
-chr1 1214849 . T C 10.83 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=11.01;MQ0=15;QD=0.39;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,8:6:-6.14,-1.81,-16.12:43.30
-chr1 1214919 . A T 0.53 PASS AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=20.32;MQ0=10;OQ=98.85;QD=4.94;SB=-69.74 GT:AD:DP:GL:GQ 0/1:10,9:7:-15.28,-2.11,-10.80:86.87
-chr1 1215102 . A T 1.26 PASS AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.90;MQ=20.59;MQ0=9;OQ=98.25;QD=4.91;SB=-47.98 GT:AD:DP:GL:GQ 0/1:4,16:7:-15.22,-2.11,-12.20:99
-chr1 1215147 . T C 24.78 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=2;HaplotypeScore=5.19;MQ=18.98;MQ0=32;QD=0.28;SB=-36.82 GT:AD:DP:GL:GQ 0/1:83,7:38:-17.21,-11.45,-127.57:57.61
-chr1 1215165 . C T 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=3.30;MQ=20.48;MQ0=21;OQ=101.26;QD=1.35;SB=26.10 GT:AD:DP:GL:GQ 0/1:48,27:30:-22.45,-9.04,-79.18:99
-chr1 1215324 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=4.60;MQ=26.05;MQ0=19;OQ=186.49;QD=2.49;SB=8.19 GT:AD:DP:GL:GQ 0/1:60,15:45:-35.50,-13.57,-130.76:99
-chr1 1227467 rs2296475 T C 67.24 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=59.44;MQ0=0;OQ=1380.81;QD=33.68;SB=-616.59 GT:AD:DP:GL:GQ 1/1:0,40:39:-141.68,-11.75,-0.01:99
-chr1 1227692 rs11586188 G A 13.68 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=2.73;MQ=60.00;MQ0=0;OQ=456.88;QD=14.74;SB=-204.92 GT:AD:DP:GL:GQ 0/1:15,16:30:-58.02,-9.04,-49.24:99
-chr1 1228900 . T C 25.48 LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=4;HaplotypeScore=1.75;MQ=56.48;MQ0=0;QD=0.75;SB=-20.62 GT:AD:DP:GL:GQ 0/1:26,7:28:-14.27,-8.44,-89.93:58.30
-chr1 1229202 rs11260584 T G 37.45 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=976.99;QD=27.91;SB=-499.87 GT:AD:DP:GL:GQ 1/1:0,35:32:-101.31,-9.64,-0.03:96.16
-chr1 1229816 rs10399878 A G 473.23 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1102.82;QD=26.90;SB=-522.83 GT:AD:DP:GL:GQ 1/1:0,41:37:-113.91,-11.17,-0.05:99
-chr1 1231392 rs1536168 A G 97.21 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.82;MQ0=0;OQ=1395.06;QD=27.90;SB=-606.94 GT:AD:DP:GL:GQ 1/1:0,50:45:-143.13,-13.57,-0.04:99
-chr1 1231663 rs3737720 A G 139.66 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.21;MQ=58.81;MQ0=0;OQ=1690.11;QD=30.73;SB=-679.26 GT:AD:DP:GL:GQ 1/1:0,55:50:-172.62,-15.06,-0.03:99
-chr1 1231766 rs3737719 C G 2.42 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=1.43;MQ=58.78;MQ0=0;OQ=1400.23;QD=36.85;SB=-370.18 GT:AD:DP:GL:GQ 1/1:0,38:34:-143.63,-10.26,-0.03:99
-chr1 1232078 rs4970431 A G 216.41 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1612.70;QD=32.91;SB=-685.61 GT:AD:DP:GL:GQ 1/1:0,49:46:-164.87,-13.86,-0.01:99
-chr1 1232570 rs2274262 A G 6.01 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=2.33;MQ=58.39;MQ0=0;OQ=927.22;QD=31.97;SB=-261.82 GT:AD:DP:GL:GQ 1/1:0,28:29:-99.47,-11.27,-3.16:81.12
-chr1 1232846 rs2887285 G A 7.05 PASS AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=60.00;MQ0=0;OQ=156.17;QD=26.03;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,5:5:-19.18,-1.51,-0.00:15.05
-chr1 1233759 rs61766198 C T 47.25 LowQual AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=23.62;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-8.13,-0.60,-0.00:6.02
-chr1 1235231 rs11590283 G A 557.67 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1461.68;QD=36.54;SB=-745.00 GT:AD:DP:GL:GQ 1/1:1,39:37:-149.76,-11.15,-0.01:99
-chr1 1235867 rs2296474 A G 712.67 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.51;MQ0=0;OQ=1812.39;QD=34.20;SB=-908.32 GT:AD:DP:GL:GQ 1/1:0,53:53:-184.85,-15.97,-0.02:99
-chr1 1237357 rs12103 T C 207.29 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=647.94;QD=29.45;SB=-286.45 GT:AD:DP:GL:GQ 1/1:0,22:21:-68.40,-6.33,-0.02:63.15
-chr1 1237452 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=10;HaplotypeScore=2.81;MQ=58.76;MQ0=0;OQ=54.80;QD=4.98;SB=-3.98 GT:AD:DP:GL:GQ 0/1:7,4:6:-10.58,-1.82,-11.64:87.64
-chr1 1239050 rs12142199 G A 66.55 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=1.62;MQ=58.97;MQ0=0;OQ=2440.21;QD=38.73;SB=-1144.03 GT:AD:DP:GL:GQ 1/1:1,62:62:-247.62,-18.68,-0.02:99
-chr1 1239352 . C G 26.31 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=58.82;MQ0=0;OQ=1214.59;QD=20.59;SB=-515.28 GT:AD:DP:GL:GQ 0/1:25,34:56:-141.62,-16.88,-95.25:99
-chr1 1242263 rs55998830 C T 160.41 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=57.24;MQ0=0;OQ=503.69;QD=12.29;SB=-134.60 GT:AD:DP:GL:GQ 0/1:23,18:39:-65.41,-11.76,-71.08:99
-chr1 1243999 rs4970432 G A 36.99 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=58.63;MQ0=0;OQ=2692.59;QD=39.60;SB=-1179.08 GT:AD:DP:GL:GQ 1/1:0,68:67:-272.86,-20.18,-0.01:99
-chr1 1244299 rs1886773 A G 203.79 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.11;MQ0=0;OQ=1463.44;QD=28.14;SB=-748.56 GT:AD:DP:GL:GQ 1/1:0,52:48:-149.98,-14.48,-0.05:99
-chr1 1244306 rs1886772 G A 170.95 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=58.89;MQ0=0;OQ=2428.21;QD=38.54;SB=-1150.05 GT:AD:DP:GL:GQ 1/1:0,63:62:-246.42,-18.68,-0.02:99
-chr1 1244704 rs10907179 C G 226.16 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=2474.22;QD=40.56;SB=-1116.55 GT:AD:DP:GL:GQ 1/1:0,61:58:-251.03,-17.48,-0.03:99
-chr1 1245150 rs10449892 C T 372.09 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1031.28;QD=35.56;SB=-512.17 GT:AD:DP:GL:GQ 1/1:0,29:28:-106.73,-8.44,-0.02:84.26
-chr1 1247456 rs1810745 A G 110.17 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=54.75;MQ0=0;OQ=1043.28;QD=28.20;SB=-313.49 GT:AD:DP:GL:GQ 1/1:0,37:33:-107.94,-9.95,-0.02:99
-chr1 1256339 rs28704486 A G 29.57 PASS AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=16.01;MQ0=0;OQ=60.16;QD=4.63;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,13:3:-9.51,-0.90,-0.00:9.02
-chr1 1258710 rs307378 T G 2.23 PASS AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=76.83;QD=25.61;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:3:-11.17,-0.90,-0.00:9.03
-chr1 1259417 rs307377 T C 101.96 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=21.92;MQ0=3;OQ=105.39;QD=15.06;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:4:-14.07,-1.20,-0.00:12.04
-chr1 1260192 rs188647 A G 29.27 LowQual AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=14.64;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-6.34,-0.60,-0.00:6.01
-chr1 1260222 rs307374 T C 0.04 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=63.98;QD=21.33;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:3:-9.89,-0.91,-0.00:9.02
-chr1 1262360 rs307372 A G 1.31 PASS AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.52;MQ=35.06;MQ0=0;OQ=290.20;QD=24.18;SB=-151.34 GT:AD:DP:GL:GQ 1/1:0,12:11:-32.62,-3.32,-0.02:33.05
-chr1 1262979 rs307371 A G 118.35 PASS AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.17;MQ0=0;OQ=96.93;QD=24.23;SB=-72.91 GT:AD:DP:GL:GQ 1/1:0,4:4:-13.23,-1.21,-0.00:12.03
-chr1 1263141 rs307370 A G 373.13 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.14;MQ0=0;OQ=479.19;QD=34.23;SB=-188.41 GT:AD:DP:GL:GQ 1/1:0,14:14:-51.51,-4.22,-0.00:42.13
-chr1 1265154 rs11582808 G A 10.31 PASS AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=44.52;MQ0=0;OQ=273.35;QD=19.53;SB=-116.97 GT:AD:DP:GL:GQ 0/1:5,9:13:-34.54,-3.92,-12.73:88.15
-chr1 1266341 rs307364 T G 24.11 PASS AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=1.44;MQ=22.99;MQ0=5;OQ=64.81;QD=5.40;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,10:3:-9.97,-0.90,-0.00:9.02
-chr1 1267396 rs17854636 T C 111.78 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=34.81;MQ0=1;OQ=372.39;QD=23.27;SB=-142.72 GT:AD:DP:GL:GQ 1/1:0,16:13:-40.84,-3.92,-0.02:39.08
-chr1 1268100 rs307361 T C 193.77 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.78;MQ0=3;OQ=449.98;QD=25.00;SB=-194.71 GT:AD:DP:GL:GQ 1/1:0,18:15:-48.59,-4.52,-0.01:45.11
-chr1 1268888 rs307360 A G 2.79 PASS AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=29.77;MQ0=0;OQ=268.28;QD=26.83;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:9:-30.42,-2.71,-0.01:27.07
-chr1 1270382 rs307358 T C 22.61 PASS AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=83.45;QD=20.86;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,4:4:-11.88,-1.21,-0.01:12.02
-chr1 1276604 . G C 27.05 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.66;MQ=11.97;MQ0=10;QD=1.29;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,12:4:-7.20,-1.21,-7.49:59.88
-chr1 1276657 rs35104845 C T 49.02 PASS AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=0;HaplotypeScore=2.90;MQ=23.40;MQ0=3;OQ=76.78;QD=6.98;SB=-10.00 GT:AD:DP:GL:GQ 1/1:5,5:3:-11.17,-0.90,-0.00:9.03
-chr1 1276684 rs61766214 G C 3.73 PASS AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=32.46;MQ0=2;OQ=374.70;QD=28.82;SB=-82.81 GT:AD:DP:GL:GQ 1/1:1,12:10:-41.06,-3.02,-0.01:30.10
-chr1 1276760 rs34380086 G C 256.91 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.61;MQ0=0;OQ=915.51;QD=35.21;SB=-194.53 GT:AD:DP:GL:GQ 1/1:0,26:24:-95.15,-7.24,-0.02:72.23
-chr1 1276990 rs56165241 G A 0.14 PASS AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=23.71;MQ0=1;OQ=124.88;QD=20.81;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,6:4:-16.02,-1.20,-0.00:12.04
-chr1 1278208 rs13249 A G 0.03 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=4;HaplotypeScore=0.79;MQ=29.00;MQ0=0;OQ=519.51;QD=34.63;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:15:-55.54,-4.52,-0.01:45.13
-chr1 1278334 rs3766183 C T 70.79 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=12.77;MQ0=25;OQ=129.88;QD=4.48;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,29:4:-16.52,-1.20,-0.00:12.04
-chr1 1279774 rs4970365 G A 205.12 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=37.02;MQ0=1;OQ=413.00;QD=27.53;SB=-81.33 GT:AD:DP:GL:GQ 1/1:0,15:12:-44.89,-3.62,-0.01:36.11
-chr1 1283627 rs34841888 G C 242.04 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=17.25;MQ0=18;OQ=165.64;QD=7.20;SB=-87.83 GT:AD:DP:GL:GQ 1/1:0,23:5:-20.13,-1.51,-0.00:15.05
-chr1 1284791 rs2649608 A G 15.70 PASS AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=325.53;QD=25.04;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,13:12:-36.15,-3.62,-0.02:36.07
-chr1 1285186 rs34389364 G A 48.74 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=44.84;MQ0=0;OQ=775.48;QD=28.72;SB=-269.63 GT:AD:DP:GL:GQ 1/1:0,25:23:-81.16,-6.94,-0.03:69.18
-chr1 1285266 rs34876581 T C 166.99 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=42.89;MQ0=0;OQ=1629.47;QD=31.95;SB=-823.96 GT:AD:DP:GL:GQ 1/1:0,51:47:-166.55,-14.16,-0.02:99
-chr1 1285545 rs61766236 A G 14.70 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=53.58;MQ0=0;OQ=756.88;QD=26.10;SB=-99.85 GT:AD:DP:GL:GQ 1/1:0,29:25:-79.29,-7.54,-0.02:75.15
-chr1 1285750 . T C 31.55 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=14.50;MQ0=6;QD=3.94;SB=-38.95 GT:AD:DP:GL:GQ 1/1:0,8:2:-6.56,-0.60,-0.00:6.01
-chr1 1286016 rs2765027 T G 82.17 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=481.12;QD=30.07;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,16:16:-51.71,-4.82,-0.01:48.07
-chr1 1286554 rs2765025 C G 315.48 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.90;MQ0=0;OQ=1204.51;QD=36.50;SB=-193.69 GT:AD:DP:GL:GQ 1/1:0,33:29:-124.04,-8.74,-0.01:87.29
-chr1 1286681 rs2765024 C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=715.35;QD=35.77;SB=-192.69 GT:AD:DP:GL:GQ 1/1:0,20:18:-75.13,-5.42,-0.01:54.18
-chr1 1286922 rs35056373 G A 454.44 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.41;MQ0=1;OQ=1368.71;QD=34.22;SB=-459.59 GT:AD:DP:GL:GQ 1/1:0,40:36:-140.48,-10.85,-0.02:99
-chr1 1287079 rs2649611 A G 142 PASS AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.17;MQ0=0;OQ=99.93;QD=24.98;SB=-76.36 GT:AD:DP:GL:GQ 1/1:0,4:4:-13.53,-1.21,-0.00:12.03
-chr1 1287285 rs2765021 C T 19.52 PASS AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=27.13;MQ0=1;OQ=211.29;QD=26.41;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:6:-24.70,-1.81,-0.00:18.06
-chr1 1287346 . G A 32.26 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.41;MQ=19.54;MQ0=6;QD=3.23;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,5:4:-7.72,-1.21,-5.84:46.31
-chr1 1287498 rs34896744 G A 28.51 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=522.90;QD=37.35;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,14:14:-55.88,-4.22,-0.00:42.14
-chr1 1288153 . C T 10.16 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=6.84;MQ0=17;QD=0.56;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,3:1:-4.26,-0.30,-0.00:1.76
-chr1 1288274 rs4970439 C T 158.39 PASS AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.76;MQ0=1;OQ=198.94;QD=24.87;SB=-120.99 GT:AD:DP:GL:GQ 1/1:0,8:6:-23.47,-1.81,-0.00:18.06
-chr1 1288396 rs9700464 T G 39.49 LowQual AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.48;MQ0=3;QD=7.90;SB=-46.01 GT:AD:DP:GL:GQ 1/1:0,5:2:-7.36,-0.60,-0.00:6.02
-chr1 1288400 rs2477784 C T 45.25 LowQual AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.37;MQ0=1;QD=15.08;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:2:-7.93,-0.60,-0.00:6.02
-chr1 1288965 . T C 42.83 LowQual AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=3;HaplotypeScore=1.16;MQ=15.81;MQ0=3;QD=8.57;SB=-10.00 GT:AD:DP:GL:GQ 1/1:3,2:2:-7.69,-0.60,-0.00:6.02
-chr1 1288989 . G A 32 LowQual AC=2;AF=1.00;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.68;MQ0=2;QD=8.00;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,2:2:-6.61,-0.60,-0.00:6.01
-chr1 1288993 . G A 39.02 LowQual AC=2;AF=1.00;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.68;MQ0=2;QD=9.75;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,2:2:-7.31,-0.60,-0.00:6.02
-chr1 1289038 . G A 46.02 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=8.33;MQ0=16;QD=2.56;SB=-10.00 GT:AD:DP:GL:GQ 1/1:16,2:2:-8.01,-0.60,-0.00:6.02
-chr1 1289229 rs28368296 C T 48.25 LowQual AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=16.08;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,2:2:-8.23,-0.60,-0.00:6.02
-chr1 1292190 . A C 28.74 DPFilter;HARD_TO_VALIDATE;Indel;LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=31.67;MQ=32.93;MQ0=5;QD=1.44;SB=2.03 GT:AD:DP:GL:GQ 0/1:14,6:12:-9.77,-3.62,-33.18:61.57
-chr1 1292271 rs61766242 A G 18.08 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=30.84;MQ0=4;OQ=1066.32;QD=26.66;SB=-193.80 GT:AD:DP:GL:GQ 1/1:0,40:32:-110.23,-9.64,-0.01:96.27
-chr1 1292418 rs3104610 C T 418.78 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=45.84;MQ0=1;OQ=2220.73;QD=38.96;SB=-760.52 GT:AD:DP:GL:GQ 1/1:0,57:55:-225.67,-16.57,-0.01:99
-chr1 1297501 rs2649597 T C 2.48 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.11;MQ0=4;OQ=360.28;QD=22.52;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,16:12:-39.62,-3.62,-0.01:36.08
-chr1 1298491 rs2477775 A G 32.28 LowQual AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=16.14;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-6.64,-0.60,-0.00:6.02
-chr1 1298734 rs2649595 A T 1.65 PASS AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.11;MQ0=1;OQ=88.08;QD=22.02;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,4:3:-12.30,-0.90,-0.00:9.03
-chr1 1300531 rs2242398 A C 250.70 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.82;MQ0=0;OQ=470.94;QD=31.40;SB=-111.01 GT:AD:DP:GL:GQ 1/1:0,15:15:-50.69,-4.52,-0.01:45.12
-chr1 1300838 rs2649594 C T 51.73 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.25;MQ0=5;OQ=315.14;QD=22.51;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,14:9:-35.10,-2.71,-0.01:27.08
-chr1 1300941 rs2649592 G T 12.43 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.29;MQ0=5;OQ=256.28;QD=18.31;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,14:8:-29.21,-2.41,-0.00:24.07
-chr1 1302674 rs34582295 C T 6.04 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=3.06;MQ=25.59;MQ0=11;OQ=374.66;QD=16.29;SB=-144.64 GT:AD:DP:GL:GQ 1/1:0,23:11:-41.06,-3.32,-0.01:33.10
-chr1 1303447 rs11489820 G C 2.99 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=7.53;MQ0=41;OQ=125.53;QD=2.73;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,46:4:-16.09,-1.21,-0.00:12.04
-chr1 1304035 rs2477777 C T 175.22 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=34.74;MQ0=4;OQ=578.49;QD=28.92;SB=-248.33 GT:AD:DP:GL:GQ 1/1:0,20:15:-61.44,-4.52,-0.00:45.15
-chr1 1304333 rs2313135 T G 34.29 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.98;MQ0=4;QD=4.90;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,2:3:-7.61,-0.90,-3.34:24.36
-chr1 1304907 rs2368566 G A 186.02 PASS AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.16;MQ0=0;OQ=83.01;QD=27.67;SB=-45.55 GT:AD:DP:GL:GQ 1/1:0,3:3:-11.79,-0.90,-0.00:9.03
-chr1 1305206 rs2368565 G A 178.76 PASS AC=2;AF=1.00;AN=2;DB;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=123.88;QD=30.97;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,4:4:-15.92,-1.20,-0.00:12.04
-chr1 1305756 rs2454652 C T 47.02 LowQual AC=2;AF=1.00;AN=2;DB;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=23.51;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-8.11,-0.60,-0.00:6.02
-chr1 1306033 rs2649587 G A 6.56 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=34.70;MQ0=1;OQ=503.12;QD=31.45;SB=-129.67 GT:AD:DP:GL:GQ 1/1:0,16:14:-53.90,-4.22,-0.01:42.13
-chr1 1306331 rs2649586 A G 0.26 PASS AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=29.00;MQ0=0;OQ=293.94;QD=24.50;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,11:10:-32.98,-3.01,-0.01:30.07
-chr1 1307502 . C G 13.29 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=4.50;MQ0=24;QD=0.49;SB=-10.00 GT:AD:DP:GL:GQ 0/1:26,1:1:-4.59,-0.30,-0.00:1.76
-chr1 1307925 . G C 0.13 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=13.45;MQ0=29;OQ=83.85;QD=1.78;SB=-0.97 GT:AD:DP:GL:GQ 0/1:38,9:8:-14.08,-2.41,-22.17:99
-chr1 1307979 . T C 42.83 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=7.67;MQ0=16;QD=2.38;SB=-10.00 GT:AD:DP:GL:GQ 1/1:13,5:2:-7.69,-0.60,-0.00:6.02
-chr1 1308095 . C G 10.99 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.17;HRun=1;HaplotypeScore=14.74;MQ=6.41;MQ0=25;QD=0.38;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,4:1:-4.35,-0.30,-0.00:1.76
-chr1 1321841 . G T 47.94 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=20;HaplotypeScore=6.03;MQ=23.98;MQ0=9;QD=1.65;SB=-0.97 GT:AD:DP:GL:GQ 0/1:18,11:6:-9.89,-1.81,-11.27:80.77
-chr1 1323299 rs1240743 C A 6.63 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=38.33;MQ0=6;OQ=144.07;QD=3.27;SB=50.03 GT:AD:DP:GL:GQ 0/1:30,14:36:-28.54,-10.85,-84.17:99
-chr1 1332475 rs2275915 G C 24.94 PASS AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=31.54;MQ0=6;OQ=92.26;QD=5.77;SB=-43.44 GT:AD:DP:GL:GQ 0/1:8,8:10:-15.53,-3.02,-24.58:99
-chr1 1346911 . G A 0.08 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=8.57;MQ=40.33;MQ0=2;OQ=331.50;QD=8.72;SB=-7.00 GT:AD:DP:GL:GQ 0/1:22,16:33:-46.38,-9.94,-72.87:99
-chr1 1349702 . C A 0.66 PASS AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=5.78;MQ=19.45;MQ0=7;OQ=297.18;QD=9.29;SB=-141.76 GT:AD:DP:GL:GQ 0/1:14,17:13:-36.92,-3.92,-7.86:39.43
-chr1 1352746 rs58304223 G C 14.25 LowQual AC=1;AF=0.50;AN=2;DB;DP=1;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=14.25;SB=-10.00 GT:AD:DP:GL:GQ 0/1:0,1:1:-4.69,-0.30,-0.00:1.76
-chr1 1353363 . G T 42.81 LowQual AC=2;AF=1.00;AN=2;DP=2;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=37.00;MQ0=0;QD=21.40;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-7.69,-0.60,-0.00:6.02
-chr1 1355197 rs1781138 A G 15.22 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=39.89;MQ0=3;OQ=305.23;QD=16.96;SB=-38.95 GT:AD:DP:GL:GQ 1/1:0,18:10:-34.11,-3.01,-0.00:30.08
-chr1 1358462 rs1240703 A C 0.99 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=3;HaplotypeScore=0.32;MQ=21.92;MQ0=3;OQ=100.91;QD=14.42;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:4:-13.63,-1.21,-0.00:12.03
-chr1 1358648 . C G 24.94 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=3;HaplotypeScore=2.70;MQ=19.30;MQ0=6;QD=1.19;SB=5.05 GT:AD:DP:GL:GQ 0/1:13,8:7:-7.89,-2.11,-21.96:57.76
-chr1 1377530 rs1781144 C G 16.31 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=20.51;MQ0=10;OQ=394.74;QD=19.74;SB=-103.85 GT:AD:DP:GL:GQ 1/1:0,20:10:-43.06,-3.01,-0.00:30.10
-chr1 1380491 . G A 10.40 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=6;HaplotypeScore=29.42;MQ=36.22;MQ0=8;QD=0.18;SB=26.07 GT:AD:DP:GL:GQ 0/1:33,26:17:-9.41,-5.13,-45.72:42.82
-chr1 1390605 rs1240723 T C 30.71 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.36;MQ=30.70;MQ0=2;OQ=239.92;QD=7.06;SB=-41.82 GT:AD:DP:GL:GQ 0/1:20,14:26:-35.12,-7.84,-56.30:99
-chr1 1390829 . C T 33.01 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=3;HaplotypeScore=8.88;MQ=28.73;MQ0=9;QD=1.00;SB=26.10 GT:AD:DP:GL:GQ 0/1:27,6:18:-12.01,-5.42,-52.81:65.84
-chr1 1394381 . T G 40.77 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=20.66;MQ0=17;QD=0.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:31,13:12:-10.98,-3.61,-30.75:73.61
-chr1 1398226 . C T 36.49 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=10.21;MQ0=21;QD=1.46;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,13:3:-7.84,-0.90,-3.10:21.92
-chr1 1410500 rs35871802 C T 116.85 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.49;MQ0=17;OQ=181.39;QD=6.05;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,18:11:-24.74,-3.31,-17.34:99
-chr1 1413144 . G A 12.73 PASS AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=22.29;MQ0=2;OQ=489.12;QD=14.82;SB=-131.14 GT:AD:DP:GL:GQ 0/1:17,16:30:-61.25,-9.05,-41.87:99
-chr1 1414249 . G C 31.95 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=2;HaplotypeScore=6.60;MQ=15.28;MQ0=13;QD=1.33;SB=-10.00 GT:AD:DP:GL:GQ 0/1:18,6:4:-7.69,-1.21,-7.60:63.89
-chr1 1423959 rs1781141 T G 30.05 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=21.23;MQ0=4;QD=1.58;SB=5.04 GT:AD:DP:GL:GQ 0/1:13,6:14:-10.50,-4.22,-40.36:62.88
-chr1 1424829 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=20;HaplotypeScore=5.78;MQ=28.83;MQ0=9;OQ=77.31;QD=1.98;SB=59.13 GT:AD:DP:GL:GQ 0/1:32,7:28:-19.45,-8.44,-75.28:99
-chr1 1424855 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=20;HaplotypeScore=4.13;MQ=29.08;MQ0=4;OQ=54.78;QD=1.96;SB=29.12 GT:AD:DP:GL:GQ 0/1:21,7:17:-13.88,-5.12,-48.25:87.62
-chr1 1425922 rs28755011 C T 122.75 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=53.56;MQ0=1;OQ=756.68;QD=16.45;SB=-222.92 GT:AD:DP:GL:GQ 0/1:21,25:43:-91.92,-12.96,-62.88:99
-chr1 1430132 rs3104609 A G 485.47 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=42.69;MQ0=1;OQ=1088.71;QD=31.11;SB=-534.36 GT:AD:DP:GL:GQ 1/1:0,35:33:-112.47,-9.94,-0.02:99
-chr1 1447936 rs3118507 A G 40.78 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=47.98;MQ0=0;OQ=209.16;QD=6.97;SB=-124.72 GT:AD:DP:GL:GQ 0/1:20,10:26:-32.03,-7.83,-67.04:99
-chr1 1450120 rs6603789 G C 0.59 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=28.41;MQ0=9;OQ=784.91;QD=23.09;SB=-55.93 GT:AD:DP:GL:GQ 1/1:6,28:20:-82.08,-6.03,-0.01:60.20
-chr1 1450953 rs3128345 A G 6.78 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=8.00;MQ=58.21;MQ0=0;OQ=533.48;QD=10.67;SB=-234.27 GT:AD:DP:GL:GQ 0/1:28,22:48:-71.10,-14.47,-106.23:99
-chr1 1457784 . T A 85.12 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.74;MQ0=0;OQ=950.58;QD=15.09;SB=-335.63 GT:AD:DP:GL:GQ 0/1:32,31:63:-117.32,-18.98,-122.45:99
-chr1 1458041 rs6694994 T C 138.18 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=49.26;MQ0=0;OQ=499.68;QD=12.19;SB=-117.64 GT:AD:DP:GL:GQ 0/1:20,21:38:-64.71,-11.46,-68.00:99
-chr1 1459409 rs3128344 G A 558.61 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.45;MQ0=0;OQ=1638.56;QD=37.24;SB=-778.68 GT:AD:DP:GL:GQ 1/1:0,43:42:-167.45,-12.65,-0.01:99
-chr1 1461502 . A C 42.07 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=2;HaplotypeScore=1.74;MQ=57.05;MQ0=0;QD=2.63;SB=14.06 GT:AD:DP:GL:GQ 0/1:8,8:12:-11.11,-3.62,-27.42:74.90
-chr1 1461910 rs3118505 C T 45.13 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.75;MQ=58.35;MQ0=0;OQ=649.92;QD=17.57;SB=-339.91 GT:AD:DP:GL:GQ 0/1:17,20:34:-78.52,-10.25,-48.35:99
-chr1 1462403 rs1571148 T G 289.59 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=414.06;QD=9.41;SB=-126.87 GT:AD:DP:GL:GQ 0/1:27,17:41:-57.04,-12.35,-89.89:99
-chr1 1462736 rs4259576 T A 334.86 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.42;MQ=60.00;MQ0=0;OQ=380.45;QD=11.19;SB=-195.57 GT:AD:DP:GL:GQ 0/1:20,14:33:-51.27,-9.94,-69.97:99
-chr1 1464030 rs1571149 A G 400.49 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=649.88;QD=11.01;SB=-311.08 GT:AD:DP:GL:GQ 0/1:30,29:55:-84.85,-16.58,-112.84:99
-chr1 1464167 rs1571150 C A 91.13 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.52;MQ0=0;OQ=665.06;QD=17.05;SB=-221.93 GT:AD:DP:GL:GQ 0/1:16,23:39:-81.54,-11.75,-55.47:99
-chr1 1464327 rs56239289 T C 341.41 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=731.44;QD=11.99;SB=-372.97 GT:AD:DP:GL:GQ 0/1:31,30:58:-93.91,-17.48,-117.75:99
-chr1 1464734 rs9439465 G C 86.71 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=410.54;QD=15.21;SB=-187.22 GT:AD:DP:GL:GQ 0/1:13,14:25:-51.89,-7.55,-46.69:99
-chr1 1468557 rs55694463 C G 72.40 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.11;MQ0=0;OQ=367.44;QD=14.13;SB=-116.67 GT:AD:DP:GL:GQ 0/1:13,13:22:-46.66,-6.63,-46.00:99
-chr1 1468920 rs61777888 A T 11.23 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=40.58;MQ0=0;QD=1.12;SB=2.00 GT:AD:DP:GL:GQ 0/1:8,2:6:-6.19,-1.81,-11.86:43.73
-chr1 1471211 rs3766177 T C 144.43 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=59.42;MQ0=0;OQ=424.79;QD=8.50;SB=-61.74 GT:AD:DP:GL:GQ 0/1:28,22:46:-59.63,-13.86,-111.57:99
-chr1 1472873 rs7517401 G A 289.79 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.75;MQ=59.55;MQ0=0;OQ=742.89;QD=14.57;SB=-367.87 GT:AD:DP:GL:GQ 0/1:27,24:48:-92.05,-14.47,-78.97:99
-chr1 1474833 rs7515814 C G 227.61 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.23;MQ0=0;OQ=1418.95;QD=20.87;SB=-692.35 GT:AD:DP:GL:GQ 0/1:30,38:67:-165.38,-20.20,-121.41:99
-chr1 1476697 rs3128342 C A 175.56 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=1.77;MQ=59.37;MQ0=0;OQ=1038.77;QD=15.74;SB=-518.96 GT:AD:DP:GL:GQ 0/1:32,34:66:-127.04,-19.88,-111.54:99
-chr1 1478935 rs3930748 A G 131.03 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=57.35;MQ0=0;OQ=678.62;QD=14.44;SB=-210.49 GT:AD:DP:GL:GQ 0/1:18,29:41:-83.51,-12.36,-58.93:99
-chr1 1479484 rs11590038 T C 187.36 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=60.00;MQ0=0;OQ=498.05;QD=12.45;SB=-267.61 GT:AD:DP:GL:GQ 0/1:17,23:38:-64.56,-11.47,-62.93:99
-chr1 1479489 rs11588893 C T 162.61 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=60.00;MQ0=0;OQ=580.48;QD=15.69;SB=-263.76 GT:AD:DP:GL:GQ 0/1:17,20:34:-71.58,-10.25,-50.12:99
-chr1 1479533 rs7531530 C T 220.27 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.91;MQ=59.18;MQ0=1;OQ=444.32;QD=12.01;SB=-149.64 GT:AD:DP:GL:GQ 0/1:19,18:31:-57.07,-9.35,-49.87:99
-chr1 1479791 rs7366884 T C 122.14 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=816.32;QD=13.61;SB=-418.23 GT:AD:DP:GL:GQ 0/1:30,30:57:-102.08,-17.17,-116.37:99
-chr1 1479937 rs7366635 A G 20.12 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.12;MQ=59.07;MQ0=0;OQ=292.89;QD=6.51;SB=-136.53 GT:AD:DP:GL:GQ 0/1:30,15:42:-45.23,-12.66,-112.08:99
-chr1 1480024 rs3753332 A G 36.05 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=1.31;MQ=59.44;MQ0=0;OQ=490.38;QD=11.96;SB=-170.97 GT:AD:DP:GL:GQ 0/1:21,20:37:-63.47,-11.15,-78.00:99
-chr1 1480095 rs3753331 T C 462.82 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=783.79;QD=15.07;SB=-339.35 GT:AD:DP:GL:GQ 0/1:24,28:51:-97.03,-15.37,-89.70:99
-chr1 1480422 rs3820075 A G 268.84 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=768.88;QD=14.24;SB=-360.10 GT:AD:DP:GL:GQ 0/1:23,31:53:-96.15,-15.98,-92.13:99
-chr1 1480490 rs3753330 T A 237.50 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.22;MQ0=0;OQ=615.93;QD=11.41;SB=-300.65 GT:AD:DP:GL:GQ 0/1:28,26:50:-79.94,-15.07,-101.11:99
-chr1 1480556 . C T 26.64 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=59.59;MQ0=0;OQ=854.85;QD=18.58;SB=-376.92 GT:AD:DP:GL:GQ 0/1:20,26:44:-102.04,-13.27,-56.58:99
-chr1 1481114 rs12048706 T C 201.19 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=57.91;MQ0=0;OQ=878.58;QD=11.87;SB=-292.17 GT:AD:DP:GL:GQ 0/1:36,38:70:-112.24,-21.10,-138.24:99
-chr1 1484218 rs3118509 T C 19.29 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1926.74;QD=28.76;SB=-881.49 GT:AD:DP:GL:GQ 1/1:0,67:60:-196.31,-18.09,-0.05:99
-chr1 1484946 rs6667347 G C 188.55 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.64;MQ0=0;OQ=1104.15;QD=17.25;SB=-384.86 GT:AD:DP:GL:GQ 0/1:33,31:63:-132.69,-18.99,-142.09:99
-chr1 1485056 rs3118508 A G 123.40 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.54;MQ0=0;OQ=1673.18;QD=28.36;SB=-768.59 GT:AD:DP:GL:GQ 1/1:0,59:54:-170.96,-16.29,-0.05:99
-chr1 1486871 rs3766170 T C 6.17 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=1.66;MQ=57.15;MQ0=0;OQ=440.82;QD=8.82;SB=-192.43 GT:AD:DP:GL:GQ 0/1:28,22:46:-61.23,-13.87,-105.72:99
-chr1 1488802 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=20;HaplotypeScore=27.79;MQ=52.29;MQ0=1;OQ=57.57;QD=0.82;SB=89.30 GT:AD:DP:GL:GQ 0/1:49,20:48:-23.51,-14.47,-151.88:90.40
-chr1 1489161 rs9439468 A G 111.48 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.15;MQ=56.25;MQ0=0;OQ=911.03;QD=16.56;SB=-250.50 GT:AD:DP:GL:GQ 0/1:21,34:50:-109.45,-15.06,-75.57:99
-chr1 1490804 rs6603791 A G 440.61 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=55.41;MQ0=0;OQ=778.85;QD=12.98;SB=-348.06 GT:AD:DP:GL:GQ 0/1:28,32:58:-98.65,-17.48,-110.76:99
-chr1 1490867 . C G 0.31 PASS AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=53.32;MQ0=0;OQ=206.00;QD=2.71;SB=-32.07 GT:AD:DP:GL:GQ 0/1:64,12:75:-46.49,-22.61,-271.24:99
-chr1 1490871 . A G 0.08 PASS AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.61;MQ=53.82;MQ0=0;OQ=220.05;QD=2.75;SB=-14.75 GT:AD:DP:GL:GQ 0/1:66,14:78:-48.79,-23.50,-263.73:99
-chr1 1490927 rs6656541 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=23.59;MQ=53.32;MQ0=0;OQ=1558.39;QD=20.51;SB=-788.78 GT:AD:DP:GL:GQ 0/1:23,53:74:-181.42,-22.29,-76.04:99
-chr1 1490930 rs12730242 C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=22.45;MQ=53.65;MQ0=0;OQ=417.53;QD=5.49;SB=-224.35 GT:AD:DP:GL:GQ 0/1:55,21:70:-66.13,-21.09,-238.86:99
-chr1 1490948 rs12742689 T C 0.19 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=53.98;MQ0=0;OQ=96.30;QD=1.23;SB=-34.35 GT:AD:DP:GL:GQ 0/1:66,12:72:-34.61,-21.70,-240.60:99
-chr1 1490950 rs12730248 C T 0.53 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=54.06;MQ0=0;OQ=172.01;QD=2.18;SB=-98.81 GT:AD:DP:GL:GQ 0/1:67,11:73:-45.59,-25.10,-225.19:99
-chr1 1491329 rs7543799 G A 29 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=5.33;MQ=58.37;MQ0=0;OQ=592.32;QD=13.16;SB=-320.34 GT:AD:DP:GL:GQ 0/1:24,21:38:-73.97,-11.45,-67.99:99
-chr1 1492958 rs7367692 G A 226.72 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=59.16;MQ0=0;OQ=759.07;QD=13.80;SB=-311.80 GT:AD:DP:GL:GQ 0/1:31,24:51:-94.56,-15.37,-89.99:99
-chr1 1492962 rs7364711 A C 163.84 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=59.20;MQ0=0;OQ=581.10;QD=10.02;SB=-270.86 GT:AD:DP:GL:GQ 0/1:35,23:56:-78.26,-16.87,-122.50:99
-chr1 1493671 rs11578409 C G 251.66 PASS AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=59.04;MQ0=0;OQ=1371.84;QD=13.45;SB=-443.87 GT:AD:DP:GL:GQ 0/1:57,45:96:-169.40,-28.93,-244.12:99
-chr1 1493791 rs7550471 G A 6.65 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=5.83;MQ=58.91;MQ0=0;OQ=1272.31;QD=21.21;SB=-593.09 GT:AD:DP:GL:GQ 0/1:20,38:56:-150.16,-19.64,-65.04:99
-chr1 1494423 rs7552586 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=6;HaplotypeScore=3.99;MQ=59.04;MQ0=0;OQ=1025.73;QD=12.36;SB=-469.22 GT:AD:DP:GL:GQ 0/1:45,38:80:-129.96,-24.11,-158.72:99
-chr1 1494904 rs6603792 T C 342.81 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=427.21;QD=9.94;SB=-158.94 GT:AD:DP:GL:GQ 0/1:24,19:43:-58.97,-12.96,-97.93:99
-chr1 1495118 rs6603793 C T 185.94 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=59.74;MQ0=0;OQ=1162.21;QD=15.92;SB=-407.71 GT:AD:DP:GL:GQ 0/1:38,35:73:-141.49,-21.99,-140.54:99
-chr1 1495830 rs7548959 C T 131.47 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=58.74;MQ0=0;OQ=1025.47;QD=14.65;SB=-444.99 GT:AD:DP:GL:GQ 0/1:38,32:69:-126.64,-20.81,-114.78:99
-chr1 1495898 rs7540231 G A 67.32 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=2;HaplotypeScore=1.75;MQ=58.44;MQ0=0;OQ=3508.72;QD=37.73;SB=-1621.33 GT:AD:DP:GL:GQ 1/1:0,92:90:-349.87,-27.12,-0.03:99
-chr1 1497229 rs9439469 G A 187.99 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.17;MQ0=0;OQ=210.39;QD=8.42;SB=-10.00 GT:AD:DP:GL:GQ 0/1:17,8:25:-31.85,-7.53,-57.26:99
-chr1 1497775 rs61774865 A C 52.62 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=53.97;MQ0=0;OQ=260.15;QD=7.88;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,13:31:-38.64,-9.34,-70.58:99
-chr1 1498322 rs9439473 A G 18.83 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=3.82;MQ=56.11;MQ0=0;OQ=610.76;QD=13.57;SB=-249.32 GT:AD:DP:GL:GQ 0/1:21,24:44:-77.63,-13.27,-79.03:99
-chr1 1498506 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=5;HaplotypeScore=2.45;MQ=50.85;MQ0=0;OQ=161.89;QD=3.37;SB=24.24 GT:AD:DP:GL:GQ 0/1:38,10:40:-31.52,-12.05,-112.23:99
-chr1 1498508 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=15;HaplotypeScore=1.82;MQ=51.05;MQ0=0;OQ=196.72;QD=4.01;SB=27.81 GT:AD:DP:GL:GQ 0/1:38,11:41:-35.31,-12.36,-104.62:99
-chr1 1498897 rs7520996 T C 291.45 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=56.74;MQ0=0;OQ=1344.56;QD=17.46;SB=-662.63 GT:AD:DP:GL:GQ 0/1:31,46:75:-160.33,-22.59,-123.58:99
-chr1 1499019 rs7518083 A G 453.47 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.97;MQ0=0;OQ=1144.84;QD=14.49;SB=-308.25 GT:AD:DP:GL:GQ 0/1:39,40:76:-140.66,-22.89,-155.49:99
-chr1 1499688 rs6666293 A G 47.16 LowQual AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=1.90;MQ=53.03;MQ0=0;QD=6.74;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,3:5:-9.51,-1.51,-8.01:65.07
-chr1 1500664 rs7519837 C T 335.96 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=543.75;QD=13.59;SB=-294.78 GT:AD:DP:GL:GQ 0/1:21,19:39:-69.41,-11.75,-74.55:99
-chr1 1500967 rs7556282 G C 209.02 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=56.81;MQ0=0;OQ=874.72;QD=17.85;SB=-362.79 GT:AD:DP:GL:GQ 0/1:21,27:44:-104.04,-13.28,-69.73:99
-chr1 1501107 rs4590622 G A 74.70 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.06;MQ=35.43;MQ0=2;OQ=406.87;QD=8.30;SB=-78.55 GT:AD:DP:GL:GQ 0/1:30,19:38:-55.43,-11.46,-75.84:99
-chr1 1501178 rs4618908 T C 437.65 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.31;MQ0=1;OQ=645.96;QD=14.68;SB=-291.48 GT:AD:DP:GL:GQ 0/1:19,25:40:-79.93,-12.05,-65.32:99
-chr1 1504046 . C T 7.57 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=59.17;MQ0=0;OQ=1022.24;QD=18.25;SB=-279.21 GT:AD:DP:GL:GQ 0/1:26,30:52:-121.18,-15.67,-71.09:99
-chr1 1504960 rs9331751 T A 36.07 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=4.88;MQ=56.51;MQ0=1;OQ=1100.76;QD=14.11;SB=-360.40 GT:AD:DP:GL:GQ 0/1:39,39:73:-135.35,-21.99,-132.17:99
-chr1 1506133 rs9442407 C T 139.40 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=35.12;MQ0=12;OQ=825.82;QD=11.16;SB=-394.16 GT:AD:DP:GL:GQ 0/1:42,32:54:-102.14,-16.28,-92.88:99
-chr1 1509564 rs9442406 T C 136.95 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=56.80;MQ0=0;OQ=711.41;QD=13.42;SB=-198.20 GT:AD:DP:GL:GQ 0/1:27,26:51:-89.79,-15.37,-103.56:99
-chr1 1510588 rs28788874 C T 634.33 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.10;MQ0=1;OQ=2154.00;QD=35.90;SB=-1071.35 GT:AD:DP:GL:GQ 1/1:0,60:56:-219.01,-16.88,-0.03:99
-chr1 1510832 rs6666084 A G 27.92 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=29.16;MQ0=1;OQ=863.94;QD=22.15;SB=-357.32 GT:AD:DP:GL:GQ 1/1:0,34:29:-93.05,-11.63,-3.07:85.61
-chr1 1511143 rs6679999 C T 270.78 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.32;MQ0=0;OQ=967.03;QD=37.19;SB=-287.88 GT:AD:DP:GL:GQ 1/1:0,26:25:-100.30,-7.53,-0.01:75.24
-chr1 1511216 . T A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.79;MQ=40.83;MQ0=0;OQ=921.95;QD=25.61;SB=-124.48 GT:AD:DP:GL:GQ 0/1:7,29:35:-106.02,-10.55,-27.02:99
-chr1 1511668 rs4648786 A G 87.12 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=58.14;MQ0=0;OQ=1843.13;QD=31.78;SB=-498.18 GT:AD:DP:GL:GQ 1/1:0,58:57:-187.94,-17.18,-0.05:99
-chr1 1511869 rs4648787 C T 29.58 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.56;MQ=56.20;MQ0=1;OQ=2155.57;QD=37.82;SB=-1079.94 GT:AD:DP:GL:GQ 1/1:1,56:55:-219.17,-16.58,-0.02:99
-chr1 1511922 rs4648612 C T 25.92 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=42.53;MQ0=1;OQ=1102.46;QD=35.56;SB=-299.68 GT:AD:DP:GL:GQ 1/1:1,30:28:-113.84,-8.43,-0.01:84.28
-chr1 1512199 rs4648613 T C 554.79 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.33;MQ0=0;OQ=1584.81;QD=33.02;SB=-688.28 GT:AD:DP:GL:GQ 1/1:0,48:45:-162.08,-13.55,-0.01:99
-chr1 1512230 rs28809773 G A 465.17 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=52.87;MQ0=0;OQ=1755.99;QD=36.58;SB=-748.51 GT:AD:DP:GL:GQ 1/1:0,48:45:-179.20,-13.56,-0.01:99
-chr1 1512325 . G A 85.65 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=55.47;MQ0=0;OQ=776.49;QD=14.65;SB=-378.86 GT:AD:DP:GL:GQ 0/1:28,24:51:-96.30,-15.37,-89.39:99
-chr1 1512595 rs4366263 A G 19.23 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=3.13;MQ=56.40;MQ0=0;OQ=1310.46;QD=34.49;SB=-610.36 GT:AD:DP:GL:GQ 1/1:0,38:38:-134.64,-11.45,-0.01:99
-chr1 1512656 rs28778974 C T 131.47 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=49.50;MQ0=1;OQ=1426.66;QD=34.80;SB=-730.49 GT:AD:DP:GL:GQ 1/1:1,40:37:-146.26,-11.15,-0.01:99
-chr1 1512790 rs61774869 C T 40.58 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=48.67;MQ0=1;OQ=1682.46;QD=36.58;SB=-840.63 GT:AD:DP:GL:GQ 1/1:2,44:43:-171.84,-12.95,-0.01:99
-chr1 1513302 rs9725077 G A 148.03 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=48.17;MQ0=1;OQ=1464.10;QD=34.05;SB=-687.33 GT:AD:DP:GL:GQ 1/1:1,42:38:-150.01,-11.45,-0.01:99
-chr1 1514300 rs9442423 T C 34.69 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.59;MQ0=0;OQ=266.23;QD=6.83;SB=-0.97 GT:AD:DP:GL:GQ 0/1:24,15:34:-40.16,-10.25,-85.89:99
-chr1 1514394 . C T 901.86 Indel AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.65;MQ0=0;QD=14.78;SB=-128.11 GT:AD:DP:GL:GQ 0/1:33,28:59:-111.26,-17.79,-98.57:99
-chr1 1514734 rs9442403 A G 0.24 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=12.23;MQ=53.49;MQ0=0;OQ=367.70;QD=7.99;SB=-54.31 GT:AD:DP:GL:GQ 0/1:25,19:37:-51.21,-11.16,-85.57:99
-chr1 1514861 . A T 164.64 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.34;MQ0=0;OQ=646.82;QD=13.76;SB=-331.07 GT:AD:DP:GL:GQ 0/1:25,22:46:-81.82,-13.86,-91.60:99
-chr1 1515925 rs6681422 T C 152.90 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=56.53;MQ0=0;OQ=534.97;QD=11.15;SB=-174.52 GT:AD:DP:GL:GQ 0/1:23,25:43:-69.74,-12.96,-84.05:99
-chr1 1516662 rs12735276 A G 21.98 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.05;MQ=57.32;MQ0=1;OQ=2133.75;QD=30.05;SB=-1092.47 GT:AD:DP:GL:GQ 1/1:2,69:66:-217.02,-19.91,-0.06:99
-chr1 1516946 rs10157140 T C 503.19 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.65;MQ0=0;OQ=1116.09;QD=14.69;SB=-475.23 GT:AD:DP:GL:GQ 0/1:37,39:76:-137.79,-22.90,-145.96:99
-chr1 1517815 . T C 151.98 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.19;MQ0=0;OQ=718.93;QD=11.41;SB=-330.87 GT:AD:DP:GL:GQ 0/1:32,31:61:-93.57,-18.39,-126.83:99
-chr1 1518089 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=19;HaplotypeScore=19.37;MQ=53.15;MQ0=1;OQ=397.54;QD=5.76;SB=50.30 GT:AD:DP:GL:GQ 0/1:45,23:60:-60.81,-17.78,-147.22:99
-chr1 1518109 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=82;Dels=0.01;HRun=19;HaplotypeScore=9.39;MQ=51.76;MQ0=1;OQ=216.06;QD=2.63;SB=62.19 GT:AD:DP:GL:GQ 0/1:54,27:58:-42.07,-17.18,-142.92:99
-chr1 1518112 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=77;Dels=0.01;HRun=4;HaplotypeScore=9.55;MQ=51.62;MQ0=1;OQ=92.02;QD=1.20;SB=65.18 GT:AD:DP:GL:GQ 0/1:56,20:51:-27.56,-15.07,-144.06:99
-chr1 1518863 rs12725297 G C 139.44 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=58.84;MQ0=0;OQ=1568.02;QD=18.67;SB=-365.83 GT:AD:DP:GL:GQ 0/1:39,45:81:-184.49,-24.41,-167.76:99
-chr1 1518975 rs12725449 G C 178.35 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.97;MQ0=0;OQ=2276.77;QD=38.59;SB=-1002.01 GT:AD:DP:GL:GQ 1/1:0,59:56:-231.29,-16.89,-0.03:99
-chr1 1519320 rs28566709 T C 64.56 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.25;MQ=59.59;MQ0=0;OQ=477.78;QD=8.53;SB=-190.61 GT:AD:DP:GL:GQ 0/1:33,23:51:-66.44,-15.38,-114.90:99
-chr1 1519374 rs28662991 T C 77.77 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=59.56;MQ0=0;OQ=635.95;QD=12.23;SB=-285.60 GT:AD:DP:GL:GQ 0/1:29,23:51:-82.25,-15.37,-108.55:99
-chr1 1519813 rs28503881 A G 211.45 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.02;MQ0=0;OQ=531.98;QD=8.58;SB=-234.91 GT:AD:DP:GL:GQ 0/1:35,27:58:-73.97,-17.49,-134.84:99
-chr1 1519842 rs4648788 T C 59.76 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=56.83;MQ0=0;OQ=1829.71;QD=27.72;SB=-554.05 GT:AD:DP:GL:GQ 1/1:0,66:57:-186.60,-17.18,-0.04:99
-chr1 1519857 . G C 3.15 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=5.53;MQ=56.98;MQ0=0;OQ=985.46;QD=15.64;SB=-338.06 GT:AD:DP:GL:GQ 0/1:28,35:57:-119.03,-17.20,-116.72:99
-chr1 1519861 rs28689700 C G 213.40 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=56.88;MQ0=0;OQ=841.97;QD=13.80;SB=-287.94 GT:AD:DP:GL:GQ 0/1:30,31:57:-104.69,-17.21,-125.41:99
-chr1 1520060 rs4648789 A C 15.22 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=4;HaplotypeScore=1.27;MQ=50.71;MQ0=0;OQ=838.47;QD=14.46;SB=-329.82 GT:AD:DP:GL:GQ 0/1:26,32:54:-103.41,-16.28,-79.25:99
-chr1 1520063 rs4648790 C T 336.83 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=51.65;MQ0=0;OQ=926.60;QD=15.19;SB=-418.36 GT:AD:DP:GL:GQ 0/1:30,31:60:-114.03,-18.08,-107.59:99
-chr1 1520195 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=113;Dels=0.02;HRun=0;HaplotypeScore=46.04;MQ=50.13;MQ0=3;OQ=55.61;QD=0.49;SB=110.40 GT:AD:DP:GL:GQ 0/1:96,14:92:-36.27,-27.42,-356.52:88.45
-chr1 1520222 . G A 94.09 SnpCluster AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=77.51;MQ=46.35;MQ0=0;QD=0.80;SB=-48.89 GT:AD:DP:GL:GQ 0/1:102,15:106:-44.62,-31.93,-348.40:99
-chr1 1520225 . G C 344.68 SnpCluster AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=69.75;MQ=44.94;MQ0=0;QD=2.92;SB=-153.13 GT:AD:DP:GL:GQ 0/1:100,18:110:-70.90,-33.15,-412.65:99
-chr1 1520229 . C G 412.05 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=94.26;MQ=43.35;MQ0=0;QD=3.41;SB=-151.44 GT:AD:DP:GL:GQ 0/1:103,18:106:-76.44,-31.95,-372.75:99
-chr1 1520237 . G C 91.10 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=128;Dels=0.05;HRun=0;HaplotypeScore=131.86;MQ=42.98;MQ0=0;QD=0.71;SB=13.51 GT:AD:DP:GL:GQ 0/1:106,16:113:-45.55,-33.15,-430.26:99
-chr1 1520238 rs61774873 T A 718.56 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.05;HRun=0;HaplotypeScore=125.70;MQ=43.01;MQ0=0;QD=5.75;SB=-75.62 GT:AD:DP:GL:GQ 0/1:71,41:100:-122.71,-47.57,-247.49:99
-chr1 1520243 . C G 225.05 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=118.32;MQ=42.36;MQ0=0;QD=1.77;SB=107.39 GT:AD:DP:GL:GQ 0/1:107,20:111:-59.26,-33.47,-404.28:99
-chr1 1520250 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=130;Dels=0.03;HRun=1;HaplotypeScore=70.65;MQ=43.20;MQ0=0;OQ=629.57;QD=4.84;SB=-297.59 GT:AD:DP:GL:GQ 0/1:85,37:107:-98.49,-32.25,-308.33:99
-chr1 1520281 rs61774874 G C 511.99 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=95.68;MQ=43.19;MQ0=0;QD=4.13;SB=-246.08 GT:AD:DP:GL:GQ 0/1:99,25:103:-85.52,-31.04,-362.79:99
-chr1 1520285 . G C 387.17 SnpCluster AC=1;AF=0.50;AN=2;DP=119;Dels=0.01;HRun=0;HaplotypeScore=65.61;MQ=43.42;MQ0=0;QD=3.25;SB=-155.15 GT:AD:DP:GL:GQ 0/1:98,20:100:-71.84,-29.84,-355.29:99
-chr1 1520289 rs62642589 C G 93.31 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=121;Dels=0.01;HRun=0;HaplotypeScore=35.98;MQ=43.17;MQ0=0;QD=0.77;SB=134.48 GT:AD:DP:GL:GQ 0/1:107,13:109:-45.17,-32.56,-411.19:99
-chr1 1520331 rs28654137 C G 48.96 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.01;HRun=0;HaplotypeScore=27.98;MQ=47.63;MQ0=0;QD=0.60;SB=18.43 GT:AD:DP:GL:GQ 0/1:72,9:75:-30.78,-22.60,-290.44:81.79
-chr1 1520344 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=73;Dels=0.01;HRun=0;HaplotypeScore=35.55;MQ=46.62;MQ0=0;OQ=147.13;QD=2.02;SB=-55.25 GT:AD:DP:GL:GQ 0/1:57,14:62:-36.39,-18.39,-179.58:99
-chr1 1520377 . C G 26.02 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=20.54;MQ=46.26;MQ0=1;QD=0.42;SB=59.22 GT:AD:DP:GL:GQ 0/1:52,10:48:-20.35,-14.47,-182.03:58.84
-chr1 1520381 rs28593368 C G 11.70 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=9.32;MQ=47.21;MQ0=1;QD=0.18;SB=37.38 GT:AD:DP:GL:GQ 0/1:58,8:56:-21.30,-16.87,-217.45:44.23
-chr1 1520469 rs11488585 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.01;HRun=0;HaplotypeScore=36.86;MQ=43.53;MQ0=4;OQ=2355.10;QD=23.55;SB=-1049.66 GT:AD:DP:GL:GQ 0/1:35,63:89:-265.31,-26.51,-115.33:99
-chr1 1520498 . G A 0.22 PASS AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=42.41;MQ0=4;OQ=313.12;QD=3.48;SB=-164.48 GT:AD:DP:GL:GQ 0/1:71,19:76:-57.51,-22.91,-206.14:99
-chr1 1520609 . G C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=16.97;MQ=45.11;MQ0=1;OQ=1017.74;QD=9.51;SB=-327.71 GT:AD:DP:GL:GQ 0/1:72,34:94:-133.38,-28.32,-275.79:99
-chr1 1520627 . T C 0.10 PASS AC=2;AF=1.00;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=10.65;MQ=46.29;MQ0=2;OQ=3224.03;QD=30.42;SB=-1396.99 GT:AD:DP:GL:GQ 1/1:0,101:93:-329.81,-30.68,-3.83:99
-chr1 1520757 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=47.64;MQ0=6;OQ=89.81;QD=0.88;SB=110.39 GT:AD:DP:GL:GQ 0/1:91,11:89:-39.08,-26.81,-310.80:99
-chr1 1520774 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=99;Dels=0.01;HRun=0;HaplotypeScore=56.31;MQ=48.08;MQ0=6;OQ=62.24;QD=0.63;SB=110.34 GT:AD:DP:GL:GQ 0/1:89,9:83:-34.23,-24.72,-231.51:95.08
-chr1 1520787 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=96;Dels=0.04;HRun=0;HaplotypeScore=27.20;MQ=49.95;MQ0=4;OQ=173.92;QD=1.81;SB=77.51 GT:AD:DP:GL:GQ 0/1:78,14:87:-45.69,-25.01,-305.10:99
-chr1 1520821 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=37.97;MQ=51.43;MQ0=1;OQ=216.93;QD=2.55;SB=101.36 GT:AD:DP:GL:GQ 0/1:69,16:80:-49.07,-24.10,-269.00:99
-chr1 1520848 . G A 0.20 PASS AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=50.21;MQ0=2;OQ=302.35;QD=3.44;SB=74.15 GT:AD:DP:GL:GQ 0/1:72,16:76:-56.43,-22.92,-203.92:99
-chr1 1520892 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=1;HaplotypeScore=71.05;MQ=51.39;MQ0=2;OQ=950.76;QD=9.51;SB=-387.75 GT:AD:DP:GL:GQ 0/1:63,37:86:-124.27,-25.91,-211.22:99
-chr1 1520953 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=74;Dels=0.01;HRun=0;HaplotypeScore=47.85;MQ=52.80;MQ0=2;OQ=265.98;QD=3.59;SB=-146.32 GT:AD:DP:GL:GQ 0/1:59,14:61:-47.97,-18.09,-205.99:99
-chr1 1520957 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=21.78;MQ=53.36;MQ0=2;OQ=105.70;QD=1.55;SB=-47.11 GT:AD:DP:GL:GQ 0/1:59,9:55:-30.43,-16.57,-209.84:99
-chr1 1520979 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=45.80;MQ=49.11;MQ0=2;OQ=234.58;QD=3.72;SB=-118.04 GT:AD:DP:GL:GQ 0/1:53,10:50:-41.81,-15.07,-172.68:99
-chr1 1521029 . C G 208.12 Indel AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=31.42;MQ=47.45;MQ0=1;QD=3.20;SB=-33.62 GT:AD:DP:GL:GQ 0/1:53,12:61:-42.48,-18.38,-218.36:99
-chr1 1521111 . C G 34.71 LowQual AC=1;AF=0.50;AN=2;DP=75;Dels=0.05;HRun=0;HaplotypeScore=51.94;MQ=49.50;MQ0=5;QD=0.46;SB=-34.07 GT:AD:DP:GL:GQ 0/1:62,9:60:-24.84,-18.09,-231.30:67.54
-chr1 1521139 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=19.29;MQ=49.73;MQ0=4;OQ=471.32;QD=8.42;SB=-237.06 GT:AD:DP:GL:GQ 0/1:38,18:43:-63.38,-12.96,-121.81:99
-chr1 1521149 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=50;Dels=0.04;HRun=0;HaplotypeScore=25.97;MQ=51.25;MQ0=5;OQ=94.80;QD=1.90;SB=0.71 GT:AD:DP:GL:GQ 0/1:42,6:42:-25.43,-12.66,-151.77:99
-chr1 1521416 . G A 908.87 Indel AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=49.66;MQ0=7;QD=12.12;SB=-403.37 GT:AD:DP:GL:GQ 0/1:47,28:66:-114.05,-19.88,-141.06:99
-chr1 1521692 . G A 0.94 PASS AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=9.14;MQ=58.40;MQ0=0;OQ=1252.37;QD=15.27;SB=-600.00 GT:AD:DP:GL:GQ 0/1:41,41:79:-152.32,-23.80,-150.35:99
-chr1 1521772 rs36210710 A G 0.25 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=15.96;MQ=57.04;MQ0=1;OQ=875.12;QD=13.46;SB=-359.37 GT:AD:DP:GL:GQ 0/1:32,33:57:-107.96,-17.17,-110.70:99
-chr1 1522125 rs28569178 A G 2.98 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=5.24;MQ=53.41;MQ0=0;OQ=1519.29;QD=31.65;SB=-783.99 GT:AD:DP:GL:GQ 1/1:0,48:43:-155.53,-12.95,-0.01:99
-chr1 1522142 rs35051391 A C 34.82 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=4.14;MQ=53.19;MQ0=0;OQ=509.94;QD=11.86;SB=-251.92 GT:AD:DP:GL:GQ 0/1:20,23:38:-65.73,-11.45,-61.61:99
-chr1 1522705 . C T 4.71 PASS AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=50.65;MQ0=0;OQ=133.19;QD=16.65;SB=-79.09 GT:AD:DP:GL:GQ 0/1:3,5:8:-19.01,-2.41,-10.59:81.80
-chr1 1524477 rs11552172 T C 56.64 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.17;MQ0=0;OQ=436.12;QD=15.58;SB=-113.68 GT:AD:DP:GL:GQ 0/1:12,16:28:-55.34,-8.44,-45.31:99
-chr1 1527039 rs4075469 A C 248.77 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.34;MQ0=0;OQ=696.22;QD=16.58;SB=-340.88 GT:AD:DP:GL:GQ 0/1:16,26:40:-84.95,-12.05,-59.28:99
-chr1 1527300 rs7554569 C T 296.92 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=424.42;QD=8.16;SB=-236.55 GT:AD:DP:GL:GQ 0/1:35,17:46:-59.60,-13.87,-96.44:99
-chr1 1527750 . C A 254.99 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=986.18;QD=16.71;SB=-374.21 GT:AD:DP:GL:GQ 0/1:26,33:55:-118.47,-16.57,-69.65:99
-chr1 1527909 . G A 103.61 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.52;MQ0=0;OQ=783.03;QD=16.31;SB=-358.36 GT:AD:DP:GL:GQ 0/1:23,25:47:-95.76,-14.17,-71.60:99
-chr1 1528300 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=10.61;MQ=58.05;MQ0=0;OQ=286.83;QD=5.98;SB=62.19 GT:AD:DP:GL:GQ 0/1:26,22:41:-44.32,-12.35,-90.74:99
-chr1 1529232 rs6656591 T C 65.49 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.39;MQ=56.33;MQ0=0;OQ=1005.79;QD=17.65;SB=-491.70 GT:AD:DP:GL:GQ 0/1:23,34:55:-120.43,-16.57,-83.35:99
-chr1 1529445 rs6691649 G A 161.84 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.46;MQ0=0;OQ=1057.94;QD=19.59;SB=-480.07 GT:AD:DP:GL:GQ 0/1:20,34:51:-124.45,-15.37,-67.92:99
-chr1 1529817 rs4075275 G C 15.87 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=2.13;MQ=58.35;MQ0=0;OQ=1607.65;QD=30.92;SB=-720.33 GT:AD:DP:GL:GQ 1/1:0,52:40:-164.38,-12.07,-0.03:99
-chr1 1530590 . C T 27.41 PASS AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=55.36;MQ0=0;OQ=363.07;QD=13.45;SB=-133.59 GT:AD:DP:GL:GQ 0/1:14,13:26:-47.43,-7.84,-42.81:99
-chr1 1530910 . G C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=6.92;MQ=37.58;MQ0=2;OQ=79.86;QD=5.32;SB=-10.00 GT:AD:DP:GL:GQ 0/1:7,8:5:-12.78,-1.51,-7.90:63.88
-chr1 1530912 . C G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=2;HaplotypeScore=4.15;MQ=38.11;MQ0=2;OQ=71.50;QD=5.11;SB=-6.99 GT:AD:DP:GL:GQ 0/1:4,10:6:-12.24,-1.81,-12.03:99
-chr1 1530952 . G C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=8.79;MQ=42.16;MQ0=2;OQ=53.35;QD=3.33;SB=-39.44 GT:AD:DP:GL:GQ 0/1:11,5:9:-11.33,-2.71,-25.48:86.19
-chr1 1530975 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=5.18;MQ=46.58;MQ0=0;OQ=57.06;QD=3.57;SB=5.04 GT:AD:DP:GL:GQ 0/1:12,4:12:-12.60,-3.61,-32.43:89.90
-chr1 1531008 . C G 10.82 LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=2;HaplotypeScore=6.64;MQ=46.16;MQ0=1;QD=0.52;SB=-26.85 GT:AD:DP:GL:GQ 0/1:16,5:11:-7.66,-3.33,-32.36:43.28
-chr1 1531060 . A C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=9.36;MQ=36.61;MQ0=1;OQ=116.93;QD=7.31;SB=-3.99 GT:AD:DP:GL:GQ 0/1:5,10:9:-17.69,-2.71,-12.57:98.57
-chr1 1531096 . C T 31.46 LowQual AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=8.94;MQ=35.04;MQ0=1;QD=3.15;SB=-6.99 GT:AD:DP:GL:GQ 0/1:5,5:4:-7.64,-1.21,-6.67:54.60
-chr1 1531214 . C T 12.58 LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=48.08;MQ0=0;QD=0.90;SB=-28.53 GT:AD:DP:GL:GQ 0/1:11,2:10:-7.53,-3.02,-23.43:45.17
-chr1 1531255 . G A 2.13 PASS AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=54.60;MQ0=0;OQ=208.62;QD=17.39;SB=-121.64 GT:AD:DP:GL:GQ 0/1:2,10:8:-26.44,-2.41,-2.60:1.87
-chr1 1531316 . A T 48.17 LowQual AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=48.85;MQ0=0;QD=2.01;SB=-30.94 GT:AD:DP:GL:GQ 0/1:15,8:14:-12.32,-4.22,-35.65:81.01
-chr1 1531334 . C T 13.43 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.16;MQ=45.60;MQ0=1;QD=0.56;SB=5.01 GT:AD:DP:GL:GQ 0/1:15,7:11:-7.93,-3.32,-25.96:46.07
-chr1 1531359 . G A 17.07 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=4.20;MQ=46.76;MQ0=1;QD=0.74;SB=11.04 GT:AD:DP:GL:GQ 0/1:19,4:19:-10.71,-5.73,-55.15:49.82
-chr1 1531380 . C G 42.65 LowQual AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=3;HaplotypeScore=7.66;MQ=46.38;MQ0=2;QD=1.42;SB=-45.68 GT:AD:DP:GL:GQ 0/1:23,7:24:-14.78,-7.24,-85.75:75.49
-chr1 1531419 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=2;HaplotypeScore=5.63;MQ=45.92;MQ0=1;OQ=63.73;QD=3.03;SB=23.10 GT:AD:DP:GL:GQ 0/1:16,5:18:-15.09,-5.43,-50.86:96.57
-chr1 1531527 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=2;HaplotypeScore=3.70;MQ=32.41;MQ0=1;OQ=75.08;QD=3.75;SB=-44.95 GT:AD:DP:GL:GQ 0/1:9,10:9:-13.51,-2.71,-17.78:99
-chr1 1531545 . G C 27.47 LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=8.08;MQ=36.24;MQ0=1;QD=1.37;SB=-32.85 GT:AD:DP:GL:GQ 0/1:18,2:9:-8.74,-2.71,-27.23:60.30
-chr1 1531547 . C G 25.49 LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=2;HaplotypeScore=8.42;MQ=36.81;MQ0=1;QD=1.34;SB=-27.40 GT:AD:DP:GL:GQ 0/1:14,5:6:-7.64,-1.81,-15.17:58.31
-chr1 1532873 rs9442420 T C 73.52 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.50;MQ0=0;OQ=1279.49;QD=27.81;SB=-597.57 GT:AD:DP:GL:GQ 1/1:0,46:41:-131.57,-12.37,-0.04:99
-chr1 1533487 rs61774903 T C 6.43 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=59.07;MQ0=0;OQ=267.71;QD=10.71;SB=-22.90 GT:AD:DP:GL:GQ 0/1:12,13:23:-36.99,-6.93,-45.73:99
-chr1 1533846 . C A 150.54 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=607.30;QD=13.20;SB=-294.38 GT:AD:DP:GL:GQ 0/1:23,23:45:-77.57,-13.56,-81.22:99
-chr1 1534313 . G A 286.31 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.20;MQ0=0;OQ=679.07;QD=15.09;SB=-355.53 GT:AD:DP:GL:GQ 0/1:22,23:43:-84.16,-12.97,-66.20:99
-chr1 1535152 rs6671612 G T 108.66 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=2.91;MQ=57.71;MQ0=0;OQ=838.64;QD=11.98;SB=-304.64 GT:AD:DP:GL:GQ 0/1:41,29:64:-106.43,-19.29,-110.69:99
-chr1 1536167 rs11492279 C T 248.42 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=60.00;MQ0=0;OQ=1040.79;QD=15.31;SB=-440.43 GT:AD:DP:GL:GQ 0/1:36,32:64:-126.65,-19.29,-102.67:99
-chr1 1536812 rs4612573 T C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.03;HRun=1;HaplotypeScore=39.15;MQ=49.08;MQ0=0;OQ=1478.03;QD=23.09;SB=-556.56 GT:AD:DP:GL:GQ 1/1:5,57:50:-162.89,-15.07,-11.50:35.64
-chr1 1537429 rs4369171 A G 1.14 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=7.54;MQ=57.32;MQ0=0;OQ=2121.87;QD=33.68;SB=-744.31 GT:AD:DP:GL:GQ 1/1:0,62:59:-215.79,-17.77,-0.02:99
-chr1 1537803 . G T 52.70 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=13;HaplotypeScore=28.28;MQ=58.09;MQ0=1;QD=0.71;SB=63.90 GT:AD:DP:GL:GQ 0/1:60,13:55:-25.14,-16.58,-155.96:85.54
-chr1 1537805 . T C 135.64 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=41.12;MQ=58.24;MQ0=1;QD=2.02;SB=15.89 GT:AD:DP:GL:GQ 0/1:57,10:56:-33.73,-16.88,-176.73:99
-chr1 1538333 . A G 136.38 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=58.86;MQ0=0;OQ=748.93;QD=13.87;SB=-356.58 GT:AD:DP:GL:GQ 0/1:27,27:53:-94.15,-15.98,-99.69:99
-chr1 1538565 rs9442431 T C 829.64 Indel AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=7.58;MQ=50.06;MQ0=1;QD=21.83;SB=-151.73 GT:AD:DP:GL:GQ 1/1:0,37:28:-86.58,-8.45,-0.03:84.18
-chr1 1538664 rs9442430 T C 1.04 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.01;HRun=1;HaplotypeScore=8.39;MQ=59.12;MQ0=0;OQ=2182.53;QD=31.63;SB=-555.08 GT:AD:DP:GL:GQ 1/1:0,68:67:-221.88,-20.20,-0.05:99
-chr1 1539012 rs34501155 C T 24.47 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=0.10;MQ=59.44;MQ0=0;OQ=1523.49;QD=20.31;SB=-698.38 GT:AD:DP:GL:GQ 0/1:29,46:74:-177.93,-22.30,-104.96:99
-chr1 1539217 rs12066 G A 112.48 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2269.66;QD=38.47;SB=-1077.37 GT:AD:DP:GL:GQ 1/1:0,59:57:-230.57,-17.17,-0.02:99
-chr1 1539583 . C T 13.58 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.17;MQ=59.69;MQ0=0;OQ=849.58;QD=14.16;SB=-408.41 GT:AD:DP:GL:GQ 0/1:34,26:60:-106.31,-18.07,-125.62:99
-chr1 1540565 rs4648611 A G 1.07 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=2;HaplotypeScore=4.13;MQ=58.95;MQ0=0;OQ=632.46;QD=28.75;SB=-329.75 GT:AD:DP:GL:GQ 1/1:0,22:20:-66.85,-6.03,-0.02:60.13
-chr1 1541790 rs7418389 T C 9.16 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=644.37;QD=28.02;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,23:21:-68.04,-6.33,-0.01:63.14
-chr1 1542618 rs6604985 T C 187.42 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.49;MQ0=0;OQ=2789.66;QD=34.02;SB=-860.05 GT:AD:DP:GL:GQ 1/1:0,82:81:-282.58,-24.40,-0.03:99
-chr1 1543361 rs28546565 G A 262.71 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.46;MQ0=0;OQ=627.76;QD=14.60;SB=-285.20 GT:AD:DP:GL:GQ 0/1:20,23:40:-78.11,-12.05,-70.94:99
-chr1 1543456 rs28623434 C G 8.50 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=2.93;MQ=59.20;MQ0=0;OQ=2332.23;QD=40.21;SB=-1030.14 GT:AD:DP:GL:GQ 1/1:0,58:55:-236.83,-16.57,-0.02:99
-chr1 1543533 rs9442410 G C 82.06 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=2713.47;QD=43.07;SB=-1108.14 GT:AD:DP:GL:GQ 1/1:0,63:62:-274.95,-18.68,-0.02:99
-chr1 1544225 rs9442425 G A 33.58 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.11;MQ=59.22;MQ0=0;OQ=1855.01;QD=38.65;SB=-869.17 GT:AD:DP:GL:GQ 1/1:0,48:47:-189.10,-14.16,-0.01:99
-chr1 1545229 rs9329576 T C 4.58 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=60.00;MQ0=0;OQ=1266.55;QD=28.15;SB=-625.18 GT:AD:DP:GL:GQ 1/1:0,45:39:-130.27,-11.76,-0.03:99
-chr1 1545852 rs7543265 G A 8.95 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=6.32;MQ=58.20;MQ0=0;OQ=611.29;QD=15.67;SB=-238.27 GT:AD:DP:GL:GQ 0/1:17,20:35:-74.97,-10.56,-46.23:99
-chr1 1546595 rs34983251 G A 45.65 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=59.23;MQ0=0;OQ=349.98;QD=11.67;SB=-133.57 GT:AD:DP:GL:GQ 0/1:16,14:26:-46.12,-7.83,-51.50:99
-chr1 1547538 rs28710339 G C 59.83 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=3.45;MQ=58.50;MQ0=0;OQ=866.08;QD=15.47;SB=-347.43 GT:AD:DP:GL:GQ 0/1:31,25:53:-105.89,-16.00,-107.63:99
-chr1 1547753 . C T 52.88 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.60;MQ0=0;OQ=1139.64;QD=19.99;SB=-512.06 GT:AD:DP:GL:GQ 0/1:22,35:54:-133.53,-16.28,-63.46:99
-chr1 1548655 rs12755088 T C 97.70 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=439.27;QD=24.40;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,18:16:-47.54,-4.84,-0.03:48.08
-chr1 1548983 . C G 40.73 LowQual AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=5;HaplotypeScore=1.58;MQ=47.12;MQ0=0;QD=6.79;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,5:2:-7.48,-0.61,-0.00:6.02
-chr1 1549329 rs28617190 G A 97.62 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.74;MQ=57.37;MQ0=0;OQ=547.08;QD=16.09;SB=-253.53 GT:AD:DP:GL:GQ 0/1:16,18:32:-67.63,-9.64,-54.05:99
-chr1 1549834 rs12748433 C T 442.94 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.23;MQ0=0;OQ=1400.65;QD=37.86;SB=-569.32 GT:AD:DP:GL:GQ 1/1:0,37:36:-143.66,-10.85,-0.01:99
-chr1 1549963 rs28441650 G A 319.81 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.05;MQ0=0;OQ=739.99;QD=15.10;SB=-342.91 GT:AD:DP:GL:GQ 0/1:25,24:48:-91.75,-14.47,-81.34:99
-chr1 1551048 . G A 13.72 PASS AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=55.20;MQ0=0;OQ=331.40;QD=13.81;SB=-96.94 GT:AD:DP:GL:GQ 0/1:12,12:21:-42.75,-6.33,-33.17:99
-chr1 1551194 . G A 9.75 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=59.45;MQ0=0;OQ=497.08;QD=14.62;SB=-108.95 GT:AD:DP:GL:GQ 0/1:18,16:33:-62.94,-9.95,-55.65:99
-chr1 1552758 rs12735861 C T 11.10 PASS AC=1;AF=0.50;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=56.58;MQ0=0;OQ=143.44;QD=15.94;SB=-6.99 GT:AD:DP:GL:GQ 0/1:3,6:8:-20.04,-2.41,-9.16:67.50
-chr1 1553652 . C A 57.28 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=59.52;MQ0=0;OQ=736.76;QD=15.35;SB=-347.43 GT:AD:DP:GL:GQ 0/1:23,25:44:-90.22,-13.26,-60.84:99
-chr1 1554057 rs3935032 C T 0.35 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=59.31;MQ0=0;OQ=580.92;QD=21.52;SB=-104.60 GT:AD:DP:GL:GQ 0/1:9,18:26:-69.21,-7.83,-32.29:99
-chr1 1555931 rs28730454 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=7;HaplotypeScore=0.32;MQ=55.21;MQ0=0;OQ=59.16;QD=11.83;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:3:-9.41,-0.90,-0.00:9.02
-chr1 1556023 rs28464684 T C 13.91 PASS AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=73.72;QD=24.57;SB=-40.68 GT:AD:DP:GL:GQ 1/1:0,3:3:-10.86,-0.90,-0.00:9.03
-chr1 1556952 rs28451771 T C 12.66 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=601.05;QD=31.63;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,19:19:-63.70,-5.72,-0.01:57.14
-chr1 1561503 rs61774909 G T 0.68 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=9.65;MQ0=29;OQ=78.96;QD=2.47;SB=-10.00 GT:AD:DP:GL:GQ 1/1:16,16:3:-11.38,-0.90,-0.00:9.03
-chr1 1563882 rs61774911 A G 1.20 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=39.06;MQ0=5;OQ=124.38;QD=2.76;SB=-85.66 GT:AD:DP:GL:GQ 0/1:34,10:35:-26.27,-10.55,-104.24:99
-chr1 1563939 rs9442413 G A 8.49 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=40.26;MQ0=2;OQ=315.22;QD=4.50;SB=-153.56 GT:AD:DP:GL:GQ 0/1:51,19:59:-52.60,-17.79,-143.72:99
-chr1 1564183 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=20;HaplotypeScore=14.98;MQ=46.49;MQ0=5;OQ=64.66;QD=1.80;SB=35.13 GT:AD:DP:GL:GQ 0/1:31,5:28:-18.18,-8.44,-79.86:97.49
-chr1 1564572 rs28401288 T G 29.42 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=41.92;MQ0=1;OQ=1158.48;QD=27.58;SB=-476.97 GT:AD:DP:GL:GQ 1/1:0,42:35:-119.45,-10.55,-0.02:99
-chr1 1565479 rs28394074 T C 98.76 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=12.86;MQ0=16;OQ=207.25;QD=7.68;SB=-36.94 GT:AD:DP:GL:GQ 1/1:0,27:7:-24.31,-2.11,-0.00:21.06
-chr1 1565699 . C G 5.41 PASS AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=1;HaplotypeScore=2.34;MQ=26.47;MQ0=10;OQ=657.44;QD=8.65;SB=-346.42 GT:AD:DP:GL:GQ 0/1:55,21:62:-87.73,-18.71,-164.80:99
-chr1 1566499 rs3765908 G A 18.31 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.75;MQ=37.81;MQ0=3;OQ=1730.84;QD=29.34;SB=-752.15 GT:AD:DP:GL:GQ 1/1:8,51:54:-192.27,-16.27,-15.84:4.30
-chr1 1566866 rs3819995 C T 33.13 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=17.30;MQ0=34;OQ=418.63;QD=7.34;SB=-10.00 GT:AD:DP:GL:GQ 0/1:21,36:18:-50.57,-5.43,-18.99:99
-chr1 1567043 rs1137001 C T 0.22 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=9.65;MQ0=38;OQ=66.77;QD=1.34;SB=-10.00 GT:AD:DP:GL:GQ 0/1:35,15:6:-11.77,-1.81,-10.91:90.99
-chr1 1569585 rs61774912 C T 0.10 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=1;HaplotypeScore=8.98;MQ=13.84;MQ0=43;OQ=132.92;QD=1.51;SB=-3.99 GT:AD:DP:GL:GQ 0/1:64,24:26:-24.41,-7.83,-74.67:99
-chr1 1569917 rs6688326 C A 0.25 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=26.34;MQ0=26;OQ=227.69;QD=3.04;SB=-87.75 GT:AD:DP:GL:GQ 0/1:58,17:44:-39.31,-13.26,-117.30:99
-chr1 1570601 rs4648767 T A 243.47 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=24.85;MQ0=18;OQ=1006.84;QD=11.57;SB=-380.53 GT:AD:DP:GL:GQ 0/1:42,45:58:-121.45,-17.48,-87.58:99
-chr1 1570928 . G C 0.90 PASS AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=0;HaplotypeScore=3.62;MQ=32.27;MQ0=14;OQ=845.01;QD=5.52;SB=-333.79 GT:AD:DP:GL:GQ 0/1:113,40:123:-124.85,-37.07,-408.45:99
-chr1 1570959 . C T 0.27 PASS AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=2;HaplotypeScore=4.89;MQ=34.90;MQ0=12;OQ=2272.40;QD=13.77;SB=-727.55 GT:AD:DP:GL:GQ 0/1:85,80:144:-273.90,-43.38,-268.43:99
-chr1 1571421 rs61774913 C T 442.63 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.06;MQ0=31;OQ=744.27;QD=14.31;SB=-218.78 GT:AD:DP:GL:GQ 1/1:0,52:19:-78.02,-5.72,-0.00:57.19
-chr1 1571449 rs61774914 T C 385.68 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=19.48;MQ0=37;OQ=993.50;QD=14.19;SB=-324.14 GT:AD:DP:GL:GQ 1/1:0,70:28:-102.94,-8.43,-0.01:84.26
-chr1 1571467 . G A 0.11 PASS AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=5.46;MQ=31.83;MQ0=25;OQ=330.51;QD=3.76;SB=-146.19 GT:AD:DP:GL:GQ 0/1:69,19:55:-52.91,-16.58,-135.58:99
-chr1 1571576 . A C 50.03 PASS AC=2;AF=1.00;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=35.58;MQ0=13;OQ=1974.59;QD=21.23;SB=-847.56 GT:AD:DP:GL:GQ 1/1:0,61:79:-282.59,-90.56,-81.54:90.13
-chr1 1571744 rs61774916 T C 0.32 PASS AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=43.65;MQ0=18;OQ=618.53;QD=4.99;SB=-195.46 GT:AD:DP:GL:GQ 0/1:91,33:103:-96.17,-31.03,-294.76:99
-chr1 1571789 rs61774917 G T 99.17 PASS AC=1;AF=0.50;AN=2;DB;DP=114;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=40.38;MQ0=17;OQ=858.73;QD=7.53;SB=-166.41 GT:AD:DP:GL:GQ 0/1:66,48:94:-117.47,-28.31,-223.12:99
-chr1 1571821 rs4279785 T C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=33.09;MQ0=22;OQ=74.70;QD=0.60;SB=13.40 GT:AD:DP:GL:GQ 0/1:103,22:85:-36.35,-25.60,-306.33:99
-chr1 1571969 rs4648753 T C 252.37 PASS AC=2;AF=1.00;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.21;MQ0=23;OQ=2308.47;QD=23.08;SB=-928.73 GT:AD:DP:GL:GQ 1/1:1,99:73:-234.50,-22.02,-0.07:99
-chr1 1572065 rs61774918 C T 271.62 PASS AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=40.98;MQ0=5;OQ=1993.46;QD=16.08;SB=-715.20 GT:AD:DP:GL:GQ 0/1:57,67:116:-237.58,-34.95,-201.11:99
-chr1 1572318 rs61774919 G A 28.59 PASS AC=1;AF=0.50;AN=2;DB;DP=173;Dels=0.00;HRun=0;HaplotypeScore=4.27;MQ=26.57;MQ0=15;OQ=1639.76;QD=9.48;SB=-550.56 GT:AD:DP:GL:GQ 0/1:104,69:121:-203.75,-36.49,-222.67:99
-chr1 1572479 . T C 0.14 PASS AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=45.14;MQ0=0;OQ=1750.04;QD=12.24;SB=-888.87 GT:AD:DP:GL:GQ 0/1:83,60:141:-220.76,-42.47,-332.08:99
-chr1 1572504 . T C 0.71 PASS AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=42.33;MQ0=3;OQ=1049.29;QD=7.72;SB=-546.16 GT:AD:DP:GL:GQ 0/1:84,52:129:-147.09,-38.88,-337.66:99
-chr1 1572657 rs4648754 C A 97.80 PASS AC=2;AF=1.00;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=39.40;MQ0=0;OQ=4131.60;QD=35.01;SB=-1448.13 GT:AD:DP:GL:GQ 1/1:1,117:114:-412.16,-34.34,-0.04:99
-chr1 1572704 rs61774920 A G 0.40 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=29.04;MQ0=13;OQ=131.71;QD=1.78;SB=23.25 GT:AD:DP:GL:GQ 0/1:54,20:56:-33.33,-16.87,-184.69:99
-chr1 1572707 rs61774921 G T 0.96 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=28.52;MQ0=13;OQ=177.56;QD=2.50;SB=-37.61 GT:AD:DP:GL:GQ 0/1:52,19:55:-37.61,-16.57,-159.55:99
-chr1 1572743 rs3820000 G C 38.18 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.84;MQ0=19;OQ=650.68;QD=7.75;SB=38.16 GT:AD:DP:GL:GQ 0/1:50,34:58:-85.85,-17.49,-156.24:99
-chr1 1572824 rs3820001 G C 184.22 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=41.82;MQ0=4;OQ=1359.68;QD=17.43;SB=-597.25 GT:AD:DP:GL:GQ 0/1:31,47:67:-159.47,-20.22,-110.10:99
-chr1 1572866 rs61776849 C T 39.28 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=4.48;MQ=49.73;MQ0=0;OQ=1155.72;QD=12.70;SB=-351.36 GT:AD:DP:GL:GQ 0/1:50,41:84:-144.17,-25.32,-161.47:99
-chr1 1572951 . A G 0.08 PASS AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=47.33;MQ0=7;OQ=238.29;QD=2.91;SB=26.27 GT:AD:DP:GL:GQ 0/1:60,22:73:-49.11,-21.99,-235.06:99
-chr1 1573358 rs61774952 T C 32.21 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=47.33;MQ0=8;QD=0.37;SB=67.42 GT:AD:DP:GL:GQ 0/1:70,16:71:-27.89,-21.39,-252.84:65.04
-chr1 1573532 . C T 35.47 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=10.41;MQ0=15;QD=1.97;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,3:3:-7.73,-0.90,-3.80:28.93
-chr1 1573550 . T C 24.36 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=33.97;MQ0=17;QD=0.72;SB=-17.89 GT:AD:DP:GL:GQ 0/1:23,11:14:-9.94,-4.22,-42.08:57.18
-chr1 1573618 . C T 2.54 PASS AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=5.35;MQ=45.15;MQ0=15;OQ=814.16;QD=7.75;SB=-232.64 GT:AD:DP:GL:GQ 0/1:66,38:82:-109.43,-24.73,-173.93:99
-chr1 1573625 . G A 3.56 PASS AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=45.17;MQ0=14;OQ=654.74;QD=6.18;SB=-207.09 GT:AD:DP:GL:GQ 0/1:70,36:84:-94.09,-25.34,-189.03:99
-chr1 1573865 rs6691927 A G 0.48 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=13.93;MQ=47.63;MQ0=8;OQ=1026.45;QD=17.40;SB=-411.69 GT:AD:DP:GL:GQ 0/1:13,46:46:-119.80,-13.87,-37.07:99
-chr1 1573965 rs28525262 G A 126.85 PASS AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=48.13;MQ0=7;OQ=3091.70;QD=33.97;SB=-1505.87 GT:AD:DP:GL:GQ 1/1:7,83:80:-316.25,-24.10,-3.49:99
-chr1 1573980 rs4648756 G C 18.18 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=4.39;MQ=47.15;MQ0=6;OQ=3392.36;QD=38.99;SB=-1642.01 GT:AD:DP:GL:GQ 1/1:0,87:79:-338.24,-23.81,-0.03:99
-chr1 1574055 rs4648606 G A 59.73 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=37.73;MQ0=7;OQ=2424.32;QD=33.21;SB=-1231.00 GT:AD:DP:GL:GQ 1/1:0,72:61:-246.03,-18.38,-0.02:99
-chr1 1574081 rs4648607 T C 84.11 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=40.76;MQ0=4;OQ=2240.23;QD=31.55;SB=-1072.45 GT:AD:DP:GL:GQ 1/1:0,71:63:-227.63,-18.98,-0.02:99
-chr1 1574087 rs4648757 G C 98.21 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=43.14;MQ0=1;OQ=2791.35;QD=39.31;SB=-1268.99 GT:AD:DP:GL:GQ 1/1:0,71:65:-282.74,-19.59,-0.02:99
-chr1 1574123 . A C 149.77 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=169.77;MQ=39.72;MQ0=1;QD=1.63;SB=83.29 GT:AD:DP:GL:GQ 0/1:79,13:73:-40.25,-21.99,-225.95:99
-chr1 1574124 . A G 50.98 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=170.51;MQ=39.99;MQ0=1;QD=0.55;SB=86.31 GT:AD:DP:GL:GQ 0/1:80,13:72:-30.08,-21.70,-250.90:83.81
-chr1 1574131 . A G 472.59 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=2;HaplotypeScore=66.93;MQ=41.08;MQ0=1;QD=5.25;SB=86.31 GT:AD:DP:GL:GQ 0/1:61,29:78:-74.04,-23.50,-234.93:99
-chr1 1574135 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=78.57;MQ=41.20;MQ0=1;OQ=155.65;QD=1.75;SB=86.32 GT:AD:DP:GL:GQ 0/1:76,13:71:-40.23,-21.39,-240.65:99
-chr1 1574143 . A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=43.74;MQ0=1;OQ=78.06;QD=1.07;SB=89.31 GT:AD:DP:GL:GQ 0/1:60,13:65:-30.68,-19.59,-219.52:99
-chr1 1574152 . C T 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=43.30;MQ0=0;OQ=130.78;QD=1.92;SB=41.52 GT:AD:DP:GL:GQ 0/1:58,10:59:-34.15,-17.79,-160.93:99
-chr1 1574339 . T A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=12.88;MQ=42.39;MQ0=0;OQ=429.14;QD=5.50;SB=104.35 GT:AD:DP:GL:GQ 0/1:59,19:76:-69.09,-22.90,-217.44:99
-chr1 1574367 rs12749208 C T 7.96 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=36.29;MQ0=0;OQ=733.94;QD=10.48;SB=80.18 GT:AD:DP:GL:GQ 0/1:43,27:66:-96.58,-19.90,-132.61:99
-chr1 1574398 rs12756960 A G 17.43 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=34.26;MQ0=0;QD=0.28;SB=39.57 GT:AD:DP:GL:GQ 0/1:29,33:32:-14.67,-9.65,-103.72:50.18
-chr1 1574404 rs12756961 A T 204.46 Indel AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=35.46;MQ0=0;QD=3.01;SB=-19.65 GT:AD:DP:GL:GQ 0/1:32,36:41:-36.08,-12.35,-112.04:99
-chr1 1574410 rs12749336 C G 884.89 Indel AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=10.32;MQ=35.72;MQ0=0;QD=12.82;SB=-17.81 GT:AD:DP:GL:GQ 0/1:40,29:35:-102.33,-10.56,-39.37:99
-chr1 1574434 rs61774954 A C 428.65 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=8.25;MQ=34.95;MQ0=1;QD=6.30;SB=56.20 GT:AD:DP:GL:GQ 0/1:39,29:57:-63.32,-17.18,-124.62:99
-chr1 1574437 rs61774955 A C 431.78 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=7.93;MQ=34.95;MQ0=1;QD=6.35;SB=56.19 GT:AD:DP:GL:GQ 0/1:38,30:51:-61.82,-15.36,-118.50:99
-chr1 1574456 rs12749364 C A 1380.74 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=20.46;MQ=37.20;MQ0=1;QD=17.26;SB=-577.01 GT:AD:DP:GL:GQ 1/1:30,50:46:-152.08,-13.86,-10.42:34.36
-chr1 1574458 . G C 45.27 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=79;Dels=0.01;HRun=0;HaplotypeScore=10.44;MQ=37.76;MQ0=1;QD=0.57;SB=71.27 GT:AD:DP:GL:GQ 0/1:52,26:51:-22.87,-15.06,-200.14:78.10
-chr1 1574459 . G A 19.52 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=78;Dels=0.01;HRun=1;HaplotypeScore=9.38;MQ=37.85;MQ0=1;QD=0.25;SB=68.24 GT:AD:DP:GL:GQ 0/1:50,27:51:-20.29,-15.06,-165.60:52.31
-chr1 1574490 . C T 446.32 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=13.97;MQ=40.46;MQ0=1;QD=6.11;SB=62.20 GT:AD:DP:GL:GQ 0/1:48,25:59:-65.69,-17.77,-151.07:99
-chr1 1574491 . A G 363.54 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=40.79;MQ0=1;QD=4.91;SB=65.24 GT:AD:DP:GL:GQ 0/1:48,26:58:-57.11,-17.48,-164.32:99
-chr1 1574495 . G A 435.54 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=16.96;MQ=40.97;MQ0=1;QD=5.73;SB=65.16 GT:AD:DP:GL:GQ 0/1:50,26:61:-65.23,-18.39,-146.68:99
-chr1 1574611 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=41.66;MQ0=2;OQ=80.08;QD=1.13;SB=68.24 GT:AD:DP:GL:GQ 0/1:54,17:60:-29.38,-18.09,-195.87:99
-chr1 1574622 . G A 0.30 PASS AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=40.91;MQ0=2;OQ=251.34;QD=3.44;SB=59.11 GT:AD:DP:GL:GQ 0/1:55,18:61:-46.81,-18.39,-160.50:99
-chr1 1574627 . C T 0.19 PASS AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=42.21;MQ0=2;OQ=221.98;QD=2.88;SB=74.24 GT:AD:DP:GL:GQ 0/1:61,16:67:-45.68,-20.20,-184.31:99
-chr1 1574705 rs12753686 C T 533.95 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=47.26;MQ0=1;OQ=2577.15;QD=38.46;SB=-1301.71 GT:AD:DP:GL:GQ 1/1:1,66:64:-261.31,-19.28,-0.01:99
-chr1 1574781 rs12753729 C T 0.96 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=7.51;MQ=55.74;MQ0=0;OQ=2039.46;QD=37.77;SB=-910.24 GT:AD:DP:GL:GQ 1/1:1,53:52:-207.55,-15.67,-0.02:99
-chr1 1575120 rs4648758 A G 435.58 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.79;MQ0=0;OQ=1070.30;QD=28.93;SB=-511.19 GT:AD:DP:GL:GQ 1/1:0,37:35:-110.65,-10.56,-0.04:99
-chr1 1575210 rs4648760 T C 43.48 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=63.90;MQ0=0;OQ=1693.31;QD=34.56;SB=-784.12 GT:AD:DP:GL:GQ 1/1:0,49:49:-172.94,-14.76,-0.02:99
-chr1 1575251 rs4648761 A G 5.46 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.80;MQ0=0;OQ=1436.67;QD=28.17;SB=-671.85 GT:AD:DP:GL:GQ 1/1:0,51:45:-147.29,-13.57,-0.04:99
-chr1 1575460 rs7531938 A G 536.50 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.20;MQ0=0;OQ=2059.81;QD=30.29;SB=-875.65 GT:AD:DP:GL:GQ 1/1:0,68:66:-209.63,-19.91,-0.06:99
-chr1 1575505 rs3936009 G T 209.53 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=57.75;MQ0=0;OQ=2310.00;QD=35.54;SB=-1127.37 GT:AD:DP:GL:GQ 1/1:0,65:65:-234.60,-19.58,-0.02:99
-chr1 1576615 rs11486023 T C 106.32 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.19;MQ0=0;OQ=1526.39;QD=31.15;SB=-484.14 GT:AD:DP:GL:GQ 1/1:0,49:47:-156.26,-14.17,-0.04:99
-chr1 1577178 rs4648762 A G 161.07 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=54.74;MQ0=0;OQ=2251.82;QD=30.85;SB=-761.70 GT:AD:DP:GL:GQ 1/1:0,72:69:-228.82,-20.80,-0.05:99
-chr1 1578533 rs61774958 G A 209.68 PASS AC=1;AF=0.50;AN=2;DB;DP=136;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.20;MQ0=11;OQ=1051.54;QD=7.73;SB=-56.39 GT:AD:DP:GL:GQ 0/1:86,50:122:-145.19,-36.75,-299.83:99
-chr1 1578580 rs61774959 G A 15.52 PASS AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=42.73;MQ0=4;OQ=297.29;QD=2.89;SB=-52.85 GT:AD:DP:GL:GQ 0/1:73,30:83:-58.01,-25.00,-251.41:99
-chr1 1578600 rs61776760 C T 0.35 PASS AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=43.98;MQ0=2;OQ=158.49;QD=1.69;SB=-47.28 GT:AD:DP:GL:GQ 0/1:69,25:74:-41.42,-22.29,-233.46:99
-chr1 1579194 rs28530622 C G 155.54 PASS AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.72;MQ0=1;OQ=430.39;QD=33.11;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,13:10:-46.62,-3.01,-0.00:30.10
-chr1 1579428 rs61776762 A G 153.73 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.52;MQ0=1;OQ=97.37;QD=13.91;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:4:-13.27,-1.21,-0.00:12.02
-chr1 1580015 rs11486024 G A 46.74 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=22.93;MQ0=7;OQ=160.84;QD=5.96;SB=11.04 GT:AD:DP:GL:GQ 0/1:15,12:15:-23.90,-4.53,-24.75:99
-chr1 1580190 rs7547516 A G 298.92 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.87;MQ0=6;OQ=291.00;QD=13.23;SB=-79.37 GT:AD:DP:GL:GQ 1/1:0,22:11:-32.70,-3.32,-0.02:33.05
-chr1 1580389 rs9329573 G C 27.04 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=38.23;MQ0=0;OQ=1419.74;QD=36.40;SB=-378.04 GT:AD:DP:GL:GQ 1/1:0,39:37:-145.59,-11.17,-0.03:99
-chr1 1580438 rs9661285 G A 38.22 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=39.42;MQ0=4;OQ=1274.78;QD=31.87;SB=-484.63 GT:AD:DP:GL:GQ 1/1:2,38:33:-131.07,-9.94,-0.01:99
-chr1 1580544 rs9661500 G A 46.95 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=56.47;MQ0=0;OQ=1331.19;QD=35.03;SB=-445.09 GT:AD:DP:GL:GQ 1/1:0,38:35:-136.72,-10.55,-0.02:99
-chr1 1581642 . C T 0.06 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.20;MQ=10.78;MQ0=31;OQ=96.64;QD=2.06;SB=-42.54 GT:AD:DP:GL:GQ 0/1:28,19:6:-14.76,-1.81,-6.20:43.86
-chr1 1581652 rs61776763 A G 3.75 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=2.07;MQ=12.19;MQ0=23;OQ=234.90;QD=5.87;SB=-48.96 GT:AD:DP:GL:GQ 1/1:0,40:8:-27.08,-2.41,-0.00:24.06
-chr1 1581732 . C T 10.55 PASS AC=2;AF=1.00;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.72;MQ0=12;OQ=388.23;QD=16.18;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,24:11:-42.41,-3.31,-0.00:33.10
-chr1 1581758 rs61776764 C G 0.40 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=4.17;MQ=24.63;MQ0=12;OQ=1218.98;QD=26.50;SB=-184.87 GT:AD:DP:GL:GQ 1/1:2,44:29:-125.50,-8.74,-0.02:87.29
-chr1 1582007 rs28625763 T C 180.58 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.96;MQ0=0;OQ=1011.19;QD=29.74;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,34:31:-104.72,-9.34,-0.02:93.23
-chr1 1582130 rs4648770 T G 609.06 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=44.32;MQ0=0;OQ=2027.74;QD=33.24;SB=-1018.12 GT:AD:DP:GL:GQ 1/1:1,60:58:-206.38,-17.47,-0.02:99
-chr1 1582744 rs4648774 A C 3.99 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=4.26;MQ=37.79;MQ0=0;OQ=1971.73;QD=29.87;SB=-941.08 GT:AD:DP:GL:GQ 1/1:1,65:56:-200.78,-16.87,-0.02:99
-chr1 1582886 rs1062088 G C 0.12 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=28.33;MQ0=1;OQ=872.58;QD=39.66;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,22:20:-90.85,-6.03,-0.01:60.20
-chr1 1584178 rs1061892 C T 196.43 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=53.48;MQ0=0;OQ=3220.76;QD=38.34;SB=-1363.82 GT:AD:DP:GL:GQ 1/1:0,84:80:-325.67,-24.10,-0.02:99
-chr1 1584256 rs6659270 T A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=6;HaplotypeScore=1.24;MQ=50.39;MQ0=3;OQ=904.07;QD=12.05;SB=-396.42 GT:AD:DP:GL:GQ 0/1:40,35:71:-115.08,-21.39,-150.96:99
-chr1 1584361 rs7416520 C T 137.41 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.09;MQ0=1;OQ=651.60;QD=13.86;SB=-179.69 GT:AD:DP:GL:GQ 0/1:25,22:41:-80.80,-12.36,-66.61:99
-chr1 1585061 rs4307513 A G 66.26 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=51.44;MQ0=9;OQ=1311.89;QD=23.85;SB=-662.93 GT:AD:DP:GL:GQ 1/1:0,55:42:-134.81,-12.67,-0.04:99
-chr1 1585263 rs4313339 A G 2.76 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=25.65;MQ0=5;OQ=594.23;QD=25.84;SB=-123.88 GT:AD:DP:GL:GQ 1/1:0,23:18:-63.01,-5.42,-0.01:54.15
-chr1 1585730 rs4443835 C A 38.28 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=31.44;MQ0=8;OQ=878.16;QD=23.73;SB=-366.86 GT:AD:DP:GL:GQ 1/1:0,37:25:-91.41,-7.53,-0.01:75.22
-chr1 1586059 rs1109644 C T 45.13 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=26.30;MQ0=10;OQ=1336.40;QD=26.73;SB=-334.34 GT:AD:DP:GL:GQ 1/1:3,47:35:-137.24,-10.55,-0.01:99
-chr1 1586167 rs1109645 G A 15.01 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=25.64;MQ0=10;OQ=920.81;QD=25.58;SB=-127.66 GT:AD:DP:GL:GQ 1/1:5,31:24:-95.67,-7.23,-0.01:72.23
-chr1 1586837 rs4074020 C T 96.36 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.56;MQ0=0;OQ=1972.50;QD=37.93;SB=-886.69 GT:AD:DP:GL:GQ 1/1:0,52:51:-200.86,-15.37,-0.02:99
-chr1 1588296 . A C 37.76 DPFilter;Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=44.22;MQ0=1;QD=2.36;SB=20.08 GT:AD:DP:GL:GQ 0/1:12,4:13:-10.98,-3.92,-35.85:70.59
-chr1 1588297 . C T 55.71 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=2;HaplotypeScore=3.93;MQ=44.22;MQ0=1;QD=3.48;SB=17.08 GT:AD:DP:GL:GQ 0/1:12,4:12:-12.47,-3.61,-34.17:88.55
-chr1 1588300 . G T 70.59 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=2;HaplotypeScore=3.93;MQ=44.22;MQ0=1;QD=4.41;SB=-0.98 GT:AD:DP:GL:GQ 0/1:12,4:13:-14.26,-3.92,-32.75:99
-chr1 1588313 . A G 0.48 PASS AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=34.54;MQ0=0;OQ=106.39;QD=17.73;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,6:4:-14.17,-1.20,-0.00:12.04
-chr1 1588430 . A C 41.05 HARD_TO_VALIDATE;LowQual;SnpCluster AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=1;HaplotypeScore=7.96;MQ=16.51;MQ0=4;QD=5.86;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,5:2:-7.51,-0.60,-0.00:6.02
-chr1 1588435 . G A 88.13 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=17.24;MQ0=5;QD=8.81;SB=-10.00 GT:AD:DP:GL:GQ 1/1:5,5:3:-12.30,-0.90,-0.00:9.03
-chr1 1588436 . C T 85.79 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=17.47;MQ0=5;QD=9.53;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,5:3:-12.07,-0.90,-0.00:9.03
-chr1 1588443 . T A 229.32 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=32.72;MQ0=5;QD=15.29;SB=-115.17 GT:AD:DP:GL:GQ 1/1:5,10:7:-26.51,-2.11,-0.00:21.07
-chr1 1589024 rs6604981 A G 620.61 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.22;MQ0=0;OQ=1995.26;QD=35.00;SB=-949.98 GT:AD:DP:GL:GQ 1/1:0,57:56:-203.13,-16.87,-0.02:99
-chr1 1589224 rs6662227 A G 24.79 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=48.28;MQ0=4;OQ=837.14;QD=23.92;SB=-301.43 GT:AD:DP:GL:GQ 1/1:0,35:27:-87.33,-8.14,-0.03:81.18
-chr1 1589250 . A G 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=3.35;MQ=44.60;MQ0=6;OQ=197.93;QD=4.95;SB=-12.85 GT:AD:DP:GL:GQ 0/1:24,16:34:-33.32,-10.25,-92.46:99
-chr1 1589410 rs12725286 C T 1.49 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=10.99;MQ=39.64;MQ0=8;OQ=1191.02;QD=13.38;SB=-569.58 GT:AD:DP:GL:GQ 0/1:50,39:71:-143.77,-21.38,-134.51:99
-chr1 1589675 rs12729295 C T 309.36 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.48;MQ0=3;OQ=671.60;QD=8.72;SB=-350.30 GT:AD:DP:GL:GQ 0/1:53,24:68:-90.94,-20.50,-145.90:99
-chr1 1589751 rs2072923 A G 247.26 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=29.67;MQ0=6;OQ=1186.35;QD=17.98;SB=-547.83 GT:AD:DP:GL:GQ 0/1:14,52:56:-138.81,-16.89,-48.69:99
-chr1 1589844 . C T 0.07 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=10.53;MQ=52.48;MQ0=3;OQ=898.69;QD=17.28;SB=-297.81 GT:AD:DP:GL:GQ 0/1:24,28:47:-107.32,-14.16,-70.31:99
-chr1 1589914 . C G 0.11 PASS AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=2;HaplotypeScore=0.33;MQ=46.80;MQ0=0;OQ=573.53;QD=6.52;SB=39.39 GT:AD:DP:GL:GQ 0/1:67,21:88:-87.20,-26.56,-264.39:99
-chr1 1589924 . G A 1.33 PASS AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=0.49;MQ=46.92;MQ0=0;OQ=633.71;QD=6.67;SB=49.65 GT:AD:DP:GL:GQ 0/1:70,25:92:-94.37,-27.71,-247.48:99
-chr1 1590019 . C G 30.30 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=49.37;MQ0=3;OQ=641.05;QD=9.29;SB=-314.06 GT:AD:DP:GL:GQ 0/1:47,21:64:-90.20,-22.81,-187.56:99
-chr1 1590023 . C T 0.46 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=8.72;MQ=48.76;MQ0=3;OQ=551.31;QD=8.89;SB=-275.75 GT:AD:DP:GL:GQ 0/1:40,22:54:-74.68,-16.27,-125.00:99
-chr1 1590878 . G A 29.06 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=58.63;MQ0=0;OQ=418.19;QD=12.30;SB=-160.22 GT:AD:DP:GL:GQ 0/1:18,16:32:-54.75,-9.64,-59.96:99
-chr1 1590915 . G A 47.89 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.20;MQ0=0;OQ=322.06;QD=8.26;SB=-141.18 GT:AD:DP:GL:GQ 0/1:27,12:38:-46.95,-11.46,-84.40:99
-chr1 1592399 rs4648609 G C 54.97 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=906.62;QD=20.60;SB=-310.97 GT:AD:DP:GL:GQ 0/1:19,25:42:-106.61,-12.66,-75.02:99
-chr1 1592450 rs4233029 C T 90.67 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.31;MQ=60.00;MQ0=0;OQ=849.63;QD=19.76;SB=-437.98 GT:AD:DP:GL:GQ 0/1:15,28:37:-99.40,-11.15,-39.71:99
-chr1 1592650 rs4639697 G T 61.57 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.87;MQ=58.92;MQ0=0;OQ=2757.17;QD=35.35;SB=-1369.99 GT:AD:DP:GL:GQ 1/1:1,77:76:-279.32,-22.89,-0.02:99
-chr1 1593099 rs11523819 G A 285.98 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.60;MQ0=0;OQ=1010.41;QD=14.43;SB=-280.29 GT:AD:DP:GL:GQ 0/1:39,31:68:-124.83,-20.51,-114.09:99
-chr1 1593297 rs6699975 G T 40.53 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.04;MQ=58.42;MQ0=0;OQ=872.27;QD=15.58;SB=-424.16 GT:AD:DP:GL:GQ 0/1:24,32:48:-104.97,-14.46,-59.27:99
-chr1 1594362 rs36048328 G A 212.33 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=53.76;MQ0=0;OQ=936.15;QD=14.86;SB=-437.40 GT:AD:DP:GL:GQ 0/1:33,30:61:-115.28,-18.38,-109.00:99
-chr1 1595120 rs12736155 A C 482.21 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=48.94;MQ0=1;OQ=857.21;QD=13.61;SB=-454.19 GT:AD:DP:GL:GQ 0/1:31,32:60:-107.08,-18.07,-108.87:99
-chr1 1595458 . A G 4.92 PASS AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=5.30;MQ=27.16;MQ0=16;OQ=685.03;QD=9.01;SB=-336.52 GT:AD:DP:GL:GQ 0/1:42,34:52:-87.45,-15.67,-106.28:99
-chr1 1595935 . C A 13.79 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=13;HaplotypeScore=5.11;MQ=47.25;MQ0=0;QD=0.27;SB=44.14 GT:AD:DP:GL:GQ 0/1:44,8:42:-17.30,-12.66,-119.04:46.44
-chr1 1596150 rs28678861 G C 0.01 FDRtranche2.00to10.00 AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=6;HaplotypeScore=0.16;MQ=35.71;MQ0=1;OQ=1428.28;QD=37.59;SB=-739.75 GT:AD:DP:GL:GQ 1/1:0,38:34:-146.42,-10.25,-0.01:99
-chr1 1596170 rs61776786 G A 218.03 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.46;MQ=33.82;MQ0=1;OQ=367.66;QD=11.86;SB=-172.25 GT:AD:DP:GL:GQ 0/1:17,14:26:-47.89,-7.84,-41.82:99
-chr1 1596393 . A G 1.96 PASS AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=2;HaplotypeScore=1.79;MQ=38.63;MQ0=2;OQ=223.84;QD=8.95;SB=-123.74 GT:AD:DP:GL:GQ 0/1:13,12:22:-32.30,-6.64,-46.25:99
-chr1 1596434 rs61776787 A G 239.06 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=27.74;MQ0=11;OQ=461.68;QD=12.82;SB=-213.08 GT:AD:DP:GL:GQ 1/1:0,36:16:-49.77,-4.83,-0.02:48.10
-chr1 1598092 rs61776790 C T 85.65 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=16.88;MQ0=18;OQ=268.46;QD=6.88;SB=-142.62 GT:AD:DP:GL:GQ 0/1:27,12:20:-36.16,-6.04,-33.65:99
-chr1 1599022 rs12724172 T G 248.35 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=48.86;MQ0=1;OQ=792.00;QD=12.00;SB=-236.82 GT:AD:DP:GL:GQ 0/1:30,36:59:-100.27,-17.78,-99.33:99
-chr1 1599028 rs12757736 A T 344.72 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=49.16;MQ0=1;OQ=842.96;QD=13.82;SB=-342.44 GT:AD:DP:GL:GQ 0/1:27,34:53:-103.55,-15.97,-87.26:99
-chr1 1600387 rs7544851 T C 182.79 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=59.17;MQ0=0;OQ=618.77;QD=11.05;SB=-250.34 GT:AD:DP:GL:GQ 0/1:28,28:48:-79.63,-14.47,-94.46:99
-chr1 1601295 rs6700884 A G 128.62 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=57.79;MQ0=0;OQ=747.49;QD=15.90;SB=-253.32 GT:AD:DP:GL:GQ 0/1:21,26:46:-91.89,-13.86,-83.83:99
-chr1 1601516 rs6695303 T C 234.37 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.59;MQ=57.63;MQ0=0;OQ=837.86;QD=14.45;SB=-344.58 GT:AD:DP:GL:GQ 0/1:27,31:54:-103.34,-16.27,-95.10:99
-chr1 1601858 rs4074196 A G 175.78 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=56.26;MQ0=0;OQ=386.06;QD=8.39;SB=-209.64 GT:AD:DP:GL:GQ 0/1:26,20:39:-53.65,-11.76,-84.70:99
-chr1 1601974 rs4074197 C T 305.80 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=818.07;QD=17.41;SB=-411.47 GT:AD:DP:GL:GQ 0/1:22,25:46:-98.95,-13.86,-71.35:99
-chr1 1602466 rs4074198 G A 258.82 PASS AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.07;MQ0=0;OQ=1998.12;QD=19.98;SB=-732.09 GT:AD:DP:GL:GQ 0/1:43,57:99:-232.92,-29.82,-143.69:99
-chr1 1602672 rs4076580 T G 4.32 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=6.99;MQ=58.71;MQ0=0;OQ=379.11;QD=10.53;SB=-115.90 GT:AD:DP:GL:GQ 0/1:20,16:35:-51.74,-10.54,-71.19:99
-chr1 1603230 . C A 105.90 PASS AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.30;MQ0=0;OQ=439.60;QD=13.32;SB=-227.94 GT:AD:DP:GL:GQ 0/1:17,16:31:-56.59,-9.34,-45.91:99
-chr1 1605211 rs7520934 A C 437.30 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=732.80;QD=12.42;SB=-285.83 GT:AD:DP:GL:GQ 0/1:28,31:56:-93.43,-16.87,-99.80:99
-chr1 1605568 rs28774670 T C 204.99 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.50;MQ0=0;OQ=582.27;QD=9.87;SB=-203.22 GT:AD:DP:GL:GQ 0/1:33,26:57:-78.69,-17.18,-127.49:99
-chr1 1605610 rs28435953 G C 130.21 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.47;MQ=58.73;MQ0=0;OQ=779.25;QD=14.17;SB=-322.40 GT:AD:DP:GL:GQ 0/1:29,26:52:-96.88,-15.68,-122.76:99
-chr1 1605921 rs28464677 G A 40.24 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=6.09;MQ=58.05;MQ0=1;OQ=855.32;QD=14.50;SB=-377.37 GT:AD:DP:GL:GQ 0/1:31,28:56:-105.70,-16.88,-92.60:99
-chr1 1606119 rs61776792 G C 0.17 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=15.64;MQ=49.02;MQ0=1;OQ=469.22;QD=9.02;SB=-238.10 GT:AD:DP:GL:GQ 0/1:28,21:33:-60.17,-9.96,-72.09:99
-chr1 1606735 . G A 20.16 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=18;HaplotypeScore=5.53;MQ=52.51;MQ0=0;QD=0.29;SB=62.21 GT:AD:DP:GL:GQ 0/1:55,14:41:-17.65,-12.36,-123.60:52.96
-chr1 1607449 rs28736713 T G 133.05 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.99;MQ=58.63;MQ0=0;OQ=1023.89;QD=16.00;SB=-507.80 GT:AD:DP:GL:GQ 0/1:29,35:64:-124.95,-19.28,-105.76:99
-chr1 1607623 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=18;HaplotypeScore=7.66;MQ=51.83;MQ0=1;OQ=52.14;QD=1.00;SB=0.53 GT:AD:DP:GL:GQ 0/1:41,11:37:-19.66,-11.16,-103.64:84.98
-chr1 1608184 rs28367203 T C 304.04 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.41;MQ0=0;OQ=680.60;QD=12.15;SB=-333.30 GT:AD:DP:GL:GQ 0/1:31,25:55:-87.91,-16.57,-127.27:99
-chr1 1608363 rs28463291 C T 163.50 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1453.08;QD=22.02;SB=-689.01 GT:AD:DP:GL:GQ 0/1:22,44:66:-168.48,-19.89,-77.76:99
-chr1 1608455 rs28366981 A G 89.05 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=57.97;MQ0=0;OQ=661.92;QD=12.98;SB=-317.10 GT:AD:DP:GL:GQ 0/1:21,30:45:-83.04,-13.57,-76.52:99
-chr1 1608461 rs28561498 G T 18.93 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=3.73;MQ=57.75;MQ0=0;OQ=745.42;QD=16.20;SB=-317.33 GT:AD:DP:GL:GQ 0/1:20,26:44:-91.08,-13.26,-59.03:99
-chr1 1608538 rs28541555 T G 156.62 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=57.89;MQ0=0;OQ=606.69;QD=12.91;SB=-204.78 GT:AD:DP:GL:GQ 0/1:20,27:44:-77.21,-13.26,-75.77:99
-chr1 1608823 rs4648780 T C 124.64 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.99;MQ0=0;OQ=1965.86;QD=28.49;SB=-779.58 GT:AD:DP:GL:GQ 1/1:0,69:63:-200.23,-19.00,-0.06:99
-chr1 1608945 rs7524863 G A 246.35 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=57.51;MQ0=0;OQ=796.58;QD=15.03;SB=-348.35 GT:AD:DP:GL:GQ 0/1:28,25:52:-98.61,-15.67,-100.29:99
-chr1 1609404 rs28487995 G A 270.45 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=56.05;MQ0=0;OQ=943.08;QD=14.97;SB=-428.82 GT:AD:DP:GL:GQ 0/1:34,29:58:-115.07,-17.48,-93.42:99
-chr1 1609630 rs9442411 T C 340.52 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.02;MQ0=2;OQ=562.05;QD=9.37;SB=-254.95 GT:AD:DP:GL:GQ 0/1:29,31:53:-75.47,-15.98,-117.16:99
-chr1 1609711 rs61776794 G C 177 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=50.27;MQ0=2;OQ=557.29;QD=11.15;SB=-303.13 GT:AD:DP:GL:GQ 0/1:25,25:40:-71.08,-12.07,-91.96:99
-chr1 1609833 . C T 8.33 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=46.17;MQ0=4;OQ=546.56;QD=9.42;SB=-24.96 GT:AD:DP:GL:GQ 0/1:34,24:50:-73.01,-15.07,-102.31:99
-chr1 1609872 . T A 2.74 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=43.11;MQ0=2;OQ=308.49;QD=7.17;SB=35.14 GT:AD:DP:GL:GQ 0/1:26,17:38:-45.58,-11.45,-97.07:99
-chr1 1609888 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=6.91;MQ=43.11;MQ0=0;OQ=145.44;QD=3.93;SB=26.10 GT:AD:DP:GL:GQ 0/1:23,14:31:-27.18,-9.35,-84.75:99
-chr1 1609946 . A G 0.35 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=42.17;MQ0=4;OQ=138.81;QD=3.39;SB=-12.69 GT:AD:DP:GL:GQ 0/1:29,12:37:-28.31,-11.14,-120.75:99
-chr1 1610085 rs61776797 A G 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=1.23;MQ=52.83;MQ0=0;OQ=168.50;QD=4.32;SB=29.12 GT:AD:DP:GL:GQ 0/1:29,10:36:-30.98,-10.85,-111.33:99
-chr1 1610720 rs3737622 A G 151.65 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=52.83;MQ0=0;OQ=742.56;QD=16.14;SB=-328.41 GT:AD:DP:GL:GQ 0/1:21,25:45:-91.09,-13.55,-80.03:99
-chr1 1610745 rs3737623 C T 272.53 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=54.47;MQ0=0;OQ=1103.20;QD=18.09;SB=-448.99 GT:AD:DP:GL:GQ 0/1:28,33:59:-131.40,-17.79,-81.29:99
-chr1 1610764 rs3737624 G A 559.02 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.35;MQ0=0;OQ=1181.67;QD=16.88;SB=-410.16 GT:AD:DP:GL:GQ 0/1:34,36:69:-142.24,-20.78,-119.02:99
-chr1 1612040 . T A 0.13 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=1.10;MQ=42.64;MQ0=1;OQ=306.88;QD=6.39;SB=17.08 GT:AD:DP:GL:GQ 0/1:34,14:39:-45.73,-11.76,-89.73:99
-chr1 1612676 rs1855706 C T 48.38 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=4.57;MQ=18.63;MQ0=42;OQ=747.37;QD=8.59;SB=-370.40 GT:AD:DP:GL:GQ 0/1:52,35:41:-90.38,-12.36,-60.67:99
-chr1 1612716 rs61776798 T C 0.25 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=7.54;MQ0=54;OQ=87.83;QD=1.39;SB=-10.00 GT:AD:DP:GL:GQ 0/1:40,23:6:-13.87,-1.81,-8.21:64.05
-chr1 1613585 rs7542306 C A 20.92 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=15.32;MQ0=21;QD=0.67;SB=-10.00 GT:AD:DP:GL:GQ 0/1:18,13:6:-7.18,-1.81,-14.53:53.72
-chr1 1614256 rs368915 T G 26.47 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=20.52;MQ0=9;QD=2.04;SB=-32.98 GT:AD:DP:GL:GQ 1/1:0,13:2:-6.06,-0.60,-0.00:6
-chr1 1614726 rs4648651 G A 96.84 PASS AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.04;MQ0=5;OQ=94.30;QD=5.55;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,5:9:-15.42,-2.71,-17.14:99
-chr1 1615466 rs35947799 G A 107.06 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=52.41;MQ0=0;OQ=601.60;QD=18.23;SB=-258.27 GT:AD:DP:GL:GQ 0/1:13,20:32:-73.09,-9.64,-46.27:99
-chr1 1616758 rs28587348 A G 239 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=22.66;MQ0=5;OQ=648.18;QD=9.53;SB=-227.25 GT:AD:DP:GL:GQ 0/1:39,28:59:-88.06,-19.96,-129.14:99
-chr1 1617046 rs1932228 C T 15.28 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=15.02;MQ0=16;OQ=210.38;QD=4.29;SB=-111.61 GT:AD:DP:GL:GQ 0/1:30,19:14:-28.54,-4.22,-22.09:99
-chr1 1617416 rs61776801 G A 266.02 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=37.27;MQ0=15;OQ=982.95;QD=15.60;SB=-353.39 GT:AD:DP:GL:GQ 0/1:28,35:47:-115.75,-14.17,-56.63:99
-chr1 1617665 rs601141 A C 373.76 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=54.30;MQ0=0;OQ=987.22;QD=15.19;SB=-461.24 GT:AD:DP:GL:GQ 0/1:31,34:63:-120.98,-18.98,-104.99:99
-chr1 1618057 rs61776802 A G 60.56 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=53.96;MQ0=1;OQ=690.37;QD=9.86;SB=-238.28 GT:AD:DP:GL:GQ 0/1:36,33:62:-91.01,-18.69,-134.09:99
-chr1 1618313 rs61776803 G T 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=3;HaplotypeScore=2.46;MQ=39.85;MQ0=11;OQ=285.62;QD=3.97;SB=-133.03 GT:AD:DP:GL:GQ 0/1:51,21:59:-49.62,-17.77,-159.76:99
-chr1 1618571 rs12081891 G A 12.44 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=28.69;MQ0=14;OQ=348.19;QD=5.36;SB=-177.80 GT:AD:DP:GL:GQ 0/1:47,18:38:-49.56,-11.46,-83.32:99
-chr1 1618766 rs61776804 G A 86.02 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=43.94;MQ0=0;OQ=732.16;QD=19.27;SB=-352.49 GT:AD:DP:GL:GQ 0/1:16,22:37:-87.65,-11.15,-51.61:99
-chr1 1619321 rs4648621 G A 136.25 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=27.57;MQ0=5;OQ=508.21;QD=13.37;SB=-144.61 GT:AD:DP:GL:GQ 0/1:18,20:30:-63.15,-9.04,-45.60:99
-chr1 1619347 rs34716550 T C 0.89 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=6.10;MQ=29.73;MQ0=3;OQ=380.00;QD=9.05;SB=-24.63 GT:AD:DP:GL:GQ 0/1:23,19:33:-51.24,-9.95,-72.01:99
-chr1 1624864 rs874516 T C 339.91 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=46.52;MQ0=1;OQ=784.43;QD=15.38;SB=-383.28 GT:AD:DP:GL:GQ 0/1:22,29:49:-96.49,-14.76,-89.37:99
-chr1 1625479 rs2076329 T C 1.54 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=3.63;MQ=58.85;MQ0=0;OQ=346.77;QD=7.08;SB=-173.37 GT:AD:DP:GL:GQ 0/1:30,19:42:-50.63,-12.67,-103.10:99
-chr1 1625609 rs1136997 C A 28.98 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.88;MQ=49.57;MQ0=0;OQ=129.32;QD=4.62;SB=-74.73 GT:AD:DP:GL:GQ 0/1:19,9:24:-23.45,-7.23,-57.11:99
-chr1 1625904 rs1059822 G A 133.74 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=49.02;MQ0=1;OQ=290.88;QD=7.65;SB=-88.57 GT:AD:DP:GL:GQ 0/1:22,16:33:-42.33,-9.95,-69.30:99
-chr1 1626134 rs2179381 C T 246.87 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=42.93;MQ0=0;OQ=354.22;QD=9.84;SB=-190.16 GT:AD:DP:GL:GQ 0/1:22,14:30:-47.74,-9.04,-64.17:99
-chr1 1626190 . G A 71.25 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=48.48;MQ0=0;OQ=619.32;QD=15.48;SB=-321.82 GT:AD:DP:GL:GQ 0/1:21,19:40:-77.26,-12.05,-77.19:99
-chr1 1627098 rs61774911 A G 6.01 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.86;MQ0=3;OQ=57.73;QD=2.14;SB=17.07 GT:AD:DP:GL:GQ 0/1:19,8:19:-14.79,-5.73,-53.94:90.57
-chr1 1627115 rs9439480 A G 25.79 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=40.42;MQ0=0;QD=1.07;SB=26.10 GT:AD:DP:GL:GQ 0/1:18,5:21:-12.19,-6.33,-66.21:58.62
-chr1 1627865 rs17162876 G C 61.32 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=50.90;MQ0=0;OQ=596.59;QD=13.56;SB=-287.98 GT:AD:DP:GL:GQ 0/1:25,19:41:-75.32,-12.38,-88.05:99
-chr1 1628397 . C T 6.47 PASS AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=17.03;MQ0=21;OQ=258.72;QD=7.19;SB=-86.31 GT:AD:DP:GL:GQ 0/1:19,17:11:-32.47,-3.31,-10.93:76.22
-chr1 1628516 . G A 0.42 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=23.14;MQ0=15;OQ=161.97;QD=3.60;SB=-32.64 GT:AD:DP:GL:GQ 0/1:32,13:24:-26.72,-7.23,-54.65:99
-chr1 1629661 . T C 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=34.50;MQ0=9;OQ=82.09;QD=2.22;SB=-48.26 GT:AD:DP:GL:GQ 0/1:21,16:24:-18.73,-7.24,-70.81:99
-chr1 1631887 rs61776845 C T 226.45 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.12;MQ0=0;OQ=487.31;QD=34.81;SB=-143.63 GT:AD:DP:GL:GQ 1/1:0,14:14:-52.32,-4.22,-0.01:42.13
-chr1 1633129 rs6688326 C A 4.88 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=11.56;MQ0=25;OQ=150.41;QD=4.30;SB=-10.00 GT:AD:DP:GL:GQ 0/1:25,10:8:-20.73,-2.41,-7.32:49.07
-chr1 1634432 rs2143105 A G 2.04 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=3.86;MQ=24.63;MQ0=4;OQ=286.53;QD=16.85;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,17:11:-32.26,-3.33,-0.02:33.05
-chr1 1634696 rs2179382 G A 8.71 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=32.34;MQ0=16;OQ=279.13;QD=3.58;SB=-95.45 GT:AD:DP:GL:GQ 0/1:61,16:59:-48.98,-17.78,-155.91:99
-chr1 1634768 rs2179383 C T 205.44 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=11.72;MQ0=13;OQ=127.00;QD=6.35;SB=-51.67 GT:AD:DP:GL:GQ 1/1:0,20:4:-16.23,-1.20,-0.00:12.04
-chr1 1634910 . C T 73.11 PASS AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=12.98;MQ0=22;OQ=295.97;QD=9.25;SB=-135.01 GT:AD:DP:GL:GQ 1/1:0,32:8:-33.18,-2.41,-0.00:24.08
-chr1 1634953 . C T 62.81 PASS AC=2;AF=1.00;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=17.86;MQ0=18;OQ=384.85;QD=13.27;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,29:10:-42.07,-3.01,-0.00:30.10
-chr1 1634973 . T C 4.22 PASS AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.05;MQ0=18;OQ=118.84;QD=3.71;SB=-10.00 GT:AD:DP:GL:GQ 0/1:22,10:13:-19.08,-3.92,-33.24:99
-chr1 1634975 . C T 14.66 PASS AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=19.05;MQ0=18;OQ=504.84;QD=15.78;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,32:13:-54.07,-3.92,-0.00:39.13
-chr1 1635050 rs4279785 T C 293.02 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.94;MQ0=12;OQ=364.98;QD=8.90;SB=-161.33 GT:AD:DP:GL:GQ 0/1:23,18:28:-48.21,-8.43,-62.26:99
-chr1 1635547 rs61774919 G A 162.09 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=14.59;MQ0=11;OQ=173.64;QD=7.55;SB=-50.56 GT:AD:DP:GL:GQ 1/1:6,17:5:-20.92,-1.51,-0.00:15.05
-chr1 1635860 rs3819996 T C 34.28 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=13.67;MQ0=7;QD=3.81;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:2:-6.84,-0.60,-0.00:6.02
-chr1 1635866 rs3819997 A G 27.83 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.50;MQ0=6;QD=3.48;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:2:-6.19,-0.60,-0.00:6.01
-chr1 1635934 rs3819998 A G 17.88 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=5.04;MQ=31.93;MQ0=9;OQ=462.29;QD=12.84;SB=-95.99 GT:AD:DP:GL:GQ 0/1:9,27:21:-55.85,-6.34,-11.59:52.52
-chr1 1635937 rs3819999 G T 0.54 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=5.04;MQ=31.93;MQ0=9;OQ=663.10;QD=18.42;SB=-104.11 GT:AD:DP:GL:GQ 0/1:9,26:24:-76.82,-7.23,-11.28:40.49
-chr1 1635973 rs3820000 G C 54.40 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.49;MQ0=15;OQ=883.63;QD=21.55;SB=-127.19 GT:AD:DP:GL:GQ 1/1:8,33:25:-95.91,-7.54,-3.96:35.78
-chr1 1636091 rs3820002 T C 108.62 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.55;MQ0=2;OQ=418.10;QD=27.87;SB=-161.84 GT:AD:DP:GL:GQ 1/1:0,15:13:-45.40,-3.92,-0.01:39.10
-chr1 1636096 rs61776849 C T 171.23 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.06;MQ0=2;OQ=513.34;QD=30.20;SB=-178.68 GT:AD:DP:GL:GQ 1/1:0,17:14:-54.92,-4.22,-0.01:42.13
-chr1 1636231 rs61776850 G T 45.78 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=2.84;MQ=41.85;MQ0=7;OQ=641.89;QD=13.95;SB=-342.30 GT:AD:DP:GL:GQ 0/1:20,26:39:-79.22,-11.75,-58.73:99
-chr1 1636287 rs61776851 T G 219.44 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=36.80;MQ0=8;OQ=1107.10;QD=20.13;SB=-508.74 GT:AD:DP:GL:GQ 1/1:4,51:37:-114.34,-11.16,-0.05:99
-chr1 1636310 rs3820004 G A 84.02 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=34.50;MQ0=11;OQ=1585.10;QD=27.33;SB=-811.33 GT:AD:DP:GL:GQ 1/1:6,52:41:-162.11,-12.35,-0.01:99
-chr1 1636434 rs56030177 T C 84.71 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=28.90;MQ0=10;OQ=1324.64;QD=27.60;SB=-500.48 GT:AD:DP:GL:GQ 1/1:0,48:38:-136.06,-11.45,-0.01:99
-chr1 1636517 rs760926 T C 66.97 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=26.90;MQ0=7;OQ=976.98;QD=25.05;SB=-384.56 GT:AD:DP:GL:GQ 1/1:1,38:28:-101.29,-8.43,-0.01:84.25
-chr1 1636649 rs760927 T C 127.83 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.47;MQ0=5;OQ=898.10;QD=25.66;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,35:25:-93.41,-7.53,-0.01:75.22
-chr1 1636735 . C G 66.44 PASS AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=39.28;MQ0=9;OQ=1254.01;QD=12.80;SB=-309.31 GT:AD:DP:GL:GQ 0/1:56,42:83:-153.70,-25.01,-208.71:99
-chr1 1636777 . C T 31.32 PASS AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=38.96;MQ0=9;OQ=1301.14;QD=13.41;SB=-647.75 GT:AD:DP:GL:GQ 0/1:49,48:84:-158.72,-25.32,-141.36:99
-chr1 1636840 rs61776853 A C 1.58 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=0.97;MQ=31.48;MQ0=5;OQ=997.06;QD=27.70;SB=-256.95 GT:AD:DP:GL:GQ 1/1:0,36:30:-103.31,-9.04,-0.02:90.22
-chr1 1636845 rs61776854 C T 13.28 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=31.12;MQ0=5;OQ=595.02;QD=17.50;SB=-27.62 GT:AD:DP:GL:GQ 0/1:11,23:28:-71.23,-8.44,-30.58:99
-chr1 1636852 rs35642458 G A 71.80 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.10;MQ0=4;OQ=612.21;QD=24.49;SB=-39.52 GT:AD:DP:GL:GQ 0/1:3,22:20:-70.53,-6.02,-10.71:46.85
-chr1 1637044 rs61073446 G A 19.06 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=5.47;MQ=48.10;MQ0=1;OQ=604.36;QD=8.06;SB=-316.73 GT:AD:DP:GL:GQ 0/1:54,21:68:-84.21,-20.50,-156.95:99
-chr1 1637060 . G C 0.16 PASS AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=3.23;MQ=46.92;MQ0=1;OQ=770.35;QD=8.37;SB=83.29 GT:AD:DP:GL:GQ 0/1:66,26:89:-107.18,-26.86,-257.87:99
-chr1 1637092 . A G 13.80 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=45.24;MQ0=3;OQ=524.47;QD=7.09;SB=62.24 GT:AD:DP:GL:GQ 0/1:50,24:71:-77.11,-21.38,-201.71:99
-chr1 1637137 rs4437818 C T 70.80 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.48;MQ=37.21;MQ0=3;OQ=419.91;QD=7.63;SB=-236.03 GT:AD:DP:GL:GQ 0/1:38,17:49:-60.03,-14.76,-127.40:99
-chr1 1637159 rs760928 C T 610.42 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.78;MQ0=3;OQ=1773.57;QD=35.47;SB=-891.67 GT:AD:DP:GL:GQ 1/1:0,50:45:-180.95,-13.56,-0.01:99
-chr1 1637161 rs760929 G A 499.31 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=39.49;MQ0=3;OQ=1819.83;QD=36.40;SB=-852.64 GT:AD:DP:GL:GQ 1/1:0,50:45:-185.58,-13.55,-0.01:99
-chr1 1637349 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=12.15;MQ=53.21;MQ0=0;OQ=258.06;QD=3.04;SB=74.27 GT:AD:DP:GL:GQ 0/1:68,17:73:-51.13,-22.04,-238.97:99
-chr1 1637350 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=13.99;MQ=53.21;MQ0=0;OQ=156.60;QD=1.84;SB=74.27 GT:AD:DP:GL:GQ 0/1:68,16:78:-42.44,-23.50,-258.99:99
-chr1 1637384 rs760930 C T 155.40 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.38;MQ0=0;OQ=2369.71;QD=38.22;SB=-867.02 GT:AD:DP:GL:GQ 1/1:0,62:60:-240.58,-18.08,-0.02:99
-chr1 1637388 rs760931 G C 174.43 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=56.72;MQ0=0;OQ=2115.79;QD=36.48;SB=-781.25 GT:AD:DP:GL:GQ 1/1:0,58:53:-215.20,-15.99,-0.03:99
-chr1 1637546 rs56081394 A C 94.23 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=52.34;MQ0=0;OQ=2774.94;QD=32.65;SB=-1180.71 GT:AD:DP:GL:GQ 1/1:0,85:81:-281.12,-24.40,-0.04:99
-chr1 1637613 . C T 21.89 LowQual AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=50.67;MQ0=0;QD=0.27;SB=-29.39 GT:AD:DP:GL:GQ 0/1:68,12:72:-27.16,-21.69,-231.62:54.70
-chr1 1637638 . C G 0.51 PASS AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=4.82;MQ=47.75;MQ0=0;OQ=459.74;QD=4.84;SB=-189.88 GT:AD:DP:GL:GQ 0/1:65,30:83:-74.29,-25.03,-272.64:99
-chr1 1637674 . T C 96.11 PASS AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.42;MQ0=0;OQ=794.87;QD=7.87;SB=-336.87 GT:AD:DP:GL:GQ 0/1:55,46:82:-107.47,-24.70,-217.72:99
-chr1 1637731 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=47.58;MQ0=0;OQ=197.23;QD=2.38;SB=-124.83 GT:AD:DP:GL:GQ 0/1:61,22:74:-45.30,-22.29,-250.27:99
-chr1 1637788 rs1883424 A G 452.02 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.70;MQ0=0;OQ=1180.37;QD=13.26;SB=-539.57 GT:AD:DP:GL:GQ 0/1:48,41:89:-148.13,-26.81,-196.69:99
-chr1 1637887 rs61776857 T C 8.97 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=37.62;MQ0=3;OQ=1207.11;QD=23.21;SB=-211.69 GT:AD:DP:GL:GQ 1/1:2,49:41:-124.35,-12.38,-0.05:99
-chr1 1638000 . G C 4.04 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=49.72;MQ0=1;OQ=363.96;QD=6.17;SB=-28.72 GT:AD:DP:GL:GQ 0/1:37,21:48:-56.87,-17.19,-155.52:99
-chr1 1638008 . G C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=51.97;MQ0=1;OQ=62.73;QD=1.08;SB=29.80 GT:AD:DP:GL:GQ 0/1:41,17:44:-22.82,-13.26,-168.23:95.57
-chr1 1638068 rs61776858 C T 414.28 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.78;MQ0=0;OQ=1645.34;QD=38.26;SB=-705.35 GT:AD:DP:GL:GQ 1/1:1,42:42:-168.13,-12.65,-0.01:99
-chr1 1638095 rs28722732 A C 115.66 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=48.13;MQ0=1;OQ=1285.24;QD=32.95;SB=-522.05 GT:AD:DP:GL:GQ 1/1:1,38:38:-132.12,-11.45,-0.02:99
-chr1 1638236 . G A 17.91 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=2;HaplotypeScore=8.77;MQ=38.97;MQ0=0;QD=0.34;SB=23.08 GT:AD:DP:GL:GQ 0/1:43,6:25:-15.81,-10.75,-74.55:50.67
-chr1 1638252 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=56.73;MQ=41.68;MQ0=0;OQ=220.25;QD=3.86;SB=17.08 GT:AD:DP:GL:GQ 0/1:43,13:37:-36.47,-11.16,-97.19:99
-chr1 1638265 rs28669101 A G 1.73 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=5.08;MQ=44.94;MQ0=1;OQ=1841.80;QD=27.49;SB=-530.20 GT:AD:DP:GL:GQ 1/1:1,66:52:-187.79,-15.67,-0.02:99
-chr1 1638282 . T C 372.16 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=2;HaplotypeScore=20.32;MQ=48.81;MQ0=1;QD=5.64;SB=53.20 GT:AD:DP:GL:GQ 0/1:48,18:62:-59.18,-18.68,-176.85:99
-chr1 1638285 . G A 362.16 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=22.88;MQ=49.05;MQ0=1;QD=5.57;SB=50.16 GT:AD:DP:GL:GQ 0/1:45,17:60:-57.59,-18.09,-158.00:99
-chr1 1638291 . G T 350.74 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=36.28;MQ=47.79;MQ0=1;QD=5.48;SB=47.16 GT:AD:DP:GL:GQ 0/1:46,17:57:-55.53,-17.18,-142.31:99
-chr1 1638353 . T C 4.41 PASS AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=49.10;MQ0=0;OQ=579.45;QD=7.24;SB=-118.38 GT:AD:DP:GL:GQ 0/1:52,28:75:-83.82,-22.59,-209.22:99
-chr1 1638397 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.02;HRun=4;HaplotypeScore=13.77;MQ=49.39;MQ0=0;OQ=1251.99;QD=12.16;SB=-214.10 GT:AD:DP:GL:GQ 0/1:54,47:95:-156.50,-28.02,-195.84:99
-chr1 1638484 rs61776859 C A 0.46 PASS AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=1;HaplotypeScore=3.66;MQ=44.01;MQ0=0;OQ=2573.54;QD=19.06;SB=-1062.18 GT:AD:DP:GL:GQ 0/1:54,81:126:-298.59,-37.95,-167.48:99
-chr1 1638485 . A G 2.65 PASS AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=44.20;MQ0=0;OQ=954.08;QD=7.07;SB=27.40 GT:AD:DP:GL:GQ 0/1:81,54:124:-136.06,-37.37,-329.92:99
-chr1 1638496 . A C 4.42 PASS AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=43.37;MQ0=0;OQ=1281.45;QD=9.42;SB=-10.58 GT:AD:DP:GL:GQ 0/1:80,56:126:-169.38,-37.95,-296.59:99
-chr1 1638502 . T C 3.56 PASS AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=44.49;MQ0=0;OQ=1373.44;QD=10.25;SB=-79.40 GT:AD:DP:GL:GQ 0/1:76,58:123:-177.67,-37.05,-300.79:99
-chr1 1638544 . C T 171.39 PASS AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=48.39;MQ0=0;OQ=1993.39;QD=14.44;SB=-439.97 GT:AD:DP:GL:GQ 0/1:62,76:123:-239.68,-37.06,-213.30:99
-chr1 1638628 . C T 21.95 PASS AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=49.90;MQ0=0;OQ=1604.78;QD=15.14;SB=-725.65 GT:AD:DP:GL:GQ 0/1:52,53:100:-193.90,-30.14,-170.77:99
-chr1 1638640 . A C 22.88 PASS AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=47.54;MQ0=0;OQ=1027.76;QD=10.18;SB=-470.68 GT:AD:DP:GL:GQ 0/1:56,45:93:-134.07,-28.01,-207.58:99
-chr1 1638645 . G C 1.18 PASS AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=6.44;MQ=47.94;MQ0=0;OQ=1189.28;QD=12.14;SB=-604.90 GT:AD:DP:GL:GQ 0/1:56,42:91:-149.63,-27.42,-247.05:99
-chr1 1638691 rs61777460 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=113;Dels=0.00;HRun=1;HaplotypeScore=70.95;MQ=45.55;MQ0=0;OQ=1598.01;QD=14.14;SB=-702.52 GT:AD:DP:GL:GQ 0/1:53,60:107:-195.32,-32.23,-214.62:99
-chr1 1638728 . T A 0.06 PASS AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=48.71;MQ0=0;OQ=2481.89;QD=16.22;SB=-1020.86 GT:AD:DP:GL:GQ 0/1:71,82:150:-296.65,-45.18,-270.24:99
-chr1 1638806 rs909824 T C 0.61 PASS AC=1;AF=0.50;AN=2;DB;DP=154;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=50.30;MQ0=0;OQ=2209.99;QD=14.35;SB=-996.92 GT:AD:DP:GL:GQ 0/1:79,75:150:-269.47,-45.19,-301.46:99
-chr1 1638825 rs61777461 C T 0.09 PASS AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.00;HRun=1;HaplotypeScore=2.68;MQ=50.48;MQ0=0;OQ=2137.82;QD=14.95;SB=-1070.06 GT:AD:DP:GL:GQ 0/1:71,72:135:-257.74,-40.67,-255.42:99
-chr1 1638946 . C T 467.64 SnpCluster AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=32.37;MQ=43.71;MQ0=5;QD=7.19;SB=-205.68 GT:AD:DP:GL:GQ 0/1:44,21:47:-64.21,-14.16,-108.79:99
-chr1 1638954 . T C 736.34 SnpCluster AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=21.87;MQ=42.89;MQ0=5;QD=12.70;SB=-358.18 GT:AD:DP:GL:GQ 0/1:23,35:42:-89.58,-12.66,-57.09:99
-chr1 1638955 . G A 193.46 SnpCluster AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=28.88;MQ=42.53;MQ0=5;QD=3.39;SB=-66.48 GT:AD:DP:GL:GQ 0/1:44,13:42:-35.29,-12.66,-112.58:99
-chr1 1638965 rs61777464 A G 0.09 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=17.05;MQ=41.40;MQ0=5;OQ=280.02;QD=5.83;SB=-138.25 GT:AD:DP:GL:GQ 0/1:30,18:32:-40.93,-9.64,-84.27:99
-chr1 1638997 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=41.45;MQ0=4;OQ=154.17;QD=3.08;SB=35.12 GT:AD:DP:GL:GQ 0/1:37,12:37:-29.85,-11.15,-98.68:99
-chr1 1639030 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=25.29;MQ=40.65;MQ0=7;OQ=247.09;QD=2.75;SB=50.20 GT:AD:DP:GL:GQ 0/1:68,21:63:-46.97,-18.98,-193.46:99
-chr1 1639109 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=25.12;MQ=46.53;MQ0=4;OQ=115.22;QD=1.05;SB=83.25 GT:AD:DP:GL:GQ 0/1:96,13:84:-40.14,-25.34,-234.06:99
-chr1 1639113 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=24.12;MQ=46.66;MQ0=4;OQ=396.71;QD=3.64;SB=8.10 GT:AD:DP:GL:GQ 0/1:82,27:87:-69.20,-26.24,-219.98:99
-chr1 1639145 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=1;HaplotypeScore=44.81;MQ=46.42;MQ0=3;OQ=230.67;QD=1.94;SB=-28.38 GT:AD:DP:GL:GQ 0/1:92,27:94:-54.66,-28.31,-297.41:99
-chr1 1639152 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=23.68;MQ=46.30;MQ0=1;OQ=1088.67;QD=9.07;SB=-62.94 GT:AD:DP:GL:GQ 0/1:69,50:95:-140.79,-28.64,-195.69:99
-chr1 1639166 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=19.38;MQ=46.56;MQ0=1;OQ=479.08;QD=3.89;SB=-121.97 GT:AD:DP:GL:GQ 0/1:92,31:101:-81.65,-30.45,-258.17:99
-chr1 1639203 . C T 59.61 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=106;Dels=0.01;HRun=4;HaplotypeScore=28.93;MQ=49.66;MQ0=0;QD=0.56;SB=37.04 GT:AD:DP:GL:GQ 0/1:84,20:85:-34.85,-25.61,-268.94:92.45
-chr1 1639204 . A G 88.80 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=34.26;MQ=50.07;MQ0=0;QD=0.81;SB=122.42 GT:AD:DP:GL:GQ 0/1:87,23:90:-39.28,-27.11,-316.10:99
-chr1 1639210 . T G 106.61 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=1;HaplotypeScore=109.94;MQ=48.22;MQ0=0;QD=0.90;SB=107.36 GT:AD:DP:GL:GQ 0/1:99,20:91:-41.35,-27.41,-290.49:99
-chr1 1639221 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=51.18;MQ=48.34;MQ0=0;OQ=110.59;QD=0.87;SB=-36.37 GT:AD:DP:GL:GQ 0/1:109,18:89:-41.16,-26.82,-305.73:99
-chr1 1639227 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=3;HaplotypeScore=53.65;MQ=47.85;MQ0=2;OQ=61.26;QD=0.48;SB=63.76 GT:AD:DP:GL:GQ 0/1:90,38:88:-35.92,-26.51,-284.90:94.09
-chr1 1639237 . A T 220.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=2;HaplotypeScore=39.50;MQ=47.38;MQ0=3;QD=1.53;SB=98.34 GT:AD:DP:GL:GQ 0/1:108,36:102:-56.01,-30.73,-323.39:99
-chr1 1639238 . T C 363.43 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=40.62;MQ=46.99;MQ0=4;QD=2.51;SB=-35.37 GT:AD:DP:GL:GQ 0/1:115,29:91:-67.04,-27.41,-296.52:99
-chr1 1639239 . T G 307.74 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=40.46;MQ=46.55;MQ0=5;QD=2.08;SB=5.35 GT:AD:DP:GL:GQ 0/1:110,36:106:-65.98,-31.93,-325.39:99
-chr1 1639244 . C G 433.01 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=0;HaplotypeScore=72.81;MQ=46.68;MQ0=6;QD=2.87;SB=-83.32 GT:AD:DP:GL:GQ 0/1:112,37:109:-82.29,-35.70,-402.49:99
-chr1 1639252 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=2;HaplotypeScore=45.12;MQ=45.10;MQ0=7;OQ=932.16;QD=6.13;SB=-397.36 GT:AD:DP:GL:GQ 0/1:117,33:103:-127.53,-31.03,-261.51:99
-chr1 1639301 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=21.56;MQ=40.71;MQ0=20;OQ=622.52;QD=6.35;SB=-215.64 GT:AD:DP:GL:GQ 0/1:52,46:51:-80.90,-15.37,-137.71:99
-chr1 1639318 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=38.28;MQ=34.31;MQ0=28;OQ=125.27;QD=1.35;SB=-14.91 GT:AD:DP:GL:GQ 0/1:76,17:35:-26.35,-10.54,-101.55:99
-chr1 1639325 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=5.46;MQ=33.52;MQ0=28;OQ=116.93;QD=1.38;SB=23.07 GT:AD:DP:GL:GQ 0/1:73,12:33:-24.93,-9.95,-86.29:99
-chr1 1639374 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=1;HaplotypeScore=20.02;MQ=34.37;MQ0=20;OQ=192.31;QD=2.19;SB=-88.00 GT:AD:DP:GL:GQ 0/1:73,15:45:-36.07,-13.55,-128.18:99
-chr1 1639407 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=42.54;MQ0=9;OQ=114.05;QD=1.02;SB=-8.75 GT:AD:DP:GL:GQ 0/1:85,19:71:-46.36,-31.67,-236.26:99
-chr1 1639417 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=4;HaplotypeScore=17.30;MQ=43.78;MQ0=5;OQ=74.87;QD=0.61;SB=-8.76 GT:AD:DP:GL:GQ 0/1:106,16:83:-35.80,-25.03,-240.05:99
-chr1 1639441 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=3;HaplotypeScore=5.23;MQ=45.90;MQ0=8;OQ=109.77;QD=0.77;SB=-10.15 GT:AD:DP:GL:GQ 0/1:120,22:103:-45.28,-31.02,-334.31:99
-chr1 1639479 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=26.42;MQ=48.72;MQ0=12;OQ=76.35;QD=0.64;SB=70.54 GT:AD:DP:GL:GQ 0/1:100,20:90:-38.04,-27.12,-310.60:99
-chr1 1639492 . C T 15.20 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=3;HaplotypeScore=52.40;MQ=48.82;MQ0=15;QD=0.14;SB=67.73 GT:AD:DP:GL:GQ 0/1:90,22:79:-28.59,-23.80,-254.17:47.90
-chr1 1639499 rs36141200 G A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=107;Dels=0.01;HRun=0;HaplotypeScore=32.74;MQ=48.53;MQ0=15;OQ=2982.80;QD=27.88;SB=-1344.29 GT:AD:DP:GL:GQ 1/1:0,106:74:-301.88,-22.29,-0.02:99
-chr1 1639600 rs36135823 C T 0.07 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=3;HaplotypeScore=14.31;MQ=43.93;MQ0=12;OQ=2247.07;QD=26.44;SB=-416.38 GT:AD:DP:GL:GQ 1/1:10,75:60:-232.21,-18.08,-3.91:99
-chr1 1639610 rs34963151 A T 0.17 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=15.64;MQ=43.34;MQ0=11;OQ=1936.12;QD=25.14;SB=-344.48 GT:AD:DP:GL:GQ 1/1:5,72:55:-200.25,-16.56,-3.05:99
-chr1 1639612 rs36137888 T G 0.67 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=11.64;MQ=43.34;MQ0=11;OQ=1831.08;QD=23.78;SB=-311.74 GT:AD:DP:GL:GQ 1/1:2,72:55:-190.04,-16.56,-3.35:99
-chr1 1639702 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=0;HaplotypeScore=34.54;MQ=35.32;MQ0=37;OQ=98.37;QD=0.75;SB=39.28 GT:AD:DP:GL:GQ 0/1:59,72:53:-29.08,-15.96,-156.59:99
-chr1 1639726 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=70.45;MQ=36.36;MQ0=39;OQ=52.18;QD=0.37;SB=48.69 GT:AD:DP:GL:GQ 0/1:67,74:65:-28.09,-19.58,-201.69:85.02
-chr1 1639861 . C T 25.55 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=57.75;MQ=41.48;MQ0=14;QD=0.18;SB=-23.37 GT:AD:DP:GL:GQ 0/1:90,50:90:-32.98,-27.15,-260.27:58.37
-chr1 1639867 . C T 19.37 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=3;HaplotypeScore=75.47;MQ=41.18;MQ0=14;QD=0.14;SB=-17.32 GT:AD:DP:GL:GQ 0/1:97,46:92:-32.93,-27.71,-303.81:52.16
-chr1 1639892 rs61777469 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=134;Dels=0.04;HRun=2;HaplotypeScore=74.14;MQ=41.98;MQ0=12;OQ=2469.47;QD=18.43;SB=-1178.56 GT:AD:DP:GL:GQ 0/1:25,104:86:-276.13,-25.90,-32.75:68.49
-chr1 1639893 rs61777470 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=134;Dels=0.00;HRun=0;HaplotypeScore=137.24;MQ=41.98;MQ0=12;OQ=2615.52;QD=19.52;SB=-1204.51 GT:AD:DP:GL:GQ 0/1:44,90:89:-291.64,-26.81,-37.18:99
-chr1 1639911 . G A 14.93 LowQual AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=0;HaplotypeScore=26.42;MQ=45.76;MQ0=10;QD=0.13;SB=-12.75 GT:AD:DP:GL:GQ 0/1:81,37:78:-28.28,-23.52,-231.19:47.63
-chr1 1639962 rs61777471 C T 260.52 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=54.09;MQ0=1;OQ=1805.36;QD=37.61;SB=-829.34 GT:AD:DP:GL:GQ 1/1:0,48:47:-184.14,-14.16,-0.02:99
-chr1 1640060 rs1969650 A C 38.33 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=47.36;MQ0=0;OQ=1283.12;QD=25.66;SB=-659.19 GT:AD:DP:GL:GQ 1/1:0,50:43:-131.95,-12.97,-0.05:99
-chr1 1640123 rs1967676 G T 619.20 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.68;MQ0=0;OQ=2013.64;QD=35.33;SB=-938.04 GT:AD:DP:GL:GQ 1/1:0,57:55:-204.96,-16.56,-0.01:99
-chr1 1640270 rs1967677 T C 0.01 FDRtranche2.00to10.00 AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=23.68;MQ=51.29;MQ0=1;OQ=2260.88;QD=25.69;SB=-1076.20 GT:AD:DP:GL:GQ 1/1:7,81:78:-241.90,-23.52,-12.23:99
-chr1 1640284 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=21.65;MQ=49.80;MQ0=1;OQ=283.77;QD=2.56;SB=107.23 GT:AD:DP:GL:GQ 0/1:95,16:94:-60.00,-28.34,-253.49:99
-chr1 1640321 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=250.42;MQ=48.13;MQ0=0;OQ=561.76;QD=3.98;SB=122.35 GT:AD:DP:GL:GQ 0/1:98,27:119:-99.13,-39.67,-333.17:99
-chr1 1640332 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=158;Dels=0.00;HRun=0;HaplotypeScore=133.26;MQ=46.63;MQ0=0;OQ=950.96;QD=6.02;SB=119.36 GT:AD:DP:GL:GQ 0/1:94,64:124:-135.74,-37.36,-315.76:99
-chr1 1640347 . T C 550.46 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=23.57;MQ=45.32;MQ0=0;QD=3.72;SB=95.35 GT:AD:DP:GL:GQ 0/1:118,30:114:-92.67,-34.34,-350.75:99
-chr1 1640368 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=1;HaplotypeScore=38.96;MQ=45.47;MQ0=0;OQ=414.73;QD=2.94;SB=65.22 GT:AD:DP:GL:GQ 0/1:119,22:108:-77.29,-32.53,-317.79:99
-chr1 1640378 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=4;HaplotypeScore=21.61;MQ=45.56;MQ0=0;OQ=227.10;QD=1.77;SB=59.14 GT:AD:DP:GL:GQ 0/1:110,18:98:-55.53,-29.53,-284.49:99
-chr1 1640389 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=23.69;MQ=45.00;MQ0=0;OQ=372.62;QD=3.11;SB=38.14 GT:AD:DP:GL:GQ 0/1:83,37:73:-62.56,-22.01,-186.44:99
-chr1 1640393 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=31.49;MQ=46.43;MQ0=0;OQ=193.70;QD=1.67;SB=47.18 GT:AD:DP:GL:GQ 0/1:63,52:78:-46.16,-23.50,-255.92:99
-chr1 1640402 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=3;HaplotypeScore=44.61;MQ=47.57;MQ0=0;OQ=589.53;QD=5.51;SB=47.18 GT:AD:DP:GL:GQ 0/1:71,36:90:-89.34,-27.11,-243.28:99
-chr1 1640405 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=32.67;MQ=47.67;MQ0=0;OQ=576.56;QD=5.54;SB=44.17 GT:AD:DP:GL:GQ 0/1:79,25:85:-86.54,-25.60,-227.82:99
-chr1 1640428 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=12.31;MQ=51.68;MQ0=0;OQ=687.66;QD=7.47;SB=59.21 GT:AD:DP:GL:GQ 0/1:63,29:86:-97.95,-25.90,-226.28:99
-chr1 1640435 . T C 0.39 PASS AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=52.41;MQ0=0;OQ=479.95;QD=4.95;SB=65.24 GT:AD:DP:GL:GQ 0/1:69,28:91:-78.69,-27.41,-274.97:99
-chr1 1640479 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=10.56;MQ=53.01;MQ0=0;OQ=125.57;QD=1.23;SB=55.33 GT:AD:DP:GL:GQ 0/1:77,25:89:-42.65,-26.81,-277.44:99
-chr1 1640500 . C A 40.46 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=1;HaplotypeScore=5.00;MQ=52.43;MQ0=0;QD=0.42;SB=79.01 GT:AD:DP:GL:GQ 0/1:71,25:78:-30.82,-23.49,-254.06:73.30
-chr1 1640502 . T G 39.38 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=52.41;MQ0=0;QD=0.40;SB=58.40 GT:AD:DP:GL:GQ 0/1:73,26:82:-31.92,-24.69,-274.53:72.21
-chr1 1640517 . C G 1.85 PASS AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.82;MQ0=0;OQ=540.14;QD=4.54;SB=-210.84 GT:AD:DP:GL:GQ 0/1:81,38:99:-87.13,-29.83,-340.31:99
-chr1 1640647 rs17845218 T C 5.93 PASS AC=1;AF=0.50;AN=2;DB;DP=139;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=46.16;MQ0=1;OQ=829.41;QD=5.97;SB=-392.09 GT:AD:DP:GL:GQ 0/1:85,54:124:-123.60,-37.37,-339.83:99
-chr1 1640657 rs1059830 A G 689.07 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=136;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=46.01;MQ0=1;QD=5.07;SB=-273.97 GT:AD:DP:GL:GQ 0/1:84,52:114:-106.55,-34.36,-315.05:99
-chr1 1640661 rs1137004 T C 924.56 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=137;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=45.08;MQ0=1;QD=6.75;SB=-478.80 GT:AD:DP:GL:GQ 0/1:82,55:116:-130.68,-34.94,-330.64:99
-chr1 1640667 rs3200657 T C 2206.14 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=133;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=43.98;MQ0=1;QD=16.59;SB=-708.39 GT:AD:DP:GL:GQ 0/1:59,73:112:-259.82,-35.92,-162.90:99
-chr1 1640692 . A G 15.57 PASS AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=41.55;MQ0=0;OQ=1129.49;QD=8.89;SB=-491.78 GT:AD:DP:GL:GQ 0/1:59,68:99:-146.06,-29.83,-231.81:99
-chr1 1640705 rs1059831 G A 307.80 PASS AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=41.79;MQ0=0;OQ=1854.51;QD=15.72;SB=-686.99 GT:AD:DP:GL:GQ 0/1:63,55:86:-214.65,-25.92,-105.31:99
-chr1 1640780 rs36191908 G A 2.57 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=50.84;MQ0=0;OQ=222.00;QD=2.52;SB=-69.38 GT:AD:DP:GL:GQ 0/1:66,22:78:-49.00,-23.51,-215.31:99
-chr1 1640799 . G A 26.24 LowQual AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=54.16;MQ0=0;QD=0.29;SB=-18.77 GT:AD:DP:GL:GQ 0/1:79,12:87:-32.13,-26.22,-265.70:59.07
-chr1 1640856 . T C 1.18 PASS AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=51.06;MQ0=0;OQ=537.04;QD=4.84;SB=42.60 GT:AD:DP:GL:GQ 0/1:73,38:93:-85.00,-28.02,-284.38:99
-chr1 1640863 . G A 0.15 PASS AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=2;HaplotypeScore=0.93;MQ=50.41;MQ0=0;OQ=682.37;QD=6.20;SB=40.52 GT:AD:DP:GL:GQ 0/1:69,41:93:-99.55,-28.03,-223.44:99
-chr1 1640907 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=91;Dels=0.01;HRun=2;HaplotypeScore=10.49;MQ=48.20;MQ0=0;OQ=731.52;QD=8.04;SB=71.23 GT:AD:DP:GL:GQ 0/1:53,37:73:-98.42,-21.99,-174.07:99
-chr1 1640923 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=64.78;MQ=43.84;MQ0=1;OQ=272.78;QD=3.17;SB=56.20 GT:AD:DP:GL:GQ 0/1:67,19:80:-54.67,-24.11,-250.01:99
-chr1 1640931 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=98.55;MQ=40.13;MQ0=1;OQ=147.14;QD=2.16;SB=38.15 GT:AD:DP:GL:GQ 0/1:57,11:64:-37.28,-19.28,-217.64:99
-chr1 1640986 . A C 0.64 PASS AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.69;MQ=43.40;MQ0=0;OQ=371.72;QD=5.81;SB=77.22 GT:AD:DP:GL:GQ 0/1:47,17:62:-59.13,-18.68,-158.05:99
-chr1 1640996 . C T 0.49 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=45.56;MQ0=0;OQ=291.78;QD=4.63;SB=80.17 GT:AD:DP:GL:GQ 0/1:49,14:56:-49.34,-16.88,-145.60:99
-chr1 1641016 . C T 53.74 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=51.28;MQ0=0;QD=0.87;SB=74.21 GT:AD:DP:GL:GQ 0/1:47,15:50:-23.72,-15.06,-152.06:86.58
-chr1 1641017 . A G 257.15 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=51.43;MQ0=0;QD=4.08;SB=80.28 GT:AD:DP:GL:GQ 0/1:48,15:61:-47.39,-18.39,-179.46:99
-chr1 1641026 . C T 369.95 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=52.99;MQ0=0;QD=5.97;SB=74.25 GT:AD:DP:GL:GQ 0/1:47,15:60:-58.35,-18.07,-168.55:99
-chr1 1641040 . G C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.80;MQ=51.94;MQ0=0;OQ=253.54;QD=4.23;SB=74.26 GT:AD:DP:GL:GQ 0/1:44,15:55:-45.26,-16.62,-168.61:99
-chr1 1641126 rs12137617 A G 24.87 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.12;MQ=54.87;MQ0=0;OQ=1275.18;QD=31.10;SB=-536.43 GT:AD:DP:GL:GQ 1/1:0,41:37:-131.12,-11.15,-0.02:99
-chr1 1641482 rs11260627 C T 34.89 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=55.33;MQ0=0;OQ=1435.98;QD=36.82;SB=-496.00 GT:AD:DP:GL:GQ 1/1:0,39:37:-147.19,-11.15,-0.01:99
-chr1 1641491 rs12135951 T G 20.84 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=56.50;MQ0=0;OQ=197.57;QD=5.20;SB=-66.56 GT:AD:DP:GL:GQ 0/1:25,13:35:-33.59,-10.55,-90.46:99
-chr1 1641587 rs12044811 G A 0.08 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=15.92;MQ=55.20;MQ0=1;OQ=1462.24;QD=35.66;SB=-578.76 GT:AD:DP:GL:GQ 1/1:1,40:37:-149.82,-11.15,-0.01:99
-chr1 1641608 rs12044814 G C 398.84 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.85;MQ0=0;OQ=998.26;QD=30.25;SB=-358.22 GT:AD:DP:GL:GQ 1/1:1,32:26:-103.43,-7.84,-0.02:78.25
-chr1 1641675 rs4648768 T C 52.50 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=49.39;MQ0=0;OQ=640.24;QD=18.29;SB=-205.57 GT:AD:DP:GL:GQ 1/1:0,32:21:-67.63,-6.34,-0.02:63.13
-chr1 1641761 rs4648772 T C 503.17 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.21;MQ0=0;OQ=1369.78;QD=30.44;SB=-625.00 GT:AD:DP:GL:GQ 1/1:0,45:43:-140.60,-12.97,-0.03:99
-chr1 1641771 rs4648773 C A 18.84 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=2.41;MQ=54.78;MQ0=0;OQ=1559.28;QD=33.90;SB=-751.90 GT:AD:DP:GL:GQ 1/1:0,46:44:-159.53,-13.25,-0.02:99
-chr1 1641797 rs4648775 G A 91.99 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=54.06;MQ0=0;OQ=1591.86;QD=36.18;SB=-734.99 GT:AD:DP:GL:GQ 1/1:0,44:41:-162.79,-12.35,-0.01:99
-chr1 1641822 rs4648776 G A 529.47 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.06;MQ0=0;OQ=1730.65;QD=38.46;SB=-774.66 GT:AD:DP:GL:GQ 1/1:0,45:44:-176.66,-13.26,-0.01:99
-chr1 1642086 rs4648777 A G 238.91 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.56;MQ0=1;OQ=1172.89;QD=24.44;SB=-406.15 GT:AD:DP:GL:GQ 1/1:1,47:39:-120.92,-11.77,-0.04:99
-chr1 1642864 rs36039898 T C 113.78 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.55;MQ0=0;OQ=2211.83;QD=36.26;SB=-727.29 GT:AD:DP:GL:GQ 1/1:0,61:61:-224.79,-18.37,-0.02:99
-chr1 1642888 rs16825265 C T 105.46 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=54.90;MQ0=0;OQ=2464.17;QD=40.40;SB=-985.30 GT:AD:DP:GL:GQ 1/1:0,61:61:-250.01,-18.37,-0.01:99
-chr1 1643163 rs35548050 T C 620.20 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.02;MQ0=0;OQ=2383.87;QD=34.06;SB=-1115.83 GT:AD:DP:GL:GQ 1/1:0,70:67:-241.99,-20.18,-0.02:99
-chr1 1643221 rs2206307 C T 629.97 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.40;MQ0=0;OQ=2196.71;QD=34.87;SB=-1116.03 GT:AD:DP:GL:GQ 1/1:0,63:57:-223.28,-17.18,-0.02:99
-chr1 1643274 rs2206308 C T 615.08 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.68;MQ0=0;OQ=2077.20;QD=37.77;SB=-1010.04 GT:AD:DP:GL:GQ 1/1:0,55:53:-211.32,-15.97,-0.02:99
-chr1 1643659 rs2223485 C T 454.72 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.70;MQ0=1;OQ=1724.40;QD=36.69;SB=-535.21 GT:AD:DP:GL:GQ 1/1:0,47:43:-176.03,-12.95,-0.01:99
-chr1 1643745 rs61777493 C A 268.51 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=53.15;MQ0=3;OQ=2449.58;QD=34.50;SB=-1240.29 GT:AD:DP:GL:GQ 1/1:3,68:66:-248.56,-19.87,-0.01:99
-chr1 1643867 . A T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=19.40;MQ0=14;OQ=84.98;QD=3.04;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,15:12:-15.40,-3.61,-30.71:99
-chr1 1643873 . C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=27;Dels=0.41;HRun=0;HaplotypeScore=83.92;MQ=18.34;MQ0=14;OQ=350.65;QD=12.99;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:10:-42.29,-6.54,-3.64:28.97
-chr1 1643898 rs61777494 G A 157 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.17;MQ0=2;OQ=461.81;QD=27.17;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,16:12:-49.77,-3.61,-0.00:36.12
-chr1 1643918 rs61777495 C T 757.85 Indel AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.37;MQ0=1;QD=31.58;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,23:19:-79.37,-5.72,-0.00:57.19
-chr1 1643924 . A T 950.73 Indel AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.62;MQ0=1;QD=30.67;SB=-180.94 GT:AD:DP:GL:GQ 1/1:1,30:26:-98.67,-7.83,-0.01:78.24
-chr1 1644591 rs61777496 G A 138.94 PASS AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.34;MQ0=0;OQ=130.88;QD=26.18;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:4:-16.62,-1.20,-0.00:12.04
-chr1 1644813 rs2056977 A G 170.73 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.65;MQ0=9;OQ=292.06;QD=7.69;SB=-147.83 GT:AD:DP:GL:GQ 1/1:7,31:10:-32.80,-3.01,-0.01:30.08
-chr1 1645334 rs11486024 G A 35.89 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=22.46;MQ0=10;OQ=345.89;QD=5.67;SB=32.11 GT:AD:DP:GL:GQ 0/1:46,15:32:-47.52,-9.65,-66.64:99
-chr1 1645788 rs28649027 G C 26.17 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=53.44;MQ0=0;OQ=593.92;QD=15.23;SB=-280.31 GT:AD:DP:GL:GQ 0/1:20,19:36:-73.54,-10.87,-73.49:99
-chr1 1646881 rs61777497 T C 0.39 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=11.68;MQ0=43;OQ=71.62;QD=1.23;SB=-32.65 GT:AD:DP:GL:GQ 0/1:40,18:10:-13.46,-3.01,-23.67:99
-chr1 1646928 . C T 0.40 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=15.38;MQ0=21;OQ=97.42;QD=2.87;SB=-39.65 GT:AD:DP:GL:GQ 0/1:20,14:7:-15.13,-2.11,-10.71:85.98
-chr1 1646938 rs61776763 A G 17.48 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=2.10;MQ=17.28;MQ0=15;OQ=266.90;QD=8.34;SB=-88.98 GT:AD:DP:GL:GQ 1/1:0,32:9:-30.28,-2.71,-0.01:27.04
-chr1 1646996 rs4648783 T C 206.37 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=31.62;MQ0=1;OQ=494.82;QD=9.00;SB=-214.36 GT:AD:DP:GL:GQ 0/1:25,30:43:-65.73,-12.96,-90.44:99
-chr1 1647044 rs4648784 C G 2.96 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=1.82;MQ=32.49;MQ0=8;OQ=1818.45;QD=23.93;SB=-827.04 GT:AD:DP:GL:GQ 0/1:14,62:58:-202.62,-17.49,-37.52:99
-chr1 1647352 rs9439501 G C 210.43 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=45.38;MQ0=4;OQ=1643.24;QD=34.96;SB=-614.99 GT:AD:DP:GL:GQ 1/1:0,47:39:-167.92,-11.75,-0.01:99
-chr1 1647425 rs11576302 G A 125.25 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=52.45;MQ0=0;OQ=868.24;QD=17.72;SB=-259.77 GT:AD:DP:GL:GQ 0/1:23,26:49:-104.87,-14.76,-83.38:99
-chr1 1647461 rs11589282 T C 44.46 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=0.94;MQ=51.71;MQ0=1;OQ=1927.78;QD=33.24;SB=-715.12 GT:AD:DP:GL:GQ 1/1:0,58:56:-196.39,-16.87,-0.02:99
-chr1 1648203 rs4648785 T C 8.14 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=39.29;MQ0=4;OQ=1376.56;QD=30.59;SB=-396.50 GT:AD:DP:GL:GQ 1/1:0,45:38:-141.25,-11.44,-0.01:99
-chr1 1648805 rs1062057 T C 6.42 PASS AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=1;HaplotypeScore=3.69;MQ=25.80;MQ0=25;OQ=1469.54;QD=13.86;SB=-734.60 GT:AD:DP:GL:GQ 0/1:45,61:78:-173.74,-23.50,-116.68:99
-chr1 1649970 rs1801781 C A 600.71 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.53;MQ0=0;OQ=2075.47;QD=36.41;SB=-874.83 GT:AD:DP:GL:GQ 1/1:0,57:57:-211.15,-17.17,-0.01:99
-chr1 1650495 rs2377220 T G 497.64 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.20;MQ0=1;OQ=1908.80;QD=31.81;SB=-547.03 GT:AD:DP:GL:GQ 1/1:0,60:54:-194.48,-16.27,-0.02:99
-chr1 1650579 . G C 24.29 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=9.52;MQ=48.11;MQ0=12;QD=0.34;SB=80.30 GT:AD:DP:GL:GQ 0/1:60,12:43:-18.68,-12.97,-167.36:57.11
-chr1 1650586 rs28662997 T C 0.09 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=7.30;MQ=48.54;MQ0=13;OQ=175.02;QD=2.22;SB=-47.44 GT:AD:DP:GL:GQ 0/1:53,26:60:-38.86,-18.08,-194.29:99
-chr1 1650595 rs1061883 T C 0.11 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=49.38;MQ0=13;OQ=60.20;QD=0.69;SB=-8.74 GT:AD:DP:GL:GQ 0/1:58,29:65:-28.90,-19.59,-216.78:93.04
-chr1 1651158 rs1546882 A G 91.08 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=1.86;MQ=36.24;MQ0=1;OQ=1126.99;QD=14.09;SB=-474.67 GT:AD:DP:GL:GQ 0/1:32,48:73:-138.00,-22.01,-116.79:99
-chr1 1651704 rs61777505 G C 26.06 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.62;MQ=32.64;MQ0=2;OQ=1226.35;QD=32.27;SB=-479.52 GT:AD:DP:GL:GQ 1/1:4,34:33:-134.22,-9.95,-8.01:19.39
-chr1 1652175 . C G 107.65 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.31;MQ0=18;OQ=446.15;QD=8.42;SB=-112.32 GT:AD:DP:GL:GQ 0/1:32,21:35:-58.45,-10.56,-85.98:99
-chr1 1652288 rs2281171 A G 55.47 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.68;MQ=47.07;MQ0=0;OQ=1046.84;QD=33.77;SB=-483.46 GT:AD:DP:GL:GQ 1/1:0,31:31:-108.28,-9.34,-0.01:93.26
-chr1 1652674 rs61777506 T C 260.73 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.10;MQ0=0;OQ=1515.24;QD=32.94;SB=-289.56 GT:AD:DP:GL:GQ 1/1:0,46:45:-155.13,-13.56,-0.02:99
-chr1 1652697 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=17;HaplotypeScore=26.60;MQ=53.41;MQ0=0;OQ=216.45;QD=3.80;SB=47.16 GT:AD:DP:GL:GQ 0/1:42,15:40:-36.99,-12.06,-92.34:99
-chr1 1652700 . G A 48.19 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=2;HaplotypeScore=19.75;MQ=52.95;MQ0=0;QD=0.96;SB=53.18 GT:AD:DP:GL:GQ 0/1:40,10:33:-18.05,-9.95,-95.61:81.03
-chr1 1652755 rs61777507 A G 615.92 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=1969.12;QD=34.55;SB=-927.86 GT:AD:DP:GL:GQ 1/1:0,57:57:-200.52,-17.17,-0.03:99
-chr1 1653262 rs34298494 A C 3.15 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=4.92;MQ=57.93;MQ0=0;OQ=1820.14;QD=28.89;SB=-933.22 GT:AD:DP:GL:GQ 1/1:0,63:59:-185.65,-17.78,-0.05:99
-chr1 1653465 . A G 0.67 PASS AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.82;MQ=58.69;MQ0=0;OQ=1218.77;QD=28.34;SB=-585.02 GT:AD:DP:GL:GQ 1/1:0,43:39:-125.50,-11.76,-0.03:99
-chr1 1653691 rs3817856 C T 262.98 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=59.21;MQ0=0;OQ=2006.29;QD=37.85;SB=-990.80 GT:AD:DP:GL:GQ 1/1:0,53:51:-204.23,-15.37,-0.02:99
-chr1 1653879 rs2294488 T C 118.63 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=52.10;MQ0=0;OQ=1419.75;QD=28.40;SB=-681.96 GT:AD:DP:GL:GQ 1/1:0,49:45:-145.60,-13.57,-0.04:99
-chr1 1653984 rs2294489 T C 14.56 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.63;MQ=58.58;MQ0=0;OQ=1353.88;QD=31.49;SB=-691.09 GT:AD:DP:GL:GQ 1/1:0,43:40:-138.99,-12.05,-0.02:99
-chr1 1655431 rs61777508 T G 492.95 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.47;MQ0=3;OQ=2585.92;QD=31.92;SB=-532.88 GT:AD:DP:GL:GQ 1/1:0,81:75:-262.21,-22.59,-0.04:99
-chr1 1655473 rs4648764 A G 513.83 PASS AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.46;MQ0=4;OQ=2874.97;QD=29.64;SB=-827.61 GT:AD:DP:GL:GQ 1/1:1,96:86:-291.13,-25.92,-0.05:99
-chr1 1655600 rs2281176 T C 43.16 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=43.78;MQ0=0;OQ=2374.61;QD=30.44;SB=-588.04 GT:AD:DP:GL:GQ 1/1:0,78:71:-241.09,-21.40,-0.04:99
-chr1 1655607 rs2281177 T C 16.19 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=43.12;MQ0=0;OQ=1801.45;QD=22.24;SB=-550.84 GT:AD:DP:GL:GQ 0/1:17,64:75:-206.03,-22.60,-57.34:99
-chr1 1656111 . G A 19.94 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=24.98;MQ0=9;OQ=1269.10;QD=20.14;SB=-363.89 GT:AD:DP:GL:GQ 0/1:20,43:51:-145.56,-15.37,-46.93:99
-chr1 1656198 rs2072924 G A 130.85 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=29.23;MQ0=3;OQ=1510.31;QD=34.33;SB=-636.84 GT:AD:DP:GL:GQ 1/1:0,44:39:-154.63,-11.75,-0.02:99
-chr1 1656202 rs2072925 A G 35.86 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=31.20;MQ0=3;OQ=1130.90;QD=24.58;SB=-545.87 GT:AD:DP:GL:GQ 1/1:0,46:37:-116.71,-11.16,-0.04:99
-chr1 1656475 rs2076325 C T 114.33 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=50.53;MQ0=0;OQ=1787.32;QD=37.24;SB=-867.16 GT:AD:DP:GL:GQ 1/1:0,48:46:-182.33,-13.86,-0.01:99
-chr1 1657113 rs1474648 T C 589.09 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.20;MQ0=0;OQ=2447.49;QD=32.63;SB=-1145.82 GT:AD:DP:GL:GQ 1/1:0,75:68:-248.35,-20.48,-0.02:99
-chr1 1657231 rs1474649 A G 31.11 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=49.42;MQ0=0;OQ=1497.15;QD=33.27;SB=-642.31 GT:AD:DP:GL:GQ 1/1:0,45:43:-153.31,-12.95,-0.02:99
-chr1 1657279 rs2377208 A C 135.92 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=44.04;MQ0=1;OQ=1645.48;QD=30.47;SB=-668.23 GT:AD:DP:GL:GQ 1/1:0,54:48:-168.15,-14.46,-0.02:99
-chr1 1658028 rs28718827 G T 1.42 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=10.14;MQ=51.62;MQ0=0;OQ=1872.10;QD=31.73;SB=-828.68 GT:AD:DP:GL:GQ 1/1:2,57:55:-190.82,-16.57,-0.03:99
-chr1 1658119 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.03;HRun=18;HaplotypeScore=24.79;MQ=51.46;MQ0=0;OQ=102.87;QD=1.49;SB=-23.99 GT:AD:DP:GL:GQ 0/1:55,12:49:-28.05,-14.47,-131.71:99
-chr1 1658135 rs2889577 A G 0.64 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=15.54;MQ=53.86;MQ0=0;OQ=1611.78;QD=21.78;SB=-529.45 GT:AD:DP:GL:GQ 1/1:8,66:53:-172.54,-15.98,-7.77:82.05
-chr1 1658803 rs28537345 A C 60.48 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.02;HRun=1;HaplotypeScore=0.16;MQ=51.80;MQ0=0;OQ=1884.76;QD=31.95;SB=-820.50 GT:AD:DP:GL:GQ 1/1:0,58:56:-192.08,-16.57,-0.02:99
-chr1 1659088 rs11485870 T C 2.06 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=5.25;MQ=48.74;MQ0=0;OQ=1314.03;QD=25.77;SB=-582.00 GT:AD:DP:GL:GQ 1/1:2,49:46:-142.54,-13.87,-7.55:63.21
-chr1 1659426 rs9442408 C T 56.19 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=38.94;MQ0=1;OQ=469.40;QD=7.96;SB=-62.79 GT:AD:DP:GL:GQ 0/1:41,18:57:-67.39,-17.17,-141.22:99
-chr1 1659594 rs61777512 G T 329.49 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.52;MQ0=1;OQ=761.00;QD=27.18;SB=-349.52 GT:AD:DP:GL:GQ 1/1:2,26:23:-79.70,-6.93,-0.01:69.17
-chr1 1659896 . C A 16.91 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=18.32;MQ0=25;OQ=324.85;QD=7.55;SB=-33.35 GT:AD:DP:GL:GQ 0/1:14,29:14:-39.99,-4.22,-11.38:71.59
-chr1 1659905 . C T 19.49 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=18.62;MQ0=24;OQ=356.25;QD=8.28;SB=-31.52 GT:AD:DP:GL:GQ 0/1:14,29:15:-43.43,-4.52,-12.58:80.58
-chr1 1661214 rs2005995 G A 408.17 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=11.78;MQ0=23;OQ=327.72;QD=9.93;SB=-165.22 GT:AD:DP:GL:GQ 1/1:16,17:9:-36.36,-2.71,-0.00:27.09
-chr1 1661590 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.96;MQ=36.56;MQ0=3;OQ=54.36;QD=1.05;SB=68.26 GT:AD:DP:GL:GQ 0/1:38,14:35:-19.28,-10.56,-129.90:87.20
-chr1 1661642 rs4648793 C T 457.64 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.04;MQ0=0;OQ=1470.76;QD=37.71;SB=-587.27 GT:AD:DP:GL:GQ 1/1:0,39:38:-150.68,-11.45,-0.01:99
-chr1 1661726 rs7364986 A T 4.25 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=5.15;MQ=47.34;MQ0=1;OQ=2656.76;QD=33.63;SB=-1106.52 GT:AD:DP:GL:GQ 1/1:0,79:72:-269.28,-21.69,-0.02:99
-chr1 1662002 . C T 0.16 PASS AC=2;AF=1.00;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=5.72;MQ=52.52;MQ0=1;OQ=1857.08;QD=37.14;SB=-705.36 GT:AD:DP:GL:GQ 1/1:0,50:47:-189.31,-14.16,-0.02:99
-chr1 1662772 . C T 43.11 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=50.80;MQ0=2;QD=0.70;SB=83.20 GT:AD:DP:GL:GQ 0/1:53,9:53:-23.58,-15.98,-150.38:75.94
-chr1 1663032 . T C 46.58 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.24;MQ=53.54;MQ0=2;QD=0.93;SB=38.12 GT:AD:DP:GL:GQ 0/1:38,9:34:-18.20,-10.26,-102.10:79.41
-chr1 1663379 rs35790103 T C 8.23 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=-0.24;MQ=57.22;MQ0=0;OQ=1409.71;QD=33.56;SB=-634.30 GT:AD:DP:GL:GQ 1/1:0,42:41:-144.58,-12.35,-0.02:99
-chr1 1663767 rs35678883 G C 8.07 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=2.38;MQ=50.72;MQ0=2;OQ=2425.38;QD=39.12;SB=-647.42 GT:AD:DP:GL:GQ 1/1:0,62:56:-246.15,-16.88,-0.03:99
-chr1 1663886 rs36050429 G C 377.70 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.29;MQ0=3;OQ=1259.11;QD=34.03;SB=-328.71 GT:AD:DP:GL:GQ 1/1:0,37:30:-129.51,-9.04,-0.01:90.30
-chr1 1664767 . G C 282.90 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.97;MQ0=0;OQ=606.08;QD=13.77;SB=-320.01 GT:AD:DP:GL:GQ 0/1:24,20:40:-75.96,-12.06,-88.71:99
-chr1 1664855 . A G 129.97 Indel AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=9.28;MQ=43.11;MQ0=1;QD=4.06;SB=-24.89 GT:AD:DP:GL:GQ 0/1:24,8:26:-24.12,-7.84,-71.93:99
-chr1 1664856 . G A 433.28 Indel AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=12;HaplotypeScore=9.83;MQ=42.77;MQ0=1;QD=12.74;SB=-25.59 GT:AD:DP:GL:GQ 0/1:18,16:29:-55.35,-8.74,-47.19:99
-chr1 1665027 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=13;HaplotypeScore=3.74;MQ=53.18;MQ0=0;OQ=78.07;QD=1.28;SB=0.76 GT:AD:DP:GL:GQ 0/1:47,14:45:-24.65,-13.56,-131.48:99
-chr1 1665395 . C T 17.70 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.53;MQ=22.06;MQ0=30;QD=0.34;SB=14.07 GT:AD:DP:GL:GQ 0/1:42,10:21:-11.37,-6.32,-66.25:50.46
-chr1 1667416 rs16824474 G C 10.38 LowQual AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=47.86;MQ0=3;QD=0.61;SB=-0.97 GT:AD:DP:GL:GQ 0/1:12,5:14:-8.50,-4.22,-50.97:42.79
-chr1 1670869 . G C 14.33 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=45.06;MQ0=4;QD=0.19;SB=74.28 GT:AD:DP:GL:GQ 0/1:64,12:62:-23.39,-18.69,-239.55:47
-chr1 1670881 . G C 19.24 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=4.38;MQ=42.81;MQ0=4;QD=0.27;SB=74.28 GT:AD:DP:GL:GQ 0/1:59,12:59:-22.99,-17.79,-226.11:52.02
-chr1 1670904 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=38.22;MQ0=4;OQ=63.86;QD=0.91;SB=56.13 GT:AD:DP:GL:GQ 0/1:50,20:51:-25.06,-15.39,-141.72:96.69
-chr1 1670928 . G A 848.58 HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=30.83;MQ0=10;QD=13.91;SB=-297.25 GT:AD:DP:GL:GQ 0/1:30,31:35:-98.68,-10.54,-33.99:99
-chr1 1670936 . G T 255.10 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=3;HaplotypeScore=4.00;MQ=28.80;MQ0=12;QD=3.99;SB=20.07 GT:AD:DP:GL:GQ 0/1:33,31:36:-39.64,-10.84,-86.07:99
-chr1 1671525 rs35301881 C T 26.84 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=43.35;MQ0=4;OQ=980.88;QD=30.65;SB=-483.00 GT:AD:DP:GL:GQ 1/1:4,28:26:-101.68,-7.83,-0.01:78.25
-chr1 1672234 rs4648812 G A 127.32 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=26.23;MQ0=1;OQ=275.04;QD=7.86;SB=-150.63 GT:AD:DP:GL:GQ 0/1:24,11:30:-39.83,-9.05,-63.69:99
-chr1 1673187 rs14390 C T 78.82 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=730.68;QD=36.53;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,20:19:-76.66,-5.72,-0.00:57.19
-chr1 1673425 rs12588 G A 34.78 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=30.14;MQ0=16;OQ=466.02;QD=6.66;SB=-83.01 GT:AD:DP:GL:GQ 0/1:47,23:47:-64.06,-14.17,-100.00:99
-chr1 1675073 rs2072928 C G 44.21 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.71;MQ=59.55;MQ0=0;OQ=1934.62;QD=37.93;SB=-835.43 GT:AD:DP:GL:GQ 1/1:0,51:47:-197.07,-14.17,-0.02:99
-chr1 1675900 rs4751 G T 24.68 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=1.42;MQ=59.65;MQ0=0;OQ=1889.22;QD=34.99;SB=-617.91 GT:AD:DP:GL:GQ 1/1:0,54:52:-192.52,-15.66,-0.02:99
-chr1 1676803 rs2072929 T C 69.29 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=1256.22;QD=28.55;SB=-491.53 GT:AD:DP:GL:GQ 1/1:0,44:41:-129.26,-12.37,-0.05:99
-chr1 1676822 rs2076327 C T 34.01 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=58.97;MQ0=0;OQ=1637.49;QD=36.39;SB=-774.03 GT:AD:DP:GL:GQ 1/1:0,45:43:-167.35,-12.96,-0.02:99
-chr1 1677485 rs34306661 T C 77.88 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=60.00;MQ0=0;OQ=1787.88;QD=27.94;SB=-566.94 GT:AD:DP:GL:GQ 1/1:0,64:57:-182.43,-17.19,-0.05:99
-chr1 1677651 . C T 157.32 PASS AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=1381.04;QD=20.92;SB=-549.37 GT:AD:DP:GL:GQ 0/1:23,43:64:-160.68,-19.29,-80.55:99
-chr1 1677956 . C T 7.81 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=59.68;MQ0=0;OQ=1209.30;QD=20.50;SB=-531.10 GT:AD:DP:GL:GQ 0/1:22,37:56:-141.09,-16.88,-73.03:99
-chr1 1678052 rs2281173 A G 576.86 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1215.40;QD=30.39;SB=-536.99 GT:AD:DP:GL:GQ 1/1:0,40:39:-125.17,-11.77,-0.04:99
-chr1 1678329 rs4648623 C G 0.20 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=58.16;MQ0=0;OQ=844.68;QD=36.73;SB=-124.74 GT:AD:DP:GL:GQ 1/1:0,23:22:-88.07,-6.64,-0.02:66.21
-chr1 1678373 rs4648624 G T 1.77 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=58.84;MQ0=0;OQ=639.15;QD=31.96;SB=-120.84 GT:AD:DP:GL:GQ 1/1:0,20:19:-67.51,-5.72,-0.01:57.16
-chr1 1679024 rs2235536 C T 173.64 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.47;MQ0=0;OQ=2302.66;QD=39.70;SB=-1126.49 GT:AD:DP:GL:GQ 1/1:0,58:58:-233.87,-17.47,-0.02:99
-chr1 1679622 rs2235537 T C 108.22 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=59.56;MQ0=0;OQ=1772.95;QD=33.45;SB=-589.32 GT:AD:DP:GL:GQ 1/1:0,53:52:-180.90,-15.67,-0.02:99
-chr1 1681624 . G A 66.45 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=58.28;MQ0=0;OQ=379.97;QD=10.00;SB=-141.64 GT:AD:DP:GL:GQ 0/1:24,13:33:-51.23,-9.94,-69.72:99
-chr1 1682181 rs1107910 T C 610.89 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1733.17;QD=30.41;SB=-652.94 GT:AD:DP:GL:GQ 1/1:0,57:55:-176.95,-16.58,-0.05:99
-chr1 1683963 rs2011384 A G 3.98 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=4.20;MQ=58.55;MQ0=0;OQ=1546.21;QD=34.36;SB=-525.21 GT:AD:DP:GL:GQ 1/1:0,45:43:-158.22,-12.95,-0.01:99
-chr1 1684111 . C T 6.27 PASS AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=0;HaplotypeScore=5.81;MQ=58.90;MQ0=0;OQ=1337.84;QD=16.12;SB=-601.14 GT:AD:DP:GL:GQ 0/1:40,41:79:-160.90,-23.83,-119.77:99
-chr1 1685322 rs4648629 C A 210.40 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.13;MQ0=0;OQ=2599.96;QD=34.67;SB=-1123.97 GT:AD:DP:GL:GQ 1/1:0,75:71:-263.60,-21.38,-0.02:99
-chr1 1685434 rs876029 G T 83.73 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1202.21;QD=31.64;SB=-492.27 GT:AD:DP:GL:GQ 1/1:0,38:36:-123.83,-10.85,-0.02:99
-chr1 1685691 rs63093560 C T 514.92 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=1899.13;QD=37.98;SB=-713.35 GT:AD:DP:GL:GQ 1/1:0,50:49:-193.52,-14.77,-0.02:99
-chr1 1686194 rs35270315 A C 13.33 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=3.38;MQ=58.28;MQ0=0;OQ=2324.40;QD=30.19;SB=-1042.79 GT:AD:DP:GL:GQ 1/1:0,77:73:-236.08,-22.00,-0.06:99
-chr1 1686519 . A G 162.43 PASS AC=2;AF=1.00;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1839.98;QD=29.21;SB=-784.98 GT:AD:DP:GL:GQ 1/1:0,63:60:-187.66,-18.11,-0.08:99
-chr1 1687967 rs35086222 C T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=6;HaplotypeScore=6.25;MQ=58.18;MQ0=0;OQ=2341.51;QD=37.77;SB=-1078.61 GT:AD:DP:GL:GQ 1/1:1,61:60:-237.76,-18.08,-0.02:99
-chr1 1688667 rs4648826 C G 14.69 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=58.62;MQ0=0;OQ=2540.02;QD=41.64;SB=-864.78 GT:AD:DP:GL:GQ 1/1:0,61:58:-257.61,-17.48,-0.02:99
-chr1 1689061 rs4648827 C A 174 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2030.67;QD=34.42;SB=-1001.13 GT:AD:DP:GL:GQ 1/1:1,58:58:-206.68,-17.47,-0.02:99
-chr1 1692374 rs6658139 T C 285.34 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.82;MQ0=0;OQ=1093.26;QD=29.55;SB=-273.03 GT:AD:DP:GL:GQ 0/1:3,34:37:-123.62,-11.15,-11.29:1.44
-chr1 1694514 rs61774982 C A 248.31 PASS AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.73;MQ0=0;OQ=726.51;QD=34.60;SB=-285.07 GT:AD:DP:GL:GQ 1/1:0,21:21:-76.24,-6.33,-0.01:63.18
-chr1 1695016 . T A 11.74 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=37;Dels=0.03;HRun=0;HaplotypeScore=27.67;MQ=32.06;MQ0=0;QD=0.32;SB=-25.92 GT:AD:DP:GL:GQ 0/1:10,26:10:-7.44,-3.01,-29.53:44.28
-chr1 1695024 . T A 13.63 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=9.62;MQ=29.68;MQ0=0;QD=0.39;SB=-25.92 GT:AD:DP:GL:GQ 0/1:9,26:10:-7.64,-3.01,-29.53:46.28
-chr1 1695026 . T A 81.80 SnpCluster AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=32.06;MQ0=0;QD=2.21;SB=-59.89 GT:AD:DP:GL:GQ 0/1:8,29:12:-15.08,-3.61,-28.63:99
-chr1 1695028 . T A 128.81 SnpCluster AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.66;MQ=32.06;MQ0=0;QD=3.48;SB=-77.75 GT:AD:DP:GL:GQ 0/1:7,30:9:-18.88,-2.71,-13.92:99
-chr1 1695464 rs61774983 A G 565.11 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.28;MQ0=0;OQ=1675.23;QD=34.19;SB=-712.27 GT:AD:DP:GL:GQ 1/1:0,49:49:-171.13,-14.76,-0.02:99
-chr1 1695607 rs6603809 G A 610.11 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.73;MQ0=0;OQ=1827.34;QD=36.55;SB=-919.23 GT:AD:DP:GL:GQ 1/1:0,50:48:-186.34,-14.47,-0.02:99
-chr1 1695633 rs6603810 A G 70.23 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.63;MQ0=1;OQ=1141.91;QD=27.85;SB=-557.89 GT:AD:DP:GL:GQ 1/1:0,41:37:-117.81,-11.16,-0.04:99
-chr1 1695996 rs6603811 T C 513.06 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1134.00;QD=29.08;SB=-433.18 GT:AD:DP:GL:GQ 1/1:0,39:37:-117.03,-11.17,-0.04:99
-chr1 1696020 rs7531583 A G 565.84 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1293.98;QD=28.76;SB=-649.94 GT:AD:DP:GL:GQ 1/1:0,45:43:-133.03,-12.97,-0.04:99
-chr1 1697600 rs12041925 T G 3.96 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=58.61;MQ0=0;OQ=1724.62;QD=29.73;SB=-619.85 GT:AD:DP:GL:GQ 1/1:0,58:53:-176.09,-15.97,-0.04:99
-chr1 1702090 rs10907194 C T 0.75 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=5.73;MQ=57.94;MQ0=0;OQ=1197.78;QD=35.23;SB=-529.68 GT:AD:DP:GL:GQ 1/1:1,33:31:-123.37,-9.34,-0.01:93.30
-chr1 1703208 rs10907195 C T 76.64 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.55;MQ0=0;OQ=1814.27;QD=37.80;SB=-686.40 GT:AD:DP:GL:GQ 1/1:0,48:45:-185.02,-13.55,-0.01:99
-chr1 1703574 rs454577 T G 67.40 PASS AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=652.72;QD=31.08;SB=-294.53 GT:AD:DP:GL:GQ 1/1:0,21:20:-68.87,-6.03,-0.01:60.16
-chr1 1703729 rs7534617 T G 38.29 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=59.38;MQ0=0;OQ=1200.11;QD=32.44;SB=-519.95 GT:AD:DP:GL:GQ 1/1:0,37:36:-123.61,-10.85,-0.02:99
-chr1 1704871 rs742359 C A 251.57 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.49;MQ0=0;OQ=1398.04;QD=31.07;SB=-698.80 GT:AD:DP:GL:GQ 1/1:0,45:41:-143.41,-12.36,-0.02:99
-chr1 1706848 . G A 26.61 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=3.11;MQ=59.44;MQ0=0;QD=0.65;SB=62.22 GT:AD:DP:GL:GQ 0/1:33,8:34:-16.19,-10.25,-103.26:59.43
-chr1 1709327 . C A 45.07 LowQual AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=18;HaplotypeScore=15.97;MQ=51.18;MQ0=0;QD=1.07;SB=-1.26 GT:AD:DP:GL:GQ 0/1:34,8:30:-16.83,-9.04,-86.61:77.90
-chr1 1710980 . G C 20.70 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.37;MQ=53.66;MQ0=1;QD=0.48;SB=38.15 GT:AD:DP:GL:GQ 0/1:38,5:37:-16.51,-11.16,-138.32:53.50
-chr1 1712688 rs3737627 G A 389.56 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1534.00;QD=37.41;SB=-461.61 GT:AD:DP:GL:GQ 1/1:0,41:41:-157.01,-12.36,-0.03:99
-chr1 1715121 rs7545812 A G 362.56 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=2055.38;QD=33.69;SB=-1042.38 GT:AD:DP:GL:GQ 1/1:0,61:58:-209.15,-17.47,-0.02:99
-chr1 1715620 rs6690956 C T 11.88 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=5.08;MQ=58.81;MQ0=0;OQ=2937.89;QD=37.67;SB=-1197.36 GT:AD:DP:GL:GQ 1/1:0,77:75:-297.40,-22.60,-0.03:99
-chr1 1716741 . G A 184.26 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=52.39;MQ0=0;OQ=1148.50;QD=16.18;SB=-579.64 GT:AD:DP:GL:GQ 0/1:37,34:69:-138.94,-20.80,-109.67:99
-chr1 1718547 rs6603794 C G 73.37 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.81;MQ=57.85;MQ0=0;OQ=2921.36;QD=42.96;SB=-1363.94 GT:AD:DP:GL:GQ 1/1:0,68:67:-295.74,-20.18,-0.02:99
-chr1 1722071 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=84;Dels=0.01;HRun=18;HaplotypeScore=24.45;MQ=58.30;MQ0=0;OQ=60.55;QD=0.72;SB=155.39 GT:AD:DP:GL:GQ 0/1:70,13:70:-30.14,-20.80,-197.36:93.38
-chr1 1724830 rs12077553 C T 351.52 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.34;MQ0=0;OQ=2450.74;QD=39.53;SB=-952.27 GT:AD:DP:GL:GQ 1/1:0,62:62:-248.68,-18.68,-0.02:99
-chr1 1726513 rs12134783 T G 35.44 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=59.11;MQ0=0;OQ=1936.28;QD=28.47;SB=-959.69 GT:AD:DP:GL:GQ 1/1:0,68:64:-197.28,-19.30,-0.07:99
-chr1 1726715 rs11260613 A G 12.97 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=55.98;MQ0=0;OQ=727.27;QD=23.46;SB=-220.64 GT:AD:DP:GL:GQ 1/1:0,31:24:-76.34,-7.24,-0.02:72.14
-chr1 1728231 rs11585349 C T 444.74 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.78;MQ0=0;OQ=853.44;QD=13.13;SB=-325.29 GT:AD:DP:GL:GQ 0/1:37,28:63:-107.61,-18.98,-131.07:99
-chr1 1728793 . C A 11.24 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=87;Dels=0.01;HRun=20;HaplotypeScore=12.66;MQ=49.01;MQ0=7;QD=0.13;SB=83.42 GT:AD:DP:GL:GQ 0/1:67,19:60:-22.45,-18.07,-182.40:43.74
-chr1 1731385 rs12407008 A G 570.73 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=1462.68;QD=34.02;SB=-730.24 GT:AD:DP:GL:GQ 1/1:0,43:43:-149.87,-12.95,-0.02:99
-chr1 1733337 rs4648725 G C 64.92 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=54.96;MQ0=0;OQ=2515.07;QD=40.57;SB=-1047.66 GT:AD:DP:GL:GQ 1/1:0,62:59:-255.12,-17.78,-0.02:99
-chr1 1733967 rs6603795 T C 231.72 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.62;MQ0=0;OQ=1265.69;QD=28.77;SB=-184.41 GT:AD:DP:GL:GQ 1/1:0,44:42:-130.20,-12.68,-0.05:99
-chr1 1736016 rs12408690 A G 634.80 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1961.02;QD=35.02;SB=-638.31 GT:AD:DP:GL:GQ 1/1:0,56:56:-199.70,-16.87,-0.02:99
-chr1 1736120 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=20;HaplotypeScore=11.72;MQ=42.99;MQ0=2;OQ=648.30;QD=8.64;SB=8.14 GT:AD:DP:GL:GQ 0/1:44,31:58:-85.60,-17.49,-115.79:99
-chr1 1737932 . A T 32.39 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=5;HaplotypeScore=48.11;MQ=56.04;MQ0=0;QD=0.40;SB=116.40 GT:AD:DP:GL:GQ 0/1:65,15:66:-26.41,-19.89,-217.38:65.23
-chr1 1737943 . C T 27.67 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=20;HaplotypeScore=10.01;MQ=51.69;MQ0=1;QD=0.36;SB=101.33 GT:AD:DP:GL:GQ 0/1:61,16:52:-21.72,-15.67,-162.40:60.50
-chr1 1739272 . T G 33.88 PASS AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=58.21;MQ0=0;OQ=1071.30;QD=13.56;SB=-555.72 GT:AD:DP:GL:GQ 0/1:40,39:77:-133.61,-23.19,-145.75:99
-chr1 1741546 rs12140085 T C 459.98 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.38;MQ0=0;OQ=960.01;QD=14.12;SB=-398.30 GT:AD:DP:GL:GQ 0/1:32,36:66:-119.17,-19.88,-129.12:99
-chr1 1741636 rs11260615 A G 471.98 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.06;MQ0=1;OQ=1308.14;QD=29.07;SB=-638.27 GT:AD:DP:GL:GQ 1/1:1,44:42:-134.44,-12.67,-0.04:99
-chr1 1742815 rs4648726 C T 274.47 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=3089.56;QD=40.12;SB=-1427.40 GT:AD:DP:GL:GQ 1/1:0,77:77:-312.56,-23.19,-0.02:99
-chr1 1743224 rs7542340 T C 171.92 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=3;HaplotypeScore=-0.06;MQ=58.50;MQ0=0;OQ=2101.69;QD=35.62;SB=-1028.76 GT:AD:DP:GL:GQ 1/1:0,59:59:-213.77,-17.77,-0.02:99
-chr1 1744541 . G A 32.03 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=61;Dels=0.03;HRun=20;HaplotypeScore=23.82;MQ=51.57;MQ0=1;QD=0.53;SB=71.26 GT:AD:DP:GL:GQ 0/1:45,13:49:-20.64,-14.16,-151.56:64.87
-chr1 1748886 rs9786963 T C 652.35 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1920.23;QD=32.55;SB=-686.89 GT:AD:DP:GL:GQ 1/1:0,59:59:-195.65,-17.79,-0.04:99
-chr1 1748914 rs10907187 G A 586.04 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2397.92;QD=36.89;SB=-817.09 GT:AD:DP:GL:GQ 1/1:0,65:65:-243.43,-19.61,-0.05:99
-chr1 1750849 rs12568603 A C 141.73 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=1462.88;QD=34.02;SB=-618.64 GT:AD:DP:GL:GQ 1/1:0,43:43:-149.89,-12.95,-0.02:99
-chr1 1751196 rs1999704 A C 13.93 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=2.14;MQ=56.69;MQ0=1;OQ=2047.05;QD=32.49;SB=-593.04 GT:AD:DP:GL:GQ 1/1:1,62:59:-208.31,-17.77,-0.02:99
-chr1 1751865 rs11260616 A T 0.13 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=6;HaplotypeScore=1.13;MQ=59.11;MQ0=0;OQ=1852.12;QD=35.62;SB=-771.53 GT:AD:DP:GL:GQ 1/1:0,52:52:-188.82,-15.67,-0.02:99
-chr1 1751874 rs7553640 T C 711.95 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1893.02;QD=35.06;SB=-889.04 GT:AD:DP:GL:GQ 1/1:0,54:53:-192.90,-15.97,-0.02:99
-chr1 1752558 rs6603796 T C 171.81 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.20;MQ0=0;OQ=1646.02;QD=32.27;SB=-583.16 GT:AD:DP:GL:GQ 1/1:0,51:48:-168.22,-14.47,-0.03:99
-chr1 1755443 rs6603797 T C 720.20 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=2694.93;QD=35.46;SB=-935.73 GT:AD:DP:GL:GQ 1/1:0,76:74:-273.10,-22.29,-0.02:99
-chr1 1755954 rs6663586 A C 220.63 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.45;MQ0=0;OQ=1370.69;QD=32.64;SB=-604.02 GT:AD:DP:GL:GQ 1/1:0,42:40:-140.67,-12.05,-0.02:99
-chr1 1756219 rs6603798 A G 29.08 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=55.51;MQ0=2;OQ=1475.64;QD=28.38;SB=-669.92 GT:AD:DP:GL:GQ 1/1:2,50:47:-151.19,-14.18,-0.04:99
-chr1 1757221 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=20;HaplotypeScore=10.23;MQ=53.30;MQ0=1;OQ=618.88;QD=9.67;SB=31.58 GT:AD:DP:GL:GQ 0/1:38,25:58:-82.66,-17.49,-122.37:99
-chr1 1758520 rs10752417 C G 0.14 PASS AC=2;AF=1.00;AN=2;DB;DP=106;Dels=0.00;HRun=1;HaplotypeScore=5.58;MQ=57.83;MQ0=0;OQ=4550.45;QD=42.93;SB=-2086.29 GT:AD:DP:GL:GQ 1/1:0,106:103:-454.04,-31.03,-0.03:99
-chr1 1758754 rs10907188 C T 32.55 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=58.85;MQ0=1;OQ=2558.37;QD=38.18;SB=-882.18 GT:AD:DP:GL:GQ 1/1:1,66:64:-259.44,-19.28,-0.02:99
-chr1 1759918 rs6603799 T C 1.47 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=10.20;MQ=56.09;MQ0=0;OQ=1988.53;QD=33.14;SB=-981.94 GT:AD:DP:GL:GQ 1/1:1,59:56:-202.45,-16.87,-0.02:99
-chr1 1760648 rs6657357 C G 301.74 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.38;MQ0=0;OQ=2954.84;QD=38.37;SB=-1347.06 GT:AD:DP:GL:GQ 1/1:0,77:74:-299.12,-22.32,-0.05:99
-chr1 1760649 rs6665287 T A 112.70 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.39;MQ0=0;OQ=2934.49;QD=37.15;SB=-1492.41 GT:AD:DP:GL:GQ 1/1:0,79:78:-297.05,-23.49,-0.02:99
-chr1 1762348 rs6603800 T G 88.85 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=59.54;MQ0=0;OQ=1401.85;QD=28.04;SB=-481.90 GT:AD:DP:GL:GQ 1/1:0,50:43:-143.80,-12.96,-0.03:99
-chr1 1762595 rs10907189 T C 215.16 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.73;MQ0=1;OQ=2558.08;QD=35.53;SB=-1178.50 GT:AD:DP:GL:GQ 1/1:1,71:71:-259.41,-21.39,-0.02:99
-chr1 1763512 rs11260618 A G 251.61 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=34.24;MQ0=0;OQ=1296.92;QD=19.36;SB=-537.23 GT:AD:DP:GL:GQ 1/1:0,67:42:-133.32,-12.67,-0.05:99
-chr1 1763520 rs11260619 C G 204.70 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=32.31;MQ0=0;OQ=1789.21;QD=27.11;SB=-722.93 GT:AD:DP:GL:GQ 1/1:0,66:41:-182.52,-12.35,-0.01:99
-chr1 1763525 rs11260620 T C 490.04 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.33;MQ0=0;OQ=1197.40;QD=18.42;SB=-469.25 GT:AD:DP:GL:GQ 1/1:0,65:37:-123.35,-11.15,-0.02:99
-chr1 1763536 rs11260621 T C 53.91 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=32.77;MQ0=1;OQ=1342.11;QD=19.74;SB=-614.98 GT:AD:DP:GL:GQ 1/1:1,67:42:-137.83,-12.66,-0.03:99
-chr1 1763632 rs10907190 G A 500.76 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=2342.36;QD=38.40;SB=-955.26 GT:AD:DP:GL:GQ 1/1:0,61:60:-237.85,-18.08,-0.03:99
-chr1 1765035 rs11260622 A G 3.08 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=4.83;MQ=58.68;MQ0=1;OQ=1949.34;QD=28.25;SB=-876.43 GT:AD:DP:GL:GQ 1/1:0,68:61:-198.58,-18.40,-0.06:99
-chr1 1766129 rs4648727 C A 222.67 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.39;MQ0=0;OQ=2474.83;QD=35.87;SB=-1254.46 GT:AD:DP:GL:GQ 1/1:0,69:68:-251.09,-20.48,-0.02:99
-chr1 1768896 rs6692959 T C 606.28 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=2761.38;QD=31.74;SB=-1372.68 GT:AD:DP:GL:GQ 1/1:0,87:87:-279.80,-26.24,-0.08:99
-chr1 1769657 . A T 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=45;Dels=0.02;HRun=0;HaplotypeScore=8.89;MQ=56.00;MQ0=1;OQ=229.76;QD=5.11;SB=-125.76 GT:AD:DP:GL:GQ 0/1:24,18:27:-34.10,-7.84,-57.21:99
-chr1 1770738 rs6603801 T C 614.13 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1986.61;QD=34.85;SB=-910.02 GT:AD:DP:GL:GQ 1/1:0,57:57:-202.27,-17.17,-0.02:99
-chr1 1771205 rs6664578 G A 696.21 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=3186.74;QD=38.39;SB=-1518.58 GT:AD:DP:GL:GQ 1/1:0,83:81:-322.28,-24.40,-0.02:99
-chr1 1772480 rs12066667 C T 200.36 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.77;MQ0=0;OQ=1986.28;QD=37.48;SB=-1001.85 GT:AD:DP:GL:GQ 1/1:0,53:51:-202.23,-15.37,-0.02:99
-chr1 1773061 rs12402876 G A 282.08 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=57.70;MQ0=0;OQ=2522.68;QD=37.10;SB=-929.21 GT:AD:DP:GL:GQ 1/1:0,68:65:-255.88,-19.59,-0.03:99
-chr1 1773444 rs7526236 G A 531.06 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=1822.31;QD=37.96;SB=-748.50 GT:AD:DP:GL:GQ 1/1:0,48:47:-185.83,-14.16,-0.02:99
-chr1 1782409 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=18;HaplotypeScore=10.25;MQ=50.63;MQ0=2;OQ=451.92;QD=7.66;SB=-97.66 GT:AD:DP:GL:GQ 0/1:39,20:52:-64.14,-15.67,-118.24:99
-chr1 1782428 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=65;Dels=0.02;HRun=18;HaplotypeScore=18.34;MQ=52.25;MQ0=1;OQ=88.42;QD=1.36;SB=56.19 GT:AD:DP:GL:GQ 0/1:56,8:49:-26.89,-14.77,-145.13:99
-chr1 1782863 rs1889678 A G 536.70 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.83;MQ0=0;OQ=1352.43;QD=28.18;SB=-598.57 GT:AD:DP:GL:GQ 1/1:0,48:43:-138.86,-12.97,-0.04:99
-chr1 1782931 rs12076620 A G 575.25 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1635.06;QD=34.79;SB=-754.18 GT:AD:DP:GL:GQ 1/1:0,47:46:-167.10,-13.85,-0.01:99
-chr1 1782971 rs10907192 A G 594.85 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1599.36;QD=34.03;SB=-532.43 GT:AD:DP:GL:GQ 1/1:0,47:46:-163.54,-13.86,-0.02:99
-chr1 1783646 rs7511905 A C 266.52 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1582.35;QD=31.65;SB=-751.07 GT:AD:DP:GL:GQ 1/1:0,50:47:-161.84,-14.16,-0.02:99
-chr1 1785347 rs6660452 A C 506.81 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.51;MQ0=0;OQ=1748.60;QD=30.15;SB=-666.84 GT:AD:DP:GL:GQ 1/1:0,58:55:-178.49,-16.58,-0.04:99
-chr1 1785613 . C A 22.53 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=20;HaplotypeScore=2.54;MQ=46.56;MQ0=0;QD=0.48;SB=89.31 GT:AD:DP:GL:GQ 0/1:40,7:41:-17.88,-12.35,-133.39:55.34
-chr1 1785636 rs6697311 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.01;HRun=20;HaplotypeScore=31.36;MQ=43.36;MQ0=1;OQ=989.12;QD=9.79;SB=-44.45 GT:AD:DP:GL:GQ 0/1:50,49:75:-124.51,-22.31,-136.94:99
-chr1 1785639 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=98;Dels=0.01;HRun=4;HaplotypeScore=41.45;MQ=42.87;MQ0=1;OQ=381.85;QD=3.90;SB=86.26 GT:AD:DP:GL:GQ 0/1:59,38:65:-60.76,-19.29,-163.75:99
-chr1 1785649 rs12036384 C T 5.26 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=10.21;MQ=50.24;MQ0=1;OQ=2105.43;QD=30.96;SB=-932.26 GT:AD:DP:GL:GQ 1/1:2,63:54:-214.14,-16.27,-0.02:99
-chr1 1786577 rs12134553 A C 2.61 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=7.76;MQ=57.97;MQ0=1;OQ=1915.32;QD=26.98;SB=-959.05 GT:AD:DP:GL:GQ 1/1:3,68:63:-201.59,-18.99,-6.48:99
-chr1 1787250 rs6670246 T A 192 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.78;MQ0=0;OQ=2864.46;QD=33.70;SB=-1257.90 GT:AD:DP:GL:GQ 1/1:2,83:84:-296.95,-25.31,-6.91:99
-chr1 1789560 rs4648591 T C 58.31 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=47.68;MQ0=0;OQ=1563.80;QD=30.66;SB=-605.93 GT:AD:DP:GL:GQ 1/1:0,51:49:-160.01,-14.78,-0.04:99
-chr1 1789813 rs7516995 T C 114.34 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.57;MQ0=0;OQ=1801.38;QD=30.53;SB=-555.03 GT:AD:DP:GL:GQ 1/1:0,59:55:-183.76,-16.58,-0.04:99
-chr1 1790511 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=20;HaplotypeScore=40.13;MQ=50.15;MQ0=2;OQ=70.47;QD=0.70;SB=149.46 GT:AD:DP:GL:GQ 0/1:69,28:73:-32.03,-21.69,-222.30:99
-chr1 1790894 rs4648592 G A 598.36 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.49;MQ0=0;OQ=2599.64;QD=38.23;SB=-928.70 GT:AD:DP:GL:GQ 1/1:0,68:65:-263.57,-19.58,-0.02:99
-chr1 1792032 rs6666068 A G 457.40 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2160.60;QD=28.43;SB=-673.85 GT:AD:DP:GL:GQ 1/1:0,76:67:-219.70,-20.20,-0.05:99
-chr1 1794162 rs3855951 C T 52.04 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=2.26;MQ=59.71;MQ0=0;OQ=3179.43;QD=39.74;SB=-1555.57 GT:AD:DP:GL:GQ 1/1:0,80:79:-321.55,-23.80,-0.02:99
-chr1 1795251 rs10907193 G A 266.85 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=60.00;MQ0=0;OQ=1860.92;QD=32.65;SB=-731.44 GT:AD:DP:GL:GQ 1/1:0,56:50:-189.71,-15.08,-0.03:99
-chr1 1796166 rs10399762 A G 54.56 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=58.73;MQ0=0;OQ=1409.98;QD=25.64;SB=-484.50 GT:AD:DP:GL:GQ 1/1:0,55:46:-144.64,-13.88,-0.05:99
-chr1 1798609 . A T 162.96 SnpCluster AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=74.10;MQ=46.50;MQ0=2;QD=4.29;SB=-81.05 GT:AD:DP:GL:GQ 0/1:27,11:32:-29.22,-9.64,-87.24:99
-chr1 1798611 . A T 632.57 SnpCluster AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=43.92;MQ=46.08;MQ0=2;QD=17.10;SB=-306.76 GT:AD:DP:GL:GQ 0/1:10,25:30:-75.58,-9.04,-33.08:99
-chr1 1798613 rs57488553 A T 825.28 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=35.29;MQ=45.64;MQ0=2;QD=22.92;SB=-393.55 GT:AD:DP:GL:GQ 0/1:7,29:31:-95.15,-9.34,-18.41:90.67
-chr1 1798615 rs58263709 A T 846.29 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=33.82;MQ=45.64;MQ0=2;QD=23.51;SB=-402.56 GT:AD:DP:GL:GQ 0/1:6,30:30:-96.95,-9.04,-14.67:56.29
-chr1 1799369 rs11260624 C T 198.24 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.40;MQ0=0;OQ=2735.01;QD=39.07;SB=-1363.94 GT:AD:DP:GL:GQ 1/1:0,69:70:-279.86,-23.72,-2.77:99
-chr1 1799950 rs7525092 C T 160.98 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=59.72;MQ0=0;OQ=3051.79;QD=36.77;SB=-1420.35 GT:AD:DP:GL:GQ 1/1:0,83:79:-308.79,-23.80,-0.03:99
-chr1 1800981 rs12133865 G A 87.68 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=56.12;MQ0=0;OQ=1844.69;QD=38.43;SB=-730.97 GT:AD:DP:GL:GQ 1/1:0,48:48:-188.07,-14.47,-0.02:99
-chr1 1802311 . A G 78.46 Indel AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=3;HaplotypeScore=2.28;MQ=57.45;MQ0=0;QD=1.09;SB=-6.51 GT:AD:DP:GL:GQ 0/1:62,10:70:-32.22,-21.09,-246.49:99
-chr1 1802688 rs6670776 G A 560.73 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=2301.44;QD=40.38;SB=-996.99 GT:AD:DP:GL:GQ 1/1:0,57:57:-233.74,-17.17,-0.01:99
-chr1 1805482 rs12138152 G A 76.26 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.49;MQ0=0;OQ=2306.96;QD=39.10;SB=-1138.66 GT:AD:DP:GL:GQ 1/1:0,59:59:-234.30,-17.78,-0.02:99
-chr1 1807030 rs10796396 G A 291.66 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.36;MQ0=0;OQ=1090.79;QD=38.96;SB=-403.67 GT:AD:DP:GL:GQ 1/1:0,28:28:-112.67,-8.43,-0.01:84.28
-chr1 1809238 rs6603804 T C 659.20 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2030.11;QD=33.84;SB=-689.61 GT:AD:DP:GL:GQ 1/1:0,60:59:-206.62,-17.78,-0.03:99
-chr1 1809966 rs28608797 A C 520.78 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.00;MQ0=0;OQ=1235.99;QD=32.53;SB=-595.06 GT:AD:DP:GL:GQ 1/1:1,37:36:-127.20,-10.84,-0.01:99
-chr1 1813782 rs6688000 A G 233.16 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=58.61;MQ0=0;OQ=1439.33;QD=30.62;SB=-681.87 GT:AD:DP:GL:GQ 1/1:0,46:46:-147.56,-13.87,-0.04:99
-chr1 1818624 rs12045595 G A 59.58 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.53;MQ0=0;OQ=1836.38;QD=37.48;SB=-594.97 GT:AD:DP:GL:GQ 1/1:0,49:48:-187.24,-14.46,-0.02:99
-chr1 1821118 rs6603808 A G 79.87 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=60.00;MQ0=0;OQ=1052.30;QD=28.44;SB=-413.55 GT:AD:DP:GL:GQ 1/1:0,37:31:-108.83,-9.34,-0.01:93.27
-chr1 1822217 rs941531 G A 113.99 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=58.68;MQ0=0;OQ=2643.63;QD=39.46;SB=-1073.33 GT:AD:DP:GL:GQ 1/1:0,67:66:-267.97,-19.88,-0.02:99
-chr1 1822410 . A G 49.96 LowQual AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;QD=0.89;SB=-35.78 GT:AD:DP:GL:GQ 0/1:49,7:55:-24.85,-16.57,-195.12:82.80
-chr1 1822442 rs4996032 G A 113.94 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.02;HRun=2;HaplotypeScore=1.09;MQ=59.55;MQ0=0;OQ=884.12;QD=14.03;SB=-419.83 GT:AD:DP:GL:GQ 0/1:35,27:62:-110.37,-18.67,-127.42:99
-chr1 1822448 rs4996031 A G 133.35 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.02;MQ=59.08;MQ0=1;OQ=897.87;QD=14.03;SB=-423.51 GT:AD:DP:GL:GQ 0/1:31,33:61:-111.45,-18.38,-115.75:99
-chr1 1823355 rs10454464 G A 100.58 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=57.95;MQ0=0;OQ=1113.42;QD=34.79;SB=-534.62 GT:AD:DP:GL:GQ 1/1:0,31:31:-117.34,-11.71,-2.42:92.95
-chr1 1824608 rs4648731 A G 30.88 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=54.33;MQ0=0;OQ=891.08;QD=28.74;SB=-233.75 GT:AD:DP:GL:GQ 1/1:0,31:26:-92.71,-7.84,-0.01:78.21
-chr1 1824902 rs11260625 G A 47.11 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=46.58;MQ0=0;OQ=814.82;QD=27.16;SB=-295.36 GT:AD:DP:GL:GQ 1/1:0,25:22:-85.08,-6.64,-0.02:66.19
-chr1 1824916 rs11260626 C T 92.97 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=48.72;MQ0=0;OQ=1289.62;QD=36.85;SB=-588.96 GT:AD:DP:GL:GQ 1/1:0,35:34:-132.56,-10.25,-0.01:99
-chr1 1825136 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=16;HaplotypeScore=8.80;MQ=56.14;MQ0=0;OQ=163.77;QD=3.72;SB=41.15 GT:AD:DP:GL:GQ 0/1:27,17:32:-29.31,-9.65,-83.86:99
-chr1 1826546 rs2748989 C G 308.42 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.60;MQ0=0;OQ=2438.44;QD=41.33;SB=-736.72 GT:AD:DP:GL:GQ 1/1:0,59:58:-247.45,-17.48,-0.02:99
-chr1 1827738 rs4648732 C T 470.86 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=1741.59;QD=38.70;SB=-666.40 GT:AD:DP:GL:GQ 1/1:0,45:44:-177.75,-13.25,-0.01:99
-chr1 1828376 rs2377037 C A 189.26 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=1605.71;QD=33.45;SB=-826.68 GT:AD:DP:GL:GQ 1/1:1,47:46:-164.17,-13.86,-0.02:99
-chr1 1828498 rs28672079 A G 314.26 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=1270.30;QD=29.54;SB=-594.88 GT:AD:DP:GL:GQ 1/1:0,43:41:-130.66,-12.37,-0.05:99
-chr1 1829551 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=17.55;MQ=56.35;MQ0=0;OQ=57.59;QD=1.48;SB=26.11 GT:AD:DP:GL:GQ 0/1:19,19:17:-14.19,-5.14,-50.87:90.43
-chr1 1829898 rs2474461 T C 40.50 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=579.60;QD=34.09;SB=-105.03 GT:AD:DP:GL:GQ 1/1:0,17:17:-61.55,-5.12,-0.01:51.14
-chr1 1830536 rs28384316 G T 112.96 PASS AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=125.10;QD=25.02;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:5:-16.07,-1.51,-0.01:15.03
-chr1 1832651 . A G 0.32 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=742.60;QD=18.11;SB=-247.32 GT:AD:DP:GL:GQ 0/1:17,24:40:-89.59,-12.05,-62.50:99
-chr1 1834219 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=20;HaplotypeScore=9.36;MQ=53.72;MQ0=0;OQ=93.63;QD=2.46;SB=11.06 GT:AD:DP:GL:GQ 0/1:25,13:25:-20.18,-7.53,-63.71:99
-chr1 1834282 . T C 14.27 PASS AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=417.56;QD=26.10;SB=-221.65 GT:AD:DP:GL:GQ 1/1:0,16:14:-45.35,-4.22,-0.01:42.10
-chr1 1834553 rs28842562 C T 275.34 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.51;MQ0=1;OQ=892.93;QD=34.34;SB=-192.75 GT:AD:DP:GL:GQ 1/1:0,26:23:-92.88,-6.93,-0.01:69.22
-chr1 1836321 rs41306992 C T 57.34 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.24;MQ0=0;OQ=2100.54;QD=38.19;SB=-756.01 GT:AD:DP:GL:GQ 1/1:0,55:53:-213.65,-15.97,-0.01:99
-chr1 1836442 rs2748987 A G 431.11 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=1604.85;QD=34.15;SB=-631.28 GT:AD:DP:GL:GQ 1/1:0,47:47:-164.09,-14.16,-0.02:99
-chr1 1838594 rs941532 A G 20.25 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=58.71;MQ0=0;OQ=477.15;QD=26.51;SB=-129.69 GT:AD:DP:GL:GQ 1/1:0,18:17:-51.32,-5.13,-0.02:51.08
-chr1 1839996 rs2295364 C T 1.07 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.59;MQ0=0;OQ=1245.14;QD=37.73;SB=-117.65 GT:AD:DP:GL:GQ 1/1:0,33:32:-128.11,-9.64,-0.01:96.31
-chr1 1841796 rs2474458 C A 22.03 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=3.16;MQ=58.78;MQ0=0;OQ=1243.51;QD=32.72;SB=-630.04 GT:AD:DP:GL:GQ 1/1:0,38:36:-127.95,-10.85,-0.01:99
-chr1 1842344 rs28508199 A G 34.17 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=58.67;MQ0=0;OQ=1404.62;QD=28.67;SB=-672.87 GT:AD:DP:GL:GQ 1/1:0,49:45:-144.09,-13.57,-0.04:99
-chr1 1843148 rs1884454 G T 340.59 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=56.74;MQ0=0;OQ=831.99;QD=14.34;SB=-322.02 GT:AD:DP:GL:GQ 0/1:28,30:55:-103.05,-16.57,-95.32:99
-chr1 1844181 rs2250833 A G 20.17 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=995.90;QD=27.66;SB=-313.46 GT:AD:DP:GL:GQ 1/1:0,36:31:-103.20,-9.35,-0.02:93.22
-chr1 1845310 rs28423370 A G 170.66 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=608.06;QD=32.00;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,19:19:-64.40,-5.72,-0.01:57.14
-chr1 1845407 . C A 46.94 LowQual AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=55.21;MQ0=0;QD=9.39;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,3:5:-9.49,-1.51,-6.80:52.97
-chr1 1845958 rs752965 C T 17.19 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.17;MQ0=0;OQ=985.76;QD=35.21;SB=-88.34 GT:AD:DP:GL:GQ 1/1:0,28:26:-102.17,-7.83,-0.01:78.25
-chr1 1846560 rs2092922 C T 67.91 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.95;MQ0=0;OQ=1561.86;QD=36.32;SB=-529.71 GT:AD:DP:GL:GQ 1/1:0,43:41:-159.79,-12.36,-0.02:99
-chr1 1848991 rs4648734 C T 0.80 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=7.13;MQ=58.00;MQ0=0;OQ=1973.99;QD=36.56;SB=-772.04 GT:AD:DP:GL:GQ 1/1:0,53:53:-203.45,-18.19,-2.47:99
-chr1 1849418 rs28670388 T C 0.23 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=3;HaplotypeScore=7.22;MQ=55.28;MQ0=2;OQ=1025.15;QD=29.29;SB=-496.47 GT:AD:DP:GL:GQ 1/1:3,32:30:-106.11,-9.04,-0.01:90.24
-chr1 1850605 rs28685049 C T 18.19 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=778.38;QD=38.92;SB=-47.56 GT:AD:DP:GL:GQ 1/1:0,20:20:-81.43,-6.03,-0.01:60.20
-chr1 1850678 . T A 0.69 PASS AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=41.96;MQ0=0;OQ=61.03;QD=6.78;SB=5.04 GT:AD:DP:GL:GQ 0/1:6,3:9:-12.10,-2.71,-21.43:93.87
-chr1 1850683 . G A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=10.93;MQ=35.14;MQ0=0;OQ=63.11;QD=9.02;SB=-3.99 GT:AD:DP:GL:GQ 0/1:4,3:6:-11.40,-1.81,-10.53:87.27
-chr1 1851012 rs55825112 G A 257.30 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.15;MQ0=0;OQ=1284.14;QD=38.91;SB=-355.97 GT:AD:DP:GL:GQ 1/1:0,33:33:-132.01,-9.94,-0.01:99
-chr1 1852535 rs2474449 C T 115.82 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=42.11;MQ0=1;OQ=2050.54;QD=37.28;SB=-856.64 GT:AD:DP:GL:GQ 1/1:1,54:53:-211.75,-15.96,-3.11:99
-chr1 1852731 . T A 22.37 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=63;Dels=0.05;HRun=20;HaplotypeScore=13.90;MQ=48.22;MQ0=0;QD=0.36;SB=16.21 GT:AD:DP:GL:GQ 0/1:42,18:40:-16.96,-11.45,-121.97:55.18
-chr1 1852818 rs4648595 A G 3.40 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.78;MQ=50.34;MQ0=1;OQ=917.27;QD=25.48;SB=-127.78 GT:AD:DP:GL:GQ 1/1:1,35:28:-95.33,-8.44,-0.02:84.22
-chr1 1853042 . C A 10.89 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=20;HaplotypeScore=9.56;MQ=49.02;MQ0=4;QD=0.19;SB=86.27 GT:AD:DP:GL:GQ 0/1:51,7:42:-16.99,-12.66,-132.54:43.35
-chr1 1853068 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=2;HaplotypeScore=13.43;MQ=48.98;MQ0=4;OQ=94.12;QD=1.00;SB=104.36 GT:AD:DP:GL:GQ 0/1:70,24:65:-32.29,-19.60,-195.03:99
-chr1 1853265 rs60147457 T C 26.01 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=56.17;MQ0=0;OQ=1299.21;QD=28.24;SB=-640.40 GT:AD:DP:GL:GQ 1/1:1,45:44:-136.91,-13.28,-3.40:98.74
-chr1 1855559 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=1;HaplotypeScore=1.77;MQ=58.15;MQ0=0;OQ=143.93;QD=1.87;SB=17.18 GT:AD:DP:GL:GQ 0/1:67,10:76:-40.57,-22.90,-237.26:99
-chr1 1855612 rs2748968 C T 224.03 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=53.49;MQ0=2;OQ=1207.94;QD=15.10;SB=-597.02 GT:AD:DP:GL:GQ 0/1:40,40:73:-146.08,-22.00,-120.30:99
-chr1 1855646 . T C 0.93 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=9.48;MQ=53.45;MQ0=2;OQ=1049.44;QD=14.78;SB=-537.98 GT:AD:DP:GL:GQ 0/1:31,40:66:-128.11,-19.89,-114.90:99
-chr1 1855674 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=15.63;MQ=50.86;MQ0=1;OQ=126.19;QD=2.25;SB=-24.71 GT:AD:DP:GL:GQ 0/1:49,7:53:-31.88,-15.98,-189.82:99
-chr1 1855675 . A G 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=14.63;MQ=50.86;MQ0=1;OQ=886.43;QD=15.83;SB=-281.60 GT:AD:DP:GL:GQ 0/1:21,35:52:-107.60,-15.67,-76.26:99
-chr1 1856033 rs34454803 C G 2.87 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=4.56;MQ=48.03;MQ0=9;OQ=1928.44;QD=26.78;SB=-825.04 GT:AD:DP:GL:GQ 1/1:9,62:49:-203.74,-17.80,-7.31:99
-chr1 1856195 rs61775027 C T 136.98 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=55.46;MQ0=1;OQ=2158.57;QD=29.98;SB=-1089.45 GT:AD:DP:GL:GQ 1/1:8,64:59:-222.77,-17.79,-3.33:99
-chr1 1856465 rs34793596 C G 37.34 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.87;MQ=54.29;MQ0=1;OQ=3153.75;QD=39.92;SB=-1439.03 GT:AD:DP:GL:GQ 1/1:3,76:75:-323.13,-22.60,-4.17:99
-chr1 1856473 rs35531706 C G 44.13 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=2.23;MQ=55.29;MQ0=1;OQ=2974.48;QD=40.20;SB=-1193.83 GT:AD:DP:GL:GQ 1/1:1,73:71:-301.06,-21.40,-0.03:99
-chr1 1858345 rs28658236 G A 98.82 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=1111.27;QD=16.34;SB=-403.37 GT:AD:DP:GL:GQ 0/1:35,33:68:-134.91,-20.49,-114.02:99
-chr1 1859106 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=2;HaplotypeScore=6.59;MQ=57.30;MQ0=0;OQ=100.83;QD=1.80;SB=56.18 GT:AD:DP:GL:GQ 0/1:31,25:39:-25.12,-11.75,-106.73:99
-chr1 1859766 rs28592294 C T 2.76 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=5.60;MQ=57.03;MQ0=0;OQ=2783.58;QD=37.62;SB=-907.72 GT:AD:DP:GL:GQ 1/1:1,72:73:-285.26,-22.00,-3.32:99
-chr1 1860070 rs2803323 G A 91.89 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=58.89;MQ0=0;OQ=1564.69;QD=37.25;SB=-659.28 GT:AD:DP:GL:GQ 1/1:0,42:41:-160.07,-12.36,-0.02:99
-chr1 1861277 rs2803324 T C 62.39 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=848.26;QD=30.30;SB=-320.13 GT:AD:DP:GL:GQ 1/1:0,28:28:-88.44,-8.45,-0.03:84.18
-chr1 1863485 rs12758705 G A 595.32 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2263.21;QD=38.36;SB=-926.70 GT:AD:DP:GL:GQ 1/1:0,59:57:-229.92,-17.17,-0.01:99
-chr1 1864441 rs2803329 A G 280.82 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1008.85;QD=27.27;SB=-491.17 GT:AD:DP:GL:GQ 1/1:0,37:33:-104.50,-9.95,-0.03:99
-chr1 1864697 rs2803330 A G 60.11 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=756.37;QD=30.25;SB=-313.68 GT:AD:DP:GL:GQ 1/1:0,25:22:-79.23,-6.63,-0.01:66.20
-chr1 1865005 rs2803331 C T 233.79 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=58.84;MQ0=0;OQ=1354.55;QD=33.86;SB=-668.39 GT:AD:DP:GL:GQ 1/1:0,37:37:-139.06,-11.16,-0.02:99
-chr1 1865127 rs2262190 A G 525.82 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=948.06;QD=30.58;SB=-404.33 GT:AD:DP:GL:GQ 1/1:0,31:30:-98.41,-9.05,-0.02:90.22
-chr1 1867098 rs2748978 T G 544.45 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.39;MQ0=0;OQ=1416.47;QD=34.55;SB=-657.23 GT:AD:DP:GL:GQ 1/1:0,41:41:-145.24,-12.35,-0.01:99
-chr1 1867212 rs2803339 T C 83.30 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=54.90;MQ0=0;OQ=1104.15;QD=27.60;SB=-492.17 GT:AD:DP:GL:GQ 1/1:1,39:37:-114.04,-11.17,-0.04:99
-chr1 1868944 rs2490543 C T 282.58 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=58.05;MQ0=0;OQ=849.11;QD=14.15;SB=-315.86 GT:AD:DP:GL:GQ 0/1:33,27:55:-104.77,-16.57,-95.97:99
-chr1 1868947 rs28573337 G A 161.30 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=57.95;MQ0=0;OQ=983.65;QD=17.26;SB=-292.79 GT:AD:DP:GL:GQ 0/1:26,31:55:-118.23,-16.58,-80.47:99
-chr1 1869420 rs28498068 T G 172.46 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=56.75;MQ0=0;OQ=395.95;QD=11.31;SB=-182.88 GT:AD:DP:GL:GQ 0/1:18,17:34:-53.12,-10.25,-61.66:99
-chr1 1869908 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=14;HaplotypeScore=14.65;MQ=46.99;MQ0=0;OQ=127.58;QD=2.90;SB=11.06 GT:AD:DP:GL:GQ 0/1:29,15:29:-24.78,-8.74,-71.11:99
-chr1 1870211 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=105;Dels=0.02;HRun=2;HaplotypeScore=156.21;MQ=37.45;MQ0=0;OQ=89.02;QD=0.85;SB=-10.74 GT:AD:DP:GL:GQ 0/1:91,12:93:-39.61,-27.42,-314.70:99
-chr1 1870216 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.13;HRun=3;HaplotypeScore=129.57;MQ=35.88;MQ0=0;OQ=216.82;QD=2.28;SB=-71.49 GT:AD:DP:GL:GQ 0/1:69,14:77:-47.26,-22.30,-241.64:99
-chr1 1870237 . C T 350.17 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=136.82;MQ=33.84;MQ0=0;QD=4.38;SB=-96.57 GT:AD:DP:GL:GQ 0/1:64,16:68:-58.79,-20.48,-197.51:99
-chr1 1870241 . T C 795.72 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=2;HaplotypeScore=105.65;MQ=33.28;MQ0=0;QD=10.33;SB=-171.98 GT:AD:DP:GL:GQ 0/1:49,28:68:-103.35,-20.49,-158.12:99
-chr1 1870246 . T C 783.37 SnpCluster AC=1;AF=0.50;AN=2;DP=75;Dels=0.01;HRun=3;HaplotypeScore=106.17;MQ=32.28;MQ0=0;QD=10.44;SB=-190.65 GT:AD:DP:GL:GQ 0/1:44,29:65:-101.22,-19.60,-139.10:99
-chr1 1870249 rs28490251 C T 536.49 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=65.25;MQ=33.25;MQ0=0;QD=8.01;SB=-19.48 GT:AD:DP:GL:GQ 0/1:45,22:60:-75.01,-18.07,-158.51:99
-chr1 1870263 . T C 67.37 SnpCluster AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=2;HaplotypeScore=102.33;MQ=35.77;MQ0=0;QD=1.07;SB=-0.98 GT:AD:DP:GL:GQ 0/1:55,8:53:-25.99,-15.97,-184.95:99
-chr1 1870272 . C T 96.33 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=2;HaplotypeScore=53.42;MQ=40.73;MQ0=0;QD=1.55;SB=5.03 GT:AD:DP:GL:GQ 0/1:52,10:55:-29.48,-16.57,-180.28:99
-chr1 1870273 . T C 72.37 SnpCluster AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=2;HaplotypeScore=53.42;MQ=40.73;MQ0=0;QD=1.17;SB=-0.98 GT:AD:DP:GL:GQ 0/1:55,7:53:-26.49,-15.97,-188.35:99
-chr1 1870281 . C T 187.69 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=96.79;MQ=44.56;MQ0=0;QD=3.24;SB=5.04 GT:AD:DP:GL:GQ 0/1:46,12:51:-37.41,-15.36,-160.10:99
-chr1 1870294 . T C 11.65 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=47.97;MQ0=0;QD=0.19;SB=8.05 GT:AD:DP:GL:GQ 0/1:55,6:59:-22.20,-17.78,-213.89:44.18
-chr1 1870405 . C A 16.24 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=38.44;MQ0=0;OQ=457.23;QD=8.97;SB=-4.29 GT:AD:DP:GL:GQ 0/1:33,18:50:-64.07,-15.06,-117.59:99
-chr1 1870410 . T C 0.86 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=38.95;MQ0=0;OQ=422.51;QD=8.80;SB=-31.25 GT:AD:DP:GL:GQ 0/1:31,17:47:-59.69,-14.16,-126.57:99
-chr1 1870428 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=20.35;MQ=41.74;MQ0=0;OQ=75.20;QD=2.15;SB=23.10 GT:AD:DP:GL:GQ 0/1:27,8:31:-20.14,-9.34,-96.20:99
-chr1 1870432 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=16.08;MQ=42.82;MQ0=0;OQ=52.58;QD=1.81;SB=29.11 GT:AD:DP:GL:GQ 0/1:24,5:28:-16.98,-8.43,-86.35:85.42
-chr1 1870446 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=25;Dels=0.04;HRun=2;HaplotypeScore=17.65;MQ=47.45;MQ0=0;OQ=105.58;QD=4.22;SB=-62.85 GT:AD:DP:GL:GQ 0/1:18,6:24:-20.77,-6.93,-68.32:99
-chr1 1871370 rs2490541 C A 191.01 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.38;MQ0=1;OQ=2594.06;QD=33.69;SB=-1155.38 GT:AD:DP:GL:GQ 1/1:0,76:73:-263.01,-21.99,-0.02:99
-chr1 1872147 rs2490540 A G 201.87 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.87;MQ0=0;OQ=2121.33;QD=34.22;SB=-1028.42 GT:AD:DP:GL:GQ 1/1:0,62:60:-215.74,-18.07,-0.02:99
-chr1 1872797 rs28754760 C T 596.04 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.63;MQ0=0;OQ=2762.82;QD=40.63;SB=-1367.30 GT:AD:DP:GL:GQ 1/1:0,68:68:-279.88,-20.48,-0.01:99
-chr1 1872809 rs2490564 A G 614.38 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=2664.00;QD=34.60;SB=-1257.66 GT:AD:DP:GL:GQ 1/1:0,77:76:-270.02,-22.89,-0.03:99
-chr1 1872820 rs2490563 C A 537.89 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.73;MQ0=0;OQ=2673.37;QD=36.62;SB=-1103.59 GT:AD:DP:GL:GQ 1/1:0,73:73:-270.94,-21.99,-0.02:99
-chr1 1872941 rs28505085 C T 182.42 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.70;MQ0=0;OQ=3049.13;QD=40.12;SB=-1406.71 GT:AD:DP:GL:GQ 1/1:0,76:76:-308.51,-22.89,-0.02:99
-chr1 1873219 rs2490562 A G 659.58 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=2029.90;QD=31.23;SB=-828.58 GT:AD:DP:GL:GQ 1/1:0,65:64:-206.63,-19.30,-0.05:99
-chr1 1874915 rs2474455 C T 626.28 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2935.86;QD=37.64;SB=-1349.01 GT:AD:DP:GL:GQ 1/1:0,78:74:-297.19,-22.29,-0.02:99
-chr1 1876080 rs4648738 C T 622.15 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.86;MQ0=0;OQ=2172.76;QD=36.21;SB=-969.30 GT:AD:DP:GL:GQ 1/1:0,60:56:-220.88,-16.87,-0.02:99
-chr1 1876082 rs2803287 T G 577.20 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.86;MQ0=0;OQ=1927.37;QD=32.12;SB=-839.09 GT:AD:DP:GL:GQ 1/1:0,60:56:-196.35,-16.87,-0.02:99
-chr1 1876206 . G A 152.24 Indel AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=32.79;MQ=48.52;MQ0=0;QD=4.91;SB=-65.27 GT:AD:DP:GL:GQ 0/1:20,7:27:-34.54,-16.03,-70.20:99
-chr1 1876245 rs2803286 T C 61.43 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=51.77;MQ0=0;OQ=999.35;QD=27.76;SB=-355.43 GT:AD:DP:GL:GQ 1/1:0,36:34:-103.57,-10.26,-0.05:99
-chr1 1876361 rs2748976 C A 113.55 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=45.22;MQ0=0;OQ=179.32;QD=6.90;SB=-106.45 GT:AD:DP:GL:GQ 0/1:18,8:25:-28.75,-7.53,-52.51:99
-chr1 1876371 . C A 48.69 LowQual AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=43.76;MQ0=0;QD=2.03;SB=-50.67 GT:AD:DP:GL:GQ 0/1:20,4:23:-15.08,-6.93,-60.82:81.52
-chr1 1876379 rs2748975 C A 111.71 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=47.73;MQ0=0;OQ=820.31;QD=34.18;SB=-360.86 GT:AD:DP:GL:GQ 1/1:0,24:23:-85.62,-6.93,-0.01:69.21
-chr1 1876719 rs3795290 C T 341.91 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.08;MQ0=0;OQ=1064.55;QD=38.02;SB=-422.06 GT:AD:DP:GL:GQ 1/1:0,28:28:-110.05,-8.44,-0.01:84.27
-chr1 1876879 rs28548017 A G 12.14 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=3.36;MQ=59.09;MQ0=0;OQ=1547.11;QD=33.63;SB=-748.91 GT:AD:DP:GL:GQ 1/1:0,45:45:-158.32,-13.56,-0.02:99
-chr1 1877105 rs28575980 G A 126.28 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=58.88;MQ0=0;OQ=2123.64;QD=39.33;SB=-940.36 GT:AD:DP:GL:GQ 1/1:0,54:54:-215.96,-16.27,-0.02:99
-chr1 1878053 rs3820011 C A 596.21 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1358.01;QD=33.95;SB=-534.23 GT:AD:DP:GL:GQ 1/1:0,40:39:-139.40,-11.75,-0.01:99
-chr1 1878190 rs28535696 C T 4.02 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=5.27;MQ=59.60;MQ0=0;OQ=1961.78;QD=33.82;SB=-651.37 GT:AD:DP:GL:GQ 1/1:0,56:52:-199.79,-15.68,-0.03:99
-chr1 1878229 rs2803285 A G 106.12 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=1952.57;QD=31.49;SB=-789.62 GT:AD:DP:GL:GQ 1/1:0,62:61:-198.90,-18.40,-0.05:99
-chr1 1878313 rs28549710 G A 560.24 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1883.77;QD=38.44;SB=-852.64 GT:AD:DP:GL:GQ 1/1:0,49:48:-191.98,-14.46,-0.02:99
-chr1 1878885 rs2748974 A G 5.77 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.37;MQ=58.15;MQ0=0;OQ=1276.90;QD=26.60;SB=-511.07 GT:AD:DP:GL:GQ 1/1:1,47:40:-131.31,-12.06,-0.03:99
-chr1 1878935 rs941533 C T 78.39 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.81;MQ0=0;OQ=1331.51;QD=34.14;SB=-642.34 GT:AD:DP:GL:GQ 1/1:0,39:35:-136.75,-10.55,-0.02:99
-chr1 1879652 rs2748973 A T 145.27 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1566.33;QD=34.81;SB=-658.70 GT:AD:DP:GL:GQ 1/1:0,44:44:-160.23,-13.26,-0.02:99
-chr1 1881908 rs2803292 G C 343.50 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1280.73;QD=16.85;SB=-445.74 GT:AD:DP:GL:GQ 0/1:41,35:73:-153.35,-22.00,-166.87:99
-chr1 1882185 rs2803291 T C 583.24 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1616.58;QD=28.87;SB=-749.95 GT:AD:DP:GL:GQ 1/1:0,56:52:-165.29,-15.68,-0.05:99
-chr1 1883521 rs9777849 T C 52.56 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=58.55;MQ0=0;OQ=2600.99;QD=33.78;SB=-793.15 GT:AD:DP:GL:GQ 1/1:0,77:75:-263.71,-22.59,-0.03:99
-chr1 1883775 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=18;HaplotypeScore=34.55;MQ=54.67;MQ0=0;OQ=115.46;QD=1.72;SB=60.06 GT:AD:DP:GL:GQ 0/1:50,15:53:-37.44,-22.61,-153.19:99
-chr1 1884144 rs4648739 T C 265.60 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=56.66;MQ0=0;OQ=1089.11;QD=12.10;SB=-234.30 GT:AD:DP:GL:GQ 0/1:41,48:84:-137.52,-25.33,-160.93:99
-chr1 1884622 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=7.50;MQ=53.07;MQ0=0;OQ=108.82;QD=2.02;SB=71.24 GT:AD:DP:GL:GQ 0/1:31,23:39:-25.91,-11.75,-106.64:99
-chr1 1884705 rs9697615 G A 136.68 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=58.71;MQ0=0;OQ=608.41;QD=12.94;SB=-170.23 GT:AD:DP:GL:GQ 0/1:24,22:44:-77.39,-13.26,-79.80:99
-chr1 1884754 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=43.50;MQ=52.44;MQ0=1;OQ=107.17;QD=1.76;SB=65.22 GT:AD:DP:GL:GQ 0/1:47,13:52:-29.66,-15.66,-164.16:99
-chr1 1884755 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=20;HaplotypeScore=45.92;MQ=52.41;MQ0=1;OQ=326.78;QD=5.11;SB=65.23 GT:AD:DP:GL:GQ 0/1:48,16:59:-53.73,-17.77,-157.95:99
-chr1 1884837 rs35817970 T C 556.60 Indel AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=55.91;MQ0=0;QD=10.91;SB=-219.26 GT:AD:DP:GL:GQ 0/1:29,21:48:-73.41,-14.46,-106.68:99
-chr1 1885037 rs7523728 C T 495.93 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.35;MQ0=0;OQ=754.75;QD=13.98;SB=-403.19 GT:AD:DP:GL:GQ 0/1:30,24:50:-93.83,-15.07,-88.75:99
-chr1 1885400 rs28561741 A G 4.33 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=59.52;MQ0=0;OQ=350.23;QD=7.30;SB=-137.55 GT:AD:DP:GL:GQ 0/1:31,17:46:-52.17,-13.87,-117.69:99
-chr1 1885962 rs13302978 G A 113.63 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.25;MQ=53.12;MQ0=0;OQ=689.28;QD=12.53;SB=-222.75 GT:AD:DP:GL:GQ 0/1:26,26:49:-87.00,-14.79,-79.84:99
-chr1 1886045 rs13303324 T C 252.63 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.41;MQ0=0;OQ=434.96;QD=11.15;SB=-181.59 GT:AD:DP:GL:GQ 0/1:18,21:37:-57.94,-11.16,-71.83:99
-chr1 1886083 rs13303202 C T 406.23 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=730.31;QD=16.98;SB=-346.33 GT:AD:DP:GL:GQ 0/1:21,22:43:-89.27,-12.95,-73.96:99
-chr1 1886300 rs16824585 G A 23.99 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=56.05;MQ0=0;OQ=933.53;QD=20.75;SB=-382.89 GT:AD:DP:GL:GQ 0/1:18,27:45:-110.19,-13.56,-62.00:99
-chr1 1886413 rs28625839 C T 106.43 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.20;MQ0=0;OQ=181.47;QD=6.98;SB=-69.07 GT:AD:DP:GL:GQ 0/1:17,9:21:-27.77,-6.34,-42.14:99
-chr1 1887329 rs28523363 A G 314.68 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=60.00;MQ0=0;OQ=843.98;QD=13.40;SB=-333.92 GT:AD:DP:GL:GQ 0/1:32,31:62:-106.36,-18.68,-128.89:99
-chr1 1887451 rs4648599 C T 245.43 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=58.01;MQ0=0;OQ=690.92;QD=14.70;SB=-275.28 GT:AD:DP:GL:GQ 0/1:24,23:44:-85.64,-13.26,-73.07:99
-chr1 1887613 rs4648600 C G 12.90 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=4.38;MQ=58.99;MQ0=0;OQ=734.25;QD=15.96;SB=-239.38 GT:AD:DP:GL:GQ 0/1:23,23:42:-89.37,-12.66,-89.33:99
-chr1 1887905 rs28712827 G A 21.15 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=6.31;MQ=57.89;MQ0=0;OQ=502.21;QD=13.22;SB=-250.22 GT:AD:DP:GL:GQ 0/1:20,17:35:-64.07,-10.57,-52.53:99
-chr1 1888209 rs28414188 C T 21.14 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=59.03;MQ0=0;OQ=593.85;QD=13.81;SB=-128.12 GT:AD:DP:GL:GQ 0/1:24,19:42:-75.32,-12.65,-82.23:99
-chr1 1888229 rs28629936 G A 50.03 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.95;MQ0=0;OQ=708.17;QD=17.70;SB=-204.21 GT:AD:DP:GL:GQ 0/1:19,21:39:-85.85,-11.75,-58.81:99
-chr1 1888545 rs17715950 T C 188.94 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=392.93;QD=12.68;SB=-143.27 GT:AD:DP:GL:GQ 0/1:16,15:29:-51.31,-8.74,-58.30:99
-chr1 1888637 rs34506333 G C 174.46 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.80;MQ=57.85;MQ0=0;OQ=1081.48;QD=18.97;SB=-492.64 GT:AD:DP:GL:GQ 0/1:26,30:56:-128.32,-16.89,-103.04:99
-chr1 1888639 rs35698161 C A 246.37 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.80;MQ=57.81;MQ0=0;OQ=901.53;QD=16.10;SB=-413.05 GT:AD:DP:GL:GQ 0/1:26,30:56:-110.30,-16.87,-89.43:99
-chr1 1888688 rs34824947 T C 245.62 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.71;MQ0=0;OQ=584.90;QD=12.44;SB=-198.60 GT:AD:DP:GL:GQ 0/1:25,22:46:-75.63,-13.86,-99.35:99
-chr1 1888695 rs34586002 C A 280.09 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.48;MQ0=0;OQ=561.20;QD=12.75;SB=-230.89 GT:AD:DP:GL:GQ 0/1:24,20:42:-72.05,-12.65,-79.10:99
-chr1 1888719 rs35031992 G A 261.38 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=534.91;QD=11.38;SB=-199.88 GT:AD:DP:GL:GQ 0/1:28,19:46:-70.65,-13.87,-88.35:99
-chr1 1888794 rs35186797 T C 29.82 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.78;MQ=57.65;MQ0=0;OQ=525.33;QD=10.94;SB=-267.94 GT:AD:DP:GL:GQ 0/1:23,25:43:-68.78,-12.96,-87.05:99
-chr1 1888798 rs13303138 G A 173.43 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=57.75;MQ0=0;OQ=779.95;QD=15.60;SB=-266.18 GT:AD:DP:GL:GQ 0/1:24,26:46:-95.14,-13.87,-72.15:99
-chr1 1888835 rs34940616 G A 9.86 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.88;MQ0=0;OQ=741.91;QD=23.93;SB=-335.86 GT:AD:DP:GL:GQ 0/1:9,22:29:-86.21,-8.74,-25.83:99
-chr1 1889024 rs17778128 G C 179.10 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=57.35;MQ0=0;OQ=668.72;QD=10.79;SB=-360.78 GT:AD:DP:GL:GQ 0/1:38,24:59:-87.94,-17.79,-162.55:99
-chr1 1889139 rs61775058 A T 458.44 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.25;MQ0=0;OQ=787.44;QD=13.58;SB=-299.67 GT:AD:DP:GL:GQ 0/1:31,27:58:-99.50,-17.47,-121.67:99
-chr1 1889179 rs61775059 T C 275.84 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.27;MQ0=0;OQ=765.16;QD=11.42;SB=-328.14 GT:AD:DP:GL:GQ 0/1:35,32:66:-99.69,-19.89,-140.70:99
-chr1 1889260 rs13303007 G A 42.33 Indel;LowQual AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=6.98;MQ=52.93;MQ0=0;QD=0.73;SB=-30.38 GT:AD:DP:GL:GQ 0/1:52,6:58:-24.99,-17.47,-182.54:75.16
-chr1 1889721 rs4648601 C T 94.28 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=56.35;MQ0=0;OQ=530.41;QD=10.20;SB=-77.51 GT:AD:DP:GL:GQ 0/1:33,19:47:-70.50,-14.17,-95.11:99
-chr1 1890092 rs16824588 T C 13.33 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=57.02;MQ0=0;OQ=150.77;QD=3.97;SB=-54.71 GT:AD:DP:GL:GQ 0/1:26,12:35:-28.91,-10.55,-104.30:99
-chr1 1890192 rs55709963 A G 31.87 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=56.20;MQ0=0;OQ=293.66;QD=11.75;SB=-65.87 GT:AD:DP:GL:GQ 0/1:12,13:24:-39.88,-7.23,-45.12:99
-chr1 1890199 rs56126097 A G 24.29 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=55.86;MQ0=0;OQ=270.97;QD=11.78;SB=-47.83 GT:AD:DP:GL:GQ 0/1:11,12:22:-37.01,-6.63,-43.67:99
-chr1 1890235 rs55676322 G A 36.70 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.45;MQ0=0;QD=2.82;SB=-3.98 GT:AD:DP:GL:GQ 0/1:10,3:12:-10.57,-3.62,-30.38:69.54
-chr1 1890236 . C T 56.05 SnpCluster AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.03;MQ0=0;QD=4.00;SB=-3.98 GT:AD:DP:GL:GQ 0/1:11,3:13:-12.81,-3.92,-36.41:88.89
-chr1 1890241 rs55784504 G A 37.70 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=53.95;MQ0=0;QD=2.36;SB=-0.97 GT:AD:DP:GL:GQ 0/1:13,3:15:-11.57,-4.52,-40.91:70.54
-chr1 1890268 rs61776961 A G 12.56 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=53.61;MQ0=0;QD=0.66;SB=-31.93 GT:AD:DP:GL:GQ 0/1:15,4:17:-9.64,-5.12,-56.10:45.15
-chr1 1890270 rs61776962 C T 67.49 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=53.03;MQ0=0;QD=3.21;SB=-45.25 GT:AD:DP:GL:GQ 0/1:16,5:19:-15.77,-5.74,-45.89:99
-chr1 1890274 rs61776963 T C 59.17 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=2;HaplotypeScore=2.43;MQ=51.33;MQ0=0;QD=2.96;SB=-53.70 GT:AD:DP:GL:GQ 0/1:14,6:19:-14.93,-5.73,-56.51:92.01
-chr1 1890292 rs61776964 T G 172.84 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=50.53;MQ0=0;OQ=263.44;QD=9.08;SB=-95.94 GT:AD:DP:GL:GQ 0/1:17,12:28:-38.07,-8.44,-56.66:99
-chr1 1890305 rs61776965 C T 161.45 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=50.32;MQ0=0;OQ=365.34;QD=11.79;SB=-175.70 GT:AD:DP:GL:GQ 0/1:18,13:27:-47.95,-8.13,-56.49:99
-chr1 1890314 rs6681749 A G 143.47 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=50.65;MQ0=0;OQ=306.18;QD=9.57;SB=-129.77 GT:AD:DP:GL:GQ 0/1:17,15:29:-42.64,-8.74,-64.98:99
-chr1 1890507 . T C 42.73 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=3.92;MQ=54.77;MQ0=0;QD=1.86;SB=14.07 GT:AD:DP:GL:GQ 0/1:16,7:17:-12.68,-5.13,-48.62:75.57
-chr1 1890548 . A T 8.30 PASS AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=60.00;MQ0=0;OQ=79.81;QD=7.98;SB=-57.71 GT:AD:DP:GL:GQ 0/1:6,4:10:-14.28,-3.01,-22.53:99
-chr1 1890778 rs28707401 G A 84.90 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.74;MQ=58.33;MQ0=0;OQ=401.02;QD=14.32;SB=-129.13 GT:AD:DP:GL:GQ 0/1:13,14:24:-53.53,-10.14,-35.22:99
-chr1 1892326 . A C 112.36 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=59.24;MQ0=0;OQ=852.28;QD=15.50;SB=-429.85 GT:AD:DP:GL:GQ 0/1:26,29:52:-104.18,-15.67,-81.22:99
-chr1 1892422 rs7367171 A G 220.04 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.60;MQ0=0;OQ=514.17;QD=9.02;SB=-267.96 GT:AD:DP:GL:GQ 0/1:32,25:54:-70.98,-16.28,-126.05:99
-chr1 1892426 rs7367879 G A 251.13 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=59.60;MQ0=0;OQ=832.91;QD=14.36;SB=-352.38 GT:AD:DP:GL:GQ 0/1:32,26:52:-102.26,-15.68,-81.39:99
-chr1 1892733 rs7366028 C T 234.62 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.35;MQ0=0;OQ=1086.69;QD=15.31;SB=-535.37 GT:AD:DP:GL:GQ 0/1:36,35:67:-132.15,-20.20,-106.68:99
-chr1 1893163 rs4648603 C T 25.39 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=59.48;MQ0=0;OQ=261.75;QD=5.95;SB=-111.10 GT:AD:DP:GL:GQ 0/1:32,12:41:-41.83,-12.38,-90.87:99
-chr1 1893572 rs13303201 C A 360.69 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.58;MQ0=0;OQ=726.40;QD=15.46;SB=-340.06 GT:AD:DP:GL:GQ 0/1:22,25:44:-89.18,-13.26,-62.88:99
-chr1 1895166 rs56313717 C A 171.85 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=635.59;QD=15.13;SB=-197.47 GT:AD:DP:GL:GQ 0/1:18,24:41:-79.20,-12.35,-61.36:99
-chr1 1897772 rs7528894 C T 135.70 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=58.63;MQ0=0;OQ=607.52;QD=11.91;SB=-152.65 GT:AD:DP:GL:GQ 0/1:30,21:44:-77.30,-13.26,-84.20:99
-chr1 1897865 rs7536087 T C 25.44 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=54.74;MQ0=0;OQ=378.78;QD=5.83;SB=-147.48 GT:AD:DP:GL:GQ 0/1:38,27:56:-58.05,-16.88,-148.17:99
-chr1 1897872 rs28588807 T C 29.81 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=53.22;MQ0=0;OQ=367.97;QD=6.24;SB=-166.50 GT:AD:DP:GL:GQ 0/1:36,23:50:-55.16,-15.08,-127.98:99
-chr1 1897899 rs4388640 C T 188.74 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=52.25;MQ0=0;OQ=499.97;QD=8.20;SB=-247.55 GT:AD:DP:GL:GQ 0/1:39,22:51:-68.65,-15.37,-112.84:99
-chr1 1897945 rs28410799 A G 3.16 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.71;MQ=54.36;MQ0=0;OQ=341.23;QD=5.59;SB=-142.90 GT:AD:DP:GL:GQ 0/1:39,21:52:-53.08,-15.68,-138.70:99
-chr1 1897960 rs28789409 G T 236.91 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=55.27;MQ0=0;OQ=569.89;QD=9.19;SB=-286.60 GT:AD:DP:GL:GQ 0/1:38,24:59:-78.04,-17.77,-137.70:99
-chr1 1898245 rs13303203 C T 367.31 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.47;MQ0=0;OQ=546.46;QD=10.31;SB=-185.87 GT:AD:DP:GL:GQ 0/1:33,20:47:-72.10,-14.17,-90.13:99
-chr1 1898289 rs28545809 T C 170.68 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=55.94;MQ0=0;OQ=320.54;QD=7.82;SB=-173.95 GT:AD:DP:GL:GQ 0/1:24,16:37:-46.49,-11.16,-87.43:99
-chr1 1898563 rs4233027 C G 427.81 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.18;MQ0=0;OQ=977.32;QD=15.27;SB=-297.92 GT:AD:DP:GL:GQ 0/1:36,28:63:-120.00,-18.99,-153.02:99
-chr1 1899064 rs35953639 A G 134.17 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.58;MQ=58.52;MQ0=0;OQ=901.65;QD=15.82;SB=-439.15 GT:AD:DP:GL:GQ 0/1:25,32:55:-110.02,-16.57,-94.81:99
-chr1 1899178 rs61776976 G A 36.91 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.28;MQ=59.15;MQ0=0;OQ=1106.44;QD=22.13;SB=-371.92 GT:AD:DP:GL:GQ 0/1:16,34:48:-128.39,-14.47,-53.19:99
-chr1 1899305 rs55863117 A G 206.03 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.24;MQ0=0;OQ=872.61;QD=14.31;SB=-340.17 GT:AD:DP:GL:GQ 0/1:25,35:57:-107.73,-17.18,-95.38:99
-chr1 1899354 rs28716654 C T 202.23 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=59.30;MQ0=0;OQ=1176.35;QD=17.82;SB=-612.15 GT:AD:DP:GL:GQ 0/1:31,35:62:-139.59,-18.67,-102.07:99
-chr1 1899413 rs28680595 T A 360.31 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.29;MQ0=0;OQ=1036.44;QD=15.95;SB=-464.88 GT:AD:DP:GL:GQ 0/1:30,35:63:-125.91,-18.98,-108.28:99
-chr1 1899561 rs28613404 C T 21.64 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=5.89;MQ=58.07;MQ0=0;OQ=742.01;QD=16.13;SB=-312.34 GT:AD:DP:GL:GQ 0/1:20,25:42:-90.15,-12.66,-60.03:99
-chr1 1899593 rs28491083 G T 384.56 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=572.46;QD=14.31;SB=-222.49 GT:AD:DP:GL:GQ 0/1:17,23:37:-71.67,-11.14,-60.73:99
-chr1 1899703 rs28433557 C T 153.68 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.28;MQ0=0;OQ=695.04;QD=16.55;SB=-241.74 GT:AD:DP:GL:GQ 0/1:19,23:39:-84.54,-11.75,-59.04:99
-chr1 1899714 rs28448395 G A 59.92 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=57.87;MQ0=0;OQ=975.55;QD=21.68;SB=-411.21 GT:AD:DP:GL:GQ 0/1:16,29:43:-113.79,-12.96,-49.10:99
-chr1 1899728 rs28539219 G A 22.10 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=58.50;MQ0=0;OQ=1039.92;QD=21.66;SB=-531.16 GT:AD:DP:GL:GQ 0/1:16,32:45:-120.83,-13.56,-54.90:99
-chr1 1899861 rs28468541 C G 2.92 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=9.03;MQ=56.76;MQ0=0;OQ=898.89;QD=17.63;SB=-410.04 GT:AD:DP:GL:GQ 0/1:24,26:48:-107.64,-14.46,-99.37:99
-chr1 1899872 rs28588737 T C 12.45 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=3.04;MQ=57.56;MQ0=0;OQ=448.65;QD=9.35;SB=-239.28 GT:AD:DP:GL:GQ 0/1:25,23:43:-61.11,-12.96,-97.10:99
-chr1 1899946 rs28645949 G T 144.20 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=60.00;MQ0=0;OQ=332.80;QD=10.40;SB=-155.69 GT:AD:DP:GL:GQ 0/1:19,13:30:-45.61,-9.04,-50.81:99
-chr1 1900096 rs28651716 T C 225.12 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=54.90;MQ0=0;OQ=686.40;QD=12.71;SB=-338.36 GT:AD:DP:GL:GQ 0/1:28,26:53:-87.90,-15.97,-105.41:99
-chr1 1900231 rs28642304 G A 31.56 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=5.35;MQ=52.67;MQ0=2;OQ=686.17;QD=14.00;SB=-341.85 GT:AD:DP:GL:GQ 0/1:25,24:43:-84.86,-12.96,-72.07:99
-chr1 1900342 . C G 14.82 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=12.94;MQ=53.14;MQ0=2;QD=0.37;SB=26.12 GT:AD:DP:GL:GQ 0/1:35,5:34:-15.00,-10.25,-129.63:47.51
-chr1 1900344 . T C 47.56 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=13.10;MQ=54.07;MQ0=2;QD=1.16;SB=26.11 GT:AD:DP:GL:GQ 0/1:32,9:34:-18.29,-10.25,-109.75:80.39
-chr1 1900366 . T C 19.64 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=56.14;MQ0=0;QD=0.48;SB=17.08 GT:AD:DP:GL:GQ 0/1:34,7:35:-15.79,-10.55,-116.81:52.43
-chr1 1900466 rs7550407 A G 75.71 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=45.89;MQ0=2;OQ=380.59;QD=19.03;SB=-189.68 GT:AD:DP:GL:GQ 1/1:0,20:13:-41.66,-3.92,-0.01:39.09
-chr1 1900518 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=10.99;MQ=35.59;MQ0=6;OQ=55.62;QD=1.29;SB=-13.87 GT:AD:DP:GL:GQ 0/1:29,14:19:-14.57,-5.73,-56.56:88.46
-chr1 1900571 . C T 45.32 LowQual AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=19.95;MQ=36.93;MQ0=3;QD=0.91;SB=-24.62 GT:AD:DP:GL:GQ 0/1:41,9:25:-15.36,-7.54,-65.46:78.16
-chr1 1900816 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=6.83;MQ=47.18;MQ0=2;OQ=71.50;QD=1.79;SB=-42.78 GT:AD:DP:GL:GQ 0/1:30,10:31:-19.78,-9.34,-96.64:99
-chr1 1900861 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=8.07;MQ=42.04;MQ0=5;OQ=136.19;QD=2.67;SB=-39.59 GT:AD:DP:GL:GQ 0/1:31,18:36:-30.43,-13.53,-101.33:99
-chr1 1900880 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=21.93;MQ=42.64;MQ0=5;OQ=81.77;QD=1.99;SB=26.03 GT:AD:DP:GL:GQ 0/1:32,9:28:-19.91,-8.45,-71.11:99
-chr1 1900981 . G A 32.02 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=14.77;MQ=47.97;MQ0=0;QD=1.07;SB=20.08 GT:AD:DP:GL:GQ 0/1:27,3:20:-12.51,-6.03,-56.06:64.85
-chr1 1900982 . C T 11.94 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=14.77;MQ=47.50;MQ0=0;QD=0.41;SB=35.07 GT:AD:DP:GL:GQ 0/1:26,3:25:-11.99,-7.54,-69.22:44.49
-chr1 1900987 . C G 179.53 SnpCluster AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=15.25;MQ=49.14;MQ0=0;QD=5.79;SB=-106.68 GT:AD:DP:GL:GQ 0/1:23,8:22:-27.88,-6.64,-59.47:99
-chr1 1901007 . A G 17.82 PASS AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=50.60;MQ0=0;OQ=269.42;QD=8.42;SB=-129.64 GT:AD:DP:GL:GQ 0/1:19,13:29:-38.97,-8.74,-66.56:99
-chr1 1901025 . T C 1.37 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=50.85;MQ0=0;OQ=146.63;QD=3.67;SB=-63.91 GT:AD:DP:GL:GQ 0/1:26,13:31:-27.31,-9.36,-79.17:99
-chr1 1901036 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=7.09;MQ=51.49;MQ0=1;OQ=87.37;QD=1.99;SB=-8.61 GT:AD:DP:GL:GQ 0/1:38,6:38:-23.49,-11.46,-98.15:99
-chr1 1901053 . T C 11.36 LowQual AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=52.41;MQ0=1;QD=0.25;SB=-25.22 GT:AD:DP:GL:GQ 0/1:37,8:38:-15.84,-11.45,-126.44:43.87
-chr1 1901418 rs28645431 C T 0.52 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=3.95;MQ=41.39;MQ0=1;OQ=172.22;QD=4.53;SB=-89.91 GT:AD:DP:GL:GQ 0/1:29,9:21:-26.84,-6.33,-42.67:99
-chr1 1901574 rs13303001 G A 41.49 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=7.68;MQ=10.86;MQ0=15;QD=1.66;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,5:3:-8.34,-0.90,-3.10:21.92
-chr1 1901637 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=16.41;MQ=17.84;MQ0=13;OQ=157.79;QD=2.87;SB=-10.00 GT:AD:DP:GL:GQ 0/1:44,10:26:-26.90,-7.83,-65.70:99
-chr1 1901664 . G A 34.02 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.20;MQ=18.33;MQ0=14;QD=0.67;SB=-10.00 GT:AD:DP:GL:GQ 0/1:42,9:17:-11.81,-5.13,-50.35:66.86
-chr1 1901668 . G A 0.06 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.04;MQ=18.51;MQ0=13;OQ=99.32;QD=2.03;SB=-7.00 GT:AD:DP:GL:GQ 0/1:40,9:16:-18.04,-4.83,-38.64:99
-chr1 1901732 rs13303290 T C 12.82 LowQual AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.55;MQ0=0;QD=0.64;SB=-24.62 GT:AD:DP:GL:GQ 0/1:15,5:16:-9.37,-4.82,-51.21:45.43
-chr1 1901798 rs4648740 A G 153 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=48.72;MQ0=0;OQ=495.24;QD=14.15;SB=-240.44 GT:AD:DP:GL:GQ 0/1:16,19:34:-63.06,-10.25,-57.72:99
-chr1 1901828 rs4648741 T A 223.12 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=49.47;MQ0=0;OQ=518.42;QD=14.01;SB=-218.56 GT:AD:DP:GL:GQ 0/1:16,21:33:-65.07,-9.94,-58.68:99
-chr1 1902252 rs35209771 G A 29.20 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.72;MQ=59.38;MQ0=0;OQ=570.39;QD=15.42;SB=-188.28 GT:AD:DP:GL:GQ 0/1:17,20:31:-69.66,-9.34,-43.55:99
-chr1 1902361 rs35032062 A G 8.53 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=1.19;MQ=56.62;MQ0=0;OQ=288.56;QD=9.31;SB=-81.77 GT:AD:DP:GL:GQ 0/1:15,16:27:-40.29,-8.15,-49.29:99
-chr1 1902443 rs4648742 T G 2.74 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=3;HaplotypeScore=1.88;MQ=52.64;MQ0=0;OQ=307.57;QD=13.98;SB=-102.98 GT:AD:DP:GL:GQ 0/1:8,14:19:-39.76,-5.72,-27.07:99
-chr1 1902590 rs34957887 A G 5.37 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=54.60;MQ0=0;OQ=111.21;QD=3.83;SB=-42.82 GT:AD:DP:GL:GQ 0/1:21,8:27:-22.55,-8.14,-76.38:99
-chr1 1902594 rs34699657 T C 6.89 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=55.30;MQ0=0;OQ=114.19;QD=4.08;SB=-28.64 GT:AD:DP:GL:GQ 0/1:19,9:26:-22.55,-7.85,-71.28:99
-chr1 1902618 rs13302917 G C 80.21 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=55.30;MQ0=0;OQ=235.26;QD=8.40;SB=8.06 GT:AD:DP:GL:GQ 0/1:18,10:26:-34.65,-7.84,-76.52:99
-chr1 1902752 . G A 16.41 LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=23.04;MQ0=3;QD=0.82;SB=-30.52 GT:AD:DP:GL:GQ 0/1:17,3:9:-7.63,-2.71,-23.66:49.15
-chr1 1902780 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=12.84;MQ=20.15;MQ0=3;OQ=68.78;QD=3.62;SB=-7.00 GT:AD:DP:GL:GQ 0/1:14,5:6:-11.97,-1.81,-9.13:73.25
-chr1 1902787 . G A 0.55 PASS AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=20.15;MQ0=3;OQ=103.65;QD=5.46;SB=-46.55 GT:AD:DP:GL:GQ 0/1:13,6:5:-15.16,-1.51,-3.80:22.92
-chr1 1902803 . A G 0.43 PASS AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=19.89;MQ0=3;OQ=59.98;QD=3.75;SB=-6.99 GT:AD:DP:GL:GQ 0/1:11,5:6:-11.09,-1.81,-11.69:92.82
-chr1 1902817 . T C 41.42 LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=9.95;MQ=22.02;MQ0=2;QD=2.96;SB=-35.94 GT:AD:DP:GL:GQ 0/1:9,4:6:-9.23,-1.81,-11.87:74.25
-chr1 1902835 rs61776983 A C 26.37 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=1.55;MQ=20.97;MQ0=2;OQ=78.83;QD=5.63;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,12:3:-11.37,-0.90,-0.00:9.03
-chr1 1903052 . G A 0.07 PASS AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=10.18;MQ=21.19;MQ0=5;OQ=185.24;QD=7.12;SB=-114.97 GT:AD:DP:GL:GQ 0/1:13,13:10:-24.83,-3.02,-9.74:67.23
-chr1 1903096 . C T 19.36 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=27.09;MQ=29.12;MQ0=4;QD=0.84;SB=-32.50 GT:AD:DP:GL:GQ 0/1:20,3:10:-8.23,-3.01,-26.23:52.14
-chr1 1903103 . G A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=11.25;MQ=32.31;MQ0=4;OQ=203.36;QD=8.13;SB=-108.63 GT:AD:DP:GL:GQ 0/1:11,14:13:-27.54,-3.92,-21.98:99
-chr1 1903122 . G A 1.51 PASS AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=5.86;MQ=37.50;MQ0=2;OQ=277.72;QD=11.11;SB=-116.63 GT:AD:DP:GL:GQ 0/1:11,14:14:-35.28,-4.22,-14.88:99
-chr1 1903133 . C T 26.70 DPFilter;HARD_TO_VALIDATE;Indel;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=14.79;MQ=33.51;MQ0=4;QD=0.92;SB=2.00 GT:AD:DP:GL:GQ 0/1:25,3:16:-10.78,-4.83,-41.60:59.53
-chr1 1903194 . G A 0.17 PASS AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=22.60;MQ0=6;OQ=59.87;QD=3.15;SB=-29.63 GT:AD:DP:GL:GQ 0/1:15,4:8:-11.68,-2.41,-15.55:92.71
-chr1 1903256 rs56273126 A C 0.43 PASS AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=9.88;MQ=34.34;MQ0=2;OQ=157.91;QD=8.77;SB=-43.00 GT:AD:DP:GL:GQ 0/1:8,10:11:-22.39,-3.31,-17.60:99
-chr1 1903263 rs56067355 C T 0.21 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=9.27;MQ=35.40;MQ0=1;OQ=103.77;QD=4.72;SB=-3.99 GT:AD:DP:GL:GQ 0/1:16,6:17:-18.78,-5.12,-41.68:99
-chr1 1903283 . G A 8.07 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.95;MQ=39.68;MQ0=0;OQ=372.77;QD=10.96;SB=-73.09 GT:AD:DP:GL:GQ 0/1:17,16:22:-47.20,-6.63,-29.71:99
-chr1 1903404 . C T 39.84 LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=6.15;MQ=48.13;MQ0=1;QD=1.73;SB=-35.65 GT:AD:DP:GL:GQ 0/1:19,4:16:-12.09,-4.83,-40.40:72.68
-chr1 1903423 rs58434854 A G 0.71 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=7.95;MQ=46.73;MQ0=3;OQ=182.58;QD=6.30;SB=-71.95 GT:AD:DP:GL:GQ 0/1:18,11:23:-28.48,-6.94,-51.85:99
-chr1 1903439 rs58923167 C T 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=17.53;MQ=42.29;MQ0=6;OQ=136.42;QD=4.01;SB=-25.62 GT:AD:DP:GL:GQ 0/1:26,8:22:-23.56,-6.63,-53.26:99
-chr1 1903440 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=17.53;MQ=42.29;MQ0=6;OQ=187.84;QD=5.52;SB=-110.54 GT:AD:DP:GL:GQ 0/1:26,8:23:-29.00,-6.94,-48.31:99
-chr1 1903458 rs55879512 A G 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=7.35;MQ=44.38;MQ0=5;OQ=75.85;QD=1.85;SB=-63.75 GT:AD:DP:GL:GQ 0/1:26,14:24:-18.11,-7.24,-65.52:99
-chr1 1903493 . G A 1.04 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=47.31;MQ0=2;OQ=168.07;QD=4.31;SB=-57.28 GT:AD:DP:GL:GQ 0/1:31,8:25:-27.63,-7.54,-58.38:99
-chr1 1903509 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=11.62;MQ=39.25;MQ0=5;OQ=92.69;QD=2.73;SB=5.04 GT:AD:DP:GL:GQ 0/1:25,9:18:-17.98,-5.43,-46.46:99
-chr1 1903540 . G A 33.23 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=27.81;MQ=22.93;MQ0=9;QD=1.15;SB=-3.98 GT:AD:DP:GL:GQ 0/1:26,3:5:-8.11,-1.51,-11.06:66.06
-chr1 1903547 . T A 34.51 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=29.76;MQ=15.81;MQ0=9;QD=1.33;SB=-42.38 GT:AD:DP:GL:GQ 0/1:19,6:3:-7.64,-0.90,-3.64:27.36
-chr1 1903587 rs4648605 C T 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=14.50;MQ=19.08;MQ0=11;OQ=79.27;QD=1.98;SB=-3.99 GT:AD:DP:GL:GQ 0/1:27,13:10:-14.23,-3.02,-19.87:99
-chr1 1904125 rs4648745 T C 247.21 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.25;MQ0=0;OQ=694.34;QD=11.20;SB=-245.29 GT:AD:DP:GL:GQ 0/1:33,29:61:-91.10,-18.39,-129.32:99
-chr1 1904347 rs4648746 A G 176.14 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.39;MQ0=0;OQ=338.48;QD=8.91;SB=-150.90 GT:AD:DP:GL:GQ 0/1:21,17:36:-47.98,-10.85,-82.55:99
-chr1 1904465 rs28737396 A T 328.52 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1094.85;QD=18.56;SB=-354.42 GT:AD:DP:GL:GQ 0/1:24,35:59:-130.54,-17.77,-93.43:99
-chr1 1904806 rs61776990 C T 103.75 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=56.91;MQ0=0;OQ=639.60;QD=17.29;SB=-221.92 GT:AD:DP:GL:GQ 0/1:15,22:35:-77.80,-10.56,-46.60:99
-chr1 1905885 rs4648747 G A 213.38 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=54.80;MQ0=0;OQ=758.00;QD=15.16;SB=-295.79 GT:AD:DP:GL:GQ 0/1:26,24:49:-93.85,-14.76,-88.23:99
-chr1 1905894 rs13303091 C T 219.74 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=53.79;MQ0=0;OQ=656.87;QD=13.14;SB=-261.28 GT:AD:DP:GL:GQ 0/1:27,22:45:-82.54,-13.57,-75.64:99
-chr1 1905900 rs13302998 T C 119.27 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=54.88;MQ0=0;OQ=405.99;QD=8.83;SB=-193.60 GT:AD:DP:GL:GQ 0/1:27,19:44:-57.15,-13.26,-102.12:99
-chr1 1906158 rs13302999 C T 171.25 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=58.63;MQ0=0;OQ=813.49;QD=15.95;SB=-262.17 GT:AD:DP:GL:GQ 0/1:25,26:49:-99.40,-14.77,-77.74:99
-chr1 1906389 rs3795284 C T 21.30 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=2.33;MQ=60.00;MQ0=0;OQ=758.20;QD=14.04;SB=-278.28 GT:AD:DP:GL:GQ 0/1:28,26:52:-94.77,-15.67,-93.68:99
-chr1 1906447 rs3795283 G T 377.61 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=60.00;MQ0=0;OQ=998.45;QD=16.37;SB=-378.14 GT:AD:DP:GL:GQ 0/1:26,35:60:-121.20,-18.07,-93.96:99
-chr1 1906750 rs3795280 C T 425.49 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=568.99;QD=13.55;SB=-250.75 GT:AD:DP:GL:GQ 0/1:24,18:42:-72.83,-12.65,-87.72:99
-chr1 1906918 rs34331632 A G 117.25 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=58.45;MQ0=0;OQ=396.71;QD=8.82;SB=-212.27 GT:AD:DP:GL:GQ 0/1:26,19:41:-55.32,-12.36,-92.05:99
-chr1 1907309 rs34567059 T G 9.37 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=3;HaplotypeScore=0.99;MQ=59.28;MQ0=0;OQ=266.80;QD=8.34;SB=-138.72 GT:AD:DP:GL:GQ 0/1:18,13:26:-37.80,-7.84,-51.38:99
-chr1 1907332 rs13303173 G A 219.11 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=59.50;MQ0=0;OQ=402.42;QD=8.75;SB=-215.71 GT:AD:DP:GL:GQ 0/1:30,16:41:-55.89,-12.37,-85.41:99
-chr1 1907475 rs13302992 A T 11.71 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=5.57;MQ=54.24;MQ0=0;OQ=373.16;QD=8.88;SB=-86.42 GT:AD:DP:GL:GQ 0/1:20,21:33:-50.55,-9.95,-63.90:99
-chr1 1907510 rs13302993 T C 10.65 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=3.38;MQ=53.93;MQ0=0;OQ=691.42;QD=12.35;SB=-327.29 GT:AD:DP:GL:GQ 0/1:24,32:51:-87.80,-15.38,-95.79:99
-chr1 1907689 rs4648748 T G 25.50 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.34;MQ=60.00;MQ0=0;OQ=189.73;QD=5.93;SB=-95.86 GT:AD:DP:GL:GQ 0/1:21,11:31:-31.60,-9.34,-75.09:99
-chr1 1907731 rs4648749 T A 88.57 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=58.55;MQ0=0;OQ=1056.82;QD=33.03;SB=-482.74 GT:AD:DP:GL:GQ 1/1:0,32:31:-109.29,-9.34,-0.02:93.25
-chr1 1907768 rs4648750 A C 41.15 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=58.69;MQ0=0;OQ=501.71;QD=15.68;SB=-178.91 GT:AD:DP:GL:GQ 0/1:13,18:31:-62.79,-9.34,-46.86:99
-chr1 1908051 rs4233028 A G 0.83 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=11.36;MQ=58.24;MQ0=0;OQ=590.53;QD=10.36;SB=-318.09 GT:AD:DP:GL:GQ 0/1:28,29:51:-77.71,-15.37,-108.19:99
-chr1 1908348 rs4350140 A G 295.92 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=483.27;QD=11.51;SB=-249.48 GT:AD:DP:GL:GQ 0/1:22,19:40:-63.66,-12.05,-87.28:99
-chr1 1908395 rs4535948 A T 243.05 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=561.16;QD=14.03;SB=-291.34 GT:AD:DP:GL:GQ 0/1:20,20:38:-70.85,-11.45,-68.83:99
-chr1 1908444 rs4603072 C T 95.97 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.91;MQ=59.00;MQ0=0;OQ=825.49;QD=16.19;SB=-274.16 GT:AD:DP:GL:GQ 0/1:24,27:46:-99.69,-13.86,-72.18:99
-chr1 1908455 rs4466593 G A 154 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.00;MQ0=0;OQ=749.94;QD=14.70;SB=-209.69 GT:AD:DP:GL:GQ 0/1:25,26:47:-92.45,-14.17,-73.64:99
-chr1 1910822 rs13303020 T C 316 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.07;MQ0=0;OQ=856.90;QD=15.30;SB=-348.06 GT:AD:DP:GL:GQ 0/1:22,34:54:-105.26,-16.29,-79.82:99
-chr1 1912163 rs13303195 C T 281.64 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.42;MQ0=0;OQ=1071.80;QD=15.76;SB=-460.45 GT:AD:DP:GL:GQ 0/1:35,33:67:-130.66,-20.19,-113.97:99
-chr1 1912512 rs13303233 T C 59.35 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=5.24;MQ=56.21;MQ0=1;OQ=632.02;QD=12.15;SB=-238.92 GT:AD:DP:GL:GQ 0/1:24,28:49:-81.26,-14.77,-90.12:99
-chr1 1912694 rs6605075 T C 195.05 PASS AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.81;MQ0=0;OQ=3518.98;QD=36.28;SB=-1667.64 GT:AD:DP:GL:GQ 1/1:0,97:97:-350.90,-29.22,-0.04:99
-chr1 1912989 rs13303332 A G 477.80 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.92;MQ0=0;OQ=1063.77;QD=12.66;SB=-392.88 GT:AD:DP:GL:GQ 0/1:42,42:74:-131.95,-22.29,-145.18:99
-chr1 1913060 rs13303315 T C 275.58 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=55.32;MQ0=0;OQ=932.62;QD=13.14;SB=-432.88 GT:AD:DP:GL:GQ 0/1:32,39:67:-116.74,-20.20,-124.71:99
-chr1 1913077 rs7529662 A G 28.09 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=4.09;MQ=51.94;MQ0=0;OQ=415.73;QD=6.60;SB=-158.33 GT:AD:DP:GL:GQ 0/1:37,26:55:-61.45,-16.59,-136.84:99
-chr1 1913121 rs6605076 G A 18.01 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=2.95;MQ=38.45;MQ0=0;OQ=1375.58;QD=22.55;SB=-647.86 GT:AD:DP:GL:GQ 1/1:0,60:36:-143.81,-13.38,-2.67:99
-chr1 1913134 rs6662056 C T 90.11 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=31.19;MQ0=0;OQ=470.14;QD=8.11;SB=-253.79 GT:AD:DP:GL:GQ 0/1:33,25:32:-59.95,-9.65,-52.35:99
-chr1 1913140 rs6605077 T C 265.58 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=26.77;MQ0=0;OQ=931.68;QD=17.25;SB=-415.14 GT:AD:DP:GL:GQ 1/1:0,54:27:-96.76,-8.13,-0.01:81.23
-chr1 1913166 rs6605078 A G 225.40 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=29.40;MQ0=0;OQ=379.61;QD=9.73;SB=-193.70 GT:AD:DP:GL:GQ 1/1:0,39:13:-41.56,-3.92,-0.01:39.09
-chr1 1913525 rs13303140 A G 349.47 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.90;MQ0=0;OQ=337.35;QD=9.92;SB=-170.51 GT:AD:DP:GL:GQ 0/1:16,18:26:-44.86,-7.84,-45.87:99
-chr1 1913541 rs6675865 A G 238.98 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=54.81;MQ0=0;OQ=476.22;QD=12.53;SB=-203.64 GT:AD:DP:GL:GQ 0/1:19,19:32:-60.55,-9.64,-59.13:99
-chr1 1914266 rs35822535 A G 10.16 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.48;MQ=52.01;MQ0=0;OQ=172.60;QD=5.57;SB=-106.80 GT:AD:DP:GL:GQ 0/1:17,12:25:-30.72,-10.17,-62.92:99
-chr1 1914406 rs28674034 C A 137.53 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=56.09;MQ0=0;OQ=479.30;QD=11.15;SB=-93.09 GT:AD:DP:GL:GQ 0/1:24,19:37:-62.36,-11.14,-73.40:99
-chr1 1914407 . C G 17.06 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.38;MQ=56.18;MQ0=0;OQ=578.11;QD=13.14;SB=-126.71 GT:AD:DP:GL:GQ 0/1:24,20:35:-71.66,-10.56,-69.93:99
-chr1 1914645 rs58504758 G A 76.95 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=56.31;MQ0=0;OQ=649.38;QD=14.43;SB=-87.56 GT:AD:DP:GL:GQ 0/1:23,22:44:-81.48,-13.26,-81.33:99
-chr1 1914669 rs57460771 C G 59.99 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=52.90;MQ0=0;OQ=635.24;QD=15.88;SB=-152.79 GT:AD:DP:GL:GQ 0/1:17,23:37:-77.97,-11.16,-71.80:99
-chr1 1915019 rs5021356 C T 38.12 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=38.83;MQ0=0;OQ=299.26;QD=5.16;SB=-51.25 GT:AD:DP:GL:GQ 0/1:26,32:29:-41.96,-8.75,-54.57:99
-chr1 1915025 rs5021357 C T 0.49 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=37.79;MQ0=0;OQ=104.46;QD=1.66;SB=-36.16 GT:AD:DP:GL:GQ 0/1:31,32:32:-23.37,-9.64,-89.65:99
-chr1 1915153 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=18.97;MQ=41.21;MQ0=1;OQ=317.64;QD=7.56;SB=-31.63 GT:AD:DP:GL:GQ 0/1:23,16:24:-42.29,-7.24,-39.07:99
-chr1 1915186 rs2377036 C A 0.52 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.46;MQ=38.80;MQ0=2;OQ=789.31;QD=23.22;SB=-127.84 GT:AD:DP:GL:GQ 1/1:3,31:25:-82.54,-7.54,-0.02:75.13
-chr1 1915197 . C T 2.41 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=35.96;MQ0=2;OQ=151.83;QD=4.34;SB=2.02 GT:AD:DP:GL:GQ 0/1:24,11:24:-25.70,-7.23,-56.48:99
-chr1 1915324 rs2889540 C T 459.53 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.97;MQ0=0;OQ=2370.24;QD=35.38;SB=-497.01 GT:AD:DP:GL:GQ 1/1:1,66:63:-240.64,-18.99,-0.03:99
-chr1 1915581 rs6691182 G A 155.40 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=58.09;MQ0=0;OQ=1565.00;QD=18.20;SB=-799.86 GT:AD:DP:GL:GQ 0/1:40,46:84:-185.10,-25.32,-125.47:99
-chr1 1915947 rs6661597 T C 434.36 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=753.37;QD=11.59;SB=-273.59 GT:AD:DP:GL:GQ 0/1:32,33:62:-97.31,-18.69,-126.97:99
-chr1 1915962 rs6675751 G C 346.68 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1124.09;QD=17.56;SB=-315.97 GT:AD:DP:GL:GQ 0/1:34,30:64:-134.99,-19.30,-134.99:99
-chr1 1916138 rs6667687 A T 24.65 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=5.93;MQ=59.44;MQ0=0;OQ=1046.27;QD=14.14;SB=-543.64 GT:AD:DP:GL:GQ 0/1:37,36:71:-129.30,-21.39,-135.06:99
-chr1 1917124 rs13302991 A G 77.08 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=48.19;MQ0=0;OQ=664.15;QD=15.09;SB=-132.68 GT:AD:DP:GL:GQ 0/1:17,27:41:-82.05,-12.36,-62.14:99
-chr1 1918235 rs58325500 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.01;HRun=15;HaplotypeScore=12.28;MQ=47.41;MQ0=2;OQ=54.80;QD=0.68;SB=8.48 GT:AD:DP:GL:GQ 0/1:66,14:56:-25.35,-16.59,-150.42:87.64
-chr1 1918448 rs28827857 G A 289.35 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=57.61;MQ0=0;OQ=1091.40;QD=15.82;SB=-363.89 GT:AD:DP:GL:GQ 0/1:36,33:66:-132.32,-19.90,-105.59:99
-chr1 1918459 rs28770275 C T 156.31 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.33;MQ0=0;OQ=990.70;QD=15.98;SB=-272.19 GT:AD:DP:GL:GQ 0/1:31,31:62:-121.04,-18.69,-98.12:99
-chr1 1919267 rs6672175 T C 222.23 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.35;MQ=59.22;MQ0=0;OQ=1139.84;QD=14.61;SB=-513.90 GT:AD:DP:GL:GQ 0/1:38,40:77:-140.46,-23.19,-152.92:99
-chr1 1919526 rs7532409 A G 229.15 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.27;MQ0=0;OQ=832.47;QD=13.21;SB=-385.03 GT:AD:DP:GL:GQ 0/1:26,37:58:-104.01,-17.48,-104.69:99
-chr1 1919694 rs7532529 A C 228.41 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=57.10;MQ0=0;OQ=714.32;QD=14.58;SB=-265.84 GT:AD:DP:GL:GQ 0/1:24,25:47:-88.87,-14.15,-84.13:99
-chr1 1919719 rs7527169 T C 335.23 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.16;MQ0=0;OQ=729.87;QD=16.59;SB=-259.34 GT:AD:DP:GL:GQ 0/1:16,28:43:-89.23,-12.96,-64.51:99
-chr1 1919737 rs7520124 C A 233.30 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.52;MQ0=0;OQ=916.99;QD=20.84;SB=-414.85 GT:AD:DP:GL:GQ 0/1:15,29:44:-108.24,-13.26,-45.66:99
-chr1 1919954 rs7542825 G A 154.86 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=58.01;MQ0=0;OQ=805.39;QD=15.79;SB=-224.54 GT:AD:DP:GL:GQ 0/1:26,25:50:-98.90,-15.08,-78.21:99
-chr1 1920251 rs6605079 C G 333.78 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=1146.24;QD=15.08;SB=-200.61 GT:AD:DP:GL:GQ 0/1:45,31:76:-140.81,-22.90,-188.17:99
-chr1 1920372 rs6605080 A G 234.56 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=57.79;MQ0=0;OQ=682.29;QD=12.87;SB=-281.00 GT:AD:DP:GL:GQ 0/1:25,28:47:-85.67,-14.16,-99.05:99
-chr1 1920614 rs6605081 C T 426.14 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=58.39;MQ0=0;OQ=1403.83;QD=17.12;SB=-667.29 GT:AD:DP:GL:GQ 0/1:39,43:80:-167.77,-24.10,-135.75:99
-chr1 1920665 rs6605082 G C 238.27 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=58.49;MQ0=0;OQ=1324.95;QD=16.99;SB=-669.29 GT:AD:DP:GL:GQ 0/1:42,36:76:-158.70,-22.92,-158.25:99
-chr1 1920803 rs13303035 C T 159 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=59.45;MQ0=0;OQ=1062.14;QD=13.98;SB=-530.37 GT:AD:DP:GL:GQ 0/1:41,35:73:-131.51,-22.01,-125.50:99
-chr1 1920841 rs13303352 T C 445.18 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.82;MQ0=0;OQ=837.48;QD=11.63;SB=-306.06 GT:AD:DP:GL:GQ 0/1:38,34:70:-108.13,-21.10,-146.79:99
-chr1 1921055 rs13303031 G T 88.89 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=58.92;MQ0=0;OQ=786.34;QD=15.12;SB=-342.30 GT:AD:DP:GL:GQ 0/1:26,26:52:-97.58,-15.66,-91.48:99
-chr1 1921356 rs6685055 A G 17.33 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=2.97;MQ=59.49;MQ0=0;OQ=448.41;QD=9.96;SB=-237.28 GT:AD:DP:GL:GQ 0/1:26,19:44:-61.39,-13.26,-100.60:99
-chr1 1921389 rs6679335 T G 83.14 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=1.67;MQ=59.13;MQ0=0;OQ=685.03;QD=12.93;SB=-353.06 GT:AD:DP:GL:GQ 0/1:29,24:52:-87.45,-15.66,-100.08:99
-chr1 1922327 rs28588769 G A 183.28 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.89;MQ0=1;OQ=778.96;QD=15.58;SB=-259.18 GT:AD:DP:GL:GQ 0/1:25,25:47:-95.35,-14.17,-73.16:99
-chr1 1922868 rs2376808 G A 157.54 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.34;MQ0=0;OQ=723.69;QD=10.34;SB=-347.08 GT:AD:DP:GL:GQ 0/1:45,25:64:-94.96,-19.30,-123.08:99
-chr1 1922895 rs2376807 G A 266.63 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=58.98;MQ0=0;OQ=1217.48;QD=13.99;SB=-488.00 GT:AD:DP:GL:GQ 0/1:49,38:84:-150.33,-25.30,-168.79:99
-chr1 1923727 rs4434797 T C 63.04 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.46;MQ0=0;OQ=1150.76;QD=28.77;SB=-542.44 GT:AD:DP:GL:GQ 1/1:1,39:35:-118.68,-10.55,-0.02:99
-chr1 1923976 rs2376806 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=7;HaplotypeScore=3.79;MQ=59.30;MQ0=0;OQ=886.58;QD=14.78;SB=-242.95 GT:AD:DP:GL:GQ 0/1:31,29:60:-110.01,-18.07,-107.98:99
-chr1 1924507 rs6682175 C G 459.83 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1286.38;QD=16.93;SB=-654.00 GT:AD:DP:GL:GQ 0/1:39,37:74:-154.22,-22.30,-163.90:99
-chr1 1925440 . A C 17.47 PASS AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=54.31;MQ0=0;OQ=233.12;QD=9.71;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,12:20:-32.62,-6.03,-38.03:99
-chr1 1925994 rs13303219 G A 173.92 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.24;MQ0=0;OQ=2130.07;QD=38.04;SB=-927.23 GT:AD:DP:GL:GQ 1/1:0,56:55:-216.61,-16.57,-0.02:99
-chr1 1927245 . C A 6.32 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=50.81;MQ0=0;OQ=1490.54;QD=26.15;SB=-627.15 GT:AD:DP:GL:GQ 0/1:11,46:54:-168.60,-16.27,-27.03:99
-chr1 1929194 . G A 93.04 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=54.76;MQ0=0;OQ=934.74;QD=16.40;SB=-478.51 GT:AD:DP:GL:GQ 0/1:29,28:56:-113.63,-16.87,-101.37:99
-chr1 1929934 . G A 0.59 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=6.95;MQ=58.36;MQ0=1;OQ=902.25;QD=19.20;SB=-435.95 GT:AD:DP:GL:GQ 0/1:20,27:46:-107.37,-13.86,-69.60:99
-chr1 1931518 rs6605072 C T 176.76 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.65;MQ0=0;OQ=1960.94;QD=37.71;SB=-913.32 GT:AD:DP:GL:GQ 1/1:0,52:51:-199.70,-15.37,-0.02:99
-chr1 1931688 rs13303071 T C 1556.10 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=48.24;MQ0=0;QD=27.79;SB=-792.66 GT:AD:DP:GL:GQ 1/1:0,56:50:-159.24,-15.08,-0.05:99
-chr1 1931693 . A G 1848.16 SnpCluster AC=2;AF=1.00;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.03;MQ0=0;QD=33.60;SB=-934.96 GT:AD:DP:GL:GQ 1/1:0,55:53:-188.42,-15.97,-0.02:99
-chr1 1931694 . T A 1917.61 SnpCluster AC=2;AF=1.00;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=49.24;MQ0=0;QD=35.51;SB=-952.61 GT:AD:DP:GL:GQ 1/1:0,54:52:-195.36,-15.66,-0.02:99
-chr1 1931789 rs6656398 G A 540.24 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.77;MQ0=0;OQ=2040.90;QD=38.51;SB=-804.04 GT:AD:DP:GL:GQ 1/1:0,53:51:-207.69,-15.36,-0.01:99
-chr1 1931893 rs13303124 C A 616.35 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.54;MQ0=0;OQ=2901.26;QD=36.72;SB=-1390.14 GT:AD:DP:GL:GQ 1/1:0,79:79:-293.73,-23.79,-0.02:99
-chr1 1933151 rs6672254 C T 447.19 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1292.37;QD=33.14;SB=-431.53 GT:AD:DP:GL:GQ 1/1:0,39:34:-132.84,-10.25,-0.02:99
-chr1 1933961 rs6605073 C G 112.88 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=54.93;MQ0=0;OQ=3433.93;QD=42.39;SB=-1558.19 GT:AD:DP:GL:GQ 1/1:0,81:81:-342.39,-24.42,-0.04:99
-chr1 1936451 rs13303016 G A 86.32 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=58.88;MQ0=0;OQ=2221.58;QD=38.30;SB=-691.42 GT:AD:DP:GL:GQ 1/1:0,56:56:-225.76,-16.87,-0.02:99
-chr1 1936669 rs4648752 C T 217.65 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=2508.96;QD=37.45;SB=-1210.99 GT:AD:DP:GL:GQ 1/1:0,67:64:-254.50,-19.28,-0.02:99
-chr1 1937615 rs2376804 C A 568.58 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.26;MQ0=0;OQ=1581.66;QD=34.38;SB=-723.87 GT:AD:DP:GL:GQ 1/1:0,46:45:-161.77,-13.56,-0.02:99
-chr1 1938260 rs13303344 C A 671.62 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=1865.08;QD=33.91;SB=-728.87 GT:AD:DP:GL:GQ 1/1:0,55:54:-190.12,-16.27,-0.02:99
-chr1 1938665 rs4481796 T C 1.68 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=7.00;MQ=59.19;MQ0=0;OQ=1999.82;QD=33.90;SB=-790.00 GT:AD:DP:GL:GQ 1/1:1,58:55:-203.58,-16.56,-0.01:99
-chr1 1939404 rs3121818 G T 55.95 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.13;MQ=57.70;MQ0=0;OQ=2038.83;QD=32.88;SB=-977.56 GT:AD:DP:GL:GQ 1/1:1,61:60:-210.75,-18.07,-3.28:99
-chr1 1940481 rs28603108 G A 85.60 PASS AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=244.10;QD=30.51;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:7:-27.99,-2.11,-0.00:21.07
-chr1 1941687 rs3121819 A G 228.42 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2020.01;QD=32.58;SB=-994.40 GT:AD:DP:GL:GQ 1/1:0,62:62:-205.63,-18.69,-0.05:99
-chr1 1942465 rs28502222 T C 371.08 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=1719.40;QD=30.16;SB=-855.54 GT:AD:DP:GL:GQ 1/1:0,57:54:-175.57,-16.29,-0.05:99
-chr1 1942470 rs28407473 T C 563.92 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1937.81;QD=31.25;SB=-894.53 GT:AD:DP:GL:GQ 1/1:0,62:60:-197.41,-18.09,-0.05:99
-chr1 1942642 rs3128318 C A 368.40 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1363.24;QD=34.95;SB=-493.39 GT:AD:DP:GL:GQ 1/1:0,39:38:-139.92,-11.45,-0.01:99
-chr1 1943112 rs3128321 T C 309.66 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.60;MQ0=0;OQ=865.40;QD=28.85;SB=-224.64 GT:AD:DP:GL:GQ 1/1:0,30:27:-90.14,-8.14,-0.02:81.21
-chr1 1943436 rs28595482 G A 148.08 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.62;MQ0=0;OQ=1902.67;QD=38.83;SB=-885.18 GT:AD:DP:GL:GQ 1/1:0,49:48:-193.87,-14.46,-0.01:99
-chr1 1943672 rs4648614 C T 198.11 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.32;MQ0=0;OQ=2028.99;QD=36.89;SB=-959.37 GT:AD:DP:GL:GQ 1/1:0,55:53:-206.51,-15.97,-0.03:99
-chr1 1944296 rs3128322 G A 216.26 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=59.01;MQ0=0;OQ=2427.18;QD=36.78;SB=-1173.08 GT:AD:DP:GL:GQ 1/1:0,65:64:-246.33,-19.29,-0.03:99
-chr1 1944940 rs3128323 G A 20.33 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=59.13;MQ0=0;OQ=1516.55;QD=28.61;SB=-577.76 GT:AD:DP:GL:GQ 1/1:0,53:41:-155.26,-12.36,-0.02:99
-chr1 1945844 rs2889475 C T 626.28 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=2161.84;QD=35.44;SB=-988.03 GT:AD:DP:GL:GQ 1/1:0,61:56:-219.79,-16.87,-0.02:99
-chr1 1946222 rs2376805 G A 202.65 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.86;MQ0=0;OQ=2273.19;QD=37.27;SB=-1064.36 GT:AD:DP:GL:GQ 1/1:0,61:58:-230.92,-17.47,-0.02:99
-chr1 1946897 rs2229110 T C 11.35 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=58.29;MQ0=0;OQ=1169.00;QD=28.51;SB=-410.54 GT:AD:DP:GL:GQ 1/1:1,40:35:-120.50,-10.54,-0.02:99
-chr1 1947159 rs3820007 C T 19.86 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=59.17;MQ0=0;OQ=557.21;QD=19.90;SB=-159.09 GT:AD:DP:GL:GQ 1/1:0,24:17:-62.02,-7.79,-2.71:50.81
-chr1 1949121 rs28574670 A G 500.63 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1666.55;QD=35.46;SB=-850.35 GT:AD:DP:GL:GQ 1/1:0,47:47:-170.25,-14.16,-0.02:99
-chr1 1949838 rs28409373 C T 14.57 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.07;MQ0=0;OQ=1034.54;QD=34.48;SB=-177.68 GT:AD:DP:GL:GQ 1/1:0,30:29:-107.06,-8.75,-0.02:87.26
-chr1 1950786 rs28581504 T C 332.55 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.64;MQ0=0;OQ=1013.22;QD=32.68;SB=-423.78 GT:AD:DP:GL:GQ 1/1:0,31:30:-104.92,-9.04,-0.02:90.23
-chr1 1953035 rs13302932 A G 11.68 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.55;MQ=60.00;MQ0=0;OQ=905.11;QD=24.46;SB=-434.83 GT:AD:DP:GL:GQ 1/1:0,37:30:-94.12,-9.05,-0.03:90.20
-chr1 1953275 rs17715203 A G 438.40 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1126.75;QD=30.45;SB=-438.29 GT:AD:DP:GL:GQ 1/1:0,37:35:-116.28,-10.55,-0.02:99
-chr1 1955750 . G C 30.56 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=3;HaplotypeScore=5.70;MQ=42.68;MQ0=2;QD=0.27;SB=83.98 GT:AD:DP:GL:GQ 0/1:64,50:68:-26.83,-20.49,-269.17:63.39
-chr1 1955789 . C G 28.79 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=3.29;MQ=41.60;MQ0=2;QD=0.26;SB=62.45 GT:AD:DP:GL:GQ 0/1:60,50:64:-25.45,-19.29,-247.08:61.62
-chr1 1956476 rs3128311 A G 7.52 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=2.79;MQ=58.13;MQ0=0;OQ=1189.30;QD=33.98;SB=-560.89 GT:AD:DP:GL:GQ 1/1:0,35:34:-122.53,-10.24,-0.01:99
-chr1 1956519 rs3128312 A G 0.03 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=5;HaplotypeScore=2.16;MQ=57.85;MQ0=0;OQ=1010.92;QD=30.63;SB=-251.77 GT:AD:DP:GL:GQ 1/1:0,33:30:-104.69,-9.04,-0.02:90.25
-chr1 1956874 . G A 318.30 PASS AC=2;AF=1.00;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1884.66;QD=38.46;SB=-687.34 GT:AD:DP:GL:GQ 1/1:0,49:48:-192.06,-14.46,-0.01:99
-chr1 1957814 rs2376803 C T 3.63 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=5.41;MQ=59.46;MQ0=0;OQ=1636.24;QD=38.05;SB=-662.40 GT:AD:DP:GL:GQ 1/1:0,43:42:-167.22,-12.65,-0.01:99
-chr1 1958691 rs9442614 A G 93.39 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.19;MQ0=0;OQ=1548.19;QD=27.16;SB=-690.61 GT:AD:DP:GL:GQ 1/1:0,57:50:-158.45,-15.08,-0.05:99
-chr1 1958819 rs13303086 G A 42.72 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.38;MQ0=0;OQ=1355.91;QD=36.65;SB=-559.75 GT:AD:DP:GL:GQ 1/1:0,37:35:-139.19,-10.54,-0.01:99
-chr1 1961249 rs3121820 G C 348.51 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.98;MQ0=0;OQ=1964.71;QD=40.10;SB=-703.68 GT:AD:DP:GL:GQ 1/1:0,49:48:-200.08,-14.47,-0.02:99
-chr1 1964088 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=20;HaplotypeScore=27.35;MQ=45.54;MQ0=0;OQ=216.77;QD=4.93;SB=-12.47 GT:AD:DP:GL:GQ 0/1:28,16:30:-34.00,-9.04,-73.59:99
-chr1 1966711 rs28394674 G T 70.40 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.59;MQ=58.47;MQ0=0;OQ=2068.09;QD=33.90;SB=-496.39 GT:AD:DP:GL:GQ 1/1:0,60:58:-210.42,-17.47,-0.02:99
-chr1 1974087 rs3128319 C T 215.82 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=59.66;MQ0=0;OQ=974.85;QD=17.72;SB=-353.37 GT:AD:DP:GL:GQ 0/1:25,30:52:-116.43,-15.67,-87.00:99
-chr1 1974552 rs3121826 A G 92.93 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.67;MQ0=0;OQ=1020.08;QD=29.15;SB=-506.02 GT:AD:DP:GL:GQ 1/1:0,35:33:-105.63,-9.96,-0.04:99
-chr1 1974671 rs3121827 G T 491.82 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.58;MQ0=0;OQ=1710.64;QD=34.91;SB=-820.86 GT:AD:DP:GL:GQ 1/1:0,49:48:-174.66,-14.46,-0.02:99
-chr1 1975030 rs35020387 G A 113.28 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=1769.06;QD=36.10;SB=-889.65 GT:AD:DP:GL:GQ 1/1:0,49:46:-180.51,-13.86,-0.02:99
-chr1 1982066 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=56.20;MQ0=0;OQ=60.60;QD=2.42;SB=35.14 GT:AD:DP:GL:GQ 0/1:18,7:19:-15.09,-5.75,-56.99:93.44
-chr1 1982837 rs17777295 G T 2.34 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=4.79;MQ=57.88;MQ0=0;OQ=1411.52;QD=35.29;SB=-620.56 GT:AD:DP:GL:GQ 1/1:0,40:39:-144.75,-11.75,-0.01:99
-chr1 1987331 rs56136180 A G 202.47 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=1.52;MQ=55.14;MQ0=0;OQ=1346.89;QD=15.85;SB=-685.93 GT:AD:DP:GL:GQ 0/1:38,47:81:-162.37,-24.40,-147.70:99
-chr1 1989540 rs28479788 G A 186.47 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=58.66;MQ0=0;OQ=851.87;QD=16.38;SB=-358.89 GT:AD:DP:GL:GQ 0/1:25,27:48:-102.94,-14.47,-69.44:99
-chr1 1995600 rs2459986 T C 313.08 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.14;MQ0=0;OQ=733.38;QD=27.16;SB=-310.12 GT:AD:DP:GL:GQ 1/1:0,27:25:-76.96,-7.55,-0.03:75.14
-chr1 1996588 rs2678943 T C 52.85 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.08;MQ0=0;OQ=1052.54;QD=26.99;SB=-491.16 GT:AD:DP:GL:GQ 1/1:0,38:34:-108.87,-10.26,-0.03:99
-chr1 1997534 rs2803307 A G 10.35 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.74;MQ=59.13;MQ0=0;OQ=1580.39;QD=29.82;SB=-788.60 GT:AD:DP:GL:GQ 1/1:0,53:50:-161.67,-15.08,-0.05:99
-chr1 1999411 . C T 1.67 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=5.65;MQ=58.95;MQ0=0;OQ=1145.66;QD=18.48;SB=-378.12 GT:AD:DP:GL:GQ 0/1:25,36:58:-135.32,-17.47,-87.50:99
-chr1 2004056 rs28436686 G A 119.72 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=59.61;MQ0=0;OQ=2326.78;QD=39.44;SB=-1079.37 GT:AD:DP:GL:GQ 1/1:0,59:59:-236.28,-17.77,-0.01:99
-chr1 2014367 rs9729600 T C 414.10 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=1723.74;QD=27.36;SB=-655.55 GT:AD:DP:GL:GQ 1/1:0,63:57:-176.03,-17.20,-0.07:99
-chr1 2015467 rs61775405 G A 154 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=57.06;MQ0=0;OQ=444.57;QD=10.84;SB=-245.22 GT:AD:DP:GL:GQ 0/1:23,18:37:-58.92,-11.18,-62.94:99
-chr1 2015957 . T A 20.13 LowQual AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.77;MQ0=3;QD=0.75;SB=-6.99 GT:AD:DP:GL:GQ 0/1:17,10:5:-6.80,-1.51,-8.98:52.92
-chr1 2015991 . G T 43.95 LowQual AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=23.36;MQ0=2;QD=1.19;SB=-6.99 GT:AD:DP:GL:GQ 0/1:34,3:8:-10.09,-2.41,-13.96:76.78
-chr1 2017284 rs12123775 G A 100.24 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=256.85;QD=11.17;SB=-34.51 GT:AD:DP:GL:GQ 0/1:14,9:22:-35.60,-6.63,-46.44:99
-chr1 2019252 rs3128329 T C 18.82 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.93;MQ=58.39;MQ0=0;OQ=1634.16;QD=29.71;SB=-754.64 GT:AD:DP:GL:GQ 1/1:0,55:52:-167.05,-15.69,-0.05:99
-chr1 2019320 . T G 18.93 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=4;HaplotypeScore=7.98;MQ=58.04;MQ0=0;QD=0.34;SB=68.22 GT:AD:DP:GL:GQ 0/1:29,26:34:-15.41,-10.24,-102.90:51.71
-chr1 2019693 . T G 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=51.54;MQ0=0;OQ=164.91;QD=4.34;SB=47.17 GT:AD:DP:GL:GQ 0/1:19,19:29:-28.51,-8.74,-68.55:99
-chr1 2023899 rs7521371 A G 276.27 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.14;MQ0=0;OQ=762.93;QD=15.26;SB=-284.46 GT:AD:DP:GL:GQ 0/1:23,27:49:-94.34,-14.76,-92.20:99
-chr1 2025239 rs10910029 A G 201.72 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.60;MQ0=0;OQ=1376.71;QD=29.29;SB=-649.94 GT:AD:DP:GL:GQ 1/1:0,47:44:-141.29,-13.27,-0.04:99
-chr1 2025544 rs10910030 C T 525.81 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1279.25;QD=36.55;SB=-479.12 GT:AD:DP:GL:GQ 1/1:0,35:34:-131.53,-10.25,-0.02:99
-chr1 2025659 rs10752741 G A 653.38 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2163.55;QD=37.96;SB=-800.07 GT:AD:DP:GL:GQ 1/1:0,57:55:-219.96,-16.57,-0.02:99
-chr1 2025837 rs10752742 G T 4.06 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=6.39;MQ=58.92;MQ0=0;OQ=1340.29;QD=31.17;SB=-640.07 GT:AD:DP:GL:GQ 1/1:0,43:38:-137.63,-11.45,-0.01:99
-chr1 2026123 rs10797413 G A 219.84 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.78;MQ0=0;OQ=1381.00;QD=36.34;SB=-700.35 GT:AD:DP:GL:GQ 1/1:0,38:36:-141.70,-10.85,-0.01:99
-chr1 2026457 rs3128332 G T 494.54 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=1536.71;QD=35.74;SB=-400.25 GT:AD:DP:GL:GQ 1/1:0,43:42:-157.27,-12.65,-0.01:99
-chr1 2027806 . A G 242.28 HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=33.01;MQ0=5;QD=9.69;SB=-135.79 GT:AD:DP:GL:GQ 0/1:9,16:13:-31.43,-3.92,-15.54:99
-chr1 2027817 . A G 86.37 HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=28.31;MQ0=5;QD=5.08;SB=-66.32 GT:AD:DP:GL:GQ 0/1:7,10:8:-14.33,-2.41,-15.43:99
-chr1 2027825 rs7364595 T C 235.65 PASS AC=2;AF=1.00;AN=2;DB;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.06;MQ0=5;OQ=93.65;QD=7.80;SB=-40.95 GT:AD:DP:GL:GQ 1/1:0,12:4:-12.90,-1.21,-0.00:12.03
-chr1 2027884 . A G 40.99 LowQual AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=37.48;MQ0=2;QD=4.10;SB=-10.00 GT:AD:DP:GL:GQ 0/1:3,7:4:-8.59,-1.21,-3.37:21.64
-chr1 2027902 . C T 0.78 PASS AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=45.01;MQ0=2;OQ=55.77;QD=3.49;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,3:11:-12.18,-3.32,-23.75:88.60
-chr1 2027903 . A G 47.94 LowQual AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=45.01;MQ0=2;QD=3.00;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,4:11:-11.39,-3.31,-30.54:80.77
-chr1 2027922 rs61775410 A G 254.38 Indel AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=52.34;MQ0=2;QD=12.11;SB=-40.68 GT:AD:DP:GL:GQ 0/1:8,13:15:-33.24,-4.52,-21.40:99
-chr1 2027961 rs12745429 G A 0.31 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=3.42;MQ=51.66;MQ0=4;OQ=50.47;QD=1.58;SB=-46.03 GT:AD:DP:GL:GQ 0/1:27,5:21:-14.67,-6.34,-51.74:83.30
-chr1 2027962 rs12723086 T C 0.38 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=3.42;MQ=51.66;MQ0=4;OQ=55.89;QD=1.75;SB=-41.82 GT:AD:DP:GL:GQ 0/1:25,7:25:-16.41,-7.54,-72.40:88.73
-chr1 2027980 . A G 0.42 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=49.52;MQ0=4;OQ=96.12;QD=2.75;SB=-41.28 GT:AD:DP:GL:GQ 0/1:27,8:28:-21.34,-8.45,-80.79:99
-chr1 2027991 . A G 34.81 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.55;MQ=51.01;MQ0=3;OQ=431.23;QD=9.58;SB=-194.62 GT:AD:DP:GL:GQ 0/1:24,21:36:-57.25,-10.85,-78.85:99
-chr1 2028038 rs7349084 A G 0.09 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=50.77;MQ0=1;OQ=115.20;QD=1.99;SB=-64.54 GT:AD:DP:GL:GQ 0/1:47,10:48:-29.27,-14.47,-151.97:99
-chr1 2028049 rs12133181 A G 36.56 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=65.95;MQ=50.10;MQ0=2;QD=0.48;SB=17.41 GT:AD:DP:GL:GQ 0/1:60,12:63:-25.92,-18.99,-218.94:69.39
-chr1 2028057 rs7514664 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=1;HaplotypeScore=92.07;MQ=50.08;MQ0=4;OQ=1734.98;QD=17.53;SB=-712.36 GT:AD:DP:GL:GQ 0/1:13,84:69:-197.59,-20.81,-27.48:66.63
-chr1 2028096 rs7349113 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=144;Dels=0.00;HRun=1;HaplotypeScore=338.66;MQ=50.60;MQ0=2;OQ=249.31;QD=1.73;SB=17.40 GT:AD:DP:GL:GQ 0/1:107,21:99:-60.23,-32.01,-282.27:99
-chr1 2028116 rs61775411 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=130;Dels=0.00;HRun=1;HaplotypeScore=156.17;MQ=50.22;MQ0=2;OQ=1368.71;QD=10.53;SB=-489.55 GT:AD:DP:GL:GQ 0/1:47,78:82:-164.90,-24.74,-105.56:99
-chr1 2028135 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=77.77;MQ=49.84;MQ0=2;OQ=170.97;QD=2.04;SB=-24.42 GT:AD:DP:GL:GQ 0/1:67,11:63:-39.37,-18.98,-181.92:99
-chr1 2028136 rs12080420 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=76.98;MQ=49.85;MQ0=2;OQ=157.43;QD=1.94;SB=-74.46 GT:AD:DP:GL:GQ 0/1:62,16:61:-37.41,-18.38,-198.10:99
-chr1 2028154 rs3753241 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=33.73;MQ=52.95;MQ0=1;OQ=379.95;QD=7.31;SB=-7.96 GT:AD:DP:GL:GQ 0/1:34,16:44:-54.55,-13.27,-93.77:99
-chr1 2028522 rs3128334 G A 30.30 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=59.44;MQ0=0;OQ=1539.70;QD=37.55;SB=-534.21 GT:AD:DP:GL:GQ 1/1:0,39:39:-157.57,-11.75,-0.01:99
-chr1 2028753 rs908744 G A 89.13 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.73;MQ=58.80;MQ0=0;OQ=1922.45;QD=33.15;SB=-549.87 GT:AD:DP:GL:GQ 1/1:0,58:52:-195.86,-15.68,-0.03:99
-chr1 2029096 rs1040231 G T 78.45 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.23;MQ=58.48;MQ0=0;OQ=1527.94;QD=33.22;SB=-620.05 GT:AD:DP:GL:GQ 1/1:1,45:45:-156.40,-13.56,-0.02:99
-chr1 2029381 rs16824792 G T 92.11 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.28;MQ0=0;OQ=1106.74;QD=34.59;SB=-441.64 GT:AD:DP:GL:GQ 1/1:0,32:31:-114.27,-9.34,-0.01:93.28
-chr1 2029579 rs1878752 G A 107.74 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.58;MQ0=0;OQ=1364.65;QD=36.88;SB=-510.18 GT:AD:DP:GL:GQ 1/1:0,37:36:-140.06,-10.85,-0.01:99
-chr1 2029956 rs6666117 T C 57.04 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=967.27;QD=27.64;SB=-467.25 GT:AD:DP:GL:GQ 1/1:0,35:31:-100.34,-9.35,-0.03:93.22
-chr1 2030248 rs6683011 G A 365.12 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.46;MQ0=0;OQ=938.15;QD=36.08;SB=-369.99 GT:AD:DP:GL:GQ 1/1:0,26:24:-97.41,-7.23,-0.01:72.24
-chr1 2030623 rs4648805 G A 629.77 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=1690.17;QD=38.41;SB=-769.01 GT:AD:DP:GL:GQ 1/1:0,44:44:-172.62,-13.26,-0.02:99
-chr1 2030637 rs4648806 C T 94.85 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=56.04;MQ0=0;OQ=1691.52;QD=35.24;SB=-723.01 GT:AD:DP:GL:GQ 1/1:0,48:44:-172.75,-13.26,-0.02:99
-chr1 2030645 rs6674878 A G 54.62 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=55.66;MQ0=0;OQ=1170.82;QD=26.61;SB=-567.76 GT:AD:DP:GL:GQ 1/1:0,44:39:-120.72,-11.78,-0.06:99
-chr1 2030758 rs4648807 T C 223.06 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=59.17;MQ0=0;OQ=1628.83;QD=29.09;SB=-733.30 GT:AD:DP:GL:GQ 1/1:0,56:52:-166.52,-15.69,-0.05:99
-chr1 2030796 rs4648808 T C 215.31 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.65;MQ0=0;OQ=1868.75;QD=28.75;SB=-846.52 GT:AD:DP:GL:GQ 1/1:0,65:59:-190.51,-17.80,-0.05:99
-chr1 2031015 rs10910046 C T 236.58 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.92;MQ0=0;OQ=619.66;QD=30.98;SB=-276.86 GT:AD:DP:GL:GQ 1/1:0,20:17:-65.56,-5.12,-0.01:51.16
-chr1 2031321 rs12059660 C T 236.90 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.27;MQ0=0;OQ=1048.92;QD=38.85;SB=-437.08 GT:AD:DP:GL:GQ 1/1:0,27:27:-108.48,-8.13,-0.01:81.26
-chr1 2032403 rs11584491 A G 58.20 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=59.38;MQ0=0;OQ=893.06;QD=29.77;SB=-424.80 GT:AD:DP:GL:GQ 1/1:0,30:30:-92.92,-9.05,-0.03:90.18
-chr1 2032854 rs3128336 C G 73.49 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=59.29;MQ0=0;OQ=1394.69;QD=35.76;SB=-622.82 GT:AD:DP:GL:GQ 1/1:0,39:35:-143.08,-10.56,-0.03:99
-chr1 2033844 rs3107141 C T 92.22 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.37;MQ=59.25;MQ0=0;OQ=2275.40;QD=36.70;SB=-1025.90 GT:AD:DP:GL:GQ 1/1:0,62:59:-231.15,-17.78,-0.02:99
-chr1 2033897 rs925905 T C 149.67 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.07;MQ0=0;OQ=2152.92;QD=34.17;SB=-821.32 GT:AD:DP:GL:GQ 1/1:0,63:61:-218.90,-18.38,-0.02:99
-chr1 2033914 rs925906 A C 279.99 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.02;HRun=0;HaplotypeScore=0.48;MQ=59.34;MQ0=0;OQ=1986.91;QD=33.12;SB=-865.63 GT:AD:DP:GL:GQ 1/1:0,59:59:-202.29,-17.47,-0.02:99
-chr1 2034402 rs3107142 T C 2.70 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=862.83;QD=28.76;SB=-292.45 GT:AD:DP:GL:GQ 1/1:0,30:25:-89.88,-7.54,-0.02:75.20
-chr1 2035025 rs1467217 G A 101.18 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=58.81;MQ0=0;OQ=1215.26;QD=31.16;SB=-472.57 GT:AD:DP:GL:GQ 1/1:2,37:32:-125.13,-9.65,-0.02:96.30
-chr1 2035232 rs3107143 G C 1383.32 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=3;HaplotypeScore=1.46;MQ=53.42;MQ0=0;QD=40.69;SB=-202.29 GT:AD:DP:GL:GQ 1/1:0,34:32:-141.93,-9.65,-0.01:96.32
-chr1 2035236 rs61775448 A G 957.24 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=52.98;MQ0=0;QD=29.91;SB=-159.74 GT:AD:DP:GL:GQ 1/1:0,32:29:-99.32,-8.74,-0.01:87.24
-chr1 2035240 rs3107144 C A 1108.98 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=53.21;MQ0=0;QD=33.61;SB=-288.09 GT:AD:DP:GL:GQ 1/1:0,33:31:-114.49,-9.34,-0.01:93.28
-chr1 2035742 rs3128337 A G 495.13 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.14;MQ0=0;OQ=2084.14;QD=30.20;SB=-613.59 GT:AD:DP:GL:GQ 1/1:0,69:67:-212.07,-20.22,-0.07:99
-chr1 2036646 rs3128338 G A 633.58 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2283.85;QD=36.84;SB=-1084.46 GT:AD:DP:GL:GQ 1/1:0,61:60:-232.00,-18.09,-0.03:99
-chr1 2036798 rs3128339 G T 418.21 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.44;MQ0=0;OQ=1615.06;QD=33.65;SB=-604.54 GT:AD:DP:GL:GQ 1/1:0,48:46:-165.11,-13.86,-0.02:99
-chr1 2037356 rs3128340 C G 20.94 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=1.21;MQ=59.34;MQ0=0;OQ=2469.41;QD=39.20;SB=-820.16 GT:AD:DP:GL:GQ 1/1:0,63:62:-250.56,-18.70,-0.04:99
-chr1 2037407 rs3107145 G A 220.34 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.05;MQ0=0;OQ=2392.58;QD=37.38;SB=-1173.71 GT:AD:DP:GL:GQ 1/1:0,64:62:-242.87,-18.68,-0.02:99
-chr1 2037444 rs3107146 T C 445.88 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=1708.25;QD=30.50;SB=-576.98 GT:AD:DP:GL:GQ 1/1:0,56:53:-174.45,-15.98,-0.04:99
-chr1 2038589 rs3107147 G A 179.13 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.78;MQ0=0;OQ=3375.92;QD=40.19;SB=-1379.05 GT:AD:DP:GL:GQ 1/1:0,83:83:-336.59,-25.00,-0.02:99
-chr1 2039293 . A T 534.23 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=3;HaplotypeScore=26.93;MQ=46.16;MQ0=1;QD=5.40;SB=50.36 GT:AD:DP:GL:GQ 0/1:64,35:82:-81.41,-24.70,-228.25:99
-chr1 2039297 . C T 849.12 Indel AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=16;HaplotypeScore=37.86;MQ=45.71;MQ0=2;QD=8.01;SB=-44.28 GT:AD:DP:GL:GQ 0/1:72,34:90:-115.31,-27.11,-215.41:99
-chr1 2039368 rs3128290 G T 199.82 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=57.68;MQ0=0;OQ=1893.89;QD=32.65;SB=-943.62 GT:AD:DP:GL:GQ 1/1:0,58:54:-193.00,-16.27,-0.02:99
-chr1 2039459 rs3107148 T C 580.43 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1837.96;QD=36.04;SB=-792.00 GT:AD:DP:GL:GQ 1/1:0,51:51:-187.40,-15.36,-0.01:99
-chr1 2040055 rs3107149 A T 0.64 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=7.05;MQ=47.19;MQ0=2;OQ=1180.60;QD=26.83;SB=-338.84 GT:AD:DP:GL:GQ 1/1:1,43:33:-121.66,-9.94,-0.01:99
-chr1 2040785 rs3107150 T A 621.62 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.05;MQ0=0;OQ=2606.94;QD=34.76;SB=-964.53 GT:AD:DP:GL:GQ 1/1:0,75:72:-264.30,-21.69,-0.03:99
-chr1 2041373 rs3107151 T G 405.29 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.29;MQ0=0;OQ=1384.90;QD=30.11;SB=-485.99 GT:AD:DP:GL:GQ 1/1:0,46:41:-142.10,-12.35,-0.02:99
-chr1 2042357 rs3107152 T C 727.24 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2187.52;QD=34.72;SB=-1010.74 GT:AD:DP:GL:GQ 1/1:0,63:62:-222.36,-18.68,-0.02:99
-chr1 2042782 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.57;MQ=44.83;MQ0=0;OQ=64.06;QD=1.26;SB=2.03 GT:AD:DP:GL:GQ 0/1:44,7:48:-24.15,-14.46,-148.69:96.90
-chr1 2042814 . C G 7.67 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.26;MQ=39.19;MQ0=0;OQ=415.49;QD=7.69;SB=-85.80 GT:AD:DP:GL:GQ 0/1:38,16:51:-60.21,-15.38,-162.70:99
-chr1 2042818 . A G 548.88 SnpCluster AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=3.40;MQ=38.13;MQ0=0;QD=9.15;SB=-238.62 GT:AD:DP:GL:GQ 0/1:35,25:55:-74.74,-16.57,-136.02:99
-chr1 2042827 rs56946456 C T 974.86 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=37.16;MQ0=0;QD=15.23;SB=-13.45 GT:AD:DP:GL:GQ 0/1:33,30:59:-118.54,-17.77,-108.89:99
-chr1 2042828 rs59510407 A G 718.63 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=2.75;MQ=36.52;MQ0=0;QD=11.98;SB=-10.84 GT:AD:DP:GL:GQ 0/1:33,26:56:-92.01,-16.87,-122.40:99
-chr1 2042846 rs58866862 A G 74.49 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=35.77;MQ0=0;QD=1.16;SB=32.14 GT:AD:DP:GL:GQ 0/1:43,21:44:-23.99,-13.25,-151.62:99
-chr1 2042857 rs61526019 C T 19.11 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=37.11;MQ0=1;QD=0.30;SB=35.13 GT:AD:DP:GL:GQ 0/1:49,15:46:-19.05,-13.86,-151.53:51.90
-chr1 2042876 . G T 13.23 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=1;HaplotypeScore=9.69;MQ=38.17;MQ0=2;QD=0.18;SB=41.11 GT:AD:DP:GL:GQ 0/1:58,9:53:-20.55,-15.96,-167.03:45.86
-chr1 2042878 . T C 0.10 PASS AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=11.69;MQ=38.38;MQ0=2;OQ=1187.23;QD=16.96;SB=-479.73 GT:AD:DP:GL:GQ 0/1:15,55:50:-137.09,-15.08,-24.25:91.67
-chr1 2042931 . A G 53.02 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=15.54;MQ=37.98;MQ0=2;QD=0.69;SB=20.09 GT:AD:DP:GL:GQ 0/1:67,10:63:-27.57,-18.98,-213.37:85.85
-chr1 2042932 . C T 144.76 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=10.55;MQ=37.98;MQ0=2;QD=1.88;SB=20.04 GT:AD:DP:GL:GQ 0/1:64,13:62:-36.47,-18.71,-162.72:99
-chr1 2042933 rs61775451 A G 2056.36 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=7.24;MQ=37.41;MQ0=2;QD=27.79;SB=-304.45 GT:AD:DP:GL:GQ 1/1:0,74:61:-209.25,-18.38,-0.03:99
-chr1 2042939 rs61775452 A G 1556.23 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=44.30;MQ=35.88;MQ0=3;QD=19.21;SB=-241.65 GT:AD:DP:GL:GQ 0/1:26,55:67:-179.09,-20.18,-61.01:99
-chr1 2042967 . G A 494.62 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=42.03;MQ=31.07;MQ0=2;QD=5.75;SB=-10.00 GT:AD:DP:GL:GQ 0/1:65,21:57:-69.92,-17.17,-132.17:99
-chr1 2042968 . T C 324.84 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=41.51;MQ=30.57;MQ0=2;QD=3.82;SB=-7.00 GT:AD:DP:GL:GQ 0/1:68,17:56:-52.65,-16.88,-157.62:99
-chr1 2042975 . G A 918.15 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=43.08;MQ=30.97;MQ0=1;QD=11.92;SB=-7.00 GT:AD:DP:GL:GQ 0/1:43,34:50:-110.16,-15.06,-77.95:99
-chr1 2042993 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=37.83;MQ=26.92;MQ0=1;OQ=262.34;QD=4.60;SB=-10.00 GT:AD:DP:GL:GQ 0/1:38,19:39:-41.26,-11.74,-103.99:99
-chr1 2043003 . A G 593.68 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=39;Dels=0.03;HRun=0;HaplotypeScore=30.47;MQ=26.18;MQ0=1;QD=15.22;SB=-10.00 GT:AD:DP:GL:GQ 0/1:16,22:23:-69.27,-6.63,-8.02:13.91
-chr1 2043004 . C T 763.57 Indel;SnpCluster AC=2;AF=1.00;AN=2;DP=36;Dels=0.06;HRun=0;HaplotypeScore=22.21;MQ=26.52;MQ0=1;QD=21.21;SB=-10.00 GT:AD:DP:GL:GQ 1/1:3,31:22:-82.94,-6.33,-3.00:33.26
-chr1 2043011 . A G 85.38 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=13.94;MQ=26.97;MQ0=0;QD=3.28;SB=-10.00 GT:AD:DP:GL:GQ 0/1:19,7:20:-17.84,-6.02,-61.94:99
-chr1 2043025 . C T 0.23 PASS AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=7.88;MQ=23.26;MQ0=0;OQ=89.13;QD=11.14;SB=-10.00 GT:AD:DP:GL:GQ 1/1:3,5:3:-12.40,-0.90,-0.00:9.03
-chr1 2043058 . C T 0.16 PASS AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=7.97;MQ=18.94;MQ0=5;OQ=124.33;QD=12.43;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,6:4:-15.97,-1.21,-0.00:12.04
-chr1 2043061 . C T 0.16 PASS AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=9.08;MQ=17.30;MQ0=6;OQ=117.32;QD=9.78;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,8:4:-15.27,-1.21,-0.00:12.04
-chr1 2043097 . C T 1.40 PASS AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=4.78;MQ=17.14;MQ0=7;OQ=117.84;QD=7.86;SB=-10.00 GT:AD:DP:GL:GQ 0/1:11,4:5:-16.57,-1.51,-3.10:15.90
-chr1 2043134 rs62641630 A G 85.81 Indel AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=34.82;MQ=24.20;MQ0=2;QD=5.36;SB=-10.00 GT:AD:DP:GL:GQ 0/1:8,7:9:-14.57,-2.71,-19.58:99
-chr1 2043141 . T G 143.26 Indel AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=21.33;MQ0=2;QD=11.94;SB=-10.00 GT:AD:DP:GL:GQ 1/1:3,9:5:-17.89,-1.51,-0.00:15.05
-chr1 2043178 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=18.82;MQ=19.76;MQ0=6;OQ=129.40;QD=2.70;SB=-10.00 GT:AD:DP:GL:GQ 0/1:34,14:15:-20.75,-4.53,-30.16:99
-chr1 2043181 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=18.51;MQ=19.26;MQ0=7;OQ=70.77;QD=1.31;SB=-10.00 GT:AD:DP:GL:GQ 0/1:41,12:15:-14.88,-4.52,-41.18:99
-chr1 2043199 . T C 326.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=71.39;MQ=18.51;MQ0=9;QD=3.23;SB=5.04 GT:AD:DP:GL:GQ 0/1:73,28:19:-41.66,-5.73,-27.12:99
-chr1 2043200 . G T 127.31 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=1;HaplotypeScore=109.06;MQ=18.45;MQ0=9;QD=1.24;SB=5.04 GT:AD:DP:GL:GQ 0/1:88,15:19:-21.74,-5.72,-47.36:99
-chr1 2043203 . A G 195.43 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=1;HaplotypeScore=58.32;MQ=18.15;MQ0=10;QD=1.74;SB=5.04 GT:AD:DP:GL:GQ 0/1:95,17:20:-28.85,-6.02,-47.43:99
-chr1 2043227 rs61775455 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=139;Dels=0.00;HRun=1;HaplotypeScore=26.18;MQ=17.76;MQ0=15;OQ=512.67;QD=3.69;SB=-282.20 GT:AD:DP:GL:GQ 0/1:22,117:18:-59.98,-5.43,-16.39:99
-chr1 2043250 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=40.25;MQ=18.52;MQ0=5;OQ=52.10;QD=0.80;SB=5.03 GT:AD:DP:GL:GQ 0/1:47,18:9:-11.21,-2.71,-18.54:84.93
-chr1 2043253 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=69.74;MQ=17.96;MQ0=6;OQ=126.28;QD=2.18;SB=-31.52 GT:AD:DP:GL:GQ 0/1:37,20:7:-18.02,-2.11,-6.74:46.31
-chr1 2043286 . C T 29.35 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=15.82;MQ=16.30;MQ0=5;QD=1.47;SB=-39.54 GT:AD:DP:GL:GQ 0/1:10,10:4:-7.42,-1.21,-6.19:49.87
-chr1 2043289 . C T 29.39 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=12.80;MQ=15.14;MQ0=5;QD=1.73;SB=-36.53 GT:AD:DP:GL:GQ 0/1:8,8:3:-7.13,-0.91,-2.70:17.92
-chr1 2043333 . T G 28.03 LowQual AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=18.60;MQ0=2;QD=4.00;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:2:-6.21,-0.60,-0.00:6.01
-chr1 2043370 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=30.96;MQ=17.94;MQ0=3;OQ=266.78;QD=3.51;SB=-158.18 GT:AD:DP:GL:GQ 0/1:20,55:9:-32.59,-2.71,-3.10:3.86
-chr1 2043387 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=305.93;MQ=17.79;MQ0=4;OQ=61.76;QD=0.60;SB=5.03 GT:AD:DP:GL:GQ 0/1:70,33:9:-12.17,-2.71,-18.55:94.59
-chr1 2043399 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=80.07;MQ=17.30;MQ0=8;OQ=50.40;QD=0.46;SB=-41.37 GT:AD:DP:GL:GQ 0/1:77,30:6:-10.13,-1.81,-8.76:69.51
-chr1 2043410 . G A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=62.95;MQ=16.84;MQ0=8;OQ=120.99;QD=1.22;SB=-42.66 GT:AD:DP:GL:GQ 1/1:14,85:4:-15.63,-1.21,-0.00:12.04
-chr1 2043421 . C T 40.51 LowQual AC=1;AF=0.50;AN=2;DP=97;Dels=0.01;HRun=0;HaplotypeScore=78.29;MQ=16.56;MQ0=9;QD=0.42;SB=-7.00 GT:AD:DP:GL:GQ 0/1:75,21:3:-8.24,-0.90,-2.77:18.65
-chr1 2043428 . G A 73.75 Indel AC=2;AF=1.00;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=65.46;MQ=16.72;MQ0=6;QD=0.88;SB=-10.00 GT:AD:DP:GL:GQ 1/1:16,68:3:-10.87,-0.91,-0.00:9.02
-chr1 2043438 . G A 70.80 Indel AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=64.65;MQ=17.33;MQ0=2;QD=1.00;SB=-10.00 GT:AD:DP:GL:GQ 0/1:44,27:4:-11.57,-1.20,-3.47:22.64
-chr1 2043560 . G C 29.95 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=54.01;MQ=17.20;MQ0=4;QD=0.86;SB=-10.00 GT:AD:DP:GL:GQ 0/1:29,6:4:-7.49,-1.21,-7.00:57.86
-chr1 2043565 . C T 49.25 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=47.09;MQ=17.14;MQ0=4;QD=1.37;SB=-10.00 GT:AD:DP:GL:GQ 1/1:19,17:2:-8.33,-0.60,-0.00:6.02
-chr1 2043572 . G A 46.02 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=33.86;MQ=16.62;MQ0=6;QD=1.18;SB=-10.00 GT:AD:DP:GL:GQ 1/1:22,17:2:-8.01,-0.60,-0.00:6.02
-chr1 2043583 . C T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=32.32;MQ=16.61;MQ0=6;OQ=173.76;QD=4.57;SB=-10.00 GT:AD:DP:GL:GQ 1/1:16,22:5:-20.94,-1.51,-0.00:15.05
-chr1 2043590 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=28.82;MQ=16.31;MQ0=5;OQ=78.84;QD=2.39;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,18:4:-12.37,-1.20,-2.87:16.64
-chr1 2043797 . C T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=30.70;MQ=15.39;MQ0=12;OQ=90.55;QD=2.66;SB=-10.00 GT:AD:DP:GL:GQ 1/1:10,21:4:-15.80,-4.21,-3.24:9.74
-chr1 2043818 . T C 79 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=39.74;MQ=12.98;MQ0=29;QD=1.39;SB=-10.00 GT:AD:DP:GL:GQ 1/1:42,15:3:-11.39,-0.90,-0.00:9.03
-chr1 2043819 . G T 74.28 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=66.63;MQ=12.86;MQ0=30;QD=1.28;SB=-10.00 GT:AD:DP:GL:GQ 1/1:43,15:3:-10.92,-0.90,-0.00:9.03
-chr1 2043822 . G A 85.78 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=66.31;MQ=12.73;MQ0=32;QD=1.41;SB=-10.00 GT:AD:DP:GL:GQ 1/1:35,26:3:-12.07,-0.90,-0.00:9.03
-chr1 2043840 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=53.86;MQ=13.17;MQ0=31;OQ=75.78;QD=1.28;SB=-3.99 GT:AD:DP:GL:GQ 0/1:33,26:5:-12.37,-1.51,-6.39:48.86
-chr1 2043865 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=29.69;MQ=17.30;MQ0=6;OQ=56.87;QD=2.19;SB=-30.92 GT:AD:DP:GL:GQ 0/1:19,7:4:-10.17,-1.21,-3.00:17.97
-chr1 2043873 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=65.88;MQ=20.81;MQ0=0;OQ=78.81;QD=5.63;SB=-7.00 GT:AD:DP:GL:GQ 0/1:7,7:4:-12.37,-1.21,-3.20:19.92
-chr1 2044254 . A G 32.28 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=17;Dels=0.00;HRun=1;HaplotypeScore=4.00;MQ=14.52;MQ0=7;QD=1.90;SB=-10.00 GT:AD:DP:GL:GQ 1/1:8,9:2:-6.64,-0.60,-0.00:6.02
-chr1 2044261 . G T 34.69 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=14.97;MQ0=6;QD=2.17;SB=-10.00 GT:AD:DP:GL:GQ 1/1:8,8:2:-6.88,-0.60,-0.00:6.02
-chr1 2045053 . A G 0.05 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=1;HaplotypeScore=13.98;MQ=19.49;MQ0=2;OQ=141.20;QD=10.86;SB=-10.00 GT:AD:DP:GL:GQ 1/1:5,8:5:-17.68,-1.51,-0.00:15.04
-chr1 2045060 . G T 46.93 LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=16.54;MQ=19.21;MQ0=2;QD=3.35;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,5:5:-9.49,-1.51,-6.61:50.97
-chr1 2045064 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=17.54;MQ=18.55;MQ0=3;OQ=51.75;QD=3.45;SB=-10.00 GT:AD:DP:GL:GQ 0/1:6,9:5:-9.97,-1.51,-6.44:49.32
-chr1 2045454 . C T 0.01 FDRtranche2.00to10.00 AC=2;AF=1.00;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=19.88;MQ=20.43;MQ0=9;OQ=198.28;QD=7.34;SB=-10.00 GT:AD:DP:GL:GQ 1/1:7,20:6:-23.40,-1.81,-0.00:18.06
-chr1 2045469 . C T 0.06 PASS AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=12.29;MQ=20.17;MQ0=11;OQ=284.41;QD=8.89;SB=-48.56 GT:AD:DP:GL:GQ 1/1:9,23:8:-32.02,-2.41,-0.00:24.08
-chr1 2045505 . C T 28.68 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=18.97;MQ=24.13;MQ0=5;QD=0.54;SB=11.04 GT:AD:DP:GL:GQ 0/1:44,9:20:-12.18,-6.03,-54.06:61.51
-chr1 2045518 . C G 738.24 SnpCluster AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=15.01;MQ=25.23;MQ0=2;QD=13.67;SB=-291.20 GT:AD:DP:GL:GQ 0/1:10,44:25:-84.64,-7.53,-25.69:99
-chr1 2045519 . G A 107.30 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=14.97;MQ=25.69;MQ0=2;QD=1.95;SB=11.06 GT:AD:DP:GL:GQ 0/1:46,9:22:-20.64,-6.63,-60.44:99
-chr1 2045523 rs61775456 C T 1156.65 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=31.40;MQ=26.13;MQ0=1;QD=21.03;SB=-340.35 GT:AD:DP:GL:GQ 1/1:5,50:30:-119.26,-9.04,-0.01:90.29
-chr1 2045530 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=38.81;MQ=25.91;MQ0=2;OQ=314.66;QD=4.56;SB=14.05 GT:AD:DP:GL:GQ 0/1:30,39:21:-41.08,-6.33,-36.84:99
-chr1 2045541 rs61775457 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=85.67;MQ=25.28;MQ0=4;OQ=1042.79;QD=14.28;SB=-111.96 GT:AD:DP:GL:GQ 0/1:30,43:36:-118.41,-10.85,-17.33:64.79
-chr1 2045548 rs61775458 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=80.30;MQ=24.94;MQ0=7;OQ=952.67;QD=11.48;SB=11.05 GT:AD:DP:GL:GQ 0/1:35,48:39:-110.31,-11.76,-31.30:99
-chr1 2045552 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=3;HaplotypeScore=82.09;MQ=25.54;MQ0=10;OQ=109.35;QD=1.09;SB=14.08 GT:AD:DP:GL:GQ 0/1:83,17:53:-30.20,-15.98,-173.43:99
-chr1 2045562 rs61775459 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=44.83;MQ=25.87;MQ0=15;OQ=1085.84;QD=10.54;SB=-112.96 GT:AD:DP:GL:GQ 0/1:18,82:44:-125.15,-13.28,-24.49:99
-chr1 2045577 rs61776561 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=71.26;MQ=25.93;MQ0=17;OQ=471.38;QD=4.36;SB=-66.29 GT:AD:DP:GL:GQ 0/1:83,25:48:-64.89,-14.47,-100.62:99
-chr1 2045590 rs61776562 C G 1122.80 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=71.62;MQ=27.29;MQ0=12;QD=12.62;SB=-466.47 GT:AD:DP:GL:GQ 0/1:38,51:51:-130.94,-15.38,-82.60:99
-chr1 2045591 . G A 91.87 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=67.28;MQ=27.29;MQ0=12;QD=1.03;SB=20.08 GT:AD:DP:GL:GQ 0/1:68,21:39:-24.23,-11.76,-108.70:99
-chr1 2045595 rs61776563 C T 1533.88 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=45.58;MQ=27.30;MQ0=11;QD=17.43;SB=-260.54 GT:AD:DP:GL:GQ 1/1:9,79:49:-170.95,-14.77,-14.14:6.27
-chr1 2045606 . A G 34.51 DPFilter;HARD_TO_VALIDATE;Indel;LowQual AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=3;HaplotypeScore=43.22;MQ=27.00;MQ0=12;QD=0.42;SB=23.11 GT:AD:DP:GL:GQ 0/1:76,7:41:-19.11,-12.37,-129.33:67.35
-chr1 2045616 . T C 78.88 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=250.84;MQ=27.16;MQ0=10;QD=1.21;SB=21.87 GT:AD:DP:GL:GQ 0/1:53,10:39:-22.94,-11.77,-110.81:99
-chr1 2045620 rs61776564 G A 378.54 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=91.32;MQ=25.99;MQ0=10;QD=7.14;SB=2.03 GT:AD:DP:GL:GQ 0/1:31,22:26:-48.98,-7.84,-44.75:99
-chr1 2045631 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=20.68;MQ=23.69;MQ0=10;OQ=345.67;QD=8.43;SB=-190.29 GT:AD:DP:GL:GQ 0/1:16,25:18:-43.28,-5.43,-21.54:99
-chr1 2045638 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=35.28;MQ=23.82;MQ0=10;OQ=167.44;QD=4.29;SB=-58.06 GT:AD:DP:GL:GQ 0/1:24,15:14:-24.25,-4.23,-24.00:99
-chr1 2045652 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=49.08;MQ=21.77;MQ0=9;OQ=173.85;QD=5.43;SB=-84.31 GT:AD:DP:GL:GQ 0/1:13,19:7:-22.76,-2.11,-3.10:9.89
-chr1 2045656 . G A 40.26 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=55.88;MQ=22.32;MQ0=8;QD=1.34;SB=-10.00 GT:AD:DP:GL:GQ 0/1:16,14:3:-8.21,-0.90,-3.07:21.65
-chr1 2045667 . C T 56.78 SnpCluster AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=27.04;MQ=25.03;MQ0=2;QD=2.18;SB=-3.99 GT:AD:DP:GL:GQ 0/1:9,17:7:-11.07,-2.11,-11.53:89.62
-chr1 2045670 . C T 22.25 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=24.25;MQ=25.19;MQ0=1;QD=0.93;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,19:3:-6.41,-0.91,-3.37:24.66
-chr1 2045674 . G A 38.46 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=35.09;MQ=29.74;MQ0=1;QD=1.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,15:4:-8.34,-1.21,-6.59:53.87
-chr1 2045688 rs61776565 C T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=37.51;MQ=32.86;MQ0=0;OQ=472.91;QD=12.78;SB=-219.35 GT:AD:DP:GL:GQ 1/1:8,29:13:-50.88,-3.92,-0.00:39.13
-chr1 2045716 rs11589827 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=37.92;MQ=32.79;MQ0=0;OQ=1051.52;QD=19.47;SB=-363.54 GT:AD:DP:GL:GQ 0/1:22,32:36:-119.28,-10.85,-21.22:99
-chr1 2045975 rs56260599 A G 8.24 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=2.17;MQ=48.30;MQ0=0;OQ=1370.04;QD=29.78;SB=-550.86 GT:AD:DP:GL:GQ 1/1:0,45:39:-140.61,-11.75,-0.02:99
-chr1 2047610 rs3107154 A C 149.56 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.43;MQ0=0;OQ=1416.93;QD=32.20;SB=-509.01 GT:AD:DP:GL:GQ 1/1:0,44:41:-145.30,-12.35,-0.02:99
-chr1 2047883 rs3128291 A G 544.70 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1311.92;QD=28.52;SB=-584.18 GT:AD:DP:GL:GQ 1/1:0,46:44:-134.83,-13.28,-0.06:99
-chr1 2050384 rs3107155 T C 5.04 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=1.93;MQ=59.45;MQ0=0;OQ=1167.72;QD=27.80;SB=-528.96 GT:AD:DP:GL:GQ 1/1:0,42:38:-120.40,-11.47,-0.04:99
-chr1 2050490 rs3107156 T C 249.61 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=60.00;MQ0=0;OQ=2021.38;QD=30.17;SB=-957.45 GT:AD:DP:GL:GQ 1/1:0,67:63:-205.77,-19.00,-0.05:99
-chr1 2050592 rs10797427 C T 209.13 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=2020.11;QD=36.73;SB=-999.03 GT:AD:DP:GL:GQ 1/1:0,54:53:-205.62,-15.97,-0.03:99
-chr1 2051236 rs6603815 T C 200 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.85;MQ0=0;OQ=2560.21;QD=35.07;SB=-874.04 GT:AD:DP:GL:GQ 1/1:0,73:73:-259.63,-21.99,-0.03:99
-chr1 2051829 rs3107157 T C 631.33 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.47;MQ0=0;OQ=1661.55;QD=30.21;SB=-807.71 GT:AD:DP:GL:GQ 1/1:0,55:52:-169.78,-15.68,-0.04:99
-chr1 2053024 rs2222217 G A 330.52 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=1814.00;QD=39.43;SB=-879.02 GT:AD:DP:GL:GQ 1/1:0,46:46:-185.00,-13.86,-0.01:99
-chr1 2055199 rs3128293 A G 0.17 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=4;HaplotypeScore=2.50;MQ=57.87;MQ0=0;OQ=714.48;QD=32.48;SB=-354.81 GT:AD:DP:GL:GQ 1/1:0,22:21:-75.04,-6.33,-0.01:63.18
-chr1 2055203 rs3128294 G C 31.92 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=2.50;MQ=59.11;MQ0=0;OQ=958.73;QD=36.87;SB=-480.55 GT:AD:DP:GL:GQ 1/1:0,26:24:-99.47,-7.24,-0.01:72.23
-chr1 2056850 rs55958603 C T 1.19 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=3.45;MQ=57.77;MQ0=0;OQ=633.04;QD=15.07;SB=-129.09 GT:AD:DP:GL:GQ 0/1:21,21:38:-78.03,-11.45,-68.95:99
-chr1 2058340 rs3128295 C T 135.04 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=57.98;MQ0=0;OQ=1478.85;QD=33.61;SB=-754.65 GT:AD:DP:GL:GQ 1/1:0,43:39:-151.49,-11.75,-0.02:99
-chr1 2058766 rs3128296 G T 62.70 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=59.52;MQ0=0;OQ=1387.47;QD=35.58;SB=-366.86 GT:AD:DP:GL:GQ 1/1:0,39:38:-142.34,-11.45,-0.01:99
-chr1 2060181 rs411021 T C 39.97 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.62;MQ0=0;OQ=1893.37;QD=29.58;SB=-877.01 GT:AD:DP:GL:GQ 1/1:0,64:60:-192.98,-18.10,-0.06:99
-chr1 2061200 rs424079 C A 282.41 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.70;MQ0=0;OQ=2061.38;QD=33.25;SB=-816.15 GT:AD:DP:GL:GQ 1/1:2,60:59:-209.75,-17.78,-0.03:99
-chr1 2061416 rs436045 A G 341.67 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1852.88;QD=31.95;SB=-463.52 GT:AD:DP:GL:GQ 1/1:0,58:55:-188.90,-16.57,-0.02:99
-chr1 2061625 rs364677 A G 92.05 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=57.88;MQ0=0;OQ=1754.29;QD=33.10;SB=-829.10 GT:AD:DP:GL:GQ 1/1:0,53:50:-179.03,-15.06,-0.02:99
-chr1 2062860 rs2945573 A G 10.32 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=3.09;MQ=53.50;MQ0=0;OQ=1269.78;QD=34.32;SB=-473.51 GT:AD:DP:GL:GQ 1/1:0,37:36:-130.57,-10.84,-0.01:99
-chr1 2063413 rs643076 A G 32.55 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=23.27;MQ0=4;QD=3.26;SB=-41.68 GT:AD:DP:GL:GQ 1/1:0,9:2:-6.66,-0.60,-0.00:6.02
-chr1 2063477 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=1;HaplotypeScore=9.72;MQ=34.90;MQ0=16;OQ=82.45;QD=1.04;SB=5.04 GT:AD:DP:GL:GQ 0/1:72,7:47:-25.69,-14.16,-141.31:99
-chr1 2063706 rs56038539 T C 3.16 PASS AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=41.37;MQ0=1;OQ=139.38;QD=19.91;SB=-78.92 GT:AD:DP:GL:GQ 1/1:0,7:5:-17.50,-1.51,-0.00:15.04
-chr1 2068664 . C T 1.14 PASS AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=1;HaplotypeScore=4.59;MQ=58.77;MQ0=0;OQ=1604.59;QD=18.44;SB=-789.85 GT:AD:DP:GL:GQ 0/1:40,47:84:-189.05,-25.30,-139.35:99
-chr1 2076421 rs2459983 A G 9.14 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=6.88;MQ=57.31;MQ0=0;OQ=556.13;QD=9.43;SB=-262.92 GT:AD:DP:GL:GQ 0/1:36,23:54:-75.17,-16.28,-123.64:99
-chr1 2080370 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=7.10;MQ=51.87;MQ0=1;OQ=83.25;QD=1.63;SB=68.25 GT:AD:DP:GL:GQ 0/1:34,17:35:-22.19,-10.58,-111.66:99
-chr1 2084392 rs12132341 G A 174.47 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=59.31;MQ0=0;OQ=863.52;QD=15.99;SB=-268.13 GT:AD:DP:GL:GQ 0/1:26,28:52:-105.30,-15.67,-88.61:99
-chr1 2089742 rs12137653 G A 181.23 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=58.90;MQ0=0;OQ=1123.18;QD=19.04;SB=-544.82 GT:AD:DP:GL:GQ 0/1:23,36:56:-132.48,-16.88,-70.24:99
-chr1 2096700 rs12135175 T C 69.07 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=484.58;QD=34.61;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,14:14:-52.05,-4.22,-0.00:42.13
-chr1 2096756 rs12135178 T C 1.47 PASS AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=63.69;QD=21.23;SB=-45.69 GT:AD:DP:GL:GQ 1/1:0,3:3:-9.86,-0.91,-0.00:9.02
-chr1 2097150 . G T 29.88 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=2;HaplotypeScore=4.60;MQ=59.01;MQ0=0;QD=1.57;SB=20.09 GT:AD:DP:GL:GQ 0/1:12,7:13:-10.19,-3.92,-36.97:62.71
-chr1 2103132 . T G 33.73 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=2;HaplotypeScore=13.23;MQ=58.26;MQ0=0;QD=0.50;SB=77.26 GT:AD:DP:GL:GQ 0/1:40,27:45:-20.22,-13.56,-132.60:66.56
-chr1 2103519 . T G 34.88 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=24.16;MQ=56.69;MQ0=0;QD=0.66;SB=65.20 GT:AD:DP:GL:GQ 0/1:32,21:34:-17.01,-10.24,-99.26:67.71
-chr1 2110321 rs12145923 A C 0.48 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=12.44;MQ=52.00;MQ0=0;OQ=558.55;QD=9.01;SB=-276.83 GT:AD:DP:GL:GQ 0/1:36,25:56:-76.01,-16.87,-110.27:99
-chr1 2119788 . T C 18.51 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=3;HaplotypeScore=2.86;MQ=58.76;MQ0=0;QD=0.33;SB=56.21 GT:AD:DP:GL:GQ 0/1:41,15:42:-17.79,-12.66,-139.27:51.28
-chr1 2129255 . C G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=12.54;MQ=53.09;MQ0=0;OQ=134.48;QD=3.96;SB=-44.78 GT:AD:DP:GL:GQ 0/1:28,6:25:-24.27,-7.54,-83.09:99
-chr1 2130727 . C A 3.24 PASS AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=883.89;QD=21.05;SB=-232.51 GT:AD:DP:GL:GQ 0/1:13,29:42:-104.32,-12.65,-47.37:99
-chr1 2133967 rs2503715 A G 158.02 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=295.10;QD=12.30;SB=-168.37 GT:AD:DP:GL:GQ 0/1:13,11:24:-40.02,-7.23,-52.87:99
-chr1 2146787 . G T 26.55 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=20;HaplotypeScore=12.86;MQ=49.19;MQ0=1;QD=0.48;SB=62.22 GT:AD:DP:GL:GQ 0/1:43,12:38:-17.39,-11.45,-117.88:59.38
-chr1 2157661 . T G 18.80 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=2;HaplotypeScore=22.82;MQ=58.47;MQ0=0;QD=0.32;SB=110.33 GT:AD:DP:GL:GQ 0/1:45,13:50:-20.22,-15.06,-154.85:51.58
-chr1 2158219 . G A 102.84 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=58.11;MQ0=0;OQ=732.58;QD=15.59;SB=-362.51 GT:AD:DP:GL:GQ 0/1:23,24:45:-90.10,-13.56,-76.34:99
-chr1 2159397 . G A 168.87 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=557.34;QD=13.59;SB=-169.24 GT:AD:DP:GL:GQ 0/1:23,18:39:-70.77,-11.75,-72.68:99
-chr1 2162698 rs55996607 T A 417.68 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=618.41;QD=12.13;SB=-230.72 GT:AD:DP:GL:GQ 0/1:28,23:50:-80.19,-15.06,-104.77:99
-chr1 2164572 rs263525 T C 240.22 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=58.19;MQ0=0;OQ=1470.94;QD=30.02;SB=-709.84 GT:AD:DP:GL:GQ 1/1:0,49:48:-150.72,-14.48,-0.04:99
-chr1 2166877 rs4648817 C T 227.81 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=42.45;MQ0=0;OQ=888.81;QD=15.06;SB=-258.26 GT:AD:DP:GL:GQ 0/1:29,28:53:-108.14,-15.97,-85.30:99
-chr1 2167087 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=78;Dels=0.03;HRun=20;HaplotypeScore=33.19;MQ=45.08;MQ0=3;OQ=60.74;QD=0.78;SB=86.28 GT:AD:DP:GL:GQ 0/1:57,18:48:-23.51,-14.16,-146.86:93.57
-chr1 2172859 rs55827021 G A 215.80 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=60.00;MQ0=0;OQ=711.82;QD=15.47;SB=-343.87 GT:AD:DP:GL:GQ 0/1:21,25:42:-87.13,-12.66,-66.29:99
-chr1 2181828 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=5;HaplotypeScore=57.83;MQ=51.68;MQ0=2;OQ=160.28;QD=2.32;SB=74.25 GT:AD:DP:GL:GQ 0/1:46,21:51:-34.38,-15.07,-143.28:99
-chr1 2181834 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=20;HaplotypeScore=10.75;MQ=49.92;MQ0=3;OQ=651.07;QD=8.57;SB=86.24 GT:AD:DP:GL:GQ 0/1:47,28:67:-88.59,-20.20,-142.58:99
-chr1 2190201 rs4648625 G T 81.26 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.89;MQ=59.03;MQ0=0;OQ=1500.00;QD=34.88;SB=-738.07 GT:AD:DP:GL:GQ 1/1:0,43:43:-153.60,-12.95,-0.02:99
-chr1 2194650 rs4648819 G A 133.33 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=743.48;QD=16.52;SB=-314.80 GT:AD:DP:GL:GQ 0/1:22,23:44:-90.89,-13.26,-76.95:99
-chr1 2200056 rs55778641 A C 21.64 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.74;MQ=60.00;MQ0=0;OQ=608.53;QD=12.95;SB=-87.63 GT:AD:DP:GL:GQ 0/1:21,26:44:-77.39,-13.25,-77.32:99
-chr1 2201955 . C T 11.73 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=16.61;MQ=30.48;MQ0=8;QD=0.49;SB=-3.98 GT:AD:DP:GL:GQ 0/1:18,6:8:-6.84,-2.41,-19.02:44.27
-chr1 2202003 . A G 11.74 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=1;HaplotypeScore=7.13;MQ=18.21;MQ0=12;QD=0.30;SB=-3.98 GT:AD:DP:GL:GQ 0/1:31,8:9:-7.14,-2.71,-26.71:44.28
-chr1 2202019 . C A 24.05 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=18.13;MQ0=6;QD=1.05;SB=-6.99 GT:AD:DP:GL:GQ 0/1:15,8:6:-7.50,-1.81,-11.06:56.87
-chr1 2202047 . A G 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=10.59;MQ=18.96;MQ0=8;OQ=148.17;QD=5.93;SB=-3.98 GT:AD:DP:GL:GQ 0/1:17,8:9:-20.81,-2.71,-12.59:98.81
-chr1 2202060 . C T 1.87 PASS AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=16.70;MQ0=15;OQ=178.09;QD=5.94;SB=-4.00 GT:AD:DP:GL:GQ 0/1:17,12:9:-23.81,-2.71,-8.44:57.22
-chr1 2202081 . C T 18.49 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=39;Dels=0.03;HRun=0;HaplotypeScore=43.99;MQ=16.84;MQ0=21;QD=0.47;SB=-6.99 GT:AD:DP:GL:GQ 0/1:31,7:8:-7.54,-2.41,-18.75:51.27
-chr1 2202085 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=40;Dels=0.03;HRun=0;HaplotypeScore=35.15;MQ=14.59;MQ0=24;OQ=74.01;QD=1.85;SB=-48.55 GT:AD:DP:GL:GQ 0/1:30,9:6:-12.50,-1.81,-8.79:69.79
-chr1 2202103 . C T 23.47 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=12.67;MQ=15.94;MQ0=20;QD=0.57;SB=-6.99 GT:AD:DP:GL:GQ 0/1:31,9:7:-7.74,-2.11,-15.15:56.28
-chr1 2202167 . C A 13.22 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=11.12;MQ=8.91;MQ0=36;QD=0.22;SB=-10.00 GT:AD:DP:GL:GQ 0/1:51,9:4:-5.79,-1.21,-5.41:41.98
-chr1 2202296 . C A 18.94 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=1;HaplotypeScore=9.91;MQ=10.32;MQ0=37;QD=0.39;SB=-10.00 GT:AD:DP:GL:GQ 0/1:36,13:6:-6.98,-1.81,-13.53:51.72
-chr1 2202348 . A G 10.17 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=23.55;MQ=13.35;MQ0=40;QD=0.15;SB=-25.65 GT:AD:DP:GL:GQ 0/1:57,8:7:-6.37,-2.11,-18.82:42.57
-chr1 2202364 . C T 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=20.33;MQ0=13;OQ=62.56;QD=1.49;SB=-32.09 GT:AD:DP:GL:GQ 0/1:34,6:7:-15.23,-5.69,-14.13:84.42
-chr1 2202391 . A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=5.05;MQ=22.23;MQ0=9;OQ=175.98;QD=4.09;SB=-54.84 GT:AD:DP:GL:GQ 0/1:26,17:18:-26.30,-5.42,-41.13:99
-chr1 2202434 . A G 21.78 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=15.47;MQ=13.87;MQ0=17;QD=0.81;SB=-34.93 GT:AD:DP:GL:GQ 0/1:19,8:5:-6.97,-1.51,-11.89:54.59
-chr1 2202602 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=59.56;MQ=10.62;MQ0=43;OQ=145.43;QD=2.24;SB=-6.99 GT:AD:DP:GL:GQ 0/1:30,35:7:-19.94,-2.11,-6.77:46.57
-chr1 2202632 . G T 82.62 HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=11.21;MQ0=49;QD=1.18;SB=-10.00 GT:AD:DP:GL:GQ 0/1:61,9:9:-14.26,-2.71,-18.59:99
-chr1 2202667 . A C 16.33 DPFilter;HARD_TO_VALIDATE;Indel;LowQual AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=25.34;MQ=10.07;MQ0=49;QD=0.22;SB=8.05 GT:AD:DP:GL:GQ 0/1:64,9:8:-7.32,-2.41,-22.67:49.06
-chr1 2202682 . G A 36.23 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=78.01;MQ=9.70;MQ0=44;QD=0.48;SB=-3.98 GT:AD:DP:GL:GQ 0/1:63,12:4:-8.11,-1.20,-7.39:61.88
-chr1 2202686 . G A 35.24 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=79.87;MQ=9.88;MQ0=42;QD=0.50;SB=-3.99 GT:AD:DP:GL:GQ 0/1:59,12:4:-8.01,-1.21,-5.99:47.86
-chr1 2202707 . C T 38.48 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=10.09;MQ=9.21;MQ0=26;QD=0.82;SB=-10.00 GT:AD:DP:GL:GQ 0/1:44,3:4:-8.34,-1.21,-5.59:43.85
-chr1 2202728 . T C 26.83 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=9.84;MQ=8.94;MQ0=16;QD=1.07;SB=-10.00 GT:AD:DP:GL:GQ 1/1:12,12:2:-6.09,-0.60,-0.00:6.01
-chr1 2202823 . G A 38.25 LowQual AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=5.28;MQ=19.51;MQ0=2;QD=3.82;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,8:3:-8.01,-0.90,-3.57:26.65
-chr1 2203054 . A C 12.92 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=9.60;MQ0=26;QD=0.31;SB=-27.98 GT:AD:DP:GL:GQ 0/1:36,6:4:-5.76,-1.21,-6.84:45.53
-chr1 2203334 . C T 27.36 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=7.10;MQ=12.34;MQ0=21;QD=0.94;SB=-37.65 GT:AD:DP:GL:GQ 0/1:21,8:4:-7.23,-1.21,-5.77:45.59
-chr1 2203377 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=20.17;MQ=13.03;MQ0=22;OQ=140.31;QD=3.79;SB=-42.53 GT:AD:DP:GL:GQ 0/1:23,14:7:-19.42,-2.11,-7.14:50.30
-chr1 2203636 . C T 0.06 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=18.31;MQ0=12;OQ=75.25;QD=2.03;SB=-3.99 GT:AD:DP:GL:GQ 0/1:28,9:19:-16.53,-5.73,-47.88:99
-chr1 2203679 rs2643914 C T 0.11 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=6.14;MQ=18.30;MQ0=12;OQ=93.96;QD=1.92;SB=-63.48 GT:AD:DP:GL:GQ 0/1:36,12:24:-19.91,-7.23,-64.90:99
-chr1 2203718 rs2645079 T C 32.47 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.98;MQ0=8;OQ=123.75;QD=3.75;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,20:15:-20.18,-4.52,-29.86:99
-chr1 2203765 rs12117574 T C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=5.02;MQ=32.99;MQ0=11;OQ=133.28;QD=2.18;SB=-88.55 GT:AD:DP:GL:GQ 0/1:50,11:38:-28.07,-11.46,-111.19:99
-chr1 2204009 . C G 47.74 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=47.05;MQ0=0;OQ=366.61;QD=8.94;SB=-120.51 GT:AD:DP:GL:GQ 0/1:27,14:39:-51.71,-11.77,-108.96:99
-chr1 2206228 rs4648821 T G 261.20 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.19;MQ0=0;OQ=657.01;QD=12.63;SB=-349.05 GT:AD:DP:GL:GQ 0/1:29,23:51:-84.34,-15.36,-102.93:99
-chr1 2206251 rs6689315 A G 495.75 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=794.59;QD=13.94;SB=-403.30 GT:AD:DP:GL:GQ 0/1:29,28:56:-99.61,-16.87,-113.15:99
-chr1 2206925 rs61759158 G A 51.82 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=54.01;MQ0=0;OQ=371.96;QD=12.40;SB=-7.00 GT:AD:DP:GL:GQ 0/1:17,13:28:-48.92,-8.45,-48.51:99
-chr1 2207673 . G C 46.34 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=3;HaplotypeScore=11.90;MQ=55.68;MQ0=0;QD=1.03;SB=71.27 GT:AD:DP:GL:GQ 0/1:33,12:36:-18.77,-10.85,-141.59:79.18
-chr1 2207894 . C T 62.11 PASS AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=60.00;MQ0=0;OQ=1408.04;QD=16.96;SB=-562.41 GT:AD:DP:GL:GQ 0/1:38,45:79:-167.91,-23.82,-117.96:99
-chr1 2208688 rs10910049 G T 213.58 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=47.61;MQ0=2;OQ=399.96;QD=8.89;SB=-196.49 GT:AD:DP:GL:GQ 0/1:28,17:40:-55.33,-12.05,-79.33:99
-chr1 2208825 rs6691983 C T 81.79 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.59;MQ=52.03;MQ0=1;OQ=657.40;QD=17.30;SB=-233.73 GT:AD:DP:GL:GQ 0/1:18,20:35:-79.57,-10.55,-49.20:99
-chr1 2208828 rs6682474 G A 54.35 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=53.40;MQ0=1;OQ=696.36;QD=18.33;SB=-278.18 GT:AD:DP:GL:GQ 0/1:17,21:37:-84.07,-11.15,-57.35:99
-chr1 2209299 rs56051051 T G 55.14 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=58.49;MQ0=0;OQ=442.31;QD=9.41;SB=-244.75 GT:AD:DP:GL:GQ 0/1:22,25:42:-60.17,-12.66,-79.16:99
-chr1 2209740 rs17372827 A C 232.76 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=877.78;QD=13.10;SB=-279.93 GT:AD:DP:GL:GQ 0/1:36,31:66:-110.94,-19.88,-129.70:99
-chr1 2209930 rs4648823 T A 295.53 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=59.11;MQ0=0;OQ=697.00;QD=13.40;SB=-278.32 GT:AD:DP:GL:GQ 0/1:27,24:50:-88.05,-15.06,-97.62:99
-chr1 2210285 rs2643884 T C 4 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=5.32;MQ=58.60;MQ0=0;OQ=1465.33;QD=29.31;SB=-698.59 GT:AD:DP:GL:GQ 1/1:0,50:47:-150.17,-14.18,-0.05:99
-chr1 2210377 rs1039065 A C 393.22 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.65;MQ0=0;OQ=1107.46;QD=29.14;SB=-383.86 GT:AD:DP:GL:GQ 1/1:0,38:36:-114.37,-10.85,-0.04:99
-chr1 2210509 rs2017143 C T 306.58 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.15;MQ0=0;OQ=1280.02;QD=38.79;SB=-395.53 GT:AD:DP:GL:GQ 1/1:0,33:33:-131.60,-9.94,-0.01:99
-chr1 2211082 rs2643885 A C 289.56 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.73;MQ0=0;OQ=1017.95;QD=35.10;SB=-113.02 GT:AD:DP:GL:GQ 1/1:0,29:29:-105.39,-8.74,-0.01:87.26
-chr1 2211133 rs2843166 C A 247.56 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.20;MQ0=0;OQ=767.67;QD=31.99;SB=-111.83 GT:AD:DP:GL:GQ 1/1:0,24:23:-80.36,-6.93,-0.01:69.19
-chr1 2211394 rs903924 A G 577.26 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1710.61;QD=33.54;SB=-819.09 GT:AD:DP:GL:GQ 1/1:0,51:49:-174.66,-14.76,-0.02:99
-chr1 2211494 rs903923 G C 2.57 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=5.22;MQ=56.20;MQ0=0;OQ=1828.69;QD=36.57;SB=-846.47 GT:AD:DP:GL:GQ 1/1:0,50:45:-186.48,-13.57,-0.02:99
-chr1 2211496 rs903922 A T 57.75 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.95;MQ=56.42;MQ0=0;OQ=1691.54;QD=31.92;SB=-801.63 GT:AD:DP:GL:GQ 1/1:0,53:49:-172.77,-14.77,-0.03:99
-chr1 2211936 rs903921 G A 86.49 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=57.20;MQ0=0;OQ=1373.97;QD=32.71;SB=-609.72 GT:AD:DP:GL:GQ 1/1:1,40:39:-143.60,-11.76,-2.62:91.42
-chr1 2212420 rs903920 A G 98.07 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.39;MQ0=0;OQ=1274.47;QD=33.54;SB=-555.35 GT:AD:DP:GL:GQ 1/1:0,38:37:-131.05,-11.15,-0.02:99
-chr1 2212443 rs903919 T C 439.40 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=897.63;QD=27.20;SB=-373.47 GT:AD:DP:GL:GQ 1/1:0,33:30:-93.38,-9.05,-0.03:90.19
-chr1 2212983 rs2172900 T C 377 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1306.72;QD=32.67;SB=-161.75 GT:AD:DP:GL:GQ 1/1:0,40:40:-134.28,-12.05,-0.02:99
-chr1 2213118 rs2132303 T C 18.89 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.55;MQ0=0;OQ=1347.55;QD=32.08;SB=-116.87 GT:AD:DP:GL:GQ 1/1:0,41:39:-138.35,-11.75,-0.01:99
-chr1 2214142 rs903617 A G 32.99 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.29;MQ=58.97;MQ0=0;OQ=1261.61;QD=28.04;SB=-567.89 GT:AD:DP:GL:GQ 1/1:0,45:41:-129.80,-12.38,-0.05:99
-chr1 2214469 rs2643886 T G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=5;HaplotypeScore=4.66;MQ=57.70;MQ0=0;OQ=1258.31;QD=26.77;SB=-451.03 GT:AD:DP:GL:GQ 1/1:1,46:38:-129.44,-11.45,-0.02:99
-chr1 2214505 rs2645091 A G 160.46 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.58;MQ0=0;OQ=1430.84;QD=31.11;SB=-424.25 GT:AD:DP:GL:GQ 1/1:0,46:44:-146.70,-13.26,-0.03:99
-chr1 2214736 rs10910050 A C 929.01 Indel AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=9;HaplotypeScore=4.06;MQ=59.20;MQ0=0;QD=27.32;SB=-435.82 GT:AD:DP:GL:GQ 1/1:1,33:28:-96.50,-8.43,-0.01:84.23
-chr1 2215144 rs1532385 G A 183.41 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=59.56;MQ0=0;OQ=1969.69;QD=37.88;SB=-987.83 GT:AD:DP:GL:GQ 1/1:1,51:50:-200.57,-15.06,-0.01:99
-chr1 2216193 rs903918 T A 121.47 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=60.00;MQ0=0;OQ=1515.17;QD=34.44;SB=-696.39 GT:AD:DP:GL:GQ 1/1:0,44:41:-155.11,-12.35,-0.01:99
-chr1 2216414 . T G 45.79 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=2;HaplotypeScore=10.58;MQ=58.61;MQ0=0;QD=0.68;SB=86.26 GT:AD:DP:GL:GQ 0/1:37,30:42:-20.52,-12.66,-118.85:78.63
-chr1 2217282 rs2843163 C T 190.11 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=4.18;MQ=57.17;MQ0=0;OQ=844.33;QD=16.89;SB=-357.35 GT:AD:DP:GL:GQ 0/1:22,28:45:-101.28,-13.56,-64.72:99
-chr1 2217535 rs56117572 A C 228.37 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=59.71;MQ0=0;OQ=819.93;QD=12.61;SB=-293.99 GT:AD:DP:GL:GQ 0/1:33,32:61:-103.65,-18.38,-105.35:99
-chr1 2219307 rs2643888 A G 69.82 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=2.64;MQ=59.39;MQ0=0;OQ=1301.49;QD=34.25;SB=-624.24 GT:AD:DP:GL:GQ 1/1:0,38:38:-133.76,-11.45,-0.02:99
-chr1 2219413 rs2843161 C T 101.78 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=1668.32;QD=37.92;SB=-845.15 GT:AD:DP:GL:GQ 1/1:0,44:43:-170.43,-12.96,-0.01:99
-chr1 2219777 . C T 48.76 PASS AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.44;MQ=59.45;MQ0=0;OQ=599.56;QD=14.28;SB=-283.32 GT:AD:DP:GL:GQ 0/1:19,21:37:-74.40,-11.16,-63.66:99
-chr1 2220425 rs56341331 C G 57.44 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.43;MQ=59.52;MQ0=0;OQ=468.59;QD=12.02;SB=-132.55 GT:AD:DP:GL:GQ 0/1:23,16:35:-60.70,-10.56,-79.04:99
-chr1 2221427 rs1809823 G T 87.22 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.54;MQ0=0;OQ=673.61;QD=16.43;SB=-228.53 GT:AD:DP:GL:GQ 0/1:18,23:40:-82.70,-12.05,-57.34:99
-chr1 2221826 rs55710545 G C 290.21 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.48;MQ0=0;OQ=503.65;QD=11.45;SB=-276.95 GT:AD:DP:GL:GQ 0/1:26,18:42:-66.31,-12.67,-107.95:99
-chr1 2223172 rs903618 A G 139.54 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1447.93;QD=30.17;SB=-664.81 GT:AD:DP:GL:GQ 1/1:0,48:47:-148.43,-14.18,-0.05:99
-chr1 2224111 rs1496555 A G 103.05 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=57.88;MQ0=0;OQ=1360.32;QD=32.39;SB=-504.48 GT:AD:DP:GL:GQ 1/1:0,42:39:-139.63,-11.75,-0.01:99
-chr1 2224763 rs2256178 C T 433.01 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=665.60;QD=16.23;SB=-342.52 GT:AD:DP:GL:GQ 0/1:20,21:41:-82.21,-12.37,-61.19:99
-chr1 2225516 rs11577387 G A 98.98 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=58.87;MQ0=0;OQ=626.11;QD=16.92;SB=-209.93 GT:AD:DP:GL:GQ 0/1:17,20:32:-75.54,-9.65,-40.72:99
-chr1 2226199 rs4648825 T C 63.68 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=3.65;MQ=59.17;MQ0=0;OQ=999.95;QD=17.24;SB=-492.13 GT:AD:DP:GL:GQ 0/1:22,36:55:-119.85,-16.57,-85.50:99
-chr1 2226557 rs2643904 A G 112.25 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=59.50;MQ0=0;OQ=1489.85;QD=32.39;SB=-771.11 GT:AD:DP:GL:GQ 1/1:0,46:44:-152.59,-13.26,-0.02:99
-chr1 2226618 rs2843158 G C 77.30 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=1399.75;QD=34.99;SB=-297.26 GT:AD:DP:GL:GQ 1/1:0,40:37:-143.60,-11.18,-0.04:99
-chr1 2227108 rs11580302 A G 15.25 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.17;MQ=58.99;MQ0=0;OQ=1313.96;QD=28.56;SB=-483.14 GT:AD:DP:GL:GQ 1/1:0,46:42:-135.02,-12.67,-0.04:99
-chr1 2228420 . T C 34.45 PASS AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.20;MQ0=0;OQ=345.13;QD=11.90;SB=-158.70 GT:AD:DP:GL:GQ 0/1:16,13:29:-46.53,-8.74,-63.45:99
-chr1 2229866 rs2173049 T C 234.22 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.01;MQ0=0;OQ=1791.17;QD=29.36;SB=-845.65 GT:AD:DP:GL:GQ 1/1:0,60:57:-182.75,-17.19,-0.05:99
-chr1 2230243 rs2843157 C T 3.13 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=5.43;MQ=58.16;MQ0=0;OQ=293.03;QD=7.71;SB=-52.03 GT:AD:DP:GL:GQ 0/1:21,15:25:-40.13,-7.54,-43.56:99
-chr1 2233378 rs2843156 C T 2.48 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.97;MQ0=0;OQ=1676.83;QD=39.00;SB=-476.64 GT:AD:DP:GL:GQ 1/1:0,43:42:-171.28,-12.65,-0.01:99
-chr1 2234765 rs2843154 C T 245.28 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.42;MQ0=0;OQ=364.59;QD=11.39;SB=-94.60 GT:AD:DP:GL:GQ 0/1:19,13:29:-48.48,-8.74,-59.24:99
-chr1 2235081 rs2843153 C T 158.69 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.00;MQ0=0;OQ=1550.87;QD=36.93;SB=-657.38 GT:AD:DP:GL:GQ 1/1:0,42:40:-158.69,-12.05,-0.01:99
-chr1 2235299 rs2643902 T C 83.90 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=58.80;MQ0=0;OQ=1694.87;QD=26.90;SB=-805.69 GT:AD:DP:GL:GQ 1/1:0,63:54:-173.12,-16.28,-0.05:99
-chr1 2235430 rs2843152 C G 36.95 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=1353.71;QD=36.59;SB=-455.86 GT:AD:DP:GL:GQ 1/1:0,37:35:-138.99,-10.57,-0.03:99
-chr1 2235493 rs2843151 C T 341.97 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=1519.57;QD=37.99;SB=-552.74 GT:AD:DP:GL:GQ 1/1:0,40:39:-155.55,-11.75,-0.01:99
-chr1 2237259 rs2643903 T C 68.22 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.78;MQ0=0;OQ=1099.17;QD=28.93;SB=-371.38 GT:AD:DP:GL:GQ 1/1:0,38:35:-113.53,-10.55,-0.03:99
-chr1 2237347 rs2645076 A G 8.05 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=892.74;QD=27.90;SB=-347.40 GT:AD:DP:GL:GQ 1/1:0,32:29:-92.89,-8.75,-0.03:87.17
-chr1 2237604 rs2843150 G C 105.40 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.39;MQ0=0;OQ=929.83;QD=32.06;SB=-483.10 GT:AD:DP:GL:GQ 1/1:0,29:23:-96.58,-6.93,-0.01:69.23
-chr1 2237845 rs2643905 T C 349.37 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1229.58;QD=32.36;SB=-467.52 GT:AD:DP:GL:GQ 1/1:0,38:37:-126.56,-11.15,-0.02:99
-chr1 2238243 rs60565777 G T 1452.57 Indel AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.48;MQ0=0;QD=34.58;SB=-671.66 GT:AD:DP:GL:GQ 1/1:0,42:42:-148.86,-12.66,-0.02:99
-chr1 2238484 rs12035836 A C 189.10 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.53;MQ0=0;OQ=471.85;QD=11.80;SB=-205.81 GT:AD:DP:GL:GQ 0/1:20,20:36:-61.31,-10.85,-64.85:99
-chr1 2239096 rs2645077 G A 27.69 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=1.28;MQ=59.32;MQ0=0;OQ=1136.46;QD=33.43;SB=-382.99 GT:AD:DP:GL:GQ 1/1:0,33:31:-117.25,-9.35,-0.02:93.28
-chr1 2241682 . G A 17.89 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=57.94;MQ0=0;OQ=417.19;QD=12.27;SB=-164.16 GT:AD:DP:GL:GQ 0/1:17,17:31:-54.36,-9.35,-49.53:99
-chr1 2243754 rs56393204 G A 58.20 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=58.84;MQ0=0;OQ=282.27;QD=14.11;SB=-81.31 GT:AD:DP:GL:GQ 0/1:7,11:14:-35.73,-4.22,-15.87:99
-chr1 2244770 rs2645075 T C 149.18 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.02;MQ0=0;OQ=1276.49;QD=27.75;SB=-655.75 GT:AD:DP:GL:GQ 1/1:0,46:42:-131.28,-12.68,-0.05:99
-chr1 2245871 rs2645074 A G 281.10 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.11;MQ0=0;OQ=516.48;QD=10.99;SB=-220.38 GT:AD:DP:GL:GQ 0/1:24,23:43:-67.90,-12.97,-87.14:99
-chr1 2246105 rs2843148 A T 522.32 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.70;MQ0=0;OQ=1342.05;QD=33.55;SB=-593.22 GT:AD:DP:GL:GQ 1/1:0,40:36:-137.80,-10.84,-0.01:99
-chr1 2246150 . C T 22.21 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=51.90;MQ0=0;OQ=477.24;QD=15.39;SB=-219.23 GT:AD:DP:GL:GQ 0/1:15,16:26:-58.85,-7.84,-34.36:99
-chr1 2246331 . T A 1.20 PASS AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=56.18;MQ0=0;OQ=642.82;QD=20.09;SB=-121.93 GT:AD:DP:GL:GQ 0/1:11,21:32:-77.21,-9.64,-40.89:99
-chr1 2246422 . C T 17.03 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=2;HaplotypeScore=46.69;MQ=32.60;MQ0=2;QD=0.46;SB=17.08 GT:AD:DP:GL:GQ 0/1:33,4:25:-12.51,-7.53,-79.77:49.78
-chr1 2246424 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=2;HaplotypeScore=54.85;MQ=32.43;MQ0=2;OQ=173.30;QD=4.56;SB=-18.60 GT:AD:DP:GL:GQ 0/1:26,12:25:-28.15,-7.53,-68.25:99
-chr1 2246439 rs9725291 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=64.95;MQ=33.89;MQ0=1;OQ=86.92;QD=2.12;SB=-39.19 GT:AD:DP:GL:GQ 0/1:33,8:25:-19.51,-7.53,-71.60:99
-chr1 2246445 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=48.09;MQ=35.48;MQ0=0;OQ=216.97;QD=4.82;SB=-10.56 GT:AD:DP:GL:GQ 0/1:34,11:29:-33.72,-8.74,-70.74:99
-chr1 2246456 . C T 34.43 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=27.71;MQ=37.83;MQ0=0;QD=0.69;SB=1.58 GT:AD:DP:GL:GQ 0/1:43,7:33:-16.67,-9.94,-103.65:67.27
-chr1 2246469 . T C 28.75 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=49;Dels=0.02;HRun=2;HaplotypeScore=77.34;MQ=40.72;MQ0=0;QD=0.59;SB=44.16 GT:AD:DP:GL:GQ 0/1:38,10:28:-14.30,-8.14,-89.44:61.58
-chr1 2246471 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=2;HaplotypeScore=72.35;MQ=42.43;MQ0=0;OQ=76.08;QD=1.58;SB=-6.17 GT:AD:DP:GL:GQ 0/1:36,12:29:-19.64,-8.74,-87.84:99
-chr1 2246484 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=2;HaplotypeScore=51.65;MQ=47.04;MQ0=0;OQ=81.71;QD=2.15;SB=50.19 GT:AD:DP:GL:GQ 0/1:29,8:26:-19.29,-7.83,-83.08:99
-chr1 2246793 . G A 5.64 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=3.91;MQ=55.18;MQ0=1;OQ=1074.55;QD=18.53;SB=-560.61 GT:AD:DP:GL:GQ 0/1:23,35:54:-127.01,-16.27,-81.39:99
-chr1 2247067 rs35006635 C A 47.20 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.81;MQ0=0;OQ=1074.59;QD=21.07;SB=-429.40 GT:AD:DP:GL:GQ 1/1:0,28:51:-197.40,-96.91,-86.36:99
-chr1 2247213 rs12566205 C T 241.62 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=57.90;MQ0=0;OQ=759.24;QD=13.09;SB=-368.12 GT:AD:DP:GL:GQ 0/1:33,25:57:-96.39,-17.18,-106.07:99
-chr1 2247351 rs2643892 C T 241.87 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=665.97;QD=19.59;SB=-340.91 GT:AD:DP:GL:GQ 0/1:14,20:33:-79.82,-9.94,-42.88:99
-chr1 2247555 rs10910051 G A 197.02 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=4.80;MQ=58.86;MQ0=0;OQ=1049.52;QD=16.15;SB=-447.98 GT:AD:DP:GL:GQ 0/1:31,34:61:-126.63,-18.39,-90.57:99
-chr1 2247587 rs2643893 C T 300.53 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=58.44;MQ0=0;OQ=2112.94;QD=35.22;SB=-1052.32 GT:AD:DP:GL:GQ 1/1:0,60:56:-214.91,-16.88,-0.03:99
-chr1 2247723 rs2645092 C T 700.02 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=2085.22;QD=38.62;SB=-998.04 GT:AD:DP:GL:GQ 1/1:0,54:53:-212.12,-15.97,-0.01:99
-chr1 2247791 rs2645093 G A 189.38 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=60.00;MQ0=0;OQ=700.42;QD=15.92;SB=-289.76 GT:AD:DP:GL:GQ 0/1:22,22:42:-85.99,-12.66,-67.45:99
-chr1 2248183 rs2643894 C T 135.91 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=57.95;MQ0=0;OQ=1940.09;QD=35.27;SB=-797.32 GT:AD:DP:GL:GQ 1/1:0,55:52:-197.62,-15.67,-0.03:99
-chr1 2248333 rs2643895 G A 408.80 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2697.00;QD=39.09;SB=-1222.14 GT:AD:DP:GL:GQ 1/1:0,69:68:-273.30,-20.48,-0.02:99
-chr1 2248552 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.80;MQ=51.38;MQ0=0;OQ=50.72;QD=0.83;SB=23.47 GT:AD:DP:GL:GQ 0/1:53,7:56:-28.20,-19.84,-214.64:83.56
-chr1 2248554 . G A 35.21 LowQual AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=3;HaplotypeScore=5.80;MQ=51.10;MQ0=0;QD=0.57;SB=-8.06 GT:AD:DP:GL:GQ 0/1:56,6:58:-24.27,-17.47,-188.51:68.04
-chr1 2248658 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=56.92;MQ0=0;OQ=60.63;QD=0.88;SB=6.91 GT:AD:DP:GL:GQ 0/1:61,8:68:-29.84,-20.49,-240.21:93.47
-chr1 2249886 . C T 54.96 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=-0.12;MQ=60.00;MQ0=0;OQ=750.55;QD=14.72;SB=-348.88 GT:AD:DP:GL:GQ 0/1:25,26:44:-91.61,-13.27,-61.40:99
-chr1 2249910 rs2645063 G A 24.12 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=5.82;MQ=59.50;MQ0=0;OQ=758.18;QD=16.48;SB=-336.52 GT:AD:DP:GL:GQ 0/1:22,24:45:-92.67,-13.57,-67.35:99
-chr1 2250405 rs2645064 G A 151.63 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.71;MQ0=0;OQ=569.60;QD=15.82;SB=-242.53 GT:AD:DP:GL:GQ 0/1:16,20:34:-70.49,-10.25,-54.37:99
-chr1 2251037 rs35273536 C T 60.30 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.05;MQ=58.82;MQ0=0;OQ=1072.47;QD=18.18;SB=-334.93 GT:AD:DP:GL:GQ 0/1:24,34:52:-128.89,-18.36,-63.36:99
-chr1 2253264 . T C 16.56 Indel;LowQual AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=51.77;MQ0=0;QD=2.76;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,2:6:-6.74,-1.81,-16.62:49.30
-chr1 2253282 . C G 16.92 PASS AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=51.16;MQ0=0;OQ=118.58;QD=9.88;SB=-10.00 GT:AD:DP:GL:GQ 0/1:6,6:11:-18.46,-3.32,-24.69:99
-chr1 2253362 rs12752072 T C 172.88 PASS AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=253.44;QD=12.07;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,11:21:-34.96,-6.33,-38.76:99
-chr1 2254886 rs2645066 G A 78.79 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=5.62;MQ=59.17;MQ0=0;OQ=893.72;QD=15.96;SB=-436.47 GT:AD:DP:GL:GQ 0/1:25,31:52:-108.33,-15.67,-85.72:99
-chr1 2255036 rs2645067 T C 87.26 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.60;MQ0=0;OQ=995.78;QD=33.19;SB=-523.42 GT:AD:DP:GL:GQ 1/1:0,30:29:-103.17,-8.74,-0.01:87.25
-chr1 2255079 rs2643898 C T 28.85 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=59.03;MQ0=0;OQ=590.58;QD=13.73;SB=-262.25 GT:AD:DP:GL:GQ 0/1:23,20:42:-75.01,-12.66,-72.41:99
-chr1 2255654 rs7546567 G A 132.53 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.73;MQ0=0;OQ=454.68;QD=13.78;SB=-126.36 GT:AD:DP:GL:GQ 0/1:16,16:32:-61.47,-12.72,-52.76:99
-chr1 2255829 rs2843146 T G 0.05 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=5;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=441.34;QD=27.58;SB=-113.02 GT:AD:DP:GL:GQ 1/1:0,16:14:-47.73,-4.22,-0.01:42.10
-chr1 2255938 rs2643899 T C 18.62 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=58.69;MQ0=0;OQ=756.05;QD=23.63;SB=-323.76 GT:AD:DP:GL:GQ 1/1:0,32:26:-79.22,-7.85,-0.03:78.14
-chr1 2256793 rs903905 C T 99.15 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=58.29;MQ0=0;OQ=354.28;QD=16.10;SB=-192.21 GT:AD:DP:GL:GQ 0/1:10,12:21:-45.05,-6.33,-27.84:99
-chr1 2258430 rs12091632 A G 318.94 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=1030.69;QD=30.31;SB=-507.55 GT:AD:DP:GL:GQ 1/1:0,34:33:-106.69,-9.95,-0.03:99
-chr1 2258440 rs12085675 G A 96.71 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.39;MQ0=0;OQ=1318.84;QD=34.71;SB=-520.68 GT:AD:DP:GL:GQ 1/1:0,37:35:-135.49,-10.55,-0.02:99
-chr1 2258510 rs28394874 C G 5.91 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=4.06;MQ=57.77;MQ0=0;OQ=783.94;QD=18.67;SB=-330.90 GT:AD:DP:GL:GQ 0/1:17,25:36:-92.55,-10.88,-48.65:99
-chr1 2258528 rs35986070 A G 102.16 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.27;MQ0=0;OQ=457.65;QD=16.95;SB=-106.83 GT:AD:DP:GL:GQ 0/1:11,16:27:-57.18,-8.13,-41.35:99
-chr1 2258538 rs2645069 T C 177.52 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.13;MQ0=0;OQ=677.36;QD=27.09;SB=-198.05 GT:AD:DP:GL:GQ 1/1:0,25:23:-71.35,-6.94,-0.03:69.14
-chr1 2258598 rs2645070 A G 16.76 PASS AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=60.00;MQ0=0;OQ=322.02;QD=18.94;SB=-156.34 GT:AD:DP:GL:GQ 0/1:4,13:17:-40.61,-5.13,-15.36:99
-chr1 2258651 rs2843145 A G 4.44 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=3;HaplotypeScore=2.01;MQ=59.14;MQ0=0;OQ=426.64;QD=15.80;SB=-196.02 GT:AD:DP:GL:GQ 0/1:8,19:23:-52.88,-6.93,-31.12:99
-chr1 2258910 . A G 4.11 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.17;MQ=58.13;MQ0=0;OQ=457.98;QD=13.09;SB=-246.31 GT:AD:DP:GL:GQ 0/1:17,18:33:-59.02,-9.94,-70.06:99
-chr1 2259759 rs2036085 T C 103.79 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=626.01;QD=14.56;SB=-172.51 GT:AD:DP:GL:GQ 0/1:16,27:40:-77.94,-12.06,-63.91:99
-chr1 2259869 rs12734736 C T 347.07 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=60.00;MQ0=0;OQ=965.34;QD=16.64;SB=-492.13 GT:AD:DP:GL:GQ 0/1:29,29:54:-116.09,-16.28,-80.58:99
-chr1 2259958 rs2843142 A G 263.06 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.46;MQ=59.76;MQ0=0;OQ=1095.49;QD=13.87;SB=-502.48 GT:AD:DP:GL:GQ 0/1:40,39:78:-136.33,-23.50,-157.46:99
-chr1 2261724 rs2843141 C T 591.96 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1956.29;QD=36.91;SB=-863.62 GT:AD:DP:GL:GQ 1/1:0,53:52:-199.24,-15.68,-0.03:99
-chr1 2262086 rs1472318 C T 44.42 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=57.36;MQ0=0;OQ=484.27;QD=19.37;SB=-215.23 GT:AD:DP:GL:GQ 0/1:8,16:22:-58.34,-6.63,-21.67:99
-chr1 2262763 rs2843139 A G 28.96 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=58.77;MQ0=0;OQ=1612.91;QD=30.43;SB=-829.43 GT:AD:DP:GL:GQ 1/1:0,53:52:-164.94,-15.69,-0.06:99
-chr1 2262883 . G A 16 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=49.61;MQ0=5;QD=0.44;SB=-17.46 GT:AD:DP:GL:GQ 0/1:28,8:25:-12.42,-7.54,-69.64:48.73
-chr1 2263004 rs12730050 A G 0.31 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=14.25;MQ=55.46;MQ0=1;OQ=1032.60;QD=11.35;SB=-477.87 GT:AD:DP:GL:GQ 0/1:51,40:84:-131.86,-25.32,-172.18:99
-chr1 2263146 rs2843138 T C 3.27 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.02;HRun=0;HaplotypeScore=5.34;MQ=54.41;MQ0=0;OQ=1335.96;QD=29.04;SB=-625.83 GT:AD:DP:GL:GQ 1/1:0,44:44:-137.23,-12.97,-0.04:99
-chr1 2263291 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=4;HaplotypeScore=15.31;MQ=57.02;MQ0=0;OQ=65.39;QD=1.72;SB=65.25 GT:AD:DP:GL:GQ 0/1:31,7:33:-19.78,-9.96,-120.76:98.22
-chr1 2263292 . A G 14.86 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=57.52;MQ0=0;QD=0.41;SB=62.21 GT:AD:DP:GL:GQ 0/1:29,6:31:-14.10,-9.35,-99.44:47.55
-chr1 2263765 rs1472319 T C 33.65 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.68;MQ=59.72;MQ0=0;OQ=1846.27;QD=27.56;SB=-842.46 GT:AD:DP:GL:GQ 1/1:0,67:60:-188.28,-18.10,-0.07:99
-chr1 2264170 rs12735747 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=4;HaplotypeScore=15.88;MQ=53.27;MQ0=1;OQ=600.98;QD=16.24;SB=-322.72 GT:AD:DP:GL:GQ 0/1:17,20:33:-73.32,-9.94,-46.93:99
-chr1 2264171 rs12740557 T A 0.25 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=15.88;MQ=53.27;MQ0=1;OQ=596.15;QD=16.11;SB=-294.37 GT:AD:DP:GL:GQ 0/1:17,20:33:-72.84,-9.94,-48.77:99
-chr1 2264298 rs61288374 A G 10.67 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=4.66;MQ=58.45;MQ0=0;OQ=219.39;QD=7.31;SB=-3.98 GT:AD:DP:GL:GQ 0/1:16,13:26:-33.06,-7.84,-58.70:99
-chr1 2264816 rs4648828 G A 38.81 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.55;MQ=58.44;MQ0=0;OQ=661.80;QD=16.97;SB=-286.79 GT:AD:DP:GL:GQ 0/1:17,22:36:-80.32,-10.86,-47.76:99
-chr1 2264998 rs4648829 C T 229.79 PASS AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.45;MQ0=0;OQ=171.83;QD=11.46;SB=-76.07 GT:AD:DP:GL:GQ 0/1:9,6:13:-24.38,-3.92,-22.89:99
-chr1 2265236 rs4648830 T G 6.90 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.55;MQ0=0;OQ=452.22;QD=28.26;SB=-174.97 GT:AD:DP:GL:GQ 1/1:0,16:15:-48.82,-4.52,-0.01:45.09
-chr1 2265809 rs2643909 C G 56 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=57.02;MQ0=0;OQ=1592.56;QD=34.62;SB=-562.49 GT:AD:DP:GL:GQ 1/1:0,46:39:-162.87,-11.76,-0.03:99
-chr1 2265882 . G A 8.69 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.87;MQ0=0;OQ=753.33;QD=18.37;SB=-247.76 GT:AD:DP:GL:GQ 0/1:17,24:37:-89.77,-11.15,-48.26:99
-chr1 2265933 . T C 0.10 PASS AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=3;HaplotypeScore=2.25;MQ=58.59;MQ0=0;OQ=218.96;QD=6.64;SB=-11.87 GT:AD:DP:GL:GQ 0/1:21,12:30:-34.22,-9.04,-78.51:99
-chr1 2266056 rs11589063 C A 17.26 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=3.57;MQ=58.25;MQ0=0;OQ=453.86;QD=11.35;SB=-250.27 GT:AD:DP:GL:GQ 0/1:23,17:40:-60.72,-12.05,-77.71:99
-chr1 2266060 rs2843137 T A 278.60 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=57.66;MQ0=0;OQ=421.83;QD=10.55;SB=-226.71 GT:AD:DP:GL:GQ 0/1:23,17:37:-56.61,-11.15,-79.80:99
-chr1 2266231 rs11589451 C A 57.46 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=5.26;MQ=58.41;MQ0=0;OQ=597.75;QD=10.67;SB=-255.49 GT:AD:DP:GL:GQ 0/1:32,24:50:-78.13,-15.07,-90.69:99
-chr1 2266279 rs11590175 A G 185.77 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.15;MQ0=0;OQ=537.72;QD=10.97;SB=-262.22 GT:AD:DP:GL:GQ 0/1:22,25:41:-69.42,-12.37,-72.12:99
-chr1 2266621 . G A 34.89 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=3.35;MQ=59.21;MQ0=0;OQ=474.72;QD=13.56;SB=-211.70 GT:AD:DP:GL:GQ 0/1:17,18:29:-59.50,-8.75,-41.35:99
-chr1 2267026 . G A 47.30 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.99;MQ0=0;OQ=613.73;QD=16.59;SB=-254.78 GT:AD:DP:GL:GQ 0/1:17,20:34:-74.91,-10.25,-50.44:99
-chr1 2267073 . T C 188.99 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.75;MQ0=0;OQ=394.61;QD=9.87;SB=-211.55 GT:AD:DP:GL:GQ 0/1:22,18:38:-54.20,-11.45,-84.44:99
-chr1 2267410 rs61762093 G C 176.11 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.35;MQ=56.22;MQ0=0;OQ=747.58;QD=15.26;SB=-308.18 GT:AD:DP:GL:GQ 0/1:27,22:44:-91.30,-13.26,-97.18:99
-chr1 2267687 rs2843134 G A 624.83 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=2217.24;QD=36.95;SB=-1015.91 GT:AD:DP:GL:GQ 1/1:0,60:58:-225.33,-17.48,-0.02:99
-chr1 2267975 rs12409523 G C 1.77 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=5.47;MQ=59.03;MQ0=0;OQ=822.23;QD=17.13;SB=-209.63 GT:AD:DP:GL:GQ 0/1:24,24:46:-99.39,-13.88,-93.78:99
-chr1 2268100 rs2132595 C T 240.52 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.35;MQ0=0;OQ=844.37;QD=16.56;SB=-387.19 GT:AD:DP:GL:GQ 0/1:23,28:47:-101.89,-14.17,-71.24:99
-chr1 2268508 rs2843133 A G 0.07 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=4;HaplotypeScore=2.38;MQ=57.65;MQ0=0;OQ=995.04;QD=26.19;SB=-340.62 GT:AD:DP:GL:GQ 1/1:0,38:30:-103.10,-9.04,-0.01:90.24
-chr1 2268841 rs2643910 C T 6.12 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=58.25;MQ0=0;OQ=784.65;QD=19.62;SB=-334.39 GT:AD:DP:GL:GQ 0/1:16,24:39:-93.50,-11.75,-52.91:99
-chr1 2269677 rs56030548 C T 80.69 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=57.12;MQ0=0;OQ=443.83;QD=15.85;SB=-131.12 GT:AD:DP:GL:GQ 0/1:13,15:27:-55.80,-8.14,-42.23:99
-chr1 2269999 rs35941092 C T 0.23 PASS AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=8.68;MQ=48.71;MQ0=0;OQ=64.58;QD=4.61;SB=-21.48 GT:AD:DP:GL:GQ 0/1:10,4:14:-13.97,-4.23,-30.76:97.42
-chr1 2270100 . T A 5.69 PASS AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=56.04;MQ0=0;OQ=92.13;QD=5.12;SB=-47.85 GT:AD:DP:GL:GQ 0/1:13,5:18:-17.92,-5.42,-46.07:99
-chr1 2270283 rs2645072 A C 0.37 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=56.22;MQ0=0;OQ=963.23;QD=33.21;SB=-173.01 GT:AD:DP:GL:GQ 1/1:0,29:28:-99.92,-8.44,-0.01:84.24
-chr1 2270521 rs2055204 G A 60.41 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=3.82;MQ=59.66;MQ0=0;OQ=983.74;QD=17.89;SB=-468.43 GT:AD:DP:GL:GQ 0/1:22,33:52:-117.32,-15.67,-79.90:99
-chr1 2271586 rs7527871 A C 436.10 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=784.91;QD=12.08;SB=-319.01 GT:AD:DP:GL:GQ 0/1:36,29:64:-101.05,-19.28,-130.62:99
-chr1 2271838 rs1039063 T G 2.04 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=5;HaplotypeScore=1.22;MQ=60.00;MQ0=0;OQ=495.93;QD=11.27;SB=-259.90 GT:AD:DP:GL:GQ 0/1:22,22:41:-65.23,-12.35,-74.62:99
-chr1 2271995 rs10910053 G A 269.15 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=60.00;MQ0=0;OQ=928.57;QD=18.95;SB=-437.81 GT:AD:DP:GL:GQ 0/1:20,29:47:-110.30,-14.16,-67.66:99
-chr1 2272064 . G A 22.07 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.67;MQ=59.48;MQ0=0;OQ=676.05;QD=15.36;SB=-356.51 GT:AD:DP:GL:GQ 0/1:22,22:42:-83.55,-12.66,-69.45:99
-chr1 2272233 . C T 4.84 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=3.42;MQ=59.14;MQ0=0;OQ=912.77;QD=16.90;SB=-354.47 GT:AD:DP:GL:GQ 0/1:26,28:53:-110.53,-15.96,-92.85:99
-chr1 2272335 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=2.06;MQ=56.98;MQ0=0;OQ=124.90;QD=3.20;SB=56.19 GT:AD:DP:GL:GQ 0/1:24,15:32:-25.41,-9.64,-85.35:99
-chr1 2272540 rs2279704 C T 249.66 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=59.55;MQ0=0;OQ=742.26;QD=14.55;SB=-245.76 GT:AD:DP:GL:GQ 0/1:25,25:47:-91.67,-14.16,-87.05:99
-chr1 2272636 rs2254874 G C 9.15 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=3.74;MQ=56.62;MQ0=0;OQ=1562.16;QD=37.19;SB=-628.86 GT:AD:DP:GL:GQ 1/1:0,42:38:-159.82,-11.46,-0.02:99
-chr1 2272850 rs2036082 C T 429.96 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=669.32;QD=14.55;SB=-278.20 GT:AD:DP:GL:GQ 0/1:25,21:46:-84.08,-13.87,-81.55:99
-chr1 2273702 rs2643912 G T 414.73 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=338.96;QD=15.41;SB=-195.57 GT:AD:DP:GL:GQ 0/1:9,13:21:-43.50,-6.33,-31.88:99
-chr1 2273756 rs2840528 A G 171.15 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.44;MQ0=0;OQ=666.96;QD=16.27;SB=-294.48 GT:AD:DP:GL:GQ 0/1:18,23:41:-82.33,-12.35,-70.40:99
-chr1 2273863 rs2645082 T C 3.28 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=2.08;MQ=58.41;MQ0=0;OQ=1044.33;QD=23.73;SB=-369.45 GT:AD:DP:GL:GQ 1/1:0,44:35:-108.06,-10.56,-0.04:99
-chr1 2274055 rs3795272 T C 1.91 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=3;HaplotypeScore=4.58;MQ=58.20;MQ0=0;OQ=382.95;QD=8.15;SB=-128.51 GT:AD:DP:GL:GQ 0/1:28,19:44:-54.84,-13.26,-106.89:99
-chr1 2274346 rs12049067 C T 357.23 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=57.77;MQ0=0;OQ=508.21;QD=12.71;SB=-252.25 GT:AD:DP:GL:GQ 0/1:22,18:38:-65.56,-11.45,-75.12:99
-chr1 2274758 rs2840529 T G 24.15 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=3;HaplotypeScore=0.63;MQ=59.39;MQ0=0;OQ=311.73;QD=8.20;SB=-145.73 GT:AD:DP:GL:GQ 0/1:25,13:34:-44.70,-10.25,-72.81:99
-chr1 2275042 rs2036083 A T 221.53 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.71;MQ=59.63;MQ0=0;OQ=509.88;QD=10.20;SB=-241.63 GT:AD:DP:GL:GQ 0/1:29,21:43:-67.22,-12.95,-90.87:99
-chr1 2275274 rs2843129 G A 298.24 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.43;MQ0=0;OQ=2821.79;QD=38.65;SB=-1326.28 GT:AD:DP:GL:GQ 1/1:0,73:71:-285.78,-21.39,-0.02:99
-chr1 2276807 rs1039100 A G 434.33 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1195.19;QD=31.45;SB=-467.43 GT:AD:DP:GL:GQ 1/1:0,38:36:-123.12,-10.85,-0.02:99
-chr1 2277377 rs2645083 T C 625.87 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=1448.36;QD=34.48;SB=-607.22 GT:AD:DP:GL:GQ 1/1:0,42:42:-148.44,-12.65,-0.02:99
-chr1 2277394 rs11577374 C T 128.24 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=58.95;MQ0=0;OQ=767.18;QD=17.44;SB=-322.88 GT:AD:DP:GL:GQ 0/1:20,24:40:-92.06,-12.06,-52.10:99
-chr1 2277476 rs2645085 T C 300.52 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.58;MQ0=0;OQ=627.13;QD=11.40;SB=-216.37 GT:AD:DP:GL:GQ 0/1:27,28:51:-81.37,-15.38,-100.48:99
-chr1 2277708 rs16825067 G C 15.92 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=3.52;MQ=58.92;MQ0=0;OQ=727.07;QD=18.64;SB=-379.89 GT:AD:DP:GL:GQ 0/1:17,22:37:-87.14,-11.15,-70.33:99
-chr1 2278607 rs2645086 T C 275.36 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.11;MQ0=0;OQ=269.17;QD=10.35;SB=-101.72 GT:AD:DP:GL:GQ 0/1:13,13:25:-37.74,-7.54,-47.79:99
-chr1 2279110 rs903912 C G 0.92 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=12.20;MQ=57.42;MQ0=0;OQ=679.10;QD=12.81;SB=-356.81 GT:AD:DP:GL:GQ 0/1:28,25:46:-85.06,-13.87,-109.25:99
-chr1 2279111 rs903913 T C 0.56 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.02;HRun=1;HaplotypeScore=12.09;MQ=57.42;MQ0=0;OQ=643.89;QD=12.15;SB=-297.64 GT:AD:DP:GL:GQ 0/1:27,25:52:-83.04,-15.37,-108.03:99
-chr1 2279181 rs903914 G A 327.01 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=59.27;MQ0=0;OQ=1113.86;QD=17.68;SB=-571.62 GT:AD:DP:GL:GQ 0/1:30,33:61:-133.06,-18.39,-88.20:99
-chr1 2280148 rs2840544 T C 12.55 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=59.49;MQ0=0;OQ=176.15;QD=3.91;SB=-95.61 GT:AD:DP:GL:GQ 0/1:34,11:43:-33.87,-12.97,-121.04:99
-chr1 2280520 rs2645088 T C 494.99 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=961.96;QD=28.29;SB=-437.29 GT:AD:DP:GL:GQ 1/1:0,34:31:-99.81,-9.35,-0.03:93.20
-chr1 2280750 rs2840543 C T 201 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.69;MQ0=0;OQ=2174.81;QD=36.25;SB=-926.73 GT:AD:DP:GL:GQ 1/1:0,60:56:-221.09,-16.88,-0.02:99
-chr1 2280771 rs2645089 G A 262.49 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=676.44;QD=13.53;SB=-331.88 GT:AD:DP:GL:GQ 0/1:29,21:47:-85.09,-14.16,-84.51:99
-chr1 2281127 rs6424093 A G 144.23 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.16;MQ0=0;OQ=492.45;QD=11.73;SB=-156.68 GT:AD:DP:GL:GQ 0/1:23,19:40:-64.58,-12.05,-85.73:99
-chr1 2281540 rs2840542 T C 309.75 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=56.56;MQ0=0;OQ=2607.54;QD=33.86;SB=-1074.11 GT:AD:DP:GL:GQ 1/1:0,77:73:-264.36,-21.99,-0.02:99
-chr1 2282015 rs2840541 T C 311.98 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=585.20;QD=9.75;SB=-280.12 GT:AD:DP:GL:GQ 0/1:36,24:60:-79.89,-18.08,-145.26:99
-chr1 2282269 rs2645090 T C 432.32 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=613.50;QD=9.16;SB=-290.16 GT:AD:DP:GL:GQ 0/1:38,29:64:-83.92,-19.29,-153.60:99
-chr1 2283026 rs2250799 G A 138.76 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.62;MQ0=0;OQ=1864.73;QD=38.06;SB=-791.54 GT:AD:DP:GL:GQ 1/1:0,49:48:-190.08,-14.47,-0.02:99
-chr1 2284017 rs10797420 G A 1.04 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=10.89;MQ=55.69;MQ0=1;OQ=1110.47;QD=17.63;SB=-493.05 GT:AD:DP:GL:GQ 0/1:28,34:55:-130.90,-16.57,-82.96:99
-chr1 2284704 rs55873848 C T 485.15 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.27;MQ0=0;OQ=939.68;QD=16.78;SB=-471.48 GT:AD:DP:GL:GQ 0/1:26,30:53:-113.22,-15.97,-82.15:99
-chr1 2284890 rs7530501 T G 19.05 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=5.02;MQ=57.51;MQ0=0;OQ=731.65;QD=13.80;SB=-124.84 GT:AD:DP:GL:GQ 0/1:25,28:51:-91.81,-15.36,-86.72:99
-chr1 2285068 rs57840322 G A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=6;HaplotypeScore=29.71;MQ=39.31;MQ0=0;OQ=1533.11;QD=35.65;SB=-660.69 GT:AD:DP:GL:GQ 1/1:0,43:40:-156.91,-12.05,-0.01:99
-chr1 2285112 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=42;Dels=0.05;HRun=7;HaplotypeScore=20.40;MQ=45.44;MQ0=0;OQ=661.72;QD=15.76;SB=-259.95 GT:AD:DP:GL:GQ 0/1:19,21:41:-81.21,-11.75,-63.70:99
-chr1 2285126 rs6682345 A T 200.65 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.08;MQ0=0;OQ=1898.67;QD=35.16;SB=-880.24 GT:AD:DP:GL:GQ 1/1:1,53:53:-197.20,-15.96,-3.75:99
-chr1 2285128 rs6682346 A T 359.27 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.28;MQ0=0;OQ=737.49;QD=13.41;SB=-376.75 GT:AD:DP:GL:GQ 0/1:30,25:55:-93.60,-16.56,-117.95:99
-chr1 2285638 rs10910055 A C 76.19 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=3.44;MQ=49.97;MQ0=2;OQ=838.51;QD=11.65;SB=-398.65 GT:AD:DP:GL:GQ 0/1:39,33:60:-105.20,-18.07,-117.50:99
-chr1 2285783 rs12026746 C T 166.61 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=27.98;MQ=27.61;MQ0=1;QD=3.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:32,15:30:-28.99,-9.05,-73.71:99
-chr1 2285784 . A G 712.90 SnpCluster AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=27.98;MQ=27.61;MQ0=1;QD=15.17;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,34:30:-83.61,-9.04,-20.49:99
-chr1 2285789 . T C 107.62 SnpCluster AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=51.95;MQ=27.67;MQ0=1;QD=2.20;SB=-10.00 GT:AD:DP:GL:GQ 0/1:37,12:31:-23.38,-9.34,-102.78:99
-chr1 2285797 . C T 99.87 SnpCluster AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=37.97;MQ=27.29;MQ0=3;QD=1.72;SB=-6.99 GT:AD:DP:GL:GQ 0/1:46,12:38:-24.73,-11.46,-107.35:99
-chr1 2285798 rs6685453 A G 587.05 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=37.13;MQ=27.02;MQ0=4;QD=10.12;SB=-34.94 GT:AD:DP:GL:GQ 0/1:35,23:38:-73.44,-11.45,-64.40:99
-chr1 2285805 rs2840539 G A 1277.62 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=29.98;MQ=27.32;MQ0=3;QD=21.65;SB=-159.63 GT:AD:DP:GL:GQ 0/1:13,46:41:-143.39,-12.35,-21.42:90.69
-chr1 2285956 rs7539098 A T 36.30 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=32.84;MQ0=4;OQ=256.31;QD=4.93;SB=-97.36 GT:AD:DP:GL:GQ 0/1:30,22:31:-38.25,-9.34,-84.38:99
-chr1 2285957 rs7539099 A T 39.69 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=32.84;MQ0=4;OQ=262.32;QD=5.04;SB=-99.37 GT:AD:DP:GL:GQ 0/1:29,23:31:-38.85,-9.34,-83.38:99
-chr1 2286519 rs12029098 A G 0.14 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=10.29;MQ=20.58;MQ0=25;OQ=214.67;QD=3.41;SB=-10.00 GT:AD:DP:GL:GQ 0/1:52,10:32:-34.39,-9.64,-87.93:99
-chr1 2286535 rs10910056 C T 41.85 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=18.11;MQ0=29;OQ=264.94;QD=4.49;SB=-10.00 GT:AD:DP:GL:GQ 0/1:49,10:24:-37.01,-7.23,-58.35:99
-chr1 2286632 rs12062221 G A 163.59 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.73;MQ0=23;OQ=318.86;QD=6.13;SB=-122.97 GT:AD:DP:GL:GQ 0/1:37,15:21:-41.50,-6.33,-38.58:99
-chr1 2286682 rs10910057 T C 259.25 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=21.36;MQ0=18;OQ=880.98;QD=17.98;SB=-392.60 GT:AD:DP:GL:GQ 1/1:18,31:25:-91.69,-7.53,-0.01:75.23
-chr1 2287320 rs7366927 T C 67.59 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=20.66;MQ0=24;OQ=467.32;QD=6.97;SB=-192.02 GT:AD:DP:GL:GQ 0/1:40,27:33:-59.96,-9.95,-57.33:99
-chr1 2287795 rs10910058 A T 108.02 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.68;MQ0=0;OQ=672.40;QD=13.18;SB=-131.84 GT:AD:DP:GL:GQ 0/1:26,25:50:-85.58,-15.06,-97.61:99
-chr1 2287854 rs10910059 G C 295.33 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.70;MQ0=0;OQ=1098.70;QD=16.90;SB=-242.39 GT:AD:DP:GL:GQ 0/1:34,31:65:-132.74,-19.58,-150.89:99
-chr1 2288115 rs4648834 A G 229.51 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=58.69;MQ0=0;OQ=974.25;QD=11.88;SB=-367.23 GT:AD:DP:GL:GQ 0/1:45,37:80:-124.81,-24.10,-176.65:99
-chr1 2288354 rs55960350 C A 363.99 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=56.19;MQ0=0;OQ=926.53;QD=15.44;SB=-445.49 GT:AD:DP:GL:GQ 0/1:29,31:60:-114.01,-18.07,-107.19:99
-chr1 2288496 rs10453826 G A 57.25 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1349.11;QD=17.75;SB=-668.70 GT:AD:DP:GL:GQ 0/1:36,39:75:-160.78,-22.59,-131.92:99
-chr1 2288624 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.02;HRun=18;HaplotypeScore=24.48;MQ=54.73;MQ0=1;OQ=401.02;QD=6.57;SB=-41.45 GT:AD:DP:GL:GQ 0/1:43,17:55:-59.67,-16.28,-122.97:99
-chr1 2288630 rs28792725 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.02;HRun=6;HaplotypeScore=25.44;MQ=54.48;MQ0=1;OQ=211.43;QD=3.92;SB=68.22 GT:AD:DP:GL:GQ 0/1:42,11:47:-38.29,-13.87,-121.95:99
-chr1 2288943 rs6704200 G A 186.62 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.03;MQ0=0;OQ=2659.42;QD=39.69;SB=-1189.57 GT:AD:DP:GL:GQ 1/1:0,67:67:-269.55,-20.19,-0.02:99
-chr1 2289098 rs12069579 C T 14.78 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=4;HaplotypeScore=1.46;MQ=57.20;MQ0=1;OQ=865.75;QD=14.43;SB=-343.49 GT:AD:DP:GL:GQ 0/1:32,28:57:-107.04,-17.18,-97.55:99
-chr1 2289170 rs12069588 C T 455.09 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=1016.01;QD=15.88;SB=-357.83 GT:AD:DP:GL:GQ 0/1:33,31:64:-124.17,-19.28,-114.93:99
-chr1 2289171 rs12071572 A G 466.33 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=819.05;QD=12.80;SB=-318.26 GT:AD:DP:GL:GQ 0/1:33,31:63:-104.18,-18.99,-126.28:99
-chr1 2289487 rs7545940 T C 276.29 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=59.67;MQ0=0;OQ=618.09;QD=11.04;SB=-316.36 GT:AD:DP:GL:GQ 0/1:32,24:55:-81.66,-16.57,-127.86:99
-chr1 2289511 rs2840538 T C 82.58 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.41;MQ=59.24;MQ0=0;OQ=1874.35;QD=34.08;SB=-939.34 GT:AD:DP:GL:GQ 1/1:0,55:54:-191.04,-16.27,-0.02:99
-chr1 2289772 rs7546224 T C 223.24 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.97;MQ0=0;OQ=650.32;QD=11.02;SB=-248.17 GT:AD:DP:GL:GQ 0/1:33,26:58:-85.80,-17.48,-124.44:99
-chr1 2290017 rs12070927 C A 51.76 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=3;HaplotypeScore=0.98;MQ=59.12;MQ0=0;OQ=1316.41;QD=19.08;SB=-657.73 GT:AD:DP:GL:GQ 0/1:26,43:67:-155.11,-20.18,-89.64:99
-chr1 2290238 rs7514750 G C 5.37 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=1.63;MQ=56.12;MQ0=0;OQ=999.16;QD=16.93;SB=-161.14 GT:AD:DP:GL:GQ 0/1:29,30:55:-119.78,-16.58,-120.03:99
-chr1 2290509 rs7542190 C T 358.30 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.38;MQ0=0;OQ=592.85;QD=11.62;SB=-156.20 GT:AD:DP:GL:GQ 0/1:31,20:49:-77.34,-14.77,-99.87:99
-chr1 2290635 rs7554609 A G 100.55 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.39;MQ=57.81;MQ0=0;OQ=439.50;QD=11.27;SB=-190.14 GT:AD:DP:GL:GQ 0/1:19,19:37:-60.47,-13.23,-75.89:99
-chr1 2290654 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=20;HaplotypeScore=28.09;MQ=53.25;MQ0=0;OQ=241.28;QD=4.02;SB=92.32 GT:AD:DP:GL:GQ 0/1:44,16:53:-43.38,-15.97,-152.46:99
-chr1 2290675 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=20;HaplotypeScore=29.22;MQ=49.62;MQ0=0;OQ=64.81;QD=0.94;SB=71.20 GT:AD:DP:GL:GQ 0/1:52,14:46:-23.33,-13.56,-132.10:97.65
-chr1 2291469 rs2840535 G T 504.16 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=896.75;QD=14.95;SB=-459.55 GT:AD:DP:GL:GQ 0/1:30,30:59:-110.74,-17.78,-88.69:99
-chr1 2291551 rs6665546 G A 392.04 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1434.00;QD=17.70;SB=-726.06 GT:AD:DP:GL:GQ 0/1:39,42:81:-171.09,-24.41,-128.82:99
-chr1 2292331 rs2453567 C T 202.13 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=54.48;MQ0=0;OQ=1114.28;QD=17.14;SB=-425.43 GT:AD:DP:GL:GQ 0/1:31,34:60:-132.80,-18.08,-88.05:99
-chr1 2292376 rs2453566 T C 254.25 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=52.46;MQ0=0;OQ=498.58;QD=10.18;SB=-208.48 GT:AD:DP:GL:GQ 0/1:22,27:40:-65.21,-12.06,-74.69:99
-chr1 2293426 rs2840534 A G 74.94 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=4.04;MQ=59.63;MQ0=0;OQ=998.53;QD=16.11;SB=-332.38 GT:AD:DP:GL:GQ 0/1:27,35:61:-121.51,-18.38,-106.86:99
-chr1 2297776 rs2843165 A C 120.65 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=714.07;QD=14.28;SB=-105.81 GT:AD:DP:GL:GQ 0/1:23,27:49:-89.45,-14.76,-84.29:99
-chr1 2298377 rs2843162 C G 368.81 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=490.57;QD=15.82;SB=-257.11 GT:AD:DP:GL:GQ 0/1:17,14:31:-61.68,-9.34,-73.31:99
-chr1 2298942 rs2843160 T G 117.23 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=5.47;MQ=59.17;MQ0=0;OQ=634.08;QD=11.32;SB=-278.70 GT:AD:DP:GL:GQ 0/1:27,29:53:-82.67,-15.98,-90.35:99
-chr1 2302255 rs2643908 C T 314.36 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=59.55;MQ0=0;OQ=684.01;QD=13.41;SB=-309.40 GT:AD:DP:GL:GQ 0/1:26,25:46:-85.54,-13.86,-88.50:99
-chr1 2303400 rs2843132 A G 8.40 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=3.40;MQ=59.58;MQ0=0;OQ=438.03;QD=9.96;SB=-158.56 GT:AD:DP:GL:GQ 0/1:24,20:38:-58.54,-11.45,-84.41:99
-chr1 2304179 rs2643901 T C 196.35 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.98;MQ=59.45;MQ0=0;OQ=721.33;QD=17.17;SB=-281.01 GT:AD:DP:GL:GQ 0/1:15,26:39:-87.17,-11.75,-56.36:99
-chr1 2305298 rs2645060 G A 178.67 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=60.00;MQ0=0;OQ=1082.92;QD=18.05;SB=-486.00 GT:AD:DP:GL:GQ 0/1:25,35:57:-128.76,-17.18,-76.49:99
-chr1 2305540 rs2843128 A G 194.82 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=59.59;MQ0=0;OQ=482.38;QD=10.49;SB=-248.93 GT:AD:DP:GL:GQ 0/1:24,22:42:-64.18,-12.66,-86.34:99
-chr1 2305577 rs2843127 A G 547.43 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.15;MQ0=0;OQ=527.20;QD=11.98;SB=-284.59 GT:AD:DP:GL:GQ 0/1:25,19:44:-69.26,-13.26,-98.42:99
-chr1 2306175 rs2843126 A G 188.97 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=58.39;MQ0=0;OQ=344.67;QD=9.07;SB=-143.56 GT:AD:DP:GL:GQ 0/1:18,19:33:-47.70,-9.95,-71.62:99
-chr1 2306848 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=13;HaplotypeScore=4.17;MQ=55.00;MQ0=0;OQ=100.30;QD=4.18;SB=17.09 GT:AD:DP:GL:GQ 0/1:17,7:16:-18.14,-4.82,-46.21:99
-chr1 2309288 rs903903 A G 560.94 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1265.25;QD=17.33;SB=-657.78 GT:AD:DP:GL:GQ 0/1:28,45:70:-150.90,-21.10,-100.41:99
-chr1 2309390 rs2645061 G T 558.68 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=773.84;QD=12.28;SB=-380.71 GT:AD:DP:GL:GQ 0/1:36,27:63:-99.64,-18.97,-129.32:99
-chr1 2310428 . G A 99.95 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=70;Dels=0.04;HRun=15;HaplotypeScore=39.00;MQ=46.05;MQ0=0;QD=1.43;SB=52.68 GT:AD:DP:GL:GQ 0/1:53,14:55:-29.56,-16.28,-149.90:99
-chr1 2313868 rs2840533 C T 252.17 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=59.24;MQ0=0;OQ=794.28;QD=14.44;SB=-234.49 GT:AD:DP:GL:GQ 0/1:29,26:54:-98.98,-16.27,-105.03:99
-chr1 2314319 . A G 42.45 LowQual AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=50.37;MQ0=0;QD=0.63;SB=-7.70 GT:AD:DP:GL:GQ 0/1:58,9:63:-26.51,-18.98,-220.77:75.28
-chr1 2314326 . A G 0.25 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=50.58;MQ0=0;OQ=173.32;QD=2.44;SB=-79.68 GT:AD:DP:GL:GQ 0/1:59,12:69:-41.40,-20.79,-226.63:99
-chr1 2314333 rs41315342 C T 21.24 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=49.96;MQ0=0;OQ=309.71;QD=4.62;SB=-180.11 GT:AD:DP:GL:GQ 0/1:53,14:62:-52.95,-18.70,-157.19:99
-chr1 2315408 . G A 4.80 PASS AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=3.55;MQ=59.13;MQ0=0;OQ=1258.74;QD=16.78;SB=-356.05 GT:AD:DP:GL:GQ 0/1:37,38:74:-151.46,-22.30,-126.73:99
-chr1 2315869 rs1123571 G A 390.91 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.65;MQ0=0;OQ=976.67;QD=13.95;SB=-457.41 GT:AD:DP:GL:GQ 0/1:38,32:64:-120.23,-19.28,-120.05:99
-chr1 2316672 rs903911 A G 4.65 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=4.83;MQ=58.81;MQ0=0;OQ=646.68;QD=16.58;SB=-230.30 GT:AD:DP:GL:GQ 0/1:16,22:38:-79.40,-11.45,-61.89:99
-chr1 2317675 rs2840532 C T 230.75 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.63;MQ0=0;OQ=2453.68;QD=38.95;SB=-993.83 GT:AD:DP:GL:GQ 1/1:0,63:62:-248.97,-18.68,-0.02:99
-chr1 2318574 rs2645081 A G 8.21 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=6.83;MQ=58.95;MQ0=0;OQ=2467.67;QD=30.85;SB=-995.94 GT:AD:DP:GL:GQ 1/1:0,79:71:-250.38,-21.39,-0.03:99
-chr1 2319521 rs6698680 A G 273.51 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.27;MQ0=0;OQ=618.22;QD=12.12;SB=-195.44 GT:AD:DP:GL:GQ 0/1:27,24:49:-79.88,-14.77,-98.83:99
-chr1 2319668 rs3001344 A G 117.65 PASS AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.27;MQ0=0;OQ=3223.06;QD=35.42;SB=-1436.46 GT:AD:DP:GL:GQ 1/1:0,91:90:-325.91,-27.11,-0.03:99
-chr1 2319862 rs6698978 A G 270.88 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=53.38;MQ0=0;OQ=935.78;QD=15.60;SB=-478.67 GT:AD:DP:GL:GQ 0/1:27,33:58:-114.34,-17.47,-100.10:99
-chr1 2319876 rs6685829 C T 18.19 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=6.10;MQ=50.59;MQ0=0;OQ=722.12;QD=12.24;SB=-192.86 GT:AD:DP:GL:GQ 0/1:35,24:57:-92.67,-17.18,-109.45:99
-chr1 2320050 rs6693447 T G 274.62 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.41;MQ0=0;OQ=1099.08;QD=15.48;SB=-483.82 GT:AD:DP:GL:GQ 0/1:33,38:70:-134.27,-21.08,-119.27:99
-chr1 2321898 rs55912310 A G 16.38 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=6.30;MQ=59.22;MQ0=0;OQ=1063.46;QD=13.63;SB=-443.56 GT:AD:DP:GL:GQ 0/1:40,38:76:-132.53,-22.90,-155.79:99
-chr1 2322251 rs12037485 C T 255.22 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=54.76;MQ0=0;OQ=603.45;QD=12.57;SB=-317.81 GT:AD:DP:GL:GQ 0/1:27,21:45:-77.19,-13.56,-84.03:99
-chr1 2322525 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=3;HaplotypeScore=18.90;MQ=37.53;MQ0=0;OQ=105.39;QD=3.90;SB=-31.65 GT:AD:DP:GL:GQ 0/1:20,7:25:-21.36,-7.54,-75.64:99
-chr1 2322526 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=17.62;MQ=38.02;MQ0=0;OQ=76.24;QD=2.63;SB=-0.98 GT:AD:DP:GL:GQ 0/1:23,6:24:-18.14,-7.23,-69.35:99
-chr1 2322566 . C T 184.67 Indel AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=7.93;MQ=44.33;MQ0=0;QD=9.72;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,7:16:-26.58,-4.82,-31.47:99
-chr1 2322586 . T C 43.94 LowQual AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=2;HaplotypeScore=6.02;MQ=50.39;MQ0=0;QD=3.38;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,4:11:-10.99,-3.32,-30.04:76.77
-chr1 2322650 . T C 18.09 LowQual AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=2;HaplotypeScore=5.99;MQ=43.00;MQ0=0;QD=3.01;SB=-3.98 GT:AD:DP:GL:GQ 0/1:4,2:6:-6.89,-1.81,-15.35:50.86
-chr1 2322668 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=1;HaplotypeScore=16.47;MQ=36.20;MQ0=0;OQ=99.28;QD=6.62;SB=-3.98 GT:AD:DP:GL:GQ 0/1:11,4:11:-16.52,-3.31,-24.94:99
-chr1 2322705 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=18.95;MQ=39.10;MQ0=0;OQ=127.82;QD=7.99;SB=-6.99 GT:AD:DP:GL:GQ 0/1:11,5:12:-19.68,-3.62,-24.01:99
-chr1 2322711 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=2;HaplotypeScore=13.96;MQ=44.08;MQ0=0;OQ=161.06;QD=8.05;SB=-38.94 GT:AD:DP:GL:GQ 0/1:13,7:16:-24.21,-4.82,-34.51:99
-chr1 2322848 rs3001337 T C 21.54 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.78;MQ0=0;OQ=436.82;QD=19.86;SB=-71.91 GT:AD:DP:GL:GQ 1/1:0,22:15:-47.28,-4.52,-0.02:45.08
-chr1 2322891 rs3001336 G A 52.42 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.61;MQ=57.77;MQ0=0;OQ=1380.55;QD=34.51;SB=-210.77 GT:AD:DP:GL:GQ 1/1:0,39:36:-141.66,-10.85,-0.02:99
-chr1 2324121 . G T 2.67 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=60.00;MQ0=0;OQ=1012.17;QD=19.85;SB=-217.60 GT:AD:DP:GL:GQ 0/1:19,32:51:-119.87,-15.37,-54.76:99
-chr1 2324716 rs41315648 C T 55.76 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=58.50;MQ0=0;OQ=419.39;QD=13.53;SB=-59.02 GT:AD:DP:GL:GQ 0/1:17,14:29:-53.97,-8.74,-50.19:99
-chr1 2325536 rs1129333 A G 283.63 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=1733.67;QD=33.99;SB=-802.65 GT:AD:DP:GL:GQ 1/1:0,51:50:-176.97,-15.06,-0.02:99
-chr1 2327137 rs11586985 C T 102.53 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=429.81;QD=12.28;SB=-139.15 GT:AD:DP:GL:GQ 0/1:21,14:35:-56.82,-10.56,-64.66:99
-chr1 2327397 rs2494426 C G 233.81 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=927.58;QD=37.10;SB=-342.73 GT:AD:DP:GL:GQ 1/1:0,25:23:-96.36,-6.94,-0.02:69.23
-chr1 2327420 rs55746053 G A 222.42 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.19;MQ0=0;OQ=251.55;QD=10.94;SB=-144.16 GT:AD:DP:GL:GQ 0/1:13,10:21:-34.77,-6.33,-37.00:99
-chr1 2327986 rs3795269 C A 81.57 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.48;MQ=59.11;MQ0=0;OQ=721.54;QD=13.88;SB=-337.19 GT:AD:DP:GL:GQ 0/1:25,27:47:-89.60,-14.16,-76.64:99
-chr1 2328429 rs2494427 T C 699.34 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1614.58;QD=34.35;SB=-832.33 GT:AD:DP:GL:GQ 1/1:0,47:46:-165.06,-13.86,-0.02:99
-chr1 2328739 rs6671420 G A 245.45 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=58.64;MQ0=0;OQ=433.47;QD=13.98;SB=-240.76 GT:AD:DP:GL:GQ 0/1:16,15:30:-55.68,-9.05,-50.08:99
-chr1 2328934 rs2494428 C T 252.86 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=2537.82;QD=38.45;SB=-908.73 GT:AD:DP:GL:GQ 1/1:0,66:65:-257.39,-19.59,-0.03:99
-chr1 2328975 rs2494599 T C 150.34 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=60.00;MQ0=0;OQ=1601.93;QD=34.08;SB=-647.90 GT:AD:DP:GL:GQ 1/1:0,47:46:-163.80,-13.86,-0.02:99
-chr1 2328999 rs6671730 G A 141.04 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=617.02;QD=15.43;SB=-196.85 GT:AD:DP:GL:GQ 0/1:20,20:39:-76.74,-11.75,-69.55:99
-chr1 2329255 rs2494429 A G 318.55 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.40;MQ0=0;OQ=347.51;QD=11.21;SB=-114.76 GT:AD:DP:GL:GQ 0/1:16,15:29:-46.78,-8.74,-56.84:99
-chr1 2329287 rs4648634 C T 185.49 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.86;MQ=59.06;MQ0=0;OQ=270.55;QD=13.53;SB=-158.18 GT:AD:DP:GL:GQ 0/1:11,9:17:-35.47,-5.13,-24.67:99
-chr1 2329933 . C G 22.59 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=58.67;MQ0=0;OQ=614.01;QD=12.53;SB=-287.97 GT:AD:DP:GL:GQ 0/1:22,27:40:-76.76,-12.08,-83.82:99
-chr1 2330060 rs2494598 T C 290.44 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=58.95;MQ0=0;OQ=481.10;QD=12.03;SB=-246.32 GT:AD:DP:GL:GQ 0/1:19,21:39:-63.16,-11.76,-72.17:99
-chr1 2332427 . C T 0.21 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=10.66;MQ=58.03;MQ0=0;OQ=1034.47;QD=16.96;SB=-503.70 GT:AD:DP:GL:GQ 0/1:28,33:58:-124.21,-17.48,-97.70:99
-chr1 2333054 rs2494597 T C 55.95 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.48;MQ0=0;OQ=1376.62;QD=31.29;SB=-454.42 GT:AD:DP:GL:GQ 1/1:0,44:41:-141.27,-12.35,-0.02:99
-chr1 2334551 rs2494595 A G 104.16 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=58.99;MQ0=0;OQ=304.12;QD=13.22;SB=-164.34 GT:AD:DP:GL:GQ 0/1:12,11:22:-40.32,-6.63,-44.91:99
-chr1 2334785 rs9424320 T C 95.96 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=59.20;MQ0=0;OQ=385.94;QD=13.31;SB=-75.78 GT:AD:DP:GL:GQ 0/1:11,17:25:-49.42,-7.54,-38.41:99
-chr1 2335959 rs7556447 C G 349.75 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=56.82;MQ0=0;OQ=713.10;QD=13.71;SB=-329.23 GT:AD:DP:GL:GQ 0/1:30,22:47:-88.76,-14.16,-115.39:99
-chr1 2336342 rs4648839 T C 24.11 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=49.60;MQ0=0;OQ=479.90;QD=20.87;SB=-161.36 GT:AD:DP:GL:GQ 1/1:1,22:17:-51.60,-5.13,-0.02:51.09
-chr1 2336383 rs10910065 G C 120.25 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=52.63;MQ0=0;OQ=649.76;QD=18.05;SB=-286.56 GT:AD:DP:GL:GQ 0/1:17,19:34:-78.51,-10.25,-66.28:99
-chr1 2336384 rs10910066 T C 189.89 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=52.63;MQ0=0;OQ=539.82;QD=14.99;SB=-236.31 GT:AD:DP:GL:GQ 0/1:17,19:36:-68.12,-10.85,-65.37:99
-chr1 2336612 . G A 111.33 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=53.01;MQ0=0;OQ=620.89;QD=13.80;SB=-302.81 GT:AD:DP:GL:GQ 0/1:24,21:40:-77.43,-12.05,-71.03:99
-chr1 2337326 rs12746918 C T 6.83 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=7.69;MQ=54.86;MQ0=0;OQ=484.18;QD=9.68;SB=-259.25 GT:AD:DP:GL:GQ 0/1:29,21:42:-64.36,-12.66,-87.95:99
-chr1 2337359 . C T 7.61 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=4.85;MQ=55.32;MQ0=0;OQ=435.73;QD=9.68;SB=-169.11 GT:AD:DP:GL:GQ 0/1:27,17:41:-59.22,-12.37,-82.09:99
-chr1 2337436 . G T 34.30 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=57.73;MQ0=0;OQ=368.11;QD=11.87;SB=-146.62 GT:AD:DP:GL:GQ 0/1:16,15:30:-49.13,-9.04,-55.91:99
-chr1 2337592 rs12184328 G A 0.69 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=8.46;MQ=57.94;MQ0=0;OQ=510.09;QD=15.00;SB=-111.95 GT:AD:DP:GL:GQ 0/1:17,16:33:-64.24,-9.94,-57.68:99
-chr1 2337900 rs10910068 T C 14.61 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=3;HaplotypeScore=1.32;MQ=56.47;MQ0=0;OQ=310.27;QD=9.13;SB=-165.49 GT:AD:DP:GL:GQ 0/1:15,19:29:-43.06,-8.75,-59.62:99
-chr1 2339629 rs2494432 G A 402.74 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.15;MQ0=0;OQ=824.63;QD=16.83;SB=-334.87 GT:AD:DP:GL:GQ 0/1:23,26:44:-99.01,-13.26,-63.50:99
-chr1 2339896 . C T 167.28 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=715.32;QD=13.50;SB=-333.31 GT:AD:DP:GL:GQ 0/1:31,22:52:-90.49,-15.68,-97.09:99
-chr1 2340772 rs10910070 G A 197.79 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=60.00;MQ0=0;OQ=631.24;QD=14.35;SB=-260.25 GT:AD:DP:GL:GQ 0/1:23,21:43:-79.37,-12.96,-74.56:99
-chr1 2340956 rs11577147 A G 10.98 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=289.51;QD=8.77;SB=-78.79 GT:AD:DP:GL:GQ 0/1:19,14:32:-41.88,-9.65,-72.03:99
-chr1 2341435 rs11590507 G A 0.61 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=5.72;MQ=57.66;MQ0=0;OQ=472.75;QD=15.76;SB=-44.54 GT:AD:DP:GL:GQ 0/1:14,15:29:-59.30,-8.74,-51.63:99
-chr1 2341559 rs3935659 T C 7.79 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=3.23;MQ=59.25;MQ0=0;OQ=287.36;QD=11.49;SB=-29.91 GT:AD:DP:GL:GQ 0/1:13,12:25:-39.55,-7.53,-50.79:99
-chr1 2341739 rs3935660 C T 165.26 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=58.09;MQ0=0;OQ=670.17;QD=13.68;SB=-195.21 GT:AD:DP:GL:GQ 0/1:27,21:42:-82.97,-12.67,-64.00:99
-chr1 2342006 rs12731309 C T 203.63 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=58.88;MQ0=0;OQ=846.80;QD=15.68;SB=-399.13 GT:AD:DP:GL:GQ 0/1:28,26:51:-103.32,-15.36,-93.02:99
-chr1 2342252 . A T 13.40 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=20.03;MQ=56.40;MQ0=0;QD=0.29;SB=20.83 GT:AD:DP:GL:GQ 0/1:37,6:32:-14.24,-9.64,-106.31:46.04
-chr1 2342253 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=16;HaplotypeScore=7.92;MQ=56.40;MQ0=0;OQ=132.41;QD=2.82;SB=14.63 GT:AD:DP:GL:GQ 0/1:39,8:37:-27.67,-11.15,-101.20:99
-chr1 2342945 rs10910071 A G 300.82 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=58.83;MQ0=0;OQ=1016.43;QD=13.20;SB=-494.01 GT:AD:DP:GL:GQ 0/1:41,36:76:-127.82,-22.90,-155.86:99
-chr1 2343155 rs12143389 C T 127 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=58.70;MQ0=1;OQ=925.95;QD=15.69;SB=-402.44 GT:AD:DP:GL:GQ 0/1:31,28:58:-113.35,-17.47,-107.32:99
-chr1 2343729 rs35799953 G T 69.33 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.02;MQ0=0;OQ=852.19;QD=13.75;SB=-419.16 GT:AD:DP:GL:GQ 0/1:33,29:62:-107.18,-18.68,-104.15:99
-chr1 2343876 rs34574702 C T 503.31 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1119.07;QD=15.54;SB=-507.56 GT:AD:DP:GL:GQ 0/1:37,35:71:-136.60,-21.41,-114.39:99
-chr1 2344230 rs12022832 T C 209.47 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=1.97;MQ=58.42;MQ0=0;OQ=1122.84;QD=12.62;SB=-438.76 GT:AD:DP:GL:GQ 0/1:44,45:86:-141.48,-25.92,-179.52:99
-chr1 2344260 rs12096965 C T 229.98 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.88;MQ0=0;OQ=1606.93;QD=18.26;SB=-801.37 GT:AD:DP:GL:GQ 0/1:41,47:83:-188.99,-25.01,-117.57:99
-chr1 2344423 rs12097032 C T 484.25 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=986.20;QD=13.33;SB=-465.97 GT:AD:DP:GL:GQ 0/1:43,31:74:-124.19,-22.29,-159.47:99
-chr1 2344746 rs10797421 G A 65.48 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.32;MQ0=1;OQ=3166.01;QD=39.09;SB=-1482.03 GT:AD:DP:GL:GQ 1/1:0,81:79:-320.20,-23.80,-0.02:99
-chr1 2345260 . A G 75.95 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=59.23;MQ0=0;OQ=680.86;QD=11.35;SB=-282.57 GT:AD:DP:GL:GQ 0/1:36,24:58:-88.84,-17.47,-139.70:99
-chr1 2346437 rs4648840 A G 47.43 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.94;MQ0=0;OQ=537.49;QD=18.53;SB=-194.00 GT:AD:DP:GL:GQ 0/1:11,18:29:-65.77,-8.74,-43.90:99
-chr1 2346772 rs2494433 G A 58.11 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=56.91;MQ0=0;OQ=1163.67;QD=17.63;SB=-493.51 GT:AD:DP:GL:GQ 0/1:29,36:61:-138.03,-18.37,-99.55:99
-chr1 2347335 rs2494434 T C 559.97 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.75;MQ0=0;OQ=1472.38;QD=29.45;SB=-544.87 GT:AD:DP:GL:GQ 1/1:0,50:48:-150.87,-14.48,-0.05:99
-chr1 2347933 rs2494588 C T 188.87 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=57.48;MQ0=0;OQ=702.34;QD=16.33;SB=-327.35 GT:AD:DP:GL:GQ 0/1:19,24:41:-85.88,-12.36,-61.93:99
-chr1 2348381 rs55852252 G A 9.22 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=6.28;MQ=58.74;MQ0=0;OQ=406.10;QD=10.98;SB=-128.60 GT:AD:DP:GL:GQ 0/1:20,16:33:-53.85,-9.96,-60.26:99
-chr1 2348618 rs2494587 C T 128.74 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=58.45;MQ0=0;OQ=376.88;QD=12.56;SB=-173.14 GT:AD:DP:GL:GQ 0/1:17,13:28:-49.41,-8.44,-50.72:99
-chr1 2348708 rs12116913 G C 294.62 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=640.63;QD=17.31;SB=-259.09 GT:AD:DP:GL:GQ 0/1:14,23:34:-77.61,-10.26,-60.10:99
-chr1 2349777 rs2494436 T C 163.31 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=59.34;MQ0=0;OQ=309.46;QD=8.84;SB=-92.69 GT:AD:DP:GL:GQ 0/1:19,16:32:-43.87,-9.64,-70.50:99
-chr1 2349800 rs7515934 C T 251.15 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=58.83;MQ0=0;OQ=424.25;QD=11.78;SB=-175.26 GT:AD:DP:GL:GQ 0/1:19,17:28:-54.15,-8.45,-42.69:99
-chr1 2350992 rs10910075 C T 473.62 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=647.50;QD=14.08;SB=-334.47 GT:AD:DP:GL:GQ 0/1:24,22:45:-81.60,-13.57,-79.99:99
-chr1 2351241 . T G 21.83 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=2;HaplotypeScore=2.69;MQ=59.58;MQ0=0;QD=0.40;SB=68.21 GT:AD:DP:GL:GQ 0/1:36,19:40:-17.52,-12.05,-117.29:54.64
-chr1 2351880 rs4531246 G T 25.70 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=6.77;MQ=57.66;MQ0=0;OQ=504.52;QD=12.61;SB=-172.18 GT:AD:DP:GL:GQ 0/1:16,23:33:-63.68,-9.95,-50.73:99
-chr1 2352624 rs10797424 A T 924.88 Indel AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.64;MQ=59.45;MQ0=0;QD=16.52;SB=-353.59 GT:AD:DP:GL:GQ 0/1:25,31:52:-111.44,-15.67,-81.17:99
-chr1 2352687 rs2494641 C T 290.78 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=59.48;MQ0=0;OQ=558.90;QD=11.89;SB=-269.24 GT:AD:DP:GL:GQ 0/1:28,19:43:-72.14,-12.96,-80.82:99
-chr1 2353187 rs2494640 G C 26.97 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=4.41;MQ=59.56;MQ0=0;OQ=532.94;QD=10.25;SB=-240.06 GT:AD:DP:GL:GQ 0/1:33,18:51:-71.97,-15.39,-132.20:99
-chr1 2361858 rs12756220 T C 1.74 PASS AC=1;AF=0.50;AN=2;DB;DP=140;Dels=0.00;HRun=2;HaplotypeScore=7.14;MQ=34.26;MQ0=3;OQ=1721.38;QD=12.30;SB=-137.87 GT:AD:DP:GL:GQ 0/1:41,97:98:-204.99,-29.57,-118.98:99
-chr1 2361893 rs34648463 T G 24.56 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=3.90;MQ=42.90;MQ0=5;OQ=1167.25;QD=12.83;SB=-195.79 GT:AD:DP:GL:GQ 0/1:32,58:69:-140.80,-20.79,-99.18:99
-chr1 2361936 rs28669301 A C 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=18.37;MQ=47.88;MQ0=0;OQ=797.11;QD=9.96;SB=-212.34 GT:AD:DP:GL:GQ 0/1:30,48:65:-102.59,-19.60,-99.90:99
-chr1 2361993 rs2494638 G C 0.10 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=3.02;MQ=48.10;MQ0=3;OQ=294.71;QD=3.68;SB=53.21 GT:AD:DP:GL:GQ 0/1:57,23:60:-50.84,-18.09,-206.36:99
-chr1 2363043 . G A 28.79 PASS AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.42;MQ=59.14;MQ0=0;OQ=346.36;QD=12.83;SB=-157.68 GT:AD:DP:GL:GQ 0/1:14,13:24:-45.16,-7.24,-42.35:99
-chr1 2380627 . C G 34.70 LowQual AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=57.50;MQ0=0;QD=0.48;SB=-30.39 GT:AD:DP:GL:GQ 0/1:66,6:63:-25.74,-18.99,-243.93:67.54
-chr1 2380700 rs28508164 T C 2.51 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.08;MQ0=1;OQ=73.76;QD=1.76;SB=-56.90 GT:AD:DP:GL:GQ 0/1:36,6:33:-20.60,-9.94,-107.88:99
-chr1 2380723 . G C 46.32 LowQual AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=2;HaplotypeScore=2.29;MQ=49.69;MQ0=1;QD=2.72;SB=-23.39 GT:AD:DP:GL:GQ 0/1:12,5:11:-11.23,-3.32,-34.81:79.16
-chr1 2380725 . C T 43.06 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=4.03;MQ=49.69;MQ0=1;QD=2.53;SB=5.04 GT:AD:DP:GL:GQ 0/1:12,5:11:-10.90,-3.32,-27.83:75.90
-chr1 2380739 . G C 31.92 LowQual AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=2;HaplotypeScore=1.16;MQ=44.53;MQ0=1;QD=1.88;SB=-3.98 GT:AD:DP:GL:GQ 0/1:10,7:9:-9.19,-2.71,-29.02:64.75
-chr1 2380741 . C T 23.47 LowQual AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=43.38;MQ0=1;QD=1.47;SB=-3.99 GT:AD:DP:GL:GQ 0/1:10,6:8:-8.04,-2.42,-18.12:56.29
-chr1 2380787 . C G 11.87 PASS AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=3.66;MQ=41.08;MQ0=2;OQ=228.10;QD=9.12;SB=-107.32 GT:AD:DP:GL:GQ 0/1:13,12:14:-30.31,-4.22,-31.36:99
-chr1 2380789 . T C 0.06 PASS AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=2;HaplotypeScore=3.66;MQ=41.08;MQ0=2;OQ=146.59;QD=5.86;SB=-69.76 GT:AD:DP:GL:GQ 0/1:13,12:14:-22.16,-4.22,-27.36:99
-chr1 2380812 . C T 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=1;HaplotypeScore=13.92;MQ=46.38;MQ0=1;OQ=329.40;QD=9.98;SB=-91.91 GT:AD:DP:GL:GQ 0/1:15,18:19:-41.95,-5.73,-28.82:99
-chr1 2380819 . C G 37.83 LowQual AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=9.81;MQ=46.57;MQ0=1;QD=1.08;SB=-27.83 GT:AD:DP:GL:GQ 0/1:27,8:18:-12.49,-5.42,-65.92:70.67
-chr1 2382567 . A G 10.80 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=573.70;QD=14.34;SB=-186.56 GT:AD:DP:GL:GQ 0/1:16,24:36:-71.50,-10.85,-55.65:99
-chr1 2390539 rs56368227 C T 147.22 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=58.63;MQ0=0;OQ=772.55;QD=15.15;SB=-231.31 GT:AD:DP:GL:GQ 0/1:25,25:47:-96.89,-16.35,-71.90:99
-chr1 2391510 rs942818 T C 169.46 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=1503.43;QD=30.07;SB=-692.23 GT:AD:DP:GL:GQ 1/1:0,50:44:-153.95,-13.26,-0.02:99
-chr1 2393714 rs10910080 G A 120.05 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=2.52;MQ=58.38;MQ0=0;OQ=343.05;QD=13.19;SB=-140.60 GT:AD:DP:GL:GQ 0/1:13,13:24:-44.83,-7.24,-36.59:99
-chr1 2394116 rs2494626 C T 263.72 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=58.95;MQ0=0;OQ=492.85;QD=12.32;SB=-207.19 GT:AD:DP:GL:GQ 0/1:23,17:37:-63.72,-11.16,-67.50:99
-chr1 2398521 rs1536155 A G 7.46 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=3;HaplotypeScore=2.26;MQ=58.44;MQ0=0;OQ=280.60;QD=10.39;SB=-38.80 GT:AD:DP:GL:GQ 0/1:14,13:25:-38.88,-7.54,-51.71:99
-chr1 2399136 rs12049628 A G 275.01 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=58.16;MQ0=0;OQ=457.42;QD=9.94;SB=-243.30 GT:AD:DP:GL:GQ 0/1:24,22:43:-61.98,-12.96,-96.02:99
-chr1 2399220 rs59417818 G A 58.40 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=60.00;MQ0=0;OQ=406.26;QD=15.63;SB=-103.61 GT:AD:DP:GL:GQ 0/1:12,13:24:-51.14,-7.23,-38.48:99
-chr1 2399752 rs12727342 A G 0.92 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=4.77;MQ=57.40;MQ0=0;OQ=225.70;QD=6.10;SB=-108.60 GT:AD:DP:GL:GQ 0/1:20,17:31:-35.20,-9.35,-75.95:99
-chr1 2399993 . G C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.11;MQ=57.31;MQ0=0;OQ=125.38;QD=3.58;SB=53.21 GT:AD:DP:GL:GQ 0/1:25,10:27:-23.96,-8.14,-94.75:99
-chr1 2400649 rs11799501 C T 116.65 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=4.89;MQ=60.00;MQ0=0;OQ=748.36;QD=14.39;SB=-393.78 GT:AD:DP:GL:GQ 0/1:28,24:51:-93.50,-15.38,-86.98:99
-chr1 2401311 rs10797428 A G 76.46 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=59.53;MQ0=0;OQ=638.41;QD=15.96;SB=-314.23 GT:AD:DP:GL:GQ 0/1:15,25:38:-78.58,-11.46,-54.60:99
-chr1 2402139 rs4648638 A T 283.51 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.43;MQ0=0;OQ=382.69;QD=11.60;SB=-121.80 GT:AD:DP:GL:GQ 0/1:19,14:31:-50.89,-9.34,-63.99:99
-chr1 2403494 rs942817 G C 329.65 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=58.68;MQ0=0;OQ=865.92;QD=18.82;SB=-441.92 GT:AD:DP:GL:GQ 0/1:21,25:43:-102.83,-12.96,-79.86:99
-chr1 2404788 rs4995304 G A 54.16 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=55.45;MQ0=0;OQ=801.00;QD=19.54;SB=-282.18 GT:AD:DP:GL:GQ 0/1:16,24:39:-95.13,-11.75,-53.28:99
-chr1 2405062 . T G 6.04 PASS AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=55.86;MQ0=0;OQ=164.49;QD=7.15;SB=2.04 GT:AD:DP:GL:GQ 0/1:15,8:23:-26.66,-6.93,-55.71:99
-chr1 2405078 . C T 5.98 PASS AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=52.76;MQ0=0;OQ=151.99;QD=6.61;SB=-0.99 GT:AD:DP:GL:GQ 0/1:16,7:20:-24.51,-6.03,-50.27:99
-chr1 2405106 . G T 34.21 LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=4.38;MQ=49.04;MQ0=0;QD=1.63;SB=-10.00 GT:AD:DP:GL:GQ 0/1:16,5:14:-10.92,-4.22,-37.23:67.05
-chr1 2405179 . T G 0.09 PASS AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=3;HaplotypeScore=3.52;MQ=52.14;MQ0=0;OQ=147.78;QD=8.21;SB=-98.66 GT:AD:DP:GL:GQ 0/1:11,7:13:-21.98,-3.92,-24.09:99
-chr1 2405189 . T C 0.04 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DP=19;Dels=0.00;HRun=3;HaplotypeScore=5.56;MQ=47.05;MQ0=0;OQ=344.28;QD=18.12;SB=-173.40 GT:AD:DP:GL:GQ 1/1:0,19:11:-38.02,-3.32,-0.01:33.08
-chr1 2405210 . C A 0.76 PASS AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=2.86;MQ=39.01;MQ0=0;OQ=86.77;QD=6.20;SB=-60.75 GT:AD:DP:GL:GQ 0/1:10,4:8:-14.37,-2.41,-11.67:92.61
-chr1 2405220 . G C 0.99 PASS AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=39.01;MQ0=0;OQ=62.38;QD=4.46;SB=-40.43 GT:AD:DP:GL:GQ 0/1:10,4:7:-11.64,-2.12,-15.93:95.21
-chr1 2405254 . T C 25.50 LowQual AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=3;HaplotypeScore=1.85;MQ=37.93;MQ0=1;QD=3.64;SB=-6.99 GT:AD:DP:GL:GQ 0/1:3,4:4:-7.04,-1.21,-6.92:57.17
-chr1 2405275 . C A 10.07 PASS AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=32.15;MQ0=1;OQ=98.76;QD=10.97;SB=-39.94 GT:AD:DP:GL:GQ 1/1:5,4:4:-13.41,-1.21,-0.00:12.03
-chr1 2405285 . G C 5.32 PASS AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=37.51;MQ0=1;OQ=185.89;QD=12.39;SB=-10.00 GT:AD:DP:GL:GQ 0/1:8,7:7:-23.98,-2.11,-4.50:23.85
-chr1 2405307 . G C 0.94 PASS AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=44.11;MQ0=0;OQ=225.33;QD=17.33;SB=-6.99 GT:AD:DP:GL:GQ 0/1:5,8:9:-28.53,-2.71,-8.94:62.30
-chr1 2405357 rs61763948 T C 6.42 PASS AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=58.63;MQ0=0;OQ=296.15;QD=17.42;SB=-3.98 GT:AD:DP:GL:GQ 0/1:4,13:16:-37.72,-4.82,-15.46:99
-chr1 2406217 rs4648639 G A 225.22 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=51.38;MQ0=0;OQ=834.51;QD=18.14;SB=-265.24 GT:AD:DP:GL:GQ 0/1:20,26:45:-100.29,-13.55,-72.00:99
-chr1 2407818 rs4648640 G A 162.08 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.42;MQ=59.09;MQ0=0;OQ=709.86;QD=15.43;SB=-272.15 GT:AD:DP:GL:GQ 0/1:23,23:44:-87.53,-13.26,-76.87:99
-chr1 2408795 rs10910082 C T 122.37 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.49;MQ0=0;OQ=319.86;QD=7.11;SB=-107.45 GT:AD:DP:GL:GQ 0/1:33,12:44:-48.52,-13.25,-117.65:99
-chr1 2410450 rs10752744 T C 140.49 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=60.00;MQ0=0;OQ=499.26;QD=10.62;SB=-158.91 GT:AD:DP:GL:GQ 0/1:28,19:47:-67.37,-14.16,-113.54:99
-chr1 2410773 rs6668720 A G 120.35 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=58.84;MQ0=0;OQ=320.90;QD=8.02;SB=-52.83 GT:AD:DP:GL:GQ 0/1:24,16:36:-46.22,-10.85,-86.61:99
-chr1 2412474 rs2477699 G A 360.42 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=58.60;MQ0=0;OQ=676.25;QD=13.52;SB=-318.34 GT:AD:DP:GL:GQ 0/1:25,25:46:-84.77,-13.86,-87.14:99
-chr1 2413426 rs3001349 C G 122.02 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=4.47;MQ=59.07;MQ0=0;OQ=984.04;QD=19.68;SB=-507.27 GT:AD:DP:GL:GQ 0/1:22,28:50:-116.76,-15.07,-93.45:99
-chr1 2414277 rs2477701 T C 471.99 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=1313.31;QD=32.03;SB=-482.12 GT:AD:DP:GL:GQ 1/1:0,41:41:-134.95,-12.36,-0.03:99
-chr1 2414754 rs2477702 T C 257.38 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=58.58;MQ0=0;OQ=407.32;QD=11.31;SB=-181.54 GT:AD:DP:GL:GQ 0/1:18,17:33:-53.96,-9.95,-62.99:99
-chr1 2415234 . G A 52.54 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.50;MQ=58.25;MQ0=0;OQ=558.86;QD=13.97;SB=-294.85 GT:AD:DP:GL:GQ 0/1:20,20:36:-70.03,-10.86,-54.36:99
-chr1 2415852 rs2477703 C T 47.65 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=7.69;MQ=58.80;MQ0=0;OQ=763.15;QD=13.16;SB=-352.50 GT:AD:DP:GL:GQ 0/1:34,24:57:-96.78,-17.18,-104.35:99
-chr1 2416626 rs3001347 A G 166.06 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=58.74;MQ0=0;OQ=303.26;QD=8.20;SB=-170.50 GT:AD:DP:GL:GQ 0/1:20,17:33:-43.56,-9.95,-71.18:99
-chr1 2417572 rs3762444 C T 276.23 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=447.88;QD=14.93;SB=-199.90 GT:AD:DP:GL:GQ 0/1:15,15:29:-56.82,-8.74,-44.39:99
-chr1 2418734 rs2477706 T C 40.91 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=58.67;MQ0=0;OQ=224.99;QD=6.43;SB=-131.52 GT:AD:DP:GL:GQ 0/1:20,15:30:-34.83,-9.05,-71.11:99
-chr1 2422191 rs4648641 C A 142.70 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.65;MQ0=0;OQ=139.36;QD=6.33;SB=-88.78 GT:AD:DP:GL:GQ 0/1:13,9:20:-23.25,-6.03,-44.88:99
-chr1 2422622 rs4648642 G A 142.31 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=59.39;MQ0=0;OQ=411.20;QD=10.82;SB=-172.27 GT:AD:DP:GL:GQ 0/1:23,15:36:-55.26,-10.86,-70.83:99
-chr1 2422899 . G A 37.84 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=59.45;MQ0=0;OQ=458.87;QD=13.50;SB=-199.87 GT:AD:DP:GL:GQ 0/1:18,16:31:-58.52,-9.34,-51.58:99
-chr1 2423328 . G A 53.96 PASS AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=296.62;QD=12.90;SB=-35.64 GT:AD:DP:GL:GQ 0/1:13,10:22:-39.58,-6.63,-40.93:99
-chr1 2423754 rs55874156 G A 35.47 LowQual AC=1;AF=0.50;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=5.91;SB=-7.00 GT:AD:DP:GL:GQ 0/1:3,3:5:-8.34,-1.51,-8.96:68.30
-chr1 2423760 rs12736998 C T 230.21 PASS AC=1;AF=0.50;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=70.89;QD=11.81;SB=-46.66 GT:AD:DP:GL:GQ 0/1:3,3:6:-12.18,-1.81,-9.71:78.98
-chr1 2424604 rs3814298 C T 190.56 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=60.00;MQ0=0;OQ=798.59;QD=18.57;SB=-384.92 GT:AD:DP:GL:GQ 0/1:19,24:41:-95.50,-12.36,-53.02:99
-chr1 2428628 rs12725663 C T 86.80 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=59.46;MQ0=0;OQ=892.70;QD=20.76;SB=-466.01 GT:AD:DP:GL:GQ 0/1:16,27:41:-104.92,-12.36,-47.45:99
-chr1 2429459 rs2494621 C A 2.75 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=3;HaplotypeScore=1.26;MQ=59.48;MQ0=0;OQ=889.11;QD=20.21;SB=-361.22 GT:AD:DP:GL:GQ 0/1:15,29:43:-105.15,-12.95,-49.46:99
-chr1 2429541 rs4648559 C T 370.29 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=862.47;QD=17.60;SB=-340.86 GT:AD:DP:GL:GQ 0/1:22,27:49:-104.31,-14.78,-68.65:99
-chr1 2429545 rs3791180 G C 362.92 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=669.25;QD=13.12;SB=-329.42 GT:AD:DP:GL:GQ 0/1:24,27:45:-83.79,-13.58,-96.76:99
-chr1 2434274 rs7535528 G A 398.69 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=57.41;MQ0=0;OQ=974.09;QD=16.23;SB=-447.47 GT:AD:DP:GL:GQ 0/1:29,31:55:-117.28,-16.58,-80.59:99
-chr1 2440170 rs56168662 G C 440.84 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=641.06;QD=13.94;SB=-291.00 GT:AD:DP:GL:GQ 0/1:24,22:44:-80.67,-13.28,-95.39:99
-chr1 2442429 rs2985862 T C 118.89 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=58.11;MQ0=0;OQ=446.59;QD=12.07;SB=-57.29 GT:AD:DP:GL:GQ 0/1:20,17:36:-58.79,-10.85,-82.58:99
-chr1 2442985 . C G 26.50 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=2.73;MQ=57.66;MQ0=0;QD=0.66;SB=53.21 GT:AD:DP:GL:GQ 0/1:27,13:28:-14.38,-8.45,-107.19:59.33
-chr1 2443996 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=42.41;MQ=51.42;MQ0=0;OQ=532.54;QD=4.29;SB=-103.57 GT:AD:DP:GL:GQ 0/1:93,31:115:-91.18,-34.64,-325.86:99
-chr1 2444008 rs12757829 A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=24.89;MQ=51.04;MQ0=0;OQ=890.38;QD=6.31;SB=-413.05 GT:AD:DP:GL:GQ 0/1:89,52:127:-130.59,-38.27,-352.78:99
-chr1 2444025 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=0;HaplotypeScore=101.62;MQ=51.11;MQ0=0;OQ=575.04;QD=3.76;SB=-161.02 GT:AD:DP:GL:GQ 0/1:119,34:145:-104.47,-43.68,-467.68:99
-chr1 2444046 rs11582708 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.00;HRun=3;HaplotypeScore=36.45;MQ=48.57;MQ0=0;OQ=119.48;QD=0.71;SB=230.81 GT:AD:DP:GL:GQ 0/1:152,17:154:-61.64,-46.41,-606.32:99
-chr1 2444064 rs11583446 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=165;Dels=0.00;HRun=0;HaplotypeScore=21.72;MQ=47.52;MQ0=0;OQ=2894.91;QD=17.54;SB=-1278.77 GT:AD:DP:GL:GQ 0/1:56,109:148:-337.38,-44.60,-196.45:99
-chr1 2444078 rs2494629 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=179;Dels=0.00;HRun=0;HaplotypeScore=85.91;MQ=46.23;MQ0=1;OQ=3166.59;QD=17.69;SB=-903.91 GT:AD:DP:GL:GQ 0/1:79,100:143:-363.06,-43.11,-245.67:99
-chr1 2444084 rs11583448 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=183;Dels=0.00;HRun=0;HaplotypeScore=146.19;MQ=45.66;MQ0=1;OQ=1337.56;QD=7.31;SB=32.08 GT:AD:DP:GL:GQ 0/1:128,54:167:-187.36,-50.32,-447.47:99
-chr1 2444090 rs11582711 C T 0.69 PASS AC=1;AF=0.50;AN=2;DB;DP=184;Dels=0.00;HRun=1;HaplotypeScore=9.96;MQ=45.23;MQ0=1;OQ=1767.35;QD=9.61;SB=-110.22 GT:AD:DP:GL:GQ 0/1:119,64:165:-229.73,-49.72,-378.76:99
-chr1 2444114 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=1;HaplotypeScore=224.24;MQ=44.82;MQ0=1;OQ=1189.56;QD=7.12;SB=-484.53 GT:AD:DP:GL:GQ 0/1:105,62:153:-168.35,-46.11,-399.99:99
-chr1 2444123 rs60947977 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=164;Dels=0.00;HRun=1;HaplotypeScore=187.19;MQ=44.56;MQ0=1;OQ=222.03;QD=1.35;SB=140.46 GT:AD:DP:GL:GQ 0/1:146,18:145:-69.17,-43.68,-451.95:99
-chr1 2444144 rs12735280 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=159;Dels=0.00;HRun=0;HaplotypeScore=41.21;MQ=45.78;MQ0=2;OQ=126.97;QD=0.80;SB=158.55 GT:AD:DP:GL:GQ 0/1:146,13:126:-53.98,-38.00,-474.20:99
-chr1 2444156 rs61763952 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.00;HRun=1;HaplotypeScore=50.63;MQ=44.65;MQ0=2;OQ=841.78;QD=5.89;SB=-177.38 GT:AD:DP:GL:GQ 0/1:107,36:119:-123.33,-35.87,-307.59:99
-chr1 2444175 . A G 1992.57 SnpCluster AC=1;AF=0.50;AN=2;DP=119;Dels=0.00;HRun=1;HaplotypeScore=57.72;MQ=43.73;MQ0=1;QD=16.74;SB=-969.28 GT:AD:DP:GL:GQ 0/1:46,73:107:-234.78,-32.23,-167.74:99
-chr1 2444179 . C T 733.69 SnpCluster AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=1;HaplotypeScore=94.68;MQ=43.15;MQ0=1;QD=6.79;SB=-249.70 GT:AD:DP:GL:GQ 0/1:79,29:94:-104.98,-28.32,-236.84:99
-chr1 2444180 . T C 74.50 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=102.88;MQ=43.30;MQ0=1;QD=0.72;SB=40.74 GT:AD:DP:GL:GQ 0/1:89,15:92:-38.46,-27.73,-318.94:99
-chr1 2444188 . C T 230.63 SnpCluster AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=1;HaplotypeScore=69.58;MQ=42.94;MQ0=1;QD=2.33;SB=-68.96 GT:AD:DP:GL:GQ 0/1:80,18:83:-51.35,-25.01,-254.74:99
-chr1 2444203 rs12723596 A G 0.31 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=13.04;MQ=41.89;MQ0=1;OQ=932.46;QD=10.25;SB=-166.34 GT:AD:DP:GL:GQ 0/1:48,43:72:-118.23,-21.70,-146.57:99
-chr1 2444214 . T G 33.51 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=90.11;MQ=41.94;MQ0=0;QD=0.39;SB=20.19 GT:AD:DP:GL:GQ 0/1:75,10:71:-28.02,-21.39,-222.83:66.35
-chr1 2444236 rs3001351 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=1;HaplotypeScore=44.56;MQ=42.21;MQ0=1;OQ=1478.32;QD=13.82;SB=-341.03 GT:AD:DP:GL:GQ 0/1:32,75:79:-174.93,-23.81,-103.79:99
-chr1 2444239 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=57.18;MQ=42.22;MQ0=1;OQ=253.01;QD=2.32;SB=-45.72 GT:AD:DP:GL:GQ 0/1:94,15:81:-52.98,-24.40,-242.61:99
-chr1 2444569 rs2494625 T C 30.67 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.30;MQ0=0;OQ=234.27;QD=7.10;SB=-122.64 GT:AD:DP:GL:GQ 0/1:20,13:30:-35.75,-9.04,-76.61:99
-chr1 2445722 rs12131236 C T 283.83 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=971.15;QD=13.87;SB=-406.34 GT:AD:DP:GL:GQ 0/1:39,31:69:-121.19,-20.79,-133.37:99
-chr1 2446063 rs3122922 A G 422.66 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.95;MQ0=0;OQ=840.10;QD=14.48;SB=-338.93 GT:AD:DP:GL:GQ 0/1:28,30:57:-104.46,-17.17,-113.53:99
-chr1 2452678 rs2494603 T C 117.86 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.28;MQ0=0;OQ=471.49;QD=14.73;SB=-130.66 GT:AD:DP:GL:GQ 0/1:12,20:28:-58.88,-8.44,-38.02:99
-chr1 2452695 rs10910087 A G 48.63 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=58.97;MQ0=0;OQ=650.54;QD=14.46;SB=-235.28 GT:AD:DP:GL:GQ 0/1:22,23:45:-81.90,-13.56,-89.06:99
-chr1 2453274 rs11583602 G A 37.53 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=1048.89;QD=19.42;SB=-532.12 GT:AD:DP:GL:GQ 0/1:23,31:52:-123.83,-15.66,-80.52:99
-chr1 2453609 rs4648645 G T 421.56 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=634.41;QD=13.22;SB=-255.25 GT:AD:DP:GL:GQ 0/1:25,23:48:-81.19,-14.46,-89.13:99
-chr1 2453905 rs6694195 G A 6.21 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=641.00;QD=22.10;SB=-187.27 GT:AD:DP:GL:GQ 0/1:9,20:26:-75.22,-7.83,-25.34:99
-chr1 2454427 rs12406506 G T 168.99 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.39;MQ0=0;OQ=384.63;QD=10.12;SB=-161.15 GT:AD:DP:GL:GQ 0/1:22,16:36:-52.59,-10.85,-75.30:99
-chr1 2454955 rs11585747 C T 158.41 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.68;MQ0=0;OQ=442.85;QD=9.63;SB=-209.92 GT:AD:DP:GL:GQ 0/1:30,16:43:-60.53,-12.97,-87.57:99
-chr1 2455004 rs9803764 C T 21.92 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=718.09;QD=21.76;SB=-255.79 GT:AD:DP:GL:GQ 0/1:12,21:31:-84.43,-9.34,-35.39:99
-chr1 2455189 rs11584295 G A 326.39 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.30;MQ0=0;OQ=897.10;QD=14.95;SB=-369.89 GT:AD:DP:GL:GQ 0/1:30,30:57:-110.18,-17.19,-92.60:99
-chr1 2455531 rs4648561 T C 59.57 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.71;MQ=60.00;MQ0=0;OQ=506.09;QD=9.04;SB=-221.92 GT:AD:DP:GL:GQ 0/1:28,28:51:-69.27,-15.38,-110.78:99
-chr1 2455652 rs3001339 C T 0.17 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=4;HaplotypeScore=3.44;MQ=59.16;MQ0=0;OQ=1028.71;QD=18.70;SB=-294.19 GT:AD:DP:GL:GQ 0/1:22,32:53:-122.12,-15.97,-77.91:99
-chr1 2455772 rs6661956 C T 143.28 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=537.50;QD=14.93;SB=-189.16 GT:AD:DP:GL:GQ 0/1:19,17:35:-67.58,-10.55,-58.49:99
-chr1 2455810 rs2494605 A G 6.95 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=3.59;MQ=59.41;MQ0=0;OQ=1343.57;QD=34.45;SB=-641.25 GT:AD:DP:GL:GQ 1/1:0,39:38:-137.96,-11.45,-0.01:99
-chr1 2456285 rs2985860 T G 0.20 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=9.84;MQ=58.13;MQ0=0;OQ=394.22;QD=7.88;SB=-79.96 GT:AD:DP:GL:GQ 0/1:20,30:34:-52.96,-10.25,-63.38:99
-chr1 2456493 rs2494606 A G 522.55 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=1382.51;QD=30.72;SB=-394.30 GT:AD:DP:GL:GQ 1/1:0,45:44:-141.87,-13.27,-0.04:99
-chr1 2460535 . T C 626.63 Indel AC=1;AF=0.50;AN=2;DP=47;Dels=0.04;HRun=0;HaplotypeScore=9.81;MQ=45.54;MQ0=0;QD=13.33;SB=-234.30 GT:AD:DP:GL:GQ 0/1:22,23:45:-78.90,-12.95,-84.01:99
-chr1 2460708 rs12042279 G A 153.95 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=58.99;MQ0=0;OQ=696.74;QD=15.15;SB=-237.53 GT:AD:DP:GL:GQ 0/1:24,22:46:-86.83,-13.87,-76.84:99
-chr1 2461941 rs1886731 T C 87.33 PASS AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=203.62;QD=14.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,9:14:-27.87,-4.22,-19.55:99
-chr1 2462004 rs4487972 G C 44.05 PASS AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=1.24;MQ=56.62;MQ0=0;OQ=71.85;QD=10.26;SB=-10.00 GT:AD:DP:GL:GQ 0/1:3,4:6:-12.28,-1.81,-12.84:99
-chr1 2464065 rs942824 T C 72.36 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=59.36;MQ0=0;OQ=370.87;QD=10.30;SB=-61.73 GT:AD:DP:GL:GQ 0/1:20,16:34:-50.61,-10.24,-77.88:99
-chr1 2465072 rs10797429 G C 201.07 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=57.71;MQ0=0;OQ=487.96;QD=13.19;SB=-257.25 GT:AD:DP:GL:GQ 0/1:21,16:34:-62.33,-10.25,-80.32:99
-chr1 2465334 rs55929178 C T 11.28 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=4.63;MQ=56.91;MQ0=0;OQ=721.66;QD=14.73;SB=-233.74 GT:AD:DP:GL:GQ 0/1:26,23:43:-88.40,-12.95,-74.05:99
-chr1 2467218 rs12097268 T A 23.21 PASS AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=190.70;QD=11.22;SB=-35.94 GT:AD:DP:GL:GQ 0/1:9,8:17:-27.48,-5.13,-30.96:99
-chr1 2468371 rs2477678 T A 119.20 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=60.00;MQ0=0;OQ=463.47;QD=13.24;SB=-147.88 GT:AD:DP:GL:GQ 0/1:17,17:32:-59.27,-9.64,-59.80:99
-chr1 2469843 rs1974044 A G 45.39 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=3.40;MQ=59.34;MQ0=0;OQ=371.34;QD=10.61;SB=-193.60 GT:AD:DP:GL:GQ 0/1:21,14:32:-50.06,-9.64,-71.49:99
-chr1 2471303 . C T 62.24 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=41.42;MQ0=6;OQ=776.47;QD=14.38;SB=-282.22 GT:AD:DP:GL:GQ 0/1:29,25:42:-93.59,-12.66,-60.88:99
-chr1 2472781 rs2147905 T C 210.38 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=57.08;MQ0=0;OQ=779.17;QD=15.90;SB=-258.93 GT:AD:DP:GL:GQ 0/1:21,26:47:-95.36,-14.16,-80.25:99
-chr1 2473130 rs3748825 T C 24.77 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=50.53;MQ0=0;OQ=489.49;QD=14.40;SB=-174.97 GT:AD:DP:GL:GQ 0/1:17,17:34:-62.48,-10.24,-67.15:99
-chr1 2473158 rs2985858 C G 170.01 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=52.63;MQ0=0;OQ=759.64;QD=17.67;SB=-375.14 GT:AD:DP:GL:GQ 0/1:22,21:42:-91.90,-12.65,-91.93:99
-chr1 2474608 rs4449972 T C 1.07 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=17.16;MQ0=14;OQ=59.70;QD=2.60;SB=-42.68 GT:AD:DP:GL:GQ 0/1:13,10:7:-11.36,-2.11,-16.47:92.53
-chr1 2474629 rs2764846 G T 13.02 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=13.44;MQ0=12;OQ=72.28;QD=4.25;SB=-10.00 GT:AD:DP:GL:GQ 1/1:7,10:3:-10.72,-0.90,-0.00:9.03
-chr1 2474959 rs10910088 A G 3.08 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=22.58;MQ0=15;OQ=106.75;QD=3.44;SB=-10.00 GT:AD:DP:GL:GQ 0/1:16,14:12:-17.58,-3.63,-21.51:99
-chr1 2475164 rs2182176 C T 397.56 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=48.51;MQ0=0;OQ=552.02;QD=13.14;SB=-223.69 GT:AD:DP:GL:GQ 0/1:24,18:39:-70.24,-11.76,-69.97:99
-chr1 2475556 rs1555791 C G 11.33 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=2.88;MQ=58.58;MQ0=0;OQ=550.02;QD=11.96;SB=-241.08 GT:AD:DP:GL:GQ 0/1:27,19:40:-70.37,-12.08,-87.80:99
-chr1 2475800 rs10910089 C A 3.66 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=9.04;MQ=58.28;MQ0=0;OQ=671.47;QD=13.70;SB=-238.39 GT:AD:DP:GL:GQ 0/1:23,26:46:-84.29,-13.86,-77.00:99
-chr1 2476366 rs61054170 G A 7.02 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=6.03;MQ=57.64;MQ0=0;OQ=224.60;QD=8.64;SB=-97.61 GT:AD:DP:GL:GQ 0/1:16,10:23:-32.68,-6.93,-48.70:99
-chr1 2476391 rs2495365 T C 262.15 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=56.62;MQ0=0;OQ=373.37;QD=12.04;SB=-190.59 GT:AD:DP:GL:GQ 0/1:16,15:29:-49.36,-8.74,-57.56:99
-chr1 2476740 rs11577783 T C 207.60 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=58.69;MQ0=0;OQ=459.72;QD=9.19;SB=-194.29 GT:AD:DP:GL:GQ 0/1:30,20:49:-64.03,-14.78,-111.22:99
-chr1 2476777 rs7550231 C T 162.70 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.21;MQ0=0;OQ=483.70;QD=13.44;SB=-69.05 GT:AD:DP:GL:GQ 0/1:20,15:32:-61.30,-9.65,-52.93:99
-chr1 2477765 rs7515633 T C 23.90 PASS AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=58.71;MQ0=0;OQ=253.35;QD=14.07;SB=-51.83 GT:AD:DP:GL:GQ 0/1:8,10:18:-34.04,-5.43,-30.81:99
-chr1 2477769 rs7544646 G C 297.66 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=6.07;MQ=56.04;MQ0=0;QD=16.54;SB=-32.86 GT:AD:DP:GL:GQ 0/1:9,9:14:-37.27,-4.22,-20.23:99
-chr1 2477776 . G C 10.29 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=1;HaplotypeScore=18.19;MQ=56.92;MQ0=0;QD=0.45;SB=20.10 GT:AD:DP:GL:GQ 0/1:13,10:13:-8.19,-3.92,-49.87:42.70
-chr1 2477778 . A C 172 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=2;HaplotypeScore=22.60;MQ=57.66;MQ0=0;QD=5.73;SB=23.08 GT:AD:DP:GL:GQ 0/1:12,18:21:-26.81,-6.33,-40.53:99
-chr1 2477836 rs2843396 C G 11.98 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=3.04;MQ=59.36;MQ0=0;OQ=1290.53;QD=35.85;SB=-556.54 GT:AD:DP:GL:GQ 1/1:0,36:34:-132.68,-10.27,-0.04:99
-chr1 2478204 rs10910090 G A 182.29 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.53;MQ0=0;OQ=449.68;QD=11.24;SB=-202.69 GT:AD:DP:GL:GQ 0/1:23,17:38:-59.71,-11.46,-71.62:99
-chr1 2479633 rs8725 C T 49.19 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.46;MQ=59.51;MQ0=0;OQ=577.64;QD=12.29;SB=-219.70 GT:AD:DP:GL:GQ 0/1:27,20:42:-73.71,-12.66,-80.51:99
-chr1 2480088 rs2234167 C T 215.09 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=60.00;MQ0=0;OQ=519.75;QD=13.33;SB=-131.13 GT:AD:DP:GL:GQ 0/1:22,17:38:-66.72,-11.46,-63.96:99
-chr1 2481753 rs11573988 C A 159.02 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.54;MQ0=0;OQ=542.33;QD=13.23;SB=-158.65 GT:AD:DP:GL:GQ 0/1:20,21:37:-68.66,-11.14,-62.61:99
-chr1 2483213 rs2234161 G A 326.82 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.71;MQ0=0;OQ=435.68;QD=12.10;SB=-173.67 GT:AD:DP:GL:GQ 0/1:20,16:32:-56.50,-9.65,-56.89:99
-chr1 2483476 rs2281852 G T 352.55 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.50;MQ0=0;OQ=604.05;QD=13.13;SB=-299.46 GT:AD:DP:GL:GQ 0/1:23,23:43:-76.65,-12.96,-66.34:99
-chr1 2483520 rs2257763 G T 186.21 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.87;MQ=58.41;MQ0=0;OQ=599.64;QD=13.63;SB=-190.60 GT:AD:DP:GL:GQ 0/1:21,23:41:-75.60,-12.36,-64.98:99
-chr1 2485488 rs2495366 C T 214.98 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.54;MQ0=0;OQ=410.34;QD=10.01;SB=-177.87 GT:AD:DP:GL:GQ 0/1:24,17:33:-54.27,-9.95,-57.69:99
-chr1 2485810 rs1886730 A G 395.82 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=201.47;QD=10.07;SB=-95.61 GT:AD:DP:GL:GQ 0/1:11,9:20:-29.46,-6.03,-42.35:99
-chr1 2486265 rs4870 T C 17.43 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=53.94;MQ0=0;OQ=133.00;QD=5.54;SB=-10.85 GT:AD:DP:GL:GQ 0/1:16,8:22:-23.21,-6.63,-59.96:99
-chr1 2486652 rs2227313 A G 323.64 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=361.41;QD=9.04;SB=-171.95 GT:AD:DP:GL:GQ 0/1:24,16:39:-51.18,-11.76,-90.45:99
-chr1 2486755 rs2227312 G T 192.71 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.51;MQ0=0;OQ=435.37;QD=11.46;SB=-199.58 GT:AD:DP:GL:GQ 0/1:21,17:35:-57.36,-10.54,-70.01:99
-chr1 2489670 rs4449972 A G 6.05 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=14.84;MQ0=21;OQ=104.96;QD=3.09;SB=-10.00 GT:AD:DP:GL:GQ 0/1:18,15:5:-15.28,-1.51,-4.27:27.62
-chr1 2489758 rs4385650 G C 16.53 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=2.00;MQ=35.98;MQ0=1;OQ=450.14;QD=15.00;SB=-208.64 GT:AD:DP:GL:GQ 0/1:17,13:27:-56.44,-8.15,-54.66:99
-chr1 2490753 rs4648647 G A 26.84 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.33;MQ=50.09;MQ0=0;OQ=371.65;QD=10.04;SB=-147.20 GT:AD:DP:GL:GQ 0/1:24,13:35:-51.00,-10.56,-68.63:99
-chr1 2490924 . G A 58.67 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=40.19;MQ0=3;OQ=773.22;QD=14.59;SB=-281.28 GT:AD:DP:GL:GQ 0/1:27,26:42:-93.26,-12.65,-67.56:99
-chr1 2491198 rs10797432 C T 12.45 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=7.73;MQ=51.44;MQ0=1;OQ=449.43;QD=8.48;SB=-221.51 GT:AD:DP:GL:GQ 0/1:35,17:47:-62.39,-14.17,-101.99:99
-chr1 2491376 rs10910092 A G 353.95 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.86;MQ0=0;OQ=953.50;QD=15.89;SB=-479.29 GT:AD:DP:GL:GQ 0/1:27,33:59:-116.41,-17.77,-105.03:99
-chr1 2491870 rs10797433 T C 399.98 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.09;MQ0=0;OQ=643.74;QD=13.99;SB=-281.26 GT:AD:DP:GL:GQ 0/1:20,26:45:-81.22,-13.56,-79.26:99
-chr1 2492640 rs6667605 C T 284.33 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=1076.76;QD=20.32;SB=-511.53 GT:AD:DP:GL:GQ 0/1:22,31:53:-126.92,-15.96,-81.92:99
-chr1 2492694 rs6672381 A G 59.10 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=2.96;MQ=59.67;MQ0=0;OQ=836.72;QD=14.68;SB=-261.21 GT:AD:DP:GL:GQ 0/1:25,31:56:-103.83,-16.88,-100.88:99
-chr1 2493042 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=3;HaplotypeScore=24.29;MQ=58.55;MQ0=0;OQ=229.07;QD=5.45;SB=41.17 GT:AD:DP:GL:GQ 0/1:24,18:31:-35.54,-9.35,-97.62:99
-chr1 2494094 rs6671426 C A 112.49 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=782.65;QD=13.98;SB=-297.63 GT:AD:DP:GL:GQ 0/1:30,26:56:-98.41,-16.86,-108.17:99
-chr1 2494223 rs28734787 T C 285.54 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.94;MQ=59.74;MQ0=0;OQ=1016.84;QD=14.32;SB=-488.08 GT:AD:DP:GL:GQ 0/1:37,34:71:-126.35,-21.38,-153.97:99
-chr1 2495573 rs10910093 C T 602.04 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1162.34;QD=15.92;SB=-466.49 GT:AD:DP:GL:GQ 0/1:38,35:73:-141.53,-22.01,-121.32:99
-chr1 2496089 rs55658746 T C 89.31 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=57.64;MQ0=0;OQ=790.54;QD=12.35;SB=-411.26 GT:AD:DP:GL:GQ 0/1:36,28:63:-101.32,-18.98,-139.07:99
-chr1 2496219 rs2477685 G T 165.82 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=55.91;MQ0=0;OQ=1646.89;QD=32.29;SB=-779.73 GT:AD:DP:GL:GQ 1/1:1,50:48:-168.30,-14.46,-0.02:99
-chr1 2496348 rs10910094 C T 138.18 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=47.91;MQ0=1;OQ=444.30;QD=9.66;SB=-141.63 GT:AD:DP:GL:GQ 0/1:26,19:40:-59.77,-12.06,-79.45:99
-chr1 2497303 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=4;HaplotypeScore=6.77;MQ=59.20;MQ0=0;OQ=63.06;QD=2.17;SB=17.06 GT:AD:DP:GL:GQ 0/1:13,16:15:-14.11,-4.52,-33.25:95.89
-chr1 2497798 rs10752745 A G 23.19 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=2.74;MQ=53.22;MQ0=0;OQ=566.34;QD=12.59;SB=-208.51 GT:AD:DP:GL:GQ 0/1:24,21:42:-72.57,-12.65,-89.49:99
-chr1 2498203 rs6675676 G C 138.01 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=30.17;MQ0=2;OQ=540.65;QD=15.02;SB=-227.70 GT:AD:DP:GL:GQ 0/1:18,18:32:-67.01,-9.66,-62.30:99
-chr1 2500615 rs10910095 G A 293.14 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=53.83;MQ0=0;OQ=619.40;QD=15.49;SB=-326.87 GT:AD:DP:GL:GQ 0/1:18,21:35:-75.77,-10.55,-51.15:99
-chr1 2501140 rs10797434 C T 359.97 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=59.72;MQ0=0;OQ=1006.21;QD=15.25;SB=-442.36 GT:AD:DP:GL:GQ 0/1:35,31:65:-123.49,-19.58,-121.16:99
-chr1 2501248 rs12129508 G A 509.24 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1099.72;QD=18.33;SB=-426.78 GT:AD:DP:GL:GQ 0/1:28,32:59:-131.03,-17.77,-95.59:99
-chr1 2502312 rs4648648 G A 10.75 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=5.67;MQ=56.86;MQ0=0;OQ=538.80;QD=17.96;SB=-254.77 GT:AD:DP:GL:GQ 0/1:13,17:27:-65.30,-8.13,-39.62:99
-chr1 2502510 rs4648649 T C 255.66 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.39;MQ0=0;OQ=590.46;QD=13.42;SB=-228.32 GT:AD:DP:GL:GQ 0/1:17,27:40:-74.40,-12.07,-60.31:99
-chr1 2502570 rs10910096 T C 112.48 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.22;MQ0=0;OQ=671.99;QD=19.20;SB=-218.66 GT:AD:DP:GL:GQ 0/1:13,22:35:-81.03,-10.54,-52.21:99
-chr1 2502755 . G A 190.59 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=20;HaplotypeScore=16.86;MQ=48.05;MQ0=1;QD=2.32;SB=89.22 GT:AD:DP:GL:GQ 0/1:62,20:60:-40.44,-18.10,-157.12:99
-chr1 2502759 . G A 95.63 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=4;HaplotypeScore=8.02;MQ=49.03;MQ0=1;QD=1.15;SB=92.21 GT:AD:DP:GL:GQ 0/1:62,21:60:-30.94,-18.09,-170.87:99
-chr1 2502764 . G A 61.94 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=4;HaplotypeScore=11.73;MQ=52.06;MQ0=1;QD=0.77;SB=101.27 GT:AD:DP:GL:GQ 0/1:64,16:66:-29.37,-19.89,-196.86:94.78
-chr1 2502769 . G A 36.83 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=4;HaplotypeScore=29.21;MQ=54.00;MQ0=1;QD=0.49;SB=101.32 GT:AD:DP:GL:GQ 0/1:66,9:67:-27.16,-20.19,-206.36:69.66
-chr1 2502915 rs4486391 A T 575.38 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=706.11;QD=12.61;SB=-348.36 GT:AD:DP:GL:GQ 0/1:31,25:55:-90.46,-16.56,-121.47:99
-chr1 2502965 rs735000 C T 134.95 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.41;MQ0=0;OQ=774.05;QD=19.85;SB=-347.38 GT:AD:DP:GL:GQ 0/1:16,23:37:-91.84,-11.15,-44.36:99
-chr1 2503076 rs734999 C T 284.99 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=51.96;MQ0=0;OQ=837.38;QD=13.51;SB=-164.65 GT:AD:DP:GL:GQ 0/1:35,27:61:-105.40,-18.37,-127.82:99
-chr1 2503492 rs2016175 C G 123.40 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=50.82;MQ0=0;OQ=1084.11;QD=19.71;SB=-398.00 GT:AD:DP:GL:GQ 0/1:24,31:54:-127.97,-16.28,-102.13:99
-chr1 2503538 rs2016366 A T 76.85 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=3.79;MQ=51.20;MQ0=0;OQ=1061.50;QD=16.33;SB=-509.95 GT:AD:DP:GL:GQ 0/1:31,34:63:-128.41,-18.98,-104.88:99
-chr1 2504435 rs2094074 C T 20.77 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=6.13;MQ=59.30;MQ0=0;OQ=1039.69;QD=17.04;SB=-426.84 GT:AD:DP:GL:GQ 0/1:29,32:61:-125.64,-18.39,-96.67:99
-chr1 2506299 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=15.52;MQ=57.83;MQ0=0;OQ=93.19;QD=2.39;SB=56.19 GT:AD:DP:GL:GQ 0/1:27,12:31:-21.95,-9.34,-90.63:99
-chr1 2511290 rs10910097 C T 251.37 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=59.70;MQ0=0;OQ=1148.10;QD=18.52;SB=-511.69 GT:AD:DP:GL:GQ 0/1:27,35:61:-136.47,-18.38,-99.00:99
-chr1 2512252 rs2296443 G A 195.68 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.53;MQ0=0;OQ=544.43;QD=13.61;SB=-235.74 GT:AD:DP:GL:GQ 0/1:18,22:33:-67.68,-9.95,-51.18:99
-chr1 2515036 . A C 42.97 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.51;MQ0=0;OQ=337.76;QD=7.68;SB=-183.81 GT:AD:DP:GL:GQ 0/1:27,17:42:-49.72,-12.66,-93.24:99
-chr1 2517538 rs2260976 A G 4.94 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.14;MQ=56.76;MQ0=0;OQ=1272.91;QD=31.05;SB=-372.36 GT:AD:DP:GL:GQ 1/1:0,41:39:-130.90,-11.76,-0.03:99
-chr1 2517993 rs2843401 T C 105.48 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=57.77;MQ0=0;OQ=962.33;QD=26.73;SB=-342.23 GT:AD:DP:GL:GQ 1/1:0,36:31:-99.85,-9.36,-0.04:93.19
-chr1 2518542 rs2843402 T C 221.44 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=60.00;MQ0=0;OQ=1968.59;QD=35.79;SB=-942.98 GT:AD:DP:GL:GQ 1/1:0,55:55:-200.46,-16.56,-0.01:99
-chr1 2518859 rs2764845 G T 123.68 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=60.00;MQ0=0;OQ=1822.58;QD=33.75;SB=-893.66 GT:AD:DP:GL:GQ 1/1:0,54:52:-185.86,-15.67,-0.02:99
-chr1 2518957 rs2843403 T C 21.95 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=1.02;MQ=56.17;MQ0=0;OQ=926.62;QD=29.89;SB=-317.56 GT:AD:DP:GL:GQ 1/1:0,31:28:-96.27,-8.44,-0.02:84.21
-chr1 2519052 rs2764842 A G 76.78 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1201.00;QD=30.79;SB=-460.21 GT:AD:DP:GL:GQ 1/1:0,39:38:-123.72,-11.46,-0.03:99
-chr1 2519220 rs2764841 G A 268.55 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=59.01;MQ0=0;OQ=1602.47;QD=34.10;SB=-756.02 GT:AD:DP:GL:GQ 1/1:0,46:43:-163.85,-12.96,-0.02:99
-chr1 2519297 rs2764840 C T 22.50 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=57.55;MQ0=0;OQ=1701.90;QD=37.00;SB=-691.34 GT:AD:DP:GL:GQ 1/1:0,46:43:-173.78,-12.95,-0.01:99
-chr1 2520418 rs2843404 T C 200.03 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.75;MQ0=0;OQ=2535.27;QD=33.80;SB=-857.06 GT:AD:DP:GL:GQ 1/1:0,75:73:-257.13,-21.99,-0.02:99
-chr1 2520554 rs2764848 G A 508.37 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2620.71;QD=40.32;SB=-1288.71 GT:AD:DP:GL:GQ 1/1:0,65:65:-265.67,-19.58,-0.01:99
-chr1 2521232 rs2985855 A C 625.35 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.53;MQ0=0;OQ=2344.13;QD=34.47;SB=-1125.14 GT:AD:DP:GL:GQ 1/1:0,68:67:-238.02,-20.18,-0.02:99
-chr1 2521327 rs6689711 T C 152.61 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.71;MQ0=0;OQ=2140.18;QD=32.93;SB=-405.31 GT:AD:DP:GL:GQ 1/1:0,65:64:-217.64,-19.29,-0.04:99
-chr1 2521365 rs6681973 C T 205.20 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1951.81;QD=38.27;SB=-716.95 GT:AD:DP:GL:GQ 1/1:0,51:50:-198.79,-15.07,-0.02:99
-chr1 2521374 rs6682043 C A 555.65 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1757.71;QD=35.87;SB=-715.96 GT:AD:DP:GL:GQ 1/1:0,49:49:-179.37,-14.76,-0.01:99
-chr1 2521839 . A G 1244.02 Indel AC=2;AF=1.00;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.74;MQ0=0;QD=31.90;SB=-233.75 GT:AD:DP:GL:GQ 1/1:1,38:37:-132.07,-11.15,-4.08:70.65
-chr1 2522276 rs2985859 T C 630.86 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.35;MQ0=0;OQ=2205.91;QD=35.58;SB=-1051.93 GT:AD:DP:GL:GQ 1/1:0,62:62:-224.19,-18.67,-0.02:99
-chr1 2522366 rs3001837 G A 528.70 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.76;MQ0=0;OQ=2660.16;QD=39.12;SB=-1251.03 GT:AD:DP:GL:GQ 1/1:0,68:68:-269.62,-20.49,-0.02:99
-chr1 2522484 rs2985857 C T 472.23 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=3579.52;QD=41.62;SB=-1476.96 GT:AD:DP:GL:GQ 1/1:0,86:86:-356.95,-25.90,-0.02:99
-chr1 2522759 rs6424092 C A 529.01 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2798.98;QD=36.83;SB=-1322.91 GT:AD:DP:GL:GQ 1/1:0,76:75:-283.50,-22.58,-0.01:99
-chr1 2523213 . A C 18.95 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=2;HaplotypeScore=7.65;MQ=59.48;MQ0=0;QD=0.43;SB=47.15 GT:AD:DP:GL:GQ 0/1:27,17:32:-14.82,-9.65,-87.52:51.73
-chr1 2530333 . T C 29.61 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=7.38;MQ=54.61;MQ0=1;QD=0.64;SB=33.57 GT:AD:DP:GL:GQ 0/1:37,5:39:-21.30,-15.06,-133.42:62.44
-chr1 2530381 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=20.91;MQ=54.33;MQ0=2;OQ=131.02;QD=2.85;SB=56.21 GT:AD:DP:GL:GQ 0/1:39,7:40:-28.44,-12.05,-138.25:99
-chr1 2537888 rs4379628 A G 6.62 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=4.46;MQ=59.75;MQ0=0;OQ=2299.26;QD=31.07;SB=-964.39 GT:AD:DP:GL:GQ 1/1:0,74:72:-233.58,-21.72,-0.07:99
-chr1 2541362 . T C 301.82 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=1099.72;QD=15.94;SB=-567.63 GT:AD:DP:GL:GQ 0/1:31,38:67:-133.44,-20.18,-122.76:99
-chr1 2541645 rs12117343 C T 412.42 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.64;MQ0=0;OQ=1073.30;QD=16.77;SB=-513.05 GT:AD:DP:GL:GQ 0/1:32,32:63:-129.60,-18.99,-99.14:99
-chr1 2543980 rs61765771 T G 318.19 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=635.63;QD=14.45;SB=-332.88 GT:AD:DP:GL:GQ 0/1:20,24:43:-79.80,-12.95,-72.63:99
-chr1 2546847 . G A 17.21 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.27;MQ0=0;OQ=1072.92;QD=19.87;SB=-329.89 GT:AD:DP:GL:GQ 0/1:19,35:49:-125.34,-14.77,-58.33:99
-chr1 2547051 rs7523364 C T 194.54 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=55.15;MQ0=0;OQ=3310.62;QD=39.41;SB=-1353.31 GT:AD:DP:GL:GQ 1/1:0,84:83:-330.06,-25.01,-0.03:99
-chr1 2547391 rs6422657 C T 186.53 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=2783.42;QD=38.13;SB=-1334.38 GT:AD:DP:GL:GQ 1/1:1,71:72:-284.61,-21.69,-2.69:99
-chr1 2548168 rs6668149 A C 205.71 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.44;MQ0=0;OQ=2627.68;QD=35.04;SB=-1288.37 GT:AD:DP:GL:GQ 1/1:0,75:74:-266.37,-22.29,-0.02:99
-chr1 2548600 rs12748729 C T 627.69 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2890.24;QD=37.05;SB=-1331.37 GT:AD:DP:GL:GQ 1/1:0,78:77:-292.65,-23.21,-0.04:99
-chr1 2549449 rs12730932 T G 82.44 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.16;MQ0=0;OQ=1601.53;QD=32.03;SB=-737.35 GT:AD:DP:GL:GQ 1/1:0,50:47:-163.76,-14.16,-0.02:99
-chr1 2550595 rs4648657 A G 5.77 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.33;MQ0=0;OQ=350.17;QD=25.01;SB=-43.68 GT:AD:DP:GL:GQ 1/1:0,14:13:-38.62,-3.93,-0.02:39.06
-chr1 2550742 rs4648658 G A 10.42 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.23;MQ0=0;OQ=551.80;QD=32.46;SB=-125.66 GT:AD:DP:GL:GQ 1/1:0,17:15:-58.77,-4.52,-0.01:45.14
-chr1 2550763 rs4648659 T G 0.34 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=55.52;MQ0=0;OQ=309.18;QD=19.32;SB=-86.14 GT:AD:DP:GL:GQ 1/1:0,16:12:-34.52,-3.62,-0.02:36.01
-chr1 2551146 rs28532547 T G 110.03 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=53.21;MQ0=0;OQ=1059.23;QD=30.26;SB=-548.02 GT:AD:DP:GL:GQ 1/1:0,35:32:-109.53,-9.64,-0.02:96.26
-chr1 2552029 rs4648564 C T 0.99 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=7.47;MQ=58.85;MQ0=1;OQ=2625.23;QD=39.18;SB=-1028.39 GT:AD:DP:GL:GQ 1/1:1,66:66:-266.13,-19.88,-0.02:99
-chr1 2553110 rs12749591 G T 349.46 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=723.50;QD=32.89;SB=-266.61 GT:AD:DP:GL:GQ 1/1:0,22:22:-75.95,-6.63,-0.01:66.17
-chr1 2553270 . G T 45.57 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=10.71;MQ=58.27;MQ0=0;QD=1.69;SB=20.06 GT:AD:DP:GL:GQ 0/1:17,10:20:-13.87,-6.03,-50.95:78.40
-chr1 2554043 rs6698817 T C 9.96 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=887.43;QD=26.89;SB=-424.17 GT:AD:DP:GL:GQ 1/1:0,33:29:-92.36,-8.75,-0.03:87.20
-chr1 2554325 rs12752515 T C 17.47 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.11;MQ0=0;OQ=775.65;QD=29.83;SB=-403.34 GT:AD:DP:GL:GQ 1/1:0,26:25:-81.17,-7.54,-0.02:75.18
-chr1 2554665 rs12723864 A G 160.30 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=60.00;MQ0=0;OQ=414.17;QD=9.86;SB=-197.61 GT:AD:DP:GL:GQ 0/1:26,16:42:-57.35,-12.65,-104.43:99
-chr1 2555187 rs55649610 G T 258.93 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=951.34;QD=20.68;SB=-431.11 GT:AD:DP:GL:GQ 0/1:14,32:46:-112.28,-13.86,-47.81:99
-chr1 2555885 . C T 1.81 PASS AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=57.89;MQ0=0;OQ=690.84;QD=23.82;SB=-291.84 GT:AD:DP:GL:GQ 0/1:8,21:28:-80.81,-8.44,-25.16:99
-chr1 2556197 . T G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=11.22;MQ=54.79;MQ0=0;OQ=66.20;QD=3.31;SB=-59.09 GT:AD:DP:GL:GQ 0/1:16,4:14:-14.12,-4.22,-33.87:99
-chr1 2556342 rs6657378 T G 21.29 LowQual AC=1;AF=0.50;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=3.31;MQ=37.32;MQ0=0;QD=3.04;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,2:5:-6.92,-1.51,-9.22:54.10
-chr1 2556350 rs6671623 G A 0.26 PASS AC=2;AF=1.00;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=6.12;MQ=40.03;MQ0=1;OQ=207.84;QD=25.98;SB=-95.34 GT:AD:DP:GL:GQ 1/1:1,7:6:-24.36,-1.81,-0.00:18.06
-chr1 2556357 rs6671625 G A 182.34 PASS AC=2;AF=1.00;AN=2;DB;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.68;MQ0=1;OQ=89.01;QD=14.84;SB=-50.56 GT:AD:DP:GL:GQ 1/1:1,5:3:-12.39,-0.90,-0.00:9.03
-chr1 2556483 rs61765773 C T 0.15 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=11.29;MQ=45.87;MQ0=1;OQ=153.35;QD=5.11;SB=26.06 GT:AD:DP:GL:GQ 0/1:23,7:20:-24.65,-6.03,-43.69:99
-chr1 2556797 rs61765774 G C 178.56 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.58;MQ0=0;OQ=587.02;QD=17.79;SB=-197.49 GT:AD:DP:GL:GQ 0/1:16,17:32:-71.63,-9.64,-64.58:99
-chr1 2557281 rs12756665 C T 187.45 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.25;MQ=59.28;MQ0=0;OQ=722.29;QD=11.29;SB=-327.75 GT:AD:DP:GL:GQ 0/1:40,24:64:-94.79,-19.28,-146.15:99
-chr1 2557351 rs12739597 A G 96.49 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.10;MQ0=0;OQ=470.82;QD=7.03;SB=-215.20 GT:AD:DP:GL:GQ 0/1:44,23:67:-70.56,-20.20,-177.79:99
-chr1 2557360 rs6666788 A G 33.09 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=2.28;MQ=59.11;MQ0=0;OQ=2385.56;QD=35.08;SB=-1067.87 GT:AD:DP:GL:GQ 1/1:0,68:67:-242.16,-20.18,-0.02:99
-chr1 2558285 rs4648661 T C 264.82 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=58.76;MQ0=0;OQ=708.13;QD=11.80;SB=-352.07 GT:AD:DP:GL:GQ 0/1:29,30:58:-91.59,-17.49,-110.76:99
-chr1 2559883 rs4648565 A G 68.89 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=1657.37;QD=34.53;SB=-734.30 GT:AD:DP:GL:GQ 1/1:0,48:47:-169.34,-14.16,-0.02:99
-chr1 2561683 rs28690427 A G 44.51 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.48;MQ0=0;OQ=1625.27;QD=33.17;SB=-564.36 GT:AD:DP:GL:GQ 1/1:0,49:47:-166.13,-14.16,-0.02:99
-chr1 2563059 rs4648662 A G 36.80 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=57.88;MQ0=0;OQ=986.78;QD=31.83;SB=-278.44 GT:AD:DP:GL:GQ 1/1:0,30:28:-102.27,-8.43,-0.01:84.25
-chr1 2563587 rs4648663 A C 432.35 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=1398.67;QD=33.30;SB=-656.05 GT:AD:DP:GL:GQ 1/1:0,42:41:-143.47,-12.35,-0.02:99
-chr1 2563763 rs12726651 C T 270.02 PASS AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.90;MQ0=0;OQ=164.81;QD=9.69;SB=-74.06 GT:AD:DP:GL:GQ 0/1:11,6:16:-24.59,-4.82,-34.68:99
-chr1 2563938 rs9970196 T C 22.23 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.81;MQ=59.28;MQ0=0;OQ=1014.31;QD=31.70;SB=-295.06 GT:AD:DP:GL:GQ 1/1:0,32:30:-105.04,-9.04,-0.02:90.22
-chr1 2566315 rs6604989 T C 18.73 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.60;MQ0=0;OQ=1647.45;QD=28.40;SB=-794.64 GT:AD:DP:GL:GQ 1/1:0,58:52:-168.38,-15.68,-0.05:99
-chr1 2568080 rs12744876 G T 183.89 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=58.84;MQ0=0;OQ=1106.09;QD=17.02;SB=-318.70 GT:AD:DP:GL:GQ 0/1:29,35:64:-133.17,-19.27,-104.78:99
-chr1 2571402 rs28611770 A G 632.64 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.32;MQ0=1;OQ=2534.42;QD=35.20;SB=-1124.79 GT:AD:DP:GL:GQ 1/1:0,72:70:-257.05,-21.08,-0.02:99
-chr1 2571473 . C T 26.42 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=54.51;MQ0=1;OQ=420.48;QD=8.58;SB=-192.15 GT:AD:DP:GL:GQ 0/1:33,16:41:-57.68,-12.35,-93.81:99
-chr1 2571476 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=3;HaplotypeScore=3.65;MQ=54.65;MQ0=1;OQ=290.92;QD=5.94;SB=-124.22 GT:AD:DP:GL:GQ 0/1:34,15:41:-44.73,-12.36,-110.26:99
-chr1 2571505 . C T 0.62 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=52.42;MQ0=0;OQ=231.01;QD=4.20;SB=-18.13 GT:AD:DP:GL:GQ 0/1:42,13:52:-42.05,-15.67,-144.47:99
-chr1 2571527 . A T 14.96 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.42;MQ=51.64;MQ0=0;OQ=434.87;QD=7.91;SB=-142.65 GT:AD:DP:GL:GQ 0/1:35,20:51:-62.14,-15.37,-122.01:99
-chr1 2572200 rs12732266 C G 51.91 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=5.49;MQ=58.04;MQ0=0;OQ=559.70;QD=11.91;SB=-261.11 GT:AD:DP:GL:GQ 0/1:26,21:41:-71.62,-12.36,-99.19:99
-chr1 2573315 rs12738064 C T 887.13 DPFilter;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=133;Dels=0.00;HRun=0;HaplotypeScore=171.89;MQ=24.26;MQ0=9;QD=6.67;SB=-137.01 GT:AD:DP:GL:GQ 1/1:10,119:25:-96.41,-11.12,-4.11:70.06
-chr1 2573322 . T G 343.20 DPFilter;SnpCluster AC=2;AF=1.00;AN=2;DP=144;Dels=0.01;HRun=0;HaplotypeScore=333.45;MQ=22.10;MQ0=11;QD=2.38;SB=-10.00 GT:AD:DP:GL:GQ 1/1:29,104:11:-37.91,-3.31,-0.00:33.09
-chr1 2573323 . C G 95.88 DPFilter;SnpCluster AC=2;AF=1.00;AN=2;DP=144;Dels=0.01;HRun=1;HaplotypeScore=342.46;MQ=22.10;MQ0=11;QD=0.67;SB=-10.00 GT:AD:DP:GL:GQ 1/1:103,36:3:-13.08,-0.90,-0.00:9.03
-chr1 2573324 . G C 506.46 DPFilter;Indel;SnpCluster AC=2;AF=1.00;AN=2;DP=147;Dels=0.01;HRun=1;HaplotypeScore=339.64;MQ=22.28;MQ0=11;QD=3.45;SB=-10.00 GT:AD:DP:GL:GQ 1/1:15,116:14:-57.88,-7.75,-3.65:41.01
-chr1 2573329 rs12734173 G A 146.94 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=218;Dels=0.00;HRun=1;HaplotypeScore=513.41;MQ=21.01;MQ0=20;QD=0.67;SB=-10.00 GT:AD:DP:GL:GQ 0/1:132,84:24:-25.21,-7.23,-67.73:99
-chr1 2573338 . C G 83.26 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=710.09;MQ=20.03;MQ0=40;QD=0.29;SB=-0.97 GT:AD:DP:GL:GQ 0/1:254,26:38:-23.06,-11.45,-135.55:99
-chr1 2573342 . C A 213.70 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=322;Dels=0.00;HRun=1;HaplotypeScore=673.88;MQ=20.07;MQ0=46;QD=0.66;SB=1.99 GT:AD:DP:GL:GQ 0/1:277,45:41:-37.01,-12.35,-108.15:99
-chr1 2573345 . A C 1425.86 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=338;Dels=0.02;HRun=3;HaplotypeScore=632.90;MQ=20.26;MQ0=48;QD=4.22;SB=-172.79 GT:AD:DP:GL:GQ 0/1:132,186:90:-176.25,-30.38,-146.77:99
-chr1 2573350 . T C 293.04 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=399;Dels=0.00;HRun=0;HaplotypeScore=691.94;MQ=19.84;MQ0=54;QD=0.73;SB=44.71 GT:AD:DP:GL:GQ 0/1:277,71:78:-104.74,-72.15,-238.43:99
-chr1 2573354 . C A 62.42 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=432;Dels=0.00;HRun=1;HaplotypeScore=848.73;MQ=19.94;MQ0=56;QD=0.14;SB=50.16 GT:AD:DP:GL:GQ 0/1:379,40:51:-24.89,-15.36,-155.69:95.25
-chr1 2573358 . T C 129.61 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=457;Dels=0.00;HRun=1;HaplotypeScore=683.78;MQ=19.93;MQ0=58;QD=0.28;SB=-34.65 GT:AD:DP:GL:GQ 0/1:367,56:52:-42.68,-26.43,-169.09:99
-chr1 2573364 rs55738582 C G 575.47 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=473;Dels=0.00;HRun=1;HaplotypeScore=961.37;MQ=19.71;MQ0=62;QD=1.22;SB=-67.52 GT:AD:DP:GL:GQ 0/1:411,23:43:-73.79,-12.96,-105.12:99
-chr1 2573370 rs55790383 G A 775.08 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=470;Dels=0.00;HRun=1;HaplotypeScore=917.62;MQ=19.72;MQ0=61;QD=1.65;SB=-367.90 GT:AD:DP:GL:GQ 0/1:265,173:48:-98.76,-17.97,-89.48:99
-chr1 2573371 rs55657722 G C 3489.08 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=470;Dels=0.00;HRun=0;HaplotypeScore=944.58;MQ=19.72;MQ0=61;QD=7.42;SB=-1002.13 GT:AD:DP:GL:GQ 1/1:47,398:84:-347.91,-28.85,-3.68:99
-chr1 2573372 . A G 46.25 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=482;Dels=0.00;HRun=2;HaplotypeScore=999.26;MQ=19.79;MQ0=62;QD=0.10;SB=26.11 GT:AD:DP:GL:GQ 0/1:425,48:54:-24.18,-16.27,-184.96:79.08
-chr1 2573374 . C A 193.31 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=490;Dels=0.00;HRun=1;HaplotypeScore=979.59;MQ=19.99;MQ0=60;QD=0.39;SB=-75.64 GT:AD:DP:GL:GQ 0/1:438,45:65:-48.93,-26.32,-189.47:99
-chr1 2573382 . C A 261.06 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=502;Dels=0.01;HRun=1;HaplotypeScore=946.29;MQ=19.95;MQ0=64;QD=0.52;SB=17.04 GT:AD:DP:GL:GQ 0/1:391,72:71:-67.99,-38.60,-197.52:99
-chr1 2573383 . C G 55.13 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=502;Dels=0.00;HRun=0;HaplotypeScore=899.21;MQ=20.04;MQ0=63;QD=0.11;SB=37.79 GT:AD:DP:GL:GQ 0/1:438,33:65:-35.38,-26.59,-240.37:87.97
-chr1 2573385 . C A 145.75 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=503;Dels=0.00;HRun=0;HaplotypeScore=828.45;MQ=20.02;MQ0=64;QD=0.29;SB=-23.06 GT:AD:DP:GL:GQ 0/1:432,48:49:-35.99,-18.13,-141.74:99
-chr1 2573390 . T C 166.49 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=483;Dels=0.01;HRun=0;HaplotypeScore=660.44;MQ=20.15;MQ0=61;QD=0.34;SB=-43.82 GT:AD:DP:GL:GQ 0/1:342,96:43:-35.67,-15.74,-120.66:99
-chr1 2573404 rs56352113 A C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=412;Dels=0.00;HRun=1;HaplotypeScore=785.14;MQ=20.24;MQ0=50;OQ=1746.05;QD=4.24;SB=-272.76 GT:AD:DP:GL:GQ 1/1:48,316:72:-242.08,-66.55,-63.89:26.61
-chr1 2573410 rs12759490 A G 148.65 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DB;DP=383;Dels=0.00;HRun=0;HaplotypeScore=682.21;MQ=20.35;MQ0=44;QD=0.39;SB=-43.26 GT:AD:DP:GL:GQ 0/1:276,96:57:-35.34,-17.19,-178.84:99
-chr1 2573423 . C A 163.64 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=1;HaplotypeScore=927.03;MQ=21.34;MQ0=33;QD=0.58;SB=26.07 GT:AD:DP:GL:GQ 0/1:224,38:48:-34.11,-14.46,-128.40:99
-chr1 2573426 . C A 487.43 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=275;Dels=0.00;HRun=0;HaplotypeScore=598.86;MQ=21.74;MQ0=31;QD=1.77;SB=-144.61 GT:AD:DP:GL:GQ 0/1:229,39:67:-72.21,-20.18,-167.89:99
-chr1 2573431 . T A 55.01 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=244;Dels=0.00;HRun=0;HaplotypeScore=414.88;MQ=22.20;MQ0=23;QD=0.23;SB=-37.64 GT:AD:DP:GL:GQ 0/1:198,17:62:-42.64,-33.85,-190.83:87.85
-chr1 2573439 rs12738268 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=199;Dels=0.00;HRun=0;HaplotypeScore=197.41;MQ=23.56;MQ0=17;OQ=1379.28;QD=6.93;SB=-473.52 GT:AD:DP:GL:GQ 0/1:75,107:51:-156.58,-15.37,-36.65:99
-chr1 2573442 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=0;HaplotypeScore=181.20;MQ=23.67;MQ0=14;OQ=103.36;QD=0.53;SB=32.13 GT:AD:DP:GL:GQ 0/1:179,11:55:-39.39,-25.77,-162.27:99
-chr1 2573451 . A G 329.45 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=156;Dels=0.00;HRun=0;HaplotypeScore=168.85;MQ=25.71;MQ0=9;QD=2.11;SB=-36.23 GT:AD:DP:GL:GQ 0/1:80,76:54:-52.50,-16.27,-154.97:99
-chr1 2573454 rs55760918 C G 556.39 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=140;Dels=0.00;HRun=0;HaplotypeScore=206.74;MQ=26.90;MQ0=8;QD=3.97;SB=-52.80 GT:AD:DP:GL:GQ 0/1:46,88:51:-74.30,-15.38,-138.45:99
-chr1 2573455 rs56258540 A C 134.39 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=145;Dels=0.00;HRun=1;HaplotypeScore=218.70;MQ=26.73;MQ0=9;QD=0.93;SB=-34.89 GT:AD:DP:GL:GQ 0/1:91,52:51:-34.62,-17.90,-142.52:99
-chr1 2573485 rs55714819 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=241;Dels=0.00;HRun=1;HaplotypeScore=172.11;MQ=27.92;MQ0=9;OQ=766.38;QD=3.18;SB=-61.60 GT:AD:DP:GL:GQ 0/1:152,84:106:-115.24,-35.32,-271.38:99
-chr1 2573510 rs61765777 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=332;Dels=0.00;HRun=1;HaplotypeScore=336.11;MQ=27.14;MQ0=14;OQ=2271.13;QD=6.84;SB=-383.23 GT:AD:DP:GL:GQ 0/1:103,229:130:-269.56,-39.16,-232.28:99
-chr1 2573523 . C T 271.88 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=476;Dels=0.00;HRun=0;HaplotypeScore=388.59;MQ=26.03;MQ0=25;QD=0.57;SB=-54.44 GT:AD:DP:GL:GQ 0/1:421,51:171:-82.00,-51.53,-495.80:99
-chr1 2573524 . G A 673.59 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=489;Dels=0.00;HRun=0;HaplotypeScore=381.72;MQ=26.07;MQ0=26;QD=1.38;SB=-235.66 GT:AD:DP:GL:GQ 0/1:348,136:174:-123.14,-52.50,-452.42:99
-chr1 2573532 . A G 266.78 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=584;Dels=0.00;HRun=0;HaplotypeScore=454.81;MQ=26.29;MQ0=38;QD=0.46;SB=-50.09 GT:AD:DP:GL:GQ 0/1:462,118:225:-100.76,-70.80,-803.69:99
-chr1 2573533 . C T 518.62 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=590;Dels=0.00;HRun=0;HaplotypeScore=454.86;MQ=26.25;MQ0=38;QD=0.88;SB=-177.22 GT:AD:DP:GL:GQ 0/1:555,34:221:-123.94,-68.80,-639.87:99
-chr1 2573545 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=760;Dels=0.00;HRun=0;HaplotypeScore=554.01;MQ=25.28;MQ0=58;OQ=2752.41;QD=3.62;SB=-334.08 GT:AD:DP:GL:GQ 0/1:504,247:275:-368.19,-89.67,-758.94:99
-chr1 2573551 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=816;Dels=0.00;HRun=0;HaplotypeScore=706.82;MQ=24.77;MQ0=61;OQ=92.57;QD=0.11;SB=99.33 GT:AD:DP:GL:GQ 0/1:767,48:306:-104.74,-92.20,-1021.89:99
-chr1 2573560 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=935;Dels=0.00;HRun=0;HaplotypeScore=771.90;MQ=24.19;MQ0=82;OQ=1354.07;QD=1.45;SB=-436.68 GT:AD:DP:GL:GQ 0/1:723,199:339:-248.95,-110.26,-942.99:99
-chr1 2573563 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=967;Dels=0.00;HRun=0;HaplotypeScore=867.36;MQ=23.97;MQ0=86;OQ=1389.93;QD=1.44;SB=161.22 GT:AD:DP:GL:GQ 0/1:819,137:345:-262.46,-120.18,-962.42:99
-chr1 2573572 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1012;Dels=0.00;HRun=0;HaplotypeScore=731.51;MQ=23.62;MQ0=98;OQ=634.63;QD=0.63;SB=-79.47 GT:AD:DP:GL:GQ 0/1:773,210:334:-172.80,-106.05,-1139.69:99
-chr1 2573600 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=878;Dels=0.00;HRun=0;HaplotypeScore=653.71;MQ=23.12;MQ0=120;OQ=1122.68;QD=1.28;SB=-567.08 GT:AD:DP:GL:GQ 0/1:678,154:296:-246.10,-130.55,-807.07:99
-chr1 2573603 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=862;Dels=0.00;HRun=0;HaplotypeScore=618.67;MQ=23.10;MQ0=123;OQ=316.50;QD=0.37;SB=-169.71 GT:AD:DP:GL:GQ 0/1:783,67:305:-136.37,-101.44,-918.41:99
-chr1 2573643 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=406;Dels=0.00;HRun=0;HaplotypeScore=240.70;MQ=22.59;MQ0=105;OQ=101.01;QD=0.25;SB=40.47 GT:AD:DP:GL:GQ 0/1:341,64:133:-53.47,-40.09,-445.02:99
-chr1 2573645 . T G 27.32 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=393;Dels=0.00;HRun=0;HaplotypeScore=214.15;MQ=22.61;MQ0=102;QD=0.07;SB=22.12 GT:AD:DP:GL:GQ 0/1:333,60:125:-43.68,-37.67,-396.83:60.15
-chr1 2573659 rs28581291 G C 4615.63 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=333;Dels=0.00;HRun=1;HaplotypeScore=205.79;MQ=24.13;MQ0=78;QD=13.86;SB=-1212.00 GT:AD:DP:GL:GQ 0/1:35,294:132:-460.56,-39.52,-82.06:99
-chr1 2573662 . C T 559.05 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=354;Dels=0.00;HRun=0;HaplotypeScore=280.21;MQ=24.11;MQ0=79;QD=1.58;SB=-274.91 GT:AD:DP:GL:GQ 0/1:309,45:145:-102.89,-43.70,-398.94:99
-chr1 2573665 . C G 1510.34 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=408;Dels=0.00;HRun=0;HaplotypeScore=325.78;MQ=24.58;MQ0=76;QD=3.70;SB=-297.94 GT:AD:DP:GL:GQ 0/1:264,141:179:-211.73,-57.41,-536.45:99
-chr1 2573688 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=651;Dels=0.00;HRun=2;HaplotypeScore=395.85;MQ=24.99;MQ0=65;OQ=362.26;QD=0.56;SB=-155.57 GT:AD:DP:GL:GQ 0/1:581,65:307:-140.30,-100.79,-1081.14:99
-chr1 2573689 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=665;Dels=0.00;HRun=0;HaplotypeScore=525.06;MQ=24.91;MQ0=65;OQ=1827.67;QD=2.75;SB=-517.28 GT:AD:DP:GL:GQ 0/1:550,112:319:-282.15,-96.10,-903.12:99
-chr1 2573699 rs28514305 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=700;Dels=0.00;HRun=1;HaplotypeScore=627.89;MQ=25.13;MQ0=51;OQ=504.00;QD=0.72;SB=-50.28 GT:AD:DP:GL:GQ 0/1:553,135:325:-164.84,-111.15,-1100.31:99
-chr1 2573722 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=939;Dels=0.00;HRun=0;HaplotypeScore=511.14;MQ=24.55;MQ0=41;OQ=652.05;QD=0.69;SB=-156.78 GT:AD:DP:GL:GQ 0/1:833,100:448:-203.46,-134.97,-1376.56:99
-chr1 2573743 . C A 1376.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=920;Dels=0.01;HRun=1;HaplotypeScore=1049.31;MQ=24.03;MQ0=45;QD=1.50;SB=-654.94 GT:AD:DP:GL:GQ 0/1:771,125:393:-273.72,-132.79,-1119.66:99
-chr1 2573744 . C A 2246.36 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=920;Dels=0.00;HRun=0;HaplotypeScore=1100.48;MQ=24.05;MQ0=45;QD=2.44;SB=-774.39 GT:AD:DP:GL:GQ 0/1:696,198:389:-363.03,-135.11,-1033.83:99
-chr1 2573747 . C T 2541.21 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=900;Dels=0.00;HRun=0;HaplotypeScore=1014.50;MQ=23.93;MQ0=43;QD=2.82;SB=-593.64 GT:AD:DP:GL:GQ 0/1:671,157:361:-422.27,-164.86,-953.11:99
-chr1 2573753 . A T 936.20 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=863;Dels=0.00;HRun=0;HaplotypeScore=1289.29;MQ=23.50;MQ0=46;QD=1.08;SB=-444.50 GT:AD:DP:GL:GQ 0/1:735,98:311:-195.18,-98.28,-961.18:99
-chr1 2573759 . C T 306.11 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=786;Dels=0.00;HRun=0;HaplotypeScore=944.88;MQ=23.40;MQ0=46;QD=0.39;SB=80.59 GT:AD:DP:GL:GQ 0/1:568,186:262:-146.29,-112.39,-779.46:99
-chr1 2573762 . C T 1224.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=751;Dels=0.00;HRun=0;HaplotypeScore=1008.25;MQ=23.38;MQ0=43;QD=1.63;SB=32.31 GT:AD:DP:GL:GQ 0/1:549,181:260:-207.81,-82.08,-705.47:99
-chr1 2573768 . G A 69.35 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=690;Dels=0.00;HRun=0;HaplotypeScore=1128.47;MQ=23.25;MQ0=39;QD=0.10;SB=181.10 GT:AD:DP:GL:GQ 0/1:645,45:222:-77.09,-66.88,-732.33:99
-chr1 2573775 rs61765778 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=598;Dels=0.00;HRun=0;HaplotypeScore=829.09;MQ=23.11;MQ0=35;OQ=51.56;QD=0.09;SB=-51.39 GT:AD:DP:GL:GQ 0/1:411,178:176:-78.89,-70.45,-552.62:84.40
-chr1 2573784 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=482;Dels=0.00;HRun=0;HaplotypeScore=533.05;MQ=23.86;MQ0=35;OQ=97.06;QD=0.20;SB=-41.06 GT:AD:DP:GL:GQ 0/1:428,39:135:-57.53,-44.54,-428.93:99
-chr1 2573791 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=376;Dels=0.00;HRun=0;HaplotypeScore=279.62;MQ=25.08;MQ0=23;OQ=809.10;QD=2.15;SB=-122.99 GT:AD:DP:GL:GQ 0/1:249,119:103:-122.37,-38.18,-240.78:99
-chr1 2573803 rs61765779 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=238;Dels=0.00;HRun=0;HaplotypeScore=273.29;MQ=27.85;MQ0=11;OQ=738.52;QD=3.10;SB=-305.23 GT:AD:DP:GL:GQ 0/1:82,152:68:-97.64,-20.50,-141.62:99
-chr1 2573809 rs61765805 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=1;HaplotypeScore=207.51;MQ=30.86;MQ0=7;OQ=486.71;QD=2.85;SB=-123.47 GT:AD:DP:GL:GQ 0/1:47,107:55:-75.59,-23.64,-159.88:99
-chr1 2573825 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.04;HRun=2;HaplotypeScore=133.51;MQ=37.12;MQ0=1;OQ=152.18;QD=1.48;SB=68.24 GT:AD:DP:GL:GQ 0/1:42,51:50:-47.81,-29.31,-160.18:99
-chr1 2573831 rs55855140 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=126.91;MQ=39.65;MQ0=1;OQ=158.89;QD=1.62;SB=62.19 GT:AD:DP:GL:GQ 0/1:53,43:46:-39.96,-20.79,-124.08:99
-chr1 2573842 . A C 115.63 SnpCluster AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=142.04;MQ=40.93;MQ0=1;QD=1.17;SB=-71.86 GT:AD:DP:GL:GQ 0/1:45,45:51:-30.22,-15.37,-141.99:99
-chr1 2573846 rs61765806 C G 427.99 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=128;Dels=0.00;HRun=0;HaplotypeScore=158.02;MQ=39.65;MQ0=2;QD=3.34;SB=50.19 GT:AD:DP:GL:GQ 0/1:94,33:65:-65.70,-19.61,-201.59:99
-chr1 2573851 . G A 820.83 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=1;HaplotypeScore=122.19;MQ=40.52;MQ0=2;QD=5.86;SB=-152.15 GT:AD:DP:GL:GQ 0/1:66,72:74:-107.66,-22.30,-166.53:99
-chr1 2573859 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=126.84;MQ=40.41;MQ0=2;OQ=121.72;QD=0.77;SB=152.53 GT:AD:DP:GL:GQ 0/1:122,36:93:-43.49,-28.03,-346.24:99
-chr1 2573901 rs35515286 G C 550.86 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=206;Dels=0.00;HRun=0;HaplotypeScore=105.96;MQ=43.03;MQ0=1;QD=2.67;SB=237.50 GT:AD:DP:GL:GQ 0/1:135,63:142:-119.31,-60.94,-520.06:99
-chr1 2573904 . G C 824.37 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=3;HaplotypeScore=109.03;MQ=42.87;MQ0=2;QD=4.04;SB=193.35 GT:AD:DP:GL:GQ 0/1:129,71:137:-131.62,-45.90,-468.47:99
-chr1 2573907 . C T 232.33 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=234;Dels=0.00;HRun=0;HaplotypeScore=169.38;MQ=41.15;MQ0=2;QD=0.99;SB=246.29 GT:AD:DP:GL:GQ 0/1:198,35:151:-72.01,-45.49,-466.42:99
-chr1 2573937 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=313;Dels=0.00;HRun=2;HaplotypeScore=156.05;MQ=41.48;MQ0=6;OQ=610.21;QD=1.95;SB=184.28 GT:AD:DP:GL:GQ 0/1:179,131:178:-121.09,-56.78,-561.52:99
-chr1 2573955 rs4648664 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=309;Dels=0.01;HRun=0;HaplotypeScore=189.00;MQ=39.75;MQ0=9;OQ=5144.30;QD=16.65;SB=-1373.56 GT:AD:DP:GL:GQ 0/1:99,207:204:-513.43,-64.42,-219.84:99
-chr1 2573957 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=0;HaplotypeScore=210.03;MQ=39.51;MQ0=9;OQ=1411.76;QD=4.57;SB=186.52 GT:AD:DP:GL:GQ 0/1:164,144:192:-204.89,-60.43,-482.07:99
-chr1 2573977 rs36074084 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=329;Dels=0.14;HRun=3;HaplotypeScore=420.13;MQ=34.94;MQ0=9;OQ=1855.95;QD=5.64;SB=145.19 GT:AD:DP:GL:GQ 0/1:152,125:193:-244.66,-55.78,-561.08:99
-chr1 2573987 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=436;Dels=0.02;HRun=3;HaplotypeScore=523.62;MQ=29.87;MQ0=18;OQ=97.02;QD=0.22;SB=235.20 GT:AD:DP:GL:GQ 0/1:315,109:216:-76.87,-63.88,-657.84:99
-chr1 2574006 rs56001931 C A 193.50 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=578;Dels=0.00;HRun=0;HaplotypeScore=796.32;MQ=26.82;MQ0=27;QD=0.33;SB=-95.26 GT:AD:DP:GL:GQ 0/1:506,46:197:-84.56,-61.92,-620.37:99
-chr1 2574010 . G A 47.43 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=576;Dels=0.00;HRun=1;HaplotypeScore=936.31;MQ=26.86;MQ0=27;QD=0.08;SB=305.98 GT:AD:DP:GL:GQ 0/1:514,37:196:-70.15,-62.12,-641.00:80.27
-chr1 2574012 . G A 1112.09 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=567;Dels=0.00;HRun=1;HaplotypeScore=881.66;MQ=26.70;MQ0=27;QD=1.96;SB=173.94 GT:AD:DP:GL:GQ 0/1:337,218:205:-176.25,-61.76,-573.77:99
-chr1 2574013 rs35375421 G C 2739.83 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=556;Dels=0.00;HRun=0;HaplotypeScore=907.42;MQ=26.74;MQ0=27;QD=4.93;SB=-98.82 GT:AD:DP:GL:GQ 0/1:185,358:186:-340.69,-63.42,-477.87:99
-chr1 2574046 rs61765808 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=633;Dels=0.00;HRun=1;HaplotypeScore=769.62;MQ=25.77;MQ0=33;OQ=2369.47;QD=3.74;SB=-14.31 GT:AD:DP:GL:GQ 0/1:214,394:219:-332.81,-92.58,-459.77:99
-chr1 2574062 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=571;Dels=0.02;HRun=0;HaplotypeScore=1395.05;MQ=27.31;MQ0=25;OQ=270.74;QD=0.47;SB=9.21 GT:AD:DP:GL:GQ 0/1:393,159:156:-79.45,-49.09,-466.84:99
-chr1 2574081 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=574;Dels=0.00;HRun=0;HaplotypeScore=636.02;MQ=28.62;MQ0=23;OQ=102.79;QD=0.18;SB=258.30 GT:AD:DP:GL:GQ 0/1:339,178:156:-99.87,-86.31,-482.50:99
-chr1 2574099 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=481;Dels=0.01;HRun=2;HaplotypeScore=469.12;MQ=32.08;MQ0=15;OQ=332.15;QD=0.69;SB=-15.43 GT:AD:DP:GL:GQ 0/1:184,278:155:-88.85,-52.35,-456.19:99
-chr1 2574112 rs4648665 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=407;Dels=0.00;HRun=1;HaplotypeScore=376.40;MQ=32.86;MQ0=13;OQ=5520.38;QD=13.56;SB=-1708.96 GT:AD:DP:GL:GQ 1/1:7,385:151:-551.04,-45.49,-0.05:99
-chr1 2574233 rs6678571 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=482;Dels=0.00;HRun=0;HaplotypeScore=317.44;MQ=37.14;MQ0=103;OQ=51.18;QD=0.11;SB=33.13 GT:AD:DP:GL:GQ 0/1:400,76:222:-75.35,-66.94,-654.61:84.02
-chr1 2574280 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=411;Dels=0.00;HRun=0;HaplotypeScore=206.24;MQ=40.63;MQ0=25;OQ=702.83;QD=1.71;SB=165.25 GT:AD:DP:GL:GQ 0/1:262,145:248:-148.35,-74.78,-882.77:99
-chr1 2574370 rs56005609 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=224;Dels=0.00;HRun=0;HaplotypeScore=51.47;MQ=47.47;MQ0=12;OQ=160.10;QD=0.71;SB=-105.06 GT:AD:DP:GL:GQ 0/1:203,21:172:-71.19,-51.89,-483.26:99
-chr1 2574383 rs4648666 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=215;Dels=0.00;HRun=0;HaplotypeScore=154.22;MQ=48.52;MQ0=8;OQ=4531.65;QD=21.08;SB=-1293.59 GT:AD:DP:GL:GQ 0/1:45,169:169:-452.16,-50.92,-131.50:99
-chr1 2574398 rs4648667 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=297;Dels=0.00;HRun=0;HaplotypeScore=177.69;MQ=43.72;MQ0=17;OQ=1775.91;QD=5.98;SB=-869.96 GT:AD:DP:GL:GQ 0/1:211,86:190:-238.16,-57.29,-446.26:99
-chr1 2574435 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=784;Dels=0.00;HRun=0;HaplotypeScore=476.42;MQ=30.94;MQ0=61;OQ=552.66;QD=0.70;SB=-126.39 GT:AD:DP:GL:GQ 0/1:497,287:235:-129.39,-70.84,-631.70:99
-chr1 2574468 . A C 45.91 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=925;Dels=0.00;HRun=3;HaplotypeScore=499.34;MQ=30.78;MQ0=79;QD=0.05;SB=344.95 GT:AD:DP:GL:GQ 0/1:799,98:301:-105.40,-97.53,-960.73:78.74
-chr1 2574499 . C A 22.95 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=665;Dels=0.00;HRun=2;HaplotypeScore=681.86;MQ=36.15;MQ0=63;QD=0.03;SB=89.36 GT:AD:DP:GL:GQ 0/1:533,92:270:-145.98,-140.40,-853.73:55.76
-chr1 2574516 rs61765812 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=416;Dels=0.00;HRun=0;HaplotypeScore=217.32;MQ=43.57;MQ0=35;OQ=129.59;QD=0.31;SB=68.68 GT:AD:DP:GL:GQ 0/1:278,133:243:-89.48,-73.24,-851.13:99
-chr1 2574566 rs28558799 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=282;Dels=0.00;HRun=0;HaplotypeScore=119.44;MQ=43.46;MQ0=13;OQ=5625.16;QD=19.95;SB=-2459.11 GT:AD:DP:GL:GQ 0/1:49,230:200:-561.52,-60.25,-174.15:99
-chr1 2574594 rs56062029 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=452;Dels=0.00;HRun=2;HaplotypeScore=294.75;MQ=33.13;MQ0=30;OQ=1117.30;QD=2.47;SB=-453.09 GT:AD:DP:GL:GQ 0/1:369,56:211:-181.97,-66.96,-565.43:99
-chr1 2574621 rs57267388 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=571;Dels=0.00;HRun=0;HaplotypeScore=771.91;MQ=31.23;MQ0=33;OQ=342.14;QD=0.60;SB=-185.77 GT:AD:DP:GL:GQ 0/1:283,102:222:-153.52,-116.02,-729.22:99
-chr1 2574649 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=993;Dels=0.00;HRun=0;HaplotypeScore=693.61;MQ=28.27;MQ0=75;OQ=1079.32;QD=1.09;SB=-556.01 GT:AD:DP:GL:GQ 0/1:844,137:401:-235.64,-124.42,-1471.20:99
-chr1 2574659 . A C 29.66 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=980;Dels=0.00;HRun=3;HaplotypeScore=948.25;MQ=27.73;MQ0=79;QD=0.03;SB=242.38 GT:AD:DP:GL:GQ 0/1:842,123:385:-128.64,-122.39,-1217.71:62.50
-chr1 2574737 rs61765814 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=400;Dels=0.00;HRun=0;HaplotypeScore=203.09;MQ=41.26;MQ0=24;OQ=736.68;QD=1.84;SB=-0.60 GT:AD:DP:GL:GQ 0/1:202,185:205:-145.42,-68.47,-717.91:99
-chr1 2574757 rs61765815 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=370;Dels=0.00;HRun=0;HaplotypeScore=249.27;MQ=42.55;MQ0=25;OQ=384.28;QD=1.04;SB=73.46 GT:AD:DP:GL:GQ 0/1:205,136:201:-108.67,-66.96,-637.57:99
-chr1 2574806 rs61765816 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=433;Dels=0.00;HRun=0;HaplotypeScore=271.20;MQ=41.78;MQ0=23;OQ=447.69;QD=1.03;SB=-108.45 GT:AD:DP:GL:GQ 0/1:271,156:236:-119.20,-71.14,-762.60:99
-chr1 2574851 rs6691639 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=333;Dels=0.00;HRun=0;HaplotypeScore=216.92;MQ=45.13;MQ0=5;OQ=7151.39;QD=21.48;SB=-2958.67 GT:AD:DP:GL:GQ 0/1:25,306:212:-714.14,-63.86,-81.27:99
-chr1 2574904 rs6604990 T C 6413.62 DPFilter;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=427;Dels=0.06;HRun=3;HaplotypeScore=563.84;MQ=34.54;MQ0=9;QD=15.02;SB=-2045.14 GT:AD:DP:GL:GQ 1/1:119,272:189:-640.36,-56.34,-15.02:99
-chr1 2574911 . A C 149.58 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=456;Dels=0.00;HRun=3;HaplotypeScore=557.08;MQ=32.46;MQ0=11;QD=0.33;SB=-79.57 GT:AD:DP:GL:GQ 0/1:298,141:171:-69.76,-51.52,-530.42:99
-chr1 2574914 . A G 786.99 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=464;Dels=0.02;HRun=1;HaplotypeScore=590.68;MQ=31.99;MQ0=11;QD=1.70;SB=-166.87 GT:AD:DP:GL:GQ 0/1:189,264:184:-140.25,-58.27,-581.91:99
-chr1 2574924 rs61765818 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=562;Dels=0.00;HRun=1;HaplotypeScore=584.85;MQ=29.44;MQ0=16;OQ=664.13;QD=1.18;SB=-72.04 GT:AD:DP:GL:GQ 0/1:412,132:178:-126.09,-56.39,-566.98:99
-chr1 2574942 rs60506177 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=681;Dels=0.00;HRun=2;HaplotypeScore=1240.22;MQ=29.22;MQ0=28;OQ=4364.77;QD=6.41;SB=-1487.53 GT:AD:DP:GL:GQ 0/1:160,495:256:-435.48,-89.03,-503.32:99
-chr1 2574956 rs59191334 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=906;Dels=0.00;HRun=0;HaplotypeScore=851.71;MQ=29.72;MQ0=44;OQ=1149.69;QD=1.27;SB=-284.23 GT:AD:DP:GL:GQ 0/1:632,252:274:-200.91,-82.66,-713.01:99
-chr1 2574986 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=944;Dels=0.00;HRun=1;HaplotypeScore=1818.61;MQ=31.01;MQ0=59;OQ=1122.41;QD=1.19;SB=-398.32 GT:AD:DP:GL:GQ 0/1:745,146:351:-246.18,-130.65,-980.48:99
-chr1 2575019 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=719;Dels=0.00;HRun=0;HaplotypeScore=472.84;MQ=36.86;MQ0=62;OQ=2013.75;QD=2.80;SB=-548.67 GT:AD:DP:GL:GQ 0/1:509,205:351:-310.40,-105.75,-919.85:99
-chr1 2575034 rs61763547 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=646;Dels=0.00;HRun=1;HaplotypeScore=246.19;MQ=38.01;MQ0=57;OQ=1218.08;QD=1.89;SB=297.56 GT:AD:DP:GL:GQ 0/1:304,285:351:-300.74,-175.64,-1150.43:99
-chr1 2575068 . C G 824.18 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=841;Dels=0.00;HRun=0;HaplotypeScore=834.43;MQ=32.24;MQ0=93;QD=0.98;SB=69.34 GT:AD:DP:GL:GQ 0/1:592,151:395:-352.89,-267.19,-1451.52:99
-chr1 2575069 rs11510858 C A 2054.73 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=851;Dels=0.00;HRun=0;HaplotypeScore=833.69;MQ=32.03;MQ0=94;QD=2.41;SB=-732.04 GT:AD:DP:GL:GQ 0/1:701,130:386:-337.44,-128.68,-1037.66:99
-chr1 2575076 . C G 56.74 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=869;Dels=0.00;HRun=2;HaplotypeScore=716.58;MQ=31.37;MQ0=95;QD=0.07;SB=276.82 GT:AD:DP:GL:GQ 0/1:773,41:392:-146.00,-137.04,-1458.73:89.57
-chr1 2575191 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=619;Dels=0.01;HRun=3;HaplotypeScore=666.18;MQ=32.68;MQ0=22;OQ=1037.47;QD=1.68;SB=-98.59 GT:AD:DP:GL:GQ 0/1:385,224:265:-186.87,-79.84,-734.84:99
-chr1 2575196 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=669;Dels=0.00;HRun=0;HaplotypeScore=585.81;MQ=31.95;MQ0=25;OQ=410.40;QD=0.61;SB=138.71 GT:AD:DP:GL:GQ 0/1:518,139:278:-128.14,-83.81,-902.17:99
-chr1 2575224 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=936;Dels=0.00;HRun=0;HaplotypeScore=711.05;MQ=30.70;MQ0=52;OQ=206.48;QD=0.22;SB=16.18 GT:AD:DP:GL:GQ 0/1:817,101:399:-165.30,-141.37,-1545.34:99
-chr1 2575246 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=981;Dels=0.00;HRun=1;HaplotypeScore=733.47;MQ=31.11;MQ0=67;OQ=1892.73;QD=1.93;SB=-760.65 GT:AD:DP:GL:GQ 0/1:771,204:430:-322.12,-129.56,-1274.76:99
-chr1 2575261 rs6692051 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=945;Dels=0.00;HRun=3;HaplotypeScore=358.84;MQ=32.03;MQ0=68;OQ=2338.43;QD=2.47;SB=-661.83 GT:AD:DP:GL:GQ 0/1:802,142:427:-365.78,-128.65,-1131.84:99
-chr1 2575299 . G T 161.49 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=614;Dels=0.00;HRun=1;HaplotypeScore=591.39;MQ=37.63;MQ0=50;QD=0.26;SB=20.79 GT:AD:DP:GL:GQ 0/1:494,69:362:-227.05,-207.62,-1136.93:99
-chr1 2575300 rs61765821 T C 1192.57 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=603;Dels=0.00;HRun=0;HaplotypeScore=567.88;MQ=38.04;MQ0=47;QD=1.98;SB=-535.85 GT:AD:DP:GL:GQ 0/1:348,222:348:-246.80,-124.26,-1045.28:99
-chr1 2575308 . C A 283.33 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=591;Dels=0.00;HRun=1;HaplotypeScore=502.16;MQ=39.21;MQ0=53;QD=0.48;SB=90.50 GT:AD:DP:GL:GQ 0/1:465,102:356:-142.06,-110.45,-1099.38:99
-chr1 2575350 rs28411086 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=541;Dels=0.00;HRun=2;HaplotypeScore=281.76;MQ=38.20;MQ0=48;OQ=2021.31;QD=3.74;SB=-545.18 GT:AD:DP:GL:GQ 0/1:247,291:277:-288.88,-83.46,-673.01:99
-chr1 2575391 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=992;Dels=0.00;HRun=2;HaplotypeScore=510.05;MQ=30.36;MQ0=68;OQ=227.39;QD=0.23;SB=145.08 GT:AD:DP:GL:GQ 0/1:854,132:434:-160.44,-134.42,-1359.22:99
-chr1 2575398 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1075;Dels=0.00;HRun=0;HaplotypeScore=310.34;MQ=30.19;MQ0=65;OQ=528.27;QD=0.49;SB=20.12 GT:AD:DP:GL:GQ 0/1:895,162:479:-203.83,-147.72,-1593.06:99
-chr1 2575422 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1315;Dels=0.00;HRun=1;HaplotypeScore=628.02;MQ=29.05;MQ0=70;OQ=417.47;QD=0.32;SB=307.23 GT:AD:DP:GL:GQ 0/1:1146,168:592:-223.40,-178.37,-1814.12:99
-chr1 2575443 rs6678990 C G 1968.81 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=1397;Dels=0.00;HRun=0;HaplotypeScore=834.10;MQ=29.41;MQ0=63;QD=1.41;SB=-880.90 GT:AD:DP:GL:GQ 0/1:1263,104:657:-428.32,-228.16,-2407.74:99
-chr1 2575448 . C T 306.07 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=1347;Dels=0.00;HRun=0;HaplotypeScore=969.72;MQ=29.55;MQ0=58;QD=0.23;SB=98.85 GT:AD:DP:GL:GQ 0/1:1166,127:596:-237.42,-203.53,-1765.67:99
-chr1 2575453 . G A 633.22 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=1324;Dels=0.01;HRun=0;HaplotypeScore=1094.28;MQ=29.55;MQ0=52;QD=0.48;SB=22.83 GT:AD:DP:GL:GQ 0/1:1098,210:631:-255.45,-188.85,-1774.06:99
-chr1 2575459 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1275;Dels=0.00;HRun=1;HaplotypeScore=976.35;MQ=29.72;MQ0=48;OQ=260.30;QD=0.20;SB=456.22 GT:AD:DP:GL:GQ 0/1:1186,88:626:-217.90,-188.59,-2068.65:99
-chr1 2575467 . A T 1827.05 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=1257;Dels=0.00;HRun=0;HaplotypeScore=1002.71;MQ=30.06;MQ0=39;QD=1.45;SB=-471.84 GT:AD:DP:GL:GQ 0/1:1025,208:608:-372.29,-186.30,-1881.69:99
-chr1 2575472 . C A 9687.38 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=1255;Dels=0.00;HRun=1;HaplotypeScore=858.65;MQ=30.07;MQ0=41;QD=7.72;SB=-1503.87 GT:AD:DP:GL:GQ 0/1:729,316:639:-967.74,-542.07,-1662.70:99
-chr1 2575476 rs28479903 C T 328.26 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=1232;Dels=0.00;HRun=0;HaplotypeScore=989.29;MQ=30.12;MQ0=43;QD=0.27;SB=122.56 GT:AD:DP:GL:GQ 0/1:1040,174:572:-219.19,-183.08,-1716.97:99
-chr1 2575484 rs61765822 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=1214;Dels=0.00;HRun=0;HaplotypeScore=468.08;MQ=30.51;MQ0=43;OQ=1888.53;QD=1.56;SB=-874.96 GT:AD:DP:GL:GQ 0/1:984,212:602:-396.91,-204.77,-1679.64:99
-chr1 2575509 rs7367485 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=1003;Dels=0.00;HRun=3;HaplotypeScore=708.39;MQ=31.59;MQ0=44;OQ=1317.31;QD=1.31;SB=-683.17 GT:AD:DP:GL:GQ 0/1:599,311:447:-397.20,-262.18,-1298.11:99
-chr1 2575527 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=899;Dels=0.00;HRun=1;HaplotypeScore=616.46;MQ=32.40;MQ0=36;OQ=2129.63;QD=2.37;SB=-658.87 GT:AD:DP:GL:GQ 0/1:666,188:432:-362.76,-146.52,-1154.94:99
-chr1 2575536 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=816;Dels=0.00;HRun=1;HaplotypeScore=629.02;MQ=33.06;MQ0=36;OQ=245.82;QD=0.30;SB=187.48 GT:AD:DP:GL:GQ 0/1:660,150:389:-147.61,-119.74,-1232.57:99
-chr1 2575553 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=672;Dels=0.00;HRun=0;HaplotypeScore=869.01;MQ=35.62;MQ0=23;OQ=1048.35;QD=1.56;SB=44.73 GT:AD:DP:GL:GQ 0/1:542,123:340:-220.20,-112.08,-1057.17:99
-chr1 2575577 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=529;Dels=0.00;HRun=0;HaplotypeScore=616.14;MQ=41.10;MQ0=11;OQ=295.55;QD=0.56;SB=93.12 GT:AD:DP:GL:GQ 0/1:363,155:340:-135.27,-102.43,-1079.29:99
-chr1 2575583 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=497;Dels=0.00;HRun=0;HaplotypeScore=739.15;MQ=41.67;MQ0=9;OQ=177.97;QD=0.36;SB=340.79 GT:AD:DP:GL:GQ 0/1:426,63:314:-122.58,-101.50,-1218.09:99
-chr1 2575632 rs6686754 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=363;Dels=0.00;HRun=1;HaplotypeScore=439.13;MQ=46.08;MQ0=4;OQ=7215.73;QD=19.88;SB=-2967.87 GT:AD:DP:GL:GQ 0/1:59,294:248:-720.57,-74.71,-189.55:99
-chr1 2575661 rs28498367 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=482;Dels=0.00;HRun=0;HaplotypeScore=598.03;MQ=41.57;MQ0=4;OQ=4453.10;QD=9.24;SB=-977.05 GT:AD:DP:GL:GQ 0/1:194,269:275:-444.31,-82.91,-730.02:99
-chr1 2575692 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=647;Dels=0.00;HRun=1;HaplotypeScore=594.08;MQ=36.97;MQ0=17;OQ=2155.18;QD=3.33;SB=272.10 GT:AD:DP:GL:GQ 0/1:259,365:295:-329.81,-111.01,-802.38:99
-chr1 2575711 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=667;Dels=0.00;HRun=3;HaplotypeScore=1191.59;MQ=36.49;MQ0=18;OQ=1467.43;QD=2.20;SB=-170.23 GT:AD:DP:GL:GQ 0/1:245,407:245:-231.00,-80.98,-619.30:99
-chr1 2575718 . C T 91.63 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=668;Dels=0.07;HRun=0;HaplotypeScore=726.36;MQ=36.74;MQ0=18;QD=0.14;SB=390.06 GT:AD:DP:GL:GQ 0/1:453,157:278:-93.88,-81.43,-798.07:99
-chr1 2575725 . C T 321.62 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=662;Dels=0.00;HRun=1;HaplotypeScore=724.85;MQ=36.17;MQ0=17;QD=0.49;SB=411.17 GT:AD:DP:GL:GQ 0/1:600,56:323:-132.74,-97.29,-1057.81:99
-chr1 2575728 . A T 148.72 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=660;Dels=0.00;HRun=0;HaplotypeScore=737.53;MQ=36.50;MQ0=17;QD=0.23;SB=417.37 GT:AD:DP:GL:GQ 0/1:600,48:321:-114.85,-96.69,-1096.48:99
-chr1 2575731 . G A 128.25 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=638;Dels=0.00;HRun=1;HaplotypeScore=523.34;MQ=37.45;MQ0=16;QD=0.20;SB=259.66 GT:AD:DP:GL:GQ 0/1:525,83:335:-143.82,-127.71,-1107.68:99
-chr1 2575750 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=473;Dels=0.00;HRun=1;HaplotypeScore=339.24;MQ=40.86;MQ0=6;OQ=314.90;QD=0.67;SB=-156.95 GT:AD:DP:GL:GQ 0/1:417,42:281:-123.25,-88.47,-781.88:99
-chr1 2575766 rs6694964 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=418;Dels=0.00;HRun=0;HaplotypeScore=190.54;MQ=43.00;MQ0=6;OQ=9217.59;QD=22.05;SB=-3555.11 GT:AD:DP:GL:GQ 0/1:33,383:267:-920.76,-80.43,-83.85:34.20
-chr1 2575784 rs28583924 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=426;Dels=0.00;HRun=0;HaplotypeScore=272.61;MQ=42.95;MQ0=8;OQ=181.28;QD=0.43;SB=6.29 GT:AD:DP:GL:GQ 0/1:359,64:257:-98.92,-77.51,-960.45:99
-chr1 2575825 rs6689281 T C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=557;Dels=0.01;HRun=2;HaplotypeScore=469.61;MQ=35.81;MQ0=25;OQ=9475.08;QD=17.01;SB=-3650.18 GT:AD:DP:GL:GQ 1/1:3,541:282:-946.51,-86.27,-2.51:99
-chr1 2575851 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=634;Dels=0.00;HRun=0;HaplotypeScore=686.59;MQ=33.18;MQ0=30;OQ=77.00;QD=0.12;SB=-18.66 GT:AD:DP:GL:GQ 0/1:437,151:251:-86.73,-75.75,-723.32:99
-chr1 2575861 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=670;Dels=0.00;HRun=0;HaplotypeScore=1084.95;MQ=32.16;MQ0=34;OQ=174.30;QD=0.26;SB=144.01 GT:AD:DP:GL:GQ 0/1:448,201:255:-97.68,-76.97,-707.97:99
-chr1 2575918 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=659;Dels=0.00;HRun=0;HaplotypeScore=602.10;MQ=33.55;MQ0=33;OQ=1205.47;QD=1.83;SB=-331.68 GT:AD:DP:GL:GQ 0/1:520,139:294:-212.43,-88.60,-836.61:99
-chr1 2575963 rs61765824 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=414;Dels=0.00;HRun=0;HaplotypeScore=225.65;MQ=45.71;MQ0=16;OQ=175.37;QD=0.42;SB=-3.54 GT:AD:DP:GL:GQ 0/1:256,154:262:-99.81,-78.99,-882.64:99
-chr1 2576027 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=375;Dels=0.00;HRun=0;HaplotypeScore=441.20;MQ=41.08;MQ0=22;OQ=359.44;QD=0.96;SB=-25.38 GT:AD:DP:GL:GQ 0/1:347,27:212:-103.15,-63.92,-790.76:99
-chr1 2576035 rs55917765 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=384;Dels=0.02;HRun=4;HaplotypeScore=406.51;MQ=41.42;MQ0=19;OQ=289.17;QD=0.75;SB=-132.89 GT:AD:DP:GL:GQ 0/1:212,141:214:-106.50,-74.30,-717.21:99
-chr1 2576075 rs57994724 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=300;Dels=0.03;HRun=4;HaplotypeScore=363.80;MQ=42.84;MQ0=2;OQ=76.42;QD=0.25;SB=-28.60 GT:AD:DP:GL:GQ 0/1:192,90:162:-61.96,-51.03,-580.93:99
-chr1 2576111 rs58221160 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=281;Dels=0.00;HRun=1;HaplotypeScore=182.21;MQ=43.93;MQ0=7;OQ=597.72;QD=2.13;SB=-221.46 GT:AD:DP:GL:GQ 0/1:232,45:207:-125.42,-62.37,-596.71:99
-chr1 2576240 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1159;Dels=0.00;HRun=0;HaplotypeScore=623.69;MQ=25.02;MQ0=69;OQ=409.78;QD=0.35;SB=-223.95 GT:AD:DP:GL:GQ 0/1:968,178:369:-162.51,-118.25,-1426.92:99
-chr1 2576263 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1066;Dels=0.00;HRun=1;HaplotypeScore=622.37;MQ=26.52;MQ0=59;OQ=159.54;QD=0.15;SB=19.45 GT:AD:DP:GL:GQ 0/1:984,81:387:-135.82,-116.58,-1209.01:99
-chr1 2576333 . C G 40.07 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=1;HaplotypeScore=154.83;MQ=40.65;MQ0=29;QD=0.18;SB=-8.93 GT:AD:DP:GL:GQ 0/1:181,32:158:-64.21,-56.92,-644.64:72.91
-chr1 2576335 . C T 1221.15 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=0;HaplotypeScore=167.65;MQ=40.55;MQ0=30;QD=5.65;SB=-581.17 GT:AD:DP:GL:GQ 0/1:122,94:144:-168.83,-43.43,-331.79:99
-chr1 2576336 rs28676518 G A 1105.16 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=214;Dels=0.00;HRun=0;HaplotypeScore=205.71;MQ=40.45;MQ0=30;QD=5.16;SB=-168.80 GT:AD:DP:GL:GQ 0/1:170,44:143:-156.87,-43.08,-364.02:99
-chr1 2576346 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=74.98;MQ=40.01;MQ0=31;OQ=210.24;QD=1.17;SB=-126.34 GT:AD:DP:GL:GQ 0/1:138,41:111:-57.78,-33.47,-394.51:99
-chr1 2576366 rs61765835 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=158;Dels=0.00;HRun=0;HaplotypeScore=35.61;MQ=33.02;MQ0=57;OQ=96.35;QD=0.61;SB=-36.52 GT:AD:DP:GL:GQ 0/1:92,66:79:-36.73,-23.81,-255.03:99
-chr1 2576428 rs61765837 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=303;Dels=0.00;HRun=2;HaplotypeScore=260.74;MQ=16.89;MQ0=145;OQ=101.18;QD=0.33;SB=-66.11 GT:AD:DP:GL:GQ 0/1:155,144:52:-29.09,-15.69,-174.52:99
-chr1 2576448 rs61765838 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=595;Dels=0.00;HRun=0;HaplotypeScore=426.54;MQ=17.45;MQ0=199;OQ=372.66;QD=0.63;SB=-42.53 GT:AD:DP:GL:GQ 0/1:377,206:114:-74.98,-34.43,-280.80:99
-chr1 2576460 rs61765839 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=687;Dels=0.00;HRun=1;HaplotypeScore=471.75;MQ=17.40;MQ0=212;OQ=453.85;QD=0.66;SB=-3.98 GT:AD:DP:GL:GQ 0/1:511,164:138:-90.25,-41.59,-375.50:99
-chr1 2576472 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=774;Dels=0.03;HRun=1;HaplotypeScore=800.59;MQ=17.54;MQ0=228;OQ=234.98;QD=0.30;SB=-38.37 GT:AD:DP:GL:GQ 0/1:618,98:166:-76.78,-50.00,-493.07:99
-chr1 2576534 rs57105227 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=374;Dels=0.00;HRun=1;HaplotypeScore=347.91;MQ=18.87;MQ0=112;OQ=329.07;QD=0.88;SB=-154.80 GT:AD:DP:GL:GQ 0/1:156,198:111:-73.27,-37.08,-391.39:99
-chr1 2576577 rs4648668 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=122;Dels=0.00;HRun=1;HaplotypeScore=59.62;MQ=22.81;MQ0=26;OQ=851.22;QD=6.98;SB=10.08 GT:AD:DP:GL:GQ 0/1:55,66:69:-109.20,-20.79,-201.97:99
-chr1 2576600 rs4648566 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=1;HaplotypeScore=109.15;MQ=20.95;MQ0=39;OQ=455.68;QD=3.38;SB=83.24 GT:AD:DP:GL:GQ 0/1:105,30:52:-64.51,-15.66,-117.10:99
-chr1 2576616 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=178.18;MQ=20.10;MQ0=38;OQ=374.43;QD=2.62;SB=-39.54 GT:AD:DP:GL:GQ 0/1:116,27:44:-54.00,-13.27,-93.80:99
-chr1 2576848 rs61765840 G T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=22.44;MQ=39.05;MQ0=35;OQ=52.46;QD=0.37;SB=-15.32 GT:AD:DP:GL:GQ 0/1:129,12:77:-31.72,-23.19,-231.93:85.30
-chr1 2577010 rs4648671 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=239;Dels=0.00;HRun=0;HaplotypeScore=65.16;MQ=37.14;MQ0=12;OQ=5199.52;QD=21.76;SB=-2266.90 GT:AD:DP:GL:GQ 1/1:7,232:163:-518.95,-49.17,-3.73:99
-chr1 2577062 rs28507281 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=295;Dels=0.00;HRun=0;HaplotypeScore=78.67;MQ=40.58;MQ0=11;OQ=1143.65;QD=3.88;SB=-492.64 GT:AD:DP:GL:GQ 0/1:238,57:237:-189.11,-71.46,-605.04:99
-chr1 2577084 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=72.39;MQ=39.59;MQ0=17;OQ=519.07;QD=1.69;SB=-15.56 GT:AD:DP:GL:GQ 0/1:259,48:248:-129.89,-74.70,-751.71:99
-chr1 2577123 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=291;Dels=0.00;HRun=1;HaplotypeScore=84.53;MQ=39.37;MQ0=26;OQ=265.40;QD=0.91;SB=-39.23 GT:AD:DP:GL:GQ 0/1:250,41:219:-95.80,-65.98,-773.71:99
-chr1 2577397 rs58719822 G C 0.55 PASS AC=2;AF=1.00;AN=2;DB;DP=190;Dels=0.00;HRun=0;HaplotypeScore=14.16;MQ=39.42;MQ0=19;OQ=6097.98;QD=32.09;SB=-764.81 GT:AD:DP:GL:GQ 1/1:1,189:137:-608.80,-41.28,-0.05:99
-chr1 2577433 rs60264562 G C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=207;Dels=0.05;HRun=4;HaplotypeScore=105.46;MQ=35.87;MQ0=25;OQ=5113.11;QD=24.70;SB=-614.98 GT:AD:DP:GL:GQ 1/1:9,184:123:-510.31,-38.53,-16.18:99
-chr1 2577515 . A C 17.95 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=331;Dels=0.00;HRun=3;HaplotypeScore=311.11;MQ=35.94;MQ0=23;QD=0.05;SB=173.50 GT:AD:DP:GL:GQ 0/1:258,71:167:-55.40,-50.33,-521.31:50.72
-chr1 2577549 rs4648567 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=289;Dels=0.00;HRun=0;HaplotypeScore=107.18;MQ=38.40;MQ0=7;OQ=5448.91;QD=18.85;SB=-2125.98 GT:AD:DP:GL:GQ 1/1:24,231:174:-543.89,-82.79,-51.97:99
-chr1 2577655 . G C 44.44 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=2;HaplotypeScore=58.73;MQ=26.75;MQ0=23;QD=0.33;SB=26.12 GT:AD:DP:GL:GQ 0/1:116,10:43:-24.31,-16.59,-159.35:77.27
-chr1 2577671 rs58842912 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=128.81;MQ=16.71;MQ0=28;OQ=137.08;QD=1.46;SB=-35.94 GT:AD:DP:GL:GQ 0/1:63,25:12:-20.61,-3.62,-16.30:99
-chr1 2577677 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=3;HaplotypeScore=117.98;MQ=17.54;MQ0=28;OQ=281.66;QD=3.03;SB=-45.56 GT:AD:DP:GL:GQ 0/1:33,58:12:-35.06,-3.61,-7.69:40.79
-chr1 2577682 . T C 14.20 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=57.79;MQ=17.58;MQ0=34;QD=0.14;SB=-10.00 GT:AD:DP:GL:GQ 0/1:68,26:4:-5.89,-1.21,-7.84:46.86
-chr1 2577700 . T C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=167.08;MQ=18.58;MQ0=41;OQ=266.89;QD=2.36;SB=-10.00 GT:AD:DP:GL:GQ 1/1:35,36:10:-34.52,-6.65,-4.25:23.97
-chr1 2577709 . C T 15.40 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=131;Dels=0.00;HRun=0;HaplotypeScore=233.03;MQ=18.07;MQ0=48;QD=0.12;SB=-10.00 GT:AD:DP:GL:GQ 0/1:96,13:7:-9.83,-5.02,-17.83:48.10
-chr1 2577721 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=182;Dels=0.00;HRun=0;HaplotypeScore=74.87;MQ=18.10;MQ0=63;OQ=399.60;QD=2.20;SB=-10.00 GT:AD:DP:GL:GQ 0/1:147,35:41:-55.60,-12.35,-87.25:99
-chr1 2577722 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=54.78;MQ=18.15;MQ0=62;OQ=179.28;QD=0.99;SB=-10.00 GT:AD:DP:GL:GQ 0/1:160,20:38:-32.69,-11.48,-98.33:99
-chr1 2577735 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=37.61;MQ=17.86;MQ0=65;OQ=262.32;QD=1.37;SB=-10.00 GT:AD:DP:GL:GQ 0/1:173,18:55:-46.08,-16.57,-148.55:99
-chr1 2577740 rs61763463 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=186;Dels=0.00;HRun=1;HaplotypeScore=34.83;MQ=17.84;MQ0=63;OQ=1671.60;QD=8.99;SB=-10.00 GT:AD:DP:GL:GQ 0/1:52,133:54:-186.71,-16.27,-40.75:99
-chr1 2577765 . C A 125.78 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=41.35;MQ=16.77;MQ0=52;QD=0.87;SB=-10.00 GT:AD:DP:GL:GQ 0/1:91,53:26:-23.70,-7.84,-54.51:99
-chr1 2577769 . C T 71.72 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=43.82;MQ=16.10;MQ0=52;QD=0.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:87,47:21:-16.80,-6.34,-49.74:99
-chr1 2577770 . G C 89.65 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=1;HaplotypeScore=42.82;MQ=16.09;MQ0=52;QD=0.67;SB=-10.00 GT:AD:DP:GL:GQ 0/1:85,48:21:-18.58,-6.33,-66.40:99
-chr1 2577784 rs61761450 G C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=108;Dels=0.00;HRun=0;HaplotypeScore=93.26;MQ=15.12;MQ0=44;OQ=499.20;QD=4.62;SB=-10.00 GT:AD:DP:GL:GQ 1/1:36,72:12:-53.51,-3.62,-0.00:36.12
-chr1 2577796 rs28368363 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=154.23;MQ=14.20;MQ0=39;OQ=53.95;QD=0.56;SB=-10.00 GT:AD:DP:GL:GQ 0/1:68,23:5:-10.19,-1.51,-6.10:45.96
-chr1 2577799 rs61765844 A C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=4;HaplotypeScore=106.56;MQ=13.50;MQ0=38;OQ=136.44;QD=1.53;SB=-10.00 GT:AD:DP:GL:GQ 1/1:37,52:5:-17.20,-1.51,-0.00:15.04
-chr1 2577815 rs61761446 G A 0.11 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=16.91;MQ=12.99;MQ0=33;OQ=113.87;QD=2.19;SB=-10.00 GT:AD:DP:GL:GQ 1/1:30,21:4:-14.92,-1.21,-0.00:12.04
-chr1 2577825 . G A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=32.84;MQ=14.16;MQ0=28;OQ=149.17;QD=3.17;SB=-10.00 GT:AD:DP:GL:GQ 1/1:28,19:5:-18.48,-1.51,-0.00:15.04
-chr1 2577833 . C T 42.25 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=22.86;MQ=13.04;MQ0=28;QD=0.98;SB=-10.00 GT:AD:DP:GL:GQ 1/1:33,10:2:-7.63,-0.60,-0.00:6.02
-chr1 2577851 . G T 0.04 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=11.27;MQ=14.57;MQ0=20;OQ=148.54;QD=4.24;SB=-10.00 GT:AD:DP:GL:GQ 1/1:17,14:6:-18.43,-1.81,-0.01:18.02
-chr1 2577883 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=114.78;MQ=19.71;MQ0=31;OQ=87.78;QD=0.84;SB=-10.00 GT:AD:DP:GL:GQ 0/1:82,22:16:-16.89,-4.83,-35.06:99
-chr1 2577892 rs61761448 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=139.63;MQ=19.08;MQ0=41;OQ=358.39;QD=3.04;SB=-10.00 GT:AD:DP:GL:GQ 0/1:46,69:13:-43.04,-3.92,-5.80:18.77
-chr1 2577904 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=1;HaplotypeScore=169.18;MQ=18.99;MQ0=45;OQ=432.72;QD=3.38;SB=-10.00 GT:AD:DP:GL:GQ 0/1:56,72:16:-51.38,-4.83,-6.85:20.23
-chr1 2577913 . A G 43.14 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=228.63;MQ=18.89;MQ0=43;QD=0.37;SB=-10.00 GT:AD:DP:GL:GQ 0/1:102,14:7:-9.71,-2.11,-14.52:75.98
-chr1 2577923 . G A 12.44 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=0;HaplotypeScore=139.34;MQ=19.75;MQ0=38;QD=0.10;SB=-10.00 GT:AD:DP:GL:GQ 0/1:84,37:10:-7.51,-3.01,-26.55:45.02
-chr1 2577924 . T C 61.88 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=137.09;MQ=19.68;MQ0=38;QD=0.52;SB=-10.00 GT:AD:DP:GL:GQ 0/1:94,23:11:-12.79,-3.32,-26.27:94.71
-chr1 2577931 rs61763465 G C 371.46 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=106.32;MQ=19.54;MQ0=35;QD=3.50;SB=-10.00 GT:AD:DP:GL:GQ 1/1:30,75:9:-40.73,-2.71,-0.00:27.09
-chr1 2577945 rs61765845 G C 1059.87 HARD_TO_VALIDATE;Indel AC=2;AF=1.00;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=141.04;MQ=19.73;MQ0=38;QD=10.00;SB=-10.00 GT:AD:DP:GL:GQ 1/1:31,70:26:-113.65,-11.26,-4.08:71.85
-chr1 2577953 . A G 356.53 HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=136.50;MQ=18.50;MQ0=43;QD=3.64;SB=-10.00 GT:AD:DP:GL:GQ 0/1:78,20:16:-43.76,-4.82,-8.02:32
-chr1 2577977 . G A 20.69 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=1;HaplotypeScore=16.21;MQ=15.79;MQ0=48;QD=0.27;SB=-10.00 GT:AD:DP:GL:GQ 0/1:72,5:20:-11.37,-6.02,-58.36:53.49
-chr1 2579397 rs61761374 C G 193.05 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=22.35;MQ0=6;OQ=1341.59;QD=14.91;SB=-551.47 GT:AD:DP:GL:GQ 0/1:44,46:77:-160.66,-23.22,-161.20:99
-chr1 2580726 . T G 35.92 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.11;MQ=5.25;MQ0=59;QD=0.59;SB=-10.00 GT:AD:DP:GL:GQ 1/1:58,2:2:-7.00,-0.60,-0.00:6.02
-chr1 2580768 . T C 36.28 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=5.74;MQ0=49;QD=0.71;SB=-10.00 GT:AD:DP:GL:GQ 1/1:46,5:2:-7.04,-0.60,-0.00:6.02
-chr1 2580784 rs11488598 T A 45.88 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=6.33;MQ0=40;QD=1.09;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,41:2:-8.00,-0.60,-0.00:6.02
-chr1 2581065 rs61761440 A C 33.92 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=9.03;MQ=10.33;MQ0=29;QD=0.71;SB=-10.00 GT:AD:DP:GL:GQ 1/1:28,20:2:-6.80,-0.60,-0.00:6.02
-chr1 2581076 . T A 42.69 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=11.35;MQ0=18;QD=1.33;SB=-10.00 GT:AD:DP:GL:GQ 1/1:16,15:2:-7.68,-0.60,-0.00:6.02
-chr1 2581088 . A C 35.92 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=15.32;MQ0=5;QD=3.27;SB=-10.00 GT:AD:DP:GL:GQ 1/1:3,8:2:-7.00,-0.60,-0.00:6.02
-chr1 2581203 . C G 46.77 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=12.99;MQ=10.81;MQ0=53;QD=0.69;SB=5.05 GT:AD:DP:GL:GQ 0/1:57,11:14:-12.18,-4.22,-47.55:79.61
-chr1 2581221 rs4648702 C A 0.09 PASS AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=1;HaplotypeScore=12.38;MQ=17.15;MQ0=42;OQ=109.22;QD=1.11;SB=-5.56 GT:AD:DP:GL:GQ 0/1:80,16:46:-28.07,-13.86,-128.22:99
-chr1 2581257 rs4648701 T A 0.08 PASS AC=2;AF=1.00;AN=2;DB;DP=134;Dels=0.00;HRun=0;HaplotypeScore=5.16;MQ=20.38;MQ0=25;OQ=3859.45;QD=28.80;SB=-1801.06 GT:AD:DP:GL:GQ 1/1:0,134:101:-384.94,-30.42,-0.03:99
-chr1 2587428 . A C 37.49 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=14.36;MQ0=8;QD=1.10;SB=-45.01 GT:AD:DP:GL:GQ 1/1:0,34:2:-7.16,-0.60,-0.00:6.02
-chr1 2593169 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=425;Dels=0.00;HRun=1;HaplotypeScore=105.62;MQ=17.46;MQ0=82;OQ=848.96;QD=2.00;SB=-332.82 GT:AD:DP:GL:GQ 0/1:365,60:163:-137.29,-49.11,-428.79:99
-chr1 2596443 . C T 41.24 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=12.40;MQ0=7;QD=3.75;SB=-10.00 GT:AD:DP:GL:GQ 1/1:7,4:2:-7.53,-0.60,-0.00:6.02
-chr1 2596445 . T G 36.05 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=2.31;MQ=11.87;MQ0=8;QD=3.00;SB=-10.00 GT:AD:DP:GL:GQ 1/1:5,7:2:-7.01,-0.60,-0.00:6.02
-chr1 2596476 . G A 46.02 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=60;Dels=0.00;HRun=1;HaplotypeScore=26.89;MQ=5.53;MQ0=56;QD=0.77;SB=-10.00 GT:AD:DP:GL:GQ 1/1:58,2:2:-8.01,-0.60,-0.00:6.02
-chr1 2596850 . G C 35.05 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=11.43;MQ0=28;QD=0.82;SB=-10.00 GT:AD:DP:GL:GQ 0/1:29,14:5:-8.30,-1.51,-13.08:67.88
-chr1 2596943 . C A 49.59 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=50.99;MQ=11.35;MQ0=54;QD=0.70;SB=-6.99 GT:AD:DP:GL:GQ 0/1:65,5:13:-12.16,-3.92,-30.66:82.43
-chr1 2597318 . T C 31.81 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=14.62;MQ=5.54;MQ0=70;QD=0.42;SB=-10.00 GT:AD:DP:GL:GQ 1/1:73,2:2:-6.59,-0.60,-0.00:6.01
-chr1 2598250 . T A 27.90 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=1;HaplotypeScore=2.24;MQ=16.56;MQ0=5;QD=1.27;SB=-0.98 GT:AD:DP:GL:GQ 0/1:19,3:5:-7.58,-1.51,-10.62:60.73
-chr1 2598257 . G T 12.16 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=15.61;MQ0=8;QD=0.55;SB=-0.98 GT:AD:DP:GL:GQ 0/1:19,3:5:-5.98,-1.51,-10.70:44.72
-chr1 2598656 . G A 10.26 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=1;HaplotypeScore=114.17;MQ=5.78;MQ0=152;QD=0.06;SB=-10.00 GT:AD:DP:GL:GQ 0/1:161,14:1:-4.27,-0.30,-0.00:1.76
-chr1 2598795 . G A 10.26 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=47.85;MQ=7.17;MQ0=69;QD=0.12;SB=-10.00 GT:AD:DP:GL:GQ 0/1:84,2:1:-4.27,-0.30,-0.00:1.76
-chr1 2598944 . A C 17.83 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=1;HaplotypeScore=67.67;MQ=10.48;MQ0=39;QD=0.27;SB=-25.99 GT:AD:DP:GL:GQ 0/1:48,17:3:-5.96,-0.91,-2.50:15.92
-chr1 2598946 . A G 34.06 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=82.40;MQ=11.36;MQ0=42;QD=0.46;SB=-10.00 GT:AD:DP:GL:GQ 0/1:70,4:3:-7.59,-0.90,-4.17:32.64
-chr1 2598950 . C A 54.26 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=105.52;MQ=12.29;MQ0=47;QD=0.53;SB=-3.99 GT:AD:DP:GL:GQ 0/1:94,7:7:-10.82,-2.11,-14.32:87.10
-chr1 2599001 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=31.75;MQ=12.68;MQ0=54;OQ=83.85;QD=0.63;SB=-3.99 GT:AD:DP:GL:GQ 0/1:91,33:10:-18.26,-6.59,-21.60:99
-chr1 2599015 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=2;HaplotypeScore=24.68;MQ=11.50;MQ0=72;OQ=64.97;QD=0.46;SB=-43.54 GT:AD:DP:GL:GQ 0/1:128,12:9:-12.49,-2.71,-23.15:97.80
-chr1 2599040 rs61761456 A T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=133;Dels=0.00;HRun=0;HaplotypeScore=87.15;MQ=9.23;MQ0=88;OQ=72.77;QD=0.55;SB=-10.00 GT:AD:DP:GL:GQ 1/1:81,14:5:-17.43,-7.71,-6.64:10.71
-chr1 2599044 rs61761457 T A 33.25 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=131;Dels=0.00;HRun=1;HaplotypeScore=64.29;MQ=9.30;MQ0=86;QD=0.25;SB=-10.00 GT:AD:DP:GL:GQ 0/1:104,11:6:-11.67,-5.06,-13.57:66.08
-chr1 2599198 . C T 23.45 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=16.24;MQ=14.99;MQ0=19;QD=0.50;SB=-3.99 GT:AD:DP:GL:GQ 0/1:29,18:5:-7.14,-1.51,-10.24:56.27
-chr1 2599218 . G A 105.55 HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=106.10;MQ=16.73;MQ0=11;QD=2.29;SB=-69.07 GT:AD:DP:GL:GQ 0/1:28,17:6:-15.65,-1.81,-6.14:43.30
-chr1 2599225 . C G 35.32 HARD_TO_VALIDATE;Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=82.64;MQ=16.87;MQ0=11;QD=0.78;SB=-10.88 GT:AD:DP:GL:GQ 0/1:36,6:7:-14.02,-7.20,-19.31:68.16
-chr1 2599228 . G A 323.86 HARD_TO_VALIDATE;Indel;SnpCluster AC=2;AF=1.00;AN=2;DP=46;Dels=0.04;HRun=0;HaplotypeScore=68.32;MQ=16.68;MQ0=12;QD=7.04;SB=-89.34 GT:AD:DP:GL:GQ 1/1:16,28:10:-35.98,-3.02,-0.01:30.08
-chr1 2599239 . T A 19.57 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=43.45;MQ=14.62;MQ0=19;QD=0.36;SB=-4.42 GT:AD:DP:GL:GQ 0/1:49,2:7:-12.49,-7.25,-17.00:52.36
-chr1 2599247 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=40.77;MQ=14.18;MQ0=20;OQ=70.13;QD=1.35;SB=-7.01 GT:AD:DP:GL:GQ 0/1:29,21:6:-12.11,-1.81,-8.56:67.52
-chr1 2599654 . G C 12.35 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=26.39;MQ=2.65;MQ0=119;QD=0.10;SB=-10.00 GT:AD:DP:GL:GQ 0/1:119,1:1:-4.49,-0.30,-0.00:1.76
-chr1 2601422 . A G 25.82 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=114;Dels=0.00;HRun=0;HaplotypeScore=10.71;MQ=4.09;MQ0=110;QD=0.23;SB=-10.00 GT:AD:DP:GL:GQ 1/1:99,14:2:-5.99,-0.60,-0.00:6.01
-chr1 2601437 . T C 35.28 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=12.99;MQ=3.79;MQ0=129;QD=0.27;SB=-10.00 GT:AD:DP:GL:GQ 1/1:103,30:2:-6.94,-0.60,-0.00:6.02
-chr1 2601504 . G A 41.24 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=19.74;MQ=3.30;MQ0=165;QD=0.25;SB=-10.00 GT:AD:DP:GL:GQ 1/1:158,9:2:-7.53,-0.60,-0.00:6.02
-chr1 2601515 . A C 43.05 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=155;Dels=0.00;HRun=2;HaplotypeScore=7.29;MQ=3.29;MQ0=153;QD=0.28;SB=-10.00 GT:AD:DP:GL:GQ 1/1:91,64:2:-7.71,-0.60,-0.00:6.02
-chr1 2601516 . G A 0.02 FDRtranche1.00to2.00 AC=2;AF=1.00;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=6.38;MQ=3.29;MQ0=153;OQ=51.25;QD=0.33;SB=-10.00 GT:AD:DP:GL:GQ 1/1:89,66:2:-8.53,-0.60,-0.00:6.02
-chr1 2601859 . G A 39.02 DPFilter;HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=20.82;MQ=4.64;MQ0=146;QD=0.24;SB=-10.00 GT:AD:DP:GL:GQ 1/1:150,13:2:-7.31,-0.60,-0.00:6.02
-chr1 2603248 rs11486046 A C 0.95 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=4;HaplotypeScore=1.14;MQ=19.37;MQ0=3;OQ=283.27;QD=11.33;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,23:9:-31.91,-2.71,-0.00:27.08
-chr1 2603587 . A G 31.28 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=24.46;MQ=5.10;MQ0=81;QD=0.34;SB=-10.00 GT:AD:DP:GL:GQ 1/1:74,19:2:-6.54,-0.60,-0.00:6.01
-chr1 2603630 . C T 0.04 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=4.88;MQ=7.26;MQ0=55;OQ=82.12;QD=1.35;SB=-10.00 GT:AD:DP:GL:GQ 1/1:51,10:3:-11.70,-0.90,-0.00:9.03
-chr1 2603684 . A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=23.79;MQ=8.35;MQ0=58;OQ=160.35;QD=2.36;SB=-10.00 GT:AD:DP:GL:GQ 1/1:55,13:6:-19.61,-1.81,-0.00:18.04
-chr1 2603850 . C G 10.08 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=0;HaplotypeScore=68.31;MQ=3.10;MQ0=215;QD=0.04;SB=-10.00 GT:AD:DP:GL:GQ 0/1:213,10:1:-4.25,-0.30,-0.00:1.76
-chr1 2604182 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=169;Dels=0.00;HRun=1;HaplotypeScore=49.21;MQ=7.86;MQ0=143;OQ=70.78;QD=0.42;SB=-10.00 GT:AD:DP:GL:GQ 0/1:162,7:11:-13.68,-3.31,-27.79:99
-chr1 2604202 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=174;Dels=0.00;HRun=0;HaplotypeScore=66.53;MQ=7.81;MQ0=146;OQ=55.73;QD=0.32;SB=-10.00 GT:AD:DP:GL:GQ 0/1:164,10:11:-12.17,-3.31,-27.45:88.56
-chr1 2604211 . C A 34.20 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=202;Dels=0.00;HRun=0;HaplotypeScore=110.16;MQ=8.09;MQ0=168;QD=0.17;SB=-10.00 GT:AD:DP:GL:GQ 0/1:190,11:14:-10.92,-4.22,-40.03:67.04
-chr1 2604257 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=82.11;MQ=12.16;MQ0=114;OQ=80.38;QD=0.46;SB=32.96 GT:AD:DP:GL:GQ 0/1:146,20:31:-22.91,-11.59,-89.29:99
-chr1 2604263 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=1;HaplotypeScore=133.02;MQ=12.71;MQ0=105;OQ=191.66;QD=1.14;SB=50.18 GT:AD:DP:GL:GQ 0/1:122,46:33:-32.40,-9.95,-88.01:99
-chr1 2604269 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=77.37;MQ=13.05;MQ0=90;OQ=192.77;QD=1.32;SB=17.43 GT:AD:DP:GL:GQ 0/1:70,69:33:-34.89,-12.33,-71.96:99
-chr1 2604305 . T A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=7.47;MQ=17.34;MQ0=29;OQ=55.74;QD=0.69;SB=74.25 GT:AD:DP:GL:GQ 0/1:58,22:37:-20.01,-11.15,-121.92:88.58
-chr1 2604310 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=4.63;MQ=18.11;MQ0=23;OQ=69.18;QD=0.93;SB=74.24 GT:AD:DP:GL:GQ 0/1:55,19:37:-21.34,-11.14,-111.00:99
-chr1 2604358 . C T 71.23 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=145.78;MQ=14.15;MQ0=44;QD=0.82;SB=11.06 GT:AD:DP:GL:GQ 0/1:71,13:12:-14.02,-3.62,-30.75:99
-chr1 2604359 . C A 74.64 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=131.89;MQ=14.13;MQ0=41;QD=0.91;SB=5.02 GT:AD:DP:GL:GQ 0/1:26,56:10:-13.76,-3.01,-18.66:99
-chr1 2604363 . G C 180.85 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=2;HaplotypeScore=137.79;MQ=13.57;MQ0=46;QD=2.10;SB=2.04 GT:AD:DP:GL:GQ 0/1:29,40:11:-24.68,-3.31,-21.48:99
-chr1 2604377 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=82.82;MQ=13.39;MQ0=50;OQ=54.76;QD=0.61;SB=-10.00 GT:AD:DP:GL:GQ 0/1:65,25:4:-9.97,-1.21,-3.57:23.65
-chr1 2604397 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=1;HaplotypeScore=150.87;MQ=13.17;MQ0=49;OQ=71.12;QD=0.83;SB=-10.00 GT:AD:DP:GL:GQ 0/1:47,38:4:-11.60,-1.21,-3.90:26.92
-chr1 2604403 . T C 38.45 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=82;Dels=0.00;HRun=2;HaplotypeScore=145.51;MQ=12.80;MQ0=46;QD=0.47;SB=-10.00 GT:AD:DP:GL:GQ 1/1:13,58:3:-10.84,-4.28,-3.54:7.45
-chr1 2604424 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=48.30;MQ=13.20;MQ0=33;OQ=76.83;QD=1.35;SB=-6.99 GT:AD:DP:GL:GQ 0/1:21,30:6:-12.78,-1.81,-6.73:49.16
-chr1 2604431 . C T 25.24 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=33.49;MQ=13.71;MQ0=25;QD=0.55;SB=-7.01 GT:AD:DP:GL:GQ 0/1:40,3:5:-7.32,-1.51,-9.43:58.07
-chr1 2604444 . G C 43.47 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=38.64;MQ=15.55;MQ0=13;QD=1.67;SB=-10.00 GT:AD:DP:GL:GQ 0/1:8,16:4:-12.26,-4.63,-7.13:24.99
-chr1 2604449 . G C 30.45 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=21;Dels=0.10;HRun=4;HaplotypeScore=30.98;MQ=14.63;MQ0=12;QD=1.45;SB=-10.00 GT:AD:DP:GL:GQ 0/1:6,6:4:-11.16,-4.83,-7.63:28
-chr1 2604508 . G C 0.07 PASS AC=2;AF=1.00;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=11.01;MQ=14.95;MQ0=13;OQ=265.66;QD=7.81;SB=-10.00 GT:AD:DP:GL:GQ 1/1:9,25:7:-30.15,-2.11,-0.00:21.07
-chr1 2604516 . G T 0.07 PASS AC=2;AF=1.00;AN=2;DP=41;Dels=0.00;HRun=1;HaplotypeScore=5.00;MQ=14.42;MQ0=18;OQ=191.90;QD=4.68;SB=-10.00 GT:AD:DP:GL:GQ 1/1:15,26:7:-22.77,-2.11,-0.00:21.05
-chr1 2604535 rs61763522 A G 0.35 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=9.63;MQ=11.76;MQ0=38;OQ=251.64;QD=3.87;SB=-10.00 GT:AD:DP:GL:GQ 1/1:12,53:8:-28.75,-2.41,-0.00:24.07
-chr1 2604555 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=35.24;MQ=12.18;MQ0=57;OQ=115.73;QD=1.24;SB=14.08 GT:AD:DP:GL:GQ 0/1:66,27:12:-18.47,-3.62,-35.84:99
-chr1 2604572 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=3;HaplotypeScore=50.74;MQ=13.39;MQ0=78;OQ=55.27;QD=0.40;SB=20.07 GT:AD:DP:GL:GQ 0/1:127,10:20:-14.84,-6.03,-56.38:88.11
-chr1 2604579 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=62.98;MQ=13.28;MQ0=75;OQ=144.76;QD=1.05;SB=20.08 GT:AD:DP:GL:GQ 0/1:125,13:18:-23.19,-5.43,-45.19:99
-chr1 2604585 rs61763523 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=140;Dels=0.00;HRun=1;HaplotypeScore=70.32;MQ=13.11;MQ0=76;OQ=158.49;QD=1.13;SB=-6.99 GT:AD:DP:GL:GQ 0/1:102,37:9:-21.84,-2.71,-10.97:82.64
-chr1 2604597 . A G 110.83 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=107.90;MQ=13.27;MQ0=78;QD=0.74;SB=8.05 GT:AD:DP:GL:GQ 0/1:135,14:14:-18.58,-4.22,-35.74:99
-chr1 2604601 . A C 218.40 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=111.25;MQ=13.41;MQ0=75;QD=1.51;SB=4.22 GT:AD:DP:GL:GQ 0/1:108,36:15:-33.23,-8.10,-26.51:99
-chr1 2604603 . T C 273.40 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=2;HaplotypeScore=107.87;MQ=13.23;MQ0=76;QD=1.89;SB=-75.88 GT:AD:DP:GL:GQ 0/1:65,76:14:-34.84,-4.22,-16.55:99
-chr1 2604631 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=169;Dels=0.00;HRun=1;HaplotypeScore=78.83;MQ=15.93;MQ0=66;OQ=130.30;QD=0.77;SB=-43.00 GT:AD:DP:GL:GQ 0/1:129,40:31:-25.65,-9.34,-87.13:99
-chr1 2604640 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=154;Dels=0.00;HRun=0;HaplotypeScore=101.27;MQ=16.99;MQ0=53;OQ=84.42;QD=0.55;SB=-10.00 GT:AD:DP:GL:GQ 0/1:93,61:34:-21.98,-10.25,-116.76:99
-chr1 2604659 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=114.19;MQ=17.85;MQ0=39;OQ=180.46;QD=1.31;SB=-10.00 GT:AD:DP:GL:GQ 0/1:106,32:34:-31.57,-10.24,-88.52:99
-chr1 2604673 rs7415296 T C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=120;Dels=0.00;HRun=1;HaplotypeScore=73.29;MQ=18.57;MQ0=29;OQ=1125.63;QD=9.38;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,107:33:-116.16,-9.94,-0.01:99
-chr1 2604706 rs6673862 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=39.35;MQ=23.53;MQ0=16;OQ=454.13;QD=4.83;SB=-3.99 GT:AD:DP:GL:GQ 0/1:51,43:41:-61.05,-12.35,-88.54:99
-chr1 2604709 rs6604993 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=41.02;MQ=25.10;MQ0=15;OQ=512.66;QD=5.40;SB=-34.93 GT:AD:DP:GL:GQ 0/1:48,47:45:-68.11,-13.56,-92.92:99
-chr1 2604721 rs61763524 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=115.04;MQ=25.76;MQ0=12;OQ=386.36;QD=4.15;SB=-44.44 GT:AD:DP:GL:GQ 0/1:49,44:40:-53.97,-12.05,-114.41:99
-chr1 2604728 rs61763525 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=150.75;MQ=27.24;MQ0=8;OQ=52.75;QD=0.62;SB=-10.00 GT:AD:DP:GL:GQ 0/1:49,22:37:-19.70,-11.14,-117.15:85.59
-chr1 2604813 rs6687492 A C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.04;HRun=2;HaplotypeScore=47.11;MQ=23.79;MQ0=20;OQ=1537.32;QD=16.53;SB=-154.02 GT:AD:DP:GL:GQ 1/1:2,87:44:-157.33,-12.95,-0.02:99
-chr1 2604848 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=9.77;MQ=17.69;MQ0=30;OQ=71.77;QD=1.30;SB=-10.00 GT:AD:DP:GL:GQ 0/1:37,18:14:-14.68,-4.22,-36.61:99
-chr1 2604864 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=28.67;MQ=16.02;MQ0=35;OQ=77.33;QD=1.17;SB=-10.00 GT:AD:DP:GL:GQ 0/1:62,4:12:-14.63,-3.61,-28.91:99
-chr1 2604867 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=23.02;MQ=16.18;MQ0=37;OQ=170.35;QD=2.43;SB=-10.00 GT:AD:DP:GL:GQ 0/1:59,11:15:-24.84,-4.52,-31.52:99
-chr1 2604879 . A G 48.78 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=25.49;MQ=18.59;MQ0=41;QD=0.57;SB=-6.99 GT:AD:DP:GL:GQ 0/1:79,7:20:-14.19,-6.03,-66.66:81.62
-chr1 2604892 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=1;HaplotypeScore=62.88;MQ=20.71;MQ0=36;OQ=145.34;QD=1.60;SB=-40.00 GT:AD:DP:GL:GQ 0/1:67,21:27:-25.95,-8.13,-71.88:99
-chr1 2604894 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.01;HRun=1;HaplotypeScore=55.68;MQ=20.44;MQ0=36;OQ=138.96;QD=1.49;SB=-41.95 GT:AD:DP:GL:GQ 0/1:67,21:26:-25.01,-7.83,-77.06:99
-chr1 2604912 rs61763528 T G 20.95 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=50.36;MQ=22.66;MQ0=25;QD=0.19;SB=-10.00 GT:AD:DP:GL:GQ 0/1:76,35:29:-14.11,-8.74,-95.07:53.75
-chr1 2604916 rs61763529 T G 194.85 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=113;Dels=0.00;HRun=0;HaplotypeScore=46.31;MQ=24.02;MQ0=23;QD=1.72;SB=-10.00 GT:AD:DP:GL:GQ 0/1:75,37:38:-34.21,-11.44,-107.06:99
-chr1 2604917 rs61763530 C G 1480.34 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=47.31;MQ=24.13;MQ0=22;QD=13.22;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,96:38:-168.50,-25.75,-16.88:88.75
-chr1 2604946 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=236;Dels=0.00;HRun=1;HaplotypeScore=63.84;MQ=27.71;MQ0=21;OQ=79.42;QD=0.34;SB=27.56 GT:AD:DP:GL:GQ 0/1:204,31:106:-43.16,-31.93,-335.49:99
-chr1 2604947 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=236;Dels=0.00;HRun=1;HaplotypeScore=57.70;MQ=27.78;MQ0=20;OQ=56.57;QD=0.24;SB=26.25 GT:AD:DP:GL:GQ 0/1:201,34:107:-41.17,-32.23,-378.22:89.40
-chr1 2604959 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=241;Dels=0.00;HRun=1;HaplotypeScore=113.45;MQ=29.01;MQ0=17;OQ=854.86;QD=3.55;SB=-18.43 GT:AD:DP:GL:GQ 0/1:165,75:109:-121.61,-32.84,-284.29:99
-chr1 2604960 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=123.76;MQ=29.06;MQ0=17;OQ=593.64;QD=2.47;SB=71.18 GT:AD:DP:GL:GQ 0/1:190,50:108:-95.18,-32.53,-286.72:99
-chr1 2604983 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=1;HaplotypeScore=495.52;MQ=29.66;MQ0=13;OQ=71.64;QD=0.32;SB=60.44 GT:AD:DP:GL:GQ 0/1:161,61:71:-31.89,-21.44,-242.50:99
-chr1 2604984 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=1;HaplotypeScore=666.90;MQ=29.67;MQ0=14;OQ=53.59;QD=0.24;SB=51.85 GT:AD:DP:GL:GQ 0/1:162,59:73:-33.13,-24.49,-250.82:86.43
-chr1 2604994 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=301;Dels=0.00;HRun=1;HaplotypeScore=445.50;MQ=27.33;MQ0=32;OQ=911.93;QD=3.03;SB=-289.52 GT:AD:DP:GL:GQ 0/1:244,47:103:-139.58,-45.10,-310.97:99
-chr1 2605000 . A G 39.90 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=313;Dels=0.00;HRun=0;HaplotypeScore=296.02;MQ=26.42;MQ0=37;QD=0.13;SB=95.30 GT:AD:DP:GL:GQ 0/1:236,73:110:-42.96,-35.69,-387.52:72.73
-chr1 2605008 . C A 80.14 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=1;HaplotypeScore=230.13;MQ=26.37;MQ0=45;QD=0.26;SB=104.26 GT:AD:DP:GL:GQ 0/1:278,18:127:-64.22,-52.92,-396.67:99
-chr1 2605010 . C A 77.92 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=1;HaplotypeScore=334.39;MQ=26.26;MQ0=46;QD=0.25;SB=101.18 GT:AD:DP:GL:GQ 0/1:276,18:125:-51.79,-40.71,-371.85:99
-chr1 2605026 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=292;Dels=0.00;HRun=0;HaplotypeScore=503.51;MQ=24.87;MQ0=63;OQ=127.24;QD=0.44;SB=-33.91 GT:AD:DP:GL:GQ 0/1:107,181:82:-40.71,-24.70,-242.51:99
-chr1 2605040 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=333;Dels=0.00;HRun=0;HaplotypeScore=585.35;MQ=23.26;MQ0=69;OQ=164.03;QD=0.49;SB=60.04 GT:AD:DP:GL:GQ 0/1:234,98:87:-48.89,-29.20,-293.13:99
-chr1 2605055 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=394;Dels=0.00;HRun=0;HaplotypeScore=493.35;MQ=22.62;MQ0=80;OQ=367.10;QD=0.93;SB=90.44 GT:AD:DP:GL:GQ 0/1:300,89:126:-77.94,-37.95,-375.51:99
-chr1 2605064 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=394;Dels=0.00;HRun=1;HaplotypeScore=562.83;MQ=22.35;MQ0=77;OQ=111.09;QD=0.28;SB=241.07 GT:AD:DP:GL:GQ 0/1:342,17:127:-65.55,-51.15,-483.41:99
-chr1 2605074 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=367;Dels=0.02;HRun=1;HaplotypeScore=550.64;MQ=22.20;MQ0=72;OQ=1826.16;QD=4.98;SB=11.30 GT:AD:DP:GL:GQ 0/1:140,136:125:-251.01,-65.11,-307.30:99
-chr1 2605078 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=360;Dels=0.00;HRun=1;HaplotypeScore=645.39;MQ=22.69;MQ0=67;OQ=145.82;QD=0.41;SB=80.26 GT:AD:DP:GL:GQ 0/1:281,25:108:-50.40,-32.54,-347.91:99
-chr1 2605087 rs9442451 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=302;Dels=0.00;HRun=1;HaplotypeScore=515.01;MQ=23.21;MQ0=61;OQ=1550.28;QD=5.13;SB=0.26 GT:AD:DP:GL:GQ 0/1:127,172:83:-183.36,-25.04,-152.30:99
-chr1 2605095 rs7411254 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=295;Dels=0.00;HRun=0;HaplotypeScore=864.08;MQ=22.89;MQ0=61;OQ=861.12;QD=2.92;SB=-439.01 GT:AD:DP:GL:GQ 0/1:231,62:100:-119.53,-30.13,-233.73:99
-chr1 2605099 rs61763531 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=268;Dels=0.03;HRun=1;HaplotypeScore=671.07;MQ=23.34;MQ0=56;OQ=331.54;QD=1.24;SB=62.18 GT:AD:DP:GL:GQ 0/1:101,158:88:-62.36,-25.93,-228.22:99
-chr1 2605116 rs61763532 G T 727.77 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=280;Dels=0.00;HRun=0;HaplotypeScore=340.71;MQ=26.06;MQ0=38;QD=2.60;SB=80.25 GT:AD:DP:GL:GQ 0/1:98,160:86:-122.32,-46.26,-192.83:99
-chr1 2605118 . G A 130.78 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=2;HaplotypeScore=353.34;MQ=26.07;MQ0=39;QD=0.45;SB=68.17 GT:AD:DP:GL:GQ 0/1:266,20:82:-41.07,-24.71,-249.92:99
-chr1 2605120 . A G 143.56 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=286;Dels=0.00;HRun=0;HaplotypeScore=391.53;MQ=26.07;MQ0=38;QD=0.50;SB=44.57 GT:AD:DP:GL:GQ 0/1:230,56:92:-45.37,-27.73,-305.63:99
-chr1 2605121 . C A 843.63 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=283;Dels=0.00;HRun=2;HaplotypeScore=384.52;MQ=26.08;MQ0=38;QD=2.98;SB=80.20 GT:AD:DP:GL:GQ 0/1:195,69:112:-123.96,-36.31,-258.00:99
-chr1 2605143 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=261;Dels=0.00;HRun=0;HaplotypeScore=165.80;MQ=26.36;MQ0=57;OQ=2061.60;QD=7.90;SB=82.92 GT:AD:DP:GL:GQ 0/1:135,121:131:-251.29,-41.84,-249.16:99
-chr1 2605152 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=276;Dels=0.00;HRun=0;HaplotypeScore=166.41;MQ=25.95;MQ0=68;OQ=1747.63;QD=6.33;SB=68.24 GT:AD:DP:GL:GQ 0/1:180,94:128:-216.61,-38.56,-254.69:99
-chr1 2605164 rs56278231 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=99.67;MQ=26.36;MQ0=65;OQ=2109.83;QD=7.59;SB=62.23 GT:AD:DP:GL:GQ 0/1:140,134:129:-253.13,-38.87,-210.06:99
-chr1 2605176 rs61763533 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=283;Dels=0.00;HRun=4;HaplotypeScore=192.72;MQ=26.37;MQ0=64;OQ=2285.97;QD=8.08;SB=50.20 GT:AD:DP:GL:GQ 0/1:155,126:135:-272.62,-40.74,-266.81:99
-chr1 2605179 rs7415101 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=293;Dels=0.00;HRun=0;HaplotypeScore=210.05;MQ=26.19;MQ0=65;OQ=1158.68;QD=3.95;SB=-384.91 GT:AD:DP:GL:GQ 0/1:236,57:97:-148.38,-29.23,-220.79:99
-chr1 2605208 . C A 465.30 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=269;Dels=0.00;HRun=1;HaplotypeScore=227.21;MQ=26.15;MQ0=63;QD=1.73;SB=32.07 GT:AD:DP:GL:GQ 0/1:153,116:69:-70.60,-20.78,-175.32:99
-chr1 2605210 . C A 482.33 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=1;HaplotypeScore=189.40;MQ=26.42;MQ0=62;QD=1.81;SB=32.08 GT:AD:DP:GL:GQ 0/1:149,115:67:-71.70,-20.18,-161.20:99
-chr1 2605214 rs61082664 T C 967.30 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=276;Dels=0.00;HRun=2;HaplotypeScore=127.28;MQ=27.64;MQ0=60;QD=3.50;SB=23.10 GT:AD:DP:GL:GQ 0/1:97,178:76:-122.91,-22.90,-161.42:99
-chr1 2605243 . G T 751.64 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=305;Dels=0.00;HRun=1;HaplotypeScore=253.27;MQ=31.30;MQ0=36;QD=2.46;SB=71.20 GT:AD:DP:GL:GQ 0/1:173,132:102:-109.18,-30.73,-247.59:99
-chr1 2605244 rs28455054 T C 853.34 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=304;Dels=0.00;HRun=0;HaplotypeScore=224.13;MQ=31.61;MQ0=34;QD=2.81;SB=-69.58 GT:AD:DP:GL:GQ 0/1:99,183:104:-137.17,-48.55,-265.91:99
-chr1 2605247 . C T 78.33 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=241.73;MQ=32.15;MQ0=30;QD=0.26;SB=92.28 GT:AD:DP:GL:GQ 0/1:261,44:108:-43.66,-32.54,-342.18:99
-chr1 2605252 . C A 302.63 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=316;Dels=0.00;HRun=1;HaplotypeScore=325.23;MQ=32.85;MQ0=33;QD=0.96;SB=113.24 GT:AD:DP:GL:GQ 0/1:197,119:109:-66.39,-32.84,-311.74:99
-chr1 2605255 rs55876897 A C 449.77 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=317;Dels=0.00;HRun=3;HaplotypeScore=260.93;MQ=33.01;MQ0=35;QD=1.42;SB=-150.70 GT:AD:DP:GL:GQ 0/1:239,77:117:-83.21,-34.95,-326.08:99
-chr1 2605259 rs56999649 T G 716.83 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=300;Dels=0.00;HRun=1;HaplotypeScore=227.19;MQ=34.47;MQ0=29;QD=2.39;SB=-184.23 GT:AD:DP:GL:GQ 0/1:116,182:121:-111.42,-36.45,-316.52:99
-chr1 2605264 rs4648676 C T 210.17 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=316;Dels=0.00;HRun=0;HaplotypeScore=557.56;MQ=35.06;MQ0=25;QD=0.67;SB=-21.82 GT:AD:DP:GL:GQ 0/1:289,24:136:-67.74,-43.44,-416.85:99
-chr1 2605334 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=408;Dels=0.00;HRun=4;HaplotypeScore=186.79;MQ=36.75;MQ0=7;OQ=1485.59;QD=3.64;SB=-538.59 GT:AD:DP:GL:GQ 0/1:275,118:294:-243.85,-92.01,-1014.23:99
-chr1 2605341 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=415;Dels=0.00;HRun=0;HaplotypeScore=229.92;MQ=36.33;MQ0=7;OQ=215.75;QD=0.52;SB=102.02 GT:AD:DP:GL:GQ 0/1:365,48:297:-114.34,-89.49,-957.91:99
-chr1 2605353 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=430;Dels=0.00;HRun=0;HaplotypeScore=200.04;MQ=35.29;MQ0=7;OQ=112.93;QD=0.26;SB=60.60 GT:AD:DP:GL:GQ 0/1:389,39:313:-108.94,-94.36,-1191.77:99
-chr1 2605354 rs4648678 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=435;Dels=0.00;HRun=0;HaplotypeScore=203.33;MQ=35.33;MQ0=8;OQ=1038.03;QD=2.39;SB=-273.03 GT:AD:DP:GL:GQ 0/1:373,60:307:-199.57,-92.49,-955.77:99
-chr1 2605374 rs61763535 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=451;Dels=0.00;HRun=4;HaplotypeScore=174.52;MQ=33.98;MQ0=15;OQ=1772.73;QD=3.93;SB=-155.11 GT:AD:DP:GL:GQ 0/1:257,185:286:-266.74,-86.18,-803.52:99
-chr1 2605416 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=641;Dels=0.00;HRun=0;HaplotypeScore=116.73;MQ=29.52;MQ0=38;OQ=101.05;QD=0.16;SB=-26.09 GT:AD:DP:GL:GQ 0/1:592,49:383:-128.76,-115.37,-1229.08:99
-chr1 2605473 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=505;Dels=0.00;HRun=1;HaplotypeScore=72.40;MQ=31.01;MQ0=19;OQ=529.76;QD=1.05;SB=-238.32 GT:AD:DP:GL:GQ 0/1:450,54:383:-171.63,-115.37,-1165.16:99
-chr1 2605495 rs56293461 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=486;Dels=0.00;HRun=0;HaplotypeScore=95.08;MQ=32.56;MQ0=15;OQ=821.52;QD=1.69;SB=-409.31 GT:AD:DP:GL:GQ 0/1:403,80:369:-196.58,-111.15,-1127.43:99
-chr1 2605529 rs28651038 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=428;Dels=0.00;HRun=0;HaplotypeScore=82.79;MQ=34.53;MQ0=16;OQ=2602.34;QD=6.08;SB=-653.43 GT:AD:DP:GL:GQ 0/1:288,123:298:-353.40,-89.88,-659.17:99
-chr1 2605657 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=389;Dels=0.01;HRun=3;HaplotypeScore=175.38;MQ=30.03;MQ0=70;OQ=99.64;QD=0.26;SB=74.25 GT:AD:DP:GL:GQ 0/1:326,61:215:-77.75,-64.51,-660.65:99
-chr1 2605686 . A C 325.50 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=398;Dels=0.00;HRun=0;HaplotypeScore=501.75;MQ=28.89;MQ0=57;QD=0.82;SB=95.28 GT:AD:DP:GL:GQ 0/1:281,115:207:-98.21,-62.38,-634.44:99
-chr1 2605688 . T C 330.54 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=397;Dels=0.00;HRun=2;HaplotypeScore=497.47;MQ=28.92;MQ0=57;QD=0.83;SB=65.64 GT:AD:DP:GL:GQ 0/1:226,152:200:-122.31,-85.97,-661.75:99
-chr1 2605695 rs55827558 C T 892.89 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=401;Dels=0.00;HRun=0;HaplotypeScore=534.98;MQ=29.24;MQ0=57;QD=2.23;SB=9.18 GT:AD:DP:GL:GQ 0/1:315,49:193:-153.53,-60.96,-575.72:99
-chr1 2605725 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=284;Dels=0.00;HRun=0;HaplotypeScore=360.95;MQ=32.85;MQ0=34;OQ=61.42;QD=0.22;SB=89.31 GT:AD:DP:GL:GQ 0/1:168,111:137:-50.75,-41.32,-529.65:94.25
-chr1 2605754 . C T 591.89 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=467.58;MQ=37.63;MQ0=15;QD=2.12;SB=140.37 GT:AD:DP:GL:GQ 0/1:235,40:127:-100.77,-38.29,-327.93:99
-chr1 2605755 . G A 525.10 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=436.48;MQ=37.79;MQ0=15;QD=1.94;SB=80.56 GT:AD:DP:GL:GQ 0/1:156,112:135:-96.50,-40.71,-357.83:99
-chr1 2605761 rs61763538 C G 1339.29 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=259;Dels=0.00;HRun=1;HaplotypeScore=254.24;MQ=38.34;MQ0=17;QD=5.17;SB=4.72 GT:AD:DP:GL:GQ 0/1:84,169:121:-173.69,-36.48,-327.29:99
-chr1 2605783 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=297;Dels=0.00;HRun=0;HaplotypeScore=293.73;MQ=35.79;MQ0=20;OQ=562.93;QD=1.90;SB=121.81 GT:AD:DP:GL:GQ 0/1:195,74:123:-135.97,-76.40,-335.89:99
-chr1 2605795 . G A 252.45 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=324;Dels=0.00;HRun=0;HaplotypeScore=499.11;MQ=34.45;MQ0=20;QD=0.78;SB=203.66 GT:AD:DP:GL:GQ 0/1:201,116:126:-66.49,-37.96,-390.94:99
-chr1 2605804 . C T 66.11 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=356;Dels=0.00;HRun=0;HaplotypeScore=268.83;MQ=34.41;MQ0=22;QD=0.19;SB=-31.15 GT:AD:DP:GL:GQ 0/1:312,39:152:-58.55,-48.66,-460.06:98.95
-chr1 2605805 . G A 2340.79 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=356;Dels=0.00;HRun=0;HaplotypeScore=224.04;MQ=34.36;MQ0=23;QD=6.58;SB=164.74 GT:AD:DP:GL:GQ 0/1:199,157:186:-293.46,-56.10,-343.74:99
-chr1 2605831 . C T 1118.55 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=295;Dels=0.00;HRun=0;HaplotypeScore=238.92;MQ=35.23;MQ0=23;QD=3.79;SB=174.98 GT:AD:DP:GL:GQ 0/1:220,69:156:-162.17,-47.03,-376.03:99
-chr1 2605834 . C T 954.45 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=236.05;MQ=35.80;MQ0=20;QD=3.42;SB=200.51 GT:AD:DP:GL:GQ 0/1:218,59:162:-147.54,-48.81,-432.29:99
-chr1 2605836 . T G 306.78 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=263;Dels=0.00;HRun=0;HaplotypeScore=206.04;MQ=36.89;MQ0=20;QD=1.17;SB=188.58 GT:AD:DP:GL:GQ 0/1:205,52:142:-88.13,-54.17,-440.06:99
-chr1 2605841 . A G 545.99 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=1;HaplotypeScore=155.67;MQ=38.58;MQ0=20;QD=2.35;SB=182.62 GT:AD:DP:GL:GQ 0/1:160,70:131:-97.35,-39.47,-411.37:99
-chr1 2605874 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=0;HaplotypeScore=124.99;MQ=42.37;MQ0=11;OQ=512.21;QD=2.21;SB=-14.46 GT:AD:DP:GL:GQ 0/1:155,74:147:-102.43,-47.93,-470.53:99
-chr1 2605886 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=108.30;MQ=44.38;MQ0=8;OQ=363.46;QD=1.81;SB=149.68 GT:AD:DP:GL:GQ 0/1:128,71:139:-81.51,-41.88,-451.45:99
-chr1 2605893 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=0;HaplotypeScore=120.52;MQ=42.83;MQ0=17;OQ=327.45;QD=1.66;SB=185.60 GT:AD:DP:GL:GQ 0/1:128,68:129:-77.12,-41.09,-417.50:99
-chr1 2605899 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=1;HaplotypeScore=109.97;MQ=40.67;MQ0=24;OQ=225.12;QD=1.10;SB=176.57 GT:AD:DP:GL:GQ 0/1:183,21:132:-65.55,-39.76,-408.38:99
-chr1 2605937 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=2;HaplotypeScore=54.75;MQ=35.12;MQ0=33;OQ=125.52;QD=0.63;SB=203.69 GT:AD:DP:GL:GQ 0/1:151,48:110:-48.99,-33.15,-378.43:99
-chr1 2605949 rs55869659 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=295;Dels=0.00;HRun=1;HaplotypeScore=266.34;MQ=30.03;MQ0=43;OQ=1589.71;QD=5.39;SB=-453.79 GT:AD:DP:GL:GQ 0/1:231,64:135:-202.93,-40.67,-294.60:99
-chr1 2605976 rs6683769 G C 6974.39 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=343;Dels=0.02;HRun=3;HaplotypeScore=423.51;MQ=29.44;MQ0=37;QD=20.33;SB=-2874.56 GT:AD:DP:GL:GQ 1/1:19,284:159:-696.44,-51.43,-8.07:99
-chr1 2605977 rs6661848 C T 1027.05 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=358;Dels=0.00;HRun=0;HaplotypeScore=456.32;MQ=29.31;MQ0=37;QD=2.87;SB=-210.09 GT:AD:DP:GL:GQ 0/1:307,50:125:-143.65,-37.67,-316.41:99
-chr1 2605979 . C A 1028.24 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=357;Dels=0.00;HRun=1;HaplotypeScore=354.37;MQ=29.31;MQ0=37;QD=2.88;SB=152.21 GT:AD:DP:GL:GQ 0/1:297,56:154:-152.50,-46.39,-400.06:99
-chr1 2605985 . A G 302.88 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=344;Dels=0.00;HRun=1;HaplotypeScore=327.75;MQ=29.96;MQ0=33;QD=0.88;SB=170.59 GT:AD:DP:GL:GQ 0/1:269,70:128:-72.14,-38.56,-425.79:99
-chr1 2606004 . C T 951.09 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=290;Dels=0.00;HRun=0;HaplotypeScore=672.95;MQ=32.63;MQ0=23;QD=3.28;SB=87.89 GT:AD:DP:GL:GQ 0/1:220,66:128:-136.98,-38.59,-302.88:99
-chr1 2606005 rs6683777 G A 1342.36 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=287;Dels=0.00;HRun=0;HaplotypeScore=631.13;MQ=33.21;MQ0=21;QD=4.68;SB=-76.00 GT:AD:DP:GL:GQ 0/1:85,177:126:-230.50,-92.98,-257.82:99
-chr1 2606006 rs57008511 G T 1549.99 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=289;Dels=0.00;HRun=0;HaplotypeScore=644.99;MQ=33.16;MQ0=21;QD=5.36;SB=-385.70 GT:AD:DP:GL:GQ 0/1:228,60:127:-196.55,-38.27,-243.78:99
-chr1 2606009 . A T 459 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=281;Dels=0.00;HRun=0;HaplotypeScore=430.52;MQ=33.69;MQ0=19;QD=1.63;SB=105.62 GT:AD:DP:GL:GQ 0/1:113,66:123:-152.84,-103.65,-371.87:99
-chr1 2606031 . C G 597.38 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=1;HaplotypeScore=164.77;MQ=37.58;MQ0=8;QD=2.69;SB=139.07 GT:AD:DP:GL:GQ 0/1:114,51:127:-143.77,-80.75,-412.83:99
-chr1 2606038 . C A 277.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=0;HaplotypeScore=107.00;MQ=38.94;MQ0=8;QD=1.28;SB=120.78 GT:AD:DP:GL:GQ 0/1:160,54:121:-67.44,-36.45,-363.09:99
-chr1 2606041 . G T 124.23 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=0;HaplotypeScore=125.82;MQ=39.98;MQ0=7;QD=0.60;SB=144.54 GT:AD:DP:GL:GQ 0/1:161,44:113:-49.75,-34.04,-340.70:99
-chr1 2606206 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=315;Dels=0.00;HRun=1;HaplotypeScore=256.44;MQ=28.06;MQ0=39;OQ=155.48;QD=0.49;SB=-29.90 GT:AD:DP:GL:GQ 0/1:209,63:107:-66.50,-47.67,-397.67:99
-chr1 2606217 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=250;Dels=0.00;HRun=3;HaplotypeScore=224.65;MQ=29.86;MQ0=28;OQ=458.20;QD=1.83;SB=-95.78 GT:AD:DP:GL:GQ 0/1:87,160:81:-76.54,-27.44,-208.99:99
-chr1 2606220 rs36162961 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=249;Dels=0.00;HRun=0;HaplotypeScore=180.31;MQ=29.93;MQ0=27;OQ=201.47;QD=0.81;SB=-7.21 GT:AD:DP:GL:GQ 0/1:213,32:103:-54.47,-31.04,-311.81:99
-chr1 2606247 rs6662065 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=156;Dels=0.00;HRun=0;HaplotypeScore=58.65;MQ=36.60;MQ0=15;OQ=2337.23;QD=14.98;SB=-1097.47 GT:AD:DP:GL:GQ 0/1:41,86:97:-280.18,-43.17,-102.47:99
-chr1 2606279 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=1;HaplotypeScore=25.92;MQ=42.76;MQ0=2;OQ=312.76;QD=2.56;SB=-74.63 GT:AD:DP:GL:GQ 0/1:94,28:104:-65.90,-31.34,-343.27:99
-chr1 2606294 rs28562476 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=129;Dels=0.00;HRun=0;HaplotypeScore=45.48;MQ=41.64;MQ0=3;OQ=158.71;QD=1.23;SB=-91.27 GT:AD:DP:GL:GQ 0/1:99,30:98:-48.69,-29.54,-326.61:99
-chr1 2606300 rs6662172 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=148;Dels=0.00;HRun=1;HaplotypeScore=45.57;MQ=40.35;MQ0=4;OQ=2445.81;QD=16.53;SB=-1064.82 GT:AD:DP:GL:GQ 0/1:63,84:112:-281.60,-33.73,-119.13:99
-chr1 2606379 rs28410393 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=122;Dels=0.00;HRun=0;HaplotypeScore=27.63;MQ=39.78;MQ0=6;OQ=368.46;QD=3.02;SB=6.71 GT:AD:DP:GL:GQ 0/1:95,26:92:-67.86,-27.73,-327.77:99
-chr1 2606380 rs28520729 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=27.50;MQ=39.82;MQ0=6;OQ=559.99;QD=4.71;SB=-194.85 GT:AD:DP:GL:GQ 0/1:94,25:96:-88.22,-28.94,-322.33:99
-chr1 2606465 rs28436923 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=147;Dels=0.00;HRun=0;HaplotypeScore=131.13;MQ=40.98;MQ0=13;OQ=2035.71;QD=13.85;SB=-905.49 GT:AD:DP:GL:GQ 0/1:80,64:81:-231.26,-24.41,-73.56:99
-chr1 2606518 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=218.01;MQ=25.24;MQ0=20;OQ=216.97;QD=1.17;SB=68.19 GT:AD:DP:GL:GQ 0/1:119,56:69:-45.78,-20.79,-195.94:99
-chr1 2606520 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=182;Dels=0.01;HRun=1;HaplotypeScore=197.55;MQ=24.90;MQ0=18;OQ=425.87;QD=2.34;SB=7.72 GT:AD:DP:GL:GQ 0/1:98,71:68:-66.40,-20.53,-203.96:99
-chr1 2606555 rs55641610 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=142;Dels=0.00;HRun=0;HaplotypeScore=86.83;MQ=22.44;MQ0=15;OQ=611.31;QD=4.31;SB=-217.67 GT:AD:DP:GL:GQ 0/1:66,72:64:-83.70,-19.29,-186.04:99
-chr1 2606567 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=1;HaplotypeScore=115.34;MQ=22.30;MQ0=19;OQ=114.64;QD=0.87;SB=-3.31 GT:AD:DP:GL:GQ 0/1:113,14:59:-32.52,-17.77,-180.72:99
-chr1 2606594 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=41.70;MQ=23.56;MQ0=16;OQ=75.03;QD=0.63;SB=28.48 GT:AD:DP:GL:GQ 0/1:83,36:66:-30.68,-19.89,-255.45:99
-chr1 2606643 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=21.80;MQ=30.64;MQ0=12;OQ=1721.23;QD=15.37;SB=-793.00 GT:AD:DP:GL:GQ 0/1:46,66:82:-200.11,-24.70,-94.60:99
-chr1 2606798 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=16.08;MQ=18.33;MQ0=33;OQ=155.22;QD=2.13;SB=-92.26 GT:AD:DP:GL:GQ 0/1:36,34:23:-29.36,-10.56,-75.52:99
-chr1 2607095 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=174;Dels=0.00;HRun=0;HaplotypeScore=115.98;MQ=20.76;MQ0=93;OQ=63.80;QD=0.37;SB=-35.41 GT:AD:DP:GL:GQ 0/1:164,10:54:-25.95,-16.29,-195.04:96.63
-chr1 2607127 rs28555663 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.00;HRun=0;HaplotypeScore=71.01;MQ=31.05;MQ0=18;OQ=1628.35;QD=13.57;SB=-397.76 GT:AD:DP:GL:GQ 0/1:27,60:78:-215.41,-49.30,-93.76:99
-chr1 2607162 rs61763542 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=215;Dels=0.00;HRun=1;HaplotypeScore=85.56;MQ=29.70;MQ0=30;OQ=368.13;QD=1.71;SB=-56.56 GT:AD:DP:GL:GQ 0/1:178,35:124:-77.45,-37.35,-360.47:99
-chr1 2607163 . G A 13.12 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=2;HaplotypeScore=87.56;MQ=29.61;MQ0=31;QD=0.06;SB=-11.83 GT:AD:DP:GL:GQ 0/1:187,28:129:-43.44,-38.86,-425.52:45.74
-chr1 2607204 . G C 43.54 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=196;Dels=0.00;HRun=0;HaplotypeScore=43.04;MQ=31.64;MQ0=30;QD=0.22;SB=-29.18 GT:AD:DP:GL:GQ 0/1:170,26:109:-40.50,-32.86,-424.67:76.37
-chr1 2607231 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=1;HaplotypeScore=72.77;MQ=31.17;MQ0=24;OQ=125.47;QD=0.87;SB=-42.71 GT:AD:DP:GL:GQ 0/1:125,19:75:-38.43,-22.60,-228.94:99
-chr1 2607242 rs61763545 G T 46.85 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=36.90;MQ=31.04;MQ0=29;QD=0.40;SB=43.89 GT:AD:DP:GL:GQ 0/1:84,30:54:-24.25,-16.28,-154.98:79.69
-chr1 2607298 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=68.12;MQ=14.41;MQ0=82;OQ=66.90;QD=0.45;SB=20.86 GT:AD:DP:GL:GQ 0/1:129,10:21:-19.87,-9.89,-58.18:99
-chr1 2607355 rs61765818 C T 12.91 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=56.37;MQ=16.61;MQ0=62;QD=0.11;SB=29.06 GT:AD:DP:GL:GQ 0/1:90,27:23:-11.49,-6.94,-61.93:45.51
-chr1 2607366 . A G 13.05 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=2;HaplotypeScore=34.50;MQ=17.10;MQ0=55;QD=0.12;SB=29.12 GT:AD:DP:GL:GQ 0/1:102,6:22:-11.19,-6.63,-75.23:45.67
-chr1 2607368 rs61763546 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=35.70;MQ=17.26;MQ0=53;OQ=303.93;QD=2.87;SB=-146.92 GT:AD:DP:GL:GQ 0/1:46,59:26:-41.51,-7.84,-47.60:99
-chr1 2607409 . G A 15.60 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=0;HaplotypeScore=56.89;MQ=28.46;MQ0=6;QD=0.24;SB=38.64 GT:AD:DP:GL:GQ 0/1:41,24:37:-15.99,-11.15,-106.07:48.31
-chr1 2607422 rs56133135 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=19.37;MQ=32.69;MQ0=0;OQ=693.38;QD=12.61;SB=2.03 GT:AD:DP:GL:GQ 0/1:26,28:39:-84.38,-11.76,-83.37:99
-chr1 2607465 rs61763547 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=40.98;MQ=25.86;MQ0=35;OQ=388.51;QD=4.63;SB=-36.91 GT:AD:DP:GL:GQ 0/1:60,23:42:-54.79,-12.65,-94.92:99
-chr1 2607520 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=176;Dels=0.00;HRun=1;HaplotypeScore=43.55;MQ=22.90;MQ0=79;OQ=121.23;QD=0.69;SB=8.68 GT:AD:DP:GL:GQ 0/1:158,14:67:-35.59,-20.18,-205.83:99
-chr1 2607562 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=147;Dels=0.00;HRun=0;HaplotypeScore=58.31;MQ=31.97;MQ0=28;OQ=222.37;QD=1.51;SB=-108.77 GT:AD:DP:GL:GQ 0/1:118,16:74:-51.32,-25.80,-191.60:99
-chr1 2607568 rs61763549 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=0;HaplotypeScore=80.59;MQ=33.84;MQ0=16;OQ=1066.74;QD=7.90;SB=-480.14 GT:AD:DP:GL:GQ 0/1:64,70:72:-131.67,-21.72,-176.26:99
-chr1 2607579 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=1;HaplotypeScore=59.49;MQ=32.83;MQ0=15;OQ=376.87;QD=2.37;SB=-134.64 GT:AD:DP:GL:GQ 0/1:129,30:89:-67.78,-26.81,-244.98:99
-chr1 2607622 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=166;Dels=0.00;HRun=1;HaplotypeScore=74.61;MQ=28.79;MQ0=41;OQ=121.71;QD=0.73;SB=1.49 GT:AD:DP:GL:GQ 0/1:144,22:68:-35.94,-20.49,-206.61:99
-chr1 2607635 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=177;Dels=0.00;HRun=1;HaplotypeScore=30.67;MQ=24.43;MQ0=69;OQ=168.44;QD=0.95;SB=-26.38 GT:AD:DP:GL:GQ 0/1:144,24:48:-34.61,-14.49,-156.01:99
-chr1 2607650 . G A 36.08 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=194;Dels=0.00;HRun=1;HaplotypeScore=75.42;MQ=22.15;MQ0=92;QD=0.19;SB=17.06 GT:AD:DP:GL:GQ 0/1:183,11:48:-21.35,-14.46,-155.19:68.92
-chr1 2607670 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=229;Dels=0.00;HRun=0;HaplotypeScore=160.50;MQ=16.74;MQ0=141;OQ=99.29;QD=0.43;SB=62.11 GT:AD:DP:GL:GQ 0/1:219,9:33:-23.18,-9.97,-80.62:99
-chr1 2607674 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=226;Dels=0.00;HRun=0;HaplotypeScore=115.26;MQ=15.31;MQ0=147;OQ=144.37;QD=0.64;SB=59.23 GT:AD:DP:GL:GQ 0/1:144,82:32:-27.37,-9.65,-111.07:99
-chr1 2607705 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=307;Dels=0.00;HRun=0;HaplotypeScore=135.41;MQ=9.50;MQ0=238;OQ=88.23;QD=0.29;SB=44.16 GT:AD:DP:GL:GQ 0/1:293,13:26:-19.94,-7.83,-70.73:99
-chr1 2607732 . A G 46.69 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=264;Dels=0.00;HRun=0;HaplotypeScore=160.28;MQ=9.40;MQ0=205;QD=0.18;SB=38.16 GT:AD:DP:GL:GQ 0/1:246,15:21:-14.28,-6.33,-70.03:79.52
-chr1 2607768 . C G 49.76 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=95.94;MQ=10.01;MQ0=124;QD=0.30;SB=-3.98 GT:AD:DP:GL:GQ 0/1:136,25:16:-13.08,-4.82,-52.20:82.60
-chr1 2607891 rs7416366 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=122;Dels=0.00;HRun=0;HaplotypeScore=58.84;MQ=34.41;MQ0=14;OQ=1644.48;QD=13.48;SB=-506.65 GT:AD:DP:GL:GQ 0/1:59,63:73:-189.73,-22.00,-69.36:99
-chr1 2607919 . C G 24.55 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=0;HaplotypeScore=83.78;MQ=30.54;MQ0=25;QD=0.11;SB=109.84 GT:AD:DP:GL:GQ 0/1:205,16:120:-41.91,-36.17,-462.22:57.38
-chr1 2607925 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=225;Dels=0.00;HRun=1;HaplotypeScore=102.41;MQ=29.59;MQ0=28;OQ=208.07;QD=0.92;SB=12.89 GT:AD:DP:GL:GQ 0/1:171,51:116:-59.04,-34.95,-344.67:99
-chr1 2607990 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=0;HaplotypeScore=62.53;MQ=19.75;MQ0=60;OQ=143.02;QD=0.67;SB=-11.93 GT:AD:DP:GL:GQ 0/1:169,45:70:-38.68,-21.10,-211.21:99
-chr1 2608016 rs61763552 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=154;Dels=0.00;HRun=1;HaplotypeScore=33.08;MQ=18.38;MQ0=35;OQ=157.73;QD=1.02;SB=-56.91 GT:AD:DP:GL:GQ 0/1:74,80:55:-35.63,-16.57,-153.82:99
-chr1 2608035 rs60386739 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=68.10;MQ=20.23;MQ0=19;OQ=139.83;QD=0.99;SB=-34.61 GT:AD:DP:GL:GQ 0/1:123,11:68:-37.75,-20.49,-226.75:99
-chr1 2608187 . T A 19.78 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=100.91;MQ=20.82;MQ0=35;QD=0.14;SB=68.21 GT:AD:DP:GL:GQ 0/1:73,68:45:-18.82,-13.56,-139.70:52.57
-chr1 2608269 rs28464857 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=186;Dels=0.00;HRun=0;HaplotypeScore=134.04;MQ=20.25;MQ0=84;OQ=169.32;QD=0.91;SB=-92.57 GT:AD:DP:GL:GQ 0/1:170,15:57:-37.38,-17.17,-176.94:99
-chr1 2608484 rs28436796 C G 0.48 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=9.24;MQ=47.84;MQ0=1;OQ=487.04;QD=5.47;SB=-196.59 GT:AD:DP:GL:GQ 0/1:66,21:74:-74.31,-22.32,-232.63:99
-chr1 2608664 rs4074927 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=182;Dels=0.01;HRun=1;HaplotypeScore=99.89;MQ=34.06;MQ0=19;OQ=2375.90;QD=13.05;SB=-939.83 GT:AD:DP:GL:GQ 0/1:91,85:111:-274.32,-33.45,-107.97:99
-chr1 2608867 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=118;Dels=0.01;HRun=2;HaplotypeScore=20.49;MQ=45.47;MQ0=7;OQ=974.46;QD=8.26;SB=-210.08 GT:AD:DP:GL:GQ 0/1:62,55:87:-126.99,-26.26,-221.81:99
-chr1 2609068 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=3;HaplotypeScore=118.35;MQ=34.13;MQ0=24;OQ=526.94;QD=2.38;SB=137.47 GT:AD:DP:GL:GQ 0/1:93,112:118:-95.11,-39.14,-362.67:99
-chr1 2609088 rs6604995 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=244;Dels=0.00;HRun=1;HaplotypeScore=80.61;MQ=35.58;MQ0=31;OQ=2415.96;QD=9.90;SB=-1183.52 GT:AD:DP:GL:GQ 0/1:168,75:136:-285.85,-40.97,-232.15:99
-chr1 2609117 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=242;Dels=0.00;HRun=0;HaplotypeScore=86.85;MQ=40.05;MQ0=22;OQ=564.86;QD=2.33;SB=136.90 GT:AD:DP:GL:GQ 0/1:188,54:147:-104.06,-44.29,-429.75:99
-chr1 2609119 . T A 10.35 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=240;Dels=0.00;HRun=1;HaplotypeScore=66.02;MQ=40.40;MQ0=19;QD=0.04;SB=-13.71 GT:AD:DP:GL:GQ 0/1:216,24:153:-50.36,-46.09,-521.00:42.77
-chr1 2609136 rs6680012 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=252;Dels=0.00;HRun=0;HaplotypeScore=138.11;MQ=41.19;MQ0=14;OQ=1288.83;QD=5.11;SB=-20.42 GT:AD:DP:GL:GQ 0/1:111,140:159:-180.06,-47.89,-385.06:99
-chr1 2609225 rs61765683 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=279;Dels=0.00;HRun=0;HaplotypeScore=196.30;MQ=28.44;MQ0=55;OQ=715.74;QD=2.57;SB=-196.88 GT:AD:DP:GL:GQ 0/1:215,53:119:-124.19,-49.34,-290.35:99
-chr1 2609273 rs4648680 A T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=189;Dels=0.00;HRun=0;HaplotypeScore=41.61;MQ=19.84;MQ0=34;OQ=2444.19;QD=12.93;SB=-891.61 GT:AD:DP:GL:GQ 1/1:0,186:71:-248.05,-21.40,-0.04:99
-chr1 2609305 rs6672446 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=196;Dels=0.00;HRun=1;HaplotypeScore=44.27;MQ=21.28;MQ0=40;OQ=1443.42;QD=7.36;SB=-313.15 GT:AD:DP:GL:GQ 0/1:121,75:90:-174.74,-27.11,-141.16:99
-chr1 2609332 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=25.23;MQ=24.42;MQ0=31;OQ=1010.88;QD=5.29;SB=-411.33 GT:AD:DP:GL:GQ 0/1:130,60:101:-134.82,-30.45,-224.41:99
-chr1 2609354 rs61765685 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=264;Dels=0.00;HRun=0;HaplotypeScore=43.36;MQ=26.38;MQ0=47;OQ=877.95;QD=3.33;SB=-290.40 GT:AD:DP:GL:GQ 0/1:123,140:122:-127.86,-36.78,-326.56:99
-chr1 2609381 . C A 220.25 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=378;Dels=0.00;HRun=0;HaplotypeScore=205.42;MQ=26.54;MQ0=63;QD=0.58;SB=-92.16 GT:AD:DP:GL:GQ 0/1:327,50:132:-65.07,-39.76,-400.14:99
-chr1 2609387 . C A 185.57 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=439;Dels=0.00;HRun=0;HaplotypeScore=250.48;MQ=26.77;MQ0=67;QD=0.42;SB=5.95 GT:AD:DP:GL:GQ 0/1:387,52:145:-65.52,-43.68,-445.14:99
-chr1 2609389 . C T 92.18 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=450;Dels=0.00;HRun=0;HaplotypeScore=251.37;MQ=26.71;MQ0=67;QD=0.20;SB=175.01 GT:AD:DP:GL:GQ 0/1:391,58:155:-59.19,-46.69,-504.94:99
-chr1 2609452 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=378;Dels=0.00;HRun=2;HaplotypeScore=241.26;MQ=31.94;MQ0=54;OQ=971.37;QD=2.57;SB=-357.67 GT:AD:DP:GL:GQ 0/1:305,73:146:-144.40,-43.98,-395.70:99
-chr1 2609455 rs58318704 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=356;Dels=0.00;HRun=0;HaplotypeScore=220.51;MQ=31.91;MQ0=49;OQ=2158.97;QD=6.06;SB=-1017.43 GT:AD:DP:GL:GQ 0/1:79,219:141:-270.22,-51.04,-310.17:99
-chr1 2609547 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=1;HaplotypeScore=66.94;MQ=35.31;MQ0=17;OQ=674.03;QD=3.60;SB=-244.40 GT:AD:DP:GL:GQ 0/1:135,50:133:-110.75,-40.07,-356.06:99
-chr1 2609555 rs28575476 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=0;HaplotypeScore=68.51;MQ=35.35;MQ0=12;OQ=1288.35;QD=7.53;SB=-481.51 GT:AD:DP:GL:GQ 0/1:88,78:120:-168.27,-36.15,-252.36:99
-chr1 2609591 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=34.97;MQ=33.84;MQ0=11;OQ=2484.13;QD=14.44;SB=-938.03 GT:AD:DP:GL:GQ 0/1:84,88:135:-292.43,-40.73,-257.29:99
-chr1 2609644 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=353;Dels=0.00;HRun=1;HaplotypeScore=213.12;MQ=29.19;MQ0=26;OQ=1530.86;QD=4.34;SB=-311.00 GT:AD:DP:GL:GQ 0/1:205,118:177:-209.80,-53.43,-491.62:99
-chr1 2609668 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=375;Dels=0.01;HRun=0;HaplotypeScore=299.53;MQ=28.31;MQ0=38;OQ=119.51;QD=0.32;SB=-39.52 GT:AD:DP:GL:GQ 0/1:330,33:168:-65.89,-50.66,-484.68:99
-chr1 2609669 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=370;Dels=0.01;HRun=3;HaplotypeScore=295.29;MQ=28.20;MQ0=38;OQ=509.10;QD=1.38;SB=-148.65 GT:AD:DP:GL:GQ 0/1:202,146:144:-97.68,-43.48,-474.43:99
-chr1 2609682 . T C 10.13 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=358;Dels=0.00;HRun=1;HaplotypeScore=318.76;MQ=28.20;MQ0=43;QD=0.03;SB=29.61 GT:AD:DP:GL:GQ 0/1:328,21:141:-56.49,-52.23,-495.36:42.52
-chr1 2609688 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=357;Dels=0.00;HRun=0;HaplotypeScore=304.49;MQ=28.68;MQ0=43;OQ=540.31;QD=1.51;SB=-146.86 GT:AD:DP:GL:GQ 0/1:288,44:135:-97.99,-40.67,-405.76:99
-chr1 2609713 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=325;Dels=0.00;HRun=2;HaplotypeScore=235.46;MQ=29.07;MQ0=50;OQ=183.31;QD=0.56;SB=-70.06 GT:AD:DP:GL:GQ 0/1:293,30:98:-51.18,-29.56,-309.43:99
-chr1 2609764 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=67.69;MQ=41.15;MQ0=28;OQ=547.70;QD=3.06;SB=-220.32 GT:AD:DP:GL:GQ 0/1:154,22:97:-87.34,-29.29,-296.73:99
-chr1 2609770 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=51.04;MQ=41.72;MQ0=28;OQ=50.39;QD=0.29;SB=107.80 GT:AD:DP:GL:GQ 0/1:92,83:96:-37.25,-28.93,-332.67:83.23
-chr1 2609843 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=0;HaplotypeScore=18.24;MQ=41.49;MQ0=22;OQ=514.69;QD=3.78;SB=-103.96 GT:AD:DP:GL:GQ 0/1:89,47:97:-83.99,-29.23,-261.15:99
-chr1 2609879 rs60995822 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.00;HRun=0;HaplotypeScore=53.77;MQ=31.75;MQ0=20;OQ=1688.97;QD=13.62;SB=-590.07 GT:AD:DP:GL:GQ 0/1:21,102:69:-192.97,-20.79,-48.84:99
-chr1 2609938 rs61765691 T C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=210;Dels=0.00;HRun=0;HaplotypeScore=78.06;MQ=23.32;MQ0=40;OQ=3717.12;QD=17.70;SB=-1751.06 GT:AD:DP:GL:GQ 1/1:3,206:105:-370.71,-31.64,-0.05:99
-chr1 2610024 rs60041779 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=125;Dels=0.00;HRun=0;HaplotypeScore=93.88;MQ=40.95;MQ0=10;OQ=112.09;QD=0.90;SB=83.51 GT:AD:DP:GL:GQ 0/1:77,47:69:-35.30,-20.81,-248.60:99
-chr1 2610174 rs61765693 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=331;Dels=0.00;HRun=1;HaplotypeScore=45.52;MQ=28.55;MQ0=47;OQ=762.69;QD=2.30;SB=-121.02 GT:AD:DP:GL:GQ 0/1:162,168:127:-117.91,-38.35,-381.81:99
-chr1 2610186 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=354;Dels=0.00;HRun=0;HaplotypeScore=102.42;MQ=26.42;MQ0=47;OQ=1467.29;QD=4.14;SB=-129.66 GT:AD:DP:GL:GQ 0/1:303,49:127:-191.55,-41.54,-284.06:99
-chr1 2610220 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=358;Dels=0.00;HRun=0;HaplotypeScore=158.15;MQ=26.10;MQ0=33;OQ=52.73;QD=0.15;SB=-33.83 GT:AD:DP:GL:GQ 0/1:323,33:128:-47.12,-38.57,-405.99:85.57
-chr1 2610228 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=347;Dels=0.00;HRun=0;HaplotypeScore=258.31;MQ=25.86;MQ0=32;OQ=417.23;QD=1.20;SB=-217.33 GT:AD:DP:GL:GQ 0/1:235,103:129:-86.15,-41.14,-407.87:99
-chr1 2610288 rs61765694 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=240;Dels=0.00;HRun=0;HaplotypeScore=161.76;MQ=34.28;MQ0=24;OQ=460.60;QD=1.92;SB=-235.27 GT:AD:DP:GL:GQ 0/1:119,106:122:-91.58,-42.24,-307.51:99
-chr1 2610304 rs57887432 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=214;Dels=0.00;HRun=1;HaplotypeScore=126.12;MQ=34.24;MQ0=19;OQ=2078.47;QD=9.71;SB=-912.59 GT:AD:DP:GL:GQ 0/1:141,72:106:-243.09,-31.96,-204.85:99
-chr1 2610325 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=0;HaplotypeScore=58.60;MQ=38.14;MQ0=8;OQ=610.61;QD=3.94;SB=-307.83 GT:AD:DP:GL:GQ 0/1:117,38:94:-92.67,-28.33,-261.00:99
-chr1 2610342 rs58318302 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=111;Dels=0.00;HRun=0;HaplotypeScore=64.33;MQ=41.99;MQ0=6;OQ=1628.60;QD=14.67;SB=-308.68 GT:AD:DP:GL:GQ 0/1:43,66:83:-191.15,-25.00,-121.94:99
-chr1 2610414 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=331;Dels=0.00;HRun=0;HaplotypeScore=235.51;MQ=30.47;MQ0=22;OQ=935.47;QD=2.83;SB=-429.72 GT:AD:DP:GL:GQ 0/1:275,53:139:-142.25,-45.42,-348.13:99
-chr1 2610415 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=337;Dels=0.00;HRun=1;HaplotypeScore=237.48;MQ=30.55;MQ0=22;OQ=1122.12;QD=3.33;SB=-419.64 GT:AD:DP:GL:GQ 0/1:156,170:150:-188.30,-72.80,-443.59:99
-chr1 2610441 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=398;Dels=0.00;HRun=0;HaplotypeScore=305.07;MQ=30.41;MQ0=29;OQ=523.24;QD=1.31;SB=-254.15 GT:AD:DP:GL:GQ 0/1:145,184:159:-118.96,-63.35,-451.63:99
-chr1 2610473 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=351;Dels=0.00;HRun=1;HaplotypeScore=331.68;MQ=29.41;MQ0=37;OQ=1376.69;QD=3.92;SB=-162.02 GT:AD:DP:GL:GQ 0/1:286,64:127:-179.22,-38.27,-253.78:99
-chr1 2610474 rs28418735 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=350;Dels=0.03;HRun=3;HaplotypeScore=309.89;MQ=29.49;MQ0=38;OQ=65.43;QD=0.19;SB=221.76 GT:AD:DP:GL:GQ 0/1:271,68:132:-49.66,-39.83,-486.19:98.27
-chr1 2610506 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=0;HaplotypeScore=143.13;MQ=32.96;MQ0=24;OQ=241.48;QD=1.21;SB=-28.90 GT:AD:DP:GL:GQ 0/1:85,107:74:-49.73,-22.29,-227.60:99
-chr1 2610517 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=3;HaplotypeScore=142.26;MQ=34.55;MQ0=20;OQ=220.80;QD=1.35;SB=75.68 GT:AD:DP:GL:GQ 0/1:65,82:63:-52.24,-26.88,-202.10:99
-chr1 2610573 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=104.72;MQ=37.56;MQ0=8;OQ=553.10;QD=3.29;SB=-39.90 GT:AD:DP:GL:GQ 0/1:88,80:80:-82.71,-24.12,-188.70:99
-chr1 2610594 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=122;Dels=0.02;HRun=0;HaplotypeScore=84.91;MQ=43.41;MQ0=3;OQ=1001.55;QD=8.21;SB=-522.00 GT:AD:DP:GL:GQ 0/1:52,66:81:-127.86,-24.42,-216.74:99
-chr1 2610598 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=2;HaplotypeScore=59.26;MQ=42.74;MQ0=3;OQ=1239.36;QD=9.61;SB=-593.34 GT:AD:DP:GL:GQ 0/1:51,77:86:-153.17,-25.95,-194.38:99
-chr1 2610632 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=184;Dels=0.00;HRun=0;HaplotypeScore=151.91;MQ=39.51;MQ0=6;OQ=369.19;QD=2.01;SB=-62.83 GT:AD:DP:GL:GQ 0/1:154,30:112:-73.95,-33.75,-316.70:99
-chr1 2610635 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=139.15;MQ=38.51;MQ0=6;OQ=274.48;QD=1.35;SB=-41.80 GT:AD:DP:GL:GQ 0/1:164,37:123:-67.82,-37.08,-455.22:99
-chr1 2610665 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=1;HaplotypeScore=315.73;MQ=36.51;MQ0=11;OQ=1591.77;QD=7.40;SB=-670.77 GT:AD:DP:GL:GQ 0/1:149,65:109:-195.35,-32.89,-252.45:99
-chr1 2610712 rs55957791 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=278;Dels=0.00;HRun=0;HaplotypeScore=331.10;MQ=30.73;MQ0=38;OQ=351.17;QD=1.26;SB=50.69 GT:AD:DP:GL:GQ 0/1:157,116:120:-81.22,-42.82,-389.65:99
-chr1 2610714 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=276;Dels=0.03;HRun=1;HaplotypeScore=276.80;MQ=30.44;MQ0=40;OQ=799.29;QD=2.90;SB=-215.74 GT:AD:DP:GL:GQ 0/1:208,58:112:-116.35,-33.14,-272.42:99
-chr1 2610938 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=0;HaplotypeScore=61.08;MQ=40.33;MQ0=9;OQ=2312.34;QD=13.21;SB=-496.11 GT:AD:DP:GL:GQ 0/1:80,95:114:-268.87,-34.35,-152.15:99
-chr1 2610982 rs61765696 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=168;Dels=0.00;HRun=1;HaplotypeScore=77.40;MQ=36.09;MQ0=4;OQ=730.22;QD=4.35;SB=-250.72 GT:AD:DP:GL:GQ 0/1:133,34:93:-104.33,-28.02,-240.35:99
-chr1 2610988 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=177;Dels=0.00;HRun=2;HaplotypeScore=104.66;MQ=37.43;MQ0=4;OQ=180.91;QD=1.02;SB=-14.66 GT:AD:DP:GL:GQ 0/1:124,53:103:-52.42,-31.04,-397.79:99
-chr1 2611005 rs28657620 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=175;Dels=0.00;HRun=0;HaplotypeScore=240.92;MQ=35.09;MQ0=11;OQ=589.04;QD=3.37;SB=-319.71 GT:AD:DP:GL:GQ 0/1:148,26:83:-87.21,-25.02,-177.35:99
-chr1 2611008 rs61765697 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=177;Dels=0.00;HRun=0;HaplotypeScore=268.58;MQ=34.75;MQ0=11;OQ=814.23;QD=4.60;SB=-203.16 GT:AD:DP:GL:GQ 0/1:94,75:81:-109.12,-24.42,-183.44:99
-chr1 2611037 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=3;HaplotypeScore=47.75;MQ=33.75;MQ0=25;OQ=310.37;QD=1.46;SB=128.35 GT:AD:DP:GL:GQ 0/1:180,32:105:-65.95,-31.63,-301.79:99
-chr1 2611075 . C A 675.15 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=198;Dels=0.00;HRun=0;HaplotypeScore=289.45;MQ=35.67;MQ0=15;QD=3.41;SB=-245.12 GT:AD:DP:GL:GQ 0/1:138,49:92:-105.75,-34.95,-225.78:99
-chr1 2611076 . C A 59.41 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=0;HaplotypeScore=288.77;MQ=35.79;MQ0=15;QD=0.30;SB=-43.36 GT:AD:DP:GL:GQ 0/1:179,20:91:-36.64,-27.42,-281.03:92.25
-chr1 2611077 . T C 1287 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=199;Dels=0.00;HRun=3;HaplotypeScore=272.49;MQ=35.97;MQ0=16;QD=6.47;SB=-518.91 GT:AD:DP:GL:GQ 0/1:56,142:93:-160.01,-28.02,-190.32:99
-chr1 2611149 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=128.93;MQ=29.89;MQ0=30;OQ=118.35;QD=0.49;SB=-20.53 GT:AD:DP:GL:GQ 0/1:190,53:92:-42.83,-27.72,-276.95:99
-chr1 2611155 rs61765698 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=245;Dels=0.00;HRun=0;HaplotypeScore=130.50;MQ=30.96;MQ0=25;OQ=203.44;QD=0.83;SB=-29.37 GT:AD:DP:GL:GQ 0/1:191,50:97:-52.56,-28.94,-359.64:99
-chr1 2611193 rs61029569 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=154;Dels=0.01;HRun=0;HaplotypeScore=78.67;MQ=38.69;MQ0=8;OQ=1417.86;QD=9.21;SB=-633.08 GT:AD:DP:GL:GQ 0/1:43,100:84:-170.37,-25.30,-121.64:99
-chr1 2611212 rs28774982 C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=125;Dels=0.00;HRun=0;HaplotypeScore=29.20;MQ=42.14;MQ0=3;OQ=3660.18;QD=29.28;SB=-1724.01 GT:AD:DP:GL:GQ 1/1:0,124:85:-365.02,-25.61,-0.03:99
-chr1 2611218 rs28581654 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=132;Dels=0.00;HRun=1;HaplotypeScore=33.13;MQ=42.84;MQ0=2;OQ=1779.64;QD=13.48;SB=-735.33 GT:AD:DP:GL:GQ 0/1:39,85:92:-211.73,-30.48,-139.53:99
-chr1 2611236 rs61765699 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=181;Dels=0.00;HRun=1;HaplotypeScore=137.95;MQ=39.80;MQ0=14;OQ=1598.49;QD=8.83;SB=-821.38 GT:AD:DP:GL:GQ 0/1:99,78:96:-192.06,-28.93,-137.58:99
-chr1 2611310 . G C 25 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=214;Dels=0.00;HRun=2;HaplotypeScore=68.15;MQ=29.71;MQ0=28;QD=0.12;SB=77.64 GT:AD:DP:GL:GQ 0/1:182,25:80:-33.47,-27.69,-302.15:57.82
-chr1 2611331 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=0;HaplotypeScore=171.01;MQ=28.57;MQ0=19;OQ=169.19;QD=1.00;SB=32.13 GT:AD:DP:GL:GQ 0/1:101,40:47:-34.37,-14.17,-141.57:99
-chr1 2611336 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=160;Dels=0.00;HRun=0;HaplotypeScore=142.89;MQ=27.04;MQ0=20;OQ=617.89;QD=3.86;SB=-201.64 GT:AD:DP:GL:GQ 0/1:32,126:45:-78.63,-13.56,-88.17:99
-chr1 2611359 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=160;Dels=0.00;HRun=2;HaplotypeScore=100.78;MQ=27.44;MQ0=19;OQ=605.72;QD=3.79;SB=-223.68 GT:AD:DP:GL:GQ 0/1:36,124:39:-75.62,-11.76,-86.35:99
-chr1 2611360 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=172;Dels=0.01;HRun=0;HaplotypeScore=100.05;MQ=27.08;MQ0=24;OQ=169.30;QD=0.98;SB=23.10 GT:AD:DP:GL:GQ 0/1:135,36:41:-32.56,-12.35,-112.95:99
-chr1 2611385 . A G 25.43 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=202;Dels=0.00;HRun=0;HaplotypeScore=141.90;MQ=28.13;MQ0=36;QD=0.13;SB=77.25 GT:AD:DP:GL:GQ 0/1:184,18:55:-22.41,-16.58,-186.56:58.25
-chr1 2611395 . C A 10.87 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=190;Dels=0.00;HRun=1;HaplotypeScore=214.46;MQ=28.47;MQ0=34;QD=0.06;SB=44.16 GT:AD:DP:GL:GQ 0/1:160,27:48:-18.79,-14.46,-145.75:43.33
-chr1 2611409 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=176;Dels=0.00;HRun=0;HaplotypeScore=170.63;MQ=30.96;MQ0=28;OQ=246.71;QD=1.40;SB=-63.23 GT:AD:DP:GL:GQ 0/1:66,90:51:-46.30,-18.34,-146.08:99
-chr1 2611417 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=201.92;MQ=31.46;MQ0=25;OQ=276.60;QD=1.55;SB=-61.04 GT:AD:DP:GL:GQ 0/1:50,88:59:-67.59,-36.64,-159.73:99
-chr1 2611440 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=180;Dels=0.00;HRun=0;HaplotypeScore=297.52;MQ=31.70;MQ0=24;OQ=229.57;QD=1.28;SB=65.18 GT:AD:DP:GL:GQ 0/1:152,22:68:-46.74,-20.49,-196.70:99
-chr1 2611441 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=175;Dels=0.00;HRun=4;HaplotypeScore=281.36;MQ=31.83;MQ0=24;OQ=677.61;QD=3.87;SB=-187.78 GT:AD:DP:GL:GQ 0/1:57,116:70:-92.13,-21.09,-155.28:99
-chr1 2611460 . G C 143.72 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=209;Dels=0.02;HRun=1;HaplotypeScore=206.53;MQ=28.72;MQ0=29;QD=0.69;SB=95.33 GT:AD:DP:GL:GQ 0/1:169,33:67:-37.89,-20.23,-223.47:99
-chr1 2611462 . G C 346.96 DPFilter;HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=0;HaplotypeScore=159.36;MQ=28.99;MQ0=26;QD=1.68;SB=95.35 GT:AD:DP:GL:GQ 0/1:176,30:73:-60.00,-22.02,-249.89:99
-chr1 2611473 . C A 226.87 DPFilter;HARD_TO_VALIDATE;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=0;HaplotypeScore=716.79;MQ=27.80;MQ0=23;QD=1.15;SB=98.33 GT:AD:DP:GL:GQ 0/1:167,28:68:-46.46,-20.49,-193.68:99
-chr1 2611481 . A C 47.15 DPFilter;HARD_TO_VALIDATE;Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=3;HaplotypeScore=376.14;MQ=26.76;MQ0=25;QD=0.22;SB=4.29 GT:AD:DP:GL:GQ 0/1:158,51:68:-32.16,-24.16,-211.95:79.99
-chr1 2611482 rs28657015 C T 493.48 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.03;HRun=0;HaplotypeScore=277.76;MQ=26.81;MQ0=24;QD=2.28;SB=-58.33 GT:AD:DP:GL:GQ 0/1:180,23:71:-73.42,-20.79,-178.37:99
-chr1 2611484 . G A 123.65 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=217;Dels=0.00;HRun=1;HaplotypeScore=257.24;MQ=26.43;MQ0=26;QD=0.57;SB=52.66 GT:AD:DP:GL:GQ 0/1:181,35:66:-35.53,-19.88,-208.25:99
-chr1 2611506 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=1;HaplotypeScore=227.39;MQ=23.92;MQ0=38;OQ=83.72;QD=0.34;SB=1.08 GT:AD:DP:GL:GQ 0/1:205,36:67:-31.84,-20.19,-209.30:99
-chr1 2611529 . G C 1369.67 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=198.19;MQ=24.21;MQ0=25;QD=7.40;SB=-595.38 GT:AD:DP:GL:GQ 0/1:36,136:57:-168.20,-27.95,-90.83:99
-chr1 2611531 . T A 49.73 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=1;HaplotypeScore=167.31;MQ=24.09;MQ0=26;QD=0.27;SB=30.12 GT:AD:DP:GL:GQ 0/1:175,9:48:-26.14,-17.88,-160.86:82.57
-chr1 2611537 . A C 10.75 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=1;HaplotypeScore=150.76;MQ=24.75;MQ0=25;QD=0.06;SB=49.53 GT:AD:DP:GL:GQ 0/1:160,17:47:-21.51,-17.19,-149.44:43.20
-chr1 2611551 . C A 34.16 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=166;Dels=0.02;HRun=1;HaplotypeScore=423.66;MQ=25.51;MQ0=20;QD=0.21;SB=47.16 GT:AD:DP:GL:GQ 0/1:139,17:37:-21.33,-14.63,-112.07:67
-chr1 2611559 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=150;Dels=0.01;HRun=3;HaplotypeScore=531.42;MQ=25.48;MQ0=17;OQ=388.67;QD=2.59;SB=-7.62 GT:AD:DP:GL:GQ 0/1:47,82:45:-90.78,-48.63,-105.70:99
-chr1 2611586 . G A 21.13 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=158;Dels=0.00;HRun=1;HaplotypeScore=127.50;MQ=28.93;MQ0=18;QD=0.13;SB=47.15 GT:AD:DP:GL:GQ 0/1:123,29:42:-18.05,-12.65,-132.34:53.94
-chr1 2611593 . C A 39.57 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=0;HaplotypeScore=189.22;MQ=30.35;MQ0=16;QD=0.29;SB=47.17 GT:AD:DP:GL:GQ 0/1:123,13:39:-18.99,-11.75,-120.10:72.41
-chr1 2611600 . T C 291.60 SnpCluster AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=2;HaplotypeScore=197.17;MQ=32.27;MQ0=10;QD=2.58;SB=-146.84 GT:AD:DP:GL:GQ 0/1:38,66:38:-47.43,-14.99,-100.79:99
-chr1 2611602 . C G 76.87 SnpCluster AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=173.17;MQ=32.76;MQ0=9;QD=0.68;SB=-63.17 GT:AD:DP:GL:GQ 0/1:81,31:39:-22.73,-11.76,-142.68:99
-chr1 2611613 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=122.16;MQ=34.85;MQ0=5;OQ=326.72;QD=4.08;SB=-171.57 GT:AD:DP:GL:GQ 0/1:20,59:33:-49.07,-13.11,-79.40:99
-chr1 2611623 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=114.07;MQ=31.99;MQ0=3;OQ=59.10;QD=0.57;SB=53.18 GT:AD:DP:GL:GQ 0/1:44,51:42:-30.56,-21.37,-135.55:91.94
-chr1 2611678 . C A 64.73 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=1;HaplotypeScore=80.70;MQ=27.19;MQ0=13;QD=0.45;SB=-53.00 GT:AD:DP:GL:GQ 0/1:121,21:50:-24.83,-15.07,-143.50:97.56
-chr1 2611679 . C T 18.94 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=0;HaplotypeScore=77.77;MQ=26.46;MQ0=13;QD=0.14;SB=-28.00 GT:AD:DP:GL:GQ 0/1:130,7:48:-19.64,-14.46,-152.87:51.72
-chr1 2611680 . C A 348.12 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=72.18;MQ=26.57;MQ0=13;QD=2.58;SB=-130.78 GT:AD:DP:GL:GQ 0/1:71,64:46:-51.95,-13.86,-109.26:99
-chr1 2611697 rs28420770 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.01;HRun=1;HaplotypeScore=63.25;MQ=30.55;MQ0=12;OQ=549.37;QD=5.97;SB=-271.47 GT:AD:DP:GL:GQ 0/1:70,21:28:-66.35,-8.13,-30.04:99
-chr1 2611699 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=39.05;MQ=32.12;MQ0=10;OQ=169.31;QD=2.23;SB=14.08 GT:AD:DP:GL:GQ 0/1:20,50:24:-27.45,-7.24,-73.47:99
-chr1 2611710 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=70.70;MQ=31.94;MQ0=10;OQ=120.36;QD=1.56;SB=14.06 GT:AD:DP:GL:GQ 0/1:29,48:25:-22.85,-7.53,-69.69:99
-chr1 2611716 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=60.36;MQ=32.04;MQ0=11;OQ=222.09;QD=2.71;SB=-31.85 GT:AD:DP:GL:GQ 0/1:24,55:26:-33.33,-7.83,-79.05:99
-chr1 2611761 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=2;HaplotypeScore=77.17;MQ=34.64;MQ0=9;OQ=73.97;QD=1.01;SB=-32.72 GT:AD:DP:GL:GQ 0/1:30,33:31:-23.41,-12.73,-88.75:99
-chr1 2611777 . A C 23.19 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=20.98;MQ=38.72;MQ0=5;QD=0.42;SB=23.10 GT:AD:DP:GL:GQ 0/1:24,30:28:-14.03,-8.43,-89.75:56.01
-chr1 2611805 . A G 44.82 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=14.04;MQ=39.70;MQ0=6;QD=0.79;SB=-36.77 GT:AD:DP:GL:GQ 0/1:29,28:32:-17.41,-9.64,-104.85:77.66
-chr1 2611822 . C T 55.46 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=121;Dels=0.00;HRun=0;HaplotypeScore=122.77;MQ=30.12;MQ0=10;QD=0.46;SB=-42.84 GT:AD:DP:GL:GQ 0/1:92,29:48:-23.31,-14.48,-136.72:88.30
-chr1 2611823 . G A 42.96 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=122.08;MQ=30.26;MQ0=10;QD=0.35;SB=5.54 GT:AD:DP:GL:GQ 0/1:91,15:51:-29.64,-22.06,-149.48:75.79
-chr1 2611827 . C G 117.16 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=127;Dels=0.00;HRun=1;HaplotypeScore=109.01;MQ=29.94;MQ0=10;QD=0.92;SB=-46.17 GT:AD:DP:GL:GQ 0/1:97,15:52:-50.99,-35.99,-189.94:99
-chr1 2611857 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=244;Dels=0.00;HRun=1;HaplotypeScore=130.70;MQ=25.34;MQ0=25;OQ=261.41;QD=1.07;SB=-55.24 GT:AD:DP:GL:GQ 0/1:221,22:85:-55.03,-25.61,-242.15:99
-chr1 2611880 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=242.50;MQ=25.49;MQ0=23;OQ=371.36;QD=1.47;SB=-110.03 GT:AD:DP:GL:GQ 0/1:223,22:91:-74.78,-34.36,-326.09:99
-chr1 2611909 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=0;HaplotypeScore=117.77;MQ=27.67;MQ0=16;OQ=1593.34;QD=8.80;SB=-695.72 GT:AD:DP:GL:GQ 0/1:25,155:74:-184.91,-22.29,-95.32:99
-chr1 2611913 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=162;Dels=0.01;HRun=0;HaplotypeScore=121.10;MQ=28.43;MQ0=16;OQ=688.73;QD=4.25;SB=-310.55 GT:AD:DP:GL:GQ 0/1:24,47:69:-160.80,-88.65,-165.59:99
-chr1 2611940 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=1;HaplotypeScore=46.12;MQ=30.62;MQ0=15;OQ=640.18;QD=4.61;SB=-181.43 GT:AD:DP:GL:GQ 0/1:50,89:56:-84.19,-16.88,-155.00:99
-chr1 2611948 . A C 23.15 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=138;Dels=0.00;HRun=1;HaplotypeScore=36.39;MQ=28.65;MQ0=12;QD=0.17;SB=47.17 GT:AD:DP:GL:GQ 0/1:116,20:55:-22.17,-16.57,-171.47:55.97
-chr1 2612014 rs28499205 G C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=56.64;MQ=32.76;MQ0=15;OQ=1145.21;QD=14.50;SB=-563.07 GT:AD:DP:GL:GQ 1/1:1,78:27:-118.11,-8.13,-0.01:81.27
-chr1 2612058 rs61765702 C T 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=180;Dels=0.00;HRun=0;HaplotypeScore=18.96;MQ=27.13;MQ0=31;OQ=323.91;QD=1.80;SB=-155.18 GT:AD:DP:GL:GQ 0/1:143,37:66:-55.56,-19.88,-179.35:99
-chr1 2612062 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=184;Dels=0.00;HRun=0;HaplotypeScore=39.83;MQ=27.44;MQ0=33;OQ=304.96;QD=1.66;SB=-159.14 GT:AD:DP:GL:GQ 0/1:147,37:67:-53.98,-20.20,-229.14:99
-chr1 2612081 rs61765703 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=136;Dels=0.01;HRun=2;HaplotypeScore=85.10;MQ=27.93;MQ0=25;OQ=1205.35;QD=8.86;SB=-216.92 GT:AD:DP:GL:GQ 0/1:19,114:53:-139.78,-15.97,-53.09:99
-chr1 2612085 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=1;HaplotypeScore=63.07;MQ=28.64;MQ0=22;OQ=1108.83;QD=8.66;SB=-225.89 GT:AD:DP:GL:GQ 0/1:16,110:51:-129.53,-15.36,-50.00:99
-chr1 2612107 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=161;Dels=0.00;HRun=1;HaplotypeScore=61.85;MQ=27.81;MQ0=21;OQ=276.90;QD=1.72;SB=-68.50 GT:AD:DP:GL:GQ 0/1:116,39:58:-48.45,-17.48,-165.18:99
-chr1 2612151 rs61765704 A C 24.50 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=129;Dels=0.02;HRun=0;HaplotypeScore=220.24;MQ=28.08;MQ0=15;QD=0.19;SB=6.59 GT:AD:DP:GL:GQ 0/1:44,80:28:-14.16,-8.43,-88.22:57.33
-chr1 2612161 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=149;Dels=0.05;HRun=2;HaplotypeScore=289.32;MQ=26.74;MQ0=14;OQ=154.71;QD=1.04;SB=-60.88 GT:AD:DP:GL:GQ 0/1:35,100:29:-27.20,-8.44,-77.78:99
-chr1 2612175 rs61765705 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=189;Dels=0.00;HRun=1;HaplotypeScore=208.27;MQ=26.09;MQ0=18;OQ=54.71;QD=0.29;SB=-8.07 GT:AD:DP:GL:GQ 0/1:131,51:39:-26.91,-18.15,-132.87:87.54
-chr1 2612187 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=211.77;MQ=24.98;MQ0=26;OQ=72.89;QD=0.35;SB=45.47 GT:AD:DP:GL:GQ 0/1:143,55:44:-28.75,-18.18,-125.97:99
-chr1 2612211 . C A 45.89 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=1;HaplotypeScore=262.96;MQ=25.29;MQ0=30;QD=0.22;SB=-5.55 GT:AD:DP:GL:GQ 0/1:190,13:50:-25.52,-17.65,-153.60:78.73
-chr1 2612261 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=1;HaplotypeScore=73.22;MQ=36.24;MQ0=2;OQ=156.42;QD=1.55;SB=-48.52 GT:AD:DP:GL:GQ 0/1:66,32:53:-34.90,-15.97,-147.29:99
-chr1 2612283 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=4;HaplotypeScore=43.06;MQ=38.47;MQ0=2;OQ=327.02;QD=4.74;SB=-23.62 GT:AD:DP:GL:GQ 0/1:32,34:36:-46.54,-10.55,-82.71:99
-chr1 2612309 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=19.73;MQ=36.93;MQ0=0;OQ=479.11;QD=9.39;SB=-112.96 GT:AD:DP:GL:GQ 0/1:16,33:31:-63.92,-12.72,-54.61:99
-chr1 2612321 rs58055515 A C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.06;HRun=2;HaplotypeScore=36.08;MQ=38.02;MQ0=0;OQ=654.82;QD=13.64;SB=-115.75 GT:AD:DP:GL:GQ 1/1:1,35:27:-89.55,-24.40,-20.49:39.17
-chr1 2612344 . C G 24.81 LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=2;HaplotypeScore=34.46;MQ=40.80;MQ0=2;QD=0.48;SB=-19.81 GT:AD:DP:GL:GQ 0/1:23,28:23:-12.71,-6.94,-79.49:57.63
-chr1 2612349 rs56814247 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=26.66;MQ=40.32;MQ0=2;OQ=741.43;QD=14.54;SB=-345.45 GT:AD:DP:GL:GQ 1/1:6,45:24:-77.75,-7.24,-0.02:72.17
-chr1 2612359 . A C 18.09 LowQual AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=26.16;MQ=43.64;MQ0=3;QD=0.33;SB=-28.97 GT:AD:DP:GL:GQ 0/1:34,20:31:-14.42,-9.34,-99.97:50.86
-chr1 2612360 . A C 30.50 LowQual AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=3;HaplotypeScore=20.17;MQ=44.05;MQ0=2;QD=0.58;SB=-0.42 GT:AD:DP:GL:GQ 0/1:26,25:28:-14.77,-8.43,-87.24:63.33
-chr1 2612401 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=42.26;MQ=44.22;MQ0=1;OQ=144.16;QD=2.72;SB=-18.17 GT:AD:DP:GL:GQ 0/1:29,20:34:-31.58,-13.88,-103.42:99
-chr1 2612402 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=41.27;MQ=43.87;MQ0=1;OQ=96.43;QD=1.85;SB=-29.80 GT:AD:DP:GL:GQ 0/1:26,21:30:-21.97,-9.04,-85.20:99
-chr1 2612447 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=39.94;MQ=46.94;MQ0=0;OQ=81.12;QD=1.66;SB=23.03 GT:AD:DP:GL:GQ 0/1:31,17:32:-23.40,-12.01,-88.55:99
-chr1 2612451 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=20.86;MQ=47.66;MQ0=0;OQ=53.68;QD=1.14;SB=26.08 GT:AD:DP:GL:GQ 0/1:30,14:32:-18.30,-9.65,-100.77:86.52
-chr1 2612461 . A C 44.60 LowQual AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=34.01;MQ=47.11;MQ0=0;QD=0.86;SB=-23.85 GT:AD:DP:GL:GQ 0/1:42,10:33:-17.68,-9.94,-101.23:77.43
-chr1 2612468 . C G 44.05 LowQual AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=46.41;MQ=45.54;MQ0=0;QD=0.76;SB=-1.30 GT:AD:DP:GL:GQ 0/1:51,7:35:-18.24,-10.55,-129.78:76.89
-chr1 2612500 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=0;HaplotypeScore=111.55;MQ=36.58;MQ0=2;OQ=75.18;QD=0.91;SB=-6.47 GT:AD:DP:GL:GQ 0/1:42,40:29:-19.55,-8.75,-75.63:99
-chr1 2612520 . C T 19.28 LowQual AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=133.17;MQ=33.82;MQ0=3;QD=0.19;SB=-16.60 GT:AD:DP:GL:GQ 0/1:87,13:36:-16.06,-10.85,-103.87:52.07
-chr1 2612521 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=3;HaplotypeScore=133.17;MQ=33.95;MQ0=3;OQ=122.65;QD=1.20;SB=-13.90 GT:AD:DP:GL:GQ 0/1:59,34:32:-39.02,-23.47,-101.66:99
-chr1 2612546 rs56822453 C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=1;HaplotypeScore=145.71;MQ=34.54;MQ0=2;OQ=1448.77;QD=15.58;SB=-452.10 GT:AD:DP:GL:GQ 1/1:7,78:40:-172.07,-31.81,-23.61:81.95
-chr1 2612548 . A G 23.46 LowQual AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=0;HaplotypeScore=130.25;MQ=34.63;MQ0=2;QD=0.24;SB=-12.60 GT:AD:DP:GL:GQ 0/1:76,19:32:-15.27,-9.65,-107.66:56.27
-chr1 2612572 rs61765712 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=119.88;MQ=29.64;MQ0=12;OQ=136.28;QD=1.57;SB=-70.93 GT:AD:DP:GL:GQ 0/1:30,56:22:-23.54,-6.63,-51.28:99
-chr1 2612576 . C G 19.60 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=1;HaplotypeScore=117.65;MQ=28.19;MQ0=14;QD=0.19;SB=-14.55 GT:AD:DP:GL:GQ 0/1:68,14:25:-20.23,-14.99,-84.25:52.39
-chr1 2612600 . A C 31.76 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=4;HaplotypeScore=156.76;MQ=23.41;MQ0=28;QD=0.14;SB=30.15 GT:AD:DP:GL:GQ 0/1:163,45:61:-27.98,-21.52,-181.64:64.60
-chr1 2612627 . A C 39.29 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=243;Dels=0.00;HRun=0;HaplotypeScore=198.32;MQ=23.30;MQ0=41;QD=0.16;SB=-11.41 GT:AD:DP:GL:GQ 0/1:198,41:66:-27.09,-19.88,-204.81:72.12
-chr1 2612682 . A C 10.13 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=52.92;MQ=47.05;MQ0=0;QD=0.24;SB=14.06 GT:AD:DP:GL:GQ 0/1:27,14:23:-11.18,-6.93,-67.83:42.53
-chr1 2612696 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=17.87;MQ=44.37;MQ0=2;OQ=127.11;QD=2.08;SB=-25.83 GT:AD:DP:GL:GQ 0/1:32,29:31:-25.34,-9.35,-104.60:99
-chr1 2612737 rs61765713 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=31.73;MQ=37.37;MQ0=1;OQ=431.17;QD=5.01;SB=-153.88 GT:AD:DP:GL:GQ 0/1:41,45:46:-60.27,-13.87,-108.65:99
-chr1 2612767 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=55.42;MQ=39.20;MQ0=1;OQ=525.18;QD=6.48;SB=-145.82 GT:AD:DP:GL:GQ 0/1:30,49:46:-69.66,-13.86,-97.51:99
-chr1 2612773 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=50.07;MQ=38.87;MQ0=1;OQ=424.50;QD=5.31;SB=-154.37 GT:AD:DP:GL:GQ 0/1:53,27:45:-59.30,-13.57,-131.50:99
-chr1 2612799 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=27.45;MQ=41.43;MQ0=1;OQ=164.57;QD=2.70;SB=-62.57 GT:AD:DP:GL:GQ 0/1:27,34:35:-30.28,-10.54,-94.10:99
-chr1 2612844 rs55724072 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=94.30;MQ=38.07;MQ0=8;OQ=665.81;QD=9.12;SB=-251.98 GT:AD:DP:GL:GQ 0/1:45,26:28:-81.79,-11.92,-21.81:98.87
-chr1 2612950 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=215;Dels=0.00;HRun=0;HaplotypeScore=255.70;MQ=27.55;MQ0=15;OQ=78.72;QD=0.37;SB=19.51 GT:AD:DP:GL:GQ 0/1:145,61:50:-33.24,-22.08,-169.61:99
-chr1 2612958 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=205;Dels=0.05;HRun=2;HaplotypeScore=345.72;MQ=28.14;MQ0=11;OQ=268.77;QD=1.31;SB=-87.58 GT:AD:DP:GL:GQ 0/1:82,113:44:-43.44,-13.28,-132.37:99
-chr1 2612962 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=206;Dels=0.01;HRun=1;HaplotypeScore=293.73;MQ=28.22;MQ0=11;OQ=53.07;QD=0.26;SB=-7.29 GT:AD:DP:GL:GQ 0/1:160,36:46:-29.48,-20.89,-140.25:85.91
-chr1 2612982 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=165;Dels=0.00;HRun=0;HaplotypeScore=272.98;MQ=28.95;MQ0=11;OQ=81.29;QD=0.49;SB=23.09 GT:AD:DP:GL:GQ 0/1:43,117:27:-19.56,-8.14,-70.61:99
-chr1 2612988 rs28729890 C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=157;Dels=0.00;HRun=1;HaplotypeScore=282.08;MQ=29.13;MQ0=10;OQ=1088.24;QD=6.93;SB=-426.67 GT:AD:DP:GL:GQ 1/1:3,146:27:-116.69,-11.76,-4.28:74.86
-chr1 2613013 . G A 31.52 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=131;Dels=0.00;HRun=1;HaplotypeScore=164.33;MQ=32.03;MQ0=7;QD=0.24;SB=26.10 GT:AD:DP:GL:GQ 0/1:117,14:35:-16.98,-10.54,-112.15:64.35
-chr1 2613017 . T C 180.98 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=137.52;MQ=33.34;MQ0=7;QD=1.65;SB=26.11 GT:AD:DP:GL:GQ 0/1:27,81:34:-31.63,-10.24,-97.73:99
-chr1 2613018 rs28484972 G C 140.73 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=110;Dels=0.00;HRun=0;HaplotypeScore=137.35;MQ=33.34;MQ0=7;QD=1.28;SB=31.01 GT:AD:DP:GL:GQ 0/1:28,44:35:-37.27,-19.91,-118.50:99
-chr1 2613040 rs55713073 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=61.60;MQ=39.34;MQ0=3;OQ=876.14;QD=14.13;SB=-413.05 GT:AD:DP:GL:GQ 0/1:33,24:31:-100.24,-9.35,-30.73:99
-chr1 2613043 . T C 38.29 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=3;HaplotypeScore=55.65;MQ=43.83;MQ0=2;QD=0.78;SB=29.13 GT:AD:DP:GL:GQ 0/1:25,20:28:-15.55,-8.44,-93.33:71.12
-chr1 2613090 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=62.85;MQ=32.34;MQ0=20;OQ=113.77;QD=0.92;SB=20.02 GT:AD:DP:GL:GQ 0/1:89,34:35:-25.22,-10.56,-90.70:99
-chr1 2613132 . T C 17.83 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=135.62;MQ=34.15;MQ0=7;QD=0.19;SB=20.93 GT:AD:DP:GL:GQ 0/1:49,17:34:-18.39,-13.34,-109.40:50.59
-chr1 2613155 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=54.50;MQ=36.94;MQ0=5;OQ=56.13;QD=0.85;SB=-8.31 GT:AD:DP:GL:GQ 0/1:26,40:25:-16.44,-7.54,-66.14:88.97
-chr1 2613166 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=54;Dels=0.04;HRun=0;HaplotypeScore=39.25;MQ=40.07;MQ0=1;OQ=108.06;QD=2.00;SB=-13.35 GT:AD:DP:GL:GQ 0/1:25,27:25:-21.62,-7.53,-86.20:99
-chr1 2613178 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=39.82;MQ=40.42;MQ0=1;OQ=87.18;QD=1.53;SB=-9.45 GT:AD:DP:GL:GQ 0/1:38,18:28:-20.44,-8.44,-74.35:99
-chr1 2613186 rs28398452 A T 0.15 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=19.52;MQ=46.06;MQ0=0;OQ=818.22;QD=19.96;SB=-414.28 GT:AD:DP:GL:GQ 1/1:0,40:23:-85.41,-6.93,-0.01:69.21
-chr1 2613234 . C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=40.12;MQ=46.29;MQ0=1;OQ=1357.25;QD=31.56;SB=-584.52 GT:AD:DP:GL:GQ 1/1:1,41:32:-139.32,-9.64,-0.01:96.32
-chr1 2613318 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=61.23;MQ=29.57;MQ0=14;OQ=124.73;QD=1.48;SB=-14.36 GT:AD:DP:GL:GQ 0/1:67,16:36:-26.61,-10.86,-123.23:99
-chr1 2613323 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=0;HaplotypeScore=72.34;MQ=25.61;MQ0=20;OQ=95.66;QD=0.62;SB=33.80 GT:AD:DP:GL:GQ 0/1:133,12:61:-34.86,-22.01,-226.45:99
-chr1 2613370 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=400;Dels=0.00;HRun=0;HaplotypeScore=293.23;MQ=21.10;MQ0=61;OQ=714.05;QD=1.79;SB=-288.95 GT:AD:DP:GL:GQ 0/1:327,73:124:-112.05,-37.36,-344.59:99
-chr1 2613374 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=416;Dels=0.00;HRun=0;HaplotypeScore=328.46;MQ=20.95;MQ0=62;OQ=571.93;QD=1.37;SB=-114.36 GT:AD:DP:GL:GQ 0/1:288,118:123:-97.54,-37.07,-375.44:99
-chr1 2613385 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=437;Dels=0.00;HRun=0;HaplotypeScore=225.97;MQ=20.17;MQ0=68;OQ=628.49;QD=1.44;SB=-284.83 GT:AD:DP:GL:GQ 0/1:363,65:125:-113.05,-46.91,-348.87:99
-chr1 2613405 rs61765715 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=430;Dels=0.00;HRun=0;HaplotypeScore=214.90;MQ=20.78;MQ0=65;OQ=1559.54;QD=3.63;SB=-415.95 GT:AD:DP:GL:GQ 0/1:296,132:120:-195.39,-36.15,-225.88:99
-chr1 2613406 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=428;Dels=0.00;HRun=0;HaplotypeScore=190.35;MQ=20.81;MQ0=64;OQ=96.31;QD=0.23;SB=35.50 GT:AD:DP:GL:GQ 0/1:369,32:113:-77.37,-64.46,-359.74:99
-chr1 2613418 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=358;Dels=0.00;HRun=0;HaplotypeScore=49.55;MQ=21.34;MQ0=50;OQ=281.60;QD=0.79;SB=32.81 GT:AD:DP:GL:GQ 0/1:313,45:98:-60.98,-29.53,-359.08:99
-chr1 2613432 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=200;Dels=0.00;HRun=2;HaplotypeScore=59.86;MQ=23.20;MQ0=28;OQ=127.98;QD=0.64;SB=-77.60 GT:AD:DP:GL:GQ 0/1:175,24:60:-37.72,-21.64,-201.76:99
-chr1 2613443 rs61765716 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=4;HaplotypeScore=21.82;MQ=28.33;MQ0=15;OQ=129.32;QD=1.54;SB=2.14 GT:AD:DP:GL:GQ 0/1:37,47:28:-24.65,-8.44,-74.06:99
-chr1 2613523 rs61765738 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=4;HaplotypeScore=30.76;MQ=30.14;MQ0=9;OQ=85.37;QD=1.61;SB=5.05 GT:AD:DP:GL:GQ 0/1:23,13:17:-22.76,-10.94,-45.61:99
-chr1 2613566 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=71;Dels=0.04;HRun=3;HaplotypeScore=57.78;MQ=26.34;MQ0=13;OQ=54.80;QD=0.77;SB=8.05 GT:AD:DP:GL:GQ 0/1:32,29:23:-15.40,-6.63,-70.44:87.64
-chr1 2613630 . G A 0.07 PASS AC=2;AF=1.00;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=13.24;MQ=22.14;MQ0=5;OQ=193.82;QD=10.20;SB=-82.32 GT:AD:DP:GL:GQ 1/1:2,17:6:-22.96,-1.81,-0.00:18.06
-chr1 2613635 . G A 0.05 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=13.88;MQ=20.75;MQ0=5;OQ=116.09;QD=7.26;SB=-82.32 GT:AD:DP:GL:GQ 1/1:1,15:4:-15.15,-1.21,-0.00:12.04
-chr1 2613646 . G C 10.99 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.07;HRun=2;HaplotypeScore=14.02;MQ=19.81;MQ0=4;QD=0.79;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,8:1:-4.35,-0.30,-0.00:1.76
-chr1 2613690 . T C 13.23 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=116.33;MQ=18.38;MQ0=8;QD=0.19;SB=-10.00 GT:AD:DP:GL:GQ 0/1:49,18:4:-5.79,-1.21,-8.34:45.86
-chr1 2613693 . G C 35.94 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=149.70;MQ=18.45;MQ0=8;QD=0.45;SB=-10.00 GT:AD:DP:GL:GQ 0/1:76,3:6:-8.69,-1.81,-15.69:68.78
-chr1 2613698 . T G 15.64 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=2;HaplotypeScore=190.59;MQ=18.98;MQ0=9;QD=0.16;SB=-10.00 GT:AD:DP:GL:GQ 0/1:64,7:8:-12.71,-7.87,-20.94:48.35
-chr1 2613700 . G A 196.12 SnpCluster AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=236.20;MQ=18.98;MQ0=9;QD=2.06;SB=-10.00 GT:AD:DP:GL:GQ 0/1:6,83:8:-25.29,-2.41,-3.47:10.61
-chr1 2613710 . G A 290.78 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=258.37;MQ=18.71;MQ0=19;QD=1.88;SB=-45.65 GT:AD:DP:GL:GQ 0/1:71,77:15:-43.35,-10.99,-17.24:62.53
-chr1 2613712 . A G 19.12 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=162;Dels=0.00;HRun=1;HaplotypeScore=303.47;MQ=18.88;MQ0=19;QD=0.12;SB=-3.98 GT:AD:DP:GL:GQ 0/1:153,6:17:-10.32,-5.13,-49.10:51.90
-chr1 2613717 . C G 26.91 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=408.47;MQ=18.72;MQ0=23;QD=0.14;SB=-6.99 GT:AD:DP:GL:GQ 0/1:167,10:18:-16.44,-10.47,-59.87:59.74
-chr1 2613725 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=210;Dels=0.00;HRun=0;HaplotypeScore=344.41;MQ=18.80;MQ0=26;OQ=51.69;QD=0.25;SB=-6.99 GT:AD:DP:GL:GQ 0/1:188,19:21:-17.15,-8.70,-57.87:84.53
-chr1 2613732 . A C 62.04 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=212;Dels=0.00;HRun=0;HaplotypeScore=339.87;MQ=19.08;MQ0=26;QD=0.29;SB=-6.99 GT:AD:DP:GL:GQ 0/1:184,21:14:-13.71,-4.22,-32.30:94.88
-chr1 2613741 . C T 167.14 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=432.19;MQ=19.10;MQ0=22;QD=0.81;SB=-10.00 GT:AD:DP:GL:GQ 0/1:175,24:13:-27.15,-7.15,-25.74:99
-chr1 2613742 . T A 554.18 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=437.29;MQ=19.15;MQ0=21;QD=2.73;SB=-10.00 GT:AD:DP:GL:GQ 1/1:10,159:27:-96.09,-42.87,-37.09:57.79
-chr1 2613744 . C T 234.43 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=208;Dels=0.00;HRun=0;HaplotypeScore=584.09;MQ=19.37;MQ0=21;QD=1.13;SB=-10.00 GT:AD:DP:GL:GQ 0/1:171,26:22:-36.59,-9.87,-49.51:99
-chr1 2613745 . C G 76.87 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=0;HaplotypeScore=579.63;MQ=19.38;MQ0=20;QD=0.37;SB=-10.00 GT:AD:DP:GL:GQ 0/1:148,19:15:-15.49,-4.52,-49.92:99
-chr1 2613750 . G A 306.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=658.57;MQ=19.32;MQ0=20;QD=1.48;SB=-7.01 GT:AD:DP:GL:GQ 0/1:99,104:19:-39.62,-5.73,-26.69:99
-chr1 2613754 . C A 11.17 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=223;Dels=0.00;HRun=1;HaplotypeScore=578.78;MQ=19.04;MQ0=24;QD=0.05;SB=-7.00 GT:AD:DP:GL:GQ 0/1:199,19:23:-11.29,-6.93,-65.57:43.66
-chr1 2613765 . C A 112.66 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=0;HaplotypeScore=358.32;MQ=18.80;MQ0=30;QD=0.49;SB=-6.99 GT:AD:DP:GL:GQ 0/1:192,30:26:-22.38,-7.83,-66.37:99
-chr1 2613766 . C G 145.08 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=229;Dels=0.00;HRun=0;HaplotypeScore=340.83;MQ=18.60;MQ0=30;QD=0.63;SB=-3.99 GT:AD:DP:GL:GQ 0/1:197,20:34:-28.04,-10.25,-119.31:99
-chr1 2613770 . T C 33.51 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=219;Dels=0.00;HRun=0;HaplotypeScore=286.65;MQ=18.56;MQ0=29;QD=0.15;SB=-3.99 GT:AD:DP:GL:GQ 0/1:176,33:38:-18.09,-11.45,-126.83:66.35
-chr1 2613772 . A G 57.20 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=1;HaplotypeScore=261.18;MQ=18.59;MQ0=29;QD=0.26;SB=-0.97 GT:AD:DP:GL:GQ 0/1:199,13:41:-24.12,-15.12,-140.12:90.03
-chr1 2613796 . G C 177.04 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=135;Dels=0.04;HRun=2;HaplotypeScore=330.87;MQ=18.33;MQ0=22;QD=1.31;SB=-45.45 GT:AD:DP:GL:GQ 0/1:71,48:21:-34.21,-13.22,-61.82:99
-chr1 2613800 . G A 69.22 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=111;Dels=0.04;HRun=0;HaplotypeScore=218.43;MQ=17.88;MQ0=19;QD=0.62;SB=-7.00 GT:AD:DP:GL:GQ 0/1:92,15:13:-14.13,-3.92,-31.45:99
-chr1 2613801 . C G 13.55 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=246.51;MQ=18.17;MQ0=17;QD=0.12;SB=-7.00 GT:AD:DP:GL:GQ 0/1:104,4:15:-12.67,-8.05,-55.30:46.19
-chr1 2613803 . C A 151.29 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=1;HaplotypeScore=241.51;MQ=18.66;MQ0=17;QD=1.36;SB=-3.98 GT:AD:DP:GL:GQ 0/1:89,19:17:-27.02,-8.61,-39.19:99
-chr1 2613805 . C T 87.71 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=0;HaplotypeScore=208.83;MQ=18.81;MQ0=15;QD=0.80;SB=-0.98 GT:AD:DP:GL:GQ 0/1:93,15:13:-15.97,-3.92,-32.68:99
-chr1 2613807 . C T 57.07 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=165.36;MQ=18.87;MQ0=15;QD=0.53;SB=-3.99 GT:AD:DP:GL:GQ 0/1:93,9:11:-12.30,-3.31,-28.01:89.90
-chr1 2613812 . G A 29.24 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=106.13;MQ=18.30;MQ0=14;QD=0.32;SB=-3.99 GT:AD:DP:GL:GQ 0/1:75,16:5:-7.71,-1.51,-10.06:62.07
-chr1 2613813 . T C 74.94 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=91.21;MQ=18.35;MQ0=14;QD=0.88;SB=-6.99 GT:AD:DP:GL:GQ 0/1:16,66:5:-12.29,-1.51,-3.76:22.52
-chr1 2613826 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=36.04;MQ=20.56;MQ0=13;OQ=192.78;QD=2.30;SB=-28.63 GT:AD:DP:GL:GQ 0/1:21,57:13:-29.99,-7.43,-22.77:99
-chr1 2613831 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=1;HaplotypeScore=23.92;MQ=20.73;MQ0=14;OQ=180.38;QD=2.20;SB=-29.94 GT:AD:DP:GL:GQ 0/1:21,61:13:-25.24,-3.92,-19.14:99
-chr1 2613859 . G T 41.43 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=24.92;MQ=20.48;MQ0=13;QD=0.62;SB=-43.38 GT:AD:DP:GL:GQ 0/1:19,47:11:-10.74,-3.32,-20.71:74.26
-chr1 2613869 rs28391329 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=60.53;MQ=21.20;MQ0=15;OQ=293.59;QD=2.94;SB=-0.98 GT:AD:DP:GL:GQ 0/1:82,18:19:-38.38,-5.73,-37.90:99
-chr1 2613889 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=72.75;MQ=25.64;MQ0=15;OQ=180.19;QD=1.96;SB=-114.68 GT:AD:DP:GL:GQ 0/1:18,61:28:-47.05,-25.75,-76.38:99
-chr1 2613903 rs11486068 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=48.68;MQ=24.40;MQ0=19;OQ=50.76;QD=0.51;SB=-13.14 GT:AD:DP:GL:GQ 0/1:40,15:30:-30.07,-21.71,-94.96:83.60
-chr1 2613959 rs61765741 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=0;HaplotypeScore=30.66;MQ=19.75;MQ0=50;OQ=129.32;QD=0.85;SB=-3.99 GT:AD:DP:GL:GQ 0/1:135,11:45:-36.43,-20.22,-129.55:99
-chr1 2613977 rs61765742 T A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=20.51;MQ=18.10;MQ0=36;OQ=631.54;QD=6.19;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,87:32:-76.08,-9.64,-40.58:99
-chr1 2614061 . C G 47.32 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=9.70;MQ=18.60;MQ0=18;QD=1.05;SB=-42.45 GT:AD:DP:GL:GQ 0/1:29,16:12:-11.64,-3.62,-36.27:80.16
-chr1 2614087 rs61765744 A C 20.16 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=3;HaplotypeScore=20.71;MQ=12.14;MQ0=19;QD=0.63;SB=-6.99 GT:AD:DP:GL:GQ 0/1:25,7:6:-7.10,-1.81,-13.92:52.96
-chr1 2614090 . A G 19.51 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=1;HaplotypeScore=20.91;MQ=12.88;MQ0=18;QD=0.59;SB=-6.99 GT:AD:DP:GL:GQ 0/1:21,12:7:-7.34,-2.11,-20.39:52.30
-chr1 2614091 . G C 37.94 HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=21.91;MQ=12.37;MQ0=20;QD=1.05;SB=-6.99 GT:AD:DP:GL:GQ 0/1:28,8:7:-9.19,-2.11,-21.58:70.77
-chr1 2614114 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=32.88;MQ=18.47;MQ0=36;OQ=121.42;QD=1.52;SB=-36.64 GT:AD:DP:GL:GQ 0/1:36,44:20:-21.46,-6.03,-44.98:99
-chr1 2614128 . T C 13.34 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=4;HaplotypeScore=47.41;MQ=18.72;MQ0=40;QD=0.11;SB=-2.29 GT:AD:DP:GL:GQ 0/1:78,34:26:-19.39,-14.79,-91.44:45.97
-chr1 2614209 . G A 41.24 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=1;HaplotypeScore=24.29;MQ=22.02;MQ0=31;QD=0.45;SB=-24.59 GT:AD:DP:GL:GQ 0/1:55,36:29:-16.14,-8.74,-87.91:74.08
-chr1 2614364 rs28730517 A C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=28.46;MQ=18.26;MQ0=16;OQ=311.67;QD=6.23;SB=-151.28 GT:AD:DP:GL:GQ 1/1:14,32:12:-37.44,-3.62,-2.80:8.16
-chr1 2614590 rs28497985 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=34.12;MQ=28.69;MQ0=18;OQ=755.20;QD=6.74;SB=-383.20 GT:AD:DP:GL:GQ 0/1:87,25:65:-98.40,-19.59,-181.93:99
-chr1 2614771 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=1;HaplotypeScore=33.03;MQ=8.84;MQ0=54;OQ=63.99;QD=0.94;SB=-10.00 GT:AD:DP:GL:GQ 0/1:54,14:6:-11.49,-1.81,-12.10:96.82
-chr1 2614794 . A C 36.23 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=12.63;MQ=15.22;MQ0=54;QD=0.39;SB=8.03 GT:AD:DP:GL:GQ 0/1:56,38:25:-14.44,-7.53,-71.85:69.07
-chr1 2614835 rs61765748 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=146;Dels=0.00;HRun=0;HaplotypeScore=67.43;MQ=23.43;MQ0=43;OQ=134.71;QD=0.92;SB=83.23 GT:AD:DP:GL:GQ 0/1:105,39:61:-35.15,-18.40,-166.15:99
-chr1 2615014 . A G 45.47 PASS AC=2;AF=1.00;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=21.27;MQ0=3;OQ=106.85;QD=8.90;SB=-34.66 GT:AD:DP:GL:GQ 1/1:0,12:5:-14.25,-1.51,-0.01:15.01
-chr1 2615159 . C A 49.14 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=220;Dels=0.00;HRun=2;HaplotypeScore=142.59;MQ=8.79;MQ0=169;QD=0.22;SB=-7.86 GT:AD:DP:GL:GQ 0/1:185,31:17:-13.32,-5.12,-43.12:81.98
-chr1 2615230 . C G 11.72 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=6.15;MQ=11.52;MQ0=52;QD=0.14;SB=-26.39 GT:AD:DP:GL:GQ 0/1:72,12:14:-8.65,-4.23,-47.78:44.25
-chr1 2615372 . G A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=29.65;MQ=17.03;MQ0=60;OQ=691.36;QD=8.13;SB=-292.88 GT:AD:DP:GL:GQ 1/1:59,24:18:-72.73,-5.42,-0.01:54.18
-chr1 2615442 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=52.99;MQ=12.22;MQ0=96;OQ=368.66;QD=2.38;SB=-99.96 GT:AD:DP:GL:GQ 0/1:30,125:25:-47.68,-7.53,-41.84:99
-chr1 2615466 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=61.50;MQ=14.17;MQ0=69;OQ=112.35;QD=0.77;SB=-18.60 GT:AD:DP:GL:GQ 0/1:116,29:31:-23.86,-9.34,-81.69:99
-chr1 2615470 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=0;HaplotypeScore=63.31;MQ=14.07;MQ0=68;OQ=351.94;QD=2.53;SB=-90.74 GT:AD:DP:GL:GQ 0/1:65,72:34:-48.72,-10.24,-70.14:99
-chr1 2615502 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=32.33;MQ=16.10;MQ0=38;OQ=288.56;QD=3.65;SB=2.03 GT:AD:DP:GL:GQ 0/1:49,30:24:-39.38,-7.24,-59.32:99
-chr1 2615515 . T G 27.54 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=32.70;MQ=13.65;MQ0=43;QD=0.37;SB=-0.98 GT:AD:DP:GL:GQ 0/1:31,13:15:-18.30,-12.26,-45.52:60.37
-chr1 2615553 . G A 21.44 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=1;HaplotypeScore=33.08;MQ=9.60;MQ0=74;QD=0.23;SB=-3.99 GT:AD:DP:GL:GQ 0/1:70,24:9:-8.14,-2.71,-26.22:54.25
-chr1 2615563 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=52.83;MQ=8.09;MQ0=76;OQ=64.78;QD=0.70;SB=-10.00 GT:AD:DP:GL:GQ 0/1:82,10:5:-11.27,-1.51,-6.24:47.31
-chr1 2615689 . T C 30.94 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=62.56;MQ=10.13;MQ0=88;QD=0.28;SB=-3.98 GT:AD:DP:GL:GQ 0/1:18,89:9:-9.09,-2.71,-22.98:63.77
-chr1 2615717 rs61765669 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=37.80;MQ=10.99;MQ0=80;OQ=103.09;QD=0.95;SB=-3.99 GT:AD:DP:GL:GQ 0/1:26,83:10:-16.61,-3.01,-17.76:99
-chr1 2615757 . C A 39.74 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=1;HaplotypeScore=30.17;MQ=13.18;MQ0=60;QD=0.43;SB=0.17 GT:AD:DP:GL:GQ 0/1:71,20:17:-15.95,-8.69,-48.17:72.57
-chr1 2615837 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=39.99;MQ=26.86;MQ0=21;OQ=73.19;QD=1.33;SB=-36.22 GT:AD:DP:GL:GQ 0/1:29,26:20:-16.63,-6.03,-56.46:99
-chr1 2615892 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=3;HaplotypeScore=44.02;MQ=30.58;MQ0=2;OQ=63.96;QD=1.12;SB=26.10 GT:AD:DP:GL:GQ 0/1:25,32:26:-17.51,-7.83,-73.92:96.79
-chr1 2615945 rs28619423 T C 0.80 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=8.32;MQ=22.59;MQ0=1;OQ=99.94;QD=5.26;SB=-76.91 GT:AD:DP:GL:GQ 1/1:3,15:4:-13.53,-1.21,-0.00:12.03
-chr1 2615949 rs28373809 G A 10.26 LowQual AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=9.32;MQ=19.47;MQ0=1;QD=0.68;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,14:1:-4.27,-0.30,-0.00:1.76
-chr1 2615990 . C G 0.11 PASS AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=8.97;MQ=20.31;MQ0=1;OQ=58.76;QD=6.53;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:2:-9.28,-0.60,-0.00:6.02
-chr1 2615997 . G A 36.46 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=29.63;MQ=20.63;MQ0=6;QD=1.35;SB=-7.00 GT:AD:DP:GL:GQ 0/1:18,9:5:-8.44,-1.51,-10.16:69.30
-chr1 2616009 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=2;HaplotypeScore=37.74;MQ=29.64;MQ0=6;OQ=112.90;QD=3.53;SB=-3.99 GT:AD:DP:GL:GQ 0/1:15,17:12:-18.19,-3.62,-24.59:99
-chr1 2616012 . A C 43.77 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=39.70;MQ=31.56;MQ0=5;QD=1.41;SB=-0.98 GT:AD:DP:GL:GQ 0/1:13,18:11:-10.97,-3.31,-27.78:76.61
-chr1 2616021 . C A 30.19 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=71.42;MQ=30.54;MQ0=5;QD=0.70;SB=-0.98 GT:AD:DP:GL:GQ 0/1:37,6:16:-11.12,-4.82,-46.67:63.02
-chr1 2616048 . A C 104.33 Indel AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=256.69;MQ=33.48;MQ0=5;QD=1.53;SB=-0.98 GT:AD:DP:GL:GQ 0/1:26,38:27:-21.85,-8.13,-76.79:99
-chr1 2616053 . A C 36.21 Indel;LowQual AC=1;AF=0.50;AN=2;DP=80;Dels=0.06;HRun=3;HaplotypeScore=159.99;MQ=31.20;MQ0=8;QD=0.45;SB=-3.99 GT:AD:DP:GL:GQ 0/1:43,32:27:-15.04,-8.13,-81.51:69.04
-chr1 2616066 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=127.16;MQ=28.37;MQ0=17;OQ=116.17;QD=0.90;SB=11.03 GT:AD:DP:GL:GQ 0/1:64,41:40:-43.16,-28.26,-112.08:99
-chr1 2616091 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=152;Dels=0.02;HRun=3;HaplotypeScore=245.31;MQ=26.01;MQ0=24;OQ=74.30;QD=0.49;SB=8.05 GT:AD:DP:GL:GQ 0/1:77,30:40:-32.83,-22.11,-117.91:99
-chr1 2616098 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=238.65;MQ=25.86;MQ0=23;OQ=203.33;QD=1.36;SB=8.03 GT:AD:DP:GL:GQ 0/1:83,65:39:-35.37,-11.76,-97.26:99
-chr1 2616121 rs28707614 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=1;HaplotypeScore=348.16;MQ=25.38;MQ0=21;OQ=754.79;QD=6.92;SB=-132.69 GT:AD:DP:GL:GQ 0/1:14,95:27:-86.90,-8.14,-12.11:39.77
-chr1 2616201 rs28495110 G T 0.10 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=18.82;MQ=45.96;MQ0=6;OQ=1088.68;QD=25.92;SB=-422.58 GT:AD:DP:GL:GQ 1/1:8,34:31:-112.47,-9.34,-0.01:93.25
-chr1 2616235 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=22.81;MQ=34.27;MQ0=9;OQ=189.73;QD=2.67;SB=-88.83 GT:AD:DP:GL:GQ 0/1:28,43:31:-31.59,-9.34,-82.55:99
-chr1 2616250 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=198;Dels=0.00;HRun=1;HaplotypeScore=98.35;MQ=24.83;MQ0=26;OQ=53.95;QD=0.27;SB=-52.26 GT:AD:DP:GL:GQ 0/1:175,16:77:-39.01,-30.33,-235.94:86.79
-chr1 2616284 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=316;Dels=0.00;HRun=0;HaplotypeScore=207.75;MQ=22.41;MQ0=34;OQ=472.89;QD=1.50;SB=-261.05 GT:AD:DP:GL:GQ 0/1:280,35:108:-83.11,-32.54,-299.84:99
-chr1 2616291 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=0;HaplotypeScore=168.73;MQ=22.17;MQ0=35;OQ=503.17;QD=1.63;SB=-147.25 GT:AD:DP:GL:GQ 0/1:228,77:110:-86.74,-33.14,-306.67:99
-chr1 2616303 rs61765755 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=285;Dels=0.00;HRun=0;HaplotypeScore=48.79;MQ=22.14;MQ0=36;OQ=3893.80;QD=13.66;SB=-1294.80 GT:AD:DP:GL:GQ 0/1:13,240:102:-388.38,-54.71,-62.45:77.36
-chr1 2616333 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=234;Dels=0.00;HRun=0;HaplotypeScore=268.36;MQ=23.38;MQ0=29;OQ=127.30;QD=0.54;SB=-30.73 GT:AD:DP:GL:GQ 0/1:215,16:95:-44.63,-28.62,-299.60:99
-chr1 2616354 rs7544898 A C 1854.66 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=113;Dels=0.00;HRun=1;HaplotypeScore=61.29;MQ=28.89;MQ0=15;QD=16.41;SB=-484.04 GT:AD:DP:GL:GQ 1/1:2,105:53:-193.02,-19.43,-3.97:99
-chr1 2616358 . A G 865.25 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=1;HaplotypeScore=46.74;MQ=30.83;MQ0=11;QD=8.83;SB=-6.56 GT:AD:DP:GL:GQ 0/1:29,69:51:-105.17,-15.36,-93.21:99
-chr1 2616363 . G C 842.15 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=1;HaplotypeScore=46.38;MQ=31.26;MQ0=12;QD=8.68;SB=-14.79 GT:AD:DP:GL:GQ 0/1:55,42:53:-103.48,-15.98,-115.82:99
-chr1 2616398 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=48.31;MQ=34.63;MQ0=12;OQ=554.46;QD=5.84;SB=10.29 GT:AD:DP:GL:GQ 0/1:66,29:54:-75.00,-16.28,-154.28:99
-chr1 2616612 . G C 20.97 LowQual AC=1;AF=0.50;AN=2;DP=70;Dels=0.01;HRun=0;HaplotypeScore=165.26;MQ=30.37;MQ0=2;QD=0.30;SB=-32.74 GT:AD:DP:GL:GQ 0/1:19,45:24:-19.94,-14.57,-91.68:53.77
-chr1 2616615 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=3;HaplotypeScore=70.16;MQ=28.36;MQ0=2;OQ=89.21;QD=1.29;SB=-14.35 GT:AD:DP:GL:GQ 0/1:26,38:19:-17.94,-5.74,-58.45:99
-chr1 2616647 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=0;HaplotypeScore=217.54;MQ=24.00;MQ0=30;OQ=94.92;QD=0.69;SB=35.11 GT:AD:DP:GL:GQ 0/1:84,43:37:-23.93,-11.16,-103.88:99
-chr1 2616654 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=1;HaplotypeScore=223.04;MQ=23.83;MQ0=42;OQ=359.87;QD=1.99;SB=35.13 GT:AD:DP:GL:GQ 0/1:140,35:44:-52.54,-13.27,-92.39:99
-chr1 2616670 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=198;Dels=0.00;HRun=0;HaplotypeScore=299.99;MQ=23.86;MQ0=44;OQ=60.86;QD=0.31;SB=35.11 GT:AD:DP:GL:GQ 0/1:127,67:50:-24.46,-15.09,-137.52:93.69
-chr1 2616692 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=0;HaplotypeScore=231.37;MQ=26.06;MQ0=26;OQ=91.62;QD=0.55;SB=35.13 GT:AD:DP:GL:GQ 0/1:91,73:56:-32.64,-20.19,-183.88:99
-chr1 2616713 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=98.28;MQ=31.06;MQ0=12;OQ=565.06;QD=6.81;SB=-40.25 GT:AD:DP:GL:GQ 0/1:27,50:40:-78.76,-18.97,-82.14:99
-chr1 2616803 . G C 11.63 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=76;Dels=0.01;HRun=0;HaplotypeScore=115.33;MQ=32.59;MQ0=10;QD=0.15;SB=23.09 GT:AD:DP:GL:GQ 0/1:27,42:23:-11.36,-6.95,-79.45:44.16
-chr1 2616826 . T C 18.72 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=39.74;MQ=39.24;MQ0=2;QD=0.38;SB=20.09 GT:AD:DP:GL:GQ 0/1:24,24:22:-11.78,-6.63,-68.52:51.50
-chr1 2616954 rs28486014 C A 1246.57 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=172;Dels=0.00;HRun=0;HaplotypeScore=118.85;MQ=19.01;MQ0=19;QD=7.25;SB=-604.12 GT:AD:DP:GL:GQ 1/1:2,165:36:-131.25,-13.77,-3.01:99
-chr1 2616962 . A G 25.32 DPFilter;HARD_TO_VALIDATE;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=218;Dels=0.00;HRun=0;HaplotypeScore=150.59;MQ=18.32;MQ0=25;QD=0.12;SB=17.48 GT:AD:DP:GL:GQ 0/1:179,39:39:-17.57,-11.75,-132.90:58.14
-chr1 2616963 . C G 90.14 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=0;HaplotypeScore=167.60;MQ=18.42;MQ0=25;QD=0.41;SB=8.17 GT:AD:DP:GL:GQ 0/1:182,34:40:-27.79,-15.49,-139.11:99
-chr1 2616976 . C A 13.99 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=267;Dels=0.00;HRun=0;HaplotypeScore=283.46;MQ=18.62;MQ0=35;QD=0.05;SB=55.93 GT:AD:DP:GL:GQ 0/1:236,26:51:-20.03,-15.36,-160.20:46.65
-chr1 2616982 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=0;HaplotypeScore=251.51;MQ=19.64;MQ0=37;OQ=486.76;QD=1.74;SB=8.99 GT:AD:DP:GL:GQ 0/1:187,73:54:-71.97,-20.01,-131.66:99
-chr1 2617013 . A C 16.86 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=5;HaplotypeScore=227.22;MQ=22.36;MQ0=34;QD=0.07;SB=14.07 GT:AD:DP:GL:GQ 0/1:208,22:59:-25.00,-20.04,-187.42:49.60
-chr1 2617015 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=222;Dels=0.00;HRun=0;HaplotypeScore=200.07;MQ=22.66;MQ0=33;OQ=161.89;QD=0.73;SB=20.10 GT:AD:DP:GL:GQ 0/1:186,27:59:-43.12,-23.65,-203.21:99
-chr1 2617028 rs61765757 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=178;Dels=0.00;HRun=0;HaplotypeScore=111.43;MQ=24.75;MQ0=28;OQ=1236.03;QD=6.94;SB=-23.31 GT:AD:DP:GL:GQ 0/1:36,141:55:-143.45,-16.57,-61.22:99
-chr1 2617033 rs61765759 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=173;Dels=0.00;HRun=0;HaplotypeScore=123.68;MQ=24.76;MQ0=29;OQ=945.67;QD=5.47;SB=-60.88 GT:AD:DP:GL:GQ 0/1:19,129:49:-112.61,-14.76,-62.28:99
-chr1 2617058 rs28585375 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=236;Dels=0.00;HRun=0;HaplotypeScore=112.06;MQ=22.97;MQ0=54;OQ=357.80;QD=1.52;SB=-120.52 GT:AD:DP:GL:GQ 0/1:214,20:72:-60.76,-21.69,-192.59:99
-chr1 2617101 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=207;Dels=0.00;HRun=1;HaplotypeScore=89.01;MQ=23.73;MQ0=48;OQ=1884.44;QD=9.10;SB=-387.68 GT:AD:DP:GL:GQ 0/1:34,172:76:-214.63,-22.90,-42.31:99
-chr1 2617123 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=48.50;MQ=26.08;MQ0=56;OQ=129.18;QD=0.64;SB=-72.20 GT:AD:DP:GL:GQ 0/1:185,17:80:-40.33,-24.13,-284.57:99
-chr1 2617151 . G C 42.86 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=2;HaplotypeScore=97.11;MQ=23.22;MQ0=69;QD=0.22;SB=-10.77 GT:AD:DP:GL:GQ 0/1:167,21:55:-24.18,-16.61,-193.30:75.70
-chr1 2617160 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=181;Dels=0.00;HRun=1;HaplotypeScore=68.35;MQ=20.95;MQ0=76;OQ=103.39;QD=0.57;SB=17.08 GT:AD:DP:GL:GQ 0/1:148,32:50:-28.69,-15.07,-157.59:99
-chr1 2617178 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.01;HRun=4;HaplotypeScore=67.98;MQ=19.71;MQ0=69;OQ=224.46;QD=1.59;SB=-23.83 GT:AD:DP:GL:GQ 0/1:56,82:32:-35.39,-9.66,-90.46:99
-chr1 2617216 . T C 14.18 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=2;HaplotypeScore=54.33;MQ=16.92;MQ0=58;QD=0.13;SB=5.04 GT:AD:DP:GL:GQ 0/1:54,55:21:-11.01,-6.33,-70.16:46.85
-chr1 2617218 . C G 13.85 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=108;Dels=0.00;HRun=0;HaplotypeScore=69.57;MQ=15.97;MQ0=58;QD=0.13;SB=5.05 GT:AD:DP:GL:GQ 0/1:87,20:21:-10.98,-6.33,-76.68:46.51
-chr1 2617261 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=41.53;MQ=20.71;MQ0=16;OQ=109.26;QD=1.79;SB=-48.91 GT:AD:DP:GL:GQ 0/1:26,35:19:-19.93,-5.73,-46.91:99
-chr1 2617273 rs61466658 T C 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=31.65;MQ=19.33;MQ0=33;OQ=744.68;QD=8.97;SB=-307.99 GT:AD:DP:GL:GQ 1/1:6,73:24:-80.83,-7.23,-2.78:44.58
-chr1 2617320 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=383;Dels=0.00;HRun=2;HaplotypeScore=179.89;MQ=20.12;MQ0=69;OQ=511.87;QD=1.34;SB=-192.93 GT:AD:DP:GL:GQ 0/1:271,102:88:-80.98,-26.51,-240.14:99
-chr1 2617333 . A C 189.16 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=412;Dels=0.00;HRun=1;HaplotypeScore=324.51;MQ=20.25;MQ0=68;QD=0.46;SB=-46.42 GT:AD:DP:GL:GQ 0/1:362,48:102:-52.93,-30.73,-310.85:99
-chr1 2617334 . C T 347.52 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=413;Dels=0.00;HRun=0;HaplotypeScore=315.80;MQ=20.22;MQ0=68;QD=0.84;SB=-93.66 GT:AD:DP:GL:GQ 0/1:367,35:98:-67.59,-29.55,-258.47:99
-chr1 2617338 . C G 222.34 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=432;Dels=0.00;HRun=0;HaplotypeScore=396.78;MQ=20.69;MQ0=66;QD=0.51;SB=19.38 GT:AD:DP:GL:GQ 0/1:381,42:103:-66.44,-40.92,-386.05:99
-chr1 2617341 . G T 154.66 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=435;Dels=0.00;HRun=1;HaplotypeScore=393.28;MQ=20.73;MQ0=66;QD=0.36;SB=-27.31 GT:AD:DP:GL:GQ 0/1:377,44:114:-56.17,-37.42,-341.25:99
-chr1 2617354 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=456;Dels=0.00;HRun=0;HaplotypeScore=284.18;MQ=21.50;MQ0=65;OQ=410.45;QD=0.90;SB=-157.97 GT:AD:DP:GL:GQ 0/1:367,88:128:-86.24,-41.91,-394.71:99
-chr1 2617375 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=397;Dels=0.00;HRun=0;HaplotypeScore=286.33;MQ=23.04;MQ0=37;OQ=238.47;QD=0.60;SB=-127.61 GT:AD:DP:GL:GQ 0/1:316,80:131:-66.59,-39.46,-400.07:99
-chr1 2617377 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=393;Dels=0.00;HRun=0;HaplotypeScore=264.38;MQ=23.09;MQ0=38;OQ=52.53;QD=0.13;SB=34.31 GT:AD:DP:GL:GQ 0/1:349,42:132:-48.29,-39.76,-421.34:85.37
-chr1 2617406 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=150.38;MQ=24.81;MQ0=30;OQ=1026.09;QD=4.44;SB=-81.56 GT:AD:DP:GL:GQ 0/1:71,150:85:-131.52,-25.63,-230.33:99
-chr1 2617434 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=111.67;MQ=24.27;MQ0=28;OQ=290.81;QD=2.02;SB=-29.80 GT:AD:DP:GL:GQ 0/1:61,70:56:-59.33,-26.96,-156.98:99
-chr1 2617463 rs56282610 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=58.94;MQ=24.92;MQ0=20;OQ=411.11;QD=4.42;SB=-153.67 GT:AD:DP:GL:GQ 0/1:29,63:36:-55.25,-10.85,-76.21:99
-chr1 2617490 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=85.26;MQ=28.92;MQ0=14;OQ=93.54;QD=0.96;SB=32.09 GT:AD:DP:GL:GQ 0/1:84,12:39:-24.38,-11.75,-112.74:99
-chr1 2617496 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=107.91;MQ=30.31;MQ0=12;OQ=102.53;QD=1.11;SB=32.10 GT:AD:DP:GL:GQ 0/1:79,12:38:-24.98,-11.44,-111.78:99
-chr1 2617505 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=81.67;MQ=32.33;MQ0=11;OQ=247.78;QD=2.69;SB=-60.73 GT:AD:DP:GL:GQ 0/1:40,39:40:-40.11,-12.05,-107.49:99
-chr1 2617521 rs56279030 G C 42.50 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=0;HaplotypeScore=51.30;MQ=31.83;MQ0=12;QD=0.40;SB=0.26 GT:AD:DP:GL:GQ 0/1:94,13:44:-20.79,-13.26,-170.49:75.34
-chr1 2617526 rs28536771 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=105;Dels=0.00;HRun=0;HaplotypeScore=63.55;MQ=32.40;MQ0=9;OQ=160.23;QD=1.53;SB=-3.57 GT:AD:DP:GL:GQ 0/1:45,55:37:-30.46,-11.15,-113.20:99
-chr1 2617584 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=87.31;MQ=28.18;MQ0=10;OQ=524.04;QD=3.59;SB=-151.92 GT:AD:DP:GL:GQ 0/1:49,97:62:-74.37,-18.69,-162.12:99
-chr1 2617611 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=154;Dels=0.01;HRun=0;HaplotypeScore=176.05;MQ=27.08;MQ0=16;OQ=81.66;QD=0.53;SB=-0.83 GT:AD:DP:GL:GQ 0/1:126,24:59:-29.22,-17.77,-179.32:99
-chr1 2617617 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=177.05;MQ=27.20;MQ0=14;OQ=126.07;QD=0.84;SB=8.21 GT:AD:DP:GL:GQ 0/1:125,25:58:-33.36,-17.47,-170.99:99
-chr1 2617626 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=140;Dels=0.00;HRun=0;HaplotypeScore=162.52;MQ=28.40;MQ0=11;OQ=508.32;QD=3.63;SB=-161.48 GT:AD:DP:GL:GQ 0/1:40,77:57:-73.89,-19.78,-125.32:99
-chr1 2617630 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=1;HaplotypeScore=122.08;MQ=28.20;MQ0=11;OQ=734.14;QD=5.13;SB=-361.31 GT:AD:DP:GL:GQ 0/1:73,47:61:-98.65,-21.95,-111.48:99
-chr1 2617659 rs55801140 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=159;Dels=0.00;HRun=0;HaplotypeScore=125.08;MQ=27.55;MQ0=12;OQ=175.93;QD=1.11;SB=23.11 GT:AD:DP:GL:GQ 0/1:141,12:44:-34.15,-13.27,-148.76:99
-chr1 2617668 rs28535687 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=135;Dels=0.00;HRun=0;HaplotypeScore=255.63;MQ=27.99;MQ0=8;OQ=172.40;QD=1.28;SB=-72.12 GT:AD:DP:GL:GQ 0/1:31,69:32:-40.65,-20.12,-107.26:99
-chr1 2617672 . G T 32.81 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=0;HaplotypeScore=245.46;MQ=28.29;MQ0=7;QD=0.25;SB=11.06 GT:AD:DP:GL:GQ 0/1:84,46:25:-14.10,-7.54,-64.41:65.64
-chr1 2617713 . C T 25.50 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=0;HaplotypeScore=235.92;MQ=23.71;MQ0=16;QD=0.15;SB=11.61 GT:AD:DP:GL:GQ 0/1:80,75:31:-15.18,-9.35,-88.30:58.32
-chr1 2617737 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=1;HaplotypeScore=196.10;MQ=25.34;MQ0=20;OQ=242.18;QD=1.19;SB=-124.57 GT:AD:DP:GL:GQ 0/1:154,44:50:-42.56,-15.06,-131.92:99
-chr1 2617767 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=115.66;MQ=29.10;MQ0=18;OQ=374.38;QD=2.92;SB=-46.69 GT:AD:DP:GL:GQ 0/1:37,72:41:-53.07,-12.35,-97.04:99
-chr1 2617781 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=110.28;MQ=28.42;MQ0=22;OQ=65.20;QD=0.50;SB=26.12 GT:AD:DP:GL:GQ 0/1:110,18:43:-22.77,-12.97,-156.99:98.03
-chr1 2617809 rs28698520 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=120;Dels=0.01;HRun=1;HaplotypeScore=154.47;MQ=26.46;MQ0=29;OQ=544.53;QD=4.54;SB=20.07 GT:AD:DP:GL:GQ 0/1:74,45:37:-68.88,-11.15,-59.02:99
-chr1 2617834 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=1;HaplotypeScore=142.69;MQ=25.75;MQ0=33;OQ=247.39;QD=1.66;SB=-8.79 GT:AD:DP:GL:GQ 0/1:101,20:44:-48.54,-20.52,-132.57:99
-chr1 2617846 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=163;Dels=0.00;HRun=0;HaplotypeScore=110.83;MQ=27.45;MQ0=31;OQ=574.67;QD=3.53;SB=-169.29 GT:AD:DP:GL:GQ 0/1:34,98:52:-84.16,-23.41,-106.75:99
-chr1 2617859 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=258;Dels=0.00;HRun=0;HaplotypeScore=189.65;MQ=26.24;MQ0=36;OQ=661.11;QD=2.56;SB=-188.93 GT:AD:DP:GL:GQ 0/1:183,74:74:-91.72,-22.32,-216.13:99
-chr1 2617878 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=308;Dels=0.00;HRun=0;HaplotypeScore=214.86;MQ=26.40;MQ0=36;OQ=1364.14;QD=4.43;SB=-695.16 GT:AD:DP:GL:GQ 0/1:245,61:100:-169.82,-30.12,-204.71:99
-chr1 2617913 rs61766463 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=276;Dels=0.00;HRun=0;HaplotypeScore=33.34;MQ=34.26;MQ0=23;OQ=345.85;QD=1.25;SB=54.43 GT:AD:DP:GL:GQ 0/1:130,145:134:-78.24,-40.37,-397.42:99
-chr1 2617929 rs61766464 G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=313;Dels=0.00;HRun=0;HaplotypeScore=209.86;MQ=34.59;MQ0=24;OQ=2475.95;QD=7.91;SB=-469.20 GT:AD:DP:GL:GQ 0/1:207,106:147:-295.16,-44.28,-232.82:99
-chr1 2617945 rs61766465 G A 678.02 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=327;Dels=0.00;HRun=0;HaplotypeScore=293.41;MQ=35.76;MQ0=33;QD=2.07;SB=57.72 GT:AD:DP:GL:GQ 0/1:285,42:156:-118.09,-47.00,-457.61:99
-chr1 2617948 . A T 1515.78 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=339;Dels=0.00;HRun=0;HaplotypeScore=339.78;MQ=35.84;MQ0=34;QD=4.47;SB=-315.59 GT:AD:DP:GL:GQ 0/1:267,71:155:-201.56,-46.69,-377.16:99
-chr1 2617953 rs61766466 C A 621.95 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=348;Dels=0.00;HRun=0;HaplotypeScore=257.70;MQ=36.09;MQ0=43;QD=1.79;SB=55.33 GT:AD:DP:GL:GQ 0/1:287,49:168:-116.08,-50.61,-483.68:99
-chr1 2618063 rs28379532 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.02;HRun=0;HaplotypeScore=36.25;MQ=31.70;MQ0=29;OQ=1863.52;QD=13.03;SB=-253.52 GT:AD:DP:GL:GQ 0/1:27,111:85:-215.25,-25.61,-83.05:99
-chr1 2618135 rs28499404 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=183;Dels=0.00;HRun=0;HaplotypeScore=48.32;MQ=27.35;MQ0=42;OQ=347.83;QD=1.90;SB=-174.55 GT:AD:DP:GL:GQ 0/1:162,21:105:-69.72,-31.65,-366.58:99
-chr1 2618152 rs61766467 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=192;Dels=0.00;HRun=1;HaplotypeScore=85.82;MQ=26.36;MQ0=44;OQ=458.63;QD=2.39;SB=-15.83 GT:AD:DP:GL:GQ 0/1:151,41:104:-80.48,-31.33,-290.41:99
-chr1 2618186 rs28655771 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=193;Dels=0.00;HRun=1;HaplotypeScore=114.84;MQ=21.49;MQ0=56;OQ=2645.92;QD=13.71;SB=-1050.69 GT:AD:DP:GL:GQ 1/1:5,188:77:-268.22,-23.20,-0.04:99
-chr1 2618191 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=203;Dels=0.00;HRun=0;HaplotypeScore=161.00;MQ=22.90;MQ0=57;OQ=50.10;QD=0.25;SB=39.02 GT:AD:DP:GL:GQ 0/1:173,30:86:-34.21,-25.91,-268.48:82.93
-chr1 2618226 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=268;Dels=0.00;HRun=0;HaplotypeScore=192.42;MQ=33.49;MQ0=36;OQ=337.18;QD=1.26;SB=-53.39 GT:AD:DP:GL:GQ 0/1:227,40:152:-82.80,-45.80,-457.42:99
-chr1 2618254 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=296;Dels=0.00;HRun=0;HaplotypeScore=166.54;MQ=37.41;MQ0=24;OQ=808.97;QD=2.73;SB=-397.12 GT:AD:DP:GL:GQ 0/1:225,67:181:-140.83,-56.65,-515.36:99
-chr1 2618301 . C A 998.94 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=292;Dels=0.00;HRun=0;HaplotypeScore=277.61;MQ=43.53;MQ0=9;QD=3.42;SB=-458.03 GT:AD:DP:GL:GQ 0/1:215,74:195:-161.93,-58.75,-524.06:99
-chr1 2618303 . C A 591.91 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=295;Dels=0.00;HRun=0;HaplotypeScore=301.39;MQ=43.31;MQ0=10;QD=2.01;SB=-293.38 GT:AD:DP:GL:GQ 0/1:236,56:205:-124.23,-61.75,-600.14:99
-chr1 2618307 . G A 971.72 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=283;Dels=0.00;HRun=0;HaplotypeScore=193.14;MQ=43.47;MQ0=11;QD=3.43;SB=-273.43 GT:AD:DP:GL:GQ 0/1:228,48:199:-160.42,-59.96,-556.19:99
-chr1 2618320 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=309;Dels=0.00;HRun=0;HaplotypeScore=150.76;MQ=41.04;MQ0=29;OQ=452.34;QD=1.46;SB=-151.56 GT:AD:DP:GL:GQ 0/1:223,31:184:-121.13,-72.62,-509.07:99
-chr1 2618366 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=558;Dels=0.00;HRun=0;HaplotypeScore=219.65;MQ=26.44;MQ0=134;OQ=289.23;QD=0.52;SB=167.70 GT:AD:DP:GL:GQ 0/1:454,69:221:-105.97,-73.77,-728.70:99
-chr1 2618375 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=585;Dels=0.00;HRun=0;HaplotypeScore=337.36;MQ=25.16;MQ0=141;OQ=507.21;QD=0.87;SB=196.74 GT:AD:DP:GL:GQ 0/1:487,75:227:-128.47,-74.47,-700.80:99
-chr1 2618378 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=594;Dels=0.00;HRun=0;HaplotypeScore=307.01;MQ=24.92;MQ0=142;OQ=386.51;QD=0.65;SB=-74.59 GT:AD:DP:GL:GQ 0/1:524,66:225:-115.59,-73.65,-670.89:99
-chr1 2618414 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=573;Dels=0.00;HRun=1;HaplotypeScore=206.56;MQ=24.36;MQ0=140;OQ=719.44;QD=1.26;SB=-72.20 GT:AD:DP:GL:GQ 0/1:439,119:210:-138.50,-63.27,-592.09:99
-chr1 2618418 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=531;Dels=0.00;HRun=0;HaplotypeScore=181.25;MQ=24.54;MQ0=131;OQ=939.27;QD=1.77;SB=-76.38 GT:AD:DP:GL:GQ 0/1:427,103:204:-158.68,-61.47,-574.55:99
-chr1 2618432 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=412;Dels=0.00;HRun=0;HaplotypeScore=70.50;MQ=25.62;MQ0=105;OQ=877.24;QD=2.13;SB=-428.33 GT:AD:DP:GL:GQ 0/1:368,44:152:-136.86,-45.86,-364.87:99
-chr1 2618444 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=352;Dels=0.00;HRun=1;HaplotypeScore=46.24;MQ=26.18;MQ0=89;OQ=1301.34;QD=3.70;SB=170.58 GT:AD:DP:GL:GQ 0/1:167,181:143:-176.57,-43.15,-394.32:99
-chr1 2618459 rs61766471 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=309;Dels=0.00;HRun=0;HaplotypeScore=122.77;MQ=27.15;MQ0=60;OQ=430.68;QD=1.39;SB=-167.89 GT:AD:DP:GL:GQ 0/1:283,25:135:-87.04,-40.69,-380.50:99
-chr1 2618482 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=0;HaplotypeScore=91.95;MQ=32.62;MQ0=31;OQ=752.10;QD=3.36;SB=-248.53 GT:AD:DP:GL:GQ 0/1:115,107:101:-108.92,-30.43,-254.35:99
-chr1 2618501 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=234;Dels=0.01;HRun=4;HaplotypeScore=341.35;MQ=30.82;MQ0=33;OQ=155.62;QD=0.67;SB=92.01 GT:AD:DP:GL:GQ 0/1:155,66:98:-53.97,-35.12,-329.58:99
-chr1 2618530 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=231;Dels=0.00;HRun=0;HaplotypeScore=168.93;MQ=32.32;MQ0=29;OQ=236.35;QD=1.02;SB=-122.19 GT:AD:DP:GL:GQ 0/1:211,19:107:-59.16,-32.24,-318.05:99
-chr1 2618557 rs28411025 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=156;Dels=0.00;HRun=0;HaplotypeScore=133.44;MQ=39.19;MQ0=9;OQ=2883.82;QD=18.49;SB=-1383.19 GT:AD:DP:GL:GQ 0/1:27,128:92:-319.41,-27.74,-64.72:99
-chr1 2618577 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=228;Dels=0.01;HRun=1;HaplotypeScore=243.04;MQ=34.35;MQ0=14;OQ=206.46;QD=0.91;SB=-125.59 GT:AD:DP:GL:GQ 0/1:119,105:92:-51.66,-27.73,-260.87:99
-chr1 2618590 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=341;Dels=0.00;HRun=0;HaplotypeScore=269.37;MQ=32.40;MQ0=23;OQ=694.60;QD=2.04;SB=-10.03 GT:AD:DP:GL:GQ 0/1:206,129:134:-115.74,-43.00,-326.10:99
-chr1 2618603 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=385;Dels=0.00;HRun=0;HaplotypeScore=742.67;MQ=32.24;MQ0=20;OQ=374.09;QD=0.97;SB=-84.54 GT:AD:DP:GL:GQ 0/1:213,140:157:-94.37,-53.68,-577.68:99
-chr1 2618613 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=414;Dels=0.00;HRun=1;HaplotypeScore=803.50;MQ=31.66;MQ0=23;OQ=626.38;QD=1.51;SB=181.82 GT:AD:DP:GL:GQ 0/1:349,58:175:-118.68,-52.76,-621.84:99
-chr1 2618617 . A C 34.85 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=417;Dels=0.00;HRun=1;HaplotypeScore=645.23;MQ=31.22;MQ0=23;QD=0.08;SB=-15.32 GT:AD:DP:GL:GQ 0/1:232,176:163:-62.01,-55.24,-512.02:67.68
-chr1 2618648 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=485;Dels=0.00;HRun=0;HaplotypeScore=582.18;MQ=29.51;MQ0=32;OQ=1313.91;QD=2.71;SB=163.03 GT:AD:DP:GL:GQ 0/1:367,113:208:-197.35,-62.68,-695.38:99
-chr1 2618651 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=487;Dels=0.00;HRun=0;HaplotypeScore=686.95;MQ=29.46;MQ0=33;OQ=108.10;QD=0.22;SB=256.13 GT:AD:DP:GL:GQ 0/1:431,46:211:-84.08,-69.98,-671.09:99
-chr1 2618685 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=500;Dels=0.00;HRun=1;HaplotypeScore=291.67;MQ=27.86;MQ0=33;OQ=4318.30;QD=8.64;SB=-761.47 GT:AD:DP:GL:GQ 0/1:182,284:216:-430.83,-67.58,-458.35:99
-chr1 2618707 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=462;Dels=0.01;HRun=4;HaplotypeScore=721.39;MQ=29.06;MQ0=34;OQ=2615.02;QD=5.66;SB=-699.35 GT:AD:DP:GL:GQ 0/1:165,282:202:-327.27,-62.48,-383.70:99
-chr1 2618711 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=464;Dels=0.00;HRun=0;HaplotypeScore=458.70;MQ=28.79;MQ0=35;OQ=1658.43;QD=3.57;SB=-180.55 GT:AD:DP:GL:GQ 0/1:156,178:185:-246.74,-77.62,-433.93:99
-chr1 2618743 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=565;Dels=0.00;HRun=1;HaplotypeScore=594.08;MQ=28.52;MQ0=39;OQ=195.57;QD=0.35;SB=27.58 GT:AD:DP:GL:GQ 0/1:503,58:268:-103.62,-80.78,-771.76:99
-chr1 2618776 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=541;Dels=0.00;HRun=0;HaplotypeScore=502.52;MQ=30.93;MQ0=35;OQ=5244.83;QD=9.69;SB=-856.66 GT:AD:DP:GL:GQ 0/1:182,353:279:-523.48,-84.06,-514.94:99
-chr1 2618784 . C T 23.85 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=542;Dels=0.00;HRun=0;HaplotypeScore=612.02;MQ=31.33;MQ0=33;QD=0.04;SB=67.53 GT:AD:DP:GL:GQ 0/1:386,152:218:-71.34,-65.68,-703.92:56.67
-chr1 2618799 rs61766473 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=520;Dels=0.00;HRun=1;HaplotypeScore=456.03;MQ=31.14;MQ0=35;OQ=4809.01;QD=9.25;SB=-828.34 GT:AD:DP:GL:GQ 0/1:169,328:274:-479.90,-94.56,-523.76:99
-chr1 2618813 rs28570043 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=586;Dels=0.00;HRun=0;HaplotypeScore=299.20;MQ=30.92;MQ0=47;OQ=1856.68;QD=3.17;SB=-717.31 GT:AD:DP:GL:GQ 0/1:501,75:250:-270.75,-81.80,-777.18:99
-chr1 2618823 rs61766474 A T 4860.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=562;Dels=0.00;HRun=0;HaplotypeScore=709.32;MQ=30.48;MQ0=44;QD=8.65;SB=-560.15 GT:AD:DP:GL:GQ 0/1:287,273:277:-485.00,-83.44,-550.46:99
-chr1 2618832 . C G 1479.75 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=512;Dels=0.00;HRun=2;HaplotypeScore=411.64;MQ=30.81;MQ0=42;QD=2.89;SB=-17.36 GT:AD:DP:GL:GQ 0/1:367,94:241:-231.26,-80.00,-778.36:99
-chr1 2618833 . G C 375.40 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=513;Dels=0.00;HRun=1;HaplotypeScore=505.52;MQ=30.67;MQ0=42;QD=0.73;SB=152.53 GT:AD:DP:GL:GQ 0/1:466,47:236:-112.05,-71.23,-847.97:99
-chr1 2618853 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=470;Dels=0.00;HRun=0;HaplotypeScore=742.82;MQ=31.02;MQ0=40;OQ=917.98;QD=1.95;SB=-4.91 GT:AD:DP:GL:GQ 0/1:336,89:211:-236.75,-141.67,-586.15:99
-chr1 2618854 rs61766475 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=465;Dels=0.00;HRun=1;HaplotypeScore=675.66;MQ=31.14;MQ0=39;OQ=3030.86;QD=6.52;SB=-170.15 GT:AD:DP:GL:GQ 0/1:129,210:216:-470.96,-164.59,-497.24:99
-chr1 2618865 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=505;Dels=0.00;HRun=0;HaplotypeScore=338.61;MQ=30.47;MQ0=44;OQ=342.56;QD=0.68;SB=-14.42 GT:AD:DP:GL:GQ 0/1:439,53:231:-117.83,-80.29,-726.19:99
-chr1 2618904 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=499;Dels=0.00;HRun=4;HaplotypeScore=608.12;MQ=29.15;MQ0=44;OQ=1769.15;QD=3.55;SB=89.28 GT:AD:DP:GL:GQ 0/1:280,197:227:-252.16,-71.97,-553.68:99
-chr1 2618905 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=514;Dels=0.00;HRun=0;HaplotypeScore=596.36;MQ=29.03;MQ0=46;OQ=337.81;QD=0.66;SB=-30.28 GT:AD:DP:GL:GQ 0/1:424,43:227:-138.22,-101.16,-705.27:99
-chr1 2618928 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=624;Dels=0.00;HRun=2;HaplotypeScore=323.04;MQ=29.42;MQ0=49;OQ=696.10;QD=1.12;SB=42.74 GT:AD:DP:GL:GQ 0/1:499,120:322:-169.90,-97.01,-976.27:99
-chr1 2618942 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=632;Dels=0.00;HRun=0;HaplotypeScore=427.92;MQ=29.57;MQ0=51;OQ=1430.20;QD=2.26;SB=-6.35 GT:AD:DP:GL:GQ 0/1:441,177:340:-255.05,-108.75,-1027.84:99
-chr1 2618944 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=660;Dels=0.01;HRun=1;HaplotypeScore=381.00;MQ=29.09;MQ0=58;OQ=94.18;QD=0.14;SB=-52.32 GT:AD:DP:GL:GQ 0/1:544,51:336:-209.60,-196.90,-1072.15:99
-chr1 2619010 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=979;Dels=0.00;HRun=0;HaplotypeScore=447.29;MQ=26.60;MQ0=70;OQ=796.25;QD=0.81;SB=-92.06 GT:AD:DP:GL:GQ 0/1:864,98:425:-220.34,-137.43,-1275.90:99
-chr1 2619053 rs28733941 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=909;Dels=0.00;HRun=0;HaplotypeScore=595.79;MQ=27.09;MQ0=60;OQ=13631.67;QD=15.00;SB=-2975.80 GT:AD:DP:GL:GQ 0/1:104,553:419:-1362.17,-600.80,-836.54:99
-chr1 2619065 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1083;Dels=0.00;HRun=0;HaplotypeScore=883.09;MQ=27.27;MQ0=55;OQ=741.35;QD=0.68;SB=-174.53 GT:AD:DP:GL:GQ 0/1:939,125:552:-281.40,-203.98,-1716.07:99
-chr1 2619068 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1124;Dels=0.00;HRun=1;HaplotypeScore=958.29;MQ=27.28;MQ0=55;OQ=693.79;QD=0.62;SB=-203.14 GT:AD:DP:GL:GQ 0/1:985,132:593:-257.34,-184.67,-1827.88:99
-chr1 2619088 rs28368434 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=1328;Dels=0.00;HRun=2;HaplotypeScore=334.46;MQ=28.00;MQ0=46;OQ=7035.59;QD=5.30;SB=-1628.81 GT:AD:DP:GL:GQ 0/1:1024,295:793:-702.56,-254.86,-2119.90:99
-chr1 2619105 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=1330;Dels=0.00;HRun=0;HaplotypeScore=932.09;MQ=28.23;MQ0=29;OQ=2367.59;QD=1.78;SB=-1159.72 GT:AD:DP:GL:GQ 0/1:991,151:799:-779.65,-539.60,-2921.50:99
-chr1 2619148 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=990;Dels=0.00;HRun=0;HaplotypeScore=340.48;MQ=27.70;MQ0=55;OQ=2332.09;QD=2.36;SB=-739.43 GT:AD:DP:GL:GQ 0/1:796,178:558:-439.22,-202.73,-1989.78:99
-chr1 2619186 . A C 371.93 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=419;Dels=0.00;HRun=2;HaplotypeScore=464.28;MQ=28.43;MQ0=32;QD=0.89;SB=-209.63 GT:AD:DP:GL:GQ 0/1:320,97:190:-97.71,-57.24,-585.62:99
-chr1 2619187 . A C 430.91 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=400;Dels=0.00;HRun=1;HaplotypeScore=324.16;MQ=28.26;MQ0=30;QD=1.08;SB=-112.57 GT:AD:DP:GL:GQ 0/1:310,88:169:-97.29,-50.91,-502.75:99
-chr1 2619196 rs61766477 C T 639.34 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=339;Dels=0.00;HRun=0;HaplotypeScore=406.21;MQ=29.84;MQ0=24;QD=1.89;SB=-240.09 GT:AD:DP:GL:GQ 0/1:283,37:141:-134.06,-66.84,-411.36:99
-chr1 2619205 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=257;Dels=0.00;HRun=0;HaplotypeScore=259.69;MQ=32.70;MQ0=16;OQ=1928.35;QD=7.50;SB=-426.10 GT:AD:DP:GL:GQ 0/1:80,173:106:-228.05,-31.94,-159.03:99
-chr1 2619218 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=235;Dels=0.00;HRun=1;HaplotypeScore=278.38;MQ=35.10;MQ0=10;OQ=372.83;QD=1.59;SB=-167.14 GT:AD:DP:GL:GQ 0/1:174,58:82:-65.27,-24.71,-216.22:99
-chr1 2619230 . G A 206.96 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=238;Dels=0.00;HRun=1;HaplotypeScore=422.57;MQ=34.96;MQ0=8;QD=0.87;SB=86.30 GT:AD:DP:GL:GQ 0/1:192,38:100:-59.43,-35.45,-312.61:99
-chr1 2619232 . T C 831.94 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=232;Dels=0.00;HRun=0;HaplotypeScore=355.75;MQ=35.18;MQ0=8;QD=3.59;SB=-351.57 GT:AD:DP:GL:GQ 0/1:163,64:87:-112.72,-26.24,-194.80:99
-chr1 2619238 . G T 230.19 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=214;Dels=0.00;HRun=0;HaplotypeScore=374.27;MQ=36.67;MQ0=6;QD=1.08;SB=104.29 GT:AD:DP:GL:GQ 0/1:105,106:92:-54.02,-27.71,-267.56:99
-chr1 2619244 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=201;Dels=0.00;HRun=0;HaplotypeScore=269.42;MQ=37.21;MQ0=7;OQ=1921.19;QD=9.56;SB=-479.90 GT:AD:DP:GL:GQ 0/1:57,142:93:-223.42,-28.02,-104.14:99
-chr1 2619306 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=2;HaplotypeScore=23.50;MQ=42.95;MQ0=2;OQ=983.37;QD=8.48;SB=-151.45 GT:AD:DP:GL:GQ 0/1:49,66:80:-128.94,-27.32,-178.83:99
-chr1 2619313 . T G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=14.58;MQ=45.37;MQ0=2;OQ=717.70;QD=7.40;SB=-61.81 GT:AD:DP:GL:GQ 0/1:47,50:71:-96.45,-21.40,-150.45:99
-chr1 2619324 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=29.83;MQ=44.91;MQ0=2;OQ=606.68;QD=6.74;SB=-59.89 GT:AD:DP:GL:GQ 0/1:45,45:58:-81.45,-17.50,-117.39:99
-chr1 2619346 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=198;Dels=0.01;HRun=2;HaplotypeScore=304.95;MQ=34.96;MQ0=2;OQ=1893.09;QD=9.56;SB=62.22 GT:AD:DP:GL:GQ 0/1:48,144:92:-224.02,-31.43,-163.64:99
-chr1 2619351 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=249;Dels=0.00;HRun=1;HaplotypeScore=417.56;MQ=32.10;MQ0=4;OQ=1347.04;QD=5.41;SB=71.23 GT:AD:DP:GL:GQ 0/1:80,143:111:-171.44,-33.46,-209.78:99
-chr1 2619360 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=388;Dels=0.00;HRun=1;HaplotypeScore=438.87;MQ=28.93;MQ0=6;OQ=112.12;QD=0.29;SB=98.35 GT:AD:DP:GL:GQ 0/1:301,77:156:-68.00,-53.51,-526.40:99
-chr1 2619395 rs61766478 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=748;Dels=0.00;HRun=0;HaplotypeScore=964.64;MQ=26.94;MQ0=26;OQ=5287.26;QD=7.07;SB=128.59 GT:AD:DP:GL:GQ 0/1:216,518:288:-527.73,-89.49,-471.13:99
-chr1 2619416 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=775;Dels=0.00;HRun=0;HaplotypeScore=727.49;MQ=27.55;MQ0=26;OQ=6889.43;QD=8.89;SB=178.09 GT:AD:DP:GL:GQ 0/1:249,511:342:-687.94,-103.01,-497.11:99
-chr1 2619432 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=738;Dels=0.01;HRun=0;HaplotypeScore=785.98;MQ=28.56;MQ0=15;OQ=287.49;QD=0.39;SB=162.31 GT:AD:DP:GL:GQ 0/1:586,116:299:-161.89,-129.86,-1001.87:99
-chr1 2619446 rs61766479 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=555;Dels=0.00;HRun=1;HaplotypeScore=580.47;MQ=30.08;MQ0=12;OQ=4833.38;QD=8.71;SB=183.30 GT:AD:DP:GL:GQ 0/1:214,317:283:-482.34,-118.04,-540.99:99
-chr1 2619465 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=306;Dels=0.02;HRun=1;HaplotypeScore=404.44;MQ=32.23;MQ0=6;OQ=129.50;QD=0.42;SB=102.00 GT:AD:DP:GL:GQ 0/1:203,74:120:-64.50,-48.27,-416.86:99
-chr1 2619467 rs61766480 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=303;Dels=0.02;HRun=1;HaplotypeScore=363.13;MQ=31.91;MQ0=6;OQ=4502.12;QD=14.86;SB=-1253.39 GT:AD:DP:GL:GQ 0/1:40,252:153:-449.21,-45.80,-111.82:99
-chr1 2619477 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=279;Dels=0.00;HRun=0;HaplotypeScore=335.87;MQ=32.02;MQ0=7;OQ=542.66;QD=1.95;SB=122.33 GT:AD:DP:GL:GQ 0/1:161,107:129:-96.42,-38.87,-351.57:99
-chr1 2619489 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=268;Dels=0.00;HRun=1;HaplotypeScore=215.67;MQ=32.52;MQ0=8;OQ=1128.11;QD=4.21;SB=95.32 GT:AD:DP:GL:GQ 0/1:114,145:131:-166.02,-49.92,-331.55:99
-chr1 2619505 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=271;Dels=0.00;HRun=0;HaplotypeScore=305.81;MQ=31.15;MQ0=10;OQ=135.21;QD=0.50;SB=68.22 GT:AD:DP:GL:GQ 0/1:237,31:129:-55.67,-38.86,-389.56:99
-chr1 2619511 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=262;Dels=0.00;HRun=0;HaplotypeScore=356.76;MQ=30.03;MQ0=11;OQ=250.01;QD=0.95;SB=47.18 GT:AD:DP:GL:GQ 0/1:212,49:118:-63.84,-35.55,-351.09:99
-chr1 2619524 rs34081960 A G 343.80 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.00;HRun=1;HaplotypeScore=217.57;MQ=30.42;MQ0=7;QD=1.59;SB=47.18 GT:AD:DP:GL:GQ 0/1:179,33:102:-68.39,-30.73,-325.69:99
-chr1 2619526 . C A 23.86 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=205;Dels=0.00;HRun=1;HaplotypeScore=236.96;MQ=30.18;MQ0=8;QD=0.12;SB=44.17 GT:AD:DP:GL:GQ 0/1:190,11:95:-34.28,-28.61,-300.58:56.68
-chr1 2619527 . A C 538.74 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=197;Dels=0.00;HRun=1;HaplotypeScore=224.55;MQ=30.05;MQ0=8;QD=2.73;SB=-87.11 GT:AD:DP:GL:GQ 0/1:122,73:87:-83.37,-26.21,-226.60:99
-chr1 2619530 . T G 866.27 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=215.21;MQ=31.06;MQ0=6;QD=4.84;SB=12.12 GT:AD:DP:GL:GQ 0/1:87,85:86:-126.63,-36.72,-179.70:99
-chr1 2619534 . A G 264.68 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=172;Dels=0.00;HRun=1;HaplotypeScore=280.66;MQ=30.98;MQ0=7;QD=1.54;SB=41.16 GT:AD:DP:GL:GQ 0/1:139,33:74:-52.04,-22.29,-233.98:99
-chr1 2619544 . C T 108.85 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=155;Dels=0.06;HRun=0;HaplotypeScore=267.97;MQ=31.40;MQ0=5;QD=0.70;SB=38.12 GT:AD:DP:GL:GQ 0/1:124,16:57:-34.75,-20.58,-177.62:99
-chr1 2619546 . C G 37.35 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=150;Dels=0.00;HRun=0;HaplotypeScore=251.96;MQ=31.91;MQ0=5;QD=0.25;SB=38.15 GT:AD:DP:GL:GQ 0/1:138,7:61:-25.40,-18.38,-245.36:70.19
-chr1 2619553 . A G 821.41 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=113.41;MQ=33.54;MQ0=5;QD=6.96;SB=23.10 GT:AD:DP:GL:GQ 0/1:33,83:56:-102.29,-16.87,-105.73:99
-chr1 2619570 rs12757527 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=61.91;MQ=39.68;MQ0=1;OQ=223.25;QD=2.51;SB=41.15 GT:AD:DP:GL:GQ 0/1:39,49:45:-39.17,-13.56,-132.69:99
-chr1 2619576 rs11516512 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=85.98;MQ=40.41;MQ0=1;OQ=1215.90;QD=15.59;SB=-537.94 GT:AD:DP:GL:GQ 0/1:9,69:47:-139.03,-14.16,-23.39:92.31
-chr1 2619644 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=167.24;MQ=38.77;MQ0=11;OQ=65.21;QD=0.53;SB=59.09 GT:AD:DP:GL:GQ 0/1:83,36:47:-23.99,-14.18,-125.75:98.05
-chr1 2619667 rs12757684 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=110;Dels=0.02;HRun=3;HaplotypeScore=150.20;MQ=38.48;MQ0=2;OQ=87.98;QD=0.80;SB=-4.94 GT:AD:DP:GL:GQ 0/1:62,46:39:-23.84,-11.75,-110.18:99
-chr1 2619672 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=2;HaplotypeScore=165.55;MQ=38.18;MQ0=2;OQ=67.69;QD=0.61;SB=56.21 GT:AD:DP:GL:GQ 0/1:58,23:45:-37.64,-27.58,-156.78:99
-chr1 2619717 rs35537872 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=158.55;MQ=37.91;MQ0=1;OQ=82.21;QD=0.81;SB=12.47 GT:AD:DP:GL:GQ 0/1:41,55:41:-23.87,-12.36,-127.50:99
-chr1 2619725 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=160.68;MQ=38.53;MQ0=0;OQ=110.57;QD=1.00;SB=59.22 GT:AD:DP:GL:GQ 0/1:96,15:49:-29.10,-14.76,-154.28:99
-chr1 2619755 rs35198281 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=135.67;MQ=40.63;MQ0=1;OQ=77.36;QD=0.78;SB=-26.15 GT:AD:DP:GL:GQ 0/1:44,49:41:-23.37,-12.36,-121.95:99
-chr1 2619802 . G A 11.69 LowQual AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=1;HaplotypeScore=127.16;MQ=33.63;MQ0=4;QD=0.12;SB=-22.48 GT:AD:DP:GL:GQ 0/1:79,20:38:-15.87,-11.45,-120.55:44.22
-chr1 2619811 rs11516513 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=94.34;MQ=31.96;MQ0=5;OQ=1057.97;QD=11.02;SB=-282.04 GT:AD:DP:GL:GQ 0/1:29,63:37:-120.23,-11.15,-15.87:47.21
-chr1 2619844 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=163.21;MQ=35.54;MQ0=9;OQ=150.26;QD=1.60;SB=-85.59 GT:AD:DP:GL:GQ 0/1:35,58:32:-27.96,-9.65,-83.83:99
-chr1 2619873 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=1;HaplotypeScore=84.94;MQ=33.03;MQ0=22;OQ=528.32;QD=3.80;SB=-259.93 GT:AD:DP:GL:GQ 0/1:45,94:55:-72.69,-16.57,-137.30:99
-chr1 2619885 rs4648686 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=143;Dels=0.00;HRun=0;HaplotypeScore=76.46;MQ=34.20;MQ0=29;OQ=72.77;QD=0.51;SB=-32.15 GT:AD:DP:GL:GQ 0/1:107,35:58:-28.03,-17.47,-178.69:99
-chr1 2619907 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=129;Dels=0.02;HRun=0;HaplotypeScore=75.23;MQ=35.05;MQ0=37;OQ=78.76;QD=0.61;SB=20.08 GT:AD:DP:GL:GQ 0/1:80,29:48:-28.88,-17.72,-148.42:99
-chr1 2619934 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=0;HaplotypeScore=66.32;MQ=35.85;MQ0=29;OQ=172.74;QD=1.52;SB=-28.24 GT:AD:DP:GL:GQ 0/1:48,66:48:-35.03,-14.47,-147.33:99
-chr1 2619955 rs6604996 C G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=63.40;MQ=33.93;MQ0=36;OQ=1440.37;QD=13.21;SB=-479.54 GT:AD:DP:GL:GQ 1/1:0,108:38:-147.67,-11.48,-0.04:99
-chr1 2620070 rs12740972 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=47.55;MQ=45.30;MQ0=8;OQ=554.48;QD=5.72;SB=-255.88 GT:AD:DP:GL:GQ 0/1:70,21:53:-74.72,-15.98,-142.31:99
-chr1 2620085 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=0;HaplotypeScore=54.16;MQ=39.71;MQ0=11;OQ=120.34;QD=1.02;SB=-33.16 GT:AD:DP:GL:GQ 0/1:69,45:56:-32.19,-16.87,-164.99:99
-chr1 2620124 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=144;Dels=0.00;HRun=0;HaplotypeScore=63.81;MQ=34.92;MQ0=3;OQ=525.60;QD=3.65;SB=47.19 GT:AD:DP:GL:GQ 0/1:42,93:57:-80.08,-24.23,-172.63:99
-chr1 2620133 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=151;Dels=0.00;HRun=1;HaplotypeScore=107.36;MQ=34.37;MQ0=3;OQ=432.59;QD=2.86;SB=-11.69 GT:AD:DP:GL:GQ 0/1:52,96:55:-63.12,-16.58,-172.84:99
-chr1 2620148 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=170;Dels=0.00;HRun=3;HaplotypeScore=138.11;MQ=33.81;MQ0=6;OQ=406.05;QD=2.39;SB=-68.70 GT:AD:DP:GL:GQ 0/1:52,113:57:-61.06,-17.17,-159.71:99
-chr1 2620167 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=206;Dels=0.00;HRun=1;HaplotypeScore=129.33;MQ=31.98;MQ0=15;OQ=238.76;QD=1.16;SB=-5.73 GT:AD:DP:GL:GQ 0/1:136,68:69:-47.94,-20.78,-212.90:99
-chr1 2620268 rs12741311 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=74.94;MQ=48.87;MQ0=0;OQ=615.93;QD=7.90;SB=-166.53 GT:AD:DP:GL:GQ 0/1:39,39:52:-80.54,-15.66,-101.64:99
-chr1 2620338 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=10.27;MQ=42.72;MQ0=7;OQ=159.57;QD=1.60;SB=-79.74 GT:AD:DP:GL:GQ 0/1:47,53:53:-35.21,-15.97,-154.39:99
-chr1 2620373 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=37.37;MQ=38.59;MQ0=9;OQ=479.31;QD=3.40;SB=-63.47 GT:AD:DP:GL:GQ 0/1:49,92:64:-70.51,-19.30,-148.48:99
-chr1 2620382 . G A 119.16 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=95.95;MQ=37.22;MQ0=9;QD=0.82;SB=68.14 GT:AD:DP:GL:GQ 0/1:86,59:65:-34.81,-19.61,-177.00:99
-chr1 2620388 . A C 105.30 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=153;Dels=0.00;HRun=1;HaplotypeScore=83.57;MQ=35.41;MQ0=9;QD=0.69;SB=-45.48 GT:AD:DP:GL:GQ 0/1:132,21:67:-34.00,-20.19,-204.42:99
-chr1 2620390 rs28376921 A C 238.82 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=152;Dels=0.00;HRun=3;HaplotypeScore=84.30;MQ=34.68;MQ0=9;QD=1.57;SB=-137.48 GT:AD:DP:GL:GQ 0/1:57,64:66:-69.75,-42.59,-188.12:99
-chr1 2620438 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=39.76;MQ=41.64;MQ0=7;OQ=388.27;QD=3.70;SB=-212.33 GT:AD:DP:GL:GQ 0/1:46,59:60:-60.19,-18.08,-149.44:99
-chr1 2620448 . T C 36.03 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=0;HaplotypeScore=55.60;MQ=44.75;MQ0=3;QD=0.36;SB=59.63 GT:AD:DP:GL:GQ 0/1:72,27:62:-25.58,-18.69,-209.22:68.86
-chr1 2620451 rs28507126 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=42.59;MQ=44.33;MQ0=4;OQ=207.39;QD=2.07;SB=-2.70 GT:AD:DP:GL:GQ 0/1:56,44:55:-40.61,-16.58,-162.04:99
-chr1 2620498 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=143;Dels=0.00;HRun=0;HaplotypeScore=117.30;MQ=35.77;MQ0=21;OQ=96.72;QD=0.68;SB=-10.89 GT:AD:DP:GL:GQ 0/1:119,24:63:-31.93,-18.98,-196.03:99
-chr1 2620509 . C A 44.02 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=155;Dels=0.00;HRun=1;HaplotypeScore=149.75;MQ=36.71;MQ0=19;QD=0.28;SB=8.48 GT:AD:DP:GL:GQ 0/1:122,32:70:-28.77,-21.09,-215.81:76.85
-chr1 2620530 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.01;HRun=0;HaplotypeScore=86.24;MQ=39.02;MQ0=10;OQ=202.63;QD=1.69;SB=-58.78 GT:AD:DP:GL:GQ 0/1:60,45:53:-46.29,-22.74,-131.05:99
-chr1 2620553 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=4;HaplotypeScore=12.66;MQ=42.96;MQ0=4;OQ=154.29;QD=1.66;SB=6.59 GT:AD:DP:GL:GQ 0/1:47,46:55:-35.28,-16.57,-164.62:99
-chr1 2620589 rs4648687 C A 0.07 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=19.10;MQ=49.13;MQ0=2;OQ=495.80;QD=9.01;SB=-265.29 GT:AD:DP:GL:GQ 0/1:36,19:38:-64.31,-11.45,-69.99:99
-chr1 2620786 rs12742092 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=51.45;MQ=48.85;MQ0=1;OQ=289.75;QD=5.57;SB=-99.04 GT:AD:DP:GL:GQ 0/1:36,16:30:-41.30,-9.04,-64.97:99
-chr1 2620835 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=99.62;MQ=36.59;MQ0=7;OQ=441.17;QD=4.64;SB=-224.20 GT:AD:DP:GL:GQ 0/1:74,18:36:-60.73,-13.33,-87.56:99
-chr1 2620875 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=107.69;MQ=35.97;MQ0=15;OQ=95.46;QD=0.71;SB=-26.90 GT:AD:DP:GL:GQ 0/1:113,19:59:-30.61,-17.78,-174.51:99
-chr1 2620960 . T A 14.94 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=17.98;MQ=48.66;MQ0=1;QD=0.38;SB=38.15 GT:AD:DP:GL:GQ 0/1:35,4:38:-16.21,-11.45,-119.38:47.63
-chr1 2621024 . C A 47.37 LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=15.73;MQ=45.56;MQ0=1;QD=1.18;SB=-9.87 GT:AD:DP:GL:GQ 0/1:33,7:35:-18.56,-10.54,-104.34:80.21
-chr1 2621154 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=51.59;MQ=53.22;MQ0=2;OQ=488.50;QD=9.77;SB=-206.66 GT:AD:DP:GL:GQ 0/1:29,19:38:-63.61,-11.47,-88.44:99
-chr1 2621346 rs12746691 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=78.63;MQ=48.13;MQ0=0;OQ=876.62;QD=14.61;SB=-440.96 GT:AD:DP:GL:GQ 0/1:34,26:44:-104.20,-13.26,-62.31:99
-chr1 2621414 rs12746841 C G 50.04 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=5.31;MQ=55.95;MQ0=0;OQ=526.83;QD=11.97;SB=-219.19 GT:AD:DP:GL:GQ 0/1:24,20:36:-66.82,-10.85,-82.62:99
-chr1 2621575 rs61766505 T A 0.76 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=9.78;MQ=51.58;MQ0=2;OQ=514.79;QD=12.26;SB=-105.13 GT:AD:DP:GL:GQ 0/1:24,18:33:-64.70,-9.94,-57.89:99
-chr1 2621592 rs11516514 C A 2.97 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=7.05;MQ=51.18;MQ0=2;OQ=412.67;QD=8.78;SB=-93.77 GT:AD:DP:GL:GQ 0/1:31,16:35:-55.10,-10.55,-68.38:99
-chr1 2621664 rs12743419 G A 126.86 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=54.07;MQ0=3;OQ=805.45;QD=17.14;SB=-279.82 GT:AD:DP:GL:GQ 0/1:16,31:40:-95.89,-12.06,-46.66:99
-chr1 2621957 rs12751643 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.02;HRun=1;HaplotypeScore=33.34;MQ=53.32;MQ0=0;OQ=1019.18;QD=17.27;SB=-299.66 GT:AD:DP:GL:GQ 0/1:24,34:54:-121.47,-16.27,-70.01:99
-chr1 2622417 . C G 34.36 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=22.88;MQ0=7;QD=1.01;SB=-10.00 GT:AD:DP:GL:GQ 0/1:28,6:20:-12.75,-6.03,-74.77:67.20
-chr1 2622422 rs11488613 G T 0.62 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=6.76;MQ=21.77;MQ0=7;OQ=525.32;QD=15.45;SB=-10.00 GT:AD:DP:GL:GQ 1/1:3,31:16:-56.12,-4.82,-0.00:48.14
-chr1 2622433 rs12752340 C A 26.89 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=20.67;MQ0=10;QD=0.75;SB=-10.00 GT:AD:DP:GL:GQ 0/1:30,6:16:-10.79,-4.82,-42.41:59.72
-chr1 2674088 . C G 42.96 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=0;HaplotypeScore=11.98;MQ=19.55;MQ0=6;QD=3.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:8,3:5:-9.09,-1.51,-12.64:75.79
-chr1 2674094 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=17.86;MQ=18.47;MQ0=6;OQ=64.31;QD=4.95;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,3:4:-10.92,-1.20,-3.26:20.53
-chr1 2674111 . T A 27.07 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=32.32;MQ0=6;QD=1.80;SB=-6.99 GT:AD:DP:GL:GQ 0/1:12,3:7:-8.10,-2.11,-18.86:59.90
-chr1 2674112 . A G 16.12 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=32.32;MQ0=6;QD=1.07;SB=-6.99 GT:AD:DP:GL:GQ 0/1:12,3:7:-6.99,-2.11,-20.42:48.85
-chr1 2674407 . A G 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=13.44;MQ=45.39;MQ0=5;OQ=445.12;QD=11.41;SB=-215.68 GT:AD:DP:GL:GQ 0/1:16,22:32:-57.44,-9.65,-56.21:99
-chr1 2674852 rs61766513 G A 450.01 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=13.17;MQ0=18;OQ=519.69;QD=10.39;SB=-286.88 GT:AD:DP:GL:GQ 1/1:0,50:14:-55.56,-4.22,-0.00:42.14
-chr1 2676124 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=1;HaplotypeScore=15.64;MQ=24.04;MQ0=14;OQ=178.81;QD=2.03;SB=-90.56 GT:AD:DP:GL:GQ 0/1:59,29:40:-33.21,-12.05,-114.97:99
-chr1 2676150 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=19.23;MQ=23.09;MQ0=22;OQ=221.70;QD=2.33;SB=-83.88 GT:AD:DP:GL:GQ 0/1:54,41:38:-36.91,-11.46,-90.41:99
-chr1 2676190 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=39.71;MQ=18.24;MQ0=31;OQ=65.56;QD=0.85;SB=-25.50 GT:AD:DP:GL:GQ 0/1:64,13:22:-16.48,-6.63,-57.54:98.40
-chr1 2676191 . G A 29.02 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=39.71;MQ=17.81;MQ0=31;QD=0.39;SB=26.10 GT:AD:DP:GL:GQ 0/1:60,14:18:-11.61,-5.43,-50.51:61.85
-chr1 2676208 . G A 16.39 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.26;MQ=15.36;MQ0=32;QD=0.30;SB=-24.49 GT:AD:DP:GL:GQ 0/1:43,10:12:-8.53,-3.62,-33.94:49.13
-chr1 2676293 rs11486072 G T 42.12 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=21.44;MQ0=18;QD=0.68;SB=83.26 GT:AD:DP:GL:GQ 0/1:53,9:41:-19.85,-12.35,-121.85:74.96
-chr1 2676409 . C G 16.08 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=24.91;MQ=14.80;MQ0=58;QD=0.16;SB=-10.00 GT:AD:DP:GL:GQ 0/1:83,17:12:-8.50,-3.62,-44.92:48.81
-chr1 2677515 . G T 19.05 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=14.46;MQ=8.37;MQ0=110;QD=0.16;SB=-10.00 GT:AD:DP:GL:GQ 0/1:117,3:8:-7.59,-2.41,-19.90:51.83
-chr1 2677525 . C T 16.29 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=1;HaplotypeScore=20.34;MQ=9.26;MQ0=102;QD=0.14;SB=-10.00 GT:AD:DP:GL:GQ 0/1:110,4:10:-7.91,-3.01,-27.95:49.02
-chr1 2677552 . A T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=0;HaplotypeScore=12.35;MQ=15.52;MQ0=82;OQ=53.71;QD=0.48;SB=0.32 GT:AD:DP:GL:GQ 0/1:89,18:28:-23.83,-15.18,-91.71:86.54
-chr1 2677675 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=104;Dels=0.00;HRun=0;HaplotypeScore=15.33;MQ=33.22;MQ0=25;OQ=57.19;QD=0.55;SB=35.14 GT:AD:DP:GL:GQ 0/1:87,15:66:-28.89,-19.89,-231.82:90.03
-chr1 2677743 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=0;HaplotypeScore=4.26;MQ=19.03;MQ0=67;OQ=90.19;QD=0.78;SB=-10.00 GT:AD:DP:GL:GQ 0/1:98,17:39:-24.05,-11.75,-110.96:99
-chr1 2677829 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=23.79;MQ=23.13;MQ0=70;OQ=279.18;QD=2.18;SB=-0.99 GT:AD:DP:GL:GQ 0/1:107,21:47:-45.38,-14.18,-109.88:99
-chr1 2677890 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=0;HaplotypeScore=41.46;MQ=39.72;MQ0=24;OQ=334.00;QD=2.24;SB=-111.40 GT:AD:DP:GL:GQ 0/1:125,24:98:-66.21,-29.53,-281.36:99
-chr1 2677918 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=22.75;MQ=42.78;MQ0=7;OQ=406.29;QD=3.01;SB=-222.57 GT:AD:DP:GL:GQ 0/1:111,24:99:-73.74,-29.83,-281.76:99
-chr1 2678023 rs4601526 G T 43.97 LowQual AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=8.77;MQ=39.66;MQ0=3;QD=0.46;SB=-45.56 GT:AD:DP:GL:GQ 0/1:69,27:71:-29.07,-21.39,-211.74:76.81
-chr1 2678153 rs4287119 C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=112;Dels=0.00;HRun=0;HaplotypeScore=21.76;MQ=40.92;MQ0=5;OQ=2547.58;QD=22.75;SB=-1076.65 GT:AD:DP:GL:GQ 0/1:21,91:87:-284.26,-26.22,-47.57:99
-chr1 2679458 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=42.73;MQ=34.12;MQ0=11;OQ=188.41;QD=2.36;SB=-47.79 GT:AD:DP:GL:GQ 0/1:51,29:31:-31.49,-9.36,-91.42:99
-chr1 2679642 . C G 45.83 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=7.58;MQ=33.48;MQ0=11;QD=0.45;SB=71.27 GT:AD:DP:GL:GQ 0/1:93,9:79:-31.68,-23.81,-299.21:78.67
-chr1 2679803 rs56221638 T A 49.73 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=28.41;MQ=20.22;MQ0=17;QD=0.80;SB=-24.63 GT:AD:DP:GL:GQ 0/1:36,25:21:-14.59,-6.33,-59.48:82.57
-chr1 2679816 rs4648571 G A 0.30 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=13.76;MQ=19.63;MQ0=17;OQ=484.56;QD=8.35;SB=18.94 GT:AD:DP:GL:GQ 1/1:9,49:16:-54.94,-4.82,-2.91:19.19
-chr1 2680538 rs58288263 C A 0.59 PASS AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=19.45;MQ0=42;OQ=235.18;QD=2.28;SB=-135.60 GT:AD:DP:GL:GQ 0/1:70,33:45:-40.37,-13.56,-115.16:99
-chr1 2681143 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=43.31;MQ=7.59;MQ0=129;OQ=216.62;QD=1.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:128,12:8:-27.36,-2.41,-6.90:44.81
-chr1 2681205 . C T 16.27 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=0;HaplotypeScore=11.46;MQ=9.18;MQ0=122;QD=0.12;SB=-10.00 GT:AD:DP:GL:GQ 0/1:130,4:11:-8.21,-3.31,-32.22:49.01
-chr1 2681386 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=85;Dels=0.02;HRun=1;HaplotypeScore=17.33;MQ=40.82;MQ0=2;OQ=547.52;QD=6.44;SB=26.11 GT:AD:DP:GL:GQ 0/1:58,25:71:-78.82,-20.79,-186.55:99
-chr1 2681420 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=13.55;MQ=31.27;MQ0=32;OQ=249.95;QD=2.34;SB=17.08 GT:AD:DP:GL:GQ 0/1:90,15:70:-49.36,-21.09,-234.22:99
-chr1 2681440 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=118;Dels=0.00;HRun=2;HaplotypeScore=12.17;MQ=28.00;MQ0=51;OQ=57.67;QD=0.49;SB=-0.98 GT:AD:DP:GL:GQ 0/1:103,11:57:-26.23,-17.18,-176.09:90.51
-chr1 2681463 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=112;Dels=0.00;HRun=0;HaplotypeScore=17.45;MQ=24.10;MQ0=61;OQ=86.42;QD=0.77;SB=-10.00 GT:AD:DP:GL:GQ 0/1:104,8:47:-26.08,-14.16,-135.23:99
-chr1 2681473 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=11.36;MQ=22.15;MQ0=63;OQ=86.11;QD=0.79;SB=-10.00 GT:AD:DP:GL:GQ 0/1:101,7:42:-24.54,-12.65,-127.26:99
-chr1 2681679 rs61766519 A T 2.14 PASS AC=1;AF=0.50;AN=2;DB;DP=109;Dels=0.00;HRun=0;HaplotypeScore=3.86;MQ=46.07;MQ0=2;OQ=403.94;QD=3.71;SB=-208.28 GT:AD:DP:GL:GQ 0/1:86,23:102:-74.40,-30.73,-305.98:99
-chr1 2681697 . C G 10.09 PASS AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=45.11;MQ0=2;OQ=843.38;QD=7.21;SB=-230.77 GT:AD:DP:GL:GQ 0/1:84,33:113:-121.68,-34.06,-367.48:99
-chr1 2681715 rs4430271 G A 32.27 PASS AC=2;AF=1.00;AN=2;DB;DP=112;Dels=0.00;HRun=1;HaplotypeScore=3.54;MQ=44.60;MQ0=4;OQ=4104.48;QD=36.65;SB=-1313.32 GT:AD:DP:GL:GQ 1/1:1,111:104:-409.45,-31.34,-0.04:99
-chr1 2681869 . T C 23.42 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=42.88;MQ0=2;QD=0.35;SB=71.26 GT:AD:DP:GL:GQ 0/1:51,15:54:-21.90,-16.27,-186.51:56.24
-chr1 2681986 rs11586212 G A 7.71 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.27;MQ=47.82;MQ0=3;OQ=510.08;QD=6.80;SB=56.19 GT:AD:DP:GL:GQ 0/1:53,22:70:-75.38,-21.09,-180.91:99
-chr1 2682337 . G A 7.34 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=27.22;MQ0=23;OQ=345.10;QD=8.03;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,23:16:-42.61,-4.82,-16.65:99
-chr1 2682347 . G T 0.70 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=19.93;MQ0=26;OQ=183.77;QD=4.59;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,20:10:-24.67,-3.01,-11.27:82.62
-chr1 2682645 . C A 19.07 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.93;MQ=11.47;MQ0=37;QD=0.33;SB=-0.98 GT:AD:DP:GL:GQ 0/1:31,27:8:-7.60,-2.41,-19.17:51.85
-chr1 2683816 rs10909957 C T 271.77 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.42;MQ=46.26;MQ0=0;OQ=686.46;QD=13.46;SB=-268.23 GT:AD:DP:GL:GQ 0/1:24,27:45:-85.49,-13.56,-81.02:99
-chr1 2684356 rs6424062 G A 144.95 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.15;MQ0=0;OQ=655.97;QD=13.39;SB=-112.11 GT:AD:DP:GL:GQ 0/1:26,23:46:-82.76,-13.88,-73.01:99
-chr1 2687573 rs4648459 G T 323.17 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=991.84;QD=18.37;SB=-411.82 GT:AD:DP:GL:GQ 0/1:20,34:49:-117.23,-14.76,-57.58:99
-chr1 2689509 rs4648499 A C 571.48 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=812.32;QD=13.32;SB=-346.80 GT:AD:DP:GL:GQ 0/1:31,30:60:-102.59,-18.07,-113.17:99
-chr1 2689977 rs4648502 C G 37.31 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=4.68;MQ=58.83;MQ0=0;OQ=362.80;QD=11.34;SB=-98.64 GT:AD:DP:GL:GQ 0/1:15,17:26:-47.41,-7.85,-58.24:99
-chr1 2691287 rs10909982 A C 5.74 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=1.88;MQ=58.74;MQ0=0;OQ=1314.76;QD=31.30;SB=-536.04 GT:AD:DP:GL:GQ 1/1:0,42:39:-135.08,-11.75,-0.02:99
-chr1 2691405 . T C 26.51 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.83;MQ=54.55;MQ0=0;QD=0.72;SB=1.18 GT:AD:DP:GL:GQ 0/1:31,6:36:-16.78,-10.85,-121.87:59.34
-chr1 2691676 rs1456462 C G 51.18 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=56.36;MQ0=0;OQ=806.36;QD=17.53;SB=-304.60 GT:AD:DP:GL:GQ 0/1:21,25:41:-96.28,-12.36,-77.64:99
-chr1 2694331 rs12748553 C T 3.51 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=8.78;MQ=58.48;MQ0=0;OQ=835.97;QD=17.06;SB=-250.13 GT:AD:DP:GL:GQ 0/1:21,26:46:-100.74,-13.86,-71.99:99
-chr1 2694778 rs55972083 G T 162.91 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.66;MQ0=0;OQ=915.47;QD=16.64;SB=-316.68 GT:AD:DP:GL:GQ 0/1:25,30:54:-111.10,-16.27,-82.95:99
-chr1 2697298 rs7526311 A T 117.22 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.01;MQ0=0;OQ=185.29;QD=9.75;SB=-41.37 GT:AD:DP:GL:GQ 0/1:12,7:18:-27.23,-5.42,-39.59:99
-chr1 2697760 . G T 0.81 PASS AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=344.69;QD=12.77;SB=-29.36 GT:AD:DP:GL:GQ 0/1:13,14:25:-45.29,-7.54,-35.79:99
-chr1 2697817 rs57572926 T A 7.58 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.48;MQ0=0;OQ=773.03;QD=21.47;SB=-134.51 GT:AD:DP:GL:GQ 0/1:11,25:35:-91.13,-10.54,-41.10:99
-chr1 2699252 rs12044475 G A 223.02 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.73;MQ0=0;OQ=1184.05;QD=17.41;SB=-586.14 GT:AD:DP:GL:GQ 0/1:32,36:66:-141.59,-19.90,-99.06:99
-chr1 2699436 rs12024170 C T 193.04 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.75;MQ0=0;OQ=1445.81;QD=19.54;SB=-655.75 GT:AD:DP:GL:GQ 0/1:31,43:72:-169.56,-21.69,-100.95:99
-chr1 2699862 rs6687680 G A 230.47 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.28;MQ0=0;OQ=1732.28;QD=19.25;SB=-761.79 GT:AD:DP:GL:GQ 0/1:40,50:89:-203.33,-26.82,-125.78:99
-chr1 2700237 . G A 246.23 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1343.35;QD=18.92;SB=-523.75 GT:AD:DP:GL:GQ 0/1:31,40:71:-159.02,-21.40,-102.65:99
-chr1 2702030 rs12731995 A G 434.35 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=677.81;QD=11.11;SB=-347.04 GT:AD:DP:GL:GQ 0/1:33,28:60:-89.15,-18.08,-132.37:99
-chr1 2703187 rs2377041 C T 502.97 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=621.61;QD=15.54;SB=-277.29 GT:AD:DP:GL:GQ 0/1:21,19:39:-77.20,-11.76,-63.03:99
-chr1 2704632 . T C 38.02 LowQual AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=4;HaplotypeScore=7.59;MQ=52.48;MQ0=0;QD=2.38;SB=-19.89 GT:AD:DP:GL:GQ 0/1:10,6:12:-10.71,-3.62,-29.51:70.86
-chr1 2704685 . G A 22.35 LowQual AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=7.62;MQ=56.04;MQ0=0;QD=1.86;SB=-34.51 GT:AD:DP:GL:GQ 0/1:9,2:7:-7.63,-2.11,-16.67:55.16
-chr1 2704950 . A G 2.25 PASS AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=48.87;MQ0=0;OQ=588.34;QD=32.69;SB=-143.72 GT:AD:DP:GL:GQ 1/1:0,18:17:-62.42,-5.12,-0.01:51.15
-chr1 2705371 . T C 47.74 LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=3.65;MQ=60.80;MQ0=0;QD=2.51;SB=-6.99 GT:AD:DP:GL:GQ 0/1:12,6:14:-12.28,-4.22,-38.37:80.58
-chr1 2705380 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=2;HaplotypeScore=2.68;MQ=59.93;MQ0=0;OQ=62.82;QD=3.31;SB=-3.98 GT:AD:DP:GL:GQ 0/1:14,5:17:-14.69,-5.13,-40.99:95.66
-chr1 2706146 . A G 47.67 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=5;HaplotypeScore=3.46;MQ=57.94;MQ0=0;QD=1.40;SB=47.18 GT:AD:DP:GL:GQ 0/1:26,7:27:-16.19,-8.14,-86.26:80.50
-chr1 2706767 rs751358 G C 35.53 PASS AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=240.08;QD=16.01;SB=-112.68 GT:AD:DP:GL:GQ 0/1:7,8:15:-31.82,-4.53,-27.47:99
-chr1 2708350 rs897627 T C 68.67 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.23;MQ0=0;OQ=241.23;QD=8.04;SB=-88.78 GT:AD:DP:GL:GQ 0/1:18,12:26:-35.25,-7.84,-56.33:99
-chr1 2709162 rs897626 T C 124.16 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=58.50;MQ0=0;OQ=297.67;QD=9.60;SB=-169.49 GT:AD:DP:GL:GQ 0/1:13,16:23:-39.99,-6.94,-39.26:99
-chr1 2709764 rs12725202 C A 209.03 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=59.58;MQ0=0;OQ=806.35;QD=14.66;SB=-275.34 GT:AD:DP:GL:GQ 0/1:27,28:48:-98.38,-14.47,-61.56:99
-chr1 2711436 rs897623 A G 190.36 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=58.98;MQ0=0;OQ=627.29;QD=15.30;SB=-199.45 GT:AD:DP:GL:GQ 0/1:15,26:39:-77.77,-11.76,-60.17:99
-chr1 2712708 rs6692145 C T 11.73 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=7.75;MQ=59.11;MQ0=0;OQ=873.72;QD=16.80;SB=-440.44 GT:AD:DP:GL:GQ 0/1:21,31:48:-105.13,-14.48,-65.51:99
-chr1 2713074 rs4648450 C A 220.10 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=59.19;MQ0=0;OQ=931.32;QD=16.34;SB=-352.41 GT:AD:DP:GL:GQ 0/1:24,33:49:-111.18,-14.76,-58.95:99
-chr1 2713205 rs4648360 C T 362.23 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.64;MQ0=0;OQ=808.14;QD=12.63;SB=-348.52 GT:AD:DP:GL:GQ 0/1:38,26:64:-103.39,-19.29,-126.27:99
-chr1 2713822 rs11588256 T C 179.59 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.44;MQ0=0;OQ=1164.73;QD=28.41;SB=-522.80 GT:AD:DP:GL:GQ 1/1:0,40:39:-122.64,-14.15,-2.58:99
-chr1 2715335 rs7537581 C A 258.05 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.30;MQ0=0;OQ=476.92;QD=14.45;SB=-256.43 GT:AD:DP:GL:GQ 0/1:16,17:32:-60.62,-9.64,-51.47:99
-chr1 2715367 rs56038961 C T 199.13 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.45;MQ0=0;OQ=479.64;QD=15.99;SB=-264.20 GT:AD:DP:GL:GQ 0/1:12,18:27:-59.39,-8.14,-35.88:99
-chr1 2716724 rs17387572 C G 92.23 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=2.10;MQ=58.95;MQ0=0;OQ=183.11;QD=8.32;SB=-57.73 GT:AD:DP:GL:GQ 0/1:14,8:19:-27.33,-5.74,-48.15:99
-chr1 2717498 rs10909879 G A 568.71 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=638.90;QD=14.20;SB=-321.91 GT:AD:DP:GL:GQ 0/1:24,21:43:-80.13,-12.96,-77.89:99
-chr1 2717664 rs10909880 C T 111.56 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.85;MQ=58.20;MQ0=0;OQ=901.98;QD=16.40;SB=-412.72 GT:AD:DP:GL:GQ 0/1:27,27:53:-109.45,-15.96,-95.84:99
-chr1 2718581 rs2290583 C T 466.48 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.90;MQ0=0;OQ=858.25;QD=15.60;SB=-364.54 GT:AD:DP:GL:GQ 0/1:27,28:51:-104.48,-15.37,-82.61:99
-chr1 2720957 rs56242447 T C 191.02 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=60.00;MQ0=0;OQ=720.09;QD=11.43;SB=-266.23 GT:AD:DP:GL:GQ 0/1:29,34:60:-93.39,-18.10,-112.64:99
-chr1 2725957 rs4648454 C A 155.77 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.23;MQ0=0;OQ=2137.84;QD=35.63;SB=-968.57 GT:AD:DP:GL:GQ 1/1:0,60:60:-217.39,-18.07,-0.02:99
-chr1 2727346 rs4515734 C T 401.62 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=1193.72;QD=37.30;SB=-333.34 GT:AD:DP:GL:GQ 1/1:0,32:32:-122.97,-9.64,-0.01:96.30
-chr1 2728125 rs11584658 C T 220.84 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=58.92;MQ0=0;OQ=363.72;QD=9.33;SB=-203.89 GT:AD:DP:GL:GQ 0/1:25,14:38:-51.11,-11.46,-81.85:99
-chr1 2728509 . C G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=7.07;MQ=57.48;MQ0=0;OQ=153.44;QD=5.48;SB=38.15 GT:AD:DP:GL:GQ 0/1:17,11:22:-25.28,-6.65,-60.78:99
-chr1 2728983 rs12025517 T C 254.56 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.46;MQ0=0;OQ=692.09;QD=16.10;SB=-320.61 GT:AD:DP:GL:GQ 0/1:17,25:42:-87.78,-15.29,-69.40:99
-chr1 2731560 rs897622 T C 5.62 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.40;MQ=59.38;MQ0=0;OQ=1158.40;QD=31.31;SB=-281.53 GT:AD:DP:GL:GQ 1/1:0,37:35:-119.44,-10.55,-0.02:99
-chr1 2734276 rs56400103 G A 253.28 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=949.71;QD=17.92;SB=-409.46 GT:AD:DP:GL:GQ 0/1:24,29:51:-113.64,-15.38,-67.18:99
-chr1 2734570 rs12747919 T C 241.01 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.34;MQ0=0;OQ=778.48;QD=12.36;SB=-342.05 GT:AD:DP:GL:GQ 0/1:32,31:63:-100.12,-18.99,-128.39:99
-chr1 2734737 rs12125787 G A 71.93 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.70;MQ=57.83;MQ0=0;OQ=2028.15;QD=37.56;SB=-957.98 GT:AD:DP:GL:GQ 1/1:0,54:53:-206.42,-15.97,-0.02:99
-chr1 2735743 rs4609377 C T 266.10 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=58.76;MQ0=0;OQ=803.58;QD=14.35;SB=-286.83 GT:AD:DP:GL:GQ 0/1:31,25:54:-99.92,-16.28,-93.51:99
-chr1 2735926 rs1001620 G C 451.59 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.61;MQ0=0;OQ=977.15;QD=12.69;SB=-354.56 GT:AD:DP:GL:GQ 0/1:46,31:77:-124.21,-23.21,-202.34:99
-chr1 2739474 rs10797389 G A 308.93 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=60.00;MQ0=0;OQ=750.99;QD=15.65;SB=-309.79 GT:AD:DP:GL:GQ 0/1:23,25:47:-92.55,-14.16,-81.12:99
-chr1 2739576 rs4648481 G T 368.63 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=60.00;MQ0=0;OQ=793.99;QD=14.70;SB=-305.02 GT:AD:DP:GL:GQ 0/1:26,28:52:-98.35,-15.67,-82.42:99
-chr1 2739781 rs4648482 T C 14.80 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=4.29;MQ=58.44;MQ0=0;OQ=365.14;QD=8.69;SB=-69.92 GT:AD:DP:GL:GQ 0/1:24,18:40:-51.86,-12.06,-91.45:99
-chr1 2740297 rs1563471 C T 85.39 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=5.94;MQ=59.22;MQ0=0;OQ=682.02;QD=11.56;SB=-286.79 GT:AD:DP:GL:GQ 0/1:33,26:55:-88.08,-16.60,-99.20:99
-chr1 2740756 rs12132067 G A 288.53 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.87;MQ=59.52;MQ0=0;OQ=623.21;QD=12.98;SB=-250.12 GT:AD:DP:GL:GQ 0/1:27,21:48:-80.07,-14.46,-95.69:99
-chr1 2742125 rs7511879 A G 408.25 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.68;MQ0=0;OQ=942.16;QD=16.24;SB=-438.99 GT:AD:DP:GL:GQ 0/1:24,34:55:-114.07,-16.57,-91.14:99
-chr1 2742553 rs10797390 C T 146.24 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.59;MQ0=0;OQ=1057.36;QD=18.88;SB=-301.83 GT:AD:DP:GL:GQ 0/1:24,32:56:-125.89,-16.87,-83.67:99
-chr1 2743097 rs12031493 A G 99.82 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=5.23;MQ=59.34;MQ0=0;OQ=647.93;QD=9.26;SB=-314.90 GT:AD:DP:GL:GQ 0/1:40,29:67:-88.27,-20.19,-156.45:99
-chr1 2743232 rs11803074 T C 136.13 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.52;MQ0=0;OQ=450.58;QD=9.39;SB=-159.47 GT:AD:DP:GL:GQ 0/1:26,22:43:-61.31,-12.96,-94.61:99
-chr1 2743923 rs2377040 G A 85.94 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.57;MQ0=0;OQ=1679.85;QD=39.07;SB=-699.34 GT:AD:DP:GL:GQ 1/1:0,43:43:-171.58,-12.96,-0.02:99
-chr1 2744048 rs6691019 A G 253.73 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=599.61;QD=12.24;SB=-315.28 GT:AD:DP:GL:GQ 0/1:24,25:46:-77.11,-13.87,-86.95:99
-chr1 2744266 rs729045 A G 494.21 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=550.14;QD=10.19;SB=-251.93 GT:AD:DP:GL:GQ 0/1:30,24:53:-74.27,-15.97,-120.98:99
-chr1 2744372 rs6680471 C T 188.10 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=58.81;MQ0=0;OQ=743.73;QD=13.52;SB=-388.16 GT:AD:DP:GL:GQ 0/1:30,25:50:-92.73,-15.07,-87.39:99
-chr1 2744840 rs7541827 T G 3.84 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=3.30;MQ=53.60;MQ0=0;OQ=317.87;QD=7.95;SB=-163.88 GT:AD:DP:GL:GQ 0/1:27,13:38:-46.52,-11.45,-85.79:99
-chr1 2745157 rs10909938 C G 278.22 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.10;MQ0=0;OQ=946.24;QD=11.98;SB=-426.32 GT:AD:DP:GL:GQ 0/1:47,32:78:-121.44,-23.53,-202.08:99
-chr1 2745633 rs10909941 A G 382.13 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.59;MQ0=0;OQ=1890.77;QD=33.76;SB=-793.15 GT:AD:DP:GL:GQ 1/1:0,56:54:-192.68,-16.26,-0.02:99
-chr1 2746148 rs4648382 C T 75.36 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=4.95;MQ=58.25;MQ0=0;OQ=1103.18;QD=17.24;SB=-437.97 GT:AD:DP:GL:GQ 0/1:30,34:62:-132.29,-18.69,-91.91:99
-chr1 2746257 rs4648383 C T 112.72 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.45;MQ0=0;OQ=1198.75;QD=17.63;SB=-573.37 GT:AD:DP:GL:GQ 0/1:33,35:67:-143.34,-20.18,-115.97:99
-chr1 2746481 rs4648384 C A 147.70 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=2.23;MQ=58.55;MQ0=0;OQ=974.97;QD=15.98;SB=-482.87 GT:AD:DP:GL:GQ 0/1:29,32:59:-118.55,-17.77,-93.40:99
-chr1 2746667 rs7516014 G T 183 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=60.00;MQ0=0;OQ=529.64;QD=10.81;SB=-238.43 GT:AD:DP:GL:GQ 0/1:28,20:47:-70.41,-14.16,-95.06:99
-chr1 2746749 rs7548023 T G 93.22 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=3.08;MQ=57.92;MQ0=0;OQ=762.24;QD=14.12;SB=-346.84 GT:AD:DP:GL:GQ 0/1:27,27:54:-95.77,-16.26,-99.72:99
-chr1 2747056 rs4648495 T C 0.66 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=4;HaplotypeScore=4.04;MQ=53.57;MQ0=0;OQ=334.06;QD=9.83;SB=-158.61 GT:AD:DP:GL:GQ 0/1:15,19:25:-44.23,-7.54,-43.47:99
-chr1 2747271 rs4648496 A T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=20.04;MQ=49.89;MQ0=0;OQ=70.38;QD=0.95;SB=-47.55 GT:AD:DP:GL:GQ 0/1:64,10:68:-30.81,-20.49,-219.78:99
-chr1 2747291 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=65;Dels=0.03;HRun=0;HaplotypeScore=32.13;MQ=46.89;MQ0=0;OQ=444.72;QD=6.84;SB=-168.12 GT:AD:DP:GL:GQ 0/1:44,19:62:-65.84,-18.08,-149.47:99
-chr1 2747315 . A T 0.07 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=12.70;MQ=47.25;MQ0=0;OQ=757.92;QD=13.53;SB=-390.15 GT:AD:DP:GL:GQ 0/1:29,27:49:-93.84,-14.77,-85.21:99
-chr1 2747334 rs36040910 C G 1014.60 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.02;HRun=0;HaplotypeScore=10.13;MQ=46.42;MQ0=0;QD=19.14;SB=-531.73 GT:AD:DP:GL:GQ 0/1:24,28:52:-120.42,-15.67,-100.79:99
-chr1 2747338 . G C 826.30 SnpCluster AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=9.97;MQ=47.26;MQ0=0;QD=17.21;SB=-358.43 GT:AD:DP:GL:GQ 0/1:23,24:47:-99.78,-13.86,-101.33:99
-chr1 2747339 . A T 752.39 SnpCluster AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=3.00;MQ=47.26;MQ0=0;QD=15.67;SB=-313.68 GT:AD:DP:GL:GQ 0/1:23,24:47:-92.38,-13.86,-82.64:99
-chr1 2747369 . A T 3.22 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=49.16;MQ0=0;OQ=703.99;QD=14.37;SB=-261.27 GT:AD:DP:GL:GQ 0/1:25,24:47:-87.84,-14.16,-92.00:99
-chr1 2747375 rs61766530 T A 10.44 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=7.95;MQ=48.99;MQ0=0;OQ=615.25;QD=13.37;SB=-274.62 GT:AD:DP:GL:GQ 0/1:24,22:43:-77.76,-12.95,-81.15:99
-chr1 2747387 rs34464542 A T 0.10 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.05;HRun=0;HaplotypeScore=17.99;MQ=50.33;MQ0=0;OQ=475.32;QD=10.80;SB=-181.51 GT:AD:DP:GL:GQ 0/1:25,17:43:-63.16,-12.35,-94.24:99
-chr1 2747397 rs12739189 C T 56.98 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=5.47;MQ=51.77;MQ0=0;OQ=606.36;QD=14.44;SB=-321.86 GT:AD:DP:GL:GQ 0/1:23,19:42:-76.58,-12.66,-74.78:99
-chr1 2747562 rs35401657 A G 338.79 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=54.94;MQ0=0;OQ=916.49;QD=12.73;SB=-443.41 GT:AD:DP:GL:GQ 0/1:37,34:70:-119.52,-24.59,-154.08:99
-chr1 2747592 rs34262355 G A 349.69 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=54.28;MQ0=0;OQ=1032.22;QD=12.74;SB=-451.44 GT:AD:DP:GL:GQ 0/1:45,35:78:-130.02,-23.51,-145.95:99
-chr1 2747610 rs34202711 A G 414.76 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.97;MQ0=0;OQ=1011.04;QD=11.89;SB=-504.68 GT:AD:DP:GL:GQ 0/1:42,43:82:-129.10,-24.71,-172.46:99
-chr1 2747660 rs1456461 C T 603.75 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.82;MQ0=0;OQ=891.16;QD=15.63;SB=-457.95 GT:AD:DP:GL:GQ 0/1:30,27:57:-109.57,-17.17,-111.30:99
-chr1 2748044 rs12740180 C A 413.82 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=606.44;QD=10.83;SB=-262.28 GT:AD:DP:GL:GQ 0/1:33,23:54:-80.19,-16.26,-114.41:99
-chr1 2748753 rs2889541 G A 337.75 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.41;MQ0=0;OQ=1139.69;QD=16.05;SB=-477.50 GT:AD:DP:GL:GQ 0/1:37,34:70:-138.35,-21.10,-115.20:99
-chr1 2749666 rs12037615 A T 1.80 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=5;HaplotypeScore=1.16;MQ=59.20;MQ0=0;OQ=1128.99;QD=14.86;SB=-549.41 GT:AD:DP:GL:GQ 0/1:40,36:76:-139.07,-22.89,-148.90:99
-chr1 2749715 rs12047690 C T 131.06 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=816.13;QD=12.95;SB=-150.20 GT:AD:DP:GL:GQ 0/1:36,27:60:-102.99,-18.09,-107.52:99
-chr1 2751235 rs12049543 C A 405.31 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.56;MQ0=0;OQ=1060.86;QD=12.63;SB=-512.22 GT:AD:DP:GL:GQ 0/1:47,37:84:-134.67,-25.30,-168.73:99
-chr1 2751390 rs1840738 T C 158.28 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=56.95;MQ0=0;OQ=466.03;QD=9.14;SB=-238.28 GT:AD:DP:GL:GQ 0/1:29,21:47:-64.06,-14.17,-105.57:99
-chr1 2751392 rs1840737 T C 150.88 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=56.89;MQ0=0;OQ=432.09;QD=8.64;SB=-211.35 GT:AD:DP:GL:GQ 0/1:30,20:46:-60.36,-13.87,-105.49:99
-chr1 2751468 rs1840736 C T 225.14 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=58.99;MQ0=0;OQ=538.81;QD=11.71;SB=-284.82 GT:AD:DP:GL:GQ 0/1:28,18:46:-71.04,-13.87,-86.92:99
-chr1 2751723 rs1456460 G T 356.16 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=57.19;MQ0=0;OQ=1157.64;QD=13.31;SB=-342.38 GT:AD:DP:GL:GQ 0/1:48,39:87:-145.25,-26.21,-162.75:99
-chr1 2753129 rs6424080 T C 316.66 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.51;MQ0=0;OQ=966.99;QD=12.24;SB=-274.18 GT:AD:DP:GL:GQ 0/1:43,36:77:-123.19,-23.21,-165.41:99
-chr1 2753241 rs6424081 G C 7.87 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=4;HaplotypeScore=2.76;MQ=58.85;MQ0=0;OQ=855.86;QD=17.47;SB=-443.74 GT:AD:DP:GL:GQ 0/1:25,24:49:-103.64,-14.77,-108.86:99
-chr1 2753928 rs10909950 G C 275.97 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.98;MQ0=0;OQ=738.28;QD=13.67;SB=-369.83 GT:AD:DP:GL:GQ 0/1:27,27:50:-92.19,-15.07,-120.46:99
-chr1 2754032 rs7553697 T C 122.97 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=50.90;MQ0=0;OQ=845.37;QD=27.27;SB=-371.38 GT:AD:DP:GL:GQ 1/1:0,31:28:-88.15,-8.45,-0.03:84.18
-chr1 2754183 rs6424082 A G 8.12 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=5.05;MQ=58.51;MQ0=0;OQ=416.20;QD=9.46;SB=-192.43 GT:AD:DP:GL:GQ 0/1:23,21:40:-56.97,-12.06,-83.18:99
-chr1 2754298 rs6424083 C G 173.34 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=55.35;MQ0=0;OQ=1296.80;QD=37.05;SB=-603.86 GT:AD:DP:GL:GQ 1/1:0,35:33:-133.29,-9.95,-0.02:99
-chr1 2754773 . G A 0.64 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=3.22;MQ=60.00;MQ0=0;OQ=1109.61;QD=18.81;SB=-280.74 GT:AD:DP:GL:GQ 0/1:25,34:58:-131.72,-17.47,-86.47:99
-chr1 2754949 rs34133714 C T 67.94 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=57.50;MQ0=0;OQ=577.42;QD=16.98;SB=-168.27 GT:AD:DP:GL:GQ 0/1:16,18:34:-71.28,-10.25,-51.84:99
-chr1 2755031 rs34352177 T C 19.62 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=7.41;MQ=59.06;MQ0=0;OQ=899.29;QD=13.03;SB=-455.95 GT:AD:DP:GL:GQ 0/1:36,31:67:-116.13,-22.92,-145.73:99
-chr1 2755403 rs11806141 T G 18.81 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=6.77;MQ=51.89;MQ0=9;QD=0.27;SB=74.23 GT:AD:DP:GL:GQ 0/1:49,20:51:-20.52,-15.36,-159.70:51.59
-chr1 2755508 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=79;Dels=0.06;HRun=2;HaplotypeScore=38.09;MQ=49.34;MQ0=4;OQ=65.07;QD=0.82;SB=71.26 GT:AD:DP:GL:GQ 0/1:58,15:62:-27.57,-17.78,-196.95:97.90
-chr1 2755529 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=65.45;MQ=46.51;MQ0=7;OQ=513.73;QD=7.04;SB=-185.79 GT:AD:DP:GL:GQ 0/1:43,30:51:-70.02,-15.37,-107.03:99
-chr1 2755532 . A G 42.46 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=67.89;MQ=46.23;MQ0=7;QD=0.57;SB=41.14 GT:AD:DP:GL:GQ 0/1:61,13:50:-22.60,-15.07,-170.16:75.29
-chr1 2755579 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=21.20;MQ=45.33;MQ0=9;OQ=157.48;QD=2.02;SB=-23.25 GT:AD:DP:GL:GQ 0/1:60,12:47:-33.22,-14.19,-119.56:99
-chr1 2755596 rs11806928 A G 0.11 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=12.62;MQ=45.10;MQ0=9;OQ=205.66;QD=2.78;SB=-15.21 GT:AD:DP:GL:GQ 0/1:58,16:54:-40.13,-16.28,-162.81:99
-chr1 2755612 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=11.17;MQ=46.38;MQ0=5;OQ=126.58;QD=1.73;SB=14.62 GT:AD:DP:GL:GQ 0/1:63,10:57:-33.13,-17.19,-158.30:99
-chr1 2755632 rs10909952 C T 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=10.73;MQ=46.85;MQ0=3;OQ=64.17;QD=0.87;SB=26.06 GT:AD:DP:GL:GQ 0/1:61,13:47:-23.87,-14.17,-131.74:97
-chr1 2755643 . C T 0.06 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=7.11;MQ=46.66;MQ0=2;OQ=370.42;QD=5.22;SB=-83.91 GT:AD:DP:GL:GQ 0/1:46,20:49:-55.11,-14.78,-108.17:99
-chr1 2755657 rs61763677 G T 0.15 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=8.88;MQ=44.97;MQ0=5;OQ=282.63;QD=3.29;SB=-9.61 GT:AD:DP:GL:GQ 0/1:69,17:72:-53.24,-21.69,-193.61:99
-chr1 2755674 rs61763678 C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=0;HaplotypeScore=23.01;MQ=44.47;MQ0=7;OQ=292.56;QD=2.76;SB=-24.23 GT:AD:DP:GL:GQ 0/1:76,27:79:-56.37,-23.83,-203.58:99
-chr1 2755706 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=46.46;MQ=43.46;MQ0=6;OQ=100.65;QD=1.01;SB=48.33 GT:AD:DP:GL:GQ 0/1:73,19:68:-33.86,-20.51,-216.35:99
-chr1 2755733 rs10909953 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=134.56;MQ=44.60;MQ0=11;OQ=218.03;QD=1.83;SB=-68.77 GT:AD:DP:GL:GQ 0/1:91,18:82:-72.98,-47.89,-237.50:99
-chr1 2755738 rs10909954 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.00;HRun=0;HaplotypeScore=94.54;MQ=44.07;MQ0=12;OQ=119.63;QD=1.01;SB=15.66 GT:AD:DP:GL:GQ 0/1:86,29:80:-42.04,-26.79,-256.64:99
-chr1 2755753 . G A 11.77 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=1;HaplotypeScore=33.32;MQ=44.33;MQ0=10;QD=0.09;SB=66.29 GT:AD:DP:GL:GQ 0/1:116,10:95:-33.05,-28.62,-308.21:44.31
-chr1 2755755 rs57067996 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=130;Dels=0.00;HRun=1;HaplotypeScore=39.46;MQ=44.65;MQ0=10;OQ=1208.64;QD=9.30;SB=-349.24 GT:AD:DP:GL:GQ 0/1:72,52:91:-151.57,-27.42,-186.87:99
-chr1 2755787 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=209;Dels=0.00;HRun=0;HaplotypeScore=9.86;MQ=44.22;MQ0=18;OQ=212.29;QD=1.02;SB=84.79 GT:AD:DP:GL:GQ 0/1:175,28:147:-68.83,-44.32,-479.03:99
-chr1 2755816 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=1;HaplotypeScore=62.94;MQ=43.89;MQ0=23;OQ=172.99;QD=0.80;SB=63.05 GT:AD:DP:GL:GQ 0/1:192,24:159:-68.50,-47.92,-487.91:99
-chr1 2755844 rs4991850 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=164;Dels=0.00;HRun=0;HaplotypeScore=53.96;MQ=43.72;MQ0=16;OQ=1135.99;QD=6.93;SB=-394.17 GT:AD:DP:GL:GQ 0/1:112,52:121:-153.35,-36.47,-275.01:99
-chr1 2755847 rs57868894 T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=161;Dels=0.00;HRun=1;HaplotypeScore=64.38;MQ=43.84;MQ0=16;OQ=859.67;QD=5.34;SB=-128.73 GT:AD:DP:GL:GQ 0/1:103,58:122:-126.01,-36.76,-296.17:99
-chr1 2755864 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=139;Dels=0.00;HRun=0;HaplotypeScore=32.56;MQ=44.46;MQ0=14;OQ=96.62;QD=0.70;SB=30.17 GT:AD:DP:GL:GQ 0/1:117,20:102:-43.73,-30.78,-282.87:99
-chr1 2755889 rs4991849 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=114;Dels=0.04;HRun=2;HaplotypeScore=40.28;MQ=47.08;MQ0=9;OQ=2321.13;QD=20.36;SB=-1120.12 GT:AD:DP:GL:GQ 0/1:18,92:93:-262.51,-27.11,-65.29:99
-chr1 2755910 rs12728224 T G 16.56 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=49.38;MQ0=5;QD=0.17;SB=88.35 GT:AD:DP:GL:GQ 0/1:84,11:79:-28.73,-23.80,-253.95:49.30
-chr1 2755924 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=18.40;MQ=49.90;MQ0=6;OQ=1394.92;QD=15.16;SB=-476.13 GT:AD:DP:GL:GQ 0/1:39,53:66:-162.68,-19.90,-75.57:99
-chr1 2755992 . G A 33.66 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=19.55;MQ=45.20;MQ0=8;QD=0.40;SB=27.48 GT:AD:DP:GL:GQ 0/1:73,12:61:-25.05,-18.40,-176.14:66.50
-chr1 2756013 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=17.90;MQ=45.32;MQ0=5;OQ=157.50;QD=2.67;SB=-33.78 GT:AD:DP:GL:GQ 0/1:38,21:37:-30.19,-11.15,-106.30:99
-chr1 2756025 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=4.66;MQ=45.60;MQ0=4;OQ=63.13;QD=1.15;SB=26.12 GT:AD:DP:GL:GQ 0/1:45,10:38:-21.07,-11.48,-129.01:95.97
-chr1 2756051 rs4992290 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=36.34;MQ=44.26;MQ0=6;OQ=205.91;QD=3.38;SB=35.13 GT:AD:DP:GL:GQ 0/1:37,24:36:-34.74,-10.86,-87.18:99
-chr1 2756088 rs6676347 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=50.22;MQ=41.73;MQ0=14;OQ=1315.11;QD=15.29;SB=-568.14 GT:AD:DP:GL:GQ 0/1:37,49:48:-149.26,-14.46,-35.10:99
-chr1 2756101 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=1;HaplotypeScore=21.36;MQ=40.87;MQ0=15;OQ=73.71;QD=0.88;SB=47.17 GT:AD:DP:GL:GQ 0/1:64,20:51:-26.02,-15.36,-158.57:99
-chr1 2756151 rs4648513 T C 97.75 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=4.14;MQ=50.77;MQ0=9;OQ=1380.54;QD=20.92;SB=-651.39 GT:AD:DP:GL:GQ 1/1:9,57:48:-150.01,-14.48,-8.38:61.01
-chr1 2756174 rs59048447 G A 70.95 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=5.41;MQ=56.28;MQ0=2;OQ=675.24;QD=12.74;SB=-328.31 GT:AD:DP:GL:GQ 0/1:26,27:46:-84.67,-13.86,-86.53:99
-chr1 2756831 rs4648515 C T 238.63 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=59.11;MQ0=0;OQ=2661.31;QD=39.14;SB=-1337.11 GT:AD:DP:GL:GQ 1/1:1,67:68:-272.30,-20.49,-2.59:99
-chr1 2757061 rs4648518 A G 438.92 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1894.09;QD=32.66;SB=-719.10 GT:AD:DP:GL:GQ 1/1:0,58:55:-193.02,-16.57,-0.02:99
-chr1 2757563 rs4648519 C T 617.31 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=2063.43;QD=38.21;SB=-1058.93 GT:AD:DP:GL:GQ 1/1:0,54:53:-209.94,-15.97,-0.02:99
-chr1 2758482 . C T 0.54 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=50.17;MQ0=3;OQ=191.27;QD=4.25;SB=-120.51 GT:AD:DP:GL:GQ 0/1:31,14:38:-33.86,-11.45,-100.08:99
-chr1 2758751 . T G 48.69 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=34.31;MQ0=7;QD=1.62;SB=-11.91 GT:AD:DP:GL:GQ 0/1:21,9:22:-14.78,-6.63,-62.96:81.53
-chr1 2758819 . A G 182.25 PASS AC=2;AF=1.00;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=42.84;MQ0=2;OQ=868.67;QD=27.15;SB=-395.30 GT:AD:DP:GL:GQ 1/1:1,31:28:-90.48,-8.45,-0.03:84.20
-chr1 2758861 . T C 30.75 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.14;MQ=44.85;MQ0=1;QD=0.90;SB=29.12 GT:AD:DP:GL:GQ 0/1:26,7:26:-14.19,-7.84,-86.43:63.58
-chr1 2758882 . G A 6.14 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=35.37;MQ0=5;OQ=748.79;QD=17.41;SB=-255.79 GT:AD:DP:GL:GQ 0/1:14,29:29:-86.90,-8.74,-21.14:99
-chr1 2758933 . T C 5.05 PASS AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=4.40;MQ=30.24;MQ0=6;OQ=270.13;QD=7.50;SB=-156.34 GT:AD:DP:GL:GQ 0/1:9,26:16:-35.12,-4.83,-17.51:99
-chr1 2758959 . T G 27.66 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=27.02;MQ0=8;QD=0.92;SB=-23.52 GT:AD:DP:GL:GQ 0/1:24,6:11:-9.36,-3.32,-25.67:60.48
-chr1 2759011 . T G 0.06 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=3.83;MQ=18.26;MQ0=23;OQ=314.04;QD=4.42;SB=-69.87 GT:AD:DP:GL:GQ 0/1:37,34:26:-42.52,-7.83,-50.68:99
-chr1 2759038 . G T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=15.13;MQ=25.49;MQ0=29;OQ=89.07;QD=0.97;SB=-9.29 GT:AD:DP:GL:GQ 0/1:85,7:35:-22.74,-10.55,-90.79:99
-chr1 2759090 . G T 15.10 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=11.61;MQ=28.51;MQ0=10;QD=0.35;SB=-6.99 GT:AD:DP:GL:GQ 0/1:32,11:16:-9.61,-4.83,-35.57:47.80
-chr1 2759130 rs61763686 T C 37.28 LowQual AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=18.78;MQ0=1;QD=12.43;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:2:-7.14,-0.60,-0.00:6.02
-chr1 2759142 . G A 1.53 PASS AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=-0.12;MQ=18.78;MQ0=2;OQ=80.16;QD=13.36;SB=-10.00 GT:AD:DP:GL:GQ 0/1:3,3:4:-12.50,-1.21,-3.10:18.91
-chr1 2759167 . G T 2.82 PASS AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=26.71;MQ0=4;OQ=151.71;QD=6.90;SB=-6.99 GT:AD:DP:GL:GQ 0/1:16,6:14:-22.67,-4.22,-28.76:99
-chr1 2759193 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=15.10;MQ=26.07;MQ0=10;OQ=142.00;QD=2.90;SB=-61.29 GT:AD:DP:GL:GQ 0/1:38,11:32:-27.13,-9.65,-83.88:99
-chr1 2759219 . G T 0.58 PASS AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=27.42;MQ0=13;OQ=233.66;QD=3.03;SB=-10.31 GT:AD:DP:GL:GQ 0/1:59,18:48:-41.11,-14.46,-126.09:99
-chr1 2759237 rs10909961 G A 0.07 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=9.56;MQ=30.14;MQ0=15;OQ=68.31;QD=0.77;SB=29.11 GT:AD:DP:GL:GQ 0/1:82,7:55:-26.69,-16.57,-172.16:99
-chr1 2759271 . G T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=31.60;MQ0=17;OQ=103.26;QD=1.09;SB=14.07 GT:AD:DP:GL:GQ 0/1:79,16:53:-29.57,-15.96,-157.88:99
-chr1 2759402 rs10752737 G A 706.16 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.81;MQ0=0;OQ=3330.93;QD=38.29;SB=-1475.63 GT:AD:DP:GL:GQ 1/1:0,87:84:-332.09,-25.31,-0.03:99
-chr1 2759793 rs6665646 C T 285.69 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.67;MQ0=0;OQ=1210.11;QD=17.54;SB=-511.14 GT:AD:DP:GL:GQ 0/1:33,36:69:-145.09,-20.79,-106.44:99
-chr1 2760042 rs6679343 A T 0.12 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=6;HaplotypeScore=1.76;MQ=59.01;MQ0=0;OQ=2240.29;QD=33.94;SB=-793.89 GT:AD:DP:GL:GQ 1/1:0,66:63:-227.64,-18.99,-0.03:99
-chr1 2761186 . C G 0.63 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=4;HaplotypeScore=1.71;MQ=59.37;MQ0=0;OQ=541.38;QD=12.30;SB=-216.32 GT:AD:DP:GL:GQ 0/1:26,18:41:-69.78,-12.36,-101.99:99
-chr1 2761364 rs12743952 G A 204.61 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=59.65;MQ0=0;OQ=611.70;QD=11.33;SB=-279.20 GT:AD:DP:GL:GQ 0/1:32,22:50:-79.52,-15.07,-100.94:99
-chr1 2761375 rs12743965 G A 240.15 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.65;MQ0=0;OQ=726.42;QD=13.45;SB=-307.80 GT:AD:DP:GL:GQ 0/1:31,23:53:-91.89,-15.96,-108.39:99
-chr1 2761483 rs34161193 G A 219.36 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=58.78;MQ0=0;OQ=505.10;QD=13.29;SB=-258.15 GT:AD:DP:GL:GQ 0/1:20,17:37:-64.94,-11.15,-70.90:99
-chr1 2761516 rs35134901 G C 42.78 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=58.89;MQ0=0;OQ=485.26;QD=11.55;SB=-253.13 GT:AD:DP:GL:GQ 0/1:25,17:38:-63.28,-11.47,-90.46:99
-chr1 2761538 rs35767265 C A 434.92 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=663.44;QD=13.54;SB=-277.32 GT:AD:DP:GL:GQ 0/1:26,23:47:-83.79,-14.16,-83.28:99
-chr1 2761907 rs35313744 A C 3.99 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=4;HaplotypeScore=1.29;MQ=59.00;MQ0=0;OQ=545.25;QD=12.98;SB=-173.29 GT:AD:DP:GL:GQ 0/1:20,22:40:-69.86,-12.05,-71.88:99
-chr1 2762054 rs6694484 G A 356.15 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.79;MQ0=0;OQ=715.90;QD=13.26;SB=-315.29 GT:AD:DP:GL:GQ 0/1:29,25:51:-90.24,-15.37,-99.20:99
-chr1 2762207 rs6675221 C A 216.75 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.45;MQ0=0;OQ=527.73;QD=12.57;SB=-249.28 GT:AD:DP:GL:GQ 0/1:21,20:39:-67.80,-11.75,-71.40:99
-chr1 2762658 rs12727394 T C 169.21 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=60.00;MQ0=0;OQ=383.94;QD=11.63;SB=-133.29 GT:AD:DP:GL:GQ 0/1:17,15:29:-50.42,-8.74,-57.72:99
-chr1 2763115 rs12729596 C T 224.28 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.16;MQ0=0;OQ=609.66;QD=12.19;SB=-271.12 GT:AD:DP:GL:GQ 0/1:30,20:50:-79.31,-15.06,-107.78:99
-chr1 2763349 rs6660680 C G 206.84 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.16;MQ=59.65;MQ0=0;OQ=809.85;QD=15.28;SB=-407.93 GT:AD:DP:GL:GQ 0/1:28,25:49:-99.04,-14.78,-104.68:99
-chr1 2763426 rs6660759 C T 169.45 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.89;MQ0=0;OQ=778.20;QD=18.53;SB=-350.90 GT:AD:DP:GL:GQ 0/1:15,27:38:-92.57,-11.46,-40.16:99
-chr1 2763555 rs6674204 A G 358.56 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1244.75;QD=33.64;SB=-466.51 GT:AD:DP:GL:GQ 1/1:0,37:36:-128.07,-10.85,-0.01:99
-chr1 2763913 rs7529000 A G 539.75 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=590.27;QD=13.73;SB=-268.99 GT:AD:DP:GL:GQ 0/1:19,24:38:-73.77,-11.46,-59.16:99
-chr1 2765576 . A G 299.17 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.30;MQ0=1;OQ=708.87;QD=14.18;SB=-362.49 GT:AD:DP:GL:GQ 0/1:25,25:46:-88.03,-13.85,-86.85:99
-chr1 2765703 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=40;Dels=0.03;HRun=1;HaplotypeScore=65.65;MQ=34.06;MQ0=6;OQ=224.51;QD=5.61;SB=-69.85 GT:AD:DP:GL:GQ 0/1:16,18:20:-31.76,-6.02,-57.23:99
-chr1 2765716 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=45.86;MQ=31.67;MQ0=6;OQ=473.81;QD=11.56;SB=-227.60 GT:AD:DP:GL:GQ 0/1:7,34:22:-57.29,-6.63,-24.20:99
-chr1 2765718 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=49.51;MQ=31.73;MQ0=6;OQ=139.31;QD=3.48;SB=14.07 GT:AD:DP:GL:GQ 0/1:34,6:18:-22.64,-5.42,-43.65:99
-chr1 2765729 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=2;HaplotypeScore=101.24;MQ=39.70;MQ0=5;OQ=348.53;QD=8.30;SB=-73.03 GT:AD:DP:GL:GQ 0/1:25,16:29:-48.99,-10.85,-57.39:99
-chr1 2765740 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=21.54;MQ=47.97;MQ0=0;OQ=288.34;QD=9.94;SB=-104.59 GT:AD:DP:GL:GQ 0/1:16,13:26:-39.95,-7.84,-58.99:99
-chr1 2765813 . A G 11.29 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=51.84;MQ0=0;OQ=780.70;QD=15.61;SB=-390.27 GT:AD:DP:GL:GQ 0/1:21,28:48:-95.81,-14.46,-83.37:99
-chr1 2765894 . A C 0.06 PASS AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=11.31;MQ=45.14;MQ0=0;OQ=337.42;QD=9.37;SB=-140.89 GT:AD:DP:GL:GQ 0/1:21,15:33:-46.96,-9.94,-71.34:99
-chr1 2765910 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=53;Dels=0.02;HRun=1;HaplotypeScore=33.31;MQ=38.51;MQ0=0;OQ=588.92;QD=11.11;SB=23.11 GT:AD:DP:GL:GQ 0/1:28,24:46:-75.73,-13.55,-102.75:99
-chr1 2765957 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=2;HaplotypeScore=176.91;MQ=27.98;MQ0=17;OQ=352.77;QD=3.12;SB=2.45 GT:AD:DP:GL:GQ 0/1:85,28:53:-54.54,-15.98,-142.28:99
-chr1 2765968 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=118.45;MQ=28.99;MQ0=17;OQ=151.04;QD=1.26;SB=-15.93 GT:AD:DP:GL:GQ 0/1:95,25:59:-36.17,-17.78,-173.10:99
-chr1 2765995 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=52.19;MQ=34.85;MQ0=7;OQ=128.24;QD=1.78;SB=-51.69 GT:AD:DP:GL:GQ 0/1:61,11:54:-32.38,-16.27,-203.82:99
-chr1 2765996 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=51.72;MQ=35.05;MQ0=7;OQ=180.10;QD=2.54;SB=-41.96 GT:AD:DP:GL:GQ 0/1:59,12:54:-37.57,-16.27,-158.22:99
-chr1 2766902 rs34376289 C T 393.03 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.48;MQ0=0;OQ=811.67;QD=17.64;SB=-367.51 GT:AD:DP:GL:GQ 0/1:20,26:45:-98.01,-13.56,-71.88:99
-chr1 2768626 rs10909992 C T 335.77 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.57;MQ0=0;OQ=811.02;QD=12.48;SB=-416.42 GT:AD:DP:GL:GQ 0/1:35,29:62:-103.08,-18.70,-112.11:99
-chr1 2768752 rs12409918 A C 74.45 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.55;MQ=59.57;MQ0=0;OQ=965.61;QD=17.88;SB=-402.66 GT:AD:DP:GL:GQ 0/1:20,34:50:-114.91,-15.06,-60.43:99
-chr1 2768903 rs12409348 T C 172.05 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.28;MQ=60.00;MQ0=0;OQ=398.89;QD=10.50;SB=-78.75 GT:AD:DP:GL:GQ 0/1:20,17:35:-53.71,-10.54,-80.33:99
-chr1 2769019 rs10909995 C G 17.82 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=58.48;MQ0=0;OQ=1462.05;QD=36.55;SB=-653.43 GT:AD:DP:GL:GQ 1/1:0,40:35:-149.81,-10.55,-0.02:99
-chr1 2769620 rs28600853 C T 67.23 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.53;MQ0=0;OQ=1091.29;QD=28.72;SB=-540.63 GT:AD:DP:GL:GQ 0/1:4,33:36:-123.26,-10.85,-13.62:27.66
-chr1 2769674 rs4648542 G A 90.82 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=51.80;MQ0=1;OQ=271.91;QD=9.71;SB=-148.61 GT:AD:DP:GL:GQ 0/1:13,15:21:-36.80,-6.33,-39.42:99
-chr1 2769679 rs28367217 C G 36.02 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=51.80;MQ0=1;OQ=209.26;QD=8.37;SB=2.04 GT:AD:DP:GL:GQ 0/1:15,10:18:-29.64,-5.43,-44.14:99
-chr1 2769692 rs28478242 A G 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=4;HaplotypeScore=0.82;MQ=53.88;MQ0=1;OQ=89.42;QD=4.26;SB=5.05 GT:AD:DP:GL:GQ 0/1:15,6:17:-17.35,-5.12,-46.13:99
-chr1 2769752 rs7542593 T C 75.28 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.77;MQ0=0;OQ=136.56;QD=6.21;SB=-67.76 GT:AD:DP:GL:GQ 0/1:10,12:17:-22.07,-5.13,-38.52:99
-chr1 2769805 rs4648543 T G 0.02 FDRtranche1.00to2.00 AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=4;HaplotypeScore=2.68;MQ=55.12;MQ0=0;OQ=754.89;QD=29.03;SB=-110.69 GT:AD:DP:GL:GQ 1/1:0,26:23:-79.08,-6.93,-0.01:69.18
-chr1 2770855 rs729178 T G 35.70 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=57.97;MQ0=0;OQ=332.17;QD=14.44;SB=-62.09 GT:AD:DP:GL:GQ 0/1:7,16:18:-41.92,-5.42,-18.71:99
-chr1 2770856 rs729177 T C 47.89 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=57.97;MQ0=0;OQ=319.36;QD=13.89;SB=-53.86 GT:AD:DP:GL:GQ 0/1:7,16:20:-41.25,-6.03,-26.63:99
-chr1 2772453 rs12119163 G A 585.03 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1388.32;QD=37.52;SB=-625.84 GT:AD:DP:GL:GQ 1/1:0,37:36:-142.43,-10.85,-0.01:99
-chr1 2772603 rs7551868 T C 19.40 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=3.77;MQ=58.92;MQ0=0;OQ=1140.34;QD=29.24;SB=-578.97 GT:AD:DP:GL:GQ 1/1:0,39:37:-117.66,-11.16,-0.04:99
-chr1 2772900 rs4648402 T C 156.21 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.00;MQ0=0;OQ=994.66;QD=28.42;SB=-468.49 GT:AD:DP:GL:GQ 1/1:0,35:33:-103.09,-9.96,-0.03:99
-chr1 2773675 rs12752112 G C 9.49 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.95;MQ0=0;OQ=859.11;QD=39.05;SB=-325.45 GT:AD:DP:GL:GQ 1/1:0,22:21:-89.50,-6.33,-0.01:63.21
-chr1 2776554 rs1563470 T C 23.92 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=60.00;MQ0=0;OQ=1838.24;QD=33.42;SB=-908.03 GT:AD:DP:GL:GQ 1/1:0,55:52:-187.42,-15.66,-0.02:99
-chr1 2777013 rs897616 C G 7.16 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=3;HaplotypeScore=1.07;MQ=58.26;MQ0=0;OQ=1193.61;QD=34.10;SB=-446.20 GT:AD:DP:GL:GQ 1/1:0,35:30:-122.96,-9.05,-0.02:90.29
-chr1 2777567 rs897620 C G 317.44 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1920.95;QD=42.69;SB=-716.92 GT:AD:DP:GL:GQ 1/1:0,45:44:-195.69,-13.26,-0.01:99
-chr1 2778573 rs56273341 A G 89.85 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=1164.73;QD=29.12;SB=-590.57 GT:AD:DP:GL:GQ 1/1:0,40:37:-120.09,-11.16,-0.03:99
-chr1 2779035 rs12569164 T C 119.85 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=49.75;MQ0=0;OQ=1623.80;QD=28.49;SB=-755.66 GT:AD:DP:GL:GQ 1/1:0,57:53:-166.02,-15.99,-0.06:99
-chr1 2779347 . T C 140.90 Indel AC=1;AF=0.50;AN=2;DP=70;Dels=0.03;HRun=0;HaplotypeScore=53.64;MQ=31.59;MQ0=1;QD=2.01;SB=-93.61 GT:AD:DP:GL:GQ 0/1:59,9:55:-33.34,-15.96,-177.98:99
-chr1 2779357 rs55740077 T C 137.39 Indel;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=61.84;MQ=29.83;MQ0=1;QD=1.99;SB=-25.89 GT:AD:DP:GL:GQ 0/1:28,41:15:-21.54,-4.52,-37.07:99
-chr1 2779361 rs55927204 T C 380.25 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=52.10;MQ=29.71;MQ0=1;QD=5.51;SB=-184.74 GT:AD:DP:GL:GQ 0/1:7,62:16:-46.13,-4.82,-12.60:77.76
-chr1 2779365 . T C 528.78 SnpCluster AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=50.77;MQ=30.92;MQ0=1;QD=7.24;SB=-289.59 GT:AD:DP:GL:GQ 0/1:6,67:20:-62.19,-6.02,-12.60:65.71
-chr1 2779369 . T C 809.75 SnpCluster AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=40.71;MQ=31.11;MQ0=1;QD=10.52;SB=-337.36 GT:AD:DP:GL:GQ 0/1:9,68:31:-93.60,-9.34,-19.91:99
-chr1 2779373 rs56012041 T C 260.44 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=37.08;MQ=32.24;MQ0=1;QD=3.38;SB=-116.63 GT:AD:DP:GL:GQ 0/1:28,49:21:-35.65,-6.33,-44.87:99
-chr1 2779421 rs5023660 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.02;HRun=3;HaplotypeScore=23.36;MQ=40.90;MQ0=1;OQ=1397.64;QD=21.18;SB=-647.72 GT:AD:DP:GL:GQ 0/1:24,41:55:-159.31,-16.27,-52.10:99
-chr1 2779423 rs56155638 T C 0.07 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.02;HRun=0;HaplotypeScore=20.03;MQ=40.90;MQ0=1;OQ=1243.01;QD=18.83;SB=-541.02 GT:AD:DP:GL:GQ 0/1:23,42:56:-144.15,-16.57,-59.53:99
-chr1 2779766 rs2124661 C G 42.55 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=49.71;MQ0=0;OQ=2767.03;QD=41.92;SB=-1222.51 GT:AD:DP:GL:GQ 1/1:0,66:63:-280.30,-18.98,-0.02:99
-chr1 2779832 rs2168531 C T 260.48 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.21;MQ=50.55;MQ0=0;OQ=2553.68;QD=38.69;SB=-1139.52 GT:AD:DP:GL:GQ 1/1:0,66:66:-258.98,-19.89,-0.03:99
-chr1 2780005 . G C 32.52 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=15.63;MQ=58.92;MQ0=0;QD=0.76;SB=44.18 GT:AD:DP:GL:GQ 0/1:33,10:29:-15.29,-8.76,-103.60:65.36
-chr1 2781003 rs10910023 C T 121.93 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.11;MQ0=0;OQ=1930.80;QD=37.13;SB=-708.95 GT:AD:DP:GL:GQ 1/1:0,52:49:-196.68,-14.76,-0.01:99
-chr1 2781813 rs12131393 C T 195.76 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=701.85;QD=13.76;SB=-265.19 GT:AD:DP:GL:GQ 0/1:28,23:44:-86.73,-13.26,-75.43:99
-chr1 2781975 rs12131450 C T 0.88 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=915.40;QD=20.80;SB=-418.48 GT:AD:DP:GL:GQ 0/1:17,27:44:-108.08,-13.26,-61.20:99
-chr1 2784004 rs10909791 C T 0.07 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=18.57;MQ=55.20;MQ0=0;OQ=554.87;QD=8.95;SB=-141.63 GT:AD:DP:GL:GQ 0/1:38,21:51:-74.16,-15.38,-99.65:99
-chr1 2784009 rs6673503 T C 0.75 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=15.72;MQ=55.44;MQ0=0;OQ=828.36;QD=14.04;SB=-284.66 GT:AD:DP:GL:GQ 0/1:19,40:49:-100.91,-14.79,-59.84:99
-chr1 2784113 rs6658584 G A 324.36 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.61;MQ0=0;OQ=573.55;QD=11.95;SB=-252.51 GT:AD:DP:GL:GQ 0/1:29,19:42:-73.29,-12.65,-86.05:99
-chr1 2784397 rs6668620 C T 83.28 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.97;MQ0=0;OQ=989.63;QD=21.99;SB=-434.99 GT:AD:DP:GL:GQ 0/1:12,32:41:-114.60,-12.35,-43.77:99
-chr1 2784411 rs10909793 G T 285.59 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=987.49;QD=22.44;SB=-485.97 GT:AD:DP:GL:GQ 0/1:11,33:43:-114.99,-12.95,-39.80:99
-chr1 2785397 rs6679954 T C 177.95 PASS AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=57.39;MQ0=0;OQ=162.89;QD=9.05;SB=-99.99 GT:AD:DP:GL:GQ 0/1:9,8:15:-24.09,-4.52,-32.21:99
-chr1 2785861 rs10797340 G C 110.31 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=2067.39;QD=39.01;SB=-1035.13 GT:AD:DP:GL:GQ 1/1:0,53:49:-210.35,-14.77,-0.02:99
-chr1 2786415 rs10752722 A G 154.88 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.07;MQ0=0;OQ=1517.85;QD=30.36;SB=-724.72 GT:AD:DP:GL:GQ 1/1:0,50:49:-155.42,-14.78,-0.05:99
-chr1 2786479 rs4648406 T C 92.49 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.34;MQ0=0;OQ=883.04;QD=25.23;SB=-376.38 GT:AD:DP:GL:GQ 1/1:0,35:29:-91.92,-8.75,-0.03:87.18
-chr1 2787126 rs6424057 T G 92.26 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.46;MQ0=0;OQ=1311.97;QD=30.51;SB=-464.84 GT:AD:DP:GL:GQ 1/1:0,43:41:-134.82,-12.36,-0.04:99
-chr1 2787716 rs10797342 C T 575.89 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=717.10;QD=14.63;SB=-344.49 GT:AD:DP:GL:GQ 0/1:27,22:49:-89.77,-14.77,-84.62:99
-chr1 2788065 rs2124662 G C 9.64 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=5.21;MQ=57.80;MQ0=0;OQ=437.50;QD=13.67;SB=-215.17 GT:AD:DP:GL:GQ 0/1:15,17:26:-54.88,-7.85,-48.57:99
-chr1 2788136 rs1563472 G A 261.94 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.38;MQ0=0;OQ=469.47;QD=12.69;SB=-131.12 GT:AD:DP:GL:GQ 0/1:19,18:28:-58.68,-8.45,-41.51:99
-chr1 2788195 rs1563473 T G 178.79 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=57.45;MQ0=0;OQ=577.74;QD=12.56;SB=-216.84 GT:AD:DP:GL:GQ 0/1:19,27:43:-74.02,-12.96,-66.19:99
-chr1 2788317 rs1563474 G A 94.33 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=3.84;MQ=58.45;MQ0=0;OQ=661.75;QD=14.71;SB=-298.81 GT:AD:DP:GL:GQ 0/1:21,24:41:-81.83,-12.37,-60.24:99
-chr1 2788572 rs4373707 T C 44.63 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=5.22;MQ=58.97;MQ0=0;OQ=526.05;QD=11.69;SB=-185.63 GT:AD:DP:GL:GQ 0/1:22,23:42:-68.55,-12.66,-84.21:99
-chr1 2788907 rs2377038 A G 118.41 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.81;MQ=59.09;MQ0=0;OQ=482.56;QD=10.49;SB=-194.43 GT:AD:DP:GL:GQ 0/1:24,21:41:-63.90,-12.36,-79.61:99
-chr1 2789039 rs729965 G C 149.04 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=2442.19;QD=42.11;SB=-956.71 GT:AD:DP:GL:GQ 1/1:0,58:57:-247.82,-17.18,-0.02:99
-chr1 2789321 rs897629 T C 12.44 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=3.68;MQ=58.87;MQ0=0;OQ=1220.90;QD=29.78;SB=-560.89 GT:AD:DP:GL:GQ 1/1:0,40:39:-125.71,-11.76,-0.03:99
-chr1 2789340 rs11580768 C T 285.25 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.21;MQ=58.92;MQ0=0;OQ=699.84;QD=16.28;SB=-316.84 GT:AD:DP:GL:GQ 0/1:20,23:40:-85.33,-12.06,-59.14:99
-chr1 2789623 rs729419 G T 32.76 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=4.03;MQ=56.89;MQ0=0;OQ=1157.82;QD=30.47;SB=-604.54 GT:AD:DP:GL:GQ 1/1:0,38:33:-119.38,-9.94,-0.01:99
-chr1 2789978 rs4233022 T C 8.90 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=58.32;MQ0=0;OQ=1306.00;QD=33.49;SB=-393.50 GT:AD:DP:GL:GQ 1/1:0,38:38:-137.49,-14.36,-3.31:99
-chr1 2790214 rs61763695 G T 159.83 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=59.41;MQ0=0;OQ=678.47;QD=17.40;SB=-357.12 GT:AD:DP:GL:GQ 0/1:15,24:37:-82.28,-11.15,-45.69:99
-chr1 2790614 rs2061229 A G 424.36 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=1321.60;QD=28.73;SB=-492.17 GT:AD:DP:GL:GQ 1/1:0,46:43:-135.79,-12.97,-0.04:99
-chr1 2791688 rs4648429 A G 0.41 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.02;HRun=3;HaplotypeScore=3.60;MQ=59.05;MQ0=0;OQ=1300.58;QD=29.56;SB=-615.14 GT:AD:DP:GL:GQ 1/1:0,43:39:-133.67,-11.76,-0.03:99
-chr1 2791895 rs10737188 A G 0.06 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=11.58;MQ=57.39;MQ0=0;OQ=1158.45;QD=32.18;SB=-423.17 GT:AD:DP:GL:GQ 1/1:0,36:33:-119.44,-9.94,-0.01:99
-chr1 2791912 rs12127835 C T 0.23 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=15.40;MQ=57.73;MQ0=0;OQ=440.23;QD=14.20;SB=-189.24 GT:AD:DP:GL:GQ 0/1:15,16:28:-55.74,-8.44,-48.73:99
-chr1 2791917 rs12124890 G A 0.74 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=10.20;MQ=56.96;MQ0=0;OQ=462.23;QD=14.91;SB=-204.21 GT:AD:DP:GL:GQ 0/1:14,16:28:-57.95,-8.44,-40.79:99
-chr1 2792072 rs10752725 T C 491.80 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=1748.59;QD=30.68;SB=-570.96 GT:AD:DP:GL:GQ 1/1:0,57:55:-178.49,-16.59,-0.05:99
-chr1 2792208 rs7552943 A G 158.94 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.00;MQ0=0;OQ=672.02;QD=16.00;SB=-219.52 GT:AD:DP:GL:GQ 0/1:13,29:36:-81.33,-10.85,-44.36:99
-chr1 2792422 . G A 42.68 PASS AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.28;MQ0=0;OQ=1176.82;QD=18.39;SB=-377.70 GT:AD:DP:GL:GQ 0/1:28,36:64:-140.25,-19.29,-99.03:99
-chr1 2793407 rs3001793 G A 9.14 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=57.81;MQ0=0;OQ=925.83;QD=30.86;SB=-281.35 GT:AD:DP:GL:GQ 1/1:0,30:25:-96.18,-7.54,-0.02:75.22
-chr1 2793666 rs2377039 C T 77.79 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=60.00;MQ0=0;OQ=452.51;QD=18.10;SB=-252.58 GT:AD:DP:GL:GQ 0/1:10,15:20:-54.56,-6.03,-20.77:99
-chr1 2794138 rs3001794 C G 65.67 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=352.40;QD=13.05;SB=-39.43 GT:AD:DP:GL:GQ 0/1:15,12:26:-46.37,-7.84,-60.81:99
-chr1 2800878 rs2842928 T C 235.55 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=901.11;QD=33.37;SB=-249.77 GT:AD:DP:GL:GQ 1/1:0,27:26:-93.71,-7.83,-0.01:78.23
-chr1 2802104 rs10909834 G C 0.87 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=3;HaplotypeScore=3.91;MQ=59.36;MQ0=0;OQ=721.69;QD=20.05;SB=-360.48 GT:AD:DP:GL:GQ 0/1:15,21:32:-85.11,-9.65,-46.55:99
-chr1 2803334 rs10909835 C A 282.86 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.29;MQ0=0;OQ=1113.78;QD=16.14;SB=-524.88 GT:AD:DP:GL:GQ 0/1:32,37:69:-135.44,-20.78,-115.35:99
-chr1 2809215 . C A 24.19 LowQual AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=33.87;MQ0=3;QD=0.67;SB=-3.99 GT:AD:DP:GL:GQ 0/1:32,3:16:-10.52,-4.82,-48.73:57.01
-chr1 2812608 rs12091184 T C 225.17 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.35;MQ0=0;OQ=707.81;QD=11.06;SB=-307.08 GT:AD:DP:GL:GQ 0/1:33,31:62:-92.76,-18.69,-131.04:99
-chr1 2813319 rs12035436 G T 336.68 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.54;MQ0=0;OQ=779.74;QD=15.59;SB=-317.29 GT:AD:DP:GL:GQ 0/1:23,27:47:-95.42,-14.16,-69.60:99
-chr1 2815014 rs880724 C T 302.73 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=894.47;QD=16.56;SB=-357.16 GT:AD:DP:GL:GQ 0/1:25,29:52:-108.41,-15.68,-73.43:99
-chr1 2816229 rs34114281 G A 56.60 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.49;MQ0=0;OQ=818.99;QD=18.20;SB=-240.71 GT:AD:DP:GL:GQ 0/1:20,25:44:-98.44,-13.25,-71.30:99
-chr1 2816447 rs12738063 G A 183.56 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=436.36;QD=11.79;SB=-199.90 GT:AD:DP:GL:GQ 0/1:21,16:33:-56.87,-9.95,-58.54:99
-chr1 2819411 rs1869970 A G 323.79 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=58.68;MQ0=0;OQ=562.16;QD=12.22;SB=-263.95 GT:AD:DP:GL:GQ 0/1:23,23:46:-73.37,-13.87,-93.65:99
-chr1 2819722 rs10797359 G A 80.30 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=58.97;MQ0=0;OQ=661.62;QD=14.70;SB=-329.32 GT:AD:DP:GL:GQ 0/1:24,21:45:-83.00,-13.56,-85.88:99
-chr1 2819782 rs10797360 T C 62.98 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=58.11;MQ0=0;OQ=276.31;QD=7.47;SB=-143.57 GT:AD:DP:GL:GQ 0/1:22,15:35:-41.46,-10.55,-86.74:99
-chr1 2821229 rs2606408 T C 106.74 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=3.39;MQ=59.56;MQ0=0;OQ=598.54;QD=11.51;SB=-201.20 GT:AD:DP:GL:GQ 0/1:29,23:50:-78.20,-15.07,-111.31:99
-chr1 2821448 rs1563475 G T 119.77 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=513.38;QD=12.83;SB=-112.67 GT:AD:DP:GL:GQ 0/1:19,21:38:-66.07,-11.45,-67.04:99
-chr1 2821650 rs11590100 A G 136.28 PASS AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.60;MQ0=0;OQ=943.28;QD=10.14;SB=-480.61 GT:AD:DP:GL:GQ 0/1:51,42:88:-124.13,-26.52,-198.52:99
-chr1 2822111 rs3001796 T C 212.38 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=55.14;MQ0=0;OQ=802.13;QD=11.80;SB=-349.06 GT:AD:DP:GL:GQ 0/1:33,34:64:-102.79,-19.29,-127.57:99
-chr1 2822273 rs3001797 G A 0.27 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=14.80;MQ=58.82;MQ0=1;OQ=1009.61;QD=19.42;SB=-317.35 GT:AD:DP:GL:GQ 0/1:22,30:49:-119.01,-14.77,-60.02:99
-chr1 2822628 rs6696129 C T 18.64 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=6.89;MQ=57.91;MQ0=1;OQ=832.22;QD=14.35;SB=-326.29 GT:AD:DP:GL:GQ 0/1:32,26:55:-103.07,-16.57,-105.26:99
-chr1 2823020 rs1869971 C T 374.03 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=57.94;MQ0=0;OQ=535.79;QD=14.48;SB=-291.84 GT:AD:DP:GL:GQ 0/1:19,18:35:-67.42,-10.56,-54.80:99
-chr1 2823154 rs7339944 G A 129.22 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=59.45;MQ0=0;OQ=957.99;QD=19.16;SB=-392.16 GT:AD:DP:GL:GQ 0/1:19,31:48:-113.55,-14.46,-66.11:99
-chr1 2823192 rs7340016 A G 29.60 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=3.35;MQ=59.34;MQ0=0;OQ=422.29;QD=10.05;SB=-179.53 GT:AD:DP:GL:GQ 0/1:21,21:36:-56.37,-10.85,-73.83:99
-chr1 2823287 rs2124663 C T 42.06 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.59;MQ0=0;OQ=634.70;QD=14.10;SB=-71.85 GT:AD:DP:GL:GQ 0/1:24,21:45:-80.32,-13.56,-82.96:99
-chr1 2823310 rs1563466 T C 23.75 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.63;MQ=58.92;MQ0=0;OQ=514.85;QD=13.20;SB=-114.69 GT:AD:DP:GL:GQ 0/1:19,20:38:-66.22,-11.45,-76.59:99
-chr1 2823513 rs11587665 C T 40.96 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=6.13;MQ=59.14;MQ0=0;OQ=737.31;QD=13.65;SB=-373.35 GT:AD:DP:GL:GQ 0/1:29,25:51:-92.39,-15.38,-90.11:99
-chr1 2823603 rs1563468 T C 458.79 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.00;MQ0=0;OQ=947.27;QD=14.14;SB=-372.60 GT:AD:DP:GL:GQ 0/1:28,39:64:-117.31,-19.30,-107.37:99
-chr1 2823870 rs11809099 C T 295.64 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.56;MQ0=0;OQ=690.45;QD=13.28;SB=-256.23 GT:AD:DP:GL:GQ 0/1:28,23:49:-87.09,-14.76,-98.54:99
-chr1 2823885 rs2842926 G A 181.65 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.53;MQ0=0;OQ=786.09;QD=16.04;SB=-320.86 GT:AD:DP:GL:GQ 0/1:23,26:46:-95.76,-13.86,-71.19:99
-chr1 2825347 rs897633 A C 527.30 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=683.77;QD=14.86;SB=-280.84 GT:AD:DP:GL:GQ 0/1:21,25:45:-85.22,-13.56,-75.45:99
-chr1 2825552 rs897634 T C 95.40 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1172.99;QD=30.08;SB=-560.88 GT:AD:DP:GL:GQ 1/1:0,39:37:-120.91,-11.16,-0.03:99
-chr1 2825769 rs2606409 A G 32.95 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=5.74;MQ=57.77;MQ0=0;OQ=329.46;QD=7.84;SB=-164.95 GT:AD:DP:GL:GQ 0/1:25,16:40:-48.29,-12.06,-98.69:99
-chr1 2825959 rs2606410 C T 311.17 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.19;MQ=59.57;MQ0=0;OQ=951.03;QD=17.61;SB=-434.47 GT:AD:DP:GL:GQ 0/1:25,29:51:-113.75,-15.36,-82.67:99
-chr1 2827304 rs55855166 G A 337.28 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.37;MQ0=0;OQ=391.24;QD=9.10;SB=-201.88 GT:AD:DP:GL:GQ 0/1:27,16:41:-54.76,-12.35,-93.92:99
-chr1 2828084 rs35844499 A C 0.13 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=8.95;MQ=33.58;MQ0=13;OQ=215.00;QD=4.89;SB=-66.98 GT:AD:DP:GL:GQ 0/1:23,20:16:-29.61,-4.82,-23.59:99
-chr1 2831038 . C T 212.41 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=614.63;QD=14.29;SB=-239.55 GT:AD:DP:GL:GQ 0/1:23,20:43:-77.70,-12.96,-79.28:99
-chr1 2833249 . C T 39.44 LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=2.90;MQ=56.74;MQ0=0;QD=1.36;SB=-41.03 GT:AD:DP:GL:GQ 0/1:24,4:19:-12.96,-5.74,-47.17:72.28
-chr1 2833472 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=11.49;MQ=58.05;MQ0=0;OQ=54.69;QD=1.52;SB=-45.69 GT:AD:DP:GL:GQ 0/1:28,8:19:-14.49,-5.74,-59.79:87.52
-chr1 2837348 rs2606411 T C 351.83 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=583.14;QD=14.58;SB=-128.66 GT:AD:DP:GL:GQ 0/1:14,26:36:-72.45,-10.85,-55.84:99
-chr1 2838116 rs35880479 G A 202.84 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=58.64;MQ0=0;OQ=848.27;QD=13.05;SB=-379.33 GT:AD:DP:GL:GQ 0/1:37,28:62:-106.79,-18.68,-116.44:99
-chr1 2844321 rs12120163 C T 361.45 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.44;MQ0=0;OQ=1226.99;QD=16.58;SB=-528.52 GT:AD:DP:GL:GQ 0/1:36,38:72:-147.69,-21.70,-111.75:99
-chr1 2849584 rs2842909 C T 85.45 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=5.45;MQ=57.20;MQ0=0;OQ=445.80;QD=10.87;SB=-188.84 GT:AD:DP:GL:GQ 0/1:22,19:36:-58.71,-10.85,-74.85:99
-chr1 2850791 rs2925499 C T 367.47 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.73;MQ0=0;OQ=1163.55;QD=17.11;SB=-509.17 GT:AD:DP:GL:GQ 0/1:33,35:67:-139.83,-20.19,-105.50:99
-chr1 2856184 . C T 37.47 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=14.17;MQ0=11;QD=1.63;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,10:4:-8.24,-1.21,-6.09:48.87
-chr1 2856380 rs3010827 T C 18.54 LowQual AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=21.91;MQ0=3;QD=0.66;SB=-6.99 GT:AD:DP:GL:GQ 0/1:20,8:5:-6.64,-1.51,-11.98:51.31
-chr1 2865080 rs2788089 G A 618.40 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2745.57;QD=39.79;SB=-1234.70 GT:AD:DP:GL:GQ 1/1:0,69:69:-278.16,-20.78,-0.02:99
-chr1 2866385 rs10909845 T C 68.38 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=1.49;MQ=58.86;MQ0=0;OQ=1786.40;QD=31.34;SB=-680.16 GT:AD:DP:GL:GQ 1/1:0,57:53:-182.25,-15.97,-0.03:99
-chr1 2866462 rs6663830 A G 10.39 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.42;MQ=57.19;MQ0=0;OQ=455.20;QD=23.96;SB=-149.73 GT:AD:DP:GL:GQ 1/1:1,18:16:-49.13,-4.83,-0.02:48.09
-chr1 2866480 rs12132266 C G 0.75 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=2;HaplotypeScore=2.31;MQ=54.22;MQ0=2;OQ=483.83;QD=32.26;SB=-138.40 GT:AD:DP:GL:GQ 1/1:2,13:12:-51.97,-3.62,-0.01:36.12
-chr1 2866511 rs12129394 G A 181.92 PASS AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.76;MQ0=0;OQ=82.01;QD=27.34;SB=-47.56 GT:AD:DP:GL:GQ 1/1:0,3:3:-11.69,-0.90,-0.00:9.03
-chr1 2866552 rs11582761 G A 15.30 PASS AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=47.10;MQ0=0;OQ=87.13;QD=17.43;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,4:3:-12.20,-0.90,-0.00:9.03
-chr1 2868226 rs11583804 G A 591.81 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.37;MQ0=0;OQ=1019.85;QD=15.45;SB=-422.44 GT:AD:DP:GL:GQ 0/1:35,31:65:-124.85,-19.58,-125.50:99
-chr1 2872997 rs10909848 G T 338.03 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=59.67;MQ0=0;OQ=904.50;QD=15.87;SB=-468.05 GT:AD:DP:GL:GQ 0/1:25,32:54:-110.00,-16.27,-78.02:99
-chr1 2873890 . G C 11.21 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=4;HaplotypeScore=5.27;MQ=55.45;MQ0=0;QD=0.59;SB=14.08 GT:AD:DP:GL:GQ 0/1:10,9:11:-7.69,-3.32,-38.19:43.71
-chr1 2874116 rs2993507 T C 16.38 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=58.76;MQ0=0;OQ=1405.38;QD=31.23;SB=-680.25 GT:AD:DP:GL:GQ 1/1:0,45:40:-144.14,-12.05,-0.01:99
-chr1 2876216 rs2842925 A G 411.29 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1144.93;QD=30.13;SB=-502.20 GT:AD:DP:GL:GQ 1/1:0,38:36:-118.11,-10.86,-0.03:99
-chr1 2876326 rs12752801 C T 372.85 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.51;MQ0=0;OQ=555.75;QD=11.82;SB=-279.71 GT:AD:DP:GL:GQ 0/1:29,18:46:-72.72,-13.86,-94.69:99
-chr1 2876664 rs1104934 C T 153.01 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.11;MQ0=0;OQ=873.37;QD=18.58;SB=-376.40 GT:AD:DP:GL:GQ 0/1:19,28:45:-104.19,-13.57,-58.40:99
-chr1 2876848 rs4072769 G A 397.29 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.29;MQ0=0;OQ=569.53;QD=13.56;SB=-264.25 GT:AD:DP:GL:GQ 0/1:22,20:41:-72.60,-12.36,-71.89:99
-chr1 2877278 rs12731895 T A 88.65 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.47;MQ0=0;OQ=1142.36;QD=32.64;SB=-433.66 GT:AD:DP:GL:GQ 1/1:0,35:33:-117.84,-9.95,-0.02:99
-chr1 2877329 rs12727338 A G 1.05 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=6.87;MQ=57.26;MQ0=0;OQ=1138.52;QD=25.30;SB=-341.40 GT:AD:DP:GL:GQ 1/1:0,45:36:-117.47,-10.86,-0.03:99
-chr1 2877535 rs4648443 G C 93.54 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=59.43;MQ0=0;OQ=1023.89;QD=31.03;SB=-246.78 GT:AD:DP:GL:GQ 1/1:0,33:28:-106.01,-8.47,-0.04:84.26
-chr1 2878321 rs10797371 T C 561.61 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=1137.37;QD=29.16;SB=-576.99 GT:AD:DP:GL:GQ 1/1:0,39:37:-117.36,-11.16,-0.04:99
-chr1 2878374 rs10797372 A G 151.87 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.80;MQ0=0;OQ=958.51;QD=27.39;SB=-485.14 GT:AD:DP:GL:GQ 1/1:0,35:31:-99.47,-9.35,-0.03:93.21
-chr1 2878478 rs57027760 G T 756.85 Indel AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=16.93;MQ=60.84;MQ0=0;QD=20.46;SB=-136.60 GT:AD:DP:GL:GQ 0/1:7,30:29:-87.69,-8.74,-9.78:10.36
-chr1 2879008 rs56619891 G A 46.74 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=58.68;MQ0=0;OQ=1774.48;QD=38.58;SB=-601.31 GT:AD:DP:GL:GQ 1/1:0,46:45:-181.04,-13.56,-0.01:99
-chr1 2879409 rs2495273 T A 230.62 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=58.81;MQ0=0;OQ=1962.54;QD=35.68;SB=-1002.53 GT:AD:DP:GL:GQ 1/1:0,55:54:-199.86,-16.27,-0.02:99
-chr1 2879437 rs12044030 C T 157.06 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.24;MQ=58.72;MQ0=0;OQ=1987.31;QD=38.97;SB=-989.84 GT:AD:DP:GL:GQ 1/1:0,51:51:-202.33,-15.37,-0.02:99
-chr1 2880205 rs4648445 G A 0.49 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=7.53;MQ=59.36;MQ0=0;OQ=1380.04;QD=38.33;SB=-528.20 GT:AD:DP:GL:GQ 1/1:1,35:35:-141.60,-10.54,-0.01:99
-chr1 2880574 rs4648446 C T 93.96 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=58.80;MQ0=0;OQ=2154.57;QD=37.15;SB=-942.74 GT:AD:DP:GL:GQ 1/1:0,58:56:-219.07,-16.88,-0.03:99
-chr1 2880814 rs35060945 G T 115.68 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.36;MQ0=0;OQ=1511.10;QD=32.85;SB=-647.26 GT:AD:DP:GL:GQ 1/1:0,46:43:-154.71,-12.95,-0.02:99
-chr1 2880975 rs9661752 C T 171.39 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=57.35;MQ0=0;OQ=1967.63;QD=36.44;SB=-881.18 GT:AD:DP:GL:GQ 1/1:0,54:51:-200.37,-15.37,-0.02:99
-chr1 2880988 rs35377179 C A 115.57 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=57.03;MQ0=0;OQ=1298.02;QD=29.50;SB=-650.95 GT:AD:DP:GL:GQ 1/1:1,43:37:-133.40,-11.15,-0.01:99
-chr1 2881030 . C A 0.40 PASS AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=3.41;MQ=54.52;MQ0=1;OQ=214.49;QD=8.25;SB=26.09 GT:AD:DP:GL:GQ 0/1:17,8:22:-34.34,-9.60,-47.09:99
-chr1 2881446 rs12046122 C A 164.77 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=56.73;MQ0=0;OQ=1555.86;QD=34.57;SB=-803.87 GT:AD:DP:GL:GQ 1/1:0,45:44:-159.18,-13.25,-0.01:99
-chr1 2881573 rs12046158 C T 78.52 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=1075.02;QD=38.39;SB=-495.01 GT:AD:DP:GL:GQ 1/1:0,28:28:-111.09,-8.43,-0.01:84.27
-chr1 2882784 rs12096719 A G 679.62 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.77;MQ0=0;OQ=1529.67;QD=33.99;SB=-756.19 GT:AD:DP:GL:GQ 1/1:0,45:44:-156.57,-13.25,-0.01:99
-chr1 2883117 rs34709641 C A 0.13 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=10.20;MQ=27.00;MQ0=0;OQ=541.23;QD=24.60;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,21:16:-57.72,-4.82,-0.01:48.13
-chr1 2883336 . T C 0.07 PASS AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=28.41;MQ0=1;OQ=55.83;QD=2.15;SB=35.13 GT:AD:DP:GL:GQ 0/1:19,7:19:-14.60,-5.73,-55.04:88.67
-chr1 2883474 . C T 16.42 PASS AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=19.09;MQ0=3;OQ=91.28;QD=9.13;SB=-10.00 GT:AD:DP:GL:GQ 1/1:6,3:4:-15.26,-3.77,-2.60:11.70
-chr1 2883529 . A G 32.82 LowQual AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=16.58;MQ0=2;QD=4.69;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:2:-6.69,-0.60,-0.00:6.01
-chr1 2883801 . G C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.62;MQ=34.13;MQ0=1;OQ=549.05;QD=22.88;SB=-205.68 GT:AD:DP:GL:GQ 0/1:3,21:17:-63.31,-5.13,-9.19:40.68
-chr1 2883821 . C G 1.10 PASS AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=5.35;MQ=22.36;MQ0=5;OQ=186.32;QD=8.47;SB=-39.88 GT:AD:DP:GL:GQ 0/1:7,15:10:-24.93,-3.02,-15.34:99
-chr1 2883940 . C G 0.08 PASS AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=7.32;MQ=24.85;MQ0=3;OQ=119.37;QD=7.02;SB=-3.99 GT:AD:DP:GL:GQ 0/1:4,13:7:-17.34,-2.12,-7.20:50.86
-chr1 2883991 . G A 9.80 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=39.91;MQ0=4;OQ=393.88;QD=7.16;SB=-196.17 GT:AD:DP:GL:GQ 0/1:36,19:38:-54.13,-11.46,-77.08:99
-chr1 2884111 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=5.45;MQ=48.57;MQ0=0;OQ=67.53;QD=1.73;SB=-58.84 GT:AD:DP:GL:GQ 0/1:29,10:26:-17.87,-7.84,-79.49:99
-chr1 2884204 . C G 13.82 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=48;Dels=0.02;HRun=0;HaplotypeScore=10.52;MQ=37.87;MQ0=5;QD=0.29;SB=17.09 GT:AD:DP:GL:GQ 0/1:44,3:31:-13.69,-9.05,-110.48:46.47
-chr1 2884224 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=7.14;MQ=33.65;MQ0=6;OQ=99.62;QD=2.69;SB=-73.89 GT:AD:DP:GL:GQ 0/1:22,14:21:-19.58,-6.34,-62.85:99
-chr1 2884275 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=8.64;MQ=43.29;MQ0=0;OQ=54.38;QD=1.36;SB=23.10 GT:AD:DP:GL:GQ 0/1:34,6:34:-18.98,-10.26,-119.97:87.22
-chr1 2884325 . G C 41.80 PASS AC=2;AF=1.00;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=49.14;MQ0=0;OQ=1253.36;QD=33.87;SB=-646.42 GT:AD:DP:GL:GQ 1/1:0,37:34:-128.97,-10.28,-0.05:99
-chr1 2885060 rs63721360 G T 452.04 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1106.85;QD=29.13;SB=-549.16 GT:AD:DP:GL:GQ 1/1:0,38:32:-114.28,-9.64,-0.01:96.27
-chr1 2885413 rs34183832 C T 53.59 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=1297.32;QD=37.07;SB=-499.18 GT:AD:DP:GL:GQ 1/1:0,35:34:-133.33,-10.25,-0.01:99
-chr1 2885666 rs12746525 C T 345.32 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.87;MQ0=0;OQ=771.21;QD=35.05;SB=-307.40 GT:AD:DP:GL:GQ 1/1:0,22:21:-80.72,-6.33,-0.01:63.20
-chr1 2885725 rs12731464 G A 43.96 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.36;MQ0=0;OQ=1296.44;QD=36.01;SB=-473.63 GT:AD:DP:GL:GQ 1/1:0,36:34:-133.24,-10.25,-0.01:99
-chr1 2885912 rs12746985 C T 116.03 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.54;MQ0=0;OQ=1570.34;QD=38.30;SB=-739.01 GT:AD:DP:GL:GQ 1/1:0,40:40:-160.63,-12.05,-0.01:99
-chr1 2886057 rs12747179 C G 228.04 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1558.47;QD=39.96;SB=-692.89 GT:AD:DP:GL:GQ 1/1:0,39:37:-159.45,-11.15,-0.01:99
-chr1 2886368 rs7519674 G T 104.99 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=58.92;MQ0=0;OQ=1251.61;QD=32.09;SB=-486.26 GT:AD:DP:GL:GQ 1/1:0,39:37:-128.76,-11.15,-0.02:99
-chr1 2886595 rs7533362 A G 145.09 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=59.61;MQ0=0;OQ=2108.67;QD=35.74;SB=-1026.73 GT:AD:DP:GL:GQ 1/1:0,59:59:-214.47,-17.77,-0.02:99
-chr1 2886944 rs10909849 A G 437.20 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.80;MQ0=0;OQ=1258.82;QD=27.97;SB=-649.76 GT:AD:DP:GL:GQ 1/1:0,45:41:-129.52,-12.37,-0.05:99
-chr1 2886953 rs2788088 G A 571.84 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.80;MQ0=0;OQ=615.00;QD=13.67;SB=-320.48 GT:AD:DP:GL:GQ 0/1:23,22:41:-77.15,-12.37,-67.43:99
-chr1 2887315 rs3001801 T C 293.49 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.55;MQ0=0;OQ=285.37;QD=12.41;SB=-113.63 GT:AD:DP:GL:GQ 0/1:11,12:22:-38.45,-6.63,-44.08:99
-chr1 2887325 rs2495272 A G 0.48 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=3;HaplotypeScore=1.25;MQ=56.85;MQ0=0;OQ=451.51;QD=25.08;SB=-251.59 GT:AD:DP:GL:GQ 1/1:0,18:15:-48.75,-4.52,-0.01:45.11
-chr1 2887439 . A G 0.37 PASS AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=3.88;MQ=55.21;MQ0=0;OQ=257.68;QD=9.20;SB=-92.00 GT:AD:DP:GL:GQ 0/1:17,11:26:-36.89,-7.84,-61.45:99
-chr1 2887454 . A G 0.28 PASS AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=2;HaplotypeScore=5.31;MQ=55.54;MQ0=0;OQ=380.48;QD=12.68;SB=-84.99 GT:AD:DP:GL:GQ 0/1:15,15:27:-49.47,-8.14,-52.46:99
-chr1 2887461 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=56.64;MQ0=0;OQ=82.14;QD=2.65;SB=-24.50 GT:AD:DP:GL:GQ 0/1:26,5:30:-20.54,-9.04,-87.21:99
-chr1 2887469 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=10.99;MQ=56.64;MQ0=0;OQ=56.39;QD=1.82;SB=-10.59 GT:AD:DP:GL:GQ 0/1:26,5:30:-17.96,-9.04,-99.17:89.23
-chr1 2887476 rs61763639 G A 1.06 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=10.80;MQ=56.85;MQ0=0;OQ=400.87;QD=12.15;SB=-209.95 GT:AD:DP:GL:GQ 0/1:19,13:29:-55.44,-12.07,-58.42:99
-chr1 2887567 rs61763640 G C 352.27 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=547.00;QD=15.63;SB=-239.40 GT:AD:DP:GL:GQ 0/1:19,16:35:-68.53,-10.55,-82.14:99
-chr1 2887764 rs35529252 C G 80.76 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=1.06;MQ=57.39;MQ0=0;OQ=226.67;QD=8.40;SB=2.03 GT:AD:DP:GL:GQ 0/1:18,9:23:-32.89,-6.94,-62.31:99
-chr1 2887828 rs56335850 C G 110.15 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=4.16;MQ=58.45;MQ0=0;OQ=748.06;QD=17.40;SB=-393.99 GT:AD:DP:GL:GQ 0/1:21,22:42:-90.75,-12.66,-91.15:99
-chr1 2888083 rs56195961 C T 7.84 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.95;MQ=60.00;MQ0=0;OQ=1112.19;QD=20.22;SB=-391.16 GT:AD:DP:GL:GQ 0/1:22,33:55:-131.08,-16.58,-71.48:99
-chr1 2888354 rs17391563 T C 531.46 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=612.67;QD=11.56;SB=-261.21 GT:AD:DP:GL:GQ 0/1:27,26:52:-80.22,-15.67,-108.53:99
-chr1 2888416 rs6681331 C T 397.61 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.62;MQ0=0;OQ=831.46;QD=13.63;SB=-416.81 GT:AD:DP:GL:GQ 0/1:34,27:59:-104.22,-17.79,-102.21:99
-chr1 2888820 rs6681741 C T 399.97 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=909.46;QD=13.78;SB=-406.91 GT:AD:DP:GL:GQ 0/1:37,29:64:-113.53,-19.30,-110.49:99
-chr1 2889209 rs12043738 C T 43 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=2.99;MQ=59.70;MQ0=0;OQ=782.92;QD=12.63;SB=-392.82 GT:AD:DP:GL:GQ 0/1:36,26:56:-98.47,-16.89,-96.75:99
-chr1 2889348 rs12046140 T C 210.74 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=58.78;MQ0=0;OQ=758.51;QD=11.67;SB=-309.09 GT:AD:DP:GL:GQ 0/1:33,31:62:-97.83,-18.69,-124.67:99
-chr1 2891988 rs1572657 C T 224.13 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=58.69;MQ0=0;OQ=1966.14;QD=39.32;SB=-982.30 GT:AD:DP:GL:GQ 1/1:0,50:49:-200.21,-14.76,-0.01:99
-chr1 2893019 rs16823303 A G 473.80 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1016.72;QD=15.17;SB=-513.96 GT:AD:DP:GL:GQ 0/1:31,36:67:-125.14,-20.19,-125.83:99
-chr1 2893437 rs4350139 T C 494.03 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=627.58;QD=13.35;SB=-219.43 GT:AD:DP:GL:GQ 0/1:23,24:46:-79.90,-13.86,-93.15:99
-chr1 2893916 rs10797373 G A 257.26 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.18;MQ=59.61;MQ0=0;OQ=845.53;QD=14.33;SB=-302.29 GT:AD:DP:GL:GQ 0/1:31,28:56:-104.72,-16.88,-95.11:99
-chr1 2895465 rs10909852 T C 196.72 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=3.24;MQ=59.46;MQ0=0;OQ=1273.07;QD=16.32;SB=-516.27 GT:AD:DP:GL:GQ 0/1:36,42:76:-153.48,-22.89,-141.76:99
-chr1 2897295 rs7546695 C A 472.44 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.44;MQ0=0;OQ=1069.83;QD=15.97;SB=-543.65 GT:AD:DP:GL:GQ 0/1:30,37:66:-130.15,-19.88,-106.29:99
-chr1 2897527 rs12411019 T C 97.34 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.42;MQ0=0;OQ=164.92;QD=5.15;SB=-60.30 GT:AD:DP:GL:GQ 0/1:21,11:29:-28.52,-8.74,-78.99:99
-chr1 2897840 rs58882615 A T 78.36 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=58.81;MQ0=0;OQ=696.78;QD=12.67;SB=-96.85 GT:AD:DP:GL:GQ 0/1:28,27:52:-88.62,-15.66,-107.99:99
-chr1 2897930 rs10909854 A G 302.68 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=59.44;MQ0=0;OQ=922.43;QD=11.25;SB=-327.10 GT:AD:DP:GL:GQ 0/1:45,37:81:-119.94,-24.41,-179.92:99
-chr1 2898248 rs10909855 C T 438.64 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.39;MQ0=0;OQ=1131.76;QD=16.40;SB=-432.83 GT:AD:DP:GL:GQ 0/1:34,35:68:-136.95,-20.49,-112.64:99
-chr1 2898666 . G A 72.98 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=60.00;MQ0=0;OQ=1136.24;QD=18.33;SB=-578.42 GT:AD:DP:GL:GQ 0/1:27,35:58:-134.38,-17.48,-83.03:99
-chr1 2898708 rs56000855 G T 262.99 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=393.56;QD=10.09;SB=-213.51 GT:AD:DP:GL:GQ 0/1:23,16:38:-54.09,-11.45,-79.61:99
-chr1 2899110 rs16823315 A G 251.56 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.58;MQ=58.82;MQ0=0;OQ=851.48;QD=14.43;SB=-403.32 GT:AD:DP:GL:GQ 0/1:28,31:58:-105.90,-17.47,-115.59:99
-chr1 2899231 rs17391750 G A 437.47 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=1161.97;QD=13.51;SB=-467.04 GT:AD:DP:GL:GQ 0/1:50,36:85:-145.10,-25.62,-160.28:99
-chr1 2899576 rs4335321 A G 105.18 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=58.00;MQ0=0;OQ=946.55;QD=13.52;SB=-144.87 GT:AD:DP:GL:GQ 0/1:37,33:68:-118.42,-20.48,-143.93:99
-chr1 2899597 . A T 1.69 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=3.60;MQ=57.30;MQ0=0;OQ=711.73;QD=11.67;SB=-108.79 GT:AD:DP:GL:GQ 0/1:34,27:58:-91.93,-17.47,-124.49:99
-chr1 2899698 . C A 3.06 PASS AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=964.27;QD=14.39;SB=-495.28 GT:AD:DP:GL:GQ 0/1:34,33:65:-119.29,-19.58,-112.82:99
-chr1 2899893 . T C 127.63 PASS AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.77;MQ=59.43;MQ0=0;OQ=700.47;QD=10.61;SB=-280.59 GT:AD:DP:GL:GQ 0/1:36,30:65:-92.92,-19.59,-144.88:99
-chr1 2900185 rs57720952 A G 235.22 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.13;MQ0=0;OQ=624.52;QD=11.78;SB=-194.60 GT:AD:DP:GL:GQ 0/1:27,26:53:-81.72,-15.98,-107.90:99
-chr1 2900204 rs58538272 A G 481.46 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=755.97;QD=13.50;SB=-350.98 GT:AD:DP:GL:GQ 0/1:26,30:55:-95.46,-16.58,-99.09:99
-chr1 2900256 rs60017523 T C 269.60 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.37;MQ0=0;OQ=740.61;QD=11.22;SB=-378.62 GT:AD:DP:GL:GQ 0/1:33,33:62:-96.04,-18.69,-126.33:99
-chr1 2901217 rs58445466 T C 331.41 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=47.93;MQ0=0;OQ=860.37;QD=15.36;SB=-212.50 GT:AD:DP:GL:GQ 0/1:26,30:54:-105.58,-16.26,-101.98:99
-chr1 2901454 rs56337009 G A 18.57 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=49.33;MQ0=1;OQ=975.13;QD=34.83;SB=-240.32 GT:AD:DP:GL:GQ 1/1:2,26:25:-101.11,-7.53,-0.01:75.24
-chr1 2902060 rs12022594 C T 230.71 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=53.29;MQ0=0;OQ=1320.21;QD=14.67;SB=-682.37 GT:AD:DP:GL:GQ 0/1:48,42:84:-160.62,-25.31,-148.07:99
-chr1 2902087 rs12059864 C T 220.44 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=55.08;MQ0=0;OQ=1120.96;QD=14.95;SB=-477.46 GT:AD:DP:GL:GQ 0/1:41,34:69:-136.16,-20.78,-131.24:99
-chr1 2902707 rs10909856 T C 237.57 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=59.08;MQ0=0;OQ=1121.38;QD=13.04;SB=-473.58 GT:AD:DP:GL:GQ 0/1:47,39:85:-141.02,-25.60,-190.53:99
-chr1 2902862 rs12401989 C A 536.26 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=929.32;QD=11.47;SB=-426.42 GT:AD:DP:GL:GQ 0/1:49,32:81:-120.61,-24.40,-176.66:99
-chr1 2903095 rs60435231 A G 179.93 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=2.39;MQ=59.67;MQ0=0;OQ=920.63;QD=13.15;SB=-378.56 GT:AD:DP:GL:GQ 0/1:39,31:70:-116.43,-21.08,-161.00:99
-chr1 2903159 rs59407673 T C 419.08 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=752.64;QD=11.07;SB=-260.51 GT:AD:DP:GL:GQ 0/1:41,27:66:-98.43,-19.88,-155.58:99
-chr1 2903756 . C T 100.01 PASS AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.38;MQ0=0;OQ=1160.57;QD=15.47;SB=-488.46 GT:AD:DP:GL:GQ 0/1:41,34:75:-141.93,-22.59,-152.72:99
-chr1 2903757 . C T 97.23 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.38;MQ0=0;OQ=1040.83;QD=14.07;SB=-405.37 GT:AD:DP:GL:GQ 0/1:41,33:72:-129.05,-21.68,-151.62:99
-chr1 2903785 . C T 13.14 PASS AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=3;HaplotypeScore=0.97;MQ=59.68;MQ0=0;OQ=1201.38;QD=16.69;SB=-623.18 GT:AD:DP:GL:GQ 0/1:36,36:71:-144.81,-21.39,-125.25:99
-chr1 2904148 rs34909435 G C 261.36 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.06;MQ0=0;OQ=923.50;QD=16.20;SB=-375.83 GT:AD:DP:GL:GQ 0/1:30,27:56:-112.51,-16.88,-128.89:99
-chr1 2904478 rs34453862 G T 153.72 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.73;MQ=59.34;MQ0=0;OQ=843.87;QD=14.80;SB=-424.19 GT:AD:DP:GL:GQ 0/1:29,28:55:-104.24,-16.57,-85.73:99
-chr1 2904922 . G A 6.65 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=986.03;QD=18.26;SB=-298.76 GT:AD:DP:GL:GQ 0/1:24,30:53:-117.86,-15.97,-81.07:99
-chr1 2904988 . G T 192.75 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.69;MQ0=0;OQ=850.19;QD=14.17;SB=-430.19 GT:AD:DP:GL:GQ 0/1:30,30:56:-105.17,-16.87,-90.14:99
-chr1 2905123 rs12049173 C A 190.89 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.62;MQ0=0;OQ=810.47;QD=14.22;SB=-367.40 GT:AD:DP:GL:GQ 0/1:30,27:57:-101.50,-17.17,-107.52:99
-chr1 2905133 rs12046411 G A 347.03 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.57;MQ0=0;OQ=1037.17;QD=16.73;SB=-437.83 GT:AD:DP:GL:GQ 0/1:30,32:59:-124.78,-17.78,-92.83:99
-chr1 2905422 rs12049274 C T 603.53 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.95;MQ0=0;OQ=930.71;QD=16.05;SB=-490.47 GT:AD:DP:GL:GQ 0/1:30,28:58:-113.82,-17.47,-110.72:99
-chr1 2905744 . G A 180.07 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=873.90;QD=13.87;SB=-441.80 GT:AD:DP:GL:GQ 0/1:36,27:62:-109.35,-18.68,-126.71:99
-chr1 2905997 rs12239064 T G 232.27 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=59.60;MQ0=0;OQ=846.38;QD=14.85;SB=-338.82 GT:AD:DP:GL:GQ 0/1:27,30:56:-104.79,-16.87,-99.38:99
-chr1 2906020 rs12240128 G A 259.44 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=59.61;MQ0=0;OQ=950.01;QD=16.10;SB=-410.72 GT:AD:DP:GL:GQ 0/1:30,29:59:-116.06,-17.77,-109.83:99
-chr1 2906205 . C T 60.99 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=59.51;MQ0=0;OQ=509.22;QD=13.40;SB=-258.23 GT:AD:DP:GL:GQ 0/1:18,20:34:-64.46,-10.25,-58.74:99
-chr1 2906216 rs59653178 T C 119.56 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.26;MQ=59.54;MQ0=0;OQ=444.86;QD=10.85;SB=-210.25 GT:AD:DP:GL:GQ 0/1:22,19:37:-58.92,-11.15,-79.90:99
-chr1 2906318 . G C 294.79 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=687.54;QD=14.03;SB=-349.42 GT:AD:DP:GL:GQ 0/1:28,21:48:-86.50,-14.46,-122.06:99
-chr1 2906331 . T C 64.13 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=486.38;QD=9.01;SB=-239.89 GT:AD:DP:GL:GQ 0/1:34,20:53:-67.89,-15.97,-133.79:99
-chr1 2906530 rs16823325 A G 170.42 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=627.60;QD=14.26;SB=-219.26 GT:AD:DP:GL:GQ 0/1:22,22:44:-79.30,-13.26,-90.47:99
-chr1 2906541 rs57711454 A G 139.66 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.54;MQ0=0;OQ=394.78;QD=7.90;SB=-84.54 GT:AD:DP:GL:GQ 0/1:29,20:47:-56.93,-14.17,-116.48:99
-chr1 2906996 rs10909857 T C 66.55 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.62;MQ=57.79;MQ0=0;OQ=652.62;QD=12.31;SB=-287.16 GT:AD:DP:GL:GQ 0/1:27,26:51:-83.92,-15.38,-97.87:99
-chr1 2907051 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=17;HaplotypeScore=24.33;MQ=55.91;MQ0=0;OQ=72.31;QD=0.98;SB=54.68 GT:AD:DP:GL:GQ 0/1:56,17:51:-25.89,-15.37,-146.19:99
-chr1 2907237 rs12025260 T C 432.13 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.22;MQ0=0;OQ=586.66;QD=11.73;SB=-318.24 GT:AD:DP:GL:GQ 0/1:25,25:46:-75.82,-13.87,-89.45:99
-chr1 2907320 rs10797374 C G 183.78 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=56.79;MQ0=0;OQ=866.79;QD=16.35;SB=-401.99 GT:AD:DP:GL:GQ 0/1:26,27:47:-104.13,-14.17,-96.80:99
-chr1 2907323 rs10797375 C T 107.89 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=56.36;MQ0=0;OQ=897.14;QD=16.31;SB=-320.30 GT:AD:DP:GL:GQ 0/1:27,28:53:-108.97,-15.97,-91.39:99
-chr1 2907332 rs10797376 A G 569.46 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.97;MQ0=0;OQ=769.31;QD=13.26;SB=-314.20 GT:AD:DP:GL:GQ 0/1:28,30:54:-96.49,-16.28,-97.60:99
-chr1 2907425 rs17389607 C T 13.36 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=8.86;MQ=57.83;MQ0=0;OQ=822.69;QD=15.82;SB=-373.37 GT:AD:DP:GL:GQ 0/1:24,28:48:-100.02,-14.47,-70.94:99
-chr1 2907558 rs10909859 C T 467.69 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=759.55;QD=17.26;SB=-317.87 GT:AD:DP:GL:GQ 0/1:21,23:40:-91.30,-12.06,-54.32:99
-chr1 2907881 rs56008028 A G 101.20 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=60.00;MQ0=0;OQ=314.58;QD=9.83;SB=-73.78 GT:AD:DP:GL:GQ 0/1:16,16:27:-42.88,-8.14,-52.46:99
-chr1 2908045 rs12562237 C T 38.60 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=3.04;MQ=57.73;MQ0=0;OQ=402.69;QD=12.99;SB=-180.26 GT:AD:DP:GL:GQ 0/1:14,17:26:-51.39,-7.84,-42.83:99
-chr1 2908055 rs3924055 G A 76.12 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=57.57;MQ0=0;OQ=483.15;QD=16.66;SB=-242.76 GT:AD:DP:GL:GQ 0/1:13,16:26:-59.44,-7.84,-34.72:99
-chr1 2908089 rs16823330 C T 124.82 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.14;MQ0=0;OQ=508.46;QD=18.83;SB=-215.91 GT:AD:DP:GL:GQ 0/1:11,16:27:-62.27,-8.14,-34.10:99
-chr1 2908371 . G A 74.23 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.57;MQ0=0;OQ=788.94;QD=18.35;SB=-397.93 GT:AD:DP:GL:GQ 0/1:18,24:36:-93.03,-10.85,-43.26:99
-chr1 2908432 . T C 8.81 PASS AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=56.92;MQ0=0;OQ=358.32;QD=15.58;SB=-114.66 GT:AD:DP:GL:GQ 0/1:9,14:19:-44.84,-5.73,-23.69:99
-chr1 2908471 . G A 46.40 LowQual AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=4.79;MQ=51.77;MQ0=0;QD=1.93;SB=-32.97 GT:AD:DP:GL:GQ 0/1:20,4:22:-14.55,-6.63,-62.87:79.23
-chr1 2908486 . G A 26.78 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=9.20;MQ=53.95;MQ0=0;QD=1.12;SB=-23.58 GT:AD:DP:GL:GQ 0/1:21,3:20:-11.99,-6.02,-60.39:59.60
-chr1 2908487 . G A 23.81 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=9.20;MQ=53.95;MQ0=0;QD=0.99;SB=-23.59 GT:AD:DP:GL:GQ 0/1:21,3:20:-11.69,-6.03,-57.69:56.63
-chr1 2908489 rs7413322 A G 127.27 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=7.20;MQ=53.67;MQ0=0;QD=5.53;SB=-41.81 GT:AD:DP:GL:GQ 0/1:15,7:21:-22.34,-6.33,-53.28:99
-chr1 2908502 . G A 0.58 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=3.89;MQ=54.56;MQ0=0;OQ=132.59;QD=4.28;SB=-84.55 GT:AD:DP:GL:GQ 0/1:22,9:26:-24.37,-7.83,-71.82:99
-chr1 2908503 . G A 2.61 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=3.89;MQ=54.56;MQ0=0;OQ=189.68;QD=6.12;SB=-101.89 GT:AD:DP:GL:GQ 0/1:22,9:28:-30.69,-8.44,-70.32:99
-chr1 2908532 . T C 3.50 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.76;MQ=54.67;MQ0=0;OQ=250.55;QD=6.77;SB=-66.91 GT:AD:DP:GL:GQ 0/1:24,13:35:-38.89,-10.55,-92.28:99
-chr1 2908533 . G A 0.93 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=4.66;MQ=54.15;MQ0=0;OQ=217.08;QD=5.71;SB=-54.22 GT:AD:DP:GL:GQ 0/1:25,13:33:-34.93,-9.94,-84.25:99
-chr1 2908644 . G A 90.84 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.24;MQ=55.47;MQ0=0;OQ=799.27;QD=15.67;SB=-377.10 GT:AD:DP:GL:GQ 0/1:25,26:51:-98.58,-15.37,-88.82:99
-chr1 2908650 . T C 65.40 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=55.56;MQ0=0;OQ=744.55;QD=14.32;SB=-322.26 GT:AD:DP:GL:GQ 0/1:26,26:52:-93.41,-15.67,-101.68:99
-chr1 2908671 . T C 96.67 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=55.57;MQ0=0;OQ=663.38;QD=13.01;SB=-328.92 GT:AD:DP:GL:GQ 0/1:26,25:50:-84.69,-15.07,-101.18:99
-chr1 2908691 rs7524813 A G 287.06 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=53.53;MQ0=0;OQ=655.21;QD=13.10;SB=-352.07 GT:AD:DP:GL:GQ 0/1:22,28:47:-82.98,-14.17,-84.04:99
-chr1 2908767 . C T 11.79 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=50.29;MQ0=0;OQ=630.57;QD=18.02;SB=-203.89 GT:AD:DP:GL:GQ 0/1:14,21:32:-75.99,-9.65,-40.87:99
-chr1 2908798 rs7520336 C T 363.17 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=53.82;MQ0=0;OQ=459.08;QD=13.12;SB=-219.69 GT:AD:DP:GL:GQ 0/1:20,15:31:-58.54,-9.34,-53.07:99
-chr1 2909329 rs6424067 A G 0.51 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=3.24;MQ=54.59;MQ0=0;OQ=434.74;QD=9.88;SB=-243.29 GT:AD:DP:GL:GQ 0/1:26,18:41:-59.12,-12.36,-92.44:99
-chr1 2909490 rs12025062 C T 390.05 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.85;MQ0=0;OQ=616.92;QD=11.64;SB=-324.31 GT:AD:DP:GL:GQ 0/1:32,21:52:-80.64,-15.67,-112.78:99
-chr1 2909802 rs12022429 G A 318.87 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=605.69;QD=12.36;SB=-271.15 GT:AD:DP:GL:GQ 0/1:27,22:47:-78.02,-14.16,-93.88:99
-chr1 2909879 rs12025167 C T 200.91 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.12;MQ=58.32;MQ0=0;OQ=594.51;QD=15.24;SB=-283.81 GT:AD:DP:GL:GQ 0/1:20,19:35:-73.29,-10.56,-48.45:99
-chr1 2909902 rs12022456 G A 164.15 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.51;MQ=58.51;MQ0=0;OQ=722.60;QD=16.42;SB=-335.48 GT:AD:DP:GL:GQ 0/1:20,24:41:-87.91,-12.37,-56.64:99
-chr1 2910018 rs16823332 C T 243.36 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=942.08;QD=19.23;SB=-418.46 GT:AD:DP:GL:GQ 0/1:20,28:45:-111.06,-13.56,-54.54:99
-chr1 2910291 rs12066017 A G 366.01 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=575.67;QD=14.76;SB=-270.53 GT:AD:DP:GL:GQ 0/1:19,20:38:-72.30,-11.45,-69.20:99
-chr1 2911142 . G A 41.67 PASS AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.51;MQ=59.36;MQ0=0;OQ=1099.50;QD=16.92;SB=-501.68 GT:AD:DP:GL:GQ 0/1:32,33:61:-131.61,-18.38,-102.89:99
-chr1 2911277 . C G 44.53 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.86;MQ=58.95;MQ0=0;OQ=436.44;QD=10.91;SB=-233.06 GT:AD:DP:GL:GQ 0/1:26,14:40:-58.99,-12.06,-109.38:99
-chr1 2911306 . G C 234.71 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.10;MQ0=0;OQ=519.44;QD=14.04;SB=-251.08 GT:AD:DP:GL:GQ 0/1:21,16:36:-66.08,-10.85,-90.14:99
-chr1 2911720 rs16823335 G A 261.73 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=59.20;MQ0=0;OQ=681.92;QD=11.76;SB=-297.82 GT:AD:DP:GL:GQ 0/1:33,24:53:-87.45,-15.98,-100.90:99
-chr1 2912187 rs12028094 C T 355.65 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.31;MQ0=0;OQ=839.47;QD=15.55;SB=-427.81 GT:AD:DP:GL:GQ 0/1:28,26:51:-102.60,-15.37,-81.01:99
-chr1 2912604 rs10797377 G A 324.39 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=59.31;MQ0=0;OQ=1121.19;QD=18.38;SB=-566.38 GT:AD:DP:GL:GQ 0/1:27,34:59:-133.18,-17.78,-89.26:99
-chr1 2913061 . G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=14.44;MQ=58.67;MQ0=0;OQ=1557.84;QD=18.11;SB=-803.34 GT:AD:DP:GL:GQ 0/1:39,47:82:-183.77,-24.70,-131.16:99
-chr1 2913244 rs12063869 T A 356.59 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.21;MQ0=0;OQ=1259.24;QD=16.35;SB=-327.01 GT:AD:DP:GL:GQ 0/1:37,40:76:-152.10,-22.89,-141.13:99
-chr1 2913685 . T A 78.15 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=72;Dels=0.01;HRun=7;HaplotypeScore=10.99;MQ=58.04;MQ0=0;QD=1.09;SB=89.27 GT:AD:DP:GL:GQ 0/1:54,17:56:-27.67,-16.57,-168.58:99
-chr1 2914586 rs2889476 T C 86.82 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=59.50;MQ0=0;OQ=1018.41;QD=13.58;SB=-348.57 GT:AD:DP:GL:GQ 0/1:38,37:73:-127.11,-21.99,-156.39:99
-chr1 2915216 . C A 133.06 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=840.99;QD=15.57;SB=-328.03 GT:AD:DP:GL:GQ 0/1:26,28:54:-103.65,-16.27,-91.36:99
-chr1 2915282 rs946175 A G 382.87 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.34;MQ0=0;OQ=951.27;QD=13.59;SB=-404.30 GT:AD:DP:GL:GQ 0/1:37,33:69:-119.20,-20.78,-144.79:99
-chr1 2915357 rs946176 C T 193.41 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=60.00;MQ0=0;OQ=877.87;QD=15.14;SB=-352.31 GT:AD:DP:GL:GQ 0/1:30,28:58:-108.55,-17.48,-106.40:99
-chr1 2915382 rs946177 A G 311.86 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=60.00;MQ0=0;OQ=696.00;QD=12.21;SB=-254.19 GT:AD:DP:GL:GQ 0/1:29,28:55:-89.46,-16.58,-112.38:99
-chr1 2916239 rs2027262 T C 443.46 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=530.92;QD=9.65;SB=-168.92 GT:AD:DP:GL:GQ 0/1:28,27:51:-71.75,-15.38,-111.87:99
-chr1 2916397 rs2027263 A G 6.58 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=4.33;MQ=58.92;MQ0=0;OQ=1007.60;QD=17.99;SB=-520.31 GT:AD:DP:GL:GQ 0/1:22,34:54:-120.31,-16.27,-82.47:99
-chr1 2916415 rs2027264 G A 412.83 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=890.12;QD=17.45;SB=-464.45 GT:AD:DP:GL:GQ 0/1:23,27:49:-107.06,-14.77,-75.59:99
-chr1 2916645 . C T 34.34 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=56.98;MQ0=0;OQ=878.75;QD=16.90;SB=-242.23 GT:AD:DP:GL:GQ 0/1:24,28:50:-106.23,-15.07,-83.70:99
-chr1 2916833 rs11802804 T G 172.47 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=53.08;MQ0=1;OQ=929.71;QD=12.91;SB=-466.74 GT:AD:DP:GL:GQ 0/1:38,34:69:-117.04,-20.78,-128.73:99
-chr1 2916871 . T G 0.62 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=5.93;MQ=46.04;MQ0=1;OQ=612.93;QD=10.57;SB=-101.87 GT:AD:DP:GL:GQ 0/1:33,25:54:-80.84,-16.27,-108.92:99
-chr1 2916874 . G A 4.25 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=3.93;MQ=45.85;MQ0=1;OQ=812.26;QD=13.32;SB=-234.49 GT:AD:DP:GL:GQ 0/1:33,28:56:-101.38,-16.87,-110.18:99
-chr1 2917035 rs12028439 A G 6.74 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=4.28;MQ=54.23;MQ0=0;OQ=1040.90;QD=18.93;SB=-369.97 GT:AD:DP:GL:GQ 0/1:20,35:53:-123.34,-15.97,-76.66:99
-chr1 2917114 rs12024879 G A 187.61 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=55.08;MQ0=0;OQ=934.32;QD=17.30;SB=-362.51 GT:AD:DP:GL:GQ 0/1:25,29:52:-112.38,-15.67,-83.45:99
-chr1 2917331 rs12027818 C T 143.12 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=58.15;MQ0=1;OQ=1252.97;QD=20.21;SB=-536.07 GT:AD:DP:GL:GQ 0/1:25,37:61:-146.97,-18.38,-79.78:99
-chr1 2917538 rs12027883 C T 346.92 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=58.55;MQ0=0;OQ=1081.24;QD=14.42;SB=-345.82 GT:AD:DP:GL:GQ 0/1:42,33:74:-133.70,-22.29,-151.25:99
-chr1 2918836 rs6681651 C T 64.93 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=454.13;QD=15.66;SB=-29.51 GT:AD:DP:GL:GQ 0/1:13,16:27:-56.83,-8.14,-47.37:99
-chr1 2921187 rs6691208 C A 92.06 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=715.52;QD=11.36;SB=-355.27 GT:AD:DP:GL:GQ 0/1:37,26:61:-93.21,-18.38,-116.36:99
-chr1 2921274 rs4357486 G C 320.40 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=59.45;MQ0=0;OQ=673.44;QD=16.03;SB=-361.79 GT:AD:DP:GL:GQ 0/1:20,22:41:-83.00,-12.37,-84.03:99
-chr1 2921300 rs4486390 C T 182.10 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.96;MQ=59.45;MQ0=0;OQ=737.41;QD=17.56;SB=-360.43 GT:AD:DP:GL:GQ 0/1:18,24:38:-88.48,-11.46,-48.81:99
-chr1 2922007 rs59869348 T C 59.62 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.22;MQ=59.22;MQ0=0;OQ=864.59;QD=16.01;SB=-414.28 GT:AD:DP:GL:GQ 0/1:23,31:52:-105.41,-15.67,-90.49:99
-chr1 2922076 rs59041920 C T 58.92 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=4.59;MQ=59.36;MQ0=0;OQ=1222.53;QD=18.81;SB=-446.93 GT:AD:DP:GL:GQ 0/1:26,38:58:-143.01,-17.47,-78.18:99
-chr1 2922420 . C T 142.55 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=58.20;MQ0=0;OQ=828.62;QD=13.81;SB=-355.45 GT:AD:DP:GL:GQ 0/1:34,26:58:-103.62,-17.47,-119.28:99
-chr1 2922927 . A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=1;HaplotypeScore=3.70;MQ=45.44;MQ0=1;OQ=81.65;QD=2.92;SB=-41.94 GT:AD:DP:GL:GQ 0/1:20,8:20:-17.47,-6.02,-59.35:99
-chr1 2923073 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=21;Dels=0.05;HRun=1;HaplotypeScore=30.97;MQ=45.34;MQ0=0;OQ=111.92;QD=5.33;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,8:13:-18.39,-3.92,-26.21:99
-chr1 2923110 . A C 47.42 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=28.91;MQ=36.30;MQ0=0;QD=3.65;SB=5.05 GT:AD:DP:GL:GQ 0/1:6,4:10:-13.77,-5.74,-26.81:80.25
-chr1 2923762 rs6680573 C G 6.28 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=3.37;MQ=60.00;MQ0=0;OQ=313.93;QD=10.46;SB=-109.66 GT:AD:DP:GL:GQ 0/1:20,10:28:-43.13,-8.46,-67.50:99
-chr1 2924595 rs56200661 C T 138.23 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.81;MQ0=0;OQ=702.85;QD=18.02;SB=-315.84 GT:AD:DP:GL:GQ 0/1:17,22:37:-84.72,-11.16,-50.65:99
-chr1 2924706 . G A 66.14 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.09;MQ0=0;OQ=681.79;QD=16.63;SB=-295.78 GT:AD:DP:GL:GQ 0/1:19,22:39:-83.22,-11.75,-60.51:99
-chr1 2926246 rs12564456 C G 10.43 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=2.61;MQ=58.69;MQ0=0;OQ=646.12;QD=12.92;SB=-206.63 GT:AD:DP:GL:GQ 0/1:26,24:45:-81.49,-13.60,-94.41:99
-chr1 2926340 rs10752732 T C 133.80 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=58.78;MQ0=0;OQ=1282.63;QD=33.75;SB=-620.25 GT:AD:DP:GL:GQ 1/1:0,38:38:-131.87,-11.45,-0.02:99
-chr1 2926606 rs55949537 A T 46.15 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=3.14;MQ=59.67;MQ0=0;OQ=1017.41;QD=14.13;SB=-469.52 GT:AD:DP:GL:GQ 0/1:36,35:69:-125.81,-20.79,-130.04:99
-chr1 2926614 rs55784203 G T 254.87 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=59.65;MQ0=0;OQ=972.92;QD=14.31;SB=-412.15 GT:AD:DP:GL:GQ 0/1:33,35:66:-120.46,-19.89,-108.03:99
-chr1 2926663 rs56091202 A G 268.72 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=59.60;MQ0=0;OQ=738.64;QD=12.74;SB=-307.21 GT:AD:DP:GL:GQ 0/1:29,29:57:-94.32,-17.18,-112.23:99
-chr1 2926891 . A G 0.34 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=3;HaplotypeScore=3.44;MQ=59.42;MQ0=0;OQ=538.71;QD=11.22;SB=-143.63 GT:AD:DP:GL:GQ 0/1:27,21:47:-71.31,-14.16,-109.92:99
-chr1 2927088 rs61266721 G A 167.43 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=3.88;MQ=59.23;MQ0=0;OQ=1016.77;QD=16.95;SB=-453.45 GT:AD:DP:GL:GQ 0/1:30,30:57:-122.14,-17.18,-86.53:99
-chr1 2927410 rs12033927 A G 358.86 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=59.13;MQ0=0;OQ=706.05;QD=14.71;SB=-368.25 GT:AD:DP:GL:GQ 0/1:23,25:48:-88.35,-14.46,-94.54:99
-chr1 2927411 rs12034794 T G 337.44 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=59.15;MQ0=0;OQ=614.57;QD=12.54;SB=-294.80 GT:AD:DP:GL:GQ 0/1:24,25:47:-78.90,-14.16,-89.23:99
-chr1 2928125 rs4576609 C T 277.54 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=4.12;MQ=57.60;MQ0=0;OQ=875.52;QD=14.35;SB=-423.82 GT:AD:DP:GL:GQ 0/1:31,30:59:-108.62,-17.78,-98.44:99
-chr1 2928429 rs35806103 C T 10.78 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.15;MQ=59.80;MQ0=0;OQ=886.08;QD=19.69;SB=-315.84 GT:AD:DP:GL:GQ 0/1:17,27:42:-104.54,-12.65,-59.38:99
-chr1 2928557 rs3795262 T G 88 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.78;MQ0=0;OQ=296.95;QD=7.81;SB=-58.83 GT:AD:DP:GL:GQ 0/1:21,17:33:-42.92,-9.94,-74.02:99
-chr1 2928784 . T G 4.50 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.61;MQ=58.98;MQ0=0;OQ=615.11;QD=15.00;SB=-301.85 GT:AD:DP:GL:GQ 0/1:17,24:38:-76.24,-11.45,-59.09:99
-chr1 2929872 rs55873718 A G 218.87 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.73;MQ0=0;OQ=845.74;QD=10.07;SB=-404.66 GT:AD:DP:GL:GQ 0/1:48,36:83:-112.88,-25.02,-189.40:99
-chr1 2930858 rs56176404 A G 226.80 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.44;MQ0=0;OQ=1022.49;QD=13.82;SB=-491.10 GT:AD:DP:GL:GQ 0/1:38,36:73:-127.52,-21.99,-154.69:99
-chr1 2932289 rs55885250 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.04;HRun=0;HaplotypeScore=32.21;MQ=45.88;MQ0=1;OQ=148.06;QD=1.90;SB=104.37 GT:AD:DP:GL:GQ 0/1:58,16:68:-38.29,-20.20,-216.63:99
-chr1 2932299 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=92;Dels=0.02;HRun=0;HaplotypeScore=97.52;MQ=43.85;MQ0=0;OQ=59.90;QD=0.65;SB=104.31 GT:AD:DP:GL:GQ 0/1:78,12:69:-29.77,-20.49,-208.32:92.74
-chr1 2932325 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=91;Dels=0.02;HRun=1;HaplotypeScore=195.32;MQ=42.40;MQ0=0;OQ=612.63;QD=6.73;SB=-162.19 GT:AD:DP:GL:GQ 0/1:51,38:73:-86.24,-21.70,-183.14:99
-chr1 2932341 . A G 250.48 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=1;HaplotypeScore=40.55;MQ=40.81;MQ0=0;QD=2.04;SB=89.32 GT:AD:DP:GL:GQ 0/1:96,27:107:-60.57,-32.24,-364.33:99
-chr1 2932343 . G A 487.06 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=123;Dels=0.01;HRun=0;HaplotypeScore=44.00;MQ=40.81;MQ0=0;QD=3.96;SB=58.75 GT:AD:DP:GL:GQ 0/1:99,23:108:-84.22,-32.23,-314.56:99
-chr1 2932349 . G A 708.07 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=1;HaplotypeScore=35.72;MQ=40.62;MQ0=0;QD=5.80;SB=89.29 GT:AD:DP:GL:GQ 0/1:95,27:119:-109.94,-35.84,-335.64:99
-chr1 2932354 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=77.99;MQ=40.25;MQ0=0;OQ=691.65;QD=5.49;SB=86.28 GT:AD:DP:GL:GQ 0/1:97,29:123:-109.51,-37.06,-349.27:99
-chr1 2932376 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=2;HaplotypeScore=11.36;MQ=39.42;MQ0=0;OQ=679.31;QD=5.27;SB=92.31 GT:AD:DP:GL:GQ 0/1:96,32:117:-106.47,-35.26,-303.35:99
-chr1 2932379 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=125;Dels=0.01;HRun=1;HaplotypeScore=36.27;MQ=39.15;MQ0=0;OQ=716.76;QD=5.73;SB=92.27 GT:AD:DP:GL:GQ 0/1:94,28:121:-111.11,-36.16,-333.12:99
-chr1 2932387 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=36.67;MQ=38.20;MQ0=0;OQ=140.95;QD=1.25;SB=77.24 GT:AD:DP:GL:GQ 0/1:93,19:101:-47.83,-30.45,-304.67:99
-chr1 2932417 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=80.35;MQ=36.74;MQ0=0;OQ=291.45;QD=2.83;SB=86.26 GT:AD:DP:GL:GQ 0/1:76,27:77:-55.63,-23.21,-217.09:99
-chr1 2932437 . G A 14.74 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=80.96;MQ=35.05;MQ0=0;QD=0.16;SB=80.26 GT:AD:DP:GL:GQ 0/1:79,12:67:-24.93,-20.19,-214.14:47.43
-chr1 2932441 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=78.31;MQ=34.28;MQ0=0;OQ=251.61;QD=2.83;SB=77.24 GT:AD:DP:GL:GQ 0/1:70,19:66:-48.33,-19.89,-185.59:99
-chr1 2932450 rs55992205 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=52.98;MQ=32.53;MQ0=0;OQ=616.18;QD=7.16;SB=92.26 GT:AD:DP:GL:GQ 0/1:64,22:76:-87.80,-22.90,-186.06:99
-chr1 2932474 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=98;Dels=0.05;HRun=0;HaplotypeScore=121.87;MQ=31.47;MQ0=0;OQ=770.86;QD=7.87;SB=104.31 GT:AD:DP:GL:GQ 0/1:66,27:80:-104.48,-24.11,-189.46:99
-chr1 2932495 . A G 458.76 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=1;HaplotypeScore=104.10;MQ=35.05;MQ0=0;QD=4.59;SB=98.32 GT:AD:DP:GL:GQ 0/1:77,23:78:-72.67,-23.51,-220.09:99
-chr1 2932498 . G A 771.99 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=0;HaplotypeScore=85.95;MQ=35.28;MQ0=0;QD=8.04;SB=59.63 GT:AD:DP:GL:GQ 0/1:70,26:76:-103.38,-22.90,-174.72:99
-chr1 2932501 . G A 15.55 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=78.10;MQ=36.15;MQ0=0;QD=0.16;SB=-7.88 GT:AD:DP:GL:GQ 0/1:82,13:64:-24.12,-19.29,-198.59:48.26
-chr1 2932516 . A G 437.11 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=2;HaplotypeScore=90.55;MQ=38.01;MQ0=0;QD=4.37;SB=68.24 GT:AD:DP:GL:GQ 0/1:78,20:76:-69.30,-22.30,-207.20:99
-chr1 2932519 . A G 420.64 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=1;HaplotypeScore=127.72;MQ=37.64;MQ0=1;QD=3.72;SB=86.29 GT:AD:DP:GL:GQ 0/1:90,23:88:-71.87,-26.52,-261.50:99
-chr1 2932522 . A G 354.05 SnpCluster AC=1;AF=0.50;AN=2;DP=116;Dels=0.02;HRun=1;HaplotypeScore=155.74;MQ=37.22;MQ0=2;QD=3.05;SB=-178.30 GT:AD:DP:GL:GQ 0/1:89,24:100:-68.22,-29.53,-308.19:99
-chr1 2932531 . G A 40.28 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=127;Dels=0.02;HRun=0;HaplotypeScore=95.96;MQ=37.07;MQ0=3;QD=0.32;SB=-35.75 GT:AD:DP:GL:GQ 0/1:114,11:85:-32.32,-25.01,-255.84:73.11
-chr1 2932543 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=0;HaplotypeScore=90.42;MQ=36.51;MQ0=3;OQ=448.17;QD=3.59;SB=-29.75 GT:AD:DP:GL:GQ 0/1:94,23:99:-91.60,-43.50,-272.82:99
-chr1 2932549 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=1;HaplotypeScore=106.24;MQ=36.58;MQ0=3;OQ=776.41;QD=6.81;SB=20.21 GT:AD:DP:GL:GQ 0/1:80,34:91:-108.36,-27.43,-223.52:99
-chr1 2932558 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=87.01;MQ=36.91;MQ0=2;OQ=55.94;QD=0.53;SB=50.16 GT:AD:DP:GL:GQ 0/1:89,16:77:-32.08,-23.20,-238.58:88.78
-chr1 2932594 . A G 95.90 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=101;Dels=0.01;HRun=2;HaplotypeScore=79.79;MQ=37.41;MQ0=0;QD=0.95;SB=41.16 GT:AD:DP:GL:GQ 0/1:85,15:78:-36.37,-23.50,-267.93:99
-chr1 2932595 . G T 858.77 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=99;Dels=0.01;HRun=0;HaplotypeScore=92.92;MQ=37.56;MQ0=0;QD=8.67;SB=50.17 GT:AD:DP:GL:GQ 0/1:57,41:82:-113.86,-24.70,-181.24:99
-chr1 2932597 . A G 613.75 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=100;Dels=0.01;HRun=2;HaplotypeScore=83.48;MQ=37.85;MQ0=0;QD=6.14;SB=53.19 GT:AD:DP:GL:GQ 0/1:69,29:84:-89.97,-25.31,-224.02:99
-chr1 2932647 . A G 424.25 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=1;HaplotypeScore=36.34;MQ=40.26;MQ0=1;QD=3.82;SB=65.23 GT:AD:DP:GL:GQ 0/1:87,24:95:-74.33,-28.62,-285.65:99
-chr1 2932650 . G A 15.47 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=0;HaplotypeScore=35.26;MQ=39.92;MQ0=1;QD=0.13;SB=83.21 GT:AD:DP:GL:GQ 0/1:106,9:104:-36.16,-31.34,-318.46:48.18
-chr1 2932656 . G A 597.61 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=0;HaplotypeScore=41.23;MQ=39.70;MQ0=1;QD=5.24;SB=83.24 GT:AD:DP:GL:GQ 0/1:85,29:104:-94.39,-31.34,-268.84:99
-chr1 2932671 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=1;HaplotypeScore=55.64;MQ=38.11;MQ0=1;OQ=790.23;QD=6.17;SB=74.25 GT:AD:DP:GL:GQ 0/1:94,34:113:-116.34,-34.04,-292.03:99
-chr1 2932680 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=32.69;MQ=37.68;MQ0=1;OQ=1237.37;QD=9.67;SB=74.20 GT:AD:DP:GL:GQ 0/1:85,43:122:-163.79,-36.76,-270.86:99
-chr1 2932682 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=0;HaplotypeScore=26.80;MQ=37.61;MQ0=1;OQ=704.94;QD=5.42;SB=71.27 GT:AD:DP:GL:GQ 0/1:103,27:122:-110.54,-36.77,-411.49:99
-chr1 2932721 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=0;HaplotypeScore=36.50;MQ=39.93;MQ0=0;OQ=181.45;QD=1.51;SB=92.30 GT:AD:DP:GL:GQ 0/1:93,27:104:-52.76,-31.33,-321.47:99
-chr1 2932727 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=27.86;MQ=40.16;MQ0=0;OQ=588.52;QD=5.35;SB=83.30 GT:AD:DP:GL:GQ 0/1:83,27:109:-94.97,-32.83,-329.92:99
-chr1 2932738 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=1;HaplotypeScore=39.11;MQ=39.53;MQ0=0;OQ=873.00;QD=7.94;SB=74.25 GT:AD:DP:GL:GQ 0/1:74,36:108:-123.12,-32.54,-289.99:99
-chr1 2932769 . G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=7.13;MQ=40.78;MQ0=0;OQ=619.13;QD=6.59;SB=56.17 GT:AD:DP:GL:GQ 0/1:71,23:91:-92.61,-27.42,-231.77:99
-chr1 2933043 rs7412983 A C 563.74 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=861.61;QD=12.67;SB=-438.69 GT:AD:DP:GL:GQ 0/1:37,31:65:-109.02,-19.58,-126.93:99
-chr1 2933258 rs58265521 C A 261.91 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=59.67;MQ0=0;OQ=928.26;QD=16.29;SB=-439.21 GT:AD:DP:GL:GQ 0/1:24,33:53:-112.08,-15.97,-65.68:99
-chr1 2933528 rs60287244 A G 23.05 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=7.04;MQ=58.03;MQ0=0;OQ=739.69;QD=12.98;SB=-372.23 GT:AD:DP:GL:GQ 0/1:30,27:55:-93.82,-16.57,-116.71:99
-chr1 2933898 rs12034766 A G 35.30 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=1.69;MQ=58.27;MQ0=0;OQ=600.73;QD=11.12;SB=-275.56 GT:AD:DP:GL:GQ 0/1:26,28:51:-78.73,-15.38,-104.98:99
-chr1 2933946 rs12033401 C T 155.60 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.82;MQ=57.46;MQ0=0;OQ=525.20;QD=14.19;SB=-282.22 GT:AD:DP:GL:GQ 0/1:16,21:31:-65.15,-9.35,-44.32:99
-chr1 2934531 rs57893585 T A 124.36 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.24;MQ0=0;OQ=372.99;QD=15.54;SB=-168.83 GT:AD:DP:GL:GQ 0/1:10,14:21:-46.91,-6.33,-28.06:99
-chr1 2935764 rs12035292 C T 0.26 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=10.18;MQ=43.51;MQ0=2;OQ=248.84;QD=4.70;SB=-149.59 GT:AD:DP:GL:GQ 0/1:30,23:31:-37.51,-9.34,-74.68:99
-chr1 2935800 rs6693975 G A 0.65 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=6.49;MQ=45.50;MQ0=1;OQ=189.85;QD=4.75;SB=-111.56 GT:AD:DP:GL:GQ 0/1:24,16:23:-29.21,-6.94,-45.54:99
-chr1 2935836 rs6693982 G A 38.33 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.48;MQ=49.72;MQ0=2;OQ=286.18;QD=6.36;SB=-139.13 GT:AD:DP:GL:GQ 0/1:25,20:29:-40.65,-8.75,-58.79:99
-chr1 2936586 rs12038530 T A 386.33 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=538.23;QD=11.21;SB=-193.51 GT:AD:DP:GL:GQ 0/1:29,19:46:-70.96,-13.86,-104.56:99
-chr1 2937616 rs12037307 C A 453.51 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=785.06;QD=15.10;SB=-326.01 GT:AD:DP:GL:GQ 0/1:25,27:52:-97.46,-15.67,-88.48:99
-chr1 2937769 rs12039548 T C 374.78 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.69;MQ=59.62;MQ0=0;OQ=1018.45;QD=16.97;SB=-485.32 GT:AD:DP:GL:GQ 0/1:25,35:58:-122.60,-17.48,-90.45:99
-chr1 2937880 rs12034573 G A 539.50 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=601.18;QD=13.36;SB=-263.26 GT:AD:DP:GL:GQ 0/1:25,20:44:-76.67,-13.27,-77.09:99
-chr1 2938038 rs10909864 T C 31.93 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=3.17;MQ=58.15;MQ0=0;OQ=603.85;QD=12.58;SB=-301.61 GT:AD:DP:GL:GQ 0/1:20,28:44:-76.94,-13.27,-79.42:99
-chr1 2938888 rs1890338 C T 331.53 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=59.50;MQ0=0;OQ=622.92;QD=13.54;SB=-315.86 GT:AD:DP:GL:GQ 0/1:22,23:40:-77.64,-12.06,-61.98:99
-chr1 2939215 rs12039132 C T 18.71 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=58.67;MQ0=0;OQ=590.59;QD=16.87;SB=-94.60 GT:AD:DP:GL:GQ 0/1:16,19:32:-71.99,-9.65,-41.59:99
-chr1 2939467 rs7514166 G C 161.11 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=58.11;MQ0=0;OQ=380.76;QD=10.29;SB=-57.73 GT:AD:DP:GL:GQ 0/1:23,14:34:-51.61,-10.25,-87.39:99
-chr1 2939859 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=9;HaplotypeScore=3.75;MQ=51.46;MQ0=0;OQ=333.21;QD=11.49;SB=-54.83 GT:AD:DP:GL:GQ 0/1:17,12:25:-44.15,-7.55,-58.82:99
-chr1 2939927 rs34408665 T C 431.23 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.91;MQ0=0;OQ=752.79;QD=11.76;SB=-348.05 GT:AD:DP:GL:GQ 0/1:32,32:61:-96.95,-18.39,-123.70:99
-chr1 2939954 rs58052947 T C 258.56 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=58.84;MQ0=0;OQ=891.02;QD=13.92;SB=-428.88 GT:AD:DP:GL:GQ 0/1:28,36:63:-111.38,-19.00,-108.25:99
-chr1 2940097 rs56398543 G A 185.44 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=57.77;MQ0=0;OQ=622.10;QD=14.81;SB=-266.78 GT:AD:DP:GL:GQ 0/1:21,21:40:-77.55,-12.06,-68.06:99
-chr1 2940194 rs6661908 G A 424.22 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.03;MQ0=0;OQ=1140.17;QD=20.00;SB=-442.95 GT:AD:DP:GL:GQ 0/1:24,33:57:-134.47,-17.17,-86.30:99
-chr1 2940230 rs41334845 G T 113.62 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.36;MQ0=0;OQ=1373.67;QD=21.13;SB=-590.07 GT:AD:DP:GL:GQ 0/1:21,44:63:-159.63,-18.98,-64.63:99
-chr1 2940454 rs6679678 T C 216.89 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=522.35;QD=9.16;SB=-250.32 GT:AD:DP:GL:GQ 0/1:31,26:48:-69.99,-14.47,-101.54:99
-chr1 2940732 rs12042403 T C 312.83 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=888.06;QD=12.51;SB=-433.91 GT:AD:DP:GL:GQ 0/1:39,32:70:-113.18,-21.09,-157.81:99
-chr1 2940746 rs12041583 A G 452.19 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=809.95;QD=12.27;SB=-418.24 GT:AD:DP:GL:GQ 0/1:35,31:63:-103.26,-18.98,-134.35:99
-chr1 2940894 rs12041634 A T 208.26 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=886.35;QD=14.77;SB=-371.51 GT:AD:DP:GL:GQ 0/1:30,30:60:-110.00,-18.08,-114.34:99
-chr1 2940901 rs12040299 C T 487.76 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=953.57;QD=15.63;SB=-409.79 GT:AD:DP:GL:GQ 0/1:31,30:60:-116.73,-18.09,-97.56:99
-chr1 2941104 rs10489589 T C 232.05 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.67;MQ0=0;OQ=498.13;QD=8.90;SB=-202.46 GT:AD:DP:GL:GQ 0/1:33,23:54:-69.37,-16.27,-132.36:99
-chr1 2941207 . G A 104.13 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.25;MQ0=0;OQ=904.38;QD=16.15;SB=-378.12 GT:AD:DP:GL:GQ 0/1:27,29:55:-110.29,-16.57,-94.24:99
-chr1 2941209 . T C 102.69 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.25;MQ0=0;OQ=663.66;QD=11.85;SB=-280.62 GT:AD:DP:GL:GQ 0/1:26,30:53:-85.63,-15.98,-103.85:99
-chr1 2941371 rs12408197 C T 428.36 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=717.16;QD=12.36;SB=-246.23 GT:AD:DP:GL:GQ 0/1:33,25:52:-90.68,-15.68,-91.34:99
-chr1 2941666 . T C 142.44 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.70;MQ0=0;OQ=433.61;QD=8.50;SB=-223.24 GT:AD:DP:GL:GQ 0/1:30,21:49:-61.42,-14.77,-117.95:99
-chr1 2941694 rs10489588 G A 184.48 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.01;MQ=58.17;MQ0=0;OQ=458.21;QD=8.98;SB=-152.21 GT:AD:DP:GL:GQ 0/1:34,17:47:-63.28,-14.17,-98.47:99
-chr1 2941849 . C T 36.18 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.75;MQ=59.44;MQ0=0;OQ=1385.60;QD=18.72;SB=-578.48 GT:AD:DP:GL:GQ 0/1:29,44:70:-162.94,-21.10,-91.88:99
-chr1 2942163 rs2017600 A C 566.08 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2376.48;QD=32.55;SB=-930.21 GT:AD:DP:GL:GQ 1/1:0,72:69:-241.26,-20.78,-0.03:99
-chr1 2942474 rs1005471 T C 5.22 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=441.09;QD=10.02;SB=-191.58 GT:AD:DP:GL:GQ 0/1:27,17:44:-60.65,-13.26,-106.56:99
-chr1 2942683 rs9660819 C T 0.66 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=5.17;MQ=58.20;MQ0=0;OQ=155.13;QD=5.97;SB=-65.81 GT:AD:DP:GL:GQ 0/1:19,7:24:-26.03,-7.23,-63.04:99
-chr1 2942700 rs9661525 T G 36.57 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.11;MQ0=0;OQ=126.09;QD=4.85;SB=-19.97 GT:AD:DP:GL:GQ 0/1:19,7:25:-23.42,-7.53,-64.66:99
-chr1 2943003 . G A 0.16 PASS AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=59.14;MQ0=0;OQ=556.71;QD=20.62;SB=-180.72 GT:AD:DP:GL:GQ 0/1:10,17:27:-67.10,-8.14,-31.23:99
-chr1 2943693 rs16823392 C G 180.70 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.22;MQ=57.09;MQ0=0;OQ=626.82;QD=16.07;SB=-312.19 GT:AD:DP:GL:GQ 0/1:21,18:38:-77.42,-11.46,-83.70:99
-chr1 2943891 . A G 12.02 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=54.82;MQ0=0;OQ=422.22;QD=8.28;SB=-205.52 GT:AD:DP:GL:GQ 0/1:33,18:49:-60.27,-14.76,-127.83:99
-chr1 2943911 . C T 10.41 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.91;MQ=52.84;MQ0=0;QD=0.25;SB=11.05 GT:AD:DP:GL:GQ 0/1:24,17:24:-11.53,-7.24,-65.03:42.84
-chr1 2943915 . A G 396.79 SnpCluster AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=1.74;MQ=53.20;MQ0=0;QD=9.23;SB=-114.71 GT:AD:DP:GL:GQ 0/1:25,18:39:-54.71,-11.75,-89.79:99
-chr1 2943921 . G A 412.53 SnpCluster AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=53.30;MQ0=0;QD=10.31;SB=-110.52 GT:AD:DP:GL:GQ 0/1:23,17:37:-55.69,-11.15,-76.61:99
-chr1 2943983 . T C 18.12 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.49;MQ=57.65;MQ0=0;OQ=359.40;QD=9.46;SB=-125.65 GT:AD:DP:GL:GQ 0/1:21,17:36:-50.07,-10.85,-82.05:99
-chr1 2944025 . C T 103.45 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.94;MQ0=0;OQ=634.89;QD=13.23;SB=-327.90 GT:AD:DP:GL:GQ 0/1:27,21:45:-80.34,-13.56,-81.81:99
-chr1 2944063 . C T 0.51 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=4;HaplotypeScore=2.62;MQ=59.46;MQ0=0;OQ=776.27;QD=15.22;SB=-389.17 GT:AD:DP:GL:GQ 0/1:26,25:47:-95.07,-14.16,-76.30:99
-chr1 2944068 . G A 119.57 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=59.46;MQ0=0;OQ=782.48;QD=15.34;SB=-373.90 GT:AD:DP:GL:GQ 0/1:25,26:49:-96.29,-14.76,-89.91:99
-chr1 2944090 . T C 3.70 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.56;MQ=59.48;MQ0=0;OQ=656.17;QD=12.38;SB=-215.36 GT:AD:DP:GL:GQ 0/1:27,26:49:-83.67,-14.77,-97.10:99
-chr1 2944157 . T C 29.83 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=59.30;MQ0=0;OQ=936.38;QD=15.61;SB=-205.50 GT:AD:DP:GL:GQ 0/1:27,33:58:-114.40,-17.47,-101.34:99
-chr1 2944208 rs4996810 A C 0.07 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=3.45;MQ=56.26;MQ0=1;OQ=219.14;QD=3.48;SB=-132.81 GT:AD:DP:GL:GQ 0/1:47,15:56:-42.07,-16.87,-150.42:99
-chr1 2944226 . G A 136.97 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.40;MQ0=1;OQ=501.67;QD=8.36;SB=-261.69 GT:AD:DP:GL:GQ 0/1:41,19:55:-70.03,-16.58,-122.86:99
-chr1 2944238 . T C 5.54 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=54.51;MQ0=0;OQ=327.91;QD=6.43;SB=-156.50 GT:AD:DP:GL:GQ 0/1:37,14:48:-50.53,-14.46,-136.22:99
-chr1 2944239 . T C 1.08 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=4.23;MQ=54.83;MQ0=0;OQ=279.86;QD=5.18;SB=-104.43 GT:AD:DP:GL:GQ 0/1:40,14:49:-46.04,-14.77,-139.11:99
-chr1 2945018 rs12036378 G A 163.77 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.58;MQ0=0;OQ=895.36;QD=16.28;SB=-275.78 GT:AD:DP:GL:GQ 0/1:27,28:53:-108.80,-15.98,-79.65:99
-chr1 2945105 rs55863899 C G 134.28 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.52;MQ0=0;OQ=868.77;QD=18.10;SB=-284.96 GT:AD:DP:GL:GQ 0/1:21,27:46:-104.04,-13.88,-85.12:99
-chr1 2945790 . A G 4.08 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=57.28;MQ0=0;OQ=318.97;QD=15.19;SB=-83.80 GT:AD:DP:GL:GQ 0/1:8,13:20:-41.21,-6.03,-32.48:99
-chr1 2946023 rs10909865 A G 147.02 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.15;MQ=60.00;MQ0=0;OQ=547.73;QD=10.74;SB=-195.64 GT:AD:DP:GL:GQ 0/1:24,27:47:-72.23,-14.17,-93.16:99
-chr1 2946442 . A G 66.31 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.61;MQ0=0;OQ=798.37;QD=10.79;SB=-385.01 GT:AD:DP:GL:GQ 0/1:39,35:70:-104.22,-21.10,-152.02:99
-chr1 2946526 rs2993510 T C 256.19 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.44;MQ0=0;OQ=807.53;QD=9.73;SB=-328.89 GT:AD:DP:GL:GQ 0/1:47,36:81:-108.45,-24.41,-191.18:99
-chr1 2946859 rs12567620 T G 251.94 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.22;MQ0=0;OQ=588.28;QD=9.97;SB=-221.33 GT:AD:DP:GL:GQ 0/1:35,23:57:-79.28,-17.17,-127.60:99
-chr1 2947460 rs12409277 T C 554.91 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1261.63;QD=14.67;SB=-598.55 GT:AD:DP:GL:GQ 0/1:39,47:86:-155.36,-25.92,-158.90:99
-chr1 2948421 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=83;Dels=0.02;HRun=17;HaplotypeScore=13.52;MQ=50.26;MQ0=0;OQ=57.24;QD=0.69;SB=67.75 GT:AD:DP:GL:GQ 0/1:69,12:60:-26.49,-17.48,-170.55:90.07
-chr1 2948568 rs12044162 A G 115.23 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.63;MQ0=0;OQ=498.67;QD=9.23;SB=-105.58 GT:AD:DP:GL:GQ 0/1:33,21:52:-68.82,-15.67,-126.86:99
-chr1 2949062 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=21.05;MQ=49.42;MQ0=0;OQ=103.70;QD=2.53;SB=-31.97 GT:AD:DP:GL:GQ 0/1:35,6:34:-23.91,-10.25,-88.62:99
-chr1 2949076 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=103.01;MQ=49.60;MQ0=0;OQ=345.15;QD=7.50;SB=-146.53 GT:AD:DP:GL:GQ 0/1:33,13:40:-49.87,-12.07,-111.45:99
-chr1 2949080 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=47.15;MQ=49.74;MQ0=0;OQ=115.37;QD=2.35;SB=-79.50 GT:AD:DP:GL:GQ 0/1:37,11:45:-31.37,-16.54,-140.93:99
-chr1 2949088 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=39.37;MQ=50.39;MQ0=0;OQ=395.27;QD=7.60;SB=-176.85 GT:AD:DP:GL:GQ 0/1:38,14:46:-56.68,-13.87,-100.52:99
-chr1 2949107 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=4.13;MQ=51.92;MQ0=0;OQ=58.43;QD=0.96;SB=-33.78 GT:AD:DP:GL:GQ 0/1:53,8:55:-25.70,-16.57,-188.08:91.26
-chr1 2949470 rs6692292 T C 310.38 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=58.36;MQ0=0;OQ=1146.89;QD=15.93;SB=-322.30 GT:AD:DP:GL:GQ 0/1:33,39:71:-139.36,-21.39,-132.11:99
-chr1 2949881 rs56213325 G A 8.56 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=3.87;MQ=58.97;MQ0=0;OQ=1032.99;QD=16.40;SB=-387.12 GT:AD:DP:GL:GQ 0/1:30,33:61:-124.96,-18.37,-109.42:99
-chr1 2950052 rs12045368 A G 278.87 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=53.32;MQ0=0;OQ=936.38;QD=14.41;SB=-275.26 GT:AD:DP:GL:GQ 0/1:28,37:62:-115.61,-18.69,-106.66:99
-chr1 2950232 rs10909866 C T 182.72 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=57.68;MQ0=0;OQ=969.99;QD=15.90;SB=-309.81 GT:AD:DP:GL:GQ 0/1:32,29:61:-118.67,-18.38,-109.12:99
-chr1 2950468 rs12046233 A G 39.17 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.71;MQ=59.23;MQ0=0;OQ=754.54;QD=12.58;SB=-279.44 GT:AD:DP:GL:GQ 0/1:30,30:55:-95.31,-16.57,-110.00:99
-chr1 2950650 rs12044848 C T 194.31 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.52;MQ0=0;OQ=784.81;QD=16.35;SB=-285.29 GT:AD:DP:GL:GQ 0/1:24,24:47:-95.92,-14.16,-84.23:99
-chr1 2950883 . C A 3.38 PASS AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=60.00;MQ0=0;OQ=1395.15;QD=16.81;SB=-283.26 GT:AD:DP:GL:GQ 0/1:36,46:82:-170.17,-27.37,-127.09:99
-chr1 2951230 rs56088946 T C 7.58 PASS AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.61;MQ0=0;OQ=1944.95;QD=16.34;SB=-964.49 GT:AD:DP:GL:GQ 0/1:53,66:118:-233.32,-35.54,-213.54:99
-chr1 2951262 rs10909867 G T 333.68 PASS AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=59.76;MQ0=0;OQ=1581.91;QD=16.48;SB=-612.08 GT:AD:DP:GL:GQ 0/1:44,52:95:-190.09,-28.61,-155.75:99
-chr1 2952067 rs10909868 A C 183.71 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=60.00;MQ0=0;OQ=929.11;QD=14.75;SB=-149.21 GT:AD:DP:GL:GQ 0/1:29,34:62:-114.87,-18.67,-108.28:99
-chr1 2952085 rs12048975 T C 158.31 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=956.32;QD=14.94;SB=-180.58 GT:AD:DP:GL:GQ 0/1:30,34:62:-117.59,-18.68,-121.18:99
-chr1 2952452 rs2981859 G A 525.66 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2597.04;QD=39.95;SB=-874.18 GT:AD:DP:GL:GQ 1/1:0,65:65:-263.30,-19.58,-0.02:99
-chr1 2953353 rs7339938 G C 184.28 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1644.05;QD=21.35;SB=-832.89 GT:AD:DP:GL:GQ 0/1:34,43:75:-190.30,-22.61,-128.08:99
-chr1 2954257 rs12044831 A C 328.96 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.75;MQ0=0;OQ=969.03;QD=12.75;SB=-480.26 GT:AD:DP:GL:GQ 0/1:35,41:74:-122.48,-22.29,-132.71:99
-chr1 2956899 rs2993479 A T 39.42 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=7.90;MQ=58.88;MQ0=0;OQ=639.75;QD=11.85;SB=-334.02 GT:AD:DP:GL:GQ 0/1:32,22:53:-83.22,-15.96,-119.83:99
-chr1 2958839 . C T 167.01 PASS AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.03;MQ0=0;OQ=1118.18;QD=16.69;SB=-463.99 GT:AD:DP:GL:GQ 0/1:31,36:62:-133.80,-18.70,-86.01:99
-chr1 2958843 . G C 98.75 PASS AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=58.98;MQ0=0;OQ=1122.63;QD=17.54;SB=-409.32 GT:AD:DP:GL:GQ 0/1:29,34:58:-133.03,-17.49,-113.54:99
-chr1 2960143 rs56298939 A T 308.60 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.67;MQ0=0;OQ=788.46;QD=14.08;SB=-295.64 GT:AD:DP:GL:GQ 0/1:29,27:56:-99.00,-16.87,-109.64:99
-chr1 2960324 rs717795 T C 9.89 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=3;HaplotypeScore=2.74;MQ=59.13;MQ0=0;OQ=443.35;QD=8.37;SB=-240.88 GT:AD:DP:GL:GQ 0/1:32,21:49:-62.39,-14.77,-120.82:99
-chr1 2961312 rs56069604 T C 18.15 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=0.73;MQ=58.64;MQ0=0;OQ=450.45;QD=14.53;SB=-212.67 GT:AD:DP:GL:GQ 0/1:13,18:29:-57.07,-8.74,-51.18:99
-chr1 2961381 rs2981857 T C 166.54 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=60.00;MQ0=0;OQ=428.10;QD=15.29;SB=-207.68 GT:AD:DP:GL:GQ 0/1:10,18:28:-54.54,-8.45,-38.77:99
-chr1 2962384 rs2981856 T C 282.12 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=862.73;QD=12.32;SB=-362.96 GT:AD:DP:GL:GQ 0/1:34,36:67:-109.75,-20.19,-134.76:99
-chr1 2963182 rs2993480 C T 393.42 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=959.18;QD=15.72;SB=-400.92 GT:AD:DP:GL:GQ 0/1:31,30:60:-117.29,-18.09,-96.43:99
-chr1 2963293 rs2993481 A T 141.58 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.01;MQ=59.62;MQ0=0;OQ=743.23;QD=12.39;SB=-349.56 GT:AD:DP:GL:GQ 0/1:34,26:58:-95.08,-17.48,-119.69:99
-chr1 2963436 rs1109251 G A 197.81 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=1.34;MQ=60.00;MQ0=0;OQ=932.59;QD=15.04;SB=-469.42 GT:AD:DP:GL:GQ 0/1:34,28:62:-115.22,-18.68,-120.45:99
-chr1 2963924 . A G 132.32 PASS AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.54;MQ0=0;OQ=1229.61;QD=13.51;SB=-579.93 GT:AD:DP:GL:GQ 0/1:47,44:90:-153.35,-27.11,-189.83:99
-chr1 2964602 rs1125017 A C 413.02 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=773.70;QD=11.90;SB=-364.77 GT:AD:DP:GL:GQ 0/1:35,30:63:-99.63,-18.98,-121.64:99
-chr1 2964712 rs2376821 T C 458.38 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=2329.60;QD=30.25;SB=-1071.67 GT:AD:DP:GL:GQ 1/1:0,77:75:-236.63,-22.63,-0.08:99
-chr1 2964979 rs55775305 C G 191.90 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=59.60;MQ0=0;OQ=1095.41;QD=18.89;SB=-526.68 GT:AD:DP:GL:GQ 0/1:27,31:56:-129.70,-16.87,-112.36:99
-chr1 2966676 rs1138513 T C 342.07 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=60.00;MQ0=0;OQ=1004.23;QD=15.45;SB=-395.31 GT:AD:DP:GL:GQ 0/1:29,36:64:-122.99,-19.29,-112.84:99
-chr1 2967377 rs2981855 A G 110.32 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.78;MQ0=0;OQ=2017.68;QD=35.40;SB=-766.96 GT:AD:DP:GL:GQ 1/1:0,57:57:-205.37,-17.17,-0.02:99
-chr1 2967903 rs2075969 G C 175.65 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.42;MQ0=0;OQ=486.84;QD=12.17;SB=-253.09 GT:AD:DP:GL:GQ 0/1:21,19:36:-62.83,-10.86,-80.92:99
-chr1 2969034 rs41315262 C T 141.67 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=432.24;QD=14.90;SB=-163.20 GT:AD:DP:GL:GQ 0/1:14,15:28:-54.95,-8.44,-49.21:99
-chr1 2970137 rs2072732 T C 36.95 LowQual AC=1;AF=0.50;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.39;MQ0=0;QD=4.11;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,4:7:-9.09,-2.11,-16.67:69.79
-chr1 2970438 . C T 1.69 PASS AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=3.02;MQ=60.00;MQ0=0;OQ=106.79;QD=5.62;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,5:16:-18.78,-4.82,-35.96:99
-chr1 2973178 rs2788091 T C 354.06 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.56;MQ0=0;OQ=657.96;QD=12.65;SB=-286.58 GT:AD:DP:GL:GQ 0/1:29,23:52:-84.74,-15.66,-115.27:99
-chr1 2973823 rs2297828 G A 18.50 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=95.21;QD=3.97;SB=-16.50 GT:AD:DP:GL:GQ 0/1:18,6:22:-19.43,-6.63,-57.66:99
-chr1 2975672 . C G 0.31 PASS AC=2;AF=1.00;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=6.00;MQ=60.00;MQ0=0;OQ=69.47;QD=7.72;SB=-10.00 GT:AD:DP:GL:GQ 1/1:3,6:3:-10.44,-0.91,-0.01:9.02
-chr1 2977743 rs909510 G C 79.39 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.50;MQ=58.73;MQ0=0;OQ=593.38;QD=17.98;SB=-309.99 GT:AD:DP:GL:GQ 0/1:15,18:31:-71.97,-9.35,-58.08:99
-chr1 2979403 rs1572656 T G 132.71 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.39;MQ0=0;OQ=227.87;QD=7.86;SB=-74.87 GT:AD:DP:GL:GQ 0/1:16,12:27:-34.21,-8.14,-59.65:99
-chr1 2982894 rs2981889 T C 0.49 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=3.40;MQ=59.07;MQ0=0;OQ=530.79;QD=10.62;SB=-197.61 GT:AD:DP:GL:GQ 0/1:25,25:44:-69.63,-13.27,-84.86:99
-chr1 2983498 rs2993486 G A 189.84 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.11;MQ0=0;OQ=2009.66;QD=38.65;SB=-804.34 GT:AD:DP:GL:GQ 1/1:0,52:51:-204.56,-15.36,-0.01:99
-chr1 2983667 rs2981888 C G 249.66 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=760.63;QD=16.54;SB=-378.87 GT:AD:DP:GL:GQ 0/1:20,26:44:-92.63,-13.28,-85.11:99
-chr1 2984196 rs4648359 G C 304.72 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=59.62;MQ0=0;OQ=739.36;QD=15.09;SB=-327.39 GT:AD:DP:GL:GQ 0/1:26,23:45:-90.79,-13.57,-98.24:99
-chr1 2984400 rs2788092 C G 25.02 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.57;MQ0=0;OQ=997.66;QD=18.48;SB=-280.54 GT:AD:DP:GL:GQ 0/1:23,31:51:-118.43,-15.38,-97.87:99
-chr1 2985122 rs2742689 T G 341.54 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.79;MQ0=0;OQ=737.00;QD=13.65;SB=-353.07 GT:AD:DP:GL:GQ 0/1:26,28:52:-92.65,-15.66,-91.92:99
-chr1 2985309 rs7515436 G A 254.33 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.36;MQ0=0;OQ=1107.59;QD=17.04;SB=-525.74 GT:AD:DP:GL:GQ 0/1:30,35:61:-132.42,-18.38,-99.41:99
-chr1 2985493 rs2788093 C T 164.52 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=52.54;MQ0=0;OQ=672.12;QD=14.61;SB=-188.18 GT:AD:DP:GL:GQ 0/1:25,21:45:-84.06,-13.57,-76.74:99
-chr1 2985947 . G A 42.58 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=59.42;MQ0=0;QD=1.06;SB=86.29 GT:AD:DP:GL:GQ 0/1:35,5:38:-18.99,-11.45,-122.25:75.41
-chr1 2986056 rs7525173 C G 198.19 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=57.11;MQ0=0;OQ=1235.82;QD=21.68;SB=-610.55 GT:AD:DP:GL:GQ 0/1:22,35:54:-143.14,-16.27,-91.10:99
-chr1 2986416 rs1569420 C G 131.69 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.22;MQ0=0;OQ=1047.24;QD=19.39;SB=-356.09 GT:AD:DP:GL:GQ 0/1:24,30:53:-123.98,-15.97,-102.98:99
-chr1 2986462 rs1569419 T C 443.07 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1686.91;QD=29.59;SB=-810.28 GT:AD:DP:GL:GQ 1/1:0,57:54:-172.33,-16.29,-0.05:99
-chr1 2988794 rs2742686 T C 110.98 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.81;MQ=59.55;MQ0=0;OQ=633.23;QD=12.42;SB=-265.98 GT:AD:DP:GL:GQ 0/1:26,25:48:-81.08,-14.47,-95.70:99
-chr1 2988858 rs10909873 C G 203.72 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.25;MQ=59.51;MQ0=0;OQ=629.03;QD=13.38;SB=-304.03 GT:AD:DP:GL:GQ 0/1:24,23:43:-79.16,-12.98,-98.92:99
-chr1 2988928 rs2981886 T G 27.89 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=1.77;MQ=60.00;MQ0=0;OQ=713.08;QD=17.39;SB=-342.06 GT:AD:DP:GL:GQ 0/1:16,25:41:-86.94,-12.35,-58.67:99
-chr1 2989062 rs2742685 T C 91.91 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=59.38;MQ0=0;OQ=332.13;QD=8.98;SB=-168.61 GT:AD:DP:GL:GQ 0/1:21,16:36:-47.35,-10.86,-77.27:99
-chr1 2989275 rs760570 T C 183.83 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=60.00;MQ0=0;OQ=452.99;QD=11.62;SB=-195.61 GT:AD:DP:GL:GQ 0/1:18,21:37:-59.74,-11.16,-71.21:99
-chr1 2989352 rs11580403 C T 17.69 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=6.35;MQ=58.51;MQ0=0;OQ=786.31;QD=16.73;SB=-390.18 GT:AD:DP:GL:GQ 0/1:22,25:44:-95.18,-13.26,-64.65:99
-chr1 2989378 rs11581212 A G 26.01 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=4.12;MQ=58.01;MQ0=0;OQ=610.70;QD=12.99;SB=-220.27 GT:AD:DP:GL:GQ 0/1:23,24:41:-76.70,-12.35,-80.42:99
-chr1 2989575 rs6674036 G T 86.25 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=60.00;MQ0=0;OQ=295.75;QD=8.45;SB=-112.67 GT:AD:DP:GL:GQ 0/1:22,13:32:-42.50,-9.64,-70.40:99
-chr1 2989750 rs6683976 C G 152.72 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=58.25;MQ0=0;OQ=588.86;QD=14.72;SB=-197.30 GT:AD:DP:GL:GQ 0/1:21,19:38:-73.63,-11.46,-80.42:99
-chr1 2989984 rs760569 A G 0.34 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=3;HaplotypeScore=3.04;MQ=55.35;MQ0=1;OQ=203.26;QD=6.78;SB=-13.61 GT:AD:DP:GL:GQ 0/1:16,14:25:-31.15,-7.54,-61.01:99
-chr1 2990301 rs760568 A G 305.79 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=56.76;MQ0=0;OQ=713.37;QD=13.99;SB=-336.34 GT:AD:DP:GL:GQ 0/1:22,29:50:-89.69,-15.07,-88.33:99
-chr1 2990325 rs760567 A G 357.24 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=57.34;MQ0=0;OQ=769.95;QD=14.53;SB=-388.67 GT:AD:DP:GL:GQ 0/1:25,28:52:-95.94,-15.67,-100.59:99
-chr1 2990784 rs6695131 T C 278.73 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.71;MQ=59.69;MQ0=0;OQ=1038.17;QD=17.02;SB=-324.30 GT:AD:DP:GL:GQ 0/1:25,36:59:-124.87,-17.77,-99.97:99
-chr1 2991113 rs760566 T C 528.98 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=1563.77;QD=31.91;SB=-755.58 GT:AD:DP:GL:GQ 1/1:0,49:46:-159.99,-13.86,-0.02:99
-chr1 2991563 rs6690540 C T 182.97 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=58.34;MQ0=0;OQ=662.57;QD=14.72;SB=-343.52 GT:AD:DP:GL:GQ 0/1:23,22:42:-82.21,-12.67,-65.85:99
-chr1 2991617 rs2742682 T C 232.59 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.38;MQ0=0;OQ=410.76;QD=11.10;SB=-215.29 GT:AD:DP:GL:GQ 0/1:16,19:33:-54.32,-9.96,-57.14:99
-chr1 2991708 rs2742681 T G 14.52 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=58.98;MQ0=0;OQ=365.17;QD=8.91;SB=-102.16 GT:AD:DP:GL:GQ 0/1:24,17:38:-51.25,-11.45,-78.22:99
-chr1 2992174 rs2742680 C G 300.14 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.13;MQ=58.66;MQ0=0;OQ=934.85;QD=17.98;SB=-447.39 GT:AD:DP:GL:GQ 0/1:22,30:49:-111.56,-14.79,-83.87:99
-chr1 2992195 rs2742679 C T 269.04 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=58.13;MQ0=0;OQ=860.87;QD=17.22;SB=-384.13 GT:AD:DP:GL:GQ 0/1:23,27:48:-103.84,-14.47,-74.36:99
-chr1 2992210 rs2742678 G A 296.42 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=57.39;MQ0=0;OQ=701.27;QD=15.58;SB=-336.35 GT:AD:DP:GL:GQ 0/1:23,22:43:-86.37,-12.96,-74.58:99
-chr1 2993392 rs11801109 G A 5.62 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=59.59;MQ0=0;OQ=759.83;QD=16.52;SB=-91.91 GT:AD:DP:GL:GQ 0/1:23,23:45:-92.82,-13.56,-77.23:99
-chr1 2993874 rs2981883 T C 12.34 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.37;MQ=58.95;MQ0=0;OQ=1316.25;QD=29.91;SB=-475.45 GT:AD:DP:GL:GQ 1/1:0,44:39:-135.23,-11.75,-0.02:99
-chr1 2994092 rs2981882 A G 168.83 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=59.63;MQ0=0;OQ=1897.54;QD=30.61;SB=-828.34 GT:AD:DP:GL:GQ 1/1:0,62:61:-193.40,-18.40,-0.06:99
-chr1 2994217 rs2981881 T C 270.84 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=58.88;MQ0=0;OQ=1946.57;QD=31.40;SB=-838.62 GT:AD:DP:GL:GQ 1/1:1,61:56:-198.26,-16.87,-0.02:99
-chr1 2994648 rs2981880 T C 6.41 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=4.30;MQ=56.36;MQ0=0;OQ=1597.03;QD=34.72;SB=-433.18 GT:AD:DP:GL:GQ 1/1:0,45:44:-163.30,-13.25,-0.01:99
-chr1 2994734 rs2981879 T C 43.37 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.75;MQ0=0;OQ=1057.22;QD=35.24;SB=-208.08 GT:AD:DP:GL:GQ 1/1:0,30:30:-109.32,-9.04,-0.01:90.26
-chr1 2994945 rs34014659 G A 271.04 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.59;MQ0=1;OQ=187.11;QD=9.85;SB=-73.30 GT:AD:DP:GL:GQ 0/1:11,8:17:-27.12,-5.12,-33.00:99
-chr1 2995445 rs2981878 A G 132.19 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=56.06;MQ0=1;OQ=382.82;QD=11.96;SB=-131.28 GT:AD:DP:GL:GQ 0/1:16,16:31:-50.91,-9.34,-62.42:99
-chr1 2995487 rs6676479 G A 196.19 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=57.97;MQ0=1;OQ=534.41;QD=14.06;SB=-244.76 GT:AD:DP:GL:GQ 0/1:21,17:34:-66.98,-10.25,-53.48:99
-chr1 2995498 rs34884268 C T 260.47 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=626.01;QD=14.90;SB=-317.32 GT:AD:DP:GL:GQ 0/1:22,20:41:-78.24,-12.36,-68.94:99
-chr1 2995610 rs34782467 G A 183.72 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.56;MQ0=0;OQ=857.05;QD=16.48;SB=-325.85 GT:AD:DP:GL:GQ 0/1:26,26:50:-104.07,-15.08,-74.92:99
-chr1 2995991 rs926246 T C 314.46 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=57.39;MQ0=0;OQ=671.24;QD=12.43;SB=-260.51 GT:AD:DP:GL:GQ 0/1:30,24:53:-86.37,-15.96,-115.93:99
-chr1 2996058 rs926245 C A 105.01 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=53.36;MQ0=0;OQ=705.06;QD=12.82;SB=-99.80 GT:AD:DP:GL:GQ 0/1:29,26:52:-89.45,-15.66,-93.51:99
-chr1 2996143 rs926244 A G 215.10 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=58.61;MQ0=0;OQ=1978.79;QD=31.92;SB=-947.90 GT:AD:DP:GL:GQ 1/1:0,60:58:-201.49,-17.47,-0.03:99
-chr1 2996175 rs926243 T G 426.34 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=690.75;QD=11.32;SB=-265.78 GT:AD:DP:GL:GQ 0/1:31,30:58:-89.83,-17.48,-108.47:99
-chr1 2996487 rs55932943 C T 3.20 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=10.54;MQ=58.03;MQ0=1;OQ=1021.25;QD=14.80;SB=-443.45 GT:AD:DP:GL:GQ 0/1:37,31:63:-124.40,-18.99,-104.76:99
-chr1 2996899 rs2817165 A G 93.99 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.80;MQ0=0;OQ=288.71;QD=8.25;SB=-166.95 GT:AD:DP:GL:GQ 0/1:21,13:29:-40.90,-8.74,-67.04:99
-chr1 2997535 rs34300623 G A 185.66 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.69;MQ0=0;OQ=968.84;QD=15.88;SB=-326.31 GT:AD:DP:GL:GQ 0/1:32,29:60:-118.25,-18.08,-106.92:99
-chr1 2997956 rs6693385 C T 247.24 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=59.55;MQ0=0;OQ=876.50;QD=17.19;SB=-364.90 GT:AD:DP:GL:GQ 0/1:22,29:45:-104.50,-13.57,-57.88:99
-chr1 2998547 rs2376820 C G 2318.28 Indel AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=17.39;MQ=51.50;MQ0=0;QD=40.67;SB=-1149.31 GT:AD:DP:GL:GQ 1/1:0,55:56:-238.28,-19.61,-2.86:99
-chr1 3000177 rs760565 A T 219.18 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=60.00;MQ0=0;OQ=708.84;QD=15.75;SB=-333.07 GT:AD:DP:GL:GQ 0/1:21,24:41:-86.52,-12.35,-66.91:99
-chr1 3001189 rs2981873 T C 24.60 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=57.66;MQ0=0;OQ=381.92;QD=12.73;SB=-154.31 GT:AD:DP:GL:GQ 0/1:16,14:30:-50.52,-9.04,-62.50:99
-chr1 3002186 rs12135325 T C 1.38 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=4.32;MQ=58.67;MQ0=0;OQ=210.96;QD=6.03;SB=-111.21 GT:AD:DP:GL:GQ 0/1:22,13:32:-34.02,-9.64,-84.87:99
-chr1 3002840 rs6666748 A G 255.15 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.28;MQ=60.00;MQ0=0;OQ=801.41;QD=14.84;SB=-400.31 GT:AD:DP:GL:GQ 0/1:21,33:50:-98.50,-15.08,-74.39:99
-chr1 3003005 rs2788097 A C 59.19 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.07;MQ=59.05;MQ0=0;OQ=463.07;QD=10.52;SB=-200.91 GT:AD:DP:GL:GQ 0/1:25,19:39:-61.34,-11.75,-74.66:99
-chr1 3005383 rs2981870 G A 337.06 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.45;MQ0=0;OQ=532.89;QD=12.69;SB=-258.26 GT:AD:DP:GL:GQ 0/1:23,19:40:-68.63,-12.06,-71.78:99
-chr1 3005452 rs55674255 C T 63.22 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.20;MQ=60.00;MQ0=0;OQ=640.76;QD=14.56;SB=-293.19 GT:AD:DP:GL:GQ 0/1:24,20:44:-80.62,-13.26,-82.30:99
-chr1 3005702 rs55784774 G A 50.92 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.79;MQ=59.56;MQ0=0;OQ=701.05;QD=13.23;SB=-358.53 GT:AD:DP:GL:GQ 0/1:30,23:49:-88.16,-14.77,-89.46:99
-chr1 3005947 . C T 228.82 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.77;MQ0=0;OQ=514.40;QD=13.54;SB=-233.73 GT:AD:DP:GL:GQ 0/1:21,17:37:-65.88,-11.16,-63.18:99
-chr1 3005977 . G A 25.43 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=57.94;MQ0=0;OQ=561.32;QD=13.69;SB=-151.18 GT:AD:DP:GL:GQ 0/1:21,20:37:-70.56,-11.15,-69.03:99
-chr1 3006143 rs2981869 C T 155.48 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=58.84;MQ0=0;OQ=588.68;QD=14.72;SB=-230.75 GT:AD:DP:GL:GQ 0/1:19,21:38:-73.61,-11.45,-64.86:99
-chr1 3007018 . G A 13.33 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=4.77;MQ=59.05;MQ0=0;OQ=465.01;QD=10.57;SB=-225.50 GT:AD:DP:GL:GQ 0/1:25,18:41:-64.52,-14.73,-86.50:99
-chr1 3008086 rs2993492 G A 197.87 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.53;MQ0=0;OQ=913.42;QD=18.64;SB=-406.43 GT:AD:DP:GL:GQ 0/1:20,29:46:-108.49,-13.86,-62.00:99
-chr1 3009487 rs12131890 G A 77.41 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.17;MQ0=0;OQ=935.16;QD=20.78;SB=-364.90 GT:AD:DP:GL:GQ 0/1:15,30:42:-109.46,-12.66,-48.94:99
-chr1 3010048 rs56029998 T C 182.76 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.92;MQ=59.24;MQ0=0;OQ=609.91;QD=11.09;SB=-261.57 GT:AD:DP:GL:GQ 0/1:31,24:54:-80.54,-16.27,-125.83:99
-chr1 3010106 rs2993493 C A 285.53 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=59.63;MQ0=0;OQ=789.70;QD=15.48;SB=-315.68 GT:AD:DP:GL:GQ 0/1:25,26:51:-97.62,-15.36,-86.35:99
-chr1 3010923 rs2993494 G A 362.80 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=449.17;QD=13.21;SB=-177.14 GT:AD:DP:GL:GQ 0/1:18,16:33:-58.15,-9.95,-61.38:99
-chr1 3011156 rs55898371 A C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=5;HaplotypeScore=4.00;MQ=58.74;MQ0=0;OQ=420.03;QD=11.35;SB=-193.92 GT:AD:DP:GL:GQ 0/1:18,19:33:-55.23,-9.95,-57.05:99
-chr1 3011412 rs12133978 G A 162.16 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=59.34;MQ0=0;OQ=429.68;QD=12.28;SB=-187.26 GT:AD:DP:GL:GQ 0/1:20,15:33:-56.20,-9.95,-61.55:99
-chr1 3011547 rs11808136 C T 5.88 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=59.52;MQ0=0;OQ=731.81;QD=18.76;SB=-195.18 GT:AD:DP:GL:GQ 0/1:16,23:36:-87.31,-10.85,-49.60:99
-chr1 3012571 rs2993495 A G 13.64 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=549.01;QD=28.90;SB=-194.71 GT:AD:DP:GL:GQ 1/1:0,19:18:-58.50,-5.43,-0.01:54.13
-chr1 3012575 rs2993496 T C 83.64 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=58.78;MQ0=0;OQ=196.75;QD=10.36;SB=-98.00 GT:AD:DP:GL:GQ 0/1:9,10:18:-28.39,-5.43,-32.68:99
-chr1 3012992 rs2993497 G A 7 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.90;MQ=59.59;MQ0=0;OQ=932.60;QD=20.72;SB=-424.82 GT:AD:DP:GL:GQ 0/1:16,29:42:-109.20,-12.66,-48.01:99
-chr1 3013111 rs56363358 C A 42.53 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.28;MQ0=0;OQ=749.52;QD=19.72;SB=-289.38 GT:AD:DP:GL:GQ 0/1:12,26:36:-89.08,-10.85,-37.10:99
-chr1 3013255 rs2993498 T C 497.69 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=1211.16;QD=31.87;SB=-545.88 GT:AD:DP:GL:GQ 1/1:0,38:36:-124.72,-10.85,-0.02:99
-chr1 3013565 rs6667850 A C 171.48 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.41;MQ0=0;OQ=400.63;QD=10.27;SB=-101.88 GT:AD:DP:GL:GQ 0/1:20,19:37:-54.50,-11.15,-69.04:99
-chr1 3013819 rs1890337 A G 45.08 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=58.49;MQ0=0;OQ=1788.78;QD=31.38;SB=-712.22 GT:AD:DP:GL:GQ 1/1:0,56:52:-182.49,-15.67,-0.02:99
-chr1 3014125 rs1890336 A C 168.89 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.71;MQ0=0;OQ=1775.96;QD=32.89;SB=-886.08 GT:AD:DP:GL:GQ 1/1:0,54:51:-181.20,-15.36,-0.02:99
-chr1 3014227 rs2993499 T C 143.46 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=0.04;MQ=59.50;MQ0=0;OQ=1217.03;QD=32.89;SB=-587.31 GT:AD:DP:GL:GQ 1/1:0,37:36:-125.31,-10.85,-0.02:99
-chr1 3014565 rs2993500 C T 15.68 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=4.44;MQ=59.65;MQ0=0;OQ=1234.24;QD=18.99;SB=-544.80 GT:AD:DP:GL:GQ 0/1:29,36:64:-145.99,-19.28,-92.77:99
-chr1 3015706 rs12137954 T A 122.03 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.40;MQ0=0;OQ=345.66;QD=6.91;SB=-177.77 GT:AD:DP:GL:GQ 0/1:35,15:48:-52.31,-14.46,-129.85:99
-chr1 3015846 rs2993501 A C 217.20 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=57.44;MQ0=0;OQ=1649.50;QD=29.99;SB=-596.80 GT:AD:DP:GL:GQ 1/1:0,55:53:-168.59,-15.98,-0.05:99
-chr1 3015960 rs12135664 C T 346.44 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=60.00;MQ0=0;OQ=1146.10;QD=16.85;SB=-550.79 GT:AD:DP:GL:GQ 0/1:34,34:67:-138.08,-20.19,-108.20:99
-chr1 3016120 rs2981868 T A 119.84 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=4.10;MQ=59.44;MQ0=0;OQ=1114.65;QD=15.06;SB=-570.99 GT:AD:DP:GL:GQ 0/1:37,36:67:-134.93,-20.18,-118.55:99
-chr1 3016369 rs59909070 G A 353.97 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.69;MQ0=0;OQ=434.09;QD=10.10;SB=-171.10 GT:AD:DP:GL:GQ 0/1:27,16:42:-59.35,-12.65,-95.52:99
-chr1 3016502 . T C 0.18 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=2;HaplotypeScore=5.91;MQ=44.72;MQ0=3;OQ=351.94;QD=7.65;SB=-166.48 GT:AD:DP:GL:GQ 0/1:25,21:36:-49.33,-10.85,-81.52:99
-chr1 3016606 . A C 15.74 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.75;MQ=48.95;MQ0=1;OQ=373.22;QD=9.82;SB=-133.20 GT:AD:DP:GL:GQ 0/1:18,17:27:-48.74,-8.13,-43.17:99
-chr1 3016839 rs56010213 A T 12.71 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=38.33;MQ0=7;QD=0.33;SB=20.09 GT:AD:DP:GL:GQ 0/1:34,5:23:-11.46,-6.93,-70.69:45.31
-chr1 3017201 rs2993502 C T 589.72 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.38;MQ0=0;OQ=2029.57;QD=38.29;SB=-936.75 GT:AD:DP:GL:GQ 1/1:0,53:51:-206.56,-15.36,-0.01:99
-chr1 3017765 . T C 156.29 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=257.37;QD=12.26;SB=-133.69 GT:AD:DP:GL:GQ 0/1:7,14:18:-34.45,-5.43,-28.78:99
-chr1 3017780 . C T 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=1;HaplotypeScore=2.01;MQ=59.03;MQ0=0;OQ=567.81;QD=23.66;SB=-154.18 GT:AD:DP:GL:GQ 0/1:6,18:22:-66.70,-6.63,-18.59:99
-chr1 3018779 rs11808946 C T 272.66 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=781.20;QD=16.62;SB=-355.56 GT:AD:DP:GL:GQ 0/1:22,25:44:-94.67,-13.26,-66.92:99
-chr1 3018847 rs2993503 A G 82.10 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=59.16;MQ0=0;OQ=1494.14;QD=27.17;SB=-767.73 GT:AD:DP:GL:GQ 1/1:0,55:49:-153.05,-14.78,-0.05:99
-chr1 3018941 rs2072733 C T 12.61 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=59.46;MQ0=0;OQ=605.93;QD=14.09;SB=-165.23 GT:AD:DP:GL:GQ 0/1:22,21:41:-76.24,-12.36,-69.17:99
-chr1 3019072 rs10909875 C T 272.35 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.03;MQ0=0;OQ=534.00;QD=11.12;SB=-208.44 GT:AD:DP:GL:GQ 0/1:28,20:45:-70.25,-13.56,-92.78:99
-chr1 3019517 rs12136745 G A 248.92 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=59.62;MQ0=0;OQ=984.07;QD=16.40;SB=-470.51 GT:AD:DP:GL:GQ 0/1:28,32:55:-118.26,-16.57,-87.88:99
-chr1 3019842 rs58968988 G A 56.19 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=4.37;MQ=58.92;MQ0=0;OQ=590.92;QD=13.74;SB=-159.22 GT:AD:DP:GL:GQ 0/1:22,21:39:-74.13,-11.75,-67.01:99
-chr1 3020484 rs2981867 G C 387.41 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=547.74;QD=12.17;SB=-190.58 GT:AD:DP:GL:GQ 0/1:29,16:44:-71.32,-13.26,-119.60:99
-chr1 3020597 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=37.34;MQ=39.25;MQ0=1;OQ=144.44;QD=4.25;SB=-87.67 GT:AD:DP:GL:GQ 0/1:24,10:27:-25.87,-8.14,-74.17:99
-chr1 3020599 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=45.49;MQ=39.25;MQ0=1;OQ=360.48;QD=10.60;SB=-127.10 GT:AD:DP:GL:GQ 0/1:21,13:31:-48.68,-9.35,-60.35:99
-chr1 3020611 . A G 19.24 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=21.97;MQ=37.81;MQ0=1;QD=0.62;SB=-30.78 GT:AD:DP:GL:GQ 0/1:24,7:24:-12.43,-7.23,-80.13:52.02
-chr1 3020613 rs6691894 A G 41.97 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=22.61;MQ=37.81;MQ0=1;QD=1.35;SB=-10.86 GT:AD:DP:GL:GQ 0/1:24,7:20:-13.51,-6.02,-64.69:74.80
-chr1 3020615 rs6691895 A G 400.54 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=24.36;MQ=38.97;MQ0=1;QD=12.92;SB=-173.99 GT:AD:DP:GL:GQ 0/1:14,17:24:-50.58,-7.24,-30.30:99
-chr1 3020629 . A G 22.23 LowQual AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=19.42;MQ=38.02;MQ0=1;QD=0.85;SB=-32.78 GT:AD:DP:GL:GQ 0/1:21,5:22:-12.14,-6.63,-70.51:55.04
-chr1 3020688 rs6691996 A G 381.91 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.90;MQ0=0;OQ=370.45;QD=11.58;SB=-184.01 GT:AD:DP:GL:GQ 0/1:14,18:30:-49.38,-9.05,-56.94:99
-chr1 3020691 rs6695017 T C 343.03 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.28;MQ0=0;OQ=495.78;QD=14.58;SB=-192.66 GT:AD:DP:GL:GQ 0/1:16,18:34:-63.11,-10.25,-58.83:99
-chr1 3020744 rs6687292 C T 95.65 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.34;MQ=56.56;MQ0=0;OQ=522.71;QD=9.33;SB=-137.11 GT:AD:DP:GL:GQ 0/1:34,22:53:-71.53,-15.97,-120.29:99
-chr1 3020924 rs2981866 G A 33.28 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.17;MQ0=0;OQ=1933.34;QD=38.67;SB=-489.14 GT:AD:DP:GL:GQ 1/1:0,50:49:-196.94,-14.76,-0.02:99
-chr1 3020982 rs10909876 A G 347.22 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=54.47;MQ0=0;OQ=796.80;QD=13.06;SB=-340.94 GT:AD:DP:GL:GQ 0/1:29,32:61:-101.36,-18.40,-112.11:99
-chr1 3020998 rs10909877 T A 2173.88 Indel AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=54.79;MQ0=0;QD=36.23;SB=-1033.22 GT:AD:DP:GL:GQ 1/1:0,60:59:-220.99,-17.77,-0.02:99
-chr1 3021182 . G A 53.76 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.25;MQ0=0;OQ=405.03;QD=13.07;SB=-180.66 GT:AD:DP:GL:GQ 0/1:18,13:30:-52.83,-9.04,-54.54:99
-chr1 3022425 rs2981865 G C 1.40 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.81;MQ0=0;OQ=743.56;QD=24.79;SB=-346.46 GT:AD:DP:GL:GQ 0/1:9,21:29:-86.39,-8.75,-34.33:99
-chr1 3024466 rs10909878 A G 299.96 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=58.18;MQ0=0;OQ=619.53;QD=13.18;SB=-324.31 GT:AD:DP:GL:GQ 0/1:20,27:45:-78.81,-13.57,-80.16:99
-chr1 3024530 rs12141827 T C 99.60 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=53.26;MQ0=0;OQ=329.91;QD=8.25;SB=-169.50 GT:AD:DP:GL:GQ 0/1:24,16:37:-47.43,-11.15,-87.85:99
-chr1 3025087 rs6690373 A G 254.01 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.67;MQ0=0;OQ=819.31;QD=14.63;SB=-343.19 GT:AD:DP:GL:GQ 0/1:23,33:54:-101.49,-16.28,-89.82:99
-chr1 3025597 rs2981864 A G 2.03 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=59.23;MQ0=0;OQ=762.15;QD=25.41;SB=-232.49 GT:AD:DP:GL:GQ 1/1:0,28:25:-82.46,-10.02,-2.66:73.60
-chr1 3025622 rs12409836 A G 68.57 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.74;MQ0=0;OQ=225.89;QD=6.11;SB=-44.83 GT:AD:DP:GL:GQ 0/1:23,14:30:-34.92,-9.04,-72.62:99
-chr1 3025639 rs2472822 C G 79.91 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=1446.74;QD=36.17;SB=-602.98 GT:AD:DP:GL:GQ 1/1:0,40:36:-148.28,-10.86,-0.02:99
-chr1 3027473 rs876740 C T 271.81 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=2215.19;QD=38.19;SB=-1128.00 GT:AD:DP:GL:GQ 1/1:0,58:56:-225.12,-16.87,-0.02:99
-chr1 3028483 rs2742672 A G 23.82 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.51;MQ0=0;OQ=1087.23;QD=28.61;SB=-502.17 GT:AD:DP:GL:GQ 1/1:0,38:36:-112.35,-10.86,-0.04:99
-chr1 3029008 rs2817171 C A 191.92 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.65;MQ0=0;OQ=733.04;QD=13.57;SB=-391.11 GT:AD:DP:GL:GQ 0/1:29,25:54:-92.85,-16.26,-102.92:99
-chr1 3030045 rs2981863 G C 66.05 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.63;MQ0=0;OQ=889.03;QD=17.78;SB=-256.52 GT:AD:DP:GL:GQ 0/1:23,27:46:-106.06,-13.87,-86.32:99
-chr1 3030624 rs2012731 G A 16.06 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=4.70;MQ=59.61;MQ0=0;OQ=1536.02;QD=32.00;SB=-433.32 GT:AD:DP:GL:GQ 1/1:0,48:41:-157.21,-12.36,-0.02:99
-chr1 3031379 rs2817172 T C 144.04 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=1381.66;QD=30.70;SB=-636.88 GT:AD:DP:GL:GQ 1/1:0,45:44:-141.79,-13.27,-0.04:99
-chr1 3032241 rs2472820 G A 108.60 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=58.74;MQ0=0;OQ=572.26;QD=15.47;SB=-176.66 GT:AD:DP:GL:GQ 0/1:19,18:36:-71.36,-10.85,-60.89:99
-chr1 3032694 . C T 55.78 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=60.00;MQ0=0;OQ=546.49;QD=14.77;SB=-205.90 GT:AD:DP:GL:GQ 0/1:19,18:36:-68.78,-10.85,-58.80:99
-chr1 3033426 rs12410830 A G 6.05 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=3.60;MQ=59.16;MQ0=0;OQ=614.56;QD=12.29;SB=-235.29 GT:AD:DP:GL:GQ 0/1:27,23:49:-79.50,-14.76,-107.00:99
-chr1 3034041 rs2817174 T C 277.92 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.38;MQ0=0;OQ=1499.60;QD=26.78;SB=-664.93 GT:AD:DP:GL:GQ 1/1:0,56:48:-153.59,-14.48,-0.05:99
-chr1 3034512 rs35529420 C T 72.11 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.41;MQ=59.18;MQ0=0;OQ=899.04;QD=15.77;SB=-264.19 GT:AD:DP:GL:GQ 0/1:27,29:53:-109.16,-15.97,-86.82:99
-chr1 3034731 rs35951269 T C 58.31 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=2.40;MQ=58.97;MQ0=0;OQ=780.41;QD=12.39;SB=-339.30 GT:AD:DP:GL:GQ 0/1:36,27:63:-100.30,-18.98,-146.89:99
-chr1 3035225 rs2742670 A G 75.82 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.62;MQ=60.00;MQ0=0;OQ=1811.56;QD=33.55;SB=-920.03 GT:AD:DP:GL:GQ 1/1:0,54:51:-184.76,-15.36,-0.02:99
-chr1 3035475 rs2817175 T C 135.77 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=57.17;MQ0=0;OQ=1487.18;QD=29.74;SB=-663.57 GT:AD:DP:GL:GQ 1/1:0,50:49:-152.36,-14.79,-0.06:99
-chr1 3035871 rs2817176 A G 10.06 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=58.80;MQ0=0;OQ=1642.91;QD=28.33;SB=-799.47 GT:AD:DP:GL:GQ 1/1:0,58:54:-167.94,-16.30,-0.07:99
-chr1 3036323 rs2817177 T C 492.31 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=1385.60;QD=34.64;SB=-536.41 GT:AD:DP:GL:GQ 1/1:0,40:39:-142.16,-11.75,-0.01:99
-chr1 3036571 rs35625823 T G 1.28 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.02;HRun=1;HaplotypeScore=8.04;MQ=58.17;MQ0=0;OQ=682.10;QD=13.37;SB=-105.91 GT:AD:DP:GL:GQ 0/1:25,25:50:-86.26,-14.76,-86.59:99
-chr1 3036686 rs35201154 G T 212.09 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.64;MQ0=0;OQ=542.18;QD=11.30;SB=-157.49 GT:AD:DP:GL:GQ 0/1:27,21:48:-71.97,-14.46,-93.11:99
-chr1 3037032 rs2788086 A G 87.83 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=59.14;MQ0=0;OQ=1440.07;QD=26.67;SB=-745.96 GT:AD:DP:GL:GQ 1/1:1,53:49:-151.81,-14.78,-4.21:99
-chr1 3037112 rs2817178 T C 138.65 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.50;MQ=59.01;MQ0=0;OQ=1783.83;QD=33.66;SB=-780.99 GT:AD:DP:GL:GQ 1/1:0,53:51:-182.00,-15.37,-0.03:99
-chr1 3037307 rs10797378 T C 263.69 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=57.77;MQ0=0;OQ=673.03;QD=12.02;SB=-270.24 GT:AD:DP:GL:GQ 0/1:24,31:50:-85.66,-15.07,-91.32:99
-chr1 3037312 rs2788087 A G 5.84 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=3;HaplotypeScore=4.61;MQ=57.43;MQ0=0;OQ=719.26;QD=12.40;SB=-323.12 GT:AD:DP:GL:GQ 0/1:28,30:54:-91.49,-16.28,-101.63:99
-chr1 3037323 rs10909881 G A 169.28 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.31;MQ=57.69;MQ0=0;OQ=859.60;QD=14.57;SB=-445.45 GT:AD:DP:GL:GQ 0/1:30,29:55:-105.83,-16.59,-85.38:99
-chr1 3038158 rs2817180 T C 101.32 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.60;MQ0=0;OQ=1662.63;QD=29.17;SB=-686.71 GT:AD:DP:GL:GQ 1/1:0,57:52:-169.90,-15.69,-0.05:99
-chr1 3038602 rs35360783 A G 220.53 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.65;MQ0=0;OQ=463.18;QD=8.74;SB=-235.89 GT:AD:DP:GL:GQ 0/1:32,21:53:-65.58,-15.98,-127.69:99
-chr1 3039222 rs12024620 C T 40.79 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=4.42;MQ=59.20;MQ0=0;OQ=839.66;QD=14.48;SB=-156.21 GT:AD:DP:GL:GQ 0/1:32,26:56:-104.13,-16.88,-98.69:99
-chr1 3039241 rs12021948 G C 56.36 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.56;MQ0=0;OQ=946.79;QD=17.86;SB=-223.20 GT:AD:DP:GL:GQ 0/1:25,28:53:-113.94,-15.98,-109.97:99
-chr1 3039433 rs12740389 C T 216.94 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.36;MQ0=0;OQ=1244.61;QD=19.15;SB=-628.67 GT:AD:DP:GL:GQ 0/1:28,37:63:-146.73,-18.98,-86.83:99
-chr1 3039715 rs35999894 C T 445.61 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1131.40;QD=18.86;SB=-581.12 GT:AD:DP:GL:GQ 0/1:26,34:58:-133.91,-17.48,-78.73:99
-chr1 3039945 rs34733164 A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=4;HaplotypeScore=2.38;MQ=59.17;MQ0=0;OQ=103.23;QD=3.69;SB=-48.95 GT:AD:DP:GL:GQ 0/1:18,10:23:-20.53,-6.93,-62.39:99
-chr1 3040081 rs12022170 G A 254.38 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.17;MQ0=0;OQ=717.02;QD=15.93;SB=-327.88 GT:AD:DP:GL:GQ 0/1:23,22:43:-87.95,-12.96,-65.92:99
-chr1 3040191 rs12028027 T C 223.73 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.03;MQ0=0;OQ=428.68;QD=8.93;SB=-212.28 GT:AD:DP:GL:GQ 0/1:28,20:45:-59.72,-13.57,-97.74:99
-chr1 3040222 rs12027117 A G 229.27 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.46;MQ0=0;OQ=557.56;QD=12.97;SB=-281.47 GT:AD:DP:GL:GQ 0/1:21,22:42:-71.69,-12.65,-82.66:99
-chr1 3040357 rs10909883 A G 344.92 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.62;MQ0=0;OQ=754.58;QD=12.37;SB=-348.58 GT:AD:DP:GL:GQ 0/1:28,33:59:-96.53,-17.79,-109.54:99
-chr1 3040454 rs12120879 C G 45.73 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.33;MQ=58.92;MQ0=0;OQ=1009.80;QD=18.03;SB=-357.43 GT:AD:DP:GL:GQ 0/1:27,29:53:-120.25,-15.98,-106.43:99
-chr1 3040798 rs35848773 T C 267.80 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.65;MQ0=0;OQ=685.07;QD=12.69;SB=-277.27 GT:AD:DP:GL:GQ 0/1:21,33:48:-86.26,-14.47,-82.32:99
-chr1 3040900 rs12731315 G C 3.75 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=3;HaplotypeScore=3.13;MQ=60.00;MQ0=0;OQ=656.27;QD=17.74;SB=-310.23 GT:AD:DP:GL:GQ 0/1:18,19:37:-80.07,-11.16,-76.94:99
-chr1 3041210 rs12724921 T A 454.48 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=611.82;QD=12.00;SB=-313.55 GT:AD:DP:GL:GQ 0/1:28,23:48:-78.92,-14.46,-101.94:99
-chr1 3041481 rs909509 A G 48.89 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.12;MQ=59.51;MQ0=0;OQ=373.32;QD=7.94;SB=-138.54 GT:AD:DP:GL:GQ 0/1:28,18:38:-52.08,-11.46,-81.04:99
-chr1 3041609 rs12725529 T C 111.43 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=58.62;MQ0=0;OQ=287.04;QD=7.76;SB=-113.62 GT:AD:DP:GL:GQ 0/1:21,16:34:-42.24,-10.25,-81.99:99
-chr1 3042125 rs7535865 A C 10.52 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=7.89;MQ=58.97;MQ0=0;OQ=623.66;QD=13.86;SB=-308.90 GT:AD:DP:GL:GQ 0/1:18,27:40:-77.70,-12.05,-63.90:99
-chr1 3042361 rs4648363 C T 227.69 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.42;MQ0=0;OQ=413.64;QD=10.34;SB=-159.64 GT:AD:DP:GL:GQ 0/1:26,14:37:-55.80,-11.16,-73.37:99
-chr1 3043023 rs35794895 G A 293.61 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=58.64;MQ0=0;OQ=693.50;QD=14.45;SB=-320.87 GT:AD:DP:GL:GQ 0/1:21,26:42:-85.30,-12.67,-60.57:99
-chr1 3043817 rs12741594 A T 497.03 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=877.02;QD=14.62;SB=-406.56 GT:AD:DP:GL:GQ 0/1:31,29:60:-109.06,-18.07,-115.07:99
-chr1 3043966 rs2235176 T C 337.32 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=677.48;QD=12.55;SB=-208.33 GT:AD:DP:GL:GQ 0/1:27,27:53:-87.00,-15.97,-104.05:99
-chr1 3044349 rs35877876 C T 270.74 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.61;MQ0=0;OQ=969.79;QD=16.44;SB=-358.48 GT:AD:DP:GL:GQ 0/1:30,29:59:-118.04,-17.77,-107.71:99
-chr1 3045481 rs10797379 T C 126.05 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.62;MQ0=0;OQ=1290.17;QD=29.32;SB=-604.23 GT:AD:DP:GL:GQ 1/1:0,44:42:-132.64,-12.67,-0.04:99
-chr1 3045736 rs10797380 A G 12.13 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=4.39;MQ=59.03;MQ0=0;OQ=1384.53;QD=28.84;SB=-697.60 GT:AD:DP:GL:GQ 1/1:0,48:44:-142.08,-13.27,-0.04:99
-chr1 3046509 rs7354964 C G 181.06 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.06;MQ0=0;OQ=756.10;QD=18.90;SB=-387.98 GT:AD:DP:GL:GQ 0/1:19,21:40:-90.95,-12.05,-80.97:99
-chr1 3047001 rs2817181 A G 378.95 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=2402.64;QD=34.32;SB=-979.90 GT:AD:DP:GL:GQ 1/1:0,70:68:-243.87,-20.48,-0.03:99
-chr1 3047521 rs7538096 T C 291.96 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.64;MQ0=0;OQ=861.01;QD=13.45;SB=-250.18 GT:AD:DP:GL:GQ 0/1:31,33:64:-108.67,-19.29,-124.47:99
-chr1 3048093 rs2742666 T C 36.97 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=6.22;MQ=57.02;MQ0=0;OQ=594.94;QD=12.93;SB=-209.63 GT:AD:DP:GL:GQ 0/1:23,23:42:-75.43,-12.65,-85.93:99
-chr1 3048098 rs2742665 A C 100.54 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=57.17;MQ0=0;OQ=617.42;QD=15.44;SB=-256.42 GT:AD:DP:GL:GQ 0/1:17,23:38:-76.47,-11.45,-58.49:99
-chr1 3048109 rs2817183 A G 380.39 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.05;MQ0=0;OQ=578.38;QD=14.46;SB=-222.56 GT:AD:DP:GL:GQ 0/1:19,21:39:-72.87,-11.75,-75.47:99
-chr1 3048230 rs2817184 G A 543.37 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=743.48;QD=15.82;SB=-334.86 GT:AD:DP:GL:GQ 0/1:23,24:46:-91.50,-13.86,-76.30:99
-chr1 3050041 rs6684093 C T 40.49 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=5.68;MQ=58.71;MQ0=0;OQ=937.27;QD=17.36;SB=-475.05 GT:AD:DP:GL:GQ 0/1:24,30:51:-112.38,-15.37,-76.51:99
-chr1 3051143 rs1875449 C A 6.39 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=5.78;MQ=59.44;MQ0=0;OQ=367.51;QD=8.96;SB=-206.89 GT:AD:DP:GL:GQ 0/1:23,18:37:-51.19,-11.15,-77.66:99
-chr1 3052735 rs2817187 G T 176.34 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.61;MQ0=0;OQ=2057.17;QD=34.87;SB=-1041.53 GT:AD:DP:GL:GQ 1/1:0,59:58:-209.32,-17.47,-0.02:99
-chr1 3066300 . C T 85.23 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.28;MQ0=0;OQ=957.84;QD=16.51;SB=-344.34 GT:AD:DP:GL:GQ 0/1:29,29:58:-116.54,-17.47,-102.34:99
-chr1 3068821 . G A 12.77 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.86;MQ=59.41;MQ0=0;OQ=492.51;QD=12.63;SB=-226.54 GT:AD:DP:GL:GQ 0/1:19,20:34:-62.79,-10.25,-59.33:99
-chr1 3069601 rs34175350 G C 4.56 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=15.60;MQ0=24;OQ=307.57;QD=4.16;SB=-10.00 GT:AD:DP:GL:GQ 0/1:61,13:26:-41.87,-7.83,-71.98:99
-chr1 3071991 . T C 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=7.33;MQ=54.00;MQ0=2;OQ=261.16;QD=5.02;SB=-67.51 GT:AD:DP:GL:GQ 0/1:33,19:40:-41.45,-12.05,-111.58:99
-chr1 3072015 . C T 17.95 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=6.27;MQ=51.72;MQ0=4;QD=0.46;SB=-17.49 GT:AD:DP:GL:GQ 0/1:29,10:20:-11.10,-6.03,-56.69:50.72
-chr1 3077233 rs10909887 A T 53.28 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.52;MQ=59.65;MQ0=0;OQ=1671.94;QD=31.55;SB=-810.23 GT:AD:DP:GL:GQ 1/1:0,53:48:-170.81,-14.47,-0.03:99
-chr1 3078302 rs2817127 C G 3.71 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=58.92;MQ0=0;OQ=1590.78;QD=40.79;SB=-669.44 GT:AD:DP:GL:GQ 1/1:0,39:38:-162.68,-11.46,-0.02:99
-chr1 3078602 rs2651936 C T 556.62 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1763.78;QD=38.34;SB=-617.01 GT:AD:DP:GL:GQ 1/1:0,46:45:-179.97,-13.55,-0.01:99
-chr1 3078803 rs2817128 T C 41.66 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=0.92;MQ=58.79;MQ0=0;OQ=1700.76;QD=31.50;SB=-627.85 GT:AD:DP:GL:GQ 1/1:0,54:53:-173.71,-15.98,-0.05:99
-chr1 3078920 rs2817129 G C 420.84 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2270.90;QD=42.85;SB=-927.24 GT:AD:DP:GL:GQ 1/1:0,53:53:-230.70,-15.98,-0.02:99
-chr1 3079836 rs3795268 G A 518.97 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2012.53;QD=38.70;SB=-765.66 GT:AD:DP:GL:GQ 1/1:0,52:51:-204.85,-15.36,-0.01:99
-chr1 3082486 rs61759169 A T 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=17.96;MQ=49.98;MQ0=1;OQ=467.66;QD=5.85;SB=-63.76 GT:AD:DP:GL:GQ 0/1:57,23:74:-72.34,-22.29,-212.74:99
-chr1 3082576 rs59307218 T C 89.31 Indel AC=1;AF=0.50;AN=2;DB;DP=106;Dels=0.00;HRun=1;HaplotypeScore=16.28;MQ=58.32;MQ0=0;QD=0.84;SB=-6.84 GT:AD:DP:GL:GQ 0/1:94,12:100:-42.34,-30.13,-353.31:99
-chr1 3082715 rs61759170 T C 0.15 PASS AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=1;HaplotypeScore=13.70;MQ=54.13;MQ0=0;OQ=433.59;QD=4.61;SB=-120.39 GT:AD:DP:GL:GQ 0/1:66,28:84:-71.95,-25.31,-255.13:99
-chr1 3082724 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=20.17;MQ=53.56;MQ0=0;OQ=265.77;QD=3.09;SB=-1.90 GT:AD:DP:GL:GQ 0/1:64,21:77:-55.36,-25.50,-226.03:99
-chr1 3082730 rs61759171 A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=25.02;MQ=53.60;MQ0=0;OQ=115.19;QD=1.46;SB=35.65 GT:AD:DP:GL:GQ 0/1:62,16:69:-35.59,-20.79,-209.49:99
-chr1 3083610 rs2817131 T C 1.92 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=7.31;MQ=58.76;MQ0=0;OQ=2679.05;QD=35.25;SB=-1269.49 GT:AD:DP:GL:GQ 1/1:0,76:75:-271.51,-22.59,-0.03:99
-chr1 3086215 rs868718 G A 224.01 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.60;MQ0=0;OQ=2257.57;QD=38.92;SB=-929.74 GT:AD:DP:GL:GQ 1/1:0,58:57:-229.36,-17.17,-0.02:99
-chr1 3086338 rs2817132 T C 256.47 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1749.39;QD=34.30;SB=-792.14 GT:AD:DP:GL:GQ 1/1:0,51:49:-178.54,-14.76,-0.01:99
-chr1 3086971 . G A 6.54 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=59.63;MQ0=0;OQ=869.92;QD=17.06;SB=-366.15 GT:AD:DP:GL:GQ 0/1:23,28:49:-105.05,-14.78,-70.17:99
-chr1 3087284 rs28576654 G A 0.62 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=8.45;MQ=55.21;MQ0=0;OQ=1827.21;QD=37.29;SB=-761.03 GT:AD:DP:GL:GQ 1/1:1,48:47:-186.32,-14.16,-0.02:99
-chr1 3087324 rs36042320 A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=36.16;MQ=53.71;MQ0=0;OQ=1199.13;QD=20.32;SB=-596.19 GT:AD:DP:GL:GQ 1/1:10,49:47:-136.03,-14.18,-12.56:16.27
-chr1 3087368 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=62.15;MQ=52.02;MQ0=2;OQ=84.05;QD=0.99;SB=68.22 GT:AD:DP:GL:GQ 0/1:64,20:65:-31.27,-19.58,-199.12:99
-chr1 3087405 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=113.18;MQ=45.62;MQ0=12;OQ=152.20;QD=1.23;SB=83.17 GT:AD:DP:GL:GQ 0/1:93,25:100:-54.91,-36.41,-286.94:99
-chr1 3087421 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=108;Dels=0.01;HRun=1;HaplotypeScore=157.91;MQ=45.44;MQ0=13;OQ=317.87;QD=2.94;SB=62.22 GT:AD:DP:GL:GQ 0/1:65,42:72:-56.46,-21.39,-222.98:99
-chr1 3087430 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=100;Dels=0.09;HRun=0;HaplotypeScore=131.45;MQ=45.35;MQ0=13;OQ=71.40;QD=0.71;SB=68.23 GT:AD:DP:GL:GQ 0/1:57,34:61:-28.82,-18.40,-174.57:99
-chr1 3087432 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=0;HaplotypeScore=125.43;MQ=44.68;MQ0=16;OQ=349.00;QD=3.39;SB=68.23 GT:AD:DP:GL:GQ 0/1:85,18:67:-58.39,-20.20,-173.08:99
-chr1 3087446 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=34.86;MQ=42.41;MQ0=15;OQ=253.15;QD=2.81;SB=53.16 GT:AD:DP:GL:GQ 0/1:47,43:54:-44.89,-16.29,-135.66:99
-chr1 3087456 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=33.91;MQ=40.94;MQ0=15;OQ=574.41;QD=6.38;SB=41.15 GT:AD:DP:GL:GQ 0/1:47,43:59:-78.52,-17.79,-127.78:99
-chr1 3087469 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=37.75;MQ=38.93;MQ0=14;OQ=420.06;QD=4.94;SB=41.09 GT:AD:DP:GL:GQ 0/1:56,29:63:-64.29,-19.00,-146.93:99
-chr1 3087482 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=75.90;MQ=37.38;MQ0=13;OQ=93.48;QD=1.23;SB=56.14 GT:AD:DP:GL:GQ 0/1:55,21:54:-28.92,-16.29,-150.91:99
-chr1 3087484 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=59.86;MQ=36.69;MQ0=13;OQ=224.49;QD=2.95;SB=47.15 GT:AD:DP:GL:GQ 0/1:64,12:51:-41.12,-15.38,-130.32:99
-chr1 3087496 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.18;HRun=0;HaplotypeScore=92.35;MQ=35.16;MQ0=7;OQ=80.55;QD=1.41;SB=-35.75 GT:AD:DP:GL:GQ 0/1:30,16:29:-20.09,-8.75,-100.50:99
-chr1 3087498 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=70.78;MQ=33.76;MQ0=7;OQ=147.15;QD=2.58;SB=-95.04 GT:AD:DP:GL:GQ 0/1:41,16:33:-27.95,-9.95,-82.07:99
-chr1 3087509 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.05;HRun=0;HaplotypeScore=74.81;MQ=32.58;MQ0=5;OQ=64.70;QD=1.06;SB=56.11 GT:AD:DP:GL:GQ 0/1:52,6:35:-20.32,-10.56,-93.36:97.54
-chr1 3087512 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=54.96;MQ=31.97;MQ0=5;OQ=503.11;QD=8.11;SB=-236.10 GT:AD:DP:GL:GQ 0/1:31,31:45:-67.16,-13.57,-94.41:99
-chr1 3087536 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=33.03;MQ=32.40;MQ0=3;OQ=59.37;QD=0.74;SB=89.25 GT:AD:DP:GL:GQ 0/1:72,7:63:-28.22,-18.99,-181.57:92.21
-chr1 3087538 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=37.44;MQ=32.40;MQ0=3;OQ=247.27;QD=3.09;SB=80.25 GT:AD:DP:GL:GQ 0/1:65,15:63:-46.99,-18.98,-180.33:99
-chr1 3087608 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=168;Dels=0.01;HRun=0;HaplotypeScore=54.40;MQ=37.28;MQ0=13;OQ=1887.72;QD=11.24;SB=-729.24 GT:AD:DP:GL:GQ 0/1:104,63:145:-235.47,-43.42,-271.37:99
-chr1 3087617 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=0;HaplotypeScore=53.68;MQ=37.94;MQ0=15;OQ=1635.04;QD=8.84;SB=-493.28 GT:AD:DP:GL:GQ 0/1:114,71:160:-215.01,-48.22,-344.93:99
-chr1 3087664 . A G 18.84 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=189;Dels=0.01;HRun=0;HaplotypeScore=131.51;MQ=40.84;MQ0=15;QD=0.10;SB=241.96 GT:AD:DP:GL:GQ 0/1:170,18:163:-53.97,-48.81,-580.79:51.62
-chr1 3087667 . C T 165.92 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=188;Dels=0.01;HRun=0;HaplotypeScore=132.64;MQ=41.11;MQ0=15;QD=0.88;SB=179.60 GT:AD:DP:GL:GQ 0/1:167,20:158:-67.18,-47.30,-486.26:99
-chr1 3087668 . A G 310.08 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=187;Dels=0.01;HRun=1;HaplotypeScore=124.54;MQ=41.17;MQ0=15;QD=1.66;SB=124.04 GT:AD:DP:GL:GQ 0/1:158,28:160:-82.20,-47.90,-540.31:99
-chr1 3087734 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=114;Dels=0.00;HRun=1;HaplotypeScore=13.23;MQ=44.53;MQ0=2;OQ=55.34;QD=0.49;SB=-14.90 GT:AD:DP:GL:GQ 0/1:101,11:104:-40.16,-31.34,-369.37:88.18
-chr1 3087747 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=0;HaplotypeScore=23.95;MQ=43.49;MQ0=2;OQ=1649.29;QD=15.71;SB=-709.98 GT:AD:DP:GL:GQ 0/1:48,57:100:-198.34,-30.13,-180.84:99
-chr1 3087772 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=133;Dels=0.00;HRun=0;HaplotypeScore=99.40;MQ=37.75;MQ0=7;OQ=762.57;QD=5.73;SB=-239.63 GT:AD:DP:GL:GQ 0/1:102,30:117:-114.83,-35.29,-281.68:99
-chr1 3087833 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=1;HaplotypeScore=261.50;MQ=29.30;MQ0=7;OQ=1486.23;QD=9.78;SB=-676.51 GT:AD:DP:GL:GQ 0/1:100,52:130:-191.07,-39.17,-253.74:99
-chr1 3087850 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=106.63;MQ=29.08;MQ0=7;OQ=1055.92;QD=7.23;SB=-459.23 GT:AD:DP:GL:GQ 0/1:100,46:125:-146.56,-37.68,-289.33:99
-chr1 3087853 . C A 11.81 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=148;Dels=0.00;HRun=0;HaplotypeScore=84.96;MQ=29.13;MQ0=6;QD=0.08;SB=22.69 GT:AD:DP:GL:GQ 0/1:134,14:133:-44.49,-40.06,-434.86:44.36
-chr1 3087861 . A C 168.29 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=135;Dels=0.00;HRun=0;HaplotypeScore=23.28;MQ=29.00;MQ0=4;QD=1.25;SB=-17.42 GT:AD:DP:GL:GQ 0/1:115,20:120:-56.26,-36.15,-379.05:99
-chr1 3087900 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=22.94;MQ=28.28;MQ0=1;OQ=423.78;QD=5.81;SB=-214.40 GT:AD:DP:GL:GQ 0/1:51,22:68:-66.15,-20.49,-189.92:99
-chr1 3087911 . C T 880.08 SnpCluster AC=1;AF=0.50;AN=2;DP=69;Dels=0.03;HRun=0;HaplotypeScore=32.89;MQ=28.46;MQ0=0;QD=12.75;SB=-315.83 GT:AD:DP:GL:GQ 0/1:40,27:49:-105.45,-14.16,-69.50:99
-chr1 3087912 . A G 1267.81 SnpCluster AC=1;AF=0.50;AN=2;DP=68;Dels=0.03;HRun=1;HaplotypeScore=32.88;MQ=28.45;MQ0=0;QD=18.64;SB=-474.20 GT:AD:DP:GL:GQ 0/1:22,44:48:-143.92,-13.86,-20.32:64.59
-chr1 3087920 . G A 574.31 SnpCluster AC=1;AF=0.50;AN=2;DP=74;Dels=0.04;HRun=0;HaplotypeScore=182.60;MQ=28.60;MQ0=0;QD=7.76;SB=-289.69 GT:AD:DP:GL:GQ 0/1:50,21:71:-81.21,-20.50,-157.25:99
-chr1 3087952 . G A 1075.62 Indel AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=58.78;MQ=31.99;MQ0=0;QD=13.62;SB=-555.39 GT:AD:DP:GL:GQ 0/1:45,34:75:-133.45,-22.61,-136.49:99
-chr1 3087978 . A G 38.22 DPFilter;Indel;LowQual AC=1;AF=0.50;AN=2;DP=109;Dels=0.02;HRun=1;HaplotypeScore=54.40;MQ=36.04;MQ0=0;QD=0.35;SB=94.63 GT:AD:DP:GL:GQ 0/1:93,14:103:-37.54,-30.43,-360.90:71.06
-chr1 3088004 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=0;HaplotypeScore=30.72;MQ=40.10;MQ0=2;OQ=423.13;QD=3.00;SB=9.29 GT:AD:DP:GL:GQ 0/1:121,20:123:-82.68,-37.08,-335.63:99
-chr1 3088013 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=142;Dels=0.03;HRun=0;HaplotypeScore=47.98;MQ=41.19;MQ0=4;OQ=426.97;QD=3.01;SB=-54.18 GT:AD:DP:GL:GQ 0/1:112,26:133:-84.85,-38.87,-412.97:99
-chr1 3088015 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=145;Dels=0.00;HRun=0;HaplotypeScore=42.51;MQ=41.21;MQ0=4;OQ=465.21;QD=3.21;SB=-60.11 GT:AD:DP:GL:GQ 0/1:116,29:131:-89.28,-39.48,-409.01:99
-chr1 3088100 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=132;Dels=0.00;HRun=0;HaplotypeScore=4.53;MQ=40.45;MQ0=11;OQ=130.52;QD=0.99;SB=-31.41 GT:AD:DP:GL:GQ 0/1:119,13:106:-48.30,-31.97,-302.63:99
-chr1 3088101 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=0;HaplotypeScore=4.53;MQ=40.49;MQ0=10;OQ=71.07;QD=0.55;SB=-5.78 GT:AD:DP:GL:GQ 0/1:117,11:111:-47.37,-36.98,-326.83:99
-chr1 3088217 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=80;Dels=0.01;HRun=0;HaplotypeScore=17.08;MQ=42.86;MQ0=1;OQ=126.54;QD=1.58;SB=-85.23 GT:AD:DP:GL:GQ 0/1:66,13:74:-37.94,-22.00,-241.16:99
-chr1 3088220 rs34886760 A G 0.65 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.01;HRun=1;HaplotypeScore=12.97;MQ=43.96;MQ0=1;OQ=1584.16;QD=20.84;SB=-521.89 GT:AD:DP:GL:GQ 0/1:11,64:65:-181.29,-19.59,-39.63:99
-chr1 3088304 rs61759175 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=118;Dels=0.08;HRun=0;HaplotypeScore=55.59;MQ=46.00;MQ0=11;OQ=251.71;QD=2.13;SB=81.71 GT:AD:DP:GL:GQ 0/1:90,18:102:-58.89,-30.43,-301.97:99
-chr1 3088575 rs2817134 T C 3.03 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=5.64;MQ=59.45;MQ0=0;OQ=1472.39;QD=35.06;SB=-604.20 GT:AD:DP:GL:GQ 1/1:0,42:42:-150.84,-12.65,-0.02:99
-chr1 3088745 rs2651931 C T 32.64 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.49;MQ=59.44;MQ0=0;OQ=1502.67;QD=36.65;SB=-632.85 GT:AD:DP:GL:GQ 1/1:0,40:38:-153.86,-11.45,-0.01:99
-chr1 3088761 rs2817135 T C 98.95 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.39;MQ0=0;OQ=1114.54;QD=29.33;SB=-484.51 GT:AD:DP:GL:GQ 1/1:0,38:36:-115.07,-10.86,-0.04:99
-chr1 3089054 rs950200 A G 135.40 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.38;MQ0=0;OQ=1494.35;QD=33.21;SB=-586.20 GT:AD:DP:GL:GQ 1/1:0,45:43:-153.04,-12.95,-0.02:99
-chr1 3091593 rs9660914 G A 174.18 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.63;MQ0=0;OQ=2157.13;QD=34.24;SB=-1073.97 GT:AD:DP:GL:GQ 1/1:0,63:58:-219.33,-17.49,-0.04:99
-chr1 3093686 rs4233024 C T 199.19 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.75;MQ0=0;OQ=1964.65;QD=37.78;SB=-829.97 GT:AD:DP:GL:GQ 1/1:0,52:51:-200.08,-15.37,-0.03:99
-chr1 3094490 rs10752733 A G 125.27 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1561.08;QD=30.61;SB=-635.88 GT:AD:DP:GL:GQ 1/1:0,51:49:-159.74,-14.78,-0.04:99
-chr1 3094942 rs2817136 G A 89.99 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1690.06;QD=36.74;SB=-568.32 GT:AD:DP:GL:GQ 1/1:0,46:44:-172.61,-13.26,-0.02:99
-chr1 3095136 rs2817138 T G 4.52 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=58.92;MQ0=0;OQ=1072.43;QD=24.94;SB=-511.45 GT:AD:DP:GL:GQ 1/1:0,43:37:-110.87,-11.16,-0.04:99
-chr1 3095423 rs2651919 G T 722.39 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2110.88;QD=35.78;SB=-952.39 GT:AD:DP:GL:GQ 1/1:0,59:58:-214.69,-17.47,-0.02:99
-chr1 3095697 rs2651918 T C 14.21 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=3.68;MQ=59.20;MQ0=0;OQ=1955.56;QD=33.72;SB=-956.98 GT:AD:DP:GL:GQ 1/1:0,58:55:-199.16,-16.57,-0.02:99
-chr1 3095769 rs2817139 A G 514.86 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.29;MQ0=0;OQ=1684.86;QD=27.18;SB=-755.66 GT:AD:DP:GL:GQ 1/1:0,62:53:-172.12,-15.99,-0.05:99
-chr1 3095922 rs7530075 G A 526.13 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1784.81;QD=39.66;SB=-851.64 GT:AD:DP:GL:GQ 1/1:0,45:45:-182.08,-13.55,-0.01:99
-chr1 3096128 rs2651917 C G 97.32 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.80;MQ0=0;OQ=1717.27;QD=36.54;SB=-542.46 GT:AD:DP:GL:GQ 1/1:0,47:42:-175.34,-12.67,-0.03:99
-chr1 3096165 rs7545798 A G 335.50 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=1218.45;QD=30.46;SB=-546.04 GT:AD:DP:GL:GQ 1/1:0,40:39:-125.47,-11.76,-0.04:99
-chr1 3096243 rs7545871 A G 179.87 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1274.76;QD=30.35;SB=-481.26 GT:AD:DP:GL:GQ 1/1:0,42:39:-131.09,-11.76,-0.02:99
-chr1 3096257 rs2651916 C T 670.34 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1810.18;QD=36.20;SB=-763.02 GT:AD:DP:GL:GQ 1/1:0,50:47:-184.62,-14.16,-0.02:99
-chr1 3096476 rs2817140 A G 6.35 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=1038.30;QD=28.84;SB=-515.16 GT:AD:DP:GL:GQ 1/1:0,36:34:-107.45,-10.26,-0.04:99
-chr1 3096661 rs61759179 G A 1.83 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.55;MQ=53.62;MQ0=2;OQ=1172.74;QD=30.07;SB=-520.65 GT:AD:DP:GL:GQ 1/1:8,31:31:-120.87,-9.34,-0.01:93.29
-chr1 3096814 rs2817141 T C 22.79 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=1.30;MQ=59.19;MQ0=0;OQ=1269.17;QD=27.59;SB=-620.79 GT:AD:DP:GL:GQ 1/1:0,46:42:-130.56,-12.68,-0.06:99
-chr1 3097140 rs1875451 C T 277.41 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.63;MQ0=0;OQ=1807.86;QD=35.45;SB=-805.30 GT:AD:DP:GL:GQ 1/1:0,51:46:-184.39,-13.86,-0.02:99
-chr1 3098276 rs2651914 T G 143.53 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=2148.66;QD=35.22;SB=-1029.38 GT:AD:DP:GL:GQ 1/1:0,61:61:-218.47,-18.37,-0.02:99
-chr1 3098356 rs10737190 G A 615.19 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=3298.92;QD=39.75;SB=-1410.68 GT:AD:DP:GL:GQ 1/1:0,83:81:-328.89,-24.40,-0.02:99
-chr1 3098377 rs6685614 G A 280.84 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.78;MQ0=0;OQ=3233.06;QD=38.95;SB=-1261.68 GT:AD:DP:GL:GQ 1/1:0,83:82:-327.11,-24.71,-0.03:99
-chr1 3099011 rs7539775 G A 230.88 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.47;MQ0=0;OQ=1818.76;QD=34.98;SB=-678.01 GT:AD:DP:GL:GQ 1/1:1,51:49:-188.18,-14.77,-2.72:99
-chr1 3100277 rs2651913 C G 465.83 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1755.38;QD=41.79;SB=-899.81 GT:AD:DP:GL:GQ 1/1:0,42:41:-179.13,-12.35,-0.01:99
-chr1 3100595 rs2651912 T C 68.37 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=4.22;MQ=58.95;MQ0=0;OQ=646.58;QD=10.43;SB=-279.12 GT:AD:DP:GL:GQ 0/1:33,29:56:-84.82,-16.88,-119.30:99
-chr1 3104232 . G A 37.52 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=60.00;MQ0=0;OQ=572.60;QD=16.36;SB=-260.57 GT:AD:DP:GL:GQ 0/1:16,19:33:-70.49,-9.94,-51.89:99
-chr1 3105581 rs950449 C G 114.98 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=352.20;QD=14.09;SB=-136.76 GT:AD:DP:GL:GQ 0/1:14,11:24:-45.74,-7.23,-56.39:99
-chr1 3106518 rs2651923 T C 555.63 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.18;MQ0=0;OQ=1262.70;QD=28.70;SB=-607.93 GT:AD:DP:GL:GQ 1/1:0,44:40:-129.89,-12.07,-0.04:99
-chr1 3110061 rs2817142 T C 84.27 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=58.76;MQ0=0;OQ=950.22;QD=27.95;SB=-463.20 GT:AD:DP:GL:GQ 1/1:1,33:31:-98.64,-9.35,-0.03:93.20
-chr1 3113619 rs2817143 T C 475.54 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1485.25;QD=30.31;SB=-541.01 GT:AD:DP:GL:GQ 1/1:0,49:46:-152.15,-13.87,-0.04:99
-chr1 3119305 . C T 6.85 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=482.22;QD=12.06;SB=-197.28 GT:AD:DP:GL:GQ 0/1:23,17:38:-62.96,-11.45,-76.10:99
-chr1 3119433 rs60892783 T A 341.04 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.85;MQ0=0;OQ=778.15;QD=15.26;SB=-381.44 GT:AD:DP:GL:GQ 0/1:26,25:51:-96.46,-15.36,-96.60:99
-chr1 3124191 rs12124147 C T 18.37 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=4;HaplotypeScore=1.41;MQ=60.00;MQ0=0;OQ=2106.36;QD=38.30;SB=-923.21 GT:AD:DP:GL:GQ 1/1:0,55:54:-214.24,-16.27,-0.02:99
-chr1 3125697 . G A 48.02 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.90;MQ=59.58;MQ0=0;OQ=894.40;QD=16.26;SB=-426.44 GT:AD:DP:GL:GQ 0/1:28,27:53:-108.70,-15.98,-81.48:99
-chr1 3133804 rs10737191 T C 216.08 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.05;MQ0=0;OQ=1310.90;QD=29.79;SB=-629.85 GT:AD:DP:GL:GQ 1/1:0,44:43:-134.73,-12.98,-0.05:99
-chr1 3137939 rs2651921 T C 31.09 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.62;MQ=57.88;MQ0=0;OQ=1318.12;QD=31.38;SB=-539.87 GT:AD:DP:GL:GQ 1/1:0,42:38:-135.41,-11.45,-0.01:99
-chr1 3139859 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=4;HaplotypeScore=1.59;MQ=58.84;MQ0=0;OQ=177.35;QD=4.43;SB=56.21 GT:AD:DP:GL:GQ 0/1:24,16:34:-31.27,-10.25,-94.47:99
-chr1 3140395 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=11.19;MQ=58.95;MQ0=0;OQ=93.28;QD=2.12;SB=71.27 GT:AD:DP:GL:GQ 0/1:31,13:33:-22.56,-9.95,-125.01:99
-chr1 3146326 rs2455112 A G 135.43 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=60.00;MQ0=0;OQ=1096.93;QD=16.88;SB=-503.18 GT:AD:DP:GL:GQ 0/1:28,37:65:-132.56,-19.58,-110.95:99
-chr1 3151094 . T G 27.85 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=10.51;MQ=58.72;MQ0=0;QD=0.55;SB=62.22 GT:AD:DP:GL:GQ 0/1:29,22:34:-16.31,-10.24,-101.82:60.68
-chr1 3154977 . C T 20.55 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.05;MQ0=0;OQ=960.26;QD=19.60;SB=-359.36 GT:AD:DP:GL:GQ 0/1:20,29:48:-113.77,-14.46,-73.03:99
-chr1 3155966 rs1105111 C A 740.08 Indel AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=6;HaplotypeScore=0.00;MQ=60.39;MQ0=0;QD=13.46;SB=-187.60 GT:AD:DP:GL:GQ 0/1:28,27:54:-93.56,-16.26,-102.62:99
-chr1 3156860 . C A 1.29 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=2.70;MQ=59.41;MQ0=0;OQ=714.68;QD=18.33;SB=-335.33 GT:AD:DP:GL:GQ 0/1:15,24:39:-86.50,-11.75,-50.10:99
-chr1 3157063 rs60443258 C G 197.93 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.43;MQ0=0;OQ=467.30;QD=14.16;SB=-190.23 GT:AD:DP:GL:GQ 0/1:18,15:33:-59.97,-9.95,-75.73:99
-chr1 3158034 rs11589327 C T 221.90 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=55.82;MQ0=0;OQ=602.02;QD=14.68;SB=-226.92 GT:AD:DP:GL:GQ 0/1:22,19:39:-75.24,-11.75,-65.81:99
-chr1 3158063 rs61759183 G A 105.26 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.23;MQ=54.25;MQ0=0;OQ=859.64;QD=18.29;SB=-349.39 GT:AD:DP:GL:GQ 0/1:17,30:44:-102.53,-13.28,-49.01:99
-chr1 3158107 rs55987640 G A 184.91 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=55.61;MQ0=0;OQ=836.43;QD=16.73;SB=-292.80 GT:AD:DP:GL:GQ 0/1:21,29:42:-99.58,-12.65,-57.74:99
-chr1 3158110 rs10909910 G C 37.93 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=55.78;MQ0=0;OQ=2043.92;QD=39.31;SB=-983.24 GT:AD:DP:GL:GQ 1/1:0,52:49:-208.00,-14.77,-0.02:99
-chr1 3158140 rs10797386 A G 147.32 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=58.66;MQ0=0;OQ=1752.75;QD=33.71;SB=-820.65 GT:AD:DP:GL:GQ 1/1:0,52:49:-178.87,-14.76,-0.02:99
-chr1 3158322 rs12143201 C T 107.15 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=58.81;MQ0=0;OQ=1087.80;QD=19.78;SB=-426.85 GT:AD:DP:GL:GQ 0/1:23,32:54:-128.34,-16.28,-69.54:99
-chr1 3158948 rs7539489 G A 212.35 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.64;MQ=59.50;MQ0=0;OQ=701.66;QD=15.25;SB=-203.89 GT:AD:DP:GL:GQ 0/1:22,24:42:-86.11,-12.66,-64.73:99
-chr1 3160428 rs56015432 C G 319.35 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=42.71;MQ0=18;OQ=1056.37;QD=11.61;SB=-361.10 GT:AD:DP:GL:GQ 0/1:52,38:68:-131.78,-22.86,-160.18:99
-chr1 3160647 rs2376494 T C 490.07 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.54;MQ0=5;OQ=1049.98;QD=13.46;SB=-449.81 GT:AD:DP:GL:GQ 0/1:34,44:69:-129.08,-20.80,-121.01:99
-chr1 3160969 rs61691507 T C 83.17 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=3;HaplotypeScore=0.96;MQ=48.88;MQ0=0;OQ=936.08;QD=14.18;SB=-414.90 GT:AD:DP:GL:GQ 0/1:32,34:63:-115.87,-18.98,-126.60:99
-chr1 3161244 rs28883366 T C 328.67 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=20.07;MQ0=44;OQ=827.10;QD=11.18;SB=-204.07 GT:AD:DP:GL:GQ 1/1:25,49:28:-86.33,-8.45,-0.03:84.18
-chr1 3161789 rs4648464 G A 197.91 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=53.22;MQ0=0;OQ=1078.68;QD=20.35;SB=-414.45 GT:AD:DP:GL:GQ 0/1:21,32:51:-126.53,-15.37,-60.62:99
-chr1 3161922 rs4648465 G A 93.86 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=50.73;MQ0=0;OQ=1117.60;QD=22.35;SB=-454.98 GT:AD:DP:GL:GQ 0/1:18,32:50:-130.11,-15.06,-59.43:99
-chr1 3162133 rs2455100 T C 1.91 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=58.24;MQ0=0;OQ=1353.88;QD=28.21;SB=-366.45 GT:AD:DP:GL:GQ 1/1:0,48:45:-139.02,-13.58,-0.05:99
-chr1 3162911 rs6699624 G C 272.84 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.50;MQ0=0;OQ=1093.08;QD=16.07;SB=-449.43 GT:AD:DP:GL:GQ 0/1:32,35:63:-131.59,-19.00,-134.16:99
-chr1 3163088 rs1971330 C T 114.07 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=49.78;MQ0=0;OQ=900.72;QD=19.58;SB=-445.49 GT:AD:DP:GL:GQ 0/1:19,27:44:-106.61,-13.25,-68.73:99
-chr1 3163142 rs1971331 A G 155.18 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=39.25;MQ0=0;OQ=1400.23;QD=30.44;SB=-715.29 GT:AD:DP:GL:GQ 1/1:0,46:45:-143.65,-13.57,-0.04:99
-chr1 3165231 rs10909912 T G 383.69 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.06;MQ0=0;OQ=430.36;QD=10.76;SB=-234.78 GT:AD:DP:GL:GQ 0/1:20,20:39:-58.07,-11.75,-73.52:99
-chr1 3165588 rs2455101 A G 194.31 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.36;MQ0=0;OQ=514.34;QD=12.86;SB=-185.55 GT:AD:DP:GL:GQ 0/1:18,22:37:-65.87,-11.15,-65.63:99
-chr1 3165783 . C T 13.80 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=427.64;QD=9.30;SB=-160.18 GT:AD:DP:GL:GQ 0/1:30,16:42:-58.70,-12.66,-94.89:99
-chr1 3166230 . C G 139.63 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=825.87;QD=15.88;SB=-367.51 GT:AD:DP:GL:GQ 0/1:23,29:49:-100.65,-14.78,-100.14:99
-chr1 3167106 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=181.43;MQ=36.47;MQ0=0;OQ=530.53;QD=4.31;SB=-209.32 GT:AD:DP:GL:GQ 0/1:66,39:92:-95.27,-38.93,-253.94:99
-chr1 3167116 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=174;Dels=0.01;HRun=1;HaplotypeScore=260.94;MQ=34.61;MQ0=0;OQ=942.41;QD=5.42;SB=-369.43 GT:AD:DP:GL:GQ 0/1:66,57:123:-208.12,-110.59,-323.19:99
-chr1 3167119 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=191;Dels=0.00;HRun=1;HaplotypeScore=217.51;MQ=34.08;MQ0=0;OQ=198.48;QD=1.04;SB=93.36 GT:AD:DP:GL:GQ 0/1:148,42:118:-61.70,-38.57,-398.62:99
-chr1 3167131 . G A 38.92 DPFilter;Indel;LowQual AC=1;AF=0.50;AN=2;DP=216;Dels=0.00;HRun=0;HaplotypeScore=418.78;MQ=33.67;MQ0=0;QD=0.18;SB=-15.26 GT:AD:DP:GL:GQ 0/1:171,44:118:-42.73,-35.55,-373.47:71.75
-chr1 3167160 . G A 609.50 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=190;Dels=0.00;HRun=0;HaplotypeScore=319.28;MQ=32.32;MQ0=1;QD=3.21;SB=-149.32 GT:AD:DP:GL:GQ 0/1:134,56:72:-85.93,-21.70,-173.92:99
-chr1 3167161 . T C 245.51 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=188;Dels=0.00;HRun=0;HaplotypeScore=318.96;MQ=32.30;MQ0=1;QD=1.31;SB=53.20 GT:AD:DP:GL:GQ 0/1:174,14:59:-45.63,-17.79,-171.10:99
-chr1 3167162 . G A 200.87 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=187;Dels=0.00;HRun=0;HaplotypeScore=336.60;MQ=32.32;MQ0=1;QD=1.07;SB=56.18 GT:AD:DP:GL:GQ 0/1:174,10:62:-51.08,-27.71,-180.52:99
-chr1 3167163 . G A 107.11 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=184;Dels=0.00;HRun=0;HaplotypeScore=325.93;MQ=32.20;MQ0=1;QD=0.58;SB=-62.93 GT:AD:DP:GL:GQ 0/1:163,18:64:-33.28,-19.29,-195.22:99
-chr1 3167166 . A G 243.37 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=314.12;MQ=31.98;MQ0=1;QD=1.36;SB=56.35 GT:AD:DP:GL:GQ 0/1:138,41:62:-46.30,-18.68,-187.52:99
-chr1 3167169 . A G 120.84 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=185;Dels=0.00;HRun=1;HaplotypeScore=387.92;MQ=32.13;MQ0=1;QD=0.65;SB=76.41 GT:AD:DP:GL:GQ 0/1:141,44:79:-39.18,-23.81,-262.75:99
-chr1 3167180 rs57179041 G A 114.65 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=141;Dels=0.00;HRun=1;HaplotypeScore=408.58;MQ=31.71;MQ0=1;QD=0.81;SB=86.30 GT:AD:DP:GL:GQ 0/1:118,23:43:-27.70,-12.95,-132.25:99
-chr1 3167181 . A G 38.85 DPFilter;Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=1;HaplotypeScore=419.93;MQ=31.63;MQ0=1;QD=0.28;SB=86.30 GT:AD:DP:GL:GQ 0/1:108,33:42:-19.82,-12.66,-143.77:71.68
-chr1 3167187 . T C 11.48 DPFilter;Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=120;Dels=0.41;HRun=0;HaplotypeScore=330.20;MQ=31.90;MQ0=1;QD=0.10;SB=5.04 GT:AD:DP:GL:GQ 0/1:52,5:44:-17.05,-12.65,-148.02:44
-chr1 3167189 . G A 33.08 DPFilter;Indel;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=123;Dels=0.12;HRun=1;HaplotypeScore=208.65;MQ=32.18;MQ0=1;QD=0.27;SB=8.05 GT:AD:DP:GL:GQ 0/1:103,5:46:-20.45,-13.86,-154.58:65.91
-chr1 3167200 rs57648616 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=119;Dels=0.00;HRun=0;HaplotypeScore=125.27;MQ=33.30;MQ0=1;OQ=406.22;QD=3.41;SB=39.53 GT:AD:DP:GL:GQ 0/1:44,74:56:-63.73,-19.82,-152.72:99
-chr1 3167205 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=115;Dels=0.00;HRun=1;HaplotypeScore=95.81;MQ=33.44;MQ0=1;OQ=560.09;QD=4.87;SB=72.41 GT:AD:DP:GL:GQ 0/1:70,45:71:-80.68,-21.39,-190.32:99
-chr1 3167222 rs57879698 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=105.67;MQ=36.94;MQ0=1;OQ=371.38;QD=4.08;SB=65.41 GT:AD:DP:GL:GQ 0/1:54,36:67:-60.61,-20.18,-198.91:99
-chr1 3167226 . A G 25.97 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=1;HaplotypeScore=94.17;MQ=37.02;MQ0=1;QD=0.29;SB=104.36 GT:AD:DP:GL:GQ 0/1:77,13:68:-26.37,-20.49,-239.07:58.80
-chr1 3167247 . A G 94.62 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=9.30;MQ=43.30;MQ0=0;QD=1.30;SB=66.40 GT:AD:DP:GL:GQ 0/1:60,13:64:-32.03,-19.29,-213.53:99
-chr1 3167248 rs61151413 C T 166.25 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=15.29;MQ=43.46;MQ0=0;QD=2.31;SB=80.73 GT:AD:DP:GL:GQ 0/1:59,13:65:-39.51,-19.60,-174.44:99
-chr1 3167253 . A G 43.60 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=1;HaplotypeScore=18.65;MQ=43.75;MQ0=0;QD=0.56;SB=110.39 GT:AD:DP:GL:GQ 0/1:68,10:69:-28.43,-20.79,-243.20:76.44
-chr1 3167258 . G A 29.42 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=1;HaplotypeScore=29.46;MQ=43.75;MQ0=0;QD=0.38;SB=107.33 GT:AD:DP:GL:GQ 0/1:71,7:70:-27.32,-21.09,-225.20:62.25
-chr1 3167340 rs3002685 A G 235.56 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=44.86;MQ0=0;OQ=812.94;QD=11.29;SB=-432.88 GT:AD:DP:GL:GQ 0/1:35,37:64:-103.87,-19.29,-131.86:99
-chr1 3167551 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=15;HaplotypeScore=12.64;MQ=52.48;MQ0=0;OQ=368.96;QD=5.95;SB=77.28 GT:AD:DP:GL:GQ 0/1:44,18:52:-55.84,-15.67,-137.44:99
-chr1 3168576 . C T 188.74 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.69;MQ0=0;OQ=823.49;QD=13.72;SB=-404.84 GT:AD:DP:GL:GQ 0/1:34,26:58:-103.11,-17.48,-109.21:99
-chr1 3169081 . C T 79.34 PASS AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.66;MQ0=0;OQ=1096.77;QD=16.37;SB=-547.56 GT:AD:DP:GL:GQ 0/1:32,35:63:-131.94,-18.98,-108.41:99
-chr1 3169567 rs1501611 G A 10.13 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=8.26;MQ=58.29;MQ0=0;OQ=520.16;QD=12.69;SB=-281.22 GT:AD:DP:GL:GQ 0/1:21,20:36:-66.15,-10.85,-62.40:99
-chr1 3169746 rs2455106 G C 285.96 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1036.68;QD=23.56;SB=-535.79 GT:AD:DP:GL:GQ 0/1:15,29:43:-119.91,-12.96,-65.17:99
-chr1 3170018 rs2455107 T G 277.10 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.50;MQ0=0;OQ=669.75;QD=14.56;SB=-280.87 GT:AD:DP:GL:GQ 0/1:21,25:42:-82.91,-12.65,-66.12:99
-chr1 3170493 rs2455102 A G 356.81 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.62;MQ0=0;OQ=653.73;QD=10.21;SB=-205.32 GT:AD:DP:GL:GQ 0/1:37,27:63:-87.64,-18.99,-144.47:99
-chr1 3170958 . C T 1.10 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=5.86;MQ=59.55;MQ0=0;OQ=1035.67;QD=20.31;SB=-528.11 GT:AD:DP:GL:GQ 0/1:20,31:50:-121.92,-15.07,-64.72:99
-chr1 3171559 rs2500250 T C 389.53 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=559.12;QD=10.55;SB=-252.33 GT:AD:DP:GL:GQ 0/1:30,23:52:-74.86,-15.66,-123.43:99
-chr1 3171782 rs10909913 A G 116.69 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=2.90;MQ=59.63;MQ0=0;OQ=1003.48;QD=15.93;SB=-509.29 GT:AD:DP:GL:GQ 0/1:27,35:61:-122.01,-18.38,-106.15:99
-chr1 3172391 rs2455096 A C 43.29 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=287.98;QD=8.47;SB=-120.97 GT:AD:DP:GL:GQ 0/1:18,16:31:-41.43,-9.34,-63.22:99
-chr1 3172429 rs56042628 C T 96.48 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=280.31;QD=9.34;SB=-80.59 GT:AD:DP:GL:GQ 0/1:19,11:28:-39.76,-8.44,-58.47:99
-chr1 3173020 rs2455094 G A 166.70 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=59.53;MQ0=0;OQ=444.07;QD=11.10;SB=-203.69 GT:AD:DP:GL:GQ 0/1:22,17:34:-57.94,-10.25,-64.34:99
-chr1 3173727 rs2455093 A G 256.03 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=832.24;QD=16.98;SB=-357.94 GT:AD:DP:GL:GQ 0/1:20,29:47:-100.67,-14.16,-75.12:99
-chr1 3174715 rs2455119 G T 285.04 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.49;MQ0=0;OQ=576.42;QD=12.81;SB=-209.45 GT:AD:DP:GL:GQ 0/1:23,22:42:-73.58,-12.65,-77.54:99
-chr1 3176001 . C T 83.35 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.70;MQ0=0;OQ=696.01;QD=13.92;SB=-293.84 GT:AD:DP:GL:GQ 0/1:26,23:46:-86.76,-13.88,-73.45:99
-chr1 3176267 . T G 76.55 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=60.00;MQ0=0;OQ=841.56;QD=14.76;SB=-394.65 GT:AD:DP:GL:GQ 0/1:27,30:56:-104.31,-16.87,-93.27:99
-chr1 3177045 rs3002687 T G 225.19 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.21;MQ=59.59;MQ0=0;OQ=571.62;QD=12.43;SB=-258.88 GT:AD:DP:GL:GQ 0/1:24,22:45:-74.00,-13.56,-84.05:99
-chr1 3177468 . C T 3.04 PASS AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.42;MQ0=0;OQ=538.59;QD=16.83;SB=-100.92 GT:AD:DP:GL:GQ 0/1:14,18:31:-66.48,-9.34,-49.83:99
-chr1 3177939 rs2500308 A G 95.88 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=59.39;MQ0=0;OQ=763.00;QD=10.04;SB=-332.88 GT:AD:DP:GL:GQ 0/1:45,31:71:-100.98,-21.39,-171.46:99
-chr1 3178661 . G A 33.39 PASS AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=60.00;MQ0=0;OQ=796.34;QD=18.96;SB=-401.21 GT:AD:DP:GL:GQ 0/1:18,24:42:-95.58,-12.66,-58.00:99
-chr1 3178998 rs2455127 A G 173.30 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=58.67;MQ0=0;OQ=507.17;QD=14.49;SB=-257.35 GT:AD:DP:GL:GQ 0/1:11,24:30:-63.05,-9.05,-41.23:99
-chr1 3179379 . A G 65.56 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=58.32;MQ0=0;OQ=481.41;QD=12.34;SB=-241.93 GT:AD:DP:GL:GQ 0/1:18,21:37:-62.58,-11.16,-65.22:99
-chr1 3179574 rs2455128 A G 108.65 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.62;MQ0=0;OQ=838.70;QD=13.98;SB=-378.24 GT:AD:DP:GL:GQ 0/1:31,29:59:-104.93,-17.77,-121.27:99
-chr1 3179592 rs2500307 T A 726.45 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2101.50;QD=36.23;SB=-987.86 GT:AD:DP:GL:GQ 1/1:0,58:58:-213.75,-17.47,-0.02:99
-chr1 3182386 rs2500304 T C 246 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.51;MQ0=0;OQ=550.86;QD=11.72;SB=-174.37 GT:AD:DP:GL:GQ 0/1:23,24:45:-71.94,-13.57,-90.75:99
-chr1 3182819 rs2455131 A G 160.52 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=53.72;MQ0=0;OQ=380.67;QD=9.28;SB=-185.58 GT:AD:DP:GL:GQ 0/1:26,15:41:-53.71,-12.35,-99.70:99
-chr1 3183091 . T G 31.12 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.54;MQ=48.96;MQ0=0;QD=0.80;SB=16.16 GT:AD:DP:GL:GQ 0/1:34,5:37:-17.54,-11.14,-116.34:63.95
-chr1 3183092 . C A 30.14 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=9.54;MQ=48.87;MQ0=0;QD=0.74;SB=14.77 GT:AD:DP:GL:GQ 0/1:36,5:37:-17.45,-11.16,-100.79:62.97
-chr1 3183861 rs55923982 G C 139.29 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.45;MQ=57.45;MQ0=0;OQ=542.30;QD=11.79;SB=-148.38 GT:AD:DP:GL:GQ 0/1:27,19:44:-70.78,-13.27,-111.52:99
-chr1 3184193 rs2455115 A G 314.03 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=53.52;MQ0=0;OQ=598.87;QD=12.22;SB=-281.59 GT:AD:DP:GL:GQ 0/1:25,24:48:-77.64,-14.47,-94.87:99
-chr1 3185401 . G T 101.68 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=59.51;MQ0=0;OQ=440.43;QD=11.59;SB=-233.97 GT:AD:DP:GL:GQ 0/1:19,19:33:-57.27,-9.94,-56.75:99
-chr1 3187015 . G A 77.56 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=59.67;MQ0=0;OQ=971.62;QD=17.05;SB=-421.44 GT:AD:DP:GL:GQ 0/1:28,29:55:-117.01,-16.57,-95.93:99
-chr1 3188693 rs905137 A G 186.40 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.61;MQ0=0;OQ=484.36;QD=10.09;SB=-266.22 GT:AD:DP:GL:GQ 0/1:25,23:44:-64.98,-13.26,-96.26:99
-chr1 3189244 rs905136 A G 4.18 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=4;HaplotypeScore=2.03;MQ=60.00;MQ0=0;OQ=654.87;QD=15.97;SB=-328.31 GT:AD:DP:GL:GQ 0/1:18,23:38:-80.22,-11.45,-60.36:99
-chr1 3189344 rs905135 A C 1.64 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=6.41;MQ=59.54;MQ0=0;OQ=215.02;QD=4.30;SB=-100.13 GT:AD:DP:GL:GQ 0/1:35,15:44:-38.04,-13.26,-114.24:99
-chr1 3189859 rs2500302 T C 241.97 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.92;MQ0=0;OQ=339.74;QD=8.71;SB=-144.67 GT:AD:DP:GL:GQ 0/1:23,16:37:-48.41,-11.15,-86.58:99
-chr1 3190143 rs56004439 G A 2.42 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=8.41;MQ=57.37;MQ0=0;OQ=401.65;QD=8.37;SB=-155.21 GT:AD:DP:GL:GQ 0/1:33,15:46:-57.32,-13.87,-99.82:99
-chr1 3190754 . G A 32.75 PASS AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1225.08;QD=18.85;SB=-426.92 GT:AD:DP:GL:GQ 0/1:29,36:64:-145.07,-19.28,-99.09:99
-chr1 3190930 rs6685398 C A 88.85 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=4.12;MQ=60.00;MQ0=0;OQ=531.21;QD=13.28;SB=-273.35 GT:AD:DP:GL:GQ 0/1:21,19:39:-68.15,-11.75,-68.57:99
-chr1 3190993 rs6690217 A C 128.36 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1454.60;QD=28.52;SB=-648.68 GT:AD:DP:GL:GQ 1/1:0,51:48:-149.09,-14.47,-0.05:99
-chr1 3192051 . C T 11.01 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.25;MQ0=0;OQ=927.90;QD=18.56;SB=-215.90 GT:AD:DP:GL:GQ 0/1:20,30:48:-110.53,-14.46,-70.14:99
-chr1 3192870 rs10797387 A C 142.29 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.89;MQ=59.80;MQ0=0;OQ=775.82;QD=12.93;SB=-322.85 GT:AD:DP:GL:GQ 0/1:30,30:54:-97.13,-16.27,-96.18:99
-chr1 3193262 . A G 27.47 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=435.09;QD=14.04;SB=-158.61 GT:AD:DP:GL:GQ 0/1:13,18:29:-55.53,-8.74,-48.24:99
-chr1 3193691 rs12024838 G C 0.85 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=9.20;MQ=52.13;MQ0=0;OQ=313.95;QD=12.08;SB=-105.65 GT:AD:DP:GL:GQ 0/1:16,10:19:-40.41,-5.73,-35.18:99
-chr1 3193692 rs61759191 C T 0.47 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=9.20;MQ=52.13;MQ0=0;OQ=179.56;QD=6.91;SB=-26.50 GT:AD:DP:GL:GQ 0/1:18,8:19:-26.97,-5.73,-38.66:99
-chr1 3193738 rs10909916 C G 2.42 PASS AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=6.33;MQ=40.46;MQ0=4;OQ=154.87;QD=11.06;SB=-44.90 GT:AD:DP:GL:GQ 0/1:9,5:7:-20.88,-2.11,-8.99:68.77
-chr1 3194086 rs6687930 T C 3.78 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=48.01;MQ0=1;OQ=344.21;QD=18.12;SB=-6.99 GT:AD:DP:GL:GQ 0/1:2,17:14:-41.92,-4.22,-8.13:39.10
-chr1 3194355 rs2134119 C G 59.27 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=4.23;MQ=54.23;MQ0=0;OQ=781.76;QD=15.95;SB=-353.76 GT:AD:DP:GL:GQ 0/1:22,27:44:-94.74,-13.28,-81.77:99
-chr1 3194394 rs2455117 T A 339.54 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.31;MQ0=0;OQ=679.10;QD=15.43;SB=-276.72 GT:AD:DP:GL:GQ 0/1:22,22:42:-83.84,-12.65,-73.08:99
-chr1 3197040 rs2250291 C T 260.09 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.34;MQ0=0;OQ=469.67;QD=13.42;SB=-216.70 GT:AD:DP:GL:GQ 0/1:18,17:34:-60.50,-10.25,-62.96:99
-chr1 3197640 rs55866132 G A 241.93 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=60.00;MQ0=0;OQ=793.46;QD=13.45;SB=-307.77 GT:AD:DP:GL:GQ 0/1:34,25:59:-100.40,-17.77,-123.91:99
-chr1 3197902 rs2500297 C T 238.37 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=60.00;MQ0=0;OQ=756.06;QD=14.00;SB=-170.24 GT:AD:DP:GL:GQ 0/1:30,24:49:-93.65,-14.77,-87.43:99
-chr1 3198235 rs10909918 A G 238.34 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=60.00;MQ0=0;OQ=490.49;QD=8.92;SB=-208.46 GT:AD:DP:GL:GQ 0/1:32,23:51:-67.70,-15.37,-121.94:99
-chr1 3198466 . G A 262.64 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=604.73;QD=12.34;SB=-281.22 GT:AD:DP:GL:GQ 0/1:28,21:46:-77.62,-13.87,-86.11:99
-chr1 3199356 rs2500295 T C 571.16 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.75;MQ0=0;OQ=1482.44;QD=28.51;SB=-763.58 GT:AD:DP:GL:GQ 1/1:0,52:48:-151.88,-14.48,-0.05:99
-chr1 3199491 rs4648376 G A 14.27 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=4.90;MQ=58.90;MQ0=0;OQ=2231.72;QD=37.83;SB=-1015.37 GT:AD:DP:GL:GQ 1/1:0,59:58:-226.79,-17.49,-0.03:99
-chr1 3199627 rs2500294 C T 622.47 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=2326.22;QD=38.77;SB=-1091.37 GT:AD:DP:GL:GQ 1/1:0,60:58:-236.22,-17.47,-0.02:99
-chr1 3199783 rs1553291 A G 564.79 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=1581.83;QD=29.29;SB=-575.98 GT:AD:DP:GL:GQ 1/1:0,54:51:-161.82,-15.38,-0.05:99
-chr1 3200187 . C T 35.88 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.26;MQ=59.60;MQ0=0;OQ=491.30;QD=10.45;SB=-217.71 GT:AD:DP:GL:GQ 0/1:29,18:43:-65.37,-12.96,-91.60:99
-chr1 3200810 rs4648468 A G 447.48 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=1398.57;QD=30.40;SB=-596.06 GT:AD:DP:GL:GQ 1/1:0,46:43:-143.47,-12.96,-0.03:99
-chr1 3201105 rs10047257 C T 220.48 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=596.34;QD=15.29;SB=-318.86 GT:AD:DP:GL:GQ 0/1:20,19:38:-74.37,-11.45,-63.70:99
-chr1 3201318 rs4648377 A C 538.98 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1615.09;QD=33.65;SB=-661.05 GT:AD:DP:GL:GQ 1/1:0,48:47:-165.11,-14.16,-0.02:99
-chr1 3201410 rs4648469 A G 202.17 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1230.36;QD=30.76;SB=-513.23 GT:AD:DP:GL:GQ 1/1:0,39:38:-126.64,-11.45,-0.02:99
-chr1 3201613 rs4648470 C T 79.16 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=1081.89;QD=24.59;SB=-515.59 GT:AD:DP:GL:GQ 0/1:12,32:43:-124.44,-12.96,-36.35:99
-chr1 3202053 rs2500292 A G 471 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1432.25;QD=32.55;SB=-511.16 GT:AD:DP:GL:GQ 1/1:0,44:41:-146.83,-12.35,-0.02:99
-chr1 3202174 rs2500291 C T 728.69 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2429.46;QD=38.56;SB=-1207.61 GT:AD:DP:GL:GQ 1/1:1,62:61:-246.55,-18.37,-0.01:99
-chr1 3202451 rs2500290 G C 18.43 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.98;MQ=58.98;MQ0=0;OQ=1616.44;QD=39.43;SB=-797.54 GT:AD:DP:GL:GQ 1/1:0,41:39:-165.25,-11.76,-0.02:99
-chr1 3202782 rs1875452 C G 157.50 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.36;MQ=59.54;MQ0=0;OQ=2035.33;QD=40.71;SB=-884.21 GT:AD:DP:GL:GQ 1/1:0,50:48:-207.14,-14.47,-0.02:99
-chr1 3202806 rs2500289 A G 260.23 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=59.19;MQ0=0;OQ=1923.10;QD=33.74;SB=-724.29 GT:AD:DP:GL:GQ 1/1:0,57:54:-195.91,-16.27,-0.02:99
-chr1 3203962 rs2500288 T C 186.16 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.58;MQ0=0;OQ=1801.36;QD=32.75;SB=-828.32 GT:AD:DP:GL:GQ 1/1:0,55:51:-183.74,-15.36,-0.02:99
-chr1 3204030 rs7553849 T C 226.01 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=56.20;MQ0=0;OQ=1684.70;QD=29.05;SB=-851.52 GT:AD:DP:GL:GQ 1/1:0,58:53:-172.10,-15.99,-0.05:99
-chr1 3204380 rs10442593 A G 67.15 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=958.98;QD=29.97;SB=-369.57 GT:AD:DP:GL:GQ 1/1:0,32:28:-99.49,-8.43,-0.01:84.24
-chr1 3204592 rs2455144 A G 617.75 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2332.51;QD=29.90;SB=-1027.75 GT:AD:DP:GL:GQ 1/1:0,78:74:-236.91,-22.33,-0.08:99
-chr1 3204835 . G A 53.06 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.06;MQ=60.00;MQ0=0;OQ=892.55;QD=15.13;SB=-296.23 GT:AD:DP:GL:GQ 0/1:30,29:55:-109.11,-16.57,-93.52:99
-chr1 3204852 rs2500287 G T 86 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=60.00;MQ0=0;OQ=2470.97;QD=33.85;SB=-613.02 GT:AD:DP:GL:GQ 1/1:1,71:71:-250.71,-21.39,-0.03:99
-chr1 3205054 . A G 35.05 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.07;MQ=60.00;MQ0=0;OQ=563.88;QD=10.44;SB=-299.62 GT:AD:DP:GL:GQ 0/1:29,25:52:-75.34,-15.67,-118.24:99
-chr1 3205180 rs2455143 A T 124.60 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=58.71;MQ0=0;OQ=2383.23;QD=36.67;SB=-1091.65 GT:AD:DP:GL:GQ 1/1:0,65:64:-241.93,-19.28,-0.02:99
-chr1 3205492 rs2455142 T G 512.17 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.74;MQ0=0;OQ=2083.81;QD=29.77;SB=-759.91 GT:AD:DP:GL:GQ 1/1:0,70:70:-212.03,-21.10,-0.07:99
-chr1 3205734 rs2455141 A C 27.67 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=40.69;MQ0=0;OQ=504.37;QD=19.40;SB=-155.27 GT:AD:DP:GL:GQ 1/1:2,24:21:-57.94,-6.33,-3.92:24.11
-chr1 3205761 rs2455140 T G 0.29 PASS AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=2.39;MQ=22.97;MQ0=1;OQ=235.32;QD=18.10;SB=-39.00 GT:AD:DP:GL:GQ 0/1:2,10:9:-29.50,-2.71,-3.64:9.30
-chr1 3205805 rs12728296 T C 26.83 LowQual AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=13.68;MQ0=0;QD=1.79;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:2:-6.09,-0.60,-0.00:6.01
-chr1 3205846 . G A 232.99 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.36;MQ0=0;OQ=538.85;QD=13.47;SB=-237.77 GT:AD:DP:GL:GQ 0/1:19,21:21:-63.50,-6.33,-16.25:99
-chr1 3206300 rs12036713 A G 35.28 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=14.04;MQ0=4;QD=5.04;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,7:2:-6.94,-0.60,-0.00:6.02
-chr1 3206493 . T G 46.28 PASS AC=2;AF=1.00;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=17.34;MQ0=4;OQ=70.14;QD=6.38;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,10:3:-10.50,-0.90,-0.00:9.03
-chr1 3206505 . T C 3.40 PASS AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=18.66;MQ0=4;OQ=95.85;QD=6.85;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,9:5:-14.37,-1.51,-4.06:25.51
-chr1 3206506 . A G 5.49 PASS AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=18.66;MQ0=4;OQ=74.94;QD=5.35;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,9:5:-12.29,-1.51,-3.97:24.63
-chr1 3206538 . G A 1.11 PASS AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=18.43;MQ0=3;OQ=73.15;QD=5.23;SB=-10.00 GT:AD:DP:GL:GQ 0/1:7,7:4:-11.80,-1.21,-3.10:18.92
-chr1 3206554 rs56276321 T G 10.51 LowQual AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=19.60;MQ0=3;QD=0.53;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,5:8:-6.70,-2.41,-21.47:42.94
-chr1 3206566 . T C 28.09 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=22.53;MQ0=2;OQ=145.15;QD=6.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,9:12:-21.41,-3.62,-22.84:99
-chr1 3206567 . A G 6.01 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.53;MQ0=2;OQ=85.83;QD=4.09;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,9:11:-15.19,-3.32,-21.71:99
-chr1 3206577 . C T 7.20 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=22.19;MQ0=2;OQ=218.94;QD=10.43;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,11:11:-28.49,-3.31,-13.17:98.62
-chr1 3206588 . A C 10.65 LowQual AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=2.88;MQ=22.98;MQ0=0;QD=0.59;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,6:7:-6.42,-2.11,-14.50:43.09
-chr1 3206599 . G A 2.11 PASS AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=22.00;MQ0=0;OQ=65.71;QD=4.11;SB=-10.00 GT:AD:DP:GL:GQ 0/1:7,9:7:-11.98,-2.12,-8.40:62.78
-chr1 3206700 . A G 0.69 PASS AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.64;MQ0=1;OQ=276.82;QD=18.45;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,14:12:-34.36,-3.62,-3.48:2.36
-chr1 3206761 . A G 22.65 LowQual AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=26.60;MQ0=1;QD=0.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:32,10:32:-15.20,-9.65,-103.92:55.47
-chr1 3206926 rs61759194 A G 113.52 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=2.49;MQ=46.00;MQ0=0;OQ=649.36;QD=10.82;SB=-346.23 GT:AD:DP:GL:GQ 0/1:29,31:46:-82.08,-13.86,-88.11:99
-chr1 3207011 rs2455137 C T 379.46 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=48.62;MQ0=0;OQ=1983.22;QD=35.41;SB=-860.00 GT:AD:DP:GL:GQ 1/1:0,56:50:-201.92,-15.06,-0.01:99
-chr1 3207294 rs2500284 G A 102.13 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=58.88;MQ0=0;OQ=2616.26;QD=39.05;SB=-1335.76 GT:AD:DP:GL:GQ 1/1:1,66:66:-265.23,-19.89,-0.02:99
-chr1 3208189 rs2455136 A T 142.28 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=59.12;MQ0=0;OQ=2529.01;QD=36.65;SB=-1261.52 GT:AD:DP:GL:GQ 1/1:0,69:68:-256.50,-20.48,-0.02:99
-chr1 3208783 rs2500283 G C 612.26 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2831.75;QD=42.91;SB=-1184.48 GT:AD:DP:GL:GQ 1/1:0,66:66:-286.78,-19.89,-0.02:99
-chr1 3209357 rs2500282 A G 594.44 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1981.22;QD=32.48;SB=-526.13 GT:AD:DP:GL:GQ 1/1:0,61:61:-201.75,-18.39,-0.04:99
-chr1 3209761 rs2455135 A G 63.74 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1623.95;QD=30.64;SB=-619.36 GT:AD:DP:GL:GQ 1/1:0,53:46:-165.99,-13.85,-0.01:99
-chr1 3210242 rs2500281 G A 563.38 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.01;MQ0=0;OQ=1613.10;QD=35.07;SB=-716.96 GT:AD:DP:GL:GQ 1/1:0,46:42:-164.91,-12.65,-0.01:99
-chr1 3210275 rs2455134 A G 102.15 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=34.21;MQ0=0;OQ=983.95;QD=25.89;SB=-399.50 GT:AD:DP:GL:GQ 1/1:0,38:28:-101.99,-8.43,-0.01:84.26
-chr1 3210353 rs2455133 C G 65.09 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=35.62;MQ0=2;OQ=1518.72;QD=29.78;SB=-723.73 GT:AD:DP:GL:GQ 1/1:4,47:41:-164.26,-12.36,-8.80:35.57
-chr1 3210943 rs2455132 T C 34.33 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=58.65;MQ0=0;OQ=1292.96;QD=28.73;SB=-546.03 GT:AD:DP:GL:GQ 1/1:1,44:43:-137.07,-12.97,-4.19:87.75
-chr1 3211298 rs56357655 G T 236.14 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=570.69;QD=13.59;SB=-286.33 GT:AD:DP:GL:GQ 0/1:20,22:39:-72.10,-11.75,-66.92:99
-chr1 3211481 rs4648378 A T 264.07 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1968.99;QD=35.80;SB=-994.60 GT:AD:DP:GL:GQ 1/1:0,55:54:-200.50,-16.27,-0.02:99
-chr1 3212566 rs3923081 A G 604.08 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1445.27;QD=30.75;SB=-602.58 GT:AD:DP:GL:GQ 1/1:0,47:46:-148.15,-13.87,-0.04:99
-chr1 3213090 rs4648471 A G 181.27 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=58.96;MQ0=0;OQ=1176.67;QD=14.53;SB=-570.90 GT:AD:DP:GL:GQ 0/1:40,41:78:-144.45,-23.50,-149.52:99
-chr1 3213140 rs4233025 C T 288.86 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.52;MQ0=0;OQ=3371.29;QD=38.75;SB=-1393.36 GT:AD:DP:GL:GQ 1/1:0,86:84:-336.13,-25.31,-0.03:99
-chr1 3213393 rs4648472 G A 290.65 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=58.95;MQ0=0;OQ=2168.73;QD=34.98;SB=-915.32 GT:AD:DP:GL:GQ 1/1:0,61:56:-220.48,-16.87,-0.02:99
-chr1 3213624 rs4648473 A G 299.83 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=60.00;MQ0=0;OQ=2351.35;QD=35.09;SB=-1180.73 GT:AD:DP:GL:GQ 1/1:0,67:67:-238.75,-20.18,-0.03:99
-chr1 3213815 rs4145901 A G 578.32 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=1913.13;QD=34.78;SB=-765.19 GT:AD:DP:GL:GQ 1/1:0,55:55:-194.92,-16.57,-0.02:99
-chr1 3214070 rs4145900 C T 633.07 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.20;MQ0=0;OQ=2312.37;QD=39.87;SB=-883.19 GT:AD:DP:GL:GQ 1/1:0,58:58:-234.84,-17.47,-0.01:99
-chr1 3214663 rs2483258 A G 141.81 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.74;MQ=58.20;MQ0=0;OQ=1545.60;QD=32.89;SB=-781.14 GT:AD:DP:GL:GQ 1/1:0,47:45:-158.16,-13.56,-0.02:99
-chr1 3215654 rs2500279 A G 10.26 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1630.84;QD=29.65;SB=-792.65 GT:AD:DP:GL:GQ 1/1:0,55:51:-166.71,-15.38,-0.04:99
-chr1 3215800 rs2500278 C T 196.13 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.49;MQ=60.00;MQ0=0;OQ=2097.43;QD=35.55;SB=-1034.29 GT:AD:DP:GL:GQ 1/1:1,57:55:-213.35,-16.58,-0.03:99
-chr1 3216399 rs59127130 T A 71.30 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=3.18;MQ=59.01;MQ0=0;OQ=500.47;QD=10.65;SB=-267.66 GT:AD:DP:GL:GQ 0/1:27,19:45:-66.90,-13.56,-91.26:99
-chr1 3218505 . G T 13.88 PASS AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.49;MQ=59.42;MQ0=0;OQ=562.03;QD=14.05;SB=-143.82 GT:AD:DP:GL:GQ 0/1:17,23:34:-69.73,-10.24,-51.47:99
-chr1 3223491 rs2500277 T C 605.12 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1039.56;QD=14.85;SB=-437.57 GT:AD:DP:GL:GQ 0/1:34,36:70:-128.33,-21.09,-137.20:99
-chr1 3227069 rs2500274 G A 733.97 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2547.84;QD=38.03;SB=-1230.64 GT:AD:DP:GL:GQ 1/1:0,67:65:-258.39,-19.58,-0.02:99
-chr1 3231689 rs2500271 A G 65.84 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=6.09;MQ=58.05;MQ0=0;OQ=618.77;QD=12.89;SB=-326.13 GT:AD:DP:GL:GQ 0/1:22,25:43:-80.91,-15.74,-76.88:99
-chr1 3232314 rs2500270 C T 276.80 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=58.93;MQ0=0;OQ=890.12;QD=13.69;SB=-466.96 GT:AD:DP:GL:GQ 0/1:37,28:63:-111.27,-18.97,-132.21:99
-chr1 3232391 rs7521865 T C 80.12 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.46;MQ0=0;OQ=581.07;QD=12.11;SB=-302.66 GT:AD:DP:GL:GQ 0/1:25,23:45:-74.95,-13.56,-94.63:99
-chr1 3232424 rs11576578 C T 337.83 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=583.63;QD=16.21;SB=-245.53 GT:AD:DP:GL:GQ 0/1:18,18:35:-72.19,-10.55,-57.05:99
-chr1 3232513 rs2500268 C T 2.29 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.10;MQ0=0;OQ=81.92;QD=2.64;SB=-51.23 GT:AD:DP:GL:GQ 0/1:26,5:28:-19.91,-8.44,-80.68:99
-chr1 3232545 rs7550743 G C 135.04 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=204.00;QD=6.18;SB=-89.25 GT:AD:DP:GL:GQ 0/1:25,8:26:-31.53,-7.85,-72.48:99
-chr1 3233210 rs2483268 C T 55.97 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.45;MQ0=0;OQ=685.34;QD=20.16;SB=-292.33 GT:AD:DP:GL:GQ 0/1:13,21:31:-81.16,-9.34,-34.58:99
-chr1 3233282 rs2483269 C T 150.37 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.51;MQ0=0;OQ=931.05;QD=19.81;SB=-450.84 GT:AD:DP:GL:GQ 0/1:20,27:46:-110.24,-13.86,-67.60:99
-chr1 3234117 rs2483270 T C 92.91 PASS AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=54.48;MQ0=0;OQ=186.80;QD=8.90;SB=-89.99 GT:AD:DP:GL:GQ 0/1:13,8:21:-28.30,-6.33,-49.94:99
-chr1 3235659 rs56368529 T G 3.22 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=4.81;MQ=58.01;MQ0=0;OQ=299.04;QD=9.06;SB=-59.90 GT:AD:DP:GL:GQ 0/1:16,17:27:-41.32,-8.14,-54.29:99
-chr1 3236031 rs55929121 A G 111.89 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=59.44;MQ0=0;OQ=382.21;QD=9.32;SB=-138.40 GT:AD:DP:GL:GQ 0/1:24,17:41:-53.86,-12.36,-96.85:99
-chr1 3237249 rs2483272 T C 227.71 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=58.89;MQ0=0;OQ=695.19;QD=16.55;SB=-364.39 GT:AD:DP:GL:GQ 0/1:17,25:40:-84.86,-12.05,-61.97:99
-chr1 3237696 rs11577229 A C 60.92 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=59.46;MQ0=0;OQ=605.90;QD=14.09;SB=-151.87 GT:AD:DP:GL:GQ 0/1:20,23:42:-76.53,-12.66,-70.16:99
-chr1 3237725 rs2483273 C T 273.62 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=458.56;QD=11.46;SB=-253.26 GT:AD:DP:GL:GQ 0/1:23,17:37:-60.29,-11.15,-74.02:99
-chr1 3237958 rs2483274 A G 334.60 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=489.91;QD=10.42;SB=-162.48 GT:AD:DP:GL:GQ 0/1:24,23:45:-65.84,-13.57,-92.79:99
-chr1 3238582 rs56033677 T C 21.15 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.43;MQ0=0;OQ=296.91;QD=9.00;SB=-160.33 GT:AD:DP:GL:GQ 0/1:18,15:30:-42.02,-9.04,-67.71:99
-chr1 3238892 rs55807399 G T 41.07 PASS AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=58.83;MQ0=0;OQ=103.10;QD=6.44;SB=-69.87 GT:AD:DP:GL:GQ 0/1:10,6:13:-17.51,-3.92,-27.55:99
-chr1 3239158 . C T 1.04 PASS AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.48;MQ0=0;OQ=666.04;QD=18.50;SB=-35.64 GT:AD:DP:GL:GQ 0/1:16,20:35:-80.44,-10.55,-47.82:99
-chr1 3239323 . G A 79.22 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=885.68;QD=16.10;SB=-289.76 GT:AD:DP:GL:GQ 0/1:28,27:52:-107.52,-15.67,-84.40:99
-chr1 3240283 rs1889121 A G 183.83 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=58.44;MQ0=0;OQ=423.56;QD=10.86;SB=-163.96 GT:AD:DP:GL:GQ 0/1:18,20:36:-60.24,-14.60,-67.49:99
-chr1 3241019 rs1110307 T C 317.91 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.03;MQ0=0;OQ=790.39;QD=11.80;SB=-362.96 GT:AD:DP:GL:GQ 0/1:34,33:66:-102.22,-19.90,-132.82:99
-chr1 3241835 rs4648477 G A 340.85 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.63;MQ0=0;OQ=880.63;QD=17.27;SB=-457.99 GT:AD:DP:GL:GQ 0/1:24,27:48:-105.81,-14.46,-75.34:99
-chr1 3241867 rs4648478 C T 165.67 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.81;MQ=58.72;MQ0=0;OQ=927.39;QD=18.18;SB=-291.79 GT:AD:DP:GL:GQ 0/1:22,29:49:-110.80,-14.77,-66.95:99
-chr1 3241964 rs2483278 C T 199.87 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=4.49;MQ=58.47;MQ0=0;OQ=815.99;QD=11.33;SB=-270.80 GT:AD:DP:GL:GQ 0/1:44,28:65:-104.47,-19.59,-130.43:99
-chr1 3242641 rs10797388 C T 87.31 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.66;MQ0=0;OQ=1468.23;QD=21.91;SB=-716.28 GT:AD:DP:GL:GQ 0/1:24,43:63:-169.09,-18.98,-69.99:99
-chr1 3243022 rs4648479 C G 270.01 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.32;MQ0=0;OQ=1259.62;QD=18.52;SB=-604.54 GT:AD:DP:GL:GQ 0/1:33,35:68:-149.74,-20.49,-145.47:99
-chr1 3243475 rs2500264 A G 371.99 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=57.70;MQ0=0;OQ=965.24;QD=13.04;SB=-435.59 GT:AD:DP:GL:GQ 0/1:35,39:72:-121.52,-21.71,-132.46:99
-chr1 3243538 rs2500263 C T 449.25 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=59.43;MQ0=0;OQ=1163.15;QD=14.36;SB=-551.30 GT:AD:DP:GL:GQ 0/1:44,37:79:-143.40,-23.80,-157.59:99
-chr1 3243563 rs10909933 A T 21.76 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=5.38;MQ=58.82;MQ0=0;OQ=1256.33;QD=15.90;SB=-624.35 GT:AD:DP:GL:GQ 0/1:39,40:77:-152.11,-23.19,-142.90:99
-chr1 3243699 rs7516137 C G 384.73 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.95;MQ0=1;OQ=1414.58;QD=19.38;SB=-612.10 GT:AD:DP:GL:GQ 0/1:31,42:71:-166.15,-21.41,-133.01:99
-chr1 3243749 rs7516150 C T 110.03 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.27;MQ=59.28;MQ0=0;OQ=1059.88;QD=16.56;SB=-511.08 GT:AD:DP:GL:GQ 0/1:31,33:63:-128.25,-18.98,-110.55:99
-chr1 3243801 rs7552331 G A 50.88 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=3.37;MQ=59.68;MQ0=0;OQ=1395.05;QD=19.38;SB=-586.45 GT:AD:DP:GL:GQ 0/1:31,41:71:-164.18,-21.39,-100.20:99
-chr1 3244201 rs1572038 G A 223.38 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=60.00;MQ0=0;OQ=849.89;QD=14.40;SB=-320.28 GT:AD:DP:GL:GQ 0/1:33,26:58:-105.75,-17.48,-105.23:99
-chr1 3244229 rs1572037 T C 103.02 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=1.14;MQ=59.74;MQ0=0;OQ=759.65;QD=10.70;SB=-211.19 GT:AD:DP:GL:GQ 0/1:40,31:70:-100.34,-21.09,-160.53:99
-chr1 3245634 . G A 2.67 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=5.38;MQ=59.21;MQ0=0;OQ=768.53;QD=14.50;SB=-362.88 GT:AD:DP:GL:GQ 0/1:27,25:49:-94.91,-14.77,-78.82:99
-chr1 3245968 rs1999527 C A 270.72 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.55;MQ0=0;OQ=832.76;QD=16.33;SB=-309.70 GT:AD:DP:GL:GQ 0/1:20,31:46:-100.42,-13.86,-57.62:99
-chr1 3246110 rs1999526 G A 145.25 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.11;MQ=60.00;MQ0=0;OQ=722.36;QD=13.89;SB=-206.02 GT:AD:DP:GL:GQ 0/1:25,26:46:-91.77,-16.25,-79.35:99
-chr1 3247225 rs944819 T G 210.34 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=59.73;MQ0=0;OQ=1004.82;QD=11.68;SB=-427.67 GT:AD:DP:GL:GQ 0/1:50,36:86:-129.67,-25.90,-183.72:99
-chr1 3247599 rs2483281 C T 240.23 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=58.98;MQ0=0;OQ=504.82;QD=12.31;SB=-180.16 GT:AD:DP:GL:GQ 0/1:24,17:38:-65.21,-11.45,-77.36:99
-chr1 3251376 rs4648379 C T 354.38 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=59.76;MQ0=0;OQ=1302.21;QD=16.91;SB=-654.31 GT:AD:DP:GL:GQ 0/1:37,40:76:-156.40,-22.89,-133.27:99
-chr1 3251542 rs4415513 C T 583.60 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1033.27;QD=16.67;SB=-449.45 GT:AD:DP:GL:GQ 0/1:31,31:61:-125.00,-18.39,-98.88:99
-chr1 3252129 rs12564920 A G 258.43 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.38;MQ0=0;OQ=448.15;QD=9.96;SB=-222.39 GT:AD:DP:GL:GQ 0/1:23,22:39:-59.86,-11.76,-74.90:99
-chr1 3253722 . G A 5.82 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=951.14;QD=18.65;SB=-376.90 GT:AD:DP:GL:GQ 0/1:22,29:50:-113.46,-15.06,-78.22:99
-chr1 3254050 rs2483289 A C 189.02 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=800.56;QD=13.80;SB=-367.58 GT:AD:DP:GL:GQ 0/1:28,30:55:-99.91,-16.57,-92.54:99
-chr1 3254157 rs2500257 A G 11.73 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=3.42;MQ=59.13;MQ0=0;OQ=570.29;QD=13.26;SB=-176.97 GT:AD:DP:GL:GQ 0/1:21,22:40:-72.37,-12.05,-79.78:99
-chr1 3257948 . G C 98.91 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=35.14;MQ0=0;QD=7.07;SB=14.07 GT:AD:DP:GL:GQ 0/1:10,4:12:-16.79,-3.62,-31.08:99
-chr1 3257994 rs60920916 T C 0.33 PASS AC=1;AF=0.50;AN=2;DB;DP=17;Dels=0.00;HRun=2;HaplotypeScore=2.63;MQ=42.15;MQ0=0;OQ=77.87;QD=4.58;SB=20.08 GT:AD:DP:GL:GQ 0/1:13,4:15:-15.59,-4.52,-39.62:99
-chr1 3258005 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=3;HaplotypeScore=6.10;MQ=42.12;MQ0=0;OQ=65.85;QD=3.29;SB=23.09 GT:AD:DP:GL:GQ 0/1:16,4:17:-15.00,-5.13,-47.65:98.69
-chr1 3258920 . C T 2.85 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=553.46;QD=12.87;SB=-213.92 GT:AD:DP:GL:GQ 0/1:24,19:40:-70.69,-12.06,-71.24:99
-chr1 3262401 rs7550526 G A 60.02 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=58.89;MQ0=0;OQ=1567.02;QD=37.31;SB=-629.85 GT:AD:DP:GL:GQ 1/1:0,42:40:-160.30,-12.05,-0.01:99
-chr1 3262685 rs946759 C A 62.68 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=-0.12;MQ=57.75;MQ0=0;OQ=630.41;QD=19.70;SB=-314.39 GT:AD:DP:GL:GQ 1/1:3,29:21:-69.14,-6.33,-2.51:38.17
-chr1 3262923 rs946758 G A 287.49 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=59.58;MQ0=0;OQ=2113.36;QD=38.42;SB=-1046.71 GT:AD:DP:GL:GQ 1/1:0,55:53:-214.93,-15.96,-0.01:99
-chr1 3263976 rs55805251 C T 94.04 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=58.59;MQ0=0;OQ=518.72;QD=15.72;SB=-142.59 GT:AD:DP:GL:GQ 0/1:15,18:30:-64.20,-9.04,-43.17:99
-chr1 3264566 rs2483265 T C 43.57 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=868.82;QD=26.33;SB=-460.17 GT:AD:DP:GL:GQ 1/1:0,33:29:-90.50,-8.75,-0.03:87.17
-chr1 3265009 rs12748963 C T 26.51 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=5.21;MQ=58.97;MQ0=0;OQ=826.30;QD=18.36;SB=-347.35 GT:AD:DP:GL:GQ 0/1:19,25:43:-98.87,-12.96,-59.86:99
-chr1 3266234 rs12073172 G A 592.78 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=1102.37;QD=35.56;SB=-562.26 GT:AD:DP:GL:GQ 1/1:0,31:30:-113.84,-9.05,-0.02:90.27
-chr1 3266600 rs2500280 G C 2.70 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=8.93;MQ=59.31;MQ0=0;OQ=2375.28;QD=38.94;SB=-992.26 GT:AD:DP:GL:GQ 1/1:0,60:56:-241.13,-16.87,-0.02:99
-chr1 3266936 . G A 52.38 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.54;MQ=59.62;MQ0=0;OQ=518.77;QD=10.59;SB=-162.22 GT:AD:DP:GL:GQ 0/1:32,17:48:-69.63,-14.47,-101.23:99
-chr1 3267606 rs884308 C T 94.95 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1579.42;QD=39.49;SB=-771.63 GT:AD:DP:GL:GQ 1/1:0,40:40:-161.54,-12.05,-0.01:99
-chr1 3268390 rs11583116 G A 130.53 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=58.33;MQ0=0;OQ=690.56;QD=13.81;SB=-242.25 GT:AD:DP:GL:GQ 0/1:26,24:43:-85.30,-12.96,-65.77:99
-chr1 3269184 rs7524171 A G 11.38 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=5.01;MQ=59.60;MQ0=0;OQ=1781.26;QD=30.71;SB=-880.26 GT:AD:DP:GL:GQ 1/1:0,58:53:-181.75,-15.98,-0.04:99
-chr1 3269881 rs2500262 T C 201.27 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.11;MQ0=0;OQ=1534.16;QD=29.50;SB=-546.01 GT:AD:DP:GL:GQ 1/1:0,52:49:-157.05,-14.78,-0.05:99
-chr1 3271322 . C T 58.72 PASS AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=59.40;MQ0=0;OQ=375.26;QD=12.11;SB=-208.89 GT:AD:DP:GL:GQ 0/1:17,14:28:-49.26,-8.45,-45.56:99
-chr1 3273388 rs4648485 G A 602.36 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2075.89;QD=37.74;SB=-912.72 GT:AD:DP:GL:GQ 1/1:0,55:53:-211.19,-15.97,-0.02:99
-chr1 3275010 rs4648486 C T 123.41 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=58.75;MQ0=0;OQ=2039.90;QD=39.23;SB=-914.69 GT:AD:DP:GL:GQ 1/1:0,52:51:-207.59,-15.36,-0.01:99
-chr1 3275164 rs4648487 T C 21.75 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=5.20;MQ=59.14;MQ0=0;OQ=1843.56;QD=34.14;SB=-799.67 GT:AD:DP:GL:GQ 1/1:0,54:53:-187.96,-15.97,-0.02:99
-chr1 3275488 rs6424073 G A 234.48 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2488.63;QD=39.50;SB=-1214.11 GT:AD:DP:GL:GQ 1/1:0,63:63:-252.47,-18.98,-0.02:99
-chr1 3277411 rs12138292 A G 1.83 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.96;MQ=56.17;MQ0=0;OQ=1416.27;QD=24.85;SB=-414.15 GT:AD:DP:GL:GQ 1/1:0,57:48:-145.28,-14.50,-0.07:99
-chr1 3279384 rs12135987 G A 273.93 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.39;MQ0=0;OQ=2572.74;QD=37.83;SB=-927.33 GT:AD:DP:GL:GQ 1/1:0,68:65:-260.88,-19.58,-0.02:99
-chr1 3279467 rs6688949 T C 3.82 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=57.66;MQ0=0;OQ=1297.10;QD=25.94;SB=-450.26 GT:AD:DP:GL:GQ 1/1:0,50:40:-133.33,-12.06,-0.03:99
-chr1 3279589 rs1333190 C T 668.27 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1807.78;QD=36.89;SB=-784.69 GT:AD:DP:GL:GQ 1/1:0,49:46:-184.37,-13.86,-0.01:99
-chr1 3279831 rs1333189 C T 229.74 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.13;MQ0=0;OQ=1483.34;QD=36.18;SB=-765.52 GT:AD:DP:GL:GQ 1/1:0,40:38:-151.93,-11.45,-0.01:99
-chr1 3280999 rs2249860 A C 81.57 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=57.93;MQ0=0;OQ=1454.60;QD=33.83;SB=-752.07 GT:AD:DP:GL:GQ 1/1:0,43:42:-149.06,-12.65,-0.01:99
-chr1 3281067 rs2368593 G T 64.28 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.86;MQ=58.09;MQ0=0;OQ=2257.03;QD=31.79;SB=-1064.90 GT:AD:DP:GL:GQ 1/1:0,70:66:-229.32,-19.89,-0.04:99
-chr1 3281249 . G A 160.30 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.53;MQ0=0;OQ=717.46;QD=13.54;SB=-318.84 GT:AD:DP:GL:GQ 0/1:27,26:46:-88.90,-13.87,-75.19:99
-chr1 3282736 rs4648488 C T 347.36 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.52;MQ0=0;OQ=841.46;QD=17.53;SB=-434.81 GT:AD:DP:GL:GQ 0/1:21,27:46:-101.29,-13.86,-70.83:99
-chr1 3283525 rs4648489 A G 474.54 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1662.64;QD=30.23;SB=-834.46 GT:AD:DP:GL:GQ 1/1:0,55:53:-169.90,-15.99,-0.06:99
-chr1 3284832 rs1538693 G A 695.45 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1980.96;QD=38.10;SB=-939.35 GT:AD:DP:GL:GQ 1/1:0,52:51:-201.70,-15.37,-0.02:99
-chr1 3285724 . G A 0.22 PASS AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=1;HaplotypeScore=6.56;MQ=21.51;MQ0=1;OQ=72.03;QD=9.00;SB=-40.54 GT:AD:DP:GL:GQ 0/1:2,5:4:-11.69,-1.21,-3.37:21.64
-chr1 3285990 . G A 25.35 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=5.35;MQ=15.41;MQ0=12;QD=0.85;SB=-32.52 GT:AD:DP:GL:GQ 0/1:21,9:5:-7.32,-1.51,-9.51:58.18
-chr1 3286144 . A G 36.06 LowQual AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=14.48;MQ0=3;QD=4.51;SB=-6.99 GT:AD:DP:GL:GQ 0/1:4,3:3:-7.79,-0.90,-4.06:31.52
-chr1 3286152 . A C 0.09 PASS AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=27.22;MQ0=3;OQ=114.38;QD=16.34;SB=-46.01 GT:AD:DP:GL:GQ 1/1:0,7:4:-14.97,-1.20,-0.00:12.04
-chr1 3286284 . G A 36.93 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=3.77;MQ=31.49;MQ0=4;QD=1.27;SB=-29.53 GT:AD:DP:GL:GQ 0/1:22,7:15:-11.50,-4.52,-41.17:69.76
-chr1 3286312 . G A 19.94 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=9.31;MQ=28.36;MQ0=5;QD=0.59;SB=-24.50 GT:AD:DP:GL:GQ 0/1:27,6:17:-10.40,-5.13,-47.64:52.73
-chr1 3286320 . C A 227.39 HARD_TO_VALIDATE;Indel AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=8.75;MQ=31.04;MQ0=4;QD=5.98;SB=-25.91 GT:AD:DP:GL:GQ 0/1:27,11:20:-32.05,-6.03,-35.21:99
-chr1 3286354 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=1;HaplotypeScore=6.21;MQ=33.14;MQ0=5;OQ=87.60;QD=2.92;SB=-62.36 GT:AD:DP:GL:GQ 0/1:22,7:14:-19.10,-7.05,-34.67:99
-chr1 3286558 rs61043152 G A 1.11 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=8.99;MQ=54.01;MQ0=1;OQ=487.76;QD=11.09;SB=-75.56 GT:AD:DP:GL:GQ 0/1:23,21:40:-64.12,-12.06,-79.70:99
-chr1 3286811 . T C 44.59 PASS AC=2;AF=1.00;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=60.00;MQ0=0;OQ=1964.33;QD=34.46;SB=-944.38 GT:AD:DP:GL:GQ 1/1:0,57:56:-200.04,-16.87,-0.02:99
-chr1 3287141 rs11584942 G A 391.20 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.82;MQ0=0;OQ=780.63;QD=15.31;SB=-324.32 GT:AD:DP:GL:GQ 0/1:25,26:47:-95.51,-14.16,-75.83:99
-chr1 3287246 rs11584967 G A 573.67 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=877.40;QD=15.67;SB=-384.91 GT:AD:DP:GL:GQ 0/1:28,28:54:-107.29,-16.27,-98.41:99
-chr1 3287659 rs4648490 A C 117.52 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=58.26;MQ0=0;OQ=1692.37;QD=33.18;SB=-840.06 GT:AD:DP:GL:GQ 1/1:0,51:50:-172.85,-15.06,-0.02:99
-chr1 3290667 rs868688 C T 279.51 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=58.44;MQ0=0;OQ=2018.08;QD=35.40;SB=-933.25 GT:AD:DP:GL:GQ 1/1:0,57:52:-205.41,-15.67,-0.02:99
-chr1 3290990 rs868689 T G 679.66 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1815.91;QD=31.86;SB=-898.65 GT:AD:DP:GL:GQ 1/1:0,57:52:-185.19,-15.66,-0.02:99
-chr1 3292591 rs11810266 C G 73.61 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.54;MQ0=0;OQ=822.36;QD=20.06;SB=-350.43 GT:AD:DP:GL:GQ 0/1:18,23:40:-97.58,-12.06,-74.61:99
-chr1 3293306 rs2245703 T C 622.87 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2385.34;QD=35.60;SB=-962.70 GT:AD:DP:GL:GQ 1/1:0,67:67:-242.14,-20.18,-0.02:99
-chr1 3293627 rs6676024 C T 186.96 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.97;MQ0=0;OQ=1016.67;QD=17.23;SB=-303.79 GT:AD:DP:GL:GQ 0/1:29,30:58:-122.43,-17.48,-92.51:99
-chr1 3293798 rs2065525 C G 62.72 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=58.34;MQ0=0;OQ=2298.73;QD=40.33;SB=-651.91 GT:AD:DP:GL:GQ 1/1:0,56:54:-233.47,-16.27,-0.01:99
-chr1 3294876 rs17399998 C T 445.68 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1142.20;QD=15.23;SB=-563.39 GT:AD:DP:GL:GQ 0/1:40,35:73:-139.51,-22.00,-126.39:99
-chr1 3295312 rs6687463 A G 1.44 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=5.24;MQ=59.03;MQ0=0;OQ=1175.21;QD=27.33;SB=-477.09 GT:AD:DP:GL:GQ 1/1:0,42:38:-121.14,-11.46,-0.04:99
-chr1 3295326 . C A 16.33 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=58.87;MQ0=0;OQ=469.13;QD=12.68;SB=-130.80 GT:AD:DP:GL:GQ 0/1:19,18:34:-60.44,-10.25,-57.03:99
-chr1 3295820 . C T 40.94 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=844.76;QD=17.60;SB=-369.85 GT:AD:DP:GL:GQ 0/1:21,27:46:-101.62,-13.86,-70.72:99
-chr1 3296384 rs6686140 C A 6.91 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=6.50;MQ=59.17;MQ0=0;OQ=324.87;QD=11.60;SB=-121.49 GT:AD:DP:GL:GQ 0/1:8,20:20:-41.81,-6.04,-18.74:99
-chr1 3296715 rs2151350 T G 0.13 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=4;HaplotypeScore=2.18;MQ=58.99;MQ0=0;OQ=1168.63;QD=25.41;SB=-611.86 GT:AD:DP:GL:GQ 1/1:0,46:39:-120.49,-11.76,-0.04:99
-chr1 3297308 rs2493281 A G 8.42 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.21;MQ=58.18;MQ0=1;OQ=1041.73;QD=26.04;SB=-499.54 GT:AD:DP:GL:GQ 1/1:1,39:33:-107.79,-9.95,-0.03:99
-chr1 3297606 rs2493278 T C 732.40 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.88;MQ0=0;OQ=2573.66;QD=35.26;SB=-1043.85 GT:AD:DP:GL:GQ 1/1:0,73:73:-260.97,-21.99,-0.02:99
-chr1 3298358 rs2493268 T C 154.09 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.44;MQ=58.22;MQ0=0;OQ=1688.23;QD=33.76;SB=-851.05 GT:AD:DP:GL:GQ 1/1:0,50:48:-172.42,-14.46,-0.02:99
-chr1 3298817 rs12139767 G C 583.17 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=898.96;QD=13.62;SB=-383.19 GT:AD:DP:GL:GQ 0/1:39,27:65:-112.80,-19.62,-153.47:99
-chr1 3299326 rs35864014 G A 497.53 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1037.02;QD=15.25;SB=-535.48 GT:AD:DP:GL:GQ 0/1:36,32:68:-127.47,-20.48,-131.88:99
-chr1 3301121 rs6702992 C T 313.10 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.53;MQ0=0;OQ=194.21;QD=10.22;SB=-113.94 GT:AD:DP:GL:GQ 0/1:12,7:19:-28.43,-5.72,-42.63:99
-chr1 3301284 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=11;HaplotypeScore=19.15;MQ=56.72;MQ0=0;OQ=88.35;QD=1.38;SB=59.21 GT:AD:DP:GL:GQ 0/1:53,11:56:-28.99,-16.87,-158.63:99
-chr1 3301891 rs883678 C G 91.33 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.56;MQ0=0;OQ=812.38;QD=19.34;SB=-299.58 GT:AD:DP:GL:GQ 0/1:20,22:42:-97.18,-12.66,-83.21:99
-chr1 3302116 rs17822575 T G 316.41 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.54;MQ0=0;OQ=510.49;QD=12.45;SB=-250.83 GT:AD:DP:GL:GQ 0/1:20,21:40:-66.39,-12.05,-67.05:99
-chr1 3302296 rs10909937 C T 502.18 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1321.67;QD=36.71;SB=-625.01 GT:AD:DP:GL:GQ 1/1:0,36:34:-135.76,-10.24,-0.01:99
-chr1 3302524 rs56378103 C T 103.94 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=58.71;MQ0=0;OQ=1572.33;QD=29.12;SB=-689.92 GT:AD:DP:GL:GQ 1/1:0,52:42:-160.84,-12.66,-0.02:99
-chr1 3302527 . C T 6.09 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=5.35;MQ=58.33;MQ0=0;OQ=1011.78;QD=18.07;SB=-471.49 GT:AD:DP:GL:GQ 0/1:25,31:52:-120.14,-15.67,-71.42:99
-chr1 3302823 rs12726710 C T 452.04 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=952.26;QD=17.31;SB=-305.83 GT:AD:DP:GL:GQ 0/1:25,30:55:-115.09,-16.58,-80.89:99
-chr1 3303142 rs7535965 G A 141.77 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.64;MQ0=0;OQ=1848.10;QD=38.50;SB=-836.62 GT:AD:DP:GL:GQ 1/1:0,48:47:-188.41,-14.16,-0.02:99
-chr1 3304456 rs17822581 A G 359.73 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=58.93;MQ0=0;OQ=1113.18;QD=17.13;SB=-574.04 GT:AD:DP:GL:GQ 0/1:27,38:62:-133.28,-18.68,-95.39:99
-chr1 3304922 rs57432749 C T 181.83 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=2.15;MQ=59.75;MQ0=0;OQ=993.31;QD=13.07;SB=-496.07 GT:AD:DP:GL:GQ 0/1:41,34:74:-127.49,-24.88,-150.46:99
-chr1 3305219 rs12144338 C T 131.32 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.67;MQ0=0;OQ=987.68;QD=17.33;SB=-284.79 GT:AD:DP:GL:GQ 0/1:26,31:53:-118.03,-15.98,-72.20:99
-chr1 3305551 . G A 103.37 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.39;MQ0=0;OQ=1099.92;QD=15.94;SB=-511.04 GT:AD:DP:GL:GQ 0/1:36,33:68:-133.77,-20.49,-112.10:99
-chr1 3305678 rs7542793 G A 440.42 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.35;MQ0=0;OQ=1064.35;QD=16.63;SB=-455.47 GT:AD:DP:GL:GQ 0/1:30,34:62:-128.41,-18.69,-93.40:99
-chr1 3305692 rs12737284 G A 493.84 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=901.95;QD=14.79;SB=-398.19 GT:AD:DP:GL:GQ 0/1:31,30:59:-111.27,-17.79,-96.32:99
-chr1 3305845 rs12117228 T C 284.95 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=60.00;MQ0=0;OQ=892.28;QD=11.74;SB=-260.21 GT:AD:DP:GL:GQ 0/1:38,38:73:-114.51,-22.00,-150.21:99
-chr1 3305873 rs7551733 C G 174.37 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.43;MQ=60.00;MQ0=0;OQ=1089.18;QD=17.02;SB=-530.69 GT:AD:DP:GL:GQ 0/1:32,32:62:-130.89,-18.69,-134.52:99
-chr1 3306535 rs10909939 T C 528.42 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=956.73;QD=17.08;SB=-375.64 GT:AD:DP:GL:GQ 0/1:23,33:55:-115.53,-16.57,-90.24:99
-chr1 3306616 rs10909940 G A 39.73 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=1181.64;QD=23.63;SB=-497.15 GT:AD:DP:GL:GQ 0/1:15,35:49:-136.22,-14.77,-45.61:99
-chr1 3306995 rs12743248 G A 92.64 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.54;MQ0=0;OQ=921.67;QD=15.36;SB=-465.48 GT:AD:DP:GL:GQ 0/1:29,31:55:-112.03,-16.58,-86.62:99
-chr1 3307093 rs12747145 G A 172.06 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.50;MQ0=0;OQ=526.33;QD=14.23;SB=-229.52 GT:AD:DP:GL:GQ 0/1:18,17:34:-69.44,-13.52,-51.06:99
-chr1 3307640 rs6424074 A G 354.64 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.52;MQ0=0;OQ=483.77;QD=10.08;SB=-196.29 GT:AD:DP:GL:GQ 0/1:28,20:48:-66.12,-14.46,-114.20:99
-chr1 3307747 rs6424075 G T 374.77 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.24;MQ0=0;OQ=884.55;QD=14.04;SB=-359.35 GT:AD:DP:GL:GQ 0/1:31,32:59:-109.52,-17.78,-88.61:99
-chr1 3308193 rs7551796 G A 363.24 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.69;MQ0=0;OQ=1293.28;QD=17.24;SB=-465.48 GT:AD:DP:GL:GQ 0/1:35,40:71:-154.00,-21.39,-119.84:99
-chr1 3308294 rs11576794 C T 278.53 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.09;MQ=57.73;MQ0=0;OQ=809.01;QD=14.19;SB=-410.42 GT:AD:DP:GL:GQ 0/1:31,26:56:-101.07,-16.88,-98.51:99
-chr1 3308295 rs11577526 A G 45.03 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.09;MQ=57.69;MQ0=0;OQ=1861.63;QD=33.24;SB=-741.99 GT:AD:DP:GL:GQ 1/1:0,56:55:-189.77,-16.57,-0.03:99
-chr1 3308392 rs11578011 T C 195.41 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.80;MQ0=0;OQ=1812.46;QD=30.21;SB=-790.65 GT:AD:DP:GL:GQ 1/1:0,59:59:-188.08,-20.60,-3.25:99
-chr1 3308574 rs5024246 G A 333.57 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=876.20;QD=19.47;SB=-325.85 GT:AD:DP:GL:GQ 0/1:19,26:45:-104.46,-13.56,-63.60:99
-chr1 3308629 rs10909942 C G 63.18 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.03;HRun=0;HaplotypeScore=2.61;MQ=58.12;MQ0=0;OQ=1384.57;QD=36.44;SB=-590.68 GT:AD:DP:GL:GQ 1/1:0,37:37:-142.07,-10.86,-0.03:99
-chr1 3308702 rs56148282 G A 636.18 Indel AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.59;MQ0=0;QD=19.28;SB=-248.56 GT:AD:DP:GL:GQ 0/1:12,21:30:-75.94,-9.04,-37.32:99
-chr1 3308921 rs1889124 A G 16.57 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.23;MQ=58.83;MQ0=0;OQ=1016.70;QD=28.24;SB=-485.51 GT:AD:DP:GL:GQ 1/1:0,36:33:-105.29,-9.95,-0.03:99
-chr1 3309492 rs4353034 G A 0.09 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=16.76;MQ=57.87;MQ0=0;OQ=200.25;QD=6.07;SB=-37.01 GT:AD:DP:GL:GQ 0/1:23,8:31:-40.02,-16.71,-79.20:99
-chr1 3309534 rs12562397 C T 380.45 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.05;MQ0=0;OQ=1380.14;QD=38.34;SB=-494.65 GT:AD:DP:GL:GQ 1/1:0,36:35:-141.61,-10.54,-0.01:99
-chr1 3309541 rs12562399 C G 28.59 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.39;MQ0=0;OQ=1543.76;QD=40.63;SB=-639.90 GT:AD:DP:GL:GQ 1/1:0,38:37:-157.97,-11.15,-0.01:99
-chr1 3309637 rs4471209 G A 344.14 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.51;MQ0=0;OQ=382.91;QD=10.08;SB=-184.19 GT:AD:DP:GL:GQ 0/1:25,13:37:-52.73,-11.16,-73.72:99
-chr1 3309732 rs6664364 C T 134.87 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.91;MQ0=0;OQ=1699.09;QD=36.15;SB=-803.59 GT:AD:DP:GL:GQ 1/1:0,47:44:-173.51,-13.26,-0.01:99
-chr1 3309737 rs6664369 C T 130.20 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.53;MQ0=0;OQ=1859.42;QD=37.95;SB=-907.23 GT:AD:DP:GL:GQ 1/1:0,49:48:-189.54,-14.46,-0.02:99
-chr1 3309924 rs6669407 A G 328.05 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=995.86;QD=29.29;SB=-353.80 GT:AD:DP:GL:GQ 1/1:0,34:32:-103.20,-9.65,-0.03:96.22
-chr1 3310023 rs2493286 G C 420.47 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1672.06;QD=40.78;SB=-718.73 GT:AD:DP:GL:GQ 1/1:0,41:40:-170.80,-12.05,-0.01:99
-chr1 3310336 rs6657675 G A 148.97 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=58.38;MQ0=0;OQ=936.76;QD=20.36;SB=-332.89 GT:AD:DP:GL:GQ 0/1:17,29:43:-109.92,-12.96,-52.69:99
-chr1 3310582 rs55820208 C T 260.28 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=862.76;QD=19.61;SB=-355.48 GT:AD:DP:GL:GQ 0/1:19,25:43:-102.51,-12.95,-64.90:99
-chr1 3311027 rs41315264 C A 149.68 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.45;MQ0=0;OQ=411.02;QD=12.09;SB=-182.52 GT:AD:DP:GL:GQ 0/1:19,15:31:-53.72,-9.34,-57.20:99
-chr1 3311596 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=4;HaplotypeScore=11.58;MQ=54.22;MQ0=0;OQ=65.40;QD=1.42;SB=47.17 GT:AD:DP:GL:GQ 0/1:36,10:29:-18.61,-8.78,-88.90:98.24
-chr1 3312969 rs2483222 T C 325.01 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.04;MQ0=0;OQ=585.55;QD=11.71;SB=-306.07 GT:AD:DP:GL:GQ 0/1:25,25:48:-76.31,-14.47,-93.64:99
-chr1 3313057 rs2483223 T G 88.19 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.28;MQ0=0;OQ=1723.37;QD=26.93;SB=-826.52 GT:AD:DP:GL:GQ 1/1:0,64:57:-175.98,-17.18,-0.06:99
-chr1 3313337 rs2493304 A G 110.36 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=57.61;MQ0=0;OQ=687.56;QD=10.91;SB=-122.49 GT:AD:DP:GL:GQ 0/1:35,28:61:-90.42,-18.38,-140.37:99
-chr1 3313476 rs2483224 C T 77.82 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=3.15;MQ=58.48;MQ0=0;OQ=742.74;QD=16.15;SB=-389.41 GT:AD:DP:GL:GQ 0/1:21,25:42:-90.21,-12.66,-65.08:99
-chr1 3314069 rs2493303 G C 188.15 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=4.50;MQ=59.20;MQ0=0;OQ=943.60;QD=16.27;SB=-364.47 GT:AD:DP:GL:GQ 0/1:29,29:57:-114.83,-17.19,-120.69:99
-chr1 3314293 rs2493302 A T 133.12 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=59.50;MQ0=0;OQ=1593.32;QD=34.64;SB=-633.61 GT:AD:DP:GL:GQ 1/1:0,46:43:-162.93,-12.95,-0.01:99
-chr1 3314897 rs2483225 T C 612.21 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.62;MQ0=0;OQ=1899.06;QD=30.14;SB=-687.73 GT:AD:DP:GL:GQ 1/1:0,63:60:-193.54,-18.10,-0.05:99
-chr1 3315120 rs12063572 A G 188.23 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.59;MQ0=0;OQ=550.32;QD=9.83;SB=-278.26 GT:AD:DP:GL:GQ 0/1:32,24:53:-74.29,-15.98,-116.93:99
-chr1 3315180 rs12063579 A G 62.82 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=5.22;MQ=57.82;MQ0=1;OQ=599.80;QD=10.91;SB=-262.60 GT:AD:DP:GL:GQ 0/1:27,28:47:-77.44,-14.18,-83.26:99
-chr1 3315190 rs2493301 G C 0.26 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=15.61;MQ=57.11;MQ0=1;OQ=860.03;QD=14.83;SB=-355.44 GT:AD:DP:GL:GQ 0/1:31,27:50:-104.37,-15.08,-104.68:99
-chr1 3315194 rs12063613 A G 1.95 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=10.46;MQ=56.06;MQ0=1;OQ=577.86;QD=9.47;SB=-271.10 GT:AD:DP:GL:GQ 0/1:30,31:51:-76.46,-15.39,-99.42:99
-chr1 3315219 . C T 17.67 DPFilter;Indel;LowQual AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=15.64;MQ=52.76;MQ0=1;QD=0.26;SB=34.67 GT:AD:DP:GL:GQ 0/1:62,6:62:-23.74,-18.70,-180.77:50.43
-chr1 3315354 rs12065021 T C 254.87 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=59.68;MQ0=0;OQ=519.08;QD=13.66;SB=-277.27 GT:AD:DP:GL:GQ 0/1:17,21:38:-66.65,-11.46,-65.47:99
-chr1 3315386 rs2493300 A G 19.22 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=1158.12;QD=28.95;SB=-549.05 GT:AD:DP:GL:GQ 1/1:0,40:37:-119.43,-11.16,-0.04:99
-chr1 3315441 rs2493299 A G 105.98 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.81;MQ=60.00;MQ0=0;OQ=1355.37;QD=28.24;SB=-603.93 GT:AD:DP:GL:GQ 1/1:0,48:44:-139.17,-13.27,-0.04:99
-chr1 3315528 rs55929648 C T 143.11 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=56.18;MQ0=0;OQ=1041.13;QD=18.59;SB=-362.91 GT:AD:DP:GL:GQ 0/1:25,31:52:-123.07,-15.67,-66.96:99
-chr1 3315772 rs2493298 C A 135.74 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=60.00;MQ0=0;OQ=850.76;QD=17.72;SB=-447.55 GT:AD:DP:GL:GQ 0/1:19,29:48:-102.82,-14.46,-64.75:99
-chr1 3315954 rs36070715 C G 3.94 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.72;MQ=51.04;MQ0=0;OQ=1102.41;QD=21.62;SB=-424.97 GT:AD:DP:GL:GQ 0/1:21,30:46:-127.39,-13.87,-69.58:99
-chr1 3316002 rs60965010 G A 53.41 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=53.52;MQ0=0;OQ=683.65;QD=15.19;SB=-341.33 GT:AD:DP:GL:GQ 0/1:23,22:41:-84.00,-12.35,-71.37:99
-chr1 3316048 rs59831144 A G 16.76 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=6.55;MQ=58.48;MQ0=0;OQ=584.41;QD=12.70;SB=-233.93 GT:AD:DP:GL:GQ 0/1:24,22:41:-74.08,-12.36,-76.23:99
-chr1 3316091 rs2493297 G A 148.61 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.53;MQ0=0;OQ=1649.32;QD=33.66;SB=-643.25 GT:AD:DP:GL:GQ 1/1:0,49:44:-168.54,-13.26,-0.02:99
-chr1 3316251 . G A 182.76 SnpCluster AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=43.92;MQ0=0;QD=3.10;SB=-111.51 GT:AD:DP:GL:GQ 0/1:47,12:54:-37.83,-16.27,-156.64:99
-chr1 3316256 . T C 219.54 SnpCluster AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=43.18;MQ0=0;QD=3.66;SB=-32.48 GT:AD:DP:GL:GQ 0/1:44,16:55:-41.82,-16.58,-163.02:99
-chr1 3316258 rs7364679 G T 370 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=43.51;MQ0=0;QD=6.07;SB=-108.68 GT:AD:DP:GL:GQ 0/1:43,18:56:-57.15,-16.87,-140.13:99
-chr1 3316271 . G T 44.21 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=42.99;MQ0=0;OQ=836.87;QD=13.72;SB=-249.23 GT:AD:DP:GL:GQ 0/1:29,32:52:-102.65,-15.68,-71.94:99
-chr1 3316274 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=55.35;MQ=42.03;MQ0=0;OQ=122.20;QD=2.07;SB=-76.97 GT:AD:DP:GL:GQ 0/1:47,12:53:-31.48,-15.98,-148.32:99
-chr1 3316287 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=56;Dels=0.04;HRun=0;HaplotypeScore=28.34;MQ=46.39;MQ0=0;OQ=249.44;QD=4.45;SB=13.22 GT:AD:DP:GL:GQ 0/1:42,12:52:-43.29,-15.07,-133.82:99
-chr1 3316288 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=24.35;MQ=46.92;MQ0=0;OQ=241.94;QD=4.17;SB=40.21 GT:AD:DP:GL:GQ 0/1:44,14:54:-43.75,-16.27,-150.33:99
-chr1 3316304 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=2;HaplotypeScore=31.71;MQ=50.98;MQ0=0;OQ=105.86;QD=1.79;SB=47.12 GT:AD:DP:GL:GQ 0/1:51,8:50:-28.93,-15.06,-145.13:99
-chr1 3316355 . A G 40.11 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=6.42;MQ=53.40;MQ0=0;QD=0.79;SB=24.53 GT:AD:DP:GL:GQ 0/1:42,9:48:-21.76,-14.47,-159.00:72.94
-chr1 3316370 . G A 1.13 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=7.87;MQ=52.81;MQ0=0;OQ=530.25;QD=10.40;SB=-291.29 GT:AD:DP:GL:GQ 0/1:31,20:45:-69.88,-13.57,-88.85:99
-chr1 3316500 rs4648494 A G 396.15 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.41;MQ0=0;OQ=1411.68;QD=27.15;SB=-591.87 GT:AD:DP:GL:GQ 1/1:0,52:46:-144.80,-13.88,-0.05:99
-chr1 3316656 rs6670123 C G 292.55 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.36;MQ=56.33;MQ0=0;OQ=1404.84;QD=19.79;SB=-673.50 GT:AD:DP:GL:GQ 0/1:33,38:68:-164.26,-20.49,-128.05:99
-chr1 3316892 rs2493296 C T 338.29 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.07;MQ0=0;OQ=702.09;QD=14.04;SB=-332.51 GT:AD:DP:GL:GQ 0/1:27,23:46:-87.37,-13.87,-76.76:99
-chr1 3317409 rs1106270 A G 118.06 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.41;MQ0=0;OQ=1192.84;QD=30.59;SB=-537.44 GT:AD:DP:GL:GQ 1/1:0,39:35:-122.88,-10.54,-0.02:99
-chr1 3317462 rs1106271 T G 1.72 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=1.32;MQ=56.98;MQ0=0;OQ=1224.22;QD=31.39;SB=-406.92 GT:AD:DP:GL:GQ 1/1:0,39:38:-126.04,-11.45,-0.03:99
-chr1 3317665 rs57382922 C T 121.84 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.88;MQ=57.50;MQ0=0;OQ=526.20;QD=15.48;SB=-279.22 GT:AD:DP:GL:GQ 0/1:15,19:32:-65.55,-9.65,-47.15:99
-chr1 3318218 rs870124 T C 46.45 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=58.35;MQ0=0;OQ=987.47;QD=31.85;SB=-495.44 GT:AD:DP:GL:GQ 1/1:0,30:29:-102.35,-8.74,-0.01:87.24
-chr1 3318519 rs2493292 C T 35.55 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=5.38;MQ=58.81;MQ0=0;OQ=410.88;QD=10.54;SB=-213.48 GT:AD:DP:GL:GQ 0/1:22,17:36:-55.22,-10.85,-74.55:99
-chr1 3319244 rs2493291 C T 128.26 PASS AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=57.07;MQ0=0;OQ=113.91;QD=8.76;SB=-36.64 GT:AD:DP:GL:GQ 0/1:8,5:13:-18.59,-3.92,-28.88:99
-chr1 3319441 . G A 108.40 PASS AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=283.86;QD=13.52;SB=-108.97 GT:AD:DP:GL:GQ 0/1:11,10:21:-38.00,-6.33,-35.64:99
-chr1 3320120 . C T 102.17 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=709.62;QD=14.78;SB=-362.53 GT:AD:DP:GL:GQ 0/1:24,23:45:-87.81,-13.57,-69.77:99
-chr1 3320537 rs2493290 G A 97.62 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.41;MQ=59.54;MQ0=0;OQ=872.79;QD=17.46;SB=-392.92 GT:AD:DP:GL:GQ 0/1:24,26:48:-105.02,-14.46,-80.60:99
-chr1 3320607 rs11578951 G A 205.49 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=56.45;MQ0=0;OQ=183.21;QD=9.16;SB=-114.08 GT:AD:DP:GL:GQ 0/1:13,7:17:-26.73,-5.12,-34.52:99
-chr1 3320622 rs2493289 A G 29.59 PASS AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=56.62;MQ0=0;OQ=591.39;QD=28.16;SB=-179.75 GT:AD:DP:GL:GQ 1/1:0,20:19:-62.74,-5.73,-0.02:57.13
-chr1 3320744 rs2493288 G A 319.17 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.00;MQ0=0;OQ=558.26;QD=13.29;SB=-286.76 GT:AD:DP:GL:GQ 0/1:23,19:41:-71.47,-12.36,-76.00:99
-chr1 3321412 rs60973157 G C 340.30 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=59.61;MQ0=0;OQ=1008.01;QD=17.08;SB=-510.27 GT:AD:DP:GL:GQ 0/1:31,28:58:-121.57,-17.48,-125.42:99
-chr1 3321593 rs2483228 T C 57.78 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=59.17;MQ0=0;OQ=862.49;QD=30.80;SB=-342.44 GT:AD:DP:GL:GQ 1/1:0,28:27:-89.85,-8.14,-0.02:81.21
-chr1 3321759 rs1999528 A G 88.85 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1263.70;QD=30.82;SB=-424.24 GT:AD:DP:GL:GQ 1/1:0,41:41:-129.99,-12.37,-0.04:99
-chr1 3322543 rs2483229 T C 158.61 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.98;MQ0=0;OQ=401.83;QD=7.31;SB=-190.61 GT:AD:DP:GL:GQ 0/1:33,22:50:-58.54,-15.08,-123.40:99
-chr1 3322811 rs1889123 T C 57.71 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=1553.51;QD=34.52;SB=-743.30 GT:AD:DP:GL:GQ 1/1:0,45:44:-158.95,-13.25,-0.01:99
-chr1 3323101 rs55713431 A G 0.68 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=4;HaplotypeScore=1.93;MQ=59.65;MQ0=0;OQ=422.62;QD=7.97;SB=-123.50 GT:AD:DP:GL:GQ 0/1:32,21:47:-59.71,-14.17,-112.42:99
-chr1 3323323 rs2068354 A G 160.11 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=738.34;QD=11.36;SB=-391.91 GT:AD:DP:GL:GQ 0/1:34,31:64:-96.41,-19.29,-135.43:99
-chr1 3324752 rs2483230 A G 139.58 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=59.42;MQ0=0;OQ=1229.51;QD=30.74;SB=-406.34 GT:AD:DP:GL:GQ 1/1:0,40:38:-126.56,-11.45,-0.03:99
-chr1 3326060 rs1984069 C T 66.93 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=2062.28;QD=37.50;SB=-721.47 GT:AD:DP:GL:GQ 1/1:0,55:53:-209.83,-15.97,-0.02:99
-chr1 3327403 rs1572040 A G 479.17 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1561.86;QD=33.95;SB=-803.63 GT:AD:DP:GL:GQ 1/1:0,46:45:-159.79,-13.56,-0.02:99
-chr1 3327481 . A G 13.29 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.51;MQ=58.78;MQ0=0;OQ=805.84;QD=11.68;SB=-333.16 GT:AD:DP:GL:GQ 0/1:35,34:66:-103.76,-19.89,-136.42:99
-chr1 3327496 rs11579873 G A 76.54 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=5.52;MQ=59.07;MQ0=0;OQ=1231.78;QD=17.60;SB=-403.19 GT:AD:DP:GL:GQ 0/1:34,36:67:-146.65,-20.19,-102.53:99
-chr1 3328305 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=2;HaplotypeScore=9.54;MQ=57.05;MQ0=0;OQ=81.44;QD=1.66;SB=56.21 GT:AD:DP:GL:GQ 0/1:35,13:31:-20.79,-9.36,-100.83:99
-chr1 3328931 rs2483231 A G 0.45 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=57.64;MQ0=0;OQ=961.69;QD=26.71;SB=-96.83 GT:AD:DP:GL:GQ 1/1:0,35:29:-99.77,-8.74,-0.01:87.24
-chr1 3329199 rs10492937 C A 94.15 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=591.17;QD=15.16;SB=-220.88 GT:AD:DP:GL:GQ 0/1:18,21:38:-73.85,-11.45,-60.07:99
-chr1 3329740 . G T 6.44 PASS AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=1;HaplotypeScore=3.49;MQ=59.36;MQ0=0;OQ=539.79;QD=14.99;SB=-294.29 GT:AD:DP:GL:GQ 0/1:15,21:33:-67.21,-9.94,-47.46:99
-chr1 3329976 rs2483232 A G 146.59 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.83;MQ=59.54;MQ0=0;OQ=1387.79;QD=27.76;SB=-682.70 GT:AD:DP:GL:GQ 1/1:0,49:45:-142.42,-13.58,-0.05:99
-chr1 3330129 rs4648385 C T 62.27 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.51;MQ0=0;OQ=1421.02;QD=37.40;SB=-712.36 GT:AD:DP:GL:GQ 1/1:0,38:36:-145.70,-10.84,-0.01:99
-chr1 3330207 rs2483233 A G 536.88 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1265.03;QD=33.29;SB=-631.30 GT:AD:DP:GL:GQ 1/1:0,38:37:-130.10,-11.15,-0.02:99
-chr1 3330527 rs2483234 A G 229.57 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1088.75;QD=27.92;SB=-544.02 GT:AD:DP:GL:GQ 1/1:0,38:35:-112.49,-10.56,-0.04:99
-chr1 3330619 rs2483235 A G 461.47 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=1699.01;QD=28.80;SB=-626.83 GT:AD:DP:GL:GQ 1/1:0,59:55:-173.55,-16.59,-0.06:99
-chr1 3330715 rs4648500 A C 461.04 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.69;MQ0=0;OQ=953.20;QD=15.63;SB=-476.30 GT:AD:DP:GL:GQ 0/1:28,33:61:-116.98,-18.37,-104.31:99
-chr1 3331400 rs2483236 C T 56.26 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=55.81;MQ0=0;OQ=1168.69;QD=36.52;SB=-534.21 GT:AD:DP:GL:GQ 1/1:0,31:30:-120.46,-9.04,-0.01:90.29
-chr1 3331651 rs1970118 A G 69.34 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=50.87;MQ0=0;OQ=938.62;QD=27.61;SB=-452.46 GT:AD:DP:GL:GQ 1/1:0,34:32:-97.49,-9.66,-0.04:96.17
-chr1 3331969 rs41303861 G T 165.88 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=56.82;MQ0=0;OQ=610.74;QD=12.99;SB=-193.66 GT:AD:DP:GL:GQ 0/1:23,24:44:-77.62,-13.26,-67.40:99
-chr1 3332390 rs2244013 G A 343.87 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.76;MQ=59.53;MQ0=0;OQ=624.83;QD=12.75;SB=-319.81 GT:AD:DP:GL:GQ 0/1:27,22:47:-79.93,-14.16,-96.24:99
-chr1 3332664 rs870171 G T 453.17 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=726.05;QD=12.10;SB=-151.13 GT:AD:DP:GL:GQ 0/1:34,26:59:-93.67,-17.78,-105.77:99
-chr1 3333105 rs7549050 A G 414.31 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=796.44;QD=10.62;SB=-292.01 GT:AD:DP:GL:GQ 0/1:42,33:74:-105.23,-22.30,-168.30:99
-chr1 3333795 rs55833861 T C 103.98 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=2.59;MQ=58.97;MQ0=0;OQ=717.11;QD=11.38;SB=-232.86 GT:AD:DP:GL:GQ 0/1:36,27:59:-92.78,-17.78,-129.42:99
-chr1 3333920 rs56196310 G T 246.95 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=59.56;MQ0=0;OQ=564.40;QD=10.65;SB=-293.98 GT:AD:DP:GL:GQ 0/1:32,21:49:-74.48,-14.76,-99.79:99
-chr1 3334336 rs61759212 A G 99.75 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=59.13;MQ0=0;OQ=418.37;QD=9.73;SB=-116.62 GT:AD:DP:GL:GQ 0/1:23,20:40:-57.18,-12.06,-85.13:99
-chr1 3334647 rs2483240 A G 15.04 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=55.38;MQ0=1;OQ=79.23;QD=3.96;SB=-53.29 GT:AD:DP:GL:GQ 0/1:13,7:16:-16.03,-4.82,-44.27:99
-chr1 3335005 rs2483242 A T 508.54 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.64;MQ0=0;OQ=469.82;QD=13.82;SB=-232.91 GT:AD:DP:GL:GQ 0/1:18,16:34:-60.51,-10.24,-69.68:99
-chr1 3335714 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=9.36;MQ=57.49;MQ0=0;OQ=205.84;QD=4.57;SB=56.19 GT:AD:DP:GL:GQ 0/1:25,20:36:-34.71,-10.85,-86.86:99
-chr1 3336208 rs2493277 C G 559.81 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=642.22;QD=14.94;SB=-326.21 GT:AD:DP:GL:GQ 0/1:23,20:42:-80.17,-12.66,-97.68:99
-chr1 3336263 rs11583353 C T 94.14 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.90;MQ0=0;OQ=708.85;QD=18.65;SB=-324.84 GT:AD:DP:GL:GQ 0/1:17,21:37:-85.32,-11.15,-51.45:99
-chr1 3339994 rs10752734 T C 155.05 PASS AC=2;AF=1.00;AN=2;DB;DP=17;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=27.27;MQ0=2;OQ=107.39;QD=6.32;SB=-10.00 GT:AD:DP:GL:GQ 1/1:8,9:4:-14.27,-1.20,-0.00:12.04
-chr1 3342087 rs1537406 T C 266.84 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.23;MQ0=0;OQ=2135.99;QD=33.90;SB=-825.32 GT:AD:DP:GL:GQ 1/1:0,63:60:-217.21,-18.07,-0.02:99
-chr1 3342088 rs12735779 G C 80.32 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.25;MQ0=0;OQ=2678.31;QD=41.20;SB=-987.13 GT:AD:DP:GL:GQ 1/1:0,65:62:-271.44,-18.68,-0.02:99
-chr1 3342207 rs1537405 T C 92.45 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=60.00;MQ0=0;OQ=1223.31;QD=28.45;SB=-485.50 GT:AD:DP:GL:GQ 1/1:0,43:40:-125.96,-12.07,-0.04:99
-chr1 3342363 rs1537404 G C 0.18 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=4;HaplotypeScore=2.53;MQ=57.71;MQ0=0;OQ=1605.19;QD=37.33;SB=-574.94 GT:AD:DP:GL:GQ 1/1:0,43:39:-164.12,-11.76,-0.02:99
-chr1 3342401 rs1065247 T C 218.93 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=58.89;MQ0=0;OQ=523.80;QD=12.47;SB=-250.33 GT:AD:DP:GL:GQ 0/1:20,21:38:-67.12,-11.46,-67.07:99
-chr1 3342439 rs1537402 T C 329.15 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.61;MQ0=0;OQ=1390.94;QD=29.59;SB=-663.80 GT:AD:DP:GL:GQ 1/1:0,47:44:-142.72,-13.27,-0.04:99
-chr1 3342644 rs2493267 A G 426.47 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1871.16;QD=31.71;SB=-785.23 GT:AD:DP:GL:GQ 1/1:0,59:54:-190.73,-16.27,-0.03:99
-chr1 3342725 rs35015571 C T 160.86 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=59.43;MQ0=0;OQ=266.00;QD=8.06;SB=-157.61 GT:AD:DP:GL:GQ 0/1:23,10:28:-38.32,-8.44,-61.48:99
-chr1 3342732 rs2236518 A C 16.29 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=2.32;MQ=59.45;MQ0=0;OQ=611.30;QD=17.98;SB=-246.93 GT:AD:DP:GL:GQ 0/1:10,24:30:-73.45,-9.04,-31.78:99
-chr1 3343497 rs35837267 G A 179.26 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=1.81;MQ=58.20;MQ0=0;OQ=412.37;QD=12.13;SB=-230.72 GT:AD:DP:GL:GQ 0/1:20,14:34:-54.77,-10.25,-72.54:99
-chr1 3343750 rs2493265 A G 92.52 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.09;MQ0=0;OQ=1343.75;QD=27.42;SB=-616.98 GT:AD:DP:GL:GQ 1/1:0,49:43:-138.00,-12.97,-0.04:99
-chr1 3343809 rs2493264 A G 123.80 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.40;MQ=58.91;MQ0=0;OQ=1865.11;QD=29.14;SB=-622.24 GT:AD:DP:GL:GQ 1/1:0,64:61:-190.17,-18.41,-0.07:99
-chr1 3344455 rs2483249 T C 577.76 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2266.24;QD=31.92;SB=-1078.24 GT:AD:DP:GL:GQ 1/1:0,71:70:-230.26,-21.11,-0.05:99
-chr1 3344475 rs2493263 T C 726.67 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2858.56;QD=35.29;SB=-1249.13 GT:AD:DP:GL:GQ 1/1:0,81:80:-289.47,-24.10,-0.03:99
-chr1 3345122 rs55729137 G A 38.39 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.48;MQ0=0;OQ=807.80;QD=18.36;SB=-199.91 GT:AD:DP:GL:GQ 0/1:20,24:42:-96.73,-12.66,-57.09:99
-chr1 3346265 rs2483250 A C 12.02 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=59.52;MQ0=0;OQ=1256.35;QD=32.21;SB=-315.07 GT:AD:DP:GL:GQ 1/1:0,39:37:-129.23,-11.15,-0.01:99
-chr1 3346495 rs2483251 T C 2.80 PASS AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=1.13;MQ=60.00;MQ0=0;OQ=525.69;QD=27.67;SB=-225.75 GT:AD:DP:GL:GQ 1/1:0,19:16:-56.16,-4.82,-0.01:48.13
-chr1 3346655 rs2493262 C G 18.99 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=2;HaplotypeScore=2.19;MQ=59.17;MQ0=0;OQ=878.66;QD=31.38;SB=-427.67 GT:AD:DP:GL:GQ 1/1:0,27:23:-91.47,-6.94,-0.02:69.23
-chr1 3346875 rs12745100 C T 10.66 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=496.33;QD=18.38;SB=-39.63 GT:AD:DP:GL:GQ 0/1:12,15:27:-61.05,-8.13,-42.91:99
-chr1 3347097 rs55892133 A G 803.11 Indel AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.17;MQ=58.79;MQ0=0;QD=12.55;SB=-200.20 GT:AD:DP:GL:GQ 0/1:34,30:60:-101.69,-18.09,-118.87:99
-chr1 3347896 rs10797392 T G 467.03 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.49;MQ0=1;OQ=720.09;QD=12.20;SB=-372.76 GT:AD:DP:GL:GQ 0/1:27,32:54:-91.57,-16.27,-88.57:99
-chr1 3348782 rs2483252 G C 20.05 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=1.07;MQ=58.41;MQ0=0;OQ=1754.48;QD=39.87;SB=-676.45 GT:AD:DP:GL:GQ 1/1:0,43:42:-179.05,-12.66,-0.02:99
-chr1 3348792 rs35536718 C G 187.57 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=58.60;MQ0=0;OQ=722.68;QD=14.45;SB=-275.28 GT:AD:DP:GL:GQ 0/1:28,22:46:-89.42,-13.87,-106.46:99
-chr1 3349040 rs2493261 C G 241.62 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=2328.68;QD=40.85;SB=-454.11 GT:AD:DP:GL:GQ 1/1:0,57:55:-236.48,-16.59,-0.03:99
-chr1 3349142 rs56009352 G T 195.97 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=58.75;MQ0=0;OQ=381.64;QD=9.09;SB=-161.15 GT:AD:DP:GL:GQ 0/1:24,18:38:-52.90,-11.45,-81.46:99
-chr1 3349843 rs11588737 T C 126.31 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.70;MQ0=0;OQ=680.83;QD=8.96;SB=-348.93 GT:AD:DP:GL:GQ 0/1:44,32:72:-93.07,-21.70,-169.44:99
-chr1 3349896 rs9424295 C A 298.32 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.90;MQ0=0;OQ=883.58;QD=12.27;SB=-371.71 GT:AD:DP:GL:GQ 0/1:40,32:69:-112.42,-20.78,-136.87:99
-chr1 3350654 . A G 19.67 PASS AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=4.82;MQ=58.94;MQ0=0;OQ=752.06;QD=11.22;SB=-353.94 GT:AD:DP:GL:GQ 0/1:36,30:64:-97.78,-19.29,-134.25:99
-chr1 3350874 rs2493260 A T 152.74 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1881.55;QD=33.01;SB=-813.90 GT:AD:DP:GL:GQ 1/1:0,54:52:-191.76,-15.67,-0.02:99
-chr1 3351164 rs2483254 G A 165.18 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.02;MQ=57.99;MQ0=0;OQ=1923.46;QD=34.35;SB=-708.45 GT:AD:DP:GL:GQ 1/1:0,56:52:-195.97,-15.68,-0.04:99
-chr1 3351668 rs61759222 T C 292.32 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.16;MQ0=0;OQ=649.71;QD=12.99;SB=-320.27 GT:AD:DP:GL:GQ 0/1:27,23:50:-83.32,-15.07,-104.64:99
-chr1 3351675 rs61759223 T C 215.70 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.56;MQ0=0;OQ=453.74;QD=8.73;SB=-214.35 GT:AD:DP:GL:GQ 0/1:31,21:51:-64.03,-15.38,-121.39:99
-chr1 3351951 rs61759224 A G 132.94 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.69;MQ0=0;OQ=462.74;QD=9.25;SB=-204.32 GT:AD:DP:GL:GQ 0/1:29,21:49:-64.32,-14.77,-119.90:99
-chr1 3352116 rs867814 C T 338.36 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.66;MQ0=0;OQ=1015.19;QD=15.15;SB=-259.14 GT:AD:DP:GL:GQ 0/1:34,33:66:-124.69,-19.89,-112.54:99
-chr1 3352233 rs55781247 C T 0.43 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=12.27;MQ=55.55;MQ0=1;OQ=438.31;QD=8.59;SB=-227.00 GT:AD:DP:GL:GQ 0/1:27,22:35:-60.74,-13.63,-60.12:99
-chr1 3352662 . G C 94.32 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.30;MQ0=0;OQ=750.60;QD=12.94;SB=-224.33 GT:AD:DP:GL:GQ 0/1:34,23:56:-95.22,-16.87,-149.91:99
-chr1 3353096 rs11808277 C G 337.37 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.63;MQ0=0;OQ=1053.89;QD=17.00;SB=-489.21 GT:AD:DP:GL:GQ 0/1:30,32:59:-126.45,-17.78,-131.54:99
-chr1 3353132 . G A 167.12 PASS AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.73;MQ0=0;OQ=1096.75;QD=16.13;SB=-431.84 GT:AD:DP:GL:GQ 0/1:34,34:67:-133.15,-20.19,-109.37:99
-chr1 3353327 rs10158332 A T 108.69 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=58.82;MQ0=0;OQ=1002.21;QD=14.12;SB=-515.47 GT:AD:DP:GL:GQ 0/1:38,33:71:-124.89,-21.39,-148.24:99
-chr1 3353449 rs10157570 G A 490.96 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=905.02;QD=15.88;SB=-430.82 GT:AD:DP:GL:GQ 0/1:30,27:56:-110.66,-16.88,-93.98:99
-chr1 3353662 rs2483255 A T 46.49 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=59.30;MQ0=0;OQ=2470.87;QD=37.44;SB=-912.35 GT:AD:DP:GL:GQ 1/1:0,66:64:-250.68,-19.27,-0.01:99
-chr1 3353786 rs2493258 A G 307.10 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.56;MQ0=0;OQ=1182.18;QD=13.91;SB=-595.40 GT:AD:DP:GL:GQ 0/1:39,46:85:-147.12,-25.62,-159.37:99
-chr1 3354380 rs61759225 T C 235.67 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=921.81;QD=12.29;SB=-424.06 GT:AD:DP:GL:GQ 0/1:42,33:74:-117.76,-22.29,-166.03:99
-chr1 3354597 rs2263010 T C 533.81 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2222.94;QD=35.85;SB=-1114.11 GT:AD:DP:GL:GQ 1/1:0,62:62:-225.90,-18.68,-0.02:99
-chr1 3354829 rs61759226 A T 251.14 PASS AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.16;MQ0=0;OQ=1748.33;QD=17.48;SB=-874.02 GT:AD:DP:GL:GQ 0/1:46,54:99:-207.93,-29.81,-176.30:99
-chr1 3355107 rs4648386 A G 12.08 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=59.31;MQ0=0;OQ=1773.45;QD=34.77;SB=-505.48 GT:AD:DP:GL:GQ 1/1:0,51:51:-180.95,-15.36,-0.02:99
-chr1 3355113 rs61759227 G A 0.86 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=6.85;MQ=58.80;MQ0=0;OQ=911.32;QD=18.60;SB=-216.88 GT:AD:DP:GL:GQ 0/1:22,27:48:-108.87,-14.46,-75.78:99
-chr1 3355993 rs55913848 G T 115.65 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=58.15;MQ0=0;OQ=1046.84;QD=16.62;SB=-492.93 GT:AD:DP:GL:GQ 0/1:29,34:61:-126.34,-18.38,-91.26:99
-chr1 3356353 rs2096102 C A 344.49 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=61.19;MQ0=0;OQ=1204.86;QD=17.21;SB=-565.00 GT:AD:DP:GL:GQ 0/1:30,40:67:-143.95,-20.18,-94.79:99
-chr1 3356461 . G A 34.92 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=63.59;MQ=46.78;MQ0=1;QD=0.83;SB=-40.97 GT:AD:DP:GL:GQ 0/1:36,6:34:-17.03,-10.25,-100.31:67.76
-chr1 3356464 . T G 27.11 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=13.28;MQ=49.36;MQ0=1;QD=0.85;SB=-38.91 GT:AD:DP:GL:GQ 0/1:28,4:29:-14.73,-8.74,-84.74:59.94
-chr1 3356466 . G T 324.76 SnpCluster AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=10.60;MQ=48.57;MQ0=1;QD=10.83;SB=-127.64 GT:AD:DP:GL:GQ 0/1:15,15:26:-43.60,-7.84,-42.90:99
-chr1 3357640 rs2487679 A G 123.35 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=59.32;MQ0=0;OQ=2260.98;QD=33.25;SB=-697.21 GT:AD:DP:GL:GQ 1/1:0,68:67:-229.71,-20.18,-0.03:99
-chr1 3357895 rs6697669 T C 43.42 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.03;HRun=0;HaplotypeScore=3.79;MQ=57.15;MQ0=0;OQ=335.02;QD=10.15;SB=-38.93 GT:AD:DP:GL:GQ 0/1:18,13:30:-45.82,-9.04,-67.57:99
-chr1 3357991 rs4648501 G A 122.29 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.97;MQ0=0;OQ=545.72;QD=10.70;SB=-291.79 GT:AD:DP:GL:GQ 0/1:33,18:50:-72.92,-15.06,-113.74:99
-chr1 3358003 rs2487670 G A 120.25 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.77;MQ0=0;OQ=1144.78;QD=22.01;SB=-472.53 GT:AD:DP:GL:GQ 0/1:18,34:50:-132.83,-15.07,-51.40:99
-chr1 3358201 rs55902179 A G 118.16 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=60.00;MQ0=0;OQ=620.71;QD=14.78;SB=-241.29 GT:AD:DP:GL:GQ 0/1:20,22:41:-77.71,-12.35,-78.03:99
-chr1 3359613 rs2487668 G A 227.96 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=59.61;MQ0=0;OQ=985.10;QD=16.70;SB=-425.79 GT:AD:DP:GL:GQ 0/1:26,32:57:-118.97,-17.18,-94.23:99
-chr1 3359684 rs34681041 A G 13.72 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=1.71;MQ=60.00;MQ0=0;OQ=330.72;QD=8.70;SB=-110.60 GT:AD:DP:GL:GQ 0/1:21,17:34:-46.60,-10.25,-79.14:99
-chr1 3361330 . G C 0.29 PASS AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=68.48;QD=6.85;SB=-10.00 GT:AD:DP:GL:GQ 0/1:6,4:9:-12.85,-2.72,-22.16:99
-chr1 3361841 rs55858614 G C 94.38 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.70;MQ0=0;OQ=503.58;QD=17.36;SB=-238.39 GT:AD:DP:GL:GQ 0/1:14,15:29:-62.38,-8.74,-58.19:99
-chr1 3362331 rs10909946 A C 12.50 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=2.71;MQ=58.18;MQ0=0;OQ=655.84;QD=12.15;SB=-228.89 GT:AD:DP:GL:GQ 0/1:26,28:47:-83.03,-14.16,-81.70:99
-chr1 3362529 rs61759232 T C 1.77 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=3.67;MQ=58.99;MQ0=0;OQ=549.81;QD=11.95;SB=-107.61 GT:AD:DP:GL:GQ 0/1:22,24:42:-70.93,-12.66,-83.77:99
-chr1 3362717 . A G 41.71 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.52;MQ=59.65;MQ0=0;OQ=773.42;QD=14.59;SB=-374.28 GT:AD:DP:GL:GQ 0/1:23,30:49:-95.39,-14.76,-86.55:99
-chr1 3363471 rs56365322 C G 249.90 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.24;MQ0=0;OQ=638.66;QD=11.61;SB=-240.06 GT:AD:DP:GL:GQ 0/1:30,25:50:-82.23,-15.08,-125.58:99
-chr1 3363827 rs2493256 A G 265.69 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=58.48;MQ0=0;OQ=531.11;QD=12.35;SB=-221.59 GT:AD:DP:GL:GQ 0/1:23,19:42:-71.22,-14.82,-89.22:99
-chr1 3364220 rs12745860 C T 264.50 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=58.78;MQ0=0;OQ=718.26;QD=12.60;SB=-212.70 GT:AD:DP:GL:GQ 0/1:33,24:53:-91.09,-15.98,-94.23:99
-chr1 3364244 rs12758368 T A 250.46 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=59.27;MQ0=0;OQ=910.80;QD=14.46;SB=-359.58 GT:AD:DP:GL:GQ 0/1:33,30:62:-113.04,-18.68,-119.17:99
-chr1 3364803 rs56242281 A G 70.18 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.36;MQ=59.30;MQ0=0;OQ=300.82;QD=9.12;SB=-84.67 GT:AD:DP:GL:GQ 0/1:18,14:30:-42.41,-9.04,-64.59:99
-chr1 3365228 rs61759235 A G 136.44 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=58.63;MQ0=0;OQ=478.85;QD=9.39;SB=-239.48 GT:AD:DP:GL:GQ 0/1:30,21:48:-65.63,-14.46,-116.95:99
-chr1 3365583 rs61759236 C G 131.55 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=835.90;QD=18.58;SB=-383.86 GT:AD:DP:GL:GQ 0/1:22,23:43:-99.85,-12.97,-77.78:99
-chr1 3366053 rs61759237 C T 131.92 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=735.43;QD=17.10;SB=-313.83 GT:AD:DP:GL:GQ 0/1:21,22:42:-89.48,-12.65,-70.75:99
-chr1 3366393 rs12059504 T C 302.48 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=60.00;MQ0=0;OQ=609.78;QD=12.70;SB=-240.29 GT:AD:DP:GL:GQ 0/1:24,24:48:-78.73,-14.47,-96.53:99
-chr1 3366983 rs59183260 C T 199.73 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.76;MQ=59.56;MQ0=0;OQ=586.61;QD=13.97;SB=-272.28 GT:AD:DP:GL:GQ 0/1:22,20:39:-73.71,-11.76,-62.95:99
-chr1 3367203 rs2487681 T C 222.79 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=60.00;MQ0=0;OQ=351.40;QD=8.79;SB=-154.93 GT:AD:DP:GL:GQ 0/1:22,18:38:-49.88,-11.46,-85.17:99
-chr1 3372040 rs10909947 G T 39.70 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.75;MQ0=0;OQ=1667.04;QD=35.47;SB=-355.84 GT:AD:DP:GL:GQ 1/1:0,47:46:-170.30,-13.86,-0.01:99
-chr1 3372773 . T G 28.89 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=4.07;MQ=59.49;MQ0=0;QD=0.64;SB=56.17 GT:AD:DP:GL:GQ 0/1:32,13:34:-16.42,-10.24,-99.13:61.72
-chr1 3372898 rs947351 G A 372.12 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.19;MQ0=0;OQ=649.44;QD=12.49;SB=-216.21 GT:AD:DP:GL:GQ 0/1:28,24:49:-83.00,-14.77,-93.12:99
-chr1 3373453 rs3893316 G T 349.34 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=441.10;QD=14.70;SB=-201.58 GT:AD:DP:GL:GQ 0/1:13,17:29:-56.13,-8.74,-43.76:99
-chr1 3373525 rs7550948 G A 64.51 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.53;MQ0=0;OQ=1066.26;QD=21.76;SB=-418.80 GT:AD:DP:GL:GQ 0/1:18,31:47:-124.08,-14.17,-50.84:99
-chr1 3373758 rs6424078 A G 63.51 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=58.45;MQ0=0;OQ=303.09;QD=10.10;SB=-109.62 GT:AD:DP:GL:GQ 0/1:15,15:29:-42.34,-8.75,-57.35:99
-chr1 3373912 rs45512802 C T 115.92 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.77;MQ=58.81;MQ0=0;OQ=487.90;QD=12.51;SB=-154.65 GT:AD:DP:GL:GQ 0/1:21,18:37:-63.22,-11.15,-77.33:99
-chr1 3374091 rs6667361 A G 15.86 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=1.91;MQ=58.45;MQ0=0;OQ=441.93;QD=9.82;SB=-196.52 GT:AD:DP:GL:GQ 0/1:26,19:43:-60.43,-12.96,-100.55:99
-chr1 3374466 rs7522513 A G 114.35 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.36;MQ0=0;OQ=449.01;QD=11.23;SB=-195.64 GT:AD:DP:GL:GQ 0/1:20,20:37:-59.34,-11.16,-69.75:99
-chr1 3374989 rs2493250 G A 285.91 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.52;MQ0=0;OQ=823.07;QD=17.15;SB=-412.42 GT:AD:DP:GL:GQ 0/1:23,25:48:-100.06,-14.47,-73.79:99
-chr1 3374999 rs2487673 G T 438.47 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=759.07;QD=16.87;SB=-384.82 GT:AD:DP:GL:GQ 0/1:19,26:45:-92.75,-13.56,-63.83:99
-chr1 3375110 rs1417897 C A 224.44 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=57.71;MQ0=0;OQ=613.48;QD=15.73;SB=-271.51 GT:AD:DP:GL:GQ 0/1:18,21:37:-75.78,-11.15,-51.34:99
-chr1 3375116 rs1891143 A G 122.77 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=57.71;MQ0=0;OQ=346.85;QD=8.89;SB=-128.27 GT:AD:DP:GL:GQ 0/1:22,17:35:-48.52,-10.55,-81.11:99
-chr1 3375190 rs2493249 T C 0.27 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=3;HaplotypeScore=2.59;MQ=59.45;MQ0=0;OQ=889.42;QD=26.16;SB=-381.39 GT:AD:DP:GL:GQ 1/1:0,34:28:-92.55,-8.44,-0.02:84.20
-chr1 3377520 . G A 54.48 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=60.00;MQ0=0;OQ=404.10;QD=10.92;SB=-123.57 GT:AD:DP:GL:GQ 0/1:21,16:32:-53.34,-9.65,-57.04:99
-chr1 3379133 rs2298082 T C 273.90 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.53;MQ=58.32;MQ0=0;OQ=528.06;QD=13.20;SB=-222.68 GT:AD:DP:GL:GQ 0/1:19,21:37:-67.24,-11.15,-73.98:99
-chr1 3379181 rs2487687 C T 16.32 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=60.00;MQ0=0;OQ=545.94;QD=21.00;SB=-232.27 GT:AD:DP:GL:GQ 0/1:9,17:25:-65.41,-7.53,-31.41:99
-chr1 3379587 rs2185639 C T 119.32 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=58.13;MQ0=0;OQ=232.01;QD=9.28;SB=-26.61 GT:AD:DP:GL:GQ 0/1:14,10:22:-33.12,-6.63,-45.28:99
-chr1 3380098 rs2493323 T A 210.96 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1873.41;QD=38.23;SB=-364.88 GT:AD:DP:GL:GQ 1/1:0,49:49:-190.94,-14.76,-0.01:99
-chr1 3380882 rs2493322 G A 155.52 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=666.25;QD=12.34;SB=-269.17 GT:AD:DP:GL:GQ 0/1:33,21:52:-85.58,-15.67,-103.39:99
-chr1 3381466 . A G 34.09 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.23;MQ=18.93;MQ0=48;QD=0.47;SB=2.04 GT:AD:DP:GL:GQ 0/1:58,15:13:-10.61,-3.92,-40.00:66.92
-chr1 3381536 rs2493320 G A 66.96 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=9.35;MQ0=30;OQ=163.18;QD=3.98;SB=-10.00 GT:AD:DP:GL:GQ 1/1:12,29:5:-19.88,-1.51,-0.00:15.05
-chr1 3381776 rs56863381 G A 0.39 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=12.80;MQ0=34;OQ=57.75;QD=1.03;SB=5.02 GT:AD:DP:GL:GQ 0/1:40,16:11:-12.38,-3.32,-24.49:90.59
-chr1 3382016 . A G 35.80 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=12.28;MQ0=39;QD=0.55;SB=-10.00 GT:AD:DP:GL:GQ 0/1:54,11:16:-11.69,-4.82,-49.41:68.63
-chr1 3382186 rs2493318 A G 275.57 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=47.26;MQ0=1;OQ=747.71;QD=13.35;SB=-372.26 GT:AD:DP:GL:GQ 0/1:27,29:52:-93.72,-15.67,-105.01:99
-chr1 3382897 rs12124163 G T 198.71 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.56;MQ0=0;OQ=598.86;QD=14.26;SB=-222.53 GT:AD:DP:GL:GQ 0/1:21,21:41:-75.52,-12.35,-66.44:99
-chr1 3383727 rs10797394 G A 171.07 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=49.26;MQ0=0;QD=13.16;SB=8.03 GT:AD:DP:GL:GQ 0/1:7,6:12:-24.01,-3.62,-19.11:99
-chr1 3383981 rs56341824 G T 14.44 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=1.70;MQ=59.25;MQ0=0;OQ=147.62;QD=5.90;SB=-6.99 GT:AD:DP:GL:GQ 0/1:17,8:23:-24.98,-6.93,-50.77:99
-chr1 3384110 rs10909948 C T 220.05 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=54.75;MQ0=0;OQ=493.02;QD=17.00;SB=-263.55 GT:AD:DP:GL:GQ 0/1:13,16:28:-61.02,-8.44,-45.99:99
-chr1 3384316 rs4638054 T C 12.90 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.07;MQ0=0;OQ=1239.78;QD=27.55;SB=-421.16 GT:AD:DP:GL:GQ 1/1:0,45:41:-127.61,-12.37,-0.05:99
-chr1 3384500 rs4422946 A G 10.27 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=2;HaplotypeScore=1.93;MQ=60.00;MQ0=0;OQ=259.70;QD=9.27;SB=-73.94 GT:AD:DP:GL:GQ 0/1:16,12:25:-36.79,-7.54,-56.39:99
-chr1 3384534 rs4534324 T C 47.15 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.99;MQ0=0;OQ=674.08;QD=29.31;SB=-343.44 GT:AD:DP:GL:GQ 1/1:0,23:22:-71.01,-6.63,-0.02:66.16
-chr1 3384899 rs10797395 G A 51.14 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=4.52;MQ=59.38;MQ0=0;OQ=712.83;QD=19.27;SB=-338.87 GT:AD:DP:GL:GQ 0/1:16,21:35:-85.11,-10.54,-50.14:99
-chr1 3385089 rs4553117 T C 310.38 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=892.31;QD=26.24;SB=-387.26 GT:AD:DP:GL:GQ 1/1:0,34:29:-92.85,-8.75,-0.03:87.19
-chr1 3385248 rs28568519 C G 124.68 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=59.45;MQ0=0;OQ=725.71;QD=17.28;SB=-286.30 GT:AD:DP:GL:GQ 0/1:20,22:38:-87.31,-11.46,-71.37:99
-chr1 3386469 rs881978 C T 144.12 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=2.64;MQ=59.25;MQ0=0;OQ=1109.69;QD=19.82;SB=-578.43 GT:AD:DP:GL:GQ 0/1:23,33:55:-130.82,-16.57,-79.57:99
-chr1 3386922 rs56309807 G A 10.71 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=6.20;MQ=58.23;MQ0=0;OQ=434.23;QD=11.74;SB=-179.25 GT:AD:DP:GL:GQ 0/1:20,16:31:-56.05,-9.34,-54.39:99
-chr1 3387048 rs2487677 T C 22.85 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.93;MQ=58.11;MQ0=0;OQ=1498.47;QD=31.88;SB=-723.23 GT:AD:DP:GL:GQ 1/1:0,46:43:-153.45,-12.96,-0.02:99
-chr1 3387315 rs1051515 G A 124.17 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=59.55;MQ0=0;OQ=661.19;QD=15.03;SB=-242.52 GT:AD:DP:GL:GQ 0/1:21,23:41:-81.76,-12.36,-69.63:99
-chr1 3387424 rs1051517 C T 185.79 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.57;MQ0=0;OQ=722.32;QD=16.80;SB=-358.40 GT:AD:DP:GL:GQ 0/1:21,22:42:-88.17,-12.66,-71.34:99
-chr1 3387765 rs2487676 G C 0.92 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=59.56;MQ0=0;OQ=985.55;QD=23.47;SB=-402.96 GT:AD:DP:GL:GQ 0/1:13,29:39:-113.61,-11.77,-48.31:99
-chr1 3387785 rs10797396 G A 343.20 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=869.16;QD=19.75;SB=-452.50 GT:AD:DP:GL:GQ 0/1:15,29:41:-102.56,-12.36,-46.08:99
-chr1 3388739 . G C 3.92 PASS AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=47.12;MQ0=0;OQ=99.91;QD=7.14;SB=-0.98 GT:AD:DP:GL:GQ 0/1:10,4:13:-17.20,-3.93,-33.90:99
-chr1 3388844 rs11579276 C T 89.01 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=228.92;QD=8.80;SB=-0.98 GT:AD:DP:GL:GQ 0/1:16,10:21:-32.51,-6.33,-40.91:99
-chr1 3389315 rs2493316 T C 332.07 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=364.79;QD=11.40;SB=-143.65 GT:AD:DP:GL:GQ 0/1:18,14:32:-49.41,-9.65,-68.22:99
-chr1 3390585 rs12124659 C T 210.63 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.96;MQ0=0;OQ=1350.80;QD=37.52;SB=-227.30 GT:AD:DP:GL:GQ 1/1:0,36:35:-138.68,-10.55,-0.01:99
-chr1 3391131 rs2487674 A G 49.46 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=2482.25;QD=31.82;SB=-1068.16 GT:AD:DP:GL:GQ 1/1:0,78:76:-251.87,-22.92,-0.06:99
-chr1 3392093 rs4648504 C T 77.49 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=53.45;MQ0=1;OQ=1952.99;QD=36.17;SB=-850.15 GT:AD:DP:GL:GQ 1/1:1,53:50:-198.90,-15.06,-0.02:99
-chr1 3394087 rs2821041 C T 330.28 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=59.75;MQ0=0;OQ=1098.32;QD=14.64;SB=-325.80 GT:AD:DP:GL:GQ 0/1:41,34:73:-135.10,-21.99,-140.04:99
-chr1 3394997 rs61759244 C G 135 PASS AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=59.37;MQ0=0;OQ=1716.91;QD=17.88;SB=-792.82 GT:AD:DP:GL:GQ 0/1:43,53:93:-203.04,-28.07,-171.23:99
-chr1 3395156 rs4648505 T C 309 PASS AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.51;MQ0=0;OQ=921.20;QD=9.70;SB=-319.80 GT:AD:DP:GL:GQ 0/1:57,38:95:-124.03,-28.62,-233.81:99
-chr1 3401826 rs2821034 T C 25.42 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=5.69;MQ=57.22;MQ0=0;OQ=336.60;QD=15.30;SB=-157.73 GT:AD:DP:GL:GQ 1/1:0,21:12:-37.26,-3.62,-0.02:36.06
-chr1 3406983 . G A 147.34 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=493.27;QD=14.51;SB=-172.20 GT:AD:DP:GL:GQ 0/1:17,17:33:-62.55,-9.94,-60.75:99
-chr1 3408031 rs7516662 A G 45.84 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=59.41;MQ0=0;OQ=599.81;QD=15.38;SB=-119.66 GT:AD:DP:GL:GQ 0/1:18,21:37:-74.41,-11.15,-64.16:99
-chr1 3408425 rs2821030 T C 291.53 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=44.95;MQ0=0;OQ=775.65;QD=13.61;SB=-335.17 GT:AD:DP:GL:GQ 0/1:17,40:43:-93.82,-12.97,-49.21:99
-chr1 3408438 rs56284135 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=5;HaplotypeScore=43.60;MQ=44.49;MQ0=0;OQ=630.57;QD=9.70;SB=-139.40 GT:AD:DP:GL:GQ 0/1:28,36:49:-81.11,-14.77,-94.33:99
-chr1 3408476 rs57408931 G C 181.30 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=164;Dels=0.03;HRun=1;HaplotypeScore=218.91;MQ=41.51;MQ0=3;QD=1.11;SB=-63.16 GT:AD:DP:GL:GQ 0/1:117,24:115:-89.58,-68.17,-379.21:99
-chr1 3408478 rs57082253 G A 513.03 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=180;Dels=0.00;HRun=0;HaplotypeScore=193.59;MQ=41.21;MQ0=2;QD=2.85;SB=-274.73 GT:AD:DP:GL:GQ 0/1:134,38:129:-95.85,-41.26,-324.12:99
-chr1 3408517 rs7368034 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=115;Dels=0.00;HRun=0;HaplotypeScore=120.54;MQ=42.22;MQ0=3;OQ=514.65;QD=4.48;SB=-116.36 GT:AD:DP:GL:GQ 0/1:73,33:82:-88.72,-33.97,-192.96:99
-chr1 3411446 rs6669870 C T 607.77 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.14;MQ0=0;OQ=1485.27;QD=36.23;SB=-614.81 GT:AD:DP:GL:GQ 1/1:0,41:39:-152.13,-11.76,-0.02:99
-chr1 3411518 rs2821009 A T 529.19 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.77;MQ0=0;OQ=1252.41;QD=34.79;SB=-623.61 GT:AD:DP:GL:GQ 1/1:0,36:35:-128.84,-10.55,-0.01:99
-chr1 3411757 rs2821008 A G 31.18 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=59.41;MQ0=0;OQ=238.32;QD=6.11;SB=-110.60 GT:AD:DP:GL:GQ 0/1:25,14:37:-38.27,-11.15,-99.52:99
-chr1 3413327 rs947344 C T 169.75 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.94;MQ=58.66;MQ0=0;OQ=1006.19;QD=19.35;SB=-478.56 GT:AD:DP:GL:GQ 0/1:21,31:45:-117.47,-13.57,-45.94:99
-chr1 3413493 rs2821006 A G 514.34 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1416.92;QD=30.15;SB=-704.80 GT:AD:DP:GL:GQ 1/1:0,47:45:-145.32,-13.57,-0.04:99
-chr1 3413602 rs10797397 C A 230.35 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.01;MQ=59.11;MQ0=0;OQ=969.58;QD=16.43;SB=-386.82 GT:AD:DP:GL:GQ 0/1:25,34:55:-116.81,-16.57,-75.73:99
-chr1 3414248 rs947345 G A 253.45 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.28;MQ=59.23;MQ0=0;OQ=855.83;QD=14.26;SB=-381.90 GT:AD:DP:GL:GQ 0/1:31,29:53:-104.84,-15.98,-85.70:99
-chr1 3415290 rs2794358 A G 117.33 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1082.49;QD=30.93;SB=-492.45 GT:AD:DP:GL:GQ 1/1:0,35:32:-111.85,-9.64,-0.02:96.25
-chr1 3416927 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=20.42;MQ=57.31;MQ0=0;OQ=341.32;QD=7.11;SB=-84.89 GT:AD:DP:GL:GQ 0/1:26,19:38:-51.91,-14.49,-87.40:99
-chr1 3416981 rs56310990 G C 2.17 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=51.26;MQ0=0;OQ=93.69;QD=3.02;SB=-14.81 GT:AD:DP:GL:GQ 0/1:25,6:25:-20.20,-7.54,-81.40:99
-chr1 3416998 . C T 35.62 PASS AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=49.93;MQ0=0;OQ=473.15;QD=15.77;SB=-230.75 GT:AD:DP:GL:GQ 0/1:10,20:24:-57.83,-7.23,-29.03:99
-chr1 3418020 rs2820999 T G 23.07 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=1.35;MQ=59.30;MQ0=0;OQ=1099.49;QD=33.32;SB=-419.27 GT:AD:DP:GL:GQ 1/1:0,32:32:-113.54,-9.64,-0.01:96.28
-chr1 3418284 rs4648391 G T 480.48 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1326.40;QD=33.16;SB=-497.29 GT:AD:DP:GL:GQ 1/1:0,40:39:-136.24,-11.75,-0.02:99
-chr1 3418288 rs4648514 C T 298.40 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=1504.64;QD=38.58;SB=-514.18 GT:AD:DP:GL:GQ 1/1:0,39:39:-154.07,-11.75,-0.02:99
-chr1 3418468 rs11585362 G A 504.11 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1061.06;QD=36.59;SB=-446.58 GT:AD:DP:GL:GQ 1/1:0,29:29:-109.71,-8.74,-0.02:87.27
-chr1 3419555 rs11587354 C A 388.99 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=2174.38;QD=35.07;SB=-358.82 GT:AD:DP:GL:GQ 1/1:0,62:58:-221.04,-17.47,-0.02:99
-chr1 3420506 . T A 214.92 PASS AC=2;AF=1.00;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1094.09;QD=36.47;SB=-408.28 GT:AD:DP:GL:GQ 1/1:0,30:30:-113.00,-9.04,-0.01:90.28
-chr1 3422067 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=4;HaplotypeScore=5.56;MQ=56.93;MQ0=0;OQ=142.54;QD=3.85;SB=26.11 GT:AD:DP:GL:GQ 0/1:17,20:22:-24.18,-6.64,-53.52:99
-chr1 3422138 rs12045137 C G 147.05 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1703.92;QD=40.57;SB=-765.63 GT:AD:DP:GL:GQ 1/1:0,42:41:-174.00,-12.36,-0.02:99
-chr1 3422853 rs11587498 G A 175.29 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=60.00;MQ0=0;OQ=415.52;QD=12.22;SB=-203.18 GT:AD:DP:GL:GQ 0/1:20,14:31:-54.19,-9.35,-54.52:99
-chr1 3424377 rs2820995 A G 162.79 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=58.66;MQ0=0;OQ=1805.64;QD=27.36;SB=-525.83 GT:AD:DP:GL:GQ 1/1:0,66:60:-184.23,-18.11,-0.08:99
-chr1 3424844 rs2794362 G C 500.34 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1899.04;QD=42.20;SB=-801.86 GT:AD:DP:GL:GQ 1/1:0,45:44:-193.50,-13.26,-0.01:99
-chr1 3427795 rs2794365 T C 272.59 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.56;MQ0=0;OQ=540.74;QD=12.87;SB=-223.28 GT:AD:DP:GL:GQ 0/1:22,20:39:-69.11,-11.75,-73.06:99
-chr1 3428053 rs11587384 G A 58.66 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=58.59;MQ0=0;OQ=656.10;QD=19.88;SB=-350.39 GT:AD:DP:GL:GQ 0/1:13,20:30:-77.94,-9.05,-31.18:99
-chr1 3428530 rs10909958 C T 169.55 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=60.00;MQ0=0;OQ=649.49;QD=10.31;SB=-164.81 GT:AD:DP:GL:GQ 0/1:40,23:61:-86.62,-18.39,-128.91:99
-chr1 3429888 rs10797398 G C 1.63 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=0.26;MQ=58.87;MQ0=0;OQ=1501.66;QD=40.59;SB=-598.80 GT:AD:DP:GL:GQ 1/1:0,37:37:-153.77,-11.16,-0.02:99
-chr1 3430507 rs2794322 T C 118.81 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=864.34;QD=26.19;SB=-416.15 GT:AD:DP:GL:GQ 1/1:0,33:29:-90.06,-8.75,-0.04:87.16
-chr1 3430803 rs12049449 A C 10.61 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=3;HaplotypeScore=1.13;MQ=59.39;MQ0=0;OQ=1279.24;QD=33.66;SB=-506.06 GT:AD:DP:GL:GQ 1/1:0,38:37:-131.52,-11.15,-0.02:99
-chr1 3431124 rs12093117 G A 200.25 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.17;MQ=59.61;MQ0=0;OQ=828.18;QD=17.25;SB=-263.28 GT:AD:DP:GL:GQ 0/1:20,28:45:-99.67,-13.57,-58.69:99
-chr1 3432615 rs11589895 G A 209.87 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.89;MQ0=0;OQ=771.91;QD=18.38;SB=-386.90 GT:AD:DP:GL:GQ 0/1:19,23:42:-93.13,-12.66,-62.18:99
-chr1 3433053 . C T 70.11 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=58.26;MQ0=0;OQ=707.05;QD=13.86;SB=-362.49 GT:AD:DP:GL:GQ 0/1:26,25:48:-88.45,-14.46,-91.49:99
-chr1 3435213 rs2821068 G C 38.82 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=58.11;MQ0=0;OQ=1371.97;QD=37.08;SB=-540.03 GT:AD:DP:GL:GQ 1/1:0,36:33:-140.79,-9.95,-0.01:99
-chr1 3435771 rs883427 G A 416.41 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.00;MQ0=0;OQ=1899.02;QD=38.76;SB=-741.50 GT:AD:DP:GL:GQ 1/1:0,49:48:-193.50,-14.46,-0.01:99
-chr1 3436171 rs11589175 G A 118.39 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=494.22;QD=9.88;SB=-114.31 GT:AD:DP:GL:GQ 0/1:32,17:48:-69.83,-17.13,-113.83:99
-chr1 3436855 rs11811714 C T 197.39 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=58.93;MQ0=0;OQ=2210.05;QD=36.23;SB=-988.23 GT:AD:DP:GL:GQ 1/1:0,61:58:-224.62,-17.49,-0.03:99
-chr1 3436977 rs56103034 G C 151.47 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=60.00;MQ0=0;OQ=361.61;QD=12.91;SB=-169.18 GT:AD:DP:GL:GQ 0/1:15,13:27:-47.59,-8.14,-66.07:99
-chr1 3437069 . A C 13.05 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=2;HaplotypeScore=6.13;MQ=58.68;MQ0=0;QD=0.25;SB=74.24 GT:AD:DP:GL:GQ 0/1:37,15:37:-15.71,-11.15,-109.98:45.67
-chr1 3438669 rs61762171 G A 197.19 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.08;MQ=59.50;MQ0=0;OQ=831.35;QD=18.07;SB=-356.42 GT:AD:DP:GL:GQ 0/1:21,25:43:-99.38,-12.97,-55.25:99
-chr1 3438727 rs55762450 C A 163.97 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.39;MQ=59.54;MQ0=0;OQ=660.37;QD=13.21;SB=-236.28 GT:AD:DP:GL:GQ 0/1:20,30:45:-82.89,-13.57,-69.96:99
-chr1 3440115 rs2493313 T C 297.46 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=56.74;MQ0=0;OQ=1008.77;QD=34.79;SB=-528.20 GT:AD:DP:GL:GQ 1/1:0,29:29:-104.47,-8.74,-0.01:87.25
-chr1 3444452 rs9970944 G T 111.06 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.08;MQ=58.11;MQ0=0;OQ=1564.30;QD=32.59;SB=-784.47 GT:AD:DP:GL:GQ 1/1:1,47:45:-160.04,-13.56,-0.02:99
-chr1 3445102 rs12049456 G A 432 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.32;MQ0=0;OQ=1256.64;QD=36.96;SB=-508.18 GT:AD:DP:GL:GQ 1/1:0,34:33:-129.26,-9.95,-0.01:99
-chr1 3445120 . C G 39.08 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=55.59;MQ0=2;QD=0.85;SB=59.22 GT:AD:DP:GL:GQ 0/1:40,6:41:-19.55,-12.36,-150.78:71.92
-chr1 3448511 rs2821064 A T 100.60 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.44;MQ=58.81;MQ0=0;OQ=526.36;QD=13.50;SB=-238.77 GT:AD:DP:GL:GQ 0/1:20,19:39:-67.67,-11.75,-70.26:99
-chr1 3448541 rs2794331 G C 111.94 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=58.71;MQ0=0;OQ=556.37;QD=15.45;SB=-245.10 GT:AD:DP:GL:GQ 0/1:19,17:32:-68.58,-9.65,-62.08:99
-chr1 3448992 rs12065874 C T 177.16 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.46;MQ0=0;OQ=793.34;QD=18.45;SB=-374.15 GT:AD:DP:GL:GQ 0/1:19,24:39:-94.38,-11.76,-47.24:99
-chr1 3452764 rs10797401 T C 166.54 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=59.52;MQ0=0;OQ=647.76;QD=16.61;SB=-319.33 GT:AD:DP:GL:GQ 0/1:16,23:38:-79.51,-11.45,-58.06:99
-chr1 3453088 rs28479691 G A 97.36 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=55.43;MQ0=1;OQ=249.39;QD=11.34;SB=-131.56 GT:AD:DP:GL:GQ 0/1:11,11:18:-33.65,-5.43,-32.56:99
-chr1 3453209 rs13374309 C G 5.21 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=3.14;MQ=57.20;MQ0=0;OQ=292.98;QD=15.42;SB=-154.58 GT:AD:DP:GL:GQ 0/1:9,10:17:-37.71,-5.13,-33.06:99
-chr1 3455556 rs7539836 A G 113.09 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=359.37;QD=13.82;SB=-189.55 GT:AD:DP:GL:GQ 0/1:12,14:25:-46.76,-7.53,-43.20:99
-chr1 3458010 rs7533321 G A 155.67 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.46;MQ0=0;OQ=810.48;QD=18.85;SB=-428.48 GT:AD:DP:GL:GQ 0/1:17,25:39:-96.09,-11.75,-47.40:99
-chr1 3458818 rs6413780 A C 146.27 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.53;MQ0=0;OQ=401.98;QD=8.20;SB=-115.74 GT:AD:DP:GL:GQ 0/1:29,20:47:-57.64,-14.16,-107.92:99
-chr1 3458949 rs7355038 G A 151.46 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=59.19;MQ0=0;OQ=998.13;QD=19.19;SB=-471.50 GT:AD:DP:GL:GQ 0/1:22,30:52:-118.77,-15.67,-71.64:99
-chr1 3460223 rs10909965 T G 23.16 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=1;HaplotypeScore=2.59;MQ=58.78;MQ0=0;OQ=201.44;QD=10.60;SB=-54.94 GT:AD:DP:GL:GQ 0/1:10,9:17:-28.55,-5.12,-30.64:99
-chr1 3460241 rs12078542 T C 57.79 PASS AC=1;AF=0.50;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.39;MQ0=0;OQ=207.08;QD=7.14;SB=-117.62 GT:AD:DP:GL:GQ 0/1:17,12:22:-30.63,-6.64,-46.05:99
-chr1 3460729 rs1557089 T G 340.61 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.05;MQ0=0;OQ=311.87;QD=12.99;SB=-162.75 GT:AD:DP:GL:GQ 0/1:12,12:20:-40.49,-6.02,-30.26:99
-chr1 3462253 rs7516641 A G 481.67 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=514.29;QD=11.96;SB=-180.52 GT:AD:DP:GL:GQ 0/1:23,20:43:-67.67,-12.96,-92.19:99
-chr1 3466443 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=45;Dels=0.02;HRun=17;HaplotypeScore=21.57;MQ=53.85;MQ0=0;OQ=205.19;QD=4.56;SB=-78.83 GT:AD:DP:GL:GQ 0/1:24,20:32:-33.15,-9.34,-78.96:99
-chr1 3466697 . C G 64.69 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=58.96;MQ0=0;OQ=671.74;QD=12.44;SB=-259.12 GT:AD:DP:GL:GQ 0/1:31,23:50:-85.55,-15.09,-116.59:99
-chr1 3474782 rs56410789 G A 184.63 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=59.61;MQ0=0;OQ=703.19;QD=14.65;SB=-349.63 GT:AD:DP:GL:GQ 0/1:25,22:45:-89.80,-16.20,-75.19:99
-chr1 3480873 . T C 0.25 PASS AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=3;HaplotypeScore=1.82;MQ=59.06;MQ0=0;OQ=234.33;QD=11.72;SB=-33.65 GT:AD:DP:GL:GQ 0/1:10,10:19:-32.44,-5.72,-41.44:99
-chr1 3480967 rs4431782 T C 9.06 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=2.79;MQ=59.14;MQ0=0;OQ=141.27;QD=5.23;SB=-37.66 GT:AD:DP:GL:GQ 0/1:16,11:24:-24.65,-7.24,-64.66:99
-chr1 3482056 rs2821057 A G 50.28 Indel AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.04;HRun=0;HaplotypeScore=40.06;MQ=43.76;MQ0=3;QD=0.93;SB=-23.61 GT:AD:DP:GL:GQ 0/1:44,8:48:-22.18,-13.87,-154.71:83.12
-chr1 3483124 rs2821056 A T 583.97 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.89;MQ0=0;OQ=1839.69;QD=37.54;SB=-868.96 GT:AD:DP:GL:GQ 1/1:0,49:49:-187.56,-14.76,-0.01:99
-chr1 3483560 rs2821055 T C 111.86 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=57.13;MQ0=0;OQ=1375.27;QD=31.98;SB=-687.18 GT:AD:DP:GL:GQ 1/1:0,43:41:-141.13,-12.35,-0.02:99
-chr1 3483710 rs2821054 G T 266.86 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.07;MQ0=0;OQ=1733.58;QD=34.67;SB=-747.08 GT:AD:DP:GL:GQ 1/1:0,50:50:-176.97,-15.07,-0.02:99
-chr1 3484389 rs2794348 A G 1.13 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=6.39;MQ=58.05;MQ0=0;OQ=1127.20;QD=31.31;SB=-545.88 GT:AD:DP:GL:GQ 1/1:0,36:34:-116.33,-10.25,-0.02:99
-chr1 3484478 rs2794347 G C 132.33 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.47;MQ0=0;OQ=1529.91;QD=34.77;SB=-715.91 GT:AD:DP:GL:GQ 1/1:0,44:40:-156.62,-12.09,-0.05:99
-chr1 3484580 rs2794346 G A 64.20 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=980.89;QD=28.85;SB=-342.41 GT:AD:DP:GL:GQ 1/1:1,32:27:-101.70,-8.14,-0.02:81.23
-chr1 3485237 rs2794344 G A 227.50 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=58.20;MQ0=0;OQ=1135.92;QD=18.03;SB=-434.44 GT:AD:DP:GL:GQ 0/1:26,37:58:-134.36,-17.49,-77.46:99
-chr1 3485276 rs2794343 G T 262.44 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=58.14;MQ0=0;OQ=635.86;QD=12.00;SB=-319.27 GT:AD:DP:GL:GQ 0/1:28,25:50:-81.94,-15.07,-81.25:99
-chr1 3485297 rs2794342 T C 164.76 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.19;MQ=55.76;MQ0=0;OQ=873.19;QD=16.17;SB=-382.03 GT:AD:DP:GL:GQ 0/1:20,34:51:-105.98,-15.38,-70.34:99
-chr1 3485317 . C T 0.61 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=55.51;MQ0=0;OQ=217.69;QD=4.03;SB=-62.86 GT:AD:DP:GL:GQ 0/1:42,11:46:-38.92,-13.87,-116.02:99
-chr1 3485320 . C T 0.57 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=55.81;MQ0=0;OQ=186.10;QD=3.58;SB=-62.80 GT:AD:DP:GL:GQ 0/1:41,10:44:-35.15,-13.26,-125.21:99
-chr1 3485329 rs56044258 C G 8.19 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=4.19;MQ=55.35;MQ0=0;OQ=1813.27;QD=38.58;SB=-922.42 GT:AD:DP:GL:GQ 1/1:0,47:43:-184.93,-12.96,-0.02:99
-chr1 3485401 rs2821053 T C 608.29 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.09;MQ0=0;OQ=2115.06;QD=34.11;SB=-1060.08 GT:AD:DP:GL:GQ 1/1:0,62:60:-215.11,-18.07,-0.02:99
-chr1 3485841 rs2794341 T C 133.27 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=59.57;MQ0=0;OQ=1280.08;QD=29.77;SB=-579.98 GT:AD:DP:GL:GQ 1/1:0,43:41:-131.63,-12.37,-0.04:99
-chr1 3485914 rs2821052 G C 139.61 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=59.60;MQ0=0;OQ=1918.65;QD=40.82;SB=-901.42 GT:AD:DP:GL:GQ 1/1:0,47:46:-195.47,-13.86,-0.02:99
-chr1 3486188 rs2821051 T C 180.06 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.51;MQ0=0;OQ=1502.08;QD=31.96;SB=-651.24 GT:AD:DP:GL:GQ 1/1:0,47:44:-153.81,-13.26,-0.02:99
-chr1 3486339 rs2794340 T C 195.59 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=747.54;QD=27.69;SB=-185.41 GT:AD:DP:GL:GQ 1/1:0,27:25:-78.37,-7.54,-0.03:75.17
-chr1 3486805 rs2794339 G A 3.01 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=790.02;QD=34.35;SB=-39.54 GT:AD:DP:GL:GQ 1/1:0,23:21:-82.60,-6.33,-0.01:63.20
-chr1 3486898 . C G 23.94 LowQual AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=3.33;MQ=60.00;MQ0=0;QD=2.18;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,7:5:-7.19,-1.52,-10.35:56.76
-chr1 3486969 rs2821050 A G 170.61 PASS AC=2;AF=1.00;AN=2;DB;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.66;MQ0=0;OQ=230.85;QD=23.09;SB=-101.03 GT:AD:DP:GL:GQ 1/1:0,10:9:-26.68,-2.72,-0.01:27.04
-chr1 3487085 rs2821049 G A 44.18 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.41;MQ0=1;OQ=1103.43;QD=35.59;SB=-441.32 GT:AD:DP:GL:GQ 1/1:0,31:29:-113.94,-8.74,-0.01:87.28
-chr1 3487785 rs2821048 T C 3.27 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=59.07;MQ0=0;OQ=795.96;QD=29.48;SB=-323.61 GT:AD:DP:GL:GQ 1/1:0,26:24:-83.19,-7.23,-0.01:72.20
-chr1 3488346 rs2821047 A C 41.05 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.50;MQ0=0;OQ=1833.45;QD=33.34;SB=-923.21 GT:AD:DP:GL:GQ 1/1:0,55:53:-186.95,-15.96,-0.02:99
-chr1 3488543 rs2794338 G A 5.07 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=2.25;MQ=59.38;MQ0=0;OQ=1108.21;QD=36.94;SB=-425.07 GT:AD:DP:GL:GQ 1/1:0,30:29:-114.42,-8.74,-0.01:87.27
-chr1 3488600 rs2821046 T C 153.98 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=59.16;MQ0=0;OQ=1640.68;QD=29.83;SB=-825.95 GT:AD:DP:GL:GQ 1/1:0,55:53:-167.70,-15.99,-0.05:99
-chr1 3488885 rs2794337 T G 92.94 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.67;MQ0=0;OQ=1036.65;QD=29.62;SB=-469.86 GT:AD:DP:GL:GQ 1/1:0,35:34:-107.28,-10.25,-0.03:99
-chr1 3488911 rs2794336 C A 491.72 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1159.72;QD=31.34;SB=-543.79 GT:AD:DP:GL:GQ 1/1:0,37:35:-119.58,-10.55,-0.02:99
-chr1 3489106 rs2821045 A G 0.45 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=15.70;MQ=58.09;MQ0=0;OQ=1342.02;QD=27.39;SB=-607.24 GT:AD:DP:GL:GQ 1/1:1,48:44:-137.83,-13.27,-0.05:99
-chr1 3489389 rs2794335 C G 104.49 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.91;MQ0=0;OQ=2044.98;QD=41.73;SB=-1038.63 GT:AD:DP:GL:GQ 1/1:0,49:48:-208.10,-14.46,-0.02:99
-chr1 3489541 rs2821044 A G 154.02 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=51.93;MQ0=0;OQ=1856.46;QD=32.01;SB=-939.38 GT:AD:DP:GL:GQ 1/1:0,58:53:-189.25,-15.96,-0.02:99
-chr1 3489730 . G A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=5.70;MQ=38.46;MQ0=13;OQ=219.88;QD=2.71;SB=-20.96 GT:AD:DP:GL:GQ 0/1:65,15:58:-42.77,-17.50,-145.53:99
-chr1 3489856 rs61762194 A G 22.79 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=13.90;MQ=6.46;MQ0=57;QD=0.35;SB=-34.94 GT:AD:DP:GL:GQ 0/1:19,46:3:-6.46,-0.90,-4.17:32.64
-chr1 3490108 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=122;Dels=0.00;HRun=0;HaplotypeScore=22.57;MQ=11.21;MQ0=79;OQ=52.09;QD=0.43;SB=2.03 GT:AD:DP:GL:GQ 0/1:64,55:12:-12.11,-3.62,-27.46:84.92
-chr1 3490124 . G C 37.51 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=28.89;MQ=9.24;MQ0=69;QD=0.40;SB=-36.43 GT:AD:DP:GL:GQ 0/1:52,37:3:-7.94,-0.91,-4.59:36.89
-chr1 3490204 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=9.07;MQ=18.33;MQ0=40;OQ=221.10;QD=2.91;SB=-48.02 GT:AD:DP:GL:GQ 0/1:38,34:16:-30.22,-4.83,-23.80:99
-chr1 3490220 . G C 14.47 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=1;HaplotypeScore=18.26;MQ=21.29;MQ0=44;QD=0.14;SB=5.04 GT:AD:DP:GL:GQ 0/1:89,13:27:-12.87,-8.16,-91.89:47.15
-chr1 3490238 . G C 29.48 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=1;HaplotypeScore=19.99;MQ=24.83;MQ0=54;QD=0.24;SB=65.23 GT:AD:DP:GL:GQ 0/1:92,32:39:-18.02,-11.79,-132.68:62.32
-chr1 3490274 rs61762197 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=195;Dels=0.00;HRun=0;HaplotypeScore=31.55;MQ=26.52;MQ0=97;OQ=140.78;QD=0.72;SB=53.20 GT:AD:DP:GL:GQ 0/1:172,21:60:-35.47,-18.11,-209.36:99
-chr1 3490294 rs61762198 G A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=144;Dels=0.00;HRun=0;HaplotypeScore=18.88;MQ=30.38;MQ0=61;OQ=410.69;QD=2.85;SB=-6.44 GT:AD:DP:GL:GQ 0/1:110,32:48:-58.84,-14.49,-102.11:99
-chr1 3490309 rs61762199 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=126;Dels=0.00;HRun=0;HaplotypeScore=43.37;MQ=33.08;MQ0=48;OQ=683.06;QD=5.42;SB=-30.63 GT:AD:DP:GL:GQ 0/1:101,25:47:-85.76,-14.17,-79.46:99
-chr1 3490312 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=46.24;MQ=34.26;MQ0=40;OQ=200.77;QD=1.72;SB=-32.50 GT:AD:DP:GL:GQ 0/1:85,31:40:-35.43,-12.07,-95.25:99
-chr1 3490435 rs2995009 G A 597.77 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.35;MQ0=0;OQ=1467.09;QD=38.61;SB=-711.36 GT:AD:DP:GL:GQ 1/1:0,38:38:-150.31,-11.45,-0.01:99
-chr1 3491040 rs2995008 T C 284.33 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1828.19;QD=32.07;SB=-897.29 GT:AD:DP:GL:GQ 1/1:0,57:55:-186.44,-16.58,-0.04:99
-chr1 3492147 . G A 23.72 PASS AC=2;AF=1.00;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=55.26;MQ0=1;OQ=1679.66;QD=32.93;SB=-585.96 GT:AD:DP:GL:GQ 1/1:1,50:45:-171.57,-13.56,-0.02:99
-chr1 3492404 rs2487682 G A 109.67 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=55.97;MQ0=0;OQ=1664.54;QD=34.68;SB=-566.34 GT:AD:DP:GL:GQ 1/1:2,46:43:-170.05,-12.95,-0.01:99
-chr1 3493214 rs10909977 C T 290.65 PASS AC=2;AF=1.00;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.46;MQ0=0;OQ=982.44;QD=37.79;SB=-341.35 GT:AD:DP:GL:GQ 1/1:0,26:26:-101.84,-7.83,-0.01:78.25
-chr1 3493427 rs12133810 G A 0.43 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=6.10;MQ=60.00;MQ0=0;OQ=1731.58;QD=36.07;SB=-586.35 GT:AD:DP:GL:GQ 1/1:0,47:45:-176.76,-13.56,-0.02:99
-chr1 3493933 rs12139206 T C 718.86 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.76;MQ0=0;OQ=2133.52;QD=33.87;SB=-1000.69 GT:AD:DP:GL:GQ 1/1:0,63:61:-216.96,-18.38,-0.03:99
-chr1 3494278 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=29.95;MQ=39.18;MQ0=0;OQ=57.06;QD=1.00;SB=32.12 GT:AD:DP:GL:GQ 0/1:51,6:50:-24.05,-15.06,-154.00:89.90
-chr1 3494280 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=31.95;MQ=39.34;MQ0=0;OQ=98.32;QD=1.76;SB=29.10 GT:AD:DP:GL:GQ 0/1:46,10:49:-27.88,-14.76,-138.47:99
-chr1 3494307 . T G 201.76 SnpCluster AC=1;AF=0.50;AN=2;DP=58;Dels=0.10;HRun=2;HaplotypeScore=112.88;MQ=32.38;MQ0=0;QD=3.48;SB=-117.62 GT:AD:DP:GL:GQ 0/1:34,18:28:-31.59,-8.13,-64.60:99
-chr1 3494310 rs61762200 C A 192.29 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=121.85;MQ=30.79;MQ0=0;QD=3.43;SB=-60.75 GT:AD:DP:GL:GQ 0/1:36,18:28:-30.95,-8.43,-66.22:99
-chr1 3494317 . G T 32.47 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=81.33;MQ=29.05;MQ0=0;QD=0.60;SB=-10.00 GT:AD:DP:GL:GQ 0/1:41,11:25:-14.06,-7.53,-79.10:65.31
-chr1 3494320 . G A 676.99 SnpCluster AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=53.82;MQ=29.06;MQ0=0;QD=13.02;SB=-10.00 GT:AD:DP:GL:GQ 0/1:6,41:24:-78.21,-7.23,-14.28:70.50
-chr1 3494331 . C T 224.74 SnpCluster AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=74.35;MQ=28.87;MQ0=0;QD=4.68;SB=-10.00 GT:AD:DP:GL:GQ 0/1:29,19:11:-29.07,-3.31,-14.19:99
-chr1 3494338 . G A 223.95 SnpCluster AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=78.36;MQ=28.88;MQ0=0;QD=4.76;SB=-10.00 GT:AD:DP:GL:GQ 0/1:25,22:10:-28.69,-3.01,-9.91:68.95
-chr1 3494340 . G A 250.50 SnpCluster AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=74.35;MQ=28.88;MQ0=0;QD=5.33;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,38:10:-31.35,-3.01,-6.64:36.27
-chr1 3494344 . G A 85.25 SnpCluster AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=1;HaplotypeScore=68.88;MQ=28.67;MQ0=0;QD=1.85;SB=-10.00 GT:AD:DP:GL:GQ 0/1:41,5:14:-16.03,-4.22,-34.38:99
-chr1 3494347 . A T 143.02 SnpCluster AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=0;HaplotypeScore=69.92;MQ=28.59;MQ0=0;QD=3.87;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,19:7:-19.69,-2.11,-6.98:48.71
-chr1 3494357 . G T 24.90 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=73.10;MQ=28.56;MQ0=0;QD=0.73;SB=-10.00 GT:AD:DP:GL:GQ 0/1:18,15:5:-7.28,-1.51,-10.87:57.73
-chr1 3494360 . G A 23.23 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=81.86;MQ=28.53;MQ0=0;QD=0.73;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,11:6:-7.41,-1.81,-14.17:56.05
-chr1 3494364 . G A 65.76 SnpCluster AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=67.04;MQ=28.12;MQ0=1;QD=1.93;SB=-10.00 GT:AD:DP:GL:GQ 0/1:29,5:7:-11.97,-2.11,-13.57:98.60
-chr1 3494367 . G T 116.01 SnpCluster AC=1;AF=0.50;AN=2;DP=34;Dels=0.03;HRun=0;HaplotypeScore=76.86;MQ=28.12;MQ0=1;QD=3.41;SB=-10.00 GT:AD:DP:GL:GQ 0/1:14,19:9:-17.59,-2.71,-15.13:99
-chr1 3494370 . G C 77.61 SnpCluster AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=1;HaplotypeScore=62.98;MQ=28.25;MQ0=1;QD=2.87;SB=-10.00 GT:AD:DP:GL:GQ 0/1:8,7:9:-20.69,-9.65,-24.68:99
-chr1 3494377 . G T 26.91 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=64.80;MQ=28.23;MQ0=1;QD=1.03;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,4:4:-7.18,-1.20,-7.71:59.73
-chr1 3494378 . G A 98.30 SnpCluster AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=59.24;MQ=28.44;MQ0=1;QD=3.78;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,11:7:-15.22,-2.11,-10.61:84.98
-chr1 3494380 . G A 43.51 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=65.22;MQ=28.44;MQ0=1;QD=1.67;SB=-10.00 GT:AD:DP:GL:GQ 0/1:8,15:4:-12.40,-4.77,-6.87:20.98
-chr1 3494384 . G A 26.23 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=1;HaplotypeScore=51.99;MQ=28.44;MQ0=1;QD=1.01;SB=-10.00 GT:AD:DP:GL:GQ 0/1:20,6:7:-8.02,-2.11,-15.94:59.06
-chr1 3494390 . G A 130.87 SnpCluster AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=39.84;MQ=28.27;MQ0=1;QD=6.54;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,12:6:-18.18,-1.81,-3.67:18.63
-chr1 3494414 . G A 19.25 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=1;HaplotypeScore=22.06;MQ=28.20;MQ0=1;QD=1.13;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,2:8:-7.61,-2.41,-20.11:52.04
-chr1 3494416 . G C 113.75 SnpCluster AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=18.24;MQ=27.40;MQ0=1;QD=6.32;SB=-10.00 GT:AD:DP:GL:GQ 0/1:14,4:8:-17.07,-2.41,-16.09:99
-chr1 3494417 . A T 24.41 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=25.18;MQ=27.40;MQ0=1;QD=1.36;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,5:8:-14.34,-8.61,-21.17:57.23
-chr1 3494420 . C A 17.09 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=28.79;MQ=27.40;MQ0=1;QD=0.95;SB=-10.00 GT:AD:DP:GL:GQ 0/1:7,11:6:-6.79,-1.81,-13.20:49.84
-chr1 3494428 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=21.58;MQ=27.57;MQ0=1;OQ=101.33;QD=5.07;SB=-10.00 GT:AD:DP:GL:GQ 0/1:14,6:9:-16.13,-2.71,-15.44:99
-chr1 3494440 . A G 20.51 LowQual AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=4;HaplotypeScore=16.99;MQ=27.20;MQ0=1;QD=1.28;SB=-10.00 GT:AD:DP:GL:GQ 0/1:14,2:6:-7.14,-1.81,-14.72:53.31
-chr1 3494450 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=19.98;MQ=27.07;MQ0=1;OQ=136.86;QD=9.12;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,11:7:-19.08,-2.11,-6.94:48.30
-chr1 3494456 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=17;Dels=0.12;HRun=1;HaplotypeScore=13.10;MQ=27.31;MQ0=1;OQ=95.30;QD=5.61;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,5:11:-16.13,-3.31,-22.08:99
-chr1 3494463 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=15.99;MQ=27.75;MQ0=0;OQ=76.78;QD=6.98;SB=-10.00 GT:AD:DP:GL:GQ 0/1:8,3:5:-12.47,-1.51,-7.14:56.32
-chr1 3494470 . G A 37.25 LowQual AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=9.99;MQ=29.00;MQ0=0;QD=4.66;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,6:3:-7.91,-0.90,-3.57:26.65
-chr1 3494476 . C G 10.99 LowQual AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=6.99;MQ=29.00;MQ0=0;QD=1.83;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,3:1:-4.35,-0.30,-0.00:1.76
-chr1 3494500 . C A 20.04 LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=24.21;MQ=29.00;MQ0=0;QD=1.43;SB=-10.00 GT:AD:DP:GL:GQ 0/1:6,8:6:-7.09,-1.81,-14.10:52.83
-chr1 3494506 . G A 17.29 LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.05;HRun=1;HaplotypeScore=32.64;MQ=29.00;MQ0=0;QD=0.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:14,4:10:-8.02,-3.01,-25.65:50.04
-chr1 3494513 . G A 25.23 LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=41.45;MQ=31.40;MQ0=0;QD=1.33;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,4:6:-7.61,-1.81,-13.27:58.06
-chr1 3494520 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=37.55;MQ=33.42;MQ0=0;OQ=64.77;QD=3.24;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,13:7:-11.87,-2.11,-12.97:97.60
-chr1 3494524 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=1;HaplotypeScore=27.25;MQ=33.22;MQ0=0;OQ=65.77;QD=3.13;SB=-10.00 GT:AD:DP:GL:GQ 0/1:18,3:5:-11.37,-1.51,-6.04:45.31
-chr1 3494544 . G A 102.31 SnpCluster AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=1;HaplotypeScore=60.62;MQ=32.58;MQ0=0;QD=4.09;SB=-10.00 GT:AD:DP:GL:GQ 0/1:21,4:9:-16.23,-2.71,-16.04:99
-chr1 3494547 . G T 87.64 SnpCluster AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=65.61;MQ=32.58;MQ0=0;QD=3.51;SB=-10.00 GT:AD:DP:GL:GQ 0/1:19,5:8:-14.46,-2.41,-14.43:99
-chr1 3494550 . A C 79.94 SnpCluster AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=1;HaplotypeScore=55.04;MQ=32.72;MQ0=0;QD=3.33;SB=-10.00 GT:AD:DP:GL:GQ 0/1:14,6:8:-16.58,-5.30,-13.73:84.35
-chr1 3494557 . G T 60.29 SnpCluster AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=39.81;MQ=31.18;MQ0=0;QD=2.87;SB=-10.00 GT:AD:DP:GL:GQ 0/1:11,8:4:-10.52,-1.20,-3.86:26.53
-chr1 3494560 . G A 91.28 SnpCluster AC=2;AF=1.00;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=38.65;MQ=31.18;MQ0=0;QD=4.35;SB=-10.00 GT:AD:DP:GL:GQ 1/1:7,11:4:-16.06,-4.57,-3.40:11.70
-chr1 3494564 . G A 29.24 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=1;HaplotypeScore=32.50;MQ=31.29;MQ0=0;QD=1.46;SB=-10.00 GT:AD:DP:GL:GQ 0/1:18,2:6:-8.02,-1.81,-12.47:62.07
-chr1 3494574 . A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=26.98;MQ=29.00;MQ0=0;OQ=69.17;QD=4.94;SB=-10.00 GT:AD:DP:GL:GQ 1/1:6,8:3:-10.41,-0.90,-0.00:9.03
-chr1 3494590 . G A 142.91 SnpCluster AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=22.40;MQ=29.00;MQ0=0;QD=9.53;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,8:6:-19.38,-1.81,-3.57:17.63
-chr1 3494597 . G T 106.99 SnpCluster AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=25.38;MQ=29.00;MQ0=0;QD=7.64;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,5:11:-17.30,-3.31,-21.74:99
-chr1 3494600 . G A 30.23 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=29.00;MQ0=0;QD=3.02;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,6:5:-7.81,-1.51,-10.71:63.06
-chr1 3494624 . A G 3.02 PASS AC=1;AF=0.50;AN=2;DP=6;Dels=0.00;HRun=1;HaplotypeScore=2.14;MQ=23.68;MQ0=1;OQ=61.17;QD=10.20;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,5:4:-10.61,-1.20,-4.06:28.52
-chr1 3494941 rs3122612 T C 27.60 PASS AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.13;MQ0=0;OQ=190.96;QD=21.22;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,9:7:-22.68,-2.11,-0.00:21.05
-chr1 3496357 rs2794320 A G 629.67 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.59;MQ0=0;OQ=2197.16;QD=34.88;SB=-1063.87 GT:AD:DP:GL:GQ 1/1:0,63:62:-223.32,-18.67,-0.02:99
-chr1 3497672 rs12138013 G A 514.21 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1894.53;QD=36.43;SB=-916.70 GT:AD:DP:GL:GQ 1/1:0,52:50:-193.07,-15.07,-0.03:99
-chr1 3497721 rs4648527 G A 5.98 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=5.91;MQ=58.60;MQ0=0;OQ=1808.59;QD=36.17;SB=-904.68 GT:AD:DP:GL:GQ 1/1:0,50:47:-184.46,-14.16,-0.02:99
-chr1 3497811 rs4233026 A G 453.03 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=985.33;QD=29.86;SB=-500.18 GT:AD:DP:GL:GQ 1/1:0,33:33:-102.16,-9.96,-0.04:99
-chr1 3499530 rs10909980 C T 12.32 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.36;MQ0=0;OQ=831.01;QD=36.13;SB=-270.86 GT:AD:DP:GL:GQ 1/1:0,23:22:-86.69,-6.63,-0.01:66.21
-chr1 3501794 rs7513275 A G 98.91 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=60.00;MQ0=0;OQ=215.59;QD=10.78;SB=-81.80 GT:AD:DP:GL:GQ 0/1:7,13:17:-29.97,-5.13,-27.54:99
-chr1 3502201 rs2794327 C T 251.06 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=1770.81;QD=37.68;SB=-842.63 GT:AD:DP:GL:GQ 1/1:0,47:45:-180.68,-13.55,-0.01:99
-chr1 3502376 rs2821025 T C 189.36 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.06;MQ0=0;OQ=1399.30;QD=34.13;SB=-531.22 GT:AD:DP:GL:GQ 1/1:1,40:40:-143.53,-12.05,-0.02:99
-chr1 3502406 rs2821024 G A 10.93 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.84;MQ=59.12;MQ0=0;OQ=1381.75;QD=37.34;SB=-602.98 GT:AD:DP:GL:GQ 1/1:0,37:36:-141.77,-10.85,-0.01:99
-chr1 3502660 rs2821023 T C 164.14 PASS AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.31;MQ0=0;OQ=631.91;QD=27.47;SB=-134.71 GT:AD:DP:GL:GQ 1/1:0,23:22:-66.81,-6.64,-0.03:66.13
-chr1 3503040 rs3001104 T C 11.75 LowQual AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=53.43;MQ0=0;QD=0.90;SB=-7.00 GT:AD:DP:GL:GQ 0/1:11,2:9:-7.15,-2.72,-25.40:44.29
-chr1 3503107 rs6697282 T C 2.87 PASS AC=2;AF=1.00;AN=2;DB;DP=11;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.92;MQ0=0;OQ=303.24;QD=27.57;SB=-40.95 GT:AD:DP:GL:GQ 1/1:0,11:10:-33.91,-3.01,-0.00:30.08
-chr1 3503479 rs55936822 G A 66.02 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=385.29;QD=13.76;SB=-81.58 GT:AD:DP:GL:GQ 0/1:14,14:27:-49.96,-8.15,-41.31:99
-chr1 3504130 rs3001107 A T 92.54 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=60.00;MQ0=0;OQ=1158.27;QD=35.10;SB=-515.45 GT:AD:DP:GL:GQ 1/1:0,33:32:-119.42,-9.64,-0.01:96.30
-chr1 3504221 rs2995006 A G 438.56 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1363.50;QD=34.96;SB=-648.28 GT:AD:DP:GL:GQ 1/1:0,39:39:-139.95,-11.75,-0.02:99
-chr1 3504611 rs6701230 T C 61.10 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=1071.54;QD=26.79;SB=-482.12 GT:AD:DP:GL:GQ 1/1:0,40:34:-110.77,-10.26,-0.03:99
-chr1 3505152 . C G 6.95 PASS AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=54.64;MQ0=0;OQ=215.54;QD=15.40;SB=-56.93 GT:AD:DP:GL:GQ 1/1:2,12:6:-25.13,-1.81,-0.00:18.06
-chr1 3505256 rs2794328 C A 31.98 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.33;MQ0=0;OQ=824.44;QD=29.44;SB=-191.27 GT:AD:DP:GL:GQ 1/1:1,27:24:-86.04,-7.23,-0.01:72.19
-chr1 3505590 rs2821011 T C 3.95 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=58.95;MQ0=0;OQ=1307.30;QD=29.71;SB=-329.39 GT:AD:DP:GL:GQ 1/1:0,44:40:-134.34,-12.06,-0.03:99
-chr1 3506096 rs4648395 G A 428.92 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.73;MQ0=0;OQ=1105.43;QD=35.66;SB=-453.34 GT:AD:DP:GL:GQ 1/1:0,31:29:-114.14,-8.74,-0.01:87.28
-chr1 3506280 rs7552280 C T 597.55 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1498.57;QD=38.42;SB=-699.42 GT:AD:DP:GL:GQ 1/1:0,39:38:-153.45,-11.45,-0.01:99
-chr1 3506640 rs4018202 C T 591.66 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1796.97;QD=36.67;SB=-852.00 GT:AD:DP:GL:GQ 1/1:0,49:46:-183.30,-13.86,-0.02:99
-chr1 3507139 rs4648528 C T 150.35 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.89;MQ0=0;OQ=1470.55;QD=35.01;SB=-673.24 GT:AD:DP:GL:GQ 1/1:0,42:39:-150.66,-11.76,-0.02:99
-chr1 3507337 rs61373700 C G 106.29 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.76;MQ=57.26;MQ0=0;OQ=1716.27;QD=39.91;SB=-832.44 GT:AD:DP:GL:GQ 1/1:1,42:42:-175.24,-12.66,-0.02:99
-chr1 3507396 rs6693958 G A 63.42 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=58.29;MQ0=0;OQ=1559.78;QD=38.04;SB=-721.97 GT:AD:DP:GL:GQ 1/1:0,41:40:-159.58,-12.05,-0.01:99
-chr1 3507433 rs59013990 G C 40.65 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=59.41;MQ0=0;OQ=1114.70;QD=28.58;SB=-265.33 GT:AD:DP:GL:GQ 1/1:0,38:29:-115.08,-8.75,-0.02:87.28
-chr1 3508244 rs2821012 T C 433.71 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=981.44;QD=28.87;SB=-510.19 GT:AD:DP:GL:GQ 1/1:0,34:32:-101.76,-9.65,-0.03:96.21
-chr1 3508275 rs12410528 G A 77.57 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.32;MQ0=0;OQ=639.66;QD=18.81;SB=-281.31 GT:AD:DP:GL:GQ 0/1:14,20:31:-76.59,-9.34,-39.32:99
-chr1 3508279 rs12401505 C T 12.42 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.61;MQ=59.32;MQ0=0;OQ=621.28;QD=18.27;SB=-279.19 GT:AD:DP:GL:GQ 0/1:14,19:31:-74.75,-9.34,-43.77:99
-chr1 3508347 rs56770023 C T 305.75 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.60;MQ0=0;OQ=1098.04;QD=36.60;SB=-308.27 GT:AD:DP:GL:GQ 1/1:0,30:29:-113.40,-8.74,-0.01:87.27
-chr1 3508348 rs60957843 A G 332.32 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=996.70;QD=34.37;SB=-270.42 GT:AD:DP:GL:GQ 1/1:0,29:29:-103.27,-8.74,-0.01:87.25
-chr1 3508499 rs2821013 C A 29.08 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=4.32;MQ=59.05;MQ0=0;OQ=1719.86;QD=35.10;SB=-757.10 GT:AD:DP:GL:GQ 1/1:0,49:47:-175.58,-14.15,-0.01:99
-chr1 3508603 rs7514061 C T 105.49 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.33;MQ0=0;OQ=1426.84;QD=33.97;SB=-607.00 GT:AD:DP:GL:GQ 1/1:0,42:38:-146.28,-11.45,-0.02:99
-chr1 3508717 rs2821014 A C 0.35 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=3;HaplotypeScore=1.13;MQ=59.42;MQ0=0;OQ=907.74;QD=22.69;SB=-295.54 GT:AD:DP:GL:GQ 1/1:0,37:28:-94.37,-8.43,-0.01:84.22
-chr1 3508804 rs7521546 T C 5.12 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=2;HaplotypeScore=1.42;MQ=57.17;MQ0=0;OQ=713.23;QD=28.53;SB=-330.78 GT:AD:DP:GL:GQ 1/1:0,25:24:-74.93,-7.24,-0.02:72.16
-chr1 3509294 rs12024499 A G 18.02 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=58.37;MQ0=0;OQ=1073.16;QD=24.96;SB=-338.38 GT:AD:DP:GL:GQ 1/1:0,43:37:-110.95,-11.17,-0.05:99
-chr1 3509463 rs12025426 T C 57.07 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.00;MQ0=0;OQ=1068.56;QD=25.44;SB=-559.52 GT:AD:DP:GL:GQ 1/1:0,42:36:-110.49,-10.87,-0.05:99
-chr1 3509651 rs56328010 C G 123.58 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=1.54;MQ=58.84;MQ0=0;OQ=608.86;QD=15.22;SB=-231.35 GT:AD:DP:GL:GQ 0/1:21,19:38:-75.63,-11.46,-87.10:99
-chr1 3509894 rs10752738 A G 106.20 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=57.39;MQ0=0;OQ=1124.20;QD=31.23;SB=-480.45 GT:AD:DP:GL:GQ 1/1:0,36:33:-116.02,-9.94,-0.01:99
-chr1 3509987 rs2821015 T C 88.77 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.95;MQ0=0;OQ=1023.67;QD=31.99;SB=-513.41 GT:AD:DP:GL:GQ 1/1:0,31:32:-108.71,-12.22,-2.76:94.68
-chr1 3510191 rs2794356 C A 66.82 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=58.63;MQ0=0;OQ=1082.36;QD=31.83;SB=-352.40 GT:AD:DP:GL:GQ 1/1:0,34:33:-111.84,-9.95,-0.02:99
-chr1 3510399 rs2794355 C T 148.33 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.22;MQ0=0;OQ=1723.81;QD=37.47;SB=-800.07 GT:AD:DP:GL:GQ 1/1:0,46:45:-175.99,-13.56,-0.02:99
-chr1 3510532 rs2821016 A C 65.43 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.42;MQ0=0;OQ=868.96;QD=27.16;SB=-409.86 GT:AD:DP:GL:GQ 1/1:0,32:29:-90.51,-8.74,-0.03:87.13
-chr1 3511971 rs56140438 T C 2680.91 Indel AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.68;MQ0=0;QD=34.82;SB=-1364.21 GT:AD:DP:GL:GQ 1/1:0,77:76:-271.70,-22.89,-0.02:99
-chr1 3513689 rs2794354 T C 23.29 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=60.00;MQ0=0;OQ=1332.54;QD=30.29;SB=-459.40 GT:AD:DP:GL:GQ 1/1:0,44:41:-136.87,-12.36,-0.03:99
-chr1 3513757 rs2821018 T C 1.28 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=52.28;MQ0=0;OQ=1127.31;QD=32.21;SB=-555.88 GT:AD:DP:GL:GQ 1/1:0,35:33:-116.33,-9.94,-0.01:99
-chr1 3513776 rs2821019 A C 16.58 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=3.24;MQ=52.84;MQ0=0;OQ=1256.82;QD=30.65;SB=-634.67 GT:AD:DP:GL:GQ 1/1:0,41:37:-129.29,-11.15,-0.02:99
-chr1 3513778 rs2821020 G A 39.72 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=4.08;MQ=53.03;MQ0=0;OQ=1497.87;QD=35.66;SB=-772.68 GT:AD:DP:GL:GQ 1/1:0,42:39:-153.39,-11.75,-0.01:99
-chr1 3515181 rs2794353 G C 0.02 FDRtranche1.00to2.00 AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=5;HaplotypeScore=0.32;MQ=58.30;MQ0=0;OQ=1440.93;QD=40.03;SB=-600.98 GT:AD:DP:GL:GQ 1/1:0,36:34:-147.69,-10.24,-0.01:99
-chr1 3515467 rs36031771 G A 114.23 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1598.59;QD=36.33;SB=-811.32 GT:AD:DP:GL:GQ 1/1:0,44:42:-163.46,-12.66,-0.02:99
-chr1 3515500 rs34852522 G A 546.80 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1591.31;QD=37.01;SB=-737.47 GT:AD:DP:GL:GQ 1/1:1,42:41:-162.73,-12.35,-0.01:99
-chr1 3515696 rs10909986 G A 566.50 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=1907.24;QD=38.92;SB=-905.69 GT:AD:DP:GL:GQ 1/1:0,49:48:-194.32,-14.46,-0.01:99
-chr1 3516250 rs12121341 A G 86.74 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1093.76;QD=29.56;SB=-543.02 GT:AD:DP:GL:GQ 1/1:0,37:35:-112.99,-10.56,-0.03:99
-chr1 3518397 rs57902798 C A 88.78 PASS AC=2;AF=1.00;AN=2;DB;DP=25;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.13;MQ0=0;OQ=809.40;QD=32.38;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,25:24:-84.53,-7.23,-0.01:72.21
-chr1 3518534 rs1539126 G A 66.93 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=60.00;MQ0=0;OQ=1266.77;QD=36.19;SB=-476.64 GT:AD:DP:GL:GQ 1/1:0,34:33:-130.27,-9.94,-0.01:99
-chr1 3518701 rs2794326 T C 149.57 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.07;MQ0=0;OQ=1658.37;QD=33.17;SB=-790.25 GT:AD:DP:GL:GQ 1/1:0,50:49:-169.45,-14.76,-0.03:99
-chr1 3519249 rs10909987 G C 637.70 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1866.21;QD=40.57;SB=-960.72 GT:AD:DP:GL:GQ 1/1:0,45:44:-190.22,-13.26,-0.01:99
-chr1 3521082 rs4648396 C T 0.76 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=5;HaplotypeScore=1.32;MQ=59.36;MQ0=0;OQ=2285.23;QD=39.40;SB=-1043.37 GT:AD:DP:GL:GQ 1/1:0,58:57:-232.12,-17.17,-0.02:99
-chr1 3521301 rs4648397 T C 39.86 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=59.20;MQ0=0;OQ=1821.49;QD=31.41;SB=-869.61 GT:AD:DP:GL:GQ 1/1:0,58:57:-185.78,-17.19,-0.04:99
-chr1 3521455 rs4648398 C T 121.83 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.69;MQ=58.90;MQ0=0;OQ=2021.45;QD=34.26;SB=-686.93 GT:AD:DP:GL:GQ 1/1:0,59:53:-205.75,-15.97,-0.02:99
-chr1 3522563 rs6693192 A G 270.85 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=513.63;QD=9.88;SB=-275.26 GT:AD:DP:GL:GQ 0/1:30,22:52:-70.32,-15.67,-121.33:99
-chr1 3522569 rs6678958 G A 350.18 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=670.10;QD=13.14;SB=-343.79 GT:AD:DP:GL:GQ 0/1:29,22:51:-85.67,-15.38,-96.37:99
-chr1 3523424 rs55728961 C A 42.05 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=240.49;QD=10.46;SB=-10.00 GT:AD:DP:GL:GQ 0/1:14,9:23:-34.26,-6.93,-47.21:99
-chr1 3523484 rs56385042 T C 1.74 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=3;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=309.24;QD=11.89;SB=-6.99 GT:AD:DP:GL:GQ 0/1:12,14:26:-42.05,-7.84,-46.91:99
-chr1 3523847 rs10797404 T C 200.70 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=602.56;QD=14.01;SB=-77.79 GT:AD:DP:GL:GQ 0/1:21,22:42:-76.19,-12.65,-81.56:99
-chr1 3524383 rs4648532 A G 19.20 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=2;HaplotypeScore=2.34;MQ=56.80;MQ0=0;OQ=354.98;QD=11.45;SB=-152.32 GT:AD:DP:GL:GQ 0/1:16,15:28:-47.22,-8.44,-59.85:99
-chr1 3524566 rs10909988 A G 146.87 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=60.00;MQ0=0;OQ=306.09;QD=9.28;SB=-127.66 GT:AD:DP:GL:GQ 0/1:17,15:30:-42.93,-9.04,-69.22:99
-chr1 3524652 rs7522500 G C 8.99 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=6.16;MQ=57.13;MQ0=0;OQ=583.92;QD=14.24;SB=-274.31 GT:AD:DP:GL:GQ 0/1:21,20:34:-71.93,-10.26,-66.25:99
-chr1 3524668 rs7522507 G A 205.38 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.19;MQ=57.92;MQ0=0;OQ=639.63;QD=14.21;SB=-315.32 GT:AD:DP:GL:GQ 0/1:22,23:42:-79.91,-12.67,-66.98:99
-chr1 3525324 rs7538707 A G 23.09 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=845.73;QD=19.67;SB=-223.67 GT:AD:DP:GL:GQ 0/1:16,27:42:-100.51,-12.65,-58.85:99
-chr1 3526188 rs4648533 G A 210.95 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=59.62;MQ0=0;OQ=1070.40;QD=17.55;SB=-483.49 GT:AD:DP:GL:GQ 0/1:29,32:60:-128.41,-18.08,-91.39:99
-chr1 3526260 rs4648534 T C 399.13 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.82;MQ0=0;OQ=652.36;QD=10.19;SB=-312.36 GT:AD:DP:GL:GQ 0/1:38,26:63:-87.50,-18.98,-151.40:99
-chr1 3526320 rs4648535 C A 306.52 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=54.45;MQ0=1;OQ=780.07;QD=10.99;SB=-371.06 GT:AD:DP:GL:GQ 0/1:40,31:67:-101.47,-20.18,-141.37:99
-chr1 3526422 rs4648399 A G 309.90 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.19;MQ0=0;OQ=1278.95;QD=17.52;SB=-632.97 GT:AD:DP:GL:GQ 0/1:30,43:71:-152.57,-21.39,-116.57:99
-chr1 3527222 rs4648400 A G 9.46 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=7.73;MQ=57.63;MQ0=0;OQ=603.16;QD=10.40;SB=-310.07 GT:AD:DP:GL:GQ 0/1:32,26:56:-80.48,-16.88,-126.15:99
-chr1 3527718 rs4648401 A G 74.64 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=2;HaplotypeScore=1.41;MQ=56.19;MQ0=0;OQ=587.94;QD=13.67;SB=-299.61 GT:AD:DP:GL:GQ 0/1:18,25:41:-74.44,-12.36,-73.19:99
-chr1 3528340 rs4400556 A T 87.37 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.12;MQ0=0;OQ=994.97;QD=12.59;SB=-457.52 GT:AD:DP:GL:GQ 0/1:45,34:78:-126.28,-23.49,-166.80:99
-chr1 3528361 rs4364818 C T 460.83 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.38;MQ0=0;OQ=945.91;QD=13.14;SB=-450.44 GT:AD:DP:GL:GQ 0/1:42,30:72:-119.57,-21.70,-148.80:99
-chr1 3528695 rs6424087 G C 115.88 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=59.24;MQ0=0;OQ=909.93;QD=16.54;SB=-215.65 GT:AD:DP:GL:GQ 0/1:28,26:51:-109.65,-15.37,-108.54:99
-chr1 3528942 rs10909989 A G 309.85 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.12;MQ=59.00;MQ0=0;OQ=981.47;QD=13.82;SB=-369.60 GT:AD:DP:GL:GQ 0/1:36,35:70:-122.52,-21.09,-148.98:99
-chr1 3529341 rs10909990 A G 374.60 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=58.19;MQ0=0;OQ=916.10;QD=14.78;SB=-423.95 GT:AD:DP:GL:GQ 0/1:29,33:61:-113.27,-18.38,-114.82:99
-chr1 3529884 rs12757620 T G 87.41 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=2.04;MQ=59.45;MQ0=0;OQ=798.71;QD=11.75;SB=-349.72 GT:AD:DP:GL:GQ 0/1:29,39:61:-101.54,-18.38,-103.90:99
-chr1 3532172 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=4.52;MQ=58.17;MQ0=0;OQ=111.86;QD=2.19;SB=68.21 GT:AD:DP:GL:GQ 0/1:30,21:37:-25.62,-11.15,-96.21:99
-chr1 3535452 rs41315304 G A 150.86 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=58.25;MQ0=0;OQ=1069.05;QD=16.70;SB=-525.75 GT:AD:DP:GL:GQ 0/1:32,32:63:-129.18,-18.99,-99.29:99
-chr1 3536795 rs2821007 G A 330.18 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.23;MQ0=0;OQ=1047.23;QD=17.45;SB=-508.04 GT:AD:DP:GL:GQ 0/1:27,33:59:-125.78,-17.78,-94.59:99
-chr1 3537996 rs2760321 T C 53.51 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=58.11;MQ0=0;OQ=916.84;QD=24.78;SB=-335.79 GT:AD:DP:GL:GQ 1/1:0,37:31:-95.30,-9.36,-0.04:93.19
-chr1 3538692 rs2760320 G C 208.41 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.15;MQ0=0;OQ=946.49;QD=15.02;SB=-485.84 GT:AD:DP:GL:GQ 0/1:35,28:62:-116.63,-18.70,-140.41:99
-chr1 3540707 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=4;HaplotypeScore=6.24;MQ=58.05;MQ0=0;OQ=310.07;QD=8.61;SB=35.15 GT:AD:DP:GL:GQ 0/1:20,16:27:-42.43,-8.14,-74.49:99
-chr1 3542640 rs2821061 A G 174.99 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=519.03;QD=10.38;SB=-253.57 GT:AD:DP:GL:GQ 0/1:27,23:48:-69.65,-14.47,-105.26:99
-chr1 3543649 rs2821058 T C 578.48 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=1559.49;QD=29.42;SB=-616.98 GT:AD:DP:GL:GQ 1/1:0,53:50:-159.58,-15.08,-0.04:99
-chr1 3545730 rs2760318 T G 276.33 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=500.47;QD=13.53;SB=-245.40 GT:AD:DP:GL:GQ 0/1:16,21:34:-63.58,-10.25,-53.36:99
-chr1 3546316 rs2760317 T C 74.82 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=59.23;MQ0=0;OQ=365.54;QD=12.18;SB=-82.96 GT:AD:DP:GL:GQ 0/1:16,13:27:-47.97,-8.14,-53.97:99
-chr1 3546766 rs2821032 A G 15.17 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.71;MQ=58.45;MQ0=0;OQ=501.73;QD=10.45;SB=-117.63 GT:AD:DP:GL:GQ 0/1:27,21:44:-66.72,-13.26,-92.65:99
-chr1 3546958 . G C 33.36 PASS AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=52.99;MQ0=1;OQ=414.27;QD=15.34;SB=-224.70 GT:AD:DP:GL:GQ 0/1:11,16:20:-50.74,-6.03,-33.52:99
-chr1 3550868 rs12408890 C T 50.15 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=714.51;QD=21.65;SB=-10.00 GT:AD:DP:GL:GQ 0/1:11,22:31:-84.07,-9.34,-33.99:99
-chr1 3556431 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=2;HaplotypeScore=3.37;MQ=56.43;MQ0=0;OQ=64.63;QD=2.69;SB=26.11 GT:AD:DP:GL:GQ 0/1:20,4:17:-14.89,-5.14,-48.86:97.47
-chr1 3556566 rs2251098 G A 89.65 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=58.00;MQ0=0;OQ=575.61;QD=16.45;SB=-81.09 GT:AD:DP:GL:GQ 0/1:16,19:34:-71.09,-10.24,-59.62:99
-chr1 3560743 rs6697769 C T 108.18 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=2.77;MQ=59.11;MQ0=0;OQ=591.49;QD=14.08;SB=-304.84 GT:AD:DP:GL:GQ 0/1:21,21:39:-74.19,-11.76,-62.78:99
-chr1 3562592 rs10752739 A G 278.74 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.27;MQ=56.42;MQ0=0;OQ=804.83;QD=14.63;SB=-300.66 GT:AD:DP:GL:GQ 0/1:25,30:50:-98.83,-15.07,-88.55:99
-chr1 3562634 rs2181484 A G 237.08 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=59.09;MQ0=0;OQ=421.19;QD=9.16;SB=-138.88 GT:AD:DP:GL:GQ 0/1:25,21:41:-57.77,-12.36,-88.24:99
-chr1 3564279 rs9662739 T A 199.17 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=58.99;MQ0=0;OQ=516.88;QD=11.24;SB=-252.67 GT:AD:DP:GL:GQ 0/1:26,19:44:-68.23,-13.26,-93.50:99
-chr1 3564280 rs9662052 C A 196.24 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=58.99;MQ0=0;OQ=511.23;QD=11.11;SB=-234.91 GT:AD:DP:GL:GQ 0/1:27,19:44:-67.66,-13.26,-88.90:99
-chr1 3565050 rs2368543 T C 86.26 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=57.97;MQ0=0;OQ=928.11;QD=12.89;SB=-445.02 GT:AD:DP:GL:GQ 0/1:38,33:71:-117.49,-21.39,-151.96:99
-chr1 3565471 rs4648544 C T 133.93 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=3;HaplotypeScore=1.75;MQ=59.57;MQ0=0;OQ=791.33;QD=14.65;SB=-418.72 GT:AD:DP:GL:GQ 0/1:30,24:54:-98.68,-16.27,-109.24:99
-chr1 3565693 rs2208993 C G 156.42 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.21;MQ0=0;OQ=372.36;QD=11.28;SB=-74.78 GT:AD:DP:GL:GQ 0/1:21,12:29:-49.27,-8.75,-66.40:99
-chr1 3565739 rs2208992 C T 135.51 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=555.57;QD=16.34;SB=-208.21 GT:AD:DP:GL:GQ 0/1:17,17:34:-69.09,-10.25,-52.42:99
-chr1 3565920 rs2224718 T C 463.85 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.60;MQ0=0;OQ=705.17;QD=14.10;SB=-316.42 GT:AD:DP:GL:GQ 0/1:24,26:48:-88.27,-14.47,-84.73:99
-chr1 3567181 rs4648545 A G 559.92 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1256.11;QD=14.78;SB=-595.27 GT:AD:DP:GL:GQ 0/1:42,43:84:-154.20,-25.30,-171.31:99
-chr1 3568175 rs1885863 C T 33.02 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.95;MQ0=0;OQ=503.58;QD=17.98;SB=-117.62 GT:AD:DP:GL:GQ 0/1:13,15:28:-62.07,-8.43,-48.10:99
-chr1 3569688 rs1885861 A T 263.95 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=805.05;QD=14.38;SB=-228.60 GT:AD:DP:GL:GQ 0/1:30,26:55:-100.35,-16.57,-108.86:99
-chr1 3572104 rs6679556 T A 168.01 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.18;MQ0=0;OQ=534.82;QD=14.07;SB=-147.78 GT:AD:DP:GL:GQ 0/1:19,19:35:-67.31,-10.54,-60.93:99
-chr1 3572105 rs6679560 T G 310.70 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.18;MQ0=0;OQ=483.25;QD=12.72;SB=-122.88 GT:AD:DP:GL:GQ 0/1:19,19:35:-62.15,-10.55,-61.28:99
-chr1 3572847 rs1885860 T C 202.44 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=55.65;MQ0=0;OQ=1537.12;QD=28.47;SB=-796.29 GT:AD:DP:GL:GQ 1/1:0,54:50:-157.34,-15.08,-0.05:99
-chr1 3573552 rs1885859 G C 126.04 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=931.27;QD=19.81;SB=-452.38 GT:AD:DP:GL:GQ 0/1:21,26:45:-109.97,-13.56,-87.15:99
-chr1 3575442 rs3765694 G A 29.42 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=58.20;MQ0=0;OQ=1425.18;QD=36.54;SB=-559.30 GT:AD:DP:GL:GQ 1/1:0,39:37:-146.12,-11.15,-0.01:99
-chr1 3575611 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=3;HaplotypeScore=1.74;MQ=57.17;MQ0=0;OQ=76.89;QD=3.08;SB=14.07 GT:AD:DP:GL:GQ 0/1:14,11:13:-14.90,-3.93,-34.07:99
-chr1 3576288 rs1009345 G A 91.26 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.80;MQ0=0;OQ=1800.40;QD=39.14;SB=-661.66 GT:AD:DP:GL:GQ 1/1:0,46:46:-183.64,-13.86,-0.02:99
-chr1 3576560 rs6657895 G A 60.54 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=4.17;MQ=59.27;MQ0=0;OQ=1276.11;QD=33.58;SB=-586.96 GT:AD:DP:GL:GQ 1/1:1,37:35:-131.22,-10.55,-0.02:99
-chr1 3577406 rs3765697 C T 0.76 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.64;MQ=56.35;MQ0=0;OQ=1305.04;QD=33.46;SB=-441.58 GT:AD:DP:GL:GQ 1/1:0,39:35:-134.11,-10.55,-0.02:99
-chr1 3578761 rs3765700 G C 611.89 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=1985.98;QD=38.19;SB=-981.19 GT:AD:DP:GL:GQ 1/1:0,52:47:-202.21,-14.17,-0.02:99
-chr1 3578861 rs3765701 T A 287.36 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.60;MQ0=0;OQ=1646.63;QD=35.03;SB=-839.93 GT:AD:DP:GL:GQ 1/1:0,47:46:-168.27,-13.86,-0.02:99
-chr1 3579831 rs56255778 C A 326.05 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=59.60;MQ0=0;OQ=723.70;QD=12.70;SB=-343.37 GT:AD:DP:GL:GQ 0/1:30,27:51:-91.02,-15.37,-85.23:99
-chr1 3580285 rs6671482 G A 126.17 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=1575.76;QD=35.81;SB=-662.31 GT:AD:DP:GL:GQ 1/1:1,43:41:-161.17,-12.35,-0.01:99
-chr1 3587189 . C T 94.68 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.81;MQ0=0;OQ=415.33;QD=10.65;SB=-200.88 GT:AD:DP:GL:GQ 0/1:25,14:37:-55.97,-11.16,-70.24:99
-chr1 3594672 rs12562573 G A 160.10 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=59.53;MQ0=0;OQ=1829.37;QD=37.33;SB=-900.21 GT:AD:DP:GL:GQ 1/1:0,49:48:-186.54,-14.47,-0.02:99
-chr1 3594957 rs1885872 G A 83.22 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.18;MQ=59.07;MQ0=0;OQ=1704.97;QD=37.89;SB=-859.63 GT:AD:DP:GL:GQ 1/1:0,45:44:-174.10,-13.26,-0.02:99
-chr1 3595447 rs1885870 G C 563.54 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.58;MQ0=0;OQ=1514.49;QD=32.92;SB=-721.32 GT:AD:DP:GL:GQ 1/1:1,45:40:-155.08,-12.08,-0.04:99
-chr1 3596410 rs3765725 C T 84.63 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.54;MQ0=0;OQ=1239.60;QD=30.23;SB=-472.10 GT:AD:DP:GL:GQ 1/1:0,41:33:-127.56,-9.95,-0.02:99
-chr1 3596486 rs3765727 G A 208.84 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.62;MQ0=0;OQ=883.29;QD=18.03;SB=-364.54 GT:AD:DP:GL:GQ 0/1:22,27:47:-105.77,-14.16,-69.54:99
-chr1 3596710 rs3765728 G A 119.20 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.63;MQ0=0;OQ=1974.23;QD=38.71;SB=-814.08 GT:AD:DP:GL:GQ 1/1:0,51:50:-201.02,-15.06,-0.01:99
-chr1 3597380 rs3765730 G A 180.45 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.40;MQ0=0;OQ=530.99;QD=17.13;SB=-202.91 GT:AD:DP:GL:GQ 0/1:13,18:30:-65.42,-9.04,-41.88:99
-chr1 3597871 rs10732965 C T 75.34 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=57.81;MQ0=0;OQ=940.44;QD=33.59;SB=-454.61 GT:AD:DP:GL:GQ 1/1:0,27:25:-97.64,-7.53,-0.01:75.24
-chr1 3598087 rs34868661 A G 136.79 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.05;MQ0=0;OQ=432.49;QD=9.83;SB=-227.39 GT:AD:DP:GL:GQ 0/1:23,20:41:-58.89,-12.36,-89.12:99
-chr1 3598141 rs12126706 C T 141.99 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.13;MQ0=0;OQ=455.42;QD=13.01;SB=-109.06 GT:AD:DP:GL:GQ 0/1:19,16:32:-58.47,-9.65,-57.68:99
-chr1 3598905 rs1078687 G A 163.20 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.42;MQ0=0;OQ=1623.93;QD=33.83;SB=-687.95 GT:AD:DP:GL:GQ 1/1:0,47:43:-166.00,-12.96,-0.02:99
-chr1 3599033 rs879622 G A 151.46 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.44;MQ0=0;OQ=684.79;QD=16.70;SB=-307.82 GT:AD:DP:GL:GQ 0/1:19,22:37:-82.91,-11.15,-57.20:99
-chr1 3599257 rs879621 C A 346.01 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.17;MQ0=0;OQ=766.56;QD=13.69;SB=-343.33 GT:AD:DP:GL:GQ 0/1:29,27:55:-96.51,-16.57,-104.71:99
-chr1 3599783 rs2146660 A G 32.89 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=3.25;MQ=57.85;MQ0=0;OQ=1704.59;QD=34.79;SB=-814.09 GT:AD:DP:GL:GQ 1/1:0,49:49:-174.06,-14.76,-0.02:99
-chr1 3600146 . T C 37.22 LowQual AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=40.64;MQ0=2;QD=1.16;SB=-35.23 GT:AD:DP:GL:GQ 0/1:25,6:25:-14.54,-7.54,-78.76:70.05
-chr1 3600159 rs34095686 C A 8.52 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=38.58;MQ0=3;OQ=139.88;QD=4.37;SB=-64.01 GT:AD:DP:GL:GQ 0/1:23,9:27:-25.41,-8.14,-69.86:99
-chr1 3600191 . C G 0.30 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=5.79;MQ=36.62;MQ0=7;OQ=200.47;QD=5.90;SB=-62.84 GT:AD:DP:GL:GQ 0/1:21,13:22:-29.96,-6.63,-63.33:99
-chr1 3600194 rs34612797 A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=3;HaplotypeScore=5.12;MQ=34.72;MQ0=8;OQ=74.27;QD=2.12;SB=-16.93 GT:AD:DP:GL:GQ 0/1:24,11:20:-16.74,-6.03,-51.18:99
-chr1 3600242 . C T 27.02 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=31.01;MQ0=9;QD=0.82;SB=14.05 GT:AD:DP:GL:GQ 0/1:28,5:16:-10.81,-4.82,-45.03:59.85
-chr1 3600252 . G A 0.25 PASS AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=0;HaplotypeScore=5.21;MQ=33.15;MQ0=7;OQ=119.84;QD=4.99;SB=-7.00 GT:AD:DP:GL:GQ 0/1:19,5:10:-18.28,-3.02,-16.17:99
-chr1 3600264 rs61762234 A C 2.70 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=2;HaplotypeScore=2.09;MQ=34.74;MQ0=5;OQ=244.22;QD=13.57;SB=-10.00 GT:AD:DP:GL:GQ 1/1:4,14:8:-28.01,-2.41,-0.00:24.07
-chr1 3600309 . C A 44.81 LowQual AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=28.74;MQ0=1;QD=8.96;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:2:-7.89,-0.60,-0.00:6.02
-chr1 3600350 . C T 27.34 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=4.81;MQ=17.75;MQ0=4;QD=2.28;SB=-31.62 GT:AD:DP:GL:GQ 0/1:8,4:3:-6.92,-0.91,-3.40:24.94
-chr1 3600367 rs35012159 G C 33.49 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=10.16;MQ=14.95;MQ0=16;QD=0.93;SB=-40.88 GT:AD:DP:GL:GQ 0/1:29,7:6:-8.44,-1.81,-16.03:66.33
-chr1 3600427 . C T 85.30 DPFilter;HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=22.31;MQ=14.22;MQ0=48;QD=0.87;SB=11.05 GT:AD:DP:GL:GQ 0/1:88,10:24:-19.05,-7.24,-63.74:99
-chr1 3600428 . G A 105.38 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=94;Dels=0.00;HRun=0;HaplotypeScore=22.15;MQ=14.50;MQ0=46;QD=1.12;SB=-26.63 GT:AD:DP:GL:GQ 0/1:84,9:25:-21.36,-7.54,-60.74:99
-chr1 3600437 . G C 161.98 HARD_TO_VALIDATE;SnpCluster AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=2;HaplotypeScore=28.11;MQ=14.54;MQ0=44;QD=1.78;SB=-27.40 GT:AD:DP:GL:GQ 0/1:81,9:25:-27.02,-7.53,-80.42:99
-chr1 3600440 . A C 23.09 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=2;HaplotypeScore=12.59;MQ=14.51;MQ0=44;QD=0.25;SB=-17.83 GT:AD:DP:GL:GQ 0/1:72,19:25:-13.12,-7.53,-77.67:55.91
-chr1 3600470 . C T 26.44 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=13.21;MQ=11.80;MQ0=28;QD=0.61;SB=2.03 GT:AD:DP:GL:GQ 0/1:41,2:8:-8.34,-2.41,-20.77:59.27
-chr1 3600475 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=2;HaplotypeScore=2.58;MQ=10.93;MQ0=23;OQ=89.38;QD=2.48;SB=-3.98 GT:AD:DP:GL:GQ 0/1:21,15:6:-14.03,-1.81,-7.79:59.84
-chr1 3600532 . C T 45.13 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=11.72;MQ0=9;QD=2.65;SB=-47.67 GT:AD:DP:GL:GQ 1/1:12,5:2:-7.92,-0.60,-0.00:6.02
-chr1 3600545 . A C 20.73 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=18.85;MQ0=10;QD=0.80;SB=-32.99 GT:AD:DP:GL:GQ 0/1:14,12:4:-6.56,-1.20,-7.53:53.53
-chr1 3600575 . C T 0.06 PASS AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=7.34;MQ=23.21;MQ0=9;OQ=164.83;QD=5.49;SB=-77.08 GT:AD:DP:GL:GQ 0/1:24,6:9:-22.48,-2.71,-11.26:85.52
-chr1 3600578 . C T 0.49 PASS AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=5.98;MQ=23.98;MQ0=9;OQ=197.36;QD=6.81;SB=-112.62 GT:AD:DP:GL:GQ 0/1:22,7:11:-26.34,-3.32,-14.46:99
-chr1 3600596 . C T 0.28 PASS AC=2;AF=1.00;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=33.58;MQ0=0;OQ=353.36;QD=25.24;SB=-175.22 GT:AD:DP:GL:GQ 1/1:0,14:10:-38.92,-3.01,-0.01:30.09
-chr1 3600667 . C T 19.38 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=18;Dels=0.00;HRun=1;HaplotypeScore=14.09;MQ=16.96;MQ0=7;QD=1.08;SB=-29.64 GT:AD:DP:GL:GQ 0/1:14,4:7:-7.33,-2.11,-16.23:52.17
-chr1 3600709 . C T 32.48 PASS AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=3.31;MQ=14.75;MQ0=16;OQ=271.94;QD=8.77;SB=-129.00 GT:AD:DP:GL:GQ 1/1:10,20:8:-30.78,-2.41,-0.00:24.07
-chr1 3600734 . C A 11.22 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=17.16;MQ0=10;QD=0.59;SB=-7.00 GT:AD:DP:GL:GQ 0/1:17,2:6:-6.18,-1.81,-13.77:43.72
-chr1 3600738 . C T 23.24 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=5.72;MQ=17.16;MQ0=10;QD=1.22;SB=-6.99 GT:AD:DP:GL:GQ 0/1:14,5:6:-7.41,-1.81,-13.10:56.06
-chr1 3600746 . G A 0.90 PASS AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=5.14;MQ=19.46;MQ0=10;OQ=147.44;QD=6.70;SB=-47.55 GT:AD:DP:GL:GQ 0/1:6,16:6:-19.82,-1.81,-3.10:12.90
-chr1 3600943 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=10.81;MQ0=18;OQ=79.37;QD=2.27;SB=-10.00 GT:AD:DP:GL:GQ 0/1:27,8:5:-12.73,-1.51,-3.55:20.36
-chr1 3600944 . G A 31.47 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=10.97;MQ0=17;QD=0.93;SB=-10.00 GT:AD:DP:GL:GQ 0/1:32,2:5:-7.94,-1.51,-9.29:64.30
-chr1 3600955 . C T 29.25 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=3.80;MQ=11.72;MQ0=17;QD=0.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:25,7:6:-8.02,-1.81,-11.97:62.08
-chr1 3600968 . A C 27.28 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=2;HaplotypeScore=4.96;MQ=11.75;MQ0=20;QD=0.80;SB=-10.00 GT:AD:DP:GL:GQ 0/1:18,16:5:-7.52,-1.51,-9.32:60.10
-chr1 3601000 . G C 23.03 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=2;HaplotypeScore=12.60;MQ=11.01;MQ0=30;QD=0.46;SB=-6.99 GT:AD:DP:GL:GQ 0/1:44,6:9:-8.30,-2.71,-30.70:55.84
-chr1 3601003 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=2;HaplotypeScore=15.11;MQ=12.05;MQ0=28;OQ=191.04;QD=3.75;SB=-6.99 GT:AD:DP:GL:GQ 0/1:28,23:11:-25.70,-3.31,-14.21:99
-chr1 3601025 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=13.71;MQ=14.27;MQ0=33;OQ=53.75;QD=0.96;SB=-3.99 GT:AD:DP:GL:GQ 0/1:46,9:10:-11.67,-3.01,-22.44:86.59
-chr1 3601070 rs36156048 C G 0.13 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=10.95;MQ=20.17;MQ0=10;OQ=79.41;QD=3.18;SB=-46.45 GT:AD:DP:GL:GQ 0/1:14,11:6:-13.03,-1.81,-11.69:98.78
-chr1 3601096 . G A 20.37 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=8.03;MQ=17.90;MQ0=5;QD=1.20;SB=-27.52 GT:AD:DP:GL:GQ 0/1:13,3:5:-6.83,-1.51,-8.44:53.16
-chr1 3601143 . A C 0.18 PASS AC=1;AF=0.50;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=20.37;MQ0=7;OQ=150.35;QD=6.54;SB=-72.98 GT:AD:DP:GL:GQ 0/1:14,9:10:-21.33,-3.01,-13.91:99
-chr1 3601165 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=30;Dels=0.00;HRun=0;HaplotypeScore=11.69;MQ=24.21;MQ0=10;OQ=173.39;QD=5.78;SB=-3.99 GT:AD:DP:GL:GQ 0/1:22,8:11:-23.94,-3.31,-15.90:99
-chr1 3601175 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=2;HaplotypeScore=35.74;MQ=29.63;MQ0=10;OQ=194.57;QD=4.75;SB=-123.70 GT:AD:DP:GL:GQ 0/1:27,14:21:-29.07,-6.33,-61.55:99
-chr1 3601178 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=2;HaplotypeScore=14.60;MQ=30.57;MQ0=8;OQ=427.34;QD=9.94;SB=-58.96 GT:AD:DP:GL:GQ 0/1:21,22:25:-53.55,-7.53,-34.82:99
-chr1 3601218 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=2;HaplotypeScore=16.31;MQ=41.71;MQ0=5;OQ=182.10;QD=2.43;SB=-33.64 GT:AD:DP:GL:GQ 0/1:61,14:63:-40.49,-19.00,-224.09:99
-chr1 3601225 rs12722819 A C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=3;HaplotypeScore=15.63;MQ=42.30;MQ0=5;OQ=524.29;QD=6.32;SB=-141.88 GT:AD:DP:GL:GQ 0/1:52,30:59:-73.50,-17.79,-124.07:99
-chr1 3601229 rs12727450 T C 0.93 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=3;HaplotypeScore=5.92;MQ=43.45;MQ0=6;OQ=762.30;QD=9.07;SB=-332.31 GT:AD:DP:GL:GQ 0/1:49,35:67:-99.71,-20.19,-147.26:99
-chr1 3601341 rs12239528 C T 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.01;HRun=0;HaplotypeScore=14.56;MQ=44.93;MQ0=17;OQ=62.54;QD=0.70;SB=44.13 GT:AD:DP:GL:GQ 0/1:79,8:62:-27.92,-18.38,-184.40:95.37
-chr1 3601342 rs11581562 G A 0.21 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.01;HRun=0;HaplotypeScore=14.40;MQ=44.68;MQ0=18;OQ=819.35;QD=9.10;SB=-177.16 GT:AD:DP:GL:GQ 0/1:53,33:59:-102.70,-17.49,-103.40:99
-chr1 3601389 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=2;HaplotypeScore=7.82;MQ=44.29;MQ0=18;OQ=186.02;QD=2.30;SB=-61.02 GT:AD:DP:GL:GQ 0/1:62,19:52:-37.55,-15.67,-142.29:99
-chr1 3601457 rs10910012 A G 122.78 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=54.59;MQ0=0;OQ=1506.74;QD=29.54;SB=-756.93 GT:AD:DP:GL:GQ 1/1:0,51:48:-154.31,-14.48,-0.05:99
-chr1 3601752 rs3765731 G A 361.77 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=59.28;MQ0=0;OQ=1001.62;QD=15.65;SB=-488.04 GT:AD:DP:GL:GQ 0/1:31,33:59:-121.23,-17.79,-88.90:99
-chr1 3601820 rs3765732 G A 2.96 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=59.03;MQ0=0;OQ=1613.11;QD=33.61;SB=-476.00 GT:AD:DP:GL:GQ 1/1:0,46:44:-167.13,-15.44,-2.23:99
-chr1 3602293 rs1885869 T C 376.91 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1214.50;QD=32.82;SB=-519.18 GT:AD:DP:GL:GQ 1/1:0,37:35:-125.05,-10.54,-0.02:99
-chr1 3603630 rs10910013 C T 111.93 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.47;MQ0=0;OQ=534.95;QD=15.28;SB=-205.85 GT:AD:DP:GL:GQ 0/1:18,17:34:-67.02,-10.25,-59.55:99
-chr1 3603781 rs35837097 A G 62.33 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.60;MQ=59.60;MQ0=0;OQ=546.71;QD=11.63;SB=-279.27 GT:AD:DP:GL:GQ 0/1:23,24:43:-70.92,-12.96,-83.70:99
-chr1 3605288 rs11580811 G A 73.23 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=59.17;MQ0=0;OQ=263.75;QD=9.42;SB=-51.00 GT:AD:DP:GL:GQ 0/1:17,11:22:-36.29,-6.63,-43.95:99
-chr1 3606461 rs3765736 C T 194.21 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=57.38;MQ0=0;OQ=406.81;QD=15.07;SB=-214.90 GT:AD:DP:GL:GQ 0/1:13,14:23:-50.90,-6.93,-35.03:99
-chr1 3606652 rs3765737 A G 468.77 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=799.22;QD=12.89;SB=-323.13 GT:AD:DP:GL:GQ 0/1:30,32:60:-101.29,-18.08,-117.49:99
-chr1 3606658 rs3765738 G A 253.54 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.79;MQ0=0;OQ=935.05;QD=15.08;SB=-404.78 GT:AD:DP:GL:GQ 0/1:33,29:61:-115.17,-18.38,-103.51:99
-chr1 3606835 rs4610947 C A 292.86 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.39;MQ0=0;OQ=957.03;QD=17.09;SB=-493.95 GT:AD:DP:GL:GQ 0/1:24,31:55:-115.55,-16.56,-86.20:99
-chr1 3606979 rs4378145 G A 258.79 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=57.58;MQ0=5;OQ=1287.24;QD=16.29;SB=-484.49 GT:AD:DP:GL:GQ 0/1:40,39:72:-153.70,-21.69,-124.59:99
-chr1 3607481 rs3765739 A G 35.10 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=56.52;MQ0=0;OQ=316.46;QD=9.31;SB=-99.71 GT:AD:DP:GL:GQ 0/1:16,18:27:-43.07,-8.14,-49.38:99
-chr1 3608425 rs3819959 T C 21.46 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.02;MQ=53.67;MQ0=0;OQ=372.33;QD=9.08;SB=-195.61 GT:AD:DP:GL:GQ 0/1:23,18:34:-50.76,-10.24,-80.92:99
-chr1 3608574 rs3765740 T G 43.97 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=2;HaplotypeScore=1.03;MQ=59.11;MQ0=0;OQ=373.92;QD=14.38;SB=-208.83 GT:AD:DP:GL:GQ 0/1:12,14:26:-48.51,-7.83,-42.30:99
-chr1 3608643 rs3765741 A G 139.94 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.25;MQ0=0;OQ=277.44;QD=11.10;SB=-3.99 GT:AD:DP:GL:GQ 0/1:13,12:23:-37.96,-6.93,-45.69:99
-chr1 3608686 rs3765742 G A 11.54 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=299.52;QD=14.98;SB=-7.00 GT:AD:DP:GL:GQ 0/1:9,11:19:-38.96,-5.72,-31.25:99
-chr1 3608969 rs3765743 C T 17.24 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=315.53;QD=15.78;SB=-3.99 GT:AD:DP:GL:GQ 0/1:10,10:19:-40.56,-5.72,-31.07:99
-chr1 3609567 rs4648550 T A 206.11 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=1535.78;QD=37.46;SB=-673.01 GT:AD:DP:GL:GQ 1/1:0,41:41:-157.17,-12.35,-0.01:99
-chr1 3609807 rs34881405 T C 7.83 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.49;MQ=57.54;MQ0=0;OQ=345.64;QD=7.86;SB=-128.25 GT:AD:DP:GL:GQ 0/1:24,20:40:-49.91,-12.06,-96.00:99
-chr1 3610040 rs17379833 A T 163.16 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.52;MQ0=0;OQ=999.11;QD=20.81;SB=-480.53 GT:AD:DP:GL:GQ 0/1:16,32:47:-117.35,-14.16,-58.41:99
-chr1 3610295 rs12742969 A G 136.51 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=514.16;QD=10.49;SB=-277.41 GT:AD:DP:GL:GQ 0/1:28,21:47:-68.86,-14.16,-115.22:99
-chr1 3610320 rs12735439 C A 230.39 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=60.00;MQ0=0;OQ=801.03;QD=16.35;SB=-378.77 GT:AD:DP:GL:GQ 0/1:22,27:48:-97.85,-14.46,-70.21:99
-chr1 3611339 rs3765749 A T 129.18 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=60.00;MQ0=0;OQ=640.71;QD=17.32;SB=-252.96 GT:AD:DP:GL:GQ 0/1:16,21:36:-78.20,-10.84,-56.57:99
-chr1 3612044 rs3765751 A G 0.64 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=6.05;MQ=58.84;MQ0=0;OQ=1141.41;QD=28.54;SB=-361.32 GT:AD:DP:GL:GQ 1/1:0,39:37:-117.76,-11.16,-0.04:99
-chr1 3612141 rs3765752 G A 98.32 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.42;MQ0=0;OQ=790.33;QD=19.76;SB=-403.21 GT:AD:DP:GL:GQ 0/1:16,24:40:-94.37,-12.05,-52.81:99
-chr1 3612166 rs3765753 T G 307.87 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=1135.84;QD=31.55;SB=-218.90 GT:AD:DP:GL:GQ 1/1:0,36:34:-117.19,-10.25,-0.02:99
-chr1 3612496 rs12086279 A T 144.33 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=53.76;MQ0=0;OQ=264.24;QD=12.01;SB=-145.87 GT:AD:DP:GL:GQ 0/1:12,10:20:-35.73,-6.03,-37.15:99
-chr1 3612742 rs56124535 A G 117.78 PASS AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=57.14;MQ0=0;OQ=143.16;QD=7.53;SB=-61.32 GT:AD:DP:GL:GQ 0/1:9,9:16:-22.43,-4.83,-33.66:99
-chr1 3612752 rs55976062 T C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=19;Dels=0.00;HRun=2;HaplotypeScore=16.88;MQ=55.46;MQ0=1;OQ=130.66;QD=6.88;SB=-60.86 GT:AD:DP:GL:GQ 0/1:11,8:16:-21.17,-4.82,-37.90:99
-chr1 3612857 rs10910014 T C 4.06 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=2.85;MQ=45.10;MQ0=1;OQ=122.28;QD=3.82;SB=-65.87 GT:AD:DP:GL:GQ 0/1:18,14:19:-21.24,-5.73,-45.71:99
-chr1 3612894 rs58140697 A G 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=4;HaplotypeScore=5.46;MQ=58.05;MQ0=0;OQ=210.19;QD=8.76;SB=-118.71 GT:AD:DP:GL:GQ 0/1:15,9:22:-30.93,-6.63,-52.73:99
-chr1 3612902 rs60071664 T C 130.61 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=57.06;MQ0=0;OQ=194.42;QD=7.48;SB=-106.60 GT:AD:DP:GL:GQ 0/1:16,10:25:-30.26,-7.53,-62.36:99
-chr1 3613185 rs12564843 G C 7.11 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=53.89;MQ0=0;OQ=1382.10;QD=38.39;SB=-571.48 GT:AD:DP:GL:GQ 1/1:0,36:33:-141.81,-9.95,-0.02:99
-chr1 3613274 rs9786966 A G 67.74 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.62;MQ=57.45;MQ0=0;OQ=414.03;QD=10.62;SB=-167.59 GT:AD:DP:GL:GQ 0/1:21,18:36:-55.53,-10.85,-77.07:99
-chr1 3613481 rs55657548 C T 77.12 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=58.92;MQ0=0;OQ=252.32;QD=6.47;SB=-105.49 GT:AD:DP:GL:GQ 0/1:27,11:38:-39.97,-11.45,-93.41:99
-chr1 3614769 rs10910016 G A 258.29 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=59.57;MQ0=0;OQ=815.07;QD=15.09;SB=-428.45 GT:AD:DP:GL:GQ 0/1:27,26:50:-99.87,-15.07,-79.93:99
-chr1 3615542 rs3765755 G C 6.35 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=3.76;MQ=57.56;MQ0=0;OQ=289.35;QD=10.72;SB=-124.51 GT:AD:DP:GL:GQ 0/1:17,10:20:-38.26,-6.05,-38.86:99
-chr1 3615628 rs2368540 G A 45.74 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=57.64;MQ0=0;OQ=1334.80;QD=39.26;SB=-676.69 GT:AD:DP:GL:GQ 1/1:0,34:34:-137.07,-10.24,-0.01:99
-chr1 3615736 rs2368539 G A 82.76 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.19;MQ=58.99;MQ0=0;OQ=1720.73;QD=37.41;SB=-824.61 GT:AD:DP:GL:GQ 1/1:0,46:45:-175.68,-13.56,-0.02:99
-chr1 3616028 rs12130809 G A 272.35 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=838.34;QD=17.11;SB=-389.14 GT:AD:DP:GL:GQ 0/1:23,26:48:-101.58,-14.46,-75.57:99
-chr1 3616588 rs3753208 C T 1.11 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=1;HaplotypeScore=2.44;MQ=57.64;MQ0=0;OQ=539.82;QD=20.76;SB=-254.78 GT:AD:DP:GL:GQ 0/1:9,17:24:-64.50,-7.23,-25.72:99
-chr1 3616624 rs3753209 G A 11.81 PASS AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=58.89;MQ0=0;OQ=522.74;QD=24.89;SB=-281.33 GT:AD:DP:GL:GQ 0/1:4,17:19:-61.28,-5.73,-9.34:36.13
-chr1 3618071 rs3819961 T C 130.28 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=59.30;MQ0=0;OQ=302.64;QD=9.17;SB=-168.93 GT:AD:DP:GL:GQ 0/1:19,14:29:-42.29,-8.74,-60.25:99
-chr1 3618163 rs3819962 C T 161.54 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.36;MQ0=0;OQ=457.21;QD=12.70;SB=-166.18 GT:AD:DP:GL:GQ 0/1:20,16:35:-59.55,-10.55,-68.25:99
-chr1 3618201 rs3819963 C T 122.91 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=60.00;MQ0=0;OQ=469.25;QD=9.98;SB=-160.23 GT:AD:DP:GL:GQ 0/1:28,19:40:-62.27,-12.06,-77.68:99
-chr1 3618523 rs6424089 A G 234.40 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.55;MQ0=0;OQ=515.26;QD=10.10;SB=-135.54 GT:AD:DP:GL:GQ 0/1:28,23:50:-69.88,-15.07,-112.69:99
-chr1 3618537 rs6424090 A G 547.53 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.83;MQ0=0;OQ=1664.50;QD=30.82;SB=-446.16 GT:AD:DP:GL:GQ 1/1:0,54:52:-170.07,-15.68,-0.04:99
-chr1 3619132 rs61568045 A T 75.76 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=1.40;MQ=60.00;MQ0=0;OQ=702.41;QD=14.05;SB=-308.70 GT:AD:DP:GL:GQ 0/1:27,23:49:-88.29,-14.76,-94.54:99
-chr1 3619452 rs3765758 A G 47.37 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.30;MQ0=0;OQ=878.57;QD=26.62;SB=-355.42 GT:AD:DP:GL:GQ 1/1:0,33:30:-91.48,-9.06,-0.04:90.16
-chr1 3620336 rs3765761 C T 430.43 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.64;MQ0=0;OQ=893.13;QD=17.18;SB=-472.49 GT:AD:DP:GL:GQ 0/1:25,27:51:-107.96,-15.36,-81.84:99
-chr1 3620975 rs3765763 C A 252.43 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.39;MQ0=0;OQ=502.24;QD=13.22;SB=-232.36 GT:AD:DP:GL:GQ 0/1:20,18:37:-64.65,-11.14,-68.16:99
-chr1 3621759 rs61759267 C T 206.85 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=58.40;MQ0=0;OQ=667.68;QD=16.28;SB=-326.34 GT:AD:DP:GL:GQ 0/1:19,22:40:-82.11,-12.06,-61.46:99
-chr1 3622468 rs3753211 T C 35.06 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=6.67;MQ=58.45;MQ0=0;OQ=511.74;QD=11.37;SB=-197.62 GT:AD:DP:GL:GQ 0/1:23,22:42:-67.14,-12.68,-73.45:99
-chr1 3622590 rs4648551 G A 13.99 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=8.04;MQ=59.11;MQ0=0;OQ=881.37;QD=14.94;SB=-385.40 GT:AD:DP:GL:GQ 0/1:30,29:55:-108.00,-16.58,-90.70:99
-chr1 3623397 rs3765764 G A 5.20 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.59;MQ0=0;OQ=1699.76;QD=37.77;SB=-349.25 GT:AD:DP:GL:GQ 1/1:0,44:44:-176.03,-15.59,-2.47:99
-chr1 3624319 rs3765765 C A 38.07 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=752.18;QD=20.33;SB=-184.22 GT:AD:DP:GL:GQ 0/1:13,24:36:-89.34,-10.84,-42.24:99
-chr1 3624520 rs3765766 T C 10.08 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=2;HaplotypeScore=2.32;MQ=58.08;MQ0=0;OQ=679.70;QD=30.90;SB=-324.14 GT:AD:DP:GL:GQ 1/1:0,22:21:-71.57,-6.33,-0.02:63.16
-chr1 3625325 rs3765767 G C 128.03 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.30;MQ0=0;OQ=648.42;QD=19.65;SB=-303.36 GT:AD:DP:GL:GQ 0/1:15,18:33:-78.07,-9.95,-65.85:99
-chr1 3625451 rs3765768 C T 99.15 PASS AC=1;AF=0.50;AN=2;DB;DP=22;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=57.87;MQ0=0;OQ=372.64;QD=16.94;SB=-111.62 GT:AD:DP:GL:GQ 0/1:9,13:20:-46.58,-6.03,-24.55:99
-chr1 3625480 rs3819968 G T 164.17 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.32;MQ0=0;OQ=519.45;QD=15.28;SB=-228.94 GT:AD:DP:GL:GQ 0/1:15,19:32:-64.87,-9.64,-47.62:99
-chr1 3627107 rs3765771 G C 208.39 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.53;MQ0=0;OQ=1861.37;QD=37.99;SB=-769.21 GT:AD:DP:GL:GQ 1/1:0,49:48:-189.76,-14.49,-0.04:99
-chr1 3627319 rs12731705 C T 198.62 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.16;MQ0=0;OQ=1887.80;QD=37.76;SB=-826.61 GT:AD:DP:GL:GQ 1/1:0,50:48:-192.38,-14.46,-0.01:99
-chr1 3627473 rs2146658 T G 374.11 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.91;MQ0=0;OQ=603.03;QD=10.05;SB=-295.81 GT:AD:DP:GL:GQ 0/1:35,25:58:-81.06,-17.47,-122.08:99
-chr1 3627672 rs2181487 C A 40.28 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.14;MQ=58.10;MQ0=0;OQ=433.83;QD=7.35;SB=-156.52 GT:AD:DP:GL:GQ 0/1:34,22:49:-61.43,-14.77,-105.52:99
-chr1 3628534 rs1801174 C T 158.46 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.66;MQ0=0;OQ=2550.78;QD=38.07;SB=-965.29 GT:AD:DP:GL:GQ 1/1:0,67:65:-258.68,-19.58,-0.02:99
-chr1 3628694 rs12737840 C T 176.16 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.52;MQ=58.05;MQ0=0;OQ=694.01;QD=14.46;SB=-295.84 GT:AD:DP:GL:GQ 0/1:22,26:42:-85.35,-12.67,-62.54:99
-chr1 3629503 rs4648552 T C 338.68 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1294.39;QD=30.10;SB=-605.94 GT:AD:DP:GL:GQ 1/1:0,43:41:-133.06,-12.37,-0.04:99
-chr1 3629584 rs7537335 G A 0.43 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=58.30;MQ0=0;OQ=677.32;QD=21.85;SB=-284.30 GT:AD:DP:GL:GQ 0/1:10,21:29:-79.75,-8.74,-30.01:99
-chr1 3629945 rs6424091 C G 0.03 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=5;HaplotypeScore=2.31;MQ=58.54;MQ0=0;OQ=1470.54;QD=38.70;SB=-622.99 GT:AD:DP:GL:GQ 1/1:0,38:35:-150.65,-10.55,-0.01:99
-chr1 3630886 rs6687491 G A 255.56 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=58.48;MQ0=0;OQ=516.42;QD=12.91;SB=-227.77 GT:AD:DP:GL:GQ 0/1:22,18:36:-65.79,-10.86,-57.81:99
-chr1 3630983 rs6701784 A C 437.82 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.55;MQ0=0;OQ=1276.86;QD=28.37;SB=-579.85 GT:AD:DP:GL:GQ 1/1:0,45:42:-131.31,-12.66,-0.04:99
-chr1 3632013 rs34178965 G C 41.74 LowQual AC=2;AF=1.00;AN=2;DB;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;QD=13.91;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:2:-7.58,-0.60,-0.00:6.02
-chr1 3632108 . A G 92.54 PASS AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.46;MQ0=0;OQ=246.19;QD=30.77;SB=-85.92 GT:AD:DP:GL:GQ 1/1:0,8:8:-28.20,-2.41,-0.00:24.07
-chr1 3633787 rs2296031 A G 6.14 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=452.89;QD=19.69;SB=-150.34 GT:AD:DP:GL:GQ 0/1:6,16:22:-55.20,-6.63,-22.30:99
-chr1 3634209 rs2181486 A G 1.25 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=4;HaplotypeScore=1.69;MQ=58.39;MQ0=0;OQ=887.40;QD=30.60;SB=-422.16 GT:AD:DP:GL:GQ 1/1:0,29:29:-92.36,-8.75,-0.03:87.19
-chr1 3634234 rs2146657 A G 3.11 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=2.86;MQ=58.55;MQ0=0;OQ=912.28;QD=28.51;SB=-446.82 GT:AD:DP:GL:GQ 1/1:0,32:28:-94.83,-8.44,-0.02:84.21
-chr1 3634529 rs2236367 C T 14.74 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=-0.18;MQ=58.05;MQ0=0;OQ=381.45;QD=15.89;SB=-87.90 GT:AD:DP:GL:GQ 0/1:11,13:23:-48.37,-6.94,-31.96:99
-chr1 3634665 rs2236366 A G 76.17 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.83;MQ=58.92;MQ0=0;OQ=536.64;QD=13.76;SB=-250.32 GT:AD:DP:GL:GQ 0/1:16,23:35:-67.50,-10.56,-54.78:99
-chr1 3634718 rs2236365 G C 250.46 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=58.69;MQ0=0;OQ=951.80;QD=19.04;SB=-496.24 GT:AD:DP:GL:GQ 0/1:20,30:47:-112.65,-14.19,-78.43:99
-chr1 3634912 rs12095248 A G 50.60 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=529.65;QD=10.81;SB=-225.29 GT:AD:DP:GL:GQ 0/1:29,20:49:-71.01,-14.76,-117.85:99
-chr1 3635695 rs2254530 C A 234.40 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=56.85;MQ0=0;OQ=701.30;QD=15.58;SB=-270.34 GT:AD:DP:GL:GQ 0/1:17,28:43:-86.38,-12.96,-55.17:99
-chr1 3635704 rs2096224 G A 61.81 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.39;MQ0=0;OQ=843.06;QD=18.33;SB=-255.19 GT:AD:DP:GL:GQ 0/1:18,27:42:-100.25,-12.66,-49.65:99
-chr1 3635997 rs11589885 C T 153.88 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.19;MQ=58.55;MQ0=0;OQ=582.90;QD=18.22;SB=-289.86 GT:AD:DP:GL:GQ 0/1:14,18:32:-71.22,-9.65,-43.73:99
-chr1 3636052 rs1885867 G A 143.16 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.44;MQ0=0;OQ=1392.32;QD=33.96;SB=-648.62 GT:AD:DP:GL:GQ 1/1:1,40:37:-142.84,-11.16,-0.02:99
-chr1 3636074 rs1885866 T C 394.04 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1194.73;QD=27.15;SB=-580.01 GT:AD:DP:GL:GQ 1/1:0,44:39:-123.10,-11.76,-0.04:99
-chr1 3636151 rs1885865 G A 33.35 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.52;MQ=59.03;MQ0=0;OQ=1851.65;QD=38.58;SB=-906.66 GT:AD:DP:GL:GQ 1/1:0,48:47:-188.76,-14.16,-0.01:99
-chr1 3637822 rs1745813 T C 55.74 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=5.13;MQ=58.97;MQ0=0;OQ=680.74;QD=15.13;SB=-289.66 GT:AD:DP:GL:GQ 0/1:18,27:43:-84.33,-12.97,-62.63:99
-chr1 3638114 rs34661835 G A 68.90 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=3.56;MQ=59.01;MQ0=0;OQ=1063.39;QD=15.19;SB=-366.89 GT:AD:DP:GL:GQ 0/1:37,33:66:-129.52,-19.90,-102.17:99
-chr1 3638739 rs4648553 G A 223.38 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.68;MQ=58.64;MQ0=0;OQ=511.89;QD=10.66;SB=-215.18 GT:AD:DP:GL:GQ 0/1:26,22:40:-66.54,-12.07,-70.14:99
-chr1 3640958 rs1181869 C T 138.76 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=782.45;QD=20.06;SB=-285.16 GT:AD:DP:GL:GQ 0/1:16,23:38:-92.98,-11.45,-54.47:99
-chr1 3640986 rs1181868 G T 357.91 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=59.51;MQ0=0;OQ=742.19;QD=14.55;SB=-306.02 GT:AD:DP:GL:GQ 0/1:23,27:47:-91.66,-14.16,-72.26:99
-chr1 3641178 rs1181867 A G 3.60 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=11.13;MQ=59.11;MQ0=0;OQ=463.08;QD=9.85;SB=-239.29 GT:AD:DP:GL:GQ 0/1:24,23:43:-62.56,-12.97,-88.46:99
-chr1 3642477 rs1047928 G C 24.63 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.25;MQ0=0;OQ=1110.64;QD=19.83;SB=-354.44 GT:AD:DP:GL:GQ 0/1:25,31:54:-130.64,-16.30,-94.09:99
-chr1 3642678 rs61759293 G A 143.34 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=59.59;MQ0=0;OQ=746.17;QD=16.22;SB=-262.29 GT:AD:DP:GL:GQ 0/1:23,23:46:-91.76,-13.86,-82.87:99
-chr1 3642682 rs9800 C G 193.80 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=59.59;MQ0=0;OQ=608.81;QD=13.23;SB=-238.07 GT:AD:DP:GL:GQ 0/1:25,21:45:-77.74,-13.57,-107.75:99
-chr1 3643272 rs1181866 A C 242.81 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1714.13;QD=34.28;SB=-732.08 GT:AD:DP:GL:GQ 1/1:0,50:49:-175.01,-14.76,-0.02:99
-chr1 3643286 rs1181865 T C 423.19 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1563.43;QD=32.57;SB=-664.24 GT:AD:DP:GL:GQ 1/1:0,48:46:-159.95,-13.86,-0.02:99
-chr1 3644050 rs1181864 A G 156.69 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=57.94;MQ0=0;OQ=704.72;QD=10.36;SB=-357.09 GT:AD:DP:GL:GQ 0/1:38,30:68:-94.25,-20.50,-152.69:99
-chr1 3644355 rs41315308 C T 206.84 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=57.86;MQ0=0;OQ=957.61;QD=14.96;SB=-405.80 GT:AD:DP:GL:GQ 0/1:34,30:63:-118.03,-18.99,-105.73:99
-chr1 3646184 rs1181863 T C 89.60 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.04;MQ0=1;OQ=1725.96;QD=27.84;SB=-738.77 GT:AD:DP:GL:GQ 1/1:0,62:55:-176.23,-16.59,-0.05:99
-chr1 3647330 rs61339658 C T 216.66 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.48;MQ0=0;OQ=622.56;QD=14.15;SB=-204.90 GT:AD:DP:GL:GQ 0/1:24,20:43:-78.50,-12.96,-75.30:99
-chr1 3647619 rs12117836 G A 258.44 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.76;MQ0=0;OQ=3087.35;QD=39.58;SB=-1142.52 GT:AD:DP:GL:GQ 1/1:0,78:77:-312.34,-23.20,-0.02:99
-chr1 3647643 rs55704710 C T 372.37 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1117.31;QD=14.14;SB=-441.41 GT:AD:DP:GL:GQ 0/1:44,35:79:-138.82,-23.81,-145.27:99
-chr1 3648097 rs10797409 G A 267.01 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.27;MQ0=0;OQ=783.87;QD=15.37;SB=-396.73 GT:AD:DP:GL:GQ 0/1:26,25:51:-97.04,-15.37,-93.66:99
-chr1 3648630 rs12068191 T C 36.85 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=59.42;MQ0=0;OQ=210.22;QD=6.57;SB=-113.63 GT:AD:DP:GL:GQ 0/1:20,12:30:-33.36,-9.05,-73.41:99
-chr1 3649517 rs2298222 G A 272.39 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=58.64;MQ0=0;OQ=639.47;QD=13.32;SB=-210.21 GT:AD:DP:GL:GQ 0/1:28,20:45:-80.80,-13.57,-77.92:99
-chr1 3650201 rs10910020 A G 239.62 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=60.00;MQ0=0;OQ=830.62;QD=14.32;SB=-256.96 GT:AD:DP:GL:GQ 0/1:22,36:55:-102.93,-16.58,-89.31:99
-chr1 3650655 rs61759295 C T 319.94 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=56.32;MQ0=0;OQ=1049.42;QD=17.20;SB=-513.15 GT:AD:DP:GL:GQ 0/1:29,32:58:-125.70,-17.48,-89.86:99
-chr1 3650715 . C T 1.43 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=1;HaplotypeScore=2.94;MQ=58.05;MQ0=0;OQ=1053.29;QD=21.50;SB=-546.76 GT:AD:DP:GL:GQ 0/1:18,30:49:-126.44,-17.83,-68.95:99
-chr1 3650833 rs61759296 C T 365.26 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=780.11;QD=18.14;SB=-365.90 GT:AD:DP:GL:GQ 0/1:18,25:43:-94.25,-12.96,-66.61:99
-chr1 3650834 rs61759297 A G 444.30 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=732.78;QD=16.65;SB=-378.33 GT:AD:DP:GL:GQ 0/1:18,26:44:-89.82,-13.26,-70.47:99
-chr1 3651042 . A G 50.56 PASS AC=2;AF=1.00;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.01;MQ0=0;OQ=2317.73;QD=30.50;SB=-942.03 GT:AD:DP:GL:GQ 1/1:0,76:75:-235.44,-22.63,-0.08:99
-chr1 3651109 . A G 1.79 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.08;MQ=56.71;MQ0=0;OQ=273.27;QD=7.01;SB=-125.50 GT:AD:DP:GL:GQ 0/1:24,15:37:-41.77,-11.16,-93.00:99
-chr1 3651611 rs61759298 C T 14.44 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=6.20;MQ=59.36;MQ0=0;OQ=487.25;QD=13.53;SB=-201.22 GT:AD:DP:GL:GQ 0/1:19,17:31:-61.35,-9.34,-53.39:99
-chr1 3651666 rs61759299 G A 290.38 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=58.58;MQ0=0;OQ=537.51;QD=11.69;SB=-229.48 GT:AD:DP:GL:GQ 0/1:28,18:45:-70.60,-13.56,-93.90:99
-chr1 3652705 rs3737589 A G 232.40 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1820.89;QD=33.11;SB=-644.31 GT:AD:DP:GL:GQ 1/1:0,55:53:-185.70,-15.97,-0.02:99
-chr1 3652806 . C A 30.45 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=2;HaplotypeScore=18.21;MQ=58.71;MQ0=0;QD=0.56;SB=77.26 GT:AD:DP:GL:GQ 0/1:38,16:41:-18.69,-12.36,-124.87:63.28
-chr1 3652917 rs3737590 A T 248.79 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.59;MQ0=0;OQ=534.27;QD=11.87;SB=-180.50 GT:AD:DP:GL:GQ 0/1:25,20:43:-69.67,-12.96,-88.74:99
-chr1 3652988 rs3737591 G A 355.22 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=743.37;QD=18.13;SB=-354.36 GT:AD:DP:GL:GQ 0/1:19,22:40:-89.67,-12.05,-59.56:99
-chr1 3653501 . C T 1.63 PASS AC=1;AF=0.50;AN=2;DP=24;Dels=0.00;HRun=1;HaplotypeScore=4.19;MQ=56.43;MQ0=0;OQ=295.19;QD=12.30;SB=-147.16 GT:AD:DP:GL:GQ 0/1:12,11:20:-38.83,-6.03,-35.51:99
-chr1 3654278 rs61759300 C T 319.11 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=59.50;MQ0=0;OQ=838.34;QD=14.71;SB=-382.16 GT:AD:DP:GL:GQ 0/1:29,28:55:-103.70,-16.58,-94.60:99
-chr1 3654412 . G A 1.87 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.14;MQ=59.58;MQ0=0;OQ=1116.86;QD=20.31;SB=-482.46 GT:AD:DP:GL:GQ 0/1:23,32:54:-131.23,-16.26,-80.42:99
-chr1 3655727 rs12120656 G T 277.67 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.16;MQ0=0;OQ=2493.88;QD=34.64;SB=-1022.51 GT:AD:DP:GL:GQ 1/1:0,71:69:-252.99,-20.78,-0.02:99
-chr1 3657359 rs61759301 C A 268.48 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=59.56;MQ0=0;OQ=858.70;QD=16.20;SB=-443.00 GT:AD:DP:GL:GQ 0/1:24,29:52:-104.82,-15.66,-81.51:99
-chr1 3657864 rs4648554 T C 343.27 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.67;MQ0=0;OQ=2306.57;QD=35.49;SB=-875.99 GT:AD:DP:GL:GQ 1/1:0,65:64:-234.26,-19.28,-0.02:99
-chr1 3658613 rs12128253 A C 493.82 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=800.32;QD=17.40;SB=-351.83 GT:AD:DP:GL:GQ 0/1:19,27:46:-97.17,-13.85,-71.32:99
-chr1 3658641 rs12123850 G T 445.21 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1182.07;QD=31.95;SB=-471.02 GT:AD:DP:GL:GQ 1/1:0,37:33:-121.80,-9.94,-0.01:99
-chr1 3659032 rs41315312 C T 393.31 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=747.09;QD=16.24;SB=-297.79 GT:AD:DP:GL:GQ 0/1:23,23:45:-91.55,-13.56,-71.39:99
-chr1 3659061 rs10797410 A G 617.38 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1286.97;QD=30.64;SB=-659.94 GT:AD:DP:GL:GQ 1/1:0,42:41:-132.32,-12.36,-0.04:99
-chr1 3659065 rs10910021 C G 483.45 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1547.05;QD=38.68;SB=-689.48 GT:AD:DP:GL:GQ 1/1:0,40:36:-158.30,-10.85,-0.01:99
-chr1 3659480 rs10797411 T C 0.77 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=7.27;MQ=57.71;MQ0=0;OQ=1720.61;QD=33.09;SB=-601.34 GT:AD:DP:GL:GQ 1/1:0,51:50:-175.67,-15.06,-0.02:99
-chr1 3659744 . C T 75.39 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=20;HaplotypeScore=21.91;MQ=50.61;MQ0=1;QD=1.13;SB=59.16 GT:AD:DP:GL:GQ 0/1:57,10:52:-26.50,-15.68,-150.70:99
-chr1 3659750 . T C 207.45 SnpCluster AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=50.10;MQ=49.95;MQ0=1;QD=3.05;SB=-120.43 GT:AD:DP:GL:GQ 0/1:53,15:58:-41.51,-17.48,-178.17:99
-chr1 3659751 . T C 331.47 SnpCluster AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=48.26;MQ=49.78;MQ0=1;QD=4.95;SB=-162.44 GT:AD:DP:GL:GQ 0/1:46,21:55:-53.00,-16.57,-149.72:99
-chr1 3660887 rs1181889 T C 275.60 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.83;MQ=59.11;MQ0=0;OQ=722.62;QD=13.90;SB=-328.30 GT:AD:DP:GL:GQ 0/1:24,28:49:-90.30,-14.76,-97.70:99
-chr1 3661651 rs1181888 A G 399.70 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=490.27;QD=11.14;SB=-251.93 GT:AD:DP:GL:GQ 0/1:22,22:42:-64.98,-12.67,-82.79:99
-chr1 3662016 rs4648555 C A 364.79 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=510.62;QD=9.46;SB=-259.25 GT:AD:DP:GL:GQ 0/1:34,20:53:-70.31,-15.96,-121.67:99
-chr1 3662783 rs12128087 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=13;HaplotypeScore=8.43;MQ=60.15;MQ0=0;OQ=558.18;QD=10.94;SB=-253.17 GT:AD:DP:GL:GQ 0/1:30,21:47:-73.27,-14.17,-94.61:99
-chr1 3663356 rs4648405 T G 117.92 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.45;MQ0=0;OQ=421.62;QD=10.04;SB=-89.84 GT:AD:DP:GL:GQ 0/1:24,18:40:-57.50,-12.05,-84.73:99
-chr1 3663862 rs1181887 T G 544.42 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1620.49;QD=34.48;SB=-656.23 GT:AD:DP:GL:GQ 1/1:0,47:47:-165.65,-14.16,-0.01:99
-chr1 3664012 rs7542464 C T 327.04 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.16;MQ0=0;OQ=1410.26;QD=37.11;SB=-358.47 GT:AD:DP:GL:GQ 1/1:0,38:38:-144.63,-11.46,-0.02:99
-chr1 3664166 . G A 2.11 PASS AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=3;HaplotypeScore=2.17;MQ=59.59;MQ0=0;OQ=801.46;QD=17.81;SB=-414.44 GT:AD:DP:GL:GQ 0/1:20,25:43:-96.39,-12.96,-61.16:99
-chr1 3664614 rs1181886 A T 88.61 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.65;MQ0=0;OQ=779.71;QD=14.44;SB=-332.65 GT:AD:DP:GL:GQ 0/1:28,26:52:-96.92,-15.66,-100.50:99
-chr1 3664618 rs9424312 T A 76.30 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=946.40;QD=17.53;SB=-254.96 GT:AD:DP:GL:GQ 0/1:24,30:54:-114.19,-16.27,-85.78:99
-chr1 3664638 rs59291549 A G 339.20 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.66;MQ0=0;OQ=754.74;QD=11.44;SB=-151.30 GT:AD:DP:GL:GQ 0/1:31,35:62:-97.45,-18.69,-125.83:99
-chr1 3664862 rs6682863 G A 201.85 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=59.78;MQ0=0;OQ=631.54;QD=12.63;SB=-190.86 GT:AD:DP:GL:GQ 0/1:30,20:45:-80.00,-13.57,-81.03:99
-chr1 3665697 rs12128570 C G 270.19 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=50.42;MQ0=0;OQ=767.84;QD=13.01;SB=-344.88 GT:AD:DP:GL:GQ 0/1:34,25:56:-96.94,-16.88,-141.00:99
-chr1 3665819 rs12131045 T G 461.26 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.52;MQ0=0;OQ=642.50;QD=12.12;SB=-333.74 GT:AD:DP:GL:GQ 0/1:24,29:50:-82.60,-15.07,-87.60:99
-chr1 3665937 rs12128669 C T 521.09 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.12;MQ0=0;OQ=862.45;QD=14.37;SB=-269.15 GT:AD:DP:GL:GQ 0/1:32,28:59:-107.30,-17.77,-116.90:99
-chr1 3666427 rs1181885 C T 33.74 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.66;MQ0=0;OQ=1204.99;QD=21.91;SB=-603.11 GT:AD:DP:GL:GQ 0/1:19,36:52:-139.46,-15.68,-54.65:99
-chr1 3666458 rs1181884 T C 438.67 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=1123.89;QD=17.56;SB=-533.09 GT:AD:DP:GL:GQ 0/1:26,38:63:-134.65,-18.98,-101.24:99
-chr1 3666632 rs12406474 T C 126.45 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=1.53;MQ=58.86;MQ0=0;OQ=740.89;QD=13.00;SB=-344.59 GT:AD:DP:GL:GQ 0/1:29,28:56:-94.24,-16.87,-116.11:99
-chr1 3667793 rs1181883 T C 251.38 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=59.64;MQ0=0;OQ=2030.56;QD=31.73;SB=-682.90 GT:AD:DP:GL:GQ 1/1:0,64:64:-206.69,-19.29,-0.05:99
-chr1 3668081 rs1181882 G C 162.48 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=60.00;MQ0=0;OQ=1618.57;QD=31.13;SB=-715.93 GT:AD:DP:GL:GQ 1/1:0,52:43:-165.50,-13.00,-0.06:99
-chr1 3668091 rs7516756 A G 107.99 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=613.13;QD=11.57;SB=-116.72 GT:AD:DP:GL:GQ 0/1:27,26:49:-79.36,-14.77,-98.00:99
-chr1 3668371 rs7516968 A G 62.28 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=209.36;QD=9.10;SB=-37.93 GT:AD:DP:GL:GQ 0/1:13,10:22:-30.85,-6.63,-52.05:99
-chr1 3668596 . G A 15.65 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=57.44;MQ0=0;OQ=384.28;QD=10.98;SB=-65.05 GT:AD:DP:GL:GQ 0/1:22,13:35:-52.26,-10.55,-81.04:99
-chr1 3668758 rs1181881 A G 16.49 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=57.96;MQ0=0;OQ=916.82;QD=30.56;SB=-341.43 GT:AD:DP:GL:GQ 1/1:0,30:29:-95.29,-8.74,-0.02:87.21
-chr1 3668764 rs1181880 C T 45.57 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.66;MQ0=0;OQ=531.41;QD=18.98;SB=-213.73 GT:AD:DP:GL:GQ 0/1:11,17:28:-64.87,-8.45,-34.91:99
-chr1 3668999 rs1181879 T C 13.01 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.38;MQ=59.44;MQ0=0;OQ=1208.95;QD=29.49;SB=-449.15 GT:AD:DP:GL:GQ 1/1:0,41:38:-124.52,-11.46,-0.04:99
-chr1 3669006 rs4648556 G A 196.56 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=59.44;MQ0=0;OQ=524.36;QD=12.79;SB=-228.74 GT:AD:DP:GL:GQ 0/1:24,17:40:-67.77,-12.05,-80.81:99
-chr1 3669167 rs4648557 T C 163.44 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=60.00;MQ0=0;OQ=314.58;QD=10.15;SB=-171.98 GT:AD:DP:GL:GQ 0/1:15,16:28:-43.19,-8.45,-53.69:99
-chr1 3669321 rs4648558 A T 213.98 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=59.30;MQ0=0;OQ=430.63;QD=13.05;SB=-151.85 GT:AD:DP:GL:GQ 0/1:18,15:33:-56.29,-9.94,-66.61:99
-chr1 3669635 rs10910024 C T 223.39 PASS AC=1;AF=0.50;AN=2;DB;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=60.00;MQ0=0;OQ=261.53;QD=10.46;SB=-131.12 GT:AD:DP:GL:GQ 0/1:15,10:24:-36.67,-7.23,-47.59:99
-chr1 3669916 rs56079032 G A 49.43 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.11;MQ0=0;OQ=457.75;QD=17.61;SB=-143.18 GT:AD:DP:GL:GQ 0/1:10,16:25:-56.59,-7.54,-35.59:99
-chr1 3670503 rs1181878 G A 204.22 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=58.92;MQ0=0;OQ=593.13;QD=15.21;SB=-209.18 GT:AD:DP:GL:GQ 0/1:21,18:39:-74.34,-11.75,-76.92:99
-chr1 3670589 rs1181877 C T 442.14 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.71;MQ0=0;OQ=1051.46;QD=16.43;SB=-536.72 GT:AD:DP:GL:GQ 0/1:31,33:61:-126.81,-18.38,-107.46:99
-chr1 3670923 rs6669358 A G 271.22 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.35;MQ=59.49;MQ0=0;OQ=863.52;QD=11.83;SB=-442.10 GT:AD:DP:GL:GQ 0/1:40,33:71:-111.03,-21.40,-156.37:99
-chr1 3671541 rs1181876 A G 312.30 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.35;MQ0=0;OQ=557.92;QD=8.72;SB=-268.23 GT:AD:DP:GL:GQ 0/1:36,28:60:-77.16,-18.08,-144.69:99
-chr1 3671691 rs1181875 T C 354.44 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.69;MQ0=0;OQ=768.78;QD=12.60;SB=-310.35 GT:AD:DP:GL:GQ 0/1:32,29:59:-97.93,-17.77,-128.86:99
-chr1 3671930 rs1181874 C A 548.97 PASS AC=1;AF=0.50;AN=2;DB;DP=111;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1553.48;QD=14.00;SB=-588.81 GT:AD:DP:GL:GQ 0/1:58,53:110:-191.77,-33.14,-192.67:99
-chr1 3673550 rs1181873 A C 65.84 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=59.41;MQ0=0;OQ=502.42;QD=12.88;SB=-249.39 GT:AD:DP:GL:GQ 0/1:20,19:38:-64.97,-11.45,-71.58:99
-chr1 3673967 rs1181872 T A 314.39 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.13;MQ0=0;OQ=665.69;QD=15.48;SB=-321.70 GT:AD:DP:GL:GQ 0/1:19,24:41:-82.21,-12.35,-69.45:99
-chr1 3674181 rs1181871 A G 201.06 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=52.16;MQ0=0;OQ=271.85;QD=7.55;SB=-59.74 GT:AD:DP:GL:GQ 0/1:21,15:32:-40.11,-9.65,-77.03:99
-chr1 3674814 rs1181870 C A 305.27 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=57.69;MQ0=0;OQ=866.35;QD=12.93;SB=-280.62 GT:AD:DP:GL:GQ 0/1:36,31:65:-109.50,-19.58,-123.19:99
-chr1 3677599 rs1175552 C A 135.06 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.12;MQ=60.00;MQ0=0;OQ=585.48;QD=10.09;SB=-188.53 GT:AD:DP:GL:GQ 0/1:34,24:53:-77.81,-15.97,-102.27:99
-chr1 3678505 rs1175551 T C 166.68 PASS AC=1;AF=0.50;AN=2;DB;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=58.20;MQ0=0;OQ=103.01;QD=7.92;SB=-65.87 GT:AD:DP:GL:GQ 0/1:7,6:12:-17.20,-3.62,-26.14:99
-chr1 3679407 . C G 26.93 LowQual AC=1;AF=0.50;AN=2;DP=11;Dels=0.00;HRun=1;HaplotypeScore=2.22;MQ=48.93;MQ0=0;QD=2.45;SB=-6.99 GT:AD:DP:GL:GQ 0/1:3,8:4:-7.19,-1.21,-8.24:59.76
-chr1 3681100 rs1184341 C T 108.25 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=3.04;MQ=59.23;MQ0=0;OQ=426.67;QD=14.22;SB=-164.69 GT:AD:DP:GL:GQ 0/1:15,15:28:-54.39,-8.44,-49.07:99
-chr1 3681124 rs2797432 A G 199.77 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=396.40;QD=12.39;SB=-160.61 GT:AD:DP:GL:GQ 0/1:13,19:29:-51.67,-8.74,-51.47:99
-chr1 3681330 rs1181893 A C 235.23 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.61;MQ0=0;OQ=409.25;QD=27.28;SB=-143.01 GT:AD:DP:GL:GQ 1/1:0,15:13:-44.52,-3.92,-0.01:39.10
-chr1 3681388 rs1175550 A G 206.60 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.14;MQ0=0;OQ=268.33;QD=9.94;SB=-118.66 GT:AD:DP:GL:GQ 0/1:16,11:27:-38.26,-8.14,-61.45:99
-chr1 3681587 rs1175549 A C 56.97 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.73;MQ=59.28;MQ0=0;OQ=317.74;QD=9.93;SB=-135.67 GT:AD:DP:GL:GQ 0/1:18,14:31:-44.40,-9.34,-64.53:99
-chr1 3682892 rs1175548 A G 294.07 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.99;MQ0=0;OQ=521.21;QD=11.33;SB=-266.55 GT:AD:DP:GL:GQ 0/1:25,21:43:-68.36,-12.95,-93.71:99
-chr1 3683615 rs1175547 G T 106.09 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=58.25;MQ0=0;OQ=658.75;QD=16.47;SB=-219.58 GT:AD:DP:GL:GQ 0/1:18,22:39:-80.91,-11.75,-53.72:99
-chr1 3683769 rs1175546 C T 14.30 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=58.95;MQ0=0;OQ=845.89;QD=19.22;SB=-175.68 GT:AD:DP:GL:GQ 0/1:18,26:42:-100.52,-12.65,-61.88:99
-chr1 3684656 rs1891934 G A 75.40 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=59.58;MQ0=0;OQ=574.95;QD=13.07;SB=-268.25 GT:AD:DP:GL:GQ 0/1:26,18:41:-73.14,-12.36,-73.56:99
-chr1 3684836 . T G 29.95 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=2;HaplotypeScore=5.28;MQ=57.94;MQ0=0;QD=0.88;SB=50.17 GT:AD:DP:GL:GQ 0/1:20,14:25:-13.81,-7.53,-70.58:62.78
-chr1 3685860 rs2799182 T C 179.63 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.18;MQ=58.63;MQ0=0;OQ=681.56;QD=13.36;SB=-324.12 GT:AD:DP:GL:GQ 0/1:23,28:50:-86.51,-15.07,-94.22:99
-chr1 3686231 rs61759305 C T 280.07 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=512.50;QD=17.08;SB=-238.52 GT:AD:DP:GL:GQ 0/1:14,16:29:-63.27,-8.74,-47.74:99
-chr1 3686750 rs8379 A C 132.74 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.70;MQ0=0;OQ=512.51;QD=8.27;SB=-204.80 GT:AD:DP:GL:GQ 0/1:39,23:59:-72.31,-17.77,-139.60:99
-chr1 3687151 rs2996428 C T 323.10 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=59.68;MQ0=0;OQ=1332.10;QD=18.25;SB=-588.63 GT:AD:DP:GL:GQ 0/1:30,43:68:-156.98,-20.49,-102.01:99
-chr1 3688388 rs2799186 C G 198.40 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=60.00;MQ0=0;OQ=1120.38;QD=14.55;SB=-296.13 GT:AD:DP:GL:GQ 0/1:44,32:77:-141.06,-25.73,-190.14:99
-chr1 3688807 rs12122058 C T 132.91 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=788.10;QD=15.16;SB=-353.46 GT:AD:DP:GL:GQ 0/1:27,25:50:-97.16,-15.07,-93.28:99
-chr1 3689428 rs2799185 G C 86.89 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.23;MQ0=0;OQ=644.64;QD=17.42;SB=-205.64 GT:AD:DP:GL:GQ 0/1:18,19:35:-78.30,-10.56,-70.47:99
-chr1 3689489 rs2799184 T G 198.26 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=4.30;MQ=56.35;MQ0=0;OQ=514.42;QD=13.19;SB=-238.40 GT:AD:DP:GL:GQ 0/1:19,20:37:-65.87,-11.14,-65.31:99
-chr1 3689844 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=16;HaplotypeScore=12.40;MQ=56.82;MQ0=0;OQ=207.53;QD=3.10;SB=47.88 GT:AD:DP:GL:GQ 0/1:50,16:53:-40.01,-15.97,-140.82:99
-chr1 3691351 rs2996426 A G 107.45 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.66;MQ=59.77;MQ0=0;OQ=576.97;QD=11.10;SB=-273.25 GT:AD:DP:GL:GQ 0/1:26,26:49:-75.76,-14.78,-98.82:99
-chr1 3693197 rs2368537 G C 138.15 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.55;MQ0=0;OQ=1805.49;QD=35.40;SB=-781.23 GT:AD:DP:GL:GQ 1/1:0,51:46:-184.17,-13.88,-0.03:99
-chr1 3693570 rs2253143 G A 60.94 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=3.58;MQ=58.41;MQ0=0;OQ=495.55;QD=11.26;SB=-141.61 GT:AD:DP:GL:GQ 0/1:26,18:41:-65.20,-12.37,-77.20:99
-chr1 3694312 rs12142183 T G 312.97 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=59.65;MQ0=0;OQ=615.52;QD=11.61;SB=-311.76 GT:AD:DP:GL:GQ 0/1:22,31:47:-79.00,-14.16,-79.12:99
-chr1 3694564 . G C 39.33 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=6.24;MQ=58.81;MQ0=0;QD=0.72;SB=44.18 GT:AD:DP:GL:GQ 0/1:42,12:37:-18.38,-11.17,-134.23:72.16
-chr1 3701498 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=71;Dels=0.03;HRun=20;HaplotypeScore=51.30;MQ=52.45;MQ0=0;OQ=259.27;QD=3.65;SB=80.25 GT:AD:DP:GL:GQ 0/1:46,23:54:-44.89,-15.68,-134.64:99
-chr1 3708347 rs6681383 G A 128.24 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.34;MQ0=0;OQ=1078.39;QD=18.92;SB=-322.85 GT:AD:DP:GL:GQ 0/1:24,33:53:-127.10,-15.97,-69.66:99
-chr1 3712148 rs2996425 A T 193.61 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.11;MQ=59.02;MQ0=0;OQ=2222.50;QD=35.85;SB=-1018.88 GT:AD:DP:GL:GQ 1/1:0,62:60:-225.85,-18.07,-0.02:99
-chr1 3714307 rs61759320 G A 326.68 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=53.55;MQ0=0;OQ=770.50;QD=14.01;SB=-354.84 GT:AD:DP:GL:GQ 0/1:29,25:53:-96.31,-15.97,-95.14:99
-chr1 3714663 . A C 15.04 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=8.17;MQ=57.66;MQ0=0;QD=0.38;SB=56.19 GT:AD:DP:GL:GQ 0/1:24,16:28:-13.21,-8.44,-81.36:47.74
-chr1 3727878 . C T 38.08 PASS AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=59.48;MQ0=0;OQ=1399.61;QD=17.28;SB=-662.18 GT:AD:DP:GL:GQ 0/1:40,41:81:-167.65,-24.40,-140.98:99
-chr1 3731503 . A G 18.90 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=3;HaplotypeScore=1.79;MQ=54.69;MQ0=0;QD=0.73;SB=5.04 GT:AD:DP:GL:GQ 0/1:21,5:21:-11.50,-6.33,-70.25:51.68
-chr1 3735976 rs1836 A G 124.85 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=59.74;MQ0=0;OQ=2210.40;QD=31.13;SB=-963.45 GT:AD:DP:GL:GQ 1/1:0,70:69:-227.21,-23.18,-2.59:99
-chr1 3736114 rs2275830 T C 634.35 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=2088.07;QD=30.71;SB=-734.31 GT:AD:DP:GL:GQ 1/1:0,68:67:-212.46,-20.22,-0.07:99
-chr1 3736443 rs2275828 G T 17.64 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=3.28;MQ=59.05;MQ0=0;OQ=2655.56;QD=36.38;SB=-1342.28 GT:AD:DP:GL:GQ 1/1:0,73:72:-269.16,-21.68,-0.02:99
-chr1 3736449 rs2275826 C G 89.02 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.10;MQ0=0;OQ=3375.97;QD=43.84;SB=-1685.64 GT:AD:DP:GL:GQ 1/1:0,77:77:-336.60,-23.20,-0.02:99
-chr1 3737179 rs4648417 C T 55.97 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=58.05;MQ0=0;OQ=1230.92;QD=34.19;SB=-377.48 GT:AD:DP:GL:GQ 1/1:0,35:33:-126.70,-9.95,-0.02:99
-chr1 3737440 rs6424058 C T 106.25 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=3.83;MQ=56.84;MQ0=0;OQ=1463.09;QD=34.84;SB=-699.35 GT:AD:DP:GL:GQ 1/1:0,42:38:-149.91,-11.45,-0.01:99
-chr1 3737463 rs6413779 T C 36.87 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=57.40;MQ0=0;OQ=1023.14;QD=33.00;SB=-220.63 GT:AD:DP:GL:GQ 1/1:0,31:31:-105.92,-9.34,-0.02:93.25
-chr1 3737945 rs7522227 A G 230.87 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.22;MQ0=0;OQ=2674.63;QD=34.29;SB=-1340.60 GT:AD:DP:GL:GQ 1/1:0,77:76:-271.07,-22.89,-0.02:99
-chr1 3738031 rs7524765 T C 717.11 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2886.44;QD=35.20;SB=-1305.64 GT:AD:DP:GL:GQ 1/1:0,82:82:-292.25,-24.70,-0.03:99
-chr1 3738548 rs17403836 A C 593.74 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.20;MQ0=0;OQ=3340.65;QD=35.92;SB=-1448.19 GT:AD:DP:GL:GQ 1/1:0,93:93:-333.07,-28.01,-0.02:99
-chr1 3738842 rs61768911 C G 310.36 PASS AC=2;AF=1.00;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.39;MQ0=2;OQ=606.83;QD=30.34;SB=-199.55 GT:AD:DP:GL:GQ 1/1:0,19:16:-64.28,-4.83,-0.01:48.16
-chr1 3738927 . T C 23.45 LowQual AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=5.48;MQ=47.67;MQ0=1;QD=0.60;SB=-5.57 GT:AD:DP:GL:GQ 0/1:32,7:31:-14.97,-9.34,-106.27:56.26
-chr1 3738930 . T C 7.68 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=48.29;MQ0=0;OQ=738.60;QD=19.44;SB=-353.38 GT:AD:DP:GL:GQ 0/1:6,32:31:-86.49,-9.35,-16.38:70.33
-chr1 3738954 rs61768912 T C 1249.83 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.18;MQ0=0;QD=28.41;SB=-561.89 GT:AD:DP:GL:GQ 1/1:0,43:40:-128.60,-12.06,-0.04:99
-chr1 3738962 rs61768913 A G 1521.07 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=53.09;MQ0=0;QD=28.17;SB=-501.21 GT:AD:DP:GL:GQ 1/1:0,54:48:-155.73,-14.47,-0.04:99
-chr1 3738964 rs61768914 A G 1823.57 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=53.35;MQ0=0;QD=32.56;SB=-678.27 GT:AD:DP:GL:GQ 1/1:0,56:52:-185.96,-15.66,-0.02:99
-chr1 3738975 rs61768915 T C 185.63 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=53.83;MQ0=0;OQ=2377.40;QD=34.96;SB=-853.97 GT:AD:DP:GL:GQ 1/1:0,68:67:-241.35,-20.18,-0.03:99
-chr1 3739217 rs6684560 G A 167.13 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=55.03;MQ0=0;OQ=2027.81;QD=36.87;SB=-859.02 GT:AD:DP:GL:GQ 1/1:1,54:53:-206.39,-15.97,-0.02:99
-chr1 3739448 rs6676260 T C 481.80 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1276.86;QD=30.40;SB=-555.08 GT:AD:DP:GL:GQ 1/1:0,42:41:-131.31,-12.36,-0.03:99
-chr1 3739507 rs10797344 C G 65.45 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=59.28;MQ0=0;OQ=2404.57;QD=37.57;SB=-1028.99 GT:AD:DP:GL:GQ 1/1:0,64:58:-244.08,-17.49,-0.04:99
-chr1 3739508 rs10797345 G A 56.93 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.68;MQ=59.28;MQ0=0;OQ=2416.64;QD=37.76;SB=-1154.54 GT:AD:DP:GL:GQ 1/1:0,64:63:-245.28,-18.99,-0.03:99
-chr1 3739554 rs6673716 A G 130.37 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.53;MQ0=0;OQ=1461.81;QD=29.83;SB=-615.96 GT:AD:DP:GL:GQ 1/1:0,49:46:-149.80,-13.87,-0.04:99
-chr1 3739633 rs6673807 A G 581.92 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=2050.62;QD=35.36;SB=-778.99 GT:AD:DP:GL:GQ 1/1:0,58:58:-208.67,-17.47,-0.02:99
-chr1 3740027 rs2368533 G A 618.30 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2881.32;QD=38.94;SB=-1374.05 GT:AD:DP:GL:GQ 1/1:0,74:73:-291.74,-21.99,-0.02:99
-chr1 3740589 rs6677381 A G 634.61 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=2780.11;QD=35.64;SB=-1088.76 GT:AD:DP:GL:GQ 1/1:0,78:77:-281.62,-23.19,-0.02:99
-chr1 3740591 rs6680017 T G 509.75 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=2637.83;QD=34.26;SB=-1082.49 GT:AD:DP:GL:GQ 1/1:0,77:75:-267.39,-22.59,-0.02:99
-chr1 3740758 . T A 7.56 PASS AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.28;MQ0=1;OQ=174.11;QD=4.71;SB=-20.31 GT:AD:DP:GL:GQ 0/1:28,9:34:-30.93,-10.24,-98.40:99
-chr1 3741138 rs2887273 C G 484.06 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2855.33;QD=43.26;SB=-1170.05 GT:AD:DP:GL:GQ 1/1:0,66:66:-289.13,-19.88,-0.02:99
-chr1 3741826 rs4648419 C G 552.08 PASS AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=0;OQ=3843.78;QD=42.24;SB=-1290.87 GT:AD:DP:GL:GQ 1/1:0,91:88:-383.38,-26.52,-0.03:99
-chr1 3742892 . G T 16.29 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=20;HaplotypeScore=18.89;MQ=55.03;MQ0=1;QD=0.28;SB=44.02 GT:AD:DP:GL:GQ 0/1:50,6:41:-19.70,-14.80,-98.51:49.02
-chr1 3742917 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.02;HRun=20;HaplotypeScore=34.21;MQ=57.45;MQ0=0;OQ=170.67;QD=3.28;SB=56.18 GT:AD:DP:GL:GQ 0/1:37,14:43:-33.01,-12.65,-114.45:99
-chr1 3742996 rs2275824 A T 710.47 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=2009.53;QD=35.25;SB=-882.57 GT:AD:DP:GL:GQ 1/1:0,57:56:-204.56,-16.87,-0.02:99
-chr1 3744349 rs12409082 G C 531.14 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3059.06;QD=43.09;SB=-1422.83 GT:AD:DP:GL:GQ 1/1:0,71:71:-309.52,-21.40,-0.02:99
-chr1 3744456 rs6683827 G T 2.38 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=4.28;MQ=58.86;MQ0=0;OQ=2501.40;QD=35.73;SB=-1071.46 GT:AD:DP:GL:GQ 1/1:0,70:69:-253.75,-20.78,-0.02:99
-chr1 3745535 rs1891941 T C 731.33 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2479.06;QD=35.42;SB=-1217.69 GT:AD:DP:GL:GQ 1/1:0,70:69:-251.51,-20.78,-0.02:99
-chr1 3745729 rs1891940 T C 456.28 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=1634.49;QD=34.78;SB=-697.28 GT:AD:DP:GL:GQ 1/1:0,47:46:-167.05,-13.85,-0.01:99
-chr1 3745735 rs1891939 T G 249.79 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=1553.73;QD=33.78;SB=-800.51 GT:AD:DP:GL:GQ 1/1:0,46:45:-158.97,-13.55,-0.02:99
-chr1 3745980 rs1539649 A G 625.14 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=2553.81;QD=30.77;SB=-1180.11 GT:AD:DP:GL:GQ 1/1:0,83:80:-259.03,-24.12,-0.06:99
-chr1 3746353 rs7535887 T C 654.18 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1854.47;QD=30.91;SB=-854.01 GT:AD:DP:GL:GQ 1/1:0,60:59:-189.08,-17.79,-0.05:99
-chr1 3746392 rs10797346 T C 305.08 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2579.74;QD=35.83;SB=-1200.15 GT:AD:DP:GL:GQ 1/1:0,72:72:-261.58,-21.69,-0.02:99
-chr1 3747160 rs10909800 C T 207.27 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2281.73;QD=39.34;SB=-904.67 GT:AD:DP:GL:GQ 1/1:0,58:58:-231.78,-17.47,-0.02:99
-chr1 3748578 rs4381131 T C 118.61 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=57.58;MQ0=0;OQ=1302.81;QD=35.21;SB=-612.36 GT:AD:DP:GL:GQ 1/1:0,37:37:-133.88,-11.14,-0.01:99
-chr1 3748616 rs4411084 A G 124.66 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.91;MQ=57.27;MQ0=0;OQ=1453.01;QD=29.06;SB=-634.87 GT:AD:DP:GL:GQ 1/1:0,50:46:-148.93,-13.88,-0.04:99
-chr1 3749212 rs3765774 T A 197.18 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=2826.29;QD=36.71;SB=-1358.75 GT:AD:DP:GL:GQ 1/1:0,77:76:-286.23,-22.89,-0.02:99
-chr1 3749644 rs10797347 A G 265.86 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=59.07;MQ0=0;OQ=1626.88;QD=34.61;SB=-812.67 GT:AD:DP:GL:GQ 1/1:0,47:46:-166.29,-13.86,-0.01:99
-chr1 3749797 rs10909801 A G 1.04 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=13.74;MQ=53.38;MQ0=0;OQ=1309.63;QD=23.81;SB=-631.48 GT:AD:DP:GL:GQ 1/1:0,53:41:-134.59,-12.37,-0.04:99
-chr1 3749921 rs6701360 G A 575.83 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.91;MQ0=0;OQ=2426.40;QD=38.51;SB=-904.68 GT:AD:DP:GL:GQ 1/1:0,63:63:-246.25,-18.99,-0.03:99
-chr1 3749974 rs6690371 A G 48.27 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=1.93;MQ=58.34;MQ0=0;OQ=1681.22;QD=35.03;SB=-728.27 GT:AD:DP:GL:GQ 1/1:0,48:48:-171.73,-14.47,-0.03:99
-chr1 3749989 rs6678020 C T 441.08 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.59;MQ0=0;OQ=1518.29;QD=37.96;SB=-571.34 GT:AD:DP:GL:GQ 1/1:0,40:39:-155.43,-11.75,-0.01:99
-chr1 3750090 rs6680552 C T 728 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.60;MQ0=1;OQ=1998.34;QD=35.06;SB=-998.84 GT:AD:DP:GL:GQ 1/1:0,57:51:-203.43,-15.36,-0.01:99
-chr1 3750216 rs6695657 T C 130.02 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.67;MQ0=0;OQ=1753.47;QD=29.72;SB=-613.96 GT:AD:DP:GL:GQ 1/1:0,59:56:-178.99,-16.89,-0.06:99
-chr1 3750378 rs10752723 A G 15.88 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.50;MQ=56.80;MQ0=0;OQ=1482.59;QD=32.95;SB=-488.54 GT:AD:DP:GL:GQ 1/1:1,43:41:-151.86,-12.35,-0.01:99
-chr1 3751141 rs6698930 T A 637.91 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=7;HaplotypeScore=46.26;MQ=41.75;MQ0=0;QD=7.78;SB=8.51 GT:AD:DP:GL:GQ 0/1:49,33:69:-87.87,-20.79,-167.40:99
-chr1 3751339 rs2275822 C T 226.46 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.23;MQ0=0;OQ=2373.96;QD=39.57;SB=-964.37 GT:AD:DP:GL:GQ 1/1:0,60:60:-241.00,-18.08,-0.02:99
-chr1 3751510 rs2275821 A G 573.45 PASS AC=2;AF=1.00;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.31;MQ0=0;OQ=3500.46;QD=35.36;SB=-1716.03 GT:AD:DP:GL:GQ 1/1:0,99:96:-349.05,-28.91,-0.03:99
-chr1 3751936 rs6699784 T C 22.54 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1634.61;QD=34.05;SB=-680.60 GT:AD:DP:GL:GQ 1/1:0,48:47:-167.07,-14.16,-0.02:99
-chr1 3751940 rs6699785 T C 457.63 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1716.61;QD=35.76;SB=-707.61 GT:AD:DP:GL:GQ 1/1:0,48:48:-175.26,-14.46,-0.02:99
-chr1 3752276 rs6687498 C A 0.86 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=7.86;MQ=58.29;MQ0=1;OQ=1565.75;QD=34.79;SB=-714.95 GT:AD:DP:GL:GQ 1/1:1,44:44:-160.17,-13.25,-0.01:99
-chr1 3752464 rs4494088 C T 130.82 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.01;MQ0=0;OQ=2585.87;QD=39.18;SB=-1275.71 GT:AD:DP:GL:GQ 1/1:0,66:65:-262.19,-19.58,-0.02:99
-chr1 3752510 . C A 11.64 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=20;HaplotypeScore=16.03;MQ=54.71;MQ0=1;QD=0.16;SB=98.34 GT:AD:DP:GL:GQ 0/1:63,8:53:-20.38,-15.96,-171.47:44.17
-chr1 3752581 rs4534323 A T 713.95 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2157.31;QD=36.56;SB=-930.57 GT:AD:DP:GL:GQ 1/1:0,59:59:-219.34,-17.77,-0.02:99
-chr1 3753724 rs12047360 G A 108.34 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=59.36;MQ0=0;OQ=1255.98;QD=34.89;SB=-564.33 GT:AD:DP:GL:GQ 1/1:0,36:33:-129.19,-9.94,-0.01:99
-chr1 3754321 rs34401151 C T 220.62 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.55;MQ0=0;OQ=2357.19;QD=36.83;SB=-1184.12 GT:AD:DP:GL:GQ 1/1:0,63:62:-242.18,-21.42,-2.88:99
-chr1 3754471 rs55873991 T C 460.04 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=2216.85;QD=34.64;SB=-478.52 GT:AD:DP:GL:GQ 1/1:0,64:60:-225.28,-18.07,-0.01:99
-chr1 3755409 rs4648346 G A 377.30 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=56.94;MQ0=0;OQ=2718.34;QD=38.83;SB=-1289.71 GT:AD:DP:GL:GQ 1/1:0,70:68:-275.43,-20.48,-0.02:99
-chr1 3755538 rs4648423 C T 3.24 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=5.11;MQ=59.49;MQ0=0;OQ=1662.33;QD=36.94;SB=-681.30 GT:AD:DP:GL:GQ 1/1:0,44:44:-169.84,-13.26,-0.02:99
-chr1 3755615 rs4648347 T C 415.08 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.19;MQ0=0;OQ=2002.26;QD=34.52;SB=-940.97 GT:AD:DP:GL:GQ 1/1:0,58:56:-203.83,-16.87,-0.02:99
-chr1 3755919 rs12097923 G T 175.21 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=59.51;MQ0=0;OQ=2007.64;QD=34.03;SB=-971.58 GT:AD:DP:GL:GQ 1/1:0,58:57:-204.37,-17.17,-0.02:99
-chr1 3756146 rs17404435 G T 642.91 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1775.93;QD=34.82;SB=-654.09 GT:AD:DP:GL:GQ 1/1:0,51:50:-181.19,-15.06,-0.02:99
-chr1 3756301 rs6683156 C T 153.50 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=59.62;MQ0=0;OQ=3593.95;QD=38.64;SB=-1767.70 GT:AD:DP:GL:GQ 1/1:0,92:90:-358.39,-27.12,-0.03:99
-chr1 3757458 rs3765779 A G 312.92 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1547.17;QD=29.19;SB=-677.55 GT:AD:DP:GL:GQ 1/1:0,53:50:-158.35,-15.08,-0.05:99
-chr1 3757556 rs3765780 C T 73.74 PASS AC=2;AF=1.00;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1220.87;QD=37.00;SB=-540.71 GT:AD:DP:GL:GQ 1/1:0,33:32:-125.68,-9.64,-0.01:96.30
-chr1 3758579 rs1539647 T C 5.15 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=3.94;MQ=58.65;MQ0=1;OQ=2215.43;QD=29.94;SB=-922.78 GT:AD:DP:GL:GQ 1/1:1,73:71:-228.15,-21.41,-3.03:99
-chr1 3758589 rs1539648 T C 162.50 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=59.09;MQ0=0;OQ=2319.86;QD=30.52;SB=-925.48 GT:AD:DP:GL:GQ 1/1:0,76:73:-235.63,-22.01,-0.06:99
-chr1 3759091 rs6657021 A G 451.01 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.04;MQ0=0;OQ=2173.33;QD=30.19;SB=-1093.08 GT:AD:DP:GL:GQ 1/1:0,72:68:-220.98,-20.51,-0.06:99
-chr1 3759136 rs6668213 G C 44.87 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.72;MQ0=0;OQ=2874.30;QD=41.66;SB=-1253.95 GT:AD:DP:GL:GQ 1/1:0,69:66:-291.04,-19.89,-0.02:99
-chr1 3759146 rs6693152 C T 203.33 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.07;MQ0=0;OQ=2711.10;QD=38.73;SB=-1194.58 GT:AD:DP:GL:GQ 1/1:0,70:68:-274.71,-20.49,-0.02:99
-chr1 3759189 rs6657132 A G 408.69 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=1707.03;QD=31.04;SB=-847.00 GT:AD:DP:GL:GQ 1/1:0,55:50:-174.32,-15.07,-0.03:99
-chr1 3759225 rs6668306 G C 258.29 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.53;MQ0=0;OQ=1917.17;QD=39.13;SB=-849.44 GT:AD:DP:GL:GQ 1/1:0,49:46:-195.32,-13.87,-0.02:99
-chr1 3759237 rs6693259 C T 255.19 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1813.57;QD=38.59;SB=-875.61 GT:AD:DP:GL:GQ 1/1:0,47:47:-184.96,-14.17,-0.02:99
-chr1 3759339 . T C 4.24 PASS AC=2;AF=1.00;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=37.66;MQ0=0;OQ=1291.89;QD=29.36;SB=-665.80 GT:AD:DP:GL:GQ 1/1:0,44:41:-132.82,-12.37,-0.04:99
-chr1 3759424 rs11576718 T C 18.88 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.78;MQ0=0;OQ=1915.98;QD=34.84;SB=-646.27 GT:AD:DP:GL:GQ 1/1:0,55:53:-195.20,-15.96,-0.02:99
-chr1 3759450 rs11578021 G C 393.67 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=2482.73;QD=42.08;SB=-1009.18 GT:AD:DP:GL:GQ 1/1:0,59:57:-251.88,-17.18,-0.02:99
-chr1 3760255 rs4130539 C A 200.10 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=59.43;MQ0=0;OQ=2921.40;QD=36.07;SB=-1317.55 GT:AD:DP:GL:GQ 1/1:0,81:81:-295.75,-24.40,-0.03:99
-chr1 3760285 rs4233023 G A 128.17 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.42;MQ0=0;OQ=2979.99;QD=37.25;SB=-1007.64 GT:AD:DP:GL:GQ 1/1:0,80:76:-301.61,-22.90,-0.03:99
-chr1 3760596 rs4582731 T C 194.06 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1740.97;QD=31.65;SB=-868.36 GT:AD:DP:GL:GQ 1/1:0,55:54:-177.73,-16.29,-0.05:99
-chr1 3760968 rs12023761 T C 207.14 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=57.12;MQ0=0;OQ=2651.31;QD=33.99;SB=-1110.83 GT:AD:DP:GL:GQ 1/1:0,78:75:-268.74,-22.59,-0.02:99
-chr1 3760980 rs12023762 T C 71.74 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.08;MQ=56.93;MQ0=0;OQ=2310.56;QD=34.49;SB=-1074.87 GT:AD:DP:GL:GQ 1/1:0,66:64:-234.66,-19.27,-0.02:99
-chr1 3761023 rs12026284 G A 45.52 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.92;MQ0=0;OQ=1613.24;QD=38.41;SB=-773.05 GT:AD:DP:GL:GQ 1/1:0,42:41:-164.92,-12.35,-0.01:99
-chr1 3761229 rs12024538 T C 108.72 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=57.43;MQ0=0;OQ=2622.46;QD=34.06;SB=-1093.09 GT:AD:DP:GL:GQ 1/1:0,77:74:-265.86,-22.29,-0.03:99
-chr1 3761407 rs7552678 C T 182.01 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=55.63;MQ0=0;OQ=2322.80;QD=37.46;SB=-1101.95 GT:AD:DP:GL:GQ 1/1:0,61:58:-235.88,-17.47,-0.01:99
-chr1 3761583 rs10909805 A T 36.48 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=57.39;MQ0=0;OQ=1183.25;QD=32.87;SB=-378.79 GT:AD:DP:GL:GQ 1/1:0,36:34:-121.93,-10.24,-0.02:99
-chr1 3762135 rs4648348 G T 313.87 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.61;MQ0=0;OQ=2805.56;QD=36.44;SB=-1091.90 GT:AD:DP:GL:GQ 1/1:0,77:77:-284.17,-23.19,-0.03:99
-chr1 3762966 rs6424059 C T 50.97 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1794.59;QD=39.88;SB=-207.77 GT:AD:DP:GL:GQ 1/1:0,45:45:-183.06,-13.56,-0.01:99
-chr1 3763112 rs6424060 C A 1.11 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=57.94;MQ0=0;OQ=1225.37;QD=36.04;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,34:33:-126.13,-9.94,-0.01:99
-chr1 3763448 rs7542369 C G 0.46 PASS AC=2;AF=1.00;AN=2;DB;DP=15;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=407.00;QD=27.13;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,15:12:-44.31,-3.64,-0.03:36.11
-chr1 3763578 rs4648428 A G 5.56 PASS AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=286.53;QD=20.47;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,13:11:-32.26,-3.33,-0.02:33.05
-chr1 3764486 rs10909806 C A 23.23 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=2.13;MQ=58.37;MQ0=0;OQ=1559.40;QD=35.44;SB=-546.78 GT:AD:DP:GL:GQ 1/1:0,44:43:-159.54,-12.95,-0.01:99
-chr1 3765314 rs4376673 C G 417.23 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1404.99;QD=36.03;SB=-615.54 GT:AD:DP:GL:GQ 1/1:0,39:36:-144.12,-10.87,-0.03:99
-chr1 3765882 rs9786959 A G 29.68 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.70;MQ0=0;OQ=1920.48;QD=30.48;SB=-862.57 GT:AD:DP:GL:GQ 1/1:0,63:60:-195.68,-18.09,-0.05:99
-chr1 3767471 rs11800725 A G 13.03 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=58.98;MQ0=0;OQ=1927.36;QD=30.11;SB=-765.33 GT:AD:DP:GL:GQ 1/1:0,64:61:-196.39,-18.41,-0.06:99
-chr1 3767577 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=17;HaplotypeScore=9.33;MQ=55.19;MQ0=0;OQ=73.00;QD=1.66;SB=10.79 GT:AD:DP:GL:GQ 0/1:33,10:33:-20.53,-9.94,-95.54:99
-chr1 3767595 . G A 13.29 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=17;HaplotypeScore=14.08;MQ=55.46;MQ0=0;QD=0.23;SB=74.24 GT:AD:DP:GL:GQ 0/1:47,10:46:-18.45,-13.86,-142.27:45.92
-chr1 3769011 rs4400555 C T 258.35 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.08;MQ0=0;OQ=2381.95;QD=39.05;SB=-1005.83 GT:AD:DP:GL:GQ 1/1:0,61:61:-241.80,-18.38,-0.02:99
-chr1 3769497 rs4573474 G C 208.99 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.06;MQ0=0;OQ=1909.70;QD=37.45;SB=-679.47 GT:AD:DP:GL:GQ 1/1:0,51:49:-194.60,-14.79,-0.05:99
-chr1 3769504 rs4475689 T C 437.54 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.81;MQ0=0;OQ=1544.26;QD=28.60;SB=-549.88 GT:AD:DP:GL:GQ 1/1:0,54:50:-158.07,-15.09,-0.05:99
-chr1 3769540 rs4393098 C T 134.88 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.73;MQ0=0;OQ=2714.04;QD=39.33;SB=-879.18 GT:AD:DP:GL:GQ 1/1:0,69:68:-275.01,-20.48,-0.02:99
-chr1 3770416 rs10909807 A G 70.24 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=59.66;MQ0=0;OQ=2327.40;QD=34.23;SB=-632.25 GT:AD:DP:GL:GQ 1/1:0,68:65:-236.35,-19.58,-0.03:99
-chr1 3770956 rs10797348 C A 725.50 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2194.69;QD=35.40;SB=-970.66 GT:AD:DP:GL:GQ 1/1:0,62:61:-223.07,-18.37,-0.02:99
-chr1 3770996 rs10752724 C G 36.73 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.68;MQ0=0;OQ=3059.04;QD=41.90;SB=-884.77 GT:AD:DP:GL:GQ 1/1:0,73:70:-309.51,-21.10,-0.03:99
-chr1 3772468 rs10909809 C T 66.95 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.41;MQ=58.92;MQ0=0;OQ=1387.22;QD=35.57;SB=-471.11 GT:AD:DP:GL:GQ 1/1:0,38:37:-142.33,-11.16,-0.02:99
-chr1 3773138 rs10909810 A C 280.94 PASS AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.04;MQ0=0;OQ=955.91;QD=32.96;SB=-323.98 GT:AD:DP:GL:GQ 1/1:0,29:29:-99.19,-8.74,-0.02:87.21
-chr1 3773433 rs10797349 C T 164.73 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=58.68;MQ0=0;OQ=1490.84;QD=33.88;SB=-752.63 GT:AD:DP:GL:GQ 1/1:0,44:39:-152.69,-11.75,-0.02:99
-chr1 3773480 rs10797350 T C 13.89 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=58.30;MQ0=0;OQ=1471.72;QD=30.66;SB=-684.88 GT:AD:DP:GL:GQ 1/1:0,48:45:-150.79,-13.57,-0.03:99
-chr1 3773523 rs10752726 T G 347.66 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=1497.10;QD=33.27;SB=-446.81 GT:AD:DP:GL:GQ 1/1:0,45:43:-153.31,-12.95,-0.01:99
-chr1 3773611 rs12035912 C T 197.79 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=58.30;MQ0=0;OQ=2493.51;QD=37.78;SB=-1130.03 GT:AD:DP:GL:GQ 1/1:0,66:64:-252.96,-19.28,-0.02:99
-chr1 3775032 . T C 552.80 SnpCluster AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=33.42;MQ=46.78;MQ0=0;QD=6.28;SB=-111.60 GT:AD:DP:GL:GQ 0/1:60,28:83:-83.58,-25.02,-222.80:99
-chr1 3775037 . G T 197.57 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=0;HaplotypeScore=30.55;MQ=47.65;MQ0=0;QD=2.00;SB=65.19 GT:AD:DP:GL:GQ 0/1:82,15:90:-57.60,-34.56,-265.76:99
-chr1 3775038 rs11801559 A G 304.07 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=1;HaplotypeScore=31.22;MQ=47.58;MQ0=0;QD=3.07;SB=-149.93 GT:AD:DP:GL:GQ 0/1:75,24:82:-58.40,-24.71,-264.98:99
-chr1 3775067 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=168;Dels=0.00;HRun=0;HaplotypeScore=55.99;MQ=43.63;MQ0=2;OQ=741.54;QD=4.41;SB=-115.85 GT:AD:DP:GL:GQ 0/1:87,38:131:-206.86,-129.42,-352.70:99
-chr1 3775068 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=171;Dels=0.00;HRun=2;HaplotypeScore=57.14;MQ=43.69;MQ0=2;OQ=621.12;QD=3.63;SB=-22.34 GT:AD:DP:GL:GQ 0/1:130,41:133:-105.49,-40.09,-359.21:99
-chr1 3775097 . C T 202.73 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=156;Dels=0.02;HRun=0;HaplotypeScore=180.15;MQ=42.01;MQ0=2;QD=1.30;SB=-48.46 GT:AD:DP:GL:GQ 0/1:127,21:125:-62.81,-39.25,-356.59:99
-chr1 3775132 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=0;HaplotypeScore=17.94;MQ=41.24;MQ0=3;OQ=65.49;QD=0.68;SB=-47.12 GT:AD:DP:GL:GQ 0/1:77,9:78:-49.90,-40.06,-295.84:98.32
-chr1 3779522 rs11581471 A G 100.85 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.41;MQ0=0;OQ=1287.54;QD=29.26;SB=-667.82 GT:AD:DP:GL:GQ 1/1:0,44:42:-132.38,-12.67,-0.05:99
-chr1 3779990 rs12130391 G A 164 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.47;MQ0=0;OQ=2160.23;QD=35.41;SB=-916.74 GT:AD:DP:GL:GQ 1/1:0,60:57:-219.63,-17.18,-0.03:99
-chr1 3780767 . T C 4.63 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=30.96;MQ0=11;OQ=368.82;QD=6.36;SB=-104.61 GT:AD:DP:GL:GQ 0/1:34,24:38:-51.63,-11.46,-83.55:99
-chr1 3781074 rs10752727 C T 2.58 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=7.70;MQ=37.12;MQ0=12;OQ=1286.15;QD=21.08;SB=-457.95 GT:AD:DP:GL:GQ 1/1:3,58:36:-135.18,-10.85,-2.98:78.66
-chr1 3783772 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=19;HaplotypeScore=32.14;MQ=55.75;MQ0=0;OQ=200.26;QD=4.01;SB=53.19 GT:AD:DP:GL:GQ 0/1:32,18:38:-34.76,-11.45,-99.41:99
-chr1 3784133 rs12132240 C T 668.84 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.52;MQ0=0;OQ=2396.10;QD=39.93;SB=-998.03 GT:AD:DP:GL:GQ 1/1:0,60:60:-243.21,-18.07,-0.02:99
-chr1 3785251 rs10737189 T C 42.26 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=4.18;MQ=59.45;MQ0=0;OQ=2617.88;QD=31.17;SB=-945.37 GT:AD:DP:GL:GQ 1/1:0,84:80:-265.43,-24.12,-0.06:99
-chr1 3786402 rs12071660 G A 151.32 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2743.00;QD=38.63;SB=-1108.49 GT:AD:DP:GL:GQ 1/1:0,71:69:-277.90,-20.79,-0.02:99
-chr1 3787079 rs4074710 T C 1.91 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=9.84;MQ=58.78;MQ0=0;OQ=1684.95;QD=27.18;SB=-797.66 GT:AD:DP:GL:GQ 1/1:2,60:56:-176.09,-16.89,-4.01:99
-chr1 3787169 rs61768959 C T 435.29 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1824.58;QD=38.82;SB=-789.07 GT:AD:DP:GL:GQ 1/1:0,47:46:-186.05,-13.86,-0.01:99
-chr1 3787855 rs4073324 C T 458.35 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1383.49;QD=37.39;SB=-414.06 GT:AD:DP:GL:GQ 1/1:0,37:37:-141.95,-11.15,-0.02:99
-chr1 3787909 rs4073323 A G 2.22 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=3.99;MQ=59.35;MQ0=0;OQ=1345.64;QD=32.04;SB=-424.45 GT:AD:DP:GL:GQ 1/1:0,42:40:-138.17,-12.05,-0.02:99
-chr1 3788260 rs12084944 C T 298.99 PASS AC=2;AF=1.00;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=888.25;QD=37.01;SB=-436.08 GT:AD:DP:GL:GQ 1/1:0,24:23:-92.42,-6.93,-0.01:69.22
-chr1 3788534 rs12030906 T C 0.68 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.02;HRun=0;HaplotypeScore=9.00;MQ=56.58;MQ0=0;OQ=1607.45;QD=29.23;SB=-436.47 GT:AD:DP:GL:GQ 1/1:0,54:48:-164.35,-14.16,-0.02:99
-chr1 3789424 rs4382652 G A 2153.41 Indel AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=4.66;MQ=56.10;MQ0=0;QD=35.30;SB=-1010.66 GT:AD:DP:GL:GQ 1/1:0,61:57:-218.95,-17.18,-0.03:99
-chr1 3790102 rs3205087 A G 382.60 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.28;MQ0=0;OQ=1027.83;QD=26.35;SB=-300.09 GT:AD:DP:GL:GQ 1/1:0,39:35:-106.42,-10.57,-0.05:99
-chr1 3790340 rs7555538 G T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=8;HaplotypeScore=0.92;MQ=59.43;MQ0=0;OQ=2444.86;QD=33.49;SB=-1058.90 GT:AD:DP:GL:GQ 1/1:0,73:70:-248.10,-21.09,-0.03:99
-chr1 3791107 rs10909817 T G 151.89 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=57.75;MQ0=0;OQ=1681.31;QD=32.33;SB=-830.07 GT:AD:DP:GL:GQ 1/1:0,51:49:-171.73,-14.76,-0.02:99
-chr1 3792631 rs11584721 G C 5.17 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=5.57;MQ=57.48;MQ0=0;OQ=2243.27;QD=40.06;SB=-1057.19 GT:AD:DP:GL:GQ 1/1:1,55:53:-227.93,-15.97,-0.02:99
-chr1 3793561 rs12136187 C A 227.66 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.95;MQ0=0;OQ=1328.46;QD=34.06;SB=-683.01 GT:AD:DP:GL:GQ 1/1:0,39:37:-136.44,-11.15,-0.01:99
-chr1 3793615 rs7367066 T C 611.54 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.19;MQ0=0;OQ=1618.23;QD=29.97;SB=-707.63 GT:AD:DP:GL:GQ 1/1:0,53:51:-165.45,-15.38,-0.04:99
-chr1 3795300 rs6678851 C T 1.35 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=5.47;MQ=59.65;MQ0=0;OQ=2468.27;QD=37.97;SB=-809.33 GT:AD:DP:GL:GQ 1/1:0,65:63:-250.43,-18.98,-0.02:99
-chr1 3795934 rs4075974 G A 558.47 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.49;MQ0=0;OQ=2140.67;QD=39.64;SB=-940.34 GT:AD:DP:GL:GQ 1/1:0,54:54:-217.66,-16.27,-0.01:99
-chr1 3796218 rs10909819 T C 98.14 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=58.14;MQ0=0;OQ=2198.60;QD=32.33;SB=-948.97 GT:AD:DP:GL:GQ 1/1:0,68:64:-223.47,-19.28,-0.03:99
-chr1 3796503 rs4520357 T A 245.19 PASS AC=2;AF=1.00;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.09;MQ0=0;OQ=3186.37;QD=35.40;SB=-1505.31 GT:AD:DP:GL:GQ 1/1:0,90:85:-322.25,-25.60,-0.02:99
-chr1 3797453 rs4274008 G C 114.81 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.18;MQ=59.65;MQ0=0;OQ=2739.80;QD=42.15;SB=-1186.93 GT:AD:DP:GL:GQ 1/1:0,65:64:-277.59,-19.29,-0.02:99
-chr1 3798031 rs6701422 T C 38.91 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=4.04;MQ=51.74;MQ0=0;OQ=1832.37;QD=30.04;SB=-733.76 GT:AD:DP:GL:GQ 1/1:0,60:57:-186.87,-17.19,-0.05:99
-chr1 3798222 rs4446914 G A 207.99 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.90;MQ=50.14;MQ0=0;OQ=2015.61;QD=38.03;SB=-988.99 GT:AD:DP:GL:GQ 1/1:0,53:52:-205.17,-15.67,-0.02:99
-chr1 3798375 . A G 51.46 PASS AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=16.12;MQ0=4;OQ=176.38;QD=13.57;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,13:6:-21.21,-1.81,-0.00:18.05
-chr1 3798911 rs12757258 A C 37.05 LowQual AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=30.57;MQ0=1;QD=7.41;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,3:2:-7.11,-0.60,-0.00:6.02
-chr1 3798957 rs12757292 A C 18.79 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.60;MQ0=1;OQ=75.37;QD=3.14;SB=-10.00 GT:AD:DP:GL:GQ 0/1:11,13:13:-14.74,-3.92,-26.95:99
-chr1 3799283 rs11807227 G A 605.39 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.57;MQ0=0;OQ=2371.97;QD=38.88;SB=-744.48 GT:AD:DP:GL:GQ 1/1:0,61:60:-240.80,-18.08,-0.02:99
-chr1 3800246 rs4568776 A G 199.91 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=2257.59;QD=31.80;SB=-934.52 GT:AD:DP:GL:GQ 1/1:0,71:68:-229.39,-20.50,-0.04:99
-chr1 3801063 rs7515869 A T 278.49 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=61.08;MQ0=0;OQ=1948.49;QD=33.03;SB=-981.77 GT:AD:DP:GL:GQ 1/1:0,57:54:-198.46,-16.27,-0.03:99
-chr1 3801228 rs6674160 G A 506.45 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.72;MQ0=0;OQ=1203.93;QD=37.62;SB=-496.15 GT:AD:DP:GL:GQ 1/1:0,32:32:-124.00,-9.65,-0.02:96.29
-chr1 3801965 rs10909822 A C 705.90 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=23;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=42.43;MQ0=0;QD=30.69;SB=-332.99 GT:AD:DP:GL:GQ 1/1:1,22:22:-74.19,-6.63,-0.02:66.14
-chr1 3801968 . T A 440.70 SnpCluster AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=38.89;MQ0=0;QD=11.60;SB=-170.81 GT:AD:DP:GL:GQ 0/1:21,17:32:-56.99,-9.64,-61.90:99
-chr1 3801971 . G T 508.15 SnpCluster AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=35.42;MQ0=0;QD=14.52;SB=-198.56 GT:AD:DP:GL:GQ 0/1:17,18:35:-64.64,-10.54,-61.42:99
-chr1 3801978 . G C 1059.09 Indel;SnpCluster AC=2;AF=1.00;AN=2;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=45.04;MQ0=0;QD=40.73;SB=-392.21 GT:AD:DP:GL:GQ 1/1:0,26:25:-109.50,-7.53,-0.01:75.25
-chr1 3802009 rs12133786 A C 321.15 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=52.45;MQ0=0;OQ=1401.55;QD=33.37;SB=-709.03 GT:AD:DP:GL:GQ 1/1:0,42:41:-143.76,-12.35,-0.02:99
-chr1 3802570 rs10797352 T C 148.57 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.68;MQ0=0;OQ=1740.38;QD=32.84;SB=-623.49 GT:AD:DP:GL:GQ 1/1:0,53:51:-177.65,-15.37,-0.03:99
-chr1 3802708 rs10797353 C G 720.59 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2712.05;QD=38.74;SB=-1379.38 GT:AD:DP:GL:GQ 1/1:0,69:70:-279.01,-24.65,-4.23:99
-chr1 3804150 rs10797354 T C 170.50 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.56;MQ0=0;OQ=1825.12;QD=32.59;SB=-712.23 GT:AD:DP:GL:GQ 1/1:0,56:54:-186.12,-16.27,-0.03:99
-chr1 3804602 rs6658198 T C 302.07 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.62;MQ0=0;OQ=2079.20;QD=34.65;SB=-977.94 GT:AD:DP:GL:GQ 1/1:0,60:60:-211.53,-18.07,-0.02:99
-chr1 3806368 rs35131135 T C 13.18 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=58.87;MQ0=0;OQ=1257.30;QD=30.67;SB=-415.16 GT:AD:DP:GL:GQ 1/1:0,40:36:-129.33,-10.85,-0.01:99
-chr1 3806714 rs61770363 G A 10.79 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.71;MQ0=0;OQ=641.87;QD=35.66;SB=-278.65 GT:AD:DP:GL:GQ 1/1:0,18:18:-67.78,-5.43,-0.01:54.17
-chr1 3806753 rs4072725 C T 77.05 PASS AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.52;MQ0=0;OQ=544.23;QD=34.01;SB=-280.66 GT:AD:DP:GL:GQ 1/1:0,16:15:-58.01,-4.52,-0.01:45.14
-chr1 3808604 rs10797355 T C 125.29 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=53.60;MQ0=1;OQ=2350.13;QD=34.56;SB=-914.68 GT:AD:DP:GL:GQ 1/1:0,68:66:-238.63,-19.89,-0.03:99
-chr1 3808731 rs10797356 G A 43.83 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.07;MQ=58.71;MQ0=0;OQ=2012.52;QD=37.27;SB=-776.06 GT:AD:DP:GL:GQ 1/1:0,54:52:-204.86,-15.67,-0.02:99
-chr1 3809184 rs6672335 A G 119.40 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.56;MQ0=0;OQ=1683.69;QD=31.77;SB=-530.84 GT:AD:DP:GL:GQ 1/1:0,53:48:-171.97,-14.46,-0.02:99
-chr1 3809865 rs10909828 G A 654.97 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=2184.41;QD=38.32;SB=-826.35 GT:AD:DP:GL:GQ 1/1:0,57:56:-222.04,-16.87,-0.02:99
-chr1 3809876 rs12139857 G C 137.16 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.22;MQ0=0;OQ=2518.12;QD=42.68;SB=-984.74 GT:AD:DP:GL:GQ 1/1:0,59:58:-255.41,-17.48,-0.02:99
-chr1 3811076 rs6687869 G A 107.90 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.45;MQ0=0;OQ=1628.97;QD=38.79;SB=-568.34 GT:AD:DP:GL:GQ 1/1:0,42:42:-166.50,-12.65,-0.01:99
-chr1 3811194 rs10797357 G A 521.93 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.15;MQ0=0;OQ=1858.19;QD=37.92;SB=-535.68 GT:AD:DP:GL:GQ 1/1:0,49:48:-189.42,-14.46,-0.01:99
-chr1 3812563 rs10909830 C T 206.83 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=58.81;MQ0=0;OQ=2305.91;QD=36.60;SB=-919.31 GT:AD:DP:GL:GQ 1/1:0,63:60:-234.20,-18.08,-0.02:99
-chr1 3812792 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=14.74;MQ=58.39;MQ0=0;OQ=154.04;QD=2.80;SB=80.30 GT:AD:DP:GL:GQ 0/1:43,12:42:-31.36,-12.67,-148.77:99
-chr1 3816486 rs35332894 A G 12.94 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.52;MQ=58.25;MQ0=1;OQ=1726.98;QD=27.41;SB=-682.71 GT:AD:DP:GL:GQ 1/1:0,63:54:-176.33,-16.29,-0.05:99
-chr1 3817341 rs61770379 C T 109.94 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.38;MQ0=0;OQ=1418.14;QD=38.33;SB=-728.97 GT:AD:DP:GL:GQ 1/1:0,37:36:-145.41,-10.84,-0.01:99
-chr1 3819020 rs34825671 C T 409.20 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1564.33;QD=39.11;SB=-750.02 GT:AD:DP:GL:GQ 1/1:0,40:40:-160.03,-12.05,-0.01:99
-chr1 3819278 rs35368826 T C 12.24 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=60.00;MQ0=0;OQ=1199.67;QD=27.90;SB=-424.22 GT:AD:DP:GL:GQ 1/1:0,43:38:-123.59,-11.46,-0.04:99
-chr1 3819474 rs35583447 A G 89.06 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.69;MQ0=0;OQ=1939.06;QD=31.79;SB=-974.91 GT:AD:DP:GL:GQ 1/1:0,61:57:-197.52,-17.18,-0.03:99
-chr1 3819901 rs34284135 A G 55.75 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.81;MQ0=0;OQ=1296.25;QD=30.15;SB=-641.91 GT:AD:DP:GL:GQ 1/1:0,43:38:-133.23,-11.45,-0.02:99
-chr1 3820479 rs4073647 C A 185.05 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=59.55;MQ0=0;OQ=1638.97;QD=32.14;SB=-804.86 GT:AD:DP:GL:GQ 1/1:0,51:47:-167.50,-14.16,-0.02:99
-chr1 3820963 rs35355307 G A 127.74 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.69;MQ0=0;OQ=2262.75;QD=37.09;SB=-711.99 GT:AD:DP:GL:GQ 1/1:0,61:59:-229.89,-17.78,-0.03:99
-chr1 3821092 rs35241263 A G 89.02 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.63;MQ0=0;OQ=1378.97;QD=27.04;SB=-599.21 GT:AD:DP:GL:GQ 1/1:0,51:45:-141.53,-13.58,-0.05:99
-chr1 3821416 rs34803434 G A 80.51 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=58.07;MQ0=0;OQ=1633.32;QD=35.51;SB=-688.34 GT:AD:DP:GL:GQ 1/1:1,45:44:-166.94,-13.26,-0.02:99
-chr1 3823053 rs61770387 C T 609.64 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2714.99;QD=39.35;SB=-1139.68 GT:AD:DP:GL:GQ 1/1:0,69:68:-275.10,-20.48,-0.02:99
-chr1 3823181 rs61770388 T C 199.61 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.19;MQ0=0;OQ=1728.56;QD=33.24;SB=-864.04 GT:AD:DP:GL:GQ 1/1:0,52:50:-176.46,-15.06,-0.02:99
-chr1 3824979 rs61770390 T C 82.45 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=55.31;MQ0=0;OQ=486.55;QD=7.85;SB=-261.22 GT:AD:DP:GL:GQ 0/1:37,25:59:-69.72,-17.78,-147.85:99
-chr1 3824990 . C T 3.46 PASS AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=3.66;MQ=55.46;MQ0=0;OQ=1251.91;QD=19.56;SB=-545.38 GT:AD:DP:GL:GQ 0/1:27,37:61:-146.86,-18.39,-82.02:99
-chr1 3825051 . C A 3.22 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=2;HaplotypeScore=3.18;MQ=58.29;MQ0=0;OQ=820.60;QD=11.56;SB=-414.89 GT:AD:DP:GL:GQ 0/1:42,29:71:-106.73,-21.38,-145.16:99
-chr1 3825054 . T C 10.09 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.18;MQ=58.08;MQ0=0;OQ=722.16;QD=10.47;SB=-351.97 GT:AD:DP:GL:GQ 0/1:40,28:65:-95.08,-19.58,-155.89:99
-chr1 3825324 rs61770392 A T 88.32 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=57.20;MQ0=0;OQ=1894.97;QD=35.09;SB=-920.36 GT:AD:DP:GL:GQ 1/1:0,54:51:-193.10,-15.37,-0.02:99
-chr1 3827005 . C T 22.22 LowQual AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=43.17;MQ0=3;QD=1.48;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,3:9:-8.21,-2.71,-24.78:55.03
-chr1 3827011 . C T 25.21 LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=2.11;MQ=38.99;MQ0=3;QD=1.80;SB=-10.00 GT:AD:DP:GL:GQ 0/1:12,2:8:-8.21,-2.41,-21.31:58.03
-chr1 3830505 rs35265992 A G 0.12 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=4;HaplotypeScore=5.22;MQ=58.50;MQ0=0;OQ=970.90;QD=17.34;SB=-315.39 GT:AD:DP:GL:GQ 0/1:20,36:52:-116.04,-15.67,-75.68:99
-chr1 3830738 rs35974482 G A 171.95 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=57.87;MQ0=0;OQ=551.40;QD=12.53;SB=-198.84 GT:AD:DP:GL:GQ 0/1:25,19:40:-70.48,-12.05,-78.52:99
-chr1 3830888 rs35314156 G C 209.73 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.07;MQ0=0;OQ=668.40;QD=13.37;SB=-257.46 GT:AD:DP:GL:GQ 0/1:30,20:50:-85.20,-15.08,-125.99:99
-chr1 3831972 rs34835780 T C 632.20 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.64;MQ0=0;OQ=2285.64;QD=35.16;SB=-1132.81 GT:AD:DP:GL:GQ 1/1:0,65:64:-232.17,-19.28,-0.02:99
-chr1 3833915 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=79;Dels=0.00;HRun=0;HaplotypeScore=17.15;MQ=47.19;MQ0=1;OQ=288.77;QD=3.66;SB=-113.05 GT:AD:DP:GL:GQ 0/1:64,15:78:-55.66,-23.49,-226.25:99
-chr1 3895148 . C A 18 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=35.10;MQ0=1;OQ=333.31;QD=9.80;SB=-100.81 GT:AD:DP:GL:GQ 0/1:15,18:23:-43.54,-6.93,-34.49:99
-chr1 3895632 . G A 3.06 PASS AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=4;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=959.16;QD=14.11;SB=-372.32 GT:AD:DP:GL:GQ 0/1:38,30:68:-119.69,-20.49,-137.83:99
-chr1 3895766 rs61770398 T C 202.83 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.65;MQ=59.18;MQ0=0;OQ=960.24;QD=12.98;SB=-389.21 GT:AD:DP:GL:GQ 0/1:40,34:73:-121.30,-21.99,-162.55:99
-chr1 3899769 . C G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=8.09;MQ=59.49;MQ0=0;OQ=340.78;QD=7.57;SB=47.18 GT:AD:DP:GL:GQ 0/1:26,19:34:-47.63,-10.27,-85.91:99
-chr1 3902626 rs12073174 A G 196.76 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.14;MQ0=0;OQ=542.74;QD=11.31;SB=-148.64 GT:AD:DP:GL:GQ 0/1:27,21:46:-71.41,-13.85,-105.98:99
-chr1 3902680 rs61770400 C T 70.11 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=59.24;MQ0=0;OQ=954.92;QD=15.65;SB=-346.04 GT:AD:DP:GL:GQ 0/1:29,32:59:-116.56,-17.78,-99.06:99
-chr1 3903888 . C T 983.33 SnpCluster AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.15;MQ0=0;QD=17.88;SB=-501.10 GT:AD:DP:GL:GQ 0/1:24,31:52:-117.28,-15.67,-81.69:99
-chr1 3903897 rs12076404 C T 1044.63 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.20;MQ0=0;QD=18.01;SB=-538.06 GT:AD:DP:GL:GQ 0/1:25,33:54:-124.01,-16.27,-82.66:99
-chr1 3903898 . G A 621.65 SnpCluster AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.17;MQ0=0;QD=11.10;SB=-272.76 GT:AD:DP:GL:GQ 0/1:33,23:52:-81.12,-15.67,-110.15:99
-chr1 3904122 . C T 64.01 PASS AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=58.92;MQ0=0;OQ=1312.00;QD=16.00;SB=-449.98 GT:AD:DP:GL:GQ 0/1:43,39:81:-158.89,-24.40,-148.69:99
-chr1 3904123 rs7518198 G A 275.18 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.77;MQ=58.92;MQ0=0;OQ=1318.95;QD=16.08;SB=-404.76 GT:AD:DP:GL:GQ 0/1:38,44:78:-158.67,-23.50,-132.87:99
-chr1 3904259 rs55651676 C G 11.26 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=3;HaplotypeScore=0.67;MQ=58.80;MQ0=0;OQ=719.49;QD=18.45;SB=-354.47 GT:AD:DP:GL:GQ 0/1:17,22:35:-85.79,-10.56,-59.36:99
-chr1 3904673 rs56300127 T C 189.23 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.07;MQ0=0;OQ=384.21;QD=11.30;SB=-194.60 GT:AD:DP:GL:GQ 0/1:17,17:31:-51.05,-9.34,-58.99:99
-chr1 3905021 rs10915614 A G 3.58 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=4;HaplotypeScore=1.21;MQ=59.48;MQ0=0;OQ=428.89;QD=9.75;SB=-152.44 GT:AD:DP:GL:GQ 0/1:24,19:41:-58.53,-12.36,-93.35:99
-chr1 3905038 . G A 50.50 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.41;MQ0=0;OQ=477.39;QD=12.24;SB=-188.87 GT:AD:DP:GL:GQ 0/1:22,17:37:-62.18,-11.16,-67.50:99
-chr1 3905246 . C T 93.17 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=58.57;MQ0=0;OQ=1011.86;QD=16.32;SB=-440.98 GT:AD:DP:GL:GQ 0/1:30,32:58:-121.96,-17.49,-85.78:99
-chr1 3905920 rs7548668 T C 26.57 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=6.64;MQ=59.57;MQ0=0;OQ=666.76;QD=12.35;SB=-179.62 GT:AD:DP:GL:GQ 0/1:27,27:46:-83.82,-13.86,-87.80:99
-chr1 3906227 rs9793287 T C 337.13 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.61;MQ0=0;OQ=444.12;QD=9.25;SB=-215.36 GT:AD:DP:GL:GQ 0/1:27,21:46:-61.57,-13.87,-101.57:99
-chr1 3906248 rs12562706 C A 152.11 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=59.59;MQ0=0;OQ=415.45;QD=9.23;SB=-231.91 GT:AD:DP:GL:GQ 0/1:25,20:41:-57.18,-12.35,-86.80:99
-chr1 3906531 rs7526903 G A 280.93 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=909.30;QD=17.83;SB=-442.97 GT:AD:DP:GL:GQ 0/1:23,27:47:-108.38,-14.16,-65.40:99
-chr1 3906648 rs7551771 C T 37.89 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=2.80;MQ=60.06;MQ0=0;OQ=776.93;QD=15.54;SB=-354.36 GT:AD:DP:GL:GQ 0/1:26,24:48:-95.43,-14.46,-92.96:99
-chr1 3906868 rs7519349 A G 578.45 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=764.11;QD=13.64;SB=-362.95 GT:AD:DP:GL:GQ 0/1:26,30:56:-96.58,-16.88,-105.57:99
-chr1 3906970 rs7519458 A G 232.59 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.80;MQ=60.00;MQ0=0;OQ=762.22;QD=13.14;SB=-199.60 GT:AD:DP:GL:GQ 0/1:26,31:57:-96.69,-17.19,-106.25:99
-chr1 3907888 rs10799162 T C 190.81 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=58.79;MQ0=0;OQ=719.58;QD=13.33;SB=-230.44 GT:AD:DP:GL:GQ 0/1:27,27:53:-91.22,-15.97,-102.46:99
-chr1 3907889 rs10799163 G T 86.43 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=58.79;MQ0=0;OQ=758.50;QD=14.05;SB=-193.54 GT:AD:DP:GL:GQ 0/1:27,26:51:-94.50,-15.37,-86.70:99
-chr1 3907912 rs10915345 G A 203.29 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=59.62;MQ0=0;OQ=1037.45;QD=17.01;SB=-258.26 GT:AD:DP:GL:GQ 0/1:29,32:57:-124.21,-17.18,-83.11:99
-chr1 3909896 rs6683165 G A 201.77 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=59.62;MQ0=0;OQ=837.44;QD=12.88;SB=-252.13 GT:AD:DP:GL:GQ 0/1:38,27:62:-105.71,-18.68,-120.77:99
-chr1 3910104 rs10799194 C T 90.26 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.69;MQ=60.00;MQ0=0;OQ=794.06;QD=13.23;SB=-418.44 GT:AD:DP:GL:GQ 0/1:34,26:57:-99.88,-17.19,-98.75:99
-chr1 3919557 rs9426474 A G 111.97 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.97;MQ0=0;OQ=1753.83;QD=29.73;SB=-828.62 GT:AD:DP:GL:GQ 1/1:0,59:55:-179.01,-16.59,-0.05:99
-chr1 3922104 rs9426475 T C 209.50 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=54.82;MQ0=0;OQ=1570.14;QD=28.55;SB=-720.64 GT:AD:DP:GL:GQ 1/1:0,55:50:-160.65,-15.09,-0.06:99
-chr1 3922325 rs10915469 T C 562.16 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1863.57;QD=28.24;SB=-798.65 GT:AD:DP:GL:GQ 1/1:0,66:58:-189.99,-17.49,-0.05:99
-chr1 3922572 rs7540846 C T 41.15 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=0.57;MQ=53.34;MQ0=0;OQ=2905.34;QD=34.59;SB=-1359.03 GT:AD:DP:GL:GQ 1/1:0,81:75:-294.15,-22.60,-0.03:99
-chr1 3922839 rs7516192 G C 540.09 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.04;MQ0=0;OQ=2588.44;QD=42.43;SB=-1244.89 GT:AD:DP:GL:GQ 1/1:0,61:60:-262.44,-18.08,-0.02:99
-chr1 3922855 rs9426476 A G 185.57 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.74;MQ=58.63;MQ0=0;OQ=2064.09;QD=34.40;SB=-842.35 GT:AD:DP:GL:GQ 1/1:0,60:58:-210.01,-17.47,-0.02:99
-chr1 3922974 rs7541241 C A 552.27 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.64;MQ0=0;OQ=1520.98;QD=33.80;SB=-673.30 GT:AD:DP:GL:GQ 1/1:0,45:44:-155.71,-13.26,-0.03:99
-chr1 3923246 rs9426498 T C 9.78 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=52.33;MQ0=0;OQ=1450.84;QD=25.91;SB=-720.70 GT:AD:DP:GL:GQ 1/1:0,56:46:-148.71,-13.88,-0.05:99
-chr1 3923458 rs9426499 A C 507.51 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1349.47;QD=30.67;SB=-364.89 GT:AD:DP:GL:GQ 1/1:0,44:42:-138.57,-12.66,-0.04:99
-chr1 3923596 rs9426477 A G 619.10 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=2188.14;QD=34.73;SB=-945.36 GT:AD:DP:GL:GQ 1/1:0,63:61:-222.42,-18.37,-0.02:99
-chr1 3923941 rs6698811 T C 664.67 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=2773.83;QD=33.83;SB=-1404.50 GT:AD:DP:GL:GQ 1/1:0,82:80:-281.00,-24.10,-0.03:99
-chr1 3936055 rs10753378 T C 376.82 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.51;MQ0=0;OQ=543.43;QD=11.56;SB=-218.27 GT:AD:DP:GL:GQ 0/1:23,24:45:-71.19,-13.57,-90.09:99
-chr1 3938219 . C T 61.19 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.45;MQ=59.60;MQ0=0;OQ=740.10;QD=12.76;SB=-319.83 GT:AD:DP:GL:GQ 0/1:30,28:53:-93.28,-15.99,-88.25:99
-chr1 3940015 rs4654525 C T 311.29 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.10;MQ0=0;OQ=1004.75;QD=15.00;SB=-479.00 GT:AD:DP:GL:GQ 0/1:36,31:66:-123.64,-19.88,-133.78:99
-chr1 3942839 rs60972376 A C 11.72 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=4.30;MQ=58.67;MQ0=0;OQ=585.81;QD=11.96;SB=-197.90 GT:AD:DP:GL:GQ 0/1:20,28:43:-74.82,-12.96,-73.58:99
-chr1 3942909 rs55887893 C T 197.25 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.21;MQ=60.00;MQ0=0;OQ=588.30;QD=11.77;SB=-314.85 GT:AD:DP:GL:GQ 0/1:29,21:47:-76.28,-14.17,-92.23:99
-chr1 3944651 rs59118111 G C 246.41 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=60.00;MQ0=0;OQ=1068.67;QD=16.44;SB=-449.44 GT:AD:DP:GL:GQ 0/1:32,33:64:-129.45,-19.30,-140.55:99
-chr1 3945187 rs4654538 G A 29.36 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.53;MQ=58.81;MQ0=0;OQ=1094.72;QD=19.90;SB=-430.80 GT:AD:DP:GL:GQ 0/1:23,32:55:-129.32,-16.57,-83.23:99
-chr1 3947137 rs4654543 T C 110.66 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=382.96;QD=9.82;SB=-135.53 GT:AD:DP:GL:GQ 0/1:21,18:38:-53.04,-11.46,-84.39:99
-chr1 3947479 rs10449244 C A 197.72 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=60.00;MQ0=0;OQ=744.81;QD=13.07;SB=-230.89 GT:AD:DP:GL:GQ 0/1:29,28:53:-93.73,-15.97,-94.52:99
-chr1 3948534 rs4654544 A G 534.93 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=551.19;QD=12.53;SB=-251.96 GT:AD:DP:GL:GQ 0/1:21,23:44:-71.67,-13.27,-84.12:99
-chr1 3949636 rs4654436 T C 195.22 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=59.16;MQ0=0;OQ=834.97;QD=11.60;SB=-298.88 GT:AD:DP:GL:GQ 0/1:38,34:66:-106.67,-19.89,-140.32:99
-chr1 3949646 rs6426416 A T 32.24 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=2.47;MQ=59.20;MQ0=0;OQ=1168.58;QD=15.38;SB=-401.17 GT:AD:DP:GL:GQ 0/1:38,38:72:-141.84,-21.70,-126.75:99
-chr1 3950380 . A G 266.35 PASS AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1356.42;QD=15.96;SB=-652.62 GT:AD:DP:GL:GQ 0/1:40,45:85:-164.53,-25.60,-164.89:99
-chr1 3950813 rs10737411 A G 175.98 PASS AC=1;AF=0.50;AN=2;DB;DP=108;Dels=0.00;HRun=1;HaplotypeScore=2.09;MQ=59.83;MQ0=0;OQ=1386.28;QD=12.84;SB=-502.53 GT:AD:DP:GL:GQ 0/1:55,53:107:-174.15,-32.24,-226.13:99
-chr1 3951883 rs6657331 G C 1.76 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.77;MQ=59.14;MQ0=0;OQ=976.24;QD=22.70;SB=-437.36 GT:AD:DP:GL:GQ 0/1:16,27:40:-112.97,-12.06,-59.28:99
-chr1 3951915 rs12145443 C T 0.21 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=58.72;MQ0=0;OQ=829.82;QD=21.84;SB=-313.85 GT:AD:DP:GL:GQ 0/1:13,25:37:-97.41,-11.15,-45.43:99
-chr1 3952816 rs10799236 A G 574.49 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=747.27;QD=14.10;SB=-330.89 GT:AD:DP:GL:GQ 0/1:27,26:52:-93.67,-15.66,-106.05:99
-chr1 3953295 rs12038964 T C 361.41 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.86;MQ0=0;OQ=750.82;QD=12.31;SB=-348.04 GT:AD:DP:GL:GQ 0/1:30,31:60:-96.45,-18.08,-120.40:99
-chr1 3953370 rs12040628 A G 147.24 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=59.55;MQ0=0;OQ=749.75;QD=14.70;SB=-277.27 GT:AD:DP:GL:GQ 0/1:21,30:49:-93.03,-14.77,-83.59:99
-chr1 3954832 rs9426500 A C 437.18 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=970.97;QD=16.46;SB=-363.09 GT:AD:DP:GL:GQ 0/1:25,34:59:-118.15,-17.77,-92.14:99
-chr1 3955140 rs7413013 G C 5.69 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.97;MQ=59.17;MQ0=0;OQ=1282.99;QD=22.91;SB=-362.10 GT:AD:DP:GL:GQ 0/1:21,35:56:-148.46,-16.87,-92.34:99
-chr1 3955487 rs9426501 T C 61.29 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=4.29;MQ=58.95;MQ0=0;OQ=1025.38;QD=16.54;SB=-268.62 GT:AD:DP:GL:GQ 0/1:26,36:60:-123.90,-18.08,-97.56:99
-chr1 3956324 rs28609919 G C 274.82 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.69;MQ0=0;OQ=890.13;QD=14.84;SB=-464.74 GT:AD:DP:GL:GQ 0/1:33,27:59:-110.08,-17.78,-139.21:99
-chr1 3957249 rs12756251 G A 25.08 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=3.32;MQ=59.14;MQ0=0;OQ=1510.62;QD=18.65;SB=-581.41 GT:AD:DP:GL:GQ 0/1:36,45:78:-177.84,-23.50,-121.43:99
-chr1 3957262 rs12733769 T A 184.98 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=59.13;MQ0=0;OQ=1410.63;QD=17.63;SB=-590.40 GT:AD:DP:GL:GQ 0/1:34,46:77:-167.55,-23.20,-118.80:99
-chr1 3957348 rs12135298 A G 336.09 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.25;MQ0=0;OQ=781.36;QD=12.21;SB=-403.89 GT:AD:DP:GL:GQ 0/1:34,30:63:-100.41,-18.99,-132.61:99
-chr1 3959579 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=7.87;MQ=33.13;MQ0=5;OQ=83.58;QD=1.58;SB=-67.89 GT:AD:DP:GL:GQ 0/1:44,9:38:-23.11,-11.47,-97.21:99
-chr1 3959589 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=8.30;MQ=33.13;MQ0=5;OQ=210.60;QD=3.76;SB=-42.01 GT:AD:DP:GL:GQ 0/1:42,14:42:-37.00,-12.66,-114.99:99
-chr1 3959610 rs4654559 T C 0.08 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=19.50;MQ=38.33;MQ0=4;OQ=745.10;QD=13.55;SB=-325.28 GT:AD:DP:GL:GQ 0/1:20,35:43:-90.76,-12.97,-56.11:99
-chr1 3959618 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=35.45;MQ=40.78;MQ0=4;OQ=377.28;QD=6.50;SB=-163.72 GT:AD:DP:GL:GQ 0/1:35,17:42:-66.15,-25.14,-90.45:99
-chr1 3959638 rs12137425 A G 6.15 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=49.20;MQ0=1;OQ=205.57;QD=4.28;SB=-109.83 GT:AD:DP:GL:GQ 0/1:33,15:40:-35.90,-12.06,-107.08:99
-chr1 3959766 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=1;HaplotypeScore=11.71;MQ=40.06;MQ0=2;OQ=205.60;QD=3.54;SB=-53.76 GT:AD:DP:GL:GQ 0/1:44,14:49:-38.61,-14.76,-139.54:99
-chr1 3959787 rs11807610 T C 0.34 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=13.45;MQ=43.41;MQ0=2;OQ=585.11;QD=10.45;SB=-259.35 GT:AD:DP:GL:GQ 0/1:22,34:43:-74.76,-12.96,-79.59:99
-chr1 3959815 rs10915563 A G 47.44 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=13.21;MQ=50.51;MQ0=1;QD=0.72;SB=62.23 GT:AD:DP:GL:GQ 0/1:56,10:52:-23.70,-15.67,-173.58:80.28
-chr1 3959825 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=18.02;MQ=51.36;MQ0=1;OQ=581.75;QD=8.19;SB=-258.36 GT:AD:DP:GL:GQ 0/1:43,28:61:-79.84,-18.38,-149.14:99
-chr1 3959826 . A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=1;HaplotypeScore=9.14;MQ=50.86;MQ0=1;OQ=291.12;QD=3.93;SB=-139.48 GT:AD:DP:GL:GQ 0/1:51,23:56:-49.27,-16.88,-163.75:99
-chr1 3959854 rs10799245 C A 521.83 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.17;MQ0=0;OQ=879.17;QD=14.65;SB=-268.32 GT:AD:DP:GL:GQ 0/1:29,31:55:-107.78,-16.58,-78.49:99
-chr1 3961215 rs6670453 G C 331.68 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=59.13;MQ0=0;OQ=833.59;QD=15.73;SB=-292.89 GT:AD:DP:GL:GQ 0/1:29,24:53:-102.62,-15.98,-127.58:99
-chr1 3961230 rs6672877 G T 118.38 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.94;MQ=59.07;MQ0=0;OQ=633.10;QD=12.66;SB=-213.34 GT:AD:DP:GL:GQ 0/1:27,23:49:-81.35,-14.76,-89.22:99
-chr1 3961237 rs12045715 G A 510.42 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=793.63;QD=15.56;SB=-285.83 GT:AD:DP:GL:GQ 0/1:26,25:51:-98.03,-15.38,-79.59:99
-chr1 3961468 rs12045781 G A 286.99 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=60.00;MQ0=0;OQ=606.20;QD=13.78;SB=-238.18 GT:AD:DP:GL:GQ 0/1:24,20:42:-76.57,-12.66,-72.65:99
-chr1 3961548 rs10799247 A G 169.43 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.55;MQ=58.33;MQ0=0;OQ=674.03;QD=12.04;SB=-151.92 GT:AD:DP:GL:GQ 0/1:31,24:52:-86.36,-15.67,-108.75:99
-chr1 3962010 rs4654565 G A 105.50 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=336.97;QD=12.96;SB=-103.61 GT:AD:DP:GL:GQ 0/1:14,12:25:-44.52,-7.54,-43.04:99
-chr1 3962589 rs4654447 A G 258.32 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.65;MQ0=0;OQ=712.70;QD=13.45;SB=-356.22 GT:AD:DP:GL:GQ 0/1:26,27:50:-89.62,-15.07,-95.62:99
-chr1 3962703 rs4654448 A C 265.60 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=756.85;QD=13.52;SB=-251.86 GT:AD:DP:GL:GQ 0/1:29,27:55:-95.53,-16.56,-103.20:99
-chr1 3962856 rs4654567 T C 95.03 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=59.17;MQ0=0;OQ=415.90;QD=9.24;SB=-159.46 GT:AD:DP:GL:GQ 0/1:25,20:42:-57.53,-12.66,-94.60:99
-chr1 3962899 rs4654449 G A 419.09 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=60.00;MQ0=0;OQ=648.86;QD=14.75;SB=-335.88 GT:AD:DP:GL:GQ 0/1:22,22:42:-80.82,-12.65,-78.42:99
-chr1 3963307 rs7520607 T C 230.94 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=3.28;MQ=58.42;MQ0=0;OQ=845.59;QD=14.58;SB=-424.34 GT:AD:DP:GL:GQ 0/1:26,32:53:-103.81,-15.97,-95.34:99
-chr1 3963607 rs4654568 T G 463.03 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.07;MQ0=0;OQ=931.94;QD=16.64;SB=-413.80 GT:AD:DP:GL:GQ 0/1:24,32:56:-113.34,-16.87,-88.78:99
-chr1 3963626 rs12027462 C T 248.09 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=57.57;MQ0=0;OQ=963.52;QD=17.21;SB=-429.93 GT:AD:DP:GL:GQ 0/1:26,30:55:-116.20,-16.57,-93.29:99
-chr1 3963784 rs4654451 G A 171.09 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=59.79;MQ0=0;OQ=912.02;QD=16.00;SB=-225.51 GT:AD:DP:GL:GQ 0/1:28,28:53:-110.46,-15.98,-78.09:99
-chr1 3964643 rs6426429 A G 60.66 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=1.27;MQ=59.56;MQ0=0;OQ=582.81;QD=11.00;SB=-285.59 GT:AD:DP:GL:GQ 0/1:28,25:51:-76.94,-15.38,-106.26:99
-chr1 3965132 rs4074993 C G 325.61 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.87;MQ=59.28;MQ0=0;OQ=814.87;QD=14.05;SB=-345.07 GT:AD:DP:GL:GQ 0/1:34,24:55:-101.37,-16.60,-121.74:99
-chr1 3965479 rs4074994 T C 268.09 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=52.28;MQ0=0;OQ=617.78;QD=12.36;SB=-300.36 GT:AD:DP:GL:GQ 0/1:25,25:49:-79.83,-14.77,-98.86:99
-chr1 3965536 rs57323923 T C 0.88 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=4;HaplotypeScore=2.11;MQ=50.55;MQ0=0;OQ=424.15;QD=8.48;SB=-173.38 GT:AD:DP:GL:GQ 0/1:29,21:47:-59.86,-14.17,-115.12:99
-chr1 3965975 . C G 7.70 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=58.67;MQ0=0;OQ=589.92;QD=12.04;SB=-25.38 GT:AD:DP:GL:GQ 0/1:32,17:46:-76.14,-13.87,-119.93:99
-chr1 3965977 . T C 0.69 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=2;HaplotypeScore=1.11;MQ=58.22;MQ0=0;OQ=427.57;QD=8.55;SB=-16.87 GT:AD:DP:GL:GQ 0/1:33,17:49:-60.80,-14.76,-127.29:99
-chr1 3966027 rs7414863 A C 144.45 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.13;MQ0=0;OQ=452.26;QD=9.42;SB=-62.85 GT:AD:DP:GL:GQ 0/1:27,21:45:-62.07,-13.56,-92.65:99
-chr1 3966540 rs3935559 C G 391.87 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=1031.71;QD=18.42;SB=-312.99 GT:AD:DP:GL:GQ 0/1:24,32:56:-123.36,-16.90,-103.47:99
-chr1 3966816 . G A 1.68 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=5.13;MQ=57.97;MQ0=0;OQ=1415.89;QD=20.52;SB=-484.12 GT:AD:DP:GL:GQ 0/1:24,45:61:-163.26,-18.38,-64.39:99
-chr1 3967294 rs12747294 C T 4.07 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=8.87;MQ=56.15;MQ0=1;OQ=813.80;QD=16.95;SB=-391.14 GT:AD:DP:GL:GQ 0/1:22,26:45:-98.22,-13.56,-71.93:99
-chr1 3967372 rs6702213 C T 194.14 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=34.49;MQ0=0;OQ=718.26;QD=12.17;SB=-239.54 GT:AD:DP:GL:GQ 0/1:33,26:54:-91.39,-16.28,-98.59:99
-chr1 3967404 rs6661264 T C 167.37 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=40.81;MQ0=0;OQ=475.36;QD=8.80;SB=-244.91 GT:AD:DP:GL:GQ 0/1:34,20:52:-66.49,-15.67,-131.05:99
-chr1 3967405 rs6675434 G A 377.49 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.63;MQ0=0;OQ=533.67;QD=9.70;SB=-290.77 GT:AD:DP:GL:GQ 0/1:34,21:52:-72.31,-15.66,-122.28:99
-chr1 3967434 rs12747604 C T 38.96 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=46.12;MQ0=0;OQ=331.44;QD=7.71;SB=-108.07 GT:AD:DP:GL:GQ 0/1:29,14:41:-48.79,-12.36,-91.55:99
-chr1 3967444 rs56081307 C A 64.62 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=45.65;MQ0=0;OQ=391.03;QD=8.32;SB=-188.48 GT:AD:DP:GL:GQ 0/1:31,16:44:-55.64,-13.25,-103.38:99
-chr1 3967458 rs6661363 T C 158.21 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=46.22;MQ0=0;OQ=383.22;QD=7.82;SB=-172.51 GT:AD:DP:GL:GQ 0/1:29,19:44:-54.87,-13.26,-104.62:99
-chr1 3967912 rs6675979 G A 278.83 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.51;MQ=58.64;MQ0=0;OQ=1206.49;QD=19.46;SB=-623.12 GT:AD:DP:GL:GQ 0/1:25,37:60:-142.02,-18.08,-76.63:99
-chr1 3968006 rs12731145 A G 28.60 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=5.76;MQ=59.49;MQ0=0;OQ=439.53;QD=9.77;SB=-228.43 GT:AD:DP:GL:GQ 0/1:27,18:43:-60.19,-12.95,-105.51:99
-chr1 3968073 rs6426431 G A 223.15 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=59.56;MQ0=0;OQ=482.88;QD=9.29;SB=-221.45 GT:AD:DP:GL:GQ 0/1:34,18:50:-66.64,-15.07,-119.13:99
-chr1 3968105 rs12744667 G A 365.59 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.56;MQ0=0;OQ=827.90;QD=15.62;SB=-433.93 GT:AD:DP:GL:GQ 0/1:27,26:51:-101.44,-15.36,-92.63:99
-chr1 3968106 rs55866108 A G 217.98 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=59.57;MQ0=0;OQ=738.88;QD=13.68;SB=-284.42 GT:AD:DP:GL:GQ 0/1:27,27:53:-93.14,-15.96,-108.96:99
-chr1 3968537 rs12753281 C G 269.93 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.90;MQ0=0;OQ=1244.08;QD=14.99;SB=-559.96 GT:AD:DP:GL:GQ 0/1:45,38:83:-152.72,-25.03,-193.42:99
-chr1 3968581 rs12736036 A G 78.01 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=3.15;MQ=57.56;MQ0=0;OQ=949.82;QD=11.58;SB=-430.05 GT:AD:DP:GL:GQ 0/1:44,38:77:-121.46,-23.19,-177.75:99
-chr1 3968726 rs34940664 G T 190.81 PASS AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.33;MQ0=0;OQ=1575.63;QD=16.24;SB=-709.50 GT:AD:DP:GL:GQ 0/1:45,52:96:-189.76,-28.91,-164.22:99
-chr1 3968753 rs35749996 A G 455.09 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1487.59;QD=17.92;SB=-656.99 GT:AD:DP:GL:GQ 0/1:35,48:83:-177.04,-25.00,-145.40:99
-chr1 3968768 rs12753644 C G 340.70 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=1876.77;QD=20.85;SB=-779.42 GT:AD:DP:GL:GQ 0/1:40,50:90:-218.08,-27.12,-169.27:99
-chr1 3968858 rs12045134 A C 23.52 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=5.51;MQ=58.42;MQ0=0;OQ=708.96;QD=8.54;SB=-321.59 GT:AD:DP:GL:GQ 0/1:52,31:81:-98.58,-24.40,-189.89:99
-chr1 3968949 rs12047590 G T 243.75 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=59.74;MQ0=0;OQ=980.09;QD=13.61;SB=-395.21 GT:AD:DP:GL:GQ 0/1:39,33:71:-122.68,-21.39,-124.97:99
-chr1 3969008 rs12027284 C T 226.70 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.68;MQ0=0;OQ=1351.13;QD=18.77;SB=-463.00 GT:AD:DP:GL:GQ 0/1:32,40:69:-159.19,-20.80,-95.94:99
-chr1 3969221 rs12045225 A G 0.63 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=9.56;MQ=58.22;MQ0=0;OQ=654.37;QD=13.09;SB=-95.63 GT:AD:DP:GL:GQ 0/1:21,29:44:-81.99,-13.27,-67.60:99
-chr1 3969391 rs12046014 A G 106.22 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.88;MQ=58.95;MQ0=0;OQ=580.96;QD=9.37;SB=-244.16 GT:AD:DP:GL:GQ 0/1:36,26:57:-78.56,-17.18,-134.21:99
-chr1 3969440 rs12044268 T C 521.33 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=58.87;MQ0=0;QD=12.72;SB=-263.94 GT:AD:DP:GL:GQ 0/1:19,21:40:-67.48,-12.06,-76.36:99
-chr1 3969444 rs12048464 G T 535.50 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.71;MQ0=0;QD=14.88;SB=-256.96 GT:AD:DP:GL:GQ 0/1:18,18:36:-67.68,-10.85,-54.15:99
-chr1 3969450 rs34283588 G A 563.46 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.55;MQ0=0;QD=17.61;SB=-257.77 GT:AD:DP:GL:GQ 0/1:15,17:30:-68.67,-9.04,-41.92:99
-chr1 3969504 rs12028147 C A 128.14 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.50;MQ0=0;OQ=1173.33;QD=18.92;SB=-401.82 GT:AD:DP:GL:GQ 0/1:25,37:62:-139.29,-18.67,-88.93:99
-chr1 3969731 rs35514116 C A 193.09 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=2.36;MQ=59.11;MQ0=0;OQ=1169.40;QD=14.99;SB=-425.64 GT:AD:DP:GL:GQ 0/1:38,39:78:-146.50,-26.28,-138.29:99
-chr1 3969738 rs35902612 G T 87.34 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.60;MQ=59.14;MQ0=0;OQ=1314.22;QD=16.22;SB=-492.89 GT:AD:DP:GL:GQ 0/1:38,43:80:-158.80,-24.09,-135.14:99
-chr1 3969835 rs34306433 G C 322.67 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=60.00;MQ0=0;OQ=1225.99;QD=18.03;SB=-578.33 GT:AD:DP:GL:GQ 0/1:31,36:68:-148.71,-22.83,-138.52:99
-chr1 3970192 rs34458454 T C 115.71 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=60.00;MQ0=0;OQ=393.81;QD=8.04;SB=-222.38 GT:AD:DP:GL:GQ 0/1:28,21:43:-55.63,-12.97,-98.60:99
-chr1 3970255 rs34994381 G A 356.92 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1045.77;QD=16.09;SB=-475.47 GT:AD:DP:GL:GQ 0/1:34,31:61:-126.25,-18.39,-98.09:99
-chr1 3970431 rs35579324 A T 318.12 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.56;MQ0=0;OQ=768.67;QD=14.78;SB=-345.07 GT:AD:DP:GL:GQ 0/1:26,26:52:-95.82,-15.67,-98.48:99
-chr1 3970448 rs35474759 C T 457.86 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=955.78;QD=18.03;SB=-501.52 GT:AD:DP:GL:GQ 0/1:25,28:52:-114.52,-15.66,-86.38:99
-chr1 3970842 rs12049555 G A 157.06 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=59.39;MQ0=0;OQ=384.99;QD=10.13;SB=-163.62 GT:AD:DP:GL:GQ 0/1:23,15:35:-52.33,-10.55,-71.59:99
-chr1 3970912 rs6664533 C T 146.77 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=3.51;MQ=58.67;MQ0=0;OQ=505.76;QD=14.45;SB=-247.75 GT:AD:DP:GL:GQ 0/1:19,16:34:-64.11,-10.25,-57.21:99
-chr1 3971010 rs6664655 C G 360.39 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=59.06;MQ0=0;OQ=1105.77;QD=14.94;SB=-455.72 GT:AD:DP:GL:GQ 0/1:42,32:74:-136.16,-22.30,-181.19:99
-chr1 3971024 rs6686502 G A 241.40 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=59.09;MQ0=0;OQ=1058.60;QD=13.93;SB=-346.09 GT:AD:DP:GL:GQ 0/1:42,34:75:-131.76,-22.62,-128.76:99
-chr1 3971052 rs6672264 T C 278.60 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.20;MQ0=0;OQ=887.02;QD=10.95;SB=-268.12 GT:AD:DP:GL:GQ 0/1:49,32:80:-116.09,-24.10,-192.61:99
-chr1 3971195 rs6686709 G C 441.55 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=533.40;QD=11.85;SB=-281.29 GT:AD:DP:GL:GQ 0/1:29,16:42:-69.28,-12.66,-112.85:99
-chr1 3971259 rs6680847 A G 343.35 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=805.68;QD=13.21;SB=-291.63 GT:AD:DP:GL:GQ 0/1:33,28:60:-101.92,-18.07,-129.04:99
-chr1 3971430 rs6675053 T C 59.44 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=57.14;MQ0=0;OQ=478.62;QD=6.74;SB=-133.24 GT:AD:DP:GL:GQ 0/1:48,23:70:-72.24,-21.10,-194.61:99
-chr1 3971753 . C A 69.39 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=12;HaplotypeScore=26.59;MQ=52.60;MQ0=0;QD=1.16;SB=62.22 GT:AD:DP:GL:GQ 0/1:50,10:49:-24.98,-14.76,-146.09:99
-chr1 3971766 rs12030209 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=12;HaplotypeScore=17.56;MQ=52.68;MQ0=0;OQ=817.96;QD=12.39;SB=-315.05 GT:AD:DP:GL:GQ 0/1:32,34:60:-103.15,-18.07,-109.51:99
-chr1 3972069 rs55798869 G T 4.80 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=3;HaplotypeScore=5.71;MQ=56.04;MQ0=0;OQ=802.09;QD=13.37;SB=-418.83 GT:AD:DP:GL:GQ 0/1:32,28:52:-99.17,-15.67,-74.15:99
-chr1 3972136 rs55745368 T C 189.98 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=59.03;MQ0=0;OQ=1099.26;QD=12.08;SB=-445.57 GT:AD:DP:GL:GQ 0/1:52,39:91:-140.63,-27.42,-210.68:99
-chr1 3972189 rs7414301 T C 60.16 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=5.42;MQ=59.51;MQ0=0;OQ=1011.76;QD=11.76;SB=-466.68 GT:AD:DP:GL:GQ 0/1:46,40:86:-130.38,-25.92,-186.30:99
-chr1 3972623 . A C 192.74 PASS AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.77;MQ0=0;OQ=1230.69;QD=15.38;SB=-527.79 GT:AD:DP:GL:GQ 0/1:36,44:79:-150.15,-23.80,-134.39:99
-chr1 3972753 rs10915589 G A 130.98 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.30;MQ0=0;OQ=1165.16;QD=17.65;SB=-331.36 GT:AD:DP:GL:GQ 0/1:30,36:63:-138.78,-18.98,-103.29:99
-chr1 3972924 rs12023372 G C 321.94 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1325.91;QD=18.94;SB=-613.61 GT:AD:DP:GL:GQ 0/1:33,37:69:-156.66,-20.79,-145.10:99
-chr1 3973210 rs12023479 G A 281.53 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.70;MQ0=0;OQ=1046.55;QD=13.59;SB=-512.32 GT:AD:DP:GL:GQ 0/1:44,33:77:-131.15,-23.21,-144.02:99
-chr1 3973292 . A G 33.55 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=55.10;MQ0=0;OQ=633.05;QD=11.94;SB=-175.56 GT:AD:DP:GL:GQ 0/1:28,25:47:-80.75,-14.16,-95.41:99
-chr1 3973506 . G A 176.17 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.46;MQ0=0;OQ=876.83;QD=12.71;SB=-380.14 GT:AD:DP:GL:GQ 0/1:42,27:67:-111.16,-20.19,-131.21:99
-chr1 3973875 rs4654459 T A 52.35 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=2.73;MQ=58.55;MQ0=0;OQ=1176.09;QD=14.70;SB=-563.67 GT:AD:DP:GL:GQ 0/1:41,39:78:-144.39,-23.49,-149.95:99
-chr1 3973955 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=17;HaplotypeScore=22.03;MQ=54.06;MQ0=0;OQ=55.47;QD=1.03;SB=65.23 GT:AD:DP:GL:GQ 0/1:43,10:44:-22.08,-13.25,-133.74:88.31
-chr1 3974003 . A G 105.47 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.51;MQ0=0;OQ=461.72;QD=11.26;SB=-234.29 GT:AD:DP:GL:GQ 0/1:22,19:40:-61.51,-12.06,-83.11:99
-chr1 3974203 . T G 66.57 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.62;MQ0=0;OQ=954.85;QD=13.84;SB=-428.75 GT:AD:DP:GL:GQ 0/1:35,34:68:-119.25,-20.48,-128.89:99
-chr1 3974239 rs35998568 G A 463.07 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.48;MQ0=0;OQ=1184.56;QD=17.95;SB=-510.14 GT:AD:DP:GL:GQ 0/1:31,35:66:-141.63,-19.89,-102.39:99
-chr1 3974376 rs57696600 C T 6.14 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=4;HaplotypeScore=1.87;MQ=59.16;MQ0=0;OQ=1418.07;QD=19.70;SB=-722.06 GT:AD:DP:GL:GQ 0/1:30,42:71:-166.49,-21.40,-92.47:99
-chr1 3974614 rs4457544 A T 403.15 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=1649.20;QD=19.18;SB=-732.91 GT:AD:DP:GL:GQ 0/1:34,52:86:-194.11,-25.90,-133.63:99
-chr1 3974846 rs12025374 G A 466.59 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.31;MQ0=0;OQ=1051.59;QD=16.43;SB=-403.40 GT:AD:DP:GL:GQ 0/1:31,33:63:-127.44,-18.99,-100.16:99
-chr1 3975091 rs12049502 T C 199.42 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=58.55;MQ0=0;OQ=805.28;QD=16.78;SB=-288.47 GT:AD:DP:GL:GQ 0/1:19,29:47:-97.97,-14.16,-75.75:99
-chr1 3975721 rs34928897 A G 109.87 PASS AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=2.98;MQ=59.19;MQ0=1;OQ=1038.58;QD=10.93;SB=-532.63 GT:AD:DP:GL:GQ 0/1:53,42:94:-135.47,-28.33,-210.33:99
-chr1 3975829 rs12060834 A C 406.62 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1062.88;QD=14.56;SB=-251.81 GT:AD:DP:GL:GQ 0/1:37,36:73:-131.56,-21.98,-139.84:99
-chr1 3975904 rs12026411 G T 347.07 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=57.00;MQ0=0;OQ=1228.86;QD=14.99;SB=-454.51 GT:AD:DP:GL:GQ 0/1:42,40:82:-150.86,-24.69,-151.44:99
-chr1 3976117 rs12034312 C T 244.48 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=60.00;MQ0=0;OQ=1562.01;QD=18.38;SB=-442.95 GT:AD:DP:GL:GQ 0/1:40,45:84:-184.80,-25.32,-123.96:99
-chr1 3976389 rs35297022 T C 334.71 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=962.55;QD=13.95;SB=-357.60 GT:AD:DP:GL:GQ 0/1:35,34:68:-120.03,-20.49,-141.31:99
-chr1 3976394 rs35043594 A T 325.11 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=916.45;QD=13.68;SB=-308.03 GT:AD:DP:GL:GQ 0/1:36,31:67:-115.11,-20.18,-137.00:99
-chr1 3976477 rs4641284 A G 171.33 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=58.95;MQ0=0;OQ=487.70;QD=11.08;SB=-180.60 GT:AD:DP:GL:GQ 0/1:26,18:42:-64.71,-12.65,-94.45:99
-chr1 3976506 rs34448752 C T 57.24 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=56.85;MQ0=0;OQ=445.94;QD=14.86;SB=-105.62 GT:AD:DP:GL:GQ 0/1:16,14:29:-56.62,-8.74,-46.04:99
-chr1 3976567 . C T 0.32 PASS AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=0;HaplotypeScore=1.54;MQ=51.77;MQ0=0;OQ=226.37;QD=18.86;SB=-10.00 GT:AD:DP:GL:GQ 0/1:3,9:11:-29.24,-3.32,-8.40:50.74
-chr1 3976658 rs35326871 G T 11.99 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.52;MQ0=0;OQ=1096.88;QD=17.41;SB=-10.00 GT:AD:DP:GL:GQ 0/1:25,38:62:-131.64,-18.67,-93.14:99
-chr1 3977151 rs10915596 T G 1.14 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=3.48;MQ=59.09;MQ0=0;OQ=756.41;QD=14.83;SB=-45.56 GT:AD:DP:GL:GQ 0/1:22,29:48:-93.38,-14.46,-82.79:99
-chr1 3977453 rs4654599 G T 361.03 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.46;MQ0=0;OQ=1289.21;QD=16.74;SB=-567.82 GT:AD:DP:GL:GQ 0/1:35,42:77:-155.40,-23.19,-125.68:99
-chr1 3977541 rs4654600 T C 61.36 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=3.43;MQ=59.43;MQ0=0;OQ=838.26;QD=17.11;SB=-388.65 GT:AD:DP:GL:GQ 0/1:18,30:47:-103.58,-16.47,-75.42:99
-chr1 3977567 rs4654601 G A 272.32 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.55;MQ0=0;OQ=1148.82;QD=18.83;SB=-426.81 GT:AD:DP:GL:GQ 0/1:26,35:60:-136.24,-18.08,-87.47:99
-chr1 3977950 rs4654604 T C 322.32 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=59.65;MQ0=0;OQ=975.26;QD=14.78;SB=-339.18 GT:AD:DP:GL:GQ 0/1:28,38:65:-120.40,-19.59,-110.65:99
-chr1 3978231 rs4129099 T C 330.29 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=60.00;MQ0=0;OQ=733.04;QD=11.64;SB=-345.90 GT:AD:DP:GL:GQ 0/1:32,31:62:-95.28,-18.69,-130.06:99
-chr1 3978308 rs4129100 G A 317.73 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=1482.59;QD=16.85;SB=-689.02 GT:AD:DP:GL:GQ 0/1:42,46:86:-177.46,-25.92,-132.95:99
-chr1 3980624 rs4323679 C T 566.66 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=703.77;QD=12.13;SB=-349.85 GT:AD:DP:GL:GQ 0/1:35,23:57:-90.85,-17.19,-108.01:99
-chr1 3980746 rs35182639 G A 123.92 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=4.13;MQ=59.70;MQ0=0;OQ=1453.16;QD=18.63;SB=-621.68 GT:AD:DP:GL:GQ 0/1:35,43:76:-171.51,-22.91,-105.10:99
-chr1 3980982 rs12747944 G A 386.78 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=60.00;MQ0=0;OQ=715.67;QD=12.56;SB=-369.37 GT:AD:DP:GL:GQ 0/1:32,24:53:-90.82,-15.97,-105.07:99
-chr1 3981385 rs17404600 C T 307.96 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.06;MQ=59.56;MQ0=0;OQ=909.30;QD=17.16;SB=-459.01 GT:AD:DP:GL:GQ 0/1:26,27:49:-108.98,-14.77,-70.07:99
-chr1 3981945 . G C 7.35 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.62;MQ=59.25;MQ0=0;OQ=783.42;QD=13.99;SB=-334.02 GT:AD:DP:GL:GQ 0/1:33,23:54:-97.92,-16.29,-122.30:99
-chr1 3981947 rs10799260 C T 127.54 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=2.62;MQ=59.25;MQ0=0;OQ=721.41;QD=12.88;SB=-288.75 GT:AD:DP:GL:GQ 0/1:33,23:55:-91.99,-16.57,-116.30:99
-chr1 3982051 rs10753384 A G 287.89 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.81;MQ=59.62;MQ0=0;OQ=891.61;QD=14.62;SB=-286.59 GT:AD:DP:GL:GQ 0/1:30,31:60:-110.52,-18.08,-117.65:99
-chr1 3982227 rs10799261 T C 592.68 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=920.95;QD=13.35;SB=-433.27 GT:AD:DP:GL:GQ 0/1:35,34:67:-115.56,-20.18,-140.96:99
-chr1 3982891 rs12023925 T C 257.35 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.13;MQ0=0;OQ=486.42;QD=9.18;SB=-229.40 GT:AD:DP:GL:GQ 0/1:30,23:50:-67.00,-15.07,-113.54:99
-chr1 3984164 rs7418256 T G 46.90 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=4;HaplotypeScore=1.00;MQ=59.72;MQ0=0;OQ=1495.13;QD=18.23;SB=-531.78 GT:AD:DP:GL:GQ 0/1:33,49:80:-176.89,-24.10,-113.02:99
-chr1 3984958 rs6426436 A G 575.34 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=842.05;QD=12.95;SB=-332.89 GT:AD:DP:GL:GQ 0/1:35,30:64:-106.77,-19.28,-141.35:99
-chr1 3985143 rs5015188 T C 159.92 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=12.99;MQ=58.62;MQ0=0;QD=2.25;SB=-60.43 GT:AD:DP:GL:GQ 0/1:60,11:70:-40.36,-21.09,-240.05:99
-chr1 3985147 rs5015187 T C 314.93 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=67.96;MQ=58.31;MQ0=0;QD=4.37;SB=-165.46 GT:AD:DP:GL:GQ 0/1:57,15:70:-55.86,-21.08,-223.89:99
-chr1 3985151 rs5015186 T C 601.51 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.01;HRun=1;HaplotypeScore=11.99;MQ=58.34;MQ0=0;QD=8.24;SB=-304.19 GT:AD:DP:GL:GQ 0/1:49,23:71:-84.52,-21.09,-190.22:99
-chr1 3985364 rs4233266 A G 350.55 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=58.47;MQ0=0;OQ=817.82;QD=10.76;SB=-299.84 GT:AD:DP:GL:GQ 0/1:41,35:71:-106.46,-21.39,-162.85:99
-chr1 3985761 rs4654611 G C 378.30 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=59.78;MQ0=0;OQ=1274.73;QD=15.36;SB=-534.37 GT:AD:DP:GL:GQ 0/1:45,38:78:-154.27,-23.51,-187.35:99
-chr1 3985811 rs4654612 C T 99.80 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=4.68;MQ=59.17;MQ0=0;OQ=618.20;QD=11.04;SB=-273.28 GT:AD:DP:GL:GQ 0/1:30,25:47:-79.28,-14.18,-83.87:99
-chr1 3988267 rs3829818 C G 50.86 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.32;MQ0=0;OQ=1075.32;QD=19.55;SB=-391.87 GT:AD:DP:GL:GQ 0/1:26,29:54:-127.10,-16.29,-99.01:99
-chr1 3988626 rs34649702 A C 437.42 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=920.32;QD=18.41;SB=-485.28 GT:AD:DP:GL:GQ 0/1:20,30:49:-110.07,-14.76,-69.08:99
-chr1 3988704 rs55889146 T A 313.04 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=59.71;MQ0=0;OQ=1088.43;QD=16.75;SB=-492.44 GT:AD:DP:GL:GQ 0/1:29,36:65:-131.71,-19.58,-109.61:99
-chr1 3989745 rs35412083 G A 332.59 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.92;MQ0=0;OQ=1097.15;QD=11.93;SB=-405.76 GT:AD:DP:GL:GQ 0/1:55,36:89:-139.82,-26.82,-176.39:99
-chr1 3990405 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=94;Dels=0.03;HRun=18;HaplotypeScore=33.42;MQ=54.32;MQ0=1;OQ=80.49;QD=0.86;SB=90.81 GT:AD:DP:GL:GQ 0/1:76,15:73:-32.44,-21.10,-200.50:99
-chr1 3990446 rs34385055 G A 276.71 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.80;MQ=58.88;MQ0=0;OQ=865.10;QD=15.73;SB=-440.45 GT:AD:DP:GL:GQ 0/1:26,29:49:-104.56,-14.77,-74.37:99
-chr1 3990572 rs10915650 T C 322.59 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=53.91;MQ0=0;OQ=802.60;QD=15.43;SB=-363.11 GT:AD:DP:GL:GQ 0/1:19,33:50:-98.61,-15.07,-76.41:99
-chr1 3990932 rs4654614 C T 267.85 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1697.75;QD=19.97;SB=-727.98 GT:AD:DP:GL:GQ 0/1:36,49:85:-198.66,-25.60,-134.20:99
-chr1 3991939 . G T 133.26 Indel AC=1;AF=0.50;AN=2;DP=31;Dels=0.03;HRun=0;HaplotypeScore=37.12;MQ=55.25;MQ0=0;QD=4.30;SB=-33.93 GT:AD:DP:GL:GQ 0/1:22,8:23:-23.24,-6.63,-47.74:99
-chr1 3992866 rs34160796 A G 334.90 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.66;MQ0=0;OQ=483.28;QD=9.29;SB=-177.56 GT:AD:DP:GL:GQ 0/1:33,19:51:-66.97,-15.36,-129.46:99
-chr1 3993123 rs10915661 A G 223.41 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.93;MQ=58.90;MQ0=0;OQ=752.89;QD=12.76;SB=-356.58 GT:AD:DP:GL:GQ 0/1:32,27:57:-95.74,-17.17,-122.04:99
-chr1 3993398 rs10799273 A G 39.64 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.69;MQ0=0;OQ=432.60;QD=13.52;SB=-183.96 GT:AD:DP:GL:GQ 0/1:16,16:30:-55.58,-9.04,-60.72:99
-chr1 3993415 rs55877711 T C 152.20 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=59.43;MQ0=0;OQ=474.94;QD=14.39;SB=-232.31 GT:AD:DP:GL:GQ 0/1:16,17:31:-60.12,-9.34,-57.39:99
-chr1 3993656 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=16;HaplotypeScore=11.17;MQ=56.96;MQ0=0;OQ=77.46;QD=1.25;SB=65.19 GT:AD:DP:GL:GQ 0/1:50,11:45:-24.60,-13.57,-123.37:99
-chr1 3994923 rs4654469 G A 168.23 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=59.68;MQ0=0;OQ=1491.96;QD=20.44;SB=-717.78 GT:AD:DP:GL:GQ 0/1:30,43:72:-174.18,-21.70,-94.37:99
-chr1 3995705 rs34085171 T G 1347.57 Indel AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.38;MQ0=0;QD=15.85;SB=-684.75 GT:AD:DP:GL:GQ 0/1:40,45:84:-163.34,-25.30,-143.02:99
-chr1 3997814 . A G 166.71 PASS AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.77;MQ0=0;OQ=1047.22;QD=13.09;SB=-493.22 GT:AD:DP:GL:GQ 0/1:44,36:80:-132.11,-24.10,-175.80:99
-chr1 3999521 rs7533488 A C 424.91 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.32;MQ0=0;OQ=1161.71;QD=14.17;SB=-423.73 GT:AD:DP:GL:GQ 0/1:41,40:80:-143.55,-24.09,-150.24:99
-chr1 4000164 rs10753345 T C 207.13 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=54.60;MQ0=3;OQ=972.02;QD=12.62;SB=-388.88 GT:AD:DP:GL:GQ 0/1:39,38:72:-122.18,-21.70,-141.20:99
-chr1 4000350 rs10915304 A G 90.68 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=49.42;MQ0=0;OQ=302.07;QD=8.39;SB=-112.62 GT:AD:DP:GL:GQ 0/1:20,15:32:-43.14,-9.65,-72.05:99
-chr1 4001557 rs35079847 T C 179.63 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=42.74;MQ0=4;OQ=737.26;QD=10.24;SB=-356.16 GT:AD:DP:GL:GQ 0/1:43,29:67:-97.19,-20.18,-162.42:99
-chr1 4002410 rs9792845 T A 39.80 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=2;HaplotypeScore=2.16;MQ=49.63;MQ0=6;OQ=1137.13;QD=12.92;SB=-561.60 GT:AD:DP:GL:GQ 0/1:48,40:80:-141.09,-24.09,-168.17:99
-chr1 4002600 . C T 9.93 PASS AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=34.65;MQ0=18;OQ=1297.58;QD=10.30;SB=-536.53 GT:AD:DP:GL:GQ 0/1:72,54:87:-159.25,-26.21,-171.14:99
-chr1 4003027 rs7539155 C T 270.27 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=49.52;MQ0=2;OQ=1241.45;QD=15.71;SB=-511.02 GT:AD:DP:GL:GQ 0/1:40,39:77:-150.62,-23.19,-144.23:99
-chr1 4003660 rs34911143 C G 406.63 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1137.88;QD=19.96;SB=-593.22 GT:AD:DP:GL:GQ 0/1:26,31:56:-133.94,-16.87,-107.70:99
-chr1 4003790 . T C 0.57 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=1;HaplotypeScore=5.22;MQ=56.08;MQ0=0;OQ=469.98;QD=8.55;SB=-182.54 GT:AD:DP:GL:GQ 0/1:35,20:52:-65.94,-15.66,-138.69:99
-chr1 4003932 rs60522686 C T 104.95 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=60.00;MQ0=0;OQ=1130.00;QD=21.32;SB=-533.08 GT:AD:DP:GL:GQ 0/1:20,33:53:-132.25,-15.97,-67.95:99
-chr1 4004106 rs12036981 T A 126.81 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.38;MQ=56.22;MQ0=2;OQ=519.83;QD=10.19;SB=-138.13 GT:AD:DP:GL:GQ 0/1:29,21:47:-69.43,-14.17,-100.44:99
-chr1 4004617 rs12036953 A G 190.96 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.43;MQ0=0;OQ=561.78;QD=8.64;SB=-245.46 GT:AD:DP:GL:GQ 0/1:41,24:63:-78.44,-18.98,-164.76:99
-chr1 4005149 rs5018354 G T 769.64 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=5;HaplotypeScore=8.12;MQ=53.93;MQ0=0;QD=10.84;SB=-410.03 GT:AD:DP:GL:GQ 0/1:41,30:69:-101.03,-20.78,-142.34:99
-chr1 4005155 . A T 709.63 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=5;HaplotypeScore=11.69;MQ=54.09;MQ0=0;QD=10.28;SB=-304.00 GT:AD:DP:GL:GQ 0/1:43,26:65:-93.83,-19.58,-142.00:99
-chr1 4005156 . A T 576.66 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=13.11;MQ=54.00;MQ0=0;QD=8.48;SB=-291.97 GT:AD:DP:GL:GQ 0/1:44,24:63:-79.93,-18.98,-151.00:99
-chr1 4005449 rs34905442 A G 30.08 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=5.92;MQ=57.79;MQ0=0;OQ=842.19;QD=15.89;SB=-428.92 GT:AD:DP:GL:GQ 0/1:23,30:52:-103.18,-15.68,-83.89:99
-chr1 4010416 rs55645535 A G 3.25 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=3;HaplotypeScore=0.83;MQ=58.64;MQ0=0;OQ=504.55;QD=16.28;SB=-163.34 GT:AD:DP:GL:GQ 0/1:10,21:29:-62.49,-8.75,-36.79:99
-chr1 4012539 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=20;HaplotypeScore=3.78;MQ=46.27;MQ0=3;OQ=496.42;QD=5.23;SB=131.33 GT:AD:DP:GL:GQ 0/1:70,25:77:-76.14,-23.22,-185.60:99
-chr1 4012545 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=7;HaplotypeScore=6.81;MQ=48.30;MQ0=1;OQ=296.48;QD=3.12;SB=125.35 GT:AD:DP:GL:GQ 0/1:68,26:74:-55.23,-22.30,-199.64:99
-chr1 4015436 rs10799171 T C 582.11 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.51;MQ0=0;OQ=1395.24;QD=29.69;SB=-603.59 GT:AD:DP:GL:GQ 1/1:0,47:45:-143.16,-13.58,-0.05:99
-chr1 4015788 rs6426377 G C 79.87 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=58.24;MQ0=0;OQ=2118.03;QD=39.96;SB=-1018.28 GT:AD:DP:GL:GQ 1/1:0,53:49:-215.40,-14.76,-0.01:99
-chr1 4016464 rs3856168 T C 206.69 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=58.60;MQ0=0;OQ=1420.67;QD=28.41;SB=-682.89 GT:AD:DP:GL:GQ 1/1:0,50:45:-145.69,-13.57,-0.04:99
-chr1 4017003 rs4654403 T C 46.24 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.69;MQ=59.61;MQ0=0;OQ=1716.77;QD=29.10;SB=-823.60 GT:AD:DP:GL:GQ 1/1:0,59:55:-175.31,-16.59,-0.05:99
-chr1 4017098 rs4654404 C T 8.35 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=4.56;MQ=58.64;MQ0=0;OQ=1853.34;QD=38.61;SB=-777.68 GT:AD:DP:GL:GQ 1/1:0,48:47:-188.93,-14.16,-0.01:99
-chr1 4018431 rs4654475 T C 39.68 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.54;MQ0=0;OQ=1443.50;QD=28.87;SB=-682.71 GT:AD:DP:GL:GQ 1/1:0,50:46:-147.99,-13.88,-0.05:99
-chr1 4018760 rs7419106 C G 402.81 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1082.64;QD=34.92;SB=-389.10 GT:AD:DP:GL:GQ 1/1:0,31:28:-111.87,-8.45,-0.02:84.27
-chr1 4018847 rs10799175 T C 20.86 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=0;HaplotypeScore=4.16;MQ=58.50;MQ0=0;OQ=814.89;QD=26.29;SB=-376.57 GT:AD:DP:GL:GQ 1/1:1,29:28:-88.39,-10.61,-3.32:72.94
-chr1 4019483 rs10799177 G A 473.58 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.36;MQ0=0;OQ=1615.08;QD=33.65;SB=-313.91 GT:AD:DP:GL:GQ 1/1:0,48:42:-165.11,-12.66,-0.02:99
-chr1 4019522 rs9792946 G A 281.35 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=54.50;MQ0=0;OQ=2603.69;QD=38.29;SB=-1110.00 GT:AD:DP:GL:GQ 1/1:0,68:66:-263.98,-19.89,-0.02:99
-chr1 4019590 rs7418034 G A 135.96 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=43.49;MQ0=0;OQ=1841.94;QD=30.70;SB=-845.46 GT:AD:DP:GL:GQ 1/1:0,59:50:-190.21,-17.45,-2.43:99
-chr1 4019593 rs7412152 A C 123.30 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=42.41;MQ0=0;OQ=1763.32;QD=29.89;SB=-853.08 GT:AD:DP:GL:GQ 1/1:0,59:51:-179.93,-15.36,-0.02:99
-chr1 4019614 rs7411249 C G 15.77 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=3.88;MQ=36.55;MQ0=1;OQ=1713.38;QD=32.33;SB=-801.51 GT:AD:DP:GL:GQ 1/1:0,53:41:-174.94,-12.36,-0.02:99
-chr1 4019841 rs7412217 A G 301.34 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=36.34;MQ0=0;OQ=1308.64;QD=29.08;SB=-633.25 GT:AD:DP:GL:GQ 1/1:0,45:37:-134.46,-11.14,-0.01:99
-chr1 4019863 rs4310408 A G 15.48 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=44.42;MQ0=0;OQ=1396.45;QD=30.36;SB=-620.23 GT:AD:DP:GL:GQ 1/1:0,46:40:-143.25,-12.05,-0.02:99
-chr1 4019987 rs10737398 C T 456.73 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.86;MQ0=6;OQ=1422.85;QD=30.93;SB=-467.35 GT:AD:DP:GL:GQ 1/1:0,46:37:-145.88,-11.15,-0.01:99
-chr1 4020055 rs7411353 C A 1052.58 Indel;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=9;HaplotypeScore=6.69;MQ=42.23;MQ0=1;QD=22.40;SB=-302.56 GT:AD:DP:GL:GQ 1/1:0,47:31:-108.85,-9.34,-0.01:93.27
-chr1 4020059 . T A 16.07 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=4;HaplotypeScore=6.64;MQ=40.62;MQ0=1;QD=0.41;SB=14.07 GT:AD:DP:GL:GQ 0/1:27,12:17:-10.01,-5.13,-48.93:48.79
-chr1 4020065 rs6426379 G C 834.47 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=40.47;MQ0=0;QD=30.91;SB=-369.17 GT:AD:DP:GL:GQ 1/1:1,26:20:-87.04,-6.03,-0.01:60.20
-chr1 4020216 rs6426380 C T 178.01 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=56.52;MQ0=0;OQ=2286.70;QD=38.76;SB=-938.24 GT:AD:DP:GL:GQ 1/1:0,59:59:-232.28,-17.78,-0.03:99
-chr1 4020359 rs4233255 T A 506.79 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.30;MQ0=1;OQ=1405.72;QD=30.56;SB=-629.64 GT:AD:DP:GL:GQ 1/1:0,46:40:-144.18,-12.05,-0.02:99
-chr1 4020451 rs4654476 A G 27.72 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.11;MQ0=0;OQ=1489.65;QD=28.65;SB=-689.96 GT:AD:DP:GL:GQ 1/1:0,52:47:-152.59,-14.18,-0.04:99
-chr1 4020454 rs4654477 T C 48.40 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.13;MQ=59.54;MQ0=0;OQ=1536.11;QD=30.72;SB=-613.94 GT:AD:DP:GL:GQ 1/1:0,50:48:-157.24,-14.48,-0.04:99
-chr1 4020656 rs4233256 A C 90.34 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=59.09;MQ0=0;OQ=1344.37;QD=29.23;SB=-633.78 GT:AD:DP:GL:GQ 1/1:0,46:45:-138.07,-13.57,-0.05:99
-chr1 4020738 rs4233257 G A 285.07 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=56.81;MQ0=0;OQ=1954.21;QD=35.53;SB=-857.02 GT:AD:DP:GL:GQ 1/1:0,55:50:-199.02,-15.06,-0.01:99
-chr1 4020758 rs4233258 T C 590.90 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.92;MQ0=0;OQ=1509.42;QD=29.03;SB=-773.63 GT:AD:DP:GL:GQ 1/1:0,52:49:-154.57,-14.78,-0.05:99
-chr1 4020965 rs10915373 A G 41.68 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=3.05;MQ=59.15;MQ0=0;OQ=2124.75;QD=32.19;SB=-981.05 GT:AD:DP:GL:GQ 1/1:0,66:61:-216.09,-18.38,-0.03:99
-chr1 4021209 rs12087801 A G 66.82 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=59.44;MQ0=0;OQ=1399.12;QD=34.12;SB=-653.32 GT:AD:DP:GL:GQ 1/1:0,41:40:-143.51,-12.05,-0.01:99
-chr1 4021244 rs7524590 A G 21.98 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.56;MQ0=0;OQ=1518.93;QD=29.21;SB=-554.05 GT:AD:DP:GL:GQ 1/1:0,52:47:-155.52,-14.17,-0.04:99
-chr1 4021467 rs6426381 T C 70.46 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.82;MQ0=0;OQ=1271.75;QD=29.58;SB=-623.00 GT:AD:DP:GL:GQ 1/1:0,43:40:-130.79,-12.06,-0.03:99
-chr1 4021470 rs6665286 C T 565.39 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.82;MQ0=0;OQ=1632.61;QD=37.97;SB=-837.35 GT:AD:DP:GL:GQ 1/1:0,43:42:-166.86,-12.66,-0.02:99
-chr1 4021576 rs10799179 C T 140.80 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.60;MQ0=0;OQ=2105.87;QD=36.95;SB=-1023.68 GT:AD:DP:GL:GQ 1/1:0,57:54:-214.19,-16.27,-0.02:99
-chr1 4022324 rs10799180 T C 96.83 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1478.38;QD=30.80;SB=-697.61 GT:AD:DP:GL:GQ 1/1:0,48:47:-151.47,-14.18,-0.04:99
-chr1 4023064 rs12044274 A T 27.33 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.00;MQ0=0;OQ=1175.00;QD=33.57;SB=-370.25 GT:AD:DP:GL:GQ 1/1:0,34:33:-121.10,-9.94,-0.02:99
-chr1 4023346 rs12728781 C T 64.59 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.67;MQ0=0;OQ=1081.51;QD=30.90;SB=-492.01 GT:AD:DP:GL:GQ 1/1:1,34:29:-111.75,-8.74,-0.01:87.27
-chr1 4023709 rs10915381 G C 0.23 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=3.44;MQ=58.92;MQ0=0;OQ=2348.10;QD=41.93;SB=-727.93 GT:AD:DP:GL:GQ 1/1:0,56:54:-238.42,-16.28,-0.02:99
-chr1 4024015 rs6672626 C T 663.95 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=46.30;MQ0=0;OQ=1764.84;QD=37.55;SB=-805.32 GT:AD:DP:GL:GQ 1/1:0,47:46:-180.09,-13.86,-0.02:99
-chr1 4024120 rs6672716 C T 182.48 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=36.16;MQ0=0;OQ=1966.97;QD=37.83;SB=-833.61 GT:AD:DP:GL:GQ 1/1:0,51:51:-203.16,-18.10,-2.88:99
-chr1 4024270 . T A 112.05 Indel AC=1;AF=0.50;AN=2;DP=33;Dels=0.03;HRun=0;HaplotypeScore=2.93;MQ=35.48;MQ0=0;QD=3.40;SB=-51.99 GT:AD:DP:GL:GQ 0/1:21,11:28:-22.63,-8.14,-76.45:99
-chr1 4024272 . A T 86.10 Indel AC=1;AF=0.50;AN=2;DP=34;Dels=0.03;HRun=0;HaplotypeScore=5.09;MQ=34.14;MQ0=0;QD=2.53;SB=-27.82 GT:AD:DP:GL:GQ 0/1:23,10:27:-19.73,-7.83,-71.54:99
-chr1 4024295 rs6683289 T C 432.26 Indel;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=27.02;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,16:16:-46.84,-4.84,-0.03:48.07
-chr1 4024297 rs6665849 G C 696.90 Indel;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=43.56;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,16:16:-73.28,-4.82,-0.00:48.16
-chr1 4024305 . T C 154.38 Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=7.02;SB=-40.68 GT:AD:DP:GL:GQ 0/1:15,7:22:-25.35,-6.63,-60.61:99
-chr1 4024357 . T G 116.82 Indel AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=28.57;MQ0=0;QD=4.67;SB=-30.96 GT:AD:DP:GL:GQ 0/1:17,8:23:-21.89,-6.93,-59.79:99
-chr1 4024403 . G T 1246.60 Indel AC=2;AF=1.00;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=28.45;MQ0=0;QD=33.69;SB=-622.14 GT:AD:DP:GL:GQ 1/1:0,37:35:-128.26,-10.54,-0.01:99
-chr1 4024413 . C T 38.79 Indel;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=32.72;MQ0=0;QD=0.90;SB=-26.14 GT:AD:DP:GL:GQ 0/1:37,6:40:-19.21,-12.05,-127.12:71.63
-chr1 4024463 . G C 836.03 Indel AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=5.63;MQ=36.44;MQ0=0;QD=16.39;SB=-259.21 GT:AD:DP:GL:GQ 0/1:27,24:51:-102.25,-15.37,-114.08:99
-chr1 4024467 . C T 697.56 Indel AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=4.47;MQ=36.57;MQ0=0;QD=13.95;SB=-194.79 GT:AD:DP:GL:GQ 0/1:28,22:49:-87.80,-14.76,-98.23:99
-chr1 4024517 rs28542205 C G 1129.16 Indel AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=18.36;MQ=32.35;MQ0=0;QD=26.26;SB=-522.33 GT:AD:DP:GL:GQ 0/1:8,31:35:-126.75,-10.55,-27.16:99
-chr1 4024521 . G C 975.12 Indel AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=18.89;MQ=30.36;MQ0=0;QD=23.78;SB=-491.19 GT:AD:DP:GL:GQ 0/1:9,27:35:-115.01,-14.21,-36.24:99
-chr1 4024603 . G C 2.26 PASS AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=24.41;MQ0=0;OQ=50.98;QD=5.66;SB=-6.99 GT:AD:DP:GL:GQ 0/1:1,8:3:-9.29,-0.90,-4.69:37.89
-chr1 4024673 . T C 8.19 PASS AC=2;AF=1.00;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=30.71;MQ0=0;OQ=656.07;QD=31.24;SB=-288.45 GT:AD:DP:GL:GQ 1/1:0,21:20:-69.20,-6.03,-0.01:60.17
-chr1 4024788 . T C 850.29 Indel AC=2;AF=1.00;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.58;MQ0=0;QD=34.01;SB=-338.76 GT:AD:DP:GL:GQ 1/1:0,25:25:-88.63,-7.53,-0.01:75.20
-chr1 4024845 . T G 1.74 PASS AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=68.85;QD=17.21;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,3:4:-11.37,-1.20,-3.44:22.35
-chr1 4024894 . T C 62.45 Indel AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=29.00;MQ0=0;QD=12.49;SB=-41.94 GT:AD:DP:GL:GQ 0/1:2,3:4:-10.73,-1.20,-4.27:30.63
-chr1 4024923 . G A 22.24 Indel;LowQual AC=1;AF=0.50;AN=2;DP=8;Dels=0.25;HRun=0;HaplotypeScore=23.92;MQ=29.00;MQ0=0;QD=2.78;SB=-0.97 GT:AD:DP:GL:GQ 0/1:4,2:6:-7.31,-1.81,-14.76:55.05
-chr1 4024936 . T G 14.90 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=16;Dels=0.06;HRun=0;HaplotypeScore=31.98;MQ=29.00;MQ0=0;QD=0.93;SB=4.38 GT:AD:DP:GL:GQ 0/1:12,2:8:-11.00,-6.24,-20.74:47.59
-chr1 4024944 . C T 21.22 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=58.95;MQ=29.00;MQ0=0;QD=1.25;SB=8.05 GT:AD:DP:GL:GQ 0/1:15,2:9:-8.11,-2.71,-25.25:54.02
-chr1 4024945 . A T 15.01 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=58.95;MQ=29.00;MQ0=0;QD=0.88;SB=8.04 GT:AD:DP:GL:GQ 0/1:13,4:9:-7.48,-2.71,-24.43:47.70
-chr1 4024946 . C T 97.28 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=17;Dels=0.00;HRun=0;HaplotypeScore=64.95;MQ=29.00;MQ0=0;QD=5.72;SB=8.05 GT:AD:DP:GL:GQ 0/1:13,4:11:-16.32,-3.31,-25.25:99
-chr1 4024979 . C T 611.81 Indel;SnpCluster AC=2;AF=1.00;AN=2;DP=18;Dels=0.00;HRun=0;HaplotypeScore=6.71;MQ=29.00;MQ0=0;QD=33.99;SB=-293.67 GT:AD:DP:GL:GQ 1/1:0,16:16:-64.77,-4.82,-0.00:48.16
-chr1 4024982 . T G 173 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=11.86;MQ=29.00;MQ0=0;QD=9.11;SB=14.07 GT:AD:DP:GL:GQ 0/1:10,7:16:-25.40,-4.82,-33.30:99
-chr1 4024983 . C T 250.37 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=1;HaplotypeScore=11.86;MQ=29.00;MQ0=0;QD=13.18;SB=14.06 GT:AD:DP:GL:GQ 0/1:11,8:16:-33.14,-4.82,-27.15:99
-chr1 4025014 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=2;HaplotypeScore=18.19;MQ=29.00;MQ0=0;OQ=197.67;QD=9.88;SB=17.08 GT:AD:DP:GL:GQ 0/1:13,7:18:-28.47,-5.42,-39.21:99
-chr1 4025033 . G A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=9.30;MQ=27.51;MQ0=1;OQ=89.74;QD=8.97;SB=2.03 GT:AD:DP:GL:GQ 0/1:5,5:9:-14.97,-2.71,-16.97:99
-chr1 4025048 . C T 21.22 DPFilter;Indel;LowQual AC=1;AF=0.50;AN=2;DP=10;Dels=0.00;HRun=1;HaplotypeScore=32.62;MQ=27.51;MQ0=1;QD=2.12;SB=2.04 GT:AD:DP:GL:GQ 0/1:8,2:9:-8.11,-2.71,-25.19:54.03
-chr1 4025070 . G A 35.48 LowQual AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=1;HaplotypeScore=6.00;MQ=29.00;MQ0=0;QD=8.87;SB=-6.99 GT:AD:DP:GL:GQ 0/1:2,2:3:-7.73,-0.90,-3.47:25.65
-chr1 4025144 . C T 71.12 Indel AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=8.89;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,6:5:-11.90,-1.51,-7.69:61.87
-chr1 4025168 . G C 48.97 LowQual AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=29.00;MQ0=0;QD=7.00;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,5:4:-9.39,-1.21,-8.09:68.89
-chr1 4025186 . C T 0.12 PASS AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=78.13;QD=19.53;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,3:4:-12.30,-1.20,-3.90:26.92
-chr1 4025245 . C T 49.25 LowQual;SnpCluster AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=16.42;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,2:2:-8.33,-0.60,-0.00:6.02
-chr1 4025247 . G C 137.89 SnpCluster AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.94;MQ0=1;QD=27.58;SB=-52.47 GT:AD:DP:GL:GQ 1/1:1,4:4:-17.32,-1.21,-0.00:12.04
-chr1 4025253 . T C 341.02 SnpCluster AC=2;AF=1.00;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.68;MQ0=2;QD=26.23;SB=-182.78 GT:AD:DP:GL:GQ 1/1:1,12:11:-37.69,-3.31,-0.01:33.09
-chr1 4025355 . C T 528.21 SnpCluster AC=2;AF=1.00;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=33.01;SB=-144.72 GT:AD:DP:GL:GQ 1/1:1,15:16:-59.68,-4.82,-3.30:15.20
-chr1 4025359 . T C 305.09 SnpCluster AC=1;AF=0.50;AN=2;DP=13;Dels=0.00;HRun=0;HaplotypeScore=0.49;MQ=29.00;MQ0=0;QD=23.47;SB=-70.88 GT:AD:DP:GL:GQ 0/1:2,11:13:-37.71,-3.92,-7.64:37.23
-chr1 4025364 . T A 90.08 SnpCluster AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=29.00;MQ0=0;QD=18.02;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,3:3:-12.50,-0.90,-0.00:9.03
-chr1 4025431 . G C 10.49 LowQual AC=1;AF=0.50;AN=2;DP=1;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=10.49;SB=-10.00 GT:AD:DP:GL:GQ 0/1:0,1:1:-4.29,-0.30,-0.00:1.76
-chr1 4025466 . T C 25.23 LowQual AC=1;AF=0.50;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=29.00;MQ0=0;QD=8.41;SB=-10.00 GT:AD:DP:GL:GQ 0/1:0,2:3:-9.75,-4.24,-3.95:1.79
-chr1 4025523 . A C 21.19 LowQual AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=1;HaplotypeScore=4.30;MQ=29.00;MQ0=0;QD=4.24;SB=-10.00 GT:AD:DP:GL:GQ 0/1:3,2:3:-6.30,-0.90,-3.10:21.92
-chr1 4025542 . T C 37.83 LowQual AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=12.61;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,2:2:-7.19,-0.60,-0.00:6.02
-chr1 4025586 . G C 7.40 PASS AC=1;AF=0.50;AN=2;DP=5;Dels=0.20;HRun=0;HaplotypeScore=2.25;MQ=29.00;MQ0=0;OQ=51.98;QD=10.40;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,3:3:-9.39,-0.90,-3.95:30.43
-chr1 4025618 . C T 7.86 PASS AC=2;AF=1.00;AN=2;DP=7;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=29.00;MQ0=0;OQ=87.13;QD=12.45;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,5:3:-12.20,-0.90,-0.00:9.03
-chr1 4025642 . T C 158.22 Indel AC=2;AF=1.00;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=31.64;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,5:5:-19.38,-1.51,-0.00:15.05
-chr1 4025697 . A T 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=29.00;MQ0=0;OQ=113.07;QD=22.61;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,4:5:-16.09,-1.51,-3.64:21.34
-chr1 4025746 . T G 32.28 LowQual AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=3.93;MQ=23.71;MQ0=1;QD=6.46;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,2:3:-7.41,-0.90,-3.74:28.36
-chr1 4025760 . T C 33.23 LowQual AC=1;AF=0.50;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=3.00;MQ=26.51;MQ0=0;QD=8.31;SB=-10.00 GT:AD:DP:GL:GQ 0/1:1,2:3:-10.45,-4.14,-3.85:1.79
-chr1 4026171 . A T 209.87 Indel AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=25.28;MQ0=0;QD=14.99;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,9:8:-26.67,-2.41,-4.00:15.91
-chr1 4026180 . C G 33.92 Indel;LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=25.28;MQ0=0;QD=2.42;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,5:9:-9.39,-2.71,-29.13:66.75
-chr1 4026184 . C T 21.22 LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=25.28;MQ0=0;QD=1.52;SB=-10.00 GT:AD:DP:GL:GQ 0/1:9,5:9:-8.11,-2.71,-25.08:54.02
-chr1 4026206 . C G 51.98 Indel AC=1;AF=0.50;AN=2;DP=7;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.01;MQ0=1;QD=7.43;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,5:3:-9.39,-0.90,-4.15:32.44
-chr1 4026210 . G C 48.85 LowQual AC=2;AF=1.00;AN=2;DP=6;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=20.61;MQ0=1;QD=8.14;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,5:2:-8.29,-0.60,-0.00:6.02
-chr1 4026326 . G C 28.47 Indel;LowQual AC=1;AF=0.50;AN=2;DP=15;Dels=0.00;HRun=0;HaplotypeScore=22.92;MQ=30.24;MQ0=0;QD=1.90;SB=-27.39 GT:AD:DP:GL:GQ 0/1:8,6:9:-8.84,-2.71,-32.55:61.30
-chr1 4026330 . C T 15.30 Indel;LowQual AC=1;AF=0.50;AN=2;DP=16;Dels=0.00;HRun=1;HaplotypeScore=20.94;MQ=33.42;MQ0=0;QD=0.96;SB=-6.99 GT:AD:DP:GL:GQ 0/1:14,2:11:-8.11,-3.31,-31.44:48.01
-chr1 4026341 . A T 151.96 Indel AC=1;AF=0.50;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=32.82;MQ=37.84;MQ0=1;QD=7.24;SB=-45.98 GT:AD:DP:GL:GQ 0/1:14,7:14:-22.70,-4.22,-31.99:99
-chr1 4026383 . A G 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=27.11;MQ=37.86;MQ0=1;OQ=685.36;QD=14.58;SB=-116.05 GT:AD:DP:GL:GQ 1/1:7,40:26:-76.32,-7.85,-4.20:36.49
-chr1 4026434 . C G 29.02 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.33;MQ0=0;QD=0.81;SB=5.05 GT:AD:DP:GL:GQ 0/1:34,2:8:-8.60,-2.41,-25.63:61.85
-chr1 4026435 . A T 728.54 SnpCluster AC=2;AF=1.00;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.33;MQ0=0;QD=20.24;SB=-50.99 GT:AD:DP:GL:GQ 1/1:2,34:20:-76.44,-6.02,-0.00:60.19
-chr1 4026437 . T A 762.24 SnpCluster AC=2;AF=1.00;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=38.33;MQ0=0;QD=21.17;SB=-46.39 GT:AD:DP:GL:GQ 1/1:2,34:20:-79.81,-6.02,-0.00:60.20
-chr1 4026440 . T G 564.23 SnpCluster AC=2;AF=1.00;AN=2;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.87;MQ0=0;QD=17.10;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,31:17:-60.01,-5.12,-0.00:51.15
-chr1 4026444 . C G 41.07 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=34.30;MQ0=1;QD=1.28;SB=-6.99 GT:AD:DP:GL:GQ 0/1:30,2:3:-8.29,-0.90,-4.25:33.44
-chr1 4026449 . A T 483.60 SnpCluster AC=2;AF=1.00;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=34.81;MQ0=1;QD=16.68;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,29:14:-51.95,-4.22,-0.00:42.13
-chr1 4026483 . G A 173.76 Indel AC=2;AF=1.00;AN=2;DP=7;Dels=0.14;HRun=0;HaplotypeScore=0.00;MQ=25.96;MQ0=0;QD=24.82;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,6:5:-20.94,-1.51,-0.00:15.05
-chr1 4026581 . T C 45.31 PASS AC=2;AF=1.00;AN=2;DP=4;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=26.51;MQ0=0;OQ=56.13;QD=14.03;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,4:3:-9.11,-0.91,-0.01:9
-chr1 4026636 . T A 64.25 PASS AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=32.75;MQ0=0;OQ=1092.89;QD=35.25;SB=-113.17 GT:AD:DP:GL:GQ 1/1:0,31:29:-112.88,-8.73,-0.01:87.28
-chr1 4026761 . T A 283.60 PASS AC=2;AF=1.00;AN=2;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.63;MQ0=0;OQ=910.42;QD=32.51;SB=-440.82 GT:AD:DP:GL:GQ 1/1:0,28:25:-94.63,-7.53,-0.01:75.24
-chr1 4026798 . G C 10.99 LowQual AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=0;HaplotypeScore=12.99;MQ=22.58;MQ0=0;QD=2.20;SB=-10.00 GT:AD:DP:GL:GQ 0/1:2,3:1:-4.35,-0.30,-0.00:1.76
-chr1 4026914 . T C 49.44 PASS AC=2;AF=1.00;AN=2;DP=10;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.57;MQ0=0;OQ=246.59;QD=24.66;SB=-150.73 GT:AD:DP:GL:GQ 1/1:0,10:9:-28.25,-2.72,-0.01:27.05
-chr1 4026927 . A T 206.91 PASS AC=2;AF=1.00;AN=2;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.61;MQ0=0;OQ=634.07;QD=30.19;SB=-308.12 GT:AD:DP:GL:GQ 1/1:0,21:18:-67.00,-5.42,-0.01:54.16
-chr1 4027026 . C T 64.95 Indel AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=32.20;MQ0=1;QD=1.71;SB=-49.74 GT:AD:DP:GL:GQ 0/1:32,6:37:-20.92,-11.15,-115.91:97.79
-chr1 4027042 . T C 614.97 Indel AC=2;AF=1.00;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=29.00;MQ0=0;QD=27.95;SB=-154.73 GT:AD:DP:GL:GQ 1/1:0,22:21:-65.11,-6.34,-0.03:63.13
-chr1 4027052 . T C 696.49 Indel AC=2;AF=1.00;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=29.00;MQ0=0;QD=34.82;SB=-114.05 GT:AD:DP:GL:GQ 1/1:0,20:20:-73.24,-6.03,-0.01:60.18
-chr1 4027210 . G C 19.50 Indel;LowQual AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=26.88;MQ0=0;QD=1.39;SB=-27.39 GT:AD:DP:GL:GQ 0/1:12,2:10:-8.24,-3.01,-36.19:52.28
-chr1 4027332 . C G 36.70 PASS AC=2;AF=1.00;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.49;MQ0=0;OQ=1976.71;QD=43.93;SB=-544.06 GT:AD:DP:GL:GQ 1/1:0,45:45:-201.27,-13.56,-0.01:99
-chr1 4027338 . T C 290.59 PASS AC=2;AF=1.00;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=36.34;MQ0=0;OQ=1625.12;QD=35.33;SB=-497.48 GT:AD:DP:GL:GQ 1/1:0,46:46:-166.11,-13.85,-0.01:99
-chr1 4027382 rs4654478 T C 529.46 Indel AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=8.99;MQ=33.88;MQ0=0;QD=11.77;SB=-150.80 GT:AD:DP:GL:GQ 0/1:25,20:45:-69.78,-13.55,-102.60:99
-chr1 4027391 . A T 124.12 Indel AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=29.00;MQ0=0;QD=3.18;SB=-45.98 GT:AD:DP:GL:GQ 0/1:32,7:37:-26.84,-11.14,-119.06:99
-chr1 4027395 . T A 21.79 Indel;LowQual AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=29.00;MQ0=0;QD=0.61;SB=-10.00 GT:AD:DP:GL:GQ 0/1:32,4:36:-16.30,-10.84,-120.25:54.60
-chr1 4027428 rs4654405 C A 54.82 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=29.00;MQ0=0;OQ=1067.75;QD=35.59;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,30:30:-110.36,-9.03,-0.00:90.28
-chr1 4027512 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=38;Dels=0.03;HRun=0;HaplotypeScore=41.12;MQ=30.70;MQ0=0;OQ=583.71;QD=15.36;SB=-96.83 GT:AD:DP:GL:GQ 0/1:11,26:29:-70.09,-8.44,-49.32:99
-chr1 4027516 . C G 4.55 PASS AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=0;HaplotypeScore=2.16;MQ=30.66;MQ0=0;OQ=294.17;QD=7.54;SB=2.04 GT:AD:DP:GL:GQ 0/1:30,9:29:-41.44,-8.74,-84.22:99
-chr1 4027660 rs4654407 G A 193.14 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=42.76;MQ0=0;OQ=2435.59;QD=39.28;SB=-760.64 GT:AD:DP:GL:GQ 1/1:0,62:62:-247.16,-18.68,-0.02:99
-chr1 4027721 rs4654408 C T 529.60 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.67;MQ0=0;OQ=1726.14;QD=39.23;SB=-623.32 GT:AD:DP:GL:GQ 1/1:0,44:43:-176.21,-12.95,-0.01:99
-chr1 4027907 rs4654409 G A 268.91 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.85;MQ0=0;OQ=2188.75;QD=36.48;SB=-1120.98 GT:AD:DP:GL:GQ 1/1:0,60:57:-222.49,-17.18,-0.03:99
-chr1 4028014 rs10915398 T C 85.36 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.65;MQ0=0;OQ=1826.56;QD=33.83;SB=-678.24 GT:AD:DP:GL:GQ 1/1:0,54:52:-186.26,-15.66,-0.02:99
-chr1 4028230 rs10753357 A C 280.70 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.61;MQ0=0;OQ=1933.90;QD=32.78;SB=-901.67 GT:AD:DP:GL:GQ 1/1:0,59:56:-196.99,-16.87,-0.02:99
-chr1 4028383 rs10753358 C A 101.29 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=2;HaplotypeScore=0.96;MQ=59.50;MQ0=0;OQ=3292.23;QD=35.40;SB=-1450.96 GT:AD:DP:GL:GQ 1/1:0,93:90:-328.22,-27.11,-0.03:99
-chr1 4028555 rs10915400 C T 609.81 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2231.72;QD=39.15;SB=-1113.00 GT:AD:DP:GL:GQ 1/1:0,57:57:-226.78,-17.18,-0.02:99
-chr1 4028627 rs11586513 G A 570.71 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2205.25;QD=39.38;SB=-957.37 GT:AD:DP:GL:GQ 1/1:0,56:55:-224.12,-16.57,-0.01:99
-chr1 4029107 rs17404781 C A 590.07 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2642.82;QD=36.71;SB=-848.25 GT:AD:DP:GL:GQ 1/1:0,72:72:-267.88,-21.68,-0.02:99
-chr1 4029794 rs4603097 A G 153.18 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=2799.69;QD=36.36;SB=-819.68 GT:AD:DP:GL:GQ 1/1:1,76:76:-283.57,-22.89,-0.02:99
-chr1 4030208 rs4130940 A G 693.73 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3003.68;QD=34.53;SB=-1360.53 GT:AD:DP:GL:GQ 1/1:0,87:86:-303.98,-25.91,-0.03:99
-chr1 4030429 rs4130941 T C 169.61 PASS AC=2;AF=1.00;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=60.00;MQ0=0;OQ=3432.78;QD=35.76;SB=-1689.36 GT:AD:DP:GL:GQ 1/1:0,96:95:-342.28,-28.61,-0.03:99
-chr1 4030544 rs4391636 T C 184.14 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2626.35;QD=31.27;SB=-1250.03 GT:AD:DP:GL:GQ 1/1:0,84:83:-266.29,-25.03,-0.07:99
-chr1 4030874 rs4262509 T C 686.40 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=2253.22;QD=36.34;SB=-816.67 GT:AD:DP:GL:GQ 1/1:0,62:62:-228.93,-18.68,-0.02:99
-chr1 4031041 rs4400586 C T 220 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=2740.70;QD=40.30;SB=-1397.85 GT:AD:DP:GL:GQ 1/1:0,68:68:-277.67,-20.48,-0.01:99
-chr1 4031109 rs7537141 A G 223.55 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.17;MQ=58.69;MQ0=0;OQ=2389.72;QD=33.66;SB=-1060.09 GT:AD:DP:GL:GQ 1/1:0,70:68:-242.58,-20.48,-0.02:99
-chr1 4031170 rs7537236 A G 284.86 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.42;MQ0=0;OQ=1865.29;QD=33.31;SB=-585.57 GT:AD:DP:GL:GQ 1/1:0,56:52:-190.13,-15.66,-0.02:99
-chr1 4031176 rs7537237 A G 151.85 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=58.47;MQ0=0;OQ=1912.22;QD=32.97;SB=-672.55 GT:AD:DP:GL:GQ 1/1:0,58:55:-194.84,-16.57,-0.03:99
-chr1 4031220 rs7532788 C T 294.77 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.01;MQ0=0;OQ=2323.83;QD=38.10;SB=-1060.94 GT:AD:DP:GL:GQ 1/1:0,60:59:-235.99,-17.78,-0.02:99
-chr1 4031586 rs3936238 A G 138.31 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.67;MQ=58.69;MQ0=0;OQ=2519.09;QD=35.48;SB=-1162.71 GT:AD:DP:GL:GQ 1/1:0,71:71:-255.52,-21.39,-0.03:99
-chr1 4031878 rs9628649 C T 644.41 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.66;MQ0=0;OQ=2284.52;QD=38.72;SB=-825.09 GT:AD:DP:GL:GQ 1/1:0,59:58:-232.06,-17.48,-0.02:99
-chr1 4031986 rs9628650 G T 130.41 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=59.09;MQ0=0;OQ=2689.72;QD=35.39;SB=-1301.17 GT:AD:DP:GL:GQ 1/1:0,75:74:-272.58,-22.29,-0.02:99
-chr1 4032433 rs7529548 G C 483.28 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=2621.92;QD=40.34;SB=-1086.06 GT:AD:DP:GL:GQ 1/1:0,65:62:-265.80,-18.69,-0.02:99
-chr1 4032637 rs7538658 C T 720.56 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2747.15;QD=39.25;SB=-1233.63 GT:AD:DP:GL:GQ 1/1:0,70:70:-278.33,-21.09,-0.03:99
-chr1 4032742 rs7529853 G C 195.26 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.01;HRun=0;HaplotypeScore=1.43;MQ=59.67;MQ0=0;OQ=2970.07;QD=42.43;SB=-1256.98 GT:AD:DP:GL:GQ 1/1:0,69:70:-300.61,-20.79,-0.02:99
-chr1 4032815 rs10157040 T G 55.91 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.79;MQ=60.00;MQ0=0;OQ=2073.63;QD=33.99;SB=-743.38 GT:AD:DP:GL:GQ 1/1:0,61:60:-210.97,-18.07,-0.02:99
-chr1 4032895 rs60405213 A G 332.98 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=1606.75;QD=29.75;SB=-645.91 GT:AD:DP:GL:GQ 1/1:0,54:50:-164.30,-15.08,-0.04:99
-chr1 4032956 rs10157057 T C 590.98 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=1852.28;QD=34.95;SB=-804.30 GT:AD:DP:GL:GQ 1/1:0,53:53:-188.83,-15.97,-0.02:99
-chr1 4033505 . A T 38.74 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=20;HaplotypeScore=16.08;MQ=50.01;MQ0=1;QD=0.73;SB=62.20 GT:AD:DP:GL:GQ 0/1:43,10:38:-18.61,-11.45,-119.32:71.58
-chr1 4035925 rs6686087 G A 676.98 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=1910.92;QD=36.06;SB=-777.68 GT:AD:DP:GL:GQ 1/1:0,53:52:-194.71,-15.68,-0.03:99
-chr1 4036210 rs7553013 A G 89.18 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=1455.02;QD=35.49;SB=-567.89 GT:AD:DP:GL:GQ 1/1:0,41:41:-149.10,-12.35,-0.01:99
-chr1 4037078 rs6671404 G A 595.18 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=49.26;MQ0=0;OQ=2338.43;QD=39.63;SB=-1084.95 GT:AD:DP:GL:GQ 1/1:0,59:59:-237.45,-17.77,-0.02:99
-chr1 4037233 . C T 0.09 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=10.47;MQ=23.53;MQ0=14;OQ=386.45;QD=7.43;SB=-174.70 GT:AD:DP:GL:GQ 0/1:24,28:16:-46.75,-4.82,-13.21:83.85
-chr1 4037300 rs12731949 G A 33.47 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=10.93;MQ=13.10;MQ0=15;QD=0.96;SB=-6.99 GT:AD:DP:GL:GQ 0/1:26,6:3:-7.53,-0.90,-3.57:26.65
-chr1 4037316 . A G 19.58 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=4.32;MQ=10.60;MQ0=15;QD=0.68;SB=-10.00 GT:AD:DP:GL:GQ 0/1:25,4:3:-6.14,-0.91,-2.76:18.51
-chr1 4037317 rs12747176 C T 33.48 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=4.32;MQ=10.78;MQ0=15;QD=1.20;SB=-10.00 GT:AD:DP:GL:GQ 0/1:25,3:3:-7.53,-0.90,-3.30:23.93
-chr1 4037349 rs55974954 C T 4.01 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=15.25;MQ0=10;OQ=78.13;QD=3.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:11,9:5:-12.60,-1.51,-5.79:42.85
-chr1 4037373 . C T 49.25 HARD_TO_VALIDATE;LowQual;SnpCluster AC=2;AF=1.00;AN=2;DP=23;Dels=0.09;HRun=0;HaplotypeScore=5.10;MQ=12.43;MQ0=14;QD=2.14;SB=-10.00 GT:AD:DP:GL:GQ 1/1:17,4:2:-8.33,-0.60,-0.00:6.02
-chr1 4037374 rs58910132 A G 67.17 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.10;HRun=0;HaplotypeScore=2.46;MQ=12.64;MQ0=13;QD=3.20;SB=-10.00 GT:AD:DP:GL:GQ 1/1:14,5:3:-10.21,-0.90,-0.00:9.03
-chr1 4037375 . C T 89.13 HARD_TO_VALIDATE;SnpCluster AC=2;AF=1.00;AN=2;DP=21;Dels=0.10;HRun=0;HaplotypeScore=2.62;MQ=12.64;MQ0=13;QD=4.24;SB=-10.00 GT:AD:DP:GL:GQ 1/1:14,5:3:-12.40,-0.90,-0.00:9.03
-chr1 4037523 . C T 36.25 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=8.14;MQ=8.07;MQ0=27;QD=0.91;SB=-10.00 GT:AD:DP:GL:GQ 0/1:35,5:3:-7.81,-0.90,-3.47:25.65
-chr1 4037532 . G A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=7.98;MQ=8.93;MQ0=30;OQ=75.12;QD=1.67;SB=-10.00 GT:AD:DP:GL:GQ 0/1:32,13:5:-12.30,-1.51,-6.19:46.86
-chr1 4037589 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=30.55;MQ=12.67;MQ0=42;OQ=141.32;QD=1.74;SB=-10.00 GT:AD:DP:GL:GQ 0/1:62,18:18:-22.84,-5.42,-40.02:99
-chr1 4037590 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=0;HaplotypeScore=31.66;MQ=13.12;MQ0=42;OQ=99.34;QD=1.18;SB=-10.00 GT:AD:DP:GL:GQ 0/1:65,14:18:-18.65,-5.43,-43.06:99
-chr1 4037755 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=10.80;MQ=28.57;MQ0=9;OQ=123.11;QD=4.25;SB=-10.00 GT:AD:DP:GL:GQ 0/1:16,13:15:-20.11,-4.52,-34.90:99
-chr1 4037764 . G A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=27.02;MQ0=10;OQ=406.03;QD=10.68;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,21:18:-49.31,-5.43,-18.48:99
-chr1 4037797 . G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=82;Dels=0.00;HRun=1;HaplotypeScore=2.36;MQ=25.37;MQ0=16;OQ=242.41;QD=2.96;SB=-0.99 GT:AD:DP:GL:GQ 0/1:69,13:49:-42.29,-14.76,-143.27:99
-chr1 4037813 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=30.43;MQ=23.50;MQ0=19;OQ=796.43;QD=8.38;SB=2.04 GT:AD:DP:GL:GQ 0/1:48,46:55:-99.50,-16.57,-97.10:99
-chr1 4037822 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=126;Dels=0.00;HRun=0;HaplotypeScore=35.10;MQ=23.24;MQ0=31;OQ=606.69;QD=4.81;SB=-57.33 GT:AD:DP:GL:GQ 0/1:70,54:63:-82.95,-19.00,-147.74:99
-chr1 4037843 rs61768802 C A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=180;Dels=0.00;HRun=1;HaplotypeScore=17.92;MQ=21.78;MQ0=58;OQ=417.65;QD=2.32;SB=-34.91 GT:AD:DP:GL:GQ 0/1:148,32:87:-71.25,-26.21,-246.67:99
-chr1 4037880 rs61768803 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=196;Dels=0.00;HRun=0;HaplotypeScore=29.31;MQ=22.28;MQ0=61;OQ=120.84;QD=0.62;SB=11.02 GT:AD:DP:GL:GQ 0/1:165,26:69:-36.22,-20.85,-175.88:99
-chr1 4037929 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=2.77;MQ=21.90;MQ0=34;OQ=107.87;QD=1.14;SB=35.15 GT:AD:DP:GL:GQ 0/1:76,17:46:-27.95,-13.88,-137.64:99
-chr1 4037943 . C T 85.40 PASS AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=21.61;MQ0=16;OQ=809.30;QD=13.95;SB=-392.58 GT:AD:DP:GL:GQ 0/1:14,44:31:-93.56,-9.34,-20.82:99
-chr1 4037953 . T C 0.02 FDRtranche1.00to2.00 AC=2;AF=1.00;AN=2;DP=38;Dels=0.00;HRun=3;HaplotypeScore=11.12;MQ=21.57;MQ0=12;OQ=534.72;QD=14.07;SB=-137.10 GT:AD:DP:GL:GQ 1/1:2,36:20:-60.44,-6.03,-3.38:26.46
-chr1 4037971 . G A 35.49 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=12;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=11.71;MQ0=7;QD=2.96;SB=-7.00 GT:AD:DP:GL:GQ 0/1:2,10:3:-7.73,-0.90,-2.97:20.65
-chr1 4038007 . C T 11.96 PASS AC=2;AF=1.00;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=24.37;MQ0=17;OQ=478.18;QD=12.58;SB=-0.67 GT:AD:DP:GL:GQ 1/1:9,29:15:-54.99,-4.52,-3.70:8.18
-chr1 4038085 . G A 6.73 PASS AC=2;AF=1.00;AN=2;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=25.54;MQ0=21;OQ=1434.12;QD=19.65;SB=-222.29 GT:AD:DP:GL:GQ 1/1:0,70:37:-147.01,-11.15,-0.01:99
-chr1 4038095 . A C 37.18 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=2;HaplotypeScore=5.05;MQ=31.28;MQ0=12;QD=0.48;SB=35.10 GT:AD:DP:GL:GQ 0/1:67,11:51:-22.37,-15.37,-153.89:70.01
-chr1 4038119 rs61768805 A G 52.49 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=34.39;MQ0=8;OQ=2201.59;QD=25.60;SB=-880.89 GT:AD:DP:GL:GQ 1/1:0,86:64:-223.78,-19.28,-0.04:99
-chr1 4038137 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=141;Dels=0.00;HRun=1;HaplotypeScore=16.06;MQ=35.46;MQ0=14;OQ=344.80;QD=2.45;SB=-97.28 GT:AD:DP:GL:GQ 0/1:105,36:95:-66.41,-28.65,-282.14:99
-chr1 4038181 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=266;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=35.03;MQ0=15;OQ=1093.66;QD=4.11;SB=-524.11 GT:AD:DP:GL:GQ 0/1:186,80:195:-171.41,-58.76,-524.00:99
-chr1 4038248 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=280;Dels=0.00;HRun=0;HaplotypeScore=30.85;MQ=29.46;MQ0=44;OQ=1065.01;QD=3.80;SB=-230.16 GT:AD:DP:GL:GQ 0/1:155,104:139:-156.85,-47.07,-312.49:99
-chr1 4038269 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=221;Dels=0.00;HRun=2;HaplotypeScore=13.90;MQ=27.15;MQ0=44;OQ=427.47;QD=1.93;SB=-154.75 GT:AD:DP:GL:GQ 0/1:158,62:110:-79.18,-33.15,-296.78:99
-chr1 4038306 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=30.95;MQ=24.15;MQ0=24;OQ=80.75;QD=0.71;SB=17.44 GT:AD:DP:GL:GQ 0/1:88,21:54:-27.64,-16.28,-152.20:99
-chr1 4038311 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=0;HaplotypeScore=30.17;MQ=23.18;MQ0=20;OQ=320.40;QD=3.56;SB=-113.10 GT:AD:DP:GL:GQ 0/1:60,30:46:-49.20,-13.87,-108.56:99
-chr1 4038321 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=3;HaplotypeScore=15.26;MQ=23.68;MQ0=14;OQ=766.53;QD=12.99;SB=-327.28 GT:AD:DP:GL:GQ 0/1:10,49:31:-89.28,-9.34,-16.69:73.43
-chr1 4038334 . G A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.69;MQ=25.40;MQ0=9;OQ=78.94;QD=1.49;SB=-27.72 GT:AD:DP:GL:GQ 0/1:40,11:25:-21.55,-10.37,-63.16:99
-chr1 4038397 . A G 17.54 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.28;MQ=29.53;MQ0=4;OQ=326.31;QD=7.42;SB=-58.84 GT:AD:DP:GL:GQ 0/1:24,20:28:-44.35,-8.44,-57.72:99
-chr1 4038422 rs61768806 G A 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=18.20;MQ=33.84;MQ0=4;OQ=183.71;QD=3.40;SB=-62.31 GT:AD:DP:GL:GQ 0/1:35,13:24:-31.46,-9.80,-50.09:99
-chr1 4038450 rs9426493 G A 0.12 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=7.50;MQ=40.53;MQ0=7;OQ=257.95;QD=3.31;SB=38.10 GT:AD:DP:GL:GQ 0/1:50,27:46:-42.95,-13.87,-108.04:99
-chr1 4038485 . T C 49.84 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=1;HaplotypeScore=36.99;MQ=38.79;MQ0=13;QD=0.38;SB=-42.38 GT:AD:DP:GL:GQ 0/1:107,23:79:-32.08,-23.81,-273.26:82.67
-chr1 4038495 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=136;Dels=0.00;HRun=3;HaplotypeScore=26.37;MQ=38.36;MQ0=11;OQ=110.49;QD=0.81;SB=81.70 GT:AD:DP:GL:GQ 0/1:101,35:77:-37.55,-23.22,-250.69:99
-chr1 4038559 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=142;Dels=0.00;HRun=2;HaplotypeScore=4.40;MQ=37.40;MQ0=14;OQ=181.94;QD=1.28;SB=76.72 GT:AD:DP:GL:GQ 0/1:114,27:102:-52.21,-30.74,-302.69:99
-chr1 4038595 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=10.57;MQ=44.92;MQ0=10;OQ=118.91;QD=1.67;SB=44.58 GT:AD:DP:GL:GQ 0/1:49,22:52:-30.86,-15.68,-162.15:99
-chr1 4038920 rs12240075 G A 506.65 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.13;MQ0=0;OQ=3029.69;QD=39.35;SB=-1486.40 GT:AD:DP:GL:GQ 1/1:0,77:75:-306.57,-22.59,-0.02:99
-chr1 4039098 rs4073835 G A 496.74 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2305.48;QD=39.08;SB=-997.03 GT:AD:DP:GL:GQ 1/1:0,59:59:-234.15,-17.78,-0.02:99
-chr1 4039791 rs4639725 C T 236.18 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.86;MQ=59.67;MQ0=0;OQ=2672.94;QD=38.18;SB=-1315.36 GT:AD:DP:GL:GQ 1/1:0,70:69:-270.90,-20.79,-0.02:99
-chr1 4039890 rs4436359 C A 272.88 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=60.00;MQ0=0;OQ=1804.54;QD=34.70;SB=-797.85 GT:AD:DP:GL:GQ 1/1:1,51:51:-184.06,-15.36,-0.02:99
-chr1 4040736 rs6684922 G A 149.31 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.70;MQ0=0;OQ=2464.15;QD=39.74;SB=-984.31 GT:AD:DP:GL:GQ 1/1:0,62:61:-250.01,-18.37,-0.01:99
-chr1 4041212 rs7418376 A G 9.41 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=4.36;MQ=59.69;MQ0=0;OQ=2587.00;QD=34.49;SB=-1318.64 GT:AD:DP:GL:GQ 1/1:0,75:71:-262.30,-21.38,-0.02:99
-chr1 4041774 rs6657076 T C 524.19 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.94;MQ0=0;OQ=2268.81;QD=30.25;SB=-1070.20 GT:AD:DP:GL:GQ 1/1:0,75:71:-230.53,-21.41,-0.06:99
-chr1 4045735 rs10915422 A C 14.87 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=4.42;MQ=59.68;MQ0=0;OQ=2455.12;QD=33.63;SB=-728.83 GT:AD:DP:GL:GQ 1/1:0,73:71:-249.12,-21.38,-0.02:99
-chr1 4045888 rs10915423 A C 727.77 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2031.28;QD=35.02;SB=-998.12 GT:AD:DP:GL:GQ 1/1:0,58:58:-206.73,-17.47,-0.02:99
-chr1 4046948 rs10915425 T G 80.45 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=53.47;MQ0=0;OQ=1869.59;QD=31.69;SB=-736.37 GT:AD:DP:GL:GQ 1/1:0,59:55:-190.57,-16.57,-0.02:99
-chr1 4046996 rs55774050 C G 2240.61 Indel AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=9.46;MQ=51.11;MQ0=0;QD=43.09;SB=-978.74 GT:AD:DP:GL:GQ 1/1:0,52:52:-227.66,-15.67,-0.01:99
-chr1 4047821 rs11578552 T C 402.68 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=2100.45;QD=30.89;SB=-846.51 GT:AD:DP:GL:GQ 1/1:0,68:66:-213.69,-19.91,-0.06:99
-chr1 4047883 rs11577344 C T 490.32 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1935.40;QD=37.95;SB=-660.87 GT:AD:DP:GL:GQ 1/1:0,51:48:-197.13,-14.46,-0.01:99
-chr1 4049164 rs7411603 A G 3.63 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=6.69;MQ=58.71;MQ0=0;OQ=1270.28;QD=27.03;SB=-493.17 GT:AD:DP:GL:GQ 1/1:0,47:41:-130.65,-12.36,-0.04:99
-chr1 4050387 rs10753365 G A 99.83 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=58.61;MQ0=0;OQ=1534.51;QD=32.65;SB=-464.08 GT:AD:DP:GL:GQ 1/1:0,46:42:-157.07,-12.67,-0.03:99
-chr1 4051611 rs4548406 T C 78.22 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1346.57;QD=28.65;SB=-544.85 GT:AD:DP:GL:GQ 1/1:0,47:44:-138.29,-13.28,-0.05:99
-chr1 4051999 rs12123119 C T 624.91 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2169.89;QD=37.41;SB=-1044.39 GT:AD:DP:GL:GQ 1/1:0,58:55:-220.59,-16.57,-0.02:99
-chr1 4052066 rs4654410 C T 678.96 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=2087.99;QD=37.96;SB=-873.17 GT:AD:DP:GL:GQ 1/1:0,55:53:-212.40,-15.97,-0.02:99
-chr1 4052788 rs4481820 C A 313.17 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.81;MQ0=0;OQ=1188.08;QD=18.86;SB=-612.83 GT:AD:DP:GL:GQ 0/1:26,37:61:-140.47,-18.38,-73.47:99
-chr1 4052947 rs6676961 T G 272.74 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=60.00;MQ0=0;OQ=1401.56;QD=15.75;SB=-713.67 GT:AD:DP:GL:GQ 0/1:39,50:87:-169.64,-26.20,-144.08:99
-chr1 4053067 rs12125719 A G 101.01 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.17;MQ0=0;OQ=1483.09;QD=29.08;SB=-606.95 GT:AD:DP:GL:GQ 1/1:0,51:48:-151.94,-14.48,-0.05:99
-chr1 4053090 rs12125725 A G 83.74 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.17;MQ0=0;OQ=1585.81;QD=31.09;SB=-493.18 GT:AD:DP:GL:GQ 1/1:0,51:49:-162.20,-14.77,-0.03:99
-chr1 4053122 rs12126649 T C 176.61 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.71;MQ=59.24;MQ0=0;OQ=907.97;QD=14.88;SB=-331.31 GT:AD:DP:GL:GQ 0/1:25,36:59:-111.87,-17.79,-96.53:99
-chr1 4055170 rs12033210 T C 0.60 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=1.74;MQ=28.53;MQ0=2;OQ=209.19;QD=4.65;SB=-102.57 GT:AD:DP:GL:GQ 0/1:32,13:39:-35.96,-11.75,-110.64:99
-chr1 4056038 rs10799198 G A 260.47 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.90;MQ=58.67;MQ0=0;OQ=782.28;QD=15.96;SB=-386.17 GT:AD:DP:GL:GQ 0/1:25,24:47:-95.68,-14.17,-75.73:99
-chr1 4057058 rs4600014 A G 442.87 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=917.69;QD=13.70;SB=-389.30 GT:AD:DP:GL:GQ 0/1:34,33:66:-114.93,-19.88,-136.81:99
-chr1 4057633 rs4361964 G C 120.54 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.73;MQ=59.22;MQ0=0;OQ=837.80;QD=15.51;SB=-437.88 GT:AD:DP:GL:GQ 0/1:29,25:53:-103.04,-15.97,-126.00:99
-chr1 4057702 rs4351611 C T 297.44 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.56;MQ0=0;OQ=594.05;QD=11.21;SB=-284.78 GT:AD:DP:GL:GQ 0/1:33,20:53:-78.67,-15.98,-105.42:99
-chr1 4057917 . A T 65.58 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.62;MQ0=0;OQ=752.30;QD=12.54;SB=-170.72 GT:AD:DP:GL:GQ 0/1:33,27:58:-95.98,-17.47,-122.23:99
-chr1 4058815 rs10915428 G T 369.02 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.39;MQ0=0;OQ=1224.65;QD=16.11;SB=-630.74 GT:AD:DP:GL:GQ 0/1:35,41:75:-148.34,-22.59,-115.71:99
-chr1 4059239 rs10799199 C T 251.96 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.66;MQ0=0;OQ=1243.57;QD=18.84;SB=-304.82 GT:AD:DP:GL:GQ 0/1:29,37:64:-146.92,-19.28,-100.42:99
-chr1 4059378 . C T 11.57 PASS AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=3;HaplotypeScore=0.47;MQ=59.47;MQ0=0;OQ=1236.26;QD=14.72;SB=-551.55 GT:AD:DP:GL:GQ 0/1:45,38:82:-151.61,-24.70,-168.36:99
-chr1 4060338 rs10799200 T C 170.59 PASS AC=1;AF=0.50;AN=2;DB;DP=20;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=152.75;QD=7.64;SB=-10.00 GT:AD:DP:GL:GQ 0/1:13,7:19:-24.28,-5.72,-48.27:99
-chr1 4064782 rs61768818 G A 481.48 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.07;MQ0=0;OQ=848.15;QD=13.90;SB=-350.47 GT:AD:DP:GL:GQ 0/1:34,27:59:-105.87,-17.77,-118.54:99
-chr1 4066674 rs12032257 C T 294.19 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=59.36;MQ0=0;OQ=916.01;QD=14.09;SB=-410.80 GT:AD:DP:GL:GQ 0/1:35,30:64:-114.18,-19.29,-113.47:99
-chr1 4067283 . T C 0.61 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=2;HaplotypeScore=4.39;MQ=59.62;MQ0=0;OQ=557.04;QD=9.13;SB=-241.90 GT:AD:DP:GL:GQ 0/1:35,25:58:-76.48,-17.49,-133.72:99
-chr1 4067926 rs7542313 A G 387.57 PASS AC=1;AF=0.50;AN=2;DB;DP=21;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=220.94;QD=10.52;SB=-100.82 GT:AD:DP:GL:GQ 0/1:11,10:19:-31.10,-5.72,-40.90:99
-chr1 4075727 . C T 158.87 PASS AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.34;MQ=59.67;MQ0=0;OQ=1143.65;QD=16.34;SB=-503.75 GT:AD:DP:GL:GQ 0/1:35,35:66:-137.54,-19.89,-102.02:99
-chr1 4075966 rs6670920 T C 606.24 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=1104.32;QD=15.13;SB=-452.80 GT:AD:DP:GL:GQ 0/1:30,43:71:-135.11,-21.40,-121.92:99
-chr1 4077630 rs4654486 G A 691.51 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2711.47;QD=39.87;SB=-1087.95 GT:AD:DP:GL:GQ 1/1:0,68:68:-274.75,-20.48,-0.02:99
-chr1 4078163 rs10737402 T C 504.16 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=530.04;QD=10.82;SB=-231.26 GT:AD:DP:GL:GQ 0/1:26,23:49:-71.06,-14.78,-100.24:99
-chr1 4080498 rs12042946 T C 249.02 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=60.30;MQ0=0;OQ=891.53;QD=12.56;SB=-237.45 GT:AD:DP:GL:GQ 0/1:37,34:69:-113.22,-20.78,-148.64:99
-chr1 4080702 rs12040805 C T 139.94 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.60;MQ0=0;OQ=776.81;QD=15.54;SB=-108.61 GT:AD:DP:GL:GQ 0/1:26,24:46:-94.83,-13.87,-71.68:99
-chr1 4081256 rs10753367 T C 35.67 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=3;HaplotypeScore=2.04;MQ=59.74;MQ0=0;OQ=1167.96;QD=12.98;SB=-513.88 GT:AD:DP:GL:GQ 0/1:48,42:88:-146.59,-26.51,-188.24:99
-chr1 4081433 rs10799203 T G 17.84 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=59.59;MQ0=0;OQ=328.89;QD=7.15;SB=-123.86 GT:AD:DP:GL:GQ 0/1:29,17:43:-49.13,-12.95,-102.00:99
-chr1 4082645 rs4400585 G T 491.60 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=492.73;QD=10.71;SB=-210.53 GT:AD:DP:GL:GQ 0/1:27,19:44:-65.81,-13.26,-82.00:99
-chr1 4082866 rs10915437 A G 75.21 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=4.59;MQ=58.36;MQ0=0;OQ=891.90;QD=12.56;SB=-289.16 GT:AD:DP:GL:GQ 0/1:37,34:68:-112.97,-20.49,-138.67:99
-chr1 4083359 rs56090673 C T 320.01 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1009.69;QD=17.11;SB=-451.46 GT:AD:DP:GL:GQ 0/1:27,32:58:-121.73,-17.48,-93.77:99
-chr1 4083978 rs7531421 A G 116.24 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=57.42;MQ0=0;OQ=435.48;QD=7.02;SB=-215.25 GT:AD:DP:GL:GQ 0/1:41,21:60:-64.91,-18.08,-162.54:99
-chr1 4084862 rs6675734 C T 47.52 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=5.09;MQ=59.20;MQ0=0;OQ=1105.86;QD=19.07;SB=-554.64 GT:AD:DP:GL:GQ 0/1:25,33:57:-131.05,-17.18,-82.44:99
-chr1 4084986 rs10753368 A G 566.85 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1198.41;QD=14.10;SB=-565.61 GT:AD:DP:GL:GQ 0/1:44,41:83:-148.13,-25.00,-168.94:99
-chr1 4085630 rs6679136 C T 24.06 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=4.32;MQ=58.42;MQ0=0;OQ=804.43;QD=14.36;SB=-252.24 GT:AD:DP:GL:GQ 0/1:29,27:53:-99.70,-15.97,-99.87:99
-chr1 4085663 rs6669476 G A 136.10 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.26;MQ=57.81;MQ0=0;OQ=833.61;QD=13.89;SB=-171.20 GT:AD:DP:GL:GQ 0/1:32,27:56:-103.51,-16.87,-106.04:99
-chr1 4086169 rs6426389 C T 138.99 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.83;MQ=59.69;MQ0=0;OQ=1183.25;QD=19.72;SB=-609.44 GT:AD:DP:GL:GQ 0/1:26,34:60:-139.68,-18.07,-94.16:99
-chr1 4086333 rs6663976 C G 599.30 PASS AC=2;AF=1.00;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=3962.79;QD=44.03;SB=-1451.88 GT:AD:DP:GL:GQ 1/1:0,90:89:-395.28,-26.81,-0.02:99
-chr1 4087812 rs4654487 T C 259.04 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=59.52;MQ0=0;OQ=1480.85;QD=30.85;SB=-766.73 GT:AD:DP:GL:GQ 1/1:0,48:47:-151.71,-14.17,-0.04:99
-chr1 4089403 . G C 16.75 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.80;MQ=58.74;MQ0=0;QD=0.45;SB=53.21 GT:AD:DP:GL:GQ 0/1:27,10:26:-12.79,-7.84,-102.04:49.49
-chr1 4089489 rs7536041 T C 90.49 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=59.19;MQ0=0;OQ=812.10;QD=15.62;SB=-146.31 GT:AD:DP:GL:GQ 0/1:23,29:51:-99.86,-15.37,-93.49:99
-chr1 4090545 rs4282783 T G 725.47 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2332.11;QD=35.34;SB=-970.80 GT:AD:DP:GL:GQ 1/1:0,66:66:-236.81,-19.88,-0.02:99
-chr1 4091584 rs4654488 A T 219.84 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=2.30;MQ=60.00;MQ0=0;OQ=743.21;QD=16.52;SB=-370.44 GT:AD:DP:GL:GQ 0/1:20,25:44:-90.86,-13.25,-75.80:99
-chr1 4092168 rs10915441 C G 2.97 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=4;HaplotypeScore=3.62;MQ=59.69;MQ0=0;OQ=1389.48;QD=18.78;SB=-645.48 GT:AD:DP:GL:GQ 0/1:35,39:69:-163.06,-20.83,-116.77:99
-chr1 4092567 rs10915442 A G 394.78 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.42;MQ0=0;OQ=572.04;QD=14.30;SB=-311.22 GT:AD:DP:GL:GQ 0/1:18,22:39:-72.24,-11.76,-67.58:99
-chr1 4093270 rs10799206 C G 674.75 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.42;MQ0=0;OQ=2045.47;QD=38.59;SB=-902.40 GT:AD:DP:GL:GQ 1/1:0,52:50:-208.16,-15.07,-0.02:99
-chr1 4093286 rs12409803 G A 414.64 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=57.03;MQ0=0;OQ=773.71;QD=14.33;SB=-322.45 GT:AD:DP:GL:GQ 0/1:28,26:51:-96.03,-15.38,-79.04:99
-chr1 4093324 rs10915443 G C 254.64 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=58.02;MQ0=0;OQ=1430.72;QD=20.15;SB=-674.45 GT:AD:DP:GL:GQ 0/1:30,40:69:-167.15,-20.79,-134.28:99
-chr1 4093733 rs6693173 A G 464.34 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1381.36;QD=28.78;SB=-644.93 GT:AD:DP:GL:GQ 1/1:0,48:45:-141.76,-13.57,-0.04:99
-chr1 4094457 rs4131506 A C 340.66 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=59.60;MQ0=0;OQ=704.94;QD=12.15;SB=-316.99 GT:AD:DP:GL:GQ 0/1:32,26:58:-91.25,-17.47,-120.43:99
-chr1 4094660 rs4131508 A G 571.17 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=1332.71;QD=17.31;SB=-634.89 GT:AD:DP:GL:GQ 0/1:33,44:77:-159.75,-23.19,-134.55:99
-chr1 4094683 rs4630099 A G 443.98 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1288.63;QD=16.31;SB=-670.63 GT:AD:DP:GL:GQ 0/1:36,43:77:-155.34,-23.19,-143.15:99
-chr1 4095397 rs10915444 T C 1.76 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=8.82;MQ=58.53;MQ0=0;OQ=789.45;QD=10.25;SB=-380.13 GT:AD:DP:GL:GQ 0/1:49,28:72:-103.91,-21.68,-179.32:99
-chr1 4095558 rs35986531 G A 271.33 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.49;MQ=56.64;MQ0=0;OQ=1336.75;QD=16.71;SB=-522.69 GT:AD:DP:GL:GQ 0/1:36,44:75:-159.55,-22.59,-133.47:99
-chr1 4095815 rs12118815 A T 0.50 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=1;HaplotypeScore=13.10;MQ=57.70;MQ0=3;OQ=1249.48;QD=13.88;SB=-570.06 GT:AD:DP:GL:GQ 0/1:44,46:80:-152.33,-24.10,-146.70:99
-chr1 4095919 . A T 39.64 LowQual AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=51.56;MQ0=5;QD=0.50;SB=-37.91 GT:AD:DP:GL:GQ 0/1:71,9:66:-27.13,-19.88,-223.94:72.48
-chr1 4096225 . A G 48.26 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.44;MQ=52.24;MQ0=7;QD=0.68;SB=74.28 GT:AD:DP:GL:GQ 0/1:64,7:63:-27.09,-18.98,-229.53:81.10
-chr1 4096236 . T G 0.06 PASS AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=54.07;MQ0=3;OQ=91.64;QD=1.31;SB=86.24 GT:AD:DP:GL:GQ 0/1:61,9:66:-32.33,-19.88,-208.22:99
-chr1 4096240 . A T 0.08 PASS AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=53.91;MQ0=2;OQ=161.77;QD=2.16;SB=86.29 GT:AD:DP:GL:GQ 0/1:64,11:72:-41.14,-21.68,-231.71:99
-chr1 4096257 . A T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.00;MQ=53.32;MQ0=2;OQ=207.48;QD=2.56;SB=92.31 GT:AD:DP:GL:GQ 0/1:68,13:79:-47.82,-23.79,-251.49:99
-chr1 4096278 . A G 232.76 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=27.32;MQ=52.46;MQ0=1;QD=2.68;SB=98.35 GT:AD:DP:GL:GQ 0/1:72,15:85:-52.16,-25.60,-288.15:99
-chr1 4096286 . G A 106.04 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=90;Dels=0.00;HRun=1;HaplotypeScore=48.93;MQ=51.56;MQ0=1;QD=1.18;SB=98.32 GT:AD:DP:GL:GQ 0/1:78,12:85:-39.49,-25.60,-276.62:99
-chr1 4096288 rs34088827 G A 955.67 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=1;HaplotypeScore=48.46;MQ=51.26;MQ0=1;QD=10.62;SB=-379.33 GT:AD:DP:GL:GQ 0/1:57,33:88:-125.36,-26.51,-207.05:99
-chr1 4096294 . A T 86.31 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=1;HaplotypeScore=32.32;MQ=50.46;MQ0=1;QD=0.97;SB=89.30 GT:AD:DP:GL:GQ 0/1:73,16:80:-36.01,-24.10,-264.64:99
-chr1 4096606 rs28726337 A G 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=2;HaplotypeScore=13.44;MQ=43.57;MQ0=1;OQ=262.51;QD=2.76;SB=-123.92 GT:AD:DP:GL:GQ 0/1:75,20:86:-55.44,-25.91,-287.10:99
-chr1 4096617 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=1;HaplotypeScore=34.91;MQ=42.33;MQ0=1;OQ=1160.59;QD=10.01;SB=-606.06 GT:AD:DP:GL:GQ 0/1:70,46:109:-152.17,-32.83,-258.54:99
-chr1 4096620 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=123;Dels=0.01;HRun=0;HaplotypeScore=30.11;MQ=42.25;MQ0=1;OQ=989.14;QD=8.04;SB=-388.23 GT:AD:DP:GL:GQ 0/1:72,50:106:-134.12,-31.93,-263.47:99
-chr1 4096638 rs28412783 C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=181;Dels=0.02;HRun=0;HaplotypeScore=64.64;MQ=40.70;MQ0=1;OQ=1178.07;QD=6.51;SB=-446.63 GT:AD:DP:GL:GQ 0/1:123,47:169:-194.38,-73.29,-545.37:99
-chr1 4096655 rs61768832 A G 321.42 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=228;Dels=0.00;HRun=1;HaplotypeScore=261.82;MQ=41.93;MQ0=0;QD=1.41;SB=-157.54 GT:AD:DP:GL:GQ 0/1:199,29:224:-102.90,-67.48,-791.83:99
-chr1 4096678 . T G 1342.80 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=236;Dels=0.00;HRun=0;HaplotypeScore=216.99;MQ=43.01;MQ0=0;QD=5.69;SB=-512.77 GT:AD:DP:GL:GQ 0/1:166,63:218:-227.86,-90.30,-587.53:99
-chr1 4096685 . A G 1626.24 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=239;Dels=0.00;HRun=1;HaplotypeScore=162.66;MQ=41.97;MQ0=0;QD=6.80;SB=-808.35 GT:AD:DP:GL:GQ 0/1:167,72:225:-233.68,-67.78,-652.24:99
-chr1 4096698 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=228;Dels=0.00;HRun=0;HaplotypeScore=76.98;MQ=42.62;MQ0=0;OQ=2269.48;QD=9.95;SB=-1066.45 GT:AD:DP:GL:GQ 0/1:129,90:219:-325.16,-94.93,-493.11:99
-chr1 4096706 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=1;HaplotypeScore=79.95;MQ=43.15;MQ0=0;OQ=1034.27;QD=4.50;SB=-170.01 GT:AD:DP:GL:GQ 0/1:185,45:223:-173.88,-67.17,-658.24:99
-chr1 4096718 rs61768834 G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=216;Dels=0.00;HRun=0;HaplotypeScore=38.48;MQ=44.61;MQ0=0;OQ=645.34;QD=2.99;SB=-265.93 GT:AD:DP:GL:GQ 0/1:168,32:157:-165.70,-97.89,-554.00:99
-chr1 4096731 . G A 559.62 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=179;Dels=0.00;HRun=1;HaplotypeScore=83.54;MQ=45.39;MQ0=0;QD=3.13;SB=44.95 GT:AD:DP:GL:GQ 0/1:150,29:155:-105.94,-46.69,-468.61:99
-chr1 4096732 rs61768835 A G 2251.43 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=171;Dels=0.00;HRun=2;HaplotypeScore=115.12;MQ=45.31;MQ0=0;QD=13.17;SB=-1083.79 GT:AD:DP:GL:GQ 0/1:80,91:158:-276.04,-47.61,-312.72:99
-chr1 4096736 rs61768836 A G 2066.81 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.02;HRun=0;HaplotypeScore=91.40;MQ=45.63;MQ0=0;QD=12.23;SB=-1029.89 GT:AD:DP:GL:GQ 0/1:85,81:160:-257.27,-47.30,-336.21:99
-chr1 4096755 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=129;Dels=0.00;HRun=1;HaplotypeScore=46.33;MQ=46.26;MQ0=0;OQ=201.55;QD=1.56;SB=65.52 GT:AD:DP:GL:GQ 0/1:112,17:113:-57.49,-34.05,-383.82:99
-chr1 4096759 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=124;Dels=0.00;HRun=0;HaplotypeScore=42.17;MQ=46.84;MQ0=0;OQ=310.94;QD=2.51;SB=-151.81 GT:AD:DP:GL:GQ 0/1:106,18:122:-71.13,-36.75,-367.88:99
-chr1 4096775 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=113;Dels=0.00;HRun=0;HaplotypeScore=30.95;MQ=47.51;MQ0=0;OQ=647.24;QD=5.73;SB=52.09 GT:AD:DP:GL:GQ 0/1:87,26:107:-100.24,-32.23,-298.38:99
-chr1 4096805 . A G 20.07 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=109;Dels=0.00;HRun=1;HaplotypeScore=14.94;MQ=48.07;MQ0=0;QD=0.18;SB=107.37 GT:AD:DP:GL:GQ 0/1:94,15:99:-35.11,-29.83,-355.50:52.86
-chr1 4096811 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=105;Dels=0.00;HRun=1;HaplotypeScore=14.56;MQ=47.07;MQ0=0;OQ=301.49;QD=2.87;SB=92.31 GT:AD:DP:GL:GQ 0/1:85,20:99:-63.26,-29.83,-325.00:99
-chr1 4096845 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=1;HaplotypeScore=27.21;MQ=46.78;MQ0=0;OQ=135.08;QD=1.34;SB=107.37 GT:AD:DP:GL:GQ 0/1:86,15:98:-46.31,-29.52,-344.47:99
-chr1 4096895 rs6702633 G A 282.98 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=48.03;MQ0=0;OQ=1209.14;QD=19.50;SB=-562.59 GT:AD:DP:GL:GQ 0/1:26,36:60:-142.27,-18.07,-91.55:99
-chr1 4097116 rs6663939 C T 575.23 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1353.52;QD=17.35;SB=-623.00 GT:AD:DP:GL:GQ 0/1:38,40:78:-162.13,-23.49,-140.27:99
-chr1 4097278 rs4408122 C T 90.17 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=3.55;MQ=60.00;MQ0=0;OQ=1285.61;QD=19.78;SB=-663.71 GT:AD:DP:GL:GQ 0/1:26,39:64:-151.13,-19.28,-94.25:99
-chr1 4097502 rs10915445 G A 15.47 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=4.76;MQ=58.14;MQ0=0;OQ=1551.73;QD=21.26;SB=-659.25 GT:AD:DP:GL:GQ 0/1:29,44:69:-179.24,-20.78,-91.34:99
-chr1 4097702 rs4233259 G A 393.71 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.88;MQ0=0;OQ=488.96;QD=11.64;SB=-238.49 GT:AD:DP:GL:GQ 0/1:23,19:39:-63.93,-11.75,-79.38:99
-chr1 4097847 rs4233260 A G 265.81 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=58.25;MQ0=0;OQ=841.80;QD=15.31;SB=-425.02 GT:AD:DP:GL:GQ 0/1:21,34:53:-103.45,-15.98,-81.47:99
-chr1 4098460 rs4654489 C T 575.94 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1233.62;QD=17.37;SB=-483.09 GT:AD:DP:GL:GQ 0/1:34,37:71:-148.05,-21.40,-108.91:99
-chr1 4098462 rs4654412 C G 408.58 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=1295.21;QD=18.24;SB=-423.31 GT:AD:DP:GL:GQ 0/1:36,35:70:-153.90,-21.10,-151.48:99
-chr1 4098561 rs4654490 T C 109.69 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=5.61;MQ=59.35;MQ0=0;OQ=707.20;QD=11.05;SB=-320.12 GT:AD:DP:GL:GQ 0/1:35,29:62:-92.69,-18.69,-135.70:99
-chr1 4098636 rs4654491 A T 298.65 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.55;MQ=58.32;MQ0=0;OQ=679.16;QD=12.81;SB=-348.54 GT:AD:DP:GL:GQ 0/1:28,25:51:-86.56,-15.36,-108.00:99
-chr1 4101675 rs4654492 C T 166.06 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=985.64;QD=17.92;SB=-310.22 GT:AD:DP:GL:GQ 0/1:24,31:53:-117.81,-15.96,-85.09:99
-chr1 4102203 rs10799207 G A 234.26 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=645.03;QD=15.36;SB=-340.37 GT:AD:DP:GL:GQ 0/1:22,20:41:-80.15,-12.36,-66.12:99
-chr1 4102678 rs7542208 A G 473.41 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.58;MQ0=0;OQ=945.73;QD=14.78;SB=-439.91 GT:AD:DP:GL:GQ 0/1:26,38:62:-116.54,-18.69,-104.23:99
-chr1 4102853 rs12143662 C T 77.17 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=2;HaplotypeScore=3.06;MQ=59.31;MQ0=0;OQ=653.08;QD=14.51;SB=-306.78 GT:AD:DP:GL:GQ 0/1:23,22:43:-81.54,-12.95,-84.16:99
-chr1 4103423 rs12096127 C T 146.81 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=3;HaplotypeScore=0.93;MQ=59.48;MQ0=0;OQ=1299.31;QD=16.24;SB=-452.94 GT:AD:DP:GL:GQ 0/1:42,38:79:-157.01,-23.79,-152.41:99
-chr1 4104350 . G A 39.75 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=0;HaplotypeScore=50.14;MQ=43.88;MQ0=0;QD=0.41;SB=41.13 GT:AD:DP:GL:GQ 0/1:55,43:59:-25.05,-17.79,-166.63:72.58
-chr1 4104372 . C A 158.64 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=134;Dels=0.00;HRun=1;HaplotypeScore=261.20;MQ=40.26;MQ0=0;QD=1.18;SB=50.16 GT:AD:DP:GL:GQ 0/1:118,16:102:-49.87,-30.72,-316.01:99
-chr1 4104378 . T C 1045.41 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=132;Dels=0.09;HRun=0;HaplotypeScore=252.28;MQ=39.40;MQ0=0;QD=7.92;SB=47.18 GT:AD:DP:GL:GQ 0/1:70,50:112:-140.05,-32.23,-268.85:99
-chr1 4104379 . G A 1387.27 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=131;Dels=0.09;HRun=0;HaplotypeScore=164.33;MQ=39.20;MQ0=0;QD=10.59;SB=44.10 GT:AD:DP:GL:GQ 0/1:65,54:109:-173.34,-31.33,-223.67:99
-chr1 4104399 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=192;Dels=0.00;HRun=0;HaplotypeScore=398.28;MQ=38.87;MQ0=2;OQ=296.43;QD=1.54;SB=-98.03 GT:AD:DP:GL:GQ 0/1:164,28:154:-79.31,-46.39,-472.12:99
-chr1 4104401 rs61768839 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=194;Dels=0.00;HRun=0;HaplotypeScore=419.03;MQ=39.00;MQ0=2;OQ=166.93;QD=0.86;SB=-91.09 GT:AD:DP:GL:GQ 0/1:156,37:153:-66.06,-46.09,-471.26:99
-chr1 4104420 rs56397723 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=252;Dels=0.01;HRun=1;HaplotypeScore=92.55;MQ=41.09;MQ0=3;OQ=4650.56;QD=18.45;SB=-702.42 GT:AD:DP:GL:GQ 0/1:91,159:212:-464.06,-63.56,-317.29:99
-chr1 4104448 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=303;Dels=0.00;HRun=1;HaplotypeScore=67.42;MQ=41.21;MQ0=8;OQ=4147.70;QD=13.69;SB=-263.14 GT:AD:DP:GL:GQ 0/1:172,131:260:-413.77,-78.32,-559.37:99
-chr1 4104453 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=303;Dels=0.00;HRun=0;HaplotypeScore=122.24;MQ=41.63;MQ0=7;OQ=1110.55;QD=3.67;SB=-37.03 GT:AD:DP:GL:GQ 0/1:232,70:246:-188.46,-74.12,-759.14:99
-chr1 4104461 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=296;Dels=0.01;HRun=1;HaplotypeScore=119.61;MQ=41.59;MQ0=7;OQ=214.27;QD=0.72;SB=-23.14 GT:AD:DP:GL:GQ 0/1:251,42:244:-97.34,-72.63,-828.00:99
-chr1 4104464 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=293;Dels=0.00;HRun=0;HaplotypeScore=47.37;MQ=41.56;MQ0=7;OQ=330.17;QD=1.13;SB=-9.81 GT:AD:DP:GL:GQ 0/1:251,41:246:-110.42,-74.12,-748.00:99
-chr1 4104493 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=213;Dels=0.00;HRun=1;HaplotypeScore=30.82;MQ=42.50;MQ0=6;OQ=2710.70;QD=12.73;SB=-739.33 GT:AD:DP:GL:GQ 0/1:93,120:174:-326.79,-52.44,-298.85:99
-chr1 4104517 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=157;Dels=0.00;HRun=0;HaplotypeScore=91.08;MQ=42.89;MQ0=5;OQ=579.51;QD=3.69;SB=-277.61 GT:AD:DP:GL:GQ 0/1:123,34:134:-101.62,-40.38,-368.83:99
-chr1 4104540 rs62641248 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=101.41;MQ=39.74;MQ0=1;OQ=311.08;QD=3.34;SB=-25.45 GT:AD:DP:GL:GQ 0/1:75,18:80:-58.50,-24.10,-250.10:99
-chr1 4104551 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=87.22;MQ=37.20;MQ0=4;OQ=331.14;QD=4.87;SB=-44.20 GT:AD:DP:GL:GQ 0/1:51,17:54:-52.67,-16.27,-140.50:99
-chr1 4104561 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=32.90;MQ=39.14;MQ0=4;OQ=99.56;QD=1.56;SB=92.30 GT:AD:DP:GL:GQ 0/1:53,11:58:-30.72,-17.48,-172.38:99
-chr1 4104601 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=204;Dels=0.00;HRun=0;HaplotypeScore=38.41;MQ=39.91;MQ0=6;OQ=155.34;QD=0.76;SB=68.34 GT:AD:DP:GL:GQ 0/1:183,21:180:-73.04,-54.23,-586.07:99
-chr1 4104605 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=211;Dels=0.00;HRun=1;HaplotypeScore=39.02;MQ=40.58;MQ0=6;OQ=226.77;QD=1.07;SB=164.51 GT:AD:DP:GL:GQ 0/1:188,23:190:-83.19,-57.23,-627.45:99
-chr1 4104633 rs56023565 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=168;Dels=0.00;HRun=0;HaplotypeScore=43.28;MQ=41.56;MQ0=5;OQ=1077.06;QD=6.41;SB=128.56 GT:AD:DP:GL:GQ 0/1:117,50:150:-156.17,-45.18,-408.43:99
-chr1 4104638 rs62641251 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=155;Dels=0.00;HRun=1;HaplotypeScore=82.61;MQ=42.16;MQ0=4;OQ=1017.44;QD=6.56;SB=-202.97 GT:AD:DP:GL:GQ 0/1:99,56:128:-143.60,-38.57,-325.85:99
-chr1 4104646 rs56328141 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=133;Dels=0.05;HRun=0;HaplotypeScore=83.44;MQ=42.94;MQ0=3;OQ=598.93;QD=4.50;SB=-113.26 GT:AD:DP:GL:GQ 0/1:76,33:104:-104.27,-41.10,-292.97:99
-chr1 4104661 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=114;Dels=0.03;HRun=0;HaplotypeScore=168.88;MQ=43.79;MQ0=2;OQ=339.54;QD=2.98;SB=-7.31 GT:AD:DP:GL:GQ 0/1:92,17:99:-69.57,-32.33,-280.39:99
-chr1 4104695 rs58865682 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=107;Dels=0.00;HRun=0;HaplotypeScore=26.95;MQ=46.39;MQ0=1;OQ=148.27;QD=1.39;SB=113.35 GT:AD:DP:GL:GQ 0/1:90,17:100:-48.23,-30.12,-318.63:99
-chr1 4104698 rs59763636 A C 13.51 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=104;Dels=0.00;HRun=0;HaplotypeScore=26.94;MQ=46.80;MQ0=1;QD=0.13;SB=110.36 GT:AD:DP:GL:GQ 0/1:87,17:97:-33.83,-29.22,-321.32:46.15
-chr1 4104799 rs56113813 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=1;HaplotypeScore=110.54;MQ=45.23;MQ0=4;OQ=195.94;QD=2.13;SB=86.31 GT:AD:DP:GL:GQ 0/1:78,14:77:-46.07,-23.20,-257.99:99
-chr1 4106070 rs9426471 T C 595.81 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=1098.91;QD=16.16;SB=-453.97 GT:AD:DP:GL:GQ 0/1:32,36:68:-133.66,-20.48,-129.09:99
-chr1 4106148 rs9426494 C T 344.56 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=60.00;MQ0=0;OQ=1566.25;QD=17.40;SB=-768.74 GT:AD:DP:GL:GQ 0/1:44,46:88:-186.42,-26.51,-142.07:99
-chr1 4107203 rs6680278 C T 328.94 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.92;MQ0=0;OQ=777.87;QD=13.89;SB=-285.17 GT:AD:DP:GL:GQ 0/1:32,24:55:-97.64,-16.57,-110.93:99
-chr1 4107258 rs6672998 G A 334.86 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=520.45;QD=13.01;SB=-193.18 GT:AD:DP:GL:GQ 0/1:23,17:40:-67.38,-12.05,-82.67:99
-chr1 4107272 rs17406305 C T 361.32 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=435.04;QD=9.89;SB=-220.70 GT:AD:DP:GL:GQ 0/1:26,18:41:-59.15,-12.36,-84.72:99
-chr1 4108156 rs7528351 G A 171.64 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=978.84;QD=16.88;SB=-340.32 GT:AD:DP:GL:GQ 0/1:29,29:58:-118.64,-17.47,-104.14:99
-chr1 4108402 rs7539733 C T 327.50 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=58.92;MQ0=0;OQ=799.67;QD=15.38;SB=-336.43 GT:AD:DP:GL:GQ 0/1:24,28:47:-97.41,-14.16,-80.03:99
-chr1 4108778 rs9426495 G A 284.61 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=3.59;MQ=59.34;MQ0=0;OQ=895.14;QD=14.21;SB=-321.33 GT:AD:DP:GL:GQ 0/1:34,29:62:-111.48,-18.68,-120.65:99
-chr1 4108797 rs9426472 G C 415.96 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.27;MQ0=0;OQ=1011.60;QD=17.75;SB=-519.74 GT:AD:DP:GL:GQ 0/1:27,30:53:-120.42,-15.97,-106.06:99
-chr1 4109900 . A G 31.51 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=2;HaplotypeScore=6.53;MQ=57.95;MQ0=0;QD=0.55;SB=59.23 GT:AD:DP:GL:GQ 0/1:35,22:36:-17.29,-10.85,-119.86:64.34
-chr1 4110024 rs6690263 C T 117.28 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=60.00;MQ0=0;OQ=1118.91;QD=21.11;SB=-400.94 GT:AD:DP:GL:GQ 0/1:20,32:53:-134.68,-19.51,-68.02:99
-chr1 4110064 rs6695126 A G 708.48 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1770.58;QD=35.41;SB=-875.05 GT:AD:DP:GL:GQ 1/1:0,50:50:-180.66,-15.06,-0.02:99
-chr1 4110262 rs6683453 G A 435.74 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.65;MQ0=0;OQ=1205.59;QD=18.27;SB=-574.05 GT:AD:DP:GL:GQ 0/1:29,37:64:-143.13,-19.28,-100.61:99
-chr1 4110315 rs9426473 G A 464.67 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=896.46;QD=18.68;SB=-396.93 GT:AD:DP:GL:GQ 0/1:19,29:46:-106.79,-13.86,-67.55:99
-chr1 4110338 rs9426496 A G 430.77 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=545.25;QD=11.36;SB=-275.98 GT:AD:DP:GL:GQ 0/1:25,23:47:-71.97,-14.16,-100.50:99
-chr1 4111600 rs12752733 G A 194.11 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=59.12;MQ0=0;OQ=1088.74;QD=20.54;SB=-407.75 GT:AD:DP:GL:GQ 0/1:20,33:51:-127.52,-15.37,-66.14:99
-chr1 4111741 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=11;HaplotypeScore=4.85;MQ=55.91;MQ0=0;OQ=88.59;QD=2.16;SB=32.11 GT:AD:DP:GL:GQ 0/1:33,8:32:-21.79,-9.64,-86.81:99
-chr1 4112024 . C T 265.51 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.50;MQ0=0;OQ=941.42;QD=16.81;SB=-396.13 GT:AD:DP:GL:GQ 0/1:27,29:55:-113.99,-16.57,-97.04:99
-chr1 4112929 rs4654494 C G 169.07 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=2.42;MQ=60.00;MQ0=0;OQ=822.69;QD=13.27;SB=-341.77 GT:AD:DP:GL:GQ 0/1:34,28:54:-101.84,-16.28,-127.78:99
-chr1 4113201 rs55759139 G A 249.56 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.37;MQ=59.68;MQ0=0;OQ=761.01;QD=13.12;SB=-311.83 GT:AD:DP:GL:GQ 0/1:32,26:53:-95.35,-15.97,-100.34:99
-chr1 4113760 rs4498774 A C 130.48 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.50;MQ=58.71;MQ0=0;OQ=628.38;QD=9.67;SB=-313.59 GT:AD:DP:GL:GQ 0/1:36,29:64:-85.41,-19.28,-138.00:99
-chr1 4114825 rs7339911 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=10;HaplotypeScore=3.32;MQ=58.55;MQ0=0;OQ=757.63;QD=12.42;SB=-183.20 GT:AD:DP:GL:GQ 0/1:36,25:59:-96.82,-17.77,-126.07:99
-chr1 4116025 rs9988443 G A 336.18 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.45;MQ0=0;OQ=1567.78;QD=20.63;SB=-720.28 GT:AD:DP:GL:GQ 0/1:30,46:75:-182.67,-22.61,-94.32:99
-chr1 4116630 rs4336820 T C 72.02 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.26;MQ=59.52;MQ0=0;OQ=1667.19;QD=34.73;SB=-687.27 GT:AD:DP:GL:GQ 1/1:0,48:47:-170.32,-14.16,-0.01:99
-chr1 4116791 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=2;HaplotypeScore=12.66;MQ=58.95;MQ0=0;OQ=57.38;QD=1.43;SB=71.25 GT:AD:DP:GL:GQ 0/1:31,9:34:-19.31,-10.29,-109.30:90.22
-chr1 4117150 rs12062237 T C 0.56 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=3;HaplotypeScore=3.14;MQ=57.94;MQ0=0;OQ=1345.47;QD=32.82;SB=-624.25 GT:AD:DP:GL:GQ 1/1:0,41:39:-138.15,-11.75,-0.02:99
-chr1 4118916 rs3890798 A G 534.42 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.32;MQ0=0;OQ=2055.84;QD=30.23;SB=-868.59 GT:AD:DP:GL:GQ 1/1:0,68:65:-209.23,-19.60,-0.06:99
-chr1 4119595 rs6426391 A T 243.50 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=1.16;MQ=59.73;MQ0=0;OQ=1272.79;QD=18.45;SB=-602.37 GT:AD:DP:GL:GQ 0/1:28,41:68:-151.04,-20.48,-104.90:99
-chr1 4119856 . G A 80.75 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=54.88;MQ0=1;OQ=952.98;QD=16.15;SB=-461.48 GT:AD:DP:GL:GQ 0/1:28,31:56:-115.46,-16.88,-95.51:99
-chr1 4120161 rs7549636 G A 106.14 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=3.96;MQ=59.21;MQ0=1;OQ=708.05;QD=15.39;SB=-359.50 GT:AD:DP:GL:GQ 0/1:23,23:43:-87.04,-12.95,-74.47:99
-chr1 4120271 rs6426392 T C 252.19 PASS AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.44;MQ0=0;OQ=208.98;QD=7.74;SB=-130.51 GT:AD:DP:GL:GQ 0/1:16,11:25:-31.72,-7.54,-55.62:99
-chr1 4121295 rs4414012 C T 109.52 PASS AC=1;AF=0.50;AN=2;DB;DP=15;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=243.26;QD=16.22;SB=-32.52 GT:AD:DP:GL:GQ 0/1:7,8:15:-32.13,-4.52,-23.19:99
-chr1 4121459 rs4614226 C T 3.52 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.33;MQ0=0;OQ=708.73;QD=25.31;SB=-192.72 GT:AD:DP:GL:GQ 0/1:8,20:25:-81.69,-7.53,-15.26:77.23
-chr1 4122266 rs4654495 C T 267.28 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.05;MQ0=0;OQ=844.66;QD=17.24;SB=-383.42 GT:AD:DP:GL:GQ 0/1:22,27:48:-102.21,-14.46,-81.80:99
-chr1 4122640 . C T 27.21 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=8;Dels=0.00;HRun=1;HaplotypeScore=9.85;MQ=48.82;MQ0=0;QD=3.40;SB=2.03 GT:AD:DP:GL:GQ 0/1:6,2:7:-8.11,-2.11,-18.35:60.04
-chr1 4122866 rs4654413 A G 16.01 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.58;MQ0=0;OQ=1224.52;QD=28.48;SB=-81.37 GT:AD:DP:GL:GQ 1/1:0,43:41:-126.09,-12.38,-0.05:99
-chr1 4122935 rs4654414 G A 17.67 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=53.29;MQ0=0;OQ=1666.36;QD=36.23;SB=-267.85 GT:AD:DP:GL:GQ 1/1:1,45:42:-170.23,-12.65,-0.01:99
-chr1 4123288 rs4233261 T C 17.26 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=4.16;MQ=58.63;MQ0=0;OQ=2395.13;QD=34.71;SB=-1054.42 GT:AD:DP:GL:GQ 1/1:0,69:66:-243.12,-19.88,-0.02:99
-chr1 4123748 rs6679293 T C 176.14 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.14;MQ0=0;OQ=1906.56;QD=31.26;SB=-831.63 GT:AD:DP:GL:GQ 1/1:0,61:59:-194.29,-17.79,-0.05:99
-chr1 4123963 rs4654496 C T 83.64 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=2067.60;QD=39.01;SB=-750.62 GT:AD:DP:GL:GQ 1/1:0,53:53:-210.36,-15.97,-0.02:99
-chr1 4124418 rs4654497 T C 597.93 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=1506.19;QD=30.74;SB=-582.98 GT:AD:DP:GL:GQ 1/1:0,49:47:-154.24,-14.17,-0.04:99
-chr1 4126306 rs4367764 C T 454.46 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2115.14;QD=39.17;SB=-864.64 GT:AD:DP:GL:GQ 1/1:0,54:53:-215.11,-15.97,-0.01:99
-chr1 4127324 rs12123330 C T 249.14 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1048.68;QD=17.77;SB=-496.03 GT:AD:DP:GL:GQ 0/1:27,32:56:-125.03,-16.88,-80.71:99
-chr1 4127494 rs4468133 G A 195.33 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=2.26;MQ=60.00;MQ0=0;OQ=1260.59;QD=18.01;SB=-425.95 GT:AD:DP:GL:GQ 0/1:31,38:68:-152.64,-23.30,-109.48:99
-chr1 4128172 rs4654498 A G 107.28 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.33;MQ=59.19;MQ0=0;OQ=2014.82;QD=35.35;SB=-1032.76 GT:AD:DP:GL:GQ 1/1:0,57:56:-205.08,-16.87,-0.01:99
-chr1 4128310 rs4654499 G T 305.85 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=983.44;QD=17.88;SB=-296.34 GT:AD:DP:GL:GQ 0/1:22,33:55:-118.19,-16.56,-78.95:99
-chr1 4130572 rs3890729 A T 141.84 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.07;MQ=59.18;MQ0=0;OQ=905.47;QD=17.75;SB=-227.90 GT:AD:DP:GL:GQ 0/1:23,28:51:-109.19,-15.36,-88.04:99
-chr1 4131311 rs10915460 G A 189.99 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=57.39;MQ0=0;OQ=480.50;QD=13.35;SB=-233.54 GT:AD:DP:GL:GQ 0/1:19,17:33:-61.28,-9.95,-54.49:99
-chr1 4131491 rs10915461 A G 151.47 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.56;MQ=51.87;MQ0=0;OQ=492.21;QD=9.65;SB=-268.94 GT:AD:DP:GL:GQ 0/1:28,23:49:-67.28,-14.77,-113.16:99
-chr1 4131545 rs10915462 T C 155.98 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=54.56;MQ0=0;OQ=299.94;QD=7.69;SB=-143.28 GT:AD:DP:GL:GQ 0/1:25,14:37:-44.43,-11.15,-99.76:99
-chr1 4131617 rs6688343 T C 208.72 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=58.31;MQ0=0;OQ=662.26;QD=13.25;SB=-230.45 GT:AD:DP:GL:GQ 0/1:25,25:48:-83.97,-14.46,-97.39:99
-chr1 4131656 rs6688428 T C 133.26 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=58.40;MQ0=0;OQ=444.13;QD=10.83;SB=-97.71 GT:AD:DP:GL:GQ 0/1:22,19:40:-59.75,-12.06,-84.80:99
-chr1 4131666 rs6688431 T C 70.94 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.40;MQ0=0;OQ=339.10;QD=8.27;SB=-98.71 GT:AD:DP:GL:GQ 0/1:23,18:37:-48.34,-11.15,-87.20:99
-chr1 4131704 . G A 41.43 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.69;MQ=58.60;MQ0=0;OQ=706.66;QD=14.13;SB=-238.75 GT:AD:DP:GL:GQ 0/1:28,22:49:-88.72,-14.77,-84.55:99
-chr1 4131824 rs12032295 C T 752.83 Indel AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=33.96;MQ0=0;QD=14.20;SB=-367.84 GT:AD:DP:GL:GQ 0/1:30,23:51:-93.93,-15.37,-94.00:99
-chr1 4132377 rs12405392 C T 226.32 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=4.69;MQ=59.66;MQ0=0;OQ=1021.86;QD=15.03;SB=-451.99 GT:AD:DP:GL:GQ 0/1:34,34:62:-124.15,-18.68,-109.47:99
-chr1 4132399 rs56827341 A G 272.74 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=59.66;MQ0=0;OQ=903.58;QD=13.29;SB=-319.89 GT:AD:DP:GL:GQ 0/1:32,36:65:-113.24,-19.60,-113.27:99
-chr1 4132555 rs11580927 G A 598.05 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=853.00;QD=13.76;SB=-450.44 GT:AD:DP:GL:GQ 0/1:34,28:61:-106.96,-18.38,-120.31:99
-chr1 4132654 rs11583685 T C 237.59 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.58;MQ=60.00;MQ0=0;OQ=809.75;QD=12.46;SB=-338.53 GT:AD:DP:GL:GQ 0/1:35,30:64:-103.54,-19.28,-136.81:99
-chr1 4134373 rs6690519 C T 596.27 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2577.92;QD=39.66;SB=-1051.40 GT:AD:DP:GL:GQ 1/1:0,65:64:-261.39,-19.28,-0.02:99
-chr1 4134652 rs12743431 G A 916.73 Indel AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=58.05;MQ0=0;QD=16.08;SB=-472.04 GT:AD:DP:GL:GQ 0/1:25,32:53:-110.92,-15.97,-91.04:99
-chr1 4134672 rs61037363 C T 207.69 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=58.34;MQ0=0;OQ=1244.96;QD=19.15;SB=-619.07 GT:AD:DP:GL:GQ 0/1:27,38:61:-146.16,-18.38,-83.21:99
-chr1 4135628 rs4654501 G A 449.34 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.45;MQ0=0;OQ=800.03;QD=17.78;SB=-327.85 GT:AD:DP:GL:GQ 0/1:21,24:44:-96.54,-13.26,-71.19:99
-chr1 4136297 rs4531262 C T 292.38 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.55;MQ0=0;OQ=900.23;QD=17.65;SB=-443.97 GT:AD:DP:GL:GQ 0/1:23,28:50:-108.37,-15.06,-81.34:99
-chr1 4136842 rs4233262 C T 514.56 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1175.57;QD=19.27;SB=-513.00 GT:AD:DP:GL:GQ 0/1:27,34:61:-139.22,-18.38,-97.14:99
-chr1 4137022 rs12726068 G A 202.41 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1078.50;QD=19.97;SB=-346.48 GT:AD:DP:GL:GQ 0/1:22,32:54:-127.40,-16.27,-78.49:99
-chr1 4137146 rs12741551 C T 188.79 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=2.60;MQ=60.00;MQ0=0;OQ=744.97;QD=14.06;SB=-275.26 GT:AD:DP:GL:GQ 0/1:28,23:51:-95.75,-17.97,-99.94:99
-chr1 4137455 rs34927664 C T 374.06 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.87;MQ0=0;OQ=672.79;QD=16.41;SB=-286.16 GT:AD:DP:GL:GQ 0/1:20,21:40:-82.61,-12.05,-71.71:99
-chr1 4137533 rs6687719 A G 359.14 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.55;MQ0=0;OQ=693.89;QD=13.61;SB=-371.11 GT:AD:DP:GL:GQ 0/1:24,27:51:-88.05,-15.37,-93.98:99
-chr1 4137942 rs4654415 A G 54.66 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=3;HaplotypeScore=0.52;MQ=59.28;MQ0=0;OQ=812.82;QD=15.63;SB=-375.38 GT:AD:DP:GL:GQ 0/1:23,29:51:-99.93,-15.36,-91.58:99
-chr1 4137964 rs4654416 T C 201.40 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=58.39;MQ0=0;OQ=863.33;QD=15.70;SB=-318.29 GT:AD:DP:GL:GQ 0/1:25,30:54:-105.89,-16.27,-96.91:99
-chr1 4138124 rs4654417 A G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.04;HRun=0;HaplotypeScore=22.45;MQ=53.05;MQ0=0;OQ=979.60;QD=14.62;SB=-425.14 GT:AD:DP:GL:GQ 0/1:30,34:67:-120.52,-19.28,-120.75:99
-chr1 4138539 rs10915465 C T 116.34 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=932.04;QD=16.95;SB=-231.54 GT:AD:DP:GL:GQ 0/1:26,28:51:-111.86,-15.37,-73.76:99
-chr1 4138848 rs4233263 T C 563.43 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.57;MQ0=0;OQ=1932.95;QD=31.18;SB=-950.38 GT:AD:DP:GL:GQ 1/1:0,61:61:-196.93,-18.40,-0.06:99
-chr1 4140038 rs4233264 T C 391.03 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.43;MQ0=0;OQ=1125.34;QD=13.89;SB=-437.57 GT:AD:DP:GL:GQ 0/1:41,40:80:-139.92,-24.10,-167.96:99
-chr1 4140287 rs4654502 A G 258.40 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=716.89;QD=12.36;SB=-328.15 GT:AD:DP:GL:GQ 0/1:28,30:57:-92.15,-17.18,-113.12:99
-chr1 4140357 rs4654503 A G 175.10 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.08;MQ=60.00;MQ0=0;OQ=528.96;QD=9.98;SB=-287.63 GT:AD:DP:GL:GQ 0/1:26,24:47:-70.35,-14.17,-96.77:99
-chr1 4140721 rs12074230 G C 441.98 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=1211.59;QD=19.54;SB=-432.34 GT:AD:DP:GL:GQ 0/1:29,33:61:-142.82,-18.38,-122.06:99
-chr1 4141214 rs61770887 T A 176.81 Indel AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=41.85;MQ0=5;QD=2.39;SB=-58.97 GT:AD:DP:GL:GQ 0/1:35,39:44:-34.22,-13.25,-135.84:99
-chr1 4141739 . C G 151.90 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.44;MQ0=0;OQ=861.28;QD=11.64;SB=-403.50 GT:AD:DP:GL:GQ 0/1:45,29:72:-111.12,-21.71,-193.89:99
-chr1 4143108 rs7544125 G A 98.23 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=44.58;MQ0=4;OQ=463.56;QD=6.62;SB=-223.67 GT:AD:DP:GL:GQ 0/1:38,32:54:-65.91,-16.27,-136.81:99
-chr1 4143110 rs7515133 T G 11.80 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=44.83;MQ0=4;OQ=280.65;QD=3.95;SB=-136.72 GT:AD:DP:GL:GQ 0/1:40,31:55:-47.92,-16.57,-148.31:99
-chr1 4143183 rs4408123 T C 60.26 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.41;MQ=54.71;MQ0=0;OQ=2012.85;QD=31.45;SB=-855.54 GT:AD:DP:GL:GQ 1/1:0,63:62:-204.92,-18.70,-0.05:99
-chr1 4143665 rs4654505 C T 14.05 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=7.02;MQ=58.52;MQ0=0;OQ=1278.62;QD=17.05;SB=-644.75 GT:AD:DP:GL:GQ 0/1:36,39:72:-152.84,-21.70,-110.95:99
-chr1 4143971 rs56322069 G A 219.93 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=58.68;MQ0=0;OQ=1179.12;QD=14.38;SB=-509.98 GT:AD:DP:GL:GQ 0/1:47,35:78:-144.69,-23.49,-153.28:99
-chr1 4144717 rs4654419 G T 409.69 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=53.48;MQ0=0;OQ=576.97;QD=11.10;SB=-278.60 GT:AD:DP:GL:GQ 0/1:31,21:52:-76.65,-15.66,-108.30:99
-chr1 4144899 rs4654506 A G 59.06 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=1.57;MQ=57.19;MQ0=0;OQ=798.47;QD=12.67;SB=-355.09 GT:AD:DP:GL:GQ 0/1:32,31:63:-102.12,-18.99,-128.03:99
-chr1 4145034 rs4654420 T C 208.27 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=57.63;MQ0=0;OQ=567.20;QD=9.30;SB=-299.19 GT:AD:DP:GL:GQ 0/1:35,26:59:-77.79,-17.78,-138.00:99
-chr1 4145265 rs10799210 A G 75.28 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=52.55;MQ0=0;OQ=2612.65;QD=35.79;SB=-1182.09 GT:AD:DP:GL:GQ 1/1:0,72:73:-267.51,-24.47,-2.66:99
-chr1 4146179 rs4354511 G A 19.37 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=3;HaplotypeScore=1.79;MQ=39.00;MQ0=1;OQ=2945.76;QD=39.28;SB=-1473.93 GT:AD:DP:GL:GQ 1/1:0,75:73:-298.18,-21.99,-0.02:99
-chr1 4146185 rs61770891 T G 349.70 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=40.44;MQ0=1;OQ=1123.38;QD=15.18;SB=-586.47 GT:AD:DP:GL:GQ 0/1:35,39:73:-137.61,-21.99,-124.99:99
-chr1 4146278 rs35969529 A C 46.41 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=2.80;MQ=52.18;MQ0=0;OQ=652.54;QD=12.55;SB=-341.77 GT:AD:DP:GL:GQ 0/1:27,25:52:-84.21,-15.67,-95.88:99
-chr1 4146315 rs34096100 G A 254.13 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.76;MQ0=0;OQ=657.20;QD=13.41;SB=-218.51 GT:AD:DP:GL:GQ 0/1:28,21:47:-83.18,-14.17,-82.42:99
-chr1 4146537 . C T 111.88 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.77;MQ=53.66;MQ0=1;OQ=1107.86;QD=16.06;SB=-448.39 GT:AD:DP:GL:GQ 0/1:34,35:67:-134.26,-20.19,-114.24:99
-chr1 4146953 rs4654421 T C 433.26 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.82;MQ0=0;OQ=2189.94;QD=31.74;SB=-1040.77 GT:AD:DP:GL:GQ 1/1:0,69:68:-222.64,-20.51,-0.06:99
-chr1 4147013 rs4654422 T A 163.99 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.20;MQ0=1;OQ=3024.40;QD=36.88;SB=-1331.44 GT:AD:DP:GL:GQ 1/1:1,80:81:-309.61,-27.75,-3.59:99
-chr1 4148323 rs35837871 C T 12.81 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=2.85;MQ=58.88;MQ0=0;OQ=689.43;QD=12.77;SB=-158.63 GT:AD:DP:GL:GQ 0/1:29,24:49:-86.99,-14.77,-93.34:99
-chr1 4148556 rs10753370 A G 191.60 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.30;MQ=57.40;MQ0=0;OQ=2083.85;QD=34.73;SB=-1040.92 GT:AD:DP:GL:GQ 1/1:0,60:59:-211.99,-17.77,-0.02:99
-chr1 4149011 rs12084286 A G 120.11 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=57.86;MQ0=0;OQ=472.12;QD=10.26;SB=-116.70 GT:AD:DP:GL:GQ 0/1:26,20:42:-63.15,-12.65,-98.66:99
-chr1 4149320 rs10733015 T C 59.23 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.72;MQ=56.65;MQ0=0;OQ=2004.37;QD=30.37;SB=-729.73 GT:AD:DP:GL:GQ 1/1:0,65:63:-204.08,-19.00,-0.06:99
-chr1 4149923 rs4654507 T C 369.93 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.77;MQ0=0;OQ=1162.12;QD=14.53;SB=-509.31 GT:AD:DP:GL:GQ 0/1:40,40:79:-143.29,-23.80,-162.73:99
-chr1 4150793 rs11808641 A G 288.49 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=1163.51;QD=16.62;SB=-493.62 GT:AD:DP:GL:GQ 0/1:32,38:70:-140.72,-21.09,-129.98:99
-chr1 4151258 rs35392680 C A 277.92 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=1.25;MQ=59.48;MQ0=0;OQ=1358.51;QD=16.77;SB=-581.67 GT:AD:DP:GL:GQ 0/1:37,44:80:-163.23,-24.09,-127.72:99
-chr1 4151486 rs35452955 A T 64.63 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=1469.46;QD=19.34;SB=-729.32 GT:AD:DP:GL:GQ 0/1:30,45:74:-172.52,-22.29,-110.18:99
-chr1 4151668 rs6703301 G T 631.77 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=3028.09;QD=37.38;SB=-1101.60 GT:AD:DP:GL:GQ 1/1:0,81:80:-306.41,-24.09,-0.01:99
-chr1 4151981 rs34414875 C T 365.71 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1305.64;QD=16.32;SB=-537.52 GT:AD:DP:GL:GQ 0/1:41,39:80:-157.95,-24.10,-144.69:99
-chr1 4152854 rs10915467 A T 474.45 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1268.93;QD=17.38;SB=-610.43 GT:AD:DP:GL:GQ 0/1:33,40:72:-151.86,-21.68,-124.21:99
-chr1 4153158 rs12722935 C T 465.33 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1317.34;QD=16.26;SB=-636.13 GT:AD:DP:GL:GQ 0/1:41,40:80:-159.12,-24.10,-137.48:99
-chr1 4153203 rs55974255 T G 492.94 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1277.21;QD=15.39;SB=-533.71 GT:AD:DP:GL:GQ 0/1:38,45:83:-156.01,-25.00,-142.96:99
-chr1 4153672 rs6679104 T C 519.73 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=1796.89;QD=30.98;SB=-648.94 GT:AD:DP:GL:GQ 1/1:0,58:56:-183.31,-16.88,-0.04:99
-chr1 4153751 rs12750830 G A 339.94 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=841.06;QD=12.19;SB=-424.91 GT:AD:DP:GL:GQ 0/1:41,27:67:-107.58,-20.19,-146.61:99
-chr1 4153835 rs12740143 T G 222.74 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=59.66;MQ0=0;OQ=767.69;QD=11.29;SB=-346.80 GT:AD:DP:GL:GQ 0/1:40,28:68:-100.53,-20.48,-145.06:99
-chr1 4154543 rs12143082 T C 171.80 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=1.73;MQ=59.61;MQ0=1;OQ=1104.97;QD=14.17;SB=-407.20 GT:AD:DP:GL:GQ 0/1:39,39:74:-136.07,-22.29,-143.19:99
-chr1 4154828 rs4578184 A T 236.18 PASS AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.74;MQ0=0;OQ=3286.63;QD=37.35;SB=-1618.09 GT:AD:DP:GL:GQ 1/1:0,87:86:-327.66,-25.90,-0.02:99
-chr1 4156046 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=80;Dels=0.01;HRun=20;HaplotypeScore=22.75;MQ=49.75;MQ0=0;OQ=501.86;QD=6.27;SB=92.27 GT:AD:DP:GL:GQ 0/1:48,31:64:-72.46,-18.99,-149.51:99
-chr1 4157196 rs4276878 C G 356.37 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1452.13;QD=15.78;SB=-539.06 GT:AD:DP:GL:GQ 0/1:47,45:92:-176.24,-27.75,-207.05:99
-chr1 4159822 rs34626829 T C 256.76 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=966.32;QD=13.24;SB=-369.17 GT:AD:DP:GL:GQ 0/1:40,33:72:-121.60,-21.69,-157.15:99
-chr1 4159905 rs4654509 T C 45.94 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=1.31;MQ=59.48;MQ0=0;OQ=2796.88;QD=34.96;SB=-1388.49 GT:AD:DP:GL:GQ 1/1:0,80:80:-283.30,-24.10,-0.03:99
-chr1 4160278 rs6667065 G A 347.06 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=1508.83;QD=20.12;SB=-751.28 GT:AD:DP:GL:GQ 0/1:32,43:74:-176.46,-22.30,-103.02:99
-chr1 4160487 rs6426401 C G 585.75 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2415.89;QD=43.14;SB=-1118.15 GT:AD:DP:GL:GQ 1/1:0,56:56:-245.19,-16.88,-0.02:99
-chr1 4163843 rs4654511 A G 129.93 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=2;HaplotypeScore=0.90;MQ=59.46;MQ0=0;OQ=1014.81;QD=11.80;SB=-473.86 GT:AD:DP:GL:GQ 0/1:46,40:85:-130.38,-25.61,-186.22:99
-chr1 4163857 rs4654512 A G 307.08 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=2.37;MQ=59.44;MQ0=0;OQ=1070.59;QD=12.90;SB=-521.48 GT:AD:DP:GL:GQ 0/1:46,37:83:-135.34,-25.00,-185.85:99
-chr1 4164344 rs4529679 G C 272.38 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=59.36;MQ0=0;OQ=772.49;QD=10.73;SB=-392.69 GT:AD:DP:GL:GQ 0/1:46,26:70:-101.64,-21.10,-199.05:99
-chr1 4166949 rs16840901 T C 388.35 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.68;MQ0=0;OQ=1039.54;QD=14.24;SB=-434.53 GT:AD:DP:GL:GQ 0/1:37,36:73:-129.23,-21.99,-150.63:99
-chr1 4167749 rs10915471 T G 58.03 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=3.59;MQ=59.58;MQ0=0;OQ=744.43;QD=13.54;SB=-264.89 GT:AD:DP:GL:GQ 0/1:27,27:49:-92.49,-14.76,-80.31:99
-chr1 4168111 rs35122589 C T 228.78 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=59.26;MQ0=0;OQ=1364.57;QD=16.64;SB=-443.34 GT:AD:DP:GL:GQ 0/1:40,41:80:-163.84,-24.10,-142.82:99
-chr1 4168454 rs12095632 C G 92.77 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=2.95;MQ=59.32;MQ0=0;OQ=1054.00;QD=19.16;SB=-475.80 GT:AD:DP:GL:GQ 0/1:24,31:54:-124.96,-16.28,-104.73:99
-chr1 4168730 rs4130091 T C 180.54 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.33;MQ0=0;OQ=1367.19;QD=28.48;SB=-696.78 GT:AD:DP:GL:GQ 1/1:0,48:44:-140.35,-13.27,-0.05:99
-chr1 4169351 rs6426402 G T 131.41 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=3.41;MQ=58.55;MQ0=0;OQ=809.13;QD=11.40;SB=-425.17 GT:AD:DP:GL:GQ 0/1:41,30:69:-104.98,-20.78,-138.71:99
-chr1 4169394 rs6426403 C G 338.24 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.89;MQ0=0;OQ=727.35;QD=12.99;SB=-274.92 GT:AD:DP:GL:GQ 0/1:33,23:54:-92.30,-16.28,-134.02:99
-chr1 4169498 rs6426404 G A 414.13 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.75;MQ0=0;OQ=1380.19;QD=18.40;SB=-605.61 GT:AD:DP:GL:GQ 0/1:34,41:72:-163.00,-21.69,-105.58:99
-chr1 4169658 rs60017975 A G 318.13 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.77;MQ0=0;OQ=1450.14;QD=18.13;SB=-530.63 GT:AD:DP:GL:GQ 0/1:31,49:79:-172.10,-23.80,-127.67:99
-chr1 4170881 rs7550659 A G 248.87 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.70;MQ0=0;OQ=2075.07;QD=30.97;SB=-804.69 GT:AD:DP:GL:GQ 1/1:0,66:63:-211.13,-18.99,-0.04:99
-chr1 4171135 rs10799212 A G 40.61 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.91;MQ=40.70;MQ0=1;OQ=2175.11;QD=31.07;SB=-612.96 GT:AD:DP:GL:GQ 1/1:1,69:67:-221.14,-20.20,-0.04:99
-chr1 4171182 rs12410442 G A 385.57 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=27.19;MQ0=4;OQ=361.27;QD=10.95;SB=-197.20 GT:AD:DP:GL:GQ 0/1:20,13:27:-47.55,-8.14,-48.20:99
-chr1 4171315 . C A 41.63 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=20;HaplotypeScore=7.30;MQ=33.40;MQ0=5;QD=0.97;SB=41.16 GT:AD:DP:GL:GQ 0/1:37,6:31:-16.79,-9.34,-90.98:74.46
-chr1 4171344 rs10799213 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.01;HRun=20;HaplotypeScore=28.32;MQ=47.02;MQ0=1;OQ=768.09;QD=11.30;SB=-343.49 GT:AD:DP:GL:GQ 0/1:35,32:53:-95.75,-15.66,-101.72:99
-chr1 4171386 rs12022636 C A 71.32 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=6.39;MQ=55.43;MQ0=0;OQ=1032.82;QD=16.66;SB=-507.94 GT:AD:DP:GL:GQ 0/1:28,34:59:-124.34,-17.77,-88.85:99
-chr1 4171443 rs10799214 T A 380.15 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.02;MQ=52.31;MQ0=0;OQ=893.79;QD=14.65;SB=-401.19 GT:AD:DP:GL:GQ 0/1:30,31:58:-110.14,-17.48,-102.42:99
-chr1 4171775 rs7553814 A G 404.78 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.01;MQ0=0;OQ=970.08;QD=12.93;SB=-503.90 GT:AD:DP:GL:GQ 0/1:40,35:74:-122.58,-22.29,-161.95:99
-chr1 4171833 rs7553919 A G 37.31 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=59.60;MQ0=0;OQ=2384.19;QD=34.55;SB=-1112.82 GT:AD:DP:GL:GQ 1/1:0,69:66:-242.02,-19.88,-0.02:99
-chr1 4171990 rs7554028 A G 628.72 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.32;MQ0=1;OQ=2341.28;QD=30.02;SB=-854.63 GT:AD:DP:GL:GQ 1/1:0,78:76:-237.79,-22.93,-0.08:99
-chr1 4173512 rs7517572 T A 699.45 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=2653.94;QD=34.47;SB=-1331.37 GT:AD:DP:GL:GQ 1/1:0,77:72:-269.00,-21.69,-0.02:99
-chr1 4173702 rs10753372 T C 483.13 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.88;MQ0=0;OQ=510.62;QD=9.82;SB=-265.21 GT:AD:DP:GL:GQ 0/1:30,22:52:-70.02,-15.68,-118.09:99
-chr1 4173822 rs10737404 T C 229.86 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1647.35;QD=29.95;SB=-655.93 GT:AD:DP:GL:GQ 1/1:0,55:53:-168.37,-15.99,-0.05:99
-chr1 4174045 rs10915473 C T 65.29 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=45.21;MQ0=0;OQ=1332.73;QD=36.02;SB=-585.26 GT:AD:DP:GL:GQ 1/1:0,37:35:-136.87,-10.55,-0.02:99
-chr1 4174057 . C T 1039.01 SnpCluster AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=42.84;MQ0=0;QD=33.52;SB=-399.52 GT:AD:DP:GL:GQ 1/1:2,29:27:-107.50,-8.14,-0.01:81.26
-chr1 4174060 . A C 853.72 SnpCluster AC=2;AF=1.00;AN=2;DP=31;Dels=0.00;HRun=2;HaplotypeScore=1.07;MQ=43.67;MQ0=0;QD=27.54;SB=-294.55 GT:AD:DP:GL:GQ 1/1:0,31:26:-88.97,-7.83,-0.01:78.20
-chr1 4174064 . A C 949.90 SnpCluster AC=2;AF=1.00;AN=2;DP=33;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=44.60;MQ0=0;QD=28.78;SB=-378.69 GT:AD:DP:GL:GQ 1/1:0,33:28:-98.58,-8.43,-0.01:84.24
-chr1 4174382 rs1908491 C T 0.38 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=6.22;MQ=54.65;MQ0=0;OQ=1883.08;QD=36.21;SB=-503.01 GT:AD:DP:GL:GQ 1/1:0,52:48:-191.91,-14.46,-0.01:99
-chr1 4174484 rs10915474 T A 225.63 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=55.68;MQ0=0;OQ=801.30;QD=15.41;SB=-299.67 GT:AD:DP:GL:GQ 0/1:26,26:51:-98.78,-15.36,-93.02:99
-chr1 4174489 rs1908492 C T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=7;HaplotypeScore=1.12;MQ=55.99;MQ0=0;OQ=1860.19;QD=37.20;SB=-932.70 GT:AD:DP:GL:GQ 1/1:0,50:48:-189.62,-14.46,-0.02:99
-chr1 4174597 rs1908493 C T 268.28 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.14;MQ=59.04;MQ0=0;OQ=2611.89;QD=38.41;SB=-1140.03 GT:AD:DP:GL:GQ 1/1:0,68:66:-264.79,-19.88,-0.02:99
-chr1 4174874 rs1495245 T A 732.53 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=2554.22;QD=37.56;SB=-1304.61 GT:AD:DP:GL:GQ 1/1:0,68:68:-259.02,-20.48,-0.02:99
-chr1 4174974 rs11578399 C A 12.83 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=3.61;MQ=59.22;MQ0=0;OQ=421.58;QD=7.81;SB=-139.06 GT:AD:DP:GL:GQ 0/1:37,17:52:-61.11,-15.67,-117.17:99
-chr1 4175032 rs1495246 C G 204.50 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=56.85;MQ0=0;OQ=2607.23;QD=39.50;SB=-1308.71 GT:AD:DP:GL:GQ 1/1:0,66:62:-264.33,-18.68,-0.02:99
-chr1 4175046 . T G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=2;HaplotypeScore=9.95;MQ=56.80;MQ0=0;OQ=180.72;QD=2.78;SB=92.29 GT:AD:DP:GL:GQ 0/1:40,25:50:-36.42,-15.06,-130.62:99
-chr1 4175151 rs10915476 G A 237.61 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.01;MQ0=0;OQ=567.09;QD=12.07;SB=-92.91 GT:AD:DP:GL:GQ 0/1:29,18:45:-73.55,-13.56,-90.83:99
-chr1 4175279 rs1495247 C T 209.45 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.34;MQ0=0;OQ=2597.96;QD=37.11;SB=-1279.76 GT:AD:DP:GL:GQ 1/1:0,70:67:-263.40,-20.19,-0.02:99
-chr1 4175302 rs7411802 C A 438.30 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=58.93;MQ0=0;OQ=2181.45;QD=35.76;SB=-1110.34 GT:AD:DP:GL:GQ 1/1:0,61:61:-221.75,-18.37,-0.02:99
-chr1 4175576 rs4326593 G A 325.64 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=55.58;MQ0=0;OQ=888.28;QD=16.76;SB=-433.95 GT:AD:DP:GL:GQ 0/1:25,28:48:-106.58,-14.47,-68.77:99
-chr1 4175736 rs4615813 G C 667.23 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.55;MQ0=0;OQ=2403.10;QD=41.43;SB=-1195.96 GT:AD:DP:GL:GQ 1/1:0,58:56:-243.91,-16.87,-0.02:99
-chr1 4175807 rs28600106 C T 6.13 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=7.59;MQ=48.39;MQ0=0;OQ=365.75;QD=9.89;SB=-206.69 GT:AD:DP:GL:GQ 0/1:22,15:31:-49.20,-9.35,-60.01:99
-chr1 4175944 rs2898790 T C 0.54 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=5.41;MQ=54.62;MQ0=0;OQ=1686.61;QD=30.67;SB=-329.61 GT:AD:DP:GL:GQ 1/1:0,55:50:-172.27,-15.06,-0.02:99
-chr1 4176053 rs2411737 G C 0.30 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=4.08;MQ=49.96;MQ0=0;OQ=907.29;QD=30.24;SB=-45.91 GT:AD:DP:GL:GQ 1/1:0,30:23:-94.32,-6.93,-0.01:69.23
-chr1 4176083 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=2;HaplotypeScore=5.12;MQ=50.79;MQ0=0;OQ=53.84;QD=1.17;SB=68.23 GT:AD:DP:GL:GQ 0/1:30,16:35:-19.21,-10.54,-99.51:86.68
-chr1 4176698 rs10915477 G A 75.54 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=2;HaplotypeScore=1.92;MQ=55.80;MQ0=0;OQ=3415.18;QD=40.18;SB=-1433.92 GT:AD:DP:GL:GQ 1/1:0,85:84:-340.52,-25.30,-0.02:99
-chr1 4176748 rs12060660 A C 70.84 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=3.65;MQ=58.23;MQ0=0;OQ=2781.95;QD=35.21;SB=-941.32 GT:AD:DP:GL:GQ 1/1:0,78:78:-285.04,-25.98,-3.27:99
-chr1 4176763 rs10915478 T C 721.59 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.18;MQ0=0;OQ=2617.35;QD=33.99;SB=-1088.89 GT:AD:DP:GL:GQ 1/1:0,77:74:-265.34,-22.29,-0.02:99
-chr1 4176794 rs12060664 A G 585.06 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2362.72;QD=33.28;SB=-1094.09 GT:AD:DP:GL:GQ 1/1:0,71:67:-239.88,-20.19,-0.03:99
-chr1 4177795 rs4654423 T C 596.30 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1639.97;QD=29.29;SB=-739.78 GT:AD:DP:GL:GQ 1/1:0,56:52:-167.62,-15.68,-0.04:99
-chr1 4177808 rs10915479 T C 281.74 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.62;MQ0=0;OQ=507.44;QD=10.36;SB=-255.93 GT:AD:DP:GL:GQ 0/1:30,19:46:-67.89,-13.86,-108.27:99
-chr1 4179046 rs12116719 G A 182.10 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=2853.60;QD=39.09;SB=-1453.00 GT:AD:DP:GL:GQ 1/1:0,73:73:-288.97,-22.00,-0.02:99
-chr1 4179422 rs59176411 C T 132.99 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=3.16;MQ=56.41;MQ0=0;OQ=2598.61;QD=37.12;SB=-1098.00 GT:AD:DP:GL:GQ 1/1:1,69:68:-267.13,-20.49,-3.69:99
-chr1 4179485 rs10737405 A G 230.94 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=55.59;MQ0=0;OQ=1795.14;QD=34.52;SB=-680.95 GT:AD:DP:GL:GQ 1/1:1,51:52:-187.08,-15.66,-3.98:99
-chr1 4180030 rs6657617 C T 6.27 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=2.45;MQ=59.28;MQ0=0;OQ=2474.15;QD=38.66;SB=-836.62 GT:AD:DP:GL:GQ 1/1:0,64:62:-251.01,-18.68,-0.02:99
-chr1 4180081 rs6426405 G A 604.48 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2617.17;QD=39.06;SB=-1069.36 GT:AD:DP:GL:GQ 1/1:0,67:67:-265.32,-20.19,-0.02:99
-chr1 4180490 rs4592237 G A 306.85 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.29;MQ0=0;OQ=1850.80;QD=34.92;SB=-947.36 GT:AD:DP:GL:GQ 1/1:0,53:49:-188.69,-14.77,-0.02:99
-chr1 4181020 rs10799216 G A 235.59 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.51;MQ=59.57;MQ0=0;OQ=3471.51;QD=40.37;SB=-1574.60 GT:AD:DP:GL:GQ 1/1:0,86:85:-346.15,-25.60,-0.02:99
-chr1 4181670 rs4233265 T C 517.98 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.29;MQ0=0;OQ=2065.74;QD=31.30;SB=-824.68 GT:AD:DP:GL:GQ 1/1:0,66:65:-210.21,-19.60,-0.06:99
-chr1 4182159 rs4654425 A G 260.71 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1828.94;QD=35.17;SB=-776.99 GT:AD:DP:GL:GQ 1/1:0,52:51:-186.50,-15.36,-0.02:99
-chr1 4182646 rs11579829 C T 305.04 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.69;MQ0=0;OQ=2773.62;QD=37.48;SB=-1347.81 GT:AD:DP:GL:GQ 1/1:0,74:71:-280.97,-21.39,-0.02:99
-chr1 4183175 rs2132177 C A 639.97 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2919.91;QD=36.50;SB=-1144.30 GT:AD:DP:GL:GQ 1/1:0,80:79:-295.60,-23.79,-0.02:99
-chr1 4184348 rs55978003 G A 105.51 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.52;MQ=59.27;MQ0=0;OQ=776.05;QD=15.22;SB=-305.78 GT:AD:DP:GL:GQ 0/1:27,23:48:-95.35,-14.46,-90.95:99
-chr1 4184779 rs7528938 C T 220.92 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.11;MQ0=0;OQ=1623.71;QD=34.55;SB=-657.89 GT:AD:DP:GL:GQ 1/1:1,44:43:-165.98,-12.96,-0.02:99
-chr1 4185286 rs17415519 A G 242.16 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=1.28;MQ=60.00;MQ0=0;OQ=1345.26;QD=33.63;SB=-658.93 GT:AD:DP:GL:GQ 1/1:0,40:39:-138.12,-11.75,-0.01:99
-chr1 4185339 . G T 41.06 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=12;HaplotypeScore=2.80;MQ=54.83;MQ0=0;QD=0.98;SB=22.81 GT:AD:DP:GL:GQ 0/1:35,7:35:-17.93,-10.54,-103.81:73.90
-chr1 4185557 rs4654516 G C 54.16 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=1.67;MQ=58.74;MQ0=0;OQ=2607.62;QD=37.25;SB=-842.00 GT:AD:DP:GL:GQ 1/1:1,69:66:-264.40,-19.92,-0.05:99
-chr1 4187570 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=2;HaplotypeScore=8.14;MQ=58.89;MQ0=0;OQ=68.10;QD=0.81;SB=131.41 GT:AD:DP:GL:GQ 0/1:59,24:60:-28.18,-18.09,-178.30:99
-chr1 4188372 rs1874267 T G 455.60 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=59.37;MQ0=0;OQ=1048.28;QD=15.88;SB=-524.40 GT:AD:DP:GL:GQ 0/1:29,37:66:-127.99,-19.88,-107.31:99
-chr1 4188412 rs1874266 A G 468.39 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.24;MQ0=0;OQ=798.75;QD=14.52;SB=-409.67 GT:AD:DP:GL:GQ 0/1:23,32:52:-98.84,-15.68,-83.89:99
-chr1 4188663 rs10915480 A G 337.33 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=59.23;MQ0=0;OQ=1153.25;QD=13.73;SB=-560.60 GT:AD:DP:GL:GQ 0/1:38,45:83:-146.27,-27.66,-153.88:99
-chr1 4188905 rs10753374 A G 386.21 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1195.33;QD=15.73;SB=-552.85 GT:AD:DP:GL:GQ 0/1:35,41:76:-145.71,-22.90,-141.29:99
-chr1 4189544 rs10753375 T G 601.10 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1995.47;QD=35.01;SB=-845.10 GT:AD:DP:GL:GQ 1/1:0,57:56:-203.15,-16.86,-0.01:99
-chr1 4189582 rs10799217 A G 68.61 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=59.39;MQ0=0;OQ=909.16;QD=14.90;SB=-461.96 GT:AD:DP:GL:GQ 0/1:30,31:61:-112.58,-18.38,-119.06:99
-chr1 4189759 rs10799218 T C 84.36 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=3;HaplotypeScore=1.76;MQ=58.80;MQ0=0;OQ=827.52;QD=11.18;SB=-285.14 GT:AD:DP:GL:GQ 0/1:41,32:73:-108.03,-22.00,-167.09:99
-chr1 4191122 rs6426406 T C 3.61 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=7.31;MQ=59.57;MQ0=0;OQ=717.35;QD=10.71;SB=-224.24 GT:AD:DP:GL:GQ 0/1:37,30:64:-94.30,-19.28,-145.85:99
-chr1 4191702 rs7541544 T C 425.11 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=59.70;MQ0=0;OQ=729.14;QD=11.76;SB=-343.04 GT:AD:DP:GL:GQ 0/1:32,30:60:-94.28,-18.09,-122.33:99
-chr1 4191813 rs7534461 C G 457.73 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.78;MQ0=0;OQ=1324.41;QD=15.96;SB=-593.50 GT:AD:DP:GL:GQ 0/1:46,37:83:-160.73,-25.00,-206.24:99
-chr1 4191898 rs7534558 C T 290.90 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=2.06;MQ=60.00;MQ0=0;OQ=1246.57;QD=14.17;SB=-621.73 GT:AD:DP:GL:GQ 0/1:50,38:86:-153.86,-25.92,-153.30:99
-chr1 4191985 rs10799219 G C 69.97 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=2.07;MQ=59.38;MQ0=0;OQ=1617.32;QD=21.86;SB=-548.71 GT:AD:DP:GL:GQ 0/1:32,42:72:-186.71,-21.70,-128.86:99
-chr1 4192218 rs10159168 A T 343.86 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1388.76;QD=16.94;SB=-472.56 GT:AD:DP:GL:GQ 0/1:39,43:82:-166.86,-24.70,-146.13:99
-chr1 4195817 rs1390135 T G 143.92 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=58.67;MQ0=0;OQ=705.86;QD=11.20;SB=-334.03 GT:AD:DP:GL:GQ 0/1:33,30:61:-92.25,-18.38,-113.54:99
-chr1 4197896 . G A 10.32 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.52;MQ0=0;OQ=1035.41;QD=21.57;SB=-410.45 GT:AD:DP:GL:GQ 0/1:18,30:48:-121.29,-14.46,-58.46:99
-chr1 4198535 rs1495242 A G 438.02 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1076.27;QD=12.97;SB=-544.21 GT:AD:DP:GL:GQ 0/1:44,39:81:-135.31,-24.40,-175.25:99
-chr1 4199191 rs12124378 C T 379.71 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=1302.45;QD=20.35;SB=-581.61 GT:AD:DP:GL:GQ 0/1:26,38:63:-152.50,-18.97,-95.47:99
-chr1 4199881 . G T 32.56 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=2;HaplotypeScore=5.28;MQ=57.83;MQ0=0;QD=0.74;SB=74.26 GT:AD:DP:GL:GQ 0/1:31,13:34:-16.78,-10.24,-105.31:65.40
-chr1 4200007 . G A 96.98 PASS AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.35;MQ0=0;OQ=1236.21;QD=18.45;SB=-537.73 GT:AD:DP:GL:GQ 0/1:28,39:63:-145.88,-18.98,-96.95:99
-chr1 4200165 rs6426407 A G 72.52 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=58.49;MQ0=0;OQ=1344.67;QD=18.17;SB=-519.96 GT:AD:DP:GL:GQ 0/1:29,44:72:-159.44,-21.69,-113.24:99
-chr1 4200817 rs4654518 G A 711.75 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2818.25;QD=39.69;SB=-1209.38 GT:AD:DP:GL:GQ 1/1:0,71:70:-285.42,-21.08,-0.01:99
-chr1 4202021 rs12124548 G A 209.11 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.70;MQ0=0;OQ=1241.05;QD=20.02;SB=-465.47 GT:AD:DP:GL:GQ 0/1:26,36:61:-145.77,-18.38,-85.04:99
-chr1 4202445 rs12405770 A G 576.59 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1249.87;QD=15.62;SB=-595.92 GT:AD:DP:GL:GQ 0/1:37,43:79:-152.07,-23.80,-148.48:99
-chr1 4202474 rs6426409 T G 405.59 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.78;MQ0=0;OQ=1102.86;QD=13.13;SB=-556.72 GT:AD:DP:GL:GQ 0/1:44,40:82:-138.27,-24.70,-157.66:99
-chr1 4204888 rs12132080 A T 242.23 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=1.72;MQ=45.12;MQ0=6;OQ=964.76;QD=12.69;SB=-408.56 GT:AD:DP:GL:GQ 0/1:34,42:65:-119.34,-19.58,-129.51:99
-chr1 4208143 rs6690300 T G 448.20 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.45;MQ0=0;OQ=967.38;QD=12.73;SB=-340.51 GT:AD:DP:GL:GQ 0/1:41,35:76:-122.91,-22.89,-152.81:99
-chr1 4208388 rs12239600 T C 466.70 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.66;MQ0=0;OQ=937.21;QD=13.78;SB=-484.77 GT:AD:DP:GL:GQ 0/1:32,36:68:-117.50,-20.50,-127.59:99
-chr1 4208894 rs12078298 T A 402.94 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.48;MQ0=0;OQ=1434.64;QD=16.12;SB=-624.40 GT:AD:DP:GL:GQ 0/1:43,46:88:-173.25,-26.51,-162.85:99
-chr1 4209813 rs6679489 G A 164.07 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=2;HaplotypeScore=1.52;MQ=60.00;MQ0=0;OQ=1435.86;QD=16.89;SB=-638.14 GT:AD:DP:GL:GQ 0/1:41,44:83:-171.87,-25.00,-148.88:99
-chr1 4211295 rs4654519 C T 437.58 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.97;MQ0=0;OQ=1264.42;QD=19.76;SB=-439.80 GT:AD:DP:GL:GQ 0/1:26,38:62:-148.40,-18.68,-90.27:99
-chr1 4211773 rs10915487 T G 175.84 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=59.23;MQ0=0;OQ=638.07;QD=10.29;SB=-306.76 GT:AD:DP:GL:GQ 0/1:37,25:61:-85.47,-18.38,-128.27:99
-chr1 4212065 rs1908490 C T 369.52 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=57.82;MQ0=0;OQ=1109.73;QD=15.20;SB=-541.53 GT:AD:DP:GL:GQ 0/1:40,33:71:-135.64,-21.39,-134.48:99
-chr1 4213163 rs12741715 A T 578.55 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1267.51;QD=16.90;SB=-452.19 GT:AD:DP:GL:GQ 0/1:35,40:74:-152.32,-22.29,-133.91:99
-chr1 4215064 rs966321 G T 6.64 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=4;HaplotypeScore=2.95;MQ=59.70;MQ0=0;OQ=1037.52;QD=13.65;SB=-540.72 GT:AD:DP:GL:GQ 0/1:40,36:75:-129.62,-22.59,-142.94:99
-chr1 4215408 rs12691488 C T 601.59 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1073.26;QD=16.02;SB=-541.06 GT:AD:DP:GL:GQ 0/1:35,32:66:-130.50,-19.89,-109.64:99
-chr1 4216644 rs964715 T C 389.60 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=939.74;QD=14.46;SB=-445.57 GT:AD:DP:GL:GQ 0/1:32,33:65:-116.84,-19.58,-130.15:99
-chr1 4217111 rs1495250 T C 316.94 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=60.00;MQ0=0;OQ=777.71;QD=11.44;SB=-393.04 GT:AD:DP:GL:GQ 0/1:36,32:67:-101.25,-20.19,-143.99:99
-chr1 4218910 rs11583756 G A 393.34 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=562.25;QD=10.41;SB=-300.82 GT:AD:DP:GL:GQ 0/1:33,21:51:-74.88,-15.38,-106.07:99
-chr1 4219107 rs7545415 G A 274.25 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.24;MQ0=0;OQ=794.53;QD=14.45;SB=-389.90 GT:AD:DP:GL:GQ 0/1:30,25:51:-98.11,-15.38,-85.30:99
-chr1 4221548 rs1826719 G A 1.65 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.02;HRun=1;HaplotypeScore=9.57;MQ=59.01;MQ0=0;OQ=1104.32;QD=16.73;SB=-370.86 GT:AD:DP:GL:GQ 0/1:31,34:63:-132.39,-18.68,-107.97:99
-chr1 4221834 rs1390137 T A 402.30 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.24;MQ0=0;OQ=1338.31;QD=14.71;SB=-600.22 GT:AD:DP:GL:GQ 0/1:48,43:91:-164.52,-27.41,-184.18:99
-chr1 4222993 rs7526339 A G 180.71 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=860.50;QD=13.04;SB=-424.26 GT:AD:DP:GL:GQ 0/1:36,30:65:-108.91,-19.58,-143.92:99
-chr1 4225449 rs9286982 A C 384.55 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.50;MQ0=0;OQ=1099.77;QD=14.66;SB=-338.80 GT:AD:DP:GL:GQ 0/1:38,37:74:-135.55,-22.29,-134.84:99
-chr1 4226228 rs2411738 G A 332.71 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=1328.38;QD=18.98;SB=-511.52 GT:AD:DP:GL:GQ 0/1:30,40:68:-156.63,-20.50,-89.85:99
-chr1 4227495 rs2101576 C T 457.85 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.43;MQ0=0;OQ=1111.42;QD=15.22;SB=-551.59 GT:AD:DP:GL:GQ 0/1:39,34:73:-136.43,-22.01,-124.07:99
-chr1 4227724 rs10915493 G A 108.64 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=60.00;MQ0=0;OQ=1106.23;QD=18.75;SB=-402.40 GT:AD:DP:GL:GQ 0/1:26,33:59:-131.68,-17.78,-92.93:99
-chr1 4228365 . G A 59.74 PASS AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=2.28;MQ=58.73;MQ0=0;OQ=1218.17;QD=16.69;SB=-516.71 GT:AD:DP:GL:GQ 0/1:36,37:71:-146.49,-21.39,-124.67:99
-chr1 4228440 rs11586171 G A 378.40 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=59.25;MQ0=0;OQ=793.38;QD=14.17;SB=-261.74 GT:AD:DP:GL:GQ 0/1:30,26:52:-98.30,-15.68,-86.01:99
-chr1 4228626 rs10799221 A G 244.66 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=59.55;MQ0=0;OQ=773.13;QD=15.16;SB=-359.35 GT:AD:DP:GL:GQ 0/1:24,27:50:-95.66,-15.07,-89.39:99
-chr1 4230147 rs6677984 A G 313.94 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.80;MQ0=0;OQ=752.97;QD=10.61;SB=-294.25 GT:AD:DP:GL:GQ 0/1:36,35:64:-97.88,-19.30,-127.54:99
-chr1 4231035 . G A 41.87 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=59.27;MQ0=0;OQ=1023.37;QD=17.95;SB=-471.06 GT:AD:DP:GL:GQ 0/1:23,34:54:-121.89,-16.27,-83.08:99
-chr1 4231643 rs4654426 A G 357.68 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=59.13;MQ0=0;OQ=804.91;QD=14.63;SB=-368.10 GT:AD:DP:GL:GQ 0/1:22,33:51:-99.15,-15.37,-84.11:99
-chr1 4232195 . G A 71.35 PASS AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=60.00;MQ0=0;OQ=896.42;QD=13.18;SB=-396.87 GT:AD:DP:GL:GQ 0/1:39,29:68:-113.42,-20.50,-128.87:99
-chr1 4232590 rs7527612 G A 196.65 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.22;MQ=59.61;MQ0=0;OQ=598.22;QD=12.46;SB=-285.21 GT:AD:DP:GL:GQ 0/1:26,20:44:-76.37,-13.26,-81.07:99
-chr1 4233150 rs10737406 C T 190.39 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1662.89;QD=19.34;SB=-750.79 GT:AD:DP:GL:GQ 0/1:38,48:86:-195.48,-25.90,-136.98:99
-chr1 4233365 rs10737407 T C 106.83 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.79;MQ0=0;OQ=829.78;QD=9.43;SB=-420.85 GT:AD:DP:GL:GQ 0/1:52,36:87:-112.48,-26.22,-211.16:99
-chr1 4233528 rs10737408 T C 490.54 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=1057.73;QD=14.90;SB=-414.29 GT:AD:DP:GL:GQ 0/1:30,41:71:-130.46,-21.40,-122.91:99
-chr1 4233635 rs10799223 G C 53.92 PASS AC=1;AF=0.50;AN=2;DB;DP=99;Dels=0.00;HRun=0;HaplotypeScore=4.97;MQ=59.34;MQ0=0;OQ=1650.26;QD=16.67;SB=-729.99 GT:AD:DP:GL:GQ 0/1:53,46:99:-198.14,-29.83,-227.12:99
-chr1 4234047 rs12095914 C T 0.73 PASS AC=1;AF=0.50;AN=2;DB;DP=14;Dels=0.00;HRun=0;HaplotypeScore=9.26;MQ=42.37;MQ0=0;OQ=137.29;QD=9.81;SB=-42.54 GT:AD:DP:GL:GQ 0/1:9,5:10:-20.03,-3.01,-17.15:99
-chr1 4234051 rs56077919 C T 1.78 PASS AC=1;AF=0.50;AN=2;DB;DP=12;Dels=0.00;HRun=0;HaplotypeScore=7.11;MQ=38.66;MQ0=0;OQ=106.65;QD=8.89;SB=-40.54 GT:AD:DP:GL:GQ 0/1:8,4:8:-16.36,-2.41,-14.46:99
-chr1 4234076 . T C 1.57 PASS AC=1;AF=0.50;AN=2;DP=9;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=36.23;MQ0=1;OQ=55.15;QD=6.13;SB=-6.99 GT:AD:DP:GL:GQ 0/1:6,3:7:-10.91,-2.11,-15.53:87.98
-chr1 4234095 rs12752111 C T 29.22 LowQual AC=1;AF=0.50;AN=2;DB;DP=8;Dels=0.00;HRun=1;HaplotypeScore=2.44;MQ=42.08;MQ0=1;QD=3.65;SB=-10.00 GT:AD:DP:GL:GQ 0/1:5,3:6:-8.01,-1.81,-14.07:62.05
-chr1 4234115 . T C 41.10 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=0;HaplotypeScore=27.16;MQ=46.57;MQ0=0;QD=2.94;SB=-6.99 GT:AD:DP:GL:GQ 0/1:10,4:11:-10.71,-3.31,-31.76:73.94
-chr1 4234119 . T C 26.07 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=19;Dels=0.00;HRun=0;HaplotypeScore=23.15;MQ=48.70;MQ0=0;QD=1.37;SB=-6.99 GT:AD:DP:GL:GQ 0/1:13,6:15:-10.41,-4.52,-48.38:58.90
-chr1 4234123 . T C 99.42 SnpCluster AC=1;AF=0.50;AN=2;DP=22;Dels=0.00;HRun=0;HaplotypeScore=15.26;MQ=47.83;MQ0=0;QD=4.52;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,7:16:-18.04,-4.82,-44.01:99
-chr1 4234141 . C T 11.93 LowQual AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=3;HaplotypeScore=2.90;MQ=45.82;MQ0=0;QD=0.38;SB=-10.00 GT:AD:DP:GL:GQ 0/1:27,4:24:-11.68,-7.23,-69.44:44.48
-chr1 4234162 rs55680202 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.02;HRun=14;HaplotypeScore=7.57;MQ=46.57;MQ0=0;OQ=162.83;QD=3.54;SB=-20.39 GT:AD:DP:GL:GQ 0/1:36,9:39:-31.01,-11.45,-100.16:99
-chr1 4234461 rs2898791 C A 324.76 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=54.58;MQ0=0;OQ=1440.90;QD=17.57;SB=-669.70 GT:AD:DP:GL:GQ 0/1:33,49:78:-170.87,-23.50,-98.97:99
-chr1 4235747 rs1495243 G A 21.65 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=2;HaplotypeScore=0.87;MQ=59.34;MQ0=0;OQ=727.40;QD=20.78;SB=-304.24 GT:AD:DP:GL:GQ 0/1:14,21:34:-86.27,-10.24,-44.00:99
-chr1 4235753 rs903541 A G 320.84 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=658.30;QD=17.79;SB=-304.49 GT:AD:DP:GL:GQ 0/1:15,22:36:-79.96,-10.84,-57.03:99
-chr1 4236215 rs2411739 T C 3.39 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=4;HaplotypeScore=1.73;MQ=54.14;MQ0=0;OQ=570.50;QD=9.84;SB=-308.25 GT:AD:DP:GL:GQ 0/1:27,31:50:-75.41,-15.07,-105.40:99
-chr1 4243198 rs6658727 T C 21.46 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=56.21;MQ0=0;OQ=1400.87;QD=30.45;SB=-402.32 GT:AD:DP:GL:GQ 1/1:0,46:43:-143.70,-12.96,-0.03:99
-chr1 4254604 rs1495248 G A 254.74 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.88;MQ0=0;OQ=575.96;QD=13.39;SB=-220.90 GT:AD:DP:GL:GQ 0/1:24,19:42:-73.53,-12.65,-79.75:99
-chr1 4255328 rs2130621 G A 47.37 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=4.28;MQ=59.31;MQ0=0;OQ=1064.10;QD=15.88;SB=-426.97 GT:AD:DP:GL:GQ 0/1:33,34:65:-129.28,-19.59,-111.47:99
-chr1 4255353 rs12123539 G C 316.52 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=1198.39;QD=17.89;SB=-531.27 GT:AD:DP:GL:GQ 0/1:31,36:67:-143.33,-20.20,-136.21:99
-chr1 4255453 rs2029490 A G 353.66 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.70;MQ0=0;OQ=1028.79;QD=13.19;SB=-497.67 GT:AD:DP:GL:GQ 0/1:34,44:74:-128.48,-22.32,-128.69:99
-chr1 4256070 rs61769407 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.03;HRun=0;HaplotypeScore=33.48;MQ=52.67;MQ0=1;OQ=340.13;QD=5.08;SB=-156.75 GT:AD:DP:GL:GQ 0/1:47,18:58:-54.18,-16.88,-142.71:99
-chr1 4256256 rs12563155 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=93.47;MQ=55.97;MQ0=0;OQ=536.64;QD=7.56;SB=-213.44 GT:AD:DP:GL:GQ 0/1:49,22:63:-75.92,-18.98,-150.16:99
-chr1 4256294 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=8.05;MQ=57.07;MQ0=1;OQ=87.19;QD=1.23;SB=41.60 GT:AD:DP:GL:GQ 0/1:61,10:65:-31.59,-19.59,-196.34:99
-chr1 4256295 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=7.58;MQ=57.07;MQ0=1;OQ=86.67;QD=1.22;SB=35.22 GT:AD:DP:GL:GQ 0/1:61,10:60:-30.03,-18.08,-181.58:99
-chr1 4256665 rs11487456 A C 56.20 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=1;HaplotypeScore=2.90;MQ=57.92;MQ0=0;OQ=976.57;QD=11.10;SB=-464.71 GT:AD:DP:GL:GQ 0/1:50,38:85:-126.54,-25.60,-185.54:99
-chr1 4258667 rs10753377 G C 1.06 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=5;HaplotypeScore=1.15;MQ=59.53;MQ0=0;OQ=783.06;QD=15.98;SB=-363.09 GT:AD:DP:GL:GQ 0/1:26,23:47:-95.76,-14.17,-99.93:99
-chr1 4259991 rs592323 G T 282.55 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=1759.13;QD=36.65;SB=-870.26 GT:AD:DP:GL:GQ 1/1:0,48:48:-179.51,-14.45,-0.01:99
-chr1 4261395 rs513096 G A 177.19 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.21;MQ=58.45;MQ0=0;OQ=707.77;QD=15.73;SB=-231.55 GT:AD:DP:GL:GQ 0/1:23,22:44:-87.33,-13.26,-70.99:99
-chr1 4262899 . A G 18.25 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=43.81;MQ=48.38;MQ0=0;QD=0.33;SB=-10.00 GT:AD:DP:GL:GQ 0/1:50,5:40:-17.15,-12.05,-140.45:51.02
-chr1 4262904 rs28675202 G A 73.10 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=14.98;MQ=50.70;MQ0=0;QD=1.43;SB=-10.00 GT:AD:DP:GL:GQ 0/1:40,11:45:-24.15,-13.55,-132.97:99
-chr1 4262909 . G A 79.12 SnpCluster AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=5.00;MQ=50.76;MQ0=0;QD=1.65;SB=-10.00 GT:AD:DP:GL:GQ 0/1:37,11:43:-24.15,-12.95,-125.43:99
-chr1 4262914 rs629808 G A 33.56 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=52.89;MQ=50.96;MQ0=0;QD=0.68;SB=-10.00 GT:AD:DP:GL:GQ 0/1:39,10:44:-19.89,-13.25,-132.97:66.40
-chr1 4262923 . C T 231.89 SnpCluster AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=36.64;MQ=51.44;MQ0=0;QD=5.27;SB=-10.00 GT:AD:DP:GL:GQ 0/1:30,14:37:-37.63,-11.16,-89.50:99
-chr1 4262924 rs3124336 G A 119.70 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=42.63;MQ=51.44;MQ0=0;QD=2.72;SB=-10.00 GT:AD:DP:GL:GQ 0/1:30,14:37:-26.40,-11.15,-102.56:99
-chr1 4262928 . C T 227.91 SnpCluster AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=40.91;MQ=51.65;MQ0=0;QD=5.06;SB=-10.00 GT:AD:DP:GL:GQ 0/1:31,14:38:-37.54,-11.47,-89.09:99
-chr1 4262934 . G A 212.81 SnpCluster AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=38.78;MQ=51.84;MQ0=0;QD=4.63;SB=-10.00 GT:AD:DP:GL:GQ 0/1:35,11:39:-36.31,-11.75,-102.65:99
-chr1 4262955 . C T 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=37;Dels=0.00;HRun=1;HaplotypeScore=10.30;MQ=55.28;MQ0=0;OQ=119.85;QD=3.24;SB=-10.00 GT:AD:DP:GL:GQ 0/1:30,7:34:-25.51,-10.24,-106.69:99
-chr1 4262965 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=36;Dels=0.00;HRun=0;HaplotypeScore=4.99;MQ=55.83;MQ0=0;OQ=58.64;QD=1.63;SB=-10.00 GT:AD:DP:GL:GQ 0/1:31,5:33:-19.09,-9.94,-116.28:91.47
-chr1 4263200 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=16.50;MQ=29.51;MQ0=20;OQ=97.44;QD=2.38;SB=-10.00 GT:AD:DP:GL:GQ 0/1:35,5:14:-17.24,-4.22,-36.40:99
-chr1 4263205 rs12035244 T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=20.28;MQ=30.89;MQ0=18;OQ=95.43;QD=2.27;SB=-10.00 GT:AD:DP:GL:GQ 0/1:37,5:15:-17.34,-4.52,-40.16:99
-chr1 4263595 rs34429154 C A 184.54 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=59.01;MQ0=0;OQ=488.72;QD=10.40;SB=-267.26 GT:AD:DP:GL:GQ 0/1:29,18:46:-66.01,-13.86,-101.87:99
-chr1 4263832 rs584035 G A 216.29 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=59.61;MQ0=0;OQ=1091.44;QD=18.50;SB=-496.53 GT:AD:DP:GL:GQ 0/1:27,32:59:-130.21,-17.78,-86.40:99
-chr1 4263930 rs503536 G A 202.82 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=59.57;MQ0=0;OQ=661.52;QD=12.25;SB=-344.44 GT:AD:DP:GL:GQ 0/1:32,22:49:-84.20,-14.76,-96.54:99
-chr1 4264086 rs693734 C T 101.31 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=2.89;MQ=58.91;MQ0=0;OQ=1021.37;QD=17.02;SB=-501.11 GT:AD:DP:GL:GQ 0/1:29,31:59:-123.20,-17.78,-92.76:99
-chr1 4264332 rs1106307 A G 290.23 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.63;MQ=59.33;MQ0=0;OQ=913.45;QD=14.73;SB=-354.33 GT:AD:DP:GL:GQ 0/1:28,34:58:-112.10,-17.47,-104.59:99
-chr1 4264424 rs2132176 A G 368.22 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=613.38;QD=11.15;SB=-237.28 GT:AD:DP:GL:GQ 0/1:30,25:53:-80.60,-15.97,-111.46:99
-chr1 4264542 rs2132174 T A 221.74 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=52.27;MQ0=0;OQ=1008.56;QD=17.69;SB=-458.63 GT:AD:DP:GL:GQ 0/1:21,35:54:-122.63,-18.49,-81.00:99
-chr1 4264801 rs3007778 G C 66.30 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.47;MQ=58.11;MQ0=0;OQ=580.26;QD=12.35;SB=-271.29 GT:AD:DP:GL:GQ 0/1:28,19:44:-74.59,-13.28,-102.55:99
-chr1 4265009 rs3007777 C A 272.57 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.09;MQ0=0;OQ=812.00;QD=17.65;SB=-415.86 GT:AD:DP:GL:GQ 0/1:19,27:45:-98.04,-13.55,-64.20:99
-chr1 4265174 . G A 199.75 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.87;MQ0=0;OQ=560.44;QD=13.67;SB=-202.85 GT:AD:DP:GL:GQ 0/1:23,18:41:-71.68,-12.35,-78.36:99
-chr1 4265866 rs56198562 A G 125.40 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=2.61;MQ=59.78;MQ0=0;OQ=979.47;QD=11.66;SB=-298.20 GT:AD:DP:GL:GQ 0/1:43,41:82:-125.95,-24.72,-170.33:99
-chr1 4266398 rs1495240 C T 180.37 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.09;MQ0=0;OQ=962.96;QD=18.88;SB=-480.01 GT:AD:DP:GL:GQ 0/1:23,28:47:-113.74,-14.16,-62.01:99
-chr1 4266494 rs1845634 G A 227.70 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1124.56;QD=17.85;SB=-553.73 GT:AD:DP:GL:GQ 0/1:30,33:63:-134.72,-18.98,-108.50:99
-chr1 4267183 rs1490413 G A 163.02 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=1.58;MQ=59.39;MQ0=0;OQ=1192.58;QD=17.54;SB=-578.10 GT:AD:DP:GL:GQ 0/1:31,37:66:-142.43,-19.88,-110.71:99
-chr1 4267249 rs16838591 G A 109.35 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.45;MQ0=0;OQ=560.73;QD=16.49;SB=-154.59 GT:AD:DP:GL:GQ 0/1:17,17:34:-69.60,-10.24,-59.00:99
-chr1 4267670 rs17448695 C T 256.61 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=2.17;MQ=59.11;MQ0=0;OQ=785.86;QD=16.72;SB=-406.95 GT:AD:DP:GL:GQ 0/1:22,24:45:-95.42,-13.55,-80.15:99
-chr1 4267782 rs1817914 T C 324.51 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.97;MQ0=0;OQ=827.52;QD=14.03;SB=-394.24 GT:AD:DP:GL:GQ 0/1:29,30:58:-103.51,-17.47,-117.96:99
-chr1 4267840 rs2934983 G A 322.55 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.36;MQ0=0;OQ=1060.38;QD=18.28;SB=-513.09 GT:AD:DP:GL:GQ 0/1:26,32:57:-126.49,-17.17,-95.38:99
-chr1 4267886 rs1817913 A G 440.55 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=738.48;QD=13.43;SB=-393.26 GT:AD:DP:GL:GQ 0/1:24,31:50:-92.21,-15.08,-81.77:99
-chr1 4268301 rs351622 A T 719.15 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.09;MQ0=0;OQ=1814.47;QD=35.58;SB=-930.73 GT:AD:DP:GL:GQ 1/1:0,51:49:-185.04,-14.76,-0.01:99
-chr1 4268579 rs351621 T C 72.96 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.25;MQ0=0;OQ=1364.91;QD=27.30;SB=-524.09 GT:AD:DP:GL:GQ 1/1:0,50:43:-140.11,-12.97,-0.04:99
-chr1 4268604 rs351620 C T 134.99 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.70;MQ=59.46;MQ0=0;OQ=1433.75;QD=33.34;SB=-736.64 GT:AD:DP:GL:GQ 1/1:0,43:39:-146.99,-11.76,-0.03:99
-chr1 4268679 rs351619 G A 84.28 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=1739.98;QD=37.83;SB=-519.64 GT:AD:DP:GL:GQ 1/1:0,46:44:-177.59,-13.26,-0.01:99
-chr1 4268802 rs351618 T C 98.42 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=1092.21;QD=26.64;SB=-356.42 GT:AD:DP:GL:GQ 1/1:0,41:37:-112.85,-11.17,-0.05:99
-chr1 4268811 rs351617 C T 143.28 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1491.48;QD=36.38;SB=-509.63 GT:AD:DP:GL:GQ 1/1:1,40:39:-152.75,-11.76,-0.02:99
-chr1 4268960 rs2087571 C T 152.24 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=53.63;MQ0=0;OQ=643.83;QD=17.40;SB=-299.23 GT:AD:DP:GL:GQ 0/1:15,22:34:-77.91,-10.25,-47.03:99
-chr1 4269767 rs351616 A G 168.33 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.39;MQ=58.87;MQ0=0;OQ=1214.77;QD=29.63;SB=-431.27 GT:AD:DP:GL:GQ 1/1:0,41:38:-125.09,-11.46,-0.03:99
-chr1 4270245 rs351615 G A 292.81 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=58.55;MQ0=0;OQ=1966.57;QD=35.76;SB=-975.01 GT:AD:DP:GL:GQ 1/1:0,54:52:-200.27,-15.67,-0.02:99
-chr1 4271723 rs351614 C T 601.68 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2473.56;QD=39.90;SB=-1111.03 GT:AD:DP:GL:GQ 1/1:0,62:62:-250.96,-18.68,-0.01:99
-chr1 4271809 rs12132314 C T 430.38 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.65;MQ0=0;OQ=1181.91;QD=18.18;SB=-613.64 GT:AD:DP:GL:GQ 0/1:30,35:65:-141.06,-19.59,-97.20:99
-chr1 4273032 rs171260 A C 300.19 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=870.08;QD=12.08;SB=-225.83 GT:AD:DP:GL:GQ 0/1:41,31:71:-111.68,-21.38,-150.14:99
-chr1 4274131 rs351613 A C 265.29 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.14;MQ0=0;OQ=2299.32;QD=35.37;SB=-1119.04 GT:AD:DP:GL:GQ 1/1:0,65:65:-233.54,-19.58,-0.02:99
-chr1 4277771 rs351596 C T 568.91 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=2579.09;QD=39.68;SB=-949.23 GT:AD:DP:GL:GQ 1/1:0,65:64:-261.51,-19.28,-0.02:99
-chr1 4279737 rs876273 C G 132.40 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=4.17;MQ=59.56;MQ0=0;OQ=768.76;QD=14.78;SB=-189.63 GT:AD:DP:GL:GQ 0/1:23,29:48:-94.65,-14.49,-97.38:99
-chr1 4279818 rs351598 A T 381.51 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.53;MQ=59.66;MQ0=0;OQ=991.33;QD=14.58;SB=-452.46 GT:AD:DP:GL:GQ 0/1:35,33:67:-122.60,-20.18,-130.61:99
-chr1 4280055 rs1874269 C T 619.47 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.78;MQ0=0;OQ=2766.74;QD=39.52;SB=-1179.55 GT:AD:DP:GL:GQ 1/1:0,70:69:-280.28,-20.79,-0.02:99
-chr1 4280204 rs2411741 C A 180.72 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=1.15;MQ=60.13;MQ0=0;OQ=1218.75;QD=14.51;SB=-564.82 GT:AD:DP:GL:GQ 0/1:42,42:82:-149.85,-24.70,-149.73:99
-chr1 4280489 rs351599 C T 413.51 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.72;MQ0=0;OQ=1071.03;QD=16.23;SB=-457.49 GT:AD:DP:GL:GQ 0/1:33,33:66:-130.29,-19.90,-102.77:99
-chr1 4285644 . A G 0.07 PASS AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=4;HaplotypeScore=2.54;MQ=57.79;MQ0=0;OQ=595.83;QD=12.16;SB=-120.71 GT:AD:DP:GL:GQ 0/1:26,23:47:-77.03,-14.16,-95.21:99
-chr1 4288221 . G A 0.84 PASS AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=1;HaplotypeScore=8.13;MQ=58.71;MQ0=0;OQ=1360.73;QD=16.39;SB=-394.38 GT:AD:DP:GL:GQ 0/1:43,40:81:-163.76,-24.40,-149.01:99
-chr1 4289709 . T G 46.86 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=16.54;MQ=56.55;MQ0=0;QD=0.98;SB=53.18 GT:AD:DP:GL:GQ 0/1:27,21:32:-17.62,-9.65,-87.21:79.70
-chr1 4292594 rs34245285 G C 0.05 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=3.96;MQ=50.65;MQ0=4;OQ=195.36;QD=3.15;SB=-102.43 GT:AD:DP:GL:GQ 0/1:47,15:34:-33.09,-10.27,-97.74:99
-chr1 4293081 rs34762254 C G 17.74 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=35.42;MQ0=7;QD=0.43;SB=11.07 GT:AD:DP:GL:GQ 0/1:35,5:26:-12.90,-7.85,-90.70:50.51
-chr1 4293374 . G A 3.97 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=44.45;MQ0=2;OQ=329.37;QD=6.59;SB=0.51 GT:AD:DP:GL:GQ 0/1:31,19:40:-48.28,-12.06,-89.72:99
-chr1 4296431 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.01;HRun=0;HaplotypeScore=166.11;MQ=33.71;MQ0=1;OQ=76.77;QD=0.64;SB=116.41 GT:AD:DP:GL:GQ 0/1:95,22:100:-40.80,-29.83,-343.52:99
-chr1 4296441 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=126;Dels=0.07;HRun=0;HaplotypeScore=204.38;MQ=34.16;MQ0=1;OQ=63.06;QD=0.50;SB=111.78 GT:AD:DP:GL:GQ 0/1:104,10:96:-43.83,-34.24,-290.54:95.89
-chr1 4296449 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=0;HaplotypeScore=184.01;MQ=35.76;MQ0=1;OQ=76.57;QD=0.81;SB=108.85 GT:AD:DP:GL:GQ 0/1:78,6:65:-53.79,-42.85,-256.56:99
-chr1 4296459 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=1;HaplotypeScore=225.82;MQ=37.43;MQ0=0;OQ=345.89;QD=3.98;SB=26.09 GT:AD:DP:GL:GQ 0/1:63,24:68:-58.36,-20.48,-198.46:99
-chr1 4296469 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=95;Dels=0.00;HRun=1;HaplotypeScore=189.98;MQ=37.41;MQ0=0;OQ=75.74;QD=0.80;SB=12.63 GT:AD:DP:GL:GQ 0/1:84,11:69:-31.64,-20.79,-221.92:99
-chr1 4296493 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=88.30;MQ=41.30;MQ0=0;OQ=474.04;QD=4.65;SB=-167.48 GT:AD:DP:GL:GQ 0/1:59,36:81:-93.85,-43.16,-272.31:99
-chr1 4296506 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=103;Dels=0.03;HRun=1;HaplotypeScore=78.61;MQ=43.01;MQ0=0;OQ=51.88;QD=0.50;SB=101.36 GT:AD:DP:GL:GQ 0/1:87,13:87:-34.09,-25.62,-299.11:84.72
-chr1 4296513 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=0;HaplotypeScore=60.45;MQ=43.56;MQ0=0;OQ=185.47;QD=1.85;SB=-3.86 GT:AD:DP:GL:GQ 0/1:80,18:74:-44.13,-22.29,-236.48:99
-chr1 4296520 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=111;Dels=0.00;HRun=1;HaplotypeScore=86.57;MQ=43.66;MQ0=0;OQ=90.49;QD=0.82;SB=69.81 GT:AD:DP:GL:GQ 0/1:99,12:95:-40.96,-28.62,-301.41:99
-chr1 4296571 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=100;Dels=0.02;HRun=0;HaplotypeScore=148.81;MQ=42.35;MQ0=0;OQ=149.13;QD=1.49;SB=56.28 GT:AD:DP:GL:GQ 0/1:64,20:79:-66.77,-48.58,-247.91:99
-chr1 4296587 . G A 55.07 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=113;Dels=0.02;HRun=0;HaplotypeScore=138.42;MQ=36.11;MQ0=2;QD=0.49;SB=3.46 GT:AD:DP:GL:GQ 0/1:83,28:77:-31.99,-23.20,-236.17:87.91
-chr1 4296590 . A G 63.20 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=113;Dels=0.01;HRun=1;HaplotypeScore=134.39;MQ=36.11;MQ0=2;QD=0.56;SB=44.15 GT:AD:DP:GL:GQ 0/1:101,11:84:-34.62,-25.01,-283.57:96.04
-chr1 4296596 . G A 133.96 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=123;Dels=0.00;HRun=0;HaplotypeScore=190.44;MQ=35.58;MQ0=2;QD=1.09;SB=41.12 GT:AD:DP:GL:GQ 0/1:107,16:99:-46.51,-29.83,-296.83:99
-chr1 4296607 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=125;Dels=0.00;HRun=1;HaplotypeScore=185.73;MQ=34.74;MQ0=2;OQ=309.12;QD=2.47;SB=41.15 GT:AD:DP:GL:GQ 0/1:106,19:100:-64.31,-30.12,-298.02:99
-chr1 4296636 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=128;Dels=0.00;HRun=0;HaplotypeScore=188.32;MQ=35.30;MQ0=3;OQ=116.48;QD=0.91;SB=56.18 GT:AD:DP:GL:GQ 0/1:110,17:102:-45.68,-30.75,-346.20:99
-chr1 4296642 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=130;Dels=0.00;HRun=1;HaplotypeScore=236.73;MQ=34.36;MQ0=5;OQ=253.36;QD=1.95;SB=47.15 GT:AD:DP:GL:GQ 0/1:113,17:102:-59.34,-30.72,-306.11:99
-chr1 4296665 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=107.40;MQ=33.96;MQ0=6;OQ=319.22;QD=2.73;SB=50.15 GT:AD:DP:GL:GQ 0/1:91,24:96:-64.13,-28.92,-272.83:99
-chr1 4296668 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=119;Dels=0.01;HRun=0;HaplotypeScore=114.24;MQ=34.12;MQ0=7;OQ=295.42;QD=2.48;SB=-19.17 GT:AD:DP:GL:GQ 0/1:99,19:98:-62.05,-29.23,-276.38:99
-chr1 4296677 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=110;Dels=0.03;HRun=0;HaplotypeScore=117.38;MQ=34.73;MQ0=5;OQ=320.24;QD=2.91;SB=47.14 GT:AD:DP:GL:GQ 0/1:86,21:91:-62.13,-26.82,-250.93:99
-chr1 4296686 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=0;HaplotypeScore=54.93;MQ=36.96;MQ0=5;OQ=147.08;QD=1.67;SB=50.15 GT:AD:DP:GL:GQ 0/1:78,10:74:-40.29,-22.30,-219.44:99
-chr1 4308180 . C T 161.22 PASS AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.53;MQ0=0;OQ=1282.15;QD=17.56;SB=-488.11 GT:AD:DP:GL:GQ 0/1:35,38:73:-153.50,-22.00,-116.62:99
-chr1 4309112 . A C 86.02 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.15;MQ=59.03;MQ0=0;OQ=562.66;QD=13.09;SB=-287.67 GT:AD:DP:GL:GQ 0/1:22,20:43:-74.67,-15.12,-82.44:99
-chr1 4310347 . C T 101.72 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.41;MQ0=0;OQ=1172.68;QD=16.52;SB=-579.36 GT:AD:DP:GL:GQ 0/1:36,35:70:-141.64,-21.08,-130.80:99
-chr1 4314528 . T C 249.50 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1047.71;QD=18.38;SB=-476.64 GT:AD:DP:GL:GQ 0/1:22,35:57:-125.23,-17.17,-90.17:99
-chr1 4316332 . T G 43.87 PASS AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.09;MQ=59.28;MQ0=0;OQ=471.43;QD=14.73;SB=-242.41 GT:AD:DP:GL:GQ 0/1:14,18:31:-59.77,-9.34,-47.32:99
-chr1 4316334 . C G 15.52 PASS AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.32;MQ0=0;OQ=676.22;QD=19.89;SB=-323.04 GT:AD:DP:GL:GQ 0/1:15,19:34:-81.16,-10.25,-60.88:99
-chr1 4318103 rs349395 A G 659.54 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=1716.14;QD=31.20;SB=-834.63 GT:AD:DP:GL:GQ 1/1:0,55:54:-175.24,-16.28,-0.05:99
-chr1 4319680 rs349393 A C 563.28 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=813.26;QD=15.95;SB=-376.77 GT:AD:DP:GL:GQ 0/1:23,28:51:-99.97,-15.36,-86.41:99
-chr1 4319765 rs102083 A T 361.40 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=55.80;MQ0=0;OQ=747.97;QD=14.96;SB=-385.65 GT:AD:DP:GL:GQ 0/1:24,26:48:-92.54,-14.46,-85.84:99
-chr1 4319782 rs28431405 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=20;HaplotypeScore=17.05;MQ=53.28;MQ0=0;OQ=875.22;QD=14.59;SB=-406.12 GT:AD:DP:GL:GQ 0/1:25,35:49:-105.57,-14.76,-69.63:99
-chr1 4319814 rs102085 G A 15.88 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=5.54;MQ=52.08;MQ0=0;OQ=929.67;QD=17.22;SB=-462.49 GT:AD:DP:GL:GQ 0/1:25,29:49:-111.01,-14.76,-74.46:99
-chr1 4319857 rs17410050 C T 91.63 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.83;MQ0=0;OQ=1009.89;QD=18.36;SB=-347.35 GT:AD:DP:GL:GQ 0/1:26,29:55:-120.84,-16.57,-94.75:99
-chr1 4320268 rs349392 G T 359.85 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.27;MQ=58.71;MQ0=0;OQ=818.84;QD=15.16;SB=-433.16 GT:AD:DP:GL:GQ 0/1:23,30:49:-99.94,-14.77,-68.96:99
-chr1 4320352 rs101287 A C 9.82 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=2.94;MQ=58.91;MQ0=0;OQ=686.61;QD=10.73;SB=-323.81 GT:AD:DP:GL:GQ 0/1:36,28:61:-90.33,-18.38,-119.68:99
-chr1 4321671 rs56216403 A T 13.76 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=7.66;MQ=57.98;MQ0=0;OQ=569.50;QD=12.94;SB=-290.67 GT:AD:DP:GL:GQ 0/1:24,20:41:-72.59,-12.36,-76.85:99
-chr1 4321865 rs349391 T C 61.74 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=58.51;MQ0=0;OQ=775.30;QD=16.50;SB=-140.34 GT:AD:DP:GL:GQ 0/1:20,26:42:-93.47,-12.66,-62.46:99
-chr1 4321866 rs56376431 G A 8.49 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.58;MQ=58.51;MQ0=0;OQ=873.71;QD=18.59;SB=-178.26 GT:AD:DP:GL:GQ 0/1:21,26:42:-103.31,-12.65,-56.39:99
-chr1 4322006 rs56162804 C T 116.80 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.53;MQ0=0;OQ=1021.04;QD=20.84;SB=-534.77 GT:AD:DP:GL:GQ 0/1:19,30:49:-120.16,-14.77,-59.62:99
-chr1 4322030 rs55838104 C T 52.16 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=1120.64;QD=21.14;SB=-534.76 GT:AD:DP:GL:GQ 0/1:20,33:52:-131.01,-15.67,-66.54:99
-chr1 4322090 rs16838800 A G 416.20 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=910.62;QD=19.80;SB=-423.34 GT:AD:DP:GL:GQ 0/1:16,30:46:-108.20,-13.86,-64.49:99
-chr1 4322538 rs12403556 C G 69.76 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.92;MQ=60.00;MQ0=0;OQ=1513.57;QD=24.81;SB=-525.74 GT:AD:DP:GL:GQ 0/1:20,41:61:-173.03,-18.39,-83.32:99
-chr1 4322543 rs12404034 A G 25.15 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=3.64;MQ=60.00;MQ0=0;OQ=1221.46;QD=20.02;SB=-417.22 GT:AD:DP:GL:GQ 0/1:20,41:60:-143.50,-18.07,-80.25:99
-chr1 4322609 rs12404038 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=5;HaplotypeScore=9.16;MQ=59.56;MQ0=0;OQ=664.61;QD=12.54;SB=-143.41 GT:AD:DP:GL:GQ 0/1:24,29:49:-84.51,-14.77,-94.35:99
-chr1 4322739 rs12404366 T C 226.21 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=432.95;QD=9.41;SB=-158.54 GT:AD:DP:GL:GQ 0/1:29,17:46:-60.44,-13.86,-115.98:99
-chr1 4322916 rs12402553 G A 357.39 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.62;MQ0=0;OQ=842.62;QD=13.81;SB=-393.36 GT:AD:DP:GL:GQ 0/1:35,26:59:-105.32,-17.77,-117.60:99
-chr1 4323438 rs16838810 A G 123.66 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=0.32;MQ=59.40;MQ0=0;OQ=808.90;QD=13.05;SB=-366.96 GT:AD:DP:GL:GQ 0/1:30,32:61:-102.56,-18.39,-119.19:99
-chr1 4323490 rs55944275 G A 62.78 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.36;MQ0=0;OQ=1153.53;QD=19.89;SB=-343.36 GT:AD:DP:GL:GQ 0/1:24,34:57:-135.81,-17.17,-85.54:99
-chr1 4323756 rs349390 T C 313.61 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.62;MQ0=0;OQ=671.97;QD=11.20;SB=-140.85 GT:AD:DP:GL:GQ 0/1:34,26:58:-87.95,-17.47,-136.36:99
-chr1 4323757 rs58351078 G A 132.53 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.61;MQ0=0;OQ=802.14;QD=13.60;SB=-181.76 GT:AD:DP:GL:GQ 0/1:34,25:59:-101.27,-17.77,-124.39:99
-chr1 4323928 rs61676533 C T 374.12 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.48;MQ0=0;OQ=1036.80;QD=14.40;SB=-477.00 GT:AD:DP:GL:GQ 0/1:40,32:72:-128.65,-21.69,-142.77:99
-chr1 4323975 rs16838812 A G 340.79 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.98;MQ=59.17;MQ0=0;OQ=822.30;QD=12.09;SB=-364.22 GT:AD:DP:GL:GQ 0/1:38,30:68:-106.00,-20.49,-150.74:99
-chr1 4324005 rs16838813 G A 586.02 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.08;MQ0=0;OQ=833.74;QD=14.13;SB=-356.82 GT:AD:DP:GL:GQ 0/1:33,26:58:-104.14,-17.48,-106.56:99
-chr1 4324062 rs56775247 A G 352.77 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.86;MQ0=0;OQ=755.78;QD=11.81;SB=-150.88 GT:AD:DP:GL:GQ 0/1:37,27:64:-98.14,-19.28,-148.79:99
-chr1 4324102 rs57599092 A T 199.13 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.94;MQ=53.27;MQ0=0;OQ=1008.31;QD=14.83;SB=-333.61 GT:AD:DP:GL:GQ 0/1:34,34:66:-123.99,-19.88,-127.49:99
-chr1 4324399 rs11804096 T C 269.49 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=45.70;MQ0=1;OQ=598.48;QD=11.29;SB=-306.38 GT:AD:DP:GL:GQ 0/1:28,25:48:-77.59,-14.46,-100.69:99
-chr1 4324626 rs11803736 A G 203.50 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=51.26;MQ0=1;OQ=569.48;QD=10.55;SB=-273.41 GT:AD:DP:GL:GQ 0/1:32,22:52:-75.89,-15.66,-126.39:99
-chr1 4324693 rs11801800 G A 371.17 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=50.70;MQ0=1;OQ=920.80;QD=14.85;SB=-460.99 GT:AD:DP:GL:GQ 0/1:32,30:59:-113.14,-17.77,-113.29:99
-chr1 4324939 rs12729994 C A 219.08 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=56.71;MQ0=0;OQ=746.98;QD=16.98;SB=-320.72 GT:AD:DP:GL:GQ 0/1:18,26:42:-90.63,-12.65,-55.46:99
-chr1 4325115 rs12742617 T G 433.06 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.56;MQ0=0;OQ=1013.88;QD=12.07;SB=-397.13 GT:AD:DP:GL:GQ 0/1:47,37:83:-129.67,-25.00,-173.24:99
-chr1 4325508 rs34012704 A G 166.42 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.90;MQ=59.63;MQ0=0;OQ=986.31;QD=19.34;SB=-504.18 GT:AD:DP:GL:GQ 0/1:17,34:49:-116.68,-14.77,-62.75:99
-chr1 4325583 . G A 54.73 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=60.00;MQ0=0;OQ=709.46;QD=16.50;SB=-303.82 GT:AD:DP:GL:GQ 0/1:18,25:41:-86.59,-12.36,-64.70:99
-chr1 4325707 rs12405082 A G 0.52 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=6.04;MQ=58.57;MQ0=0;OQ=521.78;QD=8.42;SB=-177.38 GT:AD:DP:GL:GQ 0/1:38,24:56:-72.34,-16.88,-134.28:99
-chr1 4325759 . C T 1.66 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=2;HaplotypeScore=2.89;MQ=58.50;MQ0=0;OQ=768.28;QD=12.39;SB=-160.15 GT:AD:DP:GL:GQ 0/1:32,29:57:-97.29,-17.18,-106.60:99
-chr1 4325887 rs12403671 G C 245.59 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.67;MQ0=0;OQ=1119.45;QD=19.64;SB=-552.71 GT:AD:DP:GL:GQ 0/1:24,33:54:-131.50,-16.27,-104.02:99
-chr1 4325945 rs12404619 C T 347.85 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.65;MQ0=0;OQ=874.85;QD=15.91;SB=-387.13 GT:AD:DP:GL:GQ 0/1:26,29:53:-106.74,-15.97,-91.70:99
-chr1 4326338 rs16838819 A C 229.78 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=4.02;MQ=58.63;MQ0=0;OQ=550.44;QD=10.79;SB=-296.79 GT:AD:DP:GL:GQ 0/1:29,22:49:-73.09,-14.76,-103.75:99
-chr1 4327728 rs34472761 G C 257.96 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.05;MQ0=0;OQ=1072.08;QD=16.75;SB=-550.71 GT:AD:DP:GL:GQ 0/1:32,32:62:-129.19,-18.70,-130.17:99
-chr1 4328031 rs56108323 G A 198.39 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=626.21;QD=12.28;SB=-249.12 GT:AD:DP:GL:GQ 0/1:27,24:48:-80.37,-14.46,-97.54:99
-chr1 4329322 rs483344 A G 283.35 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=59.34;MQ0=0;OQ=672.82;QD=9.61;SB=-273.11 GT:AD:DP:GL:GQ 0/1:41,29:68:-91.06,-20.50,-159.89:99
-chr1 4331124 rs572439 A C 450.24 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.73;MQ0=0;OQ=1069.67;QD=15.73;SB=-417.82 GT:AD:DP:GL:GQ 0/1:30,38:67:-130.43,-20.18,-110.75:99
-chr1 4331158 rs572343 G A 289.61 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.72;MQ0=0;OQ=1247.65;QD=18.62;SB=-597.10 GT:AD:DP:GL:GQ 0/1:31,36:64:-147.32,-19.27,-103.83:99
-chr1 4331483 rs12750862 T C 292.32 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.22;MQ=59.55;MQ0=0;OQ=752.94;QD=14.76;SB=-378.63 GT:AD:DP:GL:GQ 0/1:24,27:49:-93.35,-14.77,-86.37:99
-chr1 4331508 . C T 49.49 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=60.00;MQ0=0;OQ=892.12;QD=17.84;SB=-369.91 GT:AD:DP:GL:GQ 0/1:18,31:43:-105.46,-12.97,-47.94:99
-chr1 4333712 rs2926485 T C 268.41 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.56;MQ=59.83;MQ0=0;OQ=1004.92;QD=15.70;SB=-484.15 GT:AD:DP:GL:GQ 0/1:28,35:61:-122.15,-18.38,-108.51:99
-chr1 4334184 rs57575485 C T 360.52 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.70;MQ0=0;OQ=1292.51;QD=16.79;SB=-566.07 GT:AD:DP:GL:GQ 0/1:37,40:76:-155.43,-22.90,-133.07:99
-chr1 4334834 rs661536 A G 714.01 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1993.62;QD=34.98;SB=-900.02 GT:AD:DP:GL:GQ 1/1:0,57:57:-202.97,-17.17,-0.02:99
-chr1 4339520 rs902403 T C 449.51 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=846.06;QD=12.44;SB=-357.94 GT:AD:DP:GL:GQ 0/1:35,33:68:-108.38,-20.49,-140.89:99
-chr1 4339677 rs2926482 C G 218.76 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2219.96;QD=42.69;SB=-974.35 GT:AD:DP:GL:GQ 1/1:0,52:52:-225.60,-15.67,-0.01:99
-chr1 4340373 rs590798 A C 514.93 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=2632.91;QD=34.64;SB=-1142.61 GT:AD:DP:GL:GQ 1/1:0,76:76:-266.90,-22.89,-0.03:99
-chr1 4344158 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=3;HaplotypeScore=3.49;MQ=60.00;MQ0=0;OQ=63.29;QD=1.07;SB=56.21 GT:AD:DP:GL:GQ 0/1:42,17:47:-23.79,-14.18,-151.98:96.13
-chr1 4344566 rs349413 C A 606.43 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1116.07;QD=14.69;SB=-454.53 GT:AD:DP:GL:GQ 0/1:39,37:76:-137.78,-22.89,-141.17:99
-chr1 4345038 rs164598 G A 482.03 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.02;MQ0=0;OQ=1164.61;QD=17.38;SB=-524.70 GT:AD:DP:GL:GQ 0/1:32,35:67:-139.93,-20.18,-113.85:99
-chr1 4347591 rs4654526 C T 500.86 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1310.21;QD=20.16;SB=-660.78 GT:AD:DP:GL:GQ 0/1:25,40:61:-152.69,-18.39,-71.94:99
-chr1 4351708 rs11585123 G T 52.90 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=3;HaplotypeScore=1.96;MQ=59.43;MQ0=0;OQ=956.92;QD=13.11;SB=-391.99 GT:AD:DP:GL:GQ 0/1:39,34:73:-120.97,-21.99,-133.39:99
-chr1 4352257 rs627555 G A 556.89 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=1274.67;QD=14.01;SB=-577.49 GT:AD:DP:GL:GQ 0/1:53,38:91:-158.16,-27.41,-187.48:99
-chr1 4352698 . A C 145.09 PASS AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1251.00;QD=14.55;SB=-612.69 GT:AD:DP:GL:GQ 0/1:43,43:84:-153.68,-25.30,-154.64:99
-chr1 4353326 rs7523383 C T 223.33 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=1125.20;QD=18.75;SB=-322.36 GT:AD:DP:GL:GQ 0/1:24,35:55:-132.39,-16.58,-65.47:99
-chr1 4354986 rs55703746 G T 228.36 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=1494.65;QD=18.68;SB=-625.43 GT:AD:DP:GL:GQ 0/1:32,48:80:-176.84,-24.10,-112.47:99
-chr1 4358435 . C T 24.59 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=1;HaplotypeScore=3.25;MQ=55.69;MQ0=0;QD=0.61;SB=41.14 GT:AD:DP:GL:GQ 0/1:35,4:36:-16.60,-10.86,-102.91:57.41
-chr1 4358482 . C G 35.61 LowQual AC=1;AF=0.50;AN=2;DP=34;Dels=0.00;HRun=0;HaplotypeScore=3.12;MQ=54.32;MQ0=0;QD=1.05;SB=-23.70 GT:AD:DP:GL:GQ 0/1:30,4:32:-16.49,-9.64,-124.37:68.45
-chr1 4359549 rs6679220 T C 288.35 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=543.81;QD=10.66;SB=-272.37 GT:AD:DP:GL:GQ 0/1:30,21:50:-72.72,-15.06,-124.68:99
-chr1 4360825 rs56081339 G A 327.33 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.43;MQ0=0;OQ=993.85;QD=13.61;SB=-456.06 GT:AD:DP:GL:GQ 0/1:40,33:70:-123.78,-21.11,-120.70:99
-chr1 4363525 rs349402 G A 561.81 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.26;MQ0=0;OQ=1290.95;QD=16.99;SB=-425.80 GT:AD:DP:GL:GQ 0/1:36,40:74:-154.68,-22.30,-119.31:99
-chr1 4367389 rs4654429 G A 56.05 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=5.58;MQ=57.65;MQ0=0;OQ=1142.68;QD=16.80;SB=-522.78 GT:AD:DP:GL:GQ 0/1:32,36:64:-136.84,-19.29,-93.56:99
-chr1 4367566 rs4654430 T C 472.63 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=611.79;QD=10.92;SB=-199.58 GT:AD:DP:GL:GQ 0/1:34,22:55:-81.03,-16.57,-131.86:99
-chr1 4368744 rs547923 C A 335.14 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=58.91;MQ0=0;OQ=794.59;QD=12.42;SB=-343.21 GT:AD:DP:GL:GQ 0/1:34,30:61:-101.12,-18.38,-116.77:99
-chr1 4369295 rs6687224 C G 567.99 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1064.80;QD=17.75;SB=-495.28 GT:AD:DP:GL:GQ 0/1:29,31:59:-127.55,-17.78,-120.89:99
-chr1 4369728 rs733308 T G 295.33 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.39;MQ=59.19;MQ0=1;OQ=894.22;QD=10.65;SB=-355.63 GT:AD:DP:GL:GQ 0/1:48,36:83:-117.71,-25.00,-176.40:99
-chr1 4370735 rs2926477 A G 468.63 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=995.20;QD=15.31;SB=-357.26 GT:AD:DP:GL:GQ 0/1:29,36:64:-122.09,-19.28,-116.14:99
-chr1 4371593 rs505933 A G 376.41 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.99;MQ0=0;OQ=894.44;QD=10.78;SB=-423.73 GT:AD:DP:GL:GQ 0/1:45,38:82:-117.44,-24.72,-179.72:99
-chr1 4371867 rs693045 T C 492.95 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.26;MQ0=0;OQ=669.20;QD=9.99;SB=-303.21 GT:AD:DP:GL:GQ 0/1:37,30:64:-89.50,-19.29,-143.01:99
-chr1 4371873 rs10915529 G C 482.75 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.33;MQ0=0;OQ=903.58;QD=12.91;SB=-393.25 GT:AD:DP:GL:GQ 0/1:40,30:69:-114.44,-20.80,-177.40:99
-chr1 4371886 rs659514 T C 97.64 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=1.39;MQ=58.28;MQ0=0;OQ=683.73;QD=10.05;SB=-268.51 GT:AD:DP:GL:GQ 0/1:42,26:67:-91.84,-20.18,-171.36:99
-chr1 4372308 rs4654533 C G 209.19 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1490.53;QD=19.61;SB=-620.61 GT:AD:DP:GL:GQ 0/1:35,41:72:-174.05,-21.72,-126.16:99
-chr1 4375044 rs349405 A C 311.25 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=541.86;QD=10.62;SB=-270.89 GT:AD:DP:GL:GQ 0/1:31,20:51:-72.83,-15.36,-116.45:99
-chr1 4375626 rs349406 T C 212.51 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=2.99;MQ=59.38;MQ0=0;OQ=1112.63;QD=14.84;SB=-554.63 GT:AD:DP:GL:GQ 0/1:36,39:72:-136.23,-21.69,-140.85:99
-chr1 4375771 rs12562242 G T 432.17 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=59.23;MQ0=0;OQ=915.50;QD=12.54;SB=-381.76 GT:AD:DP:GL:GQ 0/1:39,34:71:-116.22,-21.39,-137.78:99
-chr1 4376133 rs349407 G A 305.49 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.03;MQ0=1;OQ=1382.00;QD=18.43;SB=-530.55 GT:AD:DP:GL:GQ 0/1:31,44:71:-162.87,-21.39,-107.28:99
-chr1 4376945 rs10915530 C T 589.94 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1129.31;QD=16.13;SB=-586.64 GT:AD:DP:GL:GQ 0/1:35,35:68:-136.71,-20.50,-105.26:99
-chr1 4377252 rs1490416 T A 34.72 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.01;HRun=1;HaplotypeScore=4.80;MQ=59.18;MQ0=0;OQ=1402.77;QD=16.50;SB=-436.53 GT:AD:DP:GL:GQ 0/1:39,45:80:-167.66,-24.10,-131.13:99
-chr1 4377771 rs349409 C T 337.62 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.02;MQ=59.15;MQ0=0;OQ=1097.95;QD=15.46;SB=-477.48 GT:AD:DP:GL:GQ 0/1:37,34:69:-133.86,-20.78,-131.05:99
-chr1 4377899 rs349410 C A 42.06 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=4.55;MQ=59.19;MQ0=0;OQ=1054.50;QD=18.50;SB=-399.14 GT:AD:DP:GL:GQ 0/1:22,35:56:-125.60,-16.87,-75.99:99
-chr1 4377949 rs349411 C T 2.69 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=11.72;MQ=58.87;MQ0=0;OQ=1481.01;QD=18.06;SB=-689.93 GT:AD:DP:GL:GQ 0/1:37,45:80:-175.49,-24.10,-130.86:99
-chr1 4377999 rs10915531 A G 391.37 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.24;MQ0=0;OQ=1298.04;QD=16.23;SB=-576.28 GT:AD:DP:GL:GQ 0/1:36,44:80:-157.19,-24.10,-146.95:99
-chr1 4380137 rs493178 G C 0.36 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.09;MQ=57.06;MQ0=0;OQ=874.81;QD=23.64;SB=-165.59 GT:AD:DP:GL:GQ 0/1:11,26:34:-101.01,-10.25,-40.96:99
-chr1 4380197 . G A 21.03 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=23.38;MQ=29.95;MQ0=2;QD=0.68;SB=41.12 GT:AD:DP:GL:GQ 0/1:26,5:22:-12.01,-6.63,-63.36:53.84
-chr1 4380201 rs59237016 A T 117.83 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=21.39;MQ=30.09;MQ0=2;QD=4.36;SB=-11.73 GT:AD:DP:GL:GQ 0/1:19,6:13:-24.36,-9.29,-27.60:99
-chr1 4380203 . A G 41.11 LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=25;Dels=0.00;HRun=0;HaplotypeScore=24.37;MQ=28.28;MQ0=2;QD=1.64;SB=-10.00 GT:AD:DP:GL:GQ 0/1:17,7:10:-10.41,-3.01,-27.49:73.95
-chr1 4380215 . G A 523.36 SnpCluster AC=2;AF=1.00;AN=2;DP=19;Dels=0.05;HRun=0;HaplotypeScore=13.20;MQ=29.01;MQ0=2;QD=27.55;SB=-164.67 GT:AD:DP:GL:GQ 1/1:1,17:14:-55.92,-4.22,-0.00:42.14
-chr1 4380217 rs60888156 G A 452.59 SnpCluster AC=2;AF=1.00;AN=2;DB;DP=19;Dels=0.05;HRun=0;HaplotypeScore=13.68;MQ=29.01;MQ0=2;QD=23.82;SB=-163.66 GT:AD:DP:GL:GQ 1/1:4,14:14:-51.77,-4.22,-2.97:12.46
-chr1 4380219 . G A 274.46 SnpCluster AC=1;AF=0.50;AN=2;DP=17;Dels=0.06;HRun=0;HaplotypeScore=11.89;MQ=29.85;MQ0=1;QD=16.14;SB=-148.61 GT:AD:DP:GL:GQ 0/1:5,11:13:-34.65,-3.92,-13.88:99
-chr1 4380249 . G A 49.25 LowQual AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=23.68;MQ0=1;QD=16.42;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,3:2:-8.33,-0.60,-0.00:6.02
-chr1 4380271 rs6697112 G A 9.28 PASS AC=2;AF=1.00;AN=2;DB;DP=5;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=37.32;MQ0=0;OQ=124.22;QD=24.84;SB=-44.55 GT:AD:DP:GL:GQ 1/1:1,4:4:-15.96,-1.21,-0.00:12.04
-chr1 4380311 rs1309838 C A 157.04 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=54.85;MQ0=0;OQ=623.10;QD=14.84;SB=-208.87 GT:AD:DP:GL:GQ 0/1:19,23:41:-77.95,-12.35,-68.48:99
-chr1 4380330 rs1309839 C T 0.61 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=7.73;MQ=55.45;MQ0=0;OQ=843.65;QD=20.09;SB=-255.33 GT:AD:DP:GL:GQ 0/1:15,27:37:-98.80,-11.15,-35.58:99
-chr1 4380929 . T C 25.32 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=2;HaplotypeScore=5.44;MQ=59.32;MQ0=0;QD=0.37;SB=122.43 GT:AD:DP:GL:GQ 0/1:48,20:54:-22.08,-16.27,-188.06:58.14
-chr1 4380941 rs349386 C T 474.31 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.84;MQ0=0;OQ=1352.78;QD=17.80;SB=-554.75 GT:AD:DP:GL:GQ 0/1:36,40:74:-160.85,-22.29,-128.59:99
-chr1 4381075 rs4654432 C T 88.73 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=1.63;MQ=60.32;MQ0=0;OQ=870.11;QD=12.80;SB=-258.77 GT:AD:DP:GL:GQ 0/1:40,28:66:-110.19,-19.90,-123.57:99
-chr1 4381353 rs35799150 A G 389.01 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=820.10;QD=12.06;SB=-192.18 GT:AD:DP:GL:GQ 0/1:39,29:68:-105.78,-20.48,-159.19:99
-chr1 4381492 rs4654433 G A 604.36 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1070.93;QD=15.98;SB=-493.09 GT:AD:DP:GL:GQ 0/1:35,32:67:-130.57,-20.19,-112.83:99
-chr1 4382470 rs737324 G C 535.52 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=1310.24;QD=17.47;SB=-409.80 GT:AD:DP:GL:GQ 0/1:38,37:74:-156.61,-22.31,-151.67:99
-chr1 4382624 rs349385 A G 200.13 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=56.49;MQ0=0;OQ=1553.01;QD=28.76;SB=-619.97 GT:AD:DP:GL:GQ 1/1:0,53:51:-158.94,-15.39,-0.06:99
-chr1 4383263 rs41266223 T C 212.32 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=57.69;MQ0=0;OQ=666.08;QD=11.29;SB=-355.38 GT:AD:DP:GL:GQ 0/1:32,27:53:-85.86,-15.97,-114.12:99
-chr1 4385955 rs4654537 A G 109.83 PASS AC=1;AF=0.50;AN=2;DB;DP=23;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=60.00;MQ0=0;OQ=187.72;QD=8.16;SB=-92.99 GT:AD:DP:GL:GQ 0/1:12,10:21:-28.39,-6.33,-46.97:99
-chr1 4386470 rs1762818 A G 620.72 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=2262.65;QD=34.81;SB=-1121.77 GT:AD:DP:GL:GQ 1/1:0,65:63:-229.87,-18.98,-0.02:99
-chr1 4386565 rs2035009 T C 346.94 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=58.05;MQ0=0;OQ=655.98;QD=10.93;SB=-329.97 GT:AD:DP:GL:GQ 0/1:30,30:56:-85.78,-16.89,-109.09:99
-chr1 4386918 rs2035008 T A 56.82 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=1.25;MQ=55.07;MQ0=0;OQ=728.43;QD=12.14;SB=-228.91 GT:AD:DP:GL:GQ 0/1:33,27:58:-93.60,-17.47,-122.91:99
-chr1 4387800 . G A 279.77 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1023.92;QD=16.25;SB=-391.36 GT:AD:DP:GL:GQ 0/1:32,31:61:-124.06,-18.39,-99.73:99
-chr1 4388151 rs4654542 C T 244.41 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.62;MQ=60.00;MQ0=0;OQ=1264.25;QD=16.63;SB=-528.76 GT:AD:DP:GL:GQ 0/1:37,39:75:-152.31,-22.60,-121.60:99
-chr1 4388316 rs4654434 G A 492.22 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1047.13;QD=14.54;SB=-490.97 GT:AD:DP:GL:GQ 0/1:40,32:72:-129.68,-21.69,-147.17:99
-chr1 4388691 rs6667927 C T 322.46 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.79;MQ0=0;OQ=1604.10;QD=18.23;SB=-806.38 GT:AD:DP:GL:GQ 0/1:41,47:88:-190.20,-26.51,-149.18:99
-chr1 4388839 rs6658372 G A 449.72 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.10;MQ0=0;OQ=954.40;QD=14.24;SB=-360.06 GT:AD:DP:GL:GQ 0/1:36,31:66:-118.61,-19.88,-128.27:99
-chr1 4389258 rs6678792 T C 469.97 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.45;MQ0=0;OQ=1167.87;QD=15.37;SB=-534.97 GT:AD:DP:GL:GQ 0/1:37,39:76:-142.96,-22.89,-149.63:99
-chr1 4389389 rs10915533 G A 316.56 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=59.63;MQ0=0;OQ=829.91;QD=13.39;SB=-417.75 GT:AD:DP:GL:GQ 0/1:33,29:58:-103.75,-17.48,-109.80:99
-chr1 4389459 rs995749 T C 99.11 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.02;MQ=59.19;MQ0=0;OQ=673.64;QD=11.82;SB=-297.62 GT:AD:DP:GL:GQ 0/1:29,28:55:-87.23,-16.58,-114.38:99
-chr1 4390198 rs6676603 A T 439.97 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.38;MQ0=0;OQ=1300.48;QD=17.57;SB=-634.13 GT:AD:DP:GL:GQ 0/1:32,42:73:-155.32,-21.99,-116.56:99
-chr1 4390481 rs12128251 T C 259.49 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=57.96;MQ0=0;OQ=632.69;QD=11.94;SB=-295.21 GT:AD:DP:GL:GQ 0/1:28,25:50:-81.62,-15.07,-105.90:99
-chr1 4391861 rs2007533 T A 193.95 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=57.74;MQ0=0;OQ=586.86;QD=11.51;SB=-140.76 GT:AD:DP:GL:GQ 0/1:30,21:48:-76.43,-14.46,-99.70:99
-chr1 4391958 rs1809702 T C 301.51 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1033.40;QD=12.45;SB=-514.71 GT:AD:DP:GL:GQ 0/1:39,44:81:-131.04,-24.42,-155.02:99
-chr1 4392226 rs736265 G A 87.76 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=4.07;MQ=59.56;MQ0=0;OQ=793.67;QD=14.97;SB=-313.81 GT:AD:DP:GL:GQ 0/1:27,26:51:-98.01,-15.36,-98.57:99
-chr1 4393075 rs1556691 A G 599.93 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.74;MQ0=0;OQ=937.52;QD=14.88;SB=-473.07 GT:AD:DP:GL:GQ 0/1:29,34:61:-115.41,-18.38,-116.29:99
-chr1 4393225 rs4654435 T C 403.94 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=60.00;MQ0=0;OQ=690.21;QD=11.50;SB=-328.14 GT:AD:DP:GL:GQ 0/1:28,31:55:-88.89,-16.58,-104.73:99
-chr1 4394358 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=18;HaplotypeScore=18.20;MQ=57.05;MQ0=0;OQ=138.13;QD=2.76;SB=68.21 GT:AD:DP:GL:GQ 0/1:39,11:43:-30.06,-12.96,-119.55:99
-chr1 4394377 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=18;HaplotypeScore=17.15;MQ=55.75;MQ0=0;OQ=145.86;QD=2.75;SB=25.24 GT:AD:DP:GL:GQ 0/1:40,13:43:-30.82,-12.95,-126.23:99
-chr1 4394834 rs12072315 G A 483.58 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=835.16;QD=15.47;SB=-392.90 GT:AD:DP:GL:GQ 0/1:29,25:53:-102.78,-15.98,-90.62:99
-chr1 4394951 rs7546444 A G 181.93 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.12;MQ0=0;OQ=846.04;QD=12.26;SB=-340.27 GT:AD:DP:GL:GQ 0/1:38,31:68:-108.38,-20.49,-147.54:99
-chr1 4395538 rs1591426 T C 726.29 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=2474.70;QD=34.37;SB=-1102.69 GT:AD:DP:GL:GQ 1/1:0,72:71:-251.09,-21.39,-0.04:99
-chr1 4395562 rs1591425 A G 113.89 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.25;MQ0=0;OQ=1914.52;QD=29.01;SB=-807.30 GT:AD:DP:GL:GQ 1/1:0,66:62:-195.10,-18.70,-0.06:99
-chr1 4396040 rs10915536 C T 108.05 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.40;MQ0=0;OQ=3075.21;QD=39.94;SB=-1236.02 GT:AD:DP:GL:GQ 1/1:0,77:77:-311.12,-23.19,-0.02:99
-chr1 4396189 rs1762813 C T 709.23 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.85;MQ0=0;OQ=1988.33;QD=37.52;SB=-957.81 GT:AD:DP:GL:GQ 1/1:0,52:51:-202.43,-15.36,-0.01:99
-chr1 4396377 rs1674876 G A 690.55 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=3414.62;QD=39.70;SB=-1526.04 GT:AD:DP:GL:GQ 1/1:0,86:85:-340.46,-25.61,-0.02:99
-chr1 4396770 rs1335365 G A 180.08 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=3218.44;QD=38.31;SB=-1546.06 GT:AD:DP:GL:GQ 1/1:0,84:82:-325.46,-24.71,-0.03:99
-chr1 4396978 rs6660514 C T 529.47 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2569.74;QD=40.15;SB=-881.18 GT:AD:DP:GL:GQ 1/1:0,64:63:-260.57,-18.97,-0.01:99
-chr1 4396990 rs1335363 G A 705.95 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=2655.20;QD=39.05;SB=-1068.35 GT:AD:DP:GL:GQ 1/1:0,68:67:-269.12,-20.18,-0.02:99
-chr1 4397408 rs35211041 C G 282.09 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.56;MQ0=0;OQ=845.74;QD=15.96;SB=-404.93 GT:AD:DP:GL:GQ 0/1:28,25:51:-103.22,-15.37,-116.49:99
-chr1 4397651 rs1234932 T C 32.13 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.62;MQ=59.08;MQ0=0;OQ=2038.22;QD=30.88;SB=-895.04 GT:AD:DP:GL:GQ 1/1:0,66:64:-207.46,-19.30,-0.06:99
-chr1 4399691 rs780572 T C 25.86 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=3.98;MQ=59.66;MQ0=0;OQ=2164.78;QD=32.31;SB=-610.95 GT:AD:DP:GL:GQ 1/1:0,67:65:-220.10,-19.59,-0.04:99
-chr1 4400105 rs12727067 C T 348.64 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=3168.12;QD=39.11;SB=-1535.71 GT:AD:DP:GL:GQ 1/1:0,81:79:-320.41,-23.80,-0.02:99
-chr1 4400296 rs12731060 C T 672.05 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2631.07;QD=38.69;SB=-901.20 GT:AD:DP:GL:GQ 1/1:0,68:67:-266.72,-20.19,-0.02:99
-chr1 4401014 rs6674190 C T 89.86 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.77;MQ0=0;OQ=3223.06;QD=39.79;SB=-1621.16 GT:AD:DP:GL:GQ 1/1:0,81:80:-325.90,-24.10,-0.02:99
-chr1 4401844 rs780573 A G 655.69 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=2538.38;QD=30.96;SB=-1020.34 GT:AD:DP:GL:GQ 1/1:0,82:80:-257.49,-24.12,-0.07:99
-chr1 4403585 rs780581 T C 628.63 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=2729.37;QD=35.91;SB=-1251.85 GT:AD:DP:GL:GQ 1/1:0,76:75:-276.54,-22.59,-0.02:99
-chr1 4405826 rs780587 T C 579.37 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1799.99;QD=35.29;SB=-764.96 GT:AD:DP:GL:GQ 1/1:0,51:50:-183.60,-15.06,-0.02:99
-chr1 4406185 rs780588 T G 731.95 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=2276.92;QD=35.03;SB=-1150.64 GT:AD:DP:GL:GQ 1/1:0,65:65:-231.29,-19.58,-0.02:99
-chr1 4407102 rs780589 G T 206.11 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.17;MQ0=0;OQ=2615.53;QD=35.83;SB=-1329.09 GT:AD:DP:GL:GQ 1/1:0,73:72:-265.16,-21.68,-0.02:99
-chr1 4407119 rs12032561 A G 117.17 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.23;MQ0=0;OQ=2421.51;QD=30.65;SB=-1099.12 GT:AD:DP:GL:GQ 1/1:0,79:76:-245.80,-22.92,-0.06:99
-chr1 4407230 rs780590 C A 140.01 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=60.00;MQ0=0;OQ=2388.18;QD=35.64;SB=-981.59 GT:AD:DP:GL:GQ 1/1:0,67:66:-242.42,-19.88,-0.02:99
-chr1 4407326 rs780591 G C 50.40 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.66;MQ0=0;OQ=2352.09;QD=42.77;SB=-1101.12 GT:AD:DP:GL:GQ 1/1:0,54:54:-238.81,-16.27,-0.01:99
-chr1 4407520 rs780592 G A 361.64 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=3300.47;QD=41.26;SB=-1496.40 GT:AD:DP:GL:GQ 1/1:0,80:80:-329.05,-24.10,-0.02:99
-chr1 4407623 rs780594 T C 139.31 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=2.07;MQ=59.52;MQ0=0;OQ=2627.95;QD=34.13;SB=-1058.85 GT:AD:DP:GL:GQ 1/1:0,77:75:-266.41,-22.59,-0.03:99
-chr1 4408032 rs705684 C T 627.36 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2940.63;QD=39.21;SB=-1334.78 GT:AD:DP:GL:GQ 1/1:0,75:74:-297.67,-22.29,-0.02:99
-chr1 4408272 rs780595 C G 8.91 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=58.81;MQ0=0;OQ=2333.53;QD=42.43;SB=-1051.66 GT:AD:DP:GL:GQ 1/1:0,55:54:-236.95,-16.27,-0.02:99
-chr1 4408429 rs2054268 A G 302.92 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=59.14;MQ0=0;OQ=2648.73;QD=34.85;SB=-1019.36 GT:AD:DP:GL:GQ 1/1:0,76:74:-268.49,-22.29,-0.03:99
-chr1 4408966 rs780596 C G 540.01 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=3023.42;QD=42.58;SB=-1306.69 GT:AD:DP:GL:GQ 1/1:0,71:71:-305.95,-21.40,-0.02:99
-chr1 4409197 rs2054269 G A 716.76 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=2812.55;QD=39.06;SB=-1393.37 GT:AD:DP:GL:GQ 1/1:0,72:71:-284.86,-21.39,-0.02:99
-chr1 4409239 rs2054270 C A 370.19 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=2523.69;QD=36.05;SB=-1226.28 GT:AD:DP:GL:GQ 1/1:0,70:69:-255.97,-20.78,-0.02:99
-chr1 4411281 rs922114 C T 206.92 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=60.00;MQ0=0;OQ=2458.23;QD=37.82;SB=-1122.24 GT:AD:DP:GL:GQ 1/1:0,65:63:-249.43,-18.99,-0.03:99
-chr1 4411941 rs56397589 A G 10.74 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=1.47;MQ=60.00;MQ0=0;OQ=772.90;QD=13.56;SB=-158.90 GT:AD:DP:GL:GQ 0/1:30,27:56:-97.44,-16.87,-122.46:99
-chr1 4412859 . G T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=17.52;MQ=58.30;MQ0=0;OQ=443.68;QD=5.55;SB=107.30 GT:AD:DP:GL:GQ 0/1:54,26:67:-67.84,-20.19,-156.44:99
-chr1 4413809 rs780599 T C 203.02 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=933.92;QD=15.06;SB=-130.24 GT:AD:DP:GL:GQ 0/1:31,31:62:-115.35,-18.67,-127.44:99
-chr1 4413942 rs1235308 A G 208.55 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.56;MQ0=0;OQ=574.66;QD=10.84;SB=-295.15 GT:AD:DP:GL:GQ 0/1:24,29:45:-74.32,-13.57,-86.44:99
-chr1 4413949 rs12135334 A G 227.02 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.57;MQ0=0;OQ=600.78;QD=11.13;SB=-278.65 GT:AD:DP:GL:GQ 0/1:25,29:50:-78.44,-15.07,-99.43:99
-chr1 4414313 rs11584026 G A 462.20 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.70;MQ0=0;OQ=1258.44;QD=16.56;SB=-579.09 GT:AD:DP:GL:GQ 0/1:37,39:74:-151.43,-22.31,-123.49:99
-chr1 4415137 rs1213919 T C 340.20 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.64;MQ0=0;OQ=1036.94;QD=16.20;SB=-428.11 GT:AD:DP:GL:GQ 0/1:27,37:63:-125.96,-18.98,-110.60:99
-chr1 4415275 rs6426411 G A 271.15 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.51;MQ=58.90;MQ0=0;OQ=891.44;QD=15.11;SB=-416.76 GT:AD:DP:GL:GQ 0/1:31,28:59:-110.20,-17.77,-112.97:99
-chr1 4415367 rs6663198 A C 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=21.51;MQ=59.22;MQ0=0;OQ=1036.43;QD=12.49;SB=-473.70 GT:AD:DP:GL:GQ 0/1:44,39:81:-131.33,-24.40,-153.13:99
-chr1 4416433 rs12131294 C T 93.74 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.89;MQ=59.15;MQ0=0;OQ=414.02;QD=9.20;SB=-113.50 GT:AD:DP:GL:GQ 0/1:24,20:37:-55.83,-11.15,-84.17:99
-chr1 4416884 . G A 3.05 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=5.94;MQ=57.87;MQ0=0;OQ=823.53;QD=14.97;SB=-276.27 GT:AD:DP:GL:GQ 0/1:30,25:53:-101.62,-15.98,-87.09:99
-chr1 4417194 rs7550318 A T 249.83 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.46;MQ=57.79;MQ0=0;OQ=1140.48;QD=17.28;SB=-502.48 GT:AD:DP:GL:GQ 0/1:29,37:65:-136.91,-19.58,-108.54:99
-chr1 4417494 . G A 25.73 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=20;HaplotypeScore=6.20;MQ=50.61;MQ0=1;QD=0.42;SB=98.27 GT:AD:DP:GL:GQ 0/1:53,9:50:-20.92,-15.07,-146.64:58.56
-chr1 4417741 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=39;Dels=0.00;HRun=20;HaplotypeScore=20.09;MQ=49.19;MQ0=1;OQ=84.58;QD=2.17;SB=26.11 GT:AD:DP:GL:GQ 0/1:26,12:27:-19.88,-8.14,-73.60:99
-chr1 4417905 rs642409 A G 618.44 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.41;MQ0=0;OQ=2544.54;QD=34.39;SB=-1201.82 GT:AD:DP:GL:GQ 1/1:0,74:71:-258.06,-21.38,-0.02:99
-chr1 4418004 rs10127576 A G 16.51 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=5.95;MQ=57.57;MQ0=1;OQ=493.53;QD=8.97;SB=-221.25 GT:AD:DP:GL:GQ 0/1:34,21:50:-67.70,-15.07,-117.20:99
-chr1 4420145 rs6426412 G T 345.35 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.50;MQ0=0;OQ=1296.90;QD=17.29;SB=-663.60 GT:AD:DP:GL:GQ 0/1:33,42:75:-155.57,-22.59,-114.39:99
-chr1 4420362 . C T 102.52 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=60.52;MQ0=0;OQ=920.19;QD=15.34;SB=-456.47 GT:AD:DP:GL:GQ 0/1:27,31:53:-111.28,-15.98,-79.42:99
-chr1 4421024 rs12137057 A C 291.19 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=701.05;QD=10.62;SB=-364.06 GT:AD:DP:GL:GQ 0/1:39,27:63:-92.36,-18.97,-137.12:99
-chr1 4421180 rs61771168 T G 222.08 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=1;HaplotypeScore=1.81;MQ=59.49;MQ0=0;OQ=588.51;QD=13.08;SB=-310.47 GT:AD:DP:GL:GQ 0/1:23,22:43:-75.09,-12.95,-79.35:99
-chr1 4421771 . C T 52.82 PASS AC=1;AF=0.50;AN=2;DP=35;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=58.00;MQ0=0;OQ=457.94;QD=13.08;SB=-230.51 GT:AD:DP:GL:GQ 0/1:18,17:32:-58.72,-9.64,-61.49:99
-chr1 4422658 . C T 17.02 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=3.11;MQ=59.25;MQ0=0;OQ=990.31;QD=15.97;SB=-404.43 GT:AD:DP:GL:GQ 0/1:32,30:60:-120.40,-18.09,-95.94:99
-chr1 4423184 . G A 28.31 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=59.25;MQ0=0;OQ=1264.58;QD=20.40;SB=-650.72 GT:AD:DP:GL:GQ 0/1:26,36:62:-148.42,-18.68,-94.18:99
-chr1 4423217 rs664520 C T 648.65 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1886.50;QD=38.50;SB=-821.33 GT:AD:DP:GL:GQ 1/1:0,49:49:-192.25,-14.76,-0.02:99
-chr1 4423270 rs17453664 G A 225.88 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=58.29;MQ0=0;OQ=839.10;QD=16.14;SB=-245.23 GT:AD:DP:GL:GQ 0/1:25,27:50:-102.26,-15.06,-88.51:99
-chr1 4424136 . C G 13.14 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=4.07;MQ=59.20;MQ0=0;OQ=717.79;QD=15.27;SB=-220.02 GT:AD:DP:GL:GQ 0/1:26,21:46:-88.93,-13.87,-108.02:99
-chr1 4424195 rs16839046 G A 266.41 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=59.35;MQ0=0;OQ=1078.45;QD=16.85;SB=-521.17 GT:AD:DP:GL:GQ 0/1:30,33:62:-129.81,-18.69,-96.72:99
-chr1 4424280 rs17419859 G A 351.26 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.18;MQ0=0;OQ=665.56;QD=13.05;SB=-350.50 GT:AD:DP:GL:GQ 0/1:25,26:46:-83.71,-13.87,-77.13:99
-chr1 4424589 rs681175 T C 281.02 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=1804.45;QD=35.38;SB=-864.37 GT:AD:DP:GL:GQ 1/1:0,51:50:-184.04,-15.06,-0.01:99
-chr1 4426611 rs16839061 C T 6.85 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=8.78;MQ=59.11;MQ0=0;OQ=724.58;QD=13.42;SB=-330.47 GT:AD:DP:GL:GQ 0/1:31,23:51:-91.11,-15.37,-92.01:99
-chr1 4427201 rs350167 T C 190.81 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.58;MQ=59.66;MQ0=0;OQ=925.11;QD=16.82;SB=-378.98 GT:AD:DP:GL:GQ 0/1:23,32:53:-111.76,-15.96,-93.83:99
-chr1 4427323 . G A 294.49 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=680.55;QD=13.09;SB=-356.53 GT:AD:DP:GL:GQ 0/1:28,24:44:-84.60,-13.26,-76.63:99
-chr1 4433698 . G A 123.19 PASS AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.52;MQ0=0;OQ=1403.52;QD=17.99;SB=-721.04 GT:AD:DP:GL:GQ 0/1:36,42:75:-166.24,-22.60,-109.14:99
-chr1 4433807 . T G 23.74 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=3;HaplotypeScore=5.51;MQ=60.00;MQ0=0;QD=0.37;SB=80.27 GT:AD:DP:GL:GQ 0/1:45,20:51:-21.03,-15.37,-149.91:56.55
-chr1 4434327 rs645724 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=38.18;MQ=55.12;MQ0=0;OQ=2008.88;QD=24.50;SB=-765.25 GT:AD:DP:GL:GQ 0/1:13,69:74:-226.47,-22.30,-33.80:99
-chr1 4434328 rs55641638 T A 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=5;HaplotypeScore=34.59;MQ=55.12;MQ0=0;OQ=2483.75;QD=30.29;SB=-1104.11 GT:AD:DP:GL:GQ 1/1:7,75:79:-274.28,-23.80,-22.35:14.43
-chr1 4434380 rs350168 C T 706.48 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.94;MQ0=0;OQ=2402.65;QD=38.14;SB=-988.02 GT:AD:DP:GL:GQ 1/1:0,63:61:-243.87,-18.38,-0.02:99
-chr1 4434761 . C A 101.78 PASS AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.39;MQ0=0;OQ=1132.04;QD=16.65;SB=-530.30 GT:AD:DP:GL:GQ 0/1:30,38:67:-136.67,-20.18,-105.81:99
-chr1 4435588 rs350169 T A 602.50 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1092.18;QD=14.76;SB=-420.48 GT:AD:DP:GL:GQ 0/1:38,36:74:-134.79,-22.29,-147.43:99
-chr1 4439106 rs610189 T C 76.59 PASS AC=2;AF=1.00;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.49;MQ0=0;OQ=3044.46;QD=31.07;SB=-1448.66 GT:AD:DP:GL:GQ 1/1:0,98:95:-308.11,-28.64,-0.07:99
-chr1 4440903 rs13376654 C A 79.52 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=3.21;MQ=58.73;MQ0=0;OQ=748.18;QD=13.60;SB=-293.00 GT:AD:DP:GL:GQ 0/1:29,26:54:-94.37,-16.27,-89.76:99
-chr1 4440904 rs638289 A G 184.76 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.21;MQ=59.14;MQ0=0;OQ=1717.40;QD=31.80;SB=-743.85 GT:AD:DP:GL:GQ 1/1:0,54:53:-175.37,-15.98,-0.04:99
-chr1 4441250 rs11799990 A C 16.32 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.98;MQ=58.47;MQ0=0;OQ=285.71;QD=5.19;SB=-147.75 GT:AD:DP:GL:GQ 0/1:37,17:50:-46.92,-15.06,-127.84:99
-chr1 4441285 rs6426418 T C 92.05 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=4.50;MQ=58.52;MQ0=0;OQ=434.66;QD=7.63;SB=-199.21 GT:AD:DP:GL:GQ 0/1:38,19:55:-63.32,-16.57,-152.10:99
-chr1 4441304 rs16839089 G A 505.50 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=685.41;QD=10.71;SB=-336.42 GT:AD:DP:GL:GQ 0/1:40,24:63:-90.81,-18.98,-145.42:99
-chr1 4441520 . C T 159.13 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.36;MQ=59.58;MQ0=0;OQ=767.39;QD=13.95;SB=-405.80 GT:AD:DP:GL:GQ 0/1:29,25:52:-95.70,-15.68,-88.39:99
-chr1 4441584 rs28597953 G C 102.96 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.54;MQ0=0;OQ=377.89;QD=7.56;SB=-189.56 GT:AD:DP:GL:GQ 0/1:35,14:50:-59.58,-18.50,-155.34:99
-chr1 4441595 rs12057544 C T 296.32 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=442.52;QD=10.06;SB=-117.50 GT:AD:DP:GL:GQ 0/1:29,15:44:-60.79,-13.25,-105.58:99
-chr1 4441615 rs12094629 G A 446.77 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.36;MQ0=0;OQ=438.29;QD=12.17;SB=-145.60 GT:AD:DP:GL:GQ 0/1:21,15:35:-57.67,-10.56,-64.23:99
-chr1 4442760 rs705686 T G 190.01 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=58.65;MQ0=0;OQ=1305.06;QD=29.00;SB=-525.86 GT:AD:DP:GL:GQ 1/1:0,45:42:-134.13,-12.66,-0.04:99
-chr1 4443102 rs16839093 T A 368.23 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=60.00;MQ0=0;OQ=943.42;QD=16.85;SB=-414.85 GT:AD:DP:GL:GQ 0/1:25,31:55:-114.19,-16.57,-93.32:99
-chr1 4443523 rs6656245 A G 229.68 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=4.49;MQ=59.68;MQ0=0;OQ=985.54;QD=13.50;SB=-516.93 GT:AD:DP:GL:GQ 0/1:35,37:70:-125.21,-23.37,-142.93:99
-chr1 4444038 rs350170 T C 370.74 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=854.91;QD=14.49;SB=-264.93 GT:AD:DP:GL:GQ 0/1:30,29:59:-106.55,-17.78,-120.47:99
-chr1 4444166 . C T 124.24 PASS AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.74;MQ0=0;OQ=1098.39;QD=15.05;SB=-487.09 GT:AD:DP:GL:GQ 0/1:39,34:70:-134.21,-21.09,-126.03:99
-chr1 4446069 rs16839101 C T 439.86 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.34;MQ0=0;OQ=969.43;QD=15.39;SB=-381.11 GT:AD:DP:GL:GQ 0/1:31,32:61:-118.60,-18.38,-109.31:99
-chr1 4448313 rs705687 A G 587.11 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.53;MQ0=0;OQ=1218.14;QD=32.06;SB=-513.41 GT:AD:DP:GL:GQ 1/1:0,38:37:-125.42,-11.15,-0.02:99
-chr1 4448490 rs10799234 G A 167.56 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=924.80;QD=18.50;SB=-481.51 GT:AD:DP:GL:GQ 0/1:22,28:50:-110.83,-15.07,-72.35:99
-chr1 4449095 . G T 15.09 PASS AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=59.46;MQ0=0;OQ=820.94;QD=19.09;SB=-383.80 GT:AD:DP:GL:GQ 0/1:15,28:42:-98.03,-12.65,-50.79:99
-chr1 4449190 . G A 102.60 PASS AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=1775.95;QD=21.93;SB=-864.43 GT:AD:DP:GL:GQ 0/1:30,51:79:-204.67,-23.80,-104.40:99
-chr1 4449240 rs705690 G A 133.54 PASS AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.24;MQ0=0;OQ=3632.63;QD=39.92;SB=-1598.65 GT:AD:DP:GL:GQ 1/1:0,91:90:-362.26,-27.11,-0.03:99
-chr1 4449262 rs780606 A G 76.06 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=59.06;MQ0=0;OQ=718.78;QD=9.71;SB=-329.85 GT:AD:DP:GL:GQ 0/1:44,30:73:-97.16,-22.00,-175.35:99
-chr1 4449723 . G A 148.11 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.81;MQ=59.52;MQ0=0;OQ=713.60;QD=14.87;SB=-335.48 GT:AD:DP:GL:GQ 0/1:25,23:48:-89.11,-14.47,-81.14:99
-chr1 4449964 rs706145 G A 636.09 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2653.69;QD=37.38;SB=-1188.98 GT:AD:DP:GL:GQ 1/1:0,71:69:-268.98,-20.79,-0.03:99
-chr1 4452662 rs1878052 G A 714.61 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2298.20;QD=38.95;SB=-1111.02 GT:AD:DP:GL:GQ 1/1:0,59:59:-233.42,-17.78,-0.02:99
-chr1 4454614 . A C 20.74 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=601.74;QD=13.68;SB=-220.89 GT:AD:DP:GL:GQ 0/1:20,24:43:-76.41,-12.95,-71.27:99
-chr1 4455561 rs10737412 T A 735.37 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2244.31;QD=37.41;SB=-1132.68 GT:AD:DP:GL:GQ 1/1:0,60:60:-228.03,-18.07,-0.02:99
-chr1 4455707 rs4654547 C T 580.91 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=1;OQ=2435.91;QD=38.67;SB=-681.41 GT:AD:DP:GL:GQ 1/1:0,63:61:-247.19,-18.38,-0.02:99
-chr1 4456823 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=121.08;MQ=43.96;MQ0=0;OQ=445.21;QD=5.86;SB=-205.75 GT:AD:DP:GL:GQ 0/1:54,22:71:-69.19,-21.39,-207.74:99
-chr1 4456825 rs61765158 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=3;HaplotypeScore=133.78;MQ=43.18;MQ0=0;OQ=324.30;QD=4.44;SB=-88.42 GT:AD:DP:GL:GQ 0/1:59,14:70:-56.80,-21.09,-201.65:99
-chr1 4456850 rs780601 T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=50.11;MQ=42.32;MQ0=0;OQ=775.14;QD=10.77;SB=-395.42 GT:AD:DP:GL:GQ 0/1:41,31:67:-100.98,-20.18,-144.33:99
-chr1 4457263 rs780603 T C 535.20 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=1544.09;QD=29.13;SB=-491.17 GT:AD:DP:GL:GQ 1/1:0,53:48:-158.03,-14.47,-0.03:99
-chr1 4457873 rs9659744 G A 216.40 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=4.18;MQ=58.81;MQ0=0;OQ=722.66;QD=13.14;SB=-250.79 GT:AD:DP:GL:GQ 0/1:29,25:52:-94.30,-18.75,-103.70:99
-chr1 4457887 rs12029583 T C 182.25 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.02;MQ=58.88;MQ0=0;OQ=815.22;QD=14.06;SB=-229.41 GT:AD:DP:GL:GQ 0/1:25,33:54:-101.08,-16.28,-89.40:99
-chr1 4458652 rs10915548 G A 313.44 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=58.63;MQ0=0;OQ=1202.04;QD=18.21;SB=-612.14 GT:AD:DP:GL:GQ 0/1:31,35:64:-142.78,-19.29,-94.64:99
-chr1 4458793 rs609506 T C 135.30 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=2002.23;QD=32.82;SB=-965.38 GT:AD:DP:GL:GQ 1/1:0,61:57:-203.83,-17.17,-0.03:99
-chr1 4458832 rs13374152 G A 510.02 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.65;MQ0=0;OQ=1323.30;QD=19.75;SB=-559.77 GT:AD:DP:GL:GQ 0/1:28,39:65:-155.19,-19.58,-97.96:99
-chr1 4459077 rs10799235 G C 517.01 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2392.46;QD=41.97;SB=-1062.67 GT:AD:DP:GL:GQ 1/1:0,57:55:-242.85,-16.57,-0.02:99
-chr1 4459761 rs4654438 T C 731.30 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.40;MQ0=0;OQ=2338.83;QD=34.91;SB=-1062.10 GT:AD:DP:GL:GQ 1/1:0,67:66:-237.49,-19.88,-0.02:99
-chr1 4460253 . G A 71.25 PASS AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=54.34;MQ0=0;OQ=761.29;QD=16.20;SB=-383.16 GT:AD:DP:GL:GQ 0/1:23,24:45:-92.98,-13.56,-67.37:99
-chr1 4460265 rs9660574 G A 698.27 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.97;MQ0=0;OQ=1971.68;QD=38.66;SB=-993.84 GT:AD:DP:GL:GQ 1/1:0,51:50:-200.77,-15.06,-0.01:99
-chr1 4460731 rs675509 A G 75.44 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.19;MQ0=0;OQ=1733.09;QD=33.33;SB=-850.97 GT:AD:DP:GL:GQ 1/1:0,52:50:-176.92,-15.06,-0.02:99
-chr1 4460821 rs675641 C T 619.56 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2267.76;QD=39.10;SB=-1112.00 GT:AD:DP:GL:GQ 1/1:0,58:57:-230.38,-17.17,-0.02:99
-chr1 4462336 rs4654548 G A 293.32 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.55;MQ0=0;OQ=1820.62;QD=35.70;SB=-883.64 GT:AD:DP:GL:GQ 1/1:0,51:47:-185.66,-14.16,-0.02:99
-chr1 4462612 rs661886 C G 122.47 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1803.84;QD=41.95;SB=-867.51 GT:AD:DP:GL:GQ 1/1:0,43:43:-183.98,-12.96,-0.01:99
-chr1 4462757 rs597453 T C 1.51 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=2.36;MQ=60.00;MQ0=0;OQ=1873.91;QD=29.28;SB=-570.21 GT:AD:DP:GL:GQ 1/1:0,64:56:-191.00,-16.87,-0.03:99
-chr1 4463867 rs10799237 G A 181.35 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.13;MQ0=0;OQ=2001.42;QD=37.76;SB=-711.98 GT:AD:DP:GL:GQ 1/1:0,53:51:-203.74,-15.36,-0.01:99
-chr1 4464187 . T C 30.12 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.10;MQ=59.33;MQ0=0;OQ=552.68;QD=8.91;SB=-289.28 GT:AD:DP:GL:GQ 0/1:39,23:60:-76.63,-18.08,-155.34:99
-chr1 4465057 rs4654549 G A 100.14 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=3.11;MQ=59.46;MQ0=0;OQ=1572.23;QD=20.42;SB=-717.81 GT:AD:DP:GL:GQ 0/1:31,46:75:-183.10,-22.59,-108.27:99
-chr1 4465240 rs4654439 A G 186.31 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.65;MQ0=0;OQ=1824.70;QD=28.07;SB=-920.11 GT:AD:DP:GL:GQ 1/1:1,64:61:-189.47,-18.40,-3.41:99
-chr1 4465350 rs4654550 C T 464.58 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.14;MQ0=0;OQ=1183.55;QD=15.57;SB=-491.13 GT:AD:DP:GL:GQ 0/1:39,37:73:-143.65,-22.01,-117.80:99
-chr1 4465703 rs16839157 C G 292.75 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=2.96;MQ=59.46;MQ0=0;OQ=1332.22;QD=15.49;SB=-637.02 GT:AD:DP:GL:GQ 0/1:48,38:85:-162.12,-25.61,-205.23:99
-chr1 4465766 rs10753381 C T 668.70 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2452.18;QD=39.55;SB=-960.97 GT:AD:DP:GL:GQ 1/1:0,62:62:-248.82,-18.68,-0.02:99
-chr1 4465913 rs10753382 A C 344.57 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=42.45;MQ0=0;OQ=1152.30;QD=15.16;SB=-375.76 GT:AD:DP:GL:GQ 0/1:35,41:75:-141.10,-22.59,-129.43:99
-chr1 4465925 rs4654440 A G 314.62 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=45.24;MQ0=0;OQ=2545.78;QD=35.36;SB=-1008.34 GT:AD:DP:GL:GQ 1/1:0,72:72:-258.19,-21.69,-0.03:99
-chr1 4466035 rs4654551 T C 137.52 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.71;MQ0=0;OQ=2345.07;QD=29.31;SB=-919.32 GT:AD:DP:GL:GQ 1/1:0,80:75:-238.17,-22.62,-0.07:99
-chr1 4466375 rs4654441 A G 153.58 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=1.97;MQ=59.14;MQ0=0;OQ=1252.72;QD=16.48;SB=-599.98 GT:AD:DP:GL:GQ 0/1:32,44:75:-151.15,-22.60,-128.71:99
-chr1 4466539 . G C 13.68 PASS AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.10;MQ=60.00;MQ0=0;OQ=1133.87;QD=19.22;SB=-442.73 GT:AD:DP:GL:GQ 0/1:26,33:58:-134.16,-17.49,-113.78:99
-chr1 4466591 rs7537577 T C 558.12 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1692.69;QD=36.01;SB=-710.63 GT:AD:DP:GL:GQ 1/1:0,47:47:-172.87,-14.16,-0.01:99
-chr1 4466655 rs1870509 A G 172.47 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=58.79;MQ0=0;OQ=1784.46;QD=27.04;SB=-725.30 GT:AD:DP:GL:GQ 1/1:0,66:58:-182.10,-17.50,-0.07:99
-chr1 4467025 rs1018306 G A 522.41 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=2397.83;QD=37.47;SB=-678.32 GT:AD:DP:GL:GQ 1/1:0,64:61:-243.39,-18.38,-0.02:99
-chr1 4467405 . G A 173.51 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=1037.40;QD=16.73;SB=-505.13 GT:AD:DP:GL:GQ 0/1:31,31:60:-125.11,-18.08,-96.58:99
-chr1 4467882 rs10799238 G A 201.42 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=57.23;MQ0=0;OQ=2039.74;QD=37.09;SB=-730.98 GT:AD:DP:GL:GQ 1/1:0,54:52:-207.58,-15.67,-0.02:99
-chr1 4468054 rs10799239 G T 526.93 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.10;MQ0=0;OQ=2381.50;QD=35.54;SB=-1199.06 GT:AD:DP:GL:GQ 1/1:0,67:66:-241.76,-19.88,-0.02:99
-chr1 4468702 rs780570 T C 301.27 PASS AC=2;AF=1.00;AN=2;DB;DP=22;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=55.66;MQ0=0;OQ=692.07;QD=31.46;SB=-209.70 GT:AD:DP:GL:GQ 1/1:0,22:21:-72.80,-6.33,-0.01:63.17
-chr1 4468728 . G A 3.90 PASS AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=52.20;MQ0=0;OQ=192.92;QD=6.65;SB=-94.59 GT:AD:DP:GL:GQ 0/1:18,10:25:-30.11,-7.53,-60.00:99
-chr1 4468760 rs60725706 C T 2.79 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=2.68;MQ=47.80;MQ0=0;OQ=892.66;QD=25.50;SB=-420.32 GT:AD:DP:GL:GQ 1/1:1,34:26:-92.87,-7.84,-0.02:78.22
-chr1 4468793 . C T 155.10 SnpCluster AC=1;AF=0.50;AN=2;DP=45;Dels=0.00;HRun=2;HaplotypeScore=28.66;MQ=43.47;MQ0=0;QD=3.45;SB=-75.82 GT:AD:DP:GL:GQ 0/1:34,11:31:-28.13,-9.34,-89.19:99
-chr1 4468798 rs57105176 C T 210.28 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=33.72;MQ=43.23;MQ0=0;QD=4.38;SB=-105.47 GT:AD:DP:GL:GQ 0/1:33,15:33:-34.25,-9.94,-88.69:99
-chr1 4468800 . C T 23.55 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=49;Dels=0.00;HRun=2;HaplotypeScore=34.30;MQ=43.63;MQ0=0;QD=0.48;SB=32.09 GT:AD:DP:GL:GQ 0/1:44,5:35:-16.18,-10.54,-113.19:56.36
-chr1 4468801 . T C 10.10 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=1;HaplotypeScore=35.27;MQ=44.04;MQ0=0;QD=0.21;SB=32.13 GT:AD:DP:GL:GQ 0/1:43,5:35:-14.79,-10.54,-128.12:42.49
-chr1 4469243 rs12031045 G A 324.76 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=623.89;QD=15.22;SB=-230.72 GT:AD:DP:GL:GQ 0/1:20,21:41:-78.04,-12.36,-70.49:99
-chr1 4469296 rs780569 T A 228.26 PASS AC=2;AF=1.00;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.28;MQ0=0;OQ=1316.01;QD=34.63;SB=-627.73 GT:AD:DP:GL:GQ 1/1:0,38:37:-135.20,-11.15,-0.01:99
-chr1 4469318 rs12035160 A T 129.07 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=57.81;MQ0=0;OQ=613.76;QD=19.18;SB=-234.94 GT:AD:DP:GL:GQ 0/1:11,21:31:-74.00,-9.34,-42.52:99
-chr1 4469407 rs10799241 A G 224.26 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=57.87;MQ0=0;OQ=407.85;QD=8.87;SB=-207.21 GT:AD:DP:GL:GQ 0/1:29,17:45:-57.62,-13.55,-119.36:99
-chr1 4469520 rs16839168 G A 432.40 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=846.65;QD=16.28;SB=-413.43 GT:AD:DP:GL:GQ 0/1:26,26:51:-103.31,-15.37,-89.05:99
-chr1 4469555 rs16839171 G T 425.50 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=647.76;QD=12.70;SB=-289.64 GT:AD:DP:GL:GQ 0/1:27,24:51:-83.43,-15.37,-93.72:99
-chr1 4469694 rs780568 A G 87.34 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=2;HaplotypeScore=1.60;MQ=59.63;MQ0=0;OQ=1699.95;QD=33.33;SB=-755.94 GT:AD:DP:GL:GQ 1/1:0,51:49:-173.60,-14.76,-0.02:99
-chr1 4470136 rs16839175 T C 275.26 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.63;MQ0=0;OQ=746.25;QD=11.85;SB=-286.15 GT:AD:DP:GL:GQ 0/1:31,32:61:-96.29,-18.39,-125.52:99
-chr1 4470246 rs1612698 A G 417.84 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.34;MQ=60.15;MQ0=0;OQ=917.82;QD=12.40;SB=-358.93 GT:AD:DP:GL:GQ 0/1:42,32:74:-117.36,-22.29,-169.05:99
-chr1 4470842 rs4654552 C T 182.29 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.85;MQ=59.68;MQ0=0;OQ=1084.53;QD=15.28;SB=-349.06 GT:AD:DP:GL:GQ 0/1:37,34:71:-133.13,-21.39,-131.43:99
-chr1 4471600 rs1710415 A G 89.74 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=59.45;MQ0=0;OQ=1235.30;QD=29.41;SB=-309.47 GT:AD:DP:GL:GQ 1/1:0,42:39:-127.15,-11.76,-0.03:99
-chr1 4471806 rs1762825 T A 126.40 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.16;MQ0=0;OQ=1997.53;QD=36.32;SB=-643.98 GT:AD:DP:GL:GQ 1/1:0,55:54:-203.35,-16.27,-0.02:99
-chr1 4471883 rs10915549 G A 333.26 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.45;MQ0=0;OQ=443.28;QD=10.55;SB=-159.64 GT:AD:DP:GL:GQ 0/1:26,16:40:-59.67,-12.06,-79.56:99
-chr1 4472000 rs4654442 G A 195.09 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.37;MQ0=0;OQ=2467.21;QD=37.38;SB=-970.01 GT:AD:DP:GL:GQ 1/1:0,66:62:-250.32,-18.68,-0.02:99
-chr1 4472928 rs4568797 G T 198.75 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.61;MQ=59.01;MQ0=0;OQ=1306.78;QD=17.19;SB=-394.04 GT:AD:DP:GL:GQ 0/1:30,46:73:-155.95,-21.99,-98.20:99
-chr1 4472959 rs4480324 A G 92.82 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.63;MQ0=0;OQ=1914.93;QD=30.40;SB=-560.92 GT:AD:DP:GL:GQ 1/1:0,63:60:-195.13,-18.10,-0.06:99
-chr1 4472994 rs4323680 T C 685.55 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1931.20;QD=32.73;SB=-824.33 GT:AD:DP:GL:GQ 1/1:0,59:55:-196.72,-16.57,-0.02:99
-chr1 4473017 rs4437847 T C 44.80 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=1770.27;QD=28.55;SB=-781.74 GT:AD:DP:GL:GQ 1/1:0,62:55:-180.66,-16.58,-0.05:99
-chr1 4473102 rs4442344 T C 686.66 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1772.96;QD=35.46;SB=-792.00 GT:AD:DP:GL:GQ 1/1:0,50:50:-180.90,-15.06,-0.02:99
-chr1 4473320 rs1710418 A G 44.26 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1771.10;QD=32.20;SB=-713.21 GT:AD:DP:GL:GQ 1/1:0,54:51:-180.72,-15.36,-0.02:99
-chr1 4473327 rs1762828 G A 169.38 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.60;MQ0=0;OQ=2054.72;QD=36.05;SB=-823.34 GT:AD:DP:GL:GQ 1/1:0,57:53:-209.08,-15.97,-0.02:99
-chr1 4473546 rs1710419 C A 168.66 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=2.06;MQ=57.84;MQ0=0;OQ=1495.45;QD=32.51;SB=-770.46 GT:AD:DP:GL:GQ 1/1:0,46:43:-153.15,-12.95,-0.02:99
-chr1 4473664 rs1710420 C T 149.96 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=59.20;MQ0=0;OQ=902.97;QD=15.57;SB=-230.52 GT:AD:DP:GL:GQ 0/1:30,28:57:-110.76,-17.18,-94.35:99
-chr1 4473849 rs1710421 C T 247.57 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.67;MQ0=0;OQ=2607.62;QD=37.79;SB=-1041.32 GT:AD:DP:GL:GQ 1/1:0,69:66:-264.37,-19.88,-0.02:99
-chr1 4473977 rs1710422 C T 77.88 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=58.90;MQ0=0;OQ=2084.84;QD=37.91;SB=-795.07 GT:AD:DP:GL:GQ 1/1:0,55:54:-212.09,-16.27,-0.02:99
-chr1 4473997 rs1710423 T C 135.26 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.07;MQ0=0;OQ=1147.64;QD=25.50;SB=-601.59 GT:AD:DP:GL:GQ 1/1:0,45:37:-118.39,-11.16,-0.04:99
-chr1 4474861 rs1710424 A G 675.73 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=2263.90;QD=31.89;SB=-1103.74 GT:AD:DP:GL:GQ 1/1:0,71:67:-230.02,-20.19,-0.04:99
-chr1 4475148 rs12036337 G A 158.77 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=3.64;MQ=56.87;MQ0=1;OQ=1002.66;QD=14.75;SB=-286.76 GT:AD:DP:GL:GQ 0/1:34,34:59:-121.33,-17.78,-94.02:99
-chr1 4475283 . G A 82.68 PASS AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.84;MQ=59.35;MQ0=0;OQ=845.94;QD=13.22;SB=-362.87 GT:AD:DP:GL:GQ 0/1:34,30:60:-105.97,-18.09,-111.99:99
-chr1 4475382 rs10915550 C T 345.50 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=58.10;MQ0=0;OQ=927.67;QD=14.96;SB=-380.90 GT:AD:DP:GL:GQ 0/1:33,29:62:-114.73,-18.68,-118.48:99
-chr1 4476131 rs10737413 C T 15.63 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.60;MQ0=0;OQ=1742.86;QD=37.08;SB=-655.67 GT:AD:DP:GL:GQ 1/1:0,47:45:-177.88,-13.56,-0.01:99
-chr1 4476657 rs1710430 C G 535.69 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=2311.95;QD=41.28;SB=-1026.21 GT:AD:DP:GL:GQ 1/1:0,56:54:-234.80,-16.27,-0.02:99
-chr1 4476980 rs4654443 C T 562.55 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1325.65;QD=15.60;SB=-630.22 GT:AD:DP:GL:GQ 0/1:45,40:85:-161.45,-25.60,-165.34:99
-chr1 4477487 rs12033789 G T 214.07 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=905.30;QD=15.34;SB=-363.43 GT:AD:DP:GL:GQ 0/1:29,30:59:-111.58,-17.77,-100.35:99
-chr1 4477488 rs12036603 C T 258.44 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=969.57;QD=16.16;SB=-419.81 GT:AD:DP:GL:GQ 0/1:30,30:59:-118.02,-17.78,-101.27:99
-chr1 4478406 rs596607 G A 55.59 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=59.40;MQ0=0;OQ=1761.44;QD=22.88;SB=-768.34 GT:AD:DP:GL:GQ 0/1:27,50:75:-202.03,-22.60,-83.51:99
-chr1 4478558 rs12039806 T A 70.60 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=6.67;MQ=59.12;MQ0=0;OQ=1156.91;QD=14.64;SB=-441.48 GT:AD:DP:GL:GQ 0/1:42,37:77:-142.17,-23.19,-150.58:99
-chr1 4478614 rs12039814 T C 10.71 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=7.09;MQ=59.66;MQ0=0;OQ=671.25;QD=10.02;SB=-294.21 GT:AD:DP:GL:GQ 0/1:37,30:64:-89.71,-19.30,-136.10:99
-chr1 4478650 rs12038994 A T 269.76 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=1147.45;QD=17.39;SB=-509.94 GT:AD:DP:GL:GQ 0/1:28,38:64:-137.31,-19.28,-105.10:99
-chr1 4478709 . A C 2.11 PASS AC=1;AF=0.50;AN=2;DP=73;Dels=0.00;HRun=1;HaplotypeScore=7.65;MQ=58.73;MQ0=0;OQ=1101.58;QD=15.09;SB=-425.69 GT:AD:DP:GL:GQ 0/1:30,42:69:-134.23,-20.79,-106.44:99
-chr1 4478753 rs16839198 G T 52.90 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=7.25;MQ=58.23;MQ0=0;OQ=906.23;QD=13.73;SB=-344.31 GT:AD:DP:GL:GQ 0/1:32,33:64:-113.20,-19.29,-98.09:99
-chr1 4478891 . A G 89.93 PASS AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.48;MQ=59.39;MQ0=0;OQ=917.93;QD=13.50;SB=-396.16 GT:AD:DP:GL:GQ 0/1:36,32:68:-115.57,-20.49,-141.62:99
-chr1 4478991 rs12039070 A G 301.10 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=3.59;MQ=59.71;MQ0=0;OQ=1280.19;QD=16.00;SB=-441.58 GT:AD:DP:GL:GQ 0/1:37,43:80:-155.40,-24.10,-149.81:99
-chr1 4479035 rs12034930 G A 326.95 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.45;MQ=59.68;MQ0=0;OQ=1133.14;QD=15.74;SB=-491.00 GT:AD:DP:GL:GQ 0/1:34,37:69:-137.39,-20.79,-119.61:99
-chr1 4479073 rs12039100 A G 27.26 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=3.20;MQ=58.95;MQ0=0;OQ=915.49;QD=13.87;SB=-279.55 GT:AD:DP:GL:GQ 0/1:35,31:66:-114.72,-19.89,-140.84:99
-chr1 4479099 rs12039101 A G 318.42 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.13;MQ=59.02;MQ0=0;OQ=1020.75;QD=14.38;SB=-348.94 GT:AD:DP:GL:GQ 0/1:36,35:70:-126.45,-21.09,-134.68:99
-chr1 4479118 rs1229148 A G 277.76 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.11;MQ0=0;OQ=784.46;QD=10.75;SB=-374.59 GT:AD:DP:GL:GQ 0/1:37,36:67:-101.94,-20.21,-133.99:99
-chr1 4479593 rs12035830 G A 298.83 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=3.09;MQ=59.59;MQ0=0;OQ=906.38;QD=16.19;SB=-375.12 GT:AD:DP:GL:GQ 0/1:28,28:56:-110.79,-16.87,-99.66:99
-chr1 4479841 rs13375249 G C 20.65 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=1.63;MQ=59.73;MQ0=0;OQ=1230.24;QD=17.57;SB=-290.56 GT:AD:DP:GL:GQ 0/1:33,37:66:-146.20,-19.90,-135.57:99
-chr1 4479995 rs13375764 T C 66.03 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=4.40;MQ=59.54;MQ0=0;OQ=574.33;QD=11.49;SB=-245.91 GT:AD:DP:GL:GQ 0/1:28,22:47:-74.88,-14.16,-104.49:99
-chr1 4480068 rs56226943 T C 40.29 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=4.82;MQ=59.62;MQ0=0;OQ=881.12;QD=14.44;SB=-433.94 GT:AD:DP:GL:GQ 0/1:29,32:60:-109.48,-18.08,-115.28:99
-chr1 4480417 . C T 49.35 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=55.69;MQ0=0;OQ=1159.90;QD=16.81;SB=-282.22 GT:AD:DP:GL:GQ 0/1:33,36:66:-139.16,-19.89,-99.45:99
-chr1 4480560 rs61765366 A G 285.70 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=56.94;MQ0=0;OQ=701.52;QD=11.89;SB=-268.60 GT:AD:DP:GL:GQ 0/1:29,30:57:-90.62,-17.18,-111.39:99
-chr1 4480691 rs61765367 A G 0.21 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=4.75;MQ=57.81;MQ0=0;OQ=122.26;QD=1.63;SB=-4.55 GT:AD:DP:GL:GQ 0/1:63,11:59:-33.30,-17.79,-184.25:99
-chr1 4480787 rs61765379 A G 0.06 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=7.68;MQ=56.41;MQ0=0;OQ=64.97;QD=0.82;SB=-50.25 GT:AD:DP:GL:GQ 0/1:64,12:67:-29.98,-20.20,-222.76:97.81
-chr1 4480849 rs549627 C T 251.36 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=56.04;MQ0=0;OQ=1162.07;QD=16.37;SB=-467.11 GT:AD:DP:GL:GQ 0/1:33,37:67:-139.69,-20.20,-99.87:99
-chr1 4480920 rs548786 G A 173 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.10;MQ=56.79;MQ0=1;OQ=670.11;QD=12.41;SB=-198.20 GT:AD:DP:GL:GQ 0/1:30,24:48:-84.77,-14.47,-84.01:99
-chr1 4481090 rs12039682 C T 474.84 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.78;MQ0=0;OQ=980.72;QD=14.21;SB=-480.03 GT:AD:DP:GL:GQ 0/1:39,30:68:-121.84,-20.48,-138.54:99
-chr1 4481198 rs12039710 C A 19.16 PASS AC=1;AF=0.50;AN=2;DB;DP=88;Dels=0.00;HRun=3;HaplotypeScore=2.99;MQ=59.79;MQ0=0;OQ=1468.40;QD=16.69;SB=-755.87 GT:AD:DP:GL:GQ 0/1:41,47:88:-176.63,-26.50,-144.72:99
-chr1 4481445 rs608203 T C 400.08 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=60.00;MQ0=0;OQ=763.64;QD=11.93;SB=-242.90 GT:AD:DP:GL:GQ 0/1:33,31:64:-98.94,-19.29,-134.86:99
-chr1 4481949 rs518456 T G 602.74 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1221.17;QD=15.26;SB=-525.73 GT:AD:DP:GL:GQ 0/1:37,43:77:-148.59,-23.19,-127.99:99
-chr1 4481956 rs57010025 C T 238.50 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.40;MQ0=0;OQ=1419.96;QD=18.44;SB=-598.08 GT:AD:DP:GL:GQ 0/1:35,42:76:-168.18,-22.90,-116.42:99
-chr1 4482059 rs10489135 T C 436.47 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.51;MQ0=0;OQ=1051.73;QD=13.84;SB=-549.55 GT:AD:DP:GL:GQ 0/1:39,37:73:-130.44,-21.99,-146.62:99
-chr1 4482139 rs57559146 A C 431.51 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=970.54;QD=17.33;SB=-397.86 GT:AD:DP:GL:GQ 0/1:23,33:54:-116.60,-16.26,-81.57:99
-chr1 4482422 rs60071491 T C 92.13 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=2;HaplotypeScore=0.92;MQ=56.24;MQ0=0;OQ=1374.62;QD=16.76;SB=-668.88 GT:AD:DP:GL:GQ 0/1:37,45:82:-165.44,-24.69,-153.42:99
-chr1 4482693 rs4112336 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=102.81;MQ=56.77;MQ0=0;OQ=769.43;QD=9.27;SB=-197.80 GT:AD:DP:GL:GQ 0/1:55,28:82:-104.92,-24.70,-193.00:99
-chr1 4482708 . C A 39.18 Indel;LowQual AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=48.79;MQ=55.68;MQ0=0;QD=0.43;SB=-10.83 GT:AD:DP:GL:GQ 0/1:82,10:90:-34.30,-27.10,-291.82:72.01
-chr1 4482756 rs1229150 T G 280.23 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=57.57;MQ0=0;OQ=1600.43;QD=18.83;SB=-735.72 GT:AD:DP:GL:GQ 0/1:32,53:82:-188.02,-24.70,-112.53:99
-chr1 4482784 rs1229151 A G 1304.96 Indel AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=53.27;MQ0=0;QD=17.88;SB=-660.04 GT:AD:DP:GL:GQ 0/1:30,43:72:-155.47,-21.69,-120.71:99
-chr1 4482854 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=68;Dels=0.00;HRun=0;HaplotypeScore=78.29;MQ=48.56;MQ0=0;OQ=195.41;QD=2.87;SB=-84.58 GT:AD:DP:GL:GQ 0/1:55,13:66:-42.70,-19.88,-199.63:99
-chr1 4482959 rs2097536 C T 73.43 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.49;MQ0=0;OQ=999.17;QD=22.20;SB=-274.28 GT:AD:DP:GL:GQ 0/1:16,29:44:-116.46,-13.25,-55.39:99
-chr1 4486372 rs12040164 C T 326.57 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.99;MQ=59.42;MQ0=0;OQ=1051.54;QD=14.60;SB=-388.33 GT:AD:DP:GL:GQ 0/1:40,32:72:-130.14,-21.70,-132.54:99
-chr1 4487829 rs241237 C T 194.54 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.46;MQ0=0;OQ=801.99;QD=18.65;SB=-287.22 GT:AD:DP:GL:GQ 0/1:18,25:42:-96.14,-12.66,-58.53:99
-chr1 4488590 . G A 17.21 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1047.83;QD=22.78;SB=-295.25 GT:AD:DP:GL:GQ 0/1:15,31:44:-121.33,-13.26,-41.74:99
-chr1 4489266 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=19.48;MQ=53.94;MQ0=1;OQ=546.80;QD=8.68;SB=-157.24 GT:AD:DP:GL:GQ 0/1:31,26:42:-73.40,-15.44,-84.22:99
-chr1 4489270 rs241234 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=25.61;MQ=53.85;MQ0=1;OQ=785.85;QD=12.28;SB=-389.60 GT:AD:DP:GL:GQ 0/1:33,31:57:-99.04,-17.17,-115.38:99
-chr1 4490410 rs241233 T C 169.60 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.70;MQ=59.74;MQ0=0;OQ=1074.01;QD=14.92;SB=-553.96 GT:AD:DP:GL:GQ 0/1:36,36:72:-132.37,-21.68,-149.45:99
-chr1 4490829 rs241232 G A 84.32 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=59.60;MQ0=0;OQ=913.96;QD=19.45;SB=-389.16 GT:AD:DP:GL:GQ 0/1:20,27:47:-108.84,-14.16,-68.00:99
-chr1 4492019 . C T 107.27 PASS AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.07;MQ0=0;OQ=862.99;QD=13.28;SB=-457.42 GT:AD:DP:GL:GQ 0/1:38,27:64:-108.86,-19.28,-134.13:99
-chr1 4492104 rs241229 G A 148.93 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=59.63;MQ0=0;OQ=584.46;QD=9.28;SB=-212.39 GT:AD:DP:GL:GQ 0/1:43,20:63:-80.71,-18.98,-155.69:99
-chr1 4494463 rs537398 T C 597.93 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=930.45;QD=15.51;SB=-426.29 GT:AD:DP:GL:GQ 0/1:29,31:60:-114.40,-18.07,-118.90:99
-chr1 4494858 rs34231005 T G 11.27 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=4;HaplotypeScore=0.14;MQ=59.76;MQ0=0;OQ=881.39;QD=11.30;SB=-322.46 GT:AD:DP:GL:GQ 0/1:45,33:76:-114.31,-22.89,-158.76:99
-chr1 4495171 rs509960 T C 253.48 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=2.40;MQ=60.00;MQ0=0;OQ=1172.46;QD=18.04;SB=-611.00 GT:AD:DP:GL:GQ 0/1:27,38:65:-140.10,-19.58,-110.54:99
-chr1 4495869 . C T 861.60 Indel AC=1;AF=0.50;AN=2;DP=74;Dels=0.04;HRun=1;HaplotypeScore=22.99;MQ=51.44;MQ0=0;QD=11.64;SB=-342.41 GT:AD:DP:GL:GQ 0/1:44,27:74:-110.83,-21.38,-161.62:99
-chr1 4495871 . C A 736.52 Indel AC=1;AF=0.50;AN=2;DP=74;Dels=0.04;HRun=0;HaplotypeScore=22.99;MQ=51.44;MQ0=0;QD=9.95;SB=-304.20 GT:AD:DP:GL:GQ 0/1:44,27:74:-98.32,-21.38,-161.31:99
-chr1 4496138 rs10915553 T C 458.40 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.54;MQ0=0;OQ=880.60;QD=11.90;SB=-349.17 GT:AD:DP:GL:GQ 0/1:42,32:72:-113.03,-21.69,-158.51:99
-chr1 4496148 rs10915554 G A 271.40 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=55.61;MQ0=0;OQ=1132.53;QD=15.10;SB=-504.97 GT:AD:DP:GL:GQ 0/1:40,35:73:-138.53,-22.00,-129.42:99
-chr1 4496394 rs12084169 C T 196.40 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=59.54;MQ0=0;OQ=1321.84;QD=16.12;SB=-685.73 GT:AD:DP:GL:GQ 0/1:41,41:80:-159.57,-24.10,-141.56:99
-chr1 4496424 rs12086217 A G 463.85 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.43;MQ0=0;OQ=859.99;QD=13.23;SB=-378.26 GT:AD:DP:GL:GQ 0/1:34,31:65:-108.86,-19.58,-137.17:99
-chr1 4496942 rs623217 G C 175.34 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=59.66;MQ0=0;OQ=1355.72;QD=19.94;SB=-471.80 GT:AD:DP:GL:GQ 0/1:31,37:66:-158.75,-19.89,-127.17:99
-chr1 4496949 rs472113 G A 230.42 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.66;MQ0=0;OQ=1272.49;QD=18.99;SB=-462.43 GT:AD:DP:GL:GQ 0/1:30,37:67:-150.71,-20.18,-109.30:99
-chr1 4497460 rs556890 A G 2.32 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=9.81;MQ=58.48;MQ0=0;OQ=661.76;QD=14.39;SB=-333.32 GT:AD:DP:GL:GQ 0/1:21,24:43:-82.42,-12.96,-78.26:99
-chr1 4497578 . G A 145.29 PASS AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.42;MQ=55.81;MQ0=2;OQ=939.73;QD=13.42;SB=-372.83 GT:AD:DP:GL:GQ 0/1:38,32:59:-115.04,-17.78,-100.90:99
-chr1 4497715 rs609304 T C 122.41 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.55;MQ0=0;OQ=597.13;QD=11.71;SB=-145.28 GT:AD:DP:GL:GQ 0/1:26,25:50:-78.07,-15.08,-99.80:99
-chr1 4497726 rs554335 A T 316.28 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=640.98;QD=12.57;SB=-272.29 GT:AD:DP:GL:GQ 0/1:29,22:51:-82.74,-15.36,-107.67:99
-chr1 4497802 rs16838465 A G 196.23 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.68;MQ0=0;OQ=953.26;QD=13.06;SB=-260.95 GT:AD:DP:GL:GQ 0/1:33,40:71:-120.01,-21.40,-135.23:99
-chr1 4497821 rs553435 A G 265.49 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=3.67;MQ=59.70;MQ0=0;OQ=1049.73;QD=13.63;SB=-281.63 GT:AD:DP:GL:GQ 0/1:34,43:75:-130.87,-22.61,-136.05:99
-chr1 4497861 rs608492 G C 466.90 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.05;MQ0=0;OQ=1478.41;QD=20.82;SB=-714.38 GT:AD:DP:GL:GQ 0/1:30,41:69:-171.91,-20.79,-131.74:99
-chr1 4497881 rs12726510 T C 431.64 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=56.08;MQ0=0;OQ=981.66;QD=11.69;SB=-387.89 GT:AD:DP:GL:GQ 0/1:41,43:78:-124.95,-23.50,-161.69:99
-chr1 4497887 rs12752601 C A 191.53 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=56.08;MQ0=0;OQ=1107.25;QD=13.18;SB=-552.73 GT:AD:DP:GL:GQ 0/1:44,40:81:-138.40,-24.39,-157.12:99
-chr1 4497950 rs12737521 G A 266.94 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.10;MQ0=0;OQ=874.33;QD=12.67;SB=-378.16 GT:AD:DP:GL:GQ 0/1:41,28:69:-111.51,-20.80,-136.23:99
-chr1 4498077 rs551359 A G 240.90 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=59.32;MQ0=0;OQ=1496.06;QD=16.81;SB=-547.59 GT:AD:DP:GL:GQ 0/1:39,50:88:-179.39,-26.50,-159.21:99
-chr1 4498168 rs495682 T C 312.82 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.73;MQ0=0;OQ=1219.53;QD=14.52;SB=-615.78 GT:AD:DP:GL:GQ 0/1:41,43:83:-150.24,-25.00,-166.52:99
-chr1 4498170 rs596848 G A 305.85 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.72;MQ0=0;OQ=1391.50;QD=16.77;SB=-693.72 GT:AD:DP:GL:GQ 0/1:40,43:81:-166.83,-24.40,-145.63:99
-chr1 4498284 rs596360 G A 603.53 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=984.96;QD=14.92;SB=-509.05 GT:AD:DP:GL:GQ 0/1:36,30:66:-121.68,-19.90,-113.72:99
-chr1 4498314 rs494638 T C 459.72 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.34;MQ0=0;OQ=1145.34;QD=15.69;SB=-585.28 GT:AD:DP:GL:GQ 0/1:33,40:71:-139.20,-21.39,-128.86:99
-chr1 4498825 rs489371 A G 35.40 PASS AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=1;HaplotypeScore=4.84;MQ=56.29;MQ0=0;OQ=1173.41;QD=12.62;SB=-564.58 GT:AD:DP:GL:GQ 0/1:51,42:90:-147.73,-27.11,-207.42:99
-chr1 4498854 rs489316 A G 383.07 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=53.44;MQ0=0;OQ=1022.72;QD=11.24;SB=-456.67 GT:AD:DP:GL:GQ 0/1:50,41:90:-132.68,-27.12,-202.80:99
-chr1 4499103 rs592726 C T 522.92 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=1251.74;QD=14.06;SB=-614.59 GT:AD:DP:GL:GQ 0/1:50,39:87:-154.68,-26.22,-160.76:99
-chr1 4499256 rs6673713 A T 601.23 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.46;MQ0=0;OQ=969.14;QD=15.38;SB=-478.55 GT:AD:DP:GL:GQ 0/1:32,31:63:-119.17,-18.97,-123.21:99
-chr1 4499545 rs6677142 T C 474.20 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=56.97;MQ0=0;OQ=1056.33;QD=15.77;SB=-489.28 GT:AD:DP:GL:GQ 0/1:31,36:67:-129.10,-20.18,-124.32:99
-chr1 4499557 rs10158638 A G 600.71 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.01;MQ0=0;OQ=954.47;QD=14.46;SB=-498.28 GT:AD:DP:GL:GQ 0/1:33,33:66:-118.61,-19.88,-133.94:99
-chr1 4499695 rs28694108 C T 122.88 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=60.16;MQ0=0;OQ=1387.28;QD=20.11;SB=-460.49 GT:AD:DP:GL:GQ 0/1:27,42:67:-162.21,-20.20,-83.84:99
-chr1 4499852 rs569392 T C 181.23 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.97;MQ=59.40;MQ0=0;OQ=1301.88;QD=15.50;SB=-652.84 GT:AD:DP:GL:GQ 0/1:40,44:84:-158.78,-25.30,-162.80:99
-chr1 4499866 rs638811 G A 371.51 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.47;MQ0=0;OQ=1161.22;QD=14.70;SB=-516.05 GT:AD:DP:GL:GQ 0/1:40,38:72:-141.11,-21.71,-113.94:99
-chr1 4500093 rs627374 C A 201.56 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=3.04;MQ=56.24;MQ0=0;OQ=1409.06;QD=17.18;SB=-575.67 GT:AD:DP:GL:GQ 0/1:36,45:77:-170.76,-26.57,-102.66:99
-chr1 4500144 rs1612095 G C 191.96 PASS AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=58.14;MQ0=0;OQ=1652.98;QD=16.87;SB=-714.30 GT:AD:DP:GL:GQ 0/1:51,47:96:-197.51,-28.93,-219.71:99
-chr1 4500181 rs1612008 C T 343.92 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.55;MQ0=0;OQ=1543.90;QD=16.78;SB=-630.74 GT:AD:DP:GL:GQ 0/1:42,49:86:-183.59,-25.91,-132.31:99
-chr1 4500274 rs544513 A G 399.63 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=703.77;QD=11.00;SB=-261.96 GT:AD:DP:GL:GQ 0/1:33,31:62:-92.35,-18.69,-134.62:99
-chr1 4500351 rs543653 T G 570.98 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=699.52;QD=12.27;SB=-362.58 GT:AD:DP:GL:GQ 0/1:31,26:56:-90.10,-16.87,-111.77:99
-chr1 4500481 rs542688 C G 360.13 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.76;MQ0=0;OQ=1267.59;QD=16.05;SB=-449.73 GT:AD:DP:GL:GQ 0/1:41,38:77:-153.25,-23.20,-181.78:99
-chr1 4500512 rs625627 C T 286.16 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.37;MQ=59.08;MQ0=0;OQ=914.91;QD=12.89;SB=-281.75 GT:AD:DP:GL:GQ 0/1:39,32:67:-114.97,-20.19,-123.19:99
-chr1 4500529 rs541929 A G 325.19 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.04;MQ=59.16;MQ0=0;OQ=945.37;QD=12.28;SB=-290.30 GT:AD:DP:GL:GQ 0/1:42,34:76:-120.71,-22.89,-170.67:99
-chr1 4500606 rs10915556 C T 355.71 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1316.31;QD=19.65;SB=-489.56 GT:AD:DP:GL:GQ 0/1:29,38:66:-154.80,-19.88,-102.91:99
-chr1 4500644 rs2051642 G T 498.30 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1142.97;QD=16.33;SB=-501.30 GT:AD:DP:GL:GQ 0/1:32,38:70:-138.67,-21.09,-110.82:99
-chr1 4500677 rs2051641 C T 126.58 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=2.61;MQ=60.00;MQ0=0;OQ=1424.93;QD=18.04;SB=-396.12 GT:AD:DP:GL:GQ 0/1:37,42:79:-169.57,-23.79,-134.20:99
-chr1 4500995 rs694361 G A 987.12 Indel AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=10;HaplotypeScore=19.73;MQ=59.67;MQ0=0;QD=14.31;SB=-451.85 GT:AD:DP:GL:GQ 0/1:36,33:64:-121.28,-19.29,-109.34:99
-chr1 4501161 rs10915557 A C 322.35 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.59;MQ0=0;OQ=772.74;QD=13.80;SB=-198.82 GT:AD:DP:GL:GQ 0/1:27,28:54:-96.83,-16.27,-94.26:99
-chr1 4501182 rs10915558 G T 398.28 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=829.24;QD=13.16;SB=-280.30 GT:AD:DP:GL:GQ 0/1:32,31:61:-104.58,-18.38,-107.72:99
-chr1 4501418 rs988089 G T 231.64 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.83;MQ0=0;OQ=785.83;QD=14.29;SB=-379.13 GT:AD:DP:GL:GQ 0/1:28,27:55:-98.43,-16.57,-95.26:99
-chr1 4501445 rs988088 G A 287.91 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.35;MQ0=0;OQ=635.25;QD=14.77;SB=-270.30 GT:AD:DP:GL:GQ 0/1:21,22:39:-78.57,-11.76,-58.80:99
-chr1 4501584 rs1988134 A T 372.09 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.72;MQ0=0;OQ=1235.61;QD=14.89;SB=-511.29 GT:AD:DP:GL:GQ 0/1:43,40:83:-151.84,-25.00,-162.60:99
-chr1 4501936 rs508056 T C 0.28 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.01;HRun=1;HaplotypeScore=15.97;MQ=59.84;MQ0=0;OQ=1145.11;QD=15.07;SB=-479.27 GT:AD:DP:GL:GQ 0/1:36,39:76:-140.39,-22.59,-147.97:99
-chr1 4501948 rs594535 A T 38.55 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.01;HRun=0;HaplotypeScore=7.00;MQ=59.51;MQ0=0;OQ=1283.54;QD=17.83;SB=-623.13 GT:AD:DP:GL:GQ 0/1:31,40:72:-153.02,-21.38,-116.42:99
-chr1 4502177 rs640624 T C 14.98 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=7.76;MQ=59.57;MQ0=0;OQ=1108.01;QD=16.29;SB=-573.02 GT:AD:DP:GL:GQ 0/1:30,38:66:-133.97,-19.88,-116.04:99
-chr1 4502677 . A G 145.65 PASS AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.30;MQ0=0;OQ=805.91;QD=12.21;SB=-395.14 GT:AD:DP:GL:GQ 0/1:37,29:66:-103.76,-19.88,-150.61:99
-chr1 4502871 rs2411775 C T 188.48 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.39;MQ0=0;OQ=1230.48;QD=17.83;SB=-330.32 GT:AD:DP:GL:GQ 0/1:32,36:67:-146.52,-20.19,-100.70:99
-chr1 4503184 rs694935 T A 28.68 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=2.73;MQ=59.33;MQ0=0;OQ=840.35;QD=13.55;SB=-222.90 GT:AD:DP:GL:GQ 0/1:31,31:58:-104.80,-17.48,-105.42:99
-chr1 4503230 rs694967 T G 352.39 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=57.78;MQ0=0;OQ=1098.27;QD=15.25;SB=-535.44 GT:AD:DP:GL:GQ 0/1:33,39:72:-134.80,-21.69,-119.88:99
-chr1 4503601 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=120;Dels=0.00;HRun=1;HaplotypeScore=106.52;MQ=39.06;MQ0=0;OQ=897.90;QD=7.48;SB=-269.21 GT:AD:DP:GL:GQ 0/1:86,34:118:-128.61,-35.54,-314.22:99
-chr1 4503616 . T C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=137;Dels=0.00;HRun=1;HaplotypeScore=12.83;MQ=37.47;MQ0=0;OQ=467.51;QD=3.41;SB=-122.22 GT:AD:DP:GL:GQ 0/1:111,26:134:-90.40,-40.36,-439.82:99
-chr1 4503623 rs241214 C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=148;Dels=0.00;HRun=0;HaplotypeScore=94.05;MQ=37.91;MQ0=0;OQ=4273.01;QD=28.87;SB=-1538.72 GT:AD:DP:GL:GQ 0/1:32,114:147:-426.30,-51.49,-123.04:99
-chr1 4503639 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=159;Dels=0.00;HRun=0;HaplotypeScore=260.99;MQ=37.36;MQ0=0;OQ=1166.38;QD=7.34;SB=-484.60 GT:AD:DP:GL:GQ 0/1:114,44:124:-157.27,-37.35,-295.16:99
-chr1 4503657 rs12754029 A C 1394.26 DPFilter;Indel AC=1;AF=0.50;AN=2;DB;DP=153;Dels=0.00;HRun=1;HaplotypeScore=166.14;MQ=39.29;MQ0=0;QD=9.11;SB=-599.12 GT:AD:DP:GL:GQ 0/1:73,77:122:-190.87,-48.16,-269.49:99
-chr1 4503674 rs61111938 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=147;Dels=0.00;HRun=0;HaplotypeScore=137.11;MQ=42.18;MQ0=0;OQ=392.40;QD=2.67;SB=-58.59 GT:AD:DP:GL:GQ 0/1:124,23:123:-79.58,-37.06,-405.54:99
-chr1 4503686 rs61202630 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=124;Dels=0.03;HRun=0;HaplotypeScore=163.66;MQ=45.68;MQ0=0;OQ=981.22;QD=7.91;SB=-498.66 GT:AD:DP:GL:GQ 0/1:79,40:116:-138.71,-37.31,-281.28:99
-chr1 4503715 . T C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=16.61;MQ=53.48;MQ0=0;OQ=158.20;QD=1.86;SB=-90.66 GT:AD:DP:GL:GQ 0/1:72,13:84:-44.41,-25.30,-293.89:99
-chr1 4503964 rs241215 T A 444.25 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=54.88;MQ0=0;OQ=1312.48;QD=17.50;SB=-618.08 GT:AD:DP:GL:GQ 0/1:34,41:75:-157.12,-22.59,-129.67:99
-chr1 4504029 rs241216 G A 155.80 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=4.03;MQ=59.43;MQ0=0;OQ=1251.65;QD=17.15;SB=-469.46 GT:AD:DP:GL:GQ 0/1:35,38:70:-149.55,-21.10,-107.16:99
-chr1 4504349 rs241217 C G 275.14 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1603.60;QD=22.59;SB=-778.42 GT:AD:DP:GL:GQ 0/1:29,42:71:-185.04,-21.39,-125.25:99
-chr1 4505282 rs241218 T C 43.78 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=7.22;MQ=59.15;MQ0=0;OQ=812.13;QD=11.44;SB=-395.26 GT:AD:DP:GL:GQ 0/1:37,34:67:-104.70,-20.20,-130.72:99
-chr1 4506052 rs241219 T C 334.21 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.94;MQ=59.17;MQ0=0;OQ=741.75;QD=13.25;SB=-389.65 GT:AD:DP:GL:GQ 0/1:27,29:55:-94.04,-16.58,-103.55:99
-chr1 4508064 rs241220 G A 334 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=60.00;MQ0=0;OQ=1163.49;QD=17.37;SB=-431.97 GT:AD:DP:GL:GQ 0/1:32,35:66:-139.53,-19.90,-98.33:99
-chr1 4508910 rs241221 T C 373.72 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.20;MQ0=0;OQ=874.89;QD=15.08;SB=-418.55 GT:AD:DP:GL:GQ 0/1:25,33:55:-107.34,-16.57,-97.13:99
-chr1 4509116 rs241222 G C 267.87 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=59.18;MQ0=0;OQ=1337.43;QD=18.07;SB=-676.08 GT:AD:DP:GL:GQ 0/1:37,37:72:-158.72,-21.69,-154.68:99
-chr1 4510110 rs241244 A T 180.09 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.78;MQ=60.38;MQ0=0;OQ=930.99;QD=16.33;SB=-387.46 GT:AD:DP:GL:GQ 0/1:27,30:57:-113.55,-17.17,-101.72:99
-chr1 4510493 rs241245 T C 361.78 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=851.20;QD=14.43;SB=-421.93 GT:AD:DP:GL:GQ 0/1:29,30:57:-105.58,-17.17,-107.45:99
-chr1 4510920 rs241246 T C 463.10 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.63;MQ0=0;OQ=864.46;QD=13.94;SB=-382.19 GT:AD:DP:GL:GQ 0/1:32,30:62:-108.40,-18.67,-129.80:99
-chr1 4510938 rs241247 G T 223.55 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=4.47;MQ=59.71;MQ0=0;OQ=1111.82;QD=14.07;SB=-561.61 GT:AD:DP:GL:GQ 0/1:42,37:78:-137.96,-23.49,-147.67:99
-chr1 4511101 rs241248 G A 90.66 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=4.65;MQ=58.90;MQ0=0;OQ=1137.70;QD=15.80;SB=-412.89 GT:AD:DP:GL:GQ 0/1:38,34:72:-138.74,-21.69,-139.14:99
-chr1 4512226 rs241249 C A 118.09 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=2704.76;QD=36.06;SB=-1203.75 GT:AD:DP:GL:GQ 1/1:0,75:73:-274.08,-21.98,-0.01:99
-chr1 4512612 rs12117466 C T 434.32 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1595.86;QD=21.57;SB=-705.78 GT:AD:DP:GL:GQ 0/1:28,46:74:-185.16,-22.29,-104.90:99
-chr1 4512789 rs2222050 C G 399.97 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=51.66;MQ0=0;OQ=560.26;QD=12.18;SB=-284.90 GT:AD:DP:GL:GQ 0/1:29,17:46:-73.17,-13.86,-129.73:99
-chr1 4512997 . G C 109.15 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.26;MQ0=0;OQ=1039.37;QD=14.64;SB=-540.64 GT:AD:DP:GL:GQ 0/1:41,30:70:-128.31,-21.09,-176.73:99
-chr1 4513093 rs241250 C T 592.78 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.64;MQ0=0;OQ=2215.68;QD=40.29;SB=-1120.49 GT:AD:DP:GL:GQ 1/1:0,55:55:-225.17,-16.57,-0.01:99
-chr1 4513279 rs241251 T C 191.39 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=3.46;MQ=56.17;MQ0=0;OQ=859.05;QD=12.10;SB=-428.93 GT:AD:DP:GL:GQ 0/1:40,31:71:-110.57,-21.39,-162.21:99
-chr1 4513371 rs241252 G A 678.22 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2454.05;QD=39.58;SB=-997.85 GT:AD:DP:GL:GQ 1/1:0,61:61:-249.00,-18.37,-0.01:99
-chr1 4513556 rs56948682 G C 523.60 Indel AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=3.31;MQ=55.31;MQ0=0;QD=11.90;SB=-218.66 GT:AD:DP:GL:GQ 0/1:25,19:40:-67.72,-12.07,-92.30:99
-chr1 4513868 rs241254 G A 271.50 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.27;MQ=58.71;MQ0=0;OQ=649.43;QD=12.03;SB=-239.26 GT:AD:DP:GL:GQ 0/1:28,25:50:-83.30,-15.07,-98.60:99
-chr1 4513881 rs241255 G C 176.18 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=58.80;MQ0=0;OQ=2370.20;QD=40.87;SB=-1167.06 GT:AD:DP:GL:GQ 1/1:0,58:55:-240.62,-16.57,-0.01:99
-chr1 4514372 rs241256 C T 582.40 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=913.61;QD=13.44;SB=-345.84 GT:AD:DP:GL:GQ 0/1:39,29:68:-115.13,-20.48,-142.92:99
-chr1 4514476 rs6426419 T A 347.17 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.60;MQ0=0;OQ=541.18;QD=9.33;SB=-252.68 GT:AD:DP:GL:GQ 0/1:37,21:57:-74.57,-17.17,-137.52:99
-chr1 4514682 rs241257 C T 286.90 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=2358.24;QD=39.97;SB=-1174.07 GT:AD:DP:GL:GQ 1/1:0,59:59:-239.42,-17.77,-0.01:99
-chr1 4514873 rs171319 C T 380.27 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.42;MQ0=0;OQ=1086.37;QD=13.58;SB=-534.53 GT:AD:DP:GL:GQ 0/1:46,34:78:-135.44,-23.52,-140.72:99
-chr1 4515369 rs241258 G A 48.68 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=2.13;MQ=47.21;MQ0=0;OQ=749.09;QD=17.42;SB=-181.27 GT:AD:DP:GL:GQ 0/1:20,23:42:-90.85,-12.66,-63.49:99
-chr1 4515444 rs241259 C G 22.32 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=50.43;MQ0=0;OQ=2118.85;QD=40.75;SB=-972.73 GT:AD:DP:GL:GQ 1/1:0,52:49:-215.48,-14.76,-0.01:99
-chr1 4515588 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=15;HaplotypeScore=4.97;MQ=51.27;MQ0=0;OQ=250.35;QD=4.47;SB=56.21 GT:AD:DP:GL:GQ 0/1:42,14:49:-43.09,-14.77,-129.95:99
-chr1 4515926 rs241260 C G 33.59 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=2.19;MQ=55.21;MQ0=0;OQ=3292.12;QD=42.21;SB=-1616.25 GT:AD:DP:GL:GQ 1/1:0,78:75:-328.21,-22.60,-0.02:99
-chr1 4515962 rs241261 T C 602.08 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.64;MQ0=0;OQ=2469.23;QD=29.75;SB=-1091.36 GT:AD:DP:GL:GQ 1/1:0,83:79:-250.58,-23.83,-0.08:99
-chr1 4516659 rs241262 T G 634.51 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2557.93;QD=35.53;SB=-1149.62 GT:AD:DP:GL:GQ 1/1:0,72:72:-259.40,-21.69,-0.02:99
-chr1 4517716 rs10799244 T C 405.95 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.15;MQ0=0;OQ=1346.22;QD=18.96;SB=-628.34 GT:AD:DP:GL:GQ 0/1:27,44:70:-158.99,-21.09,-107.87:99
-chr1 4518111 rs6685798 G A 309.27 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=59.32;MQ0=0;OQ=1238.56;QD=18.21;SB=-627.62 GT:AD:DP:GL:GQ 0/1:30,37:65:-146.72,-19.58,-98.24:99
-chr1 4518139 rs916408 T C 232.25 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.86;MQ=59.63;MQ0=0;OQ=609.90;QD=9.84;SB=-241.88 GT:AD:DP:GL:GQ 0/1:34,28:60:-82.36,-18.09,-138.61:99
-chr1 4518389 rs916407 C A 294.22 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=58.44;MQ0=0;OQ=593.42;QD=10.99;SB=-258.24 GT:AD:DP:GL:GQ 0/1:32,22:53:-78.59,-15.97,-110.59:99
-chr1 4518393 rs916406 T C 102.38 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.50;MQ0=0;OQ=426.60;QD=7.62;SB=-216.22 GT:AD:DP:GL:GQ 0/1:34,22:50:-61.02,-15.07,-122.30:99
-chr1 4518582 rs241263 T C 395.70 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2663.66;QD=36.49;SB=-1355.60 GT:AD:DP:GL:GQ 1/1:0,73:73:-269.97,-21.98,-0.02:99
-chr1 4518898 rs241264 C T 593.29 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=3315.63;QD=40.93;SB=-1267.69 GT:AD:DP:GL:GQ 1/1:0,81:81:-330.56,-24.40,-0.02:99
-chr1 4519253 rs241265 G T 396.78 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=442.53;QD=9.42;SB=-108.63 GT:AD:DP:GL:GQ 0/1:30,17:47:-61.69,-14.15,-109.08:99
-chr1 4520150 rs241266 G A 572.22 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1309.70;QD=16.79;SB=-634.24 GT:AD:DP:GL:GQ 0/1:38,40:77:-157.45,-23.20,-135.23:99
-chr1 4520783 rs10915560 T C 479.08 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=617.89;QD=10.13;SB=-279.12 GT:AD:DP:GL:GQ 0/1:36,25:60:-83.15,-18.08,-142.30:99
-chr1 4520856 rs12120353 C A 156.50 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=694.57;QD=12.19;SB=-303.22 GT:AD:DP:GL:GQ 0/1:32,25:54:-89.01,-16.27,-103.65:99
-chr1 4521323 rs241267 C T 378.46 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=59.60;MQ0=0;OQ=620.84;QD=13.21;SB=-243.25 GT:AD:DP:GL:GQ 0/1:25,22:45:-78.94,-13.58,-74.16:99
-chr1 4521646 rs12748186 C T 419.48 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=983.89;QD=18.92;SB=-364.52 GT:AD:DP:GL:GQ 0/1:23,29:52:-117.34,-15.67,-75.86:99
-chr1 4522500 rs241268 A G 490.54 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1548.29;QD=30.97;SB=-704.61 GT:AD:DP:GL:GQ 1/1:0,50:49:-158.46,-14.78,-0.04:99
-chr1 4523101 . G T 20.08 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=16;HaplotypeScore=10.17;MQ=50.32;MQ0=0;QD=0.35;SB=50.87 GT:AD:DP:GL:GQ 0/1:48,10:42:-17.95,-12.66,-121.78:52.87
-chr1 4523283 rs241269 C T 335.48 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=806.86;QD=12.81;SB=-308.31 GT:AD:DP:GL:GQ 0/1:36,27:61:-102.37,-18.40,-111.88:99
-chr1 4523749 rs55956326 C T 46.96 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=776.69;QD=17.65;SB=-140.14 GT:AD:DP:GL:GQ 0/1:21,23:44:-94.21,-13.26,-66.49:99
-chr1 4524365 rs497517 C A 203.92 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.25;MQ=57.23;MQ0=0;OQ=2311.84;QD=35.57;SB=-943.65 GT:AD:DP:GL:GQ 1/1:0,65:64:-234.79,-19.27,-0.02:99
-chr1 4524639 rs190250 T C 96.54 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=54.62;MQ0=1;OQ=1410.76;QD=28.22;SB=-520.24 GT:AD:DP:GL:GQ 1/1:1,49:43:-144.69,-12.96,-0.03:99
-chr1 4525049 rs241270 T A 128.22 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=57.31;MQ0=0;OQ=2756.56;QD=35.80;SB=-964.62 GT:AD:DP:GL:GQ 1/1:0,76:75:-279.26,-22.59,-0.02:99
-chr1 4525775 . C T 82.15 PASS AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=60.00;MQ0=0;OQ=631.76;QD=12.39;SB=-287.21 GT:AD:DP:GL:GQ 0/1:28,23:47:-80.62,-14.16,-88.43:99
-chr1 4526115 rs241271 T C 508.56 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1796.29;QD=29.45;SB=-877.68 GT:AD:DP:GL:GQ 1/1:0,61:57:-183.26,-17.19,-0.05:99
-chr1 4526127 rs241272 T G 620.21 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=2425.30;QD=34.16;SB=-1142.12 GT:AD:DP:GL:GQ 1/1:0,71:70:-246.14,-21.08,-0.02:99
-chr1 4526146 rs1515670 A G 180.27 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=3.98;MQ=58.96;MQ0=0;OQ=860.15;QD=12.84;SB=-436.91 GT:AD:DP:GL:GQ 0/1:37,30:66:-109.18,-19.88,-145.10:99
-chr1 4526937 rs241273 A C 421.62 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=1105.42;QD=16.02;SB=-515.69 GT:AD:DP:GL:GQ 0/1:31,38:69:-134.61,-20.78,-114.90:99
-chr1 4527342 rs241274 A C 51.54 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1996.50;QD=32.20;SB=-821.03 GT:AD:DP:GL:GQ 1/1:0,62:58:-203.26,-17.47,-0.02:99
-chr1 4527839 rs241275 A G 555.63 PASS AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=2594.28;QD=29.48;SB=-1228.48 GT:AD:DP:GL:GQ 1/1:0,88:82:-263.09,-24.73,-0.08:99
-chr1 4528191 rs28665533 G A 434.73 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1407.19;QD=19.02;SB=-661.67 GT:AD:DP:GL:GQ 0/1:32,42:74:-166.29,-22.29,-115.61:99
-chr1 4528559 rs241276 C T 153.75 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=4.22;MQ=59.30;MQ0=0;OQ=909.72;QD=13.78;SB=-324.82 GT:AD:DP:GL:GQ 0/1:37,29:65:-113.86,-19.61,-110.36:99
-chr1 4529046 rs241277 A C 117.60 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=2.18;MQ=60.00;MQ0=0;OQ=2433.72;QD=33.34;SB=-1159.13 GT:AD:DP:GL:GQ 1/1:0,73:69:-246.98,-20.78,-0.02:99
-chr1 4529268 rs241278 T C 273.02 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.43;MQ=59.61;MQ0=0;OQ=2074.79;QD=35.17;SB=-848.12 GT:AD:DP:GL:GQ 1/1:0,59:58:-211.08,-17.47,-0.02:99
-chr1 4530244 rs7531281 A C 607.97 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2071.97;QD=33.42;SB=-943.11 GT:AD:DP:GL:GQ 1/1:0,62:60:-210.80,-18.07,-0.02:99
-chr1 4530343 rs7526879 C T 127.03 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.29;MQ0=0;OQ=2841.32;QD=39.46;SB=-1410.68 GT:AD:DP:GL:GQ 1/1:0,72:71:-287.74,-21.39,-0.02:99
-chr1 4531126 rs241212 G T 328.23 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=59.37;MQ0=0;OQ=847.33;QD=14.36;SB=-341.38 GT:AD:DP:GL:GQ 0/1:30,29:58:-105.49,-17.47,-104.18:99
-chr1 4531264 rs55850443 C A 105.26 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=3.29;MQ=59.66;MQ0=0;OQ=907.20;QD=13.54;SB=-364.99 GT:AD:DP:GL:GQ 0/1:34,33:65:-113.58,-19.58,-115.11:99
-chr1 4532420 rs980092 A G 568.56 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.63;MQ0=0;OQ=2136.98;QD=31.43;SB=-1016.73 GT:AD:DP:GL:GQ 1/1:0,68:67:-217.34,-20.21,-0.06:99
-chr1 4532678 rs34339970 T C 238.67 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=59.68;MQ0=0;OQ=686.96;QD=9.41;SB=-234.24 GT:AD:DP:GL:GQ 0/1:42,31:70:-93.08,-21.10,-159.73:99
-chr1 4532688 rs171317 C A 295.77 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.69;MQ0=0;OQ=2546.98;QD=34.42;SB=-1274.23 GT:AD:DP:GL:GQ 1/1:0,74:71:-258.31,-21.38,-0.02:99
-chr1 4532830 rs35748829 C T 224.19 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.37;MQ0=0;OQ=1280.71;QD=19.40;SB=-516.15 GT:AD:DP:GL:GQ 0/1:29,37:64:-150.64,-19.29,-86.56:99
-chr1 4532839 rs35106071 C T 30.34 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=3;HaplotypeScore=0.47;MQ=59.31;MQ0=0;OQ=1092.68;QD=17.91;SB=-426.77 GT:AD:DP:GL:GQ 0/1:29,32:61:-130.92,-18.37,-105.58:99
-chr1 4533414 rs6673089 G A 59.57 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=5.78;MQ=59.66;MQ0=0;OQ=1175.25;QD=17.54;SB=-391.70 GT:AD:DP:GL:GQ 0/1:31,35:66:-140.69,-19.88,-114.80:99
-chr1 4533499 rs6426421 C T 279.59 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=56.21;MQ0=0;OQ=3052.51;QD=38.64;SB=-1294.73 GT:AD:DP:GL:GQ 1/1:0,79:78:-308.86,-23.50,-0.03:99
-chr1 4533545 rs7527742 G A 582.48 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.29;MQ0=0;OQ=1245.18;QD=15.19;SB=-388.08 GT:AD:DP:GL:GQ 0/1:45,37:81:-152.20,-24.40,-157.64:99
-chr1 4533745 rs241208 T C 151.85 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.23;MQ0=0;OQ=641.89;QD=11.07;SB=-289.57 GT:AD:DP:GL:GQ 0/1:35,23:57:-84.64,-17.17,-139.99:99
-chr1 4533782 rs17344823 A T 343.49 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=50.31;MQ0=0;OQ=1106.34;QD=17.56;SB=-567.72 GT:AD:DP:GL:GQ 0/1:26,37:60:-131.99,-18.07,-92.40:99
-chr1 4533944 rs241207 T G 366.15 PASS AC=2;AF=1.00;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.27;MQ0=0;OQ=1080.62;QD=29.21;SB=-322.00 GT:AD:DP:GL:GQ 1/1:0,37:32:-111.66,-9.64,-0.02:96.25
-chr1 4534250 rs11584033 T C 380.79 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=58.88;MQ0=0;OQ=947.57;QD=16.34;SB=-494.15 GT:AD:DP:GL:GQ 0/1:26,32:58:-115.51,-17.47,-106.56:99
-chr1 4534838 rs1541318 A G 459.08 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1096.76;QD=16.87;SB=-540.58 GT:AD:DP:GL:GQ 0/1:28,37:65:-132.54,-19.58,-112.37:99
-chr1 4535109 rs2411777 C T 151.18 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.69;MQ0=0;OQ=1491.80;QD=20.16;SB=-710.25 GT:AD:DP:GL:GQ 0/1:30,44:73:-174.45,-21.99,-106.04:99
-chr1 4536054 rs10799246 T A 279.36 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=56.28;MQ0=1;OQ=1123.37;QD=19.37;SB=-579.73 GT:AD:DP:GL:GQ 0/1:23,35:56:-132.49,-16.87,-78.58:99
-chr1 4536627 rs1157688 T C 729.05 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2286.18;QD=34.64;SB=-1059.42 GT:AD:DP:GL:GQ 1/1:1,65:64:-232.22,-19.28,-0.02:99
-chr1 4537253 rs12746043 A G 196.32 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.75;MQ=59.75;MQ0=0;OQ=742.34;QD=10.03;SB=-306.91 GT:AD:DP:GL:GQ 0/1:43,31:74:-99.82,-22.30,-175.74:99
-chr1 4537334 rs12073968 A T 357.38 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=1269.08;QD=15.67;SB=-567.67 GT:AD:DP:GL:GQ 0/1:40,41:80:-154.29,-24.09,-150.38:99
-chr1 4537921 rs12724503 G A 310.14 PASS AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=1.26;MQ=60.00;MQ0=0;OQ=1523.81;QD=15.09;SB=-617.07 GT:AD:DP:GL:GQ 0/1:55,46:100:-185.79,-30.12,-188.53:99
-chr1 4538097 rs4654561 G A 508.13 PASS AC=2;AF=1.00;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=3756.30;QD=39.96;SB=-1777.79 GT:AD:DP:GL:GQ 1/1:0,92:93:-374.63,-34.91,-7.66:99
-chr1 4538181 rs4654562 G A 215.56 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=59.13;MQ0=0;OQ=1260.80;QD=15.19;SB=-602.60 GT:AD:DP:GL:GQ 0/1:45,38:82:-154.08,-24.71,-143.05:99
-chr1 4538603 rs4654563 G A 371.27 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1202.15;QD=16.03;SB=-528.76 GT:AD:DP:GL:GQ 0/1:39,36:74:-145.80,-22.30,-125.85:99
-chr1 4538973 rs7543382 T C 333.40 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=59.17;MQ0=0;OQ=1070.40;QD=14.66;SB=-356.54 GT:AD:DP:GL:GQ 0/1:37,36:73:-132.31,-21.99,-147.75:99
-chr1 4539030 rs7540656 A G 325.75 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.39;MQ0=0;OQ=796.84;QD=11.72;SB=-299.04 GT:AD:DP:GL:GQ 0/1:36,32:68:-103.46,-20.49,-144.09:99
-chr1 4540675 rs1963269 C G 227.56 PASS AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.54;MQ0=0;OQ=1695.02;QD=16.62;SB=-763.36 GT:AD:DP:GL:GQ 0/1:55,47:97:-202.01,-29.22,-223.35:99
-chr1 4540762 rs1024139 T C 542 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.15;MQ0=0;OQ=842.09;QD=11.70;SB=-437.91 GT:AD:DP:GL:GQ 0/1:42,30:72:-109.18,-21.69,-170.21:99
-chr1 4541602 rs241225 G A 260.13 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.63;MQ0=0;OQ=2333.57;QD=37.04;SB=-1016.38 GT:AD:DP:GL:GQ 1/1:0,63:59:-236.96,-17.77,-0.01:99
-chr1 4541659 rs241224 G T 284.32 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.28;MQ0=0;OQ=2085.58;QD=35.96;SB=-859.24 GT:AD:DP:GL:GQ 1/1:0,58:57:-212.16,-17.17,-0.02:99
-chr1 4541986 rs61765446 G A 358.57 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=942.30;QD=14.28;SB=-483.10 GT:AD:DP:GL:GQ 0/1:37,29:65:-117.11,-19.59,-114.27:99
-chr1 4542017 rs241223 C T 513.72 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2827.32;QD=39.82;SB=-1402.70 GT:AD:DP:GL:GQ 1/1:0,71:71:-286.34,-21.39,-0.02:99
-chr1 4542337 rs184781 C T 269.78 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=2680.27;QD=40.00;SB=-1072.41 GT:AD:DP:GL:GQ 1/1:0,67:66:-271.63,-19.88,-0.01:99
-chr1 4542995 . A T 0.76 PASS AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=53.06;MQ0=0;OQ=196.97;QD=3.28;SB=-90.71 GT:AD:DP:GL:GQ 0/1:48,11:53:-38.95,-15.97,-156.27:99
-chr1 4543292 rs2078573 A C 86.48 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=6.05;MQ=56.75;MQ0=0;OQ=1341.41;QD=16.77;SB=-537.82 GT:AD:DP:GL:GQ 0/1:31,48:77:-160.62,-23.19,-115.03:99
-chr1 4543548 rs515279 T C 17.62 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.93;MQ=59.29;MQ0=0;OQ=1923.64;QD=29.59;SB=-45.69 GT:AD:DP:GL:GQ 1/1:0,65:64:-196.03,-19.32,-0.08:99
-chr1 4543717 rs587108 T G 137.04 PASS AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.89;MQ0=0;OQ=716.08;QD=34.10;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,21:21:-75.20,-6.33,-0.01:63.19
-chr1 4543945 rs588347 C T 45.56 PASS AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=256.94;QD=10.71;SB=-10.00 GT:AD:DP:GL:GQ 0/1:15,9:24:-36.21,-7.23,-52.03:99
-chr1 4544067 rs588861 G A 43.71 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=54.12;MQ0=0;OQ=1783.57;QD=37.95;SB=-560.73 GT:AD:DP:GL:GQ 1/1:0,47:45:-181.96,-13.56,-0.01:99
-chr1 4544173 rs488684 T A 310.68 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.99;MQ0=0;OQ=2644.21;QD=36.73;SB=-1277.61 GT:AD:DP:GL:GQ 1/1:0,72:70:-268.02,-21.08,-0.01:99
-chr1 4545564 rs616180 T G 115.98 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.33;MQ=58.74;MQ0=0;OQ=2469.47;QD=35.28;SB=-1055.12 GT:AD:DP:GL:GQ 1/1:0,70:69:-250.55,-20.78,-0.02:99
-chr1 4545738 rs617046 T C 49.62 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=60.00;MQ0=0;OQ=1303.79;QD=31.80;SB=-288.55 GT:AD:DP:GL:GQ 1/1:0,41:40:-133.99,-12.05,-0.02:99
-chr1 4545788 rs57374319 C T 229.72 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=594.52;QD=13.51;SB=-275.28 GT:AD:DP:GL:GQ 0/1:24,20:43:-75.69,-12.95,-87.49:99
-chr1 4545807 rs563158 G C 408.48 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2250.93;QD=42.47;SB=-845.32 GT:AD:DP:GL:GQ 1/1:0,53:52:-228.70,-15.67,-0.02:99
-chr1 4545915 rs617610 A G 103.88 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=58.73;MQ0=0;OQ=1514.17;QD=27.53;SB=-766.72 GT:AD:DP:GL:GQ 1/1:0,55:49:-155.05,-14.78,-0.05:99
-chr1 4545933 rs561468 C A 155.56 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.22;MQ0=0;OQ=1902.16;QD=32.24;SB=-898.65 GT:AD:DP:GL:GQ 1/1:0,59:54:-193.82,-16.27,-0.02:99
-chr1 4546125 rs538655 G A 601.67 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.21;MQ0=0;OQ=2022.14;QD=38.15;SB=-935.74 GT:AD:DP:GL:GQ 1/1:0,53:52:-205.82,-15.67,-0.02:99
-chr1 4546239 rs619364 G A 445.90 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=837.24;QD=13.95;SB=-392.12 GT:AD:DP:GL:GQ 0/1:34,26:60:-105.08,-18.07,-121.77:99
-chr1 4546345 rs536749 A G 482 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=1853.11;QD=30.38;SB=-858.57 GT:AD:DP:GL:GQ 1/1:0,61:58:-188.95,-17.49,-0.05:99
-chr1 4546432 rs4654446 C T 238.01 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=2.88;MQ=59.28;MQ0=0;OQ=947.38;QD=16.33;SB=-474.49 GT:AD:DP:GL:GQ 0/1:28,30:56:-114.89,-16.87,-97.02:99
-chr1 4546657 rs562787 A G 229.14 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=1701.20;QD=30.38;SB=-810.66 GT:AD:DP:GL:GQ 1/1:0,56:54:-173.76,-16.29,-0.05:99
-chr1 4546823 rs532259 C T 169.24 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.40;MQ0=0;OQ=2521.38;QD=40.67;SB=-1140.51 GT:AD:DP:GL:GQ 1/1:0,62:62:-255.74,-18.67,-0.01:99
-chr1 4547018 rs559200 G C 1813.47 Indel AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.18;MQ0=0;QD=40.30;SB=-734.75 GT:AD:DP:GL:GQ 1/1:0,44:43:-184.95,-12.96,-0.01:99
-chr1 4547035 rs6691728 C T 1783.47 Indel AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=57.64;MQ0=0;QD=39.63;SB=-856.02 GT:AD:DP:GL:GQ 1/1:0,45:45:-181.94,-13.55,-0.01:99
-chr1 4547069 rs558411 G C 0.77 PASS AC=2;AF=1.00;AN=2;DB;DP=39;Dels=0.00;HRun=4;HaplotypeScore=0.63;MQ=58.20;MQ0=0;OQ=1617.71;QD=41.48;SB=-687.82 GT:AD:DP:GL:GQ 1/1:0,39:38:-165.37,-11.45,-0.01:99
-chr1 4547307 rs634075 C T 118.64 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=59.44;MQ0=0;OQ=1786.25;QD=34.35;SB=-705.43 GT:AD:DP:GL:GQ 1/1:0,51:47:-182.23,-14.17,-0.02:99
-chr1 4547329 rs644647 C A 608.94 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.55;MQ0=0;OQ=1779.42;QD=34.89;SB=-902.65 GT:AD:DP:GL:GQ 1/1:0,51:50:-181.54,-15.06,-0.02:99
-chr1 4547506 rs2674014 C T 604.69 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=3048.33;QD=39.08;SB=-1465.48 GT:AD:DP:GL:GQ 1/1:0,78:77:-308.44,-23.20,-0.02:99
-chr1 4548034 rs669252 A G 36.37 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=59.78;MQ0=0;OQ=2568.64;QD=30.58;SB=-1254.84 GT:AD:DP:GL:GQ 1/1:0,84:80:-260.52,-24.13,-0.08:99
-chr1 4548229 rs527146 C T 195.56 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.54;MQ0=0;OQ=2361.57;QD=37.49;SB=-975.04 GT:AD:DP:GL:GQ 1/1:2,61:63:-246.39,-18.98,-6.65:99
-chr1 4548230 rs553803 A G 202.91 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.54;MQ0=0;OQ=2093.62;QD=33.23;SB=-906.61 GT:AD:DP:GL:GQ 1/1:2,61:63:-221.00,-18.97,-8.05:99
-chr1 4548433 rs504274 C T 6.37 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=4;HaplotypeScore=2.30;MQ=59.56;MQ0=0;OQ=3385.81;QD=39.83;SB=-1431.01 GT:AD:DP:GL:GQ 1/1:0,85:84:-337.58,-25.30,-0.02:99
-chr1 4548537 rs916404 A G 176.85 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.01;MQ=59.60;MQ0=0;OQ=1563.60;QD=27.43;SB=-730.94 GT:AD:DP:GL:GQ 1/1:0,57:51:-160.00,-15.38,-0.05:99
-chr1 4548552 rs1811133 G A 623.08 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=2054.70;QD=38.77;SB=-776.53 GT:AD:DP:GL:GQ 1/1:0,53:52:-209.07,-15.66,-0.01:99
-chr1 4548640 rs10915566 C T 338.58 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=59.67;MQ0=0;OQ=1058.12;QD=15.12;SB=-552.39 GT:AD:DP:GL:GQ 0/1:37,33:67:-129.29,-20.20,-113.66:99
-chr1 4548685 rs2176113 C T 467.66 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1206.49;QD=16.76;SB=-424.43 GT:AD:DP:GL:GQ 0/1:37,35:72:-145.62,-21.68,-138.53:99
-chr1 4548689 rs549918 C T 547.08 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2745.70;QD=39.22;SB=-872.18 GT:AD:DP:GL:GQ 1/1:0,70:69:-278.17,-20.79,-0.02:99
-chr1 4548722 rs549150 C T 597.32 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=3119.07;QD=40.51;SB=-1266.19 GT:AD:DP:GL:GQ 1/1:0,77:77:-315.51,-23.19,-0.01:99
-chr1 4548785 rs548958 A C 587.96 PASS AC=2;AF=1.00;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.52;MQ0=0;OQ=3225.28;QD=33.25;SB=-1553.11 GT:AD:DP:GL:GQ 1/1:0,97:93:-326.16,-28.01,-0.03:99
-chr1 4548901 rs683704 G A 493.67 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2363.22;QD=39.39;SB=-1015.37 GT:AD:DP:GL:GQ 1/1:0,60:60:-239.92,-18.08,-0.02:99
-chr1 4549335 rs572875 G A 610.19 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.57;MQ0=0;OQ=2583.49;QD=39.75;SB=-1223.62 GT:AD:DP:GL:GQ 1/1:0,65:64:-261.95,-19.28,-0.01:99
-chr1 4549598 rs520532 C T 634.82 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=1;OQ=2560.49;QD=37.65;SB=-1198.62 GT:AD:DP:GL:GQ 1/1:0,68:66:-259.66,-19.89,-0.02:99
-chr1 4550061 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=20;HaplotypeScore=23.52;MQ=43.78;MQ0=0;OQ=658.49;QD=6.86;SB=83.26 GT:AD:DP:GL:GQ 0/1:53,43:71:-90.53,-21.40,-163.68:99
-chr1 4550163 rs189538 T C 1.23 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=2;HaplotypeScore=4.99;MQ=53.64;MQ0=0;OQ=1059.98;QD=26.50;SB=-540.85 GT:AD:DP:GL:GQ 1/1:0,40:35:-109.62,-10.56,-0.04:99
-chr1 4550501 rs10915567 A T 204.42 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=58.86;MQ0=0;OQ=971.67;QD=17.35;SB=-337.66 GT:AD:DP:GL:GQ 0/1:25,31:54:-116.71,-16.26,-86.04:99
-chr1 4550640 rs241213 G A 356.42 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2857.67;QD=40.25;SB=-1367.83 GT:AD:DP:GL:GQ 1/1:0,71:71:-289.37,-21.39,-0.02:99
-chr1 4550851 rs164775 A G 34.10 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=5.34;MQ=59.24;MQ0=0;OQ=775.11;QD=14.09;SB=-373.36 GT:AD:DP:GL:GQ 0/1:28,27:55:-97.36,-16.57,-110.68:99
-chr1 4551064 rs12079284 G A 324.95 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=59.55;MQ0=0;OQ=1490.67;QD=17.96;SB=-575.98 GT:AD:DP:GL:GQ 0/1:39,44:83:-177.35,-25.00,-139.24:99
-chr1 4551090 rs164774 A C 75.23 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=59.47;MQ0=0;OQ=2365.79;QD=33.80;SB=-1092.51 GT:AD:DP:GL:GQ 1/1:0,70:67:-240.18,-20.18,-0.02:99
-chr1 4551865 rs10489134 G C 328.76 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=59.44;MQ0=0;OQ=1198.12;QD=16.19;SB=-348.77 GT:AD:DP:GL:GQ 0/1:36,38:72:-144.81,-21.71,-156.52:99
-chr1 4552887 rs7554766 G A 776.54 Indel AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.13;MQ0=0;QD=12.13;SB=-327.33 GT:AD:DP:GL:GQ 0/1:39,25:57:-98.11,-17.17,-116.23:99
-chr1 4552953 rs7518655 C T 177.07 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=2.86;MQ=58.99;MQ0=0;OQ=677.30;QD=14.72;SB=-320.35 GT:AD:DP:GL:GQ 0/1:23,23:43:-83.97,-12.96,-72.15:99
-chr1 4553124 rs7518781 C A 341.53 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.10;MQ=59.31;MQ0=0;OQ=849.36;QD=13.92;SB=-331.16 GT:AD:DP:GL:GQ 0/1:30,31:56:-105.09,-16.87,-90.31:99
-chr1 4553830 rs164770 A G 0.31 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=3;HaplotypeScore=7.02;MQ=59.30;MQ0=0;OQ=1972.78;QD=32.88;SB=-746.94 GT:AD:DP:GL:GQ 1/1:2,57:55:-200.88,-16.57,-0.02:99
-chr1 4554084 rs61767667 T A 362.66 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=502.84;QD=10.48;SB=-173.16 GT:AD:DP:GL:GQ 0/1:30,18:48:-68.02,-14.46,-113.49:99
-chr1 4554189 rs61767668 G A 492.83 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=958.92;QD=14.31;SB=-387.15 GT:AD:DP:GL:GQ 0/1:38,29:66:-119.06,-19.89,-123.05:99
-chr1 4555833 rs540572 C A 391.14 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=602.48;QD=12.30;SB=-99.63 GT:AD:DP:GL:GQ 0/1:24,25:46:-77.39,-13.85,-83.99:99
-chr1 4556007 rs6426423 C A 388.51 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=59.29;MQ0=0;OQ=809.24;QD=15.27;SB=-378.16 GT:AD:DP:GL:GQ 0/1:24,29:51:-99.57,-15.36,-78.05:99
-chr1 4556396 rs531363 C T 270.22 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=785.64;QD=14.03;SB=-358.40 GT:AD:DP:GL:GQ 0/1:30,26:54:-98.13,-16.29,-91.52:99
-chr1 4556558 rs129794 G A 506.73 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=510.17;QD=11.09;SB=-262.22 GT:AD:DP:GL:GQ 0/1:29,17:46:-68.16,-13.86,-103.52:99
-chr1 4556721 rs10799248 G A 151.65 PASS AC=1;AF=0.50;AN=2;DB;DP=32;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=483.34;QD=15.10;SB=-178.66 GT:AD:DP:GL:GQ 0/1:17,15:30:-60.66,-9.04,-48.95:99
-chr1 4556909 rs526695 T C 306.82 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=58.98;MQ0=0;OQ=2857.53;QD=34.85;SB=-1208.70 GT:AD:DP:GL:GQ 1/1:0,82:80:-289.36,-24.10,-0.02:99
-chr1 4556982 rs516947 G A 448.32 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=2681.00;QD=38.86;SB=-634.83 GT:AD:DP:GL:GQ 1/1:0,69:67:-271.71,-20.19,-0.02:99
-chr1 4556992 rs516977 A G 448.48 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.27;MQ0=0;OQ=1828.72;QD=29.03;SB=-545.85 GT:AD:DP:GL:GQ 1/1:0,63:60:-186.53,-18.11,-0.07:99
-chr1 4557030 rs517092 A C 349.51 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=1428.85;QD=26.46;SB=-498.86 GT:AD:DP:GL:GQ 1/1:0,54:46:-146.51,-13.87,-0.04:99
-chr1 4557056 rs524982 C T 158.92 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.64;MQ0=0;OQ=2000.95;QD=38.48;SB=-916.28 GT:AD:DP:GL:GQ 1/1:0,52:51:-203.70,-15.37,-0.02:99
-chr1 4557155 rs651695 A T 85.58 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=3;HaplotypeScore=2.39;MQ=59.42;MQ0=0;OQ=1262.50;QD=15.98;SB=-615.05 GT:AD:DP:GL:GQ 0/1:40,39:78:-153.02,-23.49,-149.00:99
-chr1 4557694 rs653988 C T 110.63 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.82;MQ0=0;OQ=2793.65;QD=39.91;SB=-1109.49 GT:AD:DP:GL:GQ 1/1:0,70:70:-282.97,-21.09,-0.02:99
-chr1 4558171 rs549239 T C 727.04 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.17;MQ0=0;OQ=2944.97;QD=35.06;SB=-1221.82 GT:AD:DP:GL:GQ 1/1:0,84:83:-298.11,-25.00,-0.03:99
-chr1 4558199 rs12726702 T A 2233 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=6;HaplotypeScore=61.64;MQ=53.38;MQ0=0;QD=26.58;SB=-718.98 GT:AD:DP:GL:GQ 0/1:14,70:81:-250.99,-24.40,-50.82:99
-chr1 4558206 rs549087 T A 2870.37 Indel;SnpCluster AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.01;HRun=6;HaplotypeScore=46.58;MQ=52.93;MQ0=0;QD=35.88;SB=-1138.04 GT:AD:DP:GL:GQ 1/1:0,79:79:-290.65,-23.50,-0.03:99
-chr1 4558209 rs28687799 A T 819.27 Indel;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=4;HaplotypeScore=29.81;MQ=52.84;MQ0=0;QD=10.37;SB=-175.59 GT:AD:DP:GL:GQ 0/1:49,30:77:-108.41,-23.20,-171.08:99
-chr1 4558214 rs59930628 A T 84.16 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.03;HRun=4;HaplotypeScore=38.67;MQ=53.63;MQ0=0;QD=1.09;SB=56.66 GT:AD:DP:GL:GQ 0/1:66,9:73:-33.09,-21.39,-235.05:99
-chr1 4558250 rs666799 A C 496.03 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.14;MQ0=0;OQ=2047.56;QD=34.70;SB=-847.08 GT:AD:DP:GL:GQ 1/1:0,59:58:-208.36,-17.47,-0.02:99
-chr1 4558398 rs12567277 C T 337.11 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.53;MQ0=0;OQ=912.06;QD=18.61;SB=-436.84 GT:AD:DP:GL:GQ 0/1:22,27:48:-108.95,-14.46,-68.62:99
-chr1 4558676 rs553691 C T 200.13 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.21;MQ0=0;OQ=1974.68;QD=37.26;SB=-1009.66 GT:AD:DP:GL:GQ 1/1:0,53:52:-201.08,-15.67,-0.02:99
-chr1 4560412 rs589176 A G 118.19 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=1;HaplotypeScore=2.29;MQ=58.87;MQ0=0;OQ=545.72;QD=13.31;SB=-145.53 GT:AD:DP:GL:GQ 0/1:20,21:40:-69.91,-12.06,-74.33:99
-chr1 4561004 rs602244 T C 195.92 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=2.83;MQ=59.64;MQ0=0;OQ=1077.64;QD=16.84;SB=-452.16 GT:AD:DP:GL:GQ 0/1:26,38:63:-130.03,-18.98,-104.11:99
-chr1 4561499 rs604465 G A 250.02 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=59.13;MQ0=0;OQ=735.55;QD=15.32;SB=-280.30 GT:AD:DP:GL:GQ 0/1:25,23:45:-90.40,-13.56,-80.37:99
-chr1 4561737 rs563481 C T 22.90 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=3;HaplotypeScore=0.93;MQ=60.00;MQ0=0;OQ=747.56;QD=17.80;SB=-287.30 GT:AD:DP:GL:GQ 0/1:20,22:42:-90.69,-12.65,-73.13:99
-chr1 4562268 rs537761 C A 317.78 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=820.87;QD=16.75;SB=-394.13 GT:AD:DP:GL:GQ 0/1:21,28:48:-99.83,-14.46,-74.67:99
-chr1 4562392 rs618751 G A 349.01 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=60.00;MQ0=0;OQ=1032.44;QD=14.14;SB=-366.34 GT:AD:DP:GL:GQ 0/1:41,32:73:-128.52,-21.99,-148.49:99
-chr1 4562641 rs534159 C T 355.83 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=808.69;QD=13.71;SB=-376.39 GT:AD:DP:GL:GQ 0/1:33,26:58:-101.65,-17.50,-100.37:99
-chr1 4565129 rs241243 A G 370.62 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=694.01;QD=8.07;SB=-138.39 GT:AD:DP:GL:GQ 0/1:53,33:82:-97.39,-24.71,-212.58:99
-chr1 4565904 rs10915569 C A 242.27 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.39;MQ0=0;OQ=1490.43;QD=19.61;SB=-754.94 GT:AD:DP:GL:GQ 0/1:27,49:74:-174.61,-22.29,-94.95:99
-chr1 4566354 rs164780 C G 240.11 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=59.64;MQ0=0;OQ=2456.30;QD=38.38;SB=-1204.26 GT:AD:DP:GL:GQ 1/1:0,64:63:-249.27,-19.01,-0.05:99
-chr1 4566679 rs151716 A G 365.52 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=59.43;MQ0=0;OQ=771.72;QD=11.87;SB=-373.98 GT:AD:DP:GL:GQ 0/1:33,32:64:-99.75,-19.29,-131.65:99
-chr1 4567238 rs4654450 G A 244.97 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=59.42;MQ0=0;OQ=1219.09;QD=16.93;SB=-598.62 GT:AD:DP:GL:GQ 0/1:35,37:71:-146.59,-21.39,-121.89:99
-chr1 4567954 rs151715 A G 136 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.44;MQ0=0;OQ=821.52;QD=10.95;SB=-417.84 GT:AD:DP:GL:GQ 0/1:41,34:74:-107.74,-22.30,-168.10:99
-chr1 4568017 rs241242 G T 115.78 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.56;MQ=60.00;MQ0=0;OQ=1682.11;QD=33.64;SB=-638.02 GT:AD:DP:GL:GQ 1/1:0,49:48:-171.82,-14.46,-0.02:99
-chr1 4568283 rs11590266 A G 358.35 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=59.56;MQ0=0;OQ=565.36;QD=10.87;SB=-241.59 GT:AD:DP:GL:GQ 0/1:27,24:51:-77.60,-17.78,-112.88:99
-chr1 4571271 rs164779 C G 314.41 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.44;MQ0=0;OQ=1283.51;QD=17.11;SB=-664.28 GT:AD:DP:GL:GQ 0/1:38,37:72:-153.33,-21.69,-161.13:99
-chr1 4571572 . C T 90.66 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.84;MQ=59.56;MQ0=0;OQ=626.01;QD=12.04;SB=-331.33 GT:AD:DP:GL:GQ 0/1:32,20:47:-80.06,-14.17,-86.19:99
-chr1 4572354 rs164778 T C 225.65 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1559.84;QD=35.45;SB=-660.32 GT:AD:DP:GL:GQ 1/1:0,44:44:-159.58,-13.25,-0.01:99
-chr1 4572615 rs6703429 T C 577.31 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=862.43;QD=13.07;SB=-402.26 GT:AD:DP:GL:GQ 0/1:35,31:65:-109.11,-19.58,-142.67:99
-chr1 4574299 . C A 554.66 Indel AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.59;MQ0=0;QD=10.47;SB=-260.28 GT:AD:DP:GL:GQ 0/1:31,22:48:-73.21,-14.46,-96.27:99
-chr1 4576029 rs164776 C T 259.84 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.56;MQ0=0;OQ=893.05;QD=17.17;SB=-421.82 GT:AD:DP:GL:GQ 0/1:24,28:50:-107.66,-15.07,-72.44:99
-chr1 4576797 rs2411886 G C 186.46 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=59.03;MQ0=0;OQ=1978.62;QD=41.22;SB=-1006.27 GT:AD:DP:GL:GQ 1/1:0,47:46:-201.46,-13.86,-0.01:99
-chr1 4576947 rs2411887 C T 275.87 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=58.35;MQ0=0;OQ=1931.75;QD=37.88;SB=-945.28 GT:AD:DP:GL:GQ 1/1:0,51:50:-196.78,-15.07,-0.02:99
-chr1 4577395 rs4403602 C G 245.41 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=59.46;MQ0=0;OQ=1536.03;QD=35.72;SB=-775.22 GT:AD:DP:GL:GQ 1/1:0,43:41:-157.23,-12.38,-0.05:99
-chr1 4577589 rs7554628 T C 1.90 PASS AC=2;AF=1.00;AN=2;DB;DP=32;Dels=0.00;HRun=1;HaplotypeScore=1.47;MQ=57.95;MQ0=0;OQ=730.12;QD=22.82;SB=-185.76 GT:AD:DP:GL:GQ 1/1:0,31:25:-79.87,-10.17,-3.27:69.05
-chr1 4577983 rs7555011 T C 161.26 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.31;MQ=59.09;MQ0=0;OQ=1457.56;QD=28.58;SB=-435.18 GT:AD:DP:GL:GQ 1/1:0,51:47:-149.39,-14.18,-0.05:99
-chr1 4578231 rs35259920 T A 832.15 Indel AC=2;AF=1.00;AN=2;DB;DP=29;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.20;MQ0=0;QD=28.69;SB=-10.00 GT:AD:DP:GL:GQ 1/1:1,28:26:-86.82,-7.84,-0.02:78.19
-chr1 4578361 rs7554792 A C 303.82 PASS AC=2;AF=1.00;AN=2;DB;DP=9;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.92;MQ0=0;OQ=236.46;QD=26.27;SB=-138.00 GT:AD:DP:GL:GQ 1/1:0,9:8:-27.23,-2.41,-0.00:24.06
-chr1 4578400 . A T 84.19 Indel AC=1;AF=0.50;AN=2;DP=14;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=46.65;MQ0=0;QD=6.01;SB=-42.96 GT:AD:DP:GL:GQ 0/1:10,4:13:-15.62,-3.92,-34.97:99
-chr1 4579811 rs1905304 C A 19.42 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=5;HaplotypeScore=0.00;MQ=58.10;MQ0=0;OQ=2321.72;QD=36.28;SB=-1110.43 GT:AD:DP:GL:GQ 1/1:0,64:63:-235.77,-18.97,-0.01:99
-chr1 4580559 rs56945522 G A 92.56 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=61.48;MQ0=0;OQ=2293.20;QD=38.87;SB=-907.71 GT:AD:DP:GL:GQ 1/1:0,59:58:-232.92,-17.48,-0.02:99
-chr1 4581964 rs6668002 T C 241.68 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=2274.26;QD=30.73;SB=-1092.12 GT:AD:DP:GL:GQ 1/1:0,73:71:-231.07,-21.41,-0.06:99
-chr1 4583570 rs1573748 A G 1957.91 Indel AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.66;MQ=60.10;MQ0=0;QD=31.08;SB=-816.28 GT:AD:DP:GL:GQ 1/1:0,63:58:-199.41,-17.48,-0.04:99
-chr1 4584109 rs6657421 G A 130.49 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.13;MQ0=0;OQ=1834.09;QD=38.21;SB=-703.35 GT:AD:DP:GL:GQ 1/1:0,48:47:-187.01,-14.16,-0.01:99
-chr1 4584165 rs6674936 T C 66.31 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.13;MQ=59.25;MQ0=0;OQ=1819.57;QD=32.49;SB=-925.04 GT:AD:DP:GL:GQ 1/1:0,56:51:-185.56,-15.36,-0.01:99
-chr1 4585082 rs1107467 G A 137.40 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=60.00;MQ0=0;OQ=1423.05;QD=35.58;SB=-452.60 GT:AD:DP:GL:GQ 1/1:0,39:38:-145.91,-11.45,-0.02:99
-chr1 4585332 rs1483199 A G 386.56 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2234.69;QD=31.04;SB=-675.88 GT:AD:DP:GL:GQ 1/1:0,72:67:-227.10,-20.19,-0.04:99
-chr1 4585508 rs875808 G A 162.26 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.39;MQ=60.00;MQ0=0;OQ=2216.84;QD=38.89;SB=-1106.64 GT:AD:DP:GL:GQ 1/1:0,57:57:-225.29,-17.17,-0.02:99
-chr1 4585532 rs875807 A G 300.51 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.66;MQ0=0;OQ=1870.43;QD=34.01;SB=-960.39 GT:AD:DP:GL:GQ 1/1:0,55:53:-190.65,-15.97,-0.02:99
-chr1 4585731 rs875806 G C 165.71 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2133.21;QD=42.66;SB=-847.32 GT:AD:DP:GL:GQ 1/1:0,50:49:-216.92,-14.76,-0.01:99
-chr1 4586501 rs56028718 G A 84.95 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=3.12;MQ=59.59;MQ0=0;OQ=1260.05;QD=18.53;SB=-634.67 GT:AD:DP:GL:GQ 0/1:31,37:66:-149.17,-19.88,-106.57:99
-chr1 4587142 rs2269620 C T 114.33 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.59;MQ0=0;OQ=2196.52;QD=39.22;SB=-630.34 GT:AD:DP:GL:GQ 1/1:0,56:56:-223.26,-16.87,-0.02:99
-chr1 4587674 rs4654576 A C 214.87 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=886.13;QD=32.82;SB=-420.04 GT:AD:DP:GL:GQ 1/1:0,27:26:-92.21,-7.83,-0.01:78.22
-chr1 4587807 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=2;HaplotypeScore=15.00;MQ=58.93;MQ0=0;OQ=113.78;QD=1.87;SB=74.25 GT:AD:DP:GL:GQ 0/1:34,27:42:-27.32,-12.66,-112.79:99
-chr1 4587893 rs6662425 C G 115.34 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.27;MQ=59.36;MQ0=0;OQ=2651.42;QD=40.79;SB=-1007.19 GT:AD:DP:GL:GQ 1/1:0,65:61:-268.75,-18.38,-0.02:99
-chr1 4588021 rs6426430 G T 639.03 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1436.10;QD=35.90;SB=-672.10 GT:AD:DP:GL:GQ 1/1:0,40:40:-147.21,-12.05,-0.01:99
-chr1 4590753 rs7527078 C T 465.85 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.20;MQ0=0;OQ=2043.97;QD=40.08;SB=-576.76 GT:AD:DP:GL:GQ 1/1:0,51:50:-207.99,-15.06,-0.01:99
-chr1 4591042 rs4654577 A G 251.52 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=58.37;MQ0=0;OQ=1466.76;QD=34.11;SB=-679.59 GT:AD:DP:GL:GQ 1/1:0,43:43:-150.28,-12.96,-0.02:99
-chr1 4592515 . G C 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.74;MQ=48.08;MQ0=6;OQ=54.55;QD=1.03;SB=38.38 GT:AD:DP:GL:GQ 0/1:45,8:39:-20.50,-11.76,-139.98:87.39
-chr1 4592571 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=14.42;MQ=41.26;MQ0=11;OQ=65.05;QD=1.07;SB=-23.62 GT:AD:DP:GL:GQ 0/1:49,12:36:-20.65,-10.86,-123.87:97.89
-chr1 4592585 . G C 20.06 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.14;MQ=40.25;MQ0=10;QD=0.33;SB=-5.33 GT:AD:DP:GL:GQ 0/1:54,7:37:-16.45,-11.17,-134.84:52.86
-chr1 4592620 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=1;HaplotypeScore=15.36;MQ=35.46;MQ0=10;OQ=92.00;QD=1.46;SB=0.26 GT:AD:DP:GL:GQ 0/1:54,9:42:-25.15,-12.66,-150.31:99
-chr1 4592627 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=16.06;MQ=35.72;MQ0=7;OQ=153.87;QD=2.75;SB=-54.16 GT:AD:DP:GL:GQ 0/1:46,10:37:-29.82,-11.15,-128.78:99
-chr1 4592634 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=17.36;MQ=35.58;MQ0=7;OQ=255.85;QD=4.57;SB=-124.48 GT:AD:DP:GL:GQ 0/1:41,15:33:-38.82,-9.95,-100.95:99
-chr1 4592642 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=1;HaplotypeScore=28.60;MQ=35.10;MQ0=5;OQ=106.45;QD=2.01;SB=3.57 GT:AD:DP:GL:GQ 0/1:41,12:38:-25.38,-11.45,-106.45:99
-chr1 4592649 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=27.47;MQ=35.61;MQ0=5;OQ=241.86;QD=4.65;SB=-127.53 GT:AD:DP:GL:GQ 0/1:36,16:37:-38.62,-11.15,-91.45:99
-chr1 4592656 . C A 10.05 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=32.68;MQ=34.61;MQ0=6;QD=0.18;SB=-22.79 GT:AD:DP:GL:GQ 0/1:46,10:31:-13.58,-9.34,-92.74:42.43
-chr1 4592670 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=26.44;MQ=31.55;MQ0=8;OQ=92.67;QD=1.54;SB=-36.78 GT:AD:DP:GL:GQ 0/1:47,13:38:-24.00,-11.45,-105.70:99
-chr1 4592691 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=0;HaplotypeScore=17.99;MQ=28.93;MQ0=15;OQ=182.04;QD=2.64;SB=-62.36 GT:AD:DP:GL:GQ 0/1:58,11:38:-32.95,-11.46,-95.16:99
-chr1 4592711 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=51;Dels=0.00;HRun=1;HaplotypeScore=17.40;MQ=30.26;MQ0=13;OQ=418.56;QD=8.21;SB=-184.24 GT:AD:DP:GL:GQ 0/1:21,29:22:-51.78,-6.64,-35.47:99
-chr1 4592725 rs7533445 C G 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=21.58;MQ=31.66;MQ0=7;OQ=325.36;QD=9.30;SB=-162.82 GT:AD:DP:GL:GQ 0/1:18,17:13:-39.75,-3.93,-11.50:75.69
-chr1 4592733 . C A 17.31 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=31;Dels=0.00;HRun=0;HaplotypeScore=13.87;MQ=30.28;MQ0=8;QD=0.56;SB=5.02 GT:AD:DP:GL:GQ 0/1:27,3:12:-8.63,-3.62,-27.94:50.06
-chr1 4592740 rs7537972 A C 0.16 PASS AC=1;AF=0.50;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=10.05;MQ=27.67;MQ0=11;OQ=104.80;QD=3.38;SB=-67.99 GT:AD:DP:GL:GQ 0/1:22,9:8:-16.18,-2.41,-9.32:69.09
-chr1 4592747 rs7537975 A C 18.33 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DB;DP=24;Dels=0.00;HRun=1;HaplotypeScore=8.21;MQ=28.35;MQ0=11;QD=0.76;SB=-7.00 GT:AD:DP:GL:GQ 0/1:17,7:4:-6.32,-1.21,-6.24:50.29
-chr1 4592767 rs7533530 C G 42.27 HARD_TO_VALIDATE;LowQual AC=2;AF=1.00;AN=2;DB;DP=14;Dels=0.00;HRun=1;HaplotypeScore=11.04;MQ=30.06;MQ0=7;QD=3.02;SB=-43.89 GT:AD:DP:GL:GQ 1/1:8,5:2:-7.64,-0.61,-0.00:6.02
-chr1 4592837 . C G 13.29 LowQual AC=1;AF=0.50;AN=2;DP=5;Dels=0.00;HRun=1;HaplotypeScore=4.96;MQ=12.04;MQ0=3;QD=2.66;SB=-10.00 GT:AD:DP:GL:GQ 0/1:4,1:1:-4.59,-0.30,-0.00:1.76
-chr1 4592901 . T C 5.07 PASS AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=42.32;MQ0=2;OQ=126.93;QD=6.35;SB=-77.93 GT:AD:DP:GL:GQ 0/1:9,11:15:-20.50,-4.52,-36.40:99
-chr1 4592906 . T C 0.11 PASS AC=2;AF=1.00;AN=2;DP=23;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=41.84;MQ0=3;OQ=578.85;QD=25.17;SB=-157.83 GT:AD:DP:GL:GQ 1/1:0,23:17:-61.47,-5.12,-0.00:51.15
-chr1 4592960 . G C 0.12 PASS AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=4.10;MQ=41.92;MQ0=6;OQ=217.66;QD=2.79;SB=-81.57 GT:AD:DP:GL:GQ 0/1:56,22:47:-39.23,-14.18,-153.65:99
-chr1 4592971 . T C 18.17 PASS AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=3.38;MQ=41.63;MQ0=7;OQ=666.60;QD=8.55;SB=-228.49 GT:AD:DP:GL:GQ 0/1:28,48:45:-83.52,-13.57,-69.37:99
-chr1 4592996 . A C 48.48 HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=4.82;MQ=40.87;MQ0=9;QD=0.70;SB=-26.49 GT:AD:DP:GL:GQ 0/1:54,15:47:-22.29,-14.16,-139.10:81.32
-chr1 4593024 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=14.22;MQ=41.13;MQ0=10;OQ=73.34;QD=1.41;SB=-39.79 GT:AD:DP:GL:GQ 0/1:35,17:30:-19.66,-9.04,-83.95:99
-chr1 4593037 . G C 11.64 DPFilter;HARD_TO_VALIDATE;LowQual AC=1;AF=0.50;AN=2;DP=41;Dels=0.02;HRun=0;HaplotypeScore=21.01;MQ=42.10;MQ0=8;QD=0.28;SB=26.12 GT:AD:DP:GL:GQ 0/1:33,7:20:-10.45,-6.03,-72.33:44.16
-chr1 4593066 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=43;Dels=0.00;HRun=0;HaplotypeScore=16.64;MQ=38.83;MQ0=9;OQ=95.97;QD=2.23;SB=-64.04 GT:AD:DP:GL:GQ 0/1:31,12:22:-19.51,-6.63,-53.44:99
-chr1 4593072 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=12.35;MQ=36.60;MQ0=11;OQ=58.68;QD=1.25;SB=-50.80 GT:AD:DP:GL:GQ 0/1:40,7:24:-16.40,-7.25,-78.79:91.52
-chr1 4593128 . G C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=47;Dels=0.00;HRun=0;HaplotypeScore=7.00;MQ=42.60;MQ0=10;OQ=87.22;QD=1.86;SB=11.06 GT:AD:DP:GL:GQ 0/1:39,8:24:-19.25,-7.24,-80.14:99
-chr1 4593184 . G C 48.23 LowQual AC=1;AF=0.50;AN=2;DP=32;Dels=0.00;HRun=0;HaplotypeScore=5.25;MQ=50.03;MQ0=1;QD=1.51;SB=-24.84 GT:AD:DP:GL:GQ 0/1:27,5:22:-14.75,-6.64,-72.91:81.07
-chr1 4593205 . G C 35.18 LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.11;MQ=47.39;MQ0=4;QD=0.88;SB=-15.82 GT:AD:DP:GL:GQ 0/1:35,5:30:-15.86,-9.06,-106.35:68.02
-chr1 4593241 rs12752874 A C 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=2.83;MQ=43.47;MQ0=5;OQ=55.07;QD=1.28;SB=-27.98 GT:AD:DP:GL:GQ 0/1:30,13:26:-16.62,-7.83,-74.90:87.90
-chr1 4594330 rs34642555 G A 223.53 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.30;MQ=59.56;MQ0=0;OQ=741.34;QD=13.99;SB=-378.39 GT:AD:DP:GL:GQ 0/1:29,24:52:-93.10,-15.68,-88.17:99
-chr1 4599106 rs10753383 T G 347.62 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.01;MQ0=0;OQ=412.58;QD=12.50;SB=-151.92 GT:AD:DP:GL:GQ 0/1:17,16:32:-54.18,-9.64,-62.40:99
-chr1 4599463 rs7513957 G C 46.62 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=2;HaplotypeScore=1.18;MQ=57.56;MQ0=0;OQ=399.60;QD=12.11;SB=-196.33 GT:AD:DP:GL:GQ 0/1:20,13:31:-52.60,-9.35,-73.06:99
-chr1 4600658 rs12122002 G A 36.86 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=2.74;MQ=58.47;MQ0=0;OQ=1298.26;QD=21.28;SB=-656.75 GT:AD:DP:GL:GQ 0/1:24,37:59:-150.88,-17.77,-80.26:99
-chr1 4601609 rs55711858 A G 373.59 PASS AC=1;AF=0.50;AN=2;DB;DP=100;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.77;MQ0=0;OQ=1068.23;QD=10.68;SB=-465.77 GT:AD:DP:GL:GQ 0/1:56,44:100:-140.25,-30.14,-225.51:99
-chr1 4601750 rs2411891 G A 156.02 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1085.67;QD=16.96;SB=-561.13 GT:AD:DP:GL:GQ 0/1:31,33:63:-130.83,-18.98,-106.71:99
-chr1 4602156 rs61764994 A G 74.11 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=60.00;MQ0=0;OQ=509.21;QD=7.60;SB=-244.13 GT:AD:DP:GL:GQ 0/1:40,27:63:-73.19,-18.99,-161.05:99
-chr1 4602810 rs61764995 C T 382.37 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=850.22;QD=17.35;SB=-339.44 GT:AD:DP:GL:GQ 0/1:22,27:48:-102.77,-14.46,-79.78:99
-chr1 4602966 rs34993795 C T 235.21 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.72;MQ=59.03;MQ0=0;OQ=1118.32;QD=16.69;SB=-465.43 GT:AD:DP:GL:GQ 0/1:34,33:66:-135.00,-19.88,-119.08:99
-chr1 4604462 rs2035452 C G 271.67 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=397.56;QD=15.29;SB=-96.30 GT:AD:DP:GL:GQ 0/1:14,12:25:-50.58,-7.54,-52.60:99
-chr1 4606381 rs10915576 T C 220.72 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=882.56;QD=16.97;SB=-410.32 GT:AD:DP:GL:GQ 0/1:21,31:51:-106.90,-15.36,-86.72:99
-chr1 4606615 rs12125737 C T 418.26 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.71;MQ0=0;OQ=1209.07;QD=18.60;SB=-598.14 GT:AD:DP:GL:GQ 0/1:29,36:62:-142.87,-18.68,-88.99:99
-chr1 4607135 rs12122921 G A 2.76 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=10.90;MQ=57.40;MQ0=0;OQ=881.42;QD=13.16;SB=-408.91 GT:AD:DP:GL:GQ 0/1:36,31:56:-108.31,-16.88,-93.30:99
-chr1 4607451 rs28759408 G T 57.59 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=5.28;MQ=57.88;MQ0=1;OQ=710.71;QD=10.45;SB=-279.36 GT:AD:DP:GL:GQ 0/1:39,29:61:-92.73,-18.38,-123.60:99
-chr1 4608914 rs7535194 C A 224.06 PASS AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=57.78;MQ0=0;OQ=1544.72;QD=16.26;SB=-662.45 GT:AD:DP:GL:GQ 0/1:44,51:95:-186.37,-28.61,-160.23:99
-chr1 4609123 . C T 10.31 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=56.96;MQ0=2;QD=0.17;SB=19.65 GT:AD:DP:GL:GQ 0/1:53,6:55:-20.84,-16.57,-182.90:42.72
-chr1 4609208 rs7539862 A C 150.58 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=258.18;QD=5.87;SB=-149.80 GT:AD:DP:GL:GQ 0/1:32,12:43:-42.05,-12.95,-117.22:99
-chr1 4609234 . G A 18.35 LowQual AC=1;AF=0.50;AN=2;DP=40;Dels=0.00;HRun=0;HaplotypeScore=3.99;MQ=56.87;MQ0=1;QD=0.46;SB=-22.94 GT:AD:DP:GL:GQ 0/1:35,5:36:-15.96,-10.84,-114.15:51.13
-chr1 4609248 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=1;HaplotypeScore=35.67;MQ=56.49;MQ0=1;OQ=135.28;QD=2.42;SB=50.20 GT:AD:DP:GL:GQ 0/1:46,10:51:-32.18,-15.36,-170.39:99
-chr1 4609249 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=97.70;MQ=56.55;MQ0=1;OQ=82.36;QD=1.44;SB=50.16 GT:AD:DP:GL:GQ 0/1:47,10:52:-27.18,-15.66,-163.18:99
-chr1 4609260 rs61764999 C T 6.41 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=5.81;MQ=56.56;MQ0=1;OQ=641.66;QD=10.03;SB=-130.56 GT:AD:DP:GL:GQ 0/1:42,22:63:-86.43,-18.98,-148.93:99
-chr1 4609527 rs4654581 C G 33.46 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.03;MQ=59.43;MQ0=0;QD=0.67;SB=28.36 GT:AD:DP:GL:GQ 0/1:45,5:49:-21.39,-14.76,-192.44:66.29
-chr1 4610341 rs10799250 T C 191.96 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.62;MQ0=0;OQ=886.46;QD=10.43;SB=-400.18 GT:AD:DP:GL:GQ 0/1:51,34:83:-116.93,-25.00,-199.77:99
-chr1 4610346 rs10915577 A G 286.28 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.62;MQ0=0;OQ=927.42;QD=11.04;SB=-372.61 GT:AD:DP:GL:GQ 0/1:50,34:82:-120.73,-24.70,-201.64:99
-chr1 4611161 rs12405862 C T 55.82 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.70;MQ=59.65;MQ0=0;OQ=705.61;QD=13.31;SB=-372.08 GT:AD:DP:GL:GQ 0/1:30,23:53:-89.81,-15.97,-107.55:99
-chr1 4612905 rs1466520 A G 508.10 PASS AC=2;AF=1.00;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.49;MQ0=0;OQ=1092.36;QD=32.13;SB=-567.90 GT:AD:DP:GL:GQ 1/1:0,34:32:-112.83,-9.64,-0.01:96.28
-chr1 4613357 rs4144451 T C 2.82 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=4;HaplotypeScore=1.16;MQ=60.00;MQ0=0;OQ=378.96;QD=8.81;SB=-197.21 GT:AD:DP:GL:GQ 0/1:27,16:40:-53.24,-12.06,-95.58:99
-chr1 4616788 rs12127797 G C 214.89 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=4.57;MQ=59.39;MQ0=0;OQ=1251.84;QD=16.47;SB=-458.74 GT:AD:DP:GL:GQ 0/1:41,34:72:-150.17,-21.70,-159.82:99
-chr1 4619890 rs7544371 G A 283.12 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.45;MQ0=0;OQ=1234.26;QD=22.04;SB=-596.70 GT:AD:DP:GL:GQ 0/1:21,35:56:-143.59,-16.88,-63.94:99
-chr1 4621067 rs6426432 G C 375.69 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.65;MQ=60.00;MQ0=0;OQ=975.42;QD=15.73;SB=-398.88 GT:AD:DP:GL:GQ 0/1:35,27:62:-119.51,-18.68,-150.23:99
-chr1 4621285 rs6658403 C T 186.42 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.63;MQ0=0;OQ=651.01;QD=10.50;SB=-348.83 GT:AD:DP:GL:GQ 0/1:39,23:60:-86.46,-18.07,-139.05:99
-chr1 4622291 rs2035454 A G 361.79 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.59;MQ=59.15;MQ0=0;OQ=932.32;QD=13.13;SB=-403.21 GT:AD:DP:GL:GQ 0/1:39,32:70:-117.60,-21.09,-152.00:99
-chr1 4622303 rs1531830 T C 306.21 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=59.12;MQ0=0;OQ=753.21;QD=10.92;SB=-275.11 GT:AD:DP:GL:GQ 0/1:39,30:68:-99.09,-20.49,-155.18:99
-chr1 4623109 rs10799251 G A 463.40 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=863.86;QD=15.43;SB=-362.38 GT:AD:DP:GL:GQ 0/1:30,26:56:-106.54,-16.87,-110.57:99
-chr1 4623282 rs10799252 G C 114.19 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=53.79;MQ0=0;OQ=899.36;QD=20.92;SB=-445.94 GT:AD:DP:GL:GQ 0/1:17,26:42:-105.88,-12.66,-71.37:99
-chr1 4623298 rs10799253 T C 313.76 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=52.77;MQ0=0;OQ=616.14;QD=14.00;SB=-298.33 GT:AD:DP:GL:GQ 0/1:18,26:39:-76.66,-11.76,-55.81:99
-chr1 4623777 rs10915578 A G 84.84 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=0.82;MQ=58.86;MQ0=0;OQ=552.36;QD=9.69;SB=-296.32 GT:AD:DP:GL:GQ 0/1:35,22:57:-75.70,-17.18,-138.68:99
-chr1 4623873 rs10915579 T C 271.16 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=57.84;MQ0=0;OQ=661.07;QD=10.17;SB=-259.38 GT:AD:DP:GL:GQ 0/1:40,25:64:-88.68,-19.29,-154.96:99
-chr1 4624091 rs12135245 G C 41.47 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=1.89;MQ=59.70;MQ0=0;OQ=1186.96;QD=19.14;SB=-476.78 GT:AD:DP:GL:GQ 0/1:28,34:59:-139.77,-17.79,-108.63:99
-chr1 4624130 rs12140542 T C 140.19 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=2.13;MQ=59.74;MQ0=0;OQ=656.89;QD=9.12;SB=-348.92 GT:AD:DP:GL:GQ 0/1:43,29:71:-90.37,-21.40,-172.64:99
-chr1 4624492 rs2035455 C T 468.68 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=702.27;QD=12.54;SB=-335.31 GT:AD:DP:GL:GQ 0/1:34,22:55:-90.09,-16.58,-106.86:99
-chr1 4624817 rs17421247 C T 331.36 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.99;MQ=59.65;MQ0=0;OQ=1014.16;QD=15.37;SB=-402.77 GT:AD:DP:GL:GQ 0/1:35,31:64:-123.99,-19.29,-104.67:99
-chr1 4626224 rs10915580 G C 281.25 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.07;MQ0=0;OQ=1106.61;QD=18.14;SB=-348.42 GT:AD:DP:GL:GQ 0/1:31,30:61:-132.34,-18.40,-124.48:99
-chr1 4626314 rs12567266 T C 443.89 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=51.48;MQ0=0;OQ=855.53;QD=18.20;SB=-345.35 GT:AD:DP:GL:GQ 0/1:19,28:47:-102.99,-14.16,-75.71:99
-chr1 4626341 rs12752003 A G 152.30 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=47.43;MQ0=0;OQ=459.90;QD=12.10;SB=-75.78 GT:AD:DP:GL:GQ 0/1:17,21:35:-59.82,-10.55,-67.90:99
-chr1 4626392 rs12565906 G A 175.56 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=1.36;MQ=51.30;MQ0=0;OQ=647.78;QD=15.42;SB=-283.17 GT:AD:DP:GL:GQ 0/1:21,21:41:-80.41,-12.35,-73.25:99
-chr1 4626545 rs12137938 T C 1.78 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=2;HaplotypeScore=6.74;MQ=54.18;MQ0=1;OQ=220.73;QD=6.49;SB=-111.61 GT:AD:DP:GL:GQ 0/1:20,14:29:-34.11,-8.75,-66.24:99
-chr1 4626759 rs10799254 A G 12.84 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=1;HaplotypeScore=7.18;MQ=56.44;MQ0=0;OQ=516.47;QD=13.59;SB=-271.00 GT:AD:DP:GL:GQ 0/1:15,23:33:-64.88,-9.95,-53.03:99
-chr1 4626886 rs12137092 A G 70.84 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=50.68;MQ0=3;OQ=425.89;QD=8.19;SB=-166.49 GT:AD:DP:GL:GQ 0/1:30,22:47:-60.04,-14.17,-111.36:99
-chr1 4627103 rs6663166 A G 61.80 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.88;MQ0=0;OQ=507.83;QD=9.40;SB=-149.43 GT:AD:DP:GL:GQ 0/1:33,21:53:-70.04,-15.97,-130.76:99
-chr1 4627150 rs12138132 T C 261.25 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.66;MQ0=0;OQ=429.65;QD=7.81;SB=-213.21 GT:AD:DP:GL:GQ 0/1:37,18:55:-62.82,-16.57,-149.18:99
-chr1 4627390 rs12133670 G A 454.29 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.64;MQ0=0;OQ=810.38;QD=15.58;SB=-415.38 GT:AD:DP:GL:GQ 0/1:28,24:51:-99.69,-15.36,-91.80:99
-chr1 4628089 rs12133909 G T 196.70 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=59.88;MQ0=0;OQ=673.35;QD=10.52;SB=-318.02 GT:AD:DP:GL:GQ 0/1:40,24:62:-89.30,-18.68,-116.17:99
-chr1 4628258 rs6703379 G A 0.30 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=13.50;MQ=55.99;MQ0=1;OQ=611.30;QD=11.32;SB=-213.68 GT:AD:DP:GL:GQ 0/1:33,21:47:-78.59,-14.17,-86.02:99
-chr1 4628265 rs6672122 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.04;HRun=0;HaplotypeScore=25.47;MQ=56.13;MQ0=1;OQ=602.93;QD=10.77;SB=-162.48 GT:AD:DP:GL:GQ 0/1:29,25:52:-78.65,-15.07,-102.50:99
-chr1 4628677 rs6703802 G A 334.66 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=937.15;QD=18.02;SB=-393.92 GT:AD:DP:GL:GQ 0/1:24,28:51:-112.37,-15.37,-73.40:99
-chr1 4630143 rs4654582 T A 2.35 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=10.18;MQ=58.22;MQ0=0;OQ=526.78;QD=10.54;SB=-97.11 GT:AD:DP:GL:GQ 0/1:25,22:38:-67.41,-11.45,-72.86:99
-chr1 4630312 rs4654583 T C 361.82 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1108.52;QD=16.07;SB=-319.34 GT:AD:DP:GL:GQ 0/1:31,38:68:-134.62,-20.48,-127.03:99
-chr1 4630977 rs12141394 A G 593.81 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.47;MQ0=0;OQ=900.99;QD=13.45;SB=-440.92 GT:AD:DP:GL:GQ 0/1:31,36:65:-112.97,-19.59,-120.61:99
-chr1 4631016 rs12139858 C T 367.23 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=891.25;QD=15.37;SB=-441.97 GT:AD:DP:GL:GQ 0/1:31,27:57:-109.59,-17.18,-94.97:99
-chr1 4631110 rs12141432 A G 226.87 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=58.67;MQ0=0;OQ=787.70;QD=12.50;SB=-349.34 GT:AD:DP:GL:GQ 0/1:35,28:62:-100.73,-18.67,-138.62:99
-chr1 4631448 rs4144452 A G 502.74 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=648.74;QD=10.64;SB=-332.00 GT:AD:DP:GL:GQ 0/1:33,28:59:-85.94,-17.78,-131.20:99
-chr1 4631992 rs12138000 G A 396.61 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=1014.12;QD=15.85;SB=-413.79 GT:AD:DP:GL:GQ 0/1:32,32:63:-123.69,-18.99,-104.09:99
-chr1 4632333 rs1564667 A G 289.52 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.70;MQ0=0;OQ=656.79;QD=8.64;SB=-323.90 GT:AD:DP:GL:GQ 0/1:44,32:72:-90.67,-21.71,-171.92:99
-chr1 4633099 rs4654585 T C 336.77 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=1.88;MQ=59.60;MQ0=0;OQ=968.60;QD=16.70;SB=-498.14 GT:AD:DP:GL:GQ 0/1:26,32:58:-117.61,-17.47,-104.79:99
-chr1 4633208 rs4654586 T A 613.80 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2145.98;QD=37.00;SB=-956.61 GT:AD:DP:GL:GQ 1/1:0,58:58:-218.20,-17.47,-0.01:99
-chr1 4633215 rs4654455 T C 484.54 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1991.47;QD=34.94;SB=-790.66 GT:AD:DP:GL:GQ 1/1:0,57:56:-202.75,-16.87,-0.02:99
-chr1 4636316 rs10915584 G T 377.31 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.90;MQ=59.34;MQ0=0;OQ=844.77;QD=13.41;SB=-404.78 GT:AD:DP:GL:GQ 0/1:32,31:58:-105.23,-17.47,-102.72:99
-chr1 4637265 . T C 225.79 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=776.05;QD=14.64;SB=-255.94 GT:AD:DP:GL:GQ 0/1:26,27:53:-96.86,-15.97,-103.32:99
-chr1 4638345 . G A 67.79 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.29;MQ0=0;OQ=991.16;QD=18.70;SB=-412.80 GT:AD:DP:GL:GQ 0/1:24,29:51:-117.77,-15.37,-70.20:99
-chr1 4642883 rs2859392 C G 348.55 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.26;MQ=59.71;MQ0=0;OQ=833.93;QD=12.83;SB=-304.28 GT:AD:DP:GL:GQ 0/1:37,28:61:-105.07,-18.39,-160.99:99
-chr1 4643564 rs763238 C T 66.20 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.77;MQ0=0;OQ=1042.05;QD=19.66;SB=-208.90 GT:AD:DP:GL:GQ 0/1:21,32:50:-122.56,-15.07,-63.38:99
-chr1 4644154 rs4993529 C T 334.67 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=60.00;MQ0=0;OQ=1314.27;QD=19.62;SB=-670.69 GT:AD:DP:GL:GQ 0/1:27,40:65:-154.30,-19.59,-85.13:99
-chr1 4646074 rs242043 T C 1.61 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=13.28;MQ=59.47;MQ0=0;OQ=1026.27;QD=14.45;SB=-395.20 GT:AD:DP:GL:GQ 0/1:34,37:70:-127.00,-21.09,-134.39:99
-chr1 4646297 rs61765026 G A 183.35 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=1519.28;QD=17.87;SB=-749.72 GT:AD:DP:GL:GQ 0/1:39,46:84:-180.53,-25.32,-123.19:99
-chr1 4646496 rs10915587 C T 288.71 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=3.87;MQ=60.00;MQ0=0;OQ=1042.81;QD=16.04;SB=-490.54 GT:AD:DP:GL:GQ 0/1:32,33:64:-126.86,-19.30,-98.43:99
-chr1 4646880 rs17344953 G A 102.24 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=5.33;MQ=59.62;MQ0=0;OQ=1025.96;QD=17.10;SB=-396.44 GT:AD:DP:GL:GQ 0/1:26,33:55:-122.45,-16.57,-85.52:99
-chr1 4647597 rs12747700 G A 323.59 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=59.29;MQ0=0;OQ=999.88;QD=16.95;SB=-503.14 GT:AD:DP:GL:GQ 0/1:28,31:57:-120.45,-17.18,-86.54:99
-chr1 4648034 rs6684528 G T 259.70 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.52;MQ0=0;OQ=808.60;QD=16.85;SB=-296.69 GT:AD:DP:GL:GQ 0/1:20,28:48:-98.60,-14.46,-70.03:99
-chr1 4648165 rs1076944 G T 243.38 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=58.38;MQ0=0;OQ=602.15;QD=11.58;SB=-146.14 GT:AD:DP:GL:GQ 0/1:27,25:49:-78.26,-14.76,-94.92:99
-chr1 4648936 rs4092257 G A 283.88 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=57.56;MQ0=0;OQ=450.85;QD=13.66;SB=-204.90 GT:AD:DP:GL:GQ 0/1:17,16:32:-58.02,-9.65,-54.32:99
-chr1 4649873 rs187148 C G 93.57 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=0;HaplotypeScore=3.10;MQ=59.76;MQ0=0;OQ=296.24;QD=8.98;SB=-132.74 GT:AD:DP:GL:GQ 0/1:22,11:31:-42.26,-9.35,-85.65:99
-chr1 4651624 . C A 146.63 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=797.72;QD=17.34;SB=-280.69 GT:AD:DP:GL:GQ 0/1:17,29:42:-95.71,-12.66,-50.88:99
-chr1 4652138 rs171380 A G 10.05 PASS AC=1;AF=0.50;AN=2;DB;DP=30;Dels=0.00;HRun=2;HaplotypeScore=3.45;MQ=58.45;MQ0=0;OQ=324.85;QD=10.83;SB=-162.34 GT:AD:DP:GL:GQ 0/1:14,16:28:-44.21,-8.45,-55.22:99
-chr1 4653917 rs7525374 A G 301.57 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=624.45;QD=13.58;SB=-244.30 GT:AD:DP:GL:GQ 0/1:21,25:46:-79.59,-13.86,-85.75:99
-chr1 4653963 rs7528195 T C 276.57 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.00;MQ0=0;OQ=479.46;QD=11.42;SB=-265.36 GT:AD:DP:GL:GQ 0/1:21,21:39:-62.99,-11.76,-78.32:99
-chr1 4654404 rs1076945 C T 142.94 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=4.82;MQ=58.13;MQ0=0;OQ=818.85;QD=13.65;SB=-233.53 GT:AD:DP:GL:GQ 0/1:33,27:59:-102.95,-17.78,-107.70:99
-chr1 4655581 . C T 85.40 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=59.44;MQ0=0;OQ=1224.61;QD=16.55;SB=-495.16 GT:AD:DP:GL:GQ 0/1:36,38:73:-147.75,-22.00,-119.12:99
-chr1 4656328 rs10915588 T C 75.83 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=629.83;QD=11.88;SB=-281.45 GT:AD:DP:GL:GQ 0/1:30,23:52:-81.93,-15.66,-115.22:99
-chr1 4656461 rs3886389 A G 234.27 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.53;MQ0=0;OQ=467.67;QD=9.54;SB=-232.27 GT:AD:DP:GL:GQ 0/1:28,21:49:-64.82,-14.77,-113.76:99
-chr1 4657736 rs6669203 T C 161.22 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=58.29;MQ0=0;OQ=397.97;QD=9.71;SB=-145.57 GT:AD:DP:GL:GQ 0/1:23,18:37:-54.24,-11.16,-78.29:99
-chr1 4658187 rs12121882 C T 363.11 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=849.30;QD=18.07;SB=-359.52 GT:AD:DP:GL:GQ 0/1:21,26:46:-102.08,-13.87,-62.23:99
-chr1 4659178 rs242054 A G 123.55 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=57.49;MQ0=0;OQ=1370.79;QD=30.46;SB=-653.90 GT:AD:DP:GL:GQ 1/1:0,45:44:-140.71,-13.27,-0.04:99
-chr1 4660176 rs61765031 A G 230.02 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.54;MQ=59.01;MQ0=0;OQ=811.95;QD=12.30;SB=-390.16 GT:AD:DP:GL:GQ 0/1:34,31:61:-102.85,-18.37,-129.51:99
-chr1 4663049 rs6686733 T C 216.77 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=4.72;MQ=59.04;MQ0=0;OQ=1082.32;QD=15.92;SB=-503.34 GT:AD:DP:GL:GQ 0/1:29,39:64:-130.80,-19.28,-107.21:99
-chr1 4663261 rs6681520 C T 227.08 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1006.77;QD=22.88;SB=-416.49 GT:AD:DP:GL:GQ 0/1:15,29:43:-116.92,-12.96,-47.72:99
-chr1 4665250 rs12131565 A G 49.08 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=2;HaplotypeScore=2.95;MQ=47.43;MQ0=2;OQ=1030.19;QD=13.38;SB=-443.10 GT:AD:DP:GL:GQ 0/1:41,36:75:-128.89,-22.59,-163.25:99
-chr1 4665448 rs10915590 T C 343.30 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.85;MQ0=0;OQ=469.57;QD=9.58;SB=-224.22 GT:AD:DP:GL:GQ 0/1:29,20:48:-64.71,-14.47,-110.90:99
-chr1 4665815 rs10915592 T C 6.94 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=2.44;MQ=60.00;MQ0=0;OQ=940.71;QD=17.75;SB=-259.53 GT:AD:DP:GL:GQ 0/1:21,32:50:-112.42,-15.06,-71.48:99
-chr1 4667613 rs2101196 A G 254.46 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.34;MQ=56.97;MQ0=0;OQ=1013.81;QD=15.13;SB=-354.95 GT:AD:DP:GL:GQ 0/1:32,35:65:-124.25,-19.58,-123.74:99
-chr1 4667836 . T C 82.17 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=758.61;QD=12.24;SB=-402.64 GT:AD:DP:GL:GQ 0/1:31,31:61:-97.53,-18.39,-127.98:99
-chr1 4667882 rs2086718 C T 43.81 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.02;HRun=0;HaplotypeScore=5.21;MQ=57.79;MQ0=0;OQ=518.41;QD=9.43;SB=-229.72 GT:AD:DP:GL:GQ 0/1:31,22:40:-66.89,-11.76,-68.62:99
-chr1 4667894 . G T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=12;HaplotypeScore=6.56;MQ=55.45;MQ0=0;OQ=63.00;QD=0.98;SB=-8.73 GT:AD:DP:GL:GQ 0/1:54,10:56:-26.47,-16.89,-148.75:95.84
-chr1 4668291 rs6670802 G A 143.50 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=56.73;MQ0=0;OQ=372.96;QD=8.29;SB=-147.60 GT:AD:DP:GL:GQ 0/1:28,16:38:-52.04,-11.46,-80.12:99
-chr1 4668400 rs6688423 T C 371.01 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=710.41;QD=13.16;SB=-359.33 GT:AD:DP:GL:GQ 0/1:26,28:52:-89.99,-15.67,-104.81:99
-chr1 4668882 . T C 49.86 LowQual AC=1;AF=0.50;AN=2;DP=20;Dels=0.00;HRun=3;HaplotypeScore=9.17;MQ=57.66;MQ0=0;QD=2.49;SB=-0.98 GT:AD:DP:GL:GQ 0/1:11,9:11:-11.59,-3.32,-24.54:82.70
-chr1 4669925 rs12760917 T C 439.23 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.29;MQ0=0;OQ=917.38;QD=14.11;SB=-279.27 GT:AD:DP:GL:GQ 0/1:29,36:64:-114.31,-19.29,-115.57:99
-chr1 4670306 rs4654594 T C 240.89 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=58.06;MQ0=0;OQ=1070.08;QD=17.54;SB=-482.88 GT:AD:DP:GL:GQ 0/1:21,40:58:-127.77,-17.48,-76.71:99
-chr1 4670764 rs1483197 T C 225.25 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=4.25;MQ=58.29;MQ0=0;OQ=709.74;QD=13.65;SB=-285.29 GT:AD:DP:GL:GQ 0/1:22,29:49:-89.03,-14.77,-80.10:99
-chr1 4670879 . G T 21.82 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=1.85;MQ=60.00;MQ0=0;OQ=722.25;QD=15.70;SB=-186.19 GT:AD:DP:GL:GQ 0/1:22,24:42:-88.16,-12.65,-60.03:99
-chr1 4671525 rs989309 G C 65.26 PASS AC=1;AF=0.50;AN=2;DB;DP=33;Dels=0.00;HRun=1;HaplotypeScore=2.50;MQ=60.00;MQ0=0;OQ=327.78;QD=9.93;SB=-148.55 GT:AD:DP:GL:GQ 0/1:21,12:30:-45.12,-9.05,-74.66:99
-chr1 4671555 rs989310 G C 120.18 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=60.00;MQ0=0;OQ=521.90;QD=14.11;SB=-193.59 GT:AD:DP:GL:GQ 0/1:21,16:35:-66.02,-10.55,-86.58:99
-chr1 4671913 rs1061968 T C 32.96 PASS AC=1;AF=0.50;AN=2;DB;DP=16;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=58.55;MQ0=0;OQ=101.72;QD=6.36;SB=-10.00 GT:AD:DP:GL:GQ 0/1:10,6:16:-18.28,-4.82,-40.28:99
-chr1 4672577 rs242056 G A 47.38 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.45;MQ0=0;OQ=1114.83;QD=37.16;SB=-369.99 GT:AD:DP:GL:GQ 1/1:0,30:28:-115.07,-8.43,-0.01:84.28
-chr1 4673126 rs2071999 A C 360.34 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=60.00;MQ0=0;OQ=766.03;QD=12.77;SB=-408.20 GT:AD:DP:GL:GQ 0/1:27,33:59:-97.67,-17.78,-97.47:99
-chr1 4673232 rs56401224 C G 273.95 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.62;MQ=59.63;MQ0=0;OQ=825.52;QD=16.51;SB=-362.08 GT:AD:DP:GL:GQ 0/1:25,25:46:-99.70,-13.86,-96.30:99
-chr1 4673712 rs242057 G A 40.47 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=3;HaplotypeScore=2.46;MQ=59.65;MQ0=0;OQ=947.24;QD=14.35;SB=-485.02 GT:AD:DP:GL:GQ 0/1:36,30:63:-116.99,-18.98,-120.15:99
-chr1 4674298 rs242058 T C 345.93 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=778.59;QD=15.27;SB=-272.44 GT:AD:DP:GL:GQ 0/1:23,28:50:-96.21,-15.07,-89.60:99
-chr1 4676145 rs4654595 A C 407.01 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=2257.07;QD=35.83;SB=-1055.12 GT:AD:DP:GL:GQ 1/1:0,63:63:-229.31,-18.97,-0.02:99
-chr1 4676402 rs4654596 G A 207.21 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.44;MQ0=0;OQ=2768.52;QD=37.41;SB=-1042.40 GT:AD:DP:GL:GQ 1/1:0,74:71:-280.46,-21.39,-0.02:99
-chr1 4678092 rs3766959 C T 358.01 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.73;MQ0=0;OQ=1524.54;QD=23.10;SB=-743.34 GT:AD:DP:GL:GQ 0/1:22,44:65:-175.33,-19.59,-68.56:99
-chr1 4679148 rs242040 A G 228.84 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.49;MQ=60.00;MQ0=0;OQ=836.32;QD=13.07;SB=-312.23 GT:AD:DP:GL:GQ 0/1:34,30:63:-105.89,-18.98,-137.28:99
-chr1 4679557 rs242041 G C 23.06 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=1.52;MQ=58.81;MQ0=0;OQ=500.09;QD=9.81;SB=-250.11 GT:AD:DP:GL:GQ 0/1:32,19:47:-67.48,-14.18,-123.03:99
-chr1 4681011 rs3820251 C T 321.37 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.05;MQ0=0;OQ=1264.98;QD=15.06;SB=-599.08 GT:AD:DP:GL:GQ 0/1:45,39:83:-154.80,-25.02,-140.75:99
-chr1 4683002 rs12566272 G A 75.66 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=6.06;MQ=59.60;MQ0=0;OQ=811.79;QD=14.00;SB=-379.10 GT:AD:DP:GL:GQ 0/1:30,28:55:-101.04,-16.58,-98.62:99
-chr1 4683215 rs12085854 C T 250.87 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=58.71;MQ0=0;OQ=595.12;QD=16.53;SB=-237.77 GT:AD:DP:GL:GQ 0/1:12,24:28:-71.24,-8.44,-31.48:99
-chr1 4684416 rs3820252 C T 67.11 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.40;MQ=59.16;MQ0=0;OQ=1099.71;QD=21.99;SB=-407.20 GT:AD:DP:GL:GQ 0/1:18,32:50:-128.32,-15.07,-57.31:99
-chr1 4684710 rs4554693 C T 27.64 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.03;MQ=59.86;MQ0=0;OQ=1309.90;QD=22.98;SB=-464.01 GT:AD:DP:GL:GQ 0/1:20,37:57:-151.45,-17.18,-62.35:99
-chr1 4685955 rs11586740 G T 36.42 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=7.65;MQ=60.00;MQ0=0;OQ=1269.15;QD=17.39;SB=-560.71 GT:AD:DP:GL:GQ 0/1:30,43:69:-150.98,-20.79,-94.07:99
-chr1 4686129 . A G 0.31 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=58.20;MQ0=0;OQ=188.73;QD=3.63;SB=-3.68 GT:AD:DP:GL:GQ 0/1:41,11:52:-37.84,-15.68,-155.85:99
-chr1 4686130 . G C 4.40 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.20;MQ0=0;OQ=258.95;QD=4.98;SB=-16.68 GT:AD:DP:GL:GQ 0/1:42,10:52:-44.85,-15.67,-182.52:99
-chr1 4686979 rs242044 A G 24.21 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=2;HaplotypeScore=0.79;MQ=59.56;MQ0=0;OQ=1479.37;QD=27.91;SB=-538.14 GT:AD:DP:GL:GQ 1/1:0,52:45:-151.55,-13.56,-0.03:99
-chr1 4687176 rs242045 T C 255.59 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1371.92;QD=34.30;SB=-697.63 GT:AD:DP:GL:GQ 1/1:0,40:40:-140.79,-12.05,-0.02:99
-chr1 4687868 rs242047 A C 103.52 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=2.65;MQ=59.62;MQ0=0;OQ=770.92;QD=12.85;SB=-248.85 GT:AD:DP:GL:GQ 0/1:32,28:59:-98.15,-17.77,-114.07:99
-chr1 4688746 rs242048 A G 112.68 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=1.71;MQ=59.36;MQ0=0;OQ=768.10;QD=21.34;SB=-331.78 GT:AD:DP:GL:GQ 1/1:0,36:26:-80.42,-7.84,-0.03:78.16
-chr1 4688889 rs242049 T G 239.30 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=60.00;MQ0=0;OQ=1481.34;QD=32.92;SB=-635.03 GT:AD:DP:GL:GQ 1/1:0,45:44:-151.74,-13.26,-0.02:99
-chr1 4695274 rs446529 T C 363.34 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=55.31;MQ0=0;OQ=516.35;QD=9.93;SB=-227.25 GT:AD:DP:GL:GQ 0/1:29,23:50:-69.99,-15.07,-114.97:99
-chr1 4695606 rs648712 C T 1.54 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=10.04;MQ=47.15;MQ0=0;OQ=816.40;QD=17.01;SB=-434.45 GT:AD:DP:GL:GQ 0/1:23,25:46:-98.78,-13.86,-79.74:99
-chr1 4695607 . T G 0.18 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=11.01;MQ=47.15;MQ0=0;OQ=688.64;QD=14.35;SB=-357.86 GT:AD:DP:GL:GQ 0/1:23,25:47:-86.31,-14.16,-83.32:99
-chr1 4695638 rs432330 T A 460.16 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=51.80;MQ0=0;OQ=772.11;QD=15.14;SB=-337.40 GT:AD:DP:GL:GQ 0/1:24,27:50:-95.56,-15.06,-90.18:99
-chr1 4695654 rs449261 T C 245.99 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.57;MQ=53.57;MQ0=0;OQ=702.97;QD=13.52;SB=-345.62 GT:AD:DP:GL:GQ 0/1:26,26:49:-88.35,-14.77,-92.65:99
-chr1 4695676 rs435239 G C 185.06 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=2.08;MQ=57.17;MQ0=0;OQ=826.31;QD=16.53;SB=-414.36 GT:AD:DP:GL:GQ 0/1:24,26:47:-100.09,-14.18,-90.75:99
-chr1 4695734 rs416953 T C 152.01 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=59.13;MQ0=0;OQ=882.63;QD=16.65;SB=-283.45 GT:AD:DP:GL:GQ 0/1:22,31:50:-106.61,-15.06,-78.94:99
-chr1 4696083 rs383650 C G 345.55 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.53;MQ=59.10;MQ0=0;OQ=1382.15;QD=17.95;SB=-715.96 GT:AD:DP:GL:GQ 0/1:38,39:75:-164.11,-22.61,-152.21:99
-chr1 4696156 rs436132 G C 8.37 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=1112.40;QD=19.86;SB=-564.68 GT:AD:DP:GL:GQ 0/1:25,31:56:-131.40,-16.88,-111.00:99
-chr1 4696361 . A C 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=2;HaplotypeScore=10.18;MQ=60.26;MQ0=0;OQ=143.73;QD=2.08;SB=104.31 GT:AD:DP:GL:GQ 0/1:45,24:52:-33.32,-15.67,-137.68:99
-chr1 4696418 rs392630 A G 270.27 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.71;MQ0=0;OQ=1265.58;QD=13.76;SB=-582.79 GT:AD:DP:GL:GQ 0/1:45,47:87:-156.05,-26.21,-176.07:99
-chr1 4697358 rs544738 C A 298.87 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.61;MQ=59.01;MQ0=0;OQ=538.34;QD=14.17;SB=-233.94 GT:AD:DP:GL:GQ 0/1:19,19:37:-68.26,-11.15,-60.83:99
-chr1 4697618 rs445060 G A 155.17 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=59.60;MQ0=0;OQ=740.87;QD=12.77;SB=-313.26 GT:AD:DP:GL:GQ 0/1:32,26:54:-93.63,-16.26,-111.70:99
-chr1 4698713 rs578528 A G 87.54 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.36;MQ0=0;OQ=385.70;QD=10.71;SB=-193.63 GT:AD:DP:GL:GQ 0/1:21,15:36:-52.70,-10.85,-81.97:99
-chr1 4699130 rs449181 G A 397.02 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.84;MQ=59.67;MQ0=0;OQ=927.44;QD=16.56;SB=-380.14 GT:AD:DP:GL:GQ 0/1:27,29:54:-112.30,-16.28,-85.10:99
-chr1 4700289 rs13376290 T G 0.41 PASS AC=1;AF=0.50;AN=2;DB;DP=26;Dels=0.00;HRun=4;HaplotypeScore=0.10;MQ=48.01;MQ0=0;OQ=193.53;QD=7.44;SB=-0.43 GT:AD:DP:GL:GQ 0/1:15,11:24:-29.87,-7.23,-54.19:99
-chr1 4700426 . C G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=26;Dels=0.00;HRun=2;HaplotypeScore=11.52;MQ=48.42;MQ0=0;OQ=136.63;QD=5.25;SB=-6.99 GT:AD:DP:GL:GQ 0/1:7,19:10:-19.97,-3.02,-19.59:99
-chr1 4700705 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=20;HaplotypeScore=32.92;MQ=48.95;MQ0=0;OQ=199.23;QD=3.83;SB=71.25 GT:AD:DP:GL:GQ 0/1:35,17:41:-35.56,-12.35,-113.25:99
-chr1 4700881 rs529853 G C 174.83 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=3.66;MQ=53.91;MQ0=0;OQ=810.63;QD=16.54;SB=-402.70 GT:AD:DP:GL:GQ 0/1:22,27:47:-98.53,-14.18,-93.65:99
-chr1 4701141 rs381339 T C 9.53 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=2.72;MQ=59.22;MQ0=0;OQ=750.05;QD=11.54;SB=-112.61 GT:AD:DP:GL:GQ 0/1:29,33:53:-94.27,-15.98,-96.69:99
-chr1 4701497 rs382623 T C 282.35 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.48;MQ0=0;OQ=1093.69;QD=13.50;SB=-513.56 GT:AD:DP:GL:GQ 0/1:38,43:80:-136.77,-24.11,-153.00:99
-chr1 4701516 rs382646 T C 490.40 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1091.01;QD=14.36;SB=-413.27 GT:AD:DP:GL:GQ 0/1:38,38:75:-134.98,-22.59,-157.29:99
-chr1 4701783 rs392620 C T 260.56 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.19;MQ=59.38;MQ0=0;OQ=1111.05;QD=15.01;SB=-420.88 GT:AD:DP:GL:GQ 0/1:41,33:73:-136.38,-21.99,-143.11:99
-chr1 4702373 rs448741 C T 315.12 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.33;MQ0=0;OQ=1161.48;QD=16.83;SB=-516.10 GT:AD:DP:GL:GQ 0/1:33,36:68:-139.92,-20.49,-116.50:99
-chr1 4702588 rs431966 C G 301.89 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.74;MQ0=0;OQ=1167.37;QD=16.21;SB=-392.89 GT:AD:DP:GL:GQ 0/1:35,37:71:-141.44,-21.42,-151.57:99
-chr1 4703125 rs367673 G C 285.90 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.24;MQ0=0;OQ=1282.03;QD=21.02;SB=-602.59 GT:AD:DP:GL:GQ 0/1:26,35:61:-149.87,-18.38,-114.22:99
-chr1 4703446 rs540299 A G 321.95 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.50;MQ=59.10;MQ0=0;OQ=1141.42;QD=14.82;SB=-449.59 GT:AD:DP:GL:GQ 0/1:36,41:75:-140.02,-22.60,-142.02:99
-chr1 4703496 rs648346 G A 131.26 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=58.29;MQ0=0;OQ=1435.37;QD=17.50;SB=-321.28 GT:AD:DP:GL:GQ 0/1:40,42:79:-170.63,-23.81,-120.02:99
-chr1 4703694 rs393976 G A 298.73 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=59.30;MQ0=0;OQ=1022.50;QD=17.04;SB=-396.14 GT:AD:DP:GL:GQ 0/1:30,30:58:-123.01,-17.47,-100.86:99
-chr1 4704145 rs375781 T C 253.06 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=57.53;MQ0=0;OQ=380.91;QD=10.02;SB=-211.48 GT:AD:DP:GL:GQ 0/1:19,19:35:-51.92,-10.55,-74.06:99
-chr1 4704212 rs406065 A T 598.24 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.74;MQ0=0;OQ=1026.86;QD=14.88;SB=-405.55 GT:AD:DP:GL:GQ 0/1:35,34:69:-126.75,-20.78,-135.77:99
-chr1 4704412 rs396199 G A 86.73 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=1.14;MQ=59.62;MQ0=0;OQ=915.71;QD=18.69;SB=-324.82 GT:AD:DP:GL:GQ 0/1:21,28:47:-109.02,-14.16,-69.65:99
-chr1 4704606 rs413178 A G 154.93 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=56.43;MQ0=0;OQ=958.14;QD=15.45;SB=-233.27 GT:AD:DP:GL:GQ 0/1:25,37:59:-116.89,-17.79,-90.61:99
-chr1 4704966 rs414176 A C 426.79 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=751.31;QD=11.93;SB=-297.47 GT:AD:DP:GL:GQ 0/1:31,32:62:-97.10,-18.68,-109.53:99
-chr1 4705294 rs371605 A G 188.84 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=59.55;MQ0=0;OQ=418.07;QD=8.20;SB=-210.35 GT:AD:DP:GL:GQ 0/1:28,23:46:-58.96,-13.87,-104.25:99
-chr1 4705534 rs409048 T C 345.87 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.05;MQ=59.35;MQ0=0;OQ=802.66;QD=12.54;SB=-363.20 GT:AD:DP:GL:GQ 0/1:35,29:64:-102.83,-19.28,-139.39:99
-chr1 4706241 rs368808 A G 17.45 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=2;HaplotypeScore=4.09;MQ=59.49;MQ0=0;OQ=756.36;QD=9.22;SB=-230.86 GT:AD:DP:GL:GQ 0/1:48,34:80:-103.04,-24.12,-189.26:99
-chr1 4707706 rs368940 A G 105.39 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=599.08;QD=17.12;SB=-212.56 GT:AD:DP:GL:GQ 0/1:14,21:35:-73.73,-10.54,-57.28:99
-chr1 4707911 . C A 31.90 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=13;HaplotypeScore=26.77;MQ=58.47;MQ0=0;QD=0.52;SB=52.91 GT:AD:DP:GL:GQ 0/1:52,9:48:-20.93,-14.46,-146.08:64.73
-chr1 4708314 rs2802721 G A 450.84 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=56.44;MQ0=0;OQ=981.54;QD=15.34;SB=-489.03 GT:AD:DP:GL:GQ 0/1:28,36:59:-119.22,-17.78,-99.55:99
-chr1 4708405 rs394808 C A 233.49 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=56.69;MQ0=0;OQ=782.76;QD=14.77;SB=-324.34 GT:AD:DP:GL:GQ 0/1:26,27:51:-96.92,-15.37,-78.87:99
-chr1 4708536 rs395145 C T 383.51 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1269.10;QD=19.83;SB=-521.54 GT:AD:DP:GL:GQ 0/1:25,39:63:-149.18,-18.98,-84.36:99
-chr1 4708674 rs4654602 A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=69.80;MQ=46.48;MQ0=0;OQ=293.59;QD=4.19;SB=-93.14 GT:AD:DP:GL:GQ 0/1:56,14:66:-52.53,-19.89,-198.60:99
-chr1 4708678 rs406913 A G 32.76 DPFilter;LowQual AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=20.07;MQ=45.13;MQ0=0;QD=0.48;SB=9.87 GT:AD:DP:GL:GQ 0/1:59,9:58:-24.04,-17.48,-194.48:65.59
-chr1 4708830 rs433427 A G 13.73 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=6.55;MQ=59.08;MQ0=0;OQ=748.71;QD=10.55;SB=-350.04 GT:AD:DP:GL:GQ 0/1:40,31:70:-99.25,-21.09,-163.31:99
-chr1 4708980 rs2802720 C T 373.55 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=55.41;MQ0=0;OQ=1008.97;QD=15.29;SB=-359.05 GT:AD:DP:GL:GQ 0/1:35,31:66:-124.06,-19.88,-124.56:99
-chr1 4710412 rs364642 C T 180.53 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=3.52;MQ=58.91;MQ0=0;OQ=814.43;QD=13.57;SB=-402.86 GT:AD:DP:GL:GQ 0/1:32,28:58:-102.20,-17.48,-113.74:99
-chr1 4712675 rs381240 A G 265.51 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=57.93;MQ0=0;OQ=805.26;QD=10.19;SB=-382.86 GT:AD:DP:GL:GQ 0/1:44,35:76:-106.72,-22.91,-172.59:99
-chr1 4712931 rs448221 T C 105.17 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=56.15;MQ0=0;OQ=384.09;QD=10.38;SB=-115.63 GT:AD:DP:GL:GQ 0/1:18,19:34:-51.95,-10.25,-67.62:99
-chr1 4712934 rs431884 C T 132.31 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=56.04;MQ0=0;OQ=441.73;QD=12.27;SB=-157.22 GT:AD:DP:GL:GQ 0/1:18,18:33:-57.41,-9.95,-59.19:99
-chr1 4712975 rs380239 A G 454.99 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=55.78;MQ0=0;OQ=728.95;QD=12.57;SB=-369.58 GT:AD:DP:GL:GQ 0/1:31,26:56:-93.05,-16.87,-121.44:99
-chr1 4713977 rs434474 A T 435.77 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.38;MQ0=0;OQ=788.95;QD=11.78;SB=-384.44 GT:AD:DP:GL:GQ 0/1:40,27:64:-101.46,-19.28,-136.23:99
-chr1 4714260 rs428001 G A 188.72 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=394.17;QD=7.58;SB=-208.83 GT:AD:DP:GL:GQ 0/1:37,15:47:-56.86,-14.16,-117.42:99
-chr1 4714368 rs413383 G C 359.15 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=902.57;QD=15.56;SB=-389.66 GT:AD:DP:GL:GQ 0/1:30,28:56:-110.43,-16.89,-123.48:99
-chr1 4714807 rs401110 C T 341.51 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=642.13;QD=13.96;SB=-230.50 GT:AD:DP:GL:GQ 0/1:24,21:44:-80.76,-13.26,-78.68:99
-chr1 4715337 rs434504 G A 250 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.39;MQ0=0;OQ=582.19;QD=15.32;SB=-195.19 GT:AD:DP:GL:GQ 0/1:19,19:36:-72.35,-10.85,-57.76:99
-chr1 4718265 rs423796 G A 245.56 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.32;MQ=58.44;MQ0=0;OQ=1032.37;QD=16.92;SB=-496.08 GT:AD:DP:GL:GQ 0/1:28,33:59:-124.29,-17.77,-98.91:99
-chr1 4718977 rs41511844 A C 15.67 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=3;HaplotypeScore=0.79;MQ=59.53;MQ0=0;OQ=807.51;QD=16.48;SB=-276.90 GT:AD:DP:GL:GQ 0/1:21,28:49:-98.80,-14.76,-77.17:99
-chr1 4719527 rs523141 G A 331.15 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.63;MQ0=1;OQ=362.25;QD=9.29;SB=-60.24 GT:AD:DP:GL:GQ 0/1:25,14:36:-50.35,-10.84,-83.10:99
-chr1 4719663 rs368420 T C 450.85 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=60.00;MQ0=0;OQ=1132.30;QD=16.90;SB=-528.33 GT:AD:DP:GL:GQ 0/1:29,38:66:-136.39,-19.88,-119.33:99
-chr1 4720200 rs34125417 T A 155.86 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=3.33;MQ=59.59;MQ0=0;OQ=796.97;QD=13.51;SB=-224.76 GT:AD:DP:GL:GQ 0/1:29,29:54:-99.25,-16.27,-103.01:99
-chr1 4720659 rs397559 C T 380.37 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.71;MQ0=0;OQ=1207.74;QD=18.87;SB=-534.79 GT:AD:DP:GL:GQ 0/1:27,37:63:-143.05,-18.99,-86.17:99
-chr1 4721157 rs443850 C T 216.92 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=4.76;MQ=59.51;MQ0=0;OQ=1138.02;QD=14.97;SB=-525.69 GT:AD:DP:GL:GQ 0/1:42,34:73:-139.07,-21.99,-142.33:99
-chr1 4721448 rs9426481 G T 366.43 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=988.26;QD=14.53;SB=-519.87 GT:AD:DP:GL:GQ 0/1:35,33:67:-122.29,-20.18,-120.50:99
-chr1 4722600 rs742245 A C 591.38 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1064.86;QD=15.00;SB=-554.90 GT:AD:DP:GL:GQ 0/1:34,37:68:-130.25,-20.48,-117.18:99
-chr1 4722971 rs760815 C A 224.06 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=59.29;MQ0=0;OQ=950.16;QD=16.10;SB=-349.23 GT:AD:DP:GL:GQ 0/1:26,33:58:-115.77,-17.47,-92.37:99
-chr1 4723061 rs2743978 G A 259.98 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=60.00;MQ0=0;OQ=829.12;QD=15.07;SB=-390.87 GT:AD:DP:GL:GQ 0/1:28,27:53:-102.17,-15.97,-92.75:99
-chr1 4723683 rs411832 G C 0.53 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.02;HRun=0;HaplotypeScore=12.73;MQ=59.54;MQ0=0;OQ=809.82;QD=16.20;SB=-394.90 GT:AD:DP:GL:GQ 0/1:25,24:48:-98.44,-14.17,-99.99:99
-chr1 4723923 rs425005 C A 167.26 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=59.70;MQ0=0;OQ=997.52;QD=16.09;SB=-361.25 GT:AD:DP:GL:GQ 0/1:28,34:61:-121.41,-18.38,-98.67:99
-chr1 4724602 rs424723 C T 274.96 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.39;MQ0=0;OQ=1215.08;QD=19.92;SB=-584.11 GT:AD:DP:GL:GQ 0/1:24,36:58:-142.27,-17.47,-75.15:99
-chr1 4725012 rs2743979 G A 336.31 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.68;MQ0=0;OQ=1008.07;QD=17.38;SB=-481.48 GT:AD:DP:GL:GQ 0/1:28,30:57:-121.27,-17.17,-91.06:99
-chr1 4725752 rs57646199 C T 319.32 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1002.06;QD=17.89;SB=-467.46 GT:AD:DP:GL:GQ 0/1:26,30:56:-120.36,-16.87,-93.54:99
-chr1 4725910 rs2802717 C T 220.45 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=59.68;MQ0=0;OQ=1230.52;QD=17.09;SB=-300.80 GT:AD:DP:GL:GQ 0/1:35,36:70:-147.42,-21.09,-124.52:99
-chr1 4725964 rs2802716 C A 41.54 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=4;HaplotypeScore=0.93;MQ=59.48;MQ0=0;OQ=1484.28;QD=18.55;SB=-734.49 GT:AD:DP:GL:GQ 0/1:32,48:80:-175.81,-24.10,-113.80:99
-chr1 4726365 rs9426502 G A 127.06 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.67;MQ0=0;OQ=1140.71;QD=16.53;SB=-410.70 GT:AD:DP:GL:GQ 0/1:35,34:69:-138.14,-20.78,-128.81:99
-chr1 4726520 rs2743980 G A 355.47 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=1.45;MQ=59.68;MQ0=0;OQ=913.23;QD=12.68;SB=-432.39 GT:AD:DP:GL:GQ 0/1:43,29:72:-116.30,-21.69,-156.11:99
-chr1 4726900 rs7548728 G A 477.89 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=780.16;QD=13.69;SB=-340.47 GT:AD:DP:GL:GQ 0/1:32,25:55:-97.88,-16.58,-97.83:99
-chr1 4727923 rs426095 G A 378.93 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.64;MQ0=0;OQ=878.95;QD=13.73;SB=-378.83 GT:AD:DP:GL:GQ 0/1:36,28:61:-109.56,-18.38,-120.39:99
-chr1 4728243 rs396629 C T 353.19 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.62;MQ0=0;OQ=1145.27;QD=18.77;SB=-564.43 GT:AD:DP:GL:GQ 0/1:27,34:61:-136.20,-18.39,-85.13:99
-chr1 4728440 . G A 47.68 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.39;MQ=58.84;MQ0=0;OQ=1100.89;QD=19.66;SB=-554.66 GT:AD:DP:GL:GQ 0/1:23,33:56:-130.25,-16.88,-72.13:99
-chr1 4730266 rs410413 T C 266.24 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=57.84;MQ0=0;OQ=500.27;QD=10.01;SB=-265.95 GT:AD:DP:GL:GQ 0/1:25,25:45:-66.88,-13.57,-94.91:99
-chr1 4730269 rs410414 T C 250.89 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=57.08;MQ0=0;OQ=462.87;QD=9.85;SB=-198.61 GT:AD:DP:GL:GQ 0/1:25,22:45:-63.14,-13.57,-96.77:99
-chr1 4730645 rs395467 A G 11.96 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=4.91;MQ=52.28;MQ0=0;OQ=653.20;QD=9.90;SB=-279.13 GT:AD:DP:GL:GQ 0/1:38,27:64:-87.89,-19.29,-148.52:99
-chr1 4730689 rs9426503 G C 129.77 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.89;MQ=56.81;MQ0=0;OQ=1027.62;QD=14.27;SB=-322.37 GT:AD:DP:GL:GQ 0/1:41,31:67:-126.24,-20.20,-160.02:99
-chr1 4730760 rs9426483 C T 334.33 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.53;MQ=58.90;MQ0=0;OQ=750.53;QD=13.65;SB=-332.36 GT:AD:DP:GL:GQ 0/1:31,24:54:-94.60,-16.27,-107.97:99
-chr1 4730936 rs423285 C T 421.63 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=56.95;MQ0=0;OQ=670.76;QD=11.37;SB=-300.79 GT:AD:DP:GL:GQ 0/1:33,25:55:-86.95,-16.59,-101.75:99
-chr1 4730990 rs395508 G A 57.05 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.76;MQ=59.27;MQ0=0;OQ=529.54;QD=9.29;SB=-260.10 GT:AD:DP:GL:GQ 0/1:38,19:53:-72.20,-15.97,-127.10:99
-chr1 4731053 rs418045 T C 525.89 PASS AC=1;AF=0.50;AN=2;DB;DP=46;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=529.19;QD=11.50;SB=-290.44 GT:AD:DP:GL:GQ 0/1:26,20:45:-69.76,-13.55,-105.89:99
-chr1 4731180 rs396112 G A 318.68 PASS AC=1;AF=0.50;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=740.76;QD=17.64;SB=-379.17 GT:AD:DP:GL:GQ 0/1:19,23:39:-89.12,-11.76,-51.25:99
-chr1 4731341 rs406847 A G 411.20 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.80;MQ0=0;OQ=513.60;QD=14.67;SB=-259.91 GT:AD:DP:GL:GQ 0/1:17,18:35:-65.19,-10.54,-67.57:99
-chr1 4731471 rs428580 C T 186.08 PASS AC=1;AF=0.50;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=867.64;QD=20.18;SB=-459.01 GT:AD:DP:GL:GQ 0/1:17,26:42:-102.70,-12.65,-55.85:99
-chr1 4731684 rs407301 C T 107.33 PASS AC=1;AF=0.50;AN=2;DB;DP=34;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=57.23;MQ0=0;OQ=697.47;QD=20.51;SB=-327.88 GT:AD:DP:GL:GQ 0/1:12,22:33:-82.98,-9.95,-39.91:99
-chr1 4732014 . T A 875.95 Indel AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=12.12;MQ=51.16;MQ0=0;QD=14.13;SB=-350.44 GT:AD:DP:GL:GQ 0/1:31,31:60:-108.95,-18.08,-110.80:99
-chr1 4732015 . T A 970.99 Indel AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=9;HaplotypeScore=12.28;MQ=51.00;MQ0=0;QD=15.92;SB=-364.45 GT:AD:DP:GL:GQ 0/1:29,32:58:-117.85,-17.47,-98.32:99
-chr1 4733241 rs414434 G C 239.58 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1334.69;QD=20.22;SB=-556.62 GT:AD:DP:GL:GQ 0/1:28,38:63:-155.75,-19.00,-107.17:99
-chr1 4734056 rs9426504 G A 5.32 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=4;HaplotypeScore=2.44;MQ=58.18;MQ0=0;OQ=895.74;QD=16.59;SB=-312.82 GT:AD:DP:GL:GQ 0/1:25,29:51:-108.23,-15.38,-75.31:99
-chr1 4734062 rs451162 G C 249.29 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.31;MQ=58.57;MQ0=0;OQ=977.80;QD=18.80;SB=-417.05 GT:AD:DP:GL:GQ 0/1:24,28:49:-115.83,-14.77,-93.28:99
-chr1 4734089 rs388631 T C 200.06 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.48;MQ=59.01;MQ0=0;OQ=598.20;QD=12.73;SB=-188.41 GT:AD:DP:GL:GQ 0/1:21,25:44:-76.37,-13.27,-78.74:99
-chr1 4734466 rs389959 T C 132.65 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.40;MQ=60.00;MQ0=0;OQ=323.31;QD=6.22;SB=-138.87 GT:AD:DP:GL:GQ 0/1:33,18:48:-50.08,-14.47,-128.38:99
-chr1 4734711 rs397852 T C 337.97 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=1.07;MQ=60.00;MQ0=0;OQ=458.03;QD=9.35;SB=-228.25 GT:AD:DP:GL:GQ 0/1:29,20:49:-63.86,-14.77,-115.16:99
-chr1 4735235 rs399377 T C 222.18 PASS AC=1;AF=0.50;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=339.75;QD=9.71;SB=-124.62 GT:AD:DP:GL:GQ 0/1:21,14:33:-47.20,-9.94,-76.89:99
-chr1 4735981 rs394594 A G 305.79 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=773.72;QD=10.46;SB=-332.92 GT:AD:DP:GL:GQ 0/1:41,33:73:-102.66,-22.01,-163.48:99
-chr1 4738101 rs414909 C T 441.62 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1084.42;QD=16.19;SB=-452.94 GT:AD:DP:GL:GQ 0/1:35,32:67:-131.91,-20.18,-129.56:99
-chr1 4738908 rs381304 A G 65.84 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=2.37;MQ=58.77;MQ0=0;OQ=1458.03;QD=16.76;SB=-529.55 GT:AD:DP:GL:GQ 0/1:36,51:84:-174.40,-25.31,-140.93:99
-chr1 4739028 rs392984 T C 105.21 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=5.08;MQ=58.80;MQ0=0;OQ=588.16;QD=10.14;SB=-181.39 GT:AD:DP:GL:GQ 0/1:30,28:53:-78.07,-15.97,-115.29:99
-chr1 4739512 rs2802719 A G 384.48 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.81;MQ0=0;OQ=757.23;QD=14.85;SB=-244.45 GT:AD:DP:GL:GQ 0/1:23,28:48:-93.47,-14.47,-78.98:99
-chr1 4739710 rs2802718 G C 11.18 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=3;HaplotypeScore=0.83;MQ=56.67;MQ0=0;OQ=1199.49;QD=18.74;SB=-370.48 GT:AD:DP:GL:GQ 0/1:31,33:60:-141.32,-18.09,-113.09:99
-chr1 4740018 rs7544523 T C 161.93 PASS AC=1;AF=0.50;AN=2;DB;DP=36;Dels=0.00;HRun=0;HaplotypeScore=2.09;MQ=58.16;MQ0=0;OQ=429.98;QD=11.94;SB=-175.51 GT:AD:DP:GL:GQ 0/1:18,18:35:-56.83,-10.55,-68.38:99
-chr1 4744236 rs9426506 C T 327.10 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.29;MQ=58.57;MQ0=0;OQ=856.13;QD=13.81;SB=-428.92 GT:AD:DP:GL:GQ 0/1:35,27:62:-107.57,-18.68,-125.85:99
-chr1 4744972 rs9426484 G A 347.64 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.65;MQ0=0;OQ=799.48;QD=12.30;SB=-407.88 GT:AD:DP:GL:GQ 0/1:38,27:60:-101.32,-18.09,-111.41:99
-chr1 4745752 rs6426434 G A 271.15 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=60.00;MQ0=0;OQ=1169.68;QD=19.49;SB=-538.80 GT:AD:DP:GL:GQ 0/1:24,36:57:-137.43,-17.18,-72.34:99
-chr1 4747705 rs4654460 G A 332.93 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=755.91;QD=18.90;SB=-379.91 GT:AD:DP:GL:GQ 0/1:17,23:38:-90.34,-11.46,-46.09:99
-chr1 4748668 rs12133924 A G 455.19 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1019.13;QD=13.07;SB=-468.04 GT:AD:DP:GL:GQ 0/1:42,36:77:-128.39,-23.20,-162.75:99
-chr1 4748969 rs6701069 A G 376.11 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.72;MQ0=0;OQ=1003.27;QD=12.39;SB=-469.20 GT:AD:DP:GL:GQ 0/1:46,35:80:-127.71,-24.10,-182.44:99
-chr1 4749244 rs2235438 T C 581.54 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=891.88;QD=13.12;SB=-467.00 GT:AD:DP:GL:GQ 0/1:32,36:65:-112.06,-19.59,-124.79:99
-chr1 4750683 rs909757 T C 410.80 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.22;MQ0=0;OQ=683.00;QD=11.78;SB=-347.56 GT:AD:DP:GL:GQ 0/1:31,27:55:-88.15,-16.57,-119.32:99
-chr1 4751405 rs17345239 T G 179.05 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=774.24;QD=13.12;SB=-344.85 GT:AD:DP:GL:GQ 0/1:30,29:56:-97.57,-16.87,-106.85:99
-chr1 4753272 rs742246 A C 355.98 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=617.26;QD=14.03;SB=-196.34 GT:AD:DP:GL:GQ 0/1:21,23:43:-77.96,-12.95,-77.17:99
-chr1 4753548 rs932350 T C 408.09 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.22;MQ0=0;OQ=924.37;QD=14.22;SB=-295.30 GT:AD:DP:GL:GQ 0/1:29,36:64:-115.01,-19.29,-116.32:99
-chr1 4753607 rs12082538 G C 138.47 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=3.84;MQ=60.48;MQ0=0;OQ=606.35;QD=13.47;SB=-132.52 GT:AD:DP:GL:GQ 0/1:25,20:43:-76.88,-12.96,-107.57:99
-chr1 4753770 rs7519688 C T 2.09 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=3;HaplotypeScore=5.33;MQ=59.09;MQ0=0;OQ=802.41;QD=15.73;SB=-282.79 GT:AD:DP:GL:GQ 0/1:25,26:48:-97.99,-14.47,-73.03:99
-chr1 4755384 rs727906 C T 371.77 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.67;MQ=60.00;MQ0=0;OQ=954.50;QD=12.40;SB=-422.82 GT:AD:DP:GL:GQ 0/1:47,30:76:-121.64,-22.91,-153.23:99
-chr1 4756029 rs2411946 T A 426.26 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.59;MQ0=0;OQ=610.43;QD=13.57;SB=-308.69 GT:AD:DP:GL:GQ 0/1:23,22:44:-77.58,-13.26,-87.22:99
-chr1 4756791 rs760816 A G 307.58 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=2.08;MQ=60.00;MQ0=0;OQ=644.43;QD=11.51;SB=-270.35 GT:AD:DP:GL:GQ 0/1:29,27:54:-84.00,-16.27,-113.95:99
-chr1 4758251 . A G 4.99 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=3;HaplotypeScore=0.95;MQ=59.34;MQ0=1;OQ=796.90;QD=10.77;SB=-383.18 GT:AD:DP:GL:GQ 0/1:42,32:64:-102.26,-19.28,-139.02:99
-chr1 4758268 rs4654606 T G 84.96 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.06;MQ=59.35;MQ0=0;OQ=681.65;QD=10.65;SB=-311.85 GT:AD:DP:GL:GQ 0/1:38,26:61:-89.83,-18.38,-124.54:99
-chr1 4759471 rs2142949 C T 488.93 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=986.38;QD=17.01;SB=-326.41 GT:AD:DP:GL:GQ 0/1:27,31:57:-119.09,-17.17,-96.06:99
-chr1 4761020 rs4654607 C T 187.79 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=1317.32;QD=16.67;SB=-650.17 GT:AD:DP:GL:GQ 0/1:40,39:77:-158.21,-23.19,-137.71:99
-chr1 4763236 rs2064168 C T 278.30 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1185.65;QD=19.12;SB=-513.73 GT:AD:DP:GL:GQ 0/1:25,37:60:-139.92,-18.08,-90.33:99
-chr1 4763773 rs760817 T C 455.12 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.94;MQ=59.11;MQ0=0;OQ=932.67;QD=12.78;SB=-440.55 GT:AD:DP:GL:GQ 0/1:40,33:73:-118.54,-21.99,-163.26:99
-chr1 4764845 rs10915606 A G 585.97 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1075.05;QD=14.15;SB=-528.93 GT:AD:DP:GL:GQ 0/1:37,39:74:-133.08,-22.29,-148.56:99
-chr1 4765718 rs10429868 G A 452.05 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1155.78;QD=15.62;SB=-602.60 GT:AD:DP:GL:GQ 0/1:39,35:74:-141.15,-22.29,-141.78:99
-chr1 4766001 rs12022466 T A 597.92 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1259.06;QD=15.94;SB=-558.66 GT:AD:DP:GL:GQ 0/1:39,40:79:-152.98,-23.79,-151.51:99
-chr1 4766045 . G A 13.96 PASS AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1207.52;QD=14.55;SB=-582.08 GT:AD:DP:GL:GQ 0/1:47,36:81:-148.43,-24.40,-164.42:99
-chr1 4766280 rs12752806 G T 477.99 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.50;MQ0=0;OQ=1250.24;QD=15.06;SB=-480.84 GT:AD:DP:GL:GQ 0/1:42,41:81:-152.70,-24.39,-146.62:99
-chr1 4767409 rs7534770 A T 437.84 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1042.20;QD=14.28;SB=-531.39 GT:AD:DP:GL:GQ 0/1:39,34:72:-129.19,-21.69,-145.29:99
-chr1 4767544 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=6;HaplotypeScore=47.32;MQ=56.17;MQ0=2;OQ=190.67;QD=2.98;SB=86.31 GT:AD:DP:GL:GQ 0/1:48,16:57:-39.52,-17.17,-173.24:99
-chr1 4769118 rs10915610 A C 208.85 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=4.78;MQ=58.87;MQ0=0;OQ=1164.63;QD=14.93;SB=-551.67 GT:AD:DP:GL:GQ 0/1:37,39:77:-145.10,-25.36,-142.76:99
-chr1 4770972 . C A 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=59;Dels=0.00;HRun=2;HaplotypeScore=8.28;MQ=56.35;MQ0=0;OQ=111.37;QD=1.89;SB=65.23 GT:AD:DP:GL:GQ 0/1:35,24:40:-26.47,-12.05,-113.84:99
-chr1 4771531 rs1118009 A G 323.35 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=56.74;MQ0=0;OQ=1333.25;QD=15.32;SB=-605.42 GT:AD:DP:GL:GQ 0/1:38,49:86:-162.53,-25.92,-151.96:99
-chr1 4771617 rs1118010 C T 407.70 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=60.00;MQ0=0;OQ=1431.00;QD=18.58;SB=-550.33 GT:AD:DP:GL:GQ 0/1:34,43:77:-169.58,-23.20,-123.43:99
-chr1 4772431 rs10799262 G A 68.65 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=0.32;MQ=59.76;MQ0=0;OQ=1610.76;QD=20.65;SB=-755.30 GT:AD:DP:GL:GQ 0/1:32,46:78:-187.86,-23.50,-115.14:99
-chr1 4772511 rs10915611 C T 585.75 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1219.72;QD=17.42;SB=-547.54 GT:AD:DP:GL:GQ 0/1:34,36:70:-146.34,-21.08,-121.82:99
-chr1 4772916 rs10915612 A G 195.17 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=58.68;MQ0=0;OQ=1058.43;QD=15.80;SB=-539.98 GT:AD:DP:GL:GQ 0/1:30,37:67:-129.31,-20.19,-122.36:99
-chr1 4773270 rs7540367 G A 242.80 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.44;MQ0=0;OQ=792.22;QD=13.66;SB=-213.92 GT:AD:DP:GL:GQ 0/1:33,25:57:-99.68,-17.18,-105.56:99
-chr1 4773658 . G A 112.25 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.50;MQ0=0;OQ=985.30;QD=17.59;SB=-495.06 GT:AD:DP:GL:GQ 0/1:26,30:55:-118.38,-16.57,-94.83:99
-chr1 4773754 rs12120205 T A 372.54 PASS AC=1;AF=0.50;AN=2;DB;DP=98;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1585.82;QD=16.18;SB=-556.42 GT:AD:DP:GL:GQ 0/1:49,49:98:-191.38,-29.51,-188.67:99
-chr1 4774287 rs10799263 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=7;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1045.47;QD=15.84;SB=-449.52 GT:AD:DP:GL:GQ 0/1:30,36:65:-127.41,-19.58,-109.32:99
-chr1 4774365 rs10915613 G A 361.24 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1223.17;QD=16.31;SB=-630.64 GT:AD:DP:GL:GQ 0/1:38,37:73:-147.61,-22.01,-118.37:99
-chr1 4776755 rs12145180 C G 356.13 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=2.24;MQ=59.64;MQ0=0;OQ=975.57;QD=15.24;SB=-415.28 GT:AD:DP:GL:GQ 0/1:32,32:62:-119.54,-18.70,-139.99:99
-chr1 4776903 rs10915615 C A 330.11 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=59.69;MQ0=0;OQ=909.18;QD=12.12;SB=-404.10 GT:AD:DP:GL:GQ 0/1:43,32:72:-115.90,-21.70,-128.82:99
-chr1 4777460 rs12118812 T G 167.49 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=842.15;QD=11.86;SB=-431.75 GT:AD:DP:GL:GQ 0/1:41,30:70:-108.58,-21.08,-144.58:99
-chr1 4777525 rs12118818 T G 101.66 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=1.33;MQ=59.72;MQ0=0;OQ=940.16;QD=13.63;SB=-473.22 GT:AD:DP:GL:GQ 0/1:36,33:67:-117.48,-20.18,-125.31:99
-chr1 4777535 rs12143219 G T 70.17 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=4;HaplotypeScore=0.27;MQ=60.00;MQ0=0;OQ=1005.40;QD=15.47;SB=-447.46 GT:AD:DP:GL:GQ 0/1:32,33:65:-123.40,-19.58,-114.32:99
-chr1 4778731 rs1120120 C T 347.86 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=1.94;MQ=59.78;MQ0=0;OQ=1277.01;QD=15.02;SB=-471.94 GT:AD:DP:GL:GQ 0/1:47,38:84:-156.28,-25.30,-171.76:99
-chr1 4780340 rs10915616 C T 196.28 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=881.43;QD=16.95;SB=-113.96 GT:AD:DP:GL:GQ 0/1:26,26:52:-107.09,-15.66,-92.07:99
-chr1 4780435 rs12121890 T C 347.71 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.79;MQ=59.73;MQ0=0;OQ=1105.50;QD=16.26;SB=-426.60 GT:AD:DP:GL:GQ 0/1:30,38:67:-134.02,-20.18,-117.11:99
-chr1 4781127 rs12122126 T C 314.12 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.69;MQ0=0;OQ=674.99;QD=13.50;SB=-298.62 GT:AD:DP:GL:GQ 0/1:26,24:49:-85.54,-14.76,-106.72:99
-chr1 4781899 rs12117810 G A 242.85 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=58.88;MQ0=0;OQ=1031.36;QD=17.78;SB=-437.45 GT:AD:DP:GL:GQ 0/1:28,30:56:-123.30,-16.88,-83.86:99
-chr1 4782182 rs10915619 A T 438.63 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=58.65;MQ0=0;OQ=1009.97;QD=12.47;SB=-431.43 GT:AD:DP:GL:GQ 0/1:47,34:80:-128.38,-24.10,-172.98:99
-chr1 4782516 rs1883345 G A 146.28 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.45;MQ0=0;OQ=906.47;QD=11.93;SB=-338.27 GT:AD:DP:GL:GQ 0/1:44,32:71:-115.32,-21.39,-152.63:99
-chr1 4782885 rs1883346 T A 397.96 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.70;MQ=58.75;MQ0=0;OQ=1064.02;QD=14.99;SB=-456.50 GT:AD:DP:GL:GQ 0/1:37,34:70:-130.77,-21.08,-141.61:99
-chr1 4782955 rs1883347 T C 221.56 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=4.24;MQ=59.50;MQ0=0;OQ=856.09;QD=11.57;SB=-450.96 GT:AD:DP:GL:GQ 0/1:43,30:73:-110.88,-21.99,-176.74:99
-chr1 4783491 rs4654610 T C 960.35 Indel AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=11.46;MQ=47.61;MQ0=0;QD=14.12;SB=-407.25 GT:AD:DP:GL:GQ 0/1:31,37:63:-118.30,-18.98,-112.03:99
-chr1 4793106 rs61766789 G A 240.39 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.34;MQ=58.98;MQ0=1;OQ=1230.74;QD=17.33;SB=-554.58 GT:AD:DP:GL:GQ 0/1:35,36:69:-147.14,-20.78,-120.71:99
-chr1 4794663 . C T 274.23 PASS AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.43;MQ0=0;OQ=833.44;QD=12.63;SB=-440.37 GT:AD:DP:GL:GQ 0/1:40,26:66:-106.51,-19.88,-144.25:99
-chr1 4794952 rs12074481 C A 271.91 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=57.82;MQ0=0;OQ=1066.30;QD=15.02;SB=-452.97 GT:AD:DP:GL:GQ 0/1:33,38:69:-130.70,-20.79,-110.83:99
-chr1 4798693 rs7522386 A G 341.25 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.98;MQ=58.39;MQ0=0;OQ=1056.56;QD=15.77;SB=-495.12 GT:AD:DP:GL:GQ 0/1:31,36:65:-128.52,-19.58,-122.92:99
-chr1 4801597 rs7527319 C A 582.07 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=923.07;QD=13.78;SB=-344.17 GT:AD:DP:GL:GQ 0/1:34,33:66:-115.47,-19.88,-121.89:99
-chr1 4806096 rs7547779 T C 457.63 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.53;MQ0=0;OQ=897.02;QD=13.39;SB=-364.21 GT:AD:DP:GL:GQ 0/1:34,33:65:-112.57,-19.58,-135.93:99
-chr1 4807563 rs11582327 T C 467.91 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.73;MQ0=0;OQ=911.00;QD=13.40;SB=-422.86 GT:AD:DP:GL:GQ 0/1:32,36:67:-114.58,-20.19,-127.73:99
-chr1 4807672 rs7536960 T C 326.99 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=60.00;MQ0=0;OQ=720.71;QD=12.64;SB=-286.29 GT:AD:DP:GL:GQ 0/1:27,30:55:-91.93,-16.58,-105.91:99
-chr1 4808516 rs6669130 G A 323.43 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=59.98;MQ0=0;OQ=1529.46;QD=17.58;SB=-724.76 GT:AD:DP:GL:GQ 0/1:42,45:83:-181.23,-25.00,-146.35:99
-chr1 4808719 . T G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=2;HaplotypeScore=4.69;MQ=58.91;MQ0=0;OQ=57.76;QD=0.90;SB=95.29 GT:AD:DP:GL:GQ 0/1:40,24:48:-23.52,-14.46,-139.84:90.60
-chr1 4808761 rs6683849 A G 156.55 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=737.58;QD=13.17;SB=-272.54 GT:AD:DP:GL:GQ 0/1:30,26:56:-93.91,-16.87,-119.65:99
-chr1 4808953 rs12725011 G A 96.81 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=3;HaplotypeScore=1.25;MQ=59.67;MQ0=0;OQ=1362.18;QD=19.46;SB=-645.68 GT:AD:DP:GL:GQ 0/1:29,41:69:-160.29,-20.79,-101.64:99
-chr1 4808976 rs11582462 A G 74 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=3.61;MQ=59.32;MQ0=0;OQ=923.86;QD=13.59;SB=-481.59 GT:AD:DP:GL:GQ 0/1:33,35:64:-114.94,-19.28,-135.51:99
-chr1 4809567 rs11582936 A C 302.66 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.32;MQ=59.67;MQ0=0;OQ=605.80;QD=10.63;SB=-281.94 GT:AD:DP:GL:GQ 0/1:26,30:52:-79.53,-15.67,-97.13:99
-chr1 4809668 rs7543326 T C 173.23 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=2;HaplotypeScore=1.68;MQ=59.71;MQ0=0;OQ=1092.10;QD=13.82;SB=-474.60 GT:AD:DP:GL:GQ 0/1:37,42:79:-136.31,-23.81,-148.02:99
-chr1 4811032 rs6693945 T C 292.95 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=59.41;MQ0=0;OQ=916.53;QD=14.55;SB=-321.25 GT:AD:DP:GL:GQ 0/1:30,31:62:-117.13,-22.19,-125.33:99
-chr1 4811983 rs2209167 G A 414.43 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=59.70;MQ0=0;OQ=1021.76;QD=13.10;SB=-414.40 GT:AD:DP:GL:GQ 0/1:45,33:75:-128.08,-22.62,-135.03:99
-chr1 4813003 rs6426439 C T 133.12 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=3.37;MQ=59.50;MQ0=0;OQ=1367.37;QD=18.48;SB=-705.27 GT:AD:DP:GL:GQ 0/1:34,40:72:-161.71,-21.69,-122.06:99
-chr1 4813419 rs1886113 T G 294.59 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=612.34;QD=12.76;SB=-248.40 GT:AD:DP:GL:GQ 0/1:25,23:47:-78.67,-14.15,-95.57:99
-chr1 4813733 rs10915628 T C 146.41 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=870.49;QD=12.26;SB=-270.52 GT:AD:DP:GL:GQ 0/1:41,30:71:-111.72,-21.39,-167.00:99
-chr1 4813800 rs10915631 C T 467.08 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=60.00;MQ0=0;OQ=1109.44;QD=15.20;SB=-509.01 GT:AD:DP:GL:GQ 0/1:39,34:73:-136.22,-21.99,-139.36:99
-chr1 4813826 rs10799266 A G 440.81 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=1025.69;QD=13.50;SB=-528.56 GT:AD:DP:GL:GQ 0/1:40,36:76:-128.75,-22.90,-159.57:99
-chr1 4814770 rs6426440 C A 361.03 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=60.00;MQ0=0;OQ=964.05;QD=12.68;SB=-378.13 GT:AD:DP:GL:GQ 0/1:42,34:76:-122.59,-22.91,-131.06:99
-chr1 4814802 rs6426441 A T 191.96 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=5.04;MQ=59.57;MQ0=0;OQ=882.35;QD=13.17;SB=-416.80 GT:AD:DP:GL:GQ 0/1:37,30:65:-111.10,-19.58,-134.21:99
-chr1 4815146 rs2411949 G T 0.34 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=15.15;MQ=59.31;MQ0=0;OQ=1233.12;QD=16.23;SB=-582.79 GT:AD:DP:GL:GQ 0/1:35,40:72:-148.29,-21.69,-101.37:99
-chr1 4815330 rs6658680 A G 154.72 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=57.17;MQ0=0;OQ=454.29;QD=9.09;SB=-126.50 GT:AD:DP:GL:GQ 0/1:29,21:47:-62.88,-14.17,-108.85:99
-chr1 4815340 rs6692964 G T 169.92 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=56.50;MQ0=0;OQ=607.11;QD=11.90;SB=-203.41 GT:AD:DP:GL:GQ 0/1:29,22:51:-79.35,-15.36,-103.70:99
-chr1 4815344 rs6692966 G A 446.58 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.57;MQ0=0;OQ=669.90;QD=12.88;SB=-297.81 GT:AD:DP:GL:GQ 0/1:28,24:50:-85.35,-15.08,-90.67:99
-chr1 4815634 rs2147028 C A 82.12 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=1.79;MQ=59.43;MQ0=0;OQ=1001.39;QD=15.41;SB=-277.32 GT:AD:DP:GL:GQ 0/1:32,33:62:-122.10,-18.67,-102.09:99
-chr1 4815904 rs2209166 G A 117.08 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=60.00;MQ0=0;OQ=1754.50;QD=22.21;SB=-892.01 GT:AD:DP:GL:GQ 0/1:28,51:79:-202.53,-23.80,-99.82:99
-chr1 4816064 rs6693706 G T 446.40 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.64;MQ0=0;OQ=733.52;QD=14.11;SB=-350.37 GT:AD:DP:GL:GQ 0/1:26,26:52:-92.30,-15.67,-93.55:99
-chr1 4816465 rs1535736 C T 112.29 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=1112.33;QD=17.38;SB=-338.80 GT:AD:DP:GL:GQ 0/1:31,33:64:-133.80,-19.28,-110.54:99
-chr1 4816766 rs1535734 A G 420.29 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=908.64;QD=12.62;SB=-359.52 GT:AD:DP:GL:GQ 0/1:39,33:70:-115.23,-21.09,-156.36:99
-chr1 4817101 rs6693352 A G 227.39 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=3.08;MQ=59.68;MQ0=0;OQ=949.71;QD=13.19;SB=-443.55 GT:AD:DP:GL:GQ 0/1:38,34:70:-119.35,-21.09,-147.05:99
-chr1 4817128 rs2898848 G A 216.99 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=1195.65;QD=16.61;SB=-558.57 GT:AD:DP:GL:GQ 0/1:36,36:72:-144.54,-21.69,-131.83:99
-chr1 4817320 rs2209165 C T 145.82 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.39;MQ0=0;OQ=1415.52;QD=20.82;SB=-731.10 GT:AD:DP:GL:GQ 0/1:27,41:68:-165.32,-20.49,-90.68:99
-chr1 4817405 rs2209164 A G 118.02 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.63;MQ0=0;OQ=527.84;QD=8.51;SB=-187.44 GT:AD:DP:GL:GQ 0/1:40,22:60:-74.14,-18.07,-157.62:99
-chr1 4817514 rs2209163 G A 238.41 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.72;MQ0=0;OQ=933.49;QD=13.93;SB=-217.50 GT:AD:DP:GL:GQ 0/1:38,29:66:-116.53,-19.90,-117.09:99
-chr1 4817749 rs3938469 A G 107.60 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=486.41;QD=8.11;SB=-117.18 GT:AD:DP:GL:GQ 0/1:41,19:60:-70.00,-18.07,-168.54:99
-chr1 4817969 rs2093769 G A 229.16 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.14;MQ=59.44;MQ0=0;OQ=1190.09;QD=14.51;SB=-381.33 GT:AD:DP:GL:GQ 0/1:44,38:79:-146.09,-23.80,-153.77:99
-chr1 4818044 rs2093768 A G 314.22 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.33;MQ0=0;OQ=811.36;QD=13.09;SB=-280.55 GT:AD:DP:GL:GQ 0/1:29,33:61:-102.81,-18.39,-114.06:99
-chr1 4818509 rs10159142 G A 308.93 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.55;MQ=58.95;MQ0=0;OQ=899.59;QD=15.51;SB=-448.42 GT:AD:DP:GL:GQ 0/1:30,28:58:-110.72,-17.47,-107.08:99
-chr1 4818666 rs10799268 T C 278.30 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=59.42;MQ0=0;OQ=887.47;QD=13.87;SB=-404.24 GT:AD:DP:GL:GQ 0/1:33,31:62:-110.70,-18.67,-130.15:99
-chr1 4818872 rs10753387 T C 88.47 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.63;MQ=55.54;MQ0=0;OQ=718.25;QD=13.30;SB=-324.13 GT:AD:DP:GL:GQ 0/1:25,29:53:-91.08,-15.98,-99.45:99
-chr1 4819100 rs10753388 G A 0.17 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=17.64;MQ=55.33;MQ0=0;OQ=1324.27;QD=17.66;SB=-679.33 GT:AD:DP:GL:GQ 0/1:36,39:70:-156.80,-21.09,-111.06:99
-chr1 4819163 rs10753389 A G 70.61 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=49.63;MQ0=1;OQ=764.05;QD=12.53;SB=-256.89 GT:AD:DP:GL:GQ 0/1:33,28:59:-97.46,-17.77,-133.52:99
-chr1 4819348 rs10915632 G A 8.54 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=2;HaplotypeScore=6.46;MQ=58.48;MQ0=0;OQ=1415.77;QD=15.91;SB=-658.28 GT:AD:DP:GL:GQ 0/1:47,42:87:-171.06,-26.20,-164.95:99
-chr1 4819622 rs10799269 C G 347.45 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=59.05;MQ0=0;OQ=934.79;QD=12.98;SB=-429.59 GT:AD:DP:GL:GQ 0/1:41,31:69:-117.56,-20.80,-181.53:99
-chr1 4819655 rs10799270 G A 353.44 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.56;MQ0=0;OQ=1064.88;QD=14.39;SB=-436.38 GT:AD:DP:GL:GQ 0/1:41,33:74:-132.06,-22.29,-148.73:99
-chr1 4819737 rs2147027 T C 200.63 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.22;MQ=55.94;MQ0=0;OQ=778.52;QD=14.69;SB=-321.29 GT:AD:DP:GL:GQ 0/1:25,28:51:-96.50,-15.36,-95.69:99
-chr1 4820060 rs2181701 T C 0.91 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=11.39;MQ=52.25;MQ0=0;OQ=485.51;QD=9.52;SB=-244.48 GT:AD:DP:GL:GQ 0/1:29,22:49:-66.61,-14.77,-110.48:99
-chr1 4820091 rs4265399 G A 243.46 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=50.14;MQ0=0;OQ=512.92;QD=10.06;SB=-45.99 GT:AD:DP:GL:GQ 0/1:32,19:48:-69.05,-14.48,-96.83:99
-chr1 4820096 rs2181700 T G 75.96 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=50.99;MQ0=0;OQ=433.90;QD=8.34;SB=-40.01 GT:AD:DP:GL:GQ 0/1:33,19:51:-62.03,-15.36,-122.01:99
-chr1 4820154 rs9725470 C T 281.54 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=47.90;MQ0=2;OQ=495.62;QD=9.01;SB=-102.52 GT:AD:DP:GL:GQ 0/1:37,18:51:-68.22,-15.38,-108.69:99
-chr1 4820216 rs9726479 T G 79.72 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=1.15;MQ=45.62;MQ0=0;OQ=697.41;QD=12.24;SB=-299.44 GT:AD:DP:GL:GQ 0/1:30,27:55:-89.59,-16.56,-110.14:99
-chr1 4820227 rs9725796 C A 40.52 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=3;HaplotypeScore=0.33;MQ=47.59;MQ0=0;OQ=717.90;QD=11.58;SB=-300.16 GT:AD:DP:GL:GQ 0/1:34,28:59:-92.84,-17.77,-118.69:99
-chr1 4820388 rs9726805 T C 201.46 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=2.98;MQ=51.02;MQ0=0;OQ=985.45;QD=12.17;SB=-457.03 GT:AD:DP:GL:GQ 0/1:42,39:76:-124.72,-22.89,-168.04:99
-chr1 4820748 . A G 1.13 PASS AC=1;AF=0.50;AN=2;DP=50;Dels=0.00;HRun=0;HaplotypeScore=3.54;MQ=35.53;MQ0=6;OQ=268.28;QD=5.37;SB=-1.83 GT:AD:DP:GL:GQ 0/1:28,21:34:-40.35,-10.24,-88.65:99
-chr1 4820850 . T C 0.21 PASS AC=1;AF=0.50;AN=2;DP=27;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=43.66;MQ0=1;OQ=84.14;QD=3.12;SB=-53.32 GT:AD:DP:GL:GQ 0/1:14,12:16:-16.52,-4.83,-39.77:99
-chr1 4820858 . G A 0.93 PASS AC=1;AF=0.50;AN=2;DP=29;Dels=0.00;HRun=0;HaplotypeScore=4.23;MQ=41.11;MQ0=1;OQ=153.45;QD=5.29;SB=-40.65 GT:AD:DP:GL:GQ 0/1:13,15:17:-23.75,-5.12,-38.01:99
-chr1 4820952 rs61766808 C T 152.82 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=38.70;MQ0=1;OQ=409.25;QD=9.09;SB=-225.93 GT:AD:DP:GL:GQ 0/1:30,15:42:-56.86,-12.66,-95.36:99
-chr1 4821240 rs9726227 C T 470.14 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=37.63;MQ0=1;OQ=887.90;QD=12.87;SB=-408.68 GT:AD:DP:GL:GQ 0/1:36,33:62:-110.75,-18.67,-130.57:99
-chr1 4821376 rs9726241 C A 8.68 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=39.07;MQ0=5;OQ=305.92;QD=4.86;SB=-1.55 GT:AD:DP:GL:GQ 0/1:37,26:47:-48.04,-14.16,-121.88:99
-chr1 4821609 rs9726885 A C 47.17 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=36.89;MQ0=14;OQ=448.17;QD=5.67;SB=-207.28 GT:AD:DP:GL:GQ 0/1:47,32:61:-66.47,-18.37,-159.23:99
-chr1 4821773 rs9726925 A G 101.03 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=38.22;MQ0=2;OQ=859.75;QD=9.35;SB=-417.48 GT:AD:DP:GL:GQ 0/1:47,45:74:-111.55,-22.29,-173.37:99
-chr1 4821818 rs12135318 C A 320.75 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=44.85;MQ0=0;OQ=1111.50;QD=12.21;SB=-470.83 GT:AD:DP:GL:GQ 0/1:41,50:79:-138.22,-23.79,-149.34:99
-chr1 4821875 rs10915634 A G 55.48 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=46.72;MQ0=5;OQ=657.16;QD=7.64;SB=-166.48 GT:AD:DP:GL:GQ 0/1:46,40:75:-91.61,-22.61,-188.45:99
-chr1 4822060 rs7411909 A G 472.44 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.58;MQ0=0;OQ=844.08;QD=14.07;SB=-331.93 GT:AD:DP:GL:GQ 0/1:31,29:60:-105.77,-18.08,-125.13:99
-chr1 4822115 rs4617370 G A 221.57 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=59.00;MQ0=0;OQ=1387.37;QD=17.13;SB=-675.38 GT:AD:DP:GL:GQ 0/1:40,41:81:-166.44,-24.42,-127.76:99
-chr1 4822681 rs6660173 C T 0.10 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.01;HRun=3;HaplotypeScore=10.96;MQ=52.45;MQ0=0;OQ=1014.70;QD=13.71;SB=-426.92 GT:AD:DP:GL:GQ 0/1:42,31:73:-126.44,-21.69,-150.88:99
-chr1 4822687 rs6660177 C A 163.11 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=4.00;MQ=52.56;MQ0=0;OQ=900.97;QD=12.01;SB=-430.11 GT:AD:DP:GL:GQ 0/1:44,31:74:-115.67,-22.28,-156.45:99
-chr1 4822710 rs6668068 T C 72.65 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=2.96;MQ=50.82;MQ0=0;OQ=906.69;QD=11.78;SB=-477.93 GT:AD:DP:GL:GQ 0/1:44,33:75:-116.54,-22.59,-176.01:99
-chr1 4822958 rs6665282 A G 464.18 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.16;MQ0=0;OQ=785.44;QD=13.78;SB=-331.28 GT:AD:DP:GL:GQ 0/1:30,27:57:-99.00,-17.17,-122.67:99
-chr1 4823049 rs6665388 A G 56.61 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=2.47;MQ=55.61;MQ0=0;OQ=907.22;QD=12.60;SB=-445.14 GT:AD:DP:GL:GQ 0/1:36,36:67:-114.19,-20.18,-139.94:99
-chr1 4823137 rs12087020 A G 358.36 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=54.38;MQ0=0;OQ=1125.73;QD=15.86;SB=-588.93 GT:AD:DP:GL:GQ 0/1:32,39:69:-136.64,-20.78,-130.19:99
-chr1 4823207 rs10915638 C T 285.22 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=57.74;MQ0=0;OQ=1338.14;QD=15.93;SB=-487.03 GT:AD:DP:GL:GQ 0/1:44,40:82:-161.79,-24.70,-152.84:99
-chr1 4823247 rs10915639 C T 70.93 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=3;HaplotypeScore=1.40;MQ=59.24;MQ0=0;OQ=1272.31;QD=17.19;SB=-602.12 GT:AD:DP:GL:GQ 0/1:37,37:73:-152.51,-22.00,-119.03:99
-chr1 4823334 rs10915640 G T 485.36 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.40;MQ0=0;OQ=978.54;QD=13.05;SB=-397.99 GT:AD:DP:GL:GQ 0/1:40,35:71:-122.52,-21.38,-136.84:99
-chr1 4823422 rs10915641 G A 453.84 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=45.14;MQ0=3;OQ=955.26;QD=11.79;SB=-332.42 GT:AD:DP:GL:GQ 0/1:46,35:73:-120.80,-21.99,-150.35:99
-chr1 4824006 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=60;Dels=0.03;HRun=20;HaplotypeScore=17.44;MQ=44.47;MQ0=0;OQ=216.45;QD=3.61;SB=56.16 GT:AD:DP:GL:GQ 0/1:34,24:43:-37.29,-12.36,-108.08:99
-chr1 4824255 rs6656943 G A 241.34 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=48.13;MQ0=0;OQ=486.99;QD=9.37;SB=-207.48 GT:AD:DP:GL:GQ 0/1:29,22:45:-65.55,-13.57,-87.60:99
-chr1 4824523 rs6674586 T A 163.54 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=48.28;MQ0=0;OQ=656.95;QD=12.17;SB=-109.40 GT:AD:DP:GL:GQ 0/1:27,27:47:-83.14,-14.16,-95.96:99
-chr1 4824573 rs6674680 T C 13.56 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=52.32;MQ0=0;OQ=270.57;QD=5.11;SB=-156.88 GT:AD:DP:GL:GQ 0/1:35,18:46:-44.20,-13.86,-137.80:99
-chr1 4824574 . G A 7.24 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=52.42;MQ0=0;OQ=361.86;QD=6.83;SB=-143.57 GT:AD:DP:GL:GQ 0/1:34,19:46:-53.32,-13.85,-117.68:99
-chr1 4824682 rs12135493 G A 249.33 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=51.42;MQ0=1;OQ=988.12;QD=12.83;SB=-444.35 GT:AD:DP:GL:GQ 0/1:44,32:73:-124.08,-21.99,-153.59:99
-chr1 4824703 rs6671779 A G 149.25 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=3.56;MQ=45.45;MQ0=6;OQ=857.95;QD=10.46;SB=-366.21 GT:AD:DP:GL:GQ 0/1:48,33:70:-110.16,-21.08,-158.61:99
-chr1 4824716 rs6674795 T A 84.16 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=5.06;MQ=43.80;MQ0=7;OQ=985.67;QD=11.60;SB=-441.50 GT:AD:DP:GL:GQ 0/1:51,34:73:-123.84,-21.98,-157.76:99
-chr1 4824850 rs36062377 G T 24.04 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=3;HaplotypeScore=2.62;MQ=51.81;MQ0=1;OQ=1235.06;QD=17.15;SB=-475.54 GT:AD:DP:GL:GQ 0/1:30,42:67:-146.97,-20.18,-98.26:99
-chr1 4825033 rs7529540 T C 245.46 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=39.74;MQ0=8;OQ=558.43;QD=7.55;SB=-301.05 GT:AD:DP:GL:GQ 0/1:47,27:63:-78.11,-18.99,-158.23:99
-chr1 4825352 rs4559467 G A 108.52 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=5.62;MQ=48.67;MQ0=0;OQ=560.80;QD=11.22;SB=-300.78 GT:AD:DP:GL:GQ 0/1:27,20:40:-71.42,-12.05,-75.01:99
-chr1 4825513 rs4638087 G C 326.19 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=1176.04;QD=19.60;SB=-421.03 GT:AD:DP:GL:GQ 0/1:27,33:59:-138.66,-17.78,-117.95:99
-chr1 4825553 rs4551566 C G 30.76 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.33;MQ0=0;OQ=1250.51;QD=22.33;SB=-448.38 GT:AD:DP:GL:GQ 0/1:22,34:55:-144.91,-16.57,-96.90:99
-chr1 4826034 rs7529926 A G 223.14 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=2.45;MQ=57.60;MQ0=0;OQ=1139.50;QD=13.57;SB=-533.50 GT:AD:DP:GL:GQ 0/1:44,39:83:-142.23,-25.00,-178.33:99
-chr1 4826162 rs7525613 C T 13.44 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=2;HaplotypeScore=3.45;MQ=59.36;MQ0=1;OQ=993.15;QD=10.80;SB=-409.28 GT:AD:DP:GL:GQ 0/1:59,33:90:-129.72,-27.12,-195.16:99
-chr1 4826345 rs2104305 G T 184.73 PASS AC=1;AF=0.50;AN=2;DB;DP=40;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=57.85;MQ0=1;OQ=505.67;QD=12.64;SB=-209.45 GT:AD:DP:GL:GQ 0/1:21,19:39:-65.60,-11.75,-75.98:99
-chr1 4826423 rs2093767 G A 138.65 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=58.83;MQ0=0;OQ=815.33;QD=15.68;SB=-288.73 GT:AD:DP:GL:GQ 0/1:27,25:52:-100.48,-15.67,-95.85:99
-chr1 4826585 rs2093766 C T 86.86 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=59.52;MQ0=0;OQ=705.53;QD=13.07;SB=-332.40 GT:AD:DP:GL:GQ 0/1:31,23:54:-90.10,-16.27,-110.86:99
-chr1 4826810 rs10915643 T G 203.85 PASS AC=1;AF=0.50;AN=2;DB;DP=44;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=57.12;MQ0=0;OQ=525.52;QD=11.94;SB=-258.86 GT:AD:DP:GL:GQ 0/1:23,21:42:-68.49,-12.65,-82.71:99
-chr1 4827586 rs55916988 A T 25.36 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=889.58;QD=14.35;SB=-432.48 GT:AD:DP:GL:GQ 0/1:33,29:62:-110.92,-18.68,-123.75:99
-chr1 4827658 rs10915644 C T 105.99 PASS AC=1;AF=0.50;AN=2;DB;DP=104;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=60.00;MQ0=0;OQ=1865.95;QD=17.94;SB=-912.01 GT:AD:DP:GL:GQ 0/1:46,58:101:-220.30,-30.43,-168.62:99
-chr1 4828047 rs10915645 G T 162.71 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.35;MQ0=0;OQ=1117.38;QD=13.97;SB=-570.65 GT:AD:DP:GL:GQ 0/1:41,39:77:-138.21,-23.19,-142.58:99
-chr1 4828218 rs10915646 T C 280.72 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=1.03;MQ=59.65;MQ0=0;OQ=827.35;QD=15.32;SB=-429.21 GT:AD:DP:GL:GQ 0/1:26,28:54:-102.28,-16.26,-103.92:99
-chr1 4829521 rs7525315 A G 34.89 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=2;HaplotypeScore=1.86;MQ=60.00;MQ0=0;OQ=437.24;QD=11.82;SB=-193.62 GT:AD:DP:GL:GQ 0/1:19,18:35:-57.55,-10.55,-75.26:99
-chr1 4829549 rs7511935 G C 92.43 PASS AC=1;AF=0.50;AN=2;DB;DP=37;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=60.00;MQ0=0;OQ=512.56;QD=13.85;SB=-232.38 GT:AD:DP:GL:GQ 0/1:19,18:33:-64.49,-9.95,-73.26:99
-chr1 4829662 rs7512035 G A 4.93 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=9.93;MQ=58.76;MQ0=0;OQ=838.03;QD=17.10;SB=-374.88 GT:AD:DP:GL:GQ 0/1:21,27:46:-104.45,-17.36,-74.24:99
-chr1 4830041 rs1886112 T C 323.11 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.65;MQ=58.39;MQ0=0;OQ=754.42;QD=11.79;SB=-313.28 GT:AD:DP:GL:GQ 0/1:35,29:61:-97.11,-18.38,-135.74:99
-chr1 4830111 rs2411950 A G 299.57 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=2.97;MQ=59.44;MQ0=0;OQ=788.01;QD=11.76;SB=-302.20 GT:AD:DP:GL:GQ 0/1:34,33:66:-101.98,-19.90,-134.57:99
-chr1 4831214 rs11588518 A G 386.42 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=58.39;MQ0=0;OQ=816.62;QD=14.85;SB=-422.33 GT:AD:DP:GL:GQ 0/1:26,29:53:-100.91,-15.96,-102.18:99
-chr1 4832304 rs10915647 T G 357.62 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.96;MQ=59.21;MQ0=0;OQ=992.87;QD=12.89;SB=-411.65 GT:AD:DP:GL:GQ 0/1:36,41:75:-125.17,-22.60,-131.25:99
-chr1 4833095 rs10489136 G A 381.62 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.25;MQ0=0;OQ=597.16;QD=11.94;SB=-271.12 GT:AD:DP:GL:GQ 0/1:30,20:49:-77.76,-14.76,-108.40:99
-chr1 4833385 rs11809159 G A 313.41 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.57;MQ0=0;OQ=671.57;QD=12.44;SB=-350.34 GT:AD:DP:GL:GQ 0/1:33,21:52:-86.11,-15.67,-111.35:99
-chr1 4834568 rs12691490 G A 57.53 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=2;HaplotypeScore=1.52;MQ=59.19;MQ0=0;OQ=1072.80;QD=14.30;SB=-179.14 GT:AD:DP:GL:GQ 0/1:41,34:74:-132.86,-22.29,-148.17:99
-chr1 4834712 rs11810903 C T 299.28 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=59.50;MQ0=0;OQ=847.25;QD=15.99;SB=-334.31 GT:AD:DP:GL:GQ 0/1:27,26:50:-103.07,-15.06,-90.22:99
-chr1 4835505 . G A 70.11 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=57.18;MQ0=2;OQ=1406.02;QD=19.00;SB=-566.58 GT:AD:DP:GL:GQ 0/1:33,41:71:-165.27,-21.39,-109.48:99
-chr1 4835574 rs60862815 A G 389.11 PASS AC=1;AF=0.50;AN=2;DB;DP=96;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=52.44;MQ0=0;OQ=1406.97;QD=14.66;SB=-683.24 GT:AD:DP:GL:GQ 0/1:48,48:95:-172.59,-28.61,-196.25:99
-chr1 4835660 . A G 23.51 PASS AC=1;AF=0.50;AN=2;DP=96;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=53.01;MQ0=0;OQ=1833.96;QD=19.10;SB=-522.87 GT:AD:DP:GL:GQ 0/1:39,57:96:-215.59,-28.91,-159.74:99
-chr1 4837550 rs35283465 T G 356.52 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1133.74;QD=16.67;SB=-504.82 GT:AD:DP:GL:GQ 0/1:30,38:68:-137.14,-20.48,-110.12:99
-chr1 4837913 rs10753390 T C 137.37 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=2.60;MQ=60.00;MQ0=0;OQ=941.83;QD=14.72;SB=-459.61 GT:AD:DP:GL:GQ 0/1:30,34:62:-116.15,-18.68,-119.75:99
-chr1 4839426 rs942248 G A 447.55 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.57;MQ=60.00;MQ0=0;OQ=1139.23;QD=16.75;SB=-553.39 GT:AD:DP:GL:GQ 0/1:34,34:68:-137.70,-20.50,-108.59:99
-chr1 4841270 rs10915651 A G 240.97 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=57.66;MQ0=0;OQ=816.55;QD=11.66;SB=-378.12 GT:AD:DP:GL:GQ 0/1:39,31:68:-105.42,-20.48,-155.28:99
-chr1 4841714 rs4654463 A C 478.61 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=555.94;QD=9.75;SB=-254.73 GT:AD:DP:GL:GQ 0/1:35,22:56:-75.74,-16.86,-132.35:99
-chr1 4844074 rs10733017 T C 2.18 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=11.82;MQ=59.63;MQ0=0;OQ=699.51;QD=11.10;SB=-327.09 GT:AD:DP:GL:GQ 0/1:36,27:62:-91.91,-18.68,-144.88:99
-chr1 4844167 rs11576728 C A 571.03 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.76;MQ0=0;OQ=1050.49;QD=13.64;SB=-532.68 GT:AD:DP:GL:GQ 0/1:42,35:77:-131.52,-23.19,-153.03:99
-chr1 4844702 rs7543026 G A 584.71 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.93;MQ0=0;OQ=948.11;QD=15.54;SB=-391.87 GT:AD:DP:GL:GQ 0/1:33,28:60:-116.18,-18.08,-104.09:99
-chr1 4845341 rs6658585 A C 76.93 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.00;MQ=59.18;MQ0=0;OQ=1071.52;QD=16.74;SB=-367.56 GT:AD:DP:GL:GQ 0/1:26,38:62:-129.11,-18.67,-97.88:99
-chr1 4845498 rs12057393 G A 364.71 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=12;HaplotypeScore=3.79;MQ=47.74;MQ0=0;QD=4.19;SB=-24.81 GT:AD:DP:GL:GQ 0/1:67,20:77:-62.95,-23.20,-211.18:99
-chr1 4845501 . G A 272.57 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=2;HaplotypeScore=5.43;MQ=47.58;MQ0=0;QD=3.17;SB=59.32 GT:AD:DP:GL:GQ 0/1:69,17:79:-54.34,-23.80,-226.78:99
-chr1 4845504 . G A 237.01 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=2;HaplotypeScore=5.58;MQ=47.42;MQ0=0;QD=2.79;SB=100.89 GT:AD:DP:GL:GQ 0/1:69,16:79:-50.79,-23.80,-233.92:99
-chr1 4846112 rs34320332 A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=25.56;MQ=59.10;MQ0=1;OQ=980.42;QD=12.41;SB=-508.92 GT:AD:DP:GL:GQ 0/1:43,36:73:-123.31,-21.99,-148.19:99
-chr1 4846138 rs4141866 T G 321.22 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1084.74;QD=12.91;SB=-515.88 GT:AD:DP:GL:GQ 0/1:44,39:81:-136.16,-24.40,-149.14:99
-chr1 4846537 rs2224810 C T 118.17 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=2.15;MQ=60.00;MQ0=0;OQ=819.69;QD=11.71;SB=-407.37 GT:AD:DP:GL:GQ 0/1:43,26:69:-109.19,-23.93,-141.50:99
-chr1 4846628 rs2209160 C T 102.30 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=6.02;MQ=59.71;MQ0=0;OQ=1103.05;QD=13.96;SB=-498.70 GT:AD:DP:GL:GQ 0/1:45,34:78:-137.10,-23.51,-139.74:99
-chr1 4847013 rs4654617 G A 341.44 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.65;MQ=60.12;MQ0=0;OQ=1328.73;QD=14.44;SB=-558.05 GT:AD:DP:GL:GQ 0/1:51,41:91:-163.57,-27.42,-178.46:99
-chr1 4847234 rs4654618 G A 257.57 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.79;MQ0=0;OQ=1473.23;QD=16.93;SB=-644.65 GT:AD:DP:GL:GQ 0/1:44,43:86:-176.51,-25.90,-155.83:99
-chr1 4847304 rs11576619 A C 410.62 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1115.68;QD=12.54;SB=-555.85 GT:AD:DP:GL:GQ 0/1:50,39:89:-141.65,-26.80,-188.69:99
-chr1 4848245 rs10915655 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.04;HRun=13;HaplotypeScore=40.55;MQ=53.84;MQ0=0;OQ=783.98;QD=11.53;SB=-399.49 GT:AD:DP:GL:GQ 0/1:35,30:57:-98.55,-16.87,-112.34:99
-chr1 4848259 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=13;HaplotypeScore=8.75;MQ=53.39;MQ0=0;OQ=145.61;QD=2.24;SB=43.71 GT:AD:DP:GL:GQ 0/1:50,15:51:-33.22,-15.38,-143.27:99
-chr1 4848272 rs59534952 C T 83.18 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=1;HaplotypeScore=2.85;MQ=55.61;MQ0=0;OQ=567.99;QD=11.83;SB=-226.73 GT:AD:DP:GL:GQ 0/1:29,19:46:-73.94,-13.86,-98.14:99
-chr1 4849613 rs2224809 G T 40.55 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=5.98;MQ=59.05;MQ0=0;OQ=753.24;QD=11.77;SB=-371.10 GT:AD:DP:GL:GQ 0/1:36,28:62:-97.28,-18.68,-118.15:99
-chr1 4851425 rs4654464 C A 99.04 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=3;HaplotypeScore=1.30;MQ=59.74;MQ0=0;OQ=1201.43;QD=13.50;SB=-585.67 GT:AD:DP:GL:GQ 0/1:47,42:87:-149.63,-26.21,-164.62:99
-chr1 4851649 rs1544062 A C 506.42 PASS AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.80;MQ0=0;OQ=1031.53;QD=11.21;SB=-464.74 GT:AD:DP:GL:GQ 0/1:52,40:90:-133.54,-27.11,-194.44:99
-chr1 4852648 rs6664880 A G 404.16 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=757.37;QD=15.15;SB=-338.35 GT:AD:DP:GL:GQ 0/1:21,29:49:-93.79,-14.77,-78.78:99
-chr1 4853388 rs16839786 G T 224.38 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=53.58;MQ0=0;OQ=920.28;QD=16.43;SB=-211.55 GT:AD:DP:GL:GQ 0/1:26,30:55:-111.88,-16.57,-81.39:99
-chr1 4853673 rs61764897 T A 731.06 Indel AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=49.62;MQ0=0;QD=11.25;SB=-257.66 GT:AD:DP:GL:GQ 0/1:39,26:64:-95.67,-19.28,-148.40:99
-chr1 4854729 rs11578197 G A 258.41 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.18;MQ=59.65;MQ0=0;OQ=1050.33;QD=16.16;SB=-476.48 GT:AD:DP:GL:GQ 0/1:33,32:63:-127.30,-18.99,-107.48:99
-chr1 4855018 rs16839789 C T 363.83 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=59.33;MQ0=0;OQ=1117.05;QD=14.70;SB=-538.76 GT:AD:DP:GL:GQ 0/1:39,37:73:-136.99,-22.00,-128.05:99
-chr1 4855722 rs6426446 C T 346.09 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.43;MQ0=0;OQ=1302.13;QD=17.84;SB=-634.73 GT:AD:DP:GL:GQ 0/1:34,39:71:-154.89,-21.40,-105.41:99
-chr1 4855930 rs6426447 T C 166.41 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=57.78;MQ0=0;OQ=489.14;QD=8.58;SB=-219.87 GT:AD:DP:GL:GQ 0/1:31,26:53:-68.18,-15.98,-120.90:99
-chr1 4856415 rs7547152 G C 495.16 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=942.12;QD=15.20;SB=-441.90 GT:AD:DP:GL:GQ 0/1:35,27:61:-115.88,-18.38,-149.41:99
-chr1 4857229 rs58851741 C T 459.60 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=966.78;QD=16.67;SB=-403.91 GT:AD:DP:GL:GQ 0/1:27,31:57:-117.15,-17.19,-83.93:99
-chr1 4857438 rs6663654 A G 150.02 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=1.74;MQ=59.66;MQ0=0;OQ=1188.14;QD=17.73;SB=-597.99 GT:AD:DP:GL:GQ 0/1:26,41:63:-141.07,-18.98,-97.28:99
-chr1 4857938 rs4654466 T G 14.09 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=3;HaplotypeScore=2.02;MQ=60.00;MQ0=0;OQ=2439.19;QD=33.41;SB=-1032.90 GT:AD:DP:GL:GQ 1/1:0,73:72:-247.54,-21.70,-0.04:99
-chr1 4857962 rs4654620 T C 617.25 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2216.51;QD=34.63;SB=-1013.85 GT:AD:DP:GL:GQ 1/1:0,64:63:-225.26,-18.98,-0.03:99
-chr1 4858133 rs12026056 C T 160.83 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.48;MQ0=0;OQ=1391.17;QD=19.32;SB=-472.46 GT:AD:DP:GL:GQ 0/1:31,41:70:-163.49,-21.09,-105.37:99
-chr1 4858331 rs2411952 T G 714.78 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2714.55;QD=33.93;SB=-941.23 GT:AD:DP:GL:GQ 1/1:0,80:78:-275.06,-23.49,-0.02:99
-chr1 4858799 rs10915656 A G 325.06 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=541.63;QD=8.88;SB=-253.33 GT:AD:DP:GL:GQ 0/1:37,24:61:-75.83,-18.39,-146.51:99
-chr1 4859646 rs2031246 A G 219.32 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.68;MQ0=0;OQ=1950.88;QD=29.12;SB=-966.30 GT:AD:DP:GL:GQ 1/1:0,67:62:-198.73,-18.70,-0.06:99
-chr1 4859671 . T C 13.11 PASS AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=1;HaplotypeScore=3.64;MQ=59.06;MQ0=0;OQ=883.63;QD=12.81;SB=-329.17 GT:AD:DP:GL:GQ 0/1:37,32:67:-111.83,-20.19,-139.59:99
-chr1 4859954 rs34895557 G T 206.38 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.25;MQ=59.24;MQ0=0;OQ=744.21;QD=13.53;SB=-251.43 GT:AD:DP:GL:GQ 0/1:28,27:52:-93.37,-15.67,-91.09:99
-chr1 4860771 rs1998542 A G 287.69 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.36;MQ0=0;OQ=1092.68;QD=14.57;SB=-569.57 GT:AD:DP:GL:GQ 0/1:37,38:74:-134.84,-22.29,-148.74:99
-chr1 4861394 rs12564397 A T 437.24 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=1000.40;QD=17.86;SB=-441.86 GT:AD:DP:GL:GQ 0/1:25,31:56:-120.19,-16.87,-93.72:99
-chr1 4861557 rs35411636 G A 169.15 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=1.73;MQ=59.72;MQ0=0;OQ=1208.45;QD=18.04;SB=-440.97 GT:AD:DP:GL:GQ 0/1:30,37:64:-143.41,-19.28,-105.19:99
-chr1 4863429 . C T 229.25 PASS AC=1;AF=0.50;AN=2;DP=86;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.78;MQ0=0;OQ=1493.09;QD=17.36;SB=-728.57 GT:AD:DP:GL:GQ 0/1:41,45:85:-178.20,-25.60,-151.88:99
-chr1 4863497 rs7524606 G A 427.14 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=0;HaplotypeScore=1.18;MQ=60.00;MQ0=0;OQ=1511.71;QD=17.58;SB=-634.67 GT:AD:DP:GL:GQ 0/1:42,44:85:-180.06,-25.60,-147.35:99
-chr1 4863865 rs1980722 C T 503.84 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3056.08;QD=40.21;SB=-645.86 GT:AD:DP:GL:GQ 1/1:0,76:76:-309.21,-22.89,-0.02:99
-chr1 4864428 rs11580747 G C 245.21 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.79;MQ=59.63;MQ0=0;OQ=942.97;QD=14.97;SB=-334.34 GT:AD:DP:GL:GQ 0/1:36,27:61:-115.96,-18.38,-154.60:99
-chr1 4865012 rs17345545 A C 595.58 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1349.09;QD=16.06;SB=-446.78 GT:AD:DP:GL:GQ 0/1:36,48:82:-162.89,-24.70,-132.81:99
-chr1 4865105 rs57839229 A T 93.37 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=1.14;MQ=59.34;MQ0=0;OQ=1132.50;QD=17.98;SB=-522.98 GT:AD:DP:GL:GQ 0/1:27,36:62:-135.21,-18.67,-99.92:99
-chr1 4865351 rs4654467 A G 16.96 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.01;HRun=0;HaplotypeScore=4.70;MQ=59.78;MQ0=0;OQ=2675.08;QD=31.11;SB=-1049.26 GT:AD:DP:GL:GQ 1/1:0,84:83:-271.15,-24.72,-0.06:99
-chr1 4866087 rs10915662 A T 363.81 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.38;MQ0=0;OQ=1323.19;QD=19.75;SB=-593.71 GT:AD:DP:GL:GQ 0/1:27,40:67:-155.78,-20.18,-103.30:99
-chr1 4866400 rs12064982 G A 103.40 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=3.34;MQ=60.00;MQ0=0;OQ=973.54;QD=18.03;SB=-247.54 GT:AD:DP:GL:GQ 0/1:25,29:53:-116.61,-15.97,-79.83:99
-chr1 4866918 rs12031154 A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=24.82;MQ=54.18;MQ0=0;OQ=935.81;QD=11.27;SB=-380.06 GT:AD:DP:GL:GQ 0/1:43,40:73:-118.86,-22.00,-142.88:99
-chr1 4866921 rs12026933 G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.03;HRun=18;HaplotypeScore=19.70;MQ=54.46;MQ0=0;OQ=1554.81;QD=17.87;SB=-743.33 GT:AD:DP:GL:GQ 0/1:33,51:81:-182.28,-23.51,-100.13:99
-chr1 4867019 rs11803696 A G 583.39 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1173.47;QD=12.90;SB=-430.96 GT:AD:DP:GL:GQ 0/1:48,43:89:-147.44,-26.81,-193.48:99
-chr1 4867070 rs6672145 C T 154.08 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.79;MQ=58.49;MQ0=0;OQ=2949.30;QD=37.81;SB=-1148.66 GT:AD:DP:GL:GQ 1/1:0,78:74:-298.53,-22.29,-0.02:99
-chr1 4867333 rs10737414 C T 577.78 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=3774.90;QD=40.59;SB=-1090.96 GT:AD:DP:GL:GQ 1/1:0,93:91:-376.49,-27.41,-0.02:99
-chr1 4867363 rs7533707 A T 409.29 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.50;MQ0=0;OQ=3186.97;QD=36.63;SB=-1277.61 GT:AD:DP:GL:GQ 1/1:0,87:84:-322.30,-25.30,-0.02:99
-chr1 4867599 rs7520488 G C 176.88 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=3.17;MQ=58.98;MQ0=0;OQ=1260.85;QD=19.70;SB=-431.87 GT:AD:DP:GL:GQ 0/1:29,35:63:-148.35,-18.98,-119.77:99
-chr1 4867836 rs10753391 C T 252.04 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.73;MQ=58.82;MQ0=0;OQ=2192.96;QD=37.17;SB=-1090.48 GT:AD:DP:GL:GQ 1/1:0,58:57:-222.90,-17.17,-0.02:99
-chr1 4869610 rs10753392 A G 2.94 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=12.66;MQ=58.15;MQ0=0;OQ=2566.56;QD=33.77;SB=-1061.07 GT:AD:DP:GL:GQ 1/1:1,75:72:-260.27,-21.69,-0.02:99
-chr1 4869715 rs10753393 A G 57.47 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.94;MQ=55.52;MQ0=0;OQ=2164.34;QD=32.79;SB=-1098.81 GT:AD:DP:GL:GQ 1/1:0,66:62:-220.05,-18.68,-0.03:99
-chr1 4869773 rs10737415 G A 79.07 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.29;MQ=59.56;MQ0=0;OQ=867.20;QD=16.36;SB=-154.19 GT:AD:DP:GL:GQ 0/1:24,29:51:-105.37,-15.37,-83.26:99
-chr1 4869802 rs10753394 T C 256.85 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.38;MQ=60.00;MQ0=0;OQ=1715.99;QD=30.64;SB=-772.60 GT:AD:DP:GL:GQ 1/1:0,56:56:-175.25,-16.90,-0.06:99
-chr1 4869982 rs10915666 G A 210.38 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.64;MQ=58.75;MQ0=0;OQ=1883.17;QD=36.21;SB=-696.34 GT:AD:DP:GL:GQ 1/1:0,50:49:-191.92,-14.76,-0.02:99
-chr1 4870346 rs6675549 G A 170.55 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=4.29;MQ=57.91;MQ0=0;OQ=1211.32;QD=19.23;SB=-547.10 GT:AD:DP:GL:GQ 0/1:28,35:62:-143.11,-18.69,-84.61:99
-chr1 4870866 rs60530383 A G 40.28 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=2;HaplotypeScore=2.54;MQ=60.00;MQ0=0;OQ=824.16;QD=14.46;SB=-305.38 GT:AD:DP:GL:GQ 0/1:28,29:56:-102.57,-16.87,-109.85:99
-chr1 4871367 rs12034557 C T 506.72 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.67;MQ0=0;OQ=1054.17;QD=18.82;SB=-458.82 GT:AD:DP:GL:GQ 0/1:25,31:55:-125.27,-16.57,-85.80:99
-chr1 4871442 rs11584441 T G 5.72 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=1.95;MQ=57.60;MQ0=1;OQ=392.05;QD=7.00;SB=-149.17 GT:AD:DP:GL:GQ 0/1:35,21:54:-58.76,-16.27,-123.74:99
-chr1 4871485 rs12034590 C T 165.34 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.35;MQ0=0;OQ=1273.44;QD=19.90;SB=-540.59 GT:AD:DP:GL:GQ 0/1:26,38:62:-149.30,-18.68,-91.11:99
-chr1 4871683 rs10915667 G A 252.09 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=1.13;MQ=59.56;MQ0=0;OQ=868.47;QD=16.70;SB=-440.82 GT:AD:DP:GL:GQ 0/1:26,26:50:-105.19,-15.06,-84.43:99
-chr1 4872046 rs41524347 T G 240.01 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=531.74;QD=7.28;SB=-248.55 GT:AD:DP:GL:GQ 0/1:47,26:72:-78.15,-21.69,-181.81:99
-chr1 4872269 rs7549400 A G 96.19 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=1.52;MQ=58.82;MQ0=1;OQ=894.68;QD=13.76;SB=-387.61 GT:AD:DP:GL:GQ 0/1:34,31:64:-112.04,-19.29,-126.05:99
-chr1 4872967 rs11805753 C T 385.01 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.56;MQ=59.68;MQ0=0;OQ=1214.98;QD=17.11;SB=-484.47 GT:AD:DP:GL:GQ 0/1:35,36:70:-145.88,-21.10,-111.38:99
-chr1 4873161 rs10915668 C T 676.89 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2872.25;QD=39.89;SB=-1024.38 GT:AD:DP:GL:GQ 1/1:0,72:72:-290.83,-21.69,-0.02:99
-chr1 4874423 rs10915669 T C 15.37 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=2.47;MQ=59.06;MQ0=0;OQ=1979.91;QD=28.69;SB=-648.94 GT:AD:DP:GL:GQ 1/1:0,69:62:-201.63,-18.69,-0.05:99
-chr1 4875425 rs10157835 A G 332.29 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.11;MQ0=0;OQ=1038.14;QD=16.48;SB=-539.00 GT:AD:DP:GL:GQ 0/1:28,35:63:-126.07,-18.98,-114.44:99
-chr1 4877097 rs12565275 C G 395.93 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.57;MQ0=0;OQ=611.15;QD=11.32;SB=-239.42 GT:AD:DP:GL:GQ 0/1:33,21:54:-80.69,-16.29,-144.98:99
-chr1 4877956 rs2898849 G C 124.47 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.58;MQ=59.05;MQ0=0;OQ=3110.04;QD=42.60;SB=-1016.57 GT:AD:DP:GL:GQ 1/1:0,72:72:-314.62,-21.70,-0.03:99
-chr1 4878047 rs12564793 G C 328.95 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.70;MQ0=0;OQ=765.57;QD=12.15;SB=-303.80 GT:AD:DP:GL:GQ 0/1:37,26:61:-98.24,-18.40,-159.57:99
-chr1 4880219 rs11585512 A G 134.50 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=3.24;MQ=59.43;MQ0=0;OQ=632.04;QD=9.58;SB=-314.90 GT:AD:DP:GL:GQ 0/1:35,31:61:-84.88,-18.39,-132.31:99
-chr1 4880279 rs11583660 G A 590.60 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.47;MQ0=0;OQ=976.49;QD=13.95;SB=-412.71 GT:AD:DP:GL:GQ 0/1:40,30:69:-121.72,-20.78,-142.93:99
-chr1 4880552 rs12035499 G A 202.58 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.63;MQ0=0;OQ=1072.23;QD=21.02;SB=-458.86 GT:AD:DP:GL:GQ 0/1:20,31:50:-125.57,-15.06,-66.05:99
-chr1 4881363 rs942245 A G 135.80 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=2549.24;QD=35.41;SB=-1267.52 GT:AD:DP:GL:GQ 1/1:0,72:71:-258.53,-21.38,-0.02:99
-chr1 4882246 rs6698453 G A 17.37 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=3;HaplotypeScore=2.99;MQ=60.00;MQ0=0;OQ=1152.61;QD=20.22;SB=-564.76 GT:AD:DP:GL:GQ 0/1:24,33:57:-135.71,-17.17,-88.68:99
-chr1 4883339 rs12043326 T C 559.70 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=840.35;QD=11.84;SB=-378.86 GT:AD:DP:GL:GQ 0/1:36,35:67:-107.51,-20.19,-138.68:99
-chr1 4883603 rs10915672 C A 302.35 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=917.14;QD=15.81;SB=-477.86 GT:AD:DP:GL:GQ 0/1:28,30:58:-112.47,-17.47,-92.34:99
-chr1 4883658 rs4141867 T C 369.29 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=1888.75;QD=33.14;SB=-779.12 GT:AD:DP:GL:GQ 1/1:0,57:54:-192.48,-16.27,-0.02:99
-chr1 4883885 rs6702564 G A 362.71 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=1074.71;QD=17.62;SB=-363.86 GT:AD:DP:GL:GQ 0/1:29,32:61:-129.13,-18.37,-105.65:99
-chr1 4884232 rs1535733 T C 178.47 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=1.73;MQ=59.20;MQ0=1;OQ=1010.15;QD=15.08;SB=-514.02 GT:AD:DP:GL:GQ 0/1:32,35:66:-124.18,-19.88,-130.89:99
-chr1 4884527 rs6666792 C A 73.74 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=3;HaplotypeScore=1.81;MQ=60.00;MQ0=0;OQ=1017.13;QD=16.14;SB=-354.42 GT:AD:DP:GL:GQ 0/1:29,34:62:-123.67,-18.68,-100.25:99
-chr1 4884742 rs2093765 A G 735.50 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2661.52;QD=35.97;SB=-1066.10 GT:AD:DP:GL:GQ 1/1:0,74:74:-269.76,-22.29,-0.02:99
-chr1 4885223 rs6667433 C T 727.08 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=1991.58;QD=36.21;SB=-991.61 GT:AD:DP:GL:GQ 1/1:1,54:54:-205.04,-16.28,-2.29:99
-chr1 4885428 rs10753395 A C 505.64 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.54;MQ0=0;OQ=2504.61;QD=34.79;SB=-1254.33 GT:AD:DP:GL:GQ 1/1:0,72:71:-254.07,-21.38,-0.02:99
-chr1 4885629 rs10915675 C T 373.73 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=59.20;MQ0=0;OQ=841.96;QD=14.52;SB=-410.79 GT:AD:DP:GL:GQ 0/1:31,27:56:-104.36,-16.88,-95.31:99
-chr1 4886330 rs2411956 G T 352.27 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.52;MQ=59.33;MQ0=0;OQ=915.03;QD=14.76;SB=-419.13 GT:AD:DP:GL:GQ 0/1:29,33:59:-112.57,-17.78,-93.60:99
-chr1 4886464 rs2898852 G A 427.35 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.13;MQ=59.69;MQ0=0;OQ=1311.14;QD=17.48;SB=-649.71 GT:AD:DP:GL:GQ 0/1:36,39:74:-156.69,-22.29,-124.22:99
-chr1 4887284 rs6666453 T G 591.26 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.63;MQ0=0;OQ=819.61;QD=13.22;SB=-407.64 GT:AD:DP:GL:GQ 0/1:31,31:61:-103.62,-18.37,-115.39:99
-chr1 4887891 rs61271613 G A 361.07 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=59.32;MQ0=0;OQ=1029.14;QD=15.13;SB=-413.79 GT:AD:DP:GL:GQ 0/1:37,31:68:-126.69,-20.50,-120.37:99
-chr1 4887923 rs12567162 A C 597.28 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1047.19;QD=16.36;SB=-475.28 GT:AD:DP:GL:GQ 0/1:27,37:63:-126.98,-18.97,-102.36:99
-chr1 4888122 rs11584727 G A 343.84 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=58.62;MQ0=0;OQ=960.03;QD=15.74;SB=-414.74 GT:AD:DP:GL:GQ 0/1:31,30:58:-116.76,-17.47,-107.44:99
-chr1 4888166 rs10799275 T C 449.24 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=759.70;QD=14.07;SB=-405.31 GT:AD:DP:GL:GQ 0/1:28,26:54:-95.52,-16.26,-116.08:99
-chr1 4888741 rs6667349 A G 162.92 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=2;HaplotypeScore=1.54;MQ=60.00;MQ0=0;OQ=906.44;QD=15.63;SB=-403.28 GT:AD:DP:GL:GQ 0/1:26,32:57:-111.10,-17.17,-105.01:99
-chr1 4891078 rs10915677 A C 501.83 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=791.64;QD=10.84;SB=-393.76 GT:AD:DP:GL:GQ 0/1:42,31:72:-104.14,-21.69,-153.97:99
-chr1 4891278 rs10753396 A G 48.68 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.33;MQ=59.27;MQ0=0;OQ=705.13;QD=13.83;SB=-249.29 GT:AD:DP:GL:GQ 0/1:25,26:49:-88.56,-14.77,-92.96:99
-chr1 4892541 rs6675977 C T 304.31 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.24;MQ0=0;OQ=854.23;QD=15.53;SB=-341.48 GT:AD:DP:GL:GQ 0/1:29,26:53:-104.68,-15.97,-89.47:99
-chr1 4893597 rs9426511 G A 254.52 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.65;MQ=59.63;MQ0=0;OQ=950.24;QD=15.08;SB=-473.01 GT:AD:DP:GL:GQ 0/1:32,31:60:-116.38,-18.07,-112.58:99
-chr1 4894312 rs12409253 G A 317.80 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.37;MQ0=0;OQ=1178.40;QD=17.85;SB=-478.44 GT:AD:DP:GL:GQ 0/1:31,35:66:-141.01,-19.88,-111.62:99
-chr1 4894801 rs12044092 G A 352.37 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=2.41;MQ=58.46;MQ0=0;OQ=1019.91;QD=14.36;SB=-390.41 GT:AD:DP:GL:GQ 0/1:36,34:67:-125.46,-20.19,-124.85:99
-chr1 4894886 rs12049256 T C 300.25 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.80;MQ=59.40;MQ0=0;OQ=829.82;QD=11.85;SB=-433.52 GT:AD:DP:GL:GQ 0/1:40,30:69:-107.05,-20.79,-158.76:99
-chr1 4895006 rs11588368 G A 587.49 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=820.91;QD=16.10;SB=-424.82 GT:AD:DP:GL:GQ 0/1:26,25:51:-100.74,-15.37,-86.84:99
-chr1 4895035 rs11591047 T C 208.88 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=60.00;MQ0=0;OQ=456.13;QD=9.70;SB=-221.38 GT:AD:DP:GL:GQ 0/1:26,21:45:-62.46,-13.57,-101.40:99
-chr1 4895453 rs10915681 C A 168.48 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=1;HaplotypeScore=1.78;MQ=58.81;MQ0=0;OQ=612.66;QD=11.14;SB=-214.30 GT:AD:DP:GL:GQ 0/1:31,24:51:-79.91,-15.36,-100.29:99
-chr1 4895802 rs10915682 G C 444.70 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.75;MQ0=0;OQ=770.78;QD=14.82;SB=-369.80 GT:AD:DP:GL:GQ 0/1:29,22:52:-98.80,-18.44,-131.37:99
-chr1 4896045 rs10915683 A G 284.67 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=59.68;MQ0=0;OQ=528.33;QD=8.95;SB=-128.57 GT:AD:DP:GL:GQ 0/1:38,21:56:-72.98,-16.87,-140.47:99
-chr1 4896086 rs4654470 A G 55.66 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=5.44;MQ=59.62;MQ0=0;OQ=494.74;QD=8.11;SB=-214.66 GT:AD:DP:GL:GQ 0/1:40,20:59:-73.24,-20.48,-157.99:99
-chr1 4896521 rs12037632 T C 412.13 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.62;MQ0=0;OQ=681.99;QD=11.18;SB=-282.28 GT:AD:DP:GL:GQ 0/1:32,29:59:-89.26,-17.78,-128.31:99
-chr1 4896528 . C T 86.04 PASS AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.85;MQ=59.65;MQ0=0;OQ=946.41;QD=14.34;SB=-376.12 GT:AD:DP:GL:GQ 0/1:36,30:66:-117.81,-19.89,-127.23:99
-chr1 4896632 rs12040043 G A 26.46 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=5.45;MQ=59.30;MQ0=0;OQ=1274.10;QD=19.30;SB=-654.71 GT:AD:DP:GL:GQ 0/1:28,38:65:-150.27,-19.58,-99.74:99
-chr1 4897223 rs9426467 A G 376.87 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=60.00;MQ0=0;OQ=1052.07;QD=15.47;SB=-512.94 GT:AD:DP:GL:GQ 0/1:31,37:66:-128.37,-19.88,-120.24:99
-chr1 4897430 . C G 135.89 PASS AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1675.35;QD=20.68;SB=-845.32 GT:AD:DP:GL:GQ 0/1:35,46:79:-194.65,-23.83,-135.28:99
-chr1 4898245 rs9426468 A G 643.42 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=1735.77;QD=32.14;SB=-669.84 GT:AD:DP:GL:GQ 1/1:0,54:54:-177.21,-16.28,-0.04:99
-chr1 4899159 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=3;HaplotypeScore=6.05;MQ=46.85;MQ0=0;OQ=120.33;QD=2.27;SB=65.24 GT:AD:DP:GL:GQ 0/1:32,21:41:-27.68,-12.36,-128.17:99
-chr1 4899332 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=18.81;MQ=41.26;MQ0=0;OQ=75.19;QD=0.84;SB=83.30 GT:AD:DP:GL:GQ 0/1:74,15:82:-35.50,-24.70,-289.36:99
-chr1 4899338 rs61764934 T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=103;Dels=0.00;HRun=1;HaplotypeScore=53.72;MQ=39.00;MQ0=0;OQ=98.84;QD=0.96;SB=80.29 GT:AD:DP:GL:GQ 0/1:81,22:86:-39.08,-25.91,-300.72:99
-chr1 4899353 . A G 53.98 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=1;HaplotypeScore=114.06;MQ=38.02;MQ0=0;QD=0.50;SB=80.29 GT:AD:DP:GL:GQ 0/1:92,15:73:-30.68,-22.00,-253.39:86.82
-chr1 4899362 . C T 241.59 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=82.55;MQ=36.98;MQ0=0;QD=2.20;SB=83.28 GT:AD:DP:GL:GQ 0/1:96,14:84:-52.74,-25.30,-256.82:99
-chr1 4899363 . A G 254.83 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=107;Dels=0.00;HRun=0;HaplotypeScore=89.52;MQ=36.48;MQ0=0;QD=2.38;SB=77.27 GT:AD:DP:GL:GQ 0/1:93,14:79:-52.57,-23.80,-259.03:99
-chr1 4899383 . A G 183.41 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=106;Dels=0.00;HRun=0;HaplotypeScore=35.87;MQ=33.65;MQ0=0;QD=1.73;SB=12.92 GT:AD:DP:GL:GQ 0/1:63,43:62:-40.31,-18.69,-193.47:99
-chr1 4899387 . G A 263.62 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=99;Dels=0.00;HRun=1;HaplotypeScore=43.90;MQ=33.13;MQ0=0;QD=2.66;SB=77.22 GT:AD:DP:GL:GQ 0/1:87,12:64:-48.92,-19.28,-184.60:99
-chr1 4899389 . C T 535.44 SnpCluster AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=29.97;MQ=33.38;MQ0=0;QD=5.76;SB=-42.73 GT:AD:DP:GL:GQ 0/1:50,43:64:-76.11,-19.28,-160.16:99
-chr1 4899390 . A G 274.25 SnpCluster AC=1;AF=0.50;AN=2;DP=92;Dels=0.00;HRun=0;HaplotypeScore=29.97;MQ=32.97;MQ0=0;QD=2.98;SB=-22.76 GT:AD:DP:GL:GQ 0/1:49,43:57:-47.88,-17.17,-174.44:99
-chr1 4899396 . A G 365.84 SnpCluster AC=1;AF=0.50;AN=2;DP=91;Dels=0.00;HRun=0;HaplotypeScore=37.97;MQ=32.55;MQ0=0;QD=4.02;SB=-65.46 GT:AD:DP:GL:GQ 0/1:57,34:58:-57.34,-17.48,-166.05:99
-chr1 4899406 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=33.13;MQ=34.08;MQ0=0;OQ=385.33;QD=4.76;SB=65.23 GT:AD:DP:GL:GQ 0/1:64,17:63:-60.79,-18.98,-180.67:99
-chr1 4899410 . A G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=77;Dels=0.00;HRun=0;HaplotypeScore=33.12;MQ=33.37;MQ0=0;OQ=280.21;QD=3.64;SB=-127.85 GT:AD:DP:GL:GQ 0/1:61,16:68:-51.79,-20.49,-213.95:99
-chr1 4899418 rs61764937 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=24.96;MQ=35.60;MQ0=0;OQ=416.78;QD=5.56;SB=-32.80 GT:AD:DP:GL:GQ 0/1:58,17:68:-65.44,-20.48,-183.51:99
-chr1 4899454 . A G 399.94 SnpCluster AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=32.10;MQ=40.74;MQ0=0;QD=4.49;SB=-98.78 GT:AD:DP:GL:GQ 0/1:68,21:81:-67.68,-24.40,-246.97:99
-chr1 4899458 . A G 39.06 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=97;Dels=0.00;HRun=0;HaplotypeScore=68.26;MQ=40.42;MQ0=0;QD=0.40;SB=83.30 GT:AD:DP:GL:GQ 0/1:88,9:79:-30.98,-23.79,-291.61:71.90
-chr1 4899460 . A G 118.03 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=100;Dels=0.00;HRun=0;HaplotypeScore=72.96;MQ=40.46;MQ0=0;QD=1.18;SB=77.27 GT:AD:DP:GL:GQ 0/1:89,11:76:-37.98,-22.90,-265.09:99
-chr1 4899462 . C T 72.49 SnpCluster AC=1;AF=0.50;AN=2;DP=103;Dels=0.00;HRun=1;HaplotypeScore=75.80;MQ=40.64;MQ0=0;QD=0.70;SB=-1.28 GT:AD:DP:GL:GQ 0/1:95,8:73:-32.52,-21.98,-238.14:99
-chr1 4899467 . A G 135.65 SnpCluster AC=1;AF=0.50;AN=2;DP=110;Dels=0.00;HRun=0;HaplotypeScore=98.40;MQ=41.18;MQ0=0;QD=1.23;SB=-29.35 GT:AD:DP:GL:GQ 0/1:96,14:86:-42.76,-25.91,-295.60:99
-chr1 4899468 rs12745382 A T 958.03 SnpCluster AC=1;AF=0.50;AN=2;DB;DP=110;Dels=0.00;HRun=0;HaplotypeScore=107.35;MQ=41.23;MQ0=0;QD=8.71;SB=-316.45 GT:AD:DP:GL:GQ 0/1:64,46:95:-127.70,-28.61,-236.36:99
-chr1 4899487 rs12745394 A G 720.77 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=218;Dels=0.00;HRun=0;HaplotypeScore=160.10;MQ=38.29;MQ0=1;QD=3.31;SB=-244.39 GT:AD:DP:GL:GQ 0/1:161,57:163:-124.48,-49.12,-501.88:99
-chr1 4899493 . T C 260.40 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=248;Dels=0.00;HRun=0;HaplotypeScore=303.17;MQ=38.85;MQ0=1;QD=1.05;SB=56.79 GT:AD:DP:GL:GQ 0/1:215,32:203:-90.48,-61.15,-713.61:99
-chr1 4899494 . G A 174.70 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=310.33;MQ=39.06;MQ0=1;QD=0.69;SB=21.87 GT:AD:DP:GL:GQ 0/1:226,26:203:-81.91,-61.15,-646.58:99
-chr1 4899498 . A G 872.52 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=250.40;MQ=38.78;MQ0=1;QD=3.46;SB=78.26 GT:AD:DP:GL:GQ 0/1:199,53:211:-154.09,-63.56,-686.66:99
-chr1 4899500 rs12724550 G A 2189.95 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=250;Dels=0.00;HRun=0;HaplotypeScore=245.89;MQ=38.85;MQ0=1;QD=8.76;SB=-1087.26 GT:AD:DP:GL:GQ 0/1:149,76:205:-341.91,-119.63,-478.96:99
-chr1 4899501 . T G 179.31 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=1;HaplotypeScore=255.20;MQ=39.12;MQ0=1;QD=0.71;SB=215.88 GT:AD:DP:GL:GQ 0/1:226,25:204:-82.66,-61.45,-660.80:99
-chr1 4899507 . A G 466.12 DPFilter;Indel;SnpCluster AC=1;AF=0.50;AN=2;DP=254;Dels=0.00;HRun=0;HaplotypeScore=236.48;MQ=39.39;MQ0=1;QD=1.84;SB=155.66 GT:AD:DP:GL:GQ 0/1:206,47:211:-113.47,-63.57,-712.04:99
-chr1 4899538 . A G 1219.52 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=258;Dels=0.00;HRun=0;HaplotypeScore=176.47;MQ=39.21;MQ0=0;QD=4.73;SB=-218.54 GT:AD:DP:GL:GQ 0/1:190,68:212:-189.10,-63.86,-642.45:99
-chr1 4899540 . A G 894.27 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=255;Dels=0.00;HRun=0;HaplotypeScore=176.74;MQ=39.03;MQ0=0;QD=3.51;SB=-184.63 GT:AD:DP:GL:GQ 0/1:181,72:195:-154.12,-61.41,-609.10:99
-chr1 4899547 rs61764939 G A 1318.72 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DB;DP=260;Dels=0.00;HRun=0;HaplotypeScore=220.06;MQ=39.48;MQ0=0;QD=5.07;SB=-35.22 GT:AD:DP:GL:GQ 0/1:180,80:174:-187.61,-52.45,-416.57:99
-chr1 4899554 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=252;Dels=0.00;HRun=0;HaplotypeScore=215.32;MQ=39.44;MQ0=0;OQ=71.48;QD=0.28;SB=245.79 GT:AD:DP:GL:GQ 0/1:233,19:178:-64.05,-53.62,-575.35:99
-chr1 4899560 . A G 527.43 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=244;Dels=0.00;HRun=0;HaplotypeScore=182.32;MQ=39.84;MQ0=0;QD=2.16;SB=62.05 GT:AD:DP:GL:GQ 0/1:191,43:207:-132.12,-76.10,-688.26:99
-chr1 4899566 . C T 228.85 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=230;Dels=0.00;HRun=0;HaplotypeScore=151.86;MQ=39.79;MQ0=0;QD=0.99;SB=29.83 GT:AD:DP:GL:GQ 0/1:207,23:173:-78.29,-52.12,-551.64:99
-chr1 4899567 . A G 591.79 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=224;Dels=0.00;HRun=0;HaplotypeScore=146.70;MQ=39.85;MQ0=0;QD=2.64;SB=-287.04 GT:AD:DP:GL:GQ 0/1:172,52:165:-112.16,-49.70,-538.18:99
-chr1 4899578 . G A 586.91 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=167;Dels=0.00;HRun=1;HaplotypeScore=122.95;MQ=41.57;MQ0=0;QD=3.51;SB=-235.54 GT:AD:DP:GL:GQ 0/1:137,30:123:-99.03,-37.05,-345.51:99
-chr1 4899580 . G A 442.86 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=161;Dels=0.00;HRun=0;HaplotypeScore=120.46;MQ=41.82;MQ0=0;QD=2.75;SB=-225.49 GT:AD:DP:GL:GQ 0/1:135,26:120:-83.72,-36.15,-349.19:99
-chr1 4899586 . T C 690.02 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=149;Dels=0.00;HRun=1;HaplotypeScore=129.55;MQ=42.82;MQ0=0;QD=4.63;SB=-75.61 GT:AD:DP:GL:GQ 0/1:103,46:129:-111.14,-38.86,-403.04:99
-chr1 4899587 . G A 484.27 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=146;Dels=0.00;HRun=0;HaplotypeScore=116.82;MQ=42.67;MQ0=0;QD=3.32;SB=137.44 GT:AD:DP:GL:GQ 0/1:119,26:124:-89.06,-37.35,-358.44:99
-chr1 4899593 . C T 11.57 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=117;Dels=0.00;HRun=0;HaplotypeScore=60.92;MQ=43.18;MQ0=0;QD=0.10;SB=158.52 GT:AD:DP:GL:GQ 0/1:100,17:99:-34.23,-29.82,-323.42:44.09
-chr1 4899594 . A G 11.09 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=116;Dels=0.00;HRun=0;HaplotypeScore=60.92;MQ=43.00;MQ0=0;QD=0.10;SB=173.58 GT:AD:DP:GL:GQ 0/1:99,17:103:-35.39,-31.03,-369.44:43.58
-chr1 4899610 . C T 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=0;HaplotypeScore=9.15;MQ=43.55;MQ0=0;OQ=197.17;QD=2.22;SB=-29.37 GT:AD:DP:GL:GQ 0/1:75,14:86:-48.93,-25.93,-238.79:99
-chr1 4899946 rs4654471 T C 43.86 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=5.91;MQ=59.14;MQ0=0;OQ=975.13;QD=18.06;SB=-440.01 GT:AD:DP:GL:GQ 0/1:20,34:52:-116.46,-15.67,-76.61:99
-chr1 4902227 rs7555212 C T 596.69 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=2926.83;QD=40.65;SB=-1218.62 GT:AD:DP:GL:GQ 1/1:0,72:72:-296.28,-21.69,-0.02:99
-chr1 4902317 rs6426367 G T 224.74 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=59.74;MQ0=0;OQ=3145.50;QD=36.16;SB=-1581.61 GT:AD:DP:GL:GQ 1/1:0,87:85:-318.15,-25.60,-0.02:99
-chr1 4902486 rs6426368 C T 717.48 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=2201.20;QD=38.62;SB=-1092.00 GT:AD:DP:GL:GQ 1/1:0,57:56:-223.72,-16.87,-0.02:99
-chr1 4902573 rs6669905 T C 700.95 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.30;MQ0=0;OQ=2165.11;QD=36.09;SB=-859.36 GT:AD:DP:GL:GQ 1/1:0,60:59:-220.11,-17.77,-0.01:99
-chr1 4903007 rs6678838 G T 279.14 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=56.35;MQ0=0;OQ=1768.51;QD=34.01;SB=-813.84 GT:AD:DP:GL:GQ 1/1:0,52:50:-180.45,-15.06,-0.02:99
-chr1 4903027 rs12142452 G T 0 FDRtranche2.00to10.00+ AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.05;HRun=16;HaplotypeScore=13.19;MQ=49.10;MQ0=0;OQ=2384.03;QD=31.37;SB=-1040.48 GT:AD:DP:GL:GQ 1/1:0,72:70:-242.01,-20.48,-0.02:99
-chr1 4903364 rs9286971 G A 258.61 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=52.70;MQ0=0;OQ=2159.66;QD=37.89;SB=-926.32 GT:AD:DP:GL:GQ 1/1:0,57:54:-219.56,-16.27,-0.01:99
-chr1 4904108 rs10799141 A G 488.42 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.61;MQ0=0;OQ=2393.63;QD=33.71;SB=-1173.70 GT:AD:DP:GL:GQ 1/1:0,71:69:-242.98,-20.79,-0.03:99
-chr1 4904115 rs10753341 C T 707.52 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.70;MQ0=0;OQ=2995.63;QD=39.42;SB=-1442.45 GT:AD:DP:GL:GQ 1/1:0,76:76:-303.17,-22.90,-0.02:99
-chr1 4904188 rs10753342 G A 611.86 PASS AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3529.10;QD=39.65;SB=-1221.14 GT:AD:DP:GL:GQ 1/1:0,89:89:-351.91,-26.82,-0.03:99
-chr1 4905340 rs7531490 A G 249.81 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.93;MQ0=0;OQ=2004.17;QD=30.83;SB=-867.03 GT:AD:DP:GL:GQ 1/1:0,65:64:-204.06,-19.31,-0.06:99
-chr1 4905635 rs7534281 T C 82.15 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=2.19;MQ=59.65;MQ0=0;OQ=2315.03;QD=35.08;SB=-1175.74 GT:AD:DP:GL:GQ 1/1:0,66:65:-235.11,-19.58,-0.02:99
-chr1 4905656 rs7542048 G A 139.59 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.78;MQ=59.63;MQ0=0;OQ=2472.89;QD=39.25;SB=-1234.03 GT:AD:DP:GL:GQ 1/1:0,62:62:-250.89,-18.68,-0.02:99
-chr1 4906196 rs6426371 T C 169.21 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=58.85;MQ0=0;OQ=1914.58;QD=30.88;SB=-835.64 GT:AD:DP:GL:GQ 1/1:0,62:59:-195.09,-17.79,-0.04:99
-chr1 4906502 rs6426372 G C 538.03 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.04;MQ0=0;OQ=3170.49;QD=42.84;SB=-1473.31 GT:AD:DP:GL:GQ 1/1:0,73:73:-320.65,-21.99,-0.02:99
-chr1 4907095 rs10915296 T C 149.48 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=1;HaplotypeScore=1.07;MQ=58.97;MQ0=0;OQ=3030.02;QD=34.83;SB=-1495.63 GT:AD:DP:GL:GQ 1/1:0,87:84:-306.61,-25.30,-0.03:99
-chr1 4907407 rs6702058 C T 201.43 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.82;MQ=59.72;MQ0=0;OQ=3144.08;QD=38.34;SB=-1502.68 GT:AD:DP:GL:GQ 1/1:0,81:79:-318.01,-23.80,-0.02:99
-chr1 4907813 rs6677619 G T 634.30 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2646.47;QD=36.25;SB=-1071.58 GT:AD:DP:GL:GQ 1/1:0,73:72:-268.25,-21.68,-0.02:99
-chr1 4909109 rs7413385 A G 73.69 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.58;MQ=58.33;MQ0=0;OQ=950.25;QD=33.94;SB=-350.81 GT:AD:DP:GL:GQ 1/1:0,28:27:-98.62,-8.13,-0.01:81.24
-chr1 4909713 rs7413847 A G 78.92 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.66;MQ=58.99;MQ0=0;OQ=2491.44;QD=34.13;SB=-1130.80 GT:AD:DP:GL:GQ 1/1:0,72:69:-252.75,-20.78,-0.02:99
-chr1 4909933 rs7411727 C T 614.98 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2836.35;QD=38.85;SB=-1407.70 GT:AD:DP:GL:GQ 1/1:0,73:71:-287.24,-21.39,-0.02:99
-chr1 4910002 rs10915297 T C 288.13 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.37;MQ0=0;OQ=2563.56;QD=35.12;SB=-1064.10 GT:AD:DP:GL:GQ 1/1:0,73:72:-259.97,-21.69,-0.02:99
-chr1 4910067 rs10799142 G A 129.23 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=2.67;MQ=58.55;MQ0=0;OQ=2372.23;QD=38.89;SB=-1035.39 GT:AD:DP:GL:GQ 1/1:0,61:60:-240.82,-18.08,-0.02:99
-chr1 4910738 rs6426373 T C 29.48 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=4;HaplotypeScore=1.33;MQ=59.62;MQ0=0;OQ=2095.65;QD=34.35;SB=-1007.72 GT:AD:DP:GL:GQ 1/1:0,61:59:-213.17,-17.77,-0.02:99
-chr1 4910848 rs6664358 C T 341.96 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.71;MQ0=0;OQ=2577.25;QD=39.65;SB=-933.73 GT:AD:DP:GL:GQ 1/1:0,65:64:-261.33,-19.28,-0.02:99
-chr1 4911242 rs9426489 G T 99.79 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.42;MQ=59.58;MQ0=0;OQ=1563.55;QD=28.43;SB=-641.98 GT:AD:DP:GL:GQ 1/1:2,53:45:-159.96,-13.56,-0.02:99
-chr1 4911262 rs9426490 A G 133.69 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=1.03;MQ=60.00;MQ0=0;OQ=2076.79;QD=34.05;SB=-972.82 GT:AD:DP:GL:GQ 1/1:0,61:59:-211.29,-17.77,-0.02:99
-chr1 4911898 rs7522655 C T 592.58 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2724.61;QD=40.67;SB=-1189.07 GT:AD:DP:GL:GQ 1/1:0,67:67:-276.06,-20.18,-0.01:99
-chr1 4911961 rs7544541 G A 150.94 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=1.61;MQ=59.39;MQ0=0;OQ=2947.98;QD=38.79;SB=-1404.70 GT:AD:DP:GL:GQ 1/1:1,75:74:-298.40,-22.29,-0.02:99
-chr1 4911968 rs7544542 G A 170.72 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.82;MQ=59.72;MQ0=0;OQ=3112.64;QD=37.96;SB=-1553.08 GT:AD:DP:GL:GQ 1/1:0,82:78:-314.87,-23.50,-0.02:99
-chr1 4912150 rs9426469 G A 193 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.69;MQ0=0;OQ=2864.62;QD=38.19;SB=-1302.32 GT:AD:DP:GL:GQ 1/1:0,75:72:-290.07,-21.69,-0.02:99
-chr1 4913505 rs9426491 A G 394.38 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.04;MQ0=0;OQ=3121.73;QD=35.88;SB=-1295.55 GT:AD:DP:GL:GQ 1/1:0,87:85:-315.78,-25.60,-0.02:99
-chr1 4914443 rs6692780 T C 192.39 PASS AC=2;AF=1.00;AN=2;DB;DP=103;Dels=0.00;HRun=0;HaplotypeScore=2.33;MQ=59.62;MQ0=0;OQ=3691.18;QD=35.84;SB=-1586.36 GT:AD:DP:GL:GQ 1/1:1,102:102:-368.12,-30.72,-0.04:99
-chr1 4914588 rs6701289 G A 24.03 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=4;HaplotypeScore=1.20;MQ=58.58;MQ0=0;OQ=3206.41;QD=40.08;SB=-1396.85 GT:AD:DP:GL:GQ 1/1:0,80:78:-324.24,-23.49,-0.01:99
-chr1 4915327 rs6693486 A T 79.70 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=0.67;MQ=59.04;MQ0=0;OQ=2495.92;QD=36.70;SB=-983.49 GT:AD:DP:GL:GQ 1/1:0,68:67:-253.20,-20.19,-0.02:99
-chr1 4915704 rs6656223 G A 492.16 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1843.82;QD=39.23;SB=-720.96 GT:AD:DP:GL:GQ 1/1:0,47:46:-187.98,-13.86,-0.01:99
-chr1 4917206 rs12098076 G A 321.24 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.82;MQ=59.37;MQ0=0;OQ=1024.17;QD=17.36;SB=-411.74 GT:AD:DP:GL:GQ 0/1:27,32:58:-123.18,-17.47,-93.16:99
-chr1 4918178 rs9426470 C A 210.31 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=2272.14;QD=33.41;SB=-999.37 GT:AD:DP:GL:GQ 1/1:0,68:66:-230.83,-19.89,-0.03:99
-chr1 4918637 rs6696925 G C 480.06 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.39;MQ0=0;OQ=1020.90;QD=16.74;SB=-452.39 GT:AD:DP:GL:GQ 0/1:33,28:59:-123.15,-17.78,-134.82:99
-chr1 4920934 rs7546019 A G 7.79 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=3.94;MQ=55.17;MQ0=0;OQ=1312.69;QD=25.74;SB=-576.91 GT:AD:DP:GL:GQ 1/1:0,51:42:-134.90,-12.67,-0.04:99
-chr1 4920939 rs10799143 A G 1.06 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=9.55;MQ=55.37;MQ0=0;OQ=685.84;QD=14.29;SB=-109.82 GT:AD:DP:GL:GQ 1/1:0,38:24:-75.74,-10.17,-3.57:66.02
-chr1 4920972 rs10753343 C T 150.22 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=58.67;MQ0=0;OQ=1219.60;QD=34.85;SB=-488.14 GT:AD:DP:GL:GQ 1/1:0,34:33:-125.56,-9.95,-0.02:99
-chr1 4921030 rs10799144 A G 161.31 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=1;HaplotypeScore=1.20;MQ=58.57;MQ0=0;OQ=1984.77;QD=33.64;SB=-769.10 GT:AD:DP:GL:GQ 1/1:0,59:57:-202.08,-17.17,-0.02:99
-chr1 4921060 rs10799145 T G 245.52 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.09;MQ=58.90;MQ0=0;OQ=1759.60;QD=29.82;SB=-867.69 GT:AD:DP:GL:GQ 1/1:0,59:58:-179.61,-17.49,-0.06:99
-chr1 4921319 . C T 71.66 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=56.87;MQ0=0;OQ=1537.50;QD=20.78;SB=-754.34 GT:AD:DP:GL:GQ 0/1:29,45:71:-178.43,-21.40,-86.91:99
-chr1 4921542 . G A 297.10 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.57;MQ0=0;OQ=827.15;QD=15.32;SB=-385.90 GT:AD:DP:GL:GQ 0/1:29,25:54:-102.27,-16.28,-92.99:99
-chr1 4921651 . A G 14.60 PASS AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=3;HaplotypeScore=0.89;MQ=59.42;MQ0=0;OQ=1167.54;QD=16.22;SB=-587.69 GT:AD:DP:GL:GQ 0/1:31,41:71:-141.43,-21.39,-125.09:99
-chr1 4921748 . T C 1.07 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=7.77;MQ=59.39;MQ0=0;OQ=610.60;QD=12.72;SB=-231.30 GT:AD:DP:GL:GQ 0/1:26,22:47:-78.51,-14.17,-96.88:99
-chr1 4921801 . A G 290.73 PASS AC=1;AF=0.50;AN=2;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=740.93;QD=13.98;SB=-339.17 GT:AD:DP:GL:GQ 0/1:24,29:53:-93.36,-15.98,-94.97:99
-chr1 4921915 rs12118118 A G 141.47 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.35;MQ=59.65;MQ0=0;OQ=641.25;QD=9.87;SB=-176.55 GT:AD:DP:GL:GQ 0/1:39,26:63:-86.39,-18.98,-152.81:99
-chr1 4922627 rs12119864 T C 423.73 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=58.63;MQ0=0;OQ=1289.06;QD=15.17;SB=-556.56 GT:AD:DP:GL:GQ 0/1:33,52:81:-156.60,-24.41,-132.69:99
-chr1 4923016 rs6426374 A G 591.79 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.54;MQ0=0;OQ=2408.23;QD=29.37;SB=-1057.43 GT:AD:DP:GL:GQ 1/1:0,82:76:-244.48,-22.92,-0.07:99
-chr1 4923151 . C T 132.84 PASS AC=1;AF=0.50;AN=2;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.33;MQ0=0;OQ=908.76;QD=16.23;SB=-453.45 GT:AD:DP:GL:GQ 0/1:28,28:56:-111.04,-16.88,-89.80:99
-chr1 4923249 . A G 76.65 PASS AC=1;AF=0.50;AN=2;DP=44;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=58.95;MQ0=0;OQ=491.85;QD=11.18;SB=-227.32 GT:AD:DP:GL:GQ 0/1:25,19:38:-63.92,-11.45,-77.07:99
-chr1 4923272 . A G 41.93 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=2.77;MQ=59.16;MQ0=0;OQ=549.57;QD=9.99;SB=-300.17 GT:AD:DP:GL:GQ 0/1:32,23:55:-74.82,-16.58,-127.48:99
-chr1 4923290 rs6702660 A G 624.31 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1543.54;QD=30.27;SB=-737.76 GT:AD:DP:GL:GQ 1/1:0,51:50:-157.99,-15.08,-0.05:99
-chr1 4923916 . G A 53.20 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=57.14;MQ0=0;OQ=1330.08;QD=17.97;SB=-412.89 GT:AD:DP:GL:GQ 0/1:35,39:72:-157.99,-21.70,-107.79:99
-chr1 4923977 . T C 92.93 PASS AC=1;AF=0.50;AN=2;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.60;MQ=56.31;MQ0=0;OQ=878.08;QD=13.94;SB=-397.92 GT:AD:DP:GL:GQ 0/1:29,34:62:-109.78,-18.69,-109.67:99
-chr1 4924245 rs7523398 G T 624.90 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.01;HRun=0;HaplotypeScore=0.00;MQ=52.50;MQ0=0;OQ=2976.14;QD=35.01;SB=-1222.44 GT:AD:DP:GL:GQ 1/1:0,84:82:-301.22,-24.40,-0.02:99
-chr1 4924289 . C T 145.80 Indel AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=20.35;MQ=47.42;MQ0=2;QD=1.80;SB=-17.33 GT:AD:DP:GL:GQ 0/1:69,12:76:-40.75,-22.89,-240.21:99
-chr1 4924318 . A G 303.69 PASS AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.53;MQ0=0;OQ=1150.10;QD=15.13;SB=-395.92 GT:AD:DP:GL:GQ 0/1:29,47:72:-140.00,-21.70,-115.03:99
-chr1 4924353 . A G 6.39 PASS AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=1;HaplotypeScore=4.52;MQ=59.31;MQ0=0;OQ=1199.85;QD=16.00;SB=-524.06 GT:AD:DP:GL:GQ 0/1:32,42:73:-145.26,-21.99,-127.06:99
-chr1 4924370 . T G 76.39 PASS AC=1;AF=0.50;AN=2;DP=78;Dels=0.00;HRun=0;HaplotypeScore=1.99;MQ=60.52;MQ0=0;OQ=1415.60;QD=18.15;SB=-500.81 GT:AD:DP:GL:GQ 0/1:31,47:78:-168.34,-23.49,-113.39:99
-chr1 4924651 rs140619 A C 98.30 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=1.45;MQ=58.44;MQ0=0;OQ=1008.29;QD=14.00;SB=-504.32 GT:AD:DP:GL:GQ 0/1:36,36:69:-124.90,-20.78,-122.36:99
-chr1 4924659 rs140620 C G 66.97 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=2;HaplotypeScore=3.55;MQ=58.47;MQ0=0;OQ=1278.05;QD=17.51;SB=-626.38 GT:AD:DP:GL:GQ 0/1:37,36:72:-152.80,-21.71,-149.62:99
-chr1 4924842 rs3101217 G A 427.04 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.23;MQ=60.00;MQ0=0;OQ=946.64;QD=12.46;SB=-438.36 GT:AD:DP:GL:GQ 0/1:44,31:68:-118.44,-20.49,-128.20:99
-chr1 4924889 rs3101218 G C 576.23 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1334.27;QD=16.68;SB=-624.99 GT:AD:DP:GL:GQ 0/1:41,39:77:-159.91,-23.20,-177.20:99
-chr1 4924920 rs3101219 T C 593.97 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1041.98;QD=16.28;SB=-455.18 GT:AD:DP:GL:GQ 0/1:28,36:64:-126.76,-19.28,-110.51:99
-chr1 4924999 rs3101220 G C 298.13 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.20;MQ0=0;OQ=811.79;QD=14.00;SB=-233.01 GT:AD:DP:GL:GQ 0/1:32,26:57:-101.64,-17.18,-138.57:99
-chr1 4925039 rs3128678 A G 0.26 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=4;HaplotypeScore=3.38;MQ=59.22;MQ0=0;OQ=1744.26;QD=32.30;SB=-816.04 GT:AD:DP:GL:GQ 1/1:0,54:50:-178.03,-15.06,-0.02:99
-chr1 4925077 rs3101221 C A 25.14 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.44;MQ=58.58;MQ0=0;OQ=647.61;QD=11.56;SB=-325.00 GT:AD:DP:GL:GQ 0/1:30,26:49:-82.82,-14.77,-78.79:99
-chr1 4925169 rs3128679 A G 107.98 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.44;MQ=60.00;MQ0=0;OQ=535.15;QD=8.92;SB=-144.42 GT:AD:DP:GL:GQ 0/1:36,24:59:-74.58,-17.78,-140.21:99
-chr1 4925429 rs3128680 G A 469.33 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=766.43;QD=14.46;SB=-348.86 GT:AD:DP:GL:GQ 0/1:29,24:53:-95.89,-15.97,-104.44:99
-chr1 4925430 rs3101222 C G 427.23 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=771.83;QD=15.13;SB=-299.97 GT:AD:DP:GL:GQ 0/1:28,23:50:-95.55,-15.08,-110.57:99
-chr1 4925635 rs3101223 A G 252.82 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=59.74;MQ0=0;OQ=1091.51;QD=12.26;SB=-378.11 GT:AD:DP:GL:GQ 0/1:48,41:87:-138.64,-26.21,-194.64:99
-chr1 4926101 rs3128681 G A 350.75 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.95;MQ=59.68;MQ0=0;OQ=1174.87;QD=16.55;SB=-610.10 GT:AD:DP:GL:GQ 0/1:35,35:70:-141.86,-21.09,-114.49:99
-chr1 4926299 rs1017724 C T 190.62 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1174.58;QD=15.06;SB=-383.10 GT:AD:DP:GL:GQ 0/1:41,37:77:-143.94,-23.19,-149.98:99
-chr1 4926372 rs1017726 A G 298.07 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=887.74;QD=17.07;SB=-423.28 GT:AD:DP:GL:GQ 0/1:22,30:52:-107.72,-15.67,-84.02:99
-chr1 4926476 rs3128682 A G 470.65 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=981.70;QD=13.27;SB=-502.91 GT:AD:DP:GL:GQ 0/1:33,41:71:-122.87,-21.41,-123.57:99
-chr1 4926532 rs3128683 G T 372.36 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.69;MQ0=0;OQ=1069.82;QD=14.26;SB=-471.94 GT:AD:DP:GL:GQ 0/1:37,38:72:-131.95,-21.69,-128.03:99
-chr1 4926586 rs34841047 T C 307.90 PASS AC=1;AF=0.50;AN=2;DB;DP=90;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.74;MQ0=0;OQ=1407.30;QD=15.64;SB=-662.64 GT:AD:DP:GL:GQ 0/1:42,48:89:-170.82,-26.81,-167.25:99
-chr1 4926613 rs7547938 A C 101.18 PASS AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=59.79;MQ0=0;OQ=2670.20;QD=30.00;SB=-1246.34 GT:AD:DP:GL:GQ 1/1:1,88:87:-270.68,-26.22,-0.07:99
-chr1 4926617 . G A 38.65 PASS AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=1;HaplotypeScore=1.60;MQ=59.78;MQ0=0;OQ=1691.34;QD=19.90;SB=-782.69 GT:AD:DP:GL:GQ 0/1:36,49:84:-197.72,-25.30,-133.23:99
-chr1 4926705 rs10799146 C G 149.65 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=59.64;MQ0=0;OQ=2201.93;QD=42.34;SB=-980.37 GT:AD:DP:GL:GQ 1/1:0,52:52:-223.80,-15.67,-0.02:99
-chr1 4926719 . T C 99.55 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.78;MQ=59.60;MQ0=0;OQ=721.00;QD=12.65;SB=-331.93 GT:AD:DP:GL:GQ 0/1:26,31:55:-91.96,-16.58,-103.71:99
-chr1 4926770 . T G 92.62 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.63;MQ=58.93;MQ0=0;OQ=842.91;QD=13.82;SB=-346.83 GT:AD:DP:GL:GQ 0/1:28,33:58:-105.05,-17.47,-101.93:99
-chr1 4926781 rs10915300 G A 186.83 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=58.91;MQ0=0;OQ=2257.64;QD=37.63;SB=-1055.32 GT:AD:DP:GL:GQ 1/1:0,60:57:-229.37,-17.17,-0.02:99
-chr1 4927339 rs6426375 C A 293.44 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.63;MQ0=0;OQ=1104.83;QD=17.54;SB=-437.22 GT:AD:DP:GL:GQ 0/1:25,38:59:-131.54,-17.77,-79.77:99
-chr1 4927361 rs12122012 G C 449.67 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=855.62;QD=14.50;SB=-302.94 GT:AD:DP:GL:GQ 0/1:34,25:57:-106.02,-17.18,-140.73:99
-chr1 4927449 rs12129823 C A 265.42 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.57;MQ=58.95;MQ0=0;OQ=867.88;QD=14.00;SB=-380.76 GT:AD:DP:GL:GQ 0/1:32,30:60:-108.15,-18.08,-97.33:99
-chr1 4927847 rs12122183 G A 490.19 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=1239.90;QD=16.31;SB=-577.98 GT:AD:DP:GL:GQ 0/1:38,38:75:-149.87,-22.60,-137.70:99
-chr1 4928324 rs10799147 T G 316.36 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.64;MQ0=0;OQ=672.70;QD=12.94;SB=-277.80 GT:AD:DP:GL:GQ 0/1:27,25:51:-85.91,-15.36,-101.41:99
-chr1 4928782 . A T 20.70 PASS AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=58.98;MQ0=0;OQ=748.61;QD=18.26;SB=-256.98 GT:AD:DP:GL:GQ 0/1:17,24:41:-90.49,-12.35,-66.37:99
-chr1 4930115 rs10799148 T G 517.72 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.72;MQ0=0;OQ=2291.16;QD=34.71;SB=-1027.09 GT:AD:DP:GL:GQ 1/1:0,66:65:-232.72,-19.58,-0.02:99
-chr1 4930427 rs34645017 G C 291.45 PASS AC=1;AF=0.50;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=722.42;QD=16.05;SB=-202.61 GT:AD:DP:GL:GQ 0/1:25,20:45:-89.08,-13.56,-109.77:99
-chr1 4930735 rs11578909 A G 280.08 PASS AC=1;AF=0.50;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=59.36;MQ0=0;OQ=698.77;QD=12.05;SB=-374.99 GT:AD:DP:GL:GQ 0/1:29,28:57:-90.34,-17.18,-117.72:99
-chr1 4931239 rs10799149 G A 641.63 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.08;MQ0=0;OQ=2438.74;QD=39.98;SB=-916.20 GT:AD:DP:GL:GQ 1/1:0,61:60:-247.47,-18.07,-0.01:99
-chr1 4931421 rs7518523 A G 261.63 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.88;MQ0=0;OQ=2083.34;QD=31.09;SB=-1042.40 GT:AD:DP:GL:GQ 1/1:0,67:65:-211.96,-19.60,-0.05:99
-chr1 4931997 rs10753344 T C 618.70 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2888.62;QD=33.98;SB=-1001.71 GT:AD:DP:GL:GQ 1/1:0,85:82:-292.48,-24.71,-0.04:99
-chr1 4932316 rs12127329 G A 183.50 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=60.00;MQ0=0;OQ=2411.54;QD=39.53;SB=-1136.02 GT:AD:DP:GL:GQ 1/1:0,61:61:-244.76,-18.38,-0.02:99
-chr1 4932881 rs11585724 C T 291.52 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.68;MQ=59.24;MQ0=0;OQ=985.86;QD=16.16;SB=-484.11 GT:AD:DP:GL:GQ 0/1:30,31:59:-119.65,-17.78,-92.67:99
-chr1 4932899 rs56016205 G C 205.73 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.90;MQ=58.78;MQ0=0;OQ=942.89;QD=16.54;SB=-283.52 GT:AD:DP:GL:GQ 0/1:30,27:56:-114.45,-16.88,-128.26:99
-chr1 4933102 rs56190527 G A 17.84 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=7.39;MQ=59.07;MQ0=0;OQ=754.79;QD=15.10;SB=-398.92 GT:AD:DP:GL:GQ 0/1:26,24:48:-93.22,-14.46,-90.86:99
-chr1 4933190 rs56216708 T C 104.26 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=1;HaplotypeScore=0.32;MQ=59.13;MQ0=0;OQ=1884.00;QD=35.55;SB=-879.00 GT:AD:DP:GL:GQ 1/1:0,53:53:-192.00,-15.97,-0.02:99
-chr1 4933296 . G A 768.22 SnpCluster AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.45;MQ0=0;QD=12.59;SB=-376.12 GT:AD:DP:GL:GQ 0/1:35,26:58:-97.59,-17.48,-110.76:99
-chr1 4933297 . C T 815.45 SnpCluster AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.45;MQ0=0;QD=13.37;SB=-431.91 GT:AD:DP:GL:GQ 0/1:35,26:61:-103.20,-18.37,-126.35:99
-chr1 4933303 . G A 803.12 SnpCluster AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.37;MQ0=0;QD=13.39;SB=-365.85 GT:AD:DP:GL:GQ 0/1:35,25:58:-101.08,-17.48,-105.94:99
-chr1 4933521 rs7535462 G A 371.82 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.07;MQ0=0;OQ=1957.02;QD=39.14;SB=-986.02 GT:AD:DP:GL:GQ 1/1:0,50:49:-199.30,-14.76,-0.01:99
-chr1 4933673 . C G 6.69 PASS AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=58.23;MQ0=0;OQ=1494.10;QD=22.64;SB=-505.26 GT:AD:DP:GL:GQ 0/1:26,40:63:-171.68,-18.99,-100.63:99
-chr1 4934014 rs12128545 G A 43.64 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=59.66;MQ0=0;OQ=1421.27;QD=20.90;SB=-664.71 GT:AD:DP:GL:GQ 0/1:27,41:67:-165.59,-20.18,-95.71:99
-chr1 4934078 rs12136209 C G 149.50 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.61;MQ=60.00;MQ0=0;OQ=1636.42;QD=21.82;SB=-832.32 GT:AD:DP:GL:GQ 0/1:31,44:75:-189.53,-22.60,-132.33:99
-chr1 4934416 rs12126894 T G 441.68 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=56.57;MQ0=0;OQ=586.00;QD=11.49;SB=-304.83 GT:AD:DP:GL:GQ 0/1:29,22:51:-77.25,-15.36,-105.02:99
-chr1 4935048 rs10915303 A G 334.36 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.69;MQ=51.50;MQ0=0;OQ=770.15;QD=12.84;SB=-364.97 GT:AD:DP:GL:GQ 0/1:27,33:52:-95.98,-15.68,-87.76:99
-chr1 4935474 rs34001007 G A 343.02 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=962.36;QD=16.88;SB=-495.13 GT:AD:DP:GL:GQ 0/1:27,30:56:-116.40,-16.88,-86.00:99
-chr1 4935789 rs12128035 T C 226.01 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.43;MQ=58.94;MQ0=0;OQ=796.37;QD=12.64;SB=-306.28 GT:AD:DP:GL:GQ 0/1:34,29:62:-101.60,-18.68,-137.85:99
-chr1 4936034 rs6689050 G C 388.76 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1874.06;QD=42.59;SB=-652.91 GT:AD:DP:GL:GQ 1/1:0,44:44:-191.00,-13.26,-0.01:99
-chr1 4936094 rs12757902 G A 302.17 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=59.62;MQ0=0;OQ=578.28;QD=11.80;SB=-268.20 GT:AD:DP:GL:GQ 0/1:27,21:43:-74.09,-12.98,-70.80:99
-chr1 4936362 rs12126016 G T 367.30 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.41;MQ0=0;OQ=1064.42;QD=14.99;SB=-543.63 GT:AD:DP:GL:GQ 0/1:34,37:71:-131.11,-21.39,-120.19:99
-chr1 4936409 rs11581023 G A 329.13 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=2.47;MQ=58.70;MQ0=0;OQ=1088.63;QD=16.49;SB=-413.38 GT:AD:DP:GL:GQ 0/1:32,34:63:-131.13,-18.99,-102.39:99
-chr1 4936482 rs12122541 A G 353.13 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=58.04;MQ0=0;OQ=684.77;QD=12.45;SB=-247.32 GT:AD:DP:GL:GQ 0/1:27,28:52:-87.43,-15.67,-100.04:99
-chr1 4936602 rs11584985 C T 191.63 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.33;MQ=59.29;MQ0=0;OQ=1088.30;QD=18.45;SB=-387.41 GT:AD:DP:GL:GQ 0/1:25,34:57:-129.30,-17.18,-77.34:99
-chr1 4936637 rs898335 T G 589.23 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2347.69;QD=35.57;SB=-808.10 GT:AD:DP:GL:GQ 1/1:0,66:66:-238.37,-19.88,-0.02:99
-chr1 4937911 rs12739724 G A 135.48 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=59.34;MQ0=0;OQ=1173.07;QD=20.58;SB=-518.55 GT:AD:DP:GL:GQ 0/1:24,33:57:-137.76,-17.17,-89.96:99
-chr1 4937953 rs6666618 A C 126.74 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=60.00;MQ0=0;OQ=1008.55;QD=15.28;SB=-391.76 GT:AD:DP:GL:GQ 0/1:30,36:65:-123.72,-19.58,-111.64:99
-chr1 4939240 rs1841241 A G 358.83 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.81;MQ=59.68;MQ0=0;OQ=900.69;QD=12.34;SB=-390.90 GT:AD:DP:GL:GQ 0/1:37,36:72:-115.05,-21.70,-146.81:99
-chr1 4939654 rs6660626 C G 245.03 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=59.55;MQ0=0;OQ=1495.04;QD=18.01;SB=-651.03 GT:AD:DP:GL:GQ 0/1:41,42:81:-177.21,-24.42,-163.44:99
-chr1 4940611 . A G 75.27 PASS AC=1;AF=0.50;AN=2;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.50;MQ0=0;OQ=761.25;QD=16.55;SB=-322.41 GT:AD:DP:GL:GQ 0/1:18,28:44:-92.67,-13.26,-69.31:99
-chr1 4941180 rs12138041 C G 147.56 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=59.43;MQ0=0;OQ=1446.36;QD=22.25;SB=-675.09 GT:AD:DP:GL:GQ 0/1:27,38:64:-167.20,-19.28,-114.12:99
-chr1 4941754 rs6426376 A C 0.05 FDRtranche0.10to1.00 AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=6;HaplotypeScore=1.65;MQ=58.89;MQ0=0;OQ=2125.54;QD=33.74;SB=-942.08 GT:AD:DP:GL:GQ 1/1:0,63:61:-216.16,-18.37,-0.02:99
-chr1 4942581 . C G 69.18 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.19;MQ0=0;OQ=1081.86;QD=18.98;SB=-432.32 GT:AD:DP:GL:GQ 0/1:28,29:57:-128.65,-17.18,-121.65:99
-chr1 4942801 rs12132419 G A 594.05 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.75;MQ0=0;OQ=1256.99;QD=16.76;SB=-497.49 GT:AD:DP:GL:GQ 0/1:35,40:73:-150.98,-21.99,-126.45:99
-chr1 4943594 rs1563791 C A 403.62 PASS AC=1;AF=0.50;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.16;MQ=58.68;MQ0=0;OQ=828.65;QD=15.63;SB=-357.20 GT:AD:DP:GL:GQ 0/1:25,28:53:-102.11,-15.96,-89.65:99
-chr1 4943942 rs10737391 T A 518.14 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.47;MQ0=0;OQ=2837.87;QD=37.84;SB=-993.50 GT:AD:DP:GL:GQ 1/1:0,75:74:-287.39,-22.29,-0.02:99
-chr1 4943949 rs6674570 C G 129.66 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.29;MQ0=0;OQ=3029.36;QD=43.28;SB=-1059.65 GT:AD:DP:GL:GQ 1/1:0,70:69:-306.54,-20.79,-0.02:99
-chr1 4943976 rs6689766 T C 365.66 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=56.77;MQ0=0;OQ=827.54;QD=14.03;SB=-391.26 GT:AD:DP:GL:GQ 0/1:29,30:57:-103.21,-17.17,-110.62:99
-chr1 4943997 rs6698166 G T 369.44 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.73;MQ0=0;OQ=860.15;QD=13.87;SB=-411.14 GT:AD:DP:GL:GQ 0/1:31,31:60:-107.37,-18.08,-104.72:99
-chr1 4943998 rs6698167 G A 353.24 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.73;MQ0=0;OQ=1051.24;QD=16.96;SB=-519.06 GT:AD:DP:GL:GQ 0/1:30,32:61:-126.79,-18.38,-103.11:99
-chr1 4944360 rs12131010 A G 342.06 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=58.85;MQ0=0;OQ=760.68;QD=9.88;SB=-317.87 GT:AD:DP:GL:GQ 0/1:43,34:75:-101.96,-22.60,-172.57:99
-chr1 4944890 rs1106586 G A 276.08 PASS AC=1;AF=0.50;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=1.40;MQ=59.59;MQ0=0;OQ=802.40;QD=14.33;SB=-392.78 GT:AD:DP:GL:GQ 0/1:30,26:55:-100.10,-16.58,-95.63:99
-chr1 4945646 rs898336 G C 25.91 PASS AC=2;AF=1.00;AN=2;DB;DP=96;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=56.72;MQ0=0;OQ=4154.41;QD=43.28;SB=-1921.01 GT:AD:DP:GL:GQ 1/1:0,96:94:-414.44,-28.32,-0.03:99
-chr1 4945654 rs7417805 T C 207.20 PASS AC=2;AF=1.00;AN=2;DB;DP=101;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=56.30;MQ0=0;OQ=3685.03;QD=36.49;SB=-1843.78 GT:AD:DP:GL:GQ 1/1:0,101:100:-367.50,-30.12,-0.02:99
-chr1 4946090 rs12046931 C T 231 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=2.55;MQ=56.28;MQ0=0;OQ=1030.23;QD=13.56;SB=-511.04 GT:AD:DP:GL:GQ 0/1:44,32:74:-128.62,-22.31,-131.20:99
-chr1 4946898 rs6679312 A G 627.33 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.42;MQ0=0;OQ=2846.93;QD=36.04;SB=-1277.52 GT:AD:DP:GL:GQ 1/1:0,79:79:-288.30,-23.79,-0.02:99
-chr1 4947277 . A C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=64;Dels=0.00;HRun=1;HaplotypeScore=4.31;MQ=58.55;MQ0=0;OQ=58.76;QD=0.92;SB=83.26 GT:AD:DP:GL:GQ 0/1:39,25:47:-23.33,-14.17,-133.19:91.60
-chr1 4947969 rs716671 G T 362.39 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=0.74;MQ=59.37;MQ0=0;OQ=959.61;QD=14.54;SB=-385.78 GT:AD:DP:GL:GQ 0/1:32,34:63:-118.22,-18.98,-106.13:99
-chr1 4948484 rs7541612 T C 301.06 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.16;MQ0=0;OQ=2459.32;QD=34.16;SB=-1006.88 GT:AD:DP:GL:GQ 1/1:0,72:70:-249.54,-21.08,-0.02:99
-chr1 4948794 rs10737392 A C 185.94 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2094.20;QD=29.50;SB=-992.36 GT:AD:DP:GL:GQ 1/1:0,71:69:-213.07,-20.80,-0.07:99
-chr1 4951092 rs12725971 A G 439.70 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.52;MQ0=0;OQ=1026.84;QD=13.16;SB=-423.90 GT:AD:DP:GL:GQ 0/1:43,35:78:-129.46,-23.49,-174.67:99
-chr1 4951570 rs6683624 C T 353.86 PASS AC=1;AF=0.50;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=2.63;MQ=59.06;MQ0=0;OQ=1065.83;QD=15.45;SB=-486.02 GT:AD:DP:GL:GQ 0/1:35,34:67:-130.05,-20.19,-121.88:99
-chr1 4953123 rs7418901 T C 620.55 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=2650.80;QD=31.56;SB=-1309.87 GT:AD:DP:GL:GQ 1/1:0,84:83:-268.73,-25.03,-0.06:99
-chr1 4955464 rs1459754 T C 197.18 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.56;MQ0=0;OQ=2710.14;QD=31.88;SB=-1351.75 GT:AD:DP:GL:GQ 1/1:0,85:84:-274.67,-25.33,-0.07:99
-chr1 4956424 rs12566071 T C 456.39 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.68;MQ0=0;OQ=1092.05;QD=27.30;SB=-412.16 GT:AD:DP:GL:GQ 1/1:0,40:36:-112.83,-10.86,-0.04:99
-chr1 4956725 rs12047194 C T 71.14 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.61;MQ=60.00;MQ0=0;OQ=1049.88;QD=16.93;SB=-178.21 GT:AD:DP:GL:GQ 0/1:29,33:61:-126.65,-18.37,-103.04:99
-chr1 4957085 . G A 6.71 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.62;MQ0=0;OQ=1318.00;QD=21.61;SB=-441.83 GT:AD:DP:GL:GQ 0/1:23,38:60:-153.16,-18.08,-75.01:99
-chr1 4957708 rs9701766 C T 287.33 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=59.24;MQ0=0;OQ=1921.26;QD=34.93;SB=-917.67 GT:AD:DP:GL:GQ 1/1:0,55:50:-195.73,-15.07,-0.02:99
-chr1 4957732 rs12134477 T G 328.37 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.88;MQ=59.35;MQ0=0;OQ=737.05;QD=11.52;SB=-389.76 GT:AD:DP:GL:GQ 0/1:34,30:62:-95.67,-18.68,-123.44:99
-chr1 4960336 rs9286972 T C 80.40 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=3;HaplotypeScore=0.87;MQ=59.38;MQ0=0;OQ=2352.51;QD=35.11;SB=-877.01 GT:AD:DP:GL:GQ 1/1:0,67:65:-238.86,-19.58,-0.02:99
-chr1 4960363 rs9286973 A G 217.69 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.91;MQ=58.74;MQ0=0;OQ=2328.65;QD=33.27;SB=-776.20 GT:AD:DP:GL:GQ 1/1:0,68:66:-236.47,-19.88,-0.02:99
-chr1 4960544 rs10158116 T C 435.93 PASS AC=2;AF=1.00;AN=2;DB;DP=28;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.17;MQ0=0;OQ=930.68;QD=33.24;SB=-423.17 GT:AD:DP:GL:GQ 1/1:0,28:27:-96.66,-8.13,-0.01:81.23
-chr1 4961077 rs1380469 C T 600.30 PASS AC=2;AF=1.00;AN=2;DB;DP=88;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3571.25;QD=40.58;SB=-1432.72 GT:AD:DP:GL:GQ 1/1:0,88:87:-356.13,-26.20,-0.02:99
-chr1 4961379 rs10158288 T C 503.56 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=2541.28;QD=30.99;SB=-793.00 GT:AD:DP:GL:GQ 1/1:0,82:80:-257.79,-24.13,-0.07:99
-chr1 4963153 rs10915307 G A 69.93 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=1.45;MQ=59.07;MQ0=0;OQ=713.61;QD=14.27;SB=-252.29 GT:AD:DP:GL:GQ 0/1:25,25:45:-88.21,-13.57,-68.76:99
-chr1 4964065 rs10737393 G C 566.31 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1749.68;QD=40.69;SB=-797.25 GT:AD:DP:GL:GQ 1/1:0,43:42:-178.57,-12.66,-0.02:99
-chr1 4964532 rs28667637 T C 501.28 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1316.20;QD=16.05;SB=-509.69 GT:AD:DP:GL:GQ 0/1:33,49:82:-159.62,-24.71,-131.78:99
-chr1 4964976 rs12027167 C T 376.96 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.50;MQ0=0;OQ=1085.57;QD=14.47;SB=-544.31 GT:AD:DP:GL:GQ 0/1:42,33:75:-134.44,-22.60,-148.57:99
-chr1 4965052 rs28444318 G A 401.64 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.69;MQ0=0;OQ=1204.51;QD=18.82;SB=-457.96 GT:AD:DP:GL:GQ 0/1:28,36:62:-142.42,-18.68,-88.92:99
-chr1 4965449 rs10915308 C T 686.42 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=2543.15;QD=38.53;SB=-937.28 GT:AD:DP:GL:GQ 1/1:0,66:64:-257.91,-19.28,-0.02:99
-chr1 4965556 rs12123277 C A 350.21 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=60.00;MQ0=0;OQ=722.36;QD=9.63;SB=-338.31 GT:AD:DP:GL:GQ 0/1:48,27:74:-97.81,-22.29,-174.39:99
-chr1 4965577 rs1380470 A G 738.02 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2392.77;QD=36.25;SB=-1196.76 GT:AD:DP:GL:GQ 1/1:0,66:66:-242.88,-19.88,-0.01:99
-chr1 4965710 rs10915309 G A 204.24 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.87;MQ=59.60;MQ0=0;OQ=2319.12;QD=39.98;SB=-986.30 GT:AD:DP:GL:GQ 1/1:0,58:58:-235.51,-17.47,-0.02:99
-chr1 4968070 rs10915310 A G 390.05 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.97;MQ=59.15;MQ0=0;OQ=1179.59;QD=14.39;SB=-449.76 GT:AD:DP:GL:GQ 0/1:38,44:81:-145.65,-24.41,-157.59:99
-chr1 4968105 rs10799151 A G 154.91 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=3.73;MQ=58.89;MQ0=0;OQ=1031.60;QD=12.74;SB=-406.80 GT:AD:DP:GL:GQ 0/1:40,41:78:-129.95,-23.51,-157.15:99
-chr1 4968710 . C G 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=41;Dels=0.00;HRun=0;HaplotypeScore=1.90;MQ=53.48;MQ0=0;OQ=64.03;QD=1.56;SB=-49.12 GT:AD:DP:GL:GQ 0/1:36,5:37:-20.84,-11.15,-143.24:96.86
-chr1 4968815 rs10915311 A C 217.55 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.03;MQ0=0;OQ=2004.53;QD=29.92;SB=-920.78 GT:AD:DP:GL:GQ 1/1:0,66:64:-204.09,-19.29,-0.06:99
-chr1 4969030 rs34951087 G T 218.41 PASS AC=1;AF=0.50;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=59.09;MQ0=0;OQ=572.86;QD=11.23;SB=-277.34 GT:AD:DP:GL:GQ 0/1:30,21:51:-75.93,-15.36,-106.99:99
-chr1 4970267 rs10915312 A G 154.58 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=2;HaplotypeScore=1.56;MQ=58.90;MQ0=0;OQ=985.64;QD=12.32;SB=-409.96 GT:AD:DP:GL:GQ 0/1:41,39:79:-125.65,-23.81,-166.76:99
-chr1 4970523 rs12045336 A G 132 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.57;MQ=59.62;MQ0=0;OQ=1080.57;QD=17.71;SB=-383.65 GT:AD:DP:GL:GQ 0/1:25,36:60:-129.41,-18.07,-101.07:99
-chr1 4971344 . A C 49.60 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=0;HaplotypeScore=45.73;MQ=55.38;MQ0=0;QD=0.57;SB=95.30 GT:AD:DP:GL:GQ 0/1:77,10:78:-31.75,-23.50,-240.44:82.44
-chr1 4972155 rs1870516 C T 119.50 PASS AC=1;AF=0.50;AN=2;DB;DP=95;Dels=0.00;HRun=2;HaplotypeScore=2.64;MQ=59.76;MQ0=0;OQ=1584.03;QD=16.67;SB=-599.54 GT:AD:DP:GL:GQ 0/1:49,46:91:-189.10,-27.42,-151.90:99
-chr1 4972838 rs1459756 T C 570.91 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=978.37;QD=13.22;SB=-505.27 GT:AD:DP:GL:GQ 0/1:38,36:72:-122.81,-21.69,-153.16:99
-chr1 4972952 rs9286975 G A 397.79 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2673.75;QD=39.91;SB=-1305.72 GT:AD:DP:GL:GQ 1/1:0,67:67:-270.98,-20.18,-0.02:99
-chr1 4973015 rs9662653 T A 589.24 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.20;MQ0=0;OQ=1272.49;QD=16.74;SB=-576.01 GT:AD:DP:GL:GQ 0/1:36,40:76:-153.42,-22.89,-135.61:99
-chr1 4973096 rs9701780 T C 360.62 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.34;MQ0=0;OQ=907.74;QD=12.97;SB=-427.52 GT:AD:DP:GL:GQ 0/1:38,32:70:-115.14,-21.08,-154.90:99
-chr1 4973099 rs1459757 A G 435.82 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.36;MQ0=0;OQ=906.72;QD=12.59;SB=-477.95 GT:AD:DP:GL:GQ 0/1:40,32:72:-115.64,-21.69,-161.61:99
-chr1 4973396 rs10753346 T C 325.42 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.65;MQ0=0;OQ=745.38;QD=11.29;SB=-293.22 GT:AD:DP:GL:GQ 0/1:39,27:65:-97.40,-19.58,-152.44:99
-chr1 4973518 rs10799152 A C 461.39 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.77;MQ0=0;OQ=1062.89;QD=13.29;SB=-461.68 GT:AD:DP:GL:GQ 0/1:43,37:80:-133.67,-24.09,-159.84:99
-chr1 4974497 rs35292186 A G 69.66 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=59.78;MQ0=0;OQ=1148.97;QD=13.84;SB=-573.87 GT:AD:DP:GL:GQ 0/1:43,40:81:-142.58,-24.40,-174.12:99
-chr1 4976182 rs10915314 G C 291.75 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.96;MQ=60.00;MQ0=0;OQ=1306.22;QD=17.65;SB=-415.30 GT:AD:DP:GL:GQ 0/1:38,36:73:-155.90,-22.00,-163.97:99
-chr1 4977412 rs12047764 T C 324.11 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.73;MQ=59.63;MQ0=0;OQ=712.65;QD=11.49;SB=-368.84 GT:AD:DP:GL:GQ 0/1:33,29:62:-93.24,-18.69,-135.85:99
-chr1 4978209 rs10915315 A G 314.02 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.17;MQ0=0;OQ=593.55;QD=8.73;SB=-263.22 GT:AD:DP:GL:GQ 0/1:42,26:67:-82.83,-20.19,-168.85:99
-chr1 4978799 rs10915316 T C 253.84 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=3.42;MQ=59.03;MQ0=0;OQ=793.88;QD=11.03;SB=-421.21 GT:AD:DP:GL:GQ 0/1:40,31:69:-103.46,-20.78,-159.70:99
-chr1 4980236 . G A 100.41 PASS AC=1;AF=0.50;AN=2;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.79;MQ0=0;OQ=1786.33;QD=21.02;SB=-886.64 GT:AD:DP:GL:GQ 0/1:34,51:83:-206.92,-25.00,-119.27:99
-chr1 4980926 rs10915317 T C 438.47 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.93;MQ=59.66;MQ0=0;OQ=838.53;QD=12.33;SB=-314.09 GT:AD:DP:GL:GQ 0/1:34,34:67:-107.33,-20.19,-138.42:99
-chr1 4981033 rs898337 G A 348.85 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.70;MQ0=0;OQ=1302.29;QD=16.91;SB=-502.50 GT:AD:DP:GL:GQ 0/1:36,41:75:-156.11,-22.60,-126.45:99
-chr1 4981597 rs7516703 C T 165.71 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=1.76;MQ=60.19;MQ0=0;OQ=561.42;QD=9.85;SB=-184.86 GT:AD:DP:GL:GQ 0/1:36,21:54:-75.71,-16.28,-112.37:99
-chr1 4982000 rs10799153 A G 596.01 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.94;MQ0=0;OQ=1157.46;QD=16.30;SB=-464.59 GT:AD:DP:GL:GQ 0/1:32,39:71:-140.42,-21.40,-120.74:99
-chr1 4983908 . G A 17.79 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=67;Dels=0.00;HRun=16;HaplotypeScore=7.18;MQ=55.71;MQ0=0;QD=0.27;SB=86.25 GT:AD:DP:GL:GQ 0/1:51,16:49:-19.83,-14.77,-145.36:50.55
-chr1 4985809 rs9439574 C T 11.86 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=4;HaplotypeScore=0.16;MQ=58.95;MQ0=0;OQ=1576.28;QD=19.70;SB=-625.03 GT:AD:DP:GL:GQ 0/1:34,46:79:-184.71,-23.79,-124.63:99
-chr1 4985815 rs9439575 A G 487 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.98;MQ0=0;OQ=1410.52;QD=17.20;SB=-545.94 GT:AD:DP:GL:GQ 0/1:36,46:82:-169.04,-24.70,-144.72:99
-chr1 4986567 rs10218468 A C 245.59 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=789.54;QD=11.78;SB=-394.67 GT:AD:DP:GL:GQ 0/1:34,33:66:-102.12,-19.88,-128.07:99
-chr1 4987124 rs10442625 A G 373.16 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.11;MQ=59.63;MQ0=0;OQ=720.29;QD=11.43;SB=-219.26 GT:AD:DP:GL:GQ 0/1:37,26:62:-93.99,-18.68,-145.68:99
-chr1 4988477 rs2169089 A G 373.87 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=1.63;MQ=59.69;MQ0=0;OQ=1114.19;QD=14.86;SB=-356.97 GT:AD:DP:GL:GQ 0/1:29,45:72:-136.41,-21.71,-118.67:99
-chr1 4988875 rs716112 A G 453.40 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=842.62;QD=12.58;SB=-426.87 GT:AD:DP:GL:GQ 0/1:33,34:66:-107.44,-19.90,-129.75:99
-chr1 4990575 rs1459764 C T 573.83 PASS AC=1;AF=0.50;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.71;MQ0=0;OQ=1234.93;QD=15.63;SB=-612.07 GT:AD:DP:GL:GQ 0/1:42,37:78:-150.28,-23.50,-132.81:99
-chr1 4990857 rs9439507 A G 285 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.35;MQ0=0;OQ=2461.09;QD=34.66;SB=-1130.69 GT:AD:DP:GL:GQ 1/1:0,71:71:-249.72,-21.39,-0.03:99
-chr1 4991092 rs10442626 G C 211.49 PASS AC=1;AF=0.50;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=59.60;MQ0=0;OQ=718.97;QD=12.61;SB=-159.21 GT:AD:DP:GL:GQ 0/1:31,26:54:-91.46,-16.28,-132.88:99
-chr1 4991687 rs4949164 A G 470.49 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=60.00;MQ0=0;OQ=1103.70;QD=13.80;SB=-401.93 GT:AD:DP:GL:GQ 0/1:38,42:79:-137.46,-23.80,-155.83:99
-chr1 4993546 rs7533014 T C 526.25 PASS AC=1;AF=0.50;AN=2;DB;DP=91;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1036.32;QD=11.39;SB=-442.91 GT:AD:DP:GL:GQ 0/1:49,42:90:-134.04,-27.12,-197.59:99
-chr1 4993852 rs11580542 A G 170.64 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.73;MQ0=0;OQ=650.23;QD=9.56;SB=-317.81 GT:AD:DP:GL:GQ 0/1:43,25:66:-88.19,-19.88,-168.41:99
-chr1 4994065 . C T 20.53 PASS AC=1;AF=0.50;AN=2;DP=71;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1330.95;QD=18.75;SB=-592.09 GT:AD:DP:GL:GQ 0/1:33,38:71:-157.76,-21.38,-120.30:99
-chr1 4994295 rs6693990 G A 335.33 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.95;MQ=57.88;MQ0=0;OQ=1019.69;QD=16.19;SB=-465.42 GT:AD:DP:GL:GQ 0/1:31,32:60:-123.32,-18.07,-111.15:99
-chr1 4994563 rs1459763 A G 13.43 PASS AC=1;AF=0.50;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=5.21;MQ=58.04;MQ0=0;OQ=377.66;QD=9.21;SB=-181.57 GT:AD:DP:GL:GQ 0/1:25,16:38:-52.50,-11.45,-93.25:99
-chr1 4995722 rs1459762 C T 513.24 PASS AC=1;AF=0.50;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=1249.58;QD=19.22;SB=-511.06 GT:AD:DP:GL:GQ 0/1:27,38:64:-147.53,-19.29,-84.78:99
-chr1 4996533 . T G 102.56 PASS AC=1;AF=0.50;AN=2;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.96;MQ=59.08;MQ0=0;OQ=597.86;QD=9.80;SB=-320.69 GT:AD:DP:GL:GQ 0/1:35,26:61:-81.45,-18.38,-132.05:99
-chr1 4999697 . C G 5.71 PASS AC=1;AF=0.50;AN=2;DP=88;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=59.53;MQ0=0;OQ=2076.06;QD=23.59;SB=-758.01 GT:AD:DP:GL:GQ 0/1:34,54:87:-237.12,-26.23,-133.95:99
-chr1 4999785 . A G 153.89 PASS AC=1;AF=0.50;AN=2;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.27;MQ=59.42;MQ0=0;OQ=950.41;QD=13.20;SB=-485.20 GT:AD:DP:GL:GQ 0/1:39,33:71:-119.71,-21.39,-153.18:99
-chr1 5000124 rs35565495 A G 217.11 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.82;MQ=57.68;MQ0=0;OQ=905.68;QD=12.41;SB=-443.62 GT:AD:DP:GL:GQ 0/1:40,33:73:-115.85,-22.00,-156.82:99
-chr1 5000551 rs1459761 A G 316.71 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=2.15;MQ=59.68;MQ0=0;OQ=1082.64;QD=18.35;SB=-522.18 GT:AD:DP:GL:GQ 0/1:24,35:59:-129.32,-17.77,-97.53:99
-chr1 5002004 rs12403444 A G 454.86 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.14;MQ=59.69;MQ0=0;OQ=1008.17;QD=13.62;SB=-385.25 GT:AD:DP:GL:GQ 0/1:38,36:71:-125.49,-21.39,-141.83:99
-chr1 5002384 rs12403749 A G 334.10 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.18;MQ0=0;OQ=762.42;QD=12.92;SB=-306.27 GT:AD:DP:GL:GQ 0/1:32,27:59:-97.30,-17.77,-132.93:99
-chr1 5002965 rs55998096 C T 265.85 PASS AC=1;AF=0.50;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1237.12;QD=16.95;SB=-623.66 GT:AD:DP:GL:GQ 0/1:35,38:72:-148.68,-21.69,-128.69:99
-chr1 5003908 rs1459759 T G 287.81 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.68;MQ0=0;OQ=1018.83;QD=14.15;SB=-495.74 GT:AD:DP:GL:GQ 0/1:34,38:70:-126.25,-21.08,-125.30:99
-chr1 5004548 . C T 0.18 PASS AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=4;HaplotypeScore=0.97;MQ=55.65;MQ0=0;OQ=1952.83;QD=19.15;SB=-933.54 GT:AD:DP:GL:GQ 0/1:44,58:102:-229.30,-30.73,-156.88:99
-chr1 5004874 rs55883351 G A 211.60 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=41.17;MQ0=0;OQ=1434.24;QD=17.49;SB=-707.75 GT:AD:DP:GL:GQ 0/1:39,43:79:-170.52,-23.81,-118.83:99
-chr1 5005796 . T G 22.56 PASS AC=1;AF=0.50;AN=2;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.97;MQ=52.68;MQ0=0;OQ=1101.12;QD=15.73;SB=-417.74 GT:AD:DP:GL:GQ 0/1:29,41:66:-133.27,-19.88,-106.95:99
-chr1 5005889 rs10737394 A G 342.71 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=55.43;MQ0=0;OQ=434.38;QD=9.05;SB=-233.28 GT:AD:DP:GL:GQ 0/1:27,21:46:-60.59,-13.87,-106.69:99
-chr1 5006532 rs10799156 G C 195.83 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=38.14;MQ0=9;OQ=508.53;QD=10.38;SB=-226.35 GT:AD:DP:GL:GQ 0/1:19,30:34:-64.39,-10.25,-81.21:99
-chr1 5007005 rs6603829 T C 0.07 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=16.12;MQ=27.87;MQ0=17;OQ=171.08;QD=2.19;SB=-108.70 GT:AD:DP:GL:GQ 0/1:51,27:35:-30.94,-10.55,-97.26:99
-chr1 5007006 rs6603830 G A 0.04 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=18.32;MQ=27.85;MQ0=18;OQ=165.82;QD=2.13;SB=-81.55 GT:AD:DP:GL:GQ 0/1:59,19:36:-30.72,-10.85,-97.29:99
-chr1 5007287 . C G 0.46 PASS AC=1;AF=0.50;AN=2;DP=52;Dels=0.00;HRun=1;HaplotypeScore=8.19;MQ=48.27;MQ0=4;OQ=754.87;QD=14.52;SB=-244.08 GT:AD:DP:GL:GQ 0/1:26,25:44:-92.04,-13.27,-89.64:99
-chr1 5007421 . A G 0.01 FDRtranche2.00to10.00 AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=1;HaplotypeScore=5.43;MQ=22.24;MQ0=26;OQ=110.20;QD=1.12;SB=7.49 GT:AD:DP:GL:GQ 0/1:85,12:42:-26.95,-12.65,-140.65:99
-chr1 5007424 . G C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=2;HaplotypeScore=3.53;MQ=23.00;MQ0=24;OQ=143.47;QD=1.54;SB=3.27 GT:AD:DP:GL:GQ 0/1:81,12:42:-30.29,-12.66,-152.47:99
-chr1 5011084 . C G 46.29 PASS AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=45.50;MQ0=2;OQ=1885.25;QD=20.27;SB=-717.97 GT:AD:DP:GL:GQ 0/1:41,52:88:-218.32,-26.51,-163.98:99
-chr1 5011731 . C T 18.24 PASS AC=1;AF=0.50;AN=2;DP=87;Dels=0.00;HRun=2;HaplotypeScore=0.79;MQ=54.65;MQ0=1;OQ=1577.37;QD=18.13;SB=-623.62 GT:AD:DP:GL:GQ 0/1:41,46:86:-186.92,-25.90,-147.64:99
-chr1 5012084 rs10915327 C T 347.57 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=48.94;MQ0=2;OQ=1240.99;QD=17.24;SB=-606.09 GT:AD:DP:GL:GQ 0/1:32,40:68:-147.88,-20.49,-101.20:99
-chr1 5012508 . G A 165.62 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=0;HaplotypeScore=0.74;MQ=34.81;MQ0=2;OQ=954.73;QD=16.75;SB=-470.48 GT:AD:DP:GL:GQ 0/1:23,33:48:-113.23,-14.48,-57.23:99
-chr1 5014453 . C A 65.76 PASS AC=1;AF=0.50;AN=2;DP=89;Dels=0.00;HRun=1;HaplotypeScore=0.92;MQ=59.79;MQ0=0;OQ=1613.72;QD=18.13;SB=-734.55 GT:AD:DP:GL:GQ 0/1:38,51:88:-191.16,-26.50,-131.97:99
-chr1 5016018 . T G 165.96 PASS AC=1;AF=0.50;AN=2;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=1295.09;QD=17.50;SB=-624.73 GT:AD:DP:GL:GQ 0/1:31,43:74:-155.08,-22.29,-116.52:99
-chr1 5018516 rs4262591 A T 76.12 PASS AC=1;AF=0.50;AN=2;DB;DP=89;Dels=0.00;HRun=2;HaplotypeScore=0.94;MQ=59.27;MQ0=0;OQ=1137.62;QD=12.78;SB=-520.24 GT:AD:DP:GL:GQ 0/1:50,39:87:-143.25,-26.20,-190.22:99
-chr1 5020923 rs970119 A C 493.82 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=718.78;QD=10.27;SB=-241.77 GT:AD:DP:GL:GQ 0/1:40,30:69:-95.95,-20.78,-149.31:99
-chr1 5023267 . C G 91.77 PASS AC=1;AF=0.50;AN=2;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.92;MQ0=0;OQ=800.92;QD=19.07;SB=-315.01 GT:AD:DP:GL:GQ 0/1:20,22:41:-95.73,-12.36,-81.61:99
-chr1 5024719 rs1563792 G A 196.62 PASS AC=1;AF=0.50;AN=2;DB;DP=82;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=59.54;MQ0=0;OQ=1348.55;QD=16.45;SB=-599.05 GT:AD:DP:GL:GQ 0/1:42,40:80:-162.25,-24.11,-132.60:99
-chr1 5027451 rs56184292 G T 6.36 PASS AC=1;AF=0.50;AN=2;DB;DP=94;Dels=0.00;HRun=4;HaplotypeScore=0.58;MQ=60.00;MQ0=0;OQ=1415.10;QD=15.05;SB=-721.57 GT:AD:DP:GL:GQ 0/1:44,49:93:-172.81,-28.02,-154.91:99
-chr1 5029434 rs2061494 T A 49.68 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=59.72;MQ0=0;OQ=1567.79;QD=19.36;SB=-635.43 GT:AD:DP:GL:GQ 0/1:33,47:79:-183.86,-23.79,-122.93:99
-chr1 5029438 rs2061493 T A 66.27 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=1.72;MQ=59.72;MQ0=0;OQ=1477.11;QD=18.24;SB=-663.80 GT:AD:DP:GL:GQ 0/1:33,48:80:-175.09,-24.10,-128.48:99
-chr1 5029774 rs55724572 C A 223.76 PASS AC=1;AF=0.50;AN=2;DB;DP=101;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.17;MQ0=0;OQ=1394.44;QD=13.81;SB=-671.07 GT:AD:DP:GL:GQ 0/1:55,46:101:-173.14,-30.41,-200.20:99
-chr1 5029802 rs56297253 G A 420.62 PASS AC=1;AF=0.50;AN=2;DB;DP=102;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.18;MQ0=0;OQ=1452.74;QD=14.24;SB=-632.72 GT:AD:DP:GL:GQ 0/1:58,44:100:-178.69,-30.14,-182.65:99
-chr1 5030141 rs1459758 C G 545.16 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2835.80;QD=42.33;SB=-1264.90 GT:AD:DP:GL:GQ 1/1:0,67:65:-287.18,-19.58,-0.01:99
-chr1 5032542 rs977665 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=92;Dels=0.00;HRun=14;HaplotypeScore=4.90;MQ=58.74;MQ0=0;OQ=53.47;QD=0.58;SB=128.44 GT:AD:DP:GL:GQ 0/1:77,15:69:-29.43,-20.80,-218.90:86.30
-chr1 5036504 rs922123 T C 526.95 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.12;MQ0=0;OQ=805.20;QD=10.88;SB=-361.22 GT:AD:DP:GL:GQ 0/1:44,30:74:-106.10,-22.29,-176.34:99
-chr1 5036703 rs55875722 T A 259.30 PASS AC=1;AF=0.50;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.65;MQ0=0;OQ=1241.65;QD=18.81;SB=-625.13 GT:AD:DP:GL:GQ 0/1:28,38:64:-146.72,-19.28,-96.42:99
-chr1 5036704 rs922124 T A 61.83 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=59.67;MQ0=0;OQ=2561.19;QD=37.12;SB=-1099.66 GT:AD:DP:GL:GQ 1/1:0,69:68:-259.72,-20.48,-0.02:99
-chr1 5036974 rs56077964 G A 617 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2268.61;QD=38.45;SB=-1080.42 GT:AD:DP:GL:GQ 1/1:0,59:56:-230.46,-16.87,-0.01:99
-chr1 5039060 rs56186517 C T 567.90 PASS AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.53;MQ0=0;OQ=3555.73;QD=39.95;SB=-1607.16 GT:AD:DP:GL:GQ 1/1:0,89:87:-354.57,-26.20,-0.02:99
-chr1 5039732 rs56347558 T C 203.59 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.44;MQ=59.06;MQ0=0;OQ=2530.73;QD=34.20;SB=-928.36 GT:AD:DP:GL:GQ 1/1:0,73:71:-256.68,-21.39,-0.02:99
-chr1 5040152 rs3128686 G T 232.26 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.70;MQ0=0;OQ=2534.37;QD=32.49;SB=-1255.28 GT:AD:DP:GL:GQ 1/1:1,77:71:-257.05,-21.39,-0.03:99
-chr1 5040933 rs12045197 A T 91.33 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=2.81;MQ=44.79;MQ0=0;OQ=1582.06;QD=35.96;SB=-689.38 GT:AD:DP:GL:GQ 1/1:0,44:44:-161.81,-13.26,-0.02:99
-chr1 5041153 rs3128687 G T 199.02 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=55.94;MQ0=0;OQ=2861.17;QD=36.22;SB=-1432.06 GT:AD:DP:GL:GQ 1/1:0,79:77:-289.72,-23.19,-0.02:99
-chr1 5041314 rs3128688 A T 418.75 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.72;MQ0=0;OQ=2724.95;QD=37.85;SB=-1190.46 GT:AD:DP:GL:GQ 1/1:0,72:72:-276.10,-21.69,-0.02:99
-chr1 5041500 rs3128689 C A 313.60 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.24;MQ=59.77;MQ0=0;OQ=2974.21;QD=36.27;SB=-1175.38 GT:AD:DP:GL:GQ 1/1:0,82:81:-301.03,-24.39,-0.02:99
-chr1 5042266 rs10915339 G A 611.24 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.20;MQ0=0;OQ=2730.95;QD=39.01;SB=-1105.02 GT:AD:DP:GL:GQ 1/1:0,70:70:-276.70,-21.09,-0.02:99
-chr1 5042286 rs10915340 T C 619.37 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.86;MQ0=0;OQ=2323.00;QD=35.20;SB=-939.39 GT:AD:DP:GL:GQ 1/1:0,65:65:-235.90,-19.58,-0.02:99
-chr1 5042412 rs10915341 T G 227.06 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.39;MQ0=0;OQ=2175.06;QD=35.66;SB=-984.12 GT:AD:DP:GL:GQ 1/1:0,61:61:-221.11,-18.37,-0.01:99
-chr1 5042489 rs12029437 C G 85.77 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=2.70;MQ=59.16;MQ0=0;OQ=2913.26;QD=40.46;SB=-1456.73 GT:AD:DP:GL:GQ 1/1:0,72:69:-294.94,-20.80,-0.03:99
-chr1 5042644 rs12047111 A G 505.22 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=1237.53;QD=28.78;SB=-430.81 GT:AD:DP:GL:GQ 1/1:0,43:41:-127.38,-12.37,-0.05:99
-chr1 5042678 rs2334263 T C 624.61 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=1911.69;QD=29.87;SB=-888.47 GT:AD:DP:GL:GQ 1/1:0,64:60:-194.81,-18.10,-0.06:99
-chr1 5043104 rs10799159 C A 257.58 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=59.14;MQ0=0;OQ=3046.41;QD=35.84;SB=-1505.91 GT:AD:DP:GL:GQ 1/1:0,85:84:-308.25,-25.30,-0.02:99
-chr1 5043177 rs10799160 G A 205.89 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=1.49;MQ=59.29;MQ0=0;OQ=2756.78;QD=37.25;SB=-1155.91 GT:AD:DP:GL:GQ 1/1:1,72:71:-282.75,-21.39,-3.49:99
-chr1 5043218 rs10799161 A C 127.41 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.10;MQ0=0;OQ=2285.87;QD=29.69;SB=-810.83 GT:AD:DP:GL:GQ 1/1:0,77:71:-232.22,-21.39,-0.05:99
-chr1 5048318 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=69;Dels=0.00;HRun=4;HaplotypeScore=11.35;MQ=48.17;MQ0=0;OQ=57.54;QD=0.83;SB=77.27 GT:AD:DP:GL:GQ 0/1:47,22:47:-23.20,-14.17,-150.00:90.38
-chr1 5048545 rs10915343 T C 699.40 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.89;MQ0=0;OQ=1690.53;QD=34.50;SB=-831.35 GT:AD:DP:GL:GQ 1/1:0,49:48:-172.65,-14.46,-0.01:99
-chr1 5050626 rs3101213 A G 203.57 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=59.71;MQ0=0;OQ=2864.75;QD=36.26;SB=-1335.60 GT:AD:DP:GL:GQ 1/1:0,79:79:-290.08,-23.79,-0.02:99
-chr1 5051336 rs2199215 T C 701.57 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2974.37;QD=35.84;SB=-1419.92 GT:AD:DP:GL:GQ 1/1:0,83:83:-301.05,-25.00,-0.02:99
-chr1 5052019 rs12121092 G T 639.83 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2775.75;QD=36.52;SB=-1128.45 GT:AD:DP:GL:GQ 1/1:0,76:76:-281.18,-22.89,-0.02:99
-chr1 5057740 rs55852005 G A 37.87 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=3;HaplotypeScore=1.46;MQ=59.22;MQ0=0;OQ=1090.29;QD=18.48;SB=-513.03 GT:AD:DP:GL:GQ 0/1:26,33:57:-129.48,-17.17,-87.67:99
-chr1 5058085 rs4949171 C T 168.96 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=1.62;MQ=59.33;MQ0=0;OQ=2116.23;QD=37.79;SB=-957.98 GT:AD:DP:GL:GQ 1/1:0,56:55:-215.23,-16.58,-0.02:99
-chr1 5058717 rs9803863 G A 206.60 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=59.13;MQ0=0;OQ=2766.44;QD=39.52;SB=-1272.71 GT:AD:DP:GL:GQ 1/1:0,69:70:-283.01,-23.72,-2.78:99
-chr1 5059210 rs982156 T C 60.22 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.49;MQ=59.24;MQ0=0;OQ=1823.01;QD=33.15;SB=-568.39 GT:AD:DP:GL:GQ 1/1:0,55:54:-185.91,-16.27,-0.03:99
-chr1 5060220 rs992597 C T 157.27 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.89;MQ=59.01;MQ0=0;OQ=2915.53;QD=38.36;SB=-981.32 GT:AD:DP:GL:GQ 1/1:0,76:74:-295.16,-22.30,-0.02:99
-chr1 5060522 rs2242157 G T 298.92 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.45;MQ0=0;OQ=2405.81;QD=35.38;SB=-942.03 GT:AD:DP:GL:GQ 1/1:0,68:68:-244.19,-20.49,-0.03:99
-chr1 5060591 rs1459766 T G 395.54 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.24;MQ0=0;OQ=2600.59;QD=35.14;SB=-1143.14 GT:AD:DP:GL:GQ 1/1:0,74:73:-263.67,-21.99,-0.02:99
-chr1 5061734 rs9439532 C T 112.42 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=2.81;MQ=59.34;MQ0=0;OQ=2118.20;QD=37.16;SB=-1042.39 GT:AD:DP:GL:GQ 1/1:0,57:54:-215.42,-16.27,-0.02:99
-chr1 5062366 rs6683881 C T 35.99 PASS AC=2;AF=1.00;AN=2;DB;DP=91;Dels=0.00;HRun=1;HaplotypeScore=1.70;MQ=59.80;MQ0=0;OQ=3619.28;QD=39.77;SB=-1734.02 GT:AD:DP:GL:GQ 1/1:0,91:89:-360.93,-26.81,-0.02:99
-chr1 5062541 rs4949170 A G 156.11 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=0;HaplotypeScore=1.86;MQ=59.71;MQ0=0;OQ=2632.93;QD=33.33;SB=-1332.58 GT:AD:DP:GL:GQ 1/1:0,79:75:-266.90,-22.59,-0.03:99
-chr1 5062567 rs4949169 A T 172.52 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.83;MQ=59.68;MQ0=0;OQ=2759.54;QD=37.80;SB=-995.13 GT:AD:DP:GL:GQ 1/1:0,73:72:-279.55,-21.68,-0.01:99
-chr1 5063485 rs9439576 C G 98.90 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.17;MQ0=0;OQ=3111.26;QD=39.89;SB=-1145.60 GT:AD:DP:GL:GQ 1/1:0,77:71:-314.73,-21.39,-0.02:99
-chr1 5063671 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=60;Dels=0.00;HRun=2;HaplotypeScore=26.54;MQ=57.06;MQ0=0;OQ=128.17;QD=2.14;SB=77.28 GT:AD:DP:GL:GQ 0/1:38,22:39:-27.89,-11.79,-122.93:99
-chr1 5064284 rs2169090 T C 707.36 PASS AC=2;AF=1.00;AN=2;DB;DP=89;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.41;MQ0=0;OQ=3152.45;QD=35.42;SB=-1370.23 GT:AD:DP:GL:GQ 1/1:0,89:88:-318.85,-26.50,-0.02:99
-chr1 5066340 rs57000660 A G 484.39 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=766.60;QD=12.99;SB=-402.18 GT:AD:DP:GL:GQ 0/1:32,27:59:-97.71,-17.77,-131.87:99
-chr1 5066393 rs1037809 C T 706.58 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3074.28;QD=39.41;SB=-1449.38 GT:AD:DP:GL:GQ 1/1:0,78:78:-311.04,-23.50,-0.02:99
-chr1 5068397 rs6659363 G C 337.44 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.22;MQ0=0;OQ=768.71;QD=14.24;SB=-229.04 GT:AD:DP:GL:GQ 0/1:31,23:53:-96.12,-15.97,-137.34:99
-chr1 5068500 rs12124337 A C 365.74 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=60.00;MQ0=0;OQ=1243.29;QD=15.94;SB=-471.71 GT:AD:DP:GL:GQ 0/1:35,43:77:-150.81,-23.19,-127.77:99
-chr1 5068523 rs10733013 C T 471.58 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=1107.71;QD=14.39;SB=-422.79 GT:AD:DP:GL:GQ 0/1:43,34:75:-136.66,-22.60,-133.09:99
-chr1 5069554 rs2722789 G A 592.26 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1009.56;QD=14.02;SB=-503.00 GT:AD:DP:GL:GQ 0/1:41,31:72:-125.95,-21.71,-131.55:99
-chr1 5070551 rs4949160 A T 476.97 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.42;MQ0=0;OQ=1068.05;QD=14.83;SB=-488.53 GT:AD:DP:GL:GQ 0/1:37,35:71:-131.47,-21.38,-142.74:99
-chr1 5071819 . G A 258.71 PASS AC=1;AF=0.50;AN=2;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=1213.24;QD=16.18;SB=-353.81 GT:AD:DP:GL:GQ 0/1:39,36:75:-147.20,-22.59,-142.20:99
-chr1 5071854 . T A 81.17 PASS AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.95;MQ=60.00;MQ0=0;OQ=1149.23;QD=14.19;SB=-304.96 GT:AD:DP:GL:GQ 0/1:43,38:80:-142.31,-24.10,-164.66:99
-chr1 5072229 . G A 304.80 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=81;Dels=0.01;HRun=0;HaplotypeScore=64.90;MQ=44.02;MQ0=0;QD=3.76;SB=86.27 GT:AD:DP:GL:GQ 0/1:66,14:79:-57.26,-23.50,-230.57:99
-chr1 5072230 . C G 37.37 DPFilter;LowQual;SnpCluster AC=1;AF=0.50;AN=2;DP=83;Dels=0.01;HRun=2;HaplotypeScore=55.89;MQ=43.72;MQ0=0;QD=0.45;SB=80.30 GT:AD:DP:GL:GQ 0/1:67,6:72:-38.59,-31.57,-277.78:70.20
-chr1 5072236 . A G 214.30 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=80;Dels=0.08;HRun=2;HaplotypeScore=77.80;MQ=44.49;MQ0=0;QD=2.68;SB=83.29 GT:AD:DP:GL:GQ 0/1:56,12:72:-66.82,-42.10,-235.08:99
-chr1 5072261 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=81;Dels=0.05;HRun=0;HaplotypeScore=73.45;MQ=43.15;MQ0=0;OQ=399.38;QD=4.93;SB=83.29 GT:AD:DP:GL:GQ 0/1:51,25:67:-62.51,-19.29,-172.53:99
-chr1 5072278 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=86;Dels=0.01;HRun=1;HaplotypeScore=43.28;MQ=42.83;MQ0=0;OQ=260.49;QD=3.03;SB=63.28 GT:AD:DP:GL:GQ 0/1:59,19:75:-74.72,-45.39,-204.92:99
-chr1 5072305 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=82;Dels=0.04;HRun=0;HaplotypeScore=77.14;MQ=40.79;MQ0=0;OQ=744.26;QD=9.08;SB=-270.19 GT:AD:DP:GL:GQ 0/1:44,35:70:-97.91,-20.20,-140.23:99
-chr1 5072314 . C A 26.92 LowQual AC=1;AF=0.50;AN=2;DP=80;Dels=0.00;HRun=1;HaplotypeScore=53.92;MQ=40.19;MQ0=0;QD=0.34;SB=-28.60 GT:AD:DP:GL:GQ 0/1:60,11:56:-29.71,-23.73,-169.35:59.74
-chr1 5072329 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=71;Dels=0.01;HRun=0;HaplotypeScore=74.94;MQ=38.44;MQ0=0;OQ=775.14;QD=10.92;SB=-292.22 GT:AD:DP:GL:GQ 0/1:41,28:64:-99.78,-18.98,-129.83:99
-chr1 5072338 . C G 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=63;Dels=0.02;HRun=2;HaplotypeScore=51.40;MQ=37.08;MQ0=0;OQ=162.47;QD=2.58;SB=101.36 GT:AD:DP:GL:GQ 0/1:48,8:57:-50.13,-30.60,-201.42:99
-chr1 5072354 . A G 70.72 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=68;Dels=0.01;HRun=3;HaplotypeScore=80.87;MQ=34.07;MQ0=1;QD=1.04;SB=50.19 GT:AD:DP:GL:GQ 0/1:55,12:60:-28.14,-17.78,-195.72:99
-chr1 5072357 . A G 633.36 SnpCluster AC=1;AF=0.50;AN=2;DP=67;Dels=0.01;HRun=1;HaplotypeScore=71.93;MQ=33.53;MQ0=1;QD=9.45;SB=-235.45 GT:AD:DP:GL:GQ 0/1:28,25:61:-115.70,-49.08,-135.16:99
-chr1 5072359 . A C 486.53 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=69;Dels=0.03;HRun=0;HaplotypeScore=52.12;MQ=33.41;MQ0=1;QD=7.05;SB=62.18 GT:AD:DP:GL:GQ 0/1:42,24:63:-73.40,-21.46,-136.62:99
-chr1 5072383 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=101;Dels=0.00;HRun=1;HaplotypeScore=82.78;MQ=35.86;MQ0=1;OQ=50.85;QD=0.50;SB=43.30 GT:AD:DP:GL:GQ 0/1:88,10:72:-37.48,-29.11,-217.86:83.68
-chr1 5072395 . C A 570.19 SnpCluster AC=1;AF=0.50;AN=2;DP=99;Dels=0.02;HRun=1;HaplotypeScore=88.86;MQ=38.13;MQ0=1;QD=5.76;SB=-12.89 GT:AD:DP:GL:GQ 0/1:64,28:75:-96.04,-35.74,-177.41:99
-chr1 5072402 . A G 56.63 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=98;Dels=0.00;HRun=3;HaplotypeScore=106.83;MQ=38.72;MQ0=1;QD=0.58;SB=77.28 GT:AD:DP:GL:GQ 0/1:88,10:70:-30.04,-21.10,-237.13:89.47
-chr1 5072405 . G T 211.27 DPFilter;SnpCluster AC=1;AF=0.50;AN=2;DP=95;Dels=0.03;HRun=0;HaplotypeScore=106.15;MQ=39.10;MQ0=1;QD=2.22;SB=86.26 GT:AD:DP:GL:GQ 0/1:74,17:80:-48.52,-24.11,-223.42:99
-chr1 5072419 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=93;Dels=0.00;HRun=1;HaplotypeScore=52.76;MQ=39.26;MQ0=1;OQ=413.09;QD=4.44;SB=8.43 GT:AD:DP:GL:GQ 0/1:71,20:77:-71.28,-26.69,-194.57:99
-chr1 5072442 . A G 31.37 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=65;Dels=0.00;HRun=2;HaplotypeScore=72.31;MQ=41.30;MQ0=0;QD=0.48;SB=47.17 GT:AD:DP:GL:GQ 0/1:57,8:62:-25.11,-18.69,-212.28:64.20
-chr1 5073664 rs2611423 C A 218.42 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=2432.37;QD=35.25;SB=-1208.34 GT:AD:DP:GL:GQ 1/1:0,69:67:-246.84,-20.18,-0.02:99
-chr1 5073938 rs2611424 A G 134.32 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.25;MQ0=0;OQ=2912.91;QD=35.96;SB=-1287.55 GT:AD:DP:GL:GQ 1/1:0,81:80:-294.90,-24.09,-0.02:99
-chr1 5074030 rs2611425 C T 598.88 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=57.51;MQ0=0;OQ=2372.22;QD=38.89;SB=-1023.68 GT:AD:DP:GL:GQ 1/1:0,61:60:-240.82,-18.07,-0.01:99
-chr1 5074510 rs9439534 C T 637.40 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.93;MQ0=0;OQ=2321.21;QD=36.27;SB=-1159.05 GT:AD:DP:GL:GQ 1/1:0,64:59:-235.72,-17.77,-0.02:99
-chr1 5074638 rs57003830 G C 372.48 PASS AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.83;MQ=43.54;MQ0=4;OQ=1370.10;QD=15.75;SB=-494.22 GT:AD:DP:GL:GQ 0/1:45,42:79:-164.10,-23.81,-179.75:99
-chr1 5075049 rs9439577 C T 95.46 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=2.23;MQ=38.28;MQ0=7;OQ=1971.59;QD=31.30;SB=-484.14 GT:AD:DP:GL:GQ 1/1:0,62:51:-200.77,-15.37,-0.03:99
-chr1 5075121 rs9439535 A G 238.22 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=43.82;MQ0=4;OQ=1529.43;QD=28.32;SB=-495.19 GT:AD:DP:GL:GQ 1/1:0,54:47:-156.56,-14.17,-0.03:99
-chr1 5075150 rs9439578 T G 135.05 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=2.71;MQ=50.05;MQ0=3;OQ=2063.78;QD=31.75;SB=-748.06 GT:AD:DP:GL:GQ 1/1:0,65:60:-209.99,-18.08,-0.02:99
-chr1 5075197 rs10915347 C T 55.81 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=2.29;MQ=47.56;MQ0=6;OQ=2171.81;QD=32.91;SB=-915.72 GT:AD:DP:GL:GQ 1/1:0,65:56:-220.79,-16.88,-0.02:99
-chr1 5075319 rs28828787 G A 102.87 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=26.02;MQ0=15;OQ=432.78;QD=8.32;SB=-48.66 GT:AD:DP:GL:GQ 0/1:29,23:28:-55.00,-8.44,-46.26:99
-chr1 5075370 rs10799164 C T 16.89 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=0;HaplotypeScore=0.63;MQ=20.22;MQ0=13;OQ=746.84;QD=17.78;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,40:19:-78.27,-5.72,-0.00:57.19
-chr1 5075558 rs10799165 C T 9.35 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=9.90;MQ=22.74;MQ0=30;OQ=955.91;QD=12.58;SB=-324.43 GT:AD:DP:GL:GQ 1/1:31,45:25:-99.18,-7.53,-0.01:75.24
-chr1 5075601 rs10753349 C T 1.18 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=10.53;MQ=14.77;MQ0=51;OQ=525.81;QD=6.49;SB=-249.33 GT:AD:DP:GL:GQ 1/1:43,38:14:-56.17,-4.22,-0.00:42.14
-chr1 5075696 rs4949168 A G 0.23 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=5.94;MQ=11.29;MQ0=39;OQ=183.21;QD=2.91;SB=-118.05 GT:AD:DP:GL:GQ 1/1:33,30:6:-21.89,-1.81,-0.00:18.06
-chr1 5075699 rs10799166 G C 0.14 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=5.78;MQ=10.86;MQ0=38;OQ=173.64;QD=2.85;SB=-103.85 GT:AD:DP:GL:GQ 1/1:32,29:5:-20.93,-1.51,-0.00:15.05
-chr1 5075751 rs4949159 C A 0.57 PASS AC=2;AF=1.00;AN=2;DB;DP=36;Dels=0.00;HRun=1;HaplotypeScore=9.84;MQ=21.77;MQ0=1;OQ=523.96;QD=14.55;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,33:15:-55.98,-4.52,-0.00:45.14
-chr1 5075757 rs4949167 T C 1.62 PASS AC=2;AF=1.00;AN=2;DB;DP=42;Dels=0.00;HRun=1;HaplotypeScore=5.17;MQ=21.64;MQ0=3;OQ=605.43;QD=14.41;SB=-10.00 GT:AD:DP:GL:GQ 1/1:7,35:18:-64.13,-5.42,-0.00:54.16
-chr1 5076314 rs9439579 C G 74.36 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.92;MQ=43.71;MQ0=2;OQ=2095.83;QD=33.80;SB=-956.72 GT:AD:DP:GL:GQ 1/1:3,59:49:-213.18,-14.76,-0.01:99
-chr1 5076393 rs10915349 G A 1.75 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=6.65;MQ=47.36;MQ0=1;OQ=1988.87;QD=34.29;SB=-955.74 GT:AD:DP:GL:GQ 1/1:1,57:52:-202.50,-15.68,-0.03:99
-chr1 5076841 rs10799167 C T 211.34 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=45.50;MQ0=4;OQ=2210.86;QD=35.66;SB=-962.98 GT:AD:DP:GL:GQ 1/1:1,61:56:-224.69,-16.87,-0.02:99
-chr1 5077036 rs10799168 A G 167.61 PASS AC=2;AF=1.00;AN=2;DB;DP=27;Dels=0.00;HRun=1;HaplotypeScore=0.93;MQ=21.14;MQ0=7;OQ=400.64;QD=14.84;SB=-196.71 GT:AD:DP:GL:GQ 1/1:8,19:13:-43.66,-3.92,-0.01:39.11
-chr1 5077055 rs7414866 A G 123.85 PASS AC=2;AF=1.00;AN=2;DB;DP=21;Dels=0.00;HRun=0;HaplotypeScore=0.73;MQ=21.33;MQ0=4;OQ=281.43;QD=13.40;SB=-64.87 GT:AD:DP:GL:GQ 1/1:4,17:10:-31.74,-3.02,-0.01:30.04
-chr1 5077077 rs7412613 C T 3.36 PASS AC=2;AF=1.00;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=1.37;MQ=22.40;MQ0=3;OQ=333.18;QD=18.51;SB=-10.00 GT:AD:DP:GL:GQ 1/1:2,15:9:-36.90,-2.71,-0.00:27.09
-chr1 5077090 . C A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=28;Dels=0.00;HRun=2;HaplotypeScore=4.92;MQ=29.30;MQ0=3;OQ=51.83;QD=1.85;SB=-3.99 GT:AD:DP:GL:GQ 0/1:19,9:11:-11.79,-3.32,-22.43:84.66
-chr1 5077136 rs55919453 T G 371.05 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=38.18;MQ0=2;OQ=1590.74;QD=31.81;SB=-546.07 GT:AD:DP:GL:GQ 1/1:0,50:44:-162.67,-13.25,-0.01:99
-chr1 5077346 rs28778348 C A 55.21 PASS AC=2;AF=1.00;AN=2;DB;DP=30;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=26.70;MQ0=2;OQ=838.40;QD=27.95;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,29:24:-87.43,-7.23,-0.01:72.21
-chr1 5077349 rs28898289 T G 16.95 PASS AC=2;AF=1.00;AN=2;DB;DP=31;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=26.06;MQ0=2;OQ=780.24;QD=25.17;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,31:23:-81.62,-6.93,-0.01:69.20
-chr1 5077435 rs7415381 A T 121.52 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.10;MQ=26.22;MQ0=5;OQ=1349.62;QD=28.72;SB=-637.67 GT:AD:DP:GL:GQ 1/1:0,47:37:-138.56,-11.15,-0.01:99
-chr1 5077528 rs56184987 T C 231.69 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=24.13;MQ0=2;OQ=814.91;QD=18.95;SB=-252.77 GT:AD:DP:GL:GQ 1/1:0,43:27:-85.10,-8.15,-0.03:81.19
-chr1 5077549 rs55934905 G A 0.24 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=3;HaplotypeScore=0.98;MQ=23.80;MQ0=7;OQ=1118.88;QD=22.38;SB=-246.01 GT:AD:DP:GL:GQ 1/1:0,50:29:-115.48,-8.74,-0.01:87.28
-chr1 5077770 rs60669416 C A 584.28 Indel AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=10;HaplotypeScore=19.78;MQ=46.83;MQ0=2;QD=11.69;SB=-270.35 GT:AD:DP:GL:GQ 0/1:25,24:45:-75.27,-13.56,-79.00:99
-chr1 5077806 rs2334261 C T 3.91 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.02;HRun=2;HaplotypeScore=6.33;MQ=31.47;MQ0=13;OQ=1098.90;QD=20.35;SB=-473.36 GT:AD:DP:GL:GQ 1/1:5,48:29:-113.48,-8.43,-0.01:84.27
-chr1 5077915 rs11582268 A T 437.65 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=22.80;MQ0=5;OQ=869.48;QD=19.32;SB=-460.68 GT:AD:DP:GL:GQ 1/1:0,44:25:-90.55,-7.54,-0.02:75.21
-chr1 5078308 rs12043988 C A 291.59 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=47.74;MQ0=0;OQ=2467.70;QD=37.39;SB=-935.67 GT:AD:DP:GL:GQ 1/1:0,66:65:-250.36,-19.57,-0.01:99
-chr1 5078509 rs9439503 T C 20.38 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=4.15;MQ=38.39;MQ0=4;OQ=1877.97;QD=28.03;SB=-657.32 GT:AD:DP:GL:GQ 1/1:1,66:53:-191.40,-15.96,-0.02:99
-chr1 5078532 rs9439504 C G 494.66 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=35.41;MQ0=3;OQ=2205.88;QD=36.16;SB=-588.53 GT:AD:DP:GL:GQ 1/1:0,61:50:-224.18,-15.06,-0.01:99
-chr1 5078612 rs10915350 C T 169.93 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=47.49;MQ0=1;OQ=2196.12;QD=36.60;SB=-847.62 GT:AD:DP:GL:GQ 1/1:1,58:57:-223.22,-17.18,-0.02:99
-chr1 5079390 rs10799170 A C 350.19 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=57.35;MQ0=0;OQ=2787.95;QD=35.29;SB=-1421.63 GT:AD:DP:GL:GQ 1/1:0,79:78:-282.40,-23.49,-0.02:99
-chr1 5079434 rs10915352 G T 571.75 PASS AC=2;AF=1.00;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.02;MQ0=0;OQ=3162.32;QD=36.77;SB=-1557.78 GT:AD:DP:GL:GQ 1/1:0,86:86:-319.84,-25.90,-0.02:99
-chr1 5079595 rs10915353 G C 43.37 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.36;MQ0=0;OQ=2638.35;QD=40.59;SB=-999.16 GT:AD:DP:GL:GQ 1/1:0,65:61:-267.45,-18.39,-0.03:99
-chr1 5079666 rs6701939 T C 563.06 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2172.86;QD=35.05;SB=-713.27 GT:AD:DP:GL:GQ 1/1:0,62:60:-220.89,-18.07,-0.02:99
-chr1 5080376 . C T 202.08 PASS AC=1;AF=0.50;AN=2;DP=38;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.09;MQ0=0;OQ=426.51;QD=11.22;SB=-188.16 GT:AD:DP:GL:GQ 0/1:24,14:37:-57.08,-11.15,-81.03:99
-chr1 5080399 . C A 264.12 DPFilter;Indel AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=20;HaplotypeScore=11.69;MQ=57.12;MQ0=0;QD=4.63;SB=53.19 GT:AD:DP:GL:GQ 0/1:38,19:40:-41.75,-12.05,-100.11:99
-chr1 5080680 rs10753350 A G 105.81 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=2.00;MQ=58.32;MQ0=0;OQ=1525.28;QD=28.25;SB=-610.83 GT:AD:DP:GL:GQ 1/1:0,54:51:-156.18,-15.39,-0.07:99
-chr1 5080690 rs10753351 A C 1.11 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=3;HaplotypeScore=2.95;MQ=55.25;MQ0=0;OQ=2140.46;QD=31.48;SB=-1004.07 GT:AD:DP:GL:GQ 1/1:0,68:63:-217.66,-18.98,-0.03:99
-chr1 5081475 rs10737396 T C 76.32 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=3;HaplotypeScore=0.91;MQ=60.00;MQ0=0;OQ=2367.06;QD=33.34;SB=-935.73 GT:AD:DP:GL:GQ 1/1:0,71:67:-240.32,-20.19,-0.03:99
-chr1 5081878 rs2722794 T G 569.46 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.93;MQ0=0;OQ=2825.92;QD=34.89;SB=-1425.62 GT:AD:DP:GL:GQ 1/1:0,81:79:-286.20,-23.79,-0.02:99
-chr1 5081972 rs2611426 T A 81.80 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=1;HaplotypeScore=1.88;MQ=59.18;MQ0=0;OQ=2310.37;QD=35.01;SB=-624.95 GT:AD:DP:GL:GQ 1/1:0,66:62:-234.64,-18.68,-0.02:99
-chr1 5083407 rs2045587 A G 34.52 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=1821.48;QD=33.73;SB=-913.93 GT:AD:DP:GL:GQ 1/1:0,54:52:-185.75,-15.67,-0.02:99
-chr1 5083733 rs4313443 C T 652.84 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2295.78;QD=39.58;SB=-913.70 GT:AD:DP:GL:GQ 1/1:0,58:58:-233.18,-17.47,-0.01:99
-chr1 5083785 rs4356099 G A 29.40 PASS AC=2;AF=1.00;AN=2;DB;DP=43;Dels=0.00;HRun=1;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=1676.22;QD=38.98;SB=-527.70 GT:AD:DP:GL:GQ 1/1:0,43:43:-171.22,-12.96,-0.02:99
-chr1 5083937 rs2722793 G T 729.18 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.44;MQ0=0;OQ=2771.95;QD=36.96;SB=-1328.90 GT:AD:DP:GL:GQ 1/1:0,75:75:-280.80,-22.59,-0.02:99
-chr1 5084549 rs10753352 G C 80.52 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.74;MQ0=0;OQ=3116.41;QD=42.69;SB=-1439.29 GT:AD:DP:GL:GQ 1/1:0,73:73:-315.25,-22.00,-0.03:99
-chr1 5085006 rs2722792 C A 486.51 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.46;MQ0=0;OQ=3029.86;QD=36.95;SB=-1518.84 GT:AD:DP:GL:GQ 1/1:0,82:81:-306.59,-24.39,-0.02:99
-chr1 5085686 rs2611419 A C 735.40 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2513.45;QD=35.40;SB=-1104.10 GT:AD:DP:GL:GQ 1/1:0,71:71:-254.95,-21.38,-0.02:99
-chr1 5087139 rs2611420 C G 615.49 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3365.59;QD=43.15;SB=-1251.98 GT:AD:DP:GL:GQ 1/1:0,78:76:-335.56,-22.90,-0.03:99
-chr1 5087240 rs2611421 C T 489.75 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=3117.95;QD=41.03;SB=-1433.39 GT:AD:DP:GL:GQ 1/1:0,76:76:-315.39,-22.89,-0.01:99
-chr1 5087511 rs2722791 G A 190.82 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=2.68;MQ=59.73;MQ0=0;OQ=3174.39;QD=37.35;SB=-1593.03 GT:AD:DP:GL:GQ 1/1:0,85:81:-321.05,-24.40,-0.02:99
-chr1 5088299 rs2611422 C T 24.96 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.01;HRun=4;HaplotypeScore=1.63;MQ=59.49;MQ0=0;OQ=3139.82;QD=38.29;SB=-1155.06 GT:AD:DP:GL:GQ 1/1:0,81:82:-317.60,-24.41,-0.03:99
-chr1 5088851 rs898338 G T 586.23 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1967.21;QD=32.25;SB=-901.77 GT:AD:DP:GL:GQ 1/1:0,61:55:-200.32,-16.57,-0.02:99
-chr1 5091688 rs11588537 G C 0.39 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=2;HaplotypeScore=2.02;MQ=59.44;MQ0=0;OQ=1667.23;QD=40.66;SB=-503.13 GT:AD:DP:GL:GQ 1/1:0,41:41:-170.32,-12.36,-0.02:99
-chr1 5092085 rs4245628 G A 151.82 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.46;MQ=59.41;MQ0=0;OQ=3066.13;QD=39.31;SB=-1187.61 GT:AD:DP:GL:GQ 1/1:0,78:77:-310.22,-23.19,-0.02:99
-chr1 5092563 rs6671889 C A 625.41 PASS AC=2;AF=1.00;AN=2;DB;DP=83;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.16;MQ0=0;OQ=3060.89;QD=36.88;SB=-1358.20 GT:AD:DP:GL:GQ 1/1:0,83:82:-309.69,-24.69,-0.01:99
-chr1 5092609 rs4949165 G C 633.91 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=3087.67;QD=42.88;SB=-1533.25 GT:AD:DP:GL:GQ 1/1:0,72:72:-312.37,-21.69,-0.02:99
-chr1 5092886 rs10492923 A G 560.12 PASS AC=1;AF=0.50;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=897.90;QD=12.47;SB=-469.86 GT:AD:DP:GL:GQ 0/1:34,38:69:-113.87,-20.80,-132.03:99
-chr1 5093533 rs9439505 C T 206.84 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=2.29;MQ=59.13;MQ0=0;OQ=1236.94;QD=16.49;SB=-238.14 GT:AD:DP:GL:GQ 0/1:38,37:73:-148.98,-22.00,-117.20:99
-chr1 5093841 rs12143009 G A 1328.69 Indel AC=1;AF=0.50;AN=2;DB;DP=87;Dels=0.00;HRun=3;HaplotypeScore=2.85;MQ=59.81;MQ0=1;QD=15.27;SB=-676.33 GT:AD:DP:GL:GQ 0/1:46,41:84:-161.46,-25.31,-156.05:99
-chr1 5094064 rs16840020 C T 380.84 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=1.11;MQ=59.40;MQ0=0;OQ=843.58;QD=13.61;SB=-387.37 GT:AD:DP:GL:GQ 0/1:36,26:61:-106.01,-18.37,-128.57:99
-chr1 5094308 rs9439536 C G 94.57 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=-0.06;MQ=57.94;MQ0=0;OQ=2369.61;QD=43.08;SB=-1192.92 GT:AD:DP:GL:GQ 1/1:0,55:55:-240.56,-16.57,-0.02:99
-chr1 5094675 rs9439537 G A 205.12 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=56.69;MQ0=0;OQ=2327.54;QD=36.95;SB=-997.02 GT:AD:DP:GL:GQ 1/1:0,63:59:-236.35,-17.77,-0.02:99
-chr1 5095027 rs10737397 A C 379.35 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.02;HRun=2;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1853.36;QD=34.97;SB=-880.10 GT:AD:DP:GL:GQ 1/1:0,52:52:-188.93,-15.66,-0.01:99
-chr1 5095151 rs10915359 A G 343.67 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=60.00;MQ0=0;OQ=1130.12;QD=15.92;SB=-404.21 GT:AD:DP:GL:GQ 0/1:33,38:69:-137.08,-20.78,-130.21:99
-chr1 5095177 rs12122020 C T 430.32 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1196.16;QD=13.91;SB=-341.80 GT:AD:DP:GL:GQ 0/1:49,37:84:-148.20,-25.30,-177.14:99
-chr1 5095231 rs10492925 T C 590.40 PASS AC=1;AF=0.50;AN=2;DB;DP=85;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1272.89;QD=14.98;SB=-556.65 GT:AD:DP:GL:GQ 0/1:35,50:83:-155.59,-25.02,-138.70:99
-chr1 5095242 rs12045223 A T 548.90 PASS AC=1;AF=0.50;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.56;MQ0=0;OQ=1555.76;QD=18.52;SB=-658.48 GT:AD:DP:GL:GQ 0/1:35,49:82:-183.56,-24.70,-128.89:99
-chr1 5096599 rs9439506 A G 501.16 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=607.79;QD=10.30;SB=-265.38 GT:AD:DP:GL:GQ 0/1:36,23:58:-81.54,-17.47,-140.55:99
-chr1 5097069 . C T 27.83 PASS AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.95;MQ0=0;OQ=280.61;QD=35.08;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:8:-31.64,-2.41,-0.00:24.08
-chr1 5097076 . C A 58.51 PASS AC=2;AF=1.00;AN=2;DP=8;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=53.95;MQ0=0;OQ=242.27;QD=30.28;SB=-10.00 GT:AD:DP:GL:GQ 1/1:0,8:8:-27.81,-2.41,-0.00:24.07
-chr1 5097414 rs34593428 C T 209.20 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=1.12;MQ=60.00;MQ0=0;OQ=915.00;QD=14.52;SB=-282.17 GT:AD:DP:GL:GQ 0/1:34,29:62:-113.46,-18.67,-123.11:99
-chr1 5097811 rs10799172 T C 730.17 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=2361.85;QD=34.73;SB=-1109.84 GT:AD:DP:GL:GQ 1/1:0,68:67:-239.79,-20.18,-0.02:99
-chr1 5097837 rs10799173 C T 610.42 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=2894.02;QD=39.64;SB=-1458.48 GT:AD:DP:GL:GQ 1/1:0,73:72:-293.00,-21.69,-0.02:99
-chr1 5098649 rs16840051 C T 466.71 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.76;MQ0=0;OQ=1115.98;QD=14.31;SB=-521.66 GT:AD:DP:GL:GQ 0/1:43,35:76:-137.77,-22.89,-150.84:99
-chr1 5099594 rs61576661 T C 2.98 PASS AC=1;AF=0.50;AN=2;DB;DP=54;Dels=0.02;HRun=0;HaplotypeScore=9.91;MQ=59.43;MQ0=0;OQ=660.15;QD=12.23;SB=-250.93 GT:AD:DP:GL:GQ 0/1:29,24:54:-85.27,-15.97,-115.92:99
-chr1 5100592 rs6681359 C T 709.39 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.69;MQ0=0;OQ=3001.23;QD=40.02;SB=-1288.71 GT:AD:DP:GL:GQ 1/1:0,75:75:-303.72,-22.59,-0.02:99
-chr1 5102008 rs7543139 A C 24.50 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=8.00;MQ=58.40;MQ0=0;OQ=1023.25;QD=14.62;SB=-311.81 GT:AD:DP:GL:GQ 0/1:35,35:67:-125.80,-20.19,-114.71:99
-chr1 5102179 rs16840055 A G 103.26 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.48;MQ=59.41;MQ0=0;OQ=1029.92;QD=14.51;SB=-438.97 GT:AD:DP:GL:GQ 0/1:36,35:69:-127.06,-20.79,-136.54:99
-chr1 5103146 rs4484964 T C 669.95 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.67;MQ0=0;OQ=2031.10;QD=32.24;SB=-774.73 GT:AD:DP:GL:GQ 1/1:0,63:62:-206.74,-18.69,-0.04:99
-chr1 5103788 . G T 167.53 PASS AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.70;MQ0=0;OQ=1064.37;QD=14.00;SB=-541.64 GT:AD:DP:GL:GQ 0/1:38,38:74:-132.01,-22.29,-131.40:99
-chr1 5106305 rs9439509 G A 600.29 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.19;MQ0=0;OQ=2218.17;QD=38.92;SB=-991.33 GT:AD:DP:GL:GQ 1/1:0,57:57:-225.42,-17.18,-0.02:99
-chr1 5106499 rs4345839 A G 149.68 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=1.56;MQ=59.43;MQ0=0;OQ=2177.60;QD=33.50;SB=-1108.75 GT:AD:DP:GL:GQ 1/1:0,64:62:-221.38,-18.68,-0.03:99
-chr1 5107407 rs4584438 T G 105.42 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=1.66;MQ=60.00;MQ0=0;OQ=2390.91;QD=33.67;SB=-961.60 GT:AD:DP:GL:GQ 1/1:0,70:70:-246.35,-24.25,-3.68:99
-chr1 5107616 rs4543848 T C 111.63 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=2.89;MQ=59.72;MQ0=0;OQ=2325.30;QD=34.71;SB=-962.92 GT:AD:DP:GL:GQ 1/1:0,67:66:-236.14,-19.88,-0.02:99
-chr1 5107713 . A C 103.40 PASS AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=1;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=1036.38;QD=12.79;SB=-351.52 GT:AD:DP:GL:GQ 0/1:44,37:81:-131.32,-24.40,-159.14:99
-chr1 5109104 rs12025231 C T 369.55 PASS AC=1;AF=0.50;AN=2;DB;DP=97;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=60.00;MQ0=0;OQ=1428.81;QD=14.73;SB=-339.81 GT:AD:DP:GL:GQ 0/1:53,44:96:-175.10,-28.94,-171.50:99
-chr1 5109781 rs9439510 C G 474.11 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3322.39;QD=44.30;SB=-1477.33 GT:AD:DP:GL:GQ 1/1:0,75:75:-331.24,-22.59,-0.02:99
-chr1 5109984 rs12121369 C A 599.91 PASS AC=1;AF=0.50;AN=2;DB;DP=86;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=1366.71;QD=15.89;SB=-516.80 GT:AD:DP:GL:GQ 0/1:40,46:85:-165.55,-25.60,-144.36:99
-chr1 5110261 rs7538704 G C 501.84 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1089.65;QD=15.35;SB=-449.75 GT:AD:DP:GL:GQ 0/1:33,38:67:-132.47,-20.22,-140.33:99
-chr1 5110586 rs4462197 C T 256.57 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.00;MQ0=0;OQ=2327.86;QD=37.55;SB=-1085.00 GT:AD:DP:GL:GQ 1/1:0,62:59:-236.39,-17.78,-0.02:99
-chr1 5110994 rs10753353 T C 229.27 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.87;MQ=59.74;MQ0=0;OQ=2543.07;QD=35.32;SB=-1168.48 GT:AD:DP:GL:GQ 1/1:0,72:71:-257.91,-21.39,-0.02:99
-chr1 5111198 rs12027352 C T 56.90 PASS AC=1;AF=0.50;AN=2;DB;DP=93;Dels=0.00;HRun=2;HaplotypeScore=3.00;MQ=59.50;MQ0=0;OQ=1422.29;QD=15.29;SB=-680.29 GT:AD:DP:GL:GQ 0/1:47,46:88:-172.02,-26.51,-161.50:99
-chr1 5111405 rs4314925 G A 196.97 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=59.36;MQ0=0;OQ=2517.06;QD=38.72;SB=-1234.63 GT:AD:DP:GL:GQ 1/1:0,65:64:-255.31,-19.28,-0.02:99
-chr1 5112055 rs12145645 G A 578.52 PASS AC=1;AF=0.50;AN=2;DB;DP=74;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.38;MQ0=0;OQ=1010.93;QD=13.66;SB=-362.83 GT:AD:DP:GL:GQ 0/1:42,32:72:-126.06,-21.69,-149.75:99
-chr1 5112088 rs61762208 G A 38.27 PASS AC=1;AF=0.50;AN=2;DB;DP=83;Dels=0.00;HRun=2;HaplotypeScore=1.85;MQ=59.44;MQ0=0;OQ=1643.08;QD=19.80;SB=-651.68 GT:AD:DP:GL:GQ 0/1:37,46:82:-192.29,-24.70,-131.13:99
-chr1 5112135 rs12741116 A G 713.71 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2397.16;QD=35.25;SB=-898.68 GT:AD:DP:GL:GQ 1/1:0,68:67:-243.32,-20.18,-0.02:99
-chr1 5113244 rs4600091 T C 489.07 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2494.81;QD=29.70;SB=-1138.12 GT:AD:DP:GL:GQ 1/1:0,84:79:-253.13,-23.82,-0.07:99
-chr1 5113507 rs10753354 C G 401.42 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2295.20;QD=42.50;SB=-1097.09 GT:AD:DP:GL:GQ 1/1:0,54:54:-233.13,-16.28,-0.02:99
-chr1 5113815 rs6698288 G A 330.13 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2134.65;QD=39.53;SB=-887.16 GT:AD:DP:GL:GQ 1/1:0,54:54:-217.07,-16.27,-0.02:99
-chr1 5114383 rs7517431 C G 606.11 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.11;MQ0=0;OQ=920.14;QD=14.61;SB=-463.75 GT:AD:DP:GL:GQ 0/1:36,27:62:-113.98,-18.68,-155.27:99
-chr1 5114445 rs7517449 C T 297.77 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.63;MQ0=0;OQ=2115.05;QD=38.46;SB=-1037.87 GT:AD:DP:GL:GQ 1/1:0,55:54:-215.11,-16.27,-0.02:99
-chr1 5114723 rs10915361 C T 120.85 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=3.02;MQ=58.20;MQ0=0;OQ=931.19;QD=19.81;SB=-478.50 GT:AD:DP:GL:GQ 0/1:19,28:46:-110.26,-13.86,-62.96:99
-chr1 5115596 rs9439538 T C 593.80 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1568.48;QD=30.16;SB=-606.93 GT:AD:DP:GL:GQ 1/1:0,52:50:-160.48,-15.08,-0.04:99
-chr1 5115679 rs12021698 A T 372.77 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.37;MQ0=0;OQ=887.17;QD=15.04;SB=-310.70 GT:AD:DP:GL:GQ 0/1:30,29:59:-109.77,-17.77,-114.78:99
-chr1 5115822 rs56173770 C G 132.01 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1600.81;QD=26.68;SB=-808.51 GT:AD:DP:GL:GQ 0/1:19,41:59:-181.14,-17.77,-78.42:99
-chr1 5115851 rs9439539 T A 636.93 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=2566.28;QD=37.74;SB=-1304.50 GT:AD:DP:GL:GQ 1/1:0,68:67:-260.22,-20.18,-0.01:99
-chr1 5117179 rs5009987 A G 1517.20 Indel AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=20.42;MQ=58.93;MQ0=0;QD=27.59;SB=-603.23 GT:AD:DP:GL:GQ 1/1:2,53:53:-162.87,-15.98,-7.57:84.15
-chr1 5117504 rs10799174 G A 14.48 PASS AC=1;AF=0.50;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=8.52;MQ=58.73;MQ0=0;OQ=1003.11;QD=18.24;SB=-483.50 GT:AD:DP:GL:GQ 0/1:24,31:52:-119.27,-15.67,-72.69:99
-chr1 5117533 rs6672724 C T 186.08 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.58;MQ=58.63;MQ0=0;OQ=1901.56;QD=37.29;SB=-943.75 GT:AD:DP:GL:GQ 1/1:0,51:50:-193.77,-15.07,-0.02:99
-chr1 5118461 rs9439511 C T 378.94 PASS AC=1;AF=0.50;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.83;MQ=58.91;MQ0=0;OQ=1153.56;QD=14.98;SB=-536.73 GT:AD:DP:GL:GQ 0/1:42,35:77:-141.84,-23.20,-148.03:99
-chr1 5119340 rs12401983 G A 186.94 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=1;HaplotypeScore=2.35;MQ=52.79;MQ0=0;OQ=1320.64;QD=16.93;SB=-541.57 GT:AD:DP:GL:GQ 0/1:37,40:76:-158.24,-22.89,-135.98:99
-chr1 5119644 rs55835407 G A 140.46 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.47;MQ=42.95;MQ0=4;OQ=797.21;QD=12.86;SB=-199.88 GT:AD:DP:GL:GQ 0/1:35,27:56:-99.88,-16.88,-103.36:99
-chr1 5119704 rs56293801 T C 75.11 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.00;MQ=42.91;MQ0=1;OQ=434.63;QD=8.36;SB=-212.22 GT:AD:DP:GL:GQ 0/1:32,20:46:-60.61,-13.87,-109.45:99
-chr1 5119914 rs12097824 T C 114 PASS AC=1;AF=0.50;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=3.43;MQ=39.01;MQ0=0;OQ=589.79;QD=9.51;SB=-187.41 GT:AD:DP:GL:GQ 0/1:33,29:57:-79.44,-17.18,-127.34:99
-chr1 5120013 rs56126017 C G 210.02 PASS AC=1;AF=0.50;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.93;MQ=35.32;MQ0=0;OQ=1020.64;QD=14.38;SB=-272.51 GT:AD:DP:GL:GQ 0/1:43,28:70:-126.44,-21.09,-178.51:99
-chr1 5120085 . G A 0.02 FDRtranche1.00to2.00 AC=1;AF=0.50;AN=2;DP=101;Dels=0.01;HRun=0;HaplotypeScore=11.89;MQ=34.93;MQ0=0;OQ=541.17;QD=5.36;SB=13.62 GT:AD:DP:GL:GQ 0/1:77,23:97:-86.32,-28.91,-276.66:99
-chr1 5120089 . T A 0.03 FDRtranche0.10to1.00 AC=1;AF=0.50;AN=2;DP=102;Dels=0.00;HRun=0;HaplotypeScore=10.97;MQ=34.87;MQ0=0;OQ=894.55;QD=8.77;SB=-13.59 GT:AD:DP:GL:GQ 0/1:68,34:99:-122.56,-29.82,-255.26:99
-chr1 5120116 . A T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=117;Dels=0.02;HRun=0;HaplotypeScore=143.29;MQ=34.92;MQ0=0;OQ=962.81;QD=8.23;SB=-91.05 GT:AD:DP:GL:GQ 0/1:76,37:114:-138.10,-38.53,-297.11:99
-chr1 5120146 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=141;Dels=0.01;HRun=0;HaplotypeScore=240.33;MQ=33.11;MQ0=0;OQ=492.54;QD=3.49;SB=14.98 GT:AD:DP:GL:GQ 0/1:116,23:120:-88.08,-35.54,-336.13:99
-chr1 5120150 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=150;Dels=0.03;HRun=0;HaplotypeScore=253.70;MQ=32.31;MQ0=0;OQ=526.30;QD=3.51;SB=-209.96 GT:AD:DP:GL:GQ 0/1:122,23:125:-96.24,-40.33,-348.30:99
-chr1 5120166 rs61762214 C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DB;DP=169;Dels=0.02;HRun=0;HaplotypeScore=340.16;MQ=31.74;MQ0=0;OQ=707.91;QD=4.19;SB=-238.38 GT:AD:DP:GL:GQ 0/1:128,38:158:-120.76,-46.69,-441.60:99
-chr1 5120182 . T C 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=171;Dels=0.00;HRun=0;HaplotypeScore=247.34;MQ=30.32;MQ0=1;OQ=181.12;QD=1.06;SB=99.79 GT:AD:DP:GL:GQ 0/1:146,25:160:-69.62,-48.22,-544.70:99
-chr1 5120218 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=186;Dels=0.00;HRun=0;HaplotypeScore=296.87;MQ=30.08;MQ0=1;OQ=467.02;QD=2.51;SB=-243.49 GT:AD:DP:GL:GQ 0/1:160,26:175:-102.70,-52.71,-541.07:99
-chr1 5120238 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=187;Dels=0.01;HRun=0;HaplotypeScore=156.33;MQ=31.62;MQ0=1;OQ=98.86;QD=0.53;SB=35.37 GT:AD:DP:GL:GQ 0/1:164,15:172:-86.49,-73.32,-562.87:99
-chr1 5120240 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=184;Dels=0.01;HRun=0;HaplotypeScore=148.66;MQ=31.61;MQ0=1;OQ=319.23;QD=1.73;SB=30.34 GT:AD:DP:GL:GQ 0/1:160,22:170:-85.81,-50.61,-526.60:99
-chr1 5120250 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=164;Dels=0.00;HRun=0;HaplotypeScore=149.91;MQ=33.54;MQ0=1;OQ=262.42;QD=1.60;SB=170.48 GT:AD:DP:GL:GQ 0/1:144,20:159:-77.42,-47.90,-500.91:99
-chr1 5120252 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=152;Dels=0.00;HRun=0;HaplotypeScore=134.92;MQ=34.14;MQ0=1;OQ=1590.07;QD=10.46;SB=-170.99 GT:AD:DP:GL:GQ 0/1:98,53:143:-208.80,-46.51,-329.18:99
-chr1 5121185 . T C 32.44 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.07;MQ=59.52;MQ0=0;OQ=529.93;QD=11.04;SB=-169.50 GT:AD:DP:GL:GQ 0/1:26,22:46:-70.14,-13.86,-100.33:99
-chr1 5122129 rs10915363 G C 183.28 PASS AC=1;AF=0.50;AN=2;DB;DP=70;Dels=0.00;HRun=2;HaplotypeScore=0.73;MQ=59.47;MQ0=0;OQ=1248.82;QD=17.84;SB=-543.72 GT:AD:DP:GL:GQ 0/1:31,39:66:-148.06,-19.89,-135.32:99
-chr1 5122156 rs10915364 G C 495.83 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=1017.04;QD=16.14;SB=-464.81 GT:AD:DP:GL:GQ 0/1:31,32:62:-123.68,-18.70,-134.13:99
-chr1 5122248 rs11804873 C T 62.77 PASS AC=1;AF=0.50;AN=2;DB;DP=38;Dels=0.00;HRun=0;HaplotypeScore=1.32;MQ=59.39;MQ0=0;OQ=700.13;QD=18.42;SB=-213.90 GT:AD:DP:GL:GQ 0/1:16,22:37:-84.44,-11.15,-55.54:99
-chr1 5122456 rs10915365 C T 167.44 PASS AC=1;AF=0.50;AN=2;DB;DP=39;Dels=0.00;HRun=1;HaplotypeScore=2.45;MQ=59.52;MQ0=0;OQ=504.80;QD=12.94;SB=-201.18 GT:AD:DP:GL:GQ 0/1:22,17:38:-65.21,-11.45,-78.02:99
-chr1 5122978 rs12024162 T C 1.83 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=6.85;MQ=58.05;MQ0=0;OQ=2287.65;QD=35.19;SB=-898.04 GT:AD:DP:GL:GQ 1/1:1,64:63:-232.37,-18.97,-0.02:99
-chr1 5123042 rs12026730 G A 134.42 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=56.89;MQ0=0;OQ=1205.15;QD=19.76;SB=-414.94 GT:AD:DP:GL:GQ 0/1:25,36:58:-141.29,-17.49,-70.06:99
-chr1 5123330 rs9439540 C A 63.17 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=60.37;MQ0=0;OQ=975.37;QD=16.53;SB=-180.54 GT:AD:DP:GL:GQ 0/1:27,32:57:-117.99,-17.17,-89.17:99
-chr1 5124476 rs17366543 A G 248.41 PASS AC=1;AF=0.50;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.31;MQ=60.00;MQ0=0;OQ=919.81;QD=12.26;SB=-428.10 GT:AD:DP:GL:GQ 0/1:42,33:74:-117.56,-22.29,-166.31:99
-chr1 5126548 rs6690311 A G 73.75 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=3.31;MQ=60.00;MQ0=0;OQ=1952.07;QD=34.25;SB=-789.11 GT:AD:DP:GL:GQ 1/1:0,56:56:-198.81,-16.87,-0.02:99
-chr1 5126612 rs6675995 G A 137.58 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=1;HaplotypeScore=2.05;MQ=59.06;MQ0=0;OQ=2638.82;QD=38.24;SB=-1319.37 GT:AD:DP:GL:GQ 1/1:0,69:67:-267.49,-20.19,-0.02:99
-chr1 5126665 rs10799176 G A 160.71 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.11;MQ0=0;OQ=2842.19;QD=38.93;SB=-1393.38 GT:AD:DP:GL:GQ 1/1:0,73:72:-287.83,-21.69,-0.02:99
-chr1 5126844 rs6685929 C T 627.62 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2295.72;QD=37.63;SB=-1082.35 GT:AD:DP:GL:GQ 1/1:0,61:59:-233.18,-17.78,-0.02:99
-chr1 5126974 . G T 128.27 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.02;MQ0=0;OQ=1169.78;QD=18.87;SB=-560.81 GT:AD:DP:GL:GQ 0/1:24,38:60:-138.33,-18.07,-79.90:99
-chr1 5129269 rs11583683 C T 146.33 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=4;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2126.34;QD=37.30;SB=-795.34 GT:AD:DP:GL:GQ 1/1:0,57:56:-216.24,-16.88,-0.02:99
-chr1 5129679 rs6603817 A G 112.83 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=3;HaplotypeScore=0.00;MQ=58.96;MQ0=0;OQ=1509.76;QD=32.82;SB=-474.53 GT:AD:DP:GL:GQ 1/1:0,46:43:-154.58,-12.95,-0.01:99
-chr1 5130606 rs4076635 G A 636.22 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2562.75;QD=38.25;SB=-1303.24 GT:AD:DP:GL:GQ 1/1:0,67:65:-259.88,-19.58,-0.02:99
-chr1 5131752 rs4394703 C A 307.05 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.37;MQ=58.90;MQ0=0;OQ=2017.11;QD=34.19;SB=-1012.79 GT:AD:DP:GL:GQ 1/1:0,58:57:-208.21,-19.84,-2.91:99
-chr1 5132477 rs6692740 A G 667.43 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.74;MQ0=0;OQ=2294.64;QD=31.43;SB=-1053.29 GT:AD:DP:GL:GQ 1/1:0,73:71:-233.10,-21.41,-0.05:99
-chr1 5133851 rs10492928 G T 624.11 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=2734.91;QD=36.47;SB=-1337.92 GT:AD:DP:GL:GQ 1/1:0,75:75:-277.10,-22.59,-0.02:99
-chr1 5134195 rs7545119 C A 288.26 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=2.20;MQ=59.11;MQ0=0;OQ=2691.33;QD=34.50;SB=-1000.80 GT:AD:DP:GL:GQ 1/1:0,78:75:-272.75,-22.59,-0.03:99
-chr1 5135504 rs10915369 C T 488.43 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.87;MQ0=0;OQ=1900.03;QD=39.58;SB=-759.52 GT:AD:DP:GL:GQ 1/1:0,48:48:-193.60,-14.46,-0.01:99
-chr1 5135682 rs11583044 G A 156.17 PASS AC=2;AF=1.00;AN=2;DB;DP=44;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=56.88;MQ0=0;OQ=1535.65;QD=34.90;SB=-689.33 GT:AD:DP:GL:GQ 1/1:0,44:41:-157.17,-12.36,-0.02:99
-chr1 5135692 rs10915370 C T 137.61 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=56.35;MQ0=0;OQ=2137.06;QD=38.16;SB=-962.28 GT:AD:DP:GL:GQ 1/1:0,56:55:-217.31,-16.57,-0.02:99
-chr1 5138733 rs10915371 G A 186.78 PASS AC=2;AF=1.00;AN=2;DB;DP=94;Dels=0.00;HRun=0;HaplotypeScore=1.52;MQ=58.20;MQ0=0;OQ=3762.30;QD=40.02;SB=-1754.36 GT:AD:DP:GL:GQ 1/1:0,94:93:-375.23,-28.01,-0.02:99
-chr1 5139307 rs9439541 A T 634.34 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3003.64;QD=37.55;SB=-1255.20 GT:AD:DP:GL:GQ 1/1:0,80:79:-303.97,-23.79,-0.02:99
-chr1 5139791 rs6603818 C T 714.35 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.73;MQ0=0;OQ=2781.44;QD=39.73;SB=-1291.72 GT:AD:DP:GL:GQ 1/1:0,70:70:-281.75,-21.09,-0.02:99
-chr1 5140071 rs7547229 C T 724.83 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3128.00;QD=38.62;SB=-1344.39 GT:AD:DP:GL:GQ 1/1:0,81:78:-316.40,-23.49,-0.02:99
-chr1 5140234 . A C 162.19 PASS AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=60.00;MQ0=0;OQ=858.81;QD=15.61;SB=-394.78 GT:AD:DP:GL:GQ 0/1:24,31:53:-105.13,-15.96,-88.06:99
-chr1 5141171 rs6688418 G A 695.26 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2832.24;QD=40.46;SB=-1208.37 GT:AD:DP:GL:GQ 1/1:0,70:70:-286.82,-21.08,-0.01:99
-chr1 5141665 . C T 43.31 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.98;MQ=59.95;MQ0=0;OQ=985.11;QD=18.24;SB=-409.92 GT:AD:DP:GL:GQ 0/1:25,29:53:-117.76,-15.96,-94.79:99
-chr1 5141935 rs6701052 C T 100.43 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=1;HaplotypeScore=0.66;MQ=49.80;MQ0=8;OQ=1859.57;QD=32.06;SB=-869.02 GT:AD:DP:GL:GQ 1/1:8,50:47:-189.55,-14.16,-0.01:99
-chr1 5142041 rs12072516 A T 329.01 PASS AC=1;AF=0.50;AN=2;DB;DP=28;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=43.00;MQ0=0;OQ=266.78;QD=9.53;SB=-152.82 GT:AD:DP:GL:GQ 0/1:16,12:25:-37.49,-7.53,-57.93:99
-chr1 5142287 rs9286978 G A 22.41 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=23.68;MQ0=8;OQ=873.11;QD=24.95;SB=-85.33 GT:AD:DP:GL:GQ 1/1:3,32:23:-90.90,-6.93,-0.01:69.22
-chr1 5143205 rs6664086 T C 86.23 PASS AC=2;AF=1.00;AN=2;DB;DP=81;Dels=0.00;HRun=0;HaplotypeScore=3.60;MQ=58.49;MQ0=0;OQ=2734.43;QD=33.76;SB=-1255.67 GT:AD:DP:GL:GQ 1/1:1,80:78:-277.05,-23.49,-0.03:99
-chr1 5144621 rs6603819 C A 635.83 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2574.32;QD=36.78;SB=-1238.13 GT:AD:DP:GL:GQ 1/1:0,70:70:-261.03,-21.08,-0.02:99
-chr1 5146701 rs6669501 C T 700.51 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.28;MQ0=0;OQ=3011.38;QD=38.61;SB=-1500.64 GT:AD:DP:GL:GQ 1/1:0,78:76:-304.75,-22.90,-0.03:99
-chr1 5146942 rs10492930 A G 610.29 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2413.30;QD=30.17;SB=-1138.47 GT:AD:DP:GL:GQ 1/1:0,79:77:-244.99,-23.23,-0.08:99
-chr1 5147215 rs10492931 G A 723.45 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.22;MQ0=0;OQ=2807.87;QD=39.00;SB=-1216.01 GT:AD:DP:GL:GQ 1/1:0,72:71:-284.39,-21.39,-0.02:99
-chr1 5148161 . G A 24.17 PASS AC=1;AF=0.50;AN=2;DP=76;Dels=0.00;HRun=1;HaplotypeScore=1.43;MQ=59.39;MQ0=0;OQ=1450.62;QD=19.09;SB=-417.73 GT:AD:DP:GL:GQ 0/1:33,43:74:-170.64,-22.29,-112.74:99
-chr1 5148401 rs6665697 T C 269.23 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=59.48;MQ0=0;OQ=2231.09;QD=30.99;SB=-952.42 GT:AD:DP:GL:GQ 1/1:0,72:70:-226.75,-21.11,-0.06:99
-chr1 5150357 rs10915375 A G 529.20 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.37;MQ0=0;OQ=1555.45;QD=31.74;SB=-790.64 GT:AD:DP:GL:GQ 1/1:0,49:49:-159.17,-14.78,-0.04:99
-chr1 5150590 . G T 11.56 DPFilter;LowQual AC=1;AF=0.50;AN=2;DP=69;Dels=0.01;HRun=20;HaplotypeScore=36.67;MQ=54.55;MQ0=0;QD=0.17;SB=69.39 GT:AD:DP:GL:GQ 0/1:49,15:42:-26.08,-21.67,-128.29:44.08
-chr1 5150765 rs9439543 T C 624.17 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.33;MQ0=0;OQ=2519.73;QD=35.49;SB=-971.41 GT:AD:DP:GL:GQ 1/1:0,71:70:-255.58,-21.09,-0.03:99
-chr1 5150768 rs9439544 C T 629.96 PASS AC=2;AF=1.00;AN=2;DB;DP=74;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.35;MQ0=0;OQ=2827.18;QD=38.21;SB=-1183.08 GT:AD:DP:GL:GQ 1/1:0,74:71:-286.33,-21.39,-0.02:99
-chr1 5150948 rs11583754 A G 125.55 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=1.95;MQ=56.88;MQ0=0;OQ=1724.72;QD=34.49;SB=-813.67 GT:AD:DP:GL:GQ 1/1:0,50:49:-176.07,-14.76,-0.02:99
-chr1 5153524 rs7536712 T C 117.29 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=1.92;MQ=59.77;MQ0=0;OQ=2818.40;QD=35.23;SB=-1399.67 GT:AD:DP:GL:GQ 1/1:1,78:79:-289.59,-27.33,-4.17:99
-chr1 5155164 rs2722780 G T 611.46 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2724.16;QD=35.38;SB=-1305.24 GT:AD:DP:GL:GQ 1/1:0,77:77:-276.03,-23.20,-0.03:99
-chr1 5155635 rs2018394 C G 496.66 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.82;MQ0=0;OQ=3565.75;QD=43.48;SB=-1230.53 GT:AD:DP:GL:GQ 1/1:0,82:80:-355.57,-24.10,-0.02:99
-chr1 5156126 rs2679215 G C 570.08 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2670.60;QD=41.73;SB=-1328.91 GT:AD:DP:GL:GQ 1/1:0,64:63:-270.67,-18.98,-0.02:99
-chr1 5156634 rs1320179 T A 161.58 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.72;MQ=59.60;MQ0=0;OQ=1611.01;QD=34.28;SB=-497.40 GT:AD:DP:GL:GQ 1/1:0,47:44:-164.71,-13.26,-0.02:99
-chr1 5157054 . G A 104.21 PASS AC=1;AF=0.50;AN=2;DP=57;Dels=0.00;HRun=1;HaplotypeScore=1.46;MQ=58.03;MQ0=0;OQ=746.35;QD=13.09;SB=-370.87 GT:AD:DP:GL:GQ 0/1:33,24:57:-95.09,-17.17,-121.22:99
-chr1 5157089 rs2722781 C T 248.95 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=58.68;MQ0=0;OQ=2013.78;QD=38.00;SB=-852.01 GT:AD:DP:GL:GQ 1/1:0,53:51:-204.98,-15.36,-0.01:99
-chr1 5158014 rs2679216 A G 582.56 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.03;MQ0=0;OQ=2870.64;QD=35.01;SB=-1392.56 GT:AD:DP:GL:GQ 1/1:0,82:80:-290.67,-24.10,-0.03:99
-chr1 5158416 rs2722782 T C 292.12 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=1.91;MQ=59.74;MQ0=0;OQ=2481.35;QD=34.95;SB=-1226.71 GT:AD:DP:GL:GQ 1/1:0,71:71:-251.75,-21.39,-0.03:99
-chr1 5158842 rs2679217 A C 278.49 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=2099.17;QD=33.86;SB=-765.90 GT:AD:DP:GL:GQ 1/1:0,62:61:-213.53,-18.38,-0.03:99
-chr1 5160232 rs2722783 T C 124.50 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=59.02;MQ0=0;OQ=2420.10;QD=34.09;SB=-1200.16 GT:AD:DP:GL:GQ 1/1:1,69:68:-249.06,-23.31,-3.46:99
-chr1 5162761 rs2679218 T C 309.92 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.92;MQ=59.65;MQ0=0;OQ=2240.61;QD=34.47;SB=-957.91 GT:AD:DP:GL:GQ 1/1:0,65:65:-227.67,-19.58,-0.02:99
-chr1 5164088 rs2722786 A G 678.85 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2134.58;QD=34.99;SB=-757.97 GT:AD:DP:GL:GQ 1/1:0,61:60:-217.06,-18.07,-0.02:99
-chr1 5164377 rs2722787 T C 664.30 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1994.32;QD=31.16;SB=-946.38 GT:AD:DP:GL:GQ 1/1:0,64:63:-203.07,-19.00,-0.06:99
-chr1 5164508 . G A 21.64 PASS AC=1;AF=0.50;AN=2;DP=66;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=60.00;MQ0=0;OQ=1023.93;QD=15.51;SB=-404.39 GT:AD:DP:GL:GQ 0/1:35,31:64:-124.97,-19.29,-108.14:99
-chr1 5165252 rs2679219 A G 545.13 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2430.87;QD=31.16;SB=-1145.16 GT:AD:DP:GL:GQ 1/1:0,78:76:-246.73,-22.91,-0.06:99
-chr1 5165298 rs2722788 C T 111.92 PASS AC=2;AF=1.00;AN=2;DB;DP=87;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.52;MQ0=0;OQ=3387.05;QD=38.93;SB=-1669.69 GT:AD:DP:GL:GQ 1/1:0,87:85:-337.71,-25.61,-0.03:99
-chr1 5166378 rs2722790 C T 150.34 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=2.57;MQ=59.01;MQ0=0;OQ=2739.21;QD=39.13;SB=-1381.68 GT:AD:DP:GL:GQ 1/1:0,70:69:-277.52,-20.79,-0.02:99
-chr1 5170379 . C T 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=83;Dels=0.00;HRun=20;HaplotypeScore=3.49;MQ=51.63;MQ0=1;OQ=52.88;QD=0.64;SB=122.38 GT:AD:DP:GL:GQ 0/1:61,22:64:-27.86,-19.28,-197.27:85.72
-chr1 5172063 rs56164612 G A 177.93 PASS AC=1;AF=0.50;AN=2;DB;DP=50;Dels=0.00;HRun=0;HaplotypeScore=2.36;MQ=59.16;MQ0=0;OQ=776.89;QD=15.54;SB=-274.16 GT:AD:DP:GL:GQ 0/1:24,26:48:-95.43,-14.46,-86.73:99
-chr1 5191577 rs471824 A G 242.55 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.16;MQ0=0;OQ=1721.79;QD=27.77;SB=-749.45 GT:AD:DP:GL:GQ 1/1:1,61:57:-179.88,-17.20,-4.11:99
-chr1 5191739 rs632051 C A 18.10 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=2;HaplotypeScore=4.23;MQ=58.83;MQ0=0;OQ=3137.26;QD=37.35;SB=-891.27 GT:AD:DP:GL:GQ 1/1:0,84:83:-317.33,-25.00,-0.02:99
-chr1 5193545 rs566114 T G 200.45 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=-0.06;MQ=60.00;MQ0=0;OQ=2400.30;QD=34.29;SB=-1100.14 GT:AD:DP:GL:GQ 1/1:0,70:68:-243.64,-20.48,-0.02:99
-chr1 5194097 rs56295354 C T 367.36 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.98;MQ0=0;OQ=896.66;QD=14.01;SB=-471.46 GT:AD:DP:GL:GQ 0/1:34,30:62:-111.63,-18.68,-121.51:99
-chr1 5195036 rs677735 A G 310.10 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=59.68;MQ0=0;OQ=2493.12;QD=34.15;SB=-981.71 GT:AD:DP:GL:GQ 1/1:0,73:71:-252.92,-21.39,-0.03:99
-chr1 5195467 rs2986186 T A 311.13 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.45;MQ0=0;OQ=2846.52;QD=37.45;SB=-1332.00 GT:AD:DP:GL:GQ 1/1:0,76:75:-288.25,-22.59,-0.02:99
-chr1 5196704 rs2353169 T C 724.90 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=2499.39;QD=34.71;SB=-983.95 GT:AD:DP:GL:GQ 1/1:0,72:72:-253.55,-21.69,-0.02:99
-chr1 5197705 rs473104 A G 598.18 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2654.56;QD=34.93;SB=-1319.89 GT:AD:DP:GL:GQ 1/1:0,76:74:-269.06,-22.29,-0.02:99
-chr1 5197747 rs586165 T C 721.60 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2710.69;QD=35.20;SB=-1278.13 GT:AD:DP:GL:GQ 1/1:0,77:76:-274.68,-22.89,-0.03:99
-chr1 5198145 rs584402 C T 717.83 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2714.09;QD=39.33;SB=-1353.02 GT:AD:DP:GL:GQ 1/1:0,69:69:-275.01,-20.79,-0.02:99
-chr1 5198627 rs679712 T A 207.32 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=1.59;MQ=59.36;MQ0=0;OQ=2332.10;QD=35.88;SB=-1044.59 GT:AD:DP:GL:GQ 1/1:0,65:63:-236.81,-18.97,-0.02:99
-chr1 5198919 rs551536 T C 66.98 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=2;HaplotypeScore=0.47;MQ=59.68;MQ0=0;OQ=2254.50;QD=31.75;SB=-1121.22 GT:AD:DP:GL:GQ 1/1:0,71:70:-229.09,-21.11,-0.06:99
-chr1 5198972 rs551376 G A 527.51 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2736.21;QD=38.54;SB=-1372.67 GT:AD:DP:GL:GQ 1/1:0,71:69:-277.22,-20.79,-0.02:99
-chr1 5199041 rs550558 G A 271.08 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.75;MQ0=0;OQ=2982.88;QD=39.25;SB=-1518.69 GT:AD:DP:GL:GQ 1/1:0,75:75:-301.89,-22.59,-0.02:99
-chr1 5199083 rs549773 C A 400.22 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2265.19;QD=35.39;SB=-1149.37 GT:AD:DP:GL:GQ 1/1:0,64:63:-230.13,-18.98,-0.02:99
-chr1 5199801 rs663998 C G 667.78 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.24;MQ0=1;OQ=2933.78;QD=41.91;SB=-1382.38 GT:AD:DP:GL:GQ 1/1:0,70:68:-296.98,-20.49,-0.02:99
-chr1 5199984 rs663142 G T 300.03 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.95;MQ=57.88;MQ0=0;OQ=2524.52;QD=34.58;SB=-1263.12 GT:AD:DP:GL:GQ 1/1:0,73:71:-256.06,-21.39,-0.02:99
-chr1 5200020 rs663106 T C 288.64 PASS AC=2;AF=1.00;AN=2;DB;DP=80;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=57.94;MQ0=0;OQ=2324.56;QD=29.06;SB=-1068.20 GT:AD:DP:GL:GQ 1/1:0,80:72:-236.10,-21.71,-0.06:99
-chr1 5201096 rs35339923 C T 25.91 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=2;HaplotypeScore=0.74;MQ=59.27;MQ0=0;OQ=2513.57;QD=39.90;SB=-919.70 GT:AD:DP:GL:GQ 1/1:0,63:63:-254.96,-18.98,-0.02:99
-chr1 5201932 rs611422 T C 369.89 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.65;MQ0=0;OQ=2205.79;QD=33.94;SB=-980.06 GT:AD:DP:GL:GQ 1/1:0,65:62:-224.19,-18.68,-0.02:99
-chr1 5201978 rs534321 A C 83.24 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.68;MQ0=0;OQ=2498.46;QD=34.23;SB=-901.19 GT:AD:DP:GL:GQ 1/1:0,73:73:-253.46,-21.99,-0.03:99
-chr1 5202029 rs534188 C T 644.23 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.84;MQ0=0;OQ=2223.00;QD=39.70;SB=-899.19 GT:AD:DP:GL:GQ 1/1:0,56:56:-225.90,-16.87,-0.02:99
-chr1 5202175 rs12125575 G A 578.75 PASS AC=2;AF=1.00;AN=2;DB;DP=47;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=51.13;MQ0=0;OQ=1740.25;QD=37.03;SB=-800.07 GT:AD:DP:GL:GQ 1/1:0,47:44:-177.62,-13.25,-0.01:99
-chr1 5202200 rs610133 T C 141.51 PASS AC=2;AF=1.00;AN=2;DB;DP=46;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=49.73;MQ0=0;OQ=1399.83;QD=30.43;SB=-711.63 GT:AD:DP:GL:GQ 1/1:0,46:41:-143.59,-12.36,-0.02:99
-chr1 5202222 rs511282 G T 609.56 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=50.02;MQ0=0;OQ=2299.71;QD=34.32;SB=-1138.31 GT:AD:DP:GL:GQ 1/1:0,67:64:-233.58,-19.28,-0.02:99
-chr1 5202265 rs599481 G T 595.11 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=49.58;MQ0=0;OQ=2113.87;QD=33.55;SB=-993.43 GT:AD:DP:GL:GQ 1/1:0,63:58:-214.99,-17.47,-0.02:99
-chr1 5202388 rs12066405 A G 127.75 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=51.98;MQ0=0;OQ=2322.85;QD=33.66;SB=-1080.10 GT:AD:DP:GL:GQ 1/1:0,69:65:-235.89,-19.58,-0.02:99
-chr1 5202422 . T G 419.39 Indel AC=1;AF=0.50;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=66.39;MQ=43.53;MQ0=0;QD=7.23;SB=-202.77 GT:AD:DP:GL:GQ 0/1:38,20:51:-60.59,-15.36,-121.07:99
-chr1 5202441 rs12071111 G A 97.09 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=3.61;MQ=40.65;MQ0=0;OQ=1838.51;QD=34.69;SB=-927.74 GT:AD:DP:GL:GQ 1/1:1,52:48:-187.45,-14.46,-0.02:99
-chr1 5202467 rs12067585 T G 27.99 PASS AC=2;AF=1.00;AN=2;DB;DP=35;Dels=0.00;HRun=1;HaplotypeScore=0.10;MQ=52.14;MQ0=0;OQ=1141.50;QD=32.61;SB=-417.26 GT:AD:DP:GL:GQ 1/1:0,35:33:-117.74,-9.94,-0.01:99
-chr1 5202510 rs10915390 T C 6.38 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=0.16;MQ=45.77;MQ0=0;OQ=1492.54;QD=28.70;SB=-582.99 GT:AD:DP:GL:GQ 1/1:0,52:46:-152.88,-13.87,-0.04:99
-chr1 5202536 rs10915391 A G 576.79 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=40.09;MQ0=0;OQ=1719.08;QD=33.06;SB=-769.98 GT:AD:DP:GL:GQ 1/1:0,52:48:-175.51,-14.46,-0.01:99
-chr1 5202563 . A G 1303.98 SnpCluster AC=2;AF=1.00;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=5.87;MQ=34.10;MQ0=0;QD=25.08;SB=-434.46 GT:AD:DP:GL:GQ 1/1:0,52:39:-134.00,-11.75,-0.02:99
-chr1 5202564 . T C 1560.70 SnpCluster AC=2;AF=1.00;AN=2;DP=52;Dels=0.00;HRun=2;HaplotypeScore=5.87;MQ=34.10;MQ0=0;QD=30.01;SB=-450.83 GT:AD:DP:GL:GQ 1/1:1,51:44:-159.67,-13.26,-0.02:99
-chr1 5202566 . C T 1713.62 SnpCluster AC=2;AF=1.00;AN=2;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.22;MQ=34.87;MQ0=0;QD=32.95;SB=-454.10 GT:AD:DP:GL:GQ 1/1:0,51:43:-174.96,-12.95,-0.01:99
-chr1 5202576 rs12134110 C T 0.75 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=6.13;MQ=37.89;MQ0=0;OQ=1873.93;QD=33.46;SB=-544.73 GT:AD:DP:GL:GQ 1/1:1,55:47:-190.99,-14.16,-0.01:99
-chr1 5202767 rs2986185 A G 288.60 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=54.20;MQ0=0;OQ=2264.33;QD=34.84;SB=-1153.44 GT:AD:DP:GL:GQ 1/1:0,65:64:-230.04,-19.28,-0.02:99
-chr1 5202796 rs2945617 T C 352.06 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=54.10;MQ0=0;OQ=1791.40;QD=27.99;SB=-839.97 GT:AD:DP:GL:GQ 1/1:0,64:58:-182.79,-17.50,-0.06:99
-chr1 5202844 rs2986184 C G 260.78 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=52.86;MQ0=0;OQ=2380.85;QD=40.35;SB=-1080.09 GT:AD:DP:GL:GQ 1/1:0,59:56:-241.69,-16.88,-0.02:99
-chr1 5202908 . C T 49.09 PASS AC=2;AF=1.00;AN=2;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=56.41;MQ0=0;OQ=1679.71;QD=37.33;SB=-834.36 GT:AD:DP:GL:GQ 1/1:0,45:42:-171.56,-12.65,-0.01:99
-chr1 5203231 rs480807 G A 112.83 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=1.65;MQ=59.13;MQ0=0;OQ=2991.96;QD=39.89;SB=-1079.44 GT:AD:DP:GL:GQ 1/1:0,75:75:-302.81,-22.60,-0.03:99
-chr1 5203306 rs6687834 C T 621.90 PASS AC=2;AF=1.00;AN=2;DB;DP=77;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3055.40;QD=39.68;SB=-1315.34 GT:AD:DP:GL:GQ 1/1:0,77:77:-309.15,-23.20,-0.02:99
-chr1 5203354 rs584498 C T 147.71 PASS AC=2;AF=1.00;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.38;MQ0=0;OQ=2983.67;QD=38.25;SB=-1435.37 GT:AD:DP:GL:GQ 1/1:0,78:75:-301.97,-22.59,-0.02:99
-chr1 5203671 rs582779 C A 167.92 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=60.00;MQ0=0;OQ=2146.95;QD=35.78;SB=-804.85 GT:AD:DP:GL:GQ 1/1:0,60:60:-218.30,-18.08,-0.02:99
-chr1 5203886 rs474456 G C 148.15 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=0;HaplotypeScore=3.48;MQ=58.03;MQ0=0;OQ=2254.35;QD=39.55;SB=-1087.49 GT:AD:DP:GL:GQ 1/1:0,57:55:-229.05,-16.59,-0.04:99
-chr1 5203943 rs473685 T C 568.01 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.84;MQ0=0;OQ=1941.75;QD=35.30;SB=-734.93 GT:AD:DP:GL:GQ 1/1:0,55:55:-197.78,-16.57,-0.02:99
-chr1 5204037 rs472768 C A 257.84 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=1.57;MQ=53.49;MQ0=0;OQ=2116.13;QD=35.87;SB=-808.86 GT:AD:DP:GL:GQ 1/1:0,59:58:-215.21,-17.47,-0.01:99
-chr1 5204179 rs561169 C T 180.12 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.48;MQ=59.63;MQ0=0;OQ=1666.79;QD=32.68;SB=-839.97 GT:AD:DP:GL:GQ 1/1:0,51:44:-170.29,-13.26,-0.02:99
-chr1 5204268 rs677650 G C 32.68 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=0.58;MQ=41.36;MQ0=0;OQ=1911.63;QD=39.01;SB=-915.40 GT:AD:DP:GL:GQ 1/1:0,49:46:-194.77,-13.87,-0.02:99
-chr1 5204556 rs676589 T A 738.91 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=54.27;MQ0=0;OQ=2559.35;QD=36.56;SB=-1189.80 GT:AD:DP:GL:GQ 1/1:0,70:69:-259.54,-20.78,-0.02:99
-chr1 5204733 rs675738 T C 27.97 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=2;HaplotypeScore=2.20;MQ=59.17;MQ0=0;OQ=1658.38;QD=29.61;SB=-662.81 GT:AD:DP:GL:GQ 1/1:0,56:52:-169.47,-15.68,-0.05:99
-chr1 5204883 rs9439546 G A 532.03 PASS AC=2;AF=1.00;AN=2;DB;DP=76;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.70;MQ0=0;OQ=2940.91;QD=38.70;SB=-1192.36 GT:AD:DP:GL:GQ 1/1:0,76:75:-297.70,-22.60,-0.03:99
-chr1 5204955 rs674820 A G 79.68 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=1;HaplotypeScore=1.76;MQ=59.62;MQ0=0;OQ=2113.60;QD=34.65;SB=-990.71 GT:AD:DP:GL:GQ 1/1:0,61:60:-214.97,-18.07,-0.02:99
-chr1 5204998 rs674421 C T 11.79 PASS AC=2;AF=1.00;AN=2;DB;DP=57;Dels=0.00;HRun=1;HaplotypeScore=4.18;MQ=59.19;MQ0=0;OQ=2200.64;QD=38.61;SB=-746.99 GT:AD:DP:GL:GQ 1/1:0,57:55:-223.66,-16.57,-0.01:99
-chr1 5205224 rs673451 T G 405.18 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=1733.87;QD=28.90;SB=-756.83 GT:AD:DP:GL:GQ 1/1:0,60:55:-177.02,-16.58,-0.05:99
-chr1 5206120 rs56397638 C T 43.03 Indel;LowQual AC=1;AF=0.50;AN=2;DB;DP=18;Dels=0.00;HRun=1;HaplotypeScore=3.09;MQ=48.93;MQ0=0;QD=2.39;SB=-0.99 GT:AD:DP:GL:GQ 0/1:15,3:17:-12.71,-5.12,-48.36:75.87
-chr1 5206410 . T C 0.40 PASS AC=2;AF=1.00;AN=2;DP=39;Dels=0.00;HRun=2;HaplotypeScore=1.63;MQ=56.77;MQ0=0;OQ=1364.10;QD=34.98;SB=-316.12 GT:AD:DP:GL:GQ 1/1:0,39:38:-140.01,-11.45,-0.01:99
-chr1 5206681 rs12121640 A C 71.98 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=1.00;MQ=58.51;MQ0=0;OQ=1679.67;QD=32.93;SB=-387.04 GT:AD:DP:GL:GQ 1/1:0,51:47:-171.57,-14.16,-0.01:99
-chr1 5206700 rs12125074 G A 98.48 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.05;MQ=58.12;MQ0=0;OQ=2000.17;QD=37.74;SB=-489.65 GT:AD:DP:GL:GQ 1/1:0,53:50:-203.61,-15.06,-0.01:99
-chr1 5208394 rs7549686 T C 327.06 PASS AC=2;AF=1.00;AN=2;DB;DP=94;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3436.97;QD=36.56;SB=-1599.67 GT:AD:DP:GL:GQ 1/1:0,94:93:-342.70,-28.01,-0.02:99
-chr1 5209527 rs12135834 C T 124.99 PASS AC=2;AF=1.00;AN=2;DB;DP=69;Dels=0.00;HRun=2;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=2736.25;QD=39.66;SB=-1253.04 GT:AD:DP:GL:GQ 1/1:0,69:68:-277.22,-20.48,-0.01:99
-chr1 5209757 rs12128282 G A 708.74 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2355.65;QD=38.62;SB=-1039.67 GT:AD:DP:GL:GQ 1/1:0,61:59:-239.17,-17.77,-0.02:99
-chr1 5210118 rs4465222 T C 132.90 PASS AC=2;AF=1.00;AN=2;DB;DP=45;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=58.97;MQ0=0;OQ=1268.12;QD=28.18;SB=-489.53 GT:AD:DP:GL:GQ 1/1:0,45:42:-130.45,-12.68,-0.06:99
-chr1 5210152 rs4465223 T C 176.23 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.16;MQ0=0;OQ=1621.75;QD=29.49;SB=-654.28 GT:AD:DP:GL:GQ 1/1:0,55:51:-165.81,-15.38,-0.05:99
-chr1 5210469 rs6686714 G T 712.77 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.59;MQ0=0;OQ=1971.04;QD=35.20;SB=-893.62 GT:AD:DP:GL:GQ 1/1:0,56:56:-200.71,-16.87,-0.02:99
-chr1 5211244 rs6603825 T C 594.56 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=2173.03;QD=35.62;SB=-828.31 GT:AD:DP:GL:GQ 1/1:0,61:60:-220.91,-18.07,-0.02:99
-chr1 5211435 . C T 25.65 PASS AC=1;AF=0.50;AN=2;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.22;MQ=59.65;MQ0=0;OQ=960.07;QD=17.78;SB=-418.78 GT:AD:DP:GL:GQ 0/1:25,29:53:-115.26,-15.97,-85.03:99
-chr1 5212025 rs4475768 T G 354.90 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.37;MQ0=0;OQ=695.32;QD=14.19;SB=-234.36 GT:AD:DP:GL:GQ 0/1:24,25:49:-87.57,-14.76,-89.97:99
-chr1 5212226 rs494046 T C 148.80 PASS AC=2;AF=1.00;AN=2;DB;DP=93;Dels=0.00;HRun=0;HaplotypeScore=0.79;MQ=60.00;MQ0=0;OQ=2779.20;QD=29.88;SB=-1328.52 GT:AD:DP:GL:GQ 1/1:0,93:88:-281.58,-26.54,-0.08:99
-chr1 5213428 . A G 11.97 PASS AC=1;AF=0.50;AN=2;DP=48;Dels=0.00;HRun=0;HaplotypeScore=3.03;MQ=58.55;MQ0=0;OQ=408.80;QD=8.52;SB=-93.78 GT:AD:DP:GL:GQ 0/1:27,21:44:-57.43,-13.27,-96.36:99
-chr1 5213524 . T A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=55;Dels=0.00;HRun=0;HaplotypeScore=71.93;MQ=50.54;MQ0=0;OQ=502.87;QD=9.14;SB=-189.21 GT:AD:DP:GL:GQ 0/1:37,18:47:-67.73,-14.16,-102.82:99
-chr1 5213770 rs6658152 C T 45.87 PASS AC=2;AF=1.00;AN=2;DB;DP=41;Dels=0.00;HRun=0;HaplotypeScore=0.33;MQ=60.00;MQ0=0;OQ=1572.39;QD=38.35;SB=-554.31 GT:AD:DP:GL:GQ 1/1:0,41:41:-160.84,-12.35,-0.02:99
-chr1 5215271 . A G 38.30 PASS AC=2;AF=1.00;AN=2;DP=58;Dels=0.00;HRun=0;HaplotypeScore=1.20;MQ=59.60;MQ0=0;OQ=1692.08;QD=29.17;SB=-770.59 GT:AD:DP:GL:GQ 1/1:0,57:55:-172.85,-16.59,-0.06:99
-chr1 5217813 . G C 1.18 PASS AC=1;AF=0.50;AN=2;DP=81;Dels=0.00;HRun=0;HaplotypeScore=9.11;MQ=58.35;MQ0=1;OQ=1164.43;QD=14.38;SB=-426.29 GT:AD:DP:GL:GQ 0/1:49,32:77:-142.93,-23.20,-194.98:99
-chr1 5217931 rs4847582 C G 145.68 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.89;MQ=59.66;MQ0=0;OQ=1509.42;QD=22.20;SB=-480.86 GT:AD:DP:GL:GQ 0/1:26,42:66:-174.11,-19.89,-110.01:99
-chr1 5218042 rs4847581 A T 229.68 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.16;MQ=59.31;MQ0=0;OQ=560.70;QD=9.19;SB=-151.08 GT:AD:DP:GL:GQ 0/1:39,22:59:-77.12,-17.77,-150.88:99
-chr1 5218412 rs12089315 C T 695.85 PASS AC=2;AF=1.00;AN=2;DB;DP=66;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2655.40;QD=40.23;SB=-1167.53 GT:AD:DP:GL:GQ 1/1:0,66:65:-269.14,-19.58,-0.01:99
-chr1 5218922 rs55929300 C T 250.89 PASS AC=1;AF=0.50;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=2.25;MQ=58.35;MQ0=0;OQ=749.84;QD=14.42;SB=-372.87 GT:AD:DP:GL:GQ 0/1:29,23:51:-93.64,-15.37,-91.04:99
-chr1 5218923 rs2945619 A G 55.86 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=2.25;MQ=58.42;MQ0=0;OQ=1817.82;QD=33.66;SB=-828.90 GT:AD:DP:GL:GQ 1/1:0,54:53:-185.39,-15.97,-0.03:99
-chr1 5219162 . C T 26.36 PASS AC=1;AF=0.50;AN=2;DP=84;Dels=0.00;HRun=2;HaplotypeScore=0.93;MQ=59.78;MQ0=0;OQ=1260.89;QD=15.01;SB=-475.42 GT:AD:DP:GL:GQ 0/1:46,38:84:-154.67,-25.30,-167.04:99
-chr1 5220394 rs632798 A G 319.28 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=1931.82;QD=32.74;SB=-775.98 GT:AD:DP:GL:GQ 1/1:0,59:54:-196.78,-16.27,-0.02:99
-chr1 5221239 rs11584035 A G 510.42 PASS AC=2;AF=1.00;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2162.59;QD=34.33;SB=-1003.74 GT:AD:DP:GL:GQ 1/1:0,63:61:-219.86,-18.37,-0.02:99
-chr1 5221301 rs11585734 G C 28.93 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=58.47;MQ0=0;OQ=2416.76;QD=43.16;SB=-843.33 GT:AD:DP:GL:GQ 1/1:0,56:55:-245.27,-16.57,-0.01:99
-chr1 5221482 rs34835703 A T 2939.50 Indel AC=2;AF=1.00;AN=2;DB;DP=92;Dels=0.00;HRun=0;HaplotypeScore=3.98;MQ=58.65;MQ0=0;QD=31.95;SB=-1078.25 GT:AD:DP:GL:GQ 1/1:2,89:87:-306.96,-29.45,-9.42:99
-chr1 5221725 . G A 0 FDRtranche2.00to10.00+ AC=1;AF=0.50;AN=2;DP=60;Dels=0.03;HRun=18;HaplotypeScore=39.80;MQ=52.31;MQ0=0;OQ=152.15;QD=2.54;SB=47.14 GT:AD:DP:GL:GQ 0/1:40,18:43:-30.85,-12.35,-114.35:99
-chr1 5222078 rs972257 T A 639.98 PASS AC=2;AF=1.00;AN=2;DB;DP=85;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=56.18;MQ0=0;OQ=3168.88;QD=37.28;SB=-1120.55 GT:AD:DP:GL:GQ 1/1:0,85:85:-320.49,-25.60,-0.02:99
-chr1 5222126 rs972256 A G 626.95 PASS AC=2;AF=1.00;AN=2;DB;DP=75;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.13;MQ0=0;OQ=2639.54;QD=35.19;SB=-1126.78 GT:AD:DP:GL:GQ 1/1:0,75:75:-267.56,-22.59,-0.03:99
-chr1 5224091 rs499416 T C 297.77 PASS AC=2;AF=1.00;AN=2;DB;DP=82;Dels=0.00;HRun=0;HaplotypeScore=1.73;MQ=59.44;MQ0=0;OQ=2957.76;QD=36.07;SB=-1259.50 GT:AD:DP:GL:GQ 1/1:0,82:82:-299.39,-24.70,-0.03:99
-chr1 5224457 rs681122 A G 116.50 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=58.67;MQ0=0;OQ=2663.18;QD=31.70;SB=-1024.35 GT:AD:DP:GL:GQ 1/1:0,84:81:-269.96,-24.42,-0.06:99
-chr1 5224547 rs503246 T C 2.42 PASS AC=2;AF=1.00;AN=2;DB;DP=70;Dels=0.00;HRun=1;HaplotypeScore=6.13;MQ=59.67;MQ0=0;OQ=2425.86;QD=34.66;SB=-1136.77 GT:AD:DP:GL:GQ 1/1:0,69:69:-249.69,-23.90,-3.52:99
-chr1 5224600 rs504015 G A 107.71 PASS AC=2;AF=1.00;AN=2;DB;DP=95;Dels=0.00;HRun=0;HaplotypeScore=1.41;MQ=59.36;MQ0=0;OQ=3623.40;QD=38.14;SB=-1734.33 GT:AD:DP:GL:GQ 1/1:1,94:92:-361.34,-27.72,-0.04:99
-chr1 5225244 rs34916930 A G 210.97 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=2.75;MQ=59.23;MQ0=0;OQ=766.73;QD=12.78;SB=-281.64 GT:AD:DP:GL:GQ 0/1:31,29:57:-97.13,-17.17,-122.94:99
-chr1 5225286 rs1614164 A G 116.44 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=59.11;MQ0=0;OQ=1503.00;QD=28.90;SB=-584.52 GT:AD:DP:GL:GQ 1/1:0,52:49:-153.94,-14.79,-0.06:99
-chr1 5225305 rs531507 T C 127.86 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=1;HaplotypeScore=0.63;MQ=59.05;MQ0=0;OQ=1485.28;QD=30.31;SB=-700.80 GT:AD:DP:GL:GQ 1/1:0,49:47:-152.15,-14.18,-0.04:99
-chr1 5225319 rs531541 G A 341.76 PASS AC=1;AF=0.50;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.47;MQ=59.53;MQ0=0;OQ=776.62;QD=15.85;SB=-311.30 GT:AD:DP:GL:GQ 0/1:25,24:46:-94.81,-13.86,-73.71:99
-chr1 5225584 rs12139398 G T 64.15 PASS AC=1;AF=0.50;AN=2;DB;DP=76;Dels=0.00;HRun=3;HaplotypeScore=2.68;MQ=59.09;MQ0=0;OQ=1255.53;QD=16.52;SB=-636.75 GT:AD:DP:GL:GQ 0/1:35,41:76:-151.73,-22.89,-120.82:99
-chr1 5225784 rs648378 G A 217.93 PASS AC=2;AF=1.00;AN=2;DB;DP=79;Dels=0.00;HRun=1;HaplotypeScore=0.67;MQ=60.00;MQ0=0;OQ=3051.49;QD=38.63;SB=-1366.03 GT:AD:DP:GL:GQ 1/1:0,79:77:-308.76,-23.20,-0.02:99
-chr1 5225910 rs536995 T C 659.19 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2238.13;QD=31.52;SB=-1141.80 GT:AD:DP:GL:GQ 1/1:0,71:69:-227.45,-20.80,-0.05:99
-chr1 5226194 rs646542 C A 53.96 PASS AC=1;AF=0.50;AN=2;DB;DP=48;Dels=0.00;HRun=2;HaplotypeScore=2.51;MQ=59.52;MQ0=0;OQ=616.21;QD=12.84;SB=-186.21 GT:AD:DP:GL:GQ 0/1:25,23:46:-78.77,-13.86,-80.93:99
-chr1 5227007 rs17422703 C T 447.59 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=0.99;MQ=60.00;MQ0=0;OQ=653.00;QD=13.89;SB=-346.50 GT:AD:DP:GL:GQ 0/1:27,20:47:-82.75,-14.17,-88.07:99
-chr1 5227141 rs479689 T C 634.35 PASS AC=2;AF=1.00;AN=2;DB;DP=72;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.68;MQ0=0;OQ=2577.54;QD=35.80;SB=-1149.80 GT:AD:DP:GL:GQ 1/1:0,72:72:-261.36,-21.69,-0.02:99
-chr1 5227198 rs631837 T G 470.17 PASS AC=1;AF=0.50;AN=2;DB;DP=80;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.48;MQ0=0;OQ=1038.21;QD=12.98;SB=-481.28 GT:AD:DP:GL:GQ 0/1:42,38:78:-130.60,-23.49,-142.85:99
-chr1 5227509 rs2945620 A G 463.41 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.71;MQ0=0;OQ=1887.53;QD=34.95;SB=-718.20 GT:AD:DP:GL:GQ 1/1:0,54:53:-192.35,-15.96,-0.02:99
-chr1 5227512 rs2986190 C G 581.25 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.76;MQ0=0;OQ=2178.35;QD=38.90;SB=-696.39 GT:AD:DP:GL:GQ 1/1:0,56:54:-221.45,-16.29,-0.03:99
-chr1 5227592 rs484203 C G 505.04 PASS AC=2;AF=1.00;AN=2;DB;DP=48;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.30;MQ0=0;OQ=1740.53;QD=36.26;SB=-435.04 GT:AD:DP:GL:GQ 1/1:0,48:44:-177.67,-13.27,-0.03:99
-chr1 5227620 rs2945621 C T 184.65 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.15;MQ=58.52;MQ0=0;OQ=2108.36;QD=38.33;SB=-729.97 GT:AD:DP:GL:GQ 1/1:0,54:54:-216.99,-18.70,-2.57:99
-chr1 5228455 rs605572 G A 158.70 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.32;MQ=59.08;MQ0=0;OQ=2364.59;QD=38.76;SB=-1049.40 GT:AD:DP:GL:GQ 1/1:0,61:59:-240.06,-17.77,-0.01:99
-chr1 5228485 rs547366 A G 151.91 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=1.43;MQ=59.32;MQ0=0;OQ=1644.48;QD=29.90;SB=-746.94 GT:AD:DP:GL:GQ 1/1:0,55:53:-168.09,-15.99,-0.05:99
-chr1 5228494 rs547375 T C 432.28 PASS AC=2;AF=1.00;AN=2;DB;DP=40;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.06;MQ0=0;OQ=1148.89;QD=28.72;SB=-518.83 GT:AD:DP:GL:GQ 1/1:0,40:38:-118.51,-11.46,-0.04:99
-chr1 5228675 rs549178 A C 608.96 PASS AC=2;AF=1.00;AN=2;DB;DP=54;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1844.59;QD=34.16;SB=-895.07 GT:AD:DP:GL:GQ 1/1:0,54:53:-188.06,-15.96,-0.02:99
-chr1 5229041 rs552154 A G 144.86 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=2;HaplotypeScore=1.05;MQ=58.33;MQ0=0;OQ=2394.34;QD=35.74;SB=-1030.76 GT:AD:DP:GL:GQ 1/1:0,67:67:-243.04,-20.18,-0.02:99
-chr1 5229075 rs694316 A G 16.95 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=2;HaplotypeScore=2.71;MQ=58.29;MQ0=0;OQ=1696.38;QD=32.62;SB=-808.31 GT:AD:DP:GL:GQ 1/1:0,52:49:-173.25,-14.76,-0.02:99
-chr1 5229079 rs574063 A C 47.22 PASS AC=2;AF=1.00;AN=2;DB;DP=52;Dels=0.00;HRun=1;HaplotypeScore=2.27;MQ=58.29;MQ0=0;OQ=1690.52;QD=32.51;SB=-775.03 GT:AD:DP:GL:GQ 1/1:0,52:50:-172.66,-15.06,-0.02:99
-chr1 5229195 rs2986189 T C 594.24 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1695.13;QD=33.24;SB=-849.99 GT:AD:DP:GL:GQ 1/1:0,50:49:-173.12,-14.76,-0.02:99
-chr1 5229410 rs590229 A G 533.32 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=58.69;MQ0=0;OQ=1626.39;QD=32.53;SB=-702.18 GT:AD:DP:GL:GQ 1/1:0,50:47:-166.24,-14.16,-0.02:99
-chr1 5229454 rs576935 T C 291.30 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2227.88;QD=34.81;SB=-1091.09 GT:AD:DP:GL:GQ 1/1:0,64:63:-226.40,-18.98,-0.03:99
-chr1 5229643 rs589314 C T 702.68 PASS AC=2;AF=1.00;AN=2;DB;DP=84;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=3349.31;QD=39.87;SB=-1157.05 GT:AD:DP:GL:GQ 1/1:0,84:83:-333.93,-25.00,-0.02:99
-chr1 5229725 rs579467 T C 242.79 PASS AC=2;AF=1.00;AN=2;DB;DP=53;Dels=0.00;HRun=0;HaplotypeScore=1.46;MQ=59.13;MQ0=0;OQ=1575.01;QD=29.72;SB=-809.29 GT:AD:DP:GL:GQ 1/1:0,53:51:-161.14,-15.39,-0.05:99
-chr1 5229840 rs580404 G A 618.34 PASS AC=2;AF=1.00;AN=2;DB;DP=73;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.49;MQ0=0;OQ=2841.67;QD=38.93;SB=-1151.68 GT:AD:DP:GL:GQ 1/1:0,73:73:-287.78,-22.00,-0.03:99
-chr1 5229963 rs587619 A G 627.90 PASS AC=2;AF=1.00;AN=2;DB;DP=49;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.05;MQ0=0;OQ=1527.65;QD=31.18;SB=-661.80 GT:AD:DP:GL:GQ 1/1:0,49:48:-156.40,-14.48,-0.05:99
-chr1 5230068 rs684796 A G 654.33 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1910.04;QD=31.31;SB=-776.75 GT:AD:DP:GL:GQ 1/1:0,61:59:-194.63,-17.79,-0.04:99
-chr1 5230099 rs493993 T C 52.25 PASS AC=2;AF=1.00;AN=2;DB;DP=51;Dels=0.00;HRun=1;HaplotypeScore=2.40;MQ=60.00;MQ0=0;OQ=1531.39;QD=30.03;SB=-555.88 GT:AD:DP:GL:GQ 1/1:0,51:49:-156.77,-14.78,-0.05:99
-chr1 5230146 rs494138 C T 565.44 PASS AC=2;AF=1.00;AN=2;DB;DP=50;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1901.52;QD=38.03;SB=-812.08 GT:AD:DP:GL:GQ 1/1:0,50:49:-193.76,-14.77,-0.02:99
-chr1 5230400 rs683361 C T 576.16 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2445.96;QD=38.22;SB=-885.63 GT:AD:DP:GL:GQ 1/1:0,64:64:-248.21,-19.29,-0.03:99
-chr1 5230419 rs683326 A C 444.54 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=2097.81;QD=32.78;SB=-733.04 GT:AD:DP:GL:GQ 1/1:0,64:59:-213.39,-17.77,-0.02:99
-chr1 5230522 rs497780 C T 280.11 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.26;MQ=59.44;MQ0=0;OQ=2456.36;QD=36.66;SB=-1135.53 GT:AD:DP:GL:GQ 1/1:0,66:64:-249.25,-19.29,-0.03:99
-chr1 5230617 rs682425 A C 128.19 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=1.82;MQ=60.00;MQ0=0;OQ=2329.64;QD=34.26;SB=-803.08 GT:AD:DP:GL:GQ 1/1:1,67:66:-236.57,-19.88,-0.02:99
-chr1 5230727 rs499639 G A 152.07 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=1.94;MQ=59.28;MQ0=0;OQ=1710.74;QD=26.73;SB=-582.87 GT:AD:DP:GL:GQ 1/1:0,37:64:-256.74,-99.73,-82.08:99
-chr1 5230993 rs17423021 C T 275.08 PASS AC=1;AF=0.50;AN=2;DB;DP=47;Dels=0.00;HRun=0;HaplotypeScore=1.66;MQ=60.00;MQ0=0;OQ=870.39;QD=18.52;SB=-403.16 GT:AD:DP:GL:GQ 0/1:21,26:47:-104.48,-14.16,-73.19:99
-chr1 5231281 rs695100 T C 614.40 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=1962.66;QD=33.84;SB=-961.65 GT:AD:DP:GL:GQ 1/1:0,58:57:-199.88,-17.17,-0.03:99
-chr1 5231434 rs2860250 T G 608.99 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=1940.74;QD=34.66;SB=-919.09 GT:AD:DP:GL:GQ 1/1:0,56:55:-197.68,-16.57,-0.02:99
-chr1 5231440 rs2353173 G T 713.73 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2174.12;QD=33.45;SB=-1013.52 GT:AD:DP:GL:GQ 1/1:0,65:62:-221.02,-18.68,-0.02:99
-chr1 5231533 rs4290073 G A 106.58 PASS AC=1;AF=0.50;AN=2;DB;DP=81;Dels=0.00;HRun=3;HaplotypeScore=0.16;MQ=59.20;MQ0=0;OQ=1041.27;QD=12.86;SB=-342.41 GT:AD:DP:GL:GQ 0/1:49,32:81:-131.81,-24.39,-179.39:99
-chr1 5231729 rs2945622 G A 619.13 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=2286.02;QD=38.75;SB=-1132.51 GT:AD:DP:GL:GQ 1/1:0,59:57:-232.20,-17.17,-0.01:99
-chr1 5231775 rs4633300 T C 80.14 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=2.27;MQ=58.86;MQ0=0;OQ=2147.74;QD=35.21;SB=-1067.79 GT:AD:DP:GL:GQ 1/1:0,61:61:-218.38,-18.38,-0.02:99
-chr1 5231808 rs10799186 T C 608.79 PASS AC=2;AF=1.00;AN=2;DB;DP=62;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.88;MQ0=0;OQ=2059.90;QD=33.22;SB=-1027.00 GT:AD:DP:GL:GQ 1/1:0,62:60:-209.61,-18.08,-0.04:99
-chr1 5231809 rs10799187 G C 596.93 PASS AC=2;AF=1.00;AN=2;DB;DP=64;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=58.91;MQ0=0;OQ=2598.74;QD=40.61;SB=-1318.71 GT:AD:DP:GL:GQ 1/1:0,64:61:-263.48,-18.38,-0.02:99
-chr1 5231833 rs530731 G C 494.40 PASS AC=2;AF=1.00;AN=2;DB;DP=58;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.60;MQ0=0;OQ=2447.16;QD=42.19;SB=-1018.28 GT:AD:DP:GL:GQ 1/1:0,58:58:-248.32,-17.48,-0.02:99
-chr1 5231988 rs614111 C A 590.46 PASS AC=2;AF=1.00;AN=2;DB;DP=55;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.58;MQ0=0;OQ=1949.76;QD=35.45;SB=-809.87 GT:AD:DP:GL:GQ 1/1:0,55:54:-198.57,-16.26,-0.01:99
-chr1 5231995 rs614102 A G 590.99 PASS AC=2;AF=1.00;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.61;MQ0=0;OQ=2129.07;QD=36.09;SB=-828.32 GT:AD:DP:GL:GQ 1/1:0,59:59:-216.51,-17.77,-0.02:99
-chr1 5232537 rs558175 T A 537.54 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2470.42;QD=36.33;SB=-1158.53 GT:AD:DP:GL:GQ 1/1:0,68:67:-250.65,-20.18,-0.02:99
-chr1 5232779 rs560794 T A 637.12 PASS AC=2;AF=1.00;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.66;MQ0=0;OQ=2459.58;QD=36.17;SB=-1165.07 GT:AD:DP:GL:GQ 1/1:0,68:66:-249.56,-19.88,-0.02:99
-chr1 5232782 rs600322 G A 160.84 PASS AC=2;AF=1.00;AN=2;DB;DP=65;Dels=0.00;HRun=1;HaplotypeScore=0.16;MQ=59.65;MQ0=0;OQ=2495.29;QD=38.39;SB=-1228.15 GT:AD:DP:GL:GQ 1/1:0,65:64:-253.13,-19.28,-0.02:99
-chr1 5232864 rs599884 A G 212.34 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.98;MQ=59.42;MQ0=0;OQ=2139.99;QD=35.08;SB=-951.99 GT:AD:DP:GL:GQ 1/1:0,61:60:-217.60,-18.07,-0.02:99
-chr1 5233339 rs598031 G A 300.26 PASS AC=2;AF=1.00;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=0.87;MQ=59.38;MQ0=0;OQ=2603.20;QD=38.85;SB=-1265.68 GT:AD:DP:GL:GQ 1/1:0,66:66:-263.92,-19.88,-0.02:99
-chr1 5233376 rs587228 C T 292.53 PASS AC=2;AF=1.00;AN=2;DB;DP=60;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=58.99;MQ0=0;OQ=2392.78;QD=39.88;SB=-1196.59 GT:AD:DP:GL:GQ 1/1:0,60:60:-242.88,-18.07,-0.02:99
-chr1 5233377 rs476866 A G 630.33 PASS AC=2;AF=1.00;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=59.01;MQ0=0;OQ=2129.35;QD=34.91;SB=-1082.46 GT:AD:DP:GL:GQ 1/1:0,61:60:-216.54,-18.07,-0.02:99
-chr1 5233422 rs476993 T C 95.16 PASS AC=2;AF=1.00;AN=2;DB;DP=56;Dels=0.00;HRun=1;HaplotypeScore=0.89;MQ=58.92;MQ0=0;OQ=1891.61;QD=33.78;SB=-702.84 GT:AD:DP:GL:GQ 1/1:1,55:55:-192.78,-16.58,-0.03:99
-chr1 5233779 rs56260836 C T 250.27 PASS AC=1;AF=0.50;AN=2;DB;DP=60;Dels=0.00;HRun=0;HaplotypeScore=1.97;MQ=59.69;MQ0=0;OQ=907.86;QD=15.13;SB=-369.08 GT:AD:DP:GL:GQ 0/1:31,29:57:-111.25,-17.18,-100.79:99
-chr1 5234072 rs504647 G A 600.46 PASS AC=2;AF=1.00;AN=2;DB;DP=71;Dels=0.00;HRun=0;HaplotypeScore=0.00;MQ=60.00;MQ0=0;OQ=2853.54;QD=40.19;SB=-1415.37 GT:AD:DP:GL:GQ 1/1:0,71:71:-288.96,-21.39,-0.02:99
-chr1 5234128 rs7551166 T C 37.81 PASS AC=1;AF=0.50;AN=2;DB;DP=63;Dels=0.00;HRun=1;HaplotypeScore=4.51;MQ=60.00;MQ0=0;OQ=837.05;QD=13.29;SB=-326.85 GT:AD:DP:GL:GQ 0/1:34,29:63:-105.96,-18.97,-138.54:99
-chr1 5234274 rs583170 C A 510.70 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.00;MQ=59.64;MQ0=0;OQ=1124.36;QD=17.57;SB=-381.75 GT:AD:DP:GL:GQ 0/1:28,36:64:-134.99,-19.28,-100.59:99
-chr1 5234483 rs12746195 G T 448 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=1.30;MQ=60.00;MQ0=0;OQ=907.18;QD=14.87;SB=-443.17 GT:AD:DP:GL:GQ 0/1:30,31:60:-112.07,-18.07,-106.20:99
-chr1 5234497 rs12732868 T G 365.79 PASS AC=1;AF=0.50;AN=2;DB;DP=64;Dels=0.00;HRun=1;HaplotypeScore=0.80;MQ=60.00;MQ0=0;OQ=834.65;QD=13.04;SB=-431.76 GT:AD:DP:GL:GQ 0/1:33,31:62:-105.43,-18.68,-118.96:99
-chr1 5234595 rs12747559 C T 411.30 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=0;HaplotypeScore=1.47;MQ=59.66;MQ0=0;OQ=1103.55;QD=16.23;SB=-461.98 GT:AD:DP:GL:GQ 0/1:32,36:64:-132.93,-19.29,-98.65:99
-chr1 5234628 rs12746515 G A 395.10 PASS AC=1;AF=0.50;AN=2;DB;DP=78;Dels=0.00;HRun=0;HaplotypeScore=0.97;MQ=59.70;MQ0=0;OQ=1407.50;QD=18.04;SB=-722.08 GT:AD:DP:GL:GQ 0/1:37,41:75:-166.64,-22.60,-112.02:99
-chr1 5234751 rs12747870 C T 314.20 PASS AC=1;AF=0.50;AN=2;DB;DP=68;Dels=0.00;HRun=1;HaplotypeScore=2.20;MQ=59.17;MQ0=0;OQ=991.08;QD=14.57;SB=-434.89 GT:AD:DP:GL:GQ 0/1:38,30:67:-122.57,-20.18,-136.08:99
-chr1 5234796 rs12729227 A T 285.02 PASS AC=1;AF=0.50;AN=2;DB;DP=67;Dels=0.00;HRun=0;HaplotypeScore=1.60;MQ=58.68;MQ0=0;OQ=635.81;QD=9.49;SB=-240.21 GT:AD:DP:GL:GQ 0/1:44,23:66:-86.75,-19.88,-161.14:99
-chr1 5234855 rs12746867 G A 137.48 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=3;HaplotypeScore=0.48;MQ=58.86;MQ0=0;OQ=803.94;QD=13.18;SB=-392.38 GT:AD:DP:GL:GQ 0/1:35,26:59:-101.45,-17.77,-122.51:99
-chr1 5234867 rs12729373 A G 399.72 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=2;HaplotypeScore=0.00;MQ=59.62;MQ0=0;OQ=739.47;QD=12.12;SB=-312.22 GT:AD:DP:GL:GQ 0/1:35,26:61:-95.60,-18.37,-142.14:99
-chr1 5235030 rs55729623 C G 87.40 PASS AC=1;AF=0.50;AN=2;DB;DP=59;Dels=0.00;HRun=0;HaplotypeScore=4.84;MQ=59.98;MQ0=0;OQ=961.43;QD=16.30;SB=-383.64 GT:AD:DP:GL:GQ 0/1:26,33:53:-115.42,-16.00,-99.45:99
-chr1 5235034 . G A 5.72 PASS AC=1;AF=0.50;AN=2;DP=62;Dels=0.00;HRun=0;HaplotypeScore=5.25;MQ=59.98;MQ0=0;OQ=618.09;QD=9.97;SB=-190.00 GT:AD:DP:GL:GQ 0/1:34,27:51:-82.91,-17.82,-96.99:99
-chr1 5235136 rs17457156 T C 138.33 PASS AC=1;AF=0.50;AN=2;DB;DP=61;Dels=0.00;HRun=0;HaplotypeScore=3.41;MQ=59.24;MQ0=0;OQ=556.94;QD=9.13;SB=-82.80 GT:AD:DP:GL:GQ 0/1:34,26:58:-79.46,-20.48,-139.05:99
diff --git a/testdata/variant/ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf b/testdata/variant/ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf
deleted file mode 100644
index b96f648..0000000
--- a/testdata/variant/ILLUMINA.wex.broad_phase2_baseline.20111114.both.exome.genotypes.1000.vcf
+++ /dev/null
@@ -1,249 +0,0 @@
-##fileformat=VCFv4.1
-##FILTER=<ID=TruthSensitivityTranche98.50to98.80,Description="Truth sensitivity tranche level at VSQ Lod: -0.1106 <= x < 0.6654">
-##FILTER=<ID=TruthSensitivityTranche98.80to98.90,Description="Truth sensitivity tranche level at VSQ Lod: -0.4426 <= x < -0.1106">
-##FILTER=<ID=TruthSensitivityTranche98.90to99.00,Description="Truth sensitivity tranche level at VSQ Lod: -0.8793 <= x < -0.4426">
-##FILTER=<ID=TruthSensitivityTranche99.00to99.30,Description="Truth sensitivity tranche level at VSQ Lod: -2.6664 <= x < -0.8793">
-##FILTER=<ID=TruthSensitivityTranche99.30to99.50,Description="Truth sensitivity tranche level at VSQ Lod: -5.2612 <= x < -2.6664">
-##FILTER=<ID=TruthSensitivityTranche99.50to99.90,Description="Truth sensitivity tranche level at VSQ Lod: -65.3589 <= x < -5.2612">
-##FILTER=<ID=TruthSensitivityTranche99.90to100.00+,Description="Truth sensitivity tranche level at VQS Lod < -6678.5611">
-##FILTER=<ID=TruthSensitivityTranche99.90to100.00,Description="Truth sensitivity tranche level at VSQ Lod: -6678.5611 <= x < -65.3589">
-##FILTER=<ID=Indel_QD,Description="x">
-##FILTER=<ID=Indel_FS,Description="x">
-##FILTER=<ID=Indel_ReadPosRankSum,Description="x">
-##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=Integer,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=HM3,Number=0,Type=Flag,Description="HM3 Membership">
-##INFO=<ID=GS,Number=0,Type=Flag,Description="In gold-standard indel set">
-##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=NDA,Number=1,Type=Integer,Description="Number of alternate alleles discovered (but not necessarily genotyped) at this site">
-##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">
-##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##INFO=<ID=set,Number=1,Type=String,Description="Source VCF for the merged record in CombineVariants">
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-##contig=<ID=GL000191.1,length=106433,assembly=b37>
-##contig=<ID=GL000192.1,length=547496,assembly=b37>
-##contig=<ID=GL000193.1,length=189789,assembly=b37>
-##contig=<ID=GL000194.1,length=191469,assembly=b37>
-##contig=<ID=GL000195.1,length=182896,assembly=b37>
-##contig=<ID=GL000196.1,length=38914,assembly=b37>
-##contig=<ID=GL000197.1,length=37175,assembly=b37>
-##contig=<ID=GL000198.1,length=90085,assembly=b37>
-##contig=<ID=GL000199.1,length=169874,assembly=b37>
-##contig=<ID=GL000200.1,length=187035,assembly=b37>
-##contig=<ID=GL000201.1,length=36148,assembly=b37>
-##contig=<ID=GL000202.1,length=40103,assembly=b37>
-##contig=<ID=GL000203.1,length=37498,assembly=b37>
-##contig=<ID=GL000204.1,length=81310,assembly=b37>
-##contig=<ID=GL000205.1,length=174588,assembly=b37>
-##contig=<ID=GL000206.1,length=41001,assembly=b37>
-##contig=<ID=GL000207.1,length=4262,assembly=b37>
-##contig=<ID=GL000208.1,length=92689,assembly=b37>
-##contig=<ID=GL000209.1,length=159169,assembly=b37>
-##contig=<ID=GL000210.1,length=27682,assembly=b37>
-##contig=<ID=GL000211.1,length=166566,assembly=b37>
-##contig=<ID=GL000212.1,length=186858,assembly=b37>
-##contig=<ID=GL000213.1,length=164239,assembly=b37>
-##contig=<ID=GL000214.1,length=137718,assembly=b37>
-##contig=<ID=GL000215.1,length=172545,assembly=b37>
-##contig=<ID=GL000216.1,length=172294,assembly=b37>
-##contig=<ID=GL000217.1,length=172149,assembly=b37>
-##contig=<ID=GL000218.1,length=161147,assembly=b37>
-##contig=<ID=GL000219.1,length=179198,assembly=b37>
-##contig=<ID=GL000220.1,length=161802,assembly=b37>
-##contig=<ID=GL000221.1,length=155397,assembly=b37>
-##contig=<ID=GL000222.1,length=186861,assembly=b37>
-##contig=<ID=GL000223.1,length=180455,assembly=b37>
-##contig=<ID=GL000224.1,length=179693,assembly=b37>
-##contig=<ID=GL000225.1,length=211173,assembly=b37>
-##contig=<ID=GL000226.1,length=15008,assembly=b37>
-##contig=<ID=GL000227.1,length=128374,assembly=b37>
-##contig=<ID=GL000228.1,length=129120,assembly=b37>
-##contig=<ID=GL000229.1,length=19913,assembly=b37>
-##contig=<ID=GL000230.1,length=43691,assembly=b37>
-##contig=<ID=GL000231.1,length=27386,assembly=b37>
-##contig=<ID=GL000232.1,length=40652,assembly=b37>
-##contig=<ID=GL000233.1,length=45941,assembly=b37>
-##contig=<ID=GL000234.1,length=40531,assembly=b37>
-##contig=<ID=GL000235.1,length=34474,assembly=b37>
-##contig=<ID=GL000236.1,length=41934,assembly=b37>
-##contig=<ID=GL000237.1,length=45867,assembly=b37>
-##contig=<ID=GL000238.1,length=39939,assembly=b37>
-##contig=<ID=GL000239.1,length=33824,assembly=b37>
-##contig=<ID=GL000240.1,length=41933,assembly=b37>
-##contig=<ID=GL000241.1,length=42152,assembly=b37>
-##contig=<ID=GL000242.1,length=43523,assembly=b37>
-##contig=<ID=GL000243.1,length=43341,assembly=b37>
-##contig=<ID=GL000244.1,length=39929,assembly=b37>
-##contig=<ID=GL000245.1,length=36651,assembly=b37>
-##contig=<ID=GL000246.1,length=38154,assembly=b37>
-##contig=<ID=GL000247.1,length=36422,assembly=b37>
-##contig=<ID=GL000248.1,length=39786,assembly=b37>
-##contig=<ID=GL000249.1,length=38502,assembly=b37>
-##contig=<ID=MT,length=16569,assembly=b37>
-##contig=<ID=X,length=155270560,assembly=b37>
-##contig=<ID=Y,length=59373566,assembly=b37>
-##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00096 HG00100 HG00101 HG00102 HG00103 HG00107 HG00108 HG00109 HG00110 HG00111 HG00113 HG00114 HG00116 HG00117 HG00119 HG00120 HG00121 HG00123 HG00124 HG00125 HG00127 HG00131 HG00133 HG00136 HG00137 HG00138 HG00139 HG00140 HG00145 HG00146 HG00154 HG00155 HG00157 HG00158 HG00159 HG00160 HG00171 HG00174 HG00176 HG00178 HG00181 HG00182 HG00183 HG00185 HG00186 HG00187 HG00188 HG00189 HG00190 HG00232 HG00233 HG00236 HG00237 HG00238 HG00239 HG0024 [...]
-1 30548 . T G 134.71 TruthSensitivityTranche99.50to99.90 AC=14;AF=0.583;AN=24;BaseQRankSum=-2.141;DP=128;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1517;InbreedingCoeff=0.3252;MQ=3.02;MQ0=1125;MQRankSum=0.529;NDA=2;QD=2.07;ReadPosRankSum=0.244;SB=33.48;VQSLOD=-7.1701;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. . [...]
-1 69270 . A G 12343.52 TruthSensitivityTranche99.30to99.50 AC=311;AF=0.7199;AN=432;BaseQRankSum=-14.987;DP=9872;DS;Dels=0.00;FS=9.231;HRun=0;HaplotypeScore=0.0867;InbreedingCoeff=0.2338;MQ=6.11;MQ0=13219;MQRankSum=15.096;NDA=1;QD=1.38;ReadPosRankSum=3.099;SB=-194.48;VQSLOD=-5.1809;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. 1/1:0,1:6:17.92:136,18,0 ./. ./. ./. ./. ./. ./. 1/1:43,17:60:2.99:24,3,0 ./. ./. ./. ./. ./. ./. 1/1:46,14:60:3:29,3,0 ./ [...]
-1 69428 rs140739101 T G 1587.10 TruthSensitivityTranche99.30to99.50 AC=30;AF=0.0333;AN=902;BaseQRankSum=3.267;DB;DP=50533;DS;Dels=0.00;FS=98.109;HRun=0;HaplotypeScore=0.1382;InbreedingCoeff=0.1235;MQ=17.74;MQ0=2178;MQRankSum=0.762;NDA=2;QD=1.07;ReadPosRankSum=1.621;SB=-348.91;VQSLOD=-4.2588;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:92:99:0,276,2454 ./. 0/0:1,0:100:99:0,300,2568 0/0:1,0:127:99:0,379,2880 ./. ./. ./. ./. 0/0:1,0:90:99:0,269,2131 ./ [...]
-1 69453 rs142004627 G A 917.27 TruthSensitivityTranche99.50to99.90 AC=11;AF=0.0127;AN=868;BaseQRankSum=4.298;DB;DP=51456;DS;Dels=0.00;FS=8.058;HRun=2;HaplotypeScore=0.2298;InbreedingCoeff=0.2958;MQ=21.21;MQ0=143;MQRankSum=5.921;NDA=2;QD=3.03;ReadPosRankSum=2.490;SB=-5.66;VQSLOD=-5.8496;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:117:99:0,351,3121 ./. 0/0:1,0:110:99:0,330,2825 0/0:1,0:127:99:0,379,2880 ./. ./. ./. ./. 0/0:1,0:111:99:0,332,2629 ./. . [...]
-1 69486 . C T 411.09 PASS AC=1;AF=0.0011;AN=870;BaseQRankSum=3.271;DP=47045;DS;Dels=0.00;FS=18.777;HRun=0;HaplotypeScore=0.1619;InbreedingCoeff=-0.0068;MQ=18.73;MQ0=630;MQRankSum=3.678;NDA=2;QD=6.85;ReadPosRankSum=-0.995;SB=-160.62;VQSLOD=4.1085;culprit=MQ;set=variant GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:72:99:0,216,1921 ./. 0/0:1,0:79:99:0,237,2029 0/0:1,0:125:99:0,373,2834 ./. ./. ./. ./. 0/0:1,0:69:99:0,206,1634 ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:51:99:0,153,1208 ./ [...]
-1 69496 rs150690004 G A 770.17 TruthSensitivityTranche99.30to99.50 AC=4;AF=0.0046;AN=866;BaseQRankSum=7.303;DB;DP=45079;DS;Dels=0.00;FS=43.681;HRun=0;HaplotypeScore=0.3031;InbreedingCoeff=0.0441;MQ=18.29;MQ0=527;MQRankSum=6.120;NDA=2;QD=3.63;ReadPosRankSum=-1.444;SB=-136.96;VQSLOD=-3.7330;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:75:99:0,225,2001 ./. 0/0:1,0:68:99:0,204,1746 0/0:1,0:122:99:0,364,2766 ./. ./. ./. ./. 0/0:1,0:72:99:0,215,1705 ./. . [...]
-1 69511 rs75062661 A G 625265.62 TruthSensitivityTranche99.30to99.50 AC=856;AF=0.8753;AN=978;BaseQRankSum=13.271;DB;DP=32369;DS;Dels=0.00;FS=45.494;HRun=0;HaplotypeScore=1.1421;InbreedingCoeff=0.5380;MQ=26.49;MQ0=1627;MQRankSum=-18.719;NDA=1;QD=19.82;ReadPosRankSum=-20.606;SB=-54909.34;VQSLOD=-3.2503;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. 1/1:0,40:40:65.91:557,66,0 ./. ./. ./. ./. ./. ./. 1/1:0,1:43:99:1147,129,0 ./. 1/1:0,1:45:99:1156,135,0 1/1:0,1:106:99:2404,317,0 ./. ./. 1/1 [...]
-1 69534 rs190717287 T C 1060.12 PASS AC=1;AF=0.0012;AN=854;BaseQRankSum=-0.841;DB;DP=43078;DS;Dels=0.00;FS=13.161;HRun=0;HaplotypeScore=0.3320;InbreedingCoeff=0.0940;MQ=27.32;MQ0=107;MQRankSum=3.045;NDA=1;QD=9.14;ReadPosRankSum=-2.118;SB=-601.36;VQSLOD=1.3414;culprit=MQ;set=variant GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:1:3:0,3,25 0/0:1,0:87:99:0,261,2321 ./. 0/0:1,0:84:99:0,252,2157 0/0:1,0:127:99:0,379,2880 ./. ./. 0/0:1,0:92:99:0,275,2086 ./. 0/0:1,0:69:99:0,206,1634 ./. . [...]
-1 69541 . A G 578.88 PASS AC=1;AF=0.0012;AN=842;BaseQRankSum=1.875;DP=44707;DS;Dels=0.00;FS=9.702;HRun=1;HaplotypeScore=0.5109;InbreedingCoeff=-0.0048;MQ=28.52;MQ0=97;MQRankSum=4.954;NDA=1;QD=9.65;ReadPosRankSum=-1.290;SB=-236.37;VQSLOD=1.9979;culprit=MQ;set=variant GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:1:3:0,3,25 0/0:1,0:104:99:0,312,2774 ./. 0/0:1,0:93:99:0,279,2388 0/0:1,0:127:99:0,379,2880 ./. ./. 0/0:1,0:100:99:0,299,2267 ./. 0/0:1,0:74:99:0,221,1752 ./. ./. ./. ./. 0/0 [...]
-1 69552 rs55874132 G C 263.21 TruthSensitivityTranche99.50to99.90 AC=6;AF=0.0071;AN=850;BaseQRankSum=8.467;DB;DP=46741;DS;Dels=0.00;FS=10.412;HRun=1;HaplotypeScore=0.4375;InbreedingCoeff=0.2845;MQ=29.45;MQ0=385;MQRankSum=-5.514;NDA=3;QD=0.76;ReadPosRankSum=2.727;SB=-97.77;VQSLOD=-6.2296;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:126:99:0,378,3361 ./. 0/0:1,0:108:99:0,324,2774 0/0:1,0:127:99:0,379,2880 ./. ./. 0/0:1,0:121:99:0,361,2744 ./. 0/0:1,0: [...]
-1 69590 rs141776804 T A 1446.08 PASS AC=2;AF=0.0025;AN=812;BaseQRankSum=7.910;DB;DP=46586;DS;Dels=0.00;FS=21.176;HRun=0;HaplotypeScore=0.1456;InbreedingCoeff=-0.0051;MQ=23.73;MQ0=398;MQRankSum=8.485;NDA=2;QD=12.05;ReadPosRankSum=-0.293;SB=-322.53;VQSLOD=4.4644;culprit=MQ;set=variant GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:127:99:0,381,3388 ./. 0/0:1,0:113:99:0,339,2902 0/0:1,0:127:99:0,379,2880 ./. ./. 0/0:1,0:115:99:0,343,2608 ./. 0/0:1,0:102:99:0,305,2416 ./. ./. ./. ./. [...]
-1 69610 . C T 5334.77 TruthSensitivityTranche98.50to98.80 AC=8;AF=0.0100;AN=798;BaseQRankSum=7.126;DP=42498;DS;Dels=0.00;FS=113.646;HRun=2;HaplotypeScore=0.2518;InbreedingCoeff=0.1087;MQ=18.02;MQ0=795;MQRankSum=9.147;NDA=2;QD=10.95;ReadPosRankSum=0.353;SB=-1272.01;VQSLOD=0.5990;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:126:99:0,378,3361 ./. 0/0:1,0:71:99:0,213,1823 0/0:1,0:127:99:0,379,2880 ./. ./. 0/0:1,0:60:99:0,179,1360 ./. 0/0:1,0:79:99:0,236 [...]
-1 69635 . G C 436.15 TruthSensitivityTranche99.00to99.30 AC=2;AF=0.0025;AN=786;BaseQRankSum=4.897;DP=29728;DS;Dels=0.00;FS=33.653;HRun=0;HaplotypeScore=0.1175;InbreedingCoeff=-0.0021;MQ=14.85;MQ0=1329;MQRankSum=4.000;NDA=2;QD=3.63;ReadPosRankSum=-1.651;SB=-67.21;VQSLOD=-1.5278;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. 0/0:1,0:78:99:0,234,2081 ./. 0/0:1,0:46:99:0,138,1181 0/0:1,0:84:99:0,251,1905 ./. ./. 0/0:1,0:27:80.65:0,81,612 ./. 0/0:1,0:44:99:0,132,1 [...]
-1 69761 . A T 1569.63 TruthSensitivityTranche99.50to99.90 AC=27;AF=0.0456;AN=592;BaseQRankSum=7.371;DP=12118;DS;Dels=0.00;FS=3.078;HRun=1;HaplotypeScore=0.1168;InbreedingCoeff=0.2584;MQ=7.44;MQ0=9258;MQRankSum=1.639;NDA=1;QD=1.32;ReadPosRankSum=-0.593;SB=-284.93;VQSLOD=-6.9729;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. 0/0:60,0:60:3.01:0,3,33 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. 0/0:59,0:59:3.01:0,3,35 ./. ./. ./. ./. ./. ./. ./. ./ [...]
-1 69768 . G A 35.11 TruthSensitivityTranche99.50to99.90 AC=1;AF=0.0018;AN=542;BaseQRankSum=-0.998;DP=10681;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1003;InbreedingCoeff=-0.0401;MQ=7.20;MQ0=8425;MQRankSum=1.077;NDA=2;QD=0.59;ReadPosRankSum=0.705;SB=6.12;VQSLOD=-5.9391;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. 0/0:56,0:58:3.01:0,3,33 ./. 0/0:60,0:60:5.98:0,6,47 ./. ./. ./. ./. ./. ./. ./. 0/0:57,0:57:2.99:0,3,24 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. [...]
-1 69897 . T C 7903.18 TruthSensitivityTranche99.50to99.90 AC=286;AF=0.7814;AN=366;BaseQRankSum=-9.712;DP=10240;DS;Dels=0.00;FS=25.753;HRun=1;HaplotypeScore=0.0844;InbreedingCoeff=0.2102;MQ=4.12;MQ0=18120;MQRankSum=0.310;NDA=2;QD=0.92;ReadPosRankSum=-1.611;SB=-1453.42;VQSLOD=-6.8807;culprit=MQ;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. 1/1:47,13:60:6.01:61,6,0 ./. ./. ./. ./. 1/1:47,11:60:6.02:67,6,0 ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. 0/1:50,10:60:17.70:18,0 [...]
-1 69968 . A G 791.92 TruthSensitivityTranche99.30to99.50 AC=1;AF=0.017;AN=60;BaseQRankSum=-11.568;DP=1640;DS;Dels=0.00;FS=34.482;HRun=1;HaplotypeScore=1.1879;InbreedingCoeff=0.0932;MQ=5.09;MQ0=5066;MQRankSum=6.823;NDA=1;QD=2.10;ReadPosRankSum=-2.491;SB=9.08;VQSLOD=-5.0926;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. ./. [...]
-1 861275 . C T 712.37 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-6.156;DP=66811;DS;Dels=0.00;FS=1.596;HRun=0;HaplotypeScore=0.0247;InbreedingCoeff=-0.0020;MQ=99.25;MQ0=0;MQRankSum=-0.645;NDA=2;QD=11.87;ReadPosRankSum=0.200;SB=-29.28;VQSLOD=9.3500;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:16:48.16:0,48,617 0/0:1,0:47:99:0,141,1738 0/0:1,0:24:72.24:0,72,976 0/0:1,0:23:69.23:0,69,904 0/0:1,0:26:78.25:0,78,1022 0/0:1,0:15:45.15:0,45,579 0/0:1,0:54:99:0,163,2123 0/0:1,0:39:99:0,117,1504 0 [...]
-1 861292 rs191719684 C G 2773.34 PASS AC=3;AF=0.00127;AN=2364;BaseQRankSum=9.193;DB;DP=77017;DS;Dels=0.00;FS=29.431;HRun=0;HaplotypeScore=0.0441;InbreedingCoeff=-0.0075;MQ=99.59;MQ0=0;MQRankSum=-2.334;NDA=1;QD=17.78;ReadPosRankSum=-7.928;SB=-762.60;VQSLOD=7.8330;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:15:45.15:0,45,626 0/0:1,0:52:99:0,156,1965 0/0:1,0:30:90.29:0,90,1179 0/0:1,0:22:66.21:0,66,832 0/0:1,0:23:69.23:0,69,948 0/0:1,0:17:51.17:0,51,668 0/0:1,0:61:99:0,184,2353 0/0:1,0:47 [...]
-1 861315 . G A 804.13 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-3.203;DP=93850;DS;Dels=0.00;FS=2.143;HRun=2;HaplotypeScore=0.0258;InbreedingCoeff=0.0526;MQ=106.02;MQ0=0;MQRankSum=-0.749;NDA=2;QD=11.83;ReadPosRankSum=-5.734;SB=-124.66;VQSLOD=8.0060;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:23:69.23:0,69,948 0/0:1,0:71:99:0,214,2739 0/0:1,0:34:99:0,102,1402 0/0:1,0:27:81.27:0,81,1080 0/0:1,0:32:96.32:0,96,1319 0/0:1,0:22:66.22:0,66,907 0/0:1,0:69:99:0,208,2713 0/0:1,0:79:99:0,238,3160 [...]
-1 865488 . A G 73.43 PASS AC=1;AF=0.00044;AN=2280;BaseQRankSum=-4.715;DP=7112;Dels=0.00;FS=10.595;HRun=0;HaplotypeScore=0.1452;InbreedingCoeff=-0.0539;MQ=56.39;MQ0=9;MQRankSum=2.252;NDA=3;QD=4.08;ReadPosRankSum=2.565;SB=167.99;VQSLOD=1.5041;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:3:9.03:0,9,113 0/0:1,0:5:15.05:0,15,176 0/0:1,0:1:3.01:0,3,32 0/0:1,0:1:3.01:0,3,43 ./. 0/0:1,0:6:18.06:0,18,236 0/0:1,0:11:33.09:0,33,368 0/0:1,0:5:15.05:0,15,176 0/0:1,0:10:30.09:0,30,344 0/0:15,0:16:45. [...]
-1 865545 . G A 1164.45 PASS AC=8;AF=0.00345;AN=2320;BaseQRankSum=4.406;DP=10672;Dels=0.01;FS=1.961;HRun=0;HaplotypeScore=0.3451;InbreedingCoeff=0.0083;MQ=60.80;MQ0=0;MQRankSum=3.214;NDA=3;QD=10.21;ReadPosRankSum=1.571;SB=-334.48;VQSLOD=5.0597;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,44 0/0:1,0:7:21.06:0,21,234 0/0:1,0:2:6.02:0,6,65 ./. 0/0:1,0:2:6.02:0,6,74 0/0:1,0:5:15.05:0,15,181 0/0:1,0:9:27.07:0,27,284 0/0:10,0:10:30.07:0,30,316 0/0:20,0:20:54.10:0,54,548 0/0:1,0:22:6 [...]
-1 865555 . CAA C 306.78 PASS AC=1;AF=0.00044;AN=2284;BaseQRankSum=2.577;DP=11180;FS=1.510;HRun=2;HaplotypeScore=2.5729;InbreedingCoeff=-0.0068;MQ=59.09;MQ0=0;MQRankSum=-0.815;NDA=1;QD=12.78;ReadPosRankSum=2.203;SB=-142.21;set=variant2 GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,35 0/0:1,0:1:30.10:0,30,554 0/0:1,0:1:12.04:0,12,222 ./. 0/0:1,0:1:6.02:0,6,111 0/0:1,0:1:9.03:0,9,105 0/0:1,0:1:33.11:0,33,610 0/0:13,0:13:39.13:0,39,714 0/0:16,0:17:48.09:0,48,477 0/0:1,0:1:72.21:0,72,841 0/0:1,0:1:36.12: [...]
-1 865584 rs148711625 G A 1556.12 PASS AC=23;AF=0.00981;AN=2344;BaseQRankSum=6.903;DB;DP=13266;Dels=0.00;FS=7.807;HRun=0;HaplotypeScore=0.2911;InbreedingCoeff=0.0420;MQ=85.22;MQ0=0;MQRankSum=-2.022;NDA=2;QD=7.20;ReadPosRankSum=0.021;SB=-697.54;VQSLOD=6.6472;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:4:12.04:0,12,151 0/0:1,0:11:33.10:0,33,378 0/0:1,0:4:12.03:0,12,137 0/0:1,0:1:3.01:0,3,34 0/0:1,0:3:9.01:0,9,86 0/0:1,0:2:6.02:0,6,81 0/0:15,0:15:45.09:0,45,465 0/0:1,0:20:60.11:0,60,592 0/ [...]
-1 865590 . TGAA T 420.06 PASS AC=8;AF=0.00371;AN=2154;BaseQRankSum=4.148;DP=14777;FS=4.898;HRun=0;HaplotypeScore=1.3770;InbreedingCoeff=0.1502;MQ=59.07;MQ0=0;MQRankSum=-1.698;NDA=1;QD=4.88;ReadPosRankSum=1.330;SB=-207.49;set=variant2 GT:AD:DP:GQ:PL 0/0:1,0:1:12.04:0,12,234 0/0:13,0:14:38.96:0,39,714 0/0:1,0:1:18.06:0,18,351 0/0:1,0:1:6.02:0,6,117 0/0:1,0:1:6.02:0,6,117 0/0:1,0:1:12.04:0,12,234 0/0:1,0:1:48.16:0,48,935 0/0:1,0:1:66.23:0,66,1286 0/0:1,0:1:51.17:0,51,994 0/0:1,0:1:93.32:0,9 [...]
-1 865628 rs41285790 G A 712.88 PASS AC=5;AF=0.00212;AN=2364;BaseQRankSum=-6.081;DB;DP=19203;Dels=0.00;FS=8.074;HRun=0;HaplotypeScore=0.1985;InbreedingCoeff=-0.0157;MQ=80.97;MQ0=0;MQRankSum=0.054;NDA=3;QD=9.77;ReadPosRankSum=1.468;SB=-453.03;VQSLOD=7.7994;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:5:15.05:0,15,211 0/0:1,0:12:36.12:0,36,472 0/0:1,0:10:30.10:0,30,418 0/0:1,0:4:12.04:0,12,167 0/0:1,0:5:15.05:0,15,211 0/0:1,0:6:18.06:0,18,240 0/0:1,0:19:57.19:0,57,747 0/0:1,0: [...]
-1 865662 rs140751899 G A 266.89 PASS AC=1;AF=0.00042;AN=2360;BaseQRankSum=1.888;DB;DP=18955;Dels=0.00;FS=0.901;HRun=0;HaplotypeScore=0.3354;InbreedingCoeff=-0.0112;MQ=87.09;MQ0=0;MQRankSum=-0.394;NDA=2;QD=15.70;ReadPosRankSum=1.293;SB=-178.31;VQSLOD=5.8247;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:2:6.02:0,6,79 0/0:10,0:10:27.08:0,27,329 0/0:1,0:9:27.08:0,27,325 0/0:1,0:4:12.04:0,12,167 0/0:1,0:5:15.05:0,15,185 0/0:1,0:10:30.10:0,30,393 0/0:1,0:17:51.13:0,51,552 0/0:21,0:21:54.13:0,5 [...]
-1 865694 rs9988179 C T 37822.02 PASS AC=163;AF=0.06907;AN=2360;BaseQRankSum=-24.328;DB;DP=17686;Dels=0.00;FS=7.432;HRun=0;HaplotypeScore=0.3198;InbreedingCoeff=0.1408;MQ=96.52;MQ0=0;MQRankSum=-19.190;NDA=2;QD=14.08;ReadPosRankSum=12.504;SB=-16300.11;VQSLOD=4.8864;culprit=MQRankSum;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,43 0/0:10,0:10:30.09:0,30,383 0/0:1,0:9:27.09:0,27,354 0/0:1,0:2:6.02:0,6,82 0/0:1,0:5:15.05:0,15,200 0/0:1,0:10:30.10:0,30,400 0/0:15,0:15:45.14:0,45,581 0/0:21,0: [...]
-1 865700 rs116730894 C T 481.79 PASS AC=6;AF=0.00254;AN=2362;BaseQRankSum=4.072;DB;DP=18291;Dels=0.00;FS=9.754;HRun=0;HaplotypeScore=0.3041;InbreedingCoeff=-0.0084;MQ=98.45;MQ0=0;MQRankSum=-1.215;NDA=2;QD=5.35;ReadPosRankSum=4.084;SB=-203.52;VQSLOD=5.3964;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,42 0/0:1,0:11:33.09:0,33,357 0/0:1,0:9:27.09:0,27,340 0/0:1,0:2:6.01:0,6,63 0/0:1,0:6:18.05:0,18,195 0/0:1,0:9:27.08:0,27,325 0/0:1,0:16:48.10:0,48,489 0/0:19,1:20:20.99:0,21,517 [...]
-1 865703 . A G 163.63 PASS AC=1;AF=0.00042;AN=2362;BaseQRankSum=1.433;DP=18039;Dels=0.00;FS=7.294;HRun=0;HaplotypeScore=0.2834;InbreedingCoeff=-0.0062;MQ=101.88;MQ0=0;MQRankSum=-2.745;NDA=2;QD=7.44;ReadPosRankSum=1.383;SB=-11.29;VQSLOD=6.5947;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,44 0/0:1,0:10:30.09:0,30,361 0/0:1,0:7:21.07:0,21,270 0/0:1,0:3:9.03:0,9,118 0/0:1,0:5:15.05:0,15,189 0/0:1,0:8:24.08:0,24,315 0/0:1,0:16:48.14:0,48,550 0/0:20,0:20:57.16:0,57,659 0/0:1,0:21:6 [...]
-1 865705 rs146331776 C T 702.79 PASS AC=3;AF=0.00127;AN=2362;BaseQRankSum=-1.590;DB;DP=18114;Dels=0.00;FS=1.450;HRun=1;HaplotypeScore=0.1918;InbreedingCoeff=-0.0069;MQ=114.11;MQ0=0;MQRankSum=-2.223;NDA=1;QD=12.12;ReadPosRankSum=2.604;SB=-274.99;VQSLOD=10.4126;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,44 0/0:1,0:9:27.09:0,27,354 0/0:1,0:8:24.07:0,24,289 0/0:1,0:3:9.03:0,9,130 0/0:1,0:5:15.05:0,15,193 0/0:1,0:7:21.07:0,21,280 0/0:1,0:16:48.16:0,48,640 0/0:20,0:20:60.20:0,60, [...]
-1 865734 . G A 169.67 PASS AC=3;AF=0.00127;AN=2358;BaseQRankSum=0.374;DP=14856;Dels=0.00;FS=7.082;HRun=0;HaplotypeScore=0.4461;InbreedingCoeff=-0.0084;MQ=111.38;MQ0=0;MQRankSum=-3.095;NDA=2;QD=4.35;ReadPosRankSum=0.739;SB=-81.83;VQSLOD=2.8904;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:3:9.03:0,9,116 0/0:1,0:6:18.06:0,18,222 0/0:1,0:6:18.06:0,18,236 0/0:1,0:2:6.02:0,6,76 0/0:4,0:4:12.04:0,12,161 0/0:1,0:8:24.08:0,24,315 0/0:1,0:12:36.11:0,36,423 0/0:1,0:17:51.15:0,51,599 0/0:1,0:14:42. [...]
-1 865738 rs139570490 A G 759.55 PASS AC=7;AF=0.00297;AN=2358;BaseQRankSum=-6.135;DB;DP=14584;Dels=0.00;FS=1.427;HRun=2;HaplotypeScore=0.5151;InbreedingCoeff=-0.0114;MQ=107.81;MQ0=0;MQRankSum=-1.690;NDA=2;QD=5.17;ReadPosRankSum=1.621;SB=-116.80;VQSLOD=4.7433;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:2:6.02:0,6,86 0/0:1,0:5:15.05:0,15,197 0/0:1,0:8:24.08:0,24,309 0/0:1,0:2:6.02:0,6,80 0/0:4,0:4:12.03:0,12,159 0/0:1,0:8:24.08:0,24,330 0/0:1,0:13:39.12:0,39,470 0/0:1,0:16:48.15:0,48,605 [...]
-1 866371 . G A 754.09 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-4.668;DP=56995;DS;Dels=0.00;FS=1.962;HRun=0;HaplotypeScore=0.0603;InbreedingCoeff=0.0004;MQ=107.06;MQ0=0;MQRankSum=0.276;NDA=1;QD=12.57;ReadPosRankSum=1.709;SB=-179.27;VQSLOD=9.8408;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:16:48.16:0,48,640 0/0:1,0:58:99:0,175,2145 0/0:1,0:34:99:0,102,1337 0/0:1,0:22:66.22:0,66,894 0/0:1,0:22:66.22:0,66,907 0/0:1,0:19:57.18:0,57,733 0/0:1,0:35:99:0,105,1350 0/0:1,0:35:99:0,105,1350 0/0 [...]
-1 866422 rs139210662 C T 4684.05 PASS AC=9;AF=0.00381;AN=2364;BaseQRankSum=-2.726;DB;DP=71761;DS;Dels=0.00;FS=14.683;HRun=1;HaplotypeScore=0.0292;InbreedingCoeff=-0.0036;MQ=110.95;MQ0=0;MQRankSum=0.583;NDA=1;QD=11.05;ReadPosRankSum=-12.658;SB=-1793.78;VQSLOD=9.8690;culprit=HaplotypeScore;set=variant GT:AD:DP:GQ:PL 0/0:1,0:23:69.23:0,69,960 0/0:1,0:72:99:0,217,2662 0/0:1,0:41:99:0,123,1666 0/0:1,0:30:90.29:0,90,1179 0/0:1,0:29:87.29:0,87,1211 0/0:1,0:32:96.32:0,96,1301 0/0:1,0:42:99:0,126 [...]
-1 866511 . C T 17440.60 TruthSensitivityTranche99.50to99.90 AC=345;AF=0.14594;AN=2364;BaseQRankSum=-48.478;DP=36139;DS;Dels=0.00;FS=176.546;HRun=1;HaplotypeScore=8.8600;InbreedingCoeff=-0.1516;MQ=61.44;MQ0=0;MQRankSum=45.670;NDA=1;QD=1.68;ReadPosRankSum=-3.663;SB=-4951.45;VQSLOD=-8.9666;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/1:8,1:9:2.54:3,0,297 0/0:13,1:14:5.68:0,6,398 0/1:16,3:19:24.70:25,0,488 0/0:14,0:14:42.12:0,42,537 0/1:8,2:10:12.74:13,0,265 0/1:7,1:8:12.90:13,0,258 0/1:31, [...]
-1 866517 rs181051588 C G 1192.57 TruthSensitivityTranche99.50to99.90 AC=2;AF=0.00085;AN=2364;BaseQRankSum=0.101;DB;DP=34481;DS;Dels=0.00;FS=14.537;HRun=0;HaplotypeScore=7.9209;InbreedingCoeff=-0.0076;MQ=61.58;MQ0=0;MQRankSum=3.405;NDA=3;QD=17.28;ReadPosRankSum=1.770;SB=-56.16;VQSLOD=-7.8406;culprit=HaplotypeScore;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:7,0:7:21.07:0,21,272 0/0:16,0:16:45.11:0,45,510 0/0:16,0:16:45.14:0,45,594 0/0:11,0:11:33.08:0,33,407 0/0:7,0:7:18.04:0,18,232 0/0:8,0:8:18. [...]
-1 871129 . C T 2363.53 PASS AC=3;AF=0.00127;AN=2364;BaseQRankSum=1.324;DP=88230;DS;Dels=0.00;FS=133.740;HRun=4;HaplotypeScore=0.1585;InbreedingCoeff=-0.0070;MQ=121.02;MQ0=0;MQRankSum=-4.492;NDA=2;QD=10.55;ReadPosRankSum=-5.079;SB=-1103.64;VQSLOD=4.1810;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:29:87.29:0,87,1196 0/0:1,0:101:99:0,304,3735 0/0:1,0:65:99:0,196,2404 0/0:1,0:48:99:0,144,1852 0/0:1,0:57:99:0,172,2199 0/0:1,0:42:99:0,126,1620 0/0:1,0:42:99:0,126,1587 0/0:1,0:33:99:0,99,1192 [...]
-1 871171 . A G 688.12 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-4.336;DP=86111;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.0614;InbreedingCoeff=-0.0005;MQ=140.67;MQ0=0;MQRankSum=-4.594;NDA=1;QD=11.86;ReadPosRankSum=-2.707;SB=-280.00;VQSLOD=10.0930;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:34:99:0,102,1312 0/0:1,0:84:99:0,253,2886 0/0:1,0:68:99:0,205,2457 0/0:1,0:34:99:0,102,1285 0/0:1,0:56:99:0,169,2160 0/0:1,0:44:99:0,132,1590 0/0:1,0:53:99:0,159,1722 0/0:1,0:42:99:0,126,1443 0/0 [...]
-1 871173 rs141982349 C T 380.08 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=1.317;DB;DP=94636;DS;Dels=0.00;FS=14.305;HRun=0;HaplotypeScore=0.0522;InbreedingCoeff=-0.0006;MQ=140.91;MQ0=0;MQRankSum=-3.379;NDA=1;QD=8.09;ReadPosRankSum=-0.692;SB=-152.07;VQSLOD=8.2214;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:37:99:0,111,1545 0/0:1,0:101:99:0,304,3735 0/0:1,0:76:99:0,229,2932 0/0:1,0:34:99:0,102,1382 0/0:1,0:63:99:0,190,2598 0/0:1,0:51:99:0,154,2040 0/0:1,0:60:99:0,181,2168 0/0:1,0:46:99:0, [...]
-1 871176 . C T 806.96 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-2.225;DP=94503;DS;Dels=0.00;FS=48.943;HRun=1;HaplotypeScore=0.0532;InbreedingCoeff=0.0054;MQ=138.21;MQ0=0;MQRankSum=-3.509;NDA=1;QD=13.45;ReadPosRankSum=-1.802;SB=-219.67;VQSLOD=7.9297;culprit=MQ;set=variant GT:AD:DP:GQ:PL 0/0:1,0:36:99:0,108,1503 0/0:1,0:98:99:0,295,3781 0/0:1,0:76:99:0,229,2988 0/0:1,0:35:99:0,105,1423 0/0:1,0:60:99:0,181,2474 0/0:1,0:52:99:0,157,2114 0/0:1,0:58:99:0,175,2237 0/0:1,0:46:99:0,138,1739 0/0: [...]
-1 871193 . G C 517.25 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=6.508;DP=88429;Dels=0.00;FS=19.613;HRun=2;HaplotypeScore=0.0196;InbreedingCoeff=-0.0023;MQ=115.20;MQ0=0;MQRankSum=0.185;NDA=2;QD=12.93;ReadPosRankSum=-4.480;SB=-44.96;VQSLOD=9.6679;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:31:93.30:0,93,1196 0/0:1,0:76:99:0,229,2611 0/0:1,0:59:99:0,178,2230 0/0:1,0:28:84.27:0,84,1080 0/0:1,0:50:99:0,150,1890 0/0:1,0:48:99:0,144,1814 0/0:1,0:76:99:0,229,2470 0/0:1,0:53:99:0,159,1722 0/0:1 [...]
-1 871215 rs28419423 C T,G 147999.05 PASS AC=1,167;AF=0.00042,0.07064;AN=2364;BaseQRankSum=31.541;DB;DP=81904;DS;Dels=0.00;FS=22.522;HaplotypeScore=0.2500;InbreedingCoeff=0.1555;MQ=77.03;MQ0=0;MQRankSum=-0.797;NDA=2;QD=17.13;ReadPosRankSum=-12.413;SB=-59334.05;VQSLOD=6.2098;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0,0:29:87.27:0,87,1072,87,1072,1072 0/0:1,0,0:68:99:0,205,2274,205,2274,2274 0/0:1,0,0:54:99:0,162,1904,162,1904,1904 0/0:1,0,0:25:75.23:0,75,903,75,903,903 0/0:1,0,0:43:99:0 [...]
-1 871219 . C T 658.03 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-8.262;DP=79865;DS;Dels=0.00;FS=5.928;HRun=0;HaplotypeScore=0.2739;InbreedingCoeff=0.0029;MQ=79.21;MQ0=0;MQRankSum=0.013;NDA=2;QD=12.19;ReadPosRankSum=3.190;SB=-201.44;VQSLOD=6.5830;culprit=ReadPosRankSum;set=variant GT:AD:DP:GQ:PL 0/0:1,0:25:75.25:0,75,1044 0/0:1,0:62:99:0,187,2392 0/0:1,0:57:99:0,172,2317 0/0:1,0:31:93.31:0,93,1240 0/0:1,0:45:99:0,135,1829 0/0:1,0:35:99:0,105,1423 0/0:1,0:74:99:0,223,2855 0/0:1,0:50:99:0,1 [...]
-1 871229 rs149944086 G C 2312.78 PASS AC=3;AF=0.00127;AN=2364;BaseQRankSum=7.026;DB;DP=74122;DS;Dels=0.00;FS=13.320;HRun=2;HaplotypeScore=0.0998;InbreedingCoeff=0.0017;MQ=121.47;MQ0=0;MQRankSum=-1.538;NDA=1;QD=16.17;ReadPosRankSum=-5.261;SB=-80.66;VQSLOD=9.8454;culprit=ReadPosRankSum;set=variant GT:AD:DP:GQ:PL 0/0:1,0:19:57.19:0,57,817 0/0:1,0:52:99:0,156,1965 0/0:1,0:54:99:0,163,2083 0/0:1,0:27:81.26:0,81,1020 0/0:1,0:40:99:0,120,1573 0/0:1,0:37:99:0,111,1398 0/0:1,0:69:99:0,208,2493 0/ [...]
-1 871239 rs147616064 C T 1622.57 PASS AC=3;AF=0.00127;AN=2364;BaseQRankSum=-1.538;DB;DP=64080;DS;Dels=0.00;FS=8.450;HRun=2;HaplotypeScore=0.0688;InbreedingCoeff=-0.0023;MQ=123.57;MQ0=0;MQRankSum=-3.198;NDA=1;QD=12.20;ReadPosRankSum=-6.659;SB=-61.38;VQSLOD=10.3368;culprit=ReadPosRankSum;set=variant GT:AD:DP:GQ:PL 0/0:1,0:17:51.17:0,51,741 0/0:1,0:49:99:0,147,1852 0/0:1,0:44:99:0,132,1814 0/0:1,0:28:84.27:0,84,1101 0/0:1,0:41:99:0,123,1690 0/0:1,0:34:99:0,102,1402 0/0:1,0:60:99:0,181,2268 [...]
-1 871269 . A C 891.84 TruthSensitivityTranche98.90to99.00 AC=125;AF=0.05288;AN=2364;BaseQRankSum=-18.250;DP=18591;DS;Dels=0.00;FS=167.133;HRun=3;HaplotypeScore=0.5054;InbreedingCoeff=-0.0534;MQ=78.80;MQ0=1;MQRankSum=-7.666;NDA=2;QD=0.38;ReadPosRankSum=-8.894;SB=259.41;VQSLOD=-0.6803;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:4:12.03:0,12,134 0/1:12,6:19:0.08:0,0,313 0/0:1,0:20:60.15:0,60,631 0/0:1,0:12:36.09:0,36,379 0/0:1,0:14:42.11:0,42,455 0/0:1,0:20:60.16:0,60,650 0/0:1,0:14 [...]
-1 874402 . C G 370.61 PASS AC=2;AF=0.00085;AN=2360;BaseQRankSum=1.038;DP=17471;Dels=0.00;FS=7.836;HRun=0;HaplotypeScore=0.2022;InbreedingCoeff=-0.0141;MQ=90.39;MQ0=0;MQRankSum=-1.296;NDA=2;QD=13.24;ReadPosRankSum=1.474;SB=-203.51;VQSLOD=7.7578;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:3:9.03:0,9,129 0/0:1,0:5:15.05:0,15,189 0/0:1,0:5:15.05:0,15,189 0/0:1,0:3:9.03:0,9,120 0/0:1,0:4:12.04:0,12,165 0/0:1,0:4:12.04:0,12,165 0/0:24,0:24:63.20:0,63,834 0/0:1,0:26:78.25:0,78,96 [...]
-1 874455 . C T 174.37 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-1.679;DP=25006;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1837;InbreedingCoeff=0.1880;MQ=80.95;MQ0=0;MQRankSum=0.149;NDA=2;QD=7.93;ReadPosRankSum=0.492;SB=-20.23;VQSLOD=2.7845;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:4:12.04:0,12,169 0/0:1,0:12:36.11:0,36,423 0/0:1,0:6:18.06:0,18,236 0/0:1,0:3:9.03:0,9,124 0/0:1,0:4:12.04:0,12,154 0/0:1,0:9:27.07:0,27,292 0/0:1,0:27:81.20:0,81,852 0/0:1,0:27:81.18:0,81,826 0/0:1,0:26:7 [...]
-1 874456 rs149677938 G A 109.49 PASS AC=5;AF=0.00212;AN=2364;BaseQRankSum=-2.689;DB;DP=23505;Dels=0.00;FS=7.650;HRun=0;HaplotypeScore=0.1763;InbreedingCoeff=-0.0082;MQ=81.74;MQ0=0;MQRankSum=0.806;NDA=2;QD=2.81;ReadPosRankSum=-0.807;SB=-63.07;VQSLOD=3.1368;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:4:12.04:0,12,148 0/0:1,0:9:27.09:0,27,340 0/0:1,0:6:18.05:0,18,201 0/0:1,0:3:9.03:0,9,108 0/0:1,0:4:12.03:0,12,126 0/0:1,0:8:24.07:0,24,267 0/0:1,0:22:66.21:0,66,814 0/0:1,0:27:81.26:0,81,10 [...]
-1 874497 . G A 382.09 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-0.925;DP=20918;Dels=0.00;FS=1.007;HRun=2;HaplotypeScore=0.1533;InbreedingCoeff=0.0337;MQ=84.31;MQ0=0;MQRankSum=0.187;NDA=1;QD=10.61;ReadPosRankSum=0.632;SB=-103.25;VQSLOD=6.2214;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:7:21.07:0,21,265 0/0:11,0:11:30.09:0,30,374 0/0:1,0:6:18.06:0,18,236 0/0:1,0:6:18.06:0,18,217 0/0:1,0:5:15.04:0,15,167 0/0:10,0:10:30.08:0,30,366 0/0:1,0:12:36.11:0,36,434 0/0:1,0:29:87.27:0,87,1048 0/0: [...]
-1 874528 rs72902595 C T 306.67 PASS AC=3;AF=0.00128;AN=2350;BaseQRankSum=3.514;DB;DP=14636;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.1887;InbreedingCoeff=0.0081;MQ=90.63;MQ0=0;MQRankSum=2.214;NDA=3;QD=6.81;ReadPosRankSum=0.056;SB=13.52;VQSLOD=6.5618;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:9:27.09:0,27,340 0/0:1,0:7:21.06:0,21,227 0/0:1,0:4:12.04:0,12,141 0/0:1,0:7:21.07:0,21,259 0/0:1,0:5:15.05:0,15,197 0/0:1,0:8:24.08:0,24,302 0/0:1,0:12:36.10:0,36,401 0/0:1,0:15:45.13:0,45,515 0 [...]
-1 874550 . G C 934.68 PASS AC=2;AF=0.00085;AN=2346;BaseQRankSum=-5.107;DP=12802;Dels=0.00;FS=1.439;HRun=0;HaplotypeScore=0.3224;InbreedingCoeff=0.0260;MQ=92.33;MQ0=0;MQRankSum=-2.528;NDA=2;QD=13.55;ReadPosRankSum=1.865;SB=-312.37;VQSLOD=6.0299;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:8:24.08:0,24,330 0/0:1,0:6:18.06:0,18,222 0/0:1,0:6:18.06:0,18,227 0/0:1,0:9:27.09:0,27,366 0/0:1,0:4:12.04:0,12,157 0/0:1,0:9:27.09:0,27,366 0/0:1,0:9:27.09:0,27,347 0/0:1,0:12:36.11:0,36,444 0/0:1,0:1 [...]
-1 874553 . G T 129.66 PASS AC=2;AF=0.00085;AN=2354;BaseQRankSum=-4.133;DP=12404;Dels=0.00;FS=1.033;HRun=0;HaplotypeScore=0.2865;InbreedingCoeff=-0.0172;MQ=93.26;MQ0=0;MQRankSum=-2.976;NDA=2;QD=4.80;ReadPosRankSum=0.626;SB=-59.70;VQSLOD=5.4149;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:9:27.09:0,27,366 0/0:1,0:4:12.04:0,12,151 0/0:1,0:4:12.04:0,12,151 0/0:1,0:9:27.09:0,27,366 0/0:1,0:5:15.05:0,15,197 0/0:1,0:11:33.11:0,33,432 0/0:1,0:11:33.10:0,33,397 0/0:1,0:11:33.10:0,33,397 0/0:1,0: [...]
-1 874657 . G A 70.31 PASS AC=4;AF=0.00169;AN=2362;BaseQRankSum=-0.218;DP=15640;Dels=0.00;FS=14.687;HRun=0;HaplotypeScore=0.2464;InbreedingCoeff=-0.0179;MQ=67.20;MQ0=0;MQRankSum=1.359;NDA=2;QD=3.06;ReadPosRankSum=0.088;SB=-35.40;VQSLOD=1.7943;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:4:12.04:0,12,169 0/0:1,0:7:21.07:0,21,265 0/0:1,0:5:15.05:0,15,193 0/0:1,0:11:33.11:0,33,416 0/0:1,0:8:24.08:0,24,302 0/0:1,0:15:45.15:0,45,579 0/0:17,0:17:45.14:0,45,580 0/0:11,0:11:33.09:0,33,410 0/0:16 [...]
-1 874665 rs74047413 G A 5723.97 PASS AC=34;AF=0.01438;AN=2364;BaseQRankSum=-11.637;DB;DP=16240;Dels=0.00;FS=4.664;HRun=0;HaplotypeScore=0.2594;InbreedingCoeff=0.0425;MQ=63.94;MQ0=0;MQRankSum=5.366;NDA=3;QD=13.34;ReadPosRankSum=4.040;SB=-1184.77;VQSLOD=6.6070;culprit=MQRankSum;set=variant GT:AD:DP:GQ:PL 0/0:1,0:7:21.07:0,21,275 0/0:1,0:10:30.09:0,30,370 0/0:1,0:5:15.05:0,15,200 0/0:1,0:9:27.09:0,27,354 0/0:1,0:9:27.09:0,27,376 0/0:1,0:10:30.10:0,30,400 0/0:18,0:18:54.17:0,54,684 0/0:1,0:1 [...]
-1 874671 rs148995812 G T 143.17 TruthSensitivityTranche98.50to98.80 AC=6;AF=0.00254;AN=2364;BaseQRankSum=3.015;DB;DP=17331;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.2863;InbreedingCoeff=0.0404;MQ=62.93;MQ0=0;MQRankSum=2.341;NDA=2;QD=2.98;ReadPosRankSum=1.335;SB=-77.93;VQSLOD=0.5677;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:7:21.06:0,21,253 0/0:1,0:11:33.10:0,33,378 0/0:1,0:4:12.03:0,12,137 0/0:1,0:10:30.09:0,30,344 0/0:1,0:11:33.10:0,33,407 0/0:1,0:9:27.07:0,27,301 0/0:21,0:21 [...]
-1 874697 . C G 101.09 PASS AC=1;AF=0.00042;AN=2362;BaseQRankSum=-3.035;DP=22197;Dels=0.00;FS=1.736;HRun=2;HaplotypeScore=0.2393;InbreedingCoeff=-0.0038;MQ=69.05;MQ0=0;MQRankSum=1.459;NDA=3;QD=7.78;ReadPosRankSum=-0.481;SB=9.66;VQSLOD=6.3479;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:11:33.11:0,33,440 0/0:1,0:15:45.14:0,45,542 0/0:1,0:5:15.05:0,15,203 0/0:1,0:12:36.12:0,36,463 0/0:11,0:12:33.09:0,33,421 0/0:1,0:14:42.14:0,42,560 0/0:1,0:17:51.13:0,51,552 0/0:1,0:13:39.11:0,39,435 0/0:1 [...]
-1 874706 . A G 221.68 PASS AC=1;AF=0.00042;AN=2362;BaseQRankSum=-3.691;DP=23040;Dels=0.00;FS=1.035;HRun=0;HaplotypeScore=0.2004;InbreedingCoeff=-0.0039;MQ=72.95;MQ0=0;MQRankSum=2.395;NDA=3;QD=7.39;ReadPosRankSum=0.700;SB=-109.35;VQSLOD=6.6840;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:9:27.09:0,27,371 0/0:1,0:18:54.16:0,54,618 0/0:1,0:7:21.07:0,21,285 0/0:12,0:12:30.10:0,30,407 0/0:12,0:12:36.11:0,36,474 0/0:1,0:13:39.13:0,39,528 0/0:1,0:19:57.17:0,57,653 0/0:15,0:15:45.12:0,45,501 0/ [...]
-1 874714 . C T 172.67 PASS AC=2;AF=0.00085;AN=2364;BaseQRankSum=0.061;DP=25875;Dels=0.00;FS=16.702;HRun=0;HaplotypeScore=0.1731;InbreedingCoeff=0.0793;MQ=74.76;MQ0=0;MQRankSum=1.555;NDA=2;QD=4.43;ReadPosRankSum=0.171;SB=-21.70;VQSLOD=1.9941;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:9:27.09:0,27,371 0/0:1,0:18:54.17:0,54,650 0/0:1,0:8:24.08:0,24,325 0/0:12,0:12:27.09:0,27,381 0/0:1,0:11:33.11:0,33,447 0/0:1,0:19:57.19:0,57,760 0/0:1,0:25:75.20:0,75,812 0/0:17,0:17:51.13:0,51,574 0/0:1 [...]
-1 874731 . G A 145.27 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=0.058;DP=24162;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=0.1869;InbreedingCoeff=-0.0043;MQ=75.55;MQ0=0;MQRankSum=2.984;NDA=2;QD=10.38;ReadPosRankSum=-0.451;SB=-101.06;VQSLOD=7.0812;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:9:27.09:0,27,380 0/0:1,0:12:36.12:0,36,472 0/0:1,0:8:24.08:0,24,320 0/0:1,0:12:36.12:0,36,472 0/0:1,0:10:30.10:0,30,393 0/0:1,0:21:63.21:0,63,840 0/0:1,0:20:60.19:0,60,772 0/0:1,0:14:42.13:0,42,529 0/0: [...]
-1 874734 rs145967298 C T 2081.74 PASS AC=8;AF=0.00338;AN=2364;BaseQRankSum=-1.345;DB;DP=23140;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.2038;InbreedingCoeff=-0.0083;MQ=76.87;MQ0=0;MQRankSum=5.345;NDA=2;QD=9.51;ReadPosRankSum=4.296;SB=-1122.28;VQSLOD=7.9095;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:9:27.09:0,27,354 0/0:1,0:10:30.09:0,30,353 0/0:1,0:7:21.07:0,21,265 0/0:1,0:11:33.11:0,33,432 0/0:1,0:8:24.07:0,24,282 0/0:1,0:18:54.17:0,54,650 0/0:1,0:17:51.13:0,51,552 0/0:1,0:10:30.07: [...]
-1 874762 rs139437968 C T 651.40 PASS AC=8;AF=0.00338;AN=2364;BaseQRankSum=-0.183;DB;DP=25970;Dels=0.00;FS=2.823;HRun=0;HaplotypeScore=0.2432;InbreedingCoeff=-0.0132;MQ=87.02;MQ0=0;MQRankSum=1.762;NDA=3;QD=5.62;ReadPosRankSum=0.858;SB=-307.51;VQSLOD=6.1742;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:12:36.12:0,36,501 0/0:1,0:12:36.11:0,36,444 0/0:1,0:15:45.15:0,45,579 0/0:1,0:19:57.19:0,57,772 0/0:1,0:11:33.11:0,33,424 0/0:1,0:25:75.24:0,75,964 0/0:1,0:18:54.16:0,54,635 0/0:1,0:13:39.11 [...]
-1 874779 rs141207077 C T 277.66 PASS AC=2;AF=0.00085;AN=2364;BaseQRankSum=-2.449;DB;DP=26201;DS;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.5481;InbreedingCoeff=0.0139;MQ=74.98;MQ0=2;MQRankSum=-2.236;NDA=2;QD=7.93;ReadPosRankSum=0.678;SB=-141.68;VQSLOD=5.2534;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:13:39.13:0,39,528 0/0:1,0:12:36.11:0,36,444 0/0:1,0:21:63.21:0,63,840 0/0:1,0:23:69.23:0,69,920 0/0:1,0:15:45.15:0,45,618 0/0:1,0:28:84.28:0,84,1120 0/0:1,0:17:51.16:0,51,629 0/0:1,0:10:3 [...]
-1 874809 . G C 241.96 PASS AC=2;AF=0.00085;AN=2364;BaseQRankSum=-4.215;DP=29065;DS;Dels=0.00;FS=2.562;HRun=1;HaplotypeScore=0.7328;InbreedingCoeff=-0.0131;MQ=59.07;MQ0=7;MQRankSum=1.382;NDA=3;QD=8.07;ReadPosRankSum=-1.689;SB=-71.04;VQSLOD=4.3569;culprit=HaplotypeScore;set=variant GT:AD:DP:GQ:PL 0/0:1,0:18:54.18:0,54,732 0/0:1,0:16:48.16:0,48,629 0/0:1,0:29:87.29:0,87,1160 0/0:1,0:27:81.27:0,81,1113 0/0:1,0:21:63.21:0,63,866 0/0:1,0:27:81.27:0,81,1097 0/0:1,0:14:42.13:0,42,518 0/0:1,0:8:2 [...]
-1 874816 . C CT 13059.48 PASS AC=80;AF=0.03393;AN=2358;BaseQRankSum=-0.835;DP=28085;FS=73.108;GS;HRun=1;HaplotypeScore=4.8051;InbreedingCoeff=0.0220;MQ=55.70;MQ0=12;MQRankSum=3.256;NDA=1;QD=8.23;ReadPosRankSum=17.642;SB=-5804.39;set=variant2 GT:AD:DP:GQ:PL 0/0:1,0:1:57.19:0,57,845 0/0:1,0:1:57.19:0,57,845 0/0:1,0:1:87.29:0,87,1289 0/0:1,0:1:78.26:0,78,1156 0/0:1,0:1:66.22:0,66,978 0/0:1,0:1:87.29:0,87,1289 0/0:1,0:1:42.14:0,42,622 0/0:1,0:1:18.06:0,18,267 0/0:1,0:1:30.08:0,30,336 0/0:1,0 [...]
-1 874826 . A C 73.70 TruthSensitivityTranche99.00to99.30 AC=42;AF=0.01780;AN=2360;BaseQRankSum=-24.430;DP=21024;DS;Dels=0.00;FS=339.345;HRun=2;HaplotypeScore=0.9175;InbreedingCoeff=-0.0037;MQ=55.96;MQ0=9;MQRankSum=-2.079;NDA=2;QD=0.11;ReadPosRankSum=-6.577;SB=-243.62;VQSLOD=-1.9473;culprit=HaplotypeScore;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:21:63.20:0,63,810 0/0:1,0:16:48.13:0,48,535 0/0:1,0:26:78.25:0,78,983 0/0:1,0:20:60.20:0,60,800 0/0:1,0:21:63.21:0,63,854 0/0:1,0:31:93.30:0,93,1 [...]
-1 874829 . T C 182.51 TruthSensitivityTranche99.30to99.50 AC=71;AF=0.03003;AN=2364;BaseQRankSum=-21.015;DP=23962;DS;Dels=0.00;FS=486.019;HRun=4;HaplotypeScore=0.8899;InbreedingCoeff=-0.0423;MQ=55.61;MQ0=12;MQRankSum=4.332;NDA=1;QD=0.24;ReadPosRankSum=-19.215;SB=-390.43;VQSLOD=-3.1119;culprit=HaplotypeScore;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:21:63.21:0,63,826 0/0:1,0:14:42.13:0,42,518 0/0:1,0:27:81.26:0,81,1061 0/0:1,0:22:66.22:0,66,894 0/0:1,0:23:69.23:0,69,904 0/0:1,0:32:96.31:0,9 [...]
-1 874840 . G A 76.39 TruthSensitivityTranche99.30to99.50 AC=4;AF=0.00169;AN=2364;BaseQRankSum=0.194;DP=25677;DS;Dels=0.00;FS=36.775;HRun=0;HaplotypeScore=0.4616;InbreedingCoeff=0.0506;MQ=54.52;MQ0=17;MQRankSum=1.004;NDA=3;QD=1.41;ReadPosRankSum=-4.415;SB=-198.08;VQSLOD=-4.2627;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:16:48.15:0,48,605 0/0:20,0:20:54.15:0,54,656 0/0:1,0:27:81.25:0,81,998 0/0:1,0:22:66.20:0,66,795 0/0:1,0:22:66.21:0,66,832 0/0:1,0:29:87.28:0,87,1119 0/0:1,0:12:3 [...]
-1 874864 rs141512630 CT C 14962.48 PASS AC=120;AF=0.05376;AN=2232;BaseQRankSum=7.876;DB;DP=19575;DS;FS=29.806;HRun=1;HaplotypeScore=3.1953;InbreedingCoeff=-0.0547;MQ=55.23;MQ0=13;MQRankSum=3.370;NDA=1;QD=5.75;ReadPosRankSum=8.496;SB=-5595.81;set=variant2 GT:AD:DP:GQ:PL 0/0:1,0:1:42.14:0,42,636 0/0:1,0:1:27.09:0,27,409 0/0:1,0:1:54.18:0,54,818 0/0:1,0:1:48.16:0,48,727 0/0:1,0:1:48.16:0,48,727 0/0:1,0:1:75.25:0,75,1136 0/0:1,0:1:27.04:0,27,260 0/0:1,0:1:24.05:0,24,239 0/0:1,0:1:27.06:0,27, [...]
-1 874875 . A C 125.15 TruthSensitivityTranche99.00to99.30 AC=62;AF=0.02654;AN=2336;BaseQRankSum=-25.364;DP=13447;DS;Dels=0.00;FS=290.321;HRun=2;HaplotypeScore=0.9392;InbreedingCoeff=-0.0357;MQ=62.88;MQ0=9;MQRankSum=-2.359;NDA=3;QD=0.20;ReadPosRankSum=-3.012;SB=-138.79;VQSLOD=-1.6402;culprit=HaplotypeScore;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:13:39.12:0,39,470 0/0:1,0:3:9.03:0,9,111 0/0:1,0:14:42.13:0,42,494 0/0:1,0:13:39.12:0,39,470 0/0:1,0:12:36.12:0,36,472 0/0:1,0:18:54.17:0,54,694 [...]
-1 874878 . T C 2347.07 TruthSensitivityTranche99.50to99.90 AC=177;AF=0.07526;AN=2352;BaseQRankSum=-27.911;DP=15608;DS;Dels=0.00;FS=812.634;HRun=4;HaplotypeScore=0.4553;InbreedingCoeff=-0.0682;MQ=62.83;MQ0=10;MQRankSum=-1.551;NDA=3;QD=1.03;ReadPosRankSum=-24.080;SB=275.16;VQSLOD=-5.8489;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:14:42.13:0,42,506 0/0:1,0:2:6.02:0,6,76 0/0:1,0:15:45.14:0,45,567 0/0:1,0:12:36.11:0,36,454 0/0:1,0:15:45.14:0,45,567 0/0:1,0:19:57.18:0,57,718 0/1:8,1:9 [...]
-1 874880 . C T 106.84 PASS AC=2;AF=0.00085;AN=2364;BaseQRankSum=-1.422;DP=21057;DS;Dels=0.00;FS=3.970;HRun=0;HaplotypeScore=0.4635;InbreedingCoeff=-0.0128;MQ=62.21;MQ0=9;MQRankSum=0.305;NDA=2;QD=3.96;ReadPosRankSum=1.493;SB=-59.85;VQSLOD=2.2323;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:15:45.15:0,45,610 0/0:1,0:9:27.09:0,27,347 0/0:1,0:18:54.18:0,54,720 0/0:1,0:15:45.15:0,45,626 0/0:1,0:19:57.19:0,57,802 0/0:1,0:23:69.23:0,69,960 0/0:11,0:11:33.10:0,33,407 0/0:12,0:12:36.12:0,36,467 [...]
-1 876484 rs118109273 C T 4116.34 PASS AC=42;AF=0.01825;AN=2302;BaseQRankSum=-4.436;DB;DP=8391;Dels=0.00;FS=33.016;HRun=0;HaplotypeScore=0.2452;InbreedingCoeff=0.0391;MQ=62.83;MQ0=0;MQRankSum=7.010;NDA=2;QD=13.50;ReadPosRankSum=2.029;SB=-1128.61;VQSLOD=5.1912;culprit=MQRankSum;set=variant GT:AD:DP:GQ:PL ./. 0/0:1,0:3:9.02:0,9,92 0/0:1,0:3:9.02:0,9,100 0/0:1,0:5:15.05:0,15,197 0/0:1,0:5:15.05:0,15,200 0/0:1,0:3:9.03:0,9,120 0/0:1,0:4:12.04:0,12,154 0/0:11,0:11:27.08:0,27,323 0/0:4,0:4:12.0 [...]
-1 876499 rs4372192 A G 305633.12 PASS AC=2123;AF=0.91667;AN=2316;BaseQRankSum=22.009;DB;DP=9687;Dels=0.01;FS=13.883;HRun=6;HaplotypeScore=0.3271;InbreedingCoeff=0.0020;MQ=62.35;MQ0=0;MQRankSum=-2.556;NDA=3;QD=31.33;ReadPosRankSum=-0.328;SB=-23736.25;VQSLOD=4.8712;culprit=MQ;set=variant GT:AD:DP:GQ:PL 1/1:0,1:1:3.01:38,3,0 1/1:0,1:6:18.06:227,18,0 1/1:0,1:3:9.03:116,9,0 1/1:0,1:5:15.05:189,15,0 1/1:0,1:4:12.04:171,12,0 1/1:0,1:2:6.02:81,6,0 1/1:0,1:7:21.07:270,21,0 1/1:0,12:12:36.08:436,3 [...]
-1 876659 . C T 66.95 PASS AC=1;AF=0.00043;AN=2322;BaseQRankSum=-0.742;DP=8862;Dels=0.00;FS=9.438;HRun=0;HaplotypeScore=0.1758;InbreedingCoeff=-0.0314;MQ=60.48;MQ0=0;MQRankSum=2.146;NDA=2;QD=9.56;ReadPosRankSum=-0.520;SB=7.07;VQSLOD=5.9783;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,41 0/0:8,0:8:18.03:0,18,209 0/0:1,0:2:6.02:0,6,84 0/0:6,0:6:18.06:0,18,237 0/0:1,0:3:9.03:0,9,118 0/0:1,0:2:6.02:0,6,84 0/0:8,0:8:24.08:0,24,307 0/0:1,0:4:12.04:0,12,145 0/0:1,0:5:15. [...]
-1 876698 . G C 162.37 TruthSensitivityTranche99.00to99.30 AC=54;AF=0.02432;AN=2220;BaseQRankSum=-14.750;DP=5641;Dels=0.00;FS=79.866;HRun=1;HaplotypeScore=0.2141;InbreedingCoeff=-0.0605;MQ=65.04;MQ0=0;MQRankSum=0.487;NDA=3;QD=0.51;ReadPosRankSum=-10.460;SB=485.51;VQSLOD=-1.5866;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,41 0/0:1,0:2:6.02:0,6,79 ./. 0/0:1,0:3:9.03:0,9,124 0/0:1,0:1:3.01:0,3,42 0/0:1,0:1:3.01:0,3,32 0/0:6,0:6:15.03:0,15,163 0/0:1,0:3:9.03:0,9,108 0/0:1,0 [...]
-1 877498 . T C 103.49 PASS AC=2;AF=0.00100;AN=1992;BaseQRankSum=2.365;DP=3395;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.0945;InbreedingCoeff=-0.0948;MQ=67.96;MQ0=0;MQRankSum=0.630;NDA=1;QD=6.09;ReadPosRankSum=-0.641;SB=-3.03;VQSLOD=4.2876;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,41 0/0:1,0:3:9.03:0,9,106 0/0:1,0:4:12.04:0,12,154 0/0:1,0:1:3.01:0,3,41 ./. 0/0:1,0:5:15.05:0,15,203 0/0:3,0:3:9.02:0,9,94 ./. 0/0:1,0:1:3.01:0,3,34 0/0:1,0:5:15.04:0,15,158 0/0:2,0:2:6.01:0,6,6 [...]
-1 877583 . C T 209.17 PASS AC=2;AF=0.00090;AN=2230;BaseQRankSum=-2.524;DP=7189;Dels=0.00;FS=2.392;HRun=1;HaplotypeScore=0.1395;InbreedingCoeff=-0.0604;MQ=69.85;MQ0=0;MQRankSum=0.660;NDA=2;QD=6.34;ReadPosRankSum=-0.548;SB=-111.73;VQSLOD=4.9268;culprit=FS;set=variant GT:AD:DP:GQ:PL ./. 0/0:1,0:5:15.05:0,15,193 0/0:1,0:2:6.02:0,6,84 0/0:1,0:3:9.03:0,9,125 ./. 0/0:1,0:6:18.06:0,18,236 0/0:1,0:1:3:0,3,28 0/0:1,0:3:9.03:0,9,113 0/0:2,0:2:6.02:0,6,79 0/0:1,0:9:27.09:0,27,354 0/0:3,0:3:9.03:0,9, [...]
-1 877608 . C G 100.84 PASS AC=3;AF=0.00138;AN=2176;BaseQRankSum=-1.905;DP=5927;Dels=0.00;FS=4.496;HRun=0;HaplotypeScore=0.1522;InbreedingCoeff=-0.0542;MQ=64.62;MQ0=0;MQRankSum=0.399;NDA=2;QD=6.72;ReadPosRankSum=-0.563;SB=-42.63;VQSLOD=4.7731;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:1:3.01:0,3,31 0/0:1,0:3:9.03:0,9,113 0/0:1,0:1:3.01:0,3,44 0/0:1,0:3:9.03:0,9,116 ./. 0/0:1,0:5:15.05:0,15,197 ./. 0/0:1,0:1:3.01:0,3,37 0/0:2,0:2:6.02:0,6,75 0/0:1,0:6:18.06:0,18,217 0/0:1,0:3:9.02:0,9,1 [...]
-1 877677 . G C 349.09 TruthSensitivityTranche99.00to99.30 AC=69;AF=0.03770;AN=1830;BaseQRankSum=-9.318;DP=2433;Dels=0.00;FS=448.822;HRun=1;HaplotypeScore=0.0879;InbreedingCoeff=-0.0760;MQ=59.92;MQ0=0;MQRankSum=0.100;NDA=3;QD=1.71;ReadPosRankSum=-8.632;SB=-143.52;VQSLOD=-1.8166;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL ./. ./. 0/0:1,0:2:6.02:0,6,86 0/0:1,0:1:3.01:0,3,35 ./. 0/0:1,0:2:6.02:0,6,77 0/0:1,0:1:3.01:0,3,39 0/0:1,0:1:2.99:0,3,23 ./. 0/0:1,0:1:3.01:0,3,39 0/0:1,0:2:6.02:0,6,72 [...]
-1 877782 rs79037098 C G 4781.10 PASS AC=124;AF=0.07159;AN=1732;BaseQRankSum=-4.447;DB;DP=2110;Dels=0.00;FS=3.255;HRun=0;HaplotypeScore=0.0938;InbreedingCoeff=0.0287;MQ=60.89;MQ0=0;MQRankSum=2.952;NDA=2;QD=17.45;ReadPosRankSum=-3.028;SB=-1408.28;VQSLOD=6.6300;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:3:9.03:0,9,120 ./. 0/0:1,0:2:6.02:0,6,76 ./. 0/0:1,0:2:6.02:0,6,88 0/0:1,0:1:3.01:0,3,36 0/0:1,0:1:3.01:0,3,36 0/0:1,0:1:3.01:0,3,37 0/0:1,0:1:3.01:0,3,38 0/0:1,0:1:3.01:0,3,40 0/0:1,0:1: [...]
-1 877822 . A T 78.78 PASS AC=1;AF=0.00055;AN=1804;BaseQRankSum=-0.199;DP=2323;Dels=0.00;FS=2.331;HRun=1;HaplotypeScore=0.0436;InbreedingCoeff=-0.1067;MQ=58.62;MQ0=0;MQRankSum=2.403;NDA=1;QD=8.75;ReadPosRankSum=-2.072;SB=13.26;VQSLOD=3.3162;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:2:6.02:0,6,80 ./. 0/0:1,0:1:3.01:0,3,36 ./. 0/0:1,0:1:3.01:0,3,41 ./. 0/0:1,0:3:9.02:0,9,92 ./. 0/0:1,0:3:9.02:0,9,100 0/0:1,0:1:3.01:0,3,32 0/0:1,0:1:3.01:0,3,30 ./. 0/0:1,0:3:9.02:0,9,100 0/0:1,0:1:3.01:0 [...]
-1 877831 rs6672356 T C 82507.77 PASS AC=1802;AF=1.00000;AN=1802;BaseQRankSum=-0.472;DB;DP=2494;Dels=0.00;FS=0.000;HRun=2;HaplotypeScore=0.0398;InbreedingCoeff=-0.0821;MQ=58.21;MQ0=0;MQRankSum=2.333;NDA=2;QD=33.07;ReadPosRankSum=1.161;SB=-3183.71;VQSLOD=1.4957;culprit=FS;set=variant GT:AD:DP:GQ:PL 1/1:0,1:2:6.02:69,6,0 ./. 1/1:0,1:1:3.01:30,3,0 ./. 1/1:0,1:1:3.01:44,3,0 ./. 1/1:0,1:3:9.02:100,9,0 ./. 1/1:0,1:3:9.02:92,9,0 1/1:0,1:2:6.01:61,6,0 1/1:0,1:2:6.01:55,6,0 ./. 1/1:0,1:4:12.04:148 [...]
-1 878008 . C T 138.93 PASS AC=5;AF=0.0063;AN=792;BaseQRankSum=0.007;DP=887;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.0558;InbreedingCoeff=-0.0914;MQ=58.35;MQ0=0;MQRankSum=1.574;NDA=2;QD=11.58;ReadPosRankSum=-1.392;SB=5.36;VQSLOD=3.3594;culprit=FS;set=variant GT:AD:DP:GQ:PL ./. ./. ./. ./. 0/0:1,0:1:3.01:0,3,42 ./. 0/0:1,0:1:3.01:0,3,31 ./. ./. ./. ./. ./. ./. 0/0:1,0:1:3.01:0,3,39 0/0:1,0:1:3.01:0,3,33 0/0:1,0:1:3.01:0,3,32 ./. 0/0:1,0:3:9.02:0,9,100 0/0:1,0:1:3.01:0,3,32 ./. ./. 0/0:1, [...]
-1 878254 . C T 85.52 PASS AC=8;AF=0.00352;AN=2272;BaseQRankSum=-5.177;DP=5745;Dels=0.00;FS=5.964;HRun=1;HaplotypeScore=0.1128;InbreedingCoeff=-0.0572;MQ=80.88;MQ0=0;MQRankSum=1.091;NDA=1;QD=1.50;ReadPosRankSum=-0.781;SB=-70.68;VQSLOD=1.6977;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:3:9.03:0,9,129 0/0:1,0:8:24.08:0,24,309 0/0:1,0:3:9.03:0,9,124 0/0:1,0:1:3.01:0,3,33 0/0:1,0:5:15.05:0,15,206 0/0:1,0:4:12.04:0,12,145 0/0:1,0:5:15.05:0,15,200 0/0:1,0:2:6.02:0,6,81 0/0:1,0:6:18.06:0,18,22 [...]
-1 878296 rs72902601 C G 223.90 PASS AC=5;AF=0.00217;AN=2306;BaseQRankSum=0.013;DB;DP=6410;Dels=0.00;FS=2.317;HRun=1;HaplotypeScore=0.1647;InbreedingCoeff=-0.0498;MQ=84.45;MQ0=1;MQRankSum=-1.556;NDA=3;QD=7.72;ReadPosRankSum=-0.819;SB=29.78;VQSLOD=6.1512;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:2:6.02:0,6,85 0/0:1,0:7:21.06:0,21,240 0/0:1,0:3:9.03:0,9,122 0/0:1,0:3:9.03:0,9,130 0/0:1,0:4:12.04:0,12,154 0/0:6,0:6:18.06:0,18,225 0/0:1,0:7:21.06:0,21,240 0/0:1,0:4:12.03:0,12,130 0/0:7,0: [...]
-1 878310 . T C 230.22 PASS AC=6;AF=0.00259;AN=2314;BaseQRankSum=2.438;DP=6355;Dels=0.00;FS=7.487;HRun=0;HaplotypeScore=0.2096;InbreedingCoeff=-0.0279;MQ=75.89;MQ0=1;MQRankSum=-0.662;NDA=3;QD=6.40;ReadPosRankSum=0.464;SB=24.62;VQSLOD=6.3399;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:2:6.02:0,6,77 0/0:1,0:4:12.04:0,12,148 0/0:1,0:4:12.04:0,12,148 0/0:1,0:3:9.03:0,9,122 0/0:1,0:2:6.02:0,6,80 0/0:1,0:5:15.05:0,15,193 0/0:6,0:6:18.04:0,18,193 0/0:1,0:5:15.04:0,15,167 0/0:7,0:8 [...]
-1 878314 rs142558220 G C 6737.16 PASS AC=100;AF=0.04314;AN=2318;BaseQRankSum=4.429;DB;DP=6404;Dels=0.00;FS=33.002;HRun=0;HaplotypeScore=0.2219;InbreedingCoeff=0.0422;MQ=74.44;MQ0=0;MQRankSum=1.067;NDA=3;QD=14.58;ReadPosRankSum=-0.369;SB=-1736.03;VQSLOD=6.0058;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:3:9.03:0,9,120 0/0:1,0:3:9.03:0,9,113 0/0:1,0:4:12.04:0,12,151 0/0:1,0:3:9.03:0,9,127 0/0:1,0:2:6.02:0,6,86 0/0:1,0:7:21.07:0,21,280 0/1:5,1:6:21.95:22,0,170 0/0:1,0:5:15.05:0,15,193 0/0 [...]
-1 878325 rs114478480 C T 1290.92 PASS AC=22;AF=0.00954;AN=2306;BaseQRankSum=0.807;DB;DP=6480;Dels=0.00;FS=8.079;HRun=0;HaplotypeScore=0.2133;InbreedingCoeff=0.0090;MQ=69.57;MQ0=1;MQRankSum=1.550;NDA=3;QD=12.29;ReadPosRankSum=-0.505;SB=-430.52;VQSLOD=8.1094;culprit=ReadPosRankSum;set=variant GT:AD:DP:GQ:PL 0/0:1,0:4:12.04:0,12,175 0/0:1,0:5:15.05:0,15,185 0/0:1,0:3:9.02:0,9,100 0/0:1,0:3:9.03:0,9,103 0/0:1,0:2:6.02:0,6,82 0/0:1,0:9:27.09:0,27,347 0/0:6,0:6:18.05:0,18,217 0/0:1,0:5:15.05:0 [...]
-1 878331 rs148327885 C T 903.80 PASS AC=21;AF=0.00898;AN=2338;BaseQRankSum=-0.474;DB;DP=6742;Dels=0.00;FS=1.328;HRun=0;HaplotypeScore=0.1838;InbreedingCoeff=0.0444;MQ=66.59;MQ0=1;MQRankSum=2.307;NDA=2;QD=9.22;ReadPosRankSum=-0.761;SB=-342.88;VQSLOD=6.5208;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:4:12.04:0,12,172 0/0:1,0:6:18.05:0,18,201 0/0:1,0:4:12.03:0,12,122 0/0:1,0:4:12.04:0,12,160 0/0:1,0:1:3.01:0,3,42 0/0:1,0:8:24.08:0,24,315 0/0:1,0:7:21.06:0,21,234 0/0:1,0:7:21.06:0,21,247 0 [...]
-1 878408 rs190069697 C T 254.67 PASS AC=1;AF=0.00043;AN=2350;BaseQRankSum=0.190;DB;DP=11638;Dels=0.00;FS=1.390;HRun=0;HaplotypeScore=0.1533;InbreedingCoeff=-0.0243;MQ=73.35;MQ0=0;MQRankSum=0.575;NDA=2;QD=18.19;ReadPosRankSum=-0.629;SB=-67.06;VQSLOD=6.0781;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:8:24.08:0,24,341 0/0:1,0:11:33.10:0,33,407 0/0:1,0:7:21.07:0,21,275 0/0:1,0:7:21.07:0,21,285 0/0:1,0:5:15.05:0,15,217 0/0:1,0:4:12.04:0,12,154 0/0:1,0:5:15.04:0,15,167 0/0:1,0:4 [...]
-1 878425 . C T 197.84 PASS AC=2;AF=0.00085;AN=2356;BaseQRankSum=-0.512;DP=14003;Dels=0.00;FS=6.800;HRun=1;HaplotypeScore=0.1841;InbreedingCoeff=-0.0220;MQ=72.36;MQ0=0;MQRankSum=1.181;NDA=1;QD=6.00;ReadPosRankSum=-0.215;SB=-124.40;VQSLOD=6.3903;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:10:30.10:0,30,426 0/0:1,0:16:48.15:0,48,605 0/0:1,0:9:27.09:0,27,354 0/0:1,0:7:21.07:0,21,296 0/0:1,0:7:21.07:0,21,292 0/0:1,0:4:12.04:0,12,157 0/0:1,0:4:12.04:0,12,151 0/0:1,0:5:15.05:0,15 [...]
-1 878474 rs183873661 C T 444.43 PASS AC=3;AF=0.00127;AN=2362;BaseQRankSum=-5.768;DB;DP=14280;Dels=0.00;FS=0.762;HRun=0;HaplotypeScore=0.1971;InbreedingCoeff=-0.0172;MQ=70.51;MQ0=0;MQRankSum=0.190;NDA=2;QD=8.55;ReadPosRankSum=-0.720;SB=-178.80;VQSLOD=6.7250;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:14:42.14:0,42,585 0/0:1,0:12:36.12:0,36,472 0/0:1,0:12:36.11:0,36,454 0/0:1,0:8:24.08:0,24,338 0/0:1,0:12:36.12:0,36,501 0/0:1,0:3:9.03:0,9,120 0/0:10,0:10:27.09:0,27,350 0/0:1,0:7:21.07:0, [...]
-1 878644 . G A 226.03 PASS AC=3;AF=0.00127;AN=2364;BaseQRankSum=-0.122;DP=25048;Dels=0.00;FS=35.316;HRun=0;HaplotypeScore=0.2952;InbreedingCoeff=-0.0072;MQ=95.60;MQ0=0;MQRankSum=-1.258;NDA=3;QD=5.95;ReadPosRankSum=-0.227;SB=-12.93;VQSLOD=4.1589;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:10:30.10:0,30,393 0/0:19,0:19:51.15:0,51,625 0/0:1,0:14:42.14:0,42,550 0/0:1,0:10:30.10:0,30,400 0/0:1,0:7:21.07:0,21,289 0/0:1,0:5:15.05:0,15,200 0/0:1,0:21:63.19:0,63,759 0/0:15,0:15:45.13:0,45,541 0 [...]
-1 878653 rs112422281 A G 1095.87 PASS AC=3;AF=0.00127;AN=2364;BaseQRankSum=4.441;DB;DP=24856;Dels=0.00;FS=13.604;HRun=0;HaplotypeScore=0.3227;InbreedingCoeff=-0.0071;MQ=93.11;MQ0=0;MQRankSum=-1.791;NDA=3;QD=14.81;ReadPosRankSum=0.465;SB=-472.43;VQSLOD=6.0957;culprit=MQ;set=variant GT:AD:DP:GQ:PL 0/0:1,0:10:30.10:0,30,386 0/0:16,0:16:45.12:0,45,527 0/0:1,0:13:39.13:0,39,501 0/0:1,0:11:33.11:0,33,432 0/0:1,0:8:24.08:0,24,330 0/0:6,0:6:18.06:0,18,236 0/0:1,0:23:69.18:0,69,747 0/0:15,0:15:45 [...]
-1 878656 . G T 144.02 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-2.854;DP=25563;Dels=0.00;FS=13.254;HRun=0;HaplotypeScore=0.3242;InbreedingCoeff=-0.0067;MQ=92.49;MQ0=0;MQRankSum=-1.134;NDA=2;QD=11.08;ReadPosRankSum=0.196;SB=-122.31;VQSLOD=6.2398;culprit=MQ;set=variant GT:AD:DP:GQ:PL 0/0:1,0:12:36.12:0,36,488 0/0:14,0:14:42.13:0,42,529 0/0:1,0:13:39.13:0,39,501 0/0:1,0:12:36.12:0,36,472 0/0:1,0:6:18.06:0,18,256 0/0:6,0:6:18.06:0,18,241 0/0:1,0:24:72.23:0,72,887 0/0:1,0:17:51.16:0,51,629 0 [...]
-1 878667 . G T 1244.61 PASS AC=7;AF=0.00296;AN=2364;BaseQRankSum=-5.435;DP=24575;DS;Dels=0.00;FS=6.041;HRun=0;HaplotypeScore=0.4616;InbreedingCoeff=-0.0092;MQ=80.88;MQ0=0;MQRankSum=-0.829;NDA=2;QD=7.83;ReadPosRankSum=1.618;SB=-336.26;VQSLOD=5.6715;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:13:39.13:0,39,520 0/0:1,0:6:18.06:0,18,227 0/0:1,0:13:39.12:0,39,491 0/0:1,0:11:33.10:0,33,407 0/0:1,0:8:24.08:0,24,325 0/0:1,0:7:21.07:0,21,270 0/0:1,0:22:66.20:0,66,795 0/0:1,0:14:42.13:0,42,506 0 [...]
-1 878676 . C T 261.55 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-0.205;DP=28225;DS;Dels=0.00;FS=16.457;HRun=0;HaplotypeScore=0.7222;InbreedingCoeff=0.0256;MQ=64.88;MQ0=0;MQRankSum=0.709;NDA=3;QD=6.38;ReadPosRankSum=1.287;SB=6.14;VQSLOD=4.2567;culprit=HaplotypeScore;set=variant GT:AD:DP:GQ:PL 0/0:1,0:9:27.09:0,27,376 0/0:1,0:15:45.14:0,45,555 0/0:1,0:13:39.13:0,39,501 0/0:1,0:8:24.08:0,24,325 0/0:1,0:10:30.10:0,30,400 0/0:1,0:7:21.07:0,21,292 0/0:1,0:27:81.25:0,81,975 0/0:1,0:16:48.15:0,4 [...]
-1 878709 rs144453653 C T 1463.13 PASS AC=4;AF=0.00169;AN=2364;BaseQRankSum=4.545;DB;DP=30772;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.3157;InbreedingCoeff=0.0230;MQ=67.14;MQ0=0;MQRankSum=-0.925;NDA=2;QD=12.51;ReadPosRankSum=1.283;SB=-583.42;VQSLOD=5.4027;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:12,0:12:36.10:0,36,450 0/0:1,0:21:63.19:0,63,759 0/0:1,0:12:36.11:0,36,434 0/0:1,0:11:33.11:0,33,432 0/0:10,0:10:30.08:0,30,361 0/0:1,0:6:18.06:0,18,222 0/0:1,0:20:60.13:0,60,612 0/0:1,0:12:36. [...]
-1 878733 . G C 722.67 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=1.196;DP=32483;DS;Dels=0.00;FS=34.785;HRun=0;HaplotypeScore=0.2590;InbreedingCoeff=-0.0142;MQ=69.62;MQ0=0;MQRankSum=0.581;NDA=3;QD=12.04;ReadPosRankSum=0.190;SB=-171.66;VQSLOD=5.0944;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:15:45.15:0,45,626 0/0:1,0:28:84.27:0,84,1058 0/0:1,0:15:45.15:0,45,626 0/0:1,0:11:33.11:0,33,469 0/0:1,0:12:36.12:0,36,512 0/0:1,0:7:21.07:0,21,292 0/0:12,0:12:36.06:0,36,424 0/0:7,0:7:1 [...]
-1 878744 rs138897766 G C 2107.39 PASS AC=12;AF=0.00508;AN=2364;BaseQRankSum=3.699;DB;DP=30261;Dels=0.00;FS=16.835;HRun=0;HaplotypeScore=0.2378;InbreedingCoeff=-0.0201;MQ=72.93;MQ0=0;MQRankSum=0.368;NDA=3;QD=11.33;ReadPosRankSum=2.206;SB=-927.16;VQSLOD=6.3975;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:14:42.14:0,42,569 0/0:1,0:29:87.26:0,87,1022 0/0:1,0:16:48.16:0,48,640 0/0:1,0:10:30.10:0,30,422 0/0:1,0:15:45.15:0,45,618 0/0:1,0:6:18.06:0,18,236 0/0:10,0:10:30.09:0,30,374 [...]
-1 878745 rs72902602 A C 541.13 PASS AC=4;AF=0.00169;AN=2364;BaseQRankSum=-1.730;DB;DP=29217;Dels=0.00;FS=10.700;HRun=0;HaplotypeScore=0.2345;InbreedingCoeff=-0.0177;MQ=73.36;MQ0=0;MQRankSum=0.644;NDA=2;QD=6.85;ReadPosRankSum=0.092;SB=-308.42;VQSLOD=6.3536;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:14:42.14:0,42,577 0/0:1,0:25:75.23:0,75,903 0/0:1,0:14:42.14:0,42,560 0/0:1,0:10:30.10:0,30,418 0/0:1,0:15:45.15:0,45,618 0/0:1,0:5:15.05:0,15,189 0/0:10,0:10:30.06:0,30,350 0/0 [...]
-1 878761 rs35755565 A AG 448.05 Indel_QD AC=31;AF=0.01414;AN=2192;BaseQRankSum=3.442;DB;DP=27061;FS=7.246;HRun=7;HaplotypeScore=1.4391;InbreedingCoeff=0.3349;MQ=58.25;MQ0=0;MQRankSum=6.157;NDA=1;QD=1.23;ReadPosRankSum=-1.898;SB=-185.86;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:1:30.08:0,30,337 0/0:1,0:1:60.17:0,60,674 0/0:1,0:1:48.14:0,48,539 0/0:1,0:1:27.08:0,27,303 0/0:1,0:1:39.11:0,39,438 0/0:1,0:1:9.03:0,9,101 0/0:1,0:1:36.10:0,36,404 0/0:3,0:4:11.62:0,12,111 0/0:1,0:1:9.03:0,9,101 0/ [...]
-1 878764 rs180779437 G C 570.53 PASS AC=3;AF=0.00127;AN=2362;BaseQRankSum=-1.458;DB;DP=27180;DS;Dels=0.00;FS=0.795;HRun=0;HaplotypeScore=0.3066;InbreedingCoeff=-0.0155;MQ=77.01;MQ0=0;MQRankSum=0.624;NDA=2;QD=11.64;ReadPosRankSum=-0.346;SB=-233.86;VQSLOD=6.0170;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:13:39.13:0,39,528 0/0:1,0:23:69.22:0,69,869 0/0:1,0:15:45.15:0,45,610 0/0:1,0:11:33.11:0,33,447 0/0:1,0:12:36.12:0,36,507 0/0:1,0:5:15.05:0,15,193 0/0:1,0:12:36.11:0,36,423 0/0:4,0:4:12 [...]
-1 878769 . C G 669.72 PASS AC=7;AF=0.00297;AN=2360;BaseQRankSum=-0.891;DP=22087;DS;Dels=0.00;FS=10.150;HRun=7;HaplotypeScore=0.3096;InbreedingCoeff=-0.0231;MQ=78.30;MQ0=0;MQRankSum=0.594;NDA=2;QD=4.59;ReadPosRankSum=-2.948;SB=-264.19;VQSLOD=4.1677;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:11:33.11:0,33,432 0/0:1,0:18:54.17:0,54,666 0/0:1,0:14:42.14:0,42,560 0/0:1,0:10:30.09:0,30,370 0/0:1,0:12:36.12:0,36,501 0/0:1,0:5:15.05:0,15,189 0/0:1,0:9:27.09:0,27,340 0/0:4,0:4:12. [...]
-1 878784 rs142929357 C G 2333.96 PASS AC=19;AF=0.00806;AN=2358;BaseQRankSum=7.682;DB;DP=21995;Dels=0.00;FS=26.129;HRun=4;HaplotypeScore=0.2483;InbreedingCoeff=0.0072;MQ=77.12;MQ0=0;MQRankSum=-0.127;NDA=3;QD=11.06;ReadPosRankSum=-5.854;SB=-1081.78;VQSLOD=6.0573;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:8:24.07:0,24,275 0/0:1,0:13:39.11:0,39,447 0/0:1,0:13:39.12:0,39,458 0/0:1,0:7:21.06:0,21,240 0/0:1,0:11:33.11:0,33,424 0/0:1,0:5:15.05:0,15,185 0/0:1,0:8:24.04:0,24,237 0/0:2,0:2:6.01: [...]
-1 878785 rs187587205 G A 154.05 PASS AC=5;AF=0.00212;AN=2358;BaseQRankSum=1.056;DB;DP=22546;Dels=0.00;FS=1.420;HRun=0;HaplotypeScore=0.2441;InbreedingCoeff=-0.0016;MQ=76.46;MQ0=0;MQRankSum=1.130;NDA=3;QD=2.80;ReadPosRankSum=-0.329;SB=9.86;VQSLOD=2.3244;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:10:30.10:0,30,386 0/0:1,0:15:45.14:0,45,567 0/0:1,0:15:45.15:0,45,600 0/0:1,0:9:27.09:0,27,340 0/0:1,0:12:36.12:0,36,472 0/0:1,0:6:18.06:0,18,253 0/0:1,0:9:27.08:0,27,309 0/0:2,0:2:6.02:0,6,74 [...]
-1 878809 rs191952374 C T 2379.47 PASS AC=12;AF=0.00509;AN=2358;BaseQRankSum=-7.158;DB;DP=18026;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=0.0596;InbreedingCoeff=-0.0001;MQ=83.71;MQ0=0;MQRankSum=5.459;NDA=1;QD=13.22;ReadPosRankSum=1.015;SB=-226.93;VQSLOD=8.2616;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:7:21.07:0,21,301 0/0:1,0:15:45.14:0,45,567 0/0:1,0:14:42.13:0,42,529 0/0:1,0:9:27.09:0,27,354 0/0:1,0:9:27.09:0,27,354 0/0:1,0:8:24.08:0,24,341 0/0:1,0:6:18.06:0,18,231 0/0:4,0:4:12.03:0, [...]
-1 879045 . C T 310.80 PASS AC=10;AF=0.00423;AN=2362;BaseQRankSum=1.692;DP=12971;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.3476;InbreedingCoeff=-0.0250;MQ=70.55;MQ0=0;MQRankSum=-0.063;NDA=3;QD=2.66;ReadPosRankSum=0.103;SB=-95.32;VQSLOD=1.6109;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:8:24.08:0,24,320 0/0:1,0:5:15.05:0,15,189 0/0:1,0:7:21.07:0,21,259 0/0:1,0:8:24.08:0,24,302 0/0:11,0:11:33.11:0,33,476 0/0:1,0:7:21.07:0,21,275 0/0:1,0:15:45.14:0,45,529 0/0:8,0:8:24.06:0,24,287 0/0:1,0: [...]
-1 879060 rs186768085 C T 178.33 PASS AC=2;AF=0.00085;AN=2362;BaseQRankSum=-2.758;DB;DP=14742;Dels=0.00;FS=16.111;HRun=0;HaplotypeScore=0.3498;InbreedingCoeff=-0.0180;MQ=70.61;MQ0=0;MQRankSum=0.836;NDA=2;QD=3.72;ReadPosRankSum=0.265;SB=-103.55;VQSLOD=2.0271;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:7:21.07:0,21,275 0/0:1,0:4:12.04:0,12,148 0/0:1,0:6:18.06:0,18,253 0/0:1,0:7:21.07:0,21,280 0/0:13,0:13:39.13:0,39,549 0/0:1,0:10:30.10:0,30,412 0/0:1,0:12:36.11:0,36,434 0/0:1 [...]
-1 879090 . C A 1219.01 TruthSensitivityTranche99.30to99.50 AC=2;AF=0.00085;AN=2364;BaseQRankSum=-27.199;DP=18527;Dels=0.02;FS=56.628;HRun=1;HaplotypeScore=0.8406;InbreedingCoeff=0.1134;MQ=61.65;MQ0=0;MQRankSum=11.240;NDA=3;QD=1.39;ReadPosRankSum=1.781;SB=-327.63;VQSLOD=-4.1026;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:3:9.03:0,9,131 0/0:11,0:11:30.08:0,30,368 0/0:1,0:11:33.11:0,33,416 0/0:1,0:7:21.07:0,21,292 0/0:1,0:14:42.14:0,42,560 0/0:1,0:12:36.12:0,36,472 0/0:1,0:6:18.06:0 [...]
-1 879095 . G A 231.79 TruthSensitivityTranche98.50to98.80 AC=3;AF=0.00127;AN=2364;BaseQRankSum=-9.250;DP=19365;Dels=0.00;FS=0.000;HRun=1;HaplotypeScore=0.8663;InbreedingCoeff=-0.0143;MQ=60.09;MQ0=0;MQRankSum=1.310;NDA=3;QD=2.90;ReadPosRankSum=-0.443;SB=-73.14;VQSLOD=0.1700;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:4:12.04:0,12,172 0/0:13,0:13:36.11:0,36,451 0/0:1,0:11:33.11:0,33,454 0/0:1,0:8:24.08:0,24,320 0/0:1,0:14:42.14:0,42,591 0/0:1,0:15:45.15:0,45,600 0/0:1,0:6:18.06:0,1 [...]
-1 879108 . A C 2045.21 TruthSensitivityTranche99.50to99.90 AC=174;AF=0.07360;AN=2364;BaseQRankSum=-22.465;DP=20020;Dels=0.00;FS=3200.000;HRun=3;HaplotypeScore=0.6535;InbreedingCoeff=-0.0715;MQ=59.51;MQ0=2;MQRankSum=2.710;NDA=2;QD=0.79;ReadPosRankSum=-21.990;SB=-568.80;VQSLOD=-65.2733;culprit=FS;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:7:21.07:0,21,285 0/0:1,0:9:27.08:0,27,309 0/0:1,0:12:36.11:0,36,454 0/0:1,0:7:21.07:0,21,285 0/0:1,0:15:45.14:0,45,567 0/0:1,0:13:39.12:0,39,481 0/1:5,2:7: [...]
-1 879115 . C G 98.78 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=0.335;DP=28840;DS;Dels=0.00;FS=1.686;HRun=0;HaplotypeScore=0.4535;InbreedingCoeff=-0.0059;MQ=59.65;MQ0=2;MQRankSum=-1.112;NDA=2;QD=5.81;ReadPosRankSum=1.173;SB=-52.08;VQSLOD=4.2445;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:11:33.11:0,33,459 0/0:1,0:20:60.19:0,60,740 0/0:15,0:15:45.15:0,45,613 0/0:1,0:7:21.07:0,21,289 0/0:1,0:14:42.14:0,42,577 0/0:1,0:17:51.17:0,51,701 0/0:9,0:9:27.08:0,27,336 0/0:1,0:10:30.10:0,30,386 0/0 [...]
-1 879135 rs149790558 C T 710.99 PASS AC=2;AF=0.00085;AN=2364;BaseQRankSum=1.067;DB;DP=33389;Dels=0.00;FS=4.041;HRun=1;HaplotypeScore=0.2819;InbreedingCoeff=-0.0065;MQ=65.56;MQ0=0;MQRankSum=-0.395;NDA=2;QD=9.61;ReadPosRankSum=0.089;SB=-349.93;VQSLOD=6.0187;culprit=MQ;set=variant GT:AD:DP:GQ:PL 0/0:1,0:17:51.17:0,51,731 0/0:1,0:24:72.23:0,72,907 0/0:1,0:16:48.16:0,48,650 0/0:1,0:10:30.10:0,30,393 0/0:1,0:15:45.15:0,45,618 0/0:1,0:20:60.20:0,60,835 0/0:1,0:15:45.15:0,45,590 0/0:15,0:15:42.1 [...]
-1 879142 rs148506094 C G 986.92 PASS AC=2;AF=0.00085;AN=2364;BaseQRankSum=5.008;DB;DP=34146;Dels=0.00;FS=52.989;HRun=0;HaplotypeScore=0.2258;InbreedingCoeff=0.0374;MQ=69.31;MQ0=0;MQRankSum=-1.263;NDA=1;QD=13.71;ReadPosRankSum=1.568;SB=-27.67;VQSLOD=4.0467;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:17:51.17:0,51,718 0/0:1,0:22:66.21:0,66,849 0/0:1,0:18:54.18:0,54,708 0/0:1,0:11:33.11:0,33,459 0/0:1,0:18:54.18:0,54,708 0/0:1,0:19:57.19:0,57,783 0/0:1,0:17:51.16:0,51,656 0/0:16,0:16:48.1 [...]
-1 879145 rs146548754 A C 921.44 PASS AC=2;AF=0.00085;AN=2364;BaseQRankSum=4.040;DB;DP=35077;Dels=0.00;FS=79.622;HRun=1;HaplotypeScore=0.2058;InbreedingCoeff=0.0239;MQ=71.45;MQ0=0;MQRankSum=-0.552;NDA=2;QD=12.80;ReadPosRankSum=1.074;SB=4.65;VQSLOD=3.8967;culprit=FS;set=variant GT:AD:DP:GQ:PL 0/0:1,0:20:60.20:0,60,835 0/0:1,0:27:81.25:0,81,998 0/0:1,0:19:57.19:0,57,793 0/0:1,0:12:36.12:0,36,501 0/0:1,0:17:51.17:0,51,691 0/0:1,0:22:66.22:0,66,907 0/0:1,0:19:57.17:0,57,653 0/0:1,0:16:48.14:0 [...]
-1 879203 . A C 100.14 PASS AC=1;AF=0.00042;AN=2364;BaseQRankSum=-1.334;DP=34081;Dels=0.00;FS=11.356;HRun=0;HaplotypeScore=0.2129;InbreedingCoeff=-0.0083;MQ=77.56;MQ0=0;MQRankSum=-0.721;NDA=1;QD=6.26;ReadPosRankSum=0.498;SB=-58.31;VQSLOD=6.5553;culprit=QD;set=variant GT:AD:DP:GQ:PL 0/0:1,0:13:39.13:0,39,511 0/0:1,0:34:99:0,102,1199 0/0:1,0:29:87.28:0,87,1119 0/0:1,0:14:42.14:0,42,585 0/0:1,0:24:72.24:0,72,990 0/0:1,0:26:78.25:0,78,983 0/0:1,0:17:51.15:0,51,599 0/0:1,0:9:27.09:0,27,340 0/0 [...]
-1 879257 . C T 66.87 TruthSensitivityTranche98.50to98.80 AC=4;AF=0.00169;AN=2364;BaseQRankSum=-0.888;DP=41699;Dels=0.00;FS=1.728;HRun=0;HaplotypeScore=0.2694;InbreedingCoeff=0.0216;MQ=68.26;MQ0=0;MQRankSum=3.451;NDA=3;QD=1.39;ReadPosRankSum=0.465;SB=-95.37;VQSLOD=0.1895;culprit=QD;set=FilteredInAll GT:AD:DP:GQ:PL 0/0:1,0:34:99:0,102,1312 0/0:1,0:36:99:0,108,1204 0/0:1,0:40:99:0,120,1479 0/0:1,0:23:69.22:0,69,887 0/0:1,0:29:87.28:0,87,1140 0/0:1,0:31:93.30:0,93,1172 0/0:1,0:5:15.05:0,15,1 [...]
-1 879276 rs115454328 A G 5560.08 PASS AC=15;AF=0.00635;AN=2364;BaseQRankSum=5.676;DB;DP=43812;DS;Dels=0.00;FS=9.312;HRun=0;HaplotypeScore=0.1675;InbreedingCoeff=-0.0144;MQ=62.93;MQ0=0;MQRankSum=3.476;NDA=1;QD=11.91;ReadPosRankSum=-1.874;SB=-2673.29;VQSLOD=6.6274;culprit=InbreedingCoeff;set=variant GT:AD:DP:GQ:PL 0/0:1,0:36:99:0,108,1463 0/0:1,0:41:99:0,123,1445 0/0:1,0:37:99:0,111,1480 0/0:1,0:25:75.25:0,75,1044 0/0:1,0:35:99:0,105,1462 0/0:1,0:29:87.28:0,87,1119 0/0:7,0:7:21.06:0,21,241 [...]
-1 879317 rs7523549 C T 82570.47 PASS AC=186;AF=0.07868;AN=2364;BaseQRankSum=2.488;DB;DP=36267;DS;Dels=0.00;FS=14.862;HM3;HRun=0;HaplotypeScore=0.3150;InbreedingCoeff=0.1203;MQ=61.86;MQ0=0;MQRankSum=7.931;NDA=2;QD=17.21;ReadPosRankSum=3.682;SB=-25054.87;VQSLOD=6.5687;culprit=MQRankSum;set=variant GT:AD:DP:GQ:PL 0/1:19,17:36:99:558,0,622 0/0:1,0:30:90.27:0,90,1058 0/0:1,0:35:99:0,105,1350 0/0:1,0:26:78.25:0,78,983 0/0:1,0:23:69.22:0,69,887 0/0:1,0:28:84.27:0,84,1080 0/0:1,0:12:36.11:0,36,4 [...]
diff --git a/testdata/variant/VQSR.mixedTest.recal b/testdata/variant/VQSR.mixedTest.recal
deleted file mode 100644
index 37b8274..0000000
--- a/testdata/variant/VQSR.mixedTest.recal
+++ /dev/null
@@ -1,32 +0,0 @@
-##fileformat=VCFv4.1
-##INFO=<ID=END,Number=1,Type=Integer,Description="x">
-##INFO=<ID=VQSLOD,Number=1,Type=Float,Description="Log odds ratio of being a true variant versus being false under the trained gaussian mixture model">
-##INFO=<ID=culprit,Number=1,Type=String,Description="The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out">
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-#CHROM POS ID REF ALT QUAL FILTER INFO
-20 1000177 . N <VQSR> . . END=1000177;VQSLOD=-1.2345;culprit=FS
-20 1000177 . N <VQSR> . . END=1000178;VQSLOD=-1.2377;culprit=HaplotypeScore
-20 1000382 . N <VQSR> . . END=1000386;VQSLOD=-0.5534;culprit=HaplotypeScore
-20 1000382 . N <VQSR> . . END=1000382;VQSLOD=-0.5678;culprit=FS
-20 1000442 . N <VQSR> . . END=1000446;VQSLOD=3.5923;culprit=QD
diff --git a/testdata/variant/dbsnp_135.b37.1000.vcf b/testdata/variant/dbsnp_135.b37.1000.vcf
deleted file mode 100644
index 948e8a3..0000000
--- a/testdata/variant/dbsnp_135.b37.1000.vcf
+++ /dev/null
@@ -1,249 +0,0 @@
-##fileformat=VCFv4.1
-##FILTER=<ID=NC,Description="Inconsistent Genotype Submission For At Least One Sample">
-##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency, for each ALT allele, in the same order as listed">
-##INFO=<ID=ASP,Number=0,Type=Flag,Description="Is Assembly specific. This is set if the variant only maps to one assembly">
-##INFO=<ID=ASS,Number=0,Type=Flag,Description="In acceptor splice site FxnCode = 73">
-##INFO=<ID=CDA,Number=0,Type=Flag,Description="Variation is interrogated in a clinical diagnostic assay">
-##INFO=<ID=CFL,Number=0,Type=Flag,Description="Has Assembly conflict. This is for weight 1 and 2 variant that maps to different chromosomes on different assemblies.">
-##INFO=<ID=CLN,Number=0,Type=Flag,Description="Variant is Clinical(LSDB,OMIM,TPA,Diagnostic)">
-##INFO=<ID=DSS,Number=0,Type=Flag,Description="In donor splice-site FxnCode = 75">
-##INFO=<ID=G5,Number=0,Type=Flag,Description=">5% minor allele frequency in 1+ populations">
-##INFO=<ID=G5A,Number=0,Type=Flag,Description=">5% minor allele frequency in each and all populations">
-##INFO=<ID=GCF,Number=0,Type=Flag,Description="Has Genotype Conflict Same (rs, ind), different genotype. N/N is not included.">
-##INFO=<ID=GENEINFO,Number=1,Type=String,Description="Pairs each of gene symbol:gene id. The gene symbol and id are delimited by a colon (:) and each pair is delimited by a vertical bar (|)">
-##INFO=<ID=GMAF,Number=1,Type=Float,Description="Global Minor Allele Frequency [0, 0.5]; global population is 1000GenomesProject phase 1 genotype data from 629 individuals, released in the 08-04-2010 dataset">
-##INFO=<ID=GNO,Number=0,Type=Flag,Description="Genotypes available. The variant has individual genotype (in SubInd table).">
-##INFO=<ID=HD,Number=0,Type=Flag,Description="Marker is on high density genotyping kit (50K density or greater). The variant may have phenotype associations present in dbGaP.">
-##INFO=<ID=INT,Number=0,Type=Flag,Description="In Intron FxnCode = 6">
-##INFO=<ID=KGPROD,Number=0,Type=Flag,Description="1000 Genome production phase">
-##INFO=<ID=KGPilot1,Number=0,Type=Flag,Description="1000 Genome discovery(pilot1) 2009">
-##INFO=<ID=KGPilot123,Number=0,Type=Flag,Description="1000 Genome discovery all pilots 2010(1,2,3)">
-##INFO=<ID=KGVAL,Number=0,Type=Flag,Description="1000 Genome validated by second method">
-##INFO=<ID=LSD,Number=0,Type=Flag,Description="Submitted from a locus-specific database">
-##INFO=<ID=MTP,Number=0,Type=Flag,Description="Microattribution/third-party annotation(TPA:GWAS,PAGE)">
-##INFO=<ID=MUT,Number=0,Type=Flag,Description="Is mutation (journal citation, explicit fact): a low frequency variation that is cited in journal and other reputable sources">
-##INFO=<ID=NOC,Number=0,Type=Flag,Description="Contig allele not present in variant allele list. The reference sequence allele at the mapped position is not present in the variant allele list, adjusted for orientation.">
-##INFO=<ID=NOV,Number=0,Type=Flag,Description="Rs cluster has non-overlapping allele sets. True when rs set has more than 2 alleles from different submissions and these sets share no alleles in common.">
-##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
-##INFO=<ID=NSF,Number=0,Type=Flag,Description="Has non-synonymous frameshift A coding region variation where one allele in the set changes all downstream amino acids. FxnClass = 44">
-##INFO=<ID=NSM,Number=0,Type=Flag,Description="Has non-synonymous missense A coding region variation where one allele in the set changes protein peptide. FxnClass = 42">
-##INFO=<ID=NSN,Number=0,Type=Flag,Description="Has non-synonymous nonsense A coding region variation where one allele in the set changes to STOP codon (TER). FxnClass = 41">
-##INFO=<ID=OM,Number=0,Type=Flag,Description="Has OMIM/OMIA">
-##INFO=<ID=OTH,Number=0,Type=Flag,Description="Has other variant with exactly the same set of mapped positions on NCBI refernce assembly.">
-##INFO=<ID=PH1,Number=0,Type=Flag,Description="Phase 1 genotyped: filtered, non-redundant">
-##INFO=<ID=PH2,Number=0,Type=Flag,Description="Phase 2 genotyped: filtered, non-redundant">
-##INFO=<ID=PH3,Number=0,Type=Flag,Description="Phase 3 genotyped: filtered, non-redundant">
-##INFO=<ID=PM,Number=0,Type=Flag,Description="Variant is Precious(Clinical,Pubmed Cited)">
-##INFO=<ID=PMC,Number=0,Type=Flag,Description="Links exist to PubMed Central article">
-##INFO=<ID=R3,Number=0,Type=Flag,Description="In 3' gene region FxnCode = 13">
-##INFO=<ID=R5,Number=0,Type=Flag,Description="In 5' gene region FxnCode = 15">
-##INFO=<ID=REF,Number=0,Type=Flag,Description="Has reference A coding region variation where one allele in the set is identical to the reference sequence. FxnCode = 8">
-##INFO=<ID=RSPOS,Number=1,Type=Integer,Description="Chr position reported in dbSNP">
-##INFO=<ID=RV,Number=0,Type=Flag,Description="RS orientation is reversed">
-##INFO=<ID=S3D,Number=0,Type=Flag,Description="Has 3D structure - SNP3D table">
-##INFO=<ID=SAO,Number=1,Type=Integer,Description="Variant Allele Origin: 0 - unspecified, 1 - Germline, 2 - Somatic, 3 - Both">
-##INFO=<ID=SCS,Number=1,Type=Integer,Description="Variant Clinical Significance, 0 - unknown, 1 - untested, 2 - non-pathogenic, 3 - probable-non-pathogenic, 4 - probable-pathogenic, 5 - pathogenic, 6 - drug-response, 7 - histocompatibility, 255 - other">
-##INFO=<ID=SLO,Number=0,Type=Flag,Description="Has SubmitterLinkOut - From SNP->SubSNP->Batch.link_out">
-##INFO=<ID=SSR,Number=1,Type=Integer,Description="Variant Suspect Reason Code, 0 - unspecified, 1 - Paralog, 2 - byEST, 3 - Para_EST, 4 - oldAlign, 5 - other">
-##INFO=<ID=SYN,Number=0,Type=Flag,Description="Has synonymous A coding region variation where one allele in the set does not change the encoded amino acid. FxnCode = 3">
-##INFO=<ID=TPA,Number=0,Type=Flag,Description="Provisional Third Party Annotation(TPA) (currently rs from PHARMGKB who will give phenotype data)">
-##INFO=<ID=U3,Number=0,Type=Flag,Description="In 3' UTR Location is in an untranslated region (UTR). FxnCode = 53">
-##INFO=<ID=U5,Number=0,Type=Flag,Description="In 5' UTR Location is in an untranslated region (UTR). FxnCode = 55">
-##INFO=<ID=VC,Number=1,Type=String,Description="Variation Class">
-##INFO=<ID=VLD,Number=0,Type=Flag,Description="Is Validated. This bit is set if the variant has 2+ minor allele count based on frequency or genotype data.">
-##INFO=<ID=VP,Number=1,Type=String,Description="Variation Property">
-##INFO=<ID=WGT,Number=1,Type=Integer,Description="Weight, 00 - unmapped, 1 - weight 1, 2 - weight 2, 3 - weight 3 or more">
-##INFO=<ID=WTD,Number=0,Type=Flag,Description="Is Withdrawn by submitter If one member ss is withdrawn by submitter, then this bit is set. If all member ss' are withdrawn, then the rs is deleted to SNPHistory">
-##INFO=<ID=dbSNPBuildID,Number=1,Type=Integer,Description="First dbSNP Build for RS">
-##LeftAlignVariants="analysis_type=LeftAlignVariants input_file=[] read_buffer_size=null phone_home=STANDARD read_filter=[] intervals=null excludeIntervals=null interval_set_rule=UNION interval_merging=ALL reference_sequence=/humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta rodBind=[] nonDeterministicRandomSeed=false downsampling_type=BY_SAMPLE downsample_to_fraction=null downsample_to_coverage=1000 baq=OFF baqGapOpenPenalty=40.0 performanceLog=null useOriginalQualities= [...]
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-##contig=<ID=GL000191.1,length=106433,assembly=b37>
-##contig=<ID=GL000192.1,length=547496,assembly=b37>
-##contig=<ID=GL000193.1,length=189789,assembly=b37>
-##contig=<ID=GL000194.1,length=191469,assembly=b37>
-##contig=<ID=GL000195.1,length=182896,assembly=b37>
-##contig=<ID=GL000196.1,length=38914,assembly=b37>
-##contig=<ID=GL000197.1,length=37175,assembly=b37>
-##contig=<ID=GL000198.1,length=90085,assembly=b37>
-##contig=<ID=GL000199.1,length=169874,assembly=b37>
-##contig=<ID=GL000200.1,length=187035,assembly=b37>
-##contig=<ID=GL000201.1,length=36148,assembly=b37>
-##contig=<ID=GL000202.1,length=40103,assembly=b37>
-##contig=<ID=GL000203.1,length=37498,assembly=b37>
-##contig=<ID=GL000204.1,length=81310,assembly=b37>
-##contig=<ID=GL000205.1,length=174588,assembly=b37>
-##contig=<ID=GL000206.1,length=41001,assembly=b37>
-##contig=<ID=GL000207.1,length=4262,assembly=b37>
-##contig=<ID=GL000208.1,length=92689,assembly=b37>
-##contig=<ID=GL000209.1,length=159169,assembly=b37>
-##contig=<ID=GL000210.1,length=27682,assembly=b37>
-##contig=<ID=GL000211.1,length=166566,assembly=b37>
-##contig=<ID=GL000212.1,length=186858,assembly=b37>
-##contig=<ID=GL000213.1,length=164239,assembly=b37>
-##contig=<ID=GL000214.1,length=137718,assembly=b37>
-##contig=<ID=GL000215.1,length=172545,assembly=b37>
-##contig=<ID=GL000216.1,length=172294,assembly=b37>
-##contig=<ID=GL000217.1,length=172149,assembly=b37>
-##contig=<ID=GL000218.1,length=161147,assembly=b37>
-##contig=<ID=GL000219.1,length=179198,assembly=b37>
-##contig=<ID=GL000220.1,length=161802,assembly=b37>
-##contig=<ID=GL000221.1,length=155397,assembly=b37>
-##contig=<ID=GL000222.1,length=186861,assembly=b37>
-##contig=<ID=GL000223.1,length=180455,assembly=b37>
-##contig=<ID=GL000224.1,length=179693,assembly=b37>
-##contig=<ID=GL000225.1,length=211173,assembly=b37>
-##contig=<ID=GL000226.1,length=15008,assembly=b37>
-##contig=<ID=GL000227.1,length=128374,assembly=b37>
-##contig=<ID=GL000228.1,length=129120,assembly=b37>
-##contig=<ID=GL000229.1,length=19913,assembly=b37>
-##contig=<ID=GL000230.1,length=43691,assembly=b37>
-##contig=<ID=GL000231.1,length=27386,assembly=b37>
-##contig=<ID=GL000232.1,length=40652,assembly=b37>
-##contig=<ID=GL000233.1,length=45941,assembly=b37>
-##contig=<ID=GL000234.1,length=40531,assembly=b37>
-##contig=<ID=GL000235.1,length=34474,assembly=b37>
-##contig=<ID=GL000236.1,length=41934,assembly=b37>
-##contig=<ID=GL000237.1,length=45867,assembly=b37>
-##contig=<ID=GL000238.1,length=39939,assembly=b37>
-##contig=<ID=GL000239.1,length=33824,assembly=b37>
-##contig=<ID=GL000240.1,length=41933,assembly=b37>
-##contig=<ID=GL000241.1,length=42152,assembly=b37>
-##contig=<ID=GL000242.1,length=43523,assembly=b37>
-##contig=<ID=GL000243.1,length=43341,assembly=b37>
-##contig=<ID=GL000244.1,length=39929,assembly=b37>
-##contig=<ID=GL000245.1,length=36651,assembly=b37>
-##contig=<ID=GL000246.1,length=38154,assembly=b37>
-##contig=<ID=GL000247.1,length=36422,assembly=b37>
-##contig=<ID=GL000248.1,length=39786,assembly=b37>
-##contig=<ID=GL000249.1,length=38502,assembly=b37>
-##contig=<ID=MT,length=16569,assembly=b37>
-##contig=<ID=X,length=155270560,assembly=b37>
-##contig=<ID=Y,length=59373566,assembly=b37>
-##dbSNP_BUILD_ID=135
-##fileDate=20111104
-##phasing=partial
-##reference=GRCh37.3
-##reference=file:///humgen/gsa-hpprojects/GATK/bundle/current/b37/human_g1k_v37.fasta
-##source=dbSNP
-##variationPropertyDocumentationUrl=ftp://ftp.ncbi.nlm.nih.gov/snp/specs/dbSNP_BitField_latest.pdf
-#CHROM POS ID REF ALT QUAL FILTER INFO
-1 10144 rs144773400 TA T . PASS ASP;RSPOS=10145;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1 10228 rs143255646 TA T . PASS ASP;RSPOS=10229;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1 10234 rs145599635 C T . PASS ASP;RSPOS=10234;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 10248 rs148908337 A T . PASS ASP;RSPOS=10248;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 10254 rs140194106 TA T . PASS ASP;RSPOS=10255;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1 10291 rs145427775 C T . PASS ASP;RSPOS=10291;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 10327 rs112750067 T C . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=10327;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=132
-1 10329 rs150969722 AC A . PASS ASP;RSPOS=10330;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1 10351 rs145072688 CTA C,CA . PASS ASP;RSPOS=10352;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1 10382 rs147093981 AAC A,AC . PASS ASP;RSPOS=10383;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1 10433 rs56289060 A AC . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=10433;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=129
-1 10439 rs112766696 AC A . PASS ASP;GENEINFO=LOC100652771:100652771;GNO;RSPOS=10440;SAO=0;SLO;SSR=0;VC=DIV;VP=050100000004000100000200;WGT=0;dbSNPBuildID=132
-1 10439 rs138941843 AC A . PASS ASP;RSPOS=10440;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=134
-1 10440 rs112155239 C A . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=10440;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=132
-1 10492 rs55998931 C T . PASS ASP;GENEINFO=LOC100652771:100652771;GMAF=0.0617001828153565;RSPOS=10492;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040000000100;WGT=0;dbSNPBuildID=129
-1 10519 rs62636508 G C . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=10519;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=129
-1 10583 rs58108140 G A . PASS ASP;GENEINFO=LOC100652771:100652771;GMAF=0.270566727605119;KGPilot123;RSPOS=10583;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040010000100;WGT=0;dbSNPBuildID=129
-1 10611 rs189107123 C G . PASS KGPilot123;RSPOS=10611;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 10828 rs10218492 G A . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=10828;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=119
-1 10904 rs10218493 G A . PASS ASP;GENEINFO=LOC100652771:100652771;GNO;RSPOS=10904;SAO=0;SSR=0;VC=SNV;VP=050000000004000100000100;WGT=0;dbSNPBuildID=119
-1 10927 rs10218527 A G . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=10927;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=119
-1 10938 rs28853987 G A . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=10938;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=125
-1 11014 rs28484712 G A . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=11014;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=125
-1 11022 rs28775022 G A . PASS ASP;GENEINFO=LOC100652771:100652771;RSPOS=11022;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=125
-1 11081 rs10218495 G T . PASS CFL;GENEINFO=LOC100652771:100652771;GNO;RSPOS=11081;SAO=0;SSR=0;VC=SNV;VP=050000000008000100000100;WGT=0;dbSNPBuildID=119
-1 11863 rs187669455 C A . PASS RSPOS=11863;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=135
-1 13302 rs180734498 C T . PASS KGPilot123;RSPOS=13302;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 13327 rs144762171 G C . PASS ASP;KGPilot123;RSPOS=13327;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 13684 rs71260404 C T . PASS GENEINFO=LOC100652771:100652771;GNO;RSPOS=13684;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1 13980 rs151276478 T C . PASS ASP;KGPilot123;RSPOS=13980;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 14889 rs142444908 G A . PASS ASP;RSPOS=14889;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 14907 rs79585140 A G . PASS GNO;RSPOS=14907;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040100000100;WGT=0;dbSNPBuildID=131
-1 14930 rs75454623 A G . PASS GNO;RSPOS=14930;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040100000100;WGT=0;dbSNPBuildID=131
-1 14976 rs71252251 G A . PASS ASP;GNO;RSPOS=14976;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000004000100000100;WGT=0;dbSNPBuildID=130
-1 15061 rs71268703 T TG . PASS ASP;GNO;RSPOS=15061;RV;SAO=0;SLO;SSR=0;VC=DIV;VP=050100000004000100000200;WGT=0;dbSNPBuildID=130
-1 15118 rs71252250 A G . PASS ASP;GNO;RSPOS=15118;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000004000100000100;WGT=0;dbSNPBuildID=130
-1 15211 rs144718396 T G . PASS ASP;RSPOS=15211;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 15211 rs78601809 T G . PASS ASP;GNO;RSPOS=15211;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1 16257 rs78588380 G C . PASS ASP;GNO;RSPOS=16257;SAO=0;SSR=0;VC=SNV;VP=050000000004000100000100;WGT=0;dbSNPBuildID=131
-1 16378 rs148220436 T C . PASS ASP;RSPOS=16378;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 16495 rs141130360 G C . PASS ASP;RSPOS=16495;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 16497 rs150723783 A G . PASS ASP;RSPOS=16497;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 17519 rs192890528 G T . PASS RSPOS=17519;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=135
-1 19226 rs138930629 T A . PASS ASP;RSPOS=19226;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 20141 rs56336884 G A . PASS HD;RSPOS=20141;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000400000100;WGT=0;dbSNPBuildID=129
-1 20144 rs143346096 G A . PASS ASP;RSPOS=20144;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 20206 rs71262675 C T . PASS GNO;RSPOS=20206;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1 20245 rs71262674 G A . PASS GMAF=0.256398537477148;GNO;RSPOS=20245;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1 20304 rs71262673 G C . PASS GMAF=0.338208409506399;GNO;RSPOS=20304;RV;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000000100000100;WGT=0;dbSNPBuildID=130
-1 26999 rs147506580 A G . PASS ASP;RSPOS=26999;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 29436 rs2462493 G A . PASS GNO;RSPOS=29436;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=100
-1 30923 rs140337953 G T . PASS ASP;KGPilot123;RSPOS=30923;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 33487 rs77459554 C T . PASS ASP;GNO;RSPOS=33487;SAO=0;SSR=0;VC=SNV;VP=050000000004000100000100;WGT=0;dbSNPBuildID=131
-1 33495 rs75468675 C T . PASS ASP;GNO;RSPOS=33495;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1 33505 rs75627161 T C . PASS ASP;GNO;RSPOS=33505;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1 33508 rs75609629 A T . PASS ASP;GNO;RSPOS=33508;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040100000100;WGT=0;dbSNPBuildID=131
-1 33521 rs76098219 T A . PASS GNO;RSPOS=33521;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040100000100;WGT=0;dbSNPBuildID=131
-1 33593 rs557585 G A . PASS RSPOS=33593;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=83
-1 33648 rs62028204 G T . PASS RSPOS=33648;RV;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=129
-1 33656 rs113821789 T C . PASS RSPOS=33656;RV;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=132
-1 51476 rs187298206 T C . PASS KGPilot123;RSPOS=51476;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 51479 rs116400033 T A . PASS ASP;G5;G5A;GMAF=0.113802559414991;KGPilot123;RSPOS=51479;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004070010000100;WGT=0;dbSNPBuildID=132
-1 51803 rs62637812 T C . PASS GMAF=0.468921389396709;RSPOS=51803;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000000040000000100;WGT=0;dbSNPBuildID=129
-1 51898 rs76402894 C A . PASS GMAF=0.0731261425959781;GNO;RSPOS=51898;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=131
-1 51914 rs190452223 T G . PASS KGPilot123;RSPOS=51914;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 51928 rs78732933 G A . PASS GNO;RSPOS=51928;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=131
-1 51935 rs181754315 C T . PASS KGPilot123;RSPOS=51935;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 51954 rs185832753 G C . PASS KGPilot123;RSPOS=51954;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 52058 rs62637813 G C . PASS GMAF=0.0342778793418647;KGPilot123;RSPOS=52058;SAO=0;SSR=1;VC=SNV;VLD;VP=050000000000040010000140;WGT=0;dbSNPBuildID=129
-1 52144 rs190291950 T A . PASS KGPilot123;RSPOS=52144;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 52238 rs150021059 T G . PASS ASP;KGPilot123;RSPOS=52238;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 54353 rs140052487 C A . PASS ASP;KGPilot123;RSPOS=54353;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 54421 rs146477069 A G . PASS ASP;KGPilot123;RSPOS=54421;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 54490 rs141149254 G A . PASS ASP;KGPilot123;RSPOS=54490;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 54676 rs2462492 C T . PASS ASP;GMAF=0.191956124314442;GNO;HD;KGPilot123;RSPOS=54676;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004040510000100;WGT=0;dbSNPBuildID=100
-1 54753 rs143174675 T G . PASS ASP;KGPilot123;RSPOS=54753;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 54788 rs59861892 CC C,CCT . PASS ASP;RSPOS=54789;SAO=0;SSR=0;VC=DIV;VP=050000000004000000000200;WGT=0;dbSNPBuildID=129
-1 54795 rs58014817 T A . PASS ASP;RSPOS=54795;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=129
-1 55164 rs3091274 C A . PASS G5;G5A;GMAF=0.145338208409506;GNO;KGPilot123;RSPOS=55164;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000030110000100;WGT=0;dbSNPBuildID=103
-1 55299 rs10399749 C T . PASS G5;G5A;GMAF=0.278793418647166;GNO;KGPilot123;PH2;RSPOS=55299;SAO=0;SLO;SSR=0;VC=SNV;VP=050100000000030112000100;WGT=0;dbSNPBuildID=119
-1 55302 rs3091273 C T . PASS RSPOS=55302;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=103
-1 55313 rs182462964 A T . PASS KGPilot123;RSPOS=55313;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55322 rs3107974 C T . PASS RSPOS=55322;SAO=0;SSR=0;VC=SNV;VP=050000000000000000000100;WGT=0;dbSNPBuildID=103
-1 55326 rs3107975 T C . PASS GNO;HD;KGPilot123;RSPOS=55326;SAO=0;SSR=0;VC=SNV;VP=050000000000000510000100;WGT=0;dbSNPBuildID=103
-1 55330 rs185215913 G A . PASS KGPilot123;RSPOS=55330;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55367 rs190850374 G A . PASS KGPilot123;RSPOS=55367;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55388 rs182711216 C T . PASS KGPilot123;RSPOS=55388;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55394 rs2949420 T A . PASS GNO;KGPilot123;PH2;RSPOS=55394;SAO=0;SSR=0;VC=SNV;VP=050000000000000112000100;WGT=0;dbSNPBuildID=101
-1 55416 rs193242050 G A . PASS KGPilot123;RSPOS=55416;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55427 rs183189405 T C . PASS KGPilot123;RSPOS=55427;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55545 rs28396308 C T . PASS GNO;RSPOS=55545;SAO=0;SSR=0;VC=SNV;VP=050000000000000100000100;WGT=0;dbSNPBuildID=125
-1 55816 rs187434873 G A . PASS KGPilot123;RSPOS=55816;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55850 rs191890754 C G . PASS KGPilot123;RSPOS=55850;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 55852 rs184233019 G C . PASS KGPilot123;RSPOS=55852;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 56644 rs143342222 A C . PASS ASP;KGPilot123;RSPOS=56644;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
-1 57952 rs189727433 A C . PASS KGPilot123;RSPOS=57952;SAO=0;SSR=0;VC=SNV;VP=050000000000000010000100;WGT=0;dbSNPBuildID=135
-1 58771 rs140128481 T C . PASS ASP;RSPOS=58771;SAO=0;SSR=0;VC=SNV;VP=050000000004000000000100;WGT=0;dbSNPBuildID=134
-1 58814 rs114420996 G A . PASS ASP;G5;GMAF=0.0982632541133455;KGPilot123;RSPOS=58814;SAO=0;SSR=0;VC=SNV;VLD;VP=050000000004050010000100;WGT=0;dbSNPBuildID=132
-1 59040 rs149755937 T C . PASS ASP;KGPilot123;RSPOS=59040;SAO=0;SSR=0;VC=SNV;VP=050000000004000010000100;WGT=0;dbSNPBuildID=134
diff --git a/testdata/variant/diagnosis_targets_testfile.vcf b/testdata/variant/diagnosis_targets_testfile.vcf
deleted file mode 100644
index fbe8d1e..0000000
--- a/testdata/variant/diagnosis_targets_testfile.vcf
+++ /dev/null
@@ -1,117 +0,0 @@
-##fileformat=VCFv4.1
-##DiagnoseTargets="analysis_type=DiagnoseTargets input_file=[/humgen/gsa-hpprojects/GATK/data/Validation_Data/CEUTrio.HiSeq.b37.chr20.10_11mb.bam] read_buffer_size=null phone_home=NO_ET gatk_key=/humgen/gsa-hpprojects/GATK/data/gatk_user_keys/gsamembers_broadinstitute.org.key read_filter=[] intervals=[/humgen/gsa-hpprojects/GATK/data/Validation_Data/DT-itest.interval_list] excludeIntervals=null interval_set_rule=UNION interval_merging=ALL interval_padding=0 reference_sequence=/humgen/1kg [...]
-##FILTER=<ID=BAD_MATE,Description="the reads are not properly mated, suggesting mapping errors">
-##FILTER=<ID=COVERAGE_GAPS,Description="absolutely no coverage was observed at a locus, regardless of the filtering parameters">
-##FILTER=<ID=EXCESSIVE_COVERAGE,Description="more than -maxDepth read at the locus, indicating some sort of mapping problem">
-##FILTER=<ID=LOW_COVERAGE,Description="there were less than min. depth bases at the locus, after applying filters">
-##FILTER=<ID=LOW_MEDIAN_DEPTH,Description="interval has insufficient median depth across samples">
-##FILTER=<ID=NO_READS,Description="there are no reads contained in the interval">
-##FILTER=<ID=PASS,Description="the base satisfied the min. depth for calling but had less than maxDepth to avoid having EXCESSIVE_COVERAGE">
-##FILTER=<ID=POOR_QUALITY,Description="more than --maxFractionOfReadsWithLowMAPQ at the locus, indicating a poor mapping quality of the reads">
-##FILTER=<ID=REF_N,Description="the reference base was an N, which is not considered callable the GATK">
-##FORMAT=<ID=AVG_INTERVAL_DP,Number=1,Type=Float,Description="Average depth across the interval. Sum of the depth in a loci divided by interval size.">
-##FORMAT=<ID=FT,Number=1,Type=String,Description="Genotype-level filter">
-##FORMAT=<ID=MED,Number=1,Type=Float,Description="Median of depth distribution.">
-##FORMAT=<ID=Q1,Number=1,Type=Float,Description="Lower Quartile of depth distribution.">
-##FORMAT=<ID=Q3,Number=1,Type=Float,Description="Upper Quartile of depth Distribution.">
-##INFO=<ID="Diagnose Targets",Number=0,Type=Flag,Description="DiagnoseTargets mode">
-##INFO=<ID=AVG_INTERVAL_DP,Number=1,Type=Float,Description="Average depth across the interval. Sum of the depth in a loci divided by interval size.">
-##INFO=<ID=END,Number=1,Type=Integer,Description="Stop position of the interval">
-##contig=<ID=1,length=249250621,assembly=b37>
-##contig=<ID=2,length=243199373,assembly=b37>
-##contig=<ID=3,length=198022430,assembly=b37>
-##contig=<ID=4,length=191154276,assembly=b37>
-##contig=<ID=5,length=180915260,assembly=b37>
-##contig=<ID=6,length=171115067,assembly=b37>
-##contig=<ID=7,length=159138663,assembly=b37>
-##contig=<ID=8,length=146364022,assembly=b37>
-##contig=<ID=9,length=141213431,assembly=b37>
-##contig=<ID=10,length=135534747,assembly=b37>
-##contig=<ID=11,length=135006516,assembly=b37>
-##contig=<ID=12,length=133851895,assembly=b37>
-##contig=<ID=13,length=115169878,assembly=b37>
-##contig=<ID=14,length=107349540,assembly=b37>
-##contig=<ID=15,length=102531392,assembly=b37>
-##contig=<ID=16,length=90354753,assembly=b37>
-##contig=<ID=17,length=81195210,assembly=b37>
-##contig=<ID=18,length=78077248,assembly=b37>
-##contig=<ID=19,length=59128983,assembly=b37>
-##contig=<ID=20,length=63025520,assembly=b37>
-##contig=<ID=21,length=48129895,assembly=b37>
-##contig=<ID=22,length=51304566,assembly=b37>
-##contig=<ID=X,length=155270560,assembly=b37>
-##contig=<ID=Y,length=59373566,assembly=b37>
-##contig=<ID=MT,length=16569,assembly=b37>
-##contig=<ID=GL000207.1,length=4262,assembly=b37>
-##contig=<ID=GL000226.1,length=15008,assembly=b37>
-##contig=<ID=GL000229.1,length=19913,assembly=b37>
-##contig=<ID=GL000231.1,length=27386,assembly=b37>
-##contig=<ID=GL000210.1,length=27682,assembly=b37>
-##contig=<ID=GL000239.1,length=33824,assembly=b37>
-##contig=<ID=GL000235.1,length=34474,assembly=b37>
-##contig=<ID=GL000201.1,length=36148,assembly=b37>
-##contig=<ID=GL000247.1,length=36422,assembly=b37>
-##contig=<ID=GL000245.1,length=36651,assembly=b37>
-##contig=<ID=GL000197.1,length=37175,assembly=b37>
-##contig=<ID=GL000203.1,length=37498,assembly=b37>
-##contig=<ID=GL000246.1,length=38154,assembly=b37>
-##contig=<ID=GL000249.1,length=38502,assembly=b37>
-##contig=<ID=GL000196.1,length=38914,assembly=b37>
-##contig=<ID=GL000248.1,length=39786,assembly=b37>
-##contig=<ID=GL000244.1,length=39929,assembly=b37>
-##contig=<ID=GL000238.1,length=39939,assembly=b37>
-##contig=<ID=GL000202.1,length=40103,assembly=b37>
-##contig=<ID=GL000234.1,length=40531,assembly=b37>
-##contig=<ID=GL000232.1,length=40652,assembly=b37>
-##contig=<ID=GL000206.1,length=41001,assembly=b37>
-##contig=<ID=GL000240.1,length=41933,assembly=b37>
-##contig=<ID=GL000236.1,length=41934,assembly=b37>
-##contig=<ID=GL000241.1,length=42152,assembly=b37>
-##contig=<ID=GL000243.1,length=43341,assembly=b37>
-##contig=<ID=GL000242.1,length=43523,assembly=b37>
-##contig=<ID=GL000230.1,length=43691,assembly=b37>
-##contig=<ID=GL000237.1,length=45867,assembly=b37>
-##contig=<ID=GL000233.1,length=45941,assembly=b37>
-##contig=<ID=GL000204.1,length=81310,assembly=b37>
-##contig=<ID=GL000198.1,length=90085,assembly=b37>
-##contig=<ID=GL000208.1,length=92689,assembly=b37>
-##contig=<ID=GL000191.1,length=106433,assembly=b37>
-##contig=<ID=GL000227.1,length=128374,assembly=b37>
-##contig=<ID=GL000228.1,length=129120,assembly=b37>
-##contig=<ID=GL000214.1,length=137718,assembly=b37>
-##contig=<ID=GL000221.1,length=155397,assembly=b37>
-##contig=<ID=GL000209.1,length=159169,assembly=b37>
-##contig=<ID=GL000218.1,length=161147,assembly=b37>
-##contig=<ID=GL000220.1,length=161802,assembly=b37>
-##contig=<ID=GL000213.1,length=164239,assembly=b37>
-##contig=<ID=GL000211.1,length=166566,assembly=b37>
-##contig=<ID=GL000199.1,length=169874,assembly=b37>
-##contig=<ID=GL000217.1,length=172149,assembly=b37>
-##contig=<ID=GL000216.1,length=172294,assembly=b37>
-##contig=<ID=GL000215.1,length=172545,assembly=b37>
-##contig=<ID=GL000205.1,length=174588,assembly=b37>
-##contig=<ID=GL000219.1,length=179198,assembly=b37>
-##contig=<ID=GL000224.1,length=179693,assembly=b37>
-##contig=<ID=GL000223.1,length=180455,assembly=b37>
-##contig=<ID=GL000195.1,length=182896,assembly=b37>
-##contig=<ID=GL000212.1,length=186858,assembly=b37>
-##contig=<ID=GL000222.1,length=186861,assembly=b37>
-##contig=<ID=GL000200.1,length=187035,assembly=b37>
-##contig=<ID=GL000193.1,length=189789,assembly=b37>
-##contig=<ID=GL000194.1,length=191469,assembly=b37>
-##contig=<ID=GL000225.1,length=211173,assembly=b37>
-##contig=<ID=GL000192.1,length=547496,assembly=b37>
-##reference=file:///humgen/1kg/reference/human_g1k_v37.fasta
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 NA12891 NA12892
-20 10000023 . T <DT> . PASS AVG_INTERVAL_DP=206.11;END=10001189 AVG_INTERVAL_DP:MED:Q1:Q3 68.95:69.00:57.50:80.00 67.11:69.00:54.00:80.00 70.05:74.00:58.00:81.00
-20 10002751 . T <DT> . PASS AVG_INTERVAL_DP=198.60;END=10021423 AVG_INTERVAL_DP:MED:Q1:Q3 69.75:74.00:61.00:81.00 64.78:69.00:56.00:78.00 64.07:66.00:56.00:77.00
-20 10094508 . A <DT> . PASS AVG_INTERVAL_DP=217.07;END=10096841 AVG_INTERVAL_DP:MED:Q1:Q3 76.65:75.00:69.00:83.00 71.52:73.00:65.00:80.00 68.90:69.00:63.00:75.00
-20 10098364 . G <DT> . LOW_COVERAGE;LOW_MEDIAN_DEPTH AVG_INTERVAL_DP=5.49;END=10098654 AVG_INTERVAL_DP:FT:MED:Q1:Q3 0.766:LOW_COVERAGE:1.00:1.00:1.00 0.880:COVERAGE_GAPS;LOW_COVERAGE:1.00:0.00:1.00 3.85:LOW_COVERAGE:2.00:2.00:6.00
-20 10153007 . G <DT> . PASS AVG_INTERVAL_DP=61.42;END=10153151 AVG_INTERVAL_DP:MED:Q1:Q3 25.07:24.00:19.00:29.00 16.37:15.00:11.00:25.00 19.99:17.00:14.00:27.00
-20 10199324 . T <DT> . LOW_COVERAGE;LOW_MEDIAN_DEPTH AVG_INTERVAL_DP=28.87;END=10199468 AVG_INTERVAL_DP:FT:MED:Q1:Q3 5.12:LOW_COVERAGE:3.00:1.00:7.00 9.19:LOW_COVERAGE:9.00:4.00:13.00 14.56:PASS:14.00:10.00:19.00
-20 10267798 . T <DT> . PASS AVG_INTERVAL_DP=79.25;END=10268380 AVG_INTERVAL_DP:MED:Q1:Q3 32.66:29.00:20.00:50.00 22.02:19.00:11.00:37.00 24.57:21.00:10.00:39.00
-20 10375592 . G <DT> . LOW_MEDIAN_DEPTH AVG_INTERVAL_DP=18.73;END=10376174 AVG_INTERVAL_DP:FT:MED:Q1:Q3 8.29:PASS:8.00:2.00:14.00 5.42:PASS:5.00:3.00:7.00 5.02:POOR_QUALITY:4.00:2.00:7.00
-20 10528943 . T <DT> . PASS AVG_INTERVAL_DP=206.86;END=10566288 AVG_INTERVAL_DP:MED:Q1:Q3 72.22:72.00:64.00:81.00 66.76:68.00:59.00:76.00 67.89:69.00:59.00:78.00
-20 10655065 . T <DT> . LOW_COVERAGE;LOW_MEDIAN_DEPTH AVG_INTERVAL_DP=9.86;END=10655136 AVG_INTERVAL_DP:FT:MED:Q1:Q3 0.931:COVERAGE_GAPS;LOW_COVERAGE:1.00:0.00:1.00 3.01:LOW_COVERAGE:3.00:2.00:3.50 5.92:PASS:6.00:5.00:7.00
-20 10958482 . C <DT> . PASS AVG_INTERVAL_DP=93.29;END=10958626 AVG_INTERVAL_DP:MED:Q1:Q3 22.12:19.00:15.00:28.00 32.63:34.00:28.00:37.00 38.53:37.00:34.00:41.00
-20 10999884 . A <DT> . COVERAGE_GAPS AVG_INTERVAL_DP=125.93;END=11000174 AVG_INTERVAL_DP:FT:MED:Q1:Q3 44.32:COVERAGE_GAPS:61.00:0.00:74.00 41.63:COVERAGE_GAPS:47.00:0.00:68.00 39.98:COVERAGE_GAPS:48.00:0.00:70.00
diff --git a/testdata/variant/ex2.bgzf.bcf b/testdata/variant/ex2.bgzf.bcf
deleted file mode 100755
index eaa40af..0000000
Binary files a/testdata/variant/ex2.bgzf.bcf and /dev/null differ
diff --git a/testdata/variant/ex2.bgzf.bcf.csi b/testdata/variant/ex2.bgzf.bcf.csi
deleted file mode 100755
index 722375b..0000000
Binary files a/testdata/variant/ex2.bgzf.bcf.csi and /dev/null differ
diff --git a/testdata/variant/ex2.uncompressed.bcf b/testdata/variant/ex2.uncompressed.bcf
deleted file mode 100755
index d0e41aa..0000000
Binary files a/testdata/variant/ex2.uncompressed.bcf and /dev/null differ
diff --git a/testdata/variant/ex2.vcf b/testdata/variant/ex2.vcf
deleted file mode 100644
index 17b1896..0000000
--- a/testdata/variant/ex2.vcf
+++ /dev/null
@@ -1,23 +0,0 @@
-##fileformat=VCFv4.1
-##reference=file:///seq/references/1000GenomesPilot-NCBI36.fasta
-##contig=<ID=20,length=62435964,assembly=B36,md5=f126cdf8a6e0c7f379d618ff66beb2da,species="Homo sapiens">
-##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">
-##INFO=<ID=HOMSEQ,Number=.,Type=String>
-##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">
-##FORMAT=<ID=CNL,Number=.,Type=Integer>
-#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002 NA00003
-20 14370 rs6054257 G A 29.1 . NS=3;DP=14;AF=0.5;HOMSEQ;DB GT:GQ:DP:HQ:CNL 0|0:48:1:25,30:10,20 1|0:48:8:49,51:. ./.:43:5:.,.:1
-20 17330 . T A . q10;s50 NS=3;DP=11;AF=0.017;H2 GT:GQ:DP:HQ 0|0:49:3:58,50 0|1:3:5:65,3 0/0:41:3:4,5
-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:10,20
-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 ./.
-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
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/picard-tools.git
More information about the debian-med-commit
mailing list